pax_global_header00006660000000000000000000000064145245744640014531gustar00rootroot0000000000000052 comment=003cdb0117a4a2614bc0f63a6494b53610c4db47 pspg-5.8.1/000077500000000000000000000000001452457446400125155ustar00rootroot00000000000000pspg-5.8.1/.editorconfig000066400000000000000000000002671452457446400151770ustar00rootroot00000000000000root = true [*.{c,h,l,y,pl,pm}] indent_style = tab indent_size = tab tab_width = 4 [*.{sgml,xml}] indent_style = space indent_size = 1 [*.xsl] indent_style = space indent_size = 2 pspg-5.8.1/.github/000077500000000000000000000000001452457446400140555ustar00rootroot00000000000000pspg-5.8.1/.github/workflows/000077500000000000000000000000001452457446400161125ustar00rootroot00000000000000pspg-5.8.1/.github/workflows/linux.yml000066400000000000000000000004141452457446400177730ustar00rootroot00000000000000name: build Linux on: push: branches: [ "master" ] pull_request: branches: [ "master" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: configure run: ./configure - name: make run: make pspg-5.8.1/.github/workflows/macos.yml000066400000000000000000000006651452457446400177460ustar00rootroot00000000000000name: Build macos on: push: branches: [ "master" ] pull_request: branches: [ "master" ] jobs: build: runs-on: macos-latest steps: - uses: actions/checkout@v3 - name: configure run: LDFLAGS="-L/usr/local/opt/readline/lib" CPPFLAGS="-I/usr/local/opt/readline/include" ./configure - name: make run: LDFLAGS="-L/usr/local/opt/readline/lib" CPPFLAGS="-I/usr/local/opt/readline/include" make pspg-5.8.1/.gitignore000066400000000000000000000007511452457446400145100ustar00rootroot00000000000000# Prerequisites *.d # Object files *.o *.ko *.obj *.elf # Linker output *.ilk *.map *.exp # Precompiled Headers *.gch *.pch # Libraries *.lib *.a *.la *.lo # Shared objects (inc. Windows DLLs) *.dll *.so *.so.* *.dylib # Executables *.exe *.out *.app *.i*86 *.x86_64 *.hex # Debug files *.dSYM/ *.su *.idb *.pdb # Kernel Module Compile Results *.mod* *.cmd .tmp_versions/ modules.order Module.symvers Mkfile.old dkms.conf pspg /config.cache /config.log /config.status /config.makepspg-5.8.1/LICENSE000066400000000000000000000024531452457446400135260ustar00rootroot00000000000000BSD 2-Clause License Copyright (c) 2017-2023, Pavel Stehule 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. pspg-5.8.1/Makefile000066400000000000000000000071731452457446400141650ustar00rootroot00000000000000all: # Include setting from the configure script -include config.make # override CFLAGS += -g -O2 -Werror-implicit-function-declaration -D_POSIX_SOURCE=1 -std=c99 -Wextra -Wduplicated-cond -Wduplicated-branches -Wlogical-op -Wrestrict -Wnull-dereference -Wjump-misses-init -Wdouble-promotion -Wshadow -pedantic -fstack-protector-all -fsanitize=address -fstack-protector -fstack-protector-strong # LDFLAGS += -fsanitize=address DEPS=$(wildcard *.d) PSPG_OFILES=csv.o print.o commands.o unicode.o themes.o pspg.o config.o sort.o pgclient.o args.o infra.o \ table.o string.o export.o linebuffer.o bscommands.o readline.o inputs.o theme_loader.o OBJS=$(PSPG_OFILES) ifdef COMPILE_MENU ST_MENU_OFILES=st_menu.o st_menu_styles.o menu.o OBJS+=$(ST_MENU_OFILES) endif all: pspg st_menu_styles.o: src/st_menu_styles.c config.make $(CC) src/st_menu_styles.c -c $(CPPFLAGS) $(CFLAGS) st_menu.o: src/st_menu.c config.make $(CC) src/st_menu.c -c $(CPPFLAGS) $(CFLAGS) csv.o: src/pspg.h src/unicode.h src/pretty-csv.c $(CC) -c src/pretty-csv.c -o csv.o $(CPPFLAGS) $(CFLAGS) args.o: src/pspg.h src/args.c $(CC) -c src/args.c -o args.o $(CPPFLAGS) $(CFLAGS) print.o: src/pspg.h src/unicode.h src/print.c $(CC) -c src/print.c -o print.o $(CPPFLAGS) $(CFLAGS) commands.o: src/pspg.h src/commands.h src/commands.c $(CC) -c src/commands.c -o commands.o $(CPPFLAGS) $(CFLAGS) config.o: src/config.h src/config.c $(CC) -c src/config.c -o config.o $(CPPFLAGS) $(CFLAGS) unicode.o: src/unicode.h src/unicode.c $(CC) -c src/unicode.c -o unicode.o $(CPPFLAGS) $(CFLAGS) themes.o: src/themes.h src/themes.c $(CC) -c src/themes.c -o themes.o $(CPPFLAGS) $(CFLAGS) sort.o: src/pspg.h src/sort.c $(CC) -c src/sort.c -o sort.o $(CPPFLAGS) $(CFLAGS) menu.o: src/pspg.h src/st_menu.h src/commands.h src/menu.c $(CC) -c src/menu.c -o menu.o $(CPPFLAGS) $(CFLAGS) pgclient.o: src/pspg.h src/pgclient.c $(CC) -c src/pgclient.c -o pgclient.o $(CPPFLAGS) $(CFLAGS) $(PG_CPPFLAGS) infra.o: src/pspg.h src/infra.c $(CC) -c src/infra.c -o infra.o $(CPPFLAGS) $(CFLAGS) table.o: src/pspg.h src/table.c $(CC) -c src/table.c -o table.o $(CPPFLAGS) $(CFLAGS) string.o: src/pspg.h src/string.c $(CC) -c src/string.c -o string.o $(CPPFLAGS) $(CFLAGS) export.o: src/pspg.h src/export.c $(CC) -c src/export.c -o export.o $(CPPFLAGS) $(CFLAGS) linebuffer.o: src/pspg.h src/linebuffer.c $(CC) -c src/linebuffer.c -o linebuffer.o $(CPPFLAGS) $(CFLAGS) readline.o: src/pspg.h src/readline.c $(CC) src/readline.c -c $(CPPFLAGS) $(CFLAGS) inputs.o: src/pspg.h src/inputs.h src/inputs.c $(CC) src/inputs.c -c $(CPPFLAGS) $(CFLAGS) bscommands.o: src/pspg.h src/bscommands.c $(CC) src/bscommands.c -c $(CPPFLAGS) $(CFLAGS) theme_loader.o: src/pspg.h src/themes.h src/theme_loader.c $(CC) src/theme_loader.c -c $(CPPFLAGS) $(CFLAGS) pspg.o: src/commands.h src/config.h src/unicode.h src/themes.h src/inputs.h src/pspg.c $(CC) -c src/pspg.c -o pspg.o $(CPPFLAGS) $(CFLAGS) pspg: $(PSPG_OFILES) $(ST_MENU_OFILES) config.make $(CC) $(PSPG_OFILES) $(ST_MENU_OFILES) -o pspg $(LDFLAGS) $(LDLIBS) $(PG_LFLAGS) $(PG_LDFLAGS) $(PG_LIBS) man: ronn --manual="pspg manual" --section=1 < README.md > pspg.1 clean: $(RM) $(ST_MENU_OFILES) $(RM) $(PSPG_OFILES) $(RM) $(DEPS) $(RM) pspg distclean: clean $(RM) -r autom4te.cache $(RM) aclocal.m4 configure $(RM) config.h config.log config.make config.status config.h.in install: all tools/install.sh bin pspg "$(DESTDIR)$(bindir)" man-install: tools/install.sh data pspg.1 "$(mandir)/man1" strip-install: all strip pspg tools/install.sh bin pspg "$(DESTDIR)$(bindir)" # Pull-in dependencies generated by -MD -include $(OBJS:.o=.d) pspg-5.8.1/PDCurses.md000066400000000000000000000020071452457446400145260ustar00rootroot00000000000000Compilation ----------- I tested build and execution against pdcursesmod 4.3.5, and it works. In this moment (Thu Dec 22 05:22:51 CET 2022), pdcurses should be patched (https://github.com/Bill-Gray/PDCursesMod/issues/256), but with patch (or after fixing this issue), pspg can be compiled against pdcurses and works well. Compilation of pdcurses on Linux (pdcurses for VT) -------------------------------------------------- cd ~/src/PDCursesMod/vt make clean make DLL=Y WIDE=Y UTF8=Y DEBUG=Y sudo make DLL=Y WIDE=Y UTF8=Y DEBUG=Y install sudo cp libpdcurses.so /usr/lib sudo ldconfig /usr/lib Maybe can be necessary to copy header files to `/usr/local/include/pdcurses`. Note - the directory should be fresh after git sync without running cmake. Compilation of pspg on pdcurses ------------------------------- PANEL_LIBS=-lpdcurses CURSES_LIBS=-lpdcurses\ CURSES_CFLAGS="-I/usr/local/include/pdcurses -DPDC_WIDE=Y -DPDC_FORCE_UTF8=Y -L/usr/lib"\ ./configure -libdir=/usr/lib make pspg-5.8.1/README.md000066400000000000000000001131011452457446400137710ustar00rootroot00000000000000[![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg)](https://stand-with-ukraine.pp.ua) # pspg - Postgres Pager Everybody who uses `psql` also uses the `less` pager. Which, while it works well, has no special support for tabular data. I found a few projects, but none was good enough for this purpose. Thus I decided to write a small specialized pager to use as a `psql` pager. This pager can be used from the following command line clients, too: - `mysql` - `sqlite` - [`pgcli`](https://github.com/dbcli/pgcli/) - `monetdb` - [`Trino (formerly Presto SQL)`](https://trino.io/) - [`usql`](https://github.com/xo/usql/) - [`sqlcl`](https://github.com/okbob/pspg/#sqlcl) (for oracle) - [`nushell`](https://www.nushell.sh/) ## Main target * ability to freeze the first few rows, or first few columns * ability to sort data by the specified numeric column * ability to use fancy themes - like `mcview` or `FoxPro` - http://okbob.blogspot.com/2019/12/pspg-themes-what-you-use-it.html * mouse is supported and used * ability to copy a selected range to the clipboard ## Video presentation [![Video presentation](https://img.youtube.com/vi/JyxuEkoYDQk/0.jpg)](https://www.youtube.com/watch?v=JyxuEkoYDQk) ## Screenshots ![Screenshot](screenshots/pspg-4.3.0-mc-export-111x34.png) ![Screenshot](screenshots/pspg-4.3.0-mc-111x34.png) ![Screenshot](screenshots/pspg-4.3.0-foxpro-111x34.png) ![Screenshot](screenshots/pspg-4.3.0-tao-111x34.png) ![Screenshot](screenshots/pspg-4.3.0-green-search-111x34.png) ![Screenshot](screenshots/theme1.gif) ![Screenshot](screenshots/theme3.gif) ## Options [pavel@localhost ~]$ pspg --help pspg is a Unix pager designed for table browsing. Usage: pspg [OPTION] [file] General options: --about about authors --help show this help -V, --version show version --info show info about libraries and system --direct-color force direct-color terminal mode -f, --file=FILE open file -F, --quit-if-one-screen quit if content is one screen --clipboard-app=NUM specify app used by copy to clipboard (1, 2, 3) --esc-delay=NUM specify escape delay in ms (-1 inf, 0 not used, ) --interactive force interactive mode --ignore_file_suffix don't try to deduce format from file suffix --ni not interactive mode (only for csv and query) --no-watch-file don't watch inotify event of file --no-mouse don't use own mouse handling --no-progressive-load don't use progressive data load --no-sigint-search-reset without reset searching on sigint (CTRL C) --no-sleep without waits against flickering --no_xterm_mouse_mode don't use optional xterm mouse mode --only-for-tables use std pager when content is not table --on-sigint-exit exit on sigint(CTRL C or Escape) --pgcli-fix try to fix some pgcli related issues --querystream read queries from stream forever --quit-on-f3 exit on F3 like mc viewers --rr=ROWNUM rows reserved for specific purposes --stream read input forever -X, --reprint-on-exit preserve content after exit Output format options: -a, --ascii force ascii -b, --blackwhite black-white style -s, --style=N set color style number (0..22) --bold-labels row, column labels use bold font --bold-cursor cursor use bold font --border type of borders (0..2) --double-header header separator uses double lines --force-uniborder replace ascii borders by unicode borders --highlight-odd-rec highlights odd records (when it is supported by style) --hide-header-line hides header line (between column names and data) --ignore-short-rows rows with wrong column numbers are ignored --null=STRING STRING used instead NULL Searching options -g --hlite-search, -G --HILITE-SEARCH don't highlight lines for searches -i --ignore-case ignore case in searches that do not contain uppercase -I --IGNORE-CASE ignore case in all searches Interface options: -c, --freezecols=N freeze N columns (0..9) --less-status-bar status bar like less pager --line-numbers show line number column --menu-always show top bar menu every time --no-bars, --no-commandbar, --no-topbar don't show bottom, top bar or both --no-cursor row cursor will be hidden --no-last-row-search don't use the last pattern when starting a new search --no-scrollbar don't show scrollbar --no-sound don't use beep when scroll is not possible --tabular-cursor cursor is visible only when data has table format --vertical-cursor show vertical column cursor Input format options: --csv input stream has csv format --csv-separator char used as field separator --csv-header [on/off] specify header line usage --skip-columns-like="SPACE SEPARATED STRING LIST" columns with substr in name are ignored --csv-trim-width=NUM trim value after NUM chars --csv-trim-rows=NUM trim value after NUM rows --tsv input stream has tsv format On exit options: --on-exit-reset sends reset terminal sequence "\33c" --on-exit-clean sends clean terminal sequence "\033[2J" --on-exit-erase-line sends erase line terminal sequence "\33[2K\r" --on-exit-sgr0 sends sgr0 terminal sequence "\033[0;10m" Watch mode options: -q, --query=QUERY execute query -w, --watch time the query (or read file) is repeated every time (sec) Connection options: -d, --dbname=DBNAME database name -h, --host=HOSTNAME database server host (default: "local socket") -p, --port=PORT database server port (default: "5432") -U, --username=USERNAME database user name -W, --password force password prompt Debug options: --log=FILE log debug info to file --wait=NUM wait NUM seconds to allow attach from a debugger pspg shares a lot of key commands with the less pager or the vi editor. Options can be passed within the environment variable `PSPG`, too. ## Environment variables | Name | Usage | |---------------|-------------------------------------------| |`PSPG` | can hold same options like command line | |`PSPG_CONF` | path to configuration file | |`PSPG_HISTORY` | path to file pspg's readline history file | ## Themes |Code| Name | |---:|---------------------------------------| | 0 | black & white | | 1 | Midnight Commander like | | 2 | FoxPro like | | 3 | Pdmenu like | | 4 | White theme | | 5 | Mutt like | | 6 | PCFand like | | 7 | Green theme | | 8 | Blue theme | | 9 | Word Perfect like | | 10 | Low contrast blue theme | | 11 | Dark cyan/black mode | | 12 | Paradox like | | 13 | dBase IV retro style | | 14 | dBase IV retro style (Magenta labels) | | 15 | Red white theme | | 16 | Simple theme | | 17 | Solarized dark theme | | 18 | Solarized light theme | | 19 | Gruvbox light theme | | 20 | Tao Light theme | | 21 | FlatWhite theme | | 22 | Relational pipes theme | | 23 | Paper Color theme | see http://okbob.blogspot.cz/2017/07/i-hope-so-every-who-uses-psql-uses-less.html ### Custom themes The theme can be customized over base and menu templates referencing the built-in themes. The custom theme file should be saved in directory with `pspg` configuration. The name of this file should be .pspg_theme_xxx. The custom theme can be selected by command line option `--custom-style=name` or by command `\ctheme name`. ![Screenshot](screenshots/pspg-5.4.0-custom-theme.png) Example of a custom theme file (named `.pspg_theme_mc2` (it can be activated by command `\ctheme mc2`)): template = 1 template_menu = 3 background = black, white data = black, white label = black, white, italic, bold border = #000000, white footer = lightgray, white cursor_data = blue, white, italic, bold, dim, reverse cursor_border = blue, blue , italic, bold, dim, reverse cursor_label = blue, white, italic, bold, dim, reverse cursor_footer = blue, white, italic, bold, dim, reverse cursor_bookmark = red, white, italic, bold, dim, reverse cross_cursor = white, blue, italic, bold cross_cursor_border = brightblue, blue status_bar = black, lightgray title = black, lightgray scrollbar_arrows = black, white scrollbar_background = lightgray, white scrollbar_slider = white, gray Some keys can be marked by symbol `*`. Marked keys are used for odd records. data* = black, lightgray label* = black, lightgray, italic, bold border* = #000000, lightgray `template` and `template_menu` set fallback values for any keys not specified in the custom theme. `template_menu` in particular is currently the only way to customize the F9 menu appearance. | key | customizes | |---------------------------------------|---------------------------------------------------------------------| | `background` | Background color | | `data` | Data (non-header or frozen column) text | | `border` | Border color | | `label` | Label (header or frozen column) text | | `row_number` | Line numbers | | `record_number` | | | `selected_area` | | | `footer` | Results footer (non-tabular e.g. rowcount) | | `cursor_data` | Highlighted data (non-header or frozen column) text | | `cursor_border` | Highlighted border color | | `cursor_label` | Highlighted label (header or frozen column) text | | `cursor_row_number` | Highlighted line numbers | | `cursor_record_number` | | | `cursor_selected_area` | | | `cursor_footer` | Highlighted results footer (non-tabular e.g. rowcount) | | `scrollbar_arrows` | Scrollbar up and down arrows | | `scrollbar_background` | Scrollbar "empty" background | | `scrollbar_slider` | Scrollbar slider over the background | | `scrollbar_active_slider` | Scrollbar slider grabbed by mouse | | `title` | Results headline (in psql describe commands) | | `status_bar` | Top query and cursor location information | | `prompt_bar` | | | `info_bar` | Info text (e.g. "Not found" when searching) | | `input_bar` | Input prompt and text (e.g. search) | | `error_bar` | | | `bookmark` | | | `bookmark_border` | | | `cursor_bookmark` | | | `cross_cursor` | Highlighted cell at intersection of horizontal and vertical cursors | | `cross_cursor_border` | Borders at intersection of horizontal and vertical cursors | | `matched_pattern` | Search result match text | | `matched_pattern_nohl` | | | `matched_line` | Line containing search result | | `matched_line_border` | Borders in search result line | | `matched_pattern_cursor` | Highlighted search result match text | | `matched_line_vertical_cursor` | Vertically highlighted search result match text | | `matched_line_vertical_cursor_border` | Borders of vertically highlighted cell with search result match | | `error` | | ANSI colors `Black`, `Red`, `Green`, `Brown`, `Blue`, `Magenta`, `Cyan`, `LightGray`, `Gray`, `BrightRed`, `BrightGreen`, `Yellow`, `BrightBlue`, `BrightMagenta`, `BrightCyan`, `White`, and `Default` will display as your terminal emulator configures them. Alternatively, you can specify hex RGB values `#FF00FF`. Styles are any combination of: `bold`, `italic`, `underline`, `reverse`, `standout`, `dim`. If the format of some key is not correct, then this row is ignored. For debugging of custom theme is good to start `pspg` with option `--log`. An information about broken definitions are stored in log file. ## Keyboard commands | Key(s) | Command | |--------------------------------------------------------------------------|---------------------------------------------------------------------| | 0, 1, 2, 3, .., 9 | freeze first N columns | | KEY_UP, k | navigate backward by one line | | KEY_DOWN, j | navigate forward by one line | | KEY_LEFT, h | scroll to left | | KEY_RIGHT, l | scroll to right | | Ctrl+KEY_LEFT | scroll one char left | | Ctrl+KEY_RIGHT | scroll one char right | | Shift+KEY_LEFT | scroll one column left | | Shift+KEY_RIGHT | scroll one column right | | Ctrl+Home, g | go to the start of file | | Ctrl+End, G | go to the end of file | | Alt+l | go to line number | | H | go to first line of current window | | M | go to half of current window | | L | go to end of current window | | PPAGE, Ctrl+b | backward one window | | NPAGE, Ctrl+f, space | forward one window | | HOME, ^ | go to begin of line, first column | | END, $ | go to end of line, last column | | Ctrl+e | scroll a window down | | Ctrl+y | scroll a window up | | Ctrl+d | forward a half window | | Ctrl+u | backward a half window | | s | save content to file | | / | search for a pattern which will take you to the next occurrence | | ? | search for a pattern which will take you to the previous occurrence | | n | for next match | | N | for next match in reverse direction | | c | column search | | Alt+/ | search for a pattern inside selected area | | Alt+? | backward search for a pattern inside selected area | | Alt+c | switch (on, off) drawing line cursor | | Alt+m | switch (on, off) own mouse handler | | Alt+n | switch (on, off) drawing line numbers | | Alt+v, double click on column header | switch (on, off) drawing column cursor | | Mouse button wheel | scroll vertical | | Alt+Mouse button wheel | scroll horizontal | | F9 | show menu | | q, F10, Esc 0 | quit | | Alt+q | quit and print raw (unformatted) content | | Alt+k, Alt+double click | switch bookmark | | Alt+j | go to next bookmark | | Alt+i | go to previous bookmark | | Alt+o | flush bookmarks | | a | sort ascendent | | d | sort descendent | | u | unsorted (sorted in origin order) | | Space | stop/continue in watch mode | | R | Repaint screen and refresh input file | | Ins | export row, column or cell to default target | | shift+cursor... | define range | | F3 | start/finish of selection rows | | Shift+F3 | start/finish of selection block | | Ctrl+drag mouse | defines rows selection, on column header defines column selection | | Ctrl+o | show primary screen, press any key to return to pager again | | %, Ctrl+a | select all | ## Backslash commands | Command | Description | |--------------------------------------------------------------|----------------------------| | `\N` | go to line number | | `\+N` | go to N lines forward | | `\-N` | go to N lines backward | | `\N+` | go to line number | | `\N-` | go to line number from end | | `\theme N` | set theme number | | `\copy [all\|selected] [nullstr "str"] [csv\|tsv\|insert\|text\|pipesep\|sqlvalues]` | copy data to clipboard | | `\save [all\|selected] [nullstr "str"] [csv\|tsv\|insert\|text\|pipesep\|sqlvalues]` | copy data to clipboard | | `\order [N\|column name]` | sort by column | | `\orderd [N\|column name]` | desc sort by column | | `\sort [N\|column name]` | sort by column | | `\sortd [N\|column name]` | desc sort by column | | `\dsort [N\|column name]` | desc sort by column (alias)| | `\rsort [N\|column name]` | desc sort by column (alias)| | `\asc [N\|column name]` | sort by column (alias) | | `\desc [N\|column name]` | desc sort by column (alias)| | `\search [back] [selected] [column name] [string\|"string"]` | search string in data | The output can be redirected to any command when the name starts with pipe symbol: \copy csv | less ## Ending The pager can be ended by pressing keys q or F10 or Esc 0. With option `--on-sigint-exit` then the pager is closed by pressing keys Ctrl+c or Esc Esc. ## Use Escape, key instead Alt + key pspg supports a possibility to use a sequence of keys Esc, key instead an combination of Alt+key. The interval between pressing Esc and key is limited by interval specified by option `esc-delay` or by configuration's option `esc_delay`. This is max delay time in ms. After this interval, the single pressing Esc is interpreted as `Escape`. -1 meas unlimited, 0 disables this feature. ## Column search Column search is case insensitive every time. Searched column is marked by vertical cursor. Last non empty string searching pattern is used when current searching pattern is empty string. Searching is starting after visible vertical column or on first visible not freezed columns (after some horizontal scrolling) or on first column. After last column searching starts from first again. ## Export & Clipboard For clipboard support the clipboard application should be installed: 1. wl-clipboard (Wayland), 2. xclip (xwindows) or 3. pbcopy (MacOS). `pspg` try to translate unicode symbol '∅' to NULL every time. If you don't use special setting by `\pset null ...`, then `psql` displays empty string instead NULL. `pspg` hasn't any special detection (in export routines) for this case. You should to check and enable or disable menu item `Empty string is NULL`. `pspg` has automatic detection of clipboard application. Unfortunately, this detection should not to work for same cases. You can specify the application by specify number (1,2,3) to `--clipboard-app` option. ## Status line description * `V: [d/d d..d]` - vertical cursor: (column number)/(columns) (char positions from) .. (char positions to) * `FC: d` - freezed columns length in chars * `C: d..d/d` - unfreezed visible data in chars (from .. to)/(total) * `L:[d + d d/d]` - lines (number of first visible line) + (number of line of display), (current line)/(lines) * `d%` - percent of already displayed data ## Usage as csv viewer It works well with miller http://johnkerl.org/miller/doc/index.html
mlr --icsv --opprint --barred put '' obce.csv | pspg --force-uniborder
New version has integrated csv support - just use `--csv` option. It can be integrated into mc * copy file from `/etc/mc/mc.ext` to your `~/.config/mc directory` * insert there


##csv

regex/\.csv
    View=pspg -f %f --csv
* restart mc ## Known issues * When you use `pspg` on Cygwin, then some temporary freezing of scrolling was reported In this case, please, use an option `--no-sleep`. I see slow scrolling (via scrollbar) inside konsole (KDE terminal). The option `--no-sleep` helps too. ## Usage in watch mode The result of query can be refreshed every n seconds. `pspg` remembers cursor row, possible vertical cursor, possible ordering. The refreshing should be paused by pressing space key. Repeated pressing of this key enables refreshing again. `pspg` uses inotify API when it is available, and when input file is changed, then `pspg` reread file immediately. This behave can be disabled by option `--no-watch-file` or by specification watch time by option `--watch`. ## Streaming modes `pspg` can read a continuous stream of tabular data from pipe, named pipe or from file (with an option `--stream` or it can read a stream of queries from pipe or from file (with an option `--querystream`). In stream mode, only data in table format can be processed, because `pspg` uses empty line as separator between tables. The query stream mode is an sequence of SQL statements separated by char GS (Group separator - 0x1D on separated line.
pavel@localhost ~]$ cat < /dev/pts/3 > ~/pipe
select 10
^] 
select 20
^]
select *
from
pg_class
^]
## Recommended psql configuration you should to add to your profile:
#for Postgres 10 and older
export PAGER="pspg"

#for postgres 11 and newer
export PSQL_PAGER="pspg"

#or "\setenv PAGER pspg" to .psqlrc
and .psqlrc
\set QUIET 1
\pset linestyle unicode
\pset border 2
\pset null ∅
\unset QUIET
some possible configuration:
-- Switch pagers with :x and :xx commands
\set x '\\setenv PAGER less'
\set xx '\\setenv PAGER \'pspg -bX --no-mouse\''
:xx
`LC_CTYPE` should be correct. Mainly when you use unicode borders. ncurses doesn't display unicode borders (produced by `psql`) without correct setting of this variable. Is possible to check a value 'C.UTF8'. ## Attention When you use a option `--only-for-tables`, then * set `PAGER` to `pspg` and `PSQL_PAGER` to `less` or * set `PAGER` to `less` and `PSQL_PAGER` to `pspg` ## MySQL usage
MariaDB [sakila]> pager pspg -s 14 -X --force-uniborder --quit-if-one-screen
PAGER set to 'pspg -s 14 -X --force-uniborder --quit-if-one-screen'
MariaDB [sakila]> select now();
MariaDB [sakila]> select * from nicer_but_slower_film_list limit 100;
## SQLite SQLite native client doesn't produce well formatted output, but can be forced to generate CSV format - and this format is well readable for `pspg` sqlite3 -csv -header testdb.db 'select * from foo2' | pspg --csv --csv-header=on --double-header ## pgcli [pgcli](https://github.com/dbcli/pgcli/) needs the following configuration options (`~/.config/pgcli/config`): pager = /usr/bin/pspg --csv --rr=2 --quit-if-one-screen --ignore-case --csv-header on --pgcli-fix table_format = csv Older version of pgcli had very slow output in tabular format. An workaround was using csv format. This should not be necessary on current versions when the performance issue was fixed. An option `--pgcli-fix` fixed import of partially broken csv format generated by `pgcli`. Modern version of `pgcli` doesn't need csv format, and doesn't need `--pgcli-fix` option. pager = /usr/bin/pspg --rr=2 --quit-if-one-screen --ignore-case ## sqlcl As `sqlcl` doesn't currently support a pager option directly, you can either use a tool like [qsh](https://github.com/muhmud/qsh) to work around this issue, or use the [pspg.sql](https://github.com/okbob/pspg/blob/master/scripts/sqlcl/pspg.sql) script from this repo. To use the script, start `sqlcl` as shown below (it's important to pass in the details of your current tty): $ TTY=$(tty) sqlcl system/system @/path/to/pspg.sql You can now have the results of a query sent to `pspg` like this: SQL> pspg select * from user_tables; ## nushell The `pspg` supports default `table_mode`: `rounded` and `table_mode`: `heavy`. The conversion to csv can be used too. sys | get cpu | to csv | pspg --csv Note: `footer_mode` should be disabled ## Note - mouse pspg try to use xterm mouse mode 1002, when terminal and ncurses are not too antique. If there are problems with usage - unwanted visual artefacts when you move with mouse when some mouse button is pressed, then 1. please, report issue (please, attach log file), 2. use an option `--no-xterm-mouse-mode` and `pspg` will not try to activate this mode. ## Note - true color themes on KDE konsole terminal On my Fedora this terminal doesn't correctly display true color themes. The basic problem is in default `TERM` setting, that is `xterm-256color`. Unfortunately, the `konsole` terminal is not fully compatible with `xterm`, and doesn't allow color changing. You can force direct colors by using the option `--direct-color` or by setting `TERM=xterm-direct`. Second option is more correct setting of `TERM` variable to `konsole-256color`. In this case the `pspg` will map the true rgb colors to supported 256 colors. ## Note - compilation issue Some linker issues can be fixed by:
I changed 
gcc -lncursesw pager.c -o pspg -ggdb
to
gcc pager.c -o pspg -ggdb -lncursesw
If you want to use `pspg` as Postgres client, then you need run `configure --with-postgresql=yes`. On Fedora with own Postgres build I had to install `openssl-devel` package and I had to set `export PKG_CONFIG_PATH="/usr/local/pgsql/master/lib/pkgconfig/"`. On FreeBsd you should to use `gmake` instead `make`. ## Note - Installation When you compile code from source, run ./configure first. Sometimes ./autogen.sh first If you would to display UTF-8 characters, then `pspg` should be linked with `ncursesw` library. UTF-8 characters are displayed badly when library `ncursesw` is used. You can see broken characters with incorrect locale setting too. You can check wide chars support by `pspg --version`. Row `ncurses with wide char support` is expected. Re-run `configure` with `--with-ncursesw` option. When this command fails check if development package for ncursesw library is installed. ## Homebrew (for Linux & MacOS) # brew install pspg You can compile easily `pspg` without `brew`, but you need `gnu readline` library. MacOS uses by default readline emulated over libedit, but `pspg` requires full gnu readline library. LDFLAGS="-L/usr/local/opt/readline/lib" CPPFLAGS="-I/usr/local/opt/readline/include" ./configure LDFLAGS="-L/usr/local/opt/readline/lib" CPPFLAGS="-I/usr/local/opt/readline/include" make ## Debian # apt-cache search pspg # apt-get install pspg ## Fedora (28 and later) # dnf install pspg ## RPM (CentOS/openSUSE/…) The pspg is available from community repository https://yum.postgresql.org/packages.php ## Alpine Linux # apk add pspg ## Gentoo # emerge -av dev-db/pspg ## Arch Linux The Arch User Repository contains two versions: * [pspg](https://aur.archlinux.org/packages/pspg/) is a fixed release. * [pspg-git](https://aur.archlinux.org/packages/pspg-git/) tracks the `master` branch. Use the AUR helper of your choice or git and `makepkg` to install pspg. ## FreeBSD # pkg install pspg ## OpenBSD # pkg_add pspg [More about it](https://fluca1978.github.io/2021/10/28/pspgOpenBSD.html) ## Using MacPorts (MacOS only) # port install pspg ## Solaris There are few issues requires manual code changes for successful compilation - we successfully tested `pspg`, but although `pspg` was linked with ncursesw libraries, the utf8 encoding support didn't work fully correctly - probably due some issues in `libc` library. There are problems with chars encoded to 3bytes - unicode borders, .. Two bytes unicode chars should be displayed well. You can use `pspg` with usual accented chars, but unicode borders should not be used. Replacement ascii borders by special borders chars (by ncurses technology) works well - looks on `Options|Force unicode borders` option. * Solaris `make` doesn't support conditional statements - should be removed So, remove unsupported functionality from `Makefile` (`ifdef`,`endif`), replace `-include` by `include` first. * After running `configure` remove link on `termcap` library from `config.make`. It is garbage produced by `readline` automake script. Combination with `ncurses` libraries makes some linking issues. ### builtin libraries export CURSES_CFLAGS="-I/usr/include/ncurses/" export PANEL_LIBS="-lpanelw" ./configure ### OpenCSW development export CFLAGS="-m64 -I/opt/csw/include" export LDFLAGS="-L/opt/csw/lib/64 -R/opt/csw/lib/64" export PKG_CONFIG_PATH="/opt/csw/lib/64/pkgconfig" ./configure ## Possible ToDo * Store data in some column format (now data are stored like array of rows). With this change can be possible to operate over columns - hide columns, change width, cyclic iteration over columns, change order of columns, mark columns and export only selected columns (selected rows). * Replace printing document directly to ncurses window by some smarter structure. Internally there are lot of checks and fixes to support complex dynamic layout. The possibly views should to remember first row, last row, current row. Now, these data are in global variables or in DataDesc and ScrDesc structures. ## st_menu This project uses st_menu library - implementation of CUA menubar and pulldown menu for ncurses https://github.com/okbob/ncurses-st-menu ## Note If you like it, send a postcard from your home country to my address, please: Pavel Stehule Skalice 12 256 01 Benesov u Prahy Czech Republic I invite any questions, comments, bug reports, patches on mail address pavel.stehule@gmail.com pspg-5.8.1/ToDo000066400000000000000000000004121452457446400133020ustar00rootroot00000000000000ToDo ==== Known bugs ========== Possible ToDo ============= * fast scrolling - vertical scrolling based on table's rows * support fetched data - columns width can be different Similar projects ================ * tless * ngrid * muhmud/lessql * visidata * tabview pspg-5.8.1/aclocal.m4000066400000000000000000000324771452457446400143720ustar00rootroot00000000000000# generated automatically by aclocal 1.16.5 -*- Autoconf -*- # Copyright (C) 1996-2021 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($@)])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 11 (pkg-config-0.29.1) dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.1]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND], dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------ dnl dnl Prepare a "--with-" configure option using the lowercase dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and dnl PKG_CHECK_MODULES in a single macro. AC_DEFUN([PKG_WITH_MODULES], [ m4_pushdef([with_arg], m4_tolower([$1])) m4_pushdef([description], [m4_default([$5], [build with ]with_arg[ support])]) m4_pushdef([def_arg], [m4_default([$6], [auto])]) m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) m4_case(def_arg, [yes],[m4_pushdef([with_without], [--without-]with_arg)], [m4_pushdef([with_without],[--with-]with_arg)]) AC_ARG_WITH(with_arg, AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, [AS_TR_SH([with_]with_arg)=def_arg]) AS_CASE([$AS_TR_SH([with_]with_arg)], [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], [auto],[PKG_CHECK_MODULES([$1],[$2], [m4_n([def_action_if_found]) $3], [m4_n([def_action_if_not_found]) $4])]) m4_popdef([with_arg]) m4_popdef([description]) m4_popdef([def_arg]) ])dnl PKG_WITH_MODULES dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ----------------------------------------------- dnl dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES dnl check._[VARIABLE-PREFIX] is exported as make variable. AC_DEFUN([PKG_HAVE_WITH_MODULES], [ PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) AM_CONDITIONAL([HAVE_][$1], [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) ])dnl PKG_HAVE_WITH_MODULES dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------------------ dnl dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make dnl and preprocessor variable. AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], [ PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) ])dnl PKG_HAVE_DEFINE_WITH_MODULES m4_include([tools/ax_debug_cflags.m4]) m4_include([tools/ax_lib_readline.m4]) m4_include([tools/ax_require_defined.m4]) m4_include([tools/ax_with_curses.m4]) m4_include([tools/m4_ax_compare_version.m4]) m4_include([tools/m4_ax_lib_postgresql.m4]) m4_include([tools/m4_ax_with_curses_extra.m4]) pspg-5.8.1/autogen.sh000077500000000000000000000007271452457446400145240ustar00rootroot00000000000000#!/bin/sh export WARNINGS="all" set -e # Ideally, we could just do this: # #${AUTORECONF:-autoreconf} -v -I tools # # Unfortunately, Autoconf 2.61's autoreconf(1) (found in Mac OS X 10.5 # Leopard) neglects to pass the -I on to aclocal(1), which is # precisely where we need it! So we do basically what it would have # done. run () { test "${V}" = 1 && echo $0: running: "$@" "$@" } run ${ACLOCAL:-aclocal} -I tools run ${AUTOCONF:-autoconf} --include=tools pspg-5.8.1/bash-completion.sh000066400000000000000000000012451452457446400161370ustar00rootroot00000000000000_pspg() { local cur prev words cword _init_completion || return case $prev in -f | --file | --log) _filedir return ;; --csv-header) COMPREPLY=($(compgen -W 'on off' -- "$cur")) return ;; --hold-stream) COMPREPLY=($(compgen -W '1 2 3' -- "$cur")) return ;; --border) COMPREPLY=($(compgen -W '0 1 2' -- "$cur")) return ;; esac if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '$(_parse_help "$1" --help)' -- "$cur")) return fi _filedir } && complete -F _pspg pspg pspg-5.8.1/config.make.in000066400000000000000000000011261452457446400152260ustar00rootroot00000000000000# -*- makefile-gmake -*- prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ mandir = @mandir@ docdir = @docdir@ datarootdir = @datarootdir@ sysconfdir = @sysconfdir@ COMPILE_MENU = @COMPILE_MENU@ CC = @CC@ CFLAGS = @CFLAGS@ @COVERAGE_CFLAGS@ @DEBUG_CFLAGS@ @CURSES_CFLAGS@ @DEFS@ -Wall -MD LDFLAGS = @LDFLAGS@ LDLIBS = @LIBS@ @PANEL_LIBS@ @CURSES_LIBS@ PG_CPPFLAGS = @POSTGRESQL_CPPFLAGS@ PG_LDFLAGS = @POSTGRESQL_LDFLAGS@ PG_LIBS = @POSTGRESQL_LIBS@ config.status: configure ./config.status --recheck config.make: config.status ./config.status $@ config.make: config.make.in pspg-5.8.1/configure000077500000000000000000006773301452457446400144440ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for pspg 0. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 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 as_nop=: if test ${ZSH_VERSION+y} && (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 $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; 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 # 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # 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'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 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="as_nop=: if test \${ZSH_VERSION+y} && (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 \$as_nop 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 \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || 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 \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi 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'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: pavel.stehule@gmail.com about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: 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_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # 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=`printf "%s\n" "$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 || printf "%s\n" 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_nop 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_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # 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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$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 || printf "%s\n" 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" || { printf "%s\n" "$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 } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. 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 # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' 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'" 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='pspg' PACKAGE_TARNAME='pspg' PACKAGE_VERSION='0' PACKAGE_STRING='pspg 0' PACKAGE_BUGREPORT='pavel.stehule@gmail.com' PACKAGE_URL='' ac_unique_file="src" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='LTLIBOBJS LIBOBJS POSTGRESQL_CFLAGS COMPILE_MENU COVERAGE_LDFLAGS COVERAGE_CFLAGS enable_debug POSTGRESQL_LIBS POSTGRESQL_VERSION AWK POSTGRESQL_LDFLAGS POSTGRESQL_LIBFLAGS POSTGRESQL_CPPFLAGS PANEL_LIBS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG CURSES_CFLAGS CURSES_LIBS DEBUG_CFLAGS CPP EGREP GREP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC 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_debug with_ncurses with_ncursesw with_postgresql with_menu with_inotify ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP CURSES_LIBS CURSES_CFLAGS PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR PANEL_LIBS POSTGRESQL_CPPFLAGS POSTGRESQL_LIBFLAGS POSTGRESQL_LDFLAGS' # 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 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=`printf "%s\n" "$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=`printf "%s\n" "$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=`printf "%s\n" "$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=`printf "%s\n" "$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. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$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" ;; *) printf "%s\n" "$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 || printf "%s\n" 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 pspg 0 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/pspg] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of pspg 0:";; 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-debug enable debug build Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-ncurses force the use of Ncurses or NcursesW --without-ncursesw do not use NcursesW (wide character support) --with-postgresql=[ARG] use PostgreSQL library [default=yes], optionally specify path to pg_config --without-menu --without-inotify (Linux only) do not build with inotify support (default is yes) 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 CPP C preprocessor CURSES_LIBS linker library for Curses, e.g. -lcurses CURSES_CFLAGS preprocessor flags for Curses, e.g. -I/usr/include/ncursesw PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path PANEL_LIBS linker library for Curses Panel, e.g. -lpanel POSTGRESQL_CPPFLAGS cpp flags for PostgreSQL overriding detected flags POSTGRESQL_LIBFLAGS libs for PostgreSQL overriding detected flags POSTGRESQL_LDFLAGS linker flags for PostgreSQL overriding detected flags 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 . _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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$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 configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. 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 printf "%s\n" "$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 pspg configure 0 generated by GNU Autoconf 2.71 Copyright (C) 2021 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 conftest.beam 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\"" printf "%s\n" "$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 printf "%s\n" "$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_nop printf "%s\n" "$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_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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop 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 $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$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\"" printf "%s\n" "$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 printf "%s\n" "$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_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. 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.beam 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\"" printf "%s\n" "$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 printf "%s\n" "$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_nop printf "%s\n" "$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_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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop 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. */ #include #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 (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac 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 pspg $as_me 0, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "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=`printf "%s\n" "$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=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## 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_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$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 printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$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 printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*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 do not provoke an error unfortunately, instead are silently treated as an "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 is necessary to write \x00 == 0 to get something that is 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 **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" # 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,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$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=`printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-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_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 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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}clang" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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="clang" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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. printf "%s\n" "$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 -version; 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\"" printf "%s\n" "$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 printf "%s\n" "$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 (void) { ; 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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$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+y} && 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 $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$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_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$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 (void) { 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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$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 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; 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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$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_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop 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 (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; 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.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; 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 ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _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 conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi 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_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 printf %s "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 test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CC needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" 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. # 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. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # 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 $as_nop # 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 printf "%s\n" "$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. # 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. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # 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 $as_nop # 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_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether termios.h defines TIOCGWINSZ" >&5 printf %s "checking whether termios.h defines TIOCGWINSZ... " >&6; } if test ${ac_cv_sys_tiocgwinsz_in_termios_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef TIOCGWINSZ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : ac_cv_sys_tiocgwinsz_in_termios_h=yes else $as_nop ac_cv_sys_tiocgwinsz_in_termios_h=no fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_termios_h" >&5 printf "%s\n" "$ac_cv_sys_tiocgwinsz_in_termios_h" >&6; } if test $ac_cv_sys_tiocgwinsz_in_termios_h != yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sys/ioctl.h defines TIOCGWINSZ" >&5 printf %s "checking whether sys/ioctl.h defines TIOCGWINSZ... " >&6; } if test ${ac_cv_sys_tiocgwinsz_in_sys_ioctl_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef TIOCGWINSZ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=yes else $as_nop ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=no fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&5 printf "%s\n" "$ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&6; } if test $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h = yes; then printf "%s\n" "#define GWINSZ_IN_SYS_IOCTL 1" >>confdefs.h fi fi # ensure CFLAGS are set if test "${CFLAGS+set}" then : USE_DEFAULT_CFLAGS=false else $as_nop USE_DEFAULT_CFLAGS=true CFLAGS="" 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 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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}clang" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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="clang" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$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 fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$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. printf "%s\n" "$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 -version; 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\"" printf "%s\n" "$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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop 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 (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; 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.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; 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 ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _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 conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi 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 # add --enable-debug arg # Check whether --enable-debug was given. if test ${enable_debug+y} then : enableval=$enable_debug; fi if test "$enable_debug" = "yes" then : # add the DEBUG pre-processor define printf "%s\n" "#define DEBUG 1" >>confdefs.h # gcc/gdb debug options if test "$GCC" = "yes" then : DEBUG_CFLAGS="-ggdb -O0" else $as_nop # default to -g if test "$ac_cv_prog_cc_g" = "yes" then : DEBUG_CFLAGS="-g" else $as_nop DEBUG_CFLAGS="" fi fi else $as_nop # what AC_PROG_CC would have done if CFLAGS were not set if $USE_DEFAULT_CFLAGS then : # default to -g if test "$ac_cv_prog_cc_g" = "yes" then : DEBUG_CFLAGS="-g" else $as_nop DEBUG_CFLAGS="" fi if test "$GCC" = "yes" then : DEBUG_CFLAGS="$DEBUG_CFLAGS -O2" fi fi fi DEBUG_CFLAGS=$DEBUG_CFLAGS if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi # Check whether --with-ncurses was given. if test ${with_ncurses+y} then : withval=$with_ncurses; else $as_nop with_ncurses=check fi # Check whether --with-ncursesw was given. if test ${with_ncursesw+y} then : withval=$with_ncursesw; else $as_nop with_ncursesw=check fi ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS if test "x$with_ncurses" = xyes || test "x$with_ncursesw" = xyes then : ax_with_plaincurses=no else $as_nop ax_with_plaincurses=check fi ax_cv_curses_which=no # Test for NcursesW if test "x$CURSES_LIBS" = x && test "x$with_ncursesw" != xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ncursesw via pkg-config" >&5 printf %s "checking for ncursesw via pkg-config... " >&6; } if test -n "$_ax_cv_ncursesw_libs"; then pkg_cv__ax_cv_ncursesw_libs="$_ax_cv_ncursesw_libs" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv__ax_cv_ncursesw_libs=`$PKG_CONFIG --libs "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$_ax_cv_ncursesw_cppflags"; then pkg_cv__ax_cv_ncursesw_cppflags="$_ax_cv_ncursesw_cppflags" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncursesw\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncursesw") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv__ax_cv_ncursesw_cppflags=`$PKG_CONFIG --cflags "ncursesw" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test "x$pkg_failed" = "xyes" || test "x$pkg_failed" = "xuntried" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } # No suitable .pc file found, have to find flags via fallback { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ncursesw via fallback" >&5 printf %s "checking for ncursesw via fallback... " >&6; } if test ${ax_cv_ncursesw+y} then : printf %s "(cached) " >&6 else $as_nop printf "%s\n" pkg_cv__ax_cv_ncursesw_libs="-lncursesw" pkg_cv__ax_cv_ncursesw_cppflags="-D_GNU_SOURCE $CURSES_CFLAGS" LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_ncursesw_libs" CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_ncursesw_cppflags" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for initscr() with $pkg_cv__ax_cv_ncursesw_libs" >&5 printf %s "checking for initscr() with $pkg_cv__ax_cv_ncursesw_libs... " >&6; } 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. */ char initscr (); int main (void) { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nodelay() with $pkg_cv__ax_cv_ncursesw_libs" >&5 printf %s "checking for nodelay() with $pkg_cv__ax_cv_ncursesw_libs... " >&6; } 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. */ char nodelay (); int main (void) { return nodelay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_ncursesw=yes else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } pkg_cv__ax_cv_ncursesw_libs="$pkg_cv__ax_cv_ncursesw_libs -ltinfow" LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_ncursesw_libs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nodelay() with $pkg_cv__ax_cv_ncursesw_libs" >&5 printf %s "checking for nodelay() with $pkg_cv__ax_cv_ncursesw_libs... " >&6; } 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. */ char nodelay (); int main (void) { return nodelay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_ncursesw=yes else $as_nop ax_cv_ncursesw=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext else $as_nop ax_cv_ncursesw=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_ncursesw" >&5 printf "%s\n" "$ax_cv_ncursesw" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } # Found .pc file, using its information LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_ncursesw_libs" CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_ncursesw_cppflags" ax_cv_ncursesw=yes fi if test "x$ax_cv_ncursesw" = xno && test "x$with_ncursesw" = xyes then : as_fn_error $? "--with-ncursesw specified but could not find NcursesW library" "$LINENO" 5 fi if test "x$ax_cv_ncursesw" = xyes then : ax_cv_curses=yes ax_cv_curses_which=ncursesw CURSES_LIBS="$pkg_cv__ax_cv_ncursesw_libs" CURSES_CFLAGS="$pkg_cv__ax_cv_ncursesw_cppflags" printf "%s\n" "#define HAVE_NCURSESW 1" >>confdefs.h printf "%s\n" "#define HAVE_CURSES 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working ncursesw/curses.h" >&5 printf %s "checking for working ncursesw/curses.h... " >&6; } if test ${ax_cv_header_ncursesw_curses_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include int main (void) { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_header_ncursesw_curses_h=yes else $as_nop ax_cv_header_ncursesw_curses_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncursesw_curses_h" >&5 printf "%s\n" "$ax_cv_header_ncursesw_curses_h" >&6; } if test "x$ax_cv_header_ncursesw_curses_h" = xyes then : ax_cv_curses_enhanced=yes ax_cv_curses_color=yes ax_cv_curses_obsolete=yes printf "%s\n" "#define HAVE_CURSES_ENHANCED 1" >>confdefs.h printf "%s\n" "#define HAVE_CURSES_COLOR 1" >>confdefs.h printf "%s\n" "#define HAVE_CURSES_OBSOLETE 1" >>confdefs.h printf "%s\n" "#define HAVE_NCURSESW_CURSES_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working ncursesw.h" >&5 printf %s "checking for working ncursesw.h... " >&6; } if test ${ax_cv_header_ncursesw_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include int main (void) { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_header_ncursesw_h=yes else $as_nop ax_cv_header_ncursesw_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncursesw_h" >&5 printf "%s\n" "$ax_cv_header_ncursesw_h" >&6; } if test "x$ax_cv_header_ncursesw_h" = xyes then : ax_cv_curses_enhanced=yes ax_cv_curses_color=yes ax_cv_curses_obsolete=yes printf "%s\n" "#define HAVE_CURSES_ENHANCED 1" >>confdefs.h printf "%s\n" "#define HAVE_CURSES_COLOR 1" >>confdefs.h printf "%s\n" "#define HAVE_CURSES_OBSOLETE 1" >>confdefs.h printf "%s\n" "#define HAVE_NCURSESW_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working ncurses.h" >&5 printf %s "checking for working ncurses.h... " >&6; } if test ${ax_cv_header_ncurses_h_with_ncursesw+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include int main (void) { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_header_ncurses_h_with_ncursesw=yes else $as_nop ax_cv_header_ncurses_h_with_ncursesw=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncurses_h_with_ncursesw" >&5 printf "%s\n" "$ax_cv_header_ncurses_h_with_ncursesw" >&6; } if test "x$ax_cv_header_ncurses_h_with_ncursesw" = xyes then : ax_cv_curses_enhanced=yes ax_cv_curses_color=yes ax_cv_curses_obsolete=yes printf "%s\n" "#define HAVE_CURSES_ENHANCED 1" >>confdefs.h printf "%s\n" "#define HAVE_CURSES_COLOR 1" >>confdefs.h printf "%s\n" "#define HAVE_CURSES_OBSOLETE 1" >>confdefs.h printf "%s\n" "#define HAVE_NCURSES_H 1" >>confdefs.h fi if test "x$ax_cv_header_ncursesw_curses_h" = xno && test "x$ax_cv_header_ncursesw_h" = xno && test "x$ax_cv_header_ncurses_h_with_ncursesw" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: could not find a working ncursesw/curses.h, ncursesw.h or ncurses.h" >&5 printf "%s\n" "$as_me: WARNING: could not find a working ncursesw/curses.h, ncursesw.h or ncurses.h" >&2;} fi fi fi unset pkg_cv__ax_cv_ncursesw_libs unset pkg_cv__ax_cv_ncursesw_cppflags # Test for Ncurses if test "x$CURSES_LIBS" = x && test "x$with_ncurses" != xno && test "x$ax_cv_curses_which" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ncurses via pkg-config" >&5 printf %s "checking for ncurses via pkg-config... " >&6; } if test -n "$_ax_cv_ncurses_libs"; then pkg_cv__ax_cv_ncurses_libs="$_ax_cv_ncurses_libs" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncurses\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncurses") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv__ax_cv_ncurses_libs=`$PKG_CONFIG --libs "ncurses" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$_ax_cv_ncurses_cppflags"; then pkg_cv__ax_cv_ncurses_cppflags="$_ax_cv_ncurses_cppflags" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncurses\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncurses") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv__ax_cv_ncurses_cppflags=`$PKG_CONFIG --cflags "ncurses" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test "x$pkg_failed" = "xyes" || test "x$pkg_failed" = "xuntried" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } # No suitable .pc file found, have to find flags via fallback { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ncurses via fallback" >&5 printf %s "checking for ncurses via fallback... " >&6; } if test ${ax_cv_ncurses+y} then : printf %s "(cached) " >&6 else $as_nop printf "%s\n" pkg_cv__ax_cv_ncurses_libs="-lncurses" pkg_cv__ax_cv_ncurses_cppflags="-D_GNU_SOURCE $CURSES_CFLAGS" LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_ncurses_libs" CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_ncurses_cppflags" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for initscr() with $pkg_cv__ax_cv_ncurses_libs" >&5 printf %s "checking for initscr() with $pkg_cv__ax_cv_ncurses_libs... " >&6; } 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. */ char initscr (); int main (void) { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nodelay() with $pkg_cv__ax_cv_ncurses_libs" >&5 printf %s "checking for nodelay() with $pkg_cv__ax_cv_ncurses_libs... " >&6; } 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. */ char nodelay (); int main (void) { return nodelay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_ncurses=yes else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } pkg_cv__ax_cv_ncurses_libs="$pkg_cv__ax_cv_ncurses_libs -ltinfo" LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_ncurses_libs" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nodelay() with $pkg_cv__ax_cv_ncurses_libs" >&5 printf %s "checking for nodelay() with $pkg_cv__ax_cv_ncurses_libs... " >&6; } 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. */ char nodelay (); int main (void) { return nodelay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_ncurses=yes else $as_nop ax_cv_ncurses=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext else $as_nop ax_cv_ncurses=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_ncurses" >&5 printf "%s\n" "$ax_cv_ncurses" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } # Found .pc file, using its information LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_ncurses_libs" CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_ncurses_cppflags" ax_cv_ncurses=yes fi if test "x$ax_cv_ncurses" = xno && test "x$with_ncurses" = xyes then : as_fn_error $? "--with-ncurses specified but could not find Ncurses library" "$LINENO" 5 fi if test "x$ax_cv_ncurses" = xyes then : ax_cv_curses=yes ax_cv_curses_which=ncurses CURSES_LIBS="$pkg_cv__ax_cv_ncurses_libs" CURSES_CFLAGS="$pkg_cv__ax_cv_ncurses_cppflags" printf "%s\n" "#define HAVE_NCURSES 1" >>confdefs.h printf "%s\n" "#define HAVE_CURSES 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working ncurses/curses.h" >&5 printf %s "checking for working ncurses/curses.h... " >&6; } if test ${ax_cv_header_ncurses_curses_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_header_ncurses_curses_h=yes else $as_nop ax_cv_header_ncurses_curses_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncurses_curses_h" >&5 printf "%s\n" "$ax_cv_header_ncurses_curses_h" >&6; } if test "x$ax_cv_header_ncurses_curses_h" = xyes then : ax_cv_curses_color=yes ax_cv_curses_obsolete=yes printf "%s\n" "#define HAVE_CURSES_COLOR 1" >>confdefs.h printf "%s\n" "#define HAVE_CURSES_OBSOLETE 1" >>confdefs.h printf "%s\n" "#define HAVE_NCURSES_CURSES_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working ncurses.h" >&5 printf %s "checking for working ncurses.h... " >&6; } if test ${ax_cv_header_ncurses_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_header_ncurses_h=yes else $as_nop ax_cv_header_ncurses_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncurses_h" >&5 printf "%s\n" "$ax_cv_header_ncurses_h" >&6; } if test "x$ax_cv_header_ncurses_h" = xyes then : ax_cv_curses_color=yes ax_cv_curses_obsolete=yes printf "%s\n" "#define HAVE_CURSES_COLOR 1" >>confdefs.h printf "%s\n" "#define HAVE_CURSES_OBSOLETE 1" >>confdefs.h printf "%s\n" "#define HAVE_NCURSES_H 1" >>confdefs.h fi if test "x$ax_cv_header_ncurses_curses_h" = xno && test "x$ax_cv_header_ncurses_h" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: could not find a working ncurses/curses.h or ncurses.h" >&5 printf "%s\n" "$as_me: WARNING: could not find a working ncurses/curses.h or ncurses.h" >&2;} fi fi fi unset pkg_cv__ax_cv_ncurses_libs unset pkg_cv__ax_cv_ncurses_cppflags # Test for plain Curses (or if CURSES_LIBS was set by user) if test "x$with_plaincurses" != xno && test "x$ax_cv_curses_which" = xno then : if test "x$CURSES_LIBS" != x then : LIBS="$ax_saved_LIBS $CURSES_LIBS" else $as_nop LIBS="$ax_saved_LIBS -lcurses" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Curses library" >&5 printf %s "checking for Curses library... " >&6; } if test ${ax_cv_plaincurses+y} then : printf %s "(cached) " >&6 else $as_nop 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. */ char initscr (); int main (void) { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_plaincurses=yes else $as_nop ax_cv_plaincurses=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_plaincurses" >&5 printf "%s\n" "$ax_cv_plaincurses" >&6; } if test "x$ax_cv_plaincurses" = xyes then : ax_cv_curses=yes ax_cv_curses_which=plaincurses if test "x$CURSES_LIBS" = x then : CURSES_LIBS="-lcurses" fi printf "%s\n" "#define HAVE_CURSES 1" >>confdefs.h # Check for base conformance (and header file) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working curses.h" >&5 printf %s "checking for working curses.h... " >&6; } if test ${ax_cv_header_curses_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { chtype a = A_BOLD; int b = KEY_LEFT; initscr(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_header_curses_h=yes else $as_nop ax_cv_header_curses_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_curses_h" >&5 printf "%s\n" "$ax_cv_header_curses_h" >&6; } if test "x$ax_cv_header_curses_h" = xyes then : printf "%s\n" "#define HAVE_CURSES_H 1" >>confdefs.h # Check for X/Open Enhanced conformance { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for X/Open Enhanced Curses conformance" >&5 printf %s "checking for X/Open Enhanced Curses conformance... " >&6; } if test ${ax_cv_plaincurses_enhanced+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifndef _XOPEN_CURSES #error "this Curses library is not enhanced" "this Curses library is not enhanced" #endif int main (void) { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_plaincurses_enhanced=yes else $as_nop ax_cv_plaincurses_enhanced=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_plaincurses_enhanced" >&5 printf "%s\n" "$ax_cv_plaincurses_enhanced" >&6; } if test "x$ax_cv_plaincurses_enhanced" = xyes then : ax_cv_curses_enhanced=yes ax_cv_curses_color=yes printf "%s\n" "#define HAVE_CURSES_ENHANCED 1" >>confdefs.h printf "%s\n" "#define HAVE_CURSES_COLOR 1" >>confdefs.h fi # Check for color functions { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Curses color functions" >&5 printf %s "checking for Curses color functions... " >&6; } if test ${ax_cv_plaincurses_color+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include int main (void) { chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_plaincurses_color=yes else $as_nop ax_cv_plaincurses_color=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_plaincurses_color" >&5 printf "%s\n" "$ax_cv_plaincurses_color" >&6; } if test "x$ax_cv_plaincurses_color" = xyes then : ax_cv_curses_color=yes printf "%s\n" "#define HAVE_CURSES_COLOR 1" >>confdefs.h fi # Check for obsolete functions { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for obsolete Curses functions" >&5 printf %s "checking for obsolete Curses functions... " >&6; } if test ${ax_cv_plaincurses_obsolete+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { chtype a = A_BOLD; int b = KEY_LEFT; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_plaincurses_obsolete=yes else $as_nop ax_cv_plaincurses_obsolete=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_plaincurses_obsolete" >&5 printf "%s\n" "$ax_cv_plaincurses_obsolete" >&6; } if test "x$ax_cv_plaincurses_obsolete" = xyes then : ax_cv_curses_obsolete=yes printf "%s\n" "#define HAVE_CURSES_OBSOLETE 1" >>confdefs.h fi fi if test "x$ax_cv_header_curses_h" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: could not find a working curses.h" >&5 printf "%s\n" "$as_me: WARNING: could not find a working curses.h" >&2;} fi fi fi if test "x$ax_cv_curses" != xyes then : ax_cv_curses=no fi if test "x$ax_cv_curses_enhanced" != xyes then : ax_cv_curses_enhanced=no fi if test "x$ax_cv_curses_color" != xyes then : ax_cv_curses_color=no fi if test "x$ax_cv_curses_obsolete" != xyes then : ax_cv_curses_obsolete=no fi LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS if test "x$PANEL_LIBS" != x then : ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Curses Panel library with panel.h" >&5 printf %s "checking for Curses Panel library with panel.h... " >&6; } if test ${ax_cv_header_panel_h+y} then : printf %s "(cached) " >&6 else $as_nop LIBS="$ax_saved_LIBS $PANEL_LIBS $CURSES_LIBS" CPPFLAGS="$ax_saved_CPPFLAGS $CURSES_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { WINDOW *win = newwin(0, 0, 0, 0); PANEL *pan = new_panel(win); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_header_panel_h=yes else $as_nop ax_cv_header_panel_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_panel_h" >&5 printf "%s\n" "$ax_cv_header_panel_h" >&6; } if test "x$ax_cv_header_panel_h" = xyes then : ax_cv_panel=yes printf "%s\n" "#define HAVE_PANEL 1" >>confdefs.h printf "%s\n" "#define HAVE_PANEL_H 1" >>confdefs.h else $as_nop if test "x$ax_cv_panel" = xyes then : else $as_nop ax_cv_panel=no fi fi LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS else $as_nop if test "x$ax_cv_curses_which" = xncursesw then : ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Curses Panel library with ncursesw/panel.h" >&5 printf %s "checking for Curses Panel library with ncursesw/panel.h... " >&6; } if test ${ax_cv_header_ncursesw_panel_h+y} then : printf %s "(cached) " >&6 else $as_nop LIBS="$ax_saved_LIBS -lpanelw $CURSES_LIBS" CPPFLAGS="$ax_saved_CPPFLAGS $CURSES_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { WINDOW *win = newwin(0, 0, 0, 0); PANEL *pan = new_panel(win); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_header_ncursesw_panel_h=yes else $as_nop ax_cv_header_ncursesw_panel_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncursesw_panel_h" >&5 printf "%s\n" "$ax_cv_header_ncursesw_panel_h" >&6; } if test "x$ax_cv_header_ncursesw_panel_h" = xyes then : ax_cv_panel=yes PANEL_LIBS="-lpanelw" printf "%s\n" "#define HAVE_PANEL 1" >>confdefs.h printf "%s\n" "#define HAVE_NCURSESW_PANEL_H 1" >>confdefs.h else $as_nop if test "x$ax_cv_panel" = xyes then : else $as_nop ax_cv_panel=no fi fi LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS if test x$ax_cv_panel != "xyes" then : ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Curses Panel library with panel.h" >&5 printf %s "checking for Curses Panel library with panel.h... " >&6; } if test ${ax_cv_header_panel_h+y} then : printf %s "(cached) " >&6 else $as_nop LIBS="$ax_saved_LIBS -lpanel $CURSES_LIBS" CPPFLAGS="$ax_saved_CPPFLAGS $CURSES_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { WINDOW *win = newwin(0, 0, 0, 0); PANEL *pan = new_panel(win); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_header_panel_h=yes else $as_nop ax_cv_header_panel_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_panel_h" >&5 printf "%s\n" "$ax_cv_header_panel_h" >&6; } if test "x$ax_cv_header_panel_h" = xyes then : ax_cv_panel=yes PANEL_LIBS="-lpanel" printf "%s\n" "#define HAVE_PANEL 1" >>confdefs.h printf "%s\n" "#define HAVE_PANEL_H 1" >>confdefs.h else $as_nop if test "x$ax_cv_panel" = xyes then : else $as_nop ax_cv_panel=no fi fi LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS fi elif test "x$ax_cv_curses_which" = xncurses then : ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Curses Panel library with panel.h" >&5 printf %s "checking for Curses Panel library with panel.h... " >&6; } if test ${ax_cv_header_panel_h+y} then : printf %s "(cached) " >&6 else $as_nop LIBS="$ax_saved_LIBS -lpanel $CURSES_LIBS" CPPFLAGS="$ax_saved_CPPFLAGS $CURSES_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { WINDOW *win = newwin(0, 0, 0, 0); PANEL *pan = new_panel(win); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_header_panel_h=yes else $as_nop ax_cv_header_panel_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_panel_h" >&5 printf "%s\n" "$ax_cv_header_panel_h" >&6; } if test "x$ax_cv_header_panel_h" = xyes then : ax_cv_panel=yes PANEL_LIBS="-lpanel" printf "%s\n" "#define HAVE_PANEL 1" >>confdefs.h printf "%s\n" "#define HAVE_PANEL_H 1" >>confdefs.h else $as_nop if test "x$ax_cv_panel" = xyes then : else $as_nop ax_cv_panel=no fi fi LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS if test x$ax_cv_panel != "xyes" then : ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Curses Panel library with ncurses/panel.h" >&5 printf %s "checking for Curses Panel library with ncurses/panel.h... " >&6; } if test ${ax_cv_header_ncurses_panel_h+y} then : printf %s "(cached) " >&6 else $as_nop LIBS="$ax_saved_LIBS -lpanel $CURSES_LIBS" CPPFLAGS="$ax_saved_CPPFLAGS $CURSES_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { WINDOW *win = newwin(0, 0, 0, 0); PANEL *pan = new_panel(win); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_header_ncurses_panel_h=yes else $as_nop ax_cv_header_ncurses_panel_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_ncurses_panel_h" >&5 printf "%s\n" "$ax_cv_header_ncurses_panel_h" >&6; } if test "x$ax_cv_header_ncurses_panel_h" = xyes then : ax_cv_panel=yes PANEL_LIBS="-lpanel" printf "%s\n" "#define HAVE_PANEL 1" >>confdefs.h printf "%s\n" "#define HAVE_NCURSES_PANEL_H 1" >>confdefs.h else $as_nop if test "x$ax_cv_panel" = xyes then : else $as_nop ax_cv_panel=no fi fi LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS fi elif test "x$ax_cv_curses_which" = xplaincurses then : ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Curses Panel library with panel.h" >&5 printf %s "checking for Curses Panel library with panel.h... " >&6; } if test ${ax_cv_header_panel_h+y} then : printf %s "(cached) " >&6 else $as_nop LIBS="$ax_saved_LIBS -lpanel $CURSES_LIBS" CPPFLAGS="$ax_saved_CPPFLAGS $CURSES_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { WINDOW *win = newwin(0, 0, 0, 0); PANEL *pan = new_panel(win); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_header_panel_h=yes else $as_nop ax_cv_header_panel_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_header_panel_h" >&5 printf "%s\n" "$ax_cv_header_panel_h" >&6; } if test "x$ax_cv_header_panel_h" = xyes then : ax_cv_panel=yes PANEL_LIBS="-lpanel" printf "%s\n" "#define HAVE_PANEL 1" >>confdefs.h printf "%s\n" "#define HAVE_PANEL_H 1" >>confdefs.h else $as_nop if test "x$ax_cv_panel" = xyes then : else $as_nop ax_cv_panel=no fi fi LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a readline compatible library" >&5 printf %s "checking for a readline compatible library... " >&6; } if test ${ax_cv_lib_readline+y} then : printf %s "(cached) " >&6 else $as_nop ORIG_LIBS="$LIBS" for readline_lib in readline edit editline; do for termcap_lib in "" termcap curses ncurses; do if test -z "$termcap_lib"; then TRY_LIB="-l$readline_lib" else TRY_LIB="-l$readline_lib -l$termcap_lib" fi LIBS="$ORIG_LIBS $TRY_LIB" 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. */ char readline (); int main (void) { return readline (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_lib_readline="$TRY_LIB" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -n "$ax_cv_lib_readline"; then break fi done if test -n "$ax_cv_lib_readline"; then break fi done if test -z "$ax_cv_lib_readline"; then ax_cv_lib_readline="no" fi LIBS="$ORIG_LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_lib_readline" >&5 printf "%s\n" "$ax_cv_lib_readline" >&6; } if test "$ax_cv_lib_readline" != "no"; then LIBS="$LIBS $ax_cv_lib_readline" printf "%s\n" "#define HAVE_LIBREADLINE 1" >>confdefs.h ac_fn_c_check_header_compile "$LINENO" "readline.h" "ac_cv_header_readline_h" "$ac_includes_default" if test "x$ac_cv_header_readline_h" = xyes then : printf "%s\n" "#define HAVE_READLINE_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "readline/readline.h" "ac_cv_header_readline_readline_h" "$ac_includes_default" if test "x$ac_cv_header_readline_readline_h" = xyes then : printf "%s\n" "#define HAVE_READLINE_READLINE_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether readline supports history" >&5 printf %s "checking whether readline supports history... " >&6; } if test ${ax_cv_lib_readline_history+y} then : printf %s "(cached) " >&6 else $as_nop ax_cv_lib_readline_history="no" 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. */ char add_history (); int main (void) { return add_history (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_lib_readline_history="yes" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_lib_readline_history" >&5 printf "%s\n" "$ax_cv_lib_readline_history" >&6; } if test "$ax_cv_lib_readline_history" = "yes"; then printf "%s\n" "#define HAVE_READLINE_HISTORY 1" >>confdefs.h ac_fn_c_check_header_compile "$LINENO" "history.h" "ac_cv_header_history_h" "$ac_includes_default" if test "x$ac_cv_header_history_h" = xyes then : printf "%s\n" "#define HAVE_HISTORY_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "readline/history.h" "ac_cv_header_readline_history_h" "$ac_includes_default" if test "x$ac_cv_header_readline_history_h" = xyes then : printf "%s\n" "#define HAVE_READLINE_HISTORY_H 1" >>confdefs.h fi fi fi 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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" printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done # Check whether --with-postgresql was given. if test ${with_postgresql+y} then : withval=$with_postgresql; case $withval in #( [nN][oO]) : want_postgresql="no" ;; #( [yY][eE][sS]) : want_postgresql="yes" ;; #( *) : want_postgresql="yes" PG_CONFIG="$withval" ;; esac else $as_nop want_postgresql="yes" fi # populate cache if test "X$POSTGRESQL_CPPFLAGS" != X then : ac_cv_POSTGRESQL_CPPFLAGS="$POSTGRESQL_CPPFLAGS" fi if test "X$POSTGRESQL_LDFLAGS" != X then : ac_cv_POSTGRESQL_LDFLAGS="$POSTGRESQL_LDFLAGS" fi if test "X$POSTGRESQL_LIBS" != X then : ac_cv_POSTGRESQL_LIBS="$POSTGRESQL_LIBS" fi postgresql_version_req= found_postgresql="no" POSTGRESQL_VERSION="" if test X"$want_postgresql" = "Xyes" then : found_postgresql=no while true; do if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi if test X$PKG_CONFIG = X then : break fi _AX_LIB_POSTGRESQL_PKG_CONFIG_fail=no; if test "X$postgresql_version_req" = "X" then : if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpq\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpq") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then found_postgresql_pkg_config=yes else found_postgresql=no fi else $as_nop if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpq >= \"\$postgresql_version_req\"\""; } >&5 ($PKG_CONFIG --exists --print-errors "libpq >= "$postgresql_version_req"") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then found_postgresql=yes else found_postgresql=no fi fi if test "X$found_postgresql" = "no" then : break fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the PostgreSQL libraries CPPFLAGS" >&5 printf %s "checking for the PostgreSQL libraries CPPFLAGS... " >&6; } if test ${ac_cv_POSTGRESQL_CPPFLAGS+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_POSTGRESQL_CPPFLAGS="`$PKG_CONFIG libpq --cflags-only-I`" || _AX_LIB_POSTGRESQL_PKG_CONFIG_fail=yes fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_POSTGRESQL_CPPFLAGS" >&5 printf "%s\n" "$ac_cv_POSTGRESQL_CPPFLAGS" >&6; } if test "X$_AX_LIB_POSTGRESQL_PKG_CONFIG_fail" = "Xyes" then : break fi POSTGRESQL_CPPFLAGS="$ac_cv_POSTGRESQL_CPPFLAGS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the PostgreSQL libraries LDFLAGS" >&5 printf %s "checking for the PostgreSQL libraries LDFLAGS... " >&6; } if test ${ac_cv_POSTGRESQL_LDFLAGS+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_POSTGRESQL_LDFLAGS="`$PKG_CONFIG libpq --libs-only-L --libs-only-other`" || _AX_LIB_POSTGRESQL_PKG_CONFIG_fail=yes fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_POSTGRESQL_LDFLAGS" >&5 printf "%s\n" "$ac_cv_POSTGRESQL_LDFLAGS" >&6; } if test "X$_AX_LIB_POSTGRESQL_PKG_CONFIG_fail" = "Xyes" then : break fi POSTGRESQL_LDFLAGS="$ac_cv_POSTGRESQL_LDFLAGS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the PostgreSQL libraries LIBS" >&5 printf %s "checking for the PostgreSQL libraries LIBS... " >&6; } if test ${ac_cv_POSTGRESQL_LIBS+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_POSTGRESQL_LIBS="`$PKG_CONFIG libpq --libs-only-l`" || _AX_LIB_POSTGRESQL_PKG_CONFIG_fail=ye fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_POSTGRESQL_LIBS" >&5 printf "%s\n" "$ac_cv_POSTGRESQL_LIBS" >&6; } if test "X$_AX_LIB_POSTGRESQL_PKG_CONFIG_fail" = "Xyes" then : break fi POSTGRESQL_LIBS="$ac_cv_POSTGRESQL_LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the PostgreSQL version" >&5 printf %s "checking for the PostgreSQL version... " >&6; } if test ${ac_cv_POSTGRESQL_VERSION+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_POSTGRESQL_VERSION="`$PKG_CONFIG libpq --modversion`" || _AX_LIB_POSTGRESQL_PKG_CONFIG_fail=yes fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_POSTGRESQL_VERSION" >&5 printf "%s\n" "$ac_cv_POSTGRESQL_VERSION" >&6; } if test "X$_AX_LIB_POSTGRESQL_PKG_CONFIG_fail" = "Xyes" then : break fi POSTGRESQL_VERSION="$ac_cv_POSTGRESQL_VERSION" found_postgresql=yes break; done if test X"$found_postgresql" = "Xno" then : found_postgresql="no" _AX_LIB_POSTGRESQL_OLD_fail="no" while true; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the pg_config program" >&5 printf %s "checking for the pg_config program... " >&6; } if test ${ac_cv_path_PG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$PG_CONFIG"; then ac_path_PG_CONFIG_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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in pg_config do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_PG_CONFIG="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_PG_CONFIG" || continue ac_cv_path_PG_CONFIG="";$ac_path_PG_CONFIG --includedir > /dev/null \ && ac_cv_path_PG_CONFIG=$ac_path_PG_CONFIG ac_path_PG_CONFIG_found=: $ac_path_PG_CONFIG_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_PG_CONFIG"; then ac_cv_path_PG_CONFIG="" fi else ac_cv_path_PG_CONFIG=$PG_CONFIG fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_PG_CONFIG" >&5 printf "%s\n" "$ac_cv_path_PG_CONFIG" >&6; } PG_CONFIG=$ac_cv_path_PG_CONFIG if test "X$PG_CONFIG" = "X" then : break fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the PostgreSQL libraries CPPFLAGS" >&5 printf %s "checking for the PostgreSQL libraries CPPFLAGS... " >&6; } if test ${ac_cv_POSTGRESQL_CPPFLAGS+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_POSTGRESQL_CPPFLAGS="-I`$PG_CONFIG --includedir`" || _AX_LIB_POSTGRESQL_OLD_fail=yes fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_POSTGRESQL_CPPFLAGS" >&5 printf "%s\n" "$ac_cv_POSTGRESQL_CPPFLAGS" >&6; } if test "X$_AX_LIB_POSTGRESQL_OLD_fail" = "Xyes" then : break fi POSTGRESQL_CPPFLAGS="$ac_cv_POSTGRESQL_CPPFLAGS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the PostgreSQL libraries LDFLAGS" >&5 printf %s "checking for the PostgreSQL libraries LDFLAGS... " >&6; } if test ${ac_cv_POSTGRESQL_LDFLAGS+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_POSTGRESQL_LDFLAGS="-L`$PG_CONFIG --libdir`" || _AX_LIB_POSTGRESQL_OLD_fail=yes fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_POSTGRESQL_LDFLAGS" >&5 printf "%s\n" "$ac_cv_POSTGRESQL_LDFLAGS" >&6; } if test "X$_AX_LIB_POSTGRESQL_OLD_fail" = "Xyes" then : break fi POSTGRESQL_LDFLAGS="$ac_cv_POSTGRESQL_LDFLAGS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the PostgreSQL libraries LIBS" >&5 printf %s "checking for the PostgreSQL libraries LIBS... " >&6; } if test ${ac_cv_POSTGRESQL_LIBS+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_POSTGRESQL_LIBS="-lpq" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_POSTGRESQL_LIBS" >&5 printf "%s\n" "$ac_cv_POSTGRESQL_LIBS" >&6; } POSTGRESQL_LIBS="$ac_cv_POSTGRESQL_LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the PostgreSQL version" >&5 printf %s "checking for the PostgreSQL version... " >&6; } if test ${ac_cv_POSTGRESQL_VERSION+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_POSTGRESQL_VERSION=`$PG_CONFIG --version | sed "s/^PostgreSQL[[:space:]][[:space:]]*\([0-9.][0-9.]*\).*/\1/"` \ || _AX_LIB_POSTGRESQL_OLD_fail=yes fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_POSTGRESQL_VERSION" >&5 printf "%s\n" "$ac_cv_POSTGRESQL_VERSION" >&6; } if test "X$_AX_LIB_POSTGRESQL_OLD_fail" = "Xyes" then : break fi POSTGRESQL_VERSION="$ac_cv_POSTGRESQL_VERSION" if test X"$postgresql_version_req" != "X" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if PostgreSQL version $POSTGRESQL_VERSION is >= $postgresql_version_req" >&5 printf %s "checking if PostgreSQL version $POSTGRESQL_VERSION is >= $postgresql_version_req... " >&6; } # Used to indicate true or false condition ax_compare_version=false # Convert the two version strings to be compared into a format that # allows a simple string comparison. The end result is that a version # string of the form 1.12.5-r617 will be converted to the form # 0001001200050617. In other words, each number is zero padded to four # digits, and non digits are removed. ax_compare_version_A=`echo "$POSTGRESQL_VERSION" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ -e 's/[^0-9]//g'` ax_compare_version_B=`echo "$postgresql_version_req" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ -e 's/[^0-9]//g'` ax_compare_version=`echo "x$ax_compare_version_A x$ax_compare_version_B" | sed 's/^ *//' | sort -r | sed "s/x${ax_compare_version_A}/true/;s/x${ax_compare_version_B}/false/;1q"` if test "$ax_compare_version" = "true" ; then found_postgresql_req_version=yes else found_postgresql_req_version=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $found_postgresql_req_version" >&5 printf "%s\n" "$found_postgresql_req_version" >&6; } fi if test "Xfound_postgresql_req_version" = "Xno" then : break fi found_postgresql="yes" break done fi if test X"$found_postgresql" = Xyes then : _AX_LIB_POSTGRESQL_OLD_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $POSTGRESQL_CPPFLAGS" _AX_LIB_POSTGRESQL_OLD_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $POSTGRESQL_LDFLAGS" _AX_LIB_POSTGRESQL_OLD_LIBS="$LIBS" LIBS="$LIBS $POSTGRESQL_LIBS" while true; do ac_fn_c_check_header_compile "$LINENO" "libpq-fe.h" "ac_cv_header_libpq_fe_h" "$ac_includes_default" if test "x$ac_cv_header_libpq_fe_h" = xyes then : else $as_nop found_postgresql=no fi if test "X$found_postgresql" = "Xno" then : break fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the PostgreSQL library linking is working" >&5 printf %s "checking for the PostgreSQL library linking is working... " >&6; } if test ${ac_cv_postgresql_found+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { char conninfo[]="dbname = postgres"; PGconn *conn; conn = PQconnectdb(conninfo); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_postgresql_found=yes else $as_nop ac_cv_postgresql_found=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_postgresql_found" >&5 printf "%s\n" "$ac_cv_postgresql_found" >&6; } found_postgresql="$ac_cv_postgresql_found" if test "X$found_postgresql" = "Xno" then : break fi break done CPPFLAGS="$_AX_LIB_POSTGRESQL_OLD_CPPFLAGS" LDFLAGS="$_AX_LIB_POSTGRESQL_OLD_LDFLAGS" LIBS="$_AX_LIB_POSTGRESQL_OLD_LIBS" fi if test "x$found_postgresql" = "xyes" then : printf "%s\n" "#define HAVE_POSTGRESQL 1" >>confdefs.h fi fi if test "x$found_postgresql" = "xyes" then : : else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: PostgreSQL library not found" >&5 printf "%s\n" "$as_me: PostgreSQL library not found" >&6;} fi case "$ax_cv_ncurses" in "no") as_fn_error $? "ncurses not found" "$LINENO" 5 esac case "$ax_cv_ncursesw" in "no") { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: The found ncurses library does not support wide-char." >&5 printf "%s\n" "$as_me: WARNING: The found ncurses library does not support wide-char." >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This means that pspg will not correctly render UTF-8." >&5 printf "%s\n" "$as_me: WARNING: This means that pspg will not correctly render UTF-8." >&2;} esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for roundl in -lm" >&5 printf %s "checking for roundl in -lm... " >&6; } if test ${ac_cv_lib_m_roundl+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lm $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. */ char roundl (); int main (void) { return roundl (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_m_roundl=yes else $as_nop ac_cv_lib_m_roundl=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_roundl" >&5 printf "%s\n" "$ac_cv_lib_m_roundl" >&6; } if test "x$ac_cv_lib_m_roundl" = xyes then : printf "%s\n" "#define HAVE_LIBM 1" >>confdefs.h LIBS="-lm $LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 printf %s "checking for library containing clock_gettime... " >&6; } if test ${ac_cv_search_clock_gettime+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$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. */ char clock_gettime (); int main (void) { return clock_gettime (); ; return 0; } _ACEOF for ac_lib in '' rt posix4 do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_clock_gettime=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_clock_gettime+y} then : break fi done if test ${ac_cv_search_clock_gettime+y} then : else $as_nop ac_cv_search_clock_gettime=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 printf "%s\n" "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else $as_nop as_fn_error $? "Function clock_gettime not available." "$LINENO" 5 fi ac_config_files="$ac_config_files config.make" # Check whether --with-menu was given. if test ${with_menu+y} then : withval=$with_menu; compile_menu=no else $as_nop compile_menu=yes fi if test "x$compile_menu" != "xyes"; then COMPILE_MENU=0 else if test "$ax_cv_panel" != yes; then as_fn_error $? "ncurses panel library not found" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: pspg will be compiled with menu" >&5 printf "%s\n" "$as_me: pspg will be compiled with menu" >&6;} CFLAGS="$CFLAGS -DCOMPILE_MENU" COMPILE_MENU=1 fi # supply -g if --enable-debug if test "$enable_debug" = yes && test "$ac_cv_prog_cc_g" = yes; then CFLAGS="$CFLAGS -g" fi for ac_header in sys/inotify.h do : ac_fn_c_check_header_compile "$LINENO" "sys/inotify.h" "ac_cv_header_sys_inotify_h" "$ac_includes_default" if test "x$ac_cv_header_sys_inotify_h" = xyes then : printf "%s\n" "#define HAVE_SYS_INOTIFY_H 1" >>confdefs.h have_inotify=yes else $as_nop have_inotify=no fi done # Check whether --with-inotify was given. if test ${with_inotify+y} then : withval=$with_inotify; with_inotify=no else $as_nop with_inotify=yes fi if test "x$have_inotify" = "xyes"; then if test "x$with_inotify" != "xyes"; then have_inotify=no else printf "%s\n" "#define HAVE_INOTIFY 1" >>confdefs.h fi fi for ac_header in sys/event.h do : ac_fn_c_check_header_compile "$LINENO" "sys/event.h" "ac_cv_header_sys_event_h" "$ac_includes_default" if test "x$ac_cv_header_sys_event_h" = xyes then : printf "%s\n" "#define HAVE_SYS_EVENT_H 1" >>confdefs.h have_kqueue=yes else $as_nop have_kqueue=no fi done if test "x$have_kqueue" = "xyes"; then for ac_func in kqueue do : ac_fn_c_check_func "$LINENO" "kqueue" "ac_cv_func_kqueue" if test "x$ac_cv_func_kqueue" = xyes then : printf "%s\n" "#define HAVE_KQUEUE 1" >>confdefs.h have_kqueue=yes else $as_nop have_kqueue=no fi done if test "x$have_kqueue" = "xyes"; then printf "%s\n" "#define HAVE_KQUEUE 1" >>confdefs.h fi fi ac_fn_c_check_header_compile "$LINENO" "sys/utsname.h" "ac_cv_header_sys_utsname_h" "$ac_includes_default" if test "x$ac_cv_header_sys_utsname_h" = xyes then : printf "%s\n" "#define HAVE_SYS_UTSNAME_H 1" >>confdefs.h fi 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_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$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+y} || &/ 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$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}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.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=`printf "%s\n" "$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 : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$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 as_nop=: if test ${ZSH_VERSION+y} && (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 $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; 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 # 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # 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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$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_nop 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_nop 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 || printf "%s\n" 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 # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. 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 # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' 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=`printf "%s\n" "$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 || printf "%s\n" 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 pspg $as_me 0, which was generated by GNU Autoconf 2.71. 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 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _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 Configuration files: $config_files Report bugs to ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ pspg config.status 0 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 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' 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 ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) printf "%s\n" "$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 \printf "%s\n" "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 printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _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.make") CONFIG_FILES="$CONFIG_FILES config.make" ;; *) 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+y} || CONFIG_FILES=$config_files 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" eval set X " :F $CONFIG_FILES " 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=`printf "%s\n" "$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 '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$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 || printf "%s\n" 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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$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 # _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@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$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 $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"; } && { printf "%s\n" "$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 printf "%s\n" "$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 ;; 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi pspg-5.8.1/configure.ac000066400000000000000000000047451452457446400150150ustar00rootroot00000000000000AC_PREREQ([2.70]) AC_INIT([pspg],[0],[pavel.stehule@gmail.com],[pspg]) AC_LANG([C]) AC_CONFIG_SRCDIR(src) dnl Document where we keep our .m4 file. AC_CONFIG_MACRO_DIR([tools]) dnl Make sure aclocal actually found it! m4_pattern_forbid([^AX_]) AC_PROG_CC AC_CHECK_INCLUDES_DEFAULT AC_PROG_EGREP AC_HEADER_TIOCGWINSZ AX_DEBUG_CFLAGS AX_WITH_CURSES AX_WITH_CURSES_PANEL AX_LIB_READLINE AX_LIB_POSTGRESQL([],[], AC_MSG_NOTICE([PostgreSQL library not found])) case "$ax_cv_ncurses" in "no") AC_MSG_ERROR([ncurses not found]) esac case "$ax_cv_ncursesw" in "no") AC_MSG_WARN([The found ncurses library does not support wide-char.]) AC_MSG_WARN([This means that pspg will not correctly render UTF-8.]) esac AC_CHECK_LIB([m],[roundl]) AC_SEARCH_LIBS([clock_gettime], [rt posix4], [], [AC_MSG_ERROR([Function clock_gettime not available.])] ) AC_SUBST(enable_debug) AC_SUBST(CURSES_LIBS) AC_SUBST(COVERAGE_CFLAGS) AC_SUBST(COVERAGE_LDFLAGS) AC_SUBST(COMPILE_MENU) AC_SUBST(POSTGRESQL_CFLAGS) AC_SUBST(POSTGRESQL_LDFLAGS) AC_SUBST([POSTGRESQL_VERSION]) AC_SUBST([POSTGRESQL_CPPFLAGS]) AC_SUBST([POSTGRESQL_LDFLAGS]) AC_SUBST([POSTGRESQL_LIBS]) AC_CONFIG_FILES([config.make]) AC_ARG_WITH([menu], AS_HELP_STRING([--without-menu]), [compile_menu=no], [compile_menu=yes]) if test "x$compile_menu" != "xyes"; then COMPILE_MENU=0 else if test "$ax_cv_panel" != yes; then AC_MSG_ERROR([ncurses panel library not found]) fi AC_MSG_NOTICE([pspg will be compiled with menu]) CFLAGS="$CFLAGS -DCOMPILE_MENU" COMPILE_MENU=1 fi # supply -g if --enable-debug if test "$enable_debug" = yes && test "$ac_cv_prog_cc_g" = yes; then CFLAGS="$CFLAGS -g" fi AC_CHECK_HEADERS([sys/inotify.h], have_inotify=yes, have_inotify=no) AC_ARG_WITH([inotify], [AS_HELP_STRING([--without-inotify], [(Linux only) do not build with inotify support (default is yes)])], [with_inotify=no], [with_inotify=yes]) if test "x$have_inotify" = "xyes"; then if test "x$with_inotify" != "xyes"; then have_inotify=no else AC_DEFINE(HAVE_INOTIFY, 1, [Define if you have inotify support (linux only)]) fi fi AC_CHECK_HEADERS([sys/event.h], have_kqueue=yes, have_kqueue=no) if test "x$have_kqueue" = "xyes"; then AC_CHECK_FUNCS(kqueue, have_kqueue=yes, have_kqueue=no) if test "x$have_kqueue" = "xyes"; then AC_DEFINE(HAVE_KQUEUE, 1, [Define if you have kqueue support (BSD only)]) fi fi AC_CHECK_HEADERS([sys/utsname.h]) AC_OUTPUT pspg-5.8.1/pspg.1000066400000000000000000000703461452457446400135620ustar00rootroot00000000000000.\" generated with Ronn-NG/v0.9.1 .\" http://github.com/apjanke/ronn-ng/tree/0.9.1 .TH "PSPG" "1" "February 2023" "" "pspg manual" .SH "NAME" \fBpspg\fR \- Postgres Pager .P Everybody who uses \fBpsql\fR also uses the \fBless\fR pager\. Which, while it works well, has no special support for tabular data\. I found a few projects, but none was good enough for this purpose\. Thus I decided to write a small specialized pager to use as a \fBpsql\fR pager\. .P This pager can be used from the following command line clients, too: .IP "\[ci]" 4 \fBmysql\fR .IP "\[ci]" 4 \fBsqlite\fR .IP "\[ci]" 4 \fBpgcli\fR \fIhttps://github\.com/dbcli/pgcli/\fR .IP "\[ci]" 4 \fBmonetdb\fR .IP "\[ci]" 4 \fBTrino (formerly Presto SQL)\fR \fIhttps://trino\.io/\fR .IP "\[ci]" 4 \fBusql\fR \fIhttps://github\.com/xo/usql/\fR .IP "\[ci]" 4 \fBsqlcl\fR \fIhttps://github\.com/okbob/pspg/#sqlcl\fR (for oracle) .IP "\[ci]" 4 \fBnushell\fR \fIhttps://www\.nushell\.sh/\fR .IP "" 0 .SH "Main target" .IP "\[ci]" 4 ability to freeze the first few rows, or first few columns .IP "\[ci]" 4 ability to sort data by the specified numeric column .IP "\[ci]" 4 ability to use fancy themes \- like \fBmcview\fR or \fBFoxPro\fR \- http://okbob\.blogspot\.com/2019/12/pspg\-themes\-what\-you\-use\-it\.html .IP "\[ci]" 4 mouse is supported and used .IP "\[ci]" 4 ability to copy a selected range to the clipboard .IP "" 0 .SH "Video presentation" \fIhttps://www\.youtube\.com/watch?v=JyxuEkoYDQk\fR .SH "Screenshots" .SH "Options" .nf [pavel@localhost ~]$ pspg \-\-help pspg is a Unix pager designed for table browsing\. Usage: pspg [OPTION] [file] General options: \-\-about about authors \-\-help show this help \-V, \-\-version show version \-\-info show info about libraries and system \-\-direct\-color force direct\-color terminal mode \-f, \-\-file=FILE open file \-F, \-\-quit\-if\-one\-screen quit if content is one screen \-\-clipboard\-app=NUM specify app used by copy to clipboard (1, 2, 3) \-\-esc\-delay=NUM specify escape delay in ms (\-1 inf, 0 not used, ) \-\-interactive force interactive mode \-\-ignore_file_suffix don\'t try to deduce format from file suffix \-\-ni not interactive mode (only for csv and query) \-\-no\-watch\-file don\'t watch inotify event of file \-\-no\-mouse don\'t use own mouse handling \-\-no\-progressive\-load don\'t use progressive data load \-\-no\-sigint\-search\-reset without reset searching on sigint (CTRL C) \-\-no\-sleep without waits against flickering \-\-no_xterm_mouse_mode don\'t use optional xterm mouse mode \-\-only\-for\-tables use std pager when content is not table \-\-on\-sigint\-exit exit on sigint(CTRL C or Escape) \-\-pgcli\-fix try to fix some pgcli related issues \-\-querystream read queries from stream forever \-\-quit\-on\-f3 exit on F3 like mc viewers \-\-rr=ROWNUM rows reserved for specific purposes \-\-stream read input forever \-X, \-\-reprint\-on\-exit preserve content after exit Output format options: \-a, \-\-ascii force ascii \-b, \-\-blackwhite black\-white style \-s, \-\-style=N set color style number (0\.\.22) \-\-bold\-labels row, column labels use bold font \-\-bold\-cursor cursor use bold font \-\-border type of borders (0\.\.2) \-\-double\-header header separator uses double lines \-\-force\-uniborder replace ascii borders by unicode borders \-\-highlight\-odd\-rec highlights odd records (when it is supported by style) \-\-hide\-header\-line hides header line (between column names and data) \-\-ignore\-bad\-rows rows with wrong column numbers are ignored \-\-null=STRING STRING used instead NULL Searching options \-g \-\-hlite\-search, \-G \-\-HILITE\-SEARCH don\'t highlight lines for searches \-i \-\-ignore\-case ignore case in searches that do not contain uppercase \-I \-\-IGNORE\-CASE ignore case in all searches Interface options: \-c, \-\-freezecols=N freeze N columns (0\.\.9) \-\-less\-status\-bar status bar like less pager \-\-line\-numbers show line number column \-\-menu\-always show top bar menu every time \-\-no\-bars, \-\-no\-commandbar, \-\-no\-topbar don\'t show bottom, top bar or both \-\-no\-cursor row cursor will be hidden \-\-no\-last\-row\-search don\'t use the last pattern when starting a new search \-\-no\-scrollbar don\'t show scrollbar \-\-no\-sound don\'t use beep when scroll is not possible \-\-tabular\-cursor cursor is visible only when data has table format \-\-vertical\-cursor show vertical column cursor Input format options: \-\-csv input stream has csv format \-\-csv\-separator char used as field separator \-\-csv\-header [on/off] specify header line usage \-\-skip\-columns\-like="SPACE SEPARATED STRING LIST" columns with substr in name are ignored \-\-tsv input stream has tsv format On exit options: \-\-on\-exit\-reset sends reset terminal sequence "\e33c" \-\-on\-exit\-clean sends clean terminal sequence "\e033[2J" \-\-on\-exit\-erase\-line sends erase line terminal sequence "\e33[2K\er" \-\-on\-exit\-sgr0 sends sgr0 terminal sequence "\e033[0;10m" Watch mode options: \-q, \-\-query=QUERY execute query \-w, \-\-watch time the query (or read file) is repeated every time (sec) Connection options \-d, \-\-dbname=DBNAME database name \-h, \-\-host=HOSTNAME database server host (default: "local socket") \-p, \-\-port=PORT database server port (default: "5432") \-U, \-\-username=USERNAME database user name \-W, \-\-password force password prompt Debug options: \-\-log=FILE log debug info to file \-\-wait=NUM wait NUM seconds to allow attach from a debugger .fi .P pspg shares a lot of key commands with the less pager or the vi editor\. .P Options can be passed within the environment variable \fBPSPG\fR, too\. .SH "Environment variables" .TS allbox; l l. Name Usage \fBPSPG\fR can holds same options like command line \fBPSPG_CONF\fR path to configuration file \fBPSPG_HISTORY\fR path to file pspg\'s readline history file .TE .SH "Themes" .TS allbox; l l. Code Name 0 black & white 1 Midnight Commander like 2 FoxPro like 3 Pdmenu like 4 White theme 5 Mutt like 6 PCFand like 7 Green theme 8 Blue theme 9 Word Perfect like 10 Low contrast blue theme 11 Dark cyan/black mode 12 Paradox like 13 dBase IV retro style 14 dBase IV retro style (Magenta labels) 15 Red white theme 16 Simple theme 17 Solarized dark theme 18 Solarized light theme 19 Gruvbox light theme 20 Tao Light theme 21 FlatWhite theme 22 Relational pipes theme 23 Paper Color theme .TE .P see http://okbob\.blogspot\.cz/2017/07/i\-hope\-so\-every\-who\-uses\-psql\-uses\-less\.html .SS "Custom themes" The theme can be customized over base and menu templates referencing the built\-in themes\. The custom theme file should be saved in directory with \fBpspg\fR configuration\. The name of this file should be \.pspg_theme_xxx\. The custom theme can be selected by command line option \fB\-\-custom\-style=name\fR or by command \fB\ectheme name\fR\. .P .P Example of a custom theme file (named \fB\.pspg_theme_mc2\fR (it can be activated by command \fB\ectheme mc2\fR)): .IP "" 4 .nf template = 1 template_menu = 3 background = black, white data = black, white label = black, white, italic, bold border = #000000, white footer = lightgray, white cursor_data = blue, white, italic, bold, dim, reverse cursor_border = blue, blue , italic, bold, dim, reverse cursor_label = blue, white, italic, bold, dim, reverse cursor_footer = blue, white, italic, bold, dim, reverse cursor_bookmark = red, white, italic, bold, dim, reverse cross_cursor = white, blue, italic, bold cross_cursor_border = brightblue, blue status_bar = black, lightgray title = black, lightgray scrollbar_arrows = black, white scrollbar_background = lightgray, white scrollbar_slider = white, gray .fi .IP "" 0 .P Some keys can be marked by symobol \fB*\fR\. Marked keys are used for odd records\. .IP "" 4 .nf data* = black, lightgray label* = black, lightgray, italic, bold border* = #000000, lightgray .fi .IP "" 0 .P \fBtemplate\fR and \fBtemplate_menu\fR set fallback values for any keys not specified in the custom theme\. \fBtemplate_menu\fR in particular is currently the only way to customize the F9 menu appearance\. .TS allbox; l l. key customizes \fBbackground\fR Background color \fBdata\fR Data (non\-header or frozen column) text \fBborder\fR Border color \fBlabel\fR Label (header or frozen column) text \fBrow_number\fR Line numbers \fBrecord_number\fR \~ \fBselected_area\fR \~ \fBfooter\fR Results footer (non\-tabular e\.g\. rowcount) \fBcursor_data\fR Highlighted data (non\-header or frozen column) text \fBcursor_border\fR Highlighted border color \fBcursor_label\fR Highlighted label (header or frozen column) text \fBcursor_row_number\fR Highlighted line numbers \fBcursor_record_number\fR \~ \fBcursor_selected_area\fR \~ \fBcursor_footer\fR Highlighted results footer (non\-tabular e\.g\. rowcount) \fBscrollbar_arrows\fR Scrollbar up and down arrows \fBscrollbar_background\fR Scrollbar "empty" background \fBscrollbar_slider\fR Scrollbar slider over the background \fBscrollbar_active_slider\fR Scrollbar slider grabbed by mouse \fBtitle\fR Results headline (in psql describe commands) \fBstatus_bar\fR Top query and cursor location information \fBprompt_bar\fR \~ \fBinfo_bar\fR Info text (e\.g\. "Not found" when searching) \fBinput_bar\fR Input prompt and text (e\.g\. search) \fBerror_bar\fR \~ \fBbookmark\fR \~ \fBbookmark_border\fR \~ \fBcursor_bookmark\fR \~ \fBcross_cursor\fR Highlighted cell at intersection of horizontal and vertical cursors \fBcross_cursor_border\fR Borders at intersection of horizontal and vertical cursors \fBmatched_pattern\fR Search result match text \fBmatched_pattern_nohl\fR \~ \fBmatched_line\fR Line containing search result \fBmatched_line_border\fR Borders in search result line \fBmatched_pattern_cursor\fR Highlighted search result match text \fBmatched_line_vertical_cursor\fR Vertically highlighted search result match text \fBmatched_line_vertical_cursor_border\fR Borders of vertically highlighted cell with search result match \fBerror\fR \~ .TE .P ANSI colors \fBBlack\fR, \fBRed\fR, \fBGreen\fR, \fBBrown\fR, \fBBlue\fR, \fBMagenta\fR, \fBCyan\fR, \fBLightGray\fR, \fBGray\fR, \fBBrightRed\fR, \fBBrightGreen\fR, \fBYellow\fR, \fBBrightBlue\fR, \fBBrightMagenta\fR, \fBBrightCyan\fR, \fBWhite\fR, and \fBDefault\fR will display as your terminal emulator configures them\. Alternatively, you can specify hex RGB values \fB#FF00FF\fR\. .P Styles are any combination of: \fBbold\fR, \fBitalic\fR, \fBunderline\fR, \fBreverse\fR, \fBstandout\fR, \fBdim\fR\. .P If the format of some key is not correct, then this row is ignored\. For debugging of custom theme is good to start \fBpspg\fR with option \fB\-\-log\fR\. An information about broken definitions are stored in log file\. .SH "Keyboard commands" .TS allbox; l l. Key(s) Command \fB0\fR, \fB1\fR, \fB2\fR, \fB3\fR, \.\., \fB9\fR freeze first N columns \fBKEY_UP\fR, \fBk\fR navigate backward by one line \fBKEY_DOWN\fR, \fBj\fR navigate forward by one line \fBKEY_LEFT\fR, \fBh\fR scroll to left \fBKEY_RIGHT\fR, \fBl\fR scroll to right \fBCtrl\fR+\fBKEY_LEFT\fR scroll one char left \fBCtrl\fR+\fBKEY_RIGHT\fR scroll one char right \fBShift\fR+\fBKEY_LEFT\fR scroll one column left \fBShift\fR+\fBKEY_RIGHT\fR scroll one column right \fBCtrl\fR+\fBHome\fR, \fBg\fR go to the start of file \fBCtrl\fR+\fBEnd\fR, \fBG\fR go to the end of file \fBAlt\fR+\fBl\fR go to line number \fBH\fR go to first line of current window \fBM\fR go to half of current window \fBL\fR go to end of current window \fBPPAGE\fR, \fBCtrl\fR+\fBb\fR backward one window \fBNPAGE\fR, \fBCtrl\fR+\fBf\fR, \fBspace\fR forward one window \fBHOME\fR, \fB^\fR go to begin of line, first column \fBEND\fR, \fB$\fR go to end of line, last column \fBCtrl\fR+\fBe\fR scroll a window down \fBCtrl\fR+\fBy\fR scroll a window up \fBCtrl\fR+\fBd\fR forward a half window \fBCtrl\fR+\fBu\fR backward a half window \fBs\fR save content to file \fB/\fR search for a pattern which will take you to the next occurrence \fB?\fR search for a pattern which will take you to the previous occurrence \fBn\fR for next match \fBN\fR for next match in reverse direction \fBc\fR column search \fBAlt\fR+\fB/\fR search for a pattern inside selected area \fBAlt\fR+\fB?\fR backward search for a pattern inside selected area \fBAlt\fR+\fBc\fR switch (on, off) drawing line cursor \fBAlt\fR+\fBm\fR switch (on, off) own mouse handler \fBAlt\fR+\fBn\fR switch (on, off) drawing line numbers \fBAlt\fR+\fBv\fR, \fBdouble click\fR on column header switch (on, off) drawing column cursor \fBMouse button wheel\fR scroll vertical \fBAlt\fR+\fBMouse button wheel\fR scroll horizontal \fBF9\fR show menu \fBq\fR, \fBF10\fR, \fBEsc\fR \fB0\fR quit \fBAlt\fR+\fBq\fR quit and print raw (unformatted) content \fBAlt\fR+\fBk\fR, \fBAlt\fR+\fBdouble click\fR switch bookmark \fBAlt\fR+\fBj\fR go to next bookmark \fBAlt\fR+\fBi\fR go to previous bookmark \fBAlt\fR+\fBo\fR flush bookmarks \fBa\fR sort ascendent \fBd\fR sort descendent \fBu\fR unsorted (sorted in origin order) \fBSpace\fR stop/continue in watch mode \fBR\fR Repaint screen and refresh input file \fBIns\fR export row, column or cell to default target \fBshift\fR+\fBcursor\|\.\|\.\|\.\fR define range \fBF3\fR start/finish of selection rows \fBShift\fR+\fBF3\fR start/finish of selection block \fBCtrl\fR+\fBdrag mouse\fR defines rows selection, on column header defines column selection \fBCtrl\fR+\fBo\fR show primary screen, press any key to return to pager again \fB%\fR, \fBCtrl\fR+\fBa\fR select all .TE .SH "Backslash commands" .TS allbox; l l. Command Description \fB\eN\fR go to line number \fB\e+N\fR go to N lines forward \fB\e\-N\fR go to N lines backward \fB\eN+\fR go to line number \fB\eN\-\fR go to line number from end \fB\etheme N\fR set theme number \fB\ecopy [all\e|selected] [nullstr "str"] [csv\e|tsv\e|insert\e|text\e|pipesep\e|sqlvalues]\fR copy data to clipboard \fB\esave [all\e|selected] [nullstr "str"] [csv\e|tsv\e|insert\e|text\e|pipesep\e|sqlvalues]\fR copy data to clipboard \fB\eorder [N\e|colum name]\fR sort by colum \fB\eorderd [N\e|colum name]\fR desc sort by column \fB\esort [N\e|colum name]\fR sort by colum \fB\esortd [N\e|colum name]\fR desc sort by column \fB\edsort [N\e|colum name]\fR desc sort by column (alias) \fB\ersort [N\e|colum name]\fR desc sort by column (alias) \fB\easc [N\e|colum name]\fR sort by colum (alias) \fB\edesc [N\e|colum name]\fR desc sort by colum (alias) \fB\esearch [back] [selected] [colum name] [string\e|"string"]\fR search string in data .TE .P The output can be redirected to any command when the name starts with pipe symbol: .IP "" 4 .nf \ecopy csv | less .fi .IP "" 0 .SH "Ending" The pager can be ended by pressing keys \fBq\fR or \fBF10\fR or \fBEsc\fR \fB0\fR\. With option \fB\-\-on\-sigint\-exit\fR then the pager is closed by pressing keys \fBCtrl\fR+\fBc\fR or \fBEsc\fR \fBEsc\fR\. .SH "Use Escape, key instead Alt + key" pspg supports a possibility to use a sequence of keys \fBEsc\fR, \fBkey\fR instead an combination of \fBAlt\fR+\fBkey\fR\. The interval between pressing \fBEsc\fR and \fBkey\fR is limmited by interval specified by option \fBesc\-delay\fR or by configuration\'s option \fBesc_delay\fR\. This is max delay time in ms\. After this interval, the single pressing \fBEsc\fR is interpreted as \fBEscape\fR\. \-1 meas unlimited, 0 disables this feature\. .SH "Column search" Column search is case insensitive every time\. Searched column is marked by vertical cursor\. Last non empty string searching pattern is used when current searching pattern is empty string\. Searching is starting after visible vertical column or on first visible not freezed columns (after some horizontal scrolling) or on first column\. After last column searching starts from first again\. .SH "Export & Clipboard" For clipboard support the clipboard application should be installed: 1\. wl\-clipboard (Wayland), 2\. xclip (xwindows) or 3\. pbcopy (MacOS)\. .P \fBpspg\fR try to translate unicode symbol \'∅\' to NULL every time\. If you don\'t use special setting by \fB\epset null \|\.\|\.\|\.\fR, then \fBpsql\fR displays empty string instead NULL\. \fBpspg\fR hasn\'t any special detection (in export routines) for this case\. You should to check and enable or disable menu item \fBEmpty string is NULL\fR\. .P \fBpspg\fR has automatic detection of clipboard application\. Unfortunatelly, this detection should not to work for same cases\. You can specify the application by specify number (1,2,3) to \fB\-\-clipboard\-app\fR option\. .SH "Status line description" .IP "\[ci]" 4 \fBV: [d/d d\.\.d]\fR \- vertical cursor: (column number)/(columns) (char possitions from) \.\. (char possitions to) .IP "\[ci]" 4 \fBFC: d\fR \- freezed columns length in chars .IP "\[ci]" 4 \fBC: d\.\.d/d\fR \- unfreezed visible data in chars (from \.\. to)/(total) .IP "\[ci]" 4 \fBL:[d + d d/d]\fR \- lines (number of first visible line) + (number of line of display), (current line)/(lines) .IP "\[ci]" 4 \fBd%\fR \- percent of already displayed data .IP "" 0 .SH "Usage as csv viewer" It works well with miller http://johnkerl\.org/miller/doc/index\.html .IP "" 4 .nf mlr \-\-icsv \-\-opprint \-\-barred put \'\' obce\.csv | pspg \-\-force\-uniborder .fi .IP "" 0 .P New version has integrated csv support \- just use \fB\-\-csv\fR option\. .P It can be integrated into \fBmc\fR .IP "\[ci]" 4 copy file from \fB/etc/mc/mc\.ext\fR to your \fB~/\.config/mc directory\fR .IP "\[ci]" 4 insert there .IP "" 0 .IP "" 4 .nf ##csv regex/\e\.csv View=pspg \-f %f \-\-csv .fi .IP "" 0 .IP "\[ci]" 4 restart \fBmc\fR .IP "" 0 .SH "Known issues" .IP "\[ci]" 4 When you use \fBpspg\fR on Cygwin, then some temporary freezing of scrolling was reported In this case, please, use an option \fB\-\-no\-sleep\fR\. I see slow scrolling (via scrollbar) inside konsole (KDE terminal)\. The option \fB\-\-no\-sleep\fR helps too\. .IP "" 0 .SH "Usage in watch mode" The result of query can be refreshed every n seconds\. \fBpspg\fR remembers cursor row, possible vertical cursor, possible ordering\. The refreshing should be paused by pressing \fBspace\fR key\. Repeated pressing of this key enables refreshing again\. .P \fBpspg\fR uses inotify API when it is available, and when input file is changed, then \fBpspg\fR reread file immediately\. This behave can be disabled by option \fB\-\-no\-watch\-file\fR or by specification watch time by option \fB\-\-watch\fR\. .SH "Streaming modes" \fBpspg\fR can read a continuous stream of tabular data from pipe, named pipe or from file (with an option \fB\-\-stream\fR or it can read a stream of queries from pipe or from file (with an option \fB\-\-querystream\fR)\. In stream mode, only data in table format can be processed, because \fBpspg\fR uses empty line as separator between tables\. .P The query stream mode is an sequence of SQL statements separated by char GS (Group separator \- 0x1D on separated line\. .SH "Recommended psql configuration" you should to add to your profile: .IP "" 4 .nf #for Postgres 10 and older export PAGER="pspg" #for postgres 11 and newer export PSQL_PAGER="pspg" #or "\esetenv PAGER pspg" to \.psqlrc .fi .IP "" 0 .P and \fB\.psqlrc\fR .IP "" 4 .nf \eset QUIET 1 \epset linestyle unicode \epset border 2 \epset null ∅ \eunset QUIET .fi .IP "" 0 .P some possible configuration: .IP "" 4 .nf \-\- Switch pagers with :x and :xx commands \eset x \'\e\esetenv PAGER less\' \eset xx \'\e\esetenv PAGER \e\'pspg \-bX \-\-no\-mouse\e\'\' :xx .fi .IP "" 0 .P \fBLC_CTYPE\fR should be correct\. Mainly when you use unicode borders\. ncurses doesn\'t display unicode borders (produced by \fBpsql\fR) without correct setting of this variable\. Is possible to check a value \'C\.UTF8\'\. .SH "Attention" When you use a option \fB\-\-only\-for\-tables\fR, then .IP "\[ci]" 4 set \fBPAGER\fR to \fBpspg\fR and \fBPSQL_PAGER\fR to \fBless\fR or .IP "\[ci]" 4 set \fBPAGER\fR to \fBless\fR and \fBPSQL_PAGER\fR to \fBpspg\fR .IP "" 0 .SH "MySQL usage" .nf MariaDB [sakila]> pager pspg \-s 14 \-X \-\-force\-uniborder \-\-quit\-if\-one\-screen PAGER set to \'pspg \-s 14 \-X \-\-force\-uniborder \-\-quit\-if\-one\-screen\' MariaDB [sakila]> select now(); MariaDB [sakila]> select * from nicer_but_slower_film_list limit 100; .fi .SH "SQLite" SQLite native client doesn\'t produce well formatted output, but can be forced to generate CSV format \- and this format is well readable for \fBpspg\fR .IP "" 4 .nf sqlite3 \-csv \-header testdb\.db \'select * from foo2\' | pspg \-\-csv \-\-csv\-header=on \-\-double\-header .fi .IP "" 0 .SH "pgcli" pgcli \fIhttps://github\.com/dbcli/pgcli/\fR needs the following configuration options (\fB~/\.config/pgcli/config\fR): .IP "" 4 .nf pager = /usr/bin/pspg \-\-csv \-\-rr=2 \-\-quit\-if\-one\-screen \-\-ignore\-case \-\-csv\-header on \-\-pgcli\-fix table_format = csv .fi .IP "" 0 .P Older version of pgcli had very slow output in tabular format\. An workaround was using csv format\. This should not be necessary on current versions when the performance issue was fixed\. An option \fB\-\-pgcli\-fix\fR fixed import of partially broken csv format generated by \fBpgcli\fR\. Modern version of \fBpgcli\fR doesn\'t need csv format, and doesn\'t need \fB\-\-pgcli\-fix\fR option\. .IP "" 4 .nf pager = /usr/bin/pspg \-\-rr=2 \-\-quit\-if\-one\-screen \-\-ignore\-case .fi .IP "" 0 .SH "sqlcl" As \fBsqlcl\fR doesn\'t currently support a pager option directly, you can either use a tool like qsh \fIhttps://github\.com/muhmud/qsh\fR to work around this issue, or use the pspg\.sql \fIhttps://github\.com/okbob/pspg/blob/master/scripts/sqlcl/pspg\.sql\fR script from this repo\. .P To use the script, start \fBsqlcl\fR as shown below (it\'s important to pass in the details of your current tty): .IP "" 4 .nf $ TTY=$(tty) sqlcl system/system @/path/to/pspg\.sql .fi .IP "" 0 .P You can now have the results of a query sent to \fBpspg\fR like this: .IP "" 4 .nf SQL> pspg select * from user_tables; .fi .IP "" 0 .SH "nushell" The \fBpspg\fR supports default \fBtable_mode\fR: \fBrounded\fR and \fBtable_mode\fR: \fBheavy\fR\. .P The conversion to csv can be used too\. .IP "" 4 .nf sys | get cpu | to csv | pspg \-\-csv .fi .IP "" 0 .P Note: \fBfooter_mode\fR should be disabled .SH "Note \- mouse" pspg try to use xterm mouse mode 1002, when terminal and ncurses are not too antique\. If there are problems with usage \- unwanted visual artefacts when you move with mouse when some mouse button is pressed, then 1\. please, report issue (please, attach log file), 2\. use an option \fB\-\-no\-xterm\-mouse\-mode\fR and \fBpspg\fR will not try to activate this mode\. .SH "Note \- true color themes on KDE konsole terminal" On my Fedora this terminal doesn\'t correctly display true color themes\. The basic problem is in default \fBTERM\fR setting, that is \fBxterm\-256color\fR\. Unfortunately, the \fBkonsole\fR terminal is not fully compatible with \fBxterm\fR, and doesn\'t allow color changing\. You can force direct colors by using the option \fB\-\-direct\-color\fR or by setting \fBTERM=xterm\-direct\fR\. Second option is more corect setting of \fBTERM\fR variable to \fBkonsole\-256color\fR\. In this case the \fBpspg\fR will map the true rgb colors to supported 256 colors\. .SH "Note \- compilation issue" Some linker issues can be fixed by: .IP "" 4 .nf I changed gcc \-lncursesw pager\.c \-o pspg \-ggdb to gcc pager\.c \-o pspg \-ggdb \-lncursesw .fi .IP "" 0 .P If you want to use \fBpspg\fR as Postgres client, then you need run \fBconfigure \-\-with\-postgresql=yes\fR\. On Fedora with own Postgres build I had to install \fBopenssl\-devel\fR package and I had to set \fBexport PKG_CONFIG_PATH="/usr/local/pgsql/master/lib/pkgconfig/"\fR\. .P On FreeBsd you should to use \fBgmake\fR instead \fBmake\fR\. .SH "Note \- Installation" When you compile code from source, run \./configure first\. Sometimes \./autogen\.sh first .P If you would to display UTF\-8 characters, then \fBpspg\fR should be linked with \fBncursesw\fR library\. UTF\-8 characters are displayed badly when library \fBncursesw\fR is used\. You can see broken characters with incorrect locale setting too\. .P You can check wide chars support by \fBpspg \-\-version\fR\. Row \fBncurses with wide char support\fR is expected\. Re\-run \fBconfigure\fR with \fB\-\-with\-ncursesw\fR option\. When this command fails check if development package for ncuresesw library is installed\. .SH "Homebrew (for Linux & MacOS)" .nf # brew install pspg .fi .SH "Debian" .nf # apt\-cache search pspg # apt\-get install pspg .fi .SH "Fedora (28 and later)" .nf # dnf install pspg .fi .SH "RPM (CentOS/openSUSE/…)" The pspg is available from community repository https://yum\.postgresql\.org/packages\.php .SH "Alpine Linux" .nf # apk add pspg .fi .SH "Gentoo" .nf # emerge \-av dev\-db/pspg .fi .SH "Arch Linux" The Arch User Repository contains two versions: .IP "\[ci]" 4 pspg \fIhttps://aur\.archlinux\.org/packages/pspg/\fR is a fixed release\. .IP "\[ci]" 4 pspg\-git \fIhttps://aur\.archlinux\.org/packages/pspg\-git/\fR tracks the \fBmaster\fR branch\. .IP "" 0 .P Use the AUR helper of your choice or git and \fBmakepkg\fR to install pspg\. .SH "FreeBSD" .nf # pkg install pspg .fi .SH "OpenBSD" .nf # pkg_add pspg .fi .P More about it \fIhttps://fluca1978\.github\.io/2021/10/28/pspgOpenBSD\.html\fR .SH "Using MacPorts (MacOS only)" .nf # port install pspg .fi .SH "Solaris" There are few issues requires manual code changes for successful compilation \- we successfully tested \fBpspg\fR, but although \fBpspg\fR was linked with ncursesw libraries, the utf8 encoding support didn\'t work fully correctly \- probably due some issues in \fBlibc\fR library\. There are problems with chars encoded to 3bytes \- unicode borders, \.\. Two bytes unicode chars should be displayed well\. .P You can use \fBpspg\fR with usual accented chars, but unicode bordes should not be used\. Replacement ascii borders by special borders chars (by ncurses technology) works well \- looks on \fBOptions|Force unicode borders\fR option\. .IP "\[ci]" 4 Solaris \fBmake\fR doesn\'t support conditional statements \- should be removed So, remove unsupported functionality from \fBMakefile\fR (\fBifdef\fR,\fBendif\fR), replace \fB\-include\fR by \fBinclude\fR first\. .IP "\[ci]" 4 After running \fBconfigure\fR remove link on \fBtermcap\fR library from \fBconfig\.make\fR\. It is garabage produced by \fBreadline\fR automake script\. Combination with \fBncurses\fR libraries makes some linking issues\. .IP "" 0 .SS "builtin libraries" .nf export CURSES_CFLAGS="\-I/usr/include/ncurses/" export PANEL_LIBS="\-lpanelw" \&\./configure .fi .SS "OpenCSW development" .nf export CFLAGS="\-m64 \-I/opt/csw/include" export LDFLAGS="\-L/opt/csw/lib/64 \-R/opt/csw/lib/64" export PKG_CONFIG_PATH="/opt/csw/lib/64/pkgconfig" \&\./configure .fi .SH "Possible ToDo" .IP "\[ci]" 4 Store data in some column format (now data are stored like array of rows)\. With this change can be possible to operate over columns \- hide columns, change width, cyclic iteration over columns, change order of columns, mark columns and export only selected columns (selected rows)\. .IP "\[ci]" 4 Replace printing document directly to ncurses window by some smarter structure\. Internally there are lot of checks and fixs to support complex dynamic layout\. The possibly views should to remember first row, last row, current row\. Now, these data are in global variables or in DataDesc and ScrDesc structures\. .IP "" 0 .SH "st_menu" This project uses st_menu library \- implementation of CUA menubar and pulldown menu for ncurses https://github\.com/okbob/ncurses\-st\-menu .SH "Note" If you like it, send a postcard from your home country to my address, please: .IP "" 4 .nf Pavel Stehule Skalice 12 256 01 Benesov u Prahy Czech Republic .fi .IP "" 0 .P I invite any questions, comments, bug reports, patches on mail address pavel\.stehule@gmail\.com pspg-5.8.1/pspg.spec000066400000000000000000000162131452457446400143450ustar00rootroot00000000000000# -*- mode: rpm-spec-mode; encoding: utf-8; -*- # Pass '--without docs' to rpmbuild if you don't want the documentation to be build Summary: pspg: a unix pager optimized for psql Name: pspg Version: 5.8.1 Release: 0%{?dist} License: BSD Group: Development/Tools Vendor: Pavel Stehule URL: https://github.com/okbob/pspg Source: https://github.com/okbob/pspg/archive/%{version}.tar.gz BuildRequires: ncurses-devel readline-devel libpq-devel BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Requires: ncurses readline libpq %description psps is a unix pager optimized for psql. It can freeze rows, freeze columns, and lot of color themes are included. %prep %setup -q -n pspg %build %configure CFLAGS="$RPM_OPT_FLAGS" %{__make} %{_smp_mflags} \ prefix=%{_prefix} \ all %install [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT CFLAGS="$RPM_OPT_FLAGS" %{__make} %{_smp_mflags} DESTDIR=$RPM_BUILD_ROOT \ prefix=%{_prefix} bindir=%{_bindir} mandir=%{_mandir} \ install %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) %{_bindir}/* %changelog * Thu Dec 22 2022 Pavel Stehule - pspg can be compiled (and used) with pdcursesmod * Mon Nov 28 2022 Pavel Stehule - support direct true color mode * Fri Now 4 2022 Pavel Stehule - column scroll left, column scroll right * Tue Aug 2 2022 Pavel Stehule - allow to set esc delay interval * Tue Nov 2 2021 Pavel Stehule - new visual effects --highlight-odd-rec and --hide-header-line - possibility to read SQLcl (Oracle) tables in ANSICONSOLE format - support streaming mode over files on BSD like systems (kqueue support) - one char horizontal scrolling * Wed Oct 13 2021 Pavel Stehule - custom themes - fix pasting to clipboard on macos * Fri Jul 30 2021 Pavel Stehule - using stream mode as default for PIPE source was bad idea. I reverted it. * Thu Jul 29 2021 Pavel Stehule - the option --stream is implicit for PIPE. If you use pspg as page for PSQL_WATCH_PAGER, there is not necessity to explicitly use option --stream * Mon Jul 26 2021 Pavel Stehule - progressive load - instead complete load on start, now pspg loads 500 rows, 2000 rows, 2000 rows, ... so first rows can be displayed quickly. - now, pspg can format texts produced by psql's help - fix few bugs * Fri Jul 16 2021 Pavel Stehule - new functionality "Ctrl O" - temp switch to primary screen - total rewrite input events processing * Sat Jun 26 2021 Pavel Stehule - new option --no-last-row-search - code cleaning * Sun May 30 2021 Pavel Stehule - new light PaperColor theme - possibility to set nullstr used by export routines - introduction interactive command line and backslash commands - \save, \copy, \theme, \quit, \order, \orderd and \search commands - possibility to push export output to some program by using pipe * Sat Apr 17 2021 Pavel Stehule - --menu-always ensure active top bar menu all time - modify theme 9 - fix detection of last row of table when border = 1 * Tue Mar 23 2021 Pavel Stehule - fix stream mode on apple (/dev/tty dosn't work with poll function) - new query stream mode - queries for pg client are read from stream * Fri Mar 19 2021 Pavel Stehule - for some cases the multiline values are exported as one value * Sun Feb 7 2021 Pavel Stehule - main window has vertical scrollbar * Fri Jan 29 2021 Pavel Stehule - enhancing mouse usage by support xterm mouse mode 1002 * Sat Jan 16 2021 Pavel Stehule - possibility to export to clipboard or file in CSV, TSVC, formatted text and INSERT formats * Tue May 19 2020 Pavel Stehule - code cleaning - option skip-columns-like - column names dynamic positioning * Mon Apr 6 2020 Pavel Stehule - streaming mode for file (requires inotify) - named pipe can be source stream * Fri Mar 27 2020 Pavel Stehule - integration inotify check of input file * Thu Dec 12 2019 Pavel Stehule - possibility to specify NULL string * Sun Nov 24 2019 Pavel Stehule - tsv format suppport * Fri Nov 15 2019 Pavel Stehule - fix entering string on CentOS 7.7 - try to process -F without ncurses start - infrastructure cleaning * Mon Nov 4 2019 Pavel Stehule - materialize dependency on libpq - add internal performance diagnostics - few micro optimizations * Sun Oct 27 2019 Pavel Stehule - non interactive mode for csv - possibility to take data from query - watch mode * Wed Oct 9 2019 Pavel Stehule - better handling Escape and sigint signal - more comfortable usage of readline input * Wed Sep 25 2019 Pavel Stehule - pspg can be used as csv viewer * Sun Sep 8 2019 Pavel Stehule - complete support (with multilines) of sort over columns with numeric values * Thu Sep 5 2019 Pavel Stehule - initial possibility to sort by numeric column * Sun Sep 1 2019 Pavel Stehule - column search * Sat Aug 24 2019 Pavel Stehule - vertical (column) cursor support * Wed Jul 24 2019 Pavel Stehule - fix minor issues - left scrolling and theme changing * Mon Apr 8 2019 Pavel Stehule - fix minor issue related to draw menu, when terminal is resized * Thu Mar 21 2019 Pavel Stehule - use higher 8 colours when it is possible (fix Fodora 30 issue) - new themes - new options: bold labels, bold cursors * Mon Sep 10 2018 Pavel Stehule - possibility to show line numbers and hide cursor, menu and status bar - new themes - fix some bugs * Thu Jul 19 2018 Pavel Stehule - menu support - new themes * Thu Apr 26 2018 Pavel Stehule - compile with readline when it is available - history support - fix some bugs * Fri Mar 16 2018 Pavel Stehule - lot of bugfixes related to searching - code cleaning - 8bit encoding support * Sun Feb 11 2018 Pavel Stehule - fix few crash related when searching was used * Fri Jan 12 2017 Pavel Stehule - possibility to replace ascii art by unicode * Thu Dec 28 2017 Pavel Stehule - bookmarks - searching is much better now * Fri Dec 15 2017 Pavel Stehule - case insensitive searching * Fri Dec 1 2017 Pavel Stehule - less like status bar * Sat Nov 25 2017 Pavel Stehule - lot of fixes and new features * Wed Sep 13 2017 Pavel Stehule - initial version pspg-5.8.1/screenshots/000077500000000000000000000000001452457446400150555ustar00rootroot00000000000000pspg-5.8.1/screenshots/pspg-4.3.0-foxpro-111x34.png000066400000000000000000004712261452457446400213620ustar00rootroot00000000000000PNG  IHDRuLsBIT|dtEXtSoftwaregnome-screenshot>)tEXtCreation TimeP26.nora2021,06:06:32? IDATxw|ufw;@B z*)SlE,(©r穨BGz{u~dKH<}fw̾B!B!B!B!B!B!B!~Q !B!j]M% !B!D,Z YVyfB!R[cBdr*[B!B\_rwU7TVP #aV!B!j+=V@JPUy B!PzWJUB+)\MI!B!D)/pXK?juIeCcy!t`Ք|y:uB!BQ*:ySEUl<_\ìoĵqqyAVB!BxWq|\%UeY*x,B!9-+kkcuAtjYn%^BB!Bx¬1:;3m\ݓ0Ru%Ȗw«Խ㲆;YzB!B!ܫ3Nl\ V{0gJXaC;$us|8ܗ]c!B!Sްb@ZJgJ*$:;v [IJ&W=N$B!Tt=e-VkN{e+3qy=^nB!BQI{cKBP,J>8 Z,:!P-zc% !B!g*}ҽClE='34V:[ZuW+'|B!BY;ѓ0y\uĤϕ5vȖuaVW޷qK.q}BB!BQY-KFRRPv-}כuuB+=}iӦjfl6Zk !B!PhthڌW_}u_}0kL[-\\rmk+Aֱa2iӦ׮]OfZB!Bqj? \ &%=U %5XX}7~GGl6>@ں9j%''Ǐc2t("aV!B7/YfQFF0[atvI4\9Sqz޽{uqV[nl6]FFa׮]XV|||$ !BF%+ԗzĕcbe;B^|YY=eY xZofN:a2Re˖8pFqK]B!'+ԗz:(3'rm/lY=кzl8N*J^l6~-[cUUY!B!ܤdROª*fٲ&P^B!B܈KV/tPa^,.)/ȖUheƖK̅$o_4TX"zFW* 3\!By*6mϩSh42fk\ɓ'Tyyyjժ**YV,LeeJ_G Ut޸;X)Nn#.|IxUnxRC9{jKµBTvld& ++"iJ~t,4ɰQi[jh<ͪϿfé,,p"wV|9?v׹?FuPe[!U cŊҡC, bϞ=!(Gy8N^w ţ%5_FƳ)._Mc^R^za8Gi~.|NNS xa | >_s96#ܒOs _wIiTwʄ(<-r2z6|FWD 'S3i mJ2OqM_@f~ntwƓUf@N  照q=Fί_7돑g¦Vy| ׶]TSS.MI!ӧO`jj%44(9Rkrsrrعsg޽{]ZZ\Y5?JeOdp v|vvv-#YGYan0;"t6m4{iZ q5S4>ހz] hн7!d/lθr~W_0_[$tԌ_EƮ2i/{Y !қv-͛¡9q s6%!=@vԒ!S~Ő{!<=k?_E޲v}oV kLo}}л ?^A#2Eكw. e]7%!(Z-FZffZ۩S'uVfsmjg˪Ⱥ4!g)^k*t  w:C+-҄ !s{PևFbmN[0`do)OfbkoD^þ}Ea@ +wlK!tj==tCE+YGחj&'.9j\j}@mK|AU0oQ/Q*ԋ+~l>!f{/p]-sO@d#$ B=÷G7}**/w*3m@os='n`;"u2N@Ul4v'9[F6Qm+? !ܧ*Y]vݻukG%99^zUkVCO:UfخVeKׇT1TkU [!g_ PfՎ j*T/x !<^YC߆VZN&bTK/ r[A&X0Hq)r<= &[jaǖAIU5۞(]񖶂")^B/Y췒 kLx&m WꢽRۙD&A=i /5{[EmVķ,ߥλ3k?ndKntgqo{} mqqstǐm Qx9Х +U cǎeݼL8-wL>|3g*7|ۃlNN[ltSμ4n 6o%v*SdztR233\/x !<,]RPZl1k[ ;oEdkf|©ś=.j4ړ UŦBӸNNVzt+BK)LJLyEX/ z39űGVdLh6,6^)d6LV Y@jWS3;i)-O(@f/\˿GӠ+cFb_VavW ^5_$>a#[e/ ؽ&Vv嵍Bԥd֭[SO1g^~eñZWe;vУG6lXzU'vԉ=zTjFhLTjO:TBQ_YMWLJ`ph)i]B^.]hr {nRNC*@E4cy)4p06:1cGeyim0r8j.lq{ ϵgG5ğsW%lMѐ\tM:m/a%$zZk*yЄ;i}]˖3#ooN!q^?'E Slx]I#sT8C'F+wcm؟>^:> hU}? =P0cNF[0@؆ڸ ѵn?9?{hܱ֏37MO'CIzD%=NޗY|M&i*D*[e?Eƹ'N{a\orz8i3!뿜l8gأ'H1N潚_i9\`ҤIU^cݺu\]/5`};E[[&U d vqZZZ%AVT.h }/woCTף:tfŲ34>z#._Άg ~4<W(oAOx~$Q}o!n"~\}s[X}0YrCDZd}-/ Z$}l''oя| ?| *r%lRѦ뮌ddxx[hQsXzM9+cJBԱdٌly___OΫJAA&M}WulǎٳӄA:4~z`~nٲW*yE~$kvBZUn#͆jh4Ү];?Ez߮:|0VFq!p'iyw>;>sūɖ?_K%W|+(e%q꼑Z jz?M/3lWլNܹsĬY\lYY*<}trUUg>}<&h~l̀~6Jxv[{dKҸ%{6ap MQ>(`3՚}𫺗eʕe>z{JGV!R"_ZUl_?a)hw-2ׁeI!ܨ:=1LDGG[oo3zjtVYR{'rTihaaM`: !B:pk~y9{Vر֧ x~I hUrqڢ?N`ѩ;6%e)=$^"_dPKGˣ= Gu|pSO[y08H jB!B x6xHJڒcMySTdfxքF>8(} TO珿\,BaE%o<+ >}ilh>hO'X) =x VlY߂Ŭ=Ez?:^}-19-bA@GҺ-I)a dek.l M(*J+_y~K(]2ԛﰱM<&(*Nze? Q'\Ҡ/^a߿J&wk`}E1A!֞w ~4q}8 30m8K9dL|BP/߀YeX)*4*>,9h0Lz]H4;n7|} 󏀽}H,KC5B!RUys}V>y1d3KN]Lo)t?AfVnj& Kps̘3o@]9NIϮdStǢPX7cYs;oEɻLܛI9o3RW %XCV#lp,^bYj0x sϥ0BޑLb'M|5/}Q؟:}i)4J;2̜6|6ʓߖĪϖefx-)qyԯ`ٲ=J8!8CqPaGLy~a^{w77n < } ^[̚gG@rXzrdAB>y|6ʒ1v3~(~B!n!AVCx=v,c1Z]%9v4t G]$DZQ8+ jх#iwmJ_;ZamEJ`㛗G˻ch`@=l9܈:~f&sp,6F&@m6 +5fš^Xs8#?4?E0`py{vs (DuP ^4hђ0 .@!N8I>M1rkbm IDATXcCZ/ VUCU|kKGm8cG= Yx$ -E8سۡ|{2歇`yď`ph TN!B6trlըyY[ϲ!7&f#^Eq\/zDʝ$9d(4&2lĨS@ۜ6˩fKUPr8hjilŒ:e/5/<%+?=Ɗo@ht(((jsuWگ_Oꇿoɫ >(5¸aw4H C !BڣkNoF:WՒDžcgiٜ`Nh4XOSIxUR .Ϻ椓anFhݲ&t)ws)oxU]mC>y*ʫ*lkZ-PRC.b3=_d~DLp\>rg341O ,7gLB!KE Dvrl5}sFme1>4hM)Uc!6čkٗgl2jƕgxbF5ݽ]K2G!H?/4 ZtHXҌӳu2-^kNbCwA3ҝvmd;/mbÁ;Ӛ )<CWM8Oe6ز ̀-}/ЩR9 ]waNVs={\)"j 3 vdk с^[!B!{du|0+Z@5Pd9ɋZ ^WfosV(|ӏ/v<'%}BOoglV,0eH͂pB|apwXp`W`Ŗ`௯@DCx)t>L4tmZp |*,T4 wB! VQJ4xo:@)zovW}U9: zĮϲB!5jnGX,_^{ 7V>.fs]v-B!Bq} +B!^cdi»_B!B+d} L%/Q!Y@lg,?B:ꑅ,v /; _s8{ Ocm֗CѺjE;.ΟIZ h _g4u#P] Q-%.VO`4pKa~XiM$^bEg /Hv=AZT 58dgYP̋7c|vK%k~'7wk`_[h;?HMUpO=!/oc޽#}5c_ó^?8yt ZPc}DG2uVӢ*8$;F4dN<F%ui^~06YMª#6Ưbhۅ[2vr%+/mŅ]2'é,F>mZ4ksʾVqQlI%3f[#PW%pkgޛf j*k|̶ f|S33Nz0KT|EFbgB^|sf&^y>}'v$vϛ҈a޴|:on>s0݌;rdʥ €(Wm҄+z>.s?Ŵcj|̖>ksgh;y&bל+OgSznob`_hb o17~|Hތ-OWb--XЩ +ܾڸRl>?@Ċ .Xæky؂"~7f+;VMNn3~&NzYRN« cîl/Z6&>4_.~rPﳊ\˷i8#O H7hYx"TũGgհ4 %~a9Vۿ(/|wF>3#^XQB<= m,Rүoo=6yyj>`mqj]$ƑsI.̈́(_!f(m@deؗ˯u> vn9Vǖ-tҗp߼Xa mJ͟z/ ;̀ZΧN[G1D060B~N{RoʾgؑX ϒ4 FǢOTcBm@iy,Bz Fjrm MַaPp'wC8ퟟ !]s7(ڧnvv/D3*oşY{s^=}K>N$T1-F>u|[I 30{TPtz0a.YUfTY 5=I1]4 {|#;2j&!41irx>(xxjc<ަ-Od' 2]6WNc"#FeE?c$U 3~tPvd(4&2lĨ%ybwr !00N!Լ\,gY nk#cYR\r0hT\;pq%oekvw~N?iuylr 0:?DRtelKG|1DjoMU)PQJ+Fۻ-EzÖnl3'T50ҍU@n?̟P &Sr P6F-EoMWm6rr,?c(uvTMgΑ'~R?x-Ɉ h]\+}|}qme#|u|RHBl vЯMudU\t(R m3I@# S>.L;{_yľ"p(~kLFlY,YYYsN= ޡ<ܥ7:fr{~KǠj>O(x5+OCWs07#4؋S&t)wKӘb=/N%q2$=ǀ9|M3kNoFU\V|W6:_6Ȁil9Tů)nn?5݅xU\ $rT,A: VT@c.$[uzݑKۗZfCe^ٝAv0t5C.~;̟`>9n? dn #4uGt#i, ^LJ'kiy Z}Nvhβ?ud7.ڿ˷gUWߗoot7&S!`{C}uXZD۹n\yB5eȨ 4lkO;xoEjѐ$:,;c 7uƃd3!! @͈.CH - Ot 5)EE$d5'_DOO~$shB E׎e_ B@ZDƵ˳a6*)zgswd঴D)Љk&5^kgvs.Q0T2S09Jt5h"? wco juyw4A6+yČ\y(q؟?xt>_4M7adoNKv?=V|r7z!'j%O7fĜa\:Јdog³uތx SjAGXG1>9̸)dinj2IsFZYx:>\[yݮۭ[q:%5[6Ɠpֲsz#i!V6}wġYLm3󲙹0{ L g3B.??=bر8x|sQ];mUq)4,._Cge0G;UD۝L կ_˔~źF6F僥oT5঻qbШ6 ǻwT1gI)h}cй[|UT@$/i)x5g__axᬝw_N?Nቾ!Bzُ nj#t;9#ҀHւELy:!`~754Sx:+356`(]|}0ϿPη?j>vl'K'㥨fžD3+OB%T6E5pv9rq=q&Df Z@1D1u!v~qZ놕;5j(]`8q?O[>>]u>Vccg#ۉىmxiTRf%R mDĶS:TK yeZ38ǥGU ~Q¢l!YXuܡ}wq9gsexm'{\Z3}}*7Qqp>^q!8WJ4t~3o끆z]W W _S\<}{ܸq,[VY!D}Pwܸjmjx]PCw;'j\lTj!MS]״lko[9x` #x%6ۍ+7rw[RfJ?6fbY)>HM-uRj~Oq=ӆL| :3Zp_! پx60zb=w]]}%'ڡB(5Nww-B\od ד2L%+$ !#5VZXy!B!B!/dB!B+d.i8U+Nא]?T)9ms骺B!5F#kv!K i[cHk=R]6Ol7m務/`iWԟ) +d^!B5­zpC0lwh)"#Hڂwx3Z5 *BΟIZ B!k#+;qu>^M0Ў&ʱE`geg߱/͂ MqӃ-m?Y `=c//bYECh]<Pe_n Eգ7eM[G8p1 KLxz)կ_WI}^[r 63{PJz__´e\mSF*78J"ჴMԟy8Dk՟/?* =x VlY߂Ŭ=Ez?:Zlc?s 9[˃tx+B#=B)Xh>%mj& Kps̘3o@]9Z83 n3҄ T5s>f[Lx3>|ީ'=%T Omf?j_굽΄ >3(M|j֯v$vϝ҈a޴|:on>s0݌;rQK[83QhjGIϮdStVY K IDAT6#x)B!DոGv;&ZnSEǠ/J aK\wX,m.L z2l`~=]c7#mG#H@ɠq,[1͉]Y 1F&@.K.d`խ_5˯u>Kl9ْغ%#]uo^-zm WM]ÖÍp~f&/@CkO:6Za=\>ߧzZ{ěe2JڿvI O ;#˸yZVwK*E* FoX̗+xcИLtii=eXƂd:{'S5/<9YV9&Fw/'(Pgãd2RZ@(R躸+XXX_tYE]eQqJsE*H! HH'6L @z8ϓ9m{˿ v "s';x W;] !R\d˧q3gNٮlC,e`X@^WcWdkAS_}kJUe ʸkyGB.ŧoljniLpC^'r& bL=`)H%a.iGS1x!{S>g,uՄP6Ƕs+נN(@RjP*kd\MZ(- ̞ VJh= /Uc_{a @Ga8mۨ@Cә J/ճ?.f 4Ʒ0돃G'K~1) ~)Ed2g4F ]넼TeRPTUŤ4bh&'>"~Fׯ5V=6n8M(U~UZ '6(lilsw_ %%6V׻ *&sT2X+&7UwAAAFEtdAAAFEtdAAAFEtdAAAFEtdAAAFEtdAjOЛ`WT7}e?Êʜ].  uLGPlx'1k^iϤ@/0s|*O#҆G3S { H_DWLbA& Mv~;ASը<Lrif?ʏ%uMҵo*`TE~[/P#<=_3uooLsw8 4d¢]3ZdgJb[ʿut|QϨddSՖّ{j2SxfqvT~5zf˜t)&5ﴌN">h.-_͏Ɂ:\fd Ҭ6'R) Á?);ܴjw^ٌi b{o_] 3+v[Og,;r4Z,Wa]6(<0kc<2O}NmwgQ@ETݷ>qC,ٷUou/WZQ1I&Ng@Ø  ^olOo(_fɷ%_ϢO_Ĭ:/)ėJHUtqnhiB#yLv:"y05:_v.%}\e >'-6$&ghXl@+ҏpE>+hߝ7]N3?XP~,9LmD)pT?GUo We+YƳM&"!E}]x/&:S;=2@њ1@)Y9pz?dYuf˳]9UܼO{ fkZ IwK?52Eݙ92şH ρN a6 ϏCWySĜ+ ?_\+v x"8se$f[d0tcRw|ve/]u>_կ7?7>~SMǥVozWHl 2^_XXrOMt~-i9\?G(3~p{@?&>ymtƗmIpxz_Gr#F%l3WaCV1/{)t/Zφ{Iw?tyCL,N01\NR8Qc3&Rg߱"#{dMעcW 3Igږ-M;Mm?U:&nwgJ믃:(+ykjު~bГDžpn^ MWe!c5&1lKrN,yw0{bXRg=$ѫ**.&[N;'qW7HR(`RQ¢B=ڱ@HnNޕ;usN֮UqѼ]G@!Bs}n[l|/q o~Ez,aW%t͛㞶yg;_|xpɹ$>ydb/}w,̟ǼÑ/`K뻕#]6Osx -[Nߑj/)PH$ng 1w,FƷOTAH1}{ï>1 31 aç}g_E'Qz ؁Ę&LD`Ew9Z(ȁNGgĒ'P$bM#ߐ9qTq~2l:0WW? Ԑ[0b^JybZK kdSXkt4Q.^ՑA*FrB}9WU2^QLҩJ'3x?83N[kR+2eeZ9r.X| Ja`t^#[$ =VJ%u3ކ#{c+)Umd]` BkbR93髛CxD|^On)Pci^)y3֊EV{&ZǶRBtuًWвgڹJG\8$2l +9~C#pW@ 7q/ӣ+.͘G̀A%ٸ7J@MϩsɞrJ^ |3 'Yytd\\4¶Cg1<{jz#\o&h7`8 ~tØ_~Aε+{@⎔/ vȤӠJ ~? B,<ŜFAKP Le-&5K3 ;ȯQ:wq)Wϖr~3tϴtsA= ^ |)h*MY2'K$^Zm*fNنIC`\ԊUEC0&_foʮe9΄+@ҌZR(:綟, 8Iq{-*Sq_Lo'Dirjp2ᮆo.Gucq?NS0!۬*t(`Ɔ>JͿAtL#22d0vN ۍlϿXID.;ԟ沅YI^bWM2ȕt RLN|/Ql=Ï3dCVGBhۛ !)€z0svZs| vɗff fBphx),T3<Wr| _ԄC;{IEn<̀;~?hs~GWvf"O%P²ݏH98:(7ԍ,$0kv3塕riF}^#]c{2ȭf{k̆r՟%eg"?"Uӂ٘52\\bTC'0s鋮B c& I7w:&\=Ӷ[4GF)/l ˜{zOc%`vYʷuhnypi>j/ы礓oKbO{PV&:ZnK+b=U|YuH|'%YUH4d3i?:_l%$AD%سyiVE;:G髛 2zιQN5p fWX%/޼ka5U4+jԕh>Li ƺ2JWįd]B3S - $; )(|0-_|nH|dT6{&{X RIX8KZnh-T'g7ȿ.F(*C v5OIYTqF??\ws~ J´ .mL$۰1حOҋOIE͏NWu4eKswn4iZ_چp1'=vN `gta R:^2tgL6tB;`E5P<#,Todg2 MZ Z$"n`Kl65gKZPG ZBf6f@Pdoα= Bm/9\B`838#]H*w& ,+/6COF7 i䇶G˖ HJ7F qgGk쬅|/wdp͝ S)ې> V%)xqs2VP7kLxm\@+Oymq:g+G՛o|NT9\%W& '-od6WdTih~m?)#ի ',men:-zŃ M؆J\U`xw╀SGcMSX[C)Rڎ'd± >C.BEπa: {yc?b4hd+ҘxIz5?GᯰS^q~5(6gD7n[t_#3U3RiX{&9\MhIJ0%wZGO87&iBG3{FE]V|6acpRI()5Sտ5@3Y>|/BE^⻬ƍcٲV +^?9F 8;n\565/n{UƲePUFuWſf7۞TOcb() |b5_tzٔ 0WLU.,bQ~_\eL -AAAёAAAq 4d/o{AAAhYAAAQYAAAQYAAAQ6O-jcSxz_*-uTIKL "3ϧ2t>92H.myx48 gm,eZLOp$dҡ .QWlx'1kMWzR"l9}WcIL˟0$|qNɠv Q5(N8hu&=Gm4;odĉ]CG ~vߎSd1<~/G@V32iziV|% SjP=hd I)<8;ʿW݅}\qzr?fqKo댖w40{XWTZ Otd%FG6c⥸~,xm]E\~=&{bެmߑ|LOr'+׍G|qZ4ɣYss*^ǢZan^ֶ.-෢"}j= 5O.?[t֛{.FJ& \=G֬KKg^~Urcr Bo(V7t9Qzxd~ݿOm*nL^ԝ=Z=SV bFER.{5'iaO-Ossᵵq,s3x$QetnN, o^~s*/^ϒϡL3%6t~|]+>׃vZۺf+EnZ,ykjH'O 0%M ϴѰ1~5ٸx1YR# }wt9̈́Cy Ģ,9tmDkɉ9H/0 mͫgX1Me ,DS*L?$uPR !!/<ǝm>p'FsvPcuRAv؉]O򫥒Vv)9Dsw=NW㡆2h^ʍ\_s h^_I ?? 1_餙ǜrzىOp{>7adjsӡ$üXILgZ̀:=o̻v9ɅJWZ uBtdRhn~\S,wgVcö$ʞͻ_Is]ϔ:)&HQq1zw]U~7Qл3)؍]除ˀn-=Ha;ݺugpZ]bh޲bV;/1A(x6GS9zpe6lLZjHH-x9J  _gc===B饩Z5l ;'/1 IDATАCE|*< 6 ;p"c|J/V+I:U}ZLv[wU=jx~lQk]U4lŴ֞ɮhJ\ )(+C7Vguܾ.%K!VktT _#[bz<)LM-8EI*z8qKfս 9G0GWRp0̻fŤT5wS+ICް8N^zIy5-aqj692`+˓ٴ $ҎjT`/ekn (7?AFy1~*,-r zF{0}$^={kxմS_`~gviYѵ9^uQN˛kqP'JW=ԴԘie>x9^H:f&'3݃qqR+&WU5y cb)>J~3tϴtv@.Fw&\Zf<Bf;Rо uEmVJ:t0cJfj_tV %~w9QKYI%*$/FƒiJI.!Ax);?Nd;qZUAn?.iOrA*_tQx3o 8YIraHf&f9rܺy|tbQm1\E|RIs31ϑc6Us<51'\{~mhR_ǙaվmK fژ-\jCSCjڇO%,'e-c*>,߻H|'%YUH4d3iᰕJ IK|_eyiVE~ΤoJdO◈ V2L6'kTκ-[ΉP `Otc[!a/H8( TI=V)[1M!" ?܏Ns$\#H ņE[Z!ɶ "J|}fdzH|a'ѽXt2x "Fv0ar& 18d>۷۟8@kd >jڦߘ{6Mn'etTOx[3y7"B`btgl1Ў|xukZ&.ދmi霕MBCdܩ*d\Ɋ=k(\5h뻬 jOo,$^yPx2IK ?ȎK`{(_*J Ag؄ʖaѓc+@ 櫴|5ހ^/D$Z,Ye+-h^yʋm9[)D'i[|Pli tcDɕqI;`h˛%>MU59s2 Y)xq2~֛^/~_WYIĤ:٣7* x_s(eCJdLQX8'sE[H[?gHgcَUI b/͛xx$Sa V,ڹ2`]Gwap5l'+ uKbnf$ޏKr8X0xKK/3}uhvij}(ZSř8.K+=Onҙy*&`+-yn'G9#Ovآ+am6X6ㅽ߱i14SyiLL|/୦^[uqbAhnj\UY˖^8(?G}PR`nŊk>{n\1U ֊>2]&                B`#eSO'U^9q_A&g|Ӈ\`­gOa`6 G'G7[`ALFv O8AkԧQiiՌ˽r/ʜ^oG;E_ngWBcif -ccdi`dlQ|hr0>'J.<㊫֓t4w27z׊_?Y7/uhBgI\TMRש+|3~v޼س7tw$œ?~.H@/9Z 1Q=yԺ>kqNk}Xv#SKLm67sAKqXaq^ֶ.-෢"}j= 5O.?[t֛{.FJ4 V yVΞ>V3o~߰zW.P3%nK;r(Q+ɷ%_l ~K."}]קsB3Mou#yLAP⡒uz>u L%p7ݷ'_׊`~Ƥ]lRf۾ ё3}Ú?CV1/{A&ghXl@+ҏpE>8 }wt9Ml <`bQB:iv,9LmD)q5oUL3' қ03}"ۢq2e , ʠt `Ftg.ˤg%1@Gmi|B">.@Dyg7 Y; zep@&x,eB'0o`<*̧y?p>-sGaB M|<'gc33ݫZozWHl |a'H̶"`8& X5[PH #_(گ,|s2a&S*Ѧwxj{wfgg8gs|h$*^p.ac=Dz]*|OgU$ B{M6?,_i< wq|VwLcgۗ~Ǚy̛9yV ]渧gN޸?^S9ϼ|<uwS|yAϞϿ#K|0d;WR HܞπcYvoןp "7~Ȱqg` \]x(PCBznyV] I8`{ w}.pOP,IXmWTᡲaLxGG(4-U $SPVJoUi(~T}_9#[A҄㘱dC~ IBHfս 9G0G$ W ̼AhmVLJ(ܸ/7ϓBl7tLO1 c4綾_Xf#";/jx+Ix*6E:8ME;mEsd,>̦0ILx|8l%B "W< 4+"ⷒڇO%,'7)f~?}_"z0[|3ۜoTa;e7\jlì[.j>W&Z#J&ΔJ\$&G (,(=A3{RJ9]ҒvCc]B3u`|0-_|nH|dTBudp@!2)nQ\]qv7apd1حOҋ0IE͏Ns$.uNQذ4\-r'-;YBZ.7^MP(P6om2ar& 18{snsnSⒶ%G˖ HJ7F Э\NpSQ{013qtAmhǂzK<:gy-[F j^iŶtZFGxe'ֹMBCdܩ*d\Ɋ=k(\55ȖpCNBR`?ӹmښvY{ `J뮣STh221"l65gKZ8 гC&~:L]`ߢWyuq,l6ak1k䋜ۺv,e ytGX&[ȾϞe)r"G `ώ4̔wŦ8*#f2rz\$- WiCj*_^x1I eH$dj*-I.;u[[,#i|ʀPi}x! {yc?b4hd+ҘxX9!xKO(,9"--] 3Wl*LNGGyD4z'w{|$mZhfbߨ?RgƣoE w'^ HJՄP6Ƕ+r`_F͂F?CӘt^OՐcS,S 6 Š9Xܩ`JaxH 4( \S_ͪY~GG͚ɋ;x?/`EhLc|F? נ bĻ*%XZȻwl$OxѬ^l"qFtnm,{=sF[M$=CNG6h2wq:LldS8 8ZDʤwzUTLڊ,DZ~~ˀqPׯ5.qXuoVC̟Ug{pnUsoSUY˖AuW]<7AbS=-~6$݊| kdS֢2\1U ֊ϖ2]v-N0[Iv@yO㟿  p;LQS4`CƓP(TF=$/  ܎DGV9Ё/t  G -AAAёAAAёKzs7& ԑ#sZZ/)z7wVWK_ߤxmZc7_^u'gGœ;r(Ѫғv mt0rF ~8;b4{U*--(]iQ{sc)^˵꣈T8JߔeNkskMϲ&NaѱKuZ*U0rpw5%UG'slZp:$IJPSqk^2Yk7 CuS\Yszj֙OC\XO=NߛؾnANR %ybZE<]Aiew3uښVש?})J[f]Go\I~ʟi"qZ4ɣcY ۷f"|xt/{%_џEї_)r)_\;Yn]pGVv̠C4ޔo+6D9+gO)].Ӣ;w|lM|<'gc33MZozWHl γse$f[d0tcR[}V,ie($ޑcx/h~e8kŎ3y\$Ry6Sۻ3sd>?[wtTUL&&$"% RUXYD姮mU,RtE* BK(!!I&LPf =9dfn}{y6>GG~r62`x參q;_ٹ ,\r=!]p%m˰Fv|c֎C޼AUyV~qy2F ع :%3zv|֟ *Ipb$ʙ6h_J29|^B22G4Rѡ0`0mן,YyeA:\kU_ۺrI:Ƶcg6فس/؍z+{Wnx˻bMojpY\K{, GYk#݇n".]=J'|:Yļ}'S9UsFJ.h$[Ak5Ds"7[ ߨIƞLd I;iv-]s`EY,\"yش+2g2cî|.BΚG df+7$9yӗ:_LBx,?;`;=eŮir~蕳$W/k7i/\7,e?jGB׬)X]6=E?fW\,ݾ Yu/bKݠgOg'ߐy>NL˜~ U3B}O f?GrDQ?Aʕ=rTz+njal.MqP=6g [ϭ\k䗣jN>n_nܠ|'& eh#Gp,#$}[V` [~@tdЮzC={_~GKNqB01[Qiw,/@H_E[\OTJe_sA4S%gZR(^I0~3]uYi:o 4IMokH&Xƥ%Ҋ_^{0 A3Pi\?MYm?}[nX>o'< i=mm[+w ǩ-l:ϯ^6CbgJ&YU'Z$ko͝Rbc 5\¨69mVJ:toyPZ(wڛ'{)Q;g\cGRh dߴc% 5;\PRY4V/oU1P($U郒vgk9,˄Шo@6cן`ev^9̤n_?%_rA( N[I }qbŸ~<^WZB^Gh |kP|7'%clΔ9?AM(ߣ$8E_u<{KAerl*B5h}x}}$ 6bL*ߟup[1N:HeQQ*E)S9۠Pn60eMJ IOW8>73 J*$0[u79Q(5]CFV|P᫖2΅WƇڝa-c%=T,ɬ]Jf,3v;D˰(>f鰗JHC褗A1Jj_^_J0@*g7)f&cS(X@Ζ %JeEGVq#ђDIB6 l@B{^a˲py >z;wO2jAxs{zudO(}2/:&Lv-Z$ ;6oc)8Uɳ=3ٱxe-yw(۝~̹XGF',6R\hnď,X cCp@&Esnd7&7K.¼" ry)eֳ|t  eCH\4Ƿz֋~=B8S{:x{^n̺S~~~݆g·YVG/2$%o'?{A!цS"+NH/>A/xqBg ۶}=`/K_}-ށD ť0oś;9x ]Ӟpٗ8@Oꅻ{ec9M۬?7z5#feL)lߕ%'rYFӃcF{xwz3wv*h Bu&VHXÕXV{efH֠KgqViL%"a8„G+"'rגXUb5jn^u\uFSh+{!(Y8Y:g ߵ/ۯ! )ԟk*PRUj@Sh+kY>iՕ7BA^weǏʕU?K6[Y8-F;}AuUycAC;+p뮪<7AS=>ESRdfk>ggxY9`\]Xkbb^\e趟Z,`ڜu3%pڇQ7o/AAۑ`"9OGP9wbZnH_AA 4r{FϜ4}AA#       =MPgF$g̽nk}glI& <~={{yw=p:W~<&?&{7usn1}AA&J#`;_hg͌8[ͼIZzcj7A8ü|rd\Zs\rPәv'- i:\e3Sz4Wku g\ɌS8tmkGU*-}gff3f6IEӇ2Yf+Dv2/>FSE3v!#ϻ.@T\}9u۹q$8Ǵ,_%sX|C"zT&Iy}_m/MPC$-c?ó#Q'ƶW"#3f#X٭{ZYZW}=bãmT2rN3};=b8޿oQNu>O19⭵T$ᦉ,JaD(3} Vl۪C2Lu|ռ)rW&6;YH9j;h;^rcZL [F鱃X@ِS EzĂ }_M6 7wW"bOSЩ] o$3l ԁ9ħ[Hyw&ۄ)ڼRȷF^wGO›3}2yd|Yī!:$(rb<[atw*PJV$YdVwM6\uHQSSULޯsySXK1ĂGH_cyGWKlW^O!\WbʢW~X{P?~tĖwU| H2xtcҤ!IScgJ<\^N˒=Q;#7ʟY{Ny7j'`%nAdVΞGzebߞy&rڤIw^uʍ#m;MǕۧ n{;=\nGc\k?v&l`c(=^ǎwۧmy&򾽶φN# O w;7 ٞޚ:J݇n"l?=J'|:Yļ}'S9Թ# %blmNW3:Dω|n%|&w dj{2Is#;sG[G-D1ӧ&v\\Q(}єbMՆX]Xd1s'D\=$2tхa%,YU:?RYhᛌle$lr|1B&_Wν#7ȟYlZ3\1яaW8Y~֟@!W>fÅo27pu?Ahn^(Ʌ{QT9Z wO %Ck3&а\n.ۥ=5_Q<0Q/CH9c77޿ݾ}[V` [nIZM[uwRnͨ%% =VJӚxp+)Um!bfŤTq}xS<~͆o$8f yc`KfnZ\Kki;K]D/_Xꆋ[Υ⒚#8ڻKC?9y0};87 Po`'\j*;ɔ{TA+ҭTj@m ;?Ahn~P}Au_k'[FͅoRXݏLsjTRI|0 =z2c3)uq kruUQ:J\uBB#0Jxz\*Jkc͵~J(u.Mr`zw.D9y~Q)9^됧.LP:B~bZz[}m0&4g^{oM'wn,6)S6^ʤ ,~tm 'w۷ ^I]G?1ԖuC Nk rS(d{AK%M3 X-D˰(>fڡԫJHtsAJj_^QQL ߔv3ϱIHӃȁ _cӯܼk rI1> J(/3R#%u0'=SDe7 [ K$cTV/_qE2Qj#G6 lwOZΏB $U0K$3s$~nG_sLm%-ܺ5c\}ܸ@b݂Y2d$#Gr_;52/O%;d/QIR[G$iևon v+bMZ)%=?EW ? ֗!_=k&&܉n*4jOXC͠vo;| WZ&E4.Λ)iZFGѲxOl29 (4tmيUE.v\@I]k!cV H(53=fC<sA!ʀ@8=XRUdfcdK &'Jv)"=K:6{ -䁷dWk+gq,%76)vM_W#QӚ%r zT&gdl=V RK{+ęv-AK$2a>4Hl E|s vQ <6̫9ܿm^l&G-^nV}JZ-*86׍ixOj #>]GSk=myK/+,:rֆ.zSWrHiɶQ&v$eJr~I:'Rhi6|(BX(% )RXEm+8&o SYe(toφ!RMn`_w_c okG&#=ӧ=Yݩ/njmF.*)\O:^` ^D+奔Y2 c/0e:0gZW~VDqrt~w|~<7>K `Ep$ &:ZO&hx=JNe$0hVuqAk&N}I> )L؟BpvTeQJ*:*@ h*mRo  g#:pE+P5]YdzreOc#YU8"aw~UǏѦ w۫2Vn2­ũFO4sMII ի͟׻=d啋rw9`iJv IDAT *MZe趟Z,Bcf'm?6giĞj5M.}G?щA1mA1!34q)sXB/r2_i͍#}G?AALtdAh$9ѷi4  ёAkh7Ʈ2&s[oL+ pmYAAAQYAAAQSmhsQ^GKZzcj7A8ü|rd\Zs\rPәv'- i:\e3Sz4T{f^pxiQ8ŌCgkAxJKkoߙپٌYwo>(e,VƉd^>|&"0AAꛖ=fEpc@^um.;{mfޅZ:s.ף7_W\&v$f,2jD Mtd|ռ)rW&6;YSW۹2.v><׫uw<SYCKsɍɱy4,DaTzg,3F'GuMN"S~,X@#yX-l@J |Z' ȱ0g_b4;o  C2L,%*_oO{o5O3GF%fW|ү' RD}V'K:Ƶcg 6^{6ЧvrIS5|{$l3qQЩ] o$3h6@d4R`+3tkB+ y-w%'RȷF;^6gݱS):M,Bë(*]0sbL0N cWL/ Б1$G" DH.;2) 5j(*Z'۷uz'i]̲Sd<+g hSW:!:'& eh#Gp,#u݇n"l?=CU-tpyN(Թ# %vblm"K;CͧV7jz@'-4{LF~6?l˧oFsgQAAh\K{, GYk]Rᩲ[Fa=}=Qzn֍՟T}2t}[*5x<YMin oZ[(>uRJ1I[19 zR݆ /^r/!hmVLJ(݇g9glJ1(cƐ7< d榕T_h#_ͭɳ29`VvK9EZ5Odq^)y3f1B' ­ ʳO7_}ϥSX`ufx;y=oO.LZiJ@LG/ q݆Y.cmR*l%L*.[1]W.haz3^1%DY)UQ+@jIjoٛg$FL`7jr) wT#+)DEj` o|0]~[Zn6S^: wn2t}[nhɥ9xsg:\Anp'{Hci=okpAt=JXMQp9gDT:!:bNkP9#I NZkiI/K2+:J 槝,2,|9b:el%E$!tK|Wgz{`"ڗb{# :YͅoJdԩ'q> -0@YV{y WNѐN 8ϙؿqjhQ.>ĺsא(T%sխFB@%;>mms癶<i03 HMտP'boё. $Sy=šɻF:wb ړ ֐v3۲=?zgUIiK /fgJ2ёx,a:Qhڲw8\,#_ZtVds)_AzgJOڵU.OXʄ;(#iBOe9UZ_fF`LOcm9[.O۷Q!pl[:x{V_&eSzyDש?_W,2 0EC!Pp*#Ghjv2-OttYC.Eπxp6V^i~<;"6" ĎLI.H6`=BOGҸF)I V b/m[y$a* V |^eŁ LZVwģS_ݔhlA!_ԋp/'bikR%-=15؛ ga^r>92H.9.AW 9H(L\4~̊ )L=NJeݽZ3[8crNfbơ3<: Rii;371 ZE8ˇOށ+cL\ϧ_l >]{7 [zc-QbOZ8a I;JL~J<SZOA ^WmL9,V>ƋC}Pu̇'e^8[Ñ m׵=hd xivWBgd'ƺ+I>Ō#爷:n9믺'әT.?ldFf $].},?Qڲ; eI n5Օ˷?15D¹ӬhًG'5~bJ<Չ6{X=>w;RƹqxIۂϧї_URR>?\ Jݎ/Q`Sw6}eKŤIf9m@dNm@I<Ϊl2g& "{z?ᇟם6ۧ? i5_W\T+ׅ n-cp)|x>vnxX ƴ' պ;XgDFj^ly5QɥŠ }_M6 7wW"" : dFM!:?tK)v vayeUGD`ۤwXe%,z'eJw->ʑdǤIChúW'qBrY&lY>MɝG~r62`x參bWI'cԀ ߽˩cY2'jdÓbx}d>_,Y<^e#]Q},Jg[dp8)Ѣu˧Mم.}vf98ߺ ͏8mYԁ2qnKgri&0`O&׹),奘ObXvn !\oH<.˔-Q0d4cXgTY{Nywec79~Ry]-_y?8~%,~e_8i@n6O>HsC _Ys6oL7Yv:/=Щ =7xK!gCKnt[{܀^¶<oyq%tu߮RGu u7Owg3Y*w)8hp=J'|:Yļ}'S9AsFJ.eh$[Ak$s"7[ ߨIƞLnvKn<ӛh͏nZ.߯1} fXs%[e xR \r)dy|MFi|CR 9_>!x| /^+NP.,DCVFNA22 n9- ?`B-'c]˽N6%t͚ᑲecXcQ[F|xWV+Fs*~Sӽ'vb4:ƴu~gt1R|b4b{\''{,.Y W׫=|Cn?]h83//$ 0s..|ѮWH/giWdDdsD?o?]qy7)ń.?,aɢN,cK\>\c]xUՃ"k7i/\7,elv,| UIJZ2u)}[V` [r+:V%Q&6!HITuNTNhG^_  Ƕ󨆨Pb|?a:N(~%zp5s6)U(6lxi]+͏VlJ] TJNqB01[T<;;zK m:ce(;ɔ'Uԏ"Wrt|:RЪ@ZV;6~@+% y3%  9(b⿜˷0;N^ n&5#b(gߙ}ܗfLdٔѻ_T"5J\uNBBA""T=p-1b%BQ ' 'C": p!?H'jq2_0ڷV'SI35eBhPtV8(3 ӓ>_eڪ_4_>Q{=ͧFCMmfŦС8CiPå7)-TvC$ӻ"\J(u8(@qEGwO/ze%nfR//USn\yur3Z ]̃˓:_&wh/\$f1I. ֟uD-$Zo! bo13Mu:b-cŃ^M4cɠH #lJj:DYO)y{`,"ڗbcy|A;7%slRSۑPIV]u<}6 >4CN>EUf9U{)xk0Dے8%z(,lbw T! ,c>mγ亇q)$wܫ_$cTvu3TRް6Nwòg1PD_h$O'%e;|+kkxWŃDZ _DLM4׹#ThԞ<u4Aޖwf_k_ehќJPB;ov*hًG?U[71 ][nUedIt PPUSڬ2J/,:gQwU'!3bڃQ(ӡOx%+ [ 87ySJv)m R O38ET"[q63ɳ=3ٱ8EvfВ:WEC\Ns[A,#gY,WѸS{  TۃPT*Q*(.tr}7k3E4M @"yFCxoGxp:v`,YXY%ڊY:pKe\GNRUdfcdK Ŧ1Ω]ny= q!MZ=Hrvl&hRnAO፧o/&=ҙٞ#&& O^5rmᎻҍ-)6pZQq@E|'x}Ƚ}B0*]uxĽ5S;Zږ'bɬ N!amg@QuY҆0{$x'8 8ٕx`P,"ݶw蕐+H:T@d,4@&$2>&f^|T\xbEL[8K g, d=ͮ>Ÿv)`g2ߌۺ|ZƏ#Rf?iABOxz\'B dK<$)FIP6"s״')\%/N/&+l?zU^Q^/݃ ݆)6箺HyN~3B ߧDVPO9>뛅#d(Tv9I{ٟ|[$laދ_h2Yf>Ta}2ᱜ]&m֛A_\G˙>4Esx|a#CDGټmlV}Lxfl.wsfS5x > `O_yˍY3}2Pu`O?/e髏;a㡸xq$ܻ_??*Z`5|^ W.ʥV.6*.UbAAj`ڜuYS{Ъ}x= Pmb@TAZ dx&.eQ(TEN,   Brs]A1XAAAhTDGVAAAhTDGV2yV?wNꙍS_<76a[/G00߻)pvqnų< 7wĹo P-Y@?#;1]Lz)f9G2 i֎a&> ɑAriqQ bABaOgڝ,cVt$OpOgtR*^-1^Zr9'3N1VW ͘uX{R"leN'hj/1&/6QͮewFMZ.6Y?xqu;, IDAT,3MD DbUm-mťեJUN,Ŗ!!LY "%3i|99}k~uVEQ,\:Mo3ݍ[j?1_ O#c_OⳣL[6`AB_s`1^~2Ľѹ sCFzNYޣZ3TΐNO񓗉:đ3;yRugT 8k҈|八Z߇ɑ׾==?L̈́XG;(ڲ0A.ѩ [l6%K~Guql08 'yk\S#]Yd'/0 L IdpͮX"[/] 岿l{.X{ 6*QV#p;os]>>9cG7zVX6 \r cmOHIGG 4)%e!zPKfAe@Z'{~jP[J<\x}0i'|33vgU\NfPVcTBϓxr)B7R+RZ  9TȞb>rVcǽwd/^klϑd0E:$-=?2BC+DJ'@?eq5u:I+h@PK/Tp͈OXry@)e7K3y<1hb6YXj\+CA<#.-IlLb[!F.%X0eJ@$og'ӿxiG<'Ô}W/ %t0^ꆯ9ݟ0`{f e[9eĩBL3~W oȠw o 缽"`8V)(t3 ;"2ִ9Cq8HbqYW?+.ן2P|Z~Om,^25ޭ VWX;}.9}Iօ`UW~gɢ/qկ=ῩfrgU7VZVJ|Hrs/ 4d)=q/cf_o1Mt{쁲ڧG%+Y3I7mkMKcac\)΍lؕiVƅ6|4 y1[ɉ`k.09O+kh›j@#]%vL o52;4j:p8)$Ғ.!#o<#y.Od (Bm#h7U诱5#84_,{Iȹ]igOs\Z<ݬ@L㏯>^0fн`=_9G i)u;mQ"2E$!|e fs7xgo)c 7]1{ X!>eүl9m?ex [? K-cْw*Mc|><诎ɮ t}^̒E۽,^y9\Vxf @ܶq6XJ"䃁wW5oU27upDNE@+l+@~Llf5dW~6dȄ\fc,\]ZWjeP@ҝ7&Q̙ W`g2R@Ds\ҳi1}+Z>6dˁW3:u,}ċDT? \*I>~|bEoB=phqץ{Ct孮y]咩zW.##\dO1a*JdIFsil([`,yuaDX'Vʣd ةgغN@ӗQŜN΋vO"p.sLyXHAEM>"!9QvG#$Iĥ|Ndj|Xgy6Q+,_"h*,">AhAES34|c63C4},>Fx1LJ>*o:<=O>"U jb;l,9}=QW7y?\y 2P; 57RV(Xļ:3rbIYZh~@DWɢd^M[Y2;}*PZcAW/3|CU)r-BHq*d@IIJ1֌h!^@PhUiioxm<emcXnS(G,"Ofs8k ;Dxk6"a1v2O8tҖn=4ΐo9X6oC)(P)ErR)D}!Mбy*-O?&3vA DK)6hUb $ZgB_+ƺ8;wR}=s0Yh"tjHs?-2Yc ￾ drr92CPEAݔ^LЧg]#8qw*^۫~i귻%-! 5h<Iϯ4<=O6/cP*on Sa7CĪ#fDA Eo=$x= f, Yq+(x7=ۺ(P&]ѰĶ}<"kvʸ9 4yWi$2Qµq^-U`qBpd/]Izd~CwUx Cakj(ܩ;[~3̪ t*Y`bx~H ֯ԳM\1cvP7݋3rv1w@,+pECޛAO77oW2sBFQcL<"(za{AP殙ZHLe:J K0[P3tw $Bh88E2܄} F+83=8{D*.kLk?TQ?72o hOT*@_DS>{vsho.-j:ӫѹY.Nxt[oNX&w֩,{7D}E,cZlэ6؈.g%02"5OŲ$fsVݹd(&)N?KǪk}n?K1; @ ؔ_6(^-݃<(o|5{exէݲLc J>JHN.W?/"~MQQ FZ (콘ޚ]3/$cϥR[c@Sz9I)){% > ^t9Lɼ 4`Z0^uN,%*!I(ϿƩ1s4g X E+*;lLwMgclK"U!hڍG{8}1bjDt[Y6S0dh1ez?Gs+ڌb$oz_RjO+ciol|29z eڲmZҿ5B̄'Aܟy/R㭁`̧P0ǯPCH1 ji6`6T::PA G& mF QOL^;Gdy aFHr}2kSkpH!r-# Q1}tFŐ+GZnTZ%?҈fBDE~FwPߑ mk{knl U'2e vXO Q/~\cam8#niЎM+821<& ڴbªW^P5Ǻ" uQ]vjkFFb(ձ99.Hѣ|SFdzv v]lQ:VCZ>#PK ˗ɢ( aׂ^GVEo]$z4 둹f`o.D۠>xRĒt  (i3x@)e7K3y<1hbvoYXj\+CA<#.-IlLb[!U#WM勒Q,ղJ@$y{eE7qyv\r [9 /OIGWCS_} e.R7|mH^p"wlcq!+Lġ$#yR&W&mW1).pY'^hbO SznN?YΧ!`Ԥs&"?a˶r6ˈSי?:`<ʪ%*݀ @ƌEc@#slMk8$6n)u_KSo80u:Z&|I(<  @,oC3Z׿uP0ݟ00m,#|FZNƈA0{JǟBx>\)X@A`xX$$j)[4]C`*dOV19#r` 8%&o{U`gL|r&:Tuj-8DT@-+C_ vBBy>nnĂK05{˧54EGLUӑx4 Vs.3aQb!_F͛uo r-~7::C>C0Mub7R8{*9Dfնxb|5ǼG,7r9|mHKɨ4xRBJR^~>waFi,^χ)dȄ\fc,\eүlP ߷D7͟Ǘ_Kͬ9}zPOѮ#' p-Z߹b~=hTҿB x&@Hi=̇y3`=9gC+ V~ Y&8N]  ˭|| alH ү ү1<6 -AU?j̀kM'V̀ K}dMWR$$Dϴ6lIL7S<ȗJvvneîLck1NGjUG\$gW$ǜfsf5o} #+eG<֝)#dA@B ;oL٣˻rvQuFe4P,W`_9Cvu.0b>ꆯX+̓oab-;W0ьg /Vpdd41fn s9ţp'z;y/?S1X9y8Șʵ45Z,X)yGs8֓nB=zujL]̾r2LEdfbkgg]QKnѸ*BWt hԥ'5_Wcxhz7wCYX IDAT*ϟ grUNt4i=]t(ީ nk5 ]WwmeLPXbs8^SWg 6u}ӣhAfM =Cqnd p+wa܋C]{Un,WNGCs7pЀR&@,4jwIϏXOb^;=`S%3M BjPN2-^zvO0O\ -EUO G90aVcc#V垖 uS o&V-}\_[Db Ip>%' %{&}y8URŇݖv ;I:*d@{rywϼ (]`oSX9A̤"q ꅯX'ʓ/E.VXlܰd2u-ڛBŮPNBBFE>Fm͵lO¼k3$ˬW^!;vNYL 7[(ZT,ت R 7r47TըJ ):hvr{ngm*幗g\:'6w!Px?q_dVL\a׃o՘`lXY .#ڍ3vR|(t h~@B]} SMmoÔ \ٓŸUȃ~smUU z6^WD"!YQvG#$Iĥ|Ndj|ӨK-"h*,1;Fͩ%մQ D:evS wҶ*o:<=O>"U jb; 9}=QWɑ7y?h~kLVU-g`>}a\mPA?PjXk~VOՍp @d&ݴ>aAW/3|CU)r-BX[B] #`W3Z@؄ O67Y-CxAґ蚗RPjYJSleH#h,3:s !"Aax$~Qiq,׌"#xfDUY;M76ycD}w粶1],Ap CTPyv⃗!}oBPF$;F6 [5SM1+uqwC+hqv4q5218{`V6q~)bqn._LgGXr4P:5L2+"drr92.Ƃ1oq/PBi*50a9h׾!!;8 F=z%rXL:k'/gsT77ZWxXT Y7mA# wɆ'8z'5\.ܲ;oYwP zZFzQ=X"Qlތg7ز ߺ:Wz4"+\,ʕry佬ښj- ֝ s>3D]@۪=n gdm&OC4 cϓM?˜+5ʛ~8Tк8<1ȼY>=r@㤀u}ћln>[sU򽎞mծ+iD ˊ%z/\-FՒ.2mp=0QAW۵y1?f.Epm܁@Ki ?˙>I 3yh3 o|S9`;6ZUp89{(lkMlJ‡6hSR& x2L;Gb QbWր"!͠}d-dr!wxAKD.񇴸t&K0bŠ<фIT&XφӉՓWF,?x} d w5&Xֿ"p s<>F0~<,] Z?C }v<O7»O|RH6On#0Zlf-6/Aaop`b1м a%$,#^c1-_FB[lDu<#А1|(A`@ //QW2;)w1|)<=Rbv:[cXv)%w(7TWmwQaݱ["_ yPex䉷OX7 Ly%$$$$硘ZPhγZ25[!PM U7{R{::"UP1)c蔋̽Mmc~N[dd^|Uz85fn vR8ru$*{neۈN)hoGĈ$*u6K׵GKJH]@›IMqz_BX G<Gbf+.w1O8U{7RWsn_Q߅XP2įRóH0eY̻&4tK 6^؆#g`Ήtu#H͉[!M"kUhf>>SttӠ&K-;6ba ! rgHݻ;1eq5u:I+h@PK/Tp͈OXry@)e7K3y<1hbvoYXj\+CA<#.-IlLb[!F.%X0eJ@L3~W oȠw oY `sH>mOGI w=_E|jOFMz 74`BE@7,',ݟ0`{f e[9eĩZŔ%)MG=ŗM ytPw̌|@|J.ocMĖqnMb+=S"]9N48]S)/_ɾ2d z6r&%[^2yiHI핀kf!,wԚ 缽"`8I^aǟr0po=R$$%lfVtLw(ڸbmPd[_>kf3|r:WS._RGd-!17ktNGZK`- )4.s| v.^/ :eb+f#Ȑ D̦YxӶK4Ci,^χU1e`yNIHw'5aKb:#mC|3][ЫZlyu31\Zc\۷wEޑ LFqbVhX6W(PcЂU#(}c2e^MZ90m^/cn:ef:͡0eqȖJZNPxhg'I{`X~wNjĞ^fGJI70ĝ+hƿ +82@3r7A8ғn=CНĺIH[~<ޡdZRmpV81 ;e/.VL.}]ؾ <3D"=yP6ޠ7lKDX;坤e-=_P:3cgDᨡz*+'Ŀ5_4GS(V W+ s,&RfRzD#MqLy6[d'a_$)D]W˱٘hgosr3X8joFPk+ԡG68gs[s-ۓ0cU>{n {lJ(:9Nj5\ݻ=M`JVFN@  s8c?i|uSp CTPyv⃗!}oBPF$;FV TJtJQ_HAѪ͘d=` 7oՋTM\8x=|Gl/SlRѪI΄L I<y`?:4Ԡ^ =)ȣ*nJsdF&P L5ΐo9X6oΐ8;wR}=s0rkqtĈ-YFiM'!QUC j x'.yĉDZV2"Ћ[P*Lp89͛,|[v[y'(g%+B퉐'ޔg{vI_Oix{ Gm*f_\)&N_8@ߢ@^m݉ 2=ӎ;>L4#xpFFn/g)O cs-ߢteX|]_᫞O0XKGUwoY)ьڋ59/∄ؕqs<h"S[<ØX3uVf"U6 S_ #;Ǐ'{rO# åL̼#_TV@w [VE{3f }ڽ8],M e!-߹ V}_M[pF`*QbXʄ1߂"Oi7sgHIJ"J P0%3hڼoh*jX>  ^c1-_FB[lDux@$&0cTmSxz.0tZXu響}/ɿ.p;SVt9fW(KU~UpK%{P^̓&ߵ~6k+}1%~;\}&wLCKWjuwذZ.x쯺F]=twU{ǿ{jI%$@hJK E{ */4*P/6P^"Rt-HS#B <>9{fvv8;[V[w9v! x 0V,꿍 0W,/U+bAAA^YAAA^i p(۟R   "+4|J7^ҕW}xzd]p~b   u ÿ}?;p",wP   U#+dC~^OXWV_T5u{[ 6[ w7 oBa]jt' iw=*f<֖^Y x-VrMZ06 ħ'1|2H)6> 9H(i<~7+M i!|p Hg4R*{3o0w-jȩ<8}w~jdħb*5Ȑѣd7xf;l@KPIij> ³tʧr+NG/533ꬽ IDATNf:ǧ8G("E#H8 ϰX^Fy9h-cgƞ$ݮE.u+퍕}Ƿ2lR/ 2~?*vY|GV6^4--`Wq1y^7Sѽmy38v˞LҍMNq8Gd}\Όޛ%gh0, Opφ\Ty=4t+}X%7&D!4m7;WyRlO룹lxԔ3d͂(}` Bkȗo񪝴̅P9Gjrm )L|N2JmL^N>*>~H8x7>>m_?A'/uj_.Z(H{uG1J.<Ð}tK'ϩ1b\vSM%`/HȪ5mB];!?dxj&if)~-9DHyfHAx\`h\0Lu|$Fɓ@ U]&R>!AfǏwYx.wdm<[?mFvodR~A6W(% O}t[P ycq+]z^dE,y{p 5e3"ٷxGHu+4|GaM8F6I%~b5&TCJY|rwYM}SYt 3 X0MKJ~g+[己}CM/ERޘ4lL͢*d FT.:pSYc[ b06AÔpھ^GYDGT*\0Sb=/s;5#~/-*pgv) Dk1STT53wdN3!ͦlկcw _&e3k),Bh)ao=+ʧe#{/gW \.),swP)LbBŸ0+[?esO1_lI^$P*܇\\37g PӣwGbQGnZfV8>C%.9eOAniX)ML bkve^-K oO>My-E_jIAiK;)@NKr䂓^OaOѷ:g:)Sì K} PzXϒTKN7~+߻QQSrQ<{1 @@m9pZmP=Iӄ 'o$20RYۘυ'HZ_&5FPಙ7|&^X g] ?'adS>~9f4}xJĴ`/Ȁ)[Oޱ y`Nd1w#< Д  X94`e8jM BȦ*]f]؍O6Qfբs"ɗs+z+&A?;>utiSd,U^]{@VP]nV/mҙA,. H<=m_߇T{c5$s:r< [wc5Az!N'"π,Ǧ<:y[C5llfP+F6\dAW>h݃4s)8|HƪÉ   A#+dC~^OXWVnMeݴ޻#x0=of5uF`[PgMAY@ݗG2+a9u͘׾%ܵe#O$ݮss I;G C3~5C kJHov9'eR{,پVy'Oħ_n&>UqGE S%IU^>{QX1_i3ʮ%Դ $W~@1M%eh"d te2ٛ^gr<3{]|4A{y2/2!Z4Ӽp {*Fd΁' uJddҲNsě_Fy9h-cgƞ$N?I𘿱: !iZnߑW8MK U\LW/1! i ߑGʃ`e|Z͵BSѽmy38v˞LҍMNq8Gd}\Όޛ%gh0, Opφ\Ty=4t+}Xm_e[W٨;]RVds[͍9`cB/wVM͵2sE,u}MpRxRV%ŎTܽ'+[~$̸Nѻ+\x{V*$XTr٘S\:yNGg0,rHȪS6[jZm;!?dxH] u=sT7zfp![\>I 4|YlNk<_3rMNp!gQe|)VI9L Ӝ۪:ΞU:33)22xh '+jrI!iܓ$qna2n@t|uϔĺgYMxJx(߃'_x% k?YF$\[2zt?BK$X̤n a!i޻<cl9Y52#ɠk=GQck1[ 1 \[1dĸNǗK7q"ׂ{*UuwVtWSA31<7O'>nj-Mzb܈H%* ܐF +"gWfǑ,5u_#%L\e^0wF-gӛ3xƽ/: :T͚ؕwuV3ňBR91O X1i'Q{klz9GIO/w5[6\Twz{:%gZw=ep)I@bЧ23)!x'%9Ngf5qXU C]8Gm؜JI{es >}\]gV|Rbo'[)t@%Wz\\i.٪CnU36WrbL5.lze!1' 0EEd5|o #,hoLX~H&zD"ŗYv-i䡭rȉL:s⧹Y E)gGqޜgs?fj-=+!nL|afNo9ͦ+hp63'ö 87>jy5 ]p$pM̢op߳o\f|Ֆ k8~W_~ΛHr>qWnG4E3oM[y W6 \U BuVkȨ^1'@gˎhhdI)Hp$IF;:K_ Di IDAT2|?$tn'(B/}(c]k.OĹUk (jѹj\ܹxTo}sbP֋@iȿ7+ΜXP>k&Ъe302mᯧttiW/U^]{Ʈg4 JkF:tHJg5dz32X 9frgh  胶Õn f<=mp0#QX4;(cDН- k 0u@Mךֿp[\<"UYN PE[T&5[#uEC߿;*15k~*B}`Ƿ _U#jMemA]V~?܁ u;=dpqqdƊPT1Jsb\eBL-AAAёAAAёAAA[$N+Ƌy!]n’$l0%22i[Os_(ً"GS;?>ٙ7G2z`&C}4kWd%F|'|1yU^'/} u{hq҆-%T|7VNcs>֍M3=qd9CX?22ac1 i Ok}vq.J7&,nC潄{g=Ш +_*!6Ϋ~An%FRƱ_7$Z~ݗ% o V\^a%+į_m =)OA=KQυ|j*ԍN$F*аي?Ό :l3-f]v~ճ<~E³_0$5NxoŏwfHkLom rj+iB9l [$˦ZQH;D"cg}nMNf2/[Rn&mN܈{dxN&Pu?ypyV Տ+NqҜЫ3O'>nj-Mzb܈H%r5o(>5I:{җmfI4Akm!뻼4&c)eaY4/n7 Y5Wmּ[)Fayg[hlş*gZ0߅ %].8gs:,%p&B98/ϓ@yg^ߟ;\]a+soP'4+7E71SӰ,n&U឴q(r3s|'VĂsL+>&1oIlBO¹GdqPW_ϩ1NʣH pb̲ӵfƱI+_)J("+9 Mt#ze\У,jm'd DdΛijcl< N,r>qWE/^ĢٱțLE{+)PHˣהwYxCwXild9]^bw3-:A]o*.ݑՏ[ٹ}<ɴN,r6[/``>ߛF,<uӔw?X`Z*p A}}3*W^e Bu4n(S$|7 ӛXog^%;Btd+HMA?}S)œi5uQ႙RsegȞ]-`LcRe R3e*:ynL4a޽/?"\.%Y<peꜵHCs$9fD&B4*79&6lF)ߒ[W,sn"!_.24fN},?$y{RhPzҷwtƓٛ^Sr=#/ڞl)fC.Dә|96^¼I .oԡQ[[ w>5E@:$kNe_qcbT,\QwƛK_٪16;[YAbs.5-҂ \ c<_Wxn繂4wsFk_>YeɛGh?:fQȹ;lqM{m,|=eif#%KdoRT]Ts᫙H:7\M>k6%,sKc6+S`̶rPC[EN2T 9/=GrُMT*<$V$;Z],Lk#λK>X>աS̠L,g;zbӆAMUhxrQ;_lP7g[.sM9I ZFB3PDvy V@2.<πsJ_٨_97u09_|ځ}-M\Dj9(@JX33(c{x CWq0ˀ$m|EBZɆ2ʬZtZ$2wn%^od4\Z2 {R0]vruyuaSmIX*&"*? X9髼xFPcOKZ! :=^QU[*o@ȓŲU\%Edp`}Rǿb Ĝ li+ fBjYvCwM d.։Lyƕf 4V3v䘳$ߖcjs{ jM }d#Kt|".:*'-y{ĆIbq;Ңq1x{($@Ǝp̨+-g$է]u`~ϟKGMV#[dƝ1 PAm=d8==2=^T4zoə̾FE egF歞Y&QN\>K!>~$vrcDщAAzLtdl`i+AO+* Y,Rii#amŰrwpi7Vd2d~6ݖMZ06 ħ'1|2H)6> 9H(i<~7+M i!|p Hg4R*k:fkߒaZԲSyp*b[:$//|bAHO\odoz%uw %kaoֈ()Gyg$SNC}Y"b UA<6 k!go3ij֑~$6^{[On4R90;:Q^8Zؙ|'3IO)R|N;AgKRS,Cߺx·\wd%m#>NvuG2@mq޶{eOu&8zȣr2Muə1{3 MEu)p*/^;noƄ6&|G*^ރi}4M_d~te4A!x* OOh o#3_zqw(ٻ6&rDb =B_ Aş7^³11 )GtI,oaXeM%qY{\БǺ\ߑ )W$C˒C0Yyxqm4L7{Nkf$F5#G ڴ{j?_Ƨ.bÄ@=Y[3,L|grɷ_?3,s)3gp>ZS ovl'VI&'4_֔Ξ2AL2xD[~&WC7KA~H2e~:IS樂FKI X˼za8Kgp ˌ$`݇FyGYl;S($D5R*]o9Ϛ7vmxzfn$|?%| (f .Y}*3B9wyks'I붧52k)1oI?S:hJsԊz\\i~8Bch 's(++91c Kf¶ı9-+Fyoyܼ;P9cȖf1S ~Cd@UJId ؟`ٗ6r&?G,xez'1ڵQ3'f;f2qy o,%{% ?}] ")PH%_fsyy'K`z#kf}E̳oxp|-,]ҏ%:‡1n;́hݩ# >!n+_j9|,cEul\AXN&Q[E%sD` ao^R 8G)p:gk?:8Z@phrs]q'5u+Ol n* :vlBAF[16>l=:vjۉh d5 }ERpLԾԌyj)% G2ܙA cZ̔)U8UD1LH*r![+i]—yGUm=SSf&B $:D\t+^A+",ؕ("%Z*u&eH $7zw=^zx Kw_2~jOkX+Ns*4EG[fO_rR4h5O^`ƍ㞇^Uʿhgz ~0'ߥ /I ;;*AOٜ&@Zf5EP/@IZM3u>_Ϻ,F}jVLfa oAP$,ڎtr}-f qǠ+w0"# HY)QF/n/nV *Ij/fv,#vijzmuGUhx+ 1/ghuv^%}3!Sb*Ej51Tp!Un{ow #ywWd%9?+JPԽD@svix&*wx̝QZ$s/9#p; hG6ڟLݒT$ڵ9UwCPm iS̺&u=PӔxZ+I0m7< FnPw;!0Aomt{u嗓gLlHS%]x;Hƣeq 8uN9:n揟(\ՏHL_|@(++dga9Vٙ1 C;h&!2t][cIlGl#bK:[7ųSg)ɀӔ}lݗ|ܘgɞBd@JDC E-Zdo)|/HtE }`dv-==-%Jǿ;SFVUgdQťbܭPT*Q*(p(<_|#,_ƾrleOXtmj2qJ+PcOҰλ21z[ZxaaDSYp^n&oķև#1{-Wӛ(Kb-IS+`?yΡ;XҌm±̽?MEG#Er6Ǭ4 ::{)NfrW$m0Sob Dl>^q5r)"C[v Q#v2sOʏ 3KBI`*J}N$h0{\VɟӦ̙iABwyrl8j@Q#-mqwwc[I~qw}2O,lG܃&GU>2/cR$~?NTtPfWtv^L3;S~`6/~ɛh|4~.SzxuAꆺ,ɍv=Äog&gٙ1ώ3Qpj?9 Fk%uR\ 13J,公Q+Ә׃& ؔÛzĵ|س}N2ϻ>+ZpSj8Y 5s w Sg%od>ov0 ÐY_4oݗ˦l7`1}N uٷL W5=C%"Gc+!'0b§ tS\3 >SNc@w@P(܃iՊ?xBk $nˇbYR֓}whyU88UI|Ws'k׌/ cApFxj3Ęxs(T 3NtZ=}4))`{q1y>^C%z:]Nfy~1ۇbInDߗ B/Ӕ Nszo2 = 6>NOԻq5]س5f!َpbKbЦ.$W:2(ݽԸhvպ`QN7A=ɍ&f?Ž_OQ]n5H5tH6"캔r& +!ֹ3Y| ͢ѽE!LG—1kI-z]5VP8/"ܖ(ys NmT^<ݛ- <ٞΤ_V3+t}i$9X<ޡa;ܚGʋg{e>-YO'3sgfE:Dz=8Օ >˓ypC2jvnxI%5j(2[oB %|BV> Ћ ;/-]TWL N@wM$oɶQimwOū1=> 51DK3CsDr4}|eŵh}81'7gbW6DlZOxoG}sE'[vX禽ڽ@r_)7$,9# ncd[Y9%~jNBh<52c1P>ǣJОw_|϶$3 IwQLz!@d/̻ѕ(Cx vwMT.v0;NNY}ȎT3 C0aanJ^W`ܖkUne$w:+yG MdK d24k`V$ȿT9_'/B쁽]Cpbc_.o)`U9n?e38S y}Z^Ogӣ#đ$wZ>Rnbkn){pŹ@ZZ>.FTxlڰe GeOpKKAyKG O_Ău+~Nv8''c7C up'ask1tu U4ٯh14#a$\FO%`)gvK#D~?dDo/$Bf.(TA{ )sl/wgϔŋ.Zw[R>X}9o`K"ϖ,a' bJ c|>_nfל_C;9T$} h!{+yъ=HNgYmhYG2./IO$ZՏFAryj,;?biޭ-51Y1s`}g/ů1B'KןH?uIg#fj59KWxd+?6=uQhN?ӯ\~|VW" \]aKZNE` jJjl s$5C p~ _ X<Ggwфs8fsÌo&x}ٿF^SB^-"(?uIӘ5Fѿ-20;#Lfauv)۱Oq'UGΕgcqlb$fli NBä]I'.j@BRQn%3vgt;SfUSx3g!'6xRɅ{kr:J%QՕ " lRdߑ*˼A>oc;stKZWʚDͱacH[@OEF:c:nIMN.K=yqBKT4\ )22![2Gs$uc_ЀttQP$S1$ BJu%WLM2xJl ^ĩʩed䇇"(TGeF(GNf?Gw #c,t-t6TIHbH#$Gw>AMdJp{S %=u'?Z+Rj j~j ۻm#=:@`iF!"bvs2i8NO{ܶĞgO^EСٜy}2{/ڇQAE{96=\:%_q`_$-J 0Ui"IMM9BOj%rix$.DațGq6#bE7˗_-Tm;3ߜG:[ \.U5z~mc;b2~\#<} @sdQ(<.LEAŸ%yQSiO>/NYoa` MX%@ \?X 8$-S{^MƄy@ #Yj{6.7[@ @p1X @ u  @ N!Y WLұBL?Og+(=ߚkky#r@ _8)x߭-z3fŒ/9dJ9=vR:mFVӟ{[3'QeEQ,jOLjv"Ƴ\K ڳ}N2ϻ>+ZpSj8Y 5s w Sg%od>ov0 ÐY_4s_u /1Lʂy%:34dR#I6*O̧mQ(]}#C8=~5Dmi^J=IYuײbܦxȝ|\?-櫝{ l5ݷLWL9}co 3^a,hO-B|q?-+R:N)(݆Cmz;ofIv@ٔ#E-9v8O?n'7JddҳՅۄz\|}goj\ڑ5,Mv3ofg-E&r4Z'\z74^&+w[+D:0yAz@%m}r~9 ?e-َpbK-ePN!#N 8%vS1H>/k4u(CiѹLj~5O'mDh1;N0t,Knmˎl,&۵jK$~Oqzb4rgE 3E 'p8}?މZ6!&Fi>',tDƤy. ( iα=;}G)Җזej钹 ~J7V?Kr\)(x cpL"%H:>@PU، d@Ig(wU gV.v`UpbcrsM @rّjFb& Md|;;3X-YǑ\}b#Pe׳$umgX>52{Ek=2bUd߳-ɌBRnE)6K+9Qb̬̚Gݼ<0i  gp]J |y v"TvJ^|o(؋yNގS]fx]n<4AoV_ȿ&bc_.o)`U9n26J06 7 LJjDA9znݯ-;۽✜ތ&QI=y t I03j:< \zA rd9=AOZsrtvՆ/zHj^Ft "]2r"c6tz$(b%b7gsdY=w! I>boy㙖[3}<_‚ ֠|sc|-f`kPt{cͧ~+PH&)bB( IDATwe{sY OiVfE >,yV('\;g;hQr[/"&x&~{K,!LN `P6k씼# xfsbsXC@RO;p,7w^ 'wrwrWp )hP ͢?GٌJ?.~]Gʆޯ [5ǙN+ qls*&!De|-'s*[-A](Z(5x<[xքCMzs"ͅ#6JѰjln(K.ur3>6f5eހ  9#FU.4z/k~\0{pTGq5G 8œMf&ၸ*@Ox_ jw) CAr" {~\r | P ı'1#qu x`IMrf4t#CKEdqѹ{(Z@Ձ;q*ni*җё'rQ5OV%X?G8J_.<@̱z lPzm|2ZTgz ~ ;#Ns*4EG[Dvʾi̚QߎVZ^h`Bx ugV_T k(WJ#PigkYHVoץ*۱Oq'\*`cqlb$fli0;V1k =Cqq(0p VbϛĪb eu'.8u:[a6o7tаbRN-OL3f^A/r _ذ,21?#Zi "lɜ fф6TOB%Sl65-hBHhCq=SYu wfHPG"`hef40P ?my}$x'dž;}"AGsטY_րkUfWtv^Lкr{zOA1wz)BGD?ݬfpǝSgR}#/OVeڍyLެ@KsɵՐw`FWP-TkHA#[9ؓ#,?9R^Ȋ^r8Nn#Ә׃& ؔ< Li膿=ãٌ |l`xoדH"QXăgH/\ΏJ *V *5<ǥkY>bE/ ±c^ Ib,JV+.ܸqbj@PGqTEFɬ31dW: n.j/%|A}k6u~Jر1m?\yQ{ӹO WmZyبX)_rM@ A=G@ @ S5@ jE(wB 1"+@ :d@ @P@yg:Eq om^|fQ|7s-{2+7F ܚJ%ܷ!z 4#ZCG31j }ĹM⪏=/g!lo}sUTU=pIrQ5H/~jgVSb=nOV6aCWP%Zp /(#GG5Gɼ޴(_nO%+Uj~re]>?%3VgH4~{~^qH& B?wFWn0}+hl$׷P\o;dW7O>忣ܤNm0>3#)q6j`޸_<ұ m6Ɨg#6miT/߱ZFweDgTi_#F\HzjK jz'I}"iRRb|.Τ_V3鼀+t}i$ՊW7b+QŒplK/wA4^).;8dAz@%m}r~wjѻFgqkzCԗ0_ŠM]PcI9]td;=P8{q;|#" 0Pm>N._ȁS;&7*7EA^C.큄o#nJʙTl79h}/`<۹|kE*/ҖD,3sgfE:Dz=Ĭ wJʇ櫰?aPҎ9r 0#kXM=y3,^ :>˓ypC2jvnx,e38SR;<-yC\^X8QlE{ț)Z8NP 46 7-N=8x5gS&2&sIxF`HsU؁t=O6rC\9.Oxo%4oX-"Ȕ;mFVgm{YH5#`h1 &2̝?,H ϾOv{!V} 1蚴d߳-ɌBRnE3dVy1s2%OtEm;9 0~=xxDT蟻^8s xn<u@,x5 f>m`ZDahJ\ wl\#ϯz;Q>rfYdз :˟k6, 3KU N,}w&hRkjOGAd/̻ѕ(C]/?_M\;ZyYcZ$,x(DnЇI3 ˉБ˩)O^{1?ɻBݿ|ǻ̊&*xh?l'ك߬K5,bQxd+?6=ZX [BQj=7<}I ݯ-;_۽✜ }s$ўv(r6/bCh! }nK`jdf@!3>O_cv~X2} ;gxg`?w`{:?nϲpd\褪+ TsrFctl_ij>j }_1^"kY3OL3\I4֐y6N2Φ԰㩮խ9o`K"ϖ,a'Y_>;Hr'Yc>?yMs~DiDAuc!w1cG ڒHծT?Tp]N_KCI.hf4ϥ__|:25_rH j Il>й0}v.{Qx3g!'6xRɅ{kr:J%Q6+% 7(ō?"jTH. YnprR8n0Y^G;E*[nΖ[V"iS̺^쁷;tPet3C#hg4Scy'cwԨ%z* OhZ X@n6^tkW)ݺc>x{;+?DUfO VIg@GE2C`).T現 e7D=0|\OEEv~^Ʀ:ߑ}\]qń$S(NQ~?Zɂ \Wc_)}m0]L`˗P> 1nxwEعݓ} Cge[_&Wv~o 5`1;^K^9+^1_JO^'֪ c0)#ZUknֲ:ԄzI#<0$yZ Mi1lN|ы+iLIlLN|>﯏NQ Z$^E2b_˨YBzy%0$;pFvtÐj|_)x*_Gf#J'?jjɞvz`e'7v!E'ë&,-m TJ̤h#\Q_@YFB ~p/uf EbgК_cC$s:P֔߂~-Ue.ʏ}{? }jMlƶ8xX/`L*‚kRWJ[Oޫ$TG 1[R=KLQ/o?xNOx݃VEQr'JCs7z8)`}__ >ݿ9ō]mgca7+s8y piP.\I7:dԔvu!d=5צzޟE7fQ{e IDATh FsUՑjX= 5zDZpGsBif̢ l7+ ̉Mě\иqV>/g-RR-:e"E_gq-t" 6q0&1-"EM: Fx97U l;'7crQ+ǓJDe_xOś =\-B S} S*%`SrJ?xa{2_ -<) r uUR*[YCeݺuOH `J[Br:S ^TԺ iA^^ 6OMiČHlx&;.̧GWO~˩IpT f ޓid<.N%/YH/楢;BxTPݔVy'^'CP9bנ>21 kIdٛK]Ў?X>1?fy<ǜ/^! l[1{>;=dKK%$!|9ʐ+q M P ;XHyeFOW{JH!,lH?'6褋u" {/6opW;r瓹iՀm/3m^3j`W2Fp,l'J 7/2%Y564_ե;ʏ;S'?CdƴjE4?Nf\M30 GDC_6ઈ"_|k4F*Wwb xi1_"^]?7 4tKc{~EӿG絠gYJ3:}B^&as+"MBٱov'(Fթ$FAoJ"OeD֭D5EF9KY,*<$}bF]!գD sVrzQ8^gX  jƅ/$þvjr.bٗsr][ok]HCO7w;|Cf|\ &lܸI8W":M18;VŔ~E"h&, obn ~\s&כYgشz {/fcehufA4q.^Y`8ņU?q0 åF _+guh"O;`$I"%SXifQ)F4 2*+~O$}gE ElFwKLpYQվfvr.xtu٣?ٛY1|Z š8d[)37 Y95JKJTy[5-2AD~'.\PfR Ϻmyra9fČڝ3fhr,{_cO80 *[ {gLVP$Dϧoo -%dvΟ/g(:.ol@G3y+9zM\#z.?J?ZHToصwCuLw0ظs.at̾5pF%J)2Vk'L@3 &P;'l>޻o}7dߛ:fkPNŌHkd͙lJ4:)eٹ 7Ҋ|tY85VMhwNωyLpq(MFg@SV 2  ]CXZF* ێQ''+M.tó~vڿsʱVLfW_q;Kx&w֞8HmmL!t'|+@L#|"\Wzٿh{?C'b*{/۫|d1?F5,|QaCdo[x,7'j1rVs| -M=Q`$ݦ| >{9#o?\@Iy 凿1{grD#Ȑ YDɠX#+Gxi߂3m۶傱P>~sҮp%W1#k%,^es{#XX?R܍)˿`Y> 8AhA^5d,q5йܲ'= l V\ʯgqT].fkv\)߂~(~xzx8b ŧS}"YEE(jY5XQaBވ߇ցV$ j! [MjΧeԯ%H,p=N8Yb{gHA4'WL.#(-h=-K$ٰ-0ߧ ׸ bL 㤯.h(à!y7֣*. { ߏㅡCZr +yiuX/:vA5%ɿe٫;uqQ!bI".xҩgC܅66sNs4zJ/:w!-8Vuʞs1?|[og[[2MNSX%_#H=G-n. EqU._~:&P#ܝdeHg$@U_7RЋXcG=Li+xhlk0AYq?n#r8i#[leߴؿmң{OQ`N8wk`dޗVj:fПe_$;Mm HR&O>(Zk#븡PY%J%Lނ#S] o1Gn}^xc@W@-̅{i/5R ҳ3RO-n%00gVLƤQ$6k`8h0 M 9SD`&ͽ/39N\4InZ:Gl4wTnwtd()0G^AF֬A'hq9PkӕX MsEV+\tx̝<ɷeZi艝h(ʱS uwm3$mޓ̢|`d2J% "@{' R  T(B_q1O{$Xΐ!آh&@g!C-'ְ3]<-v '2q09/r,O_[?K_$ Ģk<1+#F&&4/[6r2r:)"oNcLC31-d75YhÉpFP:3u[& Ww8Hk yUzGVNw[<",; e /*E#'۫ĻHTڴ3?ɉ#hvBhȾl§1\8Gahnݜ?w yQ t.uZ䐕#R<% l hz/AEs_{;U֦s#]m5 @pac 4A`ȺD/XƏ/ǷƂ|OcQ? "ּC: QR TȘHshZ@L7m3BLWe$ޟ!g/s|4֞lb$<ҎPMەZ􃥠_ꄈ.?eƛDvAϘx $;roLB4Ul]﯏NQ+(#z PU6r7|(E&IS8;I0e21WITdn;Pߣ8PūyO?&O7&@P`VѪBiCSZg]zCW@u֠U[PӢGkWO[:uw%he%TRd&DC֭P-~(~*?4hKn6" 1}o;4|XG+)ߓs{ ";"s5P2%] lbAbnF{ ^~:PѿY(Y7DZAc |n 605&MGE+KƊULh@@K@x+mDVČqD]֦dFוgFO }Տ_ ԕ *QGUuy::.d#mC:0gS03Ik@&QyQ͊3Y8gb Sh̔7ւ6G/GF)Gcţv[m8i@J1l5[oGrj0_%SLa3xC~WGw>ƪ9c w$p^µ^yhh|_KES2tOcc{2Kz4}Y.Ϩ2Tn|e9[u,:/UQ)ǵ,jЉ6؈F1"rɌkЭE{1Y:9 E7qܑ/=CBsfcQ &r-Y@Py3=fxMXz=q 6^UiC)vz)9T%mQ=CAC zA`(M~_Cn]8e+rBLf3&HJ ߡCKi>eMU?K{Ȑ0ag^<V;RC_r1@caxxq<*!!!!!!Qe0|~u⹖+!!!!a=?XBBBBBBaw?gXSOx $GVBBBBBBgg+吐HU ɑRHDxr^#(zM\]/} /0dzaZK"D ڗDYXL\q"|⽿ǭʈQҾUbB/6dk ~;ή6qT{1ycag.>͊ŜJ;Nύ%pDkT27G=:y~Z 1c&I+iQ?"Ɠrj'8YႶd.S!-RѝKYDGt} <g'~+<!kIs Eex=8_CE TN6‹ail8H#qwE,+%ӕ_:s Y0r 8D>lԕi!ܧ?P aCi^.2}N+ޗ(ٟMF4tNQdG"fUV[hN/g'2@+~[#~Ʒ}PsxPG!r=5qQrD\qcjfLpNwgVuW3ʏ=wP?P3.4~iujr?  =8ZK6nHksp1L^gdY/&tnL|+3z=ϭD.\ђAk Ҳwi=s8:/3VOcAG1¦*{~35;^!=g5kndҟ(xrIHT#yGseUQ<)?,I.fIljKT d.۪>#yۏ.5 ܱ%̉ܶ%ǖ]LJcmtUï?,=pٺOMYd, u:lیH;uw~FVxMX" 6<ꨤ.ٗ9^nqH-o3M&fk tⱤO=@!{f$Y0 !~7u^Ro|;.-L޸ɨ H$VN] b1ɵmS|n-)7[w%4;?̰(D:%So."% <'2t[NY@rBEWlA)uiԛ`')8׋DMXXj)6Sջ1͵ea9fČڝ3fhn'`e[ws!)ѧ3#'sذ'!d4W;k嬿9-5߬#*ň A_FuOUŔ('dilɡKCH=B|U{Gp-I?o3Ns!/>)obn ~\s&כr_ļ3|7^Nbg{3(0_cO80 A-^?IH<s3vmݐŦd],˹z5kOul}4̂I+ *4yxt?Zғk] @Q:_\Jc7u._r5 H ͼdPkUv9:,}߱qX0DZO~? iљԹ5, Du:.XCXZF* ێQ''+M=%MJ;H¬^q}=qDD/d?8_T!6, 9rVO{q;X1qBp̥%84bN$CfrOķg0veϵT\g/?M\F0ĉ-~AS-[| 9{2gqgKVG[5} &8B[@:={зg7r{ w'\J0N*QSȊEXl=\ L".#(,ͮeoQFw|&=rI5a+[0; /a_YqA0f;Ѣ  Lf,nZ8aV2R xS{s9 l[$򮫟 IDAT7km NE8;qVXRbE]U[?T̹9h.l^p˴|<65 ,RNFv]k'ܝɏ&biԠS2@E!E'*o[ֆ8|&l'~..4@Ԉm~z-R.q>}UD_#\OHCꆦIwۨMԂUSWcQwtrGY*?[//U@cWK Mˣr> lɭ' 62` IݛP?$So3l5x1|ko1GnDn‘^c;5 gkbEނ\DN1PoT&#rPG-ȿoٜsMr{a 89\̊ܘ4Fu{ t r}&)!g䠹eF9lj67iu]W'20ͭ2A@P6OΏr?(iP (hU,!s%՗#s5Zΰ8j Z]5"/:ݶve%ka2[T"2S?r4ۭRFUG r2wVs$ߪ*So軌޶?cu6KʗeI#ӕ+^MGҬYܼ94WǾGz "\/בوɏZd2N2r\L>}Ud,7޾nȭCȺ[/Hv<ӈG1]I_5nVl\\댣k^oHH-1zK$$c}^OFA@f+Z>'B_p YDU0(joJ@,1E Ku"9{pZ(JN=?c2?T\rPz^=g zUeZιh r/sǂ֝[\ cgts+Aj-t[¥iCwBs%J0rRS.Յػ \JNxݘ{Ũ}hVxD;u WSh3ݞ$@spVXHBn| " NpH)K]$E;h4ת':⪷?n㾠D~1,3߯lpmLS<>v,+V1}.CQp&M`.Qh\QAQ31_ؽjkkNgY7.k1|UsIp;k?bl,iZyӹѫ oް84TpH_#3 8u,;w0i D3*v944 Zh_i2wꎓr]OT˂dgȣkrz ERھ/B#E/3卵9ls4}mgѲG' 3帖E :8FD].tJv8qsDc2JՂz<`hI24SRy3i\+U\y-/w9NP6% !'ur(ȓbȐ{]\?)q~_Cnݺ'$Di 4y]2}$$$ߡCKi>efW4U,!CZW zq`Z0Hxר"@_r0ƒDq\xq<*!!!!!!!!!!!!Q͑Y *E_#+!!!!!$9iFVBBBBBBBBBBBBJ!9U ɑObKyEkeI JHT8 {|+y0-%Ro~<kd5NuY4N*bn^d҉K+y 6nLmь ؉zN3L"qˋ9qy EwK֨do80= :y~Z 1c&I+iQ?"Ɠrj'8YႶd.SKҋyN%a,#>~gG1d*Gtg\B5FaF8_CE TN6‹ailh:+H>].gy%$$*%` g` Me߂|} ȩ5c>dιﰷ?dz_ #E$ugmX;b~g`lH֔D|{J̍~`͚5|h2mgOQϿ!3l>.η|97i_0gg/Or ߜR.\E[OͲںntD~E"h&,^e)Rݘk3lZ12:3lcs<!q &Rfo|rRk[#7Wn\ .&(sZ$kYGTAM 늟.%$$ Z M^DAn23'(l.1ynt `e[ws!)ѧ3#'s=v3ӌQQp m­KӜq ~`\2AK|-eǓUO Fr -k#96͢軼Ag9oUV?KH|hf$j{ ꫍;>vVcGA fv!M:c!U%J)2>x஌Jg4Vsf9^C=twEt#k"K߀ƪۿ ߣ<}b&p,\љP|E1$nEۧJoȰ;d[ G.vOR{ϵ̗ e3Sz?"Rס1. &8^g 5X֗a!GU͉W|AQfYcn`Hb˗=j#|g۠ڸ,Xn>a-FMI(suLl̙r.k4eJ巔D߬! Bf[Zv @H- \?r%W_ <3ڤw VoĢ739W`:Sw`*6WX]o;КnXُԶmK:4Sy'<[AYՁ-K &rfOhK%$eP@ ч٪ǿ>edSu| ʺNWlV>ǚL)] &4oR6&.޼(*+GRPE>2h;\dL W`g6Qs{ ";H\}EȤň= KY{83[Ts#|&=rI5a+[0; /aqA0f?'}uAEAp>7W(k֡6 7.tϜƮ+1b:ӷ2@:Md t_Y ']u/ZCȜӡu`bI".xҩgC܅66DWcQwtrGY*Aֆ8|&l'~..VKHZ@LG)鷔s15+ Pzѹ{iQIf y$4Guޝm}6NK-K%$j6s4&&i Ԍc%G{D~Bpl0M|7 +}EPTd-n?:U0L?fFVP:3u[& Ww8ȒH{n U\N(!W9b27&"t}^A\IhJș"B09h}Qqb Mov{FՉ 8bhm(wԞ X̍3V_h|>k9O TN⨽#B.OU~x~mK^mihbn6hjTw!6So軌޶?cu6KYhUēCPڠ@Vc1 gC=UG'RFUW_O5 -*Yfn7K31-s'.ɓ|TC4a'2{9!8cRO5mMp"i< 0c3|/ƕ\ [z6}Ziq:vEx~cj{WF6 e ,fƜ| G_gbh Zn^J<EP2}[^;E \kXŔCMZ`cvICLLu{x;^Va&79q-"^P&/i(D QX'[w7O.DB{…J_0S?]@g\\@@̈[BĘA;eR癮4ZWLEMY9"C`ͦ@?;/z3zFHhw Lw _PxX{Ry:h u_ٻ(z;I( Ih _t(~EؐbE *bAQ)"J.z @BH/vm$@@ӓy=>Or{3;;w;ٛ|4=+N B5Ѩ%(669Z@& R}t}Ȅ"dHACo gl 1-Lafy'u#Ι@Wt _Ù4H8Op68(ߝ$aMW{_zTBZ6N><>ϒJnwjz0XЈM`(2~3U3Ƽݝp}:1x6B 8mb~z _~g0 Cz̸Υ=Nt6=Ŀjԅ]ؑ`V)Jؑ}$jΫjZFZuFbʕTA+oAn=~G*gk Zն펎nG~ իo۫5zHD Y@qrzK`[QAAA   P@VAAAU= BuMCB}SpAE   d=1)Ǟ,ma#YA0'Xdu! IDATz8珚N.<7O9{bέ|oo%~ ^.MG҆%{t cIT*-!ٟASյbN#?|;=±/R|m+^jUE*ۡ$斾'cGEӃ51c k/@uqz~}g^xow$PXS9?ѣ}hF~1iL_4z)Nc|+m?^ߔQF3yM`0m:*G1&[Z|;eiq !P/iz{v*%9cַD6膔L8()2ʈ6Ğv*jt2*mٻy{_-L]\ѐ>¹F5+4M8 Smgۼ[3˩ԛ"y ":0e;ӕb<~ __y %:vpcffxIm\ykw7&pdjk@VፘuqC6?]12*Nd̦DPUϲ_"^6@N$cv qQ}܅8'ZT>*|g;'WK d+/rªMXŏ캬GƍC_B};8׍G p5y6$6 'ȍ/ϯ&>NЁ&e_<1]dd ;7pJ6FH%+r};F{vIJ6b) 7} jk f@gәGsg8woK^dAp-gd77dU\`u_J(Lr-ҙb.nKkR t4 m3!_}krB:s0/N]4kqj_k \x| I+4Bř}p' UX3l~yia\{Ñl͟|*9 /aBxo-5K+%˂16±ݐ+[N/5: F;0OhIv4nߑGm#m%p:TR-ڬ9w[}]>\mY^#cOdKY-P2r_rS}>ױbwfQN#f"z<tN[·k.bM.9)8Vz-xt$ЪXF®A6ϩt|m>cVk|7}g͘6>/Y’O_Y*1梅,z'-6os6.xK}Gg>D$w(SmǗs4.zzpx̊kߖGB&vw&=ˇ3v'?l̉V~=B[iE.?5L%brݤL wװJX%)mڞmIDI=*>ٓµ+Hn2p M"qþ w@=JO󄴌UGkQr4}{!/!n*hA[P+h`0H_Tnoxp6b0p>[?_+XŖbqdOؖ?t t&@r%11@FW6׮662ogױK\:}tCܣ=CT8?zۂ$[sh{OKR$]=I. nHvt4zhbg)۽aKڇ->H 94#gY«s$GW> ep[r*vT>Q􎰿~ź1O0Or3sir?FdV'+L,_OtL&_e %UCgLdl.su>}ZCYqi?ǽ"{7%P6"$H5/sIN8;ס6YO4Z?Knu # V%YsO.ʧ@+qquBQxG*Ick^6BBku^`(כKdw%H;yeO=3ȿ-07W*R]#/2yMGK_d%;/vGujЭ),7oeOqhwo[R8*!眉- ڧ 1h?.zRRfFۆ; CIҠPj F0g.x{y Bu2Ͱ6-aο<#+ћm+glʵE2N է9A"dHACo gl 1-Laf㈧8 g|<&G茓]e=؆5|g >۬$\(ߝwp\seJdC=+9sWdݍ@'il )(νe~Vuhl45t6ntwA%/(T%`ë\N~p9脗*t"i}džCu'btΕI|2G;E2Rec`hy(bkV c?B7%嗹r!sQ.L|axxJ>fs,]qM4."s-:a%AJҤќynKnbJ_׹?,?peJ$1s֎c84Kߎ4:LYK*j Bu[y0g9A,.9( (lEn5rO|s2{x}fI0g7kB ZHrwpTgƠ7>7iܦj@BP(J*Yr s8C_K~vZF&f!{}VORUdR Ȇ| ,cvq|0$-$.;+T~mc}re Nb\g|7LiŸyׇ)ɱ4Z{<aGIfW 6޼ԕ] I\*[RǷَōC65q d$m @G% -/?f3}nD1!/sG\ݤg@IH~,Ё!J@R⢂U1syg۟[k3FqKz2 d$kbRϐˍB Ɏit{+==~1j9ڏ (i D4S{ʍAU\U%61c<=~?#e+a-j *i; Ζ&Tc8^P;.;L KI%Lh/l9mE~h^݅{mNje\ɬQfNgkY'ȇf3`P6chfq>- oO|eɏvch},}u"[] ( H`-ɝ&[fO*DR(qŃÃQCV)Jؑ}$>!TVѫVQXr@ Xm-zzA7?y{FΈLSqLa:ode5'C&g;L]אުydv}U+t=;Ե{Umgݎ|W=r ~"JɬGzto=`-uIA.\#?#BӚIZO$Pxh҈5Jh1/jTAD + Pm4G.6W_Qʼ8[1l9+vyfldeͯ,B]UsF  C] ]uli2s(. dկ'hAAjł   B"YAAV<y`^K8ƾGQ9Y]~A:ԋŎ.MX&a.ZԲSW졳3Xҙέ?D} yZp3?CjM Ճt~z [/aRy6M @x <6IGR1p06&vm> 4tbekxkױo M0[pM߭SrA hԫPJBK`[?(:֢QyBˤmʉ^ T 5 V^eȺl((VŋCZ2=a`]L"[Jdxk&zw/a΁ta5XN?0眎(}'?M04# g4@#qK&!NpW ~[:rzhkGw#QXJ=&Qk>[ֳYox+(S+ @VፘuqC6?]12Ȳ˗ϲ_"^6@N$cv qQ}܅8u WÜex`KĔh9({OկN @K{[{d3g8qٗ] ׶ʡJ|HNh{(0pQc!(=iIvZFbs-n_7NxlGGwܵ **Pys3+hV6IZM:I}nVjXݦJ *g9gu+o?nP#ԛYIʔN]*gȮ8n}51O|gǓ=z=ts#e%LRZ0#o=@C#9cxf\ѵ:}m $8m=c}nG$. ۙ~ 1.s?jԨAj+ds陕tQQxE<8Kf|L^(˓uy茉;en[ۺxS 8\H9"Y5P+?)޴K9ȉp.gQfhuK+h\~k/h$Z$*PSI6,11W2T^ڷΜ ?3 ,̔>S$D\ĺ8cg+IkeZs`1J+.Ջ@VRb.<^.q|w+la9~K+ 2&vo9 ,{C{n҇.5lrΙhR Ni_}qj7 *}'!)UH*`F8I6#p! p<wzRxʕTnAR݄2cD 'zTSf##茓F䁧 IDAT]eLʶؒ._ 0:Tā}uJdB? +N[1.PlܼjK>J^PpWK|7Wɇ4}[ *Tr8SU@i$I(̦CW7/`hy(bow[Z_:))/̕ ra dS1g#`|=nssM4."s-:a%AJҤќynKFWK\&{v n))&LE]2A2$\>`|SENf)qr̀)C_K1CSB}ٿ'bpu'ۏ[nk<͎c. w#]cv 7~H*jTِO^aHKW-&-+BUKu)]sZ1v]+0r:iE5o+g}X@ugZ$bKc{ÚsIĸ`_WS8te? 5Bs'֏ vx#848&]<bNrPs*}xk3FqKz2 d$kbRϐˍv̎it{+==~1j9ڏ ( +)Lw)7MۮWqUYH_ؠH*djN薭?G!5Cظq(!x}<{=x? \l@߱u׬GtcwOLo=I9F c9|&8٨ :7h4^)@' mem#?ܿd>X O9k+ fi# P5b/GѦbZ;ڏ̈́HW$Y[Jja )Pg)X:CEc0ζ?y+oo+Obg>j՝KmU^:c䗼׶> ǨcWKח7&yZeQJJ^4to %>V)@]z0:Pf$}'ijM5J -Z+oAn=~(A=;Ե{Umgݎ|W߶Wkȑ&@*/]K[SrX(.߲\'   dAAAZE   B"YAAAV   P@V,0o||}XX7à BMa̷ST/eyY=+f]AE ҄{'mP `O`:5/J ES4>{)6ߕnb`PsKߓӣ"Xf옱ep{Sֺ8Gcb2 TvaMIViKױϽ1_k-Q`T~J=_<࿠qc 2!CӿG;;ץ)e6oʰ4 wEFwW>|i2ƍ9P|9v(ߵ<· oL*.B}exǁt`@J%##?}ծkhg7!8FlVן%M/TJLjۂ {XkׂK'wcffx_C5a7km['Usbv}D.~옻wQFFKxid|9)pEz]Ngxϕ\M'8-_zCή/Uۃ+ҧϾa ߘEP4 ;ٰf-kΡlWZ ľ2jaˢ'[*$+BAY|R\6g;H)ꓰhHPJ 6+G9U kf9Z渕|ݻ;_5š O`;(-q[;FB]U?Kʛ^uwroĬk銎ٞ8A9ٛx!_fT0uhp"ӷgMG܅8z-]lz~8~L\-2}~^%9stPf./]Βg;6]d\rFN]EncSU4_OU4S K2ig8x9pgG.Jja-}Jʕ6 c˻  C{q.=tw=nDde32ᵩ=2+%++q<%OaڻIoqr_ NZGʼnٔڽ5.ă]q\dvFT2.ozJԿ5#C8I$%^. ԿXQi-A,cfB~78t`_.A{:#?MxZ酊O#9ÞЎh[K,vVϱp'|2wƥ7{Үx?{ n{9ŋ0/Zf9m9heM❅O3Kz-/ywیinCo%,2P $ )swpD`#:xRj^axgƲyF6nYe-m+QoFۦWYh1~[J%ݹV(%tqYMHlʴl7r=XusH6=/ϗoaOAĆ!⎱Kδs*$ۡA9޵9wQwj[JQY="y3L:{ӅH4bۚfW3=+,]FPYhdoأ_!ʜ tv(͇9J/cbGYt1mFpDLn^Ґ)VI$%MS55dvoaoB1΍#0z'ȭvJKxcTc4=PlR3Jm b`N=)rQ!_ ڗ =VUu9&Ny=ݐ swm%PzЩkgH-I0My5$ K{7BaBB. j/WM BLU֬D\ĺ8cg+Ike1֟3PE +yk?B8 Oog?)Td*I2gb/L87܏-}R8*!眉- ڧ 1h?.zRRf$-$3-cU}mݨ#E4Vm|831=IZ6`%Ggԍ:g. G/|4=r_h4]),,7I ƪ1_7PLy$%(mhљNrذ/nI܋?e&·"]B?`i& u7]}gP j;PWλ%ʅ/> O sy ͅԡ7Ӹ d) cr*IFs-9*}]DCsz.\Ew>mׯ3M\%, )4kqt"E\Qp#SЭ{N_mtNf)qr̀)C_K⭻ɩl~c:A.8PH/ЪeRR)dC>ys$'\\@1`<ȶYo3$3BW~~Uo${hSQ9ŘeB>>Ȇ,N NMhVQ'w>T+ cin>xN/1fÎ b%ANG?nzUD5^ʉq详pdM/T:O$2GphpMxĜ@epQ$Ӡ\Hs`FԵt \8[S%D=V2l1igHFM;fG4: w螞V  J[iɃ&m׫,/^Klc$ y2{~FR5'tVZhB\7 a2KeB$^<8<ʟ䞑=8] ٌ/Gߎ6M(y~l&D"INt6=Ŀjԅ]ؑ`*󼋊 #?͛Ʌl>QײrIM`(2~3U3Ƽݝyxb0Z :0D HJ\Tj?s.lr-5Re2^ێ [2pJ]%*_,-T_y UvE() zUД.ֿ5,LZuW*aGKttM$;ijM5+ ̉2F|sDQ\zw|OCn=~G*gk> {Vҷ;:>&Wm#MTJf5ť˭)h,]LoYGAAA:D   BR矑S2oP?OAD [NnyFrʕ5ԴAAA*Z,   *" $/tmNj5`};XA3^'#0=諻@Dª;+ 3 * Qd-^VڵE3okVjY7U.) 3PQ|?3{yy9-]Aa$A/o\˱g?dKZG`8b-pm: erVOa&eZ/qeqk9saZdܵhd {  ǯ^Gd%7Fw $s`a[?mh$0 di"] ??w'΀\DP->~Q&Xe0(T=}ՏkWkK|{oG_VB~]64fVF q{&fhĒE[ȩ/m ox~)7#Y\6O+9r5FyhLͰ O^҆&gwxί,l&!~\q+xgK!?32ǀ< (ԣթΪ'i'Xo9w >+9pIϙ.€𸟉I<>MetH-O=W14^ nְnķ5Cl%A[d~L؞'ݔdx^EgϪllI5xFbS1jb'Ó]2w6Vx^Jז4 :^ oYÖĵ+/~s :ta_( s<7 _:aX⏰nUO:(_t1*,擗نo[KLs]գJPė^wHޕVWzI_u703YjDpfD'} 20[C,uZ7^ @pCH.tJ W5[IFЭZ|:fr,oaR *.ɔ/0fLgƧoУd->&}"ڿY399y̮~<PӳO{Qdnx{i cl_^Pqة I ~4>:ȸtS h$/ٝW$lgOu(95cZeKf1S jĀ ,:Hd#5c^ZIBB&I]]MG5roZ+Ջ=d5%Df:efFȆRSƸX^qɒR$DClA=@jPAbCaR9VZ? 'pd9.g4c\qs81:|T ~%' 36ZɗLDea!-.eԈ.+Bbå7ZW\ K0V1Q{ʪU8BZFBBddcN]O6T:/FvʦNuOU[Od%J{NJZC IDATqlB?_BZX'ڸ{e*miAWws3.IӔ9w۶,hԑ/wOZK9)X^TW|Y<ddY^00[MwS#+ȵh>½0K,  hT 1Erýini6:]SLaLՐ,XJ0}180*)myGi>~ #\Id`Z&d#ۯ-!zWz)IV' 4I7\AD=D{Ӥ 7;uk?cY.32-N ~mA#H-20ϕ恽M{ Z#ps'gzMb䣓FbE ڍ;'(6b^{=buŕ9-#›S`[j:gdۗoF4!V$\?&3Y|QI?KEyzΠ4җ k}5/IT붒L=l]wRd)8Ir MU$svK6,fK*l5u'f/{\Q{+]=pƈg?osTh2TcdoG)7&8 novH5եm?Iۜ HJjgI ?4YIf:|mQx8VcqwoFGNmV/*,GrB'=={ lʒDv1MuDo3%i7Ϧa-"y]$%*X?6mdj-7`- q6Ca<^z{jv`&ۻw+V,K\_A . w7Y1efZcQM[C~RWpW|Ii| ϙDŽ,H( ^e?fHy^|Pa/ͼ^`GMeX6EB-5 S.~ox=FnW}=dH'JK-b>j]^ڵ TTmByh@ @ hH@V @   @ ^{n&7VnզpcLx O0Ն.x}(A<<,#7}ڷVN-xﮣzlt-uV/ FZlpfZ rע͜8wHd@n󣿍 }4N^v(D#}I%e0|6Z@x3Sc|t8M=̨#ʎo_^ca͠UX['%a_ǯɎ&lfprɥ{ڊi>>N*e7{6rdھ@ Of5>WզТ3F-U|>goruԥx31zaƬ {+ݼzY=9xak]^ИqaZdܵhd { =Jj`SP2+~`~*?;?qؒtQdz8w|~ +1c!ߔOʃףcXضM%L8V.es;dOwպTDI5qadt/^-M`@ànzص+we9u-:Nf2(ܾw ?x?nl)sF&ГGM [Ăglv` ށDG%=g "BS vfSn~&oH'41!<}'_ưP{E2YeWQW(Z4<į;B֒;sTɡ<},+nepI'>F/DfgbGv׮RYF&xfɅ6Jv+`+eS=8c?f;h|Q7{3I4&%ީ)ػ _P749 ͧn*+l@sg%2xAY.MeQ<6,6|ZbڞB:/d]iu%?2[}sbZTkS[yT;a<֮vz*ZlH@ kbZ1۽ܪFNr]x.f+i#Xg,(IOp mOQɀȯ+lIsd]XB[q\~]N+>@hf~[+\_gF u'8=m-Iv đ˻ch+g6&ಬ"9?}#`tf|=Jͅ ؾxi_f̜f+ηMqM]t}Cf)S;Hx;Ys?r:ponNƦٺ9v^Ŭ5IUR!:̙;X5ʗs5]OLd$Q!֨ki1'"˫Lw+,N^CG3vk'Nٺr,ȒI?i|{**CKZ-s)۲st0aM57m:8x&&9Kp`V60Ys8l1 *'*+DB*tF+%g:?ܛV6V`=T ɂ+_Dķ|&F YS*T4N8I&L2UK*Y).,7% WuoO&A.cG^P123!`}\*jaJ ;Nq FlmPQxȈ>($!kՍ?&|[*`Hgo]ܤ|tHlrQQtDԆVkgC|;eDx3vjlKM /_ϱc_{H*5 +2*ڶhI_R3*Wdyzh;[ ?O`‚*9~,Me)$d&޿\lkSH8N߅~4M \KlR{׌}SH*-Xd`=Ht d뺓ʀ%Mqq܅4r MU$svK6,fܒVYw `Jܡ뫛B)̦-c K;&X 80M\PG n-9K?w $.<ϒ"d8bqg`S}Zz-.%I5"]nѱlh+`p ݖ?$e_`?"+iL-G]jL 68L{p [g1Hv8rjbxQaD>$吋Dz8ce[XYHNB;F顎m&$ٔ~זG. Pw,VG62աk>Vc*$7^Ӈx9e0l#ɶȥٻOMI:cjE+cWb1%5݈s\޹ã<_ d<ړȟ3 /YPy<$ 5`XŻ& 697jð^= 칛yo&?ʴmU+~ųg)W採q& (W>kCj' T{jİ2;,NC%EE ۛ+Rkc~Xr$v&KEK<NR;+]v(%UA PC[}\_IK]r%ЛBCV;Ai#4(,YrCC£]_v:Ī&`%q_8YG5zuq;F߿7?U7ٻ Di`ѲeWyGz @6`>*6SՇWY}Xjˎ 4b@ na=y0& PyDa^푚[ﱑt `JbZ@@ dSrڻ#1 (;w& z2f5 﨑i@ ψ@V 9khH6 |c@p+idsl@ @̑@ ABƍƤ8ꏂƯ#3ʺ7vΐܘt6@ h`X6~3Z9%뙜lKc[߭._ nsEj=iZ3]Z6s)u  [wdF+_Zd$x먂;B>ȴ|rd=#/$ B Houbgu$T1ɫTZ}y,jkӾװ#3jZfͭ@ \"6})[4xw=14厬.̜ЋyWy}E&g(_`^a4 zb},7E1]Fyz:JS2ojc8:]g7*/ ~ +1c!ߔOʃףcXض~;fe<~%k rSC29QHMv1,>ǰ&{2]m'X>$.O #{ji,Euʃܽ,gU^uw4ChfWk|3el-)!c_d@ Tpr|r+ziuy&_~-1qlETTw BLYȋ$0 dtFޥ MboD`aBH,zkۺCJf5<\ ?x?nl)sF&ГGcH7װ`Q$?c5MV $=҇pE>.QڅwR3Bu31C:6ǧ S=4+-c׾2R׽Bע41f!~59l)Ա=O)2Yx(֋h]L 8ѻ$ӤE4 w1U'i[9*M@Pohۧ'+ؕn$\Ko3{Kz]_H['N)8war|]ͱ<+^e3li,CR5`7x`+e>bO~L)ZW7roFڿ>4]p"iOF$QU5oK^Ķf$\2bD_Btr+J;ݑRE2yl4^77b.6V)3{Ϝ(wY ׮RYF&xЁ@uU'qSC7*/=zS D>?L8ݖںIe1.F=E| \>71ga*,Kә(Ygc$Ğ;p'͍ *\.^j4[-Y!:RR;9ڗsl]p% gLE]Z+1)U..zcٙv 2svIӄޥ,Ḫsk-Ụl#&?-}Vʒ\\}lfXy$ pgKr)"@6bBV#!7C:t(=5:=:AЧcu'q -;2ii ZՋ`g >td<V '{"j?bzE`:ȸtc-okORVJ]?~kvhY֡)-wr:~ڃ+Rų|`cR!" ,I:{]|TeMnm3Eઆw:1 3=xɼZIBB&I]]MG+Fq,#9G)4Z<nߗVU.g_ld+,fTꪅId%Ԃ'uO!uBKrɭCe^],PWaԄF;m#΢c׾7r\AE6 qӨ Nj5Ӆm leii $|f/4UFTgL׮"%͕HH2soIDq<+IV5VKd*$LS c ;|s$ִRVV =T ɂ r)GS!|cﮛ{%N2LUcmެF*pUdjga n.NMv޾PRK[%>, @'E n{>UP7*/}AjQx0,YfOx[8)Th9+OsTo |tHlrQQtDԆVkgC|;eDx3vjlKM v+_ϱcE6g,G?Z# 'bz=“ 5kNk% 93795: ̬LLǿe4 9Z@ KyV͙W8\kADh5;,fN<(%ʐ\pq&! M ]rhʉ=yЉ!8}+Ǟ'qiӖ%Ht d뺓ʀ%Mqq܅J2H{(7y g\tnI+,;dm%PJ*jl*RJ:doG)7&8hߨ0e%h 4a-|nYkn t~xP&jL Yoo2v Jk3[Say-JF5kQ;>Y&>aj;e߇i"Y8u.G(ƑS۸cƋ '')\$:IO{%;~t +$cfbKnM)זG. Pw,VG62vve_( aњ(U\N$\^_M|w`WY Q doӇ.hJyx65vo2v@ prƟYhbUPZx34wSN0+|j<#&ߪ/ ՎȻr!/t7;%ZcTR£[ZZ&2BD C ˧L )J^8Z7Od]7 /yc-`hB[<1jړZ䊳ϕƐIF$9/&!7Vٜ}n|Ѿg:U{d; +ePR5>k_Y>t%_ .4tn5 ־{ĵY̏n\yС,Yr~pf={?Cޠ7ڂ~!C:QZgXlG}Gz @6UFTUVVˎ 4bvGApvQYbnt `JbZ9j@ n-Q (|ڧ;O{{NS̻:BA@ϡrSƬFP5p4-X  [ou="0x+"F @ ^!Y@ @ +D +hHnLo(h:ؿ?9{3vB?~Q4)S ^b(li,w>uv5 49`uh w-j̉sׁDv[t(T 1XBVrgP(=O S0v%q–XhI͸NQ,W70d*;?U*-<֎ ^ ZiQk̙i{jg֦Cplr𕼛~&i=$\Bc$fKW%do.?@$@rW0 J  0\u$k}%S|{EnT^ y0-2Z4S=34DȌVTɜIŽl1_Qߨdd_9\y4[Fo#;FMFl#/kmpZ|ImbǾȵ\V&z%Y nC+R?JZCJ4yV pnA_I9^y n O^҆&I[ THʃ7{m!s0~;fe<~%k rSC29QXLr.]蕽[ 0*ݛmH>>nPE9#} r˿o;0 NF$?c5MV $=҇pE>..€𸟉I<>MetH-O=W14^ nVnd Jo11;ɑV"0.vDxUjp?@Id8C S`drsNdXɅŻZGF"n§%UtՎݔ@NN/<^ &b[p %oB{W}C*}+;<*.s7oc[m5w^酯tmyAǖĵ+/~s :tY1$؛mkX[nJYk B}%a)zi]ݘr= o=s)yrq9^GIe1,擗نo[KLs]]qJPė^pHޕVWC.WIO?'o[KL1<2gl 8\Ճz) zGq_^"׬!|&PU\ʗ[1>ʶb~+7_b\g75wHf)C?M"n)r)[q8J?Xb+Vn eϚɱk"=/0fLgƧoУd->~ u8f͝ܦYg|;ý99kbءBzcf# $USKM‡ kD'2g\cA(_!n vy?Ż33tY翤`J c|!{Oxd;GeF׽kX]Jntr5Qc9!Fk 9}-iVp sĕטo4@VNw*Xg@k%3=&H*z*)S.çE#\Ifń;>BQJLJ/rK}ev&',-k-=Xi%з(gѮ\XI@O#?έ!%O?"%g@o$=6|4 Ƀ^ЖhW8} ΫzɅٓ=}q1"0Oj]DR剜HS /{\.KU30JڄPWk \|0N@ @O>G @#oO>-1Җa, &_ &O$m2.?PjP[/[MUڒt֝8z(v?Џ 1智8+jFcьKj^;}WQϭT $B MJ (RU,*_@e]u ʪ*Ed%I !!=ͭ#BHr/@yInsΔ{>sΜyRIaCl `bLӒ8ԄfoP%X'gBn7w_S‹B^X/6xmV^mwwʽuRlO֡4L ز#wez|r1f9躬1iZ-J2R)܎IYӞ[=2y>Ҁ!' '-˥{W<0jd:VTS1&s'<&LMpQK)S:׍7 귴xz Lt~(+4 xQvS@h(((to~Tn1 `3`Lr,j9KRNpPʢS: ޚvi}u&RY>YB'/rP+WJڵ@VסSF<~΄jQcylu``Yѥbh˼?DhQݗO3=~V#Q~_?BM>CZGݙ9sY nsp9ALK=-BFŒ TF_k)VWW36m<2"ҩykb>f̬xoG <+>~PLaJE,J01qQ x(f*C*9(.,n6%?~h4.,0ɸ_&*\>NAd򫳄&-F Tq:ܺUhbQR1Z\CN ܬ\X~^k x<vH/ڳx밉=[AϽ}{2(uvfAOݱ喚ߧLkOG-=xK 28sQN?\˧mh"6YU9 /@ W%p{L0Z_ %+3=gXZ°LpMQ]AǠo^b4gDQ9>$Ն (% TlM<@@th=cͮ' $)VEQRu J)1_Dz̯bP,b'(`n_4o1|U@zsST8A%E$Z̷&FugEǴXCErkX"֧###C0r\D[dc${L` gwx;幜j#3w2:%\Gwb#shOܞac-tڛ4>eW:usv-:~\;lbZ7*_״]Y1< hu~0nǦ1WYŇ2ȟg!<1+Zry1'?Jj7Z(]4^|1eY@X dE=ȋ>cƐ8uO`jC;g1}HͩJ0ç?JނE?vO--j9;x00vqcT>QPV7LbȩCLٛޭ_,fn>{pQ(*Jc z5G.˯o֡RmZ*^ rUcTyS!#WMWTU{=e-h8Rkw2]4)MsԿ꧹{~;]><VCiZ9Y*[hTWMgB!8Xw|y6tnQB\rS!S^~t96 ,5@V!ۍ Ö́˝!͎t-B!BѬH +B!Y@Vn?/\;~(rt8r&Bx6a-M>#3~"'N`š׾{>p?'i1Lg̻yw88co]IOp;B!.Vqo@Gebj#eQU6# Lբys${%P1rUtGSGO GG~ۗQUz4L\6P m/GCT-HKbLTj~HǀPnڃgO3qNVV}u5w:/El(6nR-6,>_3MP\~y18D2:&F^|NbsΛFOܱKZ 9_f!f]H0i/Y`ȟ4Zf,vbNﮌ0bPm:㻒ܤWB㔟Z~ Hx:en$nm>@: '̓0:n(ᡣ[~ycۜbMlT9h˽61l>1J~oH*Mf ĄAپ?,=I]0/a(wJdQNWw1jqĔF/|Psq(}}arT69GGsxilH#avN& IDATҗ:] m:P*^ͳ~Nrbpy4A<3a)貶b] iQU!.j%.3mpĬ_|ȣ@񦛏m08KYg@*]G;8M>;R4w+rB} 7 Ҝ5wHHbᘫߒ_fR˸,_@Eͧ#0Lj֔Σ[ٍ3 G{` wd8ݮaA¶dk?,l-ړ\;ND&@l~}Wu3{A m6kxhDu?3|4+ECPw0ȼ˯;u߲DBVZq8'+@nɑ*Lhv@V|f\zfx6 /h1luA\wƗ >ͧY3\ӎXO0:#"md: hq={!Ƭ;\-n|0gVv{zԈJL&Nѹ73|q% G4otl=u$W/0Mv 77>?[E6@j-( }[Xٿ3WoX)TA!̝?]xέkjs?`kxy Yȇ?⨾ZXF`:T@܌7/ӯN[?^]KM'WIЁQW~-~R@V~Cx#t$gv-:2ELvZ^RC/jfȽUr(*8X[Jge%%yls \k'z r&Bԗ_ ?V^#Ԕ3?uߝ378QU|}:DqSł}D|Y(y%2ݜ_ٞ vnK'h 9&6ێT|G3g]Ww5N<5׍xC#XX^\OCTTLe|"f,-E+h22!a'qÎ8&@12<2cq!GbGgac{sޟ{dhQ,̂>|c-5͟ͿOמZ{\@6epBWw=3|Mp\GPހ3#[B4b4gDQ9>$vTaԫdRJ̕w%~{+~1I~D{"vQ}{1[k~Gpydjc.g$2g z+v9l=Ф,J*WQ|?勯֛ *)"Z|h-1u&愳;LɌMeV2jd|?6g1o]W\WʊT@3>UWy9?:̔CImoxI><ћY!3s/pZMS_W3a6ÈƜ^eQKo3f s_D F6sӇ"iFS0vKdZJ{x`5sfvPeۏ߁.I/>ǘpMW>Q|ŬG(-}RgnRw5 F$BL~}i T;Ҹw1REX\j:O+& "zP9+PU=O-|02rhܤ|MeQSLaѢ !)MsԿ꧹{~;]ƎVCi*d,ST\WN[tV+Z,B!%@V!B!D"B!BfEY!B!͊B!B! dEµ] 7P6=?L!.}}~OL}g3FY#_=ƝFQ?^,y7n !Y߀#zSGˮle7ds~#WEwazD XH:u9䨠xtױ}u^qfr璍,bhÌ~ <ⅧjaGZfWtF:r[<|v9=Dm ֬dqx QovsM+Vy @XSlbACXa1pݏ)U}CGTi2l&& aINyCS"pʿUc_# %%7z40 ۹2ޒח;B+ uӢ 9ӻ޷D? M;'ROTw_A\I̱#sW[ҙk:Lj߼vh}tdFњyt~6xf{I{8p'}"R(_O en~,8Sza8ԠUIͽɒW< Ԡ(vRw}6p*b$SL*{Xk֧Y(zO侻 ג>\;ND&@l~}Wu3th˔: h\c/:Ęuԍ/bl?V{{Z/_`P#dⴏkJ_͌{eDo\IexvU%'6&wK s"j/C3(^ ʒ ޽:6ͫD*oGeVs?cQW,`IrJ?&S{{̛?J| ΟS.<'`g4^}>x9,T˪h(ؔψù2s߬8V~Wk݆]Ѣո?EF)\;m>3ўC\n;I{KnS{`eBFΘGs_ea WTohL 2&]xiw{%43 ,K?]Y?sғcS4&_Օn_́^X?*~ @K*pSȱ_Zґ})>MZڰƛGxh1@"?u <F 9E;5,}Ok:;pO3̾Fbt1kuxU_H !Wel,c}n)^-YK9' ȵq¡'Р˜ԦQ¿RN>2؋037% _山̃hpAL%_P{SGn^ y:sY=9Oi|_r͘H-Il=ΰF'wN2iRP9s>Mh -t^Ä!jaۓ#zt gxL'*:KW_!t (7EWt-^KI!vfX QSm!2lֱq  }]f jV+œ<>tMl,Tk%C4?ODt͌ s_G37>mqk SCna:iV > ^vUW[ݝr|uq*JZSSU)w8QQq @c0gư]TmU-> y Mag>#Ӧ2j*dOُekπ0:7Y8n!_.KQc Iga~US1&s'\&L*7oj2 4ʨ>셂D #HR?lu^0e3L_e>˂v}OLW`CC^?@h(((luPc>^g k:syr\GoǰJwk]TLe|"MFNu,w+GPC#qohtk6aoc8KX Ҏ앇V&u_gؠt-62!a'qÎ XO:|;J))kٳx밉=[AϽ}{2(uvfAOݱ5=sŞͿOמZ{\@6epBw93|Kf8LJ{:&bS|PT2_NŁbΠHB\tztCAAԠ. Co栭|!ŷe};G>Ov"Z̘F|(j9''drbu6Qt*Y{Δ ņSL& :QDnsrl2m3[۝HG=f"T@El{?48gs-bq7(_|PNPI*(v|y |@g HLZSt7SD/YBxn]2'|=T뷵 lhJIՍC+/E L1F2vݜp})ةYt0Jj6b#cs!'{l>ϛ?q{{Хokoꋏm_9=yRq9yk޸.\mJ:V:;s Z߮KO:J?\Y4^?ޖFȽfd_5t<)Cے0Fb&raw?㯦G5mwf_dL fG[1hǎIe2;i5QnnL} G\̈́XC #{{ls{E!/q[Ϙ1$}5YL3j-~tLz9Ƅ2ȟg!<1+z7qɁ;_(Nv~xbz`P>(!%4cPZq{s_+ZNN?>~ yiܻXE@kvQi7&=VX7.n¿1|7B!*^t>>mSVKY H> 0Q:]Gwb:ϿZAҩ2N 3~=.7G؉޽`D(:]Y]/ޑ 33Ɣh1̘'*"?vm ѡ+LbŚdJ]VڛS_nW=":LNnvȦ܍NPtF|Biߵqٸl'UbghClx3IDATU-%sokSOůIBG| /!jSd 炇,yڇu}gO !B4$wJ$rAMsx|27bm>6] CqU~ݓƶ,࿔]_'߮ф4ZY "n@7'&1/W t^޴m_Їn ʜ5䣹t#\ͬ95/_Gpyto**yo`a:g̮f/;B[ h_1Y]mB!D j"_"#}(wKŻ}dg]iM}Kz'x|<{,,Iv Gϲg֦eiG1~6w;3JqarЁ(Ocww>Mk.vl͠:@m[V|2|[q~!EHN8J6]?.}Oe|c.|䱎_oXٿ3WoX)M)ZUV+/^n:?h(ؔψù2s߬8%P|DI>6 [LJd:'?B!쮐Y m>qfdٺ뜨]!r GjQC3_%4Kr1 e=wrm'o%33 <>Kn>;3ٲ9cF(vo<~@,Z[i =7Лt;3:h!~RCϙ\xe2q[}j I_-Jט6h4%h3sOuU(t 8篚huh5t)vZ/,/n-PIH9*_BvB!+$u{E-8VtURظ` 'a̝$|>ࣷ&$xX8n!_.KQc IgLJčqfO|}Q=g?*Ag@ۃFXSc:`b dD?X=ӭJU %Y^W6jȲk!q= ޘFAۘ0JҒ(R_%Eo] e82(_pC嫖wXK9u[E$OuU 4~]qgÎCㅖB& ZͭOV3*+VX 2eNB!bYt:=y;7~Bͣj 12Q)|KdVG=a/C[yOЗfsS8r9IAj2rF>9#T%s]>ձ7:ÿ_^M;1%u-5`q[~SX޿j,IB@hwyyj\_.oEQq8$Fl.o0.ji1%j$> Ͻav낋m4mt0 F E•f"yBqh7:+F,Obbͻ>')V6pܯ#43f_?#Z$جs=M8Woٲۃa#:bP,b'(`MTc(_t &"*CIŷrW|S|oA 8;FP"fˆm,x!Vw==69߽ʢ-(Ne_1VfWD fG[1hǎIDTIOaπFSƎxFk] }by_iD}t^s r_SB(kf=\Cu$O6&̉ 7ZTK'6?_WM-~FfNOs5wiN/x/(ßk*u`5sfvPeۏ߁.I/>ǘp E1cH:'j0z>$P)+BZ9NSG]T4Td6y?DUE!%]S33[L!C}w[ Dk6yr?JK]T[^~& VNjdsv-VY+BѸ=ȣ#l{\ !qtpA]ʷ\ʼnuŘWBєob=[.wBBZwԴ4 CGNS W붺ٳ峺X dB!h4ٻgϳ9.V(DwZ?Ok쬜<%B!Bơ.whQNIQ4gAe uNjʋR`OgjL:k=ʹA,2ZB!B+_YoĩNu d\hՀ`RSSp9Vs8 fό  !B!DsW=N9?-N. `ՃV$B!B武@j|X}G^R@nl]l΅K +B!-CXIͭg%VuVmV tB!B4ou5x*[u5ߵ nJ~OY!B!hy^ԣ\/;5EՃ3 i3#K +B!-Ùj@ZӠO뒫@L"lYj !B!DNl |+VMؙ VL\:p+B!B4oϚZekً}l`5VY!B!hުT U׺uKmlъ*WNVX `B!eޒZq\n=bͺT `B!BTWWzA,\Zy)J`+B!{jRSX!B!5-hJ*B!KZB!B!B!B!B!B!B!h ?:׹/IENDB`pspg-5.8.1/screenshots/pspg-4.3.0-green-search-111x34.png000066400000000000000000002605031452457446400224020ustar00rootroot00000000000000PNG  IHDRuLsBIT|dtEXtSoftwaregnome-screenshot>)tEXtCreation TimeP26.nora2021,06:17:51j IDATxgxJZI&wn\0{! !@ ';!Bh!`|0W Sm ƽwݪ+uUDDDDD$ص|54+@GHz#]mĭ!e,Uwi~}WqOKZD|iS[Y[}mL k b#VW-6$M""""""ҴzxS] j>r1HlA+ϵ `EDDDDD[m݃#[a \xِV+h,u|ī4Z  pݘFFkmu0#쯂X- dÇ88)%õ៣u3g2EDDDDD$zBqdw& f &2u fZ\`5{ ;gIںԏB 1P|8&Nlmu -0_ϑ-N~S"[`ƍcl<]Ckk͈j fk^,I=)56&= Mo ZAl1]X"""""")ݯAl]- ou h !#'9>HrAOՀ(%6(E{dj'2͌۹s7xΝ;hWDDDDDDR޲e_~[l =|lfczrqmTWКEMKlܫj#<;ߦ@ m[IRerv|חcP죦;rȖCXVh݈uyjvqqݹuUІ88 oW -Z7{a @9s/,,G?6q(-,,-.ΡVDDDD$J|kn^x1C5~EȆf냟2.1οضmTTTPYYo֫nlrrr|'"""""*B*ӶΘ02 qfK O{~?7ո\.NAAnwʫ|خLйϑQ&z2x^|Y/d@+|x>]nzѳm+"<+Cƪ:%(ZOKGէoӆfC gΜyiH#g?_d|9/D\(ƪ+€0`@B9|pF׼N-wTW mfu5WW:ؐ,˦TuKfN"dģ/zzKHl;KyzK{/a`xѐՍ!wcȱGƴ'K}W9VkWtohVD'V2e 999{dffRQQ@~~>߿E6řq-:u4qŏuEڵA||1gpnoA>~xlN;M&<2^-%dudy?᭱*32o.J+ WENnc32{t;72jCyT?vgrNu:m{lޜ*,zm7@CxWID׮]ˀx<uiӆ"-[dAݿ?ϏkޣGnθɻ׶zU#WwqרI) 6-˱\Y~y͹3m73Lׂj|5NdbqVޑf-fa |v5ih.tzWb+iuhBX ℶxOeᛯ2mEkj} gF؟=HፊS'_/⮜|Ռ/fޔuI.gԭE| _$[9+YB}WnO9+\`y&;7DJΩsG§\N t+7_6=3gN:qOi| h3\wv`gcSwYYC!ߦo2'E`XnWM~E䝽{Cu?͢mӝW_dɸڍc/,ŋU02p,%%?/]w_䛯9󮶼iN˭ʳ>=Caa!~`޼y37(] d Ƙ1cZ=Y'aWMSԷm=5OT寪'ul F%on\xiDv9Lbk^ٕV}6+p5DZs6r|fK+ؼ}pٵiYEiV/*q>9?=yl`r)h=.E]nՒΥmuU:<~U3_m> ՚ǞGcrkE|,.Mmy'"lbWUUqꩧ2x`fΜɒ%KSO3d??u] 6,!\f q;;;;ʼnvGGoȷb{rq)n G4-W]USA+0aBҥ"lgL(<v,.Z5Od5FfX&+Ȣ:ctN8;7z Wqΰm1‘b! ;Z< О|΂s1g|3y8F3/( s쵗3jw땮ȖƵܓN/JYq{ru6_L&۪{*sԹdx&>}:?|޹sgҥ@VD `Ѣu?.rZ1rL+9}˼?ybv&yPTE1QCFveu?v9f3P2iOO݈ > :2vT?y$7y>EG/{~JfUwrpǩӹ8y ؁8k< 2Dx>n~Mlі>_ >$r(ڊ.ʶU,+"ͬ!Buu5Շ|ˣ>Oyy9O<w}7 ;] dʑG2y,CFp'8D~Œ=S{N2=ֽ㻂.z 80鮾>hctR<n[>3dܸq7@UpU@5 ~ @5 m ik0νصp.+pUO 2fqdf4(¯UiӦE~ǎ}ҥYIz钛L, ?b W/`&p(IKOS{G{ؓH5E.UUUtڕz{.A-IgII f͊+gqFҷ&E d~ WmӇσo(8K$=.I# c/Qln{ۇ=9%9l7Vk׮L0rNW@6t:рѕŕu Ԛ*KC)>4"$:Vz=]c~JJJ^nC@'"2\t:9,4=?xZpvړD$R%Vo:\Ș d,]Cee%V dEDDDD'UbTIgs8lYIϮ]ԩSBӲ{nCvJi~+J:aȆgnUUK,-Z4[ׁ@ @YY6mEضeYIO"""""TR% d|>mj*~Ӳ,n7w`gK|9ܤJ*lM bYeMVVVѲ,\.ׁt$c^NR%VHt6.dvs_=-WAHrJX!UT4MF͟;$V ΦtXȆKd0 #""""rJX!U٘4ݱcGS^DDDDDDCM^qőM9{ifeeNC#kYz"""""" l{u{ |xk @BORnJ dEDDDҞG箃߾ ,8>7rxاm~pChu nX wZbŁ'M-]\Ç 4Ȋ"+ pAx=ūfgè`ofߔڍ/N@OW?Ot G WA6 3^I6-@!p{9?n~x>/X τ;^Q~0~a=>7K>6,ϗO7~Ĕ^\g l|>}2&C0 $#O߽w>da-q2\w>to RX0^e6 x&:z|{;aUϿ* ~٬]%[>thYW70kx < ojY[`Zz.a N#vlz 9{>cx=l}"~;2x}7`eC /8,̂c.aayrߘ?M/U|  )[[p5[m`WQ.XDU7^󟀇VAvo7pxu4}u| U/S kK`_`\YyɊ(5,"""ͯh8L/ޥ 7a{G7S,`.e;sH`6l 3k,~q7ibˡg{(]VcφPa5\~SjPN.yxo)7aO"9X3,}%>rQ/pM*ӂ[l.cO:olˤ3Rh9 >kxH-"""K/ mW|8|9`TXN4eСih[u6(u[av.T  /5Ԃ/a7˗ vC1P+gsM{3ze/F9.k]0|v8۞ 3΀<V)+_i@VDD$eea_-<6 s*ry]W6~r[ᩫ |olgl':%Ka#P0N l]'O= x!д9rWýWOWS綆W m76-qk}rAW ~{&e,` Usm՗ |{`U íCer<7V+8iyPч4 IDAT!ȭcuszwA x|2uck>ќC9xXnԡY GVDD$mYݠgVwycᑛe3ܤU8:l/` 8$GxukTM BeAQWغ ##|h(8<1/˿ rbW ApWcYp=w[#xoNߞpEG8< N?I* dEDDQB.{Ew*_ZHS=,g(cwr!@0Žp f/>x<7}hȴP8'||*kX۟Φi~8o4*Xuòºz' ^~3Iև=5VσF0-p .p(XMk`GIawZ%\?UxC{8N'. e?a'@]EDDҔ?y\}'d¿ì5v!m^0x|\ǜۻ`dn8' JÄq.t{ ǂ玄&x ^3x= 3-O%pol _ 7<NWS/ ^OI1cmWfZ'X-q"m[ػЋcN?_0:xɶOtOst (6O0n~F^oj+bpaO2 9ī """"ɂc˳$#٫5pcc۫)+ϤIQ u%Z U"?Wa.QsŽPbI)Z,""""ey[zI4p`eAD&%)4d`v!Œ""""""RȊHJQ +""""""aܴ?.=\.|sZǔIak\N֓#@.,Ǿ2w۩ <}Ydtl߳5p|:x;sїAY,Y IV 8^YB>eXغNձ=l\.klM_WjA)'1dNlc)bq8~pY[;Qh7r-KQfd|v(NWn&t|o }zݔb9;՟~Vt߿JlҠE֦O]fjǡ; śso꣫_>+AiL8u9v#hA}WsrX&?4yʥ Ge÷;C>ccaU`ht?1mVc91Q翤6ƶ=t,unXZҝ6CׇrL~6c>)Ν{=1-Tng.vǏlmхj wWkYD$mctgMX;~\v*\|(6}=0lvge\Xu,gg2㻼[qlAd fΞ ?{Sҡ08߉ۧOws<;֟R?K߉T?%6i:hՖvK>u+{ CG-es;́-eKdщVa}IUeCu9;疑5x!Ʈ`o.v&Ők`{\3{;:_Zh*<.ˣ$ֱg?+gv1 ˟):  6]3)Wo2P40+v~L2[Wz|'>au Ԝ߱_: E*4Z\7eV5UBMjd`"Ys k1WTg eU/S勘 v>v΋6ZY ;}t~)O'O>6%_,;5A/ @}Ԕ2n ~4wv 'P&ŮRMџxn?;_ހoRm.fGuަZY8x\< ƟI\X>!e>9XX\N)}}njucͿ:gNzN?%i%$lEvGO./^B}-?_қUԃ#iϾ>㏪!5C=2h͜ǜJ-X[T_S\ڔk%VjVWPm;?CSlʨ)Q2 "5u1M Rz4ȭQ;s5@ ?Yw-޽]+ rYK2Wt?)EnlKdTNް(QIM,u;όGC]q=~̦_OۘjANc&oǮ^~q&{KzkIۇw I6>heq t-{]ЃgY=[6v pB?Ix;?kAl:=y+؎ۏrz'FzTnh9)_t9XvYigu19I;8JYsO}1Y`dZ- sU/+C$i '_҅mT/~+jej̟x2^3ViKr)k2|Hd(cC(|$xlmb-bu/i^e/uሏϦRv>OdC1dG,?oIށr0粵;?f)TLZ_ %|"IO.8VspZ׷S={0NY~ywlkcAw<>6~%=_8` XjW1uX5q7݆LNǷ"cƲDg㮟9&-oZ$ھlE .L{Fp'8D~,s\+4}M+"x 2YI,aR-&}j:3iRԮW\r /ŭ@1P!sP s1-҄r{0,yd+*ED$*_O(WJ*v]N/MۧaMK+A dEDDґKx+ѩh4%"""""")E""""""RȊHJQ +"""""")E""""""Rى YjIK4寈tKn>oZ_I2 d/KRD{M+"+Ob)atIE)%WDW:%7mR7-$66]jZ_9\ܴ}Kߴ MB{@VDDDDDDRYI) dEDDDDD$(HyK%"+"""""")EHC?cÇV yG]C0O}Lp"0*`6` ?yH׃<@O\p N'Ly >{%`G%"r8sl@iwp=)bU2o;/eߝ?XnF7QGumL`<O20enCi-O?L&a6NOmu_'=ӿ"[؍#_w"c] UJ$8p!P99M{*?nw_D~ N Ks+s%8;Oc*{?XH$Sp-0'8?ҝg;X8?$딿N\|_ٿoNQ$Y;7>+Y[` .`/2;gm 6)TJiјX 9N2mյw'b 0rHwL lpC׽6qN/"n,-Ej\1%e@~.`*&H*;NKu_KL[Zoh#9@/[1--tQ딿N~ЅcLZh]x4ʸ}1A7];aT7wi?e`NvÛ1E3&j.X;ņv{b+9x(\luzti%< +}8/~`>b s Ό(˲0tlXt|1}<pobu- |IUu C Śk49&Zv=-o¾`01An]1rO6ynQsPy嘫n%lL91.L6bcxszt 0^nŔu?&>g7Yr0=>KuQ(S8җnm-4l ['{TO*k !L $ &ZljZY#Y*1B78X9M'{HaO`oGvAY]cj̡lyb^D$,jʷYʅs2L^r<5Rjka;eSRCN뗏)'z^Z[||LkP^/`/F[zVԽ?6# dm dss^LW}@?5X]`c" /Bi?0]1N(ȍs1O{tc ^D$U1=P ¾ ʗB-(7= LܗKT:y< iYkqU1Qt!ӝd?ګ1 *2}%KŅo31WFcmk?y0G~U0'ʬf^D$UO 0eEߜʗ=.t0]X7`*9faα[T~0%Cã6L=Gpx_iw/_ a ,1g 禦kv8'9j? s_ؤYOgFCl Mf>RS>bp6Rt5dƴ`| 9d&ap1WÜ\kzts14}̅7AED{ S1\y8/1eǵ10ie N_]K YX~dpGsM/ b^p};1 ;_4DDR]5\ ; ,D.^q\L&\T唿NTp>΍Y1~y˘m& =kL}lN w#"oZmhKP Dzq,޽l~aO-Ӏ']^Znm; sÁb j`  sEn v?ptCW8c 11y=报 ,i=uc ;f{5=+z7aNRphW}irLNj"/%"")a4 (sNX#卜tK֕NU]aa}c[1uqmS/].Ĵ,_,tl|:n 5]iBrh8x f+ @0302je3}k9 }A[0-cv|&89)8npFw.`ZZx;椛\+Ua; XJ("r8.Uяim:sQ w2<OEN/mÉ{0J1W{d/Xoc*ZC_6Eh7q[UXg=.L+1Ant3ӭ'S sUULa륦 .\ ^Wc#=?(cJAC1tj Rga o#V_bкjhL¾b| S>qz0]cs{1_p-S5D,[WSm00=ƾ~_i8Sh LRF0M0i2!8esn-'VH`|[65]T`Z20]eqN?s콘$)&TxNӃy91zss^pWK1.B6oJ."r80ϳ{.g31k1]]~=p&s:5l*N/j>Rd{ GkB`$jV4M}_Y |wV/b)ujmL[0'Lps/}V9ى9:Psd u o 8O'>Mc}Xb =N}JSh_phP IDAT!4ӲRj:L;PϨybH<5 1eW+f̹0}4rB7\xZg-F )[ƹS'5௫b=]}iLl[#,/MN]-]>^۾9ut2&jiӝa?ګ17DӥB̕V܈naDxCObNӧ7"B L\49Moah S_ 7ue>5}|t9(I}=0eՎ`zˌ tQڦǴ9qp政NkѷO+yr}n~w7恏恒'cn- 禦v8_.ԛo# %%"ۮ3.%N~ā+%i J՘Bj<s]46_``ZgRsfJj\vU&ysc=)"5¬I&LޅZPÜs_P,lm+ŴZBJwb^ `Ę6tSl);/ ~SJM_9_\9Nh4u?!mtS S1xwL~O1bK/57YD{1ڙ2C&Q]s޶W?gYDA}M+"+Ob)aR-z&WSVIK.嵸 0|`G k""""""RȊHJQ +"""""")E"GDH{dѽd?:WS2u ]{)p"0* m51m`HשyGX:˜%,'p.yv&iY1\۷1g*f[u#"N'=/^żU9w`>aM.Ym&jSaw[= \0:ifaK\_~ksciy}%0x sh ~6 6J{&@Sh l\Ǽ:;8EitO} K1/LTz INSfK1>\ OyN\XIS88lh0& wQTn*)"iŊ ^ ,˵^Pv-WQPcb"@B;?&$ ݿR"gB' ^?w8nFF޶3pR8#|׎mș0'߂Ө>}oy%cH6r^a$#~-=ߐcx O|sn| (njL r)F %Hm0D f5}=+~/kgU/ 139 (:Wuҟ ҪZ>Y R~#O(zFi$#k\e`v #}yy]dFX:Ucs5[a$#~^B{~ Ơt>prJİ6vBoX$""9H@Px2eG%^X9Z#g{ܻ{O]HYC7YDUqP5Eb)E%;Wg0 EX> OwGQ1JCgFj*!jS K޿aFґ.ꨞOJ5o_*fU BZ q5dO~QD32LA JT_N |Wڦ/dqC\m1hpd $Ue9j:x+η[QD(4vyRej{46:6g+"7 H6[X$I5>IL6Ґ.l FB4]E:yq5e*EcB mUW-@7QhyAud;dy69 P/:a; U41< yQ}TT@6D;ȐZ gÊW>1ȉP"DQ2g1 5u8.t䜈5(]yw:ۡ0 oP6͎hFG"Ð>A΄Dv#+xDU9V8  w/xM~0G~7.[38h|p%cک4"{yzCv:hl>pu2.+ITF{DjGUhl%K)RQeFq͜͟Hj$Hr<2zgqS"4~Zi P6F2:^Oq\m,iMCϱ4AL!0 G?զJ6KAR1oSDbqDg"l}\)Dۑ(Es#hyQnSeiҼ-u3P)@'-8}+}"z)RTkFKڿ=߰|#瓙N,KI#C9T뽭۪~^\B/Zlaaa$faaaIaaaFRaaaaT!kaaa$fF pZ&v>r OWSn?\AsaaF ֑ɤS2%|ko  >v:Eb u֡EO{?&]7p2Z ;|-z u㐎a@,f_U#yc';T6z~aF|t@mi5#h_H?>NT?S}Z|Z p.rIU_Ο*tZC@ x(~XD6÷b( 7?>W" dlm@v H2RТtTGp_<XR蓍0p=p,p! 8= o t9gS_aF@H^m,(<}O4A-. t=@w*?USoo$ʁ}7sQ" Q4"cγ+ s?Q8Xr_dphj#Vaƾ%LCCSuu-ejz>R_Ad;SS(mN2|ac_i)MEd܊Y 13(*y`CfD t]'+|E$˨!j<>FHn)޾rC4#8ȵ%:Fڏ(膈F^] aOA a2E1|0jo{ H?܄2vR!9/y:E}xO*MQ[OZ<O$k4 +ۥ[]KR) %j +EE)R#㴌ʆP6J9m\ձ|2F㑱3W.A^Tǒ),FHC}kHG+dzJ<ЧxOMD_~MUxԧ87#>5-U-;ӡ&tu0CloYT~kBdLA`1X&>U/g9R?}Qzk$59;bZQQD1J~EcT~"̌OY>˹q5x6UKg\`|Hi*~M0{>Mɿa1&Fg=mwb%%]BMT:'G{[U"#CuV&{2 0 0 0 3d 0 0 0 Y0 0 0 #0C0 0 0 H*̐5 0 0 0 3d ck4Q>? ZìHGlex 6 0 0 aۄCixȾ0+4RQ0-`-Z4JpZ9< 0ϽCSwܯ|&8M,}@,f_f:ZCPo5x |#XpZ!x=K[0H}MѨ8h#Z|,igK&{/YW~1C |xc̀{Qhc~@ѿ"9H E3ˀNW>+XoxO@>p>ZzKsK(k xn0BӏFНʎT ܂i lbO].v92^G/oe6+_61CI'=W7Q15*w+}O C+Ȇ^{jвG*dd]SyJS+;9nb Qv{t(^ȣD =c~xhCyzyefz?Ϲ]1k5Q;s8E7U6)(X]aFs% -{~h2&H${93i^]S|=^/ne6Kj~[mgR`cdiH} (8Vggо]#nȝ0/f28;C8U9(~>r*y?eSf'W`}FNs9R80 9@Q(s&WՏF8 +ȑKE@ϩJCmxm!x~E[o63w[{?3dt[zyW~7c=hIq~ѭdh<ٟ̏DP 6' Uԥ|@^QcWF ܆" o)VX`/E#r` ,S #uw-=uW8;PchF;]^D0 )imc~N">h$N([jKh.P|9^RG扤NhϤR˗3cӗ׎r?Յ'#JdVAs>R+;W!"ji(׿哙0pw4fv &\\]ٰE7?vcՑXOl1rlDy![TO 0 '׼}A1jҏFbAO1grx eR ?ۦ} 6@5Wwۖ~& fV)nt!l}M0ZlXq#3Ѵ"Tw(S c)UlA* hLdTR<נ Jdf|*2]L]ҙ7G}N3E W=a4'ҐG#1м )e\PrEjZ~ɧqB(,?f_5~'ڿ@~?Klߝӡ=ՕdUYjVRNF Q4Ÿũ(6 _T# C)' }&%HÐ";hܩ̊P$7A4ި8w5|i{4҈q=J9(s%Ѹƙ8paME j!DO?h$HD.=aD=;za+x XBaot Rok_K?ȮjͶ7pױ|vio qM':&r7MJ\$jFѳNELV os%Qe|:JHG=)0ZD͑Hj$%(M*toFDc#ZԨMF3Ga-Z7oȋ"yad8絻>#3Q s,_ykE]84kHA"GD0 (B1A\gG(F}޾HG#)x 7Ddǯ~޿ϤQnN-It%@j>g\`|#͆T&D)ϲq;ڤr iZL 71M~>wJJ4y923%2oy=r9DFxPŭFSq Fcrs0 0 0,0nh]41KaaQ-fFS;pvS_aaa$ nN}(RxTkFKڿ=߰|#,ymaaaT!k@}/cTn<=0 0 h̐H{cek9brxoh/VEҿ鼉7u:(׭~n;feα2 IDATxQ)9܌كds%C7J9b•ww!2RFfgh>"0#p1pvM}iu#'{gBA]i a㐱li+𕿳+5NaȇYzÁJ̩]Vײ_Afs;VU+[?* q#ƢZ%ZCFc5plng<} oAs.y%IyC [K0x2V??KvײsǝV\FapiπQ(N|p-b헱b'q,>Get߯u=F1ɇ=E)%m[#+K5ݟ>&ߑl|_(o+3 0+30k{׳sL>ֵڛ-_yM;dvg1aٶ||/I ~_\̈U)]/>Pn+o\=ut̩rN>ߟcYp >=wEMM~',10C6{/^GIf_x>)M{2GXgUT֣].E"k YgCah?=hO1L12ߡQ#ɿ:δ^9L̟=uzm9iPS~|gb:7fO6s?s;v?uFV(wH${ wMzh<\y@+>;9{=Dmw{Ng_=>.]9ݼ9KOԏ?FΓ'0m l}ndG1㵅v?({ } e>ɢ..gy]v̛Uӫp?Udmцoő6;w2),yb>hͫ{CQCAAJ'wk"Zusa4N}qlq`Ϝ3>d <&ds3=!3ͩWo$:1~d}Kt冻1#*/]NkhM+w39d~>"6i_;QŅTVI~|YNpiߺ5Y5ECz65.a8[;V2) ̹%T57V(/Q3]°kv><-u/?<73y@M݌mI҉4'%H/tYlUY99Ǟ/_>=ێ;ZuH ( n!E.8jy2.KR]ӱ3٣e[ǶG^wk H}3K* ]޻կ2X?o>ߗ 8[rvOt{޿Y}LrzKzfr ?}YNp%Bo_%Z('+Щ&p ;.#\nAᄀ"}U }g]LWB^~&s*(Z s@2 k 3x3h}t(px˖P>Epø …9ҋ%Kpdt(GB=Y^Jؖ.LU.+X3YVz尣q`9yi򥔅һt:]P>}x+Ao-`F#9lK 9UK(Ϊ-m(iتn Pܣi{(d-'K:'7Qna[ Np{ /Op㘩i w A)E9,X/ YOd=n`{pydνe~ V}Jq  b3t;{m ]nlʞӽ} ˯Hq'ջ^3K~ATʢX  {A%GevLSSكF NG炣}lml<}wN ,Jq 5_ypӑUw<E_Sc5 b_ƞOboXLak,"kaaa$f" 0 0 È`fve/#3/%(0-`-pZ(p>L>Nzyxg}hRd x- g_Մea$N_H=NT9p@ x(r88qMMmOr% \troj:~oGT`,i4's-Z~7Ȗ-dZWyuz-aɓ6ނ{`W`wlpFr럤:~s?Nq?oK(![M2󉵍rRVO Yu E x)b`23a e,Ap7_""fX$;Hiv@nѪLI>+y c`wQ}<B8o;*Av\ < oy${pa@x`;{# {ﱴF ![_6GwI' }/~yTUhyQ0C6 #KJF4&B^tdF^!cV:am+w[XOp.pQCk7` (*H1ĎI_#y60[Ry6xʧh ϥruv5~EvGY2?f_?os"9ڣI.DlDϤ.,G^ѻa$o c鰥TnDu[ e\v,JG6FUGE_WSIK:Y$IuޫgO QxnGլnukhd'; o,D$@EՔ/E)Q# p|Fp&φӮO5(69\` 1mV"yv~! 5vRۣ>9o&^aHg\1}XaJ>oW~f6t!jCaHefxǾF鬑F0jOzƲ*'Vl#}>#A44w򋷼ѤYH_uM|yCt[>)7|)Q{D|4&y#,*{mcׁ "xTC 5w^]t x_FS_cw|4T^RK .ٿעFs2?{R?yѳ\ݟaFSё v:bDMwt4Y8y ;OR?w\W'А hh%ZhvlTҼ-=23@'-8}+}"zRT[=p 2hK1 ycϧi17,&H6;.!&MvG F={[U"3ŭF*IIC0 0 H~,0 A7aaFc`a$3!4aaa ,0 0 0 H*̐5 0 0 0 3d I.}Q*pf5;7 0 0 /l,ݕqq)`w78hh}*eBi: < 0lڨ!;?@wܯ|&8M,\֧@,f_U@$w9V<\] uTm$k[0 Cv姟Gps3I&Co߻$z#<4V F}|;xgO5NԷr"Uod,"ȡxod&o zo+5pD`W`wlm@ Ԑ9HɔgtH+܂^ʆ 'azXmOz/..VxMaɌO~c9cI@rywDWvw=^Gʼ=!w|o7Q1n"r;zyfOe 0?姟G(28.?Il CzqE[{>.^w{Eb'yˁL% Xe6{j_SXD| _ vH,}eydtCy178xhjjGn15UIC哝H~+?>o#z!28# ;(4j>w@2LZJaLiC߅̬6NQ/z 13.y`I`Ǭkd%OƼ"(Eb~; no[ އ")ZgRj!`w.<{9J;݆a(_Z`cE!|W-ҵ\tHRGЉN#rQ&1^BCE2^ |^s1':vm~^_D(-.ή155ПE~cHDST{犽lKCIJ:Of(ј14֍hlRc=Q s-leRW5螮դ2 eSJ|ԶB軆`caAd>Rz+mJ9xaVZR:1g ҀP:{p8k#(/HOZd Y^i!X6-'hGZ-`id!R}P2N#Ck7u +r,:tXP"J ;bSQD1pg(] :BEƫ"Qu%b,58aFs6hhǢ6u^t ha2a7K~В ت,@2?ҙh6j|/4 Sk`ɇ װfM!L:ґ5FcyȎB2MU?wCqT+E)#g pJuQTTφFg"(M%6mA𣏕Ž~Ș}OGʿ>XґG5uԭ3?謇aɊJC IDAT=l7"{. h]ʂbye3A0fJJ&!ۡ>Hhjw,y(">;p2SAUk,ŋyl}0 \gge]cMt^hl>pu2.+ITF{D|4QFX!(%Ulhf?hнFR F0g#Y,Gpь'(L,AcFJz-8h\LRbi9Tz3E4kr0u6z71 HfWSOT7$",Z&Es7Ѱ;~%P#Q:&}.E+(hh(B )Eݖ"DmT7ΩEUT%ﯩi(:(e2J-6 hn~iiZL 71M~>}JJ4yʏ923 $XmeVz!ׁ[eZlRorQʍaaaK-6Z6AV@aaa4k̐5Z6!M}aaaK-6 0 0 0 3d 0 0 0 YÈ+ w:!c'ZlZ4db8-FC됖xg}hԺ.Lߔ&}dmux -\u0 H P;Dmq#1Hu'Y'?։> S_@P\ޜps3Q{S{׏~&fstL{ۻ|T-El܋*@;`FVc*Edd ˀ@OC 8gyG_YQ\ڀ7 hi8@+qp#k:A`40|g4#p h 8x&]tͅT4hg`;eH߹ue>?GCg@$6@:"Y H}-װ0 % DT76z#^rQMto.2pE2Zd9GЉ|wB7>뇽IEdCEr<-_d%L^JA)oɞ"γy5Qd0RX(2ʨqGOod%c>5s ϡrCa?!4L,y"'TK1Xw@c2@CЧwNB5_F6hg 2h$EmDVP,jagR`Y &yvK9g1*BTYE3׶"|aYtXDFBV*Od&c^sQti1:Ma Mjkk7#V+ˁ7m&"{?R܅1XN 3)0C6MWd+ے@ږ}|G6{y(B2M3UnS7MKQJ9jwQT1φƒ_dOM4| ;{('ЭFcRA" )#k 0KcW$ $H>У$K8 6M( (]8݈u碱~5ɯIu.xIw?|ވ 9UDTq{lD HL%QcV[t’*{6jh?F6FxROq(mѸ4dҐ*tPcZ#=E 4#1L*/ca?EH(lǍKTD}J<\ ܍.#2s5DgwtZO6Z$T7\٩ mK;|:nx[QMURa-k7|bMdߨ ()xnҤ #C9Qzo+󶪟#Adw*_XjaaaT!kaaa$faaaIF\lk'maaFRbO9U8 !I0 0 00ChȲaaC$wNd0 ]g=aIlD}ۆ{"XQʧg Y[~hh*eBh]uhӀO D }(z%6a bH7ǔyx8MH dȦ;(.TWZ+ZVZ_ѺREVVjk]x,A @rs̥ !yy{g9Ι9se?] E2QgWU1\^\*UŶWkg?1ٖql*j|9Ҿ%{e^/٭br9bPj\J t,;&n00>C2癸ס%NO1^ƽ\tk :&5E֓Sbh$:7\Za؝']W SC\+*U|#G{~eΊPcEv;5o6mEmtV/[$W2wJ{}?_nmD'WSL*oDw>+{ih߉vKph'.-xAtPT;5>] l뚪ķ}y#iEMGjQQBd, خNֈq>ok⟮Q%0 !ڤWeuW?+_uFM'֩_~Q|^`c&2)N[+v??QkcV+LTt fL t**p?gyEͪ(U\H/?Mt}JH|E;'AA%2Ewi4\Opif5]͘Z $D-l*@3EXm_;j%^]8϶ߊGk<(ԼF.uWj_U̗drshƁ5Ŋj"v\QW EϽEWF:^ZIY+O{TQ㛟Ty9].]|E{zQ* zQ㱢xJ}VIY8Atu o;5AAexgm8EԡNBtqK}>Ö?.N<)zBLT'>~ŕ7}dEekDϊuWk[j]7-g^_{ 3.1G}^tN|OJ|uTy5dn,i/f*沿`wViOx]V*Q VθYxD;{CQ w_z^|*5WEwU4-(QSGRmn*-W;+cAvQea>cDh;?De$fn\l.n/~+Wʱ Q&35d5]ȮhL{"'voW `O~v[=u-~ltr)zYǫ7y7zi$ `K,\Gں+ջ_ŷZlc NƽB%6xe~Dq&O3ȋQ2kGoy,-yѱvȒRdt.@.O]RnoH2uz%*driz _9cjxb9/eF 0|nժ$1r(3+Se_P~v:Tm̰?Ѻ|kF~{s9d>|+ON yH6~ƽ#x#lc&&G<?]ӧ񩦌n>w6K.¥cvߜcVeKY.ۛ&FN0AD'[Ũ{ygu"0j^*Y5ne>,[x=?Ht'1Q/pPnD<n*W']˖2r$X>{,|Gи$6EWEq?SL)ڱ5p:2lZdd,nVʫX=Ea38,d)r:Yá혵dWӤ񩦬Y\Კ3mq:('fVQRN^{VRlYKS3Y-s֑`4psɛ 3KѶ??汨4|彛CxGB~map72n 7ˠY\؟ ]!欇iGkh[3=SwYҐAY9%"TdwL%M~Ϲг5scȦO7WFTaUt:[*y)ɭ%;݊ŔJU,[L7pWL_B.fU;NiWS23W4 <7m6OocpCM}ߤxGŲ2+XۘЁkLdh{2XB CJ8&NL]Ljt_cLb #n祎ӹfA;(EY,Cg})iU) &_ wO&o˾GQ)33pDlwGOSxArU^.˖Rf(|: ﰡ~KOK5xO9&om]~v ] hf(WѱBBʦlCdg&V0Ωw<})ReoТsbZ4KךS×ء3n&I#ޜk#+284LjVXs2rJhojIݙ>C /J K܇{F2N+<k`_ː4?[vNmķ-.8?E9ymg`Vw"^$k>9n⌋0| zQ#ԧ<5ts[\8I6*u :^ȉmӐU:&;g+FEyJ2;UM_'%OU`j%CVSdfhra-ӵa И#4Ў7#Չΐ 6DWvR{'' ml@f3N:6ulI}1eG߱JFVr1[VYcanmZ0{ }bROLlxq$ :a,8I&X.7nJVgn6{Y?v.f&Q(KߪYOX):pdߪl߶[2hٍ{ }6߮w๡t>?oOYZJf}Q3Y7>S3F+?дxWk؋33,H¨N$0aW^5]ZNz)$7ʸqb 0]:t|(ӲC1ksڄ_zfCR~}]جvw};;躔IDMusOX&YI.>RmHRqj7PA-Y`b&͠a[VB!g_ZmUi֑FyoilgqP:ۊo~2g|i9{EtOy~$ _2N|  h{\u|gi:}{%cƔFcyˎUbt`PWK%6Ridgm`;,oLx\z]I݈%x5/.2Y,\.1<|5RWFOݕdۜO>]j<>Ք,0jd.n'_9y|RXeؔi2zdTV埻}DW^ǯ'ppI*Ufqꩌ4j?f;?^K1Y2;shk4 _ME4`7cG$suU,'Yf47ɄἐT >^\ȭۉo(._;xXCǕ'O :M4y7ҵ$hܗ;[LNs\v'--?UT١"Ր!Z]!KbٕyOĞ쿇;=#]-7=U8ٵBkVoԱ=NNu9 IDATm*נA ˽ ˱)5lL [It45$D [ N   -lAAAPlAAAPlPs;{omVׇsyޞГDAAO"{KzCTOT9AAAnwgҬ=s/b8 zXAA5b&ٸ/>gӝїWyo0%#ǡs)RM$7 H6ᰁTZ:׍:xDCl|xǹ}S︪Bҥnvm emj+1k<7}0;l㞜{eoP *SD緌\6?<:Fe!w6K.¥cvߜcja2~ jҝ' N㾻xn_.Va$&Ik0OGh}?5 tOrFsЭ ݇w Ϸm-V7Ax_gO1hϹph;f-%ٵZNBM,tLEb]Jyuャe+qd!N98Mte5e i-N6(A91rڻg7jbr/|X I%SՌyU  G=Y-s֑`4K=o}^h%0WYVGsiFJgS-{^ap:W /'.=[3w9*TdM =֖͕Xwg@ktOb9K2c4>5dRT"w[wu˯ՍP+BgO[+K8KSڞN)t:[U%?KI.٩V,-7mYD%uv4}fce>]$lܴI%tױGic_$}o/F<7 '\}O>~"я<6Qw6Dr >70zwƤqM7Al-SV4/#;ܶ<{oaB%6$K)؃+|ęӤ eRjlImſ7S_Y|]ɛR`'XOn۟Է#j"N*%V0Ωk7Ѐijͅ|*:fl0\Nv6TEoGAb(()ݠEG|h5c/)ѱCg'n(][ۘƩ+ f2 ]x7GBA?oq Fwu-8FbhTNgƇ粥sA-.8?E9yjDOy3]ntZ d'1Mu6f|d[5Y0e-6z4wuU7AMh><@@Q~dzbIQ3I7OBNl帜"֙~}7w69[Vt֧*{5Ȓ73s4t9.F0Ɔ$b;ӥb:4fЍ[^Xdūq5($cN▿7k'06݁8Acy1+?cc<>+Y ],#.e.-!:m+4C#ۊO\99:~s7#ǨwmJV,e^enTFMQDTE=4M|v0we{2H_U4y{J:lŚ5&[֦[Ч/v(ɆYL`fQ9aڊ2+.7z'+z[E\;E,e": Hɠe7NC3HaLIʊ)Hrjnm3h׏;SIP:ګJY!)g,IMsLU+VeՇMz+ zgmWvs7R0*4/LXƕFMOӃya %ɨ?AãJoK_Ǖ%rZ=y1&vmZPKlHo 5=N6o{Wiu^t]ʤOgNsOnn,,&$y Tnby ]:{serk90}KaaSuwSYO?IU*V\y^%gdivpŜg[t]]O&S^D9L& T/eqa_VT*b[ \fjBԐZ'=7cwzFv=2n)#8:5CuFX?V :羷ɉM3CkР^ؔ6$Pɭ v`W;?}B%6   AݸfP"  p"x7FKAAд8⹝xK+vKAA*A(\ԡq>IOdAU$GSoW/MAATK{ճ2^W2~y5cg Ěr϶)%v%xv>  =$Ǽ,s3 9O2uzoȭX@ yEQWSco!6bx>^E ܾw&Y_ӹK ڳ6.Vbֲyn`׋Ruv#/؎_r#225M'Zʟ+gD"sr+g0wYM9/b!=5}U:`wPWņ ;֏&1Nm(}wܾ\ܭp#ٽFyAVhv2O\>yr֧D?L<~$?֑SP1sx傮ӧ.>ƝfsKpi]7Ug f"K.5A;KS'[Ũ{ygu]K2moYJW>ҕ?5ne>,[x=??˖2r$X>{׬WkjzB6C?{)E[?C]ZNBM7/ȄY$R^h*qѫYx}N9Ė;Jqⷛj˚.;[l'Qrbf%w[noX+Ŧ/_K;* y-^X73C{7e,.O$0WYVGsiFJgS-{^ap:W(ҷ{~eKn,KM`:ND$FĦ<Iz,)欇iGkjM =֖|R+ ʟ,iȠؒKQO7WFJb;NiWS2Xai6yn$狒[#FO}1/پiqjޛr'FwSg\Ghy!<̃?eoyiAj3ej~2p2E?b _Ü m: Su+ ˜1Zݲjm܍Nx$7PƲRjzځLoZ\Uy1+?cc<>5_Y doǒtl9.!%uG͝MvΖ^4Gt C([uRTvY2}&sfv汘.Xв<]ؐDxgd,?,ʺ>I 6DwvF{ R1ӨAT'$RN8[κެ۴an=G<'Ɓ ˿d.6^?J2ٌM_[sRF}Ll\kJC{oɞb[ҹ;wsr>uoµG?gsեå%;^A^=(ߩvPB-qzoAOG(+9o&z>4O}7wɘƲT$E^'颹 A -Tu؊5k,L֭Mkf O^P /."dT'Ztsd{5en{[|"fO= 6nJVgn6 Ҽ1t)KY9z2 MRPHU;0[~H,9*BKÆ(0^1 AP v.f&>h%i5]dLe$f5/Q*)e8]4I)}Ӯwc๡t>~Ǭ*vOfL^aڴwI~ک5xopaUzic_+/n-J?AãJr~^py%;qu\]Q"e/ӝcbZ[뭵 %̆vY#ydSvwUe帽y vBҚX湹UD,GqLa@:yج~_ΛGwޚAUmOB~egfW0l2W} SY`b&͠aBnQ [N1%+wʟ:h>(tgwbAa%Wqv)2l42n*+]>3T1<}6ȯX .qOsMqX>L(D2$&s/zbЁUZ/xI_E{<ݾgsvóyȣQ7kKOA2U9?}:=O~D2^gq^K[>ѥ)30R2Oc-t+h܉nki=}CT+Ķ2D;35d^@<u29s30qgdQM.a2jӁ.{Yǿ:#]+ĿfVOsy &?5hPrrlJ So]+M Q{VÿˍA+SпeS!ːXՑFAAPkAݸfPbgZ:˥Ӫ<AAk"x7Fs&ϬAAA Mz/ً~orl><]O$ ӌ|k'  `*A(\ԡq>IOdA vƒy:HAAA M=BY4zsm4.c!ޱhxj-i(qΓw AAc&ٸ/>gӝїW:Fe!^E ܾwd%Y_b:yz:Bn&.}U㷛7lch.kTXYY^/ͻyIs~&UĒ)ˠS.NӼzVY hȒRdt.@$:O3r9cP= 2W?8qP×2#Nqw7j+UZ 寕3;&ޜ1zҪ+SU|Oft:_|İCՑІ ;ۚ0ɴ ,j\F~{s9d>|+ON yH6~ƽ#x#lc&&G<?]ӧrvSM|1l0_]K;wR9ǬZf3OV)3pokxz8ϼOOJm,XDAuYrFsЭ ݇w ϷǨ8i(uhsrq]@'[Ũ{ygu"Y1.y5~:aꖿʖ2r$X>{lgf`HT7~Y}x|\[̓wPݍl~X7^~xbƷ{8Am,iȠؒK?x`tг5s#Td-欇iGkg(gW-a[ꖿ6|01L4N-&{{Xk\VErO3)mO YRɴ?KInny%jbzsmYoү]؎SbT~+,M&M͓[#`aS7)c}{{k|k tl #`J/4+~X^:b 1Le!{oaTb!?#v?J 5X=lZ\G1C&RG{I3WGAl-SV4ZνCt?/#YF`%fp~AlK }2y]=Oo IDATTR%,; :>*EY,Cg})ik&Æ.=-xPϼ\-V7J~J`laݏ[=z-dSdE]д hf+WѱB:ʦlCdghI`8Sx:(73S %*ߠEG|h5c/)ѱCg'fB|6^\7+ LA\ڧӃټal),cVhO&1kĭ3jXO>k)ݣ='ug H< 8GtmEncWh#ފ[ruŅ4L?@>])AlKgςq\-CFlntoq)z]̑+]J K܇{F2N*_u!_wa /^ ?w"^$k>9nKdd w挃No)N,`/;Kn.VP${ \oㅜfq9 )YE3>nlsO|yҁ =nUIISؽdP$9brgcgLtmcC+/],a3iV:?~2PN▿7k'06z6rPp~uyÒ(]-k61RY[TUCY"^Nyy߷AlC\99:~s7#qy1+?cc<p2DÜtl|Ӛ0cʎ ~ #'THgș$jM?3RFB ~l۵$PCcS͝qp$׬Ѷ*4I~yiٞi,+C,z7(ˎrW%}b ukZ-Hf};zbdËH&Y0 Xd{5W]_?o;rM}chݵeE1t)KY9zO4l'׿viMwf;gXf5 .=d-ڰ72+?eYl}7<"Uq Zv<4DPBx;Z~ķsѲp! jٮw:' YMl?dN;.oM^ɘ1-FRXh؋33,H¨N$0aW^5ZNz)$Y^Ւ+ˏ9]:t|(ӲC1ksڄ_zfCR~}]جvw};;rE3ܫ#JVФ-G=$+*4d1>9 ؿXnx%kdK$+i )J{n|ݖ珣5o܎2L/[vPTHYATYG罥 LM} K"?X/.rY`b&͠aQ|7U7WQ7|Ɵ=#;XPhXEU5#dkQ =vj6vl+~-Cξ UQX=P%|v[.䮔7U&[I>koUXF0f0<%Ь?\#ȟ w/<1LW: ;_E9d} l O ĒݶgU!4u{}0µ7pc8,>ܿF<)Х.8p) 'T(J Q4x4~>&!ڴ~pNFtןk Cn n3/!7\|^̇pڕRƌ !\vt b,b*ꁃ^gRUF@l.C6ΈG A;10==}5M׳E9~b5YTUʷbĘ޹8e6q5o^1Kƌq$OQ` Cy>Oj_P*~rA/UbEQEQcT%nzH((?*JUάX(((zEA 97 #O|EQXAۗFO͢ZT#7#:"؟"`p/UbEQEQ%QEVdwVѳE@p!4UyxLF_<^*((JS+Y#9pIto[.g#rN9ӆPU<(}ͳxϑ#n)~y+M;@k`<x5[OÁȢرB8zxo<2[6DX LB\UsEQbքo߼0y mZ^VmLfUp"D~/!C ? "꠶&T<_MoI:)ppa- >@gIh. ٍ)i$& uy7py52!!0)VSp@JO}N^Z++^QE)V?}0{j2p.^>D"p5߿N"`Nu%q"_<$! ɯnCۑ()*j{쿏lv~)_c8RH 1&#\ p)BPD {nH,#4nJhn^ ]mX@eLZ E]=iOFF #H@,6!? LGܔDH(bG7/u7)fH$FDF~3v ܎  [4q/$GZ>b+U4#_".Ս댓y$ 7:ҰA5s|"^Sq/}j#-o/R).2\4 kX׃X~C ?"JeG}~܅F$ qq"n{" Dq ܌ Rq/)7: }d[ k<2D_Jndp02:#%7AyFJaɯKgLG\8Rwhؙ~O4':,V*Ɉ6|b%r MOYQ@,X D*P#s2;r1X=#Vxs_z@5ƃ/y\"( ־̇]$LblxLFڊ`: &+zw'>!t> ~ʇ%/͟1*Ej. Fpv.Tx''DƒX<(Vd;4|#U"#utZ܄cD\` r)A v"(] վCzYy,2;JVC|x2] _G2$  D73uIքz?v!*4ZUw`PRnDlw.Y~3H8T@W'I]/JVIX&Zy#E!JΛ/bY]1\y>IEQHұ}qkԵwW72ƿu`'+#}_tvN3÷GV 2}hq<3hh؂>ΧT\ xg3pQ50]oBx*ٻ4@A,w9EfPVٲ X|.MqHOioyBFc_DG#`#p> YHeig2(kXoKwJ1oDւp_/8Y0FYko%nлy5ҀY#SvS:FjB<ljoj?V'ֱ_+j{NB3zmMD$.n8g/aݚ].>|Þu;W?B,IEf%9z@ϫH#}OI!L =\x}̜7)! E;cd!k6AGdYDFL'#bYm)_m }bDҡ(Ȫ&ubX?~DڡZ?p#Ҷ_OGej?-Dj+QDO@Dd&Dɍ?NDOYv!LҐfu݋ҥW z## ~d՟%D%u" ; ,fCmE]n`:R{ʑ~EQX%0fC9+'Xß^jQ*e#GEחy܅_S+kx#HV))g ;>ˎpˍ"TD|H܎,B|Wׂr1dӅ=B銰e B\=fD]_çq>c nfMtYj~fBdWEUrCd:&$y|mubx1uB"6(_ ,I5 [ J]C|t,8nĝ3W"󺽃JlQ6Y;Imi`>ݍ(m D xYQw2j6'vcd$\=sE*.gxEx&&qM4DXTt#.8Qz|z+2+F W~Hү(d!S8;^WOd W/ZQI=c>tPkCv!"HGluǚ]1:g}Nwuq$Ʀ|#U= ::]d!sh#ˑUW!0E0*p" [Fd^t-fyʮꗅ ȳy> z (G#Kסe*dވ bYdAWE5Ҁ ^\W*UKk/rz5X?ࣁ,x2'ay~XDҗ 4aěہovzD)MhFͽiĥB-g%[!Yѓ QD}gGLB*x^EѵX̰ϛn@ CFq"*7b$=%ngG\}"%> DI '!l?N}? mȼHXli/b Y$@V6~g6եlf*/_2M_m$^˧)P2}g?;`LjL2e)#iG R] 7r`Q}nO/qV/q Qnc(ɖsVZbVos(txO7}n`- ݳZOErt6~Wז`L;}%e_URIwv"XkCtz 536%0.㕳?.CI9R2y-{V-F2N[0gFr)xm!*f$lxF4YW(Ra"n x2h }^c䱻a}1VsxeSO+;{My+%=49ԥt?s$fSV=Xh_CWq](owk߬چW&-vqf4p_NHW^`?ƀ{AæSy ܺM**ƈ$v IDAT_k8_gl8eN<'vx/3abĝ%MvVϦ~Hz~域7u?q%E+4I@J'}_wkV24h>;e|KdCCc߻p$̒ ug<2h_˺!Mu0oJ6 ]ơdz(6GHb??!҆*m'Jݸ sj-{>=Vq쟼w%NFfJц.)t`59%[')[mB]ђmOui~la]vŕb^-Sā|۳VMf^twG 8W| QVh N[,E:&ͻrbl󜃶,^r[Os鶰 t\UB^MN:_QE ~7Sh a7F^=)<+M/O+F⋡9:j'KuH$xֲ۾{4,%xwK8syt(Ԏ]]A陶#)ٟc.~Jl*`Р\U2'eW߿RI w6}5L?~JL!yt 9g \)e-֌_nqn ,I&AeT /-`td |lSG˹$D2{yǮڲH8Q 6oĒX׷~A&Q(bwBMZ<%3xYy ⳣ]q gr[h_#'G_aSYZ\vˆk@}r(7[$X861;3Ta̸ٓn,=m &[#!` .,8@v\C+؝8: ̳uc͈}0UxZomA:-͚b uRq>=zWni .:˞#jkw;hM>lE>F"E\,wE)ɣ nlaR~ 4(Q #?gdt8iy7\+fW@/iP/D2r~eywSgRݜoH -IۜXKEG^cv.NOE>/ z[;?kFq5|@I҈ Aj~2=(6&TO Hw^vNЅdys{?' ~eW5pYMαyvMRtkeL>s xK?"w QrHHap˿JMQ몊P;E?X5;,^#72ǰdNSɀUur;Zv; /=ymqpwSv{d0[L/{́exaѮɽ҉6HĜ|c2{˲ saCg?}%/6滣(<\֦?K+؜Pw ṂWO-/8s`[K/0H{=S8y9VCiEB߈.Xk:sG~e%;jˎ`80y4^F?`~wjVʨͩEl Y+Jogw;RBϳo8 W&FeְQj /1 u2xghJ~/_Yn %Þj/܅0?N #w zH3R1F\GSgI)׿k0`ZQ+F%1Я7~{=d6f?g /,>! nvq}o&tWETdopv)_x痱0JbjOBS>,JwlǭZ˻DElـxO6[U˞#/Db e ETf?sM W'/ۀUb# # Jy 4F@\Hc) o"J]*R݀6ߌ(]??(vwbD|q_pmF$|f3iGJ>?!; i~ÌA&#~=2{307Bʁ(fdυ:m=bM8hĸ9q9mԟFAg`GW/"2"-P]gTo/ރaص_>V=Xi5tO@FHCqSvs%'P 7]3?Ad\E~ 2zF*wحH1b}XXk,¸e+?"b|o+"OٹHOwA^h(Ί2[zQ&̖KdJ/RWχ0Hg#ÑY8R1] e]x˷gZlEBN\Ѓg?ٸ]4y NEwRPڬwc"Q@ l|sQ`>?IȈ q-(gx;l~C)-y9=婨]O}yLE:b+!B\=fܚyR$F,u9)j~f(-#hC(4io L3X}Tc%Nt: ^8Ț $TKgyB\Wl[΢olBWdVh6-ujq>gxu];_d Q&SNR#QDLkGqكH2q).gxEQ4JC4U7qm G V6DqIv".Б]Y2|""}H*^|Nĺ5Q^78 |)xj_/D>]vR AJw"xWD|5];&|^>^~.@n9dgb*א2i#p=EEQ4D:mz$R1L7yW"m1YkRC҃I![H Co m`$d#Rd$iFT|vfweqH4%dxlz*٤j$Wj L@)7٧3׼n>h :;!%" zDQۧ.x >c]ՆEQ"p KD)J^ cT+D*`OScBc {Ek灜CcYzikk6ʩ3_X}>s|bRLD 1FF.1ːl9(Ȧٷ]d@:0ڼn>\U]}eR<\4 gUsSfL`W=[Q%p&h)JZ`/ +G~(BD9T`3~ ?"nѿ$a#fĽvsqfo {2R^#Xg(x)I@7> QE.H!M jhk"`)P-A;Iׇx iKFS! y?w8 1P4{ @ZĨq 8@FH~FးC7# H~hBFEQb7p\~`jٯn.&pCD-*O^H`qVBd9CL`YK) bK9>W/@%=0x(5d^1DB*uH!,ox;QJS߻%n4"I5F\ΧlC xļмDDQ~Լw@*hfƙB܅4`& Q_VσLFFǛ׼3 #wd"Q@ JD]p-)|.(g+:IȈ qu-(gx;l~;6Af,߄b>ߒcKw3,k QS"Du`=2CL,Pa;?09tXp؍6 D qU=(R9'#%A\)+I" o7"_CU"GvD\+ o(fw |H*^<,H(bW2)NjgWʿ\ ^C tm"P>}HAxRb=X]_HX/Z?2'2'̡%Nnő?ąQx#°~͂38<.s)viTVn,*E[1bM~ymxk޼8_2f %%y2]h1xg8'u-VEQEQEQb UdEQEQEQBYEQEQEQ%PEVQEQEQE)TUEQEQEQb UdBEQEQE4쿏,ޖnOvyŅd-ʛ7qyCt:=׃gY\ٿ+`gsdqa@j~?<& [V>u @`8Y;CMDމ Ay IDATLjt@ J D~ (gZ?1:Hyp(QGdGYCy9®9t8HajcZ)-wq(8陴l +d\1y`'"S x ZQE9>~sN[4򏌺Ȉ ~HcXV0o#UJC%*l 4B7(*G[|9hSH59bNwn0Jl{`$ baq;q L/{H% To"VGQ)8ȨAfH8Io^^DFoCrIQE D(Ջ?8%>p ,C%!F߁ȥ+42t b^mDKKV<%Ƙ:.n܎z"FnX1$-N4?FߒEm`@FuoBx.:D. oİwf b=v#FEF?1úHKwqEm+(UC 2ad5Z?4!-ACF<ߕ?,:qMDѿ ~^aN?:ηq;=wB#9-:|H7?ȂF|.$g? s! o'P(Zm IoʊRh$|i __SZ g?J'&|s}2g":VC,H, oXҞ#^>p!by A Ddoe+.v‰LȼIQ|4NFC9|ݷw}YUPQH^@3ٮhBH{LE}7"Jayv\N|]H Dwy6ޏDQ3^\=78\\~ T\y^>V}zGh+W4@WT>s-vCa: |  y'.p!r,Fً!B2_W@ 8G((OR^Sz53ۡ}fT#7<cDAk/E7o[l8D.CT g hWsBeW잾F(JmEFO͢ZT#g虻&n %cƸRR'#GGy~/DL?]EQEQEQ[(((S"(((*(((1*(((JLX8 h܁]\LZ @odt{Rv4EQEQEa쿏,ޖnOvyŅd-ʛ7q\7H D~rVc `039t})DǍ웕(2W#M|^& {>u @`8Y;CQ{Xkl*VE6?dc]9x8kk=EQh\o%H͋t׆&|"G֋ ؆^ڱPӪ$P4"+κDR³QRNg䎃WIz8^ tD*[;ad$΋S>Rx' uH8Q|fː O5v+=A6CfkQWEQjN`2xHBShAλU/B^ 6`%R"!|gV&_yg0_ue]Y}eP*. v|\5$8x 8h{@PD})I@7>*"B5/|.bTj᳁[ͰMpX<*5d[fH!"0臌Ǜ\ l7 [lA4St)p g@zU6"#ȇ5ˌ `yΛA*Ŧ(R~"w"#*o7jٯl**@z!ْʋbLJ>VO7"͟ _PƧlD Y(\=lRVmy 4F@\HenH&p3bl.D~y͍?Tz'i8_E1=y=^# a'##);i޻Qb=@D A<( @WYlȩ]<"s S37**1GdKy:+:کDjNn2 l;XȨVd."s8eKKuqC} H<ǃ(GCwAQj%f8NTV=x_4=}>vNZ>2,D& )#mBk!sږ#PkȨ 2[]EqVɧ2gvo$+\TbڣȦէÜ~toP,G"2+vq|d" EYH2B\Y >)AYZ  )- s ~Sd~wz{Q:;0koU= pQshdP1Wh4MBE%3z%"!Hq DhTĦAh?~:Twuש>yO>{{]oG4t?"A˝091Fk_THHt>i~$OWg~"tT>8aV d򊙌\dzo!3{Q*1h>ȸF$4'ہ*74}+wjNθJ~?J~beXkmI9?B<1`+H> {;ܵB (0 #<Ƶ!s\,CQ+נ61Yht?nDROxɧ37!|ڻ oxcqo3qU9OC!ыm/ 8XBO":@RhxoW~S O ht)Bk;-s1w85B֡_?@Jyy*Kw0 SkPձ- !]n,BzFrҕH"~v?%?K~Fጝׇimʍ ZLspo ]@0>wvi@e 0Jퟑ^C 3{iuByl's~ׅ ]t~!+X][ˇ+zJ`s"E"d~Ÿ<ѰV]FPm yE^zF2{'Rzߥ|ޅzD;^ n!0 䩍7Qc[oaFj+ˀo;&v$*~ Y)piPgBkW, wzd+3ᾙL,x5sS?+O1^xٌzbً^0p7+/.FOƘJ56ӊ HXBt<u6, 5h%} =i@=̝s /ߕ$O2Lvh 0 ۿLE ۗ =P#[:*N*9#A't%![1+f2rϞO 5cn_܄f^+i_@P`7J%-q˗J~?J~5aWJӟcRd<ΰ%{5`q yQ5Na߱/G( ?wH[.dߏĖIOŀMF"F,7xFWzwyxDZ)s b we/ I9y'%¨Wn2ҾʟXt0T Y2?~"*w5awj@ê>r'0 ÏX׻)nCj> Qod9#6hh|,^?*?!9.NDÿbWG%GvpCq4N6mpF;mv Hċ( GZFO/wJd dd o\m˘,pCRdh]GԋWYE ZhHl4Kq>2~[9(tkihr5VsySܽaFngG*Ýh scE=qtT6Sw3f_%'(@w[R (B`H8\4ˀy]#_Oc5 #Wwcϧg1w/&6yDU8,sܹ!҅(лm ##Cub0 0 0 W!kaaadfaaaYaaaFVaaaaUHB4':u`Zn 4 0 0n#' ch#lin^5J/8rS~6Slk/]pp2Eb uEw OtnoF&LeaM;nHR38N%91$+3b 02Wt j[c-wo"j@k{[=BN1I ']+ o ]rս*_7e([=_jaLjn`v2_ుQo1'3'A/ǝ1\ 嶯i5Z9^}ed.-X\3\WrFtTk޷|a#xOj[l#66ÛG#i OrD h9䛁ҺIw/+Y{dCY?s#kkpegISs o~|DLCJQ3`w0#+d` –SPU]nʘb.$`V7nR_>K.Īeh%OrTs ? /D7~3 ȝ꺢?ĂY3g=5k>`MMȘEGqRxrAۚ\G1^x݌zbً*0p7+KP_> L+2d#_@drYAzz&W644a=A/)!(x-I$DC7\'~'U(-n[MTQy>/T%![1+f2rϞ{?ôlAT1/)V!cr j@AhhI(V?e݁ o$j#T;_5 -id~?J~emuIoĀ ,w`[aў|Fځcҿ |MlL].Ũͫ&~wRO:а}~0`#d|r(b~K`̭'rW%aL=C|&z!KRP4rB IDAT {Qj?$UDBh{wY0]x8mKdI?)SaƁSz\Em9p* R/zb}˨l#Bdx'~K>GthX,!9H+B:avUH~^>y}(n ۦsGͮźoW0|ai!l4f#(ɵ(#zc+ _F/w/ 4c &E؆!h݉;9n_~њzn IW?HE?eB3f%ZNgV)EVTB)JW. Ƶ=2`^HӘ| UYL݋7=M~e46 a뜜5wnt! tor>oB]j! mhaaa+̐5 0 0 0 3d 0 0 0 Y0 0 0 #0C0 0 0 *̐5 /?@kNCz̞j\I׭kaa# O˔E1`Ku+7;0PĈ{N`IX3e6eqkhA0-zK-~.pW~k\Fk:.+0L. {.@!n ܇֍݅֍M%_y =xma݁Wt j[c-;O4^5zOہ $߼vp[]t"ߐ%QV_CsY&=4W53pȡٺЋv 0#2sl>Zi/zyF+0*GM8x-]ܛBro;P>.`GO_aFj@>q#3!u!p`sDK"Cu5p-P Em n\Z>\v)CGvwq殯U?v}wK;dd%jqnV!Ct ]y&F#=p; 2> | o0zW[ \X܃m8FŜ₼ BԘ]@#>=w1*7O?'Z^r@~96FN<0 JTdE=V?^A͢N:*^%W] _LHz.%32ꞯ9RŌy"7IGvǎ@M16ވ E"#(|Vĝ7zc+{PewsU*B .=QOa1p/E^3]zmݵN9Ǔ. 0 r ܊ėe1PCw2鑏ÐsNԣշ'/љ_uJ <ɼF[lA)#o$6uq)LlZϛ+entz~"C`s"ԋD E-?y w6Da!x sLc+'3һ݌L3w15= .ыѫ5u$@CŸ9w ȨmDc*7^sE!Kt  ^ȈZJ<@+,)4☴z4Ihx*h/ ,G|H?w7.S{sPO-)ܟaFR0k+N%ZcѬbJjWڡ0c˟!)rMnUI֠cnCvpCq4N6mpF;mvQ陏^DLF/O/!<4P3K T #y"l~^d Ћ]^uD{qQ6TIE] V ɥcdFx9Zњc#_^0p UԍhF>לc Fs$a4o0 Jt'Z\}}O\IEFunFZ@IEKF7]!yC:Z [BtdF zVTB4UPQpri 0ٗBW~=0\ލ=߽|#e46 a뜜5wnt!h}nބ"#CcaaaYaaaFVaaaaU!kaaadfaaaYFnDMOR/Zv=4wWuJ5naa9בeʢIRDX{{1SqJ+-"9Z)13KE#׀qyBh]=hs!588{#ҽc9Dkd9Ek=  -p/ZSG#=s"rڷcB`*KHq7PkE7D˟W"7/jtot;7d2~a=U\֟IfUx{;i QPf%x7a}WCEE؅z"՘ld8*GO8x-]^F.v w$o]^`ax9| H 2N ~g= In9jP\ \ e.˯~ߒ%ΔD+##ߐ fÕ L]N~`'M ʡ\T πn]|?a@~ 0 6! y߈Qs|m, jƯPBo/)LGK%?8BE&7fzj"wnX6_Lg >d[w_F' Bqi{Q~hwXCX}̟"_15.m6p G+0F~Lp2/܀s;H/CjW-pTatD /H"샎G#=ZPЯQhZHPz#7E5YmvTS)NG*^Z=Jnb&*[h0NA!Z3QH19` RXkځ^֡h<%h,V%|.ٌ|;2# DK *&L D7}񬇢IF3E?5i-C <EH>q/69͇?wiA>/FmVu.x A#kD_ ˟&"F,7xFD_N~2iyCv5g1CPOݹ('2ӑpсdKiH{vEzK,E ma_&__B[^!Z >BI Gǻhnhx%R'Ť*s0 ? ED aQ>@@}?OQ{ٮGm[St*xyD^*:_7zy}(n ۦsGͮ} 7aױ3צ=oB]j-n !K8nۏC 0 0 0 _aaaaU!kaaadfaaaYaaaFVa]',Stw?u@WgaaF,?u,SMbĔ"-Mԭڋߣ(ddC(- 癍vzvdqkh0ZGQ,!\`Pxb!uhK_ Ȯ7֢5NykaFڿ. 5ߊR?rp!r%T{ p2P 4tՅ:%Hk9vxM7G6/F٪X5!UcU|W`Y{xs<|Sw4~~v _>;c.mu,}UdbHC>_L>15gth1"60 '^_);qWfOx8?>KK~p~ ]pD } fKM7oȆv~ Z \[ˇ+(>fVȦj3-E2`'P ܅É>aTA5Y%lDFdp^KBi|C!!bV].;fdz> w-}ut'0 hWWVGvK7#\xP @ޛbm}hxKQE֣T;M)?@ːLO;n*r\#՗oḇӁ-qlaG|vԽc>@uϋ|D E~~!@ p(d xt!RF>Il[ԎRXїaGуf1Lf#X><+ <l_lATQ]B{4PH}>38Wr5Rb߮!6qyPx_ϺエzeU$jpK✘=$70HtTs䘎ErB .M#_/q|"O7Nu]џ db@{c 4厭ۛ+\G1^xٌ X*BP&sB%0yJ*򅶡#\dzu\Z1#45AO];q aFt!(x-Im;ռ^C1HH~^2jqje~5*AB-/Xq4FF Cb WdT:= sԽG -Pf5BԀ+Pn4$4'e݁.{( Gl%ZIUВNf[G`[Hl}ew64,Pna?P[_> ;'6EnË wNQw|R1Ķȱ~0`#tV~ wrZ(b~΋3bZ|_C8ÂPZ jj7d<^R4Y&?y▐ڋB*NG~I(\5zg;^Mz$ j\Φ|(IM0t\aFD}_rFOeL$B4t ~?xG^r!2¼!hhv,!9HEhuØ_98nRo(8+p?GgCoF&~aL2Zi$6!uv1d>0\&)\߉9f4G#9^5zOہ8/] F~gG6/F٪X5!UcUuxe<bk|108å{/nNG+@eJ&]I2v%;kĂ)0 #u:>m>IEGG! Љt?,^D\~g: W%_k x/G63W>򻶖W60yv94s簃>`]=iJQ3`w0O@ r 0Up*dB/ޕ1!<K]Ito8x7H5)Pln4 A2+Potd`ܵTQHw;.Q|Q/`wW[R0l#/Qn~1#J@%jDNyEH;!ߍ:`|nncz{^K]#Oa9O-Lv0ۯ{L@M16ވ[ DޢPǓ^6R&6؉xyA#6=GRPoKxK; }T3u 0H>y>鑏ÐsNȱJz.@!ϻ}'VN#{K![Pg1 ~k]vIi'Wg0>26Rd<l_LAT]BO8 % 6|A޷Rbw5E=@CFjX5Sݹ/3A3c 0 qG#= >(DWzPmހ_tӕOx5ߺ{/W?C?i 5sޡ&~"@1#J N"Q-d>Uvabq+2N֐)A}̟"_Pn M0 4 hT(C!'96" 3Xz"/aF.M;gFzm5i~>s4"4ۨ}OW>h%'9E!/GAG˕qrG37yܕ1d~B䘘}e Ex2 l%:[aMSɟͤ"fQEb̄1HYU· 0 H9 ˼եQ&$oaKWnᕞk#% B]2j;j˵Q(EXfSx{dwC.0᾿<&-n_788{-ҽc9Di6-LQv0X0 wd|`Z=#km4dx WI B8u,|ɷ7O%?/q#חKlKQ1`)~) UXÿFW Ȝp|Uws].Yn*VŞz 'wy[\ p^ˁbQEm$aOQmo"#+H#nNpi^I.q0˝Wz"9EHf%!?/ߐ f<_54@W6P|H9 -<[}|f%pu߮Uˀ@-pLt'ߣ<`0 ȃԈ .+=p)_26RAu(:$T&*f%끛r$_0 #3 9ts oOr(~Z^BcH֍:`h: .yFl< ?khͻz$гGR^$o`>LL6!'>ta< o% FOq{qըJdz=z;?HUSyEq><ӟ*? 0$ J7:O> EDPw1iѝ~rː-(e^Ndm׿8ݓ8ͣzǙGgqw1([H{Q y:?IU C3]a`+gЧ0 HΑh\ܛnt΍B܅-&' T^=T(n@a])?>!w يLӧ2y@r%=Ŋ̣C㵪eF81[Ȁ}2.m/j,(VG@c^u2|>Ɯ}KoaF@$Wq`m5)Chu~h"ߑXJO`>2Ć~0ĺ[~~׏}Bnh~&ϞI3tlU[hldc7s:WeL̾2?&˳5cF^HxT p oVJl&Ka&%]t^0 #}мk080B(,3vME2L@QHVQ8Wzg< L-?>xcq\ Wf ?w4+b ]3QPg"͜ U#'($5(dt4P)pF^h6{v䛮W2†'ph4kat Q[Fx".jODOn0!Z&L!M:5P A"]XwO!;x8ci'lwr#6yczt,'h^dR}y~棊f- ],aKhl(t/ `&ziɿ 1̒]/yO# udL^pjt荹 d>@ h60 tt3~kѪ ~b8uH_‰h%! aF ۂHw[R QxQpri 0ٗʯza{>=ɿ{1GcJ|y` .D ܶmߛ 2>\m?1F0 0 0 faaaYaaaFVɞ 0 0 0cO_@jXaaaU!k6A~nh8O)Z? 0 0 1v8tLNO˔E1`Ku+7Uz`A~ۿ3zf y{z6fjMpp`?p Z(p.Z`}?+p?5FgMCoF&v1N2fh ӀqvD=?ckaJ88(nw!r<~jz39f2rUo g!*H7QoQJ[;X7L*ky}0Yêkh.Ϥf3]<1Y}VF̑sO枽Ưu 0ŧsl>Zi/zyF+0sǟ\gTd 09m?BBFi}Cq5p-Py_"͟M$*?^._.CTN{97dCY?s#kkpegI ;.fO3q3o6Fѽ k)jTtJ.kt22~^` p5z隁UE]<|WoD,_\Nf{K{2؇H5Hz 0~?XzףT; M7'!ԛ{2?<*ty aB_/@go]ڄvg2 0bG4Ð3N7 | rB4BQe1ǘE :xKE~H76t~ZX1rː-(e^NΘ \>4 , :aP>zJ`s"e "dןŒ!VљH}!dvV`7;n ٩@=Ցf&t${?FQ-swJy`'mzzr@.Dm7o3xW{s>ne0Rz݀V_I$+?]RhqLo& g͜D҇xkGy4mF4LLbPųx2.m/jDCT&sņM|ʺT mCoޘ ¨r,C2:._-(l4YIإ 0r&ZFmq j6BhXqPiȁ}6v5!V{;H^~J AEej^@`@F7> 7=|-E Cb WdT:= qs61y LTm ā*+P8ndLBc]b }#}T .ʫmXiFk,AEkVJmEMk#шڭbRRlDp-Z%u1²? {w^~3sٝ=T3?<Uy>~(ֿ\LMRk?2FۻefL AKɌ`i-KxIe$V'lee-i̼$QAB$ϡ~['sƎCK^#8Ac4 j=$Zc[¾!Vᚴv\2J՞T58~TOfE2/2̞]2C*'I9 d$->o?ejL%d>|.uPM32o5hPR^4G泭Vfӷ*sM-y] Q^ -/2gQ2=z2gO){e$3t֖㇪l?~꿌/PjjK-mW'2ʿ";h{a5]gN?8h~G/|StKwh#35{W}s_d]"b&3)Ǝ9g-Yw'd^+eQT#ef햩fJY,y2݇er-U^R׿M~̰̇Tz⋕"?gouseyLNȼofPr|}_fr e2sd<6WcdA487#նz_ֶ\_PԙҭZ+yZIムa;ڟyіr RW .`ѿSf蘐@_A\T"[3]|^ZrN/Kӌ5kS +tc[F"騋o=]O4B3m}=u<ͽjQ/rr}U>U7l͝٬'بηʍub8(E*j&u7뻯J_Gg[O?5hd'9lbX_jVno٩ae*JF_\3ByF-g:mazd}GsrݹӜ+imz[gf1JWf-Z3Lo{sz-_fqfO#+̦紩-P5n_mKJ>J߬ͷPo<SuD,?;Br=xy.q:kuG?/Y+7iw )PO,D_xp u@Wgw#c͋XfdU[jC-|\4rݖAy_ hVGDŽ$].{ÆٳSA-#&+Z[*|>7ߡA2|Ieĉ}rߤ2uzQ1#2Su,SIRĉɓ'l[%2͇el cɣ,AX")SLzp[Isɍ"짛[r%%O׭JX)>/se^&{\&V 쟫%W$QudgPߺ'ljɞ)nnF+rWi~LXmSÖ́L!pNlzZ;F 7I.A6*`3!6Z2, m kp Ȃmٸ0kn z+&@y/wU6બ+ڳUcJBv mqϨU.)ŮFgߏ '.3Q6S{W̆&yXL v uMf-faVPKU6b ).!ްL )eh`h OWU6jl Y ed`h O5I^㎏IT Vl/#nnǮ`+YQ=9m>Ȇv*Td|Bg\ek8qum=8PkCK5**˨őa6[ WR0ꪺyP+̺­}r qa67;1Aʃ+pl"(q _qKu}#0iiuPf8S4B*TRac^ PҸcjs߀Ihs2A ZWmvIDATrDP_IENDB`pspg-5.8.1/screenshots/pspg-4.3.0-mc-111x34.png000066400000000000000000003540401452457446400204360ustar00rootroot00000000000000PNG  IHDRuLsBIT|dtEXtSoftwaregnome-screenshot>)tEXtCreation TimeP26.nora2021,06:03:51t9 IDATxwxfBދ"Xן(`z^ "\DQTAAw%nfd7uwyyٝ9s993 B!B!B!B!B!B!B!BO!B!DPjEXzJ_[!B!LR lK:tB!BQ%-Ht _W!B!(_|^{7,(@U GY!B!(T+[9 r f^.!B!#<9V=>Y^q9SȺZrzc%B!BۯAlA='31-w_lNЪsLA.zko$B!¿'3`2url=~j5չ KHH7o]  !B!|VŒzܹcƌܹs,1{^=8^Pwy*(h &'uرcN6V5l6cPB֭B!B?( NVM:u+~!1\^[-Gιֵқ@ֹ0`75j$Y?&jE!B!Dj ԭ[ϟ?Dnj"o@B`ֹǶHlg; f֭[7!66vfßUmB!B@)Z={ 7urzh]ٜ ^=9:8' m=9WCs6B!B@9ʕ+7°/7^̉!s~k뫠#H_oy~QUUU`0`ZV%$$ !B!|/Pb@ȧ cBIE5oyZa` n6h4hт *ՖCV+iii9rɄNCQ fB!@%6-71"u~ȓ܇<wv TٳgFYpjjiӦ 6WѠhرcVP fB!@%9Zhp{bn:?؂}q~O/]b_Nzg5o6 @1L>GNVNۇ^G$/B!B%NƉ GֹWZou͌ʝs sf߲ >]UUB!G%V|:j(bX@ ˘^r(_G!BQ O'ƋYwv3u 3P7$}/tI@B!YhǏGаaCnvZhQJ96ǎ#""PigddPnݢd˕XݓŢق2T_M9 ?0TLAX6hYvzذa矋/ |3N”a\Z8-9sY& FGHD s si'X9[~?~Kp,m;w4, Җ۩K]OuPdn[!(EfΜɒ%K iӦX,ݻ1bD˹z*ׯ/z6mZr2*VQ!3rx?~$RiB.۰lVo߾NO!D 1b_B$`Ԏ s֯೷rÓ-1'TIZ-/V)OSϖ)BQ!vޞۯ_%KвeKNJdd$p%^yK6lHÆ }-ZкuB]¿KȺK.>ٙJEjGq~WW2 ###χ~… / xRMgW_6)NFMCp vAӮY;}:,󣨫0r1% bMnңGO(5ËݶB2VXaɒ%2et:DFF /vZ4hP|-bNWB -. )Tnhqmk[%ǐb ν+7R!K7OqGhC,mS0XцT & oBWY5h /?ޝP{f3ϵ@L!~'N%LT 7&,?^N0:9 p:BH\Mb-ď|ɞwΡm ?~PYԿ/Fl Xl>BUG*|Y};ߏ]"ä!4Fc@P{ٽWZvA&N\Rcȋ0\JLL JBᎷZшjulB xniӦM6ͥ;,jW+kMY5Ƭ"](_eX" *r ZǠ7 gtGm}}8gg]8-j5{NqPl9Jhg7ntԑRDl^qm$eWlL n]5^*Z97%aEou ؽtzm=lSRC۰:Q!zc9ە?pRɷr?i SXQFٳ3gΐCq:tP$?~m]VK:)bLSl<}7?EE,ٕ+Wr"Ko!spBX-.ŨVCnT F2T",fhYm%ڶ9ێ׆vx$ [;?{=gdYuRI7i РF^HG kL~-ˀz`rYقo;5h@mn~l'r(Z4b{TZ IT`jMP 2sa;;T XtCpmҫB1-moԉ&_e4'f]ݣ O&F4); d(¨Qعs'׿x']~a|ᇨʭ@6--M6j:u*tg^Y4> dma)L!a~Ȏ3yqʕ"Ko!߻ubK?\Mf:U 3_PBhݲ+V怡'׺=U[pZ"-y\/r6uimj0AZL\Dka׫3LUQ{d@6jbs tL+jdu$/&\NM]R bB]M"e ܚۇw|?;ۑoxsҋм(Z2W ?ؼ;2o\vB gҤI|'}ФIVZ O> 0]vw3мys BRžʭ|t'wO.@Kl^~#;vl ]w7|S|Uh!SUƕMz5 8hNNG7gǨ:[r M%ع7u/,[k\7چ:z;ѽzmob2C\ǟWѾI%iv- Y8V]YhvòUywm$ :іmllP\#^NvuVVŢБt;_vBUU.Iƪ_8lٱN莡 Pf,G{%öWSbZ-RJ0ObքULNaVBQQclbcc?~sta 09&cr}m̀1Y9Og̝il:M$!ez,I2A>Ĵ.$X~Q,_.]3Eɗ !jOuR.dضԀŦ !"Cצ׹,Jzۻ{ؓBPqzd b2^:o&#G,VOgQ򙞞ի }_Z}q}V~Q3]xD/iȅ~O;$oTÈR9MIo{';վ$i5Vhz|7deeY| dgf1GYrVZWYKY!DU>' i~cHrrr+YJzzz[|2Z>'5 Bd䳯__7a}ydOB^ Egiյin@@QF#!!`Y0 (@V!B X!PYn@r󓒒BժU}TvJ!B!D X!PYn@ֹpM&'112:`ٳ*U9 !Bq X!PYn@b*GjY>EAբX,w6*'!B!n6+J>MPEQ !88( z>rcY !Bq3 X!PYn@^e} g !B%V|R dsCv~-B!@%u`2G!BU ϒTKJ3y!B!7R dS}i&/B!ef[}RGV~GiB!B!DPGuaOB!B!fw>ͩӧZ5k͚4|:phZ4kf+uK +H=_Q5Owøާ`4t93`t9WN0 iXN£pDIy;< 1@ͱ uU8f 6Z Cx^y ^2z >g涾.xtn֭^We7}}iRq к_m-o'?7p81>y _c&ya_ h+@pW;Ix1߲^Y)pt LU2w[6/ק@^*j=ph5>7%?M#C!Bsx(%!?;` !Oo<ɜ8u?yҢYR  !?Rb-&䴓{P4^P ^f l k r%Z/FOYx:po!R/OK06/;SDu., =.p0·`xiއg`T ?x]>qm࣏ q2<ÛwGtO_//G]>Wav!x_ RLT^Š8}]z)c0}! i}ef7?*l b߂U-aDMi-{V߃_Ä:0oDm  gy4e!E@.pq\totNÏ'ᙻ\ {t~: w'Sap',/T7>WkCt'p>װpBmUenU0z$TCT#gMyǫ֠UjWv .й. BU-4 ;.*@6ln/{lY ? =Z CrPy(4ֻOr{({Ir6u&`օA& Î4^)PaIdIq$BMZF| /ҿR!.Ad<~Ku" uYT3dY-l \l4 tkX [t|+}r pM'GޝH +JMaN4LaeZolʄ8cr콰 <޽!x| K!n(a0xk:< 3=967ߛ&NF&,01V>`!ÙG<=@ IDATd#5,`aw[F`; <az0](%uK[im_^ֆLX7~5(X}QutF@GcL͙uN7%e"? |U|05ޒ_ןx,NY%vGw=>?jc?uܓ@V!B!D@)ߑu1_~wM!B&9~fq+@?|?_Bܬ3oW6P1J?#yC !B!( !B!(>Z,B!OᣉDGV!B!D@@V!B!D@@V!B!D@{dB!BsA#+B!"@Fw8USiJgG_VY+XE<B!\Y@VßvHU}BW*\NJDz G9R:Vԓ#<ٌQlu&nbRB!ѤeA}ឍ&Qi]u>8ĉ8sa1~fhkD۳Wy^&WaPL[ǖsr69FۊvYʶ^"=+_ϕeir~ a!'_ ر^iG/~ơIjk+9|h9`'hmE ʫa#Ǚn%̙MY=w k~YqRά/Si3xl2N\ꘖjX^W7nG%87KZG-}/5\XU^ݳOc;k2ȩh㓙j]sK~9-_`_񿻌t}s.,ywF8no^=]l838Im ˻~m%TO]oC=ߞ/mU^cv=2(igZU#1rІ$3j^!Ky?׆^U`mS4?Ǻ-5tmsCsa<eݥdXe1-!jTf=̞+96gȰ;=? }u}B^9dB!4ʘ\?֦}Wn]N M&ʐ-iW?uؿKp,erH+>_޴Hn~/f~THc1h0k+#O7SҴ38mz~}E4l؃B3 MUF60gd_[xsd3}4[ݑ5Q[}vCP jDG8>j$zzphx͌:یX7odw'[8Ӳᅾ$!>;>ݱa(tf޼z 8pzAՌ|6.ëS|ı}Li!-iK/ʗc(Y|/s8.iٰ/ ;NR#xj-Dh#՘vQ֏# ؗKoֻR&=ϟs~V|۾{<~SR$H`=_cdP\`x~0F0wv1+#}KJcMN] &of0R99Pb/2K8_%+`qTzh2#CKbSykq6Z"e/ʇs1EsJl5Æd3p@-7WTOSY4-sOO<?iU umw`ͬ꜖\ j- wDvL wQ"qʂqH'TջXT$i9+)a2U^wǷP{̀gbt ( `X"{2?ܣq$ʂHܒH*_ddl8_ X#xӠ Qnʢm?\֓hRé]6=^߾._'Ej=~_TP*Hs`+\Cl]d"FՓ|91I2:6O>Ea^jSA5Wd7&HL5]  TV хOa=KS Yu(4/X ]J{fӑip][;ax/]Oed.8Kg#/^<4]ӑa&Rhb̥mW3TfU04(l*B\ c֑>z1I69mt@wlS>'HvIN©@I|w:°/]v?Z4S:ߥ[]{}B1w|~!Adt阉R؈7MW-EO FTVL ӁeҔym[ygeU>(ՋseEpZ[NTp3s߮Hq d{Mx>Nϡ7j ge鹪fGc]fR&: k2J[ Q8(hQ(3i\S=?z.|̫T0<9)j2PQ}tfB͎ctl `U7i .;\Eݺ^QJJb;zp?=ooog˷8trO1l<upoL\BԋUX9SRt̅E q:,Bx&'&U;WӻXMgT-YHATPBmz_Ti*ီ9o˗ P ( K̵˱RA5VaaJckM\8?drOd*+b``$u3tn3=nE18\|}۫yTo_oI|& 6s0hBMS{/TsoʇG+F;''sjwufI*~2ΌړNvaSV5g̫0=eYs&_üGֿ>=1Brb?˖fTkh{py>Xˡ̃BQTrSB!B"B!B"B!B"B!B"B!B"B!B"B!Bߑ?k-;f%[GI ;z/Z6/פ|7+;7l%OE!=?_Bܬoy|KzdK?Hl +VKWqH_%OE!{B!BP$B!BP$B!BP$B!BP$B!BP|b!B!g*|x"=B!B!Bx!Bq@P:>tcD64a(Nk M%\G٠DSaƷpjWy (8ayO5L ]8̛ /:sBQ)`0<0B /)p| wNU9_)0n A6HsÙ=tX2 ~ Ad <2"GS`wsܳlؗ },y;< ұXxu(*>X<7O{YP7o,~zb?> ]rCo-ᝇaTւqCڗ=z(}7}{91D$Vyhp< φcWx+0^N4fsaP/?`R?P$Lz&dp~y a$X ? JpMBJTx |,2}qOI<$AtÔip%x)n .!;Κ ބFt "{;ˋމФ\] O~@_xᓿ'wTG^_?fy!(wt+Z{=sO`0Bo}i}m z S)N @'}|׶b >a쉆ڃo۠`hJ՞гnnׇy[!5ZՁ@8V?;A.A;RZeMя9}|=`TX]0(sps7}iA 8~*=)xX}=4  G+CU $%gת@<-_A*XW糒 &L [?G@cƟ0ePÐyl־ MpwoBr'$Bf<|2?hZ [C 1н qbLah7عJ ryc0axt^{q9 '$G鼮0 ¤_yfe T0OR8; hl b>@`pOcyiT`340=q2)^\|q7{D {@YC WÅUX^_1ZEޠ r8O C,0wGߩ3-tYw!|C}Mʹ_ ̤@4L5JFU AoG勛_@[gv¿@spūwq!F INvVnhBQXlἣ}۴N8}J LZh10whBbC򐿿W0(OWǕ8[H Kt0a!`N#Ar/UXtx~9k!~? 2êݐ9 TJǷz~\?'<X~'GǬ}OAaBK.9$V}/<*s^4ž/n~+߀{?}np(e,nnP* pKs‹eW]"`Yl2TphOݷ}B*m}D Vk;hAu7g/˰b (7[=/iBҜ|٬uޖT IDATa ;`DxH߀ 6M93PFި!c/ - 9o_y6d/ {]}h3g§S!< qB؃ؑSOO8"O+;`Wpٰhm (z= O4VG . w@PE(1i=j = TA{w !D?phe{3 QfϯK~uHfqy\vhj2u97K&Y:n4R9h_}@ZSn=s+Y?a=x#EyL~ ejqr;jqur|S*Ji 4Q]zj]M4uf)a29{t,z0Nǥh!~ UNfo׳lئgThZZq~R;k_r ɩ D׊ JyVTUZ,AAAJ(AAAJ(AAAJ(AAAJ(AAAJ(v˦/u}|{AAl+9y7>yG(拿п>X^A'Ԓ:1~K 7Il7Ќ $Սw8P%fc3+iӌx>a8^:V4܇ӓO+˃33cHR\xz.SHqk[Al^(9\s3pIWm^gN~·O)\ڮ2!L`A8#' ޕd. zgK˸uPǒϙQQ>.3K@dS}?H/g/Sx}:uQlyeq2b5Grׯ$Gl|>Ͱߋ8u-Y&yw^2r83ӟuϬ]m9s">G6Wҡz$B2Ӻh* ee^Ov<2«I4\ܿ"d[+2 kqF?vHT),fĵaAUA!(>q8f?$Ϲak Qի3}׍$C|#{_$YYJ< ' E,FdGJ쿔#XqE7w+9k(SzfeCznr^U%Vm8i_6  lw;|=oϓk]b58d%ѺEg 4{u~V%G0&~(D!/iU DVUYecd?Goފr2ZS#ƚ$iu+58OyO[+\nXݝxLI}_ WjH2F܂h{u㘦/٫}_J"pL_[1AclEukb*|,P3l_ٸrŚ!SZ"ds^XoGs䓟Ebi?چ d!uܠdS,?lϫy$xj`SmN&5پKX3vԜ~Teȏ>VⅧ{V_c[Acd7T-Ϲg?Vȏ4mN9%pb39_ Ai =/{V4qi0iӊy3S- _e5v|5=i!? {NI2*:з'/R Co?\ëոT޴Ϡ~wjrQFl|I뮡Q4I*4 vtg2Ǵ1S9DdS.ǷdƇmYӨM<ȩU:gM3(EۋW?N߫҃ce*w7Y𻍛Ä\xʺsW>}՛mJhSrm B޶*"|%er>#kUHXV4Ԥ`m>XIB֦q<֗V#sî9qu#y- _YqƏ#9>L]-W-F!ߤ~+w|=/Ԯy>?raԎܝCfvIos$XSh.ЖQ,* QArZѾO/2瘾7wgĽ[mZjxQ 9 Ūs~g}}xuְzcXF^xtj䓑I Sdm_P/ށò+2wX7g1I9xudF:GqV{Ul]j- 9g \ռeg`S'G.ː֯LSAfg ,XlNGt- _X:{ >!'ow5˩;cɮgzD &0#'_U1O=ʿ'YQ&h%kj ?s"9p<3sTmAѦ=']xtq0D׿MOX+/rz3Lj~ŝ8vNnBbZmK@F=^"݆QH&+%ާ]If݊yh"]y%u&>֫0yż {GX7ނ ]Wta%CC6` Yj-1]:zivRb>_>5-u>9\=iw3e [BbӴSR%k4Jl1sXmY$Ya؇)-_R&|hɨCKbJVN-*O2j21C[&-a˘6m 8sYP\vXMM uf؈(Η/̜39f!7ߖAs˪G,߰$Kg Y-#Ƭ{iSy<5.nPٓɐQYGr<>S\}BTٚPOV]eDj2u ۗlyMd uVMNI}8,m==c9$iE}@3:m0x s_LVnj *txWT>I rg _C*,k{!ûQUtSTP1#W| O)`'0l3yԍ[D3YU|&~\q^#_*a6|lR7B1jޡܚ ;i`m2@Fgfs3.7˸;zZJ:pSdr`zWHqZwM嚡w>׎'QFx559W@lkż[}Az-Gɚ}ngo~ŔKA++}*+}qJ/ f^a34-ܞgu+GоfENvm5`Oՙ>aoພ4NCy -w~vb_szQMl5.Gnֆ*D(:{^1jX <)2}IGiљ=gt3.wϪ$9&(W9b?`?ἃȊ*y6 ?GoΊr2ZS#ƚ$iu+58OyOK}5Odwz,(Na:IGϔٌqx/yh˓8~SqTk˘ m~/2%`EyZν-HOgMU)oXo9^;V\E h>XIB֦q<֗V#sING< [J!Gr|/}Z=I[B&IV4I;Y7,V,oү'e|1کWI޾f-auas*Vv15V$<#By?2*3}K29͝q/{Uk Wz?eu|G2_@8?*Wqu8~D=ʒs8,؍HK:1ˊ?px?y~^[>ؾoy%Dxg4m6x;Z,lbf.CZN2 2<3goNf%=]Ø]e+b^=#Kg[9sMRbrL(|%S2sEG&)(f&|a"TXMj"7o{AL[tq0tid%Vm5D*CՉ #/YJ/"a8Z̫Ҹ xck~*.3R+]gJnGackWMls{&yfM &u>[RgՃv7SVx!%/f~1M1ѺMo,q:E[*Iw~q4vdlr -ps) "bҕwq q.&eI摇:P,{ɼr^A%SV֘| fL%ރ=ӘQ^QYWQ9!>"b-abċ0GfqƷ,.ٖ_b^{3*[>>v΃sy,O4b٫tΪŴlHz w9|K|zt_Iij#ڟG u8tfM&hݕs _ivg 7 NEskrOevJ1_#v`?62)3j1` ?VǑ3P|l򇦮:L2gZՊ_\u?TPB6en[951ͨ~sp-3;q޿S1v-c*dNMU]c/^ȝ7Mbes$2F6FST̋C+&JII|T ;ו;F,f,||DJe|(qM4:a7M6+{Ơnno=D1V|uٞAݔ#}lѥ3ϋc6p*}DA4> )7L7}t|rT.;d^N"ScRu=,gA4rXHQd¬};d.Gӥ^MzE3y!჊QZPl%N#=df&j ,u54L&g>Z&ЩCU-opLmzv?|TlJm~srBKV5N>[jK.0995zahZQ]LA)׊RKB47krvAAAA AAAA AAAA AAAA AAAA A8']b>#9Gє%5?nAAhzb9s4?ZR'܏y&ƐA))`T7]=4nv(|31OC{sŕiFc9$wm~!GOEqi&p~{%}[2Y_AP.tƉ-myeh Z7#8J#_ڱ]e!L`A8#'+}GI\J.^!mp͑+]a IDAT>I屶Ykǯ26u}1Ug0%3xaXYpIW_gNv'-%4:Sδb?K==c)8F-ev9\Z.c'͕t(tT:ii4kre?֧Á Ia:E&y\y Wog7g ;.zVAP4NC ίnbt;>>9'*MZm"b^ {gh{EGˤLZVApn2UM]_c O+B~yr*[П1!\PAٔXywCB>g̔ L_BrQ?e3.>ɪ$8& )^˯40y$W1AVz7oଟҘQE \x{\mצ_UlbO+dpltw|QgRĈ'd!{T80/PY`tn]bw6eOsx*Hoi|h~߳K2JM+dM'pR; o[uUmדpדj{r>Zީ5G7Q&횯;Lh5bI% M^};쪘~JgItMɩ社~m B5;/}175k]c'`*Hl0U v ~jRf;cYP2jpYorosKϤZ!kӸ^Kzka[ӢuĴ YGŋ_LFLoFSj-`~OA=eaіJE_ɶ9nl(]hr%+QR`f${LRhnv@g췒#oo= " *.o:cb^{3ex%gsQ)_iՂ?mT8~{\*@?b_3s@C}jE99ń[x;ZѤֺ0ަF1`T=س<B[Vn|ƩZ bZ6$q>%=:V|ϣQ:w:&hݕs _ivgmwD.+0ؕD+=)5T't`Tx,w85Gɤ\YwҢYwF&3I1 N<+ *Fcd7LG*Vc}l=VǑ3C&uտaJTԙOL.e6$s^t8tvEY!=賅a%mvTחw9\ ;4>`M_2殦MuCnE\*c+]Evg0en[951ͨn9̙%%y~Oؽ;!o0E0VQƮ ^;oˠHZe NlVdLDiz#'%QyLFxG4kpY3Eb+{5FDqg \69grBn*Q.^U@4/y`ܺwFS+w"Y̊Y<\埁:`,1I&JmehtIOhfĘU"eɵ0O>OHuDžgݼ͸l9aQ5_;wt'zÂiG'Kgc68596XR8SKhj3Ky] ٣c; t=.ePկoG *v26~g_6?[EߜҪUϖ: /L@NN^X$꥽VTPP뵢vԒ͚`]kqAAAPlAAAPlAAAPlAAAPlAAAPlK?cx1M%b5zNnFݟqCGggZr  ,s[pOO>-23cHR\xz.v)F߫irw\3p*E?cE6bAs_LVAh۟-YS_O`k3Jm$Qv8{}!L`A8#'kGm9~'ھБΠaKf|r[_QmY +mv/G3'_Jl,v?fy.egp]n3kq%vN͕t(,:L45CYŹ|Ojk( 1s>+yZя;5# V$tJx Kՙ>ao8}/+}\%%qդdB|od>~]CKS~|P 60~Ms aot%'sU]q9J/ *UD( ծIR̓r/ӗD#6yYD6Gě*BWYXCxb'wY1Ve>FA芈()Ӹ55b)Ǘٌqx/yh˓H9{uWCѥ®׌$K??1omnϘ3uNjnӔd/٫}_JpL_K_p%dT#KzםVsC c~k. vVճXzֲ{eX/qx`E,Tѐu \~/m`1iEj׌yto__jW>~N9%pb39_A5`4[nYшR>0673*mqJ.',-O&%tMNb^{G?ly=U[CO.fH?`rÏѻmzvxɽi9Aw-䚋(v%FGk&͋/y+:uQo{n Czӣӳ39N)d#yQOMAlEL U:gM3(S!b ѥoIgߦj̍X5'(LiMߒ N!dcj.iyzmB;U8h(HA[\֛g3V4.^jdnxqu#y- _YqƏ#9>TI޾Xf-awM߃ݙ:wj&Jn1 &[ѤXZ77SLz#iޞBvdv|##M+H0y=FFci vi\?⪾.Q>[+?~-kn9V;#{{>GׯSAYE\jdg`;hՅ6sd䙁2 C,M1d1+fs$ɛRj?~d1 D=tbgLt}%o=D1V|ֵnA <UPh(d4O݊+wt1L'7=2)-YF,<~]:3{SB Qڭ"jZ2DVCfju54L&g>Z&ЩCUJo3Y$?_AP)u3К(^>O&ԇwҿ/0q~ ٍ 3YJZ=:^)7jIɋ h}Y撍\ߓaZ*i0۱L}9aWr.mY?a|).b3ZKmlr N)ut~\o_ HUڞʐq3;Ks?YםQf4AbtEBLN2YitK)?,3HT^} Bf. *eg7A׃Fbsz(X}AEc%]lA'r}qعtǥ#.Bny=dT7Xb6#'r%\՚:=w!=w+?#=;֮B,vVQĨ[/=6ڗ22N?&Ft߆!M/dӖ;"o ߦN*X=ۊdϢˣ0d>\4g[Uּ ?2BfjEbMVf\-alc}a?p)d!s2OԴFw]w"=F<491'KkJ8q`* !#Cs܎d"QQ<7u2J-k j;'KUx_!g͓pUb_X̚Xt6epoPU"#T]-/~S]UǧmMtS.1_0)-ӘtXڜr>073*ĭwj.)wDCn b^ON*fw每j3+=fysh7d<$e}xϓ+8?Gߗfb.Hi ytʪݲ]WJJ*zP>9s̕ZRP7< ԃ&t5gsHZ ?dY^Sҿ_x f1.׾4K.Zj^5̣xbyr.Y8\3A\)*fK| uTd+ 74* E}UBۦ%~~IiEq  uξƻKi?2Tw2JVyѺzh- RX6_¾qX/^5I_gѻ~C>5@jˌdGҀJW> ~L`#]Oy}sxj~|fAuT beMD%:Rh G㶩$ڗ@?raUؑi0N&\ͳ߭&N8B -de§E^Ԅ]eocAEu_kQ8OܢD^^~k -L zߟLf>b߬|dmW^L^>7 ?7*sH 1P0e'WVI{WF5`*JkJYY13oo)2|Nyy \gn Зg*,(;sǻ|p?-r"SCpHgs%s|XwxA ĩͅ).ᩡUI"î$JX2nT K#i|6ÆGGOkOV.Os$~ϕ *-rmӣLXV:A1O\=_E.1~]K[_͖N%,OT d.I<$ g2rߧ<yyL~ 6y :s<& eL~=l.?3I/Ρie5<Y2O*W7w7-4ܶ᫵#Mb-v%C4 k]͒٣c|N:iS\ʯCM-oUxLXl>k260.N\v-kGܱO9XZ Shlj   Z    Z    Z    Z    Z  @wق   l< cʬS=|.s܎F1~ӯ|8V%o&m>vN&1~HM؜݆3{ѱ51~<_&ʭ(|1;Y ɯ8٨JxZN?^N]A> sNfYLj FjjuT˻$U 73C>kJWq*[rŌ;n ׍5I㭢Դ6qmpJlYu~r5?xe>i[&攮K:꾙;0X/ S2eҍXڜUӱ=f" WsYM93_LM(tρré OCn b^OtKcj&w,=Li%E9`p\IG$[8?OnQ]ޫKםJ߸; j .|&!ZWʨvkjNgxkd_ۋfLN8tY -;oRVM8ӘUPjS_j!#[Fcf9k~%E WV_=NHc{n)be'pXY8r=KJ8r&g)woZcу?Ƹq? Ftؑ7ƦZȋ*~Wߥg4aQ̫?bf-͖~y^g39e*Q +~Ɗ4g/Cm֋}qT^o2-@ GDbM%澒j*u$C~xLy쾖z?0V6d̸`Eşp۵6YBbY63QKrYTsbIǹ~y.Q 3L4L2 ),sŲ9"hØ]~᫵^3 {eY^=bʔc9$YZ&8J|vݐ>ٟo֛FmW;:4$ ]AAySRb[ҳ7碋LZ״?}qG+A]"^lGy iPKFO cG6;/g [lh GcUk?V|hp[kF+.ߴ&ޜ'|2.lrkz_EJƞ?+)s!'Ӯ8;\[ӯobZ^9 xs*uyFt?YR]WctK1_ߊ4qZwaLY$?-eJxc=i ,]{ع7ƪH./T]Y29?'%:t`=? L%U!z"d 4:6׸A Vkc1buhׅ|@`ؽQ=ӣ1(VM-gA.6Uor`6j]7>b߬7MWr&2v9ֺ*t|2]ۓ17&?հk|:*>جjccrZ-& sEރ2!C_Zߟ]۫8l$c*b拌~5JWb 83 yli J; }Pߪ_(î$JX2nNFox.'CF}=yi$f(~ja9}K} ? 9~*wE9DRAʯ܎F1~ӯ$gf%o Vcm7$jcԜm8[O0Ա*Ϥٶs4-^\Eq28w,!yx>5rGLb8Y$? ;AӯҧONr|ӪKI%9KQFTkg3oqj9`M垇G9OG<fPo1ԎݺsthMzI^>ݔSzӱes); fp;V +/RkE6mw~n_Qq荢 -c)܏KO&Mugp)4LcK|P{ѵ+B܅҉4ߛ^҄Aǧҙ 3`*u>doďئͺnOqO"fϏ& *H*L*JhؑZEAJ+E<s|_˙1yw!+Ʋ 1(h-!P??0'ױ6ʄoHkоy2v},yD=o;:d΀XZaֈ΢Nƕ(5tiMI3[YeAU~U>U>5䌣yNɯHۆG_o[jgߑlKL߂@NtۉާQ}W[c܏C ,t-h6n Re?v$qZ)">iE +*uX\Z놆Fh-“Ok Jdo3Z'i[&攮K,fcy.HuMMkJ4/,ݯ;6EyUvtlϼH\VS1wynTHYN_^K}'_>}R-Iƃ2aK~XX> 8Җ/ӿ/=lWt^7' #*FtZ|!rޱ .VK6J$$Ss7@ -;o%?̧~Jh߯kQN=e^c{!{7ߪ5ErL>x)q [eS1SۊQ7]jǍ)gS^H o /]Yb[N>VWU"e Zb8m 2nb)be'^:dI}9 㞍ґ _]q<`B~?~0N]S]ا ƻ4pjk8YWyiy)rc gi &Iѻtjˤ-ADl jrү]̃SkvK[qI7 9SdeAw< R'9ũ O2ep'#K^2b9\cn`y`rxmJyGOݺ˽pyÐ8Ww B 4Fvbt}+ v}Ov=Z0$E5oY(g }O:WLPAfdž;YHaw9|Gs*Z+t%L^e1z:4Ftic>8Ljx>>Z|>{O=V[r9J-[5$ v[[c8(F^2bY_EC䘨+deSXn}$ZL2۴Лc]D=sW>ȉ!} /Usތ3cJ:՚/$M=jB^\s6M^:'_ʖ/EV]O.#*>w2vqfTA pv Y^}{~[z+nd uξƻKi?2;lY%XPBh]V4?w\3/|M,יq2{m/\ċp>,lBw'ђш9ε=D#G5l<?l]׆ؑi0N&\ͳmV|[hq&}]5ؤiEql$K=KK-pm? y mY+oŒD4Tl-T R&ޜ'|2x(?yX:⨁ o@Z,K8|Y/t1?ϫ 'Ӯ8;\[ӯobZyr9v].ߦ(ɒ<5wb6M2ɜxEe+?$(sSkEZa~dLjա]r]Ry'c.ߖ̓K_ +sH n1P05bݿkz-[I;oou)ŒNom̯>u8e0Cu~vmoȲs;wӲ/W!/2:gtA17- ^=7^WuA@z\8ʿ[5qA8 N%xh# ٥'wNI=v]ەLyѕx%Cnmzes5Q4:~\9w~hb,a,~&q;`S0J[wTn_Sxg;t}n\{"zƎ{h!9hhؖp wgVR5]H:q >$س;V嗺9$sy`4=Ob٤'Y8>={Zo>fy?Gr֩J6{2{x=zUg Zb-v%C4wQTf9AdrXl*0NPӯosdȫ2=W IDAT9x' OH_~e&oz65?|Uxlj'{srB;˖H?^nSN8!99`JQ]Ja9hljAͻpx AAAk[o7  ~BA6'F\p  R;HͷH+de{=3NoJ1v<(xr<gfi%o&>vN&1~H݆͑3{ѱ51~<_.KLm>GsNҟ;1洎Y#8; ϯ}ru&{X"ǟu:f׊Iނ 6N܎erR;z35N&qNÚF}=x1v&}nϙgҡ5%Q{$t.0-G([a+_( {[:EL[< YYǚs_¸g)YPewC}6_@wޢn[kDyT z^%gOZZܓYWyiy)vTHAlJuҢ.^YNCzR/VXe,ߞacqOrߔ(+, #or*#ʂZr'3p ?ە epe+&h7G ⤜oEjzM]K7m>!ϛfrci \ռegamhߓsU[f!Xfӑ;?$сlkíD|1,jQA!M=jB^\s6M^:'_ʖ/EV]O.#V{<3%My:OyX#<'\`kVkZ" FԨ1%Mo* -]0n{qd JhUf\zh- RK88kne:Ln u떦9YQ}3ꓝ=x'Iq4AlRt$֒h{IO&H[?$_Z֌Z\V"^QEJZvoSS&d ]ئ2ҠL#zQw2vm3c;9EϺ"dV8x?i];{E(lj+x)~2횑^>%5z(7rPwgoDÙ5EIЛprW ~A"h ˠ~}NU7>t%ꪖ]Y29AAsH 1P0ى(]\ .Kyxj ;Fլhķ)Jd~kEla~dLjա]r]k{2ZuzxiUfjLq7؍|]~+g`_~׳ w*lmW5DZ\mж0- I(Z?/쪷:p3\{pX?dKQk~{G ۹]>}z YE|ѩb 83 ylĺˠg Nl.Mq O _h?YglW 3F-rmӣD&+[Ơ'HgWkJ'U䥑4>aã8#ng::IX:Q}'SoT=0;=d5fh{82G#<*fyk3ݐ>D3.|!Ւwe딬 *W[mI՝ uD X]͒٣c|NZb[M-oUxLXl>k260.N\v-kGֿSN8!99`g.WySKB46WrB   Z    Z    Z ٠ Ȑض>   ~P j"3F=?o+7IAAAKwZ!˸0m}"Waʜ   5zk|tM;/imȟGMsAegιl+s6yc9b_!7Il .nIpgXM~LF_Mb##+ gck Ocx\:V4ۖ}渝?ӫ*n6uoAPh{gA,¸,?i0۱L-|+rH83t~{!'5cg3oqjhZy&Z^S~ӹ'7ôꔇ\_Ewű&s_odV>|>v_c5mub|*xsZn ؍$[cy17a̵dƋsSs8ޏLcp2΢yىL9Uͭ/*WƊ`ө=wS6)$n=O^`*X=̲$w/~($g>43t"y ˘U:mkڤ՜u9p=_vdcy.(LoJ4/,ݯ;6EyUFtlϼHLc gĺq,N-7?z`8d p ]9w{Lͤs5ߛ_2iަ Z-ZWʨvkڞFlwyxTw2 I ,"XuTZ(Vbh@@ĭZЪu\@  KB2N0H8{]~ss=\Crٚ+]bv]e!fYRhY0g+)D;'XIms.g}k;9lq}A6RHvAԪo+seUEAyE RY;fIBVqPVW#sҶ1%75}%2qUXb/kψCFs:á{;䅌4bo}H gi֖dQ fdP:-p_ӗgV%-jWau0!=Q[] VbxNyׂ|22)gr$23Y}ܑMp#aMat)U3۾ro7C-o/W[YzkOԤgeSX@d7>%̬?XėsޫuR3"BvGɫTWm9Tͬezl,٫웫7L^bs6v/ilӑlƨYWҠdX]5o$SqT.7+6-}e*ѓqh}]6hUr/g9*6&KN3mi;}<AlV1f/Vs$-.otEĪ`ƿEQ?RMcDmۅ,v8idM'oΠe}k\;lΧyI{ؕDxO6]phOZ #Xv`w98w8>"57~FkrIObFȩ_tW74F^ITe.O@az#e##DѲ=9srhIoj\1WrW?^_ܾo72?ت{d3=c'g!=NM;[aQ-[e{ޙlhט*M3E6f0g _OHrbDq&;?䓇hԋ$i1DH-nK"*I^wAi(5lE<;XAA*iugOD$z\jL^cq[bS U} Wl=?U8O_kiŊ1דOaw}P_uZ>PQx>B   R    R    R ٠?q~ٽ^   ~P B^Mه)SAAA `eylmjSYs\=   Ez{?7m}]겏"݁ZR'¬OxMrDv8 c$1wW%^~wb|7SٻqynJ4ƜO3oW$"}4Ӯ m}ZTQ 6ߊ \W6Y/LWzATju/}_-{NL.q;ns|[cc*I\2|͗,;1xϏOg}9ę?efF{.6%8?{NϢ8:ȟM{Os m0%JGߎE*mqi \ħ'70yVtÐ(4'ɇBY{P *`8gi:7Nv>(I݋K~؝Bl,{O唽D&[Y<ƾ-m9lʪgje.FjsNy/./o5U* nei;[:,ɍ7[܋'ܽ|SLҘd,k@zNV̞ƪH_ɤoN}h32&%'߱msS9;2*iyV?qq^Gdc\؋^K GY%SAU!Q 3^'O2kk&qPgS.G䋏۠슾g4Sr)uCfM/|..+tշ jI=Vn`ˉ6`ӨM~\{7=M'g3͹Ğar^Z` [Y$,{Y;fIBVqPVW#sGLEg~MM_ om1erQۯS5}me+,!{}ϲ~6_%5:;m+SAAhO_YM?Y9XxT|MwrP._T;X_IϑމK`,f΍0T{>Z3ᜳôau+zHW>y LL'gҡ ud@N9e48&0Gyat)[]O96TۺD[v 60QV=h=X]~< 2XD& ds|:3fflZ*U|#9s5S̴j)#g,j"7o)t8xfj?*ɯ3/y~:gi_rк#s3t43bW܃zgE IDATs!`_[S95kpӫGQ9mJG۳h:cedޭ6߅t_-gUNq݅\uyż<}}4Ve7c<ԏJ zYQ>LvGv橛ɋoVh?ۆPbs6v)a.Ĕ[p;If%k1]Ꮙa5v<&/lNn 6-}e*[릏䑇:zX~<ATY1f/qAD/_݇O\MZ=lkbZ lu#zh#瓻;űDWH޾tnrxyNS9y+4 ?W-"V*i2Y}=9 ø/cc`nmxY~s-^|&_ݙgp>]]|ޛLǮ4 Z3}<2ړrÈWv)cWt8Ziry\ߝ ėtWj|/F fYkCD jfLHb?ʊt I<*8Dt7vgOk&/Y+i&yLcVdb^h;Xv?|M>ݕy,Q0'sor7/Qðz!MN"l$AvH5Z'g.}xtkOKnʙZ ̢%Gjo':'䤓ȟČ*PIc.E ~X@R柃mBկʜk􌏝:5yblEnv۶zq) ~=Tb#ٯ_ˉřOQ/6BƈdWZݖZE Ux7bO{`Om,vx'^̲Go͊<23B,ư,H LQc2?Gq (ٌ؆dRʙ-K9wI瑞dHL_MSzWCx|ƈHd37Om۷A m̸ugY'ج|*]o|t|\K+V4|rm(~߭[ rrjB8VKԥj0EOLoZ M   J%d   J%d   J%d/#ѝi7/gj[{   BA6 yq4uzpgWo  ת nG[`ޑӇ糆l#X^AA[vQMQ`C:ck^-uGf s(1^>ZZA+aՒ:f}so'Wk%q*Q:;j1)8IiׅS>LL/H|7x=8c)Co !{.6%8q}{^֌"ǥ-r&aoګ|9q rs3R983^癹r"@Hcd1A{dIFw=i({<36f]kylyUiq,~1'燚B2aϗh^uj&_-9n~䊎7FQpWuK73ןO:#BT5uKcׁ4E)\ړ3OM8UHML߮d-d6ͥh.\Bͪ8 TOR{"ϧ%[ukk]֪L~zq5: nQOxclÞ氁<wdѓ<1ls=;Q0+t3Toc ˙XKOKRَο7Awd㋚8{& TVULvq/s<9xU'͇Clqbؚzge?XG6k<2CYPW/3XO/YVdHJ$6M-ͭ,MKoJq%S0wkvv\bYO9O}H 8)_Af8UHo-wf f&Hm3eAEx|`+x*M9.<8_\2y&[Y<ƾ-m9~کj惵ji{1txsp}Y}SvoFhtǼ„)ٱꕶ֖jK#}|(iG">UoNyH*F#ɪ9|ni;[:,ɍ7[܋'ܽ|SLҘd,k@UӺ*+W2)S, ;q%5n+۔ѽKL"}>]ӻ/Olr"Πg CkG3' ϭm\҇gVqq/' ɿۆ?vm خE;'XYjxs=ԳYhv M/wyw9GS󩄭e}o&qPgS.G䋏_ߛx|o-`*摱B>0>]K,urdFjpYgRi1.!\63J^t׉MJ_ om1erQۯSGG|%+si^N ~#.Qv_ƿ²bLw<8o qFl1R5۷:/iN޽ϫiӉlH]{zHmjAyDrFSxdb uKN.xI.ԍ;4Wۜ9giуm|}i:>%/xk lpS|7]Ci}>bT}"~\4El!,lhhՃֳ kdg@"7~V 9!73`WV!'R5RtA>3֓&5uHL8Иoת$XX\fd Zоc?' /疳ɪGBާn&/ڊyy rh) + r~ˣY4122BV% OkLߞ EBD$7+.eCo^:g\Ŏ5VG9Wʻ4ߑ:)(g  Z&8s:Ռ |ڝ7$' 1V>\NGҳ#fZN"K>11.Ԛ_A>FhWfQ7_)ZOOwƩ6!R)8ag4 gA"d“؛a)cc7(%XAȋ>"m]rl fDstVvIw+ϯfSκfxۮxn7G5Xk亭ֿ|.o*n E$3IO~2$z&CxzWCx|ƈHd37Om۷mpe v{V[g{u*ʧůGǵbE'uANNX(J{D|_-QuV$д8*9>&BlAATAPE-6Mx86  BA6i1y9AAې-_WaUIU߾mS[8{ xrII7\w;u6A}ȞxbaAY+O{b+L?SWIpG62w\9Eo2zݷAAAΞCޏe~%[.ɛS6}ɜG>ޒ;aleAAUvqG6=u:c ڱ/ja:3LK?ۄ\~?oމGR8Vb8,<4$q~x1a29ҙF@*}A.scz_Tŷ(4./~?}mQ?x6c?NJo]CA*)y3zDNl郍Oп6g`}- 9 /hT-hbԅueZO:+ř?ȟ9O3z9#Ye\Ģ_/!ZcH*Y ˸gSbD1\ol _ɜ쾲jZZ-q_i~]u;_ͧd˗e xzdeDY2{8.K"ctέ![r4憛5ms ȼԎgGsKefv[;7Ani(fyϡ%lls C8apɅV j7A>4QgeOl\?h@,ľ2/n<4wQl|3}~C4B#8&LȎUP#KCwiT߲nl|&ԯ3MV{aV}9Q MK)4]*'zܽ42~CqCWFhؘsgyEs4{&MM_٤o'EsNn3?8;3eZCy/g4OkݑK5ث$R>X1F9u8];ҴuȨQ6Q.-5ʻ^ Zá[>mDoe*lKTߥl''6{㠾tX%;+XN,]^ƕ (h#瓻N1e E\=W܉rY{~/g{{Qo_:ZKaDkjۄF{9p1n1O|鷄]Eô7n"/AZ]iߘgsxy2jTn'v$?_fkˉBl|9~ﻆj?j;,Džxo^vꅼ_7I;4w|W8Ih%_̭X3_b:P1۷'ѿ/Osu* /mBտ#6>vr:V*̋)4{-OQ[ӳ7K~^k#{^ڡPkٌDiޞ>G''Y-);"k}$'C$Zg{5ԏg<1y[`CU}6[ӁzκBmmTXkXPq֎O<צ tKqǵbE'[-nbS/Jt5 Z,J~bk}'T76wg%Hm.WPP&4AAAerA-}ŕߗ~!691YVRkz^DwAAV A-mw?lAA k7t7QU߾7 rD]x.skZ'Xټ|*[*٠+}xS%񆛱seԝgDŽBlAA} `eyly7(.&>[\Zkt HQAAۍ8d3~nP6iݑ8׌=Ŋka2Q ϽIn\}ĸ]E&']qP-w8?fƹѺ)s>eMRfRwu}S*(6F[JQm²sq9Ԉhy3ޜY2N'pa_Y_ Xt'~ߓ֍|΃03?{.6%8q}|ޖ* +xϏOg}9rgO&GJo؝ZWmqi \ħO鮻y7RpL_+o&?c̥q?E9/_u̦ߝKL0(8z8 Zе)|VF8.:nW[s.kVGʛJ~:ney}z r;U;B|6Zw{B^sy/)%y`&ޯ h7թgi0ۭruC=_aGP>[s6;G>uVđMy~*D!ϿqPe< V0SKVY)qIhӮ"%iu֓M)d*fvV?\D#}ɨ1*X32vrcD w`bhPiSGSskcqTkn`^\Ww8ҷp?EQN^Јxv>\\з 6$2wϛa)<\L ؐ(4'ɇBY{P b<>+x*MP-"ޘF;! Q=kk6!Rs~qx9_o gI *o%TblE: y TT!Y;|~whn|Whl&7ްn!6s/sMҘd,k@zNV̞ƪH_ɤoN}h32&%'ߕ\z)/WvDi߇,d-i궡=s+OsIZnWn/WBlYorT>c%_U;޾K*<$=ЂWnJjvOd˽ ؠM4ΦZ]l' E;'XV)uC]lMJVUG|z{6{ɹ[~q+mNU!FlڻyAn>9[`Yx:?u2'TvrkmLܪX$,hY;fIBVqPVW#sV/Q+TԢM3ƿLn1 yu굢qϧ~ ݌%AgsZ!K=ϫiӉlH]{zMSyeMN\s71{ +/9|4O'o?筹}߾y4j[|*1~ToF[A!q>{v;k(mR*SPՀ:֌;smaYеezC_їP%{xml]?*v/|d%p}r@X[l p ;$Qxm|ө~=P̆Ky֙n6>ϓa)N]alcX9 nR!QnU<+7MdZw55:+/eBv\J)BE&^~ay@UN}л#$;i(}s!,p2r|2h*pӷ2`b W, GhY )|"@9* o\^*O_Vo)]92 (:Uwрܰ.G՜4vP5L?]* u͆à_,URӪ"@m%$khNߵ8w{[깼KۋԺlxzqtM Pց#p2y >jC* ϥ+J_9n}V(hhXḥ WuU*Y6nXZ|N08tƢ5|<@_$@~\= j.U22CWIu&=!{ Bt7!.|oЬ-AN03XH B.`׌"Sօ.aϐ}zZy'#( >ySp&4cH̀* +*Aa΋^ܽ`u"@2y|}!/ b[^\ALJ%PE,U1hx[>ٍ/n| }GBoHy뻚4 l_< _’ZpV"g8%[xj`QPQru?.i8ZJ+@yjUԃWj?#V0ؔ- : ۠2aE(1C|aŁ: ia5XoC;#]>v |JA= ?Ê@9@!Ay>4pUAClF’rrbaM~ eA%Cr$,[׍"S@pk5ds /iq|Q㣢/B@ˉlh2ȏU;ə1Ƽ 9XX>yMLt#mŮʊRSa; M7),1+$DP~|Z_ ^aI"?c|GytϨTS1.{܆l-O[ه⥡CV@26u e]CS8iѿV.5Z,UVk =9/cAA £W³5\  d Z'3ͳm[p{!C8@Ar*8 Xf}ѥpc͗8I}iHZ!$TlKp5i*^Era|2K&;NM[D©dt*lM{i /^N!.Mdhw:ŭiUdL%W@^Pd2Ǥ'x~=ޭٝۃ{`Yy }#UzA;zhN]7a8)xYU| Ւ `vr zVr&X;@ `]<8 $ `Tw0dU,kA;PB6%AMW9lSV_=P:KcUYX>oXsOVu 7JG;[8Gǁ8:@ b&uV/^c:.wL:j 늭\m9/sj=SX_EA9d>qs8QK#=OvjwƔ~b8>$|@ݺe% T&ZX=a(}AnQFo u߃!D >gz x 並j-,Bd;vOVW:,[ `ې~j)a`coJ;I 'ر8XsN )X? z@1 G <D Kfχ7pG%2Uf|ϛrqMKW. ,w R@ƒќMM=1MwciC;i;:@ق&<;SHϋȋhd;Jss-5~oyDtxf =υ(- n۽? ]SlSDk57s9Um-`O!9DPPxWwpכ] Ac--CFCOHY0Ԃ GN}0/ֵFQ/U*A x#PԅW`O}ު>vkT A %8ô/`>6,34qkꈪ6 wAN?۴aǣ7?%B9e5`PŠRhQblVxUy]dͰoUtےZͤ˞7)]ͱ8HG5qϓDĦSijf1*+)"1"a"=@jU4iˀkx!~+ !pKnWy=-P P5i9% k9&1ùwTt{FKEQ/u.Gfi@AʐAxB-GB풾_68qA ^ ˃`;®wHh!, 4 A\oN g]QlmUG(jFԮ#=GB rJ/WApv ?h-KYׇ(+p, Zu`]@ql*KE UB;;5v5lK͆ ɖ/Q5VYhDeYs;武Qbuu9Yh,Q‰hiʶQ!h-Pf-}R?EN)ςO4|͒pu)ǽU#9J{hS{GJG_a1?C!#!vLo~C<*'YÌyZ.ׇ1kpf+-M/T QU;2y.Is`"7t=Ƥ%Lԙ,$L'װˈlPgi~A}QdgAU'8;Zt N_Mdd9`sHH&Ok|kbQcZTNK@ṟRTtB_ ,[0-—#Jغ ЀZ'~|@ xґr/gn~*SPՀ::\[<aj1\-ۣOT g‘/ |C!HxnׇkPs/ &̜o+^V]Z nR8؜bInl%? 2%gDNӓE nk">AW lnLG8/l jkj6(}5V~i_b7]$m&Q˦LQܣCCz\fRKMF\ʕ FH!s0w!\,6V/h ? vԶ_C_@ `k[l} Y^ 1mJWp΃y:-( z]xJ;hΟ5&Cž ^H"YCFp2{]Ʀt)e-8~ ʦP׀UE UWH5Ywe7Ffb-1I$+at(>4~ۋkgt9]i.$`$tp|F uW-ձ* 랸H!v&dt~'r8zd_˧t z O+'PF_^)(ϗp BDlc3}HNJe=I<+ŤZL4qA+N]7"OڑXx.]ΡPp&4cH̀CA$34ಈd'߂U_(uKm3k!?vֿ;X^/weBX$"J-L_ ;)։p &.+RˆŰv O/?Mfm$W% N/|$Y xfN{.h2Lx0jI Շd w[ , *g%ф[;I_FTPEkR­8{0B=soAaR t~ Xò!9R?"bM523xqVn/o$,e KW C+^e*R}ݙp2AiSOB),1+$DPa7Kdq?,,u1\֕yfxͪ~yJ6Kш7/U߰{/ېi˖2[P^:T `mm$]0 5)4KMy:oBE,ok$>'   BEq0]iv65QzOAAȥx6 IDAT ½tzq7  C    ՊdAAAjEr[kfr{ͽ[s>*1]M^l @F-"T2:4їI/guW&2;VR˴XAe)h֙:Vn>ܟV π=aQxTMBWLA a^{ yJ 'ap!۰BE{Vo+@i >`%: ,q&<^d;0|tkZ +M+n? bPt0,أŢ6|<@m+ॱ|,YW*HUKrc?Y^ֱ6(Y3ŲpbzE٤߫x,BcQ0p@l C5SEu 6Fԗd5Fx/ z@[ L9(TX^9yMƘV3FӬ].1icRpx6֏lO+@BMA0:@#LVX_rbt SaZX:Rar*XU8})rg} O]* ܮ0cpf5 c A, ፱0zj2=-cy ̘ނ#ƋїyTwF6E~>ن;*Q9 O؛|+ֿ҇أ+Wm,,QtB.2lhd'nOm3K3:ؑM4 Mٙ>@oM~^E^D#Uڟ;Eh1qx%s'g7if?XNC ov5h.fܻ$'> #aoیówDNwCN|Dس-Ȏ$\-Qଯ76fW[[1 dכA .9wV?Ntn vbget-tˎ7d.EA -l|lp3C  U}h E6Bz7T(sI6кnh 6ƐH 8-!7 @̂y@VGN}07$ j8 tJ|} [.[ifAg~Uy]dͰoUt[Zͤ˞7)]ͱ8HG5qϓDĦSijf1*+/"1"a"=@jOynX_=Az +\;q1gQ7vGyc7f8Wn.r"Wgϭ6' Oo&uBR"IINS;FS8u~KNb%􌎢ߨ:#D٠1fo#:DX5S ,1Zuqy+Ļ-gUMS} ~?/P]I`W|A.*NaIФM C{=]9YN[z7[` |kinT#!אAnPLk8Νb##YjޢOLG],Ƚ_P][2`ʲw[MrКYԅҔmBZZB[BU?EN)#Xآ"u H!1Sߝܐdjѥr9'Ϧ׾߾r~sF Hu;X9WH8MűL06}tw vFM!q? G51Y?Sa TWr, c43LٰB^G^Zt8x D6e$OC}F{~kam -6kg J8S؞ Y@ߩ0@@L~k 5>(PS~0s" 2{'Qچs8;HJZCaj8YǍu'!Y䬛z7#x nn>Q ϫ6#KNy6d5kHި Y !t̛&/?6ߑYk8-v?!<$rZNN>>qџT 3RO):thoޯẋ23p6T/}Î_K=;@j/r^ 12 4\pU?u?? :B$ߒ Q(Yw .ۚв?ZeS+džWhlk{Ϲ萬2D^NVE$kӇo{qml.gK?候.ψŸ:`)DvD.QALBK\r.A/a] MY{>Qzk,Jf/ܺF:9]O$'WN@?; 3'Kذk7hs |V/<M\?e /U`; JO_oBʶ\e趆_ν1+:IMˆ Bu#03XH B.`״/*HQ0^gV'Aa΋r8tJ4**abX;Lg՜d MJ0)̿vct;Ǯ/w?MЬ-A( =6ͭDVg9boQklg7FHD~|s:Z .j𙵨aLBD3|{l{u|W$ 7-'%)=X?cH493eBkoER54i^ qD Zig'nSQ/hf P`q,-oWF(a3Hp^#i2Nvr8Ni __zA웢> _CGXi 禣?^!xoxz֣ț!딘uC%C1~_3` ƃJHX@y˅TPEk>"CZ7yV=?-r",L8#GU396a8 |>Зl`EAEtalT^0d0hXXnAJM UdӦt0+oSYcVH҉+ơ<a%>o$ XD *},m~{#|G#*T;wgT*c+WjXnCv-[lziP-Uv2.Ԁpҏ3Yb/AAA   P@VAAAVD +   T+"AAA jbk=K>/"7}̻g&  BY@eOɌx,vpf{.,>mlNɳ^\Au)X%1;N';a?FccVps2%F!6mDMŃWѪp6 R Sp*~^}K夗S:ygڝNq+eZRXAe)h֙:VJ >nbZ֠TGz4[ϱލ|}<W Cd& 1W*J>EdaenT {a)Fy+: ,q&<^ARÒpB &M0c+@aØ~`@?ՎeCx5h*$5Ålr4|\o5Jalwi?/!1T]f\:g4$Hxt6X-z(G!</NKq9IX{FR_ȯXY˫:\ lRg"߸0^J t͞Pue.̅Sp4%/?80Ǘ딆H'!w}`FԠ^ ?눢?r"=cƘ0 2W@@h3?,gK,5Xp' C GK͝1x]1#Va<2JvԹc߁5W4?3@ ~xA?=I3z&B `.:˺%Y^N0xNeAxy/T Z,3Y/:6WU|ZwXR%q_&nsgfҥ+M`zLu/d4gGn~OL$ s?q{jSXoNPIh"T}k"/"ـ)z\Ga)sjB2wn<|z njt b !v\kLlzԂȱKiΝՖq9)v5nnf[9Ŗ_Y_ov5l̮9෌d/ شaᏒtF6BVnpW$شw'AһA7yyK(=ar/ZՇzr#o]9Z`7W>쪆sP g?CtYc7Ft~3#%;b~S75Z b}1M8#4PY[s`=WGv4>%:럭5}tw vF2/`Bw 0ow= ``m$g DQ6)cރ*3 Lԙ$L'א׏ l70h/,V6%_fqCs*яNE$j03q{Վͤ|~3}ihL97tts=QiHN9]N(+c FNx=$k`('VA| xrBnkE SеsR |&w+%x /7YذQ&ag9,X8^9]M`LqtfN[/r䛀 ބ׿CowEi@CR>A6i٘:ﯢKx"ѿP_G tŒS:]j2g[+c FLvdx ;!(maEu?? :BrUpk]T*WMa@8y|1/54PZւG@ al u (R!QnYm$Ar}WֶhID-2AL{®Tq3MŵٳI.4fj0No8>#XƾY}@ 7';Kq`}+'\>KKX~C@y鍉&=q(j5[CQzzR.+jCj-^߆[ijw4ಈdFVBqbUZm`sbPJ RpySWkjQSjIBX1$ԙ2"xA468{X4̳n vU7{68{]dMӃYBc[\m?7*:~N{ӡj2ir&NfW><3C`AxҙtHVTB@ˉlh2ȏPvHɐMliq|\ܶLy2 $ h&=_F3` ƃJHX@lF’VXXnZpV"OHL+B"7}v$?IY Ԥ@_7*Lпptʃaq(0yXϛ%aqx$D *},m~{#|G#*T;wgT*c+WjXnCv-[layiP-U|2.@?Rpҏs{)>GPAAA   ՊdAAAjE   B"YAAAZ C{2\]5e[}7e'yы+IM^l:vAAz2qdU> Z'3ͳm[Pܤ^"~FZd$4b[9UE;Kƚ/q< 43CI.1hė׷n &jT.Vèd *MwST@ G_*'B\]Xs(eÍft+OAY`vzukL٤E_hq 5UaDg LN" yeކCz#mxJw4X6y`_wa`sk(a`SB ~7րF]<a{0.>Ӏ@JKK84뿢ՙw-S٬fJAMS/# ߊ?N,,bo7q; g7K.]i$CdEd4gGn~OL$ s?q{jSXoNPIh"T}k"/"ـ)z\Ga)sjB2wn<|z nWwpכ] Ac--oYp"r žmNWGvt$᪮ :rŅ;s~~வ2y# ki57s9Um-`@{;:y;62|_7^oZ?lYA/_amVo\' {ٌͮ?֓Y(Q` m#djÆ? :e2 gÑ`_̫S=v[ dT A %8ô/A,/ҨU}x'?zZ&,:w3@ pC Ii/46搛cA]J>-B XkcY,LS˽%#rL-p#\SdUac0QR_z{f9={k|Mj>=.{_d8_]DkǮSB_M >(wnZ =A]M$+CbGKM ;͘ѹ/)T$4}k.;YR)FX89{^[h;a#,,{WS}~gg$}[lW5O%c ?Ac #rLVq6VV \O=.~Ghd3H ׸:nI|9¨7cN !@N}mx]m[CEi[!rt)թ0~",*j(!8ͪdן(8ԅAaȻfyZPWS.&`mV`:X0>~L=f@oξ(G# Mj[yNNkT֕4e/_Kfw^5( 8̂mPkї?PH<̠ƆIo.QKVԟH:{75xFя;2y\P\/ I/2d֗ZPp%r)98ʼ˩ G,]JZ:$O|O:pM!/VǾ'Cߌ[bp֦.i?xhT6^bi2tnhe}|&t#?|9bܟ x6E޿Ķ5toլ:~W'  ^] y_>X,~X_axs5&fmU@S1{8s '%~P~_5[Ú7`4WG-Ȧ63fl47+ #_U@/5eBM92+SI>f_[PlP&ir&a6vef嗆px~gI qABN͠HrEr'R84D$[pl'.dNwGhիԉ^-picSA<7'?C'gOά,,q=Րd~ ט$?#B8W\%?bJ*zZuoaT?ؾrT!+X zB?,Zwo#T (P* P=tC7x5,?vw~0ۧaSdDaZWfH‡# 0 1} |hS3!K¡wSj>/fJtgoYr 4Uyq?Ij'܈ʣ^@vNۍG*j0ߺ*rI>Sq+VOJ@y zbw>ʅ﷘x[LoV zW$$+)L7 i$PT? hn0<2Jxa1۳%;Y!AƇ)`(8 fpkNǿw ?s]?td=@K@&'R];35?"z6萹uڇ|+Y0# FL#=WeB4Vv`'.N&YSgs:sh'ps :Mm\':Q9\OE({kI7#𔪒KRˣ8G&s;1 ajplE'HOQzk֑7i*{ d%V.;Pr!t @_<]`D[doYr~6:Fv'9S[Կ#h8;p8 o/4߯HՐk${n|ʿ/l`LD6(tK%C#$/|Wo"쫗 J56NX:ud;Klw^7‚pE\M  Vk/l M;D2Vig `5bX Wa|dHW@jI_6h6 ]/l6s0v8x= \ l]󯺨- mcE X,,Ǯ2oe (1TZЇ|p_AjVic-wkF7]/~ܮ߫Z˿_-oiEn۶U+!z[[)@PT,.]bDZg?N AAAZ   P@VAAAVD +   T+"AAA ߡ?-9}~g,wQ}S;z{@2@R[r%;2j zrV}bه@ؽa\ hr'*,{N5ki峲ɟAkuT`u ^y̩[v!J ,Q;7g,rny.hM|[Q?<̾GVrg݉_YulQ>8Uj8}A y# h>\2Z>Kq8_<&%W]RxV=? ;@$)t8Wl_th'V'Zҟ'f;h{}M[ يg;{/&/<ˉvmEu,1Jo\:iJkU^^yIQC\EɒPyԂ P)pBipBI$?bB;h*Y `rp|$լ|V2ŰbW _!ݜX- r˱L}LbxYpDP-5͈=ԧ-omz9ޭX؝bȿm:,(7ʛx͛5J.4Z2MAro\D1KCQK@>xRw`5 9u #Y7_U6aD2On $ǖ@dһD?NkM60BI8 Oyd~:u뽚}8Zڱsny|NaGeDTȗq2 <\oJ6Н|_Ž!$%y9aۯ5`ܼep@xR#严b8g': v`ɷ -Sqahkvya/{GjD9i^v7)h.xWݐk9NZ-! Z#v7q)a cڴ - 5v ޲fE? 06Cl$¾m/&A %w`Rd+'7%nX 6œd6ƱjIj>=.{_d8_]DkǮ흕PG{E~mPK!}2+ deȀa#,,{WS}~g!'0-n=^{h:|>c[IߓoY:,4($%JҖd|Oq}e' W//{L4/7cG ͠x䆑xrn&8|+Vr> \O=.~Ghd3H ׸:nI|9¨7cNՉNN0 ~? y<T**H[:>bzisR߂ 0h?{*(2*; mDs+AQrTP rabXτʙ=͘WSG3e0m:QYWaY8;K4RY<-z5J)7 ld8zkZ#8'=O43h914IN2oruKS>(N'\|SK(+q>tZb@Pit I?t,jӍwU yHQ-1{kS޴I<`4*@U 14y{I:OH74J>>s: PcI0k#jG=R,H/,@UET #G p4w*Y!  >V*7mk覃]g?~6EV'j@oM<Š _`k-ꡆNz;>t=7.k*xؓj(Α^J$7 ء,L@/lMm>(;/ R$:0]ӛ々C$$u \TqgqꓟWءRI\T?I˙Ih\D gWTYS,q=Րd~ ט$F!h+1%?bJ*z0FA'G y`[jȰU (@Sڐ8> #~$njxUR\νglJIж$ziaT?ؾИw]X?Am??WX/Z=ܹ/׶-{ vJHI ;dwQɎIJ=y&[w X$)/q+_8OA@Sn7SdB\q]p~Jzf@ɩԙS@{k9q=QSci=#uz?NrvEC:w.4tNnƧVQx&`6|q5]~&7.ϥùA 2`ZB=%2 ^lc!YHyHMOAZ$̘ )fq||"BuʼU@7 ^ _O{]=$}!$iȊz"a8M%kd6} vhz)srj.3\2qq0\bb<*zmw`32w\F6rI!/r#Vmis*KoNthlj8M9f۠qYKHG_aQnC(hqݐ_ I[Kn|ƴ6uI펱\z@ɍ1|Eѹ^]blq}uvdǨy fJZm28 C-5(apo>td ucU΀dcr{;9nn w|VZ~oSZQ@lz}*Rt7އlXS=vfơ]{4\5%DP-e[d=@K@&'R][7#Ľ8ÁotߪjL3 ^Ja:bs5]&tA#鸹aiHvrd5u69GM^jca6y`!Ax"XQTHukRqRnucT> od v[}al 9a3\j+&֐+r$h¢UR8ha9Xt 1"WSÕH??U"dy~lGCA8w <_@*bңۈ^դ ǃNv2'9=8Vmt\1C848zt1DW^UoO3I 9'f0W8Ɖ牙^_+cދ 36r]|`QKy{2֋9(p WyAv  zL&0k:L +CvWI$kq0dYP"A1\oO3 LP#<̿;C/p"S,Ge{l%.{ZvQm3.s!dVE+o5on^(ݻh4).qKp.y mtG-9Iݙրԁdm\lJÈd H-'&wyv&xm`Z,]q4d%7u,tX.o="lvc;@?"XɧÅBHJ}c  v`ɷ -Sqahkvya/{Gj@9i^v7)!`ͫn5 'N}-r|ow: >ƫM Rӌӏ`v|8I0?}J?N`ҠJʿ9<*-! Z#vdOd˳a-v"[O [.^SsblIƿ OUwl춺q|dc|MvCL }4V4(wnZ =A]M$+ÄIR"I$mIwiל]vT`5>~)(ձ$k!F91;dpF1}.:q8C1A$p Ð!8<9$h7 a]n] ,K+8$}1k+j |P߶d+x( )NU M핹#<jV e* = Y*Tbo1M|+Uq6֨*}%k߬T[ZY62 |-Pq'8Aқ ;{TRlrӚP\/ Ii?xhT6^bi^ڌ$'%`Y A΃! EYaPlf_ٱ6v( K49[Dp0z3ʎKCT֗ziW8zJ8_jȰU (@S ȫ5GVdGތ 9z:5{Z)ՎqlOt v7J Ǔ&z6L"*I>S^V; )hf\?+ x:|OIެZ89I$uyekڧI.hH0⧈HnXhix }\?&A س ]*)kQ Fn0X zՂG@O W5K*P@/! Uz/&~`TȠeGҜ^[TnQȘ Գ{*Cordcm vhz)srj.3\2qq0\bb<\*hwtl&@Ɛ3ƠWN#)ED-қ]6=qhj6{%pŲ[ǢL6õrn=1kPR>1;o6:K q7/Ў d3V`%d6RD e u̢48t`SD%߂eor< 0oD{O U@ބ,=Om*i4=p àd8{t_Cxp*o<~h݉7vzƯ9sgԍsp7U1m8N=|ۻmQzLK;ruPg.՝ g:+6!8qVGXє.牙a$уzpV#g] 8Vpy>Pyk &)f= !% ?C<ȳ3!t(8 mmadxW@P$20u}8pXX<=ZF7* 7A]Tf75+Sc ޞ:MYbX1̀N ݜXP?TD)- .&~/3~ :'2u`r]7V9Û{ЩO[jGAU&^eҽ LAqd fAw=ԝ9k HNH5ʦ4HmPؒ}(xlBzhiwmT8q5''@vkn2e#h]?z&{<<ŷv윲Pv> Cx1.|~1/9)>ӘCs8_)jN>݌].BR ww,r>. m.:esHM%X)}y/2}d6pĹOfGA`zUp7@΅hJm&9 hKןnrG6Xְ@/Qx5iSZAjZn0}TN~Y]'=˧%tl|`Ž#i:¦_L{柉ý9ٿaѲ'Y0h?;myL OUw+l춺q|dc|MvCL }4VE~mPK!1\$yLhz N,-:URK62NwO?*wF(T 'M\t<}I͐AN&a[zf3t|*JDI$%Fv_svɒW`5>~)(ձ$k!F91;ʗo]cq-3:/芅$ad&M8HFӱ67 € 0z(ЇAdv%!"?Պ\ W!-tnV[!]-aH̲^S>ࡀR)p?h08 iګY:_ƫ'3'cؐ6֨+i^_J%ikQNqa#[۠ע/".#qD3F$}u-*Il~-΃2tnhe}|&t#?|9%DrpBy7S.X$H V5Xlƹַ(2)tT.)%n%p>t !ɴӴI<`4*@U 14콴 R_?tZ6Gm0~I\󓱵QK¦Ӹ<U;PMI0k#jG89:YI/:~W{_axsoP VvyN`hfU;_4`Q E xa1B(ڶn:u~P՘.&_G0C]r yj(Α^J$7ʎ̱CY^ "ء*av$_¥Ita=&Δ@`PÞ>;%?bJn*z0 K.ml*xsRR(d@gqꓟWءRI\U(IٴjVHg4 =c(sԫq7kHNw 7>_qt10o0l_9;$+ Th!cCbOæ Ȉ* &[Gahu{^,8pFuH/rA#Wa3 M!>H$&An|̨^CfBd%LOClU>RÎ8mFTzJ7snD3J/a`m_R!eBJszXzR\ Yg:e6*a9'fRxTФi~-Ln!g..AFRȋ\qeXқ;xu!\w=e6h\A֒+Rn?NJvX}~TOn̎˴JXBɘ:k΂S#M3} A${ v+ $ hɐ0u p$t Ԡt! d{:+}nĦW*_eß*?f6}n"&3qXnEQDF>6>L Tz`kr":{>ޕ?8'{)13S}t]"=؉e5u69G92dfcÚе`d}=xwWe1\ +ƽrftySܕxUzVm[= /E%KaR"3J=g?/A z17G0P  “ p9j(.4Z?gSf AALPL*~  CAAAjE   B"YAxtܜی1;C[Ll﹊]>rM ~Ñ"A3LɩvC82fsfVL,uY KAԷOZJ>t}LH.^ E!1[б? O]YM k1[`ធ9Z$h7K<_}J: IDATY-BV/ ;q&[O5g+[w09=8܏vlYuC8-mc"]r'\:s4<9\C?Ċgk.7b}JVC-(b.TQ~-Zm-hPKK)NQk"{K{5y=+[A$8$Gwl4$z: r;߫K[|'}Lh}Y~ޙY4˕{:0ĻV<& m’8OG{ :b/IDљ$©! $O ;k\} nCI1ԍIҀҌ]}H?{lFz7h a:;q&]76u %qt'G~ io8և_zJ}MMwuG٤ [j7aWDlk -4-;S>Mk?MV}{2R$Ů596-lz/hʶuV>{VVy%P`d @1p 6`mnav܋o¤`x3!]v6žkBr9  SfnJi]V)呣>C^܊ùW sD{aST6rl_m&ʤ/̶ y?;rOtuZIUZEGii* f"Y݁s⴦6CA(4Ъ8i2*@%y'{Hj$}Oΐ iVjXYw֕IxHz7DWߕ/T`g a@`28 hx`8/<,F6'm } &xӣ%2$tء3qю`=c9e&Cm8FVlz3=dy/TYW1U1fc+AΓ/W%mDIrvEs/Q7V.nظK $OCA HUV-'M徍^ O@JhlI}w&#˃*km#7nYXxHZJ}!AD X d VYŠɀL+.#qTJH Ca; ;\f\:X}9ف|;0%@ vд*|M_I}Pfjd%8BD0^[r(ɖ~Cd((oss\ э>ox#襦48I#+&}85{XkvL]Zi;cgO_t`% I$N%q|'i*G44)/+9!,+eB*;pZ|>K^E WhD*zn-ߏ%3$^Rdۂ <@7 ̙ QtЂ &:@QF WQ zAP% 6̆$nVÊC`:px; ViSfl_(y~PHN9QMU'[^V ,@wFMKn u(Չ=]G&TndΜ&o#9U՜ _\ج i4)v*+86w#htG8ոI9:!x 1dծ?\FAs+c_Ft]T*uSGe )-mc`zh†X6WE8p]gN Zh):hl( h};48C>m1ǝHҀZҢP7(M.W]ھL'_)i`>AEџ:3e .`A׸n$ gQTY6Jn\:Q]ZGJ!f'g^J+fp.y|Jj*}YNou;I\zir֔9Ͱ\DҔÛ jFoXZ}QȤ]\|3L4vP3^/red聬[ iC -ɒ|a *jA+T^zE+jAahѪL&<c!8a~M yz>h\W :\&/<,έ RhFK=n{8_C׶9GopUq1Ci?=֒{uvn˾H>;d#{sٳ&nc鸿څS{hر> '7̟\kڏm*'GKsp/xT$mSZQu`bǽ  h.9x /SqiZ%$BW6]vH6ha2PJ%P0 ^' ͞o %=]ᣥ`g%b#0]tPzyT^0uTi W` &l\zgF/Z@ 0~ >~kCaX<\yU *> | ?g n/r,/_ )ϤB)'-`eS޿wYZ"IGrm<, ilū7D_Y_Aʪ׿G?ZMHSeiŭ_/Úߧ>d L/qңM&6   B"YAAAT   P@VAAA(UD +   *" ǰNVlV@Y{ׇ //%]t,  ELM/m܍D|V"V^KrQ|c\pobA];C92 e^Ï\K4so5cK7~T}LoetC9.lrp?>Ge"r?O/6xvfqdSs|oqm|R M+ܺIJytU+ O*ՅW߅UD{yqJX,{r؃j70| CPN\$CF> %ʀ Fð9֑. mRK%h=.f9aS9ۭ/ށzOuϟ m59}-O-lzY~ N xijnoM]\k^4k>@{⏾\6W9͚iw*L!vrg\{Y< >qP4):SwSX*9=n dn2\(e%i.Fcyq=צq >{|C3V+?c% M&u/?*A'9Bl6w 9ovvpr9 ÌӬƁUr0I0r*yLP~1l<yj;c 7 4 0<ĆŰV9bx\¸0dg/A~b*a0$AHo3bazgfv,WO[𨛄dAnt_B^YW*HŮ8/n35}2^v=So^{Iʻr&p*z-guB+IÓ$W_|gR !u#yaR+4 4rW^@' Zs+iطx'+6eL[+YcV&"T({OGECN0L÷nͲS%.AAGCjxAL Ca{)OIz@p,¦DٺTkS_L6 rHIWO@єw5FaU;~'n8YpvӒe]ƨW9x'$}iʅX/Il{'xwsc_MZh*"VQޥ;#j6#:$K*2A(vvaNc!& {I*tjЖn~(Gȕ.Abٻgs]A%iU2!(--@,Ɠ?6Pd̵Zr#dM5ٽ.Rr/W7U1lAXy[R-WJ`VqD75sT;θ^jJ4 ;ɹb.чYh5f/U-r2(u3SKfIνX9452 ^A"V䘵5C 5E/[qHZJAnI-Z5i`\u=1Zu !I.۽tpd'2=^o.d ]B̆V,B*tɛ#QU*]kn,“E\Ɏ"WWU?J ctymҦTv7rDװS.yQ(=3IyHtk5qz i4Igd@=(_%&?ov5wɸkr^fXY7}ԮYH 7Ij[e݂)j\^;ʥ.;Ga!]y1>|4 m1=ܸ9tK*9'B6'|e酢gOR #GX5ΊדpTdB7bp=̅8a1Spr 4{{VAp+EesOC'v˕YHI1K z; %Oi;5+SU[K4*wmn26Fgˀud@xȕ+˳nq+ t@4]A(Ap;s#!JH]*J` ` *]!44{J+'/MYXC0&ӨO :?aŠk=@#?Ne dM-Jb培e B4#yc=k;#\]A?:&%y|8{ˡkIGܽs~\u`vTYwֽ]|ɣκ2FŐ*JK\ FUU N^s,F99.$ Hٵ JyWIq}HO}Ӿגkg!/$@N>k$[=B_Nsp/xT$mSZQդ}]!X>XKEդy]5AŦ0}ز 2 F/Z@ 0~ >~kCaX<tO72DFnK!\ Wiu.Vg(=<*/: %X,+֘q~r:_|_6 j$'xt0'4{6̚LM/ZL*ˉ8i+dmmrI:kaaЯ_QJ+y$U y{[//{=ޔ:g"wHA*C/pxU*pr2tTg Op#PB۴sĭ0~r܋A]^ KxF)1Jo6xV]s8`<_w lCLHq1W@P  /ep"θq'͸?@ZXB1Eɱ|NJ+-r9v^pq_(3fŜ߇%(Ck'N@X#gE{G*5FJΓ5 PMf_<Zׂ+aL_*c "xB j7B/[p|}U|/~u,Lq! jL8Wci :H7,9~x4Gyp^+Y .[=Ѱ)  F;Jq4ރc`TlH-L Bi;[`8c Z&8XІEw nB:0GœruOry~(:hGC_+[6_ja>'Y7[S̭l0Q%c qr-|kʂL6VMdZuޘ\ X ORAL & IDAT S+JNк ף cBwW'C/8!Ȯ\i,̂)x$/IΜg7~3փ; A\(> 6vvaNc!& {9讃G_k+ Y)z U aNXqPd_>oB﯂3qX)Ng7-6Yxm zvˡy\gx53{+)JɎ J Z V`tЂ &:@&B要9!*җj6VU>sg/>2&@Ups+*8hTʗv9} a9;ew N CBD]2g `n@bR<>ARG+aEY[áK0P) 6̆$YBy4V)/>o,w[S`h]3\r1++ 0k;W&Y7G0 ~ӦmVESɬδϳb>b:ԪFLՁ- +D#^zO10=n,E0x<$5i9 Ϗ`1ohO pd;dr2$.NpEO")'AR]nA,2h};4ܸP>m1%@] !1UJWYʺοXر^y[)ޟK!o<(e01܂j0N^/p. k+ VAcCݫO"+èb8_Z:?{AE-]W88-ɒ|~Ħҗk 5{5 tN*@ ͆}M%:*6zȸ ۏ@X03:հt.`R[ `tbk1 _Z 3ˌP:W^O/M d>CAgAPyiPE@xg86дe9oUF Ra w¢pTU9Jy&c= EP :wYZ"IGrm<, +Cy6X4 U {G_3*q)R}XkNJ̷E>}A 8egm錓o.9P.AAAJ   dAAARE   B"YAAATPxU%{Lz9XmZm5wf^MX5axcAAAxY8M/1w9z5@ڌ x=׆˩88Տn1J^l.\; DY't|hgkI þ4e!X^XȲ@+oP1X.e"ܫCP> 'w}md1~ Y0hUI|| +MB=|:4~tG9Na2t v5a h r}-7_SJ & ۳!P,FV@ޚn%i|xOU8;IOͭ;]+ w;Y(d<(qпqzp4ˀ p<\A B0 28#͆^`s+S&i2'wð{OosJʠZ  tQ8D[Bb`Bp{Bw>˳ W G\KA !CaXǛ:M2*x9Z¤@9ffxX~ޙYݙs ?muI8H剓pvx`HKp`.4@.Zt0KH[hLY@l};6ɰR 6ؘH V@6ő+O5U` hK8|_Yf CCc7Xƴ`~ !~7FY]^ KxF)JWax8g,%*pr2tw lCLHq\ `(`28a|VPBa 2?V"zAJpGHȂ54SGpNå0?yDYW%Jk'N@X:S築˥$wf5`bn_׌VyxX~l^VIHI-<ų;PMf_<Zׂ+`lTpNz1P<+2@p,"})cn6h?s&]c5zƍ Cw촩7!z`pT@h!okʅ0 ۫x_7v@xg"A{&QA!FIY7Z7"+؞DQ q+WhN2>({&or T{V$p= O~e_>RA]*/V M1/p2Y8;gQ˹{Pfʟ/oRH6`d1~c5XeA ^ +Ƃ&2:7˶)'J_ $@g΂KCs`Rd{pN+B\;AR %)͕%hvK`nph j vT/bx ze#¨ʻ{CA=;x_ e '7j0k̟ ᇿy$PHl>zNA,CJ%%IrWҙP84Ora埜_U rT3/,iGȚkkг{]=!ˍ5z3ᚮ̛Ek+_)Jɑ PPA ]ߑ!C 2Xg@F_d ]BY f_ OTi ( z8v%p!!1{.5=1ꮂ3pؼ @bRA=BOfi`g kd`4 _ݴPH*OBaXTj MQ& [0yz7697loL$yoYW``"ϗA-8R;3B*tɛ#QU2 hdIP::n_1 B{VNy +D#^zO10=n,}if2 apm< |yWAOOr2$.NDɐd_(}_և`2݊Iywyblm6A, U"5aP**8Qx *kgZ'Ӆp(,6+MGl5J[Nq d݂)j\ǻ/twhraC(y2XɈ>JovVLA=y/ί{ڧ- ?AswCP*0j t#бTԂzus{MS%h9 ^Os63H`D&vAxɜd9^_{ ~>`P%<]؂A;pRjhKƁgCˇ}+`a qp-Z~u~ ^[L‘c(e+n!44{e"`Rp>ʇms^e>™p}C-7!`{~\E8 p8ةl4x%g""y -,8,m|G ^' Nn %ӣ P-_:πS&T4j1n[ak.;meع\GJX{H SK`LQ.6l) a[ Z .CaWJǐ 5,`B pߐ0B #V¼^k9W`Rul(T?- :VӖr"ZYXn˘<M1@ďh,$ΙX/噌8hU+ p%t$ _8g_I+BY%ϘG?Oy$?ן)u椤x~|ߧ>J;R<#3QYtIgzn   E   B"YAAAT   P@VAAA(UD +m*3n]*`),[+]r?CZvGAAAxǑplzѫIZgf\H-W2i;(CPA ˾Ŵt׎!QV<Z/ $G1.텥kq ~=Уl[5 ̅š0=hYS-ևi `w0kv0sۅM/u֦뿘@m8)IL9%ߨcZuwGf]f7p-YlLc qr-|kʂL6VMdZuWo tmÓ/{|3gy? Zׁ!dECa`  mv\H7CْpmWYᖝ ='Bx7>Xa|cj,ĤiV"E -!k ?gZp;'dmBd~H!@y^oQ6tP :71anr:@+@7jP#}`ooOm ?nND#LpM贻^@@ $|֛v.ȌCH_&s( ^fԼgb@_}K ^ҕ{APУ*@. f, |A Y?uz^/cRPɣՉޏž]oP-!wh:Lx*Y=?gځG8+f/ {igqoCZQBI<޴P&ae:cZ`TܠQ+LT~i=wj4_~wWTu{H=q,06vģD./˷*%y]C |SX5:ͱT5cp1>}3%uFoII%q6]Yuy  3FzкJTyjBɺ >UPj0L 8,ۥ7_x9œ0hʼ?<5-X ^ AgadC` ~ \;~Q8NԨe Ki҅N~^5^,L,nhyj2E9vϋ_{G\5A\+c IDAT ?O޹/Vɚ^/V7">>Ն v/xgM^Áhm8hK1N7Mv$_SC0xs y Q][~ɏYͻ0+yTQ[MQ)HEȕX/'oi6}2ݻ~|* -)p3H-ۡadؘp0z=㴢ЬE.%9+CC EgνG'aL^Wq Ğp9 PЧ.5gl?kš hYV+bv9YBL''7dC"R<>)~R%aQdΧ|J{|s؟pr5v 1:ՙ V ^ ܁T? 6‰;*{g__eK  Μ*k'/["k-]83;{&?Oʙ\:+ pR<%9$ֽ* ,K@)\^bD { д1\9 C/`ok.%Ë?cyk'  {_:=Ex}  s~ k/``<4=EF@p8F_|`sڎ80s߯POsA"%.Hf 8X((2\u0a ~|~DJеrYwÒs5Mp(o =oX;Wb/~b+5k~&P }zɕX#/uUR Y͇Unn{m`~=&,-}?D -끟} sw9םY) M;,)gx7 z vѺpg,u!VQ k99>,Jr%v?BB7WCL(sV||#xӷ`pؔ _vbN~ '+¬|h~Z0~v&U|0_W"ݺ@J"=\ ps9d%M/òܓdwMB;'A/U񄎯K0g6%=Xʩ wwlf4\X~`g0k/\YUjIHݐjG`QQ ! 7( ߮LvEP =7BpvBBˣ`o ;| RR` IP0x !w`Pu4Ư|®P$-&!7ѶkMޱN7av\DZj[Ha` n͑n%yknxO9Å+_9ÀQKQ/jp8AP7}<+fah^*pJ! 9c5C?X:JE!H['"})L.Qf -/d#-T&r|Nk33]+ GB2> ZPk+lrDEQASc_lQ^4 y3<4 5/З}aS>6=EG8ҵT&]Xm/tTsӓ`h7% K(%|<-xxY0>¥#~j5GžB$ -m8>>їVa7e4xDr`x*AV&ݡ^QR!*KìhBfn pZϟAD򧽔.ɡ^w)[].~\˃V[H10}Vq uB'B*VA0-Ca͇J_XCkŽ7||ツa][ث+6ܘ2LuCk@r Tհer_zΉ?k_!Da%|fOߓw3ůW2|a>? k8pw2ڹ$;NZ&/Z,B!¥H"+B!@DV!B!D"B!BEY!B!$ps`\W14| -B!;.Y=$aLu㏭3*ƊwizV7suƼVri5 \ bTP䏡],&]Af{ KigEV Šg׻C`%hWyDAq|&uFq5JwYUrtKBd@1%;n,w{m95,'!u:Ю*3.E3o^njh669Bm A `0kly+~,'hF.9M-?w=}_+N.a+f<ҹqqgֽG&jp$5$߁^ZYm_.7D@mL ܡ$4LGat0n5Op6B@Y#!p1)dsZrE* }03oYSCQW d=4~T0|[^B`w.=t~;`pz{ؕM:]EQ:[\dw-61yϭT0G园ՌNU_H}g.lC-H+!:s{r?,UZ40P*6N!j< eCq\^YAr%NWW NEx:4w ,]G7IU'F%| !s%d#"W4^EanPGR#aY c>ԒX]9 zT=U \(T^8; 67k#'$g\?Kq믝I)Ʀzf<@n,֕x)}̜t]p û$KPJWo%!N"6+g!A}vͅdxv\* kٹ!=ނ+o6B Щ7Wu t\0ghlq^ ynp+ d!pĻ1I.|!p\ n;`[\M7!d>:͋E.FhG˝xÛ!x&9NwNǮ$| JW[ZI6ӷRvq[Jul`^D.|Qx̘Gf_aN>Y&BUX7^^IVZ:/Ü` * $Mə{2XMD@5CJ> J !DRiW흡v\<AǴ15 "̛[Ğ5JQ]:X,5 /qD,cW=-&>a h;aVs 7iWٗe?I]CYvEp3V- C&p(J<k@dm1GBʖChʂ5d'-#` 2{*譺xz^QB)Ф:*hxHR1ɐ6٤ !M=V1VP x{E~,m~4* 'zU.CI Og dy`oI<&jp>7 y3L~Éxx|Լ_Ā >P{IW"={%=: 4eplf9TN4!xtd !*}E[n>rUiv~ PaGP%xe!#I>#?W9`Ha",w<7: ʩ¸y9|ШxC $b9?Od.ɡ^w)[X\oGs$HE%Dk].o"C_xWZW*Cm_3:YRG J ige3ˊ/<|SaNHzqu\4e^/T3l-:Jdua(x L_Fh>? 7mU,Ԅ"oy"Qrti4D/ { u1G@$VJʞ 15V/Wz!`PYXK"~,{xfҡN Y&wd Tհer_zΉ?k_!Da%|fOߓw3ůW2|aN? k8pHLIq2Zxe2 6ӿ YG!B!$B!B! IdB!B(.?ؓB!B'}iB!BQH"+ 7<;5˹04| 0/?&= .B!DÓJ>VZ"G$n:cFWpP+Lץ yuzI=5 \ bTP䏡M梘` 5:7\_M =+BдMp5V?-堼+A.н:'R)82onH=@n0C `.v !Ș5:ÀNG5 cœW! X0n3Fâp>,VHjP M*V~-fc`L#H:fܽLZ~)# [c `tPį0gb\WfTܒOsonڷQaiJ]n?ĒOs\jp$5$߁^ZYm_.7D@mL ܡ$4LGat0n5Op6B@Y񵬓G*~BhK'S0uv4~M{;Y(pWCVk(uyO݆.o^0v%*P\w=D=% _GcG/KzCpӕY~"kcV.J{Uozx+ʼn*~|l`WS 噲8c#X]1ǿtz ͇yWBPFٜ)Ü ^ 'Qi `<HE ]݇OBZ ~Ai œݮς]#Kqo9sڜT톡J,rO T4KL`X0| \H/tpFz]m6+g!A}vͅdx= kٹ!=ނ+/@a,&1` M+%[y0jlJ>GA0f J{R-;$.B|37: 4Mp,&϶5BY+Cagf|nS~k+m/AO Sª0k Tv5Z [t 6|Ŷ*\1^K3\ Poc?!2Fp/u#1qυ..xIZ/xaĬ.[wHsa(0$Aom`~=&,-aq^ ynp+ jcR`h 90i t ݀ !(LUO߂aaS2~-ǷBTXsLZY_܍U`v,| 6ʣ`ps0Fu=vm7gB`wH*M7Lxe|~7;ލM*l=m.w-P|0z+ӭKMX.P8}%Y=NnD`OjvHh+2Lyu=j"$]u`IdVdU6 uf|::ɣ8Bԭ8͝}ݓ[U΄27nlLQC9QW|yM+(dϬ{}FOָZTA&6lϚ7-MF;dq2Z;Pe2MLrB!B!\$B!B! IdB!B(plm)̲^9oΒ,oΒ,oΒ,oΒ)\#+B!B<0Id(Lh^oBa o RzKGÌ5.,$ @? ,:O)\)Qă_ƒ{Ht+懃kP8v&oo?7weHn$1$:J:[+vc?Οbr򝙹p'=Ep?([PI?> V+Do/֡x 6U_:<(/Ox#v!pawEj_˿ڷcH9oV2*\~3K06oQróT+G*asڊ~~ph?w3_^AP\&֎#⅟cS" JqHBP|U&5+M|ะp$i3˦}olO6rɌ߲JWa+>͑pNKȵc|'ŘN1yif= 园xjx+xbn)L׸>"Swh n ̅o~ߦ`n1 X.%= j)y^QlE&6H W܎~\Nd_v@nIfρ#:s+=;!'oUAy9CLLTs<?ƾY5ߵ/VPy].IxL+n+/i'b99:>euu>[ AA0?P,-õ0eDDC0V{C%jU'H_ìFU4 fR5峁[…/x8z'` nCf_0q><nkQPkĩ+3|; cILI&6j0֍J|@؍p{ֆ?@qv΃C]j^R)p*  З).ƭݻV#ĨW-v>^{~;6];+7,ar`hC CնPVMX1o͵߹s΃/;w~ hCUhR5LPL#@'\t|TR{oMI?|x]a‘/, naŜӃH9ʦI<տ5|xiKصW-YUnPƀʹ@ys/l˕OjRM'gJyUjQ\ P:- 1W*Ȏ( }ɔ0qއX$LY+k7LF.< @ō־ 5Y aZ+iϋׄ(3gCh8=7ÁhBKb~sAоm3vu1\2qx>~\MxPêS81j/qwXX3ƮĢ|&$#]+?(QF6*I*=Y_|">F1!bGz1ieUx Ya|:ƀ,>)GIxvC?\GuGQ@_jz:53`gE>'Nnՙ싳zk?^:Pƨ^ z_)"o#Jo<kDx<)qo}HD9i^Pyb;F^ƥt2#V ݃Kڔp  sGGY [Nd7#7B0T"Btchl a{O-R(Wѵ˷`ULD J~ ZUIGP@_$BfhR^.+ۥe|"waџq;p\BrI)>KUX=3Wv %ꉜ5,sl4^1"Vѽӷ~L ZvCIh'?|zF}Ѻg:#NX}71nm} Xz)ܘ}"ī$' mS^ć ΙSoOiU ?r.(SL?T*\E˃UPۍK :IbC?qE)w`^ :HJ; qfH2pdUҗԇZ픶S5݁or |}^Jt~iϝ3C;_g <nFǯR1( T۳OۦKyx+`hkot%nFJujyM|vAFZٙm%Tm b%}㛣SV~ Fl?myh F1SINF?BUs So2`_z1Oagͧ?sיY_)g Qzo)M-%?9*{(1i#[@P' *~8 [kdG|U=OdiS3<,nE}IJ>نȌR+.O`DŽ^tl.> W p; P)"ZA0u8+ _`L(1  <J>{Jqxu,_ #@mgU\zk^R2̱o .3Su Aa6I\L6,{cѯ}.8ы  oPRm=i7(x-_^pp|Y)Fgk`D6jq6rl~OF|4MґBq4o~\ >^+@eJdLfZ]fMB!"ߩ<9#atJ*T/Teye<13CT;%B!Bot]zC zuߗ.)+TP֮m6P@?m[uZf쿃wg,VY!B!pa:ԫtDzbǙZbuku+B!`ˬ3$6VY״pk$^7bŦz !B!,gm(}[>weٶiچ)mbIdB!5% Alf됣D6k [d;HkB!B>gZem؇)D:ް$VlܟȚp+ B!BlVٌF1~dA#kZ[c%B!BvP N^3>)%[7gjv[a%B!Bbےj{;Y{3nr v36[=NF-"+B!^ҙYˬgY{hݵXDZiB!B^mBkoF]3Lf%-ɨVW{V!B!\CF d^rkmyI(3Kf3kyltbIdB!5K8%mٖː eF׸f[W!B!ٴ[7C`ffv[I`B!phF&v<hfJ+߾վ"9a},YnGl)< =!)`mȍ /*QIENDB`pspg-5.8.1/screenshots/pspg-4.3.0-mc-export-111x34.png000066400000000000000000004241111452457446400217520ustar00rootroot00000000000000PNG  IHDRuLsBIT|dtEXtSoftwaregnome-screenshot>)tEXtCreation TimeP26.nora2021,05:39:13 IDATxw|ufR!k .HQAyv<y^,[@:)@ =}~$ 1Nw&wf@!B!B!B!B!B!B!B\B!BVZMI}B+ZcI!B!Dө)pXjuI]CcM!j`zM!eB!BѴjxSmU5^u.YWGĵqyMAVB!BxW . +q|^ UՅYjy.B!jj9.k^cuAj jupx+B!0kwxt ccK[r5\f] ٚ:\SxVyt|^]7cyV]B!B UC10M4ֵkqMVb=B!B>5u+v FY.X[TCn.qdkS[_yZg~B!ByjSzVe=uZ\񼦖X*CMaU%B!st'؊ke?+g]X [5VjU5VB!Bx~[5[~-Nm}#[yUW>Ty-З?wOB!B!sU.;Ǡ3ev .B!|sr77J[`Z .e˖:-7..Nbq)C:+˅=yij^@Bx u k׮|>nܸO!D#1b>#.F3sFO:Cq'"aj>zy1*gͺ̶̟l/(AT!DWl۷/=AAA(Bvv6/"ϧ{tݭ匏uw#ߗY lu;U[nf5^b+**E[bnUU%.j}ԩϗ,YRrIBZ*j+?/Bv}9 [ێQ9 Ϫyt-A k=z Ͽ^En !D3OVX|9gyNGii)AAAt/Ƈce:Kц֯Qn?LGa(!I_'&Vz(3)Dr'*Prl9tX­DN{[77ޛ4"?$QYs^MwXwl?KMGp L46~MI51d=Lb(W?|m#弍v7n>{})&ԣ~ζ=&lEUdƮ%x{`4a ]t;29uBzyoK2Tg/dܹϊ;oP&Kr \wmΰ9j$e~z "hk}muE_w}0`:b4uipoK r:`^4kq]Ưϼ[+*w&Bk@Bo)*Ga2G?Ly=җ6kqgws8CQdGǦ'B1m~k,Ts2Ыv7O'!0=ۍI)AU갔}ޢVQ*.hfR5ty{m|YPƓy=pˬbs۷g*!lvr>L*_c>eᶳsg\o6iu'vɥD5Щ{ !~zB MtIHUj](pd=zș3gcǎ!C] ۵jtzzf}c54يTs\Ysh#ȮY .ԫ\-x߮t גIm.+?")=B"@l| ]úG C֮E `P0NdQd/`GϓX<+f{[,j5aǞGY_U5Qߓh]#t eF ]h`e|ڗo?u|BM,ڋ屧q^|?x0ZbkYjYgje %,ޣ[?K0/-pol{a t=Fw#TSY _ u'AV O޽{׿O~pl6%`׮] 4!AO> 4N5LWwuF vm. ^nCΑmy !K/aO!5WEp[iͷPR㍡_?ڮZC;,k:9Ntԛ5RhBádK(|e3 ;bV[PRT}?qޙ8;g $%0nW Ӥ(G8uAChvhȨvÇ٥O˰-zlִN]o]M@J7e$Md[$fMMu'zرcիk׮2vX&NȾ}xwoxꩧӧ[ʙhӼԵ"۪5dKڕǴqo^_OU;W˟U?pBѥ7'sssG T|?}+Wq  te `(2WKhT^ӻ{k6oc_I'r!.*[2Whuɺ՟0mKFU!|vv,QY)>]1PcYP'uf:w')z{P/hl{5w7wXh߷;[~*@H0:~ԝzٶuUWfRùAUUV+&}OII ogϦW^*WCZdذaC;fL2"lEz1n_RfUA?F|~dW^ __<''^ +x*B@ ! NF70//UЪT{'!9\^~k0i kV|@ gҎSűa1\'.~m?:u$ҐZM6ͤh -~/A᝙WQ핅knw'uf/bLvwe<'ޞz#;ضu)&.%Ogt(՝ ]5V5$+X,,eꫯsQRR›oٳٳgՐ ۻwo2,{z馳2:|ЗU۶mȕBOឲLhnc0Lj__`%8#Gjh4!;SX8O<99qn(@sټwd D+9ϘH'5/^^K>N'pfgt:Oh4{Ҵe3%% xU}YaذaY|0U `-l3^*EBH^X: ֳA>._Р__YVZUٗw}%-Bu,h~Nl_a #V׏إzw ۾= !5E6f^z%^{5M֠uթ&LYZCckݙi ( & ?'F#J-$ !B>ޒ p|hn4PUEQ<B!xKVr6.XVTUɓlf+(hZz=VrgzB!j-Y[ [AQE__f/(h4rTĺB!j-Y[ٔ TVvszP\ B!Bx&o RΦҤA9V<4;nlB!B-lJWe#wIo!B!VޒIlvvvS^!B!UIm n !B!hfő6wϑU}3MkBw@!B!:}\{B!Bpv9u>6VݫJMlt {ūO*:Nxd)Y4{ xuRya|}j^MxAx LxTGZ(B!^CǏ+F#F#GS:," Hl)'3W|VO'ʅ̫s'Vv l7oIYrƾx>Cڟ6DρμF\tYhkD,$O©89IsPhe;x's6Ֆh%B!:uSOR{ne{IұOk5NdW3#h3!F1ŚR&Iާ9#T<beD&IPЭ?Q(uwtJ #^ܰ#t5r' >٥hUTrB!hxkռ$FC߳ !>&Iz^x cnqv<ԗ79;bU0 {sgr6(&p;΀3h*VS3P&uزHNƜc1?5+c2Ruof@3pK?|w5AE؞Ot@=ڢ<=otwzshk:3,>0ǿ /`-*}''18SOhnѦc ĵ#|"])0gp$EuA|O~C;٠КI+d}+M@2N3+`n"HuGB٤0g5tJ=mgFQ Sy|AV1vzͼ] Wz/-)L2Զ}] vE%'8Kۯ'BὮ}26f[hhbL;guF׸,j +Rjnbgc3qILQ``Ut]E}X-| ̌wvXA(簋FAaY3%;vO ;| ezAXNj>m k#+~ [{G_m k+_wgnJ ̍E*|}/k*a$goe9X_;>*6LcֵtZ׭VQJ#\È9tD[uE=z؃Wxqp!3|zTl/pj:-_s,jMZ{l %j2"o*eӧ%'l}d_d:4ޏqy_6+/3\ B!n%R$lteu%|F$ȶx17@7o8WyonRNaf@mʹbtRZKB/Vb@c|[BDɊ (HdY*xJw9k=$[*K؜SL+”c%5djX r8`/bAjam/dLSΓc.o< IDATMGηK뷵~]K .䇴|J1ejYZ+z͇blj/ij ߝ!ex0l_6#b-#XԔB!F1?rrlh uI<0Œd57tD<+Oģ)^;?WO&٣&$b@+ښbUKTٚwyc&\[7a;Vky6UEޭv/BGFK&l2QWH6+*U͎]U*E}O-| Bb˷XPWfaZ r_*~\ȷVe >i{ݕ[mgڍGNʑ$MdD~[6In wthI6{;Dq}yl-jԘ`}` wX^YFuv {IJw' cSXe(AT` RG_#i۲|曰|%o!BYM,oᾠ1āP-yud>h}DJy3O4?pɎ6 [?㯯sAAfON9KCWO?ՇQ<7m߽}1IMᯇϗ_)ҖwLfVi[yD0{]K%|j1Id>䋏}io%'yv89ɭO-;ߟ=ˮJ{63bbs}@睽G8h̜p2N%}UFdDO>@-)q,m$Qco@_te9ª'2;KYz`?cC_p hh8pc/Twj߾_WSino%_[B!Wf*Rz}[>ˇ}UMHY̘F B\`^{4?5@!өP\ifjv6G,\>ʇ̀6NOJW}b!B!EB!B !bj>/]R!Bf + Q^~B!2rZ,B!«HB!Bq.BBB!BJxYKR3 B!B!(p]9& T= B!B!FA';Y ]IB!B,|o8T??qw'AV!B!WiȪӧ7"(U>0 !Bx3]+OY@\Ẫ?ɇW ޓq/%04kB!B"AV!B!WqKb!B!>BNZdB!Bx B!B!Y!B!^ʵ܅jw$B$vA"+B!«HB!NT}-_C\~sd5z̊%hQ%XhTB!J?ldr":^ÈWGoOle)9^UWߞp±4/l߹}@+t.Bq ;+y|UB}G9͆1#pa^ |bn9t:+oeNb: sJRz&drPh}xOq%~MdN_>5y$w{kFsdnQj-YgXv~ԍ_'^@ ~S/|n>[Q[ģV|XNq1+ nΦoj>Jb$/%y&GGI略k9ɫ:/Us֑s+a;Lmr2yOfY )џVM|m-2']V}.0gO|P2l\CRٶi1.."I D"#|/i_ |U_Wl\8 mLϝw#.~vwz)\>/`[kGx1YMG7Aѥdo^]bڰC<NMA9O*!w2k_5Dr7#y hObOTd$xXyyO\lyUW}_u>Bzލi~2OfQk+·{Slv3pt˜pN&beP t1M > mբS|ϳel'NaX t΢X eޛ6=яڊ<ժ6-ScNN oMnɴ!93 wa<|vwz)\AV !+%5z /?~d&%"{&}W4y*(LFmA8?VW.lU-)Y~-h9huF?ᴽ11m#k[} j_˷h((fSPH˖y(^ƈ oKtQ9?ul U}(VnS05(*:43yo?+<>Z河0|dUmX9u7Krɥ[i|^ (/Q!8 oH(TydfRİw-l]*biC0gp|[0p@O!<]u?UA-\r+wwsAxYK7  *sbu+ΗJn"(/;sTyߑ=WO)oƌIMVԯ{@e,_of( y#bvs;/o6Y?-LzS8])7r/noH0͈gٔ jl 'DqגG+XM~-SnN~&Ui3]L/ϷcKU%F}-[v|J'޸UϚ'Mbaד79\T0mMӃDuϭͳ ~)搟1+Y;-?~(XEԬ|͢12՜ ,T}32ֳżQ!sQ񋅖-\rR.-lo~2}/b.[<f{{'b앰~S8-`tgP[8zc?&G>uǞz슍kamaDn_fb۠?%=R~}H]ϖy gX:{6ݕ+eLR!H׻1cn杅aǎPZ^8šG*'oftഽ雇vfbKџ'"ʎO|̜Ӳ'v(dm}.?>20!DwṰ+:VӅ?K ~ Yu^,-nOⓉܖܓk;:?weXodׄ.6W3R]\?3.T45:|ЗUh%3WO> z3et_61>ܾ0׃1W /*/: F );y:׿߆ryP\ifjY|0U `-lV*yAlsWyݥ^RMKW /kQM<ݧ5O7_B!x.Bx-YgB!.C!\]@!B!W +B!«kʦ9O$zw0Bx8_yFj@QШ*vT^ǠB!DcY!D2"n?δ(O=0hB'=> +ow+H(R-ЊufX|65a쳃^mZT ;OObPB3:Ҷ3(< +JUZǎP f![x},?Lki(!;6GQb:s]a~/)GqL`WTrJB@"+h2>Ayն`o5k~w&n>;РXA?˪-⛸V-*6՗m|e5c9{&<^1XF0/_BMKņ)~ۺN+5:JaL~MUt_w]yA>B4 !c%5djX p^Ă,^݆xM6Uiݙ3nJ{Y|jcY<}%!lNAX!ԓl5@ sy5ȀEVaeEnX7'|AHq wt/%+<[:};+hfv/B՝T,i6( |E%h^B P$$s7?~gMH9)Z+l\|oڍGNʑ$M<҆ q…0&ߴ~F~hn ʢEX^~dC|QqL\+Pfz=Abrsu:lNRJEa{i>#1A`85 !%Gv~CY;;QYKJiI O#]MɛYw {\2"?@U2Yۛwhr dK(xaPt Ops9Vt,?yc/7br !*)<B!~"+\j>/]Rl^DB!HB!է)"*W&u/%0^T3)UAJb!B!^EB!B]Z'do,+/B&oϨD^^~ٰtc?1t0AmΰurZ?zMn@-\]?5}xtXx> 悶nZ,!3L+,ȳ_THZ _,S ~a$(>9{ӯxh`pkpu-t+1T&.o30Dz鵁&9Crl4ZP)eB>}:*B!>H]??0wQ6f r f14l\?cٜ=cd $kC`.: 7Ǻcti@R aA|8Lv05‡9~.Oxa)DBTZ<'ْ%0{,&?_E`πw߅`vD C_̈́?3|;45_g= >Yg ow5ڈ 79;bU0pНq ZJb~f$CYčI(5& Ƿx9_Ek3X]U9yGOqVMGqL`WTrB+=-_|roS'O3(>(+@5]uNGB?lor_NX{.nCt]aBWX &PUP_ÅkVe/]o_SiW mgx냋t8CZڌa~5yز +[!9lMuF~t P]sdUs+]<Iʾc`f\3m b7@ԟ?ZֹezˊUU6(PAVra+WuVaAO0{?&~*Ȼڮ;BơуH9z+XOCZd| O= <򯐮^_,wA*g{$D\<~"2 2B)(:nuN@f\#{<^`df+Lv>6(A!S\qޢ\XtIBc}5Oa&-Ԙ<f.ߏJS XKrI(^fdn^vJȭ1O9iL /˓YdYD^j#:""Z1͎LM)us^!ɔ;Fv6(¥(j)p.2;qm ]>:=Sݠ׃X~Tؽ |pE/}04M`q3 (0.H 8/8l r<3&?XrAio}]ډr.ؐXv4:+]hXp  <44Q'p=aokc9υ¸(ü N 5կ_ X371 /wY ~7 IDATvk ?oϮ1#8g&d[PP^-a[.K5בÙ=l"~o6nEWgzB͒#o eA|:ϳϓ3;3A @dtm#_ >Go} K7z@g: OAF naY騱W~+fR%kO9Xo -v?L܈<Ā I 1%Jd&`AFEi$ʫ-м%,L̻2F6.˕)}:fot$f͵(0˲.А2)h<mlCoC*l=|gҥWlHZI%nVYp [t4p<;\3fcЬsY>d.l_08x,IWfWԤ8?m[ &Zԃ+O./H%ԕOәTWsK#yMlWBca6czZoLx_8ؤoY9RrfA½}M2V'6q{d/Sdas __ ]FJ? =l瞀+B{'i0"48 ,  U/pn'C`PY!,+a4f˿d970) J-e vvHs6 {_*}`|{Bӡ/ԼߐU0g8g~'4by}_T:K</Ѳ/O{p2*'.f.Ty^I?yth 5N}I>k; \%yq0׳jc&&'=̘oO:VKۗ~Zm) 2Xh@a3![ej2 +? z< t„W`0xs &t=JQJ7sUe,͵|g6d1"p2RNӂ%W;QeRGied-Xw~;`nvEJY2H8o&82&* q"9!Uѵwsǒsr@:е7ŠsQgY@ tt]򆭝S@R3FY~௼n[*=N'G@I%_+у|n]=AJ6? zNF8TXV 5E{ ڇtf稱\ԍ^[)ˢ7d$'Z:7L~,K8Hz Kbe0Yib)bL.Uk>7[ a_w|e|6'PI3ŕ鷛?~LΤu$@8b֦5a%BdJZ{YMUϪLx$s,%&@.a}r6nMmӜɧIl;¤`Ov'^$ų(t(A*g3GS?@9v%z#rvg0y .~ ǿ-ᝏw.|ӪO҂FLV<*5.] 3t.c ¼mh~V\.(R  m TBg` <{AVwh 5~f=[Ų\, +c#zOưŬ$" lXVU+IjAq7drjӴȀRK_bfM!@Ͱ}+OFLX8u2/%jl;'4T?[1)O_'eʯB ƫh0Pu2ÕdTMd+牻/q4V;%^K5šiV +۳2REA*p]cyδ㇖Ֆs:2S{ȭX,b6O?yRäWvxfq 2-B;w j[@0T$1vAjCiaY>N0),Ya" `Q(%pt0@n+ƝBgXp: ɋ:bUBaqbi-ђ9K%:; ]?[d0e:#3uyr<$K 9hJPޘjɮPF=j$,ȀFFg*akE> gfAcQG.@{|r{ -pbTB@n_raF|\(++`o,;v6="#B`j-He~G/3o8/=ߦ4a%Bgʆ 6hHS<n<KzZڕ7AUqdgsz#S  +s+=P9YMVK:[ɼJ|d]{֕`" e1 `̓%У'Ю/%W{O JO$5ʖR YEr~@@@A7#a/\{S^fio-nXXA Nxz/7{tݢ6\U=y] ڛ|e9a5& ][" Cq{&Tq#2w@zodc& Ƿj.5w Im_DVO˿ Utͺu7CY\]]ff)un0łduu ByMXAAƠϑA‡w!:\ÃȆ  4V⎬ u\;6Tޚż?0HAAYAAA^ YAAA^ YA5⣢ȺAJz0/]"=6ߓ[  4b 5Kҳe h?]烤\ㅍimsIe߲r<~- `|a B팇o]= >ɅtjN!J.%nvF'PX^># X.]Z >Q0> =b͎9tRm4'Ks6 {QuG 0X n;,Yy -s+?V0y2tR/ᬽwsg 5O4dAA*F`%߿hً{' 8Kim'K9Xۉ- "B{]ɸړCp>)5th/2gQ+m[.yCUI͈cVN9x\UxIǃ`HqB} v߂\ooj5J=2n>,r }k|ѽ-}FR2\&9~G BJز"E{ivm[sx -%GԱWB`į2GCA6Epoe8ska5nOD0qֵ몓?t_?\ p ]5JTb8 ۀ /b 5FE'e! qu#V@razDٺ)*c5n=hy'| wLV.LD܉Lh6mñ,7YoA˸@'Aw9[7J<ݭmZ tNxǼu8£:XC-HYO٦Mouk?}ύ# NCؖ&^ArS'1?O/<@L/N,o 5K:е7ŠsE pu5?%zPOC*G@mlZP uRኙJ.%?J&gUR&^trt9A >9ބK9O,<wɅINH]m>^ vgӡ$x2>6'RĊ5 G—ÓqX#[olqvU)=ؘR@ `)W+po/ TR0Cs5J JmHwp%|΅o6;w3;×>Wpi$3<{AVyNEp /%P5@ry+a(kᅚU+eY066+]f5)w57pj@"+d]mM&JUj$@xBMcS09_T]b/hdI@0*xe:[p^YX1VT`lU>vScP$sH./@ v.Pʶ+'?W>qDu 5VڵYA['0`zxXn;J,6 O+AycVf,&ICF‚ hjtR.\䳬pf.9uj4m?[?9θ<|Q]M&P㥖L:i d' T\CޞWS.g/MPN O{$(`iu)@'%0?K5XZ `˭_Y6l :bo:ᅚ!A9t?gTdc\ThLҞ2l`C+4@Ɠ!]yx(D[% MAv6g79>221C-te2/>pbTr=k~|}q$ 3*^X(@3WWIZqҗ^;{jc[q6T V}S~(I@n##Xmj%`ov'0tea4K.fȰoƀ ktV.)aѳ!3} ]-H- lCUۓ5؞@WKk]H%~T^imsImFn\QY/P\~qn'C`PY!,{G<4{ ea4 m% &Ab'x98b}Ԃoaks7c`(ugpZXʯPYٙ8饼8Cn֢HA{ tїsȀ55>kYMYe%,}#%|ud/N$?w.AY'GU^%xHŶ^ f~xa*Lyb `LHys`Οa/ (0|6tφW^0mḤ .\3LWcf7$g_~z~0cC˟=ʯP'ԏlՉSiXgOvSږW//C#X8I`71/=cƐ5#}1Lw5l鳛>{j~ D=;p MRN,o :XpgGbH?tKZt0Ƒ<387c??HZu^ K9]d!aN+(`\޽Qti+ma6o"}$;y9B4۴ ͻrmF7ٞmڼ`>ooܘ%=mNCtG)9#*r>Mp, NCJ!@{jL_͋NB\=m  G8P |iT5\"00~,/pILދ f7[`/I_e/o{a!rx b|2.Љ{wǝcM#ALYYgܯ#{n%!0@Ƀ (у|mdlC0V 4ӥ`ܷQ~~*f17<-2@)ˢ7d$'Z:Kb\](•vFNαҳ*!<UIx̱$ٸ5&.$uSu/bcJ%4Zg{dRI`K:84$ WW2DZUE0gi[ 0)ؓ݉IrgUr)l!rN_Xro(#…<%$[4\=HgQk &A4MW(] ByM\aJX64? +SOQp;8>z7{m+ 00 ncBxv{(3:T3emU\S U16'Ցk;WGCVvpԗK$.\ a[+̶#81>ܓ箔P"LnlҌlv `֍{tzNo(0iZlEj͝A2ˮ6&*]Z#5x`"tqT*4oQ\J?)|y (dنud5 u~UU?&'?qZP%>OIe۾odoQebLŊU*W"Hb 'qdϤzǓ33e\$2*VyY>O>{|akhkQäWvxY> +]u_PZ%$,y1*RdC;0`i ~_NW^ɏ'r Fwc|ŗ{~fD Yj[^TTyc{oeR BN;0j0?3VXLvyű"peVT 2QљJ)WF6(BCSe2I{MGMnXg#IsݸkݺW/G_}biiΒ~la ԏ| 7%ǰ'2Z I_@F%]\ 4P8~6PQd'&,ms!TyOPxC{?رt tRI .`iy 0* 2(u)@'%n__dB3a$H:R~WϮ%.罒޿'W@Rqd,Ȩh0RXK 9q_?})4pƁl`C+4@Ɠ!ن6.IDzyux2aJ,g@Ri V H:zS͙;gaOy h]xܧBmߞOߝbe勥bOǜg􌊌` ڃ]ӷ ]PeTB:3? &O6d] G$'FuNj q4}Um@˥2HƓbX +cfBO?4ƻ}#>%0$4е?AH6k\,=A v@}.Y xЖ`xd0 z)_i[ld*a|Qv{wC$- XHX+?WYd7 eꀣ`\`Abs>4z$2"foT+ϱ Su34(yb KT`dR312ǝab$HOaar.y(*\%#DXvlrYpI y >`uh~$;UW'GNѭ[?η4q!"+/sߕQ J .J/EE ꥯz?<ߡ&Ngb,U:ԭYz;( *I&3')GSJ-^JԕĨN`fXQp&v&)HKb~ xÊ(CбLZݛٗf*0e",zT2dO!ż`Շ0q~$ >^oƀ kf5X)JpKlބk;u_L7xHp(|%_ltݢ$Ui 'koCD.OvmMK$yDI)ެ$De8A/5^kW\r~H8y$(8 BtmjƸᯋmHpD,SoBի5]).|nM=CWW@&QFl} m)sb?r$B= E$ϫ/hh  4l B 6pf]   8qGcCm'[ɨ5}{Úż?0HAADCVz5!C5wv аł   B҈ zwIPj;) 4%R:YFJNDW .PwHμpH[\X1h[,{Ri eRX$m?b{/Koҵ38 \8sӸXynLg,Rь[g:`؂s}+sy/M(tGWʞ ȀW/hULmCZߖM6  o ^x殴P3H^W4яy pGu2MχZ"Ȥ&h&:xCwN^β}b6m.>,j,>9ɍ]"JCؖ=K@o|u:DF_-OEz= a=c+ P2} Ρ{p3o?5-XM=އFUPw=gLwcLT߉/Y~̑W ҙ11t J۶.><*gz ',rx"=D8@X+;s ̵|( 5jt(GN| !+930?Pں_+ɽ'+;`Gb"Iݔ{݋ؘR@ `.MceUп(,& /7ٯ,}J:Rw|e|6i+/y偾 WۜX+Ac^xw'꿿i̩ܚב={30,\e5!E8ԃ--:rx(3:tf2w>?޹^}6U뫤g>f̄FxIpm  _>\OSEI 0X< `Ԁ֑^h sdN cWh&weZN-$L.Vd L&;z[o:GbD3}=8M4gX(%nܤ1hꍗEf՜5dQvG W_Ƃ|J]=7Oe&V?c-~䵍h#g^ eak?&8v(Ҵ/;Y/J?WxMY9wZ)܂+"~ 9G-UsJ:Q{ PI|-31883ai?_ԉF@6(BCSe2I[gX 9#7#UQ_}gAEOУ3Kښ,<-eCN9磀Ovg_fgΙS0{{?I/ZjtYd㈓ WCjP01?$< tK+ R_Whq 9ڷ/ Z0þyӠ%TQ^|v4͉|$C#I 3F4IJe0B {b1%.[E_^ IDAT2SgyB"Dz|x<~ ZLm0fB֣@is=>ף3=\M|0"0* &OO$tSŇG6I50w>[vLk(Q/#63(ˁYtX1q,?`lCT #au%.lYIFr3.L*r1ųޡ[ň|Y鞄z ]SzkrH:{/${`d$x }ƏOG[ Th|`L8Hp5>콏 |9 Vx{9X6XV֣z":Rs|UKyi -~[r2磷l\5 矫c_З-49||2Sz@.uXG@5oه]].J41 Xkoy[緵r/[[[Ou:Qw_,Hnuʼ;clmmfɘ{iaPXE0ޓKn-P :^DS0MTbAAQ,>8]Rk;BPџ'3"K  Y;ΆP5'Yƍk.G  }@Td1`  p?ϘAAAQAAAѵXAukKhbTHz1v<r3 =}@c[a:&?a8 a7p>PI]" ta[\tBq0#oUgJ;&W+H™؉ZtU] NTdAA< wwVBƍF2dVQgAxCqi?EAҔ0l8l9 O#^9`*0i%֗s-RY:pO*X[ɕh?;nxπ[eƯ*PDbAA,)߮`CD 2ȅD]D` 젽7ҍPt~ A`'v-~x &sqwmuQݮUi顰)V!APo8_)na;ů*~ߕP#D  MRaC'?+b.Qtr@. Ȳ~m)<U0x4ԧKe7,]ru{ v+oOu7>FwV.Sմ?5n+=+FYAA,Ճ 5g| p" NJP7!!PUIwq ˶2'k%!jgm +0q6ǃMEZ`c π E0w_U+FʹZ56VA(4->ڮ0|5|lY3!*l'V9 V2LWBKй$BVZ$G7~]d FX= Vύ0px+ᤡ/0GBGÓ3KuU] 5+?W B"~c XݤgsX4{㦌& XQ(BUS R?`|sExqE@@_U"[+œa۰94 0V"v%ܥFzHF#[U/ѵXAˣcȳkUz*L^FN<CamHr_I{m$I)BN֊0s L)~M{YJd`%y @tɚ|gC'a{phzqlypZ% `y!=F2 YOVn;Afqʁuz,l֞l[ 9 ,aTPɐ|| I%ZudV[ |9M&$C:M*/T?QAȊƘ}w\ >{TϤ}]0nWMfYZ8|^^By1,]Y.PZ%   u   u   uJ}۵kaWsO>lX,R֮  B-   B"f-RГr<-qh;p:1* 6hx2\AAz"lNh^2J5Z{Ƴ檕ݿmb#De #'DyK$S4nl`՘N}zO=lMV34. Չ.(Me? 5Mؕ@lj;JǸi2a%r$vbNMs$-]YSȉQ|NJ Q1Z_rA֭-w5JS!qصW aENծ ٗ{a JmH.`^;Y7Qa8 a7p>PI]" ta[,)@i4_rkij](]I>ZKwԂk3:q :=~L/T?Q5Fuŗ7K ~ (jQ mM iPFrO%@1ť ZV\ [݈ЯMDd KδcFVKPF##%ա K@RvI3eJv]1Թ~HQv,nsذ쓝x顮itr)?p'glNl`)i f˹X`G#&R0ؔCgI ]-0g`K0g[=|9xE`S[9V0E(_*/~EP/ʏd3k2M5S5Ge 5BTdKFm$OgQ#3+o:cphq<=qR$\J&6]@~Ms),#`LXD6Q2TC7Q̅kttDC?gP4z>%o=$.ĥPs;COA26G]Yg'* 'i B&(+ U_ g$% &xc}{GX9><`D!Iɕ AOa$4i`2;7$*/qIykv " ~tMxM2n^݈ɠHCza/VF1veqdzՙPJ*ǵcbx~3%7&u1@w{TQe$Z\ə?Wqf$xz(lFϬuFsq@?N0>؅|eaD+0_-YySD=> Ozʽ,g濕ХkuD-QB=tcPc.'TUA eɩ7OCHJ,ݻпѿHԛ?p2H/q(yN8U:Ѽy('4 mZړx"ܳXa_!<+HkU\Ӻ wDE"F}%Zxi2`on8_Ī⫟¡]݋/Xdžȍkfѽ[hX[̳ =G lؙ9[ZϏ.17ֲt_4c; X ͯ|3^tόeU3&w`vDj~j BՐTXg/{(qkCcWFĔg2nC4.8UKy84GzWz SʝTй\9yhU}RVp tqyb%TDl V7○5ThРG/gEt@KyTjTF=\:I'#z * {|zG (%}]J+Gyo-38yݽqQ\jE"/@{2-}~ [-#d'ެL% @Ϣ-RS$ [ aLugSM)ym)2'qX/SAg|D2Mx#%,Ɇ1^>H\:Vo/v2UvAV2lJ$Fl 9Jgp~~dZ ŠXC0ܬvwlᥥA [0nv^;lD AS`h3ԧ[w '{B [U[DT -vz/5xʅbFpnE4O͏2n9=*RP鋸nq!tThѭp̔cdQp}0!c\`uF02IÊ| n4I.(qIlxl g{7c6x*oVBc$XV+id+s 54->ڮ0|5|)gfoWaudˠ,{29Xr `*S$ B!s` >Xхc?yn)۠H mëb6y{Y9V0%1|^4s3[d$PknlLϏkvҲ=&瓏k)uh nt2%tnS|kpiI._nO_c_+ʐ!=o34Y҉G`*,$ -nǟV]Q%Vߨkjt3.4ő Mxȫ ˱lଌ ]vHtDoZoM6&&}v<ǏEC3oܔi*u%+H&#&@|]aǰb,} Üa`]ذ_Kl!#noɒt+' le)?3va!([AQzMUOĿnbJ\IJDQG\Y׮x;Qj ݝFQ©z8pnnbj=,X8@aEn$*jM m(*Vnz ¥?^4R@#7W5ƿ-R)/qF!}xоxD]uįu#4!7:7 ΞNdz?>M L8֠5 [e%RYHg C"aP?ClThLКn\4[lG4s%1!M г ~J@1әTX^Qx4kς&zĦQJ"Pb駑RL [:?<;~ HoXoĚ8w6Nt1dS`Jk;͉͂s?[3NI{m$(k(BN)}2edAgsP(Nt#P˜`_ BJ˕COnFRƯic0m_/'ic3pK:? ٽC=7jc'-eڛ6>vXz1vZpF%PUK )#~pZ*h7rmd@6vSpaO>Y ?̊LAl(?ΐ~IZ4c&']DF&6]-ѓV&iR:OnL8n ̐tW=:ׂmbBϙI!@eCxvс LL| Ɯ.Y5׃Z6"“o1 -oM}y=' pƘŢx>﵉n ¼ߊ-ZJԑء;W!'t[Czdr+3lvdžL?nݗa#q-d9CgjkѰd*dH> Ka`W= {|PbiSXMʍ_|  0ɋϖS!p%< &ظ~\W=~M/ԈRUKyi e\e9z$ek{Z͟?O>aD|KYQH?\Ko orL-{KV\$&b t eX[*{.UIĿzVNߨ/v$7ueN1clmmfɘ{iůz̳0?0aPuhS@y2^TbAA1FVKWgVAA"+Kdw^nJyr$  @EjǰT 䓠ΆAAAt-AAAQꦆ`T6/@s< k^zEށCI1&\KAP{VAAՁO4}ɣ>Fd$a 8SCeO%t ~dkA@\KF|2 @cPX?MM^4B|8\ Q*'R ͠Pʃ0kt׀QS!\9?תk\T#Ϛ-_3ç]x6.mciJZ4mɳ pW(.f?e eܙQ:jzc=_7Z&NF2̜ jk\۱+v.xƥ5:أAbs]fv^Wqլg=z ǩK;&W+H™*20nzdo|q|.$a~~ V|Fy0#xprZXTVY.ﷲ:]'D"+p': u75=O.?u}^{WV@awx1xkNj_OpH :OBxsLyZ~ V)&9p/ʀ]oB[`@?pI&Xܘ5aD+ תٰx9tT3CQ`#&> _]|^8P8SB'W%> +V¥B@a!lJ0oϮ'| !c'熽ߏZ0],q2V8* ."i<gؑoRx7<.) 7ڃHIhɑ}{<4-"e1I6˸yu#'#9^3IņD[\\fv;o#'VeWӻ+*5اCҍŎ,HMZbC{ag~Ν7;)%&Y&>,3_F,0k+In IDAT&I&5[0(a>Vp,z jdo/84Gz`CGMOhwP ցAxk1^ܑ&~(jӆ9tn3NcTd]#c$+ o/޺ <9~MJ|0#X=TPm銎`uk7!~?l `k(t )j=n,(3pgpyg 1a9΅kK/9@P+ 2>iXZIwS"iwѩ\0]\2Nqv9q%z@˩5tW |gddS7$x9'qUJ篆b <ӡ$:&*|<YLF7c0* _ ͯ‚PJ'3"!jZvU '.Bϡu Uqw@5XC3`Cynܨ*- #`MX(_dSxS#JWXwk8=, "Mgx. c0ŦR?t9|Mgu$4:_e;nC)@2<< ZBaɱ:<,9PEi&<4<5탉 m!M3}IZXv ϿC;NsF8}YʾLaBBnlEd8D&FŪH'_N0q<6OY_*U>5DpcT '/"n`&3ٲxvlarUɘ?Ԋ: )ƍ"6~;Hb! _lKU\~0%p >>y Nɀ8z8~UJr? {]aT5yn)SadXq ^9Ea,\c6Lz܉߯b,Jx۳;x;7:*';y1 E3aL@ćp0\a/,$S*$ ^6f W!O< tK+ po-lpryNX8ȩ-wdg%¡_/#YCf!pr=}m3dqHEgG+4Y݃4i%(,jZrI-q;HZNc)KS|ĎX&.a[*h&SQ! ~ܽԄof#?VVNLhߵPB]<V _n8GF뚺%B돋?P-־ k#ʖWa8(&W}S`ŏr_Igh0+1BPN& AT4P׉߯Ec'33hVB~$)Gę46nc+ld@}_BxYr(njP:ˆp.sA[I'YvEB-z@-]*ѭ F?;9ɗ^i1 8wL%]P $5Uєr&<=œS`\jů |x.A QQ;0CkeZralyYCv<̕Ą7@&)I0Og2SS9wcyDѬ= YV (3B#I(u)ojabP;l޽/_5֢ 2ٟYAE7-X"d0sCuۭX0s L)~M{Y T A᭑@O@7]{D=<fv7G@`F0]Kyй h(NWKA7v$%0yr.<h o~?n-h?ν d2{1vjSkhإ?ߩ0p,WC|,n*<`pD2/|z)rmx d}ܔ1ƻG C'5< &ظ~\31wuʸ [n?Fx4\)Vx)0IPKWBÊ(̃#k`YƱH wWeY?|2%8Nwዕu+?lyؗ(UlmT^q5R3օU '#k/k2Y} ppY6˫/8zŹ` 7 %'9& PЪ%LmɔƑu?s8ߛ6>vXz1vZpF~W.?p`K!¾nn+~,u F'Co:L΂5`hX2T2$%_B ws+u^|yen?~X/'G$.ZB(MG**nBURc[J[UI[6v-]rm_  -Фko}+ϵ 9fƘ+w)uJٓ.Q[yrQ*?A*[/k_^&JĿzVNߨ/v$7ue~nj63d̽0K),"̝" /#R}bApmaӑ:T)~ 7+  B]M OKsP͓{ UL}G >ChAADEVߌlr& rS /o5[?AAZł   B"*   B"*PA>OÚ̏A}s+a5 9k+[BLklk5:# jBُ8Vf ޸pAA 1FP=pKN0>(^ǞxvۭN }:Cl~kA@4KF|27?0 4F ?@JuMaJ#ćʕU + >pgwu.`γ_ ok!ÖS |oIZ4mɳ pW(.^Xi`ɇWc=_7Z&NF2̜ T+-Mc"?x2e.%&Z r-*Wta8\>[ /.)]I>Z * "p&ZvHek< eʿnu*s!Lқ^-2# ,a\x .B^p)7AF 3 +`p;B < ׀ g E 54i o Ya˰_{Tt fUƆgKuOG_٫ Q]9yLBR\ڵ8H`m 'W¢ZʋoysMR°,<x 挂y A^^j /8v`OW,}]{@Ay6Zߏ:Wd) h7܉%j$p#8fl* [d<re@]®7!E-0n$ n̫ a0XIkUNlX<ߜT ]Voɖ_^m$?uT^s3ɵ<| J$]9Ԥ!v:4y/WyCkrPbe2EN_a݈Ef$ɤgzx,'-%ܟ$ ZLQfmyPZ]O1ϗx  JuPgIo@7% HZ R$xz(lF,oyW}?>z_TͳRBJ5$ _"j[aBqS x(`_ ! ܕT:* |c*߿XXFw0}8O;="yyˡP3c,䪠0o <"Y^0Q,*e-U9N{7Ɛyׯ ;34c?Rٮ!E172`_L0XLPo'w$h~ hDM1^tόe^ wd~{1ˤ,{ ߣn䕗?9/lG<ѧt򖗳},cֿ9ե?yLЄ>8VT ̕}4w`{޾܈aV<S ޗw[\dt 5:uќO"Eanj=7Χ30_{mh:w~=ȣ5Zg$ gwFUgZQv}u{ v+6_K/ #=:0¡#0'4Twȭrፏ=]TfuL 80nY0n*GuCINsaۉ,&@Նo z2Ttb^>߾^e?sޥ#{6+v^qaf* ߪn/%@c*p8>BS໽% ׇ/_SG3~:`+>D'ؿr fdm,ۖF_T~,K@i`iYț(jvEc%֙:9LZ˰fM@oSZ2@0Hs&T HKͫD-`rJe!-=Yk&hHlp6E3iᡥ)f^7&yl2}LBfcXhq񨋜}0!8u )׫k*@DBf&lw}Jl%]ɵّRBIZo&HVyRL##7K- ?My,0ʜɫϲ$C`e k=t6૎ VNlAC53.wGI3Qaca30{dh`l&nZٓ,V8:})S|ٗ!CuQa:Uj?# `:_0 ;vW{^\8(dg߂Nz`X%xIg|gfUs/`+;J2S\5.G@˙ xy=uCRDk4x+oLciX{n2|Ûzws.IԯN`1ܧlϾĢD/90(J2:Z 4];n6dO?6`ӦWȀ-go V]\P]TjTv"/Ij+*Wɯߪn$u#HmZpcJ: $ֻ $G>CR)^Tj@/L.Es3>g!g@tdU9q3v [Ex_]ρ Hh 75tP׃I`B8QH\}z ?-`X8 x o/.dM'@jV,HZp/"ijt YgNN[oR5-< :Tk|p.!-Ad\ۖtMe dS<듍<T/;Z\MMԀd`iIInfcD,u0/ªRNp`5 04 ԤZK*l5q$Uk%KE6_c]1}%* co ozzT@nn{LXeJ,4߄1Z@eK 1GFoW֘L8QC!s9TUp/, vl`c'y{^!yK_o9{VCTg?ݑhe|NkM_AQ峲  }3!z K'߿{ZP\o%AQbەF=x$þçJ3\,pv,vVIA TjnjoN n,,p6z-~۶b-l'>9٧+t4\K帯+L8rb ՛voEXGٜI?ذRfKap02>\wTdgU9V-1πFBG\X SfQ%+M&|\=T]Xy,]Y*pPkŒt׮NJu+V`#F }ݑ<<;g~bb6KFٓN[yY42A)Mj}/BwF߈ʪmnݺBgQ6H@1 ی2cu\6\r&bFV TrT4 l IDATtm OƊN@ Au@U-;=9A/[hu/߻bu2)3Mwt=DC_cF\Չ;3߅{hv޵Nȏ^'lٖ?\ݔo_u@_LL^]xdx&> t&F8X+W3n ]@CȪ  GO%B x; T%MhII1U;վ-\LjrTyC!`ŵֶH.xѕɩ6]w_: U0#X94&0@_P~5NA_^aZ0d85 &F# ߘMr CȁCP(t~> H FdGfw&#`dut޵f$sJ4-.'^Ӈ` &0# şQ.~e\gR>h&9d>Cy 9|3jnrr$]lPC'9,3O]'f''ۅ*'L^ˑ3GXMU"/Ūeϲ-[` $mMzzf4[Ufw`Y{6&eg0.V<끯*Ш σ.O}_54+v^qaf*u ׇ/_SG3o/%@c*ܱBJWglՇ檃w /(bgYٸ^msm$\JǤ߯\SI~ tsv@Z9LZ˰fM@oS>%4|4.~e$  &;Ԩ *)}d,`FZ3!-;L*8U:{wfRLnxh:Puxc" DV;2 y'BFvG]A K O^XS){k&lG+Z%MrlӐ%]ȵ˲cQMV|ԏz,YM][G7hE_,<%:6=Ar=BRlC\u:۷wAPgdm1eҢQ^/ 74 "ݓ[ɱ|V K= 7 qL2Ww:{.d.~eƙ~0f<\Y / nO1`LJ*U(-IF() mIҥhC啋Y|ݡýb=2f/=:{VrE=ˁ Hh 75tP׃I`B8QH\}z ?-`X8˱tUw* WvW҃A銣&Zݭ^l鐖 ˿fG-徜 .@ގhZx RA̍uîPm\&BZ0MNɸ-.Ȧx'y2&^jw˵Λ@EҒ8w3ƈXa^UQE.n(HhIW2j%> 3ӭm;Fp߂.YI2ِ<0: T^=zlƺD#cRKT. hٜLx<]w&?zJ;77i&\-VDT{ɜ;J7-o=&0P? RXw BK/>*^XSAI1p?|NkM_Upf+i*B%ֿRXy!.Ɔ;|wՃ{l|3M司#M\ܑ]+lեVi!]k{@7``H27|:_Kgߕ +4/=}.ڊ&/Z@ nxa1XMx-N\wy:+7ìX"9ukZ`>xn D W ~,|=8۹1k<̍}<3Ug,?L$Y,9tm9_*wFm칮ij@ä {KnEkkQ HB-5Qk{̀.#gN;w&_# &^cMNe0?ȸLvG kѝ7wzBZӂ?mamZdN|rO_w/GоCĤ^fYl}JMޔ-RFԎ=wcĺ@r*o͂,'/ɟ7ަZM+L8rMq"Ȥv>== 7l}I3ۥ0 X8AY|SNAY#RK\㸴(Yu(|e9r$%k#+U=w_y￿;'s{ORВd='.$T7n1XҤ&ڧ"{gT:(>X^ێ6֭+t>j0ݦ (~U(cB6Y 7\I՟U 0]Ó+@P{dAEUbO'.T@ Y@p"Eyy^8@ bFVP`l^ J @ ]DGVPe5> {(J @ ]DGVP-a?a R NwTӧaŻ@(^ cYUmCСrj nK${ >"Uz4įp@ Zոh&P_oVs KKG ] B gr_lpq,GL16= ˗CFgz .ahSp2Vrʀb[Q_>//=dV5N lĉ|BbUg|>Jp0();'#SCY qnu:;۶FחF-]nV=B ZxXG N VܻJFsoC <$Ȁ`uSlTwmGC@dWpUgWcgS>;%l?;̈́ 'ka~1HDNgFSՙ,Tsst*]xEj >62f{߃:tU N#B Nd= S›~<&dЗ`px~؜ p62W~b[Fp 4ud&G*!`UFe?;wa^zJ!nW)+-֬73brݹatoml]0aH,:BȔhq^Zx#bI 7*̮U8 =S}`SÐ)f̃l 'ϭP8˿  & ?JN.Wk<;P['(;_eߥwdj^m i-Uxy#>#8[zj* 'C Kk9-6n~}w a5 °E,'3`JTu0tRZ);J_7<:]pUyq4_yQՁIoBHmP] R z]'X(`߄MqJܚ[V0HW*5}gؑcyhkLQ;h\6!i}K02$rdri*n?q$} ? x#yӭv! qUad3h'oH0fnۖ<.ƟeN;]=XЮ} *Ԓw*kWlt;ˇUZT(M ]|yM+tA'$&G3l͹!؀/{5!̨Gyw&FcuhFW+l-˵ 7zH`/Bgn@u!d;}Ƀ&-w`91Yv 3Wp]v%x ^ u bXYx!@ 0 4I [^v݈`ogK M@O5:ɿ4B k{ྫd\] 'jwb%Oxz0-<65|3*+!eT.ݳ;oމ7)C#~-؄rAVB tlWB7W2W) ̀/@x->(&Ch2̙ 0yZ?i'3<__pxf"L׉H'‹ iK{79WigGƤydnV[]H-^Lc`==vJۙgdQ ?܀H~gύ*H(VQѫY-4 J(2}Gg -4ݺZ:1 h`dH- ޴/ 5jˋyUkz ,o}a|8ס3#rNyF7@jU)Yۅ{p޳55;Orgr//[z(FӖrq?Lpg +nѦk 䝒ToT>ՅGFg0zHg\ yVGz\?Nmp u AGVPr401k\kY`RYH| J v i6äe=g(g΂WJ{I"%}mzg:2LVG']o*PĕhZ9]N½`M`aG 12Ћ?.]BdZm\+CrCp,VE$(Kl@@:ax:95;=.4pxz GδeI+=WMdGGd:"AO&/ᅭoLxT{2س3)ڮ%O֤g?^I#^k&T,oP2GPq'߾Y/p€RQha1N'gAh |j` O滩7W>|*L?a?n*X;«ʿ'b`V )]]+| 0k U3 \f U~i񽎜\SI~ tsvܺ._2kuЛπAx>DJLxx.W3夂p3O;v;UQ߫-fpCKJTzޘH06DVoFR&!7eXhq񨋜}0!8u )׫k*af'&6 (sj$?˶Nʓz `JXYwiYMV|ԏz,YM]A{7VベDsqIZo&HL>I )ei r#96+6{'r Oh. IDATPT|NwqH O&%Ps+Lf5' *!`F n`pON@r r&7 \| l,{f/j"o-_@)2ȼ ێAN[.nlrwk? d%_-yA|WV,7ٻ-"rq8ܓ+p؟z`X2[aqv{nqd@k0o)[K2L2 {o/e@/u]~bMO%^^S ǒnue!֛L$O/3q7g{jHؐVss=NkˇVږ3X\\ۦ3[@fITw>.d \ehm}9{-R ۓ۟d"@K݉|BZʀ _=Ǚ@O%$e:ɩj4tݧR!-Θi\:Qg2~-zh G2BptEY1\IU).$u# |^hUʀo K_gGhHSVUAm;nh/ς{{Ş v$bt:Qg!-lV.v^O j/BHaS'D5mKϦ[ς{?#cYA^},V>x'E\->T.m(xH RF=x$þçJ3\,pv,vZyQ7ަZ*Qe_a‘k 9߶he;Q>}]/3Q@d;8_d]X rKvVC#$$G1E?Nw"Ƃ#ghߡAfbR/,6>%voʖi)ZMjG;J b]X]TRpS{sbp d9wf)S;}#ڇ'&u/Lc*9ͅ՟Q0e0;>[r'AѸTH- y„SotX<_< !_.AA`̀o`.qO VpwU)~-,fH.<ǥELC`Œt׮+Tm~ #RHF3?1J1S${SVluA)Mj}/BwF߈ʪmnݺBz=6m Ì2b*o3zGtb"miTDJv~tqOKu}&@ϦJwv+,YE8o]!4vžX*Yxu׿SԂC:)Us[.j_ :M2z_PTŒ%V^NJA4-\ n0Q0^:40cr8;LSKdVB鷬{ap! Ajᡎ/_E OC ]c*xhtHٹ&pLp1Lw#$«GSE$<f#V ׳# u;տB3rR}F5q,0c{T/ȫ=20J5}Jr}`Gp2Y~45Ax7dɀs!X`|@ρ~_ ( \$rq?^6df̪Yț0%/s kf@&0+`3`ޟů8ӯd }Iy,$;EFoLvQ" dUvWط'>`54XK`AJCr`Ih b Vos1܄,k(Y{PG Q坡aw[,!_/T(˿#aMx C'{.߁zugiB /-/> ڌS0_jx? JxA3h>L$`q8jMVBNai;wQô/P5|l[_/ԃ ?Ԝl,ʰ%8M_R᫵߀&+aTlT}ЅBFŠG E5i&B!HĞgI- B8ZN ?B*Ӣi 'k[r$k6Qe+_E`{-0>;ȑk [O;Y=?U"eKķd\ip[Z,  PjDbZ`밦3RJ*O@xS!e|uD^lþs))90 qjga~RV%á[ oB[߇j\cYD2 f$/X6e1Ϲ{jd($]o\Q+I.6/4ѤiOkA SmptKv]P:۾5}5ݾ=ZQc z $:n?UbOߙrkX1W?t60v,t뾅Mtg'BZú p-xWIн~Vm[Jʺ|gBųŒK$f[7'p-U̼pè݅mu/kepx-|r71N+߄_g5-ê s :T<}M+dp'pf0Nl.d?*2ʢ_ߪ$| 5bQѵՇadyufXWtnSɡ ɸۧcRƩdYB_hsbnS?SNINFۦ$?bFNӭ+ ,V&~aXBO,Nc0{eLa*s.f|LoNޅl?gZ._En_,X1r ]F9VAwOq=vᛅ ƙy˒d ep.ux x*jn3, 2e<߅__p q6lL8+ 2̤O/kLl]8 8U83dH>k(ӗo>n'Cr|OgOÇs!T$W ν \7}%j@>I$|2 #)D,M·&ijrC l=0:?JSE2AP6-xQ $$\fvp8'uĂ>γ~vZf?lw\hB}8c:HZ/~ׄ2\kɖO`k><&ʒi1g6=.Q]cPm\ /ěb"Cp`%$q, (+u ߑ}( =nm yэHO+ۈ6CaWp9הj) :z9E]rRA#bW7ޞ s1W5hH#W0u o#pJ }l߽xA@T1/a4-g|?8l^R;Z;9?5ɖ:28#gaks W[a},q[ߖD:^ P˺|= a)E$eJ3UWeWR` CH?.~B΀%czSͯ!]߄{`^Sͩ0bt 61>Y7`o0d, 87u*%qHB IDATwȈtaŧyyc Եc ,5\7 #8 ~0 z | c:p5:pbno@XX.}Uf.'!MGރ(C}*# &tnMA7mwD{.9 g+iIyIXc%'Ů#'ٚKZܵZ̻."9HZ.C Y|ЄujS'[JO43ŐK!>' CPnOP( juǯ}`=IuJ8-a1SÅ upu4 X65D@ʺ|gBū*Y|: 3B,Ρ\.j6lmGC;7PBI\L'LGVBPzs)1ՠt!4ص :L)ȿUpt @ m#M]:@pnT/é=FuT'QhZ4g ڑ m[55\sؚd j? ܈&PСN]*ɚu\HML$yV6,cդvn(,=ԶjjylIc\#7\%@aŀ6=3ڊΜ T4C!)K=[i޺!kW-"_Œ0ٴL]1iLS#\I0wx%4Ю@ 7!2 :Ԭ=#F34z=^Oo*)uݾP)XYm kj8(t|ԫ;K.)i|^T\=ń\)]x? 2xA3h>L$`q8jMVBcBt|XNrC|\?8=jWJom xP|a  5~75ލ)\:ׅBFŠHX Oe5bVNPwWH3YuuڶTI&:,/l9rSzm5Ɯ+|g2-L.3}WdelS`(Vº[zJ Jgn,aVH>~ -%P4J:5(sY8uڶ5l .*o^iAx 7}'[(Th`0$qrfdO>>|q*R7`Ho+NĒiƍS@%C|X q2 9Y{{pt +A~:6~Uս|UE=D*#2-jO`|B5,Kҩ6iUR9XUj_ >aC Ϳ#ys9g Iۻ'/\Yoybh X{o%>fTI-ߒrMeKC}=t c/<r;}|Ӣl.r[Z,U{7o;OKAz-gѢ+ PX~bAʔxR_*38(\Yһ3cI`q%qo  Ղh Be^*:ENeޭߐ=ۘW~9AA*ѵX|jnv>ʫ@Sљ*> xs7܊.  Մh Oq|I΄AHض@PAA YZ`0q.K.m{o V%OesॷRT4m TrF"I4w%/X64D= q ;Jwe6|F,.=;SC9yMγc o_qtHdLnVt| 2o΁9 6V'K;^n K_ S/ w!{`i!5W~J$ߢk|3ɺD8q8Ԟd> o4_5&+MsMgn/XY=_p:x N$-|@V@~^^V05=fc[<@FMix`|1[ཇMQfJh"L}-2gRѵ[\n0?yS dWtP͊ǃedXљDrR/|[<:> D;A C>a0{$8P2N]aNW dtxjjp-ı# sv/<5:DAL} &[@͔O+yB`*хxrb=4F.$G+ 9?\TU9 Sp]H:رgof± XIie&}:|_cReRQ)=ʼnݼ CXDZ x%haZ-0 ~|2Lߥ}  aS[=\ȇ0*ҎQ-n-o9ZP/G/?[$8(ΏTLT6xM uT" I 9O7#.l)=Yϱ3[ݫ+kΘN,֋5!O1slDiCc2ȩ,>0 oiĚVh$ Ğ %4h BSXyg^Y[3NuCC6nRZ3Oퟍchה> R>g"p!XSk1<jF"Q%ш5UGTz;rēʄrpIGDtTb2x W g`h s/ gL C@Ul ;U% 9‹ᷟ`Ԍ;%IЦ!X zlK:}@J+ *?%_aa,=XkeSYNU,)?݇-ٞP,'WD`{F0}(l .Q W;B;x(@tlQ!-?B*l|%9 |0g.sYC7ksaFw{JM7`鏐!Cq8a=Y^,g0h6 E|net`ZHxh_ɨiLtœBP dL?v0i^0Sׇ{>yuswlp~c˭oKN/Hʺߖ3>^Os^joߎǎۍX3CaBN>G;/{m+OT+G};&у@B/13?,Ȼ㰽^jVރ,ʯ37l֌nтqhs'^.#yU;4[Ost`j8HLkik]O& 8U>+xhL ]]k`h%c NȯQA:,al֯@ct9w,SieqYtWKgQQp~ Dͯ.K(%^kʼr'Ykd π3Z OYʅ< h xy2 æWr& Pе%8*Qn,OKtM'9'|{bl(K7]S R ~+zWFF.|VKřУT*'>6$Ü3>< ٣>:ɜ PYr=.4xVFy;-8t5RdZ=8H 7rbuGXWQM.L4ӑL6E&JS8#x&@~VGostyi՜tUIY$r HtwL編T} ~-P]r!"]{ ;'8~[y`b R[h]y M`t 0 +rʜS'ߟ*2'k}08+A]rcWk=s],,?2:*Y<6rD4^ Aq1/9 _6a g ,s.}Ue.ة`Ȼз@:;n/oAg,L:8[`L L2@zZz_:8'⤕ Ad G e*6ʄDF~lb]H6#ڑ}I5a告-j.& grϻ\w,es4~t:Uj%@6pBz5`6xDJx{Pz-.䑐W?&mVLeSܫ4vS֑)+m'q R'ޫZ#:uSu:dqKV(J ?{| ?ð>1r,V.s<,o~ pPˇS{tY7`o0d,K(U~$b Z\tY+86ۉNԟirbVc ,5d/7~0  eɐ1S`N:pbnɴo@4X.g>\\|tH`ƌ;̷!‰_`k+~$wM{¸w-a|@s>Sl8 l}p[^diKF8cOFp@OK΁Nw.IOVl-rsIB{Z lQSZ. Y|t-XqҗG@|tX4-ᨹ?m?u}ub~Zۏ_|Wd @Qmu9_G:jշJ+N <Ǿ]c(4-3VFȄ-M@.ȹqlM5qPn~x(P.Md:.&&z :խGSu!%1PI*5R>zdT4j@_RYr^2d80#֮./P>Dsndm%YSǻʤxnơ%sW'ZI] Z Aa8{??c|Fd3WnƇO*a9 y0c2L6-SAL|>v>Ćw5S=^O˷<w +4Ւw-ư&cWo?hd8,?C*A^7Ogpȇ$75la?`BzyF<(C͉K  ?jjlpx <6 rcE҃(<A.0"VD?cWJp&s#WKH+6sᩬFjՉ NJr&NN۶ DǝełQ=Gn*_oX͸ԠIw>/#PLlߕ2yl;9(Ձ'hӊ4$ "P7fMh)RVjȼG 5`KtQBV͑<J4?}F 7S|$R&(_޴F~)M3'_Ȅ ῗҼ Nڂ/Ѿ r5B始@ g\G ®ɐ4F)!>V8K[ Da(`G3~Z CG?ZFCJZh9V t8#l -̗=\)UMI ]U -TLИi)ppI:u7mQbW*K߿Ve+g7,?ZS6'}I, TuזhO#W`bԆF^`PkjWo] 0ܬ .eTQaxJ=DڵiZL|DXyXTޔ?o;:x`ߺoLX_C|1FY~Ə^>#+D.o־u{ L%=e(..Cqq̀jĒI}9V[r";o^/3gMKeYԲ$g?۷Ȑ kp>4iH6~?/1a95?rCA~&h\1_H Xi[\ \uNKA(M {u)bV~Ŋowpž }kScl 蝺œ[0~ l }@ŋA&{0<φ.0{ĝ=0a*s&Wx fOqLiˤSaD2 ֝CBq*,~4s+i峊r͒%'cLtБm瞋(G{HKQU7s&u[~<|:ڣ3UKis>f<>Zgm>-HΝمi-hz4'FS<r|]^z-F6z?^s5\!l7#`{>dr#%6HǹoW|j=;Y􅐬`B{zoALNCZ˻ 6q+*&@r"'~^Ŗ@΍՛:;qW!<qA8 IDATw@ν t+ `9o+bGq`۰p+A΄cA V㫄: "EC6TN_L?KvA3"Vo#ŜSՙ_IWu/U7dRhsԔ/ !'ImS;-՛tUw}N,5x;8_ah}[ML uh/ϽBv':!}c64yVO4bcMՈiInU dJH>/ | {^ ǕAQ\'>F Wb/WX(/~H < 35HNb|a<ĕB42X-9ߖBCTd˘NVݡ5h\ޛN0> YWQp~ D=jcI_I˗(UhJ:u4rvC݅M5CY45UF:ؠ1a)97 ҸekuY6( \hEJAԧ e.mf53}UQq{?v=kCԷ{ù\&=#9:J[+h V.woǐHkOsQ~_//n}z cVۈz{{')ܑApqn߱m$  Ͼ.lmu=-6~˃;KcUy2 #\|e8+,ϗAdbqg0l8v۵ǹG q|Y%T==΅ G0 ,_ZNɾ-S DK~-99i ='y0"[{Ki~.a v/<ÿt;N_E+q;}KL`@d@Z s+!q\:w+?z4)𫓓ɓ\Ѻܹ*%v%i~%AKq̀ASuж1~m9{8q>tpj0=^ d g ,o7_~j{!O 7¼/  X2\xX0o{@LD?B ߏoT%,_jQ>ѐ-Bc@S+B*5킳hJvQUxn*AX:K^ͰWFjJ@Fw9>OaM;ƥO齌'~;C|Vݗ2яw+iPLڙs&wC a+ZM0@ cnCb< Hf!v!FOgV݈-VL|(dî+/)%gjMA3 #ª3Yы/qttg0"WcpJĚX \HA(;649F,@~ߴ5Pv}+)2CjtI AL#ܟ&BX_D#L| 7!2 :@ڃ:nXR`*XK i]7OY@x}6`,So流3bįϪք2 Pq1QWw\䭩|oǐa͏3M7g- sѭ焽>\'Z?R>7[IB$trd u7&;‰ڟl$cLԞNח~|]cm\If6{gI=nGSCe&}6NzO :B.sHf4+s[81k6W'f%*h7F׺ݍ[%pѧtxQYBcڏ_e4 h:`O.ĺχt ~ʡ^KH9+% n T TY6 iCLqe9%WfN&} O }Y&$a;wL|sOaX>x6+>_ՠۦa(X1T2ćW`jM A Po\Q+)N|wMGqD\$Z}(F.9g %>Dff]%0Piɶxڠ4qNs#7 @e X-[>[<0vXx`++<;:2|mk9'£ɺD8q8Ԟd{x?>kdAIŵX2Ny3I|/G-T$g8 =눲KetguU{̢= '=;𨊵dS HRC*E?)"vT.bQJQ &@H'l `%<33gޝμ3\ #?93"O=e.!鷳=j}Qp6§ЅĵQ#4@jѲ}6[q|r/DMK{V\meVڝR14uvDuK 9Z3/t/P7)D>F'zYFƃCcé3N0sW`Hx~%wro"xAo^¿VL.]_!Ah*+ ;%A_gSჿ*9Ӽ|,tpX yTW,Thz^]Ej <? V$T>tО7:p$n%+؎U׏NwE6r~i罁{}JPZ4=V~E84vD-y; Gɥ#A;7M&hT 9{@E1w}g";lDk N~^-%4bK`DRpxOJZM㉯>ljЄsQtEg3tHC}G˕MM7qjH[6bK@#v]LVswC-EYȱCkΜQ=Zr_Ww}ܮAGb; . IV8N~K̼>>!tK!\ւeqKvLڟhҬ7I2(9Lz領,*֗߆as>׏}֟W*B5BV7aKa=6֞$t&~`R=FQe^əya˻!fP{QݵC$NMЬ;9ccQI[ï)Z Cm1X }(A.N%RNY|#"M pi0o_!hpp*_0%I*voL#$mд#8X}=[g7(/7YC fݡDK=D_valshĖl?M =N0Z"M?^Y]YÑ8D9ؙɗ"ћq:F6,4(6DZK;-( cd` O=Gzľǯo čťn74 '?Mrz_%_L#p,D.& _"w.33:g/} x'r?&g JGtANDEnC,j˾Wχ^<$gK c5 ?hiJ|vr>_+iFNܴi_N]}s9 to܊ޙaܺ[se057դKS 4#ް1 iq#-NQr]2F oi5N`@\V N:@-xD|렔e ե_M-lR_]ARsmw}YtAxGkGBB$VnT0pZ W˷t`~߮wgA WF8-A=[и@h8} ڔP1~0vgAEq.-< PI,{''~v77/7VǨա4ts ހQgPrE-%acDf41LxkeHNNV \w 7l"|gjJˏqFCχ`sH-ZqK ,ؙU.~'H<.fXϸlR/~Af39D>a4Jkh$-Zv/QsQUIG0bD(G;^]7epB#H/) ިJ9R@.tȒiHeIjZ2[Z.ʭ JX +# `OFb#OS#d|LLфIͲɤ_xJJK)TͦU&&".^ ?CIh˓d$[8tz?1#|f/s69#"nєeS2oDke+*5NkϦa?lID^kF@AP΢vG ~Õ${ l\8D!$[?`)I{ tpgs*|ɰ8(V[tܭtPɲ.w#0z6CZٓ3]Xӹ:pwkQ*:9Ɲpq8Efx9C_4T0Rd;MWm91WeJϞ(WC< nȆW[GV¿v| ;mw_``lkR2_zs|Cr·Oۅ{=5'Z(.S1O!cB\rqt"k0V07Ƅr4NjUeGVc[ZE /Ӝ}`7SlouvՇ,WT$NW˪MͮzH8_0]ym56 GW ҼD"<$E&Z‚GG_^0=8_i= VU4ρcal8nc,ނ oIJW- -)7B =![p: A=7OkgiBedJy~74Y~4z99sH)&p\$L_p/*H{3(wW_$cJAp+8q.xOc_yzu C.?Qx4G%PClF4䙝LO$7/l➤OD2??d=߯ %ӈ}~8((bW͐8_HPLcC;|ǵo*nZr<Ȧ>:zo߀J@eh}WrӉ:1R`zIJ+5(e ,EcJ|Ep C=ե1dq$ϞLP]yX ɢ{}׫\\;SO+S꒒F< 4i,1oP9tL 9 `Z@@`)>͚FvW6.`QEvWSm01ﶾDس}F_ˑ`b|x 0)%F3eA\Pv_Mڂ:@ˁ\s61Gj8;ڤJ ߳ݏʼn x(ԜҘQ=;n48>(q컜BJ[BZ9zp|0IGitxԙzF?e:MŠmҷ~˿p Nhf*E Mh;}q z~%<ԗ:cBfsOVn ^Iil*F^s;K_gp%MGrqv@s$Di2xu۟|nQ*Fg)x3thʵK} m;s_& '\|Ɉ |g͛㌻{*9ҵUwQ;aէ#ьN P(5)]81)!9#6 ~Ed%*QO[˲WmzKo9IѬkUr. uNTDDi:^alCʈ6ײmgì7Y{ץ[x ܤl~¼ Q9Pɐ e1rHл#8`kM9pL l~lA;OŃ~5Q5mF΃'`ɳ A!xoi!E0)X4n >]V ?k{ҥSPUv1<|]cJұ YF݉F#+|_+IE SVdڵ#G"UWw4=nc#n'K|MM>nOXJ ڷLbMmC"{{:5m4n]+,a b.|!`w:-CsRo0 $M=k>Ml)N3ѭ MUN;vɢ &R$Oၨy@pQ6>4,ߞ*hrf_WI_e۸XCR n1B6Xx;|m-qD98>~˱ -_rdO#hMn%ETJӡ]~0ux6> +su(%} 8:BJ:vyP` _#X /A x1xfAbd0b]۩= Oz/9 Ix;ìΰuCTx7 VoZ,T>tО7:P$VY94g(-J+?\BqJGw{QWӂґ^&@ٌxdv{4*[= d »>I3F6Jǵ ai?/e0Q|<=dLeoA/^r-9Sth͙Sj—='dKԄϮ 85$- %.&+G0}@ tiɭ8H !%ɰz4d`F:^St6PXp?m|p4=@{^Q]P `.p&\EFq6Щ%I_'p-9Ӄa/W<_0]\76b~,,7{_aM_5?3wi*Fvq[\kK8+>k8G^9;=R$zS WTL u`0ژCIIإjzt}1e@ JI®*vxדpmW~~MՄ(!\n}/r'rDsn@gH ^D(yFJt&Pfutt/ _*ЃPQpj$\+@g M`gJxwW^'UJ2 7R@b{E)2|0c5 C',_fN5Mu9\D1ğE;ŵ>:TjDzwrrWhCprszZJqN7װ uv( +٥$L~(^Ռ&fڛ o-88"Rtcyx5ѸO΢#`*wԓ;Cf_F |'u13;%['&& MMTR]#1eoLuru`PP}W5}[n'+S_gA{xq,ؕH*XxU:nN'E1~:`|$-hJD?ogJ4Ya?vʌt_S [V_A*bDjA]&<nʗI5نTxeqV2RϑÅI:Nãh5)]o*7nfE)mQvׂ7As&|'0P's/H&4ڹMk8{Aؙ H5~ 1e׿!if:h>CDݑ״Zl.+_΃'`ɳfSטCej) x \E:_ cEͫ2*0[Y6V )X vR0`|-(/Ib~Gҥlz*ԘO`>!\[g .1K%X׬QDV #劦Nk%D|+$,.uY2>*T@FN"G"WÌG2!um`13GTjl<A swn+IP7~A,?5~O2-E#lH}hX~TI5#}AipοG٨Ha:< 'AF`pӰK8[651c/Lf= .JW,t "ueaajEX/ۭj1VJq3PE>S9J?Ci=zibNxͅ*cII Ï먫 #Mik=na]8?/@ q\ #?93"O=e.!鷳=j}Qp6§ЅĵQ#4@jѲ}6[q|r/D*);VF ~oi;9ۗ0!5eS}ToW(5*:7 ek2O:~مWfBOgRpc^F8GE@L. [W}ع"eV@=pג4 u-bLXpp!;_|Yo}eQUֽ~Ҿn!G-_rdO#hM (D 3>?NaX}r-sgz OQ C9 la+0s$v%A'+2Se(ux?#_yd^Dǹ}ڗ&DI~>}Fx'Csl6^R"II\/ ;Cae ۉL]o)b,ף=Z<=@NȔ!ȉp<5_% 7nE0ZnJ2ؚe%ж=㖭o;Z|"s !\ιor"'p%ilʰx׃6 rQ?1KWߩVύxNZ=S~ 7mYMÍܸ{ ۵g86o%h>6fnW'rrIu &zd6t:Aqqe]+C y etf4|FH [KYIb^I3vm܈=|'mAmAGPhLGrʭ҃6?AƍTо-$D?E%(ƀq=˭ C',_fNUCn/Ѓ,L(@g M`gJxw{kUf ?+@(o`gH8Gp~F&6պcVÀ!{''~v77/7WYǨա4ts ހQgPrE-%acDf41o&|J2\F |'uA#@|udd[lW.2v&uŵE57gJ'ͯ0t-ҀII!39U* ,{_N|"" c.-6wqwGEt]4Ք4<ϪTVc^HA=/YhK*ȿѤg<}1`eL-Ty@n ugmB^JZO>&,cSqeYl*-!W,b W˗)/CEEzIF5u4P77t 6UGhc:ޘlsmtK7ab V0 6ǪXRB|aTX_3rF.H*XxU_΃`pQ  u:ׯp^ vVc+-ok5 Ym&7Sq<R߽?SBA&Z/8k"I? +s@YQ "_ΡaF8hw"yWWt-oMdgR' 9# 뵪*;{R5jkjT\ݰEf#bkf+U( pH=JTt5՟ J P>Ԇd$3T:9=Y|1q~&&+. ч9BEˡ8؁9Jɂi*-!5dmг|O ۙĂN-W6RJg}=Hغ֣>Z .Zr )Uk@ &YhBF$Kew?Ndo[aLhkGP̗3dVQu%[< @LGr1!J pl$ppoѧgf>w妳 o!>Z̦tAFv:79}beT[ѐR_;XbV%7˺xeTL=h-l%Pz/d-n$%)LdC+qeDPOz4L71r ZsrN"KuxO7 N);QV+=JcKWw]j#£A.[喚;:Cn(f~k[ !9^ #)@2V}NQ: ˬ(D<`EU/Ms`y3#a@,ޢɀ|&Y PaLrdN6c,!ihO9snYЏF/2t~ IDAT2g1ed) CZbAiľ"S"?ק^9s}.Zޚ0-KpT}~8((bW͐8w[:H(ib5'@ jb%o-hӒDF6ѓd'f?׎a~SF]GtJ|Ep ,MJRXf@w†zpeRx?JπfMdBvb|tIdO18z&LEHJ[BЪ$Sv]߳!C]N,1C2fuqP:;)IID@G)8HҋȨhO^`#Fgojꪭ C6Ze_,b׿\Sbn%\l#A +^*؛(LˮoCR.|:ݬD`{0h C\4/,i]VIm}<GFW s3n O=F΀GL_ ӻ7R:!P1V j˟p km+b2PqvI yg7;+{ dr"|y9?& N/lϧD2bg.'Pz./L`uuGOzS1hq-m50T6paMEly-xt?:jo xCy2jBiܴWaKm`g/J''Lb$Ym<<# @=#rA&Il 4??NZNNF ȅH;7)?w?Ƴx–t[Ulx5oMО㘰K#Ur. uNTDDi:n|~8KV݉jF sxar!߆~FM\θ3YXfd-dF(cF:3L؂el !+dW0=!?N?0r>ŽPukW`d/` Xpћϻd|}1ve~I5l>τ/_RȆ{x.HXj!9Bh˯7]w1Xm/IeX.Z cG@%Cj$,^/ق\'A`ȃC?( σ'`ɳ A!xj߹˯PmTRJJ 󄅦Җ]?kwYY*I*Df u'ro)}$1G ![kV.T@ X׵o=Xs+feچEu?kڐiiݺ*We1`oo7HJʮⲫ0;e(+]Wc@ @ UEV @  @ V!Y@ @ *"+@ ZPdx39?ƞp!"-/o̷׹ktlџЀ$'{(MdLjnD~02&~Qf@  # hOZGwa[I}c;b[j/C4߃以l\ 1)p8* Fj=ɄBq25e&wcTڼ3 @p+"f-$1"/t\˼/U^OCy;᡹K]7rcqz &]5O@U;A4(8<}4HV pNet)^۰ʾBξ m۟|o>1]݁E ;^$Z4Łh[%&NF;JPظ3UKz:l,`SL=@t9x4fQWz#$-OU|H Y.Mkd¥n0ZA IVjH_&y)2s4"IK &ybN$Gal&i7ᥫzK$BY*t{h=ZHkPɌ?wMrw< !Mt ah *$ʯ\~%0 HuX~U)A[u{*υnT~$h4w8 +z }}43Hq<߼}GJ=Ӿ;иF{0K*n͓O}OiwaUkt޻ {7'c7=InnvͽDXF5(AT@8HP0" yyٙ}wvfwޙq}&g:ttÔxbs Ϩoq GLldJ$e[hb~ &)+Ntꊟ#G<o US,1rBw3 oDP ~s.)l#Sciu#YDa p<s& sy1b}9)WuQ|nA~b/UӰ$-7*?N=ٞ0XgZ7=T?4 }(D=f>%n' ٟ~ʱq]x?$]7p2C4N-i)d"dMQ @vҷxw 6j@ݝzhgZ'UY]0xewX w ط9–h8+DGqhE´aj*~1`: ? 'C(8t;J1y1q?%7%1 :<oOA*O=ws#tX)>~Č $ ϳtd:-A},/plĴOGo[&Ο'T}. k|3ƛ;G0FY; $֞c$;1"9gp i`[gr9ON, Bibcrp E_ZNaȾpȿ֗ n,ܑJ^}&o%mݒgmV8=20'w_ i67?/|r+wޡ]P "yx5>Uw'/(QW7 -'~JxV"awe8{ӻ"+2#|x.X/^aw| ۻ.+$Km]#rD //9'R+WFk__ⅳ3"+J4.`N<`-C.IH;E@efZ Dl}].)Ki1 G{O3ذbfȑD|{m je!8“#aO̻ϻE]}g wk rj' KC)50b ˊ@q EH23qN}-^j(`<G>4Mm-ċgИCYeh$4rdKơW_aջv(ExkN~w#/0^C"P2h91Y|&gWת oK6kO1,0֋91KC!2Wd:aGhm>ϓ:od} Mzs7&ԱҮҡ+f,8z2mqdq߼ͻL[[/0s4cO}f¶`m;rj +ȥ[v'zJط߶1۸cSZZVJc(رV|m{be䳎+hm.!RR\\Bڑj0kSaf'dz<ׯoEɪ+lԥ+N nks#_籡zbe?2˦Rۍ Nw&J^kZ CSzOeZhFjNefZnu[~p:{oE]ٷsuA*`S$1H`Do3!#/9W5͢+y& ܰGRb t™t d{l(PKz}P^|ק en$ׅ?Ks`_z›˅0p_R4Ym'Kb6>JP{|*3ДaM7+Ω ߠ~{aה^56'HTullWh0Ҹ4Afto%~sZ  ( pz {rrʵR xk6vD~=q ̦Y+X\M縴"cL^ф{;.[` (<eiJ;Tƒy{Ѫ|{DqHՍ zJJ'gAA9uFz_.W6VD-rw']5,Kɵ̗+Xud/QX6/lɋ:":Q\ߙΪ*Voz{'r7FkYy  (aD{nړXg R)0kXsYtdTX\D *`D'Q _nE`]ĭaՆѳf38_ŞdTz<<*Oեs6" Faٱ5Jx+L> v6jȜ}nZ~`kQ0}Ü]=o~h4{:13bGB;Nbs|ٝ*JaU J0p΋CSȊO\?lk\I)=m}l_̨ɏa=׿ruDŅpDXlkZ..t髜w*d(T3"V2(l2gX^pCzM+(.@/X:QVRQRVr)g\o[ I͢$W33%SeHT^O8ö J̑ cFeZ#[ȎΠ\E%(6UWMFr%*(g%;p2WkWߨaSr)ն+Kz#msP! Je75xe6)%܉I2 gtV^LXM?T&D0"&3""fQ"iЎ< hE9vQo*O$DATtSZ/r@:ݯZ@O+ s׾#<5Veb=-6Cn$+u׉!kd6:ʏ F8;\rj;;<6dXG!JC@Rd9g:";&q/8/0*Ep5q#6v>fʿFt:05Fᄀ6Rj'Bl9+oI#$=d}z;-oVؽMh?[AW?sҧG~4La 5yR s1:YVdQO5=qk aD T*RJ42$ű& ء"K>E^Gwcj9UJtZPq-M4בYi I :9)pt¯S97(f|xj{1j\Gig-LC?g5gHDZUV1`aET>,ŦqɮXʏNGA jZBf'9o;1yDG˶D2I8JxSIˇ,3z Up=Be>lß`9$Vq29컙Ƨ|~#;רrZA~vOT?4 sm `ڍGطK"˾q9Zܒ7-\&`>9G_Myx2Dj7ym9w|z'X^1Yp#z/^W愱͖w8Y<^C}̿R&[n6 j(]-م&L 'tK!} "Pyowa5j4NW PNEdl%`b&ኆB获 TjWGJ52%:hg*ώ ̊ap3ߺϟVr@&ϕ<֣GPW.׊mC騒am[a$]FVDHU+uBf7?\#gb1 ȭG}qWldGzA!vְ<4l>:aXD[F*P)1%M%,YS`cA.8[;YY$4@PP(L(h`\a&dJ\MX3bb[Xn( Ī0"3P A1 gPP!W0X So˂l)0.d§%.~5Z!R:ˏ vdqPICY]:oS2 PpY0h`?>Hfۭp?i/0;y@c9p|a?%啇H90d!}Z0R#o3գ 6-ϣX'?^f,vzm:Otq~E:9ls-zlz:2JXLjEZmIx& dJ'e5)r+ԡ=}3ktO\C|.x:D={sybʧd[K(Vjʪ q/O5eY|;(`I+G^`v6RK c'c6Wp9'Nx:s6LhK/l!I`Ia|;0%h&.Vg'u-cf:U"!\ܙ#"żkrAϖ<=֨.\*u_,gqA<;gv8pΖ򊔵!4Z=gvB!\`‰K=wH744/nCJL4r(8ŎjtGa S3<1Sf )d[@Բ ;rleU̜<|Aߤ|p&UhؗɎjۛwf 09%ɝ{$WɨsB +dҬ$n;yգZV8 ټFb),&<_< r_J+B=@rb(++Gx?(_-JCS^Paq=WTJ@UuU(~-ǮK| x;(wƋRSH򽞕+W^_?9 L5Rkf$;$ۣo̓j=M?ZU#ƙlgU5a\]q?IBBBBBBBBBBBBI!)M IhRHDBRd%$$$$$$$$$$$$"+! (x%,RZTCe\T?RFA3&¡t_~#ūᕐhx>}y}r1u(*6P[|^2˱6[ڎ{s!6r<  Tn8 Aؤe:62#*G5g-@^NC L 7|N@x̄\ g@ԧpv}6M2ə陾U#vѭG,6ym>mnz= g_MctyQgC)HƳ1~2P׭֢}ݾHYy󉟞 A3}Z<ДZ+n^O_~Fў>};fܬ08vr%\ 1b?!}5< IDATx) 3d.ɿ ΂é_%<2, KbeKM³Z%eŲG`PXndH}Y_&+᮱8vg"?%ģxZۚ^hۅ#X4]Hђ`/*z|9L^S52Xu4 )2f̓.C=E_|߭}7uE;}1rA#YQ9`$0\ax($k8FC/V0xMWg_C܃P릝5CMll"xz2L:ޫRb z" ? 5 :P'hR}ɑd{\/ /Nsxd5>L.3W"1S䯋6=O#bzJ?Y@P-25i9Ek̢kѨ 8ugXK*$cqN`ߪ~=`cDύ)2SWMۉ($Fp쫅d+"3Jkba,<=Yh/Iߙ~ldعd]S-$F)B۰kRJ+<,7w#xƙ'~l}v7̹ ¾ADV+hrkO|a1:hSς( #p-#G=r$C j6^S~t s5-%EiކMCc|p i=Q~IG38:h{TcJd<-3{5" kHGy{~]P9ԫìn *2_bHP%$2l}'Љ rIXp"CN(1O/@kQ GHO?zA^r* p 8{Cs *ʩ}` z]Bذ{47z?(sKʈgJERfO;rCJ U@f|&b]]Vv{˟5y# &ζs3h̡] (CP&1]Nu8R <2zŝ8q Gr\E tvH#ux'N}D# zZFLz0V׈oN¤Ǹ BM&&+mt*"&?AfO ej9R z+ꖭXo /;S87x(?o/Z5)=uְ,5"ei8{zѾv4O:΂r :.W߿CJ2*L\,."__NII Thz/"*#(]XK%k0e>識0%Ҩr4͒!јXaL}/w'YSK$n`. FCH#,;VLD8N{{!|לoc6al8h/N[5 `lP@u={fDVp(byA.j˱gPvFDVpj4 e"7Ԝ2BV x:Q:[{ LBmOi dkbFH~| #ߜ(.Ā#*>\b .K,G?A!T3+)<1DGP1A^? Aͧ+C֊2N$r*'a[LY}1ZJ-ݲ*ё^L Ds  kh2,T̈EJ(m@;>G4x l_*1Ph|"%b3Iα''㋏tJD#Sy_'&  X38wD |X€0x+(5 ߷Oղ~ \”mC 4xu~k6[`,XRu0t!tJPEX[Zz<{GPdXGS3`u¦5e6DdSRܓ=8-!K)/'8J,\M܈Mx]` >u1t! 򵔤"D*[-=DIG߯]^f*vDgg3Tsn 5yՠJν AY==ڀш%N:T(\iHLeIcMXY93C7E|$r|s1?w`rY5jYZ^Ku3 YIGwNNLQhѪAr:# Y)`-J`8u߂tIbck# Dc#b($x*!O%Y2l[ruj([B+w `g_EHv+ @> dx~L"! p8n !lʾSO!q+4bAGgx&1S媲%:lV1!7Y1un*D]k x,'= r';+(B`$_gBDA j&Mmg Ȕ(|7K>bv~T>M-ֳ njJ6Ѝ_Ƴ;8v:k~͔E6Hp|a?%啇H90d!}Z0R#o3= ~: >30}p,u_Nj<\2ߢuąL"0c(9AцVw޶ 8[I`M uhO|L㾖}2&fJ7lPO*f}nS([ $eT~Af98 ˨2ۃKAĪd"ѥQL:~帛Uдd؎6]eN,e:v"1ks% yt>:Qˏݡ?g#$O϶,F!V$0qxQ4SpN?- ۱#dž0 "9'ytAo\ >|8*4KMdGVx3؜= +XwrdTVA7 K>b 'ѹK҂\,2ۼ&Yqp @Y&sg[VܝqS7;8Ǟm. OB&(Jb붓%Ler9Z _ ކ_34mRX5Lxx"䞁/IuS Oƀ (OO@a=:৅0Qi+!|#U_^S_ g;͉z3BC5\Qu(²*]Sc%b<Ԍ/JA`| ID\5IHHH4TvgbmƯZ345$Y$MN~o,ViyժZG7`gg;%bk[e'.caXlՏH[M IhRHDBRd%$$$$$$$$$$$$"+!!!!!!!!!!!!ѤY A#cIܑo ; ^n! m`˸~fL,C;0H%$$$$$$1~Y,cPU$m 9)+luw߉F̠9#uC<Ng6+jpk$M-͈QtYP琼3 'ߧӿGc1g?$3!a/,v_#Cyor`z/CՈt9=՚sDQf4zm# 9t~6C:b|͝xM8^Er/Th=plʼC%*9s-9߀&Cu.hjddBUL5oO#T\qz3Kcr#hrq6O|Qm`kKE|5F~<' +p>u|1!{!ز_GR! +Ѡ=ӧoGBlug\y 13"".u <5@nxXR Mx) E~s5'@Y\|8\`}{ r:M>`PX$ȯ=FBlg:$cH:_0DB$|3EvEv?m^r=gJsbY{ 6v1FU(88^F5>ک.7]Bl/ Ȝ(mǀK12>CLL ͨlFl`Ӊ!遬?rχhڪÍ-{:v{:YY!vI|/ZvTQk=wC'Oј;V5zcN:.vH4"w Lkk27vmYӮ'D}yr>۽gjQK{,̊^X-S-q+VJ9j_xc_w#"42:9(hv<2$ۓkY2ʃ2[.w]iهh ʫ2q۠ؗaXx~)7t"3w3ʭa+0g<<1h7Ӫ 5'%*'sak0c0fqɷVB f p& 4w$2{G2=g `.v◍vxa'msX4Xiϟw$]7pAه֟@}pe)d"dM{Q @vҷxl 8w/G~0ERa-8[⋁#?|4= J1o %}p2G acWMef௦WdI>J^@:5 Mm&Y%Ы J/on/radgZ^'*zExkN~w#/0^B~_k[~Fa}99"YdJ-'&"> *Q#9d"puҏN}WuS2"2?}g?XE^[;w^W?~f73yomyVɝ[~6+m۱S$'/59Qdž[^s;[Ҏa!~,cX$To@" Yۛyl%tٸDݖ#ܰJ\Pc͑H| Qqvf1ϫO 5GDsVFd\URE-WLca-*_慠ƽ5íp&7 -t|t/+(w @]J@ j>pf?KPM#s/d^;W %y*O&*/Ƭې #6(loԄoPjr & r #U}r&[L5bC=Y^6o.WJA` gKFfG-x?6PVU@GgE8=P9bZeI@뎋;>jl:tB⇍M b3_O\)Ϩn%p0W(pHeFfZLUƬ&{Psx9Ӻ2j&|xwY%?B\JAXW-KSr-P2ۋV 8bb*O|Wf\u jv#2 6;qUX;\KGazh>~R_gHh,=uְ,5"ei8{zѾ7O:΂r :.W˟CJ2*L\,."__NII Thz/"LB!jYX_/bOj K'QVܼNC)0v\[@W‚ XzڈS7ien> ha#Ae KfBzomOYh49UE /(=2BS a(F?1g1~D.ESzC0ڣ~a194zn7eH"wbO,Aba>z) !YG S@Pǵm-rVj@ 3#)]*'> = yLիQ%Jk\bV>Q)`rvw7P5 ^iHJϔVLmߗv"ISy@ IDAT= *Dd*52G^3UjqhK1356%')9ŽQmG;6DZb rf+vz[,SpFG:eJ"!hE0"&3""fQiЎ< hE9vTzDi~ޛ1<4~ܚJm}:9k*r/X90B\(Q+>x\aD h}($Cȼ,#VN jyKP@w+m_3o]ʧr@ĐHe!_yH !#ةn1~G@+ PM;*u~;rALy!^ZB8;H~N`<QvI5rWHnYty6=hD:7y +5IqI++g&vƲdQבo.;f]y1a{ ˜~=@Y lhanb ˎcC#CfxRfj5z-׉ӌ/Wf'9o;1yDGɽĭ b($x*!Og >A?U`LZ`$;\Éb;3.aJ2lCZB+w`ſ`S`] ~5RK>e_8a.C-6W)믯Y>ՇߵX!nG̔{K>V/$7|A$fFA1 |WSv^ Di-G[)b31W%s# Wb2>)߁.syNvpøiK1lQـtٷd0U4b"Y9r3K˰@k៍s# ≆B获 TjWGJ52%:lV1!7Y1ub Y KSzղّ31ݘB  򣃾[HV)>,֮5pk.5v<ܞ ͂B`$_gBDA (76 S⢼*;wQTǿ5=!@5N '%AZEDTDNyJC@ @BOH%fwcR l 9sٻwgn{m1`K6fLLFH Qݒ%,,օq+<[_$h7HB`Rl%4Ц8@GarYBL|9`!CY@TC*Ɂ}ǡPT{(Xz\T}{e_kg-}a%G[is= #Їvg1ʏ]s\ TF\aM r N|ګ;)gҭΗD>H N}0>d $_ + |1;jJ0>_EƤ) Ơ]ۜLkhBg*G5P!:0d.sk1 wQ >›z~&{khJ56vR#=O e/&/S|MӀ{c`ǷI҃Qwknc,:o^=prR]1THcp[[lM9T7cU^W=dLv™~љM1'k7@.[#/2md =ssBd_`϶t㞰A!sqN,o)>4]r^ ߌ bMuKV82X 5` `ɮkY[^%Œ%`0AzY8*I*ˢ4EkY D80rdY|c<5Ĉr~*[К5k G@*N2ę% _h,Sш/["~K߈{oW!3kl5|>EgY c`Yޓ -w]   B"   B"   B"   B"   B" P $jF? M-Kk~뻔ƒ.gx<3R|Bhݴj<d݉mT8A/b}Jx93\?=rm)rmWhLdʶQ]eVU8O]Kh Ozԕ op?v~[&2M.rάҡcXm\ s)|ѷ6/2%xmĶapWyD=G]sW1o^?LC4<|d@ݑ8$sk2Vga _8PI|TX?*8!-.dR ˢSa,H̥e||#s~~=ʋ1ŋ-F,|aD$,_4_w;.gZ# MAcK{`o -J-xԇa?|6 Uv@vn޺0+“x%̛a8փGC4BtXe-ʝ#A0?x@X-( ]/*S >]h˕ddذ_ީFWkm{`&3pp:cf8{oGYsv7^\?Dt3\7cyOLA2!r{d @3q~HІuFa-| Gf5lpGH%%׻m3Fegۖչyz󦓖xqu~(h*a|֟=J|l@,,x *L-ͻ]:+r_i E$K 6Hhfrmg  `Frg#)WXa.Ỵ̄Sy'ѲW'\.XtjO z~Y'GCO;0-sjII<XZs 'OHvŶaoWɿ5>Ԏ[J;/m`;&I&1.srQxYI`rU.V[$t7wϭ2Y $$\$drv'f7O)o0Dp:NW˲\Dgj^@KOG[4טv$dܵzh՛dS䟽,H?|Yޮ]znDZ)TjߠKN*IR;foB:l܎L9ņi$eacƴWk\8;2rErIw^+czކN"AOĢ~.`\EmVR2~$c+S_9#/x.^N bȱ-` ¦ *[vg֠/g2V> [P p^15C$gx{e~?C.3ƓanO Yy)^5iX5ϑ.r6kl nYqDL|%5ia:ғ8z)$곸nTS\^S{3񴵥8֎/9 7R97%VW꿳1$1]3^YVl?=2U%;<> eG9GcRd { "/SG4N4)\7u;{lVH3d$gP@ '{ -u2 +Jz hOP.젆|& ĿKGhq:`*M=ӏem PUgEPeZd%dB~9 ul^fR 5WMn9iA4| pQcZ䴞&>v BDl|NnWd: 8cϊJd%$fn<3Q-96Q^֨3?q+,ԭuRD֏ ;Ћ6ƶPT1 FT ;C_߼oqnS\ߎ*]X+< IBRRQ$ W7V6y'Ρ ۼ;P>dؤYkHwS0ԧ9f386qtI>+e~{(d@z;i4 i)1֟WFRip$,DS 3?giHDV" &B۵Z-LK!#kv%,v|ɐK:j\yxhˤ+% # q GԣĖ0s}&fM{Mp.~0RcakNA`B.Tta& Q?q|WS"Ę_7SG©$( Tas 88@W}[ϐla؛%f/ #܈7w)]J鳢]%C:QH95?bgLL)I͇.aoDQ{|juE \x92D|y rS=ׅrg 9!t^Tic}ׇI{FP^>M^@i8n?=Ly+v-GRFY&Irv FQ.%_zy%=7A2P5Iu3r.Hr%*x}6O|XR|rߺ gbk!?@׳W֪盁Q̴;KcnݜȲ˼u6b3Yv5Z5p *I&>2/AecGnݚ̣&GǝI> w?lض]/&_dr*Nms5:ˣ] #ٛ-wbL$kb}ZY&]nΜ}gD!ÛNӈ*2%߻U8>%䕫;R]2f\eZ|Idg/*Yۤsv3+=R8Jͮ3=SXq&8jK&"1FPäEV (f, Be0X<;|+"9ANdy֛Ypt'O}< s|+*7#Z,Xe)ZxrI:^W2|GxF![`Y[К5k G@*N2ę% _h,Sш/["~K߈{oW!3kl5|>EgY 1M&Z % IDATAAA EdAAA EdAAA EdAAA EdAAA Ed lYP' FDڹ$ǺK*  B8Bڠfr$żݹm_`p -<ՏtnQȑqy21*K;VՃ:N@^O U06 N c8ISr .ٗ38؃.ז)))FxYjDl E]!*G5n~I'~n{pY5wNADj;=jӰMgռNw۹zQo"vx%̛a}l}]P!: VOm8H:˿se-2J_"}>*2)೵܆ۉ:g$[k;W}|:Z @2Iه+r-Ep9bn9L Ew6j4Dt3\I :׽98<ђ ##Skq(F_9Ү7G?ڌ^C4?< U6*AGm#>}G\DoZ̵+XxeYzK! .dI<M+ʟ6:qؕ$R\fj4JAr]y.r!h޾odaW痼K=o;5xla0ڃ{H-7f4>Zwp//>;-HҙUiMit0jFK+j#'"ݞpzn#V?4g[rx&o#ia3(=D!lQPgWDb9vFewm6yc۰uP̐liА-i٥A*oedP%ijd97;Bk#2&tGQJNEa!(:Ar† #gœn9K-B)nЩ_@.Y.HULeD*A0M:CepvkVWy9=AZ9))Ƹ4Y'5n྆#pd fjo^'_ cEL ?ڨsdDЋ8umZzB! l60 &}utc\z]΀ky' ryD ԾDlA(IFc@ݕc&1yroMM'WQِË`ǭeTо-܈r_*h 5`|X MKsL_U1}VURdķx,r*P#%^!4cGy쯖?bȕPF:PYI闾C;g de`ڡ4L3 ^hg2;c?ZnL|̠S2^Hk$%[^=X>-@VnhU?F2gi߇SzU6߃MW*SArE⢍c/KX|#l3/6[N]U j0'(TUdrܻrV `| w~Ȋ?B vв|6L z?=+rK_U4}VUZ-9%Af0x`#zP[UAvuq؅Gg Eb$jBn w+qDO "S{G49 `:#;sù;._Ӣ[;Ѳeپ|>ZNGGuՋLV"zi?Cdj%Ux1#dA*S4,_?wVv"ᡌ~5q֐UY*r"^B|ۙd B` ͅ(]vd?8nZvx6*L,/UUgEQ% S37䙨X(]$,U1Q{]-skWǟE@K: B Ka"ljEOc[ ]GRjdrϝ!ǯ/ݴC|pg OBRT*(M2!nׯJo8?- LPYmKjڋO;HHk֔ P0bTso²Y̲EK4ܲB~Ě ބ.0{UG?%b唷JRdȖG鳢]%C:+_cͭ|6GH x.\,H531r[$5)kEVDC/ Hǫ̑1n'0\㉞2K5>۲bxI=0Eoʟ1ȥUїZ.tFI*t2P\YӼ=&7C:â BI8%PzѦ]Qę z=օgzž ]JN&Ae!ĤS,4 ڍ'R%U`5~K OχS*F8f. i{ r%(ɖZ[UYQT6c02 }aqawߥ1yu|_KhL*.˘>\*t%$RSe@+Hq1 H_̎ګ0W1i 1hk>a%mG6wANkhBg*G5P!:0d.sk1 wQ >[s}`6qǾ|Gک\d@>>!r-\#4hvt5u+8m g`"[خ?G&g쨟lR4v ɛz~&{khJ56vUI>PUK ɔık8ɾ:^d}q!tu2\ &7~(0iUJK`9{w'p2eyMq,T [%Ruq7O‚_FEMIӗHCQI*ˢ4EkY D80rdY|c\y5ĈRk [ѕXęեrwV7%d*\YnE^݆F׮-UkF` [e)Zy)e1b[K.!}AAA EdAAA EdAAA THQ\z5#%bY[*PM> <AGhAAA*Q+$gxuxw7'kQ}SB৙!AA2][^b mCmpn?B|9RhGIǰ'ڱY_N'(_wx Hpl i2H`дPG2W`o6H0h6.큥Ae+zhh_F+ 2r,+ZlW0e d~ +ΙWy!3ȩ/0*m BYPpM6iW:mUȓ L荷/&bƆs8Ha Mr{Ȭ$h8H:˿s _U%Y˿YSeⷌ^|B1 edLY|.4JC2ol/T͓[x ZM{ Wa-Wxo x8H~4!I #ނ>0g  cȰ!A0Gr!a BymDߑpNK :9wP\۽fPaY(.0 ,y3  _Qdr>EYJ !d6d!dySY3wǷߧTdKY+s${x7C-%\.Oqy_@ B]HraV[!gȄCa01 JtX4T:t.X)?ΏOprUpz&:(\aXVL2 ? =:yǴs0Ҧ>L HiAYF. Kv\c(a\7U9QրR].0d ilس+eG9UZGYv[VFz_]4h52"^~d+Z@N͞J(?k7+.VJ#Jp4Q}TTgd5 }y57RO}vؘܹP*jA=\x>X/_E%;T@t|~9 5E| ڷ-?@J&B'un$HstH!0mrA `>ɓ[Ar2oKmC0mZ M$=!2q l.< ?`C6<h| iL W.*AI) fN.&= 9ѴO ~{Xc(ѯ{8PH4jﮌ3ɓxkj: pzJ]ʫ3^)t+1 *5-\&WB , _Q)lXڼ,z!H6: m;Y_R@NNth{B ȅ-xj 8M0졉7=: ¹l`vK`.-np!0¹pv+ޟWrN h+,mR9{nH84ZeAhZ\qe oM{vvY֥# 4A JemsϤ z?KEPWDM(`GP$tH\+%kL/n8z{י?CGH?BLs͎ NQ$h3w/N ZVhuOl_ P ̆=xt@L 3_ࠂAB|Ww#_"]e䫾Z^8R$2 r(;+&7 9#~6(hXZ[jȨ,i@?ϝHzx(#/us!]W)visC]b&/-VՕW`=Gַ*Q DDkG7F d~{ݻ(l 1aI:7p8`lCX:!ޞpy78݄MBaoBX R0}Lx$CƐ4_cr:aS])xw!p,d;D \Kl3J")Cz؞M1kWqlT|߇-L+#܈/Ua,Ag)|3Mh<8۞G.B'^xOH9F)$ C|K\ (c: Tl6~{Ǫ^i}T$q&AdY&~1iQ-F8f.G!cTEVӟmʼGJ{~GYYǟ3`+6!bE}dTY= #Їvg1ʏ]sQ >H~C_5D9-r> O$/`a8jK&"]^N,/)>&-j@ 0c L:^1Uv'Ko ,cᣯ@6Ayubn=YΗy`h߃D'$\Ka8u {i&UW>*EF- nbc1[|38m =xvY6/ljsAmJ郏 PЪ%dJ5MdvwzvNP/ > zD :øY'a'HA'vOU<~Kr^ ߌ b* =@QMRҎʲ1Ȥ-%tW#<*{D6PQL> <ӨDV_DL,nCff #kىoF` [e)Z`Y -wTł   B"   B"   BR{^J1ANN`A} H-   B" Bզ`zJ03xoe|`-S~i@AA*ѵر%/<: 63-ė#)FonPpݞ Sy~6"q'yBg~ M r-q7$G4 2Gm=xq4 J#Di9J-xԇa?|6 w{?:v5.{j Jw=k[}-dAEB~9B(`8o_D KBr-aHy_vuAe2 g-ZSoVX⦿(i e*S >[;ms_I2IF$vL m0nnqsH* z2u'㕓`(,, p"h詃w'B | X& V@`x8!̓[ /9B\ 6Q^RYɰw!,,\9~xNIw$BTyR-A C(xcL{yOYB(how!;X'8!Y\)ap081TKaie~ {TGo5:q||} 8HIrqvLpx>C-%\.Tjqy_@ B]HraV[!gȄCa01 JtX4T:t.X)=V+j9д(b/-6m]3k~ū!ֱ;|/Aꐲ }gYYF. Kv\ΏOpRK*{Lu >j ^ 5_bU1T]_Cxe+  I[G/ӨAx]"B@.g+2R HЪZ MX7| Z%gxa l FN~\+gpZ`-Z9\oVY?c1]0Q[d Ӥ3dPg€O+RS6q tr-QԂz*t5o*| Z_  wrb!jUemFd)n6i>)=<bisMwA ~ya!.#_*K˩'Cx3B? a8NFžI;`R`\=&A$9&ú<8H='ADf!w:X( P1hlA mQKƴBGeeo>%"7zjaP78oUVT?^DWU dķx,r4rqv׹S OgVW`T+" IDATAu$tVZ${xv2?[M.|X9T:k@[)?{fEu7m,Ho 5JE#XcDJTbbIl [XШv@Qaiq/]\=읙3ws3̜)Py;f ƧӨ p.2} K_-v+LE]zpu.UK׏`۪(!ϼwG3STN3rJde* 'il6fyijrs SodRB6¢RT%4oĤoj6'5(/\ś2K T׊qNOuhZz8e 0娓͓Z.Od ے&JR/|Yo\ųߗoA >{7ʼn5b|.}1c+Øܢ|ż[Ѧ!{ߒ\A^`U,S:~oK<׏`K΅QwLg>JlT[U /"Bl5nYV1n漃rhw0y+VGêR*~οl ~M}l`?t_)|?y6sYߥUߌ(V<׻WKE|,,M6MeDݮG>{^ɱ'߸uO\5EL{Q/'N3|̺%3rm>NqƏn-Exu,G;0:d%.ճi4yDfHuwtw޻Quw/at~a j+ŭ'%YNnj ݗQ\ć;}[!FqNwF!+μiq)ߔҠ1)㧂_EleRSGVrʖxjw3GEm|Xw}HB| o?V[1.~68>+/N9%yy5cD/5eF89$޽/5 AAAi%Td   J%Td   J%Td   J%Td   J%Td-Ssa y+7uAAAVڏ# ͷNwҾs|\k%5:~m9/+׫mhu(NXO#:6*5u^'⨽ȉF?x-9Z){/'M> wښ~e8~#-⩜߇'2l-Af*ˬO^:M/gq'r+g-*I{QGq?0%YJlq{ cOo#66ԎUEV|,.P-K ]_mɸ>_Z[7l|dҎǩۤW冾KZ-\|Mc(%[)(V AT_ 7UdTL&'D9'-يR@n_9̠<|=03HiEԨҫ'=ӰVB+>*ҿ"mXzX] )YRǿӸm+u9G9:FcTc`X>\H4+J1^"/<"J <JxrC F|Pգ~!щQ+7 }rhF }GF]_wp\ًg7D;;$wH%͟{˟{AA//vgXc/{vVUIm 1 ϳ$w'H]~"xzאR/k?QĄ[˓SYW<+>ҿ"[ZN',uwnjG%}ŏg}'4:ьY|1kݼ,/K]iFyN>+Lo@ nsYڈerˢC{ƪH_ɔ7{72Ọy2K?:.`@]xb}%2x]Z[nG~+JYAʲr9hPJG[VD9`{ҿQ.&m|K)]11'}{eP#=vahWmW4}UTKu z` =?qG;/u;81vlqW}顿~V#U: פX&gDzͯFNk28f?BPgҩ7)Py;f ƧӨӠ|?(mJP+ߞm7bUboA64j;]ȅ <*s[.ʼnǷd*,;j;o߬^}i+wrpC;Os5C^qj S/Yύɇh`(!ϼwG3o+/b4( .ʌ(*σfjvۙ&7>0F&-!l!,*u*Y7b7y5?ɋTɗy.WMK_oAŶ/`Yo\ųߗBUFD8]/390R N/ⰋF.LF;sh;((v71_Ha;כɩ^m[+s]ا+{It>(;X*ŀ 88rZpef9W6-Q}kfrL=L.L[GNv46_Hy骨}滩 *!ϞWr7n{Ӥ7Wz^dgP9 .y /bO/~>Q0n(OTo>Mr;eC,bW(;t:?FdDL. Țә乌v"(OݗQ\ć;}s:/Qӝ}Ȋ3o#F}GWݿ6nvĜq&^#c8tFJ:*Gd;-1gċWw3GEm|Xw}H6^EASi{KmoY!SmcYq }2>SbW?IᬑPXk$ځSL| yP  TҾkql29~|  BE6~AAA%AAAJAAAJU[ Ž^%k?nEWr)#.s  `˨ 7:I.s lw|ljKShV, ;PoG,NCncRIbыV%m>GEN/&0'lm=ЂM{<9Pnh3OԏK,=H|ˣx* u:gk58>1OxkqAy;8 c\'Ul\G9sau~wr.Os5vٿY%{`|2pZO:4I|^=[pTWo-K ]_mɸ>_ʆ¦z6?Qɩof֨Ģ\|Mc([)&<~W?XرeA˦O;еys1بĿNguчqEyĺZ29?'2\9?yu[TDٟ=gA #ro$WOoU-چu:ް\vHť*UMZ:JclM=I7ļ'Y4؏N"\ܗW`~x:/} OɵX);#VTO/L$lCBP6M3w({5&c.w;kN#;W9oH<ׅ%9} b<5NϬG^tnHD̕-_]¨ẆC7!Aۡx96;y-H?12~'yqbք[P.#wާk+ɤy>P'8cčUPTl["[ZN',ur؅Wd+uhF,n^l]Jl"g hw֭z.KѸ[NYthϷX+w}yF5yTX.|~ピuy|Ń^-qs=~ӛ}UbEqfs@^ȫąxLFV뾯 nJ PDdz=e)-?.Yјofn{.$Μp0J*o>4ҎIVIYJ_Ul z` =_z'Lw:~5TGթ5)֫1zSĚ N'59T+¡L:8<%*o|gŒtul݋{S;7nƗם9xm|u /-2'ѾDW GcA(AP9yprkncPAԬ~;ן0EX^EDyF_G<01yV4>q>|[2VnNxzWE2(AOꦦ-x)"hZVW$VJϡ׌zɏ*fS-cWZ!R\#Yi+rV$[K72=<;a؅CFyY^KBrV\M{vN@P  gR Ǡ)*fxkKr,"˹,~>7>ԊT<>ٜz)K>Ř\ڗ4QUĥ"_h3o3o]Nhk2֩7WN f [Ѧ!}oaB|эl, *(Ʒ_/2.ʳY꽣b"(Y[6*ƍ㗧Ү!Y59mg22,ɔ2үvɬIG3}Bki=9| ׎qJ_٥q?[$Z}'*Q6rgt85wՅ%2kmNVk^)Y d;כɩ^mx~cP11|}wģLEwTZ|.y`f3wS⓹ѰGj,Y+qݣG{'kAT+o ~Ao-+5\3Ŕ0?6c:ar2kRϯ}滩 hqg+9vDqNiқFSi/2* f/fuKg|xzȤf.qCywcMՇ8)C`L2rŝcP̃0!&+qM˟:QXzqv?[Ϥ$p6wakSK?tp%>7?}d~DfKb W+/sN9%yy5cD/5b {D;MqrI{/^jAw-   JAAAJAAAJAAAJAAAJU[ Ž^%k?nEWrAAA8Pk/|t'[(8ǧϵ6hn^Xrc'_kohu(NX'ځ!WQwUD8GEN/&0'm=ЂM{|Er[)gVx<][sS?ޯLo$Q2":.cZ5vٿY%w3-[(~-K ]_mɸ>_ʆifoHvmo&mNx^nCA\zJ/k~i%3=yo5":K!WE|;LQi4 zc gɉSjzDy,/JAٌ6ߵBy% 1/={&^x9V3:eø"<"YHU>Bjwk `OL؟x.真ok"KU _6~=Qd/ IDATŔ,_iܶ@^voWk[5Ffm #4R'5ʸx eì:+O3<-a')_)iF(ux_xtbbʤhBߡ1Ci__~bKU _--@;3E;xj\#z|M~f5^~ѳ8-bֺyY\w-_Pm73wYa2}dݼu뭞F4.f4VFJs_^xz gyk˴yM읿  H-c|[VT˃M.Yјofn{Og{~M;s:++_Eժf7 ڀw_7t[ʂEWcs|AAJ^{+gȦf ۉ_F<2'UA8' fSy`b8ؒKq2(AOꦦ-xY{E>7E]4nr oo5 'j|EXn<ϡ׌z)%gmfS-cWZ!j\#Yi+rVȕlYx EElj̯/`p']Y5T˃b&gN!xk:7N>\:Cד{xtՙ~u|>jc8QW1nCNl_!h;ٌg-L)ҵ'$^ɂt4_`A%e KmNK 8,^JVTHq]~K2;ATTfKv^ͳgk hEwT*5p;>gKyp@rx)SsW}K9|.pΦfnTĶtҾ|&Ҿ"5Wjf)Oa~lf+t{[5/X[8O˭gfGon*C'Bz{~8o['4U^Ĵrr/fuKg|x×I\.Eq t%m,*Mr;eC,bW2I:g~U,_ TG%,9U^7Q;bT0W> ~29ч81b$߇Xj`PV1>*5eH5+9eK #jeQQ4G;ݷġl p۾϶eVL_/mgŊ1x|i1kSar*Fh~^7AAAT*"AAAT*"AAAT*i   w|BlAAAPlPepp."k?nEWzQMzĥI:<  L~݃]|'Jt-nu-]Z4p7o/I,i#>pNUrrv~09[kLVrx;D|eqr{D1kjqB/ڋ_L`#Oے{С1½RϬFÝ9x~_H|⩜߇'2lןzonzy  hsC,?].؏`Jec1˴>)5F]9loAVI|v=H hJcOFevگ_"w\ɼ dx_\jȏ:kqb~j=XOQrm'~'5,a_T*?63-ʴ'Һ\O,߭r].yzХ+. }xGѻ\0z1OHpf|lM_v+m DtfPgF]9?gO&(\v6z785^yl&'x^\Nq}oBTHOq1wEttf%Xm:oKsy.;@^Tϒzݮ{z6]>#f}'kTc`|01h}2 +}y g_#iߗ\LIS=bE D6t¤Vkا~Y^aX iEt5ӟʼnYneBjy2ըΪ4TxdzWtmE5+_6+ ?ʷZVᯤw<+lN',uwnY(G֮Zl>h͋kZO;0M2n޺Vei#YthϷX+w}yF5y(זi7xg.۽;]qC2"&6S'*䕛8O8TvAQjsF) eKsV49^['Ğbm)s} D O3'{oc*2Y˷Y۝mUU*+tM6|16YϤSoS+w+(@OQA'>ϖ`󿤠 ʧc&x귧&>/sD7Bϣa $5o'~dV/ɡeKQ5=|5C}ͦuHT*~{gsosX1}v=LҿkqRrQ.N\z)abU4v.go#: |^ȬG=hMN, ^TF y-W;YupN~ n߫ξ b|5KSGKz#za,`v 1ļɟG| r/޴YTlU<}w'zӓs39&n H/1Gu[cnE}Krayy Wmi."X<Ŀ ϳ{aYhIg3oX~D}fg܃oxFaK[ŸqT5$&,>YFf3#RVk5O氓hMfN:XG=9| ׎q%\+x?У@&56XQ5r3(XF{^ɱ'߸uO\5EL{QWGщbY{]8ZQ0n(Om, yuzrK^32 v$#Y9*5%ۙd%l$jɩ9hEc}K!ݏo[ ׿[l[![VoŤ[vVhGֿN9%yy5c{KHK),5@)&nxߵ8   H+"AAAT*"AAAT*[]+cV,}hߍ ݲB|-+w ݲB|-+ww AAA&  bbnw[HA)JOgRѶޓ ~ 5il;Fj6\gVȜmO$RkFKZKo|UgI\5YUb R}?OwY&=xN;$#~:cg%_ŝ9D牠N~E qLFl&՝H‚E,Xx!sHQ=_Ϸhlᶧ8~7c }-Y*4zնî5n+=t~֮ͤ7=W|̬WD|KX`^Fl>QMK4_8fWB7Hi߹cSutvswYӳ 5_z'*E{q;eݵٻ[౿tLyjz ~g5YW JY9GZqhϞ>x{a|#n0FagHrS-hVe|:|y^_xdxO(>2SS~^2ſeiyg&;IY;ocKiC}z#j-g;?Wv;f}~Yk2$>thU+ze{).R wc֥`|!+71ϱ0aO+nqƞeέnow'}DԮUbْ\%d[1)—8cwlJKz_&9Y1RO>/{bR:eL3w)ႳZv{o_PWưv5)4 VPTPG枞(gbDOW\r3Gv瘳rѹԋ]/n?%#ov+W[,Y׿~ɲ7Cmޜ¤ui6_h֌Y/<;9O?6ɹiU5ۛ?{f~nmVjZ֯n̅.;_PN{kw6ԋ}雹ui҅WCGdm[ɝ#To"p͌Wx-MQ:G7m6;^KTl JeqK-k+-־voA7ǛW0sݶ٢Vk\3uweۯlAӵة%˾( 3(Ed8{T3.,D*n]2-d4Oqh>{q]\H}zmi$qr#ޚ\2DEjLoQ{&ζ&'NN}7nJs߾n#8c~YSVB͆+:/b ́;Y.uȂ?uN`} svn{LgZow%g$ޛ#{&xU/CTWɿCh1Rht(Wm+p@RiFB B7u~j4ܙc`Ѐ|Xby2%?yGau+[yvnp>|?$u1<x / xA^vG&M㪏3 L]BY=9ޜ‘9|A yhZԾ$B[[xڒ:j];m3>`~tMZź:jqñ<G},z9q% #knk{.-B JTK?A8\ĴWǓtT79#nS㠛okǫSh=Rj!׀z1_IGS$wJ~ %QS9J=:Ph`dt5+q\vRvyqaen#1!MX&<w7Zyܞ=F;\z&$i+/{f#k{&SF&L\_l}EZ]ùhx]ŭi4ob1̩ۯ\$P~jVyn9YnÌ KԿ/gp^B- Gi/UOx*eHZЛ:S+1VRy|Bw0&vw&vɯ M΂ xoxGqd`cKuO!nY<=:ˏw 4s1)Rx{Pf s@3Íz=\ypxu=&Ê$Y?g?tZi MF#)4 8ϑZ^1CKަs>^=sH3 0/II*v4Lߜ$2bL [Ծ&K7~YM{lH۷Hۧ39/'5w6!ǦNKIپ~kՒW}a7G&dF|M 4ag`ÛaیJJKIDATz[ňImӗIwϻ_+h :+փG˟A^>F"$w%OmJEb~RpS r4I7Xo0Oo $#k ;eGUu.1HH6 8RL#4͆~5:$t //k+wd7íw082Ҏx;3k:kFY.O;,UFˀ.7A0Ujs!a_Žujnf7lZq'm$f--ߑ*տ2lzo1Hky&a}0ۧ,}'<n/Z|vo#[CkLfL$~QM|+[,6>Oq(?2=OttȀk~vm~@vڱ}sI; o,_6a0i A}l{_w(TQ 1L W^ ?\zx/h7W]1M3prdkGs] "0L-Sm v7k|6f˫}SƖ7Ծ-ol}cK[پ}]㚽)7+%%9^Uk&V>͠>MOo4p( LlSe*Ldr"|zjvkCDDDDDDꝎ!0c > h UzuV'ֹyH91\ :'?p_aVDDDDD71 4L:t0ח{Z:oooKzzB&N·ۨ \ +"""""\.;u2;wt|i$$ (#|N&7|&}sϷ!QSƖ7Ծ-ol}cKR;ik;yi !E{P=o])>Y'-81HT'Z6 T:`ӷqn NFRحwJ9~A682(Ċ4th TptDdCXl0CaHd>sdmpa`+89.dEDDDDD5+8We=V*dZ+^gZ4l Bl=џZbN#6lY_ +"""""eF{U6Tҥ\zm/4SpbY @46T56HA6xjS6fqx""""""/=V{pAb_,bXZ*]kZUcEDDDDDN NUY{u ujq0)X+0Tuu>GVDDDDD$> Na)Z_k_Q42\ Wy 7:H|p Na>Ͼ\HP}\C[׊H o6xt!U%` .+"""""rj 5pOUf+""""""vjC,T/pVϫȩ!R ק6*5 """""":6* """"""bU*""""""""""""""""""""""""""""oB#3IENDB`pspg-5.8.1/screenshots/pspg-4.3.0-tao-111x34.png000066400000000000000000004174671452457446400206370ustar00rootroot00000000000000PNG  IHDRuLsBIT|dtEXtSoftwaregnome-screenshot>)tEXtCreation TimeP26.nora2021,06:04:23H IDATxu|SMJK8(hq22ؘc1ؘ0 33d{I iITzW''מ{=!B!B!B!B!B!B!B!Rė'B!pN,-/B!B8&Kk%H+OY!B!(Zr[b_Idr_W!B!(Z,[5.AUGY!B!(Lz.yr,/ 5sB!B—UjsY͟#I"I\LGLB!B! NV gV kMlӤ1$6sªۼ$B!`e7xSv x>sV'NΈuIƊY% !B!}˪{pBƄI9D6ik_ӄUc&Yy,B!j95MkL\Dj&[P͵j$B!Ba%Fdژi$cKɬUI5lVgj35}li)B!¶8swb#`Ak0kbId6]5-Y57n:?&6X!B!dխ4!MKJ ~iɫI!S9iicXJd)m=Bki'!B!'2덛k[esҵ8qV-N٬g^B!B OiIГ1륽_1صRkfNb%L3+B!Bا̿56s]Klߓ5mwd/6-iuN2= >f'!B!%$ -y_d6~G6=~j's2G2eeʔi:B!BgQ׮]ѷo׮] c>o֪j57SvI ZbM{ 0 d„  dF#ߺB!BaEAV;vٳg$%MNtSy9-%$Yn7:`@!B!DѥjqqqբEׯ_ʃUGƄ6ɬimٴu#6 lܸ񅀀nF{VX-Ċ" !BH%W8Z-[nMdtJk͜ȦMe6Ȧ=6wl.iG@@@M{lMm9˗V!B(=ǩ)QD(AJb#Ŵ2fMM_yٴBZ;3P JBB Bzjqss=9!B!9JqZ0sk:qƚD6'Il = '''h pQ6 DGGsit:("ɬB!6(i4=1#b}2m"iYA4<)>XǙ<5QLZhZׯhh4h4݋`]Y!B!lQrG3MXXMd(zRg5zq:s-5}y2:{k5$&&RNt:MH[*Uđ#GpuuE$!B!  y"šk5m}{d3cpaҮ^Fl[}UUY!B!lQrGӄdUC.sǜ$U` v"kѽLŤ(]#B!ģQrGDbZ%D\k5U⸱k'$z\.FmpvIqٲ/\!Bar+lٲEq94 !!!Ջ0q={//KʕsVfrEs#Es;_ʽs [RtN݋GӮTe ݭ[7,\0qIr-0cք61݊g:%rm m9[Q5θySJ#:voEeLĤ}6C@ߢwH+^>C!t ײnp6W>}:K,ÃPz=ǎ<#_2mic˖-9ZnhhhʜƪZGR@VsAtC{Gu>U}2&Iիo> !'IY󯬻MՆTM*x@ -+!2Aiɦ%Ys,nj1$B!RX{ne,YBxx8cǎEQuƍ? $$FzrTv>.Xs[]"k|z҇ONKi&M㢨n[.*,󕌜ݻ??~dX!/v+cB475L . &yS+~ wQ|S+Nj MybBB\aɒ%3fIHHۛw}_|Sz;UCPOZL2N^u}a~( 'Ybv_ClekNOk-qO)&0ZC~ 'Y6c.EopXt{+rg-E ?ɥh=n%#z5'gTn[ǂs:T3(a B-,?,+ˎw38[ʛ$]~6MgoLDgT=>p>w ?ֿM{9_okZI9:*u`KWxqI3cy>Bdkn8qD֖͞={rTv 3)Y- ׇUt'S]\`ײ¡rͻ@X/fOǭ( tƣDmoYr>\۵[៪2V1v$^bxJ4hQO&7?Ápb)Uq5j-FRjgⴂ5fjvA% ЎF@"v@½#ٽdԴ.'_m~_fӼEWF &r~j4}KR;fWgP\qww[2uU5r}n:Uf@P]Ml;{WPU-^$GoQ(.qf^P3tsl/bgJgh_(MvfU@gysCJuthz$pr*h˴/xoT/,V[ }wWݩRbnހҩ3 Ju'B!&WQexɓܸq }!t$hM{ӣ3%Y5iqҠI\Q -$㌻{~6Qg+=%uJKdd|ūܧ]Ģ}Q.^mD+v*F531:xf>Uݵ7Hz>$\8>y7[M';2Vm[UO WƏYԝ$B{\O>۷I&1b*VL0yqLKQ@j1SW%vbD|;s ˲r'JkbtqBhz|SE5f^+#ꂓV] w*~&WpuUQ ~QL[d'鍨$QTPU#:i"@jWS6ZJ]yyBqwhXEhJԣW/,> 18(>Nݫ[m̎C'9WmKׅ@CuU!DaMPjUʏ?ѣ `0d vMÆ )YdK"[N6l&%%=ډ%r쮜'j{dL!pT]ƒpGŧ^87 Guԫdx^.eW]܌.IhT,G1)ڵF?%|4r#5Z .Nreո֝Wѩ>&pu2NУ[YZKPI<كo.A%CǹxO_x0n]Qus{P?qq?3Y}xsY}.?6Jxr&~; O7n;!7֞t:ڵkGZXz5ǎŅvѩS'ϔ)S3go&uԱIΝ#111Gek-شEDDهbűh nZd xpпf͚**` DZ_Atlu/\uص,qeRG\P/hWP S[<в5YQnݲ4UW}$c1\Wjd쏯A|w)S ͎?aOyK״A5} YhJ]Y {ҬlG JҪ ͨ_f7Wb4-8Tg}B%qdGj^;BR.\EƝb_SfSwC߭GBGm&g9WkA6LE)ϫS\?$+Wcǎo߾$B=@ϝg1ebA44͊]\wn*Y"1ݏZK@qO FX?6-)8zR";a5q%Aو!#Դ=v[ ~) $cǩ2 4Lki3f-c߱]DJ_H&G}k)m U\?j 2v Pg8#ɨawop+w}" Ξũҡ@} (W wSw+%WHNN&99=<n%|ύoe9 !l/%\tD|}}z\!7q?>c^84id R)c S'`$mtS:Ȧ)V2s` $ƁFWOg7Sz왧Ú5kr?n-vh](h粲zZ9͛2@.{j.ví,=#s4MFvuIm`$ʕ+ǬY'...qKdv4nЀDUDV0$xtwVvs$"##sh5 xy0<`=iW8$B8 <=GKyB' {qS5Ia{+6΂2yYEQHJJ-, (?1 B!(YDsJ.mXZ)B!QrG=2it:;FPPuh4Ǖ+WDUUEzB!Q(YD@ף*gΜ`0ZjquuEקlTOB!Bys;(JaD<=#K:6 ""j!XQP7?±_T՜8uJIHL$!1'O*-SY!G+ڻ:NCChnsPsQ,پ[g@ȆI,Z j:e1+$LO7[śCMJhT1Kf !۽Q;$<.U|L{7oEm=f̨fو:/ΩXVn-_7#NK  &8Tx4;#_Ġ^Yߍ:kԭUm&"m*ۜ۵o^hF٘iV!hP;кxzJsLSuI4k~=Ո.Mg,hԻ*7M͚uyyOM/?[3IdiD\^s&)7rw)ts^->r#Gp~f<[A%r7Fp{w#0U0-t"(?.71{69mpuþK\6^7F-+Vnu'LWc?O|?í\tKӅ _z~?y/1$wX]?Yq V}0g̼HT_O)+WbOԻ,(<^g#\%;?/(q-?z,֯c$lZoqZ`1~A9[ mNk_1f.9~`4;W]?S/[K뿝ow˓!3fsZ~d53ѹd/#1u3sA5Ba4z /bl֕ BP!GXyBFBED)xxb+q?~w#SCSTP\̔ p@J綕ut(^39F.BzњɆGS\)0\=yckӗYOs@nh{Y} IDAT| {I>2_C0~m mYC~rYf}k3Lߋkx[2SAhg#"G͸j-׌@.Vn K*hMsŨ91.Ye^ 1\'+rd/1nY6ӛ>N8Nh6o kj zYtSo|F*I8B[(_9/aͧ[7L>ן]́{h Ao- jOsex">W:5 (>xKLZ,ԏ%6_[F:4VƻYS}. xD->/<o-rj!ȑ6}#>}?=3(ً /۫Lg;\Ow.t]8f:.EVcokqN&^͋.лSy,O$Baϼ[ҽ֬5(+=Qzo5])Źzw#+T6 䠒]j>&èW#?lgt\ 74m4@ 쾼QmN?s6j!?ͯ oS:#S-cTQ,+ T?:~J=|nN8Zs /&mPU*kq*}]Q$+Ur[͖ųl_j~uz"Tjܾ`P"`L9?;_=LkGi{Xu;d%BInOV@NeqrR^oԊ%N} ssoh/zdѽMXPgYz_%gn*DKӖ !0+] U;I :~8:"ݎ<_2!6j%Nk.œ}9|hlzn c~=~י|cz{U%|>Hp7/<[УnTDMmBb=48YS\?GK{CHdawF7lԣƟV걔{-ԏ 9gzS(AUh(DajB[n4<Ī6dC{1cO84 {r@rbeX׈)وri4;kUnOӟVx FRpmxo0>x-3xwc'b8o*+M:_`Wgyǯ)͓oʖQ15gtywo5p˟uxHV&T]S5^_Uݸ3^u!ε4aRԋYy~ xEm˿эik~jZOK,ߓ|S|e_GƋ=g(K1ۼۮ6^TnSmX:Xl}|D~N<0Ntc[h5F:7{Itj}jLВ:΀K:e~TճB!rg o9I% &Pj*F GB8qq9gL޽ ^^CH@:%Nd@:#f&-B!¡H"+=$ÙWH?c"B!Hy']B!BX^xG츸^B!D4hC٘1cCaZ*_HdO !B!p( !B!p( !B!p( !B!D%fb^5:$B!B*k`X̐DV!B!D 򼎨iu+B!BԛlXFPt t)Ν[؋B!Wݻwu"r)M^lBN,g$RaDn\Ķn!SlȂ}91w"lMW}4hPw΂ l\3f̰a4E.wٺp&c<XV]\Hb!B!ϭ`2f{b^YIdB!Bz݋rpªFbkl96Z,B!(i4y#YMEV!B!CDV!B!CDV!B!C{dB!BSOe-H'-B!B!JJd~=JlHOPeJ +k'^5ۏbm? GdxzԪJH|i/1_]j׮:ՠB|},Yn?*B=xi*˶ T BdAϚUe ^.ƃps#mMXMƃu;HvoIHjTѝN[m}fTmMZ5h&_KK:81/,Nhi@Mex$&O I&mzNo&W;PbxS&?LMv0oZRc&ZS_Ӧ1퇱|_=A``gznJwlxRI;-0ra|DZ! Qh-=V.n)o|x|1^/8>#xo}$DESfD|NqVn:igft3~HpNJ3YK۷FFO6f1]5>upPJnP_w_{ 6j43^a0?</%!it/7& Z!%T#YfO12dC~²kVo3|pwݻ{:oqF/ 1l, ѯce ~i g+7ow,_Pwx:w; SFc}1}n5+9l2Du'v"h|{7bpD9}XPg{Z I9εM3w n%X:__ ~ 8i`"^O= ٧XNnSDՇ/N̐7iw N9x鮰|?GA= \ NAt՘];8|Qoa}%%t?uOG h4aʸRN8R#{s*bnF. ٹ$nB(7Uny T 7+S_orͫm Qu~X:4~+mqQׯG|?9mϰ+lX|3s*&8q ~s`amYm5; hS{D|ܰiXwpW D[^2tHX570Pl`93kTzO>nl{}#uỳݷ6;A/go&0;C{Q8>PFAU6Nw51@x[Em^ǍzvoA Xى(.;DhbUc-O<P4Z\\QРQspmTGGǡsPRyDᅗ/cd/rVU_J܏DBg|@B.=F7`E{}BB؃"*^xqPJ u3nFOm"oXVsX[`,'l5?Q"Jq~/Aq:Za^.(Ho?jqpj'Ns_mk&jY(|ܬ3MgJ>˟Ɩ6?vl?ε/'c=gA~*!r"-QrC#;G@LR4>R%6& lV)xx9yxx@&|}Rd[Ĩ_7F|m?dT@B?2~ -UoV[~[[fq$kҽ҄@[Wcҙ,XIߧs9t.|7R18?oNYA Z}(8w@MOTLr搦8% sx Jf!= JQӠquO}8eZۻPdשR4X  _&x+d@Z=z1Ug%+P=v)]fof}(j۪ܟYTo[o~߅sY㍿xJc}uhVSڼT aķZ/j\ ZMPS7ޤU=UK6mL2Po?=П;UB,1k۟<ud >|^J`4t8xTnE_HVVX/}gOzi[s_t{_ѣWs;E?C {̭0U$!pq]z$U_ ,4-y[ںf\ܵmGzQVsDK5zS' y e/P Ըsw.O#YE]ۥ6~y8\9žX{*ϏK֤lou?~fo֓Uѩk-_!Dqs7"JŷJ+kK%%/,onߪm-2*`z_ŠqTՒ  ,ow~B)fαe:m1'bLh~INe>!<`UgC 6b=6+4p6) 2"U7%+ҤStv/MLy_0=ʲ}TjփcS9ߏWkB$]yk9t5փٳEdP-kӸJUv:/b3QQsuƴ{3`}>xLf}t8.=y0|uY/R- n3'%ʿ,Jb[xb¬|XzVby0OwFhK|ID?wxB<{O,ˆeX!hݵw 'PqLbrET.L1`BQ8<'G 30uKnr#Ҹ8S&ht=R;8k.D2stJq?V rdl{$"Eӆ{Y[3F^檾<*4e1䕇]Z̵F HԮƻRvX-$^wnpTAAѢ( ff*Kf` sx>-z!6j'ЭBڇỎh^|a4ܢ$oO.hzBAk\a" oJ~X>~ieDt=bڬTu{ٱn_E|)AQėzPۉ3m|5*473}Lޮ)Q@ FSQIq<9U>58:wX-8Guf߇3ywwnqWr"Q1ZM,!3C$"V0nE`PT8~G\*ԄS,Nh].d'ի,Mu ::kfZz^˷3+l]ju I{OP>4臧'>.)v_"^p4*R?FR5ThIO~TOt=V_! }#g܇#h缝oEqZT:>/~o{:ЭRr3|R|/`‚ ! uڳR b_}1M.:t <5q& . .*X~ױpY_~іxTz\}68QGoiT.`]kyfr0e?j(ɓYSq#$,j G͡2yI@ ٻ*㟹 " fZ.ZZfni̭񩞬2MCM%EMs7Tą},w?XNa.b=GtME#M]C\l_!ۂ@3LJa;-J_nJǹf)~ mezcADE/{;%;̖zGgTC[$sf%~ &n.:RFnIٌFŜvt7Dp'3\-T`T]8N֯3]r լ;BdaT ȵ%_P}Fo1Mi\1v-̀gm]=ƕ݇%M }rtq}]51'Ý_xV]$o]mq.C˜y?Ocx${Zfy2ȦFɥd! ^qĥc_jY9*K(RuѵkMNnH|SG'ѣ %L|}-wG־j֣dL9 lufT/Y 4JNhdEs*ߌ`,SA*--ZrzfrLU#Z_M5Һ~2\i0VW"xҥgKGI4|5QӘϢ>c53ƱH5U%@hOov$DאzOGfʘUeqؿps$Q(aC6>)h.5ǖNtfdfθڷdtrQpCrY]o5F`'[ 5^ʪ\y Jܻ g.v[-2m%3IrVyT:͇~«lJj*Ϊ:۽E]]q,8#`SbQ*ju[utd=S.Tw)[&E}n'`]<Om Υ2-}(_ATx2dHCCCYf#Z_t#\GLe+9ssCs3Xw @IW<0D-Mz   P@VAAATD +   T*"AAA*   dɅZ]I$l%HAAAG%L5ǥbr3c쑴d-d_erd M:TH]49a*ΔYoJ ryd, J uz3wSE%Gf6bvw!,#^Eg)YGlȶ > h>b'|O6(Q*$$n>!<֝ƎsGRקGX?| i[z0nAv%ǁB>|8K`8UM5>O/7d +Q[ݨx5-Q b vW!c&3nΥB~d\KWgM-ȀИ>o ggT\^Ə+f87Xw?HJLV0iklx–Z~]x'}x6Fl JG=QL;_!k '1| 0گVBE ^\׊yG9gPa ߳|:ފ$\Y UvvݜNo@_q'yBqgL'$5vGD0zaKbYy#wubçpØɄ5Pb^bΝ)CUhɐI-+hi UU>l/~ͨ!r:{-l1?664lqcB(-SP(6!"pJ7G>Hʍgޟ$oYL;[_3{{.ŝO//L|7'1kuda߯AShU>LIl]mG0e'j][k PN\Wx 2⇥D8O`XjWK !q(Q(_ !Yqwo،4}ɓC^{ǎ}4{;U@uºs\7yQԙĵ]ِ|r$d\Szt=qw삋ngFsdot۷bȤVEKO\ñ-r!ϕMdz(A-9W=Q7^m 0'|dgRs0hA4+90gߢ8nBSwYDEl5=֞:j\ȧ]1)}Aż.=ŭ]A2yq fxSQ#ҜT5^=ݱAo'_N@[wHB hމOBέD!!T kR;[3y5dGI33l|݃pݼI8 N;bgڝj^zҴ3[/dLr%d?J jW=|q$yA!h,UdscY]{sۯ򃖿P!D+V3l:G6-J])/$5G7F~ S (3T7~J +k9LS q* 7}fFq}1 lșD/_JS?Oi_%S r<&a:]IE-7qvk$ dI|X:hvQE-7*Y/55Y3+*s.Vc +:sBo~E箁 ?esS|C!/}0-S z#Me&OKƽʒ n?R_yx]z36V+>+H~Wv/#L fA2/:oWJ;0{+_~e+l{Fk:޵W91ݡ&KwTB, C_ǻrE-oem,ۂ@3LJa;-EʊnJǹf)~ m7+l#.RK\*jQRN\2{+OZ5..w83Y83JXA4{ 983TВ'sc]0g0Aվ'\!vZmA&9/X9, n YbF>ޘW9߉dĬ"wşl=)CQjB~XBaaskjRp H{֦c\)V*Gg<ޑt҄đdjŷ["f7}.϶8qW3^W 6ػ__x;rZw4D:L{$?y.hK-i{Lզpvއ,NEj3[CoGNv/30z3yq;VϧZrȨ{RGq3)i(:- /2g绉@RXKkEzV嫙PP *!YH/ՠU`έOփB6cڂ/%gڽ2Y+##z> Y%cZ:`k%(sABFIahӘCu t[ .{%<"G:$x5ECcYk?P 30w.2d ˰S7L|X@Ȓq:6 Nm;KyPp.OViNk+1Jj4=@uJŠ݀ރ}ӻlCZnv=6*=X Nܤ[&(TudS<5*gg;<22Ƕ<=j|AxReȐ! e͚5hm[ҥpmqy0̙sӧ!/bժ; &~ ']tz'EɷL7U1   B#YAAAR   P@VAAATD +   T*"*ąu>rAA'?,ɓ1.c? ~щc\<}ɑ5x4S!uH Y8SzfdegA+5y3"g0(5 ̀MqR}W͚ۈMbR߅xmf}8}#.04,k  J I倛Oφuce#{V*_fTw3 w|Un+hY])8Wm"6H8&sew)Lǚ59Ť_߉zej(=hz"@p9c$uJA{ eĿ9v0( ߳|:ފ$\Y UvvݜNo@_q'yBqgL'$5vGD0zaKbYy#wubçpØɄ5Pb^bΝ)C~V&F%_uH8yrϯ T!R(wr6#kccLcO_7&Ke^Hy󣾸^ԕ|$5v2qg'+p-E&7v-[P2>JMfd}Ri'+?vYR"'0uu3%uuIl;n͇7||?hzB@VՊifZ]d8v+=֝ɋڥv-gCv0_V 8rʑqMqѹ7đޱ . wAYzW?ΥYHoߊ!Z-=q ǎʹDʗRS@?W6Ϣ@Sl^WHFx!5n*?2hS~*+wr&LיbcdvݐLj-ڟfwWx $ IDATL2x?Ϡ^Z_NgςoL./Y;OMW xzaLծܜD_(+ Ognޑ <$K͜T5^=ݱAo'_NÀd-s0=(}N}_A'897u<Q%(,PZS?$WB㨔f+zuGODw-?'~4m i4P!D [ԸuD&=&tơ"D=)5/m!|nqmL!Uved%.hүf[kbS q5* 7}fF lșD/_Jk)=?˯=|7ރʍdə7F'Z˒ӈcg Bk]Klz+kTr2QNי5*}&[a bV.b;] `9?L"ZфAW6uFyMt!C4 @Qv>Dm'O ڡ˧/N%w8Ѡ~ 6\Œ ɑ3 x%9 XsOsޅ>Eۇ#L!|A,og;9wlX5NU;;;l夥\Ux&kAJdra##]uv!Cq5_f,3_nj}]ye >,;1]1VP~7/y=M//K]>҉yvğs{\{dk u2Xear.q##wںm6fa<5Kz ؔN.LbE0gxY_JMDE&-"Yr?yZWs,(X3%NoJ꿻H uP=g͎$lSԽJ<-ycowe~AJRfHduv̹Z=+4?8jܱzNdܫ,Y@+rxU*h[O +$McNJǗ_$mJ>l޵C]mWL fA2/:oWJ;02ʗdKQb_-owGc7umq񲁶~E cm F&JV%0EaKᆫtif=3YpښUȅEqؗZ.\UP; r⒙f^[yqtqYItzGgTC[$sf%!od-y2w|+ٗuA*K9, n @O7gjħJ=ZS9HVV(L:LOTS$ ӊ>0˗uF6=5N.7&#fM{ ZlŋoŢ$o]mq+?6NХ ;#poW 6N. cR`Kd8U-gN&j{|k\z[bݒD, fTbih'NE'lH'i]=YK9H=wd%Pf}}>GL yysQBvT%]3i-fіZ~Ӷ{9MY*C?f%5bN@gU^f`HK8D\SWz'uN13gLz txZ,JE-}+CL|7}H k| ~ڻH@uZB֪|5J굡3^P X"hGgwx;_aD9ų>ey5N^#SXV'hY$@67^b($'I'4u|5#^/w)A(7' Mc-ӭ2 dl=< OZ1 |ќ3XwŽ_>2l S#28/SGx8$<"G:$x5Jiޣ+ +~bv {JO'cHIӜX5Wc8{1h`2=6酊qBeRJ^+@XO6ӭ[|n~vs###߿ylcoߣ&W'8=^ RP֬YF.]צSoΜ9?}L+VcG/`h)xO x2Q|tS%&      P@VAAATD +   T*"AAA* T.'-N4U̚6-o&3W6}·W f1}MAADbȒT֏<ŲSxF\<}ɑ5x4S!uH Y8SzkdegA+5y3"g0(5 ̀MqR}W͚ۈMbR߅xd)YGlȶ > hǐ1)?qؠDTlXw;–x |єJSfkT[PL{yKLL̙lXρ o<z4 S5ks9ܙ@^cμ8+x|2q&bSS æܶDO"I&eT:Kާ֓{oW_[ğK1?kzz֎7ﯛӉ^ ۝;oy_ aq D6/XȲ=d(X/tIl[=KaR?oғwoQÓ]ȲyHNt3JLK\:_׹3eH37dM^cW$l?WxwC$0ghtX{A{p!nvaĤPk9cfgp,9'm뉾QVLܼl>U9|E$)plԍB[zAxg9J@lE{IB(=zҴ3[/dlͫ+n[uBC 'O3֜PO rKw>k;yB"Y97u<Q7?RnWw>96Ք3_DflNzXՠ/a@ ,ºbtU$5G7F~ Snqgsf 5njW4H3abRqZ+53ɠn`#%mࣙ3з^538ENgox8L4`&~x!4'2ǎՆ`73ٿ| 1y'_.|)N?y2'yz~ݖLyAJ=ÜJ歳dˇP>|K1y6дKgI9U܃Sz{:W|tZu\2]KH0XY^cՔAEl ;m̙a&|~*Mo-qzl(~ SXv[+B|?ydnLp $DʜBLL*>mZP u{.uA2b'wD:6,Ip;2I Ud׀Fؿ$&cYvD'b618aS덟_m_8qW_3hJCdIb/զKPJS(y2: [ve76/},l1|N]͋N-o&GOg1kBb\ *XߵX)lxoEO%ͳlmQANr.q##wںm6fa<5Kz ؔN.LbE0gxY_JMDE&-"Yr?tpb=+1c}H#_Ҡ{9J{ 6y~pKŐׇi1 ـU:r<챷|U7%KLAUP!p' W:"iVd#hu'X.˼@p])JCq2Q[W:T&a䘯5z8_B{8[lF%'İv#`/{IwSZcpIԴgZ egH6c "QWa<3۹2rj<@ du}q ;6*%#kLڰQ˷7umq񲁶~Eѥo N?|42W*ч(["} 7\\M3]\fcj.rqG\1(/}U")5nCd&!OYYo; jA${ vh͓ac]'Ag0Aվ'\!vZoHoɿ|C@SgμDR7An~A~j 艿#)q2Nؽn1{Ș $Ym g}RT4 6?t(vz:o2C#r^fUo\:2Q;=8\N0)i(:-vG9=Md7__{.r~};& 荗=- IIFm|̘PJ.Hޯ[axҙv/LĈ$+ިC{+qIT lǎugHKɥm !7r_$+pazV嫙PP  UT='fl7y.zS4't5VG%5A x!#|Z^_Jȿ v!dWzF1^"zWD$?BRPj#?Sȕmp>E,iLߡߺ|UFg;RxtSHL [O*x)nps󳳝KeIc[ U}5Q <2dȐRf͚G6­tG6U8߆{UL/kx`'/#khҁBꢑ@VqTl##+< ZA;ϟ>ANPon軺h֬Fl7.u˶h%KHʍgޟ$oYLl}+LnZ^ᎍPKoΑ,9Āwg.nocu]2-ߖOgm8GƘƞ-nLSW"*ppAPϏcǾ*:pa9]H1qmr6d35_l%0# '+;z{Opt'~5\*:;2Up쨮KSjʦYȠ.ÏMdVNg#yjL5 0gy\m9w~I}٧ؼj=$BhkT291aFo$`' iiΊ'*b#G4LQB>ˆIx+r.>w.xzaLծTehI`[z/bhӧ37X{AW: %Զw-ՏUc@r fs&֭űtӭs.Q`HtwÚ<`rn,+x9?s{3"<] IDATD q5%LW'#fԾt|ӹƫ;6V5hiB\h~D奔q,CMg$ةk1sJZtPxtcۿmfӃ3SH]hYƵ5 +k#͔Bl\*nMPK }fF lcY~^97pw{FXvI FLCїў\UZn_jIĺ}јR̓w{z@Z0> W巤Z~:{É=w7ΔƾF7&5D4&s7 cGIj+nEioQ[}IۗKq}w!c˿e:w&K/ )ЩН]ܵwaQ\{ǿ.mD`XD5XK41F$WS욪S+jTX"h,+"6,i.rQ x>3;{s~gΙLw(D(<=CzbG_ॢL9|$:-֍h܎SY,ga'#"Uc_ Egªn> ड़*:Mq_)->m=9D=T&++2w9bV'k^h PjԪ_Tx6`:i0ɷP>\QFe0`(tb,f';++s|ĉ9 c~ɞVg1GmT'5I0UӍ}XsWTxugMp"}}4 @U2Nr"!gxp"9Olq1 2sͨ^rJ>ME'lžW&3ch 6R_ቑf^OgSޤYv7B9ITo5V*ÉW >?̛3"{[%d`+ܯW`iKa!G3Wk)L6X{ʨ[ g{ο?/&ƾ/4sx"=8wdUu>A Fۋ#ԏw5VASC&nĺ~1|ɝEt"Kbٳ|1Lm> 꿗RS8vDY٤%`8Xj6+LKE>R-Q9l\'yENi1^fgeHn.NGAc{w;,su+91$~j dzxޯlӢ[/ <1J/B!tȞ$=AP.R }!-soWLU}^pOa6I#i 9+ Tt[ J 6TJ5 {4ZiH6S{ܕr~/oxȅlBQ9;0aH UvU 0 TrPa.'ӦQA)S4>Lơ5KaႳtkf\Lhk6Va!]sEƼܼXwJ$iSW?9םu{odN/-ta9`c74HvZ|8:: >k-::-zw.J`@̅4pn(h$~ڙ_?$vD_`gQlBE4'Ӟϐv/|`֣ˑY1y6>S)4eM\hnFfdʎ,z~~k8O| !5Q(ļתBC@QCGN(`Fz ƴh'{Ҭ"fcو.]jrzN0^%z&0˪M4J#j_Z4rp1eLYlߓgP@ARYˉe֛QSH1H>Y Υ!FQ#z>3Ƃ{r.[rW'l&QКSc˔m]rKw@S8tv~|Ap"Sj딹gϙ:/Ⱥ)e0ع#?JJ/r1^ؑ#Y8˄lAtI,4. ʩ䟢VIO-|E)CQ OY L: 3{ B?c<#ĵpF9!jh xc+I<1Stا`Ma\֢W`^8@\Ϝ)S{F۝:ǪY3&zX25]ƌJp63$K )ع+u0bw;f!y 3>Fp %wī]t- tKs;Ty1Z Ud׳@Į^kz>QOr$d`2׬eF$YAֽ^[kc\+|+_o&r~.tطT6g0 bp@ Mʹ Od /_%|wL_GG> 郚On۟ y ׆|סf$r.E{H݊+Z2P+kLlsF{mi,{XWqmQ cĐe{XP!SH%&}, '., gY-b _~c_=iU:Il=g0A(J_*C?44'5B_|ܚG\ʧ߼y:ڴt.&Mh 0N© 0N& %;D{ ƓM#J IeO+ۍGkkF< J dZL kj5D~Wx!5gdMt|=^m0TG@ƫ+C@P]{,:clq$:T-Q$*Bh+k ˒ >s.ғJ,nJMA,2ٱ~l 7O·'8eaQICL\} ͽ u|@.w A$"tqQuAV8v%nVWtێK/pAbw>M\߳n35_% /gi5 {7pRy.;jDžeOlmЏZ=!3RSFl=I V3Ov Ǯxw_߶Ա}̟w;bÚݜ4S|RC<,=hgۜQ(<{y5" Y!],L5wX??_\eȐbksV<;7qR6FY^0={玳đ$I}mKVpAFAIoCG_Jǀ7V99LWJP=eZ51gbSx~M,9MfHص@]ݝٱlܩ]d< +kDəgA4iG|4}~3 !Ĝu⧄B|j-o5kNI$Xnnw [WF+LQW]>#kn[rrFvT38lJ!6&.M< R3OgL:u7^4q^S*-.L[V.hFwwZ2!.jLfUAkf)5h)K=dҎ#٣5(@V 1x Jgl Ư $ymd%vI z2b_ihUYѕIC!tg7wJ- !M>Ɵshoao{%ki7ɐ$V7^4 #| O'W.!$6 ݰEivYl^zvat*j6Lt(Uc_ Egªn>OU9=˛BX}&٧~)swԉmoo""z Q~Rȹl Mtr-`ГoF%'|"Z`PrMĬYN:ѯKwWV -??rXLG}kU0‰V>>Eraa*Y`ˡvtږj-tjHp $`N!&&>QO.Q7l%P:ULe5941jF( |e23b#;KlAW$8će s'Ndʿ7pa^ G$o]'zindYu ш#t ?񥬈N/bHhZO"O>|dGSٕMuU#//yu?a6Myf9Y8rr|s_ڼ4~ ӧ/7l>˛BwdXZԢǰ~Էփ3c~)Y[cE:yzflJ[(q*Dm$_rǤ0]ҲD,_.S[肇說Q0FV6iI>!tH4wwVi2WWXRy'KM+91$~j dzxޯEWݮ+B*s*YE-6cƟf_Α\q!) 3bNKX5apH]?1b܀F:iUU)dn/_ʹ2,CB)⿘ZY.Gf[t-:8{MFJ˲uTIOT`dY*`eɿG}~*-,+vG9KآFjmy׌n늵ڙ\µ"`S//OX@?f1p1#ζ2uȺ)e0ع#?E+"CÊ@BΜݾ,Q'hиăD+/`,L KLwTi   pdAAAJE   B"YAAAR   P@VխsAAAxbī$m:-"thshԭP_rnL"K֤[E#qX%#+2MZXȟkÉ:IRC 鏃DAlƝ۷=o_*-٠#-);oL@2hI&đ|%JŧFC{ю#Py%'"b''jԉ>:PϦ킲]OA}4 ^6%>(k ˒ >s+KDIxuekYGr-$^'#3*B,a] C^Ep]{&-1t6(5`˺4>b+,˶J]+ο?Zoƚa/޵'u*$1,؄!"?-faZoRd87tlOcK@qbR@ l[3+2:Qk#Ic<'X{>ze)%p'v? /dFW& Io 1%}d1X,VxD&u`4Elאq܋tIɎIYPқo~Ǘ729^N4#,=/ՠ{i{ 7e@Q| #s?:\7eK;~iܸiGwW,,jT)=X9(ozBZnQ|_t8SI6֢*ܺ2rTA,N3_y)ܔpqrrFvT}VhJ!6&.^XICJ͌>,cҩnNȪ%ُA,r8܇?aG# ne #oE b..eҎ#٣5. oqlo\'ӧ1m\GػoE+P͉[zc"S6G%bF.-Nȿ[qѵn)!M:̟sh·*IN/f2}4iE"$9 ;Qt퍟F܎I*kOv#| O' AZ-h•3ȭAlI;~)9CJ[9|Jgk #DW 2YJD'MŭVǀ氿G'"?AOLf|FʐdA`J'fbv҉:'}ee`߂8 hB݅Gqv/lYF+[ g8q&A/{NaS$SϪ!:&>)ħC3K>VS$g g+x{@aCۖj~>~XS9v*!RCAx 9i*Nlh?9rjF"aY_>$u<ʮhbr4(+\ض)^}дIg>{(kzxz_nMʵ?_ g{pl3,fx3D~c?dooyş0 / Y[cE:yz85lJ[(q*-Q3ɗ1_L.b,89/=Ԗ#{+5mGMZ?=a6e[DMM+lNGAc{7,su-*^CBop<ۏl /DĮx2%K,J1SX5@΅SRHE*qoB9mB#hq 3bNKX5aTcIHsj%f!~l^yds u1lإۈ&J{^-vwIV Z 1m4w.rJ`&BWcbo~)r!֯;G>1ixo0-^K՛Ӷ~"r1򛶡"SE:5A>GPIV{wl6#+-PgHH;/2e-M(+f.`O=["5mW&>8SN-H>3{ lh.uDXҲu]B*OaO ;r r~'%ٍ @BΜݾ,Q'hИJPbY*fꈳmsLE'Q=*T-/m]@R;Ӽ]WVd^}%pdT7|h?7v*jDT:]Z碇9/?ç};ʜ^xD}djV?LkrC%5ZS@FV2xh)cvKOy5ơøvEoQ lU uq?V9SI-9gݩxxzq8#`2%ScQ*jeXqg9ObB/B[' ص 1+bFGot3m"c(`,L<@.1QcA : VAADbAL4w1+QOт  S@T{2Szklz=AA $   dAAAJEg/l=EΕ],J~ĥ`?OAAY >tހcrVZ.Idܚsh$`:{˵cȬ7ia" '\&J uz2?~ZLJ\woxX<߶fxŽK>1} +}#I&đ|%JŧFCGՎ#(3]{lJma.W% \ۿX=6 ^~V>^]ذ,9݀3Ѹqu. yuQ$%8+hqatoʔŨ0U:57)3,dnh ᇳS[e&h]DDDšZ:ѧ_VL'زn+7Og 7˲,?eYzR]Gx]孿VSBKl-e]ڵrgFExǮ *n}qin<]JeUv+b-y=cOq8Xޓq•ͤEXب&\^F_Jz E"8~LsRjș'2ɕeAw oCNLs 6ɉ4 ;rָ9alc2u W3N @FwGfηذf72Tk:%2¼-0W/F1 4;wͷΰm&\5 I thK\+ SZUZTZ묜Ɲ yac9)1m䊕ʏ vM?Dj>߶nA8oMcz%k1M2\˚߻yE" GZ?ӀiR?'KAIoCG_Jǀ74nܴ£+5t`SR*!EO^ >r_˛^"U5-pECmi3YlNI$Xnnw [WF+LQk9#k&+a&:fp*y3w&XICJ͌>=1m{IBЖuD'.@=!wW ,Ѵ{dXyUߩ Pɲp*p or,p8ߓWNe\n?WU PYeС %""|'5UOe˿y=tiC\L׭=4@ `(Sɿ @>`,L KLwAH߈ bAAN>n lCx'AAAvפz!  Bł   B"YAAAR Kg3q~>/|ms>fr}x=Ka,rb/pPz2AAAxZ11i+}0r3obg*QwdY&ܪ. ,s$YǐYo dE\NԹLd@O' bb64D߾.x>oiiIݹ|xcVi?$ @Xvb_gGXc WoKs4߇~oS7A)eYzR VHGEDn3No"]Cz9MQW&7%'"b''jԉ>:PaJ?u[i$}:VYu:v#|w<%;.x=&k ˒ >sPo}hX'"?Ŗ ع9~#_o/a]* 3,؄!"?-faZor4 ;uX꾼;#{CʽdNHRl^^DYJztG f5rvcϐG< KwrlgL< 3l0EȖMU5ƟKrp )]dfoT d2-g!7zBSeݟlkCM2eֲ3 ͨ IDATJH(rHy*`y+i^ģT9;sJ;\ukAs\3QfꎥlфA/(9t҅#CqӺ?;wœֲ *DBQ8R'KA/㤷R޹1?h75=/݀<`VHcܯLƸL$ όF/ fmLd!z7& /LWdnΥfA&DD,lj]W kZխ9O%@F<>:ʛO`?8abW#*AJUtZ/'G 9{']g6l:sڴk*ޤ} vgKb:pq-E_*8U"ߍR1RDVȞ#\Q Kdi-#"gűng^MlL6zkcx,DB;X 7WL hR%"Iʴ=!OC=l稖r=كFn[P{xIJ< ŧ]ʗ1N!cP!c~Wb f2Lw9}"׆K_囂3Ɵ11:уjdNeXћ 7;Yٗ^|~*{:[*ȹџ]7kpIgg:馵B(qRQy Z1p/,VF郷*&lv,{ 7*⭄k%xD#&y.5%!j85(Vbe.]u15}rdupz?KFo9PD &Dآ-TǶוJ<r+F՝|xfC.q6Pǀ }[s_bЗ6UȮ zv*$b?}ǤRao0`(0{ ?Ǔ-PBN899x>ʠ7`OHz9 g $рAQc;J쿘b-ׂҥK_RlgVѧ9Ҏ~`&[cx&MIg#L5lSFй[U6B\U2$>zj>TCH%GGԤ["~ODV3)K>`N<܋Xvss n{aB,_V+%B;Q;''Treu:% V:kpё}|*}OxAxp5?[?Ѻm}vĜ% LI|E~8K}tQ`wANd;/Py8SOC=cz!8/;g5-F15 {K'W˜eՋJv 7S%4 %gH'rn8K`pZcc[Q8rxFqzT?porvf-#N+_ʄ@zvoKGQ/)+\ֳ ]97}MGF ~@/ˬADݔ G $g NhݞIE)tR,Aǝl¢oZd$;;ff,I\TjM7}RE.I[ Z|"\?4oB{=RQ,p~Y۝x{joі-dM<t$ iYƏ;ďSf#N[T[ WX.czt~,YF{|>SRkjӶ''6nxseXOO=%vt}*DR*u0iFsi츄X=\%@rl"vW̰^no|Yg%HvFJ@67GQ $X2;S@^ *Ԣ^TI$G{ !OȺL?b$K`xT!)JFД|>%PVS0rȍCi /{ k9s?i=HiLA/lLSd{EE/w4#ET厦wN@M^ڲәfd5<]:$Z6هaԩL&ks#MF+M׏mhZ{#cd_B޽.ASC%U bv[.#kfx% Ym2g`4^HXWsFx_z7{hgh>~ҒGKٞ'EҩK7f9zX0!2mG3eUQ9ڭZwV,Xd'Ll9o`lJygP%w%c fL3! \kub@bA(Es(/̪_e =+~ 2c *kj !T#9w3G 8K¤ٯ`L1g{z4 uձ2yy6&I}z7]< -2 d}׫]MA}HWt*HVc^TSJ^;Pw]*K͹qýWZETTTi,c֗QK |d͚5hn_x##?%S7k֬"O l{^ݽ@q$Nl)3w\q&   DVAAA(SD"+   )"l2F Vx   eHdgC먧S-BT3%  %" 6ߙJ]_?L"6AAAx z);ĸz3$&K-9}_~9;ȵaI̚k[kPl>|4,5^f(QτS7%fIH2|n {X?jQ-,דI=hTfB$BvT xn>bN&.>~P_7nJPu2}7fd[R[9tyFJb3&U2zPM̩a 7z^hBRw$v?I;z$x[$ |KW]pL#YgF]-@%GozY{K:{<x+g%L+ܨ싷mhl<oqkLf; BW탈P}MZ֑Z>;r"y20}r(HNM<= D{lu-zrn8K`)z2~[ G"|"@YN$|D̍'I MCHp ~X6kqZp}rV&ҳ{C\ m|JxI\I4'UUʹ6{h:2b3L|Yf-r~Vp0_4Im{BRѸ&(c<͖tUrl"vW̰^'ZJ|eC.zYFB\=FSk ME*֧[ ίM W-C{ٿ BB(<kRsqoaM;AAҦac/NmL3vǮV*A%fs  ]۶ƣ OK|ݻڥJ$_ڴo)0 f 7?UMd3%!D+ s0 1O僧-;}h&Lnx97߄a(W}W 7-zllnhb_sGsn;<6:_JA su err od?9Mc@9{ K9+z vK瑩Hgh>~ҒGKٞ'EҩK7f9zX0!2mG3/3MXdSEWL9ĺڎH8BXd'~Zt'o_2`4V'~%Ql_aL(ܺ??ɒNCyeV-V\kЕA %dƯ2Eʑ5Z@qhїxzI_-c4 i*celLw0nV_hU"eKP%v=ŸU,s{ZXǂ/ߣ&+By%ɚ5kxG87GJo֬YE8?:`ʕFݻ{w3F<H >+S~g&gPw4$   )"AAA   eHdgl>%D;#  B#Y:)2iK(-UL  _DV($Mm3iH}\6MGMև-ud  B {d1e_OcI[Uq?Yr?}-xi54șJȓddeJc5Ⱥb;d`Tjx"#:V5Ŭt»Nukc^BgŠ#im@NEpYzt}H3@߱\ٗ-2UZ| q+Yi J\jGp &\N}5ӏqĥ ֥)>j rawpSxa)'o$Y za :6F~ZpA/V;#Yi]y8+{q7klX‘ʵ5+ٸb=%tFzUO0CWY@_Q iQR-#d-q13XpJ^^=Od K.T@@†>_~/"/fN@Fþb8}~{pK{6qdV/doN!MsdW@\eXRC1vNl6?]QZ)1_m%/5pSRV@amfjU~E͗"A yh9k2ؿd. fd;_v!WT<.i1Z͕P;l89+u}Y/dL;'fbZxzsTolLAJ7* Z؜L\| uPK|c5u.]Lˌz%9]?|͏[}|}Kq%ޚ]5KU~qٓ z=z5ww6NG?;-A1#a]M%\ʤf2cZ\:}+_Ax̗tX1uf‰,kKlAuҏ%!j85-%;QKp|7?]'f[쳿=ggj:3`lV IDAT,SZ8Zh8*쇾lDtdS y?5XOd\rϮ盵dzDuo}r'gvh[*TP/zsNK4Ҧ zv*$b?}ǤRao0`(4sdy4hCT+?ߔ/W֝".5({Or=8Npa-+\L_q 7mEug nԨDfz0֦omAl)leN^J4q${Xs_2ا|VAwg;/>>vͦ`=xy;rnlя~ 0n$_Z3rIi; 1gZ?|.}Hl}_ZpWwA$j\e߶0˘2ϲ}o Sq$璛CJt[9QVd]6er{՟ǂ"II'W/>Eꟈf7 *SFɗ}NxCɹٱ8 ?տ+_VYӒm~ğwV]9gvI!=[ATapnx#T+DNhݶ>;bNpJPoq'gav{ xpܯ,<D")*S.iV;o됳iԋz2!^o5cq%B*y\\3[Myˆ 4.NZ|C+lKGgdd KV_f)=Г5AłTU>ɱD/ts)pr,Ӽ ?EC,;Õ;aH>O^BWRWOEwVR(zwBnI6oL:arnD ]{Y? ۿ"#بL뱷u0sKJ0\]&G*f8K.d~;? iTϑ:HY'@oJnP!Y*W3}[% }=O(._=|f9zX0!2mG3ޏѾdd\̩PRSt|/o*ѬOVcfYAMۭ~^b%jjjޥWѕ.հ"G_H0l`O'")}iZyXAY *OoOCdjG0ӝ}}ur+ָݛt2aOH+yqwpyu"rf-Grf;9S=gK;hmi@d˳1Ijӻ9ϵ͈ه޿x$CyeV-V\kЕA %¶WRX u w*s V^|n΍Fj*JcY | =^_{dd$k֬yDs#ŋ)Yftfe+W_p 0wg`L۟B-|   PDVAAA(SD"+   )"l2F V.L  _DV}>z̟?e+4jK=OAAǐxCP.Htg*Kaܲ$kJǮld6+  rʘSIꯧ1sKb⿤vE{K~OhFgGɧCh^$'k>~LYO<ݴ h%g YBX (aAbٲ7 X*cp*-WpgޒΘ+ۯ) f/f |"V ymRgR.ptPlQS/X1x{d›g ,[8ֳCǾw|G6Z[4\53fHUL~& 7{njX}hKᡰDVr}=0Pfo'}K=:?ϣ59;sJ;\ukAs\3QbꎥlфA/(9t҅#CqӺ?;wœֲ *DBQ8R'KA/㤷R޹1?h75=/݀<`ʼnI6\$IKG>=y|t87p&BŦ0G0Jyֳ71 @S %%t彬ZSȨiҕ>ΈZ2#LJ&J 6 z>G;b |m &GG&Kh;[1crV)xd\>ˉ^4]b3@)]|.Ai.8,~.qt'0YoԡA$9LYX׬vn'3Yk%k)jWnTyY}[XS f8Æs?հRbIH2O>`谧 %`g31[- %.ll BIĥmv¯eo^ d]6e:#]*XNr Zm;Anq֝e,&/Lp{H$MkoZm}Rמ iӱ!B^x:ݕp[믤&Y)ЭX͂m.z._x8D"O:œ/q KI#3]5ePgӐ_q>̣et*SFɗ}NxCɹٱ8 ?տ+_VYӒm~ğwV];v?=p닁׳fi2$Fn$[V0DV1J 鎾J| }֥qA\4bG*HNM<= D{ui7.HE˾=H]g٫k>Z`Mv闇3q̸9ɒ\fw?Py f̳G{[MNCm^r~믳sVbSýdqrYaL֛-gZپKT Hd9k?3zg4ό|(*S.iV;orv?:zQO#s}rV&뭆~7^1ZWE\37MyˆPe:WΗFGQ{%%{\58%K'Cdr~VV{ā'&@ PڃDOF24TQ_"h*F1UםwK?mu.į)ۯcy6S67rzj1r/KϗH*ŠMӠ#JA su err od?9Mc@9{ K9+z vK瑩Hgh>~ҒGKٞ'EҩK7f9zX0!2mG3ޏ\T|\yw2Ve\P(P):>WCD>ZSte7oy &qj2{]ܩѢ+][_&zb^-}pTNgGW¥rAk*celLw0n{n"tsm9{l3pA/Owh1CF=tQ`$~]yUy|3XC]̞dȴҟtZOȐ1| s?]2 vIceu~^7(q _&wλ]kI/<+BP*s V^|n΍Fj*JcY |ZBwy?Vʡr{L߿H֬YF(ŋ?¹=bS2e-~f*ĉVgCݻ4@2`];3y?˅[ĥAxH;9aI   ~bA(X?#sT[   DVk:|  c{CR7[b(Կg5Hz y9~gٚ>_Ǘ |7)`ED6o1O-P࠱!|xk"_ͳc>ÂG2c'2fỲ9օZ*-}Eq(]Ď'ł=јXbMbԟI4c&h51Ƃ+H{Aػ(帲?È(8vvg&ߊxZ: b3:JdҎne z_~&-75۾=?2fFB]Ͷ?dر> %%ۯP8qH?*M(*A?#7]r˔Ysuo@jVբ IDATδ#9kD4IMztce&*G?uW P?JL*xӲ5g/f2Q:8R%[vE jLj-Yʂorj Ò)zT25 59O^dÀQH_o޿Z&a%WQ3X<FjrM0)\)+?l<]c?mRPJuy[ϐ4qyF q?:,V\۰ 5CdbO4 p#gv&I.A-\̐A ڕ;8sؾ/6u1P8дe:6Aq(Ztd̰D: yd遷kǎD SOpTz[ -2w5~AHn{U8${o84ǎ<0J{--8!CfO̙9`>Xs:GMWtOq9oDadRFnKk2`Vxr<[^2?d^fZxtc%OMeĎ[*m7x*HyaZo?q9Y;͎Sgn" r !d<ǵk‹%$ga#)#8oݺTjSyGdI99wKTl5w=}a 9F-}c\.ĝ{*=9i<,?Ci43TTdhnphl]֢}̾)ieVLΙq?aLtgZ3G*6N9殜r\ s++ٱE:?ґvG}7)BN69X`e!D؃&Ax)∉7(J$5y]hv,m0Ɵ)peFʫ{n荏} ;Хq&\ĎM}qE({o*ЭRʸF]j7g/fXYI'&Io2EGSKUK>$l=ؽ Φ29чX:9^m٫U-DMZ,$kjv;}7ӑtv3.Jw>h#[s:wk^VȠYu&æ [ ҧaP^OCZ{Su4D.%g %n^ HZ~(V~Z59.L~(󁬜o :|c$>t*QD\rmo,Zo"]K utrئovv}Gnxr&/I ~Ukl]ݪ"6l!gǸafX2vwGi = y'\foō,`|K,&>OL{-vn,7wDƹY)aͨ h{Ԓ8b%kf{j9llsdR@hvNF|63u4;e[]ܳ:$Q0o)#̴Ox) N2\&j8ޏ^*dDeNnY_DzcXc7!mJKvgkbψqS;2cԝ˟ŞC}#匁t lWsõT}+ٔǰK@Eu(oUuKw"e**0n.܅z^~%쎅@zF 4Ⱥk:.)E)_}y %V.fzhc~O9?otImӣƲ?8VG' p UX4c7.c&ɽ&:rT(m WfHŸRY|Unj}޲}2Gg:|6{ǦɻLS >-?Izq)!]ӋۇYW3^𶕞}O,& <>; fur*(ntP;'Ku_P 52To3,dgA,lܭ}/e^zus4RJN#ӷI J{H<2(+H&3j[Ww!e>-9Sb*:U%j}|4Z::W(;0bFN=mGN JO\DfJM*tDF%X 3?/e ‘ˈ̸w=%pϹ,N.(qy:.T¤n9 Ox1mLLʿ8Z nsnYKصV7dNSz:/Wv,[8 3{Gng6ߚ@Gtz')Pi 2fX8?$4NYՓ}ka7P pa'wOyϪh^-/}A{]YxًoYc䆻k2Y}2k#.og IAa3|` ܭr;-E+DFa8>V{R s I Ȕ@V![mr(B‰4w[zn]b<z(Rd|<|ɮ D&L|'0Vߤj4F&˱ln,Bkbqn.0]2'W/f7m1o[&}id| D^oX)J5 % 옘z)oYpЧ -ʙ\ư^>?1ycN] @ȉ[ToT)6~Vąׯ?㫟VqfVz}fYvC3X[bc`DVT@Y*]6 4hXWP #Z7`/m( ,,,p4Ÿ`؇?rغ Ȥ fj?<4YIթ|Hh/5Z-ڲоs&!2'Ngԡ4 QddE&LO+χ앿"+ _Lvh ')V9f$;rQ&ҹ5X061DFr?]Ji9[= 7K_Z*_9SE6]LkfmG j۳C!.A¡v hOM 4gCY&,R aVզQz)޼Qת'-xW,#hF*L:嗓w=LRRHh6OFf#T Im1c_Xʊݻ"%Y1|/Y"sEM΃ĩe ;"?6Uaѝgo^lF1 U`\ y%Ā:U\Cإ@S?5cdZ Mp;t[z*=$edg1BYb.T O$Gի`?5>W]"N_uhѦ6{D)]O∉7@R(tjtI"Щѕ+hoZY./j2dOKѪlDsi]h=^E4-ѕryN_;Px]ޘ?]?vXxjsb0]Jۼ3Io&kun)s4GuxҨ;Nѥ_dǾ}RNd-M7Fk=җvWI J9~swu^N™:BmdR*X8 +#'WͱV% [#=l-[NؿJ{rέaƷK8BȚ4>N+^01$rYMfN^3 =7NDDE+oO,_AGP8dCD4L.G]E䊽dU?2Ț$D\ }BQb8t :SNdBN F$&#cZ:c&ړn"2ĸ>kΟ{ˆ |n {{9EӘ-YF}.<ə[QˠϼQi+{? ԕD2*Wd[[ Հ64 QM>^x6Y~79^ݴ:c/[ 1֬ekPZ7$?rfNRgRK[2NTV<9}hrV_GT8nXڿw?|Ѹ R׆0P(O^| Y}zĉ@ҫ;q˸j3+gbO|Kf^F,4 UC=f_juZ ;w_o.Y,<1J9ĝ f(XG_!zd)Vt9yT?[ҙɽ^<уp/[ϳ)m7gΜ'tZ :*w.!EZ@Gr鞗r Z7?ۗuD+  Ϫ-IwY9Fu::U'  L4yRV'|  B"gnݺ?W*_mIwaL~q.;Q+M[ Bq e#ͻ5F?MnD+  "+$KO}0nc;Z,43=E @=#ObFMG_U  W f%r=r~c- vC +ӻi4y;s+Kr& ; lc-ZVR9#37z9go ruo44 K\tޔSͫ gS^Ʃ),قݚR,s3Ius> ģ4 ?)Aчw>Shڭ ˏ gw&N a|~) n2#Id G6ͼPM. _j2lLY˺IUb[5}xaU1pp~UlQTĞĒr93 55 >؛H:?r^/=)Qknn*129чX:9^m٫U-AK&%.»( K>$l=ؽ ΦE[ó2IkOp G! `@j\nl[Du/* ⯴xCe0dZS_6Q$/gCWr$`{KÚ!9dAV.wUPHO),KJy'TEt32P忯EZLA f-$ c7,\KUoɈ amK eҏf?Z[kAGq! W^LjY~Y5O؞W":$5Y8e$v ov8W7It5w1v䵉_3.0e} IDAT[qnhvNF|63u4;e[]ܳ:J#|4"T(JcG)e$X+D1%P?kzD@V°h¦AUpYEzk~O9²y-mwssutq.psh [I2.h7#7Z4us$7m6&"̜Uגȕ`k e}}T?o76q&R]rS "K M\f@HaҢrfpb8jdqޏ$ތl -&v|ıDNհ@v!ۈ,ݛW3C{\ e‰gsyUbԲ;w/lܭ}/eO/r5; ۟Ҹ7G: sdzJ{\s&9x]Hb@5GLL ؤt_lBZv츞L.1/0Lf&1̯|ګE<>J-CONn00@u$賦JDd g2GuKNSfx}9 ('uCB؆w<|} '׮ b7ɄY9灌䎹.nχ +) ]^L۟n&U.bɓk9 [òcoZ8>Ekd9shM0)] 7,g?->4K"cTǿ1QP蓈<G(Hl\tǯJ9,,4)c*gryrvюy&.q&ڎ~U0#;4Fe\U'P9z1iCVSVv[Gf[?/ƇY!p+IJOW6ƖXQNc $=J,No"sfN?%'*u'Mb!ܩՓ ?C&+j7aJZyG|qtҠW5P"Ycf͌{_4b.1yBb cF j Ə94dBqƱ LL1֦ݼĄc7YˡUA7aV<]ҪHDJQpΪjQOux~E& '*?~g=/1-@9+l,)fgqXU'P9[= XN?Ic:D^p F [j7kH% A3YqX}PH2F?r;3;hy8 sxGGզ"3MeĎ[*m7x*Hya"Ѭd𙾨Ssd}sWKsrGc@w|-? ,XOjq|c}‚UVLX.Ϙ^(eSss))*Uѷ4ΰQɀQbS(OrTR$p')Z&'*;G*ݽgR}Kruݺꊒ43\IKxd7GӘ;E%%'ҭ#)j-Sm,, U2Q[X"O s?8lՕ1{Z)y%a>gԩ|1/Y>m>cE5*z=HVD='W̍\z\.xSllGNBӢ!<,\]g/UetF6E@uz*<([.?}e.&9R^۴xrz酒Uȿ/)6)?m4(uzҪo|J.D T%adBMGT@&5W+=$ketsUVdgCVrԺ3C=|ϫ@2H&#) ksR?0Wqڔz(+[zTzNՂ'ݒ8y&92M U)s! ~ Xf\g5_O_leC~>VpA#{.tr7"5LwȇO]η qG[w] Q{ u)L]hө!\Ӂ>&Y9 |0J *şCPDjdMg".e\B>1TF>-MQ8>J;C姰q,Sh\1W Uۻ-?j@E  ب&lq(&NLV41_ĢD2ı`;ȡ+83#~XJzbZf"錩gmF.o!lpC`;9GO oBV5㝑qQ<9=sZ@!G-4 J= RTw1ųYs-az3[B`]{Fn~4Te]zL³ ucøi<~!?hd6 #@pdM6 |M((y4R<A(=(HA\̩}/UlɈ;᪞փ5FlW 𠌍|.$k_:a}-x\鹵y. mc r;̜Qyt9EМ=$Hd8H~KV6WJfع2+NM!ǦC# yfLklظ;dȘ2_.z޽uVVx 7RO46ґxtO)%6e7$AAU ³]c˼Ҧo;^#eϟ   <+OtS8/{AA9CAAARE   B"Y'!F?Mg鹽g^}¯{踹yy+AA #+Jz>Z|Ȋyx^ndb$?Kr& ; lc-ZVR9#37rEWpd}?D}S?x#QXڠ=_"o^u\8Br6NNa}t֔fyg(>7[Wܿ=71@DpnNǪ)qjC^j!wHWmUES{rKL1⧑? +f|OrkB9z= Җj{El[CXrFQyﵨ:wBѻ -q+bCI|k%2A Hz%{MF OrF7_Ã1l+?z J<Ś{I)D~Rh:l]+ 7J7.U5F/4F¤/: / ]4;Vl'p>゙:ʲLY_tK;+c,Oʬ'LalϫLX~&RZ槎PX DzcXc7!m jr.9Sx塿5[H1nXٹ7ņ o+\c4sTȁ?fd#+#| +eaX_4aSݠ*8>%GN;Gc 8Jʟ}aՖF;m: 88Rt9x{@u$@}Smh4›rF-q9N@QiswfԪkIU05޲>>8.)~%a6ꄫ/'4H 6mFMZJkT 41x/RuȘԨ+:x`-8v[Nz6p W3ЕGԶqM;ώmDр h/]v U9ω1sH;߶DAa@ϸލ[8vSNtsxYT/PZ(?P;'Ku ^-kOIϙ ;G/'̤dV%w=ڛȫ?Ͳ.s.ڞ&UJP[`։sd6)p// 3sG ':F]UWP(ONn00@u$A/ q '/8a{z۳g_ ub:xP8!- {eZiGe;*U0Ur͐?Zwo}*Ehchczb/'f *0f&Y;Y$jR+,o޽CW&9*ʾ4Wɔ|عJĺU?OFk%K_5bw#O̞w9Ӹ1篐]e}8n;1G.=5@@6Q-琭6F}9y_OO{c57̊2XF%NCv*p!]c9s>`ES8NoX~ZЭ}?iҗ䒛 r%\@æհTFiWHx03y9hݼH64z{ c:8c (lR|)@Fp@YUʓU8mG*yѠQ5.'NzgO{ؔ>ӧ["TIJ"UAX) >}'i?,~ARJ:&1Iz](JOW6ߘBVV-_P_Euj:&l9t29r V)gevs&!2'Ngԡ4 Q<9z1iCVE ~$3<_g:~1-mG4(_6ʯ(C 21ȁT;6z?Qn|+%ssHA1\:8vatc)448qt:ј`l,c9*&  WK_YdcYdn~`{M+@E{_6 c[ wNlaˤK(4'T.F%ff*>LwJ KL;QQ=LNsj'&*Ë׼q?ȣ5KE&XZ<, d𙾨Ssd}sWKj³̫CR%ɖmrk b_ {ZهvK4]Q4Ҿ+cLz/1:x޽+'}GלafIm1c_Xʊ-ՠV,.%Ui**Uѷ44;3lXrzRJ&BnԠ稺=NQΞJ3ISA$AeIKVd NUxa=a|eL$U\B K#g A JJ `>^VHAhͻ̐li! E̍da2e>nXڢ7N ih'Ԙ_BS'ՋXKXZ~ߋ hѦ6{Di~ ܃2w;ɪ=8Wqo#=z3Ԉ>6zb}.M{٫uZJ{|l}1+vgL߆T|m֧\b#Uʋx_u8}2L*OŨ}kg칣Aκ@1iuK"5U+;.l\t9Nj)K8-Յ>3AZ$Y+˸̞ڰvSYِ̐Alҗ%z5Iwvw5Z$"_!S2.X V> :,՛`ii$"KY2ZH'dʓnI-MQe}3OշǣAy;0񩃛U^C6 AcOa㌓Y 3u+eʊEVǰY hHSZ䃍0Qs‡Ll^x5:/ZјLc )wCWpXgG Cܱ?µD1S_یZ]$)83BPׇFy@ș8z:Le(?z/®lўc̵z 9jgP*i5l8JѬOsD2® u; '0/i!eIRbUŗNm]qpHXxv!o\s!ͱ؀־gظ;­+PiW4#h_(?U M*_>maZ$YG'w{`utp3*gde.Vn?{7p; ,UAEFc/ {M&11Mcy1łDDb`C(JTPATE X9gwg3ww\ȆR `#(}x:vHK0a ҬV_[1xy~wW`lpcq F\q4>wz>|{L6uܰt+~ęV ufo5ԣU]_Iy߾᝕:$30q@Y/ku0b}׫:>TwbXf>lQ c[?qYލZzTePJʂ^+ߪuP p \+<**aÆ݉m'*}9s&s̹GkcD ZYҹ6}DGG`jN/kcy,nmtoGzZuݣ7k}+~X>ݨUՂi   pdAAAZE   B"YAAAV   P@V0qfǼ^Q7N/ٴx92/Stb.OAAnHcIWپD&A+IWg wطF/k9c(5x=D04E8 Q\9%'FwE5LڶxL>86.,;yį\I[8S_~?A,ߘFA0e폓> ϊE\DbVrMdzmxekg97edOM9+B)l1`l,o}Gj$kt&=w&SrWW> (ϖ%4 @K%qԄӸy5iYlοH{;7ws[{:nz|Ksdw6'o?;o͇ ?{p+~U߽tF(d}hzg(۠he)UXk|V/!N ^Jz !mPG@BhҙasII4 kS LʚI: 78 bRFqij?SںV}P6`/әt *ccYɮ0'b|UޒȗK 65 Ж"8/$HJ|{?и?ɕpzGwDe4W8+4/p,_E$9{X8 ͚ޓHpM(;A̙eDބMasQ֜D-8̊l:Ƣg? vM<}$@Frv>[ OI2%P ];& CΞ_#j!hL+:{ݱ6qoܞǵJx T}B_~ ZmwR‰mWZw ᷥinY{^zjD [N{ȇmjE]?9{@R.9i1`{KWsCiq͛UB` S}b@o;օӏCZ⪼E0yxJ6q4Z tKpacYYƊ?=E7VuC1-e'Yy3$m_*YY00]3ҜclXw~B P&pH%N݂پ0OIǖuP88ȪA ㉻DV^ew/nz.n:.1lFV>Yk,`W= I8lߒ>wyTҥ+7nXSybW0 4=ͣ4\'R5e3ʘNm9 .kz*s4f{2ah F-YGnVmͦQ簚 WZK$hV慘Ϟ_$h12`BB$@}s9 2`&a)6 X8si2ԩ\[7[{ûiø&]ʗq6_o8K,; {1 Ѡ4SU3Oڹ6( F}40/~SVINN-?w ''[Nِˑ㔸ף pɧ0zyS M+.@Hhp1{7$ c*Leӟ=kFu;7'Є@|4[\7,l~b%X[55Bўˤ!<Ωijx&8d׺6x(iF2q`ifgt4 F1rcA :+Gۍ`hhYʹMaoRZZ|ߩybrO+nc QsWq d"?8RNZ̗ؽ-HVعѢiU?v=M Jћ2⃍GIZB'mڹuz2BY}zgZ %}|>u XV*n V'F$Yc>[Al2K:z߯3Aj@G'o]}ZM7.#JNh1a|3Yǩ=xt{X7ㇿד챒/s@bɾGoxwE FW0ƌ~du5`aծf7$[ ~앫謜 ;?&Ugڤ~y+ƒSguR 6eDuz-yNmg1Ƶ3hc +_!BiGB:g+O5 xp7tEٲD瑆hjSX1g-^"_ xC=ޞώcybAb#?旔&L=fJ*#yQGip^+.sѿn&1f:35#|ȴV|MO!ۘ=X H""?a~NXdZǢcI>"Szv[I,Ƥţi7 BϜu+ײ7҉0&53@7XxDՕJ|SXV_;rJӾyQc\L`N)S͟kFw͓sN3U~$2)FOR0z`О WX|/: Rr G.c*3Bpԟf%ĎHH^OVE?-yjң=wϭ.vgx~ g:L|>\Lɚ Xf.w R{<$Ny=*g/j`dct^Cb*1_a~-#ĭ%'d"ONw?~Ǣ >Om$ڍcw!rߝ;N乎9̟5D+'^y74&eC>3{) `˳xvx`,,n$ޘZY6-y}HC"#IKi]^˿_JWֱYRxƂ~`v@Vrgvuq I=iOfh~tj_w;ʗSid=!άK'CJG V04Ft'8Hp|{R WݞynWfaS 7増W^ӊQ/*[99rHVc~˦I^1dJ17nN˃QX.Q:aW.o7(>O2>Oє~sIeߙbL7ر~sa*[bPIq7keYUAM,Th'ەWb*lz]Ķ>-elt?vʵF$vobC\a+lId.t⮌7`+SNMg_E5 U2w~O W6硧!6%'H9NpRJP7vakpTVeA }|?WY| [-fƒhj9],_Ktn,6ggeՈUٍ''\;Vm76g#ҲΕvI]ݰϻH\V9r8z4 o?H_I8Zo|W$8Fck%>{otgZx@ *2$$II,dܸi UgW՚}}P 6me#l墣ٰuϧx4B*[XmGLc5&uٛB7l|'yW=,*&/Ϸw#I:(~VL^r"Y>at/ۧn%6)5žBWgUF`%G m4όmƜÞ%ߟL%V':Ę(zM"~7Δ?N> $&gKjr/IN7cI(ψ|Σc$>%'6)tXѯ#9L܆l8 [@l~f2[;;̹Tʥ\Y;cn ˵^MA? %Gh(6`oKK4~ кd?N"2? ⎬n? ̉/y@F<qÕ.-6`}Ťgu|X 0EހL:dHv1 ު[KoI%\[\F}/)4/psTbccw!PsmvWbMfPB[^wBIJa0GƧ˕K+B[LtsH.j#j<\R;4v7YK<. 3T9ԡTH&"f5'q\Dcq+X,.m8+JkH@P$s3F=%lIN.{S Oϑbx;s-$Y(z@xɮ憡Ogϯ|Bb4 w:?6+3ˈƽ 6](*\/]{2 -jzRm0&$ügLy [ $;m:ܙ[zLF'lHqJH/lpRYFwn1Pc*3%f,It^|w/McdT!ͩ+2w5=GV˳NK((Akjk~ㅠ^Ef5OX!2_KN༓]떲d{?LƁ=isH[0Y7lCPȍa1o7e5ϲ6IhkVv=yz)D]Q#`6PJ;]&Nio̗ؽ-HVع# IDATѢiU} 톏`u _}bD86ØX`; .7e>mn$ p?߮ dC)zS_|>i<oZU#~x_vnv5?bCt@ \&!g)_)k: o mhM,,avh3t$1fIRbF@%¿'Oc5-dm2So[gZpz9+;=ńI*%P4/KFP?x3~|=+2y4+[1xy~wW`lpc)kLG{|Ph* ׬iNYCR;jT -Կ=-wM2(({|T僺|YyfŰaĶQQQϜ99sܣ|"AxPU-,\ZEDDT>x`Upm,]m->ZOU{z&{{"/tCze?UFAAAV   P@VAAAUD +   *"AAAj ¿a>/aY{5/bgRx| W w-`̺y맽?  +FcIWپD&A @3a,.[{a>;w+̗MIs<s x~:MF ] 0(4xÐG(VnhV1&M:1``|lz_.Y%I6L3ҸtmLa9P(mph@HlzOm_b61ZrۗX28`{K&Szv[I,Ƥţi7 B[VF% J{|0j@s\D5m aЋ9ae֒yh~%U[Urݔ*7 7eLf{˨TnQZ?ןZWI_R0q]Fm[ETJue$Cm`񁬜)osj*Nɬ K 6 v9^zNo=?EۗGKX僵C{&nurs>O\kO!8OyV`bGW$EvGo$i'``ߖe5fxVwl,/ D cMvdBFWj\TbI j.Nj][1pL:J`bK(l dN&?NS  A0t+__ h4e*=<$ - g0JړߚN}M,c%4a؝ƎeŸ0-1p(ˀPظn3 wҗsm})== եro`ՀۑLnnwoL'XʔߵKȠFuQs5151b=Y{0mcbW7E٪gFUqC5 G%JgҶ3C n#SPcIΚn62ggeՈUٍ''tĂVm<>MȮԭs寔Paw\uhIG'vt/o%6ѣחæ2 3v64Kɑg1W=S\ȿT 툯JgP_P):3 őnWl+C(I=F PGΔ^sHJʥaX jP(Vb|B@ő:FXѦ]C - jA,\^}7?Bt*+: V*Lb?zK1TX-w/H]ye"?$>sYz5op| @IV%P}{W)<Ve/kc %s;͈oz7W'UWG7-1O}1iN}C.3W'ֻt|dA$6#ֵrJ^~ ΤcP˺Lv-d=୺D\elR) /|}TיwBIJa0GƧ4Jll.Dwrh\MiA}XUdDrQSivBzZR;4v7 -%`.+PPRQP `$vL.?=F CUQ/aO OW-w/ۙx6nt?'̚@CD7Ţy岠ՒHs p<,\xmFVdJV ';J\i1ߖEe/-C Y@h$1O0a7 ywTU[} , #^x&Ctp5118V9xUB` S}b@X [FrN?&i[´S]uW.H`mI<“6HL6|1۴6;kenTEg•)'tئ'ch1׋o0MWoƪ-'=M'z BE .tɜ5Tw)3-/nE]̔cúJ2F-hކ/Daij_rGqAjtSy+oL.9FR;͆1r[e?uhKd.sOѥN]Y6Tݦ<`~~}" r9pze@Bٻ Sa*?Ζv$LJyϘH*wtj3d@>4OSĒU@W+4}r̙P{SDz.]q״a['C9i=&d`դ/n|,.g[Me0PP bmՄ Al1]k0Y(?ijx&8d׺6x(iF2q`ifgt4 F1rcA :+Gۍ`hhY͛MaoRZZ|ߩybrO+nc QsWq d"?8RNZ̗ؽ-HVعѢiUI[kaP,"7&In/MrOH}ӷ)м ^;qNO&]sp?߮ dC)zS_|>i<]]h;|$Ekb%e {0_iD#)Y7suH{0t~ A,dߊk7dcF?\އ-?AU|JtVt|-ս"aތ_OJ;~&.GW?kBFw)RǀkZY>]#]?V d5M{DxcjԨMCmpB2(('oU>XA]>Te伂J3bذawb[JgΜɜ9sX> <t."""*}歟R,AA;*R8i^ߒ1X䑩|S:>$2/.R+7ZzYل;G3!:@.k8iM)#߈tװT}h3e*ƤýI' 쀏MWެגw$qv&Ci|m߇)x1  ؛3ؾ'>/CYMzY9;.^ϐOL/1;YzˌS6vj-rOAWLgٴt#E&βi,^C թO;v [eC>3{) `˳xvx`rxg{iB^"Sæ*^ȹ\Sި9X 7xjR>\.:k$=L{%N4;ndMӯ|wjGɮSh8o'jcc2ZISÑ|9 ۝NV?̺tM>ԫTҘk% Cy|LCl$@wé> g+ʗN|ٽ'pUxve6 rckZ.z[}55b#;!wdYoFeY\<}X{o% 2wm:/2Q]Ԥ-/@A6hE-(5[ߔȢ#̹\ȶj:4wamFjV-tJتR9p̉7 j@H&s7j 3=$AATNR$H4nqN݅-LZ$)?ٕujW7.kM9=7j$q+$S[Y%$II,$t4^ym*Y+sx̘:6"_"!j9IN} fx=J\6~ / 4Ϗfa/p/3e By0C{HƱAg;spg2%z}r1[QH}JK%qԄӸy5jY\i9˥\Y;{3EH/)3_$[vý;ɩ`wd+2! DK9:8>\/cJuD.=U~N65r?zV UߔO%щQ[Io!$ jfiC;k'4sa}v!f SIJC+ 2!#uhF(hٻ(ǁمXCPDQAO>T4M<+4+;,oVZD-AARQ@[# (EUg3J2%|}6^OۭIDg,+}H+;ҋIw#WrdwOzX_jEXxҡ=A|CmNUoj% GLwPo|{cHɕ1d\`nM޻29+dl@J7%F-w'z$5mܾv`HRMVĻV ч/1Lc Y{̉2#;y ~AG,1' 듉;YNM"Un˛.XI h֮167qPrxSge~!OL숓#NEX&s: =QÅK亸h5 򳷘&@9M >~ FeE7%;wF1gܛ7m1W#<LM $Ϡnjٰm&Mly\zyƢ:m|W#jQ-_sь;Dֵ6X-QKFN&7 IDAT?Pp4>aޖxNrX8> GkV/g?9~?FG<畉]x|xr0QOV&8 ': cyxx?d}- MORө#1!YpFMoJmݕӏ6@3$';@YABCɒYe  {[-% HZNAR$4al\d+Ybޜ^rcY:bsl-RQ.S^s9=#+aq fr6w8KwrWDJ Vo~ג\ "> ޙ‹~tce|SFUn49I݈CnߠEí@@ Yp+$n65p3g"KФUzs@?YO?'Y4-;CCC4hPi3ZY?3+BEUgJ(00b#NիW?ؘS+~-z Dq6 ) 66]@?iŸu͟ =,͍   B"*   B"*   B"*   B"*   B"*P;D[΋d%d=$:m?Nfqdy ĝ`eicsb\ZAAdT*e2Ϭb56Y0O?f%q%f?/'8+28djZӾyMGYp3 .#+0dN M,@κD]JCPڴ_l"o]l[8oG~mi7RI: )7/s`{!pfEh9{_G`5-+9_ /8(vq̪Ѧ_+ ͭK߱/j^/L+aU(Βړ=S ^6m1ƘA(drG3721(֠uuIL8Wq^2/6"F&5 ;'Zu؛l13jqj+Gr^SULɟ2I O\ #{%VW1ycVEO5ؽ!Cf> ӈ*OrqӒS/$ƒ}EoNCryNʮ+}(^[A~Eϲ3cDh@6G0K^_qխyPDYGP?|C"}Y6jb^cz1㫿@UTوuSeL*뮲k68{$] A JU?٫£9͆eHB-Gu<$}^>.\p-fұnURAdε;hĜ)5^g߲z+ LFL8;ohx"I;Sܰ^g׏߱j{MfwGWKKI>JU=_fG{IضItOtrKVv$VJlqSpfJ/l[#k0%V|x^'V|ˉjJlUswRuZ ]_U6`xnۘ~/勨KhVa!&bSfFO>L][3}[sm 5^H3p'jr],%@{+7!vfڸq9Rڴ^QNޡMXVˁ=ɵҕ^݄o6[і]cyvƩ[z$߫)N2Y'V0!;uA.i>{b8̗glJ%VC2Gk/&?QׇA[_fi#'kcEmصL ڭ9=uƣrM[Xחc<¸׺ᒿy_">9tό~A#/{v^IAG]g1lޣkDg<\_BiHx츘VvnTd 5W8saEVm6?KS٘D% %QOyNFT1jӱ;ƒܾO?e4[LoɸUJ#Ŧ#rMk *^)U'["/պigĘx[ըƪpĘ UbAw}7!dڿԅ]$8VWJX;`rdc?hH$rBM|㡿k׋Io[io܎"dw /Mecr(RAtjN8[k2rJ.pA#Nܮ7f`~D&b9̘B'hE%<}̜S{k |9cۃ3f2k$ 6%\ wMĹA\̩\=}}(mi9k9fzq;H0J7G)<6բWM9"B>vΏmzf˷رh *i Wd ٴc 4+=!YJw_d͟]JuP+Zes$vv$Kk,ѩ?-ki 75w*QZ S5!;GmkSVn3珛QV%c&9Io4U[װ۪AjDiUH3KFG_T$OkKL?6t卡8*Օ?v&]~fj͛ٙmAW~ 69+x7sDL܉?rjF7^‚?<əUDUǴͰ3۲!Un˴Ѯ^[;Ѭ]clnntǗ+ 㳙v?Q;2[鉟&6feg) 4/o㍫$XҩieүÀO?fM $Ϡnjٰm&M d [@ni0+sWzvkwk9l#W[$xnӇmoc;ѽ vW sNW!dldɂ,[s-یgoǺ qm֒fomߛN?Bl0`m6F._ȕ,wo>&T2YƇuhτ=)N%a\=xl0A_)ƀxR+V=d ByoZ3;gX+hK%r3uP`^l-RQ.S^I5*ꯔ M m0˟Ud?dҴ4 eРA/Dhhhfb(6Oo)9lLeXck~$ϔQ``` ,,F(W~1=V~/k--ZFlXR]allԓ.O?=?{Y.4= %vҶ  ?Z,c.x-rm: 邛8#  ( BEt|AA    动   动 ¿($ \9sB+\d\Ϊ4əj#'ϐ^FAA* LU̞&7Bg񳕞`yYDQ8LYWk7Z9(n梡>Ɋ H p l3Q+Ը6.u-8{+ӯ 5-F983^ߒ{_G`5-+9_ /8xR?JXMɢ6]/cބ@L٤x1mlVaƋ=fBWnˈ1*xq %qAisN-D,k.{C(^iC}ڧUD3@BiQ 'wB8?bF3.nx϶'RcLb?gŹ2 pp{cJ回UsX(q9敕d <):%:Ұ.Ա~ ϜWd ,>=9;M4$ha~ 󒖗zu\#W0tj)ط>i#߭&Z1v^S9{TKYX1U_&*VaÑjG2pR2}\Mt [?j,!fK>< πٌo.xI? NVayxYel>k% ӯ*0}G<mLE%4r+JZ^9W>L][3}[sm 5^LcN1XJWoBC37ڵqsi&C{.'ka+! ClW-)s2Y'V0!;uA.i>{9l3 ůyZa\`iksкeƘ<K5 Я9怜K~1}7|[3Ǎciؘ~qIG'jS <.t6n[#;.&ݱ֞d-hD36ۻs`,; Jqo@HKBkXbme$[S+ gİy`#pa~WIo-99V+=N{i1j- ӯ-zi'^/3&Vn5;?*;1flQ}2_BMU~Dd{|o[w&.F/fH$yb!&GQN29y^kNܮ7UGz߄srS1#Im4̈cwQun߶E 3[d/ K{7su$ouܘ ?'#WFf(3pbC!aFCmLȚeߙ)]]C S(;럥6ɷI2_1֖z,`v++Gr$LAL݂KdiV_9dk^`qq486̠m-& mJOpWc?$@I "F؛X~n%-/ Z-:QP9r u s~o53\ŎEK8T}tPaOC_:`H̦5PƧ _^lQR?+YZcMNiYKU0TQݶ6l=#)sq W^ɋj T*s.Fsќ&u2.LIܕ4[P8Ьe]v:Gbg R8rЉ:-z3 "?/ja^WTtr{YcmmE[ wz9:=aQv#[P?UD/rrI̩ɫoɘXɞaE&nv`8*R8 793sowKھ>*LEV8ҠQ,֏e4~E’TZ̋9*LEܛ- T禡Dž>;`vJţucY{4"pt\UO\S4޵^rp?\.TXϝH@dJ'=I9VX?hޔ"6U$%nGp`?oN^ywG<*|5dn~RUJAJ&\g5e\Prjs W.0Ϫ7F Dn>J)QS4Gr)=O1XNqSa `? Fx*U)loJiïkѷ䗖-Tqχ1_]tK±\gYqlZm#s/zW1pR㿼Va焣";)F);d{%{Vsj/ -]I—H *HJE쯜v8̘:HljWĂlrddd=>xww͸7g3%eEYu|&^A%\asҡ?S4+]XQ' 4vɻ>d߹MHff( Z !6jpS g9mO7 p@fhZ~%n_x.Y9)H2A{+dzaL|SIvkwk9l#W[$<]\'G+IJěM<>xnӇmoc;ѽ:ǭsiLsGQ~oq>!>tMq%b_ Yܱ1<O]G,mik,+!I4 BZV,"IJlj5GgW?ACJr# `О S{PSaE!oۀ̎:N`DŽ&PZxo<6'c;lKZ"kStdG[rcY:bsl-RQ.S^_%R)ԍ=&. Z$ ;ܚ d\l u dXlX0 xGݞlN&y's@?YO?'Y4-;CCC4hPi3ZY?3+BEUgJ(00b#NիW?ؘS+~-z Dq6 ) 66]@?iŸu͟ =>.(1   BE#*   B"*   B"*   B"*   B"F·eH,9ltCxwDGy׶~;cZb#nAARS*2gV1{Wެ _§Vdңb%lMDų/H˲]p!$SV՚k@8 .#+0dN M,@κD]JCPڴ_l"o]l[8oG~mi%74ܼH́VxsFE_w% |{>˛AO4ҳ?oӗ}߳$8`V+PO 9g+x0x=>Y5qJ,vUcj[7D4J[SYǟҢN>=q|1jeZNMb|D慷݅Ҳ-JC&7Nmam\ElĄəΊs7e*$pyoΓSb[#/ BkŤ6"F&5 ;'*BY0!esg06af-lяZa?ɢ_/Rf4}yArS2X?|C"}Y6jb^cz1㫿@UTوuSeL*뮲k68{$] A JU?٫£9͆eHB-GzS*;\u4A*YswRuZx9J_$[mo~5-*u}R[&ī߼ƣ5m9?Z?U/|stL:k6 [kc(ns&G&#&Tz$ӕ`'a* >/{[͇x{ zx"I;Sܰ^g׏߱j{Mfw^(_U6`xnۘ~/勨KhVؙ1ه6O|yٔ~EV>L][3}[sm 5^H1p'jr],%@{+7!vfڸq9Rڴ^QNޡMXVˁ=ɵҕ^݄o6[іr1mv-^FRw 0rwӅüI;_#W֭/3 u-6f\dH] Kݚӳ_g<*]Fn *{t8 OR80NG>iɑRY).p5V)=sh@8 eI-xi넽;5W8z`)ܔ3bؼGA x0]҆qeܻWe%`OQh/yP\p۴ytݪ q1N7ixL~E0ݟl׋M sHWRy:R cLjw~XcU8wbؿ}2_B15$ߪ$,IK 78{6j^XH#Pm@f8_Z,Dz8 ezؐNl2B"1ux/: c҈zIY;3 19l9 ,?Ndž4#-*cr"2"oli9 8ћYuZp"AL݂K俹mMnbɷƀe- {SO~&^("F؛X~U[Lf[n-fU2Dh0GzQ!\d[1'M#s;-PA> } !3pvwB&|yeGԲ9D=2K[&?-g4[@e|σw*A4kYΑمj&+9dSW1|=37ں.st94@#1:k*׿gJ®U }rXp21*i=n:}g%`,8>K2أFwpMYdiorf&N"߰z33GŧH?C ~Y:1ӗixTqAXSif]pTe&wVϘHiľt KRje0/LEܛ- @* sBi0\^ѺA`[8 _)lNy/{J9oL4X.fy,mÏRUrDAJSa `? Fx*h?%ٹߠq˿@kM`o=a N!S3Uz&;X &SqS5{7jTaۿ* FbZ]e/I7e:t`;w쎇U qե/% Lw꫋+{ch2 =t](RO&b[XRxS'lc|jLx]kG_¯w=d1+o mm:|ꡖ3cv[![ p Ysoޯ2 ܔ|?}ͱcA1|GX`tǗߕuL;~GLSzo sE\1?`e6zx} oc ˾chr™~N|s{aq TJL?93܏iC)YI ϔɗHoJ |=fa >emz69 |PVshb26GdAFYƭ9.aK!oeB-ĦVsztv5Sȍe݇ :bn JE5Ly΍=&. Z$ ;ܚ d\dGp~ۣGN]21᫉47$%D|8 Jӭ=s_ӥ|y$WJA!#+   +"+%3ϲCJL~>E\rIs֞G&  CZ,yfg|ůͪP)|xl >$'1#cvtfm^(Le{sZH GG!Y##+}Y z 5ahFTQ䭫qAisN*oK oiHN8=[uŃū GP^M@]% +6ckRTH6 7}ЄYS~ l~&PJ>Y5qJ,vU ?(g9+gܼiX^qϔҢN>=q|1{slvh H&=._Pu\/y3rٽj9KnWg9oOC @pfJ/l[#k066D3waήchN.R֠W2mf1v:!aQn: eD.$Α Vj/zdĄJ|ĤJm~?8^Obhi?q&û惰K _QJ* S~+pkw&9Sj`e6WXB0w3w{._D]B#.?w#،ivIw,zrV,{i<;v@]1ZH1p{:dhO$ <'miF#fޝcIn  ݦͣMX#;.&ݱ֖^G,_hmM<#ls hZNϒ~ct^tQ`Lg[H'n$1x@ cݷ4Tf&`]\[cTo}ܰ:lvdP@[jZJ`A? ~LLP) ;^!WMNޛ_dnL?Ϯ\ WV`S%}m^cO9%x}Ғ#aizL%6Qеw"3J-F8 e${Zws79pyI+b_I]J>>LCiJ7xw4gt o2la?y>,w7IFx:7rѽÿBQ&u]ݵ2ylLK@o#KX:8a|$#8n22%&6go7,ޤH4jwD |:n9#V4ic<1$roX:{@p]d aqH&]{xC![Hi:_Yz ?c( &u,ڐDOXՙ0G ΜJձ0._ħ $ڼmdңB(rt*N9\>y| W,6> & 9gWg9 ]d#ڤ8CçQ9\Mj73X0,@ԮejԪUriGctq[AFJNbӬxxLj5*CrœAӁ><^Wkoo&3\|#.ЦBll*-,7BQ:kI=^OHAǀ{4nV5ڈ@ǛWSX~6nsI7WRvh;h$PWkb'=FHۀW8:)} 劜G^^.yx|4qsk<92Lh+;ѣ݆ JM}qkyu2k OBqo^O9w[^l$JsEVΎe7eiP|-o-}~u=vdA}CC&~/yf+)M 0_8ֶDv.`q舏k ڍ}=7U@KBr4;OS2|5=ޮ+5ӬT]ݭ\^pOXO#GrQs+J#:rn;[C$DId4wN/ ;J?'&|h߱);#OrҘ],kv<u dhȶ=$e +q%ThrV;*ʈ!]`H歐/ME#s!+gdNADd}m'ƾg0iȴ0߰Q~vl×ڶxH+&4ޗ&2`UB}l*y.#9B @&(hy]Gz2 $PPoT$JPB~C<06zi oZp2/r9gglh[;%'W`&;[w!*iq@KN &Cc-iY~l Ba1(mQHH?O&$<:]7veNJǜ̥[\$ɬawUve?.~Ј?œh O.*YZNe;Cc:Q_n==cOs`:aѨވ;VƍO7`νHjF|u7֥Ѣ8 Q#[cH7ʘNu%|C?Jr,j1{`tbbk+!;jBBk|O3T:8z.s^솟]ĐgVjSU^ҎpVz4Ƒ._5pp5>R@qhdsbL^N. S(S?&P z,oG%gL/n'|iܳ7HtS\ %k}Vrۭae׃=LĤDNE/lLq8=<2*Y9m^"M5o];ߣC3e'n= 1?B=զpP>͆dp{!u*M^Ⱥx\C\쉫o2R=?xM_F 0OP*<8UGDզc 1Om$9XAdZ@JtN IDAT edr̭7)jua쐖( ռѲg \i=`+V2g IV\YtSSד`٘&mBRzՑsFȎZteU1wӂa1w>AG1ϼp_1ef=1:>P3ф-{7 dIbidy,tO$eK2^JQOrlFx+SW`p q,zʁ~ Ȥ7zm.l W|n뮅E>}Ķ<*=l" TVh4hPDGG?ɒ%qm*q)s5}AtfV{sϙ5cP0 7FYd,n1   B#   B"   B"   B"   B"BfIf,:jkriVϚƂɅfJfL9NK\X;wKl}nAAA*"e3aOhB.cdH$ u Gzl>eҗ\<'{_"KvīQr^3ZN22Ӈl<bיLJGjtoƸ('#z6⒴x6@mK9}#.0tJ_bG][e\h;bhGǦm{o0@W^羿PA/ 2A1gc߈K5NOлg^PQ([ 6.8eE#hT1z8-1+ĽDGoXէu ֗_owe=~kٸr.\Ǩt^}>UKxx.BY Y)n\.z1bv3C%琕ìZu, !|#~_E",`AP^ꃪjk^-K- 8zԽy}jS l^Kw`L;7$vDZp>냃>m?|k~O_V;BȨ损;<@d%@S.Br!d)YS^oO[߀7>l Ξ8[w o)΢=y({;']ƌ%$+>zF}?g;3o{S@z"282'u[ñ,\zZY\oVX%]{[q.a }_)/ߐU6`ܖS٩ =0e-Y 8iB#xvͥ˝ܻ ֞ه3Wv.cPT{ ;͑SNkw]k` `S _]JHmGqQT$dž4Kbǂ22\͊;qfTٵfUr e3f.w˒҇lM@W^?_+y*+9Dw5I)A`͜B¬+eQ5aæslds]kv7O5M%%$n)(:1jE`w"Yxŧ]0tr-T j7~J ;7wӯf) )ŧ烝3%6v%bq0ad&vbEsA^ ;wO/b4~]NO\r:{"#9ދqNGEaD±q LjpcL|Z$[ ci'N-&Yޜ<{_( ꄵF ~oIN θn5Q g_|eqV3PwNC5 gꄴݷq#$,'H2v6bcS hTĞw#m @D?dꠦ8H &.uU m㤈 dG.=}4~ ֩34wGTdIIͨP97'ꡰQ߼9lM,=]Lrsݻ2p5=:VbwO}+~fSYvKb2a*&_.TX|P. |t ݜ3ѯ?˷k|=IؑA^ 9տΛ j[ԦL7F7|<[Bٹ$>㭇0yUN}$) TW#zi2%[lFX]ȕ'Y#GrQs뻕Glsu/XzP7-A<TN ;瘒mDZJne5P9.ij2ۼ,ٜZ ;7ޱ|JrN6[ $ zHGȖC5%PFAVG2oĸ~Ah%+;ONϓtO0qOu;P%<WhwQ3Yy|RJ×ڶxH+&4ޗ&2`UB}lSuRT]:Fr&5L+hQp.d -pS[j|AQ? Q*|Jш4ée?79^TW`rۭai[kCdӘ{"yn62BM;į EVNDįHSmWdhV&}z- G/mr>QRpFdڟmǣA?ƴG#YH<~ʧِ nbO!\ż+8zœų7ZjfO\}3֖Qw1ųl2M@~RADZ~4-,BCx24/62U!z2WdL Z綃Ojڱקx3|}?' 1fMڄ#iVVϧ0 c@ۇ3D5|>=JiI.>r ǐNv!mQ c8I kq+94m?Ɯ~ӆfɱ}zWL]I7UkUݝL:rzLnDٳC[«TP&)"[l &.l W|n뮅E>}Ķ<*=l" TVh4hPDGG?ɒ%qm*q)s5}AtfV;sϙ5cP0 7FT0 nn*1   B#   B"   B"   B"   B"BfIf,:z緯ObƤLDO잖KU  ƒU ^%)= `}|*Fw'F|EProNW|6uZыd-ȒjԆ'j(ogLv baہ;+u&ґZ!۽1.yI^$-f ;лw[|Z~AGپm:/woI(<LJz > pX/,׎q:\QT}D~4Bj;acё8T%g k#WTlZwf~k^d-qsd}OOC%L^^s,IYaGӎ:%Ae ;Vi2 J~+i[!+J|6Պ}ha/ߐ5bḏI8b;#f7c0T\]&ãjStt3Nl|+ d a7Do/H,k]}PUm+5%}?|v׶4dV/b7Om! `id®H c}p'oX{-J~tGrռsw}f%@SA5k%]{[q.a }(JKOWzmoLHoO$& yEL z<7m^Ȍ߮~Yd&W4T}3'u[ñ,\zczL֑,>Bqt҅k+А;O6'QFix.m~LT㶜b܍NMşG',_"z>Z;DGOP~_ώ4y3U?{s\5PЙ̕p=/^Nsa5COz)jit{o6Ζse_Vk~p'Ds4F_F?WP`I=/wr&-[}^ 'ȩd-Sl^× Hx.1wz֭-'1Ѻ5vL9H0ays7pd8nW3 }+ACSn}q+[/d`{ $|;'p߄CO^?6BK_( l8ÆMlI!9S9{*a8yOnW"%|-!Υ'oLi%ݖ铹.'VlUC[~2{.KcJbS$'`ѣˑyuo$n غѦC#\O%#tӓ5AdY.}Y&,J<r*OӉH#&/e矲9o"cEKֶ;VƍO7`νHjF|u7֥Ѣ8 ~S#[cH7ʘNu%|C,cQ[Ғ4i]gZs'Veo$ cb,&ےhئ)YW)֖Z֮=L OdӘ{"yn62UIUo?g5@RӢM/CȋgϑtoJBDxW_N:Hz%"jܟIӧ3`:= 4vn da"&$p*zdc:Mo[n5/Px<؝ntpcS῞RY(S?&P z,oG۷+q~ᡪe9m^"M5o];ߣz|ǗuI8R8~ܞR^+!%5: gNv&{<cL+4ă{8MWg|* &4 BƯ3~/ u썹VW-e]{~L,x`6&šTxq<-B,);m$[b`YAdzo !3D5|>=JiI.>@߿K1W ]Wic֋R CfsS9{m7x!t-^Oǒjs2#6r.)[ItY_fʷð5fpj,ؑ^^sgc3^a"do=kxD?/Ce[tbȳF4.+#:ӬûlK_( RIAI &ۂՀ,[pkGEEѧO-}[Ǝy]7+*4hPDGG?ɒ%qm*q)鞝 IDATs5}AtfV{sϙ5cP0 7FT0ɿIO.2$.Cg"vоh  5~h 5`' xX6obС P,dKdɎx5jaq@˷3VqP;KFV1p0@֝珕Q:QHE}DF\φݻ->ǵbБ~4GodۅNK`yz][ޤl\.X~L/`V(0xj BC$kO'3|Z*[+PV7Vϼ@zlw^_P q:Ni咥Wh2y{α$-f= :ЫO;84%Nu|9l4gc߈K5NOлg^nʎn+@ Y)n\.z1bv3Ceۍ'ߚߒ̊!=ԝZer@†o8߈_W#X9׺ښW>m}/ږESMq2$y,]1ܐ,WصriA`D =}QZɏ_n#7~8\,OV :{NOyM\I> B%!|Ɏ[+~V>6gRyeJS/rr2́su '&NJ1QF_l53'u[ñ,\zD& qi:drpB ևTYuȚؚ,ݓw]ok+"w%gf[PDhk3H|>L3®yUNCSn}q+[/d`{9ؿԟJc%]%vt-M5}]Xw) #!k-~_7d2aæs>ռp,(_&"cII$Ag[_ĨDnĘ.-Tٍn4X$qLB܊Sl䃝3Vk0rTÇ]aݮ`v)AgsaLi%fM7svkʻ}PY8c04 IrȷQ,ALی):XNgOd$ke8\md|86Ѻhb/tI?COK^XA*995QtA6m"PJ6> & 9gWg+و6)?z/sicnM~](K )Y?pџ -Q!F߮U*WCof>ceT`kznz Q~RsO>/Fl=F5*9M?_fړjTk bWDlKDUP'u4_56\BI֩mUd9đjzb(a^9.V'6n~ ucHhSX@wTbcS h׼hAF&h4ەHt.S> hC-xb-i;f2{)Gk-"AJ@9qO~)C۔C2ɗ1z\8ǒ_=yo`S#$;uAckn7wPc*Wv!+gDz``tp(:UuN^^#< ;Zr6!+7[.`նM%ony '%sI;̏3|DG|*Q|QbgybTR5_*Ѩ ßӑ#9⨹J#:rPuD, = ҈ ˚*:hF*S|w*1029mzHᯭJ#j+sZzI6ʈ!]`H歐/R‰F[P]-4ogH4%Z]tM V vGeXܑ6LJR>?sʮRt:ӷ?Nfݲ7xKUrv6KN^e/mxK]8]NV,\;U \s޶扻Brڍ"Z&kQ!r|=9vg'o= 3-jwtw1aŒ'0 q-ٺ[ji;8< +C zsy\ؼĸA*9S$g'8q"~-; ʼB)bKժz$lJEm:4B>OPVMV{1вł)kg9IlB@/sgHSNU*@S 9 'D};cS*BmбcuNnt_&k$Wwl]-@SLGp#-Ɛn1gfK4Z*k9U{0oj-yg%ΞY~L ֠N Gm-٠ٔ./ԧI4u\0pp5ѫp#$ԃs{BMHhARR5Ϥә^0MwM NM;7Q(%Nq4vV"zӡk Lq1$K^DLIT2tw/+'̓{fNg Wٿ86~%M⽟G^԰D4gcQ Po'~h_/Oۀ7@Fw9,xyAFvɮ?dG~iFxpg),OE!3ĞCH]yWqƯ?4Hų7ZjfO\}3֖Qw1ųl2M@~RADZ#@!ۯl!e&Ͼ5,|= fL0k&$7_I;j?ʹ{sЀ[}*v4h׎}˾c>j{gzoH+ sJ4! ?ːun;x%6} kq}*B %`M)'^N̨/Fh%&%uӧi$C?]Grl4sœWk،WX+$B~ZF~Hl{N y6~ ǐNv!mQ cWY_i+~JȤ7zm.l W|n뮅E>}Ķ<*=l" TVh4hPDGG?ɒ%qm*q)s5}AtfV{sϙ5cP0 7FT0\dIt'   h   h   h   h   J ܕ%͟JԴ|r/;J>C@>zy˵AAAx(*ACVF{l1T6.2Of$ER62Xwրv2k@ij\<'{_"KvīQr^3,#+8}v (vĨtVHwvo"^}>Wo#.IYgbБ~4GodۅNK`yzq][ޤly* 'y?kJzxC'U3C-w;3'6uʀ} |YBk;4kI6sVg%%.r?iiXe-KbVѠC۹HՏGAoȚOp$t`u1ЋF*~3]mKS4|73/dϔ2f a7Do/H,k]}PUm+5%}?|v׶4dV/b7Om! `id®H c}p'oX{-J~tGrռsw}f%@SA5 Oy|?}M& ](% _4NMΕc@LYQ=9q=ߚϧ1?/32qkzECb;kw`Nd-dc'Y&<]?kBT>em9qTSztdt n mmڄysy`xvͥIsVOmpp:s2{=%@#{1.6pC$ē.tzcc;QdMɾ^_3wy}ԋ<̽|, ,X'L4_J[<ѥoʖ98`8eS_9|p5_L> Bo`SV(=B]ZKJ'Ue®y}1jI$zhG% cq]%8nW3 w)h}Aq+ڴ i,~#7d2aæsl3j3O۲hdKޚYlII$A-[MDW'F~E N6 O*^O)ac,|9T<|Crd5rTa3q8T`ݮD+ t7 j}6Cut +)A|Sm,c-]w6> &̙ a;iTT/ Sȭ,ţMܚ(: {h/C94 _ңƯ׏+u6CXf V!Uh:4y{,PVsO>/ CۮmԨ$6z~ǤV20-Į`;3%yT*֎: .U#+#4duSgլF㌳:JSR x(Rmp70qV('#nmәoۗzcdphҝ'/*/>Ȫ1]0Qkjהu_}̥Z3Ƕz+]Kρ 8L\WE;>̾$SX:vƧi'ZO#VmBU>!? qtaڵLԊWuzG>M'.hX0,ZMjU1+_,Y-[\{!:a0?'pxNB!B B!B!lY!B!6%_I!B!u|||"XEZdB!B "caA,݅]wa5ƐAjib_q>jeNͬw@B!%kJعE #k{fTpP\o8ei]cknϱ}>LFը_7j$I.*|F'Pï5XҦ/F:9{+ օ>4o^p_ԞQ.#P䅶ӨdmЖh͹G3QC8z+a=##T\!H=5{Wfehq/RV)bqvd\xcKqi=B:"c 鸺jvʋqd4xVP9v!GoTc}\E^(X2w~\o{X#4FkazOtngCqkf|ӷSNc:]/B S+Ytʃ6FS ǗfǠKʳuוL6s`3'\UgžgIk^=MjE&Yn 32Yaj Q ŚkTR;0S-[])ڎk0\0%J5IAV[;/2 {iX) ;e@V :vM;ƪFp$;ץX{0uWƫ'o:_Ζi1 2.; 5{s`E8 <)Wzmaz tB__ϟlfWРps3^~)bNg,x'ƖY-[N1}:㩀E1(в䴷b6eUꠞϕ貖y>šUCŁѶ~q2B>Ӗ0^IDAT♵'w_,hA -}.4rYOdxT2!oc3-;OA#_ČL8 Ni],291Wز*+K8r}*{d!UnV\~qLA=z2 SGpH>>T/gM\ N^q{t/m}>gP~WXW}11l>?Ʀ7kO)Ya_2!9/r jG/GA])xKvzA3Νy2l8ds>-)։!#G0oM8=S!l6wq~G3rΕ0_}g7AS1&X|1|ϛɸ>S̰w*oH܆eX‚O|* @"2ڞ71}`zSF֩$S_.]Gi -R;QAsVξYeGӛI=UU"KNJX|]LoGGټB@.hbWom@^D11/1gVg3~dz[dUj(_ h=(\(+<JG;͇k8D_u/Mgb_ *&}g! ﯸu d;3 B&E}j0FK?X,*gK算 ...tʼozе)_~ꇫſ ֳTr]75 ~7ImQ"**Qho73Eb ʢ>ͳP_JDj+Q[4NQ Mx/ CZ@}vY:2= VKmQϘ/_8"R{bVϨr6wS胃#qOUP׈qtL2;5&g*]&CʦUV/Z^tQ4JT@Q4١(*0"o9db2yierX2OG5<@B+iӸSJy9('媔b+җH6쵧n*XًFXMwE};mQ.C!q*ѡA,'JiytGt ]O+U[&+Sv/@ޗb ,ӧqjog=r~ȑ(֨5r (nHJi_LnӁ5cC w,Қk4>HP59)xc\"~Ԉ:/|J񕬾^6_hdIvw)KD޻KX+uWz.6e2ba(pC/NVg+֟EQ72a:_; !D:FNhőTU"_&*ïgw|o/7:k8kQ믵fvK;ACʮŵL d"EV}yh?E=^ݝUۿ]n ˾;= {ϒ4ojЕ9qQ"^ yٗd:{vK4ăUi*P'gA !LI>ZN~ȧI~$ EA_A?=TA% v 0& 4Z2Dc}L1h4]&T<˚i8IjhV6b|\ԚK# !DF!GʪCy:D:5*1mώ|NeF'\;c[?x34msf0jeq~ RW_͚3*1 6kC_%L25kТE7Y҄5)_!DF%iKoX *Q{N}o/kZr[5Z bŅ7lWyzzWTB)Uƽ=?Dj{{Sw_ 7crN.?)?֚7+ߴN"(V:Oۦn (ذ;9 ߻&$-|^)[aU݊xzïD [R4}<-;bը Az綥;S:[!†ٽV}P(>@Lj:;b|iӿ nes[{c0LB?_šEpo;uTێi?_}`]/-z#o毙DPO~_ (?Om|?Dg{xmꬢچ{O>Ǻ Qh4Zr-(Z0Wj\6Ltm/opOuA6[uj8`/kKW}/Zt͗?JȪT!zc7s8|[G6?;36T6Ѻ6ާ'Cqy=)hک;9j1OdK:4I|Xϓ7aֿQ;ɖ?BE𺰀9q0GiY7sVya׶bO;Mff4Koj׏\߰c?>k87<_(swq&z9d܂sףFo trYAwo[{vDrSh|Vб|Ẏ Φ@q-L dJw*c4xаEG&o~-WnE]N{ r?G֜!'s9v;|@OƐJ.6N>$ !l&.]81S;jǦv$ۃDiɚk q&~l+ӶjY*5>ߡWrzi6 >{@pIln5i1|h5lAFрNE* Ѳ]n5kwTKr3Kdю>,d}9UC{`2 ASYp yoˋGd꒴1vG1ۺd-?ۦम<ֶ>[-n\?ꣽl>VVI9>gRu<4`q?ض4>U&0bJϺ;:"ڋ$SQ(*i>}צǜp"UGGNJ#N j\$VN+7+.DJX!xlk9N/?dw *XgƔh0R((>T(bv7polTk+eG|J)l5,n[?ǏW;29??0jPU<_J<Q()ddNsGoi)K,W\t_77\b\p 0aDMB! $Ks>Kx6SQ0'niܼG.]Ʌ{:j:fC%3ĝc⇭0<Χ%-rc0JTTuMYKdsB:`mMAf|v "聞̊5>1c㧷!پX?1 [ dD L a׷m\ u˴`aMd͊xH6xJןl5bɁm_8^JLcWFѣKLb*a±|1O[= ;s:OJxE_ =)lů]sWz"罬 |BwvU핌(aZoJ͖_f0c fhӇL@^,9X@eK\ZԈg\錢ser舎~-HE8ۯlB֥wUkVPnKPNN[rR-mԮ3a k{3|<5;ݬ6!|Ԯk'ٽ\<Dww7vC^M\0–-8r#U ڡmlٺG*J4E졟j,~4!.Tjۀ6U\ {P″ʽ 1e3Bdt)i5Ӫy߾ʍHUwƳ9qCmֻqer:u&Wz|3{0UAnNֿ1?+r#EO<!GV3 pGqgXU}'_ _-c3WL&'0'Q痩{PZ kZZ 1Qz O%])4I[wtΞVMK?X~S~4yd4 G*!<+èjKM}: l_cW0o>rlhF}zz G/>gӀϨœ|> ܨ .Yn̵jL= RخI[Ńzg18n8MsA}?kߺܴMUΎk!R!y%sL!6!:7kwvrIÆ:UhL @Lm4 .a"|Szjx7I|j7o%ɘ-)&Jm[Ru]2ϱ~YBR6s !$ .%i.X0! $zΝ?? @Tߒ%Δɵ($my5l5lx -o`f̌;+B!h4՗}^j&Đ|N&7*TM%e}€C+B!B[E2M|^4Ε)bkq_`G|2|ldEy$3B!BP_6lܽ܅x0jx_bOu#6|#a/obM<$ !B!3ΉAWpjU lb5$ !B!m3d `#_)Z"\5 q`$V,AV!B!ìtl`h_UT5Zɵb:Xà+B!¶%i.Ěk5 +FNB!B?eFVYs6ErMwLlp .xb B!B>$O@jO͵Zd)&v-6YLFZcB!"U8ľ !pCra5VB!B6iUU_9̦>a֐Bh+AV!B!lE]$0&w~UY>7zxJB!BŸ%v<ؓpsd 7ՎXiB!BTLecS݉S}4Z4C+B!B1j5Zl6Z -aTHB!B\5fM[Oo520\krW' +B!郩i*?6~x: q5nMV!B!DgĿ7ZR0n#V!B!2&sWNV݂'A3*V!B!jC,Z|s^% !B!D`)&wNUR0% !B!0UUDД*B!+V!B!B!B!B!B!B!B!҃ںfv'6IENDB`pspg-5.8.1/screenshots/pspg-5.4.0-custom-theme.png000066400000000000000000003334121452457446400216140ustar00rootroot00000000000000PNG  IHDR25 G!sBIT|dtEXtSoftwaregnome-screenshot>3iTXtCreation TimePá 8. října 2021, 08:33:21M IDATxwxSoF ̶({DQQP@D8p*RD @TQ[J-BiKb(Mx?ϓ'wsϽIΛs B!B!B!B!B!B!B!B!B!֨;P.B!DIwQZҚo!B!JR̔ƀ4Y!BT3%9((yB!vQ",| !Bq;*qLq E~qB!TG8JX!B!U-JSZ[B!](E:SW|K$B!JW ^4EQwEnC!Bq;s6pE0րƝnIG!BQ9<ػla4%z{uGB!pwس\a3;M[{B!{ֱ$\4_ y,#B!DIUؖgٛ+1$L bnza fB!DiT@-MsdM"lƞښ.B!+d-j/ȭZcmq)8\ڰ$B!h` \Yޞwsy4͑7;)LHHwk֦ !BjƑGW3. d.h{[gkZޅB!p+Zcl0*nBTܼ2|Gӳ#+*t6X ^,{_֖B!0Vw.K8pkS0=qs[e\ٵK#n b:Xbpppp{F !BQVKgϞvȱ`,ȸ9.X[V,W俢l򒗗WL  B!h4{f{V1nm = acnV^jWNk!AB!N2 \x\dôm~ϕp3Ww-f1YYYA.̳B!ukn;ҕ̥] 5٠斖EQHNN&--f:ln *#B!nOcscZ\@cn=^_wi=V SL GFB!BױV'ug.G5p6j1UXB! 6?FQFߟ͛5SNѮ];پ};իWwS J.x#]vژ|Ek}8"SN$&&:I!(^yrd6Ҟ˦י(\#~ ;'3Ǧ0Ѻhĕw:[+&Ù|ܦ\r jΜ9,_"""kSO#-L~w/R"Ν/e5)XOwC0M`_w{^1 T lRci7 /k7ӿGG tBZCꔃ5!ņ X|9QQQTPT&Mļy󈈈qnI^z?v dl݉V.Xym_@"8{ m]LiBVIGlLѣL]Ixp;w僱]J59gྊN|TW"|ry7n1UTa„ :?mLJJ M4qh6] ׷uԡe˖|gTXgy;v8uqs c:tb,-kY~7TiBkJnl5i3~_^l7B=@9~Iɀ 0d̳97Ob Fj,6=si̸/ѿdĞ:6zGh.CYXl6P{W ; xTZ7N#,iwgluC]gB6XHS O_s 0:<NwTpx<.39xWmLO3GmrvH,MI*L8{?Nl2qVȈ]ƜH:z BOk֤Jn:$vୟᎈȑ#4lؐ[U^Pܖ~ff&Wvh˻)7%[m.dcΝ 4oJsN_6>fUn fru1"c-2wJ(qΝ{gu^xr$p7CajV܅DbWہxmԺL9BV0jy$q8v #>t\o$FF6B3%]BF.肩S' UÇ D/YG H2Úc$zxv9큷 r@&Y+i>BҒ!<*R3 b}Dž<M!mͻK`R~y,絟1ӵev|«[rVESa*Y\8ɕ d3w8@}{E-7:,>g<ӀWOs|W< nUt6{04ծ]yyy+WmK2jn?-Z9t BROHH .tfun{G\as-+,o:n ۻȑ#,3Q( x76MgؔݸckS^ >+>?&^MU ;sF8]զ *xuu;gx?5>͑o:Hnχ:rԮlF]zv8 2ìS}_f9>]^\s˟3{E27)븨'Y2H3?gl[wԸ>5ϿŲ<5<=hLu ~ڵT?'x JJS^ˠd@q6?B.s<^sy pCRR-Oe#%%mۺ-+䉉MײTJ @jo qv `fZ:~ dlFVp`;s1nB}-3QFijҸ7¿I3jײL g U~OY)׾z zG:Cw;97m; 'q,ɀb8z$IUZ*i!cɆ~ 4hLhFf/C5HSөF֣UPєu0Ih4*|#QOHʽȠmDna1(\\VjuShSKWw}"MD_4~ }0 O}&c8лo[gm/O1Ҭ% Ν;y뭷xשW>}:гgOɚ5kZrnʍƸ':oCe溛d+hq8)Y>t#\N:.`0#AeC~T\1~5uk)ع! -dӎ.m_TP@UMP|mw˧sPS/KYHHHl.%dPQz>܈ibaXGKg1[eU9=vm0Aq KKrc{w;"7O' kYGfɩ0v&7DPkW(Ms1gFEpp0FsXfΝPJ_^=j֬:cײƠA8rȍVDq/^Lpp3u[&VpS(kdniRս,ȑ# FL}嘽у&,Ӭ?m@TqxJR" \i@bķ}Z_zӄQ;L7N6})W ~b?ʩ\94 `ϿI:/tԭϑ|>c7ԧ;JSwݕp\ޮd㘁k$0jР:x/ӳ?WbrX5 T1&jY1)GENL\ֱu̱x/r z.l8/-;?O3ne^/1ٱ9 //! $""5kN{Ջݻw3{l-ZԩSiѢKNIIZjsѵnݺV9reiFDjذa7ŋcȰaݤz:b*boOb+s 4u^x%B`Eֿ;*p.I;;QCC`5$˗fiF*ӈ]lz$#tM-jկ3?M]˺wO\:@O2T[/+},sGay}Di#aoP-‚4;rEO4>7kHZV's'Ju뚭{yy1o<0ao6QQQ.K733?ӡujժ w +nqqq4nܘ h}Yx1Æ suԿX f̥S鬂UݥL~ʮeBۈGS_FsASf䕾5PkCUMyjLX CpMk3rSe>PKױ')Zrw*h8s>T~{'[j}/N+SI=XZ`+M }W?`߇HIL3vgJ;=[d4ʇ} !g8Dub3.w}gG7Wrj0G ZR dƌ;,x 3kYQ4K[v1?δ3|/Qۊbitmd4w iڵL3O?ͅ nɬf=Ӄo+9{,֭+;!\gJnl=Moq*V˛s6[ח1NZiu92.;WfBl3oHQeTLL ƍ#''-[:udddkYtt4 رcE= (S;u6ĵhh2LS̼03ak?4K nD#(ܴ6 MiL5& :*JB!7n$!!lP^=:uD̰dX17^W 03akӊEV37Kw4CB!B`ӦMdff2h F#eF#iiiܹ͛7a쩻dJe2!B2VNfXWqEvP6xo4ŝۙ3mx#sΓZL%*HLL YYYfh4ԪU"ΝkU -5wLB$C"߿2񋤥و֋Sel?ѳ" |'nFEgoU1,M $o2Wٔ/'󜞶c?axˢg#?৽\T{yvx}z`C!s9YFT( /g߶ S{jx8#7V8+癉[ym,RQHy^撝3Z:%j09zߩѧdee( `0p˸^$-4"#xx2O?^іcfC|2bYb~m&(`K\nfO UwyVjBOeNחUװ`3XF`w2siqBqx4;#wCՠ 7\!3??n6*EOuEz,WydIWe*93 sS'ȇi]Mw^d46h]Tp~4QQJ5C՛=y!ѫv~aZ?(FΙ ٤'$; ρcTpEķ΃uU< IDAT7%qR݈Q\nawʶܣRsyym9">A Ob4ԍݗ:!(^ {o$ԕ1n; UiyUU="RK'f\?}O…-KЛ $ɢΧ>љwgNb  ‡{ʅt2QL~i)^6\H@I&+zw&Ԥrbe|7hq0}+Ym-z>*\iu*{~*_7GJ5Vv$"܏:b֪l?'9+篠;%hz+Կi=͝gVڞ9XT,샶!]ڮRGVCm|F~!(^WRvh_-/d /1ihD~ _Gxdg?䗐i<\_+UP~e>][ ,bg01ϼg#,%q?ީnR8hEq)a~&@s m|}_jMTә-!>*ݒ.iWm0&lR*2} Q'B3emym,"g2wl9VԥO-MjQ,.%!)e_AB!RU2PݦԚֵT&Jxaoe{Vs7\8i'AՀj^YU1>a,.QUQb KSتrOv·ø7I)᧵7!kk4׃ε~bK1*9H:ς7wpb:3Uy7G`ALh1xzyU}ŚGy̞g;l7?E/?оO뗶 ftĿ\,:+۟ LBKڞ!5KFPOymOP;{o_9N㷤ne[buk߉Ix.iLm;+|jCϾ)MHhύ^k9UpsZVt (d]˦H4ҁrCysA qtrNG?۬J6pnRcTXe*|ی`̙̜93NA| CcUtO2x^Uy9|Sm.qQwi=s3XTQ3O?MƔM5sT{dt’3ŷ]?^bUiph5ߊ&#WN5jیcu5ksz5Q z~1%Y9{+,gZot-[?KE~r]3T@Ck ÜBha[r[X|23\j3j3/wk8}ߘB!@OYR-##JkϑƤ%g3tPvmuٌ N8< lf Ø cf4iB!p&~mfNDQQH/|(YB!B~wB!(w!BQ*ai.}"o!B!<\Y)!BQS~;lHd؏؟W*z!B!n[92YI[T =ͤEF!BƫF s7Y!B!J2ѵL"P!BqRVe&D e`T2B.Y12Oŵ<&Z&B!(uLB!mK]qHB!ԑ@F!BQH #B!(u!B!JX]9)>"WPm_\%PN_4oBΗQTTXENqIH>+%cd<;17&:wsI\ =#oO=HywA@ !vwiv<K½8wB}<ҸY8Γ%|VJ>H_?1ۅ8wolvؿ|*-R]P4$)A~Q v11މDzPT<"Gc5c&OodٿI(#i&E,_^zq'7%(~q ՗abgZ+U/=%j׿4X>*O0+tS [r#\荇w0MUPro}=ux|WnU ^fC~eⳒEE~xz'|a4pT/;siNH@c%pm^n]3M'IܩCWPҾ&Z)7* \v_g/,׉ FpVgH[]#Q8QQ+`y^]?,7棤2j<-| dnt] Zp?_NL@%;gjHx]fv_%f{ qMv69_y|F~.:] i Ak'08 7Vs`O,y4? 9x8j4D߬%CbC.~9tvaHdwg,{=53ְm`||ij7X.Rs^(VK&9EEH6y{l֟\m2"RyrV'b rcM8$:)OGbn?~&MWXV㨅!M>c3>oY4Sy#@ժES'Fׯ2ODFt{#U5"# SEID%9)>xx/ mN {ѵ~Y/u}wrT,EwL$>޿5Q{A6OnJcxgpmh_#)hТc9jP8,Ňԧig<3r^'QJNb uPR9<<.\6^mEq;8n%[*G-~ dLIZC@\8, %(rwԀwhy#qrtO ):£mD pl**fLo/8 oJ,c8=P[GIkϫ ,y^\:n&Oא Qp)i޲&GbQ$-EQ?+juM2ңtNͮ C{AP1 ZʖzŃVwv S7答Ki9FƔbՄ7M@zӴe8D>̢Y˹zg[C݈x]_/i Tٱf4(w{]&J&"qZQUM?FϦcPdKdggx.ƍ, 'sAM}G4>KяƑ580~KDZ1hjEw)kA9HC"\T o.r^(e≚?bsRɻ`΀Zo^}\QAhPe{ѭɖp> W"ҵߴ;m0X-r >TEeR8rwɃQ+Vʳ%K}Q'9āD éysIy:TmQ8/[CaR=^H szu2go[W'JNsH%ϝɓMJ:RN| POf ;&aY}i%>yh7M⧤$Ǐ/cߙ́s~ ԨCӜѓG>t@x4Rؽm94 K=G]2+4l@FtШi5-EEV?Ma4X@oĒ?0~J g"Nm*Ϫvg IR.nܺ(dpIQsa$ı'!--i=ɲCx'@/ϪrV' '^Dwt<桏-_dT0*]Z}/@  T!@P @S9 h t)Jb P\";VY0RCѕ SZ[Ys2OQ1(N<$@ty}幖6r75rے1urF&%Destui]RV4|ulEQ ƃ)+*x*>U[)CU U*+gMSzUSF}YYLuŻgJ򱏔N56ZK(C, #)#;T*xjoeQ9;+FCIW_ykBWR`eLEQ,eK]Zt?DiwDr)5ʰfF(ݫ ۫L**kӬg)Ku.OS(Ⱦ%?R^98 W^bL(5FoPr3~(Jllŗ$*GVvڥ̟?>PF׵^{7^^7^z=z]}~u뱀$^C1,ky*31 z ͼ4fޭ:*JtIMRq- !uW`xh/7GP5tc?Kxn+&p__(,,)O;py9FIVY+B+3(ŝQTez]cdk^Kxt6]Y7|7|{<~ibpLt8mڝwrmvކtQ𽟯[x7ľ's_敃8B+@cb"荇w0MϢqe?<=Ij;=+<0^[W, w؞WNGf~,No-b)y~zM)̛=_ q@;8tӓY}Ƽۙ!Y&k:mG6z%i9ESX -?w a( D5G6pl"<Uu4jRS~Ġz]OJ_7dߐCWP'{Hu;O͖34:%E귢yykmZŊc$'޾t] Zp?_NL81ˀ_/Ƽy@6?_xqU ;?n~~ zkY=~]7?=R[w"5)gWy #U_C^)#ݿ|Za0h0z:ƒ&%d qR j;o߬7ۙ~O>m:A 6리Z$),@&FN4La/ xYǝ`x=܃pT7f38y\G6BHʔϘ Fϛh֣.''qCYry;S:֤FT^xyž=g%gmˋZI:*5@?I69G6{ ,Vcerg*tS`)WR0kIoJ>TBQhBiʭ1 z,SZw;3NL0^<5N:3W Iy K$A!c|&>/eL ۗQs"L3`EԵѤ?fKk|n>ӻUp5&C{AP1 Z }vICxTV|:Z›GicƔbՄ7#Ir]" 8>!%{iLp4<]C"k@]~>(]#S;DgZK>*;yyL?s^clqIf]b=ؗf]߾csnL|j,?1UiiЦcBҪ\oI쨦mܜ{NvcO<<֮Þc}N_ܣCQ2IS'L>%f3u'3TD͘n{&}B~7̫wȀwd3h\xo_Gx{|ѣNp)f/G +A sGp$i5UQy4mV扐w0xȹT26egwtoͩO1X>%ߌiES+p&؜F?3d_1,^cDy}231OEPa$i v`k-@u3d$G3yhF!(4Jhn6~ P1 A_`LI)Oa|*_~o۶ogl jkt6'#:m+ְ*sٷcG3|WA}e<<*=Ē?0~J U£\y|zbB<"in3̔.)j.>̑8$!^bI?R=v HOoCzԕ*в#ޙBؖ Vҳ@1 yrO1MaȫKؓ A:mxXBk?揑¹Pr}z[=cS{tnl_x% ti]@*GDzHy1u{]q IDAT/,K"˻͑<ɧV*Iy K$&mh۶-m۶%RwPە5=XFڵkGד0w_^9TYxf?*?0##Y(s˝~i^\sgԜAkZT\qkKhލ€c 92-~M&)M~4=ư8=zۼ22S=j7cTYI: U# ԘO {V/dP55ڨ|կ3bohxTT|`,]9Oir̼iB.4 yz6P[*M64xa[;jצ]Ň<(?NX;SVLff^3^%q:/#*յewbq9z]=YΒT;kt=;o !DR9FIVY,XfС޽v2228qx`3`2y/RL c2l:akӸ3)S :ZrçbJ.~a-oo|ڗ{?NkRDP3f| !B"!Li8rYMԳ?[Lqk\@]tS!B FF!BQHB!ɓ-["Ia? @6n\JsWPm_8K&Af:Oʇa[-͏z3eӬtΓ 5u.'~ͪS˛hg&pxTL_ں= ){0K3? oW {Bv%Kӈf^-gکEhX(50w3`@A xn0ͼP~}^XZ:Ҥ|` : |/40o4M9jF*IdLr9 'ߑn5u>E#Qe "}CqSH1gHԺrm>ǞI8G@ {f&mK"'<<æt3Ic>[vbat FƭSgUWY73Βo9d4=Uhfsݠ^s $x&;]tښg͗ hG|DA xR5 '\_JeGؖkë<߮M>/G#.{o!`9P7ib^XEI?E34ҋ Ż`V)J_7g.I҃g%jGΨP~/8brub,ۯG0j"cy"W8c g+]JNAkL0~@i Tר])7 …+\%z&q:UYI,z-{v!DҕihʂQmy_( ÷;bZuYi %~Ɯ1{Anf7 VtXBxf󦁫=  0\%!!]q& sQՃyR(ji[:x'-㭝l9PSG7DPsޯ:.~9|RЯV2G b!?7=jGgpյrTA4?G)$]Сi:~Wu,ynԧB[p0uVޗ;p3#|p I'_$SX"_n`uDX$IRTM @I^]NNnɺ̐5/g/#]ENu1NSLd~%(88>&ۍD"11Up*^™(}B !súGq:}bc$| =$hܹ3 `ȿF]ݰJ;*;E4  $+ loo dM:ĭlrÓz46ѝ':%YA*PzͱL$1sT5}W/gF%ǖMfq| S$ ~r$ ﰭk6 SKA:1{3Шp;3_º z 5h^q|Qe@ƼWDJ]P+Щ V~uvs@{7aM(C@nX)(4wFս?dm5Bu.n3Y T;^|g6Qp˧aSs4Z_xEW{wT9'8w'rOQ(U :TN7 黆[O,;GbPk_|lo"gL"EKys >!wNsQɥ*#AgSZAvyz%NP"ȋY BݪEЦ$q^q?1pz>U n7'6<չٟ`'g [r]D5Q &V( qyde V!Qk?S ׫bJ2IM/D3g:(0N| Y}k0oZ[~;MC|ʑk%davMC|K)%*p?.I9E5M}Q%)gI74؛Y9J8ʆ4 |Jo&CIIɯ%wEw5ȏ3 txJ]$I;9]\L>/:WSM]hk_iJ\x=O*rSX}'>>PeF}M9vpHI}rbv0//C>Ƒp;f-zv$8pr DuL"!3;{:vlȁ&bM09^n/\HK&!- /?_, AY[( p$J׉Nաtv E,>u]qRplMLѓuCGF2rV-з6r۱:h_/) {gZ{o,KQn|gzL]Wi8^ij*&++KGN7ٌ9,ՑLʟ&fĂ:uPr8 '6, 7ݿ6"CH7z(UPK/FS]VERRI*SXС9wBPƅU~BԦj1wwzdwh=Ú yizh$OA(*) Ee,j@9`Xր `#?@K5*Do xpXlyA(@PZ_ӻ7Njaf*"^'n _KO)v4Jpk1DD.W_xD&,EȀا,,5B$,T*afS_"W75uJWmDoC3Wȏk\߿"D0a8y򤈉1Y,X &L Ƶvk;ܸ2kuøw1k}{Ƙ Xs ƘC'* U&+NQ?vR1se%EUɣNoQ(+2ʳ_FR(us<>: ~5<}K$?<UN8sUm!'.fذa:up,Y2 C%,wRM}}1t3lQ'l8>ƙx5Y5;AlNe%ƿL^ik_Og!v8Mc$I$Id"QLX*j- \uB>ԑ nq"I$ITKɋ%I$I$IzDF$I$IGLd3\a3DD>{ $I$I2*?nRMèh eܼxӺaivJkN=]zX[S?%b忞*b?+$i8aefo^:u,FFXSǻ #'Y;ga$I!w2y:>:+XGN㧻f$G=_$im;NbCLTI+ ClDX- TYǁ2e}BB\+v2m(/x#TRAؕ %M$dK=w."J88cV~Q,[¿%y 1C3.e罬Aqt"Wq61nv )fZWΠ3ɝ(aތmIggT&(q}e@ᅫJc>[vbat FƭSgզJDʏgWJAg:&IJ"YՎQĩ(^pŶ&j3X_`d?ԀuD6ǖI2RUd";r6B٥Dm^A3ik 91&@uDC1~ڱofM zԎ8>&q:UYI,z-{v!DҕihʂQmy_( ÷;bZuYi %~Ɯ1{Anf7 VtXBxf󦁫=  0\%!!]q& sQՃyR(j³Ǝw&ɗO3{4Tjpnږ2>p=qPOaƿC7x.p `OsӄI$< b롛t2u!'k.^^JG 'Fl=d7 jÃ1u W8+IqػT#OuF['ilx;!N8w'tJZUcicHc;Hj_֏X_[V*l˙aɱeY_b!súGq:}bc$| ɽ@$v`y7ΎmFtOæh4juڽ7.xEW{wwJ~@2Rd"scE=GT5$P9$n? z,CiI; )GPy7M ȃlwNsQɥ*#AgSZAvyz%NP"ȋY BݪEЦ$q^qqq=҉*@PZ܊OG0쓳-9Kn.Qhx<2OŲlq+ؐ5_uyyj؍C28 0{|_Fu(=fOc$5Qe;=gW~lo"gL"EKys >z I`TxϮL.&bz﫩Ry45 :7 y\x4p  )UE} kspph3=Oz:#G8N)o_Nѓ\,29kO+jp^< G+M4tK8K9Rvm":J^{=VJI;6s@ ?G& ^Pr7.%@/ IG֬-uH8|RTiwDP:_bѢȃ8Z)P8MDE$g@anp`Z~EzҾbHFN^ªFn;vcP:\ G'ug`4g$Irthĝqa|ZLݝ^;Y]ZwOưBgڪҟxJBQIQV(*cQX l;p'p</&@ ZT!EE|Oب}˅bKBE,f֚h'A1[#QLغ~+em,5>}XL(wgt6­}^}1t!cfD !bDPM}􇧅V!JΊC[7k0;BѤrm)--VEz 1xMQ~1cf.IŲ7EoP *> YE4X~0Tj޽pT 3W>qqJ0j޾>"W75uJWmDoC3WB5.J_e"]L0A@cF4gn+m?%1%$,Ψqj96^9GboSgA?Wr]?NI$I$B&2UTO֒q895]'/C@hS$I$IK$I$IȑGd$I$I$C#2R"s(GDXM/kncv av*"țpJ$I$'X(4:P͋X; f*oLsaz IDATmEn ]-(_c{ʹ cgaI~|r۴;6;O. IZ=.NXYہ׾pѮ#fn/D;];ɆXcVT8"=9]01-NXՄ@Z$s惧' Bz3woqڭ8 FǷ! 2m{6}\T32Red"Sqó2j sQS8"uaflRtd?ǵ ]k )G!b8wDVBSj=˪JͯmJr[M%z[*c%8/=&XMZeψךj'q9)=8995=k& oI\PN̆7kCSFlȺ;k Zw3ui楄K ґ&sCv_|I,yl1T7I$leu}tW8ؗOwI,1 {HKHvčĆ<=O 22GWL^و[h1ueC7[nݚ֭[* qu>|,Y&CF_j>"6A,]<=|g(~YGEl oU: ۛ:&d7 X~Iff*]\q>K!ƸY)^$j]96c$woZz3f%vUaSl :Sdġ3ӗgcDi*Slٽ%N Vj'+*?:n])EJܞLP5W^gǥT>i"FˤR(;¶ ^{^vn |9r τv{ O¢,8M(^4m(X?O0S?sI>+dU;vpFxqێc~=p=qPOaƿC7x.p `OsܫAsյrTA4?G)$]Сi:~Wu,ynԧB[p0uVޗ;p3#|p I'_$SX"_n`uDX$IRTM @I^]NNnɺ̐5/g/#]ENu1NSLd*(88>&ۍD"11Up*^™(}B c\j PF  +)K>ER'G0ۺfyC]iT4ܙJ0_#_֮nX%|nW{jgx6᷃72&SV69`I=mNN , (XX&w9Rh(xVWVկ gx{rfDXrldǗlg\ǰQ<ɟ+߾Â}5 TJE=A^]z)jvJC\$C/ȟ[qIѶcskf5 nZ+aPЄ=VVnmݻ(`^WgyPIznیFM:/MhԦj{}^[]U^S~@2Rd"Sƹ8{:EjHԡrIH5ܺf9SXX $H?W_+mP`ee aK' @p'4*\Bp>t<թdgWT %}5,ԭ_mJuj7cP:QY vsBkS[}r%gET5*`m>GX !?n&no?;O q?pSXroUHLyiu"l٘MIDh3OanA]̪lh zw%qeCpz>z7vߡג;nLǙRs%T$TxϮL.&bz﫩Ry45 /4q%KY.T9<;\=*3L%hpSEJۗx$o0:wF1[!#&soAOe!^1S>u㟼s g)@ʮM]Ǵ[)k;J#ifa(Xݞ3AիJ…dp?$Zޚ= ORt*NTJgK Z4yPG+ ִ P=(;`p lXovpHOQ KX|6Cmn ZKU!{H8DQ p0#HP|#,.9EOg3fpTGZR2*nLH u@iȎ4f` $wF؈\m#J"ArTAyj4/MyjvOX>->HIc$I!} :4g[ʸj>`@t]-N/.-'cXs3?mU}cOd<(+ `f,`X6`8@ h-@[`"@ 'lԾBb%AŢ3Ok!w-@8ZhESź{/*~Qxۚ KƢį¿6o>S,h&Ż3: w>mMXY:oOY MY"Q[$,T*afS_Qe6\-ƫ9=W9 bs*3y?=! 7E$I$cD0cS$l:NsM PG7P{o$I$IR-%/$I$I$#I$I$I92jpe8[{"FO22Y}j9a)aws:wtjÃ036):ZW~Gicf߯8ŬOG 6Xѽs|9 mm8cX?W7M861fXŲgP(0{k~Jo<`i@Y5ѣh҉A1+3lVBSj=˪J5̭Y\5kְf|^ *?}Cj%I%leu}tW8ؗOwI,1 {HKHvčĆ<=O 22GWL^و[h1ueC7[nݚ֭[* })Em" %Xx0{pQ:b0ߪt- 7uCMox*p)T>e "}CqSH1gHԺrm>ǞI8G@ {f&mK"'<<æt3X?*##|NW>4 G$1J"YՎQĩ(^pŶ&j3X_`d?ԀuD6ǖI2RUd";r6B٥Dm^A3ik 91&@W80DtO,h> = INaj^D˞]@i~>teg`T[A lC掘d]֡imxt1g5|aFDn#MPt7ijBa WIHAWI¡\T`lDt\r(_drIjG Cl=tPC[f63dpŋKhȟmtWq?=GTTPpp}^M Ebb&YT!$FJHQ m!uʨxq72seooV!Х&HEΝiC5`U~Qر=. 0AM`x0ռjgx6᷃72&SV69`I=mNN , (XX&w9RhSŃϭF1|Щ٥$I]/>XލcѨi8]Ӱ9t]v]B5y|]*' 6]ĉ|ԡ.JUCS~MB0Α28j\%}F2^lC]++aI:E 'z>-OujY8wB /ng .4 uAyƁvNwVݜTVd:a%lYrwD'@[ij'ey*e|ȏ[Dj菱y873oMku]qRplML+*V8z%.gQ]Hr$I>3q-e\X50 DmSzwNV|ݓ1Й矶HPTƢ4` v=8N x^ M ZmBw+Q7 !Ŗ:X<bFhuO mWS5>}XL(wgt6­}^}1t!cfDb $,T*afS_]%}}DӯoRKkPW3$>'xwgk\矝={"D0a8y򤈉1Y,X &L Ƶvk;ܸ2kuøw1k}{Ƙ Xs ƘC'* U&+NQ?vR1se%EUɣNoQ(+2ʳ_FR(us<>: ~-IG8sT9sUYhĉ6lN2:\r%KL}5PTxsSߣv}/m%-[$e6\-ƫ9=W9 bs*3y?=! $I$I'd"QLX*j- \uB>ԑ n8%I$I y$I$I$IH$I$IȑTs+,{Ɓj? !7VZۘ<Ƚnʁ-$I$IU2*?nRMèh eܼxӺaivJ?.rcjDPZTSPH t pݥl*b?31G_[A睱0 okk4$P~,ғnǯ;qbUB-rkI;vϡo^4ܽyLj/߆4 ʴTq5RxJLe˨M7P+  DM [G8c׹SIё׺287^N3AW6r%-Zűl4R~ʺ>6xvcE'pţLCc_4ؔX6EbY˞1CàY) 󬃥 ۏg}SDn%K'Bpa3߅.6z$ϗU_Lϑq@ynZMd5Y5b%VAbպ3 M03ߒ١? o+ؐu3 sw0?4g K he#Mzm #P9JXFٔc&n$I&!p(3pb/9VSWX4b~; y2{ 2Rd"'eL<2& a!(Pb>._OgMʔ q5P(0oNmiݺ5[U+(q}e@p %M$dK=w."J88cV~Q,[¿%y 1C3.e罬Aqt"Wq61nv )fZWΠ3ɝ(aތmIggT&#xUP/9GFb<㝮|im:uv\J峞(,ld@eR~)Ea[B|f7L9gwX콅hB T䧉]xaQ]V&@v`dJ/^6m,[u dzR)}䟹$IND};8BSQซmMfl~f#l-)BS\M{v)QWv;m0a~jAxHNLF ",4qKDwҎ1l?c{❽7Fe^ل$N0k5Ewe.h4?X2 3SY0-O !aVsGL .4}6 fz0B#"R(v4pG\$$+$q.zq6O Em?LG\_ IDATt\r(_dO >WrQtAH>;u_ _t {w5Sv %nM[{_^Y̌-'| ?L9`>jgGakbij$IRy;C71%i{9t:9e&j3CN\NOw9ב:O*2 Do7rB% q3`7'NWN׫pr }{8- #\'W'r`pIS*I֩i;o \àtYwrLkӝZ "$0mFJP/~E/g}D{tgD}fiÌINqXE nLI7X8P@ơ>gbPEsx+hbÕajuҧ;==Kh% ݅4*X5bPS'aR 3W'B+ bfZ#E3ĶtB/.~7@4c.ܚȥ;Ŋ^E(;G1W 3kѨbPU{2%BhE`V7WcB/wTCbu/+t( !ĵ[ϝ_JЧ( s6Ew>#i:t !R;3an!xW!y`KatqPa_Jbyz}a|>>#%[g'TzjjOC[>7h{w:.K*-BQFǏe˖,sFD\qaƹqi˻ƹqocy|Ac!nsrJ{ST|g#哞;UJ!RfQ(n+YCU{JՃ"Cq0:吲}F~ӧ>*ߒ$Iz χ@ƨbr\8[2z|"##1|RSSYp$ WQ 2Ż/rf̋I7Fӣn,gX1un@G0c#e);/:J#~&HJ]IP fΝ=ʼnyTxca-?n$t$É)Q:POu'˒dJgqfY?5cP G+ ǖ Rhϴ´Jbou5PVZ>#%[g'TzjjOC[>7h{k/9wKHH"F%?.-[f̙3G5Jsƹwq.bƹq.b;ƹ121O1*A*MVNQ򝍔Oz\VVPT<*mH~tDud U+bWť(Ci=Nc{?|K$1P?jqyjx&&V~O`KFOdd$111&דOjj* .D*;(x2 d=޹lg}5B,'+o ǻbN,~!r2 'xneYm2Z23$I$IL ȑZ>b-G]u\>Ԟ=Jǣ$I$I_B/I$I$IcG&2$I$I$=vd"#U!$K!?=$JzZp}S9 $I$Im2!6Bo>RI4S/ܺ- NX((uVǍ.aT_Us/tlޏ23I"'ܽJ(POΘWw;KKXThlqϯ$Is}~X/5~dv+/+~ɠH#SLd*"np`jolZaNhx0jyNXv$:5!_bb4_ZŪUXr6Yb 4({2!9Rx(o<-0wxG&4IJTJY c\ga&"ܫɺqcX2-h,뷌ۻ% Nbdg`nnw<]Zu{2#c1zԽ8XǾqVO[amcb1&P}K",[?X94f[,Ɣn8X;Ш\~8z Q7&J(^=45.*ǗY'$0o3 U$I 7~fzR96ߟOכUfx AѨ]M9O6D\9R%d"sRN/yWd°p٢@E{ª(Uf@"ZNeˍ|q+_CDRr!Blj~,*ٻdoR̾)/1le.mE"E`s"MP6{ p~FZZ2_͆`s FL;5Ʈ-ߦDv,==6;0fk ߠ~L :7=4go.PTt=9:8}eU۱m]xekfi$IURybf2KMfK\v5c- ^*2/ ;9Red"SNyxzذkjAHSҷ)au<՞^Ƞw8r:A: ]r,*vD}%.k7wrmqQjW j#B2n8,X?hO*0^5jơ},3:zMcI]O@%ɜ:2(cnK'HM]S.dFWgyPIwv= ÛРq]gFmV\jvM>*&r6LDZc|ڮ.JcQv`aWqa% mJӆtV?}}15":Nkj3FUġI6d1ti֜O`nBFVINf_8b B3'%r`MPT@qR)AYW PmI Wr+}-˻cʎ,`7T=$I f#9bUG4^kTqN%\R>*#_γpA<Ⱦo2(B~Çqm*q/#q_5-e^M1u_(Mӑx"2 $k4g }΋hR߶C/cg{(҄q!rwdeqC(ysgOqlX.w>) }pqJS$YGtY֏fM0X.uJ±%&30[gl !ќ8SJa` Aѕ ӹp(9^fdedrDS md~ސFԩҐɡm8q*2x6FdhRRX^ڼ SŔ>鱝?\Be:׉X)EEYE h3c1,+{p _!@ h(z IDATZHA_Q !:TL !"frP \gU{ibQ{3t+>% ݅4**F j$,T*af*$Vh8A,L[khwؖBFu̅[stXKXXW]eZ:jaf"u|S,>|UjRU[}VܽpT 37mصBx1-\@ ?+VJǁbKB\iD}0aaS_{31FCX,E3IwʸBMvOM Lu;.$`1].AW=>uSScT|j*@!=G۳Ž#q_r<Pi"E5J?~\,[d3g5j&-s\<874}swO\8w4sc.`e cq;(cTTK;)ܹ*x4U2 BqXW|%KQt-x5{>=Q~$Ic>2F`LLL.8ؒѣILL瓚… 'рb"=޹ rw.{o J7ZŜXCfmdV6Oܴ-}˚#*J |e oϧ3d5gG/$I$ILdjUDM֒k9>P?:|"I$ITKɓ%I$I$IzDF$I$IǎLd3]dW*]{$I$IcC&21dІX(݇PY=3f*㯋etTP([T#Ur}^$m8bifNV +MwG\,NDWƉG9G4)jVXSbFAXa7`R>bɑl.9B ;u yӃ;Vq{9pCEp(p55W^CV< yJv$BZE`E=Yֿם0O'\=h:!Y!*Pʸᴲcɻ}>grT{cr+:CZ"%6b&QGiL kɜ=[ Ij ZڍMh83klF6]W QzdwI._u5uWyy$SLd0}Dzi(U~_Fفq^ŵۇa&2) J_ęx+*XYsF[$; o>.䔂׫pr }{8- #\'W'r`pIS*I֩i;o \àtYwrLkӝZ "$0mFJP/~E/g}D{61=sW?aC?CfT+dd IT;|n6;8*_uDEKYT2trIMxw SLmOSoMyg2`wN-ѤpFۈ)Tj_F5 WtAѳ ?^e^M. \x>fX5un@G0c##r J#~&=i\՟ +B3;kK4 p; ݲ4=u3%cON #:,{Wl6h@ؒVAj3勞ߍtNPa"p_I]ee`#vw4' WX=W uo9IG>9s;Xي[Ԧj1Owzz,fh%Ǘ\'=cww$S \QfbXV5`8. x?4B&@h & "ă%a(Bͯ;umnAB#,_(֞*BOYL|6HԳT hm5aT{ibQ{3t+>%" ݅4*X5bPS'aR 3W'B+ bfZ#E3ĶtB/.~7@4c.ܚȥ;Ŋ^E(;G1W 3kѨbJ3JTn>+JLX8YXr$0>j-|}E3oKQW=55FŧVD}_C|=[5u\ϻ%$$TZHFǏ˖-3Y̙#F%ƹvK;81su_8w1s}{Ƙ XsrƘC' &+R`F'=w.++( M6B?:P:VF1īE|_Ratu]!e4^O}T@5ߒ$Izχ@ƨbr\8ߓ08ؒѣILL瓚… 'рb"=޹ rw.<&_u%͛xWS̉o0dVNfaMܷ>=2+WVk|:C&Qs>$I$I2ATA9R6ZKGkKׇڳ@xS$I$IKȋ=H$I$Iyl(c=[󚦦o$I"?}2F`ռLHwwo'Hէt`ĮlfלW(p.KhEl ~{=I$I$=d"S/DaPKYI/K70µ%Qsb>%:UǍ:C[rLQŗxS~DNqg\8p'3YCɯst>#V q QzZ3V{oS+ebjIBeG_%4J?!;5TٍMSQ2Hiv?_gI&(,h5 B'tğF;Ęlʌ/nOsM_SO-Un@Y|8< C?8 io11rcȸ9]yf@]Sun]ܵ!:k3HZӎ;E%fuH]Iqt6wU(m+ 73s8ϒ$"l~Ko9NVP}Buun- {y}$y2_MqoETEMаlϧK2P8qc| ^T'Om}/M 9t(CR9p|(T4jhBNe #ĐڀcFGd {.ZgFG:"ΤojW= xcf1|K(lyepV1yc<՚Samg^_5k^ z3o>45%c66]]Pj$[ЫG{̝gי:Xsٳgohd:Ctotwo\(!QקGx f䒍3^^U7-o/s1aO&dۿ⇱l2gױ G2\cլ\öHotC3ؘY/I_Lox97g#lKXy:da6ߠLaG&(o=ruxJ_f ^Xlj:.hnfqd"M\Pk9x{bZgأ(˰SQ<Խ顨bM*);w?'sR Әɸ8c2͓Tt{rJnZD{*IϸIMZ+][3ݖLLz9PWYƞ`m)WI*F%vۣCxkoIl0?Lӓs{҂R9yy3R_wƵN4SR|: :y=;6p6!64Vw:G9طi@!oR$!(LAi# G硷5GF%2ITÕhZd;WA|6>_u/V_䪀bs^6O]~* У Wo%I%.6(o{0i6;o8:[4cط };Rx/+qĨٸz|$ Y$ mFxWRFJ6-De=<"Ө0khoU_9w) ԑWĘ\}2iiS8,[9/DZ&6QIL5淞_&ᒞk"^Om!_l oʰS;tǏFnL~!@>SSd:r$I ͻ[G̢$.0Uw;{sϣփeѯ]dzCcɪ})U,:Eˊrse GS)Epʍ}|Us̃X6b6+ Qb`.|" G煹IjPUL˃U3!apu=HbbbL'??T.\8 UCwQe-N˦~&-ITMZGcF)~{_y|/Vxg6l%IJ;khQ$I$IR-%Dz'-vVRoyb5Q7P{n<:|"I$ITKsd$I$I$Iz<{deB5@}$I||UL˃U311NϐtYלW'I$I$=6d"SC? mR}h \=Փ:i_"ʂ1M̱lMd~ Enڿm.aXA-r}^$m8bifNV &WsVf8.?{we?p3+;H* "[s]25ӫfj.iKYj/-LruW7D$ōE\@vfpY@ޔ~kF>990sϊQtPfTW $IR`Y Ӄ!ݙ?۸Tf+-'~Jw)G&2yٓa[oV"v q1Q'ө Bk\DޝdzSۓ+F$jz.At,oo ,z3D_QYuca4sڣ,x.WÚfc{,%ckG)h44ӢP֢u$qJwK*D;/,Iɻ0e.WNI X2AζYW?2 ~LY(\mq,ߞ&/v$D99՗дa-yW( Wez6]ӡi،uqwsN| ~0B#"O%m&Qp򢮋 9f 0$66]a*GNqEՕGOm\(jaKxD fw#1+{P[£@F|L4_Eo#.q(&avȎZR~L7Tql%I^*@tGq~\"#d&3d'uҗܑMEƍ,ǟ'SLdC{x:=ފLK\\6?9w(!]>K\@e,L..a]8bnZ]9 TЁJ0"GV.XhqVNw jÃ1d$( lo ؿdϷ Fd.ibBqFʴ@EI#iaG6 s<$<{!3OigP|pң wYrd=7~N\ -gtuF®1Cޙa>̙֒qF%ş^smT>@Ά74J8Ds3B]+E(KNM@~=xcvV#uT 7f/ˬyCSҗa–$ Ԩ QJ'3s b iV?;(/;9`RGmѱjXٯ Mp 8瀧/C0ũ|>s;xO-bXGm%GD&P6sDFzDͣw,("@m&v-G1".;nCgu/{}!?66t8c1&6?[-獖V$F'1n-IY3-v}6^]涌U[nUDLzݴ'O:#Ee,j@h 0,+{p_hp h L"E< WL}XV+N} 7kx?Sc+I~y "g""Sxz%W!V5O%[^;`w~.ٟPa"E3F9sFDEE,cƌT\qnƹqn;ƹqom,#ƘC<'1A*LVLLQWhrWS)s׆/?/\Pa,0Ђc1x`Ξ=kr=\~%KLb}%Px;yMLZ4_={J|4IL^gܝY糼8Giy(Rj{͖ D_o$I$I_!*`*'KV lΌctz- (]vJ$I$If$I$I$=qd"#I$I$IG&2R=_qkfun`g¿m$I$IO*Tp\ga %ܹru:UOgKڪfظ`t 4vs>XjͰlU ,d%!5U!C ӪZ3jy`W}O1t pRkor 2dDPGLm(cȎ^(sh$I3pk,zyAݐޟmd*Vxԉi?Sj)G&2yٓa[oV"v q1Q'ө Bk\DޝdzSۓ+F$jz.$/Kϙq1Zɉb~hʪ35dp 7`H?4V/S_;:NNEĕ7 SQ s{|ZfcJ+95~h, Ņ%ϳftG:[cffg󡬽XRy}&yaAONޅ+sYrMNv rE硫l:ȕд ep T }رcJКJZsncb fFG}?[u^'j$aiߐ!ܳ0s3:coeO~ r`y**?~ =pAy'p[T>G@q< cVufT5$I*G&܀'v:~%L!s(K)W_׊ؔ-Sj)U@&2Pڝ)#+bZV DYcsl_ xc{lx#WIKJʏ6[g[Lnvz )QGlQ?.[>>Yo (^XMl IA߄p;S<ԄL[hQy䇫&E7+lޑx<c+5')W~.o7f2Ӻ3b=vsb<$t3Iuat uZƵ};ҍlȀ-4WqEUƹG5{ν[Ҽys7oN M֨Ƴj2+^Ba@`=믑K18;cx^x_d7{էо||cav" %P}v䕅it\uCw:c&WzڴAxdٚ{J_ޏUKT}xU J[=R&Vsz40x&Xj$IRT莰 @ѥEFfXMfȸ-gO/#CmYU>-YO"2Ax+73!.qq٨ 뜏;Z2 z{ZL\Q[ﮢK.81ѧNm?׿g/.*w@]%rn+W,r4OE`8+p';5^aOBz{I68|`4NF!X{P&v!:nNL@ ^4qD'mj1MW5 vv%#,8l2#Eq?ۇn ej6a긏O]b2cu"%&ƶJ$^c1եēTaN@w 7tjsD-->PuBK`XrcWf sUg, P><ҕ꡺E$*Im7LFkN9944CQh>}_͗*/?IT><$<{!3OigP|pң wYrd=7~N\ -gtuF®Vt/LGD&{3mo?!y縢W\{M!=l:(d LPJʒ⹨SS?П_AH' ȍ2kДC8% daB5*`mMh&'fLgS[vNBw8Sx;]*)qcsG?Ae* 1O?WX^Pᢤ \1X0P@^de`P֦(ĮC*}hdJ/ͣ?%sU3Bl.SIWP<$r%,l&_M%K^?4Ґ4{]'9ٟRE?pxᵯhbwGvǏs]-PRǮgrO -ٰi o-.0#e%`bOla)݅aG b iV;(/;R#~6bg(Xٞ3A͛ %3~Db/ P狹meJf['Dm:V)m7ܠ 3Q|s/`nITr25b` v=8΀ xހ/4F@8h "Z^Z+&-B -`1\P|U:Y8V|/B3ZߥpP xKD+ -U>}XV+N} 7kx<-"UXZ8>[M" ^ u*Z/|rN !DQX5phwؕV&Ћk j K&bʽban,o#J/'FBk,C,;q?Ra}ژCLGm+gѰ[b Ek؁Pa%wa^hT!g&ƶBx1+[ cB}o!b!io s뺢۟э5B7[.B2ꮶBiEJW>{5A@Dx /_o[*Īi5bx ?QKxuiG !RĘ1cę3gDTT2|1fL5εƹxqno{ƹqn`\Ҙ=/h9|d}%&=,y5UZ 2|~mB\ɧT$a]6 <rGWG,RvϢp4U-I'4cT>/?/\Pa,0Ђc1x`Ξ=kr=\~%KLb}%Px;{yM})z6i\ъ]:R=Y?M+vϛHtFyEQ{o_Og zG;Nm$I$Id"QLd QtNeߧH$I$PbI$I$I82$I$I$# YΞ A}$I$IC&211Wp2C waݴkU8.]Z3<1xUƒ 5Dr!{9`i{ nK!KtzaknA^,>o\1I[{g3Otgl&S0KNL)n#UO<2)̞ zŒ@c:ENM`xZ$/Kϙq1Zɉ2S=0U7f.F37k=:ɂ |5n66~h^;vtRF3+IcY;- e-}o\gAt'̣Ɣ2cW%rxk,X8/ %g4tCY{L4y);g'sWL8IԼ\Cg!Ƴ|(o6%$Iv0y\?=9ȗ +dxC}\JBVČǦlUO2.FL^Yh<ײR=%:;POZUU~?br @rI8btQ2ɢS@gblZ/fS_|M &ۙ:&dw|B{$?\M%55/Yd XK_X[?O!gʄ v}ܸy6+OE֝3KyF'3UIy3|<.#$70gΒ0p8]UL'K_$IRMO'QՊmPı0^qS&c5J4?eE0;j?C=dJo&?*f¶UK&0?5N@6i |xj-FGgcL6p b_K8(L-s.Y8oO;dKhMe<+@؄[1mrICӰ-挝tq+~#>aFDn-z;K,L1>jE]; s`IllTb⊪+Kb۸P&3`?[vu-fk/l4Ln*ı+;yei (k;pz1I@H;]ϑYdddrNRښ;2xȸex|Rr5'D6g/ti>m JRzt!=0K."8j= ?as#q=燙67= /W*kBpbu6<߾)WX%$iZ/BYR<ujr0(1{9]f|'$=LhFLPc117I=Ͳ~ĬbS\*\ -gtuF®5N9NεP`Ǝ8cGPՌI$ *_ǞT$dz﫩$Vsytl :ɉW5*RwJa? -uȒѤDz!k8[])q'R?ҒR0pn ۬37ž$\8>b(@Ҟ wP5_vBsK]8cg(Դ%S7o'˗lljP?<|17/N)}j; J?j.?"2Y3%5/3 j`@Мj6EH}3[ڞs%FtwB}.|~ood#<{o7֠^L$F'1n-IY3-v}6^]涌U[nUDLzݴ'O:#Ee,j@h 0,+{p_hp h L"E< WLU,mJmpm؝)b_K%$$TXHcƌgΜQQQ&Ř1c08nn{Aƹqmƹqog[sKcn`H1Gsr ?S<*Ti%D\! Ńs%RU޾hyt/p]wH=Wӷ$I$O@QdpB@ Ǝ]9{ru,Y2 C9/߿߿73yjD)m?$1E.{aswrf)֞YM$:J=7[ﯧ3d=߿$I$ILd",ZAԂQ83ꏑN鱶/t}2)I$I$Wț=H$I$Iđ$I$I$IOHUgβvDDfՓ^c"n γoꃭʞ +ϒ$I$I5Ld*bcT30e\9ºiqתp|']f9,fy6cco\)cȎUyʸp%I ;axxzP7;gw0l_2?޾>ubOwjdJ呉LyDGgdۨfCp G,tjÃ'yq_z<㨍YNWΰnJN rE硫l:ȕд epq4ڣhfG>9Y \x53X0K|}׎Sch&q%i,kEE,Hby֣٘RfʳDo GBEqaݑ֘|(k/T^&/wd'z(82,RxEm&Dc&rn &SBgDmD{_;,2dSڃ{fbFgio[N@<L#O%^^4>na(gA{ C&ITLOOpuN/_CJb5>CP8fR1#DZ)[x"SLd;SFW#,*O=aO!!.ԓrbm϶%:6Pd߁ndsDh'.-$% -Eq'MEыki0M}5)(ngꘇa -*p5df";2`U/}cb}lfD>*6os٬=z_ kkԉ_twu{}V%pDzsߡu`ȹE\\;<m[ÝWzf< 9J<7%mn:`AKl؅wG:%2mA*Pz{HZX9 rë7U_%~,qyޞ|T0ǖ3&%XMsCYNe*z6ZIՋծJI" _cޫK'PMNQns7 :[Z}3,#@X*(4|x^?d+-[Cu>әI> T?n]ٙ0NsrihF6|*=G8/;i< qz,CГ6{1`8"7s~n~!qlN=~ r<$y縢W\{M!=l:(d LPJʒ⹨SS?П_AH' ȍ2kДC8% daB5*`mMh&'fLWr_hi=~>GЭC06 vwr-qr7v/=zf*_\,RQ/(pQh (JJ `M`/20(kSYqb!r>4 vVzcQTT fǹR tpj6\$I+pq{Sx_G避XͥrKu^izxUO"rRXy8zǎQii~41I;ω9.(cWJ܉3\g 9C-̜37–_C( mmZǺvq֫ADžJ1g+Nl`x 헝akE1j lJ.ȿy<~/\H*<|17\?wfn8x4E3+ĿOd3%alxK P4o tnYΆMKxovyݝPCom^}gzۍ53_IKKpr3=;:.'R'x403( u[g, 7Ϳ"#?Őr=.VPkFR:`-{6& OH$C62v]%\^3-v}6^]涛U[nP(܁_x\;2n?PS 53kp\w|4&@s%0U(@rj_1hPl^(@hQʄfxKChZk<}Wty5]®mSҶZt+>VYEbN[Wai$B+F>o!4f*z1$QTBk]G9Q&E bՠJ#i9bWZB/};P4e&,]+5<(K2S h a> WEX8c m?Oi+l̄C}~aڱŬ?;*?lP: ? !v"~*B/F0+ڼX#3Ĺ2!Di4ef6nQbm\c-s!!Cj+v]Ī4}+IOPDξDD/%K.Bj1*J\#uwPWLg>~.ٟPa"E3F9sFDEE,cƌT\qnƹqn;ƹqom,#ƘC<'1A*LVLLQWhrWS)s׆(Ε|JUyJѕoÿq.wtu"e,OO{_Oߒ$Iz<O9Fz… -;vٳ&דYd4 WR G^~G^Ϫt_={J|4IL^gܝY糼8Giy(Rj{͖ D_hߩ-$I$I5Ld",ZAԂQ83ꏑN鱶/tI$IJ^/I$I$IG&2$I$I$=qd"#U:Y魐$I$I'Ld*bcT30e\9ºiqתp|'\U=,fjЯ.qٿ9]Z_Z58`5γW%:c{6*%sb)C[ ݖx6L$bY Ӄ!ݙ?۸Tf+-'~J[HU#S*Ld#8:'öF0#8,5Ec`?NfSt\XГwa\VDce0U7f.F37k=:I8 /հfv FzqrJ},$$e(qIlҝ0ZXz4Sʌ]rs@cHH(.W5;33;<eŒ뫐}9 6r8f9]9úY+9Q&&T"WCӂM^‰2%/wd'1$IOLOOpuN/_CJb5>CP8fR1#DZ)[x"SLd;SFW#,*O=aO!!.t`E c=l3XԸ@gI8btQ2ɢS@gblZ/fS_|M &ۙ:&dw|B{$?\M%55/Yd XK_X[?O!gʄ v}ܸy6+OE֝3KyF'3U'-**?tom1J\u HmȾ/樉 OswO\Ty3|<.#Ȥp`$ILxU J[=+n;K^~6oG^Ζ8Yu&4($I/g0A|Pvv.\%'X]f7hĈPqyddJՑ Ϥd|aIJC('o '^Q6Oƚ̌),/{ [KK$DEΝQ! zrs2iTwl GbVz IW܈_/س4#m:lrJӋzgjwѨM.xIW'%#ٟRd"scӜ=CT|>_p0o")MEh8 5-9iGmZc(;]&ifHAQr"*\Bpc^t6+qruB /n/)׸#T&sFap ^1pj>*@Pcִܜa KSFjT~(%^?$.#,G~*6&U=)Ǧl_ϜDTf< Ⱦ\7۝6Cvܷ$X ۽VTM+ +CQ1$IzԨ|j;29>&׋@M K[%u%q{ S;V<`/㉏gjF,qBuÇq(QjWA/4\1e)W7qñ>oq*! BL=%Cxg4vX*u$oC?0僽jB ̙e9pi#P"O򡵼>{+y= St, i:.8㗘4mҟ%17-([*Hm>mU|đpx3HI '5g3(?o\u9Sj`Hؼ2/s{ѽH$=,8w\Gpsٮ?Ԧcuҷ;==vjsnsyݴO^((ʻXnZc1K l;p 'vn IDAT?!@ hZӄHwVU_aB;.P1+rB賾Ӟ ,Bc"w+V. ->}XQ+[3; ktN,/>$vt"bL i2[$U^B/~%; sJh]EEBUC w+zYBLX5V{ ss1hC8Nn+Bk"uzQ,?\~>Sm+fto,,Bk&BƊcׅAXR۱$.BRq29l!4N"DyJq\q|{ "["*[vcźZjQӫŨVWo?/JT[H&LǏ111&… ń 08ni{G!ƹyqg{.ƹqog[sKcn`vW1wsrj?STܝTi+D|kC۟|Dzn2ҫ_F~GR(~2h:?Ǝ $IQ?>< UM(S[0q Ɖ'LK.t@x}w=2wQ>b9yC8!)#a +~E/YcTX)5fRkۿ~:C )I$I$%d"QMHŴjD[qteh$I$I7K$I$IБ$I$I$IHg'} ;Y[%I$I$TpoG5\TnQpkwS(r=t)9hM`x}O9W}G,fy`ت8f]Ԛ߁7_1m-Ͱlo1ԲZP+ѓ?:HziI]'/o/|z1gOXV #Z_!]C6U}]T;?D*0r5 3B#QS=p H̑GqZrʪ'W5^yHp)><;bј4VOyÎ#Sbd6IXҞ_Yʆ܁dz!Ҹ'՞G 4N ԝK'Y= ]13û֜Us}ғއӸ [Aݕ3n#>%4WN8OYJХ-_WئfA!fWᯤ.q &Y w;\mQ@oCco̺ۙ-+ \Bi⭄ |ֳ4‘FpCQ|,YؒS۔K$O*)Ca.f\;b:?ެ!VY<|.vs6i"M0xUOMCqR~+)vO̦9<\ gz/Fou`Ҷd''T}7 Ы5(q3!jelb^epVx+xz*b9S?/šo F` Q i| SER)G:Ķ^~/g]3lre,J 4! qb]EUm,_}`Fr^Aw,I҃J洪-}:8BS<븓mG+L2X~ň&p/[?o)g7JM(j@kP^6N'F !"X]LdthOb+hT4POm,,'pdk7`؄E_Äܦ:4[O4Kw7]!`AxTւ,87; s`LBBL弪IMgߤS<XbZr ʖ3ͭUs*˪@B#;J9#`0ۑ@5hQe;67=NmqJCCy* ͬ(?#3'OSXj߉J֮grJ$< {8p*9L2CNW\q^FGs'FdȲ+ٟRud"?3=6>_mbruP5$8|_8a:#]Z"%*v W׃;I8X"c{\`(ȧ&82: IW܈_/س4#m:lrJӋzgjw"(c~KO&TM]ݥdr=nu8f@+\Z#QJaPЄI=fYn͛(dnWgPI,۞_ٍ1Mh8s Fm:VˬϞ<>骽Ty&;D,X1JU}&kw>yIiz,Bii:FPy 'zؿ m:5,J\P"ȋK&5ɜѩiȯo \A鄫 X5m:7'{p}Brw2_(6 @W#D,I&3EOʧ)ۗ3'մO+35/# v͐- V0(vrShiBgPl*k7R4gT4 N~Zz+RSH7X8ԗY9pue34 |J_&*%wUw\9dFOYI$ASver } MbuKd߹mҐǥ,xٟRuߡ{9O||<׼@}V3b>tnDW |:R@-^9S;qFckRGo8s S>K&Μ /_H( Ξ&l>.$Z볷R:7ۓp8JC#:~H&Yr,sR±%&3Ɗ[`'qO 73{Ꮤ΀([.|2^~Fa8Ƶ]3%+Xq)c_c *Ңyh*aDTeD$ЧLq-έ^fSaJT"y0an#:T#ԡDb"]lNjh&H󷋉_sı!!G|V(UYPq|{ "["*[vcźZjQӫŨVWo/JT[H&LǏ111&… ń 08ni{G!ƹyqg{.ƹqog[sKcn`vW1wsrj?STܝTi+D|kC۟|Dzn2ҫ_F~GR(~2h:?Ǝ $IQ?>< UM(S[0q Ɖ'LK.t@x}w=D0w=GH DNP߬)HbHX#o wcKVX*9U=0EM`Y￟ΐCE];$I$I?E&2U4TL&jAĸH)@[v(vI$I$I_$I$ILd$I$I$IzDF=%?@Ttn _'I$I$=4d"SesS `EO ~En ]-(8vW=Lt)9hM`_r=gϋѶ#Z3}[1STL mzXY<1)[o I]'/o/|z1gOXV #Z_!]C6U}}T;?D*0r5 3B#QS=p H̑G5.RrhG+q`Πt+!z2{HZxXcՙⳑ-, @c4:82!Mft+OhQ(q%lڋ/{,~<+]yQ p@cDN2$w5ffvx3jD;O-C)1v>|feY3#+M*H4=;\23xܸ* I:{ YqcKxX]OfN$mKܘIl̓)=)UC&2p3у'SGGW6 "*Nū|ہ[JW܌XI=N~iٲ%-[y&c>ԴDe eYdyoOPY}&c8:E`3"L]P6eoҢ÷2LV r4 W{47)e瘼ߜb$lÕ@{bV&mKyRy-LgɆJ{΄MQ,'rXNҬ P>!IT賒9jKΨP~$:d L>F1'jp7֟K=dJՑo)g7JM(j@kP^6N'F !"0@t/l-li? cBy2i:'N4{ a(ϧ6}zX85E0 l"ቘ6d]ԡi܂V>xz`]G ?`F£̠`Iũ܌睶١PcnerЕfp(U=Xv(L Gm>487nMXzZm@SQBqs`|~NG}B$ѧ &Hw`2 9\q5{͝5^*r24ٟRud"s3=6>_mbruP5$K'KL/0{Ub[ e<7ioj2f}z]Z"%*v W׃;I8X"c{\`(ȧ&82kLJFz@ƞ]i! gS ^ԫѨM.xIW˧(#ٟRd"sMss,wx >TPq5|;üu4=4Try3^܊ ,-͹Ym 9WRM搝E^Jyq{I1$ܽ253:5 ⍁kW1(puV¸]MdΰSXBnN&7R %F(!qyde@?V1D}=/Wo#*F1v2IK/rb{Qyw _z|mb$ITx>i?}}tBEXݥ-: y\x8ˉ=)U2' %ӿc鈖hNr8(QjWA5 '/Ѯx3/Rlb$I,47waKW/`]M0owzz,g :OLJ]>Q ǡ|W'' fݎԱDJU6KK$]DOX/3`2J?aD@S?+ȦjGTTEqpvFnZaFhD0j~N9r"EJh>#>>vA+-Җѯ+laG3 rʪ'W5^yHp)><;bј4VOyÎ#Sbd6IXҞ_Yʆ܁dz!ؕ'՞G 4N ԝ'Y= ]13û֜Us}&yjQzLَtk4+;̚Y_i*VA¼9'T=aYooƝUWOКYj&Y wI\mQ@oCco̺ۙ-+J IDAT \Bi⭄ |ֳ4‘FpCQ|,Yؒc$I&}ϔ!q03.ql?1o,> 9~m3y2Ż'?jDnq&z>dD٠@Ei{x5/z;pKJX+IwB֯5-[e˖4qÜ"͝>3g^&ܠk RJI$ dْAx%?QBgeIIĦ3UI غk'K'*5:6G*ʅcxz`]G ?`F£̠`Iũ܌睶١PcnerЕfp(U=Xv(L Gm>487nMXzZm@SQBqs`|~NG}UU?Fw(s:4Ga<ݷ#jX[>v3lov{N&U0YQ~G/ҝmyE,*ImOFʘ&4hI׹olF6nUzgOyt~|dJU]6Y̱c1L>PA| )XP (U{dCxip+S(Bn -_Y^QBAQr"*\Bpc^t6+qruB /n/)׸#T&sFap ^1pj>*@Pcִܜa KSFjT~(%^?$.#,G~*6&UGmZc(;]&iE\6V@CЕ2 3NPWaSkOp3e*q')K=yCQe)iլ zh2oBe}Xsj>z/vQVV;f2 vtǧ$SIt?|j;29>&׋@M K[%iRYNO:r䂽4ި Wii5#{:C8vN(q qqatڍoİ~{ +ν?0 t$l^K=^` tJH;x=|O^~Jۿ1L`/P"k:s&(|"f/;{TxcnȾ|h-JyxoO+:gBt %f Mgɱa+vŪ,}̓+Iq|{ "["*[vcźZjQӫŨVWo//JT[H&LǏ111&… ń 08ni{G!ƹyqg{.ƹqog[sKcn`vW1wsrj?STܝTi+D|kC۟|Dzn2ҫ_F~GR(~2h:?Ǝ $IQ?>< UM(S[0q Ɖ'LK.t@x}w=d/w( !J5IL _`m\]hb-G̭3?~K[FnMۇͤ8B̂}$I&E3ez?ŌK[GLǛ52}2ϥtnΦ'ym[LbcLO2 Slݵ s%kN UWfӭ_kZlI˖-iyQ,'rXNҬ z/P CؖSXf *H(Ȳ%{K~25y_(igꚇ)xIff˦Q]?C!Xĸ?PL)f? 'ypfV3:0i[2g}ȓʓlMEg>m?7xE^&IϥJ洪-}:8BS<븓mG+L2X~ň&p/[.P)UG&2qk:x osuV,?e#. [ [|OlK#}fszԎ8*&ݜy-ੜ뾊O?M(O&1M$҉fOu!LƲOϢyb G_}FMX5<ܦ:4[O4Kw7]!`AxTւ,87; s`LBBL弪IMg=lޖֽ-}q%Lbs i$IT @=p[&cu!'+.޸f/#~CENUϓ)UG&2UP<kV23ʂ#˧$ *o1Cܤy߇q˘ivٛ?0ũ?GPӰdgX$F#ȥdsAHr;C`e> )0 Ŭ.';^1giGtE䔂*ϲy:A8*A@K"WM|;Pj~U  ^]ΊqƯ` Q$I+۞_ٍ1Mh8s Fm:V>p)dz)&—jNb;tߤ0WIpL7xL{Qyw 3~}S `,*EΡ(T[I$=tTx>i?}}tBEXݥ-: y\x8ˉ=)U2_Nf4;îm&n8vc`W{?zi>q¯킵\q\>/Ѯx3/5V~ $#p ^wD9<-q*! B|c=%xg4{TH 能j:\n (|"f/;kC1΄8g}L3{+塓y= CS ,i:-\pD/13h1 ꆣcKZMW?44ӑy1Kܞet/:r$IXTvLƛ;%ٮ?Ԧcuҷ;==jsx _k,=dJBQEQUTƢ4Xs[p'p<oF@-4!q?賾Ӟ ,Bc"w+V. BCv1[p4s{ibb!n V+l<"Eĥ[u^37Njv!QcEqUgeB<@5MŇ܎YCic!4MfZWbx0WU{/QT !DYX5ph>`؞U)Ћ_̈́[31l.z07w6s־L-V.Qj30~Bωpg pA]&Sk7$n3o o'ڍkGuNZ?_C#wqQW_N^-^5SMK15s香i?n ftSSwD@%Mf{S8χ9|>99*b]l?JNN0 &ʼn'Dll4sL-Ʊv3;82cu_8w1c}; Xc1xO<cT:CM9^=ONqƍpCSL4}+bՐW>̬w1}eX)5=&NstL͜ׯ$I$I_!*`՚=Jg$I$Iك$I$I$IH$I$ȊTu+ɁʿY/)7Jې<γ뉭ʁCT%I$IE2y!Т#Z3s}"6@dUP(T] 诳~]Ks+jIl񡗦!rQc4#jQGKsl<"1CpB=cg2RHU@?$I>[/^xta&Sy[Q7DEWZAL)nW#UlO<2)iv,^Β14.>²I /8VJ㈏}DY) J <9}q=>*{:J*L^0X{RvPSmlh3YC렱zL8:.IP(qgY; ah-j8k'Y4uhN%a,ޞ.֘,eU^z>] s`Rw,ˡm+Z¿1vy O"PK׸v-;[b]ϫ_!~}?2lOPľo0zM)7{;O%HP̞ ]Ɂ[8+<͆mgљ*Ϥ|N>kk O֝C1Wu(_Je+V(,mI2g-A;ք gw ݊]mT/>;\w2g %P}G_|k"ΠWzmeң2% &?$=>}zgT-JZ uǝl=Vj2:_Oj0uiFh[ ^-%gn>Ҷk \`^8O &3/nag(,[ft+5S:#k5UCIJ< d[{8x)̬{&3CUnxQ3cm,OwW|ZٞREd SK|,?9PV} ߓ7F~'=ɎǤ%gЛdĮ.Ioc=jMbg^qӠK=ERC r`e>l nrˠ&03m"F6Aʫ'Vi'I(D?Âɋ_՗YʙzAҒ8[~d$Tr:5u3:[i9P}Œz&@X*(4|rZҍ-j{EljLt$ζ3c:<9-ZhԦ߾J)HO_ʏIT><$V-YP:̸[bFj]vbgy~7 ,-(P 8|kpzV'OtzN.5P!s`/ :^l2+qAN^ .4utC(;9v\ J'j:A^.Yb&d,Ȁ LVNFS &F(qWsvr{ue&3TO]aFQ3ޥcPago]O3+VQ;(M~ɤCvz&e jhblO ^C|9;k th\$IzTx2׸x$i&?M%y՗׬+d<4ҐÕtx=ٞREd?Kع,BsDZ##If";X,#Wrù {p{y7]4~ g_S_ 6 :~X.oɛ( ·=I8t5TGXC#:~M=s<^pR±j噢 BH]s /`ͺ*r\_gHSG;E73HOOᓤt6zF&JtO:CʟzfRP297LÕW1h 7ݿ6"?őv%w8^4uoҾعv8a{=z$Iz,3[7dĎqa IjL2w!{"ZKu՞I=ǡ(')J*cR̘ [p'p</z@̀x!$ӷ5jrۿ+b!!k1@8ZhhxLBÝbZLظ+DyUU&1J^mpkO,:uఘMXjEHB`H,ª/': JY-??%ʄ8Y,HYihk؞^&Ћ˫zҵK,),,\DDbHsaofV.^۷#L)E7DVhN"*>T #}}oP',gvy\=(99$D'N&̙3Ett͌cpX<867}cwX8w4ckc,`i 4A<dO˓4reDckF`w:n|=[Gբ6xD0bc練{v蒗{ʅU!Т#Z3s}"6@dUP(T] 诳~]Ks+jIlrq$-}f8/=,IcƮO拧'!]'ǸT^V QբVP$~ʠ[HU#S* d#946D0'8,5Pxp"Q,X8zud ХΣGQl5i-;;.M/c?TV`MݭlG gfAc*om0{ Ҟ?YxiZ6ؔ'Y4uhN%qY:=]17ëYݫ<LՍNcctČqMZH|DZ2Wz}G||#"JIU:OU)|& .dIa?$I3$ c#\zsw~[I^uObiE|EV nH* ?ǹE}܃qC+kbB\gʹscз`:(A!ӦOZ3up JS=r6QHBqo{n> s`Rw,ˡm+Z¿1vy O"PK׸v-;[b]ϫ_!~}?2lOPľo0zM)7{;O%HP̞ ]Ɂ[8+<͆mgљ*$Slڵ>kVqjAұGs5kFfhE1V|@Y|SIQUrѼ}]#Pz&IץOO〉Z;BSAJMUg)Q=PV ҷ^6/_W$S d~@w2v,e6Q#n`"ڸ-cIa@YÙ{~k.fn%l-u"'-`z%IJad$G+ @In.w2oy4/g{Q`_%OĴ#MDx{t t :ڡւ׮r`Ig)ϔ>xڡPX`au2]#1.:116 Em<48oNkmt4ǹ'dZK\LWjγ?.a~E=j43 )(2/Q;:T٪COޏ˷-2'a$Im*@tr^&3ɼ̐y.^̘G '~]El>lO"2Aށt}7n߭gtmsP 'tgNT&oQ: 4 >$ށ`X0y &.4ѥ"PEvV!zru2qUi rePy%5\O"9WW`=~;xc]yu0@ ,=2$:Q v^♓-,O4U_*o\3`JYlO"}oV}^M \E  ǛTph|VݸyJkAH]s /`;"utqF}Ż<) ɔb ć[({9kRGc{)Ҵ!<@Pp:B_pކ W?, ٷI%MÞ$?A5TGSXCGt&};5]qTplFDDy5L|s~hϽCSrsDZ##I[>ˠɈD+܅}o{!5wŗ5x3ԇˤ(ۍOM[ Jgu@@eH$=gٶ/W[tdkt^5yYUZIɉXV\hǘrG)=E9IPRfdX` v8.+x@8h4 &'-Z'?Tzu6\h늶#]$N/zC:kF$ڏd\jļ6fBK|*>T #}}oP',?d{QrrrI4-N8!bccM3gh7ƱxqloƱqlhX?/h1ăx`)ʙG$U9SSiӡoQ(+AX5Kv6i;>π8}qux$Iҳy}x>*l'ylϔ 1pIʕ+̝;w+Ir&yNb>:o5yjD(k?1$Aӷrz)^ yzNJ3g[fyRc4_OgdYzJ$I$I2yst|Z†İ?DESt{6)I$I$Wț=H$I$Ȋ$I$I$IHUg(+qsT <ت軩M$I$Y%X(}i,t uBK|u(z#Em-ͱ` {ܺxa魟(_]RbY_3dZvDkfOQߦPX"J cKuvُk`inE7M~K$-}f8/3Q)POF(R#4O/-IgƮO拧'!]'ǸT^V QբVP$~ʠHU#S* d#946D0'8,5Pxp"Q,X8zud ХΣGQl5i-;;.2&_&0<V~ʪ3 5֞hwJ M~%Iz|$ΨZЭ3*8;zd^u;5`` }e~y)UDp~@w2v,e6Q#n`"ڸ-cIa@YÙ{~k.fn%l-u"'-Q3 OgϠz]ĩTfMF2{T[Ҟ Rpg+Gxfjߺw 6!aU2(#MDx{t t :ڡւ׮r`Ig)ϔ>xڡPX`au2]#1.:116 Em<48oNkmt4ǹ'dZK\LWjγ?.a~E=j43 )(2/Q;:T٪COޏ˷-2mjUpյRT~A>裳$]СŗSj6Acm̷ۑgdžW-8/o/BL[+3pJVJM10`FhMP$R*@tr^&3ɼ̐y.^̘G '~]El1?OT DD3:69d3'I*Q(fgkdY |cv|B@Y0,L_} %]aK=ERC r`e>l nrˠ&03m"F6AʫK|,?9PV} ߓ7F~'=ɎǤ%gЛdĮ.Ioc=jM.׵xaO[ ܲj)IE=ڀ .-EjGFRK+SS'ȟq8ye7) G^n d-BB'[Z +hޢ6wQtȴHgPIl;3=#CP~8rUFm:ZΞ4Tyd{J品"Sgs<8_~Rzh !Vpf.7.(0puˏ0ѵ[(< 3Z.. ;{>cRHLգ S~'^K TKΆ6trJj:Dd B*&qNn?1p3;҉*@eּخ  2d&Ԩ| QJ<~E޾-f]bL1ulnU(z f-]#5.yYJF1f? ZhQL޵L u=^J!~˼lH b/\AFW]pSYUY;Sx_ uu$|yuT IDAT5q}!])v#s,TRӮ#'xi\#%!R ݹ#k0u >x5g4vX*u$mr/E`+=MPp:B_p s㇅26 J>|ӞC'(Q:PCu4E:.84jГ9sW-(6Q)zίMDҘ)`=w;;Ҟo.#}?eͲ8r%70wşN㗰|[9j ;7}2i?pVrvΙf\:|49f\VIg(Q\ xw]BY`JC&|*m Zdq8Ү$Nx}K.7Qw;'t/Om?$IПef놌q=.,v=6W)}^2wOIJB;^kYaod{JCQNR>TƤ41%`X8N x^/ 4́BIVA]<1ZǺ"ӋZ:#!DPNU.U~kb^3t%>F[FĢSƊڸ KVhLUwb`PuMSL!Fz&eBgo.,]1ҾEY{K^X-4jaf"}[?rK*+Tӷ5jrۿ+b!!k1@8Zhhxv19 u-̄{>yrOUh}߁P?.I|P+X cX!niD}![~K1F'SeB4nxKck&mENIJ|.FjߦBCXV(^w$=ǞCc?hXZRy^R18A;ğF~^q i"::Z8qBƚL3gok73Íc 8V5=cy8ַ3160(^c1Fy1HʟS3h!=+IrR !ҦC*P?W9Uwo<;*k.<r{WGlv|Jq8;T-Ig<}T>.O؞)))j1b ɓ&דǕ+W;w W LM<4}tkTcSįq#0-MX{5O73+vxm=VJI=!m3g5W$I$IR5%*`՚=JN=Ju$I$I$I$I$=sd #I$I$I3G2R0%:,ʪVhy$I$I3C2 udQ-jhiG#6f`0Ń3NoDq̯aPx8k3& KV<0vO蟦K^J!k+?Vyl@ڎẖ c?=8.J5F * I]-O/OC0uOq("EH&AyFT8܌f&J*L^0X{'8fAc*oqt\] &x//P: ϲv\ ) YCXW4 cLP2v5DʏqZ*_w8WC~X/d(}`RzoLaHwέJ̑2=0d#&qW]y ΢3UIN3شk'k }*5nmǹE}܃qC+kbS}T6!ITӓ8jAΨPj;dRyՙ6~@TwԀUMU{&*"?NVԉȶ,`F̀ Fh[ ^-%gn /A_t(Fٹ LokgP13>Mv<&-9Tԥ"PEvV!zru2qUi rePy%5\O"9WW`=~;xc]yu0@ ,=|:R)ٝeSP3^sFK9\K/RiCN{u򅒻r 8Z:~XoJɛ( ͇=Iej(U 5M7v=jh@،j_5sfqH^nC_5~WQsfF5"o$IՂ,3?wU{KҖ{l QΫƔ>/}>J7<)9ˊ ]glOq(IʇʘԀ03&skG p\ 4@390^40@<E7DVhN"<@Q$6  x8ŤSeB2q@V㎔nbbhޢkŚ3VU~kb^3t%>F[FĢS im܄YP }Q+4 &2ӫBP'aR 3뚢DB' 7+0MzM˄zqyU?Q\X6bv}=(Z i#Ek0TV:o jhBc"Wu>]wa*BTGm$= Cuf?hXZRy^R18A;O,G&!Dtt8q℈5fΜ)08nf{AƱqk{.Ʊqog[cKcl`P1≇cb ?(gBzWTLMBMZUDs6yvbU\y0.٤>VqvDש[$Iϖy |]=SRR* 2b ɓ'M'//+W0w @$ʙ>CGxh輩eSįq#0-MX{5O73+vxmz@I=!m3g)I$I$W@9 j 9vOfO٨$I$I_!o I$I$I3G2$I$I$=sd #U _râz{JetR6dzbr廉'^7I$Ig d@p[/^xta&Sy[Q7DEWZAL)nW#UlO<2y.u=:bY7/HkqqA_̖8&h6:5A3k2%+Vb V,Z,z-DS:~ʪ3 5֞hw²I /3n pœ@@}+sqO>"6QImNM"Xc 4LJxH"~m[ĮC[?;,3po㢪ǏfcEDA%54}LZ-ZihZTZY}>eeK."* M3w|<.sy{'虅=ow[д Тv<=hs"+gfW? M$&wǽ#|ՐK!QP=~mS!/'e2KS@9rڑ,̔L=MK&ggD* 'gD )|˟Ɔ7Ń0%/ড়n|۴vr}. ٙןSV77.Ǻq:/Sgn Ȗ40;kl!I~ZltӆVZѪU+nC3]c,;rFш e˛X3^M˕d[N~ÿ[\W):(Y~} LI˜]Ic>=6<%̘F㵤xG_S~̅egIM"Ў;a@O`x `Kh,KFWx7} Wx . iOpJdV3{GGncYnܨ(0_+ɉɘMG>2at ?]̸?HL>>?g ~W7Sv(=5cbvpo~~j`\jKzVNj?l|+}fYFzjP!2Fȼן \#LYv+VK=}Ȕrh?bzv1 T$GÒ|۬˄{V18n5;;tiX#=̄4B$4䍕3YX2섕l+mHQi{HO[F 1D=a>$x&'v,eF0PxZos;gwR|po2r}^$/8vJOT!yg,O?<N'`9<qV}{9lIL= @޾=X}hNFI6yl^l}]Fp&# >+ssJs(άŀN *埱JQ ;Np8yk>)=z&'e.ChBҏvHk&RuUҞ%E>bi<|2C`h rOfMlq;.Q9|F3s,,@GG5KYݹ[=7/?s)| ;_fjrM149[N\8&` z5?#iWbcJߪܰ|? k#y>(1?-eLB]@+Z72jOG2hYo1EN6q5o_7hR>ӹ[w2tPOM9dgHMMȦX rTI9L!n6j5֓lZm߿+_E\;"YK){`2uͤ`P@ B@P@Sh(JTUg><3P5bETZҁdQv* ՎעP\{P;)}P?؎bx7 k*/ d[OejJ>z4.Py ͧ]P)9Z&W[oZZUݕWHK5xJ5w@V~{VZ mwj 5cYeuv<:HU4*wji5k۹?oz+c=†RejlF*äUQsR-/7p+_W]V"T;V_O IDATw575Ko@ՉW=Ui~#߬RVҞgR)jjjٚӤI0ݪݬ/]7,GC}~⾿Oq,UL1ĕxda/qLgg %e`g5S*]WEt7)R fp {u e<8k \%7@}.flϽ{:,g2x`vء>;viӦ $'vR%Rbn[;{zlA?(F"6~~:IN|}zB!-JqPI3 ?KLJY׼~y=E!%7 !B!n8!B!n8Y1.Lw(xB!!#SxCaԉU`*&}ʐ֑DԫKnK#\#)@Æ7`Թ<~~Q%fѸ|`:}`X:-̞ ,pi6)ƥMeϏ1x=| {[.n/1g2!M r*3rCJ}|;'aUna|RXܔ;x{xb $l^.~ۋ; M}pwBVCis1jg^efZew G8^y}a9B@r~f|3GczwzI٭̒ĔG';w&v$<< 3%+iO2p3E_X_th1f5G3R?5 )nLς<1U?O4kzݛӽOZjEV-:ʨ8\B&3?ӧ>Hyoo\"uz3t^&,ea?t-iVE+a$v׼ Cēx'NA. ÿ>YE1ϼ e1rAb\ ]K8C0kO"D\%.:c*ӸF &|0m֋ 8=" J&/KjɆv!z?+X@Vf9_22w(F hksunHҞ d[aQC|#FFфZINLl&>՗Vݒ,j}Hhm,Kӭ`9ڄ4fv ӏ:GSrN!?]̸VMe$)@ ɢSؖ;TColxܕaxgL Ol.(7ڏİ]s :Uzs!]OT!yg,O?<Ng%)rvqb 0:׭fٗnT2-zkG=`tA(ܗ~Qr&# >A@m>|i=?mi+؈!"(_'ׇ$ĎAV&jO3yѣ~NOp %S.q,(d+%B{' '`ͧ0YeCH1KU WH{ GnEW።,>:/Ĵ!0fsZ.qIO*$nNHfDԋ}OOf @ʇN=;qgqWɤgf=`eߊج̥yAVWKo&ilkVkH(gSQz.C}Hq ݠֵiI'ɏ+}sv n8_{o&3~[0{"}jCЊ֍ǫY88$嶷{%Sq>;UDe)N!L g0)_O>_\[bǤN8 >E܉|W/Kbe0}=Wks;N>/u;unHҞ,tv&}P<V< ~@` j@= h DMf@KT* P-XO@)?t(9cԸ]J\{C*.S<U.Ϫ/\TJ)eM_voNݫk&\)_6o-!nrvX7c{ݻaYT'>;cرcL6e 8v涓*1]'(1]&Cn&#}^O-GػK}͹ퟘ7'ғ=`$8jw麟d=B!UQu׉ `h4-cz?ϒn&ӭRkV5oz !B\Wa}y؃B!#C˄B!DEEij 1Y1.L:j3@͡)w]_X??Vx݄BqKSXxUztˮ@b=ŏ7CouX/szz n?_8y:C'i,jI| O,6ݶ\CceHH"եnt7^% {t@c-h rNSvCy3uGa$E`Tfo l$Y4n/1N#Xv?~<j '~!vYǁ㍏Z>u-scSחЎdL⋳Zkfx6}˩̸ *WćUßmJaqS`i3{%-qq7suIUj_v~Aj{Syכ2i?e) 榠lI*Z9#n"#'8q *Ewa*6.Əy_H.kx ^~gB U/db_mr~7/݇Yx=&x 0.qԙVY!֬'۽9UVjՊۢCPX0cxi^diTNc,;rFшŷY|M,s|J-'|H?T߭`jbf+G,>ۅe.R֎ʱ E__DxfoZR<#)?B&lh0'c<%[ 4neK%+Czb>ʀYVpZpEi+93cO|F0(!pFh|$'&c6EU1dV3{GGncYn. I:`2-B 򳲸x~ ?;1Lz wJ:|c$&Si]'ZT19c^tC?uJ3Ņ9kÔ}\څS' ::bΓsOsVz0}V~x>j҆aK˝$߷$EuF kPG% ?O?OiV,^K`ǚI=mE_=~z< ) 3Ch{^FH:dd̿zw$&ɟ3}yuëݛөW;B11T;87??B~o0k5S=+w'SxF6Օ> j#c=j(NBhd^bb N_,YOtpmjMG C~!3naiϫF]־{oFyBEz:Ys$&fbh܌蒷&X;<8be1̇vYi >z&G((>]$]2аsgu, x+q r DulOg8k5,SIS;1%o_vsi0d H`ZčNЭёЇ'iGZw|M]2ocze(n.+Hؠ<;ٷ Y2wo$!LNaI4u7oFuW<ES85$/Hnݨk7iɹ5$hӱ9@ai(7;VtKCgܽ~5iӮ> u˄nABwgugϓMߤ&dQ;&QVW_{3[ѷ/2N8_>9Beho2r}^$/9w\K 1q4,=rh?bzv1 TeIaP_f_v Rɴ EfjXiWp_FFEWʙ,@jEvJжm}(?C=`dc#|u^p<;2Y sXXq<-Vҷ~KG~3;b>N9,@v^CX~x O hM5//O,(ds#3P?W}{9lIL= @޾=X}hNFI6yl^l}]Fp&# >+ssJs(άŀN *埱JQ ;Np8yk>)=z&'e.ChBҏvHk&RuUҞּv__vW@WFu֯-%ÞRwy&6ԨR@>0֋}Ăxd<ОA4*>1w olܼ̥< L~UқIZf5,Y\q)r 'dvBavzxXu$mXL~0^[ }m3?fEӾLݖ Bҡ hEFFippH QӘ;-߭*4R>Lnl{GA=?Sh0g-kGZ{&TlAŝ 7NlI"i\YoHlcVGo=ɦeqQES+>>*$r,o_A&-_G9ŅPg}׵ IּC2 *)o3KL'7</Uj@u €p.h4b89pp0JU*Z7zaCR*W-~_l`Qv*r Oe Tz}lGUWl1PU|Ԅ5gz25}C%GQ*APwK*T5gP UۤjMPR Rut@ո iZSoϪC_mUUwrV;=fl>ΎUԟ՘FeVM>Bknk[@} =N^nҝBᘣd>^U^*+)S쥖eg\l|nT} O\SEҶCpVbq5j췿hjd$';>jgBj;gō-8;:3?C:4Nb%*0 ⫕%n !Y r,gCV:ܔzi+HnVCi6պ3yג_jE-=+ǿ{/cfsF xUu;qk#\A;8wNuى" fgi[]t%ɶ`zӨgq[2 q݇}<2&u%KN˝-b8l~ ̼Y+ ɤ'0FӲ9}CWަW-=X)^syE/dg݋ ٲ1?V< UӮMa+6r\+ƻo!nj{B)H)P{jh.fePټԮӀߛO)L`[^VBqKre R*%̛*(0q75]Kc(r<,FLB:K!V=zCQ|ڂ?F&g債yO⵻.o8tT-7-ظn3 w1~.1{s*)5b/+I*@LxUã0|Ӈy[i[m@OPHug:'_t{kZ̏~iڗ+q*q5JFh^wWv U&OL}..oWr}[0|Lۉ?|V-[ңkmQS<GJ[qiENx>|%[޳%_nĿajfAW-zbƫIhKLL˲8g*-hx>+f o`4aγQ >5C~`fڴ0ve8w}`S<lH"Z3i_,BW^|G h^/ץˀ6x??\+kUÎ]w߳}i]wWvd&i__]EobA4o&(.O9h 9FFFz {cN"@6Ӂ<7q.GQΔS:O/m^&E.d+/Uzsf&$pi~ -[Ew `,+ڬ.9>aNO{iؒ/8wUu>]w?";*иOGE]ᒇ^:<݋?:==rIp[tW=Fv+??/ڟyW ' *{R[o&{'s4$.KСTkyVC9W>?"nXp 1'{5"ךFƑL_{:0>x7mKٚZW =jw{'~E=dW!2>ܵkf@MZpwWDK|l_ŵ|uqx >elC8ևyNR^Dzaz\tQ9I>Ef]G楳{gk}}({/^bԊoE\X+n^xZѵ´JdZ{eضm8{{7sfEQustϚfUf{^_롼ֻCuix v<9q!u+bY=uvKΝMs`gW*EzBq)QL:/ё5W!-O}6w#1ް Snw䲒ZO.+3Wf3G nM͕B!:vb]&B!DYi /+JSrV`\lL+l2*_2p)/ ِ2,ۛ.kmB!\v+MUXȔ̼hee 3st%3/\pe{B!BTW\Ĕ\.Te{s{W.29+sɓq)m(qlB!ʓ2ȀYZۅB!**(K0R};R *3_Qlsv,tEXtCreation Timet2.listopadu2021,08:03:22 3B IDATxwx&HBлHSiJ(WlWQT~ʵ xJQWT,WQP&!4Xln6g>gΜ33 """"""""""""""""""""""""""""""""""""""""U) (pN# GBn\. `(,"""""WXr9 iW)(UtHRPKPoGE[! ̡Z.5SZjDDDDDHj*V"@+V(""""0ryUDu g"""""UU s rʻloe= DDDDD"/Ӗ7 J0WOf`xODDDDD+5jLW`,\0i`|"""""R> ނ=>PURqL#"""""Oyk1K~b?A ȉYƹ<^@0.נ˗ ϛ"""""R927)'0VDDDDD|'LyuFUtm0~_mDHpTT~O;_TԻMiQp8aތSA0w>7i}M T w:NymVno sǯ@.O&`5x8 >_j̕yρ\(8o`p .jݜ 3]aT .oou gߗvS͸*MKOVΨh?ӈ{ yVW*$+o-Ё ey@un/OSA8@vޤp <}߀-7e5 T-5meu/K| l|۠͗vvw|Rpoֹ66&"""""S|e% T  . Mi^˹Uo`gi;.""""" D-ӗS]LNqK`ş&F~W\kٜw/M&ծ]oƔ%>XcۏVklp"""""3FVVRrs)6)[wRSzZpyyyfNќ|2+ĕ߀/5p]vAQQ_JVڵkӨQ#L&=7EDDDDJ,YC}P'%"9e7w?ne=Y`'Λ3>ͮ]妛njp0sL^lFFFK,a׮]4n8CFi 6MS!qqV ys׾ԛ&9t7x#\ȑ#_j]v,X@Ax--Ҝ[2ߜc l).Joy/0qs774X֠p8%""""N"lk1 S&J8Oo"j\@qysߛ8p݄;)""""rJ0[9"j=.Z9 t \%'W x*Xs7t6,@YDDDD$H+..[Ezj \nW~ t@ɤs+WmHUiέ"m=NW8V h )+O"\m'bn@0; ugyUj᜻=eT! _~%[lbЦMZ:uٳݻ4ŋiРAR$Ew{|y•E޶75gM\-~Y?7bLbj?%o;1ݰ_W<ċ]H]3`Ϟvĭg`-?N&׋T!3g$66{dʘ1c>|8?CЂ}qYg4իLsJga8M~ghт.][oQV-5jK.g=!9Õ t>MYeF;Ut".ЗE̵͆9|2iVU۸ξ4|2#Nc_6j݇ ;6x}υtX#m?ǔYtVF H-W O}6̱5Ig4%ե~Xax[ȆkKkGrk/˟fYOOlir'??L7y m|z|Rt/L3*DGAϙ8+n=DqlmŐqa(HVL#zJyaZOOnH`lݺ3č7=_g874rÜ>8gsߚ8T:&M^0f}"t-+5iҨ> GXx6ohٚ[ɫ٘f;ټ;^y1^4磭ix whCTjȁ.鞌 ~^k -hA~f~yg yeS`b-ԥUXywK ~~gp8?XPg5VLSsHCvx_m(MÚisJ`:Ș=_ZѴ|Ȍz{L XXHTj3ڞY&m^]M=GG2s-:Bs`'|cq6B֟8Ҿ#͂C=MJ:7r8^_1)yE6fU•b1lXTTDBBB֯1lٲa(6m]w6mbذaL&6nHÆ ywYsM kʀ+oF͛])e~n9p"hTss6ۯkN^yyYmf-–~Kv^2}s\s7;ϪFsla[hU&!X`/s }xxΡe,OF:p~Ş-Cǎ_>}u^Շ%?oDz6OE΂<,}7slj)<ܫyK^1یѫIIR q<{MbJ6^t{FL/IV4Pϼϼ||jpdgEp8yp;r,-q kK~f6$vR=4G{ǟ_"a]v\;wҸqƭ_}ѭ[߾}>#iiiU9eEJMM?>ԯ_> X_⏲r7ZO?8ON/U-\,o;]w8 KSڶLğu->9K$Qr0c 3c,y=KI,.FMP;m8l{yϥtZ)c?2Am'wN],h:(.ԕnm6,>vjEε0aFi5ݤAT n_&w8VQ߳xvvqDOƧ8ntWZh3?qU3?Ksh9bڗ1.ttJw9Ieh"`7Z HذFD m狗'1o{2{:X\:>_p&nGxL4=knzd)G!S< 5r8-[蚿ŀ%[i3aiҜ&%.u"* J5<&+լN WeEuחt&cYl_'95\^gbh}Ky._|),˖畉 o^:_vgs]w1qDRRR>|4˖-#..ԀUV4mԧybsʊaغuѴ4nONJJ?)QVzؕKN$./T)((P'"S?pi[`iܐz׆ҀjؙNBHumcӢo(gz>jiLLbi7d PruXԈZW0S3h&뇮k-uo_$z_ՏfyZu7+aV&i=m\,iĂiVV>ƀYb4oJ#w{eW`;B Ԋ1mW,Punyu+|WƖuw"V9ƀ(ز%JڷoٳY~=V~q饗b ^}UMرcܹs@׽o>ׯ<{)[li8~֭[noIKKo49<G "^]v77 sGrDDrdEMnJ1[oDP7 FY~ƘYn/ʚ5H>]K`n@yz&<-ܓNхv[tXZоM_Ͼyu_w.kwv 4`C/Lv}QmO >f&3*6s}.t_˼q#H"[pyW\DSfyhN1ΫL^f c(TwyXUk[8u/S<$aĝ̯yϏ`8?G-[tTVɓ'ǘ1cxgرc֛Ï?<͚5 #O Ӷm[}ݓnӧOo Fq9W/Wٌ* 4` dsJ }6W^[U_/ሥ.v fn~Ǧ#tYy1O6гO;&sӵDRxqL*~6iFr.\% T@E뻩|7d\Z$Ofߣ?0UID"2E0 /.;=re=57<NDbh6qv\ܟ~csĒڈVn DbtЁ{c2hР-7''K4Ov~ *w']};M'|Zt7՗*SDDJmЅû00I*X \pnN)5 %@+w@W Λ`]etàeT""J[ޏ DLLL %\;<tWW:Ou?79'6_^0vdwlj(q틠.-Ow`Zk jFz xx&*Fe~ f^+ """"VڵYdɇ7n'33;vPvm[Wq[ L1 <=i_&q3yz.حV+&SUyi5jĮ]X`]jv4j セSͧ'Zeߞ"X`QСC8p.ÿ"""""nL&7nLƍH[Ob׺RA77z3 ͜93(_ƹi 9S v=\}NI53yp՛<t:2{!#'U? r !/6,g9 g}<ޙ W 6,sLm`FBZ]CܥЮi?ãSaxGrl{1Lj> C1> -GJygφyw.Q1|v< ^z靖Ԅ<~ dcٍ ƉF=Fz}ɫbw܌SV>x!X /_C\whGk0yx. <^ҿՆ ޥh}:{sx9lK&5 Z K6w6֒};2>ॗN|^޵aY΂ɔ nܴ[rd!i8Q&h򫜙//FihF ze9"v3-> 5q"""S߅ۏBTS0 L}P#}鏵t&CK{T#t9 cx [ຶp0m+L0.haS5 CL#9Mph,nϴq}foA*kx9m6/gF/EPs2,/ 7=],gF­i Dce kBD$^ؔQ4jEw(v]t]|,.>;iϛ>;YDDDDBÔ!'Ny}x13w*ÇgŊfgg΄ ~]n~\t SMߎ֒^: ro˭P 5 u4q""""(mtH1AۡG!P^-""""""oMP'@DDDDD* |f(&NDDDDDNvPRQĉHX1׃[kڅ:% NDDDDD‡ z^gAI0_XI=q"""""RDEG38-8NTRM"Ʌ-*8)gu DDDDD" ֫"#ޙ3fDE#ה/]Yo_~oSS*<DjDDDDDDˆ80 NDDDDD$8 zj|g9ƣ˾Oc]f@?VGdP'G\0Gv.{g>nIBn!ͳNqβxLDzhO)S+[ &^v1}y{?J}xz%I7 %vgW|*ˮޣ6q=hRkb><3>^7#=ςG=qeT?{;~˪y_sll)W:(Խd ?o asu9JZL2p׉ogʂ\V-[saa=yv*'69Ld})}٬Z1+3K1 uB~d%_ SrפIc{=9i|p,ˊyk=?սGQZJĶyYGnǴ;?oAGQGxp֯%kgo^Ğdt٤M<@a~F@Ĥk hvv6kWӽO.Ӓà .$sQZ!g#a #1i1]Íal<]NA+9l#3yeD+_[O~`|&&cvEpGU8gGx T{|:ۗU o`f9}_W&ۢ3ylg_:ߏӥV`ؾ%׮MHt *_Oөk_ν.)jdrYz umւo$Des۳d<هjcKl6mGʍtՓ+6sDTUo.kt!g<^1%g3Æ qmC9i!*>XGͷ{ӡŜyq3[mʗJxa`W>ޝW]D<:<`-e?ðF\ӧ!?>_ i\qv?>OC?B_hR~bٴf͊09M(Mv'9}Z !\sdlqdt4!-n˒5: Ǧ9xb|: ڳm֒GM=loWI/z\lp3QUmk̍CstKŬ80BRak1l{B;Xc@:|83P!36d@w')dء8&S?(s}c[zy',X]ǬȬΚQo%>h8L:(guԈa2&-ZI:f%ŏr勿2ݖXIqœ;4/9cژYLԽ"qzԿ0r8)|ܞCL5n&ǦȠsӂ۲dt[  0,9gEuN| 5<Ϗ|1T b8pEZ Q08qNGd%(INyjX9VrP:_l!5B\ICx|WXlx㜾L >+<őۣ{h;3Vp \LBdM$[8mf۴3c8xԾ!-ASAq>YK&SeM~" _==Q~ `ޘ 6:d_7iq A<TxaZOu:үˠ9w~#7"j֪N]^>*'ܨ9ۖTwcpud]hM]I,dE]t}G=۝k,0u\[_GET/Qˠc`,,\vɬ4cX%eX։,Za1Lmk*fpXK]w\J\iqX?^Hz'8n _9i>7 1 (?]0x暤dlż daae#sdEL!: =gy,2笚,\nX ]ODVe_"Nkw;ƋxG2pS C*NkĉYVٙL㿟&ABbe#f2>B)po=f9uY??;ȶ^ޖWZYW&OA&E8sk1s|ElƋ Usxx["<Ӂ)ܲ޿@MOq}S lԑ1i@4PȟQ,7.f2-KKՏ͒;Z8RG/%R\GY"gwn-Ok8f%;7oޭun"!_)?}Ϩꤙsh.[Ș, *u?ϑ<74n4X2aPgt te*NGXl5YRVҴ c2m'קkx9S?a&yKbojiT]369}..>FM'2c 憧H>XBm*ܱ0ٙt!g g)?EYo_~(_oaЮ3?{γ3܏43w*ÇgŊ&== &< <|.~NeqvE0ĉDde5dCJA!+aÜ{S.GA:jP"垳/W㔟S~GH>DO" -1 NDDDDD$( # DDDDDDˆ80 NDDDDD$( #87GH߾H}%< MwʳЊ nP xf̈G)_KHϳH߾p޴|Gߕ`0.ZG1ޙK s߃P~-ב ,Wh E3['2T, LGҤqYC?[b4-/EI~`r`n`;>އҴtWu~g CU)xw~2W G{ph3'x W Yè0z }0.Ȝwy#Pl}0U:⚇Z4ԩ uDYO03 #6Ą9,Yp ?[U#|zlh&LhU#z7-fI1odb2^mw"2س3* ZI2%Ab6dՂ'ȳp&$ŷ@akέKփuVPla3GN#UVU3OgxHI/Րࡰ\ުy"T#j\R&Ln6;X# 98{wXx wlqxd![m1Z^5-)R,8O]_ݹ0C3ȇ'è0ݐp?Kg?1"LtxcpԄ :e\"<H*AA\YG%:v&]Ҙ%s,~`]~\U-1l1oϢ߷gZ=lNC8ÐUjY`0AdlV{'/q¾S=.?7WE}U<38 7yȁ|ؼpa*<~s6ۢMǃ׷fuq(1%(&x3 #܌qyՀ6f 7q,=V2qzpEOH΂:Za23Vx# 3!dH<:ܙS?+Oyvx 8`ӷ03s9ӹ.|3jjEovmv6p=o2Ì0x7"}"kʗR~.,ҷ/\h?7?߅<љ~Çb dgg΄ ~CN >ve?8u;hSq""""""aDAHQ'"""""Fĉb4;7>~M):1nLzi;]Q˜:q:-t;38N(aVC;_wFS ]Qx\~xF"#KH%aڪ/nQ}]Yت̨Ez%v7B(5_;sxVDz9t=O >EG.L~6"6917Igؐ5qtusG&b=}i26vJnB^^:QFOLڦ'GFc'SZ`f"pɔw vCNhH8 o? x|T%(0p$XATSC!Xt4ԉ ry W Y`Jj? }WìN\,iZ#~|SĞޔ{5^pyj}mlM'W}Jz}ӉqgxW+fq+{YxXY+#Sdݸ*% . 6~;K@BDt鉗ͤÂе ,ZԅyVF-<{ 6&tI"E8?< s*>]8K1[π ͙8Hd5c`Ԕ/˪:nۚ)v'\p))L$H̆Zty6΄%_U:CH3HAca4F_ ՕaaEф, =SxytOi~;t9_63~] !3>,Ϡr/3i gf8{|&"1_"NFׁ!;uJJA/brKuL.1$woK#xsl-sv2(w.r D\4q0ucS!&Բn;`ɐ7kU"ϬN_㞅}NPS%Y+6LoB)e*ષ~νđԾ?}8NI@SoY-PrۊCȀeзX;nu*3{\|y[\D|9p3%C݋N-`6pD5qNLNIΥy)k.e'.x7h2 ,œ{q7j4iˁqzlt8?J?:jΐ;<-p3nU)}c8<*Pv&|>a[XZY$9 Y\SWS.]U璧sO` bkS-PNB^,{.2~Rڕ;⯲/h\U0Oy&+Ƅ:rf<Ǯ u*tl;tnݽ\PqSsJN IDAT0 NDDDDD$( # DDDDDDˆ80RNX@wsk9޴{ /nK2سj2et9fXngҕ4|>Pr0{ sǞ(4,ZG1ޙ=i 7(>qIT4jO=?ǃ#3˼Ӝ?#3Ol_ hXLch,\ʙ2hT^΁ۮf5da]֫LѰs#9^e7 ?'^$[+,U8st~c($mM5a//|iK\;Msө)i^;=Z̃3奴9lZϢ[!c5FCo0p$X M6#{q)xwy!g, 2Ý#ipH8'ihtp 9/N5<I93bX1(/`m{jɱy`.jD6<< T.JuZYUX(uFI% <U.7^mm|z [lRj؀A.Zz:/[N}W[yg\CaZs.oە/2M`hrߢƒbcǙBD`/tmc<2qdcI2:'CC;dۏ%ǠSSӜq5 4zuy_gRΌAR7Cb>/R@(Q S9sYv# s|RE¹)"C v'1*= 12٬6A%[ğ”|V5wbfL)& k>:Ǚ 1jap8j`鯋a:.Ij?$9֌ x0LwFe0ԛbi / ޅߏ6 c%+|&%q3O*H?,2T{ ##1jazYoNs]<:4`Z:fc~?/Gpayb%?{wU?~ufAD@RQq%\ZPfyo^Qv )KTL>Ĵ\6]S233 7"., ˜:(xǜ=|Q{n`=tScʐ 6HXw.Ig4 P|aX TJ =+f #NgmV?gZ4RU8/U ?x9,/軎Dk<7c'gaHrfdwM][.TK,, (6]//tq~ɃrPەTʙ[ap Қc<(_=d*4bY*=P.3g=!b9d1@b6Axp<n;4Z}r^})/: toR OUSG`h|Ynp3&Z㙰ǺƞN1$Βi?JPCD&p0[>/*R6l=̔g/ܦ\i~Io O-O?]BZ!7 ܂a@|}|w3[1f_?nR_ 6Ve3Vo_Z}!h9| z#o"Ap"/ x_[_KZ㙰6uw~~l $g&qp>n`0^"P@cz L?VޜKPr:Gw$BU76N #d~JqQ Yԋ7ɕuMai۱aR<,Uص *F+P(^0q6tp&0fCT,q|d1M >%W!eħ7dLKM}VQU3?lϏcHx[5/1pkk{ig+qշ;> c'9sZ k1ʾbY>YYVT]Kȑ}r9i#$/uKy=g^?{!`ߤn^l퐺.3n8 /N#fm{g3g˭r|*M >1!]1,*w&`oPW oMʫtQMa嶆}M[͋ʔ:hΟ[ t |}qP д{/\[0w]@Z#p](<Qޫ6ӈ9?{h  v̙I^#Hzét^]Va! dnZcAf\LSajG6 %,hwE#/UmVKaxWa2H2I^SkQ`a\ ¾s0 UH񩠪g0~ 5&H3V/ j^b{}׶hZl;/ά~s%.P,fY? σwZMҗd6ˆ+f\ge_ge[yjꛊRu-[#G֦-s9z셴}yC0͸q8xf17 Vk3Yyط|}B!BaOd'B!vD&qB!BaGd'B!vD&qB!BaGnPq.s,y^[yh㼷 F0"1; 7F$ X]ŸaU bMÄP1ܼ0 awpbô7-̌o9vZgϼ@? _mAyE֦Lp9zi.8ݙ8]tV~YJIM?W6? {F85fd5"M=`& /+xݣqz +SԞ+- ¤ ~OB]5t0t"} Q/8 }j93Kr|*LfnǑ0LעŹqaZi9y6(A-W +Wp`Q+ qjV^f?kO57xb֦Lp9z4 t8Szk: [B狝T9YwG{V gV" %p7V6'JSyޞlWjQ)e&VT~VzKA;ky7MWlI;$/uY}؛]_z/B^@ ?֦  @@+h]^tp~2fY;Nvʋg:#0ޣqZ mj蟵)S4\0icN7R -E4jC6%PLZ._#VRS<; cJS._xS 4bVwZ9s*Gϧܡ3ޅˢr{a*xg2y5> t8+6N0)ְ/uiwyV [as w9n4gMeV!lq¿P\ּ=W<H1=w5hjY5Մ[b?LY{/3/](,]T혾2a}o,R+$/uax쵠ssa Xuc8j/< _h8 7L͂b3/4(5V[}v ]"!yi^5C V~8* 2B֦ -EGN[*xʥK\|azp ?A9f|wQvl)27 K 6Δ3A!(g}PsK ryUO"_ߎW)çP 述$< I*,?UYN!͆e2BΘݵow˼|v;sT>q YvI*S4|> a/fY< ڍ; [.IυPBC2A؃#q}8ח+~lz'-x;Pm)% ?tWmSs`>6k  v̙I^#Hzét^]VްCo6u*r tkm)^Yp1fLے![ۀ&p4\ȇOtؿKޗ v蟪FsUL?%/B7ӏկ7gҭ*I*PՍSYĴR\T{} VJai۱aR<,Uص *F+L:T`lMGapy/Z >%W!eħ‡)0 e |~[ &D۪yS_C]:j8!*@i>|kի'-)[ﴚI׷ZY)VʾʦW7XFMu퓣HY'y[ϛ9s i&w=g#luaDEqqAb IOO'..n&9fX}S-co+Z?)B!ž$N!B!LB!Ž$N!B!LB!Ž8]BYLy t#efyoA=`*aEtbvn-Iix xaX̄o ¤'nwm=A-䍰j\!f j) |heV̙I^#ZvOAC0cQ Y\UH+v@д;L mGa{tZ 50)\+s < 6_ЈЉ Kkxu{.jĊ귺J'ySO,HπG0^b? r9)3X֟/g* v!?Y;Nv/ȋ/4/@RXx t8쫼IwVnkؗ:ڴռLyBǻMi_ܩB"3 KĚe{{$sW]LމvaΨ5A;k/$BLYZAQ0XΩ1}eHͅGXV̙I^S.JkAˆ%q^?x<ʃpb'o80f_*kmS|k>NvX&EB # *j /pckpرUdwM][.TK,, (6]/ p9_ IDAT@&' '35LyPz2 !ThĜ=^+gΜ[T/Bx8| M' N#ThSlx _ #D3 >曟R`ކsfΣ]vW/n0@Μno }<`z:xQ}lY3_ yuw$=_B~uDyoρRO?]BZ!7 ܂a@|}|w3[1g3q>C7@/Sxu$dam [ȁFЭ5H5$$2aF➱06S^J8NvW6">mc/$AèK'k/N iqvpUnX,`0^"P@cz L?VޜKPr:Gw$VJv8w҃e a}Xo]y҇؊y)*Z wsZ&Kr|*iwm> , {aZ|/ ) >T> O)[ce0!VK vWmřv~QJŐ^ӲPx,k_awyǠ7b}b|ʾB!BaOd'B!vD&qB!BaGd'B!vD&qB!BaGnPq.s,y^[yڭi0=a0'OHb3-L|+c,M'ׄbrc݈ی-c'吼Vm5 A0>BA-?ͷ Ҋ93Kr|x@N0)hw|lq;j? : `(v '(&H7@ ~= byaf2io[։d8]+/Lyw@p:?j WoU<[򈴃sN˅]pIU:+?󸑤dzZQτz;bdvF ED{Lנk4sXGgy}==qE'w1'Yka+- Dpí$|A# C'&.g침++N9@>x> ܳ =Vw x- `+aZ oSca^XFFBj |n^hBt6,DkvPf8ڽT#/Xz/@RXx8唦֌7'&t">Ew[;ݩrv>mJ;P19mɵ/Ȃ=7t}0s7rtM.?؍/s,\] Y1)xB/)Lyt1gn%9s^nSiAqŒeQ9h3{ ؼ|Xxk: U^Ф;j +5K}lgmj^Ut{88.a١?Z1g&y[O=+f `Ľ_Rq ^߂ xKP<`|4X/NA m/@A6ǩ"lkCH[|gAyE-5aV!lpӦ+7u5?ueё ޽r2?L@z1x/eK Fx2yf9c<ۿGp0bcLi1SL~F1gn9s^nSWg@ )x8j7(/: toR OUSG`h|13o~2KyΙ93fw2/_e:FO\`B8sV5'l/`_}l9gI_̴߳xP w`] 񡄆 &$d0!!G2rвŤB:?Rr\[f342 ޫ6ӈ9?{h  v̙I^#Hzét^]V! dnZcAf\LSajG6 %,hwE#/`<|%!}~nb>V~Hic68ݙ8b9SE(f]4WӁ<#I5 *]IZt/ZHB;{_lZt0/ ?OV[6/Q^] nbN$ySO6MGapy/Z >%W!eħ‡)0 e |~[ &D۪yS_C]:j8!*@i>|k9`H;5[ﴚ5/ɄmZ [)VʾʦW7Z XFMu퓣HY'y[ϛ9s i&w=g#luaDEqqAb IOO'..n&9fX}S-co+Z?)B!ž$N!B!LB!Ž$N!B!LB!Ž8]BYLy t㵵ޚi0=a0'OHb3-L|vs #Мt2-c'吼Vm5 A0>BA-?ͷ Ҋ93Kr|x@N0)hw|lq;j? : `(v '(&H7@ ~= byaf2io[psf8]+/Lyw@pP/!ڂAzO#< C#r}Q, ^v;Ms,v&qV4F=ifGd?N>r9ح1n:)k3]Ӹ~cJmɻȬr 50)\+s < 6_ЈЉ Kkxu{.jĊ귺J'ySO,HπG0^b? r9)3X֟/g* v!?Y;Nv/KF=֣iF xu"M/JZK]/f? Rx6-oNޑ*cVX.*LoOLD|3l- Ÿ/vS f}yY6PNY*z60uQ6gvU@)ˍ|KQkaE7l!cfp7lO0t5~̆cLR!j, އCްKPୗ "PO)/@f`39 g3*sa8ܳLY֎SݵĴ-Ly/:Cŧ <6NSWx66^/4G[4ͱ\ YXKCϡoTNbn`[&h+!~(c;`OIN]9~y{3~S^ʣ2ւ}awvLi ޅP } A^>4F̙I+gΜ[T@;4}bCܻ0c8xYTN/,ZL"6'!6ޚ?}W?4m R[Yva)uќ?@x/M F̅8x]~;L'c8唚˚ I>2晼œQ9kv~__HċlޛU_k\ï&v&0Пyq̡opNՎ+Cj.>ڼ"bLR6zp1W:^ <7FUG/8/U ?x9,/1C`"(P!^+h[qjl̼Gm0)LYUQv@C_@,{%w QF8* 2B֦ -EGN[*xʥK\|aRt`w wm WO6e¾n>@l )9fʃC PB#3g˭r|! v H>RE]'NM*War h6< /C"cOf)0oC93q}[LC{ ]gjCUѷ>4oǾ+G[ENY3m,TBƝ-XB|(! LH | G8`1е<'dZ v٘ 2 ޫ6ӈ9?{5 p\;$/uY Ih=T:.G[_7BX: 96/ ,3mɏ-m@8KYF^9zu%y3Gvo~7s6vH]FTԿ7n,tf?ajm&+7>ϱ3R!B!LB!Ž$N!B!LB!Ž$N!B!-1*n%tŔ7k:O7^[Yq[F# |X݃7o}DZ,1^,-03LJ099flvC .9zZa6ZC#!R,| 3-GȧCv`6@03V2iw0xb|"fV\!c;.[ : 7g֎Sݵ̴w7-]T[W4¯o ۱GDm;Ms,v&qV4F=ifGd?N>r9ح1n:)k3]Ӹ~cU1q \oP&%Ksxe' \:6Api ΀>3`EXQV^$/uQжZHkQPS_}P#'@bx;tF 302RctES ðLe0$\2kǩyɨz3~~Nx5VA-Ӯcm)َ ;cVX.$LoOLD|3l- Ÿ/vS f}yY6PNY*z60uQ6gv՛)5Ѱ] 1]3'i?fCN1g&y[O5̂j _o%\sKp('PW 0h]x׋0_,kǩZyqbZLg&{<_!Sh '©;Ms,v&qZ*9оFsۦ*㟓ؖI+`klȂ=<ɩ&x(wvgiǔ]ڧ0CS?iĬx,ryUO C!f>Ľ 3E¢Ud8-*`j}bcp3WyC0)ְ/uiwyV [as w9^Ҵ2晼œQ9kv~__HċlޛտЊn`=tScʐ 6H3-ͧ\ ׂͅ'`QK*K=x,|O*(0q5 aX T ڦ|Zn-/3oQ۩+v9L8AFxUԮA_:&<[A&q7Pԕi~K^tiҟp=lb\_dnJ֊ap Қc<(_=d*4b>3g˭r|! v H>RE]'NM*War h6< /C"cOf)0oC93q}[LC{ ]gjCUѷ>ՊV!lI%}1~^Gq'{a Ms`(U/T;}1^>HG(cZ1q؟O 滛ي93,$J}G0ës &FkYBEd7nD&!A 30ݝRqli ~& =/Cl\:Ys1vTH+cZ1p9* N7S,0/K 1=_o_oڥ[IsU(9ˣ;T]UK;Y7Cai۱aR<,Uص *F+L:T,n|X¬#h_zR6A|**|C Ṟ`B$85^ߵ#΋3"` '!e+f\ge_ge[yjꛊRu-[#G֦-s9z셴}yC0͸q8xf17 Vk3Yyط|})B!ž$N!B!LB!Ž$N!B!LB!Ž8]BYLy t#efyoA=`*aEtbvn-Iix xaX̄o ¤Z)jϻ DCFX 3H~>K42H+$/u-;Ч! , *$o; h&6 u,*慙Woaf['Βjw83~"M|-(_T[W4¯o#+S4\0ic N7ӵJgx7AOˠW6? pZouCl]n=\ވwqO1\Ԝ t}|jW=W[I^IF,NM\Zë3 sQ#VTխW:Kr|*|a IDATgAz8)ZW t$ N  <ݼ~є00l*6U9Z mxq ԥۦalhr7JYpX~h{%3nOll+ eئOmg`w*^PV`fRf˵_0"m"'CͰz,׌M%?l>z䕛Tsdey<͠yKa]!90qÍ?*-0m<|Th`l~;-\>οѭ֩:ؼf%JNl~16~*Ddw fnZ~:^J,ewExаa]%iiEnUlSf.c/@R8[~M- o1B ( B͑O1#r=O YjX;c.ȀUyKQc KxAʑn*WF_6%k3`&pjZ dCpӪ{鹖kLr>zH? #w04N0 4= 4@;D5O8·M_vAgMj,B+rm0``өrwZ~x p):?[hí)-.[C/C:G&(LcؼKN8+\8ӋgpC5;Ŗw7v)Z3Fo|፰L۵73`j +&vvAzX9,Ur OǴ;woGC>XWWQ-A`7b]~j`FE3]b?a˿m׉~תőwaԗû+ *gPY W Vm 3&>X:\M1m ff5JӎIQ~9ࡇfwH'\_=3{?~7?<.iMr??`q3r[LsXK_[i-m=-oy3[ONB!B=IB!BLB!BGd'B!:"8!B!@{za Z;_bZojP EE4Q\dL>Tj!-5(Eu!HXT2c]+_-\:HxBV_-M!TsdA^wY֓UtyFoǀ1!.8}>>=`l(IC۩92&g$_ a 0 ),fPt'3aV"I) s0~;?YwnJ\K{T7Nxq&.4q,[Sykr8~'95/UdeLºDapH¼ pMDaAҥCCu8 rqk!0V?NM!B$O}fspNm ?p42kͽ%g gGJqP)U?Iֳc^~ۺA3;''|I y<3 ^F3 xcvW'.T- +YРэ=N#hF>MdIsekxeu(v| tʤRaj +&vvA\,_AN X `f Jt7›kÑM}Z{㮣 ĵx,m > 3'7FqFS{cXr})Qu6,k}͑]:kٺC5 V?vю3SSm wio S !B!$N!B!tD&qB!B#2B!BIB!B|:e+=GfIvޝF1{75Mb"(F &u*5搖Gv$ KzRwa/O'g2H^(tZ[MTsdA^wںa:%ya;y4ĵ23ӯgNK}xuEڏL\Iz]2hɵ)J!8>MCLn,^s1 б0'jΒ4XtZI7q"3{$̆Mma0Ľ#3@l"|O#p$棠/ V{v+IYҸ+C&qmj z~ aS -/~CFvlp*C~LRv=-c,#gv4  B{#SW%T 1ʡ)'azzʬ~)IW[u$}Ub3kQ$cc_qL4*(^gYvOπ^R7q}ig$a8&" J⟬U}(<:^l^ 5x(.vj? i yZghc|90qH3̀r:MtLX&', ^Eƽ̪ SnR~]0?Ńi%Q1]ki=dV·M_vAg#h?,LVތ ȋώL''ĵ`3Sj ,`o{>o43? "97nj@qu;XOAՂ~< سj/eM#x@ Nz gb#*aԗû+ IK5¶7VL"Lj[7L$OOH|9s7V`y4E 3 U!nĺ{s ֍v0oVkou?z!25z~aD(3v̾[G#5Άs9Kg`"[~HUۮ707BJۖ=',!ϦIYqW胜N)B!:"8!B! !B!$N!B!tD&qB!B#m0=ɖLK=iD*`ޟ]ܺKa/VZiycyE@£ j=l6]R͑A\{V߽ gjiATpW$L]Ak#úh:gNz$*漞Q!86k/xp{k%ALtvY|{ O<сP0N,L,ݲ2@l" S_X,xTٺq:$ydp+пe3sb?BaVl9{?$3 SJ#er'Q0^^Q2λx`F[^q`kNVKaw}1^wW[7̱qf']A,՟YovS{OPED-BDmȔU >&HrgIXG򴞣e ncqHYO22hpS>'D ݀'+|pdɭskaVT.vj?l>zmb$O}f q7epN~؄gvNz$2 aD"<j hv0.iweiiEnoZXr<_sTjTx T@?_(/r-$O9Df.c/@R8[o98$3 S^(>1L{ǃ#}8Qe%`K0}Tax-|J bp =-'zvẁq?oV8s֓샬]p!#Tows 5;qGC+FsROp ,}~.W^FDŧʇ3k=GfIvޝF1{756?G BH7j%taKK5Gq Z=|. SyNSaAref_ e0 ǿA>LoǙ,Bdgks^[N5חG<[_Fˈ,z=p-&| ׮LwdcsGfCjX~D82Pum/HN}a0YSei3NCEe ŋGKP̀`0f|xچhv+IY+tCNF,OH=`eڝw05BR ٝ2=x*t3ԝhM]m֎d>*6ʁr͑zm^uݹynuI4O+U`Wx24 n΀'ﳸ`Ml> +lIoǙ,B?dw {WfٍKװSy0e{-r6=?熰)GO+ACA\zAh\sdJw xq$FBY9t3$#yZOOu[ۯ<%jx o>Y=Pz:įI G%S`)q⏓oHnXI|`8E01vI:+G3}R'DU¬XB 8]Z),~}H۶H)>0m<|Th`11>aS01>οѭuLX&'L.VJD`)+#=l7 cvW朆A^$6^Yp"~^fŪ{ɑʆM7pRˠ|P B~9ZHKf!_6vo)tC1y O;>3gixr$b8^=8Pr?; 06^&p6c /+vjL+rF= \[L$O%txv>oZ ?%A}PaahڎAyّr 252sd. +8s֓L@~¦[r_z/ؚǩl-U.?- z2% ޵zmb$O}f q7epN~?Lf́?*LOḱ@LL5m3;'g=Ld15*Ԟ!L7M+mA Wiޫ`OU] {f%cFգs6~..G Mx%s`\x1 lQ5GA7PK=k!yZ!2s90RBvuOqxmdf58tt[BՅc$ 3;u&ĵ\H* ~k.5g)c#M3 +q6XHl+94?Ϝ#F<:[vI^MvjL+rF= \[L$O}f 1 /gm Zٷ類?,LM5/D3qf~$3 S`3Sj ,`o{>o43? "97nj@qu;XOAՂ~< سj/4֍ʊvqlI#jR&gw(v| tʤRaj +&vvA\,_AN X `f Jt7›kWg^f`FE3]b?a˿A`7b>AqfdldfdBPFY/4O#T=?Bn0 #O#5Άs9Kg`"[~HUۮ7qfYx~[/eV`4_M}drNB!BLB!BGd'B!:"8!B! !B!ȧSstkdhwjzSJ,V/*"шj$k`_R}oiyD( oG'ŚnU?e1u/l+nWaK–j5 z]x?P5Ijz+lzp 6iY_ gKO0t9c;\h;kcPt~z':KYkSs}nrho}22s`kT "c7H(/:Zp=r͑)*|M eϔi==emLom򔤫-:k l @#l[>S 5߇͏폞 !'ęcc+<Ο鏆pB,+;I0x"#P_K$/$'DDɓFl^ 5x(.vj? i yZgh$KИs?C (SS`Xix@q<4$-!IB\or:ekUoˬꛙpo?ՙ6*eM=>&m@9|b{f=W\N,9t [gگ9* **/篅i=d1|!emWok,R`߇c$w}T\ & ^ԥpt `)m 7!]dm?2NqJ\KO!o4g)c#M3 +q6XHl+92tLlz.n^ ߟn(`CHϵuI^2IgU 3X4X}MAF_ggc^~y@;Dmz'A~ Y-B\oׂq@L%(e$*XCՉ`>U fJV~<4htcϪaӈa ːΑ F*7;SRE@rAy#^nFx3֧f–u{Ǡ*dlA&q-4 ekhO#4LʼnQܳL$郃[ŵΆs9Kg`"[~HUۮ707BJۖ=',!Ͳ Yx~j 6nio S !B!$N!B!tD&qB!B#2B!BIB!B|:e+=GfIvޝF1{75Mb"(F &u*5搖Gv$ KzRYڦH^(tZ[MTsdA^wںa:%ya;y4ĵg ӠWǰn;\u:1K I+pkXj}xuEڏR~;{'nLd%%bR^ϧ(%4AK3x90tx CLAs,N;KNb7jJfk):;<27AR"<%vj$? WBXutJ4K)0i(nƉg CfsRo u:1K9C p xyxepc7xhez^ 1lSt~>N].qo֝hM]4hpX^# ;tD9p>LOrj_D=<*jg({ }T؜mz*VCT8Tv-3-CO nZĩ]p{IuG4O+UMw ~~\.97닡ڮIT8[}yΝ.'/ mNlj@2צ6(ߒ{7ddlhu&9%}GR_9jTj!-5(Eu!Hb{X" QZ |d.li\ .½@ޅ3AutJ4 v* 8ށ_ +l1>t3~]AQ7#tHG>u"7'jaPYZA6Nt]גk1)SCp} Ї܊Yc:7Toܗ~  \q1o[Kp!owgŴl-2(4@t(des/ ޠoȔU >kPH/~ YK򴞞26&wi_>oe@l쫲^OH,vXhm=<7R'7[ZA4Nq=n6g!PA:ˊΰ{x Gԗ2K;# ~7WW6X<@Cc;5V _?#yZgh}h́C!hLg)0g^ 4P< n |Wp,e-o}zI\kUĿ-=Cpo8;VڌJAZ܃?U1bhCBdoYɘQVčVv́s4J٢kJ- o16ݡ/;B^2A2,_âIXU`I&/B-r90RBvJ )m aPȯ󴔵ezI\KO!⧺R)Oz26Ҵ 3'7FqFsϲT:ε.5l !yVnި~)-n[xg4.gm~,e-o2ZqW胜N)B!:"8!B! !B!$N!B!tD&qB!B#m0=ɖLK=iD*`ޟ]ܺKZ=(nMu᢭x R6%ƿCeӵXإֳqFO&qV1<܎^> y4]s}9|ă[>PO~hjbVAovWXG&p a! B-/&˿ y8ˆgaOCY?L; [=3g?*6Lp #mŶn\' Eg{RWw/] 7vubč IJ#er'Q0^^Q2λx`F[\Qt8]*Z!SqPfP_¾l/[ Q-'_ɾ 0[L$OX}W~}f`xb(nX7hܜ[O4gX$|;v ԥjq#8qHfA&qW0KzyxUwug'Y l&&2>yE AGiP 8 aMAqFɠ"0&d%,$ё$餹!T>է36x[W_@!Og?'¿ۜBZ+TŲCr !W@\A6k̑)m u)'azYH$ܟm]ͫLj Ԟv(xz!!֭C[:Ra+ G'>l],ޞ:gM]z{&L5%qf/!xq0yC+[ÌhH0B9oC#eM61Զu>3S5# (V!+ހO.:ä nj̓:8鵅8qHf&T|֩5 {t#sw`cDS p}{P׶@XVx ,8b^eXžেl#@? z 1t \uZ6QMˮk8h!JE]`l7)\I 'ܺg؀V$sf@!펶mC^gNzW2)s`j>-D IDATA H:mii=L`XL< ^j:Y! / 5s_u~h g\ q'8qHfA5X{Wr89AO? ݼpݝbqgt^Υrh[1¾`Vr"غ2jva$PTfii]{ywg/U`yT$CvLbx3[`QKKQ7:0V?ծ%Ap#c$3 )3?/r[}4Zf>}w:edeFu-K-w33^Wu-XB#})~M0NVN4['iN)B!"8!B! !B!h7qhdi#$;K򴞽gfۧ&g=[f -B!B L<#S(ƀs%d37s  f?yxpjUXsoAE>ɏ[nQd"| UWxv:H%piO~vIfPQ~S=kY^6o X`öp:Oxh L 3ݴRX-%5^ R~A7aq9 g.Z'lqWhLѕ2 \1GeYω[ ?'OVEܕ[n/(Gɢb=kIK#xL1Xuf }v;e:`!c&ME0.$Ÿ7ß瀷]Ic/C2C:_YaC z z½V'e,2žTׂťUk'73yAxh'imh ,Wf 7a,GyXх){?G{X8J~.TƏzT3*OU5æZ ;Njeq( M˝pZ:m< |ޥ~2Kv?igtjaAY[KõVif?*ȸ 7ROiM8BX|I\=*A'wƌ^S%?B^{h?z@)]hplhN'0勩poX.sdW 'nৃ9HLf*Wv isQ:>%G,% (^f@Ko/_% 't:tYÉ7@ ݛ=wN*Lq̺rs8,,rBæcACėٸG@t:t::^o̡| 7M+q4Yasb p<~_EǟXe[oet= M Jq1tvh42Nq$&< X3" أ bL_]/+Lj©j6^oþLF)qZt@AF_cj)05&zLӠ _C 3aXSA=@p:nЂFأ/f lv^Ts/_*ם qgibΓCA7)\ '1~9/G3%ÃS? eT#8y>>KSyf_+R]MscjtTL1^ N7`'1Y`8 } ya[Ο-45ނM Kې%,릗*<罠Mj$kK ŐYu!8! 5ei=;Cwk"5wNId{=%9 ;KEtz w:5E *:R;C9q<} K\fk_j=23~߫Dni^!x#A+s{vzo=q/ζ6YKs`t'xl6tC!&/n5eœzB,pse:.3Oo濖=g|tfE<ք*{>{ mdrgIֳ}BAۤg>jHGf?yZ|222HHHX|\Kf{?o:]ߖ)B!BKd'B!"8!B!^ؤ6?1.FI.wi={޷O+Mz6r$N!B!4DG2}$&q(.ƀO%=?bùEtu5o.v}Iq|/mǂ6o~2u'!fu ѐ`s ކFj,l;bmb$O}f:; k%!V?2>^*5uE60utM}=q.̴M&q7 * SkTAP!1&ޯG殟cLj eè1T?:[1?VO/y9*c!PtD~;$O9Df.02T%pj᠛$:1fJʨF&pN懙vn3yl@+˘߬}ݟ9J:}>SFG``!0<Nۺf$yZ3S`4{#(O@nodKaBi9~ ~:4lj@2r$L:!._N;]'')g8"|A,NVO[ԁk✳BeN;8'mE>YQ `JȨ[*sXFصN@B\UHf)z:*<*!n}g G1Q-UmyL>@dldfd s1`>̿N{޻PGaTX22Gv#ٺC%o`Ǚ/+Oغvf ,y}^?`L&c$3sB!BCd'B!"8!B! !B!$N!B!4DN}$&q(.ƀO%=?bùEǵ*aڪck]:~ 1yS x'a]:#Qy?]M)3| )~SM7T\aj4Z‡)`u4J4:'qA=. aAu?6zb{a(q em/ #GgN {g>i?Y|M#q渖2{un7] 6~~G8{㖁EJO~atSA_wO0d seݬəP bc0(7Rt.a 0/zGo[WL$O@&[8Zf0> s|x n43b v!(cat'nVb_z=*,x!pOD}~Vk"A&qP͐}cۘх)Æ?z y| v ΆȽQc| 6( [/p~9SM;4 »Y.sdp|dvzȅm]3m V[沶ԗðNbK9tU{L'g=2G ucS%ӉvO| _i\> Wy~bo'lDVBJ  !W@\A6k̑)m u)'azZ̫Lj ?%)۠Vlc\j-ЎD 7hkX$&~&~IO8*M\Y=ۉ7&u ݛlĥU? Jut}< * 3G&c{8I\yOpO܆GGotgv u(K%s/sd7r`]ka?$_RKa XPgRgEZv^֍%J`[L7M:B>!B! !B!$N!B!4D&qB!B!2B!B Sޢ4-?O֠Vpf#bM\A=S0k%unrĤ:%$KgD[#5O].| )~SMcT\aj4Z‡)ȍoit O@0K\{f>a=yZ '?M{ອ+ւY,?DM4\qo/` onXhK이Zi'(F8gZѲɑ\/`uy F9azNHnYGFHFWSxGZ{6'y<(fO΄m/oA1Ͻ2Gp ^y ;xۺb%y0?eʼng 0#f/ad3< g߁_DTQ[3{'g=7xldo4b2Fwuń5dW6Xr\;Czy5ޭTv =Tb?*垜+yjĥ0p c| 6( [/p~9SM;4 »Y.sdp|d:*r=€޶6I*8l jT]JpwuZ0Kb>uVN+{N{s}?s~tP > ֐I\oN-Mj_: =ۙWCY*N߮36xqΫWy~bo'lDVBJ  !W@\A6k̑)m u)'azYH$ܟm]v~ҥp\~05lC38Z?7~O/ow!5֐ęƘ$AʿppxqB&M~ǂԇXR۳xcRнދcfwr|\[5k}=̈#l64R&P `dCm[{ yZ3AI0X .qf2S<`l8 ~yO6$ (V!K}?s~3g<>ɲuDS$VDme0a\0?\3=Y`c7Ef܆}?$3 | TyxUT}=AŠtp4N*;ͬYpż}OF@(:"Az 1t \u4t /Hͅ_@ Ŧ2W_OXrsq.+,M+䌾J~0U;0\&ݻ1}MgtT Eᄇ!4t 2*ޏY%~W3*^y{HJ^g=+?905C`x$uʹIgi0 ,~G&pMb!3c>C.5O`ʆIğyQyoj|!L 5J>Jǘ5dW^ q`yaD~ȫ(3u<ݙ衝H+K%s/sd7r`]ka?$_RKa v"k-eV_X_XPgYޛ&ghk!7>!B! !B!$N!B!4D&qB!B!2B!B Sޢ4-?O֠Vpf#bM\A=S0k%unrĤ:%PqS b8 m r=HL5R#s j  7MyNЩ7D>ݏ;|h-3] wÂDS=-mC~0m2tgۯ| z tN~u ?DM4[qo/NR-Ɖ@ɑ\/`uy F9azNHnYGFHFWSxG=k)Wgzsu`G{'=d@wxr&mxy3 ~92DƀnK0(,%/!//N?a IDAT3:-m<6 7Œ]XɆ9ox)K!qTX4}^~^^ natPom#}P|Z'ZA&qu]oze.7 s>WJj7~0УO.CXɹWfH\ > g171 S &1]'oCG#$vܥi]w\tm~& 8 zۺf$yê8XsZf='=Ga,nC%! |AV@nٰ(Keȭ_̇ <ۂw%\Z6E˧q%>odנj"!lKSڗB%{9ztvfpPv(ķƌ ^rd d,\Dpiڀ2G(׶AL_(,u$Oi)3~05lSl^X ގBr-@B"8 `{8,] ~.GLmiiNęƘ$AʿppxqB&M~ǂԇXR۳xcRt ѐ`s ކFj,l;bmb$O?2>^*ym0g<>ɺ۵8S5 L gς1oɆIJHh[K'dw+R|nj{0.,`1珛"3^nþu*`<<*> ɑYpż}OF@(:"^zẒCbӲq ,9m(Ӭ- 1t \2=k=TX@j.*ZU4Fwȑ9-8!ĝ&J~0ጞӆ:~oҽbL_3"̃S](J 'YQ `JȨe[*sXFصN@BR+QY7,N ,dnYhw |SBdͅ9ҿl]Kbx3[`Qxo-L[ \ AGx2ZM}I\{1ĵWٟyX#pp8̳}TBY*,c}#l] !yZ k7\n`fg:˖=k?,,ղ Ƌ שFAj] ruJ!B! !B!$N!B!4D&qB!B!2B!B S֣~\kfgD1pݾDǷr{軜'1)+G1p7Fk;4,;G0avu530~ B@-߃T,92` >VaWvI9y@t?s?ĵgS'pشۺb-X~0m2tgPRg77,dm>N ɑ4{f((3b`RxFuZ07xldo4e0S8(pέz6{'.$AL:1:UVJRoNjĥ0p~ذc >7 @>.从FHN5K2f̑>M 8 zۺf$yê8XsO>y6l2V+ւUºX؞d>D(<״dmv?N}Iο/eg;A|nō&gS>C=ڵA3 c! (K;|-925@ bBa0$#yZ2 s`kX8.$Z=6Ɖ;A283nKo>v'<_dl'ޘԁ<#toz>Վl~dp%X;NisCl_3! 3 X4wPHֳtwL,KCF`3fY Ô (V!}%{`] iL]7OIRa XstnGPAՇأĘx:GW[WFإr| A'xz9\kQ m#c!yZ!2s0.UÈu CbS/!N;ާY2'0>:t]Uַ̹NDvڅpC:LS CQeoVϜw% Y`lөA Of#eL͇E0r0Im]3m@~ $3 G0^̜WKHKz`pЪA_멞|9gʜvqr/NT7F #fE*'*+!YKeraZH*u4J4K񆘅 WP q;3]<:͈Ol GmWL͇-Թ ! (*Mz]I\=Nn gĖƞpp86i=½2wv’9֗99.ֵ/f~;x^yֵОh;4q=h̴֓OB!B IB!BhLB!BCd'B!"8!B!:e=*ǥvi~F GKt|[.׹yRrx׻2$KgD[#5Ozq r=HL5R#s j (<'"a7fZf@&zZچ`d ; vT~&qWh^$-v4#@OؓLgp-e ]98+ӗ0x$ G=@C7+wxr&mxy3 ~92DƀnK0(,%/!//N3:-m<6 7Œ]XɆ5%3s`LkL'g5 u5i]G3FjJi[ͩP͐}c[:2}Hi@]ؚ~GCIjqwer#ӵ}$ӷs3@. mii`:HέaBkj .`YŶ hBfROz]23sR7pWq'o׍Qot+h{Ƀ?6u"+G}pߌ^.W\ȔS~6 E:i=-e&{꟒Ԕm +6۱p]H.hKC5ʴ/I G%3CxoxqƒJ6ovI3B:uj!Ęٝܺ"Wkv ѐ`s ކFj,l;bmb$O?2>^*ym0g<>ɺ۵6s}Zp;oH|~$A u4{:.֩5MVzUT}=LJml㶻s1* ӹJN7m3+<jp12Ge,b_CP wCV2ش FS`oC鏰< fmlfuI"δhy2Nq$]|m. aEΝr w%m E O*V|bo 7\w泜o]qa9Y`BH'0f6R|8Z#CÃӶ6IJfIRR=OeF]۠+o@ʛy!+d T h2Nq$yd 7/:>Vn<> Lfe}(XUEu%dԜ2iaa:VN:_ IeFIf)z:*<*!ndf2!L ٺ-2IYq?hLq"uK8#4!B! !B!$N!B!4D&qB!B!2B!B S֣~\kfgD1pݾDǷr軜'1)+G1p7F;OºtF5^' /P 1t?&Ke5FCUpx+|ܨ6I9y@t?s?ĵgS'pشۺb-X~0m2tgPRg77,O콟;i?If'GĢIMH>%$C\K:tڎni=} s=GpztOؓ$ _OH\3_Tǝ ]7flFӵ%:O4։~32B"z^mr#SZO k /ASN:-H?fۺ&-^X ގBrq~05l܃ٟ,[df7qfߗ޾}/Nx\N1yFޮy;3[w@ت]aF4$df2Z&jۺzvNepI2g<>-)PBPWM3;'g=Ld ~J=p Tæs+=*> 92Ww*}Štp4N*;ǣͬYpż}OF@(:"Az 1t \uGFK \}q ,Q\>sq샜WY9U)pWNPNxBC:)xp*a(043 ,Q<ս $f ó}L =+?905C`x$uʹIgi0 ,~G&pM«k !+d$xi̫d`q.x3s^-!/롂C~zשr~7`,X(g7+#fE*'*+!YKeraZH*u4J4K񆘅 WP q;3]<:͈Ol GmWL͇-Թ ! (jj=.$'R3bKcS88g^D|j)nOY*,c}#l] !yZ k7\ň'l] 73[`AדIYO2>9O!B!4D&qB!B!2B!B IB!BhLB!BCڥQ.}/m\.ILJQ \z*.>@6stA_ \40~ B@-߃TӍ--92` >Va r$yzC8ZLݰ TOKкL ]=A1ٽ~8cAS23ֳE˧q%>}r$.K,Z{t=QbO2=Ξ٫3pKw,ϏhgOzȀb+L(1f)sd:0a+QYJ L_C^-_h-3gιu>7v;M[h1s}+rS<'}xL5N[ip3**V^jy Nm6_át.U,hhT<Ψ50#;-ᣂdXgax?̩ˏT9ODZbZ,. =w=;d&wC^w򺓗w6+pZnHp m'oׅXV`68$)90oyKTΥJ w>FτaPlX85S:6iƪv[r+U"Ѧ5FM|P' O۹ӹdC<~<Î;uP]@xapG[/үfUX^l ^ |`X+KQOClu(HjPtwAY}`»._w~~ |EՙvVtnuL|'i,Ё3&Z7{pqCF,i21zxyHKQ~>ʷc$l0m/fĥX: ?ns3λԝRDDDDD$D3w+\EDDDD$Us{'"""""BtM]K8uha}hK g~SMWOvWj/.Xʘ!)t|[x;|>ؑkPˋ[.{[To7]ͪoujZVe47A^u9o肥(է,m =uymkᨪ+@ ĬN'sG]5C߫iUpyag$~[y#\}0k8!e 7TEWK\8[bPѨIDATIF#i4b}&9N'IGQE|nbw6i-y>$~*շö߭pоrez >;ݣM9;KQOCp l\t/um€P 8^ Ĭ,z^A%pv B 9pvn$D;pvtA?!_-qccrܳ*>(%j˳Hk{z;MKi4m;Y$nܵH/| :K/[4%Ow}8:{ 0sfKtRӘFSK}7<6+Rҳ3/VG6*O~ش/+uA}P=vy"\zqOARFB\j<>-r|g[hǓf1nLcS_hz&/\ۅ)E. v{ޭ  SkwU`S0oԬ.)էsΚã.ISၻaɆe`{ZAb|4|??v*y.W50=dWɰR^U7T"nl Z'gwΩ 4c\ㅉsik j{hY^А6cgsovW & ;l.v]CȨ>+uvW0flJ`33W+@{ .j|x|x=4 N_?O8側 ^ CaipiëT3w2ݝ29TIYcziNabws=ΝN.śvpvNbmB>n1ʻ׀Zew}rAڰ(iI=O*DU35`X֟L5iXZ4?Ì_mK8NO8OLxN!e i) ]'@כk?C ާ?;dM6+нy]3dtY:&V0H@/Ob|r;79 N ߮ mpI*7Sr`D,5>+u9c/o]`Qg"P5)]5AA!P 當4xjCǦPJ,t+py?@3wjkbzHc|6lŠ)편Q,d2{<2Ãgđwipp-2igc-e;3<Giȕ i^ j;N3w\jo; qJf&x5_ BﻠgMPV~m')@Vc>& OV~WYR0c0-*?'N^ LwLuq%?CcL~چ1XƲ 8cV.$v-/$|;a=KqyW&%TmF~o` |;I~: YRfg2OhudbEDDDDD,D3D%&vbN\SHc'sDi.YN&"""""5q7& UZ?`^ze}s` vTQR΢fe5Yhh3竩ΜVq\ gQvTgI"ܛD+9;V-qJMUdҦa+oϊ](^ (܋NYBAze\b~e(^)Cj Z8r\ρTgo\AP,YK ~7 `x? pDaL]u(\)CϤ X6 KqKJ&70u~n' ffX,vfJ;>ʺ LtclŊl]Ș3*3i4`$_̂Xh&n?! n9J0NU7?fs~UY ynM: ޽0A}sgᄠ6|RY#R:fZ-X@8.wܬU.dŸo_I  R) z26<ƟmR˻d<}LX> aǦ୹!to;п 0a nn_ëtee7qX U=acFqf҂yn6|=N> τe3L CƧrp O zO@b1(#/^GʢhKAjŝ}qK"22l"&}|?MVwLW8}r/>[[=׹`,xu*(o8F8iYi7`rv8y|+ ;^>=Ndؒ^?>ӺdK{䛗i2m xiXob~E0+E-d) n(ɇ;߆JVOzm0YϞ h?/??zup6<; ,SG̭e3*W,ҁP3qe5Nv{Q5K*5z;+B;LcZsg)^=UɮₒCu4<.Y΄K'3Ys ]a>CqՠVvlSܵ-3W\#z Z]tR=w?w. z`q.\WFó3`PX()౧`ș0Cؓmq!?mQR5լkՔ6*Ň7S2iYw|% V\ 6tOг㩉9&dӬ֛ ),yVƅd/{#pUOh n p0<8xB#ާg*B+*tr ]D \f%l{t{([ o@pQ& #§sߎxÈQЩ &-wẂJE:l^ ZÉ߲58OҐ~3,߲eo2u7SQB@VuU4@ ܮx}h ̊F=F2Xn3]TA:'7˪_;SS]LjUv2VYGCNw!bW YVVpuVЩg[]Nm_nSܞ/;_`,rkz)[1LI2VugZGN8"'ÿgx :&b}D#oZƆ"Ɵ%ѨP;?IpUaS'!*\F(t4(G)%toFu j/=ap'Phv>6BLط ]UC`"2ٽ/ x:=)vwӲ=Nޜ! OπI•ma$=uV9Mѳoِ[#;~| #/8:U3ǿN6{f6^" ӚrōvAsA ,ZMufMnn4X0f[X=崇Z0ҿ9=Z5KYݕMwS9.ۡ̌%L_ gEͯx~q)EPu+pMwg|l鸨ֱ/43Bΐ_бv^ voM^i/q͖P&[B5[Z=,^k}Ε vc'-tE4hBƗ۳ln V܆kLt=<ñOýCpɕ x5\\Х<6nsqB^0q8 @*ݛٻu>ԚQsW J63{5<2jauf\s- Rx 3i9QriCt&3Ի7U&ͷ]Ug<4n˦_q p{sy0u&p0~L|YpQ_5q%w|ErGVw,ǕO_6͕aΘŬN/aϹ盛,?3Xm>.o Sq' ~ks<{/?Oǻgox# % ^y ?wxb7>زV?SvEVyzm#iތ rZ[a+ ՙs3TgΩΜS9:sNu9Yu֍YftRkNVVZ[n`/k(Ǿ ZI?uTob5la| .YPM[)$ c̮S `F7gF]-&S7Ce*Ti箕Vw4*ؙ=N5c4<4;NZmo\ZZBٿMHCu4Ri{? -V4C0ii 7j= rèFj"^?]VxS708?]'˦n 7{ pVaάNk0gV~@ެ ¸"ZnE BYx 6Ϊj\DDDDD3VhkBP2x~ؙv,T3k]ju \VB`` &iڌ~4bh? u"""""LW6 0^YKQ#hl5;&n!\f.0q,ƃEDDDDD9 qeFI ẐY"ne#?<$hh;s38nԂBݍ2ܛ(ĉXNx$̅ rN[#bn pFvaoG\V6jdht"""""I+ZPjhaf叉HBU Ѻ( WY` lu f扈}Fa* ”Y ެ?پ8 oa=;!IX \?xj[ <꺶ht'"""""XbEҭ*ą pNFrxN\rlc4ƍB\8M!NDDDD$0geN v։HCYp5. n3 px8rVDDDDD9.v\!.p,tEXtCreation Timet2.listopadu2021,08:03:37} IDATxwx&  ^JP"?Dµz!R"*E^\DD@AP tHvw~vgKd7y9SΜ9;33 B!B!B!B!B!B!B!B!B!B!/(λB!T_gkB!er cB!e_re9 *yB!B2ܕ@K!BQ@B!Bx-w:_X!B!|2uJ+B!BZϼ*ǝrw%B!?;`ry#xq:\]gB!BOT<y2)ߙHP'B!D`r&prtc i !B!-jLW`큜'WioO{>!B!Dx*xt汩, 4iL#B!({Jۂjv ]p.mP5lsI !Bgg{s4hsfzGޭ8gүtWΙ͙:kZZB!Sߜies&sW . Hgo^򳵠Nvh]!Bw  ]N϶X|7es3A;WHjfk55N!BQzmגV2r%*, 2j7JG @ m l}noB!Bƙkua23}@z%קl-xk;SZc+su\|||~apBBB^ !B!lp̙?Ϟ= ȷ3@lĹ5δ*iMkK;Zߊ_-֬Yx zfggc2!B!Dy뉈 ??Iǎp}K[/4>c]k$?#xgmV[϶^:W`h%B!i&Lo-x^lR̝l9vS[psssݘg!B!D9t98Eݙn^Y 4pt׵ѣGIOOХ %@||<5j@Q)B!0`uVE\Q2pdVrMN,*sIw]5=Jhh(> Uu5OfѢE<u&t֯_ѣGIJJrB!,@ZkX.+qq6 kտԑ.8{,&??lk[ff&yyy?7 4nܘիWK'B!iŀZOo1eV2`ٻcG hٚޑMg~ G8o(D>ΉB!'VP)pR|C^@HZKspP Α:G{J W](lvI!B!d4b@@J7^ւĹ9{kJNhuWB!k=ҌFۗm[,SG 1l [wDLZ[۸R !BQxGeo@[Z0gm>ЎU J klI˨rX!B!A+p$q+&6kWXB!oٿ?z r}ѲeKoީy֭[Gj<#FOVK^̣\7:T-quԱ;Mjj3Bp5/^ѕ\oePO/3 zG L9ؕ|SnهBxߌ3Xhaaa4iȎ;xg>|8{֝͒%K'8XL~8(V|J[\QoKx8gݑS,4G:!Qsj,Y'ΓK8ѩ}ף>GpycVDTm@HUXh-Z?:u_|YfѤI5j׭[疕 u2{BGcU]knSAXEǺSZv*')8S}U'+S;!;_^؛̧8~ A-TzǺphW_/D9h"BCCypL0!CtRq'OYfNͳm۶rӝd2Q^=i;N:nݚ>X2339r$6lpe=!9ኹ;uAupխTl*tBrn=W˙Ks"u=SQ#sr,ߖ,ߕE|ģ=?QM\~t?/Z@(j. VEt1ɴ3[k-C3煷Yu҄.4|vsސDP )Zaߏv'J#7a= 5;^fc~ kbDe($OeLTxˣc!3f~džg1SQ',k!58`UWNԎMW/nq4h@LLuiժUFڵc槟~rj(l+1wmnݺlܸA_( f׮]/3,Lj\8KnΒ'[lq%0e̙36m4cƌa^ʑ"Й oESFU"ϧckL͌9I>¾?֛I4}n:wIn?4mHP6mΆtmʹ__gU7$P^G8[,?}FTwt*Sn4w"5=F0ظt\^0 MfĆ:WȂILn/Jss`/¸!:^KF<߹h kӨAUfYlr ϓkFN~N\-}J=o|@gs?eY8LB^:M{8L*.R&ЄYJkvg,,,$22ct߿qn(;w.?{eРA(ž={^:+7 Rv ⬵92gnJ.<@N8!D9<& '3\C'щ'?mKHXԽ4hSR> 8PCj\Ǧ,ж+c0gk9Sf1Y?cԈOٳt9["#Yz7ŧ/]=͓-6]yBxʦqL̡;^b0q"C՘ywWz䇼=կ2d1V'YٌN7xhO'wY|z~Ȥ{jReU0|(bySV~SksHMg8(:zz RBB0=@2vvC7f˖-9rkvɓ'i׮Irӝқ?@jժ|T^:lg:s%HJu}MyӵI'}- "5'%hOYx罅l8pB,3btnKOػo $oF2]vD+PMYx/YRI?EDg:¡g"}mBEs]=SMXdgӜ8eiBxHZf1Ҏ 74 GAb uGq(#!]%] PctaW*a4] 3XMJhRj>g.FP3J.~ =MX>y?}{,`..7C `ƍ <ԭ[t,ڶm'OFUUzgggl2\r#P•!!! WW2ְv'J[]*u,^t@獻Sں2͙.nWN]hY2N9&Lz9P!ys&+q/yV^w gU. x\ܿQӵ]J!ֲ&(&_"ó{3i}F@G1)k&S_Ʌ8+ZaQK.Ṣ`X*)%X4iudkJP39u3 lOr C}mgB|j|?7r I./:~ncƌ<$$$`69wܕi6nHXXn_ݺuUSސΠA8pTx͛GBB+u+VV|صؕNi$VۚϯT{GN9ƃ#^ù}+ON0ѨqN16Wlڒ?n!o.(:HG}.ҳs9۷Z԰;|edIl!PpgisXcs?gr⸞{Ћ]i0_x?7`pJe\./Hpqy .4i²eصkݻӫW/6ooܹs8q"ZrOeK.+f> {3ѴşW~Is T%*bPaWkYŴdA+%%jPRBf͚Enn.&L`ҤIhmvjڵkmCڮ]hԨVy1tPWPHg+2oW,n 6wvB f9L>SDW=Gy&X[Ic{37ҵMU!>!^ɖԝT+W5NDOƵPiϞX?##'k7GTG+N=?Sg_gLLMΊqElsJMyϣ<3h#.+%؊T,Qkk?+FZt˾뤙:#;E5uT6~ qE\\SNeرsϹ5ڢ$$$WZVL h뙭q6ֵl:qz+޴1bϟ.s-w ̙3\:ܡx"pܳ^׹ġSό9UP"JPBB^%7YW Lӹloθq'&& eǏwoYYYN~z Cl{7*Pݭ['u7fwg8bj兕a k_ P6ߣ8Χ/>q`OӜy6|jI ]CRƅmPw_`f$Ac^S!w_AXt ?ZΤ}ZiWw欂 (Jpg=Ӣfu Nk}gZ w?`dh@!zve-0zԯ~q_!O&u,0n?+axuTYÿ\ nJv3y8iiB!MO3uLx~]Ch(ШDlTy!OW%f8 U צ0MQKX[Q魐u+Pu'.X /Bc4᛹z$lL㧴z%1fQP&TȇKj)ج/Z^̘\1Ѿn`Х#0o Ȧ+'B*’ =`>瞄R.CiWoÞFT9[2(]}i4?ۯ$JE-R }+ Vͧ 4K !eB*uԢ{V^=Ht#$ρ8Ƶ|*<BB E7Z9p*Cɢ'DS.q0sg5"ds{?2ς5PuݹCioANWoJ=Sa; P#,TR _l'xc2 <<~qgcɍ !~FUؼc޳"4`1¶~C08r󩵐ɑSk}9 @pHh `Y@+TShh(Eжė9}6Ӣ_Ӡs<|;')q]{Uj&~bXK0b\mCP-ܭ u /PCW"Ge%N!t`H1n9v=b>\X / Fb:&0?3?rAޏA=(`d?p"|e0bD(pv5qr< _eIp-=JEhMkzjXѳ`S`xp2vipQxA#^Zߕ ;  3`_ٝy:hZbesuVuV^z+ZT5uZ.B!GC nzN+fªR{طگG͐!CؼyYYY1}u\z|%aq'B!\aS`uG,g@ݾP&AB!pR<<u>(|([B!Ba !B!/>bӗ%N!Bwj42vco N!BWtU`pOc_7$B!B:  @G)Q{MB! kpz1_gʻ%N!B? a_p< GY !B!_ :B!BoW5A\ />NŽ<e/d?7Γ2=N)B!~$`ZB! L !B! N!B!qB!BG8!B!ߐNjIKyv|74S:lCAe-2:; }dGO'yݰYe1'ԥwH efolyiyڅc ^ɸ zmRΓ2M8g™6.1O|цM:"lG70z?SeuL{iuj"773Hyʱ)^fۧ=@/3O9@{Iy:O6 Jx!>[V=`{2Y,*oί{yo,zU|V*M_Ύf."7c5]1!f^`5<~- ydFn?~aџX:Jdelݼ=1PI?·d<6WRfy<,+ؼioy9pGW,] wO' mx+kس .<̒yu} ;v,c;]RJTi2Rg&L<\7:{=Oڱ~N?nG3'Fmp?OH>ySͼhinjL~[XrEθr"p7r\TKٲf5_Y;\cn^l# Ry DѦ_U!tlz74Ƹ%-89uUc}K0¸5Y'vbVS"Ûh٦7Ly53S C:J[^Q!('bWZA9Lx5:0T6 fRlktu+ (x muթ>:mIwի3í4B[y(ͼɓ$4m| nMsH-U}daZ6?{wJ&=h5&\W)|CM.0xaޜr픧ߗwڴ+;o?4m҃&n5Y%Ԯ]b1yP <Ky)3W~}#;yYZ@nj4ύӻVƀitK nj9wrN#nԉqҹ+L#)3!A}izTU ΢=AC]se`TjJ*2pb,3Ib_6 tA|*PL@,w\0H71-my? ɭQ{mhtFE)1kEU5Ӧ_=|}ZKc  Wx$%{.оI3/S+`iF7TJQ.s>ҐS鳃4 QI}'ߗw rq;IJyI[ur0NJ|v:9$1^^lmHOzqv^4]<MMv P.Tt:\dҡGskyq\tiǒ8UMV-T_ʬ JAs d22Dꤋ, "' q!O1U GⵣBb#NeL1a՛P>`.\&UhRP@)㛙:0sfƈIWcF٬RjE`A}5[h.CH?w5_. 0(fȋ.1 dZWrq'M {?NaTV f9jⲰQ(WڤvFY05p6 mÏYW{ͻ1nf{糗5=t1f޴OlU7a@g$2?=sF.\ݷNcԳUy{n|m5!W봍4@Gʓ3`fѿ թ?=#/qpeEd^#y 2sQ^ z\}Ҿ UX:C#W=Μur_e)T,Cg 1as KP&֬aLqbs2t͗ϦG,}S^?y1HdɉtޙW9๦GUʋ'Rժ\RZ\gy c1 rq; HyZU%㞘8e Գo,W1~D:O¶6Yv>1+5o+!p|*Yޱ0S#tq /o`C_}fXg3ӈV?OI SiYHT#'eLȮ%ie-D6E֐Fj~R`ּݜN+5>M^%f! G>;^qKm^_l]θQ|JS>m7&.|<%9_dQf`B* FwAIR}odnOK%z n[fsY?%P@ʋވhQ,b i>Va6b-ՋrkȴQb;msTT]66Uf1A|O{l池 qum9XyKg2m 8s8hR9yw=Cof}!B&vOl#]ݸ^.o*|t'&4~:m+w͇u3=5~ )F0z)[ϋn+d/,gH M@-?n)%VZTS>ꄃjGRqjq$a~(\ׁ@',U ZLu-Џ:ؤ%R8ʩݨԋz}4i j:Q%)&^zŪj1ǿpgî=hD`gG81zvzFf+%}[é#|0ONá}`{d·#`*01ȘFv4P\OXg w*hDZ۩gro~p'-q.Uo1`{s҈B95Qj0(hŒZ T 0H},[L@d[C6f[txoBp~СcieV>uE|L` hvsu9gD>0gѿvвl Zh_w\Qf2CvU8oNfkԳ89?NH*u> HaVOdRP.R7<*cݖI=&`癌cQ Jwt@ht:ΧjbY'QY /̃7 FZZ5|NU U~%?}Tvy[2 X Lgؾiȱο;H g>70c7f1TH7s0^'/~^օ*~SG7Ua.= %~ x:? mU ςa# R( 2ڬL L~{ࣝ˒c]@;Iĕzag=}zo>{FSyk!CS(5R87+h8[;/Uc>cf@8 Li*0e,s`7)o^@GݺrQf?a2S!#|L0ܜ6ȱHdI`ԉv5 /o0D*\$w  E޽)CpOVul @h2tN PƇʇ%~@ϋ͊[$vvE iaUOXUfatBAd8fǼZ'zmI|R5濿 ǫl3rK%F< 8x /6&/;چ a0Qx?`bѼtUΎ m0zŻVV ߘQyUzt?q={egPUػگgrcrlJ|g-M2X,? 물V޵^7jdE)n {\dY'^R 2 ?,֯_+F~!Cyfdees&//0Ö25NS !B!? N!B!qB!BG&B!Bq׶~ˇ/IKB!Bi!*7;h3rj!ZǀZi-ylV49K:Ģ [nwnEV70r5B!e+<h2[ SaΎ[.CC(P /[n[Uiճ@/0|0 ۿ%_g zdYgت?^~ uYjzvIoHgAW39;mhcr3rn\RC},^a;iTr'͒,bcZ IIGGCcv8 SW?ԃ\boNUg-t%STk+0d['X-lYJM& *8VAaprq+]eh_m4X}4|;|1W?,G_? SϗpirVOdR۷1JFΎy}΢]:'I,Ȍ\ $W,78k:'KygF t &0sDcwL&s jGysL/)3X/ab8eBCORK[um^EnCiD׳' W?W^㝾ʔpqO3bܞľ<giZ,q \kYkKA͏/ }BX`_$pAf4P >2n](3t=a$8Y ?增0Wx<ݪS_HwJG):ќÊ8ZҲI4A&20vLH@Qec%6 ZAq !:} @h2tN }+L+J+_?)q0v|߽DPΟHKq!q9Tm`{=Y߶<3 6wz?ѝG׺R3%Ӈ>by+VV'<H0|R?!΀e Uf\ Kއ»A> }1߲WtpgG˄W[]Sw*wdYe:+$ԁ/o:Y(8k%>KQXXboqs(\UV%i;?'JWfya_lWL\f΅n;׳wl=^\B!BG$B!B?"AB!B B!H'B!~ޝRO㛎]ڙO]y[nsf4Ǵfү!<7C_6lݹqRdѭ+f{x$|iQMa`-KvB`phjw %AaP!R_TS$G+>E%کK^`;C ۿٿRJNzEj՗@RY@ aX_6 GV'?CEZw1Q±ۤ_kLcΏ1R][Y#O0#ۍZIhh;=#, iTb1/]Rzrk2qOWjg>`{d·#`*IA` F  CH;ieԑ AA<5ͅ#y4a|ڃt{N^ w@piI~RϴhA4Ka869yPn[kppH=^ }Dۨ~OUX5(uRfqZ ԙ>ܐE{u׶UϢ)o H_sgզpn-t%S6|} |4'PM=p^!/[TpNChv2ͽO@ieMgŸ'J΢m _uNS/4Q a!Np3-ZuPQ0/zO<8 d:$քA^"E=ZwNk>Q±ۤC ⴘE'( uX;&@%mLR#~]nxU\Ǻ-?zx?LH'AAs>QzɽqXsL;M,Ȍ\ăN#M~eAEy6T 6(=99˹ Lgؾh i@(RGꋾ9 v ^LSԧᯋEتHx&xX5( Rf^B?)}J:tՎ ^_SfHM 6cxoaǙO^Xs;9(6_Ӫvrz^X4ܪ㵋J+`,9A8r "MwqQ_gDd !L\Mͥ[UeW͐RKd>nM4CL%m5,33s)pCn," 1#Ћ̼yy>~f>s~`yzp1W:^ < OgmV?gZ4RU8/U ?xÄ9,/軎Dk<7c'gaHrfdwM][.TK,, (6]//tq~ɃrPڕT}ܭpI0bcLi1SL~F1{,wT>q1 YhAFk|7M~;^s>ێ)G+7 Vt\k_ N#ThSlx _䌉x&뱮3c 9s 2/fQh;/lcIz. %4*};00Ƌ [3 |ݔ+D; }S !9?{џ-w7:x|6Ú$h p$H{b I0qB`8|*zÁ7L! d} 9xAHdjg]τua3cm 9s N7S3cqSE(f]4WӁ2#I5qj!+Vj`Ϣ^O,kf'}Nێ¸`HP®ePw7ZB 60k-&G(͇OCzM#h<_zR6A|j 1qLϴmU?qS`0A9zU뻶xbW}co0q35˰S+s}MoQk믪o)JյnQ'G#6NR$7sM{Ά˜<ߌ;jSXXHzz:qqq30_AʾB!BaOd'B!vD&qB!BaGd'B!vD&qB!BaGnPq.s,u^[yڢނ4zTÊ0p[}'$b@Zq!`0!~&Œf&|[XģL.s["GC[OP!y#Wk`\$x@,| 3-GȧCv`! 9\UH+v@д;mEw[;ݩrv>ʘ,t'@o!pi؝Sw!„nM@⽳ʙ3V9z>&M.^ V;ͫ)yg&adSXa_c8kV"2A:_sf;Ԣ4^,pU[dg(=ƖvLOY]Lމra9[zՄ[bw}CY x-KZpVS9v15qp׊93Kr|^0'=cX0-AqQpb4 &Mu(0QX Yjwky6\ˡe$-> 糠vEDC[v9* rJ Y2pSWS\9o+.-sYY<.Pm^ ^&gݡ2Ƶ+Gaҥ{ý[__sn> @l )9fʃC PB#Z9s*Gϧzo+πSp(n:Q_uߤB{,f2!b9f1ds743smgڷe^t~q;O\`B8sVn[CXy>j%nB"g,鋙{*CvcOKs!>А &$d?H\_FRvŏ [/sRs'۵e<ŁR#5Q 0j8!7F0 kǜn9|>K!! >G0JeX&@iȁFЭ9xAHdf1VnK~o!M.igF+y6]g[ޗ vU6vTH+ꉛc68ݙ8%u $?PcYt+i %yeTGjU76N #d~JqQ Yԋ7UWiNz 3`h_0a!:m;b?l^ ^#A ABhŜIR ŭ] ^}-K@B&OU?qS`0A9zU뻶uDbyqf5XbHiVU<8z!}I&lӺlZLXluVuV6G(URu0bDmk~@:Kݒ|A ѷ>I|B"-/X2~^y gj/JjY=.9zZa6ZC"!R,| 3-GȧCv`6@s03V2iw? xb|"fV\!c;.[ :& 7g֎Sݵ̴w7-(ohڔ).G[4ͱ\;ko1kh)7fGduc [_XPDԻ鸧,~D7~{v1NO1_vesE@Z8b)LoaK05:EBbLR ?0q UR44yB=w1VoN ʟ`PKFDB{?չ> X FkvPf8]+/NL5g^Oaxu YF?kSh`lj˅}pI)5 OxE!VNw*];c=3+~_{@w]xjb]ͮƯ~ap!"PO)/@f`39 g3*saܳLY֎SݵĴ-Ly/:Ch믱_4gm #wX.MTdys%!}KзM wT*?'ؖ+\@1Ӆ1KwWrWj*S}awvLi ޅP  A^>4FڊB+gΜ[T@;4}bCܻ0cxYTN/,ZL"6ߧ 6Mb4#m R[Yva)uќ?@x6ATh}l'8 Ěe{{$sW]Lމra5A;_S\M5.p?eqpNՎ+Cj.1ʼ"bLR6zp1W:^ < OTǂW{xX*ETPakGa"(P!@[qjl̼Gm01LYUQC;?m)ÎB (dmM]OrYt4w\egL@z1xOmw׮eF-sI0bcLi1SL~F1g@+gΜ[T/Bx8|  " N#ThSlx _ #D5 >曟R`sfΣ]vW/n} YgjMVsU[t%}1v~Ae(Tn ^؂uIz.ć2 bh_ʮa%z^ 8a$vCY(px^ FĹ|VQ0 1g&y[RHH@#F xmh]g-XW,6:+:+ʣ_USR`:16յO^?G mdnI>og/웴ͫ Rׅ1y;v,,tf?ajm&+7>ϱ3R!B!LB!Ž$N!B!LB!Ž$N!B!-1*n%tŔk:O7RVm~VD f[$>!r&e L0G]'吼Vm5 A0.BA-?ͷ Ҋ93Kr|x@N0ihw|lq;j?C; `(v񣠍'(&H7@ ~= byaf2io[psf8]+/Lyw@pP/!ڂAzO#:V_;MsIU:+?󸑤dzZQφz;bdvF ED{lנk4sXG)y(X9:“`X. n`pi ̀>3`EXQV^$/u = 3mx0T'CL}BAB9Yaj, HHMY3£?Y;Nv/ȋ/43/BRXx|4 ?_Rq ^ ^'b<'RA sY_ @zmoǩ1vkH3A^ddWE}l~p; aLn+7u5?ueё ޽r2?#2{ئh_ dnB | .8SZs̔>ે,AF̙ryUO"_ߎW)çPt述$< I*,?UYN!͆e2B\sc,nh8g<>Θݵow˼|/ IDATv;*pv;T}k+O:c$Βi?JPCD}%p0[>k$Z#p{(_<Djbjχp'p qlŜVs|BB y~#Nm9&| z#o"Ap"|c Ȍ {bn`wq:?mE>|ڠg_o؞`j: =;iǜn9B>X2 {-\~ap!"PO)/@f`39 g3*saܳLY֎SݵĴ-Ly/:Cŧ <>NSeH;9G[4ͱ\ iKCϡoTN":-W4veuw?}1YƓxFǗe CӰ;K;4B(? /N#̭3g˭r|*M >1!]1 ,*w&`oPWS `_MȦr[þq֦ݭEXeʃlu4-:>xmK~:ƟK;'G[E&qH{mlg i5(ܜR![l5vuϓ|9]azH(A ;,sjbj.1 sfԃa+O(z{%0a'ZxiLk+P|a~ 4ொksZn-/†+v9E'|WԲ /ph_#`vl8m Y2pSWS\9o+.-sY:Ha})\g0;I6-%?.oO%gJk|e3B>Ј9sh̙r=Eȿ<ROTDaIx| UX~B8 Cd|Y py}1ky*1wT>q1 Yv/V]}qU[L%}1v~Ae(Tn ^؂uIz.ć2 b @y ]Tf˝pm͐Pǎr+<}N#| zQ0 1g&y[RHH@#F xmog/웴ͫ Rׅ1y;v,,tf?ajm&+7>ϱ3R!B!LB!Ž$N!B!LB!Ž$N!B!-1*n%tŔk:O7^[Yq[F# |XՃn o}DZ,1^,-03'evnVRy.X] r47ªmp!EB7'YAZ1g&y[Oh < -nGm`hgpU!ye@0~;`(TD 3/̬BvX\xu0M0~ 3nάVkři3.n%a5W[Pz;Ti_ʣ`?V/^k.8zi.8$N*fyHR=-^(giGuU2`sz#"M=pmpPsxkеb9u,ߣ])MU(mp+`lvRNۣ DoJCv 42ht>o؞`j: =;iǜn9B>X2 {-\~ap!"PO)/@f`39 g3*saܳLY֎SݵĴ-Ly/:Cŧ <>NSWx66^/4G[4ͱ\ YXKCϡoTN":-W4֕w?}1Y$_<^߽S/TkuQkCӰ;K;4B(? /N#ͤ3g˭r|*M >1!]1 ,*w&`oPWS `_MȦr[þq֦ݭEXeʃlu4-:>xmK~:: QAcG}lRSQ 3#sY^a @ UCNvX&FB # *j /pck(c.x_0|pH[A&q7Pԕi~K^tiҟp=lbp/eK {2ipdsZ9s*Gϧzo+πSp(n:Q_uߤB{,f2!b9f1ds743smgڷe^t~q;O\`B8sV5'l_vAx?]8*-r*Ȓi;g2*h7/l$=C LH`BB1ce`e<II>#Ӻ?n`D=`V(px^ FĹ|VQ0 1g&y[RHH@#F xmKK.z*6b^+Wj ] x3ϓ>UmVKa x$Wa2H2I^SMkQ`a\ ¾0 UH񩠪g0n 1&H3V/j^b{}׶hZl;/ά~sK\4>Y 鵜@y|[W@TLpxlp>`lj?֐$i$+f\ge_ge[yj[Ru-[#FԦ-s9z셴}yC0&O7cǎN\\L'sXdZK42H+$/u-;!  *$o; hƏ6 u,*a慙W oaf|͙jw83~"M@?jrWoU<U(mp+`lv7Sk`E7l!cfp7lO0t5~̆cLR!j, އCްKP`ːp('PW 0h]x׋0 _,kǩZyqbZLg&{<_!Sh'©;Ms,v&qZ*9ÐFsۦ*㟓lM5Qdwd?Ԋ[<; cJS._xS 4bVwZ9s*Gϧܡ3ޅˢr{a*xgy5>0o: U^Ф;l +5K}lgmj^Uે,AF̙ǵryUO"_ߎW)çPt述$< I*,?UYN!͆e2B\sc,nh8g<>Θݵow˼|v;*pv;T}k+O\h}lY3_ yu{$=_B~uDyoρ?7Aß.@P.| G`_7V̙iLUmVKa x$Wa2H2I^SMkQ`a\ ¾0 UH񩠪g0n 1&H3V/j^b{}׶hZl;/ά~sK\4>Y <-ۺVL4`0i5k(W9mZi-XW,6:+:+ʣ_USRk)`:16յO^?G mdnI>og/웴ͫ Rׅ1y;v,,tf?ajm&+7>ϱ3;B!B !B!IB!B !B!IB!B[bTܼK?)oזtn2,8-HL>A ѷ>I|B"-/Lmab2qVe'吼Vm5 A0.BA-?ͷ Ҋ93Kr|x@N0ihw|lq;j?C; `(v񣠍'(&H7@ ~= byaf2 io[։d8]+/Lyw@p:?j WoU<r9ح1n:)kij]Ӹ~c] 501\ës < 6_Ј & 3\ԈouNR ?0ܳ =VwCx}2W!t$ÈN  <ݼ~є00lF(P|b?4Y9)2s\ cn H%: >;O]qS۩BM(t _HxTs6}"^y hKw_y|8.@ 'xd9[_c_opeBEZ3cŨ (4U}F~CLh"#G9)o{r8#'p#у WM(pte8 52* niU=\5G&\[vgwF_ Xj(8MP}M5" ~NU SX҉&ph ȋ6` 0uT;ah|wr?rFq8xeݏBVVp!#To ~ l^'ΝSsFpZΞ|뻛3o%r፰L۵72`j6VL/G [`Ti!-5Eu!hDT1}]=+_.:(H|BV _-!TsdA0-"@ko߁2M$'y?yo|ĵgS_WGn;^F\w~;?Yw>J\k%OqJA6AK3IJX,<4ea& РY \>ُ "V{BP_K3/&>@TD(*.]j?4!l͔=3;T=l^ Ux>()Ʀvj ?i yZ33@$3VrnMqfIܫIxR{2Hv4AjIvXͰ  {*Fh@+LM7vA#Tܓ^`@˟'d̚ ϧA7_sTj9Tz|TΟ"3!u)dغA!3;&'LZSqoڷ$btB?ַNyrԳѦ)wEy8_ܛp,$>ƕ\gz?>I O1>֍C.2t${4Cp' NSs`Z)dT@P0pGںe$yZ3S0'xu(jugvNO8*`VxjR썿x/dA̞VksH5:qpm,ݧj]X>gMnY5vA3X" DN+{^KeC}YyͧLZ9,i3`D4H#yxBs[Pm [ /Ŷx#av97?7:I\+Mf(?2Sq"{c wm4<K0%צ*dҹم3f[a?$_Ӫamכ83lVMN{9R!B!tD&qB!B#2B!BIB!BLB!BG)/sdkdpwr zSJ,V/*&Ɉj$k@fCRQQT2ފ&qIOJN֗9 sPJ+ n—aKbj5%Bh ;^&nNI9y@`Oa-q K)l1>tpkX!T9vKIYҸ+AfZ>)qCظ>-$!p+aOc8G<6@gYVDN( |ZiS͍7bq"3{$͂Ml!I0Ƚ#3@|| +!"yںa:%yÌ0O_Ɖ2s \ţ}pC03 e >8"gRV8 ݐDk{Dfls ?F7M9 4z}k22s`kFL "#7h*ll) g9PhpP^|-IP^L9 HSfKOI}0W!-Wm=p\z:įI G%8s~i73PNx30^Rq}ag48 *U}(<:^=l^ Ux>()Ʀvj ?i yZglc|M90QH+Mr:MtLX&', ]ν{Ys#zư2~gMnY5vܿ'=3v`4T;+ IK5¶0myؙ5nNIf)9s7V`y,E 3 `1u`]e1`>DrfAjX~F$82PowIo§aӰ֍!,f; Z=3g7*7Lp3m%nIYO2 r:42lQ&Cŕ5/SnG娡JZ0y2Bee΁5r͑z-^UiU|*[#l2}$wfI~|U{r6l,rv&j9 6o5Gt*7AR4W@w?SN:-x .uKgFz}F+yex*v*C)%Υ6Rp<ک 2Xm=F(P|b|Ր<@\2>K r<q1?IfANH-1D&2r4Y+3 &p#уK1`@өw:t;5BF # w@z[O>3nc~_ qf'YB/#[K/C:GnOk9{㒏nyC}YyͧLZ9,i3`D4HutJ4K cn,lߙ^mFx#vr8o֓Lڤ{.#`;f͗{dҹم3f[a?$_Ӫamכ83lVMdr:B!BLB!BGd'B!:"8!B! !B!ȧS$[3b$- stpkX!T9vKIYҸ+A&qV3<܎^ y4]s}9|ă[[=tŗ/X%O8#ޕIнrl,X AHX'@&jn  > \ S_X4 {Tۺq:$yÌVy_2s \ţ}hC Q0T>8mp4z;ĥfq!SJ#er10^\Q2;oz[^qdN y|Ìmn4'8Zۈgy#| M/s`o \sdp|nzw|*[#l2}ޖkL^UPoh(~u$O)n`bwxs$]>oW+ɐՃLpTr:e+yex*v*C)m c=r?S'rBNXy-L*NMMm[iΞSBfcir`9f=Sjq~ ˤIE^Cʈ ,cxи!^ʜӠՋK $l̚ww?:YPXr<ۯ9***/TS/i=d1|!EmWoVaKw_>T'8s=q&̓JNH-1D&2r4Y+3 &p#у 7{{Ӿ%pdg3Lh:"NZߝnRȨ`CHϵuI^2MU SX!4Z=}!6 ȋώL'']֗p!#To s=V3Iug7l7OPa0;V9ACOTsX*l[ fi^ci IA8woB>X2Z l|̓xWc~غF~6Mj퍻G/d&s_n^vs1nަc s >MVɆs9 g`"[~HU'ۮ706BJۖ=',!ϦIYqW胜N)B!:"8!B! !B!$N!B!tD&qB!B#锗925O2;h l9YkE%h|dDq5n _J}wiy( oE'%xDd嚣SE?#\;W$> @/Öl,kLKH/wLPm03)Я+hp#XK.U#.e)30tuN?: BHWPT854?$3\KHy-8!l\fxY'1xhGLA׳,N+"'yACI>ŒH U{+w0Xgyѧ 9 C`{;5Gf$pf?WBD" utJ4K)0a0{M03 椂$aub2s̳̋6Fnt(x@IYO2 2k|Ìmn4'8Zۈg 8Āux43]9QqFuj$(՞d1=X@s?!ut$/Qa_][1,Q<^ IDAT'_VEB5-'<V-ek`_ᥓ8lo4P ,eBQ)C'<ٟs&6~AUp9?IfA&qmj$v~ eS}v_z/ؚǩl-S.>- ez< uęcgtVgPNx30;aqu%%w,9l]M@?ÂqwJz?s4?I?hy-L*NMMm[i=aڍz3A? <Ӛr`9f=S͛IYO27Y {5 ~CjPɎ6cXCU?8h%=c57^B~#Q#P ) _ˆ(s?``5OFo(*nrc BEq5$O9Df.7&{CRȮi) `NnkU]a^]>;O8c1N\c}I\k9MANR)Oz1:ڴ"(3'7pF;LkHqja\kX֭iհɶMvZNu+ʿwko֓OB!BIB!BLB!BGd'B!:"8!B!tÚ'wìԢ4>Ջ h2Z7ٯPi;XS_WGn;CVM84Y[:E秷q3c^d%5R^˧8%{ׇ$n%,^s q 0h,ӊIEpP \>ُӡMρ2Fp:;g7*72 ~ @"yy&,fmƉN@y +qc.ެ?<){spg\Ykm8Xw~J\sCٔ@7ݗK&#c;qja$[˔p!r>"{Cfkba#PhpP^|-IP^L9 HSfKOI}0W!-Wm=Чx .`zPiydm4Nq-$c=_1L}8*(^Ex '1DG-'H^M}=,';zؼa}PRMZ,~/kA^gL)c PyI)> I0^Nl'Az%@ise-OWg't˹Wq/3kndAXoVPՏ"SKz}L܈rإ {4\N,9| YEZcP*WC^2A鶫5)tC1y;>v*. AR(j0m4X{t[BM((y)YB\kךr{Ӿ%pZ&pM<9Yh*B[$.Ifi#yEA Zr=l6]#R͑D} )<' {#=3(HG>uἭ։Yo0$L0]l]q_ϡN` k?*MA}$3\KHy-8!l\fxY'1xhGLA׳,N+"'yACI>ŒH6EqfA&HNg6$N͑ > \>ُ*l6T{k leێ'L74B5ۺu#yª;qk}f`Ü %Px]mפNRf*B`rtx?`Mr^_6Egu YkS#s}n(rh{ddlJ9zF/IgpN W+= cyngX^RǒæDx=,w'2MсaZ+U(? @+n۶zv'´a28{%dx92qP 0(xYOT(m q:M&qs&a^fȸt14E`Ǐ8KP(ۏd 6E*?K4pGCQq5GC7@/WCCdq0.[7H hVمPP.=fΓpW|n98qIfANlM9ǽiߒ\8 NNyrԳѦ)wEy8_ܛp,$>ƕ\g4 ^M  CV 7{(鹶n>Iֳm: ^|]&WBfj)CtzBd0 4Ռg@~5'>J\+y<5 _F2 fO9P\86SP`.b3C&7 ;6QGŽavr xg52iTض̀A;; 3$OOHzœx+<!0|+ؖo72l׮ά֧Df`Ջ h2Z7ٯPi;J\k%OqJA6AK3IJX,<4ea& РY8k7eg8?! Y1e8[K&? Y {@7ۮ92;xUA<* +(;w֒<̺ a?!`JWƛ`SУ>]m?l[̇`썰񖲖~'=B\Kr:9zFcp('TPXvOKcB}a/)[θ3Qi{Xye5aZL³AI46SheAH;h(;:{fL l6^1Zڇ($x9}spV́OB?ƕ\5\:ƽS~) CV 7{(鹶n>IKf|j K>F 4y !PpF^|IۦØסB;Dm~'DA~`!kK5O/ךM\+y<5 _F2 fO9P\86SP`.b3C&7 ;k}YyͧLZ9,i3`D4Hi ,0'p ,}hdfߵLq3x?֍ [ /Ŷx#`z"M3]bԿ`@RM而Vkou?z!V35z'QeDhYj#dҹم3f[a?$_Ӫamכt!mKfv{H|R&cuw>B!B#2B!BIB!BLB!BGd'B!:"NcߓlIϤϊܶԓ&4\q%! |`cΎx>؃ki?cwDi2a.lYŧ2+Cw$(H|BV _-٦Y92 ^5{ںa:%y?yo|ĵgS_WGn;utOB1汤~jV k|/޿›Y_z>N\$j漖Q׋!877k/xpk֕ɢ/1u`ś]e \rfAjX~F$82PowIo§aӰ֍!,f; Z=3g7*7Lp3m%n\' cEg{RWwoϓm벏[w G.kljA2 2F-cH=`ewp5\B4BYE;qT2BvqPfP_¾l/[1,'_> [L$ORX}~}f`x(<nX6ǹ'Zt,iWs;vqԅkjq=8qHfA&q0KzcݸЈ_9™Sǻs\ޓy0e{dPhpP^|-޽EY\3$ OYWsw?,+C1]m+,C[xSinZmZ!uu1GQrDd1$`Qkuݼ5﹦|}{kKi >%Pm~PXۘr֑`j0#Q8pqN&u9N1#yFw`Ϥ2y_o {k"_(?k}=̌#l64R&P `l[{ yZ3A0X .>ALb Xts[:L2w|Gv;F=U({Pާ=1wm e X͂<.5^樌P ~z6 #r!yZ!2sQ10.UP!ri|M?2w2$QA+ gR]&9&+a%$d,!!c1 y>;݇[L؊c7 (Ѷm`l_ө Of#eL͇E0j`Im]3mȑ&Rjo_N{]'')gcxiak> Nz j`8 IDAT'|fJ\:!#fG*'*+!foaa6VN:_ IeFIf)޵ww_CE2mt0/7k?6]9~c5|SPrd12ZO2 2k- Uv6i?2ln!HB!BhveVIBG37T\+M6BO18o7?N`΃_k.KVu}0 p5QtzN(:N&@Zugg}ލ9o`'Pbd4gZii Ep; <իXko#?L5 F81lW󄇦¤PM+eB_Ry.5 o<zv3pOZqw&$])sydqp&e(``sd]2/qQ,*֣f4dlU`Nk_fm]q2fDXB"y3y.xKߵi^>Xy:[>ti-Yq?tmp6췠w+( /oA 9Q"sY[Kp-^\ X^y8C!-Ɖ{EhNP{S+zԚG]wseTBA8nXaO:`\U3lU >p$\.~0ߴ! Ӽ >\i*JرDBp n?&pk Mw4D9\kf:?P}.[;vM- գxxT@5ux%A4A3wNY={:wSGSW4v`I7][eIQ{ mdrgIֳ}BAۤg>jHG8g?yZ|222HHHtbF3Z翷M.coKB!B%2B!B IB!Bhv/lRD\{i#$;K򴞽gfۧ&g=[g{[9'B!#qwyRr4xc@ŧfޟN1q ׺xpi}JGʁniYv`,eÜ,*kf>{Z_KX*sdA0- B|@[e$ON $R-fgu`L_W';rp;$Qt jIoʚi{Óh ,N ])q) 473fte>$;TBA/w*^CDžyx|ќtɩ~i|Wa-92];I2}}=>6I*G>>yl2V+jԗ4+ג}8qHfA&q?A|e:U)t)䵃\7[Hk >q'bX:g>úU!ˊ;X:mK{|-925@ AancIXG򴞣el[פe[=6JxHHuaJ}98q'HfANC18GSWށ)>n.v}Iq|̶u>3 5ALb Xts[:L>8qHf&T|ڹ5 {t#swdcDS׍e ] Xq*wͭYpż}OF@6PtD~;$O9Df.0*V%pj᠛$2aJF&pvn=2yl`+X߬s=9J:}پS!FG`0"Nۺf$yZ3S`tw#(O@nodKabi9~~:4lj@2r$L:._N{]'')gcxiak> Nz j`'+'-5_qY2=қն"c}HXUEu%d-9,#Zfɠ^k!Iz{$Oo^ |Xݾ3£ }pvҪҶC|?`Ouea2ZO2 2kb~ ji_pls]FY*,k}#l] !yZ k4\ň'l] m;b^h/e/}j=L>!B! !B!$N!B!4D&qB!B!2B!B S6@Va m]14-%\as}a/@{L'g= r$R-ϏhgOz20?Qů{fq*a] lOUmdj \֖z> W P} <jg"4C&q?A|U{d#2zz:/9{+>'@] ] OMQT)7#c! 7(K{|-925@ AancIXG򴞖2[=OIj68.$b -Q Z Ih_J~Wcoq3B&8qiUF@j`&5cfrx\=5ؾfFA Af6x)ha=<3S`xh9s0R$nZYzpr XT_x>~6[z?I G#T|ڹ5 {t9c9e^t$y ; :]:dt6cf ^/sTB(?=dCvHJf=!"]}q ,9m(}Ӭ-hȜzkS _A=~&8!ĝ&gݤp%1%$d S?T0F[p ;*ୀs<F..t೜KDgTT$蛕&5^ d6R|8Zpt5&zZɬ< ^k:Y!~T[%^] \D ;G>|6RO0l$+Å 0j 2Nqɑ&R2y49uIa l8Jʹ*TW̛GPX?0sI,3}#aT֕Q׷T氌k L+'z2[WL$Oo^ |X2jl̓Wsӿl]imj/y:?o ijj̑j+G+d s3 /%1ě)<݅a]B5Ra\ٍXgZRXr3;b,[jhT.˺D x v)IYqWh'B!"8!B! !B!$N!B!4D&qB!B!ru[ƺ*wƬc$S#РGqsjS_f }]ϓBzulgD8Ww%\O(D=^Ab~LkLPV0Qmy4+wxrmhxy3 92DDnO>Q0(,%f¤y'36h<ںb-̜(8 &O:;i?c!{}q0+&!1c9˫nB?fٷ_W (\+W34.ំ}pi@]ٚ~GGCIjqwer#ӵ}$Qp uʹI4O͇Uql$֟}f7`PsĠ2V+ւY! rv] ֮ksv} .6As m]1a 5it0寳a^ñ\x5 ?3s7꼊C.y'V~¦qNd(t𛑱ru=n ~|J^Z1$#yZ2 s`k23qX"\&{sGgF8.$ںF8sD°9#(>YN#NM}%ټ=lj7&w$=꽘i1f!Us(H0B9oC#eM1>̶u>3 5g&3́3gA7dCbLbͼ3;'g=C}{¬?#K,[J4Ln^JYv5^ 1Ȍ۲d&oq Xs8 G7ݹxNftI%{඙c5 Nrx2B/!(wCCdb`l%,]l]! h 3]{ eRsWЪ!rt8t~fbJad4Kr 9.߮=LLnFN I.`l?]@>#C=8BQba!c KH~a|sUWyі}پc Of#eL͇E0j`Im]3m^A缣|qQ͌O=w{Չ$3 ^u}x }x$ʙ>ّ `JȨ9eR2®50m uؿl]1@6t_aMtX>{Z_{X*sdA0- B|@[FI4:'q|e onM46ӧ@7OPpv/A'BwOP'i\ Iy+ΐ %T\Yꃢ8H>9WebWg;.Akb' p̢u89CF1`lwZ=\K:tכK??BܣU=!ÓhD˛ap4wȏ "\v`~􉂡޶FIf)0#& [8Zf0!s|x nt3!f!(`LgnCK ,6èǢ;+bpckY샢8H2z[{3va!V*Tc}+u1|rOr5CRC IDATiKo!]:|3:y؈:!9մ.M 2Gk7Iog\5&<5Vu[Ä25 9 ;>fq*a] lOUmdj 4ljT]Jpa|xW¥k#K}P|Z'ZA&q &|~9̶4}tXGplg^ ag?A|%J@BAxoPл-Z.sdJk)b?xmD"hƔi=-e&{꟒Ԕm +61p]H.hSpܟzK/H 6-BI8sD°9#(>YN#NM}%ټ=lj7&w$=l]K`z F(<mhL)Çٶ.@^KLPBXC}{¬?#Kᓬ]kA0X .x9pf,(>lH,kqB;M&qr/%rw,a}qSdmC29G`Շأx?92Bc5 Nrx2B/!(ȩCV2 AشkFK6}Jad4emcb`l%,]LCO_0-% V rdN˴2Nq$.߮=LLnc涥λptzt bK*W|bo1:$ARK3)s`j>-QC [p i[L$Oi%$x)v2OmP7 M<  wˇ)0h:[NP|u~]YP!$ڨ7BIZ'dWG|yG.71{Z)FǗ bI3L:._N{]'')gc(]s1¾`v$r"غ2jfٖvi3`dPTfii 8{á"Af]--´yQsa/4[W£ }p[ ӣ/>ğ,fc}w-V>odW u`yD|ȫ(;A?/lߠ;UEP KZ_n8[~Hš 4ٙ-[gRgEZvx^y6:ڨ>(Z>[ظ+AN)B!"8!B! !B!$N!B!4D&qB!B!ruzT:Oc (Fۏv\s/}$&ih-zFeb_6rf QOA{j2GӢ *8>L*.<'"a|B!j*tN~u[WkOn^XJ غX&ؚ{YZOf i^$-f ]"@/32gun鮵z޹~&/k C+&m:olE &^ {#eLfO u4J4K 0ie3sFBv sBaT[[WsǦCFSf1 Ac:y3L:H-'mqnLn=ѩRڕzs*'T34.ំÆJ?aqe(u4'?t2Bri^ߕAXweLoLGEg\5&<5Vu[g݀s`CͷU!]m]tP&|AVqSzM{sM[Of] ę9] 8B?v+ķ ^hzl81 3a*h0 n1B{mr#SZO k A6u$O9Zfp̶uMZ>b߅R^arkظ֓}98q'HfA~gƍۗ!?˕lޞ;gM\ϧUwOWd7dܬ03 Px2H@-ESLm]i=L&ô{`2$?j! >=ai9Lb'Yv?N$A u4{:.ڹ5MVzVX}=sdzUuʍe] Xq*wͭYpż}OF@6PtD~;$O9Df.0*V%pҖay. \l*s_#)xG#su4KZ&9TYU90WNPFXXBB2xp*a04317P038!7+L|k:U ARĺpF = #!鴭kM>3MqW`;2k %^] \D ;&Ka~ͿU k7ThݏwdfH\ ]j < nZ5o=Փud8PӞ?N͉f(ab}HXUEu%d|5kaa6VN:_ IeFIf)z9*<*!n}g G1^-ՒC6"\#/Sei2ZO2 2lj-aϠ&P^S܎TX22Gv#ٺC%,h`Ǚ/+Oغړoyg@lד}j=L>!B! !B!$N!B!4D&qB!B!2B!B S֣a|kfgD1p~Dŷr껞'1)N+G3hw+=OºtF3^ȫܑ7/Pz @-߃TӍ--92 !>Va m]1XД̵23Q,BH\]X"i1cAzĜdFH=k)sVg\y#a=O x8YÓhD˛ap4wȏ "\v`~􉂡޶FIf)0#& [8Zf0!s|x nt3!f!(`LgnCKה̵23Q,B3dW@wM!gNҮԛSy??q) 4tze<& dﻲ52:!9մ.M 2Gk7Iog\5&<5Vu[Ä25 9 ;>fq*a] lOUmdj 4 kKeZg>i?Ywv$ _OH\3_Tǟ }wfnF5.u%:O4ΉA~32B{mr#SZO k A6u$Oi)305lSl^X ގBr-@[ʬvT~&~IO8*M7o_;ċ/Wy{oLHzycVe?!<0"_{4k}=̌#l64R&P `l[{ yZg (V!s,m! >=aIݮFF&q R;理p9l:#C brjCeݝWi@w.TwnY1?VO/y9*c!m|q;$Oi%3Mˮk8l6>iVƖnf_4+LG+wLu={PV:90WVP/ğ2|ŗ]+F/ƀezg>Uo;nyG[)&.6{TFG`H\aD |v5&zZɬ< ^J]ix kxx Hy>?w!2j6-V !4aЅPơUy}__ʍ1ހ܇Hbݬ# S&-9,#Zfɠ^k!(,B/'p_CE2m,Z[>i /4[WRBf6i?56:I\=Nn cƞppx5tuS,̵̑ȁuq<I-5 .7h03[ βv7KFS3,{Sۤظ+AB!B IB!BhLB!BCd'B!"8!B!:e=*Ƨvia~F GGT|;.׹iyRr4xchd=$Kgd;#5Oǁ].|B!)~SMcT\`ZZ‡)ȍoitO@0K\{f>5{Z '?M{ອ+ւӧ@7OPpv/%ul],xwCl},gIYO2>9W%HZE^(1'RgZʜvtKKi<FгB wXO;<9 AL4GCF"e7~'@(mii3ba˼{~ af4Y mQmm] M,e\90!s| 3{'g=.$L6C -]7~~B5CRiKk?lXXODŽlA5P}W_]GsC'#$vi]u\t~&tTzȅ}l]3m$(<״쾟9i?IfA&qf8{N|BЏ ?3s7C.y'V~¦qNd(t𛑱ru=n ~|J^Z1$#yZ2 s`k8.$[=ɂi?IfA~gƍۗ!?˕lޞ;gM\횷1 D<ȏ5ؾfFA Af6x)ha=^*6qՔ}?s~̴֓M&q R;理p9l:#C fl_#su׫bW\ JG'H3t餒M~< A'xz9\kQ mhEG;!yZ!2sQ10.U>u CbS/!N;g;@?c1Na}3u=WY2j;Ji KHXBB0N% ctsp\"w8~z%D߬t0uxTaH'2"5{0Ӷ6Iֳ4])xu-<\s!?w/͇5V3{?sv?N}#qu/ta%$|%Vn<>@ fe}HXUEu%d|5kaa6VN:_ IeFIf)z9*<*!n}g G1^-ՒC6"\#/S=['D0Fniy gP׫<݅a]X-)K%s/sd7r`]ka?$_RKa͂ v"k=YaƟwf 6q=yoj$3sB!BCd'B!"8!B! !B!$N!B!4DNYJi]Awߎu~zĤ:͠%,S}d3O{ѿEs r=HL5R#s iQj  7MyNйD<=üjo̬tM zZچa ; v>(Z>-y#quy^bڋŌKPs!u Y[k`a=] 6~~G8{C[q'gA67hH#AD4/Cm]1kBz>KuVV^.I샽1:^ށG"Wzm'+"g4J35nNIKy[,^3GH$JF* 3ˆ+uT+Ag )ℑ6}8,:6Okgُ2.>b8!nj`YK|q5r2M88%-tI.4ir-3yLE>$ZƧfoҮ6'~`\Xu:;P\7EdIXቡ04ob | y`ˆIpC~k ٻ:;f<8UV'DM-qk2xa!I.p$t<vFNo&mKABT-gÍvҒRSE ?`B9;򿚵ZVb9ˉг/~NâIh Td7 A|9H1VpbY yw@!-G.trVgV{ SAӱ5hz qGto=ow@Mf,h.xkdKQ|>u&>{#lt1mg-ыXFuФO ,+lЭ Qh(է)#aN/N{íLx NU"](fUgУl}O> 4 zupm ?I+KӇ IDATljhn6ੁ0` Z 1C-qNWᑆ6yr[yAr% eSquz,];hGGz${N\脙od²в.;{ٚ.yت%_ݭ"8.mKGtGiΕ ߩ_ˊ}w<rNA)Yՙv…5.'=odP$dDbڷ=:|?HP)VC3Ӧ:t4kkoXX.o[_~ ~O;9@ Z5_ Vpn$3*@p"<*{ @]M ^I:]LvK;~Wg.r<9dȘ+_^zW`|I*ilj@ -W\J~ؠf'ܷ̼.6'w]|z5͛|zÚq}vQs7U餥<vRNPeC2FֺOR0:A;`P 8O03# z/Gc<#pSWC\$Qàpjk󫘽$v(y+}^0jnڄ-fiK*,m[y, reƚ\ qo'j3 OMrYI<R=+ܒfA>W"tw|ԙwiaȁuOhAl'ѧD'B:OMnCxZAء8ŭN JǓ9'%y?]gltlƌxZ[_#n-Ov%Rlpp3*jhsgY ʅUSi|SKT+ufe_7aH(Xԙ3rJCZ&CtRa$!^ ZՆ]NW:CPp[ׁ;|?5;tM{<~ jYŲne4=s0Xe]atdÌ5C\HdyzvR# &#ˤղ _N}uMj)Ӕ FA8/) N3wvPt"/ZԭRDDDDDAa5yE-q^v䭗up)͂Z$L4#ƩFE\\5IvвYU4ϘsANxmC)LԚ$Dϫ( uʁ8wpd г4)3{pF`1Ji.. j4nwB0ث3[*<T qj*wA`8a70c8\>7>@ݲʃ `8 Tn CS;Ӿ.9 q"Xwc5@,|UK\(A_Jǰ735o>v j^VD6hݥ.eF.(ѓvZjwv7з sxaNrDhHOވп<.\Z$A~P+8F}mr TT; =;Vgp}/hУ7d }vpk/84]gA;S}`pxYHצa]:ĶX;ND㮄#IFSw;]G^G/q'g<˸ /v8)Tsev8Fڝ4g\MPH24vB]Tqå~(*NXpu$udpIyr\wQKT\0a$/Awhv~>-Ct(EjbYxwLoe9rNA,ޝ i5L ɧ`1,Zkljh`uܕkyѴGiS4 /₱߰jVMmֱi<2͙k.\; (]?vOqAZ l ȱA`A*P1zYIfTPEx} $Q}/\ z{cxu*6+DbbSnp.6pӠ0n<V=Y]b8!Q*c[ U$s~_晍G$],g|T^mN0YZ..Yưkޝ.jNf؍Wj 볟w?;Z] vU#h: 3'C}`lِLpw[lYgΌp0U84u #p8Uإq6h~&{]`$AA%V0Cglx{3_us@<nlzM_CG/Ʈx=`?mypʜ:c})g wY]fgxac"ٟ7܋KՍq*jVØqp˰{e%JvvTWF7-GX^ z=NHqXcc |~ӬǨR :.`X}=V `v0dukbW'$qЭ:0^tVa78ŭN :ۓْ._Rs42?k / FZ&)(._{__ȇWlpp3w3p|ϲ̕ B6`Jׁ+`H,6>+uv|9<1MX Y_!bT1 nȿ ٻ"}2b\}|pBNih^+dhYـU]b8!av>y:a\h\T嚢n;וsj]_^oq{VosY03}?Mg`#9y68־tcW8]5<0g͐$8Y:r^dWỶopjW5! k/Ĕ~{88s{vwZVb9ˉг/~NâIMńӔ FA8/) N3AY<ﮣ09ߘc˿H:zvPg\Yf& yAJ6ȨM"/ _F ""]aHIOKNz-8 >9sU.SE՝_PV3(Ut?7%G1wwfwLӂ2Sa4YksA[;޾:Q2=ai= wߩ^~=፱G0VAqpf6ovm~,WfLszO[OaL1.S3Rog͛X6;B_Hi\˪eYf1Tl٨i$YX?פx֤0e6m7zẏgOxd, li+pљ 9 [W#:ZVtq_r~+V~~NnZ 9\dAJ+m|)5GFC|k5vh L ϼ*3.i޲T<u`}kWCL [@7p&\pۃpIVB^I"op_U/Ky 5 CsQgfN _U<[> ``c1( ޸-m͖Br?ƭ~`20=Ǎ\UokegOpü8ERMi}ۭPuZoσpεϕV 6gOÍ0kYrF;zmx煢/MlH 3n'˩5?;,Λ~孇$.- ͂6pd#ÓQs)CN+WRV6 -GV=uz!\7 2߇W&B(a.7Px_`+Wx1 $5S̲0v 7+T pOl9/ qz!4_ܶ-˒\YpSZ/Oގb3K8Z..k;gX \y18vڿ?p$c_һe [+θdқ6ꑍlܓKj`&XQ%3T K”' ;Ka:x pWiC[}RO*&bA݀ŷG:n9ypf^>>W[@J`WX{?cy:!t ;œ!;=ȂCad' sO;JSYRJ%PN=Rocޫ>/lJc>YNrR|7>3rZ˜`Եټȼ&Bd^+Wԏ{\W&KK:6h jm<n/?Ms~PBxEx?| )HHe^ª,O&~*[a7 Xv^ƎejՄ_(eoj aZ8x1\-[+Z&{- W̦{x x/Q[u ^e?Y@R8] }ᵏ(4 *uǘjxhOtqb-/o;ص}5ldTOv|&7k]q7e^Zz=`u,Xg l +KB,*puSkC|߰j{G`~}LővtkWP5] +:oZ~f0(D!]Nս;Sa9뎑UJivMQB4 m6D8ׄ;Y7`VSJثe̿n!w6'`aX5<9<9 ꜅/’=P&Ng{2BJ[톹6ǎ5<28@]xvPϬm̀+(UbR׵ðl\i73wxۋx8҅v5b9w:8-3IJf6!!cas/ >V^Q+ar3S|Ȱ)Ć#1:~v䒵z2OS/p}7-?3`(6;9k' tl*V#e¢v.y:/U C!}G%TWA+ n,6ܓX`/L~4o?4XW FUw/JNC|8KIX3:T_”毺k:g8۠P+< WePiZ=@RZ:iyv/]@-s8'].AU~y ]GݒVgՙq-n忠'[˳v+ 'vY7hOw<}Ycnkיo?Ο?,՞W7vǭgq*fM x 9]gLl=3Nk@8tTj^h=wf p\S*K{G,DN_;gldq9y.7#ݐu*WS'!6 o,g=>n9 P5%*f_p8v^[4FtE,P,j.2 EůsҲI4iB&p?wqtL[||mWlbqi+V`|<6w<Њd/ZfAՙ%5:tڪŬ>1`u,X*f_Rw]ך9odKr{4w7mWѱi3u拽.\V z=_ȇ\Jg[2=''Nֳ%^I'rzswY|굅] ~7l*pKA1+$Y"Ζ8&[5[ZY2Ro>MRP&lpIҗ~3zwMu;74 \F=`4x!_&Bj`.z {քwwὋV`$@"xWS2pҽۧ1xŌ!I8t<4\eam?u} -R8Q-8{8Qw |rd46k%:W幕3kvj֫_vrs9cyuZ_aXks~ys 9Oa$bK0VM63fN\˶xv}w gj[ۅpKk̫ "֊axh^{?y<<.HhgӐP|}W,}O\;\ t゙kM0$&A0/Q2dpt [la29gZMU. n{u#TgSOuEQ›ݝ;yӌޏuܴͦEDDDD$0V] pVaWY m9_ ma tqjڳa|+`g|7kZEDDDD$xj JV׵A{~24!WU:Xܳ<g7If6q??<,VP'""""bW ^鯋<`׸ shIDAT$RPXZkp[޼[|q,ƽEDDDDD| &ĝ7 N8ΪWU"?=kl;}3z89nւݍ2ԛ(ĉX )T0/ gV-qάw Z1m6Ǵ"""""VwnhVa f !Ϊl]|﹃,Zsͳ{:7_A< Yر pVaWެy?} & q5˭5rk G7@[DDDDD$8VXVi`= w-'u̦CqJxS)|s@\ -s8:aQ+5xn3 pyǭ扈HTzfo'""""" 4y*g,lk $\!λ5Az~=VVDDDDD"ș{c ),olbƬ{el8rfӁ.߂Vh΍輧mqW"lU Z@Z҂Y7Ǵ'"""""S8aa.u틿p8,ʖ8nf,_]*=)(؉&Pl;7 x B8uv2g5/eU&i_DDDDD$7`CV !-o\ p %: =,ȶkDDDDD0 wnXmbU`Na8_;7; *Upf]7 r㡄`RF_DDDDD#As:V$ 7Z/ֱpP[DDDDD"#n qf m`M$BPoRq[&"""""*r\ܨ$Y~S =]@V7/Q P]rB pP@RA{:eL+DFwv f:eV*Ed^/"""""`M(rfC= =#ș%|pPXX% 2 rd dDP8 -j`ş8ox rw`MNDDDDx 5ZJ [(a`-/O(ĦvAZN) FDDDDD§0Ra/6>VPԏ VDDDDD§ u(GXf 3"""""'(E(BM8[DDDDDxdY 9 fQ?)\IrmቈHPXH\F2c+䉈oE}ZDEAEDDDDD$4:%N8-^Xf^QfE-q""""""1D!NDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD$&?\N|IENDB`pspg-5.8.1/screenshots/pspg-5.5-oddrechighl-1.png000066400000000000000000003515541452457446400214660ustar00rootroot00000000000000PNG  IHDRq_ѥ_sBIT|dtEXtSoftwaregnome-screenshot>4iTXtCreation TimeÚt 26. října 2021, 07:57:56ާ IDATxw|en6=B(IH$#E"XcAQ,b?rwwv6@PAwHBHHH ٝ!,%i|߯׾vw3wgf@!B!B!B!B!B!B!B!B!B!B@ t !B!ڞDG :jB!K :b0,B!h:T מ7!B!D.(| !B!N-.k`oB!BFk[m*a!B!k)_)lB!B-j=kV |-B!&o.U^ːL!BS71s rZlWw' B! \Ox}+"|B!Bu+ӵ$z `œe:=B!e|zq= %ܙF!Bqyj;Fzޒ`N9!B!:Y9%9wnNnx!B!DIN䧥ӟ-nߒwwi oB!ByfξrĹLy;ik@N!Bhߝ o'ig90qZ\'B!h=-M8w9q iMNk>;ʋpOB!Bts5kgW;GJnqB!Bs'\KWȵEJa|w6\!B[Yw5Hk0G ]q:N0OB!B8C=iase\kr&s'$hkIpYk'!B!UIҠΕ*A\K8om]kB!»FҀ͛A|:F+u6\!B-:WiV8O[l?4l- B!׽3+h;uגΝ͝:{Z !B!%׿N0@kA ]Jl^Nzh]!Bo9 N N\wGyP;z̝ ']$9( {y5L!Br-ms֒f\yP5r֟] \2i7JW8Wi7G;[/iB!q2g]}`/PɁmz9y;=;wLEGG7ou111P_e^!BX,Ç袋>9rr,9p絮Ӫ5.h}k~ YjսS0nB!T 1cƼl䮗^h|λg[.~:W&p7^:Wh<\8!B!f3eee-xYl̛l28owtpjjjg!B!)X\ljq0;'ڽA\KZ< NjSUP\\dhEڒh$::8E"B!]ӧY锬 Imf;\&'Z9qwv]8p@zF#k:ٳf3Ŭ] !B!4Ý8G77^Nƹy4QRWTȑ#\wuQUUav+++R/h4Ί+$B!.e4b@JǦual"gwt|7GӻOЀhI+QCCCD!Bt$f[ T44D)sЁ.yz8hYJ +׽is ]([ʵB!B=Ҭ{*;߬{ l4{qω8s .< !Bѡ5Hkll{utl8{&೽v@ˤg{+ע8!B!N5f[cE+ٛc0΂dJ}:*,B!ޠw؁ǓϜ scwYvVXB!l2̙Cff&zsUW1tP[PPѣݚg͚5G9^jqI?55疝jAt ƻֲ~8lً^]-4uUηo]H7Sc.$gJܵMQPdPn~e.`+J۸+ P^™|xZtjJpӑ}e2;Rze}GdW9bVh=ͳu#55_*_|? q^eO1ޛl4:Mg&00{x? 7… }2p@ٺu)ӝl6ӧOiuy;uyq@Zpͼ9O:8G:V٢cFltLį7UU|Ώ&uLz$@-|ʢCd \ߝݫOnEs?>_Kzyh}|Ȼ_-g{A%$Nfr2T|ftD֒M@D7z o=q$0檫E>srVSS~<'_-DBs-WSd+X7?{'xv9e{֪*<}$0jkШfu#g͒ˏyÞΓ88'azX6|;zZl~n\50~sS._7?˲^\osJaCVe& 2ɲ^L.8H>^{To=4_,aq{?4SMgv(D??w;guQk;2m" }6 ZOʢ_~DDD4gϞűsN_UUł ܚK.>M|+f޾djj*ׯgƌ|(u]Ν;==o3LjɁ\0k^Κ/[%0;+9_VQsMT~__M1>1Tdob=Q<1iuU bI׃pXV]hզRj,Ck?ec9 /;=e[6S1D=@=[ҋ5툍;Y,>GLr_"nJ exrT*cI4;>1r;lAeYl_\=E?8?&)1Ҽ vKW_ZkU}2?3R=Z.Bcϻ<)o\J,XKشMIݘ<JaL`!T 7=3%ZA{sSb03|K~M~?8|¦=rTr{f ׽tjK_P _(0}6f'e@ghOՓi6OYcdPIe"+^OoT(q{-5n9ZuqqOu3ߞNGN_7?[P='Q2ft:^]K̰na;"T'y!_oy~Sڛܐ oW*N9b+p8/'?zelʅ*]0Agb:cv}#B>x=ʞ@ү|{G5m*1cu>P( o6w]w^)em?/o%qS'CA4l즃YlTy#ݳ3M5]OReWV2e\(6In\` 4 ,5Fd󻚨X{~R-A=MOM`7s7mAKr0]WwLo*cs9G tN3uNh^nAN6U1P2wyȃiˎ}tyv=ʱo<: `ly9'b9[_gxRzq=53=+Wwj쟶Q-}(Ҩ W{M"%[yx ɶӮ-5·-ENcm ҰlR@B4sQ*'"i5VP$ r%?Ν;1LY7x<kod.R+p4i5m;ޕY:/^YNe,}i&y߆SE?s :>v./_Om,c۶]d[B8ciAדgγK'h}=G r1M|fCLF ./0Rݬxy&7x?^u8VsGqI|ɒfM$)QCt{h#׍(~cֽ?+q{NG&Q=iGer:?9rlti[R7ilOvlڣjR'An{gq/^TVvtts/q<0q`_2p&{4\F~ -6uƇRd嗰ݛ1HII0k,jjjxy2dҭ⧟~rkD޾;d[۹s'iii|[>3nFOPJ(W6F{tնl߽eggڬ?w*~4y1҇yt>Lu*Ԗ֒8y>+ 0fB:FK&f,qǯf\`*wmO>u1Ù<<. J/BBCa6cY 8iR7'iIQzAѺ 痹}|7×1<`ʟ_)+R &82`g{zK6Qk11'ɐ1UgLʂR{ݣ16TIIf Iau!c_F)uN3GuÕ|8=IW>}SEyt'ncζs٭e"w/@7/X#E4ϓd{35Gta IDATGe`L<Ƿ%ZkmYLl֔+t;g&wL.襣jǼ0c+[3cIgO$_ 5o6r[h[g`"" l}DHdD{ATT/2AAAci&-?55'jn5:zy^'++K-̟?n111̟?پj뙣aV^j{jf^][x?3vZnvJKKOʬ\ 울ÇdixCs޼3S& 6WO/7WR`'G3&k{'⼦j`/nk.OԼpl?ߐZcKm۶SWWGDD|W[PPs[ܝrڵL>[TXsO4>`Mƻj3Lya3v>k |oa}weD㝲]''xoT#u%\H'ׅfzF`PV&-'N{V'1inj'麷yvE5 i <\q^[nUU֭skt/|QI{8zĀn^J mZt4͗)SK!p.a8uVːMؑF!]39=u&Z@cZe3{&V‡Zc} frwN6p5ǝ]K8W1Gw-SZrE*ts Ϗų dp5ԯ@/!u'(pCQ \Z7<8U/O-W8 B!b6p]X,?wt8j\r%NObw ܄B!h4R\\444pQFcKGK\g|.Z)g].m]/#_!B!fڵosJѣGٿ?.+ g989Ӥ5M`n؍Fz\W@!BqVXACC`4&..ӥcYͭ;ZMkE.ّ#G8teee^]B!pHQ㉏yZ-b6ou58W.t ɗ@X={O¿B!BjkF5 Z҇ѕ5Nٚ@!BZFENNN[gsv'|WonjZ-ZZ\XP!B!ZCQSgރqB!Bopq8gMlB!B_hWqM[ޝck׮m,!B!Dp!>sKgYg5Lo]onuf: !B!Nf/_Nff&v "55qѧObjrj5Z5/:<`3KfH!BѱMz%+V3f`X0'LcX(..f\s%nigum&;E[n OhX[N[OB5Yg 4@ĹC^eT ~WJmNlb2'߃жΖh?:>pY9effrWm6jjjNILLd;h Γ}&(9Le3Emr5ٵp+rn?C-s%X!";x;las6F1xp4Ug;t*5^_zU#:51hs,lT8MeTF O|V;̑PtFz Hdd`뇢Y. I\fY6v1/?N¸:eGMgpkVfjr@Z7=ЄYǠF<,&eE%lpc';q'cZei+{=? nwZy:DQf9DTuj*{2\?k-:/81Fmds1jC&k{٠sTAUUlvo2ס[V}`s+?!P+gٚ#4#'f0(\{[ˎۚT̪niRw00H)E5M%Xejcp (N9dfۢ=l?bBd+9:缑jB"LgP?$|B:"j^ !bwr(JKsJPR޼V|B& cl)X7Di,\Î-L0@cV1~ PYĢMH'-k 1{ڳ+!Y 8@Àt.I4Vfɏ@Rލ8=5wbzӍ -1ՇXC=i:pV pfƉ;U`#`] gPթ}4BB@|4[Kz(`"瀎C[Ђd# zœVg`xO΋<!1WD4}*DDqӟ:TQk wa䥃O F_tPk)U8 ۍ.Qrܚ. y`;KOb`n~ob}i|UՑzvA: 4IS[TH ΏTJ7 㬜i>t.gcyiʄ[re;e/ ( b,5lPI܈TB}jnNS>ŏWpzup4]%ŵ!n@BPtqje)5a >te bC &`w=5) *G&?,ݘ|)ɯih1A9IBL g.sHr~QiO|p,^-fFv9޳`tZ(ٶLꙑ'uRr*}0i`58?2EKw2oKB?i'K7PJP7=րU&8v@dz?z:x]_T rT˸TJ}ĪͧZWKE%k/RW'1|ͭc.ze<.p?WŤ44n#PߏmGp6sX|zua&anPmP|"Z!kO:xg gUdb2c206oK\@QHQNj#w~_LuԪzFvA6r HȈ>)Z̃5ŏ6/˸TtkHM%Tw*DjG2ǿ+rA&3*z];].O]q!+at ƹK5nQ9:;ʪ-b(ظu{fW]Do`ؘJV7"#ju7XvSAAE5Gm"*9/f>TK]d: G=ʯ?d|> eme;WNAޠְӗd/]4Z-ѱ2:SsI>Kе&y:0D2f[iA5Bp+bdR0utfU&L4o?tu-EfH KaZ?< ~#oBV,awlzSvqԲ{QdDS%=B&~?9%T4eCA|>5(3uE&! 1DyDFZ\WPrk #6#~(Z.L:'.>V9q M_-s.'uIX!5TTbrV/.hu%(\@n?9Nm}qxg vo G`8=,7O?'@ui*kzfvvuNaszr,걠}bf:)3Ύ]ʷF|V'Z4jutA`0~Ujz^#pCF%4d54=²T?Fd3`,dW`R͖vBtEᯠSqͪX*Ƀà7Q[{afTB5m(^u6$'m*PxmYr{ҦGCBɎHCU?}eM%t1h0JH ]*(8z ]WAap@9cpZeny5l_QPy\(#rl5£H ` TPMdBOԩ:u g$߷dH|HYϾU4V%?VucVYk3_JYK0;]~c҈Rj6u YK `㜮{Y|_ f̹)/d.DL$L~aL /D'eAH!З]p ÇְffvZtFz Ie`Շٴ? +#ְffv43ҵ*Cbuh3jYjsu:0+Df0(ZA<¶} Tf9t9|$:$嫷A ߃ JShXgB؋>V}iOT $HlU61cQ薞t+ׅyZ59t8/jMWx,kLQ+-U}ռ1C38_1Ek;?,'gku.Xu2gsMWlDD'4B@,Ա3 {;w:;/w9_m@']-ES &S!pT lbcX$|IL9}>Wҩ=N~n7jN[^^Nnn.׿Vf'/wۗjn߱YkXosH2'_7uzBaJuU֋VϬB@tnR0&$qV"SᗭUXLl Jtjc]{ҡW8zBhb&7紓 !D;}0fn|H~^)EK9ֵ'B!BM%nK: B!^SYTbRS: Gz{[gIKB!Bt  !B!D"AB!Qr:#O8!B!Dcoo֔Z'&AB!cQ0wLl}XkqB!BŜ s֖b٧Xk\}Ā];wuB!ZdA$燝Z?t,lSƍ޶jE"֯ -kn9srih?j6Mc[f9qagª孹5n "qtB!Bt j, dyXkVk4-qB!BNN gGnڄ !B!D"AB!Bt  !B!D" !B!:iӦ9٭#-qB`G 6ys:CB6'?vs6~Ɯ!g򯸳x;|~t-OTu'_ βEPُ~zpڭe IK"7^Ss/$#Iol#Ai]ޚEɹxtʖB02vtEm?~g  rcĉNL3W1/1 *P0a:LSXk5gayPٰ)p >5SQQY?<$zӆR=6^ڋ(y#?N,/Bsy)i4`1yq,Jj$]iBQwEe`Q^Nwg{9^<ٷǨQ.֞:`Wf1ï'p4R˙S07fa|/w}NaBIx)μ<e|;K.a>]}q2;AyZ(_Y\;9)z)4]̚B_d(yi3k4;qW?Mo1z+YY\8[):BIOA#/}#;ZXoO;P@Vr5.a^4~t.ݩ ɟʕkћ NA]oo{>;Įb2ư3 Vf+i{-Uq/GSqƹ\us>=UP*%8}Ct;tday=ϼ kOsS@},ɟūg3sٵ_~-,yq7b˨{64\62gϑ+as0s<8ru-ױ3OO<;Avwh]n+9[Pfpo<%O|Sƍ5t;es$]7~=0/h$SgůwI^ט{߾%f8:*kOܒ؞t1*( gslr+T'yXAAOs?BOCr/p̋ Nt..yDPu[žd\/yﳞ5e+`#@F-`kB!Xx$ &48b2B yd+:A~[`$i} IN#@]XeRA3/j ~qW@p缿4lk-&Tjޗ1pбEC#H0i'Mo䬮<?]COQ[#zetcP16Pt* K?E BWyj #ӡE[·?~=VsoLF]8AQfR11Uփ0/RBs&/CznA`܇Oc D0u`s&>Oy^ r}"#{BGbxvyЗ;2{Y<򨄆<NAyBg(~&>xH~X֡Sg^O>Ü@7$!Zk??*SA }kzB/nLbKO0]?P$(`A%̲%8iKicdkkɱ"լ{iTi8PC+yEAW>͕n[e:W%N^cobbYg祷:CU_ٵs7BѮJ:~a ?ct?[IF5|OE`󯳏˳Z<33^،S;2IMmx_ܧ(bU_n`ƍ)//'77_+λKzg5LZBNvF=MVٜ?)O!D;%AB8ssѱe_lo<D!B!: B! N!B!: B! N!B!: B! N!B!:N];wu+x6Oʥev9Hf]fL>>&u Z΂Bخx6Oʥ2^ }-6̍>&u NBtr>&IK\h`nŻmE;y_,S!BZ:lK\b>Dɞ:ϧoضBvETUFƍ|lsK:5=tTJ.ٿfG?]#"rnzFߔ6?a ;;(6HR7!J[AV+/? J(896S*ZrXhy)y- ='U*2LI 4-R'x&N nQ_0ܖBT5q{w_./6+cOɈڇ,G6{qA Jc/} K]y+{`8+>?Tj~Ϗπ7ʐ9ï>ϟ׿⢫Ze6^̊{$p#s(=3nJ(?Bvrp O?;ՉMvǵ'CC&￰bPL?{w8p3͵9%BrH$:,u:JQ*u-TQmm}Yg$H$}5?_!y^ڙ}vf}g9v}ְg|P&4gޝ;OӲԫTq xNym8>%vk8ֱgU?8xU#:;b&qpSچ|Y }L0?<m] Lg<Jh%Na~`(f"BޚknڒX:ɩܘ>]{ooc;j9^]?Z?a{=2M.M jB:&1VX%GΤ v/".֩G~6]J!ɶ;QA)\1my#Hx$߿A-*˗)R3dIL]*{*~>)N%҉9}WȓNGnDJ8pFGuaGH|0}0sŒQ\I+C7u/8m'8@mWrU|0U Ŧ(إ(A-rUb|L(҂rϰ>IJG܆=Dc(ߞ'P>eUZNv@º'1wI{޿ν Ti_ PThC'PeqqoL;3HN}ɘIe9>[{{Ӹ@s{Q^<q{f15eJ+BANZJ:)klpzV)qHNʤ8\{2åI27LWppv:U9?q1>;̓2:oSqq)^y4ئ(,$,E=G|z$*G94=pFr6PNsa@u8:*3FeBjÕȀ^mXBB)LETġ'4xlۓ%6Zekvk ߙ8<&`renmcyEe=;߾Qb3:^/ugcFkʎZ~% @MN8ďsAx MY3-VȜ~ҝuZIÏ֦cz t#&ҠDvᠾD.c0u,*̐f~؛ՊNY&cPdJI=hQo#Ej%" H#Y>ʬkJ,}Pq~0Pòp\3Hܜ¤'^O+rVRn,fd?H*<`lG=ӕ͍llwgFPQ<6MgO죜t)+O_4FŬBͫ4su*ؼxU\d9aþwޜ={zd〿C/cO'ޟ'agEѱ0{^E+^QTEu9,mxT-)   |%\BuFOL/9V   yjAAAx=q垘Լ «JgEG9RP6O*f/?c쑉'v {aׇaj   9Dvg*xb\{|.=IzZ/I %6]^{:a,n7+E~h>3q>4^cڋ\I1"u:Z'D;G5ďMgIQjX FTCLz6IF8h]ح^I&1NPtesPwF'v|W6&壹F<%. AˉP)4k"*`1j_ڜUJlH]KF@ڗB{e-}.fѴw,gq9>e+r)[+" 4&{ykOk'8YskAZˋf}CxUv/e:tJ[Q+T7 mnQY|f|pKihZ%`CC· +/‹V"+q(V Y%sZ؋D-ľ{{, -zoN'!y 7*uFM鸄!<ʟj{ޔm>Mqq a?Xm6/K{/U֓/щ ;rEJFmeKpHLIǯ'DDaU?5j,TVY8bm[zR}{P*FW x"V[\H};qqSUYqAp5ߢq]n/l;~n8MFtq8f.+~i&J1r*Y)*vHVe}$Ozۂnϩ:/bߨyh#ߠEGǼ䈕]3WA{A!ÕJ:AeQ)h DB%tTRH43y(P͢XsD^o Qz 9J5V#Gq+)Y2O"%pG5Ay7]h q'.# GaG\+ Aa$eVJ5ŽK(W.YzdBVMެ.Y8|!2wr+=G‹VTÆ-Yhc|{D'IsZTsq}2%sTH6K*(A[kq8vؼ +$0!U#LT}J䥣4+)aL+Z~G@CyӾdpx0HU۶,krN2 ;и{SX4yBxJhlFi?N*<;gg{K5΃0`pNaDir :Pgض ӷOIOJ3{6gڪ"ExwGJZ?K E*H\=\D+^g3p0j+t9,pⰏ\)^LZK"  BJ\U(w2Z6fل { )L]D\AAAycAAAW+er^U%ʳO죜t)'̟4(1h d'/+=AAAW'1ZfߞLDT1 -s9}(ž cGF]N Yͭ$xIVNzM:GSXo;a'maxVO18>|d[ K;RG 72k^N>0 zD7ߋ$1deyActzܣƆ M̆-ӦUqyy<8"#9РϻR#V$Ȣ9z5X=Fzjd2/gȃd8፺7(B78y*g>@}Ԡz? ]61ySYd=_&0R ?ږ.neg;׫0ps^oruSke:6\Hp9VIG霖Np,nmc{D5 /ݰo?G˞ ߃۾] P^bg(=e siH{&mo4MYva>qHsħNr3[]NC4OEFlk.[ǞUhPrϒrMV@쌫%M!heu+1,4u1H3'6%3Pjv5A}ְg"D nE5큟m srS}(gG6{>Hr)TRyQwH@ՋuT҅rߟ_ yEC|=dҤ ϥ'fTnX C x$L@TV3ż&.,E슖L2.smUG6ZJt8;/ )"ե(@ؑ+ fDF&"  SzѼ J$4UL% FL[)s'EE5 CN'1 {Qg‘?:8,ѾuYE%dӧCUR+㣸V~=o2^q#8h%D>eؠ,ʗ cV$JJG*v zDsAw8_*5J캴y6%&nM|:" &x\!D&mREQ$jH[1 >bil f&c~'9k.'HGGztLM Ť ɞtR4$_g S`#IqȆ"OTƴ(՗(lt|$+4t)Z4V֨D,챲-XGTh03 8*EJ  ++w8##lN4ZJ3 ukBG@52H G1V  Bi3lb8MRCxyHP)LxV7-eW71^# >oJeT3@2yS{3x7` $8fH<͔oPU2+q ut*vj$k 2=jJ$#YƦmQ'!2UX8Z!_<9e% agOl-iG׳|.6KȽy谹9FS`R5R OEjuRPJ IѼeE f'0%M5tx iY]t9GE7Uaŏ\-]ņtdg^rB6K)qJBLKs:*o۔d ,$|,Ey"2c8a [zT(%3q G&H.^8]t@Һ>:%5*Rc.`0"W=\dp07ª9-+ y, C9K΅5ֵDz+L t2~B`Y\]v,Q ?W 6Hp=Cƻўx5|pz^g~)$ ~3y<=auZy+Lأ m7 YN;đ~ル儜)\Ҭ6GLڕl]uDfn$T4dEq*ޅķP IDAT5D9fsWMϦǼUY|;Q ը=ۇ d+jRIg8<ɶ=YbA]zP̋:?ˁcXq?*.c+j7̾`Ϙ~k!>U?wgCRA~Cc{GQ XR\jmhg-alq:zuT UO=98h4˦葬*Hũ]"H3v %KW㳙-0Vt v.A}RRi>z&151|-fJځҿ:M-'䃲 LnykҕzТ8FNdKD@F|YהX3,4M;VgL?`3;;6e1I3',X8S?鑸9I9LKOW0uY )TrA fݥ8e%|J.]'2l=|g )+PgVjيFA^#嫙A'Pxm>i`d2d˸6pɢFaxR HϜ3Ӊgӊox' u[$i3q$'~{be0\ヒ ]=|Gn ʽ'xʩ8<ㅐYYRcǦ'*cЏC?Qgfuyrv 6ڤ8Lph6KucI}טlzc>=n7[*ѳ͂P줞Q2j6-fwV"Y:v-=gW㝭̑ʲ_58 2V^0&{yMEw_Np*6&'ajgxMCK8[+2Q2iCX4N_ٳš;bJxwZa\7>onj?pj6S`4ƍByM{t!_mνOq9&MQ2Gؖ])6e \F鳱~vV3ܟk[i PyTu:4t繼^CͱѨ@ٝqÏv5jv)|tvhX2c~_j+Pzlhg/z t/%@̣'?{j W4"\'#mMYnY Y@R4mUaҏP^KZ_%ɰp,kN"*tt&蔶J3ћapרW%6Ѵ5JՇ1/f&.t|\0߭0F֠0}65v*F]/|ϔfv( 7w<2IM/X9JgiWyl|0.n #sԟ^N!-Msv&T>rc Q;7ϊ&VH(`,Q[?VP2)hmGj "'$w4*KyC`#CsJJ-EEV"ESӮ0a(([o/*0Evq`[v9/H瑝8f.+zif;Œ,]FnS]ߗ]g>$FE|- kM$PR+qtRN˩dPۙ#Y[aQsIVˮFƐʟ@ޛPwJ fiwz ?//99be׌'S>_QjDff ; /2ofguW8* a%LiGg/%`L&:ʴ/Cv FSkKI" @AC5"TIp1Wq_5,yYZmxo kO'۱"&6k|  8B8)e![;G Cj2]"h` q6n=}/$ TI<n0 R,7=@ v^M,SЩUW;AV /sN0hjI!ܞI}23xo?8,R(B\&KqƥRfT.w b0"= ijEI B-[=ƘXм mA({PVP>9*$lq%]$`v4>Bx7h1߿C"HY.C1i8 ]0N(L`|.S鑬*iP޴"3Grj8Ko;a媉0c<+Mͳ$bҎQZ'ņ,=Vǽ¯/2ne֔|`@2w nbOɾߤ!+[-706lLh f6nY6MKL}́}e\"D^gU@/a(ZALy 8Q1_E;O(ToK;8fbT6f8w*äF*P}V;y[*:+ܾ;#屽\e]gz!Zc-|U=m:>[u5o6D7[zwspO6vdb9uI$B z_1i! D6f]18ǝ"v?cr:iμ;w:o\XRn}_"Vvk8ֱgU?ڔsxU#:;b&qpSچ|Y }L0?<m] L eɌ3=]MlЅch5lhYaǬH(8>榋ykrv>lskKNbUΫ HE#I B9OcAgGMlz{.OM.M jB:&1R1c5|:X#Ɩw6rMl4h{`m \dEMVp=SDܫK÷W5v$ vWs]N0 Szi=CF!=iW6bFٕla$YQ_\NΎ Juo|p'# ~ p@ Xz7}i8MWh${>>9?a(_vϛui߫*D>eYeT:EjFM+qKQ:RK %P' Z丫RPbץ 8D;Mݚu~ڹ{|y"TZNv@º'1wI3 {P=O גyӖ*UEbY#Vϖd %ti7Ρ+AAh\ND6 BaPCs[J}ɰbArb?}ۍ'LNrexV =M]i [tQ|/8=GF3阚2܋IA=)hIiYF"9)3'bD(,.#iQ2/O{6Ca Ya1K"F1#bh v3@6`GVE#[H!aaeI㝖 =n(M{{.h!)8x&oldCz$gc͉FKixAtM踹Fro439STgp&LN{2~5TR+5 <:6o[B{, 2cHe_%R`ϛRf,> sxLefxo@HpqJ3'̱͐yޛ)6|1) d ut*vj$k 2=jJ$#YƦmQ'!2UX8Z!_<9e% agOl-iG׳|.6KȽy谹9FS`R5R OEjuRPJ IѼer4s<AMKNܴS.o*G]obCD:]׋ ;{J[f7YpO#ۊp)Ӄ8S SqinSB@M`L\TEBE"OSf ',au+PdC;nD\ gk:HZ;ڼVFeBj Fd@{ \ۙ nFXu#Wbe#6?ϓa}('[|ɹ0ƺVUHzrٞIr/QۺX\@UiV ƣG&QޮB:bJn$T4dEq*ޅU B|?gV:weDQ{Zlz̋Yz!ɷ3p5 P}@VR*&JDzSlۓ%6Zeͼ>ߚé"!9vk ߙ8<&Ssw~8*d)q =<{ N%ev>N f}Ov6xA_FסWGRjԓFlɪ?QL,'P.=:cg̠^¼t5>ْJSaEpm7.!ﳬgSs [>bƈɬ4(Qh8/)MsodB'A$ z~HE,a^2|03'筅z$KW:LAn8SiZ~3H2K_ilܲ`f԰,&i&s3;봒}c1=70)iד99z.a#q3JPl6ϣW͍llwgFPWA^-τG9RpW?iNYWiTy1Y6iR/ ޽{sYIJJ"22  y9?xz''iSО\IZ=As@Pq(*H "o^mxT,-) SAA|+W0t}sg~ɱz,_x  o܂   %+giYO DyV}3.ekĜ[B˫iV8Ƅ&~}8l({I [u+(;zr1  B19h_M{=#iA?szb.x*]8Jig@Si%&˓unhmE1rZDp'vH&J{:a,n7+x@̉>3q>4^cڋ\I1"u:ZC>t^sYJLwwa$w5(U \l _q)وdLݽ#V$>{gMcu, &2AYۆ_e_YB_Dہ<ʙNZ~zG7]Xˎ;ĿK^GкmoBpNb;Mx IDATAw~ӏ}c1ruw \[MF ;GrBG{ ,&,^ue G@ܓM/gYYRcǦ'*cЏC?Qgfuyrv 6ڤ8Lph6KucI}טlzc>=n7[*ѳ͂P줞Q2j6-fwV"Y:v-=gWٙgY.HgPrYwÉ1+ϣmҖ/32\_wSE4ʹ6i?YS=<&k\Z?B^I¢IGp|ʞEV+ܼӂ6`O B!=|vW/WʗۦQ'u6nkݻ XEB߿gms}:w/`5inݏ9ŶJ̵)K`2zXM؞)\J붎Hʣ Ѧɠ;jmFJt~`V3|NqpLSRf/ ^?s 9B5 \OAwԂ5=ytR_ߓ5p}OFD2+di9ˍp?+1 H7J5A^1Hn(hY% 뵤^қ + r()@G`Ni ;j$9hhw{ΪUns)MkX]}hxlfrnNݪadm C:os_Soy)lrLifps*"Z̜tƣ[=,$PThgPic/[涀q(ئG[NO;EnN]@V,c+qU1k7v>nsn4^X#9?ۍ~JxI|-?JX7$21bٱ r Ro=@6\IrrX)@Qя6HgD}x6N3=|~(uniŽk cyc;.S‡B,SOUIdF^̝$Ld{/U֓/щ6'ɩ$k4&]1 G;Ą̜t\hd/{m_ ϲJki;*&& Fo![&g+:x7(Schdƀ.% 9%GykۂsDxN-2@sg4DBr4Cs6m1& {ܜ0ػ&KtBn(eCeT=E!"]P(|KF6e@2w(HWRq}}>@0W <(j.gR.6cFZMT-y D|i5Z{*TjE%-uai%9}|3{Q9*ȹ%H nΞFK(p.OQG~r$@FdN0ogگ *#W y ÖtF c0d9«3xtg"7An% Y].M"+͈S,Jrr2 92`N`]FrWOϤ%P!uEYQ{V.$›Féwq}^续XRw켨k~{#kq*:X ɤ^Wˠ21Ui}/k.! !l*NcaUn3Rc?Nr58MU{x?8$4 ,pY-ZNN}9wFɑ æӨ$o2$[_O!%z9kZzsyc-&ؙ\=pir1 c@Aϡ&a<;[sT*tc2]ɹ+B.O 0nuUgbO>7$t6֎,q?'FLR=|ƦFcF/GuX|3cHN4ф6(g&ֻʱc]eA,Q@H .ݽLc[Ļ~k=kA1_V2g  U ԅ<^T0DvyVy ʯce1 >k/ҖQ4ɗ <{<{bNݎ{|LHPix̙s,ͳ'&LXf"ЫW/MOjj*̞={ <>8(xi 7\)m{(eSij^RFЛ>~@NƛI9ͩ,  PJ\+KQS"_.3`d>4  B "BAAAbgrZ3'QD^NZzV)3g=}LG=3z. Ƣ_Z,'  9(-qfGI3_B֮[) h]4<`y_sdd#G;ys2ޒ*?#qAB!kbv$#/A3?Ⅶ M!f&y *']F_d̜(eo6r`V{63&$~w2$Z_ u5OI>gm ޔid> wH|1i;Ge$K7ɠGJw6lb{6ctk[bX,Q XQ )1-bx\ 73yA"$ '~1]+<RY!|I^IZ#h]Ԭ5{[89e2Q-h㵙Xyg6u$j O稡ع*wζ{IT]' NgװM$4l1/vtE*by{`qD>uKjWƔSzZDVW72<_+y_ѫ+\<8a۹ѷ9{z|܎ 3\i * _rFe#iuxDy>CLsL/xJi=p25TI=}jҭzD6~ gC;'AJ-K;'\_RR.txYsTD߰%TK9ٿ1ulK@6Q̟v2#G%ĎK;{9 {%3 %cQט"9 xkg˟! HEeIKUQ|Ej.;{(aoo.nHq6NeL؁͸y':Ng;4JӖ3yټE&.bYѢ#6}ygֆj5Vjt r(Wnףګm(qITWǷ#/9K EF_!߼AڗP#Tγ7R63'*FLY!_OhOJh%4C"%G|]ggJz$ 5`߈/xaSzH޼շ9;Uz?AcR2iuM"bk|RbxZF1!v l'#пM+uJe%3Rg}Jr< 7RPе-nQJ1bo$s{p9&E$lk`+'qs6D$!W+S)s_6fƕT8R2td.ȲﱠJ?;IJ-ʖ:V:uc+t*2@J8"|(0Dƕ2oUAAڭކ\D\:䙌lR㻟ұ8ZΨ.ynozז[Kr;Dgg\n{G2*nǧ#~YlKȜ)XN"-5:.f6r9F{5w鬾K%9P֤3?5?]OPSSDіEKY}% %ءlblm 4TnepI-|Ԁ1 nJiI:HM($J8Xz&PNC^e,ըN4؇~Aj( Fn\M¥3)ykbO=4'- LidƲt`$M9 jڲ,M^Κ?v1u,~5KH6`s" .K޳^x8Fa'na1qPpZUȸA]ȣEE ξwA\NףwzUevfQ?W5pzLJSKA= = 'nXKjT})~̙GUXgOc͘ !4zExxIMM%66ٳgr/8M!㦞+-qe$uwрHYiъHe/6 shNAD·3X}q;ǯɪ<Ffh2ٿ/"Q0dqen r@&wN X4ҍHw|UmͶAn?׬S]|6sF]2yP ʔCsp9L•F>^ϻ`f\f7>c vanYU[Tm/!}X/l"Z 8xԉM"N`Ӌܝc5s+tb~NTg(Gݯ\,lЃ_e纄{=ơAх`|5Le#>җ`{WGLE3! f^kqiMf,c՝"~MLzQIяAWb_>卺0׳-NWsK㗐ެpykUzٳf=\7 7o'؇ۈsǕc؛YD4cY0zoOaΟ83csRw"Y(%)?e}D.n6pbLf뒓C6t0Ӝcu.rS=$>;|ve XU{T̝dϟmn#n|3˯WPJ+q*9._o+Wo3>%#"kf.yq.^f40j|f "&[y|g.Пrzhp 9LXL^nȯ(i\4>ZH车 I~Zn32Ӷ3B, *5G7GO #YB[ `Q AG7E3*lvJCD-J}XK, | M5v@?s;őSfrOD 8w~0>Gkq#n ι RIĐ߹LԨ٤H:EeMbFN%ZHP¹~+:bXi&_ ϤZ&ȺJK^`Q.Z$Y8ٟcPqgLƙ4ak<'/㾙É99s\6uK>C%gq5*R*?mu>:JNv ]*XȯI*6įXG;ȞyH*>:G _~OLT TCb,Id,_k;rPnēmb[5fVʫȸ|)c8ATu뗓HxOy*R.Fk'KOٶo?bW.R\0A]ܐ{#2fk IDAThvRޭEJ&{E| }<#{Sy;d4SnNAo3vTܺD>AN}Y; .hpvHI)v;&tGY~mu{Y|49D?}W|{8#6: KhdsQ3谼mX9ckt\%9\'+GLP \z "9ڠJFJߒ9e:b@h^O˷<~8qk8@CΌ"Rz!%bS8lH⭜=KxlU~T;cW9e-ȴxLFk{o\J(:,$/tf9*G9h eEtELєs4j!I2PogRxuO.VY͖An% Y].M"+͈S,Jrr2 92`N`]FrWOϤ%P!uEYQ{V.$›F epa{׶tn+T;;/*<ZiNGj.!tc22H1ot8ڎO;ay{N&ny4<2ZP W2ۑ:[.AxԸ7Ţf'1!*WT&bʽ,wnpS_5`LFr,]vS9pHO%*@!1E)ʌq p1z mh8/?zW\.gű;g439X1svM=Jy,㸼yr.Pɽ*ngr IYz e*w2 O8!p!.!V(iW:=LnY g9ҟ2`Nm\H*LRpq@(=Ƽ8QuϒnVrSx(華 "!M@đ}{'y|;j[ $ѻUۈ]^O#YPnlcSÑL$i ͫg>jGCgAÙ| a( *,2LJ1u {ɟ|Jo H68N2nRP2)˦%04NXO7/S9Q)}*5N7rSYAA)6W>$ƱǧݩEп\g*|iNeAAD4   #Ŷ%.;; Bq%gO‰<SL Egt%p{ph{f\0#gEX.OAAsPl[̎| 9f<9I>WZ5y]1z3RкRix(/xmUWlݥ1P^m"&+sxd3%y}$i mhZw-bG{v.Szho jbXODգ?i֏fcğ֑<brP;%0Rs>vP$c c?ŎHE,a[{jf`iۃsJֵCD/]!tj-8LA3|qNŗt-B1]71qQ2|s c(Yecy|ay0c|u+~DJ%+Ho㷐p6sBa dҾs*b%2KW]Aꊇ5LeH [Iu $SǶLl3V*+q*c4Wޥ!X\&s|Kj{F>b'a?Х5 & )ުȨ#˾3Eq08Ĭem8< ˜qsx-?bg;_[)iùxm5qSL*ζ̝GY hYH^>8BAvGBc*&7ovh={#eyx,$|.D<1eQ#Hl~J)6Tt_ MΧqb9=.!-]PEG?9-PXy Ѯy﹑y7`ƞ8NnjIqt]`~˛ݗ.XmBxJ7o3Rg}Jr< 7RPе-nQJ1bo$s{p9&E$lk`L# qs6D$!W+S)h57J3M<ﰰ[\e g%WtL9PYQK֝<MZ~|S:vGv%Ҋ:&7z=N4w'N"[^L8Ž_?Dz:[.2g*ƨqHK)MZ$TX;߭J6Xd(ml޻k刍ӝ4X{OKܔlPdn̞7PǓel~`e矑5}:/$YAoS$b'Maϡ^`٘ N `4kj*&, %OJGhH֨LJmM{R.`N ~x{%#NQ\c)&y#WBr?QKMw)``f3YR93h? Qr& *Gfc6u,Z$[+,ȻwI$7"/_&9ڣMM#WtrR4X9۠=3[^N};Hy#j.xIr:_^K代#ֽK2YԕS;Aopkҙʦ5ceB,)"VhעYL.]2ٚaʛ=T~ԫtS r+Kb" o*yؕ/^Etاgr/gJ.ɩV%# Y+ۍ|MJ1\ƣW \=Ȥu}QovEcNFd# 6'r^c%3 ; D$r}s ob]̿!f7Žɘ s!'tB?ݶ.mUc%1CfQt!QF:S=7U娔͡+?_FӲX=  ZZm~ɱ8|6# 7b8F[է! Y+bQWF6CڵlF$Qgj]6iYe<)LC>l6th˷冞O{(eFGJ7 ɹ uMdg{y0/ǿg︚t {j{h WS4X2věd&-NCy-O mK7(gm)I1.t-d۩L~HlQh}ʴY"Qih8&sQh=FOgtSY-n/Yb ;oM&E)QEg"!;43.Lh˲4y:kFp ԰.!9ۄr IKӪBU BM /*JLXv rr:͢~+kX2ɗ <{<{bN8wӱԨKS<3.ϱ4Ϟ1cCc&Ch7ՋpJll,g"c!J)0^pBM=WJ[HytT1E"Л&ޕJJE"'r  Je%pJn>Jir+QNAAAX%   B)Ql[⬭: Bq%gO‰<-{S2v6ϭ,?sVG g&9!b|rqͯ?fϷ9z_=)ȩ7o+Í?ZwkF2wVlm9F~J`aKt:ޡxMO~=FA#w;HQ}`4p@2+ݲ/ng##Y mZ'OF0 ,n\M\hΉ>W\/ҹٶ8q;!v^HﱿQm`*&bϻϑ˂+ƎeП[AyH::oMPJR ǐVOw ٺ$:VCI0G5L˯venuY˯SG1~C,`I /U{ɘōx[69uHg^p@*jT)TC5kU"9\ ?^ќNu#.r?ky4@PҸ0i>|^{M&ʵ"gT /? A`Z^XOHƻ elg*fua'S1Ըx%WOu)߮gby8v^NiH|ݿ0\Ȼߑ\]Nō1`:n+Hj'C~Nn2Qfw" DNJ9!hu ^p@ hx=g &c|-?jZ"*-y+GϻhŒg$gҎAkSUoc5dI [ԀG ]9yN̙ϱ~ߟz_Q*9qGW RU\xJ疣vŻ{}$PU Jq'( P*LRpf0/۹wKV:tTjU:F~%NR%~:bNAk'FR?sdTN@5ɹs!mѧ+wc'Q0{bh<{lTHYD2nQ$.&>Msf۾%wq*s)..nHڿ=UsHHvM3l~s4{bnx@)"%ڽ">>ȉ=ܼg2V)nsLY\nnϊrn*nHA|>>%-4Գ|1w\ S??7 ){vL 菲 Bwi?vЙ\$g|7gO%Y8O3GS1PZ($tL@UEtؽAP)|>HȜ:a~93ϴ_M\UFS]܇-%Ƽa/?+8cwǕ r5h,lmBrInYiFbQ#Wȑ Fv2:s}z&uO. y.0k-jڳrط'7[}c80۽k[:l]^-;SYG= NEur3;j⌍CSoa-+AH-ۍ <jܛbQ^y+Z*K^;7)0q#[9.;OGu8b䐘"deF8Sg =}6w4euqՎWX 3 E?LT3/VW8n8ՏsT}lJlz; 4M|TE,Doobc9x [oex/#}6ܛAK寖Ӷ4t:p`I3iA1S;w kYalzLQ&fKf`g~r}ch~/Ž {<~l΁{ڢSЍhvC)s.O 0nuUgbO>7$t6֎,q?'FLR=|ƦFcF/GuX|3cHN4ф6(g&ֻʱc]eA,Q@H .ݽ'gj(,&2. N W2 y45(1apT (_~bV1}6^-^ IDATh9 t-Axx&:*ӻ~u<3W?XgOcMDBCW^|Tbcc={` 1 y|pP <>8N2nRP2)˦%04NXO7/S9Q)}*AWN7rSYAA)6W>$ƱǧݩEп\g*|iNeAAD4   #Ŷ%.;; Bq%gO‰<SL Egt%p{ph{f\0#gEX.OAAsPl[̎| 9f<]1z3RкRix(/ ÿ؟*G*Aw*AANCҁa=- vLr-p>/XD!f&y *']F_d̜(eo6r`V{63&$~w2$Z_ u5߳xȎ>I9(#YvxO8R7 f{;pշ[ݢgPŽ:^MiqRH<3 Y8ѠZy,J|KH 8 A(dZ\fЮً\!ͱ.9G.hAӬ ;?#!Wy:ܓszȞ[Hԫ0Z>wB*`}Osatke*ַMhiT%vN]y'4Ml~{9_Ovvu݃οNK2OqwfQ˦Z?sO*_\]A)J´R^C X4W񇌱G3^>ișf8ϙY!Kaemd}2Mm]Ɨ}WcY7ؗf|esrْHLaߺ0tm+q43=PúLg gSEob}9> ڍ_x%) G:(-I+gQ's_ࣷ#ױ,.5ΏޅՈټΚCX2j7~c-1q9olb;ki7s3ż*{m/˔!YQi]}Uw{:{}kZn 38W2hx>2bȲ.ATH X"mYڟ9f^'pk}/ %mYOIr69S1+Lq)* 78@(KSi~{e$;o> i4cb 3\h7vfB (WExj?o`V憧 ҳmZS2Jxt \{mwVpx6JQV%G$VU:+_D7AѢ2F@R%a&bpkzy([sݿ-*( 1t Kư,Н P~d bɻ{юO)шP:[ɁәpNǤqNɴbEju~;ڷA6*>.1v"wpkf5.܎KCiiIYF"5%;;1L.C^ h]2/+]Caý Ya1CN@ge~V/Sim1Ls, ΜɡeHv(46WYYQdN^ю$y7fDƎgѪ\\=(L睱NH Gl*/Icigq]z5-oaWqAʢVW@S2r+5"I0V2m!cX?C-4fމƀ[e Sk` ,8LfHyL>qPRq,tuLt*Z5fYI&+UV%٢NI0id'pB}S3z|Hd#JT:*Sud^38㋝kEXboyo]h4n6wsM< ퟸ8cx(q-Hr Jϧ sSܨ#sư͍NpWVVIe5dߦp.nG ӈKqnjSB*`JUCRߢXsDxNq9e֭sm<,^u Yn Dm cNr7Hξ8i/}40j7u-I<{0ɷ6^.g5 0D " ^͑32ѫm@O_gb}8Ǜ}HƺZ%H L73epXRy<~B Ƙ\=] * ORC:wLYn1@ /+bgQL> ;i]V~ iŀ10}dQDoCN 9P%Lh\"kw&G&a6ި@&/?VIvedϱ ɉD3Q&ž sY6sFJfY9z674rPj,quTx>B}@**ag3Fl3oL3_j}305?%$VԨ?u!83FTä:TƋJ9J}E=o=9r.N'y:˶>SfѬ ޓrQŵ`jTl\M 8?QwϻcdN{O9GMCU2 ҙ7{TaĉK̀-(0VxI'fAB:Wi!¸'-[=8p K Jj{&oKt1+T0S.+DiFnÄF0F]-IDxfY.K|*|3q)G&3-=xt^ϴ"2gS9)+ꃌ\BlOF㵵mwZai /ųgOl؋wL2'#y=4eʡ' }D.] 19s0 `(a<2>rNrV4V+z/_nlIʷ9sps9b'_DLֲpOîJ>G(3o9]-эF OW[= akny+,tmX߆]Y= 冮eK7_]- yp:8rob'$tASٻkFa( $3DpJ>Ϯs<5ckbW "/91;]˜ge WVDz!.?F!030}I|GȾKK%.94_97VG_A m)voYC}c?^5>oB;u9Nq*Hu*Rwx*PsZnFy[ad+躲)M#p X^Buy*okȩ\;.ǖum+Ggy/ou[$@]R֙2d=ÅmFJx$$$x:}wg=I;4AwOg>;.Kd.ޖʴwBɝ$‡$0/(j 1("E-hmw}&J2Í'VVy#EW(N^u֊$I~|ާ ޭN '?qƻ78QF(sW9qja79={>'}|ݪ&NLb?W騫YmE X{mMzf!mJfQ:nm,$P ƧB81u爍ħ-[4\K"uǼ{7ǿ9?m]@Z,bqUq+ywy`ʽ6G&~&T P(mI_ԏ?/X58'*jxo?ZXfE @NO`Gm~ۈ| 1IUi3qw#v!Q-g$@ז~'<$Julp(:f ?E'K9|{*#uS7SHk2$oN8&l3e܊MFy?;g'`r*II>na@{>KمXʧMeiE_ J9q ;,Y1Jaဵ틵sdrX_ ;I x.BBv C{? c<:ɟ#G _t7ȁ8D`97CF8Uy3RPfZ6Q?yY).VoQm+[{p G+-A d%j JY95 m`n9)ӑbT7C`>RJ>G_K"LS_dw}iRr~*U i2Xe& |y4%0ptዙ1OuqR=*33<`L ?QdHOclH&jPRqLrM䤩Pk͑0Dw$'T#/*d3JV Rsr5,%Uax~Nը>}է~pKH{QV$g?)/xg[{bI\­SK}r6" zWBQTM HkQ:OB $܏gV6 7N]؆3f$^A@K.,j%o6"ų0Vr)\Jt'*c*®bDe¦Ȁ!|#jlA+[nrc0Ȁ{p"QG%B2>;\/\ 8,kQe a/#^O9\Ukr 8plV*n |i*T#uZ'1*''{Hmޞژ~l]Tf¡P( Xߓ(GlR]FhWx6G;dۀԯ[l61:ߍ% 6Z`qOjCl]+̑sqf2L-9b;zݍLrNoTX7yMЈ=;2Ƕ .sP'>󧩐Žw0^m4Bfgceup(x Pt(ҩwG^sM%LƧgܷ'=U9:NCK;xKN_Ni R}|*Cۖ{5Xb+öi^#jZ f ͸>X-Ž7d`!jmEϼf6B=#4)iǣ|<"1d]mЖFt"Y2PEڔ*6#L<+#oaOǹjDVXQ鍷XP"g*՗$m #5^}A=>JcߤsAMT!N5S!wQ׃jP5;S0roa W4X2Y{dFQe7T׊==Wa̵}74lT($GԂ_y6657fS?4W-zNRq}XϙEZaWq>>O'pR;XDob˹ | _"AJ)J´R^C X4W񇌱G3^>ișf8.OQjې{u7}`M|d أ/bDznu3ĊxCNƲ99lɍ$o]zP~]™ a] b&ij˼aLƏլ0ְ ťs(D4_x! pBv,>=eyꯩPUSUn8'$>:87#Gjďt>:]8>j7F@N'br7 Ig&gѠIIjX8:K Y9wUmde6w)=^:+*}]=jh IDATk(!dh bTҴ J$k֧ & k}/ǏҐ3IΰNOc A Xi#=Kp3CItlnO{+=}bxOnMڡUJQv1\pn@țŗ F}y2*1zVBa&."Wʗ16P:)s NYr%*X(vjFY[y[Uows`|/u,T_Dv@:˸[y8I*5;=o xpp |%0sǚ}> =:92He=pЇrh28Kd2tCr%cX^sVΆIg >s8ȎtLL+Y&_O}4o3!.C^ h@]oڃ}DKig^?;琖I+eJm$RSq#ӟ\͛ֈkڑ&b(S^ULc 7M -찲}"'b~ Z9Y 9Cb,PőilzȜ'IoXuAeWѰw#5lt4V@=jGӤq=̾=]ES>4S"1dFUe:uBJ8®fS9V!M86(iwUF@{@|}T$ӊuU&`V7#-dw W'R92{1`7&"4fމƀ[e ىERk` ,8L祪Չu$2g|Y*ɯ32fKׯ#gKW֪-0$~HN2YHvSRɹ41dVȗ6oj&V-:?3KT:W:_2u^'pKUz6z*W6y_t w~" {o#e䝘,9#0/) Js0-k`t* QF\Aڡ3ؐ?]ޏ¹wrߪgWGňx>;I6-1sHJj-E;G>WXHګLP2ˍ!-rI_Ƶ'efRV))Qw#2 ,&!DDV9rF&z-V6 9\ 2xo9iXWI!\)r֖J7q-7PN]R+JR] hNɾ@..'ܶ1~`H\ 92crt)<.YUB ϮǂIͭgz# A ('1&{WWJ5g(TOb6}1m46Δ1K~0^3SYBrhEc]+lҍS?s`DU:LCoio.TľW Xߓ(y3B2ePP64C<2~ F' pl߃ TA4\.*'N+ dkԮY2 ҙ7{TaĉK̀-(0VxI'fAB:Wi!¸'-[=8p K Jj{fֻ;.kRQ!|ͅƴc>[dJѝiR)E<#gDly@A|)XV o4z k7a^#i z.$fL<3k]ecY-†jwg-yչ{LҤ|G+VPlP#'ee]}z=`~:Memk:5KoAx)>{bO^`\9907E1s s})S=1mO'tBHH夤̙3Cc>Ϗ?GGgk%t$Ů/@c IW|/^C= AOJ|  Jd#饙OHQ}/~u'*MsX|  ܊Ǚ܂   %DK`ep44nAAgFqyq|<LǼPc|+'1Qb$5|$K 79{ؐ|=͡FbAAȎ:$_}Ά>#qx^AaCN]iԫ*-B;tl),][:㢒:Cwq'ـdT{_5.sǓ1JZ\{A'w2̙EEAxJce2d$R4ؐHd,YyiF$3-Aұ}N"gq%68Dx{L 972o1Χ~-T+76&]aOIjؑP`j$_ a3 &ٻ92H.h> Γp3۹KJ5k',o҇ϓBIr*X(@QM22reRqmHXV{Gb7Ns32-K!Jφx{qtn{[v#}߱-hg xShp1̵d N,$Ldrj: )~ȟ,A+]fD-)Q`awHVYg32ȵB}4 Nce*QIYOs{C%x V>OHxAw0{O}J 0s&WBV>x>uSgQn_bw}Yb]fdz=Ƭh+|OK!>fRg5{LJYF  Y9mdf^C[NI#'#oԃ9lj}\nn^ { btz Va7\*JJS `Д2%D&(U1 jN-|1S>@+ݕ>u?![mѦLIL/fBIme3e(1Q#YZ"Q5Te^dVڢN!@^*D9YlsX9:TˆT#zA|;jm('SsG­.pj:uI6钗{c펠-D+εFV1P0UVN%+^UW\~#X.N;`]BL-OA ʛ5ijk H+vi)$UMlQC "N>.w n'CMB3Xn&'xf4tR;&7f@6w;kٴ.ScaϘY%oE̞947y`M)bBi{eJ(dܾ-_(v.0m6viH\9E LL(#qfn8HFۣ~e%"WcuvaeJB|KI^ Y[c *o'1߱73酏dߌ*5'qκ{ʟDZrH-zxpp7DTS}5IY6ހhEh -ΝP= Iz"9һa~P=P ůwm2sM~舃@CH1M3%ZW& 2lt߰j˶h+8GgvU4F#ʔ96j,k( .](a?5T3+՗='Q3mWC%e9^Z۝z1V)h^ ʰm$s{׈Vs̗zٓp$ZuLx>fZm@2wIv-J?IbɢU̕Aķkty2Hcݫgj/MgZz"iE>e>Ϧ e9r9j  B3 UMjoldۧQn鍛 gτFqyqvLoO.07E1KuC<1mO'tBHȓBTT3g <&d\%tܟAaGh*d wH<|rO  w m#!шԯX\_WE񭌛v )2 ;o L ɴD&7=ȐOY3ޏ4c"K8{JIȅoPS%sVM=BXdfOݮ3&'߇Ytk%{|5w-`Zy~aZ} `DCأv /k }4LR3xazwK(5xۂmȽ>]W>L,SxvXF'm|w;u}./X::''\- CW9VBʯKC8ӣ5ADxv&,6c>彽}0Fs{} IVkKRfuQPʗZ&گX.EG>Ήn:r@\Ǻ48?zV#fF;kaɨoNotF !EM4>;a|ރ.S \^gEuV>i5`΄\xH9wUh l؆rJd3$_m}́0J=9-8+\3~Q}H/lz4L3(OڏF>Uiu,e p3CIlnO{=KWWFnހ}1=L3&p1Å6y#oj_j:n&4@B`J9qJ<:b.½6^׉;CND|BE<k%N(kb#Ou*mvEeʛhNHX`w # )P[咰fC1c=p{<ŭ鋹ߖ Cr%cX^sVΆIg(h?z4d@qd$LP_t.>31ᜎI֝\ił1wo7m&3dUR_]Å?6sȫK_|;83 nǥ!dL4ؤ^a,Tbo#Q&^W6K{@Lc 7MX ;l_l[NNE2̵r@6;s&"YH#^eeF9y9G;N߰>4EG DϾUiZȹz QdU;cT_H&ҴGѷ+hDZfG[FS2r+5"I0V2m!cXнܐʑ|Ə?VLzC-4fމƀ[e ىΏ^#a)fL<7Qgd6YșUj$k ̲2ɽ%LV̋%٢NI0id'pB}S3z|Hd#JT:*Sud^38#ʿ@͊"x|@M.G47\;ع&]M&@Ӧ;o7 e{̢%BaQG67N* QFXs=9HڑYf݊?UxR8n i%87)@LjMK%*@!)EBoQ,9L<'Qg=Q,7D 1'~jj$g_> HYO{TFeFzܽȀ[/\ޚ "YնXH'3r1Ȁ>;tPc]J$dr}&ɉDÙ2_ 8,)GeF姑TvPT+c< G&֠s@=~OqEL%~i*3(G̺&i2p3-:X:{C/T bJ@>Y#9U''p@f)P8%K@Ļ1n,k%LJxVTRr| Z$_F*->dyD[1.#f֨)Q`Hx)EòG8'SRQ﫱Lq1Q,eI>ځS-Yi:En7)FH֬-hSIsUYF,A.ؼ3.nVDr&6K 𕸹Ť\]aE.\:e.Ʋ~iAnLˋ_xp,Σ3&uΎ /=<ʝ }1҄3bi sV[,͛'ֱg9gcF}l{dっ.N~r&~Ck'q  YjM98LJ5Br  ʊe%yDXAϿHYqSQNAAA^Y'   B1Qh[ܰ Ba%gGyy]Vi9tXYNY[:&<#ZޘL+npN6J}5A:M}AA"ж8(b:==~#ˍ.c&^)<– h 2?v &il<9o:ٽX޾Vl o<{! :n8 Ɗk{>i'buHe0f#SPh|FFFԍM6L4'Zd=5>ӵEmqϰlC]ǃ#2zdj>:}'=19`HF40)\v ^?dmЍ:*'VWiRl@ͧK8u&]Wg}~'7̺]ħ'KjoOkwfI,=gU̲ίaowRo?oɾh>SN D2h{kz SG{;.&"NF̮85j%}tB=g-CoߏFG̜,ص%GTsr~%u й-kΣs;Vyco?6N8BJFj.KdIu?сl/<~8=l>A͂P䤜Gq=ib)LXɑ|bř.e֓g/b\ONO^L`\w#+9.a{H&N%},ɵ '9R@sdX={yM9CE8tx ꄼj U%M( w:6$YwW\}ŴЇqn ĀC} 7 埑;~睲gvNP u{fl߼&٭[Yx!u[ߜ]=hqm/x DЄٕ9Ӗ{r-6!d3=CL|hyu;m!*[I!<719j(zrvRnt:__)߽FwP`޴Opt~UJ%%_Zi|(tڔ61@/4ss-^ |/<"NQ{SL栅?5x6aeRmi5ǙO$M~m&B!ғVQn+\%XqḚ&ȬrKmP̝dΧ1g-j;U?å24n0)Ah(f,LA|ew<_VХu;Cc\iMQ.gV@+csQ:ڳ.(V9{41[s+@M8m׃yNO;wmG<*CΖuʘEGeW$DJXt=yʽ:G1BDTT£HRHY9į:a)[OמzP"2 ?ݛqļΎJ3>=)az;_&9hbo=9!JTq?C am\8Ev(b~Y Mʒp^@F%M,L~X8I>L8jJ)'_˓RHRJ̷cdUv ?I8ÿg@g)m}>+ԝԗvZA5vkC 6?YRGVr&rr s5&O S;,^+'imTXaj##>d-wUH6(xc?:c1G;cAIiie_w}=QCǍa9+ ]j8i5; )|'rw']V΢s.)nN O#R^s0xү@eXX>GjL̲"'|riJQV d۰jsp0A(urFc'ҚR^>WTR (Ju`eH ;d_Nd9 ^13XG۹||WgO;1_xaAx ӂ18tŵO#2U[ Yc8ҒXƤ$[Lo}*awv*WSݡ,c\ǚԚ3ert{N#J껿F)= |YxowGbI%tlcْ qą*t*{P>ع{q+jR$=^^rܺ) Nͤbn-[O؇v$&b[ JJ6ˊf}˜ KQQAE%O"*J)ϗQcHJ+9G ^'|עuU͢~$K:|WbWzcXdaoXeуEKR5+JDwAܸAH%d}[A5;LQ$2B*5ƭ?\Ѕuo*"el4wI235d@{ ߁LP׮I!Ar,l|Y:Tn}%ɔA gqaO.opݛh_+mRiꖜ(>IčsR_ʞ҆7}hTmz8ڼ{c^MeIQLJA&Mح}eX1(SNY!ZdRCf+.Yx"/Ou=\HAL+TnAºΝٹG}בJ}&|.5gYx64/[RRT"dzwJe3Eyi1rv$vvgQ7Y7qơNGP^`Ry5ԃM[ iwePgoAoۯSZRBJ=kxNE3[sR};>I2U G7E>˻m\}]c*|4R eMú*x-pOGQbvSLNO@Oi!]%KLcO|,:XNgz{ ^S`M}6"8okc>ˇo@|B _SIBOvlMCmQ+'Lw{ѡ >AAY|?Z&Nތ+JCbLYOgדiɼ]g 8|%"Sn׳D +-DCWoĸh٫62~ĖFm^rf`+lZ0L>e2(l F Ev>y׈+Pfh-&/r+rW)sy55xDv U<+`Oڽ 7Ve8Cjf onτ=1r'??׫]x9̱RX7Oc5#~o߾D"##?x(˧|'x}9ɥ{Ŵ%.O:d׷HͲYH!\\o^ϨT¤R΂TAAA(Be%ͭ5yḊ$5Kzr  B"BAAA B~ Ba%gGyy=Ii9L(1 h1x4.h   Am+ptyt5OOOޕ쟸zPXRA_ 3PLGe8M2p $K%. u}fy E2N2\NQ67|HcLVJKi㝶>U~-;oj2iYU2N2}qBe$#[{b*ү1g^N=!8vToP7)L'&6]vfkA M/"%[գ]%"sL!a.fx$=œ]z0y.XP,+q*}jPE⷇vhڎ+v%mVG'|؄hst?Bk WAlȺ_l%&SYjǎqR(I?'O8B2|Eٻ̬9.*Y8O^Rp|iFj任h,~y1Ӷ_b/\l#&4UqO $?|}]C5IlbV<l f >Sǟ& Jք` 9TGa&  _֌e;H_R7L=#ds/~nv[g.&a>q]:Xh,}kG,Z /wvMk5&gڇVa>4C#Id8r\&q(|f[@GS\K}ə!Gu-Q ie GBu4;Sp·+J7dƊ_C؝b14R)gA;cMz:,[ II XeaʱxOE 7c;Ɣ,at2yHN#Yme5Ț%I?鸐īӞȻMmMuhiK +$s:5ɩh-0~r2s[P$4V~8Maˮ@>#Mğ2X3$ҫW qiϟUp\ ƈ)74c&jJzVxp(0A@м{0o <&3$/XLޗ9wRɦ,>r$P/@aЉА3L*Ul zz"T ͳ>M:rHHfKl0NL"Sdd$03GCsӨ'-άIYrܩ|O#iO\ר0g[J0Ӈ|I)S.gSPYA$NMhLvmR=*Xc\&ͪrVZ Œh6yqKG /EdãG<ȱ/TڲxOVcJ“ə'JX[zX&^MT9o0B\ntu,@w[\)]ɩ"W}" Бw5}c1*dR#Rźxd@w#95 hb<,t2 T9Y;;%B28=Cml4LwOrvVcI !R0 @ ] +f3D2Zno޴qW ϊۧjG5O5ȁX؃SR4LjbKSJal԰ ߩL o+$RTTdFEp:Ή?bxy# j=3m%\EBqҨڝl;؎g9 LovĪҥoY %NP9 UX1.ӂ;zSʨ"ދȱ64N]j7rqcgtGկ\0To0 \|wmh:?Op JJGFHR1f4[SaiLc񩣂؃m,>O~2ƸHޟV.At݁7k&%bv+*) 9 S>-h/aO"QCn3kTV(mi0?"aY#bVȓ)X&KS䣩=':-"oZvÙbDNd͊Kҁ6=$99WUaD4R0RfE$gbxi=,_Nce Kjߏ!uTzm3rrt9+r锹rD@zu3 ./{8Py8[QWlp:gGQ^<(Gݞ {bNE>iBo49+]-3s31#FH߾} 6=DFF2Q@ON|?9sKiK\$n}?\A#6KM9)']#t>ry!ZIɸFBPNAAA^Y52?#:?.`^8)  ++AAA(& mKYCWA((w"/2-ǐ+KV9+zˣXDŽgDKI_?BtPN?:uذ*܇7AA`+-q.+iNOG_=n 1qzPXSXOd8m{%Ei 8jH2?vg޾Vl o<{! :n8 Ɗk{>i'buHe0f#SPh|FFFԍM6L4'Zd=5>ӵEmqϰlC]ǃ#2zdj>:}㓧s&J\󇨆y%,GyȤ IDATၤۗ®/&wcv5 j8a$Xq~~.e֓?}фߠnCG;qD>s%Dž|UN%p.iέA}<{VGNGjYwͩ.9D2]24M3o*~ jGcxen=aŻjs&)0nmAp9p3rsS,nߺB3Z ͛~O*TYx!u[ߜ]=hqm/x DЄ9Ӗ{r-6!d3=CMhs4BҦx)TJ8T-AŻdh4߸M36v tl)K%%_Zi|(tڔ61@/4ss-^ |/<":3W9dZH軪!QgPF*ՖVs '񄏝OT 9H+=iU% 궢]g;{m[*KNkv %Iv|:C{֢_GwZ&-P&=hq܂%i1ϼLܛj4!V]wby(bD *YP:ڳ.(V9{41[s+@M8L$ nC][Q"7gʃ'С%@]2fQٕ8Iy&q1sO;7roΡ? {s?wGpLAݟ',ӝf3cq=(I G<#9Ͻ5ΙE8?~|7 P"Nh nh溅q(;FyZhR, Ϧ2"/qn"fgڗNxaQSJ9)x|yrR Ij5Vv,Z"!>#'52 GVv,/2ߵ,'{Ҳ̾()Q`dcKYə)h՘<97r|ֶ>N6:2SAr\dc"7Vj*3snC(NT]MQ5H2ɥMRFANJFcal11N@zQʑ9*EY]&`nÚsj) o_cTZS*T 1E dqpLk|ɑl<=q\˙1faưs;*> q1/ 3w1$ ŵO#3qBf ck$ s<9]GZטdkI-2tO"=^9NjV;4rXZ~ּLR`{i7]I7r So\8^% 枢jfWO*Qr;m@Y^Vcz'L'-%+9anݔfR1T-'~T;gvp-`{A%%eEكYap X(Y(렢'%[Kv^SبNN$A [/TIpka: @ÇĪfW?%^t+َw=ױL o,3]xnKt=,@čmT N֗ HXۙ/)*D_!RƸ;!\ME_STm0R.W8If h/;u ڵpS")$3DkOh;lC1EJ%sBz<_dLM{W84 R{u!l9;s|#L`P w]kϲKmi^P΄gJ :67I4ϢzyP on,-C\Pkzbe;~U3ԏ_Rdߕz#];֮8jg?.=68wv}ГPd8&n|w h9:?i2();l6McHh:? r N_ͦ bgӀQ)XSP7ϳul'Z͝42潦Xy6M<+KоJ,ξY +G~M%' ?5EP0wqEv_A eaHk8y3x( Ŋ1eY> x_OՏZ$rt56|JN_TCLUb^ڗeڬ^:$[jy!ʙi/n3}PeȠv/S0DQ&KZ3rIK9Ê\t\^ ue9"5]B/{S}vAe{miNi ݞ {bN= ,DWq?rϙcJo4oXǞ_k 1#FH߾} 6=DFF2Q@ON|?9sKiK\t$ɮo/@epB0z;޼LaKQB'# H9 RYAA)6Qbk2z?.`UpY"  Eh AAA(D mK\z= ؞|bN$%2ynX߿s.ˣXDŽ'DKќrz   %Ռ>=7. 2;R~@ BF67fGxYtHeq% 8<:s9QFv Q#$2Y) DrN.5ƦQwb8VMh[LIɤe]V<: Ml}w/zbƏK#+̩ڥz`WSh_bδzC2q xoRFNLmiA_&҄dYnje%Y73:6lX0#P}q`ZePŢr?bݤ<l\͠{lQNɚ8:RɌ; &rhK(-9~[mQr&g`%JB>&  _֌e*Rg㗤 ?S3Y r>3r%}O\@$/˪)q ) l{oZ bR?+Фɐu[̩!*#;>d7Osajm2x%Gu-Q ie GBu4;Sp·+J7dƊ_C؝b14R)gA;cMz:,[ IILUftܻ#ui*ًWʱxOE 7c[d:vHvIo[?vr̥\ hl&c6&LapxpO1%K(x'{HV[`t36&BDRbFO:.d2rfgƫPXafx1RJ '1XS̭^o&'$w*ԘXLHYG[dc"94}+s\B최躜xi ݧ∜6C'jzu giѥE^mMsD}-r255s<8wG| d ؟KA(N1f̤RMITtSR5tPs&-cd<ٖ'q|bfwgUu%]/뱋X>唯 {'(lM-GžE(l:Rr&Wf`UJ>M:rHHfI21) Ļd#@LF S;s+847~j) ݑqIS6WCjF?Pk,鑄y輵9feZ]ҍɛSMm{%O 鞌ͫQ(pjҕEMffEmswV+zԤY5lcIKXcцԥ|W+ބNL8%)qxt:pSd85,@OVcDTI|iX2^hU<Fw]{gu͕5*h}'pWߗ=&2I&%:=2 UK \ Gt׏p=. MS[an)&ΓB'pNs:US")$3H#/5<`VJ-c29{YO*k鳄n~͹]EԦSbX7'Ґr{𦍻p1|V\7d>͞P;yD\j,!}ʈ18rW"q(]%ؼ7-2aAlSo?VI6j˩Ɍt+L,Qmt'c,'^ԞaXU4-kP)؅ܨ2ЍRqћRF^>GeF姑TvPT+c< G&֠s@=~OqEL%~i*3(G̺&i2p3-:X:{C/T*Q>2ӴHTmQ:j5Z ^|1b)4 q uY'yV!5j*uJƶ4ҟ^Jt,1}ɔTj,ީaQr+3dPXR~ S<^$M?iɬ4{"#rj$kV\$A̹Ĭ#ZIjlv`dOT7+"9K{%ncJbR.R."~E.2WC]cYHO n&S/ziBo49+]-3s31#FH߾} 6=DFF2Q@ON|?9sKiK\$n}?\A#6KM9)']#t>ry!ZIɸFBPNAAA^Y52?#:?.`^8)  ++AAA(& mKYCWA((w"/2-ǐ+KV9+zˣXDŽgDKI_?BtEtz שÆU6&@>  PږGE앴?V'uo~x=edZV#ԫ6SRaRmgK;p1*P4mbR{vjZ )zbOg}$PXs0׷F2+үeM!ØaljO{B!mFQ7ngW07=0ӜhbjE’HFtlL*Awo?zJ?a3J wc&jucO_}\J#9p ry+ z tsfA7VĆC~LھX]K}eRzr<4.m'ԙpv^Y$2zv5,Ǿ w?ݙ%;HNyV1:Y^Kؿ5&L/Og814uz>ȠIzoLNe8xk!Y×3(o>ӛ;{ߣu,܁][rTH5 ,_Xװ ۲6<9;gcG;c#h ̮&ﲤnOȡ]Ȗp㇣öJ,n,EN}s9xx1&bτI'V"Y6n=}fo"v-r%+9.a{H&N%}DϞ'`B/}XkNr:Ltz; ̛r?p y2V+KP8tx)/lH i%Nt9 nA?#w`=w-;erH6SUT- FyM[B9B#~?跾9?Żz^0__4 ;+%rW-/ZmnCgzvڶCTHC*Cy.oTSc\s*P<$7!5;jt4׎dS%%_Zi|(tڔ61@/4ss-^ |/<"NQ{SL栅?5x6aeRmi5ǙO$M~m&B!ғVQn+\%XqḚ&ȬrKmP̝dΧ1g-j;U?å24n0)Ah(f,LA|ew<_VХu;Cc\iMQ.gV@+csQ:ڳ.(V9{41[s+@M8ޤAܼg'짝ģEn OCgK@fe̢+qcLo%b,cã(w/=!N"%"JPQQ"*$$$@@)p2vono>[ggn׭ EBs͏DVB%?EjCOz{~*߁SOSn!ͥVYn^m;-.-z#.'> nx|Kr~#Y0'fVmA#\*6T>Mq- aod{1D>ż[ Te]bp* 35< ['p仯R?M (8C:Y)ƕTRԘښ!YYb6fOzd%atL=`HPcAgQ Ƃ\s,R/cs)4:ɹl1hÃV,k iƹw0 ^ChD]|7[OIY"'z"Z[@<ʜ r{B舛?1ogd> -uԣ(d~=;4񕍧crZ4q9˚С7Ң"Da}̷L;HiY1;eW`pTr;FPvT넭/~GPt{GצFTͶ6,5C'Qĉ$NbٖwM)jZu)7$; I|s?O!Yyh>/WXp_NƲdmdF!vR8{# ʋC3?Q#a۰/r0\?R@+4fxǰo?m;8|AxuJip#& N̥&툏 XZ1*ÇA1/iɲ,g 8|!"yRR`"Fr/TXVϘ6%iֵ+Vog==6+3#]kʸ7:dK2}8Cw/cQu]8Ȼs5oi+myIyK Nyy <^ %26]p~{Y=lv,lN)[ Bx'QD\ ^xGB ɘ9{y>=4i*#i=:;zEHHIJJ"**y|CO#O1nbTzWMg@mCogPA y2ٞrC?ƫ|&ʹ EE,  )W>%E]/]\B`_tY"  "   ye[22N (o".ȔB5\6&-qF#9yG_AAA( ^ٖ"GK"B :SnP v񻹛`ٚ=?XH wb H7|mUBGenjqrb%Q;BqA2V(d&sr`֏p_5fgy)|ol1a[T+ĝKQL=v*ã7`>ΈVm,DdDe֔ݜ#jDwx*2=٘1-mQލd *`bMoiqPyOQI0ctI>o?;@C t!lFv!N38l xwv&@m1Yj6z :DF!cw@Y*5rlfm-q9 9#Seéj>}[ڡ'7Tw:ͱp\3jPn`K_8|긝GZ}ْy`,[k=m:޼-lGi_NA(&R3`JL74$o*FҬ^v2>䱧H-ϘNr3ˠ'[pqhvZ}u/Czf}|PZ{?@[^<@}2z`Kk{wеZٗب$^ch)b81 mf|QݝP~^aLB!{].n<3=v]S@NȽ{_\ [w|1NRr8Bv<EDbMbYU#cSY2|, ORw]$Τc2os&: $'^]4k=ѿ_%퓳VTO[wPH:;%((܋'(&3ŵ̽;)?EJ:)+0:VFHNIǯNXvDAED';E vXZ5JEy869r M,qj"3WqR xB^>)8p*-Vܠ?=czv|8uR˯._`,U٢^&PuӣȨwJRH`֏g_?x? Dȥ*ѨE6GBţlKӚHv%dÉ iPȺɩx=( }IYu[j>739 O5:*c/qY ׀T>=XdtSmNIOjf&`uZRdMw|F/GJ7yv8Kj5d;R>=JN!e.+ f@Ӷ-i4:!$]>C& Qi\lu,邓#?[K Pj(j, EʅWf̌IgxJi&~s:&s߰Nhvci$>%m x#&BB6>W%qZAC9yLxe׏ʕ&ei?_dQ4#JZ+ti$+GuYE6+A÷*a>7-oաk3NؚWǸ贜ǸǠ@Q"22[R(_[~1~pm^VPp=L(o".w2JXWϓ1+U%mY<5mҤ z"$$$%%ży}>!''ydi7^1m{*Ik`ϜKh%ek(7k$e+C7/mq rEJJ¦AAJ\K"cy(:?3fxǥ*ޯF9AAAxa?AAAW%¢#SAxUY'QD\ :)=6֖/,cb-q&9MrV-.O{GփS VAA^lK\Kg mll1 0-IQ_c_LГ'vHLd[\̈́:XJ.`Cܩoi9;x"'ǡ)?!=mRTWA(,_×3G cd4x˸sɼ4mG fX#G^"yQes5vn OKw7&ژ,_S H&k@NJVEA"pCL$rLT^HQ.Sݺ{4V}۳Pr{VTl>l]8Ok"'|wȯX!ro}n tdQ@U˞71w>kjt`QRcN?e]N,ӕ5{Seh0~>܂/fpRrh!gЍ} <MH64V1^zW}ŭqBK|_/$2>G뉙ՏEYۖmjl_z΢Urbfq`o֍;D#p١m¢Z9-6w}{p؝lz!͂I=W#2r6.d;I+Q,سԗ ٞ\ȓgpz͡YZ>~Đg!h\WtsJ-1Fۤ}dUy;-̝xIs8ppl| +_UKS,+q"n5cwY_qta=l WȯY&+WAﲙ"uLRjn@M0\n{54ާtW8&,'-oF(TJd.OY-׉UВIq3+1 ʹj}qJG!m6HTGfㅳr U5y Fu˅uiF *tC~Txɓ%g܈vGo_Wr%Ast7V"Zq' 9^q{L.SJ,7BG#d0/j b1QDh-*dj79M+7C8_w[Y6 9}E{%xMr!ԥ:5ՏU q79VUPf||W⶙ə8>7w]5>A֧sMkT,OŅBP<3]jc.\6phQbvL<*캶ͼ`Y)G_{7Nmk@FS;s*qewE?ѻu3([hutbȊ]j885^g(;o$ROug8OrZ<1Z">Նe[Tk$@$P ,eQ:{gNGÜYiۃ+Wp5:w\w*z&zg 7DubޭE^O*ײx.?8u[I6V)wq߱N[߃q)"sv"O)ɩ$k4$][Ą̼t($ZwZ3K.?rVf%jOE|/z Bފd;,s; KVZNBIIEk,+sDl1Ns;= i5gG!Y"$MJלImQ4ӂn{\0]Gh]rQ|8!;u_ΰ哷Yu&3!D>-+m9M_V2JAQ@INAkepj0 HFaёCƨ$eYHx nz+p\: O"LSϦ]dCiޞjղ4d[~m dB`x>Hv~9w{Y0:8nc]ЇvpA{g%ΐNVʃq%5fHVdͽ\Ozd%atL=`HPcAgQ Ƃ\s,R/cs)4:h?ʈ܇ ww"̹q/uy9k iӬZjɜHƎ/^Χ4LnόmDݓ̫Uwq{pњs* @k^,k+g2"3|Y@6V|ɮ%pX=xC2c]1S0"O`DJɀI\y);ϕ;q_=^a,j]Cּ5P~(}46_$Pne0EryM$gd,;(saK 刚xmj [\YYZ fhjTA$KF3JϕC .5>^SJ~ "Bph|3w'Z.m+*VQE-|[DY n'<#SRsɀu~]^*G_Pnb[Q\Uq'b?3}GC Ţ#z4l֯g&6bL.]&.gY:vFUZ]^ݨf͡sQȼucqQ$l[ dyl:[뷝1|05 pKsN,uwN5֢'eSB t#3RNU}6|K2wCgؼ>a}̷L;HiY1;eW`pTr;FPvT넭/~GPt{GצFTͶ6,5C'Qĉ$NbٖwM)jZuxf"չ-+r62U&6毁1[t,C 5 IDAT-^L^ ,vO QfL6j)7:ݕ_XvhV:6d\ 6q/yPyt{g7j$lp^. [hFьwmm Ui: `Ĥa4ɘdԷQK+Te0=~%Ϳ!Y!/D3OJULHRe *Ӧ$ͺ`ݡG2~׆Դ|bfdvM7S bI5gh@ 8c[F^iR#ãrr*WcCE Md/\^v˩km;+S'l yv;A(\ϻ?2ʛK wH@~u<3g/X'&MZe$'C~G^ 1=IIIDEE1o޼a@`Ayqt<ƍWL[JOlm *H+UKUN9RYAA5"BAAA^!lK\FFiAW؟}bMĥ`S2{bZ1ӼƄ\%h:`$'/+   E+WcYSH߷=cs7QSgʍʛ}<0A!}rAlٟF{KJ9>^옑4YHsI.'{"Kwr;S9ƅ$Y;/@d4(QNM$2$n|`k$S=f9$Tc’V; S{T 2"2knN\h5;(Tgeu{só1cZ8ۢOUĚߠk 0]OQI0ctI>o?;@C t!lFv!N38l xwv&@m1Yj6z :DF!cw@Y*5rgf FN!qӠ3R>=U?~ӷKk|B|CuV ~o3[2,`EAyk-MқwC1WqH<d]̰]؉ Ny|L)_@H.CǙ<i<%PINs9cqK΢8͎@keHլ3\'mLofaЅ2r/6A? >OuړZ>÷tYZ@_[T? 鶼.qht8?i/tɉ{I3J*3VyMUcjkdeIF:ٹDHV.@V I&!D5(s`v:UO~OCX6y<{2gkI;ݿ9*FFaq}:{M~Ӻ_Τ6cFrpB)C|RrUR BV?ܻ'%M=uQt[)d\v䗆s&#ʹI{F+Y=%)&,bUKXr8د<XCRĺvʟd&%D=%$ [bP؊z%j[ـ}W)Ug8IZ[gNY w̠7gm*@qTgKk 1y,m6zЅsXU IgO䧓9[r~|or $pFx ^b Y s#Εm0S>3'Zv+It8A^} dttشV5i-O{ b2̈́7>T|0-3'O:$Rtԝ1JZ+ti$+GuYE6+A÷*a>7-oաk3NؚWǸ贜ǸǠ@Q"22[R(_;=_scʫ6F0QAB3O,'ʌ*^bi^=OƬTEX'f:ԴIz2twՋߓDTT  <^G^Gc{Ŵ% $=s.@ܬ6ny޼Lm`7+)W SAAV,+qM.{JmtT{AAᅽAAA(&^ٖ8 ҏL]zbZU%gEXFyq)(GX[>mLxH,h5?ʱZX<e[N]3YAAAx -qE6/=?u$$F}I}1@|=wtHv~T;rfM9?lO A \7&2txg Rsfو ˙{M#[{e`ԱE2Ve\ 9~_d^3#!/F3/ tn_m!\i.DskbĖv XѪȶ82On0=d@5TԗXw> )j[7vϚƪﰠ|{~JM|ϊY؇ݿ i]DO8y:տK>=DM"ϭa[, ¢}ٳ&gM,с_j +؉uf_s|{M'[ ^3@A܆f*Kr"S53N(}Ovw"D?rӬpN ڈO",m˶TH^/ buwX֊UAg*91K }Z87"F lk6jwaQs;>=x8zN6yqfAx櫑q9~|IvCig(YCFi [gq˅lB~D<ćClC;WE؆q]͕+kOp*LoU02wi<'E=%{T /MɆ\Ք߁g}ŹЅ-^E#f`\)f2Je˅uiF *tCn+3K4ƥu ]śM,?CF;~+ d䧻q>G* ;EeN~Y,ϩZ^frTg:g%>zI}'S3WW>&߰EC洲;ǁ:iřfn˜" fU!=/h$ϼI|45TJ!&JӰ*upjQ6393~fݲ&g54tn_}M9婸P皣rƽKm%N-J?܎G@]v=k)\ Sݛ׎eڇz'vҶ5 ŝ98I2;k"ݺQ-:G:1Hd.TS!QwI(.$œ(SmH])UoO;vIeCwޣUrMD^=R%Hg@y脪x4̉Uf=xrW Pyi"k w}#ۻ@T'Z)Zr-S1Q DliřrK=w؜.2wo'"qD5< [W<+qtR+d15C$#m咬xғ  +dLF G =3gWP4 ~d^jTfzxL!.@QF$>NǼ *}>ϙԆ7&HX[WL眦[zWK\D2 sf;@sT4+i4"+7 ?//99`iۈ'W :!85I3Z T/bGA ƽXָWdEf=N&l$]K|6zTdnǀksbe`DaZ\?I\z Y)wwQɫ%–8@5 4GIM#K @w9Ԩ Igr+\j,/|rޝ hIXKXEmMآ d)``g\a$n_&}8G SRsɀu~]^*G_Pnb[Q\Uq'b?3}GC Ţ#z4l֯g&6bL.]&.gY:vFUZ]^ݨf͡sQȼucqQ$l[ dyl:[뷝1|05 pKsN,uwN5֢'eSB t#3RNU}6|K2wCgؼ>a}̷L;HiY1;eW`pTr;FPvT넭/~GPt{GצFTͶ6,5C'Qĉ$NbٖwM)jZu@k`G~V.݀&PB `7SoS1Hv>z_|Q"V)hou+:GѬ&umȆŹNm^"` ϢoH6 \$ `? ,71O/;A(T48D'cRQvG`,Sàŗ4NdY3N^<)WYS0zNO#I9a*,gL4Z3v̞]R.5eL2% v>ŻmyIyK Nyy <^ %26]p~{?;&iڦ e2eoE"CP" "K2 *R@t4Q_Rzޜ䜓;zݖe4n_xq)+:D4j*&?*P.w{&zE޼LH RϊTAAAxe#Ť(q->kUjWzV  SDt   =OCLp}vt‘_f\*XdDZv2NC'Lx)O 3u Htt7)c&1 [vrף ΐ–5@8eB(Ofو$o"-Qt BL%l'76B._&MG^$}pN oςNnfIUAyW%d?GJyLVTމ z< ^?H%W#9O\3--llϣiP_-ڜdߛ ;ؓ{>kYQxOpxnl>q\XD |1(nSC\Kk2wjGKD1ea2} T)ӐHt/n-]4 gyL([Zڒwq#bmӑط Y$䧍q!]:؉m}3ijtbcWGt047\1O9+\Fꊧ5WQu`B S|A=20s%7Wz _[K\!T4Q)`: gK7.dkqpyqHR֡E+$ٮ8MQ=mGdL?P0\'F{mQ [" 4s.>ep9l%#ߝbKvҐHPվ:1L7Roa2e_dv+^.JY^CuO?õ(%dXGu`szxOgAI8C~5nnOQtIt3;y.mfw?CXi԰ ˢQkmbNg_贼; '㢭C4}=Zmk`,`{MZ ΄}ۘjVS;q^;7YpAl_BIKunO I.LO*d.=9T b˄Ps1\'v9Y_9Hm' 1XI2;_0ɿ1>9 .Dp!>-3ЫJK$c0Ȁ>C'OPcSNNJ$dL%$4h>MǗ<-sVj}ö7sV\%ߡTByWQ֙_f׫̒Aб4}IjOIzu*T4F*Z~S E/vJ$+V 0^s}w+#(yaHΜI7[mFHTZ!'77q\2.T$1QSXnPP;l ު7“HtYkwKRP&׈ }ec ת`yR(=7;|sH֞틺3cY$ $MϜsJkVa;?ߔOI2!3SKNQiRRഢqEWSó3+;⽊\OOzY}E G^ֱ%E5$#p3h"..̭{'b-[-1S8f5\cmʟX5gξb&OOHȗ 0HKXX8`/`(a0Zx xi7Ho߰$i6g4UDN7/S5U|U#)9牚SAA23F\aŤ(B>w\r`dSAA2{:AAA0OlOuSg M <h".6;[c˓1{G =q&.rQ#~[Y:/K   <؞ ϭY%g cwlFP1(n8ܦ'b={'Nǎtx/ #;õ$$jRih=!1JNoWTO>QV ԷGA(/FnfoT/M;MLۘ6i-2 YU񐁲,>'غ9KAϱl Τ, ,jTC_;^(15 ܈Xǟ$*ՈR`[gsebpWQ $2jF&k{'۹N[bf +Գrg8}W/N[U+,6Wr- ϖj&Ӯ dv|˦[I ̂4nߠ;-WWaR{򊕱w"pe-[!_]Fk-k^~UB5moFh%vr {秬ǧ>_b5vspf1ZX4158g(&s5oҧM~ ь/Ið[$sֿ\Wb4ݛZǶaKHVԩ ϸYBzj?Z.yZ445A4Gd^gFXK[R.f0ֲ4]ˢ4=ѝY?n =},|;buwC傉d.?Mf=c>t#D[c;nu>>/@1a;#^\N1<мBTԃxKu s>E#A~MRI떪M7NV?[[`U^G^tN\3<&f2G7?~#F@Nԅb\u=gP)Vt6-!.Wida]ğ|< j㄄M>Tw 26Х򭎳M"iQ|j%mϵǾ/~| y96V1hB'pNYszrgU X֜wfs榌T xqj/M&:4Sh*p1$rAYMQqG8gI4sfɞ_"xw՞H"EysDW}mLʴk k.Vu3-H]095 k.4Т0d*t1]q璣tXICNsU?9 ti (֯uB|~#NR䒰wbNg Uˡa \P5l4ɹu}-_{¼ȑA⏳.OEчv6H-15^V9$ʋM(@Q&nId4"_=F\r=Z̦[)_Ÿ`j(Q#1 w=ᯎewlo 2Z,f`rbOrZ*oL3grv&^:ZQ]Oiiإ_XtNDJrNO:~ldR"ͮL~?K3D7zƓ{fcSp@sd\ t-w쭜{vB#VwTa` '9d=׾ήeHW4dNݿbDIfu+ZQd І4ݞ6CD tjۆ6 a^mvմ Ӣ@pKF`zzx@F}&IB)# wXZDNN!;}/;"^*QŐ XvnspQ?`A`B? ҞJ Wq[0&ԝy(c > ɡ& x}3fMqURgLwU }`Y8op̳g"7θAn %,tw&+͈%9:`z`NVaE>3fgrz*0Zgg%c64KiZ.N4}:|I4TONThmyLJHކߝO1c$Gm[zdC#iXd^#n)@7/S8R-m+898>Գ"EAA"fو|yE1)J~ī} AOk?Z.  ]!   O''.;; “Jl*>1&`ҳ LYJߘiQc]'N(@wFs贱އcU~xEyP"nѓ?Ve{(\J)[   '<$)L/XNS8z-pJOm96a)c BLd$KY;Ty˾9Sq(ɀdNQnKFij(2lckIel'{= 1p ,liб ]4-XV%Fn/q&͈P>|4$') Lp}vt‘_f\*bYomxP7DqhF&{?Mm^/_\&D&{/9>tHUgXd" fgS@hְSd*jY;z|4]J*z/piLBwԠj, 0QYdž76qJ 6&%(|)g{Uh>ƍ'Hۡt&j NnfIUAyW%1wzܸD\\Eϗ5Cֶlp.`4sK/ؐ41댃 <|<üQ5+kY!Y8(cBҖ;1pk|5rQ/p%v}[_0w>QdG9zvߎY| %%NNގfz L;4b:O)w#c 6Ԯ*"Gݛ3o,j@bwUo0UO?|@Ur>wp&3AыG*G/h\(P9߄;}9AI8C~5nnOeR%x:v6uNAyT^"3:3⨕j /&65 S%0$D=M1U^I_X+@Q5d2o1GQnNOib>Sv$4[PXR=Mg:fߡ6}W!Oqo& {x&PfB:{y,,ҵ6ئg5Qh+ї+w^t?}7]d / ʼnh8m͸grMiAw_lfS iK!gؠ7mƮ+A|XV#9XHO .c*ϒSH(p*.%h5>`~z$+,4w2(2 rJ:{;,K{)@׫l vKr8WO3vN Bqp )s[bN r.ųWs\+ 0NJNBCc+._ c2ϲ'Ukw^w# 'e{ٜ!T=3VL'# F{$x\x22`:47}nT%wi.Fd%APXbyc8:m ]ϳpu fDYngX6zd2gohQGIeәɍmwzW $ڿʵYv"k׎csN2C|Pv ciL>>$gm ȩ윱}hf=qUqobSy]qjV4ѐMÇv;BezRLS|| Lͣ1=g5)>OuCMo,Jh<]|LlFG!~l: m+רda@O/P}nF|~rF6;Izlt#S%>#yq\i¦;N]qcI_4Qyd< 6 #k?ݾ)IN>ont)e\D=*_eL+&mIH)JM)_<='='F{{{Y&"E3cY$ $MϜsJkVa;?ߔqYģbb+2zx }y֌Ҥ"ƥCiE"ege9fVv{|)oNz#+4^ZǺhtta| PLx<*˃?sXKV}yg X'ֱ͙شɓ% 22d>6 JE)0^p"Mgf$oYtT3yoVQ7cT5U|.&O7<\y5.ГROAAA(lĵ;VL>!S}Wj ,ciYRZY=f8v"=I"Y}N/us$:39{1%cI7"YYzհ= wPbj?ITYNL{.j0r*>iF$ W5CDo ( }5=孝}}#岗?ǡ7!w|^ŀe͉g6gnxS+i΢;ΡA%8w2QR:Ԉ_LthT4A(E|bfRJ3g]u)ށ}NqW$Y4)7Gtݗ?1*'3+Ӫ J3f \5!-H]iȌ]s!WFYQV^>jr*i<璣tXICN}dz &1n3[MfQt>0Ng+pő,~q{E3Df<:W Rd4n&u)g~*{9_*ӫ^4i–N͉sd;BӭFW)^< a\vx?wӿO}~^Fw5#}a M)j⋖ iy+ WO\>Fu1-bw  l9jӽSYB&oe\4ΥN5ad&f(Ƭ6#:~GTtre"Y$9";J2IwQMV}|U8,iѷ 5OPLwC{Ə´(G ^IHp wbw$~v}ׂi/Z3J E+EYoٙgQzi~/[_n2U7}aRVtiT|K BLx<*˃}o|)-k8܏1s x)b+M'$K @dd|RSS%,,l00x-<^ S`4Ez|:@l: yv|>Gof^_Q8R-m@)O*<˪"EAAʳ'ߞӦHu%}?վާ˷V?ϲHuAAŸ+v^AAAx7N_o뗫^]-duq.KfhHx$uf(ׂn/`;K2裉Yo,ZT>IeJ''oG3 ^ksdAR$Gi 6?~zi|S"fK,FSyEsx͢yI~8Pl^;Fօyg8^ΣߎOh(ɥYL!M{^Aޗ+IM7FL+oHi3ݓq;7H HٜKh_?GM3õ(%פWGu`szxgѢ=#Dijh/c`ZqVg3ގLMk=irSU]r97"۾~PBkPrH@֓g*:1LbRK[U*xktdҨW|, N ]idXj=F\I˧GNDu@$!_?KxJ{ri/{бu 2uq:qĹ=yə&st!`ɪN\6s *[7$~cE\lɼ),Otzx P%0$wh鳍>aߕnt5LAmp7a5n n&>(Iij ҳH`vyװ"FDZjNŹ w^tâ`J)^hʋ/pl/ښqϛӂ ^Ԯ eԡL1nyewO,? ;_% Zy:Ltw[VhJ(ćoE< % $ ZIBMo4tvXޭBܔlLt6~Zu9l $+,4w(2l<9%h5AA{h3݀ӂPD' c[RE$-^z|-JήJjCڐbb;CZ 3.I׹a?%`L'Ẍ{;[x?^]z)pWr.ɩAV'q2fϿ6mTb|ov+qۊ窇.27V09 6 1 O*tW-ݛzH{[rGӊ5\'v9Y_9Hm't%g'gfWۡ@Hax_#78“Å.;*AkOs1"0n/ ףz(O9&F@N69wCܞ'^픡y=SΙA0 Zv;úm#yf?V}ÇwXi&y$JԲKLp;u+҅v_aډ];k19'^!>Mwc|C;4&Rx6ؘUȩ윱}pHZ_ wFQKL Ƣ*Ml28CͪP3iPyzܡnPL^zi| ;/Ay["&֥c2QO/P}nF|~rF6;Izlt#S%>#yq\i¦;N]qc '_4Qқ `{Y RyIϬgvomBfa :v/cA@N>ont)e\D=*_eL+&mIH(=7;|sH֞exIΌeŒ\6>;4y?s)LH7Z=_ud.#_{E}q\B WDZĠK*୨xZEVնZD j XZAڋ(*ZQpMIv!03gf6y73qj%!b8f1bcy<tz~kxZ\VO1pAz|﶑t;8|CU þ,S{cWah}%l ۸;Z=};qW;LS8s!29x Kn&"Y3>#g:.}hkҥZܛ=U-M3ߋ/.0ÆMfРA,]9۶mcڵL:u$ry%mIx+0t qM"cYk΢$NbO *+a}Šfr5vH埰blğY'""""rh2DuQõލ-%%#)]5eIfW+[a7{f]ڞOs'ʬݭ$)kDDDDDD$J\nI,Dl |{X~}:Gt\²މҝ~2*L yi}ixm@4,Q_fl*31<6rhJnQ1aamAK˳1pN7"q~9}M3U{@jz)pZCY*LA`Â̜Jl@^|U7Zԥ{ͅ'߀I7s+N6^+WUA#aЭS;9_;39?:5? FN$7rs+"q{iy2t7ܭ*ěS+`0^ 6w> ]~ mܛںٳ}$.mWqןxI\ө?CO,|א⿍㶷 id'Lֿc3_=!GZѭÌa}pBc(~ F= Ghdžޤ>-5 ɺ*5|/$։зGf \}x%nm's'O g z\bٰgg**tO>4{y[ɦ ^8[.=1#9feE0n,  &p~*?`iڿ=/9(H̼)ZPϓ4w:o~ ~/88ΒypogK| <ï+ygz?LߋPM48[;'io}? 8y^"D? asF\sw ?n2`n{6c9o`OS2]<{ 4NSt/qIn|%[ Pؼ/ϭ8s)kOlٞ!1kй |6mxZqY$lk)•8?JY+W>FLq(qyS͛ղ65k7"t5Hn-BT\uwJH5%ɰnƜo$SnWxۋ;N8_z'n$8DlMnD {/˦}4' s';gypl!U~Δwi_& q^G{U_x/P|թ1u"AC)s \ڼ@yK͜=_@04~KXw=gЩޭL[)5\ţϗwݜa>q z\Gt[׻%$d"&4yj]rz$| Cptt;&ŬIJɊTv~ڵ->E@ >'l<N42I:4\˯n`)JW^xNђX5Al)L&=SDDTL%뢬yuWʖWfl\6aaI{Э i٣qvrhW8.8s1@+Տ1ΌRг;3ƽA?kx{.̚q#^Gtz eU0ix\͠P 7W<5xg >OnfIXmZ\|q\_I8ˆ`#ws^]ɦx[P3G@eZta?2anߊvNk$3V/H!54SWϕа=x#46A!@8u(Crriٛ^Sd(\Fc<sz□pOgR̙/e"*ϓsqsh"""z0ld ҥKn۶k2u[7x2R@hMu4U;$튈s7rQ/qp4-""""" p0V9Sm" tQ8{x3M[wnn8kP2]'yAi?i qn5Sͺ˭ج$Bӣ q{J:04GNDDDD-x˭{WKJS6?aL]w'Ϋk[;{^s q tB\͸SpJ'y:S-HC*Q?>6>809 ެN4{eЛ(ĉ< OaœWK gjGhNP{ o5CSi!.^EDDDDZW34:gy &ę*lNⲾ@jUجU7[s'"""""9S”[ oem%8 q5uN gg-n~q"""""S+LJS p龜>sl='f9>q6q$)ĉd^!f7 p^mN$†8g+{%)Ygrq<IKuO32SF.T#jثq^;o mykݜՍq}4ODDDDD$ Z7 uG!Zq3U㜺V5Zqs[8N""""".qgJKSs:/!έۤ2Υ›WMU8 SF漪nai}_~qJ}Gf*< oʙ]i[NCUW9 q4n'"""""e#9Zf S" tپAӴ8x9iDDDDD]: Mf<@g[qH7xo @~ESIKg]?4扈HtVtÜu |lVL*Y,븽KuLDNDDDD$ &W3j0㢮9U[3KL46ODDDDD,?!-l-ȵpC`p:Eüm_ڦ'""""na& W3 ^Ӿ=Ds[osu`7;pV֢ p~'hT unDDDDDEN ]Q8ls[/X-hMaMDDDDvVinsnh YoqAovܴ^DDDDD$L5rQI:a3z *Q9t@ɛ(܉D+l 䮓 p>d2٧.3_"""""R;ҽc:A+L늈H 6ArQL3$pK}EAi~pw|Q A,:n8.Dܖ=?EDDDDn0tn%ThK rwt'""""rh ܖ cD`r^>"@NDDDDAaZ8LvbyTd",ezyTqR[b¾WDDDDD&E8N=&@DDDDDx޶Bȡ-ׯrبSWSuuDDDDDۥݝR8X:YDDDDD:Wm3Q%NDDDDD '""""""""""""""""""""""""""""""""""""""""""""""rP_8jx$0IENDB`pspg-5.8.1/screenshots/pspg-5.5-oddrechighl-2.png000066400000000000000000003524071452457446400214650ustar00rootroot00000000000000PNG  IHDRq_ѥ_sBIT|dtEXtSoftwaregnome-screenshot>4iTXtCreation TimeÚt 26. října 2021, 07:58:110 IDATxwxSw@[UfDV {~AY, 2%EP~A"{G)&?J!f4z<ws=~rν!B!B!B!B!B!B!B!B!B!Bdu2 ']!B΀3rj S-B!^r\ g!B!De !B!rle@)K!Bdv\VK~VoB!=2;ʲNU !B!p\VL+MeB!BqWYefʴ\o B!\0r}eF4]gB!B< \5sguۻ#HP'B!DHd eY+B!B{/#9w+ά2B!]U! gB!"d6 9wڼ굵}|B!Bd? 2ڞ>Ʃ@fOhiB!Bs3\FW:eEgOyos!B!{9f -#Y{o3KUڳ^}5ZZ3!B!DeVOypL@ș'pUO( @E mP ܬlkB!B8Ǒkl a47@ziȹ7Ε)-92d.((ʕ+*TN !B!rxڵk;uƍ[{6ȁ8 đ^%ym ItE[ƿ;ۻm||<MB!B>Z @RRovR  !BsDh1 Wc640 6[q;Vr7kiM[̐^RRR8'B!"'q׈4b@JǬ$& i4ͥAƂ8{zMm^tBٌF{B!!wH3-t,~3h)x3,%O1``4R^ʳB!9Z4^um阱|n1)+-w"[C&M_[ڸ !Bq4b-jq`r4e$6ᓦQk!B!pÞ,=\~fs576qV/k[%B! 7o'** NGJѣ<[ӽ|2sh;vPX17Hᓊ9N_ .3'N-Zw'{ʖ-ksӧO;Ja&t-goiי(93\HDKB9t"a=㟟viL>q1pI)fOwXځ)fLɞu4se^ü; 4ݻ-xV^2rCPi-ǃ7m1Y{ ͞Np-eu^oTahU{pe}Oy|E+R6?*Y4 9>zv~gtrSuz4dP9hq̺[g*W7pv?sm7|8wN{4XIL_\%u?~ge p׭ܘFjyf/_N5x &&?yFʕݒ~hh[qf(*jvE~ re)z64^9Jic?c=Z”.W +=`wn3 kc c ̞F@'vF}ꏳie:lU7@fV:9Υp3t'99i:fQή3'9[f'_)G65tmJeOÿ1Ԗ}tzA4E<>55w~w+嗿qZ J֢Ӡ)s'~xs7Tl_E^%n'|o<~ i^zg_ 3eU2`i.+NBi <fPus4nRNQ Z {ٱ7ԢihPi:~^([,IOyxi2yN,`E= `Hu #g9Y׆c{ 1-s3 ßR*iP LbڊzR*-\THϥp}TFB-_;w7N'q7TX? `RDIxRohtzF.Nc,V][R9@GAi@275Mqz6v ꏰd<6\P &GsnqnzySY5qswUҡeH&36 ت=mC^oSd1R\Sؒj8Xmsp?%S0$Q3RE;IU,էu$HmTCTmR h(]4^S >cc ٲziu,9QN혿яlvn2@ݞ]"C PzUCR'Η-/,SIgigj>9rlF朠H?ILB ~ln# iX=Ӳ]<({h:Nu8cjj*w[2>ZG>suG… y9qzBpq/*M {9GT\F8K=jo^mإۇRrY(Yۇ;S?agDp2א?%o^'8RQEPGv'6^Y6nkyVym{=j8FJz2ƞFj4<6<'lBezNH fi>הMH G~͇-L KlXqb췌nGb __paɴS(?k&=_ c7Gw  F?1Ie?P/e}l~mH[KN"!IA+KQSU·[qh4p.˛<]i2j',ӱQ7WkаcS|iGOZn?5-Dꑯ8W.h2[kO9 xJ9j|~ ۩F6^g;źN9exT{k6ݙ\Zk8[ΔiFl6L, %5cGQu cK>rjϗPS^FXs9Ua, ;Jxsn{$;qڤMms.GBe7vFBVz X#_;IM~_2ˇgI1\7q hxXSu\RSWjdlJtMv\<˅ J4mbrpzYh}!R y4wbɒ?<O܁,q&"o(󿦔IFض0?"ӣOZM5ϛ2.5.vxJ:i;֖M¥+iyjZUJd8O/s]YJ+ ŵpI[5Ӷ)O2TaO9:ZcuÄ 6{xTTSib?Vk{9?mՑym*c?g^;S@WxNf:5q=?}ic{owf,Sea|,ٌkgR|M 7ݧDՉ<4vE !CO1^ !(a`(@mf-{GיYi<_ʩ:LUzu^uΝː!C(TF7wח`ۃXJRZIN_N^8uԃӧOӻwo/^LBY#C)Ղ7o YSg[ۥ <{dqpp<q~NAR"h6EPtŨ\%i.0{!a*}wVb$owu! ѡ9C3n$s7lJݯ^aooo4}XY)¹(vm48$J:֍X/ȇe= S4X gOP[bmN0GVI֥"ΔNe{O:лHsH<^Ӽ7*#|~bT<퓥2_T|SN%+Ϥ{r&bcߩ7w`FpL qFWai216 Ϳ ?i{Mpxm YpΝ;ڵk9z(^^^hт۳w^fϞ… 8q"5ktiW\hѢ--S+WNuST;h4f-^^zӧOӿOGWs؊?҃4`O.m>ݞV4w7|%0%MSra?wN"IpEi٭ &n`A_SQPQ-)=i Jo`yj>Y4?)Enbo'UmL*MHQ4(R, ,NW&Ceq" ~drtdJP|X[ֳ8a(6Nȅ{7~jx&bcSfq># J['rso9?U+q\),i6oF~ʴ|m>Y(c˲$yi|s%_ieeq 6ֱbx@)_vu߮* {BYa/_<0sP 1XɜoP! Ơ\rooo͛Gbb"ǏgҤIԨQe?8Lҥ]~FYѣT\Aŋ߿w('P덳YJ%;#]j^P. N> h3}xVs.]ථ0Ow͸KՕQ5ȋI5- =Z!4hд ^F|uhZx44/Ҹ|^>¡W-j?>DG.m)a_WR z5W+6ҪH4/ F:J0;Õ~cCk湟?ݕZz.?GR`mߘʘ+uD)ؾqI^h֠УijQA(wqPhg,6̧RuԀ2q zU Hk餳V7ɇeQ慱h[r'uO ;Jtܑ=s$ъy5gw0Gz.'?gޙٍc| IDATLv8[NJ_j,OefLpt-ҡ?igvM"6`5Ь|>9}#2]sUv#߅uF L~%lw dڴi̸qطoJfz_s=\Aq)Շ>}?a ?tv{,l٪{f3Kf)B5XPk3ʳhaÆdСܾ}Z5v7n+ʻ*Mhrɜ]5n%&GM͚=I,? MML@KcGf_T 3z#a!e#Tdƾ:bܻw~7[\\\SFFFҳgOΞ=kuzf*s͛"HU& ,kٷgӭ5nD㹲.[C]=lXgbP04p r>=Q$w*WOEqAH8x/dYR6u ,_KF>rSe|WKg!/Qq\ȱJUVeL8nݺlܹӡeT[Y>itk1`iؤˆRk8GooeSբCVgEط#s^ShE9&2@ujeSෲ&V2㸐cժWtrw\<ְ73]Ƒ-]F8{1k֑ƢfwSȥ2rEjx &5mCFX^WNjɓGB\Zaknxt0Q[p !Ba`xu]h4>x1asޞ85n]2{;K%pB!///_HII֭[xyytTغxƭ2RY5u3b V~B!ª "##DUF[nq9r]:&,. ƥ70F-uIgYg[M;=brd;B!%JŋDDDb{xyyD%r]:X;l.eV޴Vkw_ ݸqWuU@!B4 !!!=ܖkGYA=S_ L-_-W!B!D氷7rjwtWqhłw_ B!,={6ٺ777 x}wJ5^,(B!![()3gB!wq]5)B!⚬;"##: B!B%nK73{ɳkG#E9=ՁmB!B~ϫjۮP^5S`﷕SL05*B;7*aTݒ36qE.KfNp<.S x%;Рn]jcQ$g(;^-ÞHÉ{Lg=G1ղVgjNJR3Ƭf]lҋnz&"rNL(_#&1l;0=Ç?0C^H=Cs 6e\+f>ҒԜ p8j(X9 ?ѷͯ (zo_NB 0V?7æsglr]u*gCOZO{eͬ0xp'-5z*ӼTƫ?J }7+pG&[G^\53TBBPoʏԗ!ZHͪut[S|\ܚ`don靡{يc3׳2!p1vg&mj^jwlǘ; O-vg#hRݤ%jm-;q>EkMyvJe} JtBmpnkc1M0:=X|xTU}Je~5#{Ia_X# *⇵sMsB>dv~o>ZL(p?MO!Io%:}]ڢ/ٗ]G\F}e_f$lgw];Rw|D?p3ͧMA]Qwi?[ ?6"bch/~ uϷ.< +X+I9]nu-sk2XBWfEE/ 7Mk}|T)}d:Ɏb)OY&@@:n:Í8 zNbƛp Kǘem{K%7H!F%AI%.&a`(o-Cq-Wi I/XɧgztXz? 0&%'wAlo1&qy)h=Ub=ukӞݻnHMM>Z nczFTәK6-4y_kK u!KIfĬ$"Wn:S]?yg8;;coQ};ү2p[o=Y;m9>z_5Qʝ:mcDf`8fNULkÙ=%B͕%?yﶤ~ּ4!p'rہLJSXͨѠQ.ݙJ>)2Y_|*ROrv39_3sGVl+ǘemu<<}ȺmپuTn}{?"ˬrնfzz>RYd1G3T>-r9(܍/7Z_|%>t9&7mc:8pGOυ_X<LJV[&'|]Es.:EǰMs !tPG. \+ p]iu{5ƪ<׹ ~%WSӆZ%~ ~~V3}xI"v0;QWf?]֢I AuW {I[(փ{Qsk-筻f4ZJ2]j%PdWt wmu,͚bز˜?/ $Kvɧ!EPN04 sqo;zuԶ^=h YgGusڎ~I%<)Q\WWq3^d#$+[t2z}*uW<߉URh^x;I7+Z=sW%!Di!"/)ɤ*;f9=વ(_V>-}]P6W0 QR9h1~ޟۊnU.όЅm]yc|n%(Bjѐys8n$]pi!=kȷ'ny)2_WwhZ>7#~0*C\c͘,xjK?GoKi.O)~ #bQH/_:':UP-w|yDН|;7P_zN> ϦMlڴM2k1*zj}>] CU 5zk1u;Plna )~W7OY"Ie(+ePV9-~.=ɲs[qafӯ_?ݫ:o\\ϟ?lx*gblצZg +4p5X:q,+oкx6Bc7oMbIXWRpaY!!2KOi벓'B!鞔8vB!B$LHH=B!DѻwBhѢ΂pkZ֭[LI֑8!B!A$B!BD8!B!DΣ$5guF2qB!Bpi-+툵| \L8!B!D΢ijgΤ&w=fȒeݤЯQ*VFk[3rިr{i{G3_ZpqB%ٺc֑/0$:GJle}7-~dуؿ_,v"ĖdXvI `O[ۧr0v2C^)!AE ֳ֔eZ &s;Pұ k[͚Ѱi7&ͯMU3MVYx@Ɩ8éݸ/_K.Ƴzaycj0i="crGO<4mӬEs7̸՗Ӧlʭ={][6fp^SmkyIsϼݱ>uPv+~6d}?gݺ#|Ri2z-I_HSq}~{ I H<i@gѰQgFqTpkz6h[\!4 '~&GRdTcl8DS})L̴ɣY#Ю@'L4iSߣoxatڢt*٧!o{p =Z S5w6cWﴬE}\u62'lq jb*#!AEt,[KF3+%~;Mɥ+a ˈش6c׈1~VKEgɚSe>ͪXGa[#{X> 1FNՓL?ײzqNEs+93x}o`qzʗD&mx홿v+;LXtΨG|/g{Zޛ#!咍G5 ۈdV%P:Yi&ne/ZijyrIIC[;%FttGwW#236317ח΁6/}ʆ J]?c2CC6#]Zg y?Uc7Ҿo4F // E1f,/Buޟvqml&w(MϽ)ST@HP5~ϧ'!> EVb}X X2K?w#tLYS؅o!ea<\_Q~{<`r f44?F N<ѐI߄ħSO׋W_0U+*([;WbHd_`0jhl6M'HԶ9y NB:iR_pļ@|~#j4%ȯQ5 Nbaʅu6ҭ2qj^O"N)ڐ*%\FbVFA,7Og rK#LU#/B1u^Ot3zT С?0\`I Y*սT+ӂuu 6gQC:27yns%'yJ?[_,g\?ޛiR :@P_~s+hp>b_pz#B /BLpz= 0^x%>Wݘ]ޭ+@i׫VrCT/G04, rlcrsy/_h>`HW/`OTGy Z||):/i.u?cjTı.s8WO*yVl#3[F+4Y@>pBw/'pg_sgAouZ=V'NZkbikk³ڣWAF-[F׮]^!֤=3Ț(ٞ?d}Iw~8t$ YW{~sάX%}R٢E07{1[(6l6c޽뉋|c V{-L%c'.'N<)rM'L!r5}dKIO\HOܓCz&B!BH'B!9qB!BH'B!9HݻwU !DN%Y'2)IMMU}/l3-Xs6 HO\Hf=s ]EB!Bd.qtӕ u !D`HsGؾv#B0M_-զe'nBͬ{/IFSa:.ˎ).?yk|=U5оNqh rԫ{Xr+gxjh^>6kIoAJTG^ S4! ס\asY,ͳHpLޚθVEU!|s*WZi8e= 7I$Ji3P-/.З} q e0/wj9}zR3c& O܅ٌ$%(…siى`8ǖUv0#a[͞rW @8޽H9 & ֈ%vXckL4c^WMT{Wb VwEyaݝΖw{ =7 ~}E|p!+?dz `L zW~H KqJNMtt#_Ν*>(.hLva4?%: gq2DZmt,_Yr^fԭ_3vwa`n/%} avF`>YΩ&S0ugso< ;Y`P{5m~~nazzVڮꅳtj|̶&bhko\lP;gy°\[Ad[.jz"CriImF|6*;`zLH#%le DEĐd>6dS;_!WRfnY,.鸄aԨn7JT&*VN]ޡNDtw8p>t"-ƈ:3(8Ti pmB rr\;mhn߉3~}~ b\صѠj/~PWcĎߟ:UD9'>ta`LKgT7SA_ߏpé.dЧre V)d*|ve(&۬^[OrmzSMqyG !0cqH$'`(Os61qmBp;G$(N3H8'd4 $`sG뗩(V-#j?sTƯGu×*^ˌaKIwu|͆*y1͸hlшmFp'rzv-GuU5=]6.#y-voFc)JuX14qJ6?>#8L=L0Dޞu"ϲk#RBbғVAI"!+ksbKK"1D'Cz'sdqS̙Ī ?Rw7|Li:VNjX#yɋ!6 } %33`һӜr9Q5TrO*CYuIVoQ!{@H>4hyv+L\R@EOOK$Du"^=3FqR]Qr)rqw[_ TގdXع+´dBV4sM㈈|rNPH5J{7bl`GYשGnSv,.:AEI5Xoǚ8<UsGY{m%.ݷT Kd8eq#"+MIG7y V&g.ǡG!iǔzY'6RJNԤj$+BW_y`=rJJV3lx+ʭ$2/=SrVU4hﮠgP|G󗞽 Bj{&:ʞ(7pg]veƍ2[lY>J.cb׏gO|| fؑC2f݋߻÷濜+AAA܉#AAABY[[A(D{Vu=Q.ฐˬ(Ǣbԩ|'zޘ4 ok   { mO\ǵ AmZ<.pd^T̄PV)IgY>žkԑt2rdian$Lx}ڸs u1{JUmpa&jJ7nB Y.}uBx2ZLXD&UlXm,Qx|d>B})*6nf6JrϪؕi/[_ Gݳ!M4zUd[+6Uɉz&=3@|1{Τ!)|I>%NU%$W!xy\]miEdUl<]|Ô(!F[. }8kt$m>8˶p~Զ2IN< ܽKҼ?bј}𜸐?D0 U<|= Ӄ<6P۷JI]Qյ*WApp0GgP Ci{g~)AA[Ce /Y4d& 7s,0eM95v"[L_$էO݇MSiFEmW)߾)%բ\4}5%UfV/k}ɥ[|D{NWۼH@H4: N WN5%eʙfb+{t3Gtd]|"h/bP_s6,?F w̾26]a{ѽ]VϛitxC_ FM!^N4iYK |6ͱK#6񏉷oɔR31z5E⤂›fS"h$~XkINJE@R1 OC[3G[nRjͧ攗bes/?kJK^7A>"֡/pt\ =)X;o\9*BL0vC:!YILz*($$`)liI$AD=%_sq m7It߼YrpƇi)b6A ?8t-'z-6 QEdblkX^>:8[WU@H tBD4㼜Rw}It8tӝLע,GB-w6o^(cnKxē t:~ـu|v}xikk?@ "v0 6GLA oX<4BFuPǢC! N?L "pΉu315hV|SWm$Noq6&qB_p~.giψi;ʋF%Q͊D~s$jw>NApʵ+}OMe=?6Ra8 cѦ8_#`&ǒƷWL)V#ij!m+>8 ]hԽ[3}٤ztq%MLJe5F0N&'*~DXM~c?@HR9y-g)?ҩ/dJ͡vYcڰ贲2]]_ 9=0d#aIS^jwAzQ/2Ve ^62^K=>U/Q( Y:xX6›dA\NtmN(Az-MfӔs6y=W{ @!hS&@/0aM>vℋ   (吢l%;y[ysfq٥62AAA8l"  PHڞD h >'dffr|X7'IgY_ AAA( mO\ϟ <Z_b0gu,RwKOD!9p|fvz}'Gɼ<'a|3v$I-B>QHu ElJ6iT`ZAKOQ~>lUəWiJ'V,&0^=T:GY9/2a׎ n'LѲ+k칄n!͘_C>I5+ӜC:nBo߳l |#īRHum0U*[*xm( vĬ;ndgZX4SvcW cgngDe!2K P a)yMbW(\]_aZ(.hLva4?"8Q'^..az0*[:Ϊ{8S~@0ʖZ_XxK߶Iuw[)黓[V2I9RR39t,QyPi/dbf~l׃:kیح{=Y8k+Ͼ0hwdײ65o92rY!L=f2(oBR3lcMO}pV[)p>ml%twݘmJ,>SI}2d,-f0AWGޡYC$Ԕn߉vŽp,ʓ-uִxcSA];~g^ 2nհ|HTXK®^BڋMM@2~\@`ŏTIh4г9'Z]) *ⳣ3̔?v %yq̯wre~lv@}NdV8:^3k ͬ >eKVظVIE,N+ TlT{?mHږ7tBM}OT$B>jSL-Qt"Q'L}{N`A>Ĥ'DB V,)D;hcNl$&NGVi㉍7 L>oL _=P_W<:? * ) I1Cr?Hy'˲+UU)iR=ua H KuTRh+hiO\x/;d<5Qgèyϧ Bh_Y]|{U.iEʮ\wr::Khu:!EMNJ2q :.:X[WTp_H$CD'DeFqf:N6g8K)"_^!Ѕ-7깛"wN%ZJHs8""ӟ,CPmBSl?=.Kw$'jb ص3^ba>f8ף Y . %}_W穬IJ6 IDATw5itm.6.:fT3s9Тti üh]3{0,R*Vp }X[(9eȆӊ%4v^ژK\oC:=ɶ2U479s9= Os><ˊ#М(g8SN0ЂY{#D%;b݆E"3n5MdOR2PA1䋖vyJM=֢?[Hv䝦Uظ˟y: M%Zu"+N3Vp(ɗstM#QP3A"sHآ-c"u2چuq)< M'g Lyc'܌1Ƌa_}H50n!? {lO}=Xu"1b,;1***0 ՜Ҥl>Ϗ |T5V[3 e~/_zʭ hЀhbn_AވWmτXGlk׮lܸ1sSXf˖-ܼybۊ+rLȑ ׯgϞ58xܹŋ'A.>/~8sϏͰ'.G:Kϓ(AoxKY;} =LAY;SAA<3 nƉ9(nڽ+=|k˹zj|  g[FAA)=qA +ў|beO11118.2+(&!oDOƾ}-KtmR6$mFf}+  E@+ptv#/OOٌsqz$R459j`r_? HeGϼU1Rd"W%{W<|ϪRUgj,_ D!ldrxvNJVHӌ[fx06Fĉw8ۛG<#.fOj.U>{ϭY|<=mT(X#PPOcN yXd w= agR,(]#7>9RHs?뷅p/Ej{4Fٖva‚tiM|Y!GunՁg.bG3\ϥK{]l' Ir_ު!^͚ݑ |^<ר/?;0K4jܑI{d5t,/GǙV|*gu_=FOXbϹ֋E 8*K!uNΞe3{i5~l ^Ri3 =W H3]#_/@7oզ˼$)YeyȏuШU;zM;Zkٺ 6ūIWzkӂ9^Dnc`BKVB$ ;VæNe\g.ŵ\Ҍ>5|ѻ<7l|RyGMg$ 0u-D45ϗ\>xj hئN23gU\>ԩS21?" jZhoqpy4m7+|"v{;z(8"gŁ Bv&}/+= 0mfqv*RRd%tuY><ϼsHcښk_gC=hqc'm B(qv! ENTH&!ESlaM1mpQi vCjF ^t;{? 99{"'Ze^lZGa62}!MF a͖ "d$/^|.JrtvՉ\ܓY{ECf3 X֔Sc'҉Y_c^뽐Q =$B.O͊HXUE(Wj 3}5%UfVOk}ɥ[BIg#|7yJv~5 F ԩf_5 l{W6}vcp}Xږ@ҧ0Dn+ tsFL])nNjH8T4[ ԥޣEk>4# 5ouF<>L@]Z9gUiW4!θComs w#gq Ktn[+,1낾k˒9[VG**[J޴t. #Ysd Уsh*D|ܾx3`K.K8ʠ.]VQD<֣pqiABO[<#]a{ѽ]e;өqJ$We0jÂa)A^l[g6JA2nD|`1SbICĒ&962qٿeV0H竓L}K\Ɛit}I/u1ZF.aU~]\si@]g _^d8=k-IH*i0sU}\  &`gڠLNomdKIHɆnM+]sCr糙٧"c>e?ʠf|h#[ [S̐(ĮGtmR@}/~n3%VO~BRP'ƓhiyXcmJ\ ӟQ)|SG(B`^vbo.[c[Wg5*pQ{hy3|7|P!'egZ JW?Ƕc['wULՎ'?s}ϯlAĽqd^$h%ҒH~zyrc퓲6 7&>85Cb~"~?G.2gM.g4"N|ϐ~^FV|Gd/: rqҕOzdZW.Y¹)kıvԽ_뽡ɖX!iyE.e'l|{؟joӴT֙{s!ي@zQ_lU/("J21q 5 X/H 飣u^bN'8N!Mcoq2cI_!u^v*ERD3XdF~7k!u(.޺qH*{ԯe\54g9hy#_fwsX#LӡTޣlȸ=iQ %9{eȸöHH'CUW~qAU;,\A#v2Yl]wy7æΓ@ý=_vʴk mO& Ie&k`m &88 ~nV_䒵y2}Aq(hc"ikk?@ "v0 6G*@&7e̞2m0 1g › pC7]eiFLFuPǢC! N?L )/Dy:%m$*]J2PӚwJjs/?ZڝgP-ܭlrʢm_IMFegi N*XF,(N~87I~ެCnԦ(j*rr.9Y.O5Ɍ淶E\9Zh%{<>]ʸ& UaȒ |1DF%igfGwgP-$>H&\sW&ĂnjB = w҃Nm# 2)ߨ'*?>M70oT86?U`jMK/~8sϏͰ'.G:¶|EI =Ӗ&3i9~=Xvѐq)SN㦝o H> R^AA1 nC9(y.;:}I|ο7ςAAA(BDW   B!Rh{ V=+:ʞ(דip\eVcQMBވ7&ugQh/AA (=q>J.8h_|z$W~ձH ,=E@٭f@uLQZ$4\P2 O!Q?Ã=+utQyK$i.=GaW8~ 0U'g^ )qXx OReeC2"8k;A%,)ߴ q y vq;Qd@h^Ycg%v}xkʓ׽bV9tV߾g7GԉW|aTTjKz%;cQY?wn? *ϢD!:h#$Ʈ$6z.J-C#^fi!x>l73Ilŀk 2L@kY_5 ѿ/`7ҩDoIMKRd5Ԫk=I>rY^2BX⻃~nHeFt&c))5V2?}:e:h3AJqe1Oeמtpy:ۂuH$HeXw̸ǯRbXG*c yRαmE2Kaϻ= /38Zl 0 [DhNT/&W-GGm F8ɩ)nܹC2ӝI.L؟PQ'^..az0*[:Ϊ{8S~@0 N_X8mUk5Zn,{Yܒk. ڝ!4dd>%^Lm>gzˆڿS(kی=Š] g)} avF`>YΩ&S05$RH*,saFEuƶd.ѩ %/JiZ5gs/eKVظVIE,N+ TlT{?mHږ7eF2-4tm˶Xf4m Peᑵߔlj}@G"Q{}`B]o:gDn^ܣ.vc )$&=i$L6G.fI$RACtXdk&6q:J[Ol vVo`|;]e2Oie:jJ1f$VylfPnv~ϫ:RɲJbU:gU 'oTg]XRR8G&BT> %Z:60 OAmeۺK$) ?āθ٢*Ռ\v($]Z0/Z/fp:A|K}+1glVwpZğf_QKsKm(U"EuY*pC'r큆.fHəqQHx1^VD<é4pBy4v@'.D%;b݆E"3n5MdOR2PA1䋖vyJM=v``:A ;N*l<zJ+8Kl9{:Цđldq n 9 lQٱn:ImCѸlp[ZDnP$ J7B` NMٽ!8vNec"iՇTQ;i f#g>t Kzѧ㨿?EQ'@s/oC~B!P.MfXzͰG_CoE5:p>>>/{ҳ=%WneXE×hﮠgP|Gs*Fj{&:ʞ(7pg]veƍ2[lY>VXc_oF\@~8{s/^<Gy<78 H{r|<dhmtӷd{Op2"kg|  gF8#e`]wo9WoY‘OAAALt   "' Ba%ڳOry=&&&Dž=_fE>${c7=B.MJцM(,AA(=qn$<2ѓVr.NdZ&2_ ,R.gYIH׳*@ՕcZ$t_r.W \B_+A($y CC.ViQ `q fӆH#8Nqg{Hgv$)U̓=>…|g5+ݔ %3d iZ}I~8I[ IDATれ'6 ^wÖ6'G gAmOfA(ےn>LX0.-SÃ?KV87t|ޭ:EhƜvi/k7² >IN+[5īYS;2a{Owt6sf)V0U#לF;2iσ.(8>ۊ_ \ ~ Q9wszhb]eɰ98̓c&bx:Åƅig\@zxSǭ6]$I*C~[Fk=׺^[ hش)^M2@x_#̹P%rkwr+5A +Xuvc:qnsI3fp${8'EްIE]5Qْ3xP:׵ n?Ҽ?3zH>_r)6cB:Y}zϸΞWq` Ѭ.gtrܬGW)80 3:5VuhQ'/f<Ⱥ4EB[5uEVYl{U>M@H*39[ !\YA"p#2K~̺ohڲd/Uѭ %mx7-=xݿ D/sh\ᇭ(YBE(t; eiGԥkQ*zNq:> 4HiǓu ;̡p/˺Ӵbg:U<ΡSDv3F ´{}X0:q mK_)(@f bOL3fJB, vhX$^7F&>.1 |u#6񏉷oɔR31z5Rgk;N/eֻ6f~9Yk¨Х=5 ֯+2k. lˋ8G'@Bc%9)}bI4X?f~!^〝mfmJ&'6%ꤿxdC͌DYӹ!Su|1{㿲eek3Hy| nln8" IQGPJZUQGE)EJqGRHݷ"dsgwGPI>c;||3=} rC1˹ JN ]@1l"IVXA%jAife딤Dky3/=*x3QDh]-RȷTyrP:Ūu_1M;n.j*xH{h{3x7ךN1͔340^|Miٻ@?׻?f#VChZ۟|G6Ux(@Q>_%Ek2SI{{k 铲#)r_$̰w` a|-WCc7ugj$7 wv2i/2+zk6tQ,١n6h5wpiJIt-٧ wT! :6]=lJF<3HL˭KG[?Fe^#+|7e+u"fh 𑱭ޞO]ƯPIOmM'2`WFA QϐO*e$ Ύx<ńq Wu'E}zWa]΋pj*6hBr8Ywxhv7u @;}Wy9rZМT@Gt:?%{^PUhN CȾ-n CZ'粑,I3h: *8aCT: :ӖyM6+$TQȊ9{UA1QO?͉ xESD]H`` c=%irԻ%=/Rt 1VQR8;"4=hęU]ڎ%f*G.Gx!S|= oV3/|KE~ڝӫ-ܭmv‚Mci`Va!#5-LytqP9`gOFz\Νc~*AެG/k(Yj*Lgr>==ku nA0淶ʹ\:ZZt.fT30pQ cvΗ9ū}B9H_>%J[ij<Nfp#+Zx2lzKFyT*~4sݏ2(dHhh(;w~ )}Fw} ;\dX xL:ʛ(׳gGlڴ5yV\s߂ СpQf…@dIyy|<=WDGJ 1tqddzM9Ŋp1+ˎ E&p7+4|R^AA)=%\l5WӔ"   AAA(@ HV5,PP:ʛ(ctYeV#F^,Ƃ|/_@AAؑ8WL<="0v&KNq􋬞#dK4>]+ad\^~!Y9uE{8m g5|l4t=5QHzͻOp+݀lF6B23% \=aܬԋ>8j$$qdB“5X=U}攓v߇踠=z}}#s۶DpMk@2sFˎ4)G%)S͓=ާ驌1{Ţl3N߰d"ךWGlK!luPQ-m|3 Ew>΍T3jaBBLJ})7j͎m^!nG;T}l^ —b@L@g琙Lx,j3mYTWsV2njt6xx?7TTّ,A8DΕtg|\&csX[+~ybd%CI/,>ٶc1,͸~F3q3_WXi *+ݡg4Qȸ7 *c$f37%֟%۩,..n=c %ltOzU : h9^mN7Dpxr2]VOާFWܔO`y2щT|<(Θouf>43t_sشӲu$οl8ؖ|ia257 ;Dz)5a+;7d\}JI'?d%>ZaJwEg;mgDM`mtY=+ٵs/'̍1J2CZoʶmk2e瓞1L> _'Te٪/NjlaCOpQ=.|>m$7~%,1ڔD >+awdzVNqλF_Ðr;r9iUzT/v[z1S"աs7?oj$gZbU_1X~olHIч{!GzEVe1wCMxh6*a,?Yqv?n~%֦ $28x۝MK PIaCi_0sp_&A-(]+b⸹ܹT2u, aN|֫ʨ s5%p6D$\FRTXd~?o..fd<>l4*cop&&%&`sl5䴼+ ;a|$6LY^{'[ K_ӹfIE8?h$kluebHK!G-py EIO)kHINCQtX6#kPFsWl_R0lIUi;l*Aݫc.|c_`!'m&4$R>80YMPv ` } nNW9/~UɜuܴA0Up [1_-\UɲXaJ Azmgh w9~.Zv}ߚ"-$w3@O9QIvf(<=M0+a7Խ؀ډ3M}*(amc\̊b?<6+HJs@r$=mH~v,g7i|{3]\drLgʎurz~ŝLj#/sy{/cjw7G.Nu3DKtlHd%I}7B=*ׄ.Gؼ mހf af 91l[,tS/_ק YgϮdVv֜#U]>uҾ4w=oC!jB{b·]0)"l]vv*:q &x~[W3PГx25pw %8?xq-K>ˎB뤺[g$T\$ (d>T/'@F{c5i -hrȋ M%[WiӆmVjU :[(?x>]J@=aؖv}JM; z9h:}&* ߏ[&lU: GAL xӷ3f(jĘ7|{zCY)%~gƌvMEgchP^^`RT`ҘxA*^fϡT ߒ92Mp 'k#;Qim a^LSV]/KOBcaӷOkQbٲfG2ږͻҸl=(BRb2VvEtؔ~`~= owZ)J$x*jP8a/`~l"eOرh-:Eb8QmaCl/xCglo>B끯3[&ؖWLc^zlz|Yc^cRhlV3n {Y>/{ʍ hPrzt⓰Y44RAWy3'(o\^^~w҅uֽ+mqOAAA^XM?)eMgM'wr^#   01,#  Pؑ8˂ hLry9fffF=^fq{,Ix1b$d̾ hz}s⃵/~vêfq!  B!P`GL>Kxz:Wr*ɀd^&2'|q,ىƟ0[XW2fx0,+i"&D0bOJ!֢W l7TߚHzkABAnFX<;uE%k$-'(3wM5[q̋zж{T83?>eQTUrdշr*S=LkH%{4#\1VR.aHbSoY<)t5,3fd[2c›5MӜYg2˨ Mt v# niBRf~ ea_U~ɰ_-Gr`rN3on`X8?1mE~ vq0{%1kZ ֯߷U:#Yg3e3*;@1BsD\`fD.>ҳjtt3ߺ@ʓ^Ψqjԋdv~F~&?Q#y%!"i ٖ[4+63n<|uY0p)}B9NҦ9d׎M~-4_3 6Y *:̐pKU;RduK\՜םIgޔ_&hcq+m֜%,2=ΡԭjkD65.4+cgͫmHږ/d8%qpOHZ0sry9Eߎ@]9-*]z5CB%EV.`| PWgԾSE IDATEBƥ;q7s;q YܴS#D|IW֖qzW@**ī\M=i5<6+{ nrDi\bG[ oM*bo#JeQvEd^ 2:;u⌑@]ݼqA]խ㉻gpǓPL x<#[X0e%Mrw Sbz<: ˑJ\_(@N\OL%9Eo4V))IG%v2Iڼ2+%IN&#١%V.e`L%wҘ_.megy:㼤gwM|"3W_B԰6Og %׆s)ݗ'sdl5i)`p۰pm(D5ثm. {^CBw ]|mh3}%w34lfKq}&ded0N=} rC1˹ JN ]VGɈFV9Q6TbAKnZ|PIZ(`&-ay`c:%)}|̋iʨ4L,$'Z)~˨-UpNjWLm+펛J6+4 pfr~ v3n:$L׫$bAsZF2hϸH~U+#'d. U>8~/PT;q4hIњa)leET=9Z/slmʟf!$34B;_KC{U&~l]>33; F] zZr˼̊,Ś ]`Kv(M%4t(\ҬF?]KF)+-`H BȨpk5ͭQQynΦ%[`ayf&[3~B˼FPuWnV* D/ o1_;B#c[=Vo_*X%cO\e@I#1I N[m7xR.G!+UV"Dy>?%4'k*$,rcMCkvet` zç-ˡ6RJbp .H}y.XR\tFItn9gVwj;TedL0/|J[ͼ-^jwNpڭ 6YMdh|3-EBЃ!=Cp9w: @yj=WcǾUd0o,ס7Ubw?|ւ&Øڞ6pqkiIx|Qu@Eځ:_ JE i ؚ²d ,J~}8[tFʩfxSk67'æ$`NeK3 *B3n{x-2COgѦD1WYulm9 )]hʝg3U/cf[=}a+>Z#~nԴ/Dg$MCNBe50ni/#ZUuKYi%+:#e+ Pާ*]gawS$٬eŇϪ?ufdkMIyKM/yyL<MފruFr㣌ҹsgќҡQgtחбEE. mτryy={|4ϦM^cn 'lʕ17-88 L@@'O?599h.\8L<ǗcsEt$\CG+AVMДS 2Q)kq3OKɧ)EAA "ى{nS"*u˖NO>_^Sk˹z,kN>M)/  PAAAiZ˂ hLry9999F=^fq{,Ix1b$bn,B4=AAALA39q5S3qOM`#0p/bcl OdZ7dyf̿UWl033ޑ%kvwVҍzm)od4fJY)ܹ~{¸YC[}pHLI'kzKŪӾos@}l  xAi,L` ;'ض%kZ#5ZvYeM?z..Hj>OOeďQ<+ew?v*X'1<:b^"w>΍T3jaBBLJ})7j͎m^!nG;T}l^ —b@L@g琙Lx,j3mYTWsV2njt6xx?7T4k3tiQ-W<̎dф-Q_'r,%s?$팩&3AxzNUъkq^J2Fb;SNiY3P2vAOhB櫔=*spW苷|n;pA{vpQ'97>X޼Ltt"ei73['28"r8%"+i6!bEr[6`(6mխh75-yMH ;Y̊K'?!meh:|s,[X=+;5W̍C\dv@=loeOxǚLHz>w >l}| ܓ-V|񍤦+@ IZ *c1A!wri XGb+c?[[_йo@\x糞-gZX]OhC|\"'fnC#pOHoQs:tZ9Ԩn(a,xk]=vYvMIȽ!Wtoϧ~u "d,2b^*AvJvko(NSmd2;K_th ˶uS< ry-4HȸT5Ų8mѹ}&|8m0?c%RHJ<^x5g-=A k kJl&*:Iƍ4:BA$#&K3\f]7ȯM]|mx7,^uͩ*:q/FH){N#%9 EqboB]/5~AK_œ޳&Uuٚrp'L<ɼ d+^]0z8SA(:,.bd[8He@U.-!wJOWؾeR(ٸ| ĵ*Z}>D+]!~̨-Qxz8b^2Ѧ>hTRRͰD.fETAHNФ'E$ O6ÕL&of5 jDvK/)秿ūQfσ3#'4O2hY>^Mm1ACFS%0r'|ܱT[T }Uat_Xw,JC~7YxCMj2NRHJVؙtL>!v8>*J% 6( U+8} ^ ׫ըn\6g8 ٲg}SK,͓$=*ׄ.Gؼ mހf af 91l[,tS/_ק Y”xv}ޏ]&j?-n#r:Y׷opD1Ax- |1ۯf'd-j*Jq~%M[J4(ٕ9:宧];J;/@LNO€BN,Orf;k&K{c5i -hrȋY\mBxՊ)*QM]'qVϧKiG> ے֮oP'>NFj + Kvdév瓹0;g,ʀekBVðqt9Ĕ,Ќ?}1ڱQmAyC'gQI¨n8Yor0,i5fnG}0;h3Zt|@Sשh<F1ABvv*<xO33J96~FtIhu,2òZ{6Բ)~-jѲY,[,^FRRyWg5x?- f(:5%:ӤLA!;ٱ)7z$3H"~bSE j'̯MZL;O'CV BB8- pmBx9G)e9y9Iǣ[Qθy+|ٳ??g|ٞR+72n,G(> EK/Ax%={&|.]XnkMd-]5߱-_ L@@'O4>DGGpq@^dIyy|<=WDGJύlidltm *43&p2,?.AAN#[QQtִ{y7O/Y0)   2   H1,PP:ʛ(cffftYeV#F^Lv nK}^kz}s⃵/~vêfqOAA ;gr1\3SNÛoѩ =fe>~% Hi2l.sjPp%z03rIkO4T=DUy9? (h͑H#+gndd4Veb@2svf+ QyPstUv gf0?֢LS>מ*X_N%bi $yf+2@ʥ=ILRqʼ-+cSɶdx5?й7ukx7')KŻU>a̹h,_wSXڣ4Cƃpܪ^M'purw`&xA},9w,rif4g[ ]>=!fC~ʬɼY?+?0Fo%(.rrMnNˊhZ~p1;{tҌŌg;iv8ë3uY ][N[fwѶ^]|Z){XqiC[7QӦx5”=@-s>MӜYg2˨ Mt v#!%6ӂ1XG-y(QܩT~ 5HȔkǃ:_ϾX/+ 0؉X Qt(a}2%c? ٮ$.5TSFcEr{4,=/[bg+.Q3Wgf&qGa`(kUOKd^fYb͆.T|JvhV#dbleUz4ڇ噙@bZn]ʎ81r-ʻ MJA%-k' B#c[=Vo_*X%cO\e@I#1I n CZ'粑,I3h: *8aCT: :ӖyM6+$TQȊ9{UAܧE|~JiN$'THX.U$@ Ç)݇O[Cmޕ-@\y\ե /hęU]ڎ%f*G.Gx!S|= oV3/|KE~ڝӫ-ܭmv‚Mci`Va!#5-LytqP9`gOFz\Νc~*AެG/k(Yj*Lgr>==ʽPɱJc*|xCop~M1L z[*R1u͐yz[tFʩfxSk67'æ$`NeK3 *B3n{x-2COgѦD1WYulm9 )/F- IDAT]hʝg3U/cf[=}a+>Z#~nԴ/Dg$MCNBe50ni/#ZUuKYi%+:#e+ Pާ*]qkMIyKM/yyL<MފruFr㣌ҹsgќҡQgtחбEE. mτryy={|4ϦM^cn 'lʕ17-88 L@@'O?599h.\8L<ǗcsEt$\CG+AVMДS 2Q)kq3OKɧ)EAA "ى{nS"*u˖NO>_^Sk˹z,kN>M)/  PAAAiZ˂ hLry9999F=^fq{,Ix1b$bn,z pz   ;gr7jg^N]d^|ɴ)~Y|$lɑF3k%,P3qOM`qkl]9dSD~}%eA^ؼ ȖnkOy+$1SJ Jڪ#FbJG/$;;LȘHtE \|3S1o\UdD%C h[XZ-A7 dBݽv(4.KJL6_"Ͷ$<|4dӬu ^Y.K{‰-GIwÈhe\9 $|=nӫrII ĠTG&E1CˊoO]1k՟QLц`ݜs% d'N]Ql6kvZlOJ{XԄ>nDUsyp*w2+e _Lic.65~ ܔGjVڬ{)~o?4Cp-}z/LɸOC7=bUU" o%!I96OGYyj,?w瀆  @UQ>.̭+[`" W!gD.ǦȀIZ8Z͇Z̲N+$tSv&WR, RHJ1Ʀ?(>}1Mq+tѷ;ɉ&2fY jPv ׂөl1JaM8 sM2,;TE6̸!Wa=Z@mg#NT?Q'ށcZbU"S#mUuBc#ɹ+iƒ NH)Ѯ=usR'2.يVNA; #!c_"VOTH* JMK~;'rG_8}A*{K2~|ڲ ݚk "O=3D-i{%ƎU!gEӅp3$HD4z%y cl61 VXFcӚ~ePd"XZ䏟:xןܲEU}y]CY bf!)1]b 1}>hdU%&8s+,lDEù5uBO^vfS<}~&|s]"mMç3ۚirl@&qcO().=H~ jez{J!&K&"3~(a f!lٹ)S(UE:MyrJz\?jɢ.ܼ/":]n&w PC"pDxgxn?La j'ND|³VAI .S3cB&JI QDp|$Kk%#ںXc 2Ew{H^&DL|^٦&ݿ]AoSyr'F ZWO[Rnۈ6/k(m,/8VJaA#X6ǡԳrL{ Z|ql[wy)*Z{9Aޙy,"cU{=bc&-QYUNF&63Qo-1O$N;%X B1YFm鈍 ;|яusnN6[*tr9Ħ ؁$GN%j"q"g ;ja aOdբT$Fbwp)@%V2kqRI\faFػԦ Y槗o~ e|\]Z7϶ IP@ /RRo*^2 9z- ])Np|97 ‡ q'-QbTYZ>Ğe_9$㟗&2XPh6<.5ɲosJ :RBTiK#Ь(Oq& M]P#a\9 /x-57N%k;h֚Dus&Π,y2&Rz:ZЀZ#6r7#QWCJZWs mϜ߆SSy8+Ζ3fe'L}E+JVatɇ3X1)]1ڲUm>H& gPO_5g3[9i67ǎEx2%r|:F?n0cr&[1u-Əkdfs_V+UK\@zl|yYZvr'?/-P/ÄjAC7 0Ԏ>ٞEZUi1;6,VFR[Ԭ3 z?oD\ cۯ,8E2W{*erD2wgзS^ j3[,FbL\{K6,FQ??Ny8Dx u)Xx*ʴ5՜ҤLW˙,˙ğ$;jہծ]tHӎ0ًi˽AJ584 JF̞M4hٖ/+{u mUިS?θkzUo+7 Unof̾]AkRcmmG3e :pq.fVsd=3q$u/ݍ[O_̔dאP0a(17Æ2v *M63y9o`k8|6)S0yXC8a hp`یgʷLS?p*`GNJwÏ>aOD@s?vc{x?A]U:9V:u<)~:` ȪV\7tƪic3~NG n$L(1~! ő8STj6cάXi 0.B‰%)~ft5~܋ hg%!e{v:heJpJ0iD%p)JYe4S46=[7#q/b2ʹ{'eg̯NP̳YsEf˟cGpƜ9 C{f}1Ah *n(.ari8!#aZƍorFoZAVɘ)2tK"|'='xfN |3-~_ըf~Áh#ؙrzqoti Eza%LI҅t)D? #ި(b.kj':|MJfȀ#E SIN8(8T4i_K śѼuN_JC,g³%j>Йzy{tliQKmL3 .X=I*L r~z\}Bz!;, K@t.BÝD ֝TJDd}OkKF i͟'4JKѪ2KT4g8SzHlm >ti[`ԁN'8x&(vߖZϰ>A ٲ(]KBo@lVoZAEgfylKFOXZg~YA/Ϸ'YbAu &URaek~꬐x}'{b%vo&1k}0e:ivWGqݡ fu83E)fǑPuȖ"fWQt1QĚ`zVZI|6E0Ap'Nvt3ZXӹ4[ afʼ wc) :Mi׉p9G'r߻aG]%nc{mM0Az2:GL0-J**E]|,1{O3̌3N": 4ugU1dK~0s9e~ δ|ugleqīdiڳFʃs= Wh8Ϸqjԗm^%6m iUe%H~x1~V[nJBSdCˍݫr,_r ى%wJپhaE\:h$k\^ʨ( j73]o-y%71 e#Tc Y4_Gnj a"qAMq¶BF#7hAQږg:BT7#?}2}=E$oĈG{dQs&_+췯 ylO.+6_&"vQ>pesM#aY3lBS\g74.E>r@͋>WAx3ڬlڳ\CB]؆hs.LcĪhKi˫|FMq2Q4\lJ^XPsb?.BljxfFТ81rm<ZʽY8ثQa#Dx[Y 7K)b,qd$̫taDzGrɮx:oŐ KZAko:PbN{k$}YN%ɮ1_oDizrJN/>uvL7.MfWx I ĠTG&E1m[KxfB,_׏s#jȕ(<e{Q K皝-<Lԉ54˖ NNj6rRmPs@qc-7('T :yDAXr ,Q/'c\>goAFUu6ЄԣT` L Ji85G#3sԪ.+!并b5q83t~[0myL$EPULâXk+5iQ %bx 3-o/;`6 "}m|AO[O(Ӯ3XblZ3uï LD+[ DsD<ߞX' +6#)h@C-%䋃UQ']ǭBCI .(e2I* cDXbޯfNŠDB c$I|۾|ဒ+Ur^9ϼ: )3+uWsuCü' 1OgNb~7`ȷro8+e ?8"&$TVjF%0ĵ(u :_+)Yt}m3e+vI WY2OL0D.;Q0|_Bc%m濘:2;n B'Sq˜Ґ.-TB?Q[`QX"=ǓT?S2TC||2ROվ{FHڹ|w}+gJC+eȨ~6>s^'V`#ONsn?3EEL9:#Q]-pq%>GܸqqE.3 \Ax[,,imbXfCF2şx_ '<9v6x=;iَK<4_\Cԉֽ9]fߞlGcȶUͻ(X*TznFk+gyȀ.,gkZ"puιH c'>Y=n`Vc tn"m4 4A(zG*Ҋ?MmZmkRtN]Ic ֧Sơh7u a@^%xҮqbܛjZ.ͽ7 6K_Z> k%KG|<=Ǚ*4uCq4H5 t9}>+f5 [%t>Q'ޞVijΘ5% W\s372r1Zh9'1XHj1noo_zKOQ%bq;OkZ8_^e֪s#CA2h/d_ET%3f!m %rc"~c͆*-:M7g- #2&u㏲׷,Z~[ %^eul'1u;nuӥyΥ,MdYz꺜ɲCɳܙ٪ՠԩ6mz @e [꟠WٷaO _J mτFqy{}b z{^Y˖-s4^ruu2ǧ;CҳgOΟ?sbcc aȸx.+ϯ/d:%}Ӳ T\u )CP"+*\駹`$Ű ͺr   d'Yxr'|zWKAA    Qyv&nÆ /.W,(s".{Xo۶m$z5fk֬|xb{7Ls߿D{yw%AaUjҐpAAA^u\vp6#bE߱plC,ĕYŰ+גe;|wOG2bZ4UŌ͸$iV€ʶ4n0~"JwC _wAȊBٸ=ZB%pЅeMlOy!n ޮ++Yw$ u!kWtM(sq&h_v8[Psrݏko:HOdmwqqg I H)Q׋[ì7>Y:fB^o1tlAʮ|y2C ~Wx\0&̽l ;ufqU~VWWWz'YrҕU nY&q{{0;: bYˎYoـ͚Ҡv?h/K1pU.|+kAKtBi;ə3g8s LPC\z?g}̎r  S3zPKmE*.vnk1t+Ҵ# wbro:{zPR :?M}hS& Z˩yJ|}C[գ~Ƹ73^՛3JM5[/d5A򚔫XEL¨6\ܰ٤dYtL4qKsw.$+LIv = v?r >}>l(cܠB&cؙҷn{5>Ô)S‘U>n @sU~f>`kfOHPbB#qdݧܙǩlēEjURX-_V*7UnqCm|j'ϧAw}Dk`q/6.Uv÷p!40|-MF d pH\ˮϰ{'eg̯NP̳+,0^;r?7lP3ۏ}̏Hd B/dX7/!<"L.M'3d$L˸QMM+t׹P*3EuY6t$)tӏSq+پ/q80-r;SQNW4]N4-awV䑴)]IB0⍊(&bWġIXJ.ތesRg9 -PQ{c|CwcK{dT;ږ;dP;3`~,u؃N¤p*緭'hҏON鲸~}z򉭔1yY-S *7ibPH9)FR'i(QwhߺÕj]2;l@]V]vKۢCw:3D3zr&7kȖEWr^ ~bz 2%.83+cX2z0B&6&> zx=b[0y BD+[\Sg;gnv8/M6f~3Y)ӱMs׷ˍD2W0ω}>$bn!1!]| 1{޵5su1QĚ`zVZI|6E0Ap'Nvt3ZXӹ4[ afʼo5O!REfxO94ߤ΀O2r =ZX87"@I#-:.d7C[{3x.dig_TRV)( c/lxafwJL;_Ĩ8$[)#_!0vm{=e3,h&^%O+О5V hz>G ljx]>vPDn*Al;fH*c.Gj]UƋڒ|uWr:Gb&N.KW≋7̼ RH|S۴u{dK,n ] Q1XYǸ_8Ȥ5Z_ymzZOY)=G:-`[7]a͉UtHGmhVc˩lo95#1vٺfeS!27iލE(Gd3LBϔH3lc'#"TmVNIAGϥG¹_;Xc)b&- 'V2$`Y,͂ "oON#*x$sl l\.)$q]6^ =>8y%~ ]i)wjϩ; 4qm?c&ԟSjsx%BݪER<&B7qMOv16qس7hhUf4 }Oiw-\ $&d` i!lqi)"[vb] `CUW*XeIo~LJq {wњ PK,@]/Fj6Hڛ,!Ġl7oO{g5ף]6@BQX+ \M;8TdS<X!@!Tҹ|$-1gL9xD |(0,˖I(h8} թ(O+$8[ԅh(lD91I"oO 4k M̙kCtf7x{ZV-Jֳݕ,hXyژ+\ 5eA_̄:gPͯh3 8\J2P!S0w MiRj^j>B~Uq1ԱAdh/,4^Beݍ!nR.tC o&xn'݇WbH&lTq9 u_2s ͒$TvFL"zG*b415 rtnEQTMWa\9Sqm<ƣqz)jG zM ?L$.)UvXzhư-9WlBSChu"&0~g/1@gӺDch,0jĽ5ke!҅50M+c`QO7!/hХ%[~c-AQjwBqxND<3%cNSKiskxz9>]c|(8ly銞zdJ6a2i fnЍe O9]\@_kYɲu9e9*g}E336EAر|_FUnFq}(3eL\P۶gOl̉ݻXb۶m9XY&K}%__,||3t/={y'ŋ6.+ϯ/d:%-[2tY%HM ?Is-+640%s0nJ%MeAA|@v]>ER汣Ǵr>깧,  AAA<$]AȫD{m9w]ޫ1ˏ1?~'݈&fvϫ  ٙ\G$tD,bܴ \!8>;ws0@5Ofp$_e1B!=17Y jk><:"Z \"ŷsRFDx(aؑZhPIoZnMIUN?̃=ڲ䳑W=iJ 'W,H9&Kiקd;my%@eI6]C "9vn-Ӵy %*Ѯ8]ƈU7yvWJ6/\,U(i9֟BepDx[YYBy¨ w4ZU1A!2`.C&$ʪ7l./}#\aWT}ߪx٢l\U]LI}7A7D.ǦȀIZ8Z͇Z̲N+W dY}j:ŽJꛥA I)P1 }*[ccxtޖ.'9ѤR,C .Zp: sx9F ?̢ uIWFe0Ȇ7 9̱G lDɔ*#;f 8UuBc#ɹ+iƒ NH)Ѯ=usdV'2.يVNA; #!c_"VOTH* JMK~;'rG_8}A*{K2~|ڲ ݚk "OTE9á31耔{'8pq Bΐ͋` fH2 y1'h J I8̟yKx>-O_rˮU *>x Y9e&[oba.]{d+[,c#i 2Z2QZl-rOߑIY+3qVX=k$SL5$%K#9c5{Dgnϔͱ4h8|"3#Nlτ/cWs+UͰitu}[3SȤ3n%eХ7])|?cۏbALh 2r' U[v.adcT$ʲ@UN}^j/r3ҦvYCеV9dQ^SZn^~L0D:DyK">Y$`1r! $ ("u8GV5qwђm],ѱXZ?$}d/~r" &|lS߮<9#L`?'?)mV ᗵ^6~UQLP}Fs,PSQ~k6!c5 6̪%Bn c^=˷XgXITV踓(͐9e ҭGlů% )`$`^!]@'Fm鈍 ;|яu6+Kd-iC9v*ɀQS.E\p6H@C莭clCg?#jRhl#v;MBIL +SCٵ8ih.CVk#]jSR,KzK g7}Ye?us^v2>.gۆ$(y|qdqNBY[V8Ar.+ǝdDQe\di{~^\~`A&HJv'Ь5_DJ IDATydY9w% r!4ΥDг<=Ǚ*4uCq4Hqz@Yz#mTҮ<|H T\joBkA+(ȍGP`D]=+h}\M)\=s~NM  bĮZj:[Ϙʪ3k+YO%pcĦ|u jVJ_0#9.6؟ByTd<>]ln;JVːj24;hY˙lK<e3aDN#Rqy6cV,-;Oӗ{(aBI!^WjGzl"ohqJ+#-pj֙etR4f;Ti5%nf_ {pkߘ?ʂCZ${yRf)@$sw}9ՠ6JZi$ĵWٽd#̒jtT|~Cԉwʺ;ɒYɲu9e9ػ(; bQ,Xb7cQc%j|$co *v%XPpsݝ(g޾}ZY~/{- q3| ztdpl +(o"_^^ҥ 6lx)|γe˖Լzbۊ+d zӧ ~Obb"7odѢE0y8AӃqr&qCӖ|鸵c.9CYZ|+雉e= ſ49!Cl32ˏW hҞ.]Yqe=E}?]XЖ koEdyg~C/|zQG,bv~[6I4lԁ t,/_G?v ΁\xs{gxSdplF_VF+[?$~a)0'ޕț$e͔ /^Ь7> ذlP'x]w檐f2ңӖߗ<8)JN=8H:iز-N\{5 oUMӸ Sykfl 9*ҿV3f(( 6پ:218n'3 g{OP&Ng=+pcfΤ>k"?$95b``:ձ ֣岼;#{3rp>]|[c5m G6uu].8LcUT#gдM/د~̱=Q,+q*9Bˊ}a2̠҃ ); GlbQ~UAΈ-cǎqx?%0\2mHH(+[qq%VN{ ;r-=u=1z@I`W_Н8H\̱gNc*',RIJS [sTk\`fօ/\ChVguw.򦍏*d!*(Ө1r3;ȔOdTpv_kA0w|L v&sa*m̯KDY{fgGBC Yքdz塂ґY_JfgkF BQOK\nHXUE$ni Ɗ3}e.TzNK;.y׳_w %ySbMto3e+m֜#$<q3_yPJYo37<д_E׻;&M $}ƐlV W ?>52`JILҳE%i%3~`+L3WsY:7EBR%u7C9`v|tP{0@lq}J"[ײ}K̺/iʲT,Uzӵ %:SmSOzv5/atU*뎱'z z7cwJ!Ӫ/2*zwNp2.5HȔou:ȁ{>tk[ `։nG9p"(v__ˈ~݋!_ /G-r ٱWO!1Ig0V)IHC962 y2+$Iv$>$ѾW-cP s٥ w;чq_ҳw|FQs;Yׯ3^YDK}8ӊ=q=v7 ԔtI`d0sm(x5ة,;mds_U3xTj)vk<k򒛖d*Pɉ$[h~&X|NIQ>o ^ ̑$Gx˩-Unh0m?Y+ؖYMJ6+v hx&r~2^Z $֫$F)->Fh]Ug%%0k~hR˟k%}q^V$?.]I&)kM dKKJd䬇&y'e[lHLנ  u?d::csX>gV1àcn[\2,ú]p{܊%ۗպlMhZ-7Q|K8 µT3uq{ٴdKk,n$?3OY6>LZPn* D/ m>?[QB#cюO-cSs1F#ñ5?Ys MI_g_w=HtwC8p͓wj"A5iZnng]2bϠӡTW6}Ⱥ7iU%54{eȺ֟Ih2e-;,\A}v2YlYwϐ@>Sv ]$mg (drcm4/UJעe8{P};'"kkkA b36=Pl.rϘ3y&ڜb|~AWEC袹lLCA8c^]eñbLm$?.* h@G0!З59ҝa}X6ET{ޔ X^I7NQ4]3aA+;ZO_ȥ𭑌V%epCD6dGs_ߗ{Ji=Њ~c|¼Ts.NAu8ݍ["|'xWk407#fRߏ.UUO`Yl-ޟ̦uI+cKG\d1sx &Ep+ǂׯ L8i:GN=P]hح%fnI)vFuKqxBD~IgФ.TV[iskgz|9?]bҍ|4pA](9t)鉞ֻdE61l~!Y Th؃?=(^'xi7^1m˗͟2|I%̶`~R^Oh8h i܌~HiLiAA"XV?ODENKkZ9UyMI1EAA"  Pږdӂ (όXGyr N ˝gEq{,Ix1%dn,,Aty   Bgttz/OCA zٖO>8JbZÄCng1je${Ŭ\S ꀧ %Gѿ4:bx^zb+ VK7fv@ޓzE> Xؿ(ąeەBFXI%f;|4oGϟm`3M_QH| hm6CBܯAr'L*yn @UkZ5z5#2UWa=,k xKVȲboagaXQ(q, 73t#o%խUr+\O /$3ai c,I[SjH*c f7%!ϑXgg w1Nz=ӝ8<֭2أ^Sn}WPdcT5 {q..~jŸ8ɩ l+ܼ[\C;ccC0)ߙI`<’ Q_q˺PO(i>N|)3 Ų'/pnn;u-˧lݬijh{ tDsh*w0J #AO}0Irɖ6X'ݔlfF"915^{d;GlК~`v71j܄A0bfUo;@-TʲXQJMew926d_nIuՒbs8Lyy^dbr] u|%N Gl/J.ߊ[}MkϾ;IFk='})K%͑KXR"#'wfrJh!D%`kgڏL&ocu\kDvM/V3ZԄ;s'W4J5zg$a*#8i dr?rLɤMX@_3Y?&I:*?kde FΘn9 n@?f̱n9^du <ّMag0u&JCN=Px(}:Ц%l`Q W?m7Aؾn!t2f]iTFFw_="z;F>Y)XCw&!8vMIÐ/ާ֎IXP'o"'Y]>3K. pmHh>[o H_yk_w⌀-'Ǹk=-1.1x54*oo>w;J7×hoGH̦3  {Lu7//w҅ 6>Oٲe^cj^=mŊ{2|x{'117ohѢ@<A8sOǸiK\t1O!Y, D2ٞ}_Nf9   bY|"*ʵOJTf G:AAAxaYFAA)-qA +Q?&嘘 ;ϊXbDK+sUfl"׸4OyBފ%7_??AAA(, mKEs -OǴٌ(5??md(錙}*3LSH YIwrt|16qlZ=ܡׅ9 B~mJ!(wn4dd0Ve;G2qfvg{_ϼHKSmGų35+ۄF}|iZ}q[߱wAzדtywdAw:~X'_PL[F4}]͋9MNuH/P6-̅cZKWE\dYxyy(`iV2e|ہmQd?YY`p IDAT ^mK#_ iҬ) u`®;9]WAf[søp" BY>. 2B12rAmKC]?aD(Ahw: ߙBHL[@W_jע(9y@ mԦa˶|8us0U}4iO.Lw/1S9s/t2SU=jٯ;iϼ)&p:26okȸʯ<]u%׀,ܷ]hZcԝnGӦ>GwcH6+h˟3e%3~`+L3WsY:7EBR%u7CȀIv|tP{0@lq}J"[ײ}K̺/i ʲ&PB%>9NSyQ2S{0nܛ֖ƍѨ&MȻN$<(l >>w`Sɑ%qq*}Unh0mWwb6|YsY?g5*l8V=.o|:KWUP/Gp/S{gYVU#zĔ,x*v`YLW{#D\X gy+6ѧ6$l%%2RH}md=$6YOXlMU@@| v| _QglygZ o{ 5pWg`cݾt>UG2K3] yr=<|Dv56G$x8gdKk,n$?3OY6>LZPn* D/ m>?[q6Gv|.gR'[:KIGUK&)D=ȀJ|m5k#k)D~>?}\, ث489@$#)߼ƽG7tG$|ϺUXn}6P\[tst@w7嶟1gL9? >EspƼ&oʆcŘd_Hy925*~^ĞT|5qDy?|s1=uH¢zW@@8>cG)>|ҢCRoVSJG~K<5V6XvaϨgR3 6YBe߃a=ӐtH&f?=G3զ(jz`›r?r9 zeq*'|K@3d)$ufHFliNaK[&ʼnlȌ澾/@f{Հ-ZHJRDSp5[Fg3oFhA1>x9M] [?MWǨ12.cnALSV_A ٙz-=Yqt2&6UiӏzX1&а[K6:dRލ̓ϠI]0&rĞhQ2osdR = wҋmb Bа-+Cg!g{݉3JbRR!ǸǠ(g&&:M6ѹsg֌22gQK#L;c{/Mi5T5'ƔAAA(BDS   B!Rh[⒓ N V<3~bM68-,w(&ňW&c0  ` mKF<=ٴuK#3K k'X$\̮0+`+oZ$ 0q~.sAx}RfSI#RuVD23& $G]nWy5S}"B5X>JxЮ_3 uiAeKE6[ S$_=}MW@*ko\+ʘB#)vnFāj-:Ҵ=P[8Pݛv=4FqwkJAUd߰t<ךWGl+2K(z0' J} ,Q ˰;+M޵2K1Pw ,hߞ?Lgvi-',=l-_NTW[?i-״jZkGe+pONs$2zw䧆[6󆰄O ;;ima`>?X6f!6־Ya)ܵ_ 3ai c,I[SjH*c f7%!ϑXgg w1Nz=ӝ8<֭2أ^Sn}PO(i>N8|n|l~A{0?S'95ᓑ 1}7qvhgLwLbhX&;3i|GXR!+.?bx~,Vd֭ӱmz^`-5M-vmoAԞ ^9{|ëiϳx"2ogw'Q󽉬8Ev&GVfmq KKktwVӯrN4b͔!MURОb.kY ѓBW|[kĘ֥PjX9{i% s_.VȀe:x;:ܬU`<Hܯ'&4  2qP&G kRw, VØ9}&? Ŵ$΢]47sZYL]jQq1a(!,xkm:,Ԥ,~fG.ag$2bx,JҨ76]W1SF[6H)ۮ#Y]!zӾ2.׊Vn9 +kqv݃< ݹ˱h]?=zey* ":VR_%'Owk0.2Ľ <YS'M"oq7Jr`HP2HOM,?-_Y_qթ5>GfY,M6-*Z^Lrɖ6X'ݔlfF"915^{d;GlК~`556%I;l|V%)1ErjDflBXN];ˈ]܏pCJ'pd`&fzPN}v6i羍Mbi1,{MOh]{zo ۠h JfUo;@-TʲXQJMew926듹vg~&.Wy-o-H>ʦkg_|KOdd}vL+Qtj8bxaʬxVi$<.RL6G.aIҞAO\חXdk& :rr[ȣDl_[oRx68d>WvM/VLM`&%?Wi ~;PJbU:s6 '_{$.* #R~*s btPIsOT O KTiA*-r&uؽ"bEʮ*U]wp2.5Rv,6i#zI^sXGMCOIkq^9I[4)q$)yc dr?M,ݒiwɻdfs['&qNN P0}bF{sJu ȎlR ;0TeribCI=ϖCց6-de"M0woGl'ֿy Z4u 965J223z6ɒTTl5voբun!e+ YRΫ3~f Nv»c~ LyCGzL1"i|TQ;i d-W_dd2gFs88cEM}|e`ΥbRR!ǸǠ(g޾>ۇ^>nGU[fI{k=E28d6 ~TxLu7//w҅ 6>Oٲe^cj^=mŊ{2|x{'117ohѢ@<A8sOǸiK\t1O!Y, D2ٞ}_Nf9   bY|"*ʵOJTf G:AAAxaYFAA)-qA +Q?&嘘 ;ϊXbDK+sKtk\֧Y!poŒ?+  E@m3:h._M5yph#'""AdZ#1w5,.rH{@HO- /*ƍ -.f)Ԫ _GA|($¹C.QNh^ `x˾wr5IdDvin# yPLU/tgg2vskV o %#1Ӵ|`= c'>':Mɂt.O[ÉNӃڞ*~^ү;aFX%# GԮߜ&:ЗtWߖxBFx1J]s|ݥ+".Gh +ڲ>~M@(,,oOC/6Wί``ˆ4i֔:0aם+(n90 /qz]{nOo vE#b/ b#|K,2;8},/QlyXP.Zu/u0|g iV(#=:0my]}^󏓢كS-}U_^ViФ >0u߽lO̽i`+k5cٌrM&"WG`vS0grfLеIgn̙"GMg$F L:zϠ\wwttFΧV^xkpN2޳k%\ǔ)S<bjٿ 6 /9W'e%N?GwY/_4UQzО!8`=eȞMLq=/Q*(bE5q1@K %te+.6wi?0~/aGW'F( k ]Ӟ39Y 1ac,wBE*Ii d`vkzjLú𥴳 Χ:X?zsE Xx~HJhAUJ55FncJk-FI]΄t. A١޳cHx3k/pLlHh(!˚pbx#[$Լѩ+__w !>tn霳oG' OcD jΩI*,-29u-/'Ǭ ,K_7]Ps=Ն?oW0?A28m+2Kw;%.@]V|qA]V<ԣs uAB#]A[ۜK9M:(Nd%koS{4ckȶpVnp4 ;*Q)$& Ɗ3%IvhX?ć$ڷ`e x=v#Y!v'?KzOb(*vnG5+u+н\vOY}yZ'N Y֒>9lf~ EO'76hsvh%\uʟwy[z* bF\<fKBO7ekJCtE- ;_U*3٨%d/TU D-4X?Oks>$(7a_/.s$ɑer*KA(=hOlW IDAT5eýL0V c*l=bJ#ZzWUYmI:̚#d0DZ?+AoD(8}*OKWIJ6ZSҒ)>iBzHwaQ߻w7A,_{5vP@E j0!F#5b,5V,A5Ec=v@(ػذ+t)w?B"e^ϳް}vnwu퓲 IX  6G̨y|~h/9dIϭkې3V{F:|p~hA^!9K ?gF*=ŒKhV 洨/QK d=c\]*jot&fŐ>Oޗ6^ uN=+0it֜h pN5JتrI+d +,bIԁ ('(X4g ק%k9v6<)q Obp5] +1I+_U rn4(ȫ)x:|$>~Q+ףu/E3$lYڻaLچ%jS$R 1!97K=+hhUŖ?D̫z͕.PRSH3L69HRf 96>,qB5+,O/ۇa`ܘ1lXqddrBҳ\mY6Y(_5C\{#r1bWD nm1ͳ1[2GTkgկR;agz}^gS L}Xy j18xGx1tvʺ']}AP9g ǩjCj03O֩ Q2TƘr.k2?&wJ glZZn.{d45._,fx]\֫F DݩYūcB:X3;5|'S-p¶|6 ѳ+o.eI P:@Uc= c3iWB" ފuAq>[3vW]A(8d{qfYLXT'q"Lv{6̔Zd4ѝZ&#ɼ1| @f"2\dג |o A(9d Q鉞zdB qa fTIE=:Nةx1wT.okMrJr_ssT9D B׮]_e{^%Cv3hn,s Z@KCA۞ =r&5͛ai lʕ4yO|Ҵ@_ Ϗ'ߌHLL . D\&]/Ns/0"RZnlA ,AF%ͦӜS+sz2lpڕqObj>)g~*   "E2snKRT2]^|&Kr槲  B!"BAAA wYY'QD,Bx<mތ3ѝѹ>迀'  B~P`{m(b&lSӉhy?7p>A"[Rq|3 [IǣC |4qd?4"H, Mcz -;ԫزwtƎoG$i6#7.pxO+bPOIS8|!<=KŜا%dԫټ$w@eIEoPr%bw[Hr@vjzp[#C2fδb^SB]܆25\C*Пy:+Fe[gKJ='ѽ2qLyHq 1s|IXз6&(Efm[BN[o8ywgC0rCDOiW3~O4g0Q;۹dPoY-.d\Ѩip21^r2X4v+%iK֕u d:>>TYe ,ߟ/m3tSl~6xXzYxfpl"b}g% K;H""#!g1ҏLxrm?oKTAOZ>$bdږޜ;'4џ/~0kۏULe;8Q7VOkC"Dcc/oa!{rКh`Ū\!5Xq]sSD,q|Aݛ&#TƊ{qLyH<ͻ[ߛɬ9MDعq%KeMs%3w|lxPiαhB2zbmI+Dz4Y=3aصs/z$2&%]A:~ۺKq}2e撟>L8tO[TqT(FJ&<Ț\GUj'w?Thj ou3Y9ft {5ϗNwFr9j7EF¤\}]%VoZ~"Y֥k?zx7?iՓ餥cR<6XUvѱ)2``ma&YϾ gr3|1:^+?#jd:ԥu.()a,3y7_uk~#qh0uS>1!"ġ*AXHvlghND{Sulb2;-uS쟤˶mS<s[#!c_:VPH*_E1?an9T}Dx\^FM$za'h4y,m$T%PIsc 9vb3P_z97|N64qmA+A(dbyd]fB*)iΓۄ/Ǽs9g1k3{h?է (toS4H6,)&LgC,%SsW@2 6혴'GZl- qLyhӲ6~:"bf!-5]j)1}Yckvq$s+,OKs I(2m ds)1AAKA֟V(eO 䥉?ǹ.ipqj@X82p>xϒ IUj~Сq8+T ( עj$+.f qLyhTvΝT*|92Px?5mGfx؆V5u ՠߠ&SdgfB=3 `]l:[Oʪm .[NGs6I\Y>~Q:ImǁK~//F7nt]C3U7&f\,}lC} s1"݆1i%cМ1 kLIh%+ b`yh ȶi^ۃ00L74}izM?qK ,6FG4NfKMغvZImAhZZFwCgh夢b[:V?S柘E2=3EdƀRU j3[̫Ijw;/Ƴ]-\DŽ99I9KM/99L^Mrupك׫l/_vM 3=a3iAgO죜zy{}kLJ׿叿ƹ5*ӜOvBu#S˴0o #倌#mVRq4U0+ꍏFd[2A#ʝz5]ۓdC OŻa=t ˹vi2ߧ O]`i&4`O&/4ͳ9nlAֳC<\h KN[N64oތq'%8 \ۉۓG"FLj#8gw,6Rrb(.glr"{S҉8uS?&~A{63A]hk \@'o&/ ;jԥܣ(up_ ãM>ϵO.bP4if>Ls/7һN+f4Tyu[2Lzn&BA~¢P'L`xάΥ\Ҋ2=W%KƎ( \[)dIvMП.s&exg wOaA|2|}Df䒟>Fn8^M-P.hB uk{d\G:T9NXP;1|)Z !c_8II Nn^ *)k#$ڲTN/UVAϳ~C q(gN}[ UTF+1: jQ1{G$ZfʥJQ+[|SgKؙv/Uf=oPkGj毭 yOlU2LCjtI3YhkdK su $`,N-d,$p5d )yyA7ݴ<4))9YLUk6St'xD&S9zs-YToC`P6ʖRéjM&x伏Hv0q=,$L?PIZ(KN$9f 3Sy[1:*6c$ɖV$eT/v P8;ѡuV)qWiOM+whpfnM$[ԫ$bACZRsIG?Rs慠ތсX>H ohqT.]I&)3b&&KO!ϓ3[d%[`'K >+kstL桑ܺ =c5gsȷ &;TIr~~,3ڍ>Tʱѽ,V~8Ė63#J֥p4L}sZLk(%lbIZ 3=})acŰ`Z]+0it֜&SGp꘽ΦoPVKZ%[XaKd@I%>AY>)D}>]\, X̱I(Sxs{>YɏI XzUsA=D^M!6 A 7 u'n8Ө!r4?@CLz1Fw Z-Z@U%!: f^sK1 6!3kAh0KicjPJ,KzKy,u t7ҹF/g?%.vZU+$m4 oʨ2:-taÊ$+uw';Oտ ɥR$] (hu+Ǟ"mcAhoe` yYl,G1kt?3 yEwGGqڸ9ӊ0ɺ:ND~[G8 +qބקĞD|M<٢B¸'8v1?=uHxn |\ߊu9z%}_6<n`_\p)=qUpDu;Jӳ 4b$O>GTkgկR;agz}^gS L}Xy j18xGx1tvʺ']}AP9g ǩjCj03O֩ Q2TƘr.k2?&wJ glZ~q٫Pw41 =gTlŤpRXn.{d45._,fx]'*;5|'S-p¶|6 ѳ+o.er3g IDATI P:@Uc= c3iWB" ފuAq>[3vW]A(8d{qfYLXT'q"Lv{6̔Zd4ѝZ&#ɼ1| @f"2\dג |o A(9d Q鉞zdB qa fTIE&9I9KM/99L^Mruzb_ k׮ ْ!ZEg47йEG-x mτG9|}}f4ϋurwX'>c ziZ`/ɓoFMLL$&& "m..'yner^{)-76~ŠI #˒fӂi)V9=X8˸X153?EAA "9%)*u./_^˥uO9SYAA]!   HKNNֻ,PP,(g^NVVe!wYa< 6 oF ΂\_@AA!?(=q6\MxQr6Qd[LDqt<:)k9XlGg1McG.zlĒ)d4#yQIoZ~H ʽԦ+zҔ,_Hx9&OR1':iI9Y!~6:':PYRѭ=Pz 'ؾ5k:$jL*E깄 ejұT:=?GtWʶ7Ζ*{^-Oƣ{e;R zcǹ0ʽ籠omLPۈ*E&M1۱ҋ0Pp,ğ<@Nj-`6.f؟8i \`eQw(SsȠ2Z&]XqQӘ:d6cQKeFhVJn'Ӗ+Ku|f![#$>#fg3|ņXYI?`Bמh~ 6싐 ENF4Cb֥+.~޼4EI8 gɴ-9w^1 O2iأ?-_N{aֶë=/vpRo\-'>o<@[4Gs+VBYNJo_&&&J'eeW ˈ8 ue494VˈcBcEu9x5nEdOfMhαl&J΍+](o[-lKVe{ edzJsEC{;oKZ8ut!XĮ{Y#36@( ml_ڎsq,31te0{ڢVB4R.m\mQ!c҃z& 4'زÌ_xaC8R941AxtIx FySd$LǩUh'e]w3jsV=iNZ1&shUi7x"f_OxmGZ%e1tK-\QqSbX0f3'n?P G1aL|tu-cBkE2CU\@ ϊќ8.b 5e:v[9JVvȀl[V:O@][1925c.ux l_OX4Er +}D*T%PIsc 9vb3P_z97|N64qmAS쇾L<yUAAKA֟V(eO 䥉?ǹ.ipqj?8뽋 )$*T5‰ Pȸ{p*'n:x עj$+.f qLyhTvΝT*|92Px?5mGfx؆V)L].~57 .&/ٙYkPOL9;mΖfm'F}u[V d4Wm_TclRdq #'ˋͷ[b4={LoUnC[4Β1vhΘTWX5n&_ud1v<|Ad[4JWqCI=ǦøMZzF`\#}'%i}[զu{l]HRn4--;͡I4wrRQ?|= vvnob^;S?8F2wc-VP$5;rYC.L. pcBsҤ&U&wE:g^e{ڵ#Vnb@%?\NI3c*'^={bL۷_>>>_yΖ.]Kgo˗/iZ`/ɓ'DbbbXph 2rx}qR{}q_&y}ўrs8Z|d 25]:˚)e5{W~Zq5 @9AAAxcE2vdKRT0^|ߑck˥F F9AAAxc[FAA)=qfffzA *ўbL100л,:+ca&͈<ή/;2R/KiV֥a і1VAA hoq|g1dJN% Klfդ8:бp*^lQOYwǎC ٖ_3g51U|bw lD5^i\UsAQHcDq3U\ ]Ӫ)޴-^$օg:{ЮD}DB]̚]h*Έ_k[2oG,T(Y8;~=O~L?֑>a^:.aݶ(n) L#o>l]oH%Cjx4ܩWӅ=Iv8hTýM'>.̾Ko,}l MirMpÅ߁YڹkA-h͘w\{ p_ɵ=y+bt6Rrb(.glr"{S҉8uS?&~A{?ӌK,J6xPi8ԅ&.6Ϡ qfySF]=J]gҾ~=G$ZfʥJQ+[|SgKؙv/Uf=oPkGj毭 yOlU2LCjtI3YhkdK su $`1+ MZhH]C0Ar:t3M[ALŸ3^5yϻ>aS?HwWQNEM{pjDEIf%9cg#҃ j3o\M|ĄQ?^p-O7TRV)( I.nٳ408x'nLJMGI3k NtvUaleig$diEFʝ/g.|*D}o?G0n*|А֟\7gt V¡?›(A.gKWIJ6̼ SH}G&(Yɖ6X$c-`O0]t0%| yh$Gm2~1v%$.[gdx?cw%o lO6ά0Zt$;NӗVxto_SlP=SD||#>s$7UԠ6RzY]FZO!%6,! =S~L\>!?N#,Sٌ =iSh~ޞ$4)ye9y9Ië]QNOL !!!tU5[R:d7C:w1?(g^ޞ_l޼yV\KgoAAA/M eР 8yRͨİp@e<'MI'c /scRg}%ӾAI 2s|"Lм+؉/ o( oZ;Ӣyz..nCt!NOf<- %W|i8&T$怆9suqn>̤ry,["f3p6JQISvl- 7 IDATmP1o\{.c-l)!k%O[ݰul߶e|?uMg@|[6nb\cIħ›i735!ۗeE*:@ ѱ:l^_M=y8A޽3Ş3`ALv@,B % y)>ҸkET.tFհDIzٯfҪIx\jޥA` 9aoDbPZ^AcW.ډ\6.oB9j;פu.ϸ)A;iWsNs_5;ÞǡAFʹKe#MZmFx $L8^Hh)ٺ-^0ǁp4uDӼ)ZnMuH8`LpDl^1noDWԛ䏯#O1'ݩт OW@S s,!=~xb5snlRAxUd]M>B#q3:8j[Aỵ[]8Y3g0m|Vɣw]-;cm9( D$$ ~ sYz\FkaUL0Lº+X$b+ :`H} &\Lxi:MbrX{'Udǘc+iV/Ubt}=ΰ>xCDhS>ޗqm[M5vL>[\%Hr8'V/fW\]tk»On p;VȀlY E9~$ 8=R+lr trcD8Q6?=%bg#Ɓ]xgUW긙#q m\GpRVWZ{C#)݈Nٰ!& fިKPxdf alobI0v([heI5>5[KnÝ=>oKr(w,@⍍l:SU쑌WXСQHƪljE+-(lӋ%NXe f5A^S8<-W`$AP}bys)QI[_UR--kHΜCs!q M*p|4&td*6||JypcUie >7}BivJѻxnߎ̀Yt(!|l|Ksw(ȃ{j/LJTw Cuw|s09xT%4]c|Xʅ6Gl'{>W[NkI|'Q.ё #C׻1 ) S s7G1fyn̯-y1Aյ@Y:}c}y/Ysc탋0}w1)M  5Wd@f%tivZXğcݯAM!ftmgŲ!^M.WQFZS4,!c8_g[mdAӘ4mއ֕ ̏(RaJמsY#mebf1"9Qݯ-p&t#*jAk倭4Y^:oϼZLa H'&3/Rәә4|M^ruʭ[cΝde{њKѿ3?ӥS}H0 h}&~'|XzLMޓ6.\S19ð 4=zpIzBCC;wh `d2vRR}'|3[>ːJd+`^YV|^^&^W+ϲ//Ly6o6 #zrchw8n-WŒFxU\O bks懾x~  Wٞ\?sy|F 9eBmo8*7wDZP_K6ux:CTٺݿ/$L<C.T ɼ`z*diMz E!# dՆ`n ģ]'DR ߒU{cB2sFδpW{Igz$(NRFqn l'ZSZ|ǩHreZSQ~h qFFMU KP@*Lz~|[^ْ/!>=MUŝ8IJsHo[ fmd{3R&]|ߡ#sO]`apN= N8O/?FmAOx6pNx꿆Y¹ݬoB~z;$ a]T~.pv{E#Dŕײ;vcǎqt83bw0Z~sγolCp+pkҗiϘ3Q :9U4i/C*1i(:xQ˵&g%NIɳhY wr?UTYƠQqc<u`λ)52|ʠʃ><,Ak_`藺n5 Ξ3+7Ob&a.{"ke2\[qo]tI =/jͨ|з-;fA|1>놇.p 8g0G.{%#0a77Dr|وӘt~y-I&0&p*JNÁkP[n&\VeP͑#G?ՇBɧ{:}r h/{4/G Y2GCʹgh6}= {ػ Wr$1X0l6ȆXn]D+EdPDZco7x!Zz:Aơ~7c$(G(XڍIjC=Lh`&LFc f_$x'ϝh1g&OY+SO2gN)\Á{ ZؘcFܖ_#p)1m =mc= UY!#aYփjCxӠ"៸WM)2/VZEpjNZ$3}J>~?S]wнu2\ Hε\s@qnJhY01Qw[(D7M @[}g0=8ihwu佗<7^CP'9!f[Ӫq2w"52NUܰw+'i(u>?aouYc[<޴| E`o jTwR|xh4]`<(L  4koU+NmiwAmjT C8]tHi22tjU `^mbD@H|Uz9?İn_A#I (@renDơ1gJL1V7b,+.ZF(*/NuZ/.O<4ae:+mzO>p|z7(۾5U,s yG|&Nid@|#L1ai["V/5EGcM#[ckmH9d$`5dk q׹o@<>F/cJ*nVޜcV|°{&1|ЋUՌZWoA7K'|qċ=($ , ?PIV(`[X4ª`)ёDfLO~G%p7>F @?`".b@A+Ӫue+lJQIKFVמT^ p&(R~Lw0%r[Wџbs|WA'x.4rהcVϲ~!4qg'}J,1fX ![XPqOoONzHx/lcue`&2 [;@cgFR{DesrzN}̽?Чp~A^)3|J߱C8?w;~7˙b&Ĕ#Hw>/[,ʵ( P-H%i~> 2>,e{G}'`/7Q;f|ަW#c]5*NjκoPAIX%[b2`S* "?_)"hbi t8C\ԎSxzQX=ɱQȿ|LZY-w =Sb'Gz 67 ~GNQ9rjTѝd_p` tjeaw  DqޓF4u5;`g5| Ǒ`f I_qDpi:5PjT ˒j|jL7ֵR^|{;;Q-%tږx|m NVu{$cs?hȗ{QHlеme-(<+ nmkR"Q0q#Ǟ<"jO,p`M?gHa,OaFEd BN1c I@ã9]ՋadBeˆBba?@bӜw=4H,㍗9]Mo(\##FbԨQ5նWOFRJA{)Es!g¢'dK3a1Z~Iح8 O2P>ؓEߥROBuy5,,ց9뿤YUc?|_L49N. 0.Ft>5^,ڇC\7(ZwL8r1e%Fvü4Q K1aw #k29 ZE2q *kx_sE1 f5x_m!O̩&{ Q Kី;7M`4eg ѢD-#Yq{M;d^ ud1vMWoRijaLNXG _o3"NNT"3]=@-h-2V2G"2%~FOr,ik~LPetYy*.<$0)y)ՔμΤISmRSzg Yf ۷0Xo1m.28x h}&~'uټׯ{ҥK`jr83{ 2hlzɓzBCC;wh `d2vRR}'|3[>ːk`МJlCɁ4XA( .>>ot榴  [$_6f۝Af]ߋmRWPFIgnJ   EDW   Bg{bccU U>DOINNV.d.u۸MB8!DvĜ+x1JfU׃7{2_L s[TuqM۞EaY-+T  B6ٞ80߫9dǕF?K>5xI9WNAcb o\ nƠf\T ߒ`ƃ\5!Sŷ-M*DdHh SՃ]>I ]“^)P FtC/1Ebł ĸwCGdD}ly; Qf34*eyBB}~;LgKZ)+Fܨ~ǹ =g1W5,P887i[2bu3%o`p f7 $RӪ)aSV K[? */:cN2BV0f!#)xog4ŗQ: ߽ G̡X|M!P/c˿Ы\At!|K5'bDÌ] \X{w)m6? 31`P -vg6?|VM_vbR tPYgAtǗQI61"\~Z@Ws'fpVuJ)y$R89鸝Ű|tCkC0o˶rGTcetI7o]"44rRMp07'G`L.+#NbOuWͮgSE?ko;}7ؿV{3%Ch+'|)^#s/?N$NbMαh:obڥ.z7A, X>m vֱ}.uu7N4|8w6x# !ԯt)." $Rm^#LSI֍KW<,ɞ={ Ms;-9d5aϮ$dqv]m̵ $,d>e Kbelۼ-?6%$UwM*s&FO3$Qv]ᜉJůNtħgrLk¿I<۝h BljtkgPZ)=E5p73Y!3}JxsN`Ws jΰpFqhQrnߘͽ[ #n^}hN!$S"g^' 1ͻ<,3;'͓HL΅7 _6a+%kwNO~S5oR/+uօbfS2N.>,>s+ ntۚ22Yd0޻kfV -aLA%j> h2hKQ!#Lo@mܚ-՜Nq#5䔾&qnFݗ3tŧgj0oouf.lRA+6X kbe]1Z'OYA&:`H} &\Lxi:]lQHغm-mY(wӍm̙<9k(ݲ.g$q}\vM5|I+_Nl퓃F@BcL1av8XeaGQ_u7uhBy`K]eja)оKG}{ʗώ6f *T߼S(U*EA++( (Qly }< gWm7²`TS-LLǻ/S,ܬ)PJ$zP0rN\f2oe|$r[W94KI!].ݜAćbͪSF*S,WҮsmlšF)ظ'GLV YPq O{#5Q,d:8$JNg4ZivV;+olI4=S-j{$;t1׈6DͰTm0V~FGj235NF[skwl E$›!lE#O^AW) gBD~8cD8Q6Ű- pv[׹eO!$E'-gҎUZ2%R>NDž IDATYJIڕ5oHnUqɟMcv]`}W]f\čVg8x,0qYcP㑙 2$ϿMJ$ Tי .z[`2 6>TTש)hͽOɈ1^MF4v:̆17F]-\U g!= nmɜ-!癁Kưf(_dLKT/%B>#T 'GcB!qNGriqƔ"?_"-6/&餥"Qȵ5}d ؟Pcz4*Fܕ`CR4Ct0E.#J7-'تD.gVW2zw0%d6m@/}iya/ڴ]aih:һN/6' m&Ng&,{HYjt7|~2C5u>HSIuG+z{P}-t.ږV V-W@FL`r9JoN޿r٠w'h2O}oY>.}w/ũݐEa?uSY\%>22\ыm%Ed"Y!L]Ms2'!_Rϱ Œ`H&VY3 bِAXM@vģmc_̬=F$3'ŵ8t#*jAk倭4Y^:oϼZLa Hl©RRᚴx>[Vd$ Jǻ{7Si:j# Bl>o2YZm^μjJ]Ng^NgҤ6y))n;w㓕`Gk/]GrtBߠi4ʡ!yLxDOի׳:z7'm-\ &c??sa]4h6=zɓ2wAdJ3L;OIg^|!#77 `W z-!tx|Jdt6u,,U4ϲkW)  Y/qo DCVY*_5e²U3DFy%  AAA!ɳ=qVVVA*Q~'嘙~2:m&!{DOuf4*ǫⲷ|R]3?4E  <'2ZLwśN  c=aߦmfTwd%=Ÿp9ƄdH֝ij-fHh Qŝ?)_Zdc>՚^?NE[/"ˬUD{`32jn"柝LXRaJ# X'T(?`? .è#iԋZUp7խW6|2eݽ~)G lNTS鹆{1džf-Ն#{MѳI4AB;:^V }H8Uq-^\)VKGmKS G'{c2=@miwAmjT CS3tjU `^mbė̌i}uyOL?OjZ$W3>L ɍո @" FeťXceVP%IXe҅&ltbB?ئCKJgʘqL]~[S2wm]Dg%Ll@Dge > zopUv%lm6:M DFB17dEBde'AQPǧDG1M(i;A"bt/o4Ayrcz]wfԬ/Z۽ :Ds"~ Ah2鹴u k؋v/_qxbޗk}X=>i Yėb]|,Hjxun|#> k3Q"!X#`< 2>%b/7Q;f|ަG « [b2`S* "?_)"hbi t8C\ԎSxzQX=ɱQȿ|LZY-w =Sb'Gzs{Y 4>("Fx&67 ~GNQ9rjTѝd_p` tjeNC%>3;dH e$%j'jO,p`M?g̓WPxMjX`4 6n!+iIa,OaFEdA* mB8r: # a9ʊ3Ӝw=4H,㍗9]|G>rD1jFbԨ-EzϷ4ZrW"2?GKy.} a8; (1] uI4ʟ=qfp3,[/ GaRR1p7{ҠTjw]hꇗjztegfv:OTg;> 2z؇x3C~hQD}~g v<1>SCY7De Kី;7M`4%O ɖ[,8|࿽&e #JIVF0GƷ)T#YAؠeP3 :5c|͈lV:;QB^ftI3FZ]DlOZ[G=U]pm{u2AI ViЅfexV'T$VuZ* {5j¤tTSr:r:&OKQN%d͚5o>+ *SbVPwm#m\dp/F5xLxDOڵy???֯_SͳKiQL}|߾ufWnJ   r|O]j˽V3 DCv3.6F&`_gv妴  BKڿ˱v^AAAC픱A*Q~'$''~2:mܦpuu}IxrSO\zP.at]\|/gQX:ռh|  7JMiz,CE^ k`L ĭԬԓja[lxk&$3{Ițl ma{JzкG;=KBx2,J5>~hPrX~2zY} 6ޟ Q+wq)m-) N}QJp`:2s>v+pa߉Tؿz|BV0f!#)xogn.?f9 jW3z QOϳ$9I,kZdZE~~[ }?J>,[D~KrlL! (xK(Հoǀnϸ=?rcrM8$T {6K;P'YNSngxaռ7+Xb ?rl[̿i~n]eb͉ka^#s/?N$NbMαh:obڥ.z7A, X>m vֱ}.uu7Qb͠?c.g}v)ucސ$\ƶ[cSBYuho;lbt4N2?`e'maLΙK*DB6g&\?G‚@v Y0t&]m6䘯 i1f/ɮ3[ /IIzٯfp.oB9j;פu.de)A;iWsNsgs jΰpFqhQrn4})3/˘]Z D ȀI$lݶ;ɂ~ɤq*2 ϙ9MZmFx $L8^Hh)ٺ-#h]/f6!!;.;֦/mu Msnz=2_}Fȶ>)b+K 1WH;' `v"&@ߓ (P 2l$(DGiZd6:1x,2AMz Y VX́ B*EyA++(z|>LlgI(Nmc Ixej%=v IJ%-Yףzs2D~f)|+;m̨%HPbγ9>rRR|.4rK7g/aXj9u"Ƹ3rel.:V$Kj5̑?<+%3k=5Ĕ@lܓV∉3Ҫ r! =#i*1X2Yo!OvlLa\%;t1׈6RJ&=Qz3ll-U0V~FG+d;쬼i&M4\cm5~ZAx$ bpP+*e|PȘg'ʦe$i{zߺ}}(~  9.8i9vtr(Yq"4"VbHr8'֮yCtCFmݷ3zW0#xw?RpX` l:2_#3l-eHcH͐t#;fz.MR]N.Vn%  .z[`2 6>TWaP2ɾ SS M*p|4&td*Hd<8Ȫ4qwDDMito:iHrmM߁8p 6JQ)w%:-Ѓ"M.)C|x!J7-'تo YR˯9e^y/ܳ!'.[*6.3qfq5.wܾOPBjҗP ժ^ZӋ1 ,Bp6=VNuQwF;|9h//W^;tի`jyp7'>|8ðj1hlzɓ'Uף eܹ_c)ͼ)II3FayҙW-z3\eվFFnnO+AxIgYZB@㽞)oϲ^gnOAA9^ɑ븝2(3jefWr;3PdVJ{1:W}hWjί37'  yCVYyk{[enzəgAAA'׶I^Կєy󩟇S{&.ruZRRLAAAv淲L.gR?sqj=|}j=qՙὌוk[Bn/[ .Rɇޚq/e0J|..M@"G~Ĝ e2js"tuN-LL|9 \IJL=ϲdh;UL2~G4DcOxR}ĽZPO% +Fѫ*ʔrgr|؟:VƨKwЩB> 0||$iL|f~M7qj/Sj3m=2;uFi"1: IRi=k2S!o iUՉI;nTRά,4_7"J l dԉo2ZV-?D>%?nx_bۏ}zln-]s4&_ Q/=yD!|X;ۏuFC+%Vt[-^~kW9&w. ~otkBn=oak,u6aU-Y:iƣX#B2٢?F [ =@6;#8ve`Ժ>' 7daw~ |wr7to,wVw mh#] W[&7JLFьHR6o=^m7=NuccHkmr+o1Uۣ]]ر8"}F9帅xv ΝNyt<ڟkBͮ#ۣjQY04 [~aI9l8s`ĐH9)=,؇ :. oGx:~^w%݀-4~r5a6 #JZ<>?ߢdD+I%q<!=FW{(#ddjY'NBٛQ1o4\93""?#C+-D5N!D73C+:*)({W5Wptp.yp%⮾Kq_qhN|u)n]bghL\s Bqpgi܃pEFd+~?m؎Z1@YځZc+@ԅuŒYqp<}i^MZ7HD7ʶ+N݋s.xmЂpUjC% n}f0R},/-uo8šCBoj<"9xˇxR:cevP,sX \H r@'(qqb@<6C$tuRPό+ZFfpW}jۃ1_D-Hi7rvMFBbӎh2v|_G>*I+bG ~WD}xʵ탇:A;2s I^̢0v|zGnW{,ۗg=h=qwbt~Eg林3,Hq$^4!9roF+pwR6k=Gi.\~d_t'.ܾ\k ߯iĠnY__"ӎMa ֟?lx~Mň!/`Qۘ_I5*Y9KP?\/RZߓ7)#~a|3POvcWrYkмX5=*з~;:|c d ۊ遲OLŻ^I[pCT_~˿b(YD~] FN#_}"r8o/,\I-2 8,^mMжIS-ۆũGqA\ػjm2p3WA{f\]9<` '/d%NoؤWt?^ a; ~Ջg7mBіC0ƒ;<@0I_ĔUQzѺ *TJF#yF@IwA4H#BW&LrO >cGvC¸穗вDsG̙|gmKB0Ზ[SޟE|ZGbrHaT~TByCIX~~z<<ϼ[1cGwE˙@0PuOē5<0~*ġ '@0Wo]V܂Bq|n$5{U|,ik0x~Ч2h=  H> SʍH`:g#pӭFz^TLBT=/k)TdIUXQ#'NYESkPtl4;O^KDD_ qj;DQ>J3:lRsW6;d9,gtYyٟugɳ= "Hӧx׸ҥKUҌ75LJY:U vʼnB_į#""""zسgTL@ ldff"990=\|mvC&z:U"6NDDDDD7ƍcΝ8x .]$&..hܸ1 g6lp?[8u  r.W(EZbjj;j>X䴂(i]T:mf} tS۵PݡRyJ#wR`:6#CDDDDDrZAG45RQO"i䎓Kb'λSZyfᕢԷ ^kWN)4!N9/ɂ:}Ct zH=;S 8C9t2^AN=/Z&"""""cdC8YӪ sZ/ m:'B:ɖ;#Dո[E vХɪpy"""""2OkXV5Nd׵ qzaP/@Ead4U]Uݔ@rM9LRD&p?+ hd*;:"""""9BSJ!Z"""""f&ąEL t*VU6#~طz ռ}ÜhpUANnVofGDDDD$gd%< szAlNvpv؁^x MeU8h,Xk'""""\vB\h* tzϊӛyWkNUDBc{*( lʪzhM+iq# p,Li9&[.c1,=#!LXSn*+ZV9u6'Q9*a̾D}ZۈաMk^⬄78""""3BSaHeH;#8n nvqQRWDN}AN=/k#"""""dC*FMd.U8[.RQWv^ڔmkDzF hyVB\hjvhf$)ϱ*N8eMV :peMkt3/Z&"""""{ T΋r̐JQMEg5lRoʃѫΙ lZM*Qd٩ƅN9&gc8jQQZ}3Zj#"""""댆8ժlE%j-N8u5n׿Ag^9ڈȾH9Q:u;DS19"}cJN59ѲuDDDDD̰BY ͛ te7!Do{Y2z-Jm|l^FDDDDDα[SO͆9#E/ɆUY,zHrpĄ+l M72 ;+qm]F+s63%'ѲV9O/͆,#!nʵpCpb:DSOWk_!(2ŒA.4^پ?Gh9؜*#n85'mDVB6#N9thHⴶ3[s"Y1 *mfClhlw]^8u؝:""""" ?Y1ry+7*16lwdS/ dy +vV:$ re, wv4lulȅ8Fڜ^k-g&X9lMrX}ANn%FNDDDDDyé d%YF֮r 2N9uvz"""""Vmf+zl8b峬n,V:+6+av0N9vGDDDD?}gOtsbS!"""""#,{SWwb쾗c'٭98SD|L9xFD$BXrwQx9W"DuxDDDDD!y|" yDDDDD7H_'˹KȚhNE~џKݝ8"""""|$?V>Qj +qDDDDDDCQpx=oIENDB`pspg-5.8.1/screenshots/pspg-5.5-oddrechighl-3.png000066400000000000000000003410411452457446400214560ustar00rootroot00000000000000PNG  IHDRq_ѥ_sBIT|dtEXtSoftwaregnome-screenshot>4iTXtCreation TimeÚt 26. října 2021, 07:58:25p2 IDATxw sMvN$$zHDBh!!'/ID! = D;q8Zvy?}l|3B!B!B!B!B!B!B!B!B!B!W/3P9B!BuQQo!B!DR U< !B!ʯ ȕ瀨!B!gyG͙$x `ŝe:==B!dy{汫<\ $\B!)iӜMTWt'yI9 B!XJdٚf% <5<W.W7W/wPZr]GigN̙iB!BST/Ls3{}?7қB!B8ts6+kg9o?͙4:GӄB!J/'5wt9+ Ι͛9B!BrAZI>g ggi̝!B!s93rĹ$z;B!BΝ`A3yTp <˻B!BrueI6Oui3W_48G=pnɯυB!QOy:s5qsuI:׶[N!BظzޛA+wV}ĕ$s%xsֳkτB!S\es%T /:Ѽ{[AֳʻB!9s)\)\Xw4tWs+A'wHj}h4lEgB!B+i/4ʝ8|Lp ᩞ8wQ:Y?@E{ozi}W!BW!s4{`l S켷y7Γ)mܹ2d.**?0jժ7oe^!BQӧOyw.<{z ,9籡ҫ]GC=Vhqg{geea2\X!B!NB^^ފN:ʡhƳkkN~:gϵz߬{,Qt B!.3L{EhYbb% J n@wE;v3gPXX֊%@TTkFQ)B!Ȗ-[qnwb[isvHeqz*B!BTh#ҌFǗm9ZcѭfRv^zODLZr%B!ji*[:[@;Vh (+I&l'-bB!B Zq3؎{9g.lj^8׎ K!B\E֭[Ƿ~K||>{H)\LYVxS>MsGGJ,;^H*1sL/_N`` ͛7h4/2zh赴XbKʁGQo+B@ ެcے7n1{v ͙Nx߰bvO'`kI;1FoaS GTBj4~(ԭS Ƀ޺ӨXk֭[iӦ  ԩS|'4oޜMz%8[vqӕ:ZI~ ve+zuм62^9*8g}]p5b4LҾ?jf>0)3rG^Q[~q‹NEfuɇ,-1+ANE~YoˬHi75_+q֤rb.;?ߝX`R6$2|m=+t{eyrFEk\|r0a ::'2b~qɴlҥyvu 4L4lP;:ή_>۷g֬YDDDƣ>֭[I8V pbЧuVYZkV^W{dS^Œ+؟D\χx5u;Kf]$CD 1nu<̂CQg<7㕵}spz=D^k<ȣ!VreXlBFd@.FZg y|к9ߒ79_f C7&bt ($fsOFP)=ƒ7#W|m7e{hySzS圝1_=ǖhcq= hg d> [lzoƃ.ݎ<[Dҗyq~۴m$X.ƸNbg، '{<<~YmSg؛Fxnk{ֶ_2y# }: ZOHHHqƄ_1f͚Ԯ]{z-,V\exeTN&fM!ظz Ze׼)/4aJΦ5 L? {aou~S~O}&r4"><&tĶ%KL}S7"l 6KAe?iv/QnS??O^uwörmY#: OƱ|BngCB[fH0~u|ӫ?}3OϼVAO~ߢPu*ɉ9l.(^Urx{F MK6sĉm2}:-=53e8st:}鎒 p}q (߿Zj駟HxÙ@!W V3߷|5C)=e̘1vTB9~.]@Ɔ)|u5o z4su/~ 2긾K7|O$jB=';t'X&jOx?C#U$g6oGAqU9< F*hMsG #WXOSNS#ٯ;[&P@:?1/ kÛxu iz|?E:?:FM\ɟ_p:EYSiǼqO.[VPݷ9g@ na럱&W6Q/6GIJ A\.7B璝s o1Aх+p~W|? 0 {sUv89·y)l^O>|ii&FVywU |C|qs8^F=)lZC(G%C'=S {?|D}Y7l?WAV)-]ߞƿ<;ec>ZQܭ&i2Cj~}v;9+@5ڝGl-,xA6'QΛ<8lR㗷9'qh#2aޥez# _'C--5k֌;vpQbbb.w^رONNv9ILLjSh/^|1Q_|jrwֽrxN?w8G鶆NZkjkMKI *@_qBH4YͶdNU .TjΈ B9pp+[Om#:gi<YcI-( iB1*.0R%&pX2?H rey=Nh9gǺ3h zYMΛGOZW)y|@#N v{&s<(?[qpT.NZ.ct}ѿzq]#:+Z':BL9ZuÂq '^X7gdkCi go}U q}{:n+esq4+/Av_AJyڭ' =<|E|JUn~z,G_v$11 GGKBer+}6ޕefe2oa!ĖD̶mۘc,*{VlW+nƉ3QN.Esql gaw^lK4vng{`zJD`NB>->F<'떭n0G.YoKkE;Scyn+Η嫇dKR)#[yHlZ7c$~tD<<3_xy*CL >1um`BnVmm{WYZi\]hRժU+qfΜ?LժU1ͤ^ umF`` ю*..u4849s!Cpw411Ch"Vb]JYjo_Һ-Plf2f8,nL$ASI֞4kҴYDN{ݹM0& ;ׅ\(~} b(hvDZa|2 g+YC !,TP5 gG~=| |ӵ!ɓz5Q/wìyfa~a,Lw իp@TuOpoo)XՌ٩d"+ۗ͛ow^ zog{,X^{vy4djԨ<'O,)4h9=!!As+f/8rȋܢEILLdȑ㏮.R+pi=4nm=ݙQ2z#)15o=ead$$MnJs'P-+\ rwótrGQY~^h_tq<^Li;t!Zz]Tl#Gf:voX~w?Bs_7|<9hT1hР͠ߟO>&NoA6m6 "#q'j{zrw?6 z%CZA-ys{ /Azbw4'JA}b*ԟF?LnDsz?zGۯXJ $""pQ9\\CKztzyG`a'-!^OLB8)Ftl^: gao^Իwo{x^'!!A)㏗ Z*?c+`~.W53{Z1[ɂ:V5@իWk-[#p+2k;r;:'ӬYnP'j߃[o*Brc`djbD0'5 S||ȻygcNR6BCil{_{n^z%gҥY'\[zzzSnٲdwzi*c={> ld`x6[W>S->Sm<>oϬ{hӜ+e\GV'"S 26qmscG *># _LԈ$ĿxN}e Jl?4ʦws]FOa54 y*B=OjѢo& rغuK4kc 7|ֳ|(J[qSL ]i]&] ޳8B!]6ǎcÆ 8(j׮ Pұ^(vD-򢵎"XHoQٳe;W@!BE!&&Uұb/(^7[J#sD@Gp˗{eN+ B!(ٚOj $c9YPꔥB!cǎ$%%u6*;GWw&ΦUNٓB!4<qlHOn7 B! wx;sɮI!B!rה)ݶe˖΂B!B gom3{#X.~^,>[[<[~tQķ\XG!B!U">뉏'77wk׮4l%dalZxo^z]klzu/ڛ~1`ܹ3ãB!BTl[a2dftwf3gΜa۶m}3qK+<_ؤ1sWv Ջw?:ǛO0?;>3aÆ1zr,y~ݖɥ^ETέÆ1[1f '*>vIux޽۷_عs'N"66uvRZ=qWή#I|~9{f0;63`Na7vRwBϜҧƅ'dԗh!z6t7s2_=v?!gyi}Y˯a>⃶[1PQPyhO5ͥ`"Lt gP`^'x+fL"#493~#3L(!hY. 15:5d4_ __^=?+30WUGy~dGzWsO4j:.蜮/W*|;SshD^#۩f&iZ|<=c/ ;_iV=W]BLEgw<%MΖϳ Zvۣ]WKs]yy Nb~>6v&|=YcԺ9999JNc^Dffw<J\Iw=]/'RMD%9LzgiUӾ#V\Fnf‡o/sChu <۷!AP%mۧNԡ߸qo㢣L{{|0h7rw4L|,>/ e|?܀!u|I)1"΀zn /YL?篕dtp͙zN5h@{Vom^)yԜ#;,M5Z3u>i`ɂ$z4kt@LLݗ?策!S~dm1p[_4yo. i3w' o"|wC8u3do^ǔU!O> @I_|;mf(k/Fc_*KZ8[a55nt.Ltͼh ˶Ǖx>[&|ˊ5wGҪr>ّ'_XЛ9Ĺzf4sI_iZ !CޞA֧H5 GC} u)y_+{ =2;U_A>}]wJُiK(%]t&HU9%v}L1}pϋ6/j3rpI&}t8иd ]80yl{zWZwM=WiWڅRxv<h;yt̩8~/Q_edDԢ-JƖYNWͱ,D}RT3q,'xp12,G+lcNzYm5rT#g2qs=SxgPyzqfr[8^Oߖ>z]ݞo(**U J AA&rQs!x aD9^Usy2BqTLv/#FǑ aT Omd q71wNF?!u58fcDt3]? 9j=KcA_Nf29\E:W6z>mWI6E&JČIh9.\/A7w'X,ӜY1iKr_ԙG^Hⴡ <S/>>SįZX1Mhy ռUFu:/vr>B qs|1_C`| ;em9\|}ϿYү޸xbR.Jq\-p^鱟@Z<ޛ{+) y>c~ *%C~h撝sC&+[O`J@yq.stdv̇y{>wLEš~_|>wtogHl6eUO6.kXsU{.FPt$hJz>!Adw.š㶆Iyui3t+:1Pކ1ؽ/hI0I>:ߏW{t\q>{-YۣO&Ϭ}X+g;71}8L7/=W\Uк|Tj` ZET6::erxV_1+³Jq֕mm9n DsJƄ)r[,;P*Q\WO?XWΔ֍ghCZ6Eѐ{W6`yZ!jn8[tߙo *57n&z/3|ŏݿ2Q)ϋXt#=5?vz=%v'K jv+^/ٮBHl"-ZĢE1w5 xhN|Gd~*OoQ4W&Wf%D{i+9ǝ ZmA)u9h cgs8up-HCWeUs|gCJJMhВw`[^&!O-(|92S"u&2Oe{xSILp;aYX3x30N1>oNɯz_B=1}ftM(q9o-0 ![HiKCx]Ǽ2KW DC㛻cu2^UGG`|mA{ z`N0|N+ΗU$A,a0)K g'$1m(*0hpdF4||% O&%b*6aວb/\[W;Fuf71T_z@\BWA04La4 Z+Z<%.Oġ)o26F%&1?bj*xb.BAZ2Dl#X>/nL}Luدgb_)3GM=^]ѯ J?hgFYghBؚxm}:u6zZ.8e {>a1L''1d8:)BB6gz~L[̏3BxKWֵnʓOLj#ؾ}w9r~8alP-_c=6^k}V{2sb;0BhN![Ce*8YMBL$.~+ vF xrn[<>9)G( QJ]H[WT8!B!(vIB!BT ;&& B1.,T*3Ɣu^֭ەbNʎ !B!D"AB!BT  !B!*5_I3R$B!BT8㿱oX9%+1 B!?߭Pa6ۿ[ɡ7N8!B!Db:;nIGEtw_eq"g/,!BLeJE+g*z\+E"Hӭ %9{gl#ۤ\J5n ]f*"2l}<Ʒ[2,zފ{z3*d8B!bPϱە$Z -lU*MOB!S"zk`aLHOB!BT  !B!D"AB!BT rNB!Siv#=qBbz-:}ř:I_a* eR?GD?j-#"δXv_$”<`{B_*{xG)?%B)\'=qB؃Ύ^'usLe2Vk`=ok&]rjZ1S!TiGP D uaĉJD8}9916(. s(jrS" ~'"0~DQ7T5!cr"fL83g+InZO W#|޽qQ{B;(/<qE >{PѪ( ¿1;:" E?/l#Y"gg 2g|g(ʁH{h/cג:?!JP Mo91%3W'ڜwW07U%z#oI[ Ue 7G!5hk]~ <ћ?K K_obz~КsѼ]u8q I!KE#/yީb`|%_ggpj/8{$d8T1-DF7jnſTr݆:6"WM'5)|O:^bJ!?!) ? 0z<ػX;!d U x+Sp-=yT"JP| !~D,in t(䟌/9=jŘJ#`~v"QHROAK_#4)1((^]89IR!Qg/³d?uDu1DI5'lCBz}΢2.;*Iy9Ex<ړs*#yn^Aws;X>gk?Zp&wwbph6b" (_B4TLjrQ`KЍm-yXBt(맵ۉԏ..y=ĉJ&%*/7@A#?}eR7~2O(~jӁR*yRU$ATPеDI*j5 ŷ5%ȋ6T:(|=P)aw!; VGR6~ S۬'Wǿw`Qz/A<4 pD+_1/+P.I(8][_i *0 TyΰUF*#jӫILߝN:If$~Juu>E` -nPf5Jsi6`׿NrVcS=Xq{5eA3/GBSJF@H|aT1g#d_0_pxa&Ыj>6M:TL̦3QQ@C1(EySՒEk-A֠HW"!C(΋/`3jV!FyQaGgo2Rߛ*)ra( v˳294vbƜV87J<*ƳɷZ@?k30o[u>(/Q%Їc3y s㮡^FgNT#Yї &UAq"/kCKv^bkW=9EHI dUW(>()?]vԫwdSXq77bRd~@=HnR4~1~KXFўt82swtj}:ůϦs4.w)6dT㮚Fj.ݼ:7mdi+G\奂8quG4=ϯG:UuN;ɤb>V7tA/Riшmu" x#;7Ju4r//BxL<AƃߒC-3*P7%Nhy {.#sϤ >݅& (hsw=YD~J8B÷x`/jOx; \5/Ĺ`vWm\ <瘵xoӛ ͘(`Y|_Cj?n3sܿ,,w \V}e>$%FǎsTH|*dYN\qv,m%i{-3i/#hD!I}Oү+a$Li-LSlV,u6^l<6]T5qʹsa39{=c9BQI{f$mEM_~JWF#G1+]qy<3ٗ4n {dW 2K1 3ywse{y1b۷o\Nzz:G?<6ųk,^[kϤ'N!4yTGȼ)O!D9%ABP:mB6g{<\D!B!* B! N!B!* B! N!B!* B! N!B!*Js: BҞlr)ƍ ,ʬ2ʸN=&Kӭ %9{gl#ۤ\J.ٗ4n ]f*"2K1 3y]&&gl#ۤ\JHzJNzUqτ2Z?FIĕ]5'N.l"B!qB!BQH'B!qB!BQT hBJڳOmR.%\|122pĕ L%2B!E`œh|߲]B+*]3ooMoԴu0xO7:wB>r'X0-=n.\=={`^\LW{qo=qH^3U lՑ^_kayP OxS-CЗY^=Oꄫ43QqSDu&t#;P$ IGPÃu+CCEsꞃOdԡ}=}=77Po<#P:#EmEQ0|^̘>ZC޲8-a^I!&tF],BQ'?{E?p3-IH#[@z PElx"硇JQ<(*';DOޫEMt% m7:#"lB=k_;>3}fy晝ak4|aA/fZyR`w68yะQONgYE$R៮b|v̝3-Z+QS7Jtt^W{uo|J_m@0S1l^3Uw)ϜQ-kY<n&:Y>/Yp6AwM}&TFJ*1igxGd߾4?^ZrEWvsNxNpuoFpnI ՙ_(L:n'{%tn!ϯq7bq7MgρFk>rG" \s( M⥕'% LqQM&7Œd[NMLVΟJV8^&T}W(vvald0Z@t(gkt"Me^QR2zQ@a 1J6Ef 8e ӲPX'Jm}&TYcD;0I)4m \'HJFIGc(rj IHF pBh-mȧðn0= !7EJFUJJ;184΢V# Bf䂏q5ҀEzozvS[xL6ٷٱBr{Wh~!^q% ։+>*ɍ;8QyD1E2)b; ;=<CQ?8Ryϟ¾D`R4J;H6T[AzeevS|8қADt_sCt9pDV9H#~SI%JpM*zU4WZ >>8.b=Ub(bgUQ\o\f\[rwLq.m!C 4)8".{1L1 AjQW Ӏގrw:=xI0XvWfXܪ6:src ߌص +j2[Ģ)|@{JRB,8{o7l<BhkQ|=sӔz&ƍEGA 53h/˶D|r)k.w$C+sրm|!U!ոƳwJ%>:dY2Pb/wB[KM :q݃T+Fb}i3Z.#ot+}9cVCH}<BӢ!En^^Ʃ w,NrqNc|,# ilv܏2uyCR{tMĮ]GMQbIR^ddS I[:])7|?_F|[ qcjz:M^ɻq3핾שEևeGnE?o<[Sed@uﯳݪHiȳ^agƐfǷj7%{m!H~=8<+c3,ؓXp̕䄱X'B3I K^^ݽꅙ׮ݺSGoL^ᛑ틾Q r'G+Z wZ XFRzu^ھeMs{]xBFsmS-4MqƌÈ#8|dddpeϟ? x)R>L0rsұPQY 8hRp̸RPl@3E^O   ŸJ6<+$EB?D75OJAAhU&   T3LnA**QbLK>AnDž/ʸ>VTJN5.lcc9UI$  B$qw+ ,AMŞljǘ^M<bUnjZJ׮7^jܚ?۩g9uCp{>q{xѪy+>sD B/Ҕyc'9<17y)tJX'^NY- =_\ .z3: PvG1_D`M}ҙmd53˱YHY[%\IzFGfd>Xh,3d~ GI5{RF rm)^^q[5 h1*;)a>C36m(זTrSNya{`?9F-_08ZoLlc"|u=lA_AV<ߑne":!eU'NRgˣk:w91*8L>!o+4[ yH[]cRBt t}NbtwiXm(dEr3/t.'Ew B!\g~Yz՟@'-Xs`cNnvA4DL& 8ŁjV TYFC2鐬,gapiQ;*ߙb@Vϭ1J  r ^mi/5 E\wBPR~+Eҟn&ۇ(A-cٕJV5W-)|a?現 5VKĶ(Vn+4%-ގwWz 6]GCR68k͹i/kRi Pu)?@Bҗu,\'?XNJ.DFI5y~/tWxz,.V;uB۪fOw2uZd_AjH5=C1ԸRR?/|ۀژj+[q\/)s^h,x~҆ IT_!. B%?iHTFkfzT" I[3);\^#NMܕY(LӘ*oNxγȦ& CUk$FݚЛ {c{1DQ,] .pUF2'f@g䎩1I[!8_#ׂ88ǃTw hb[A[]Z#O*3?ƿ>Va+;]vۀuDő;2D:8iJ,_?y?Eؿv&P9g3iX{GH>ؕ*szc5Z߁OOZx|փ̝2Cӟfj+o4e'։;}`7:wB^Ø/2W4 Cj yd'<{b}2'rt~Vҙٟ ϯǡsk̝M=bGJ PT@[Viɳ<)#9uY eO>5yZƞp9F}mׇ?aAL{ Ş%gI}:NqQx>l'y禮hnL;ǔ < Uy'￾Wqg?2bĤh=&ͫE]ciMÂ8^4L2,u*7{ %:7>%篋6  6{j9~jgUN^?$`v31} VfU# N9{4ɫ=Džzr::/zYVT͚ZI?5 ,9>4ۗKOXJ?oQDO&6Fg*q'P4bN3z Lj=EaH0j }uqm}݃nE2]lcݷ@0;Qw)gJ((Sn#YC DZ߉6J 8p93= w9 \rNӖ yvw%r͡^2przN6Yd;vvald0Z@t(gkt"Me^QR2zQ@a 1J6Ef 8e ӲPAxX:QLqQM&7ŒFUrJ`$ P 3pP )%:Nz@FTȩ+)]Gx:h%:u1F /Rb6HхkqK4Rsc85BX,l=]d]9|9s@ .ú[,ZPwSVp % nLC!v@1rZ 6iEzozvS[x̢:2JO(Gr@ 2y;&1$RS$eNlJpW8XDiY8cv7|A*E%W5{d_ްCRpY;Q $RvqPnLS#USP3s,E2Q\C;;ʼ؞=UC;-'JOX0~$Q )!`k;O(mB@@mgudzMF:RZi7>rZ^Uܷ:9+Y|B!rr3,: `gdž jJ4 hl/Qy!։s%w=Ԟ?y2V1ƝSZAue"u`up)ӆz㟫5CFX?q_ӒSj6nDN<>^hFv46'pw.L9;W[juV (KyɽF6U 'KO(\=lKNT'rG":rKI>Ǐi ^bXKl<[9n*։P:%MRߣ,UIk),a(;%覄``oAhF3f5NO=cq+4Z66u+ٟi@@^t_Cmwc܈; SkdkeT< R*Z IDATsckPj'{ۍeӢ0Dо};ڑ$:c_[a}}.TKh+=@z8d<1T .PS7_qXWĻ,BҖNxδW_YBq14J@Ӑgg#)!ͤonK-z7jAC{pyhWW?1g80XF't:6+I_X'\Ƨz:M^I p&0,{  xi xwꢪf^v3m{oF/F7)rHG#h pi}&{bLKyjnHwa4ev e'[6lPhڋ/a̘91ÇNFF/_f=R/5?N>=qRQY 8hRp̸RPl@3E^O^]AAĪd#c_BR$1sOtS P*F   Xռ   BUa{L&qAJgXFR:Oqhˬ27 %#z1뱜WwQұ厒_#:/WrAAbŕ=|I槢>DzHj6k&-oSyy5|OC>VOw ɭi歖37)NߴhaZn($hݶ m: bduXDle\CܽE$ets&R61(Va9]LrR:-#eҕ[ =q+HZyk~?"2R{,#VR$3j%)}VcYŚ_lױ~͛xl8տo_ȹ.aQSl:(4J+GP6COy~کd,j>A9w#)V~ ٯjw%-6'5*n QIqEU=uI鵊ԞɺL@F5XNUIh1KJ'kǬ%dFG`;uLvH\y\_}~{fɈ,ߔ3l?&21YO(:2ث-4 ,nv9ͯG.OB3:jb(Ed#NRgˣk:w91*8L>!o+4[ yH[]c{xݯ-:dc^+:T(k~|[znIѽPiy;Eg ٣"`#}YDŽfPCU#8mVloG Uy>'BIOsVӞh |7۴ueSdTZ iuh(ς) ea6$:pY_k,:f dǝayb(7X84mG-=n]&&Avf{,IMhZJ!wdV4Gf421gW!7T5GapRpW 1gb ] fH#t}Ck@[CD 'k$H F$!מv2j6wW8zC)ɁCãi,%?}Ynq(*f@/~C Zn}?T]$Im5 O" DeŕBl`Q1/C;h`Y.y@8uϒ9j'MP & l;X/BdnӪ2z,kx}!C]&Beb(;'zh6Ӝue^*~rv=,;g;CsA:xq$R<;gH8"6I쥠f;Qt0xnRӭ(Ռ7)}t ~Ƽ<|`Bq5ÌH\2<&tH]F|nF %DJLf. k5?9¶R d}sA}d.$-24*fPM[#y~OM2BrVs|+B9ݛIft*azuZiUZn)|ll]"t(;մ z$!u+0:^(;Ԣ.|OM&;z$}VDvE N]uL@\kY%@1HtH&qWsPR|șiPed==N\,\=̾fP#c^;=gRTj4rFo%A7Fs/pSn]S&6r.ڑx!'f䵅P(qr#x\d hƥT~J#eo5Œ$juCA= r_B3!b]Pr@CHTFL`ZM4-"҄ԢFE;!L(CHby\f}HQ;]z/Ut&? 85qe. .r_|.0?^4g~| |7Bu+ ]~}+jmPp:␴Hz;JBT]y-c!:xr.cEQu$o XĢڔF3Kf/) ~^玚 | 8` =-JFUA7SCH,9̨)r.C/TnT$B@tױ pk^B㰮͍Ȍ܁5.lTڑjQ dsE\V-͟2P36zd`S*Lݓ~c,TǿcEL,QwNI5y~/tWxz,.;I§,~ر;vc}4&]qapܕ_d3ǃml;GXhFMbu;,@4nW5Z:?4+ցf|VFhGtīTx UYj!gj'Y?WTR4WҤ =ɋ4K4y߯<ۉlj?8,Q1tkj@o&H.2!jc/>ĬOFtn6Drrg:_䨠 sx]AY'kTOiy,+'&I K^^ݽꅙ b7)/t+ }e'T<AA>= &ʥqkiS8}삩n+^(`>ݲlٲB^|caĈ>|t222|2ϟ\Eoo&pq vY+kdO@$r( ~ԃꔃk$r+'qXAA8C I ${a|'O.08S,  PT   TP'.;; BE%O,r))#J? E*XP2'qᜰ{u{=?AAAш[\f Y&%9}VanK-|z7i8^݌%|Yq+Xi5^۱w&M>A{O!Otڅn^_ouGV*U_9g3iX{GH>ؕ*szc5Z߁OOZ2փ̝2Cӟfj+o4e'։;}`7:wB^Ø/2W4 Cj yd'<{b}2'rt~Iљٟ ϯǡsk̝M=bGJ PϘ{?}*M=yۛp9e$y\8}<_ا OΟ"h]'%篋6  6[rg}5=3Lu:|L_Y4ĝG; p\XȨ'"ul@lġ⌿Ӛv{qDAKHScE',W@_T7"' }|3ca1zC=cEx5 Sɞu ݢ0$Ɏs 5Ͼ8z W6hn>A".A6L±IHZnƝa߻3%})ج!چD'| eu,4m> n|gq] O+j\s( MA&fom>6c zQC yϷfwԨ2]d[rU'N6 K:d/ʼnjܼ`@.ew 4e=R55 ?΂jZ$U/:Ӻ;٣X%?cbx\5:aH2P ;Y?oa fӅ&s- ._P Px`ŒCL|kdBZI#)Z@ߛ9qs~m-?*s[ ?+:8rΑrrOFJƔ`~ᮝ=Brr3,: `gdž jJ4 hl/QZBb(1W{Cy'-oeS9P5'9VP(fHFX<%bAi@ʴbG͐tp,OŴ$㔚 ѿ9?8.2kbK ø4y|ж3'hQb≜d @rOLh9o~-k~fGɡԫ-"׊ y:/f=}Cl@65z_&1*1=$פFr 7]W _EJ LJ'%TR̕J%d=ϲ2;)jD޸̸p]CBhSpF;uE\nh@oGM:]yzhpl_SM;-:=xI0XvWn\5}|Bj9y7gGȗQm,KRsz8fDj DZ1s8bѶ׺'P\X`+-^QD5ѺO} ޿vy#Ъm*뗟ĬNA|DGA 53h/˶D|r)k.w$C+sրm|!U!ոƳ"Ni/(h _7EgJ*^N|]g@u m- D7% d{#wBS=xG71qz!>[9[L: ouЍmlaZ h_/m&[+em0ԕc.`_Rc?n|(!€pю$H ۰vG& BY4Wz2pxuc⿟]Zn䍿li$)wY22-0iN->.>bt+i.Ў^)# C-YT<;O~9La yo&}|Qn׻V zOGC2Ͽ=Á2= ױ\I:q\k7>iJڕe`儻54a)+\\KSWU0ڵ[6ϴ-۾p+y"p/=ppeT0Q.Wn!]T<ٕ'a4wnٰaCi/؇1c0b>v:\|O"^J﷿|o88 JE]g)(ԣVJ1JA=y=ye̖cvSAA8} I8=M #NAAAJjDAA=q& BE%O,r)'PeV=qw ۘXNݫ(I\Xz~ErGۯrٗ+x9  B1Fy>ˤDSQv"w$ZDr5d||7)似'Ud|v+컄֋I V˭ɺW$M5LQ Baadiۆvc/)yu-b^ԙ 43_Ut6< UV|D1)>Orxbo6DSʞRkՀygo.—\iۖ0򣽤 =12۶MA_t̖kȚȕ$?OnѤuXBj2f%*,œXBYNJeLr뾡'NW}Y2oCXFje$J[=RdF$jR{l kX+:/yQ P 9Uc6,|MQŖR~pI>/Xq-܍tZAJ%dngFf Bzߕ$\LڜԼlOj%F'}VV2,'*R{n&Fc3m`9W&]$j,.U*mL)}ek3a."*sW3r9{[G%#ʳ@S΄zbQ'ĸg=mg,x`,[#[eLA?@t4p:=-C efDd}- 8IIW-}ĨL2dc^+:T(k~|[znIѽPiy;Eg ٣"`#}YDŽfPCU#8mVloG Uy>'BIOsVӞh |7۴ueSdTZ iuh(ς) ea6$:pY_k,:f dǝayb(7X84mG-=n]&&Avf{,IMhZJ!wdV4Gf421gW!7T5GapRpW 1gb ] fH#t}Ck@[CD 'k$H F$!מv2j6wW8zC)ɁCãi,%?}Ynq(*f@/~C Z|%''BejJQ!6GF0z@BޘUlx ̝JFx4v0,< gզx(+B iBcg4K}5D۴LKr^_-ym`d9;'ɾ^$4ggAlJ|%>ˬY}Э3"2@_~Ď&NC;edF!{)fَj#ݨ- F4ޥ۸t+J5#id%㳟1/-P\ 0#ׇG0?q ) ~:RiwW6y jIEi>7=/ s1ZkTAMjKIZ$ӍehTPAͲtSGnC1_%+be4 澿Z}ͤE3nbo:imI0=:*-Ҕk>NJ6QgJJjI~ٺr}o/dg} \Cj]>ݧ&r?=Ͼ^KMzSW""S :rj5լ A1HtH&qWsPR|șiPed==N\,\=̾fP#c^;=gRTj4rFo%A7Fs/pSn]S&6r.ڑx!'f䵅P(qr|t6DI^zlXr\[c(ҙAKhF7A;! P4DLeiQDz"Ҫ.MH-j$]ٻ(㟙훞RRR%BEO) ((rp=SBG#HGiB@z6  H{ޯ׼vf;3>3<>1@"DQZA*ϛc%5 (N(dvJʡ zw`'SvylR#1ldtQI;/oҠwU!ճ,Z[Yy\Bѷf4܀w٩EһPR - 6>ugNcOIjs Hrq,HFu*HO5'*uJ+j#;r n'>=Qp>N#! ܵ})wEj Aln4zb#߬eP6 S< RtcEܻ}y%Ys4п cM ~~$Rl0 M"0 %pheTv=חJX4&,omdxMg0;[lɀ^-ܶ]I ̡t c>_2nȜ%# F0O%d>(&ۑ7a Yɀ.A=q˧FV4D%]'l"o]8AAUM#sh0Dbh4yy}pA67a{?D^Œ1wt[k@o B^rm#aU _FqepVJ^nc!ysI&?ݝO*hh^t.zWޤ%|yR_aІK:em3aҤT̸Td(:-3.3hy5tU32^ @]!/_c߅t;Q6L6*ȗ ɕMKLetUeL9&+-ZtبQ}3f#F`>cX8{,sΝl% J1Wj׫)2^tb}WM[Ir禢Hǀ~z R:)𸋙E6n u+5g:*H:+RZAA C B1M ũ ')-  PTώMAAA*JsZY'QDdI<Bɮγ?V$wxLXvOAA@Tnm| OEv{eX;.e-oty{l˰ݳ"˕9cX;O87_Y-q)M~v܄/(p2gkt8{HTyuLp7q3)MLI拇[Ӷ{<CԬULxetl݅);J( Lz0z3a$nN[މ*wzS Zwi`m>Tnf<=Vh-7'BxvPwtJ2q1D[dJ{;eY8:Ew]:jydgCmqq5s>|6 ul#Κ00,f-p/&GvK:E_ c%,ͫxY'kO]E# yi,55;m@ġd $A{qED0֢~/RX{I' GP<IDZۍMOt9~'`ӡ'g&:Iru_?]A:qy5'5uplQ]oԘD@FЂ(5v2;J\oIx#>-n]26!,)-U$ Ż4cv@u|rOFKG]~˱.>" Pj/ "[ȑjxq,6"svtq C٘}lgAIeLR3>cUGN/ޛ޽ӹ^nPH[1e5G6[*MMK!#,ԯxy&m3!Rމ s-O&0l0*q*qp8Ulo\l H!_k\&=o6ĝD 4 ]ZG TP-PUڍ<"Y(ԡe!áHemuǞLA9(czŌ~ПqQ.\aţ  tVbȭ 7ր* TJ=0}Ho9}hHGV;VG.OKg֝kyS)JzO?6q5^ePyrc|}1ƕU=@K|G $Mg1u_G!Ky"GxP* AE2%zv)7KAn+.TߎЃa]?܍uryO~u8F)}2k;  1#`*(O#6wJrAg?⍀ܧ >wq> D$Byk"_X0QXգG\7YtƂکf狞Xד7KYzPHZ%ZnoԠP4pB$3CTR[DK'n7_TWh"8cMp/*u!!f]mܫ @>;)mG-xsq=6,:'>;%B=g aڎ\T\])kHh y>;Q*VUR\Wgi-Ӽ=RkuWvMB?{-עd<.`DV=Bbj<[wqԺ^ dIZP錶{- ĕG @S#t E7"![ц9ɟňNo Wtcۢ;[&F7:skʨ.v.p]s}>Ҙty(5wқ2)  h_Eyy'{\H]0@ D^+/mXt!Jn )2s"4{1At#3OT +VqYxp dҕq d?,kN^)?->/VZ\8Z^FhD&ei3gګ}79o͠opKE h^ z "v}4OA*+QU|bOK٨A>ͳ?V$wxqYEv`orol~yr[.'l%AAA(%QYyxNgT- 魾&X̸M~&|G]ߒfoqr- |2:ƺve[[2Z}MF׵ضK$M 8@#:ж};u̸_ɪ e%.NvR2ZDGʖ=dwZ@VJ,3y%<؆%`&-&"2'~#>걒Wַu9=s=דJz( KY=WZ]"Ny~=JoggU{l]aK=3f?"lÄ}şqdyohGCV1qZKJg*2;/!rWis'JLNdOT/ JXAQ+N;p1k y*ۑb6 va;$Pm`ژzmfzzq%Ī319~N~ۑ] qycD~Km{0 ( 21m[Ab!8kq6 r2k6Gv4s\\ss_]NWְ{^1ߕe%NR2pA [uNI*xұ%tuѩ8@1:WAf-xp;O t}|^Ϥ8RTdb~ i⽄nzGئ*N "ǡ~ۇq9KX/(v?H@\Cꅡ5Qw*zL/GւtG3wgFmL ע F)8wz % & Cg# !CH2%J2ڱ1WgM[]WOP?83 Igн}Ǝ;$^ t!{Bae3!SrӁ=(vܪ"_Fx/礦#b O _\>cՙٝfq_ÝuwV,ugge5u?ׇlx,N}}dW[כwI탐=y$;Iz@֬ceM0mF#k~rIs4~D!K ծ!&ah6BWև|'Õ m~?>DP? ! CJT$ IGPcʘx>ڇ3NM$ȶP#ǢwSPTP/XQ/%+Kr7DI(!:"ݎŞI{>Բ\%@hdx3UHNmD7v ,a# /[PP$Ooz)J Phس {sPG94Xu\L&F-/~ΰ-yqH 5'[5g;3dJddoz=GCS޲57g"c?gcG#.C%LdrhF!+V7Յj#]*- &4eq9@e % {-ka}ևvc0NLc5{zkp+,C y), vNnNhJss PS ]4ѢXJZ$mhTPAsuWSG2|NqXϑ<)0håwt6噰 WiR\L*f\*24żYYW d t/ TM:L}Y p\oy&~bOKمDӦpx%2*2s-flԨ3#F~˱X,={sN׫/:M1ޫ-qפnsSQ$c@?)Sx"?}73[$)-  PTJ\׈Hhv!TΊAAABg&   Tm9-PYۨx"_F^WiidWYUwnhix&uvY'  BEPi[*m|ɍ/φwY3ɗn;cox-* ERlX+R/Au1. #&.AʅB-3V.rjZ~oּrwAGLIGI2Y gZсKOxVT4' ޙ+/gơ#OgH\1~CoXkͬ[wGY_rMFiݗtؕnǐKXW:pUJJ 1Obw|_YLD<So-[&P_ƢvߋM=Y^8:?FH:}nmz 30>s???31H Ϭ# 1=ڡX/a\PPOS [_dN|7j؇ ~ދ'9iτah?)6v5ڱNera`M.X 4ԯkTϹdP%欮D hcpcg`*% gd"Ϲք7OfxdNѲt_q+\>!lճt֘D@FЂ(5v2;J\oIx#R.Fxz@aLqz@Bnd]y1D`Z)7'4j 5+u^5v5OQU|Aʁ&1 =ؼς8˾f8}ƪ%_;7{us!rK*My !VP{x t7DMK!#,ԯxy&m3!Rމ s-O&0l0*q* f-q)p\!+xmT դRY D 4 ]ZG TP-PUڍ<"Y(ԡe!áH}w+=$:gΝvcWL܂#B9Ʉ@zˡDCF:2Z߱@߇8ryu^zd<\}URĴ~?UK? Lzy>iV rc|}1ƕUpAýw.]}BōxPAE2%zv)׉z_ "#ී8>q^UPi$,Ԟ~ѨƝx K3_L]hB:uѶtv]_Lk"_Mk͈~]m G_;9v\؛rցw$qH^9ZH!?*BWɼRtW2S;D%%Z%Z>!lsZ.80]H{:m j ij (-u]DzjZ[xث&"Gtbh:hQm._ ˓뾍@Ԣ&rTw(Ձ-#czdcX)p/ 3) /fF1A=g aڎ\T\])kHh y>;Q,)U:E{Ԋ^/OODиqh(r΢)xP]g!Va)1 B6;<~zVhkszi@1yp ![pƯU7ضVɵэ2KF~zR $BqmEUc۠A \EK3h$`kaBgHz?tK|Aʁ?ߋqo[ѝx}*5kL2#ә| 2~ǣEGJs ' k3H2 ;nU243зf7zy; "BmwyݷK[c"YrVZH['מS\L*f\*24ż_W{8X|_kꇾ1V4, p\oy&~bOK˻Վݑvm)T>WL(|7vʕ+5/cbĈ߿r, gϞeܹmA)A-z8EƋNS̸iK5+v㘗"=)hLQkї hF(l+gLTt  pêe%θ5"Ҡ]a8U7!rSAAV=;6AAA*mKl9-PYۨx"_F 9-hU*~'ƈƋs lnW/J{}7[}cΓr9g+y>  B)Js6>קZq;DnɘZe>r}Czh=/3 J?#B2:qK& "P<ٷڷC'sfay+Vُ]tO,aO

_S:z2=Vxl1Э3"cM<)Gn|7o>r.4=0UP78n֡{K\5;N3DmvUs"N! ̵( L_݇1<`YdCME?PXΓ PٓG򱓤4ijy*.sa,Tl܇HKÓVC7 ]YxWZ~&zw`hkaA 2 )ZP$d'qCfoEo(czJō}8cDʼn-am!X楢0 FA߁7STܖH 9>zSlgq_R6ν72c wܧ7a=הa%W|At4QMhÆ9(#gBg:S.&Q?gXLtLjrFћRy`­V҂ǙME%2\NVU7g#wᖶlwΩtoٚ^iWYl*[O6 h$juZ]&=ҥ`BP@ 4!_Zl@RPrܠ*AZx~Paz<`}h7) ~'Z'O ,&&V4ѓUk\ yp{qF~Z>V S..7ᲇ?DK)l9*#2kZFTϽFqZU@**#:$R+ˎ lB.h]9T';ۍߖ!#%|5"0ye!,#^ޢB͑}zw1kBJ`hI't1:v3Hz|tQlL 5"o} ŵXz,ا%{q>'Qr!*n2 &Lv3jז4Q~J  R9~+ADpB$#TRWK;9W=-4͓ Wf͐nwamag3W&FpݪgYõ7No%C0i8wSA+ IwO- 6>ugNcOIjs Hrq,HFu*HO5'*uJ+wT;ٙWUs*l~2 .+q_ꤳn )8~lۋođNg?J~p['C`B*yS/m THS|<,׷ZPqh1w".r+߮Jƍ7,IJBGS3 CSβRZkɬpRY+V.ϙ0nfSmx ~=YYX̤ѫ'=FT坨r'7Ҫu'>6֦蓑Lfkaϳo#Lnz}z)dguKt CESZxץyGv0$@vgQC;Gѓ' [qOK[LSk,S8'@qѣy[Ra?ގEߪHS)ɣC~!c_wM4\$`eߎan}QwcV)$G7cP#75q 8'^Duf2d&aWx D &~i%o/.!XvdĤwi-z#_ BI^ʫ/ְ Mc"8\J.[=hkKLyVW>|6 ul#Κ00z%~q|m]0r12u KO\?>WGӟXkjw*jYCs5;@I>: כH`Ev+A_R{6"+}"?FOycwsp OCOLDu 3<=~t>y ovh>>ÖW#!^GU$-P/Ӧ7¸75fncV{9 IDAT)XH œҴgB04@h~XX]ImZxg0Xm+] rX._ʳ/66guel|$Z@t `;%_U)= yε&}0s_.s K.v_{^Q"k?<ӄ;?`WE%z;ƄvP$Rt4چGH@I߁P|KJƛ.iumw!$fHi IH&/ޕs@t ˘(ӨdQl&r˱ϾZ/m6D:VBz)p}4i}_$53V%(ydݫ;{ [BY^6SR"<+mށILDEȤdw*(98\ i! n"9[%2̿J}l4FU&W=[dRHḤCW<6I 2(8Q H)TTv.8ٖ^I7i"Jf(*^ETEE+WPQ)WīH/7v!4) $I6fG v>3ٙ3s̞ "Y,(ԡeq![ Fj+ O m=7c# 8JGi|R.=pVj̼Kh/c{7z< 9~]7 rQSV9sQjU+ 8zi~Rj%}pAwA=s}z@A/Zire1/t9ײXMx_^t[.lHąb~oOV%Zϲ)6C[C¯fs_`{_Hw@5yK̏x>G-gH*f Dv!{%rU% ;Qd!+KJKtÃYWQZ6OLP|]\}{Q=ݫ-ݏ'UE7:֓Q2ЖjHECqp-ޔNÀv(oށ$RNOEqfAUvaݢA 510c 04WJA(!wֲ/v?`f)""sgc]{uNMx5 Έ,ҀYwa\c=qWPnLdSs .+{=J*"O1L{_1qoHy)qR(>漽 {]?%XpQ)z BV$ň=#tucY{ũJh9uUNE^VwCxU'=is4b}>lD𼚸&&;Q ԳH%dclNDR?B7 $ڸ?:^<1D0=rzW#5 p&a[Zj5$hoW @Kxսo_\DqQ3P}J}=N7gNgu=F誆_ƞuyt "d]_p]&F@MA[=d:O6.{6cQ>O|O;r36nжoNV/VSgB 4|AuqC+D~LI=ŋcxf!b]7\|քTeO42.7X98}x]?}cb@dW& 'ϐ_T1ev?ސ>,Yb5sb,Tzi8)+9C@F3.>%Qx@Q }8@' m$&HIJ$!p: 4$v Ō:'bw?^%H3Pm$˒(ENLkj^NгoP'H dedaqTHHiD^H=jΝ-+盳:us\rv8C۱\jТ+ 9eˁt b/V)W0VBy<^ oCH#y ?,g]IY%2اmeӵn!Vs:7yncv{ g"ʱo?g}CXO\2;eCSP-NT[t0x/ޏKMF FLـ;AUp~R3j⮓A=pz˓1KxJHp|Q 8Tk*J닔OFX!KFPjȰc**^8Q-* DH:$R3S %S- )9#-[5]FÙcdrc^]7s|geQ#wQ|PN6z36 ^zk-!hж)k«olv ]z. ܿ&WPL4*n3'鑲,ymCl0) 9:`(e4A(qzLbqI9L5EU\ i%+HR R6}t IDpZ$/$*E*r*q?o?[r"ɚ3Dnum 7}&F7da+ԾeV,Kܙ86FxMeE}Pp8[!i?skBƜ]Vju H82^jWr*.#d]P hVj&l[&FTxkMZ0̫8Ni fa|bik.Igj*'ʒm^ 6S jAD'9bѷ P{ofT-@9uGo,X˱Y׉6_ ')l4Wa~3R1aE|d:mc۶ml۶YU;@2{`8@Z& rN[9id]IҀCn6/?0?j L3e<|(|V2LhzTEy @-ԯd@~TG a>?^,KȯwD̍aUA(W4uzO^؃v. nLr *0}<;n?q!O?`qzyGD~H˜-h?j&N&>/(T/A <ǟaƦ&V#fFۻA[Ɨ.6~[4/J OIAiRR!\\)IUMKMͻ.^|+f+>υwAAAn<= &B~7Ѡ:UrE7J0O,YдQz2fLΡC<.l6Ϝ9s&;wR̓q矦qOUЖBW&cN v `|Yd/?z)fOa)4"  HXHf`G_SCX鉳4"  HDAA*-qF3oMA*Q~bLK7qx)n̳r?u_nP!8wh=ިr^OAAҠ̶ĕ:r gݵD6y7fqdfƮ ^"of`DiF3?%*?-Xg9"yfh^i^5+[}Ğ *<+5$4אQw屟2΢Ҥ"lȃ4P]X;xW}vSHeL;Y0FxH;OEVS59#(:,^|I;M}v~*TJܧľ*uJ bDHTj؅onD̹hѐbk1fW^`'gYlOLڊ hp"Q=!/*sS%3~zYcgUL9Pr?ᙳ64!͘7;#+^ywLzhĕ1ℍ{tD7N^l-m o)RC[yxkH S%y*J:SA- }#Tfm3{(Nd=Z[KT睉__t8h^BV~0teWһ zVς)T H4Ȑ|Մ{y+yxS}x8oU UJ&b/t-ᴬABaCE!~1:*MxƳpd*twOWdt1@"d@Uڵ4oݫM=ob]d7jy32՜~Uys~*?yo{V%HwZ g4YAJ~DjBm&lxE|"դx %S)\PH={A%*AeInŪo14P zP<"?o'"Jlۘ\Jʡrgbs %5`'3[K兟}i%9x;C-klҲd}HV={^P,n Hq_~Z7Sez&vK1]M{i+ʬpQ/}x3|@&\ 2j| *Vp2E%{z{.@ ٯU@A2cZyTɲ]>q!T#P1 ^m$JZw# ѷ]Ftw}Nt*TԖ8I&|^n2mN,kW,yIIZ1{|-%o}ݤYQ-mYsɏ Yg^eP2/3ob1ߞڀhF߭MxK.ѹ/7K{IP? ߷0hLZϻ30s %ldlMCA+A /}|)]H=zt )9?<h eʕxyLk䍄ZvUp^$x;E/.jdrb)!@S)=} <1=_1eSZm D_ 3⎊;!) ֤\+=:f("2Yq|6>q<̊z;;r M=֮bI.|?qxr®Nfd=*GlXӎڌ߈u_ax0=–ֲܬ˳d?̊,ًc.nICT3iE8GE}[3.(\/s0`i<5 ?^Nl_GcG}~af\ @ FTfyJ+=$~3 $B28 IDATf.2&?>-$rMDS^iHs6f ֓?gz}w:nߓ{q\&jx>  -ŝ=|OEz 06fH$EL%p!һ,t>N-6˄-|i& sA(qLFlKV-i}rVN.i۾=ʹW)eO^(SD~LGFM ;_}Óhm[3pKbF4Mgo·3ѳ -[E|&Qx ̓ Yh vk9fKH*\KZEF`~+*boq@YÖbċy?IFev_Aj2Wgﷃw]Bj%n&H^z1\Ij2[ni}^2"ڏѧ1|?l'UP(@zJ [|O4Qӄ|}~7[97B7@s{8׬:,fk9.4=^Bf&q9}^Djҧ^Di2. R's5'!斿`=[̦r%֣*N>wֲ/v?`f)""sgc]{uNMx5lΈ,ҀYwa\c=qWPnLdSs .+{=J*"O1L{_1qoHy)qR(gUJ'"pcn:k/8\)X?.I@J.|:z΃F>߇-Wd'2azilvͩv?^G要TGp؋X' 8<6p9p6\Չi@*`)4Q:xrpv3 =ޯDւT!A{b.*}=N7gNgu=F誆_ƞ8N'[VȮLN!ſ> +yQ/QHUaɸ1z3͍(摻(uF&#lWf{ύqרء^m&'qkI/m;2* vl$?=R%/?m(֜ &x!Tws X>ftܟѽ# %NCTI,1)gұQKU\uA= pTZAϝn!?(N+E@ģYR%^N%G`KN$Yw(ynw͟FX~_챻YT̲ĝcCnodq ATP99AI@I;&X*+do̹^=ۅH mV΀/#E v%2b^O ?6Xk%,l}\2۶m6mȬ*SsYZs rj7s:|Й-ǃW/HT )τ Fs4 N4cUM"y*H @ۭ2KP !*GtӌbH vcm:)QޯJ2CF;=~5"!'ɲ/tuŷzM49|16 z? \~q0d߷xa3Ww`jɀn>X `~ 'ʑfH"x QLeB>(&/[9n=_ɀ@=}]SY_>z;-Ph24\ ݘ(jih7Yywhkܸmq^Y'  Bi *qwۂr>֧< ,mcϩy]d|}=v+_m9oL+-}֩)7.s1lW`mk8d iϗؿ D羣:Oi3 lǸ>ca\$SТs/zz?./x_g:>ԉNfd>NN/et֕#kIh@[`<W%>Ȭw^GpMz}vy*2{;eqdހ4<d7x# Pw!x`_Q.GГ+dz= [SRxO?bt!K敶:Jr BQ;Ms4풑\:ӷʑcRhy'=)? ⳳ:RlOOġ Cns2- _Y4Pw60vhAe;CGc0>q |H<2KIXoZ9 EpP20[k0mt!˿%<t3Ҋ—)>iM o$_3򅩬e6}C*nr| W.qr&oH gȎxo/eޑcz3`2g,MCUc+*d%%ו5$^=WNI}~X7A_T{6ۡv>]4~TG>} l]X:Сͯ$9p<÷.'οݥ%yt $ RpӣQr>Tu\y%&CIm ކwm+½zVki=GcN:֥E3rd》SszkiO_}ٴZ}jš"Lv/N+-m8kas|RLG= z kMX]g \]mKzZ,yEe'2KT*o"$*WF[nj)FJh;-4"Y\t=r^:ںF\ ưz=0)9 U$ ۍ;PZ3(U.$HDң.ޫ[mUԢ.~Eq%㎵L_ 5E BDGA~=hF&vi傒Iz0wL.xma2_Yn/Qg떧J59chaI?1Qk&&*B&91+@2$b7ABJd_8YDq2f%N6 K:d?Յjuz~_&t;j2e=Rjvn?EXP5s?C; ؟=BV A*nۆ{odFm=$p*' \&{CWG)'`VCOP P&ueԃ/!D5N:LZ@ߝ>鸼7~oྲྀW%)9lG_>I5Q\rr08sm@Z5 ^m$JV'Xe%S)PNZIqZT@Յb_䭃l'/P22P@5H:_0l6BL7oh)]OqQq텾v1~fcwmZȹ  iSEm^(!wow;۝)Th6v3<ȿ7RG_=ϒfԶH1"|ߏZwɑU7^ u5JU!UN3BN+C`CrR%;$ʬBUm9-ΕD6!< WPPWՅj@@MνН[YMD-=6^$pZp.wN\.Ap)q8rji}ٸށ3ޟx}(Ԝ^WpFӰI8X}PP_spc`w* ~DzN++ypǢh8I5yK̏x>'C%JgEbɆD\XN,j]ҡZ,j3e :$j6gp֞)}2ˣqԺ]@dQ/w@[UнE"Dxk A7<ۘ|U MhCd} ͇mхuзځZՃѽ?{RUt~i=YZ!#mZ Wc9d#k˵7e10}[{w It8lOEqfAUvaݢA VN YÜFs4W1~tuxEtfg@ )PS2q=-e,}{,¤B{7_ɯGYE>gtS-_veۮIO3텮od4uxv+|t܉SNgPžKEo7;J z@"Al":,ƴ?@Fqxjb,~JO6w|eV &0.O ^= Tܴ˗zS, @v?F_Gxۓ践C+j [ FR|_q}\miߎ9.~1o,OLLLiFd̘ >Cy\l&>>9sLv"כ5?MnO& pNnV2z}ـfdܖf7 )  8"!kwE7)/.08AAAc AAA2̶xA(DyVmT0/ţFx?XpgDK]>f ֓{;kI_꼳h2  pD%nqg:{erGSQv$Ii:c_0טM +16[ ̰x0NNM!һ,t>NzH|&6 Baf2g[ZjI#ǔ[nyJl'Fmߎvݞf֫K:2Lg^~4mԔAl0'9<)݆hJ,Ң/-fD}-|I>=вU+Zwa Ɲ3GkZjI;Y%V)Q!+qM~!s.z-l _\?+;bIkӏaSE\FC6uDְ:,4b^OgW%y ]u Ʈ:";AFrL=W5[Z_Wyͻvt(Fl*9} V!Fs`O."_w 7?"/f *}ُRT0 Yk1uX"2ks\&i {HcLB}^Djҧ^DQfUO&RL z27[san ly-Wb=*Pdn1zg-b~J ־1m"*2I}}6Kٵg/[a߄X#0! |5w% DF? ;jB:οB'3-sYnHɴnQ_VD?!c۫ C_>z*d%NRk1BW7F[ o Y_$qPe m%|>W`|~z݃ V=yN#чQCȖAϫknUpM=4QB?AP;TJT;ٟ/#t@B~c8EC#w5B8Qg5z_VCv Tk@຾lWݛFK !o!8 %}=N7gNgu=F誆_ƞuyt "d]_p]&F@MA[=d:O6.{6cQ>O|O;r36nжoNV/VSgB 4|AuqmY!\'`J)^3&:=.3xɕyviM IDATﳯLJ0}GQlnzB H  (=B='r"*pJy RWCH/IBz6 dI{ޯ׼vf;3>3<>/+.ٝGұ7ijy*~c 1LܲC>ud_/\Q=/HQu0Dg:@Z͐FqEo@wi8wAڇ 7ݡHJ$!8q1ʅ8O xk1rZ2Ji`t8v $㺐',WI$`x8Y)* O I; 9>zcl/HgoR6§a =Jy@ N,?2 & ݻY'9ƪ3r5jvy66W6 IM@\y"?oGBZ`s~3H2*ɪJ >zz1w=t6qLX9'$6~!c:x =8[OiF\ 5 EJ;OnF,ˏſ24F4GD+c+iLWQA5ρj]OɧsjrX:ЀdDX⏢'Z}ْ(B߇q楱} %eMdcZA)~gIE\U"?o^V0#6/ÔKyk_FOow]6{}őE<״?'|z2,4UsQ\@uXdIdw]NJZ+@R97jȝw`|%m[|5jaieA÷>|Pgc߽oJKc/Z 1fm-8%4qP0L^3w1Gʷ\O Z䀺끡KۤhF6}C)B;cL:w1Jז4QL?e7Dk%WT"?o'B 2Pɇ@R%o'`KK&MW*3~nw`LF6%%G |*z%< {#KT2 Ec P,:U!iNy k Ї`_Spz4:jQNT_g.I AnU m|yp[xgfc蕇 T8~5kQxG@C|AVd:88ϲtYdK,YrSٯ7ԆHH%oof3*T=VuzV$Br{JBo񄒈yJy֘kx+?t_ԟZ#g`ߥ75$&&D_K1xox_牂AWz&::HTJ&|"s QKsllc5ؿɸWN:9v~KA[3ԃݺ}>%HT\y)M͘;u?)I|H+t#.`v(dngvKtc຾p+l'3XzIτLۘU$ZƲ(>u/3|}I2?rK'!m F Anc~̊W`J{;eYۯFgM:jyxg|[`_❻M=BqӏLb^VK,J\i~sl8}g&꧙ =3ˡ\ȥ?K]0;sQ yU]7ϺooGKMJ>sbQVTJJV~jI' ܃+/,Eco-^}i/mocPAW&E~,/F8wۃp.,gL:LԳ辋F+H_ώڅr7!Icr \C5!IE$ܕ顜 TI'9iǘh/)6r5X]ic7gm`bOݠb\vIM&eZ5_n6fuŸp jПum <ri~_4Cg77x;eWT}{-\:q hd5eB1$a3PkdAw14%I.iumg$fAHi IHFqCd4m˘_`m9h&AZJL݆(!?a9==hCnCZAn3Mxcq2IpxU J9ٿ2khozNyi~r.fןP55o1FidF_kޞq[DԒIKB)UPrP af҂۱1h$)[%<ԯJ}ֹwG|voNr Tז8ـ\8.|I%LjXxUғxwoa-ƽńPp##N_}[(VV3ws3-q$*Vo'nY՗__@dy'ųF "ɨD(}A>H+\Uf)XxLsc1Y C?'Hip]:]<}]L:9 m[jD { U^cv6^S:͈~]m)GKl~;c.8ƼOa_/!pSH&?*CW3h8Ԭ39Gvho/]Og| ǫ/e ǭEGORO|)ao`5B&4,9noM4䉩/0' ͐7znJ-jwiAH-~&wJ/ή23g/eO)&~7GM9֏OcT{=[Vwʟ=T̸Td(:-3.3hy6tUS.] T翻xcV!7}#?1lOA+J ply&ybOK}~qCw15yv1嘚OƮY|y#2jt ƾ}.l6syf͚5xJb^"׏Sd4Ō{{ĕHE] (֣V5,Jq--y̑JNAAAnYWBDBE7>*ChH   zvl"  PIUږ8uZY'QDXPyVǪ[#ZnQ˰S(A<9X{9%r^JJ  pD%v>uerKSQ~CNh=, $gNrz/ b2{,4+KϵZs.ɘZ|:%`u7]AJu:vm$3gMb՛^ԅb(S~ل,Ǐ[kO{P-M&V3_4%.y.ȓ-7m[vaO@vhӡ/?J(|yMy3{yi7璕v^x){;$dvG =| 곈[{m}sY=sH̾깜UZ_qQjh1{q Kf !tB4C3*\r/-h7y]K!ϝW^-8_9Gk'޶u#%ڽ_G=!%yUIJ\K[؁ to!L/29(2s&tCN[o|~:s4?mM{L㋶<|.o 4%pƧRFbB ,!yRqVqTΠ{~BV WvAѝI=~kv@O!;wv< Sˊ|O[I9IMcB / BNsa#?gv瑄pkv;i)Yyvr},Os&.~7|ikPow;}zu_V2] ;c'IoBӚTƈB薇##H"l#@ jդ:=O"y 꾀+g!{ ;(>T4K ȿ>}#GgfQ7ZN Q,8szPUqVyZ> WeqIx\^;_2x,c'M?` ȳUϣB "#L:$ZEiCSTӕȹ8Psd=D$̯@*ywpO8 H X!dԀbD?>5&v\K^Xb|#>71wa|1ܧcʨNN՗JY4m|ATO|;i@klF/"SҀS^!7Cry(d J[%Lgbv$ʁEdNt#x`4.E= IDATW&6 }EPM%o*>=]0z0໬!,!}ք/Ph1<7.Cx/6fZojLӘ>~ ˇndS#["X_#flC; MԒ{܃[HX?e'8q&[;7vؓ;_TЄə6tvPEuJγ;u[iR\L*f\*24żz)YYj_n"7}Ȼg16^}ۻcw PMly&ybOKمDӦpx%2.2?ys5+16bD_FΰaطofΟ?ϬY[O)RZqqoUӖxo#wV* ' cp YdOߋnH^IgEJ   T!ղ`H  ͐.Oİ?8U!⤳"EAAٱ   B%Ui[N TV<6*ȗ̩WUnZ(yVǪ[#Zn1pS}  PJⱠ2[bKX}ֵ.oq k"VbgaKXz#Q\%<)dngkt0RfyU$*&fL{Ĕ$ymW0cv2}ʳӥ[W~sQPb{H<zе[7ijn'eLa;1qңWOz& gT<坨r'7вUG>4]EQHƨ{{Nz-є[Zo?O,oePio, {HBIGM BuoG E+#}Y8،|xj.=H]`X`GO)[慎n=  B~ Ez$NqHnK1-u}%ryB^>1lխ/: 6^L["%6Кi!ԧGcnhCoA rjOc1al{K̯~7^YakF Pr1[Cs77G(ӳyIÂ0M4h) @IYCgN"oRN f9apǾ`3YLTߞVLn|S.rR]0;sQ yUj'n2Fy8,)0NbW\_Y894?Z6c+!迍A_ 1ptuT?L|qlպ'0P3SϢ.Ir~o =G[4z/F_ æAצ!B>NǵRu@h ?e I3#' *mxN7ڄ{ PȠYƀ8Sy'(9 hyε&}0uo.n} .w$>Z½=r-RfJ\uRcD;0I)2mC3 g@YHBc(uiޝK“^ ]lE(7h1,1VH͂Q@fhۢї1=WPwvN3dm7X5|ë/=˿HQA9q;8$q9UV3ws3-q$*Vo'nY1e֯坦 *\ܸyRX*n Z$.^q8a :PsUqe`vgn1͍fŠQ0{ΊD 2n:MH&d@IX8NsNE"[|?;j HQ>eK -k,߮†KaJ'ԯ-%Vbmogߘ7 > _%:w%GTN_*>9653Izl"JxjzU:O@"\LD$gZDK'n YSo<< L)xNm!C4wu<]NԴ_W?MT\ o/<{׹hkQNOׂpz y"s AjQ9H*R+a}ިvolUB.Z򩉶[YWRp4if>_T\+ :\8UHJs̤m89K { PR~DAm+Xq(-B Mxj7 "eú>S6)I<DAȵӫVNƍȏtq坴 K8<6~[Pͳ8y{}x)z;.sCf$FI@7#]N~?rZhj$X.iC 6j1n_=D܅Ϝh!?jc:Ѐ潎€mg`t/AwpjandVQ2cm1ԓJY4;<;_M oŠK''d@[ R @QK쯮t'Ai/b;՝?ES-Xšf8HWF~2wx:K8>^}(^?n->/}ȖZ<~eH {IO7nxs)}!TCh4FmĮ^4 yb Lz |B2E3) Ubɿ3_N;-}%ϖ{]Iǿ735XFq,T`O4ˬ噰 ۞S\L*f\*24żz).];n.>F/UGGp 9cЊڿ w͖g'QD]]W;tGڹSS\g>So˗1/FMgذa۷rf3ϟg֬Y-A)A-z8EƋNS̸iK\Te"n= 1hL\Ϣע/ oQؒW>AAUJώ~%D$0}_t+ #   ܲٱ   B%Ui[L&iAJgFR6j`-BYUwnhm<8F-zNt`ornm~%r^JJ  pD%v>uerKSQ6%?a6Z7؞_L=?zoh>qrfWbYg$i0y. %Q:};Ҷ][y3 ,ovl BN1z)?_SlB D~OG-'=Eƈ|a}cx/T<ɖ y-y{H0'vmvЗl%S>^(dliӮ-m;bwG/dUղ{OJvB2GWʦdwKVrSyX&@&'<2]V9| 곈[{m}sY=sH̾깜UZ_z[v1j۱W뱪/.l:Rd~Կ $t##+۱gdv^@f(DnXNNB2CT/sJXF (ʵYc'0ދ굊+Әpa1~sXC T9y4j o`]XL!RJ:㫗gb>w|m3[#XrHSf<݃1-KG}܋q2MCRs'WjK8o(ɴnȴqD}-vQgO?yH;Rj]$6?\PJ8I| ti ;Sм; E8^wN7|"1τn{)u :r? Y? { LlO! &1I *%s ];6!R!][лzhM.|mK Ռ=12 820-x(`&4JƱVB 6gI[]V>@fǑSN3޿hmÕ]xPtg?rBjSX ^?anǺajY p+<)9@|L(dB;A[H5Vy.l<05{`N[y'RY<%8\i]|ք%O0?-~ *b VN>WϿnw|JƵ Dvt$MhZZC l`jP4Of42YW!WT=GapRT ٸ);&n@F3>Ei݅q]nІa |w(R'I&7%'qAfmAo(czr|/?Dl3ez+h?ϧXPS-:4ʥ4vK p$ RT:?;LRqwrl}_đ@߂4lO{ rbwܧ7`W|At4Mh=9(vv_ %5V)ȨQ˳yݼDdLjRy ?,'EY%!c NY&9G#T D5ꑮ#;J2erU6,Ka&h?waBk zrwEM342RPY(͇/Ryr6b8.STXRڑE2]FF<Iw-?uz$ϩ9Eb`~?t7ɈoEiO2Qɿ>KcYJd8FiǪBS$ < 8Xm(˫-7_G@C\a奼/'Lvswҷ.fA|"kZ˟Rx>F=vw*(.T HP,2RɤC %O- )Ȉ}[5GFCpi0>궭dVd0M4Ń [| Pٳ\^7Fs1_SAYS6lgX|RrbGI1]J~z|˵PL AktM:fdC<٧ ?$ + 1v|szA}m)KE3\vCPHJ~5*X+H yr,! | TI>_Z/Ux.޸o=d4e2vx ddZ~_I~xqAYBgYù7K8Oo)CPi8vϢSAIDI-& }x 5gNc;D%pbP * ?VZ KZ7 +kw&hF O8^y8@UAM>Wխ!" R *z b0tqlq egq]]:"/)H ϒ=~6D@B*y/s x06QqpnZjLӋ" *C߳\W:KY"?ou5<'Hb;w$MeMb"$&a4Rk ^riy|Е~) Ȝiwy<(O ԑpLDa"1Լpc r)1 ۠w=侶Puç&ߎkkPt6&Fn=/bZ) R)Ƴ'.Ss k)|?>&u&2[;A2{ʥ6侸) BRQvB92Ґn2!亘_]@f?(A4!~֖1\GtØﲆȲr [F`8 BiЗܸXb iŪ1Mce3.MMx,N/obI~5 47SKrn!aE2CǹX~O-*w^'l$sqJw}U*~'ֈƃ{:'Twz}   Twx,(Lni}*ꖃ.a!.}U半WlqvX%f9)QSQkXc7nl\/ko׷A ?A=ڭ+_ub+/^b}#1%oiEq nmt֕bc\]ߓ3ܙ/[%NgCՓ Ù1U'zc-[uIcPEdo>Ͼ_`GMp;U)~5Ұ}}K]_i8ǟCv qu>$Ǹ$1Co>* Kg>Nu>lc#Af܋iwQǿ{5Л4iH %+((*뫾H!4A:"&E@( K$yݛݹٹٝ:HIq ۏwG !"#块|gvŶe*ƾG%醏Z^}q y [Ӵq${0 -[^]x!_rw'鄥DγVM}W0P+lV}?1f0 ꦬ~ oS?{oh5Sٗ 5\5'2V5{Lgjc]yM?ގ oG=0G=IɩdM `L/;Wf~~^i--75@w㝶~}Q)A{>N M,[05׃vІ!lT%C:4zx,3aQmu P~Գ9%}8 2a_ȯV5 P IDAT㷟wE廯0f$4=MO^ %*VB٪$gy: Eh@|;ĂRښ&#σ8?b^C[aWdLcot胩A)~NQ:>IHcl64"jW4\=O@] BQY ʡ( ݸб؍ zc =;x;n%J|Lbm&s;TGrܗGS|Էʡ3Ziɤ+#xD'_?}kXvrTM'EF e|V'*6R*,)aD+pH$?j$W*'V5jG]Uиs&h(2TC 4 vE0S R +jDY]8D3r#39]kX2Xc#eg챢4+} H=ʗftܜX+kbV hgDa|y`I׉,MaHz:?ͬz DPi2-[Ʋeyop nzck"JM]9,:ё>m KK?Y xM0F$Yz:yB(kUl6#qgCK ? C- Z41G"wD|ed8, >٭P a׸UfAcS,]'scܳ HjadtPu#Gq/Eޔ1K8Xfa0uA 8&{$g6G61H:cE B9Qp=@{d,]c45 8̥++4mZ}12asFKg_M?`D+j">_r3opϚs{2ӯ7J-RWL|oc$60ч6XFs1+"OeW).L*f^*2]b^}M]tӧ/QN=J/ΘG?y٘`w p\my&\OKyzH[חcln<Gclʞ]ٰ'ȑ6l;wƉ'9sX`#0iż^:E^/|e^퉻,}6dIׄa| )Ϥhf- {ʙ+ϻ7@<AAAfUg2!X^?qqʀ9ƈ   ׬jl"  pa{|. ܨDyVcT<.G\JV4*c~I6'̨F.!Ez/f?d\\L<AA J\YQs2hw}wEzEؾI/FGe;]'w:w° ;=fey6I{[/}֕GI o}7^wAM޻mڶ]GkFaY+js͋:ӡc 1=d/gQ;R703Yhռ( ")zF7eskQ-%SOV 3c{㮒=ݞ6mr{ `Q\DMdY@s8 \[@VȌ6u79w_7+ߝA4'/9k!]sav}.}/H{?=+eΒQ&bCTۿ8C)ObT Ֆ'}OwQmσM5r.;gj[ 74EW8 dtOFYZ'}Vؿ Ho9i)_Pe+~ 3n ٓNiV"g<2z.$rrWfy ٴcHqJJ'w5GDkKٚ)V8cӯ[ef{KY,9)&]Ȉnúq m'ͦ3ۑkp5 p1㽱khlKH5!µ8IKǕ\w-8u(o !lY5Rp%B@jϾKP>N<؅xVEW݌3YoIGI{ }E#݅遄n8?z>_]w ^7hKWHbM½KO %&C6T![c-)22y].M` IMgMO?܅+7w"lZ;d؎>,_"xF3lH rz3;kUAꙃV7&c@FV'KFW5naVG Kg̃<5#I|g%'/|y5נ"ߐǎio5v2ϴy{o6ٛKҁä6i*y).s̃%j8 ^ RSV|Q4Xڇ|?;5K_+RoJŽ pf@Bnb/IOqw@fd.e|x7ciroBM%󙳘މ\ {6g%9A 5όJ2-|/6k%!5ejE` pf萔 cav35 /JFXKC`</+ GnMVoF%T:gR>ê2ljq+iВQ#J&%)ኈzrHv;Y#h!ɦW.VuN柩0x%ݳe][BQ0 +T捿lF+HF Aѭ&sيXD "ۦlFв=kx>ٌ} `ES~ЄyR~6lR8ѝ|Rij>ɫMPRo}9s]?H!+V[41ehyh͇?R ra0Υ H~蠃B3^HO R9=ۅf?En|ΧQF ( Y1_=}@;ӵGO ,cczI F>4ml"hVrGQŪE:ZzZϠ }nx ]̛_3꓾D^_Zq7ƌgWo1O^Mz#\k4]$=hv)ȈgDrz -W/U bEɺ-ͅ-#^r{_?Ky/YZ$~S7EE۲Mw(ԜY8FpnB)QFnK]88O{B/v%1cWPFU 17tRLH t0)̂TU0cxeDCSHGQr;9 c JZTO;Y/4V-3ݯZ1zj`e8Z:{+PN-LƫwLjnw#=ͧ3{k#FpժfY^Q8YiG0z8T\[=HЮd@2R uʂcGqF7%p! ݥT"-'(ȷDb/^n\/#!/OV˥,RO:kCsc- w PQg+!f2X05+]=0(>/V#Y\]8st֩F2ΟqrFg@~HP\ NOA*$Ӈ7q8d`S*L݃ب |4 :1? q˾1*y[0nfh$]ǑK$o*+׬a͚5Ywנ?d18کyP'y5Ҹq פj(e&yPFuR[{QɌУ', X #pjDЂ1?Vr^'s{w`6v]@^p/v{3 y.yG-c֑zR [Z}#Y?{S4.6!,r!(uǿR֗b=t ѵ   ]>nm%۰}x'yv/$c4BGXߤ:^OFx Jl-LQ@0?jCd~,&LOv}ؾ࿤!,!SZrWFWTRQ1<=69>zf_aUrJw~M__&"=%4bi/H'Hd>COFsg2w.1xW>s蠄/j*=_IqaR1R\̼\̤kGdf^.d M%i'~c̝;aO>ٛ#1l0vs;6'N0s̱F@-aҊytҋ^:O3*wY:ꏛə&^3I0Ki8)fق0שk4+H<+R\AAC." L`Ǫ #*N<+R\AA   ܠn؞|˂ 7*QU|OKH:M/ZJviUXpmDO\Q^zOAA@TʊjG;zerM7{! wC軐 ȋ]WU𼰜u\c7(۾#f1a ׍FƯԠnt ]<ǿ+|U$:3+Fة^I]ЧOIhdlv]>p<K7֥wʝD[:1lEdu_{<ˎ2U Jŵ6~3:xp>=8n_/꠿]|1Eb^?s‡ AS!8DbRFB]oe&#j#-RÃ:m;[J _H={#J[bۇ >ʺa\>~iz7\T l@BC9qy[8 `݄~zj#2po( _{`+refĔoy ,=뽨WhDc|#/j7֥oѨ P֪fiX1 B@QCC> ҪaddAQ̥WbjZ$s:n!XcM,)5'IHV5(N6(R<g{6j& Q gQO9TE7_G~c~߂*r LaCt).aKvړ=ҩ`j9ӑ/?d}á j\z•SI&"[jގDGʤ&gw*(9$mLo&)K'*$ @@wFO7S#E/42a0 Lx׾?҃/0ѡURMcӴ=|t?+\O 'j9afp&B O$<yB([u4/]$нhv HV#8=oqaXrrU R[sdP#yG^+b`6㊬iBwLTm|r}05(/i3j=XgG {ګuO'~(eMDn܉nt[ Zr ;Oѕuk{N<[c Sq+WPBXcKl7{̆ޡ:O< ׻ѾQ5~)IYذJѫWPl! ^)zDZ7uUVAΙdԣZP= %0o+QFO-gH-իguH$VGig@sxxZ/oNEu|ѝx_]'-wV5pmtxaYKu w!EL=Vff~e X@MTA(?Q|p07Ă/XG\J@;3' CϒrXҽѴjj̊|'_\^y|\+="71wE2^tDGw*,-?g56ךg1DBYge FVφA~Zhcɏ DR-RqX(?7At},[09qD͂2 !qYN(nǸgɑX8"7n6J%G^V}+Ͻ)c96㨚8^j``z [wt#IfqjRp=@{d,]c45 8̥++4mZ}12asFKg_M?`D+j">_r3opϚs{2 @i#Se⫏_cLB}ޔ[0㥮5?"z IDATH.6%g2/Hl`ʣmNcWW)EʘS\T̼Td*,3/3)ż)O_ z|_1ˑ틩~1p[NAՖg'QD^g;?u}9sipt9Ʀ {ތ9aÆsN۱l8q3g6j V륓^y]y_UўїlIxM`2L:V\lFޢ'2{SAAkV%+q-."! lucǪ ox  pͪ&   7' Jg8FR:zpedEӬ2k#zʌk\Q"j6y=C<ϵ>MN䟸AAAĕ5,kڟ~w|GZYY!ot ;=feyV̏=b>7MMń]o"p9雦1wڴmC^2׌²WX80uCbz<Ȕ_΢wn`"=gЪy+>yQERonʌg׸9&כ[LKãg]%e{<ڻ=mڶ&2D#\*Yi곀[q>?mnr:-$` 0o:yCW;i.cO^7tr'B2œ86 \2%*w_''n${'A& @3u5ym ܍h]͕Iˇog1hx/%|2@"=q䴊d]@zdMKA//[lqKȞtM~9s!=* (6WX̦GS T:8'_[քm,P/NaL=/1|~/3۳7X"0HbaMx7F0x&@F{QV؀ړO>ļkPocǴ7;gZZ_<=yem%aдz@9?HjcngxSc (Ca,Cn}7C8?Op_3 ! GJT$ ϋø;f3B`22>y~W㛱4F(FY\ۜǒGM ˆgFa%^Vg̞Ҝ-I0_YV'jI)xlQ: 9&kj'N:S@4l\ Z1=LkjJ+p p#Qp7۳_I8ΙTϰL;DzD{u~ԈIIJD""=@Njps3xHDUUg#L}E#^ql@זcv:Lz>JD6y' 49@C{nt \iaǥg;т)5lO6cg`sԆ4a_߿ et'T߻{jrEu3)0tŊrk=&t  =/B_GJ=AN:8>\&ɀw:.t?4,ӳ]hS'|`Tc0]tA@{1 KE%wcxx<ݴ?µFu@݃fH~F$p;rRI!V䜬 \2r %gDI7rE7/~ST-{ D~;oXB͙c*:&=Ji_>Knc%!Ư^S cn3Ig{=Վ$SN2?_I&|t: fAnpL<2!q)#(B;9 c JZTO;Y/4V-3ݯZ1zj`e8Z:{+PN-LƫwLjnw#=ͧ3{k#PUͲDŽp4Ӹaj%Cp Az uᑂ] ɀdrAU- 6) Εǎ8=ύn4#JCK+Dzɋ[Nq Po*_%|^GT'BQ0s*q5LKf'f]|_6C}C_PFF6 uq<Ssd? Y3~ בr'<K zOlH K2wX&Al_؅֒WHϫe`&u3C%:]"~SYf k֬a͚LM%soqN}m =ɫY/ƍCDN&Ue EQ6( 5Ƀ2;ߛOft50W?yedXO|+ЌT&܎X r<3Ь޻Ku ~&c}ݛɝM[u>Fc?4nðԓJ؟8?D\ܛ2Iw7uOW|~ Įx[OFk7HfOR۰}x'yv/$c4BGXߤ:^OFx Jl-LQ@0?jCd~,&LOv}ؾ࿤!,!SZrWFWTRQ1<=69>zf_aUrJw~M__&"=%4bi/H'Hd>COFsg2w.1xW>s蠄ء;_IqaR1R\̼\̤kGdf^.d M%i'~c̝;aO>ٛ#1l0vs;6'N0s̱F@-aҊytҋ^:O3*wY:ꏛə&^3I0Ki8)fق0שk4+H<+R\AAC." L`Ǫ #*N<+R\AA   ܠn؞|˂ 7*QU|OKH:M/ZJviUXpmDO\Q^zOAA퉫pT;,kڟn)вutل2vE#y];Hu,Šoڇs,0NR͍{qNզ#j0AʉFƯ0n^Ȩ旜 |:a).d}p ßE3VuSi)ΥE13֕nk:7/'gAn%H UJZ&3෨$1p;>1qq4`*SCobлnGw&E~LCH['8[A('Q2}8 ><ƺD\>[~\kYweaHbN\J&|__7>]Uꩍs}00AV%8ǯWn݌i~gcU"+Swv3l66`Gq+m'<^HCx;p@sgN ,EDxSQ\?zʁv mc RA(Q7лu;lh37v %3RrC{ҳGW:u_":2凬o8ADHԏxȬ AOM&=U3^xLͲLFoɏZ:JS%P֪fQ NLgQbh!C0 @C_| }UFO-uz5P"Sv,OēX= FHjAZ;QՑC"ϗӇoQ-3#72C1q, KLrK 9]kX2N-ݻ 3qs:nN,q513sx0|j\e#by)8ٌ<2H 0,J&taUk=RT 3#Gq/Ev$c9jf/AʙҀ7#cʘWXšg.啿`\YIiB@[0=QF|)c޺2u莴cS)gg/Ԕ<7g՗cg1l0ݫΜ9Ü9s&[AuYp}'xi܌}WIkmϣs?;TYs|Y5Pm}yUvܓ3o%PN'lF0;d<{;|SZ3✽H찘5jImO~R$4_DXU bjޢᣤ޺ěWki2rfĞ d=Ɵ$wd% ¿NLQװcNֽ\5ϼt/*3a<Y×2;U hD~%5a Wd}۲v t&UjK5 ˻+xkF;w}6/h*e' bmvNk'c?( %l@b; ^o࿨XmwZ9m-|;9q18ɚ~imzȘv<'(ldDOC >7n== w;:t 50C5͌1I8(̝-|S̡Eλ ":Lo1lG,Ob|vJP,ɹdލ6l N8NvPSzoll/B} EpcJw GA&5d Ϋ\g70 `mz/7Y^?m{) IDATIGx|4B GyHRZ%[8qehC}s㢰@Suqw:O HÑbs8IB:p ,є:a23=m; }AҘ脹 c6_r9)csZV輈mgv N8+V-fy{5K⼏NC{# Ռ+QX)0d$>u1.v ձ YKX\;.|k'#uįkBp ՘뜻y%T :8LMBD\;7߬T&@3“CHO'.+g>{DhT U_gfü~z_{5n7Hpq%"MyQd3rXdDPhv4?峅%x\ڥl ?*%h*H_HOCu5 ~G;I±LU.uDSPwEד`K}7nXR^FҲ.Jc1iՕ}Ϥ"(=J$2 4lhVc^~MHilH볌+y0.T4 P>f⛻߄tV©ޢMH0Uj9'M#,;`cNWQ,ܧV2كB6/ԋ+yOUsT6Dޏyjp'TPQhی0]F 2"YHَ+^aBMӊuH CNM{nK]LpoRg;4K5 mV˷pX_5Hηߠ$Nj2rfX#k{6_eT>u](:گCLE:DdFo +KC)n)Y9&Yj㿡fw5B׻)*BYQ3%}Lw2Z5xWy)Q5?E'4R5 5J9D~R:DpT$ 55b,Gis$f'nGGC|-w#fY#M^(y.qa17؏aj!Cd88l;kg|!LvT]`] {}N;x NUрaG3%8ͦ2# (7V*zڞIn#9Zjge чj r{<1`r~.\KS,lDV΄./bbT\NIgZǐCzN^࿪,!?_I[ApOUUt_؇NNs^LyM z*1:{i^]f:*./D[R@CnC;L@7Կ0pM ,ʮ2=%7:S]:.K1eDw>@ #L@&Inƥ|Ci͸fP| ]5kIIy?D/i-C^:OI= ߻c.&A >=QF|)qM4iG]b*y2LLcy[Fر6l{]OJJ gΜaΜ9-ˠ,8h> o<4n5qiFXT p1MY'kq7L#Za]ɚQNY"  "2 ? ehB^(TsDIgyJ   TΎMAAA* [;-PQY'=/#^hrմ]<7}F p߀h}+Ho+ZZ' W*Cwn9Ǘu)AAD'q(8G7vNe7J aNrNAʀ#6~[Z}8}We]ĻУWOz[*DU`"?ݑ0Ǝ̛6w$\=y {x=gJ@2Kw،!REٌ܃ݺѥ`;⾯msy|PwtJכfÈ9eqdiXhq.᝱7 ж'3hȝ`05:BC0 SS:=uZ2[a"{AekIhGO`tWYPw}{Lffcp@k<:~'FN@6asˋdw9D1:DڡئE4<-kFgBL:/@m/YSAUhN^qA?:gqgȺ0ʂʐpPԼ<A^ΤgVѠ5MUoUj|<]ϷV~x>GNgqkID~%Ȭph}HFߑvϐ<F:c| l޿W-~q ^ɼ6A1f,곂1~5DLZ8N|ƈmRi+*gMB-&hv83K xgKdoc]7_?NIHVq!]'8q5Ωkn޶NC0Fcx ƚnOuMV=/sӝ+ljXV܂uI#r@X?:u'  /0w.P0xlSϢLuEo,-p]įNtlO/"`èvQpPBw2sB}[z޼un %u~0&w26*UH"?S3/yͬWJDCz=8sYv ͝^/3nV0M3IhDy)S&WzZg$#er9AՐ$W P`ldP>y iR\fNpN/ۓMar]d JNy5aasKzԣ"ΪH2H5Ðlh_c7׮a^=$Dt0RZvtmKIbs1۰oeDhq*PdZ\ QD~3qQUeb|k \Eg!Dڎ>D'kT (g6Ŭ=ujK;wΠ v/>OJ\3[8d.7Tf̒9@ŕD˰lF Kx' Ȁꪛ3Oo޶'KP/ ſRlh~.>SotGqZK]$!Z;/ЂHW-T'y5-͆g[dK =So{^L`VmG,L在|-˩]Qwq]~$(g.jZf,2fv.\5{Oǽϑs|FrYcyeOx^jgYGDK 4'j $?#d;kv#}'1T`Nҧ[/Sd'})̂XӪ0)Y^:un4XRS\-EF Տt$RVFrhw۞;\ol<B!"DK`'d>!*gM1uSPc:c)'G=a5{TE5`j [5kb| ƿvbQ)5=X`~\ &GۣTAwY qX(YcozX@1m0 ۔ dW@18}Gp9'_kɘ+# HSk=i5ȽDF#y:˙tWFǏ:Hd{ Ng(A(.-i ?`K&^-Z 3ü%WҀ_i$k#x!HD~%{vLTogKK'{r|f^{AvQ,l%+NrC`d>@o1S]n|ςU"wnΓӾ,VNM͓܌KӲq͠jډΟ;k}sezymd{ N%Au^ P|&\{R|Ǽue\iǦ2LMS0_)yo,ի=5/cbذaݻWw=)))9s9sL./,8NӸttOC[4a c)Tw5e 5yXۼއl8f5_NAAAA ,x#! ߠc^ĭyZyEU^|*J:AAcAAA YViAJ?QF|)-]<7}F s]"ק\Z(6_I Ӕ   3"|a]t7At[liSc8#܄.i^ux BǛ:ѩEJUv"?3YhѬ{]/ =u/ y?J;׹%<Ң>;vl=_⑾hۮm:e[Iu$ly}Ӧ][v̸Y*'*lsHm=cUp0'#u.R&@ @ViIODBuR[4=4.\ǥȇl2;|6:&yRG~* 8("䩪HRѷ>JڳR4?K8g# T 3&.oe&*ms:Y1-'Ho O2O ƿEy> P0~wd\׎My0 ~+:$ ϰY O&~!9x!Wd}m%f`ъeĐ7?4\Syo؝FaMY#V!tOM:%{Y:H M|WN 3(K3~yo`ϬgcGtff킑iD>F|`cDVKqߘ;_ypR) gKA?!QH5kanopEbfd 1~5C8?Kp3 !7GM Y$ rH&&H ZJ%0a: Rٸ"oO:sۅXԼI bip4Igt,jn2夳O]L~yI|k'#uįkBpq%PJԋ$TAϸ~sJj2 P>YxrH7ċyjrv ތ{wU6_ݱe7^vq5 eu09%9,F2"ht; f1KS i3%$? d$,]ɀdN@r^ilH볌+{ucөЬFi4!Yr~5-%!=151U;CNZHȂȲtL%m}?@Ai?=oĩy݈8&xNT(;O{2Ӊlm̝òPqyY$"?ݒ2gt)`RU\kb`^Vv QI,YeB)w9^p)#aJ8yg:^Q2<13ߚ:u=VRzgw$7R!f\v3(n>vⵤun"qdw_!/u'S$ߞ1_k3eȗ aD&pH%"*g,Ĕ<7o8oԨ;aÆw^p̙3 ς8Of\JZ瑆mΉExӈVk-%΢*OiAAAWIq=x[ ? ehB^氐%΢*OiAAJ,   TP9eff BE%g(#D{e\Uӂwx<(: e<ĉ ˕mbs0[.ۯ~; IDATez =AAAny R1>K4)pMi8.phg}^߇ӧy[ѥL=z[,NT& _-nȼiywͫ^W'aOgLiRfiQ1d?Ws;]uw3aaD]dk՜NN .Sp(Dk}+X\e/!b 6q3F7o;ζRku)VK"&l嬉Sp^`]mng5p&bҔXW,sə͓twT@P0/ko\z`} xיІƺz jN݉({̝ $mYi荥eKK:p8Qˊ[.ie{do@sᚴg"Yˤ/Fpގ"w2sB}[72soI]_5 ɝ :iO~K|3k.:R";$_I dϲuߨo]C\4I@M@`$^0E0YIfr -Qa`͙_CX{sHbs1۰oeDhq* CBx_@LGTU$sWYxrH0)ą3;Yƥo1+?rOݫRΝ3߾#&݋ӻN?˦0RC;廖Pj!E9c5n)Ueq{rJOo'/HɈpeL\im6#p(hv\]Q]u/o/wF I.n\.E6!h)NjZ Ϙ8AH]$!hRlh~% .d06ێ"Y<'PFrNrԃ|uAA!˹.Rwq]~rԍD5v-3Z3Udg 'H9q>^ #emc9g묱o/d8/vJ-\һ\#r5-=7Ԝ2{f_asPU;IR4XRS\䔒jGKBN߄\v6ZFWzۓ,H50 Mg*":g?PK- rD&" @M"F>abYxbÈR HVjjM/GLWcHPF& Mg$(Rd÷ύkA׺Lٗ-)ūJ\RDt\s6v!׉P 7sPVe:-FHHDZ]ۙQ9;gi#Q{XpnTԵgQK;,լsMFN^Ğ%84ԅ;p2-~ dψF+gwA*FwzUʷ?D#?su*$&<6#u[sw)+OJ}֮eڵ]T纇t]a]9E:/C!4lPB0 :g\ fKJJrk Rsz)gȮcdߝ@CM 89 ɬܣ*J$SM^;Sm0یjX10Lo76eP-(3:bN#{\N ƉZ2H;b}*ԚdOZMF?r(Hncsr&)!mmF2Ȁ (UG܌ii$YBy='p!>A*1-i ?`K&^-Z 3ü%W)Ҁ_i$k#x!HD~%{vLTogKK'{r|f^{AvQ,l%+]rC`d>@o1S]n|ςU"wnΓsf_BhkwwMVu7Or3.?n>Jqxx֗8`;_N됿쏩=Lֽ0mT xWp2rOK֕qCw05O<;;w|䉿<۷o8﮻0v, ޽{uד™3g3g` 0ͧ8n+Ey\e! mN'Jӄaj' R"Pf7-^gyڞ   ;dR"εh97JOQ]J9es$AT{S‹٫K~i{  P1s5뭲vT2Ͼ   MI L\}z >wyyz&.sqӫYjJ+,iwU6 ɟbxQr'&}tycp |CܒU`=_a9q\ By9uDiֵMsqz Y8 $Cw6t4ው!n{ zRћD.0V@tכ ]9z>w4׭u1ӷhluL}yi`Dy޾7,+8!  z܋ r#_͂tW8^:!3 | -'Ã=).0EC0/:O?P.ŗ7n*W\Lϻ- G* ӲzKTiqE]Z92FfC8^V^ Z] wTÈzi7Mun&R^Ƽ pP#F3ğ3~{[|q ^ Z3{ZaEO>c߄+< joQ"I7Ym&!4KVþ[&1v/kX0Rxc2#].敹2U}-ܾ7yl|en/-|HqTirˣ ]ܼJ9>L\Ԡ ,k7gAp ^Wxs9b?8bb6}FS2iCj:gsKzBP@p+֗s8^o|o Ӟ0K^5# ?~xyIOclpaՉd 7<+\\A%@+4;6s^)-~&wr8:`UUYɹHC2x3Aw›oŔ^,_dM"};} .%$x5^ۂc-d{j)Vk9+ ΞZGZi'qg(ZeDFU!ag|؃I|ɗMwS?ah'4, ^~[:W|qao;yY{c֟m*:KmyrLyfҿ]t$zh HfN{O</zǼcOLk&؇U? ^w@/b)7B^]w֎["5>uOǞ/'6zMf3`R۞.5L~m  SKA_z,qũD2qwt"]HX oC9  ٰz 5Y) du-h޼~J:oC!U nK]1uFFԸKjrj䨛){sҹ~ xs=gk.kе |< l@g,ƫX>{)!zky-w ~ K]r/zq{rWМ;,xn~8sMf9EQ:?HJ9)ϪuMfp ĥ%^OP[ Dzl1Ur2<{bեw.άѯVoys|;*u}S~cE-= KVO$ ~܄K2 Zq#yFςBM#(EYxq+7}UlqQw;SnAJK/(J蕈D/K-yx] ]}$sZv^˛hbxa}E#Ty؅ W|5Nk ZPA 1Ũx+ Tu )>8?;5zξ_ޔBUjPo//XFiR9V@ÑwMw]Z%goޕdђaĜL$sؖRJer@PUj]?6@?X;O/Y> xBe+jZ*[w%l$yĊeN&_~vѣ"r!;J9]dA!/#/p9\2Qvy6FcG#l<ݐNm‘&Lt9*g BR \s%Yd8oՖzC] !d\y_~ zl{7OM `FaQɠ&ojz/jƳ!D2Ӵsk>Z#^-Of*24Rp9xg\NG.r0P>R m|?bQ<ܿZp1"{re<P|Q2x],UƯMhPKΩpW[Yp .^ 15>-3xBViYjiE+^Ilc4w`̵!Qk{LgRFwx?f#ѪFfB6'' A7dס(uڿohKxWFp'ʼ&WA* _bhrYb'|'6>͸t״. T o fڸD^F P uWƎŰaػwoSRR8s sy D-s5gqO׀0gqkNWsV0EvA*(# >@m%/<9ɋXA_>4)%R_rfKԚ?A$k#n{]n+ ¿j%>>EQp?t:jBj| *f%Ր[`Ww8Q'  5jݻWiii8櫪JVViii4m {y[q8_7w -wզIAAߦk׮lٲ7VMҵkWp϶X\i`+L+$5x}wy| S*^+  E)qyzN vNG:"%5ZNY{O=T2OZד;O}%AAA)qKOOOHN[0VޚYzjRkJw9Zhz p3ӂ   A\qwgz\toX"˾/']7pqַ67<rM  &pz3_j| <_/h+$tKwq*yh;wAqzpz   fjJzϵy wL S^[ߠgB-3kv,7(r%0۷גJ`qmV4_V*cGVnb٪Ղ]*뉄z&.lcke+zϵ2ZX;UB(_QO}'ڟsjehkk!n% qpw0E"s qS+'WVj.?_\JAy[*~$cP vOTSոЖϺվ62Uy+!jgoHwq:^5vke[k_/ iЯm{"TZ3T\]ߖhk697_̨:7ZmT}SgTdUvZo~2R+qBkcsVߢU.jU/:vZۺ-B\Y rDK~1`A66WQkkt$=b핫4r>m^3܎VF~lhJ9{pn5lg\dn](ᓕm,#[*9wD5+f6]~J\mΨf~vk 8oِ ig!p%TN9ֵ qV9vZzk;B\kN4NϿ vgB PN/A WBXd-q"u:=R7ĵVNʛVY͆lh[ p3{ 8gf+/* ;A dwDvJ[ym.@rg+WEG1fǙ}uRz.GNowfJUXr{̉ W_ w9qJ[oYp) 2\k|gXpNEm+#[.eV9m7~ ڷRa[ c.tDwk.{BAS꘦[.IDAT?csvn:μOLpsD9q+{fTy-Op!^{#|sxᮀ-o-kc_V3C*N_tE$ ܏,\~2zC8@:zbk"DI@a"J J@Gu3*Zؙ@)R4! (3 -Ŋ$,9Yx,f0a$a+E\.7u. /ְ:s9+Y.'`ǀq \Ģ N-ʁȉT}ttZhc.<&(&QH@,I1`耈C,|-ӹxx#! z;@x͞c!80./FPp( /j4.q wmJ ،htq`4&A1#i6Sc+] ٮuh30%q-XяR@PG=졊L@f9C88KlyDtл}O.< GE 1鯩nt$(!jzN `@4}d>S:)c/ZAW:H 4T"| (1ZxD h z &&cˎٮW6Wȷ3)'娅t֭c(X/[:bcf8/WNV ZjK?i@֢ pP "3,l oꮈk\WgQ 8Sa?Xbah'YtЄ:b";UKZl q<~a6qP@th$}082V~6x:/4c"q%+ܾ0=pQֿ^E,a k,=(G+gt̂?@.{do2עÒ-X [ 1zIvp jIeW0KshGuJveG ep ćW)gRT J- q2 _slsF`EC uADڠT2(eg0D}@cg Db toGvЅ7v`TxV#Q@UwY=saH ^Pze0PxTy`-U@`5}tMtGY [ VV5& *G} |ZeޠTІ6z@ L{اJ o(*SV~Z%$kd ` g 8qdqyQ Xo(X(JV8rvAI0P vQ 3xp( ;-نt 9 Bȍ 9#ka:M0 MMiH h՗dXnXЉwc TVPHU@Ttoq tUIbepk1x۵n+57T `:?ݶ\dA} Ǘee/ ԊMI(g  5P- a)$A9 Ph}WǠMIfja~ld (ybU ` ː հ p $MGK yxW!weHQh0`IYUȑšT+G^6`9'*isE@sMxhT0EyuWG/i`rpɇ` e}nu{%JXd wf pmAU`:?45@T%y ꠣl Ve #je؉ٔK ~b" y;EɥƇ/" _i3ZoZK p pd (r5a7%9i0 # +xA֩q+gTJ~4-h)JE:UXV4 iYПJ,'zx1J8cu']ѵsQ p!Pd` P-pq XK@VeA*m - ]}1-&V@6]@Ѡ3#vAPbu+JNPR=T]V}XZ\^`b=d]f}hjl-@וr-J}|׶u]dػq\׀Ԃ׏ ؛A؈}ٻAטm ң-Saٛڬd -еm{reۮ׾M#饪4}KɍwA$]}؝ڽ=]}-MEAꍲ2+~뛾쟎a`,bn͎즎+80P0=.츾KqԳn/G C .#.0W@S !p4ʠ4LZo/o+@9^3$o$o3@?50_QI/@6!?%'4ZK|0oQ`ȡ~N0; i[1omːN _:e5@MI<>ް" <Bp/0u\/ | O¿o o__1a<?_oސ!/<ț7>.d@C_hE4j/7vE$~)UdK1eΤYӦYV RZpj.)Hɧ ^[c TMaŎ%[&9wthQ$89L0f}uwI&vd7OJ.4.m~sɸI%[N;/ $\B.dV[c <!hlXijD\ 9"Gb>$,˸bHP T FN %03i(4L4U%&\ibD _h0;h2S05P1ߜRΔR/ӌ[4F NPdI5S+;'4A'KPUm8 3{GmǛ4]"X$E @p$eF ZA/=lfEv\rͲ%euZ6%Qf`!II : /%pi5e)`q۝Zl03`M]S;0~4yM@hK.xbr@H_%kd~ Z ֺcUzi.\:j5aYkᅗXLrxƼ~ⱆb:fΑi;,{49WHe`,mʆ\x؆ n̙~Im'ibV:t|TO购QFt4I~`/vOp=ISzrw.q^ogݧ`[zy[8}#S*_;uΗϵLm?&^} wc9FUyDR kz+X{{ _KȻ݄ Ub6ƒN[\wDKSg"p, T`J#\ $7Vl;HRcr-Z,Q6 bP2̃3gYІB(8)X!cYAxu $>A$$S|F O:ҵkۯq6єk0({y[ć5a b25Rr-yyJD);D΍x_9)qL6)O܈6V=t~Ma+ 羢 *\=IwxT2Ɏx.{^:A Urx"XhP\#Dt4"娨lO2w-O !&g ј1kOԘ9`^9Ӎ6G@ҐXVuLHYkc^-N-_'Ƹ񡒟HA!e!Ei~*F,*:m*,a ;tHĩt+a3zc`Z4b6m G[CՎ6tΈF*&COٶZU`ɪ;ܙ%,27Vu~-%"K(yvm'Kդ Uo.{MIBGI]Ӱ[6^V̰+/}?9ȦX ۲Ҽa^IDHWpZ6S=S/抱U$yqm|cX;q}c YC&r|d$'YKfrd(GYSro|&:P|n-᫟Ӄӆ̞J7#5Km3׼1%h&X+s~ 7%('_3DžwyWgﯧm3&k:bcP ׶Ҡ&U˻Gp6 8YY&v}ld'[fv]l,wuW9kRms wňOLL渉gnIF7a]5q_s h٣vfp | '>x+` g8MMp35Ն8}n['.f>$_~JxǑd|2wwGK{#ˑwʡsT]WyӊġX&Gzs$Si~`9=o!{~v]kg{v]s{!R?{{Cw'|>x7\y,GR~r<.쓧|-yg^|="mIyӟ^w??$<@$Hyz~}IO瀇ûbx8=+?3B!Lk@3@ @P1H9&$B*dS0TBӂQH'B( Q9_0 A1sA$DCЈ0 H>ӽXHF,A8A| 00ahxEQ QyqEIDhNtHCat]Q|4EF`|ak4l?edF| 0? xDCx$,8xH>0.|G]!x0GpȒx@H{" 8H|08@ m HD|D|xVh"Ԉ 55Ј1m tE:aMIZ(W)P>ȤMhQɒ(ʣJEeɡFdJ˲xNO|M=*΍0 `ʼKKFCh!X(\LԈX5@v:C$4Ql ć 2ˬHݰ"!O|-Q|@I܍k)  J۸EMJMK|` Ň5Rlݘ.|HQ_!۬*SRv: K>lL LCp"пdTLhhݗ3Rڬ@%$t3=(R|@PQFuT|h#L ' Α 0NFTΨN RtJ$͎N( OUΰRT]MU=Z-  23>H02%h% 31@V|VhS?PAPA-CET?7@Ȗ<HzW =zLmɗJ@-Ji80$0J|-5ȉhOGS@"ʎ VhXV|"}Y[Y YE8CHV}V4VccX8 C<9Ҧ}Z͂C8:`# W M1ZUZO8Z"QTG4 cXDۺDЀTL[I옏yU,Sdl!hhK@z9XUɐELRg9܅!}eHhQQh5u?V ]h1pO$$Z T PSx@#Xݨ%^V`>䭱. _c^ے- hE}__3^_KEMUCFJ_^`=-fn`l 8pa) M"vCaVac6a~ Vyl=a b_!b ֕>b&nb'G'&b~<$d=.0Xb4CU-c5.&pX\[elb,<VPU``P*jXDFi>-BO>؆kLJ&kdJ6N?SV>ecWvexGx4@T;[n ,.?.?֢AZ6_@YeCćUmU`d4GINB([Zax;&Uc#e[ccV~e[|vXXnͣC)h4/:C2H$U fc.Zf%TC6tC8|:$h2$dl>D( CPDF%+%ICVK,\HЎ 8.:p\TTEVEXEZJnT^\-`Z]vi|(clddelFÅmthG,AV kd6tDkPpj|FFЁz#D6Ƽ >Ƈq,G"llTPFGuVcsy0se ZpW^PZ+mvniG V`G?R$``ZX`WxVEݞ.nVmsmFo8y *jn1Z\h nT_m~Vj`ifml|QQ`]K$X2 Kh`III) 'QW\F`JʽxktnXshx(xp~ʨ OK g4K^r\ьmtA8qa%K\c\˦|Q$َJmq^Y%vYt[pc l;(TLla&I'(WiHU,X7`MkuVMޤO$:=L NTQU-OX?A_N ΢$soprٔw ׈k)g )"!!b0Bt0.جZ$~"OA|Zdyf0[8eApUb\8@Zʄ5W9|ZaD)Ԕt1XO5aVel-\#9 6ɵ&b+0,vy#*,p.9XLmjZ#@d'uQPn*l xipV0x ʐ9܀x+GfT*Hֳ씲@#yy?A49,HZ kdm#c[kF[>jةr͍@I-b:54LSOԘF0H9>SKdEXB/ 4 >q$pLYB"1-!C` cD hK (spbDX|,ɅN%%/N/<K+Iz =\9pb@);۬֔)d%;#ꙋ$#0+3-3S 6|ă ͬ> :Pm MaRM8%ꍐdzϞH:ZX) i@6+ZfN?v_@29N,^:\,N/>ހ2d(hO9 M!opϻ&^r(cP\&WKrNݦDf5׀ēay '}ȘYз a(fx#J#y~9W  0A?OWz fOӉ#xlИI8l=x;H( ? 2J Fɒq,B=7 `)D[?!!̂_3F'坢@б4pw`&e o.Y DP$a g\"C?Gy/Иv1e85)zXt_v 3 >1ph`8\! (3 ,4Ffq$0\h@ (pSԁF8>Xq V-3h0ߖ?nF7J'ר/1k@Qƒm! v|BTiG-s,$94*VQu|H BJ"mb:KH @ |XM 6!'HBDh94~Z!I,zGЀ@(1 a_RjR$j&@ZRa,hmt!`O,s?PN)JcSRk"8xD @ЂkTҿ4k-U6u0Ê۩cm/#>gDḆCtHqI{^#Ss.vO'ըG,@P~Tns% k T;)JǬ=&XpjIgǞFpCBdDd TS=H(1Tv%<d*YYc"0`IP=e/eFIC;TK]ڛ\z%E %`.6T׳!X TSZd98`[TȊ Ren&TX:OpZ[$IzH&FR$k_&jlr= &n b$7b@A @ 1Y4ao2ւLX[sMqNe}Rjginjj]A&z'gvpAqb%bd@|'~g <[~{:P}'vz&}@},p>z.)$ >@$RB}hHYqP4n$@_Rb(>0B <@OLI(@R%@(4^H@NՒRi (@P0G,P[ (ei='z*gJ~R$ |,~ (h*jJx} 4 1ND1A(p<+Cj|&\j*6*>'_ +l(8Iڱ&j_(CHȥ4k9AoĀc*A|5A:Sflf@e9$@0b%ilz,,TQHl|@pφv@02ң&2̖Af+؊-يD,P ^Dڶؖ-ۥꩫMmA@E0BPܒ, Tt" D HAzx͊[ج DJhДlze\ҒD.\d]`D^14֭ҫx$wxG| />HGn>*/R*S?Iګ*@.TPnР`,%/>&iDJϒVo* qnGm,Ā!Fpft-gkM ּW^dp JpEi?m:@5#ă(ȩJ)k𫦫 *:yf.(w/*k2.VH<+ oQP=!$Кc*"c9]&'Ғ-;/#[ y"+2,#?rh((2d9 #?2<4%ƀ"Ԋ"or'""#S)r$"#,{-k"wTy2(2r&/20S02%L$";3132CV4"YI@x"|5:3;;3<;7<׳=+"}ٗ;=Sw,2?7"BM :t@?4DsAs;;4<d4GјutF4II4JG4KK4LǴL4M״MtIo4N4OsN4PktP5QO4FgQJg4 B?<P75U_5VgVouO/5WsWQ5YtXtRYgU* Q!5JP5uM55`V`wua4ava'vIP+6dGdO6e4cWK_bcbkvG;v?x6g6iihvG]jkhPP#4nmnodӶj7X Xl+voitsusttp#7d7V 'qft0'4ww57w Au:@O vӴz3{r+O3w\utjg|o6f'}f6wO7Qh )htyv'r4^(+%l%&đQu đ)h8 4h?lin{tx?i)g)8i5V)8_'CRy?>hd@Xi,їi ח@y@ׂ À_u_5>MMR-39>z47 hzKIkjJtj}2Ntz8p,4O:;z٪Ou,te7stvk-I㺮{yx?jG{đ7tBX @,( k-+Jgwz;5dO(;!kn:U:U'z (Ӵ7w$|kˑ", <<[LJ{?`l? #QH4| CFx?hy7|Fw4Q=QGMSƇygt{,I>77<ģ~fx!BK leA@'A… ёp, !1x~kӀɃE@IHR#C<%RTQ'O0+Mt)yplhàV k\sֵ{({# c"V/H37$p?#BAqb͛7C./ѣE'GLh6@NeOBf;'ձZx;wd@֔;Ș^ f~8ENF mܺ IN<Q?Q *@A|"N.S'F䀓f @xC=@1e@kAL.=\`EDɂS` F~nlE!"4 (il0+.0!ʱ bh"$(~S̃8G:Dpȩ(DH(o>HSЋ0쇒2 NA& ZA Xp $)Q?=o)L[NRUWp"=++`t0@&R3Zk}{@"Ö=/n64&KC[>$@yݗ~7/W >.r݃ށ9G ͘= dM&$9pR$C,)l]>sgMYfhhTfy騥c^íy:k첽kTp/}oA{ +pT|v|_FzIFp"H`KW}~3 OuKrdh w߅x@,Qj-@ou'gݽCً?5Sڏ .7KQ bAlBB:[A@gzPW%] [\>hm>Ā wh#i{; eȝ~ԁNvNfpn HuJxFP$.!" h"sXxO.; X#wTƁq WN$pgP=#_8G2"7B.$X(ƽ]2cQ M/X 3 >`hyF2)4YNf.B́ b`]6}@ |i(c6.lB >쭆yqz0mv#@sD <],U8)Mj&CxC|p\^O-E-Fu4]AmrwVT ]hCQG=MnJ4:gDIC8lA9 Rԅ@, e(AX+  qo|S*UD 8JE F2cvK3&dO?bB(|`P $azh5I^ԡd7dViGX 6:MgZhIjԽ5.]jmbہvqzGWv1PV!Z`5 ɂq]zPM&) V{Bg  0It^ Uj5a:DIkVc.oQ=[3.%.rc` 12{!j~{UmgS?t x.`ŕs VAJċXĢAV$jpКd"`b,c&'C."XX\0b0o bxnBnPcJЙcNG@"aFf&hl8 b `d0cH0!~0X(/p !PXgp Gm,I "P0!N]ABb! #i$ȢF pEm"_'a06$0.xې$aPG  @D쳄wqzTsa`dT̜񗙮etѢ dIB*6$' 2yٔAyxS۸z}I3C<P?^Aj Է<`%~.΋T5_dy t9ƀ)G|HvDYф_bUF6i[3j~:xCjZ :ֹ<HPBfH`>%PrsC~?fKs%hZ'b Zk\u ;.Dv$)v㐧6ɡ(ysJw鰫~<c P;$8 `5V5#D47 $|9 TJrK}ȭ~ۼ.E3`? Xa<@e?\JAD~4⁃/t|$-8Up \%(E<}%h+A]`ڽ7޽| $ c\8o?a;XC ~;@/Q/l\J\3ZGgP%YϠI3Aiauw b?jl?o'iۻ/ۿ?` $_< &矀g (^iO<hpH|kPჱ4S8+&A =hԁp@c,-]'tNIT1ZA3 >TRw 1v]>P0{rv`xi;Ǭ!1' €hN &Ґ(05 G$0+Q"؀$KAk?\PB B88Gk8@@"H^XcyD xl[.ZGtH(F/:@ yqB,tmHN9ē8 5L3K6!<?Mvfu-lŪR +zsXJ͜9/ 'E3Ξ㋟MyONoyz袏N`MhSz뮿6{tN;麯;1zN|{ެ(S]Ь_}=;h&>_NQO$NsO p*p\ȿBp%@_R)D)WɞBj _? p.! ahp!5>̴\C>~ա YH(e>xA,V-01 !h1Q/O ?41/0,A@3 @T}9##U8ﵐ +@> r̟(` @(` Ĥ>QҔ $'NC C( OR ``сL$WՏ>2 pͻ% x " H6Mo"h0mI !)-P 3Iq<}ʄ @ǎydD{)2 |(oP= {;"!TĻ-/;`w.x;m`e?&Cފk\e-@jp1IMnBZ6ҕ.rK?0 ##GP;,<8V\R>Sks0⣺ztlн{]]##~|,X淓F^CDXA *ANFxvӛ'yg= IL|e8M?|Dg4d>" !i C&Cy-G?mLC;Ɏ}h<?! T0hd#G\}2qXҲA&77VA1tzڮT}atMmzF?9!}rxE0WN K5m|[ΏZc_x'Ixb 8kz$Uvի_+ZǦ-nytb/| A_5ח(KD}ZպVvn Xy39Z7&&nv_c8@bq&</;;NYY?g%_?=46,@. s#p3G&g+1[Sۭ^i~ƴ_qJy E>˟ƐW9 =s'wuy7jjP?'xW{t`老u8yd:yhvz P ?h9A7@ˀ== 6 Ѐ %j:SyրKƂ炦#3D E8  Ѡo؆AK8~各lWyQ7`pqD^h7F `U ܀ ` :^(vV= PqG]_tdGx?'G r4cHiN@Hq(t{8~yN ~`uKI J` d&MX]ް ڠy&Ix^-PK$KdK?]L CjV=qLɴL]P:Q p P.` F`;OO!MdMkO肏6 gVH@ u㧋A8d]Q先H^H^]#S ` ` XHjWQZj#R 8@2.SVS= U2/ BUVUvlEZ%džn膼nXiH% )&e\JV^V]6= hހZSz$9QFڨ15:VK=. #5]8]Р4 Gْ ҠPfj_h Q`p`A2l7#;r#qeql~:ĖB@ɗ=J@?J J !ڇVo y yOڪxfpppqWq?ušYf5c+Ȣt*qX3 B BS.gt'tںh @:꨼wɇqjpoua Q W(X&(c^h0w7*wq1|gw6wo?10 \yn xؓ:\^ah?Iw 1 HĕL(L)dNMMD/G4k @Y9rIהMSu U \][\i|7iF啔G_ef[? 0RIy @\1#aYl^TJTBr/zkIb &`@f ,S]RҌ;QUWUԜT|:%&hˑYcLʚA.HX|<  xExS,#f)g\ZZ<`k`cURBkbb(!]\ |C]+^ _ }@Q4+5#V-&,~a0a[au%:2HLg~M4j8:]wR_$]LXGP`Jeb:_I Rʐ 1֥WZCofhJAh|g 1,QwMNR..bgnW#=oucUq4iNQUݭXM:9m| e~8Z_f|k53<`"&gmFmi%/$LBn2 DPqR* C$q q,nF "&Mr%{rr9K.tt47/7Av,B<TNt/ק+KrҽyvJIzGF8~i?/>Xn2,2l.:nx{Bz|aE@c.J,L+;B~z1郮 t[5s|Q}kyN> ޿DN섎ؿRȮ.@#^Ӿ=׎ퟣi^N#eCBQϑQa=$7jg7p#~'H/3| eM|h3  g&jmG11 s79e%_?'iT(?d/O^2/*_6o8=qHh0B MB9LF;5dS6z/XisjKJd51KED q Tp xǢ|UTU^pUVNh* .l(*Qm4K0 ś/vX8{ZP(oT.Af%/@2KQ ё Y$h ˒ Vʋ/n~\4x38[̝3l}cRD][(+9w)y"UU~]PANҊj*ci52|zC]#jd $j!23< 0d@F !T# @mExOp R>SLHH۱~~ xXXҸR43=Ij'T*4b*?|0h 2<IխU .$` WA74(ZԜȡ>cIvҠ:3ЃC:[N$JZtZVf3%(q)\Zxx x`4S/vR3ԙe!HQc- WC #L`~TeA4LĜ -(@EW a;#h>pVLB z&#gKWD'5jk‡m59S8M 6ю RL<;!vֈ_ߕ|D~䦻H93)!>Q}%~xCl\6SxD29ҕ|%6 PA91sÛt.;q&,3Pn)ӟ 3i3g>sL7Ntu%<+>ÏFaQpT0'HURuGQE]YQ^ )BR%PLҳGEjRUj͚MMӒCF9>TĪjI) }^x:VfLO4Ёh@+O뤤*<|C0s5:bҰW~ ` u3ªKJ>(0]"He YYF4\\z$+́ZUr8AҔ4`m,Sbю A+yV *R{ wu4p زuEdWYvWJ4s =h+:Zר [( ?(wU[* X P^y!2l)Grܶ(5ǜ |EX**vAh E+ H8<oNs& C04Dkx@T~( YɉA `v!J-w ׫v03zDCj-E_tcX٠nje.@K\ &0gq 5$ڱ qk`ccF74'(1l6Q^ʌ@N{zl7 $"Jf<üj/`167hFG>^4#5=܋|4%p-ұNT{UO8JЫ%t a t7!]  k4!iPb=b?@p8r>p6 wuy]]k·VfOEͩf>cψƶ܏h0:{͔sYOXd},!G @p3(]BTBPfQ|DqOB߳#- $֒ݏ]=G˛@4>lJTts)mo1iGLWm;cZXnTRա;AȾ87%ƒac^ke+_{nzO@I"rMK>}t-g]2ǹ}3%wg8=g8C=ku˯;=0=|Y-+/;ux>"0@sH0>JK{,b y [ҩAa[##q+}9[ӊs[3r3i*@}P=|ؙڹٝA0Al ;s؆m~s)|?ۆ=:@H $  "")TCCD,  &B"!B!B«B,B: 1$:k:H@g2:#g-6r#̨.eL- O pxRR9P ђ.,( P:-rںl.隙ENs#Ї0 "5~ &u+$Kʚ'pRPQӁ(QxMQ,/r /ZJ8P30#n(@- o0 (>0.0REeTЂQH8ObeUO R0E͒`;1Z11Ӝ(2>y-2*sZ X2"322`TU_ո˱8cMebU6MSF;q@¬QÔ@AՅ@]bЅnCJg!0y-LЀ " N،TUնĤ^4$5X PRXhQ)b\. PG`5WmEY 3qmr # =smz[^X]Z| f) -(2`̂LjxRhXxTГ 882m a͸׈b2z!9Qݸ5 [qNrZ ډ:AӦ$B:WڝS0SP30f@`.P4Iطu<ᑽs kBɒ-Y^W)ݣ:݁83P?a] ]#L }>پ!9Ӆi?igY 6 F9\ ?|V n+_U7E_v=LWgw4ZЫͥ%_ !P^^KXLBPQc 4؜ʉb ѹұaۚ!*VTћ1/fa7}am=5qޱa,yDa DE'.cd 0S` 1 S %JRD+2Yl r"3N(*:E " YXf"Xb  \92mT# ߕ6Fx`'vc7hxf=wA   9 Ho} &pNN' *Ҁ{w 4 `}`q`~V`(!|,먟sb;LJy~l`` 80,lXJa4D)}0K:HQRXbayqlYiXSo"iSΈ.XZt6Ax@h2ǒ"M5hH<JEr٥_Y$bk͸[x#p0zw9\(>(SK-/Ë6K-O0i? >@:h?+SK,*(*j&hJJR鬖ꨀ:*K )A8UYP( IQRpfv[؆YczX ohcM6cMikZ㍽cfߥ nְ#Yq{gh+O-M?)P-M-OY~ҼJk8 h?%sr+C'ҟL,<#+ ۵_K薹nI7ͼ[9ؘ/ik.3;ˠ2s/nSŏ_Ơُ2$#IfiJg1L@3;ݫ̮_>Szn=b#_GfӆvmjoiL9kw&g֓8x&aLUM08**b/ZW/+ 4hÁc@%ɢɲW$ [B 9O]cX {xݖ1M,{;f/(}v6TtA7 ]g ece]SRX@j<\qhĢcW.a`9jݕN/Ť0AC^`BuP! ABy1$N ISI(`ZjKv%<_@6LP @d 0F<xW0/h 5< p"׽d~abr tL_gL%(E# 7A1'!WP# թb#|W ͂*76׉ ݆ۏ X)H @01!|?7"[yfĕdɖ_ܝ__ A`y@ 9AH |KD2,ވ 5z`   ! 6BNӅ`J!ڠJ` raVbY!,-=-Uߌ ӕꡆaH GjTIbMɡ .I5"hZU,YUZa4]}Zaa"q%P^hyx}&Eb}aB{W}ٗY{ڀB ,pE}A9Bߡ"*"~[mzɑbcczaDYMY]Ym@Hz @l ^?AF\cf6 .߷y!"yICDNEHA|@ZF=GNC-\?C DHA!a7ظX8*8[?9!: $RI\¥dÙRd?d?c@$LdL֜qN-AeFQ]|a֙\VT^3>c445b$W^->p^=dYbb`J%A.FcOPYg Z&aB 12e+x_tau %D&A_gkk&5q( MNpUd !rrs!x&Х`w$bfA},J|fptgG}gBjhu:iF'2h[gDփ !s6l~Z肶XhVIa, mx&aaouM~kkn(N! >!8VI1bpZfyiF&^[ـH)\)] 0@ٝ!(%-)a,oDizpX%efz6(0]4R#`@~@4A `D֩i>))(ƓơV py夣j)OeP:Jjz#>&UDD | Qnkg* *@Қ 7Mx6VxrpYdc~E&+k瘮(G$KìڭeF̕hQ,@HljOѽЋN0TXޠM>#d%,QJfA%S2HRkAXهI %Pk:-ƺиH΋'a-maj|-t֤bXlnЙ͢ڪee/[> \ce90`Biة#(PŁ"nrJ"j`H7̪f-ȾC a 1u~Ie 2Hh^g^J)Re`bEc gEFRõ,D N FEkmerDRf f'2vqoA o\.CHouO;|^/ha>gh^c6岋4/ƈ苉KnHLn؋9Knh.υ /Ef{nuƲF646J1G*a00 #6l:g;c.ao~7|s9@H|I*؇-l#(Ȩ 11ش1XB(,̂~"A豄R!iF r!{!'r(%R@8@LH'B[Fh@H2++Y'\ՕC xV?fu@X+<Z DV99h@1A3gs b)@GfA6["}@@X#ę Ck3@=*abH#Cyrqhh|#F G4S YsGgjXqF Y-F@ H|@W(EeX @,(V35ڡZGYPC[Gz2Zݦ歳D h%S)@F\˵=0ru6t @r@( @NN 44=dE<40ÙS[lB-dd FdjszAT< 6d{+j}iq3hCr=i $] zo9!dpXp:4ZKS|YTSŇ@+#Nb@HAhFDe\F?#;_g4{?<Xx=v>k@B|~ @Aq9><]rhfG5 X=p 5Sى Ѐ \g ZS苾30$_%dڣG?`С>pR o , B^YCI%GTeK/aƔ9E|7oƋ gO?@QG&UiSO,WSbƗ 2tHkUv0. ٵɓЦհ6C[oƕ;n]wջo_0Å ,TPMpa n OtIc07k^=۶ܵО:%JԧN,Y4=Ru돰g׾{w?|yѧW;# 4A׿ P , 4dG܋P )<Č20lC`dkA I$B АCٳκ(nN>Qn9>q褃 R!,#LR%l'BFo>3R˥-/ S1,3DS (|d9(yđ:;$F"a"݄S; 3=GKf̑9VlM0TM9OA UQI-SQMUU7)i[qU]y_)\UO;MNcO=6YJea-RD9% !,9hYlc1@:xhͧ1&6(kX-8%ID9D*_tyrJ2[ԙʂM; !E-\hOY0 !,BNYlc*\ȰÇKDȱG <ƣɓ?' (cʌ'PVdD8=w S$СH#4ӅK>:0jSNbukVR"*vhA A;'0!F2aYoLZpoxʂ;LYNÐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸s_ޟ qċ/o.:ӯ'>:E{<|c_>O3!,!Ol(^*\X=UŅxhŏ؄  ܸ6)%LFҴys˙5{2SOE&$T?b5]1J6Hb c[ÊMcOvA=*05+w@%(5]5M5[c} ןZtޝKW` Pg?+W 2~ħKA|/p#7/K5T !:,r;H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ Jѣ8'(]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˵۷pʝKݻx˷߿ LÈ+^̸ǀIL˘3k̹ϠCMӨS^ͺװc˞!۸sͻ 6ȓ+_μiNسk߾|:ËOqӫ_Ͼ˟OϿh 6 >(Vh^f"a (∪}H(*4ȟ6@ Bi䑽L6YANF)唬)IX:ie\v ^)&`i"lRfpiri'~tީ矀gJݠ&P.5 餔Fhfڥvg~*ꨔJ꩞ꪕ꫎ 묅J|ڊul c K\S*L: EJKp yNN_>o暿y~>nzۮ>m?K{ގ>l |O?kʿ|>O?j}n}ߪ/~~u eO?߿vq&ޭط2p|"(AQ  >CXs&(D;"y%NX)RyVEq"'1^fؽ5|n|&G_#u=~ -=P<$ @%-z$$S$IS%3&LrWd6)J:%*;UIQ+cYY2Ler˒ѱ%0da^I2e2e|)M)RU&6mn"8q<өN5m|'<(yj'>Y}:*Pw<(BЅޓ 3#zRԑż2QM(H#ґ& QIS4k(}\*Sд(Nӝ>Pꠛ8F=oT0y*Tq#թJgVMNr5AX*֐9+ZSֵnOXZU4v+hWP͵+`7#f b[2v2}?"X2v  vU B0hc %mi%ԪvQka+%mmq$ێo$ߊq{$㾖Br.t$FWϵn UlWG=ҫ^n^ҷ}k˾o~H<0/9.xD}J, 7 /E ϴnC\#>P/"~1Q,˲6~sK x)qv,!"2|%CN*dSSee6Q21f|,y>k~s,Ĺv3s=Y~O-h@:hh>Fn[&MIц+MKX4iЁZӣ4=7Qsԝ;5\]iXkNSuWfZ՟SMj^sYp.vYkbrA~ gSn 6ja]\WVs{uMn`VBzS-ηoDoH)+%Sq8XMX8 q>xuG^8(OW0gN8y56 =ЇNHOҗ;P_t5pAYz`6|`ձu{$O=q@<xxϻO‹=z;:ׂ/| ϼ7Oz7Ow>;9>ADo}ۮϽwO;\(K.>(`{[>gA" !<,9^ H*\ȰÇ! ,9^H*\ȰÇ!,5 H 3oa"JlE+b̸񢿌?(1Ä(S:[re@!X,hH*\ȰÇ#JHŋ3jȱǏ CПɓ'I\ɲ˗0cʜIM(sD͟@ J4&)*ȡ(=EH*S.c5Mdx;$]ez7OZ(z͕=֞ZyP`$O{ɕ!p!{xnpUאЊ8oDbricDِ)YGA٦X(V%c-f{)AYm`]t'x @sVHeB :Z!F)L*O`'A,ha i{xPX.Z eBLF)`jW5BzFj)4~Uh[6Av6i -Wy.({;W%kY ?#"CN0-F5O(VapC6C:C^ڞ_;_Zq&в5W%!ZFZO_YԕL-Tm .gi06‚cra"eDaN0saN`4\ {c I0@y\$Cj-_Ex,v&rs'g#\,rV !tHGN)NiarGjq"qcҶBA"(GA.!TIJZ򒘤cNz (GIRL*WV򕰌,gIZ̥.w^r 0IbL2f"Ό4IjZ̦6w mz 8IrJL:vD'm.+zζ.q;RE/xݳ"׺M.y^٦7-ex{ݞw-my2WԬj\RW /JB6#L`Xm0ŋ–-1v)^Xͯs/;8/  ږ0*-l;]p}w<&GBNO^,T)e"̝3c%?9>\c-y1| #53 $k,h443}n`>W9~MiQӟWo;}$\ְ(udU^PTV=jqc^\zU$:>~L+SPz0^OvLӵNez=h'v[]ii0۽^yۋIГO;񐏼[wY{GOқ W/cnYOs5߻W跏;=g{^z;ə)ؗ/?>;K d [rD/7.dZ?xH~8X hXX G@P؁Hx 0 x0.͐ +"x 482sG7(X4r 0XJȄ MH-Ȃ45Ѕ !K \q] A^U uXYqwX{HFA.da!hMHg(0  X AE!  jv؆H؊u|(x~᷈ /؈N苞Ȃ]h.X DUmԃ߷{8w~8 X(8qX)\؂](fQBq؁hԘ荰8(8ixP;X =( yh2tQ6I`XKÉpX8 Oْ(N3XLȅؕ(&GI 9% هs4ě6@Q0Ȕy_36A|wWU7Ov7夝n7}sĝ[)N9Ky[|g}5t?%MEDOgtxiIMwN5qgctzSu tʡ씠SzapcjRKFVކWN:E5F[fo,ڢ*4:fK j\gqBSDK1JH*M"ʞN7{:p֣YU[{Ǥbk$8 w*'n&M!gFMJN 9:]XjqFAJ5$YJԟpz}6)&]:cMdeī :|ZJ^tCӤ|g|iǬY@:|:Ԛ.d*hJt1n&nL*KIJSEjPN TKm.V^Ɗ Ivgԥ] IEW `cjRb kvE7t}fﵢq@*e!Y$V{6:G*s-KJK[I%[Tki6{ PʨNj:wv!+_njh\;LBJ*}{,cSM ;Jw ?:i" |;:!I{W#mڸe^s+*Ŵ亣Ddiw+k3[qo+ie[J[rKgмʼ;;)Oۭ+Z໫⻝ F+KK׾uNۿU4/lL̿ٽ4Wk k5`ً4¸ [b[l'gܰD5|8N`[Ƌ+jƮ .U $P\N2Y[toS@Œ^,O6̿bIϻ+knSigFY#Y<šx|hLa#ƞƽUKN:նv?Jqt{v["h wilJXq\ŎulowkY <LTtő;ƂJk/j=a~ʧtJ ˿>̱p[p mNͣ{ko*ͣDa ^M&ܲĽ|lO춶lKw}z gJZ]'WQJw\]V-K;!}M(Ťur k)ݝ*%¦ѭۯů$r)+y=Kd2|Ӎ|Ok;i$Em܌M]c;lzR 8 P/ո[Ֆì@Ā\m6e_ll\\qS.մrҩzֻgy4o ̀^ :ءZ˨k<'lǐLlzږlLס8Oۜ4ʗ^>kÝˮy]-t̾ng8L$ m,~ܦٺRg^]mH~pЙ-[ږμp lnZ4:o>. ]'n%[-/@S!~U-n7N]OB޺ =dA_JL Z7H/ɮ^}bTm}QNjt?)^^NVFE>܆_ĸ~Վ }/᭏/Nnr^+oO=l+ߝ/xI>|_gL!H \Çk$9pb)&HG A$YȍSgƥK#`8M9uOA(Q>&e qiSY|i&&H mΤWaŎ%ٟfUvԪV쪕+AyF{_l;< ' *bƑ%O4|;*tjUb).sν#kG Q 3+$,ɝV$m$IJDm:+$#{ɮ#w,S蚄oA%,rA(T΅#@\h0@e\FߜS7! !Ü)ͰRH9S@U!IЄt˿DF,uQrttGtRQ?ecqKbr ͖\2ao}GdPZ"\G_E܄M7dY *Xr)ܖG;v_82oXtN\lؤE{/6a;*b&p 1,E!RR2c%s}$ ŦNg~d7ld%B)ADd'qрj\"DCzr3\& YJ7"2PtH < +27VP0],bnֈ(S(7\[H쒗1WuD$&]'Lb8KPtW<$"a_[3Ži\&TaMLP;ٸp=[^0xteySfl_ Nb@/A|ݰTE%-ޓcUE^7>OH[SCgTT/]L#(3T^p&#/d^))&k0~ԦNY2Sa!8UWwUptgzXx&Zlz5!-C:o&"N.qd6 K_Mg %0$dG "Lh\cY'&-UmL{˞w&=FmVD]nֹc[umw3;l^l-Z},~E_ | 8[pFs3 yϧ/[P"wfp9N֑ngKSؤl8;-o.;cI8uJ=o??Ju;|A(?}%2}^u57=Ƽ?3fԚωU U~,wXy*{7x.iBXJ| z~![̯zQFRoq=J\} ӏvԋa^?Jc(sE靧$;Yt|hDTls7yN_y=F!@p +$gz{`M#.:1>HxQp37?fs p S ?8+Ļ=h !@Y/K^""75+S2rxdH! 4ރ/ ⮫Jq <8ٿ@KJzsʵ4<|űJ<%]=sJL$C9,T7T;< `bX8ԉ|ӫcKV0[L>FdH'#: ˫ɛuj"B$,iRJkl=G ˩k-izI,k| IN,F:<2z,CL;+N8>ΑR/O[̳NՋαADó+s=w= $4DpBQ QLPLlЄTɿl|×E"ktGEz>|M-5̔(59<Dü6ƮRzA@rRQPS15G7$2ɾ|K+ӕSQ>%?M49=)Tx%8xPBa U$+C=27/ۺ<&9 T?>$95 孻C\[8*v/Խ-.GN,IIp]4SB=EcHRRUuك:25Vv\?8UdD僽67jxA.B~jh=cgNkm=.V}ӷز^E8YldtEHjmd-e+M_`> d59mٕg]>'5Ug'=Ni(٩Ff^ef&/Bjd;^ifF}5cpq>0-^жUfatkfDPl<۶nUR9К'XbV3o_,χ`^}Tk`֦mfb}WPH:"eCaWlٞ~p$bCJYբmqbZ\dq-k>'ApjB.:8vc=0"q$G%f@'r0n] oφ\b[ö2 Ke*M_i/' 7q(݂:]pl>aaUVUV m f>^~mVllFlen6f O>\}aE:L#{PUd{T|ǂT(~P*~XDO,|ڗ}ǃTHg}$5n.yA:ϼ9WЃE (Wj:݇8G6TvYHmy!!8OCT|VtEиաIЩHT$IG*x?1 ebyP*IZOVZ3%]zKen&A;>g&m&q9'u$fo}'9(d_:(4:)Zʓ!, ?H? NApB B,(qÊ+NԸ"G; )IKJ$Qȃ0a83"!,W H*\ȰÇ#JHŋ3jȱǏSL' H HqH&[ʜI͛8sɳ*)R 2EXTѥPJJիU:%zXjٳhӪ]1&YGWuݻx[֙@GÈ+ ;^L˘1jLәEyZըc˞Mm h `sMȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihl8śStix|矀*蠄j衈& 6s2 }JJ饀Z馜v駠ꩦ(6jʪ뫴j뭑랮 9+v 6(zuNҙ-dAkKd|[izlо.+K/{giio.EpYТQpV;| |"' i)0$ZV 9{VYͷ\M8ŝ^ 㨧6qߝ KϬFrdNؠ᫧nŋ Nnzyo\3ƃͳ~csso>+z7۾(9i{<X/*MmkV>:J %X+ w &ʂ!DX<ń(L W0 gH8̡wЄHHD.PH*ZO-^l"H2h FJcE9xc GNH)C>RD$L881xF*BCВ̤&7 ELrxD*yPґfă*JV'P/, B2&y"/?Ib!+UB&,yi(Xe&ެ8oR,)R޲ml5QNxRGI:qz3-?8P3M(Jz3m'= {rcA Pvq%.JҒJt(E=I3eERdӠ.ùю@bPWRTQ51y}hӦ/oӝd4VJCTe4\ѡdWXKVW"Hלƪk^WNb4k"՚Ft<(E$aωkt*ӽZlFQ b]*Pj4-WUkF+&BZZ jnXҀ!,f H*\ȰÇ#JHŋ3jȱǏ @ɓ(S\ɲ˗0cʜIs`*UR ( @ JѣH:ĹgʟJJJիX;$2EdKٳhb9SpʝK+qxk߿M@lO+^̸cqD\˘3kL&7yӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihl9śStix|矀*蠄j衈& 6s2 }JJ饀Z馜v駠ꩦ(6j꫰*묩J뭋z멽+fZgQg~BKƜVzgL[r{lIΙmYPiЛ oT z"& yrf$k%3 t ,֭rZGL2f;V1{-ҽ4eLd0is Qkm⌷xwLxHm5֊Ǽy?.sѮtykr1_\xqw^^_ͤb7 K7/}ˊdo觯/o 'L:'AR  * GHz&LaPP, W d9 _?,$ ZEJ݉Y,nߴ$*ؾ4yZSibg]@Rs+טVbm8{N,<,mK]ڶ\}ukɂ  ^м=̫@; Du(z;_ַ!,u H*\ȰÇ#JHŋ3jȱǏ 3V@ȓ(S\ɲ˗0cʜ) U@ '͟@ JѣH3L EϤPJJի*SPgUbKٳhӢLmIpʝKБ)܂\ԫݿ d!SX̘ǐ#KSޏ^N̹7 _#Úͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*iAST:?f馜v駠*ꨤjꩨꪬ꫖b 무֚:*j*+k첰*>kVkf,vr 6kk@.+/Λdl/z l鿚l0;ž6L nƪn;j<&3l–˿ *)WZ.۩A9:\ 42'K 3*4P۴)|E n5D#m5AmWvo0sW2,7XkuG_ƅclxĥbcvܔW.塢L~>Ԝ)Ԣ¥˰چOѭ6NNxhWw)o:Zߧg)ͳͻB_^Ҿo6|zmg.8c,{o:i-ܶlY>.~Cw +M#8`SX4)dg(*Œ.~ ^r5"&9@V8DmT+o; x-*j+59.z` H2hL6[H:jQv#>~ IB$"9GE2|#)JQ eĤ%7Nē #%CIRq< rGMd qDej\JYL-sIH#x/9]V *yYFd*Ƽ*E)GZb&-Mfz`&8ØTTHM9ϙexD;E9/Sq&,gI/+]Z2h8zmc7IJ\G0ЏID(=qːX,)GE:K}>4dhA5ISjShM[:QB)DQJTI^h?ԏ2uiRUT#5p2}i>ӗδ (W%V2pQ*~CI]WRx<W V ]+XȮ/5(?klP5r9(ZU+QQYƶukIjV}+ ޶ A[؍bQ^%hRUmmt],pSv5 [ D= }&xho1sy:eeZ]Tٴln vgu+Z[:E)N{%~iulib]>1cohmgLix,6#T$ y񍇜H"Kӳ2e@!, H*\ȰÇ#JHŋ3jȱǏG@R0ɲ˗0cʜI͛8iV&= 4ѣH*]ʴӧR(QXjʵׯ0TR]˶۷p~LK˷߿q"8Gc=^̸ǎSTi!k̹gE;@ӨS^͐(Y> 0ͺ۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무jS:?+k&6F+Jf۫v{,ކ,k覫Ժ n @+\ ǫmû@R<1~ w7{,mʪ<(l,GkW,s?SKrCOQtH4LpA:,5[u9GuZm[4s۵bO=H7lc89v:uƆU^8^-Z.Dʹ3{j;}x֬'}qÞjx㏿s^5ѤK-zgN7mk<; {6 Ü~$#mr#:0˾7}>#Wg>{X5]xUHY/iqk$ԢJrkS*m6H^z6dW z`=%ZEVu32]MUJЇ&VYM::W 6&)MKVv']jg?! z-jOS=Ŭq-v#-4 }pORQ.wkVMi@;;װwDF\ڏeb:hbWܽk7^%%0k6/s]:UeКP }k]mծU/ G7'qPLcBXM>d STxPiL)+N-2e Sf}ٟgn ˶)m2 0ѐ=dVƯlKNGEL!, H*\ȰÇ#JHŋ3jȱǏ= *) @`?RI͛8sɳ'M)uRϊAQ0zӧPJJ*PU\P\ÊKٳ= @G2x@{JLx˷ɬ`*Eiدǐ#K. bp`ϠCUh 0݌6c˞M3ӥ. #FM ;V@o%6&NسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+S;?,l' 7 Wg<0wl0,$l$.q2l82: Blq@34CG-5POd5U|Zdm][=Kl+PFy5 Y[=6#xE7;:8嬷> G^/lîg~{wz{~zߣWϵ>{kNF=kq+tK;'?_Ku>U,|:þ7ޥ/_ \ů+1y )΄V>z+5 w" "H(Yl X=m`W:0S <~#b H+w|=5P6 G:UQRAdwnG^M(y[Fw5nfC{ZT,|-ǭՙNBfy }`eU^Hz^SPe+dϚyw%hwz6`$陡:C31c=M6'J x5F;~zK7zv(tG/]f9 g?vѯg!1, H*\ȰÇ#JHŋ3jȱǏ@0ȁR|p˗0cʜI͛8sf IѣH*]ʴiE1പիXj&<)C׳hӪ]˶GU $)˷߿~XϑR+^̸c+l zk̹q)jϨS^͚a >ָsͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫N+k,lo 7찼 ?,1Ol_w wq$'jSm`6=ok=P^SX8N8{ W@bwx1PfCGڮwƫ pA ΁#^xUNrVH0~^4'gGD^<)-["Hǟ)ϊk#>R͏"6Z- "{iԼ(叒SSanJz%0Y3RFMYv!D)+9KղfdK.w^ 0IbL2f:\IjZ3Ӽ6mz8Ir,g8h|'<)y̧>Y},'7z̀,.MԡD' jsHrQG?vґeHIR\4HEhxt4h2u*4TyOgJԢSFf*RQ-Ѐ!, H*\ȰÇ#JHŋ3jȱǏ*HQŤ˗0cʜI͛8sY?)\B ΣH*]ʴӧP/7%RLʵׯ`Ê g^ Z*ٷpʝKGX ݿ Lhs#KLYrO-Mw@ϠClU pװc˞ q SxL Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,lUN,G,Wlgw ,$/p('2-,1l8<\s@s(MFL74I?-Su_-Z3Lccmh+uAngg7 kmlO7Ą8 ]nA/ĂO猫wpknਫ=גW.A-ײɷo./N¦#ϱ'?CF/zZ]\?~_.d1rO?˯K_6An}`+(;q~ $hϱz'=yFBץN|L]x>nnKa HyՋt(”ݯt`wXdh@M0d"ph*.VT8 q.f=}/|sch9,}~1<>nFﵐ=D*$8z$By g8҄dLe%WʦٱtZ,ϖ1p̥.ˎteiƙ!d/%̣5ifiI4IjZ̦6nz 8Ir&gv3|<y>~g>Jt<(BЅ:'fDJъZTh6QvM(HYi'5 AHR0i8_*SqNBC4oSz)IkM )>Yb43)mDTZOŪ9S*fW:Ԙ~ 6*ӳUk]JjMutj<Ԧt*k]zdtTXNЏIDZe̖,e5Ҹf|&aXԢUkb]V%-kgk[6e'ۏf lL1[TesMv\ W-aTֺwz \ᦵ=zW0,ЪVl/u7zbm>[j5lIp8'irt]?vpoLa\pk#x5cX̍f냴D^h56ֱ_ maּѹcЇYΜfU|oo_mTUZΫ-.]rʋaQߖǥ&jK_eSM5^Yt}Ayzui;!, H*\ȰÇ#JHŋ3jȱǏL P E(S\ɲ˗0cʜIM<DAJѣH*]JӧR8ЪXjʵ׊)t rӫ\SP׷pʝK#tYEhd La|l R$hM˘3kd)𵯿6^ͺ'=@}2[ktͻLG` 2Nn(0/УKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,swS=Ew;_/}` -_jns,o{ L_-p (9 L/la 'H #^'B0gg$^m9|\B%P\EN._(2f ]Ԩ̙pe|༨Q\ r::y"HF3ih<똗"b{b"hEf/{c!(C+V hnR\*Dx`}8DIno wY\҅%/HI.\2au&,7')bn޴e9@L:Gtn$9 IJP !g<:xvӟ?\e_L3ЂMBІ:D'JъZͨF7:Pp iA=*Ғ>&MDQҖ0Lg S)N?ӝ> PJԢFMjGQ2բNͩHj jUԮz#kI'!Tࡠd5IA: zàm}@'яʵ/q5(VRU}4Vu~jVUQ%T xe1{W֡xD*:Ѣլx8k`EKZhV,evVP4oyPƭlܟ6עPm?&їV C3{Pl*+-u]" .|K_^]nI:_k0D[~4=pvC݂6 d-y9`W%p**Qe{:b6ōG}+/^(]iu y}L mC&W0[ĒEqLYX3?c #T~p_'` Wro 1KY.D/ˀ^[Ld Zbv3z[}\$|_ŖMuԐ4zSTcvu9$zūkn8-kKWgڸN(dʚopj{U+:܌m3+*Wz{+ +UK洵Mb#+8M-p+b7"D/=V\!, H*\ȰÇ#JHŋ3jȱǏ SL "IL!P@0cʜI͛8sɳ)JD GB ZϧPJJիX%HցK]:JٳhӪ]{4?U0RLDz˷߿WlWǐ#K0\s/nLϠCK&L WͺװyNA_ cv#L8OkȅKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmtS$=?J7PG-TWmXg\w`-J3Mhݴj}5nǭ5rmxxd قw'7>8G^aCNזvI6Ae޹藗n靣d<:֜k}ۮO۪gӱWդ/ʹ@{>G/OOS`=i~;oST9P<ɓ~3<Փ[O&Pjv-jƾIl\>o !DNS;0j.Jot8_ ?Cx' Hg>n|݃p: aWŵA`!vA/y d!"!T"_w>:BR=z:,CCAІȣF9s$$xQi\YAQ&yL%'Ir]tZ,Yqm8\l"D03=֜!, H*\ȰÇ#JHŋ3jȱǏSL' H Hq˗0cʜI͛8s֬"EI'ST9ΣH*]ʴӧP+9 Fjʵׯ`öjbӪ]˶۷MR:V$ܻxܲ/LÈMĐ#KL⪍1W̹ S @KG^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmtBS$=?J7PG-TWmXg\w`-J3Mhݴj}5nǭ5rmxxd قw'7>8G^aCNזvK@k 9藗n铣d<:֜k}ۮ쮷Yton袗4۞+$"$xB:^uãіūP_LX?7!"PH^ K:`2xAΌ (GJ |b,&Fg븨Lp|$(#[c1YV&s,'GК[PmajY*&vSr|:Oeȓ<Ϻd\@!.ge}.ûMa;je2)dX<EOj%5tc*׽5Eh?җ6s;JztKlF7{@ǡC:| li~M{.67tfnU~1S N-p[!,  H*\ȰÇ#JHŋ3jȱǏ @*(0e,cʜI͛8ss` $[K˞_5ӧPJJ*ʠ1`ZUV]ÊKٳS6PfTيݻx9$~W,PÈ+^%a5l6ۣ3k̹IL@ѥI{^ͺk% 2%]ͻ ұ.o^μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|OOn'7G.Wngyoy;>zG~zꬷ.ny{_.o{ss=7_A?~}훎~k?xÏG ΀[82pqo^A= A)w{ HY[t=~h?O` W&ꖸQщLL ݰS'|e4Q3+8rώo4 )|}*b1h$x2NRt$$xG9p4] HAM _VN`leII|NI$$%7>S3pT)AX&.HGqռ]1<& ;InjћNgJ󝡄.Y8zFf%Ot$@BP4բE;QD'N~ =ͧQ:e@'JҒ&&Q> ,MLgԦé\P$vu!]PiJT鴤G]Rs귦:PTJժZXͪVՏ%_ XJֲhMZֶp\J׺U^ׯ浯U_KضMb:v}d굲%,f3ٹ hGKڔh,jתƵ+l1Z a=Ijgںlp; i_-q;\<@cipQ\Umt v(~LvY;׼=YS*.a{oj{mwf m%Kژp gc;۾rY؟FnObfq/o=6 }njju/ ZI涷K+۷^x%9p tPgms+X/$=W񖻜Iwٚko^p,Bx OlE!, H*\ȰÇ#JHŋ3jȱǏG@R0ɲ˗0cʜI͛8iV&= 4ѣH*]ʴӧR(QXjʵׯ0TR]˶۷p~LK˷߿q"8Gc=^̸ǎSTi!k̹gE;@ӨS^͐(Y> 0ͺ۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.ncS$>?7G.Wngw砇.3N騧޸骷~9Ǯ9n{'@3G8W_SzT;_췿w~Ϗ9z8*g/|'@9 |8 N\uG NnWr4`Nxt3 qk! A(֎>L 7ٹ/0.T *Є@Jn[ K%CXA!6.(t/>5:n$g8p_C2p}!=0vC pw:Jr s^H@~tVR"Ou2KO$0GWR, MJ߹R\1BH%6 x7ӎM$f4jb1\ 3HBB2R/'JS$7m)Ӛd'HOkz a ˉ1 2Q#vrd_E <:ҏ&LWjKntLwS?KqZSvAzTO^TgXXͪVծz` XJֲhMZVZp\:׺v+Y׾ `Xp5,b굱d'K:,]5VrM\C;\u UiQֺWm]'!T2-XI;IУW-p2~wUC*1alEhXyZ^Ūx5w3=oWS"-\0T 7o}_趸D}ޭHZԲVwK;aH]nSa m͊`c&v^/&.Z+-vmmM/^-n?! zDЄ6jH{FMf#/z7bzn1WZUXhKWA=+}KG94|j9rNvg:Y٬v]ǐqMtH򎫠\/SYm',oyKv3 }kC/74_1s.pl^wɇNϞŽѧKڑyH WWwmSNtK !,) H*\ȰÇ#JHŋ3jȱǏ= *) @`H-cʜI͛8ssULşA]ʴӧPJThKSVUׯ`ÊP̢U ݻxUݏ&2-پ*^̸\Qv`%?̹M1#Ŋ װ7أ`¥ήB 7* vxУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n'7G.Wngw砇.褗n騧ꬷ.>OO/o'7G/}Oo^}}'}o觯o}O^6uG D{q H ZP o;:8Bޭ%<;~0cB/@2@ (=0wFBWCЄ1HDqC`A 8AD9b/ްza X6{M|c麗;:/ƳB9"wX"ѸEь9L$<ЇL'II*VxO4b&o== ᑂ Z2S~/f.w;^/T"GiNngc'dt$Fi!.JMӗ))%YJoV24d4eVs^6Jo3?k )@ 6!:OHvSe!IЎfptf gL)OL2'yEwBhȘbSFўRn\!p "=3W(CRՄ(DDuxbT>ͪVԭfq]*IF VՎ ҔDHZֺYū@)毀 `KMb:d'+XRlR, mbA+ҚMjW{ZҲu-l)+zc3X RKⶸ=.rjYI6[Tͥrv׳F* 74&VkkkT73%H_]^׽0a+¦"UC?r/U0&`x_]N70g+b~=qdbߗVi1y x1`A*cAqlawֱhc"o]_8)hM,cUn2)+̬1~4A~s+*IFs,]0sqYb$/sY,h@]W5S=rLo:1&\Vz&u iGˍ0ADr -AOס=';ϡ1A=Y__iɥ5 h'1ǝYaK΢A7d}8yhnj+Ŋnuh)W71&knGRqFF3\j@flpqdM.O\~gن@ǻqަW=fƁa?HOmt [ꝭ:ksWS[{}ht%߶]!,G H*\ȰÇ#JHŋ3jȱǏ|rR\ɲ˗0cʜI͛3TAeIv"ѣH*]ʴS:bӫXjʵז:2E*C]˶۷p=7 \U 4߿ |4% ǐ#Ko(b̹ϠmveJ ^ͺ lpUظsͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n'7G.Wngw砇.褗n騧OO.n/o|Þ||>}gw/Ꮿ|S~//~#?|k]G yCq5`%3AvۗAQw46h={^H@0dx ΆS!op(; A$0K4)щGd!"eٕ!8٩Q1aL`)>~s܏f9vnry\T#o泟Kf0X_NqK_._ƿV4ckJrt5-YCҠN< jQ#ZDC?8Yի&cmhwgκǖnke`_2׿53]\vGφl}Xyre]nym \p}h5ےv)7:3玘8Io9m-iuY ofqgy%s)σZ⡽Eϑ^k/|P{.u qR{}Xzsvj],krZ훆;f\K7 !,V H*\ȰÇ#JHŋ3jȱǏL P E(S*cʜI͛8s)0S"HbKE*]ʴӧPbBJ'2 ׯ`Ê2*SQb5,~KݻxkB@.ʡU Hy+^̸1YU6 (ж`츳ϠC/p ) @RE˞M'=@H}2b Olȵ,@cKiV@yسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n'7G.Wngw砇.褗n騧ꬷ.n/o'7G/Wogw/o觯9So HL :c '? R 7z 5(*&l Sxds!w@P>$ O!Ə DbiC&ωbH<E]] F}1EA5QV<HG9Q[|_=>ycH@o7Zp\@*HBZ򑈜$1yDI&w  )~`(HF~4cexIHOl%A?EL")K] |2SHeN!z|4*Nt)'2p09N8e/iCr2I6s}4yHk լ4YRK7LuӋ\(/'r~tb;4v]cH:EnF&aE)Qqb4- cq-E'? ޳,MzR<0ZLeR۸ԥ&4Sz_A7VNQ'(ZUTv&ӝLl(UMuաIK *5a k?2Q5;ȏ2We*a'K*vEeǘIw 7ZдT,\j "ħlG8[4~; L`J pKMr:Ѝt[Z-onUwKMz;}u+_ҷͯ~_޷]gw=q ] 'L ܝ4Rj$ߎĺD?V*!DbtxF.qr*ME*\b)S9$Rbo[ƃu bVZnjd Afnq uwkg>ͼE2pL6CЈocq|7)pyѾݰ5}a@>uNv,W Ը5u}\Nv4]LU.ӟ5a\;گs]VZֳxj^>FwqU}HaMJw]V5լ{#ж>]T?yvMq^[mm]d; uET<nkOڎp.x+D6ǩ+7EK>塃ZUNr ye>=ִ؛sP98.辘g]+}Upm]9Ϳz|kU{_w {}c˾h<4gɯ.b8ޞG1hk=ߗ\򰏽)/֟KzO]=`OGuɋ;Ư};}!,*V H*\ȰÇ#JHŋ3jq#RtcHH\ɲ˗0cʜ)3E*)y&NS XѣH*]ʴ)Ûv:uu'SjʵW7O~=k EǪ]˶[8'w *˷߿>;*^̸) y>̹g- MP*~^ͺ5k5]ͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TR7]YeXC_eCa49\YApNԥAe.D{Y`}y}F )n٨J旗ɦ k T'DXbE]^i)el^(y%}ϫ:*lR⚟ DX%Zi^N}FZ3jD:첱*+Cn:j~{k *1ﰚfjiØ\&\,jFbK<{<@q[s9,4_Ɖn˰R&2E4F^:f7M;lp m3]+dsUtv m.DϋEk6ؐ/wj-RAҦP9k7SUڄ~LSnQO~q|t䪃c!g_>;#UkCO0;^zJ+Ij厧4?O;9=~[!Τ@2%-s@"26v-x+R Jn W(s!`>VyĴ@І%Hĭ/!ejX}KZ(ēPZp=1r ċnTSe4jktJ.1 gg,#~ǙONHqO,dL0":/9W#׾@J:4(~ #Vt K |z2e-rTTdL ܶ, LYʐ%ss+]s- eL( lQt+3t٘c1da'gJ +vS#˜, sU@{n$ _o yZӡbA/Ѕi;EI5hE*:)=ѧ%jS" 2 ^NwJ#[9@ PIV@EMQ7C1pO=Q. ! -WiT!fILVq̤7ԍʪVH@2lUCEVLac]׊pi&mf‚iT$tU3^Su,%)z^f*Np,MjJmC*Qǵ ݨm3˒J-\W Ť mFH1tYZ*w&_ܿh 3GK[VsF\W &>t.njb-<9^!5$߹׽. Kf) ҐU˚U-}MCzQ|)u;^wj5ũM6S0ΎO3J*RSNaćne1hq-goD+∽p#]kW"w:1 /+Q7e!yԦ3JFb1&o)O;'EҘ*3N{:M-9S%<,W mhq :}+{׻eB\Sb6ųm 9Y[́3QT˻JXrY[d%,}.G8.GxC-r[t="pZ^ﵗo;7V_ 熨mb\[3f=ܖn\Hko >|S_p£[O6qSk|yF|1r{b-b9eA)bxy S"X&x^s(t7zC09T!tuwZdkvJDuL7tnYxIfuYVJw@}IX{'ZET%vo&UGjG]jpFքGwHHV gyhHVMTHdי*ڢ. SN:[KiU yrjCqD4%U6x{Ȗ 9D7Rt9z>wm&n6I}WjvO'h,tyodz.y{8} q`m ě<5 eȨhXIxJN0E&Zוɉr9*%S8zKeN-r9Z i>i5G(V !EjGE W(W#xʒiS*yUb#fikȩrʉS}Iڸ.ljQ;q۹@ [{kVj>'t!! 00S7Wc뺝++{ڭYCu;[Z媃6f+D嫼{+˒I1̺۽{k\;{UPB !,2FV H*\ȰÇ#JHŋ3jQ t 1H,䃕0cʜI͛8s_:IV2hşC!4ʴӧPJS Щ"X5]ÊKY P:*) (-˷_\p볰aCKǐL1f'#ϠWlK?rͺP Yv_`Wͻ_P.~J8ͼУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tքECXgAz~YcdThPgaPᨢM1HJg* )@':_Nii1ť6EШ*$觢kiԫ1d)}>*lA*t&/}).B:۝ ,һzkWq7[-ȭ1<+ ,Q;3c^ Mlڶi'ĭ.o75AS llB,q_G4cۛ-SX1oFY]07h֓kFǽ-8_$i·OkG.秶dW.g˹R#m27֦+PI:/Cf':V?qxI?^P;t{͒^|XP4Wl3Ϗ|7r634w|5~G|;?Tchlq{{Ⱥ1%g)f#@,n^K7J(L ī0 ?p^r! !RCQv͍JzC!κa=yMτWJh£5&"#Ϫ%3H1\BxpWL˜w=QlgxQb1jTŅQplcIH!UH#(Xʋw"+G1_YˑmLЌ4wFZN̦6-JmsJ]MʼnqqxY)rz4'DMwN`zg3xNDJH=ӰmMs)< j6YT @FF钓Owfԣg;iC!ԠBhғnTt /}2)_&PDZSZX_XRjhA2JvիbZ5"dQnqhE"1y)JƕTYTXQ G\GaZvzD-;fum+E+>$&)5ش5Rdpd#)/ʎݯ&c]8Y:O 0wtvAzgm- *.[TL'6RҘδUzaMWX2)r6һzM_+v&bC2d揭q.Y"aC!Nmk_mNO2٨=?Me1{z=hvV~鋷7ƞθ{ arˉܐ[WOUvNJg}iee)?s9咦k' |H9={Kg?swOi `.'4c>4]dn/W$K8-ԝun3R5ZLnUH^3yDzU{۞chUxYd:ܬwe#? [ItrȀ~m(݋{\Z~Xe}:'|o^p]wQq9o~Uc~4qWqzjW&#w*,%ׂBt`i/Jpj:#TIG`Ko%X'bvwt[CgvwUcuL]YFcG/4'edFrva*UCg87Uc}U@Zwikŵ2'k&xcą6x=_A̳gug3sexhPOMvY0`08"W#Ҋ{&[l R|i(s:-}q(qH߆~VY}(5~Qq<~'}OxxRl *cVEY|A ەgX-X@pxxU LiscDY)oNv_EFxrt#щYŅc'|JVR%C[S8uX5^ Xׁwq#5Xi ڠԁ:a$YIfP Z;Œ$J5!wAc8it(M>9\17RV)D9Fa ˆ,r14yXd(xScyCS|{hcT(=Dw$m ĵi36/*EjRIx245]iGx>WeO;4:ytlGv:zQ ۢQ{{6!J fiKjJY'yժoiR['84ޑ̊EٖnG "nrª빗#6jjCMbGpJ#4zō yGwDd+:{k's )bHzN艒Gn:Y [6Pw7icu {Wt]1ۥ4Ezg땤uU4Q++y:秳6c.JBXiGu'HKfFfY=rDknʖUGs:gZSaæq/{Z17v:npITzt dꛏZV԰;/B{꧙؀Hi|š*{ZVۦ3KiE[U(fTPÛlXUFgӇ噝m L{BiJh[s)ˣZ㵣M h+Տ۳уi%yulU L [x j 5Q%I~J$XQ%آ'h5ڄ3Gvg1jk'Pקdz()/[f\dGmf 46'\{Hr`?vg3^sk7rzF+yn۹؄nぁ:D|y<kt|x̘ǐA,{!ȃ 6 Ȋ<ɒ\>A*CA! lʨL<ɏȩ0ɘDs?'LHʿClmAQ,ʓp˓>Fb,˺ Q̊a1 |,|^ƼČR!Юl\<|yV1,_<@]t}AyѓgQ!}#- ˀ-]=, OEьHp=8}}X ^m'Țeԕ @ͧlr-[-s!,ZV H*\ȰÇ#JHŋ3jhJ p)IH\ɲ˗0cʜ1LU@ ͟@ JFFU>H3ӧPJMN|1֯`Ê[U&d%0MlʝK7ՁDԧ޿ H୿SXxǐMߦ3kL*[6ɔӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8X@ģ*@&7YБJ$Ag`DܔK>eAdPc_#a$dVڶ@k*@]z٣aYu҉f&dS)Йxs򉛟 ?S;I'_AЛaaT&j%Aejf:&:םyflL>.F+w:fm}O6Zз .lgaPᮺP+лRS&/A.2}&#,*$B:SGLYO' gl`(쏥l6Szp i=WrDodL3^_Q;rUs[;0[{u]akCh&ݰL]c tMQ[xր78yWn9[#mj̜F.}py聉-i? +l:C[:P*ʾjԬ.j;s)/KiRϖnNAo/X'Ի#:T^dXkT:%ed!+]ߠT@Z٩V1zqĦy 옖6§ /`8 *_fT wĒ)qcHXXmO#G6,.m?4J&?1amі;=+o}sbӢH)y.@&jHӚ߸6F2e Dw"G2b,6cQ w<,! 8-m"H_zdT4KfH:&22{pb BCP""ĸ6JR&8{NL2c9".ЌgBifQص?镀6_@.v3qjLyJ,NՊxsgKW?r;l%(p{>wPrTCf@%JP T}E_Q5rOѳѐ+ڛF#VG]~qLt(OJThHMRB.. LB:a6x-JHC8d+cI|-f*'B\kC>.J~JX 1#տ"iNc9.i+ [ZDbj8 C2hU+g86n1mYExIfņM=HY2ƽS;ʁ Df}\rXln9L¹pTwKnMz׻qql˸2My/}c*SQ3hN9*7:;< o40O'|Gn5 DQiP; s'~jy% @I-0[ w,vק6dwP7OY7Dplj\}ZMER\e*IbeVn-[&X4߼jN'.daQi6'UB863jhC6. $d:D:r+Lދll[)m'ܪ3~KO'fxn/[nGekUKfeЎ"zMj[sԺvlmr ;M *39~L_~B7ntq:X0+Xwwx,.f) rsFUY+rAۮIlM=(Ozr+4+埅ُpjnqSf : ^=t+jg6loކo'.ddB?}DE4B|G1"Eժ'-+ߊ(l Z{q&=VSzD8=ne6 d;?lG.%2׾BzEkKloæt]m7wk6>ݖiӾwOTn^367E>؃(T oÕGlW\+lf0W>;ŔT/H֞`gxl/Nܧ[w+Fq'c63G)gT'}җcvr Gh"73v0rr K,Ael1m5e]F:׀gVzcbzRemSGSbj=ue\G_g6u5xBf&2Y7Yw^K6RbUS>1ohw[vmKypb XUt['bFlyS3y5]YԆwFxݴk}:'\W6C(JuȀ,odœRš gwh;dk?7XdYgcJ*JeuY :=ڣXw*4 PE4֥z{Llق&Wz*,.+e&11'Q8;UА xY;˳6kG9}H_Lk7KҐ }_Y[7;& 9dCSik˶zQKƨ݈\۷]!+ ayj[_ѩ+~:R=>ảKxA!,ZV H*\ȰÇ#JHŋ3jhG8#(S\ɲ˗0cVB+=Yϟ@ JT$MjSӧPJg T%z@f֯`Êk思d'fڷp%:3sC޿ 8εyy;ǀ&ś-Rː3kk,k"d*zә*l?rY蛾^ێdqS⦻,}fBT*r põ[dARe&,!tkCm;EQ\?!\ʈ<*A0C%@6eF[JiPخTC|4IҦ*AQSU#tA3sʹA:ЮfU#\Vnqc+U3xMg=ع'S88ʕg7V1mw\[4}^&ewRYoW;~:`:$&#dyC^n[QP }=C*GL}Z ~=߾ѫ+q翕~Iͺ7.oNr)dxzVB|80!bgqR 僥$jcž!.|5xͫIC[DM6%ĊTlwǻ,a_2lы_[TCi-k7[ֶvF4DhJH"3 gJ51O4[ g6%mO2m $YGH&D27F:moP@6c, &.Ol8C,LfY[q2,if:53Ijf@j nHԦSh=iv!ro$'K`^Rd$~|'J)ßHYxO`/4@EG-B5-D'EfNv 'IUBPnњR"Tb!9SՓ!:(C&C QaH=*lzHf.[#-w/P꩒.] fmZJUxͫ^Sa:}_u 4lFsIBfX1k,)㈸_q.{vٱThh;]QrjQNa2ekv+ґj-ZueZ*VerٳRpT,B xMwzv g{%BRoéFpC+i|)R}YRZ?6.%~J!عSC;RVt}nCt\Եe tJ0P+ ^ YIKgC‒Ű}Sr:UApػc[zjQޯ>Dk.'`׌'p3K+M9v0>ͺmX {[9ږnGro!l7tihK#:k^4B[NRa>gMjϞ t9aR9>_4Mb[[Ʈ/9֋󐙂ꖱ){0PB8΄uDhF\uuO&JGy.AhCxzvX&6Hbh[Zkŕw4zx&yf-8~.*axW5a7wukkjV\X;DbWhiuIOibszivŅuzzC1G؉B{D7.=|PFlÇDUmwmm[}SSn8FGdWpcE<=&&{d]kyvk5e>uJW2't Wao(O-ua$HrgcdKvP=Jg5$WM\*eͷg2'e5sh`8'8~7䈿P_&tglƧt_h 9#A$Yc&9hIyVXh(qx^m2uvXSnjz(hB],9XFp#l(y5yz!B}\wIy(hP,xIM xfwדJo31iHzLZ؆fzI"~RR F(֊ibc|R;n)@XeؘηS&F}~c%|c\sxwV7 )abbIHDzFu42FXȍ -qXFD,Ē(T[Ipb&hsD} *'Ѓ^7hfnՑ61Y2#(DџƄ>Sgt5JjK8\y-慄#fIVwPyxGi)dh ňyih[K1X_ĢtJJW4l(y̵*knJ>*ukWzGvg5;T }YX"Zj\m mxlŷ)@F3"!x>wF}ii&D`fb%):F2-P}xHFOӀɧ_Xُz:ɕ 1'zA.7-i?CJ*S36D-T6x4x٘كҥz кjgzd-SJ`%]p)wYHZyZ]:uhldh?rH:z2J]fJ[(Y6ʙǓZyYC'溰D_x8xK짉6"K05&{j&Kbh*1kg@P5{1 г:x 0 x@U0 g"$UG,kQgx0 @kXkxе E˳PE*04Eam;=oG1X+xK0 g ~KSK~(S0,cKU+v{y [+ W˸Yp Q+Kp[鵷z۵<{1qU`1[{;b;K0_M:K{n[q[+Р`;bi4˽q{^{D[?е竷Pg~$۽+o ų>a ([k !,*NV H*\ȰÇ#JHŋ3jQc  ұC\9cȑ,cʜI͛8st @;MV!Ϡ!xӧPJJR*pV=fJٳhJZ%P w`U˷߿-eW{!ǐ#md\ϠC94ņțEYװcnX%L V^U6pȼdãKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tixMS ԧ@X`aiSA ?ʐBH2ꏦ)AV=_~"j*骢6HhrHkx++ª_"+aџ鬆9*ʺmk覫=hU (CknI/6ﵨ쫮z0 qv{o$,0,4O)[rIƛB .毬bmvx@2EBJ5lX(0Ctyƥ\pl+pgg%{Pخ޷w~JɇwGϑWngw7dN&ߦWJx_Nͪcn&Uo,6ʋꝴ^tޜ|Z?eMLw/o>KLW?uѝ'ۋ:5FH?۪}6)|߁V Xv`Ks^ɲ-ho>e O%[!U =caЅ_Z>@ H"怅#w?ɯ[WJE\#6́B".8) Q5 axF4h[sBlx̣>CHpZ;]) "}Z-hFe+**T!d&IN"oK(MI9mglWVN=,9KZZĖ2D_f$0Eo#IjZ̦6Aʝ"V}DUϩN.$wt$; :-^,d[;~Cnzp,&RD'JъZ\gB1>5~bC)Z5UdlFG:@ Ρ\噧_wͱy덻 ðsʽ9{hL&ѐ'MJ[E+"WB[}3zzu}}\FjҀe)/Z⯁0@/9ЎM4YWleζ:/zuX 61t b/K^/%|g/6mtj\]g':SSwi~cRڅ7-C|],Eu Zd97Fr8n0[fЇN]x6mgKFnRЭ.ϑ[&F9ʗN9! ֹ^]}&x{4/~PUj82ȅ9\a?"NH~/y'z/MtC =ATa8H z$>$A| ?y>"O&d_Ly/?vߏ >Dž~N2:qwz ,H(a}D(7"{/@Aȃfj↿9!a! :IxjtWH=(x4V胉8wF%${x`x!J}IGx<'ՁxWUc7CX&R88x|t]hwUhȍlXtqhxz!,*V H*\ȰÇ#JHŋ3jQb б* b˗0cʜI͎)R7]B gУH*]ʴS;HT#>Vʵׯ`_4а Sr۷pE:v 9E{ LVayL堈M80SL30P M~@c)%Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v9!X@d&4CgiSfAlI^jVצ)dX&ft&y}&t&Ob蠍@yУk:t a^*vjۧ"D+Iiz馬ZꫬꏱT@Fjf,l=*:*&Î +Җ{Zt'p;,Խ+'eِ + UvƲu,$ǔI"Fw|#?$2):L/<+3\44B"4W:o'9D/=X&aAO沈k]tS='omq9"BZ}[7T9nllТ2na^5 w=x3n7L pkJgpK=Cko쳧Ӷ>\Cu??ZFnu51xo+sȣU+X`w$phڎ (yUj,9g\!zޮǹΎZ-\ APd#<޺*K^ఌx wab.V`H2z|3#續 jt ~g2i+{yU Y}dg;4BLw?+yr ]RHڀK!,jiI!ֽ ! X;َtY eK*)CNp &iFDhSMg.%:W:vhfEic fv{jD<,nє07^&I#+; oy'7zzxg~h|@JPsAЬ*TazP qc G@ y*AK= h%j1bJUʧ g1;8)(:Sִ;A W`P*Ч-UvN!nNהLf`Jֲ5JYȟkCV;2+u%^K5f h\ׇMk,y8Z7rnf"z̏EW:ʳT{*UfHB 2+7ZZ lj)y%_6Ln2&ϡ]+' ܹ5nzL)ZۼM~b͋)}{&I[wzMu=K2aYԋ~Ki|N–q0Cq!*e@jW$M%BU C!j5ݕJ:Q8Ye4adj`*'ñG+Dj8jb$q\S;UIzX:VCU1:VCk]eyk9xOZٛӰi n:sWCϭ|4;ƹ%gVJtk`tۜJ6-%p!ӯ*(,^3E/M;t}9:`&XLlL]o7K-ܺ| zvluy}JAQXy.iuWYv/L/֓OQ1=p*N/0E8)E' %K,c@+?\LbxW5>rك=e{499F+k1\67ЍwWĠ_|2m/طg?{7ChX4{~}4#5#ugh̃IYmhr2~Zj-af}nVsՑ-Yc]̋a |7ǖ|6ޞnԥnSLv޵mvqio%wIsy35v?ʂyq߯.ߍ.o~= G]:J!qxggaU~tagrاuGbfCF`Nw|bser#r%s4VYqdiTVxGt'uc@q8BYeK7xE5OIEu€eF[u"'rR{afx7Rk7VxXPpy|0gw'chh|[oG|!V{ qXniyN>SCyx[fx3oy3[.kUy&Gtlӆ5|]eUy:\5z1yxę~yOou&^חKvvq2 3klH\܄WZ4^.xVʂ?}I^%'zFvK,QۻK۷  :ajkv_ G+A ^*\{ <l, | ;1 I۽݋c !-/|vV`2"{&KX051%*+|\LNL2<5 B,?Ħ?d ֏XY'Ky&Aw& $6jZ@*曈JEudQ襛Y&X,JƩzb2Ai+I@U|d)vj(Msư`I0P,R+n:+oWti 렱bl얦~nNJ;mLfbl(϶)0jB3b lbsbZf%VK3]$KSZ.CU%k6mgSG6UuS=P ]Wgj7M*Z_+b=-7}p~wCdj- 9?MvW} 5k^3.uܛ)7MI/>l8;E^/|v#T ]ߊ|[^vY,~kwyI_UCz3v3;;m˾Beӝll\nu9b`L8YS>v/Z닠_Bj`0(FyhYRƒ-T[|>uP go!49OHň81ʊpY4v-*zZH2BɟШ 5:C陜B8޸,ݹr8-uar1obKIȕe 7گ(3I1wD4't5(gH1lUbmrlֹ2%l?AARL&z7He:DM䨏OA%5)Upz[~S3)MnFt=Jht$!+"@DϟSC:?)tOu’-s2B3P}m/?+bD{_I iRGG`=$iE),k q *J$Y;F/vt{ih7ԈrkSrl]IʬvmR,=׶ź +`dL2U.MW̆jj[hz[f\*_(f}MzIJ^VIAkHzԂmISOA{*"kPd\g(Pgډ %^}'!\) C R6X-%˹Aiz֌ybc>JTy\[{b*:bJI2SXDӉ>.+t d5.Ћ+FVu4'!-^Q%`mƙ%;E:e ޯ}dĦ):Ժ=.f9^.MVq96=n=aF5 %1[45bYizp,KbWҴu1u^N!Mz߆^=iF9m8$NŜK>ٿ&gz®}#SJ9dьbu<i^e!Nt:a/\&뿫**M4@ΣpF)w":X%u,GGO fͮ3:Hf܀KwFuyγC9`?ccgR~^c? '|M5~QWbQ/ =5_ooa vkOZߡfog܏ϡ\lO&wײ#Q3Ͼ'{ ß ߣ̓t[hI`]ז>]g^ rG[r81b$sgVIbh7@41ac(:wsu/suVdeHrIe"g%gvhB"3hئcGUptvBrwagg1wB+LH~^nb8d(Wqx=bpF|z{;$eͷG7YtXrxzj{mUz(y"m'|7H҅ŵz[6[7Pj{,z~H'zjȇ#|-kH՗t`0hUȘ_8~8gv~o(Gp5[xp2&e":h`-)x8-8E@Qt@+l=sqxm^.vHBQS^X0c=F>rp(>,!d+tUoXw(E#&RAEfGwtIb8YTrShvVYEBYFiojxƆEn!ye,yz57jw7[LjBrI{wnXfS`Uw_'؋ŗYa5mNUćLJDb啎@IWؙŌ8E~',El`Egނd'y_i6v6ti$,Ix~RzQPsP'7 9r{7@IFD;h i yS ǂWDIStTXqQeFZ֑ `qa~C")y|1+y}yfŃ_Xh>~x WLTIWN>P%8'xy6\L^14:F ţ|o頝j'vYyx[zil IڕsFږW] b'IƋwRJrL9vzl$bcb}&ꍆ4IL($t}82I4 oc&vOj&:#U1eSql,uZ8-cSQ%@svRuʩx8^:BQS=Hsx~ƕ?T?9STc93u*9-Vt اYS؛Qڭ#ZLZKuS`СS ׯ`Ê?c P՜injܻxݻJ y 7nHh*^̸1BJ*븳Ϡ}8(違Zװ#[ ؠբ,/˱ yC8GspسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|WbB4Ꮲ@thshB82ZSL!Af!iFj*S:?6rJ`z *{줅J[RH:` l * ,ˎKIJ+kc+BBJj6L:Cl IܬnZJo#[j'ǚr*,0Ӭ<@-D j4}X74(Soys"ͫWWin5+ؖ:O ᱽu~Bq͞R=~{V+ủ59.sA9ykt.褗n騧^KlBSmܰyAffjmھy}^|yM&/lҏx _=Q79ߗo觯S7h"2^?cb@V˜r05U5)ډeb(KcÞӂ?Z8BlVZs)f[h@ H"H$$I ! Podaw@rbd6Q+c`y81 jHN L ) GY;41*2P5I0yfm4o?cA>π|[u.jx-?+bW!PHe5IbjuM\{ѱTٌۉ"v؎;bqY l|թ/U DDŽMQ}م+EN4;]%=B;a;.1nb'[م6'-w[ԎڞΠ4à+=ಹ3ptgf-;!vi㮰T-ņz9_/g7+Lt@6C"p/Pn idI|%ms':Ҧ3\;(9ťPh3 _73ra(U[IRW8tH更ȉi(n5ˈnNE3Mcgu<^bhyōmN88:XzH~Ѵ3 3sh d#>I[rO G6unn Z9EqֈT)z(iRA a4g{ q <z{Jr/Qy͒:(DW9'mwGh_jg10(Z:j~Tvgoǡex%J;jUnX`XutKY]FZ!EV5+9yU<N I:V;R'&n*@4q*%ʤ*x GgoGEZmG4rzc:#Ojvo* tYN{m!,*V H*\ȰÇ#JHŋ3jQct)H\ɲ˗0cʜؤI2RJѣH*U Υ?n իXjӭ?Kٳh*2mBʝK]:y߃ |4ÈJǐ|jw1Ș3kk[LӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8hmZy隙6)F * i>(Bl:ۜ"ʪzRvY&,sF+mS:T^\j,AƹDd.Z)oABvYi nd/Cg޺dj~[[Z+^Y}*t0 ;6 1sa/0#N%~@,,2B{I!‘N>KM]\G;43EP;UKYoV } 6K$#NY}Rp@rS9JmΛP|_=ɀ~ky/磟{樧E)O.vP#T9tm+o5;E⮉JiRj)tD3;|J_=T@jO[Z&T 鰱/ރͥ2䵽OUTwM GYs@VU]@Ʌ j+UWPLv2leS`THY<wVe=!{n7S BI /ҩKtɛK$1}#HL"M 0`OtfxԦŖpyj Xض60+׺DYPיDv76rB\$UfH?>bg1jP&9ђntC%qgS(6oMr$"*+Ƀ$N}WNt" ^F%K!C?JQkn~Ѥ*-, 5> LVSԥ mO*TbS8Ak*}jCZTBl/\ JֲҮYfMZڢf~IBGU"Kiѕs"n. ['4j%8i$IeNMu=+ͳ jRd|82"%\yՖ-%jhjve)#>FЎ4-yޮ¸z1AnGf6,SUKMɌn;}Зqr7E[ltGʼnN!Μr\6<Ӱ ΃#lFE)=NTy{b57 1>WBW{pi3t&FH%W&4(7<ѩ._2 Pdӕ?+wM2p;GΧWTmDGm6N5p~|:zׁY+do ] l]v).6-l3[5pi3zC}ܧk>eӚVeVkAuIdzaw[4Kً}Z~8-)K˶vX/ m~o\f̡ۿ%n},7O;mН_|BY~Q翝38/$NJʻfBldzT}8k&kԩ ?asRu`)f㑓;5}!ױUWƯ婜@rq7RJό[eKW̒bÿjjk]汛hw̜ÝvqE[|Ӷx&:݈v& XDK zPm_wZ"T}hk>8V01ctuUF).6u_L D+ɖ+z^Y_kͽ;b~3Ӆݼrռlq|5r߻v%ݝmOUGJVc^uW4u b"rMV`l?sQ'O%g%TWu6rWw=us4bhLA%bsld T(pTtett''5u;rTfGFHveL؄NXk3UAQgtg.ÅiQG$?Y+A|z Ilc9giyx:+c-pqwlw{-$}.J4$xk`&3]8ֈF qm'Xs[n%`1laȵnn\G){x(ٗMޔkf8O_`z'̘o ֌OhȀC"j޷0[eR7 Ȃq1VzlրrDWQ3LsA؂ߣs:[1Sdb`(9t$ue"C؏gV"rQuE}X NK$YRtGv-e5-U0*um )#/iD$kI 0ɂȢ%(G3G/_QxEKP֋Pw~KWx:1+fGt5GQssHd\v+مDmC2I%)$ 2si%i˜f۸Yb/X$=5]IUj;=4Gc0I#ȩ'KYsss62#_)9B.(4{lt#~&șJa yY8#1;V:f7PH^a&GjtH{Vo3&C^,g•h g]6F5p}|bW_w &t_е헉L:7['T%*/*Y{*|`1Cy٥OE^\MX%9Hza(]VXJ OZJ+j,R;Ӈě2Eu8x^MOI}aHTiنebzcEq~7JתdžO*}ADcw颼V]eozj#7Ww(5W,٬C*Gj jR)WZ-}b6y8 ZHSoZwd\7"GHbx98Ib 9zi}iQ;Hh{qǡhg = 84|cc樨Y`8t'j/VVA꧶ĦڷaʧH:rBWi{5q>n\ ?6~H+Y#|GF6beY\ >x1H`i:+ۼq? ˇhDԻuYS!7 S9;Ji1'|Y9 %Hk,vj]D&D(dNj˩u٩jY]rAذz$A LL^<ݹu9L%y !\&,yx͹15Jm*FsP ™h/%"S{} Xōר\-[dӯ+ Nq챳p2*:sîkCkÿFzl}l<njpKF;=߯Vi.t黶~9OA Hpv%qv d |WNNZRxAy8)OA0J{ ŽK`n-vH"HL!dL vQ&=YI` cR0.pgg#B UΆsJꈡA.UY  R&|+wH*$'IJZ򒘜5I YRꤏW0JQ*2cwJTd2c(];~@pi%CrEl/IbL2Yn9$ p|#'ʗд̇. !Cx+,$O A.g[Zՠ?ה>x^y[`zKWMr)CDze$z%V"]uļ-mg[ ɮ$o؎{J~M ‡²&>Mv{0ll6X!\N;؋z/HRqu5y%]BIn.'O3 Ѹ>DL!^ik2!NjJIecSUw 72gɿrY_r%$pX]+T2l>Ђ-3_Yo\04#AI2CAGϕtEJ"Kǂ M ZII3dW(vxVm\]Ϣ.eCk:Wx̩S lMU639o~1 pOmlO$c546ڎl8ex_{F~{z_dZl.-|_イ72caUh ŵ{_,"Q`.^Õc3Vopq87vZ'NSqVhDuU(YrXT;dvew}8?6i_EXx:UBK2OWth7uZhiQ9H[y{Јކ>Yhi>"lW[Iz_ i=@zF"eb}86f~miT0 lx[؋qH)?(6XpKYVy85xϷy|]˥hDΨhxfK+ agiXwR@vN+0oۈk ȗHjZ؄yzȑKa QXf|va6cjl Y9hL9|ylho~ WSǖo2Xn WHXBryIv.-{AC٘bq֔Rդhٞ'yZ5g[g~)p J* w;eN89Bw{b`;(r zؘ67<Î=d㘙K8$AȄrsS0xe'Jj5Te/CiJPY&ʓyGCsɚ0xC%KY(eF)pzftZnЩZe. _JȍhHqwdn<54O,T g6`l ?I8(=wnV4MxzTEƇ=NE fWڤiؙHC=N-cYq:ڂ>ZCg(E URV4جNyAʃkC{ٚf&X魶YRv=_{'dgSldy,֨ծu9$7K~I7jbٯiu|}T)6>Ri(PUp.*;3;.<&!^ѧ5[7 4ѳ{y/=+]1;*MD3a/ۋ= VdNc[VRJ0.K;Kj Br^۷PsS˴yvHc XK{qw{sޙaeck]涽NV!%XU h[' ר!,*V H*\ȰÇ#JHŋ3jqRt1H\ɲ˗0cʜ*IҤ*8y JѣH6L1AE@:JիXcYEgVL"ٳh*jhZeٸxaJ 3E+^T|H0˘3kR}Ө6]԰c˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L AiM*)A)%AOrUV9]eŘa_:@jfp~I%`vyj@gNQfk:l騙.JgAƉhEyСZ ꩨꪬ꫰*kfPtzګ|IjA*lzĢ5桝> m.;kh{'WVk퉉2:2ZMNi.z`6Nz ,s7gpG,WlgWFqzJ%1)'wI%-s-/5sX. =cAkg=I F 3R\w`-5+/d*ni0_KqF,{(=SWik̂gg۸=ޑ6=9oktlonq5jI:ꬷ.N/bոW7|~o 88sf+f>}gw/oٷvb%f6B28XƋZ̐G~ <˷0E*Ҫ ']]΃?5{$L WCߨ`8)i!t 25P+9SxTy"7Cypי⎅.z` HTjS+P04OjJ;})c _bǴqf5)9! y54e!ڨ&E22"$bp,CɲXy#7汒񇩄cIZ̥.rFdpyc$G` 1Q2g\lPJ1<6UvMt2x`7AT6R^yvv#ay'@ekYyVO6jty҆"ׅ}, Zrj`XwgU"U= 7aӊԅ[BZ.un|+X/g -,5|Q".gLc!IW/#usIT$ykYv@lx<t(^XMLNK7uW .g G6PrQbOE)nJKR04\ FZ 6gNO no%iWZ?y;Xri';d] UҺIkɴ ` dq@)Vۃ-6]7z^DgcoZÙYe!YɰaZֈM4Ҭp$)VrڨD_fj 7и+e/٫ds1XU[].о s![I%o1eƛiKtو{$!ˇ 32j[Vb]G9\y ?M&s}s]ױV5( epFnͽZiْ4vp,e1OkMgP(vr3^ݥ{[.گ*@ȿ}ی?;f=Vyܦ<3~Vv@we:wfMoϸ=f_/\6]^yI:7"ux95GHq#Ξ!71ldc!L??b?ߛB08%qw<naaDvUfZ/'ey6D'\hjGF%}crj'tz]|GwuXzgxQ)6m+({sWkGF2h4ZnC8S;8L&S\.(=EoGxs6Ƅ=T^^&&f*8Eh[V0Fq8>&fPdb/Db|U}&V0Ht}0؈ (v(?~HK 6IS8gZ|8P)v==XK XMdž`PzVTiIԀWfxe%\{aHh_iuSa4hDGvXod`Ds1fvE^%g'hȁwGwjjv8uJT>䇣1AiAňU7diU.bY&!6rrLHE9F~r*q~Ԇc&#C0Exwu|bX}93LdZwtפmNh"slZ^?w}i9plWMdv7N\~Q8k5FvWXLٔYW3gߦ+l>HfnwDohO^œrjwi"x‘ٚi Ѩ'g~RrGRyT,Q0-}LSnf3K;9_LݩHƝ=GPNjVGN9%論YfFTi(>^~(MAN0fRy2#$mJk-||'2p\`Gh Is\!K%HRpLOiZtKӦ*jr{D3ð^*M Hɦ˝jVJA,iӯ {aӉX(F͛cYɰa!_62B,j"/&mcL^U4DP(TD%jK ꐋ$.UR9ԧ?(u i3C'=N{\G3zMl¬@zl&Gj^j B)h^We> x,S|9 {P=XiV t,}gLc5vռ?E@پY": OFfS,`HdHUtʃs͕v+.-P(_5ڶ`W2tNGWVvjgCkG;`ZTRu:$[^q91\5SNU%tudݥjm>Ud[t>]Da7b5q5|_Bk`cfr"z %֦^-FX?g ""ʕY\Az#(7(eZ*E4H^>n,vac>5e@Uke;<>uo>6wN|fcf]FiWb8i8[fHdHms_bO1b2\]u4чz)m.X'no4)tt;ĈۃhQxx)RXS CGX4k(j%H5A0R'db+n۷0Cw_tsdZ\Xi؈g8UH "5@/'iсXx1Y @ÎH;v}׎~THGXP7׏xsɸX&9{E'~v|&䱉VV|/x|Hɑѡ|yX}'xgi.7Hs<&{xs4+rgԲuTŲrNP,EQYVyA/g7sXׅ3xR^x|A(hulRxRWGCvQ'^դLVqq['Qr}ghB蓚Q} f*YK{yU~woNʼnBִuXuu!]yGnWyhV3&Rgtԃw|7q)0盬ET)( Yb ~ʩلf(*LY2.7HnFם)֖ v0Y|'^yy:([I`1O0ɠ_@J/cDtn ^OA ׹NĆzcWUElf-:@I.8YaGXգ06UxXWڒNIJҴ{^'3] ^ڟ_jf}cze≦Ê#i@ qj(URz'VʅgtŨL:1zz呩_ȣ[',<:傣Zjz j7Z| )l楷:HT0dR:.{xFÒu(k,WyhK&FyD&ĭ8!ht֊ǤH }qpx.%j8Cр}RYvkڰt2D8Y.q7*?F)/FwMʚ} axiKƱCI('n4䗴w"4y_4SwvԞRLI8نʧJ vxA3WY\z8=G 钣i"ӛĚj*eHUUMoUHsJZjW lIrtw99;:|8U˸홠/ka({k [)JٻP>ꩺ[{?eӪŖǵd˕ǻTĩ׻ʴO?1OKeMݫpT)W^Ȩ] +7Z w~:& zY֪4ᛸGu< |\ns0U{7eZQJZdyL`uiNh|',+¨ B?LEJ$w'Pt#J:8@SC@V$gܱAD|O]`jIZPj鋌ZbqU-#K,spLF]̺f:ƗffzK1)stMejER'2c+X˙I)[DnjF)")0<)|ɇ ɐVofi0T1‹T?cQ ' 0QDok0͕=|ΊMqH@M{Y2nyTj*5{T8Iwʒ7w irn|l1%v!' =;|}`P&}jmaɈ6=ꂥmX˔}tmos{ԅ(.JY|\3.׫؊+cNMZi,|kw"sEݐ{b?17Ƒ~ް n>.t59mA2܊Dd>?q1N:;.1N;.-AHN㵉C]; ('>?=~lAY_`JnP.O>q>wcW.P qjs$Nx9WNOQ푝Qyt^E~^<~\豊n2l^nCn[1馾A旺V^>d^نqz>>Nt9>,N^jE*o/~^ ^NNIyb!.,V H*\ȰÇ#JHŋ3jȱǏ*) @PŤ*HᲦ͛8sɳϟ@ViB͔4r̥PJJիU@$b=H ƪ]˶۷p=*MAG)Č @` L:k@*;Ę3k̙Yv;=n_ҝS^ͺK_,.mi]ͻeD2rܦU^μ@oaZ7ËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n'7G.Wngw砇.褗n騧ꬷ.n/o'7G/Wogw/o觯/?C)U HL/,'x?R 7H@ r GHЃ&LQ|! ;( 7PC?`75<%Љ1l! &QT_xE$f1]"D2pШ ~xF*70sE/^4 >pvT!)@o+ NЄ&9L%A*@ԇ'?3jP4H3ґt=,(Җ(KYKDN7m`BS1xs? $0Q3-(׉LzӪ,R:Ӯ+j*ԑՅgU`OVS6PZ^ԛau;G1tOWkXV~իLtT(]W8e6ntSP]3(̥NRTmc?J].;X}Xie:FB2<=.\?LNbn'qβZ$&j KȚ^׊LgUiybb?Z7/*Z\~ۘJԎxrKqM}4%LPΰI GfN*!dD %8O6αw@L"HN&;61L*XV򐱬.^L2d3 e5yn~s,/IryY;;64E+Zv3@۹ǖNoiG{ӀuϰѢȀTy|.ti׺ɷ~t]OC.Tz A}dGY@imc~6\WvϽ\g^6}Lכα},oG;{ߕ.DZMnS;۔v .vC瞷ۛsoL{|5pwGىִ ?xιís>q| G7}b9nWs<㒖kq^?8չn7OO~'}֠&Ӈ.;3o }:͹θd{fvʕ îf|Aз{AK_EjX~޿=7??T\Wƿ.qtkkHf~(g 8h!,G H*\ȰÇ#JHŋ3jȱǏ@0A=X ˗0cʜI͛8s92*'QzHtѣH*]ʴӧԫXjʵךF"~]˶۷pv0 K!@ܿ L8gX) :oǐ#K QQ2NIϠC'M1ݗ'S +װc3@d- Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n'7G.Wngw砇.褗n騧ꬷ.n@1o'7G/WogOws͋OЛׯ=w_@H0~;:'U0̠8 No@(y# &я(xF*<<!:APS{H"q~G&VaM|`D*px"ΰ ,4a.Zpy AЍ |GGxh-ϏbaILxHPqHqq|^"Q41=Mn&kc&R{<% J4~\4 GV$RA[2'a sqT;S:kf$aD]leC.f1a #M3LiLf‘:IzbO|&5=}Z h/JҔe%ۉLP24ƒgC8O{ZR(b (P&Y}T@)IjRSm<'=9QnFrԨNwQְY7U=@aYMA%4srhV͇լ49OǪQ|ޑ.,!Z](뭵@yZoh'2xied[yWS K:Ӭ= 4CΓe%.cl5A+j;E-:NlgKͭnw pK-rV΍n+ͮvz.xNj\w=ouӫn|k־ot[_=o}ݛ[2M[`NF+aa 0o93a1`6ï%maaƶqwubڸlS@r[$+9 &|_*߸ Wr_.[9ZcL-C7eNɜa4wYXfٺi|yd Dm'?9ޭe9ε}f*9o,g2wԗ'meTԉo;@#=kUtLۙÖ_P{i.) Qx4bG)fщ(bdAbQv|FL] [7I "І(I:4f  Yx4 HJSҊ,*[IU^.qWr !zN Û+KyG#,M>}I,]z߬/8b,f$J)S&ӕ+J[.s|J @N ]AwFctdCPQ62Hk6Q( 9OY- 9Жѥà )ə~2 $Ȩ>\ꔌ hH ErS2nVd*5aJՈVuUN7ũAC~*tMZ N k QPnkUWϯ FK,hRv_d7Nͬf7z hGKҚMjWֺ,lgKfVhqޚ pK.r [2w}no܁pV ͮvRwKW5.v7%oz3a-omYZv of@͒oi^W;a X|MSqw[ςXı0Anb~e+V%αݻ{Õm+d!8(۪5gW31.{Y=7k&3$^nxU|ervsc+bu@9Fsg02:~obs7i{4GHpN4C+&muiLzϛq?eXףQ3(Nvi ^e;V2[,m\Ρ5)w[.vm=b˞թ mm[omw6s5Pߔl? 0]fv9Ϧ\\,7/+h׼8Ʈk\o5yU]Π-^ۑKv;N!,) H*\ȰÇ#JHŋ3jȱǏS  ȁ"3y2cU NhI͛8sɳϟSW*)&DJJիXb})j˗j:PhӪ]˶ۜH (P3fc߿ ЯCg%U]#KL_W>Л` LӨm>82fƝݐ۸s|ҵ?رrMYȓW&gt%kνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n'7G.Wngw砇.褗n騧ꬷFn/o.{7SGW;gwcɋO>_}?/\o~+(@~#`X:p}$яMcT!=H; ЀC W♰$RȐ{!0w:l }XBdg%rƈIt"Y"$>:T .v1^C >PxI?&A0jdcS,Jq~w"I#jэ !Y1Αmt`_ tDB%'<ڑv>rSSl" IҌă.'QFͲ=e xJWQ6u#+YQrT3=@1/xFR&KqZrl3JQ.sҼfUʳb6ImX}$A9Y%Z3jH_Vt$4LS E@6iXVxd_\eʛNԦ«Bzs k`7XMb:d'Kʂl ?2z hGKҚMjWֺl3lms[MoKMr;:w}m+]Rh;Z x ׳=iӫֲ֥wC;_m߫֞a z3aF?'LaVlKx E־mEb/m[ c ػ4v;W8q<"F9&o; Φ5kcyXslYB޲b-yp~.&cR]:OaVF1]ˈq^B+6~4' Ϙ^gx-ouV}slyN|h@rSkK09ӹ W3eoyy '{gmuNyoDyG{[Q'zջu!,  H*\ȰÇ#JHŋ3jȱǏ'P*0ɲ˗0cʜI͛8kVIdIUYѣH*]ʴS=I jʵׯ`þ)%Y(˘3kYrpˠ XLӨd(U ۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-6RI%Thlp-tmx|.iMru+G.W.g7y:'k dz밣z~춻:> OݓO/_x@ ?wӫm?EOxLR>o;OB?$+m @, @%x 9g67qpmS[;iB*D6;dNΑ~ [zΩ,5WLl[NuMmFrKi g[l5| e{~u~[8g e{vlڋw(#7tuk[W݃P+Ϲx]q !, H*\ȰÇ#JHŋ3jȱǏxW HN\ɲ˗0cʜI͚)TRc&E#*]ʴӧPJ%bg7 PEjC^ÊKٳ*LƝUImr˷߿-N` #VU=[L{Z]1L PY;7$̺װ?RzВAzV@ N\xΝ=5>Of{PɊ$P`h_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n'.0\]1G.Wngw砇.3G騧Ngnz밻nN:゚|O<E<_G/Oo_g=\3>O^Ͻ{> =8~η4Qߟ>7C0To' t҇~0S*xA2 JN^h B.yC P|7]OI?&a9B$"?Bd)! Py/ `\]7CƕrF w tqkBF.F9u\ >{G L#"pFb0 :F8NcsE6q'#^8JM҉b*d#ͧ8αaGBNq'(J>}% [򐱌 Շ*Cc5IG&C@6Y<7ahe6󝻃gI…|#-8Y*oGh.O̞ NdB)ϊ`g?6J?rT@ Fpd[*+YX.rkv٬9qwl3и6sh|e-U}rlnal_xDt/3sped/٪sK6yK/|iMҠ\LcZʔ6t-cEնv4c¹M_\oqnmMSƴ=,TƬ<[rJù0E|g976MIו6kPojϖ2 edߕNWp֛mKm6lƙv-nwg !EWNr㕅9g!, H*\ȰÇ#JHŋ3jȱǏ Rpȓ(S\ɲ˗0cʜIHRD@ JѣHRIɕ9JJիXdZ)ϓ)~ٳhӪ]{" O˷߿.2ϯ s ǐ#K+̹ϠgV&b@ޏtV!װc>8 >I@Ƴ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'mmmPG-TWmXg\w`-N7Mh}lgmvpkvtmxs7}}vMx 7_3LS.{yon砇ns= =8}zW.8ФGg O^ފtxL "3O?<&hІn$ڸ)Xt F7юz HGJҒ(MJWҖ0hFcJӚT3NIӝ=PJԢH-jPԘ.4}*T}*թT jHӪZ` M*ֲԬ/%+ZWֵZkV*Sx]3~*_p2v%-lGX2vrmd';Rhf!WN"]= Z 8E-HUXΕul?ڂvͩV#{6uf5:ܭ浴mp5ܸ6-mgUoANZn7rK^ђEr:uVKvjto[WΗm[K׼Uz{ខ_wj/_vxn]P5qp|7n|7/Ѕ.qc55pwU"+$e1Ob㒷ްw{k} o1\V"V+i\5k%3Uկt\gNdUL5z ¡f*~ bA[҈%4M{bMU7MRtԘF- Nϐ=KbZ/WլF1!, H*\ȰÇ#JHŋ3jȱǏ 39Aȓ(S\ɲ˗0cʜU@ϟ@ JыRoӣPJJի'SdN)8G~5< =|yQW^ФG z42;n88LN;xL 9徻ζsG?>5_|ꏻ}4AK]EЗv=lPis_aL!>ϗ=#1OzҤS?._<}{H/S·>1.{ l_m>- 8Be'_列T% B5쓝ph@j9[&A2.K"w%}㋡7xǓ<p]<h"D 3 {gD:*ЎGEZsXD GGz3! 2I\D5nM$8FцQܣ?{ `1,P!1ݓ$$HK%ʑ4:c#C(ѓ%)ґ}x[-0rʛD &l \ ќ$&9غM85>xB{&~r&6GCe9sD75S-dmhEGJRKti[J%򲖠el !'ͩ+ujNt @?JԢHMRԦ:PTJժZXͪV:ԭz`%jWJVhYֶp\ߺֹuuWW}T `+b[T2}lU#+YRf7rvgXQC N d(iڣzv}-lgK[֫5jn*۹v ejo5rUkr\u.a;N}.fkݱ x:uU-qjܤmod]bQ B^w]uL`׼{ޠ6Eo{`J[rWݯ CW1[ x 60c ogୋqax PI|b =QRw1~eθƮ0{u\ 5@6kn f> f~[G4̀UG3whTY p8Ez(HAsٮ}d7&eu3qa=r,nAPfݰ ˡz3mAqtj#1S d (̐m2i$"[FȴA2ձHܣG? &PX3vcd2t1ucI*ugA~Ҕ}T1aS%ʘ }!:k*z\aKpp%%MȽ8ʱsf'IϽ|ʬg1)OhvI#5EeKC7f4Cd 8y bH7ȏzJWjԥgNJI'"j7eN)STl?ɆJԢHMRԦ:PTJժZ5YSծz` XJֲhMZֶp\UxkW׾~ Z+MbX2tu,d*lZVճd_1Қ=jZn}-l*۱ks-pz5|hd@wrY-u]fe5Wk*S@v[V%n9k[f u}U׾5H~;`m{w-h Kt%oW5b5ok?zv]Q_Gx6QCyֱ:ńqs|ƎqfEy\}w z- #y% @N"nz`V>-0z5 /h?CAD aZ&Љ^ANE%n~F$B(skcz:͎r Rq鑏O# ~K)1/a\b53y"ՇNѓC3БEQ`FCLwCCm<"(gIˡ1l-V q 0azŴZ// =T s1ٰd Ӛ)f˦) 8IrL:vOp泟U?JvMBІ:t}Dщ곢%(F3юz FCJR|#=i֛}LYKVfU-;#+ZNշg1KӭG5nh{۞ӶlVV^'ai[mx ש7.9j5w+{[NRӵ.`g VFxLYVyE0z֕ os귲Y3L_Bï%Ekמ &o8S6pkSځn`ú@iCl왟 9#p猎ퟅ\ЈN4Dz猷P0$4< RN4 !#, H*\ȰÇ#JHŋ3jȱǏS /ȓ(V9A0cʜI͛8siJ&y9QdϗD*]ʴӧP*sCTT!ʵׯ`Ê0} HʝKݻ4} d s\~LÈE/u볬˘3k Rm)!k @h9^ͺj{vl /ͻ q~z PУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Ժhev+k覫+bKڋ,'. p> ԯgoqmq,2#TAT,$l37;4=Ϝsx@tC[lr)k%A1K(?\cݵBt?j=7ݪͶM{.wKd47{/̄FyݷԀ'^8ܐuۮS?\sm3ϗg3ڂι r~뽸ߏ[mo➓v#2w;&N X=#TC-d4#l&1xm[:/*ochD+6nvPCd tW mN$NR DO̔]+JRj%,e)9Dzlbr/+1bZL2f:Ќ4IjZ̦6nz͚8qL:vq @ρ=BЅ:D'Jш6E3 ЍrTH)yt(MJҕԟ/gKczϙjt6%'A:sԧ9=)BsJӢD==@t25ISyNէ*TYRv5]VZղդggSŹ)kE WvʵtEM ӟ N:؂tGj!!,I7VK`'PÇ#JE3jȱǏ CIɐUi(J N:D򡇚+eɳϟ@{\R˘;EaΠPJJC4mytISVӪ]˶@TNغ2C$VAP ,Z5 LG*S5j* iD԰˘V!wu.rӨSL2ݮxGL1hCڪs [^@@'A4B `УKNسkνËOӫ_Ͼ˟O:%_~ (U()H GŠa~4aj>8Q>]Hyx>DN" vbF)bbxRm$Xi)Y1YR|W Ŗy%GNQ%DT:ebZFY=qy#Drњ1YoF $b9uIZ類&MhQ^8yob!f ѦnhFe٩zjz*h+Bz,\fj7@ZjDǢ89ުMڪ"žZފ Kn+if[/. `nd.i|>N*dnjoJ\p \j2so [+k jq&w2j)3g.=kԍn3IWhH/<7;;[6<WqBLnrS쪦AtvZ-5;\uy <Ïbit#p3bLjm(I9a ?;sS8]\Ѩ_mpojG\5ih_I;5/sC#ůF;~:H_Hn~.#*X.ʟ!Hy{4%`Ad)Ap='D\8f$R 1ڐ<0Y4C])gHTFjD0Br |'? $ QhR" Bd,3JSVprC4bDDfJ$dX0L[*r 'p1EXM%QdOra' OԩCqP=_Nsf!7.j<=b  $%T4Ќ<Ԟ:8 |BL;R"E1ϒ\-kU!pt+"2%E>>+P'ՏEiMHo|ԗNԧL*9Sq =cؤ:qWa:V5\dYYv,gTZL a6-UK;|CECjʌ-BK~te2kngTsr-p_{^7*x[W%y. תAy^r;UOao"v*naYPwWI\+8/jsͫZa v6;b:j]pI=/BoTb\Vso\_Q֟ɄNYKi1-IޝP$tU{ߖꤗۄv ]-˖Ʌ2jJgxb>U[(nyB meez$t~qMg_S̽PMٌCΥb-ZHKk~x Nӆƨ4Z# j ǢY`VgcV=M6BviJT ŞYlֺ$AKTO:[Fa=#A3g{Ǭ9D߶Ή˚p*2k]Mր{7LblM;UqL" 8Hz<@#xHwDwd28ȷlr$G?C)DAIF zid=uIrP?s?F*ҏI)`g 'h^_Q^K~ ${i>v=$vGvSe y ›xH[tKW{ˋ~xcꌿ:oŻx/_} xןt7ooTv{:>R@wR׭7?'|G^ зCoLǖ~bkg6#Q:h!hTgfLZvtFZ)胇Uqhd̆k&aŇ %OUhƀn5kW(7LV K7|^EzֆX؉fփwhL@87CƉ&cB#GZunC5n>v`O4Q%6Su-HRk`tdEbl*Ft5b7GbH(HRhsֈݘ.ITCvoef@xjɢ]Ãh(}|Fff`嵆mUhu{cej}_v5iu(m4\U0ْ̆uȶx(Ȉ "$ɒAV(!Ra>Lؑ=p6MYvoqѳv)U:J;ؕ w4PCI3{UIi'HJ{Nڶj!ڣFJʭw۷S4\˥^ 0c[> _۪dQk8${o6I}c){5Km8IJZ;؛눓 RoK* zz:a*˼)^) JH[TZKlx۴"DZJ zk8j SCZ|9+jsi* ˮk=1d{2ѥI[X{˦k޺{,Q;;_̌$^^~N >|#t[~= W['"w" t]m^Z,fx6=ޠ2m\MCO(PCzLŹnUyb^,@5 ֺ~iiWc\Zo$b,2c/LxǫlO@fBX(ٙR>?8SrR_XnmT%zC(o* o6?lnk OĜ __' " o.eȟoOځ_8씤 oP/䟄/Y5~onEk 2`A "TCk 8P@2>XcŋCqÌ?dҥÑg>R%ʗ/c<͜&#)bʠI.8J,2m:$H?N:i*Dنa>TiՊqk\s>_%ڐ_WDx.`Vg>:3Ϟb%Mх1a@Ӌ:&][i[m\{76u*gNY㵟mrzukGw;^}wbӯI N_|l5;N~?]tϥ3h#l!0k@*鸄&D: DK-9O5@,l ECFL!"0)C")D_Ѭ(Q #JGR^S/O)Cʿr<JL,ǒ,K:tLȷD34SO/0˺hC \sCrƆ д@B й֤4NeN>!I58U2V/UU"QԀ!,J6V*Lb =,Hŋ3jȱǏ CX?)FLJ I͛8sDh-HѣH*XJ @]"dOҫXjjUj=?]˶mǒ)9`YVWmI`Ҭo }+^Ϲ* WQƘ3k渁d) S^ͺװc˞M۸sͻ Nȓ+_μУKq5+Ğ;F5x>dž/oO̿k x]v(^h-{!f"DlP]yȠI80ڄ?Na#F0ba7(ލ嘓 |1&H3EK# ~AID$KPXR(FД"B`ִ%]!mi7v#{^dO؞x١?fg, v{^yAj8>Jg;ngYW^)dV:োZک9ީKRګjݥ(I ޟRꝢΉV0&eN%eGb~8Bވrz鴴¹%[vb'{7[Em컌^lEFzK̯*/Z bښq2l&R+*QU0#AfmDBτt!lH@HJ#+G3A%L;g/,k!gMS8bc@!DZ F*ʋ,d-Z'VBOV>:qzj",p[Tx<'q}#9?ΐV痕P=[%Mq"r*?H+*<%LJe(xeb~R/ƞ`<&S_r&\Mqݶ'vrk( Nq+8!p!l'BbkyPS^h+?.ԠjAh,QR֎aBG) IOb)\sTS5'+$սjQEKFIԙn5*b*XCrUX֩ $_:MY)S ZJt$@UIT:G'A;Rjb>Y"ꇣS\ZQݪ&shBUHf.׶'%¬ht{?Ih-,MB&$q3ލR*wR۳vI i {~V>Jf YVV&iiYY2»i> %`g!MuŪ^Wb\#lAiY=[Ќq ,H.D^ 47,^py`[ LNžd5l]9o2}gF}x[_v&íL=]ϥF jey38O0Y ]l61mB^ԗftfHYi h$яM a5NC*4%!%Yìy"YO$iL"ulDWdn<{Ȗ5O=mgW[0I4RA~Lm) {oȭ]p88&cw~vcEcD~SWb_g+g5X(ƀdOve@排!WC8Wc(TRv[`g=|_gx\5e]E[( %E!hmh8' D~Nh"a٘w&(eN؍B8;UU`Tf+ IVHVzqExk_G!fdJQ;樖HI}!4AFdǨK e|988Z1"툇1ɘAsֈUȒFaz)d*Y >e[i ]8C<99޴O@wc◇yi9]وjّӉ h02}霱YIYjƞRM9 O)YW[X\sȘi (LbaX E! Ɍ蘋*W: V/xJbzJ*EƎkIQ%<f9ܑYJ4 `SVVCŐY71HvR*Y;wwחu*!YG); uhީEC:7(\0削STUivȧ ) YIIڡp:U$?hD*Jhʏ0dd i&j(:GJ_ʬ K& `euO@ ~D3bتm fI .:*dj_p:EZٟ)i+ ;$יڃ*xᚓK[r%{/y3gR ER eʥjƉ%ȠaZȂV9{V/zGJتڬ0;o*֪\{`ɭpJ'kS>ʁ>:}ڠȤY TH"ĺ4jRQ [V>j+*~)[1ۓKʜ{;+[e벯 ۦ -˼˝ ;=TQԼZ+#I 9bZ41;=JUL暭+UW˰ƚYڿn{<̰ \[˖;b| +XXIm klG&zL|֔ϻ绹: %OŽN 0; w i O{:!ŏ:kѢ4 ,;qy{I NLl<5Lы^kfȭ(ǰFJsD 5Zʶ`bڲ8h ɑ\lu)t{L™L ç:+kK˩,ő)ɡ\ {ZiDŽf[n lCs<ǭČDLk bk`|\p IVln%mߌ- y{ܽ mID;o׬Hz7Z*̻lX*nKHXj,l'5!](˧,q7[ QɌ3<)]mۿ*Af8΀$=BM1 M h(m}} {ĥNݧ{f&=q ͽ|Ğѓ=>e3Q:L͈L=>Ǔן&^~-.-oΛ>CN<٥^.g_ N:މ=bfܟB^ۻ֍ַ-عދ Xнs9=%AsJtu]3 tvvK.M^#'d-"MRCRzM? &|'/ m-m9pC9*D}ЎO;^2OܝΓ!yYoMbI4ޣ;mwk^FZn.M})bNfʗY!!v/.[NԄnۄ&۽p)΄bҬ[m`2h_H2BieET#On$J/O?D4?0oÿ쮲N/ٿOOPɇǻJ?zNZ S#3p`A&C{B\SWt)PHQT:tդ-2T]I6ȩ1-ԛ7bى%~|a|#"H/y1Xw̙'o'ᵐE^ȖǏG$£Kj blM^ݛϤVe5`'.7nsvƵu]g^g.޼9Ͽ $Gk>Gy02d T<\0tLo :0 ˰JA1 "9V):PH*5l54LÓV.ҭ{kQ-`/2# $/ƜTP2( m 2*˰ .Z@4Lj66C2N ; 1I+KNC%I4BΥQTB-3oS-̉ǝLѭ*տw{UI:* 3S)bQ+V!Bkᬵj][oQVBRAunO !,J6VL P E @Ç#JL1<| Ǐ CIɓ(S\ RaKUR&B o JѣHG!ͥ-iꀤXjʵ+0keZ_Yy۷puNu=8' LpI47]&_2P5Lp㜐μLieza΂hAS9&Ӹs9 ®U7pУKNسkνËOӫ_Ͼ˟OHrYQ(DCRvP G RCi"eKk:%Hbf#u%!}`l򩦡nDhWu"'}hX]*ѥtfZb򇨜 `df"* n) Yk6j?`2kGZ+M [F["d6eꬰBlrH*龘.f{T- &L+kZ)j2뮜v+V*v,ǬN0x MBF1.S$e/%!lhƷ1\D(-9C@)IcC?8 |H#E*27ЂH=,%h$g$#5@\d IҔ%" 2<ȑ|Jr4J/#U+`KE2 C%x^>$d%or lRY<&\>Na?KpӐE7}IrG3f0Jb.0T4QHl*$;vmDT/~$}@5xt@i~s|D_VJJRR2ҥ(' EQjЎ% [ٕ7B}!QbTwQB\*z<*բnBj}*DLjd^u"!FN;$l*B4h5!N%YZ':ʌKFrN ttg;7Vztg8Ê&q,cY kv=u*I Ӳ3z'hW=jwu4mIMLi,eɵ+ђ%l>Hf$ev,ӕ\uduyI䚷I{/?JG]>;uumeDΆeMOzV U!m+NK.(zCbW7 XT&1E#eĉJ[b23*B5p \bȾluk 8*'-e~զ 9LntR~ =bN]tlRX1IܛK3x/cqv#_FԷ%)3Y^[/㹼z6A`GĴeg}g7zn|_yA5AgQZr(kȖJ2ReG˖1K}9D38F,cӴlȻUXyqDz$gkDw.Tk Dlp9w>q[=xD*"<#,I.sS3"zH:nUGrnmF*ҏIw&zGrSy)Aޓk$HͻW'_"vX OJᏹwo}>Oc$gA&= B t:OI(/y%> ]#7;/$<#$zJBosI +~@=g>"v+(#>G$S~(۽_lگ炗u3 yƓ$~$'tt/7z6}'u&r,Q{xwqkyDW|tKGqAz$oF#Z7bo,n(tC5nIQndWum`mc*ޖmUdהl3'gleC`4mHehdkK†%"dElfDIkb&k6aZҥhbWF4jDXhƇ6ein^hn=inm8EwfhXAieՄ Odj#TeзKǶ~[lq5ЖSW%\(:D8IYG )g &Rz*)hS;fY5:Uzѧpi1CɞHI騱AɤbJZSy#꧛ʣ3n\*=uT4Z^*k9j^fՋdIP:<瓞enjܶ%ZΈ)*Lxɭ_% ;3hɮA:Jh恤HzOV̪D(u4fSza6gk¦$Y ,X*X)jĒʲ f TIݙISD>˴NyO;yH+ԹO哂 5QB;GkK˪<敁 [6+jk^ .Bvf!hI~NV*>2˱wUR>H85@3H斵5'1چʯ++J(Ji5*){=H-P,~ZS`d̶ .%! WW=b1ޖd'I&6Q:ymA׬Q'ވܷܿMݪiW%M劬hLk=҈íݚX}l^*^$]Ջ̴>ܜݐݢjqNޛ諑}+>]X9[] LVVIym} /֩hu<{nMɎ1KԖ`㧻"_|FMX jKOlEb vٝ.] #Zn  +oMu^'7r - i%VlMmցA0} [޼BbaNjٱĬgNH=)Krʏ^|؎*$X㾶jCͮ!#%.݁f˾[0+NH'讲Β][J O'dnl$l\NlRO֞-q^m9~Im'hO>J,-?JaPǡ>$$UHjz=oO^g $3A.D)#PE)B@ 0I)UdiV!͕ ITHpMO1=yg˅+V$CsSdL)UYYƌ BDx5סj-@ ­].m&|,Ҟd";t-Hv,\dTbRm烃F~XQOU+vfȦu-ϦQBrCҥyMZ=S|wm?{&2T}Lƺl%:X|tUj|}ql/@@/A&!tA Z0 A + PzD[ڐSd O8񲤎54 .;Y-4̱NO^*7 ˾$1,4+6 Ӫ0{. *6\2N'b#h*3N9ǫ1|rES3 sTQAR=5##M崿0bU;_u::ZT*5*Җl `V骻n-dqY /gs؋UN3Fw_Y*]i7NKN2.ӆNbNb)!vMn4v1 hltcˆrKkM-7eEf3r&!UQgM1#Vby4Gh1bdS0g%,[ ym bj"( l^4M1fI,;+-I"?[ѩ] ʨ"kjުk@ZF sbAv N[~f*%{R ˥ʯL0 :k¾N,G~{oĚok[ZBh#$1 {lpRKoj1ͣ,iǭzLt8`\q ' )u"xsWvs}\B{0)gJna{l?ۜ7ƹzvȚf(vc\d:w*5CK&h΀85 Ik}nv]z }퇒^T$x"JI,߹<3g=C~xoG~DM/>+_׏o$O7w>@+ þ,@ NsAρ 3}:j%`P\H!:(z*y@͇nBCQ9G&HMJ^yD IwnRE?UaW+rjIdӢ5NHcO'2DIh$Q d("?d#\t'R-}AhE;돑,DL |xɶ#*92^h"a^B|P#DJ8*-MuXβ%#(/%)n&32ٲnv3הe82NMʕ# !B /@,4 Aw3:t ӕ!?CDSd'8@TUf7(9{JDPY>ӈMPFI_LrhG[IKT/R5WBяf2ĥ&#PkSr %!oS~ok ˂FS 'v| |V V{ j䜘lS ՗PiWa4=Hovդ̬d-_i]QaO ͯ.5xu\T+]#d)tѭU6 S6g;XMGg!c+QZ'ByWƳ;ʤN>UЧBOJנ,<*vוeZ>Hf*]o۵@ҭzVӽ}e}j$ikK1VNssMe\%\Wwo"uK榬=oC[Ûx.[;J'I\`UBX!RLG'դvLJ דDngRfIxƉ婇s3_^EuYLz=l-kpilꚆ=(UkOR o[#)e=4-hz9w"i xF*0<Adوz(K9ӡ4sXݑI sL_w&GMVS B)Dh]g{1Nv'c;H?&!lܩt q[!H$V7"v{31vwSoJ x7t;tiQӻ57H2jO6w%b#ȸnw5tAldӺũ-o6Ssm96x)tN?M];\! x=~jtθB ^zSޏ2;}0-wsSn?4-P"9ܬ!Ȼ16.w,N-柦0Pd&Ee_Pv_Z_rb9` uc$dbddb#WaG3dWc7(Qf'c؀-hctz4#-vH*Q5$7~Ovdec#ae%6OcH6FM6?xFS_؅._&FZY2u-f$f K`gi6I`q7'g!&z]~]XgugO8]ރgP%Ph]$ZE^|A1aI%_%Ee\R V|UGQ(VxNbG(BeI 2eUh, O5SUs&c, \IVWeqZ!6Xg5<1*E4ZJNؠ_OkF3ڠ)*zwSjvIeD'ڞzجs0L"j:Lʆ:t埊NKʣ=:ZUZۯW=鬓e*XÚ[vNk& \5xJȔ馄vʧkj!ũ*Bs'۝ȅKx;J# E;j Z4zTZ /‰S}jR3`] cHJUjcHrq.U j'f$7E\YI:`Ja۰uߚx E=I Zi4kX+y;X kTkE_@_J^:[5UNjfIM ;6[8)7;mr{}۲2K {TC $Y|Bb;JI[$M$Z^k$ӛџJhjĶ{edjJʼ1DUKKܣ \Dָ_%({u{`-z`;d/<:{ "Ⱥv [5-2TLWV'I6h\K!;ͻ4K+uTm=۔?[<YLϩ˽*{c{ܿ\jLKȼa6!:bR3UUe<#f+h ,V\̱*̇yRòwk{`?N ]kDyT4Zdl UՑŶ,EӺ!{j_yºGxZ,}J˞y'|˟*ɷ9[&-6R87MӼ@8 5-X@;J=)FC#ӿ -E,NԨ8ѬPܚDdYc{̷G/=$ *JJΨ{a}۷LՋfݨΏ*&dVl|ʫ̿Y4 פȦ笥 ƸҊm2"{ņk]V ܎pML;$D^݆lŎFN򽱝;N}KIԏBӢߕԒ ; ܽ8Q2=]ԵoܤʾԬ?F&C\(K+â]֪=\dތ!j#,juV]4(3MRMø*{_6j!;ϗAм|/NThTM,݄Az+MwZCǹ^--Rm ~_mXYݱ^ X nߤ̢J͝~k$a٭NaӞCo/E~+ީ-&CC=4vBnVLưDUT6ƨ@g),OXvY+)`~ pZ%Z?H_w+rl$!~pPyɗo=F_}_wOꌊ򰹞MzS&`־O"6d 'A\0aC%N ĉ RDG1dH)UHp#I&WTXpń/<'Ȗ4R!ƢH8SϨTʑ)Ԍ1NxsˉA}H(QWɮ*LpRhσoRYVEJԋ ׯ*n*b54ϛ1ۭ`dɢ+eձpYa~Ʒogh'TvnI!*q+'t}t뢫g>vzV|yӢ=S=S~~~Ͷ߷~+<;?0͟₫m`2o$(%иj.r$ 5.TpE:l$<IƎ @ H / "J5{D:Xd ˫î[A'v(IRF7,K%k2ʲԦ1ϳh2$ªMAQ1[5kL<߀;#kTt7W9tIT9=OU43TO4Pv%QV5r Vے Vz Z{kڰJd.[L|ZgX5]v ]\sW^SUWx)W_9^zR{ !,B>VSL AL` #JHQ"*jȱǏ CIɓ"S(0 UI1"JU\>DJ@ JQ+)AuyիXj+Dz2E`խpʝK!KLPP& EsBº+^+^?L-P*.˸u[z0>lAΠc˞=T4ClNan Mq)(@ +|sC)>νËOӫ_Ͼ˟OϿ(hDM)h ]7!qF8ԅreHy!P %l%v'Պ,$#V4zvcg9ҎV GDebI&5YԓIYbB[%Y)QSMabeEhR%ZyqY& ߜ^Ig(͙ѡ!?:&v99q:*(%Fay &nJgQ yjP~9?&l*2&Gq6{Br˦jkYN( ("ʭImkjzl{2޹Klvq2i*;,Lʌ~h>Ksiz.vevsƭʌo0 :Ò ~h~99{0KgAsg.ZQC@!˶:3g\ʑd&swŢ-}ZOԢv^KP.2,;B$+^ϊ6t(f ى4yEkc3K6BNV-̛,,mzX@Y=kXZeRy-?7|nJWrl,V9֩S$d$ErDZV}QQ1^KDO]!HCsIͼ=;}#kh#gW֫^tt۶A&[$]Kϝ/`P'*yIޏuCp͎:ύc[@!Asϣ\A wNq?>6vi{"C՞V#wz?vkD,'y]r$Ќf:~xf`B5lSEk5lj'`# S_AOAZ!a]vjtaX1fXV]wVi~eh|`g(X!gcBhKVcS!@hGI9(F(XyǤJ[XLf9ddQfcj{tlG[M9zĆ9f+(dx8eMPnMi(tiCVxDh/hh %hx]N83}X]։7VfF4!8g4jR/U5vhWB`lXFFlAvxFF@Ԃ`#8Q#adb[fUPAȈP[D؃)V.eMx،5؇dv>`c][ud%ƃ;cȌeޘؐVipeEEtZ":|mxp ꨑ̔>26yXxRXYPug877cxZ|Uj VL%jE&=TϘk8$GG(T}T{yF#)F9IET$Q8p?]2gA5'\FyFhWfttyyX9YɅڔdBNț %GHV鑞ٚg9\uZ3KIhHX=[Ɏɝ88iyQ)+Ԙ(qA[lIZn9i8=e˸EzơD# 3eLBtIf8 Y&9%%484ț)iB8`yBsUVM[g J `:NUP GHYX),yIg9JZT\VQ\i:vْ#I)j֛i:9Y Veƚ3ڞ N\SCюIO0jdy&lԠ#' *ZU¢$+|Š4ZxXjkUb6a\QEL5ZZIکWAi[]ZmZ:뙠-X4^XI]HYJYb؂u*!zaO ŜEXhɍoj:A+K0Z66ڪ/kf۳iLS57DJjJb.MٖUj ^奺ڵSvʬu1fкCsˋz_w[ykGVۣʕQ$Mj`1骟UˮJbڪRX1T!ʯT[:˻BW (ZAtJF'Pں Ĵ&oĐ7 Aʶ% k!ƼaP:y~[[9˚:[C#çjL\e/yȣZa G ˿$)i:|!jɂɶT* [d|{|UJUK_ٌHn] I&Ш"ҨcmˊUM1ղUs6Xٚ1[Z2a]cMք׃ɮ\мn>&֎Ѩ.{|.NحŹ.WWq~5_7.ìڦy drXHX"> ?Pˮ] L}^SQnWec]~:- .ϊn}pޭ..K O>\Lnń^L|Г{WᚏGQ֮ݤ*L9gֳ 34%hVnTB#ҽZѵ-縍C.ovxzln?DLܮp$XA .d)!J0"A2g̸qk vt(ҡA \ɲʅ0O\I9uɰ2ZDxI7{(4SP:t!ΩYnmO%LR%2lCSŎȣ Ӿ['S+_=T$=pnί^eݫq#C\`;ݮzШ@ <̳ӯAZ6dֱbYI6ާc.utqɳteCe_;oz= =r_sԫE]oz{f-^њ" l(# J0ۘ) <aB< P!?+ Q;qDSŇ`MF{Fp\G3oG S<"G#sL1'ĨBʹ'1<*{k2Cƌ(*I-S/9鳪*:W?u@Ftr6BvAw>W1@5kvSQ=iR cjöTΪpm^ʥw~sSX_Vw)JP#^ IT:&WQnȋ=}#e\ί?/?n'x埝귿~lˏ@OBl'H^T7 fBupCN¸p:"la wʐ+/l oF'2T]R *<U>rx݌8$9VbHD./pHH-~}s1! ꉰI< ;6g"u<&'@ܢU9Tg$3=҉/HzdKzpPx"*r<+Ig@D2̜5 h,1d"e>B34sL3i L%(GۑS"T/k&6ґl'';J_2W7(F~F\Q4aSkECCgIDh<-4Ac]Lr4R$q8:i6ҏԓC Qyٕ3*IE+Z43DR{rsMf Չ4]j6pjR5W< T\Eɸ)+Sܴ$B gS8*RP0)YCO*R kbPfJ~ciUeQ?k"6J,<[V8NlXK<ZڇV,}4..yW2Hr*\:Vrא]U[}HX2JymNJ[wQ6_6WYJR_^Yu'x$nmw}NH&T@42_؄UXU cH)3*!?nIc~Mbkqq7T'2qrGRd.PW%qec 19 FIEiV3hŠꚴO a;c{Y_U+ǻ[SQӛ`=jNCk[v[m{j~: $K{uXD@{ZCtj@Z(ڸ1 Yq:[8#˾ ˱R8KZMZ_2+'6~8,\zB6 [Koˠ9t[iyr:{PӾޖZ袶*F -H:nobfK𱁆+?;lqSˮz:m/l&'/?V 3J>- 1\.ڪ+8]UΖʏ},.u./c[,O{iiiNmԘT|g\C;f횚z),~M. -v6 F_̵t=oF{d/죧 wcnO[̳VnЉczުFVo'XoȤ 2rԣzc}/2I,X$R5tlYurYɒRhM3"Օ(l1S>zU{TRtx5eHnV& q+RiiZlM[ܙML9 Svl jEld5i66¢4nuJe[NϪWsiй#ضPqj=RZIrC,i yM*t vV<PAR-O˓A,97(# gCvs[b֊ld#9-˙Ȉ~eGg$A"Wr1od=Ӗ2@S̖$k^#9My[9E.A_2;*>|``HSvL)laSېg[m[b^2P[Oڍnߕ7 8mSF*U{]U2nR 'ww= .K ][|~䭼ܑw?9;~sw2m392xO]URkCvrϭs{T/zaӷg9ףnp{~WEew}[8>O/Z\Wk ѫؿ5? ohc<__|#qyωzЛ)Ey+Eđk_9Ro~Aju]{ ny$=clv7{TSEuOܷ>.SwSUgtP?Czsg| AW8|Hr{W?pr%h[ p(\{T0'TȀ*1z. 2{2( ؃ (T0ʷ*o;qi'u@`gW}7ge7~U8vSa]u_VaX~WMmgs+utE؄xww'q$GzGhn[QX785 K^VQ[^q؈}÷L耨g"aZ'TG]GHwz#{w8s6OU%qv*8N(tgsNcE~gmiH}͸NvXJmNxnوO۸Rd0PDqGwWyrh-GG$Hzwxy(J.GkII}X;:U~я3"qh1b%G7}1ĈMb؊,Is"XJ9V'Cոm˨}]~7IRȕ֍I HNȎtV؂1y6y_w.xؓI$O(;h eiO*\ekXdʄ~>Yw'ѷVI{9\^UԸu(Tțb蛗g)״Aؖf^tiy iVY I)@HV%9Ș ٝH`I%h$AwH{%yioY9҇iuT)FVI9כ ʍ ' %Y\ZAGE<4R *#3Kb"Fj8+SHxEҎZB։ՙUy {d\lT[jj1Hȇvs] }'o٧fሣXh)eYɜ,dڢ$ _iވ՚IgĨ{/SuʠJx.9QJ,xl U$y8xJd ?Z#Ѧ 3HJ8*졭IIʡXj*دZvlJX};mꝪZˊ[#Nhs讈2T  ˫3K%yJjA|aF7=KGJ!GE{kxYKQ+@Ck)GKt |ڳ SMˬ@pjqylX)끶s):dkQD$1;٩jj!{{[~m{;`'N)ۮ?۵sċʧ[j* TjYA{iA*k›]k̻%k^^ 4ݡ2zk;>[{+滑gA"ڷ-$ʷ5kM^JyxbU3U˽ۣ%X+ ,)!HrK riЧPJJu*D( ˒2Sp`ulճhӪ]{0E͂ $8 Kv˷ǣD *N,دǐѦ)Js]ڽ9iϠCZ&Gb]8Ƣc˞}1 @WNȓ+_μУKNسkνËOӫ_Ͼͧ0\]TW_GO(`lu 58!ut!YXUr蘇eS"E |"PXXҊMB5bQ$ aJ*dF6ЎQ!)9"%_EZy YɟI?^2Dž9vZ'P' H' ㎎NI(F=ɥi}OAJgVy$Tz*U2B:Hz(yd}X*O飣:gqk)%b45'_V*- H۟O'}$olB#"ip*;n  Bp|[ #!GJB e.$@"FxY0!J7|DQ, ?DAmkKN/fb)꧊5`Bx-WbGX!Yg, h\Cq8\\7J"FF鐒krH-B< OI=:g;dO\UrOo)\2$/s 'Ir$Df21MQػDiN3 )>r#\7E@gY$5Gk|g9NћZIE~fTg@ՖqӒGjx&@4EQNTh0h^s9#e, fԖ,'9KӘztHY"Ҧq eN ՘5%LQ>S$L iL}Djs9iUS)_)SS_@OZP<:OBT7 f]zOաX YϿV`M(`6^M+2},] L͎!aU\TҚP aVBmej(-w|{$!xF*&G&mH\.&яz/ЍnLBr׺, 4Rq~LB!=b+u݃^ېh@]ٔ~B}N-vh9^;/It#tϾuznO>+ULg}TF&^w;_ʟ[||_gC_ꏗϿïB|W}7 y{\#Znçnwn&{z't݇zPgqfw{xj}w?!KgP%Ɖh5?U(f'QrLA-(lUr1]|e~~#Gw(3B AuGy;xYX? 8XWWcцH>玿/营ZH'|zM߈{8@ՋAF%hXt:F)78HGTq`(xD4yxpiJ7tX7itU駈Rq̨Ygf(|v+(F"ƖO)g4z)DSHxj$T'H9ى҃,ij!fyÂM9`yMD鳙~W= C }@{2'DC1x0EHٛMuؘ~~OHiYH]_)iGĐhi&|! gIȗ~)sYX)"逈KyVg-3(dfD.!'ٌ&KY%tY]CBC+JɁ-\~ɜDEi6=Zv]*E#) ƝFפ!wmH(Kɞ"I6H &݉[vdH/ɢ"ڠ;G*[$gsy&a) wnJڍ9t#BSV>4 *JdWȉ8&Dq92X\L(yڨAI!يzZ8ztz㊍lڥ itʛpJV>184Y둯 bX[8vDCz!6 JD 7ۯǰ{?~[x9N",̒O2SG~8_LVql , ܖҧp{ƌJ&Rr5 l ۻn[şh_>Ȉ֋jlɃ E,ʱFS*C,JH [|0S3̨}dǣ+us}ȱǏ CIɓ(SDXE_ R\ɳϟ@ CKFcy0ń>%JիX2~fVIqS۷pʽxPX@Mg La/mXeNK˘\a] P̨Swޅ| BѱW[$-TblͼУKNسkνËOӫ_Ͼ˟OSY?o feO`O &hՃL޼6/3^_|+p-s.p-k oI%Ƒ~%稖0rckJnH[ 񞾫k ݸCZ±>?8K;)y!'ϑؙ Oo #H3d?u/A'|&y?*Pi% zy6PF"P O8:h,  5zą# ٤Cvp% ;B,b#"*LNK:y d  Sű}Z I1(~dcޛ&1$5Jcfw32DK9q}g$GёAP!G0|wIɸG&!gd#و<.$jt#%YPd$ɅRb%'-?j:Fli>m?^ FJÄcH@IF|3Ib" DV(.!o3`:9 @&̜C'9pf? M"G/ǓѴ)f;_#@Ʊ$B\g*WLwYW:׫vchBm&ldQٷNylUfᵷmf"|+FfQfݕr7Sfծޭwu+k.#խ[;6s{I܅ s߯mN",5^]~7{{vNf) sIW\B}f)?6Jn5*`guRXW[}rN͟gy g{/sKܺp7i򐟑#sWn<{ܾa7'vN]oz{OF>jيEw\`o|YN=uvZT{?|p]b_1}~=snZ7k~Єߙy5wϞ+?T'Hy7yppGWzw'']gFهqgE5}T}zut'WA7w'HW)(s/V1}3^5(q9hW;8LGO$X"(gLߗoigvGG'~Ejw ǀ4yVw?h\y'xvx(,ȅWxq81{}'}EVC(;ׂD0؃O x8t9pG#Cd>Qt'8}x8C5wxׄxQr'wȇShd;Xo8)qxH{k(rNX^rxw5:]H8x؎(}zƨ4(_ Sh'c[D ( wG{QǑ؃LvIn) BRtXvcؑF4~x`%YAyhx1)Go8pTqHw@ՕٓyNQIJ_֒ė%Fɗ\_KaM'da8%Pshpt)*>m hDžW2|W9Ȍw8XHhRՔ;Ry@YPHOɕ[^yYqq&77ّ4[6|op0&I%g~驊ئ'Ę?=dzzA9H)Y0Jz::y) kI YyZ>ʜ*hRϸ:}zjǝ[P Rz* KE#z=Һ?ۚgzCAE[lʓHi77*iy!Hɐ!ĵڵ k pJOh\IJI8˨ZR٘:ˠevxz>X$~ *ZD`Z0{qɲ: Ym;[OKG+I{KkڨM;QˊpJkjY빆4ڕq['d {A;:znKwPqA+z<ʸ[*L[n+˷Sw[" IEikk幹 ֫+* ۤKv9!Lې%+!,+\"/[)܁[OQ;âu,E,o׆;GܬSlxkCl[ll_| lĬkUBƛ[@vj^<}h:CF{Xjȸȁܴ>*Yz:L<}y:_F*m|\gLhYf̾9P8WXѳ bnm:I[RhȲ.E *Z+:{i..k ܶƛ//ھ(JHxc뮧N쌈r+\X[2s@*hJ n*?,œ*'维Ds Pܠ? J /ِˌXݶ2ߊ5Nn1Κƒpss4 Q}3kv*k=>;۪z~}ߨI63aK", Dt.g I,h%,U ; z0O!E44* 4vP)3

ɖ8[r$(b2%0#(b:] Y$c!9LmRLI8tdڣ;ixs̬G'C|r ='rԄә|"e)ΆF%t-K+2th@*W$ Q2` %EKJBSe Jσ2 5i?)z==)>OP s])lTjRkvjURgVQɬ,UiUiXjPzT)C׾S:eLqdT ع^Яq%buXȪɰL,J]*Wi򕳄,\X~6vb֣J%kTMvmovuwhˡN)1.Z'\.!";F1.ui$ەI3ɩwN*/x;\(*] y n彮;K)A/Hw$un},Epwά|'l 1w1-a"hN1_C}ngJ|!R;vq|V GU,$wMrڽnu/j)ɠGlY%4в_J67EmYY7v f6y뜝Y>}٬hߞVYgzeH P1OMύ2[QӣmSQYUK\Y?y̍f h-~~34:>4=9Ξn{}l4n mW#۩mA q+Rk.9ٷ'kMϻѮn{p Z4-[teM13k Dclc|ő]pL?Ʌ<񋋜v4C͚[fenU K.˖~w?.p;EW:Y~j$ejk65؝C^zi~,cyiw| n<{GÿvI~vw&/+ks7ŞȪGn+{_COu{[ozwSt&{CX&x}phCҗftѧw |7g|{G}~ =%}}x'i&WWy~L4iu?jxjCxl oyAyl\7K((6&}x(%7"G~-Wjw{x~SG(Ji}]("f؆Djhwvx2gs3\(H_TiM8zzoI%txGl"U8sSy9H;pCvWuXhMwxxl(>[_S}s X}(m|؁br,H˘q8c'XxvPuȍK(׈F֨XV臧_ӴXzhx%w x؇&RH Ih ׂɑ|Ibi(V\h(i)EYY9}nFt W'ؚǔw:ٙxؘG'ȝLh(WY Tr C#XɚYxiiIٍIjgIy؏ r穠ȥ|xJ1)izi*:()GZjsOzDʛ٧j*QZXm9Sک: Y κꧥ '!>,B?V诠? #J\8`*aǏ CIɓ(S\ɲD@JmiBLj8mtIѣH*]*R, NU9B`ÊKNJ:>9~Dk0) "P LXUVܒaB@ }̹!2\W_:sӟc˞` ʸ$`4K ~m+ȓy'<&ɼ` }]Q~*uөW4˟OϿ(h& 6F(Vhf !Qe ~fX(-ًa(`82#S=㎀ԐJD$RL"}Q6y%X@b餖\襋`Z8ŖMilz&IgIXHgy6gIwFśpɒ$IR):Q!3"hFjJHz eܧ".z&ºХ*Z EI?qcZzj j#j್jm$vlz HiͲm ll2&-:lޙj홡ګonD zmp.\o$ VL/Ll 0S,# 1pz;ѠJΥ"qĚ\gr#+]mx9#زrD [jT{RзD֜f  #^(]/5ޥaY_ifi_}~4S,P9 LHxNL 6[ V5pA nG8)D(Zx~}7qK;X~7m3mUM}M5Vn.]ryMܶZ>Kx ~WӖoL}ODyHމ߳  nwj}P3/aJekrOS\H*yzy^DW6 )}yoĜ:^T;Qu|/ {q{Na'Vx |ѫbh?Z%Q[k'܇ L}`:h[xs~wu(pH(hB֗yR:׉DzH?Egpxkl刂ԘxHzX芓['DhEq؍qydžxňU~8mX]D-X8hSxVK(mͧ|Ϸ{] iȐc{F8X脧ngso؎鈏x( y89D'hr8)R5oȌg(Qd(4Y(DItRIuj~:Lzz$Q}U&Ljzzʨ:񪗔 \֩ :遧 t$z) KʭgTZz]Jeڡ֊_Z[xZᛛʟ#:MAK KNjį*ɗ:KrlZʝQZujOQKk!Lj۝&D?KSԊW **cJz|;f*rӰ+[zr˲%At[9Kx{qK`ji[) ۖ]{W{5{@NzR˹E8)FoZ}o4ZI#;u11;۳#vz7Ҕq7'g:({)kI r{#+vk˧+:b>BB[B%KIYd;ͻ 뿱m 㳻!lK++ -,¾+ěкvʼ kyֻw۽ë.KçEĥ۲+{[ĭy_lmJġ{9dtܢ%LaM@:BʻK1JPkȕj7Z A5v ||m o~jĒhƘikčʝD<ƴDyDZܦYaF Ĭ\lKlDZ+l\nH o˸8l)ɿT;M-!1, H*\ȰÇ#JHŋ3jȱǏGɓT˗0cʜI͛8]V:(r'C*]ʴӧP>HШ Gׯ`Ê A.SPآ)8Kݻxe@J2&߱#pÈJ0H{BFU˘3kbJ#S\`ǛS^۪'w,ʭsͻ+ܒ'7` p^μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6Ю6ŴSCfv+k覫K+Kڋ,,'. p> 4gJ"K\-A2/ *l֌gm 1L. Ek1ulO̴X}u̕-o׮}'.6_vמSn~[|I_90:C6@qml<͆420dk<? z?Ђ  HB0`BpO O^'C}}Fx"+[H-`:"p@GE- ya'Dψh\Z/;{#(ḳ=Q},E?  1F~lb:y!$#ӸɄubEI(GIRL*WV򕰌,gIZ$?r^r0[a<2f:tf2IM^N&6mz 8q3<'1tZ,:Lҝ̧>lj}rHB P=1J2(DZ<H":уӕxALV2OQӤL ә2(EqSHE+ԡH-A# Q&56E%ԡD,JVMiӫ* X`$kTVxuTI?&!W*) Q2U_PTj*V,6Y)K'Lbիݪ(![zm%`ьʵͫU{ QiT(@_S$}lf͊iե+UPv rX榒=6*N7k([QF"hQZU𞲦w[XI̴u~?/.+Eo)Wjq{z7Ehr1;amrJRR]Eװg[}ĸ-+ߺtj~3VnH(JTcHurm,ԧVhUtraX2qZ4im웃:smC3\=ļhG;Qn-]hz5yyd;[3%:ݴGLMD??}Ʀ!M:6g@!, H*\ȰÇ#JHŋ3jȱǏ= *(0ɲ˗0cʜI͛8izHJK) 𙳨ѣH*]ʴӊ;{|bӫXjʵW *U]˶۷pAPd+˷߿ED+^̸=Q 2I3k̹3ҺتӨS^PIK˺۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&68ŴSCfv+k覫K+Kڋ,,'. p> Wl Kr \-A+0[rAF6;g׮!4ӒsCK3G:+Z;uն \w}^s{sԎ=ނ-A{Fj<6ӎ\P,okPW}-5Wa'8q/>-B.5OQ׎g6vOm8-~׍xY밗۸l]V9oyJn꡷\Tksw޼ o}+n6ӭ7^vo=回6/| _Ynh ;qy_#Bw?q_ǻ:66}_ |ٺ>f-ЂƲa [T<0qt\[S zz:&PC]Ka،F7.F-^C[C8>5ra,Q} #HǐiwXhq}rH"PӟU4 NR 0KwnҞgFljOYvԡ ()*RQ" GON҃$TВ2DCN=ML0SuROP5%OQ UZU$j'c~LWkπvj'*VJMQ=T.<+ץhO էFUMfV+ְ`*dӺOV! kb-qµrO Oz֜$lbWmQK[d.63>Avm>cj5Nۻ5l]zO6WP;Zn%mk; r-'g3+\䆵sS6MIu NWol9أ>e#p a SDU-Pv״nS5 8nTǛ7-n*ѓa.'NgXoE_;9Ç%rQST *ZC3!a-sٜC@^Ċ9A063nBqγI=_}F9 d !D-^F2ބt9!, H*\ȰÇ#JHŋ3jȱǏ@0ȁp˗0cʜI͛8sUJѣH*]ɘ?ViJիXj @O\z@BOhӪ]˶[&2!l˩}˷߿:]" ^̸Ǎ 5 Rj!k̹grfwϨS^͚a @ӭsͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫2:ŻSk,l' 72 JL[w "0&7r 0lﺌ |> /ADKMsF-GMgQoZ2_ 0KwuP-3ӭ=z xR^%-OC.qi3L+?n/Ҏ?v[Nݤo|7=|<~/C0߆}S?q̧@ICD@|.cAu_\[ (+z83a.~k&qmàuGg?hwBq".}=D^Dpkz z1x_6Q_l "pmT\@D-j̍{c>9&0c E͐~"E: 'Iɗk%ņmQ (1PfZ'=* C(gɱTRҖ0,3 0IbL2f:Ќ4^R̦Tn g2)rL:yNrt'<)yz̧>~ PM6ZmqhDJъZt$ :{U.DgPN lyLc>T׌ձIV?<`}Ÿ}Y[b-S`Ԇ9r'}3 1L3MSS.}K[^vvԎp3g@:޵)MZ,e6;wlbߚv']Nf ٶ56Oj 4 !, H*\ȰÇ#JHŋ3jȱǏ'(@4YE$*+cʜI͛8sS 0d =# ӧPJJU)&RtՄBjJٳhӪhDశH˷߿@VRM;0ǐ#K d@UP)MyY\S>MۢI ak\]-poȓ+_~u*8t^23سkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$[9S,0,4l8<@Bm+5+8; TWmXgmZw-4^ vOMhaCrLHߝ2ACݷ@^KAFˊ۬7g+a9'8˚/N㈟9ˠ\tꫫ,ް.^N;̞OM#y7rߎ{-zlPI7=,}w;L|#~/Wkrz}#]Hq}\w |Y$A!pxY< {R", W?lw! /fkf<ouQB:{`7C &zB,"'ؑ۞6/naаBPw\Fѯ~N3GHΈc88Jew`gC/r}c$3hH)r{ N$#W 7Gzs]&x9^n 7Ԝ,o9>YjpDDVds%28@e6j2IͭUt,t2?j88Νismlev~YI@JЂMBІ:D'JъZ%]2юz4Hґ%=JWҖ0miJcJӌδ)NMӝԡ@ :Ԅ=RQ:OhRJѩRզ=jD RrըVXYֱNt@ѪVHjֆUMHzЯbԯY^+UrHE[X6T4C?X6l^ZNh;+ڣij-i] qmlTvEmjsշ,AK׫J#\$ ٱ7BZT٨uE+얶 ih VԂ׶Zuu׶oA+߁7Y'˕T (߁z5Fﶫ f0ck` 5\^:nGLaC4e:Y<۽+^̸q; l s?3k̹sc S^ͺNȘ,V۸s}0 ohs ph>0`>B΅Y#`d @͛H^M?":1|K!w!^PXTbFCuqk<ȹ1MT&Cu[<(Oy%C^?pwe/f*N~~C ƘOee0 9̽r\gz~ֲɌf#ё}3~Lb8UЇ;bgzcy1|VAYjs/{hE9*pmgNVW󒵻_VOQT7ȣFkY{4}ۏnǖަi^z-ˌv~$۽zߵqcRCn_Ꮕ8e!, H*\ȰÇ#JHŋ3jȱǏSL' HN\ɲ˗0cʜI͚UR(icSW&E)*]ʴӧPJW%'OCH:u!]ÊKٳ{^՘`$z@h˷_&wV :EZAѿ#KLyl5\U&@ӨSNkupn8l sfiS ۻН@ `, 4ӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.=S7G.Wngw砇⢗n鋓ꕫ똻nn.:ラ|O=˷nG/Oo}׃^}o3ޏ^k~|SA[nxH@_o NI]#u|FD$'@ʃ82O}` ec KH:!P|C A n* @xH*N6<\w>0XW2*yB󝑌md# *QWF #=8ьD|97ёDc% %eGQ7ґ bKV|4e#Lrw\'[CPް>,$#DTr"%ϨLVʒFh&SΘĥ0LgJӚ8ͩNwӞ@ PJԢƔ*FMRR29u*TSRXͪVծjժ^ Q*֤S=+Z:U2[Jנµxmj^z׽~\ Xt8El`2G?`FU4RbVQ?SBձ3EmUUK*)& Ve=cЏ֦ ,o};Zl[]ܸt mtӵ.uS\";ծkbK^iz=Xi*Db+SWznOkZ䎗9H.Xk\X r;.uŰOR4[mURjaW ~a*7/zT~Ri#z,rr6te\ԺָV}/sϻ 㡶ṞlwxE9=^+]X沑iV[8ۿ.4xB>/Aoλv{Siﻸ;S|?MEyܯex'NqS'c7iƶOU_ FP5NW5 !, H*\ȰÇ#JHŋ3jȱǏ @ b˗0cʜI͛8sLQJ%MLΣH*]ʴӧP/dO=jʵׯ`IѢbӪ]˶۷VQd(ܻx郗tLÇS<+ԧ`Đ#KLsc̹Ϡ d ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg5lSt=?^-dmhlp-tm^|~66'7#xKNޖ_^x=PsN@n:ݢ߫۝zr٤+.;l>>9}c{]AȷͷCgxګM߫=OQ~^yOy=]?u$ȿ9s[6Aqc"H u]&B !Jȿ~C\?.Ca\χt`AMPe`Aѐ3a MH'0RTHBMw_b ECc܈HD.1lg!'GYPe4`E2=2H&PjD$}Fic4H(bxFP!(W9FUF~e?I4N\<32#">4e;:󙲄`9%o\wӥDB#*wdP}"2ٙGf5Km\@P) ĩƅs=Iъ΢4;@èHG9^OGqO#B7S7[JA$+? PJԢHMRԦ:PTJժZ?Vծ U^ +S*ֲ>fMZֶmE+\UҕvY׾u ukQ=bX&S},dJXJ6f7r6G?.ճz4R~ePQZfn5K"Hi{\᎕xpn6˝mR Y4.cjf.Q ^/fR^׷El|ܡ׵F*zҏItvD/,X 6_m{`W Fou`v sCr{ tmmZbxE0{q|*ǻ ]`䫎&iSY!m!'9 民e_<˫ em:LrW˘Yfg̉-#cE|9ѳ/7MeN{u*&Mjz4-FgMi 9ɰzbFŃp,e8Ր$D=&KԒU+1o7֮-k6יƵ n%#OAoλ/~~ a}3J#?vx6ִܲe#[B<8uTs_#?WXW㋅d!,  H*\ȰÇ#JHŋ3jȱǏ 5" Eȓ(S\ɲ˗0cʜ) )TI1$͟@ JѣH3LsϤPJJի8 (PͧXÊKٳ9۷pʝ+Tg ˷߿B]+^̸c]Sqǘ3k9$s@mӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dm6ZS=?jp-tmx|߀.jM'޶7~7G7WngS{ᢏy馧@@.{킻ߺ9xo|G~o/7A-է. 2x] ^(R!eъlc -ҰJL#7"NI4p>6QcWB*7/a,XF~^$7DIuT#&3>S"GPo!HO R,8K3^]/3a)J!bIRl& (2boivL8@d4CGzq}f/5s tL?]l<(-yi$)QN4NL;V(H9IV/L0;zNj| BFJ4wNӞ@ PJԢHMRԦ:PTSPXͪOծ"^ R*ֲhMZךVWu+\*׹v`סըͫ`KX⵰a2}aXFf7rG?|ճv4R~6eb_BնͭnHiu\~xpK"W`.OKVׯjARٵnbWƪy}vŽQMOJ#:$ _7lQW`w /3^.`>XͰfҷ0gT&qLs/lcx%덩+x a!Xmt#;4qcX.񌵌a.k-r\6;x%>S˹a2-k,ArgB9F٪f ́7Wȓt[Dou~^-[f/y†LlEZ*dӺΗlr[_GC7T.uxeUSNUXQ[`cMm6퇶Mm?Yx/sfqϖWvqEslŢՐ7k}{CgmonEHT?V8a%؀!,) H*\ȰÇ#JHŋ3jȱǏ= *(01 z`I͛8sɳϟ=d) 8 ta1@ @ӫXjʵ׮B2e үR $0۷pʝKפ %[ZÈ+WޏU<@ O,̹ϛgZd,$ װc $ɷ 2iܨRУKߪ&~rOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n'7G.Wngw砇.褗n騧ꬷ.nS>?/o'7G/Ng߻w<އ ˝C}ޥfue~bl9+}cW\0r _=p?v._'2ѭg<ݿF6οm;ݴK:1*׬5w{uroy-B{}oإ;w!,8 H*\ȰÇ#JHŋ3jȱǏ@0ȁp˗0cʜI͛8sUJѣH*]ɘ?ViJիXj @O\z@BOhӪ]˶[&2!l˩}˷߿:]" ^̸Ǎ 5 Rj!k̹grfwϨS^͚a @ӭsͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n'7G.Wngw砇.褗n騧CM.n/oȿ{7?/=Oo_ww}'?~̟꯿@ßԷoӾ'O}]u@:+ w5Ю@ jw?xτ$L Yv/)Ԑ-] o<z?]aWQyCQD)PT@@9qKbrv1]7AP_g) B\qI|"E5=}$$lX7;^4m=E:(F>a]e4\?J_v6dK{ ݴ^tt& nl'ܴM7,({c_׺o RO/ŋf|#1Z>sUwegr+'VE:ϗb鷅p>e+7Yu7ӷb7m!,G H*\ȰÇ#JHŋ3jȱǏ*) @`˗0cʜI͛8s֬-SIѣH*]ʴ)ƞd鴪իXju&O\C׳hӪ]˶ǞRTi `*̺˷߿uL ؁+^̸c<ȝkPk̹g(iϨS^z Pt۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n'7G.Wngw砇.褗n騧ꬷ.n=S/o'7G/Wϻgc{̋O觯췯o=gO@ ۧx<@1} ^H ZP ΰqp DȻ5;GPs 8A8|_BxdKN# gD$^^W)ְ'=,.``H!ΌT9|dtEE ;/fqZcIHD F xD%rb'H*r򓛼N"!OБ;C"w'筲?IS 0HL j1L&nYVZ<&)M @8PXsSgyDj>s ͤ=U4XE:̂zt נˑ꒠3i OX0N"%ZȗS8ў"3>*AzԦ6j*FMsxԮƑ 22hMZֶp\J׺xͫ^zֻ ,Y*¾M\:d' YR|,f&],h{6AiͺڹV]klCK[MmsZ~v-kw;[ lqm{ܻ.nIУf.vK]w;Uh\ҵuns+;_N+&d+~'~׿l0u |`& Ml%LWINk ?Ô ql4La-S0la.]SkÏuy*2_>uW.5R^J1vg0h 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸kBX`Q+,sSLaP%@6{.]+Jj,KmiKq+>.kze ?hݛ2S{S,g.,iS :ֲg?7#/&^봴jo~ANtуy۬|?_{EC+rDn_N3s}~7@~/_AwYMD7?jjD`O9n @ (0_ǫP4DHo8ŭMsG%5{q{%`O=D wfq"-}D*Tm QJV9Qty~%(P} c%ᇶolqj3'1O Rvn,b0K_SOMԃ?f,S3`I1hNs}]5jl[YifuT}-}; [g,bg[>te'8vUx%gI*Mfy$l ݭNS{%.J [Mҍ vM MxprS`4Yd℃B6eSd*XM5B(2&{zq nkRSUlxsVkXh؉QuAS zwhHN+(UXw\}Cse<|$7nGrbRPw #bBFZYÌ!NNxXH::geh^UJRl(Bs6e`WwRu$6pG҄p#y瀖xH \Ȑ9)}'6u~WI"Ըgl/{#نvrwsF,ub0)E;T|O${Ɓ+~>F TWg|rw8M)v 4wdR9ր먄Y6oXN aIU|cI>QÌp(87wzX,ܥu Ai^u`^8hI{ C{W urSpW2tHnI;w:c06udiV8f|Kؖ'9#ҎW=Ht') yH)!fCsO&THc.2Y$`؝Q9WSVטb\f9kف6/soa"Ȍy %7'| g8RWqӃ(tvV1퉋#Ix#h+-ZsX)c5j久'ڀH,ڇ3(`?zX*%Zˈ|sÀ^Zfz}75~!F 'BjAbp#*y|*C9|(ڙkKBnYWf'(hY㗈&tÃ!%aq{566窣<ÔɋqA=ԩ@J ^o)hUƦzժ=z;Sf3oz:!i|إ%iEٺ`)3yCJzorW;W=i ?iIxI oۨզAj K}Ø vIw!(EbqW'8%H85Tɱ6 +Ai4蘸:pNj.[eJDk=Gu=VLkeOThu2Ưc`[۳rx˰U;ڷ{ %8&ě&{;Nr qyuJd_ɹ;kgW)u;ji$쩺|%ʍ&vaz皼ȩaؕC+*@j͆V lϋ炐۶K;)\xP'lK'Ji.qkdJ[kK>_`o6w9xT5;K&`7'ug5k؅]xpܳ\d1eQN#Ʃh|M),p+I^QG_ !3a3yTy<,gaOj !dٶm̈ sɱZ R5= |6:znF :Le\v4]v{/L# &<´̎xdH*ڼ5c۳I 3fʳo\Ψl;γr²! (kWyFl+6#7U sRË[7pRkQ9\Eǚc ;Rje#ل7|IhW]Y* wWpEqt#neU,|W \dh%K-A4RЫi%7<Ég7ҡ[? [Sd_dS̵ϦBwS#BUԡ:x0kPGCJΆM ;ҫV&*⾼(w緵O |0{^~ n>^h&;ޠYފk"> ^$~тm*,~!Rce .->><}7C ."KG1!NL-Z>i$;_L.I].dN-t`cZ?=β3A.wnOg>#儾Ba.5HeU3,Op@2\P@A`-l~ɲnޭ>N>IOk\, w>7N^(=S`.䉞:.eŨV8:nO`^Mn^ڮ4.>j~ jNc^>(;3>{-~VN0Vg8o?>@dz~ϹJ$ǸxГ^0j9.UAbN>)jl?.YN1>垩~??h?_?__?/o_Oȟ2,?//ݿ?Ooȿҏr/XT!XA .dCEXE;#ĉE^-#UTX$,/Ɣ(R Ł2ޤ&΄9u9Q?.]gRBHWڮ{ `U2<ߜ#~\T2Cr3hc_EL;4ìS.( !,*S H*\ȰÇ#JHŋ3jQc THɓ(S\ɲ˗0!VIBȘ$ɳϟ@ JLD+ӧPJMyTK@pׯ`YӨX:"(p۷p$km tr˷߿=e+^lQpdfL)h@ V:/MӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h89UB@@j E TgBi{)}ij^&AgbIf@Z}h g%*PdMjo i$E9iK9hr&?z)wJ鮴2k*Ŷu6 2ъ6C֎zu'AJ.@ n{Л&)m =묒".._{Ɩ{7,$lC'b 2c)~I0o.7weC=tg:3E\FmgW[M;*SvҲ}Yw_'&ƲJ5n7Cg]jv6ݷXp^}ZRtGS5~) [w'[ZW/eϫn9ہ\&vI|QQYY%vcA(\_$<]f};;%*s]2E*t*Ub]J&0 %ݰdgAlwBo]p(LHvO$ .$S0pU%8XِVN0r+GIe7iz\ޢ2I36( Ǽ1)1WwtEFqX#P@dIRc%ty#-2H>>X$j(R"텛$pF31ʥ%D^"Ӑtw+nI\],+w:er$fErBd0ISJM3kGot:vsv֭ZFPy\ d(IljZfRd8aVhjU>WC1O\U=3aR *ʃ,T/f( DZ@q J4ņ,'9$2+ɏ6ǍaӞZ!(M؂*OyqiYQE<+WSdf$$7EuY]+:+yqbZTJŽ'Mb#MjqX!wmlS'KY]:pI9t "Gk˽ݡEJJ^\$g Iѐ\7yJzVr+Gf-+Spci=6υxkK.7իh`{Znn %'^xlK<$J#wWw5UH̫ '+ZW 夣Ic{bQSM]>a"1׬e0D.M;cmo8t 'zD `+s?N4RS (tS8gQ$>֙]0mŧ!aM` 'EILTKu&\Oa"4Cr-a4#˼4Qj).]Nj.gLTD3 tru#S%R,OT]RM9d/"qxE#FԞB';0M(2A;0~Zwό-twW9sgMfh{t%o~+-+j3}3E~oVweuV6>(fj#5^8ξ/u%O|3poʋF_>_#qw? xK*3M-rg_MܤITۘފU6arUTvvhuwO'kTg]qkwi$zyGA(swx*r+kWxxsS.'_4X6p*XVv_wvbՃ>Cn'Q}gZ"m~+x7#c'VK'h^f.ȅUyv7VE34bƷc7[HViztyӖwD4h6z1lVZNhpvHv:~䵁4B$06s>mq| xpH4QGUEs.}Džkva`vx僀bi !YL`Pr27+0Fk_Hݴ[дxxҨ2{Vih|XӍuԀ:(ׇ 7k6l؂cvL (XM?wYbfbmw#uXYruEyS]hI6aC.WS&'vl}]c@ 8cvI}xIQ6B gԒǎO9Pi{Udtzć9hkxS='@ɉWn(Wh2$9ܲpexJJur `F~hqbv淍 tz44~2V89чn<'$xgW(wEȞIiys,H8Yu@xلY7\㤇aX\KU)gqM(Zyfjg2U.c0?5c旈&wy9y|'mZ9cghcED)X:(:re]4i4w~8Ebvs5i^|?SfJf7WY*],jHYvהW(3XB ou#ט & yg9j }^q7rY7-Iߩ:OWɤևmzyhj/B)x6w{* u"yZfz㚬]I)Â:. hx镖5]i`VJ{ҝZd@EBiYcZW(yӔ 'a3";A뙲h8(;qOOW{Nme>en˵]n8qbA a*HSD1ibK f)dKYTqb,jbH'xמʝaٸOPiD*BEJ> DiaGRܪ\WFX/K'Kt;+AVGkSMBZزzZEfq]Șx .4E%g{jK#xK?WcڊCا>cp:4LuZdkrzl8$ lU'L*hddZC軌cJdh}m2|!R[ d g)0L奅AmK|&3@zŅ-Ԅ|/ ~pYJ4Z-|×h95r~%=2[k\&mSlrlʼn|@ "x\M1{6shhf㖨Z\@|*źU3;X'fɝHܢ4ghU̬n$9TGFK 0[L,1Kʹܗ+L6ZjY6Zh,syj | ꘻7ƿ.<~aʜWkrPs;},zWbID铨f%ICzJ '/[x{φm{kn;fcverS9v+[ש-hڔsxtـBiMȯ[A<ҝX=fNi46zdyL6uK慬F͕;5LS(J[9ŧLW-Oyw*v6=,=`Tl ƅ ǪllFbw_[N48!<8ll:z0w͍X嘩.11<>j$f@^TcbaHALo!,*NV H*\ȰÇ#JHŋ3jq#RtI' ɗ?I͛8sɳ&Ye \3R)щ@իXjզɡ]>HT ӓaP5۷pʝ1Ew| 5Y)%È+^Q)V]*U0bk̹b#Hiex^ͺ맠UMmQ.8Ӳ*["NiУP$A `2]3KOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌9Bi'aF?XL*УXPVE **Ja)#!AƮ:j&듰1쇓Q,f+-m׆Rq+k/vZkzpJ-:KNLqB 1ݮ+0,4l8e+ԪM.j+-0 t}NzJS `wNW !!jlfˇ@j7XnlrAPmm^n?sj{-?.Wng"qi4AHt١9>{뱾.>nl p 0ƒ/8?ogw}Cr?D!F-_mߓVd.mƀ a@}{ "2A>Ek+ pZF;dVZ-a,R, g p3Xnx I*# |[q账214l5Ki9" S: dB`F:~.:1d%Z2#@퐄s]w9a)=˃d0H/:y!;9H(qlJX> \$՜ JD\zSK0,R*8 cHtɺl1j;a%R23 U#Ki\d6Hzqp4azB|Fg,!0Pa@EÀ }g+t5XN<>dtYJI'JMJ%g:s}Ἀ+8ͩN?FSpB$;P-SEˏrY#;SA4*ZN} \DʰGfR͐MiʏlT!S7Py, >5eSWDϝ=(G:9V6aUKtԝVqNuam@K #T{=\5JY`2Zdhb%uЁV#^Sˢ[-[ۂ0liS<,WaY'n\ΒUVMpHo nŻ({62FW9?zۉ0|E>DqUыV80lS.xGL~ԟZaHil51~PM"!=.*cy ɎElGGM0| Ye;*"*aZ,֗2X] ?qk2x]Y@7l^|h\mdq(WN"Ёqb:\;XΊ hrxОg1Czm Pc%an|l+OVլD=zkm,m3Q,ٽ=ChTL]E_^.7_P[>*1CKVR55p~;EL]BkOG8y^ON$%N$[ koХc5sZ1썋}N53ƅzy(5 kμl ȇS9#m{T#D0wn1 GO$ũJmHC?{Z`÷Zս iʕFIq_ -Z3bvs5wb/Q029Ld'GgO{e0^^:g6u}ó&:b ^]=&@l~ڗ/)f2Oo_ y(gMۢ3.O'e~T=rgh=8|Qv}rJsȷJu %a'sUh cqlg:(x~s ȁ͇e,ѷ7*%)v4X`hg.(qEhobWo2ǁTXVEchHmǓ_{eHtdFԥ]YTFxENI'\C<5fBoև*7b]NڶI؊Gf2r786KC+[CaIjh%Ixf5[L+ wۓ+%[̺OkV[Vyy[fHirJBvik.y5:nǂgv@Ttkc<)g)*{ Q,aSPXS5*\kh4z7K,>Lf8x{@xO\ #q]3M)>$D}vsbZjWƃ$4\c)TxGk}S)+J {3&l\C?Bd~vG$2<\zE^dcſLŏ[v;al272W13 4ť#ql9]OD: ʹYdyԅHV g&u)tnnyhLҲP{zr=P2͏+ԌlKIvmYJ+KK޼[$|]v2=Z2Y}=o̷6L5[:~͔y)_ʈ:6tԋzP/н>-ktʾmȻ:ѢWkܤ!O-WiL+ ΃L]r|۽ܾxc8gM llZyxs֗8ܪځV-ey g yym?[ )ʗ=Ht]&.#lmE:A'2.#]=@ щZ{\SXkuuIBox]4;u\WkZ;% ޻_DeŦڶ)Ԋ , H`#e`skgH%=Ԝȋ \jM0guʆpL6i \:n/-yʱip xNv$&QđYlNMnWJGݤYgh_.DJp>DcVNaT̵Юk SU&ɫ⦰>C))#2AhAz Aq&q0z ˳l}1 9q% $>0 _7/n!XJFOa| O*C/JPLOL?WoU\O[VOVFs*%pX]>oOt_WmŧnongOͪƄA/Skh[}WΑ }[_t}{+9тy+]{H<+kYQg`g%ă#`C6ջiO) !ff5YpKh|bb&[ b!759u: q>^@5ole͢[SҶԇeE-mCm’%{[W|Oيt7kjrD4y˨ +Y4ě;y$jķ.7Dj&9r6}u*1 lr `hUNE.cfi8Hj{i5򦷛~PbkYwq{馥6^GHwvKqS=S5|:~Rwr= o  W|-uG7-(7qYUO>{N!ǁXW ^u|]V%Wp;Zŧd]eV=^՟laڀM cGiDiѝuF`aRWNEVgj1㗀]Hx3sTgu{_2@O $T(v"mTxJFC&fe h#:g26|?)ޥccD38DX)pFJeRńaHv hCFU2Kw\X^s{VXcLZ<1yvcs<8f;uB8:@|\vJiNxxmVvĂ%v5Qt`8_M{jȈG!<e]CQ4eo](Qe~Dh`>^(jS&YKH3S[5zm(O'tdzhkA8Sx~W+ &[4GZo;_&Cؑ`pȨLZyUGs2Hxic]ziIKu?KO@֔ X(u8&Iyh2Z\Fs7;z4hwCiGi.uT.O<]/EQcQySi͆蒕KyrXkZGewg;M?C 4Q E,5y/:gOxxyP3!I  I_~HI)hWYWX6FvquV!'QB=9JSa,bVo1TxkrW\_8\bJYtS+(urŁDcX39-9e1ydP*ݹV3hhJ7ٞ邚O"3qF4>U3mXLsiSUy- :sfџa;,chS3ZR| 1);vZ c_$̩[X`FVbG梮F‰DNJ.59h }1lVi$qbih^HH}IVX|*}5EoTE'꜏z:L?D§86׏fj|%{j5j~|7R)xO17#8lZאֆ#T9FEgeyHNo+w&ö{q:qTxg(ժ+E99ƨw6rwLxtxfR6I:^%:WnOkGK 94&_I; pEJ(\"*:VN cz`l/c`ʗ)Zn*qX'#4Y˳j`-8z<]$FvدXJ`{b[eצRzHg;nTtXp8Fvdk i_+{YzuDQ] .tO)XL*X{sìdI^kvʝ4(v(=lW: tWkc4p&M֬KD%\bg)ZY5tH|H={e > 7I6P@)[ڵk[륟Ӣ+R^շz<>V S,6!D.۫׍zD{'a7f+Mkty b%,'[/Ӷ+)2$4Mk[s KXJFG똣x2)\<`uyp5(o9X3k[-T`TjtH +'vˈZGo IZNW[CL3)7iq܊:{z 9WZCQL{wL=yl~|l`l|8ʼz{T7̎j^yGiwzcUõwnh?{u {t5t[貘Sm3<Ԝ1Iu޼1@<ǷZX\č\f<rĶKΔXU,,),\k}ǹ iKZg<iJb|7plmuLYۭk V cSWȐFP+(zEK`Dr#ylcˋKҁIgf{Hܕ8lN LݖS]@I}X cNHxIu9m4| |̟Y{hW5Zsts[:M͒=s 4׌fkLٞ٘2]و&~Ke jw@C|>YڋY= xh#gX0cLurG뎟[i[ 6lj=sD_]ׂw~*6H\gk̒SϽ6k"<6`A)nQ=MW xʙ#5R98`y]"> t~}UJv6M ]|xÚUSJZ ^mT?0)ሁ[ؗŋX*y ph~!WHMy.|["*ϣmE=^ᚬ XqM{d1茮(\ =hܟLH[Vaf~j~bJ=z=n{ꎕ`;_EJhNR_V>gU18\i0yWڱ ք&p=\ׇ~L/$Mk7j#MXO% E?a5 [`_/۳J"%3WRgnr&fX}]fV|f'vJe$SD'LTJ+dYh:q)k]s!YrV6kg{A=e?++thw^z^|w_~EWiy)`3`wa !,*V H*\ȰÇ#JHŋ3jQc Hb\ɲ˗0cʜI&5]V9 JѣHLALJJՙp"p⃏*KY&2Y)p|KݻxfX ҧ@ LQrdž#KLZnZϠz P OC^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DFY)L6MYДVAgA%sPFۗWBD&Advdk$mdbv&rɧ'u~v@wnyPTꉛhRgꏦ2g?siigr(qJJŹ6t:)*)J*Bg楂Kka"R. ky ¦lEr{f;mC׹A ϖD[%dR%'ijq_Q@"ǖl(׊(AdF,gJflAj3:c,,S$X4)73MX[%ʚV@"*mB_4͒k%'*]GtW-pZ$ ;~-JJd^kS wT ':l$6]ΜP~o~qƣh pAǿFv%͖Yi{/#j7|.>;4@|۔wo>;|2S]&3۴ 7ᡏGkHBE22PTؼX/Q|*h"OWzȸ&1i\L WHЄ[T5;s(BC̄>wl8 >$<$'s@z*ӡwu Oxuk|LMZkWǾEkJ5CtXf_b:9^`կNϋ?$y=,~;B.2FŽͱSd!(GI="$Imʓd4fB)Y(`>mk_ eJrtdI[b2 OL2]/U7 1,9κΒ'3pP;wDfgLJЄZ(CżirͣG3hW!-ҔGgXD%&'TaQ{<Ξ`;hHW4=Tܭb7Jx4 a7 mʭ;}eSK\>\rm.oZPjV;4["X+f.:ɼa3,9CS1o7V6ek ɴRQ, M0ۀhmN=\ƾ,163RTR:lY[FOqzb~&*QGԋf \NL(-DֶPE:˽a?:kfXR[5 YXt y7#o yA4\h}wDf,?' MΛg%l҈nLCzM۴M}"+KzMQN0S]_e|xdN'z4af 3+k[ >lRo4x~U}] #8Sn>DKtϻnƔm-٬>сM9#=ބy3'hfc7}]E>4^z[/rsJn~};vՓ-zDrw-iQ57aҍ%=Tlhi#ZnO͏Hj}mCp_OT}>doTOD{Ԗ^%Vbâ{q'y6b}E_י{W(閨w?&yDAu]rQ t_9ƁɞKV>.L$}Zcs27;}h*- J'E%G'io=?V6ZӠ[&$,y`9y5 (1^_4zzd=wBI*5fE>)j8/XixC+y^ z9v8&ʤu`z+ gď`SΔ cfcY4eJz'_jZot|ihP%0ԍxBjƂIFrxN1Z7ZHMZJڈWѪ]%/J(يZ9ur\ǔ/qVYU|Nhym:hvhzÈT*i|5\ jE8v7}2l+(/Xjj~wtoCX&S!ZvZůudkO٦2؄"7-g=i2[CFkwwi<۳92I$->[F"f;x19L `=ԣaPktRzpYY\;SJxo S8fq6osWmv)ҕDڇZMUğd5{y96s{z;j]~pRb&Y;`r[~9槆FK>:L홦o4{Jf[m{gٻ|Jj>J׸}WH)֦is.&;&S}Dcb_ YއM-bMr-IZAԕUdOzۿBI,̛,Ha @!R|Zx "<$nLiu0ӵSJw7i;îA&Ê97<79 ڎX06iK4<5=dsRS.[ZI70̅D.wӮY e{Ǻ_*Ē,4vW6YȒXSLɕLPEdU7hZ=Mk$eu<,HuCCWιicͱ+6YZ\w#9.\lMjhLL C\U|qa/,h$T# w̭x\䌰DUk_Z;/xsh c~Ȕ4ӊj8}l #lsLFUm8$~WE X^axzh֊ M&9Ģ̫{G:x8׽X =~2!<~H.3ܢ3o ≮IB\98ؖpzry=S ,J|S!m:ȩi?F_WƻmnNVp;lmLq{KAzj}~Smgl;`yKuI_ȷ$^  -D9h~onQn_o?"o _.1LNcs $@>D oSoVUN^,O PԞG_H"b!$;_oYclo`/+|b+AyEp߽Do#_l0X3j^A6D(q?5Oj$R_~o?vS+[/iYO&'oOOş}4_^D&+$X` dC%NXE5nѣÀ!,*V H*\ȰÇ#JHŋ3jQ#tH$S\ɲ˗0ctY?)ff@ Jѣ m"OMJJU>SpZ\ÊK,RzEӟkʝK.*)( | m/ǐ#Kֈ޹pf̹8\ ßS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)aa$ASLᐑItBO.)9 %@M6i@Q~)dN RR 9љ^vfO'AV@FJAj>lbV:y٩lBg~*YjziGFiJcH2*۔I$b1;j& *AP" &>9쎸kB+>jjLozKdy2*j~kfX&BKh ; qnp>Z2lLё NNƦ;_^ϔF<8)V qZlA٬*ݫad쪦b'cE§>Kuԓ*tܭN=J,ȶ­v pk$)8oۇ0q/oS?7^ Q)r&,kw&x>Pn  pM>hlpJuAf yW)2m%nٿưe~̒rXφaBh.e]h*ZZA0mbd%d"wJ^c61/}`ݧ+$ {iT(ĈPnc^b:DJ (w,ʡZJTܐXfV)RYJai||T$=?:Cհ@4"ZR|f= ^Dmq&9@Lh4'|5+^xiVГ+IdH0'EHD咺N:tͨF7*񮜉ԉfX}E>ɱf8RڽhHIDVRfR>Z^,"€mv;$֐hS cǐb_%L,n]dUx~U4z1 v툌<~u]Rּ2n NX.. V%fMV[Q(1&2KSYAgزqk7,WtJ~t[{b`TmUwE.b\YU{Ԗͮv ȕ2tEҭs-8^EVQ󺷼CF8l^J)ҴE',0ڂ+ !W.Yg9cMtj*ŦjX4pv?؛% k-NQx-̋u]ں11[UcSM UaFˣF—ciVd^Z%JJx#&S= ~Q5ЈN5ɁnV}4 jeޤ)}@pibX* %Z}BRy棆_tޱqT7/;kOu)M`Ka n JmZsAŭTM<&viܾ'ٺxpC~h,7mxhN'5_w˻5S7}.p[-px;8pœt#y)^qxQuWfy*U}-b[b:N#׈9Wq[F۔IXm؜_8eٷ'%NuFKYpVrƮI&þee?ӾNK{NHkTc{w‡= L[u̽l qo0 (XXv`qf^"_[e/HzםsO0kGgtAk|ئTЏɧuNb?-y.X/It.H3AKLAs pmd_5TYWoqP~d3aMDV(cmRn jAmcy|`!̆*fB:G%s-uFԁ,$$_umVkVf޴=+؄PX%\SxX8r{WK]iY(}_|}g`4E8qdPqh]~'򦆺s8S8_.vCa#9=ǁ5~ rHsLBX~8Rɤ cy'rH~8h7d>?5lv(Cace(i)tHȊqKm%B,Ӧ[B# a4(qxf"(ZX=֌(nWjg ٘VZl 6~c8noՈЇ%7_lfc/fAJ~jopg8ab^"9t!^!IO L0M];q&8}J{uqmkgtciSדTrH?2AW1KuJ2<@$r}ZoPä)'sstGbz/Oss#mL-t&:]%Îy9fr?lHXa+Z鷘uvNK'wz:}3D 3=D|dGbuTy't)Umg?F5'fiEyhG\IGw\՚IT5 <,9;6f`zKvpg5:&t9V4U՘ 3W[54:XhEcvfYkIF]FJvj8©2!uCY$sƒ&GJ}y=j@hFuQ'5xG0Z(\'}tcƤȘ5Zw8jIYz|0?x$)k?RÐDz֓aF9P8vg뷢|*HYxJ$x@ߨ.Ni&biXDh4ew75ojU0Z8Chv#v%,HOnr|C&7EaxlfԩūcZIq*=h'E5CI|Tz J?j-Vw(B\ncLUy[Zz#Ʉ:1-,ɜ ’Z+;*[ʦIʼ;fKY'GHȺKFJF}ŝǣz#q8K,܋/EdPfDͤH#SӼ |0ܻLU鼩'a:x{ MB-䕾ejIordɲ'jT[EmIe`C:Tɘe\`IZo]@ 4-O'0XW|ᶴkzR?KF͉$`csb}CO0ؤٮg5<}4`.OZ 4YW jmbd176߹"[N<7)ܭމy؝ݺWRFZڭ]W=ܭ}?wm1-5޶޲X9a $-CxҸs7ue8g TXfl.*դdP16 =TnBPT3Zfڳ'.Ueh&8=n=8.E~:zJHeLR+|1ݼ=iĮ<(婦Y25c%_ZD|ˆWBN*ʧo ɦؿYLwE@f^ժC8}،{EXʜM ]T]vztwR1OYg,+gj\ijލΐ:*Mޒ֭,_6?19o;=,=: q==5ҰK0}aFlrEm_?q$UDԈ \l;63ds>}bLZI{ XPjy5NO;剚R_qa?%nl9_&?f]IZ?,_.C6 >A[%`'U}yv/FmY-E:Q#4w$l 775vUAPoKFMq4ǐ#KV [oƅ;ϠC2>5MѰc˞ݰWn,O~+ 0 T;VУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)t6ɐ9RA*ThCY1}B*PQ: Y*(1E i,JZꏤ륖*Az9뮘*訬Z쟧j:nڬݩ-|*+mlSܩ+*̫.$n#^.V+ iй:{Glq"c,r>RL4?j?sSA~;<~~#P+(|3y2v_a nkwadzz/\E {:gqqڕBVLzhlj#-!E WofU>x@^ )D[c\6ծ@ͯnwsû\@!Ř5 fhK_wB($⃤\DX>kyo>458>By $ :,yr+ [;CdTeQyΫ!|7IV?"%&/=67mL%ꛡ)Ϋo-00˦>4TAd۠yk \Ѝt#Zn_ A,uc!,f~cO*k͉![ DDb8{[ [ļ5d]HR5մUwsԧ!;SLԨ*#<3z:2)Zu9quduٹ~#Z߬X>AZ> qImʹel,Qk*+9O(w]oguH>L9|f5=@;޽_ff}0r+̮Uxw`[mj#jFϣ;.gGOn5_ww󞯉^_F0? ѫz5YԝN3 WNГ>KQoHֳ3j;ypcrziav;Y7 v!dGU4L#${EbVikܩ}7^@N P{~xRa%Vb=GaW]¤7 |c7xAghX7u8uk{dpVt奀WtQÃtc:8g75vr7qjgQuggJrLfs$QQJVvxdI#*Se3Dy&ddqrhT9f&v8QgrqNXn(pASp`;Znl?0vq851s-zFEsOhn6/$lq0B[dPݦ4Ĩ~r~Hb+GbcXJċ`x)@a.A**=h>.HZ&p-Ԏid)Vv{(aKhhJeiC I.%I$Kx%GT77!*Y6y1lF˸qT祅<;EO_xj#I4u1Hi3@j J;PM~f5(L5=#㕕92Gcrg?iTG6Nf)oaԓ DvSxє&0Fَnɑ(i\B}瀴aPYf;seԈF{y`Z#Cu}MTXim7O }jCI{LI/ SY7 DViSi__l9@QrQrQi]86MI0Vz^%Bh)sL&:JEn&;iiiX3maXx/B b q qfL @ G&1V|`Fbo/Jd8GB-K*wi8 og؍CBF&*qNjxS8h).]n&ʤU1T*(VKXzoUhM)7BeDB|듦xn),rZi٥69Bv)'vi7XzoFfڪJsҦђ骶zڊ L%k$S*I[/;:ᵪ;oڇr:A^)jw׬:ja<59n "mڪ<:VfĆm+3$F(8ԗQKp\>nN|K0Wj\xtJhPxsٺx> Ԛ $E9PGYl(V{'* 19PHei3vN,+9a%U t?e\ɧS&X=!وdrF6Hɮ8As۷~Cd~zgKiIT5Ykv[9:`Ѣ1,>m `ȰiC+HUw;yX+Yq)hRA(%_$#UZFyɒ8}_|y:~Rl9旌īO|ˋ[y¢[e'*IJQ5"|׼GXX\t<"L!sCO 3d5<ܰ>4ːόĉ,|1t <5뾺,ZOcc{(4b<-'ϷALÃe X|+ LVBɛ0YNq8E`.-b8a/:pz^DztGz4!LqE-ŔI*"u긘IxP&DU 8:Fh1JxxW,ږ[r֖Dr, ί>'ʏBB~io`983pȴU뺶m貣d]w]:Xy \LG̼7S[W)7ay}R"{SD}|0/mND[XԶj54=}(WܖE/j=mA f*Nk]O59fV/ĕaMK\XD+׸62;,uyGYF2d`Jȵד۰XG]׬)ۚk.Tf%\ty%ޫ,zns~KG⸆ѝ=MdNeMPz)E,Z䭐١okQ>;΅;n遜pgyi=٫Qc,g8ݟA+I 1ھiq\hޕLJ1s.E,C]S $zIDxJȇvm?op+fw ek<o4qM_K4|JL:8G~gC-ޕdz9N|W>:2y{J$ k T6w6Jӑ6Lwʕ$~2]Ҕa^G~O]|Ń^iY͌!2O i^\OrH^5N_]l F;ɩN< \\LyVڸS $Xp[ &tŢAb䈱G%9D5v,%BaR !K9uOA%ZQI9^8ś!ĉͧRT*4rH]#jũjӧ&2=0oYڗS*%\aĉ/fltC\NTƛVn,3!J>%W͐_lhIz/f=o'Toؔs4dIv;/bұ;]sGZN޹.~{ϧoֈJլ{$3-"ϴLPhl;0;,6պ3&r>K4Dyz볥o˘;WB9$._n\cpEJqJ*J,/K.K0RL4TsM6u*ȚtHL)s6O@tPB 5PDUtQFM41HǫQL3-*KTɸ65TT9BTcu,:2qHz㕬L3hUvYfKkI* &'o=;;t'qYpʾ-3 C"dR$Si^|@% Q{Q:w'_QufB-LkVח4&XxdQExX%v'a;ټ+/UKygBm--4ou]]ZUJgzjj=Yᚼwk6lV{m3s*8ɹ{ܯ &(1B|oƗ p(n<;*|p"GW\??\u~3a]Is M?]I|?>ZW7#{leyt{r7Mԃ41W\y~t{_̻/I [w6/{֛h@QolcIU?q>g+# k@pM]@Nw-*h3~5!W2# PXl]OR=ށPI:K~CŀC!=la)iT|0 yh=.#D׍@;!Hdf VRN,] sUPo S@!,*V H*\ȰÇ#JHŋ3jQc t R$ɲ˗0cʜI*Lr͑>ѣH*]ʴ Q;{6`` Sjʵז) (2j_Viڷpʝ[T(*<=*{ LNvJ5|_[Ð#KlTo%|6ʠCMqg!#w@ף7'n+/ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXfS %C_:HXPZrAk&ԦBeygrZgFyei'A\9&ɧ?tAh @t'}F@y h& y@2z)~j_9*B*ꯌ.ګB,ڊ벺BoNz- {J6 Z)B+vK2K+ʛZk /|({lo>OLpzr뫣v 6l/"e պmv:GsD7du䪅;l4j\>7Px4k3 ȺY\ u--|{,2wÉA] k]e-v`8FO=8).-v٩zuz9y d_MnCh=;x; :&˧>o-ǣ8鏚mvC+~ cAn|A9[jHR.=L}6?: qg6E$Ym}HiANXjT1CRo#l*muv5&Mij-MC~uy+_uc!+u]hK"pwva CM`Z 9'=~Zq҆ə4sKA_qV' tsy @BoO 0{X̽1Pw #lCeX"%q]n{e*R] !Isə$T$HG= Ӛvj:tr?ȇSnAh*uzJ(ZURp) 5uJJ'pH#KGiU^1Xo&AO͐*+UM\¨ubNf1xu,TKZJ2Cr \əfςv gXAR[5V9 2nڳ"Ln 6p7hQV ]9rs1G7jJ2꿇2 ^n"~)-YVɪ\y'¡Soh=}~Cp}W7g=w2}/S~o~T1;{~p7ueHZ|I0BTzTv&u@O>yl"c{S+7^L/|kWSFuwIAoDxj`b]V>>e>HS,'2?VMdgtv&vT'=|'|Ÿ3~Ȉfm+X5Cw/pxHtm59ExTިS2o|vgg+KWye,5wu0W#EJg1(H [ƂT'y!*LjTlًɵ`Qm(d3{Ncʖ*钁0{.Q`L*ӓhw}{%S8R>G$psvS:H{"#fhfr5>dzGY= C\ozs1/-bWHcQ*LDUsW G$u;ա,Sngf*h5*Ull 35" ܩ;nU~z/f_st5y iWu Dʢ]ڣgj`ؕjY(Yd{I#6ڭj:z=%k,T6r ֌ }骊Ǯ{86(Jg%*<$S(Gy7|c_^xW<dkTWkED?Kn9CֵEe̺uZ0fZ:btxCr= OTZ瘦OnTD1.EB+Dt4VDa"VO%t8<ȇZ˪]XV@Feg*aJfTɢT9W;\UD [ & ff%+j(B%DղZThJƱ{TY*+ۻEPNk깪x{:ǚF6锣fo/4 +PQVlsca5˪v.CTpF"HI9*:Ņ0g! SyY쇬X B4Y0w{.+ K̩ǗbU)st%f23iW浄`:.7-+?o,LS^E=7{$,ow@LW-#w!|2 Cx Y?A΀}ڲe_jAIûGLx\Y|/r{\8 ,"rQя¢U3X|c0-F7D@jyv LqLCs bZϺj2?}?]}{9,J궃|,Ϝ\V#K@u"ƦW=dm%@Y#ɡIzDFQq=y43 &FřLFbȷ3˹]١j9@쩈$!{Az.tC_eOj;E4Kt!x8bdZW~j`v aػ1E2>6z#3 KJf< 3b8k,T#6[4`ܬ(Lj@mE ۙ&)s [hω1ffeܹfK<:ݺ7ww1" 2G#4E{f;p+e=DN%Y\˕K^NI؃jMX~Fn:^ļSǕ" KLڏr|E[Ǜ飜lqLF@ ΀9↾7:KUPG2ȷ۸mn(٘-]G=[~cT+-J[KYRrzNuyGu|{>M5 IjA͝C/#v6(B~&7.)ʉbNA ~fЖvg-Vea 8J+A(k)JUilX3~vevmg0]%P^/󝖭MTO\IN> ѓ|Ay?9CBBo!hO`e߶@'ɵ(G$LqjⱦPП6zS:1q,)Cuհ.{mOk*FXJ$@ЯQ S A<Æ\H +2p`E%bѤG :4׸5oa~uLz}u)TG-GT 3pC;\ACqDK4Q@Wpb|o{˴ ѿrH"4H$TrI&tI(s::QǛh<.)(46l1 )ͶL9s,͟܄/;c/sQF2o<0+Sy̱9+ -$-AiOQV[):C"NC#Ԃ5G B5l;%XduYhL͵ĺзii5WAb-\s]vSU4ZxjVRm,S[u\ u\gyV[J_ͪ3P܀An܂ 7ݑDbߊ*ӌU"=Yg!r]Mnyi&PNͮZX߳!ZUfդVYh_gV;ϵvV{nFrFo|p 7ܳ*3M)*Tɳl3rnm8wQtH5W-ұrLwRvR_v"vIk+0rk'=y'~MEa}{DܠɿR1'rKAbkصNa$#!xB+(=P;<ױwd!Zp"m KL >s . l=~a`j_cb 0Yq AIQx<0Vp;⪎.۹pIHGf/vx$b%w{do%9sM1Hzd$mCN{ sٓHRY/Sȴ7 äK!,*NV H*\ȰÇ#JHŋ3jq#Rtz I-cʜI͛8s|JD衧ρ),0bQUJJիXm 4§G!بeӪ]˶ۊ>CdtwLN(VPU&@`Ę3k<c?W|\9^ͺ3m۵GvpנR΅KN]s܃!ٵj^ӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌n=SLᐤ U "An*B:TjzЩBjiA: T@Z)K[+ꦦXp+ jb&l6{?J>keZ߲B۪KB;PoN;QV o# g*jK\kqVlj̦%LО0R[<(mN-LIDŽ-KG-TWV2ZtBMcA_[=% om3]bcYH]v,ʼ5 uݖj3ἆo'~xծK=H\UG^$q^M7 Nav+ݸ ENmp.{ljw?Mnv->獯|Kߦr,EbHOn5\_FJa T4M;Nrf@`ZWJׄ1N,x߃#hCȫrTbVKMv X&"Z ׿>_RgBXFn`qLA59OFSPfAW 9#R?,!9RsU5F^wI5Xg.ҨVm{,mL6$ h 5==4-{W'gؒd3XKz[ v^#/OX;o㾁e6M~۵W_xr^]}{,=^Wh>z>|ռ1O\9#j-su=ߕzRs{?Q+{oܣ~ONtw:E'9Ց@T85Q7`v6i1O7uTvrIFoH_kw@6BJ;!@rzR&u9lvm*Rtutdk6f-? Hf(s=i xp2(LC3&'eh:lǀA~1KS7h3:K84<Fhqs/F$#h4ou5FhWݶ*Hyb;%8-lsTivp9؋2~5fq'Șʸ،C2YX$؍TB~8Xx蘎tC^_b,w_u*HdwGaWbt7Msbm6F]N)4tI}fikF͕c)T<;v\^w6`Z;_ce1 e-M@XcZaW4m/u%IhxǕCv2UT}X)FqIFՃWZj]xx>'y 4evǒ(I}eiGㅙVyB^Y[eUmS|dEZguiW@`Ccwu&Շ%49ișirgV~@`ER!Yy^َ+ٝx{G:+IPCJ >y>+) YfAfHfȜByL)zjK~4KX.' jCqDz9ڙ_&iX ʄ}I2Yk%5xu)6X-zV/UcdFhŚ7ZZy.>jз\awTZVXy\ڥ^~KyipCۙ9&6yiX:j*)J%* xt*`YTwnqc2O䓁g^vf$eW=iٜRcHubyshjl8pZ24كj}F2IVYsوԩlpLY<;XVC]hD^}TwAJws3{=nwG5D4,%ruY. m zqv'TW)VC\9kB> DYk3;VtyxG {"zZھ } ,9H+w#Y4I$קٔ8L [JyI6j4vcMr J\֤:2 qsg@ {y&l6 ʜ\ʦL7ljx%XtѻvZ1kRo R7lG̨=v+|M]B$s>Hpfeɱ#-,i`xWH۬\l_Z :C3gjZṬɄRDzh ȽM<6=m[6j[rjh!-9"u>DTF,PRݳT-7tZpISz37 N~R5Ꞌm.)dJ H?ƃWtg.%)*Ijz'4sdz3!Zo‰Ψo;Yp4wfL?GPϯ X:? ΕIe{jݕw^p;j4rm.K?TBlD0̮k~)kS' J׭u\]GkW71~K,ԟU>^I֫r;:ʹ caaj˛iM՘>.yRh'#H 3Ə} ol6~V>g#Wf~2hӤ,6~.(`V}"O=Υ+ .ޥ^18j S]{?+}n,Ljt,}M9]5~h|ZW,FroZ{.-a*J~ã d=K*4sZYeir"||qv9rg˄efn&^dx8m,~6+H"vFP"@jyh'[kMj+HGWu%tԞ_a#\]zJ+?DbKKXcSyz(;փ$kC̮}-x H9Ys宏hZK^_v=Ss;-lЕȁX;M ;+"NH\jw7tp r'\zOy~gIKXxi aX .4p|hA0'^#7nq—2(RD/UD L7GQI.eSQNZUN?5z–y.RKqʑBEli֤נrIKP̢+͘7ʕerścȑ%O\eYfgСE&]ɛQ;FkرeϦvq٧buMvqo8zfsѥO^uٵow&'|8Ti^{N>Dd IJ&$CO~tE";-)b & 귿*)k{vP-omf*f:ʩ뚮ڰ/S(̟[|LZ9 L7tz#RKQatxQ\RY5xZ*D_kim. mt97lԷ*wvÝ\S0$Njj @:iB֚;m:k^rZءg3s;9଻*n.퉋>2Kt!nca7m>O0QS}W'ۯ]M&®V}S.{ϿeNLxU-%9C@꠬t&8 J k0  g CAT rB6,'-Zc$MVZ^R'8#oN!ArU }IKrbT(*S$B/P눘Q~`=5юj H찍(b~qj,Jo+ᔈDd#R(#B,=Q|d:/%d8i}NJ86R21l]_$y@pÊLM[̶A'^HI<Й?3Қ?1)G )JQ#.| g1d@4D'jя q1%;tCJ((zqirj Dj:4i,J=(=7IARtVi~nZrfD5Ւn"^l^G;UUNwYmVu/?*rJض*BɇÔ.:ͲUY^X-,2g}ĺUȭj8+Udrˠ׺ V_V\TJGnf2A&EmRIYZVm)TFSQUsiӥ>6EcM\6trNJWZzSv.$L]4I9qY'lYRliܞJ-b]Lgۻy 528 ]ljum#nZXVcsϦJ!" jt<<^, }JqWd";P{+}ᐣ){Vm8.k{ɘ9f3K%w&ިwr(-*rr ήGlr(=X،6n3C*]#̼2Ґ:|hvx^T(؝sǣv)hW|6 ԮqSf<ٻNfVM^Kۨ|.vS = Х Ja$FHvSSP2]/Ow)fJ{;M<>M&\Ѓ;m-ԟBY:ሯc_v;'vM.5<+Yalsms+Uk+R -}.Q"~+=8L&lU`أ8ﴗl[ /uގC+sܼ+W7W;lv])oQC\:5&_lS>cGv.z>u<,7J)ٿز""=9eyU=yW18&Hj?Gɢ)U6*S bU7v/󪚤{K;{4YwexFh3x/ E:+W;\W;MŌʱhSak8IkL;3yS{;稣88?f9(nij9)}~nh/F%Sct[TJ+Z>{g6i4ܘz nغ8 we;ۼR~{C }jk ۷_*WJbɢs=ʊ\%c`XԆ^jws][Kg9) 1TXmВ[jB^)y55]ɾ *lvŸ";yV}RyR?{DTQ,&7/>f1EZX*c{Y1;s>,K5QYǞ3ܽű^|KfFgj!(̽b\fR ǧh][la h/1%' *g[x||*bǹ_?#,gl8.xWKNڳX5ʽd.yiY~X4R{gZvGM[kQ櫋VIe3qc[Ivt[ eU u۠,vG*yٛɣ/ :vax F|ƃȢx!Lca=3jbUWm%|mlxqɩwWyױj¦m8w7[7WU]zZͩ|JNٳd[WLcY~<}ڥǬmK{!Zگ}۸]-t_Ewd t^ds麢Mge hfhƙ牾@4覙q~|sMt5zP^]F/ ̹3TK,etZn$6A5{Yt ʿm:*֣췇_Cdnz؆j;N\\_d1{ }<5ibx>ɮ~~5X ]  1s_ S ul/x >6l/ O٬)kyj Upm\?@qknjoA_ U#XA.dCX@4(E5nG!E$Y2 ND2˂)%L6k4Qş=%ZQI;$Ȕ MprRFx P375ӤE{L@tPA$P#DUtч eQH#ȹXsT?JTOhMRPC]/ !,*V H*\ȰÇ#JHŋ3jQct)H\ɲ˗0cʜؤI2RJѣH*U Υ?n իXjӭ?Kٳh*2mBʝK]:y߃ |4ÈJǐ|jw1Ș3kk[LӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@ ɐ!)Q1NdASIdW.9DQ>_ U*}[fif m!$QNpyW9 wie ꦟZz)S~*tyCy)ALJ@Zh}笃Zs'o⚞+' )zjN*6[krw"+jv,vYhBI)z]+D Oo~j N)s% HkL xMra,W+W9KDTObiS8'0Yvk%l&WXnl#MZ:f\^iΎb&`򚉌%9B{$MzRBg>-)s"ٵw <~vh8 MVsb  ?-OМ)MPS^#IOGӚ< 9*z\BŤO3oz؇J]*T’ԤԎ[/3SP4ܲ8w-Wu+0vK7LSa:09WMYUjDAf!TpXٿr4 heW՞V0'䔰g֓UZ8uo[^ۘ)} a*uI=2S{`|Kٴ*b.qb,iauWۜ¬j{Ö9εmu]ewϫY՛>J^z>Zj /`FIM5p`LT_VyjYE7}p;L6J'K{-a%lc:؆'֜Hb1BCVI!̇Im-XpTֈ\JR\#XÆ"W2"Q0'qVqz`i3F$Gv*.JKړX5s0df{Gsm̴29^T#E.=i;lMe+@7˼LS2+Jҏg$b_Ot^ӣez)]WZųsYaf]^Ujk՚篋}SI9{Q; 8Uh's+&q@}YJƨm)9Ӹ͞RTRimU09u\GwOi4Q,@ЇNtHOzV,tP . 'SXϺַV4)-ѽ!5À[ݥY:ۅnO}]쎕ǗO54)yv)9n+ $Vhnٕ<zb=}%3$SW}QPQhiG~TZ94tKob5vzjn~)OEeswkؘ9.xm&&l3њy>$d߈ &XdDLoכjy怪ؐ{;bYeZ1ه._LPE:~D6ai)IA%$~ מV>PKY]dPxiXKw'7ԟß>ȓ::Omq&Yc Z(,Z9٢2:r@k(fN21xd_\75!ZhrTvs=VD>t6,txi8$d{5\>j']Z{xfڃ81(q؍ =6,v ҆WHd0`fNJ襉{SU9Xdc 6N"괟婽[IRwj_u:TzNH&H=R0W'D7duX6W| W$JYpRJzwo$y'b%d +t/;X΄M3L(Ȁr Ua'IW@v rJ۱#bZBiGCeB{(Thf,gmטÙ~0k[F)[l11ꢧG گ˕;h 9#Ɛjx?yooj)UHVJۅj~Hg0ܨk9oo{fE֨`ҖiiiFUwmm!ur\vkčзUv=rn9;zo{f'V +pdEECEq9pz#p3l VYt.Z`M,D*{Ȼ [4Cʎ:*c5T?7Dt7ƛUwHtz2+!@W1CIi+/8f@[\}Xkz_C_1{ ZEu]򫳊j{[ƔF|Ѥ28+XR :k;ئQzyKȦ,Okkz6,\`YiI@|tpgJt쏣n`)LMȸ}u0Ū q)HQ{x-d쭁ȨDJAt xJJC k>O:hz\Ȇ\"3[2e/7t,+mЉ睻HP{+ʝDnfp Jc[KKk=T_ɉkz;)*:ٝƂl{SYٱ̹8Mj+~u̶,W |U+\ɾbD˶Z)Q @\fm V&g ٻЃ%~,]-#  )U.E!#eyы+ѯMMmxsJ㞕5t,ӓlr $SvL5u˿cfwTcB{y,gl^4m`+I`rz9=gҐ\'Dǧ)}%{ṅkhoGkrKk"7YcnG W-|ϤT]aSf3ןtgJ)vq`rh UC՛Yo=tm=j&;]ݽ1ʥ8&<{J{voI!wtܗ%ޥBTZ2]ƉݲR&Rʴ3xyn2C]r&!h⇵;}XѼۥ-6ǦM4Ӂb{OenzZ\'kϊý'iZk#.X'G\7ܗRX@lBGՀӉ^!unbUiQD*x`̹{+&+@ ;l*_|W|盄VxS겹~%\y fl,WTgv&[|ޗY*M 楺Mꌙs~ѝs1MX2XNqBkNKJ7Z 2*xk>l> dojnjoLie~ێk:ߴtJ*.j#E%5:F0npx.YLs uv颮m~7|a^lb~>3Sqm}2ԧʻ*DZh .qJM?F7,+OXo>-+21͜K-T_l/*me>|l67Nxx[S\@%sV;=ϐKF=qo(,ˬ^g<}˒nuOM\k̿˩r"}⚶'idЬpnkTn_!@GwkOvl틉 s5FЬLBlF._N9uq69{ ,O*hŀ#H@aQHp #bH1EJ\ǂb(rdG(Ov%I1eΤYM9uOA%ZԨΕG.eSQNZUiRYnצŊ5رW6u-[qΥ[]y_&\ذV\̤U|e̙>~Yg'߬iԩrڧ뚥UϦ]h2GKJe9$n}O-`iٶO^λkO( /Tڝwu|*ϏcLH2p;n>#M{cA P;l/&TqE+|DK<0i3F_dqH"kskpGZbp?T%h? 9,K01;D%s3ӱj$k28ʸtP'ôNK?tЋCp 4GB=- !1,*NV H*\ȰÇ#JHŋ3jqc t IH$Xcȕ0cʜI͛8s>ΑU@ OS]ʴӧPD¤Q(uȮ`ÊKEx0Pl6ݻx`B k Lݾ ^̸s[`,eJsN~̹1*yq S=p3װcVoOnks@bV^5[qУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tigX`Pz.4I)hAyZhL:hD"TiBR@c(J:Qj*j2)>N`*|*П)Cif':l K;Т&ۂ{mv{ *ښУK럷PK~ʋo&{/,l N笭*+j ~o;˿xF y2˕,K l*rL+2 ^!Q3Ш<Z,v:{Q?KTGojWDw~T^l&28Sݱ1Ml_{GngUo)8"p[ȫKj8hNvA)c c3l8ʈh7/\m sxpl#!A1H (&n #И Θ'К1kXE;vl")kjSS"UmZ=az6WQ3e*unǨԡe)M~*jZ]Q(tb [Z4&~(h! j됊| t+uUpZתX*h0ؕF̌xjW֖sy4kAkͭn΅3)%t-Z/ಯ-tib\v|UFx\M+ѵcZLOEѽ}{-mh-m,^ES&Yjˈn0sq]bEؿ!k-J-q8bT$Ҙ(B^L|aj1Oe]{շJqfcܕƼ1A2VGT 9]c~|~~"OȎ}+ÊZy3'=]2l {<ҭWA90`+"k;Ҙ4Si+i"dJ5MRUîF`,GΥsEĹStQT,Wro5Baۚ)MGYo)Rcf%MxдZe| hFg2Xj" fIWx:qƱFrݭv7Ƃ[ k%\vkĿ54͡ʸR6cM1a>QiYffn`t搻.TܨDchr@œ3:tGj'p,+#zMy%vV{U!nzދÚuذٌZ#E ̼iW"jt9\ -/}VěҨs` l}gO[Iىfqt6mof=W Uu56Q\$$KSf^(u֋Ȍ1tx?yF4wwxc1Ui0tYhb{(&:@oxRW< 4_5daGuVjh^:uHs9qV%by;2rBRFdtqjfFxO0)IKU"EЕm%'b5I yN Y-o2#U?s4.yckfw,JDus7H.*ѢGPB{xw,^c Uhy )eThRgv֓R`s`jٕ^e6%o^STJFKcC掎t9=dbixS癔9!xtvIF>Yue)7O}V] GXԛI9ه4UW_W'7xC`#Մ`IFƀV Kp{2S9KAG9aiTÐ%6!I%9" gD 9Ww"`AWHUYtCU&Ó JÂRXӅYxrUR{Sg0j!KiQC8/j= |T8JYqP#}YeGC)5iHؘ!jl9aW9*Y*uʦxzʛh1Z9=L7*!}iCQ66d(MqgrnfB6~8z&naoiRn#_ zSIJfeRoII -hLجf" jj'oW2'h: trolci~z"ʄh艳J{wחo}.#/VU{}iox'5wkq1^ 3aP#Mep٨YDǝ9jw\oz|̧}<ȱNݿ>k}]V~g^Y-L%c1}XfjCTHKs$,]s ow>E\ Z ԨoSﺮJPOSI)| 8ad_<_k}d.dȈL.l.?x_)yMs)U$kn4W -_7IRK;ΞJv ,ҚnABKc~à|밈/ >rB1W4Xڷ֯Ui-IkWM /+U3gg؄uxANĥC)2 NQa2L0 1RHǍ!5LQdG G4IK1eΤYM9uOAJt ʇsE-IxСGR|pС]aʓ,Ѳ45fKXz< RPy_{,jŊV$9\N8XDRŘ2ݸ&v sV*E:m`رeϦ]mSOo'Nnqɕ/g9ԐwZyb~3ŏ'_yկg{χ.UzλMݰkl5&TpA,/ B 3i:(1q—3 .Z11jLCclL *˜/t:bpF$T2j*4j#njDM$:N݄\rL2dF/J, 4-!K1KE.OKpOK9!4Cls=2lJ|(NBb,벳*SXcNS{d>3Т+tƩ*EOYUvYfuYhvZi.Ov[n[pw\rכCt][-׭\|uTǬ Tu&{mmQvG4_ ;m^'I;VÌOq7D&^qSZ$eF]n(d{eqTM\U2D#d^Y2>mfyktDLNJQ6O_b:*նcn[AӴ.%th~_Q={izݔQ'I"r%upC3Uѳ.%?nS|;QO.ZIuMĺCf{qT4[|cڣV5 ^}[W2rMKU\e؇ڹyw}~k.k5P$` SpZ\ÊK,RzEӟkʝK.*)( | m/ǐ#Kֈ޹pf̹8\ ßS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)aSdBHAMJS6T%yO2$IJ&cZY&m$g%Qo]Gi'c҉P MdxNIh)P%h9Сr.?~).ty~z$&ꢨ2PjYpeO&f~%~f쪘"l,>+:,vIkZ,AZK賶빓*iBGlmŠ+ mлզw)Zjk;Ghn 'm’+ҫp!#D+;+)-DW.*HJ[\PG-m)O-X\ff'.6$}=*beggMuEWy4oKꤞ4k.%Җ_4R|,݁#~N:79l89枏^s<{Sݻu?m[Svч;v咫w}^9a/렦q 7zsw*>b<ΐHlR421y{@zm 2o 8])\GEAS{t; PV! NS׾\Lc UBrBp`  x`VE&ĕqudH:xcG=i# KA#"=E:򑐌$'IJOwSB}| 9R&ZRy d^QR~VJe3yVj%fI[{bLE22G4L&o[E2)zXY"H2On錘aTk/\7a4g )M4_9DqS@>lPQl IjiJ*2A9%Pq"<ȦNf89ȏTwAfPO <7Kr FEƺϘS1L~м!VVcd*POP:kl©[E)f\}*YREϻgH].qϔ*k@׫z(gTIZ;o,RF3p hGuVJZ괛ԤjyqeFm{^ELTWY(מrJK![פ3'&og+|ޝ2>qVaG˚6l2WTKZkQQn5) pX=W=)/_=*jp-]WU[{Yz<,rE< OWǭbtn)_Vn9vy#CFmqpf-7.SVEFfyUlOt˜|7$0t[e FNc<~ȜXs?-7syOw v5ڊ\DhKjյVM)4>iWUE+>+<g5WݫDk.jWS6PBb귩_TbqYijLfuC>jëNg ]MP`w[` na_$t2)Ћ}uxj9x[`Xj*{ P07'<z99KwsF.iǘ^pc]2 NkIzt0T+jK9`LKlvo'uݔ+0nvzI^;JjXrXo'Vi2\s?~%o ^v#1&O~u;ӝn˛_ ExԻ[.AҼ@Yfwc֞/ˎpB=E/C5n64 ̈́D]'Ygx.2n.qb3t(XW%x0IXH}{P|G.7`yR$_yjup2U5Lb$cJ`7Pf(ir4&^Vip8vY&Wtrk%/uGT&13x(ɳVd0$@8׈w:ehXΈUthoq"y4y?Iӊ<4r?INyX)GVh8h:LJzmT(|K8R?h72e(%*A544~K*Ttt'5 (Eb>HRv& ^ʼnbEyT_wd(kI˖v&lWxX7?6:q t4}9/_t!-{cv.8Aɀ}a!*? uGRF?S3::ձ}QMeW,o۷eg|zuSJmVfkhx#}z4zʊǖ7{ pR}DZD< vy~Zi6,|Jra Hk{xˋ Xv)ʞz\X{*;Yi`;EIȝ塦mb,u,.ȺyYG̠)f<9l\NSΝńi\s\.mYxlw{zC9KzۿlKͅ - ѷK'FHq:i*a(u%a?M-J]Xއ䷡Nm{Q~X>$]\.^寪R9bn7p7g.k> -nka}pt^ -Dy4prjNz舞N#}l =鏼K ξ~CJ2Je-ɒsɅȍٍ̃gK,}RؿV̷iUětFWYIŤC7гLp'6>i]|tN*jiJ.nPˊ] q)1qA]X-AF1,Wi+! 6_rS)Ob]B$?1O3O<4_k8=Jz={5ͮ$>J1 T=/PqTh+7:?QTsF>?! gr/SIaj acPhnrVA|Ptmz*[0i?}aC맗-o5-<nooϔک_Jk}$ul$?1$6/Yj֧ڿ Ur-!,*V H*\ȰÇ#JHŋ3jQc  ұ*) @`˗0cʜIM<dye= JѣH"/ńyBJիX{YeiV"ٳh&Y<ݻx5J uX`È'o { 0WX˘3k,Ls'L [Cէc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&aSdBPF9aДV4%b_:&9iCjAX@hfAwTB{ۙy9g0!JhU})۝OZ@m:i餔V gAR*Р.TeQr)奐z^uJ&_6h^Z*朤Ί~ 갣eڪJ떁jz)Am*҉lf.Na)yVp҂kY;k.\{,&l+Lm/d.n;Wlh {q (ƫ놼(0ܱ (l p>Z/1C5$;e'm#4Z#y'Ơ*=3ׯNM.]27^Zk'B$y1]w砇.c(j֮.{Ϟc^3AU b^.| [֕t2A/.Iߜ}E/oW>(Vk#z?{E]K`斿6J[W2m~Xb6c_f-I0u2 цF,z]po, Z0"{6?65pVTۡ6~!W93_~BV84E7nKH"TsS/eP(fEPa8du%32υ:S¶it$!t2/Ȓc aD* AQRԽz8AbB"%41q$)êiꃘ̤؈ ܞߜBy%,F-I[B6++֧'fYv7jvHp G[`"tpZb+n' VWe4=Z% mG]9ɶ{zR&xQ*,WR{'(8mll&,Z;߿\2pDś^w[셯ոޢxe ǢkIeb~RNp-}ɚa*8 o;4'xZY&j+>NR 4dF%Fne]U~wddo^d\ߺAߚ vy$ qCo6e%Y?oZ3i%> |7~9ozC|C'ц ]SBf?dR7~[cvZ?Q3nJvcHEeu`CF{ک,OثYOmkT/Va_L]6fe֊XBnYifim̰v5v5=lO0ηq~b7AϬpB/':65~RՓM5-5p%AvJ+hdؾk ;):|hs_ul'Yuk]% zt>Eu;nǠoM'^TJnMi֑:[hOߥV5*uv̕:BbOy+wO9χ["+QMݯHLxNxeeH)[!ݪT =5 =<|"q?uwt-]2kn 97_"!'ۦ?o~w4^}˿ozYvvr~e6 ؀xX[u o5F4aiTrxfgr8%G'!@vv~V,g0OouIv-j`K.li`mgcL^Vu:5]֕[H?p/T`4\b5Z5CzrDJTItt=^afJU?3aechb^XI؆:kbdf03eɅe(|3E]V;dd)(V\X(x3Opxgwb=xd(_Չx gxVx5iXqAxCzJvqb=mW ،㌟Ft7w-%HxInc2g?uesy2tn8'bWtwz3wsR[ITq4Veww1Dw{*PCT7Y_-{ .RȖoH\GOlDFw47ASI} zdjis7K#wT%moG[·3nd`7~`BΒxY{IK}UDxeanј<"_k'tuS|wtB)v98Y|81t|yـv&g3QIƘG7gWqn,8>fZ /6W7Ca_@$awUՋ95V.7A]PJ[&.fӨRPDy,z4FGx_fvp@ZC6gyxIɭz"hE=㊁H5ԍXvms_(2Ot j`zRc=?گ7PB)Hx8@լzuc$s:nMiLy8WUHVQHA\HW'ie4XV7vH8Zy厼k40cCwsbttg;x66]5$D9=xDaضy1X;jQV0\ˆ./z]N]kg/8Y4kT<*~tcUJٵ6;P[2IIh8vW~ GNˁs{zޗ|7Y[uG%vl֕4s^圡,Ud7j~ 3~E{-kTG* 99ds89۽ӢqDI+k۰' ી{/@9{PPYtu4GGGמCJzoRb}GK{ UH!\\鮁e)L[fx>h;dZYG39zؚG+ÐǑǰ"LDaP[p4//D,Lkc,5x3<ڳytYrti KƗrM.ECcK;}bMژDƈ»W&>aCP.ckH爁{~+yŃ^ Ȯ:ləI+ECԓ.Dl%7:̣y)K=I*6Q6l" H܊RϞlQk#M̋LN?M]Y>۩6 њ=sR]v׵'툮&*U3Ea˟-~i7z1+,f52]^+Mѷ?3f)n sH=F7~PbυC뀽"?ܾ&H$* ~~A K690_=;OFAaa?C/K_4O0[/P!CSr[:9fc2WoQK(9^.CoGT`llH@~ˍix`?C~$6?)2DI[p's|LO(_u/J`OuN٪b_y""?/oh+?ϟNJ݀!,*NV H*\ȰÇ#JHŋ3jȱǏI#I\ɲ˗0cʜIs 5MVΜwVѣH*]T#M-7 ©Ujʵׯ LB)8Vڷpʝ[N: T'jB)M2͡Ы :ѬxJ꫰'&A. iZ~Q6{\1-z 꺮zj⊪zJ*A;ަ+кo ݙ' zB 4qI|ۭs,wVںr 3 i;-DP:lch7lt84*uX# s ? qx=_+a'C}ɫrvѡ"}sZ[.*g5fMcsB$g<&\ՊPᓧڪSMqY_7Dž98s[pm1>c<Ч*難taSyX^:\מ.κ+2zǭ5 '̮Ƭ8//>+LJHXR[۬5{^BE-{5$zB"^ȈGgÈ91aJB6ϊ" D!qmݶ')pfhb5IF㰖*(^<*hWKsYHQO"rHGz %nϙQL*Wie52^ƚ+K\s{b.?rˈ|+-1 &H̤nq _$iyф%ܞV7p*Hɑdl$9j.t\=y :NOȉ]g9ݵS gA퉔XQ(,Y( R˕B {<3B;s'E36e"GXA:]h7i.d&uMKґTL%,ԪwS%u$g)Pf+-- S(sSmEuӌvϭ^i778`taQz/6d*1J7UpIdaHI llY úS$5(DЦUlwDJ#|D5R[v p?Y:.Ζ\K}s]F?,ZT;-u q n:N{ߡIVsTs}u|ƕ~ҼGW׫hC`aJMՂ`%]흰*/ַP"1̦KW1vӻ8'TY~@r HN2IB*,?R\NJFaZɱ]T =,W 32juɶ>b.z°+E]*^S"VQn }VDW^3epG^-R>e V+ZrڲG /F]'Ѭ>;y$]l.:2&2_Jz\eC~1K$"xA n\O8Htm5 l۰qc%;vGiÚpf\ts\寂uQ' ?pa%⭝o^սiЁ&g$d*14 }N91' NL7IQ}l9wez+ķTv,' AOޑ>Zۺ϶;5ؐi"BJgm*],Ws-;80\?|RoJ!_z5nuZmvc]}y)})C߃ֳaw7XvgauO} 8XRr-Tv4LHväp 1}K 7Yx$,+j7DeQCwgW!f^t0txtWW_>kO7DrxP7}~Vn|ƅ`HLKfHzUtSkj7TV612n8flF8={SZetiEmdarR1YqX<Άipx-1'ejsVN3FmNGptppv:ʧXa߳c~pz'|ȅ>r4hϴ@ӂI8F0SVEz(wX ظCu(%'w&ex(T0xӅr(042=Hw`G7?P.PՏxf݅WyY\QqETE 2zܧ|hjWk}z2y^# .(_(}dU8t:÷|mXWGQH9膠œK<W}%z3YAi65c7R*5q] ){M=ɑG^Ւ~5Z1xEl Wٗy 88٘fٓTv 872WBy`Ƙ jU>tAy}VM(Nx.R|)Sb]ǐȈ.>0,f$yX'2ӋSY~'QiyjUlAQk؜^Ty|USgdk[U7wɜCŚ6`SvBy䞴5R<G-XǗ)jsS]"ǗS5V=Vi}de~ꇞx3ۥcwՌwCF7+ȢÆa[3qAfET[xqI:T*@%SywCK&YYiv VgDGKDgh'-ѥ{g /Ղ#'fm*e3&2Unڛz4yZ6w{=^T z^H={72?')o郈VDvf}jƥeDss}simoigp:LIyjtk;MyCUiXeUOoY^b5GGնW;LTgzDg݇ʟ?iI:փEkD3|KXA׮`jHg6 NZ%GfnLJ'ƌi{kbwm^:lUZqEH;Mz=tx}6q+wdFCtf}f%>\xhDB .w$7;Ha>ooףYx? xɪ'?@zG^.'VcazCkKxpblj@L~Йh~'Ƈs{غrfj`,9s,ip9+MKJ^}ӆ^WDD^ G,DWi'֕5K+sZXUc,|^(M.As)飤>~$n-V[ꪾP"4LZvل+N-n2 /J*>ZҼgLƞG v<>kW蟮-uŀK,"qyJ=H,Qa)ԣnW=;+H&I;΃f_ޡ-ңY>o1?K%!(o#Ɓ/+,1o7fnA!(!!8A?GFM?=N/c#pUokO@_hw_P`OzoN}+W[67"Z/ll=q'o|b0?C!O:_sqʏw\!,*V H*\ȰÇ#JHŋ3jQbб*HQŤ˗0cʜI͛[@IA*]ʴӧP|@)jD`ÊKULuن)HVݻxe{u lE+^̸qҪ>t˘ k̹Cƣ?̺} _L+R`*;,9УKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dih X84mR&8&jrFB.g{:hD>h4XYzТu*jN)vXzXz@xY'" 'ꬮ*흷C-wRj-F뭬bq.hFZ'ƻm֚*k~K->f-6Ŧj o*. X+kC ܫf<1*Z[s';ṷj-'L Iz:7khp,T',yYUyb jb۰%>Y+nJ+2=PRokt*|[G;E$6"NG_ĺx3zm9&(7A(:s{Gz]8kN|n^gcVf!q%@ j-5TR;6eF]Db7oy@iU)vlGNO5p4jXsNg~_rwFC$C2l7nk_f&y.WplIh:fB.f6iZ|PmghSw;3/`59n[hP#UFhiFFFF"yhw8"g۷TW]egf#⁆ r~"NJX)0؋CxKGdt#w h8?s( Qk%T$7VWaWPcQHָNXLUMmk{UGw明WSG,^wTp3Yrz[JȎѨ5 o)'SאXjSRhr쵐1ogn2H^IBLGu|w0YW]cqVXeUQT[Dy~A=PVb9.Q{c2D?|ua)m\䌼o!IlIIg=un/u;ȆF~8T|gcֆpF/ldHoGCFȉ`y#h}3zw99'BْSQCn! g0s5Xc+{6v9!@ )\.SGeZ[{ g?ې~Xc׈ rb7Hh{E;YtK.stYWzi@vjCIjeiqeW[:mv*3K6bR8r뷹xZ: qSI1 :l 5j7tˋ'7)DSD}Kkhr[q[ :㻁[Gfta t۩QǯC՛Anهo5ѭ yYVKDtv7K(KA,XH5"Sg^~Ze?1E"gCƙyKft瓕IaSX kմKk b~Bc|ꙚM)km+vwèuyFE]9,^NhK> OxA9}9]g_#Xt`|n#*cjwt Q! AmcNm̳!!bZ1}Ome#!2vo0t\cbULv/X%_N'~ouOΏBW_\_ΪQdXE%&U _*X Tؐ Ç%NXE5nG!E$YdDD8S<–s8sʃ9`ʅ8)(O>ҴIYnWYYNTKQe֜ٓOqQLK,D#.AL&bݣuecȑ%tmж6z"߇q´0ҢP-[Sk˦6jɹuo'^qɕ/gsM&+ZH%NwA!L,V H*\ȰÇ#JHŋ3jȱǏ$M\ɲ˗0cʜI͘U2Λ@ JѣH^oNL*JիXje3 ~JٳhӪs@ UܮKݻxLi*|LÄu"H!أb`KLe:k1ȗCM4 _ADٴװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n'7G.Wngw砇.褗n騧ꬷ.no'7G/WogmswOћ׿={@7yx2s ' V^ σaGA zG?"94Rz2ao ?!*H c%2C?SDuD ]4ýpdL7F0p kTE8q3g#Sx>^ЏٓiCJ#9$2b™7 &1.nx $' F>f2w(KF@!7'p9I:K eX@:jfL&1w\)?iSd5^z3ye-cEp"/9tVڬ&5#OSљ_+LnҚb,0eҘߌe8c9*4Ԝ'e0ms|#7m$>mq`!_%4s}fV.Li5oj6s7]7YtteQgi55OZѰfsKh:74%=k&юƴU]=cN1}b/nﰍ]\/ ;V6^ǚtro\ N)k{"jyGzί&olTk:7}w{^1~krխvgF6ƣ=m[G3.oww=rH'\ m\_[݌wKih8υoh_7rK#\nsY[8n8k?!O,V H*\ȰÇ#JHŋ3jȱ H1$zǂU&(D#Vى@ɐ#m)S*af͡PJJիXj_NCʝQ!$:ם) v+)ܹ% LÈ{*p熲:bŷU[q kٟh^ͺװ ( ΰ_= @!lIx~8b9m0.Qسkν{C&iS@סX@*~N'/(VgS 6z/U ޔ_(wXF~aeKp5G$ht=!; JQG*RK"؆UZ(D]}bc(7T`6y[D)v@bm_U"`S_FihbA"uu#%U2Ckٌ9`64RNIi&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8L"Xd54 sC< :BLkuAWE@WM kDdĶAk=Prootu i*6B^cdvDDOuxƁ=/>gm^wD[iK/@nA,Zt^弻>ҩv LJ›#Լ@rϾ|UC9A}gBN:7S0]uXOmB+_޿G<7fuȰnS g*}~f>moj;Ɏ 9=ɭ;BaovX5XsaBvҕlѷ;O M 7aQK`a;n(%P!`*$As"7? na!k'Qx\hFi;ؐmod ThmΒ D;/ԣ*HDRQKԣRʄ}D)h<J`{kAb>(hIOw),Nyrv*2TW&|`uz.oc6Iq+=fqؤylQ3Py TLҢІ]e-HmJWidEGJҒ~grD KQ 10XSR.39BtP"V6K!2S He ZgVObQ ҌVJopUa720aK:n# ҵtbKri/P,7yQ wΫ rLs'L ejA77:*;k a6R8Yح0$K лaۊX1r c5[4Nmhٽv3xEpY'F LxUGZVdit[R8וm )8Ou׃n.!iYn/q#H 2~}AFIF8aRοm,5S]w)fڳg-o/֪ǂN` b<xQ̭C S^>/nd Ql]'LJ>f!͝Ug 92>QEy9#( ޡe4јδ7bזnNۺt?*;*k AER9O[5*@\k`׽3j#Һ!>_Un4]:Z\]&V8āfѤ;)Wz`-znƵw ?WvpnݥIfR˾Py̼zn~po 64=/{ixYPR;״ݔA+Wn\W}˰(/K;,x&_ nmYY*Q0rŰoOq=vӭ\o=59搭 ߲K!j4~PúEzx䀤̭u`otq\Z߈[~jM5 :~6᳣/g&!T#Gk|{o@>*A/hn{;_YQkK{9>{C|c=y9y 1+o'SE?˾ߞVI}r4u9Фn{xL>cD*=YW7GrYW~W<*\ǁ+hgC=m6O7ufl~#gf"pbw&1\[7hefU.Q5sC!ikE؃PR89hbքq;5h2T(}ahW\SRlk._vLFv,cfRQV%-٦LW`mVdEd5\VIokC6O#r8&}-VKxbr'ZF5pOGg+ g  ]pL!XXxdB{gAQW6C{,whiNJ1HH*6G98Z֥6ny8z7KHWED;Mu/UwfX{x$IYv3nu)dgCk7+Is"tY,׋7^iMxtAJd;N^D{ -vWwFniwf|6:}^jXtWD}׎MD>FQo[7^wwU"Ք7aFs 1|ӐYuu)PBeÔ,w4y~0~~陸S9V@l;)wx>Q$r\E7Bǁ~vfpzr.i,%f'5fl -HT&XT%*wwf$s8:VclY2Vc[Rn %\vWRgUTGq3pCid1|twq|:29QE8wamƜ[Yf^e8.z`3bYdb4 ybm:)DdjB6h9JWI<-U'ZRǦ_e΃=G9"?* 6B,lj`5 KO,::Gg2lVn6XI0Ttwvҭi.9;HhQƒ;[*†+ja@zCHAǶ@* Khk2qJjXC%r*%'%ԫnJ?XZf0"EsZ.1jV3z5:U#wӹ}XH>D-A:<w֗ך)͈P,MW@L =TJ5jtY^xJjkJx{:GXpuYd / ]kCDֱbxErÝ4>{.E׀BK~' \G/zbyxa5@}gzY|\[^)/*@iK| qysz;ج{q*H%ǹY {]Iy~K{,zZ*;dmYGS~ Zٳ2gf (Cki~. **}0xsJEM_l;kWӧ'Mܽc^e^%'{td%eYn7eAcj"܉x?RƇvJf+ēIJh IV;zJgcVj N pׯfeYg ĝ/\@ls'G)SJ>윤BΎ?7e}xx+_G͑/:Ǹ j) ;]&YtS{ `#){ڈ_D(:Hݎc-^vPXOM_iڂkѺWkyFl%Ree4JP׵flې٘,77D<z:ۡoR]r ٿuU HnH{Ǚl9b3g:Du„Q錭mv銁䡞gèvLs~븞BPFM{5gIz8YU, Yl Xyю~y>(⋈Bw5xH?ǘPܣ3]f}h &7ޜ+ǭLKJͪM왱C3ݿ^޿[kvu!=bzF,eY-Z~+mNv1Y<)$>!(>z{Sg58&Jm)ٿ2kiItM /oqAS@8Y$Y$鷈ϕ[S@g dC%NXb)Sb"0ƎEȑÏ'UN4ɰJ1eΤYM9uSgJ)Mr SЗ0dQQNZUYq$:_F_zҵkNiÞh(ĥpft]L_&\aĉ/fcȑ%O\ٲʷ4ey%y{iԩW^ UlC(&v4q٪u_y~z꫷z~{~jca'Ҽ[|N}i+^$b׾lT/~Nsp.kVIs@zO<0Wl"KN^wuO|L:W2n %(̢ ߽ .7'L:E22k2=+&Y5R?7"E@q?x#-ˑ:@"̟!?TTɃϑ@;ˮXDA a@Z6A @T/1k@ 862nAoӻГ@ܭ# O2['"55(3)B0+C˩+ 2.3F8H:DKpƸR..:@:o C;5b*$r[CeC/Kɡ:CܛA-1<<,u+l4|wY!U\1QT|H+HܯoB[{1ER1l@y2 &l+(5$1L"<캀 8Dy2򪊙ƩI 44IiI?Z+_!390ټx ʑB{@OD4Rt[Jwq;a;Jd[$K33+C@="KwRDŽT08 ,KC:&jw9J4#4%؋%֓0BBAâzI*Ó)ǿdG qǶD"=skTF쬘<ڼ=>dʇTA8F4DaEl.B48HҳIEƫB`Ԉ pDƘO b ?b J͔ġlP P P P ĴӿcFx =QޚϤk⡾`LLDQƺd˩B MQ[ ,pq.1zSZLdAp#C#NtKj*3(14c+BB@܌W/׬y1\|SI# r/NPq DP:TKmgWYKc.FvfeW39X %aMFT/ؽL)}_k IJh~DmfN-bbUʻhM:dƙ mY=J`0TWPUV mmnn.n>nNn^nnn~nnhn߶nnnoo.onNFofnnoooo֬^pp.>pw?nopp  p ppponoq_qwpɩqqqqqq r!r"/r#?r$O?Y%or'r&r)(r+r-r.r/r0s1s2/s3?s4Os5_s6os7s8s9s:s;ss?s@tA/*(tC?tDOtE_tFotGtHtItJtKtLtMtNtOtPuQuR/uS?uTOuU_uVouWuXuYuZu[u\u]u^u_u`'u2@t2@aObGt4XX?`vhvivjv[wvCOvDgvkvovpwqwNGF*vsIoCwBGwbw'w{w|w}wn'v:*XCwGltw_xoxwu/7xg7xxxxwWtg*yH'cvwx?yy?vwyyz/z_7xGvx7zzRGbtzyvcGv{{/{?{O{_{o{{{{p!q,V H*\ȰÇ#JHŋ3jȱ* A )R` TH- RNJ1Gɳϟ@ JѠ+L:65@`If՚J 3 tسhӪ]˶[a2UV,N5lZs LÈ/$X]~*qJ)%oϠCMZߙOr y8^6-ťsͻw[z 9i -(ܶ^KN:V%H 3Mjg \ӫ=7L3MQ_ۏ _o'TN$ | |I :H^re ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&0F+Vkfv+ӆGknVnbnkᄈ믺;oLX`m7GRwq _q # mln2O-| $ :$-3Hx4Ҽ2~\RXg-1I*CW5;vg4?bC>p˵xuR@/f5&lnjdV!'ݔW~/Ԗ?|ۍ M2ɳ^4uKyҤR?R&dZ;I+Nx7X?/zHSՋ?K;y]WAz;o]yw;ȃ?.->HK|^\.ng{v.Z7 ,NBB5vJ72E( +g}sC :UaHZΗYg:10Z;"W&wk C!5>/v AgxWG"\[;%ωxl Rlo"Hib!oHm#6p GnIAxẉ*)GMh2{).YtY.U5hXV+=mj_2WfBl̈́I1ݑat60jқ3YA.L:%N's_ 'Izj >SO1DSgD9| pPt hI? j%CAQ$I"j@"R4&AQtF R,hIo~Ҏ8MAE:ԓRt!EQ'Ԥ:ԩLH_Zу4M UѮ j8F*Gy>Q=jQԡ*+TTV*^'*ցT,/_7*oYZ־ ,\YZR,\ӿ!icRXx6=K[+#bv& RUի]*oMRv*-)m.Vőm5ܚ-'9&W!li˛\VmU:ŽLj4}.8Ӭk]kսռ]/ikO7}VO_*r*w -1iWКgmꃇ޸r*5?.g"$3Z%R¨1s]*Y!r*|*v /o 9XQ\+e0pK"u3^'Veem+!G@ FhZ*ߚb2s=4͌Rt@5Ri W6rAz*8DhOIZAesv.Lju7A7rwϻ-.ϭz)Vj dwJˤBğw |ƺӅFq `Mm2SU[-BY A6e j 6[:1|]Zr3 ?~xZ"[R}i/mY9?0K~ܳy&V|-6*ԁݎSuϻo+&s;pOq"-n;G"(Y[ķ5l^I /чtIc~7t>2 $rQyycJ>'\zAk"'MO7Pl^๗>˃ܐ+?/䷎ر'{rڧ{cQ+}n5@g!n7b`freEV:\twoww|ȷ^XW~Y#p~7&?Qzno#;uHrASNk5`ՅW*8r k k&W,5\.p1~t`HńO}@^qVE8xesiȇvjShSD}iy|4mxeyVP}YЖ}v͵ԥ%R 'b7r-v|(Fk}ETXG4O_H}XZJx+Wxd0}G1ddGz|\n|dWlȎxzb{7z>fkFbG9Y {ewS%eٸq;脷}(}RH-UXVX URhFLiV'ǐs8a^~~nlfR#THn5m7~(Z*EC a%V$Ʌ؏W׃AuBhrW]jTx`ւ[n}PUy_\o[%oL)"^q]t)#[kˍnnbۓa"ߴl_k^n x5 W+1c]azW궻YO\18lkP5_ !kg{٬h!GB޽xѩ7]͂~H"zfEZ \呻Z֪P?-XTsΌE>Yk: =?iwn=9],W!tY`=~Jo[|.u\Ռ\z no̖o$vxP5hkSIy~_ +}+"=>&NԢNsLWA .dC%NXE5nG!E$YI)UdK1eΤYM9uӧƁ=IтF.eSJ-bQ("ՅFlݚAb*Q(Beժ4a3d Ip 5yEfډd? F+ׂXɎ=8_s!O,Y$35^3e8)ج:LP[IT1M8s;4.p͓F0j!EM/O ;ߏ^;ܖك} ŵje`-mnx[8O9< E.3무6ɶC "o + i){K/Fk4cnH/#3t&Tqʎ8Ӓi3v+ErE,hdF KEsMF׮DSO> 䭭9+s"Bt4^ L"SJ|4#],0B%lT7FK66]T@T״\Oe-5Sc;aAOWCߔO%l,>Ys6TtR%͕.-5fIfGT{m +=(_yRl#?~sZ͡|WBk9 :et\ x@)ȈKZRW>eGvS7/vYhgz\・ չo{;]A10)ڝ~Q4M.*Ib_G$WQ~E N3* @yG&nRͲ<}[_b$Yon誁YpZy`4X7I=Ӗ`go.eV؛Vf8-&P}8|'pn`Fh!HN!d۩v۬oN{PU N[jŒd.RkrUW(5o7 U2?.QHF LSJb!N:u3rh%BP2ɱb&[W[i'@9!UK` h%H&pQėdf3?U]|_#dFglҌ3MpS$g9yNtcLg;eVX}0Il笜",/zQdx$ ]4HLm1t̜$Q_AD ٨600u:KPTTNeNMu/E*QKO= TH i% ^!9hR+z,l;)ɐKjPH5< fL*z(C:SMm:2mU%+H)GU+N}=(lݠ3DjKr6^M_T0jf6#-cXo'ˊd,:'bvT[$^ Sxh՟bjZb^S^a/zRHFNsdI:X GcX !ɼ5g0/-hy+f5^k[{_N =^5ź5nW&p |`'Xcno N p:s |ԍ|駃IY:g9mh8f=u^;kS=*\ERz-}#|} .ctf Syma9\؎|LmT5Ug9a,EǼ#T~ٻ2|:Z/l~tc$cTa&|9ú6Wed.S5.l ɋt-պV(O'V9X=ᨡ k)ɮ$=wCNjEV7] hS  f]Pu>'T \P_ujFf 'l?@WqcIUVc.rZ+F]řUlE2FB ,Iy|OV"Z`^dܘWg9dDi-}5"h:R$C'zэ~t'=>G&tÉ759Q+qOGe9N6YU^&e%SiϬhsbAn 鬰;/FZ/6rkwqh隆<@5I7R[@SV8 9+%LAt ˦A#A7 S2׃":s4LCVEf1 5$@C32#)^nk bT-e A J{$$bdKT9bFqњ eE4 N\7\q"n17L zBG3%9Z?DHN>S俆DX͙dJw$t<>L9I JJz:zyp5Yc?δl75@䁓 PuЙdL LP$|ˤ tI 7I$< MI{J5}QT&DR3$R&%DA 9TlI&R-R.R/= (/J1t,2S4( 9e6=%S;=F7刌F@f!T'MS1D;+&kPId?KMUC6tH@8CƎSAS-\SQB#/QXZݮm+d0"U`}P@VbEV`gU VjVkVlVmVnVo]o Wq W@r-הAWb qm3VvuWzV-GCWUB' rTslV<)錝RؙUXԳQ={'w؁EBXAYTPٟ`Y(F%YBXӃEHٷ/r̈ Z0ԉ`YIYJYV-DuSYIDŴTCɀ%WӖE ] uT񣛴Ga{[Lm=m ZV[َ(B%[1ܛ"zm\}\ȍ\ɝ\ʭ\le\\͕\\\]-]=]WM]֭mn}]mWٝ]۽]]]ݱ]VmWcUUie^%^l]^kl-;^p̠ _׵^j5^kgMcu^_m\_@W-_uxE=VU` vg]m_`>`(aVWu}jVS`_:z^V^ a ^ >_v"V&&5haf ce b3$_=Icb)`z\:bamV-!.3Nd]uud7V7VFn]m=`/B`>fVDVdTKNIJV`%F`^b noy e,b_e 2fecU<ebI^XN`6e`afa2*cf@c>gdFgQߔa8WY\\gugg`|ddugdVf݂N[bhnhWv ]~o.gʕ&hch !,W H*\ȰÇ#JHŋ3jȱǏSL' H HqH&[ʜI͛8sɳ*)R 2EXTѥPJJիU:%zXjٳhӪ]1&YGWuݻx[֙@GÈ+ ;^L˘1jLәEyZըc˞Mm h `sMȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihl8śStix|矀*蠄j衈& 6s2 }JJ饀Z馜v駠ꩦ(6jʪ뫴j뭑랮 9+v 6(zuNҙ-dAkKd|[izlо.+K/{giio.EpYТQpV;| |"' i)0$ZV 9{VYͷ\M8ŝ^ 㨧6qߝ KϬFrdNؠ᫧nŋ Nnzyo\3ƃͳ~csso>+z7۾(9i{<X/*MmkV>:J %X+ w &ʂ!DX<ń(L W0 gH8̡wЄHHD.PH*ZO-^l"H2h FJcE9xc GNH)C>RD$L881xF*BCВ̤&7 ELrxD*yPґfă*JV'P/, B2&y"/?Ib!+UB&,yi(Xe&ެ8oR,)R޲ml5QNxRGI:qz3-?8P3M(Jz3m'= {rcA Pvq%.JҒJt(E=I3eERdӠ.ùю@bPWRTQ51y}hӦ/oӝd4VJCTe4\ѡdWXKVW"Hלƪk^WNb4k"՚Ft<(E$aωkt*ӽZlFQ b]*Pj4-WUkF+&BZZ jnXҀ!,f H*\ȰÇ#JHŋ3jȱǏ @ɓ(S\ɲ˗0cʜIs`*UR ( @ JѣH:ĹgʟJJJիX;$2EdKٳhb9SpʝK+qxk߿M@lO+^̸cqD\˘3kL&7yӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihl9śStix|矀*蠄j衈& 6s2 }JJ饀Z馜v駠ꩦ(6j꫰*묩J뭋z멽+fZgQg~BKƜVzgL[r{lIΙmYPiЛ oT z"& yrf$k%3 t ,֭rZGL2f;V1{-ҽ4eLd0is Qkm⌷xwLxHm5֊Ǽy?.sѮtykr1_\xqw^^_ͤb7 K7/}ˊdo觯/o 'L:'AR  * GHz&LaPP, W d9 _?,$ ZEJ݉Y,nߴ$*ؾ4yZSibg]@Rs+טVbm8{N,<,mK]ڶ\}ukɂ  ^м=̫@; Du(z;_ַ!,u H*\ȰÇ#JHŋ3jȱǏ 3V@ȓ(S\ɲ˗0cʜ) U@ '͟@ JѣH3L EϤPJJի*SPgUbKٳhӢLmIpʝKБ)܂\ԫݿ d!SX̘ǐ#KSޏ^N̹7 _#Úͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*iAST:?f馜v駠*ꨤjꩨꪬ꫖b 무֚:*j*+k첰*>kVkf,vr 6kk@.+/Λdl/z l鿚l0;ž6L nƪn;j<&3l–˿ *)WZ.۩A9:\ 42'K 3*4P۴)|E n5D#m5AmWvo0sW2,7XkuG_ƅclxĥbcvܔW.塢L~>Ԝ)Ԣ¥˰چOѭ6NNxhWw)o:Zߧg)ͳͻB_^Ҿo6|zmg.8c,{o:i-ܶlY>.~Cw +M#8`SX4)dg(*Œ.~ ^r5"&9@V8DmT+o; x-*j+59.z` H2hL6[H:jQv#>~ IB$"9GE2|#)JQ eĤ%7Nē #%CIRq< rGMd qDej\JYL-sIH#x/9]V *yYFd*Ƽ*E)GZb&-Mfz`&8ØTTHM9ϙexD;E9/Sq&,gI/+]Z2h8zmc7IJ\G0ЏID(=qːX,)GE:K}>4dhA5ISjShM[:QB)DQJTI^h?ԏ2uiRUT#5p2}i>ӗδ (W%V2pQ*~CI]WRx<W V ]+XȮ/5(?klP5r9(ZU+QQYƶukIjV}+ ޶ A[؍bQ^%hRUmmt],pSv5 [ D= }&xho1sy:eeZ]Tٴln vgu+Z[:E)N{%~iulib]>1cohmgLix,6#T$ y񍇜H"Kӳ2e@!<, H*\ȰÇ#JHŋ3jȱǏG@R0ɲ˗0cʜI͛8iV&= 4ѣH*]ʴӧR(QXjʵׯ0TR]˶۷p~LK˷߿q"8Gc=^̸ǎSTi!k̹gE;@ӨS^͐(Y> 0ͺ۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무jS:?+k&6F+Jf۫v{,ކ,k覫Ժ n @+\ ǫmû@R<1~ w7{,mʪ<(l,GkW,s?SKrCOQtH4LpA:,5[u9GuZm[4s۵bO=H7lc89v:uƆU^8^-Z.Dʹ3{j;}x֬'}qÞjx㏿s^5ѤK-zgN7mk<; {6 Ü~$#mr#:0˾7}>#Wg>{X5]xUHY/iqk$ԢJrkS*m6H^z6dW z`=%ZEVu32]MUJЇ&VYM::W 6&)MKVv']jg?! z-jOS=Ŭq-v#-4 }pORQ.wkVMi@;;װwDF\ڏeb:hbWܽk7^%%0k6/s]:UeКP }k]mծU/ G7'qPLcBXM>d STxPiL)+N-2e Sf}ٟgn ˶)m2 0ѐ=dVƯlKNGEL!, H*\ȰÇ#JHŋ3jȱǏS /ȁUR" p˗0cʜI͛8s4ɔ) IѣH*]ʴ)ƞ-S>H1ԩիXjʵpYA^Ӫ]˶۷S '*p˷_xܻ+^̸1㔐S<8ˎ3k̹Q{ ӨS^pCDZ۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무jqB+k&6F۫`VkRjz kk+-V oK tr,ll3.L: 1' s$Ҥ ܭx@c2ٖp v+@tR@VI1xL4C LPǝ7?đ?:&a4^w@ޙ~3 h9c`ږе G@uB W@}4n[ :x!Mt]xԗgXE5:5xh-PQ^^S(iAyjT9h,IP8;[S\N?BPK%R͞D}? И 4TUb[UjTME+1Jt[oԨT$jTSZhM֛vҤjaX:,0YՖpť\J"U,d)ͷ2}kAOKNԊ+k+[. UXVܬ-P%qK[T.v}_*UZun ̪D/r)\^~ֲu,i6{m^F7/wV,Q^>V+m.m{~oX 0N4rZbֶe.|kazf0WKacxq?9TFǢUG0!/*mGGRضI/`W*[e!m. !,u H*\ȰÇ#JHŋ3jȱǏ 3@0_(S\ɲ˗0cʜIsf(OVd͟@ JѣH3nXgҧPJJUM}LQ@@`ÊKٔR۷pʝ3Ń!-ݿ  خ?w*6Lǐ# }pGJ̹ 6^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐FZbzQj饘f馜v駠*ꨤjꩨꪗV꫰)*+찿J챫,.kkF+V,fbm&+kR:Z׷:4A~nӏ$,Nkox@Ŏ{aUe pȜ 1I* aN237w:x26LcjЬItK_e$gu?om;3I7}kA_cc6m5wћnԚ6]UWOC8X{ν8U aO3D<4ΜO|9ߜ :=53=5z^)# =,9Z (?U;2Mwu><HK\¼/j'gjglC f6co6Q CD U> Jh*Ps a tܯ g- a G3mwxUB0a$Ę-B˜F ː$$.D&p|BIQ򏟌V(5RNL*WV򕰌,gIZ̥.w^D%0IbRL,fڒΌ4IjZԄ&6 Lmrsf3)rR D9vg0KxS1yJr ?eM-\ |(-*N.?Iщ)πvԠMJӹR`B/BLc ˓b4}MU & ON5%gRk*LGe*R Rd&UNmV׹ӭr 3JӜ,FT%jSjRrgVTƕJEWKLzU0-%beQ.֬4l;Vε@3PVV]͒4ymkh%K֞ӵiOa Y:6gh,l3MNMW.u(=jQ XWNurwK]V7DkYzR<\Ϟt \h7ҵlgK߁g~ITrU+-F z;Z =+V ޯaXVl'6j`jXj'T'81;\Vd(L,by=2{ Pn珣=I$F&-,˗'7Œr͛6 !ʞ@v)УHi 3ѤPu:5Ud }z+NY"KanjmIDzuKcZE[QoN|3 !J, c ##p`A"$ߚ (a†!3,fɐ9sF`@!,f!,c ;C_AgpaC"bA2! ,#c93ПA8L@!,*` ɐY㯠?Tx`Äq̙!,2c9CƟA$5  !,;c诠@ $cp!,Cc诠@ $cp!t,e H*\ȰÇ#JHŋ3jȱ H1$5@@*, x@I"gr\ٲ`ȑ: JѣH*]1e)!xR.JWc 6a SP۷pʝK )GR]3@|7>HfJv -Hjǐ#KL2BSMaSȔiװc6; LoD-v$C PnȼV9;У+MY*c -ɹ.o+ヮ.Z~ɓ_1Cyrɧ 68uDl6JQUa7wvFr:h()T*LNUA amPHjhH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+֛SXAX`QQ\о LS@_\bO "SL, //9 s$ 13;Lr&wt#X۳J9cm<ەS ?|לS MFom1 ^1B w˲` ~틜ǿи6j.'HAF.p `B4XAy"`"V~S>Ną&VV>:jz B:Pp>`H˗ /0rˠ~)oá)N{©ap_0@.2Ia^=ŏ XϞXžUwǚ-MX3r\7A)4䜢H b]]{%gkΖ5 jNRdϩrE;X|Hޗflb~DKg"Kr(̦6nz 8IrL:p~<)zz̧;~ @M|4(BשЅֳ='" ӢͨF эzt_ehHёn:UMvӥ&FK*sAq>k:a) i Djmn.a5ϖӷ2~d /br/H|rkq9 M-/IYbI^nڿq+Rl t Drowty/ܒb7V">[M]H#=9؃NIkh+V_XNKw}355\n7իμ;"Nq5O뚷7t9^l6_xqh* k{ƏO Pŗb5r˻[oM}- kX S;uc6&uHo?=SrMr7?wKrU3agypEo&}Gp!ǀ3|rGv z&DswwwVKy<`sXC>'H{fvFtЅw9O7HQWs8Uj7y&V'FrzyKY-x~=?D|vfKQ'swuMhwwy}m*׃禅c~`xwD,xQH80"'u\q}熧yGA{`HdbXztz QDxq(t{E{tpvpgD&|i}8Xh}xr7MG(nFX4z",kׄ5HDowHXIWILC9~Xmg|HnD&vd4Dh-t A8y9sC>m;Md+(8Y^(,a4gM:89RN6tYSD{wL SyԆ(pfm@_@/BAL vy6֛ {))uxqhiY$穎D,hon؉&Ii{KAdmvL:u-9GhqxT[Rɐ@GI1II)> Z&K75if)|ιn1GQ.ddXlp(8h{mvYI:/zisڡOZw>0I}鏵uSHrdFE4>?X&Ds#Li/ڨ"FM Dz*(@BӠXye QK7~{*siQt6g`kJgꦙ9zZw3k;;I֩[D|[atL׸%9RBXF٪&{}*$nYM뺥I-~7zw5~H7nUD 1Awxmz:8IG1W9JVL=hؿ*. wKۤ2\tEM1V _#,G\5we*;SCak4[ѤsdPh|gFlh 9gO5wR ÎfrqꇍwAK_g?\sG*vktU s˼˵|@LqFA̾|Ȝ̻|皭Aʬ[ ';ќzdƽ}"DV۫KLA+ǖs?doV,뻞` ,( }9Œq*W=(I7i%3x;͂=؄ ̿46]،؎s ٰAn`<.v^"Jyͱqٶ}iخ뜳NB=N+a+|M玪j(|YL2Rܞ$6ܽ-{YKt~FI8МL+(tכp{r:ߓ|?mlIipS Tal)^֏ΟͮZN. ,0ָ~gԟu|&A6.>^@~zB+KԊye 办;sgƾ\dw?lwh`mŏ'{k-ߞG0ƗD)ƔnzN0Jp-sAZ u[8"A[I2C./*Cj6"وqCsp 8c}Ĺ#uTrI&tI(rJ*J,rKKLi>.4L4TsM6tM8sN:$s!=O@!´&"*DQH JI# t8زo8DMtEt?BRKUըXL3Fa|1Lu4:͟JyVoēک><6SaeWFLZ9=$nQlUӱ'21s3F+Su՗ޮ}^%@R3P2Xk8~WrWQbCUJy0]XO?ѓk01g{gzhˊ4zivizj2etMJnNamą>EU`k>J^ b$˦nnP:7 knLMWp0do UQlp"KtY°1B -|L]걜R?fJDժ 93iX64Meh@D:.xiؿURUQ?g ![YP60D n끙cȝnQA7SF Gk1yΫ7d]4޷!boOUT 5YMfLxA H_Sz?(G91YN,)nv6"Tr݃$k ]iOyon[ȰaFSӤf5y6 i M݀$g9yNtSNäQ9@󐸉%Du,'E#5Y ')!@T(6 +aG)e8|Qr$DҹdJ[OLXp))Y46 /% 9_ʤAIN,iᣫndGR,z̔ Ӫ2=*k>Κ# mIqZ`V'fb!TU,EV3/z  ֚jmY!)MȪSfl^7ѕ~H.kxX>&֐SaR_t)d2%MqlZ4X<>2؞kaRgcc4j[j5Eép@@ŦęM˟-am#W>7:\sɏV&vٓy2cj qY\u%,k9!1bpfLп#&qM|bMH6W]ň3k`Jqm|cX;ZCdo Kx-ms ]4T+s)sF脛&V]k\曮p~$u̚?K sT)FKG ]$r>jLJ'۴mLjV2\AZ(ժ.l9k%^*vXqQQDJXegzrp:NͶ5gWθFR\4]KVV~K$~R!ZT2 VB<$fjG3pg\Vn~#'yM~r|W5b9o~pĹz.NAcFIm|frsMÜAK_4Ꮷ8۠}6:e#jKLFk4dĉfG!ǀ4FC e$H#CTHo܉oƈ Gs:GTAuLEKLtnjTAGb|ƀlhlH|edm|F4ňI*džʝȒ,eʓ,y-l}VxESLCc  Io%VPTF!M0&5U{V# LsWuRWUiٛٞ[ER1MSWȣUP|A'UT?XwYzeA{]TtZStSD[ҢűZ"t¶͹úmμ۽!,*NV H*\ȰÇ#JHŋ3jȱǏIUR#p˗0cʜIMR4?:wNB*]ʴӧ ZQT>Hq4ׯ`ÊP*왂ځp}Kݻx-L@^*:6EP+^8k rUn̹ oHwf)FͺUp\N  ȹxܺ+#μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)RX`P YSi})(DzThB ħ-:%B:hb()@vꏦn:ZkY竍z +*@z+PKiKаJб{vʫF;ER)a; zֆK&Vy+&{ɬ )**Ngw7$l( .0h5>Kn0\qɼ-4xF^F>o, q>ݴ;Lu -S+ךvg~*c)rۦ0\'. m6d-;4Y 3=قX9vU۽.}7бO8ܙ;zN9剋OsC};׆s^ŕ󫻶ߞ. }=;[(6z_~7ij5] qI1:*b<1qXU4A +gZֺDAu"gVWP[&uke{]FݙNZ.>j#dY.2$߹f R_֛VY6 謇ń 2+TƋ)jƪU1{:WGml1pݒR2bU;]jweZOtBjg"-sOhT\A:lyC4^̏bh,*aDT #ZT *HA0rl6MʝW4AB-l%={%?B/}꘢*0QU#̬Vծee4U9.fOha"Ӭ:\Fn;]zi,~ϜT*nO!65(u:0TZEn mbADK_0xNMjЕGҝ|cHi{i͇ڢvO>X-D&ѭUk6g om:}$Q Y<:vέ16njAʏ#3ym/R]MV[iIo&}6RkM}FX(p vS PՖ%O(NYFnrW<di, g0+R¡b/Uݱ=ʑ4"? D6^c\eA^ kMJ:|66͵ZBG")cզ πҳI#zlrw 5)({FGRZ<%=.s!<ݢsZ6ۆKImQZG5rMP56hcv6|FU솸,;&`id ئ6A@t{;:dm_!ЛJKpXւ:/j\Or8BoG6야u9UT+f_U86p| d1^m..TS޾GKv&1s;~B+.9Vair9FӺ,;wRs=F9Kڝ}t17fBeRf>Ck86ebǃu#%udXf*}637["9G$KX+3_X_[%]E3(v6uWRxJ5`\`-8 H[``&"x-ytv{Bg(ؔM3 X r5H9UDÌ-و9oXjN_Z与ȎtR.XIs4X~SuwLpFMA/vs!t1~ 9^MJc&wkiIhGFpvBO--JIId8Fs/G>* hKbqewR<7",h;gBL CHX3:5Jf~x5>tǓsJujTYWC~e@?Q·oJfOoxlz/aV2wΖ3\ؘǘGc3͸LH(#Xve16O )OSdx#Z̵qZh9] iHD:+լJsJ<#R)ib s+ԮD)MY>W:9 'k.w3U'oʱy[2%Ei0NjgJgw DzFJ1˛KkVc*l"ˍg{5Qʠ{|-uekkWiZQQt[}W~X%F%LŀxNjW2IlY9X5~'B|G]̙|Cg' R \=|چ9UVգC1; )]GIwך^Y;*3̭&]!Ex Jڲ h,>0-)ss9ʻ}u5jȺ8[X銱 ~zϚL~."ˬ|.j3f4u:31zeM4&ԎGzt8vڐ +&VW]bDJmKh/*` L\ND y۸YJaZPΑ/9C Yn~:9Oo딧h_ c/` i.!N,8#2<%MhT`$-eO9ȁ'i_oq?3Lˈl3RS7ĩ`\=XdS~ {䱸v_z"(cbV[3ZʠBp6;Z}ʨOauRr&j+kX(qBφ3n7ݳzzgo2P` .šC 24(bÉ1nhcƉE$YI)UdK1eΤYM9uԸOA%ZQISQNZժɄYȴpeӮM%[Y0!,*V H*\ȰÇ#JHŋ3jq 'V@@*!S\ɲ˗0c Y6G9y JѣH J RK1իXjݪ2EPtkkJ5˶۷p02EqBg޿ ,JI8 ~ KL)l:` `Ө)*ghw!۸Oo(0qa%),9ȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`z7aИf>fIr&T'CuY &pZH'yl*?c>gwN @|I6:PT霧j (թ~楘 )ҚevJjz,+9)Эn,ԭ:괓Bmy*dk. J:ʾzY-Xkp[+ٰ.2 , 2n@hFB*2zL,l kЧ+80^flDab-twXvmK79nfQG{[ hA/_f&ŵfDgrVl9}ktkmG:ڬj{[]˼J>=G~*zj+#4ZCi}G}|GϽ+=S<:ojYlO4)oUZ6ݕb+k:)a.͖绻 ]`W–eP; P yF@@ sZi DDq!/5(#VƥD}=*"#ڇUOqZOp51ic0¥e1g8KY+}z iQU̜(E1-z.ldxHQeaCNu+H/K}Jn|eIDa#'ɥ|%}(L >:Fx8Kd:ЌfFGY*"D4,-&#on*&9򡍋cqT*Ԓa`B:スS Wt+]t $FA*(9#jʁ8CWVfHGK:=t`|׷.D7}ҭt(H`jRDRγݩMËte8`O')b4 qb(t^:}^ KꚖ|,ovҷp Q 4A֭b8J%|$[fzVL$=&ee`KiK|K%\{04LI.cU4αw`ly#rAِ2cǮX]t=g 泠BYXI$Dd~a]苔ij?y#IᄈS|}Pwv>%wg>kŀ7}<ӲVY${fPѣ^evS5 c'T_G.Wh3;b2S}WY(tsedorჩ/tG@:tIKHNP84pf^ !7QhSh%bCq[xem0e'ucOk3QT-x? w\v\lr'gJ$igU*bֈsgq>^@ w5ja G~mX󂉋P*C]B=mVN_s~~m _e4Řg%t&Wz{*T58s4ptjDoȌG|7_5/tYMpLC wgj8XqwYr/L؏H-0G?Wt!uJZPIV>?Hxs94].QQ`8HF}DVqu+lԐ0t%|N@hWłvmT:T?GxnVjSQu,Hy5YT89(C5W=Qsft.~w{bJL&=S\V@HSX\,QiIa`c}yWpVSPuR1=^`);h)w7z'{681G]3TR&dӅ\9\Y}03<3OR4a"H5If/8v3$؀z9ŏkƉs&lC9 Fՙti؝I2!y虞깞L5Y08yz<1d.C9 smAWgBAi]YrUD=Y񝕔AIvH琒#voWJ{XgBQ)sK98jNVx/9FCT;i@J Dâ|d{3ݔ?8>R+|d؎yب^XUmkPue(Dx9>ClhĦ'jX^3&xlƑeGToGCS(q:HR> Mwy~/*)lZd,=avb}z3Y`VoCJJ28W`V?~KX*HxpX9$MXpYC:C'gaz Wؚze*U:)8W3%g vVF{E՗CAJJsʋ`*kgx浨6S6`H_tz{U:``VȨٱLHfvJJH,;uƷ)j*%KW);JC}PsC17jBQ1ʠWC:Vl[1-yIXC[o+Ѵu[ΪYr2A|( &I)ld/$/,C sX+5Lh)_Jt]D|&ԢE&N6S~2?܆~kRLB`DШإŭ:=SńxÓ@*.hܙonŤfbR$^aGWJh LfldȒ<_EÔɚ\D-f!!֔xt3F7w|좤d:싃WLEF3̺f֕JµOhpX7gmh?Cfhrp /YP+lGbֈhZ䋬El%JcʹEp ftHt U ~?b%)ۋ"YC(=j˼D+m L 8#ѬG#B,RhdT,Z|D٬On| GG {0wSA ͊vxZDf="yx fLp-c VO&ʷ:za.a|]؆ bc }^mLNݏ5 M˄%2xgԾڬ\i[{{ۉ۝2mbJvDw:+jK{xwK,Kiu9TJRzYݵÝL%zF2kCy0.> -JucQiKC]޵j<* f=rY,fZ Y.mE͑g-yʷG+qY|LmL~ݯnN{k^Qˊ̈́y1h=u/ 7T?5_v+aU+c޵K]z+*?ՃGmuyMm#ҕ(y3x5مXnZś͞b?X5"[umfܡl_{p@f1xw!]jޡoo/o_.h#luY0{D _oۆ)?)_&fYޔ}li__lPnK3z&o&X3woO_$޼AЄm6h //8J X#XA .dC%NXE5nX^jNMiҢeϦ: !,*NV H*\ȰÇ#JHŋ3jQa 4б! z 0ɱMlIϟ@ Jх)R\G!&]*C UN"HfԇY!z׳hӪ]˶mI H՟U% XeLÈE&WË"@?046_+'M4#'fu NlQ N8j ܠju@ᙽBOܸE~`Gj@oɓ}t/yaY6c aQ7ЁE(@_zdd $LmV~ r,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+mX`aP^mAStKQQa{ UK.A.CNKg+{Mq[B [0ʉ lEO? C/gTq[f oA`VBD4 + .$d OX;ݽ05!j@:w䐨MmB('NEotE_X-GHre<nбBo`ūU$Gfxx\_%A0f.3^#2]OqJ]ymi3j>oLhz/D.<(=†X4ڜH ; 8 8q0DY0w>ufE˵X5r+GU:N jN{Uw8M};֌Jgv}yϷj-ꑇ-F;IͨU;L2uuMӕnۥ3{NnB\L+էNb[zurSeĹ9ӦaKJαm:ο)3Ɯ8 7$#e˦`? [~~qrcdw6g6q&Ɵ zoYq%ٞ6iHc* #vC1;ky^+p8M}7r>elʃW1;4FگFVM:}`\dim3 pc;LbklC;ak<:cgug}Gh*H{(Fx-xYdjXX)RH)c׋/d6d@sC'r2Sq>d@0uet3{HHֈp^>Q8!28Ǩ1ba`(Qkp~(#ӏ&6r2xay$%Wq %A9 )#FW.eH89Qs(H#7RK)-sT* S.2֓IH(FoMR9TeHP`MHswO {WkqquSG[)1Tl9ys@9rY$ig  #dW'zLpym42 Q4y#w>5,7BROK)hWNm4fx.Vh =f,3{+mdoEWu8yreI6h5d~((o@m֛fҚ{IkhTȒ.c ťʞhʭsYIz:j}Zgz(5 ڭ R1MO9qZЊMhJyVW4mgH?jwlI xtYJÓ )\V3ȉ^`[+]rt:X5UuIwq .J-ڀ:Eank+3+{K7Έ*FbIYzy?do*cKF륣+*Qcr*:Z3h? Kq7ֵel&iۜ+/Bܩ#Em*.H KJo{g9sY) 5kVeGW˒kk:Q٥$Y+ھ9, [7O{goӿi:cv 4 Sӎyո!KP- +˭5{1*f;{E@ͳp(mg6Uڼ1\P/WU6k,Ugo.a\n_-pzH*LNa|L)x5?!FA}|ȈB2gT졘٨;mȆ0v dD5B;biUʭܰ/Jv.KߗUcf/6JL@Z A2xs{y|ft_ ,. m {M̮l*zpQSK0fQ]\W-j\;+l/8nk lrLZ ]RͭS:!4=#h;qQܳ9BIS,SWL&-@JIEګKi,IDG;9+Rt ʈ,(kaѷ/ؘٚ#^FFΔ,=}GOugʟ>(tڷl \Ҕ"ѴC:T-M| tZ-* [98¦{CkܤumܵCSRDl_yo|>Z/CjOl̛llo?iϝ=+[ G] kݱZ'XFBb {"a2U^mMmFݺMMQ\T;{X)Z[sq[b>`;fN˿,N?,DŽ }ڦM$nd:.%-}"0?7bsI9yc啎p n/M]ެA|+8Ju}O{S-wċNĝ߯bSj<3cGW2 +Myӷ{iJ+=P][ZcUjr^} S8.N z>F:rO/Eϑȫ<\b/90Ut㺒e+Ӟ8  T+s+)Re$%έ㌺o S_?BsxQ])zC] Ա.·d4jS ') b!菡@, L80E V^Vn%Evɑ]/sj+#FN6W|q-q#|rŻc r,M8sC}tK7tSW}9Wmsuk'y5t=( I sۃ0ĠC3 OR1q?yy7DNj-e˫V¢(LU:W.$5%8C澈M~ 42K :^V穦.*BJ~>!` d` U~(`{b0GQv4,`ɆRݴC9(滄xMAG Lf7xq Ti=f]JV|0UvҋKzHs$A0{: 4m{ߞn|td$ GnFkd%-yILfR]wcENR$e)MyJTR[URc⼁MOcJ,gga[\-_cLݲ)%[CM3e$XR_ƨMuB [ 2Wt{ 95;1+_l8H 0J7XC^@+z&lZNٱRb13JqAщҒ"BP*4XB1pDU,|N Wltc oU싵Rx'>D0!1 5FȣY\B$ZAaG )u#! dd^\SC5.iR!-xgV3LEwS*5iDQ Cމ%۩kCV 4]zd.bMhNg1uZi{[:3m,?vz{\&WensW!c2t{i.i]24kL+zs+ Zu ]0~m)𵲍kBZ%'+W_MA'}9[F }s;KY0`Tu`!3I2hJC[ Tp 9{c8c#H=M]LR۵I,=ILF/OzKC=ɘ4_^ɗAf[ ~wZ XӉ jY{s:%&t }hD'НBG+^| bIs(-:{d &ux8}D-yg&qS۴K3&flx㜉%6bX˼be(Vg%ִnqgӦd|YGe͵~g3Ѹ]kg{ݾ*T!(q{q>$ ;f'%omnx#~8?@^7 <4#x R >n$_ħ壂h@jWy=!} ;/|oF~g~_oI D|u;'/s?{??;~H>H@<k> l[=@ >$At?4@?$?thՑT? SA$= ,@ LBAܼfAX@A##=<6D@/>R,D *D]d7E(|a9 ;pspg-5.8.1/screenshots/theme3.gif000066400000000000000000014737061452457446400167530ustar00rootroot00000000000000GIF89ar !&"("(#(#) """### $%$$$&&&'''&))(((****..+//,,,---,//...,00,13-2400022233344477739;888:::;;;<<<===>>>???UUIhUUUUU@@@AAABBBCCCDDDEEEGGGDHJHHHJJJKKKMMMPPPQQQRRRSSSTTTVVVWWWTY[XXXYYYZZZY]_\\\]]]^^^```aaabbbcccdddfffiiilllmmmnnnooopppqqqrrrsssuuuxxxzzz|||~~~U/Y1W2Z1Z3\2]4[4]2^4^4^4_4_5^5_5_4_6^4`4`4a5`5`5a6`6`7b6a8b6cUUUUUUU*******9! NETSCAPE2.0!K,rmH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳ@ JѣH*]ʴӧPJJիXjʵׯ`JGٳhӪ]˶۷pʝKݻx˷߿ L#6̸ǐ#KL˘-+VϠCMiƛuB *pO"P@wmNe-faɀ,2VzɌ)^C ͽf Yg}X 紕uKwfܰ]Mqh46'+䣏 %(b`Y3|C YC+' #geJ?9HCH -J]ly$IN0PCɦp50Hc7dQg? FǴҍ|vEY{'I*Jך:-AW>+bJ PMŢ+뮇%Y3@?TAV,C %B,dYYʬc։ k;l0kl?<|a3,(YH^@i? K/;PБ1`0<<(rud}Qpd!C4Ep?~ M?߁c8pa?ShY8%L8ጇ4䒓U9]7ޖ<tCeN@A__0,x0#z  0d0 $6xA)jBS=˃K!J? 8OHD(4b9ITP̥.E#ťaxЏu HW`(p~xejQ7#4y~~:MFi0+i^3L0IL{S00ƒ0.+! spzH{HThAyЀ@ u(Dt-6a.a"EXˢ1|0XdI 20Y `c ~\@9Hz<~58 4*H0蕯~] S ռbJC% Z(.RA4BЕ%1@dJY"6me1Yka"P sQLI.8  Sh)Z ~#@ÙAv"^xAe {` o.7;97-獮~_/-m/ 8/Zq~pp PpIpY` U{kx%..P; K[#w->Ld^HNl 3Ps)[X&.{[LfU,5L6pL:xγ>πMBЈNt1bq4%"Jѐp,dNӹ´G]PAuDMVF7ujW3qkL?@^ereK؄sP Xq>?(XkN<Wy?>S@fto??GNx<#=GCBI0ga(mfrapΐ04Aɳ d `xfЊBH$ eNp?aGgF2C%>ZEc5O}lFetFi$|՘E[E(WzGh!JdEXtH9jA n;3Hz+C:hPR:TZVzXZ\:ƆIMjce Oڥjlڦnpr:2ZgEƤEG5ʧAwa{{FjkZjc`: ڨ%ʁZizɩ=KCZ*8uK:zJjbhZɚj : Ep`֊Z:j:jʢ $zYgp p\A" <ڪ ur(\@vfGxbt9uw(WwwWGv`sV4'Zұw*x='&kR+rB'g%OG3k+!si"&+xA;bLVsa{Y,dA|̽d,ժU}+c1_a}rlj,2-'~pkzk3>g;lQ[tY| Y-'߇{~Víb}]Ʊ[ص@O9KT[D̒[5W5i8de:Z6˫;5:(ۨk=d-q;^HԪk1fq L<ɕ,ɜɚK|ʀ[I<[ܚdA;%U[U KWYͿc>EY ~N 뇰#)[_1. "T!D.u6|`,fȝX½Z@O#G:wy2ʖfǏRa䉓0tcǏ=V y_ \úHU 0bȀ`J+~Gܹʗ3{QtiKBs6.: O o~(@4tEgË!xså9O b5A "& `3 +0/.tP )kP@ qŰF,I;ʹh3l +9tBry!Uc )`"ȧiDp@Xȥx0.i@%tJrh' : 0` z Q,:̳$3Tw~윳2DRM{&ETS+CU[C`]U@#3i~pqjk8% * 7x#L"N (4pL0%6j7mtz e8EPB m[pk *\X7(&~ NYcYX/7^!hS YdH6 5Vi yg2! |1Y)|ֹكsk]af@bsf0mQWkj`g'ŷP:vl&gyN,~Q:ܹfeX27q{p{]ts<3V0^uuZ=vgva+!#A1$(tx`4쑓m1`2HkN и2S 8v%/TL("2{߻g>opԾ jh'E _?# L`!>hv) =p/^lCX[ ,9P"kfE,XW]kPؙ&QSF,qZ$b^ 8@8GT/$d 5DH@ A )HH.+yF:rqd'WwIOFK3 RRd [T0O<`^y)mSf;`vy[( 0X~S_J噾0WL,X HM<0:9r"֬P4#NvzrST,PM\N g8@v{ P qFu d3nj5P6,@k(]ڀ X2@< Ig0 @30; ut%ISR$U$5Q" @^hQJ X*W 2Ӛ޴0~Sb>% jH+!~UaTҕ `  M lғP"q TVQ Kx ʪ,UKjd!E-leٮ-O ARu>2 +Hikb3~f/r|#A IrQ:.vt.i}7<ʋw[  m›*A赏 c ׌t]\D( % 6⣎xOHFrSGIJV’DŨ e:SNۦ7 #qO_t*ĸDܦ܏ XQ"H`+2F. y\rʣQ ,.za_ &[V?"&qe`7Fsx%i;>;bߒ,(C;kNdbN1BkǜgY!MiL,5Y kN7li3RXqs\Wlg,q#H&].~{xѕک3g?]Fzva10x5ғt$g.Ti]:'[}kga>ɷo(R;)BWw붳h ᅠ_w_3e1~Ӹ2 IM~ۅ ߗfeN\}7OAmr EtͻFt E1n-8<@Um`|S5X @b%iPzVyIY{#ӯR? ZpP.@Z+k Rj+xr8<]Y4j4G I<8, N[ܢ- x-s  șx00 AŠxЋlA:=H4 P "&ĬH B- T3Զz.,SC碌2Q9êd.ʋ XB3]X~hw#C~A/xF4DhRKCj2  @0 sEH!AA:$=?DF?3$g1aPY5 _l gDIdB@CAF,kT#SIEU4CHK.ʸр5ڲѣ2d 3fɨ@;xDD pBd~XȂԉ9{3Șz,2HɗH@:>vUtVՙ4HH|44^{ l 2Jn#yʤW~06 $DJ쇥lJwKFԛU;0 KyI6yIiЉ nY|[qs ) K~ȟH 1LiH6*p δ~7*+̶ͲLsM }s~s  K#88OIϻ L529HY:p9NV8꺴C#1*#\OcG"}l:=⣫âLdOzOKWN,PkP(BP%}PSPRV"vH=q'k_PYzI - C=f PݘmǰPP+LA M!8س'cR;ý(I>(2j[?>곾/? ?0%?*z@*>*RS +*#@d+$5:w MbT+M&T,8BATAT% BӲ"l-Z5M-Lq-"¸-1,TCU2%bzIH.(QDD@DD$BDDTD3Y˯GøEXF!\%]u# <#ZV_ sF>9Fb oLƗbF~Fd1IAGr #1o<9id~p2tMWZW-%.SSr,> f>+rS!>@{*$^(^?')jL@9~" $eXM!Ha,jcJKeA.tA*B<ʉV;/ 9F>hD2Vd@d/B[ .EcPcE]"auc+dCd.e#)!F,WGܯTN/CW~X0TW[Q^eS<^WP"gZ\!W^TX&~e Xkf0foG& grfs[#k${]d[PY_Z1H,cAZ?c-ڛAهv] yfY5|VfK~)ZܴNʽ[f[[ۺi.Miߴhf8jUd[˩aA\"ĥa܋׽Mzӊ\%7]V]k ͹^뺖!e_}> ]}f ެu^EZȶal*Prl@OC#Ԝɦ`zЗ^u::El(_qTm6<$ދmކ6Mm~=_-Y; f0p':RƘNmV %`(`W ^l``V ЅU $M￀~p.p%R(a.E$a"nbSꩵb"ΩopD( S/6?ApT@!8^8dK]`dZ%GU?Uܢ 0F&or,-)般|1Z*wB1[ n"_C8.M!GC-fley cp+f_.EETerCeHe0IbF/SLڍsn;?hFr;f]qzVgFAygvu_gCrm1_ ]Ou[OX(eo2|F^R3lNUUv hW?نNԋh&r` 3z_wnfw'BsIj7i4`!J[uri&֜JOJiVӊ7Ꞟxx ra[kUsj YH>j7jeqܒRTw|\.yk2k% hzViz\8 k88tv(!yHjl/A.M"{"l{7PWZ6톏mP-ֶ6|:|_TS|o>n/Ǽ7}|]z}0D}Hf`'fN!5گTI}pg{(K'Rg.>p+qsSz -p= ?1Sq*~\52諆 4P!Ł@,C0G$ ^ c>xVzcȒi&ڧ遮a_XZynTط_V`J+ųH7Е=MYOpMjRz\r%b9}h%C33 tƀYϞI$ ` ph?Iqm (@uhT`7@k4;**;IӪ \g9h?zh3Vf{}*+P4@)Tc-m& qtK@T9(;S8&"Ќ 9!;n2A#hc:ޚpFTô~pO64*-E[2{>؂%jT/3YmZte>œ#,Y19x3Y?hÏ:&is e@ -6kigT§۶L|SݾUS-PK7-QO\24K.Pc.سP?g9<̕5z1V#8F$c4 K#")  H0@2 A3^!q=SaO~Dg跓}/a܀'< xS^?#`2(iP)0I =p( AR>< `/!9!(D Qr/,H,v=!Cq~p-v0\dF%2"Atq`Nsx# l=q)r7!{cF/rDa!щ|$$#EJ2)%ȁd$(PdF$&bJ0#9+p"%&q JRuG/ʂ'IbL .3(_M5ID  nБ\JLh>4&! T\S 63x@O}59q p,R P 80IL%0E1ѵq " s#! Їj@ 6v" HDҝ#r7@BJЂMh #\9Dln#$w-&@:v,I5Vf 8DS-"XMu'3'MIOO(GAꀹՅE(C!JQnԣ*}8[X*nTB%Ved@ t@W#%W)ܭ 5-S\Mr ]POu/Jce/|!K~ `ߍ~?LQc!h(/e6[ hq*[ІVfjXV89 jR5:moy#m,u@7-#n1C5bS3qK4:is]U:Zܶȉ?q|zǓ=/zN`W%oy`7ס]/l^">ڝ|S̽{ 7`@y7 -Ah,$C(FL,#]NCq7gbFxx:(v(n&++O@HE+>IG9r5T{$ yAe#ءDKPr;u#^%߽~ǎx J|e-)WvÎܤl&y?W4j/V}r!O&ZɌ'=Orj}%GPve'WoiԡwUȪKu?pAO9D$ [|z-yWi2'lJeŕE?! 'f64x]t^l5V~@.T=ăNkuq^r$>GtL I^! ]]P~xsHEv}@?kx4ĝ}Yא|}]dבP9V V4q؝ dX@E_ 8CF) aX"KG rѕ ʼnuYTT4"Aa?@3a*0ȈL!!:E`L /̚M-a?p|b(a)L`g *Za#Z2B<".]!\aN"[)#$[NN8Pa?C 4¡4Pk\@lY`8=򀜒\9ɩ\ʕ;J̡^!< ZhAFdБ9vEL^f]C(]]K$/dORMƉ֩mIERd-Τ$(%SNe9%Y%Q^9#Uv% %^@;D PZ*\zeyV"E^NTj:!eOC\D[aO&Tv6US.77$!0_v(^b[hnG9 DkAfXCcDMT-L4RaN_]NO9D8 7xn GtFYiV 8U ,`pvD UVTXY&<X"YV,~rg]U.pV&6>h(`Dfa* 39mԀăA2b-͇6悲V–.֖}Z&~"begoo9 WgN"NrYseFWa?2+@@,nIDz<@7킃<~ ęG2 (wf& rea!Eb)#F(NeK@48CXI]@v1 `03=@jbWJW~j 2nQ$&*YQ%YFdd'bEA")D1AgT"O\=,LH()"E+ (.e#n/ #^12R 23^A12D@$La?p#OBA@6,k?tC<b=@rmҐZ7*ՀS@-m<&--#R?B2@(NNONA0CDD*@DAl xVAT D۾-D2RdYdMPF֫B&vUG*$"JKf 1n刮>)Cn)eT%SpQ%EP&RBI;A' (>e$)P8/^oPo2'Y;%&:S]ƮBc*{QO/d*d e.pfng/ ɯW/Q,/j2oRf?Hp+-f7ߦUu&f|gRa_F('P UsCtNgN1zf'O\TFm@hLM0sAU1TpNVL)z^gU {~_|U+E~[e/XPZ-+rige`* : ^V@\h]qlkeD_9@H eXfhL"g#[֌&"W#3hk2blm'E +$) l`?4)EiW`QRni~g6aRtuedCeN4 2WR3)"!6C2Rgb !*2Yrf)Aȃr>nX!e_t *8ir.ߑP -vtlIn9UݣHmy!dJg+OߌmVBFdCm᛻-\B6_ShkKPUd?uO±!bfni$)w$HBnr3P.sN6d@lt.NQ7b6t$.N뺮vooi帱~z"6 ov}kBowVW]S$7.%wwox"0OTbZ*Ȳ+1;o1msuŜ/81P8P/ffsw8Ʉg8 C4oPI0O&dk+N ]MMygH 1hyg /Xy}.9#)ߏgP ynu 2r|lÍ >z'G%72rs g:^:kY2Ӗ/+B[9]2fc5i6OFi.ߩfO5:8y:7#{V8:|R8ɤ33ؗ$X"e4*<_x+D*EbG9CCzu&S{ֵW;pkG{%~㻹+"+`C@ @k]*?I||N2gFw/8 P7w{w['G>싱E{>Wa>$>쁸+ycb\L8߻ɳվQ>v8O7wxO?ETgW yRy{̩[GSSF :TGOĎYYt- : $ z+@X%^?y&X,ӄć)>qcǏ!G Vkٶun\s{o^׮^o1xeP 7\p_T\"3VGA_13`um9b#a!+P1t1XZعUmf׾m0޿/nЉdoQB<mjdlO]8qO/ \l@Vtq|0~.,3fX 9m b='Q ~) (zh jFbfZc~lGG tȉ/jrǓJ1.WseQs2 )|Ntζ-m5j)@B>PA pCbF~ӼT1h)MH A1Ȟ SPE%~PUUWa"'>yhU[}t~65~BR=5Uc}'Y ܵ <1W\rݲ  Uw0vqF;lk8 % *8}Oqkj (T8V 6ia"!'Dyc`e *Vnyc!bxusܝ4ݺ| 2𖭞v~ek yg2D gNdȊ)Z wY`-XԱl^㞻nF~o6jQ v |I<~EP\PWwG?csy 2=MvqG=dcx A1`6#h@≊IF j(< RV z驷^ޠVp|E Doz%~[X?08u/%PK =p.AXBoCS ,9AuHDuPH4br(<|"θF?e,YԢEtq`bԤDA!D 9s@9z"u|я$ D21T"SHF&!HK^I$"iIJ:DpY Q RC9x-gI@4.ݒ %̋/! IY!\e4"/&6!>@_b ]g1JhRl / Y"'>3@p@4t8P%2/ KB\Fx%',z Q%%ARbQh@pvD r,) ;#R'lyiLgj xBd@'`Y @5n-& NԬgJZò-n6Ɑ:g8Ј4q%@Xr3h;ީz8Pj|>MOV|!׬g%;%u ql\<꼜ū!s Xְ43+].ڕz(!,X*LDVcmN@-0)g"'ˬ2EЄFA1Cց ; p&f3_o]Ӟ-ZQn5\^5Ks3Xl6=ؘ[gOpBjZM %m?-A mgjujcjvMAk"w#,yC~<M&~A)> !5nS _:IG04C2=|\gmЄ$,uVY^!3T'Zv,p܇'DTv#}fhmB=ʑϋ>NǤyxG>z^]/Y֣󖞔5Cϻ }}_~'̵hY/Ǎ9(߶m9|ә?>?}_A*p?xPѲʧ+c: ,)DJT\ d*٢]JF 0n'pZ- * ̂%Т(֯* "h". "3>#4p-&xJ,KaO$kЮ0!,; K&gu/tLքjIl<ֲfk L$-ł#ؒۜ 6'f !D#7!MsB%牚mRGl\w~22x$ :n!],h ( @N N.6/.L r0"00Ce0Hiv. ϒ.QgnMR(-gHI w‡i5[O5O. 7n)9s3ύ$,:N:;H:<<:Ǔ=)==pֳ=ӏs37aBO O044@-O?I8SO-/BBAOI&}HD ` og&t 4CAT!h6J.(G2` t X:70Z0Y$%UH(HBW ^e0-D-|`J!LʪJ-\Ia0,vLP%jpn0FuqebAeq2@H1 K#(Sc5^k-J P pEV *G ^-bk:"n!AشT U3 JJ>pOCcsxUQ>qOY;ƪq3>;HRb1G0uʏY َ K&]$)}p Z$W[Bm SAW5ˀbbh` ʦVu}LFVTG4c= TSY9R!]E֑[Y[S\aMvAx`XLLyy^5x=[B5p@ ;':Cb)6\z+A LޯOɆbٹe0>e`Q,z!bBA$`f)e_% h :!H R>f1Ch-higi>" R!W8~ӷaļl*-Sn6+Mخ!@Mk (F2[+)u)m5?mͱQcÁa__U~W2%_7vq,y u.n3f1]7K19i[CW٪L6e_,Hy ϽZ!x| ؿ!^ <0… :|1ĉ+Z$"#%W,Q8E|jʈ!,Z?n1DJ!;W 4СD=4ҌL4jЗ u#{*5رd˚=lӦiۺ ܹoڽ7޽fC >x faȋ!g0|1aʐ9l1cɍ)75 3L1կ |{uݼw <ċ?<̛;Dԫ[=ܻ{>Yw%I%5jǏ> $>}!LJ! ҟ R} "|| " `RH}$Zh"b** <&+wJأ(T!05FXDX$WB"ORy&@LgrIgvމgzg~ 蟲tChh.h> iNJ)\7߀8cz{G# ‡2j2b$+ !2Ȯ22,$R쪌: "k Z< ȷ"H>[- ɺBoZkȷo[-H[m[, ,#""bǃHBk tBMtF= 8J/tN? uROMuV_uZ[NS9#zwH#(m+¶"!#b^ I#ӭHuN{'?"x Gn7$k;v7ܧw!"(k׾x{}=)M>ݻG]C! ,go`z*\XoA0bBn vˢriNJw ޾%Biڼ9΁8 'Ѣ9}*7~L]jUR&t5ъP> [Pc`*pՎ)?y;],SPjer}իGKaLt|?|\bOjuά9ی 5 !, {go`z-xq`[ʽWΪn}ԥҟ?Y|%͘6aR'ϛ;s֜f 询 1aĉYXSLzC!, go`z[ L~%6@k{"U-xϢ.|*W2&K0̚:y̹P=\T ,`…v (~.fWSL o=zѳ_@!, go`z[ L~%6@k{"U-xDgQ>V|_L\”M:kޜ $Q{fAX Qb?]د,SPj=zѳ_@!,] H*\ȰÇ#J,دŋ3jȱǏ CIɓ(S\ɒd?0cײ͛8sɳϟ@mfУH*]ʴӧP % hԫXjʵ׏SZJٳhӪVصpʝK.϶E˷߿LÈ ǐ#O\V˘3塞ϠrM8G^ͺk_˞M{uڸs|{^^9+7dXμУKN}׫kνwËaӫ_Ͼ˟OCϿ ` F!qGfv ($h ^H(f.0(4h8<@XJ/DiH&L6PF)T˕X^/s 2(ӌ3`>(^&Yl&wfz g,:'~H衈&袌6*(>"餔Vj饘f馜v駠*jliꩨꪬ꫰s*무*0z (̘Lgށj:6>+ƮlF{>d+k覫fyʮ+k&#p3HC5!7,k]H*\ȰÇ#JHŋ3jȱǏ CI1ɓ(S\ɲ˗0cʜI͛8sɳϟ@ Jѣ8K(]ʴӧPJJիXjʵׯ`ÊKٳhӪ]۷pʝKݻx˷߿ LÈ+^̸ǀIL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n'7G.Wngw砇.褗n騧ꬷ.n/o'7G/Wogw/o觯/o HL:'HAaHC ʢ)(ND! EBЃ- ;CЄT ]CІ?aCuCчGbA"шODb8E&>ЉMbE*vъ8F.ы 5: DC@! ,^ H*\ȰÇ!,:'`,P B:40"C^Ԙ?{8T r'/LȲJ)a!,^H*\ȰÇ!2,^ (П*\ȰÇ#Jŋ ȱǏ 9bĨq`ȓ(SLFKDHfʛx(? $3@4-_ Br᜺v}2>LLleG, Aqٺk78݈Zo)S1uV/.6=Ѽ+r #)[Z4iy =,$ AG,zDR ɐUDZ1)b FBzE' =hde)rk@$;*k<{Qb q-C/ D}Awd,kϽnSoBZMb*0^ "Ā1OvФXpMJHdUZaCU'*b $1R?NdLE+bZxKavg!$ !Ә"cCNG b-?m!`}EcDq1=ش &heK[)jKATʅȁ!T3$A@,.eEA0Dв"ĥ(JD'bb-T\xAxi)4`-Yf"iG0,`q ĩjBh'"4@pV$T,ňjN UUAw*51">QJf=QH;X洛 +,/qk6س$ Cz'H8hғ @ o@78NP%* \ji0)td-\Zw 8U 7~z@10$ @B[ d9 s' @ 7) R_藿%+.BX$6_++ث,Lǿ ,W$;H,x?>Jd%^|"#5ro)!O2`sHP̉d6+o< 7LxγcnπMBЈNF;ѐ'MJ[Ҙδ7N{Ӡ>CMRԨNWVհ^cMZָεw^{z־MbȮ5f;Ў_i[ζ}jsMG;'NvMzη~N[Gf+~%~sC53?rw񒛜'︵Am05cNi"NiO<zrz̕^l#HW]WozΟ{Y/y5Nˢ_O;ǞqMݏ=ptz(4m~fGI= /~t<-h~AZ.Q f ݏaӢ7}k? }c7M#G}=>={_/?џ~t#t?1 ~>!y/{zG|zwy7~Ih7'W|`} xhg}X{gz{.zz7}3X,rVw7|B8 4hVxz=?hyK؄z|:HׁS YH}.2Ȅ5z} `bxmo6(hQ}6Vvyh{aC +Xwygz0hghܷN}(hx>wh(8hȉ89؇؋h{9wW (؊y~WxwhHhxzzhwx8xu'7 x`ؘ'؍wyQ()jXXzxyG)iGuh-ْ8x֏Xhד IV7`N W ;wf hhو`_ HfhY*X*hG̗Nzh|L鐇Cɋ|Yh^g9 <)w"7Ni}ӈNi 8}gI{~w6)٘7`H|N:9 'y`9 |`לkxƜΙ}'ׇډ睝H|ɞy`IߙziImɌ⹈yy}É) ymjjh֢tzi(Mj2h?kAڣx?JiIjB{ ֤&(ïKڥouV*kegg^zDrcehFfƥrljsm8ʧz`f槀7Zzک*ʨq:-'ڪ::pJi mi{zڨ J#gúCupʬjn:qѪsZFZ鬨rfWK:Zzگ+:{ˮ Z P jK۱ $#[&+fq*Я38:<= Bۯ,[D˱q_PK۴7+O5;EZ\@h`agc[^e g k{ he&h6G iUK˷뮃۸hm+kKf[ gekh۳u  1P4 0  2OPhp @Ȱ+e {7˻8u_0 kP eql[me!Pgt븛eK g  n  @b@@MP c P\ 2k|µ \. 6k\ P [F{캾Kܶ-u+hv[x @0@ рp [@ qP[Rks\w [Wk-PY쮗ĚśTLNL+ŠKe[kkƁfd{ e pXP`{0 Ȃl1\Pfȃ,=\*KeaΝ-Jʟ ő\ŸOl_b<` j\ pL ff ; l]%M 5e1 6Λ,JϣLR\"K`a|l s2e̠ lp ,T m]OX!]e}im_fadr tmxQ:GEvn+h+ٛ@ٚ} hvf0hQҐ e " 9`  o-+&cۿ  dP n]ݿuKӰ =E KYl }A ηku p : )2>CKE[ZtjsD>R㡗\ENHnlONu:FupKa\ҦQ<^V~X@u`k tng&zw|6nـg8m.v u+j=ulй_zxJhg (nroڳ]&ɫ~ԁni.;(8{v뒞hX^# Α FNk@0q T~yw9gF[iN̾pNkѶ~Ɖ~ΚXwIrNj _k@p鹞7Fh繠! Y_(>\͹VdžFZjh4SVw:OvL=:hðqZSU5:Ё wbȏSJuj)j _*BNaojyn**!Q_Lh9~Yй~ ٮ#id>K^Sj.If@qЃw&7ng Pտ ׯ+hw>,O^.h\wɁ|hW^6 $~n7B%NXE5nG$Y$@4 D9PH8sa mqdL! &Ibtϊ zϢCi;pX~gvaYw_=SGp&A&\aP/ز)!_Ts˛20h3M=Sf\iQ @ U)3+W瑩ކ'wa?uQ7a侣uٵ6;Vo?Px FX3!3_V,v֊-@t%GQK6Q_{Y.XYnSfs6e9؟[Џ {-uAzg*h?:խ5{l7U>[Um&{m#[ͻll,6oµ.|gvs^Ld-Q|H|HCzWT>}UUUt[縿F v)ZZ8Qکl]tWbuSbw羚~HdWkCAjnaٝx'99ݦͨC62:S^u-с撿 {rK6Q M*3‰q^p|Xβ %Im[l.MX<4̋"`3|h&ѩ}) N% N&[HR#$ b̋Y.(SR? d83 !*:өF<4ckl7)Y1nDC烫D~0 ?^%dʁt#D gBE.!pȇAT.ǽ @H^ Ghc$b"4Q$'_k۔RQj{@E7d %icn΅=DH!4hie dAh)mI宄/TMVFjRhT"EtNSG5R#.95}QϹU􆵉1^@htQYϊִ.b-i[0H q sIMWe-E顚KsGU- abi_\Ɏ(Odo%laj3,+& {4있, ĉͯ좔ƴMqQKa'Vk{56mmg[YBMm},-:&dUlfwQ}*srkn!kHbGPXJ:^@i N#sG~a)m $xHj^qr= _>x*|Rߕy1}xc ],$,/IlGqvȄV( ąpRdLfK]Y"WchQ2=6o,_e.b@ܪ1 )GJu9'C~7G'Eq.Б3o w>;M;@P:lD(>9 ?[PQq+!e echG2#NυW (vYjF7/,#!gF̹t~i aBʘ=*&?1jCwSfB; >P<2}aXaX_JFLr+PKMXvg2UfMJW镓͛t{{P?쭣K5KS*.rm e񺴛Ul]8b3`E61Iaӓ;f5g]xNѯV\Byh4Nߚgh^o+ﴠ4 iKv˽em- لOxQs|qB^{#եD,]kqu cΪyݤWiv~E0l,Þm&J|KDΩOF} wQUĿq7b8@/gW+H#xVi1 G[  k69}>Zۍ%C!'[5-[)2z.!0 Z2"BB"%&z"+It@"L3\#[&lj @#B#S):FCGAhV(|04 K$xJ\5$5KT+Q /WS5![C\˶0Í@|QA*t'`BAS&a#6|-iA+ ('7zz6rڒsS07/A7C?DBʧ-{Dݒ)PsRY@NC2a(lP,è\$@x*B PQ)}`P"]88a0LTxʓ > Snp*Ǫ9 O:E1) +ZhtI2&wĘݫ; HD<ǻ3jI1ϣ;O:;j: ʝ!-ɗ| ;ʾcJJ@̙J=JJ#.=.Qu0i K68;{//h@KP>IC IC/࣊ې |(+˦[ K 0a#K>hD1>+#YK 1Y#ȫL0JF^t@8Mh2Q@&32s]C#5ǘǏ3!ChM4O"5:O%#G4ƅpA*B=*u5}AK͌;C3AMGG]ݍ{lcڌ֛۬M\rQL J\bȚ?$BYV-,E`|V9ӞdjSDj2 ,k;E $0$8܋kDaX"D"Z,134$4?=l8}T?*=⑊Ž ~BJXþ۱)CG:`7dNդM\;&-%WKQ Y̒\F,y &ZD=̋=] 6gfĘUl2k(fTMt7E^EȀ55LګDIFڅ<*FTj[Q2== )xR^$݄zt_@u\Qq`4\ԕe,Td*L5 RO:x| UhX ~+L SH2ߍT-Ut0ۛ/\a^]I+~{A1?H~I{?GvL.MFNOI>ecWx~P һ.vA)UX!)z7 c$`5)IMu[^cmO^f V̈́>/2P \ԄdܘYYRMف@?P?K`]fE1SpgKZΣ%[<2ETۣja }|ioVhdh P3p M@hR<x`A=UL4Ytшˬ\9x0$nipf> =Y`]s($I K0S[hХ>5U=WCZfQܰYI}0ckd ^kS̨7aȀsa1^'-Eu Ɉ\?|UpFUUUDjpը+U:^ofRV2F WJ,89H#nsc?Ij%k;le~|hqs7ve H!_L}4y$%ٳY~]RX+XrifCs_{p,fk^l^nf 2q3'q.x]sBY{lgV眥M RM6hFڇTڅ8 U ? pUwp}NW`XD @$i*;[,KdhCsi!ƈ]#Eu^%XVu|1QR4= )j)E^x-[u IwՕPjrwkZQC.sRS]>%7>)E$E=cyQN7t^WChNvP)9ބo.l}ȇww%*}.k/!nM^Se<b`pQPn;n vn|FǍpr4CjyDxF={K{Zo|ᘣmTTKIO7db'.+(YR,⏿6lcZ#/0rWOq70vm"y,@qA)d$/̗*W+}}C}};Q}?q#.H6~Ćw)Nd_M!qy)ԨRRj*֬r@ (Q@\K0CDlt׼T A"ŋwnL< canjXraAN_KF)_zFݯزgӮm`ۺ}@7Zn A L wݵ5D2ײ͐ taliҁ &-? U|GA\\ )\^ŅŜ]f Y6ɃH&TGv B}@9V}H֒=4;)GSCP?Gͨ_nx*$dmp $%Vzȕ"DueBys(A% O<eOi{Dޜg*(O٨p'BVե]_RJSe_k#JIPXasYQzMuB~(#=@eϯ,ZU@ִfv}a U%_^PD^fB3>>m20$jG=MK<ҳI㏻ҭ2Ԕ;<=;1ź=[S@00amܱY`V&gڕv}-#$%Dvjs\><4Ewѳ!=;X) ,fI[}5X5V[75;j? LnOq ܶ>u7 x\8qxA/*9 y^pB={>嘇蓋 VBԃi-?{Ni(R*4 ,yu:gsvvq gԙԓG Uᅨ|.pm3C7Dnl^nG: ItK(3$'>qvIYD]p#bqD2űYu 3."_ZAYbK2l3!R5#5dRvVPwsǯaP#$\ uB1du84rKwdt'l)F1zDE ~$X|!;i.iHzPmC\PBD+tZFDñ!lR@:HF5r t9Hѣ"M i#G'J`@d&PIKϔl,j:Z74=TĪz`R"}Q%#3s2!Iz c)MpRl _TT*{ V)6sh'}J"A|}aQ?P@č"řd~i.KZ^0oV*t]"!6R/K?FK0|`q?gmHuLt (#(=@ӺQ SByaj $h{},d!YRUSNⳬ@$>~02̃]PunkW֖z5n m-Fr=.o5JO'r YZk:˲bGU=C~)]#HʥB~[R  3Xe͋w5e&>S`o' x*ԇbQ=aq}v,$Gy (0Jfq8<’6@B緭~45( g=CNТaB4+VHiKmԲ+V4gIlcGUH>5A'gaS  epmztõM`3SduSYN=H}P9Y0n@B !q`* ,?WhJ+ZlL(h,r81Aa4klS| XV-sg'uѐbv0ƧZ ڪ|\{C:Ƈc}li}c.vfJ,f`RJVJlꎮعx=& Yk< /v3u_[Տ yΓ^kmh%_'mCTGnd?\FڲS{^vw =@ҫ'={%ը$ٍwSV/ Dͩ^|Q:.{@o&Z%`%HKVXXJcE $ DCkeP\Y[s ͆YX41JPp|YQG YY?CYBTh0pf;~HF Qu V}S Qڻm T4Ԩ:?Zs؇)1 ?HRzTU,R)]u ۻRِ$.UTDAAC/M#Ss( 0Ue0 Yi]IN]5E:`} LK‡kp2@U]m^C 䐝V1J}ѝQ^UxcheTp%UL%L a%YI-j ͆li^YY^Wݥ_N^VWZ_&D"^GacN_3T<?mccRcjy5eЗ}f~~W`&j#%zmD?hOHh&qTzXYY`Jqʏqm`%_H"+zYKVʱx`0= qeم N1\s*Ĕyl`CM"v#Ԡ=h9zƵ'5N/.νr'AQZzdRiLp4"/X9ۄD!6"r"š8FņTBp#XVfa-q"GmI[eA%ȓhMI&.&g[]~)م01~:%# <4SkGVB'5\Xf( gҪd\;#<< =~gH=VHdXP$}FVF*BEZHҍK⋾œũX-L.M.~MRYX2̠ڭL`I ۩L.Jm!M]&kFbk1(%bbu%Gje\Rg&^^kfeMf6lbd>"\U,!*fj&Cgg._TߘlSV͜+n:n^D9V̚^@-\uNmPUmrċm'z'& PmŽHE fnPl&P?g.ߌ檁cV9kYje(*h+VbYf1Nmb̅t.ĖbΩuǓ጖'"hna(ZbbfE!nV".6$6/#f+]bjbR^:E/-Q*Bї:*VDibF2/ͷ}2/zEiΊnh)4 n$12mf#*jNj8RnL AJ<ܧ.c*IKKh˱+ATMGZ%%/ɮ_md2,G?k$U++W *[*LK6LEOdzmPPFQR^+S"tFem-າ],1fI. ־JNATڰe]:u,*b2&2R.6''({rrrc2`r rWdiUx0-P˺2^iq[&Yf3lrJU  "I0'+WorT0gX s֪Y44C Os*. 㶭Y>@FPDcAb1U qt2!n'!?K4AtU)[@̭\mS޲+47mn^cR9EH u q=XoBRo#IKаHD-RH>a( !9Kc1F9;iO&_buQuK:#S7{),SC\juno%uoEm(*Z x2$Gzsb &{[{^?;5O?S|vA(v!CpC6~3#\1l9g8>;cgpǹ\X = icjʣv $[Y$3B{D1s<6DUIJ"w- sSZ=t/{q2 D^_u31ЇKmzO8b}*XKl}#͖\,\߳cxK,s^gE/^;kw濫&nT2fUk0>3xk1223;OLۣm>ffLXNжP7x8GmC9G'DTC'<3/ <׳xmO\{cGPi& 4xp? 6tbDh8Q`Ň #B"G0$iCI;t@:$wM,7l?xƮ_~lg)Mäc'>R~weMtn\sun^7ypߕyE,,0' 6P7굌P!͓sva7M WHv};S'ym:L^É7~.r)t0ySs7izƌgi;*젙:/8v@6^Z*ӭn>ht2+ 0NEry>Hd٧v(f栅ka*z\=|~yUjDj5^[e2{^ll۟ q-gy'ȅvZ1 l- r|7khS{z` Z@r/v{qeIZO7Xܸ{g:< {[?? Zj$/RU/{@]vZ5u}ѝ28 e ԠWB<+y%-GCܯ_})Bp ̑*5_fDw5˂Bz .d^ygEi\ R~b^GfXݏsZB~BF?@í@5.:-C@2fQRMvrФ@?p1fT*YFxa?TPGݑ^ Ϋt3֪X"HQN#!yKS'$˜MK<+ ¾h/QAWDԘ? 8 "rt'YEh`} 91:q,nPHI 8rP84 JP&55CŢXF?7/ i?#sg&  TbTUR?B"tZIU"E=I^3B(sxOT| iD-j[;yN@Tv`!4dS>'+4S/Hf9ۻ~ӞTUBZjj*be[[:턘!, KmGA\IB:d(q b(p#E7J )ƒ&;dIFb,ʉ6v,#ǐ!,W H*\ȰÇ#JHŋ3jȱǏ'ȁO$K$MI͛8sɳOЈ))dO(sbС6JիXj4(aׯQ˪]˶۷p;;cM߿ W*ZHN#KLmaO@Ċ{ϠCdfX}K^ͺkѴd}شVƞ8'e ".qȅKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix瑛 ~*蠄j衈&袌6裐F*餔Vj~馜v((ꪬꫬ 묘J릶Zj2ʎ?klVl>k*R+Z(vJ .t`{.2.~(*EG ܫhn"  @oT|q'jN>ؓsg<)=ʁ}4I9@<-1=(Ȃojv( Dkv} ?Y?:uS 0*?n.?PިNi٪놲~o 40,rީ/1zfI?>64?&GoHo솖On  @|P…o25ƒ3!Ur0=AWtY`7*uB %>Mnޖ' ~ⰥK x [wc>֧ #0 jg(A#X#HiJȽRi ?ղh W*RkU8n)UN)n]kZ@T'+YJ=FZv49},XBXۄ?p3bPHc8<4Dj&x%-*P uCPpK\^5$+r\"8$PעvV p>c`5J.\hk0<7>>| NY{]ϭj1 Pxdݍz~?>j7*X}-h) dT@T\W%rM`$kTU cmqZʹr`%p*kZYf8!*7cdQT7 9ע8[Dp@GM꧖zu[UtIFpv7!t06C^#8z7 O0N)†xV׼./6Q 4ζM:æ k5p4θbX#8F=+Tc5܁tă؅- CEs[ȂG,MW/>UZVsu'{g%q(||d.r uSCm,^?@sP:V ܬ?wzDP| ^A1nM:׎q4Wj@!,f H*\ȰÇ#JHŋ3jȱǏH A ȁJ `ɗ0cʜI͛8si3ɧVp y)R\ʴӧPJJcZ1|Iկ`ÊKٙd5KHKݻx󂬅,TyKÈ+^ 1F9¸˘3kv KZS@hMNxhe+-F x۸s;`b( Ikȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6*n"&Lj饘f馜v駠*ꨤjꩨꪬNZi*j+ު먹+kȶzl.ˬ>+Vk-^۪m~۪?k򚮬t`n f .ֻ*&0DJLJPo>)v<㎥3=@LO: +s0"m})K_iC@!+ D4?HZ?ðO͜LI>nó0죎| .|3mo5Zp? ;6k޹ߠ,V.霒kOo[OMngX)ʓέǹ\'o >ivz㷫ٞoR3?9?+";tRк7֧o=?!){-g{t&xpgD~wj?h~+30z,PHLb|s" g- uR-Qe4>.8*+JLFTmZo4WЈMTG%1lX){32 ^j}>J.yN7N:Q DRL*WV򕰌,gIZR̥.wI\%0JaL2f:3ό&0)M]Rļ&6nz&8lj/qS<',Y8 t' |AEQɄ| H(Ԑn(@P1SSLBЩ Wvx8q9UHUm=-e?n|^'\S 8Fa~ 9@W5N1 C?a_ܫh5,LX.K: `^v鱦_ŕ&  yi)*N7Z |_2edC ;G%4_FeNk8r?ۣ?.Ny"^.[yJ^ܳ9's>nnK*2v{„1{.`x79`N"T)~tKݓ+=\U^)lFpH&[x^ +_IJ#p@ w"8v1x`G9TB洞7NoVzv 9ƽw@юS^| KB'q-eVLe :뗲 u:osrG6CiWƇ/ olD(D 5WInP@GL1xfĂ!,u H*\ȰÇ#JHŋ3jȱǏ@ -kՒ5@-0cʜI͛8sSJE S%.{*]ʴӧPJ&1I}Hׯ`ÊK.  SPlKݻxvj͓X0 È+^x(GPr_Ƙ3k̹ZS@<iQS^ͺVZAgr]ͻb( ,۟/^μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰J&n@뮼+k&6l>+m {mm+kߞ+mr ok;oB/lSS> k<ԃ0p ,wL+# %k+? ,k]˵l! ;2& rl=S?lr Nћ#PXgR`? &`S8Ӫ631PoIr_,Q@PM?P3=ZҸƣ>N>@N6A5ȣ>밿 ێ;| wӊ7sl@@t 49<0ӸÌ^k;w0&ާM7<#O@=޿;w*4`x*^x_%oc{':|Da+l&ܑ]WȜF0O{úW nb(hFP @@(VWAW:6pq.9p|[\?F+c%>pSaԆ>Fv DV4M4R`kH"t%e~av-3[&}qHTPs.1K9x uHGZ҉"<cMoytJrWp%j%aH3{IO 2vB}.Yj6U A/ࠧC}.qø{E1xNrxZF74cUGCi0a1]ͳ8=a )P, < @ h̨AݘTgWX}T3` +v*V:Wֶ^d}k\5׎uWFqc]:X{;bXŪ౐UKZ4d/z hGKҚmRֺVmhW+ͭnC` pZ5.r\*e2ͮvr/j+Ӓq\V%㸇7@1Ө! {@y5\vu6p%LV,\زp:\&ħm/{kn?P7cs8J^8n0!v"Ngd&@(s͝!ٮdn5a Y1( 1Pc AQ b@JkԃXAiZp y#2B ?pQrl @qH0 ڡWv9ޱzTy6$W@,"?.X>vcq'epOOlVl%pVv@q@@3HY p%B gEin1ā(2!-p77G5q&/0s-GPmր iS䑏SL%@5 Pт?Nq| HnnH#er:Թ` Ē1Kcu`=̖3; |$8WVő-Js  ` FpAK2@B|t4.@r@j'U^s 2W8@dd?~K:Fo-8u: m V6e| X'JSU~ip`昽@hi&m뮴+/kޫo;p /p-? 3m<#0mW,@Krj`@Hk4m4Io;4>5\c3L;Z#лSN $&׽Z[+w@T }WwЁ5C;Ҿ0mA;; >]K>#m:#?Hks3$mX޶Cvs|x  =m@@t 5nl2:?oR?Dl9ðl;07#&ydwlv7?mK:|<}X F瑰z{ ǧz03,͙L~x%?x-"tG;kyYq?:.߶x,{,@|&?-jMeM &8g pq:\](?䭎3и6g} biЇb܄Z{?1;( \W6hBfX҅xJ2{(ki?7r[V>d76.yCAJM{Y39-ɱdc:EipyBma?ej}G1M~G%73, c>l_̘yDa|,S]JK @`4# oSPqVf8A6NΣ>&7-ZYJٌZ)e"*9;pnbƶ2zJ:2V  NWѧ@ZM(X`ڇ?R5:!6!f7{1rZeei ˚ARۮg9;[y,VhvކF D+npVesKZͮv궻 x׻M/w˫|K_粷}_w L8ZN0r`2}px/6Iqob,QC6A +`)@8g`wJp,/X(K[ia%D2_+aDbqn W ) a%n2p 3$30fv&ӹ  deB>Q $jG7\nK=o}tLzGݾk^c=,2n g Oq/.P'(4>H7:}+# 8c%Gn<??/zdiQGuShOf{R,zDu+,Wcui{͠vEpqpw\,,alv֐w Ry,!ipl, 0nl ;؃9xNmGtc7O+1W\QH^z%G.M,Dx h6psp g\]Opp'qv {Tfuxy[+ l! h rpOXަ;dh^@CpvH|VHgg`dW @8@ eQV zP ,AX\HPǰ   +qbbXhIgmTu{c_(-F-gbg҂8t,RWg Y&Icy'z)di,  *y8/9`-;y`=9c/[nP@0T0_9*)F!?, H*\ȰÇ#JHŋ3jȱǏi @H@ ɓO$͛8sɳϟ@AEQ^i% ЉI>SӫXjʵW4k(۷pʝ"lK<`E)+^̸17N)'Z2q-$'d9MpWF' bͻUUBcGZf=`УK;VTT=Y NtC+ӫ_k,PV,xW-'h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ț@(,0,4l8-'M14+PG-TW-Vg3ZuK dm]?n ]Գ<à>}߁ǭ⌷8'G>yAӁ9'g@џwJ`x̑#@9s|г\O;޻?ô;ᆵnVǎ<Pw7󵳬|#g}@ DOπ/2@sN>ؓO?0u,ȇG x#2:0ejX<Np5j ,Na+[ 3s P`v%nG:BPY㨫t͕}\U)ZM[x߆]nWe"ͨwc|V^xd˯~;:*L;'L [/7WqA,C&N`0ga1sc@2ANa&;?~,e Sq:-=D 9Z̃0HЬf/xEf>~N& d60ӑɹHG$2\n?07cs8F^8n(SYҸun:cǢ,y i*$T>?! w<##4scO(H4F2Zc8Hpz+I !yDC7A_`$7.FRm (=1 c78 XE=aP p\X +S?[b q3F zA u/ Q tc;w|#{׀ 2IS䑏SLH&@5 P#)A9P\dCŐHz߷f5?M`M5a>^ |A ̄@  E ȟg G0v   o |8c{sW^lց1V{'cD{&H2(mjpX0@}~U`# p0 p~9  ئ~f`Np s0 0x#qxPWY&#q mkЀa`J05D)xb$z=6}R{ 7`{d4t|l0}w`@}` n ; ЂїGh`Q0bp Xp_fh h >Hp D0D`ӰIXbxsL#C|@72XKVt/Og7 `u ` SnXp( q@Fv}я8`+ l0!  0d!__ `_ `ky@d P h@ 0ceЍHcI9`\M{~lF'tҐ pm#P` op P}`   eoq # 0i@p rfp1iH @n qKƎ396>Phfiy/$o׈y!&NƜt9 oؙRɝJ|% Q 2vbyc dd!:,A@V@*b0` BdM0Pŋ<pE++ c˞MoF3@SLp*HjX3cZDe-S"zA2`L9o߾rğ,Lb#\&rFA17Bj%vXV,eLbRʅ6"xT+ZL^ѢB)/.Eb<CR<${4b$8#B4Bdihlp)tix|矀*蠄j衈&袌6&: &qZ*ix.bޅب&ڦaꚱ:۬fjij+c+Y9쯩Vz"+2묫Ђ*-#`4A:k3#.KNy+?bľɻ2 /F讴/B;Sʮd1\01KN .L{03C3L>,),C>XN>(r t@[?@0јn0|rţ>꼴2u;/ 53nr$tM=7yvKT8ߌ;.}-z7Kf;8#?ü Nw<RZqg ;#d>;ǝ7ܰR{t?Oz˻QRREdaHMlNʿ}y [ˇc'AƂ] 1E, ԰6{D3#f %Y c47\ kbYxVKBesЖL@wU-+Z&\(ȇ)(+ŋ$ ;Z5=:-T&,iZJ",Z3)C+ZOrLp)QS?J]TSҩJUJr+OuITeVdYaRS+REWbauתkXںPzu]) ℯjXtmN{n1zզW҃ϓ'h '\RPUeBor&,lj5+Klk%zmi[֋ʜ{"͟h-.im&ݯJWAgUWw٪[j1qj$̂/5ڨb]WM.?fs=pICM *ddYVM +օZW1N+fM_SobX+qKnu}twb-Er|M6Wυ|SMp9 (.Vda-;9VԼd]>l?{m3 ZXf/mw5{y«jL%l-K:Δ.*/eĤ43:ɤvꦏ`,2o [QYiH?^~~G;}~lvv}V{'nTqj'9 mN{wzvytj3gs 8&g+$gΥzyp A2xSX2,+)38_6؁8XGEa=|RA/EhQq/J'B(Gx3ǒRX(x98\(VVfxF]Hl)LX2eVx.1t!GPUtXnz j&L[EThvxy,(f80''*Hułr+y舰ȊsD7{اv؄vfVU^z3I6x X4ut'owG|eQw}+Ԁ6v}׊7~ee~Yu'w}hR>vE,9[|h Hvhֶ[6} Zc8sHzssz#W'j'iy%z+a)i/Ib!Ygcy9'ƘX=9qc8ވҷG{B9R}MY}rbWf]H*w3\JGy~/fDi{7k9Pxig;rW"h%8Yr1yi Vya-~W|'$VXv] kp|ٖhH^u鏶fiI[Zy?ַl P(hBh) I`G6TiGm?3p9}or 9ɗ阛v)iɘh2ǂ ʙ bJ5*H yٚ9I|\wse))҈X١Uw(4,*%:wȜ(7Viv:E]ŏ<*icP&nYTRڝUVjFz@tj*iʒjb*k9Im w?&řh[u7ЩU ?'^㧛&DxGb49x}D>Lg\*jIJhzG'کy^j YnSYQfJ)<ʓ-6!V*魓"iG2r(d z [zϘb0}&glڨcTaә6]jU*$FfyyL9)%:z iA^ʯڧzJ|&늮&q@b*L{dz"c9 D{ڳM m˲:_:_FbfkcJCOoְ v4cJ >5Ba˷~穰v:deӪ-z[tiMkßKV;$խQ[SkUWkDF aHg__Qb *;6}/ʸ kRjKKekQv˶5RKŚ|b ʞX*!e)[˵R>ۮkfZ\&"$ ,)!w+Hkɬii ȉk$܈,Is,H| }ǧ̜^\-҈c)nmӧK@y äa%|n,uZMmˬ(ň|ȅÐ=3 >=$lP:C+DL;30 ;C 7j|nH ޜ0rb ϰ1C33<\rG[0@̎Ac>Î>fAï 5`pc=r:mÐ2˃õm:O+x#&#yk\b:l?Cv@ m;5>;C8 ëPԷ23Ǎ[ ?;Y ;k}{rNZj&:4JgzyJ%)mp'U1)p"8KVb3oۜ9)d f@#/f3H< H1خ} vo(A|d |({Cj1ˇ.di&DgEs9̙Dqdfa &E7HVl8 hbd+ّk! G;c^yl )rGk0bE8g5둏&89[@,;د/BkZҰ ~2kcw|cP+!@#ޡQ2øDn<"MEtZ>&;e’lZk9?"9~L Ǫ$tքiWM& QA(Nw=ɟ49hIT& EA(At&@C:0ɨaRzkUL5 0McӘ@=ͩL~1P*kNՉi⪪VNW U+HVt֯Jժlm+ʗGre]#5ܣ XU]kkarؗuP5`5Vb!W tgAT6 9h%@!pD>*2IPm  6-i+ZĶ@(m3[f hnJ2K T@a.YJ+=w'\-mdn³ ?;ݮȗhrЀzĦ4|\_*=q@.:[$"]A` X2L$8}0Qr&>A퍽pI,\X9|kښ74F.]n9me˼2ow"\ؼ @9Hmv#{:U3Mrs6g=Dl#4 ɺ5hZLMgg,⫎=4$g+{7qE*m,Dn{d&.^ 65^ ;H-]Q%L-W wDE;l;l;0)jvm!kwbx䞶ߺ ZҔg ,K4sA*uzn>uڦwT! |wpx~qE d{okn̐ڦݴhe[yp σ񙼺/I֛s[y?rt|ö.RU?`ǩ=αljW>[G.d ~B !-7!]Ǻ> #d'{سryr<^p`į|LJhWǵ=@`Z_.3̦YͻU2柫H=/yJiW9SE&|? ?'߄ٷ}<[y5tBg[Dw}B6WiuRwVTvW6.6_tDzv8_j'gwy&x)lcw|w.'(ix #wodxy5nfՁ7~'؄Aց{+o({]}ehrO(F7iV"N'$Uu8wrhuW\0!jHZ5gV8_!h8cHVh^Gg^VVb0~!S@ulHz[uXw@kVUf7@Pv8w6X,h`JXU02*A{\U8C'y?h>Hy[hd=u"Ƅ8u옋?񥅹ƨnag!h*7|fHed|'}`GtppHux5ׇv}f5$S2 z$;i%35"o~+=3ju$L&gWV^Y=<3v,riQk-Q2dr9uyTR[◛)W)G菱g%&yNO ,!=er$3UFiYi(ᘱ|U$=IVɚPv(i$|I%d[yXTbb *Agɜ+9Q9)$j96yvם9.b ?'h&)Yyr st:'ffyHjwFGqwGo{!xZ'v<(bWJH"j&w%]vU-w0Hlv!UȠnx{m/X>yɨy`֗"EK긣K6):$[gx\mʥc|\W}pkI1:jIi,YGyA9 suJ/9=戩Hا#$U@) x]_%:¨ 0z_!'4(L&3V8" ʊAzGE3afZ5ZT4AZz'gtT!k lo:Ƿ3UBR[aypڒZgZz+JY{h UZF矒hacvs U^tt&`ډeZUjjܥ13{\j/z.{l*xQ˴FgzʞB:ZEyZY:< ,Rj>ˏLys+>WXq[ur@l$zVZJF+7}vZxf[ 穓j ˨Yyk H#{R z*x#:u4}X3ckz JQ([N9USK[^{mK'ዃzb;P5 <r +T t;\]?Rx9ke# UD+M<{آWzkK6jSV{xuB#zV雾_Jj=ee{\gy$O jyV{#K ;{u }{p7\r& (}¿+L"$ɫlq|XX*\q̩ U9F;t1L\Y[K+X̝)i;gŽhX_Kͬ狎pȦz՚Ŭ[\|sL}\UKn,; PkL{چ ɯ?2Lё%\lm* TḺ Z Z8lػ}w{%#-D̡tż-SQQj^HKvלd .ngXhaK,n| %WrשPM2KYhTB km̅bЕlL';!q'="$ʫ]q ˞ۭQҠRی#=%+ Lڸ$RӮ}GG=Vlĺ]KkՆ=֌w۝*_dݽ6(=rmsȾz-ߣǿ=j8]_Vlo*gL) Kʬ%!.'S}uu1Z' *EGnBc٘9_s =mpa6۞ni<ۡۄ~}̪"'.qOީ8͵C껫A 䏮<_LݳU~)U>J*U\濎oc][g|iN;Χ-+ᨾp]/o!|,Nl4(2!~)?)t ފ^IWuQ^ykHmj+U6ch~n mvwaU%+u_moNOW_~1e?a]G w< &/)Zˀ=$Xd@C%NXŠ5nGAj4RH)U ,K1)IeM4q4xOA s'Q5&e%RKkBuRjUY+Ry5&W%[˱/ϖ%֭K ;wڌ@:@P/_ F Dv@ Do!^|,ٲF s,p̗@;:pesP=01T clw poݡI/1 [:ΰ߻wiw48ΰlZ4w >}>u*;暓/:C "%n%o !k@@D2Lm>LMFȜOtn `OSk6|ژt2 ݬĒő ̡03rE  9ʦKsOӦA 5>W4!2, H*\ȰÇ#JHŋ3jȱǏki@@)PXʗ0cʜI͛8si 7DBIKQY"\ʴӧPJJբ33kW`ÊKٳ0[X(j=c+ڻx˷/SNzeG\ ̱뷱ǐ#K @ifɠCMz4-eLҰc˞Mi#&:a8k Nqb0@ܸ7?NسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,ln&,G,Wlgw ,$/p('2-,1l8<\s@s(MFt1?,-T\'uZoq%;S> p<0ࣶlmqOG| vk`@8,80.8_7 /88ף;&s0ty(C kxSP? -&c.AQ@1}<`8N>ؓ50hN>p:c=_ #أ?錄 LG§~v8<A !q@ *,KMԃh(V?Ե-MC{2F6vA<,gp@;7xc؇7t`TA>HV o "q.Oo;†EHCd'q+7 v%m;x@-+@9#G:=zrD|݂I1Loh ʂPsLg*y1]5ҁ&3x\!&ljaN|꡻bW|X>/"En2&@=LiJ>̥ 5hO2zp0E((L? HԹ;47Q^8J't)$[ IY҈ iDxCm(Ҷ` H5q|0ꕯ;;g D1>#tWG}@a5 TЅu>{>sb =6?Нs Cڶcp 0.l5/&95fЅ\n;r,"HN&+N0)8㸇7@1! G@yeAsBTγ+yp %&[X>; +i421+QgsyYVq 7@pX9 +?z  X:Ұ4`򥃽|iqgD/lё~h+  HOLlSa Y1X 1Pc~BAϬc8Jpz+XI !yDC7A``%7.VRm,)=1 cЁ?D4(OyB0ٚfKmD8'6p~mG9q얯xW"n F }D0Vp 3~ b%fdPAl_l 8v 30G> CTP'Oy =w;Z0LoskP ;q̿xZ@w? qb%p y4~%_0^ PC>H\? ejS^fɷto|stcyc`v 7 +‡`W' `0ޗ ݐnj p  `x+x8WZ8 @F8GyFvtL'_10zL'{ X{  Wf| w`w|` 'o ; n`Q+1p8 `W@ +1{-p8yRhtGSm>F_zJXy-tM kRg7 ǐu O Vg'oXP  q@vv+`+ lp!  wx p)׉-g?DF|HIOnH>x2ƅ6nҐ n+` _pp P|`  {H p q + i@p qF ؔ&*GMn8bSmWilgWP`Pd10t _g NpgaGsiM, 9tidw9dgy_nP@HpcQHIM!, H*\ȰÇ#JHŋ3jȱǏQ9HN0H0cʜI͛8s&-Y@er \axҳӧPJJUj+ELfP>iqٳhӪ]6f֬Grh=)+ c˷߿;U`\D!+ǐ#K- YOb$V:(Mo)t Rj MPk#-OdŢ1ȓ+XG0pسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw , &,0,4l8<& DF'=3J7m3NG-TWmTC@k^tbmh5j= rwðG>^Vl]}#eG> ؾPf+=䱲őCG*M~&T H. cf>հdk IGPe:˜ oGa|v4qD\? v〄{cp! ?Ҩ(p ߸’/#eXڑ}`@r2?ڑ ˇ"b̛F1O^<ָ we{>H -<C,gɲ9zq@#7K2C3ϐ('v |=<6JЈ*#h~d՟>>unŝ\h@gw C0QɖD acU Qxm5,ZW ` •g@H[]nIےiy2#6e(*kKǹҜu#?j x˶mu\wYf Լ|K_z֗g5[~ӖpT@@1N  'L [ΰ7ؿGa >/V8qs>r,"{xx #;P.qa"SV8 #2lZHlcV-S8P=! 0J0LBˆRg,d^0Y҉pMvLbq F,c0H^ g H:Бăδbb8v?rlU9ѥt6?-h/ >?! w<##4s#L!H4Fu Qz c#i11hȺ,Hʱ9 Lf(xy9ޱzT#y6`W@,"?oc\y]Mܴ V+Bp%tOg[ p>c`8L.h\h -`18#Y=ĠTe?{#[`:1f`|@?׀ H2IS䑏SLM&@5 P#т?Nq| rЃ:mNr'=Q 1ԉ#Vٱ_<@ $s+8-Fr  GpG~3x j4p ': @g7 '{pp `<|:wv||)cK:h2/i%iҹ II OI}9VSvu9 oІ"aYi"P HQ 7vjb  dYjd e!, H*\ȰÇ#JHŋ3jȱǏkja@X R!J)@ -8sɳϟ@  \ax%L-(CtSJE Sׯ`ÊKV,3EH _a`ݻx RVưu[֓|uI Đ#KL2HS"!)&L9@85OPZ^ͺwe1*V$QNQ0UX܅2p) kνpZ EcnS\)io+-X `꽾Ɏ:a)^Ġ߃F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-wԽ v|߀.n'7v Wg>8wn8瞇.褗n餃ꐫ䮿y8;=/|Ox+=L>To:={_+AI@ ~#P?&7@գz?ر hqq7XqPp?мnbY 4Z.؞;| [AvXay># "EAnW7[(qG -[!U< hn>fȺ!Ro7"?Ըzc hv\MCE'<#!jo= ʺQ`L-鱙i}EB3|y-V@NX;ѷvHFQnH?̿n QKavF? ͊΢ @FS7L^ ;Mx#-)$II{s8NuK?1S#y9kim$.5vt13HPѪ^Ԫ{i'5^ )N=},+ ɩɃsxԭ\ WLE\&7я/5p"S.Fu|<%dJYǝ[fͪFnb< ڻ]7Qap^INm׾񣘢(/Q{NL>O6c`NL.\h۝[C,~0PAs=7 Զ=`ҧ-ݷ?HO~m_r5/qDƼnk8_ 6;-߼G/7 K?7ⷝAy/@w7շ}= 0ԓ=sa(m4~o`@X_>Be!Eȶ d@ :(= T@ ap{G>a|ح @,>xC[:$vGx@vCn^ǘ9~4of[ 6ʐ,q3Cya0ψY<$H-Ѐl;͒z"Dz,\ WJqmd4ct4x^m$!tx7x&#Mb<6wc{0T :Uv enb1KYq@y>t`s{u!4&M*n d Ź#r;iE3чn4'MJ[Ҙ~[7eIs̞4C=8 u65lZʣl.4 G;p!Q. Mqv۠i:乶afl0+n^USgy8˘)@X$c.0aVCN9 S /ͶoS)BWPɕp3b@Hc8FHVP͠Ezeu@֐= REH^WeQ0pf t"@|،r7DXdT~V VZpSMFj. y`0 zY ` sX0PrҐ 0se хup PP @ p XXdHP@  FbH43p ,v7>FQ7~qs>rGQVsxz6醔OrsYg iٚN& rd ovwmFɒYf LQ v)٘թfĹi)j!, H*\ȰÇ#JHŋ3jȱǏ'ȁO$˗0cʜI͛8s &O& N2;*]ʴӧPJX0(2ׯ`ÊKeZWf`LٷpʝKndzi, LNX_>˰ǐ#KXŰ&k̹gd]J^ͺ IYͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmn&l`-dmhlp-toux筷w7}-ځn''^xxxON_w9.ݣzo^?{n030_dzO=^Ï[>.ē^^'0Odx6 0 p7mh=I@v nb  T?;w.ðG>Vjmp}kG>l@l=!aК>7*Zn"r5 h@k\܄E7 ~͌Z0lY$|MI?ࡵzc D㏅a1MC7Z"ƻd-zm#(0и5Vf P#vTMpG7t]7яAkÄ7~h2ɶZ08IPzaå' (9Ɉ7VvуJrfn:0A|0'D_"3xN=g $K>aL&waLpzd.$5*w ;GZRvzҍ/H .<֔ixqô A|Ĩ~W )(6-cXVUv'ŴsQ7a?C;9LP_RHŰ;z$Q,V';BZq @(YE hOTrהfmE \);#*|"Fn1c0o~B ޣ.,[E 0`mwڸa{"zhPwMz8i[Nܯc oѣ&/n\#Q>SQx`h.$;{NgEfZǶi`nqiH;: ) n2p 3&iyMc}v{~r:`bk2pα֐;@9q'$@-1T`6hF=职̦?P}\#>P PIX&@X-[b q3f zA "? p&j^وb 8;kn6)@X)>(ٴG N:?5@:f6 ンCӿP x7l50po@ 0fрp 7 cL}&  t@pj7 .#gGy > gv~=5T:h5w跅[Ӆxp 7  c!Xk8' `#% p l:p g t @706txpn!{P}QuP^&Wk@ ^h7Z7抆wËd(]  cas  Rbxipsь: 8pc "0|hq&gI@IPM eH~V>zgv5RYH~u qx`0 x9 `0аx&w ӅTm,0 c+ l0! 0p |pPAb_ `_`cM|^P|V@ q 0e gyc _6pw7vpҐ pc sp P0`   s/q jA0  c`ci. @gq w uyF֐AcȞ)hp5F0b4W v9Mnd @W:vf* bn KQ fv$Ze&z*+d j!,  H*\ȰÇ#JHŋ3jȱǏ@ -kՒ5ʗ*Y͛8sɳϟ@9T20kA!13DK:JիXjZ&5I}H#u+Bdi]˶۷pzR/eyŦ[|LÈmRIUnZk̹*Ai,.㖆5Yװc˞Q([\ݼwM[i!+U23سkg +BI=zַ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n'7G.Wngw褗n騧ꬷ.n O7GW;}o觿}?>>L=3 G=F~s>:|W NPFA ςDYWA .# ^h?8?ر p8`1~Pw3uؠ?p$nb,< Q4'X+~GA| H]AȈ@|ptЇ>1t#l|"A:080xy|N?, 2:4C<D6#z}[ |4&h$ZW~?"zcKcvd`?h vC{c@:y~f>~@>9?'B)S%>W)AT@@@,i>x\nT# (p>NEԭt_IHJ3u=6u|)CAÎ(tp/֚.=&m=?CӇ4G8Jn?6Ftv@P  .Es VaH>v"<!_cf$];FpwW9;b|麉yC!SM,K 0` ,V K )F>5JM1ke"\ps,С9k6Jߨǂr":ytsӷuѐ'MJ[Ҙδ7N{g ]pFMRGN D`VջQuY Zָεw^E-bإ&6}ke3ٺv6Mm\+n[-q> <ƺMz'u}vc௖8aX0`7q zCr ~?y70sSnnwcs<> k_, NT8H:Бa7n2p 3 ;أ=b'GĜiw{] 5dg`74<@qy9n&Pu Qz ci11h_-#C?ƨuQ@hnʱիUԣ&6P:d|p 9MmJ)apxg}R?ߍTa@ıT0㫭F\@M w  c Gb@ h ! q` 2TF0P V\  0I0 oP ȰZp u헅V~ZD:_a(w%K񅛐mׅl(wsP `x&tq@ q vu@ mрp sjO ׀V  Q>&  r> '0 @k`@om\؅Pwz6cnj:װqXPjX' `$9  k0j Pذn  F{wcna`J5P]׌0ImبP0ǐ6ivrh(k؍nؓs( zX jo`` v ;  QjrP0jPl &9m^ij  h `Ep DD`ӠQl3lx\q:yo&w~pXfH8 `0 I׎,O`4zq čTu j4 ` 6 ` x pp @f_fE^0V@p 0e0jnj4qouv@ :j( @~8@ f_W P Е@ p  *fV u ns Q   &1~ٞ `@C |VVRr=9?׆n'u)ؘ pz}rI;*v8  oکt: OQ vl ꌵ loo!, H*\ȰÇ#JHŋ3jȱǏkՒ5@-iX @ʗ0cʜI͛8siS$&_Ҡ"(ϣH*]ʴӧP1&(JVDʵׯ`ÊSPl2dʝKݻ v+7NÈ+^ӔXꯖ3k̹33,YU~=^ͺ띥%U,7ͻ c ( b+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.n'7G.Wngm&|.褗n騧ꬷ.nz.<o77|>}_o}:?|ow~?{S> y:ѿcX]W>9g(7 "?Ay] O7;n0Rvw:qu?`$nb+4 Q,!X+~0ѽ#ðG>PW2zn}Ct?FsHDn`":5C<76ԣ#z}[ x4e h!eZWG$7Q~ #|kDmvroa? }QtT"mL}ÆG0x$PuH=`|h <}s0L?dI$Y}X3%-U|~G08:B#&ܱet8jBC ЇF}Cu =:u3CGڏ(tDQ @Tv``*> Յ.;}b 5yՊpoGO9w䥢V#CM.S#<O>6 iPT®BHh.M%QSwO=%CӈNt+(D(\Jڴno(zmU+1?wF_,Pm9:R%dIMWWG AZ{(1ql r=}NdG K:u䔮!Nz.a运Ԯ pKρ|ȁ9@ \R!|«nqn0 hI4G ҁ}V؇qb6$ f!Q-iL:θk<7nr|AvA Ƴ:7|3K@J[ҡQ7`ӠJ8iOԖ&MVհgMZՔwPum_Nf;~{iSϮ6n{]-jm>7ӽ8 v7AmqKԐ |ce>Q@0(;ᓆx7 :⟳y`x%jOP/`p4˘)̰X$c_Iց4$ ,ԭ:?ujUw5?9S ­|*߸1}'V5dg`%4<@qy| J&PuX Qz c+i11h'1-Jʱ< 4/CP?1aMu?wpyKqu!M @ʏTa@ıT04pVp 3 b% c + Z DWwjonՀ0;q2TFw(kۗOA`|ηczD8xwv{iy atC&D{C}cnzf`C h@|9N|(7OS}\ϖ?!zc0ٗ?nm(1؏>n $hFƅ(_>SNT>|Vھx3rPG30e%>IwȀn?}3P|H?1UD#I u[)@2lNϮi N%R՘g|N&1яRRU l/T-qT=i/ok XTf௷=ٗZoub0PƊK*dU5ƣtn" fY>-J>δ-rkvfg_~ #݄=աSMTVƍuǏ7}CKOԗû $p8N $&.˙~R'>/PpYֲ>)wM_.b"1@q2HcIp zC5]l;86s /[ }|J5-^z88 XNa"HHt,i͛NN:i|'6J Edp3b0Hc8tBЁ?D4׫Uԣ&6̽P:d|p #:obE7(#x n  Wkg \ 00 c # Z DHlonՀ0;0Fǧr  @k5o$q`  p GՀ #p ǐ5@po#q[pEcxxx8O[6tgk <@ pFu0w@ nрp 8kLp D| 2'#q@ P{ p$ 0l0Do0nsHlcXx;fc78>(ux`vpX0@U@# p0 0D9  VkNp~0$Q$QZ8 xc0#Q U~X&qX$t#@xs~7c ( X$0`@` y ; GXkQ`0nfz "9$ih Kp DD`PU`mHIWyI#僈 `0 `IO0gQw CdTv%8 k+ l0}! | p စp  0Yk_ `_kWp[^W@ #q 0LQyfYzƠ|swAIzg ( @78@ fdW P P@ p g%GkHPǰv 0I"A &1Y{ݐo0w p P٧ll9^kєp/o_,P~<hX'HAUK  ~sDXacⱏz8 ֡{z |`=>T QE8D$1A^h0׫ !Cc7:!C|W$6jonpcAG1W?1|=A7s;>PtG67@drԙ|H)R(p$͏2O *e7|`RD? :+iF7}Hoҫh)׉€:o>J.F:.:洕F?Ҳϣ@ S-H:Rĕs9N*BIu?1#MyشzVU$ڎҫlVJZC"Ԯ\LwBsf:ӝ~s7@<2B/D{`hPk=֮|}p3bHc8<D#1Y8PqĠ2VC 0?n/?1F `V$߾|W1XE=aH E|扠0I Rxi`lZɕVYG Av)v#if'*qI@I0 E ;֓tHt}ƙbZ}׈hwlB `/ x}XC q@nЂIm4 ` Yi pf_fɅq P h@ ؐcPen [^@0yMy(Ym' @8@ fpaW P ހ@ p `l&f DjH 3p 0A&1 @Z P~:喠ZJtc1 &rtd>!H@zM$(!T)u(6({XQ$t#/^G.8Y:=l%4uHSc&LJ@@Hi0 a1|G1푏->QMCPG ӑw; {̣0)É $>CyԳ=*YCLRoh!^SY~BRⴅ::nyÉIuj>#vg CJT ?QQP/>xGOFU/}`*Xzrӿ"V}b|`=ePx,3z݄;QCp VSCrղ;ܤ Z㮑+na~_ZMq șv@h,_ ]N֨&J\24=|{C ogư-d աieXzND 8ܿ@ `q@, JXel1[r6ks`Nv7;aۼ:?tӝ8 P j>Ah1v"n'v}1f0B͛0?d*.ae[ !-t}%_8Nhq?1SpO}&OPh_wK+q @6W}D> ʓ,h0p0rLAѠP 0pP +-p 0 p'؁ QPPq$h`0 :Hw}A*iD&:⢃2 ("Ϭ3ТlΡ oBцJ@t,ɦ'#Pv0"`*P@ (+'ϛZ!ƥ~ D~"j<@ -?12K˟RбCtpKp#P<;L[vB}l?@*U?ɿ3>d]>lk mot(d2y;tɠv?aO覷.64|>+> ִ(*/S@OPOhWEVA YulzXF{DL Edx~Ui3* h;x=)K;t?Ճ'L [7=]څq*0U7Dݫ@)_Ja?eӳfsM6+,9|ٚl Mt`0y]cMΓSrOYb#.MV[o3aEcζԣEL:,P9RY ǏO$(L@~20!5{e)|6 linCIkEYj+dQ2kӢw x|"X)$l/ul/ИӸZ[֚i sw,KP(ӓ (*G9j8"cӎxQKGSC:xzcV)R{W9C:G:7|XPY5:g4DJ-;4+,(鐀}+|xQl@T,m6x*>i*D}G$I&zD(|HMjɂn)jz+id(Df*v6t7Ifc8Aid^S8&wrOJ[FÈ@)|j몞 01elBRD *[iy|J!6!٣ќWYgo8v GwXiqkmX}ةqHHu\r1ן [+sRh2Xh'&]r{5e{`v\g^^9k_p瑢vً/ZwI;J`;ˣ{}VADÈxu(IaTzUd@ ED2Xz:0,ڭɘi3i :XsCD㛱&i_ {ʕKj;$+ʒg[V0]#A'ԧ2[˲曩=zy.xJ(g,G.Bf g BZ'~\r4 H뷜AXoyN˗7DG^ OM!,q(YY(2kZz%#t=bRܚ08V|WX!ŷ;Hl \*˄d0;mq%Xxwշa@ Y7RFc,yp(-y)ZQr-GIN{uh40UXke*j++uwu7Fk+vk0ڸzY\?**;8xk7Wy/[d+"c#p7TR7AAil {I#{w,D7;éJ.jebHĽ`@(Ej{hͩl3z7"}3ȝLgJ̪GHӔ'(VF:L(;\S`ŀ2L4Oa4x-H(pW=b0` (]ڤܢ>4N+Nd}h:{fiL;~ ЬB(1m2޻}Hd2Zv/{S1  ѩn|'69Dswt5%|cf/}79MF=ݤcB(CbrAo?9!ӒjTMEN`աo7ܘ,=i ,I) q͙sOu׺Md;u,_ ɕ/WYZvHH2Hu> )+'r;Oւ_7?1fL :2mM "˟qƟ1qß c.QBK4@NAށP\"$ Ɲ}tqI&MK1L  I n1 pB R Ng T)K<\-)Œ)zKσ$pN1jqI <{ 鯽64@c>;iAJ= <ɓ? 4=Dvnĝ *@D3Ll;+i =,3>6$Lʯ@N?s³Ͼp:{n@< 꺌/  <]OP.A&TÆ Θ6@:+;Q{0QP&؀@sv9L_<SAC]Ҍ"nw;y++4.i`@D0{~j0<7<@74rA$ i*ˬߔ0ƎZgm;+9IC軱@j+o?#; 4s wH^v$eT-KN@=IRL*WV& RK1q{쥎Y7aꨑz1mTe∓t4IjZ̦6MYfsn (8# 11::C3np<( hr2X˔>株 恏S]ebh3th;bbƔ,Z8꒛D}ã=NFҖ0LgJSm~5:ՙ Q=> -jPNt8 *J'Vծz` XswR"e%iέc 'eZM0j 8(H40?0h  !Y6.fL?=MG ^V2@0&0ΥtvP*Q=-\2prQ͞hQoΛc67)H*z\Mit]^Y Bw`:xl8/z@ L)-Y &1r+W%,ZN:tFYFk(ʴ(mR꘭@pV`p+W@f{%]YFNru]R/A+츷K};"hN6IRa AJ|jo,ǗWC*x3K&x+t;xy9ъ& gXap슣e&N̶cCCp!S$jJWH4Z {VQmPNx=f5 ex6_7*|-4+j1*Y(,4(JWL(η~DΑTAugJMwdA{iE{ibIZĔ>> ԼeǦ0aҚ&̮}E>vCC5v?s`{L6^5F,AIw1;ַ{`ZKy;AP3m+P;X`~fǫ OR₨<GڍyJ!5[_SY G n SWJ*^iro[WSbgH]gefSEPoJa4wjKz T7&eۘtvt DOcnavqgX1(Sx7K|7[QxDO@U,瀍GEy2TGBg\1 cuz_zL 8{P{(eT!A+]g|gD:|@W[1}$f}:v76F>(~@~3Gf~iwTXVxXZFgfBfehfSO h+FhqvhHAQHB'O.wrÇibSzx4)*{D0sTĈ[8{Ad{7+vRHd|b?fHF^56(m53fMnnUu@p۵ʸ،oхva75xwvSXzhD7S8؁!.7e(;h{H'/|8b>DM.aRh;͖QtUeニ֐$I!yC"9$Y&oVdxA{4 flgoHQ/PQR>ޘ~Pn!t('r%G!y{s%f("x9:r:#fȂ.:a&"l 逿g"tCtY\|]l2}>VLǓЕw06~&tuRuw'wf) &+yh-8A=6 7).5;ə6bl0X JgU5N)jQeYY7&FF43tcq)*Ňb:^i3&@t'|Ywʩ <9ߙ깞ٞ$(p_- -g؆zlR)+ zo,-;Xiy%й S  21_3+]8+54 (\'ҏ(ukx=L7 *hKI0b%u~YD4n@ @P٥^`/8' sٟ€WJ)ٞ l>*7W{zx3 z%"ʝ%J<': ~C2i<=,aJhmàa 4gUbڪ*p7Ȋ"o/3dF @`Kj}V'DNLium9kSO|X: С4ak8,޼Ͽ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj)lQvP<i@t`*A$7&ìdD + K@ ȓ MK@^Z;;+P&j`?ӏ -bmK. [q*O?l7o-B ܫ?_Wk^iR"\?rs;8L>PP uS׬vt@$R†k\8LWny}w#CCTM9.zpø:ί.P"P1?L=yA`sOx ԏ<[;y!3@@@3;< 3> q:Kgc7Bc[־ $f)0{qw4뀰@yk羇Ѓ@ÿMj H>"!K#}=\\Zػ"nAx`k?⡏^ #"iF"x!2{<}`>C\=1\ˣ Iޜa+"FIsEt$֡{1ڙ$BVJ`:' dA<Hn-* fX6 !6l^Y h"4ym6GW1@Vl3 #l)LWb'H-vLl)`}yhYe S/u1Qk݄ t'=Qlж%}V lQ_Ha^:ΑbV"cU%s20hʃըK=STd{<<Z?T1WK,ь9&J7)`ָ$;kR>qxo;N|bLC-Qp~&2x!JJW/^D_zieqcjuPav ջ`#i"r!5J5{U[;dZC:mj?-A]a\2m ¦]ɦ!Ӟ=i{tܸ1wuDA1f" O"k2zhi}k: pugM O}Wջ{mxba赭 t[w%{U*FZ<9Ď+^E7~o?\ eT,@?hx{Pwt\%8{i{Z/.EC&g G wqg2!1JwC#1)/`}m<5倕*TnQtG\/Je"|$$/j&j~RؒVc@ڂ42 E5l$/dqB5De1m?vhQm?AdE6QVR7n R5@Pfn7;vے0=FMQovp98 @yw(#؉&%:1j׀.r;RWwW fv1z}Us7>vħ%x"tCt>%HwYKyZ6arub=1mmX`pX##assԇ6o5e*Bg~}ƈ#FʖIY,by"iw7M\6'RrEĆ#<8s=ֳs%ŌG?IYLI!UZx\_u#x)["\e?;Z/Z!=w!]ox j!yRWĐ^GJ!ywFG8z#SprrZvz "xJ /=C-:|C J01+G*!*yWw-RWK@⩥a:c+qjɊädo.{0Ӂ~䙣ƦkMpEZЈ2NkRN ivR7RPA7dٖ k-!c?}4Lߺ::c1m`Ӈ'ddaRǃlY6:څ,u'ǰqFzx7y34eSح٭ pJG[وA:Y<@1B ]qpd|iYw L+ BWRr(sы,JX5"#?ez?JlZw7č;uux]%5eX>74zZ5LC|w*]RXxť}`0@^)AgsEVG{Ȼtۼ;za;AO7}ji/H8iL)Е76:d~[9<u )Դ/tqnD*:h{E2S8l;H͚O7E 3g)Zk:26)~—):X %l OAAI-@2>NX 'AC*4J, QƩp;%y; [Yqp=sD38=Ԓ7rP$'9p sSJl+ܼ>ȐɒDKF;YH״jVb5r렅-K!^[C47Z*L"!nKF7uvFZRwh(Khxk-l*0UZyw]PʼH.*Q!KuxYx[z^pXAy\!cyfʑj}-&]B=-[ѤѧNqD؋۽B)|08A/UI-Ҙ_e"aQkILЪ|37 |.J-fn䫻YbwmzhIJ9u+3ҧbh4 " kŗ'ci9I(j2):h ث6b݅G`?7~G wXoZ|J^)+?ͩ7#:,[й֯UrxAbn;ܪ.{6 J,I&.}uؽ]<ɰɠЛ 4m` ~5ۨxgB>_%v⏫u)i|{.!2.N⣻4N\NG4ԧ.7wŏ[ۢyr+l`cF[u*9~J('?FB+%LRM>t ,L |Bby\$,D0k@sqGap 0b -HztI(rJ*J,rK.Y±K0sL2gL4TsM!,YW H*\ȰÇ#JHŋ3jxT  HR$*ɒ`- EI͛8sIX0< 7D"jOBJJիX 20#IEíjy5˶۷p1q%.^+^))'Z2cȓ+M4MY jCiVڤM@1jլ]ͻoƀiZڐ]+qpSdNbZ ȊEc#&`:91vܽ[_ϾQ't,'h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*j?jBc0 zjJɭkʫ?A~@t= cjI:!A믺ZP"PO?(l? dO>AO s=FKmqA S?t3; > :u?K@o@|ۏ>$/$@#P?1m;{@lrɛt2;> l.sȴl{+v[;w]/AT|Օ Vj 7sCƣC)+m}Mr4=0Csߣʫ |An;:&G/=N~+Txn?J>[:Cן:l@D@tpmN=H=r7- Adx A2`@WۼŎt%tH%- "\AU@pԇ>n+vv Y 79po!nȀ0~Bn ȇ%ed NbeX,l&:S>Frm4$"97Ή-LCGT`"A h@z&8~\JVdDL%/iL֑ ,z`N [X-D*8O%XfiGK T@'mwdY3?ҁ}W4!YJRe͔&\`?#X @ My֙І:}I{^Wu|oEKHV İP& X>vcIEG*H:'_Dn(gR(Ƀkqj@;ͫ^ڙxZ1s1 f 0B2C& ֆMbf41,h#UzҲ dV\1^Ic:XMl< Z$;rM]\~T:P(GIȣ MD h2hĆ٩_`o["e!S+d,lXYV)p/gLa1KCGfM l&7;D-mQ96"{}M<@ȉF,uu*=$&NOxZĒ7,RGLc(5@7-}?u}qlU-Kx&$ S ЭBȫ{̣ja_Bw6{ˁr |Vz9rJaYR0eH<5g9y,sZh~(Cv !}J>)Xpܡ ")Ob=2),{X8E.q4$ꏏ ޲Vc_+cY\ ZT._u YW'xRXq~0of}•b@6ֱly]:WCQ+-뭁FyW% |f& =3rf󩝑`/gڴh߬ BepZ )Β 6ߢmwWr'Ψ{j5Ak#HAϷM@`tV|yS ![gVrs/6zBG7)5նAo?^Wxp eGf7&b Pddƀ2=Q 2 p05V07vC:V0@ evft@S/JBr-сHGIF?5V CBJ+.ULg\+mM U>luv 5TguvCGƄ{fEdNX G4eF54_wkF6,Li^DVr+peb\S3 _'JgxfIISP r+@5fc\qu8{LV=uFL bSVSLhdYBywl\L^ow8mcE "/V/G{~*GaplH(nJxxvOgV :4{ByC7TetඑZ;(u+YuWinuW4IWeWw"ʢBw!c*I4/1C.Gה%~h&6eɊE}t+zTլ{YWL Ƕ|ĆXPԗ^XU97G 28w>W њ` a㑸Jzc #Ɖ!; x7G嚦Lǁ$[phIѩg O 7fqB/'tY0KFTAzdH_*;|gFMȠ֪๶sGy]I~!}hy/ g*ʡhkjhXKH[1U{RO1j$AC; .9|ʧ]Z; =JS[!/`mJ{lNvX MZf6$Yڻk 8;"qhdK0Ǟj5aׂ#{Q*т3kA5{2Prr xBI4ZdT^9kJM*- '* 3.Isf<gmkrG栴Q3S33ىKJ΁ă]-]׍GV7yr. VmI.ݵNk/ޝ,fҿ<, qSz9,9}.T;ӁΨs:"e>z+Pn%g:>~Na]cq K}-~&1kys(Trt + ٴ%>aKNܪ^]c0W(yb6۩lۺ5. "删3{SLܠEj֛ս3nITEmWD3ۋܻHZ"i "Ȕg8fyl Ȝ׷h~cpɔ k%|쬁a¢)qDKA j P>bG {!m|Ғ(iLx'B{ʇȠl$I(?*m.*j "&~Aj(g={lJ|~saGlJ()ASP0 ßTGw2K+LȞ}jZ&$U QqPV[ŏSC1<E6 <݉Q"O}'f'TWPDc- =p؜PY*{ٵjZމ]iㅒZX,m,>bRThy4|xMxixTU^^cꂳ^Hʊ]e\=6y)NهRѽ羊sCg Xg6hVzP'Hzjjzk/dlvGj{lS2-! $  {8a<߮'3aj;nMB0 &5ԯu04rة¼& 'C9R4\=PJqnH E&0Lc # P ||@@ЏS#B:˓V B >PLY'ҩ>aWUV*5`@?~'?Y,` ~Ce5kZ:ε-1!c/pwxc 6Y-`kpcI@C?:ʆeJH DQ~tk=Z2)ZCrA@=QEk] )@߁\G*~܂ & 0 wC.IV\3vCq|jS5=E( *| &wQmpQ`@)lSc G( r2|\/z, u#H3ю{d $;(` gC$1p7nz@8 YgB-k\gQ}iLgZӛ>ӪiPsM& <jT?) !,(W H*\ȰÇ#JHŋ3jȑ)H!*(Q(ɲ˗0cʜIfLZ2͒d %ϣH*]ʴSzR^Qʵׯ`kFEeɃ Z=c$ڷpʝ'X kPmsLk}4pIjL˘dPLrU'ĵd۸a0khK;ȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`~&fO?d 4L=3@cg?tމ'Cf>с$(eZ(A_ìS3&;3̜:' hu@h& AO`ðfN:9lm"42KԧkA a&۬=j.&l4;.[-r6jk 4-p;Wn:mOn0;/{[-O( @+AcA6i֋,{'jhh@ƻϜ4\ 91kܵЦMtHl+0&Ѓ'fy3ݭ3ē]14 αNxe@,ɪkkzJc'//^'DSAsO?pXZ;jyDa<6 $XײZB[`4O !/.|ҷAb ?ցV;'Z؎^ kH*kgA[JH qE B  "DBq 0X3Y>DTw{ 2+<g2LnOW@qEPTpBr}޼(GIʒ+*WV:t++8jLGxIkr$YQԾ(edRt<~mԥ.Kd@01+ۢvyY^'E00M1/) i}*я]j a3S.@j%_LZAtYR=b bn4)mTJf([nLz"W1푎}ԡ|mk(nꔜq(cȭ]lTqGS+TynM֣*N;:aVJFK:zӗnvEg5*טXdS^+Q.tJOJG>GLNicq:u]kAKBh )q"-dr_>7/#i?1uI9Uq k՗@N &H;ت^NJ* ¿}qЇ@t$wDK0KVLTߘEхcEwNbȑ>ǷE An9$ {,FMb+$˜VS29F6t}A:݉ Ї=(\:ԩ~3f"j *CI$@R"4E1|cҲ&=8z"վB9ęXIi5فxιs<6uaЇr U?L=]ks_ qM\fn.\GQV;m*N} f?#i2/3|OX<渿]makn>K|˞9GeW :.8 :'䷃.0$Ճix“h"- mWqd)cavv=uv,x*WAr8r厔HeXY0./[ϾÓ{/Y~&05Q@'vFWtt5MF(X1uuv8x}Ɓf'-3QB6>ceS6w!^vW^?-^7a|KF&_x(T_ dxuxAq8s('CB> vy[y3dV!vJVn(=?t`b?Ibڇ{ѸCHfѱbyca}h7e{u$dx4fh1@pȌ˱|4QH$I' &R^ vNKUB*4&PgsTxXe'KoC0QFuI5lQO]|^uޘwX|Jwm^'B>EAx(#Qy+W7U334 y2 i9 uzEgc(&hq 3oԢ6Eӑ̷s|y#|0Yרe}CYbg}Hiv Q9zdq~~\髡TheSzhiyk|+YTzo}ɀYj&oiHngTvZYh#XmR0}TMDlPxcb_ j y+Ѧ% 61'dr~d0x*Vj  n_^53ȅȢ;V}U.:m'opm®"w7`ߊd9ۇSea!rr) GR'xF$% v=X,9zzՊJg0"z+ @'[2J4zgڭȣw|s⢣ LFC>v>Gܨx?4jQ:2*V:xy_ȥD_3uO}#BB΁ I|tWwqAsujBYz &?}ʺwQDb %jӋڒW1=]dA|} *}4:4𽌛X QK^/7RѴ(fy+jy2li2c2k.diWKd{JP'#&t2 >w"-Hi?EQj2dĈ!}mKp n,jܼF<-*_)&7`(.bhdzP{2`A(Do,@ٴܫ]]!YʬavQX|̟frtnL3@p)qeZu{{', ~<+|ƌ~6Ky裛 COvw7K^s h01XZxxym"B'Aiz)VCtڏב|LW,<֑㛨廨ܨk1αړ>UǼrk(N&ӡCɿWIlKV,\,Ҹ h(κH5r0C%(274%86c?jT{PDĴƁLH4G[MM%ſU,$}/i dLa߶R)OȟovHgSdbڈ-)0?Jڔ<Ȗ.R[pdaEjա|uO{p)D}riQ)n ij`3jY|3+eKwZ u]b7mLl㝌,v?IBmޜCw7}wդm^UζH}+hyМI|S5 * = }[wxtE{4!þB{,Ң2|ͻ۟Aӱg+؝T}h~fFlln^[qE~'rR ןȪn8*xi{#}5-4U-x][lQȕ.M1H{֭- +ٲ ymDmf_-ڲ"V'K 0a8s7}1ò]:y|]آ.ЄIBa50NLuLs17}W-5a=e(d+kҎ Y9dsZØnޢM͡LPq>5$([m)+bOӬ,/L2^dBFۘ\k1t!Nώlu]R6>X,.{ǻy-W0 m{ѭveiDN{Gz=UQҾҙzAE<>ٿ@aKg-r_*"́ O5E_4M_}t b@q3O8S8؟_οCq(/&$XA .dC%NX"A71/$Ik![!ys S&M&E/jC'+B͘3Tߓ~QFthѣ>j8NjoϽ[U jUR|| }a7ꃁc˞Xn^B;2m{[e̙5o<@6zΩKkL~'P6MP1Sg^d>!P 'P7֯cV?V\+~O?cϽ pSN -9|jPmC;C4FD DJFx$gxl1~#erGiQ[|1 <2%=j Ʌs!~~h~j2zW8$)4 KK$AX+RLďDRF1GҨ wpĢOJ5#x2JU?(UD%ˌh%S0 0ϟ*X ~NN >sg֙nqß4d|t_~UӔ5_Fǀ"hX Q]L[0 =8* 6cZY1Ʉv5۬ʚ8NSS4]2]d Ɲ}t!j()`7gc) ~2l) RZm{3l֪o@Ԛlh hπ/3v6,sEu%߻oNg T)#l62^x0Ewj&eqt⩪볧<{yy e~G|O}Y -gd`G9TkwOF:ހHK@"~+߇{ 0@@ LxL&Q! 9D 6CP4ta}C 1k|TFDDx$ QSbh7#p-vqk`NDLqE8Q&uFbI͛8s3%(4bD Ť*RzάEF,W(JիXj-F?ZtbbEfz¬۷pʝ{@VBqS&)݆_0È+jW)N8YC`AS"!˲ϠCPj-XbMW ;lhTS1+ҒUVgL.2@lhZ ȊEcD'Y3q$ B{4POϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6hJ?$O>*03@ O?ZҊAs^H:= 0)<:?^K@ݖ-Al: nˊO+^jx@*܎na|꾳 @,<:2.0'<@ ԁTs?@>O\',ڳX4=n:q=0c6rZ.=GN`ܾ+gL'Sn2H{NBtk^Ay )`Y=lěÎ N=:nmOe@N xi$W;sƽt<M8j_3H"> P zHm!d /4^2V{,yի\-g8x@!lvؿt @B6 `|!<#WAl]ֿm0@!fҀ$V*}peEQa21^ ?QQGe!`6CP rn)dX$V@(R1(uXƯtYԠ&?#' 7!2`m4I͙̦6!&pS1U?4BЄ b򐆏{ysc+Z|ak7Rbǎ |zV% pK]>="H{FMaIh6`O5m=k"n/G_fY)yL%sLB 6sS!lHK#4_M!K_z#lf ~buXDZf͠BR9?EeѮK^hgMr=>NOʰ)lhdIcVv?SUa?C:^ bu =tqe5][W'|LykPdXM wL:'Zx j{ 6 rxf%(8jwɷlZ\ +OjW8 fINůDz3Umog›pI6X'-<:~!u tjs9^v6PazVVg>Dh'}+TӒT C*w';wsȈ< O}-n@#lwc#Ge {:ģ<@~\<'f#sX'&SIwY=#Oe|qH^1qsEYZvbkns. H[չ 3gd*q- h8XWBii"x Xv 8_RSy+Vr~jpjB7[r^PvF F2VPrQkÀx2l%WkȶC=9sS&0uV6eUy<!C 3(l mn3Gn-vWX7R#,hmЅzO0H5ۆ5]e?bC6Ɓ$@Vxpq73fuq!W7Wtq72r'qc /=rrsHZC<8ZCZsm|7 {r.2=iBu3u۷ybw.)337q&v(y|wvvx]o$)4E4dzwvg_U73狧S3M66dhnG}Yy%}ߓy6yha'CW)Ytt Fvb{}:c26*1F^ʳG۸{vqhxtwF4yHdѓHGy^}b;ib7t}*,ą ~斔gshpXtYvI! hxN(jNW7j8p+jO"87$8&P(XP*-pUEa2=SrQ4p?q@DX%HRKRȘ8R=Uh0wݶT/^ybX|egTZnMn1*I pu5z(ևa5m7;9W&ㅆhV/Ȕ|ٟi:jXqr:3::W$hs;=s@p<\#R.`1׌R'@8p(Z7yY`׍dG@XuSYSe>ؚ녟EhX_Y-t**R.bNɐC4pywzç,)ؑ%g`&8DCc/;ã){:+}t|e(9|)IXU6_ze2KQ2,٣qJgwSiɛk; @-zMZzتm"cqgumBR!(7#OPx钙|oڙn) I.RQQV/8C30iG8-In+%1詘;:2.GYn9͹ILrNU'H8 ݩh\%|o癜GV prxXC{?~UzX\۵MWvsVx*.+)jzs)e.È.UD? RzA] A⓸tDC A>jK(^Zޢd*x9x6XeFZ90¹-V+摂 ;=زMSQу {LBzy6|C@=B.qIcVjj8Y3@:l-*K!gjcb[u)Ţwê@ꑤ­*jaj6QJPzP26*/(07 *F;hi^԰߳liD 1iXm"x n&za19x/;m3~29 9yس^~ Vžuňp(8)E(! ɞ  YܒmT m=7:ՐsAW/[?GtƧ^`*F3 >r:F9E_3/"Jt?Գ2,8:dDz ʲKj,+h(,E/u5\=?`7kQ -g︷|~ױRhH.0.ȋ/8v](co8,5Sz)[CLu{d:u>CTsM6ۤ́L03MT =tO@ϗN|OAuQ(p>YrsYjLHkRK1ZAG4ԟU{N? u'0_uZ?dglVtZiTHE!5zQS@'ne8aFq=PA&! n䵟vy9e~ߥ@~N9&Vݔ%8MuI\[n2y2ɇQF l fi~dY`\9RksLyٟ'q*i:X =PgUe%~pw8g`sQ|0G ێovMSO|~`+%4Ǔn4|sn{ pĹ')v$p s7WsDa*;~ށqg]dj:vnugwPܾ x:v `AmGWlУh 6f#| p$Љb.A R:E?ƀ dBgmV+_}Jnx'#S(@x@8Ž1IFc0^ǵn h9C PG=D2 HC<1QarQ$M긣𰐋dd#d-#H"9G*r37td'=IH= eF ORn !,*W H*\ȰÇ#JHŋ3jQH),ɲ˗0cʜIKPhĈ\i#- JdZPѣH*]ʴ)ZPtZQTTjʵמPkIUTP<(˶۷p3Lbr߿ ~ujZ' \xaǐ#7kpXLnH̹獴dI%K0bTװ@g n Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf&@ĥ8S> 3SϙOm2L>%} &t@t`'A@jp3&sf?90s ԏs@( A@\\~*= 'H:=q)첺籣–jA AUxjW=kn; 6kF i \K[N첛 * oNܬ돶1 +|O:˫ gϝY'֬,Ưiq&(Ocn&A0n^ڰv3B5sl>hЈs[3pJu(m&eu;q_wv_Q]oΙϣEq=x.l38d@zƪ[k"ƺ]p%;3=?I=Ǎ?@\Oֵdx<g0j5tD-ٟĠG@j|Y~m%t2a0gs:MtTxoe?v0\* KHEy A%.g@|x H`${tA N?1,ţi_7,P@!O%?qOL{CũhN&7IQ](GIRwI4eA] Ї=4 kK*@U $@.wC(brb&(%\V,KcvpaRiV&%эd⯄0;ERV?nΒt5iyZ_$H4]L8:0Qdm:w24+X>FKXFz2 Ċ;< h=p,Mk?3zB]JJuT 50ѥ~l[pyю[hVgov쫁_")8|#>!*3]nثΕ&"Keuz\AKҚZZv!kRֹ=v?ݺAp3@pmPU Mjt.L{[Bu KHixc(e)?e tz_Z׌{E%ctC8xmy|d!9&R q$PۖW8α>).@l 2 ga%Aڴ)XrtL^"ꗄ20>dKYjNeaJSxzf4KRd*[d7 M]t]BJ!vc9a77$5H=d*<3X,nT%+[C;D(G?%Ŭv-[OC+壗h0/dz*ff?%ձqf!3RƬo|fyVfHJnz-i_?|֥mmYv̭47NJm#T?PY,aq}I%5)k|f]JՅ ϏhCNJUHnO^'d,S 3ykcm#@{{ɇp7i!+?PS1̩ h'-nW ݕ;U;ƀ䠗&µ|ĵݡn:t_vU;hx [в h԰@8F8? 9q_ŋl#QC|W+OH7 9:+oYdN0G2=/bsHsK2۽ n{rzoLΨsz &v,\FȒmIDsJPVy{Rgph_OgnuTiriӃvGTj1jK%&~0o'6dUq{#=Ʒok7w0%SpSQ'\"375li=E|o`FTL'KE5\b5I(=m'USzAc6Vc%nh]$Mq37Fo?hd8ohhzHmsT39prpC$] N5'k;q'Yqqe(}1r8Xrsx|,4sD6CG!\vte{-t\wv&FӉE@\wFڥFaj^ɘzER*lCwy(_zQzy'*{1~b?`Ex`a4t,ggwHrwEKFy٘yKky(&F7 &)wwHfFCH)D{c灚6h}|{294|4y8}:iH,J2c }K(s~8('Le&@fW2fx)`w&Mo'z&k,#K3>5ȀfHO'Zi"P&\ Pv_䄌P.Y|/Vg@1i3v4H%'2 ZGow)vy/R+&S%&唘w5ɦPUXG4l35qBm34$G9k4舙cQ8Ax6jnqA)ija5yW vUnZ!pq"9)#DG\Fg޶X88;ȗqh- @Г 5! ъqZ|h&ssT>E7{8JwHƸ\PwG`_Č uЈ]]7AXAsgi-v5 Fwi,w$=(B%W+5AvƥEg3xᐳwaamD'&G9ydbuX{,W){{-ٟgJzZaYd}qKw&AJD2\2L4e!%GkUPHWtNQNԡ wix }y-Ǫ?42whx-#(%XgU CkdVjj!9FJ8R*]ҮG4?%f֛%Jli 1;GpU2czIȪcU¹YfqxQQVwz[z(ĚLss2Xt GIp.7XP;T[VX;Z[| EK'HOhztzעIw\o'Q+ˣҸ@y{rE:p3%4kw6hy_f[q#IZF6yӷΈv*> o5&!I{%.6*٨,9:eK۽A9'*~ǔB~c~Ҫ'j6q5ld)ɗƬm /uzG/brT6M+f:9I2+Da/C 0(c8WF]Âqk)jyȶ7VBsUʲUQ9̸c#CoA7f789ũ8wU,63pYp:sMʿFW\.JŨ\w;y{+`g7'HA{++25ʶx}̆+{k|pZ' TT&I\r܄@ϱa }*ƼzG||ʻѼȅDJc4, =TQbE@He1R컔@ "0LL-[дS[ylÊG!NSE0I%ujO2Drip\ؘEml)e0AE~e'Q%ӹZnRd%]Tr)mľY^K(]%Ko6usԳe`\nx@ZSJp6/mxj *lRZ1|8 9=||c+ȕu-LK]ݞ֝]rl-yKsbq!ǵkQ],sktx;|˄uBj6z7؜^xwYDKEۜD;', M]Vϴl)ȱ)7⺍# ߽LP._smVg jiAi-Y;^Vj?XfN]L] U%fFxEH>7p5rt>9N@]")@#raUwf>=CߡnL'@{?Wm~g:P tNQ]]p5W$̻2%' j.u{ÜOb p%gu4REo=M0 |y\7B`W`&qjRsLh޴O>1ޕpP]P+g$(s5YA>M6\SmocX+FSSV@/mJH'@tN35.Gz<%/~09'o'Ћ>9Fy>ձ[]C>Kń:@~B.:ЌZ%# e_mo `?_jB/\R7[ȇݞIw('ozydѵ\O f  $XA7 LC%NXE5nǎo)O<ӧH& w” W4&a/Q˷J> ksn(k C3Š7km+ʛ0 :CC?AZşpX",AkM xd!:O=VqI&t2^|P.>9i3j:g8f2L *R N'O@;Ҭc;g2 PgdAW:3A)6ҟ\}ORbC2PZk]qW`V"XUvYfuְ0uBHڢ%R5dgw\T0\D` sExㅗ6y%^|uRȈ_ W_ 6"xރ>b3xc?#n</&cSVIjycyf&eqP9`U|d6^}&wV+EtdqzlS}PY n&Noʦx%~LX;yj|-9jCkAr" \X!~~d?q{rGxc᧟7(wt~>~Nw~` `m'w8g70{P x='z$`JGYCu߳[a T }~[–wG܂#$`ic Bjh[-|   s{3!ؠG)@ l\*QϹ0c$*p vCn F(1,;s8Gy@8|?Z:1!W* Lkj01.  叕Pdܔ/*O8MՠC^`-6@ɁM0s><8nCՇߣꧭa|W?+lwCNkAM:&SOCTсh!$]J pAqML]`0I@BH (p, Ďe47 _r1~)@hBQLZ[;l12]l7>V,@ `@}0(@}dLB(D' 1aUEь\z-$¦(i` [X0U,w4 u̷e_WG+?^Pf'g[FJ$DLрTXc.}&Af{6V})haJ $4=ӉW`Ie/yr*s DR%=Nj㋬ȡƁ;?&hYɨŌ猬cUӘB*8FzH -ᘤkrp.e/hwTzvw|G@@2@.sx0CAI︐47d1$r0C75YF``Br*&E7VcX{@w7Ra/FrScobviMc:HRM@?s$mIdUXbIԦʗ}M &5Do*jZؗq%Y2g4XhtÊF(;N"cn&=ꧽ؄=j}4L;)9{*I˙yNȮkg2YA)녻/Hm j13;5Un , 1sY2TA3ʚk{CdwUx;-*eC*Vqi JocC4eYr-WK rU40 ~Rq$ss DzLKt{ctcw2WY)BW'E(KZ 2S.f{kw#wΥ~ $@&%DG[~lz`nh<(brfwJ84GKz*<(r^bN̔̚]6BĖٚ-jcLFWL)MЉm(bl0d n'Yh Sm#(3ꉳz|. k*wW+k̢ЙgLo8ٜ9L'gd{Ǖ{¶LWXhqov{Ĩmc}Yʘ8<;e^^,î{㛢^mG\FR[ޛ >N-.3'1Gǧb5My"(&V'D.L䅃8s1DnN~0S>:` ^r.]U;^ #O SfƸmSb=e7n1ԻUtS3C C0sob> r1r]|gܕVMG82m 4)5K37ˇQyb.;TcVdIu~R_c{]Y{VCF*C.-BaDU͟ʹ`Gێ'ʤ &,[7ۅV0cI֦{cm,4Zu1F745^lG/8C_8Վ"n'@ԷK t1/ix1Ӻ I3xC C):cAo.03:m9.U}>`|SOD@Cݥ'1Ni7Yr8sVp.eMtœÄbN!!$x l]@bUkܡߎa1/O E͎_"m|jG1D> >2~6 .\ޞ?nx~30r #\=1h<-DEC1I~ã2%2 Gϟ?xSwpS?m:bM5V1#G8$FUdK1eΤYM9uOAWn7Eo]x0=߰ b]K:kAXiuhŤIKkRŒy_&\aDn{^Juk4XVM"Lvne#QZ r5bܹu~b2 Ϭ̞AH:wPFYyկge"[ /]ӇuP->|i -P+l/O3=;CC3ֺ'aᆩgzԊ4Ӷzlg~DF꧝'>жc(J,rK6|r/sL24L0(M8sN:E<1GDLOH0A٬PDUtQFuQH#tRJ+҃b)H4jS$tTRK5&OUTT5TWOuVZk][cuW^{%sH|Q+[$6džБ2a(!{H|[pukG!NPȞRK;b!$px:辚ˬu̔YȺ Xb-*%xc;nP㬻PM.Dxfgaa!5FY#˪6N (5yiwuG ,5\(g{o)CV{mK[\vi+? mAKrɢfpW|qwq#Ox 5\r3V;WAB=tK7TsJCtcl0ܗhtܖ灙FvgIwG *v=狜>&߁Ix^%{ٞuAYy&Fq"hF=职#8>`?Zp y#2 G<KVaXE=a /tK]! ΄x=dO  '0?`, Ab~ Ux\AqcFq;@z-bЏ)QA40 _(g?x;38d"σ aR~䃈 *rKX×ьbOHlHaFZғ6t\Q`.xVիO3T{ُ4?*$D,LEU={@c Pv++8CF+"DA!Qnem@a@ Doүc3@BqJ<е˛q,.+fC[|1C&A ,N?DA?== 3$=_짽o/70@n2$z<.r=ݭ| SF{cA2 dG _2&dJ q~toi0RfBCW|cG౏CQX:ze&{! mb®h=2Û?7 V/,LZ}n7cǷ&G;88<"}Q9RTrXa|#8B%:-񃍍{Vfcu "25&2}2#cYnr~#q6Xӥ)OJz@05uۧ@JP@h,BІTs(AOtby@lqTIWպ/r\*J8C+L?@CWos[({љ8&- >}|)O8/dg)GALcC3ؽ/R U YU =jkc^j/ʅl}MӪ_W ֬|J#>ʧ2+yܼO>V'X6fnNGFr[TV$K揸I7tX8l%&1rNm%[ l@{^,a8~Frl[XNx]25-ͯ~[<TJs+J{5]Hr`}d}Z4`*ݔi^: 4}D*la"WL *,xQT1!4&*3}s aGĚ[@ ݗI!W+?N+8D92Kl0ȰaLrS~3OMzb2B&LQJls4AT8zfGQK7842 󠍉JFa$,H/wҔ۝qČ^KmfVkC}SBS'dAJV:R.z,Lzs?fJ5З\H1Yj*3h3)Hc?T׀pH ?xz "|8әyHOﲳ4wypW'Nw 7{|E EQ068RgG~l5)P 2 ardHvvDxV^L &Hc̅q렪ݎVW-ػ0. ;nXu AʧE(qc+s5EUu͂ɏ_YóUwݖ>t<] ljt#vmaNڙ}<*{AK^uiɵdnVWy@bk( oH 9Ͼ;w{N&Oa\n8O0 !B~ =P7yosEW/IG'iP/gU@}'CԒ2ddJAAHB%%0MqrQBeYc_04&C( ayNeVDGfDNdwofhDg\/$uEf~D9K96IphplfG'g{75$~H,g8rFjwBj0rPkRg$KDIDE_IqKVl6JtD_j&hbZW$4GKI0XƁ݆r$6G$MXn% 6$|SM$|DN$O%gp4rP;gcw~x׃q؍!WX&7wnՍ..;2g.52$7L?&'tBtSZg8LhԶ@cRwv}|WU U/ H<~E[eWrWVAW,EBCS4TDA_Tww x{r=#k8ZfX>ه[rsyq}\NZDT$dxX{bEGx{3ygy;u$K8CD冔:\4ga5@gX|@f:s1KU|~Ǔ;t|;788ٙ}9& &%gQ#sd}GTR#&GefSI wh^#Ԑ)EAHCGo#HBLf{ł\Qe#4J=DC6XU(Dcf=n@fB(E`qFHW,}&3yFEZxj]}`bZS[I,$ԑkFT'tcI~kNcfu4qhf&Y90 W"mljATom̄TzFnZq nQE9$ds‹ 1봌Xpf|󒛩٦n,r:tPXl2>Z 47vsXR!R(.2W%SnK{:4-'vfcuWL3|*sqWu;8$;tdEXd\&ؗlatVlSRF4j;4OWj;;ei8X,AY%`LYG\锚7Z4I2 5 I[w٘U:`RI7%rK$Ga)zeW{*`}{ztBu%唘TBc瘵p^;I_Gx:$*Y(*-ù9-ӧ#X׳1]$J?3©;[&2c֩5YO8adȨd(z8SVePE::/wUbF;HfAHD$:gj2kVh$FCdX]UbYϥ z%jCƉݪءshF *I JcKmi0)J%fIJHJJ4 lqqyGlgzŵWGqඊMp{{@nM2{\:[^ZwO7fI/@ ;[r;!= d4۴Ǎ5[Hs߂% f\=pqgITZ?H \v6UIzcܙ$YJ:)TVa{⢒ȳ|/Ӿy6G!&\Ѩ2$-˓5j<76cKB¢AA,Eu$z&<h?AAecĈ!`{rۛ8nI$FBzDcYl@lV2[S}r>`,?t-Ff9PɃHnVбA5:o,'t2h=42%]2ot|W)s, HVW(٫B2-:M%MʥjPۥ:uyOlA)c2 P%-m;v+LT&T'n\w7Ht?:A`tb= ?IA~iԮyD+qN7M>%]IdBaf]?n?/H,GWUcmMJ YKH*%s]pAG>27n/8BnB ^:*o,cf|Kq8׸^vyu,nغ)M"fRFXF۽Q|q~ٳŠK6ۄCa~[q"B*+Xifs?q܀CcV |z-L4|L5 PdVuAvkW[ֹd&Y@BH)J Mm 57 S{qoOlvV+ L;x uN<, i $I6 srhrF skE^5]J3B?QfV O>?sX]5=Y?jl>ѻb1#c<:m;0W9>[(Ԕu ϱ)_?} 6 O& OA{kg0>3O߰3I)UdK1eΤYM9u"ž?wD‡ =y  CNM9^a :7lɃ FX1լ`Ivv`}@]7?~ +w{.fcȑ%P/O6)bzFiԩUfkرeϦ]mܹu۷ʻd/gsѥO^uٵow1فEx[w>{7*}Jnb'R%o>  TwР h@ pD *)N$Mw{&sTq,MJ~ƈK'Jw5)݊Q9p>%"'r"*x PPS#ddlyYY:Ej$]abx??4 ns4(P8TF8z ` /jB$,ɚrD]S"Dutlef 7~%?4! o-EAay3zߟ(ulړҷ~yhVQb!FP-F1cʖXDu&y](\qz؛*?CrXO?ȧD$J$WX!5]Jɭ|L UP # L"PKhTe5ĕ j Ѿ!\j$b+Ùz+'F>A_viiO;]ɶtdKB° mP'yvT,5P&h'CW2шfTP1CRnT+eiK]Rl";O;ͨ{RD+)O^f+2E=jS#1*zଞBϮHpG:z=)}1Fr}bI&Yn1ѩsM+CZ !z@9X3 U: d\A O9Tԇ&GU])uZq(z$T*& ®ónV MaIV}E[.Ya?Ҷ '[vj)Y(=7H;b|v̢[[\ ovKݕU&DY _බ-=某ʈ9fZ24#!ٕ{(yzǑƩ%/&,_-NCYA*aebXy'Nzc G6r¹%C R@Sr|e,g6]"l &Lryyl`Nlf8{l&KgqqjRتㅫ].'Vgۻp!bާli;JЯ&6nzKe]&F&(cbg6|[?MnE + K }ׯw{t&"t Jbax'4%m[>Sk {sp΢!'9ޔ\r+ EP_)\ьfT\"PI-ss3'zFn< Eg:Nl7~< %A>׼% ؇8@X&j Mu&:>w e ukψ?w`Ȃ8?&PuQonb8  ר=ġ' yA{DDSVL~"8J"p0i@"]@H:<~"40pSPCh <[,~m쇔;~JʭJʰK;9/~0/4Byh/8F+lR@R8~T2J:$O>*03@pO?zzB@tp@Ï"(zZ'׭>NKiN+v-ݲ[iln?ණۻ0ʭu Z.Nl".Ȳjukj?烏>0{ys<qR'L@iֳ=V|>:v'Vh۬YmFOhp 3ƭ= #=rO vVxe0J@@EUs:~k:kS&!iB>Pe@34O_kh#/*SoB,Pp&.|*v^a 4=A -'{Oڻ>iT^žǵ)gEa+p<(BcpRЕ5Z"H9nˀt( d Xa=^! NX!ZH2ЁZ b!ć9,?tDcTcJ!+|=x151c`)rt\,ÂMP{LmNȇ䎣} lE;3@2=N& ZLeFHU򕰌%~"O2Hd-o)Hʫe~]2.R`$T OκTv) dSODEN &Ye˔؈:XgT,pJEmˌ…1Ϟš9CKs/ˑ BO76ԡ=D).f6ʔn`2RX/TfV ,MKӨ̹]@ J$VR9͖zMԣkrl$:V`ՒֲhEW?VP6Vm!le[c8uq89 s&M C]^aB;U~cѹO<@a8n%xԜ2G Jҵ6E&񬅸pf2o[~~Hk n"îbkaֶsK |>b> ?ի:cUy5&&뛣4↰wӝ tyKW-h "oѤ8EOr ܞ/1bexL:ٕ\1A<+d|/w`:OlDYIQ 3diTCR뛌PlrZa+wXZꈌ &׹NUМֶVϒI/,uSUkSa4\E6^QRմOZl KuCI9TG⾩` g@Ew̢sFژzS4-զ5}.A2[?c7/)xw7;Eruv`+wi%=QuLNmFC<+6%Z,?z[m0+Y{S@ T +=Q˖kЕ.}a71vðJYGc2}7q[hz~zt90*AD/]0Qߋf]02bک'^'/oǷ8 32jsT2H^ ˑs3R$ԕ}an/tBvhĬ~ 6H+1D~1Wzeh&`( I5&n6شi܄vtfuf2/vNk0^CkWӥ@'"mlEnTiPkFvS0v*&rS (;ȄE1ÆRBsn$m`P2noDž8EoSS7zW&?1pI3mTPU TEUZKHǑq8XrprrsvXj~rX3sCX8sX&4}GFEI'Zu|RwZptBh~3[uq]S4}Laxvkve|wG[wwەUY!xBxBVB㍸w~GyHvA_M&'W.w|v Vzz;=N6 tEHg |[t7xB&WTGtwGw6}z;)g'Rsp7IBU.rd~gf7'P|RYVyaXZi\IWX[a)BeH̱LՁפiiic(͘0ԡjI҂O6|Ikk>؅&XdHT̆'ֆKCmvQKQb٘u!фnggn qUaN(o93rxo?us{h~4spPpU#qY<וٝ@!9pIpa1&C'Wr VFA=958!!r9c1TX#trHPub|!3 8NXp={^=T'+?Aਈ8hww5@a3s:Ҏv^EB)uF By>*3v7z8J]'?6"Zj4Za^ae))v!drŇ:Sڔ404c+Yu0|:ʦ;g'[GH/})ٞPFA)I {EwdK)'y*Tګ_YiYKـc(NJ^.'prtx!,#<s)Nj O6O4x6Ok leA.C9sb/9Rb퉚$Ijx))Ea8wBhSf0Geќ( xY7J8۝<۳>[}]cuÕJ RE̷u H{\jzD jG;I%3%xҵKKvm58Ȫ23[kf;^_c 3'3 ҷl>Bw *'+0mR)t >0Fc))pꂗ"]ϣ[tXw\ed* ,(B/aU0&Ue2@*13y₻)*ȼ9,ٮYr!'2څ*KHhtRJ';-fY 3Z?++pR 5Ezv^hP0CUB+R xs~ۥ+TB&N+Z>Ƥ2gLmrewL$²p2&G;mSqhot \%sxaKb)l0$p01DL~øUX(,'c|^4/IJs%Up]Bffٱ*lZ3+0cA;l+1ͣʅڜpY'[D,3A8Y 'mۗ<,2W{7grBP/'+pMS-ӄ'kM)˓ UuJc 9Q+.*`Ղ71j|(M52xu['O,k ܒC]WV BT@{**(Kgok GXƖ(mOxZŝJE nȷ Sչv(e{3(՞TL0b Sd yuh k͹n(3yB@lQ]}TB=eV98}UlemV=BӐȥ)"DgqħeoBțy.+mأoۯ,ˇ˞{'xԸ]8zeiI,\-_}<]vF zg3My6Z}g-hp0ѶKk)( Z*mk-7͂˃&9ͅ j2^?,%5:+c^R),)g61T\M3G$%ȧ'P!ÍB2A>1j2HR(PӒ+'Dݏ|M,TCF_*~ˋk'-QPLˊY, gs~nIJ^Vs|D=5ΤlvrJl.||.k7 ԑ -1}y:hk2,)ۢy4~|ѣ ;)q.46V.0})2K¢40ŋ֮Mj"N;ܫ*ADm4\SM&K/@,`8S]Q A\m_Mޕ@>*|{OH0LԪ૨fkرeՅsw5Qђo䅍e{A\/z4&~n #կg~ϧ_}0^{@xȣtA#pB +B 3pC;OSP1QDC[t1BI:WQE{t)țvH$'3 J;z2ʁ*2"yN#rM%t͕ 'PsH,?ydq\dS.9Wecyfkfsn)G{RrwQu6:eC ZS*hc6Wj5g|{Ƞ݄" z}it3}rх-Ѳ;-v%&u5N,z`)s 1*k, vl~i[ЅI{s~:tFG+mSڳݾJ -D|1~|ZGv˻zxj8y~M|z:PW ykzGUzxLH3|cSNd " `,Tu_R=0URBF,cAɊЂ[~uCh $"{5c $/^D&r0H  \4X!] `PǙy4"ϊC7^jsC%㌱1bw7lx`E)،xbpdŖ/(OR2%(H~MA.3I,ʛrt|K_D$ D``S1fRS0j^s.f7́,(>q% 7YLoBw8@D)d~4@gPPF*nY\8ʀ'bGIV =?L~X͇VqNTE>!-G ϡOzܠ5#|?\pի#dɚ0Ge]vP]rgƂxg`rӨB%(b}˚*E?NYu pYdҳ0)gcnsH*AGMXVja[E5YfԬtA*Rniv5 Lp>ta[׽ޭ{_ehj-*/|0Dvx]5R.eV(H nc@E?aejXmo ܂Pd%01dxGM"m?Y&u@t`'A4&`m?qci:O>f*0SgIz9@h2Z@?b*ssn{G +P:w,\V̓) g䃦4q+oAC DE=,e;2KB:-ql?wEw\6C'U=m+C=t:2=jP[Nuhas d_[ܳ=6= N?sZ+ 71Lӟ֕4<c*_u4ZOR`1]LOp+ +u 0 C b DH1jB O79%K|KV<^ M0t`<|Eaq7 AȠc^B<q+=G1NOg޻$&U=A (WRHαoL*W u퓬5zKMכH12lԽI(CmQr@sىmД&ƍ]A*nVvzTd쁿 Q Gyt5&sMp֤p׵e' Ri <iKҽPjOvne?iPB +`'\iv0X3~rt;FCmc]}W WEt|blJ<Ӣ O8&ү)'EuV5 V_U_q,%9 0ܦS_6F3q]` 9oF2{ZkaKԅduk^;. HKwnw޺Ň o_܅wF3NbρE \Qw|tΗa}nF3-٣*m,ҡi/2ЁJUxADd+6)tZ "VKP <HTW޻Ѯt6zyG̒Y|xSM 8 ;K4& 4@V9|HG r?d9r.KpL,.vm#Ĭuij{lțP~ 1;'NrFML%FgsUcu4<,M~N)7ki4 S< U{=Q.׆ԤV퐹HH74к0d:9}@v.vSP@ӳ5FmiMHRKUksbU wDJ~d[ 5!P\P6[G a[!%;nT hHմہ÷b?pn qf{eIޕAR؇;JuY~vqdӂ>j3ځ\@@4ϗtPԵT\w zBu=̅X':wa7u I;b՗f╟j~_ ci}+JMpc*MBo1WH߫[Zx:~؈!Ix(ffX_DgI G! d2_%ۜN;uSﷄd)9y0؃wuwO&ܵò4 z))u>b- U[6] /hI)Tu&ma9j 9ԎEKpL[-ÐWpA:)lĔZ'`xr˲ܵvv`üXt jWNTmQ˿l[.L@˳1lܯ[>X˕mܜ̥ͥ|B aV ͟GE Z ֜KY'EGQFx@&&.DfX7cǣǛ < <دkÈ&=~LFIّbp )rO;XIbS`ֽuJojsu,-IAtLu̚jkhs^ ň, ]2fH:O̤yMBJx EgwVJ)%˴ܼ] յyp cԬ͡-ڞ.r,`V"uDl41l- -=qJ220Oz|];V} :,. ?d4~\BM~J}ߵu_m4._\nMN q+. DUC Q׭ךf(ω O# Kp彟-k*.!MwDڍ5`{B  ug'E|B]˕ ,."52V{D޴V_Jo]dNƌ>Z&418XAKl !ܵ ;ĠBxa+9$wl(9+R Cq,8FIrBUCU m̊I渽[9Խ 9 j[Y@N#hb'ڛPaEv=T&NԬ8,lo/1NlT& ש-I~2Ow:mJpf3~_&]Mionʫ7*jkrp5)9'}k㌼[eC&pJhd9OMɨ,K@&ٺ, QfNә8aW}G }5ny Qc0hu.Q(.i;8y3I)^%KK΁ɕc~z.,}-yc0O|?k||k+Zt1.J8)3]ӗo˰G@ 8ԺR__J.;y~eXƃy*f ~/}= o?xmo?z ݻwp`>ɣG Q!I!UdK1eΤYM9uOA}z׏d>~hH{T)ӁMݧNtN~DIVHcS e[qΥ[.L쌞*+LP NǿR'qȲ%%e̙5osϼ{ 2‚ Aشk! ;,e&ko&_i$z1bU;2jo wUz'_>|7}Yj>mOx2~n"N< 4@}5^b062ǹM|aه}ln[tE0FkF;1G{G b.t H$TrI&tI(rJ*1*vlIK)*s̕.+rH L2㔓̾)MsO>aqƆGgBgǫ PAoPDSt%D }R!9H:O^{md UINFq+B" " k,؎-V,dZTZ[nTKj Wz 8yll[ 1TG:(eۍpv&/j N?̵wdg2ٟzXxMxEdo!fus137Edn Qj=He;e$,?yaf7 ;>㕨Kiv#ɝcmHt%Lᛯ{͢ocjfYr.w~1tne{XeKRq!Ǡ4J?]ԂuTCv~rV<1sH^A5{~7|33{ֲeI?,NZPI2D=$m/I MľF|Z V`d'"d =xB>jQgiQNҐ 6aNnC8M"bcۮf9kvAad! ^BpB;Ѯ+_8>0zJvv2bd6%%CN6Ƴh/QIb"gV}chF@*g88.!E;ǴE8㙉~h@fGh,I"7'll6Las#&5JA.^%)Q'f(-عk V Iƕdf׺@r!"#]F:1\,<QoIǩfsOTg;NwyOy@'>#< s٧N O2 Jя+K*&T 2zяECі&(= (90e0b =jKI&fɀM4'5dg@-1T`@DWq_F=sЧ,szU^`Q~[_ kXq4Ub7T#H@}n`Aq@-!57ҪO.HE-|\9v{ElJ;w-nbX@#G< x$)KcE?>pBIւsUF?ZUyB?LW~j-I+\5=s ݱH$5)|w&T-bT'.q*9U"0 q|;\%IBr*mX5,Cn?Λ^}ZC?c*x1sxxm,`71 ?+@nB b6$ƌA;hݧ1h3|AC?Sx \/xsFp湃3k\dYnځPUGVY[p> wĥưU2TpBL}Dհs[+8nu"55 o<_&@TF <cf8nuDŽ^E?pC:>8Lb 7sMޙӥ;Y]~!2,I8VR0 V-#J8є T#UCIɓ(S\ɲ˗0!za(TAP#LZ2@Td)ӧPJJ3}:t#*8#֢aEêhӪ]˶VD`\wi0h È+^,^qwkϦ@27NӨSd4 *e-.< [ n6ag}9fVLn8سO=bUiۨ\)_2`)*c0@]pxNP,$@b'Vhfv ($h(,0(4h8<@[KA7d+V)9IRVjUtevYN9RRm&y^NSfHmfSI饟. =")9(Aږ2F) ϧ!iO?,Ijzԩv^0N%?L+IJ)J$Bd0)Q-] ˚xz&0L F0IB4 >P+P=O{{ns=ŧ[(ݛILoAR o;ړOH4q&,9/{jO>t\1?Fj猱ԯ?S,}*Ҟrʹ@C>ms\oϯ\vnrnl DlٳO3sw*[5ڞTolqV;zO.lk;źK};ظrNYcˠ絲gÞr;{=.&%oҧ=ƙ};҄MlbJ?A;b/X"!EQ xARa1 NhƔM W1Z?'5Nݫ"0Ck^/9aHt}Tls6A e1ucVFqv󊨰^u|: n|}d*UyjU~ETSZb\"W֩5dj[V`UEr*QQռ|: ɀ   @`c!KR] f7 Ci>+@ SuzS8@j+ۈd $h ,iֿ鑸-c+ oˎt ;[v$ߕHxoZZ 򯼚p.WM\K]We{궻x# ͬy^6AiHL1"ԴQl af ؽAuA7\M*LGbK>7"ER5^@LȺ̀ab&'ص8$GӋcqʒk3_BUcd$@p2c,oaYTzۛ}IcZ{#nvp]gVɜk--gab5pH" @G@2 V@3f(2`sn PQ ֚t.#tcYVZkU15LϮvWBȆk]Y(_P Fw"^wn7fpaU۳N]ĶxiYŭ0te<"y'w^|X4a L\/sY~yL$1M}Y2޹ˋiWAq>#\i/r݂94y=s<"m7SŸsGdP/I vlw14cnݸjtEowk@ {p;[1uM*ylޞ__ثai o.Ve-  ܦtYOؔez֫ԮҼbX!BYX*oq 뎮N_>=Tm[{WW%f%`o^b[Va)wvqiuO%``pu'qHp6,'aSnWVUZ҇~Gfb)v}W~1t6Fl9fuG'tws07h"vdOdKfpXVeMu@Xe̗%$v&xd0x|{gQMf"fwx(g qOr~jhhRbVWk]fw%uiC;9 wwKvkFjrjRgx|'kYukk"gUyvȇ$mg{?nmT)xlfzXm8GUyr#Wxn,hDRQ}&3"ghHGp-S}e'wڷ!paH((#Gsexhct/n/7F7i~ %=Wqnt@h8s"yRu|%QtYe`v-XOO'׏h-Uafx 9#qtGxOpQQwh%VhV_Y"ȓهxחo2 fymY2QhѸոؗz藊QW'Z2{Y{Y))XX9jwd700)yɒrYUx%/IٍV_8j&kBs$ˆ~YXxDdv[I'JɊ HgTIk)QهS鐌w`d@0 Y#x[h-ͅ-$9dٜQ%vbɃ؛e%csPIN/ٟSȆV[yix*\^M ;9gHhjkb' vQv$aɇ~FyYhwhmءhz9x8>P{XG_khjW)ƤjȚҊs-(z\:ņb_勔iӈ~SԘzy|V|yUHpgGHgɢt9Jo-Dz~@ɉe9]ٞ"Ly"HvtNiAJZZ"V>'ّP.r,s)>MIy֊-Z T_6:EJ'rh9lW Q,Z' •[Zyh:cwozd[:"JN#uoɖڞesu !)٘z{ٲ (Jꌑ׌2ۧ!g!YwQG;Rk[Ij_S~)S7%[A Zi ,s ;:z/AHX}{lKOYsGqӪSw9[7z,d zU".zufnH C؅fG,Vud 2ZhېOjڙwxkBjkg{d[;ho+V:biMzxȉ(UjhJo zÆImzoꦭ{#̸VҨL>9+m: L/en1$l#č-;ga |]ڮN[U {iR(j1duz!rPQx^欹;⭩ʺۭ(t\rj@GϪg,6#\œ8 +$^<`\uéah*|D:%6l+:<버 6[8{̋/<L7۳) ̲ rGXK |MkX!ôiY(VzDL!kElTEeK[ p,k'i?5e:kŻai giIۀ `\<УsY<ѱV8Dƹ8k a; =~{uv A(t |ǘȈԺ[A+B= I=Ӻ*a[Sʬ9jф {\Mʙb{Ӹi֊>+}{78\ۿ [=h_Jazg#Y՝U0jYwPU̼ɖa"H<Ќ̓ڿ,,̵ ۾=92\+ǃ=ɠlHdϬJ{vx"/1މ-ƛ(bl3m!|k-_ ]5}!*:ȉ2ȹb| ݋=[kV^?J"ˍj %GT-lóm»-9L*ڊ*4lPHJHlOˍ㭙-Ս7Dԗľz 9N]!" ?"m.vX{|Yq\" ctVJMwn7Mlߎ~Y)rk`'jȿ!\xOClZ:<>!>@]}WnnQNދy+LY~".Rd,)R&Nl5 p,k#.ޭ ᱾gюp<野,I2>y̼N~C~]l_ >4?"O.Er">|*^滛~N..2퇬fR*&>.m V~XJ{ݞߞ;y }ύ">_]6+N'f}I&6O[𣏮"OtȪ$.]Rΐ-e"9_{>o )KO[ *[9N)j'B̟$R6^>)C$XA$dHpSC%F\8E5nC!vRI$Qdْ˄&ar )sJ7uԘM}~ rhQIu T)B>JjҨ,^]ZŬ_ ` 7v+˞M;Эĸ't0 \/!HtSJ][ļ"'ܐdc[ Rs\nd=z]ӑeL?ۤFtag Z oxp'_!uL{L7\H陫sW3n=<{Фۏ9dۭ3(jt?~ B3' ;P8ϟk: wTlC\Q8-6#o.sA:; rH&*,.#1K LlM܄097b:3=3;g=)C@;OuQHJl˿wTGܺtˬASKD G UH}u4U1. TrVg[M-\Q*GfMd XpOSp.\3JlX76}o\v3?x5vJ7S\ ǽ)Oh`U%6R!j6dԵ\ROw axy)e\edƘ%OYU\^>9T$eJ+$ U$Ty' Dk R34kOBh>;vyl2++NFhƘ=JZ%4` UV<~~6B"'/h nYoP_Z% |UkP[|o-O r{˕\e3zuc8GsaC>-4 wWgki~!_7 f1c=i_Ь$pBB\d+ei\ӖqlpBWzm,tRZM7~RAC/q J iķ-#VP *ėibX$aS@+1-vku)r7 cTjX| "=FW㨺7+qx<\l${=-b#HN6HYk .DP ҏU+-)Mf,Aŝ1$\Jc,)qq tFH+J#J HCu֫(\'N)PG|)&oBȶ({HC\(=$T")N#3ѢK4c*Y%htcR]ֵЃ|OqVĮ\fK7LИ&V̙empRBfuM#:IVrV6rdhdP޳j (jbm-Ib&GN mÔOCyŇΉb˫\m"0 pP$u) wS9vDvnx+b%,ļaa'+%nw[7[вW}.z \$ y .8dz/Es9ڤk#lҰzݪxě(1f^\_l/0:OMj5~&(l1Op4on`N.7aPWa[<9]q1f,1^vK9\wW:_ea)mq{ l)V!^$'cH|Ӝ)  }ly-UZ;~:A3y$eF9nyD4ff*`BkJc>0x)]Ȳ/]{-K{Ð4 `|Vΰ9%hIe$|%H[:Cmssw@#$Giv+p\CW'܎+x !,I7VQ8*\P 3jȱǏ CIɓiZ)KDA`-&TBϟ@ JTaZJxMM 9DѫXjZGr !+ȸ)ó۷pʵy4V9c{=x NK#pSVBeˆRҘӨSUL髵,Rӕ\he AӸsYX'`D^μУKNسkνËOӫ_Ͼ˟OMdǿPngHru"ti j=QIH!f2$!mPY yB&*Ds"Q'"}81_ь1ϊ͵ ɡH.giM*=n2c?\j)OOB\3T"CԳ'aG&)Bu#G}>'a?üQwr&S0Sf}Av g? Ϩ s=& eO> *j0*zlB&I<裎Гi,)An ox?m?['C8<@:߭Yh p&to3q>΋.F\^\"291b0Lo̱#?c. C oE(~O켤<3*)FCWmdt2l;Vc>St<-?nj =kG}_іZ8I6 )>޲Y&ǒ~&sǽ,}==-WM%<+ΩԨ yު]v<yĺy{_ üCAn;z/i'%ţ/.4ݸ_]Ѫ?LuwG<N c;W= aA2S`ղT;ESpY[1[s:X  Sr2eqeG?D85~M}oK0sZ$UE/J:>w~+Z 3• ʈ.L^ <|x*lJ(#Q P)юiP$4ܩG:* '92]ғ(;;BO޸eDn,嗧R9rЎ( 2&uSyS&>ACüN3-kr#6+Mo/%iivED:iwA<]cS'bMRG!5 Zy:ӟdh$MSAa MhAPS %AM:P^JK!G1h9@i@7E@N1p$Cif$VVf0m;6U*:K A̓&bHR:$RAw*[gG ]i*M*)QiCuBиն4Y) ˞pяW;K-6Btl+ ^^zXN@-.AV4dw[.|tňY򵶊i:"dtiZmh`UնE,q7[ء7ٮ06TQ]~_R-Vki;f2m].:- S`x}ˇ#,ĦӣbiB]Ldq0]\$oT9l\X 1=N;DŽzb_v=iBd0N @`U=sߌud}2W*`*5sV&5`+gٮx}s࿺WO2,@9V>'meˋFG2p,k@HB-W[|_?~kk x4B~]ZW7qe?7!n6 m.e]i" B V4J6<{ؤN^L2WM#FsWsvoNtLg9ioQ{i _x˶ e*O>i! (:"yB~hy"y.Jq?zW<3Oq+z5gG}=C/RT997pqeLk?J163VYQu.Ӊl,~y9*Dܐyw[4VאpO헿ӺmںHس5/tu ֹ<".lfvwn\V=QpS\%#漆|^+ v:%{;''sp_ozĉ(XnO#cAs5{+tE;f7?Vt%ŀ=&'3G&IFd u%eWuU~=eT@e_fHK%fg%]mfwsv]B^gnEзwhyu{~̷hzO~QT%ywYhkllij6-w!kVzF[@zSY|mwl}ao7zі{Gg&m]f gw Q|wk|Dhfn_ob艱vof}<聺}v=hUG`pvOwWqxe0br"7S6pǁGrs+qh2ǍAVCF&(*D@[Gtzt7h7u/XxJx~uuL;o?fM86cjh\!jv赊7x~sDՆ%iq{|Helgxycxzhi(.9}g_OGTX\{։PY\'?~}GHwn([8+Y~]~x_i9kow:XMyǘǔ(q#Ur䘁RIs\tss{فyR渍yRYfsdfe&(o.8\e"WlhUcgVwuwgHyWy|ؖ]Ya(o{顇g(5yk7i<>Aj8Y4jV>)AvXXFvwȎߦdY镀y z]Jsxy2nY}ɢwz]xii!(:( >hB׋p, 99I/ٌ!~-c9y<$(NWzYeڀg !Bڕ8 u5mJiʧkZJhXÏ6Řw'Hu9AY|J ;9WYmD9&"֢U(Wrʇ\"x= ZSiFj]<)I͚֡X٠K ćz lڇנlj~ɭ*|B|)扅٧"aNؒbISYG@j)Z\~4尽;ai"qu oq:Y:)yj{j){i%\-1K[35 ˚R0B9;:{e8b14X-`ZoιZjA(z]ڙo֝X>:n8뉣'ʑcfHnz=J mJ뚡j*6I۷'k$: lJXZJK(1VSKwfK^V[{:k7n;XoA'Y h_;DqAkE{mHqץ&r=+?ȫ۪h˲ s/k7+zѻ{Kfk'#kK뚨wx[G{ ` ٭vYUAZ)YQL،gL/͇e챻~ٻTDp HŤr)# l붴[Z s,6|ʮGCɪ, ̽,SmIE,O=Q-L4MoYZ\9Ve$&fxF Ԭw}z=:mܞ҅=uk#40zqkΛmYZ $qgUKܸ[jj˥'Xܹ=Km:YdfŒ ѳ\{K#̻D#ҁm +Ӽ D'Y>m}c_[KM]}| NaMWcgg] k ׯ oʹ,QX̡}|X+n][;]ݳ['|Ym#WΟᎍڔ+ޔ}KjFڈvHeh۲WۜУˉ=8n'h7U=jEn-yYKф]v} 8]Wcng=P=[8\<酑;J߄*>k@KBȪָLZqM+וΈ^J+=/=^r'MGW{ڂ+ϮNEI<%WQ!Xuh.k O䀎)v3z -T+^w{p.Ao{iƥ?=>Ҷ9'Oθ>.G/I+OSOKϗ W߬U?C[e:ɞf@=>׸Ƭ2 &_?j[l@z|񟎓Ns=,޸X/b^dNzo=96΢s~jYy%/JѮ9hg/o13Oo蝌?On൯oa/x_M$XAܴC%NXqaC -ncAEZ H)UexY>ӒZSR)F n& U 5ןՎexcj66PtS҈r!?iWrJ1@\Ɋ2xm :TX̸+bKu]A:uo$IݴM nQw ;%{m'_/ҢR`]ؿj|xK73B"P`r 礳N:$K& $ .%/LZ(c(k: Kƀ-%"ߋI +* G4<ʨ-ԾtEL2P#z*L<3ύs= A[\ACI3T !QJ!L;L?pDPOIR#U.bD>1cʪ՘•/:]}' ʋQKe$TK-::f۱cJvUP]]h4pŝ^|HtRu7$غϱM\5_k6̆4.c n>ˆ/blLE(SPӓL7f\TbaeKH^MV15ip JLWI)9%5+V=;7d͵0̿aM8X=|S;gC-̅KUiϏ=FtOG2)fD_+v۽{Y֦ Z^g3خ ec{le:[Wݝ5Jml|zr-37mTq]í ށ^[>kf)P%gCI"/Pgi8 eqtQWO6H.FcD^ gG)LB)ڕ*3C6M~"䜲%rme#"dI;"ǚ5pVR).ebm~pK#@xCIqc\g!ȍ1] %!HEry I0Rl%1@r3'JJs4e~GJ)^yt`Ex=WLlvaE L[ 7o{Yl>zvMp'LP&}^akRHWvLUl`)f螸T|Ì1 i:Ͼ4 nV2hyCFl,;ذu0* Mx3Mg!,I7VkRa@Zժ%k#JH@<բXCIɓ(S\ɲ˗0RPԂ2 B!0f$Z)X0<ɴӧPJu *OZ@$!MϘ Q$!3 N]˶۷p#VZɃO{<gy n@z>Z2 @UE(Vhfv ($h(,0(4h80&!8JB>eIF$~OyRME! YɝRO\beđD_dfcF ӛY$(کgR  噛Dj)cCOD:)iLlڒ(*QkDRhH8!Q0DO=u*CQ.*E[F 0&E ѭ/!{.yNd^>=3 >j&.0DsO d=jڰ? ? 3lO>Ó&3ȓ&D\ glRHSp;FO>R1F3KNBco+D p '>#oJO;i:vggj;<0;2,;?fg r?-4;LLu(W&LMO8j<~SOX+?\lȓ5F DxC:I3,8Qj|ij{ɛ0pˬ;ʫ̮:iCi͟Î몛m]>j;^$9.kT6F55,R dU=i}*r%;1K=j^1zZGBUyOT0H@X 0`ȷ70bPB-܃}R7C:]η[({\yҳRn>m?7}ݧOWZv_CWԓ~Rߘn1hkHm}s{oUYU3DyckǑk\l0Yn[ b٭gFTϭu3Y7D-]~W:sG. yRpc ]+d$ex7q)wҒjbZ;Fq,{M#IbXfgVEFv_cׂ dl9y7xbWMYW\f.dx-dWTW9x_qbe(n+wRY3B|^HAǗ{Pq ;&yggysp8 N{7mHwz6TՈhiV((HhRX%&rkG=uT@||}MkZRK_*l%llIOKh[5~fX~ˇ@Wsg{2qV"H(7e}Hnsr8VȊ'I" XEs(qؗ/_(p6n,hCkU&qErH87:7;%ʨa׎N7q0h"Dws9sd!9kZ%Ԉ Ix!u!v:O5cH `ZǏ^i[v]w-iYAY_gh*FȆ a&;$xZzx wyȇlIߢZcDoًFUX~{iNEYz{n9ggz {G"jfSgekLg(Xe@a5}}oZ}W֙?hy^Y w!=FR8hy}`H@P чV9wl5ϹBp ɎYch:#0Q8Y '*/ݕbF '#c\T*FGwIvbxȡ>Y_ !\xhYO֛I9W٢)ojP#xoBryo*9_fx"ɘVJRmUw5Ql QijkzNJ'"k\e#:eԧ*}gyMʚI|mUI7 9 Ԗj*c9.~)wı1ZuRʗ%Z'7,޹*opʟ:wt xt\"ɋUf'J&]aNJ+홧]ꬼjo/&q;vqiޚ"5 Ժt$պ <)G)$Z9vo'Gf-+JuTb5:f}ʩM͹ӱ/9;DJġ]֖%P Rfj&<]jjM"_:ꙏY5hdʵ z)&V;{ g;JOEQϊI˨z_9Z*4~wkr$8y_!" ˯Q͹ ($ȬVxj9ڠݺXm{r 쉻'ʠëu?Kz>_̪t& !\ۻ=:ݖv+Rl;-˺پ{_7c9!oMB'X욡XZc{!b +K W{gRpUkh/§(Zr TtK(~⶷~;7V_θ蹪ѩ "KN ŢMLEKyؾXl^NTk>`t`{\4l{&Ҭ}b-=ٿڈ:7lPöit+*^N?(c-{ކvr!^m0^wތ /.Qu Ε5 5o^"eIֳ)Q!zqnuqo*__> Zhg˼!O9E*֑xv >k\L[ yjgMbDO9?¥vq6#XA .dp`C%NXB!>ѣČ9~$qdI)!N0`P@ @̈!nyrOH К fT?F P%EK NLⲣ3MO/ uT6ըSR/4Xu^-KY'"PkEuLM XzWb"dw5fm;B&-KZ(h"@d4R٬PQ-,ˀ@kjKǍ[3 zjkMv=7ףʂllM@Kσފ3붤{1uSOI(>K[eN;6M-MT R(=;c=`%0:(1TvU/pe'H=„N("q†- ]4JӞACjU x̑FA<;&Unn רiެKެ#vr "s-M 0ZVt* 24=9vqClBaBTQFJ7}luoV5uxZ"eOi}wQ헟$'?UH$zjFfjҢ4t|?Aͬp%e) ^W]G` H+_l .ֺ)`BK3tIdh;F810!\9dwP%&6C**cl]^3݆jD Π#Y`i"ц7%>kdg"e=@xOjhéu~5k^Ahc菵r&2J MշYmrwL;ˠm$Yd>qj"on4_dXt7 Yr&54BH0u.i:ikZ,w. 1N4_5bz|:MM(zZu{zG( Νq B.9 M9 JTEQC*ϣ0I1YK4U-ݕ yk8J(MgBhDLbEE^Wعԅ,W?ŐSNKۡ 0@)4)VY\/ qЛPQDu4Jw֓%S4.k_96Jg3iM񩌭&3H2'Zl&Vv\{xI˯ɬ:VWRB{NFͺPH"rJӪ]"mեKH0\it\m{kfu\[yiv}x2;-ޑfRTuzhUSxn@ Zk o祔|=n5JQDA cˉ3 uq؝5pʦi=uaQE¤Zv] NtU*F. P38wk Q,QNscE\_q1P^nVdyl[q"'=~ҳJmMZEϘqO$')M~2hJTqsYo6;ohlmBJ̵;[*Ӝ+gr {9͢hE6vIa]I2vin5gFDN +?O^?oFaooOdIYi v?u1Np_AWMkQw8[C{lRཧ$+N*QV5tΪtf3N1_f_E6ۊ  WqU ^Jc:A,8%iLLKID>~Ehэ B͐64Z@]xQDX ."klq ;k]kg-=z1)dܴ#؋Yܥ.Ax큟YY{oSulv'r߿gN`^׷S `~dz%ng+/`Q~u:&_ߟ?S ӿ ÿ @&є k1L@0Z@Q^j>& 2&{xt6Ĉ  A6AshZ AA%L$BڀxH@OC)@  "l 1| 2l=$AK&@+7 g B 4,4D#CCC`Êr+B@L( ,<h hr V0 AxC0 "h9Hŋ@ -@ Ɠ(S\ɲ˗0cʜI&FPhɤ*R& N26 9T20xJXjʵWnve?'&ZWtpdx˷ŰY EM֒`L.  0 @ x˹Ϡ6x N YYcZ$'Z2#Pk'^mk)4 k7qf.oK1VS@5 JKVXY1Ox ~ԊLŁa,|VhJp!Ha,jBRĠ<_,:,fh8<@)DiH&L6PF)TViXf\v`fo\8eՙY!Vpz&|uwXٞ |$h_vw(w*Ӣ{5IKep,uէdjWjhfiO?PN?+FZOl",jR?XĬR[,EISEV4LQ{Яyw ӸnE^4J -J&0+\Mԯkp.ZEҩ.D,3=l= < O=ð)O>$l*GV4.){>sP?NԉtO><ÀMQ>ub}нl]v= O; +Onk< 3>R3???;6,̸A8|コ,c5E?9;[c:x+3w֬>&>b=\?&N/7kβãkΝB֬ 0bAmT0w#Oטh֩rS#, GÒЧ?ҋi+7&-bf:lX Yhb :$x$7( wkUn׋ żlYR$1bbEXqLVW񊜋'>`=CDe!U3dD`L~{M\m ٰ@+YSpaDszp:d Wb=͍҃nꨑKkc˽cPG\=r,4 ^/uYp'k-U5}r YHCF}lj- [RCL}c[cކ*<`/l/(i|+M&UUGu X*Mʙɬ,AWd 5U3U]фWu&w_T 6&aK-%cBM%eپz06΂}hUԺ*1-W`(Vpzm׮Bkq[\7)rCu\<w*.Eb%=w "5H LCQ/K @]V?饑}؞֔JA"P`!uK.'jVPUB B` D"+6* y!21H#KFF~a1q4˔v.'9&2-e#d.p yl't˫10h\䊔|^2\ O/uo{9DPvp4D%9zɰiRC3>/S2^#!?.qz#k ,i:m`HaJBHVbY.00Cڬl# D6w/]]&NkUqM{PѶކ[wf197dtfF^o8l{׾Qa:w酰E/e3"&rK7WAZ3;!Ϭ&7.vvлr>gihw_IvwkwiRYT<^5{xxv(FFhx{5\!V e~OzؐV_H{Q Xe^tԨ8X~ƙ'fI-؎ɘ~w@F~vH '^WT_0ĈgYgUi~.ebၶXHrjIht(Y5w)Xۙo1yq>wsEb:V/9g0Aۅ(1 {߉ـ C9eٜ ]jj^_t+b#ǐ21c]ѡ_t((xZ*i9$ڠ3.3ʝ&ssxz= )auews(h~P9yϙtwLZٞ™5`(V]JY"6`d{*F$꧙t5ŧQLW)~:]SRpZzpWY#{IH9V㉟F&#ǦazI7eY5ʑXHJ;:f0(G2Bɠ4)V/2⥭;עʚ]3٬Nj[ꥶʅ jevjZ)vyŇ*&kxz= hDq*?I2a ˣ+Z? cE:Y#4|+ث8jSthya(KZq6!8K6yfZh >Ko7('V|ɚ} )z˕YX!":cʵ,q`\t;✯`7XEw$˫X{+6im$檫*ҚJϺʭG؟X׸ ٮngxw*+v&n:D񦪽,+Yۺ**zڱ:겢jZaʫk.k>@Jz*GZy|[Q* g#+3Vs,!gHkJ~+HZkj̩_{.^%jYސ@a)΃.qmꫭyJegN,m-(Kqld;AG q?1pxa)$*Ij>4%~unl~Գ. &럮[ԅ\m_>OY&F ^ڞ_ddI;SöM|Ύ}t kU<lmn[<L`I_npN oy@ }Wz቎١ $pA °@C@@j$LR{fTaŎ鏨@ Ӗ" hȠSn]VڪX0/VYīG:\8`}jV,2aYϦMrW_Z!\ 8FHÐ=PB""1#zQN룱P|r+Fdht =1 slpAQ'nQm)ӄ0 M9"T >ЀtBRQ@1"3\dNp,VTs2blO,!lԪҾNn\\s+M﷌wv=HR`-ub_CvЖ%FK3U䃷E8c'w$}SwQE/guAVN ]7=qZMHlbDLTQpQ{6:M&SM4QM) ps4<,đ;qWתqDf!yn';k0_d vK>x"2E}4~p!8y̿? LvS9! I)Iw0XD:2ALv0 hC. Hf<|a|#1F>CB*h`u#a)X5Aj3ZEnE ;H!]?T(W:iQcOH>fi[ۙI?r0I"_e9E j$HG$38-j{HNd P4nRlQl3Ϥ\IdM8X0.Y2$Ң+ȼaSK FT+2A2D9Tcc8%)J3]FqB_8yrj@lc(+_@-i6qS a&'"'cࡦBrO!C+?ZesC{ψ mH)N>t2fBWJ!Lt%҃>YD^Gu*Q:P?3pFHD9eNQFtSYH0ysof&I>ҭkR+Y8WnpkmŽ}*X,eԧV2e]QXMtBd-ab]N4o5Lb,sJf0}%rCύ&g4 Cբ*_i^)Ԥ KQga)C/(Yۗݗ-'O }U)[`&^*2upq:^enK*>L`!Ejh=+#jo _ƯpZWHaDd|"\%&OEk`e]yJY#aOiɱC%&CJ9|6xME[ZdzM.g;/ -޳FrHPI,^vU|~zZQ> Mkۮ36WF$R#eV .,E]l~l¿%-IRG]ORٞ6/& vEMƈ}]նRug՝᳣ܸg7Puy.%f>R!5BHaF,JǏgCyɽr-9'T0~( m:qBt0Q@Zzi#]e0Z@A ;WC1=압z|ͩTsDPd^dvԍN@^X_l&:4~{t(Hq{I4Wg;@0 k99-<[ !,I7V9O@-ki@@)#J8T!))Iɓ(S\ɲ˗0cF^i% L4IUɴӧPJuZIR& +e`?'&]˶۷^.Ŕ"d/7e]̸ab=DW&z0}3ꔘj :d ȨS^R.VVTMC!L̺ߐ]%+mJpFУҒuu(#&`:Yf2>0B+SJ_>% ãIȧ +Rtހh& 6F(Vhfv ($h(,8&)0b6D#; XRɒ@HFRؤJK&I`=)(Q)%{ZJ%_э QId:Ǧ?j2Hoۛs*Duɟ;BcOdh?5П}ƴg=i`?H6 LBI.T*h*iҨi-+JѬRZ"-ث;ƣ>@;Nn2= Q:䃭 nr+;ѹ2 @z;LL09(<QBN>S0B.o\OȆ= ﺪ0no;Ҏl*6*(< O'A 3/]ҟ2HiǐxȮ ?)3BN?s=Muۓc'j?/Ǽm.̖q Qb.,e Y$QlF1Rj*k3c7@EHmokIVJfJḊA큌\j2d-q*v"2qO\ew]fS]eҤ!-" y%]3T%Inikvoo(.ɺ iX`zIYS@~4TAu-ZN,'ªX*,^P_4~4;eX7<]$!jke-g){pqt\'¾-p<6.Y!{np'-7V3\Ւ 4i&КAg Yl|ϴn{𔿦b@WcHKh_0YYpLZk0tZBK$yn#<Y>^`dxjű:t5[kWnuV!Dݷk̚f*m=^҂VIj]#!uݽ3MetnvpzxsY^t ~X\c=4;r9yHnr/UzoÙDs8/PY͓%8z"8_V/%7Ín{nqQjo~˘|8շ}mv`xؓN4_/i"[~"2ݗj#\?>3/<޵f/I7d[9QC#g4̣t6wi/l37xy6@0w̧4q]wZUF#ru\[,rDPCdggVp`~q6\v#ihGWvp&Spi{f(oX7  剋tkYmu\|Sa$\bxy)HX]WQ(}7ȋu'svb(hr N*i1((08@0$B)NwA8P҄&z(V|8Ux 8%68sփxGh ~hU'wwr,pqHT5HdÈm+&9x`Ԙlx\(y2|4 YnZzWf}%iؖpvxh"d46稁Ł鸕$#eg(1yYtT֏){&#"AN _ ֐XZh_gaNxkm(p('q6I]专YYmcP)>iQLXEY UIꙊ y9`9zވx UXi+p)rIxeXs—(ThAب,%旁%Y&^Gع+8:M~4N!)9Q Ii]x(g:JoX9B f E+-ɝ [][_ :m:I<ɝU 5^ZOh L`ٔA&)cU`П$w 9h^Ĩy<Ʃ*AF%%Jgw"HG6_Ip.H\I~7JS ىCɚcIIDڸEʖbʛVj{r*GDf-cegꟵHyzɹ9Y9tIɞդyjinڭ\6, zSjJ/1+ t5  w;kwZyqz;ꫫS2U9zT)(>:@<ʵJH:#۲ rY}Y" n:83F _{˕ rp|J۝2rj%ihkLY9kʱq!k*|,˷.{@ 8aٳw)K껥ʻ*HEdud@ [*"ৃA%'IZUQe*"tq}Eyqx2|6'{ 0, "DߧIHNj"\ }v (|y#Q ugz}ZM!Bsjky$+0!ȻIv) ˜F: j0+4 U,jX5f¼ ,VKJ{Č`+W|Ǻྕ~iƆ^K+ǹ}e^ ,lɣ~JE#sPkR9Ȗe ; tkU2ióʎq˸,|x]߻KZf|d|VLTlӼxX߼Z, lL[v̘vuǏU{~Lɥ]cfol i5W&AK cӑ,"~1y燋$B|]}pTJ%hZL2a-+3 NINn|J7lNZnʽݿYYc6&~*O6Q}cYLl2ݎQo/הn^º];G®G-.L( ~I9 qK'-Z .=oo?J =!mo)}!+O.l PHlgQAM6'|tǜ&]ps/+TQE_V{PO&y%X8@^/D(S䘳`! 2X(p /̐[[pDQ<kB6 ˽X4żJT0sD6T4HwT>{;qɂ 3+4F qlR=/D-ϛnAګz43S(!슜Ϻք39 J-L C=t6GA2-RJ}BR&], !,I7V)@Z=@ Z #JHb--%Jx1Ɗ CIɓ(S\ɲ˗䜂U*I>S ̄^i% PD\ʴӧP> (bJٳhR֒`VD`VÈ'j͓XBrBSNzeGD͜=+Miq XY_&ak}ߥN5?i;!sKqs0Oj(Fjd? r $= 0'>w;mDj-0spG3jK7v` whôφѲf-=A,kjR6b;Hs-ca_ԝ.R~|cs:pD~:~y>99u9 ͛pnR?dl1+ZowD?wl;΢ڧ1j`k^10I ^{?zm{!K;ؑntN"?#`aE(jPCMA0 _⑐zn˜1PZ1à Jg"bH쑐t$03pK!Eˍ]{g3-֐T= 8)MThi1aKu7\B"2aE-_dѯ~r>ը} `Ѫ>!acr/vm\>:]&_(G)Ird^.[tUv͘G*IlD%##)P7D`†I%$$rd`r:4dpǑZלD?Y rɡ(I챏zt%3H$ϓꧠHR=G#ՒF{STTA-5 HӐtL+eRndMi7yL1jֈԦ2URԪZDPuTwzU4SB՟U:%I˄ִiEj+XZ%U1Y\tWզcek_JWu0р`er$ebؒGERPPֲi#dYVv$haf5 TJT{.6!QEZ@.tkh$Qp0\Ըo;\פ*YnD] X׹ͮV[0Ectkv UyYr[]coR\|W 2 vRQ S2Ӿ7oY*Zl6_5U,#j`zbu&nqTR<5 VPRWW縰^:+[$~a.$2H{6z-Kib\*rHPe'ˀk{3W"!3]wI\c8ONx~͐r*g+Iv hD4(Cls/4̉ݒ`.-z|^tD\'+y^u][@&aFy h7;g{m.[ּ4s}pf?TWdYwwԠ-*XpNlSZ^/>'džnmx">>;fѓد|Be8 Ok[J'uaʧ=.q۟Ogcԯ>skϺ}8I?ؙ''M>?^N4p)gwwV{%wqNrx‡wpfy!*8Kqsb wyXq xw%C#7qvWg*g Sp*Tgzk怍26zeVsns($*{zU~FkQX}օٗ~}dVwS~}l؆৆fxi8Wk7n''eon\KDŽkW1d'Sxxayy"i}GzH+h/rÇqXBr<mH'G)H&W8zℴ:AxBy48IHF؊<884%@g{҈{ŇkZ(P$M1thjlxuǎivHhal8x8}F7d6 ah'A+㐬W՘rHKXoDxl(b 8xrh$ȂGA(5 iV3q-&^OXc9I)|U&Tc>H{26Hy)N`E(UiNe d_֕ZǏS'g&wI'χiׇCag9ݨ|W٘nNj84QyS)nGZĉVـșyM곒n,ȍy2˘4UىxK\VǚӂÌLɖy-b|fI㨛NؐJ|ɁIvi~uIbz9ڏuXjdy/97H|)f` 7)z:aީٞvA)@Δ/,yK:qB893=ɉbTG;zXÈ[9v8-JORx`JJ9Cn%_I*~* jy k>:irspuZuɇy u{ڎwc}mZ*ck zm|ny1ٙ8LQI[ g#j!J˩y(A٪yTlX8(WoÊB8'*~q3%'1Znƫ Hx馓*P:W~(jC v:a@NzeaE`a` z!U{Тw  !K&"/{+%. ɺ '" ptfbi@^@гGQ _U2\1s ZX!QyU`? )i!k˶#ۮ R;i|"{˷^ hnRK&5['FA+P@pKJ';p+[+kc / ŭݚZ[|gZ6e]m6uyO׶g+eGt4{Q[緅kT۰ʽWGhThyt \렛u_P(4^8n֝&s<~-#e߄&K+GMޕl$vh谋身Wb9..sF]ӛnLn^n^gG.]7]p7ma>ԶN!&N٭njN53kjXs.uޒ#qz^a^O9P.?e[ FOo)!~͎."M'A)E;^־Xhw(%>@]?TP S_%e/_>G{TO?mOd/ovbnRlRy>V4|6lg:6͇[]؃l /phx5}o(Oڎ_>/+?K(OROU2Xe!@b|t.]@(0O QK A$dC%NXE2lрM 0cō9~ȁ%OΤYM:p41HŌh2'Ý.}})ˣQN*Gx2(ԪnʺeQeELt1Lqr}x['Trݓ~-0_\ٲúm^F9fΡESt7Ofzfj/î)!,I7Vժ%kZ)Z #JHq"*1w1#CIɓ(S\ɲ˗0ւB`B9`@&?ZСE}*]ʴӧPƦW(W zٳhӪ((6VuI )Ɂ0o LaUԂ_,Uk;0V9}+_n|ϠMrc\ y]s Mmg Z+6ie 2IP#fLXəُIjΚ&)Q?PfIgbYSJfDgKRf8 JHrFDgETh}ָH8iB~Jߨ)e)I: h**E&sf?03sϫ Ov)h(";>H$-<&裏:#O &ɢ&Tm; ?nz .HK09lO=:'&:̠F³0ñ?ofc,gԲs2SΙL#MvB#Y#u?*?CÛgV Y^wsYh‡eɤȞ ގC&Jgc};bC3cu$N,ߏi^y[7n';ww{|4|'O=Ryq?i~vށ=q(y#'K q"R@o>q;x%<Zd'(%$]F #Bxa᭘%/˫D8'%j+"IJ t,⇆X7-xb1/~( B}8lp\zCx(XE+!T[h ^./QP>.o\ĬPQq={20 (6*-l.R Df5c.E>)&I>qRi07ao64Ғ9o"si'r$=]b{EgKςB@YBЃ: J QH? ]IC+꓋'*(GaQ4%"#4IQҗtMR$5)Jz$#D4`axAEy+0թ@*K5( T !XeLg-ī`}jI QjBGkkBzTT;F> @C4X v~5S2G b'ò@,d#;TCȱfZUF% vbY;ؖ( 5[;˒7½5TmK:1*tQKe xWwizWeyw-;_FuZk6$CVUc%oC"?x$ ^0~[떬+J8WRE%l7K`jT*Y[ˮ8-gA+ϸ":c=|NȞ1c`m8%֎%n!j\#Srt._X$.( `j\h}7,<|N'ztЄsDym {2XD~~sd6vɳsU:~qe_ZFᖭ;$igPMiW;b\r{Ssi9؎fn-|{n>7zxpj\n!m߃pۓޔ(-q[T^7K\oa889j,sc\6fomnQX;x-cwI}kFQ.zlg;_^tG|W?Otow]Jo:bxSw_E]e@:lmm~q|7}ɉ7y|f_ۿ??'$'wgR8zTv|&Qy6~,rOqrreGkUzw՗׷u灇u{b Xx}'}B{ȂP'|CAWt2m$|Vr&h}}GuV|fz ]i_'v+ ~N^h>Nghi$kHhmOo8ie^q%sUwoy{-؅tĵ~#z*A8~_$}uȈvjH({0B{1~{9؉]uu'u^(mT(|vwxqLhS~WvQ" 9wbx׋HxH{(lH8{wwژq؎%HK7XXWGusH۴HS8W|Il46}HG|_L'X9[hSzȐ 萗7ȑ1yʨy6)\[8,{QiIMKiHSSQ WYTYvO)U6_ L~X|hnǓ'1efؐLjuKH/^ XWj9SWc k W8$P|!xuYwyuvɌ}(HWȁm燯irgii ՕwF68)Pi|i˩)2(FIyHI%rm"՝)F8IRY%фڹ)8%LƉ 3~Iփy@Xfy:칠)ib+qkƅٞT*TM_'aiw-+ʔ/:p):`3Z"ʟ7jSre0 bJNho5R5v=J&bHH)W@`ub_&1DjWt#[]#)X9x!k::y N6X  'C*9_NZ<~ʃ #\udJvZXjy%:fgS@p(:YCQzws?oL SiS㊆ẛʆz皛@]R@I{3Mf$$4Ny%V 49kӄ" kK>{PAW P)y)u*kI,k[N!AWC[g&:7<%ZH&grxtȶz趴`گ8׉՘^Lk-( {V tM+# g}[=K+*۴E:T{% 2<j6Z8[|tP*ފ.:0 2*HfOHPA{wHk* sTj_&YqՏV KsZy˸Bc ,e: éuZ<5jŪ(сKїiw)ґB~[ Mcl+~ɂUgVJMZʴ\ҪˮZ L%KU~@`,֫|۵ݛݶ - S}M͢ѻRB"AK|ǥвY~0Է M ;-!K݂uݽiT-!}^-]=̌ـM Ѭ<!UɏT]^M=-޽KN&UWNRY·[N_M~Okm2.8"qI!m֍g ۤލvO 睰JB( YM#퍄ߝ,-`ΔpZ5n~%*.ʪ!'#>un1h$/~19#?9;ά{ڽzWk#wm # x5'•n^B#GZ]LROP_-oWY PO?d2n!,I7V@* DȰÇkja@XjRQJ- CIɓ(S\ɲ˗iPEL>¬EF,W ğe`*]ʴӧP:aUV2^UL'-kXhӪ]˶mC H3\0daX_Lߌ:%fċ?VjJѢĨCMՏxZ,LbFD(ͻoħ*p@CLnNXePrS )X4FFLO˟o2 (Ah߹.rP?g00nF(Vhfv ($h(,0(4h8 TS=H؏N"M)d[H2dM.jEԔ'Z TJK\KavԘ-9",i&Slfq40ՙҝxIv8IϢ-ڏCD ;DiC 6j>$iI"*ChB="hQSiCje$O:ԫsjbZʪ6Ь#}j*>tlCѾDl߮-IF[.C֢'n2%n>& D>㱺.f0ks0D乬P?@OC갛+ O=&oO>~9>#\H2L{qݕPO<R󲔆됰: }7H#O;r3Ч|o˟ cϰ>/?{!Ncun+'>e]C=vVQ yC <6 aW\,s0|` [F}$=_M =4c 8Ya*pCa Fr+ S$?#G@AP -" z$JTRF/ڔ>$C@Qm4K'-iR*&TP.]SL_JӚht©Mw !$OT!EQT.zjO_"UUu,ՔpE_Ij"5[:SZʽ"HgU&ZI §:5$B$j}.lgNx[F`R7slCY$-.xwRMk+>D7H";pWDQie>fn:6Ezӷ\!nbqQyΕ{w>wzz[s:KUOM>etz뗟OYC!ʿxzA7?D~Tцc{Wbm6%XmHm؀ǀ(vU~!}7vi7sC}_wꇂy+%tlp,(7F}7qZ"Gi=G{2y灹W}@w_4|X&|rS/|g'}TXiϗ|(s%ug8H:h~]u}`7`~Iu5fr8 kw7w~hSXn(w؀iXwshxxXFax!yyORth^1 zyq=hh;pHzzngCjizJjҙVUh퉜y I9Jiyxɉ鉨y#:UYw'Z/)*%*1:+Z#4yv7 ס >ږIi _թH:'a >(5Q:Ii⹟ wrdz|ɓniVb:ɐ jtm:ZQ:OzuM*etX:;IxWBڦ9!٢w+i%ŪJ( Y a'ڣkj a'ƜZZy ׹ ٬RZ{oڄqIꉭGڥ4bq~.^^} MӨG>X^| i<ь^Ʉߗ䢽Y1I+K/k,*4 6,)F3579;u~mĽE^OO܏NUhR>߄ &Z^b`.J8Rv=mYmsl,VN]7n"?qڜ0Q#"Tr>"* U-Xt 1 bs&9*; !>tPl(oI}Kɞex??) KV?rY [@5M!V&j)^FLeG_!i{x1!s8R+sT&T7_y!Tv,SBAhe/oJ1L!Q/}[/Z/!b/@E*( (&B*!,I7VQGrNPV#>@ xC0š?BPɓ(S\ɲ˗0cʜI&-YB1 c& N2TPE Z4鱦իXjʵʆJxE4(⏖J٪^˷ߓ kQlPd5PdܔA@"˹Ϡ6U`G`cBr")N8YCQ P/Eq64B#رSfat WnD%ճ_>oC9cֺy''Z,B+SN R\%.5tCH,Am$C`(,0(4h8<@)DiH&L6PF) f&TfY*a0r`(i ylɞ&)Yx雞砞 Cn衋hpLZ?gO>VUi>@j*Ij)DjAzR?2:0I ܦ+'&+ZҰ)O$mK8kIlWvgh׶k:㎗.A 3>N;=ī+:ę/ȣp*lJ\?'ÍL,h;0AA4*B+ >c><Ï?o8 4`|4bS&أ (Q3AWgXzhb7iϪ;ϰ Qjdٚ:9AǮ:B %ʣ&](O<-iAH:葺ms=mB;JzճuI 2_+`$$%D%Q~t\5J [TÚĤ@0[Y>7ͩdZ+Tg ׸*ծt j!li[ymR*1nv̚uYʕn#&e ]%qH.x$*b^ 5Q(vO )UҖRF5iEZ־1}-tF"ض ngդ>WNծV vPdun,M 6nJ 7(&j;w_QAo fR-E3:L~tx#m)h|WK'g_n3KMeNg£riA#Ӿ{i=⺺S=3୊X xC TdO\jr MmQޞ4MnH돿}%liHfQ2lbɗv-m~^H{wpuId9F á܇huWk9"Z巛jB%Moj7܍67m,61s~t=>믫izk5:wgLJ uz"S<"U8Ƚ~,jGﺲkf3=_-G ꓜfwEA{v/<1"<⁣x{HlMew\pri[VcݞQo׍.Kj|U`g9rݲ:#rw{Z{ŧ S}pJ߻J?L|+^{uV/8{ްgA?kamGw!w5w,7&umȧzErVW}}&؁ } "8\QxByX"*6k\iX~z~7\e~3(IU2({Fk7H9wl{q/(|MHuY|w\hb(XWqhXjD㥂Ad6dW(|W|w@3|%hŃׄ(A؅G8bJr&ga|+2uՈV(VXȉnX}pxц؊-񊰸HOrn-q㒁PH~@Y58u4eSezQlfaV(z(g#'Uȍh'eufHy&@}xfh}\#tXWv腓&zKŌHew%γkh{t؀#Ȏ _eh'y8Q6Y*$ZIs,1Ë$^HtO z9e=XZW)7Hȑ%<$^a ’hŖg Ő%)~1ɇ?ٓ5ٗ9lXihFysEXu\N#1x`FaTI_Q&ie W8$iE-b+ۈ _))%94wY(紜8 O#SYLa'љYIb-fXTiTYfٛyY-496ɠ34:e 8VPvyW7y(:ږ*p7:9ڑ  hTDZMyߔJZzOZN#ՙZYm9w)&ȸzu!jI-z?^ L/n2ٕusʣA*ؤȤQ:cMyA.U :x!?X%Eu@.z`+n"K=3E!Y0és rj:+詹`'ʪrЙ7(EJ'׊jY@6)*jȹX!,I7Vkja@XPX#J(@s€Z(Iɓ(S\ɲ˗0cEF,W%,]d>LAQӧPJJU*33XWBACnT]˶۷p)~ Gr8[KV3kÈ3%bYcW,&ϠOb$V:"T8oMm MTc "_qȓGX4F'3mOËO9!V, ւϿ(h& 6F(Vhfv !)mb!((b("-XҌH4H2ӏJг&AIzhR?R$}n* ՚%:ߛh #ycA%\ѠJy(%V%"yJj.?z*IB:ϋ裏:O>@*/"ϲ##Mkb?|JR?  s=D]όRTF[.K/H.lZoapg?0z;" =*O>(ӏ?Zo>KdnRs0?Y7ƻCLLw"|CM?&&Cð}&3:>]d'D:[,?d#?CyDk^Uk9n;>ͩ,s_ <.g{|?_';x 9E(jg/V<[jbs6jnߥFG7A܋h7f- _Ȫ> O{ t:-r$FͩX^lh<=!B}$Ro!!2{\kP! "Q}ck&G?P%G R+ @(6|װRrS4Q(8J_rg$;5,bV2%}a!n$,74?1o)gԉN5]Flgi3<\P>),zvӟt=+π *І:C =PDږȢ FьJ,bG)ut<>UR@/miLbZ#ʔ*c2ρjVB*7.uMRHWRe29`">$@hmP2`Lx: 3"]MjUM I^P=CW +U/Wn X,~ !"ݔRK֩@*LfV{cgi$ Q];4 *INV0Yy{ӗд?ǥZsI EwuMZf7խ Zw)OϋԸەxv[ף̭ixWQ m'Gd5keK$u6$GV!{% &_xA6ɉ]\%VΊdپ"鬉>8A`-ɏ#>=ϐd,jkn7_XbSɅ0jɫ %Z˟-l[Y?wD|$%9iO Pv8,I bB3zCeyt>LV5"V`%eV8͡JI'kHWXOm--g#8ɸC\T<dG+]{¾Ffwݓu$e1a,dlPjl UY_vlq"Vh}4[(|O=t@eI^h~M{@~*`P9/,W rk޳1C>NN9\<>}t{Ǽ>Nic\"`V.=st_ԾK?qw;z-9W̪vSc';Kɣ|җ;>k^_{ʭ~.[QyxźR׺.smإlߓa6g@o>bڃ={'$쇘su˿2Wx0HM] h  Og*hb7w|qz}7p7"zrvxzz/7{1j gy& W:gk9;ȁ={D|F|QQcW~3hxG}P.E'm'sfwmGz88%xnrwx.gx to}+|F68+zx~wh{V_W|I~ȈCTq%}qJv0(Liwko07jGcW脆slj-x𷉺؉Zׄe||Hc$g}6nW|?mtՆ lHes؂ȁuvhfqՇ׈v"qLJXi xf X׎^hnr<H$ܨ,Ŋz8cmeq((up8:< wYxe&HH/o]w'yiaхAxwevy^8g'aUP IY{vvxz{}חuGgYw9lI HckEYQiTjWU!x&閞AɅ d8sI]rII}>ɕM6h((9 H9gD[x%baՆHyX|mYu)uM|iטoy )}Ix   ayO8ϙ 9qYʑɑ5haiw4Sx[2VQ#G}IY!ٜPWXE8:xd`YBG|z vºZ󶧅}u  gZQ}ʀ p&!xM*dگ *Praa:?KJlZًZ:W๣czMɱغHsUt/0I&=ZՊv+[RJZ`*Dڞqy jyxX+e庮.E7%kFapp +%JszڰҊ B{Kdw [+om@{%K9[7b𨅑K6vvG3t+k1{Z֩udh&V1CGU\Ҵf ݊˟WkƼahm ]mKG˽n{suu+ɥ+ 뷼ˡQ|{YIۿ.ˋkẹ۹AH  ̸1QܻDڳ+kuZ*L'Kkx;t ;o[?=ܟCwGw;^K 1r!\&:+ڷb e";8|n I\oYL9*ھɁ1[Y'sIjj`*ondU@s|lNN6v7Y`gQJ~⏵ۤQnJ79~刾%%1>T7h^gk.L\[qڔ.1.T޵p!,A?V=@ c`J-0 C3jܨQ BHI8\ɲ˗0cʜI͛8s"Le2@SN9`@$YXujʵׯ`ê?Zsb"^_a`BҊEx˷Z @(2n p[k"ɠ~3k̹3ZHNw N`Tk,UkBf)1xͻO@&lآb_-F9ѢK;8,hղEb) R>j4ZL.2u!-Yol%jOKP%0@F-$R\I,1(@O @1,0(4h8<@)DiH&L6PF)TVi\Ҙ%N[v)_hXMgfzktN'Ms֩gowΔ瞀r֧Ljh_T(lN?6ٓO2Q?Dg)MjN(Lg6:jKjc$i-*꠭JndkKm 0zJrz,3 SzJN6䓏;-I:L>`I<2[? .Fs0 /BtϾh޺e#_O<M (k 6;_n£Ï".0|R>N?&` >?'4B27 4/[u_ O',5BKOG=5Ք=&c* 3B5K67:OT#,}r9'ɓgTxX~>q*NFcz3:cs&gIȩKJ;O͓܎iCyZonzkz<=o}?SOkB 1;}'5#  W!Mt\e 4LhBJwĢ.@hJB0)!åK"D UN 4J9](LuLh;RJVċSQ/zԤ SJcĨ-BjPMA[UՒȪSʀдk߄`S)0Iz+ hX:. 'cqX%AZKetYH6t(hg)zŰX&KXvӥTj][LԣJJWR*h ܪ?-:*gָ0)kS}ˑʅnFTG]HjsaDt%/+UW, `f0.Giur#]FLhaV{*-VBm:ºnXYFԶGMqE"ԤW-W_X6Sn^UXQSӫV6LPw[$Nqt$oEu$:9x[׷bu7`|7pv-An&|h$ZU6tDIKҖTfگ;t ja:-K7=d%@md$VnlfWזrIg~m`ʶW=i=;X~/LF?zH 3[FhqJ~7q+ox˸cT6RYUhw,MםY䚔RoWC#4Kӽuu`7U\ _ָfT&VtMg!`z|'_U{Cgk9rt KRnn39Kt=cQ뭦7]F/y ?qÿ*?O3z% ؤirmd?}(?x:ni7x#K w(;c<ҫŸ_|{ģCR2 HINWKSF Z%]ɟ,qegb~gT昃9Q nB'BvN?Fry'D3?Q=(=T2Uh?N$yTD{ħH?:v0>,(SFZCR鉵FJꡉd&YR0O003 D 3>N"Dj5n,ڭ?Jˢ=\ OD3ϳN / @nْjڹϻ#. N8JP?B P<vk:ó˛ˎ>v<&u^[yJC_3C^jnNh}3/?J(X߻,OSbW޷> _le!o~Ga4M}?;ek{Z_d/uk+H*Ů0S[\ǣpJȩq(!#P"Z$"Ab0Q=6BT>5,Nn"qBt)Iɾj q.$?og@ΈwK YFtՑP}tcErG2;厢 QqߥA} eDW)UԢ HJA#MJmTR"tmhE7 Ә䤶ijjSgW24ݭr2;u,o46EL ]%` \|gvN ]5\3x3T74Z/+r&Rm*[:>wJ .$X"]>x]Wz% "`#+$x z8E L|x@lg!Z;jƷ1Z=lK2cfS vmsX@Y7 *~5-nuX])0 p>9W |ٜl?ӈ@;-U75tC}GDk/L‘X|  5GM kZu+f?䯁cZR[HbOcǛ2l{ҦF7qk5'i.ѽu7mp79qO5 >!V=B4pmWΔv Yhr K7vS;s/goؒxt6 3Ȍr/:款i o"3B:td/zX~y Mv,tf6䫣w3'-f$p36 Ϫ-Ҕ'CKɚ7D9yNfaj'DYbxyVR(m9Jr؅_Ya9;jةکk%zyUO9-YTzVg|I-ʛ"xW ey* C*sw;,q Par{Ezi)I :Vj z ԨVE٩IbjM٥8ʤl6*udq*ڠX{VʩMeƊ Ďo(.z8xGut}:sኋɠQojJZ(%jzZzbح jVQ2*$J?fJ0jxitZ*:QRz{:E%;m u)KnɊS YuZhʭGCǯdq ڮhza_[Zzh .B;+Kr auK$:;Ϙ{KlƸ7'{;[x#˱۹=KpfdE+n fG w ?n9빳 kKIO+xy\^Rk˫r ћMks9ۻʶ~_诨{xۨڷJKi,* a `[{tf۵6kv$&B YѲi k S64hkuK+{[ӊb[ dkk%{隵ϻ'x j븮׾ڼ R3Imm+TDULm6ٿLIK@ZfUcv*!j vlǫ77*4۬@Ǿ*w +|l3kd2J+z vƍYĿ{󤨟ٽN Ʃ(M7=lmgKP5Ka0誣2bW=P !=.  q,@D,qyRm U$Qev@0v}2߼(.œ] a'P!6"@_fRAn'0FY=>$ r./@4^V>hΧr2͉wY]I: n}ޯ!+,I7V)@Z=@ Z #JHH%u@Ɗ CIɓ(S\ɲ˗ 圂U*I>S ̄^i% ZAɴӧPJZ&!Q3nuٳhӪ]KK4 +t,È+NK՚'BrBSNze?̚9{^L*F9" XZ_hf {M"kXba2ZkO[iOz7 +XLŢP8߂ 6F(Vhfv ($h(,0(4 m6o>>5$bE&vd%-iZM9IdHV#iT}X0yk fBjKmJfZq^YZstSy?iRf?):ճH?HIJϧ09ZҦ )HdO>*RZQfQ-)DXR?TҦ lH櫱Dώ$lEÞvK6YKKjڭDf+~ێ려OB~Z$S<+I 3003 F>Ѫ0&'N>0 ;o>p1Sl1J>D0to<>⻉0K χ>Լ<'d(?üӏ4& $ Ϥ#2ht?DTlҊ;l:Yl#7~<=l/wQ=h'&`T3|XO,O>iڳpcwCpf9TVu% `+;">ӰlA+u6pc)l^r6cm,/- h'jņCGټ5Il .MAz(Qr]~O ;?wsMgJQcqYs\-YlԓӉ6oZcvTu9ZR]%s?9] nېG(VW>>&KhNO\cN=QƱƫ+_WS:sd xPc.ԥJovgtÈv<@R&Y%1x?wɃ0ĸ}%/jeٖ\Hahyg8q$DՆcYz'hY葧xrit#n9}t@In5%ɘvhEfś9Wơ$jD{ *8z=8ezZ|[Չ(|Yxy9sz)ȤH)(|y498٤~HjEB5UY"4{فI&mS&Qi17 @Ik/?ᘹH$jhMʹֻ\fu}kܬ}Ԭ˕,}΀l,[J̜RL ܰWK4l7݋|N׭k|+o@M=- 룔Ǎ˘ٛIr Љ֩}lZҕt ]ʴ "ͪ6 ˝] eAfߩܱB,yZ U<ZKLվ=*]L\p}mՉ7=բ'-|,Z?띵t ؗͶg+%> ],k=T}1.&:ڬ4.6k(}ӱDdwk>mDm.ĺLqNt=}6d z{>_![d\u.mWíu;s>d% M* ?ޥ^ݶ ,X旼=9M׉F$ۋR%Yr.=ނ ݝ /FoO#bp+s[d\M+9[._}g$!̙N>|oZ^~dn|߾؆Ͽ(O /,o)?m~(x.Qj.!>?a/ܴULHJO>_ǼzlD^]?~SfUx'_O  $X` .dؐM@@tXEfQᦌ2nXI@. D"ɊQ@͕4u^'Ȋ@ pO@j0cφ2f8BWK*UkC_+zjYdV SZm|;Y4%(W޲~[ت` sD wƉ%1h/g-f.+)iЩ٪V\1DؙQ5PA3Otwo r폱{߽Ȼ0 #68{ˡ>t8x^/n}nݡ77>-C ̋=͢D.8ì;(,r@JPAKM(xp2 ([04P87:Q7w[hы9o-*ǝ#{R􈔱C-,&u Ȁ+J,Y+J+;3|ڜlN$Ol͙ !2,I7VaZ*\ȰÆJ `Ë3jȱǏ CIG&TBP$F9`@ƥ͛8sɳBZZrbg-00ɴӧP2d 7e e\*L:yћ,>$%D8%צFk %剙$CjaFM>ISFH{:$sꏡn"O3003 |hO>4jB裏:ʪʺf&O= g>|(;E~? $;jBqB3;TZ[H03@Φ#ChyAW? _ࠢh<7}wfr:g[Iڽ36*xkZP27yM/ڳh?$N^*&U'jyB>M=~pno+?_4=Cn2NoYym)7< =O |>Ft;3\풄Ns_v*S;I`f:4<2Y$ؐx~Urf6GD2߹U|M{?@))~j3P'tdjX= KaY?zyj Y NP!Ś08<3TH,}L,C۞0 Tb,PR&mڢǪ'MW% C9F2 xpd93)MꇜacNJ)QE*#Ro̓Һ\x;_\t(} ,xJXlt&(xN&3S"7}B#X8,[ә' #St N$ވO#FiyԎ;wISs>%tNazPME4 B+…b<:$G'RQiIYzR+ͧDyQ2(JO_S>7-*eT :jHZ&OqH:! ()O)  1 +P s'JRP CXuJ 4N& W54>d!ߤh7"0D@+]u ytT/y) @"PRLa\Zׇd @kV2{EVlac-f!\辶aC"*$:yѢ{6&#vgTv /i3 zӋ\j$HH\m2Œ@~_Eug%`x*dyWݻ)ZRA6]?Zl$1;Uֶ&tD }xzJ&^i_uS,iz,6׿:^lw/۷ey-iln96Q.QW9[o qRm|SnK;.zNjqW/}=vkth%9?۫o$ݥu=q:7O|=t|!)< QpnF:-,Ok?4gS#}x1y/=czik[e=kݜԿ!kX{D]߿>>Nroz5252YYj=?ڗk>%ij{*߄Iszw):/뢟OGxjgzy uzl'n8wh7k_ Ȁm`}&WvEtv'lw VZ" Kbb@xf~~mn}4yg[%3vNQHa7IHcOx7wzP8jX~>Մy[(qSkV9y;h_b׆gRxKp-wt{8{9ZUXw%Nhx}svf47?XUxYwPR=aL%\؈v&]NVu Z9qxKR9(j#/j!i٣É ZXsȝE]y煓9T&PIɊt:zj;\Z!rw^zuy-mj\IZv'TjNʧ wxR)H_aYK-Z멢u':Zك)]1*٨@J Y$=As:jf9va(rH ʭO+ZqpWZo}Y긒jZ ,Ǧ!q[ֺӺ!&#:Y*Zjj v&˱ 63I5頠)˪٦ g*OJ Ѫ>)9;o'.r ۱GڬIZ=*H8Zؤ犤mkbڵSqy2KxyY2`:fh "}y5٩¦7Iyg9ɫ⪹f9[ju[!GNI먚6J6+{j{+Z뎦Xފht^U$ˑ{7J8Ii{rZ;[yYKK|*K̿~{pll*Wp ,_f#^kշf[ٺ۽z+ks7ܾF"q;D|F \ <õȲ+ŭdUJL,ўiEfziLb+#Jmc,f՚ʃ+Peg{ǖ: 渊ܷz#I,{Ln\>1XkA<i=Q»aAY.f)7VV ák= ?+ĆvǺHL>ų;PŽSܼg6\|YΕQλ<̜=F}|vΞŜ 8 Kyהּ!nޮ.=Ryn(. ڎlڱD㍽:8N&N ޴R" |l":~q[乬n=#aϮ(T#}-"̺}4|W h Q%/x\ nO[ND ξnm:놹9Y1~^?ޖ6^n0밽?۹MϪJoUn ^?ͭ~]_~j_!9!PkҾ!GmEI /"ƾ֙5m?}vO4= ,E{=;k,|(3?t><ܺIZCOҫ/G>^72QS^{!wx|mPO=' 4pA$Ч&p.O09 r0 Gl<\P"C`F%¡jCh$Pq7uE"2njvdL)%2x%@r1ZL",[T谮jdK\rL9lRGtN!K(Ν^ҲN';)5Sllt1AtD7Ӌ(6@,.}1MY1 $7m+2@QFo@؄ud RMU8s=a%:S7K+kg1Yevg_ 6S{V3P >Lu+jwp^嶿| W!,A?V9a@@-PX‡#J81ȱǏ CIɓ(S iɚ)KDTPE A@ JѣWR^eg-'&jʵׯ:mHEYEM`ʝKnҥdc)N8YCÈ, N ˘3+!Y ]"VͨS*g9QEB+SJͻZp h|l1J9УKNسkνËOӫ_Ͼ˟On ?t`~BT-QA 6G!G֗Dҷa 7$:D!·bQ&gc}QD#?@>N?m=~ԣ$D3R9ҒC(CXBIr8I YardfDU^I!dr$gP^tg|ܚ%%ݩhvDv2gQFS! f?<4 > Q<XY*BR 9+I ɓLv#X>`? Ds=BtfyO k>ܺU B=#O0by'--B,%K+;ON%擽"쏛'X"jc>6;ð?C\<"d?2B,C4L:LIF$j.c~moG*R6Mwz^>6U'S%A\%vpA.T1Y {=10ڋ`ӆRudVx{KX4a|׬zc?ੑn:-p? DC"V=:CeQiLd+)I2TJ6S -O28_31DPԎdǘ43#hjf5M Us̑2rF7v'.Z;sqg|O>Q (uA*g C;]O(` \FZgH:9 X 4h*8=< &@LF`" `vd nQy65LDfZӟ0`GȪ/jv4ԯRdsEiYs /:zNPDT@@`N$4k. S>dTYfVHgJaA  hgcWf/t~j{֟ |ہ%nq*g*w m.5 ۖǡ(z6QZ(YlA1/uҘns NKZ2bZT#QjUcSժD,xU:Vyj%ikW׋J<K'N4jV[,aU᫨Xz֧~H9\?ѣd,1"j|WevmZ9y/lSH,q[ -2{ވ~7%*lyW78v}#Rg@4=)Hp,?gy]m=DѦ^C@NW4;bWi9视m t$nu#sն u_mXGyrH:9Bs5Vqѽoީx$ݑ_:28.{k>{=\ $r&ns1sԎ!Z5qW⁽2yATݗߤ7 t|}K7~+)y]WyMj;S:csXYxd^~W%f_XztxorM pڅy|bG^zܱ#׀~$'wyކzz*'#2&{w~g|v;GoQ|ijՇu0|(؃[k8YEt:<Eᗃٗ}*gmE H!hqrP ,erxo$n7~(s8 hV[g|H xl56~RxyjO!Xt&,y8A_FNznGvNJs`a}j6|сOv|||uø^X{'7}(]χ}GhgXo$w1'ฃw h؇(w&UX%ŏ#hO8X!ABaS^{  HxQ(aWu肙rnh{oHTBm[E2Y,u'vHzGXkFuCָؘ1ܘ/]$t8W$W8]8ȇkɖiI؈Hh9$GgY}ua);d؜RڠKY!5RKΦ֎xֹA:pCڝYPM[ܙ4zaQ pW9豞bZb_A"_j^rE+(`%`Z*^j-0 燦^XZ K 14"= ~p}_=Rx NM$a E'_*͞Ҥ&-M[!,I7Vk9a@@Z*\Ȱ!Á&<(k3jȱǏ CIɓkB#ƠD+[X /Qɳϟ@rt'љI}HSӧPJϣkMS`ÊKvUEkUARkβpʝ{ϳ疮߿'۳ag(^,JǐҒET;kϠCE,<٫װc˞M۸sͻ Nȓ+_μУKNؓ(iv=~W>^xcx럾_|y~`n5c6to ږO BVlt_&!n֡N!5bڈ(X։CF`Oh;6rĢA*dcEcFIF5S.*4 Ft #FMSGԤL)GϚ]V9#XCune}lW2fO:$pvh}:%O>X5Pd30=9Q&ԥ(>P?ڎ24 ÜN>*<Ы.; B*ꩼyyʚв cϵZB{M;맡nT> N?wPr&9'<|Fq"̎v 1 OB&\)<$ Փ.nl ۆ)׸rB;\˰|*,/̴]\Yd?kdf'JR:}_P? 3G33כx/n yҪ]gރC]0媖MmŎ'*^_ mɸuHl7<ݥ:N̊$cEwXs[1I|(O={W ,+{?[Ԟ.{ݭŵ3h5'٠3ɶ?D;S64UF#-~k 9\n_vɃm6ť''`kݫ4zP TR:~ɆJLe;`?ҁSjS<"l~C,"=)qJ=k0]F!םXDl#yd$m*Ud걏':]ǗHvr#v>db] !E}kV٧MC.# @y]qS,jd"ILjm76,e"%,Ҏ"i&}}a4L@eTF-gTй8jn9˙srǛ1'yP|bh!(` FŠɨF-PX*ݨHG҅QJcҹ)CҎT(!eiGPFtNiPrZ¥M T(5lh?S45(Fɉ% @B4`uU"P[J8+κfĮNZa T !oE+l ;B N4@H> +2ʐᶬkl[!ApkBۍQjZܖv >6UY/D?/tm) >&[f!-}K*dqe3My T4f{FB7غ&   F0 5ğ9q{JSuE_1~d㢄;jB p\qLmdXdE4b/7!*oh>[$@i{XHirX3?!_&mdcƯ~ѫ5AX:oy/{[j} >zˆ^kh5ELfy%3 8@cyќwҲudj o4Iuߚ,^y6oLlcg;*r?-i`F3T|i#{.wQ3;Ac8VisߵfßUҵX8+c9olͤ{e@!Le[{`iERxF2yH$;\Ӽ'|91ln{'NqeeQ7s筣}ɮށe&qjenu'YU{+|zݛl۽ޢ3==>l?f{j ;neioݞ s`XtuA_l/Cr2~7Yk5h}y !pn^/R񰶶4\?0$3Gm+$ MOZ>{=x!|y'(UtfZ}N_y\gjh~ avV*Evv  (wvqcwgm%|Ub~8w6R@,B(`6zac7_ק<~@nց6pG0|Tׅ:N|gUtUq8vd}"Χ!{!gIeq UOq/D}"OXiarfgx|[fsTH3WG ZVwVrǀL^dauPR\ƸzhȇTi'ET(vAd_Qv&Vfw5LQ!2Xw@px_͘GZxъw(bXXgwhwel8F!a'Չuy݁uUa2H^if{sir%{Հ7;1}{ʗo:ioj{ׄ'ы8Yy8cvhs自TFi I%w XX_)/~sUedyA_+rA>G(H?xY^6 QUvwg9>6Hq!Zbu yY0iy#ؗjݘh8޸ ic)(}wa/Hh8@P#8\~hI`qm8Y6 )`9!ؙ _eY5‘՚m9.Y隘E~ꦌiT3KPRٓh$R< O@ H9E -"0 p Gp㹕ѕ`Ia*h؉sVXof*ushA`$YQѐ8lHiQI9"v,:١c)ٙȄ)g׎E٥b^Ѹoӛ YnF*(֙89nݩgl! oe,I. sIalZu<* Ѩ LxMcږx|DŪže^  Qaיf2: _b*«CXz:@9 BXT0h読I0 "Y#i 9ZPpPל*KMl&{AfîRjmZ^YivVs³Je( caS[W4Z|nڠ?;|_|GzIyc;NYbz\)*X;YɰzT.1Z^[X犳>ql:ʗH;ACRJ%[}z1{vB갵km+EHሲP^ۦŋpZ#;v'K{+z;KѺ<ۮu*l Oa|jIm+5F X"ɴʖjnQ{*Yx'Ѩ@iKpˠm zg !̻([^#_/Z)Z/ X8=̭ܣKBJIL% xػJS uU:D#ٰq^;vɍyċd+ǵ[!$KjlŴH<ٹ ̜E**KL˶ēʑ޹ yx,:$4!Ъcz _nRU, l ܆7Mܿ;<s6$q>ܴ'\$<.Q|@  9,ZEXf)` XΟq΃\Pi?}j}K]D|h Wx_}k-e} Nc>~)ͼ |j;֏<>e&`_}._=-rޫ6~~!-Hgy.ЮJ }Q֬iWbӞs ]XcnߧF}Z>bgC>whҖZl~e d.w셎` b&pΡq.^JoNn>eqXh vB~L_upbd1>>i*#NB,W/rK|dEj/VBtp&=RD^qlYum.\/5iȯo.UH86_}fo!//}C￲$P2@ThA00?ۣ 7˰1# DLJk1P5FPtCz *SpJHIT( [ R@'ȳdI,,5;鴐$|ҥ3=&!/C}l) [M ѭ@+7l"D@TG(-D }ӾBuTQ4Xb4k,9Q-ZU{y[pVM}uU؆opnq]vfIˢpow=M?,|dIJ)^wvo}Y=C.~uЂO?nLɟU罏_TqTӍXhKT({w _wGtdqYQͩ^7e0\p^jX%ŇB~ADo3C1|k߹0E ` rC+lcN66UPr"w=RC^Ei:Qf];%*AJXr/!,B>Vk 寠S-)0ˠÇ#J''jȱǏ CIɓ(f,HF,W 3sɳϟ@! t' r3ӧPJq/.YatiS`ÊK֡ՂDCVW+ʝKȳ0*L೨`pLrOCi)x"+Aib*˭ӨSĜq4Pvcոsͻ Nȓ+_μУKNسkνË ǃ=o2}]$ٟ>|yA'c葀`O y桷T ~ UjT!aN҆uhwN萉82vD<&?>t_?HDd/ d!oCCLi?mϕ5NCCh0Y&P:oQhɓ`D:Rs*ɦlS3LGeI!.y0蓏AsϣY03yjΣ)<mj[ri6Y8**lg>NW3-;-qM{6DՖ6S+%|c35 <Әh:ٙr75HZ!솫ʡ跥΋9c?j:S"ƓV4MJhP());.N:1%j:Ji)OY(@NKO1LRdP3wL2~lI /iMqLgMu=|'4ݩ"xRg=)O%S0Kg> :7JM|6-Q6d.iTˉy xDL6)M]j*i=7EԤ@CP4DeO O)F[QK:<=)T ( |5@i*9Ak%9JU)s@H T]l`Ȋ}5_R M'ΔS"5W 5Vl6;ق*wSV9JmAVz L' -jR@h)(61RUQ+]ʅ=R̬fbV^_nwӈֶ}R thd.jӕ׻̀[T*0G9ѲH eX}(G=T,&qCa0=)uӫ^T,ULk!Ap` Pdkۦ`IUjJU9@XVjU蝮ʞ6inn{WB7m+C$4ȱc򍝋޶$.NK*`N"iN?v}4l&ڨongQ$UgT Vj'VYkMj9)pZ֬A=i6eUڢj2juuI;ύ}vɍݜfw-3rmK= r{\ۦ7vj>vP 2y$A<'3U^\(0W<W4 e_]Q_T'zsU eA}[qfLwG)q/ qmkdv@HrNpF5oA<𬦕m7lKV|V/& ?ϵy/v(Kż㝢m#ܥm/|S><@Z{U3\DZw싶pM/{NzF<VT俻בژ59irw@?Ch+GtEGst"t"fsC)I瀤/s LwtxTt_Ca7&u*urȶJFu'SDYGw9u3S]җ}FfS}l|evufUietU2gh$|n:8V}gFxax9Bk[25lyBVWpXpv gWg[}hW~WI${kvVX{cL8vq:Th̆AmSͶT̑T^fW`!{džm}g~iqfn_n{hge*Ã'qh^7p{{&Mvgw9gq':q'rqg:Wsbhtǀ( !OցHhs.vItI=_%c7TxP_Odgh J3 8qjTǸuI33LE$)rhoy{~x܆VD xը7qh$JFCbZM9 dtXiEIEx٨nLjȈ(lc{ jq>XWbiXXYu_6XU<9z#RmI^HhI}D9(كYBu^В!}I1&WITuɐP6ȎBF) ɕtIَřYɹ&_86uF5D h0)@XPxyfQa~AKv;GI&IHӅW5{}V晉9gvlJa%Wvl՗$ Ŗ܇nyzXÈ&0zI*)gTQAHz.zln/פWh@9q$x9pw4jj:pH-x o$W(ȣI٨9wYsiʩjJs'x?&x}()i٪i?#i1JPTe頹1HqJj!YĦ9%ZG9Uk.%(S)kXʡmCXz# @BꔆR㳗ky٫י**PfR99::=XYuym7`:'; ,)*[yj|:Bbs9ڏ: L멤sIMOQCWZ R+T~yy:<ق4x9+JJlJ`RD9)Ȭr;8 k $fN|+Zǔ#p![#Z OѮqK򺷨4qUwV/ꯪ"[j EFڦ8G ;{+vU\_ŋZi1MSn ~@t;4Yaʹ8+맱q #x3ˊU+ʜ9]{ax4H+kjtq;&VYʒʫ3TzJʸbڱ*:<8ZFˆ=J庰~ٺB< U;ъjs9 żv[>ZĜ{z\I d|zz E|&8PRjTjxi컼|o[x*@[B;ʭK,7| \INe{L̼d"vLɖlkg(\ 'pVLYZ, uS(hcf rkWf5n+w19Uej'd2 k۴NU+Ca'"ߴ{.7սaw_5>N+>rZG;g K\uIˀmтTN <[g>i maKq=iu=m^on[18.f31@mͫ_N~țG&ۈ 1RH_sJm! ݣ.ݦnؽg{(.gq&޿T­(fOzwd9vnAqn9Ht!^$>K@El]'*No3)Wq?n!#L>?O++[o(*V~+F>e.5_k=T3E`aloO #oSM .dC%"`! p`Gd0PFFK-R %) fП:;~YeBieŅnvhI)D% J%A^%[BiAU τK @@֤@%ͻAJ@"0аA&/iu2Lw_;P$@.Ro৅t!u_oz2]I-+bU^^i*h8s͗ r5>_ pRɡ S=(ob[J; .@9 q ʦS!V<.*!1 ȥ1<  ;P@D-@(*%JˌL5t38Qν$Nf 6[BhՆ,`ɖuv 6+-Ȳ E69}^_%[&ٖN?0F\ BOwbq0yɬ,[D}a@Yoғ &"zT4//xVTL12]? 3-EJِʢ*"L2xvpHA6dKZ_>`jc4DG4AO&. '_ÝfG<lk*nKX%DA<Rv) ;+A&kJ.b _1z&HW"$\-@`6C@+򍊇O=mr_L8'NoSx2:9&> <eLmrT5xCTwF4 ,a ƂE^vٔ'@W"6$, ’5ro%+cXT(Yz,K 7r;1#SQ'|EjƩj"-ͮ`*E5勫|:2Ƭh1@ f:}Ei%pď3"HH(B{cP`WTU$crRn>BF m+ΔʪY,CBo/n eR* EgɰoN4M.Ϋ'Oɨ 'v16e޵xY]K]s1oě>Uzu~&p}l, O'}E8 [!S$iW*H8PRJ\*TBG "SUٳPilĆ't pJXU"6cAh)vBsWO׾&hZ. RׂxeL/\!"j'  +H "֐!}6/ \m,z> 6VI^qx}kgcNz!搆g%ZmrY Ŷ/zSx). ](~7ic.v=*foט/ҷ9#:/*3r |oN$y1]bcZoeyC d'wddB&{. H ˀfvJB Y| F7K j' xInd!q 9sŞ/C'q3@-|~=D`k'K 2Rub@~l#߄'Ku l)9[17|Qrs>$I~Rt!}^(so'z?5%3o3!!,I7V@**\pajOX 3jȱǏ CIɓ(7Ҡ"eĔ DHF,Wɳϟ@ UH ‡=&d`CJJՅ44Qf&LdaճhӪ]ͨSbIՔ;d˷_2kA7,LbǐBD0Oz@ϠCU,7 'b!#c0@'Y#up+_μУKNسkνËOӫ_Ͼ˟|m(?Pw&X})8UA"IZGaHFա_YG#^'zbU%~bG/TZ3rtT1Z;FAcwCjTdJKZdFMu$wO6e&j֕m"fPUP?h8&JSf? avVxfTY'^"4 Jcm4h)C`<$i B.drYR 6(A3 =3LBsϬ O>ڊ;9:&Knjm^# SϷϺVa:uJr+ J(>="ZͱN欸(*'Bm /--2OS۬sT53-.Xi_< b rl_Β*nҩ(*0c BV_~fȕ\(Mtzc^7O{~.o׆r߳&& %9LP= 吒z虗ʛy:f|N5)ؒ*c~nɭ\ط7%]Bt> T'nrqB ( a wZ Gm"\!D [HD!#` I$JCQ0zj#A(ZaQzdS 4PhTC%PN2ҏ:s; ml A)Mszf"])?cNZPLS;NVz v|4PULWNVr;U5-LZ֞̕EiEQӽ.5M}P)r5 I awrWu:d]׿\V: a5`A!5-T0[*$$@!ofE@X-Ro["2u am.ziG6QnsjD:׽dn5PWG-""! /CnϵہTR@@00"Eq`4@xa*O|c',bQb]8@E>2  [Wxy_L?AZ._B ! )󙗌җ(n˛ֹwj+DΔK1Oݽ2a(AB%M+! !})hG:(@`\^aHr3 zF0ol^9P48 ; 9‘ -\uzY›C +d;;{jmo{0xO΍V~'qw;ZV| ڶ//C/7.\so8(EƮ?Rz#qq"GS/yKIͦAƉ^xT^wxX.:O(qhٳn47E>I[%ءO*ܤಗ\_|Sьc==zt}@~̾xC*mӡr3n.j<%8Cd& FZ1b zq+%J+L,^*c[D%'_){{=أ@ߩGh-6ѷ@ojG.&즶G쪴~{^[OlZ" \r , b6ۺ;#AazV_Ȩk;m?s۩uƹ³8D4̷ {h[>/Ekŷ]׸7̄^nX;8T 붠&lܯǛ뮧żk<뺖컘,[W<\ț ʬ 뼌 LɎQJ>x<ȇbz~q2̐LR@1 魫<ԬxS9?+y)tw˃ $ ܵgjgQ'U{(W5y}_8-jd0v٢l=;QW?{c*l 1pf p)])쪳n@,(W6܁M}t-4*}iڲ( fi \ a}ܰ-ч-ǬgAD Z}Mߩ ƦV\fH; -LRZy$ǥjZ\>m}B=F]_#͟L^-l 8]iZ=eIBh<.ҥK! *e.ӳ= kQ=̭(#R(>Ty2ۍ_цL},LpF˒sЗ.undlܕYwH}2\ä߲"b` V3LRrke x,M䎑~~W8ظٰsjɊ&,쿌jNZQ.cnnPNC[Ԍ-ﱼi]"txm [.4!_ ƺy*^KI6.ғEņ虫i j YN'銗m=EAf lm5?^G@XƺB }^ܜ hHa__|j<ͬotߪ̊(E־ (m*nn>mQ\7N?I?<j{9L.ID Wls $/f+#oa7.??ٯ| 6#XP? Tذ!C%NbEp1M xqɏXȇ)eΤI0!XIQ$ L b idPGeġR~L;dbը[fUpi*a+-]'My/ń$YWYlnܯ%xg[ysCFx-\ )-˚ d6֯%&k*žO9_Cn?E˻4~=O[^Sz_-3|ꯉc}O?O ALнJ#\P9 mӏ;\n:#7DR4D^3; wk6xrH kH?T'm* K;S6dL @b(k5*Ol,60m"4o6*T&8Sӥ( s3C+[<~ڬQM)ɜbTB̬*='+8Y3)5P+:U,UUKv;Zz3+S  Ucoe;SgT DچG8nB!t׹d*eW<xMM/%tBvcuu#&Ƙfb8׾dQ\bAd7SV9Kn㙹bƍ1{{tK2}h+r=xɧ1]IY7.*ʲXR.<3MάJЎn^fŪ\ZUGhSt֖ZLm:R)'lҀf qD]<g վA꫰|3医N׋UlKUK3\MvgL_K8?=-PځfnE77~ Av^-|:}ٯ4/$qȝ<=׭\h͂6$ p9&qosXP* !0  X8C,2BόFGK]uijPc5'N _f%o+1m S2a/T[V5^o{ܬXD-Zĕ(!ᰊa zG0x꣛792Nykڑӵ|e)a;6&nvh 6ܙ$waH2xwi5-yP޶7=,(R$;E&*]Ub'1t*E}ZGLZ  ÄLPC;d !:A7Ae%%4]& ;@yY٢|.Q ydsaktZ5wίUM["1D^DR-,Bҏ[,D24Ict$uЖB!:8P#y3JSSr{Se: Qhb7gM,i~aiwt)x:ʰRbUڳVvүq_rfZ5 m%ϚF/ZƊ<4|M )y5L@ljؙlP{3h[t9J\ϰ=ȅlu\G2倸G]fy{RaW[˾f.HzTVJ Y셙Jqj*IW]c[)bQ xk_%-_M*uUoD b YTM[V?7EZ:뭘ug7LմvOyj_8&_;rD]dbFVEDc:fСg\H&(m+y0V myM)[)mpʖn =tm{ \F6Y{&bJewgDkOxsXd/{VA)8Kwwo1M:$ZFN,Eqpһfmsˀ e\w֌m\K?ź~19Ix©ElR5\n1y12Lo#68g}1QLZu,sco^߉.U튚Iggg(3Sn]`Ua@=^z RfB$ͤ|Lwn͢~h(VQ^SDa)kJR=;,,LVro/z[>>t0?藱+ě4~a@T @ p (|© +C"t `2C(f$,3t Pc@ţô = ۄ=Լ0ýAQií+<:A yC@ C; 2/,;SNDREQND!,I8Vժ%kZj@@#JHb,LAXǏ CIɓ(S\q  za(T,=229 JѣEk&fBgDJPNL ʵׯ`'VD`RVBqSAػx Zfp+=:d #K\Ҕf`\C%KӐXZTε>s۸`HɅV~^μ݀֊#[y$ѹËOӫ_Ͼ˟OϿ(h d _ `AMWDYziHJšP!5"^%~hR_^*D#W2tV9~cxT) i] DJIMVQ.PAMY9iy@#E ^?l8&pGl?p @9I=S! ӏoXEɉX:?L)Jf)XwhEv䨦 JJJ0FUyB00땎NhO>Q<DC0FN>c+3&3DJK+ݚFtu?vi?zQZ0^ /'&ԯ#m= oɿ Hn'> ϲ'-OPpÎĸ> -;ɦ,c3Ù.,q&|W+BlDF^k䮈iacIJ;p%2gG=&4 jFlnW$:)=s |2EitܴH)y,̛+!A{Jl4N3RD"8dJ(81}G\Y(Sڼ%($JQ$tE0LsӒy4IchԏNL %ApzcIJ$AFH, "BWRBJH#ukغȮ1k׵^;WѵCMb3XRO]lRK"ʢHle5{YV-< Gˆi%miERHEm[e[Wo2hm[0ݶyiϞDP (`!#t @D݈d5&D5oY3TPyŏD]y) *BWȤމ.+0CR%@@Br)D~D'x/G,O%C,D^3k> ! ҫ jycyG&NxHo @WQ;n(o {?47֌k|C#GyM xy>z{$}Դa ÿ^)?[(CWt->mi7='qO*_e]Z]d^5a iVpnuNjqN%O$ű_ϒ? D}Р?GGhV/G7 %FϝPy_y{R[9%kʇzs=g6OE!5G9^\:pBGe@]1^#6^5b hb Gyw__E.~`Tv`1e6f6f#鷂*v7vLT''hJvҖ5p}f`Y8uZ6՗׷|wK(b熛ddbwiW e@|"zw' xJD~聗g^u@gRHVgiu^}gw`DljjgzW{i7kfwjkyickFTǶ}7wJ!i=etvҘmuhy}IlXW08gm׆[Xf|XwvuOvw$qn„0HoRo o o^hCpG*QwՀW"q(ҁ3)s92P⓿t; h#hEsĥ-Q ~IdT)V9,YhV'!uׄY)dvYtc`I~i91dCcEֆRbl w츗'whHmmxLvzUyeS鉐Wf7m3zy9R{Wzy\Xih9fcYF ٍx'$tfg}}}}U9w %i旐攍 7bi(ѕWȕXi@9s&(9Bi h[CH)qG6 [Yq8&DY )/\P]48oͩkؕу5:^y@yIQbה4y4&akN+nٝ^I)Ip+5WwZ8c=:W,QgFɆdֈheX6n(ccV~Qxɜkfnpm(Ghg~fpn׋]ʂyÈQlf*j畨xZɇR 0k$}h)걍9҉'uڌlf]yywpvQnpoő2o`g{칠H-ɠ!QKYګ1“J %ڟI:-YE5>Oz')+tJX* b uV e|oieߖ[Jv'uHj%ZOyZ:_\ꬆ9f7b甔 {xL{ |HHM[&2h٧J+s9j_ˮT{g궩l˲Yz<&񳡸 ;mʅ$J1}Ъ6·'g&ڐ9ft,~p `!sIVۺ%('!{Iyדˢ˰+ 77ء]]z^>^{o[|S+$'$۔4{^fӛ(cJ;&a( Atk`NJfِgRj^ȹٸ뷃%gbJv)ʌ9j˵YiHgZ4.Pz]J+zdò隖&Kkq*쥥ڛw yƸJM֥ʖ<Klʊ~K\y L[ʭZ #ߪF y",{ZKZ ۻ˯Lʠܠʇ (hBs<'ly<%ZɟWe.y̩l.)eC Q,3{^p\"qơ*{LiX\̟^ZT$,b ,a]+ ܿ?+Pzp;ro{ ($Ԍzm|F㬗|}L(qH:Pֽhӛ8KlEb#˥"2բ,j|+ɛԸ֯u"!*4ڼ+wۑ,@\LhDmx8_ aDڊ:{kXl߭ #6q}M%-ll,5ۘTG.3|\54|oФс]a*ݳuɛz >m-u>#ߡёkiMK>n>6f.׬LFfINCn" ?nYQ嫎uw >k4>Ow.tn ^;m>>o.Onn(^zm"^š.8SuyH?sJ/Y&o]2;5 bNR,VΜ aM>Cf?6hM?XOvOVO⊑N.? rZm\]R N=?﮼_>.QN qm; r_^?Ò|//Ot$!#%oc+91_5|mXOφB_>t7O_vL?˿_m$8@A  4pSÅ#NLxP 5nÏ5xQB '7Zҟˉ$K"4b,gd(Sϝk ZhK0)ʜK!*]t' ؤK?ĪXA* źvJ +6? rƸ%.qMYd +g煘V(fҩI~l(kǮ;V];2²w;3o) $pogBw,9gp 28LK. Bär2 S,/>Đ+ŤB$jM6˧ϰA*ƄQ͊5E*tI+/@MRKO{W;fDUõCZ{]-|5IE68eG;Y3c-֒eZld6[rrԒ \C}OFUH]PerQˊ*TXE(LA(8WO| qCwIb.^s}8tW3#sT3"k%:`ckxB ^o<2I4 ޗfNu&YYen7^E0N ![i[YfaV[ݼb?n)rmC=׶Sv^}7 ݹ%)p=B7.7S-;T<$XX߈?Toflm^|,YmnZnHlyoq.(~wv(hex]3M}2gQR24MMhH[Ț@ *j~Yyk:8xt%@P[w $ m@̇a1$\ > 2(#ֵ'-12vINjckQ{U[F7~9CޱWT%NS=zђA4 v{#Hؖx!qy`l0A) )C,' 0dc )i2GE "5|?De&%3/ LIID` Aer'R&YDNVQ3G0Z%5bLmMT?KeQas +ҥSK3mFo^H#7E.!SZ=oZsKaJS6UNKR@}'Q*LMLhF) y8ȱ+ǛIC{8ܹV[NIB6ԅԄkzԌV#mJyLB) IN1t bK4/8=lZ k^$G|J=eɃ"VUl ѓQ6>3L?\Z9U?R;&bYf?qY:?'vɠѠeF) #=@$0B:0Nq)jꩨFQ٨?*җ[JkRrsֹkNg?{ylJ=khN(fꤕRki~;k覻`KfYkY/ g~" h̒+N{zmZrk .VlgqW 를z{sir(I,,Lpp.lBLmH'MnLr`R'첾t;;p6ο- +<+p-Llm?7X,:˦u8:3Nvۮvs/ݮ{S3ϲCzS˚kG}\GI`+ǪE.h GHbx?ҖkG`(tmi"7DW#Ç-T?Y{![ SDIʓ@ZXbZBX4a ,"ɆFD#4Ѝk(vҢ>CBqjG"d#*Jz R&%Nz̐ 2Ttd$CNE| a0K2Qu&^\(_WAR*!JVZʕ%#e4[ZZ"/nz00:<#3EbKe&.ɕ]̧>ٔq3hLfU, Zyjͪg=IъZtٳsAE΄M/8T*Dz.Bĩ傪?,8"*bUj\Ѱ# ( !,I8VQ8*\p)jHŋ3jȱǏ CHKIY"HYYI͛8sܩR^TϣH*]ʴOGrLI'jʵׄOc35gK&L9@۷p?>3Z \x!߿>ŮΧ̸c5/*We |z̹g7Ry n~^ͺװc˞M۸sͻ Nȓ+_μУKN4vۻcYx>{-O?p{bz_Ch`S2T &dO?ܔB "Ʌ6[ԳP?#uPx0ܧ0#FbD003whaُ;IrO3L>L"4=hх8>$eB?~AOC=eO3ta?υؓd< 3>lv߁%4j AZeBz);3}ٌ埄 9_ZhfZ^?P劣"룜泉>z=$)엸kHl? :kdB;&`k?t&=+:Ce}Hl ʐ~OJΤ:/g[nA303{im&B53BUd>U҉$7=?Jq>KO|L-COjbpP;-ުӷBjcЋxT߄ ~j nN'8vhBY7$9WN{9tn:7:E:.{벻N{{|Էpƻ|=.ϼ?`H}^k`}vyzE=D`9ۺ^ƒvE@T= @pGM1>F(Ʃip:;`F(.rNH}ˆA]ؘp#! )6ċ(K!c.E󓟭px \``!(C'/t"—1|Sb`@9vvX=q:~og4fQIy8cOHc?22'kqH̨ A,J BDl%Mƈ/l.]Hl20b6ĊX_Kf3!S6њ#8q:us|WYUp\!Eyfج R$L4+ K8 B\1M|' ?ql_CPn % V= a}@q\&#c:ŞИ DfE<Ԅ53m)XF|Qg&?F|SHq'Xw#ֱ榬f ZZu6n}kK}4.}6a?әܢNz1ԣ} G*WfP[\Jٷ6l[8;XsHDS[TBXpv-^iۚĵ-p;#TN<2DxlJrk(TτuWDbw2Q (h>4BVYegExTR*\)~%J3qě4#]&,|Jf]uxZp(.uڐb/]WҸ˽q[sc1'!kZuoWӆ7/Ǝy`Vɠ۰q-Sby+-8 Y2-p?fx38+yZ."bxy3]vӫFFVE3ǎ~t#-i"SҭilRw-NdGE}k؍n"{.p/<8—be"igϮ./][ ۹ޣ͵m`|5IR3[AqO˗3TfBM^nGHmp|)ts[ ԣSݕp*\띖.QtW{CީZE'Rsn$cyߓo]j]3˺\ᬻ'͆v̷;28mnwcE7h݂;Mt3zmù?܃8?~GN/="tޅ.՗Nn=`e /z\̏3yWv!3w>뿟x]wmFq}h|׀ĀI8R[eSvw}vҧs w ٷe}|~$~G~.h~~H`u7g!zl%ٖzPV~1@WHم{8,!^o_؅d|fwU$0T}cx8)(h$IHs~X)E7MdkfifyY>yȂU(%~`GjX(p`x)3u(J\؊=|cps Wtȃ wk&{Ĉf%4'H7h駃ViGTmˆ|8VH؂9~zH9YTctxb؍8BxcXc؏eVȋ8OhE(T1x3hr{؈Is萒h" g$NI+IXؐ1):t w蓨(gHdhTGmȇh[GؑiZ \!Y᧍Bxcf䈖18%G؎fk^([HhOǗȔoljQDhq6I%9)rxIlYugjYs/I9Y9xyszvٗ؇0X9; ƘH hʇǧǜL׋&Xsi諾+w6؉|ӸlyL& (i#,ɝ.YIAMY։IH ȏ Z뙠{hЩٔr9l9ye9Lؕ)%e)袦՚HwgBUMء0I9>@uOuSBjSUWʄ=F^: h\p#cJaFAHe3=TozIAX)cZJyjsJp! ť5%DwxuJDp!РApکJevtJ!f* A%aʫ$šڪ :sꪜjC{ʦ&W$Hbzh3kJg!p[V !,I8Vkja@X)@Z #J(Q $O$ɓ(S\ɲ˗0cʜIZ$hrIB9`@&&(4b2&Ť*R"& NXjʵׯ/WI ^a`2ӍR IZ(߿ fE'+ c"vIБT۷"LTxe5H<ϠC4%"R Bn#`ꄓ5Er" )Xb@[+ʑYײ' bνhUcƝ]~O_Z ȊEcVZ>D,nb =? f߅f(@*8_LpfZyldR$$8<@)DiH&L6PF)TViXf\v`)昁`&I]9߹6I0* (w(E)5'2zfꏤyj&yLfuz$1 EҔ?֚Z 'D3 3?3>0箳>ϝZJD mD h?ƣ>Dd? ϲ,"+, Οh:l=:  0@K49 t< ϱ@ 4V2,3Nϊ&D[إM/ü۶PTC7;;3s-r<Ii[7HDx<|O5c7U,k q?O:#.<RHcn$JL(5ENvǓ^$WWM+ne"7dc[v%d%z5v$ЌɕgFsdo@##wp&L>;߉)rΏDWO)S>qT1' xZ%C HS/ؑ1rn 2M‘@EOb.f/D0&ǐ$@L)2N///K1IL!Ȥ2T [:miSqL*ӟ0m,#A"%8$SJbshM9ӏ~*&ԴӉ@k_6 ͎JoINeؓSb"EDzs;'و&$$r@Y>nԌks46G ?o+ !!Yq\2ܙљnt,M*t ]huS>6Ja3{JVds!ݿ4guu*V2]_qǩK&)!> 0h~!^ӯmW]sX,ms`HWámTq,becقA6;\,6pM'a |f jJRY~)rHXs}gSw"=o6abҿGsRR1^\WfdHZ[ Xj^31b\ -cZϋ,X0*JHk֮V͟δdeX{S,5J*;DT="ڽm_eϐݶ Mco4wm&Wy.]F2n}3x~3"w-n̚U iJ: 7qJ@;龴7}oO5r~at/'ƷٮD;YÃ+-ewpGPq7Je h[tyGKgyKiր'jwFpW Xl1G&v^esylir%~vƃ['Eg@ƄMt7o5(dG|Ve̷ev{4R%o(u&yg>~'kgUxsqOU_q8M_ysUv%x^W%87WgXr{G+kazgXǀmdQhFb{?s\~u||y8<=WG#XO̘xnȀTne~h`dӥ&GNXMh8U72qXHCFx}_ʘH  hhaYt~ȏ5-xdjh!)rwؐ)+88ȍe46/5m̈}Q8Y>YD&6 0Y9&n懍sa[8l䅨6t'Ifg{jlX$H+QT9x|(_~htXF7?^珊HsVvjnIzǍxFVHpfg$KhX9ɕ+Qil4Y3X|d;,Yt=)o98ٓY)Q'H ,quegLyrNzfqFhHw ʙ]YiǙch8EjǖXKx|WydEycWmU3!Ɛi'ZَYW8{ sfs^{uYٚ%y51Uy6iU)Kك6Y(J'Ya}Ue9e؅Ź9If8fv9矇 ֩^ډjYiYhk999vyvlֈOjɗ5YjcyP7X9S ,866g=tڋzD/٢ 9X&ZZ:n2:W4!8JQ*%r9CZEꪯX&٤`)՝yؖ|] scz[2ѦYIʠ'!WYxH XƮvh@ʨ: @ȩ: $ ׈P3 ůfǪz}y͉Й⚧(کFeyIUjKZ iie qڧ!ۭruպh:Zv*x zNy~*ܺEiD~ mY`ʱnk+pI k$Y6jwGS{#DʆrY縿rx_t&`Xj'+>@;=;VfHpizb[Vozp\^`\j{d{q{Zu[p[6x~m{A{wrpYYĩ˶]ף+J(]ǫٵ2p(/;93kxYjH*RK۹$W Jr\>`zɻ?)˹׼[f:ɽ} ;ZYL|uZ ۾w<] T10\ܘ.KjRjWʬ-Ԫ8|JCk[p\#,9Q -F Xx:̼*rlSla:`**NOC} ˫\DW<VYlIڻuƷ*&+V̙kg\Hex su|y,{9LȦkU W| {l4ȋk4Β5Z|I܄-iʯ+jm=MmݱȒ]2^T xaȂ+(*iB3FҀq,!4m0U2*RD FM2)m]*#*e\q՛՛*!ZSћ]2;1(gi` 1[=ձ~C)apVUM-9{p؋QpM<-?;/3f*T.])~=-4 !M^ h!,I8VRZkՒ5‚#J(Q S+(Iɓ(S\ɲ˗0cEA,S $CASJE ӧPJ UTI}HSZnJ| ճhӪ]VUT <(((6]c~ bjKÈgR`˔ W#̽b RIĠC@D@10Ҹs N\W|5~bХFLORdkiO_^.A6P8+ҔaIV%i_n9b*)bHfJhf)=; ?z©' 9LSD| (ѡ3B`"Z0da`~>aϟ`"E@Lȡvn ԐYZ*zG?>Iǀ$MգNh(DK ]( qXݐa >рs*atd" D(Q]DbaP0щHcDOAt]\@t_w7>6{*D$H@ ## X2K(7@60Q7"$"X XTM,D, <1d1?*p EzU[k>nKTlTוmW,{pɈc>ù7}?2nwͫU=g7ǺF{vO'O7>־bŸ6yM;~_x%[GRD~mE7Q9U|yummTwn xuҗz%n|ᧁ noѷu5m w}_n|GL{q18si~wvqG|/{A!{c\,gXuZ0m(LfƗ_?2W6{ළ;tE7S}%uEihX}v/KbgLf7whPP]7yy(8b(CxwRx`H`8HQ7SxcR~fׁ~kv-X@h}}v{7|x÷e}W=h{cRX|G]LkgaXzB׌,|h3k}hu(H|8uzWvz~((`Sx_yT wD Ɉ_ (m怉uABXRhnwt/8c p}8#"X$=pChWR6qJ\(r@`xdEXnj'7шB'BOx͇Uu蓄eՃxeft\֋w()#6i[r8~tXkɏ'i.hyOgO wtFaPixp e ``Y`IWI`99s'5ul}z# %9xjm *$ n76.XDR}8}9}ӨV^Hĩɚ5IrٚǝfwIIIQȞ﹐&GfZyBC6Nt)!8zXi! y\8ՃI_(; kB6e)))N(qhGtp

rPJ癠 ~?ٟv |x֟קiaV ڨlb\HvUmsm'fjXuKPc>ߵVX#uAdlDlɡ̅:Z WpqSe 얢EZ5IٓI*$ gff.E]TIHfr+ \Zp+wFJFhjmPʡRjZk(GNbhThz_Z,u6W)7GhZj:^ndzoWju$:PRky*;G闢{znJ"uM Q/&J"E4VgIF`zjӚM;hnZNWK-G;1JJe`e㕬:Gekm68J{!$Z{`gMԭoBNk]{@Mj# Zg @'%Wmچ %WZj#t6Vu\۶k E+5KXy9pVԱPLhW2K1 %ԋVl8k+سFlAKXCKJ&ֆ F;SOkZ4S+*9G˒]šzj`+SXQ+ʓ-ڛcopqkuAEb ̛KLr:|;GF[XZ-YzsG-RZK[NfԪue8:7hF,]`ڝۣ I,GK*l: ^ġKļ uʲ}$[xxLvx{k,=IL\'V%l}q %]&/_:F_ܜ/Kތg|q8J:R,TLNc8K\&QİbLn_{ m~Ʒ ݼ%\glђڍ =կ=Kcm'FҔ{0ة^ &Ӥjc@iC}/46o#VP͢SjF*$*¨rnjDU VCwVsos)t;OQZ)NTKAU~;{`CXV<*ŠYMXZߟ{FZl&z֓2<)g& j׮[bZS. ϩNjmilUv٦8n<p|j J.C>Eޞ]쵍>}Ƹ=ҺܝͳXNꎩǽ-a۽8 m|nޡpneN=&>N}{Nޥ+mՕ VA}&d̔ UQrN O-[ j'|ZeSꮽsP<O;n"O?*j< 3>c?*?C?ڋUN0nn+-Lg|n)n㌇?J =:.'.ϙ?#m̵:? rzv&;?%J3+kr;1j6ÔZK)(=سt\*74I2( (, _dv܋AN=O.;>ϯVk;'k><'s؄K*t캺kt? 伩{nO?V\>պcO3xr_veK|ys|^|5d_{i?US@pL*`T@#)* l JPGt//E٠GHM0&",NE,| _hd4$ [h,Aĕq*JD)1%Ll"u$,2YA4`$.VÆFJmiIxh qwI_w*6Np "I& 1@"Ei"A& S%Rz(`/%YSĒȤKҐ[fDKF^g*-">I#e'qdO90/H ! rIg~OkYd51U!?!*+SKTcNS$t"lfs,Irֲ`?Ϲ΃d@p@ Jj @`Жѡdf/%#t9z) c*Ҵ:)NӝN.I%5|4$T/Pzss\k`^ĪU;տέtylz%Mv2k׶7Tt'jU}E=ѹTL=/z_g1흭K!O20YĞ2B V5aN@E.H!l5&%%PR+ui~V jT5i!_Crv(q iN81uQ *EÒʕ&0W_.--ճ<#.hZLu{Wt9%oz"iclo2U'7<^So|1yc~؋!|[huzyzG~zdgx>rVfG{O'W9V{w׀5|cEQ||R!u)eO~eyw'~@Xw7 x}FRD!Lh{-E{Qd·Cwwx)xW24xawh!ei(y rk(mH%ql-R WNqPcUpx@DǃwEq8zH؉lj8N8XtӶuxg@outx׈H~VrGeE,upVz]h{wsx{H$8\䔇#B|H1xv0QH~ƂWx6X]8Hx؉KXxvOHXz8|X~O;ȋ |87Ć8)yx/i2z%kgXX!;D~'BŅ>i|~hՃm .\ bdYNJ'xSْ3x5ZȑTItOs 'wzuZ}5׌}x6qhsXn YSxx=YHO+ȗbd8TYД󷔺h&5hqɋVvXYfyzg:6myz%ę7@`m"F$JTmٔsbhxw%r7neZW뵛D6o6E8p hp|[fQ \uҝ2qfuW F%IrrTڍJFO[6=>!ߘ{~Ƣ6V"X\! G$]nwAtB:B^gL%kyDBknjR؛ɐvhlZbmrJҜxU#fQ]1t^vkⶊ_Mo/?vrE**I%D 1VᶏʡZƥ @ 9Y:ɞjJxIjz\v=u+s %I{)UTJs$8ڣ_ΚMКd9ݵ>i\b:*{re^L!^hYU/u &ɹ $װu p~giEҙm a}cjgXygyWjX*eǩ;iQr5*OU,`ٝ jz^:i*8fkfme9Tj&J*Mtl:V5r o~K:݈UI cwsRj鎈jXnƯ_[;dj[j%;K+n:"akTkeZHtt@Z_Y[g:f9dћHGpMJUX>栴ٟ*q]z r;+hȺzL@g t帞x::pS+yrʸcK̾]Zka糳Zh n{*y:̰9Rh%xz¶MT[{u.%[i΋jk۳_~g\N56[YF[Ku4 eo 25;Ǽ_{W!囸 nmW =gOMrC} .^ir'NCwbp2$Np5UJJGT?^gCN侬JnüT@f( 澉-Ākh檛TjFp'@o\?ۦ; P'@`78O <\|+'pZKIP!͓~%^7xFYNAΕ}l|.@QRuPzxיʁkq` `'. 7ާ핾W6Axv2uR D޶5^ejE7ݞyF EB!|Ε|?~.@h桾Z"v:!,I7V9O@-ki@@)#J8Q BHG(Iɓ(S\ɲ˗0c"F0xJ*圂U*Td)ʴӧPJ}ZI+ L8Z:ٳhӪXUt]@  DYKÈz VLhK՚'uJ5CMZe۷YhS5UXҸsN|+-knv ڵͼsd]] XNLJ8U,7?_Ͼ=J8W+tܕ +;ӎD03LDO0j<IoL3L*0F6j+D۾;j(< $< ϛඛ#?&Z϶һ%U{j9)ç:.]Nf<8@jS/ᳲ@Pk9\i˃k, 219=ޙ(<:+) h9DN3znM;=H3mD[$=NT{J*sl0?HJD46!( 2 7 %毄& Sc.|b(CBѰh!Ťf(bU*1h?@G$8]g+"*#$IK4RAQ$H&Ё#eQDC@#xF46TRyԁ8u h)!qMHA(bx<Ԟ˜#2"t IѓD!ErD+*a!,{$Yި.s9]2FebH|0%D"zR&\eVh$hjZB|$e r7yvչ h\3˔E'!IH|c,7MQ(EIOF tbQӢ!H)ґ(&EcIS"C.}ZN>CbSRUL6Ӡ)НM]tAЏuԨMţ8*O-MF!:=,jVDv'ZNJKdS౧(I&:M~Z=%MijΒQL̕2C}=+ EK,f24v9X7{B4TfNXI6M6jRjUE*DQ>ʸ`7}[ڸ&e]06n!|e-]\z6m;˲77}V5+_Mѷ/~CD D ]N%$ L"@G`!Y aA ^hH#8x*NˇC(@4:f1!^Mvxo[$e"i2% |dLe(T &Le~,^lDmF{=۵~/=A0=4Th8v .%-@D.,' 4eRfH٠#Q7pt1è;FnSob3hcQ%ec (O#'wuK3lOg9"=0ݑ24+y7> @q{V2 +7a _x"FkoȪM \K\lv=\d8Cn0Hl8b;9綒h)z3[.yͲ勺VdzOA,pJi Spvӷ5sl;yuu+Yts=3wrMFȖlgK^^u7ʅwc^$by;{>dt v o;DOG|롷;qۻﵞ5oz7V}=_Yv)_V=q/?֌g<>Qvugf}8Ag{ E {*|6|giwz||pw6wȗ|҇qԧwI7ub4}ucr+G~,xYyGswj;{?y Y[1XH(ƍBՈ5\(u@P\!c%TF򥊬sPyT\hgIXI{9R^9N~X&鍪x F>ə Iy*.NW՘,yV阁I7[HEP$)AG7Jنby㉚{9fyYxPL䦑ِB\DɖtcY_{O^\pՉXHI{%ILIyu5ڐ7u9;Gd(i+Zmy*YSCFp٤,)9ԥ7Szݙ^iojl 3Z{Y?uvs=] sٔI[ze;thZ"J QTE蟙[Z]B2ꤻ5\婦*ڥlz`*:y^.Z٧2쉦ڡA'f4Њ!e;'0hoغڭzHE `֭':& $UK6)LONXTTWfI&K٥J[ϙ#YҙL$I%TôIQ?r'Ev9^JTKe} <Θ-3=Ht=HN>B( 3>hBlNBCk?z觼JJܙlϯ$Ï?<: 9c).9kByOOΙPk->-Kfzba~<) 03qCIJkly?Ko ꜭFD|JTqͽqҋf p(w i #p⾫>@}4ou=S= #?0jK'.{0'$D<'N麛q` ngsmh>0n=03jDJv,Qף)ϕ_>8Ȏ.O>-#Lt& /`'1%I;_&ٳO=W&q;UAO~/hLHzLw@o!jKI%`.ؒ jpCd?d$ UVh)i 'Cpр\0u'! $(l8D B8A1Z*bfJl^  5F]<Y6N bEh qB@h%$B#qt=1bTjGI%IaRs'IPh4e29pTxVo*kH2<x) &1 iL 3+KRBS/yIӖf* 짗dFSE|PNyF=M# *3ON =8b(qņљhqVdF ѢjiFE 7Ʊj(DYZ|)BiZ@2'|NyJ3(Q OC-|:sZ.JX̒!ah͜jE7=H*5k-+Iҙ0s* ׿V#NjnMjU{ضuNl[̙@ fю4 MiS[ղv6}hb+ۨUs`3U*6* A7S),Jh]obӊjGaTgr\F.[fN*]N*xr#8io]z+6t4/Z֧ů~[$)%%z]V(ކ-" N 3$rx*IWUh5]kPWÆ&;n~[G+7aC/񬎇u'㌣9Gvf̒ٲJ3E& }h]32}ґ9^Keܭ*Mzzc3ޗXR]zH[՜ 7e^4LlΖ3iW֞L1Bڸ6l(c^w :so 쾩{fmW;ssoϛuf9-26l8B.@\P:9ʭϚƸn/:.?-Ϲ֯]eesH>tUuo&0co;Z꩎/f3l'ש沮B۬cin}m{nm۸7n\tܹz^f#^p)r{Lp7NWs?챆)~Ngozn@~otEC"`ľR#| S@(~Ѧx%$󗛁KĐWKSO_eu/ \WcEh_1dZ} xePGAG97ZWϧhcU{F||{}'悛F"| pVmy}t[q7 VH(F877$EOX+W m%WHmݷFRxm%z'88|mX|Ҷ/rȆvkǃ>h,d8mGuƄJUxzwhH7LXxKhfH|}HrhF7芭kȊQr養IvU^x]1Q8ǃ^%Ũ~0qRu{іRh\Gy4L.!lXR([]xZe,6sՎY@Px}؄ąQ$HZ`P?X atXi{iu^ YbmiX&.ըxM.؏e 'cx]Z'OȍHHPGwc%GhHA :iX؇HTidYv ɇi8v)C4\9gw gyif{e}ie\pqSj؋t\y+?@И[p9}Qd1idCEEiZX#ɈAdy(BG]U9QUq!xȏYz%u{r9)9aYdcIcݹb)bZNj*QyĘْ] ٜWwW9W,NKiYyjYYà Z[iY*y^#e!#Wz xq'W)ZTYנ5xz |)फ़cF*}8oING/*V7*qoVjG P ^UFC)ZV8X,r:XXZpxfzڥl:Vfs9b6Z{I Mƣ_yL\aꠂ2YH!*,?ZfV`2*g&&Yʳ;_?vJ1"e zm*:(<b"ګ֩=aꚩ:!,hV%kZiX@#JX"‡ XK HM"S- (0K`,L!I͛8sɳϟ@F4ZzQŦk=VP| X0<Ȥ*R]˶۷pʥHCiXiߺw/:8gE |-e*:11˘3kH(6k`@@ a+]"00/_YaPdܔAȓsVoF3@ j̝o<DW&zhJq7u˟O)g巑omT $ LJ :[EgwC ?r(Xˁ ^EVdrY\,eBO=& t$B(,0YbJZ<):Q,F@Frdh`:&rР?/)E_dj衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j+mb뮼D*FZ,D&,>Ԯ@V)=㮱kO?/f4̾NO=lSj0f/S0N'L#P?>O? ;b{D <003LOO= DC~? ů@س4Ig >O;g3/9kSKl5IoBuD>yKw6{ ֔ޖ^1ՓKNy藏v wygm<#?xzD#>3'Z.<$oj*]ԓM.PţOW[vg~cvGv/yF=A -8a=$q x ,YA> "]ORxG[Z9iLuBJ,()ZBU-z8]31q.e<FGps9ڑ&u='y)H;r<$"ETLR4:`@dH8 HȤ?LJUV$=RX@&o-]@')ZR @(@&L9su}4* Z ֗mR?2`bJla,cev|7)oJi)ӟz։\-倄.t E>Id;@>+Q0#I^xIQ*Qq"ӥ'e 4|AXʄ"25ݨ&a:њԦi:BB㽒)xQ'3Tdv5wl*pjs@`NZJU** @M4FZUXL  wʊʷN3 s\pB,m<ɬJ)KNjŢ$%2OR~Gۛ ۲%lLٜ5Ef3).kҶX89.?y|(V9\qSԗr(2 J:-;>4s3Ujբ*Uy&-k^CHMy%;=YD8ʯv;fVGrEWdVTsن 8nepI׹2DvūN9 (q{řz4%qӽu[Y~wfT\iLjvN6\oi5|ߗc*83AG՛P/pZ" ##1sFz'ˁ _EZQ筻R;ڿ0;.qQK9Tc{Gvz-K Њ7ؽfӎ44g&a,PSƫ1 R=N\L<_4Vg*WXҤ汅e3ܞNVS{Bul)28*xr|X.؁(wp(V|s p'dpB^'eu{de w[tuc2zsdzfr8W(|&]UrOFɧrրs4s5]Utԅ?s6kJ({"r~GpwlrXg=Ƃ rtƁX-"xh)؈FrftUvWWxJN6Nxǀ_(7GWr0IWT^&Ixi"wy:d]t~swhEH\ghorOh5H&M؂Qx{LIB{ZX||͗(}3i4>c6c}cQXh●ҨN%R~t}LdT~x(ƆzȤll@lv(mE` <2$y!yb*isؒ’0^)96A,[7vxZ7hp4cU g[;p)t/9l[q.I{ro&G.YLדjȄSsżi.shH!XHW?(jv8ZaFx(|(Q9h\+2YH*\v5Tqww4Cfe7YK8HpJyfXyGm}SHUIOzϸz(hWbҕ?vƍS%H)+vˉ֎:L"{(tI깏 ٙPm䗛kl~k_T3Zijq mWw< 0z0yܒ:JX<ڣ@ *4:Q6:&& GCBwGŸf\oI`ZHho* i!lɅn):TNɗ~*!lD(X:Yɘ;ه@i8Z*Hکen:^WZ): J(MZ[Yŷ HZT" e#Mt܇Rt,zh> r|o9RקcB{q{z[j>rT@8 iʭQVqF* rU ( X>d+)Zq[rѱ  kj( #Q:-/K yKwvbqڬ)W\y't \hgSH(sI+#jjOkJ.=FL #ZثzG;+WgeKGr˧S[DJx+w2~ %몒5k(-13H6;y8y[CGgɩaRw ~׷rٴG(J%ɦZ([˹RJwlr1RgFm똢+IK[;՛aؼk[w'˛;X٫9{ںg(+aV[嶚&kG#;j ۥ˳ \k-\#ljKkpڿ[614G|G:6*@:X[kX [l/,yhȗ+Ĵ*Y)(z0V%#T\ܖaLcLmL_;sklG>!̨#J\k`Hk@,?i ɑÒ\,ɗ ə[+ ql`HM OI‘,ʏ:˹IL>?[Pۦ:Le\ghAk4ơ˽| +ƒǿ,;j˶(Z\C|Û β\;I&{ϻM:G\ʂ=.>.cO?r.Scmsrp ~)t< ̵M P2ԡ;:JdRlld։Uh\H 28 s*U+Rҵnm`])b?17qq+(;1PG<">c=t٣s^*y>,Y{1`e%hACi9mi^0zvsC =QZV~ˠi>`?:׏wCSf=A zZƄTw9h_ р eHJ7!a2P#2 RޕpVΎQlxgNe1SNJA.zc}[(:Gcqf]GOʉ>A"{`T)9-s =şu*֑w+vwqʅ(pܡMrbsNHsDϽs?ks;.84 Ыw2P vW{[clW>kpV[0xlYz ;G6`ꜻ馥'7YOp[aL Bn8Z-G#ڻ?y鷁NlB?ҁ6eO]kv+dܦmi% G.l7܄PRI.n#ߞ0 5@Lwo472Z5۬&B^-'vE4iMWMo $|n{ f8.ϡcn+zEhT7R<LlMl0Q#-IxL {7sTyUI Շ}?o=Ċck|OI֧iB'Y^W?Mr<ҷ[wGQ+kqeYKGBZsx炈mnQضdI=^@toxwg4E}Ck } z9}MC݆+7`_J_Dr L ]ð]l6;G]Xj$`3|̗?]A{4 F$*6adaFUCWV(bp*fO85fkfR3|B7sXtn4ЇidLqebUEpIF~y؈> Aq<Q!f8x]tugq>xh~8ChfRhC8D7hG:ֲ~u8Kt$];xO6k#<ăjoaͳ NASvCi*VUA:q݃DTfUAP8A=`:gmL?1?8!eSrWs{p~]1&^b_^`'g(Uz,uzVM\z\9UwxWUu?]k>*ZtctVK7ZUɖ%+lO3} VP)}<'[Y ESUW#wgG[_[̷cxcAy3Z'~yTsLVz$V뽐;*cIfF^cq͋%x:3jJ7 ",o T`?KE?c5F):ÅrBfXJیG˳$INr4YxO@|q5UKKH8_i{{?>g5cVPn EK^9uHgJdo9vu{vwہfNvcvkM`9sdT$5kұGetj[1EDIQxKKQ_+ɷzĴ)z*V)՗GU-E&)V?xhT 9?ETQbfKgI)sE@:#FeZvkWlir@]cG VDiL:XZTk5 ClZCԝV$=G^7]i,g@U _&Jܳ3D8SC6K 6/@<|;BŘiHRr0sҥ6عD$r>7md *֍6oG焿&5r+vĘrvd>mOiNC7S+)o_y2]w_g7{qZJ;x|p3ʕ[ׁוNˁfSm+u%Jvc oٙZJT+X9{=~7#ڻEɽ!*{~r^JP2Rnj2m:3Vbdwdad?3 ?xϠџ/C׿b8ȠʩIh9Qnͥs-^6mWP Aa~oEVG!E$YI)"@!@ G@lLA Om \`phAANZhυs߻|z5a~i38 _a a KX1Cb /!Vj-J,O>umѢü{=7o۸m/vah{EVnMi//zDo;".4. j t4kpѧsEctȹͩ +F'"0hnR#Ҥ‡P\ȼhqL "Ol/!P/3(~ k8bˌ|H>#4$} wrRJ+5Ɨ:P&@4Лt\IڤS2RZ<̫r6/ܤEaH-L X^ 輕R \ =S oL4ӴH zvh!M˳Z㕷RLc!  `(8 Ibbի|筵JR\.M+ 5/Z:x BKς/B-;yقƔ!} 1QtKK=p%6h%#R 2 aծR$uj#i ֢ZvVtJVr=B'y'ϲ˧!٫~ҁ(K{!'ZPĿ\Euvh;kCG ӥ/*&M7@ԥ ' 8jՔOw(J*1ʠɸ@дʭ+zYmk ~}#+!w1?K- MEz +wcu|!@:+8 +sd!hHAP+da B(Cif9P;a}(n&"=/qAZO(qב~xE,fQ[bE0Qc$cxF4YYP\7Qsիj"uB&ȣ1Vc /R )1b|) b@$F> F\J* q_shC䎪ʣGx64D SyK)9IAd'y^˗+/Tr @U!jњXzx&kiO-Ur MV&q"%V Bр,aOPШEI|; B$HGi;EAl7)^]+◿揨9`OSuQ:,V@-Ѩ,Y5Q dRY!c+!Z?0{UZs#=_{tr%ќfܶm4} Mĸg$[2r`HInnՎ |"}W&ZvxCDY%vޗ,uYK]Dv/QoLT$ڂa}KVMSi?7aezk,, S~#u%&qwЀ ShJm:f_A#H:YCJ5f3 j }hD/tnBhHGZ+/*R6c'iPZԣ&uM}jTZ22iFjճ5D74fYc[.(1ȈEr$#YO2lN(gLj=P$MaO"&6ę9fOyI(9I/ R ȵ9N+YWѢWXtRDz'yCY;2RK4hf"y>Ɯ*gTrȆFO PY=Mw%u0qt$dC*cTH? O49C<&  xe\t C&.JGeP{`RjHE 3PÒ %>Q1k#VLXf3bC!xEX|'zb m_>tz/aLB ՠj 9JXB%my`-\f!iEe͵DES,湅30~&ᓘb-Bb{ *$́}ҦR8NMXf m^ӰߕO!6zEpouNo-N'Ϙ(`~[Z४Pb.ȑ*)YE*M+~x{LSޣ9PIIq- !ل"ڛn$*,Qx::-ل%Qt?q8v-'S㑙Q+7Ι.<B?spA=-$He!<>GiUT-*?wA)yʚaaWt?e?7 W6Xs%eT[.}"`BT$CrmZf^aټFg]esR V?*%IV|1s^v2&ĪuCל6whfsm1ihc`QfWg-~UX>U V!ﭜֹ~i;z6 xW+xfNOy YKjrO7Fy,]3yyyyW}5-z%ɢZ툤_zɕ@Z'1zRl۫GZ}Rxɦzl&K`[.loϫ&[v-J\nXL[ EPaF|tӼߍۢNT^1/M:s_:W}ogNټt_3|FQ %́/I{+k*yw!A_ D- ap@ 7lu?Sx1턷dKEjNA0ؔH'Ʊ.{TMy閣ϓ.ѡ *ה띸? rY@$ }8d/=dK5wi<״1Ab&f!u5G<cHO?wZ>9z,>IK˚rNȚB% lrP&v}_MnҼDeSIWU%E":NDWY:Zf4eTPuB?dn;Am-o3l8s!oS&kN%a)cZr! Q"GdRx$i |:cJi%2iQzZo8gBzrh| b̻\Sc񔇏]!*XP,3;$Ht+bQ!)$fI`l6*K I(D !3A%B-Q:Af/bR$d$`qe>u&թ3uhnڠ6=szXmқ1LhsR.5NNt"J&a|Գ2XA!jIԥ Wդ8H$*SխGiճ> Sj\J"zUU*׹ҵv+^׽ABu%NF4g1Z+H#ћt~ w$:C8gle&//KI46l5u6mxs RuŒN i(-yF"Ȝ(EяF1ciF ]EjaH&Erpt>.@⿚iJR2Iť3 dΩN9-= P/Hxƍ.pڼFj;S'd;su+m0WZ Wlq;/?PgZ_PL/-lr_d0ܙg+R2 Bf\(K O{?!-qoQE {4,hegt5)j>>i-_o FYcxApIN ZQD [Db>H|uX`+>HKLJIJ`nvND_PaDّ)9YI5LQa61`lP)`6EPNM!J5P!aع`P\\qH PPDDP gEmMUAaFAUU`jK[Zr U@C=4LP\ "8OH"S#v!l$eğp|*y"iVTĒx;$8 AhGH,ʍ,B!M[Ĥʥ3mxfDg?0F3[(ăX\9}!:u'<-c(=HB&NGU 'mЄ\?C֔HS^!D>AN@I# lҵŔMؔe$OOJa= RMBaFxER¤TSʓ\UQ-G4C} T^y8XY}Vޭ KՈX=qVܝX%^^%__ Yp_&9@a5 AVVjA9fk¤efΤlX&`j%czA!21iM}ؘ`^a^_ Yf0~̄?ٓ^Hx hS \NA K:` }b}g؎Ai% ֟͠]gC,zKiJ<.^ ]6]VRuzNҝ"م@OA //&./6>/FN/oPV/fjnv? ni6a)K򖓺%Jƥxћ)^N(ɆlVR[.Lo.⑬nfRMg aPq;.vp}zZmg9&pXn"1X@ 0&*2pI1qn`bJ1%Vh1ms-mUm5qK$ԁHq±Eq22rl+!S"cJ#w loB &<2hrprNŎA(D|J%.la2x*o-s-. DHUEh]%srr3rYXs+/s0Ws\֙ӃXhn6\ĕCN"2nBTDp%_45w c`?neC Z@@.ԢBNt X!` MB\PAp'L CR (RQ 9)b׮ٯkơh &ǹ@N@2΁`~яM?8h2p#>6FE ~  G*-8Nˀ<5/ 3e)ȶkˀ?Jpۄ&'E?n~|Dr tv'Fa~ϕvx"f:\I|xe:%,Dwcǔ{\F@౏a c갵j77]kY  ^`uLaC`[,wɡ8/(|ԙŘn}φw]㬖geZ^\&l{+ @QpxMܾx qZܤָǓk|{.t@Cͫen{cG~igHmw{EvzB(uBo})U:7AZNZ!k#θְdMKa?⡏QCp:~tϸwXmI=Oj oR?}Xz ~P; Ͻݏիt2H)> O2By>EH/w\Wq:8eG.Xq5h{KHwj߷8$X&x″z(8`mfϷPGi`l2/xqvZ JteO9uegF'1hnQpy͆6 @CtE(&gAW96 P~5Pwqv%iiiW]8 ЅyO4w|{5  p6G?i7qhu.-gt83@r7ez mv_Wp@i%pcpG̦Z7x xipPCy`'qH{o؀vHkPH~ꈇ>5 0h5oZpiq 2wsHwG{d =8 fIwzLg!kuPPsaTgP~vK47b7p?{q 9eKfPm7 _X5jG},-Mrܧ0T W9#7DDxkGۆiWvjmVm(< tw(&Zso\iu@P7rVyxy(sxypc)mV9Vl^vtgܧF&x6i@@YrAZS)H{h|Psh 9 peG虄K؄OjHh &2х_faȣVVZDZ)Es("yLцf QoiǷ 7xmCXOƈ6yfKv{|ɣ:|duciƌ47y򰞽oƊȤ~iGV׋2ɥ8vuɸ·pKhhn۸ ݨs )Ysmn9 鰍b}oXY٧fypj4ftF(g8g ym:G y؏B`v18g.'GjZ~$>m =9R.gfhfG˨xsf> ׸l/YۘsI6pjMƝq&9TiXi%[keD60ofL֯j)B;g8y5:tivxctI+q6yMdP .:KFc_;IgژتyF)H۬yc@۷Ӈi8 )Y&f9돃iyWGz`;knireVk@P{h ؙ<; hH=5v<*5|]1plޚi'}Zs .왞 I,x!Ȕ'fJXSp93 עˠ7«6_8~<ڡBfnHiڳ$|8:<,d.-7oiJĕQ,OKW(_<5KRk@%aX H^v[ NhJ>Ŧoö)ׇ5%wzh|^=ƙiX[qڔr;dnMz*ԪFXSyh8h[n5[L5lqC9nxXHҸ籥7_ PgY8M # $8'<׬k h=ZVՕ~~ ij)g )$ &)ʡ651本5iR :nϙ*F뤯n(Jd+^^^k] uw`xPXZâKImZtvΊxÐ&wܔ:{ḤowVӵBMr:;y'Jـ3g9c(6e ФƫxHr+С,ZNֺWytsJd K Y| Y<8y-q8xک&jeYpP,Jʑ{Wqfe5ʺjѦج=+HgfmȌXü ύmmZT~ܮާ;w4@ $HΦcmfg2lR̳ S/]&]}Ge*˲~46=Σ.8Zy'] P>vzy;\f͵ZK\*]Kb~NMHt9OVR3*p.湦z\-^k_>%isHmt[9Y8yi،0m_>kh ǻyyyr'H_t5{hhəcڦ WۃܫR+㩱b53tKΣk+ݞBwY|@-ܒ-9b* m?_ Q 1(Sjo8hKܣgȉς+M*[˄~sVr"e& 1j\]iy+n;0ȃH7‘tبna6cwPBF<bE+J8Cr1I)UdK1eΤbƐLa =kM D @ngt@&NZe~7? qX֊ ;a… SY&r޽~`^d'$cٕ"7~:r˖ZgС9z2? s20haӣ K|`bɏc̪^? 'U!zSy:hfR׬bSN3 `*$,ꨠ@bw *3+>.+*0H}ҹ(0gHNzDݬӏ)|O rʚ$2$  !Lb#t-;6yxj-Čk.G тzT3;t%ɚϽMN;m4L#3+:tLOxLǟ!;ЁY :m\(E$g&jK+ڒV1(Ւ+2 -mR$_5\%\ Я1Z 0p Ќ[t5,h}ܹ-a1ȥɧ2xyRg7R̼cV&,}X}vv]V܅~s&f_3@ PZ=hiҠwM5Y7zl6l>Bp?Yln5T˞}ꡓE)n/2?4|r+r3|s;sC}t5}zJwucoM9lizxxo;+ZgSR%eW^o_*KzwYD@姢Q|l{,5[o5zd%I =RY"װ! DRu:rR+X'{DLDǑ}W&9;O"o]`E `R: ኟYP+8ZD,! T\"aV<5 1a!?D9h7AbSX1\GlJS CNY M2HW̚vl@9iy49^Hُu |Tq>C*mzitA"5t6(dR1V]EQ'OyI0Ax#tqڱRqx"09L`KZ⒗&% >Sn.i@86]Ѫ37.bT =sD'K0WiP1Qԅҁԇ|Xle΂-@C"w=>3ssv  z"OHϪXme_ Ksǃtl\Av./?uL?Kõև;$uq+hcUmFy6מ0r5AfSNBMɀB0p/ɗt6k=r:)sfpÈG/ҧoKd}6ss}c.SRu YjUȀҰV.;DͶϳR9X/;m +#G(ޱud_K[9fw(ղnILB=lŤ)6P8i'!-)p^ BO#un TF7_ɒ@)Ex:UZͭVXIxշ_AUЏ,vV)mctu}B=/wީ]+/2)4&cragF$; N\8٤C_} 38˝{\ Tt s ;5<'0A3+1#>鱸! ˟! à 70){ Ȳ 0 ao93K͚5 9r'Pڄa{ȡ!Ʃ2yBtI2@- (&z"|!3l*5"62I%04L2HÔ4\4+5C^Բm#l =#?ҊTA:5KLER |y$OD[02 0)/6$Q g۔ňXƷ6^iz\=:kGht4 )9:ܕ;L3"J,={7sF@IAЁF? N.%+;HKE\4` z/] x;܌48:Ad)mztk=s3mgLdT7C "_K 9F)L$GN"s蘎,; 7M4VҪ;[X9IqCKs%K,CdRHp{ȷyfg7Hr&oɠ\鸼ds¼WՠD!U92 ٝ9䨊VqYku3{Xa0 9^q9֊5VWXɩ):Rc˱{ G8Z˖&KKLʏǺG)(EI2ZNKɏ[CWEe+0ż@E7Eº$飒S{ݭ(`ώ R Ϸ YK\h^aO m; $/^A_^}___3A$_%DQ10kц_NԍA=@;RHR!pRԋ[Mv`N4-<‚$2AC1[Q@@cSCS9%ߔ^S8=>V2HlĊHNf #`TxKɝlISa=)UX]L-»m4x%Wy*a8ƁH$'bUV@F|]mn42L&"0ENǼXGeVYVA9!djå9*ˊ0u%weOTH&) 8ȓl:SDhyV6)`6>T #Udd!>atH3)4i%N?q0] SӉR  N2jU9]7] !VNr>ܸ&!@ ֺqD0$z9Ԉ Q)2EMUZmʼnfQʹ_n]49ㄝix}K޵aQ0֎h~qW<چ~hSGjmuٶns\%rjZ#vm5cf;{%ih&ө>訕pFtx_wګOImp~qVyyyy nZy_㎉f}nVu(n omQR R "F*~aXmoo`oІg +eas- :S~2?=5e,9ܠ\{va {@zv!4-\FԡġdhqND2EKE pcO4 RqI ^%HՅAf:dctd$/cFBzѷ%FN>N e#&Y/%hUL3gY"-e\h[}Ԥ_{sWg:B„ 2l!Ĉ'R|aC/MBLQaa"5fBw/%OdI m"yx CدH?qɮO{FkW&='aW+ذbǒ-k,ڴ_yIgH .P vծuBD0b@{(cOT eMI2`0(CKOMONW5uVM#|‡/n8YN? ϑ ]tuPN0N-16I,^Gvv /dxøđg5 KJy!zء}]g45Rv%] ݇5;NM scK 6L>>c>$=4FӏУBOiK@**&D:쳾Z{-j-z-;.{.kY*;/D(!-4̝'R<*?:p {`r)@Mځ!t; 'X7-dL5ߒ>2hO7սΚl/[+*'"?`& 1s>]d%ȾL)E@ L1/"{r™OՍ)DX'[˂\re 21eq2W}]/3vcOf k2' +@'B'3|ct<ԣ|9#CD~P"Èccu%MI=$~1NR4E(BL"mIBӏz(5-U e}$8H|,JP e!JQdT-3a̘$C}uS:% &0ͱ`MAr-{AJv-3j1qtbݥB0ϋ hfnj g:Z2ql))2v)+O T!* #"H@EZA6G;Q2p# 4J)q$VRrŴ&SɦAz-N{v60 vn2KVHsǧJ7-yɜnjN@ &.KX@geؾ.S83S'8KtzϝNNk|a#-K*4. ݘ2)D5_)yxaߤ۷IFMa~ϞVA5qRdtWjF9y~7L$MZYa#7wc*zn~:B-'C5y+(ԎwWpK\GGxΏ<5=dK6BFHv]y769А 5# N]S7!"CLvΎywv6]LK|>)?t9mY^Í-Oxыdr@d1@=QFe?&<WhB@SFhaو$z[=l!xyX7ɌGQ`~ SFLBx%Z7 6H#RQ&eZx1))Men^+qZSU/Ep0S8S SP 1M1@ Y)DubIb%"* fuGʿ,œF$SYqD(,!.R/"11#2&2.#3MN54ޓUDɥܒ`LDM3JD4N#X c\:zH5R <6]xW%8B0S#s$%Qk}>WIDdjiQ1[\.H=UBU??rq֋ș N~P^MC?puMڿ0N`_K\6=D_.&fffn&gvg~&h椄&i&g*S H`h&l AkƦmM&aYDmEV>dC_qL\XC0?tcVH63Ċ=PWcoKP^8CtZ*yy.Dz^'uEDnŒIU Zei;HU YCc{KNO2DNNăJgOc֣p&{XL͇EDF`%G(fAēSV`l!輈QĄn]$f ${^ Lm~|GڋC.i->)X)%ڰdihuJ%]mXbv#~(c#_V)BbX ҚMʟʝ+nJQLʢʠ6 0vñY4hp m**fꨲ&ƪ**檮*v*R+h&.+6[*F+Rki"k.ef.B ̠8Tbe7+괶+`#Skmf8p n.4J«#`knk淖f ~lL%;HT0"Ȏh,hѬbbrSH$Ϡl,Nl˚lVHH0C2C%$VՊe Z4;nf +JK,`znGAJP夽%bQZNgkbf] ;HF ,q-lP̢-S^$M[eeևmme`^_沔 fW QxV/­ɲ2&ξl@JAd&kn*B…~Ү\Fq_^+%*&"/neDZmFJ .K0ꎄ[)%ҚeH0;+e1kί]kN jt`*暭!3 co?+-0NGr1¶iDb&hb.D g1s,I H,2R2-ⲳڪ@.-0.Kr11/+/2S b0OSg&b3 t7t7{s8c9S@!B,^ o*\!A #JHŋ%>=I$FCDie.cR$H*?NySNs63BGʲ(SLg>tI? Qkׅ<2uSVdU;`Y @vй`u.[sanmK|d˷n? }Xٗm:1eL 깴Nz'ktT^Jnǫ=L7lռ;F3lʮ2iqޗkK83m؍n-0悗[2+|nc:a͝OϿC^j!, c /3逡 DB *  vhD (T(ȑ!8,c -i0 PA  $aDŽy@ƀ!(,l(0 !,"c ` C:da‰  !,*`  #8`A!4`BBLHB  !,2c)X0?U@H"@0B $' 2` !,:c"e@` ? )c>C()hA ja=B 0,AX6y@|)\a MC !M}gCv?~MψfX@ &a=L0Pv f8k|} X>*6y1lu\#Ö2 tb3)6%͓mD2cC_pEN@ Bi%}x:]Ηs\&6Y0>&;e2s16'JNRkߢ?R~{eGqbR!a<\crh{ۑ:ql͙a?KV-[?͎&DJg;i9J2lH_ڷ# h@%JQ|c MԇEec5*6ѣXH1)RmO4JϙRjq\dX]w*Sm]?z2;MP:z!_)Ak@:QF+2kf[чOg,N@@Vmvo};>6< 7g{?(ã0걏 d,E71{lds{ݜhMϼ0eb ROlcmkОibo6;bˣ=;8unpQ7Ϭ "ƷA܇a'[=}032:!5~ȍgc#96Ȏ *&4O9FdpsasGXA\0$gAQ?lfd BGUڶv \#?S -F`!lG86ڑ$1ȁђ{V{_J~oh˂ę EA#"c\g̡ui  -1WfA=Mk"Kl?dV{!S \FOULV[Ҏ=y]k#ۻt\byYsX44+:ݑ;D>no@| >8q 3ݩ2[*lh s}#=vk;ɗ%WNu4Ul7"#׵NhXyΠ"3i}|~WYH{֪ ?@(uy-%kS8;peoy]?o jDe~js& sۛ=?xU>Bl}ծ|P=C-2#$33UrztKA[¿og `Op 1iWihiiijQ~+Ezsw{7nd>MvjshKo4q'==j-O'%ky?8makvPo&k%Gq44VxP'uM^NcllneMB&y@<.n(04?_H ak͇to>OG(5#~3S1GAjn=nTfi|Efֈvp6|(<('rm|hoTC(x7S4-Plt:GgFwJ5Bd5Vdڳ/ w$y#Y(y'm^Vvc04Y6y8(kw$Axe\wvg?idlnWZSI3L9W?wy{HwDGuR 3{^6{'kdobeuKm{@cG|{ {e7ostTsPmwjމt46K@82i{^^YrdԵDtdsi>*FFg({UP2b[H{uOh`7j6˧zxtlv4x+SA8|lL? Ik$tX lϬĊ$|j\Ŗe褧7WTrCù'3^kj6DKOpw D얺 Ҽbzy0OKUKHF 4k!]B3Ҵa$3(ic@Ҋ:)=4]63;kcz $ܖlJ+Ӈp}gU` zQ~Lį1AlO<D'iW̰Y\¹t- J+DZBrCi\k{,_d?k6O٢]Mײ/Kk4Zk<{{ijr\-d^$y溧Q2wmpr>ӋAKKI%˓d[U4MB>!2.Zy!YR>Y=Ke=Wr@ d̤1<&\ނA[\)֡f꧎[JnMxęN܉iSu#I]& 6L_ďa 3Xț ҠL6W|S'O+p?;x5|.ʲa*O`vM_Ν)o_&\ذP@ %xaIYe5o漙~bREs0$QCoػ~Akv)-_ױW:R!S^8l[\?{,B- >'2?߮4>t:ϧ_>ƋE|`&Ȳ ` t?4xCH*(ܯb#m# -. bG<(B ʞ}PZPēriP jŨtI(|A*sl--; rL2qg$@ 0zBPJ ƶ&;hi%D3""r%>)=<~rjI~ ҢAE:SC#SPQR$  U *3qj8=;5Z}%rҟJ"YU.uTzD)jKςVtӵԂ}T, @]| 'ДSM63à`ʐ h*2&b܊Chj~\=n l2̡u%:$;wcz=aI|xm4B $YF)jzŤ]P6](i;$ - !-zK#]i*)|%'[ {BhkY)}(!Ę?LO(T- *thI1,W/}-?=<25Lec(4s& ?$O_X/FWcQ zDwgaYdz Ae^Ga?ܙTzPbh |`J DkXհ˼{c+TBҍhѸщP q\zUdNsVUUc%kYzxqa钷Z@?#4#9 0qq<L $$+@l8H4)K0 ,-.k]z!0YT@3l۽5;4S59c3r173.3Cp4f2 y#e9Or6?C"*l; P/Q R?T;!V[jYS5_6 \$b+c+d`é+8pBO>Nk=l®F63{rѧ3.JĿ77ʷ~ෆ7QĐʴgl q٨ )#j•8:A'q D4ãq8B8js,B9Fݢ:Uº9KC #1 !ےFʨ4ѩmٺ !/T!q3[;ϡG\IlI|ɹx+ IIII$!z;# J\yTġFI-|{wDk3,QzJ!ʣhT :xJOa3$,xC 84+sGP"2/ ڏ?j?!Oۿ/HL̽@!K߹_@ʬ L%{7 {A$V,t8#A0:S tA;AA AҤmM5☉8L(ґ1=x̢1OA ҙDћ#LL鹇[LyY 0mIID0ȐTȑ3 Im7r4HTNTOC껜 QUS=UTMUU]UT,JȬdUZ|WEPtՒP U3UqSÂ)I`Vى ʿHK#0'R/!$:!pVV78DNL1YM`S|* ;=?]}ݳW^&2 Ew ygb! rcDa①CщX E&?"~]eZax %FUޖ]656P[ 8F'OlFi8 8HPCcP-5i]pĔ\s{X٢dEERUҠeRxdd f֌ֳ&k]m>2̶,^8^T^*ɮ݄͇;"Ȧ;z^fL "%_s ͌=<ÖUwp' , ҰcN vЇU*͒nN.` 4.8 g nnB Fl:N k'N/.Mbfk*+"Ko_1OSbsb13>O؉}΋I؃>Pj7ccr!rPBL1iic6CFǬPgdbQbdlPg.eekSXCL9 W&bO_qSY}e\.ܬeLrYfR~/[je|fS .8.syF[g$qfruzpg^Ɂڅ)lhkG,驠)+k߅3CW*?yvDՓɝȁTijdOve_v=ꂋgאijgvlvmvnY3ngL_$6I-Èwܸ\PU{& sL"bwx `sMx}ʀ?lb"r%VbCm`~_/x7%I7~Ȗ !n cU..$Ty8Ʀri2|? !aY7 hBhw1pw-p_.z{㰪~ A< A.VnOkuFT ?G=;JF}_bپ~{w23gEEe^@sa";fd D e:Wt9Ƅ:#f%jq S[ =8"S]! SRҭHëts|K؂b.V|֣a*2f@293h7>}˗ϝچ&.a k~ÆwwaP+|>IfOa˛+=qÃ߱?4( .O^BnV~O=57AĎ>z? WPTmGpp6Y`o[)BI5W?8݉)އ=}O3Wè0( :gmUeLCRL>9pU(c^>w[iy"b*vOy݇.Q\SBܒ:zhryiK&bK8]zfamMBI $s}(']OuUcI}5t%ZwcZB,ZR&ݖdT Ion+d6A>:l"J$Ϛk]:\E0ŅI5}ԕ;,؜;9fkF08! bړڽS4>@s̓Z1Q[<%^wDD>qJ\t vwdfYtdʹe]_Գ=5F00^wāg7]ӬB3=ćxFsOW{.`A9{OЪ:_q~;bZ{pҢm+}>??ן??~ x@w| #J >p 4C->p|)! c(Cyp6^ oؾ~4z(T!B$N!8? @(( SXE)Fh!>s#(rqSq|@/5dg t4<@qyp Ө7 51thF=职ǐ`(i8F>j0ϩQT?`Neu|b^:0pW5]2MU;$; |pAI)-I$86h2(+cݠ5) pN04te!, _,я7=oCUq >>qrV\#t O{9!=NN0ǔQ F#~W{Uw~C?6@1p~80U\)5a2׷Y,&iV2%zdrV < ^WBC? '#R؁8]H (O54z@u|/]hЏ[DpA&]lpo+~ՉKNs_`\0G>Fqj 'NqeHvcx 9Rn,@7^l7h6Ѝ~ "pi;ߙB׺浯3PlУh 6Bw~( A1]e.HGx/y}j{>7|wOsC9AW,@ !xnx xG~//ȼѓaeD`8y y2!& zK֞Mgn ltW-Sh}#G?hzP7󣎐?U&#˭ptǢpF7f{q R@?P <؃r%VA9_m=;4. D7^^ęP͗DUAd$DBB$_Ud`Q_ԞV@?MV>d.i_ Wyޞ` DՠJ]A!SA?BB?eV9(TrOHCԡAm ¡\QAVA@a*.*?(@+".`$*$a? -͞ߞ%B|!,B4bAh V#8!$":FFC$i`&;Чsͻ_Ln~IgRջ!FLOk9{_ЈO.ݸ֍~]Ͽ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜2N?CC&ZЩJQJ*ڑ받 O= 4L? nҏ<ZÏk> N?RK-A*= l; >NÏ+i#?Vk.sj?ı@*K+b,Ɛlϻ+/A(,,̂:3*.Ύ1! ;2<#T& ;"T/N"|<B|3٦ۏcmģ#в5m'Z,>ro2=꯭ckt=[> ӵޑn\yƺ/o7yBT4C&73q E/_Oy/i,0`NL<0Ç܆6t$Ü~V0nc k}L[@:\\Aվ`/Ö48;Vsƭ=ǩ,mqs E,[ |Y}LbJ# Lp VʗkliGFw@+#E.{2NU:صXEc u5 5-b|6fd^RHO|&0MВ.;#wd d-]8R$By%5M͎.ã|rGoCTQW0a9Fw0Y\ejEr)B6m p[ V̑*wpkz# i{l?f}lYՕ,BsV> ̗b:յ]45_UF%rvַuKm 9P55H'< |ä딥L6\X$"l|@@X aū T<>JK2Gl$&Y3oDôZ.䡵rm@%Hakfcv]樵ܲͅ@.Y-'_br5oI(&m tV}QsnR k:g-wfnmŪg4OÞ@ Şmjp5?]]tkg7x4F[n hl"lFѲ(\і6B&SXB`H7r7bslho3Cg9g\IFXcojnQAlhvUmR9&a@Ȑ&dR3rW t_9fFrq@ q)I@0@ \Il@*B5Y@PA@P!shM9KsSG;}]8jDh9XqEC)paGyӖA(7>YG1i6;U[d9#)5#+ t)AY[u* ,-{-EyEฎi36)q9GM%U,\O1HIgkW[ZFxg6i*@GB,E}&c0iyHmȇ gɝJ8@ 5h\t-#lU~Z!h֟n  b H9*KXp1e&pf9Bdr@Bʖ@2ɔ:GxaL$QZU$W:3[Zfztb6/'TQ}dVp:Iu =]<(TZ 2Pxl<^Yy)cI^}<`TrZTUʩ]:5[բ RM@PtaOG.txAY4ssuHIɫ:zQW'2stTӬz u6W"Na043C651xFx䌚*DLî3x70ZAh䬩xYwHTha&E()ު@ѡ+MiKŚߘjy Qy?^g'$)E+Keg}c=wVzJDp]$HÛNQIBdKQ8%46FdHH/kS|Y[{\ka:|ĵ&RU`A}ҷ4:wjSD}] m4 wKL7l3j˅K|{W)r{6I`4SKڷ7SNLKSG+m;nN8Q32NaIf+6wԔlk6\(B#LZ09 Ga 1.تUЏ^u*;-)T%5łd˘β@qXD?jJBI(#hl_r \fVljVyЙ*,2L5\P'3ťO;IZX%hh[=Mx.JX֯ð0bĘYvfL8U\6Is2(A+I֩n(}\;{M9VǙ7fK*EȮvjoxأȖȡ7HSQsisɬ 6~Lp?]~X̍va .v)a뼴Ԩi<Â|GnS9 J9?6CuBܣ9pdKȄ<΅ld<̽&"YQq-\76Ck8s8+ :EݚJq<,g-%*LJ:jg E WTzAD'AZWKySu*Bk$<46DҶj$Z@c\nPLH[3D'3w`Y5w +iՆ7¢IEz'5x{LXk3GT0z˳5G@ԉ6x=Ls|1 ʂmmSHյK7[[_嶾|-բI@+M˝PGS0 _Kڰ~{{ᗹ0HMOB3=LC[[8Evb٣T۵;6ky6NG˼N&x@\,,5CK䕁f1,@ 1Ϳ(8;&=$.̪z6-^02>4^6^)}F".:^$hDj@2K9RqA xLR>T^V~aaEé$9Ȍr֚ Ш=ng t^13&B>ݰb lp,D:]t0Wp0ے{?WJ6iYmLz a ըGw&鍨,_GqG+b OF ^aIƕUkOћƝ,ana݌V8ܳI,L?_ξ]?H86ƋRO|6M=FAo ㍫{8/&Cs[a̳yI@Ţ7PdaWs=ľͿ/ŮΣ`刟#2 S'_X4)薿*rZoÀN\ƧP1}raT{,Ig>{'m[\MJ4/;(ƍoZtlX5NOO=9K}|LPBC5P`gÆvTʟMEt,W`y+oxrdpV@*VLJ6YV6NG.*4"dW Ȋ#3ZD>hw+*\L _a;ocKkYDqTäI H5j-`]003R!vߓ+7`kfmX= av RGܔf=2%[M7,;V\-]~ܦ[R#+CV)#6.",*")裤+G}S3(#ԌҰhԛn]c^mQ) jm={tw#blPY, 7F}ʤ$ ,Gɧ#]W,+}Fc+11֌J{|7|J0o>tH \Po/P$ NP(!<)`t.-xD0O1AD@EVTI K4R7ibQ z<,SQBC %#T1`I8‘H[Pvlꈻ bؓ@n#KǸ"| P[F6j,VA"i{M8nj nb@qHjɣi6)D&d}d%SFdq:,FG[s$'j%Fu"j)/ mkTHQI``i$t)BLmCtdjr/X9LIS>y$"6(5) 9vAjڙ$F$bߊVTRGrj2yUd╎UFznZ"xmYuφkTCxMϬуKg<ӛpGa~\ε{r$ַ45xH|HHTȋ\HHlJ I PE4À Ie }\>4/~ɚ|4ʢ䋛Iɞ ?Sʘ |JT3~Yx8ZPtJsxUj0@kz@8(_OX` ˲3=#mtk:h[?ႻmO>[ދ0dO>C<>0n+/0 n(O;r,P?쬬*;lK2Ȳ2- ԱC{* #?>溜?4Ծ#tAŃ5PW󼬺OlojCvgM:.9 q.sʧ6h w;O:|D~-+C: l?~#Zq#$6#зzSs{?[8˞;MM|ʥl?L<Ч?=nX^ =I ]z&3mlB-l9s>l^,&, {:p0uGc'!$Bﶲ2N'H|H*Z1Lȩ-T"8daVF.I2#W1!adأMHZÖ})[z&yKV"IG"L6,?FlbG6ZJ|lƐ汤dOFj,h,_[^Ӟ5P Z& 7Trvcʼխ}camBxۙ~.yN^FُSbsϬkٌ76o&4{|T_8qFK?Q3zÝ_bha>6L=n"aJgK,^"};Z ʐ66Zη-nie% N9([XrNxTyV5,BZ%Vm%"惐%hG֌798Q/1{x>Qʝ!~LtL[+u6{U=Kr%N!睚x{R9w;ogM:mllkdFWP[ڗgOMRdPI͖UJa#Ͻ|VsMWiɾptX[pnl 5󥯠 ֹVMfq k-oNc,U(5c_i~~pCu֒փ=&adFfqt)c7b}.* u$~eTTsx9IT@{*]7VcV_u7Jcdm%|~[dX{^%`X2ydj8"9z+!GiVzfȆaurTg`@(Q@xu~x@HxX@PM@PgTGv}h< 'F'Z`xd[}؉H8H<CJJ8C>KWj@*OZŋՋ'vX]& x (T 3E&BG8]mw]؎)88MgO~Dc#I@^pLot~>(X2He珲6WE60U-)iF|1i3H6(PG6 e5<,>rcUt:=|s/Q,FaiXxxUdY@n9ѳPvQZG\hM@@􈙚@hAytO #NQx{pbx)z[d0zIX~z͉Frc֜ ln$]9Aל[Y)zuy7E`hHhDdeDgq|1Yuhml06iAɷ,f*4Ih isIOJ';l9/WI3JAbbrIl0L\1A\@ElvɅ}CTJNwl7=K 1[J}O ]v,ϖ95P7Yeeor(d7G1^n\DJ{Eʧ#^]r"R n}^53-`:*:?iJ(O$8zCVㄾr\PspPOBn'y8|,Cz8b32O'Iw\?ipȦjx2"#!d8SLpaK 5Fl3ĵGԵr;ʿDK/ jldʤ eF23^pHG\nփ4kHme<v6*Pj4<~X*؍lcb#4ôR|O*9,p:|[v,g!Tm(ͱGQ<[{ ^*sla54֪9Hi m)2'Dhi Z n }|CP ̃tחUE2/jBúk?r`-Rª~B[B8 o!+tMfwpE~ZY/&vcW؀،؎ؐ22ͮ)0"C#Zٙ"sM#"뤥=#% ڮڰ۲=`+d||xL ۡkU)igu)\ťFkǷY6 VyܾǚF=ge]٨F *V"͂:/z.ᇢh80PsVtǣ[˛NIù\f`º4H^Bfcuμlkhkх\YlRU3/ûc{utAEDnD<P3ynr3gYB X,s5NC_n+&yF^Oƾ!71k+7+aStwm<0^.>Z5adnSZ JN*6&(lUdGq8cQ8l3rB5P<>N*¢T+("9ZA}ըFRh]yT1ž$>wJibm̵L(4bp>ļVn}( N$?>^E^EƝk*>ZfNqd\7Qi iG4 c|[O q|N|:\Z0\~K;!Xum%6a (C**\[Xr3ehI;^Z?4jx38fO-ӗ}/ Q՗aa̐l6a(+L@-=:_L{SCv@\D||)(Xjoz/ҖAy ~S&X]/sݧ.L/  J `2V<12.sz-2yR!^˷D0"SLDM3ar97la6m:o߰ax>z :(qŌ>LoÈG4Xѥ<,80a;Q%a$ZQI.eSQNZ*Ņ7)fM1mj1ubj(}Yʥϭ\&R˶H?d |.Svj1A@MgСE&]ixvϵ\~1l`)9ovԲXa5,[EI#S`3CWۏ2jկg߾걲f]MПy*TՁ'N\suW^{W`vXb5XdU6W9*ZiMКvDm[pw\r5\tUw]vvN Iܵ^|хyS/x`~Q+0va qU&2OWEb2HJqdçwxfkϐN#0Rȫڡ]qvBh!xjӹP-"k,-ahȣ6㤛K0:Z3kvwSӍlT>~Z+|n9w\oǹfkYoqK_6)R+ BR,4.kȳܟ_RtFE> 1O]nWQRQg~{{|٥Vj۶|w}~C[ة ]5mWjo^\ %W?NK+ȓ(9)$6X+L`rБt GAӠ3*`6VEPpґ|,:?Vf(d.8J9]({rs>+d#!Ρ([Do+ c Їߠ&6 "B\B`?}=&?vhj>Ph'5AFr2HGGc%i-{9c)1E$6(j\,  ,KLZ_&h ȴ`'IeQޫ?5D,o.'d\ffL9ʥ; Ќd9 0/,T&'igR\1I )GP ;p.ĕ$";^"5be,'2OeVH E/@n^ $qB* tɏ`, ,\ r&*.j@GJEӠ%d9̂D[Le5@ԘC!dH'(ghڄt*s,|}bю A0Ә҄XYŒlg=YІjݢ*n)mk]ZVMAՒHG1!m}k"*RO[uiY/&UQ.s p.weA`P)e/ԇ7UdI9 k^)Qj zV$I)BW RP{` ձ8c]&róHjD.Wrj#26S*;4iI"3SbD(Q¿#&O2ƗOA?knE2z~%ZWc,c7ݜMOc*/Y;Ro{&S$b Gs'{..[)̶ 2I--^*4A28dδPG"yEMZA3iIyh|dLpI(PQފ!JLfi, Qk(T(kaɺ]I fA4Mez:^QEgb}nowfvXe i2:wo5krH{7V(nnqr4_qΐF 4#Pd* /jr\<|| ^ׅnDV?"KBNJV_?с]qZdRmBԄʓH;DOOѳГU䢜;zuW :D;(ho4Vk6rC,07/*:,?\! A74+AL}<2-AA""{.*{=t* BM+BAXB&-"9[ 1K#0 /"J B()-1#="0` @ +#C yy C *>'3A˥ ʻ:a +#1 )_;';JAML 3%'4Ƙ2@6Y-3/g5 Jˍ;c<Ÿ$PDۄE*>Y3Fˈ5K)4P>jDp)ś *B !d*] ?^w.g6ieGpjH$YL@ZlIPC6Dz\ɚ;IɪP,J4JDʞlJP7Jt9~^1׀psoet (JЇL˥K8/8J^1/~KP}1DˁLl˷t˸˧K˼ˁ_1¬\P 4̥ˤLp,'&׈JiHzp88yhJkwxioX J,M`z# u@YJUx dNSsxUj0Xq@`'x`tO4tρ(wpm4 ZV&~_~$e1T t Tp}.rTJ(~2" jOd(x~p.npL,-LʔR*R<~0PXp}@[Yi臲DO|R16~=͇S?@ԁЂ~8cȇQtK1P|e_~h$$8#X\$O3OPTR̃(ρUYa8| R@t8?iVbE gl~ rt-uvS~7Nk8֢ȁhpnXN,X8X |$]~x%pO4d]V|WV2Sku{~ptUYأxQY7-K} IiP-R0Ux(HY54Pyf(U8KWXH~"["p~U\`V[[u-NYoW~ 6 HۺuW2WRܲЅ5~0x݇]`~R8`Q 0pS`܋m[(lR@R~x1پI/~0/V^`^^mL\:n-\JCFNd !j,(QW H*\ȰÇ#JHŋ3jȑ0<Ÿ#:v 0XK HX 9sѣH*]ʴӧA#r! \axT.; 7D'AKݻx k10#Iɾҳ@gh:F\ԇ4q`ܓϠC}QZ_0fi (#.ZPl2ӈ=ȓ+ a-S"`Q P^ Z^Ͼ}',Lbb @=h8 zq( UhUA`@jdk b@)1$J8Y8"_uDO ##R*Qma,@h瘓PJIdifp(A4Z1 \P @qٓi@{袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,3A|;V=tC<M?0$CLӼ StAOBWB\vAV J[囼<DtΌk03@39]~=Üw[Q 3&w|Gy,8 V[ 톑 ~Vߊ4 d{^u-t5£hGrt?;Ή{G^AkI"Ea{a3Qφ4ZٶznF5^h9?MgDkٮ8c^.\F~C;zc vHD"1z\_+Wx@$d!Ww4)lL_~I'nPv}pmҍy Ai#`Glrf[6ϑ'Aܡ?hqTy9xwfs~8+UhjS'9|jճ*RU;XܑQr'яer (%ئHRqrxmF=Ah* aE=wd:A=qQY͍o@X-UuhHY%"Odv"n}+C^8q/UY־ZF>:#n GHR#$B $CD(ؼX֢Ų$Zv1Et+VA8*Am78H9E6wUrssRgT@/}^`=N[C!]n{Izwmn}(όtX)׿u>op׻2\Op.?OkbڏQr_;?UibUשe>gg"ÞtC!IoxCZƯSTӿ9@u愷"IMZܥsRzwn|'qhkM< p==ūtGR]ċ }KѾر);w59W-_ϔ߉dB}l~7\hgPx8x\ekKÀ 8,({ݧ8#ڃ``O(xuEkTD3<'a^:ca` a3aCœaٳa&*US46"v>$vYuQ'?3TdgTbdNwA'cvfwcVc'f+fO*phGStvևMgADWj5XDhN%o r`jnF :st;3v&:wF4Vͤl (o6r{Eto*=tJdE'WZ}$XK.'3Vhr6GFZV47(*ee:GF<7@Fd;]~R@a'sOHaTΦt5geIUv|yG|vwvՉ)Qu>7 :xE_gN1U^$U7g5{xz7UzX%ʷ22249Z6y&VA~WCIȓHJҁYrE9%Ȕ巓QZ\$N[UiY[wŕvCh!(8`M%KP]#VkETW:D9P%Ga(|9{-Pѓ;UT=gAx]GeJ_n=6~CstmzmScV@TMFAc?=2%46y9[VWd~q.V;S¥dIe6B`v)f,g HIJu6}7<&18@uH?釬y@%8(~f9slET0eIuY8<[smu#_)4g+ZsfnyGlRckwL8o *(O8L9}DS]類pcSAy&j)lEgt:r%"鍞tQsn䝫MAGNdVIaPu846Hc4ty{9s'ݘEh\0/WuW6Q wCZG;H{"5z_x~y Oy:EYQu5yàPisJI/ōz'#VYN 6p2Q~zWFiWBڭդ}clו!5Zgʋ6fp|f[SI[% Hy~*ڮn)"85|J9=&`93I7FȃIؒLJN9mSbl):mAI3ycg?9CWДcz(cZo `{|Y0Wf]VvzsTudlfؚC@HƮPjN4qPLFԟԆ}DhN$v +:; \&FW9砉 j*zB7GIZZ94phȴ^+ۥTrߵ A%rJ׽FG44#7;JETԼo㹠;Ƽj4?4Zzl'Jۈ[*k'okC7Eׅj_lZDW3$P ̏ySA7hgeu+u:Ww]*s>ApGFJvx  '1̩u{m;. xfZe\?z.zIj|L+ޫ^{㪹,yܒ*a jɒ0l6jAvE9:ϫۊ[Dyɨʪ/rye1⛁#)@9@q*\z x˸5@3@P 0Μp; ])m=Wc9K8?<͕b;bU5s@@&#&yWӪcwITLN=>|4 <=m)roݷ֌ْ=٫tL [J}y$>jxJ  2 17 Bڰdکٟ]ٱ5Ml0̏b܃g|,_#jVTʸ ݷД4݌cc5@b_VBe4HH6 L)$i9;@AQy.Ty|~2Nݷ c?3Ѝ ~GmnY8R臭-׻'(NyUNH#21^_<=al޽pZ~H< >(KЇGpLӿj wyشA .dC%3xpx(qS W|;oX~,"y͊6s3y3IJT'ϝ.eSQNZU.܊Hjpfeۖ޾|^Hsw_'S~dy{2 {7!Πe9-cgСE&]"8Z5hHA6֪W꾎'^qɕ/gpa5O^uٵO^H>yկg{ϧ_}F/M'DK0ʒ *p? +A⧞61P*cD"pŸL$/Q  o$џ tC3\(IP )%t*; Kͫ a'wѧ2G$/L{҉2Tz Zҟ"M'R2$ P84/@(PDjKV5r`L ȉ q :jŐwZ)Dy")Њ}15QGEN= ߩYfe !_9a۠wF2R)G 鯄̪!`b>J0z>:kOz ?]"'ܚQߪi"H{K%_5hd@0挷ĭ=d˦M(1jNjx R\T鸄S$ej?71B/F r Rt } '5HA ~ lل ԉf _<ШaਐjP7#c迳bl0*ӑ5HQA|x$HsA!pР9yji x}+=Ap #(AȽ R8Z6)qҊܒY!- 2ܜ(;BaBŐ: ?ŻF: KAhHFpG˿ l;ğġ4\Ei$̟ƝݧY9J `[(&a!朡~50M LːYM͕AUUي]kD\':TNkLʕ)k:ʛ͕զ Ƈ*@Xm)UR@v,/u`b!cź"΅E:%\'֊؝8=Fq Ǚqc| 1tוZ\;9iܚ^U*38>+2eT^pYZ٬pҐeY"Ve\e]eSCcHHeb]NZ=6y1e,| >QIVi9}yӖ7lfga*@DdpmB{iVȄg}[oR{ޘzgJTud`cKT d .sI(¥c[>"2\pB>hK))b^UfyP $sPV aUσЖ{++X$-֭1%۳1f/-'vX r:B묃 32u@ T^-P )DXk+%C..QʦŤF8EM%j]1ՈHȞ U Wקg3` }k]!_ 0JXxX9oo^3`No^onoavr(fI-u ev Ih%ounqnB3gO v^hAt`R؄@!D܊`7NKHL٬T^,W+ojӊ"ɝ`HyP%(\&V`ƌ ^)A' ܗ)|p8/kMhE>K#RO>J.DRNCV>t_ECEU bkֈk+|p1=5>W~% DF *jx>9aUBIJO_O^lxQ@lYQ&2 l͚-w'РB-j(ҤJ2mN \R*֬$7 Nw0'×0}gj&YsGoaO4eLӰ`/2n1Ȓ'S P3ТG.m4ԪWn5زgv-8ۃk7‡/n8ʗ3o9tѻOO7ڷs?wynI]+͐!5]?5[OBS`_3GzN6Fs@wǿ */G=\| @QP  =^.0,aD T [<n3 7/rC` %x&q}(??P\p!HC#0 |{G|!?;vF 6:HhBА{|XAH~0%t!g>NJ0N6<%*TɡVLIҕ4[-C[G !,Q7o0S<0TF9#I&3 )H-OƄrcĉ&cCQ!7,h H*\ȰÇ#JHŋ3jȱǏ CПɓ'I\ɲ˗0cʜIM(s tB *pw`1E>@ VI<*իXm|NTJ+v ^M "c̘x( $@T*^̸ĭ]_| Kr,сg|+8"\*3 /myӊ|d|B:/;Zd' '@<w-T!@2hv{DuwD5|- ,@XB%h`18F pC $@`qL+FX 4h@/jȡ J$ ӂ峂)`^D^ܓPFp^e4@?T!P,C B,@Yʬc^)Zre?bi?3ڥ@<|a389@HE"Zꧼnj?DP) 35BtC SRvQ)`7h?H`O4C/I@;c n9B)+PЏy* P2DA png#{3q 8hMEr8a@${l̲@/K ?mh'=p$D2܂\$nq.3u `0' #@8Mg?1h#B*1utۍ<3s}w ptNjιM_w t1< @g43BG@NzCoܥPF8{z=gK5X@DO=Ȳq D)bU9AEfdWi"f<0!0)6u n0!3x߁GHʸ!*N.P!R ! bBP`a?\X2$42 h01"+3PG*g}W2@61+L-b n(E?j%N9 \? '7Q $FCq6$%- -v񋑜d%/*OzUa3ɘCx ,*XO @/phJPjr4%*UJA(_<  3A":8`>+zUb\Ć, H*LP(04`# E+`7`A@LY)> H9@d(ytJ= HNp(9-#JRB $10JғT,5Kc:S4 a"P Q"8 nhI"3.x8@op,Vr Lcf0׆U!^@bH><5d=H`JZv$;_W'|ef!kg\p2r+|HCF;Vͭnw;:-"+]\ୡepAH~tZnezZ# w/qK׾뽯~_淿ۜN;'L [ΰ7{ GLaNqP\^{Z+g|X}1w{Prt"EE2pdVI L6ge8NeTY_nL}C.&cmf1gg3m|宕Yx^Isgoȟg}9#&HDdh (MWќ"ch$>W邬ֽȭRSuB]*x@nR=is3v)GΆ\=A㶥H'aw*ģi:Y 0={ 9wmrS{oD8@1o 97t7\f:  @O;q iHQ6ă*ԤH)PȔD-Q|gZ_z t@ Kan(F9*钒,e, kTRW p|aBnt+]F@pAQ"T[g:AL_}j V!; ,ywS+0CbG]y$v5a„Og}?ƐO?%)~O{Di@N&T,aYGOOdT0hUQ9UyDT&tVj4\5Gzї\AvyQ(%xP* x񘑹'6kI)i1q 84A9 ٙ{HgZh^f™ke&ab65-ũVI^ֹٜYg\cYkѹ5Fby虞깞ٞٞIk9 9:Zz"Vy™/1 :dZ:Y8vvʙb 9AV/v(Z*$13ʘ.9_vY!ɆBZhB1lOFQ : Q EfHJz~a1kcVi* Ep@xw"Q*BIcjljhjtJp^vJ *Xq' _ŕRBwr0r#5&To' rlWpm`sgq Nr-pm n wpF.7$K$ !N2&L @w`bSM* :X UjpC$ 7rw*bŨ[FI{wvSzyW&euJuGyb7! s-ٲ-WzOwv ڲ P biaj OMQ2-S4 ~*5 BP~1W(}AgZm!rWs|Kvq~+X70 ىVHV p EPR˹kӄX@e$:hȂ}Zȅ_[SXU8lqY[c 1{8ɫ\%b3sк)%Э{ m =yC|fmͯZ}he>ʤQ!1.V .KL Z̘ܡ.KJe*n,;E:6MI1 _ N}[WR֊z,KK-mMՌ:A1Jz …z̽خj#Rƻګz:V7ʊsj nJa}r#:J ڰ}nqپoJZ Izpu2Y)}G, [L[[wwToyNL7=s7yi] ׳ز߰=,;>lfw.:K*+w?C;kMWAN &n !2<#4[k^bK+ ˶綆U0WUB嵰]AFn;۵1L~W~7S^9}H˸i-~X񹙻)p-~ -T ;\5 3Q(7MkQ>x8T퀭-CBހ>_L+&H&k!~m^<(p웾C?H b[|Z|+;]QlȊ!þM h\uZL5O`пҏkυ ]Iܯ2 ҸI $XA .dذ@%NE/4j,G!E$YI)UZnλQ90޾8Xp^yK6kZܜٳşM*/AҦ.x愸g^9 kز#_JY/;Zd77M.5 ̡j)k1JΡK'諆 :ySŃ@,`p0Q ָ6 2A>o@@/;hrh3ܰÁ9yL`e26G-ǐt9 WfG h1""Dr6-V*/a zQf;,&#h2n'Zs~!2:*TOa}xeFnd s'~<Uԁ0"y cj Yr׉vu VIVtqbMXdeVjhTysf)F%(٧ˮ E51@ȉ/*ہMT߁!~TYQ7! 6v (ą8Ą^~ ;( `Ye%Hf^J)BZ hfp֙gZff u'MuCe gX0޺$wSSzo3R ry5E 뙺ꁚJ~ ?iDpl{&Hh\$ ehٟ97ԍf@|pL0e $NHuh ~7 ]eixYMv~kHq5<բƀB?ofg!IYjֿP@B37ceR 0-:L pw7aV`?iXڶN .V*8DM :E?ġݱk`8+LF  XF?=5эV`jSL cCw~Dr$/h g N!u0`|3(!A94H+cItT@=7st%,e9oHxBzL}o]ќf54`# E?2~h2^dĈh81c> 2iX eHЏ<68( θF?e T%iIbRPT4*őE"؍t D9TshZ괧" jNR$,agNiS*CZU-*FU/$]ʚ.QIg;*nXMr֥+z5de%rY B؟ȵ*e]Z0lYLZVZŰuc+hp=.$Pyn< 88NrԧD}wg A* Wnz%ȄF9B IpW<~A⍐+NT$h @.hE-zB^ DX"ɈF6:-ѝTEe@ )I~pKTNMpt;iO^|5ĹÈZnHL BLl'Mo(U/2#8ApQ{@ 0:X)z2T* VpK=Ed! ЋJV<\IxkqAUW~_= ͌m,ђF. +\b!2TVݏQ(.AP8;tngf&_Y*--nPZ?aMkf5q-mkôxȭp5ic ``݃~!@ pF&W56DJvpYsK\gсYcnZ~ 42֮[F黣RB˾Fz@v!@ %}>MK?UFkYW?^R)@2p%E`@ ,X~@oW V>~ +@P@SYkBor:t$ג2A@zR׬xF!)A$IZDUCK\M}Z(A=f[îMe} ›+d -d/$e+(|[=_Q\*\ͤTčdc\w4\YEJܦ Cu(ǝԼˌO:\uWEiɘp0~%Xy({ {]]u^ZтUl] ]Ɓ=28tPzH0فxUZFy-yT$ߪ Oz.@_^V5hX7:Y5`` { .ʅ)2^mP=OA!E*E PSx P|e V̌kLCXt;MqYNaꍉv] "jЂY1 c]TYO'NLbM&.n/0]p%|y@&Ђ~ 7.F?9 Rܱ:Ӕ`;96 T)d>Hd F>EojZ8/҉~崅 [ P ԃ8[= =jWS# %RVmeֵe0ׁ056s{$}6x0LSvv8aa:=ׄ@@dKقp{YYqg2Z= { f v"Xxogh%敧\)h%gY-݁:5˜imf[ CNꐠi jbiꦞDifꨨjrj@ej/j'C vf$k*؅ݔ݂xO]fMXks^pli9pgC:mhhZ_\jop.7~ _(SpvC6 \. 'i38 Ng^ɀJi>faT!)2ÌaHт&"+ȘZ ' &Rpg0$hh⡆-F4MbWNtIWk7 HVNdFo.^pl@1yZh8oѠ㡾cQL{c37z7jz8'mc1x>F_d&R1R8%S:~ S'8qН w2x5 dV]妒ghf%7jV=n۔'e` 3W tFgvHG9Xvx`tlp_x6H}~gw-x(ߗ^{~@`?fRx}F_G fD8vJAx()v`( `c2i@Nvtabj2lur",tObzWdvPۚ5yw{WwN JۀT'z xm|jɁ3O6n fk_xw_x(W8XzSx<,ywFaWTɅkEمx4"/  (~e6yuy}M7klc1 thokԍ~xoF}-8mHqH_{4"I~pDs!'0{p!/ xb` IWf'ԆD̷ʂy-A}nȏ || tR ]ib%oBoΐ]s}{~o}vO*:}yLtXhz@Wnkф0Q#H@^~($lÄm8̡*) ~ܘ@aĔ*Wl%̘2gҬi&Μ,3)gT?*4!9ʊЯ?f ]9`&ϥbmbڏk?F_e0lq޲zTB gT?wʩ5!a+^엱ݼF x,̚7s,5F$ұ6`j1xp 1ALv?iնuېQ&!0૲6~LJhe9~h5F`\D#.nh~ѧWO];= `= h <%r9-x`HaBc;=x Pp"c∶Oq/ l$ -OB#PP RRO$p+$c# Y)&mfo}/:OrEg?z'rZ/-dώߐu) k؟uQJV@ hA DyBa_oTVXB~ iG's еLw)[B&hXD7 QCno$ I(<b F*V@~P =Q@P BaHH,rJ-%$ FH<@9"!~ЊXbBpzCx i W股 ]E.t ]QÒ#~B62E$Wr]@!sxK@4ҌR _CFWR| 8sts`yǞ+Gб|(jQ٘ ɚf mŸx?8~%O g A@0&2/"!  (Y\6~ HA"Lc^) ldSp X>Ht,HF#咒 )ڏd8(:Ƅ01q("S|PQj`ˀ;Iw&5) 3TaԊkn Δ(9΁tIqF}W{5w? P m`nw۳hur$zCBR6cFkicf"St Y؏ $Сx^ϼ׈@4|pFvF͘-Dltc:!5Hc0}`<]F\g[Kmﱏ dVJU#2Ld?6ʢ A9!2,ٔUXLp9bD$B[")"!B"*BL!"-nYbЙlb+"XfZDT 06c%F aD4jZ e86(DCʩ*J9:jگMN#8 [?Z@=C !cBO,ϿKB (BB@ϗ[yýy[Ca:1NũIùyI Y D3-C:V8A< H$ўuObIYMGJҤU?PşB*W]?]BeYUQ±O$])ePT  XZ"2Z"<^K$D9@C.<_E%̌f%&eeol2$ATc6>܀| >:5'_`ua/ЀHD>V<X!l!{.ងJTb؄ >4P ^J}$Fɖ1)ɢƙ(e)#XBʛRbNg8&S"b.G. ̕Jbb*h֞=ꢂYĦD~3b,:P5nō5RZ&8dj%籔㧊*D.<ΩD́=kC$+ IAVH*v%DO.@ (D@lO$!G[E`YH"fbRf-=DpMN] eNO\UړP ʡvkChA<:C-QN\A,q4ekk2c&NíUD#)meBxaJ^߽]A-.@?xڙ*e\bE`~],2WR3`*yt&59mS.2gfBtmӵJBd?@dh[vٺE'PC YrZfK .QMmUW`_DܗKH.Zn3 Rds.vjw閊,FέC*.' _`dJhGV`?oKojg30cAV_% (o^/:Є`DH<7.Í(p "'- vD~W X}կg/4C?xWA[p*p!aS< 8Y6D-LqfCt\ 1F*d蜯i"6p1na'O1M[bL)ؤFk!/1#OYVdGdYwKhY;Q5y_V?\`D6'h} ~bfNChDSO7:6/<HD C^{0es} ;{aW!%(& LF W:hhDӨuz&_IpC|uLPqD;P8;0A4ˋd*= US2$;l$k;Xo%%i&~ q,3Sʳq<Ǔq *+0Ϳb$> `F(|缤i[)X-wBP2rgƨy6[4S|H}hsc}s׏E=ү=3'mRaMk{ hxO+DC>d[@+H봮L[D~E۽}oKcfFKJ}(5Ͽ%SK\D` >QɒPjoTQ[u>~'Zy5|Oթ'J8~ޯe=d6nfonQ%)%q7mӹRh j%kk'/DdN^.w6׊U?^4lbˆ)`~ЃxF Eܘ@E Ι*G$JI6!#ZĨ/ B3\TgV[vlXcɖ5Yk -شlw B,DW:npÇk⭽pHp&LADr j`ѥӉ(/g ׄ@QՊ-W+vzt!V~lrK1xq ^c^|J~1Q"BmQW 2Ê~`.&#Ȁ(Ĩ[Yti(@!`C‰xQ!~Vbν}H }e{lH$d1v`ǝ$@@4򱳆 B6LX:PA#$(%(@~ΉҐ9Tҩ аg3\u]e!0aɼ-x@ v]Xz88"Z(}eKZj]>7c[Mv wٍW^e+p){\nP^-ފޅu0ʷ}헯 ᢫d=XM޶ᓯKaK!qUufpNx#{.oFci]khE$*Q魵ka,h"lvjj븧 _80{  >'O}ȵWгj[u.YYP׹K,v] vAoӦh~KEvDt_/FOVg2DrN qB B+h ‰ >QO8{0@[e#"3A ҏ%6ɂ!(l"Npql)Rъ9a0`nc/:#dQBjAaR|@]pDJ8 q|d$'B1x ˶"@?8 L{ h%OR̲yf'_@/}2]5@f!2b-MҐcsZ!%L:2 !7Mٱl#eDpr$9<0a^%D i`$ pP," mCa"2,hF7ћĠd"%VΈPڱ xC7iy'gfM?4|f!MD3z@*&5l$r~\jD~l&ь D@Y!LEHSٴmi޼ӡF$4GaXP>;ti'@*PT!9E0:~C\ m! QC ,D0sTZ"ִ֒U0Hmoz|E_&%Yױf.%HJV:D wlN M_d7WJiNSԧ?jP9U ! eP-DEPZ L4`# n8U\Tn05  KJ!b, +ed-Y`"P V1:9NuZM*C\1B]J*D iVs,=eu ]hc-YȢg>CY M8{fJ\hG?:i&!FKә]"DP[ԕ-gB"sfmjeI=Bno˯Hq y9TfΖ2i:vn=:Qd׼~k7rߔ.熈;."o2׼bv|\*z^?me ok o5h k×(`b2~$ؠ F"P>9 qPp@{7 Xh6, da,ȪA=G?%o*B$b?x`D$raD(EX+f+x4jI=4ҡ۱*] { hF4d7!o vDG/2CO e .t$$% |@0(EIt~ҩ,[v;"D;Wb14"md{$1ez%o Dx_3o%7%OʷNV `Nv~bC= r|/Op#V*z,Z +aNJw'On5O0J8ʣBJI5L& "V]Jo-]i""c/.H.ߔ53<@+ "JL b @PT6| A54+ oˮ"B 'Z !E!J&ڮM.E@H+mM?L`&&Raf2g:=X2':&`М)R1M*riB(c+W&+reR&)-i,Of-U&pRaR$"r---_,,۶ "!`ۺ02GMosP EP2a,2SG؍:HVj6`X1UF/"'{ 6."~h @`Bc*tszZN44}D:"Qbn3h1+ DGtԈ"&GP310-] " &j0`RM\Z8k"ógGsD/EjEݣEE4OB AU.L?p3 ЫM9LF&b^c #N߰JJ#K)4'Pa <ʹ"11B%q"h ?5rѸAaRi˶`OUtq;.Gw` AaYJiXe}$fgfqza\w6sNHRYO-4+=iwgx9gjV"XylG77?B7OR. & 9]""d"o}ٔW=)Br.w=nYYhYs?7t#.rtfu#T#šeuiO+rL-)if:]x#B fG2WHw+xmLHKɥk}E|р|W$~J?){+Úwj+Hz" Ӻ{ ,9 X$+gڇ"7k+HK'1,1fkGOT_8sSx[ ԋypYWy+(ŤX)-Mfzm E㉣xȌ &[e7bxљh[^ۣ_'yٹ37=f"۱cUW ۔;[eX + j}Iw "ې0I!ƺ2C|"hvu+]z;K\l"bhj= w~!Bh.Ɓ%'b n`FܽM\ S71j&Z %V@Ƒ # @ S HN" 929CM \TlZ ZI|Q\EEo ηZ<"5bh` @AGb`\O  "?#I_݇=34r<"-HЇ 7d!bj(a0`"Fn#ڧu (< T:(IS2]O)\dO9$|p@ a ^( !E,y.A9'; z@7@zICCKyz/9t@%hG!NA "బᮈ!y非I C"p˞P}~#bJT~]$\^FEQ%|1Tq+"Sj P~QFO)'M)?$R=?d*}~cW~Tq`t&" Y MlSZ}/ '+R%:%Y]vk˴o>rL ]96 =N!-!]gBe"~ /„:|1ĉ+Z1ƍ;z2ȑ$K"\P X&z4WVyٵ~(D i=4ҥL:}hч8ZXUbV.81TW˚=6ڵl!<,^ H*\ȰÇ!<,^H*\ȰÇ!;,^ H*\ȰÇ!<,^H*\ȰÇ!<,^ H*\ȰÇ!<,^H*\ȰÇ!<,^ H*\ȰÇ!,^H*\ȰÇ;pspg-5.8.1/screenshots/video.png000066400000000000000000002414201452457446400166740ustar00rootroot00000000000000PNG  IHDRXisBIT|dtEXtSoftwaregnome-screenshot>2iTXtCreation TimeSo 6. března 2021, 18:38:45. IDATxٓ%u;r [@pD͓LL&q$3LziG$3H&d4ZHa4FUݵWww?z7]ܺ:3sʋ(/ʋ(/ʋZ^(ED۳xVd,yIxz|Q^{9o g[wM"gOz?v9/ʋRgIc+yo. R}|Z-x/ʋyIkqZDck޽'`_7|"ː{@EP0k},"-jw(^5[O~1X,~/~}Yϔ"oq5Pevr%bE@DjZLZ<'21ѩw߬/nϻ'_s^[c#=_E!2Kc=5VHxcZKYJ`ư{O]\z??歷"2{v35r*EQ}@j (S)!M0 pUkr@c큳i#ݻG4Urs">Mm '\|˯|[l@M`ypp͛7y&|;chŷ|Ay]0 "8z뀫[ٌom& lmmM8>>fcc`p,F9H ZrM]KOO^߼4Mrd8|_9d1Mq}C<|_eYp8$&<`ȍ%DNfq?'L} &IMӰX,8<<,Ko;}??n@>6?"<l7qw^{[n1 ǭz9<vƘ^XUbp~YNMCMt ho{N8zi ^s|UUqrrK//~ s8mY9!%'''`~z*>wqα\.Y,\pbcʲk_nbX0dt:e24 7n`0ܾ}OQO_ 9ᐿW_|GtcЁm],K9%vXwzy^ * "Ԟsa{C_~:5ΕĠ=428>>*D[nK/׬slZAqMpttݻwe`[[[4Mt:sʲҥKckkȲN\z{7x,ޓ9ٌ,y{9;ܽ{<Ϲr x>'''P-yb<{yNyεk%}~|+7qj~.` (U|x ý\͇&/K=jnI7vp8(u5v<[Y\z,peYsJjc dYFel ,KEG tyηv-Ɠ1EQdBUU˽ ^́fN7!2vmK!`e< G)&RwysuF񸿦eYKg1^{{D{;ֺ!<ɩbF=EQp5&I/-y#xI#1&WϤ.vʒ(SŖB $b(Bg~֣@DШjK\E$'^YgQOB`6MI*uSg9,bz 9j]QA#$"a??XaH"q qޣ1p"B7qk1yX]Zb I,iw֢(!F35z4 dpߴ6+j(>̱Tk,QBDc$39lVb$Ip&Lk &k!m["%PbZKRкP޳se(k,$y\===C=J?Z⹷1l7kOXQA5҄ē6J >IZii#Db z"ZD1pfb [1.KF_ m=d"ap"ұ=lŽ=NZV,v8`:ޠz #^#0ٔ,1X S3@c-DI/*H/*,F!9y5!z|U1nPׁbTh$Y3*NHQ CbDq%0vY1 Uo\1`E hd:9Q;%[uquEA T/\S2ij=Siem& ƤW%i\Ti3gj;vw:}OiBzNOk L[<\L=-> dU0a (4}|l$j$h[y|H$ӆ2V63$[UCYX>P)5?>_Ͽf*_ !o~l{Qu98<a{o_HA1ݭ yIUE Ʈ,,9<>&|8bP ,l⫯ð[e$X?O-},+pKAJkˣR#P'mIRpYfML_G1*Lmy g[Ͼ9={˩qu^l*͹$êj 1hI%d9G,˧˧kSdm`KZP:7Kg5;} l Xޯ#8 1+y?s* Dk݄߸|Wm.($0MPeK/Dۋ;4bI~ Vd9=`s36>[ll/ Ym$)s9a,\\pdcX$k8`0`1ItHl9/Ə~6o8`xK;hӂoQ"Q+Pn X פ3bJ nzNf:B]b"@wzjzPg}-R3# ^tO"&?ıcq;5E[lJpfT[)X8k"3?E,c3˨! 2_ݸ`8@5KTְ|YSg;xweY-޻Z!FfC=L:ImRUKmm@D' kA9l8rF1SśYD\~&ޏ |(VXinN!BT7Y |DDOU-XuкJ#P&F!hȴ8gH> r>Im}Z=k-q~Og@IVp;X26N+ԜyyY`;-پvUߣYڲ烬rs6'x8 :ryA]W'cOKϝd,6#DUϢHGIuY^?`琋 OJUʭ-lPˑR-!a9?\FrcBkyW A˹,kY~\Hh*Ph>}q &Vi@:QCUWB(bV43vKD NMi!y; QrX̦!KjSV)\B˃A QUךTPE&avЧ$tvTǓT.p=JJ&5~Zz˙r{>{޽]z< P9GsTZWIUMRVkq՗)טVo8tGZ6oW`\AS "wج <cHƐ%:EΫ֌A%cj#y4u34 YBc]R5`&82I `K&RdS ^ɠMFJ]F'F6XѶ^5D1mʷCMr[s88!$ !&GT$*[\\"PV_gX=EH ЖV}g!vl鬜Ǩjȵ>дgAHn83}lOIׁzn:eIYZh?̯ѕTqXk9<:GwX.AխpjH!@0lm#w(W9~gܴ'>81UBx6="+u TZi!qsdiIolTޣ"Dc gv5@~"&RRB4kV,Mݠ2Wb2KS+͢By,Q4"L4ڴK艶6}}R!XoYGrщ!Uvw>^d -o%*k Բ,".C;YWm:mr~Q;4^]o-$6잻k_ɗ=}1D'3n{bڽl="$s 9+HGYr hbȜap|,1}&-n?34T}۵ڂ[2>MLH$jC Bcׯ_Nc16$/ mڿ (!b|13&k\`gon|L'?q\QY2 k J žcl x!i @X4PcDCVl"0*hC N~ot¼%MmC;M*o%V݊S)}҈A_1=He`q F2 !GFL)` #4GTqg]RtLCbZ]NA0!acD*Zİ-vڗr%|'(dA؊?y/D9zAQfg㣓Krxtp1kl{3t11/@0HC.9W+6.cVj):ic6O+z֣4t޷i oؽM+y(0 9}Ooc GGGjIiKB cMd0dEp0ˆKZR# {{*ziEoiKyA$E|| \vGW_wg[CN 6en&1b}KG4g|99lo^AJc09^aId˛X ͍G#|7 !P-GޭwF#)`p.껌JKa+jQU11"6R KF)"_&?/)l@-))z.]P,+o[l]ÏnD,ӈUV\8& esspxQfT W/vvRk9 T&r"t)=]$vIHf8:sJဟ߽]/5޾q?Gf-M$5Nf|?_sկw9:CV$ZMcZG] +--wZSg>b΁1Y.]$T0&ѳ4Za3;rM$K{ ɷ yAI詚圻VXZ?>{zj{.l]C)D,ҾW{ħЌ`kΨ89 7|bWэ9˪݄Z!\}}bp_re}>+_:P9H^d|x>b+pΌ`7T 6&z j  x8:u|xcƫa\z}%rɗ&!_7x镯3gX`m.C446痿z&^֝Ef~.\(Q _ȕg1S@M8؟TK 7!u:4}wA"@d`)wwO4V9PBa-*pp4c̟h TY/|@Nŗy ~o&`QIgɷVu8.*`M5YC}8+s,14Fї^on@oxƳfIůCdtLz-E1[.?kz/i*e F}󌞅y\[O?9g:{IWEi]ĦKkC@#gdU #~_kT]K%Vp}M'`DA ȳUH#Q`tYv(O` FxxX\ > \eXaYM F4+`#S T@i[~!b2޿q|x[0,)o-|_s ,‚s` J$F!%YȎ*UD-&6eb5lo␔ ŀ _8K瓅9G4UJa\&L9Ke!F{1$cTDmsO+,|\nۣIAJW0 * ꨄM1 ZN-*tRшjh:LXqAR`x& ./V:k'U> E^JoZD"yaTw6Y 4B*3G[AReƈ#X&cfq9>j$Դ;`@Ej SpmJ`kPKf9Z{'NOBϧhnXײ(h&YZb]9hu] >B >-t9@/{_a>!c~;DQU)l`taĥ/_f"9)1xBZcoXpaoLd"qII~&5;:E DZUKw uhAgWlq <ɔJGb)bbJ XFx`5&HJo"(/gut*5mmkZ*9 ,0AmFGףwuJRyØۣdD2xR]S%#cL`'料IFCjM/CT!ᗜޞ?z]3'Ļ&BTxlRyI׷F۵b1^͔0E2zp?42eY0 ql_(a!%S&@QE }׈mYW?9AIG5>#l1k28$rkr"`\rc]dռO"8 B|Qn6.Q|XYB!XPKФ(1$&h9ic%A 6kVϙ58Ct(D&"gQh<\,4$KxIQV/4eZִ`Pl*Z.ET_0 :Ej:ҽִ)(uDp8JǿHK/ 7%Zǃe0A981r"q.\)**2k'_n6cWAI,Jsjy֥HxgbS]adB6&[h8fQm,kC [ôyg`Y s4&g>ATKik}B5#BI"&v i]2lRbi%H#%6Y??_ҮUŶu%M2"`h)J 㒒Pﹼ_T1{J[`:UW EEŒa8.=#)sg8Z,Q&o h&C訇O:<V8̫{o'@<-":hAI"!,D!oqtƂU"|񃇰l4\(.n̄ TcTa"ao.vwbEAmWc D]&đ.vJB_Xb>@;}l# ފpܔCZO:PMkΒt-,K;D+mX2+k2$ ! EI6b&&ǣ.^5󝚝?r4V*һ6 |OX{ | J(zu]`5@#Q Q, M\bu ̫*X!_ L (VZe8WF]k}oRbI8`6d>11B$z56%0^qtcۭm;I$jd:=j;5̵.`8{ybv־GZu_uqigOB8KϜԖx%q9ѯ悑(mNGFrkAxo(6].íKTe+@m`5^ ĵi"Ӧ>,*DᠠhhdbNQitD1.8 R0!x3B1ac0v5={u`BLFAOjO6(apJSװ1Č $D8k_$8u 1zLH_-&YMN:)pd6W5b-qK6dc6FJu}\~/-8% [#E˪!2xjɭX1LjO'Q7uFS[#-=b2aX xo(S/U(nwpuI.&̦ [11.Q I*wbZid(cА2Túm{oi}+EU#S?  UR"#iv1 lV2ap02@0a1,1T [=7Xk#mvg6 Q% [0:re*dMso2棣ۘ|K9uhRtؖ0_9jTVm\qΤ .Dr\PXT,Sŀlhs{y(9}䘲HvaJ#98ptBp^:RM Bhh>~a}3~w(/b7G1?DG=&G,&GұK͓h"xrh.QPɀ ؿsv=j雚 X&M 21Eɼi s O,N"U~ҙk1`8Qf%6˓Af-t NeV}VO?@63OS4 9XI}yEt['vVT&zLQ>rr|r?yu BS E5+4zN0 Hy$|-Mګrbđ 0jiVXdPDrm( $zIg+0eE3̙/+$0fN- 0L,ʖ#}(1v7#q k| SQ1 s[35k^. EFLhAQg&cG<=_9%{Z*Č"ˠ,Bƴ >x'9јd^ `ix?kx;}YHw@ШᰮuRcq+< <ɏ E4'||.%A:Ҭݯ`tEiDMXXR#c< ")5$!ٻBڻ~1NyFp7׳O 5iӉ1v)b4I¤d%-b֐0\LѢ Z6Y6fk cMClA0 (U 5$i(a>@Wsv/rI6&)FC,cYUԾ&49cb] MgU9nɫ:5"k- S$UeH̏xH!'{$qnylT Z[X/ m`]4H>>}F5ʝ_OZx59֘88WIҪ:8GbMkttp/ <P8G@9,/MR k$굿_ `3$ka}׾-B4NMs&cחGs"ui4(+wiiyZ1gٙ+&P2ufWE])dUfdgf5!P":B!D'GC:a"T–-[uއnB-,ck>o w:m) a3`r^_b35z6e%#S!TJ:||oy?a8nc Zipv+C;LX޹u`m@*%Nc*ZxqѥM'IrpFȋQXg{@FUxs=-!K3vљkNc(tWbp!bkǙDvPci5A}r9%sSV\$ 4m;.V 6JQ!!u&ትQ+DzAXT|cNGcFeQ HAZgk8Ιw9:.v<OƜ/ٽ|DES1鮵mE `gPYl۶?+֭Et "&JM 9KPTҜ=B𜝝QYbR+EbG={ْeQBJJuCct7*&f{XA8Ui ysOuu4Lo|"o:eAI$$Z#!{INJ)?-_R=AX}Dw83i,>li4[rGDamx!g8/QirQrӟQ-K^3Ϙ\L1I4"[ܼNFk?C􊻟}Peaq:U }~ "gY!x^{pKT;pξ'3{3A1 F8].믨I7ץh扊=~;9R&nO}'ÖtsH'o133L]am*hvlA'yrv "jׯX,,cooNBY`p̝]ܦ"&!ڛ^]PlOu: }^x[E13c VXbJ鄫 o*B~V/?D%xBXNF\Fl&XMW}獆[c&FF+?~V:A,Qx?#lR"HKk'M:0Wˡĭeoom+fIn(̵Zx'i;-ϯrF Іua|V>&"gA|[ЪSp~i炫o&>, >D@.ݝb8@ ޶ѪJ>sǘg ~OGKp||Y8_U `~W]XJDu|ox KٽNľ?z}DQk x)K yr!RKHꔬa4[Qtϟq-^ ^j2g8r?WԮhF/|y ׾ᢢFb^UJjMf. }lYmJ2AkOhg YUd HuJVl3[.nckf&T1> i~o֟H$;Ȩod}H(LX[cA7Z&vA(#iD=@ijaRoF vY y(0"'gHQ݌rF,6Fi *kR8 urF-Ah/[֗!W>QA C!-za8ltlB'I%G}ѝ#cVhmsv~Pg4 MQ̖ˆZl,{a+lZǟms{SlGdФ""BtA~wן )s 2%Óe ^[xx+Ln-ŅH%iVs9鴙Nߐ%]3 !j8fҪub'Ґʫ*Q{G T,K/P8&(9:;ް )4$Xk9R.Ybha "*7FX\i;38`: gKX,JOG EHX̭5Ry Gyp?郰i)!:vN䚄EP~&d(9TMDAMTo!E)I[gxcLSNAuz*\m`Ø~/b+-FɔDV;VE)^{{.,e/t8[,CH]N./yx|윇wPZQ. Z:*KΧc~v3Fsz?`h \&pFi5Lx01p$bI{Mǜ_]jI[hLYvi#tr>kFT6l -ܾQ|[|az!$HXC'Q)>C.. X_1k׉~JOq|oã6g8Wrz2w988ן`2}1x}F+PC|hȧ~ӯs9Keܽ{|lfkHm\޻ oAjr)4G$jSh9d$.u  ~K QDa(wSϛGX:T|';ɯkcpJ::$ŵlaHU2:δYZbK؆!I'5G{Cd..x* S[1,:GTUhBw@"rrYd1Hl~JXv:]v(9G)ϧ'~<$Ae9W&U84$IbZkj[$?T0ok:nGZDZKk!:Xh"] }ѫQ%97ЊV[4vuE:X>X{m*aJzzxLU/ $ 1Z~}Z4'hú@``!EѺb(!~MYA>kd{D3Ox=2J"EDkAiPM9H&EcIDž vm(smk܆ mdي+ 7Y;5an(A趻tvv8 i-m./iLm”8<"Ѩ<TG%0֒hl`QHKTKq>-m(^Ω-儴Bbawgx̴'tz=rU5R&6kW y6%W &<.Z%y#Xg.BJfRw()B\R{zж} ~o4=JI,qFUhVo6#}el$o{sxd:]pt>KlFL #ju^/I31EYp5i*Fi,#,Bxwx$b}qԛpT>MiH ^bc 4Ɇ=(lXʱ6@E+ApzAPjDg !4˰A1;JYS,QRak!i42ʾ<,Hn< jaG؉ B @$$ m Z\, 9ZcypxǭO.gL +% <雷$ߢqȏGn@Iv GP%8yyuK%|`Gw؊<ˑR9t;]8cB3b1x/HೇO訄jY⽣055v+57E F6'ǟJ˯_|bF~_dXXxleY\bmUFQLیXgU&\য়ӷ|wpRLx=|r>LC)-{t-^;H!˒Vba*~3$x-q:>;$Jծ wm-޺Y-WX!䪄D8TZjN?b|c_<_0{l{e1SvRk=̡͛ULRGճѣ&bv#v;|S-?WL'~6WƻV.'|'!X1^#yf7X&K5ܧ\.G (e8:GHRi,wg*XW.`W:h2Bcy-@Swgv^#8 ?{OEwfhe9umTK(%SWm\t|B}ˤ.(gX-Ѓ.|-//]G<8#!0X߈K8j .JXY a8 h f>p,hg9'XT|I!3#x΃>RH.Z EA*BR{LxLCϷt}5x] ^4_kα=q hI`$ag^2XW3i2`13TU?LJǭ{ umQ"GcL+J[U,2. `{zBEYPuSkIPԎ2I1G6Kdgo.N1&Hwqy`\Ĭ)@G'>XmHLDJ Qw0BztCGr1G5ɪaE%R,W FjbE1a!82Qz`~G+IM*g JR8t11%VI1Fp1mU@oվ ߥNmb xnh->0γ Pn=%U5 Faqw/lcL~gy'o$OphF &VL~0.F.9=='B~)SK ^7Z=^.V[Dˋ!EIU,"0O* Q,PV9eʞ^?\qAhi8leq,NK[$dh<3-"[mc(oq,HM ]6WBe.Z'Ke.l긋FfC:,L-FRO4V f G>3W"{-jٜݝ]LQq1B)& ] 7Ux?)9|-^ w08>-8{:̛/8I30sjTeh 5̌~N.|cr3fQ&L6*{ɵeŦ>,;ؖ> aErIBT O>!I68CU:Lթ~o+wql}%C z;diNY8N^ kN\6U#iba;t {G, ZܹK`<*F^NreIXǔՒR1]S#"#0>mqWs)vh'r9epEIa\-fDd,?}L\BPؘYJS' 1/xqؙƴ\6[Ƣ-q;zth.眛AKLGs~cR :yt|td< ְ"Cv}5 BMk*AI%Cg9@nc"i[Ά;<{]y_1~{ ;;{Ӝ6,s 0~SZ.iFf޼/~0oYјuȷ$ Zr( "GR(B]홥Jj]"`wmrqV $gw7N:S\U 4bK%vN9>>vGR.C>E)(z;,lIxbHYuh=u#~?; NO߲ P^?7^.fj9TL3$#B{F]{_hғuC!FU^\C\6V*,FJk!*=4ij?4iUNr5 ësv{\^\pvzIQEor\޶a40dJ'z ft;dYż||V eJdV6t67ۿUy'܆u "SִtK4 L)Z%*juy+0uHI*w8)VMq=7%&I3BXS3ΩkK% nD  hSD#'IR9y1E`5:HC85Rg2 K38'\ӏs^W}Z;} <BW2~u/)7N#&?Gx#CIKv;@F §!&mߔT|[pgHD lX.<>A`B*o"֜`43:GTϟcpO"x+ d_c5&@`4ILH.ӘQ)7A l)3T"ޡXc25^@uM)ZjLSO9+`ɷsqG/eQRIL3xC)"{ϲ,ɒĊD#SDmFr uP"Jڨ; `"_@mxZ$ 'MSsѕ&'9%%i bu @@Tu 4n5fmNJ!`]Xd?*y'} IDAT1#z\0rЂ!4ȓRc4g<NmƒhirT$iLd$GXɽ%҂Zb&FʀN@+Tn L]VM3 C"5h?GS.%*_"]|0Khv[)\TrA&`Q#` M]GɇV! DHIW18 LmPZeUU"IH?"glűvC>e91ǭٶw,KzH$)"V6^]o#E :t #'cNݘu+"c}h6B@J"7JT*8RBs[+V0sCMD*gooG}6 .H-Yql2 ֏%N7s#X=6z:m>xRTed2U 7S,ú{Cbrk}~C|Xpq5uw=-Jv''="o ޞ࣏>eW첳oNʍ65!ی^3z,YbGKb+Q! qZ*Ҥū+&IS*HDԦd| 7:3 [ȗhi0ZkG,KYoir||CoƢE̍x)j m.N9$d 6m*ʸ)c@'104BЇmI7PEgTUEIJ'\sb ! ϮqsXhHG3VSPȮ\TW+"ϺhM l _$)n)7"BF{׉D%j,c0&)Sjlm6DPxG[{ޜ3vvsLuwy5~3L]RKsGcY.L&3??tP%(Z"i -*a})&.jr(HD2STXtU#4`4K}CC> 4  _|ǔUҹ1=G5U87eC"n(ќU&l Y2VIg(EPMTCo,^H9n$C]WS"h 6nBj>6uςo[Q54K)J`hPƋ6oYwdu$RԞ{2%uUs~u4COϿ|`m{;ò0x@`Na]İޭmWX AQ5cfc\]̦%oޜ5uO}3M bg>_o^R F_P)⊪*X, 9EQ}Tk-wΧk.`qH^Qg EbvdObKBhri8B+B ߜ#G1i XcO$yNqyA{|XFTe9ZAHbquIЊק˗';8MgزQ15*&ϩ5%#md0[cN32f1a: ÅXg (sZw=W\FTuRnY!7,)"j@h}_?T ld=<)$%.@6ӱRڔ6Z^;x:ږ()aʆx] u2^;,X, +;h Ú%GwIܬÃGYq5<oLJ7t{RΨY3?HS, yC,0$NA.NpQ3 h@k`o?X\bjKzu_;v?F. 5Y*SE-] n 82`KVB1D-gq IJF:H1!MٜV4C3XFkۿ+yvp.VTE`c9Dhxh ӂ^N;oX0zPW1]L "^x.\^vbn۴HhxV{|TuwwPC]&f:h֑\?ZQS}TamIKꅧ6%w= ZQ{^x1˄t#okږi kqގyf!d:ɹ`fFzhteJi{݄7' j}[־щċ$$9Ų.>D,hv7 J Dj+Kvz2/ Z' C,!&U4-`atS2HMe6[l?ZEc?S(‹LEd_5)g49"$h(BZM1[b%Y챜QV5B)dRmG b$.PIDLJ1PG4]AřbMtSy/p*mbi.|%ckUZO1~)*!8'Ti/ 9;˲bnJ|"0Z045ftLe)UQǺH@i  p+w }ןϓq{/wIlSjx]2yl﾿PkZ',fedSJiqn." %yFJ%%v%3lQ,u ߯$)LL)IA\E+s&cO"`PXq  >R# A"P3D!@ҁ$$Zq8f<λd.eQǹ,PU,8"5qBZ(&\pTQaꄫ M%L%ZۭkI lSf\Vmjc\ úE-^(8XbѺb&Q<\]s7(\U fxvN!eT,%>xdQ:N=) `uu'ݔ=pb2,q$M._h7OWg+}[HţSWԵZ/ǍE ?*+bX~ !b!fk*(΀dF[PזkE;C@Ţ휓7] 8k|TQ-?T %c.V#@}h 6qDJR/iwK13lv$MPNtJ|9{ TO$Cv;]kAo8*6={SN 4;!a$ɋdN@Pj-ڬ) S*MY6 Ac* 4iHĉdZ Ÿ sqn~ 99 %HI!Q."粰84*PX/鮦5%*{,yk!$cМB FgWLg>'PID)]aՠ(S$b8_t&a>#F#.YQ)&5O eBUzX`bhBu-fHmM^1R(vi6F'p>cbxLUX uoYg]tr:i1ܹylL !Og5qhyc'}ǝ{0ScZ.U:aYώi5|>*y63]BHAWqyIjݴ"M@:VBooV |?G<:Ge.&"|!bz$qa0;N_Vk+;E‚phz& i,t==#|@#Nx8s4BHo>/~\vk{ɩgۤm&u}ԵKFbTzʠu 85EN7 ~Cw`Z\wYk?wdtuo`+`,ωjeWc`(HӌnobP5?~ư=OA5+q_=( Y.'cܹb:淿-cwv@KY9"* ȖKVB{8e(-'9hH2E֠ϝ;HkܻK7{TX2K]0QQɊvk&_ΩV+*'ͧ w?֭(HJx\r>Š>v|>Hh$>H$qD b|oOTr::ٶ|>yT1:׈f+࣏tL0""@0_,B LJL-V}D!#EQTEjĀ0`Ҏ),1g%GY Q0jેܻ{wt:mN8:Ot<|Or2spEH,^O#kyp_yT6 +KI`]ra( G4Qab4t4|n,K*F ]ds9OCj[v~_ށyb6۫ C4H<9|,%y`\xqy^]w%/ eY8YFXS!@ F`/%>O1Y!pBb,5_>oMop5R)Ei(Ѝ|Ao+p@W-f%i- )~OY/W #'˴5ErF!q:fa#8;:AZh7rF1R1Jb$A6a :\t1_\/SqBlqwL*bb}~4P1~8.h/N߁,¡\CK1( E.Ɣ'2RMF R+988j$(*{ȓLJ2qYzu,V#9>>%suIQR>=tP:cͳW0e?A^B8'q.ƹM;&-;]5vk,fSAlnܸbҎ0jQ!FCUY60Nϖ|wȱi6"RJY!EȠK3dv\RIA^/W=hHz9'[ @WX1tF #E##E[J j(9*Z8 c=[ !ۃ Yg^RIԆ ޙhM . !JBI)ͯ?f{GW)N(%ׯ&~! Eo,c)h$loȲ b3b>!YeM]yjK8fqb[nhxp@TjUIQDa]J:w''` R& 5D2uY/洷ibEO^`j4[o&yLߣ2tcc 7K `e^flAg3Y-)}'O?.J{/ȋ"KYF^ .n ˘拟8 G5[e5vVu%7]'K-Rj˛uP?CdY kwݦH@^wN6In޾|V3b{GY) `0[F,\={ 9K{n#Xr눤$چ^k$RPY{l!<#nKYLVq#xQih&v<]PKH<'Q1^)b$ V+yUjWrTH鈓$ eHՂb{w =B2/L3 BH8pw\5iRѠ C:&Nvx5Tq`, A(JT^m8F@V tU1¹3[~ο[V}uޟ(8:9fkɄܘz[w9q5Y|1ۋh5YjHD{}Q Zߡ($=V z31e٘NM#Is~;i+"n޼K-EXE'z>~{`&nqoxx1B*8>>b{6yr~>g#asNO C<ٌϘ/ZD-ɳ߱h}NYB➻e/:W*˒9͎bÈ ,p3 5V80USi9iQo^yt,ԙ2qB3Yͧ =@ʫ :He(紒!,e>! KSs(%F"OYD'hC D0?PYA^ eQbD7]o8j?K,2 |e99>fdYQSW+ח6|zyN R*(Q t9%ﭱ(0Y.I ɂvgVIU *F5H)Fp|U F;UeȲxt:|V IDATrM˜3}ƹ^Lb>aAhʦL)_}UI}K& KJgTeAߣ~{ <ɜxSf֊٬R]Fy^0-F2YVXc1Ɛ"5@>=ɣq rIQH0yAd>.dzsʱX*^Zn 9=3qF0 IWK&7 ,&*T*TEQǎ,X3./6{~߃L+`7g,Mc$u&E Hk=uQL's@a]4""Y1UeLfk<S ın,qҠ2*C.i5L'3ʢ CL:[*@MPIȇ_?aD _ŮaRVEbtlJVTbd"Xdsc€*+(K–U hYUKJ!BJ4,|QItX-5R8a@Eszݲ0X 8L`#k,::*uȑ0q&8!K3$BɄ"w 4/}#̫|F:ÉK-]SEl (uI#g[ޜf„vdv.#K5yb]E^:W?^L1ߕLE17"?n1铧^6"_rvp8fE}<{nGY~2Oky^Fv!q0v/3Ni6H)Y-4mZOGN*^eڍ,JCz=u#8a3X-8Sшf]h-ŔN+rՍq$۔Պ"&tIgUfVOd:`#""'4hwy큏i(YϪg%hDXdFwPudp۷>taZ J;nX.t;۬OeDQ##s8 V74gܽs>}[ }GOgٳ.>:hDQr NO9x +6w .K_S~'n[0nat:Ӻa0ֱ[FoSU)).e&+Y#rM1RB/з{+:ﵑ@@$tf )>ܦ*)5mhCft:!+2DW`4Fבz!-Ws(!2+0veNs% UU$H.m`4JiNhJn7Y qx 'Ltr$* 퓔L Q(%` <%ED鰽Zkп~'ʂ,ßsm jFPBh47n;e2:&b`=gp`kf+h:^i~w?V8s+G] 3vf+ڍ]ڝ!6HGr$-CINdww,q<{Rߒí>Aj_t}k,+vv).A#EQ0}wfg8'(rCXت(0itLJe!p- !DGjQWr%˒.$f>Z/w,W H9`=op0ĚU2vɲ&YV'Jq'N*'H9ggcaLS:0c,%t(T!4 :,E@%Ťd<BӘe |kyeaoc]yN3A(%IvuSlsgTj3]Ah;oNu"egg]f97n\g^_?O )6N aj*,sɓ1;yk%ulZAךv}W8XB/?#Rhcr 89=JNjQ73(֟ hD֣5;7]0:9at5a!BTUEFS!gԪʂzmFZ-Bi,>JՍnW'F9Hx:>x2B . gMϸwŜWK/\*NA !6#P3Ҽ"hDXずF<G3 )J@[ K [v@6<ߎ>LY&]g{A T* &Tk5e%{st1^/>/>D ׻rSz"5( ^}G''g#oQ'߮G|3\a{kpT%G|) 4_}r61LJ)`8?;1IE5qַ7ԟn<}ղw5[,WX  5NѓX8gj(+xu;58q=EUr>uYWҠDP.u>KO?z9Q;U2{ OXR=dlb~cO.%_e?x"pz-F)AQ4mur ȍnj%X1sl _d5 #R_ ?¼rNíkgkKZvjd>[ofʬ|<`/29Z;)@*Í{4[Z~M (g }vBԸk=Jp.tr1[o> _& #wv\ڍ!Nz} B˘bwnC4ucY إ@>a#]pV[L(gيEˀVN0LnYk(B)U/ℲbfjŽ;wy RI8f22fEY`w8$r?cT0q3!#2J8OBA_0Z 箐N[+pFZSK  |Xm/9R-QBNK}RSZֲ]*sڤi.BN ܹ{s#V ]žE4a,~χƺw٧Y,r+&׮QC>]<DW=t~y쀏CU1&ƒmmMG`V(eY 1btv΃  VDsRZmFF(mWa]}AD4Xהe?O1p)Q4 ,}*f:;Jܽɝ?Z5b p˷>!%f$)܊~w+*>qrkPQ*9 iG1m!y&ghk3uJ; PR^-˟!"uÄPBŃ.AJlQM#h'm[8d^[C䤾W_2x7;twb@E!ajE\an5Qb'%eb'^Be.$ %Nh`С,*̈́ TX;@lvL|+TFp ЄQ[AE"M3)wޠLMhp =V*NCY )YZUt+f(j1% k&c9ZVFYų#z6qt%qFHbtLgyGktX^{QL'S[!iaNjO+_0 g dVOu9[$=PH T%!VHU+TB7nst|jnQ~|+ky)_s\V,+{mTVt Ӳܻw1Y4 GݻȲp^ojyh&X{:=.gItvo3UIUU隲,ϸYgID̲ `WF0+jg x+@'LQʘxEX'R\@p~H.%/ɍ<6 Rl|P] $g-Z8|.&.) c@.ޡBpeŠ?`h" YUZ]Bl6]ʲƍ>+(Gx/&xrcEvAOǫr8#.+ *#rvwѦCբl,K; K&(v7HeX,'4Q$vŚ0Tt=Z%9~Ow` QG3l/ڜLV#uMF v蒭-̈́٤D{6}){,ΐ~ )"e?#s%9V_?b:ZPEIK&$?~1"BG5楸CwTʡK$Ԣg4@xeR(d#T CIUN:*gk#PwYce $9>Z qRښ "|+-NK\d7U++?6,hS3eMbd4Jy! yӉt*ܽ^TM4) lձOPO~:p.?in DL&w\/"*h͒M7o)\ .6;[gEI5r]o^ߛK\Q xvϿ@ pb@"çm~Uk ~gV(-/EQ9Opx0a9z:* ֔abq||zA#ع}1@thNBG|Ozk!"TGSZ#p)qW1J*B! `:R@P%*#(hA:X˿4뇠{ q#a?G'!A󭪒$' *z׌to?_7۬;~8|*+>|?@z.":[x-Lu(9?rv HqG_?ѣ*~sk᏿ R7gp1A0T8[8}ϫm֯U(3\FPV>0Pյf󜮞8Ł> PUHD@$06xem2R!P-ݿoY. s B[n%ELɰNi@u8{zN6i7( 06D &hx j aQ%*Ą!H1X,J@+Ehg|$)qZ4;-#_$/ v9O8%1RS]툝P?DӛGXP wDCl6I>'M?_笊Mjj GzSRT\殍_q lL?ԹwSU5-P!jp-(ə/ozs=n/>?\a<[%|Gn߾˳sFS"n.' IDATpu>K۲:кϹw'|-aCJy,t4,sn"Nb0pv:a8BW򊤳KʰfIeR2Ѯs6F9dGow(V]!сDOXrO^RjBmkt苈[g 4Z$]Qe99QL$,mq]R& ʼ PJVO "}!/pw "TTw9mdj iJM-iSUܹ{!{{t;m"']g[: ?~sOfNM 8 Y,H)h(djVM$,s+fgNN(y,[ut6fsq"LN35,Ͽ6V.TMtQҊclYEg*eYSC R,Wk JJWˌj$4m.aN, e+6Y. SkB?st#ZxS@5D. FDQ /^x9pN"6~IAH 'Oy+ 8G'k5<Σ_Z&v4$Hee)H'<{ ,WS><;>֭}獯]ߣir||Ç_3O. [퇻疌{]օŢw:eWde6p.,M/<eA)4 X-jrS@tuL#)$oڍ !*dYz<*AtMkUOՈ;"1U2H>Z H32іKL%MZģUB f{;531fbT`%AUrWܗ\ .Fh9ƒji* |I${--bD\;U`C6TE4 "ʍ?2nJ PvEH)q2zs"޽Xr~+p8vhn~ph9g4i3 `1˙Hj]O_i{MJb>BJnlN~BuY֯H8}7R򋇼vƳg.*.oΠSGn˥$MS}Jۢ Ҽ~=xO>U^Pf9Jszs.#4[[-:w$˲:kF vSULgs:[[[Phu(G<Q;G}SGMm"gXjSV d3eϙlj8'k.^V?ho輪G3Կ`]0hKd]6cH.ncq's܏Pa77?.kNJxpMy#NG\]XYB| wJCeMӔG4ZwJ=~Š~h8oxrj h| È݂Cj`{G&vcl?7*,mrw߾c“D93L>#=Qd/dx*Qt6:6$ Gh(L6k#&@ DNG܈l˒f3Ot4R4䌝&|Aef|6§9P|;,|% 'GTDSEHѪ`$M)ʒVtҪ"',ʒ8l!LK So%O; e%;q{=R"0>J%>j3Ȁ!;=Nl˳Y{d8?+-qVc(Et:-Ielmqy*͞Gg-.,nLE(H%0/WlWg5Zmiv8::s<6:4&˥ Ilsz2fsoo5XR:OIi`( eaY/b__B}7G)J:=\PlvYDH%,9H5ͦFĎf/1 nFJ*^T's9 [Wu@r)jZ ?e]Pʌ knL@1Ղw T>l8Ql?lSYkY5/C=i?0 v[x)'-h6;@+i2/s NEs="!Y,sda-8/HYAQhJ2,a2@I=R+&VHEN|F,"t)$I2??cm翲> ƣNMi5WղvOq#Dx( )Heit?X f SXA8+{lrHpxt$ӜJp*g[qSU;Hɍ n8}Oz) $傸գL,oO^m|^_#/gN#!S%VBɇ$Ν:xSѭ"w,//ߐj/$o~vXK"ɜ._V=AJUH5? Q|5"fK>߽' gYrZk9Ƽ8qLfS(sY`{1W3.٢yNb*gJց b|M! XT rw|ݝ;SkpI$iPd'čBj5y撿.#Mk&ޒDXi)~i5:6o7)Diz-uZغmJDByP%^AW~ͯHӄV38%<<'_=Evw% ^8dQن { BDoB^{KKzHB2L" [T?+qTD!ٗkǢ/$ !PN˄M*O[||QF?BwZXR,yl#: zF:˙]e|_pz!՟~gJLaӼ̶VqxQwW_dzN<8%AQ ~ɻ' 9Vrx˳gd8>~{K=̃|ߍ'  ͯŜ8jbgG<{߾DVؽyjO'm|T ?.__t@q=8Tw<+Xv(~Gn[ qhW?*?~Du|EsEf*~׈j.ioLm( 9"/HgڜD5[ۿC ը"~g~`owDi͕;ohIG-8ޣ+ B (%k<`sAAEk *NQX5hqHcCH^WVZ)q"|zB`Y4׏.^ >yVcWD^`G{Dcg3ҴKGgHi9v-x1\SR)Ha%jP*n+O c5y5l߿YX޾9{lP=,Ntx'xYsbf,+),+ "&1͸d9fV,#V&S<'3TIA`,1TJǭo _'j8[AeLc4V u ӡU=򲠘, VG8\a9$ PI BЎt[\]^=J`L^/JQAAndP{@{.5RȚP)LS$JxUĘD$qǔ)MD:[DCGdUI&,Vx%ʵz߂ Z5gfd=#]j$ѕvYf:L9έtw~L'3 C)ou3MM-["<|"HHm R@O+07~VªZ!cX{lNlj%!CEIYTd:BxON0nZ 5̦#0Lh5#lD]5kB2it:4an˴a]kl ƒf$b娷M#ISU$IO&ll3_1U3 _Q`^g88l4E֚F ttMVUHkhy52uד1;vAS(dRW`XeL&cvfْZP ݱǏWq>aYPAJY[%fNG-QKDTElZ6qlt "G?:|FXZ2L>vHnwJq!(]; ynr9bwz"04 O<`<=iMy&X5y˫kfĚ~ hpv8X19%]SXOXg9;;Gk>eQ#!in40UImmB}srv2_-LSf!ENQm.IZVLnh8d> Κ_u7[VJ:*h@e{t]DM-?+i3,] !4OyC^YfѨB)A'L1yr)Se fLCExWHlpQT ?2i\-CH%&09 D8_kHﰙ})%[[[c+t?(@),JI/7 O7\-(RtM<qLCaaiw$ISxP,*r4Z^sB8fu9inrMŭUObmq)E^P٘ GCk FEDQ|;t]ZyYblfM{FV_G7PJHxIZ);;$ʗX  q`lE5[~i ^hvh@%;Ș+H`_̈d)ޗ c|A34E/P"-Hd:3]3D Vl1T9R:X'Ҡ_!#$UhtUTłbl1aY.%y>_H5Z"#£A O}/{m,G}`y̭YJ!Y,!o>$6-`][|Фh4laQdtNNNjMOEWq2t3.mF1NpH)%䬶Su7/CTVTbBh$ .)k?f,5ꟷum?*$?(%/^]BI5SJ>Ȁ,O+ -V%72^|%;,X "R$At1鷿,wds?SG_F̏M0lita] ֖8 qB+* =`$VRWB<˹8&\1F2["#[e}B&cBQr9"טV8WcO/ 5G>wVX AY\ jBH6޼OA\cX.Xαg\zK;IQJp1$v[<'H`lP:#cq(|(5bmP @??=a|~ų/*R)IB#M**o߾ѣ`^Q6 8UV . v_}foO@;"  s@ dÐ/˘?S˗S"X7VsmpcrZ /=:oc)JDZϳ/Q2S޽{x)}^pi(sC_OqFl? _'_W;ƣ˃C8 ??u=F}/BeQ2~6 6LLȂod- VD{mwB C:by{ /moWhyկ87:.f㈹` Qolb@΂8vywt-:6-)&2$\f9qlf4g?#bf2 ("PuAAkVSɠ`8Si.+A%ir7K{!WA-ʁ++J(.DHzٵw%FJpu Bo%# 6?,@ 6rHXj ϷxwJy5 ?9b1%{xg8<:͓vWWg8ui$ o^X^]e+ T(!jpBwGfAB3`6NҁeJ~n:DiҞ8<}vLi眞fwwkgxJj5%2N.?M+lڴbH(Q~ݎ"R.Wϟ qX!:6Za2hVIU% sqqA6fK>n~YuuGyy<9:|>cooK9لbIdoodDeB 닇ooo\_3 Zd+ʼT !dORib$A/WHt%TCdR'Lu8ɅÊ\#hd h5rBR)]rd9nBsM@P41DRA^ѵ(h0{pyua!;;/h4p1:ߙ\Ǟ^yG_ "&>I@vpNW~?1UXgeww̐ڱF$ٟw0Z2Dym>n/k[fB#:.<} 8Y,GJ2gHA8=~}Vi٫9^c֑b<5ne[^"y-g'L3] ~!9xgqXG@IǻXkIӔ[m NYaZDpo~!c|EqA{TJuTx .B fvHK"gCF0{[;l%-(-KLsvz}ҝ.O)n}LQ28("֊pB3I)(N"Ň + #*"/3|e*Tr^P-=Fkm`%I"$H)9-1ycbIn)A%66i3\PC7IiE4,QA%hoQZJш"Q)G;{lu 1M@K ·juOJ|vDm|v睯Pphś]%tkiԁL}Z1 Q*P:.妑{G5`!*{<~d&)i'}m^HPw[cc " ^t svt{mDV?@F_`7vix>g/i#GI H\_7Fds>'W5,W+೻*2w1xX. * O<oMXց 9SQ+D `' ,K :F7nIڊH:mHlPJ`qSX+<F5R( \Ӭ4X!B VE1;I{ubEm[OlxI,gN+ep=`{ks泊fCm.XLMRs"g8!U@gv g60B䆈kH}nL>öZiV Tޔw2.fDb4 >mM=:p>8B)44acRA{j$joXUnZJ`jl6pˌG\\^j7)D$MQDjaMp/]C:',G xdà mHF trݛwHZI&~ÓgS1b< ,*z<s&%s3WH,L ~[5H=6`F $!ɃrdExuyFe NOZu`RM'`=ZE-RP g5M YQ+See΢ ")2KKf-އ`⃛DIʺ3ʄ 4<BHT$F8II*-dA34[M&WC""0tt;%vd$[rOiZL%1YK= y1Txg)a-):-cݣ\f358tAH0Ơ{O5B0M0R`HV$l ~v K@XUI ^3՛ JEܟn@SXsV[s~xWO,T<Εt{>:Q0!o_puQ`耽]޽t+uUpNSAdt:^~CkfE.GF#^psDž#͕QV\V_<P5zGG߰Ʉ^o'k [ztӔrIBx޿sϿ7o^n h{DIL/QԍĐcl_}JkxOh89AE!ٔ^Hz.k8, ʠAxx_x+z^ k1S.W}62pEƯthzJ;zZ[fKQ[}yw' (l__r9ŬX2_\\2N~8Q-qD>”~FEo'yuhȴQ&d,{;ْa {=n5h:T`?lI#KtX22BUl Gd@j/P=##ҵKDۦ/#2Ȫ.LMsA@4LqE AJV5>\{b:23nX$-B)>p/#wIF)Bfn7<{; 8l}u!bqG 'BdiB1bP0͹4cG}#ͯx /zi2D?ߠ/~m~tMv? "gTΰsq9=є_ꗜ_H"h,mR<{=X# /_}'n+67HtAX0gR/ɳC9֚yIy3^^\B+˿X}]*]]@(&LyxwhrS<(U,[:ql[dS`-5t[\:twp""}HK,74MR1#%ZG*?|'PV5JkoPR21֠cAkc>_u bvZ4 ❋B!ZdT{L?؍|:^E=Imi\ >> }Hp{Ekjα&p=^Imo@Ic,V R [7x9Qɮ@];?J[5 CMݲYoY.4AaCL6jP7>" :[u5 Ǖ] V%a@veUdBJR$:A+R$)h]v -d!\+B@4$.VxgQZbC_DKBbGyAT0[ IDATDv-)ƴmj+B žb!֐X*kE.3$B:CBx8c %mIBSwᡣދZJo]I#V{q>{ǶhdO =oZ5JYeI['x_'1$/+AX|hVmHΈ}l{~ ˒Cw^ƴmE մMIg2&&$u"@Iw܏X B)1v24M ~RyDV:|yTNs*~}r }?QI6S }<`ǗW=N(+%[bowVn"JgWWXo@d |6``m|Yr~b83;?GH R !ݎ<@VlP$I0DžXM4M&z{f k ~ yvK9/ϟQ{jcy%8JTv8LKck\rww@`8l"oyX,YoLS3e]1٬ׄJ "rA0HhԤdB݂i2@.KFv㦛TO Щ t[={Ơn?kKZUAé#E<3oRT%t1cF8ߤRxo;<~gχgs֛7u<ql6͂bgœ _15 /`~ x %u p8d6իkHo$ie85rG]à|Z+ (&SI)`{ijߒIE%7[Ӝ7!# ]*t#m[;uEѾ8emU6;ʪ>\ճ+ZR5 I`{x55y׻TΣd<xw `>pd`-ᄉ ̋ c$05sQJs5 lggsW<#Rf_#almPxجŗ_)+!ޑu3=|"&-=Ϟ]X,*M,#8,{dt"?Hz{dX{9>NSl q`{x2er䃈ZߏG8wNB0ȳU2p q;xrn1MW'Lx|l{!$ȯCѨ G6S;YAUԵe:v{޾>}+?aK Q>83,"H[-Bb,ƒj},NH&i3rRdRKMc,E& sNޥOg}A%I0-u2MvεД;LYbE.nO6 cpIl]$)i;Gc"gΠE;C=ET#;v16w[R"" bZbf,a$%7>BRu(QdޡA(`(4-hc-|@[KF 8Rx;vQyslZ}b*& Uc04ut6BlbJm9-*<!o,.=ֹGuBU菍l"Xܽc<Sz2[q>?c}{aQkgW-1lڸ]1t,P削I*x jʄloAЉ&";~U1ZST۴ sEuwn'oVYba<:GJzm>vl68\1ǭǣ(oܐi~ݲ_Px*n_؍Dif遜X *b딊D KI$IR$ >hZ;A%FH8/^`ۖIqB{ J3 թ 4b\IQ#}@:Z[L.xnm\ Bxmp4:s:KU7ݚAC9TDC!B*t_hMtؾ2H**Ӱ^Xk k,I Bc,UY~D'TƵ?7'qHFO[GP jzFJ\ y<^ !HIk)Yc 3aDCav_8'{S=rz@{YIX (pf>PV svkKkc`9= A4c<(3Y>yk}Rk9zl)c]0國g UCo_ ߑd`]{SxQ3\[ L&0fx7dyhA{=ɋ~yã1]/TcM$#҃spx"Pb_۴ ,O*c:OZfأoTlfS%mcB6g"9 |? z+r0NXz^W5ZKGdIk&<@ZP*-Ox~T48f(_ikV &oSʙmds] .Cڪ$_vHѐAQ[K1 fX)40qum08?cL_q~Bbԣrl)$ZUdrvafzR`B AV&oRVޮ,"ql\=?s;Z mmj6UE,i0. ۫ȳl4vG\,eQ:L!Xjd6CZb8׿#$@z@==X`=1}9/75$2 d%\1]&K4rw^_ӟrH4S3ɐG~48N Ob,Z㛖j+v [ u]nRC.ϸy>9UScۚk3+g3w߳b|Z08뒟]=-+锇Xykd7`xpޓDP6Xr: /(\9=|w8Y{!#DT) "AūWoK q.?=\#..Qb]C 8h^0&qᏎF_m,I$UN7ԕŴ-JKfi6 YF1/\\`%c¡ &8b'1$g/"a:9c2۵x@w60Ke&TUl6k'SN!! hFuY&A x!cqLNqšޱ-+,`|8hx"kJBص%C=G~$;o8W{<^yYDT/bJ9 ^rX#FA2Z)pA#!/6yQB :pHԈ$Eͪ,#2"-ؘǦ.ٶu^mvH(#PۖƶXJ92M\w.lH8O7.V 9OyASwDׇDӧlm[8/Ji$Xc1&:eI!"v6b[bJ+zJI) \ &ݽ)+oӲ܏@,S pna2"l>g`Mw:YG~,ccGɘa}g:n뷸,2L}ii׿>ѐHMH@9KPx)_]Q (~5AH4Z`pBvmzD)9$y1B{DQLi =II5*ήٗ%ٸ@0ˍDѡuCFX{C5uUi aD%fq@ {ҍBh-k-Gtc.Im R [Ro,X+vGhۚ&7:!nWMOMǥHy߫_rgl\ʓ~۳F - %MPWonV!er|{L"Uݻ[4u54X]ŴEP j6;EnaSTCgmdu+Al`o8b~ȞD!<ʆkRmh5iN AN!zk>@1J-@w{UU1,2$ZkZiH_'p.`4Ghp:b8,iBt'[f=yɿ9+yk<.wEex|:珿-ggիo#\]S;LSk5eYs^+./JRenP[ tA]W7,Z2IhJf9wBPEx>)KV./yF-*`v5X% Gc=]KBdvFOt]ѺwhJoqO'F8l1u/ w{ yvugׁ_oX>j O1aZzLkͦXaX"d4*ΒeV-它N!^Ìڑt&f#5g=ZW/>#4;ۈx\*Tp֒ _ ֫gݮYwx3MYV.7C\ IgP%i;H<"x鋸7o|%avY+P{$Eh4?~E+ j_#g>#]_cWKs'%@r:}{MĞ;8$.d0.ҳ Dgir#,*KfgsH"Gf%+ e-$YZ _cOIk){0zA;`;z}N{잟љ@xȮ\J] cm4̟rO'~y i|F0* pQ 5"O'LG"L}d$ ikF!Նynw7>txVQp>#i;@'4rygh ™X-B@Jy i&gc-`@xrǠ)p8pG ,n=o_>ry{R] ϗ逺ԌFR &!۽ HC+ HLsxD*ϧϙs54{8K偊(8  X FST uBY=ьȇ) "5L$*äѠ@c$:@]W}|5?E4b7lv:xUȮ}!D̶{-qxrF7>m G!?Z;O8R=b49=%ML!esG(|?)nxB]II"G'`Ѩ`\'f uey[L(Faq~qN6Hqpv>jX4=b!W='[޸^ _~|? Ųs{1m eYuRL~n8?&q7b.uYSUGNni6t2<ˏl!2 lx CJځH1VP}C5mvI}QRa!kMRXSCB$ Aݹ >2pSJkiFۚ)*hGRc>J< p)'ǿ~vP~fQIA)J'(cb\]HyWb٦I\lMSYSQt`sW׆ XZ]"N^ Kv^Nj&&qV5R8h%Ji}f !xm{_kcWߝtG(TԱ/?!{p¢՗;"7t6d6MhA:`ޕCi]"%I%ԑ"0XJYo8Q|j V<wyY3Tus0<ܯ Ý*Nqc"1IHRM>(` 3vrVI)419M'!i&hDg;CYxg)i uEځfE{G.{A}Swd_^~>Z$tbnO$RiJf b0?!iGP}qOe bd:+g~^d6r s64 $ /M'mu7kƴ,jglV{EpyG~!_qxG =9|ĸ6%Ap!{RY}u`, ٳH!c2"ao#)~Qx8DN5qJ10msÊK>c;Ɖ^h4d2Ω #I5UD@l'm;ِreivYd%ji$iۈ̳c 86 {ۼnx ǭwk m[ߕiҴ7;RƐ { CڶJ"% @ z:(ӓ<DZ<>u}ot"urڶmR8$I6]UuFC|<#Ts?4UwCLpΒ ޥ/{ǾS1?L뻎<#hBkZZR3(ww+ *he;zZ fK5vG& m'[)w rNm[::O]nijE< a쎺n(E1{fg#fI[dX=C_z ${Q:Os˓Px/)wqWC(9moX?R4ǻtzFD=?p7VndnPV QBLcf֢5W^ֶl;ۻ;@f]\z>~~W~rCȄS>X~;#>% %1q6͛-&@EwDxk9G&L'#m(=Zk-Wϟ?gϩ2Lmj}OQ _4:I94{ňo ՆnaQ0( n 8柚i #(k|0zQ >C=>i(wGV/. ޾}?y=H|W~$NiH'@o2p~1'vY6Yx_GI18/hx2qs}Yd6Q˒ccIlQN 8^Ѷ5b̛7زy#-].@[o\!:'>]Kh y3~J^5bw!+!}9URlNg-m;Ϟ! Fe84k+z4tߌ=mx^@K#$IFxnCVB|n 8#g]tT{d:Dk\s&u'gS"!#?F'x֑$4eEǵ@)c=X.=5wCziHȱە}'30mMX5!*k0Ғ4heJ%]h8K(-(-:dYBQdQ01 c0PU`0"9@"D,tgz1Yɖ#{ uI2P.wђUEDfEP6T?AAP>z:42(Lj8"" ( .44K/*̬zKw9='߫ʈq7up?"d*wlQcg1TVXɱ)=h 3rI݉ ̑3=3T%2&̨%tz`?XDvZ!4A$1ArrnZCZ%$G,T,dZeM4CT*j&3ı& #D枕ӿ~z:؜d6܃o} Vabu0=9J;'iKj ^d41):~(hH%I┙63Sm|sr~5O=b.nrrjUEm$`vv(ꢍӧc$#-] `X42a^|Gb]eZgD3켚`j N˶qff$IJqX%.-;*1hR)»eQ [\p~WXkݮ>+p+ "l8tqlCvT+>Z4I1CCMX3;dF^sP .xѬv;}W;OwSM>@OG=:B:),TmD `i6N C]Nz|![UXJA`VpOt#~|%l2KZ% JꇾwNh66/}K/z-rܲ1R"&W,%M )LOtf" K@C'TkUj Z X6##M:.G@^#oF +G?V=ɜa(=_T 'i6jHB0ԪqRZ*02$ cZ&3 \TiAEQJj8E_)#*=EiX(#KLOwt> IZ(j^o&%k'FyVWjC`md %4un$.x̭LBPnPD)E5׫Xkv,Dwd Kn 9ֳ~qq}=zj;<^/j+s=cȰ3&YuDvէic 34.Q2l{! cRq׿DQ$Mo| 9U\9DK(i!C°CDxRX|$|y)鏟ι@P*TkX/ _/4o~ !v12R8 ټ֮=σ|YR8 ٴ})x,޽XKN3_8|~uӸg;Y_7F_;>),>w_~y1^yA}}z?m+c?aGHl ˖yiѣo, ؔ4 IR*61RRQ&yCeK1}BcL%!H<"swRJ.?"-NO:&MC aL F#@JGL㌈>c4qQO㬳O;`Wv'> %oz7H0$afv:V1|RU|8W+!E@󱏞>)'G8F?Zn3o=?Xz?; _sg>Zw^r̿jYJ@ϼߍcWZ_lzp2^^jU9gw^ g%Ξ{.Ckw.|8q؜c)W^nW7~#|^z&9y?f͚x_w~ _vV^mC(T V{*A8igT*5LjKk#,B+ICUUDaN$)ib 2n1"\+򘞚ӝahIݡXB]qνo8#h6+OV "wH>'ḓ>TxDtpk׮;W\qEfxrP8i@ 68JCJT%ZG$XWT#|&'x8ZM=yw5vECVǪU{j_?}Ȇe)]ta0HYT{o!<*c=SN,?V﮼/c?{m֭W`N<0 lx!||_X*^f|{|Aq?浯{k`y;s wmkz_o~=ʕ\vٍ\wŏlBrN'B`QdtƤNA|I;?@#M IDAT2;e݌+pN-b~1"Nn'm\6ކٙ1ՈJSg觧 o|Q4Y$q R k4pW ^_\ =]Jڝ[x稣t6w B4[U&''X|%cTZ,a`i{)Zo >~rx}11.R1rOF˳#>LQ~EmSj/Zp]Aq]ٲeruq%g2::ͻuv/7/I4f/[ 8gs'sQNq7 s~|FT*,=g&Yl)3m&g oqd}%3;U@$1z(d~h so{Qex,quCC-mb,ڲ),_> oЦCF A bS*)K6hj(X}~R$6p{Dƭbh"exIְnO&3 cZKJ8`_F6,mrFfD;E;l34\6n+_ѩdYFjvnlvg>}gy0Ҳ|ys9m۾]w}3xaq?! #,ws#`??HuK:znQ.R!'!Sc$i1ff{sY|uj(]@> 2<$u按(XnY9T|%#-F HciQTrٖޥw|Cftt+\| MG被oBJIFG'Ї.@[oD/6& ]k,8Q8wG\-E/zwL]Ŭ  5JAijz(%$qz iR?-% C8.U,l 8W*YJ<%%RX-4R]UKrz*B\pb4vFqfcc3|cN'.Ε!1|H{I6G_+l _ >s,ޯf͚*xis/oqy|N'f΢_:8|UkDaEe*lc1";*;/rԐĮPrLNNdv1bd Z4M:CC-aZ'<%=Cf:  ʤRyz,[< h6\ټ'ٰaGMwH)tjHji lZ=8gk,)-[TLM`},ΡXk``b|Z-@kA;{5!:;[CXj<5`v;,+_8y5WCGLOkjun7$M\kZ|.jQggZ+9;g>so9S(.=cx+.=PY*⒆xV`zfpٔ(4f+s *G IfEfDR +3T;vC,Zt@W_[d}E %ڢӉIe|Nȸe؆z'QoT )PJx+W_Ot~ /}H)r0Iz꧳u'.oRsAFcƗ`te8;WV=#F`$7~Ĺ[V7֪"MڄLLgWuمj$"|rSJ)<`>@ŭ %`i4=`~߷eY-Z!54BXkQJǾsA)_~=lN?pᏐpwrݛYM|zS9g}0,]ӏ3>a5(z~)C,z R NWoCy2~8ON8Y6~;GOs5砃X͉' G5kNS?KK 45MmL`8'OyZUĩ0##ܖ]mQyv5RAPqzK\Zgr*[QZM.܎dJz@%.MIa^N]Rgw侔䨣D'y/.:KUh3`Zn.\$KsAL%! TX$hW%#B`>e[p=SsS H3U+3ᢧ\LʷC$nP׿E:xW0 7fʺunKg'tw*!%xSYS|֮=.{?IʛWrD9՟_8_nBn2cҟq}WKhv/]#ɶmS_a'g9OW|O}xMy׻UWqʦM\{xzN=Ӽ'O]O~r oy1T*>]޾x3Ϥg*)*>+g8(= H:&x+6lIU~PQYb!%>+} J1T_],AuYgm v%[<-*H9ƅEWzSh+*lJlFTiFkCկ>--G'%)%xѶp@T*_~9vK/}rU徍1]L>EdJs]jfgT09%I¦j)j `3k$#8U='sa-PSiQG?N;"[Nfލh2;=.٨GK)g WY"Q:bjR$:10u`.72/csz6BϮu>8QvU@S;Jѯ$V[ۗP U ĶIzm|_OL‰*>fWtڳ4 (av6D%5@)Rcv󜇒Z$e( A࢝H! /ι|ץLMvb\Ջ876s]R7X4qRU WgffFBP hφtZl 3e/3-u27|133L}?LLbQo @!\YTt_ٴ&4[KQ'h>B" f$@Zo ۥi02ch"5AmebNE"H\R#.W?7IЃp ',-?X : -antb//y@<ه4!;:)h 5)zR5ĵ 7h᜘oYVyۓ+..ZАjJLZ%]x?SjT }EaV#4P.Ō!;ڜ@EDfAvD) 3TKWV͝A*J)!  <}.M%5HC ]>dli?-.T/DtapMJol"Smlc,x~[Sl݄BR%B4B̟3vT;1T:Ɠy@ կ  7Q3bB9Q~,J7v;3 T: f^',e6r+Fv0~%#Xo*Q9)Մ]0 E_2TXU~[[C7.1Ê"fl3JZ)JHmGX<& 33ӈj)V Lw:rrߕ;3c!2)VIfffäa-\Kc!Gw*U&~VQ}O4qh!V&E$6K-$J ~VV\6ۺYU|r"L0 t17NDx$9bLds8dȑ|nW҉2ѐfDGr di(Y`CYs[s&4mb ӂ+U |.aHK-]0 O7WvfӘETu 2BenF`E sV3m:+Ec*Spuzq#MƂ֐@¯bUYAz։:N]/R:@zX{*Ro囪tD08\ݹ|L2?_. V/<-YwlppQܼƏ6<*O\#YS +,B*8W=ӿsTL2XplKݼ; 0G9/m~zpR!CIEs4Я99麁*ưxvF5G3Ҷ&G";pC2gU{ns!*- *"=J`s79Cy`eiPQf'ʢ8]͋4W-٘>`u( +IDATf Y$>8"2d2vO9拠Xx1%=)8T۷P^fOYHO`ntg!7ig|bsgJzyg=9E߹70O{9"a{Qxק9O`Kc4ӟ:%#g5ޛSa-p+YrDjN?! eQnC\qXu7uiEagQ{Gd " + tty ] ); pager.waitFor(); } finally { Files.delete(tempPath); } // return TRUE to indicate the command was handled return true; } // return FALSE to indicate the command was not handled // and other commandListeners will be asked to handle it return false; } cmd.begin = function (conn,ctx,cmd) {} cmd.end = function (conn,ctx,cmd) {} var pspgCommand = Java.extend(CommandListener, { handleEvent: cmd.handle, beginEvent: cmd.begin, endEvent: cmd.end }); // Registering the new Command CommandRegistry.addForAllStmtsListener(pspgCommand.class); / pspg-5.8.1/src/000077500000000000000000000000001452457446400133045ustar00rootroot00000000000000pspg-5.8.1/src/args.c000066400000000000000000000610551452457446400144130ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * buildargv.c * a routines for parsing string to argc, argv format * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/buildargv.c * *------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #ifdef HAVE_SYS_UTSNAME_H #include #endif #ifdef HAVE_LIBREADLINE #if defined(HAVE_READLINE_READLINE_H) #include #elif defined(HAVE_READLINE_H) #include #endif #if RL_VERSION_MAJOR < 6 #define rl_display_prompt rl_prompt #endif #endif #include "pspg.h" static struct option long_options[] = { /* These options set a flag. */ {"force-uniborder", no_argument, 0, 5}, {"help", no_argument, 0, 1}, {"hlite-search", no_argument, 0, 'g'}, {"HILITE-SEARCH", no_argument, 0, 'G'}, {"ignore-case", no_argument, 0, 'i'}, {"IGNORE-CASE", no_argument, 0, 'I'}, {"no-bars", no_argument, 0, 8}, {"no-mouse", no_argument, 0, 2}, {"no-sound", no_argument, 0, 3}, {"less-status-bar", no_argument, 0, 4}, {"no-commandbar", no_argument, 0, 6}, {"no-topbar", no_argument, 0, 7}, {"no-cursor", no_argument, 0, 10}, {"no-scrollbar", no_argument, 0, 41}, {"vertical-cursor", no_argument, 0, 15}, {"tabular-cursor", no_argument, 0, 11}, {"line-numbers", no_argument, 0, 9}, {"quit-if-one-screen", no_argument, 0, 'F'}, {"version", no_argument, 0, 'V'}, {"bold-labels", no_argument, 0, 12}, {"bold-cursor", no_argument, 0, 13}, {"only-for-tables", no_argument, 0, 14}, {"about", no_argument, 0, 16}, {"csv", no_argument, 0, 17}, {"double-header", no_argument, 0, 24}, {"csv-separator", required_argument, 0, 18}, {"border", required_argument, 0, 19}, {"on-sigint-exit", no_argument, 0, 21}, {"no-sigint-search-reset", no_argument, 0, 22}, {"ni", no_argument, 0, 23}, {"log", required_argument, 0, 25}, {"watch", required_argument, 0, 'w'}, {"query", required_argument, 0, 'q'}, {"host", required_argument, 0, 'h'}, {"port", required_argument, 0, 'p'}, {"password", no_argument, 0, 'W'}, {"username", required_argument, 0, 'U'}, {"dbname", required_argument, 0, 'd'}, {"file", required_argument, 0, 'f'}, {"rr", required_argument, 0, 26}, {"interactive", no_argument, 0, 27}, {"csv-header", required_argument, 0, 28}, {"ignore-short-rows", no_argument, 0, 29}, {"tsv", no_argument, 0, 30}, {"null", required_argument, 0, 31}, {"ignore_file_suffix", no_argument, 0, 32}, {"no-watch-file", no_argument, 0, 33}, {"stream", no_argument, 0, 34}, {"quit-on-f3", no_argument, 0, 35}, {"wait", required_argument, 0, 36}, {"skip-columns-like", required_argument, 0, 38}, {"pgcli-fix", no_argument, 0, 39}, {"style", required_argument, 0, 's'}, {"reprint-on-exit", no_argument, 0, 'X'}, {"ascii", no_argument, 0, 'a'}, {"blackwhite", no_argument, 0, 'b'}, {"freezecols", required_argument, 0, 'c'}, {"no-xterm-mouse-mode", no_argument, 0, 40}, {"clipboard-app", required_argument, 0, 42}, {"no-sleep", no_argument, 0, 43}, {"querystream", no_argument, 0, 44}, {"menu-always", no_argument, 0, 45}, {"no-last-row-search", no_argument, 0, 46}, {"no-progressive-load", no_argument, 0, 47}, {"no-implicit-stream", no_argument, 0, 48}, {"custom-style-name", required_argument, 0, 49}, {"highlight-odd-rec", no_argument, 0, 50}, {"hide-header-line", no_argument, 0, 51}, {"esc-delay", required_argument, 0, 52}, {"on-exit-clean", no_argument, 0, 53}, {"on-exit-reset", no_argument, 0, 54}, {"on-exit-erase-line", no_argument, 0, 55}, {"info", no_argument, 0, 56}, {"on-exit-sgr0", no_argument, 0, 57}, {"direct-color", no_argument, 0, 58}, {"csv-trim-width", required_argument, 0, 59}, {"csv-trim-rows", required_argument, 0, 60}, {0, 0, 0, 0} }; static void consume_whitespace(const char **input) { while (isspace(**input)) { (*input)++; } } /* * This code is part of libiberty library */ char ** buildargv(const char *input, int *_argc, char *appname) { char *copybuf; int argc = 1; int maxargc = 8; char **argv; argv = (char **) smalloc(maxargc * sizeof (char *)); argv[0] = appname; if (input != NULL) { copybuf = (char *) smalloc(strlen(input) + 1); /* * Is a do{}while to always execute the loop once. Always return an * argv, even for null strings. See NOTES above, test case below. */ do { char *arg; bool squote = false; bool dquote = false; bool bsquote = false; /* Pick off argv[argc] */ consume_whitespace(&input); if (argc >= (maxargc - 1)) { maxargc *= 2; argv = (char **) srealloc(argv, maxargc * sizeof (char *)); argv[argc] = NULL; } /* Begin scanning arg */ arg = copybuf; while (*input != '\0') { if (isspace(*input) && !squote && !dquote && !bsquote) { break; } else { if (bsquote) { bsquote = false; *arg++ = *input; } else if (*input == '\\') { bsquote = true; } else if (squote) { if (*input == '\'') squote = false; else *arg++ = *input; } else if (dquote) { if (*input == '"') dquote = false; else *arg++ = *input; } else { if (*input == '\'') squote = true; else if (*input == '"') dquote = true; else *arg++ = *input; } input++; } } *arg = '\0'; argv[argc++] = sstrdup(copybuf); consume_whitespace(&input); } while (*input != '\0'); free (copybuf); } *_argc = argc; return argv; } static void print_version(void) { fprintf(stdout, "pspg-%s\n", PSPG_VERSION); } static void print_info(void) { #ifdef HAVE_SYS_UTSNAME_H struct utsname u_name; #endif fprintf(stdout, "pspg-%s\n", PSPG_VERSION); #ifdef HAVE_LIBREADLINE fprintf(stdout, "with readline (version: 0x%04x)\n", RL_READLINE_VERSION); #else fprintf(stdout, "without readline\n"); #endif #ifdef COMPILE_MENU fprintf(stdout, "with integrated menu\n"); #else fprintf(stdout, "without integrated menu\n"); #endif #ifdef NCURSES_VERSION fprintf(stdout, "ncurses version: %s, patch: %ld\n", NCURSES_VERSION, (long) NCURSES_VERSION_PATCH); #endif #ifdef HAVE_NCURSESW fprintf(stdout, "ncurses with wide char support\n"); #else fprintf(stdout, "without wide char support\n"); #endif #ifdef NCURSES_WIDECHAR fprintf(stdout, "ncurses widechar num: %d\n", NCURSES_WIDECHAR); #endif fprintf(stdout, "wchar_t width: %d, max: %d\n", __SIZEOF_WCHAR_T__, __WCHAR_MAX__); #if NCURSES_EXT_FUNCS fprintf(stdout, "with ncurses extended functions support no: %d\n", NCURSES_EXT_FUNCS); #else fprintf(stdout, "without ncurses extended function support\n"); #endif #ifdef NCURSES_EXT_COLORS fprintf(stdout, "with ncurses extended colors no: %d\n", NCURSES_EXT_COLORS); #else fprintf(stdout, "without ncurses extended colors\n"); #endif #ifdef PDCURSES fprintf(stdout, "with pdcurses %s\n", PDC_VERDOT); #endif #ifdef PDC_WIDE fprintf(stdout, "with pdcurses wide char support\n"); #endif #ifdef HAVE_POSTGRESQL fprintf(stdout, "with postgres client integration\n"); #else fprintf(stdout, "without postgres client\n"); #endif #if defined(HAVE_INOTIFY) fprintf(stdout, "with inotify support\n"); #else fprintf(stdout, "without inotify support\n"); #endif #if defined(HAVE_KQUEUE) fprintf(stdout, "with kqueue support\n"); #else fprintf(stdout, "without kqueue support\n"); #endif #ifdef HAVE_SYS_UTSNAME_H if (uname(&u_name) != -1) { fprintf(stdout, "%s %s %s %s %s\n", u_name.sysname, u_name.nodename, u_name.release, u_name.version, u_name.machine); } #endif } bool readargs(char **argv, int argc, Options *opts, StateData *state) { int opt; int option_index = 0; int lopt; state->errstr = NULL; /* force reset getopt interface */ optind = 0; while ((opt = getopt_long(argc, argv, "abs:c:d:f:h:p:XVFgGiIq:U:w:W", long_options, &option_index)) != -1) { int n; switch (opt) { case 1: { fprintf(stdout, "pspg is a Unix pager designed for table browsing.\n\n"); fprintf(stdout, "Usage:\n"); fprintf(stdout, " %s [OPTION] [file]\n", argv[0]); fprintf(stdout, "\nGeneral options:\n"); fprintf(stdout, " --about about authors\n"); fprintf(stdout, " --help show this help\n"); fprintf(stdout, " -V, --version show version\n"); fprintf(stdout, " --info show info about libraries and system\n"); fprintf(stdout, " --direct-color use direct true colors\n"); fprintf(stdout, " -f, --file=FILE open file\n"); fprintf(stdout, " -F, --quit-if-one-screen\n"); fprintf(stdout, " quit if content is one screen\n"); fprintf(stdout, " --clipboard-app=NUM specify app used by copy to clipboard (1, 2, 3)\n"); fprintf(stdout, " --esc-delay=NUM specify escape delay in ms (-1 inf, 0 not used, )\n"); fprintf(stdout, " --interactive force interactive mode\n"); fprintf(stdout, " --ignore_file_suffix don't try to deduce format from file suffix\n"); fprintf(stdout, " --ni not interactive mode (only for csv and query)\n"); fprintf(stdout, " --no-mouse don't use own mouse handling\n"); fprintf(stdout, " --no-progressive-load don't use progressive data load\n"); fprintf(stdout, " --no-sigint-search-reset\n"); fprintf(stdout, " --no-watch-file don't watch inotify event of file\n"); fprintf(stdout, " without reset searching on sigint (CTRL C)\n"); fprintf(stdout, " --no-sleep without waits against flickering\n"); fprintf(stdout, " --no-xterm-mouse-mode don't use optional xterm mouse mode\n"); fprintf(stdout, " --only-for-tables use std pager when content is not table\n"); fprintf(stdout, " --on-sigint-exit exit on sigint(CTRL C or Escape)\n"); fprintf(stdout, " --pgcli-fix try to fix some pgcli related issues\n"); fprintf(stdout, " --querystream read queries from stream forever\n"); fprintf(stdout, " --quit-on-f3 exit on F3 like mc viewers\n"); fprintf(stdout, " --rr=ROWNUM rows reserved for specific purposes\n"); fprintf(stdout, " --stream read input forever\n"); fprintf(stdout, " -X, --reprint-on-exit preserve content after exit\n"); fprintf(stdout, "\nOutput format options:\n"); fprintf(stdout, " -a, --ascii decor force ascii\n"); fprintf(stdout, " -b, --blackwhite black-white style\n"); fprintf(stdout, " -s, --style=N set color style number (0..%d)\n", MAX_STYLE); fprintf(stdout, " --bold-labels row, column labels use bold font\n"); fprintf(stdout, " --bold-cursor cursor use bold font\n"); fprintf(stdout, " --border type of borders (0..2)\n"); fprintf(stdout, " --custom-style=NAME name of custom color style\n"); fprintf(stdout, " --double-header header separator uses double lines\n"); fprintf(stdout, " --force-uniborder replace ascii borders by unicode borders\n"); fprintf(stdout, " --hide-header-line hides header line\n"); fprintf(stdout, " --highlight-odd-rec use special style for odd records\n"); fprintf(stdout, " --ignore-short-rows rows with wrong column numbers are ignored\n"); fprintf(stdout, " --null=STRING STRING used instead NULL\n"); fprintf(stdout, "\nSearching options\n"); fprintf(stdout, " -g --hlite-search, -G --HILITE-SEARCH\n"); fprintf(stdout, " don't highlight lines for searches\n"); fprintf(stdout, " -i --ignore-case ignore case in searches that do not contain uppercase\n"); fprintf(stdout, " -I --IGNORE-CASE ignore case in all searches\n"); fprintf(stdout, "\nInterface options:\n"); fprintf(stdout, " -c, --freezecols=N freeze N columns (0..9)\n"); fprintf(stdout, " --less-status-bar status bar like less pager\n"); fprintf(stdout, " --line-numbers show line number column\n"); fprintf(stdout, " --menu-always show top bar menu every time\n"); fprintf(stdout, " --no-bars, --no-commandbar, --no-topbar\n"); fprintf(stdout, " don't show bottom, top bar or both\n"); fprintf(stdout, " --no-cursor row cursor will be hidden\n"); fprintf(stdout, " --no-last-row-search don't use the last pattern when starting a new search\n"); fprintf(stdout, " --no-scrollbar don't show scrollbar\n"); fprintf(stdout, " --no-sound don't use beep when scroll is not possible\n"); fprintf(stdout, " --tabular-cursor cursor is visible only when data has table format\n"); fprintf(stdout, " --vertical-cursor show vertical column cursor\n"); fprintf(stdout, "\nInput format options:\n"); fprintf(stdout, " --csv input stream has csv format\n"); fprintf(stdout, " --csv-separator char used as field separator\n"); fprintf(stdout, " --csv-header [on/off] specify header line usage\n"); fprintf(stdout, " --skip-columns-like=\"SPACE SEPARATED STRING LIST\"\n"); fprintf(stdout, " columns with substr in name are ignored\n"); fprintf(stdout, " --csv-trim-width=NUM trim value after NUM chars\n"); fprintf(stdout, " --csv-trim-rows=NUM trim value after NUM rows\n"); fprintf(stdout, " --tsv input stream has tsv format\n"); fprintf(stdout, "\nOn exit options:\n"); fprintf(stdout, " --on-exit-reset sends reset terminal sequence \"\\33c\"\n"); fprintf(stdout, " --on-exit-clean sends clean terminal sequence \"\\033[2J\"\n"); fprintf(stdout, " --on-exit-erase-line sends erase line terminal sequence \"\\033[2K\\r\"\n"); fprintf(stdout, " --on-exit-sgr0 sends sgr0 terminal sequence \"\\033[0;10m\"\n"); fprintf(stdout, "\nWatch mode options:\n"); fprintf(stdout, " -q, --query=QUERY execute query\n"); fprintf(stdout, " -w, --watch time the query (or read file) is repeated every time (sec)\n"); fprintf(stdout, "\nConnection options:\n"); fprintf(stdout, " -d, --dbname=DBNAME database name\n"); fprintf(stdout, " -h, --host=HOSTNAME database server host (default: \"local socket\")\n"); fprintf(stdout, " -p, --port=PORT database server port (default: \"5432\")\n"); fprintf(stdout, " -U, --username=USERNAME database user name\n"); fprintf(stdout, " -W, --password force password prompt\n"); fprintf(stdout, "\nDebug options:\n"); fprintf(stdout, " --log=FILE log debug info to file\n"); fprintf(stdout, " --wait=NUM wait NUM seconds to allow attach from a debugger\n"); fprintf(stdout, "\n"); fprintf(stdout, "pspg shares lot of key commands with less pager or vi editor.\n"); return false; } case 'a': opts->force_ascii_art = true; break; case 'I': opts->ignore_case = true; break; case 'i': opts->ignore_lower_case = true; break; case 'q': opts->query = optarg; break; case 'w': opts->watch_time = atoi(optarg); if (opts->watch_time < 0 || opts->watch_time > 3600) { state->errstr = "query watch time can be between 0 and 3600"; return false; } break; case 2: opts->no_mouse = true; break; case 3: quiet_mode = true; break; case 4: opts->less_status_bar = true; break; case 5: opts->force_uniborder = true; break; case 6: opts->no_commandbar = true; break; case 7: opts->no_topbar = true; break; case 8: opts->no_commandbar = true; opts->no_topbar = true; break; case 9: opts->show_rownum = true; break; case 10: opts->no_cursor = true; break; case 11: opts->tabular_cursor = true; break; case 12: opts->bold_labels = true; break; case 13: opts->bold_cursor = true; break; case 14: state->only_for_tables = true; break; case 15: opts->vertical_cursor = true; break; case 16: { fprintf(stdout, "The pspg-%s is special pager designed for databases.\n\n", PSPG_VERSION); fprintf(stdout, "Authors:\n"); fprintf(stdout, " 2017-2023 Pavel Stehule, Benesov district, Czech Republic\n\n"); fprintf(stdout, "Licence:\n"); fprintf(stdout, " Distributed under BSD licence\n\n"); return false; } case 17: opts->csv_format = true; break; case 18: opts->csv_separator = *optarg; break; case 19: n = atoi(optarg); if (n < 0 || n > 2) { state->errstr = "csv border type can be between 0 and 2"; return false; } opts->border_type = n; break; case 21: opts->on_sigint_exit = true; break; case 22: opts->no_sigint_search_reset = true; break; case 23: state->no_interactive = true; break; case 24: opts->double_header = true; break; case 25: opts->log_pathname = sstrdup(optarg); break; case 26: state->reserved_rows = atoi(optarg); if (state->reserved_rows < 1 || state->reserved_rows > 100) { state->errstr = "reserved rows should be between 1 and 100"; return false; } break; case 27: state->interactive = true; break; case 28: { if (nstreq(optarg, "off")) opts->csv_header = '-'; else if (nstreq(optarg, "on")) opts->csv_header = '+'; else { state->errstr = "csv_header option can be on \"or\" \"off\""; return false; } break; } case 29: opts->ignore_short_rows = true; break; case 30: opts->tsv_format = true; break; case 31: { char *nullstr; int size = strlen(optarg); nullstr = trim_quoted_str(optarg, &size); if (size > 255) { state->errstr = "nullstr is too long (only 255 bytes are allowed)"; return false; } else opts->nullstr = sstrndup(nullstr, size); break; } case 32: state->ignore_file_suffix = true; break; case 33: opts->watch_file = false; break; case 34: state->stream_mode = true; break; case 35: opts->quit_on_f3 = true; break; case 36: state->boot_wait = atoi(optarg); if (state->boot_wait < 0 || state->boot_wait > 120) { state->errstr = "wait should be between 1 and 120 (sec)"; return false; } break; case 38: opts->csv_skip_columns_like = sstrdup(optarg); break; case 39: opts->pgcli_fix = true; break; case 40: opts->xterm_mouse_mode = false; break; case 41: opts->show_scrollbar = false; break; case 42: opts->clipboard_app = atoi(optarg); if (opts->clipboard_app < 1 || opts->clipboard_app > 3) { state->errstr = "value of clipboard_app should be 1, 2, or 3"; return false; } break; case 'V': print_version(); return false; case 'X': state->no_alternate_screen = true; break; case 'b': opts->theme = 0; break; case 's': n = atoi(optarg); if (n < 0 || n > MAX_STYLE) { format_error("only color schemas 0 .. %d are supported", MAX_STYLE); return false; } opts->theme = n; break; case 'c': n = atoi(optarg); if (n < 0 || n > 9) { state->errstr = "fixed columns should be between 0 and 4"; return false; } opts->freezed_cols = n; break; case 'f': { if (opts->pathname) { state->errstr = "only one file can be browsed"; return false; } opts->pathname = sstrdup(optarg); } break; case 'F': state->quit_if_one_screen = true; break; case 'g': opts->no_highlight_lines = true; break; case 'G': opts->no_highlight_search = true; break; case 'h': opts->host = sstrdup(optarg); break; case 'p': { long port; port = strtol(optarg, NULL, 10); if ((port < 1) || (port > 65535)) { format_error("invalid port number: %s", optarg); return false; } opts->port = sstrdup(optarg); } break; case 'U': opts->username = sstrdup(optarg); break; case 'W': opts->force_password_prompt = true; break; case 'd': opts->dbname = sstrdup(optarg); break; case 43: opts->no_sleep = true; break; case 44: opts->querystream = true; state->stream_mode = true; break; case 45: #ifndef COMPILE_MENU state->errstr = "only one file can be browsed"; return false; #else opts->menu_always = true; break; #endif case 46: opts->last_row_search = false; break; case 47: opts->progressive_load_mode = false; break; case 49: opts->custom_theme_name = sstrdup(optarg); break; case 50: opts->highlight_odd_rec = true; break; case 51: opts->hide_header_line = true; break; case 52: opts->esc_delay = atoi(optarg); break; case 53: opts->on_exit_clean = true; break; case 54: opts->on_exit_reset = true; break; case 55: opts->on_exit_erase_line = true; break; case 56: print_info(); return false; case 57: opts->on_exit_sgr0 = true; break; case 58: #ifdef NCURSES_EXT_COLORS opts->direct_color = true; break; #else state->errstr = "direct color mode requires ncurses with extended function support"; return false; #endif break; case 59: lopt = atol(optarg); if (lopt < 0 || lopt > UINT_MAX) { state->errstr = "value for csv-trim-width is out of range (0 .. INT_MAX)"; return false; } opts->csv_trim_width = (unsigned int) lopt; break; case 60: lopt = atol(optarg); if (lopt < 0 || lopt > UINT_MAX) { state->errstr = "value for csv-trim-rows is out of range (0 .. INT_MAX)"; return false; } opts->csv_trim_rows = (unsigned int) lopt; break; default: { format_error("Try %s --help\n", argv[0]); return false; } } } for (; optind < argc; optind++) { if (opts->pathname) { state->errstr = "only one file can be browsed"; return false; } opts->pathname = sstrdup(argv[optind]); } return true; } /* * Deduce format type from file suffix */ static int get_format_type(char *path) { char buffer[4]; char *r_ptr, *w_ptr; int i; int l; l = strlen(path); if (l < 5) return FILE_MATRIX; r_ptr = path + l - 4; w_ptr = buffer; if (*r_ptr++ != '.') return FILE_MATRIX; for (i = 0; i < 3; i++) *w_ptr++ = tolower(*r_ptr++); *w_ptr = '\0'; if (strcmp(buffer, "csv") == 0) return FILE_CSV; else if (strcmp(buffer, "tsv") == 0) return FILE_TSV; else return FILE_MATRIX; } /* * Post parsing arguments check */ bool args_are_consistent(Options *opts, StateData *state) { state->errstr = NULL; if (state->no_interactive && state->interactive) { state->errstr = "option --ni and --interactive cannot be used together"; return false; } if (opts->query && opts->pathname) { state->errstr = "option --query and --file cannot be used together"; return false; } if (opts->query && opts->querystream) { state->errstr = "option --query and --querystream cannot be used together"; return false; } if (opts->csv_format && opts->tsv_format) { state->errstr = "option --csv and --tsv cannot be used together"; return false; } if (opts->watch_time && !(opts->query || opts->pathname)) { state->errstr = "cannot use watch mode when query or file is missing"; return false; } if (opts->csv_skip_columns_like && (opts->csv_header != '+' && !opts->query)) { state->errstr = "skipping columns requires header row (option \"csv-header on\")"; return false; } /* post parsing, checking auto setting */ if (opts->pathname) state->file_format_from_suffix = get_format_type(opts->pathname); if (!opts->csv_format && !opts->tsv_format && state->file_format_from_suffix != FILE_UNDEF && !state->ignore_file_suffix) { if (state->file_format_from_suffix == FILE_CSV) opts->csv_format = true; else if (state->file_format_from_suffix == FILE_TSV) opts->tsv_format = true; } /* use progressive load mode only for data */ if (opts->querystream) opts->progressive_load_mode = false; return true; } pspg-5.8.1/src/bscommands.c000066400000000000000000000455111452457446400156040ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * bscommands.c * a routines for implementation (parsing, execution) of backslash * commands * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/bscommands.c * *------------------------------------------------------------------------- */ #include "pspg.h" #include "unicode.h" #include #include #include #include typedef struct { PspgCommand command; ClipboardFormat format; int rows; double percent; char *nullstr; const char *pipecmd; } ExportedSpec; typedef struct { bool backward; bool selected; int colno; char *pattern; } SearchSpec; /* * Returns pointer to first non token char. When token is valid, then * output n is higher than 0 and token pointer is non null. */ const char * get_token(const char *instr, const char **token, int *n) { *token = NULL; *n = 0; /* skip initial spaces */ while (*instr == ' ') instr += 1; if (*instr == '\0') return NULL; if (isalpha(*instr)) { *token = instr++; while (isalpha(*instr)) instr += 1; *n = instr - *token; } return instr; } /* * Try to detect identifier in quotes or double quotes. */ static const char * get_identifier(const char *instr, const char **ident, int *n, bool allow_colnum) { *ident = NULL; *n = 0; if (!instr) return NULL; /* skip initial spaces */ while (*instr == ' ') instr += 1; if (*instr == '\0') return NULL; if (*instr == '\'' || *instr == '"') { char ending_symbol = *instr; *ident = ++instr; while (*instr) { if (instr[0] == '\\' && (instr[1] == '\'' || instr[1] == '"')) { instr += 2; } else if (*instr == ending_symbol) { *n = instr - *ident; instr += 1; break; } else instr += 1; } } else if (isalpha(*instr) || *instr == '_') { *ident = instr++; while (isalnum(*instr) || *instr == '_') instr += 1; *n = instr - *ident; } else if (allow_colnum && isdigit(*instr)) { *ident = instr++; while (isdigit(*instr) || *instr == '_') instr += 1; *n = instr - *ident; } return *instr ? instr : NULL; } static const char * parse_exported_spec(const char *instr, ExportedSpec *spec, bool *is_valid) { const char *token; int n; spec->command = cmd_Copy; spec->format = CLIPBOARD_FORMAT_TEXT; spec->rows = 0; spec->percent = 0.0; spec->nullstr = NULL; spec->pipecmd = NULL; *is_valid = false; if (instr) { bool format_is_specified_already = false; bool range_is_specified_already = false; bool null_is_specified_already = false; instr = get_token(instr, &token, &n); while (token) { bool range_specified = false; bool format_specified = false; bool next_token_shouldbe_number = false; if (n > 20) { show_info_wait(" Syntax error (too long token)", NULL, NULL, true, false, true); return NULL; } if (IS_TOKEN(token, n, "top")) { spec->command = cmd_CopyTopLines; range_specified = true; next_token_shouldbe_number = true; } else if (IS_TOKEN(token, n, "bottom")) { spec->command = cmd_CopyBottomLines; range_specified = true; next_token_shouldbe_number = true; } else if (IS_TOKEN(token, n, "all")) { spec->command = cmd_CopyAllLines; range_specified = true; } else if (IS_TOKEN(token, n, "sel") || IS_TOKEN(token, n, "selected")) { spec->command = cmd_CopySelected; range_specified = true; } else if (IS_TOKEN(token, n, "search") || IS_TOKEN(token, n, "searched")) { spec->command = cmd_CopySearchedLines; range_specified = true; } else if (IS_TOKEN(token, n, "mark") || IS_TOKEN(token, n, "marked")) { spec->command = cmd_CopyMarkedLines; range_specified = true; } else if (IS_TOKEN(token, n, "csv")) { spec->format = CLIPBOARD_FORMAT_CSV; format_specified = true; } else if (IS_TOKEN(token, n, "tsvc")) { spec->format = CLIPBOARD_FORMAT_TSVC; format_specified = true; } else if (IS_TOKEN(token, n, "sqlval") || IS_TOKEN(token, n, "sqlvalues")) { spec->format = CLIPBOARD_FORMAT_SQL_VALUES; format_specified = true; } else if (IS_TOKEN(token, n, "text")) { spec->format = CLIPBOARD_FORMAT_TEXT; format_specified = true; } else if (IS_TOKEN(token, n, "pipesep") || IS_TOKEN(token, n, "ps")) { spec->format = CLIPBOARD_FORMAT_PIPE_SEPARATED; format_specified = true; } else if (IS_TOKEN(token, n, "insert")) { spec->format = CLIPBOARD_FORMAT_INSERT; format_specified = true; } else if (IS_TOKEN(token, n, "cinsert")) { spec->format = CLIPBOARD_FORMAT_INSERT_WITH_COMMENTS; format_specified = true; } else if (IS_TOKEN(token, n, "null") || IS_TOKEN(token, n, "nullstr")) { const char *ident; int ident_len; if (null_is_specified_already) { show_info_wait(" Syntax error (null is specified already)", NULL, NULL, true, false, true); return NULL; } while (*instr == ' ') instr += 1; if (*instr != '"') { show_info_wait(" Syntax error (expected '\"')", NULL, NULL, true, false, true); return NULL; } instr = get_identifier(instr, &ident, &ident_len, false); if (!ident) { show_info_wait(" Syntax error (expected closed quoted string)", NULL, NULL, true, false, true); return NULL; } ident = trim_quoted_str(ident, &ident_len); if (ident_len > 0) spec->nullstr = sstrndup(ident, ident_len); } else { char buffer[255]; snprintf(buffer, 255, " Syntax error (unknown token \"%.*s\")", n, token); show_info_wait(buffer, NULL, NULL, true, false, true); return NULL; } if (format_is_specified_already && format_specified) { show_info_wait(" Syntax error (format specification is redundant)", NULL, NULL, true, false, true); return NULL; } if (range_is_specified_already && range_specified) { show_info_wait(" Syntax error (range specification is redundant)", NULL, NULL, true, false, true); return NULL; } if (format_specified) format_is_specified_already = true; if (range_specified) range_is_specified_already = true; if (next_token_shouldbe_number) { char *endptr = NULL; errno = 0; if (instr) spec->percent = strtod(instr, &endptr); if (!instr || instr == endptr || errno != 0) { show_info_wait(" Syntax error (expected number)", NULL, NULL, true, false, true); return NULL; } if (endptr && *endptr != '%') { spec->rows = (int) spec->percent; spec->percent = 0.0; endptr += 1; } instr = endptr; } instr = get_token(instr, &token, &n); } if (instr && *instr) { if (*instr == '|') { spec->pipecmd = ++instr; instr = NULL; } else if (*instr != '\\') { show_info_wait(" Syntax error (unexpected symbol)", NULL, NULL, true, false, true); return NULL; } } } *is_valid = true; return instr; } /* * Returns count of column names with pattern string */ static int substr_column_name_search(DataDesc *desc, const char *pattern, int len, int first_colno, int *colno) { int i; int count = 0; *colno = -1; for (i = first_colno; i <= desc->columns; i++) { char *name = desc->namesline + desc->cranges[i - 1].name_offset; int size = desc->cranges[i - 1].name_size; if (use_utf8) { if (utf8_nstrstr_with_sizes(name, size, pattern, len)) { if (*colno == -1) *colno = i; count += 1; } } else { if (nstrstr_with_sizes(name, size, pattern, len)) { if (*colno == -1) *colno = i; count += 1; } } } return count; } static const char * parse_search_spec(DataDesc *desc, const char *instr, SearchSpec *spec, bool *is_valid) { spec->backward = false; spec->selected = false; spec->colno = 0; spec->pattern = NULL; *is_valid = false; if (instr) { bool direction_is_specified_already = false; bool range_is_specified_already = false; bool pattern_is_specified_already = false; while (instr) { while (*instr == ' ') instr += 1; if (*instr == '"') { const char *ident; int n; instr = get_identifier(instr, &ident, &n, false); if (!ident) { show_info_wait(" Syntax error (expected closed quoted string)", NULL, NULL, true, false, true); return NULL; } spec->pattern = sstrndup(ident, n); if (pattern_is_specified_already) { show_info_wait(" Syntax error (pattern is specified already)", NULL, NULL, true, false, true); return NULL; } pattern_is_specified_already = true; continue; } else { const char *token; int n; const char *pattern = instr; int pattern_len; instr = get_token(instr, &token, &n); if (token) { if (IS_TOKEN(token, n, "back") || IS_TOKEN(token, n, "backward")) { spec->backward = true; if (direction_is_specified_already) { show_info_wait(" Syntax error (direction is specified already)", NULL, NULL, true, false, true); return NULL; } direction_is_specified_already = true; continue; } else if (IS_TOKEN(token, n, "sel") || IS_TOKEN(token, n, "selected")) { spec->selected = true; if (range_is_specified_already) { show_info_wait(" Syntax error (range specification is redundant)", NULL, NULL, true, false, true); return NULL; } range_is_specified_already = true; continue; } else if (IS_TOKEN(token, n, "colum") || IS_TOKEN(token, n, "column")) { const char *ident; int len; if (range_is_specified_already) { show_info_wait(" Syntax error (range specification is redundant)", NULL, NULL, true, false, true); return NULL; } instr = get_identifier(instr, &ident, &len, false); if (len > 0) { ident = trim_quoted_str(ident, &len); if (substr_column_name_search(desc, ident, len, 1, &spec->colno) == 0) { show_info_wait(" Cannot to identify column", NULL, true, true, false, true); return NULL; } } else { show_info_wait(" Invalid identifier (expected column name)", NULL, true, true, false, true); return NULL; } range_is_specified_already = true; continue; } } pattern_len = strlen(pattern); pattern = trim_quoted_str(pattern, &pattern_len); if (pattern_len > 0) { spec->pattern = sstrndup(pattern, pattern_len); if (pattern_is_specified_already) { show_info_wait(" Syntax error (pattern is specified already)", NULL, NULL, true, false, true); return NULL; } } *is_valid = true; return NULL; } } *is_valid = true; } return instr; } /* * Parse and processes one backslash command. * Returns pointer to next backslash command. * */ const char * parse_and_eval_bscommand(const char *cmdline, Options *opts, ScrDesc *scrdesc, DataDesc *desc, int *next_command, long *long_argument, bool *long_argument_is_valid, char **string_argument, bool *string_argument_is_valid, bool *refresh_clear) { bool next_is_num = false; bool sign_minus = false; bool sign_plus = false; const char *ptr; char *endptr; int n; if (!cmdline) return NULL; while (*cmdline == ' ') cmdline++; /* * Leave when line is empty. This code can be duplicited, because the command * can start here, or we can continue in command line processing. */ if (*cmdline == '\0') return NULL; if (*cmdline++ != '\\') { show_info_wait(" Syntax error (expected \"\\\")", NULL, true, true, false, true); return NULL; } /* * Ignore empty commands on the end command line. * It's probably some artefact of escape. */ if (*cmdline == '\0') return NULL; if (*cmdline == '+') { /* ignore initial + */ next_is_num = true; sign_plus = true; cmdline += 1; } else if (*cmdline == '-') { next_is_num = true; sign_minus = true; cmdline += 1; } if (isdigit(*cmdline)) { *long_argument = strtol(cmdline, &endptr, 10); if (sign_plus) { *long_argument = labs(*long_argument); *next_command = cmd_GotoLineRel; } else if (sign_minus) { *long_argument = - labs(*long_argument); *next_command = cmd_GotoLineRel; } else if (*endptr == '-') { *long_argument = - labs(*long_argument); *next_command = cmd_GotoLine; endptr += 1; } else /* \N or \N+ */ { *long_argument = labs(*long_argument); *next_command = cmd_GotoLine; if (*endptr == '+') endptr += 1; } cmdline = endptr; *long_argument_is_valid = true; return cmdline; } else if (next_is_num) { show_info_wait(" Syntax error (expected number)", NULL, true, true, false, true); return NULL; } n = 0; ptr = cmdline; while (isalpha(*ptr)) { ptr += 1; n += 1; } if (IS_TOKEN(cmdline, n, "q") || IS_TOKEN(cmdline, n, "quit")) { cmdline += n; *next_command = cmd_Quit; } else if (IS_TOKEN(cmdline, n, "the") || IS_TOKEN(cmdline, n, "theme")) { cmdline += n; *long_argument = strtol(cmdline, &endptr, 10); if (cmdline != endptr) { *long_argument_is_valid = true; *next_command = cmd_SetTheme; cmdline = endptr; } else { show_info_wait(" expected number", NULL, true, true, false, true); return NULL; } } else if (IS_TOKEN(cmdline, n, "cth") || IS_TOKEN(cmdline, n, "cthe") || IS_TOKEN(cmdline, n, "ctheme")) { const char *ident; int len; cmdline += n; free(*string_argument); *string_argument = NULL; *string_argument_is_valid = false; cmdline = get_identifier(cmdline, &ident, &len, false); if (!ident) { show_info_wait(" Syntax error (expected string)", NULL, NULL, true, false, true); return NULL; } ident = trim_quoted_str(ident, &len); if (len > 0) { *string_argument = sstrndup(ident, len); *string_argument_is_valid = true; } else { show_info_wait(" Syntax error (expected non empty)", NULL, NULL, true, false, true); return NULL; } *next_command = cmd_SetCustomTheme; } else if (IS_TOKEN(cmdline, n, "search")) { SearchSpec spec; bool is_valid; free(*string_argument); *string_argument = NULL; *string_argument_is_valid = false; cmdline = parse_search_spec(desc, cmdline + n, &spec, &is_valid); if (is_valid) { throw_searching(scrdesc, desc); if (spec.colno > 0) { scrdesc->search_first_column = desc->cranges[spec.colno - 1].xmin; scrdesc->search_columns = desc->cranges[spec.colno - 1].xmax - scrdesc->search_first_column + 1; scrdesc->search_selected_mode = true; } else if (spec.selected) { if (scrdesc->selected_first_row == -1 && scrdesc->selected_first_column == -1) { show_info_wait(" There are not selected area", NULL, true, true, true, false); return NULL; } scrdesc->search_first_row = scrdesc->selected_first_row; scrdesc->search_rows = scrdesc->selected_rows; scrdesc->search_first_column = scrdesc->selected_first_column; scrdesc->search_columns = scrdesc->selected_columns; scrdesc->search_selected_mode = true; } if (spec.pattern) { *string_argument = spec.pattern; *string_argument_is_valid = true; } if (spec.backward) *next_command = cmd_BackwardSearch; else *next_command = cmd_ForwardSearch; } else free(spec.pattern); } else if (IS_TOKEN(cmdline, n, "ord") || IS_TOKEN(cmdline, n, "order") || IS_TOKEN(cmdline, n, "ordd") || IS_TOKEN(cmdline, n, "orderd") || IS_TOKEN(cmdline, n, "sort") || IS_TOKEN(cmdline, n, "sortd") || IS_TOKEN(cmdline, n, "dsort") || IS_TOKEN(cmdline, n, "rs") || IS_TOKEN(cmdline, n, "rsort") || IS_TOKEN(cmdline, n, "asc") || IS_TOKEN(cmdline, n, "desc")) { const char *ident; int len; bool is_desc; PspgCommand OrderCommand; is_desc = IS_TOKEN(cmdline, n, "ordd") || IS_TOKEN(cmdline, n, "orderd") || IS_TOKEN(cmdline, n, "sortd") || IS_TOKEN(cmdline, n, "dsort") || IS_TOKEN(cmdline, n, "rs") || IS_TOKEN(cmdline, n, "rsort") || IS_TOKEN(cmdline, n, "desc"); OrderCommand = is_desc ? cmd_SortDesc : cmd_SortAsc; cmdline = get_identifier(cmdline + n, &ident, &len, true); if (len > 0) { if (isdigit(*ident)) { /* entered column number */ *long_argument = strtol(ident, NULL, 10); *long_argument_is_valid = true; if (*long_argument >= 1 && *long_argument <= desc->columns) *next_command = OrderCommand; else { show_info_wait(" Column number is out of range", NULL, true, true, false, true); return NULL; } } else { int count; int colno; ident = trim_quoted_str(ident, &len); count = substr_column_name_search(desc, ident, len, 1, &colno); *long_argument = colno; if (count > 0) { *long_argument_is_valid = true; *next_command = OrderCommand; } else { show_info_wait(" Cannot to identify column", NULL, true, true, false, true); return NULL; } } } else { show_info_wait(" Invalid identifier (expected column name)", NULL, true, true, false, true); return NULL; } } else if (IS_TOKEN(cmdline, n, "save")) { ExportedSpec expspec; bool is_valid; cmdline = parse_exported_spec(cmdline + n, &expspec, &is_valid); if (is_valid) { Options loc_opts; memcpy(&loc_opts, opts, sizeof(Options)); loc_opts.copy_target = COPY_TARGET_FILE; loc_opts.nullstr = expspec.nullstr; loc_opts.empty_string_is_null = !expspec.nullstr; export_to_file(expspec.command, expspec.format, &loc_opts, scrdesc, desc, 0, 0, expspec.rows, expspec.percent, expspec.pipecmd, refresh_clear); } free(expspec.nullstr); } else if (IS_TOKEN(cmdline, n, "copy")) { ExportedSpec expspec; bool is_valid; cmdline = parse_exported_spec(cmdline + n, &expspec, &is_valid); if (is_valid) { Options loc_opts; memcpy(&loc_opts, opts, sizeof(Options)); loc_opts.copy_target = COPY_TARGET_CLIPBOARD; loc_opts.nullstr = expspec.nullstr; loc_opts.empty_string_is_null = !expspec.nullstr; export_to_file(expspec.command, expspec.format, &loc_opts, scrdesc, desc, 0, 0, expspec.rows, expspec.percent, expspec.pipecmd, refresh_clear); } free(expspec.nullstr); } else { show_info_wait(" Unknown command \"%s\"", cmdline, true, true, false, true); return NULL; } return cmdline; } pspg-5.8.1/src/commands.c000066400000000000000000000375661452457446400152720ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * commands.c * a list of commands and translations between keys and commands * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/commands.c * *------------------------------------------------------------------------- */ #include "pspg.h" #include "commands.h" int CTRL_HOME; int CTRL_END; int CTRL_SHIFT_HOME; int CTRL_SHIFT_END; int CTRL_LEFT; int CTRL_RIGHT; int SHIFT_LEFT; int SHIFT_RIGHT; #ifndef PDCURSES static int get_code(const char *capname, int fallback) { #ifdef NCURSES_EXT_FUNCS char *s; int result; s = tigetstr((NCURSES_CONST char *) capname); if (s == NULL || s == (char *) -1) return fallback; result = key_defined(s); return result > 0 ? result : fallback; #else return fallback; #endif } #endif /* * Set a value of CTRL_HOME and CTRL_END key codes. These codes * can be redefined on some plaforms. */ void initialize_special_keycodes() { #ifdef PDCURSES CTRL_HOME = CTL_HOME; CTRL_END = CTL_END; CTRL_SHIFT_HOME = -1; CTRL_SHIFT_END = -1; CTRL_RIGHT = CTL_RIGHT; CTRL_LEFT = CTL_LEFT; SHIFT_RIGHT = KEY_SRIGHT; SHIFT_LEFT = KEY_SLEFT; #else #ifdef NCURSES_EXT_FUNCS use_extended_names(TRUE); #endif CTRL_HOME = get_code("kHOM5", 538); CTRL_END = get_code("kEND5", 533); CTRL_SHIFT_HOME = get_code("kHOM6", 537); CTRL_SHIFT_END = get_code("kEND6", 532); CTRL_RIGHT = get_code("kRIT5", 561); CTRL_LEFT = get_code("kLFT5", 546); SHIFT_RIGHT = get_code("kRIT2", 402); SHIFT_LEFT = get_code("kLFT2", 393); #endif } /* * For debug purposes */ const char * cmd_string(int cmd) { switch (cmd) { case cmd_Invalid: return "Invalid"; case cmd_RESIZE_EVENT: return "RESIZE"; case cmd_MOUSE_EVENT: return "MOUSE"; case cmd_ReleaseCols: return "ReleaseCols"; case cmd_FreezeOneCol: return "FreezeOneCol"; case cmd_FreezeTwoCols: return "FreezeTwoCols"; case cmd_FreezeThreeCols: return "FreezeThreeCols"; case cmd_FreezeFourCols: return "FreezeFourCols"; case cmd_FreezeFiveCols: return "FreezeFiveCols"; case cmd_FreezeSixCols: return "FreezeSixCols"; case cmd_FreezeSevenCols: return "FreezeSevenCols"; case cmd_FreezeEightCols: return "FreezeEightCols"; case cmd_FreezeNineCols: return "FreezeNineCols"; case cmd_SoundToggle: return "SoundTogle"; case cmd_MouseToggle: return "MouseTogle"; case cmd_UtfArtToggle: return "UtfArtToggle"; case cmd_MenuAsciiArtToggle: return "MenuAsciiArtToggle"; case cmd_CSSearchSet: return "CSSearchSet"; case cmd_CISearchSet: return "CISearchSet"; case cmd_USSearchSet: return "USSearchSet"; case cmd_HighlightLines: return "HighlightLines"; case cmd_HighlightValues: return "HighlightValues"; case cmd_NoHighlight: return "NoHighlight"; case cmd_SetTheme_MidnightBlack: return "SetTheme_MidnightBlack"; case cmd_SetTheme_Midnight: return "SetTheme_Midnight"; case cmd_SetTheme_Foxpro: return "SetTheme_Foxpro"; case cmd_SetTheme_Pdmenu: return "SetTheme_Pdmenu"; case cmd_SetTheme_White: return "SetTheme_White"; case cmd_SetTheme_Mutt: return "SetTheme_Mutt"; case cmd_SetTheme_Pcfand: return "SetTheme_Pcfand"; case cmd_SetTheme_Green: return "SetTheme_Green"; case cmd_SetTheme_Blue: return "SetTheme_Blue"; case cmd_SetTheme_WP: return "SetTheme_WP"; case cmd_SetTheme_Lowcontrast: return "SetTheme_Lowcontrast"; case cmd_SetTheme_Darkcyan: return "SetTheme_Darkcyan"; case cmd_SetTheme_Paradox: return "SetTheme_Paradox"; case cmd_SetTheme_DBase: return "SetTheme_DBase"; case cmd_SetTheme_DBasemagenta: return "SetTheme_DBasemagenta"; case cmd_SetTheme_Red: return "SetTheme_Red"; case cmd_SetTheme_Simple: return "SetTheme_Simple"; case cmd_SetTheme_SolarDark: return "SetTheme_SolarDark"; case cmd_SetTheme_SolarLight: return "SetTheme_SolarLight"; case cmd_SetTheme_GruvboxLight: return "SetTheme_GruvboxLight"; case cmd_SetTheme_TaoLight: return "SetTheme_TaoLight"; case cmd_SetTheme_Flatwhite: return "SetTheme_Flatwhite"; case cmd_SetTheme_RelationalPipes: return "SetThemeRelationalPipes"; case cmd_SetTheme_PaperColor: return "SetTheme_PaperColor"; case cmd_SetTheme: return "SetTheme"; case cmd_SetCustomTheme: return "SetCustomTheme"; case cmd_SaveSetup: return "SaveSetup"; case cmd_Escape: return "Escape"; case cmd_Quit: return "Quit"; case cmd_RawOutputQuit: return "RawOutputQuit"; case cmd_ShowMenu: return "ShowMenu"; case cmd_FlushBookmarks: return "FlushBookmarks"; case cmd_ToggleBookmark: return "ToggleBookmark"; case cmd_PrevBookmark: return "PrevBookmark"; case cmd_NextBookmark: return "NextBookmark"; case cmd_CursorUp: return "CursorUp"; case cmd_CursorDown: return "CursorDown"; case cmd_ScrollUp: return "ScrollUp"; case cmd_ScrollDown: return "ScrollDown"; case cmd_ScrollUpHalfPage: return "ScrollUpHalfPage"; case cmd_ScrollDownHalfPage: return "ScrollDownHalfPage"; case cmd_MoveLeft: return "MoveLeft"; case cmd_MoveRight: return "MoveRight"; case cmd_MoveCharLeft: return "MoveCharLeft"; case cmd_MoveCharRight: return "MoveCharRight"; case cmd_MoveColumnLeft: return "MoveColumnLeft"; case cmd_MoveColumnRight: return "MoveColumnRight"; case cmd_CursorFirstRow: return "CursorFirstRow"; case cmd_CursorLastRow: return "CursorLastRow"; case cmd_CursorFirstRowPage: return "CursorFirstRowPage"; case cmd_CursorLastRowPage: return "CursorLastRowPage"; case cmd_CursorHalfPage: return "CursorHalfPage"; case cmd_PageUp: return "PageUp"; case cmd_PageDown: return "PageDown"; case cmd_ShowFirstCol: return "ShowFirstCol"; case cmd_ShowLastCol: return "ShowLastCol"; case cmd_SaveData: return "SaveData"; case cmd_SaveAsCSV: return "SaveAsCSV"; case cmd_ForwardSearch: return "ForwardSearch"; case cmd_BackwardSearch: return "BackwardSearch"; case cmd_ForwardSearchInSelection: return "ForwardSearchInSelection"; case cmd_BackwardSearchInSelection: return "BackwardSearchInSelection"; case cmd_SearchNext: return "SearchNext"; case cmd_SearchPrev: return "SearchPrev"; case cmd_SearchColumn: return "SearchColumn"; case cmd_ShowTopBar: return "ShowTopBar"; case cmd_ShowBottomBar: return "ShowBottomBar"; case cmd_RowNumToggle: return "RowNumToggle"; case cmd_GotoLine: return "GotoLine"; case cmd_GotoLineRel: return "GotoLineRel"; case cmd_ShowCursor: return "ShowCursor"; case cmd_ShowVerticalCursor: return "ShowVerticalCursor"; case cmd_BoldLabelsToggle: return "BoldLabelsToggle"; case cmd_BoldCursorToggle: return "BoldCursorToggle"; case cmd_ShowScrollbar: return "ShowScrollBar"; case cmd_SortAsc: return "SortAsc"; case cmd_SortDesc: return "SortDesc"; case cmd_OriginalSort: return "OriginalSort"; case cmd_TogglePause: return "TogglePause"; case cmd_Refresh: return "Refresh"; case cmd_SetCopyFile: return "SetCopyFile"; case cmd_SetCopyClipboard: return "SetCopyClipboard"; case cmd_UseClipboard_CSV: return "UseClipboardFormatCSV"; case cmd_UseClipboard_TSVC: return "UseClipboardFormatTSVC"; case cmd_UseClipboard_text: return "UseClipboardFormattext"; case cmd_UseClipboard_SQL_values: return "UseClipboardFormatSQLValues"; case cmd_UseClipboard_pipe_separated: return "UseClipboardFormatPipeSeparated"; case cmd_UseClipboard_INSERT: return "UseClipboardFormatINSERT"; case cmd_UseClipboard_INSERT_with_comments: return "UseClipboardFormatINSERTwithcomments"; case cmd_TogleEmptyStringIsNULL: return "TogleEmptyStringIsNULL"; case cmd_SetOwnNULLString: return "SetOwnNULLString"; case cmd_Copy: return "Copy"; case cmd_CopyAllLines: return "CopyAllLines"; case cmd_CopyTopLines: return "CopyTopLines"; case cmd_CopyBottomLines: return "CopyBottomLines"; case cmd_CopyLine: return "CopyLine"; case cmd_CopyLineExtended: return "CopyLineExtended"; case cmd_CopyColumn: return "CopyColumn"; case cmd_CopyMarkedLines: return "CopyMarkedLines"; case cmd_CopySearchedLines: return "CopySearchedLines"; case cmd_CopySelected: return "CopySelected"; case cmd_Mark: return "Mark"; case cmd_MarkColumn: return "MarkColumn"; case cmd_MarkAll: return "MarkAll"; case cmd_Unmark: return "Unmark"; case cmd_Mark_NestedCursorCommand: return "MarkNestedCursorCommand"; case cmd_BsCommand: return "BsCommand"; case cmd_ShowPrimaryScreen: return "ShowPrimaryScreen"; case cmd_ToggleHighlightOddRec: return "ToggleHighlightOddRec"; case cmd_ToggleHideHeaderLine: return "ToggleHideHeaderLine"; default: return "unknown command"; } } bool is_cmd_RowNumToggle(int c, bool alt) { if (alt && c == 'n') return true; return false; } int translate_event(int c, bool alt, Options *opts, int *nested_command) { if (c == -1) return cmd_Invalid; if (alt) { switch (c) { case 'b': return cmd_BoldLabelsToggle; case 'c': return cmd_ShowCursor; case 'l': return cmd_GotoLine; case 'm': return cmd_MouseToggle; case 'n': return cmd_RowNumToggle; case 'o': return cmd_FlushBookmarks; case 'k': return cmd_ToggleBookmark; case 'i': return cmd_PrevBookmark; case 'j': return cmd_NextBookmark; case 'q': return cmd_RawOutputQuit; case 'v': return cmd_ShowVerticalCursor; case '2': return cmd_SaveData; case '3': if (opts->quit_on_f3) return cmd_Quit; else return cmd_Mark; break; case '7': return cmd_ForwardSearch; case '9': return cmd_ShowMenu; case PSPG_ESC_CODE: return cmd_Escape; case '0': return cmd_Quit; case '/': return cmd_ForwardSearchInSelection; case '?': return cmd_BackwardSearchInSelection; } } else { switch (c) { case KEY_RESIZE: return cmd_RESIZE_EVENT; case KEY_MOUSE: return cmd_MOUSE_EVENT; case KEY_F(9): return cmd_ShowMenu; case KEY_F(10): case 'q': return cmd_Quit; case KEY_F(3): if (opts->quit_on_f3) return cmd_Quit; else return cmd_Mark; break; case KEY_F(15): return cmd_MarkColumn; case KEY_IC: return cmd_Copy; case KEY_UP: case 'k': return cmd_CursorUp; case KEY_DOWN: case 'j': return cmd_CursorDown; case '0': return cmd_ReleaseCols; case '1': return cmd_FreezeOneCol; case '2': return cmd_FreezeTwoCols; case '3': return cmd_FreezeThreeCols; case '4': return cmd_FreezeFourCols; case '5': return cmd_FreezeFiveCols; case '6': return cmd_FreezeSixCols; case '7': return cmd_FreezeSevenCols; case '8': return cmd_FreezeEightCols; case '9': return cmd_FreezeNineCols; case 4: /* CTRL D */ return cmd_ScrollDownHalfPage; case 21: /* CTRL U */ return cmd_ScrollUpHalfPage; case 5: /* CTRL E */ return cmd_ScrollDown; case 25: /* CTRL Y */ return cmd_ScrollUp; case KEY_LEFT: case 'h': return cmd_MoveLeft; case KEY_RIGHT: case 'l': return cmd_MoveRight; case 'H': return cmd_CursorFirstRowPage; case 'L': return cmd_CursorLastRowPage; case 'M': return cmd_CursorHalfPage; case KEY_PPAGE: case 2: /* CTRL B */ return cmd_PageUp; case 3: /* CTRL C */ return cmd_Escape; case ' ': return opts->watch_time > 0 ? cmd_TogglePause : cmd_PageDown; case 6: /* CTRL F */ case KEY_NPAGE: return cmd_PageDown; case KEY_HOME: case '^': return cmd_ShowFirstCol; case KEY_END: case '$': return cmd_ShowLastCol; case 's': return cmd_SaveData; case '/': return cmd_ForwardSearch; case '?': return cmd_BackwardSearch; case 'n': return cmd_SearchNext; case 'N': return cmd_SearchPrev; case 'g': return cmd_CursorFirstRow; case 'G': return cmd_CursorLastRow; case 'c': return cmd_SearchColumn; case 'a': return cmd_SortAsc; case 'd': return cmd_SortDesc; case 'u': return cmd_OriginalSort; case 'R': case 12: /* CTRL L */ return cmd_Refresh; case 15: /* CTRL O */ return cmd_ShowPrimaryScreen; case '\\': return cmd_BsCommand; case 1: /* CTRL A */ case '%': return cmd_MarkAll; case KEY_SR: *nested_command = cmd_CursorUp; return cmd_Mark_NestedCursorCommand; case KEY_SF: *nested_command = cmd_CursorDown; return cmd_Mark_NestedCursorCommand; case KEY_SNEXT: *nested_command = cmd_PageDown; return cmd_Mark_NestedCursorCommand; case KEY_SPREVIOUS: *nested_command = cmd_PageUp; return cmd_Mark_NestedCursorCommand; } } if (c == CTRL_HOME) return cmd_CursorFirstRow; else if (c == CTRL_END) return cmd_CursorLastRow; else if (c == CTRL_SHIFT_END) { *nested_command = cmd_CursorLastRow; return cmd_Mark_NestedCursorCommand; } else if (c == CTRL_SHIFT_HOME) { *nested_command = cmd_CursorFirstRow; return cmd_Mark_NestedCursorCommand; } else if (c == CTRL_LEFT) return cmd_MoveCharLeft; else if (c == CTRL_RIGHT) return cmd_MoveCharRight; else if (c == SHIFT_LEFT) return cmd_MoveColumnLeft; else if (c == SHIFT_RIGHT) return cmd_MoveColumnRight; return cmd_Invalid; } /* * Returns cmd for theme * */ int theme_get_cmd(int theme) { switch (theme) { case 0: return cmd_SetTheme_MidnightBlack; case 1: return cmd_SetTheme_Midnight; case 2: return cmd_SetTheme_Foxpro; case 3: return cmd_SetTheme_Pdmenu; case 4: return cmd_SetTheme_White; case 5: return cmd_SetTheme_Mutt; case 6: return cmd_SetTheme_Pcfand; case 7: return cmd_SetTheme_Green; case 8: return cmd_SetTheme_Blue; case 9: return cmd_SetTheme_WP; case 10: return cmd_SetTheme_Lowcontrast; case 11: return cmd_SetTheme_Darkcyan; case 12: return cmd_SetTheme_Paradox; case 13: return cmd_SetTheme_DBase; case 14: return cmd_SetTheme_DBasemagenta; case 15: return cmd_SetTheme_Red; case 16: return cmd_SetTheme_Simple; case 17: return cmd_SetTheme_SolarDark; case 18: return cmd_SetTheme_SolarLight; case 19: return cmd_SetTheme_GruvboxLight; case 20: return cmd_SetTheme_TaoLight; case 21: return cmd_SetTheme_Flatwhite; case 22: return cmd_SetTheme_RelationalPipes; case 23: return cmd_SetTheme_PaperColor; }; return cmd_Invalid; } /* * Returns theme for cmd * */ int cmd_get_theme(int cmd) { switch (cmd) { case cmd_SetTheme_MidnightBlack: return 0; case cmd_SetTheme_Midnight: return 1; case cmd_SetTheme_Foxpro: return 2; case cmd_SetTheme_Pdmenu: return 3; case cmd_SetTheme_White: return 4; case cmd_SetTheme_Mutt: return 5; case cmd_SetTheme_Pcfand: return 6; case cmd_SetTheme_Green: return 7; case cmd_SetTheme_Blue: return 8; case cmd_SetTheme_WP: return 9; case cmd_SetTheme_Lowcontrast: return 10; case cmd_SetTheme_Darkcyan: return 11; case cmd_SetTheme_Paradox: return 12; case cmd_SetTheme_DBase: return 13; case cmd_SetTheme_DBasemagenta: return 14; case cmd_SetTheme_Red: return 15; case cmd_SetTheme_Simple: return 16; case cmd_SetTheme_SolarDark: return 17; case cmd_SetTheme_SolarLight: return 18; case cmd_SetTheme_GruvboxLight: return 19; case cmd_SetTheme_TaoLight: return 20; case cmd_SetTheme_Flatwhite: return 21; case cmd_SetTheme_RelationalPipes: return 22; case cmd_SetTheme_PaperColor: return 23; }; return 1; } /* * This is initial simple design. It can be much * smarter, but it is good enough for start. */ bool require_complete_load(int cmd) { switch (cmd) { case cmd_CursorLastRow: case cmd_SortAsc: case cmd_SortDesc: case cmd_OriginalSort: case cmd_SaveData: case cmd_Copy: case cmd_GotoLine: case cmd_ForwardSearch: return true; default: return false; } } pspg-5.8.1/src/commands.h000066400000000000000000000070431452457446400152620ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * command.h * a list of commands and translations between keys and commands * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/commands.h * *------------------------------------------------------------------------- */ #ifndef COMMANDS_H #define COMMANDS_H #include "config.h" /* * List of supported commands. Some these commands can be mapped to keys */ typedef enum PspgCommand { cmd_Invalid = 0, cmd_RESIZE_EVENT, cmd_MOUSE_EVENT, cmd_ReleaseCols = 100, cmd_FreezeOneCol, cmd_FreezeTwoCols, cmd_FreezeThreeCols, cmd_FreezeFourCols, cmd_FreezeFiveCols, cmd_FreezeSixCols, cmd_FreezeSevenCols, cmd_FreezeEightCols, cmd_FreezeNineCols, cmd_SoundToggle, cmd_MouseToggle, cmd_UtfArtToggle, cmd_MenuAsciiArtToggle, cmd_CSSearchSet, cmd_CISearchSet, cmd_USSearchSet, cmd_HighlightLines, cmd_HighlightValues, cmd_NoHighlight, cmd_SetTheme_MidnightBlack, cmd_SetTheme_Midnight, cmd_SetTheme_Foxpro, cmd_SetTheme_Pdmenu, cmd_SetTheme_White, cmd_SetTheme_Mutt, cmd_SetTheme_Pcfand, cmd_SetTheme_Green, cmd_SetTheme_Blue, cmd_SetTheme_WP, cmd_SetTheme_Lowcontrast, cmd_SetTheme_Darkcyan, cmd_SetTheme_Paradox, cmd_SetTheme_DBase, cmd_SetTheme_DBasemagenta, cmd_SetTheme_Red, cmd_SetTheme_Simple, cmd_SetTheme_SolarDark, cmd_SetTheme_SolarLight, cmd_SetTheme_GruvboxLight, cmd_SetTheme_TaoLight, cmd_SetTheme_Flatwhite, cmd_SetTheme_RelationalPipes, cmd_SetTheme_PaperColor, cmd_SetTheme, cmd_SetCustomTheme, cmd_SaveSetup, cmd_Escape, cmd_Quit, cmd_RawOutputQuit, cmd_ShowMenu, cmd_FlushBookmarks, cmd_ToggleBookmark, cmd_PrevBookmark, cmd_NextBookmark, cmd_CursorUp, cmd_CursorDown, cmd_ScrollUp, cmd_ScrollDown, cmd_ScrollUpHalfPage, cmd_ScrollDownHalfPage, cmd_MoveLeft, cmd_MoveRight, cmd_MoveCharLeft, cmd_MoveCharRight, cmd_MoveColumnLeft, cmd_MoveColumnRight, cmd_CursorFirstRow, cmd_CursorLastRow, cmd_CursorFirstRowPage, cmd_CursorLastRowPage, cmd_CursorHalfPage, cmd_PageUp, cmd_PageDown, cmd_ShowFirstCol, cmd_ShowLastCol, cmd_SaveData, cmd_SaveAsCSV, cmd_ForwardSearch, cmd_BackwardSearch, cmd_ForwardSearchInSelection, cmd_BackwardSearchInSelection, cmd_SearchNext, cmd_SearchPrev, cmd_SearchColumn, cmd_ShowTopBar, cmd_ShowBottomBar, cmd_RowNumToggle, cmd_GotoLine, cmd_GotoLineRel, cmd_ShowCursor, cmd_ShowVerticalCursor, cmd_BoldLabelsToggle, cmd_BoldCursorToggle, cmd_ShowScrollbar, cmd_SortAsc, cmd_SortDesc, cmd_OriginalSort, cmd_TogglePause, cmd_Refresh, cmd_SetCopyFile, cmd_SetCopyClipboard, cmd_UseClipboard_CSV, cmd_UseClipboard_TSVC, cmd_UseClipboard_SQL_values, cmd_UseClipboard_text, cmd_UseClipboard_pipe_separated, cmd_UseClipboard_INSERT, cmd_UseClipboard_INSERT_with_comments, cmd_TogleEmptyStringIsNULL, cmd_SetOwnNULLString, cmd_Copy, cmd_CopyAllLines, cmd_CopyTopLines, cmd_CopyBottomLines, cmd_CopyLine, cmd_CopyLineExtended, cmd_CopyColumn, cmd_CopyMarkedLines, cmd_CopySearchedLines, cmd_CopySelected, cmd_Mark, cmd_MarkColumn, cmd_MarkAll, cmd_Unmark, cmd_Mark_NestedCursorCommand, cmd_BsCommand, cmd_ShowPrimaryScreen, cmd_ToggleHighlightOddRec, cmd_ToggleHideHeaderLine, } PspgCommand; extern void initialize_special_keycodes(); extern const char *cmd_string(int cmd); extern int translate_event(int c, bool alt, Options *opts, int *nested_command); extern bool require_complete_load(int cmd); extern bool is_cmd_RowNumToggle(int c, bool alt); extern int cmd_get_theme(int cmd); extern int theme_get_cmd(int theme); #endif pspg-5.8.1/src/config.c000066400000000000000000000265331452457446400147260ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * config.c * a routines for loading, saving configuration * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/config.c * *------------------------------------------------------------------------- */ #include "pspg.h" #include "config.h" #include #include #include #include #include #include #include static int parse_cfg(char *line, char *key, bool *bool_val, int *int_val, char **str_val) { int key_length = 0; int len = strlen(line); if (len > 0 && line[len - 1] == '\n') line[len-1] = '\0'; /* skip initial spaces */ while (*line == ' ') line++; /* skip comments */ if (*line == '#') return 0; /* copy key to key array */ while (*line != ' ' && *line != '=' && *line != '\0') { if (key_length < 99) { key[key_length++] = *line++; } else break; } key[key_length] = '\0'; /* search '=' */ while (*line != '=' && *line != '\0') line++; if (key_length > 0 && *line == '=') { line += 1; /* skip spaces */ while (*line == ' ') line++; if (*line == '-' || (*line >= '0' && *line <= '9')) { *int_val = atoi(line); return 1; } else if (strncmp(line, "true", 4) == 0) { *bool_val = true; return 2; } else if (strncmp(line, "false", 5) == 0) { *bool_val = false; return 2; } else { int size; char *str; size = strlen(line); str = trim_quoted_str(line, &size); *str_val = str ? sstrndup(str, size) : NULL; return 3; } } if (key_length > 0) return -1; return 0; } #define SAFE_SAVE_BOOL_OPTION(name, opt) \ do { \ result = fprintf(f, "%s = %s\n", (name), (opt) ? "true" : "false"); \ if (result < 0) \ return false; \ } while (0) bool save_config(char *path, Options *opts) { FILE *f; int result; errno = 0; f = fopen(path, "w"); if (f == NULL) return false; if (chmod(path, 0644) != 0) { fclose(f); return false; } SAFE_SAVE_BOOL_OPTION("ascii_menu", opts->force_ascii_art); SAFE_SAVE_BOOL_OPTION("bold_labels", opts->bold_labels); SAFE_SAVE_BOOL_OPTION("bold_cursor", opts->bold_cursor); SAFE_SAVE_BOOL_OPTION("ignore_case", opts->ignore_case); SAFE_SAVE_BOOL_OPTION("ignore_lower_case", opts->ignore_lower_case); SAFE_SAVE_BOOL_OPTION("no_cursor", opts->no_cursor); SAFE_SAVE_BOOL_OPTION("no_sound", quiet_mode); SAFE_SAVE_BOOL_OPTION("no_mouse", opts->no_mouse); SAFE_SAVE_BOOL_OPTION("less_status_bar", opts->less_status_bar); SAFE_SAVE_BOOL_OPTION("no_highlight_search", opts->no_highlight_search); SAFE_SAVE_BOOL_OPTION("no_highlight_lines", opts->no_highlight_lines); SAFE_SAVE_BOOL_OPTION("force_uniborder", opts->force_uniborder); SAFE_SAVE_BOOL_OPTION("show_rownum", opts->show_rownum); SAFE_SAVE_BOOL_OPTION("without_commandbar", opts->no_commandbar); SAFE_SAVE_BOOL_OPTION("without_topbar", opts->no_topbar); SAFE_SAVE_BOOL_OPTION("vertical_cursor", opts->vertical_cursor); SAFE_SAVE_BOOL_OPTION("on_sigint_exit", opts->on_sigint_exit); SAFE_SAVE_BOOL_OPTION("no_sigint_search_reset", opts->no_sigint_search_reset); SAFE_SAVE_BOOL_OPTION("double_header", opts->double_header); SAFE_SAVE_BOOL_OPTION("quit_on_f3", opts->quit_on_f3); SAFE_SAVE_BOOL_OPTION("pgcli_fix", opts->pgcli_fix); SAFE_SAVE_BOOL_OPTION("xterm_mouse_mode", opts->xterm_mouse_mode); SAFE_SAVE_BOOL_OPTION("show_scrollbar", opts->show_scrollbar); SAFE_SAVE_BOOL_OPTION("menu_always", opts->menu_always); SAFE_SAVE_BOOL_OPTION("empty_string_is_null", opts->empty_string_is_null); SAFE_SAVE_BOOL_OPTION("last_row_search", opts->last_row_search); SAFE_SAVE_BOOL_OPTION("progressive_load_mode", opts->progressive_load_mode); SAFE_SAVE_BOOL_OPTION("highlight_odd_rec", opts->highlight_odd_rec); SAFE_SAVE_BOOL_OPTION("hide_header_line", opts->hide_header_line); SAFE_SAVE_BOOL_OPTION("on_exit_reset", opts->on_exit_reset); SAFE_SAVE_BOOL_OPTION("on_exit_clean", opts->on_exit_clean); SAFE_SAVE_BOOL_OPTION("on_exit_erase_line", opts->on_exit_erase_line); SAFE_SAVE_BOOL_OPTION("on_exit_sgr0", opts->on_exit_sgr0); SAFE_SAVE_BOOL_OPTION("direct_color", opts->direct_color); result = fprintf(f, "theme = %d\n", opts->theme); if (result < 0) return false; result = fprintf(f, "border_type = %d\n", opts->border_type); if (result < 0) return false; result = fprintf(f, "default_clipboard_format = %d\n", opts->clipboard_format); if (result < 0) return false; result = fprintf(f, "clipboard_app = %d\n", opts->clipboard_app); if (result < 0) return false; result = fprintf(f, "hist_size = %d\n", opts->hist_size); if (result < 0) return false; if (opts->nullstr) { result = fprintf(f, "nullstr = \"%s\"\n", opts->nullstr); if (result < 0) return false; } if (opts->custom_theme_name) { result = fprintf(f, "custom_theme_name = \"%s\"\n", opts->custom_theme_name); if (result < 0) return false; } result = fprintf(f, "esc_delay = %d\n", opts->esc_delay); if (result < 0) return false; result = fclose(f); if (result != 0) return false; return true; } static bool assign_bool(char *key, bool *target, bool value, int type) { if (type != 2) { log_row("The value of key \"%s\" is not boolean value", key); return false; } *target = value; return true; } static bool assign_int(char *key, int *target, int value, int type, int min, int max) { if (type != 1) { log_row("The value of key \"%s\" is not integer value", key); return false; } if (value < min && value > max) { log_row("value of key \"%s\" is out of range [%d, %d]", key, min, max); return false; } *target = value; return true; } static bool assign_str(char *key, char **target, char *value, int type) { if (type != 3) { log_row("The value of key \"%s\" is not string value", key); return false; } *target = value; return true; } /* * Simple parser of config file. I don't expect too much fields, so performance is * not significant. */ bool load_config(char *path, Options *opts) { FILE *f; char *line = NULL; ssize_t read; size_t len; bool is_valid = true; errno = 0; f = fopen(path, "r"); if (f == NULL) return false; while ((read = getline(&line, &len, f)) != -1) { char key[100]; bool bool_val = false; int int_val = -1; char *str_val = NULL; int res; if ((res = parse_cfg(line, key, &bool_val, &int_val, &str_val)) > 0) { if (strcmp(key, "ascii_menu") == 0) is_valid = assign_bool(key, &opts->force_ascii_art, bool_val, res); else if (strcmp(key, "bold_labels") == 0) is_valid = assign_bool(key, &opts->bold_labels, bool_val, res); else if (strcmp(key, "bold_cursor") == 0) is_valid = assign_bool(key, &opts->bold_cursor, bool_val, res); else if (strcmp(key, "ignore_case") == 0) is_valid = assign_bool(key, &opts->ignore_case, bool_val, res); else if (strcmp(key, "ignore_lower_case") == 0) is_valid = assign_bool(key, &opts->ignore_lower_case, bool_val, res); else if (strcmp(key, "no_sound") == 0) is_valid = assign_bool(key, &quiet_mode, bool_val, res); else if (strcmp(key, "no_cursor") == 0) is_valid = assign_bool(key, &opts->no_cursor, bool_val, res); else if (strcmp(key, "no_mouse") == 0) is_valid = assign_bool(key, &opts->no_mouse, bool_val, res); else if (strcmp(key, "less_status_bar") == 0) is_valid = assign_bool(key, &opts->less_status_bar, bool_val, res); else if (strcmp(key, "no_highlight_search") == 0) is_valid = assign_bool(key, &opts->no_highlight_search, bool_val, res); else if (strcmp(key, "no_highlight_lines") == 0) is_valid = assign_bool(key, &opts->no_highlight_lines, bool_val, res); else if (strcmp(key, "force_uniborder") == 0) is_valid = assign_bool(key, &opts->force_uniborder, bool_val, res); else if (strcmp(key, "show_rownum") == 0) is_valid = assign_bool(key, &opts->show_rownum, bool_val, res); else if (strcmp(key, "theme") == 0) is_valid = assign_int(key, &opts->theme, int_val, res, 0, MAX_STYLE); else if (strcmp(key, "without_commandbar") == 0) is_valid = assign_bool(key, &opts->no_commandbar, bool_val, res); else if (strcmp(key, "without_topbar") == 0) is_valid = assign_bool(key, &opts->no_topbar, bool_val, res); else if (strcmp(key, "vertical_cursor") == 0) is_valid = assign_bool(key, &opts->vertical_cursor, bool_val, res); else if (strcmp(key, "border_type") == 0) is_valid = assign_int(key, &opts->border_type, int_val, res, 0, 2); else if (strcmp(key, "double_header") == 0) is_valid = assign_bool(key, &opts->double_header, bool_val, res); else if (strcmp(key, "on_sigint_exit") == 0) is_valid = assign_bool(key, &opts->on_sigint_exit, bool_val, res); else if (strcmp(key, "no_sigint_search_reset") == 0) is_valid = assign_bool(key, &opts->no_sigint_search_reset, bool_val, res); else if (strcmp(key, "quit_on_f3") == 0) is_valid = assign_bool(key, &opts->quit_on_f3, bool_val, res); else if (strcmp(key, "pgcli_fix") == 0) is_valid = assign_bool(key, &opts->pgcli_fix, bool_val, res); else if (strcmp(key, "default_clipboard_format") == 0) is_valid = assign_int(key, (int *) &opts->clipboard_format, int_val, res, 0, CLIPBOARD_FORMAT_INSERT_WITH_COMMENTS); else if (strcmp(key, "clipboard_app") == 0) is_valid = assign_int(key, &opts->clipboard_app, int_val, res, 0, 3); else if (strcmp(key, "xterm_mouse_mode") == 0) is_valid = assign_bool(key, &opts->xterm_mouse_mode, bool_val, res); else if (strcmp(key, "show_scrollbar") == 0) is_valid = assign_bool(key, &opts->show_scrollbar, bool_val, res); else if (strcmp(key, "menu_always") == 0) is_valid = assign_bool(key, &opts->menu_always, bool_val, res); else if (strcmp(key, "nullstr") == 0) is_valid = assign_str(key, &opts->nullstr, str_val, res); else if (strcmp(key, "empty_string_is_null") == 0) is_valid = assign_bool(key, &opts->empty_string_is_null, bool_val, res); else if (strcmp(key, "last_row_search") == 0) is_valid = assign_bool(key, &opts->last_row_search, bool_val, res); else if (strcmp(key, "hist_size") == 0) is_valid = assign_int(key, (int *) &opts->hist_size, int_val, res, 0, INT_MAX); else if (strcmp(key, "progressive_load_mode") == 0) is_valid = assign_bool(key, &opts->progressive_load_mode, bool_val, res); else if (strcmp(key, "custom_theme_name") == 0) is_valid = assign_str(key, &opts->custom_theme_name, str_val, res); else if (strcmp(key, "highlight_odd_rec") == 0) is_valid = assign_bool(key, &opts->highlight_odd_rec, bool_val, res); else if (strcmp(key, "hide_header_line") == 0) is_valid = assign_bool(key, &opts->hide_header_line, bool_val, res); else if (strcmp(key, "esc_delay") == 0) is_valid = assign_int(key, &opts->esc_delay, int_val, res, -1, INT_MAX); else if (strcmp(key, "on_exit_reset") == 0) is_valid = assign_bool(key, &opts->on_exit_reset, bool_val, res); else if (strcmp(key, "on_exit_clean") == 0) is_valid = assign_bool(key, &opts->on_exit_clean, bool_val, res); else if (strcmp(key, "on_exit_erase_line") == 0) is_valid = assign_bool(key, &opts->on_exit_erase_line, bool_val, res); else if (strcmp(key, "on_exit_sgr0") == 0) is_valid = assign_bool(key, &opts->on_exit_sgr0, bool_val, res); else if (strcmp(key, "direct_color") == 0) is_valid = assign_bool(key, &opts->direct_color, bool_val, res); } if (!is_valid || res == -1) break; } free(line); fclose(f); return is_valid; } pspg-5.8.1/src/config.h000066400000000000000000000047401452457446400147270ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * config.h * load/save configuration * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/config.h * *------------------------------------------------------------------------- */ #ifndef PSPG_CONFIG_H #define PSPG_CONFIG_H #include #define MAX_STYLE 23 typedef enum { CLIPBOARD_FORMAT_CSV, CLIPBOARD_FORMAT_TSVC, CLIPBOARD_FORMAT_TEXT, CLIPBOARD_FORMAT_PIPE_SEPARATED, CLIPBOARD_FORMAT_SQL_VALUES, CLIPBOARD_FORMAT_INSERT, CLIPBOARD_FORMAT_INSERT_WITH_COMMENTS } ClipboardFormat; #define DSV_FORMAT_TYPE(f) (f == CLIPBOARD_FORMAT_CSV || f == CLIPBOARD_FORMAT_TSVC || f == CLIPBOARD_FORMAT_SQL_VALUES) #define INSERT_FORMAT_TYPE(f) (f == CLIPBOARD_FORMAT_INSERT || f == CLIPBOARD_FORMAT_INSERT_WITH_COMMENTS) typedef enum { COPY_TARGET_FILE, COPY_TARGET_CLIPBOARD } CopyTarget; typedef struct { char *pathname; char *log_pathname; bool ignore_case; bool ignore_lower_case; bool no_mouse; bool less_status_bar; bool no_highlight_search; bool no_highlight_lines; bool force_uniborder; bool no_commandbar; bool no_topbar; bool show_rownum; bool no_cursor; bool vertical_cursor; bool show_scrollbar; bool tabular_cursor; bool force_ascii_art; int theme; int freezed_cols; bool bold_labels; bool bold_cursor; bool tsv_format; bool csv_format; char csv_separator; char csv_header; /* a - auto, - off, + on */ unsigned int csv_trim_width; unsigned int csv_trim_rows; char *nullstr; char *csv_skip_columns_like; bool ignore_short_rows; bool pgcli_fix; /* hints for using from pgcli */ bool double_header; int border_type; bool on_sigint_exit; bool no_sigint_search_reset; char *query; int watch_time; char *host; char *username; char *port; bool force_password_prompt; char *password; char *dbname; bool watch_file; bool quit_on_f3; ClipboardFormat clipboard_format; CopyTarget copy_target; bool empty_string_is_null; bool xterm_mouse_mode; int clipboard_app; bool no_sleep; bool querystream; bool menu_always; bool last_row_search; int hist_size; bool progressive_load_mode; char *custom_theme_name; bool highlight_odd_rec; bool hide_header_line; int esc_delay; bool on_exit_clean; bool on_exit_reset; bool on_exit_erase_line; bool on_exit_sgr0; bool direct_color; } Options; extern bool save_config(char *path, Options *opts); extern bool load_config(char *path, Options *opts); #endif pspg-5.8.1/src/export.c000066400000000000000000000535401452457446400150000ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * export.c * a routines for exporting data * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/export.c * *------------------------------------------------------------------------- */ #include #include #include #include #include "pspg.h" #include "commands.h" #include "unicode.h" /* * Ensure correct formatting of CSV value. Can returns * malloc ed string when value should be quoted. */ static char * csv_format(char *str, int *slen, bool empty_string_is_null, char *nullstr, int nullstrlen) { char *ptr = str; char *result; bool needs_quoting = false; int _slen; /* Detect NULL symbol ∅ */ if (nullstrlen > 0 && *slen == nullstrlen && strncmp(str, nullstr, nullstrlen) == 0) { *slen = 0; return NULL; } if (use_utf8 && *slen == 3 && strncmp(str, "\342\210\205", 3) == 0) { *slen = 0; return NULL; } if (*slen == 0) { if (empty_string_is_null) return NULL; *slen = 2; return sstrdup("\"\""); } _slen = *slen; while (_slen > 0) { int size; if (*ptr == '"' || *ptr == ',' || *ptr == '\t' || *ptr == '\r' || *ptr == '\n') { needs_quoting = true; break; } size = charlen(ptr); ptr += size; _slen -= size; } if (!needs_quoting) return str; result = ptr = smalloc2(*slen * 2 + 2 + 1, "CSV format output buffer allocation"); *ptr++ = '"'; _slen = *slen; *slen = 1; while (_slen > 0) { int size = charlen(ptr); if (*str == '"') { *ptr++ = '"'; *slen += 1; } _slen -= size; *slen += size; while (size--) *ptr++ = *str++; } *ptr++ = '"'; *ptr = '\0'; *slen += 1; return result; } /* * Ensure correct format for SQL identifier */ static char * quote_sql_identifier(char *str, int *slen) { bool needs_quoting = false; char *ptr, *result; int _slen; /* it is quoted already? */ if (*str == '"') return str; if (!str || *str == '\0' || *slen == 0) return str; if (*str != ' ' && (*str < 'a' || *str > 'z')) needs_quoting = true; else { ptr = str; _slen = *slen; while (*ptr && _slen > 0) { int size = charlen(ptr); if (!((*ptr >= 'a' && *ptr <= 'z') || (*ptr >= '0' && *ptr <= '9') || *ptr == '_')) { needs_quoting = true; break; } _slen -= size; ptr += size; } } if (!needs_quoting) return str; result = ptr = smalloc2(*slen * 2 + 2 + 1, "SQL identifier output buffer allocation"); *ptr++ = '"'; _slen = *slen; *slen = 1; while (_slen > 0) { int size = charlen(ptr); if (*str == '"') *ptr++ = '"'; _slen -= size; *slen += size; while (size--) *ptr++ = *str++; } *ptr++ = '"'; *ptr = '\0'; *slen += 1; return result; } static char * quote_sql_literal(char *str, int *slen, bool empty_string_is_null, char *nullstr, int nullstrlen) { char *ptr = str; char *result; int _slen = *slen; bool has_dot = false; bool needs_quoting = false; if (*slen == 0) { if (empty_string_is_null) { *slen = 4; return sstrdup("NULL"); } else { *slen = 2; return sstrdup("''"); } } if (*slen == 4 && (strncmp(str, "NULL", *slen) == 0 || strncmp(str, "null", *slen) == 0)) return str; if (use_utf8 && *slen == 3 && strncmp(str, "\342\210\205", 3) == 0) { *slen = 4; return sstrdup("NULL"); } if (nullstrlen > 0 && *slen == nullstrlen && strncmp(str, nullstr, *slen) == 0) { *slen = 4; return sstrdup("NULL"); } while (*ptr && _slen > 0) { int size = charlen(ptr); if (*ptr == '.') { if (has_dot) { needs_quoting = true; break; } else has_dot = true; } else if (!(*ptr >= '0' && *ptr <= '9')) { needs_quoting = true; break; } ptr += size; _slen -= size; } if (!needs_quoting) return str; result = ptr = smalloc2(*slen * 2 + 2 + 1, "SQL literal output buffer allocation"); *ptr++ = '\''; _slen = *slen; *slen = 1; while (_slen > 0) { int size = charlen(ptr); if (*str == '\'') *ptr++ = '\''; _slen -= size; *slen += size; while (size--) *ptr++ = *str++; } *ptr++ = '\''; *ptr = '\0'; *slen += 1; return result; } /* * Iterator over data string with format specified by headline */ typedef struct { char *row; char *headline; int xpos; } FmtLineIter; static char * next_char(FmtLineIter *iter, char *typ, int *size, int *width, int *xpos) { char *result = iter->row; if (!iter->row || !iter->headline) return NULL; if (*iter->row == '\0' || *iter->headline == '\n') return NULL; *typ = *(iter->headline); *xpos = iter->xpos; *size = charlen(result); *width = dsplen(result); iter->row += *size; iter->headline += *width; iter->xpos += *width; return result; } typedef struct { FILE *fp; ClipboardFormat format; int xmin; int xmax; bool copy_line_extended; char *table_name; int columns; bool empty_string_is_null; char *nullstr; int nullstrlen; int colno; char **colnames; ExtStr *lines; char linestyle; int nlines; /* for debug purposes */ } ExportState; /* * Export one segment of format (decoration or field) to output file. */ static bool process_item(ExportState *expstate, char typ, char *field, int size, int xpos, bool is_colname, bool has_continue_mark, bool has_continue_mark2) { if (typ == 'd') { /* Ignore items outer to selected range */ if (expstate->xmin != -1 && (xpos <= expstate->xmin || expstate->xmax <= xpos)) return true; if (has_continue_mark) { ExtStr *estr = &expstate->lines[expstate->colno]; if (!estr->data) InitExtStr(estr); ExtStrAppendLine(estr, field, size, expstate->linestyle, has_continue_mark, has_continue_mark2); expstate->colno += 1; return true; } else if (expstate->lines) { ExtStr *estr = &expstate->lines[expstate->colno]; if (estr->len > 0) { ExtStrAppendLine(estr, field, size, expstate->linestyle, has_continue_mark, has_continue_mark2); size = ExtStrTrimEnd(estr, expstate->format == CLIPBOARD_FORMAT_TSVC); field = estr->data; /* Reset doesn't release memory */ ResetExtStr(estr); } } } if (INSERT_FORMAT_TYPE(expstate->format)) { errno = 0; if (typ == 'N' && !is_colname && !has_continue_mark) { expstate->nlines += 1; if (expstate->format == CLIPBOARD_FORMAT_INSERT) fputs(");\n", expstate->fp); else { fprintf(expstate->fp, ");\t\t -- %d. %s\n", expstate->colno, expstate->colnames[expstate->colno - 1]); } } else if (typ == 'd') { char *_field; if (is_colname) { if (!expstate->colnames) { expstate->colnames = smalloc(sizeof(char *) * expstate->columns); memset(expstate->colnames, 0, sizeof(char *) * expstate->columns); } field = trim_str(field, &size); _field = quote_sql_identifier(field, &size); if (!_field) expstate->colnames[expstate->colno] = sstrdup(""); else if (_field != field) expstate->colnames[expstate->colno] = _field; else expstate->colnames[expstate->colno] = sstrndup(field, size); expstate->colno += 1; } else { if (expstate->colno == 0) { errno = 0; fputs("INSERT INTO ", expstate->fp); fputs(expstate->table_name, expstate->fp); if (expstate->colnames) { fputc('(', expstate->fp); if (expstate->format == CLIPBOARD_FORMAT_INSERT) { int i; bool is_first = true; for (i = 0; i < expstate->columns; i++) { if (expstate->colnames[i]) { if (!is_first) fputs(", ", expstate->fp); else is_first = false; fputs(expstate->colnames[i], expstate->fp); } else break; } fputc(')', expstate->fp); } else { int indent_spaces; int columns = 0; int loc_colno = 0; int i; if (use_utf8) indent_spaces = utf_string_dsplen(expstate->table_name, INT_MAX) + 1 + 12; else indent_spaces = strlen(expstate->table_name) + 1 + 12; for (i = 0; i < expstate->columns; i++) { if (expstate->colnames[i]) columns += 1; else break; } for (i = 0; i < expstate->columns; i++) { if (expstate->colnames[i]) { if (loc_colno > 0) fprintf(expstate->fp, "%*.s", indent_spaces, ""); fputs(expstate->colnames[i], expstate->fp); if (loc_colno < columns - 1) fprintf(expstate->fp, ",\t\t -- %d.\n", loc_colno + 1); else fprintf(expstate->fp, ")\t\t -- %d.\n", loc_colno + 1); loc_colno += 1; } else break; } } } if (expstate->format == CLIPBOARD_FORMAT_INSERT) fputs(" VALUES(", expstate->fp); else fputs(" VALUES(", expstate->fp); } if (expstate->format == CLIPBOARD_FORMAT_INSERT) { if (expstate->colno > 0) fputs(", ", expstate->fp); } else { if (expstate->colno > 0) { fprintf(expstate->fp, ",\t\t -- %d. %s\n", expstate->colno, expstate->colnames[expstate->colno - 1]); fputs(" ", expstate->fp); } } field = trim_str(field, &size); _field = quote_sql_literal(field, &size, expstate->empty_string_is_null, expstate->nullstr, expstate->nullstrlen); fwrite(_field, size, 1, expstate->fp); expstate->colno += 1; if (_field != field) free(_field); } } } /* * Export in formatted text format */ else if (expstate->format == CLIPBOARD_FORMAT_TEXT) { errno = 0; if (typ != 'N') { if (typ == 'I' || typ == 'd') { /* Ignore items outer to selected range */ if (expstate->xmin != -1 && (xpos <= expstate->xmin || expstate->xmax <= xpos)) return true; } fwrite(field, size, 1, expstate->fp); } else { fputc('\n', expstate->fp); expstate->nlines += 1; } } else if (expstate->format == CLIPBOARD_FORMAT_PIPE_SEPARATED) { errno = 0; if (!is_colname) { if (typ != 'N') { if (typ == 'I' || typ == 'd') { /* Ignore items outer to selected range */ if (expstate->xmin != -1 && (xpos <= expstate->xmin || expstate->xmax <= xpos)) return true; if (typ == 'd') { field = trim_str(field, &size); fwrite(field, size, 1, expstate->fp); } else fputs(" | ", expstate->fp); } } else { fputc('\n', expstate->fp); expstate->nlines += 1; } } } /* * Export in CSV or TSV format */ else if (DSV_FORMAT_TYPE(expstate->format)) { if (expstate->format == CLIPBOARD_FORMAT_SQL_VALUES && is_colname) return true; if (typ == 'N' && !expstate->copy_line_extended && !has_continue_mark) { errno = 0; fputc('\n', expstate->fp); expstate->nlines += 1; } else { if (typ == 'd') { int saved_errno = 0; char *_field; field = trim_str(field, &size); if (expstate->format == CLIPBOARD_FORMAT_SQL_VALUES) _field = quote_sql_literal(field, &size, expstate->empty_string_is_null, expstate->nullstr, expstate->nullstrlen); else _field = csv_format(field, &size, expstate->empty_string_is_null, expstate->nullstr, expstate->nullstrlen); if (expstate->copy_line_extended && is_colname) { if (!expstate->colnames) { expstate->colnames = smalloc(sizeof(char *) * expstate->columns); memset(expstate->colnames, 0, sizeof(char *) * expstate->columns); } if (!_field) expstate->colnames[expstate->colno] = sstrdup(""); else if (_field != field) expstate->colnames[expstate->colno] = _field; else expstate->colnames[expstate->colno] = sstrndup(field, size); expstate->colno += 1; return true; } errno = 0; if (!expstate->copy_line_extended) { if (expstate->colno > 0) { if (expstate->format == CLIPBOARD_FORMAT_CSV || expstate->format == CLIPBOARD_FORMAT_SQL_VALUES) fputc(',', expstate->fp); else if (expstate->format == CLIPBOARD_FORMAT_TSVC) fputc('\t', expstate->fp); } if (_field && !errno) { errno = 0; fwrite(_field, size, 1, expstate->fp); } } else fprintf(expstate->fp, "%s,%.*s\n", expstate->colnames[expstate->colno], size, _field); saved_errno = errno; expstate->colno += 1; if (_field != field) free(_field); errno = saved_errno; } } } if (errno != 0) { current_state->_errno = errno; format_error("%s", strerror(errno)); log_row("Cannot write (%s)", current_state->errstr); return false; } return true; } /* * Exports data to defined stream in requested format. * Returns true, when the operation was successfull */ bool export_data(Options *opts, ScrDesc *scrdesc, DataDesc *desc, int cursor_row, int cursor_column, FILE *fp, int rows, double percent, char *table_name, PspgCommand cmd, ClipboardFormat format) { LineBufferIter lbi; LineBufferMark lbm; int rn; char *rowstr; bool print_header = true; bool print_footer = true; bool print_border = true; bool print_header_line = true; bool save_column_names = false; bool has_selection; int debug_read_rows = 0; int debug_processed_rows = 0; int min_row = desc->first_data_row; int max_row = desc->last_row; bool prev_continuation_mark = false; bool isok = true; ExportState expstate; expstate.format = format; expstate.fp = fp; expstate.empty_string_is_null = opts->empty_string_is_null; expstate.nullstr = opts->nullstr; expstate.nullstrlen = opts->nullstr ? strlen(opts->nullstr) : 0; expstate.xmin = -1; expstate.xmax = -1; expstate.table_name = NULL; expstate.colnames = NULL; expstate.lines = NULL; expstate.columns = desc->columns; expstate.copy_line_extended = (cmd == cmd_CopyLineExtended); expstate.linestyle = desc->linestyle; expstate.nlines = 0; current_state->errstr = NULL; has_selection = ((scrdesc->selected_first_row != -1 && scrdesc->selected_rows > 0 ) || (scrdesc->selected_first_column != -1 && scrdesc->selected_columns > 0)); if (cmd == cmd_CopyLineExtended && !DSV_FORMAT_TYPE(format)) format = CLIPBOARD_FORMAT_CSV; if (cmd == cmd_CopyLineExtended || INSERT_FORMAT_TYPE(format)) { if (INSERT_FORMAT_TYPE(format)) { int slen = strlen(table_name); expstate.table_name = quote_sql_identifier(table_name, &slen); } save_column_names = true; } if (cmd == cmd_CopyLine || cmd == cmd_CopyLineExtended || (cmd == cmd_Copy && !opts->no_cursor && !has_selection)) { min_row = max_row = cursor_row + desc->first_data_row; print_footer = false; } if ((cmd == cmd_Copy && opts->vertical_cursor) || cmd == cmd_CopyColumn) { expstate.xmin = desc->cranges[cursor_column - 1].xmin; expstate.xmax = desc->cranges[cursor_column - 1].xmax; print_footer = false; } /* copy value from cross of vertical and horizontal cursor */ if (cmd == cmd_Copy && !opts->no_cursor && opts->vertical_cursor) { print_header = false; print_header_line = false; print_border = false; } if (cmd == cmd_CopyTopLines || cmd == cmd_CopyBottomLines) { int skip_data_rows; if (rows < 0 || percent < 0.0) { format_error("arguments (\"rows\" or \"percent\") of function export_data are negative"); return false; } if (percent != 0.0) rows = (double) (desc->last_data_row - desc->first_data_row + 1) * (percent / 100.0); if (cmd == cmd_CopyBottomLines) skip_data_rows = desc->last_data_row - desc->first_data_row + 1 - rows; else skip_data_rows = 0; min_row += skip_data_rows; max_row = desc->first_data_row + rows - 1 + skip_data_rows; print_footer = false; } if (cmd == cmd_CopyMarkedLines || cmd == cmd_CopySearchedLines) print_footer = false; if ((cmd == cmd_Copy && has_selection) || cmd == cmd_CopySelected) { if (scrdesc->selected_first_row != -1) { min_row = scrdesc->selected_first_row + desc->first_data_row; max_row = min_row + scrdesc->selected_rows - 1; } if (scrdesc->selected_first_column != -1 && scrdesc->selected_columns > 0) { expstate.xmin = scrdesc->selected_first_column; expstate.xmax = expstate.xmin + scrdesc->selected_columns - 1; } if (min_row > desc->first_data_row || max_row < desc->last_data_row) print_footer = false; } if (format != CLIPBOARD_FORMAT_TEXT) { print_border = false; print_footer = false; print_header_line = false; } if (save_column_names) print_header = true; /* * only when we export data in raw format and we export complete result, then * we don't need to know multilines. Copy searched or marked lines doesn't support * multiline grouping too. */ if (!((format == CLIPBOARD_FORMAT_TEXT && cmd == cmd_CopyAllLines) || cmd == cmd_CopySearchedLines || cmd == cmd_CopyMarkedLines)) { multilines_detection(desc); if (desc->has_multilines) { bool prevline_continuation_mark = false; int multiline_first_rn = 0; int *multiline_map = NULL; multiline_map = smalloc(desc->total_rows * sizeof(int)); init_lbi_ddesc(&lbi, desc, 0); while (lbi_set_mark_next(&lbi, &lbm)) { LineInfo *linfo; bool continuation_mark; (void) lbm_get_line(&lbm, &rowstr, &linfo, &rn); continuation_mark = linfo && linfo->mask & LINEINFO_CONTINUATION; if (!prevline_continuation_mark && continuation_mark) { multiline_first_rn = rn; multiline_map[rn] = rn; } else multiline_map[rn] = prevline_continuation_mark ? multiline_first_rn : 0; prevline_continuation_mark = continuation_mark; } /* check min_row and max_row against multiline_map */ if (min_row != desc->first_data_row) { int new_min_row = multiline_map[min_row]; if (new_min_row != 0) min_row = new_min_row; } if (max_row != desc->last_row) { int first_rn = multiline_map[max_row]; if (first_rn !=0) { int i; for (i = max_row; i <= desc->last_row; i++) { if (multiline_map[i] == first_rn) max_row = i; else break; } } } free(multiline_map); expstate.lines = smalloc(desc->columns * sizeof(ExtStr)); } } log_row("export: desc->first_data_row: %d, desc->last_data_row: %d", desc->first_data_row, desc->last_data_row); log_row("export: min_row: %d, max_row: %d", min_row, max_row); init_lbi_ddesc(&lbi, desc, 0); while (lbi_set_mark_next(&lbi, &lbm)) { LineInfo *linfo; int size, width; int field_size; int field_xpos; int xpos; char *field, *ptr, typ; FmtLineIter iter; bool is_colname = false; bool continuation_mark = false; (void) lbm_get_line(&lbm, &rowstr, &linfo, &rn); debug_read_rows += 1; /* reduce rows from export */ if (rn >= desc->first_data_row && rn <= desc->last_data_row) { if (rn < min_row || rn > max_row) continue; if (cmd == cmd_CopyMarkedLines) { if (!linfo || ((linfo->mask & LINEINFO_BOOKMARK) == 0)) continue; } if (cmd == cmd_CopySearchedLines) { /* force lineinfo setting */ linfo = set_line_info(opts, scrdesc, desc, &lbm, rowstr); if (!linfo || ((linfo->mask & LINEINFO_FOUNDSTR) == 0)) continue; } } else { is_colname = (rn != desc->border_top_row && rn != desc->border_bottom_row && rn != desc->border_head_row && rn <= desc->fixed_rows); if (!print_border && (rn == desc->border_top_row || rn == desc->border_bottom_row)) continue; if (!print_header_line && rn == desc->border_head_row) continue; if (!print_header && rn < desc->fixed_rows) continue; if (!print_footer && desc->footer_row != -1 && rn >= desc->footer_row) continue; } iter.headline = desc->headline_transl; iter.row = rowstr; iter.xpos = 0; field = NULL; field_size = 0; field_xpos = -1; expstate.colno = 0; /* for text format we have not concate lines of multiline field */ if (format != CLIPBOARD_FORMAT_TEXT) continuation_mark = linfo && linfo->mask & LINEINFO_CONTINUATION; debug_processed_rows += 1; /* * line parser - separates fields on line */ while ((ptr = next_char(&iter, &typ, &size, &width, &xpos))) { if (typ == 'd') { if (!field) field = ptr; field_size += size; field_xpos = xpos; continue; } if (field) { isok = process_item(&expstate, 'd', field, field_size, field_xpos, is_colname, continuation_mark, prev_continuation_mark); if (!isok) goto exit_export; field = NULL; field_size = 0; field_xpos = -1; } isok = process_item(&expstate, typ, ptr, size, xpos, is_colname, continuation_mark, prev_continuation_mark); if (!isok) goto exit_export; } if (field) { isok = process_item(&expstate, 'd', field, field_size, field_xpos, is_colname, continuation_mark, prev_continuation_mark); if (!isok) goto exit_export; } isok = process_item(&expstate, 'N', NULL, 0, -1, is_colname, continuation_mark, prev_continuation_mark); if (!isok) goto exit_export; prev_continuation_mark = continuation_mark; } exit_export: log_row("export: read rows: %d, procesed rows: %d", debug_read_rows, debug_processed_rows); if (expstate.colnames) { int i; for (i = 0; i < expstate.columns; i++) free(expstate.colnames[i]); free(expstate.colnames); } if (expstate.table_name && expstate.table_name != table_name) free(expstate.table_name); if (expstate.lines) { int i; for (i = 0; i < expstate.columns; i++) free(expstate.lines[i].data); free(expstate.lines); } log_row("exported %d rows with result %d", expstate.nlines, isok); return isok; } pspg-5.8.1/src/infra.c000066400000000000000000000225451452457446400145570ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * infra.c * a routines for build a infrastructure * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/infra.c * *------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include "pspg.h" #include "unicode.h" FILE *logfile = NULL; /* * Print entry to log file */ static void print_log_prefix(void) { time_t rawtime; struct tm *timeinfo; char outstr[200]; time(&rawtime); timeinfo = localtime(&rawtime); strftime(outstr, sizeof(outstr), "%a, %d %b %Y %T %z", timeinfo); fprintf(logfile, "%s [%ld] ", outstr, (long) getpid()); } void log_row(const char *fmt, ...) { va_list args; if (logfile) { print_log_prefix(); va_start(args, fmt); vfprintf(logfile, fmt, args); va_end(args); fputc('\n', logfile); } #ifdef DEBUG_PIPE if (debug_pipe) { va_start(args, fmt); vfprintf(debug_pipe, fmt, args); va_end(args); fputc('\n', debug_pipe); } #endif } void leave(const char *fmt, ...) { va_list args; /* close ncurses and input streams */ exit_handler(); if (!fmt) { if (logfile) { fclose(logfile); logfile = NULL; } exit(EXIT_FAILURE); } va_start(args, fmt); vfprintf(stderr, fmt, args); va_end(args); fputc('\n', stderr); if (logfile) { print_log_prefix(); va_start(args, fmt); vfprintf(logfile, fmt, args); va_end(args); fputc('\n', logfile); fclose(logfile); logfile = NULL; } #ifdef DEBUG_PIPE va_start(args, fmt); vfprintf(debug_pipe, fmt, args); va_end(args); fputc('\n', debug_pipe); #endif exit(EXIT_FAILURE); } void format_error(const char *fmt, ...) { va_list args; char *ptr; if (!current_state) leave("current_state is not initialized"); va_start(args, fmt); vsnprintf(pspg_errstr_buffer, PSPG_ERRSTR_BUFFER_SIZE, fmt, args); va_end(args); current_state->errstr = pspg_errstr_buffer; /* throw multilines strings */ for (ptr = pspg_errstr_buffer; *ptr; ptr++) { if (*ptr == '\n') { *ptr = '\0'; break; } } } /* * Safe memory operation. */ void * smalloc(int size) { void *result; result = malloc(size); if (!result) leave("out of memory"); memset(result, 0, size); return result; } void * srealloc(void *ptr, int size) { void *result; result = realloc(ptr, size); if (!result) leave("out of memory"); return result; } void * smalloc2(int size, char *debugstr) { void *result; result = malloc(size); if (!result) leave("out of memory while %s", debugstr); memset(result, 0, size); return result; } char * sstrdup(const char *str) { char *result = strdup(str); if (!result) leave("out of memory"); return result; } char * sstrdup2(const char *str, char *debugstr) { char *result = strdup(str); if (!result) leave("out of memory while %s", debugstr); return result; } char * sstrndup(const char *str, int bytes) { char *result, *ptr; result = ptr = smalloc(bytes + 1); while (*str && bytes-- > 0) *ptr++ = *str++; *ptr = '\0'; return result; } /* * Returns byte size of first char of string */ inline int charlen(const char *str) { return use_utf8 ? utf8charlen(*str) : 1; } inline int dsplen(const char *str) { return *str == ' ' ? 1 : (use_utf8 ? utf_dsplen(str) : 1); } /* * truncate spaces from both ends */ char * trim_str(const char *str, int *size) { char *result = NULL; int bytes = *size; while (*str == ' ' && bytes > 0) { str += 1; bytes -= 1; } if (bytes > 0) { const char *after_nspc_chr = NULL; result = (char *) str; while (bytes > 0) { int chrlen = charlen(str); if (*str != ' ') after_nspc_chr = str + chrlen; str = str + chrlen; bytes -= chrlen; } *size = after_nspc_chr - result; } else *size = 0; return result; } /* * truncate spaces from both ends, support quotes and double quotes */ char * trim_quoted_str(const char *str, int *size) { char *result; result = trim_str(str, size); /* check first and last char */ if (*size > 0) { if (*result == '"' || *result == '\'') { if (*result == *(result + *size - 1)) { result += 1; *size -= 2; } } } return result; } /* * Few simple functions for string concatetion */ void InitExtStr(ExtStr *estr) { estr->len = 0; estr->maxlen = 1024; estr->data = smalloc(estr->maxlen); *estr->data = '\0'; } void ResetExtStr(ExtStr *estr) { estr->len = 0; /* * Because the content self is still used, we should not to push * ending zero there. * DONT DO THIS *estr->data = '\0'; */ } void ExtStrAppendNewLine(ExtStr *estr, char *str) { int size = strlen(str); if (estr->len + size + 2 > estr->maxlen) { while (estr->len + size + 2 > estr->maxlen) estr->maxlen += 1024; estr->data = srealloc(estr->data, estr->maxlen); } if (estr->len > 0) estr->data[estr->len++] = '\n'; strncpy(&estr->data[estr->len], str, size + 1); estr->len += size; } /* * continuation_mark is related to new line symbol in text. * continuation_mark is related to line break created by * wrapped mode. continuation_mark2 is equal to previous * continuous_mark */ void ExtStrAppendLine(ExtStr *estr, char *str, int size, char linestyle, bool continuation_mark, bool continuation_mark2) { bool insert_nl = false; str = trim_str(str, &size); if (size == 0) return; if (continuation_mark) { int continuation_mark_size = 0; bool wrapped_mode = false; /* try to detect continuation marks at end of line */ if (linestyle == 'a') { if (str[size - 1] == '+') { continuation_mark_size = 1; insert_nl = true; } else if (str[size - 1] == '.') { continuation_mark_size = 1; wrapped_mode = true; } } else { if (size > 3) { const char *u1 = "\342\206\265"; /* ↵ */ const char *u2 = "\342\200\246"; /* … */ char *ptr = str + size - 3; if (strncmp(ptr, u1, 3) == 0) { continuation_mark_size = 3; insert_nl = true; } else if (strncmp(ptr, u2, 3) == 0) { continuation_mark_size = 3; wrapped_mode = true; } } } if (continuation_mark_size > 0) { size -= continuation_mark_size; /* * Trimming right end of string can eats spaces. In normal mode, it * should not be problem, because there is new line symbol, but in * wrapped mode we can trim space that is used as word separator. * So don't trim in wrapped mode. */ if (!wrapped_mode) str = trim_str(str, &size); } } /* * continuation mark can be on left side to (wrapped mode). * We should to skip it. */ if (continuation_mark2) { int cms = 0; /* continuation mark size */ if (linestyle == 'a') { if (*str == '.') cms = 1; } else { if (size > 3) { const char *u1 = "\342\200\246"; /* … */ if (strncmp(str, u1, 3) == 0) cms = 3; } } if (cms > 0) { str += cms; size -= cms; } } if (estr->len + size + 2 > estr->maxlen) { while (estr->len + size + 2 > estr->maxlen) estr->maxlen += 1024; estr->data = srealloc(estr->data, estr->maxlen); } strncpy(&estr->data[estr->len], str, size); estr->len += size; if (insert_nl) estr->data[estr->len++] = '\n'; estr->data[estr->len] = '\0'; } int ExtStrTrimEnd(ExtStr *estr, bool replace_nl) { char *ptr; char *last_nonwhite = NULL; ptr = estr->data; while (*ptr) { if (*ptr != ' ' && *ptr != '\n') last_nonwhite = ptr; if (*ptr == '\n' && replace_nl) *ptr = ' '; ptr += charlen(ptr); } if (last_nonwhite) { estr->len = last_nonwhite - estr->data + 1; estr->data[estr->len] = '\0'; } else ResetExtStr(estr); return estr->len; } /* * read write stderr poopen function */ int rwe_popen(char *command, int *fin, int *fout, int *ferr) { int in[2]; int out[2]; int err[2]; int rc; int saved_errno; errno = 0; saved_errno = 0; rc = pipe(in); if (rc == 0) { rc = pipe(out); if (rc == 0) { rc = pipe(err); if (rc == 0) { int pid = fork(); if (pid > 0) { /* parent */ close(in[0]); close(out[1]); close(err[1]); *fin = in[1]; *fout = out[0]; *ferr = err[0]; return pid; } else if (pid == 0) { /* child */ close(in[1]); close(out[0]); close(err[0]); dup2(in[0], 0); dup2(out[1], 1); dup2(err[1], 2); close(in[0]); close(out[1]); close(err[1]); execl("/bin/sh", "sh", "-c", command, NULL); exit(127); } else saved_errno = errno; close(err[0]); close(err[1]); } else saved_errno = errno; close(out[0]); close(out[1]); } else saved_errno = errno; close(in[0]); close(out[1]); } else saved_errno = errno; errno = saved_errno; return -1; } /* * Replace tilde by HOME dir */ char * tilde(char *dest, const char *path) { static char buffer[MAXPATHLEN]; int chars = 0; char *w; if (!dest) dest = buffer; w = dest; while (*path && chars < MAXPATHLEN - 1) { if (*path == '~') { char *home = getenv("HOME"); if (home == NULL) leave("HOME directory is not defined"); while (*home && chars < MAXPATHLEN - 1) { *w++ = *home++; chars += 1; } path++; } else { *w++ = *path++; chars += 1; } } *w = '\0'; return dest; } pspg-5.8.1/src/inputs.c000066400000000000000000000616231452457446400150020ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * events.c * handles all events - tty and content * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/inputs.c * *------------------------------------------------------------------------- */ #define PDC_NCMOUSE #include #include #include #include #include #include #include #include #include #if defined(HAVE_INOTIFY) #include #elif defined(HAVE_KQUEUE) #include #include #include #endif #include "inputs.h" #include "pspg.h" #define PSPG_NOTASSIGNED_CODE 0 static char pathname[MAXPATHLEN] = ""; FILE *f_tty = NULL; /* ncurses input stream */ FILE *f_data = NULL; /* content input */ unsigned int f_data_opts = 0; /* describe properties of content input */ int f_data_fileno = -1; /* content input used by poll */ static struct pollfd fds[2]; static long last_data_pos = -1; static int open_data_stream_prev_errno = 0; #if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE) static int notify_fd = -1; #endif #if defined(HAVE_INOTIFY) static int inotify_wd = -1; #endif static NCursesEventData saved_event; static bool saved_event_is_valid = false; static bool close_f_tty = false; #ifdef PDCURSES static bool is_button1_pressed = false; #endif int pspg_esc_delay; /************************************* * Events processing * ************************************* */ #ifdef PDCURSES static bool is_alt(int *keycode) { switch (*keycode) { case ALT_0: *keycode = '0'; return true; case ALT_1: *keycode = '1'; return true; case ALT_2: *keycode = '2'; return true; case ALT_3: *keycode = '3'; return true; case ALT_4: *keycode = '4'; return true; case ALT_5: *keycode = '5'; return true; case ALT_6: *keycode = '6'; return true; case ALT_7: *keycode = '7'; return true; case ALT_8: *keycode = '8'; return true; case ALT_9: *keycode = '9'; return true; case ALT_A: *keycode = 'a'; return true; case ALT_B: *keycode = 'b'; return true; case ALT_C: *keycode = 'c'; return true; case ALT_D: *keycode = 'd'; return true; case ALT_E: *keycode = 'e'; return true; case ALT_F: *keycode = 'f'; return true; case ALT_G: *keycode = 'g'; return true; case ALT_H: *keycode = 'h'; return true; case ALT_I: *keycode = 'i'; return true; case ALT_J: *keycode = 'j'; return true; case ALT_K: *keycode = 'k'; return true; case ALT_L: *keycode = 'l'; return true; case ALT_M: *keycode = 'm'; return true; case ALT_N: *keycode = 'n'; return true; case ALT_O: *keycode = 'o'; return true; case ALT_P: *keycode = 'p'; return true; case ALT_Q: *keycode = 'q'; return true; case ALT_R: *keycode = 'r'; return true; case ALT_S: *keycode = 's'; return true; case ALT_T: *keycode = 't'; return true; case ALT_U: *keycode = 'u'; return true; case ALT_V: *keycode = 'v'; return true; case ALT_W: *keycode = 'w'; return true; case ALT_X: *keycode = 'x'; return true; case ALT_Y: *keycode = 'y'; return true; case ALT_Z: *keycode = 'x'; return true; default: return false; } } #endif /* * Read one ncurses event */ static bool get_ncurses_event(NCursesEventData *nced, bool *sigint, bool *sigwinch) { bool first_event = true; int ok = true; #if NCURSES_WIDECHAR > 0 && defined HAVE_NCURSESW wint_t ch; int ret; #endif *sigint = false; *sigwinch = false; nced->keycode = PSPG_NOTASSIGNED_CODE; nced->ignore_it = false; nced->alt = false; /* * When ALT key is used, then ncurses generates two keycodes. And then * we have to read input 2x times. */ repeat: errno = 0; #if NCURSES_WIDECHAR > 0 && defined HAVE_NCURSESW ret = get_wch(&ch); UNUSED(ret); nced->keycode = ch; #else nced->keycode = getch(); #endif #ifdef DEBUG_PIPE fprintf(debug_pipe, "*** keycode: %d, err: %d\n", nced->keycode, errno); #endif if (errno == EINTR) { if (handle_sigint) { *sigint = true; handle_sigint = false; } if (handle_sigwinch) { *sigwinch = true; handle_sigwinch = false; } return false; } if (errno == 0) { if (nced->keycode == ERR) { nced->keycode = PSPG_NOTASSIGNED_CODE; nced->alt = false; nced->ignore_it = true; return true; } if (nced->keycode == KEY_MOUSE) { ok = getmouse(&nced->mevent) == OK; #ifdef PDCURSES /* * event filter - we want to report mouse move only when * BUTTON1 is pressed (note: we have not xterm mouse mode 1002 * there, because terminalinfo is just fake API there. */ if (nced->mevent.bstate & BUTTON1_PRESSED) { is_button1_pressed = true; } else if (nced->mevent.bstate & BUTTON1_RELEASED) { is_button1_pressed = false; } if (nced->mevent.bstate & REPORT_MOUSE_POSITION) { if (is_button1_pressed) { return true; } nced->keycode = PSPG_NOTASSIGNED_CODE; nced->ignore_it = true; return true; } #endif } else if (nced->keycode == PSPG_ESC_CODE) /* Escape (before ALT chars) */ { if (first_event) { first_event = false; goto repeat; } } } /* * Workaround for issue #204. MacOS returns ERR when there are not * any other activity after ESC in ESCDELAY limit. */ if (nced->keycode == ERR && !first_event && errno == 0) nced->keycode = PSPG_NOTASSIGNED_CODE; #if PDCURSES nced->alt = is_alt(&nced->keycode); #else nced->alt = !first_event; #endif return ok; } /* * When only_tty_events is true, then we don't want to return events related to processed * content - new data, inotify event, .. These events are saved, but for this moment ignored. * Timeout -1 (timeout is infinity), 0 (no any wait), else timeout in ms. */ int _get_pspg_event(NCursesEventData *nced, bool only_tty_events, int timeout) { bool sigint; bool sigwinch; bool first_event = true; bool first_loop = true; bool without_timeout = timeout == -1; bool zero_timeout = timeout == 0; #if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE) bool poll_notify_fd = false; #endif int nfds; /* * Return saved events. */ if (saved_event_is_valid) { memcpy(nced, &saved_event, sizeof(NCursesEventData)); saved_event_is_valid = false; return PSPG_NCURSES_EVENT; } else if (!only_tty_events && handle_sigint) { handle_sigint = false; return PSPG_SIGINT_EVENT; } else if (handle_sigwinch) { handle_sigwinch = false; return PSPG_SIGWINCH_EVENT; } /* * Simply way, when we need only tty events and timeout is zero, * This will be used after any ncurses event to get all buffered * ncurses events before refreshing screen. */ if (only_tty_events && zero_timeout) { if (get_ncurses_event(nced, &sigint, &sigwinch)) return PSPG_NCURSES_EVENT; else if (sigint) { handle_sigint = true; return PSPG_NOTHING_VALID_EVENT; } else if (sigwinch) { return PSPG_SIGWINCH_EVENT; } else return PSPG_NOTHING_VALID_EVENT; } fds[0].fd = fileno(f_tty); fds[0].events = POLLIN; nfds = 1; if (!only_tty_events) { if (current_state->stream_mode && (f_data_opts & STREAM_IS_OPEN) && !(f_data_opts & STREAM_IS_FILE) && !(f_data_opts & STREAM_IS_CLOSED)) { fds[1].fd = fileno(f_data); fds[1].events = POLLIN; #if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE) poll_notify_fd = false; #endif nfds = 2; } #if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE) else if ((f_data_opts & STREAM_HAS_NOTIFY_SUPPORT) && (notify_fd != -1)) { fds[1].fd = notify_fd; fds[1].events = POLLIN; poll_notify_fd = true; nfds = 2; } #endif } while (timeout >= 0 || without_timeout) { int poll_num; time_t t1_sec, t2_sec; long t1_ms, t2_ms; /* * When timeout is 0, then we allow only one iteration, and * returns PSPG_NOTHING_VALID_EVENT if there are not any valid * event. When timeout is higher or there is not timeout, then * we can wait to valid event or to timeout. */ if (!first_loop) { if (zero_timeout) return PSPG_NOTHING_VALID_EVENT; } else first_loop = false; /* * ESCAPE key is used (by ncurses applications) like switcher to alternative * keyboard. The escape event is forced by 2x press of ESCAPE key. The ESCAPE * key signalize start of seqence. The length of this sequnce is limmited by * timeout PSPG_ESC_DELAY (default 2000). So when ESCAPE is pressed, we have * repeat reading to get second key of key's sequance. * */ repeat_reading: /* * take time of waitin inside poll function. */ if (!without_timeout && !zero_timeout) current_time(&t1_sec, &t1_ms); poll_num = poll(fds, nfds, without_timeout ? -1 : timeout); if (!without_timeout && !zero_timeout) { current_time(&t2_sec, &t2_ms); timeout -= (int) (time_diff(t2_sec, t2_ms, t1_sec, t1_ms)); } if (poll_num == -1) { /* pool error is expected after sigint */ if (handle_sigint) { if (!only_tty_events) { handle_sigint = false; return PSPG_SIGINT_EVENT; } else continue; } else if (handle_sigwinch) { handle_sigwinch = false; return PSPG_SIGWINCH_EVENT; } #ifdef PDCURSES /* * I didn't find how to resize term in pdcurses without crash. * So instead to call resize_term from custom space, use pdcurses * sigwinch handler, and force pdcurses to handle resizing after * terminal is resized. */ else if (is_termresized()) { goto ncurses_get; } #endif log_row("poll error (%s) %d", strerror(errno)); } else if (poll_num > 0) { if (fds[0].revents) { #ifdef PDCURSES ncurses_get: #endif if (get_ncurses_event(nced, &sigint, &sigwinch)) { if (nced->alt && nced->keycode == PSPG_NOTASSIGNED_CODE && first_event && timeout != 0) { first_event = false; if (pspg_esc_delay != 0) { if (pspg_esc_delay > 0) { timeout = pspg_esc_delay; without_timeout = false; } else { timeout = -1; without_timeout = true; } goto repeat_reading; } else { /* esc delay is not wanted */ nced->keycode = PSPG_ESC_CODE; return PSPG_NCURSES_EVENT; } } if (!first_event) { /* double escape */ if (nced->alt && nced->keycode == PSPG_NOTASSIGNED_CODE) nced->keycode = PSPG_ESC_CODE; else if (nced->keycode != KEY_MOUSE) nced->alt = true; } return PSPG_NCURSES_EVENT; } if (sigint) { if (!only_tty_events) return PSPG_SIGINT_EVENT; } else if (sigwinch) { return PSPG_SIGWINCH_EVENT; } } else if (fds[1].revents) { short revents = fds[1].revents; if (revents & POLLHUP) { /* The pipe cannot be reopened */ if (f_data_opts & STREAM_IS_PIPE) { f_data_opts |= STREAM_IS_CLOSED; log_row("detected POLLHUP on pipe"); return PSPG_NOTHING_VALID_EVENT; } log_row("force close stream after POLLHUP"); close_data_stream(); /* we don't want to reopen stream too quickly, sleep 100ms */ usleep(1000 * 100); return PSPG_READ_DATA_EVENT; } else if (revents & POLLIN) { #if defined(HAVE_INOTIFY) if (poll_notify_fd) { ssize_t len; char buff[640]; bool stream_closed = false; /* there are a events on monitored file */ len = read(notify_fd, buff, sizeof(buff)); /* * read to end, it is notblocking IO, only one event and * one file is monitored */ while (len > 0) { const struct inotify_event *ino_event = (struct inotify_event *) buff; while (len > 0) { if ((ino_event->mask & IN_CLOSE_WRITE)) stream_closed = true; len -= sizeof (struct inotify_event) + ino_event->len; ino_event += sizeof (struct inotify_event) + ino_event->len; } len = read(notify_fd, buff, sizeof(buff)); } if (stream_closed) { log_row("detected CLOSE WRITE by inotify"); close_data_stream(); } /* * wait 200ms - sometimes inotify is too fast, and the content * of is not ready for pspg and we get inotify event too prematurely. * Use longer waiting in streaming mode, because detected event is MODIFY */ usleep(1000 * (stream_closed ? 100 : 250)); } #elif defined(HAVE_KQUEUE) if (poll_notify_fd) { struct kevent kqev; struct timespec tmout = {0, 0}; bool stream_closed = false; int rc; rc = kevent(notify_fd, NULL, 0, &kqev, 1, &tmout); while (rc == 1) { if (kqev.flags & EV_ERROR) log_row("kqueue EV_ERROR (%s)", strerror(kqev.data)); #if defined(NOTE_CLOSE_WRITE) else if (kqev.flags & NOTE_CLOSE_WRITE) stream_closed = true; #endif rc = kevent(notify_fd, NULL, 0, &kqev, 1, &tmout); } if (rc == -1) log_row("kqueue error (%s)", strerror(errno)); if (stream_closed) { log_row("detected CLOSE WRITE by kqueue"); close_data_stream(); } usleep(1000 * (stream_closed ? 100 : 250)); } #endif return PSPG_READ_DATA_EVENT; } } } else { /* timeout */ if (!first_event) { nced->alt = false; nced->keycode = PSPG_ESC_CODE; return PSPG_NCURSES_EVENT; } } } return PSPG_TIMEOUT_EVENT; } #ifdef DEBUG_PIPE int get_pspg_event(NCursesEventData *nced, bool only_tty_events, int timeout) { static int eventno = 0; const char *event_name; int result; fprintf(debug_pipe, "*** waiting on event no: %d (%stimeout: %d) ***\n", ++eventno, only_tty_events ? "only tty, " : "", timeout); fflush(debug_pipe); result = _get_pspg_event(nced, only_tty_events, timeout); switch (result) { case PSPG_NCURSES_EVENT: event_name = "NCURSES"; break; case PSPG_READ_DATA_EVENT: event_name = "READ DATA"; break; case PSPG_TIMEOUT_EVENT: event_name = "TIMEOUT"; break; case PSPG_SIGINT_EVENT: event_name = "SIGINT"; break; case PSPG_SIGWINCH_EVENT: event_name = "SIGWINCH"; break; case PSPG_FATAL_EVENT: event_name = "FATAL"; break; case PSPG_ERROR_EVENT: event_name = "ERROR"; break; case PSPG_NOTHING_VALID_EVENT: event_name = "NOTHING VALID EVENT"; break; default: event_name = "undefined event"; } fprintf(debug_pipe, "*** event no: %d = %s ***\n", eventno, event_name); if (result == PSPG_NCURSES_EVENT) { if (!nced->ignore_it) { char buffer[20]; if (nced->keycode == KEY_MOUSE) sprintf(buffer, ", bstate: %08lx", (unsigned long) nced->mevent.bstate); else buffer[0] = '\0'; fprintf(debug_pipe, "*** ncurses event %s%s%s (%d) ***\n", nced->alt ? "Alt " : "", nced->keycode ? keyname(nced->keycode) : "0", buffer, nced->keycode); } else fprintf(debug_pipe, "*** ignored ncurses event ****\n"); } fflush(debug_pipe); return result; } #else int get_pspg_event(NCursesEventData *nced, bool only_tty_events, int timeout) { return _get_pspg_event(nced, only_tty_events, timeout); } #endif void unget_pspg_event(NCursesEventData *nced) { if (saved_event_is_valid) log_row("attention - saved ncurses event is overwritten"); memcpy(&saved_event, nced, sizeof(NCursesEventData)); saved_event_is_valid = true; } /************************************* * Prepare an access to input streams * ************************************* */ bool open_data_stream(Options *opts) { struct stat statbuf; const char *mode = "r"; current_state->_errno = 0; current_state->errstr = NULL; if (opts->pathname) { char *locpathname = tilde(pathname, opts->pathname); errno = 0; /* * Try to detect if source is file or pipe */ if (stat(locpathname, &statbuf) == 0) { if (S_ISFIFO(statbuf.st_mode)) { log_row("data source is FIFO"); /* * Without mode="rw+", fopen over FIFO is very blocking, * if FIFO is not currently opened by some process for * write. We can protect self by open FIFO directly with * rw+ mode. */ mode = "rw+"; } } /* * fopen can be blocking operation on FIFO. It is known limit. Theoretically * it can be fixed by using open fce instead fopen and setting RW and NONBLOCK * in open time. But it doesn't look like robust solution. */ f_data = fopen(locpathname, mode); if (!f_data) { /* save errno, and prepare error message */ current_state->_errno = errno; /* * In watch mode, the file can be created in next cycle. In this case * we don't want skip current content, when stream mode is active. */ open_data_stream_prev_errno = errno; format_error("cannot to open file \"%s\" (%s)", pathname, strerror(errno)); return false; } f_data_opts = STREAM_IS_OPEN | STREAM_CAN_BE_CLOSED; } else { /* there is not a path name */ pathname[0] = '\0'; /* use stdin as input if query cannot be used as source */ if (!opts->query && !opts->querystream) { f_data = stdin; f_data_opts = STREAM_IS_OPEN | STREAM_IS_PIPE; } } if (f_data) { if (fstat(fileno(f_data), &statbuf) != 0) { current_state->_errno = errno; format_error("cannot to get status of file \"%s\" (%s)", pathname, strerror(errno)); return false; } f_data_opts |= S_ISREG(statbuf.st_mode) ? STREAM_IS_FILE : 0; f_data_opts |= S_ISFIFO(statbuf.st_mode) ? STREAM_IS_FIFO : 0; /* * FIFO doesn't work well in non stream mode, it's more pipe, than file. * So when we know, so input is FIFO, we force stream mode. */ if ((f_data_opts & STREAM_IS_FIFO) && !(f_data_opts & STREAM_IS_PIPE)) { log_row("force stream mode because input is FIFO"); current_state->stream_mode = true; } if (current_state->stream_mode) { /* ensure non blocking read from pipe or fifo */ if (f_data_opts & STREAM_IS_FILE) { #if !defined(HAVE_INOTIFY) && !defined(HAVE_KQUEUE) leave("streaming on file is not available without file notification service"); #endif /* * In stream mode skip current content if this file * is opened first time. */ fseek(f_data, 0L, open_data_stream_prev_errno == ENOENT ? SEEK_SET : SEEK_END); last_data_pos = ftell(f_data); open_data_stream_prev_errno = 0; } else { /* in stream mode we use non block reading for FIFO or pipes */ fcntl(fileno(f_data), F_SETFL, O_NONBLOCK); } } f_data_opts |= (fcntl(fileno(f_data), F_GETFL) & O_NONBLOCK) ? STREAM_IS_IN_NONBLOCKING_MODE : 0; } if (current_state->stream_mode && f_data && (f_data_opts & STREAM_IS_FIFO)) f_data_fileno = fileno(f_data); else f_data_fileno = -1; if (!(f_data_opts & STREAM_IS_PIPE)) f_data_opts |= STREAM_CAN_BE_REOPENED; if (f_data && !ferror(f_data) && (f_data_opts & STREAM_IS_FILE) && (opts->watch_file || current_state->stream_mode)) { #if defined(HAVE_INOTIFY) if (notify_fd == -1) { notify_fd = inotify_init1(IN_NONBLOCK); if (notify_fd == -1) leave("cannot initialize inotify (%s)", strerror(errno)); } if (inotify_wd == -1) { inotify_wd = inotify_add_watch(notify_fd, pathname, IN_CLOSE_WRITE | (current_state->stream_mode ? IN_MODIFY : 0)); if (inotify_wd == -1) leave("cannot watch file \"%s\" (%s)", pathname, strerror(errno)); } f_data_opts |= STREAM_HAS_NOTIFY_SUPPORT; #elif defined(HAVE_KQUEUE) && defined(NOTE_CLOSE_WRITE) if (notify_fd == -1) { static struct kevent event; int rc; int fd2; notify_fd = kqueue(); if (notify_fd == -1) leave("cannot to initialize kqueue(%s)", strerror(errno)); /* * The data file can be closed after reading, but we want to watch * file longer time, so use own file descriptor (when we don't use * stream mode) */ fd2 = fileno(f_data); if (!current_state->stream_mode) fd2 = dup(fd2); EV_SET(&event, fd2, EVFILT_VNODE, EV_ADD | EV_ENABLE | EV_CLEAR, NOTE_CLOSE_WRITE | (current_state->stream_mode ? NOTE_WRITE : 0), 0, NULL); rc = kevent(notify_fd, &event, 1, NULL, 0, NULL); if (rc == -1) leave("cannot to register kqueue event (%s)", strerror(errno)); if (event.flags & EV_ERROR) leave("cannot to register kqueue event (%s)", strerror(event.data)); } f_data_opts |= STREAM_HAS_NOTIFY_SUPPORT; #elif defined(HAVE_KQUEUE) /* * NOTE_CLOSE_WRITE is available from FreeBSD 11 * On older BSD systems this event is not available. */ if (notify_fd == -1 && current_state->stream_mode) { static struct kevent event; int rc; notify_fd = kqueue(); if (notify_fd == -1) leave("cannot to initialize kqueue(%s)", strerror(errno)); EV_SET(&event, fileno(f_data), EVFILT_VNODE, EV_ADD | EV_ENABLE | EV_CLEAR, NOTE_WRITE, 0, NULL); rc = kevent(notify_fd, &event, 1, NULL, 0, NULL); if (rc == -1) leave("cannot to register kqueue event (%s)", strerror(errno)); if (event.flags & EV_ERROR) leave("cannot to register kqueue event (%s)", strerror(event.data)); } f_data_opts |= STREAM_HAS_NOTIFY_SUPPORT; #else leave("missing inotify support"); #endif /* * In streaming mode, when input stream is file, then is * high risk of desynchronization. Until we will have some * synchronization mark in protocol, we should not to * allow progressive load. */ if (current_state->stream_mode && (f_data_opts & STREAM_IS_FILE)) opts->progressive_load_mode = false; } return true; } void close_data_stream(void) { if (f_data_opts & STREAM_CAN_BE_CLOSED & STREAM_IS_OPEN) { fclose(f_data); f_data = NULL; #if defined(HAVE_INOTIFY) && defined(HAVE_KQUEUE) f_data_opts = f_data_opts & STREAM_HAS_NOTIFY_SUPPORT; #else f_data_opts = 0; #endif f_data_opts &= ~(STREAM_CAN_BE_CLOSED); f_data_opts &= ~(STREAM_IS_OPEN); } /* * KQUEUE has joined notification file descriptor, * so we should to invalidate notify_fd too. */ #if defined(HAVE_KQUEUE) && defined(NOTE_CLOSE_WRITE) if (current_state->stream_mode && notify_fd != -1) { close(notify_fd); notify_fd = -1; f_data_opts = 0; } #elif defined(HAVE_KQUEUE) if (notify_fd != -1) { close(notify_fd); notify_fd = -1; f_data_opts = 0; } #endif } bool open_tty_stream(void) { #ifndef __APPLE__ f_tty = fopen("/dev/tty", "r+"); #endif if (!f_tty) { f_tty = fopen(ttyname(fileno(stdout)), "r"); if (!f_tty) { if (isatty(fileno(stderr))) f_tty = stderr; } else close_f_tty = true; } else close_f_tty = true; return f_tty != NULL; } /* * ending pspg */ void close_tty_stream(void) { if (close_f_tty) fclose(f_tty); f_tty = NULL; close_f_tty = false; #if defined(HAVE_INOTIFY) if (inotify_wd >= 0) { inotify_rm_watch(notify_fd, inotify_wd); inotify_wd = -1; } #endif #if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE) if (notify_fd >= 0) { close(notify_fd); notify_fd = -1; } #endif } /************************************* * File truncation detection * ************************************* */ void detect_file_truncation(void) { /* detection truncating */ if (last_data_pos != -1) { struct stat stats; /* * This detection based on size is weak. It doesn't detect * case when old content is overwritten by new content with * same or bigger size. */ if (fstat(fileno(f_data), &stats) == 0) { if (stats.st_size < last_data_pos) { log_row("file \"%s\" was truncated", pathname); /* read from start of file */ fseek(f_data, 0L, SEEK_SET); } } else log_row("cannot to stat file: %s (%s)", pathname, strerror(errno)); } } void save_file_position(void) { if (current_state->stream_mode && f_data_opts & STREAM_IS_FILE) last_data_pos = ftell(f_data); } const char * get_input_file_basename(void) { if (pathname[0]) { return basename(pathname); } return NULL; } /************************************* * Utility * ************************************* */ /* * Disable echo and buffering on terminal, read one char, * and returns original settings. */ int wait_on_press_any_key(void) { struct termios current; struct termios orig_termios; int result; tcgetattr(fileno(f_tty), &orig_termios); tcgetattr(fileno(f_tty), ¤t); current.c_lflag &= ~(ECHO | ICANON); tcsetattr(fileno(f_tty), TCSAFLUSH, ¤t); result = fgetc(f_tty); tcsetattr(STDIN_FILENO, TCSAFLUSH, &orig_termios); return result; } #if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE) void clean_notify_poll(void) { #if defined(HAVE_INOTIFY) if (notify_fd >= 0) { char buff[64]; while (read(notify_fd, buff, sizeof(buff)) >= 0) {}; } #elif defined(HAVE_KQUEUE) if (notify_fd >= 0) { struct kevent kqev; struct timespec tmout = {0, 0}; int rc; rc = kevent(notify_fd, NULL, 0, &kqev, 1, &tmout); while (rc == 1) rc = kevent(notify_fd, NULL, 0, &kqev, 1, &tmout); } #endif } #endif pspg-5.8.1/src/inputs.h000066400000000000000000000045431452457446400150050ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * inputs.h * generic processing of input * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/inputs.h * *------------------------------------------------------------------------- */ #ifndef PSPG_INPUT_H #define PSPG_INPUT_H #if defined HAVE_NCURSESW_CURSES_H #include #elif defined HAVE_NCURSESW_H #include #elif defined HAVE_NCURSES_CURSES_H #include #elif defined HAVE_NCURSES_H #include #elif defined HAVE_CURSES_H #include #else /* fallback */ #include #endif #include "pspg.h" /* * NCurses event - hold all data of ncurses event */ typedef struct { int keycode; bool alt; bool ignore_it; MEVENT mevent; } NCursesEventData; typedef enum { PSPG_NCURSES_EVENT, /* classic ncurses event - keyboard, mouse, resize terminal */ PSPG_READ_DATA_EVENT, /* signal of new data on input */ PSPG_TIMEOUT_EVENT, /* got a timeout */ PSPG_SIGINT_EVENT, /* got a sigint */ PSPG_SIGWINCH_EVENT, /* got a sigwinch */ PSPG_FATAL_EVENT, /* got a fatal error */ PSPG_ERROR_EVENT, /* got a error with error message */ PSPG_NOTHING_VALID_EVENT, /* got an error, but this error can be ignored */ } PspgEventType; enum { STREAM_IS_UNKNOWN = 0, STREAM_IS_FIFO = 1, /* can be FIFO or PIPE */ STREAM_IS_PIPE = 1 << 2, STREAM_IS_FILE = 1 << 3, STREAM_CAN_BE_CLOSED = 1 << 4, STREAM_CAN_BE_REOPENED = 1 << 5, STREAM_IS_IN_NONBLOCKING_MODE = 1 << 6, STREAM_HAS_NOTIFY_SUPPORT = 1 << 7, STREAM_IS_OPEN = 1 << 8, STREAM_IS_CLOSED = 1 << 9, }; extern FILE *f_data; extern FILE *f_tty; extern unsigned int f_data_opts; extern int pspg_esc_delay; extern int get_pspg_event(NCursesEventData *nced, bool only_tty_events, int timeout); extern void unget_pspg_event(NCursesEventData *nced); extern void detect_file_truncation(void); extern void save_file_position(void); extern bool open_data_stream(Options *opts); extern void close_data_stream(void); extern bool open_tty_stream(void); extern void close_tty_stream(void); extern int wait_on_press_any_key(void); extern const char *get_input_file_basename(void); #if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE) extern void clean_notify_poll(void); #endif #endif pspg-5.8.1/src/linebuffer.c000066400000000000000000000220541452457446400155740ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * linebuffer.c * a routines for iteration over stored lines * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/linebuffer.c * *------------------------------------------------------------------------- */ #include "pspg.h" #include #include /* * Initialize line buffer iterator */ inline void init_lbi(LineBufferIter *lbi, LineBuffer *lb, MappedLine *order_map, int order_map_items, int init_pos) { lbi->start_lb = lb; lbi->order_map = order_map; lbi->order_map_items = order_map_items; lbi_set_lineno(lbi, init_pos); } /* * Common case - initialize line buffer iterator * for stored data. */ inline void init_lbi_ddesc(LineBufferIter *lbi, DataDesc *desc, int init_pos) { init_lbi(lbi, &desc->rows, desc->order_map, desc->order_map_items, init_pos); } /* * Set iterator to absolute position in line buffer */ bool lbi_set_lineno(LineBufferIter *lbi, int pos) { lbi->lineno = pos; if (lbi->order_map) { if (lbi->order_map_items > pos) { MappedLine *mpl = &lbi->order_map[pos]; lbi->current_lb = mpl->lnb; lbi->current_lb_rowno = mpl->lnb_row; return true; } /* set max lineno */ lbi->lineno = lbi->order_map_items; } else { int lineno_offset = 0; lbi->current_lb = lbi->start_lb; while (lbi->current_lb && pos >= LINEBUFFER_LINES) { pos -= LINEBUFFER_LINES; lineno_offset += lbi->current_lb->nrows; lbi->current_lb = lbi->current_lb->next; } if (lbi->current_lb) { if (pos < lbi->current_lb->nrows) { lbi->current_lb_rowno = pos; return true; } else lbi->lineno = lineno_offset + lbi->current_lb->nrows; } else lbi->lineno = lineno_offset; } lbi->current_lb = NULL; lbi->current_lb_rowno = 0; return false; } /* * Initialize line buffer mark to current position in * line buffer. */ inline void lbi_set_mark(LineBufferIter *lbi, LineBufferMark *lbm) { lbm->lb = lbi->current_lb; lbm->lb_rowno = lbi->current_lb_rowno; lbm->lineno = lbi->lineno; } /* * Initialize line buffer mark to current position in line * buffer. Increase current position in line buffer. Returns * true if line buffer mark is valid. */ bool lbi_set_mark_next(LineBufferIter *lbi, LineBufferMark *lbm) { lbi_set_mark(lbi, lbm); (void) lbi_next(lbi); return lbm->lb && lbm->lb_rowno < lbm->lb->nrows; } /* * Sets mark to line buffer specified by position. When false, * when position is not valid. */ bool ddesc_set_mark(LineBufferMark *lbm, DataDesc *desc, int pos) { lbm->lb = NULL; lbm->lineno = pos; if (desc->order_map) { if (pos >= 0 && pos < desc->order_map_items) { lbm->lb = desc->order_map[pos].lnb; lbm->lb_rowno = desc->order_map[pos].lnb_row; lbm->lineno = pos; return true; } } else { LineBuffer *lb = &desc->rows; while (lb && pos >= LINEBUFFER_LINES) { lb = lb->next; pos -= LINEBUFFER_LINES; } if (lb && pos < lb->nrows) { lbm->lb = lb; lbm->lb_rowno = pos; return true; } } return false; } void lbm_xor_mask(LineBufferMark *lbm, char mask) { if (!lbm->lb->lineinfo) { int i; /* smalloc returns zero fill memory already */ lbm->lb->lineinfo = smalloc(LINEBUFFER_LINES * sizeof(LineInfo)); for (i = 0; i < LINEBUFFER_LINES; i++) lbm->lb->lineinfo[i].recno_offset = SHRT_MIN; } lbm->lb->lineinfo[lbm->lb_rowno].mask ^= mask; } void lbm_recno_offset(LineBufferMark *lbm, short int recno_offset) { if (!lbm->lb->lineinfo) { int i; /* smalloc returns zero fill memory already */ lbm->lb->lineinfo = smalloc(LINEBUFFER_LINES * sizeof(LineInfo)); for (i = 0; i < LINEBUFFER_LINES; i++) lbm->lb->lineinfo[i].recno_offset = SHRT_MIN; } lbm->lb->lineinfo[lbm->lb_rowno].recno_offset = recno_offset; } /* * Working horse of lbm_get_line and lbi_get_line routines */ static bool lb_get_line(LineBuffer *lb, int rowno, int lineno, char **line, LineInfo **linfo, int *linenoptr) { if (linenoptr) *linenoptr = lineno; if (lb && rowno >= 0 && rowno < lb->nrows) { if (line) *line = lb->rows[rowno]; if (linfo) *linfo = lb->lineinfo ? &lb->lineinfo[rowno] : NULL; return true; } if (line) *line = NULL; if (linfo) *linfo = NULL; return false; } /* * Returns line related to line buffer mark */ bool lbm_get_line(LineBufferMark *lbm, char **line, LineInfo **linfo, int *lineno) { return lb_get_line(lbm->lb, lbm->lb_rowno, lbm->lineno, line, linfo, lineno); } /* * Returns true, when returns valid line from line buffer. */ inline bool lbi_get_line(LineBufferIter *lbi, char **line, LineInfo **linfo, int *lineno) { return lb_get_line(lbi->current_lb, lbi->current_lb_rowno, lbi->lineno, line, linfo, lineno); } /* * Returns true, when returns valid line from line buffer. * Increments position in linebuffer. */ inline bool lbi_get_line_next(LineBufferIter *lbi, char **line, LineInfo **linfo, int *lineno) { bool result; result = lbi_get_line(lbi, line, linfo, lineno); (void) lbi_next(lbi); return result; } /* * Returns true, when returns valid line from line buffer. * Decreases position in linebuffer. */ inline bool lbi_get_line_prev(LineBufferIter *lbi, char **line, LineInfo **linfo, int *lineno) { bool result; result = lbi_get_line(lbi, line, linfo, lineno); (void) lbi_prev(lbi); return result; } /* * Move to prev line in line buffer. Returns false, when there * is not valid line in buffer. */ bool lbi_prev(LineBufferIter *lbi) { if (lbi->order_map) { if (lbi->lineno > 0) { MappedLine *mpl; lbi->lineno -= 1; mpl = &lbi->order_map[lbi->lineno]; lbi->current_lb = mpl->lnb; lbi->current_lb_rowno = mpl->lnb_row; return true; } else lbi->lineno = -1; } else { if (lbi->current_lb) { lbi->lineno -= 1; lbi->current_lb_rowno -= 1; if (lbi->current_lb_rowno >= 0) return true; if (lbi->current_lb->prev) { lbi->current_lb = lbi->current_lb->prev; lbi->current_lb_rowno = LINEBUFFER_LINES - 1; return true; } } } lbi->current_lb = NULL; lbi->current_lb_rowno = 0; return false; } /* * Move on next line in line buffer. Returns false, when there * is not valid line in buffer. */ bool lbi_next(LineBufferIter *lbi) { if (lbi->order_map) { if (lbi->lineno + 1 < lbi->order_map_items) { MappedLine *mpl; lbi->lineno += 1; mpl = &lbi->order_map[lbi->lineno]; lbi->current_lb = mpl->lnb; lbi->current_lb_rowno = mpl->lnb_row; return true; } else lbi->lineno = lbi->order_map_items; } else { if (lbi->current_lb) { /* * Previous row must be valid, so we can increase * lineno without creating gap after last line lineno. */ lbi->lineno += 1; lbi->current_lb_rowno += 1; if (lbi->current_lb_rowno < lbi->current_lb->nrows) return true; if (lbi->current_lb->next) { lbi->current_lb = lbi->current_lb->next; lbi->current_lb_rowno = 0; return true; } } } lbi->current_lb = NULL; lbi->current_lb_rowno = 0; return false; } /* * Simple line buffer iterator allows just only forward * scan. */ SimpleLineBufferIter * init_slbi_ddesc(SimpleLineBufferIter *slbi, DataDesc *desc) { slbi->lb = &desc->rows; slbi->lb_rowno = 0; if (slbi->lb->nrows > 0) return slbi; else return NULL; } SimpleLineBufferIter * slbi_get_line_next(SimpleLineBufferIter *slbi, char **line, LineInfo **linfo) { if (slbi) { LineBuffer *lb = slbi->lb; /* * one line should be available every time. The possibility * is checked before */ if (linfo) *linfo = lb->lineinfo ? &lb->lineinfo[slbi->lb_rowno] : NULL; if (line) *line = lb->rows[slbi->lb_rowno]; slbi->lb_rowno += 1; /* check an possibility of next read */ if (slbi->lb_rowno < lb->nrows) return slbi; if (lb->next) { slbi->lb = lb->next; slbi->lb_rowno = 0; /* should not be possible */ if (slbi->lb->nrows == 0) return NULL; } else return NULL; } else *line = NULL; return slbi; } /* * Free all lines stored in line buffer. An argument is data desc, * because first chunk of line buffer is owned by data desc. */ void lb_free(DataDesc *desc) { LineBuffer *lb = &desc->rows; LineBuffer *next; int i; while (lb) { for (i = 0; i < lb->nrows; i++) free(lb->rows[i]); free(lb->lineinfo); next = lb->next; if (lb != &desc->rows) free(lb); lb = next; } } /* * Print all lines to stream */ void lb_print_all_ddesc(DataDesc *desc, FILE *f) { SimpleLineBufferIter slbi, *_slbi; _slbi = init_slbi_ddesc(&slbi, desc); while (_slbi) { char *line; int res; _slbi = slbi_get_line_next(_slbi, &line, NULL); res = fprintf(f, "%s\n", line); if (res < 0) break; } } const char * getline_ddesc(DataDesc *desc, int pos) { LineBufferIter lbi; char *result; init_lbi_ddesc(&lbi, desc, pos); if (lbi_get_line(&lbi, &result, NULL, NULL)) return result; return NULL; } pspg-5.8.1/src/menu.c000066400000000000000000000416531452457446400144250ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * menu.c * holds menu related code * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/menu.c * *------------------------------------------------------------------------- */ #include #include "pspg.h" #include "st_menu.h" #include "commands.h" #define MENU_ITEM_THEME 10 #define MENU_ITEM_OPTIONS 11 #define MENU_ITEM_COPY 12 ST_CMDBAR_ITEM _bottombar[] = { {"Save", false, 2, cmd_SaveData, 0}, {"Mark", false, 3, cmd_Mark, 0}, {"Search", false, 7, cmd_ForwardSearch, 0}, {"Menu", false, 9, cmd_ShowMenu, 0}, {"Quit", false, 10, cmd_Quit, 0}, {NULL, false, 0, 0, 0} }; ST_CMDBAR_ITEM _bottombar_alt1[] = { {"Save", false, 2, cmd_SaveData, 0}, {"Quit", false, 3, cmd_Quit, 0}, {"Copy", false, 5, 0, 0}, {"Search", false, 7, cmd_ForwardSearch, 0}, {"Menu", false, 9, cmd_ShowMenu, 0}, {"Quit", false, 10, cmd_Quit, 0}, {NULL, false, 0, 0, 0} }; ST_MENU_ITEM _copy[] = { {"~C~opy", cmd_Copy, "Ins", 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"Copy ~l~ine", cmd_CopyLine, NULL, 0, 0, 0, NULL}, {"Copy line e~x~tended", cmd_CopyLineExtended, NULL, 0, 0, 0, NULL}, {"Copy col~u~mn", cmd_CopyColumn, NULL, 0, 0, 0, NULL}, {"Copy ~s~elected", cmd_CopySelected, NULL, 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"Copy ~a~ll", cmd_CopyAllLines, NULL, 0, 0, 0, NULL}, {"Copy ~t~op lines", cmd_CopyTopLines, NULL, 0, 0, 0, NULL}, {"Copy ~b~ottom lines", cmd_CopyBottomLines, NULL, 0, 0, 0, NULL}, {"Copy book~m~arked lines", cmd_CopyMarkedLines, NULL, 0, 0, 0, NULL}, {"Copy sea~r~ched lines", cmd_CopySearchedLines, NULL, 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"Copy to ~f~ile", cmd_SetCopyFile, NULL, 0, 0, 0, NULL}, {"Copy to cli~p~board", cmd_SetCopyClipboard, NULL, 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"Empty string is NULL", cmd_TogleEmptyStringIsNULL, NULL, 0, 0, 0, NULL}, {"Set own ~N~ULL string", cmd_SetOwnNULLString, NULL, 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"_0_Use CSV format", cmd_UseClipboard_CSV, NULL, 0, 0, 0, NULL}, {"_1_Use LibreOffice TSVC format", cmd_UseClipboard_TSVC, NULL, 0, 0, 0, NULL}, {"_2_Use formatted text", cmd_UseClipboard_text, NULL, 0, 0, 0, NULL}, {"_3_Use INSERT format", cmd_UseClipboard_INSERT, NULL, 0, 0, 0, NULL}, {"_4_Use commented INSERT format", cmd_UseClipboard_INSERT_with_comments, NULL, 0, 0, 0, NULL}, {"_5_Use SQL Values format", cmd_UseClipboard_SQL_values, NULL, 0, 0, 0, NULL}, {"_6_Use pipe separated text", cmd_UseClipboard_pipe_separated, NULL, 0, 0, 0, NULL}, {NULL, 0, NULL, 0, 0, 0, NULL} }; ST_MENU_ITEM _file[] = { {"~C~opy to", 0, NULL, 0, 0, 0, _copy}, {"--", 0, NULL, 0, 0, 0, NULL}, {"~S~ave", cmd_SaveData, "s", 0, 0, 0, NULL}, {"Sa~v~e as CSV", cmd_SaveAsCSV, NULL, 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"~R~aw output quit", cmd_RawOutputQuit, "M-q", 0, 0, 0, NULL}, {"E~x~it", cmd_Quit, "q, F10", 0, 0, 0, NULL}, {NULL, 0, NULL, 0, 0, 0, NULL} }; /* * This content must be permanent for all menu life cycle. State variable * menu references on this content. */ ST_MENU_ITEM _search[] = { {"~S~earch", cmd_ForwardSearch, "/", 0, 0, 0, NULL}, {"Search ~b~ackward", cmd_BackwardSearch, "?", 0, 0, 0, NULL}, {"Search ~a~gain", cmd_SearchNext, "n", 0, 0, 0, NULL}, {"Search p~r~evious", cmd_SearchPrev, "N", 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"Search in selection", cmd_ForwardSearchInSelection, "M-/", 0, 0, 0, NULL}, {"Search back in selection", cmd_BackwardSearchInSelection, "M-?", 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"Search ~c~olumn", cmd_SearchColumn, "c", 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"~T~oggle bookmark", cmd_ToggleBookmark, "M-k", 0, 0, 0, NULL}, {"~P~rev bookmark", cmd_PrevBookmark, "M-i", 0, 0, 0, NULL}, {"~N~ext bookmark", cmd_NextBookmark, "M-j", 0, 0, 0, NULL}, {"~F~lush bookmarks", cmd_FlushBookmarks, "M-o", 0, 0, 0, NULL}, {NULL, 0, NULL, 0, 0, 0, NULL} }; ST_MENU_ITEM _command[] = { {"_0_Release fixed columns", cmd_ReleaseCols, "0", 0, 0, 0, NULL}, {"_1_Freeze one column", cmd_FreezeOneCol, "1", 0, 0, 0, NULL}, {"_2_Freeze two columns", cmd_FreezeTwoCols, "2", 0, 0, 0, NULL}, {"_3_Freeze three columns", cmd_FreezeThreeCols, "3", 0, 0, 0, NULL}, {"_4_Freeze four columns", cmd_FreezeFourCols, "4", 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"~P~rev row", cmd_CursorUp, "k, Key up", 0, 0, 0, NULL}, {"~N~ext row", cmd_CursorDown, "j, Key down", 0, 0, 0, NULL}, {"Move to l~e~ft", cmd_MoveLeft, "h, Key left", 0, 0, 0, NULL}, {"Move to ~r~ight", cmd_MoveRight, "l, Key right", 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"Go to ~f~irst row", cmd_CursorFirstRow, "g, C-Home", 0, 0, 0, NULL}, {"Go to l~a~st row", cmd_CursorLastRow, "G, C-End", 0, 0, 0, NULL}, {"Go to ~l~ine", cmd_GotoLine, "M-l", 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"~S~how first column", cmd_ShowFirstCol, "^, Home", 0, 0, 0, NULL}, {"Sho~w~ last column", cmd_ShowLastCol, "$, End", 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"Page up", cmd_PageUp, "C-b, Prev page", 0, 0, 0, NULL}, {"Page down", cmd_PageDown, "C-f, space, Next page", 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"As~c~ending order", cmd_SortAsc, "a", 0, 0, 0, NULL}, {"~D~escending order", cmd_SortDesc, "d", 0, 0, 0, NULL}, {"~O~riginal order", cmd_OriginalSort, "u", 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"To~g~gle mark", cmd_Mark, "F3", 0, 0, 0, NULL}, {"~M~ark column", cmd_MarkColumn, "F13", 0, 0, 0, NULL}, {"Mark all", cmd_MarkAll, "%, C-a", 0, 0, 0, NULL}, {"Unmar~k~", cmd_Unmark, NULL, 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"Refres~h~ screen", cmd_Refresh, "R, C-l", 0, 0, 0, NULL}, {"Show primar~y~ screen", cmd_ShowPrimaryScreen, "C-o", 0, 0, 0, NULL}, {NULL, 0, NULL, 0, 0, 0, NULL} }; ST_MENU_ITEM _theme[] = { {"_0_Midnight black", cmd_SetTheme_MidnightBlack, NULL, 0, 0, 0, NULL}, {"_1_Midnight theme", cmd_SetTheme_Midnight, NULL, 0, 0, 0, NULL}, {"_2_FoxPro like", cmd_SetTheme_Foxpro, NULL, 0, 0, 0, NULL}, {"_3_Pdmenu like", cmd_SetTheme_Pdmenu, NULL, 0, 0, 0, NULL}, {"_4_White theme", cmd_SetTheme_White, NULL, 0, 0, 0, NULL}, {"_5_Mutt theme", cmd_SetTheme_Mutt, NULL, 0, 0, 0, NULL}, {"_6_PC Fand like", cmd_SetTheme_Pcfand, NULL, 0, 0, 0, NULL}, {"_7_Green theme", cmd_SetTheme_Green, NULL, 0, 0, 0, NULL}, {"_8_Blue theme", cmd_SetTheme_Blue, NULL, 0, 0, 0, NULL}, {"_9_Word perfect theme", cmd_SetTheme_WP, NULL, 0, 0, 0, NULL}, {"_l_Low contrast blue theme", cmd_SetTheme_Lowcontrast, NULL, 0, 0, 0, NULL}, {"_c_Dark cyan theme", cmd_SetTheme_Darkcyan, NULL, 0, 0, 0, NULL}, {"_p_Paradox like", cmd_SetTheme_Paradox, NULL, 0, 0, 0, NULL}, {"_d_DbaseIV retro", cmd_SetTheme_DBase, NULL, 0, 0, 0, NULL}, {"_e_DbaseIV retro (Magenta)", cmd_SetTheme_DBasemagenta, NULL, 0, 0, 0, NULL}, {"_r_Red white theme", cmd_SetTheme_Red, NULL, 0, 0, 0, NULL}, {"_s_Simple theme", cmd_SetTheme_Simple, NULL, 0, 0, 0, NULL}, {"_o_Solar Dark theme", cmd_SetTheme_SolarDark, NULL, 0, 0, 0, NULL}, {"_g_Solar Light theme", cmd_SetTheme_SolarLight, NULL, 0, 0, 0, NULL}, {"_u_Gruvbox Light theme", cmd_SetTheme_GruvboxLight, NULL, 0, 0, 0, NULL}, {"_t_Tao Light theme", cmd_SetTheme_TaoLight, NULL, 0, 0, 0, NULL}, {"_f_Flatwhite theme", cmd_SetTheme_Flatwhite, NULL, 0, 0, 0, NULL}, {"_a_Relational Pipes theme", cmd_SetTheme_RelationalPipes, NULL, 0, 0, 0, NULL}, {"_h_PaperColor theme", cmd_SetTheme_PaperColor, NULL, 0, 0, 0, NULL}, {NULL}, }; ST_MENU_ITEM _options[] = { {"~C~ase sensitive search", cmd_CSSearchSet, NULL, 0, 0, 0, NULL}, {"Case ~i~nsensitive search", cmd_CISearchSet, NULL, 0, 0, 0, NULL}, {"~U~pper case sensitive search", cmd_USSearchSet, NULL, 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"Highlight searched ~l~ines", cmd_HighlightLines, NULL, 0, 0, 0, NULL}, {"Highlight searched ~v~alues", cmd_HighlightValues, NULL, 0, 0, 0, NULL}, {"~W~ithout highlighting", cmd_NoHighlight, NULL, 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"Show cursor", cmd_ShowCursor, "M-c", 0, 0, 0, NULL}, {"Show vertical cursor", cmd_ShowVerticalCursor, "M-v", 0, 0, 0, NULL}, {"Show line ~n~umbers", cmd_RowNumToggle, "M-n", 0, 0, 0, NULL}, {"Show top bar", cmd_ShowTopBar, NULL, 0, 0, 0, NULL}, {"Show bottom bar", cmd_ShowBottomBar, NULL, 0, 0, 0, NULL}, {"Show scrollbar", cmd_ShowScrollbar, NULL, 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"~M~ouse support", cmd_MouseToggle, "M-m", 0, 0, 0, NULL}, {"~Q~uiet mode", cmd_SoundToggle, NULL, 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"Force unicode ~b~orders", cmd_UtfArtToggle, NULL, 0, 0, 0, NULL}, {"Force ~a~scii menu", cmd_MenuAsciiArtToggle, NULL, 0, 0, 0, NULL}, {"Bold labels", cmd_BoldLabelsToggle, "M-b", 0, 0, 0, NULL}, {"Bold cursor", cmd_BoldCursorToggle, NULL, 0, 0, 0, NULL}, {"Hide header line", cmd_ToggleHideHeaderLine, NULL, 0, 0, 0, NULL}, {"Highlight odd records", cmd_ToggleHighlightOddRec, NULL, 0, 0, 0, NULL}, {"~T~heme", MENU_ITEM_THEME, NULL, 0, 0, 0, _theme}, {"S~e~t custom theme", cmd_SetCustomTheme, NULL, 0, 0, 0, NULL}, {"--", 0, NULL, 0, 0, 0, NULL}, {"~S~ave setup", cmd_SaveSetup, NULL, 0, 0, 0, NULL}, {NULL}, }; ST_MENU_ITEM menubar[] = { {"~F~ile", 0, NULL, 0, 0, 0, _file}, {"~S~earch", 0, NULL, 0, 0, 0, _search}, {"~C~ommand", 0, NULL, 0, 0, 0, _command}, {"~O~ptions", MENU_ITEM_OPTIONS, NULL, 0, 0, 0, _options}, {NULL} }; ST_MENU_CONFIG menu_config; ST_MENU_CONFIG menu_config2; int menu_theme = -1; /* * Returns menu style joined to main theme */ static int get_menu_style(int main_theme) { if (current_state && current_state->menu_template >= 0) { log_row("use custom menu template %d", current_state->menu_template); return current_state->menu_template; } switch (main_theme) { case 0: return ST_MENU_STYLE_MCB; case 1: return ST_MENU_STYLE_MC; case 2: return ST_MENU_STYLE_FOXPRO; case 3: return ST_MENU_STYLE_DOS; case 4: return ST_MENU_STYLE_FAND_1; case 5: return ST_MENU_STYLE_NOCOLOR; case 6: return ST_MENU_STYLE_FAND_1; case 7: return ST_MENU_STYLE_ONECOLOR; case 8: return ST_MENU_STYLE_DOS; case 9: return ST_MENU_STYLE_PERFECT; case 10: return ST_MENU_STYLE_XGOLD_BLACK; case 11: return ST_MENU_STYLE_OLD_TURBO; case 12: return ST_MENU_STYLE_VISION; case 13: return ST_MENU_STYLE_DBASE; case 14: return ST_MENU_STYLE_OLD_TURBO; case 15: return ST_MENU_STYLE_PERFECT; case 16: return ST_MENU_STYLE_ONECOLOR; case 20: return ST_MENU_STYLE_TAO; case 21: return ST_MENU_STYLE_FLATWHITE; case 22: return ST_MENU_STYLE_DBASE; case 23: return ST_MENU_STYLE_PERFECT; default: return ST_MENU_STYLE_VISION; } } /* * Prepare configuration for st_menu */ void init_menu_config(Options *opts) { int start_from_rgb = 190; menu_theme = get_menu_style(opts->theme); if (menu_theme == ST_MENU_STYLE_FREE_DOS) { int fcp; fcp = st_menu_load_style(&menu_config, menu_theme, 30, !use_utf8, opts->force_ascii_art); st_menu_load_style(&menu_config2, ST_MENU_STYLE_FREE_DOS_P, fcp, !use_utf8, opts->force_ascii_art); } else st_menu_load_style_rgb(&menu_config, menu_theme, menu_theme == ST_MENU_STYLE_ONECOLOR ? 1 : 50, &start_from_rgb, !use_utf8, opts->force_ascii_art); /* extra pspg menu theme customization */ if (opts->theme == 1) menu_config.shadow_width = 2; else if (opts->theme == 4) menu_config.text_space = 4; st_menu_set_direct_color(opts->direct_color); } /* * Prepare configuration and initialize menu */ struct ST_MENU * init_menu(struct ST_MENU *current_menu, Options *opts) { struct ST_MENU *menu = NULL; if (menu_theme == ST_MENU_STYLE_FREE_DOS) menu = st_menu_new_menubar2(&menu_config, &menu_config2, menubar); else menu = st_menu_new_menubar(&menu_config, menubar); if (current_menu) { int positions[1024]; int *refvals[1024]; /* Save state of old menu, and load it to new menu */ st_menu_save(current_menu, positions, refvals, 1023); st_menu_load(menu, positions, refvals); st_menu_free(current_menu); log_row("releasing menu"); } if (opts->quit_on_f3) st_menu_set_shortcut(menu, cmd_Mark, NULL); return menu; } struct ST_CMDBAR * init_cmdbar(struct ST_CMDBAR *current_cmdbar, Options *opts) { struct ST_CMDBAR *cmdbar = NULL; if (opts->quit_on_f3) cmdbar = st_cmdbar_new(&menu_config, _bottombar_alt1); else cmdbar = st_cmdbar_new(&menu_config, _bottombar); /* * It looks obscure - it uses same pattern like init_menu * although the cmdbar has not state, so old cmdbar can * be released fully before creating new cmdbar. */ if (current_cmdbar) { st_cmdbar_unpost(current_cmdbar); st_cmdbar_free(current_cmdbar); log_row("releasing cmd bar"); } return cmdbar; } void post_menu(Options *opts, struct ST_MENU *menu) { st_menu_set_option(menu, cmd_ReleaseCols, ST_MENU_OPTION_MARKED, opts->freezed_cols == 0); st_menu_set_option(menu, cmd_FreezeOneCol, ST_MENU_OPTION_MARKED, (opts->freezed_cols == 1 || opts->freezed_cols == -1)); st_menu_set_option(menu, cmd_FreezeTwoCols, ST_MENU_OPTION_MARKED, opts->freezed_cols == 2); st_menu_set_option(menu, cmd_FreezeThreeCols, ST_MENU_OPTION_MARKED, opts->freezed_cols == 3); st_menu_set_option(menu, cmd_FreezeFourCols, ST_MENU_OPTION_MARKED, opts->freezed_cols == 4); st_menu_set_option(menu, cmd_SoundToggle, ST_MENU_OPTION_MARKED, quiet_mode); st_menu_set_option(menu, cmd_UtfArtToggle, ST_MENU_OPTION_MARKED, opts->force_uniborder); st_menu_set_option(menu, cmd_MenuAsciiArtToggle, ST_MENU_OPTION_MARKED, opts->force_ascii_art); st_menu_set_option(menu, cmd_MouseToggle, ST_MENU_OPTION_MARKED, !opts->no_mouse); st_menu_set_option(menu, cmd_NoHighlight, ST_MENU_OPTION_MARKED, opts->no_highlight_search); st_menu_set_option(menu, cmd_HighlightValues, ST_MENU_OPTION_MARKED, opts->no_highlight_lines); st_menu_set_option(menu, cmd_HighlightLines, ST_MENU_OPTION_MARKED, !(opts->no_highlight_search || opts->no_highlight_lines)); st_menu_set_option(menu, cmd_CSSearchSet, ST_MENU_OPTION_MARKED, !(opts->ignore_case || opts->ignore_lower_case)); st_menu_set_option(menu, cmd_CISearchSet, ST_MENU_OPTION_MARKED, opts->ignore_case); st_menu_set_option(menu, cmd_USSearchSet, ST_MENU_OPTION_MARKED, opts->ignore_lower_case); st_menu_set_option(menu, cmd_ShowTopBar, ST_MENU_OPTION_MARKED, !opts->no_topbar); st_menu_set_option(menu, cmd_ShowBottomBar, ST_MENU_OPTION_MARKED, !opts->no_commandbar); st_menu_set_option(menu, cmd_RowNumToggle, ST_MENU_OPTION_MARKED, opts->show_rownum); st_menu_set_option(menu, cmd_ShowCursor, ST_MENU_OPTION_MARKED, !opts->no_cursor); st_menu_set_option(menu, cmd_ShowVerticalCursor, ST_MENU_OPTION_MARKED, opts->vertical_cursor); st_menu_set_option(menu, cmd_BoldLabelsToggle, ST_MENU_OPTION_MARKED, opts->bold_labels); st_menu_set_option(menu, cmd_BoldCursorToggle, ST_MENU_OPTION_MARKED, opts->bold_cursor); st_menu_set_option(menu, cmd_ShowScrollbar, ST_MENU_OPTION_MARKED, opts->show_scrollbar); st_menu_reset_all_submenu_options(menu, MENU_ITEM_THEME, ST_MENU_OPTION_MARKED); st_menu_enable_option(menu, theme_get_cmd(opts->theme), ST_MENU_OPTION_MARKED); refresh_copy_target_options(opts, menu); refresh_clipboard_options(opts, menu); st_menu_set_option(menu, cmd_TogleEmptyStringIsNULL, ST_MENU_OPTION_MARKED, opts->empty_string_is_null); st_menu_set_option(menu, cmd_SetOwnNULLString, ST_MENU_OPTION_MARKED, !opts->empty_string_is_null && opts->nullstr && *opts->nullstr); st_menu_set_option(menu, cmd_ToggleHighlightOddRec, ST_MENU_OPTION_MARKED, opts->highlight_odd_rec); st_menu_set_option(menu, cmd_ToggleHideHeaderLine, ST_MENU_OPTION_MARKED, opts->hide_header_line); } void refresh_clipboard_options(Options *opts, struct ST_MENU *menu) { st_menu_set_option(menu, cmd_UseClipboard_CSV, ST_MENU_OPTION_MARKED, opts->clipboard_format == CLIPBOARD_FORMAT_CSV); st_menu_set_option(menu, cmd_UseClipboard_TSVC, ST_MENU_OPTION_MARKED, opts->clipboard_format == CLIPBOARD_FORMAT_TSVC); st_menu_set_option(menu, cmd_UseClipboard_text, ST_MENU_OPTION_MARKED, opts->clipboard_format == CLIPBOARD_FORMAT_TEXT); st_menu_set_option(menu, cmd_UseClipboard_INSERT, ST_MENU_OPTION_MARKED, opts->clipboard_format == CLIPBOARD_FORMAT_INSERT); st_menu_set_option(menu, cmd_UseClipboard_INSERT_with_comments, ST_MENU_OPTION_MARKED, opts->clipboard_format == CLIPBOARD_FORMAT_INSERT_WITH_COMMENTS); st_menu_set_option(menu, cmd_UseClipboard_SQL_values, ST_MENU_OPTION_MARKED, opts->clipboard_format == CLIPBOARD_FORMAT_SQL_VALUES); st_menu_set_option(menu, cmd_UseClipboard_pipe_separated, ST_MENU_OPTION_MARKED, opts->clipboard_format == CLIPBOARD_FORMAT_PIPE_SEPARATED); } void refresh_copy_target_options(Options *opts, struct ST_MENU *menu) { st_menu_set_option(menu, cmd_SetCopyFile, ST_MENU_OPTION_MARKED, opts->copy_target == COPY_TARGET_FILE); st_menu_set_option(menu, cmd_SetCopyClipboard, ST_MENU_OPTION_MARKED, opts->copy_target == COPY_TARGET_CLIPBOARD); } pspg-5.8.1/src/pgclient.c000066400000000000000000000200121452457446400152500ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * pgcliend.c * execute query and format result * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/pgclient.c * *------------------------------------------------------------------------- */ #include #include #include #include #include "pspg.h" #include "unicode.h" #ifdef HAVE_POSTGRESQL #include char errmsg[1024]; static RowBucketType * push_row(RowBucketType *rb, RowType *row, bool is_multiline) { if (rb->nrows >= 1000) { RowBucketType *new = malloc(sizeof(RowBucketType)); if (!new) return NULL; new->nrows = 0; new->allocated = true; new->next_bucket = NULL; rb->next_bucket = new; rb = new; } rb->rows[rb->nrows] = row; rb->multilines[rb->nrows++] = is_multiline; return rb; } /* * Correct solution is importing header file catalog/pg_type_d.h, * but this file is not in basic libpq headers, so instead enhancing * dependency just copy these values that should be immutable. */ #define INT8OID 20 #define INT2OID 21 #define INT4OID 23 #define FLOAT4OID 700 #define FLOAT8OID 701 #define XIDOID 28 #define CIDOID 29 #define CASHOID 790 #define NUMERICOID 1700 #define OIDOID 26 static char column_type_class(Oid ftype) { char align; switch (ftype) { case INT2OID: case INT4OID: case INT8OID: case FLOAT4OID: case FLOAT8OID: case NUMERICOID: case OIDOID: case XIDOID: case CIDOID: case CASHOID: align = 'd'; break; default: align = 'a'; break; } return align; } #endif #define EXIT_OUT_OF_MEMORY() do { PQclear(result); PQfinish(conn); leave("out of memory"); } while (0) #define RELEASE_AND_LEAVE(s) do { PQclear(result); PQfinish(conn); *err = s; return false; } while (0) #define RELEASE_AND_EXIT(s) do { PQclear(result); PQfinish(conn); leave(s); } while (0) #ifdef HAVE_POSTGRESQL static int field_info(char *str, bool *multiline) { long int digits; long int others; if (!use_utf8) { int cw = 0; int width = 0; while (*str) { if (*str++ == '\n') { *multiline = true; width = cw > width ? cw : width; cw = 0; } else cw++; } return cw > width ? cw : width; } else return utf_string_dsplen_multiline(str, strlen(str), multiline, false, &digits, &others, 0); } /* * Returns true, when some column should be hidden. */ static int mark_hidden_columns(PGresult *result, int nfields, Options *opts, bool *hidden) { char *names; char *endnames; char *ptr; int i; int visible_columns = 0; for (i = 0; i < nfields; i++) hidden[i] = false; if (!opts->csv_skip_columns_like) return nfields; /* prepare list of hidden columns */ names = sstrdup(opts->csv_skip_columns_like); endnames = names + strlen(names); ptr = names; while (*ptr) { /* space is separator between words */ if (*ptr == ' ') *ptr = '\0'; ptr += 1; } for (i = 0; i < nfields; i++) { char *fieldname = PQfname(result, i); ptr = names; while (ptr < endnames) { if (*ptr) { size_t len = strlen(ptr); if (*ptr == '^') { if (strncmp(fieldname, ptr + 1, len - 1) == 0) hidden[i] = true; } else if (ptr[len - 1] == '$') { size_t len2 = strlen(fieldname); if (len2 > (len - 1) && strncmp(fieldname + len2 - len + 1, ptr, len - 1) == 0) hidden[i] = true; } else if (strstr(fieldname, ptr)) hidden[i] = true; } ptr += strlen(ptr) + 1; } if (!hidden[i]) visible_columns += 1; } free(names); return visible_columns; } #endif /* * exit on fatal error, or return error */ bool pg_exec_query(Options *opts, char *query, RowBucketType *rb, PrintDataDesc *pdesc, const char **err) { log_row("execute query \"%s\"", query); #ifdef HAVE_POSTGRESQL PGconn *conn = NULL; PGresult *result = NULL; int nfields; int size; int i, j; int n; char *locbuf; RowType *row; bool multiline_row; bool multiline_col; char *password; const char *keywords[8]; const char *values[8]; bool *hidden; rb->nrows = 0; rb->next_bucket = NULL; if (opts->force_password_prompt && !opts->password) { password = getpass("Password: "); opts->password = strdup(password); if (!opts->password) EXIT_OUT_OF_MEMORY(); } keywords[0] = "host"; values[0] = opts->host; keywords[1] = "port"; values[1] = opts->port; keywords[2] = "user"; values[2] = opts->username; keywords[3] = "password"; values[3] = opts->password; keywords[4] = "dbname"; values[4] = opts->dbname; keywords[5] = "fallback_application_name"; values[5] = "pspg"; keywords[6] = "client_encoding"; values[6] = getenv("PGCLIENTENCODING") ? NULL : "auto"; keywords[7] = NULL; values[7] = NULL; conn = PQconnectdbParams(keywords, values, true); if (PQstatus(conn) == CONNECTION_BAD && PQconnectionNeedsPassword(conn) && !opts->password) { password = getpass("Password: "); opts->password = strdup(password); if (!opts->password) EXIT_OUT_OF_MEMORY(); keywords[3] = "password"; values[3] = opts->password; conn = PQconnectdbParams(keywords, values, true); } /* Check to see that the backend connection was successfully made */ if (PQstatus(conn) != CONNECTION_OK) { snprintf(errmsg, sizeof(errmsg), "Connection to database failed: %s", PQerrorMessage(conn)); RELEASE_AND_LEAVE(errmsg); } /* * ToDo: Because data are copied to local memory, the result can be fetched. * It can save 1/2 memory. */ result = PQexec(conn, query); if (PQresultStatus(result) != PGRES_TUPLES_OK) { snprintf(errmsg, sizeof(errmsg), "Query doesn't return data: %s", PQerrorMessage(conn)); RELEASE_AND_LEAVE(errmsg); } if ((nfields = PQnfields(result)) > 1024) RELEASE_AND_EXIT("too much columns"); hidden = smalloc(1024 * sizeof(bool)); pdesc->nfields = mark_hidden_columns(result, nfields, opts, hidden); pdesc->has_header = true; n = 0; for (i = 0; i < nfields; i++) if (!hidden[i]) pdesc->types[n++] = column_type_class(PQftype(result, i)); /* calculate necessary size of header data */ size = 0; for (i = 0; i < nfields; i++) if (!hidden[i]) size += strlen(PQfname(result, i)) + 1; locbuf = malloc(size); if (!locbuf) EXIT_OUT_OF_MEMORY(); /* store header */ row = malloc(offsetof(RowType, fields) + (pdesc->nfields * sizeof(char *))); if (!row) EXIT_OUT_OF_MEMORY(); row->nfields = nfields; multiline_row = false; n = 0; for (i = 0; i < nfields; i++) { char *name = PQfname(result, i); if (hidden[i]) continue; strcpy(locbuf, name); row->fields[n] = locbuf; locbuf += strlen(name) + 1; pdesc->widths[n] = field_info(row->fields[n], &multiline_col); pdesc->multilines[n++] = multiline_col; multiline_row |= multiline_col; } rb = push_row(rb, row, multiline_row); if (!rb) EXIT_OUT_OF_MEMORY(); /* calculate size for any row and store it */ for (i = 0; i < PQntuples(result); i++) { size = 0; for (j = 0; j < nfields; j++) if (!hidden[j]) size += strlen(PQgetvalue(result, i, j)) + 1; locbuf = malloc(size); if (!locbuf) EXIT_OUT_OF_MEMORY(); /* store data */ row = malloc(offsetof(RowType, fields) + (pdesc->nfields * sizeof(char *))); if (!row) EXIT_OUT_OF_MEMORY(); row->nfields = pdesc->nfields; multiline_row = false; n = 0; for (j = 0; j < nfields; j++) { char *value; if (hidden[j]) continue; value = PQgetvalue(result, i, j); strcpy(locbuf, value); row->fields[n] = locbuf; locbuf += strlen(value) + 1; pdesc->widths[n] = max_int(pdesc->widths[n], field_info(row->fields[n], &multiline_col)); pdesc->multilines[n] |= multiline_col; multiline_row |= multiline_col; pdesc->columns_map[n] = n; n += 1; } rb = push_row(rb, row, multiline_row); if (!rb) EXIT_OUT_OF_MEMORY(); } free(hidden); PQclear(result); PQfinish(conn); *err = NULL; return true; #else (void) rb; (void) pdesc; (void) opts; *err = "Query cannot be executed. The Postgres library was not available at compile time."; return false; #endif } pspg-5.8.1/src/pretty-csv.c000066400000000000000000001116631452457446400156000ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * pretty-csv.c * import and formatting csv and tsv documents * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/pretty-csv.c * *------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include "inputs.h" #include "pspg.h" #include "unicode.h" #ifndef offsetof #define offsetof(type, field) ((long) &((type *)0)->field) #endif /* offsetof */ typedef struct { char *buffer; int processed; int used; int size; int maxfields; int starts[1024]; /* start of first char of column (in bytes) */ int sizes[1024]; /* lenght of chars of column (in bytes) */ long int digits[1024]; /* number of digits, used for format detection */ long int tsizes[1024]; /* size of column in bytes, used for format detection */ int firstdigit[1024]; /* rows where first char is digit */ size_t widths[1024]; /* column's display width */ bool multilines[1024]; /* true if column has multiline row */ bool hidden[1024]; } LinebufType; typedef struct { char *buffer; int used; int size; int free; LineBuffer *linebuf; int flushed_rows; /* number of flushed rows */ int maxbytes; bool printed_headline; } PrintbufType; typedef struct { int border; char linestyle; bool double_header; char header_mode; bool ignore_short_rows; int trim_width; int trim_rows; } PrintConfigType; static void pb_putc_repeat(PrintbufType *printbuf, int n, int c); /* * Add new row to LineBuffer */ static void pb_flush_line(PrintbufType *printbuf) { char *line; if (printbuf->linebuf->nrows == LINEBUFFER_LINES) { LineBuffer *nb = smalloc2(sizeof(LineBuffer), "serialize csv output"); memset(nb, 0, sizeof(LineBuffer)); printbuf->linebuf->next = nb; nb->prev = printbuf->linebuf; printbuf->linebuf = nb; } line = smalloc2(printbuf->used + 1, "serialize csv output"); memcpy(line, printbuf->buffer, printbuf->used); line[printbuf->used] = '\0'; printbuf->linebuf->rows[printbuf->linebuf->nrows++] = line; if (printbuf->used > printbuf->maxbytes) printbuf->maxbytes = printbuf->used; printbuf->used = 0; printbuf->free = printbuf->size; printbuf->flushed_rows += 1; } static void pb_write(PrintbufType *printbuf, const char *str, int size) { int curr_dspl_width = 0; while (size) { int charsize, bytes; bool tabsubst = false; charsize = use_utf8 ? utf8charlen(*str) : 1; if (charsize == 1 && *str == '\t') { bytes = 0; tabsubst = true; do { curr_dspl_width++; bytes++; } while (curr_dspl_width % 8 != 0); } else if (use_utf8) { curr_dspl_width += utf_dsplen(str); bytes = charsize; } else { curr_dspl_width += *str >= 0x20 ? 1 : 0; bytes = charsize; } if (bytes > printbuf->free) { printbuf->size += 10 * 1024; printbuf->buffer = realloc(printbuf->buffer, printbuf->size); if (!printbuf->buffer) leave("out of memory while serialize csv output"); printbuf->free = printbuf->size - printbuf->used; } if (tabsubst) { pb_putc_repeat(printbuf, bytes, ' '); } else { memcpy(printbuf->buffer + printbuf->used, str, bytes); printbuf->used += bytes; printbuf->free -= bytes; } str += charsize; size -= charsize; } } static void pb_writes(PrintbufType *printbuf, const char *str) { pb_write(printbuf, str, strlen(str)); } static void pb_write_repeat(PrintbufType *printbuf, int n, const char *str, int size) { bool need_realloc = false; while (printbuf->free < (size * n)) { printbuf->size += 10 * 1024; printbuf->free = printbuf->size - printbuf->used; need_realloc = true; } if (need_realloc) { printbuf->buffer = realloc(printbuf->buffer, printbuf->size); printbuf->free = printbuf->size - printbuf->used; if (!printbuf->buffer) leave("out of memory while serialize csv output"); } while (n--) { memcpy(printbuf->buffer + printbuf->used, str, size); printbuf->used += size; printbuf->free -= size; } } static void pb_writes_repeat(PrintbufType *printbuf, int n, const char *str) { pb_write_repeat(printbuf, n, str, strlen(str)); } static void pb_putc(PrintbufType *printbuf, char c) { if (printbuf->free < 1) { printbuf->size += 10 * 1024; printbuf->free += 10 * 1024; printbuf->buffer = realloc(printbuf->buffer, printbuf->size); if (!printbuf->buffer) leave("out of memory while serialize csv output"); } printbuf->free -= 1; printbuf->buffer[printbuf->used++] = c; } static void pb_puts(PrintbufType *printbuf, char *str) { pb_write(printbuf, str, strlen(str)); } static void pb_putc_repeat(PrintbufType *printbuf, int n, int c) { bool need_realloc = false; while (printbuf->free < n) { printbuf->size += 10 * 1024; printbuf->free = printbuf->size - printbuf->used; need_realloc = true; } if (need_realloc) { printbuf->buffer = realloc(printbuf->buffer, printbuf->size); printbuf->free = printbuf->size - printbuf->used; if (!printbuf->buffer) leave("out of memory while serialize csv output"); } memset(printbuf->buffer + printbuf->used, c, n); printbuf->used += n; printbuf->free -= n; printbuf->free -= n; } static void pb_print_vertical_header(PrintbufType *printbuf, PrintDataDesc *pdesc, PrintConfigType *pconfig, char pos) { int border = pconfig->border; bool double_header = pconfig->double_header; char linestyle = pconfig->linestyle; const char *lhchr; /* left header char */ const char *mhchr; /* middle header char */ const char *rhchr; /* right header char */ const char *hhchr; /* horizont header char */ int i; /* leave fast when there is nothing to work */ if ((border == 0 || border == 1) && (pos != 'm')) return; if (linestyle == 'a') { if (pos == 'm' && double_header) { lhchr = ":"; mhchr = ":"; rhchr = ":"; hhchr = "="; } else { lhchr = "+"; mhchr = "+"; rhchr = "+"; hhchr = "-"; } } else { /* linestyle = 'u' */ if (pos == 'm') { if (double_header) { lhchr = "\342\225\236"; /* ╞ */ mhchr = "\342\225\252"; /* ╪ */ rhchr = "\342\225\241"; /* ╡ */ hhchr = "\342\225\220"; /* ═ */ } else { lhchr = "\342\224\234"; /* ├ */ mhchr = "\342\224\274"; /* ┼ */ rhchr = "\342\224\244"; /* ┤ */ hhchr = "\342\224\200"; /* ─ */ } } else if (pos == 't') { lhchr = "\342\224\214"; /* ┌ */ mhchr = "\342\224\254"; /* ┬ */ rhchr = "\342\224\220"; /* ┐ */ hhchr = "\342\224\200"; /* ─ */ } else { /* pos == 'b' */ lhchr = "\342\224\224"; /* └ */ mhchr = "\342\224\264"; /* ┴ */ rhchr = "\342\224\230"; /* ┘ */ hhchr = "\342\224\200"; /* ─ */ } } if (border == 2) { pb_writes(printbuf, lhchr); pb_writes(printbuf, hhchr); } else if (border == 1) { pb_writes(printbuf, hhchr); } for (i = 0; i < pdesc->nfields; i++) { if (i > 0) { if (border == 0) { pb_write(printbuf, " ", 1); } else { pb_writes(printbuf, hhchr); pb_writes(printbuf, mhchr); pb_writes(printbuf, hhchr); } } pb_writes_repeat(printbuf, pdesc->widths[i], hhchr); } if (border == 2) { pb_writes(printbuf, hhchr); pb_writes(printbuf, rhchr); } else if (border == 1) { pb_writes(printbuf, hhchr); } else if (border == 0 && pdesc->multilines[pdesc->nfields - 1]) { pb_write(printbuf, " ", 1); } pb_flush_line(printbuf); } /* * Header detection - simple heuristic, when first row has all text fields * and second rows has any numeric field, then csv has header. */ static bool is_header(RowBucketType *rb) { RowType *row; int i; if (rb->nrows < 2) return false; row = rb->rows[0]; for (i = 0; i < row->nfields; i++) { if (row->fields[i][0] == '\0') return false; if (isdigit((row->fields[i])[0])) return false; } row = rb->rows[1]; for (i = 0; i < row->nfields; i++) { if (row->fields[i][0] == '\0') return true; if (isdigit((row->fields[i])[0])) return true; } return false; } static char * pb_put_line(char *str, bool multiline, PrintbufType *printbuf) { char *nextline = NULL; if (multiline) { char *ptr = str; int size = 0; while (*ptr) { int chrl; if (*ptr == '\n') { nextline = ptr + 1; break; } chrl = charlen(ptr); size += chrl; ptr += chrl; } pb_write(printbuf, str, size); } else pb_write(printbuf, str, strlen(str)); return nextline; } static char * pb_put_line_trim_width(char *str, bool multiline, PrintbufType *printbuf, int width) { char *ptr = str; char *nextline = NULL; int str_width = 0; int str_size = 0; int charwidth; int charsize; while (*ptr) { if (*ptr == '\n') { nextline = ptr + 1; break; } else if (*ptr == '\t') { int aux_str_width = str_width; do { aux_str_width++; } while (aux_str_width % 8 != 0); charsize = 1; charwidth = aux_str_width - str_width; } else if (use_utf8) { charsize = charlen(ptr); charwidth = utf_dsplen(ptr); } else { charsize = 1; charwidth = 1; } if (str_width + charwidth <= width) { ptr += charsize; str_size += charsize; str_width += charwidth; } else break; } pb_write(printbuf, str, str_size); if (use_utf8) pb_write(printbuf, "\342\200\245", 3); /* ‥ */ while (str_width++ < width) pb_write(printbuf, " ", 1); if (multiline) { while (*ptr && *ptr != '\n') ptr += use_utf8 ? charlen(str) : 1; if (*ptr == '\n') nextline = ptr + 1; } return nextline; } /* * Print formatted data loaded inside RowBuckets */ static void pb_print_rowbuckets(PrintbufType *printbuf, RowBucketType *rb, PrintConfigType *pconfig, PrintDataDesc *pdesc, char *title) { bool is_last_column_multiline = pdesc->multilines[pdesc->nfields - 1]; int last_column_num = pdesc->nfields - 1; int printed_rows = 0; char linestyle = pconfig->linestyle; int border = pconfig->border; char buffer[20]; printbuf->printed_headline = false; printbuf->flushed_rows = 0; printbuf->maxbytes = 0; if (title) { pb_puts(printbuf, title); pb_flush_line(printbuf); } pb_print_vertical_header(printbuf, pdesc, pconfig, 't'); while (rb) { int i; for (i = 0; i < rb->nrows; i++) { int j; RowType *row; bool more_lines = true; bool multiline = rb->multilines[i]; char *fields[1024]; int multiline_lineno; /* skip broken rows */ if (pconfig->ignore_short_rows && rb->rows[i]->nfields != pdesc->nfields_all) continue; multiline_lineno = 1; row = rb->rows[i]; while (more_lines) { bool isheader = false; more_lines = false; if (border == 2) { if (linestyle == 'a') pb_write(printbuf, "| ", 2); else pb_write(printbuf, "\342\224\202 ", 4); } else if (border == 1) pb_write(printbuf, " ", 1); isheader = printed_rows == 0 ? pdesc->has_header : false; for (j = 0; j < pdesc->nfields; j++) { char *field; bool _more_lines = false; if (j > 0) { if (border != 0) { if (linestyle == 'a') pb_write(printbuf, "| ", 2); else pb_write(printbuf, "\342\224\202 ", 4); } } if (pdesc->columns_map[j] < row->nfields) { if (multiline_lineno == 1) { field = row->fields[pdesc->columns_map[j]]; fields[j] = NULL; } else field = fields[j]; } else field = NULL; if (field && *field != '\0') { int width; bool left_align = pdesc->types[j] != 'd'; if (!use_utf8) { char *ptr = field; width = 0; while (*ptr) { if (*ptr == '\n') { _more_lines = true; break; } else if (*ptr == '\t') { do { width++; } while (width % 8 != 0); ptr += 1; } else { if (*ptr >= 0x20) width++; ptr += 1; } } } else { if (multiline) width = utf_string_dsplen_multiline(field, INT_MAX, &_more_lines, true, NULL, NULL, 0); else width = utf_string_dsplen(field, INT_MAX); } if (multiline) { if (pconfig->trim_rows > 0 && multiline_lineno == pconfig->trim_rows) _more_lines = false; else more_lines |= _more_lines; } if (pconfig->trim_width > 0 && pconfig->trim_width < width) { if (multiline) fields[j] = pb_put_line_trim_width(field, multiline, printbuf, pconfig->trim_width); else (void) pb_put_line_trim_width(field, multiline, printbuf, pconfig->trim_width); } else { int spaces; spaces = pdesc->widths[j] - width; /* * The display width can be canculated badly when labels or * displayed string has some special or invisible chars. Here * is simple ugly fix - the number of spaces cannot be negative. */ if (spaces < 0) spaces = 0; /* left spaces */ if (isheader) pb_putc_repeat(printbuf, spaces / 2, ' '); else if (!left_align) pb_putc_repeat(printbuf, spaces, ' '); if (multiline) fields[j] = pb_put_line(field, multiline, printbuf); else (void) pb_put_line(field, multiline, printbuf); /* right spaces */ if (isheader) pb_putc_repeat(printbuf, spaces - (spaces / 2), ' '); else if (left_align) pb_putc_repeat(printbuf, spaces, ' '); } } else pb_putc_repeat(printbuf, pdesc->widths[j], ' '); if (_more_lines) { if (linestyle == 'a') pb_putc(printbuf, '+'); else pb_write(printbuf, "\342\206\265", 3); } else { if (border != 0 || j < last_column_num || is_last_column_multiline) pb_putc(printbuf, ' '); } } if (border == 2) { if (linestyle == 'a') pb_write(printbuf, "|", 2); else pb_write(printbuf, "\342\224\202", 3); } pb_flush_line(printbuf); if (isheader) { pb_print_vertical_header(printbuf, pdesc, pconfig, 'm'); printbuf->printed_headline = true; } printed_rows += 1; multiline_lineno += 1; } } rb = rb->next_bucket; } pb_print_vertical_header(printbuf, pdesc, pconfig, 'b'); snprintf(buffer, 20, "(%d rows)", printed_rows - (printbuf->printed_headline ? 1 : 0)); pb_puts(printbuf, buffer); pb_flush_line(printbuf); } /* * Try to detect column type and prepare all data necessary for printing */ static void prepare_pdesc(RowBucketType *rb, LinebufType *linebuf, PrintDataDesc *pdesc, PrintConfigType *pconfig) { int i; pdesc->nfields_all = linebuf->maxfields; pdesc->nfields = 0; /* copy data from linebuf */ for (i = 0; i < linebuf->maxfields; i++) { if (!linebuf->hidden[i]) { pdesc->widths[pdesc->nfields] = linebuf->widths[i]; pdesc->multilines[pdesc->nfields] = linebuf->multilines[i]; pdesc->columns_map[pdesc->nfields++] = i; } } if (pconfig->header_mode == 'a') pdesc->has_header = is_header(rb); else pdesc->has_header = pconfig->header_mode == '+'; /* try to detect types from numbers of digits */ for (i = 0; i < pdesc->nfields; i++) { if ((linebuf->tsizes[pdesc->columns_map[i]] == 0 && linebuf->digits[pdesc->columns_map[i]] > 0) || (linebuf->firstdigit[pdesc->columns_map[i]] > 0 && linebuf->processed - 1 == 1)) pdesc->types[i] = 'd'; else if ((((double) linebuf->firstdigit[pdesc->columns_map[i]] / (double) (linebuf->processed - 1)) > 0.8) && (((double) linebuf->digits[pdesc->columns_map[i]] / (double) linebuf->tsizes[pdesc->columns_map[i]]) > 0.5)) pdesc->types[i] = 'd'; else pdesc->types[i] = 'a'; } } /* * Save append one char to linebuffer */ inline static void append_char(LinebufType *linebuf, char c) { if (linebuf->used >= linebuf->size) { linebuf->size += linebuf->size < (10 * 1024) ? linebuf->size : (10 * 1024); linebuf->buffer = realloc(linebuf->buffer, linebuf->size); if (!linebuf->buffer) leave("out of memory while read csv or tsv data"); } linebuf->buffer[linebuf->used++] = c; } /* * Save string to linebuffer */ inline static void append_str(LinebufType *linebuf, char *str) { int l = strlen(str); if (linebuf->used + l >= linebuf->size) { linebuf->size += linebuf->size < (10 * 1024) ? linebuf->size : (10 * 1024); linebuf->buffer = realloc(linebuf->buffer, linebuf->size); if (!linebuf->buffer) leave("out of memory while read csv or tsv data"); } while (*str) linebuf->buffer[linebuf->used++] = *str++; } /* * Ensure dynamicaly allocated structure is valid every time. */ static inline RowBucketType * prepare_RowBucket(RowBucketType *rb) { /* move row from linebuf to rowbucket */ if (rb->nrows >= LINEBUFFER_LINES) { RowBucketType *new = smalloc2(sizeof(RowBucketType), "import csv data"); new->nrows = 0; new->allocated = true; new->next_bucket = NULL; rb->next_bucket = new; rb = new; } return rb; } /* * Calculate width of columns */ static void postprocess_fields(int nfields, RowType *row, LinebufType *linebuf, bool ignore_short_rows, bool reduced_sizes, /* the doesn't calculate ending zero */ bool *is_multiline_row, int trim_width, int trim_rows) { bool malformed; size_t width; int i; if (ignore_short_rows) malformed = linebuf->maxfields > 0 && nfields != linebuf->maxfields; else malformed = false; *is_multiline_row = false; for (i = 0; i < nfields; i++) { long int digits = 0; long int total = 0; bool multiline; /* don't calculate width for hidden columns */ if (linebuf->hidden[i]) continue; if (!use_utf8) { size_t max_width; char *ptr = row->fields[i]; width = 0; max_width = 0; while (*ptr) { if (isdigit(*ptr)) digits += 1; else if (*ptr != '-' && *ptr != ' ' && *ptr != ':') total += 1; if (*ptr == '\n') { multiline = true; max_width = width > max_width ? width : max_width; width = 0; } else if (*ptr == '\t') { do { width++; } while (width % 8 != 0); } else if (*ptr >= 0x20) { width++; } ptr += 1; } width = width > max_width ? width : max_width; } else { int _width; _width = utf_string_dsplen_multiline(row->fields[i], linebuf->sizes[i] - (reduced_sizes ? 0 : 1), &multiline, false, &digits, &total, trim_rows); if (_width < 0) leave("input string is not valid utf8 string"); width = (size_t) _width; } if (trim_width > 0 && width > trim_width) width = use_utf8 ? trim_width + 1 : trim_width; /* skip first possible header row */ if (linebuf->processed > 0) { linebuf->tsizes[i] += total; linebuf->digits[i] += digits; if (isdigit(*row->fields[i])) linebuf->firstdigit[i]++; } if (!malformed) { if (width > linebuf->widths[i]) linebuf->widths[i] = width; *is_multiline_row |= multiline; linebuf->multilines[i] |= multiline; } } if (nfields > linebuf->maxfields) linebuf->maxfields = nfields; if (!malformed) linebuf->processed += 1; } /* * Appends fields to rows without complete set of fields. * New fields holds null str. */ static void postprocess_rows(RowBucketType *rb, LinebufType *linebuf, char *nullstr) { size_t nullstr_size = strlen(nullstr); size_t nullstr_width = use_utf8 ? (size_t) utf_string_dsplen(nullstr, strlen(nullstr)) : strlen(nullstr); while (rb) { int i; for (i = 0; i < rb->nrows; i++) { RowType *oldrow = rb->rows[i]; if (linebuf->maxfields > 0 && linebuf->maxfields > oldrow->nfields) { int j; int newsize = 0; char *locbuf; RowType *newrow; /* calculate rows size and check width for new columns */ for (j = 0; j < linebuf->maxfields; j++) { if (j < oldrow->nfields) { char *str = oldrow->fields[j]; newsize += str ? strlen(str) + 1 : 0; } else { newsize += nullstr_size + 1; if (linebuf->widths[j] < nullstr_width) linebuf->widths[j] = nullstr_width; } } locbuf = smalloc2(newsize, "postprocess csv or tsv data"); newrow = smalloc2(offsetof(RowType, fields) + (linebuf->maxfields * sizeof(char*)), "postprocess csv or tsv data"); newrow->nfields = linebuf->maxfields; for (j = 0; j < newrow->nfields; j++) { if (j < oldrow->nfields) { if (oldrow->fields[j]) { strcpy(locbuf, oldrow->fields[j]); newrow->fields[j] = locbuf; locbuf += strlen(newrow->fields[j]) + 1; } else newrow->fields[j] = NULL; } else { strcpy(locbuf, nullstr); newrow->fields[j] = locbuf; locbuf += nullstr_size + 1; } } if (oldrow->nfields > 0) free(oldrow->fields[0]); free(oldrow); rb->rows[i] = newrow; } } rb = rb->next_bucket; } } static bool mark_hidden_columns(LinebufType *linebuf, RowType *row, int nfields, Options *opts) { char *names; char *endnames; char *ptr; int i; bool result = false; /* prepare list of hidden columns */ names = sstrdup(opts->csv_skip_columns_like); endnames = names + strlen(names); ptr = names; while (*ptr) { /* space is separator between words */ if (*ptr == ' ') *ptr = '\0'; ptr += 1; } for (i = 0; i < nfields; i++) { ptr = names; while (ptr < endnames) { if (*ptr) { size_t len = strlen(ptr); if (*ptr == '^') { if (strncmp(row->fields[i], ptr + 1, len - 1) == 0) { linebuf->hidden[i] = true; result = true; } } else if (ptr[len - 1] == '$') { size_t len2 = strlen(row->fields[i]); if (len2 > (len - 1) && strncmp(row->fields[i] + len2 - len + 1, ptr, len - 1) == 0) { linebuf->hidden[i] = true; result = true; } } else if (strstr(row->fields[i], ptr)) { linebuf->hidden[i] = true; result = true; } } ptr += strlen(ptr) + 1; } } free(names); return result; } /* * Read tsv format from ifile */ static void read_tsv(RowBucketType *rb, LinebufType *linebuf, FILE *ifile, bool ignore_short_rows, Options *opts) { bool closed = false; int size = 0; int nfields = 0; int c; int nullstr_size = opts->nullstr ? strlen(opts->nullstr) : 0; char *nullstr = opts->nullstr ? opts->nullstr : ""; c = fgetc(ifile); do { if (c == '\r') goto next_char; if (c != EOF && c != '\n') { bool backslash = false; bool translated = false; if (c == '\\') { backslash = true; c = fgetc(ifile); if (c != EOF) { /* NULL */ if (c == 'N') { append_str(linebuf, nullstr); size += nullstr_size; goto next_char; } else if (c == 't') { c = '\t'; translated = true; } else if (c == 'n') { c = '\n'; translated = true; } else if (c == '\\') { translated = true; } } } if (c != EOF) { if (c == '\t' && !translated) { append_char(linebuf, '\0'); linebuf->sizes[nfields++] = size + 1; size = 0; } else { if (backslash && !translated) { append_char(linebuf, '\\'); size +=1; } append_char(linebuf, c); size += 1; } } } else { if (linebuf->used > 0) { char *locbuf; RowType *row; bool multiline = false; int i; append_char(linebuf, '\0'); linebuf->sizes[nfields++] = size + 1; rb = prepare_RowBucket(rb); locbuf = smalloc2(linebuf->used, "import tsv data"); memcpy(locbuf, linebuf->buffer, linebuf->used); row = smalloc2(offsetof(RowType, fields) + (nfields * sizeof(char*)), "import csv data"); row->nfields = nfields; for (i = 0; i < nfields; i++) { row->fields[i] = locbuf; locbuf += linebuf->sizes[i]; } if (linebuf->processed == 0 && opts->csv_skip_columns_like) mark_hidden_columns(linebuf, row, nfields, opts); postprocess_fields(nfields, row, linebuf, ignore_short_rows, false, &multiline, opts->csv_trim_width, opts->csv_trim_rows); rb->multilines[rb->nrows] = multiline; rb->rows[rb->nrows++] = row; linebuf->processed += 1; } nfields = 0; linebuf->used = 0; size = 0; closed = c == EOF; } next_char: c = fgetc(ifile); } while (!closed); /* append nullstr to missing columns */ if (nullstr_size > 0 && !ignore_short_rows) postprocess_rows(rb, linebuf, nullstr); } static void read_csv(RowBucketType *rb, LinebufType *linebuf, char sep, FILE *ifile, bool ignore_short_rows, Options *opts) { bool skip_initial = true; bool closed = false; bool found_string = false; int first_nw = 0; int last_nw = 0; int pos = 0; int nfields = 0; int instr = false; /* true when csv string is processed */ int c; int nullstr_size = opts->nullstr ? strlen(opts->nullstr) : 0; char *nullstr = opts->nullstr ? opts->nullstr : ""; c = fgetc(ifile); if (opts->pgcli_fix && c == '>') { while (c != '\n' && c != EOF) { fputc(c, stdout); c = fgetc(ifile); } fputc('\n', stdout); } do { /* ignore ^M */ if (c == '\r') goto next_char; if (c != EOF && (c != '\n' || instr)) { int l; if (skip_initial) { if (c == ' ' || c == '\t') goto next_char; skip_initial = false; last_nw = first_nw; } if (c == '"') { if (instr) { int c2 = fgetc(ifile); if (c2 == '"') { /* double double quotes */ append_char(linebuf, c); pos = pos + 1; } else { /* start of end of string */ ungetc(c2, ifile); instr = false; } } else { instr = true; found_string = true; } } else { append_char(linebuf, c); pos = pos + 1; } if (sep == -1 && !instr) { /* * Automatic separator detection - now it is very simple, first win. * Can be enhanced in future by more sofisticated mechanism. */ if (c == ',') sep = ','; else if (c == ';') sep = ';'; else if (c == '|') sep = '|'; } if (sep != -1 && c == sep && !instr) { if (nfields >= 1024) leave("too much columns"); if (skip_initial) leave("internal error - unexpected value of variable: \"skip_initial\""); if (last_nw - first_nw > 0 || found_string || nullstr_size == 0) { linebuf->sizes[nfields] = last_nw - first_nw; linebuf->starts[nfields++] = first_nw; } else { /* append null string */ linebuf->sizes[nfields] = nullstr_size; linebuf->starts[nfields++] = pos; append_str(linebuf, nullstr); pos += nullstr_size; } skip_initial = true; found_string = false; first_nw = pos; } else if (instr || (c != ' ' && c != '\t')) { last_nw = pos; } l = use_utf8 ? utf8charlen(c) : 1; if (l > 1) { int i; /* read other chars */ for (i = 1; i < l; i++) { c = fgetc(ifile); if (c == EOF) { log_row("unexpected quit, broken unicode char"); break; } append_char(linebuf, c); pos = pos + 1; } last_nw = pos; } } else { char *locbuf; RowType *row; int i; int data_size; bool multiline; if (c == '\n') { /* try to process \nEOF as one symbol */ c = fgetc(ifile); if (c != EOF) ungetc(c, ifile); } if (!skip_initial && (last_nw - first_nw > 0 || found_string || nullstr_size == 0)) { linebuf->sizes[nfields] = last_nw - first_nw; linebuf->starts[nfields++] = first_nw; } else if (nullstr_size > 0 && (nfields > 1 || (nfields == 0 && linebuf->maxfields == 1) || (nfields == 0 && linebuf->processed == 0))) { /* append null string */ linebuf->sizes[nfields] = nullstr_size; linebuf->starts[nfields++] = pos; append_str(linebuf, nullstr); pos += nullstr_size; } else { linebuf->sizes[nfields] = 0; linebuf->starts[nfields++] = -1; } if (!linebuf->used) goto next_row; rb = prepare_RowBucket(rb); data_size = 0; for (i = 0; i < nfields; i++) if (!linebuf->hidden[i]) data_size += linebuf->sizes[i] + 1; locbuf = smalloc2(data_size, "import csv data"); memset(locbuf, 0, data_size); row = smalloc2(offsetof(RowType, fields) + (nfields * sizeof(char*)), "import csv data"); row->nfields = nfields; multiline = false; for (i = 0; i < nfields; i++) { if (!linebuf->hidden[i]) { row->fields[i] = locbuf; if (linebuf->sizes[i] > 0) memcpy(locbuf, linebuf->buffer + linebuf->starts[i], linebuf->sizes[i]); locbuf[linebuf->sizes[i]] = '\0'; locbuf += linebuf->sizes[i] + 1; } else row->fields[i] = NULL; } if (linebuf->processed == 0 && opts->csv_skip_columns_like) mark_hidden_columns(linebuf, row, nfields, opts); postprocess_fields(nfields, row, linebuf, ignore_short_rows, true, &multiline, opts->csv_trim_width, opts->csv_trim_rows); rb->multilines[rb->nrows] = multiline; rb->rows[rb->nrows++] = row; next_row: linebuf->used = 0; nfields = 0; linebuf->processed += 1; skip_initial = true; first_nw = 0; last_nw = 0; pos = 0; closed = c == EOF; } next_char: if (!closed) c = fgetc(ifile); } while (!closed); /* append nullstr to missing columns */ if (nullstr_size > 0 && !ignore_short_rows) postprocess_rows(rb, linebuf, nullstr); } /* * Read external unformatted data (csv or result of some query * */ bool read_and_format(Options *opts, DataDesc *desc, StateData *state) { LinebufType linebuf; RowBucketType rowbuckets, *rb; PrintConfigType pconfig; PrintbufType printbuf; PrintDataDesc pdesc; char *query = NULL; char *name; state->errstr = NULL; state->_errno = 0; if (opts->querystream) { if (desc->total_rows > 0) { SimpleLineBufferIter slbi, *_slbi; char *str; ExtStr estr; /* We need to make an query from stored lines */ _slbi = init_slbi_ddesc(&slbi, desc); InitExtStr(&estr); while (_slbi) { _slbi = slbi_get_line_next(_slbi, &str, NULL); ExtStrAppendNewLine(&estr, str); } if (estr.len > 0) { if (current_state->last_query) free(current_state->last_query); current_state->last_query = estr.data; } else free(estr.data); } query = current_state->last_query; } else query = opts->query; lb_free(desc); memset(desc, 0, sizeof(DataDesc)); if ((name = (char *) get_input_file_basename())) { strncpy(desc->filename, name, 64); desc->filename[64] = '\0'; } desc->title[0] = '\0'; desc->title_rows = 0; desc->border_top_row = -1; desc->border_head_row = -1; desc->border_bottom_row = -1; desc->first_data_row = -1; desc->last_data_row = -1; desc->is_expanded_mode = false; desc->headline_transl = NULL; desc->cranges = NULL; desc->columns = 0; desc->footer_row = -1; desc->alt_footer_row = -1; desc->is_pgcli_fmt = false; desc->namesline = NULL; desc->order_map = NULL; desc->total_rows = 0; desc->multilines_already_tested = false; desc->maxbytes = -1; desc->maxx = -1; /* * This format doesn't support progressive load */ desc->initialized = true; desc->completed = true; memset(&desc->rows, 0, sizeof(LineBuffer)); desc->rows.prev = NULL; memset(&linebuf, 0, sizeof(LinebufType)); linebuf.buffer = malloc(10 * 1024); linebuf.used = 0; linebuf.size = 10 * 1024; pconfig.linestyle = (opts->force_ascii_art || !use_utf8) ? 'a' : 'u'; pconfig.border = opts->border_type; pconfig.double_header = opts->double_header; pconfig.header_mode = opts->csv_header; pconfig.ignore_short_rows = opts->ignore_short_rows; pconfig.trim_width = opts->csv_trim_width; pconfig.trim_rows = opts->csv_trim_rows; memset(&rowbuckets, 0, sizeof(RowBucketType)); rowbuckets.allocated = false; rowbuckets.nrows = 0; rowbuckets.next_bucket = NULL; if (opts->querystream && !query) { free(linebuf.buffer); return false; } if (query) { if (!pg_exec_query(opts, query, &rowbuckets, &pdesc, &state->errstr)) { log_row("pgclient error: %s\n", state->errstr); free(linebuf.buffer); return false; } } else if (opts->csv_format) { if (!f_data) { format_error("missing data"); free(linebuf.buffer); return false; } read_csv(&rowbuckets, &linebuf, opts->csv_separator, f_data, opts->ignore_short_rows, opts); prepare_pdesc(&rowbuckets, &linebuf, &pdesc, &pconfig); } else if (opts->tsv_format) { if (!f_data) { format_error("missing data"); free(linebuf.buffer); return false; } read_tsv(&rowbuckets, &linebuf, f_data, opts->ignore_short_rows, opts); prepare_pdesc(&rowbuckets, &linebuf, &pdesc, &pconfig); } /* reuse allocated memory */ printbuf.buffer = linebuf.buffer; printbuf.size = linebuf.size; printbuf.free = linebuf.size; printbuf.used = 0; printbuf.linebuf = &desc->rows; /* init other printbuf fields */ printbuf.printed_headline = false; printbuf.flushed_rows = 0; printbuf.maxbytes = 0; /* sanitize ptr */ linebuf.buffer = NULL; linebuf.size = 0; pb_print_rowbuckets(&printbuf, &rowbuckets, &pconfig, &pdesc, NULL); desc->border_type = pconfig.border; desc->linestyle = pconfig.linestyle; desc->maxbytes = printbuf.maxbytes; if (printbuf.printed_headline) { int headline_rowno; headline_rowno = pconfig.border == 2 ? 2 : 1; if (desc->rows.nrows > headline_rowno) { desc->namesline = desc->rows.rows[headline_rowno - 1]; desc->border_head_row = headline_rowno; desc->headline = desc->rows.rows[headline_rowno]; desc->headline_size = strlen(desc->headline); if (use_utf8) desc->headline_char_size = desc->maxx = utf_string_dsplen(desc->headline, INT_MAX); else desc->headline_char_size = desc->headline_size; desc->first_data_row = desc->border_head_row + 1; desc->maxy = printbuf.flushed_rows - 1; desc->total_rows = printbuf.flushed_rows; desc->last_row = desc->total_rows - 1; desc->footer_row = desc->last_row; if (pconfig.border == 2) { desc->border_top_row = 0; desc->last_data_row = desc->total_rows - 2 - 1; desc->border_bottom_row = desc->last_data_row + 1; } else { desc->border_top_row = -1; desc->border_bottom_row = -1; desc->last_data_row = desc->total_rows - 1 - 1; } } } else { char *ptr; int i; /* * When we have not headline. We know structure, so we can * "translate" headline here (generate translated headline). */ desc->columns = linebuf.maxfields; desc->cranges = smalloc2(desc->columns * sizeof(CRange), "prepare metadata"); memset(desc->cranges, 0, desc->columns * sizeof(CRange)); desc->headline_transl = smalloc2(desc->maxbytes + 3, "prepare metadata"); ptr = desc->headline_transl; if (pconfig.border == 1) *ptr++ = 'd'; else if (pconfig.border == 2) { *ptr++ = 'L'; *ptr++ = 'd'; } for (i = 0; i < linebuf.maxfields; i++) { int width = linebuf.widths[i]; desc->cranges[i].name_offset = -1; desc->cranges[i].name_size = -1; if (i > 0) { if (pconfig.border > 0) { *ptr++ = 'd'; *ptr++ = 'I'; *ptr++ = 'd'; } else *ptr++ = 'I'; } while (width--) { *ptr++ = 'd'; } } if (pconfig.border == 1) *ptr++ = 'd'; else if (pconfig.border == 2) { *ptr++ = 'd'; *ptr++ = 'R'; } *ptr = '\0'; desc->headline_char_size = strlen(desc->headline_transl); desc->cranges[0].xmin = 0; ptr = desc->headline_transl; i = 0; while (*ptr) { if (*ptr++ == 'I') { desc->cranges[i].xmax = ptr - desc->headline_transl - 1; desc->cranges[++i].xmin = ptr - desc->headline_transl - 1; } } desc->cranges[i].xmax = desc->headline_char_size - 1; desc->maxy = printbuf.flushed_rows - 1; desc->total_rows = printbuf.flushed_rows; desc->last_row = desc->total_rows - 1; desc->footer_row = desc->last_row; if (pconfig.border == 2) { desc->first_data_row = 0; desc->border_top_row = 0; desc->border_head_row = 0; desc->last_data_row = desc->total_rows - 2 - 1; desc->border_bottom_row = desc->last_data_row + 1; } else { desc->first_data_row = 0; desc->border_top_row = -1; desc->border_head_row = -1; desc->border_bottom_row = -1; desc->last_data_row = desc->total_rows - 1 - 1; } } free(printbuf.buffer); /* release row buckets */ rb = &rowbuckets; while (rb) { RowBucketType *nextrb; int i; for (i = 0; i < rb->nrows; i++) { RowType *r = rb->rows[i]; /* only first field holds allocated string */ if (r->nfields > 0) free(r->fields[0]); free(r); } nextrb = rb->next_bucket; if (rb->allocated) free(rb); rb = nextrb; } return true; } pspg-5.8.1/src/print.c000066400000000000000000001217201452457446400146070ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * print.c * visualisation loaded data * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/print.c * *------------------------------------------------------------------------- */ #if defined HAVE_NCURSESW_CURSES_H #include #elif defined HAVE_NCURSESW_H #include #elif defined HAVE_NCURSES_CURSES_H #include #elif defined HAVE_NCURSES_H #include #elif defined HAVE_CURSES_H #include #else /* fallback */ #include #endif #include #include #include #include #ifndef GWINSZ_IN_SYS_IOCTL #include #endif #include #include "pspg.h" #include "unicode.h" #include #include #ifndef A_ITALIC #define A_ITALIC A_DIM #endif static inline void wrepeatspace(WINDOW *win, int n) { int i; for (i = 0; i < n; i++) waddch(win, ' '); } /* * Flush data to window. When row is a decoration, then * replace ascii decoration by special terminal decoration. */ static void flush_bytes(WINDOW *win, char *rowstr, int bytes, int offsetx, bool is_top_deco, bool is_head_deco, bool is_bottom_deco, DataDesc *desc, Options *opts) { if ((is_top_deco || is_head_deco || is_bottom_deco) && desc->linestyle == 'a' && opts->force_uniborder) { while (bytes > 0) { int column_format = desc->headline_transl[offsetx]; if (column_format == 'd' && *rowstr == '-') { waddch(win, ACS_HLINE); rowstr += 1; bytes -= 1; offsetx += 1; } else if (column_format == 'L' && (*rowstr == '+' || *rowstr == '|')) { if (is_head_deco) waddch(win, ACS_LTEE); else if (is_top_deco) waddch(win, ACS_ULCORNER); else /* bottom row */ waddch(win, ACS_LLCORNER); rowstr += 1; bytes -= 1; offsetx += 1; } else if (column_format == 'I' && *rowstr == '+') { if (is_head_deco) waddch(win, ACS_PLUS); else if (is_top_deco) waddch(win, ACS_TTEE); else /* bottom row */ waddch(win, ACS_BTEE); rowstr += 1; bytes -= 1; offsetx += 1; } else if (column_format == 'R' && (*rowstr == '+' || *rowstr == '|')) { if (is_head_deco) waddch(win, ACS_RTEE); else if (is_top_deco) waddch(win, ACS_URCORNER); else /* bottom row */ waddch(win, ACS_LRCORNER); rowstr += 1; bytes -= 1; offsetx += 1; } else { int len = charlen(rowstr); waddnstr(win, rowstr, len); offsetx += utf_dsplen(rowstr); rowstr +=len; bytes -= len; } } } else { /* * waddnstr is working with utf8 on ncursesw */ waddnstr(win, rowstr, bytes); } } static void print_column_names(WINDOW *win, int srcx, /* offset to displayed data */ int vcursor_xmin, /* xmin in display coordinates */ int vcursor_xmax, /* xmax in display coordinates */ int selected_xmin, int selected_xmax, DataDesc *desc, Options *opts, Theme *t) { char *headline_ptr = desc->headline_transl; char *headline_end_ptr = headline_ptr + desc->headline_char_size; char *namesline = desc->namesline; char *ptr = namesline; int maxy, maxx; int cy, cx; int pos = 0; int bytes; int chars; attr_t active_attr = 0; attr_t new_attr; int i; getyx(win, cy, cx); getmaxyx(win, maxy, maxx); (void) cx; (void) maxy; /* skip left invisible chars */ while (pos < srcx) { bytes = charlen(ptr); chars = dsplen(ptr); if (pos + chars > srcx) { wrepeatspace(win, pos + chars - srcx); pos += chars; ptr += bytes; headline_ptr += chars; break; } pos += chars; ptr += bytes; headline_ptr += chars; } /* position starts from zero again to be comparable with maxx */ pos -= srcx; if (selected_xmin != INT_MIN) { selected_xmin -= srcx; selected_xmax -= srcx; if (selected_xmin < 0) selected_xmin = 0; } /* for each visible column (position) and defined colum */ while (pos < maxx && headline_ptr < headline_end_ptr) { char column_format = *headline_ptr; bool is_cursor = vcursor_xmin <= pos && pos <= vcursor_xmax; bool is_in_range = false; is_in_range = selected_xmin != INT_MIN && pos != -1 && pos >= selected_xmin && pos <= selected_xmax; bytes = charlen(ptr); chars = dsplen(ptr); if (is_in_range) new_attr = is_cursor ? t->selection_cursor_attr : t->selection_attr; else if (is_cursor) new_attr = column_format == 'd' ? t->cursor_data_attr : t->cursor_line_attr; else new_attr = column_format == 'd' ? t->data_attr : t->line_attr; if (active_attr != new_attr) { /* disable current style */ wattroff(win, active_attr); /* active new style */ active_attr = new_attr; wattron(win, active_attr); } if (column_format != 'd') { if (desc->linestyle == 'a' && opts->force_uniborder) waddch(win, ACS_VLINE); else waddnstr(win, ptr, bytes); } else /* clean background of colum names */ wrepeatspace(win, chars); headline_ptr += chars; ptr += bytes; pos += chars; } wclrtoeol(win); wattroff(win, active_attr); /* check all column names and print that are visible */ for (i = 0; i < desc->columns; i++) { CRange *col = &desc->cranges[i]; char *colname; int colname_size; int colname_width; int col_val_xmin; int col_val_xmax; int visible_col_val_xmin; int visible_col_val_xmax; int visible_col_val_width; int border_width; int offset; int startx; bool is_cursor; bool is_in_range; if (col->xmax <= srcx) continue; if (srcx + maxx <= col->xmin) continue; colname = desc->namesline + col->name_offset; colname_size = col->name_size; colname_width = col->name_width; col_val_xmin = col->xmin; if (desc->headline_transl[col_val_xmin] == 'I' || desc->headline_transl[col_val_xmin] == 'L') { col_val_xmin += 1; } col_val_xmax = col->xmax; if (desc->headline_transl[col_val_xmax] == 'R') { col_val_xmax -= 1; } visible_col_val_xmin = col_val_xmin < srcx ? srcx : col_val_xmin; visible_col_val_xmax = col_val_xmax > srcx + maxx ? srcx + maxx : col_val_xmax; visible_col_val_width = visible_col_val_xmax - visible_col_val_xmin + 1; border_width = desc->border_type != 0 ? 1 : 0; if ((colname_width + 2 * border_width) <= visible_col_val_width) { /* When the label can be placed inside visible space in column */ offset = (visible_col_val_width - colname_width) / 2; border_width = 0; } else { int visible_colname_width = visible_col_val_width - border_width; int char_bytes; int char_width; if (col_val_xmax < srcx + maxx) { /* when end of label is visible, skip n chars from begin */ while (*colname) { char_bytes = charlen(colname); char_width = dsplen(colname); if (colname_width < visible_colname_width) break; colname_width -= char_width; colname += char_bytes; colname_size -= char_bytes; } border_width = 0; } else { char *str = colname; colname_width = 0; colname_size = 0; /* only first n chars */ while (*str) { char_bytes = charlen(colname); char_width = dsplen(colname); if (colname_width + char_width > visible_colname_width) break; colname_width += char_width; str += char_bytes; colname_size += char_bytes; } } offset = 0; } startx = visible_col_val_xmin - srcx; is_cursor = vcursor_xmin <= startx && startx <= vcursor_xmax; is_in_range = selected_xmin != INT_MIN && startx >= selected_xmin && startx <= selected_xmax; if (is_in_range) new_attr = is_cursor ? t->selection_cursor_attr : t->selection_attr; else new_attr = is_cursor ? t->cursor_data_attr : t->data_attr; wattron(win, new_attr); mvwaddnstr(win, cy, visible_col_val_xmin - srcx + offset + border_width, colname, colname_size); wattroff(win, new_attr); } } LineInfo * set_line_info(Options *opts, ScrDesc *scrdesc, DataDesc *desc, LineBufferMark *lbm, char *rowstr) { LineInfo *linfo = NULL; if (*scrdesc->searchterm == '\0' || !lbm || !rowstr || !lbm->lb) return linfo; if (!lbm->lb->lineinfo) { LineBuffer *lb = lbm->lb; int i; lb->lineinfo = smalloc(LINEBUFFER_LINES * sizeof(LineInfo)); for (i = 0; i < LINEBUFFER_LINES; i++) lb->lineinfo[i].mask = LINEINFO_UNKNOWN; } linfo = &lbm->lb->lineinfo[lbm->lb_rowno]; if (linfo->mask & LINEINFO_UNKNOWN) { const char *str = rowstr; linfo->mask ^= LINEINFO_UNKNOWN; linfo->mask &= ~(LINEINFO_FOUNDSTR | LINEINFO_FOUNDSTR_MULTI); /* apply row selection filtr */ if (scrdesc->search_rows > 0) { int rowno = lbm->lineno - desc->first_data_row; if (rowno < scrdesc->search_first_row || rowno > scrdesc->search_first_row + scrdesc->search_rows - 1) return linfo; } while (str != NULL) { /* * When we would to ignore case or lower case (in this case, we know, so * pattern has not any upper char, then we have to use slower case insensitive * searching. */ if (opts->ignore_case || (opts->ignore_lower_case && !scrdesc->has_upperchr)) { if (use_utf8) str = utf8_nstrstr(str, scrdesc->searchterm); else str = nstrstr(str, scrdesc->searchterm); } else if (opts->ignore_lower_case && scrdesc->has_upperchr) { if (use_utf8) str = utf8_nstrstr_ignore_lower_case(str, scrdesc->searchterm); else str = nstrstr_ignore_lower_case(str, scrdesc->searchterm); } else /* we can use case sensitive searching (binary comparation) */ str = strstr(str, scrdesc->searchterm); if (str != NULL) { /* apply column selection filtr */ if (scrdesc->search_columns > 0) { int bytes = str - rowstr; int pos; pos = use_utf8 ? utf_string_dsplen(rowstr, bytes) : bytes; if (pos < scrdesc->search_first_column) { str += charlen(str); continue; } if (pos > scrdesc->search_first_column + scrdesc->search_columns - 1) return linfo; } if (linfo->mask & LINEINFO_FOUNDSTR) { /* When we detect multi occurrence, then stop searching */ linfo->mask |= LINEINFO_FOUNDSTR_MULTI; break; } else { linfo->mask |= LINEINFO_FOUNDSTR; if (use_utf8) linfo->start_char = utf_string_dsplen(rowstr, str - rowstr); else linfo->start_char = str - rowstr; } str += scrdesc->searchterm_size; } } } return linfo; } #if NCURSES_WIDECHAR > 0 && defined HAVE_NCURSESW /* * Two examples how to print wide char correctly */ static void pspg_mvwadd_wchar(WINDOW *win, int y, int x, wchar_t *wchr, attr_t attr) { cchar_t cchr; /* * Note: I misunderstand to the function setcchar originally. I passed there * pointer to wide char, but it really expects pointer to wide char string * ended zero. This issue was detected by address sanitizer */ setcchar(&cchr, wchr, attr, PAIR_NUMBER(attr), NULL); mvwadd_wch(win, y, x, &cchr); } static void mvwadd_wchar(WINDOW *win, int y, int x, wchar_t wchr) { mvwaddnwstr(win, y, x, &wchr, 1); } #endif /* * Draw scrollbar to related window. */ static void draw_scrollbar_win(WINDOW *win, Theme *t, ScrDesc *scrdesc, Options *opts) { int i; werase(win); wattron(win, t->scrollbar_attr); for (i = 0; i < scrdesc->scrollbar_maxy; i++) waddch(win, ACS_CKBOARD); wattroff(win, t->scrollbar_attr); #if NCURSES_WIDECHAR > 0 && defined HAVE_NCURSESW if (t->scrollbar_use_arrows) { if (!use_utf8 || opts->force_ascii_art) { wattron(win, t->scrollbar_arrow_attr); mvwaddch(win, 0, 0, ACS_UARROW); mvwaddch(win, scrdesc->scrollbar_maxy - 1, 0, ACS_DARROW); wattroff(win, t->scrollbar_arrow_attr); } else { /* 🠕 🠗 */ wattron(win, t->scrollbar_arrow_attr); mvwadd_wchar(win, 0, 0, L'\x1F815'); mvwadd_wchar(win, scrdesc->scrollbar_maxy - 1, 0, L'\x1F817'); wattroff(win, t->scrollbar_arrow_attr); } } else { /* ▲ ▼ */ pspg_mvwadd_wchar(win, 0, 0, L"\x25b2", t->scrollbar_arrow_attr); pspg_mvwadd_wchar(win, scrdesc->scrollbar_maxy - 1, 0, L"\x25bc", t->scrollbar_arrow_attr); } #else wattron(win, t->scrollbar_arrow_attr); mvwaddch(win, 0, 0, ACS_UARROW); mvwaddch(win, scrdesc->scrollbar_maxy - 1, 0, ACS_DARROW); wattroff(win, t->scrollbar_arrow_attr); #endif wattron(win, scrdesc->scrollbar_mode ? t->scrollbar_active_slider_attr : t->scrollbar_slider_attr); if (!t->scrollbar_slider_symbol) { /* draw slider */ for (i = 0; i < scrdesc->slider_size; i++) mvwaddch(win, scrdesc->slider_min_y + i, 0, ' '); } else mvwaddch(win, scrdesc->slider_min_y, 0, t->scrollbar_slider_symbol); wattroff(win, scrdesc->scrollbar_mode ? t->scrollbar_active_slider_attr : t->scrollbar_slider_attr); } /* * Return true when pos is over some searched patterns specified by * positions cache or lineinfo position. This function can be called * only when the row is pattern row (linfo is valid). */ static bool is_in_searched_pattern(int pos, ScrDesc *scrdesc, LineInfo *linfo, int positions[100][2], int npositions) { if (linfo->mask & LINEINFO_FOUNDSTR_MULTI) { int i; for (i = 0; i < npositions; i++) { if (pos >= positions[i][0] && pos < positions[i][1]) return true; } } else { if (pos >= linfo->start_char && pos < linfo->start_char + scrdesc->searchterm_char_size) return true; } return false; } typedef struct { int start_pos; int end_pos; int typ; } SpecialWord; static bool is_upper_char(char *chr) { if (use_utf8) return utf8_isupper(chr); return isupper(*chr); } static bool is_ascii_alnum(char chr) { if (use_utf8 && (chr & 0x80)) return false; return isalnum(chr); } static bool is_ascii_alpha(char chr) { if (use_utf8 && (chr & 0x80)) return false; return isalpha(chr); } /* * Try to identify words in line that should be highlighted * */ static int parse_line(char *line, SpecialWord *words, int maxwords) { int nwords = 0; int pos = 0; bool first_nonspace = true; char *first_char = line; /* * When text starts on line start and first char is upper * char, then mark this text until double colon. * * like "Usage:" * * Exceptions: sentences (ending by . or contains \ ) */ if ((is_upper_char(line) || strncmp(line, "psql", 4) == 0) && !strchr(line, '.') && !strchr(line, '\\')) { char *aux_line = line; words[0].start_pos = 0; words[0].typ = 3; while (*line != '\0' && *line != ':') { pos += dsplen(line); line += charlen(line); } if (!is_upper_char(aux_line + 1)) { words[0].end_pos = pos - 1; words[0].typ = 3; nwords = 1; first_nonspace = false; } else { line = aux_line; pos = 0; } } while (*line) { while (*line == ' ') { line += 1; pos += 1; } /* psql's backslash commands */ if (*line == '\\') { words[nwords].start_pos = pos; words[nwords].typ = 1; while (*line != ' ' && *line != '\0') { pos += dsplen(line); line += charlen(line); } } /* psql's shell options */ else if (*line == '-') { /* when dash is inside world, then it is not an option */ if (line > first_char && is_ascii_alnum(line[-1])) { line += 1; pos += 1; continue; } words[nwords].start_pos = pos; words[nwords].typ = 1; while (*line == '-') { line += 1; pos += 1; } if (pos - words[nwords].start_pos > 2) continue; if (!(is_ascii_alnum(*line) || *line == '?' || *line == '!')) continue; while (is_ascii_alnum(*line) || *line == '-' || *line == '?' || *line == '!') { line += 1; pos += 1; } words[nwords].typ = 1; goto fin; } /* psql's variables and \pset variables */ else if (is_ascii_alpha(*line)) { bool only_upper = true; char *start = line; words[nwords].start_pos = pos; while (is_ascii_alnum(*line) || *line == '_') { if (islower(*line)) only_upper = false; line += 1; pos += 1; } if (!only_upper) { if (first_nonspace && words[nwords].start_pos == 2 && *line == '\0') { words[nwords].typ = 2; goto fin; } else if (isupper(*start) && *line == ':') { words[nwords].typ = 3; goto fin; } continue; } if (strncmp(start, "SQL", pos - words[nwords].start_pos) == 0) continue; if (*line == ':') continue; if ((pos - words[nwords].start_pos) == 1) continue; words[nwords].typ = 2; } else { pos += dsplen(line); line += charlen(line); first_nonspace = false; continue; } fin: words[nwords].end_pos = pos - 1; if (++nwords == maxwords) return nwords; } return nwords; } void window_fill(int window_identifier, int srcy, int srcx, /* offset to displayed data */ int cursor_row, /* row of row cursor */ int vcursor_xmin, /* xmin in display coordinates */ int vcursor_xmax, /* xmax in display coordinates */ int selected_xmin, int selected_xmax, DataDesc *desc, ScrDesc *scrdesc, Options *opts) { int maxy, maxx; int row; LineBufferIter lbi; LineBufferMark lbm; attr_t active_attr; attr_t pattern_fix; int srcy_bak = srcy; char *free_row; WINDOW *win; Theme *t; SpecialWord specwords[30]; int nspecwords; bool is_footer = window_identifier == WINDOW_FOOTER; bool is_fix_rows = window_identifier == WINDOW_LUC || window_identifier == WINDOW_FIX_ROWS; bool is_rownum = window_identifier == WINDOW_ROWNUM; bool is_rownum_luc = window_identifier == WINDOW_ROWNUM_LUC; bool is_fix_rows_only = window_identifier == WINDOW_FIX_ROWS; bool is_scrollbar = window_identifier == WINDOW_VSCROLLBAR; bool is_selectable = window_identifier == WINDOW_ROWS || window_identifier == WINDOW_LUC || window_identifier == WINDOW_FIX_COLS || window_identifier == WINDOW_FIX_ROWS || window_identifier == WINDOW_FOOTER; bool is_text = window_identifier == WINDOW_FOOTER && desc->headline_transl == NULL; int odd_theme_identifier = -1; win = scrdesc->wins[window_identifier]; t = &scrdesc->themes[window_identifier]; pattern_fix = t->found_str_attr & A_UNDERLINE; if (has_odd_themedef && opts->highlight_odd_rec) { if (window_identifier == WINDOW_FIX_COLS) odd_theme_identifier = WINDOW_FIX_COLS_ODD; else if (window_identifier == WINDOW_ROWS) odd_theme_identifier = WINDOW_ROWS_ODD; else if (window_identifier == WINDOW_ROWNUM) odd_theme_identifier = WINDOW_ROWNUM_ODD; else odd_theme_identifier = -1; if (odd_theme_identifier != -1) multilines_detection(desc); } /* when we want to detect expanded records titles */ if (desc->is_expanded_mode) { scrdesc->first_rec_title_y = -1; scrdesc->last_rec_title_y = -1; } /* fast leaving */ if (win == NULL) return; if (is_rownum_luc) { /* just clean */ werase(win); return; } if (is_scrollbar) { draw_scrollbar_win(win, t, scrdesc, opts); return; } init_lbi_ddesc(&lbi, desc, srcy); row = 0; getmaxyx(win, maxy, maxx); while (row < maxy ) { char *rowstr = NULL; bool line_is_valid = false; LineInfo *lineinfo = NULL; bool is_bookmark_row = false; bool is_cursor_row = false; bool is_pattern_row = false; char buffer[10]; int positions[100][2]; int npositions = 0; int rowno = row + srcy_bak + 1 - desc->first_data_row; int lineno; is_cursor_row = (!opts->no_cursor && row == cursor_row); (void) lbi_set_mark_next(&lbi, &lbm); line_is_valid = lbm_get_line(&lbm, &rowstr, &lineinfo, &lineno); if (odd_theme_identifier != -1 && lineinfo) { int recno = lineno - lineinfo->recno_offset; if (recno % 2 == 1) t = &scrdesc->themes[odd_theme_identifier]; else t = &scrdesc->themes[window_identifier]; } /* when rownum is printed, don't process original text */ if (is_rownum && line_is_valid) { snprintf(buffer, sizeof(buffer), "%*d ", maxx - 1, rowno); rowstr = buffer; } is_bookmark_row = (lineinfo != NULL && (lineinfo->mask & LINEINFO_BOOKMARK) != 0) ? true : false; if (!is_fix_rows && *scrdesc->searchterm != '\0' && !opts->no_highlight_search) lineinfo = set_line_info(opts, scrdesc, desc, &lbm, rowstr); is_pattern_row = (lineinfo != NULL && (lineinfo->mask & LINEINFO_FOUNDSTR) != 0) ? true : false; /* prepare position cache, when first occurrence is visible */ if (lineinfo != NULL && (lineinfo->mask & LINEINFO_FOUNDSTR_MULTI) != 0 && srcx + maxx > lineinfo->start_char && *scrdesc->searchterm != '\0') { const char *str = rowstr; while (str != NULL && npositions < 100) { str = pspg_search(opts, scrdesc, str); if (str != NULL) { int position = use_utf8 ? utf_string_dsplen(rowstr, str - rowstr) : (int) (str - rowstr); /* apply column selection filtr */ if (scrdesc->search_columns > 0) { if (position < scrdesc->search_first_column) { str += charlen(str); continue; } if (position > scrdesc->search_first_column + scrdesc->search_columns - 1) break; } positions[npositions][0] = position; positions[npositions][1] = positions[npositions][0] + scrdesc->searchterm_char_size; /* don't search more if we are over visible part */ if (positions[npositions][1] > srcx + maxx) { npositions += 1; break; } str += scrdesc->searchterm_size; npositions += 1; } } } active_attr = 0; if (is_bookmark_row) { if (!is_footer && !is_rownum) { if (desc->border_type == 2) active_attr = is_cursor_row ? t->cursor_bookmark_attr : t->bookmark_line_attr; else active_attr = is_cursor_row ? t->cursor_bookmark_attr : t->bookmark_data_attr; } else active_attr = is_cursor_row ? t->cursor_bookmark_attr : t->bookmark_data_attr; } /* would not to show pattern colors in rownum window */ else if (is_pattern_row && !is_rownum) { if (!is_footer) { if (desc->border_type == 2) active_attr = is_cursor_row ? t->cursor_line_attr : t->pattern_line_attr; else active_attr = is_cursor_row ? t->cursor_data_attr : t->pattern_data_attr; } else active_attr = is_cursor_row ? t->cursor_data_attr : t->pattern_data_attr; } else { if (!is_footer && !is_rownum) { if (desc->border_type == 2) active_attr = is_cursor_row ? t->cursor_line_attr : t->line_attr; else active_attr = is_cursor_row ? t->cursor_data_attr : t->data_attr; } else active_attr = is_cursor_row ? t->cursor_data_attr : t->data_attr; } wattron(win, active_attr); wmove(win, row++, 0); if (is_rownum) { waddstr(win, rowstr); wattroff(win, active_attr); continue; } if (rowstr != NULL) { int i = 0; int effective_row = row + srcy_bak - 1; /* row was incremented before, should be reduced */ bool fix_line_attr_style; bool is_expand_head; int ei_min, ei_max; int left_spaces; /* aux left spaces */ int saved_pos; bool is_top_deco = false; bool is_head_deco = false; bool is_bottom_deco = false; int trailing_spaces = 0; bool is_found_row = false; bool is_in_range = false; int bytes; char *ptr; if (is_text) nspecwords = parse_line(rowstr, specwords, 30); else nspecwords = 0; is_top_deco = effective_row == desc->border_top_row; is_head_deco = effective_row == desc->border_head_row; is_bottom_deco = effective_row == desc->border_bottom_row; is_found_row = scrdesc->found && scrdesc->found_row == effective_row; if (desc->is_expanded_mode) { fix_line_attr_style = effective_row >= desc->border_bottom_row; is_expand_head = is_expanded_header(rowstr, &ei_min, &ei_max); if (is_expand_head) { if (scrdesc->first_rec_title_y == -1) scrdesc->first_rec_title_y = row - 1; else scrdesc->last_rec_title_y = row - 1; } } else { if (!is_footer) { is_top_deco = effective_row == desc->border_top_row; is_head_deco = effective_row == desc->border_head_row; is_bottom_deco = effective_row == desc->border_bottom_row; fix_line_attr_style = is_top_deco || is_head_deco || is_bottom_deco; } else fix_line_attr_style = false; is_expand_head = false; } /* * To ensure visible column names how it can be possible, we should to * print column names directly (not like input document row. */ if (is_fix_rows_only && rowstr == desc->namesline ) { int loc_selected_xmin = INT_MIN; int loc_selected_xmax = INT_MIN; /* mark columns names only when columns are selected */ if (selected_xmin != INT_MIN && scrdesc->selected_first_row == -1) { loc_selected_xmin = selected_xmin; loc_selected_xmax = selected_xmax; } print_column_names(win, srcx, vcursor_xmin, vcursor_xmax, loc_selected_xmin, loc_selected_xmax, desc, opts, t); continue; } /* skip first srcx chars */ i = srcx; left_spaces = 0; while(i > 0) { if (*rowstr != '\0' && *rowstr != '\n') { i -= dsplen(rowstr); rowstr += charlen(rowstr); if (i < 0) left_spaces = -i; } else break; } /* Fix too hungry cutting when some multichar char is removed */ if (left_spaces > 0) { char *p; int aux_left_spaces = left_spaces; free_row = smalloc(left_spaces + strlen(rowstr) + 1); p = free_row; while (aux_left_spaces-- > 0) { *p++ = ' '; } strcpy(p, rowstr); rowstr = free_row; } else free_row = NULL; ptr = rowstr; bytes = 0; i = 0; saved_pos = srcx; /* find length of maxx characters */ if (*ptr != '\0') { bool is_selected_rows; bool is_selected_row; bool is_selected_columns; is_selected_rows = is_selectable && scrdesc->selected_first_row != -1; is_selected_row = rowno >= scrdesc->selected_first_row + 1 && rowno < scrdesc->selected_first_row + 1 + scrdesc->selected_rows; is_selected_columns = is_selectable && selected_xmin != INT_MIN; while (i < maxx) { bool is_cursor; bool is_cross_cursor = false; bool is_vertical_cursor = false; int pos = (i != -1) ? srcx + i : -1; bool skip_char = false; int specword_typ = 0; if (nspecwords > 0) { int j; for (j = 0; j < nspecwords; j++) { if (pos >= specwords[j].start_pos && pos <= specwords[j].end_pos) { specword_typ = specwords[j].typ; break; } } } is_in_range = false; if (is_selected_rows) { if (is_selected_row) { if (selected_xmin != INT_MIN && pos != -1) { if (pos >= selected_xmin && pos <= selected_xmax) is_in_range = true; } else is_in_range = true; } } else if (is_selected_columns && pos != -1) { if (pos >= selected_xmin && pos <= selected_xmax) is_in_range = true; } if (i != -1 && vcursor_xmin <= i && i <= vcursor_xmax) { is_cross_cursor = is_cursor_row; is_cursor = !is_cursor_row && !is_pattern_row; is_vertical_cursor = true; } else { is_cross_cursor = false; is_vertical_cursor = false; is_cursor = is_cursor_row; } if (is_expand_head && !is_pattern_row && !is_bookmark_row) { attr_t new_attr; if (is_cursor) new_attr = pos >= ei_min && pos <= ei_max ? t->cursor_expi_attr : t->cursor_line_attr; else new_attr = pos >= ei_min && pos <= ei_max ? t->expi_attr : t->line_attr; if (new_attr != active_attr) { if (bytes > 0) { waddnstr(win, rowstr, bytes); rowstr += bytes; bytes = 0; saved_pos = pos; } /* disable current style */ wattroff(win, active_attr); /* active new style */ active_attr = new_attr; wattron(win, active_attr); } } else if (!fix_line_attr_style) { attr_t new_attr = active_attr; bool print_acs_vline = false; char column_format; column_format = desc->headline_transl != NULL && pos >= 0 ? desc->headline_transl[pos] : ' '; if (opts->force_uniborder && desc->linestyle == 'a') { if (*(rowstr + left_spaces + bytes) == '|' && (column_format == 'L' || column_format == 'R' || column_format == 'I')) { print_acs_vline = true; } } if (is_in_range) { new_attr = is_cursor ? t->selection_cursor_attr : t->selection_attr; if (is_pattern_row && !is_cursor && is_in_searched_pattern(pos, scrdesc, lineinfo, positions, npositions)) new_attr = new_attr ^ A_REVERSE; } else if (is_cross_cursor) { new_attr = column_format == 'd' ? t->cross_cursor_attr : t->cross_cursor_line_attr; } else if (is_bookmark_row) { if (!is_cursor_row ) new_attr = column_format == 'd' ? t->bookmark_data_attr : t->bookmark_line_attr; else new_attr = t->cursor_bookmark_attr; } else if (is_pattern_row && !is_cursor) { if (is_footer) new_attr = t->pattern_data_attr; else if (is_vertical_cursor) new_attr = column_format == 'd' ? t->pattern_vertical_cursor_attr : t->pattern_vertical_cursor_line_attr; else if (pos < desc->headline_char_size) new_attr = column_format == 'd' ? t->pattern_data_attr : t->pattern_line_attr; if (new_attr == t->pattern_data_attr || new_attr == t->pattern_vertical_cursor_attr) { if (is_in_searched_pattern(pos, scrdesc, lineinfo, positions, npositions)) new_attr = t->found_str_attr; } } else if (is_footer) new_attr = is_cursor ? t->cursor_data_attr : t->data_attr; else if (pos < desc->headline_char_size) { if (is_cursor ) new_attr = column_format == 'd' ? t->cursor_data_attr : t->cursor_line_attr; else new_attr = column_format == 'd' ? t->data_attr : t->line_attr; } if (specword_typ == 1 || specword_typ == 2) new_attr |= A_BOLD; else if (specword_typ == 3) new_attr |= A_ITALIC | A_UNDERLINE; if (is_cursor || is_cross_cursor) { if (is_found_row && pos >= scrdesc->found_start_x && pos < scrdesc->found_start_x + scrdesc->searchterm_char_size) new_attr = new_attr ^ ( A_REVERSE | pattern_fix ); else if (is_pattern_row) { if (is_in_searched_pattern(pos, scrdesc, lineinfo, positions, npositions)) new_attr = t->cursor_pattern_attr; } } if (print_acs_vline && bytes > 0) { waddnstr(win, rowstr, bytes); rowstr += bytes; bytes = 0; saved_pos = pos; } if (new_attr != active_attr) { if (bytes > 0) { waddnstr(win, rowstr, bytes); rowstr += bytes; bytes = 0; saved_pos = pos; } /* disable current style */ wattroff(win, active_attr); /* active new style */ active_attr = new_attr; wattron(win, active_attr); } if (print_acs_vline) { waddch(win, ACS_VLINE); bytes = 0; rowstr += 1; /* * because we printed subst char already and we updated rowstr, * we don't would to increase bytes variable later. */ skip_char = true; } } else { if (!is_footer) { attr_t new_attr; if (is_in_range) new_attr = is_cursor ? t->selection_cursor_attr : t->selection_attr; else if (is_cross_cursor) new_attr = t->cross_cursor_line_attr; else if (is_cursor) new_attr = t->cursor_line_attr; else new_attr = t->line_attr; if (new_attr != active_attr) { if (bytes > 0) { flush_bytes(win, rowstr, bytes, saved_pos, is_top_deco, is_head_deco, is_bottom_deco, desc, opts); rowstr += bytes; bytes = 0; saved_pos = pos; } /* disable current style */ wattroff(win, active_attr); /* active new style */ active_attr = new_attr; wattron(win, active_attr); } } } if (*ptr != '\0') { int dlen = dsplen(ptr); int len = charlen(ptr); i = (dlen != -1 && i != -1) ? i + dlen : -1; ptr += len; if (!skip_char) bytes += len; } else { /* * psql reduces trailing spaces when border is 0 or 1. These spaces * should be printed after content. */ if (is_vertical_cursor && i != -1) { int ts1 = maxx - i + 1; int ts2 = vcursor_xmax - i + 1; trailing_spaces = ts1 < ts2 ? ts1 : ts2; } break; } } /* end while */ } if (bytes > 0) flush_bytes(win, rowstr, bytes, saved_pos, is_top_deco, is_head_deco, is_bottom_deco, desc, opts); /* print trailing spaces necessary for correct vertical cursor */ if (trailing_spaces > 0) { wrepeatspace(win, trailing_spaces); i += trailing_spaces; } /* When we don't position of last char, we can (for cursor draw) use 0 */ i = i != -1 ? i : 0; /* draw cursor or bookmark line to screen end of line */ if (i < maxx) { attr_t attr = 0; /* clean other chars on line */ wclrtoeol(win); if (is_in_range && is_cursor_row) attr = t->selection_cursor_attr; else if (is_in_range && !is_cursor_row) attr = t->selection_attr; else if (is_cursor_row && !is_bookmark_row) attr = t->cursor_data_attr; else if (!is_cursor_row && is_bookmark_row) attr = t->bookmark_data_attr; else if (is_cursor_row && is_bookmark_row) attr = t->cursor_bookmark_attr; else if (!is_cursor_row && is_pattern_row) attr = t->pattern_data_attr; if (attr) mvwchgat(win, row - 1, i, -1, attr, PAIR_NUMBER(attr), 0); } if (free_row != NULL) { free(free_row); free_row = NULL; } } else { wclrtobot(win); break; } wattroff(win, active_attr); } } #ifdef COLORIZED_NO_ALTERNATE_SCREEN static void ansi_colors(int pairno, short int *fc, short int *bc) { pair_content(pairno, fc, bc); *fc = *fc != -1 ? *fc + 30 : 39; *bc = *bc != -1 ? *bc + 40 : 49; } #endif static char * ansi_attr(attr_t attr) { #ifndef COLORIZED_NO_ALTERNATE_SCREEN (void) attr; return ""; #else static char result[20]; int pairno; short int fc, bc; pairno = PAIR_NUMBER(attr); ansi_colors(pairno, &fc, &bc); if ((attr & A_BOLD) != 0) { snprintf(result, 20, "\033[1;%d;%dm", fc, bc); } else snprintf(result, 20, "\033[0;%d;%dm", fc, bc); return result; #endif } /* * Print data to primary screen without ncurses */ static void draw_rectange(int offsety, int offsetx, /* y, x offset on screen */ int maxy, int maxx, /* size of visible rectangle */ int srcy, int srcx, /* offset to displayed data */ DataDesc *desc, attr_t data_attr, /* colors for data (alphanums) */ attr_t line_attr, /* colors for borders */ attr_t expi_attr, /* colors for expanded headers */ bool clreoln) /* force clear to eoln */ { int row; LineBufferIter lbi; attr_t active_attr; int srcy_bak = srcy; init_lbi_ddesc(&lbi, desc, srcy); row = 0; if (offsety) /* \033 is \e */ printf("\033[%dB", offsety); while (row < maxy) { char *rowstr = NULL; (void) lbi_get_line_next(&lbi, &rowstr, NULL, NULL); active_attr = line_attr; printf("%s", ansi_attr(active_attr)); row += 1; if (rowstr != NULL) { int i; int effective_row = row + srcy_bak - 1; /* row was incremented before, should be reduced */ bool fix_line_attr_style; bool is_expand_head; int ei_min, ei_max; int left_spaces; char *free_row; int bytes; char *ptr; if (desc->is_expanded_mode) { fix_line_attr_style = effective_row >= desc->border_bottom_row; is_expand_head = is_expanded_header(rowstr, &ei_min, &ei_max); } else { fix_line_attr_style = effective_row == desc->border_top_row || effective_row == desc->border_head_row || effective_row >= desc->border_bottom_row; is_expand_head = false; } if (offsetx != 0) printf("\033[%dC", offsetx); /* skip first srcx chars */ i = srcx; left_spaces = 0; while(i > 0) { if (*rowstr != '\0' && *rowstr != '\n') { i -= dsplen(rowstr); rowstr += charlen(rowstr); if (i < 0) left_spaces = -i; } else break; } /* Fix too hungry cutting when some multichar char is removed */ if (left_spaces > 0) { char *p; free_row = malloc(left_spaces + strlen(rowstr) + 1); if (!free_row) { fprintf(stderr, "out of memory"); exit(1); } p = free_row; while (left_spaces-- > 0) { *p++ = ' '; } strcpy(p, rowstr); rowstr = free_row; } else free_row = NULL; ptr = rowstr; bytes = 0; /* find length of maxx characters */ if (*ptr != '\0' && *ptr != '\n') { i = 0; while (i < maxx) { int pos = srcx + i; if (is_expand_head) { attr_t new_attr; new_attr = pos >= ei_min && pos <= ei_max ? expi_attr : line_attr; if (new_attr != active_attr) { if (bytes > 0) { printf("%.*s", bytes, rowstr); rowstr += bytes; bytes = 0; } /* active new style */ active_attr = new_attr; printf("%s", ansi_attr(active_attr)); } } else if (!fix_line_attr_style && desc->headline_transl != NULL) { if (pos < desc->headline_char_size) { attr_t new_attr; new_attr = desc->headline_transl[pos] == 'd' ? data_attr : line_attr; if (new_attr != active_attr) { if (bytes > 0) { printf("%.*s", bytes, rowstr); rowstr += bytes; bytes = 0; } /* active new style */ active_attr = new_attr; printf("%s", ansi_attr(active_attr)); } } } if (*ptr != '\0' && *ptr != '\n') { int len = charlen(ptr); i += dsplen(ptr); ptr += len; bytes += len; } else break; } } if (bytes > 0) { printf("%.*s", bytes, rowstr); if (clreoln) printf("\033[K"); printf("\n"); } if (free_row != NULL) { free(free_row); free_row = NULL; } } else break; } } void draw_data(Options *opts, ScrDesc *scrdesc, DataDesc *desc, int first_data_row, int first_row, int cursor_col, int footer_cursor_col, int fix_rows_offset) { struct winsize size; if (ioctl(fileno(stdout), TIOCGWINSZ, (char *) &size) >= 0) { int i; int expected_rows; expected_rows = min_int(size.ws_row - 1 - scrdesc->top_bar_rows, desc->last_row + 1); for (i = 0; i < expected_rows; i++) printf("\033D"); /* Go wit cursor to up */ printf("\033[%dA", expected_rows); /* now, the screen can be different, due prompt */ scrdesc->rows_rows = min_int(scrdesc->rows_rows, expected_rows - scrdesc->fix_rows_rows); /* * Save cursor - Attention, there are a Fedora29 bug, and it doesn't work */ printf("\0337"); if (scrdesc->fix_cols_cols > 0) { draw_rectange(scrdesc->fix_rows_rows, 0, scrdesc->rows_rows, scrdesc->fix_cols_cols, first_data_row + first_row - fix_rows_offset, 0, desc, COLOR_PAIR(4) | A_BOLD, 0, COLOR_PAIR(8) | A_BOLD, false); } if (scrdesc->fix_rows_rows > 0 ) { /* Go to saved position */ printf("\0338\0337"); draw_rectange(0, scrdesc->fix_cols_cols, scrdesc->fix_rows_rows, size.ws_col - scrdesc->fix_cols_cols, desc->title_rows + fix_rows_offset, scrdesc->fix_cols_cols + cursor_col, desc, COLOR_PAIR(4) | A_BOLD, 0, COLOR_PAIR(8) | A_BOLD, true); } if (scrdesc->fix_rows_rows > 0 && scrdesc->fix_cols_cols > 0) { /* Go to saved position */ printf("\0338\0337"); draw_rectange(0, 0, scrdesc->fix_rows_rows, scrdesc->fix_cols_cols, desc->title_rows + fix_rows_offset, 0, desc, COLOR_PAIR(4) | A_BOLD, 0, COLOR_PAIR(8) | A_BOLD, false); } if (scrdesc->rows_rows > 0) { /* Go to saved position */ printf("\0338\0337"); draw_rectange(scrdesc->fix_rows_rows, scrdesc->fix_cols_cols, scrdesc->rows_rows, size.ws_col - scrdesc->fix_cols_cols, first_data_row + first_row - fix_rows_offset, scrdesc->fix_cols_cols + cursor_col, desc, opts->theme == 2 ? A_BOLD : 0, opts->theme == 2 && (desc->headline_transl == NULL) ? A_BOLD : 0, COLOR_PAIR(8) | A_BOLD, true); } if (w_footer(scrdesc) != NULL) { /* Go to saved position */ printf("\0338\0337"); draw_rectange(scrdesc->fix_rows_rows + scrdesc->rows_rows, 0, scrdesc->footer_rows, scrdesc->maxx, first_data_row + first_row + scrdesc->rows_rows - fix_rows_offset, footer_cursor_col, desc, COLOR_PAIR(9), 0, 0, true); } /* reset */ printf("\033[0m\r"); } } pspg-5.8.1/src/pspg.c000066400000000000000000005102231452457446400144240ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * pspg.c * a terminal pager designed for usage from psql * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/pspg.c * *------------------------------------------------------------------------- */ #define PDC_NCMOUSE #if defined HAVE_NCURSESW_CURSES_H #include #elif defined HAVE_NCURSESW_H #include #elif defined HAVE_NCURSES_CURSES_H #include #elif defined HAVE_NCURSES_H #include #elif defined HAVE_CURSES_H #include #else /* fallback */ #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef GWINSZ_IN_SYS_IOCTL #include #endif #ifdef PDCURSES #include #endif #include #include #include "commands.h" #include "config.h" #include "inputs.h" #include "pspg.h" #include "themes.h" #include "unicode.h" #ifdef COMPILE_MENU #include "st_menu.h" #endif #ifdef DEBUG_PIPE /* used for mallinfo */ #include #endif #ifdef PDCURSES #define BUTTON_CTRL BUTTON_MODIFIER_CONTROL #endif #ifndef NCURSES_CONST #define NCURSES_CONST const #endif static char last_row_search[256]; static char last_col_search[256]; static char last_line[256]; static char last_path[1025]; static char last_rows_number[256]; static char last_table_name[256]; static char last_nullstr[256]; static char cmdline[1024]; static const char *cmdline_ptr = 0; int clipboard_application_id = 0; #define USE_EXTENDED_NAMES #ifdef DEBUG_PIPE FILE *debug_pipe = NULL; int debug_eventno = 0; static void print_memory_stats(bool enable_memory_debug); #endif static long last_watch_ms = 0; static time_t last_watch_sec = 0; /* time when we did last refresh */ static bool paused = false; /* true, when watch mode is paused */ static bool active_ncurses = false; static bool xterm_mouse_mode_was_initialized = false; static int number_width(int num); static void set_scrollbar(ScrDesc *scrdesc, DataDesc *desc, int first_row); static bool check_visible_vertical_cursor(DataDesc *desc, Options *opts, int vertical_cursor_column); static void print_status(Options *opts, ScrDesc *scrdesc, DataDesc *desc); StateData *current_state = NULL; static struct sigaction old_sigsegv_handler; /* * Global error buffer - used for building and storing a error messages */ char pspg_errstr_buffer[PSPG_ERRSTR_BUFFER_SIZE]; /* * Global setting */ bool use_utf8; bool quiet_mode = false; /* * Global state variables */ bool handle_sigint = false; bool handle_sigwinch = false; WINDOW *prompt_window = NULL; attr_t prompt_window_input_attr = 0; attr_t prompt_window_error_attr = 0; attr_t prompt_window_info_attr = 0; typedef enum { MARK_MODE_NONE, MARK_MODE_ROWS, /* activated by F3 */ MARK_MODE_BLOCK, /* activated by F15 ~ Shift F3 */ MARK_MODE_CURSOR, /* activated by SHIFT + CURSOR */ MARK_MODE_MOUSE, /* activated by CTRL + MOUSE */ MARK_MODE_MOUSE_COLUMNS,/* activated by CTRL + MOUSE on column headers */ MARK_MODE_MOUSE_BLOCK, /* activated by ALT + MOUSE */ } MarkModeType; /* * Static variables */ static int vertical_cursor_column = -1; /* table columns are counted from one */ static int cursor_col = 0; static int cursor_row = 0; static int footer_cursor_col = 0; static int first_row = 0; static int first_data_row; static int mouse_row = -1; static int mouse_col = -1; static int default_freezed_cols = 1; static int fixedRows = -1; /* detect automatically (not yet implemented option) */ static int fix_rows_offset = 0; static int fix_hide_header_line = 0; static MarkModeType mark_mode = MARK_MODE_NONE; static int mark_mode_start_row = 0; static int mark_mode_start_col = 0; static bool recheck_vertical_cursor_visibility = false; #ifdef COMPILE_MENU static bool menu_is_active = false; static struct ST_MENU *menu = NULL; static struct ST_CMDBAR *cmdbar = NULL; #endif #ifdef DEBUG_PIPE static time_t start_app_sec; static long start_app_ms; #endif typedef void (*__sigt)(int); /* * Own signal handlers */ static void SigintHandler(int sig_num) { UNUSED(sig_num); signal(SIGINT, SigintHandler); handle_sigint = true; } #ifndef PDCURSES static void SigwinchHandler(int sig_num) { UNUSED(sig_num); signal(SIGWINCH, SigwinchHandler); handle_sigwinch = true; } #endif static void SigtermHandler(int sig_num) { UNUSED(sig_num); signal(SIGTERM, SigtermHandler); /* force own exit_handler routine */ exit(EXIT_FAILURE); } /* Custom SIGSEGV handler. */ void SigsegvHandler (int sig) { exit_handler(); log_row("pspg crashed by Sig %d\n", sig); fprintf(stderr, "pspg crashed by signal %d\n", sig); if (logfile) { fclose(logfile); logfile = NULL; } /* Call old sigsegv handler; may be default exit or third party one (e.g. ASAN) */ sigaction (SIGSEGV, &old_sigsegv_handler, NULL); } /* Set up sigsegv handler. */ static void setup_sigsegv_handler(void) { struct sigaction act; sigemptyset (&act.sa_mask); act.sa_flags = (int) SA_RESETHAND; act.sa_handler = SigsegvHandler; sigaction(SIGSEGV, &act, &old_sigsegv_handler); } inline int min_int(int a, int b) { return a < b ? a : b; } inline int max_int(int a, int b) { return a > b ? a : b; } /* * The argument "b" should be >= "a" or it should be ignored * and "a" is used instead "b". */ int trim_to_range(int v, int a, int b) { /* * if second parameter is below a, result should be a, * because the interval is [a, a]. */ if (b <= a) return a; if (v <= a) return a; if (v > b) return b; return v; } void current_time(time_t *sec, long *ms) { struct timespec spec; clock_gettime(CLOCK_MONOTONIC, &spec); *ms = roundl(spec.tv_nsec / 1.0e6); *sec = spec.tv_sec; } inline void enable_xterm_mouse_mode(bool enable_mode) { if (enable_mode) { fprintf(stdout, "\033[?1002h"); fflush(stdout); xterm_mouse_mode_was_initialized = true; log_row("xterm mouse mode 1002 activated"); } else { xterm_mouse_mode_was_initialized = false; log_row("xterm mouse mode 1002 is not activated"); } } inline bool disable_xterm_mouse_mode(void) { if (xterm_mouse_mode_was_initialized) { fprintf(stdout, "\033[?1002l"); fflush(stdout); xterm_mouse_mode_was_initialized = false; log_row("xterm mouse mode 1002 is deactivated"); return true; } else { log_row("xterm mouse mode 1002 is not active"); return false; } } #ifdef DEBUG_PIPE static void print_duration(time_t start_sec, long start_ms, const char *label) { time_t end_sec; long end_ms; current_time(&end_sec, &end_ms); fprintf(debug_pipe, "duration of \"%s\" is %ld ms\n", label, time_diff(end_sec, end_ms, start_sec, start_ms)); } #endif /* * Multiple used block - searching in string based on configuration */ const char * pspg_search(Options *opts, ScrDesc *scrdesc, const char *str) { bool ignore_case = opts->ignore_case; bool ignore_lower_case = opts->ignore_lower_case; bool has_upperchr = scrdesc->has_upperchr; const char *searchterm = scrdesc->searchterm; const char *result; if (ignore_case || (ignore_lower_case && !has_upperchr)) { result = use_utf8 ? utf8_nstrstr(str, searchterm) : nstrstr(str, searchterm); } else if (ignore_lower_case && has_upperchr) { result = use_utf8 ? utf8_nstrstr_ignore_lower_case(str, searchterm) : nstrstr_ignore_lower_case(str, searchterm); } else result = strstr(str, searchterm); return result; } /* * Trim footer rows - We should to trim footer rows and calculate footer_char_size */ static void trim_footer_rows(DataDesc *desc) { if (desc->headline_transl != NULL && desc->footer_row != -1) { LineBufferIter lbi; char *line; desc->footer_char_size = 0; init_lbi_ddesc(&lbi, desc, desc->footer_row); while(lbi_get_line_next(&lbi, &line, NULL, NULL)) { char *ptr = line; char *last_nspc = NULL; int len; /* search last non space char */ while (*ptr) { if (*ptr != ' ') last_nspc = ptr; ptr += 1; } if (last_nspc) *(last_nspc + 1) = '\0'; else *line = '\0'; len = use_utf8 ? utf8len(line) : (int) strlen(line); if (len > desc->footer_char_size) desc->footer_char_size = len; } } else desc->footer_char_size = desc->maxx; } static void set_scrollbar_dimensions(Options *opts, DataDesc *desc, ScrDesc *scrdesc) { if (opts->show_scrollbar) { int saved_slider_min_y = 0; /* * The relayout can be invoked in scrollbar mode too (when we try * to change visibility of footer window (data)). Unfortunatelly, * inside layout initialization we init slider position to. In * this case we want to preserve an slider position. */ if (scrdesc->scrollbar_mode) saved_slider_min_y = scrdesc->slider_min_y; /* show scrollbar only when display is less than data */ if (scrdesc->main_maxy < desc->last_row + 1) { Theme *t; int num_width; /* * This calculation can be processed repeatedly, so we need to * calculate main_maxx absolutely. */ num_width = opts->show_rownum ? number_width(desc->maxy) + 2 : 0; scrdesc->main_maxx = scrdesc->maxx - num_width - 1; t = &scrdesc->themes[WINDOW_VSCROLLBAR]; scrdesc->scrollbar_x = scrdesc->maxx - 1; scrdesc->scrollbar_start_y = scrdesc->main_start_y; scrdesc->scrollbar_maxy = scrdesc->main_maxy; if (t->scrollbar_slider_symbol) scrdesc->slider_size = 1; else if (scrdesc->scrollbar_maxy > 4) { scrdesc->slider_size = round(((double) scrdesc->main_maxy - scrdesc->fix_rows_rows) * ((double) scrdesc->main_maxy - 2) / ((double) desc->last_row - desc->fixed_rows + 1)); if (scrdesc->slider_size < 2) scrdesc->slider_size = 2; } else scrdesc->slider_size = 1; scrdesc->slider_min_y = 1; } else scrdesc->scrollbar_x = -1; /* restore saved slider position */ if (scrdesc->scrollbar_mode) scrdesc->slider_min_y = saved_slider_min_y; } else scrdesc->scrollbar_x = -1; } /* * Prepare dimensions of windows layout */ static void create_layout_dimensions(Options *opts, ScrDesc *scrdesc, DataDesc *desc, int fixCols, int fixRows, int maxy, int maxx) { scrdesc->maxy = maxy; scrdesc->maxx = maxx; if (opts->show_rownum) { int startx = number_width(desc->maxy) + 2; scrdesc->main_start_x = startx; scrdesc->main_maxx -= startx; } fix_hide_header_line = 0; scrdesc->fix_cols_cols = 0; /* search end of fixCol'th column */ if (desc->headline_transl != NULL && fixCols > 0) { char *c = desc->headline_transl; while (*c != 0) { if (*c == 'I' && --fixCols == 0) { scrdesc->fix_cols_cols = c - desc->headline_transl + 1; break; } c += 1; } } scrdesc->fix_rows_rows = 0; scrdesc->footer_rows = 0; if (fixRows != -1) { scrdesc->fix_rows_rows = fixRows; } else if (!desc->is_expanded_mode && desc->border_head_row != -1 && desc->headline_transl != NULL) { scrdesc->fix_rows_rows = desc->border_head_row + 1 - desc->title_rows; if (opts->hide_header_line && scrdesc->fix_rows_rows > 1) { scrdesc->fix_rows_rows -= 1; fix_hide_header_line = 1; } } /* disable fixed parts when is not possible draw in screen */ if (scrdesc->fix_cols_cols > scrdesc->main_maxx) scrdesc->fix_cols_cols = 0; if (scrdesc->fix_rows_rows > scrdesc->main_maxy) scrdesc->fix_rows_rows = 0; if (scrdesc->fix_rows_rows == 0 && !desc->is_expanded_mode) { desc->title_rows = 0; desc->title[0] = '\0'; } desc->fixed_rows = scrdesc->fix_rows_rows; set_scrollbar_dimensions(opts, desc, scrdesc); } static void create_layout(Options *opts, ScrDesc *scrdesc, DataDesc *desc, int _first_data_row) { int i; for (i = 0; i < PSPG_WINDOW_COUNT; i++) { if (i != WINDOW_TOP_BAR && i != WINDOW_BOTTOM_BAR) { if (scrdesc->wins[i]) { delwin(scrdesc->wins[i]); scrdesc->wins[i] = NULL; } } } if (desc->headline_transl != NULL && desc->footer_row > 0) { int rows_rows = desc->footer_row - first_row - _first_data_row; int data_rows; /* desc->footer_row == desc->first_data_row when result is empty */ if (rows_rows > 0 || desc->footer_row == desc->first_data_row) { data_rows = scrdesc->main_maxy - desc->fixed_rows; scrdesc->rows_rows = min_int(rows_rows, data_rows); } else { int new_fix_rows_rows = scrdesc->fix_rows_rows + rows_rows - 1; scrdesc->fix_rows_rows = new_fix_rows_rows > 0 ? new_fix_rows_rows : 0; scrdesc->rows_rows = new_fix_rows_rows >= 0 ? 1 : 0; data_rows = scrdesc->main_maxy - scrdesc->fix_rows_rows; } /* * Footer window fill all remaining space. */ scrdesc->footer_rows = data_rows - scrdesc->rows_rows; if (scrdesc->footer_rows > 0) { w_footer(scrdesc) = subwin(stdscr, scrdesc->footer_rows, scrdesc->main_maxx, scrdesc->main_start_y + scrdesc->fix_rows_rows + scrdesc->rows_rows, scrdesc->main_start_x); } } else if (desc->headline_transl != NULL) { scrdesc->rows_rows = scrdesc->main_maxy - scrdesc->fix_rows_rows; } else { scrdesc->rows_rows = 0; scrdesc->fix_rows_rows = 0; scrdesc->footer_rows = min_int(scrdesc->main_maxy, desc->last_row + 1); w_footer(scrdesc) = subwin(stdscr, scrdesc->footer_rows, scrdesc->main_maxx, scrdesc->main_start_y, scrdesc->main_start_x); } if (scrdesc->fix_rows_rows > 0) { w_fix_rows(scrdesc) = subwin(stdscr, scrdesc->fix_rows_rows, scrdesc->main_maxx - scrdesc->fix_cols_cols, scrdesc->main_start_y, scrdesc->fix_cols_cols + scrdesc->main_start_x); } if (scrdesc->fix_cols_cols > 0 && scrdesc->rows_rows > 0) { w_fix_cols(scrdesc) = subwin(stdscr, scrdesc->rows_rows, scrdesc->fix_cols_cols, scrdesc->fix_rows_rows + scrdesc->main_start_y, scrdesc->main_start_x); } if (scrdesc->fix_rows_rows > 0 && scrdesc->fix_cols_cols > 0) { w_luc(scrdesc) = subwin(stdscr, scrdesc->fix_rows_rows, scrdesc->fix_cols_cols, scrdesc->main_start_y, scrdesc->main_start_x); } if (scrdesc->rows_rows > 0) { w_rows(scrdesc) = subwin(stdscr, scrdesc->rows_rows, scrdesc->main_maxx - scrdesc->fix_cols_cols, scrdesc->fix_rows_rows + scrdesc->main_start_y, scrdesc->fix_cols_cols + scrdesc->main_start_x); } if (scrdesc->fix_rows_rows > 0 && opts->show_rownum) { Theme *theme = &scrdesc->themes[WINDOW_ROWNUM_LUC]; w_rownum_luc(scrdesc) = subwin(stdscr, scrdesc->fix_rows_rows, scrdesc->main_start_x, scrdesc->main_start_y, 0); wbkgd(w_rownum_luc(scrdesc), theme->data_attr); } if (scrdesc->rows_rows + scrdesc->footer_rows > 0 && opts->show_rownum) { w_rownum(scrdesc) = subwin(stdscr, scrdesc->rows_rows + scrdesc->footer_rows, scrdesc->main_start_x, scrdesc->fix_rows_rows + scrdesc->main_start_y, 0); } if (opts->show_scrollbar) { w_vscrollbar(scrdesc) = subwin(stdscr, scrdesc->scrollbar_maxy, 1, scrdesc->scrollbar_start_y, scrdesc->scrollbar_x); } } /* * Refresh aux windows like top bar or bottom bar. */ static void refresh_aux_windows(Options *opts, ScrDesc *scrdesc) { int maxy, maxx; WINDOW *top_bar = w_top_bar(scrdesc); WINDOW *bottom_bar = w_bottom_bar(scrdesc); getmaxyx(stdscr, maxy, maxx); if (top_bar != NULL) { delwin(top_bar); top_bar = NULL; w_top_bar(scrdesc) = NULL; } if (opts->menu_always) scrdesc->top_bar_rows = 1; else if (opts->no_topbar) scrdesc->top_bar_rows = 0; else { scrdesc->top_bar_rows = 1; #ifdef PDCURSES /* * bug in pdcurses, width should be exactly specified */ top_bar = subwin(stdscr, 1, maxx, 0, 0); #else top_bar = subwin(stdscr, 1, 0, 0, 0); #endif wbkgd(top_bar, ncurses_theme_attr(PspgTheme_status_bar)); wnoutrefresh(top_bar); w_top_bar(scrdesc) = top_bar; } if (bottom_bar != NULL) { delwin(bottom_bar); bottom_bar = NULL; w_bottom_bar(scrdesc) = NULL; } /* * bottom_bar should be created every time - it can be used * for an alerts, but sometimes, it should not be visible. */ bottom_bar = subwin(stdscr, 1, 0, maxy - 1, 0); w_bottom_bar(scrdesc) = bottom_bar; /* When it is visible, clean content and set background */ if (opts->less_status_bar #ifdef COMPILE_MENU || !opts->no_commandbar #endif ) { werase(bottom_bar); /* data colours are better than default */ wbkgd(bottom_bar, ncurses_theme_attr(PspgTheme_data)); wnoutrefresh(bottom_bar); } scrdesc->main_maxy = maxy; scrdesc->main_maxx = maxx; scrdesc->main_start_y = 0; scrdesc->main_start_x = 0; if (scrdesc->top_bar_rows > 0) { scrdesc->main_maxy -= scrdesc->top_bar_rows; scrdesc->main_start_y = scrdesc->top_bar_rows; } if (opts->less_status_bar #ifdef COMPILE_MENU || !opts->no_commandbar #endif ) scrdesc->main_maxy -= 1; /* * Store ref to bottom bar to global variable */ prompt_window = bottom_bar; /* * Readline requires disabled keypad */ keypad(prompt_window, FALSE); /* * This looks like obscure code, but it is necessary. The key processing * is terminal feature, and ncurses switches the terminal mode by commands * smkx and rmkx. keypad function sends these codes. The wgetch function * sendes these codes too in dependency on window configuration. But because * pspg uses own instance of poll function, then wgetch function is called * after of moment when terminal generates input sequence related to keyboard * event. So because last sent command to terminal was rmkx (related to * keypad(win, FALSE), its is need to activate keypad on terminal again, so * first keypad event will be processed with activated keypad. */ keypad(stdscr, TRUE); /* * Used for detection of terminal resize in edit time. The terminal * resize interrupts editing. I have not possibility how to force * refresh layout from get_string routine. Canceling editing is most * simply and good enough solution. */ wtimeout(prompt_window, 10000); } /* * Refresh ncurses internal metric when terminal was resized */ void refresh_terminal_size(void) { int maxy, maxx; #ifndef PDCURSES struct winsize size; if (ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *) &size) >= 0) { resize_term(size.ws_row, size.ws_col); log_row("new terminal size %d %d", size.ws_row, size.ws_col); } #endif getmaxyx(stdscr, maxy, maxx); log_row("info: stdscr - maxy: %d, maxx: %d", maxy, maxx); current_state->scrdesc->maxy = maxy; current_state->scrdesc->maxx = maxx; } void refresh_layout_after_terminal_resize(void) { ScrDesc *scrdesc; DataDesc *desc; Options *opts; int maxy, maxx; scrdesc = current_state->scrdesc; desc = current_state->desc; opts = current_state->opts; getmaxyx(stdscr, maxy, maxx); refresh_aux_windows(opts, scrdesc); create_layout_dimensions(opts, scrdesc, desc, opts->freezed_cols != -1 ? opts->freezed_cols : default_freezed_cols, fixedRows, maxy, maxx); create_layout(opts, scrdesc, desc, first_data_row); /* recheck visibility of vertical cursor. now we have fresh fix_cols_cols data */ if (recheck_vertical_cursor_visibility && vertical_cursor_column > 0) { int vminx = desc->cranges[vertical_cursor_column - 1].xmin; int left_border = scrdesc->fix_cols_cols + cursor_col - 1; if (vminx < left_border) cursor_col = vminx - scrdesc->fix_cols_cols + 1; } #ifdef COMPILE_MENU if (cmdbar) cmdbar = init_cmdbar(cmdbar, opts); #endif set_scrollbar(scrdesc, desc, first_row); } /* * This rotine is separated from event loop, because it should be * called from edit string routine (when terminal is resized). It * uses lot of global variables. These variables are state variables, * and it is more simply use as global, then passing to state var or * somwhere else. */ void redraw_screen(void) { ScrDesc *scrdesc; DataDesc *desc; Options *opts; int vcursor_xmin_fix = -1; int vcursor_xmax_fix = -1; int vcursor_xmin_data = -1; int vcursor_xmax_data = -1; int selected_xmin = INT_MIN; int selected_xmax = INT_MIN; int i; time_t current_sec; long current_ms; static time_t last_doupdate_sec = -1; static long last_doupdate_ms = -1; #ifdef DEBUG_PIPE time_t start_doupdate_sec; long start_doupdate_ms; time_t start_draw_sec; long start_draw_ms; static bool first_doupdate = true; #endif scrdesc = current_state->scrdesc; desc = current_state->desc; opts = current_state->opts; if (opts->vertical_cursor && desc->columns > 0 && vertical_cursor_column > 0) { int vcursor_xmin = desc->cranges[vertical_cursor_column - 1].xmin; int vcursor_xmax = desc->cranges[vertical_cursor_column - 1].xmax; if (vcursor_xmin < scrdesc->fix_cols_cols) { vcursor_xmin_fix = vcursor_xmin; vcursor_xmin_data = vcursor_xmin - scrdesc->fix_cols_cols; } else { vcursor_xmin_fix = vcursor_xmin - cursor_col; vcursor_xmin_data = vcursor_xmin - scrdesc->fix_cols_cols - cursor_col; } if (vcursor_xmax < scrdesc->fix_cols_cols) { vcursor_xmax_fix = vcursor_xmax; vcursor_xmax_data = vcursor_xmax - scrdesc->fix_cols_cols; } else { vcursor_xmax_fix = vcursor_xmax - cursor_col; vcursor_xmax_data = vcursor_xmax - scrdesc->fix_cols_cols - cursor_col; } /* * When vertical cursor is not in freezed columns, then it cannot to * overwrite fixed col cols. Only last char position can be shared. */ if (vertical_cursor_column > (opts->freezed_cols > -1 ? opts->freezed_cols : default_freezed_cols)) if (vcursor_xmin_fix < scrdesc->fix_cols_cols - 1) vcursor_xmin_fix = scrdesc->fix_cols_cols - 1; } /* Calculate selected range in mark mode */ if (mark_mode != MARK_MODE_NONE) { int ref_row; int ref_col; switch (mark_mode) { case MARK_MODE_MOUSE: case MARK_MODE_MOUSE_BLOCK: ref_row = mouse_row; break; case MARK_MODE_ROWS: case MARK_MODE_BLOCK: case MARK_MODE_CURSOR: ref_row = cursor_row; break; default: ref_row = -1; } if (mark_mode == MARK_MODE_MOUSE_BLOCK || mark_mode == MARK_MODE_MOUSE_COLUMNS) ref_col = mouse_col; else if (mark_mode == MARK_MODE_BLOCK) ref_col = vertical_cursor_column; else ref_col = -1; if (ref_row != -1) { if (ref_row > mark_mode_start_row) { scrdesc->selected_first_row = mark_mode_start_row; scrdesc->selected_rows = ref_row - mark_mode_start_row + 1; } else { scrdesc->selected_first_row = ref_row; scrdesc->selected_rows = mark_mode_start_row - ref_row + 1; } } if (ref_col != -1) { int xmin, xmax; if (ref_col > mark_mode_start_col) { xmin = desc->cranges[mark_mode_start_col - 1].xmin; xmax = desc->cranges[ref_col - 1].xmax; } else { xmax = desc->cranges[mark_mode_start_col - 1].xmax; xmin = desc->cranges[ref_col - 1].xmin; } scrdesc->selected_first_column = xmin; scrdesc->selected_columns = xmax - xmin + 1; } } if (scrdesc->selected_first_column != -1) { selected_xmin = scrdesc->selected_first_column; selected_xmax = selected_xmin + scrdesc->selected_columns - 1; } /* * fix of unwanted visual artefact on an border between * fix_cols window and row window, because there are * overlap of columns on vertical column decoration. */ if (selected_xmin == scrdesc->fix_cols_cols - 1 && selected_xmax < scrdesc->fix_cols_cols + cursor_col) selected_xmin += 1; else if (selected_xmin >= scrdesc->fix_cols_cols && selected_xmin < scrdesc->fix_cols_cols + cursor_col && selected_xmax >= scrdesc->fix_cols_cols + cursor_col) selected_xmin = scrdesc->fix_cols_cols - 1; #ifdef DEBUG_PIPE current_time(&start_draw_sec, &start_draw_ms); #endif window_fill(WINDOW_LUC, desc->title_rows + desc->fixed_rows - scrdesc->fix_rows_rows, 0, -1, vcursor_xmin_fix, vcursor_xmax_fix, selected_xmin, selected_xmax, desc, scrdesc, opts); window_fill(WINDOW_ROWS, first_data_row + first_row - fix_rows_offset, scrdesc->fix_cols_cols + cursor_col, cursor_row - first_row + fix_rows_offset, vcursor_xmin_data, vcursor_xmax_data, selected_xmin, selected_xmax, desc, scrdesc, opts); window_fill(WINDOW_FIX_COLS, first_data_row + first_row - fix_rows_offset, 0, cursor_row - first_row + fix_rows_offset, vcursor_xmin_fix, vcursor_xmax_fix, selected_xmin, selected_xmax, desc, scrdesc, opts); window_fill(WINDOW_FIX_ROWS, desc->title_rows + desc->fixed_rows - scrdesc->fix_rows_rows, scrdesc->fix_cols_cols + cursor_col, -1, vcursor_xmin_data, vcursor_xmax_data, selected_xmin, selected_xmax, desc, scrdesc, opts); window_fill(WINDOW_FOOTER, first_data_row + first_row + scrdesc->rows_rows - fix_rows_offset, footer_cursor_col, cursor_row - first_row - scrdesc->rows_rows + fix_rows_offset, -1, -1, INT_MIN, INT_MIN, desc, scrdesc, opts); window_fill(WINDOW_ROWNUM_LUC, 0, 0, 0, -1, -1, INT_MIN, INT_MIN, desc, scrdesc, opts); window_fill(WINDOW_ROWNUM, first_data_row + first_row - fix_rows_offset, 0, cursor_row - first_row + fix_rows_offset, -1, -1, INT_MIN, INT_MIN, desc, scrdesc, opts); window_fill(WINDOW_VSCROLLBAR, 0, 0, cursor_row, -1, -1, INT_MIN, INT_MIN, desc, scrdesc, opts); for (i = 0; i < PSPG_WINDOW_COUNT; i++) { if (i != WINDOW_TOP_BAR && i != WINDOW_BOTTOM_BAR) { if (scrdesc->wins[i]) wnoutrefresh(scrdesc->wins[i]); } } #ifdef DEBUG_PIPE print_duration(start_draw_sec, start_draw_ms, "draw time"); #endif print_status(opts, scrdesc, desc); if (scrdesc->wins[WINDOW_TOP_BAR]) wnoutrefresh(scrdesc->wins[WINDOW_TOP_BAR]); #ifdef COMPILE_MENU if (cmdbar) st_cmdbar_post(cmdbar); if (menu != NULL && menu_is_active) { st_menu_set_focus(menu, ST_MENU_FOCUS_FULL); st_menu_post(menu); } else if (opts->menu_always) st_menu_post(menu); #endif #ifdef DEBUG_PIPE current_time(&start_doupdate_sec, &start_doupdate_ms); #endif if (!opts->no_sleep) { current_time(¤t_sec, ¤t_ms); /* * We don't want do UPDATE too quickly. */ if ( #ifdef COMPILE_MENU !menu_is_active && #endif last_doupdate_sec != -1 && !opts->no_mouse && !(mark_mode == MARK_MODE_MOUSE || mark_mode == MARK_MODE_MOUSE_BLOCK || mark_mode == MARK_MODE_MOUSE_COLUMNS)) { long td = time_diff(current_sec, current_ms, last_doupdate_sec, last_doupdate_ms); if (td < 15) usleep((15 - td) * 1000); } } doupdate(); current_time(¤t_sec, ¤t_ms); last_doupdate_sec = current_sec; last_doupdate_ms = current_ms; #ifdef DEBUG_PIPE print_duration(start_doupdate_sec, start_doupdate_ms, "doupdate"); #endif current_time(¤t_sec, ¤t_ms); last_doupdate_sec = current_sec; last_doupdate_ms = current_ms; #ifdef DEBUG_PIPE if (first_doupdate) { first_doupdate = false; print_duration(start_app_sec, start_app_ms, "first view"); } #endif } /* * Returns width of number */ static int number_width(int num) { if (num < 10) return 1; if (num < 100) return 2; if (num < 1000) return 3; if (num < 10000) return 4; if (num < 100000) return 5; if (num < 1000000) return 6; if (num < 10000000) return 7; return 8; } /* * returns true when cursor is on footer window */ static bool is_footer_cursor(int _cursor_row, ScrDesc *scrdesc, DataDesc *desc) { if (w_footer(scrdesc) == NULL) return false; else if (scrdesc->rows_rows == 0) return true; return _cursor_row + scrdesc->fix_rows_rows + desc->title_rows + 1 > desc->footer_row; } static void print_status(Options *opts, ScrDesc *scrdesc, DataDesc *desc) { char buffer[200]; WINDOW *top_bar = w_top_bar(scrdesc); WINDOW *bottom_bar = w_bottom_bar(scrdesc); Theme *top_bar_theme = &scrdesc->themes[WINDOW_TOP_BAR]; Theme *bottom_bar_theme = &scrdesc->themes[WINDOW_BOTTOM_BAR]; /* do nothing when there are not top status bar */ if (scrdesc->top_bar_rows > 0) { int maxy, maxx; int smaxy, smaxx; getmaxyx(top_bar, maxy, maxx); getmaxyx(stdscr, smaxy, smaxx); UNUSED(maxy); wbkgd(top_bar, current_state->errstr ? bottom_bar_theme->error_attr : top_bar_theme->status_bar_attr); werase(top_bar); if ((desc->title[0] != '\0' || desc->filename[0] != '\0') && !current_state->errstr) { wattron(top_bar, top_bar_theme->title_attr); if (desc->title[0] != '\0' && desc->title_rows > 0) mvwprintw(top_bar, 0, 0, "%s", desc->title); else if (desc->filename[0] != '\0') mvwprintw(top_bar, 0, 0, "%s", desc->filename); wattroff(top_bar, top_bar_theme->title_attr); } if (opts->watch_time > 0 || current_state->errstr) { if (last_watch_sec > 0) { long ms, td; time_t sec; struct timespec spec; int w = number_width(opts->watch_time); int x = 0; clock_gettime(CLOCK_MONOTONIC, &spec); ms = roundl(spec.tv_nsec / 1.0e6); sec = spec.tv_sec; td = (sec - last_watch_sec) * 1000 + ms - last_watch_ms; if (!current_state->errstr && (desc->title[0] != '\0' || desc->filename[0] != '\0')) x = maxx / 4; if (paused) mvwprintw(top_bar, 0, x, "paused %ld sec", td / 1000); else mvwprintw(top_bar, 0, x, "%*ld/%d", w, td/1000 + 1, opts->watch_time); } if (current_state->errstr) { int i; char *ptr = buffer; /* copy first row to buffer */ for (i = 0; i < 200; i++) if (current_state->errstr[i] == '\0' || current_state->errstr[i] == '\n') { *ptr = '\0'; break; } else *ptr++ = current_state->errstr[i]; wprintw(top_bar, " %s", buffer); return; } } if (desc->headline_transl) { /* tabular doc */ if (opts->no_cursor) { double percent; percent = (first_row + scrdesc->main_maxy - 1 - desc->fixed_rows - desc->title_rows) / ((double) (desc->maxy + 1 - desc->fixed_rows - desc->title_rows)) * 100.0; percent = percent > 100.0 ? 100.0 : percent; if (opts->vertical_cursor && desc->columns > 0 && vertical_cursor_column > 0) { int vminx = desc->cranges[vertical_cursor_column - 1].xmin; int vmaxx = desc->cranges[vertical_cursor_column - 1].xmax; snprintf(buffer, 199, "V:[%*d/%*d %*d..%*d] [FC:%*d C:%*d..%*d/%*d L:%*d/%*d %3.0f%%", number_width(desc->columns), vertical_cursor_column, number_width(desc->columns), desc->columns, number_width(desc->headline_char_size), vminx + 1, number_width(desc->headline_char_size), vmaxx + 1, number_width(desc->headline_char_size), scrdesc->fix_cols_cols, number_width(desc->headline_char_size), cursor_col + scrdesc->fix_cols_cols + 1, number_width(desc->headline_char_size), min_int(smaxx + cursor_col, desc->headline_char_size), number_width(desc->headline_char_size), desc->headline_char_size, number_width(desc->maxy - desc->fixed_rows), first_row + scrdesc->main_maxy - fix_rows_offset - desc->fixed_rows - desc->title_rows, number_width(desc->maxy - desc->fixed_rows - desc->title_rows), desc->maxy + 1 - desc->fixed_rows - desc->title_rows, percent); } else { snprintf(buffer, 199, "FC:%*d C:%*d..%*d/%*d L:%*d/%*d %3.0f%%", number_width(desc->headline_char_size), scrdesc->fix_cols_cols, number_width(desc->headline_char_size), cursor_col + scrdesc->fix_cols_cols + 1, number_width(desc->headline_char_size), min_int(smaxx + cursor_col, desc->headline_char_size), number_width(desc->headline_char_size), desc->headline_char_size, number_width(desc->maxy - desc->fixed_rows), first_row + scrdesc->main_maxy - fix_rows_offset - desc->fixed_rows - desc->title_rows, number_width(desc->maxy - desc->fixed_rows - desc->title_rows), desc->maxy + 1 - desc->fixed_rows - desc->title_rows, percent); } } else { if (opts->vertical_cursor && desc->columns > 0 && vertical_cursor_column > 0) { int vminx = desc->cranges[vertical_cursor_column - 1].xmin; int vmaxx = desc->cranges[vertical_cursor_column - 1].xmax; snprintf(buffer, 199, "V:[%*d/%*d %*d..%*d] FC:%*d C:%*d..%*d/%*d L:[%*d + %*d %*d/%*d] %3.0f%%", number_width(desc->columns), vertical_cursor_column, number_width(desc->columns), desc->columns, number_width(desc->headline_char_size), vminx + 1, number_width(desc->headline_char_size), vmaxx + 1, number_width(desc->headline_char_size), scrdesc->fix_cols_cols, number_width(desc->headline_char_size), cursor_col + scrdesc->fix_cols_cols + 1, number_width(desc->headline_char_size), min_int(smaxx + cursor_col, desc->headline_char_size), number_width(desc->headline_char_size), desc->headline_char_size, number_width(desc->maxy - desc->fixed_rows), first_row + 1 - fix_rows_offset, number_width(smaxy), cursor_row - first_row + fix_rows_offset, number_width(desc->maxy - desc->fixed_rows - desc->title_rows), cursor_row + 1, number_width(desc->maxy - desc->fixed_rows - desc->title_rows), desc->maxy + 1 - desc->fixed_rows - desc->title_rows, (cursor_row + 1) / ((double) (desc->maxy + 1 - desc->fixed_rows - desc->title_rows)) * 100.0); } else { snprintf(buffer, 199, "FC:%*d C:%*d..%*d/%*d L:[%*d + %*d %*d/%*d] %3.0f%%", number_width(desc->headline_char_size), scrdesc->fix_cols_cols, number_width(desc->headline_char_size), cursor_col + scrdesc->fix_cols_cols + 1, number_width(desc->headline_char_size), min_int(smaxx + cursor_col, desc->headline_char_size), number_width(desc->headline_char_size), desc->headline_char_size, number_width(desc->maxy - desc->fixed_rows), first_row + 1 - fix_rows_offset, number_width(smaxy), cursor_row - first_row + fix_rows_offset, number_width(desc->maxy - desc->fixed_rows - desc->title_rows), cursor_row + 1, number_width(desc->maxy - desc->fixed_rows - desc->title_rows), desc->maxy + 1 - desc->fixed_rows - desc->title_rows, (cursor_row + 1) / ((double) (desc->maxy + 1 - desc->fixed_rows - desc->title_rows)) * 100.0); } } } else { /* txt doc */ if (opts->no_cursor) { double percent; percent = ((first_row + scrdesc->main_maxy) / ((double) (desc->last_row + 1))) * 100.0; percent = percent > 100.0 ? 100.0 : percent; snprintf(buffer, 199, "C:%*d..%*d/%*d L:%*d/%*d %3.0f%%", number_width(desc->maxx), cursor_col + scrdesc->fix_cols_cols + 1, number_width(desc->maxx), min_int(smaxx + cursor_col, desc->maxx), number_width(desc->maxx), desc->maxx, number_width(desc->maxy - scrdesc->fix_rows_rows), first_row + scrdesc->main_maxy, number_width(desc->last_row), desc->last_row + 1, percent); } else { snprintf(buffer, 199, "C:%*d..%*d/%*d L:[%*d + %*d %*d/%*d] %3.0f%%", number_width(desc->maxx), cursor_col + scrdesc->fix_cols_cols + 1, number_width(desc->maxx), min_int(smaxx + cursor_col, desc->maxx), number_width(desc->maxx), desc->maxx, number_width(desc->maxy - scrdesc->fix_rows_rows), first_row + 1, number_width(smaxy), cursor_row - first_row, number_width(desc->last_row), cursor_row + 1, number_width(desc->last_row), desc->last_row + 1, ((cursor_row + 1) / ((double) (desc->last_row + 1))) * 100.0); } } mvwprintw(top_bar, 0, maxx - strlen(buffer) - 2, " %s", buffer); wnoutrefresh(top_bar); } if (opts->less_status_bar) { /* less-status-bar */ char title[65]; char *str; size_t bytes = sizeof(title) - 2; char *ptr = title; if (desc->title_rows > 0 && desc->title[0] != '\0') str = desc->title; else if (desc->filename[0] != '\0') str = desc->filename; else str = ""; while (bytes > 0 && *str != '\0') { size_t sz = charlen(str); if (sz > bytes) break; memcpy(ptr, str, sz); ptr += sz; str += sz; bytes -= sz; } if (ptr != title) *ptr++ = ' '; *ptr = '\0'; wattron(bottom_bar, bottom_bar_theme->prompt_attr); if (desc->headline_transl) { snprintf(buffer, 199, "%slines %d-%d/%d %.0f%% ", title, first_row + 1 - fix_rows_offset, first_row + 1 - fix_rows_offset + scrdesc->rows_rows, desc->maxy + 1 - desc->fixed_rows - desc->title_rows, (cursor_row + 1) / ((double) (desc->maxy + 1 - desc->fixed_rows - desc->title_rows)) * 100.0); } else { snprintf(buffer, 199, "%slines %d-%d/%d %.0f%% ", title, first_row + 1, first_row + 1 + scrdesc->footer_rows, desc->last_row + 1, ((cursor_row + 1) / ((double) (desc->last_row + 1))) * 100.0); } mvwprintw(bottom_bar, 0, 0, "%s", buffer); wclrtoeol(bottom_bar); wnoutrefresh(bottom_bar); wattroff(bottom_bar, bottom_bar_theme->prompt_attr); } } static void make_beep(void) { if (!quiet_mode) beep(); } /* * It is used for result of action info */ void show_info_wait(const char *fmt, const char *par, bool beep, bool refresh_first, bool applytimeout, bool is_error) { attr_t att; int event; int timeout = -1; NCursesEventData nced; /* * When refresh is required first, then store params and quit immediately. * Only once can be info moved after refresh */ if (refresh_first && current_state->fmt == NULL) { if (fmt != NULL) current_state->fmt = sstrdup(fmt); else current_state->fmt = NULL; if (par != NULL) current_state->par = sstrdup(par); else current_state->par = NULL; current_state->beep = beep; current_state->applytimeout = applytimeout; current_state->is_error = is_error; return; } att = !is_error ? prompt_window_info_attr : prompt_window_error_attr; wattron(prompt_window, att); if (par != NULL) mvwprintw(prompt_window, 0, 0, fmt, par); else mvwprintw(prompt_window, 0, 0, "%s", fmt); if (!applytimeout) wprintw(prompt_window, " (press any key)"); if (par) log_row(fmt, par); else log_row(fmt); wclrtoeol(prompt_window); mvwchgat(prompt_window, 0, 0, -1, att, PAIR_NUMBER(att), 0); wattroff(prompt_window, att); wnoutrefresh(prompt_window); doupdate(); if (beep) make_beep(); if (applytimeout) timeout = strlen(fmt) < 50 ? 3000 : 6000; event = get_pspg_event(&nced, true, timeout); /* * Screen should be refreshed after show any info. */ current_state->refresh_scr = true; /* eat escape if pressed here */ if (event == PSPG_NCURSES_EVENT && !(nced.keycode == PSPG_ESC_CODE && nced.alt)) unget_pspg_event(&nced); } #define SEARCH_FORWARD 1 #define SEARCH_BACKWARD 2 /* * Returns true when string contains upper char */ static bool test_upperchr(char *str) { if (use_utf8) { while (*str != '\0') { if (utf8_isupper(str)) return true; str += utf8charlen(*str); } } else { while (*str != '\0') { if (isupper(*str)) return true; str += 1; } } return false; } static void reset_searching_lineinfo(DataDesc *desc) { SimpleLineBufferIter slbi, *_slbi; LineInfo *linfo; _slbi = init_slbi_ddesc(&slbi, desc); while (_slbi) { _slbi = slbi_get_line_next(_slbi, NULL, &linfo); if (linfo) { linfo->mask |= LINEINFO_UNKNOWN; linfo->mask &= ~(LINEINFO_FOUNDSTR | LINEINFO_FOUNDSTR_MULTI); } } } /* * get cursor_col to ensure visibility of vertical column */ static int get_cursor_col_for_vertical_column(int _vertical_cursor_column, int _cursor_col, DataDesc *desc, ScrDesc *scrdesc) { int xmin = desc->cranges[_vertical_cursor_column - 1].xmin; int xmax = desc->cranges[_vertical_cursor_column - 1].xmax; /* Do nothing if vertical cursor is visible already */ if (xmax < scrdesc->fix_cols_cols) return 0; else if (xmin > scrdesc->fix_cols_cols && xmax < scrdesc->main_maxx + _cursor_col) return _cursor_col; else { int max_cursor_col = desc->headline_char_size - scrdesc->main_maxx; int column_center = (xmin + xmax) / 2; _cursor_col = column_center - ((scrdesc->main_maxx - scrdesc->fix_cols_cols) / 2 + scrdesc->fix_cols_cols); _cursor_col = _cursor_col < max_cursor_col ? _cursor_col : max_cursor_col; _cursor_col = _cursor_col > 0 ? _cursor_col : 0; /* try to show starts chars when it is possible */ if (xmin < scrdesc->fix_cols_cols + _cursor_col) { int cursor_fixed; cursor_fixed = xmin - scrdesc->fix_cols_cols + 1; if (column_center < scrdesc->main_maxx + cursor_fixed) _cursor_col = cursor_fixed; } return _cursor_col; } } /* * Calculate focus point from left border of selected columns. */ static int get_x_focus(int _vertical_cursor_column, int _cursor_col, DataDesc *desc, ScrDesc *scrdesc) { int xmin = desc->cranges[_vertical_cursor_column - 1].xmin; return xmin > scrdesc->fix_cols_cols ? xmin - _cursor_col : xmin; } #define VISIBLE_DATA_ROWS (scrdesc.main_maxy - scrdesc.fix_rows_rows - fix_rows_offset) #define MAX_FIRST_ROW (desc.last_row - desc.title_rows - scrdesc.main_maxy + 1 - fix_hide_header_line) #define MAX_CURSOR_ROW (desc.last_row - desc.first_data_row) #define CURSOR_ROW_OFFSET (scrdesc.fix_rows_rows + desc.title_rows + fix_rows_offset) void exit_handler(void) { if (active_ncurses) endwin(); (void) disable_xterm_mouse_mode(); close_tty_stream(); close_data_stream(); } static void DataDescFree(DataDesc *desc) { lb_free(desc); free(desc->order_map); free(desc->headline_transl); free(desc->cranges); } /* * Copy persistent data (search related and info box related) * to new instance. */ static void MergeScrDesc(ScrDesc *new, ScrDesc *old) { memcpy(new->searchterm, old->searchterm, 255); new->searchterm_char_size = old->searchterm_char_size; new->searchterm_size = old->searchterm_size; new->search_first_row = old->search_first_row; new->search_rows = old->search_rows; new->search_first_column = old->search_first_column; new->search_columns = old->search_columns; new->search_selected_mode = old->search_selected_mode; memcpy(new->searchcolterm, old->searchcolterm, 255); new->searchcolterm_size = old->searchcolterm_size; new->has_upperchr = old->has_upperchr; new->found = old->found; new->found_start_x = old->found_start_x; new->found_start_bytes = old->found_start_bytes; new->found_row = old->found_row; new->selected_first_row = old->selected_first_row; new->selected_rows = old->selected_rows; new->selected_first_column = old->selected_first_column; new->selected_columns = old->selected_columns; } /* * Ensure so first_row is in correct range */ static int adjust_first_row(int _first_row, DataDesc *desc, ScrDesc *scrdesc) { int max_first_row; if (_first_row < 0) _first_row = 0; /* * When header line is invisible, then visible area is one row * bigger, and then first row should be lower. */ max_first_row = desc->last_row - desc->title_rows - scrdesc->main_maxy + 1 - fix_hide_header_line; max_first_row = max_first_row < 0 ? 0 : max_first_row; return _first_row > max_first_row ? max_first_row : _first_row; } /* * When error is detected, then better to clean screen */ static void check_clipboard_app(Options *opts, bool *force_refresh) { *force_refresh = false; if (opts->clipboard_app) clipboard_application_id = opts->clipboard_app; if (!clipboard_application_id) { FILE *f; char *line = NULL; size_t size = 0; int status; bool isokstr = false; int retval; /* check wl-clipboard https://github.com/bugaevc/wl-clipboard.git */ errno = 0; f = popen("wl-copy -v 2>/dev/null", "r"); if (f) { retval = getline(&line, &size, f); if (retval >= 0 && line) { if (strncmp(line, "wl-clipboard", 12) == 0) isokstr = true; free(line); line = NULL; size = 0; } status = pclose(f); if (status == 0 && isokstr) { clipboard_application_id = 1; return; } } *force_refresh = true; errno = 0; f = popen("xclip -version 2>&1", "r"); if (f) { retval = getline(&line, &size, f); if (retval >= 0 && line) { if (strncmp(line, "xclip", 5) == 0) isokstr = true; free(line); line = NULL; size = 0; } status = pclose(f); if (status == 0 && isokstr) { clipboard_application_id = 2; return; } } /* * pbcopy has not an argument for returning * version info, and without arguments, it * is waiting for data. We can try to just * open pipe, and close this pipe, and check * the status. */ errno = 0; f = popen("pbcopy", "w"); if (f) { status = pclose(f); if (status == 0) { clipboard_application_id = 3; return; } } } } void export_to_file(PspgCommand command, ClipboardFormat format, Options *opts, ScrDesc *scrdesc, DataDesc *desc, int _cursor_row, int cursor_column, int rows, double percent, const char *pipecmd, bool *force_refresh) { char buffer[MAXPATHLEN + 1024]; char table_name[255]; FILE *fp = NULL; char *path = NULL; bool isok = false; int fin = -1, fout = -1, ferr = -1; pid_t pid = -1; bool copy_to_file = false; bool use_pipe = false; bool use_pbcopy = false; *force_refresh = false; if (command == cmd_CopyColumn) { if (!check_visible_vertical_cursor(desc, opts, cursor_column)) return; } if ((command == cmd_CopyLine || command == cmd_CopyLineExtended) && opts->no_cursor) { show_info_wait(" Cursor is not visible", NULL, true, true, true, false); return; } if (command == cmd_CopySelected && !(scrdesc->selected_first_row != -1 || scrdesc->selected_first_column != -1)) { show_info_wait(" There are not selected data", NULL, true, true, true, false); return; } if (pipecmd) { use_pipe = true; } else if (command == cmd_SaveData || command == cmd_SaveAsCSV || opts->copy_target == COPY_TARGET_FILE) { char *prompt; char *ptr; if (format == CLIPBOARD_FORMAT_CSV) prompt = "save to CSV file: "; else prompt = "save to file: "; (void) get_string(prompt, buffer, sizeof(buffer) - 1, last_path, 'f'); if (buffer[0] == '\0') return; ptr = buffer; while (*ptr == ' ') ptr++; if (*ptr == '|') use_pipe = true; else copy_to_file = true; } if (INSERT_FORMAT_TYPE(format)) { (void) get_string("target table name: ", table_name, sizeof(table_name) - 1, last_table_name, 'u'); if (table_name[0] == '\0') return; } if (command == cmd_CopyTopLines || command == cmd_CopyBottomLines) { if (rows == 0 && percent == 0.0) { char number[100]; char *endptr; (void) get_string("rows: ", number, sizeof(number) - 1, last_rows_number, 'u'); if (number[0] == '\0') return; errno = 0; percent = strtod(number, &endptr); if (endptr == number) { show_info_wait(" Cannot convert input string to number", NULL, true, true, false, true); return; } else if (errno != 0) { show_info_wait(" Cannot convert input string to number (%s)", strerror(errno), true, true, false, true); return; } if (*endptr != '%') { rows = (int) percent; percent = 0.0; } strncpy(last_rows_number, number, sizeof(last_rows_number) - 1); last_rows_number[sizeof(last_rows_number) - 1] = '\0'; } } if (copy_to_file) { path = tilde(NULL, buffer); errno = 0; current_state->errstr = NULL; fp = fopen(path, "w"); } else if (use_pipe) { errno = 0; current_state->errstr = NULL; *force_refresh = true; endwin(); signal(SIGPIPE, SIG_IGN); if (pipecmd) fp = popen(pipecmd, "w"); else { char *ptr = buffer; while (*ptr == ' ') ptr++; if (*ptr == '|') fp = popen(++ptr, "w"); } } else { check_clipboard_app(opts, force_refresh); if (!clipboard_application_id) { show_info_wait(" Cannot find clipboard application", NULL, true, true, false, true); return; } if (clipboard_application_id == 3) { /* * mechanism used and tested for wl-copy and xclip doesn't * work with pbcopy. So we can just to use popen instead * rwe_popen. */ use_pbcopy = true; fp = popen("pbcopy", "w"); } else { char cmdline_clipboard_app[1024]; char *fmt; if (format == CLIPBOARD_FORMAT_TEXT || INSERT_FORMAT_TYPE(format)) { if (use_utf8) fmt = "text/plain;charset=utf-8"; else fmt = "text/plain"; } else if (format == CLIPBOARD_FORMAT_CSV) { if (use_utf8) fmt = "text/csv;charset=utf-8"; else fmt = "text/csv"; } else if (format == CLIPBOARD_FORMAT_TSVC) { fmt = "application/x-libreoffice-tsvc"; } else /* fallback */ { if (use_utf8) fmt = "text/plain;charset=utf-8"; else fmt = "text/plain"; } if (clipboard_application_id == 1) snprintf(cmdline_clipboard_app, 1024, "wl-copy -t %s", fmt); else if (clipboard_application_id == 2) snprintf(cmdline_clipboard_app, 1024, "xclip -sel clip"); if ((pid = rwe_popen(cmdline_clipboard_app, &fin, &fout, &ferr)) == -1) { format_error("%s", strerror(errno)); log_row("open error (%s)", current_state->errstr); show_info_wait(" Cannot to start clipboard application", NULL, true, true, false, true); /* err string is saved already, because refresh_first is used */ current_state->errstr = NULL; *force_refresh = true; return; } fcntl(ferr, F_SETFL, O_NONBLOCK); fp = fdopen(fin, "w"); } } if (fp) { errno = 0; isok = export_data(opts, scrdesc, desc, _cursor_row, cursor_column, fp, rows, percent, table_name, command, format); if (use_pipe) { int res; res = pclose(fp); /* * Ignore broken pipe error, when pclose is ok. It's probably * due closing consument program. */ if (!isok && current_state->_errno == EPIPE && res == 0) { isok = true; current_state->errstr = NULL; } signal(SIGPIPE, SIG_DFL); fprintf(stderr, "\033[7mpress any key\033[m"); (void) wait_on_press_any_key(); } else if (copy_to_file) { fclose(fp); } else if (use_pbcopy) { int result; result = pclose(fp); if (result != 0) { if (errno != 0) log_row("write error (%s)", strerror(errno)); else log_row("write error"); show_info_wait(" Cannot write to clipboard", NULL, true, true, false, true); /* err string is saved already, because refresh_first is used */ current_state->errstr = NULL; *force_refresh = true; return; } } else { char err_buffer[2048]; int errsz; int status; memset(buffer, 0, sizeof(err_buffer)); fclose(fp); fp = NULL; waitpid(pid, &status, 0); errsz = read(ferr, err_buffer, 1000); close(fin); close(fout); close(ferr); if (errsz != -1) { format_error("%s", err_buffer); log_row("write error (%s)", current_state->errstr); show_info_wait(" Cannot write to clipboard (%s)", (char *) current_state->errstr, true, true, false, true); /* err string is saved already, because refresh_first is used */ current_state->errstr = NULL; *force_refresh = true; return; } } } if (!isok) { if (path) { if (current_state->errstr != 0) snprintf(buffer, sizeof(buffer), "%s (%s)", path, current_state->errstr); else strcpy(buffer, path); } else { if (current_state->errstr != 0) snprintf(buffer, sizeof(buffer), "clipboard (%s)", current_state->errstr); else strcpy(buffer, "clipboard"); } show_info_wait(" Cannot write to %s", buffer, true, false, false, true); *force_refresh = true; } current_state->errstr = NULL; current_state->_errno = 0; } /* * From "first_row" calculate position of slider of vertical scrollbar */ static void set_scrollbar(ScrDesc *scrdesc, DataDesc *desc, int _first_row) { int max_first_row; int max_slider_min_y; if (scrdesc->slider_has_position || scrdesc->scrollbar_mode) { scrdesc->slider_has_position = false; return; } max_first_row = desc->last_row - desc->title_rows - scrdesc->main_maxy + 1; max_slider_min_y = scrdesc->scrollbar_maxy - scrdesc->slider_size - 1; /* * We want to map * * first_row (0) -> slider_min_y = 1 * first_row (max_first_row) -> slider_min_y (max_slider_min_y) * ------ * first_row (1) -> slider_min_y = 2 * first_row (max_first_row - 1) -> slider_min_y (max_slider_min_y - 1) * */ if (_first_row == 0) { scrdesc->slider_min_y = 1; return; } else if (_first_row == max_first_row) { scrdesc->slider_min_y = max_slider_min_y; return; } scrdesc->slider_min_y = ((double) first_row - 1) / ((double) max_first_row - 2) * ((double) max_slider_min_y - 3) + 2; } /* * Trivial functions reduce redundant code. */ void throw_searching(ScrDesc *scrdesc, DataDesc *desc) { *scrdesc->searchterm = '\0'; *scrdesc->searchcolterm = '\0'; scrdesc->searchterm_size = 0; scrdesc->searchterm_char_size = 0; scrdesc->search_first_row = -1; scrdesc->search_rows = 0; scrdesc->search_first_column = -1; scrdesc->search_columns = 0; scrdesc->search_selected_mode = false; scrdesc->found = false; reset_searching_lineinfo(desc); } static void throw_selection(ScrDesc *scrdesc, DataDesc *desc, MarkModeType *_mark_mode) { scrdesc->selected_first_row = -1; scrdesc->selected_rows = 0; scrdesc->selected_first_column = -1; scrdesc->selected_columns = 0; *_mark_mode = MARK_MODE_NONE; if (scrdesc->search_selected_mode) throw_searching(scrdesc, desc); } static bool check_visible_vertical_cursor(DataDesc *desc, Options *opts, int _vertical_cursor_column) { if (desc->columns == 0) { show_info_wait(" Sort is available only for tables.", NULL, true, true, true, false); return false; } if (!opts->vertical_cursor || _vertical_cursor_column == 0) { show_info_wait(" Vertical cursor is not visible", NULL, true, true, true, false); return false; } return true; } /* * Last check and hacks */ static void finalize_tabular_data(DataDesc *desc) { if (desc->is_expanded_mode) { if (strchr(desc->headline_transl, 'I') == NULL) { char *str = desc->rows.rows[desc->title_rows + 1]; int pos = 0; /* fallback point, didn't find separator already */ while (pos < 40) { if ((desc->linestyle == 'a' && *str == '|' && pos > 1) || (desc->linestyle == 'u' && pos > 1 && (strncmp(str, /* │ */ "\342\224\202", 3) == 0 || strncmp(str, /* ║ */ "\342\225\221", 3) == 0))) { desc->headline_transl[pos] = 'I'; break; } pos += 1; str += charlen(str); } } } else { if (desc->border_type != 2) { if (desc->border_bottom_row == -1 && (desc->footer_row == -1 || desc->fallback_last_data_row)) { /* * It is hard to detect end of table and start of footer * when border_type != 2. But for border_type = 1 it is * possible. First footer line starting with nonspace. * But some data should not to have footer. */ if (desc->border_type == 1) { if (desc->alt_footer_row != -1) { desc->footer_row = desc->alt_footer_row; desc->last_data_row = desc->footer_row - 1; } else desc->last_data_row = desc->last_row; } else { const char *last_row; /* * fallback - we cannot to distingush tabular data * and footer data in border 0 */ desc->last_data_row = desc->last_row - 1; desc->footer_row = desc->last_row; /* * Oracle's SQLcl makes rows with same length, so * when last row has same length like header row, * then we can block this fallback. */ last_row = getline_ddesc(desc, desc->last_row); if (last_row) { int last_row_size; int last_row_chars; last_row_size = strlen(last_row); last_row_chars = use_utf8 ? utf_string_dsplen(last_row, last_row_size) : last_row_size; if (desc->headline_char_size == last_row_chars) { desc->last_data_row = desc->last_row; desc->footer_row = -1; log_row("applied fix for Oracle's SQLcl for table without footer"); } } } } trim_footer_rows(desc); } } } static int mousex_get_colno(DataDesc *desc, ScrDesc *scrdesc, Options *opts, int *_cursor_col, int _default_freezed_cols, int mousex) { int colno = -1; int xpoint = mousex - scrdesc->main_start_x; if (xpoint > scrdesc->fix_cols_cols - 1) xpoint += *_cursor_col; if (xpoint >= 0) { int i; for (i = 0; i < desc->columns; i++) { if (desc->cranges[i].xmin <= xpoint && desc->cranges[i].xmax >= xpoint) { int xmin = desc->cranges[i].xmin; int xmax = desc->cranges[i].xmax; colno = i + 1; if (colno > (opts->freezed_cols != -1 ? opts->freezed_cols : _default_freezed_cols)) { if (xmax > scrdesc->main_maxx + *_cursor_col) *_cursor_col = xmax - scrdesc->main_maxx; else if (xmin < scrdesc->fix_cols_cols + *_cursor_col) *_cursor_col = xmin - scrdesc->fix_cols_cols + 1; } break; } } } return colno; } /* * Available modes for processing input. * * 1. read and close (default) * 2. repeated read and close (timer) * 3. repeated read and close (inotify) * 4. query [postgres] * 5. repeated query [postgres] (timer) * 6. stream read [pipe] * 7. stream read with reopen [fifo] * 8. stream read with reopen and seek to end [file] (inotify) */ int main(int argc, char *argv[]) { int maxx, maxy; int event_keycode = 0; bool press_alt = false; int prev_event_keycode = 0; int next_event_keycode = 0; bool prev_alt = false; bool next_alt = false; int command = cmd_Invalid; int nested_command = cmd_Invalid; int translated_command = cmd_Invalid; int translated_command_history = cmd_Invalid; long last_ms = 0; /* time of last mouse release in ms */ time_t last_sec = 0; /* time of last mouse release in sec */ long next_watch = 0; int next_command = cmd_Invalid; int deffered_command = cmd_Invalid; bool reuse_event = false; int last_x_focus = -1; /* it is used for repeated vertical cursor display */ int prev_first_row; DataDesc desc; ScrDesc scrdesc; Options opts; StateData state; bool detected_format = false; mmask_t prev_mousemask = 0; int search_direction = SEARCH_FORWARD; bool redirect_mode; bool fresh_found = false; int fresh_found_cursor_col = -1; bool reinit = false; bool ignore_mouse_release = false; /* after leave menu by press ignore release too */ bool raw_output_quit = false; bool mouse_was_initialized = false; int last_ordered_column = -1; /* order by when watch mode is active */ bool last_order_desc = false; /* true, when sort of data is descend */ long mouse_event = 0; long vertical_cursor_changed_mouse_event = 0; int pspg_win_iter; WINDOW *win = NULL; SCREEN *term = NULL; char *pspgenv; bool result; struct winsize size; bool size_is_valid = false; int ioctl_result; #if NCURSES_MOUSE_VERSION > 1 int scrollbar_mode_initial_slider_mouse_offset_y = -1; #endif /* * Arguments of forwarded commands */ char *string_argument = NULL; bool string_argument_is_valid = false; long long_argument = 1; bool long_argument_is_valid = false; /* Name of pspg config file */ const char *PSPG_CONF; const char *PSPG_HISTORY; /* custom theme definition */ PspgThemeLoaderElement custom_theme_tle[50]; PspgThemeLoaderElement custom_theme_tle2[50]; /* static variables reinitialization */ vertical_cursor_column = -1; cursor_col = 0; mark_mode = MARK_MODE_NONE; #ifdef COMPILE_MENU menu_is_active = false; menu = NULL; cmdbar = NULL; #endif first_row = 0; mouse_row = -1; mouse_col = -1; mark_mode_start_row = 0; mark_mode_start_col = 0; cursor_row = 0; footer_cursor_col = 0; default_freezed_cols = 1; fix_rows_offset = 0; fixedRows = -1; memset(&opts, 0, sizeof(opts)); opts.theme = 1; opts.freezed_cols = -1; /* default will be 1 if screen width will be enough */ opts.csv_separator = -1; /* auto detection */ opts.csv_header = 'a'; /* auto detection */ opts.csv_trim_width = 0; opts.csv_trim_rows = 0; opts.border_type = 2; /* outer border */ #if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE) opts.watch_file = true; #endif opts.quit_on_f3 = false; opts.no_highlight_lines = false; opts.copy_target = COPY_TARGET_CLIPBOARD; opts.clipboard_format = CLIPBOARD_FORMAT_CSV; opts.empty_string_is_null = true; opts.xterm_mouse_mode = true; opts.show_scrollbar = true; opts.clipboard_app = 0; opts.no_sleep = false; opts.menu_always = false; opts.nullstr = NULL; opts.last_row_search = true; opts.hist_size = 500; opts.progressive_load_mode = true; opts.highlight_odd_rec = false; opts.hide_header_line = false; opts.esc_delay = -1; opts.on_exit_reset = false; opts.on_exit_clean = false; opts.on_exit_erase_line = false; opts.on_exit_sgr0 = false; setup_sigsegv_handler(); umask(022); PSPG_CONF = getenv("PSPG_CONF"); if (!PSPG_CONF) PSPG_CONF = "~/.pspgconf"; load_config(tilde(NULL, PSPG_CONF), &opts); if (errno && strcmp(PSPG_CONF, "~/.pspgconf") != 0) fprintf(stderr, "cannot to read from config file \"%s\" specified by PSPG_CONF (%s), ignored\n", PSPG_CONF, strerror(errno)); PSPG_HISTORY = getenv("PSPG_HISTORY"); if (!PSPG_HISTORY) PSPG_HISTORY = "~/.pspg_history"; memset(&desc, 0, sizeof(desc)); memset(&scrdesc, 0, sizeof(scrdesc)); #ifdef DEBUG_PIPE debug_pipe = fopen(DEBUG_PIPE, "w"); setlinebuf(debug_pipe); fprintf(debug_pipe, "application start\n"); current_time(&start_app_sec, &start_app_ms); #endif memset(&state, 0, sizeof(state)); state.reserved_rows = -1; /* dbcli has significant number of self reserved lines */ state.file_format_from_suffix = FILE_UNDEF; /* input file is not defined */ state.desc = &desc; /* global reference used for readline's tabcomplete */ state.scrdesc = &scrdesc; state.opts = &opts; current_state = &state; state.theme_template = -1; state.menu_template = -1; state.last_query = NULL; pspgenv = getenv("PSPG"); if (pspgenv) { int argc2; char **argv2; argv2 = buildargv(pspgenv, &argc2, argv[0]); if (!readargs(argv2, argc2, &opts, &state)) { if (state.errstr) leave(state.errstr); else exit(EXIT_SUCCESS); } } if (!readargs(argv, argc, &opts, &state)) { if (state.errstr) leave(state.errstr); else exit(EXIT_SUCCESS); } /* open log file when user want it */ if (opts.log_pathname) { const char *pathname; pathname = tilde(NULL, opts.log_pathname); logfile = fopen(pathname, "a"); if (!logfile) leave("cannot to open log file \"%s\"", pathname); setlinebuf(logfile); } if (!args_are_consistent(&opts, &state)) leave(state.errstr ? state.errstr : "options are not valid"); if (state.stream_mode && !isatty(STDOUT_FILENO)) leave("stream mode can be used only in interactive mode (tty is not available)"); if (opts.custom_theme_name) { FILE *themedesc; bool is_warning; themedesc = open_theme_desc(opts.custom_theme_name); if (!themedesc) leave(state.errstr ? state.errstr : "cannot to open theme description file"); if (!theme_loader(themedesc, custom_theme_tle, custom_theme_tle2, &state.theme_template, &state.menu_template, &is_warning)) leave(state.errstr ? state.errstr : "cannot to load theme description file"); if (is_warning) fprintf(stderr, "some fields in custom theme description file are ignored (check log)\n"); fclose(themedesc); } if (state.boot_wait > 0) usleep(1000 * 1000 * state.boot_wait); /* * don't use inotify, when user prefer periodic watch time, or when we * have not file for watching */ if (opts.watch_time || !opts.pathname) opts.watch_file = false; if (!open_data_stream(&opts)) { /* ncurses are not started yet */ if (state.errstr) { log_row(state.errstr); fprintf(stderr, "%s\n", state.errstr); } if (!opts.watch_time) exit(EXIT_FAILURE); } if (opts.less_status_bar) opts.no_topbar = true; setlocale(LC_ALL, ""); /* * Don't use UTF when terminal doesn't use UTF. Without * correct setting of encoding, the ncurses should not * work too. */ use_utf8 = strcmp(nl_langinfo(CODESET), "UTF-8") == 0; log_row("started"); log_row("%s utf8 support", use_utf8 ? "with" : "without"); pspg_esc_delay = opts.esc_delay; log_row("esc delay = %d", pspg_esc_delay); if (opts.csv_format || opts.tsv_format || opts.query) result = read_and_format(&opts, &desc, &state); else if (opts.querystream) { readfile(&opts, &desc, &state); result = read_and_format(&opts, &desc, &state); } else result = readfile(&opts, &desc, &state); /* when we can get content later, we can ignore empty dataset */ if (!result) { if (state.errstr) leave(state.errstr); if (!state.stream_mode && !(opts.watch_time > 0)) leave("No data"); } if (opts.watch_time > 0) { current_time(&last_watch_sec, &last_watch_ms); next_watch = last_watch_sec * 1000 + last_watch_ms + opts.watch_time * 1000; } log_row("read input %d rows", desc.total_rows); if ((opts.csv_format || opts.tsv_format || opts.query) && (state.no_interactive || (!state.interactive && !isatty(STDOUT_FILENO)))) { lb_print_all_ddesc(&desc, stdout); log_row("quit due non interactive mode"); return 0; } if (desc.headline) (void) translate_headline(&desc); detected_format = desc.headline_transl; if (detected_format && desc.freeze_two_cols) default_freezed_cols = 2; /* * When parent application doesn't handle SIGWINCH signal, then the * environment variables COLUMNS and LINES should not be up to date. * ncurses uses these variables for initial sizing stdstr. This issue * can be fixed by reread terminal (device) parameters. The overhead * is neglecting. See issue #75 * * Possible ToDo (cleaning). On modern ncurses we can ensure correct * terminal size by setting use_env(FALSE); use_tioctl(TRUE); On second * hand, these functions should not be suppported on other implementations * on ncurses. */ if ((ioctl_result = ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *) &size)) >= 0) { #ifndef PDCURSES resize_term(size.ws_row, size.ws_col); #endif size_is_valid = true; log_row("terminal size by TIOCGWINSZ rows: %d, cols: %d", size.ws_row, size.ws_col); } else log_row("cannot to detect terminal size via TIOCGWINSZ (%s)", strerror(errno)); /* Only when we are sure about terminal dimensions */ if (size_is_valid && state.quit_if_one_screen) { int available_rows = size.ws_row; if (state.reserved_rows != -1) available_rows -= state.reserved_rows; /* the content can be displayed in one screen */ if (available_rows >= desc.last_row && size.ws_col > desc.maxx) { lb_print_all_ddesc(&desc, stdout); log_row("quit due quit_if_one_screen option without ncurses init"); return 0; } } if (!detected_format && state.only_for_tables) { const char *pagerprog; FILE *fout = NULL; pagerprog = getenv("PSPG_PAGER"); if (!pagerprog) pagerprog = getenv("PAGER"); if (!pagerprog) pagerprog = "more"; else { /* if PAGER is empty or all-white-space, don't use pager */ if (strspn(pagerprog, " \t\r\n") == strlen(pagerprog)) fout = stdout; } if (!fout) { fout = popen(pagerprog, "w"); if (!fout) { /* if popen fails, silently proceed without pager */ fout = stdout; } } if (fout != stdout) { signal(SIGPIPE, SIG_IGN); signal(SIGINT, SIG_IGN); } lb_print_all_ddesc(&desc, fout); if (fout != stdout) { pclose(fout); signal(SIGPIPE, SIG_DFL); signal(SIGINT, SigintHandler); } log_row("exit without start ncurses"); if (logfile) { fclose(logfile); logfile = NULL; } return 0; } if (!open_tty_stream()) leave("missing a access to terminal device"); /* * force xterm-direect terminal definition when direct color is required. * ncurses doesn't work well when direct and not direct colors are used * together. */ if (opts.direct_color) term = newterm("xterm-direct", stdout, f_tty); else term = newterm(termname(), stdout, f_tty); if (!term) leave("cannot to initialize new terminal"); signal(SIGINT, SigintHandler); signal(SIGTERM, SigtermHandler); #ifndef PDCURSES /* * own SIGWINCH handling doesn't work well on pdcurses. * resize_term(0, 0) crashes. resize_term(x, x) crashes * or starts recursive events. */ signal(SIGWINCH, SigwinchHandler); #endif atexit(exit_handler); UNUSED(win); log_row("ncurses started"); active_ncurses = true; #ifdef NCURSES_EXT_COLORS /* when direct colors are not forced */ if (!opts.direct_color) { char *termval = getenv("TERM"); if (strstr(termval, "direct")) { log_row("terminal with direct color detected"); opts.direct_color = true; } } if (opts.direct_color) log_row("direct color mode will be used"); #endif /* xterm mouse mode recheck */ if (opts.xterm_mouse_mode) { #if NCURSES_MOUSE_VERSION > 1 #ifdef NCURSES_EXT_FUNCS char *s; s = tigetstr((NCURSES_CONST char *) "kmous"); if (s != NULL && s != (char *) -1) { char *termval = getenv("TERM"); /* * Robust identificantion of xterm mouse modes supports should be based on * one valid prereqeusities: TERM has substring "xterm" or kmous string is * "\033[M". But some terminal' emulators support these modes too although * mentioned rules are not valid. So I'll try to use xterm mouse move more * aggresively to detect that terminals doesn't support xterm mouse modes. * * if (strcmp(s, "\033[M") == 0 || * (termval && strstr(termval, "xterm"))) * * I have a plan to create an list of terminals, where xterm mouse modes * are not supported, and fix possible issues step by step. * * User workaround: using --no_xterm_mouse_mode option. */ log_row("kmous=\\E%s, TERM=%s", s + 1, termval ? termval : ""); opts.xterm_mouse_mode = true; } else opts.xterm_mouse_mode = false; #else opts.xterm_mouse_mode = false; #endif #else opts.xterm_mouse_mode = false; #endif } if (opts.xterm_mouse_mode) log_row("xterm mouse mode 1002 will be used"); else log_row("without xterm mouse mode support"); if(!has_colors()) leave("your terminal does not support color"); start_color(); reinit_theme: if (opts.custom_theme_name) { initialize_color_pairs(state.theme_template, opts.direct_color); log_row("template theme %d loaded", state.theme_template); applyCustomTheme(custom_theme_tle, custom_theme_tle2); log_row("use custom theme \"%s\"", opts.custom_theme_name); } else initialize_color_pairs(opts.theme, opts.direct_color); timeout(0); #if NCURSES_EXT_FUNCS set_escdelay(1); #elif !defined PDCURSES ESCDELAY = 1; #endif /* * Use raw insted cbreak. raw mode disables sending SIGINT after Ctrl+C. Although pspg * has own SIGINT trap, it is better to be disabled, because SIGINT are sent to all * process in group - psql SIGINT handler too. Now, psql "correctly" displays cancel * message, that raises unwanted visual artefacts. */ raw(); keypad(stdscr, TRUE); curs_set(0); noecho(); /* * For pspg is better to use nonl mode - without it, ncurses is not able * to detect ENTER key (that is required by safety of usage of readline. * see issue #178. */ nonl(); leaveok(stdscr, TRUE); wbkgdset(stdscr, ncurses_theme_attr(PspgTheme_background)); initialize_special_keycodes(); if (!opts.no_mouse) { mouse_was_initialized = true; mouseinterval(0); #if NCURSES_MOUSE_VERSION > 1 mousemask(BUTTON1_PRESSED | BUTTON1_RELEASED | BUTTON4_PRESSED | BUTTON5_PRESSED | BUTTON_ALT | BUTTON_CTRL | #ifdef PDCURSES MOUSE_WHEEL_SCROLL | REPORT_MOUSE_POSITION | #endif (opts.xterm_mouse_mode ? REPORT_MOUSE_POSITION : 0), NULL); enable_xterm_mouse_mode(opts.xterm_mouse_mode); #else mousemask(BUTTON1_PRESSED | BUTTON1_RELEASED, NULL); #endif } if (desc.headline_transl != NULL && !desc.is_expanded_mode) { if (desc.border_head_row != -1) desc.first_data_row = desc.border_head_row + 1; } else if (desc.title_rows > 0 && desc.is_expanded_mode) desc.first_data_row = desc.title_rows; else { desc.first_data_row = 0; desc.last_data_row = desc.last_row; desc.title_rows = 0; desc.title[0] = '\0'; } first_data_row = desc.first_data_row; trim_footer_rows(&desc); if (reinit) { ScrDesc aux; int i; /* we should to save searching related data from scrdesc */ memcpy(&aux, &scrdesc, sizeof(ScrDesc)); for (i = 0; i < 9; i++) if (scrdesc.wins[i]) delwin(scrdesc.wins[i]); memset(&scrdesc, 0, sizeof(ScrDesc)); MergeScrDesc(&scrdesc, &aux); } else { memset(&scrdesc, 0, sizeof(ScrDesc)); throw_searching(&scrdesc, &desc); throw_selection(&scrdesc, &desc, &mark_mode); } initialize_theme(opts.theme, WINDOW_TOP_BAR, desc.headline_transl != NULL, false, 0, &scrdesc.themes[WINDOW_TOP_BAR]); initialize_theme(opts.theme, WINDOW_BOTTOM_BAR, desc.headline_transl != NULL, false, 0, &scrdesc.themes[WINDOW_BOTTOM_BAR]); initialize_theme(opts.theme, WINDOW_VSCROLLBAR, desc.headline_transl != NULL, opts.no_highlight_lines, 0, &scrdesc.themes[WINDOW_VSCROLLBAR]); prompt_window_input_attr = scrdesc.themes[WINDOW_BOTTOM_BAR].input_attr; prompt_window_error_attr = scrdesc.themes[WINDOW_BOTTOM_BAR].error_attr; prompt_window_info_attr = scrdesc.themes[WINDOW_BOTTOM_BAR].info_attr; clear(); refresh_aux_windows(&opts, &scrdesc); getmaxyx(stdscr, maxy, maxx); log_row("initial stdscr size - maxy: %d, maxx: %d", maxy, maxx); if (state.quit_if_one_screen) { int available_rows = maxy; if (state.reserved_rows != -1) available_rows -= state.reserved_rows; /* the content can be displayed in one screen */ if (available_rows >= desc.last_row && maxx >= desc.maxx) { endwin(); lb_print_all_ddesc(&desc, stdout); log_row("ncurses ended and quit due quit_if_one_screen option"); return 0; } } /* some corrections */ if (detected_format) finalize_tabular_data(&desc); if (opts.tabular_cursor && !opts.no_cursor) opts.no_cursor = desc.headline_transl == NULL; /* run this part only once, don't repeat it when theme is reinitialized */ if (opts.vertical_cursor && desc.columns > 0 && vertical_cursor_column == -1) { int freezed_cols = opts.freezed_cols != -1 ? opts.freezed_cols : default_freezed_cols; /* The position of vertical cursor should be set */ if (freezed_cols + 1 <= desc.columns) vertical_cursor_column = freezed_cols + 1; else vertical_cursor_column = 1; /* in this moment, there are not any vertical offset, calculation is simple */ last_x_focus = get_x_focus(vertical_cursor_column, cursor_col, &desc, &scrdesc); } initialize_theme(opts.theme, WINDOW_ROWNUM_LUC, desc.headline_transl != NULL, opts.no_highlight_lines, 0, &scrdesc.themes[WINDOW_ROWNUM_LUC]); initialize_theme(opts.theme, WINDOW_ROWNUM, desc.headline_transl != NULL, opts.no_highlight_lines, 0, &scrdesc.themes[WINDOW_ROWNUM]); create_layout_dimensions(&opts, &scrdesc, &desc, opts.freezed_cols != -1 ? opts.freezed_cols : default_freezed_cols, fixedRows, maxy, maxx); create_layout(&opts, &scrdesc, &desc, first_data_row); initialize_theme(opts.theme, WINDOW_LUC, desc.headline_transl != NULL, opts.no_highlight_lines, 0, &scrdesc.themes[WINDOW_LUC]); initialize_theme(opts.theme, WINDOW_FIX_ROWS, desc.headline_transl != NULL, opts.no_highlight_lines, 0, &scrdesc.themes[WINDOW_FIX_ROWS]); initialize_theme(opts.theme, WINDOW_FIX_COLS, desc.headline_transl != NULL, opts.no_highlight_lines, 0, &scrdesc.themes[WINDOW_FIX_COLS]); initialize_theme(opts.theme, WINDOW_ROWS, desc.headline_transl != NULL, opts.no_highlight_lines, 0, &scrdesc.themes[WINDOW_ROWS]); initialize_theme(opts.theme, WINDOW_FOOTER, desc.headline_transl != NULL, opts.no_highlight_lines, 0, &scrdesc.themes[WINDOW_FOOTER]); initialize_theme(opts.theme, WINDOW_FIX_COLS, desc.headline_transl != NULL, opts.no_highlight_lines, 1, &scrdesc.themes[WINDOW_FIX_COLS_ODD]); initialize_theme(opts.theme, WINDOW_ROWS, desc.headline_transl != NULL, opts.no_highlight_lines, 1, &scrdesc.themes[WINDOW_ROWS_ODD]); initialize_theme(opts.theme, WINDOW_ROWNUM, desc.headline_transl != NULL, opts.no_highlight_lines, 1, &scrdesc.themes[WINDOW_ROWNUM_ODD]); set_scrollbar(&scrdesc, &desc, first_row); cmdline[0] = '\0'; cmdline_ptr = NULL; last_row_search[0] = '\0'; last_col_search[0] = '\0'; last_line[0] = '\0'; last_path[0] = '\0'; last_rows_number[0] = '\0'; last_nullstr[0] = '\0'; /* initialize readline if it is active */ pspg_init_readline(PSPG_HISTORY); #ifdef COMPILE_MENU init_menu_config(&opts); if (!opts.less_status_bar && !opts.no_commandbar) cmdbar = init_cmdbar(cmdbar, &opts); if (opts.menu_always) { st_menu_set_desktop_window(stdscr); menu = init_menu(menu, &opts); st_menu_set_focus(menu, ST_MENU_FOCUS_MOUSE_ONLY); log_row("init menu bar"); } #endif while (true) { bool refresh_scr = false; bool refresh_clear = false; bool after_freeze_signal = false; bool force_refresh = false; NCursesEventData nced; int event = PSPG_NOTHING_VALID_EVENT; #ifdef DEBUG_PIPE /* * Enable print memory statistics manually when you * need detailed memory usage statistics. */ print_memory_stats(false); #endif recheck_vertical_cursor_visibility = false; fix_rows_offset = desc.fixed_rows - scrdesc.fix_rows_rows; /* * Next code allows to inject event, and later process original event again. * It is used for reuse mouse event: 1. replace top bar by menubar, 2. activate * field on menubar - possibly pulldown menu. Following code holds event one * iteration. */ if (reuse_event) { /* unfortunately, gcc raises false warning here -Wmaybe-uninitialized */ if (prev_event_keycode == 0) { prev_event_keycode = event_keycode; prev_alt = press_alt; } else { next_event_keycode = prev_event_keycode; next_alt = prev_alt; reuse_event = false; prev_event_keycode = 0; prev_alt = false; } } /* * Try to read command from commandline buffer first */ if (next_command == cmd_Invalid && cmdline_ptr && *cmdline_ptr) { while (cmdline_ptr && *cmdline_ptr) { if (*cmdline_ptr == '\\') { next_command = cmd_BsCommand; break; } cmdline_ptr += 1; } } /* * Draw windows, only when function (key) redirect was not forced. * Redirect emmit immediate redraw. */ if (next_command == cmd_Invalid || current_state->fmt != NULL) { redraw_screen(); if (current_state->fmt != NULL) { show_info_wait(current_state->fmt, current_state->par, current_state->beep, false, current_state->applytimeout, current_state->is_error); free(current_state->fmt); free(current_state->par); current_state->fmt = NULL; current_state->par = NULL; refresh_aux_windows(&opts, &scrdesc); continue; } if (next_event_keycode != 0) { event_keycode = next_event_keycode; press_alt = next_alt; next_event_keycode = 0; next_alt = false; } else { int timeout = opts.watch_time > 0 ? 1000 : -1; bool only_tty = false; if (!desc.completed) { bool res; int total_rows_before = desc.total_rows; /* * When pspg is used in streaming mode, then in this moment, * the data should not be available. readfile fails quckly. * We can easy detect empty data desc. In this case, we should * to wait to data usually way. * In other case, when we load data already, then we want to * read data quckly, so timeout is only short, and we check * just tty. */ res = readfile(&opts, &desc, &state); if (res && desc.total_rows > 0) { timeout = 10; only_tty = true; } else { timeout = -1; only_tty = false; } /* * We loaded some data, and then we need refresh. * so enforce short timeout. */ if (total_rows_before != desc.total_rows) { timeout = 10; only_tty = true; if (desc.headline_transl) finalize_tabular_data(&desc); /* * maybe layout should be recreated, if * before was calculated for too small * rows. */ if (total_rows_before < LINES) refresh_layout_after_terminal_resize(); set_scrollbar_dimensions(&opts, &desc, &scrdesc); set_scrollbar(&scrdesc, &desc, first_row); } } /* * we forced repeated readfile until load is completed, when * some deferred command requires complete load. */ if (deffered_command != cmd_Invalid) { if (desc.completed) { next_command = deffered_command; deffered_command = cmd_Invalid; } continue; } do { event = get_pspg_event(&nced, only_tty, timeout); } while (event == PSPG_NCURSES_EVENT && nced.ignore_it); if (event == PSPG_FATAL_EVENT) break; event_keycode = (event == PSPG_NCURSES_EVENT) ? nced.keycode : 0; press_alt = (event == PSPG_NCURSES_EVENT) ? nced.alt : false; /* * Immediately clean mouse state attributes when event is not * mouse event. */ if (event_keycode != KEY_MOUSE) { mouse_row = -1; mouse_col = -1; } /* Disable mark cursor mode immediately */ if (mark_mode == MARK_MODE_CURSOR && !(event_keycode == KEY_SF || event_keycode == KEY_SR || event_keycode == KEY_SNEXT || event_keycode == KEY_SPREVIOUS || event_keycode == KEY_LEFT || event_keycode == KEY_RIGHT || is_cmd_RowNumToggle(event_keycode, nced.alt))) mark_mode = MARK_MODE_NONE; /* Disable mark mouse mode immediately */ if ((mark_mode == MARK_MODE_MOUSE || mark_mode == MARK_MODE_MOUSE_BLOCK || mark_mode == MARK_MODE_MOUSE_COLUMNS) && event_keycode != KEY_MOUSE) mark_mode = MARK_MODE_NONE; if (force_refresh || opts.watch_time || ((opts.watch_file || state.stream_mode) && (event == PSPG_READ_DATA_EVENT))) { long ms; time_t sec; long ct; current_time(&sec, &ms); ct = sec * 1000 + ms; if (force_refresh || (ct > next_watch && !paused) || ((opts.watch_file || state.stream_mode) && (event == PSPG_READ_DATA_EVENT))) { DataDesc desc2; bool fresh_data = false; memset(&desc2, 0, sizeof(desc2)); /* * The query doesn't need reopen, and are available every * time. */ if (opts.query) fresh_data = true; /* * force open stream, where there are not an valid input * stream. The stream can be closed inside event handler, * and NULL f_data is an signal of necessity of reopen. */ else if (f_data) { /* * Without stream mode here, we have to reopen file * every time. This is implementation of watching * and reloading after any change of file. */ if (!state.stream_mode) { close_data_stream(); fresh_data = open_data_stream(&opts); } else { fresh_data = true; clearerr(f_data); } } else fresh_data = open_data_stream(&opts); /* when we wanted fresh data */ if (fresh_data) { if (opts.csv_format || opts.tsv_format || opts.query) /* returns false when format is broken */ fresh_data = read_and_format(&opts, &desc2, &state); else if (opts.querystream) { readfile(&opts, &desc2, &state); fresh_data = read_and_format(&opts, &desc2, &state); } else fresh_data = readfile(&opts, &desc2, &state); } /* when we have fresh data */ if (fresh_data) { int max_cursor_row; ScrDesc aux; DataDescFree(&desc); memcpy(&desc, &desc2, sizeof(desc)); if (desc.headline) (void) translate_headline(&desc); if (desc.headline_transl) finalize_tabular_data(&desc); trim_footer_rows(&desc); if (desc.headline_transl != NULL && !desc.is_expanded_mode) { if (desc.border_head_row != -1) desc.first_data_row = desc.border_head_row + 1; } else if (desc.title_rows > 0 && desc.is_expanded_mode) desc.first_data_row = desc.title_rows; else { desc.first_data_row = 0; desc.last_data_row = desc.last_row; desc.title_rows = 0; desc.title[0] = '\0'; } first_data_row = desc.first_data_row; detected_format = desc.headline_transl; if (detected_format && desc.freeze_two_cols) default_freezed_cols = 2; /* we should to save searching related data from scrdesc */ memcpy(&aux, &scrdesc, sizeof(ScrDesc)); refresh_aux_windows(&opts, &scrdesc); create_layout_dimensions(&opts, &scrdesc, &desc, opts.freezed_cols != -1 ? opts.freezed_cols : default_freezed_cols, fixedRows, maxy, maxx); /* create_layout requires correct first_row */ first_row = adjust_first_row(first_row, &desc, &scrdesc); create_layout(&opts, &scrdesc, &desc, first_data_row); MergeScrDesc(&scrdesc, &aux); /* new result can have different number of row, check cursor */ max_cursor_row = MAX_CURSOR_ROW; cursor_row = cursor_row > max_cursor_row ? max_cursor_row : cursor_row; if (cursor_row - first_row + 1 > VISIBLE_DATA_ROWS) first_row = cursor_row - VISIBLE_DATA_ROWS + 1; first_row = adjust_first_row(first_row, &desc, &scrdesc); last_watch_sec = sec; last_watch_ms = ms; if (last_ordered_column != -1) update_order_map(&scrdesc, &desc, last_ordered_column, last_order_desc); } else DataDescFree(&desc2); if ((ct - next_watch) < (opts.watch_time * 1000)) next_watch = next_watch + 1000 * opts.watch_time; else next_watch = ct + 100 * opts.watch_time; /* * Force refresh, only when we got fresh data or when * this event was forced by timer. */ if (fresh_data || opts.watch_time > 0 || state._errno != 0) { clear(); refresh_scr = true; } } set_scrollbar(&scrdesc, &desc, first_row); if (force_refresh) { force_refresh = false; event_keycode = 0; next_event_keycode = 0; next_command = 0; command = 0; press_alt = false; next_alt = false; } } /* the comment for ignore_mouse_release follow */ if (ignore_mouse_release) { ignore_mouse_release = false; if (event_keycode == KEY_MOUSE && (nced.mevent.bstate & BUTTON1_RELEASED)) continue; } } redirect_mode = false; } else { command = next_command; next_command = cmd_Invalid; redirect_mode = true; } /* Exit immediately on F10 or input error */ if (event == PSPG_SIGINT_EVENT) { if (!opts.no_sigint_search_reset && (*scrdesc.searchterm || *scrdesc.searchcolterm || scrdesc.selected_first_row != -1 || scrdesc.selected_first_column != -1)) { throw_searching(&scrdesc, &desc); throw_selection(&scrdesc, &desc, &mark_mode); } else { if (opts.on_sigint_exit) break; else show_info_wait(" For quit press \"q\" (or use on-sigint-exit option).", NULL, true, true, true, false); } } else if (event == PSPG_SIGWINCH_EVENT) { refresh_terminal_size(); event_keycode = KEY_RESIZE; } else if ((event_keycode == ERR || event_keycode == KEY_F(10)) && !redirect_mode) { log_row("exit main loop: %s", event_keycode == ERR ? "input error" : "F10"); break; } #ifndef COMPILE_MENU if (!redirect_mode) { translated_command_history = translated_command; command = translate_event(event_keycode, press_alt, &opts, &nested_command); translated_command = command; } #else /* * Don't send RESIZE to menu. It cannot to handle this event, and it * cannot to translate this event. This event is lost in menu. * So, don't do it. Don't send mouse event to menu, if mouse is * actively used for scrollbar or range marking. */ if (!redirect_mode && event_keycode != KEY_RESIZE && !(event_keycode == KEY_MOUSE && (scrdesc.scrollbar_mode || mark_mode == MARK_MODE_MOUSE || mark_mode == MARK_MODE_MOUSE_BLOCK || mark_mode == MARK_MODE_MOUSE_COLUMNS))) { bool processed = false; bool activated = false; ST_MENU_ITEM *ami; ST_CMDBAR_ITEM *aci; processed = st_menu_driver(menu, event_keycode, press_alt, &nced.mevent); if (processed) { /* * Read info from pull down menu */ ami = st_menu_selected_item(&activated); if (activated) { next_command = ami->code; /* * Because pspg has not dialogs and use just menu, we use * menu items like options. For export options we want to * hold menu unclosed until command item is selected. So * next switch detects menu's id related to options and for * these items, the pull down menu stays visible. */ switch (next_command) { case cmd_UseClipboard_CSV: case cmd_UseClipboard_TSVC: case cmd_UseClipboard_text: case cmd_UseClipboard_INSERT: case cmd_UseClipboard_INSERT_with_comments: case cmd_UseClipboard_SQL_values: case cmd_UseClipboard_pipe_separated: case cmd_SetCopyFile: case cmd_SetCopyClipboard: case cmd_TogleEmptyStringIsNULL: case cmd_SetOwnNULLString: /* do nothing */ break; default: goto hide_menu; } } /* * Read info from bottom command bar */ if (!activated) { aci = st_menu_selected_command(&activated); if (activated) { next_command = aci->code; goto refresh; } } } if (processed && opts.menu_always && st_menu_get_focus(menu) == ST_MENU_FOCUS_FULL) menu_is_active = true; if (menu_is_active && !processed && (event_keycode == ST_MENU_ESCAPE || event_keycode == KEY_MOUSE)) { hide_menu: st_menu_unpost(menu, true); menu_is_active = false; if (!opts.menu_always) { st_menu_set_focus(menu, ST_MENU_FOCUS_NONE); } else { st_menu_set_focus(menu, ST_MENU_FOCUS_MOUSE_ONLY); st_menu_post(menu); } /* * When we leave menu due mouse action, and this mouse action * is button1 press, then we would to ignore button1 release. * The behave is consistent for this mouse click (press, release). */ if (event_keycode == KEY_MOUSE && (nced.mevent.bstate & BUTTON1_PRESSED)) ignore_mouse_release = true; goto refresh; } if (!processed) { translated_command_history = translated_command; command = translate_event(event_keycode, press_alt, &opts, &nested_command); translated_command = command; } else continue; } else { if (!redirect_mode) { translated_command_history = translated_command; command = translate_event(event_keycode, press_alt, &opts, &nested_command); translated_command = command; } } #endif prev_first_row = first_row; log_row("process command: %s", cmd_string(command)); if (command == cmd_Quit) break; else if (command == cmd_Invalid) continue; else if (command == cmd_RawOutputQuit) { raw_output_quit = true; break; } else if (command == cmd_Escape) { /* same like sigint handling */ if (!opts.no_sigint_search_reset && (*scrdesc.searchterm || *scrdesc.searchcolterm || scrdesc.selected_first_row != -1 || scrdesc.selected_first_column != -1)) { throw_searching(&scrdesc, &desc); throw_selection(&scrdesc, &desc, &mark_mode); } else { if (opts.on_sigint_exit) break; else show_info_wait(" For quit press \"q\" (or use on-sigint-exit option).", NULL, true, true, true, false); } } /* * When some commands requires complete load, then save * the command and complete load before. */ if ((require_complete_load(command) || require_complete_load(nested_command)) && !desc.completed) { deffered_command = command; continue; } switch (command) { #ifdef COMPILE_MENU case cmd_ShowMenu: { if (menu == NULL || reinit) { st_menu_set_desktop_window(stdscr); init_menu_config(&opts); menu = init_menu(menu, &opts); log_row("init menu"); } st_menu_set_focus(menu, ST_MENU_FOCUS_FULL); post_menu(&opts, menu); menu_is_active = true; continue; } #else case cmd_ShowMenu: reuse_event = false; break; #endif case cmd_TogleEmptyStringIsNULL: opts.empty_string_is_null = !opts.empty_string_is_null; #ifdef COMPILE_MENU st_menu_set_option(menu, cmd_TogleEmptyStringIsNULL, ST_MENU_OPTION_MARKED, opts.empty_string_is_null); if (opts.empty_string_is_null) st_menu_set_option(menu, cmd_SetOwnNULLString, ST_MENU_OPTION_MARKED, false); #endif break; case cmd_SetOwnNULLString: { char nullstr[256]; bool is_valid; if (last_nullstr[0] == '\0') { if (opts.nullstr) strncpy(last_nullstr, opts.nullstr, sizeof(last_nullstr) - 1); } is_valid = get_string("nullstr: ", nullstr, sizeof(nullstr) - 1, last_nullstr, 'u'); if (nullstr[0] != '\0') { free(opts.nullstr); opts.nullstr = sstrdup(nullstr); opts.empty_string_is_null = false; } else if (is_valid) opts.empty_string_is_null = true; #ifdef COMPILE_MENU if (nullstr[0] != '\0') { st_menu_set_option(menu, cmd_SetOwnNULLString, ST_MENU_OPTION_MARKED, true); st_menu_set_option(menu, cmd_TogleEmptyStringIsNULL, ST_MENU_OPTION_MARKED, false); } else { st_menu_set_option(menu, cmd_SetOwnNULLString, ST_MENU_OPTION_MARKED, false); st_menu_set_option(menu, cmd_TogleEmptyStringIsNULL, ST_MENU_OPTION_MARKED, opts.empty_string_is_null); } #endif break; } case cmd_SetCopyFile: opts.copy_target = COPY_TARGET_FILE; #ifdef COMPILE_MENU refresh_copy_target_options(&opts, menu); #endif break; case cmd_SetCopyClipboard: opts.copy_target = COPY_TARGET_CLIPBOARD; #ifdef COMPILE_MENU refresh_copy_target_options(&opts, menu); #endif break; case cmd_UseClipboard_CSV: opts.clipboard_format = CLIPBOARD_FORMAT_CSV; #ifdef COMPILE_MENU refresh_clipboard_options(&opts, menu); #endif break; case cmd_UseClipboard_TSVC: opts.clipboard_format = CLIPBOARD_FORMAT_TSVC; #ifdef COMPILE_MENU refresh_clipboard_options(&opts, menu); #endif break; case cmd_UseClipboard_SQL_values: opts.clipboard_format = CLIPBOARD_FORMAT_SQL_VALUES; #ifdef COMPILE_MENU refresh_clipboard_options(&opts, menu); #endif break; case cmd_UseClipboard_pipe_separated: opts.clipboard_format = CLIPBOARD_FORMAT_PIPE_SEPARATED; #ifdef COMPILE_MENU refresh_clipboard_options(&opts, menu); #endif break; case cmd_UseClipboard_text: opts.clipboard_format = CLIPBOARD_FORMAT_TEXT; #ifdef COMPILE_MENU refresh_clipboard_options(&opts, menu); #endif break; case cmd_UseClipboard_INSERT: opts.clipboard_format = CLIPBOARD_FORMAT_INSERT; #ifdef COMPILE_MENU refresh_clipboard_options(&opts, menu); #endif break; case cmd_UseClipboard_INSERT_with_comments: opts.clipboard_format = CLIPBOARD_FORMAT_INSERT_WITH_COMMENTS; #ifdef COMPILE_MENU refresh_clipboard_options(&opts, menu); #endif break; case cmd_NoHighlight: opts.no_highlight_search = true; opts.no_highlight_lines = false; goto reset_search; case cmd_HighlightValues: opts.no_highlight_search = false; opts.no_highlight_lines = true; goto reset_search; case cmd_HighlightLines: opts.no_highlight_search = false; opts.no_highlight_lines = false; goto reset_search; case cmd_CISearchSet: opts.ignore_lower_case = false; opts.ignore_case = true; goto reset_search; case cmd_USSearchSet: opts.ignore_lower_case = true; opts.ignore_case = false; goto reset_search; case cmd_CSSearchSet: opts.ignore_lower_case = false; opts.ignore_case = false; reset_search: throw_searching(&scrdesc, &desc); break; case cmd_ShowTopBar: opts.no_topbar = !opts.no_topbar; refresh_scr = true; break; #ifdef COMPILE_MENU case cmd_ShowBottomBar: opts.no_commandbar = !opts.no_commandbar; if (opts.no_commandbar) { if (cmdbar) { st_cmdbar_unpost(cmdbar); st_cmdbar_free(cmdbar); cmdbar = NULL; } } else if (!opts.less_status_bar) cmdbar = init_cmdbar(cmdbar, &opts); refresh_scr = true; break; #endif case cmd_ShowScrollbar: opts.show_scrollbar = !opts.show_scrollbar; refresh_scr = true; break; case cmd_RowNumToggle: opts.show_rownum = !opts.show_rownum; refresh_scr = true; break; case cmd_UtfArtToggle: opts.force_uniborder = !opts.force_uniborder; refresh_scr = true; break; case cmd_MenuAsciiArtToggle: opts.force_ascii_art = !opts.force_ascii_art; reinit = true; goto reinit_theme; case cmd_SoundToggle: quiet_mode = !quiet_mode; break; case cmd_SaveSetup: if (!save_config(tilde(NULL, PSPG_CONF), &opts)) { if (errno != 0) { char buffer1[1000]; snprintf(buffer1, 1000, "Cannot write to \"%.800s\" (%s)", PSPG_CONF, strerror(errno)); show_info_wait(buffer1, strerror(errno), true, true, false, true); } else show_info_wait(" Cannot write to \"%s\"", PSPG_CONF, true, true, false, true); } else show_info_wait(" Setup saved to \"%s\"", PSPG_CONF, true, true, true, false); break; case cmd_SetTheme_MidnightBlack: case cmd_SetTheme_Midnight: case cmd_SetTheme_Foxpro: case cmd_SetTheme_Pdmenu: case cmd_SetTheme_White: case cmd_SetTheme_Mutt: case cmd_SetTheme_Pcfand: case cmd_SetTheme_Green: case cmd_SetTheme_Blue: case cmd_SetTheme_WP: case cmd_SetTheme_Lowcontrast: case cmd_SetTheme_Darkcyan: case cmd_SetTheme_Paradox: case cmd_SetTheme_DBase: case cmd_SetTheme_DBasemagenta: case cmd_SetTheme_Red: case cmd_SetTheme_Simple: case cmd_SetTheme_SolarDark: case cmd_SetTheme_SolarLight: case cmd_SetTheme_GruvboxLight: case cmd_SetTheme_TaoLight: case cmd_SetTheme_Flatwhite: case cmd_SetTheme_RelationalPipes: case cmd_SetTheme_PaperColor: long_argument = cmd_get_theme(command); long_argument_is_valid = true; next_command = cmd_SetTheme; break; case cmd_SetTheme: { int theme_num = -1; if (long_argument_is_valid) { theme_num = (int) long_argument; long_argument_is_valid = false; } else { char theme_num_str[256]; get_string("theme number: ", theme_num_str, sizeof(theme_num_str) - 1, last_line, 'u'); if (theme_num_str[0] != '\0') { char *endptr; errno = 0; theme_num = strtol(theme_num_str, &endptr, 10); if (endptr == theme_num_str) { show_info_wait(" Cannot convert input string to number", NULL, true, true, false, true); break; } else if (errno != 0) { show_info_wait(" Cannot convert input string to number (%s)", strerror(errno), true, true, false, true); break; } } else break; } if (theme_num != -1) { if (theme_num < 0 || theme_num > MAX_STYLE) { char buffer[256]; snprintf(buffer, sizeof(buffer), "only color schemas 0..%d are supported", MAX_STYLE); show_info_wait(buffer, NULL, true, true, false, true); break; } opts.theme = theme_num; free(opts.custom_theme_name); opts.custom_theme_name = NULL; if (current_state) current_state->menu_template = -1; reinit = true; goto reinit_theme; } break; } case cmd_SetCustomTheme: { char *theme_name = NULL; char theme_name_str[256]; if (string_argument_is_valid) { theme_name = string_argument; string_argument_is_valid = false; } else { get_string("custom theme name: ", theme_name_str, sizeof(theme_name_str) - 1, last_line, 'u'); if (theme_name_str[0] != '\0') { int len = strlen(theme_name_str); char *trimmed_str; trimmed_str = trim_quoted_str(theme_name_str, &len); if (len > 0) { theme_name = trimmed_str; theme_name[len] = '\0'; } } } if (theme_name) { FILE *themefile; themefile = open_theme_desc(theme_name); if (themefile) { bool is_warning; if (theme_loader(themefile, custom_theme_tle, custom_theme_tle2, &state.theme_template, &state.menu_template, &is_warning)) { free(opts.custom_theme_name); opts.custom_theme_name = sstrdup(theme_name); if (is_warning) show_info_wait(" some fields in custom theme file are ignored (check log)", NULL, false, false, true, false); reinit = true; goto reinit_theme; } else { show_info_wait(" cannot to load theme %s", current_state->errstr, true, false, false, true); current_state->errstr = NULL; current_state->_errno = 0; } fclose(themefile); } else { show_info_wait(" %s", current_state->errstr, true, false, false, true); current_state->errstr = NULL; current_state->_errno = 0; } } break; } case cmd_BoldLabelsToggle: opts.bold_labels = !opts.bold_labels; reinit = true; goto reinit_theme; case cmd_BoldCursorToggle: opts.bold_cursor = !opts.bold_cursor; reinit = true; goto reinit_theme; case cmd_ToggleHighlightOddRec: opts.highlight_odd_rec = !opts.highlight_odd_rec; reinit = true; goto reinit_theme; case cmd_ToggleHideHeaderLine: opts.hide_header_line = !opts.hide_header_line; refresh_scr = true; break; case cmd_Mark: if (mark_mode != MARK_MODE_ROWS && mark_mode != MARK_MODE_BLOCK) { throw_selection(&scrdesc, &desc, &mark_mode); mark_mode = MARK_MODE_ROWS; mark_mode_start_row = cursor_row; } else mark_mode = MARK_MODE_NONE; break; case cmd_MarkColumn: { if (!check_visible_vertical_cursor(&desc, &opts, vertical_cursor_column)) break; if (mark_mode != MARK_MODE_BLOCK) { throw_selection(&scrdesc, &desc, &mark_mode); mark_mode = MARK_MODE_BLOCK; mark_mode_start_row = cursor_row; mark_mode_start_col = vertical_cursor_column; } else mark_mode = MARK_MODE_NONE; } break; case cmd_Mark_NestedCursorCommand: if (mark_mode != MARK_MODE_CURSOR) { throw_selection(&scrdesc, &desc, &mark_mode); mark_mode = MARK_MODE_CURSOR; mark_mode_start_row = cursor_row; } next_command = nested_command; break; case cmd_Unmark: throw_selection(&scrdesc, &desc, &mark_mode); break; case cmd_MarkAll: throw_selection(&scrdesc, &desc, &mark_mode); mark_mode = MARK_MODE_NONE; scrdesc.selected_first_row = 0; scrdesc.selected_rows = MAX_CURSOR_ROW + 1; scrdesc.selected_first_column = -1; scrdesc.selected_columns = -1; break; case cmd_MouseToggle: { if (!opts.no_mouse) { mousemask(0, &prev_mousemask); opts.no_mouse = true; (void) disable_xterm_mouse_mode(); } else { if (!mouse_was_initialized) { mouseinterval(0); #if NCURSES_MOUSE_VERSION > 1 mousemask(BUTTON1_PRESSED | BUTTON1_RELEASED | BUTTON4_PRESSED | BUTTON5_PRESSED | BUTTON_ALT | BUTTON_CTRL | #ifdef PDCURSES MOUSE_WHEEL_SCROLL | REPORT_MOUSE_POSITION | #endif (opts.xterm_mouse_mode ? REPORT_MOUSE_POSITION : 0), NULL); #else mousemask(BUTTON1_PRESSED | BUTTON1_RELEASED, NULL); #endif mouse_was_initialized = true; } else mousemask(prev_mousemask, NULL); enable_xterm_mouse_mode(opts.xterm_mouse_mode); opts.no_mouse= false; } show_info_wait(" mouse handling: %s ", opts.no_mouse ? "off" : "on", false, true, true, false); break; } case cmd_ShowCursor: opts.no_cursor = !opts.no_cursor; refresh_scr = true; break; case cmd_ShowVerticalCursor: { if (desc.columns == 0) { show_info_wait(" Vertical cursor is available only for tables.", NULL, true, true, true, false); break; } opts.vertical_cursor = !opts.vertical_cursor; if (opts.vertical_cursor) { int xpoint; int prev_command = translated_command_history; int i; if (scrdesc.found && ( prev_command == cmd_SearchPrev || prev_command == cmd_SearchNext || prev_command == cmd_ForwardSearch || prev_command == cmd_BackwardSearch)) { /* * When immediately previous command was some search command, try to * set vertical cursor by searching result. */ for (i = 0; i < desc.columns; i++) { if (desc.cranges[i].xmin <= scrdesc.found_start_x && scrdesc.found_start_x < desc.cranges[i].xmax) { vertical_cursor_column = i + 1; last_x_focus = get_x_focus(vertical_cursor_column, cursor_col, &desc, &scrdesc); break; } } } if (last_x_focus == -1) { /* try to find first visible columns after fixed columns */ last_x_focus = scrdesc.fix_cols_cols; } if (last_x_focus >= scrdesc.fix_cols_cols - 1) xpoint = last_x_focus + cursor_col; else xpoint = last_x_focus; for (i = 0; i < desc.columns; i++) { if (desc.cranges[i].xmin <= xpoint && desc.cranges[i].xmax > xpoint) { vertical_cursor_column = i + 1; if (vertical_cursor_column > (opts.freezed_cols > -1 ? opts.freezed_cols : default_freezed_cols)) { if (desc.cranges[i].xmax > scrdesc.main_maxx + cursor_col) { cursor_col = desc.cranges[i].xmax - scrdesc.main_maxx; } else if (desc.cranges[i].xmin < scrdesc.fix_cols_cols + cursor_col) { cursor_col = desc.cranges[i].xmin - scrdesc.fix_cols_cols + 1; } } break; } } } refresh_scr = true; } break; case cmd_FlushBookmarks: { SimpleLineBufferIter slbi, *_slbi; _slbi = init_slbi_ddesc(&slbi, &desc); while (_slbi) { LineInfo *linfo; _slbi = slbi_get_line_next(_slbi, NULL, &linfo); if (linfo && (linfo->mask & LINEINFO_BOOKMARK)) linfo->mask ^= LINEINFO_BOOKMARK; } } break; case cmd_ToggleBookmark: { LineBufferMark lbm; int _cursor_row; if (mouse_row != -1) { _cursor_row = mouse_row + CURSOR_ROW_OFFSET; mouse_row = -1; mouse_col = -1; } else _cursor_row = cursor_row + CURSOR_ROW_OFFSET; if (ddesc_set_mark(&lbm, &desc, _cursor_row)) lbm_xor_mask(&lbm, LINEINFO_BOOKMARK); } break; case cmd_PrevBookmark: { int lineno; bool found = false; /* start from previous line before cursor */ lineno = cursor_row + CURSOR_ROW_OFFSET - 1; if (lineno > 0) { LineBufferIter lbi; LineInfo *linfo; init_lbi_ddesc(&lbi, &desc, lineno); while (lbi_get_line_prev(&lbi, NULL, &linfo, &lineno)) { if (linfo && linfo->mask & LINEINFO_BOOKMARK) { cursor_row = lineno - CURSOR_ROW_OFFSET; if (cursor_row < first_row) first_row = cursor_row; found = true; break; } } } if (!found) make_beep(); } break; case cmd_NextBookmark: { LineBufferIter lbi; LineInfo *linfo; int lineno; bool found = false; /* start after (next line) cursor line */ lineno = cursor_row + CURSOR_ROW_OFFSET + 1; init_lbi_ddesc(&lbi, &desc, lineno); while (lbi_get_line_next(&lbi, NULL, &linfo, &lineno)) { if (linfo && linfo->mask & LINEINFO_BOOKMARK) { cursor_row = lineno - CURSOR_ROW_OFFSET; if (cursor_row - first_row + 1 > VISIBLE_DATA_ROWS) first_row = cursor_row - VISIBLE_DATA_ROWS + 1; first_row = adjust_first_row(first_row, &desc, &scrdesc); found = true; break; } } if (!found) make_beep(); } break; case cmd_ReleaseCols: opts.freezed_cols = 0; show_first_col: if (after_freeze_signal && opts.vertical_cursor && vertical_cursor_column > (opts.freezed_cols > -1 ? opts.freezed_cols : default_freezed_cols)) recheck_vertical_cursor_visibility = true; else cursor_col = 0; refresh_scr = true; break; case cmd_FreezeOneCol: opts.freezed_cols = 1; after_freeze_signal = true; goto show_first_col; case cmd_FreezeTwoCols: opts.freezed_cols = 2; after_freeze_signal = true; goto show_first_col; case cmd_FreezeThreeCols: opts.freezed_cols = 3; after_freeze_signal = true; goto show_first_col; case cmd_FreezeFourCols: opts.freezed_cols = 4; after_freeze_signal = true; goto show_first_col; case cmd_FreezeFiveCols: opts.freezed_cols = 5; after_freeze_signal = true; goto show_first_col; case cmd_FreezeSixCols: opts.freezed_cols = 6; after_freeze_signal = true; goto show_first_col; case cmd_FreezeSevenCols: opts.freezed_cols = 7; after_freeze_signal = true; goto show_first_col; case cmd_FreezeEightCols: opts.freezed_cols = 8; after_freeze_signal = true; goto show_first_col; case cmd_FreezeNineCols: opts.freezed_cols = 9; after_freeze_signal = true; goto show_first_col; case cmd_CursorFirstRow: cursor_row = 0; first_row = 0; break; case cmd_CursorLastRow: cursor_row = MAX_CURSOR_ROW; first_row = MAX_FIRST_ROW; if (first_row < 0) first_row = 0; break; case cmd_CursorUp: { if (opts.no_cursor) { next_command = cmd_ScrollUp; break; } if (cursor_row > 0) { /* * When we are on data position, and we are going up, and a * fixed rows are hidden, then unhide fixed rows first (by * decreasing first_row) */ if (fix_rows_offset > 0 && !is_footer_cursor(cursor_row, &scrdesc, &desc)) first_row -= 1; else cursor_row -= 1; /* * When fixed rows are hidden, then gap between first * row and cursor row can be bigger (about fix_rows_offset. */ if (cursor_row + fix_rows_offset < first_row) first_row = cursor_row + fix_rows_offset; } else make_beep(); break; } case cmd_CursorDown: { int max_cursor_row; if (opts.no_cursor) { next_command = cmd_ScrollDown; break; } max_cursor_row = MAX_CURSOR_ROW; if (++cursor_row > max_cursor_row) { cursor_row = max_cursor_row; make_beep(); } if (cursor_row - first_row + 1 > VISIBLE_DATA_ROWS) first_row += 1; first_row = adjust_first_row(first_row, &desc, &scrdesc); } break; case cmd_ScrollDownHalfPage: { int offset = ((VISIBLE_DATA_ROWS - 1) >> 1); int max_cursor_row; int max_first_row; max_first_row = MAX_FIRST_ROW; max_cursor_row = MAX_CURSOR_ROW; if (first_row + offset <= max_first_row) { first_row += offset; cursor_row += offset; } else if (cursor_row + offset <= max_cursor_row) { cursor_row += offset; first_row = max_first_row; } else { cursor_row = max_cursor_row; first_row = max_first_row; } } break; case cmd_ScrollUpHalfPage: { int offset = ((VISIBLE_DATA_ROWS - 1) >> 1); if (first_row - offset > 0) { first_row -= offset; cursor_row -= offset; } else if (cursor_row - offset > 0) { first_row = 0; cursor_row -= offset; } else { first_row = 0; cursor_row = 0; } } break; case cmd_ScrollDown: { int max_cursor_row; int max_first_row; max_first_row = MAX_FIRST_ROW; max_cursor_row = MAX_CURSOR_ROW; if (first_row < max_first_row) { first_row += 1; cursor_row += 1; } else if (cursor_row < max_cursor_row) { cursor_row += 1; } } break; case cmd_ScrollUp: if (first_row > 0) { first_row -= 1; cursor_row -= 1; } else if (cursor_row > 0) cursor_row -= 1; break; case cmd_MoveCharLeft: long_argument = 1; long_argument_is_valid = true; next_command = cmd_MoveLeft; break; case cmd_MoveCharRight: long_argument = 1; long_argument_is_valid = true; next_command = cmd_MoveRight; break; case cmd_MoveColumnLeft: long_argument = desc.maxx; long_argument_is_valid = true; next_command = cmd_MoveLeft; break; case cmd_MoveColumnRight: long_argument = desc.maxx; long_argument_is_valid = true; next_command = cmd_MoveRight; break; case cmd_MoveLeft: { bool _is_footer_cursor = is_footer_cursor(cursor_row, &scrdesc, &desc); int recheck_count = 0; recheck_left: if (++recheck_count > 2) break; if (_is_footer_cursor) { if (footer_cursor_col > 0) footer_cursor_col -= 1; else if (scrdesc.rows_rows >= 0) { _is_footer_cursor = false; footer_cursor_col = 0; goto recheck_left; } } else { int move_left; int step = 30; if (long_argument_is_valid) { step = (int) long_argument; long_argument_is_valid = false; } move_left = step; if (cursor_col == 0 && scrdesc.footer_rows > 0 && (!opts.vertical_cursor || (vertical_cursor_column == 1))) { _is_footer_cursor = true; goto recheck_left; } if (desc.headline_transl != NULL) { if (opts.vertical_cursor && desc.columns > 0 && vertical_cursor_column > 0) { move_left = 0; if (vertical_cursor_column > (opts.freezed_cols > -1 ? opts.freezed_cols : default_freezed_cols)) { int left_border = scrdesc.fix_cols_cols + cursor_col - 1; int xmin = desc.cranges[vertical_cursor_column - 1].xmin; if (xmin < left_border) { move_left = left_border - xmin; if (move_left > step) move_left = step; } else { if (vertical_cursor_column > 1) { vertical_cursor_column -= 1; last_x_focus = get_x_focus(vertical_cursor_column, cursor_col, &desc, &scrdesc); xmin = desc.cranges[vertical_cursor_column - 1].xmin; if (xmin < left_border) { move_left = left_border - xmin; if (move_left > step) move_left = step; } } } } else { if (vertical_cursor_column > 1) vertical_cursor_column -= 1; cursor_col = 0; break; } } else { int i; for (i = 1; i <= step; i++) { int pos = scrdesc.fix_cols_cols + cursor_col - i - 1; if (pos < 0) break; if (desc.headline_transl[pos] == 'I') { move_left = i; break; } } } } cursor_col -= move_left; if (cursor_col < 3) cursor_col = 0; } } break; case cmd_MoveRight: { bool _is_footer_cursor = is_footer_cursor(cursor_row, &scrdesc, &desc); int recheck_count = 0; recheck_right: if (++recheck_count > 2) break; if (_is_footer_cursor) { int max_footer_cursor_col = desc.footer_char_size - scrdesc.main_maxx; if (footer_cursor_col + 1 >= max_footer_cursor_col && scrdesc.rows_rows >= 0) { _is_footer_cursor = false; footer_cursor_col = max_footer_cursor_col; goto recheck_right; } else footer_cursor_col += 1; if (footer_cursor_col > max_footer_cursor_col) footer_cursor_col = max_footer_cursor_col; } else { int move_right; int max_cursor_col; int new_cursor_col = cursor_col; int prev_vertical_cursor_column = vertical_cursor_column; int step = 30; if (long_argument_is_valid) { step = (int) long_argument; long_argument_is_valid = false; } move_right = step; if (desc.headline_transl != NULL) { if (opts.vertical_cursor) { int vmaxx = desc.cranges[vertical_cursor_column - 1].xmax; /* move only right when right corner is not visible already */ if (cursor_col + scrdesc.main_maxx < vmaxx) { int wx = vmaxx - scrdesc.main_maxx - cursor_col + 1; move_right = wx > step ? step : wx; } else { if (vertical_cursor_column < desc.columns) { vertical_cursor_column += 1; last_x_focus = get_x_focus(vertical_cursor_column, cursor_col, &desc, &scrdesc); vmaxx = desc.cranges[vertical_cursor_column - 1].xmax; if (cursor_col + scrdesc.main_maxx < vmaxx) { int wx = vmaxx - scrdesc.main_maxx - cursor_col + 1; move_right = wx > step ? step : wx; } else move_right = 0; } } } else { char *str = &desc.headline_transl[scrdesc.fix_cols_cols + cursor_col + 1]; int i; /* * Try to find column end in next step chars. Skip first * char, and later skip border. */ for (i = 0; i < step; i++) { if (*str == '\0') break; if (*str++ == 'I') { move_right = i + 2; break; } } } } new_cursor_col += move_right; if (desc.headline_transl != NULL) max_cursor_col = desc.headline_char_size - scrdesc.main_maxx; else max_cursor_col = desc.maxx - scrdesc.maxx - 1; max_cursor_col = max_cursor_col > 0 ? max_cursor_col : 0; if (new_cursor_col > max_cursor_col) new_cursor_col = max_cursor_col; if (new_cursor_col == cursor_col && scrdesc.footer_rows > 0 && (!opts.vertical_cursor || (vertical_cursor_column == desc.columns))) { _is_footer_cursor = true; goto recheck_right; } cursor_col = new_cursor_col; /* * When we go leave fixed columns, then first unfixed column should * be visible. */ if (desc.headline_transl && opts.vertical_cursor) { int fixed_columns = opts.freezed_cols > -1 ? opts.freezed_cols : default_freezed_cols; if (prev_vertical_cursor_column == fixed_columns && vertical_cursor_column == fixed_columns + 1) cursor_col = 0; } } } break; case cmd_CursorFirstRowPage: cursor_row = first_row; break; case cmd_CursorLastRowPage: cursor_row = first_row + VISIBLE_DATA_ROWS - 1; break; case cmd_CursorHalfPage: cursor_row = first_row + ((VISIBLE_DATA_ROWS - 1) >> 1); break; case cmd_PageUp: { int offset; if (desc.is_expanded_mode && scrdesc.first_rec_title_y != -1 && scrdesc.last_rec_title_y != -1) offset = scrdesc.last_rec_title_y - scrdesc.first_rec_title_y; else offset = scrdesc.main_maxy - scrdesc.fix_rows_rows; if (first_row > 0) { first_row -= offset; if (first_row < 0) first_row = 0; } if (cursor_row > 0) { cursor_row -= offset; if (cursor_row < 0) cursor_row = 0; } else make_beep(); } break; case cmd_PageDown: { int max_cursor_row; int offset; if (desc.is_expanded_mode && scrdesc.first_rec_title_y != -1 && scrdesc.last_rec_title_y != -1) offset = scrdesc.last_rec_title_y - scrdesc.first_rec_title_y; else offset = scrdesc.main_maxy - scrdesc.fix_rows_rows; first_row += offset; cursor_row += offset; max_cursor_row = MAX_CURSOR_ROW; if (cursor_row > max_cursor_row) { cursor_row = max_cursor_row; make_beep(); } if (cursor_row - first_row + 1 > VISIBLE_DATA_ROWS) first_row += 1; first_row = adjust_first_row(first_row, &desc, &scrdesc); } break; case cmd_RESIZE_EVENT: { getmaxyx(stdscr, scrdesc.maxy, scrdesc.maxx); log_row("cmd_RESIZE_EVENT: info: stdscr - maxy: %d, maxx: %d", scrdesc.maxy, scrdesc.maxx); refresh_clear = true; if (!opts.no_cursor) { long_argument = cursor_row + 1; long_argument_is_valid = true; next_command = cmd_GotoLine; } } break; case cmd_ShowFirstCol: { bool _is_footer_cursor = is_footer_cursor(cursor_row, &scrdesc, &desc); int recheck_count = 0; recheck_home: if (++recheck_count > 2) break; if (_is_footer_cursor) { if (footer_cursor_col > 0) footer_cursor_col = 0; else if (scrdesc.rows_rows > 0) { footer_cursor_col = 0; _is_footer_cursor = false; goto recheck_home; } } else { if (opts.vertical_cursor && desc.columns > 0) { vertical_cursor_column = 1; last_x_focus = get_x_focus(vertical_cursor_column, cursor_col, &desc, &scrdesc); } if (cursor_col > 0) cursor_col = 0; else if (scrdesc.footer_rows > 0) { cursor_col = 0; _is_footer_cursor = true; goto recheck_home; } } break; } case cmd_ShowLastCol: { bool _is_footer_cursor = is_footer_cursor(cursor_row, &scrdesc, &desc); int recheck_count = 0; recheck_end: if (++recheck_count > 2) break; if (_is_footer_cursor) { if (footer_cursor_col < desc.footer_char_size - scrdesc.main_maxx) footer_cursor_col = desc.footer_char_size - scrdesc.main_maxx; else if (scrdesc.rows_rows > 0) { footer_cursor_col = desc.footer_char_size - scrdesc.main_maxx; _is_footer_cursor = false; goto recheck_end; } } else { int new_cursor_col; if (opts.vertical_cursor && desc.columns > 0) { vertical_cursor_column = desc.columns; last_x_focus = get_x_focus(vertical_cursor_column, cursor_col, &desc, &scrdesc); } if (desc.headline != NULL) new_cursor_col = desc.headline_char_size - scrdesc.main_maxx; else new_cursor_col = desc.maxx - maxx - 1; new_cursor_col = new_cursor_col > 0 ? new_cursor_col : 0; if (new_cursor_col > cursor_col) cursor_col = new_cursor_col; else if (scrdesc.footer_rows > 0) { _is_footer_cursor = true; cursor_col = new_cursor_col; goto recheck_end; } } break; } case cmd_GotoLine: { int max_cursor_row; long lineno; if (long_argument_is_valid) { lineno = long_argument; long_argument_is_valid = false; } else { char linenotxt[256]; get_string("line: ", linenotxt, sizeof(linenotxt) - 1, last_line, 'u'); if (linenotxt[0] != '\0') { char *endptr; errno = 0; lineno = strtol(linenotxt, &endptr, 10); if (endptr == linenotxt) { show_info_wait(" Cannot convert input string to number", NULL, true, true, false, true); break; } else if (errno != 0) { show_info_wait(" Cannot convert input string to number (%s)", strerror(errno), true, true, false, true); break; } } else break; } if (lineno < 0) lineno = MAX_CURSOR_ROW + lineno + 2; cursor_row = lineno - 1; if (cursor_row < 0) cursor_row = 0; max_cursor_row = MAX_CURSOR_ROW; if (cursor_row > max_cursor_row) { cursor_row = max_cursor_row; make_beep(); } if (cursor_row < first_row) { if (first_row - cursor_row <= 5) first_row = cursor_row; else first_row = cursor_row - VISIBLE_DATA_ROWS / 2; first_row = adjust_first_row(first_row, &desc, &scrdesc); } else if (cursor_row - first_row + 1 > VISIBLE_DATA_ROWS) { if (cursor_row - first_row + 1 - VISIBLE_DATA_ROWS <= 5) first_row = cursor_row - VISIBLE_DATA_ROWS + 1; else first_row = cursor_row - VISIBLE_DATA_ROWS / 2; first_row = adjust_first_row(first_row, &desc, &scrdesc); } snprintf(last_line, sizeof(last_line), "%ld", lineno); break; } case cmd_GotoLineRel: { if (long_argument_is_valid) { long_argument = long_argument + cursor_row + 1; next_command = cmd_GotoLine; } else show_info_wait(" Internal error - expected valid internal long argument", NULL, true, true, false, true); break; } case cmd_OriginalSort: if (desc.order_map) { free(desc.order_map); desc.order_map = NULL; last_ordered_column = -1; throw_selection(&scrdesc, &desc, &mark_mode); } /* * We cannot to say nothing about found_row, so most * correct solution is clean it now. */ scrdesc.found_row = -1; break; case cmd_SortAsc: case cmd_SortDesc: { int sortedby_colno; bool show_info = false; if (long_argument_is_valid) { sortedby_colno = (int) long_argument; long_argument_is_valid = false; show_info = true; } else { if (!check_visible_vertical_cursor(&desc, &opts, vertical_cursor_column)) break; sortedby_colno = vertical_cursor_column; } update_order_map(&scrdesc, &desc, sortedby_colno, command == cmd_SortDesc); last_ordered_column = sortedby_colno; last_order_desc = command == cmd_SortDesc; throw_selection(&scrdesc, &desc, &mark_mode); /* * Show info when sorted column is specified by name, * by bs command. */ if (show_info) { char column_name[65]; bool have_name = false; if (desc.cranges) { char *name = desc.namesline + desc.cranges[sortedby_colno - 1].name_offset; int label_size = desc.cranges[sortedby_colno - 1].name_size; if (label_size > 0) { memset(column_name, 0, sizeof(column_name)); strncpy(column_name, name, min_int(64, label_size)); have_name = true; } } if (!have_name) snprintf(column_name, 65, "%d", sortedby_colno); if (command == cmd_SortDesc) show_info_wait(" Sorted by column \"%s\" descentdly", column_name, false, true, true, false); else show_info_wait(" Sorted by column \"%s\"", column_name, false, true, true, false); } break; } case cmd_SaveData: { export_to_file(cmd_SaveData, CLIPBOARD_FORMAT_TEXT, &opts, &scrdesc, &desc, 0, 0, 0, 0.0, NULL, &refresh_clear); break; } case cmd_SaveAsCSV: { export_to_file(cmd_SaveAsCSV, CLIPBOARD_FORMAT_CSV, &opts, &scrdesc, &desc, 0, 0, 0, 0.0, NULL, &refresh_clear); break; } case cmd_Copy: { export_to_file(cmd_Copy, opts.clipboard_format, &opts, &scrdesc, &desc, cursor_row, vertical_cursor_column, 0, 0.0, NULL, &refresh_clear); break; } case cmd_CopyLine: { export_to_file(cmd_CopyLine, opts.clipboard_format, &opts, &scrdesc, &desc, cursor_row, 0, 0, 0.0, NULL, &refresh_clear); break; } case cmd_CopyLineExtended: { ClipboardFormat fmt; if (DSV_FORMAT_TYPE(opts.clipboard_format)) fmt = opts.clipboard_format; else fmt = CLIPBOARD_FORMAT_CSV; export_to_file(cmd_CopyLineExtended, fmt, &opts, &scrdesc, &desc, cursor_row, 0, 0, 0.0, NULL, &refresh_clear); break; } case cmd_CopyColumn: { export_to_file(cmd_CopyColumn, opts.clipboard_format, &opts, &scrdesc, &desc, 0, vertical_cursor_column, 0, 0.0, NULL, &refresh_clear); break; } case cmd_CopySelected: { export_to_file(cmd_CopySelected, opts.clipboard_format, &opts, &scrdesc, &desc, cursor_row, 0, 0, 0.0, NULL, &refresh_clear); break; } case cmd_CopyAllLines: { export_to_file(cmd_CopyAllLines, opts.clipboard_format, &opts, &scrdesc, &desc, 0, 0, 0, 0.0, NULL, &refresh_clear); break; } case cmd_CopyTopLines: { export_to_file(cmd_CopyTopLines, opts.clipboard_format, &opts, &scrdesc, &desc, 0, 0, 0, 0.0, NULL, &refresh_clear); break; } case cmd_CopyBottomLines: { export_to_file(cmd_CopyBottomLines, opts.clipboard_format, &opts, &scrdesc, &desc, 0, 0, 0, 0.0, NULL, &refresh_clear); break; } case cmd_CopyMarkedLines: { export_to_file(cmd_CopyMarkedLines, opts.clipboard_format, &opts, &scrdesc, &desc, 0, 0, 0, 0.0, NULL, &refresh_clear); break; } case cmd_CopySearchedLines: { export_to_file(cmd_CopySearchedLines, opts.clipboard_format, &opts, &scrdesc, &desc, 0, 0, 0, 0.0, NULL, &refresh_clear); break; } case cmd_ForwardSearch: { char locsearchterm[256]; bool isSelSearch; search_direction = SEARCH_FORWARD; isSelSearch = scrdesc.search_rows > 0 || scrdesc.search_columns > 0; if (string_argument_is_valid) { strncpy(locsearchterm, string_argument, sizeof(locsearchterm) - 1); locsearchterm[sizeof(locsearchterm) - 1] = '\0'; memcpy(last_row_search, locsearchterm, sizeof(last_row_search)); free(string_argument); string_argument = NULL; string_argument_is_valid = false; } else get_string(isSelSearch ? "^/" : "/", locsearchterm, sizeof(locsearchterm) - 1, (opts.last_row_search ? last_row_search : NULL), 'u'); /* * If we don't automatically use the last pattern, use the * last pattern if no pattern was provided. */ if (!opts.last_row_search) { if (locsearchterm[0] != '\0') memcpy(last_row_search, locsearchterm, sizeof(last_row_search)); else if (last_row_search[0] != '\0') memcpy(locsearchterm, last_row_search, sizeof(last_row_search)); } if (locsearchterm[0] != '\0') { strncpy(scrdesc.searchterm, locsearchterm, sizeof(scrdesc.searchterm)); scrdesc.has_upperchr = test_upperchr(scrdesc.searchterm); scrdesc.searchterm_size = strlen(scrdesc.searchterm); scrdesc.searchterm_char_size = use_utf8 ? utf8len(scrdesc.searchterm) : (int) strlen(scrdesc.searchterm); search_direction = SEARCH_FORWARD; reset_searching_lineinfo(&desc); /* continue to find next: */ next_command = cmd_SearchNext; } else throw_searching(&scrdesc, &desc); break; } case cmd_SearchNext: { LineBufferIter lbi; int lineno; char *line; int skip_bytes = 0; if (!*scrdesc.searchterm) break; /* call inverse command when search direction is SEARCH_BACKWARD */ if (command == cmd_SearchNext && search_direction == SEARCH_BACKWARD && !redirect_mode) { next_command = cmd_SearchPrev; break; } lineno = cursor_row + CURSOR_ROW_OFFSET; if (scrdesc.found && lineno == scrdesc.found_row) skip_bytes = scrdesc.found_start_bytes + scrdesc.searchterm_size; scrdesc.found = false; init_lbi_ddesc(&lbi, &desc, lineno); while (lbi_get_line_next(&lbi, &line, NULL, &lineno)) { const char *pttrn; if (scrdesc.search_rows > 0) { if (lineno - CURSOR_ROW_OFFSET < scrdesc.search_first_row || lineno - CURSOR_ROW_OFFSET >= scrdesc.search_first_row + scrdesc.search_rows) { continue; } } pttrn = pspg_search(&opts, &scrdesc, line + skip_bytes); while (pttrn) { /* apply column selection filtr */ if (scrdesc.search_columns > 0) { int bytes = pttrn - line; int pos = use_utf8 ? utf_string_dsplen(line, bytes) : bytes; if (pos < scrdesc.search_first_column) { pttrn += charlen(pttrn); pttrn = pspg_search(&opts, &scrdesc, pttrn); continue; } if (pos > scrdesc.search_first_column + scrdesc.search_columns - 1) pttrn = NULL; } break; } if (pttrn) { int found_start_bytes = pttrn - line; scrdesc.found_start_x = use_utf8 ? utf_string_dsplen(line, found_start_bytes) : (int) (found_start_bytes); scrdesc.found_start_bytes = found_start_bytes; scrdesc.found_row = lineno; fresh_found = true; fresh_found_cursor_col = -1; cursor_row = lineno - CURSOR_ROW_OFFSET; if (cursor_row - first_row + 1 > VISIBLE_DATA_ROWS) first_row = cursor_row - VISIBLE_DATA_ROWS + 1; first_row = adjust_first_row(first_row, &desc, &scrdesc); scrdesc.found = true; break; } skip_bytes = 0; } if (!scrdesc.found) show_info_wait(" Not found", NULL, true, true, false, false); break; } case cmd_BackwardSearch: { char locsearchterm[256]; bool isSelSearch; search_direction = SEARCH_BACKWARD; isSelSearch = scrdesc.search_rows > 0 || scrdesc.search_columns > 0; if (string_argument_is_valid) { strncpy(locsearchterm, string_argument, sizeof(locsearchterm) - 1); locsearchterm[sizeof(locsearchterm) - 1] = '\0'; memcpy(last_row_search, locsearchterm, sizeof(last_row_search)); free(string_argument); string_argument = NULL; string_argument_is_valid = false; } else get_string(isSelSearch ? "^?" : "?", locsearchterm, sizeof(locsearchterm) - 1, (opts.last_row_search ? last_row_search : NULL), 'u'); reset_searching_lineinfo(&desc); /* * If we don't automatically use the last pattern, use the * last pattern if no pattern was provided. */ if (!opts.last_row_search) { if (locsearchterm[0] != '\0') memcpy(last_row_search, locsearchterm, sizeof(last_row_search)); else if (last_row_search[0] != '\0') memcpy(locsearchterm, last_row_search, sizeof(last_row_search)); } if (locsearchterm[0] != '\0') { strncpy(scrdesc.searchterm, locsearchterm, sizeof(scrdesc.searchterm)); scrdesc.has_upperchr = test_upperchr(scrdesc.searchterm); scrdesc.searchterm_size = strlen(scrdesc.searchterm); scrdesc.searchterm_char_size = utf8len(scrdesc.searchterm); reset_searching_lineinfo(&desc); /* continue to find next: */ next_command = cmd_SearchPrev; } else throw_searching(&scrdesc, &desc); break; } case cmd_SearchPrev: { LineBufferIter lbi; int lineno; char *line, *_line; int cut_bytes = 0; if (!*scrdesc.searchterm) break; /* call inverse command when search direction is SEARCH_BACKWARD */ if (command == cmd_SearchPrev && search_direction == SEARCH_BACKWARD && !redirect_mode) { next_command = cmd_SearchNext; break; } lineno = cursor_row + CURSOR_ROW_OFFSET; /* * when we can search on found line, the use it, * else try start searching from previous row. */ if (scrdesc.found && lineno == scrdesc.found_row && scrdesc.found_start_bytes > 0) cut_bytes = scrdesc.found_start_bytes; else lineno -= 1; scrdesc.found = false; init_lbi_ddesc(&lbi, &desc, lineno); while (lbi_get_line_prev(&lbi, &line, NULL, &lineno)) { const char *ptr; const char *most_right_pttrn = NULL; /* inside table don't try search below first data row */ if (desc.headline_transl) { if (lineno < desc.first_data_row) break; } if (scrdesc.search_rows > 0) { if (lineno - CURSOR_ROW_OFFSET < scrdesc.search_first_row || lineno - CURSOR_ROW_OFFSET >= scrdesc.search_first_row + scrdesc.search_rows) { continue; } } _line = cut_bytes > 0 ? sstrndup(line, cut_bytes) : line; ptr = _line; /* try to find most right pattern */ while (ptr) { ptr = pspg_search(&opts, &scrdesc, ptr); if (ptr) { /* apply column selection filtr */ if (scrdesc.search_columns > 0) { int bytes = ptr - _line; int pos = use_utf8 ? utf_string_dsplen(_line, bytes) : bytes; if (pos < scrdesc.search_first_column) { ptr += charlen(ptr); continue; } if (pos > scrdesc.search_first_column + scrdesc.search_columns - 1) break; } most_right_pttrn = ptr; ptr += scrdesc.searchterm_size; } } if (most_right_pttrn) { int found_start_bytes = most_right_pttrn - _line; cursor_row = lineno - CURSOR_ROW_OFFSET; if (first_row > cursor_row) first_row = cursor_row; scrdesc.found_start_x = use_utf8 ? utf8len_start_stop(_line, most_right_pttrn) : (size_t) (found_start_bytes); scrdesc.found_start_bytes = found_start_bytes; scrdesc.found_row = lineno; fresh_found = true; fresh_found_cursor_col = -1; if (line != _line) free(_line); scrdesc.found = true; break; } if (line != _line) free(_line); cut_bytes = 0; } if (!scrdesc.found) show_info_wait(" Not found", NULL, true, true, false, false); break; } case cmd_ForwardSearchInSelection: case cmd_BackwardSearchInSelection: { if (scrdesc.selected_first_row == -1 && scrdesc.selected_first_column == -1) { show_info_wait(" There are not selected area", NULL, true, true, true, false); break; } next_command = command == cmd_ForwardSearchInSelection ? cmd_ForwardSearch : cmd_BackwardSearch; scrdesc.search_first_row = scrdesc.selected_first_row; scrdesc.search_rows = scrdesc.selected_rows; scrdesc.search_first_column = scrdesc.selected_first_column; scrdesc.search_columns = scrdesc.selected_columns; scrdesc.search_selected_mode = true; break; } case cmd_SearchColumn: { if (desc.namesline) { char locsearchterm[256]; get_string("c:", locsearchterm, sizeof(locsearchterm) - 1, last_col_search, 'u'); if (locsearchterm[0] != '\0') { memcpy(last_col_search, locsearchterm, sizeof(last_col_search)); strncpy(scrdesc.searchcolterm, locsearchterm, sizeof(scrdesc.searchcolterm)); scrdesc.searchcolterm_size = strlen(scrdesc.searchcolterm); } if (scrdesc.searchcolterm[0] != '\0') { bool found = false; int startcolumn; int colnum; bool search_from_start = false; /* * Where we should to start searching? * 1. after visible vertical cursor * 2. after cursor_col * 3. from first column */ if (opts.vertical_cursor) startcolumn = vertical_cursor_column + 1; else if (cursor_col > 0) { int first_x = scrdesc.fix_cols_cols + cursor_col; int i; /* fallback */ startcolumn = 1; for (i = 0; i < desc.columns; i++) { if (desc.cranges[i].xmin <= first_x && first_x < desc.cranges[i].xmax) { startcolumn = i + 1; break; } } } else startcolumn = 1; for (colnum = startcolumn; colnum <= desc.columns; colnum++) { if (use_utf8) { if (utf8_nstrstr_with_sizes(desc.namesline + desc.cranges[colnum - 1].name_offset, desc.cranges[colnum - 1].name_size, scrdesc.searchcolterm, scrdesc.searchcolterm_size)) { found = true; break; } } else { if (nstrstr_with_sizes(desc.namesline + desc.cranges[colnum - 1].name_offset, desc.cranges[colnum - 1].name_size, scrdesc.searchcolterm, scrdesc.searchcolterm_size)) { found = true; break; } } } if (!found) { search_from_start = true; for (colnum = 1; colnum < startcolumn; colnum++) { if (nstrstr_with_sizes(desc.namesline + desc.cranges[colnum - 1].name_offset, desc.cranges[colnum - 1].name_size, scrdesc.searchcolterm, scrdesc.searchcolterm_size)) { found = true; break; } } } if (found) { if (search_from_start) show_info_wait(" Search from first column", NULL, true, true, true, false); opts.vertical_cursor = true; vertical_cursor_column = colnum; cursor_col = get_cursor_col_for_vertical_column(vertical_cursor_column, cursor_col, &desc, &scrdesc); last_x_focus = get_x_focus(vertical_cursor_column, cursor_col, &desc, &scrdesc); } else show_info_wait(" Not found", NULL, true, true, false, false); } else show_info_wait(" Search pattern is a empty string", NULL, true, true, true, false); } else show_info_wait(" Columns names are not detected", NULL, true, true, true, false); break; } case cmd_TogglePause: paused = !paused; break; case cmd_Refresh: refresh_clear = true; break; case cmd_BsCommand: { if (!cmdline_ptr || *cmdline_ptr == '\0') { /* * When previous command batch is processed, read new */ get_string("", cmdline, sizeof(cmdline) - 1, NULL, 'c'); cmdline_ptr = cmdline; } cmdline_ptr = parse_and_eval_bscommand(cmdline_ptr, &opts, &scrdesc, &desc, &next_command, &long_argument, &long_argument_is_valid, &string_argument, &string_argument_is_valid, &refresh_clear); break; } case cmd_ShowPrimaryScreen: { endwin(); disable_xterm_mouse_mode(); (void) wait_on_press_any_key(); enable_xterm_mouse_mode(opts.xterm_mouse_mode); clearok(curscr, TRUE); refresh(); next_command = cmd_RESIZE_EVENT; break; } case cmd_MOUSE_EVENT: { mouse_event += 1; /* * ensure, so transformated mouse position is explicitly marked as * unknown. So transformated position will be from frash mouse event * always. */ mouse_row = -1; mouse_col = -1; #if NCURSES_MOUSE_VERSION > 1 if (nced.mevent.bstate & BUTTON_ALT && nced.mevent.bstate & BUTTON5_PRESSED) { next_command = cmd_MoveRight; break; } if (nced.mevent.bstate & BUTTON_ALT && nced.mevent.bstate & BUTTON4_PRESSED) { next_command = cmd_MoveLeft; break; } if (nced.mevent.bstate & BUTTON5_PRESSED) { int max_cursor_row; int offset = 1; int max_first_row = MAX_FIRST_ROW; int prev_row = first_row; if (max_first_row < 0) max_first_row = 0; if (desc.headline_transl != NULL) offset = (scrdesc.main_maxy - scrdesc.fix_rows_rows) / 3; else offset = 2; if (first_row + offset > max_first_row) offset = 1; first_row += offset; cursor_row += offset; max_cursor_row = MAX_CURSOR_ROW; if (cursor_row > max_cursor_row) { cursor_row = max_cursor_row; make_beep(); } if (cursor_row - first_row + 1 > VISIBLE_DATA_ROWS) first_row += 1; first_row = first_row > max_first_row ? max_first_row : first_row; if (first_row != prev_row) if (!opts.no_sleep) usleep(30 * 1000); } else if (nced.mevent.bstate & BUTTON4_PRESSED) { int offset = 1; int prev_row = first_row; if (desc.headline_transl != NULL) offset = (scrdesc.main_maxy - scrdesc.fix_rows_rows) / 3; else offset = 2; if (first_row <= offset) offset = 1; if (first_row > 0) { first_row -= offset; if (first_row < 0) first_row = 0; } if (cursor_row > 0) { cursor_row -= offset; if (cursor_row < 0) cursor_row = 0; } else make_beep(); /* * Without extra sleep time, an usage of mouse wheel can generate * events peak (too much frequent doupdate(s)) with unwanted * terminal flickering. We can limit a number of processed events * just by sleeping. */ if (first_row != prev_row) if (!opts.no_sleep) usleep(30 * 1000); } #endif if (nced.mevent.bstate & BUTTON1_PRESSED || nced.mevent.bstate & BUTTON1_RELEASED #if NCURSES_MOUSE_VERSION > 1 || nced.mevent.bstate & REPORT_MOUSE_POSITION #endif ) { bool is_double_click = false; bool _is_footer_cursor; long ms; time_t sec; /* * Own double click implentation. We need it, because we need * waster BUTTON1_PRESSED nced.mevent. */ if (nced.mevent.bstate & BUTTON1_RELEASED) { current_time(&sec, &ms); if (last_sec > 0) { long td; td = time_diff(sec, ms, last_sec, last_ms); if (td < 250) is_double_click = true; } last_sec = sec; last_ms = ms; } /* * leave modes, that needs holding mouse (scrollbar mode and * mark mode) when mouse button is released */ if (nced.mevent.bstate & BUTTON1_RELEASED && !is_double_click && (scrdesc.scrollbar_mode || mark_mode == MARK_MODE_MOUSE || mark_mode == MARK_MODE_MOUSE_BLOCK || mark_mode == MARK_MODE_MOUSE_COLUMNS)) { mark_mode = MARK_MODE_NONE; scrdesc.scrollbar_mode = false; scrdesc.slider_has_position = true; break; } #if NCURSES_MOUSE_VERSION > 1 /* mouse move breaks double click cycle */ if (nced.mevent.bstate & REPORT_MOUSE_POSITION) last_sec = 0; #endif /* scrollbar events implementation */ if (scrdesc.scrollbar_mode || (nced.mevent.x == scrdesc.scrollbar_x && nced.mevent.y >= scrdesc.scrollbar_start_y && nced.mevent.y <= scrdesc.scrollbar_start_y + scrdesc.scrollbar_maxy)) { if (!scrdesc.scrollbar_mode) { if (nced.mevent.bstate & BUTTON1_PRESSED) { if (nced.mevent.y == scrdesc.scrollbar_start_y) { next_command = cmd_CursorUp; last_sec = 0; break; } else if (nced.mevent.y == scrdesc.scrollbar_start_y + scrdesc.scrollbar_maxy - 1) { next_command = cmd_CursorDown; last_sec = 0; break; } else { if (scrdesc.slider_min_y != -1) { if (nced.mevent.y < scrdesc.slider_min_y + scrdesc.scrollbar_start_y) { next_command = cmd_PageUp; last_sec = 0; break; } else if (nced.mevent.y > scrdesc.slider_min_y + scrdesc.slider_size) { next_command = cmd_PageDown; last_sec = 0; break; } } scrdesc.scrollbar_mode = true; #if NCURSES_MOUSE_VERSION > 1 scrollbar_mode_initial_slider_mouse_offset_y = nced.mevent.y - scrdesc.scrollbar_start_y - scrdesc.slider_min_y; #endif } } } #if NCURSES_MOUSE_VERSION > 1 if (scrdesc.scrollbar_mode && nced.mevent.bstate & REPORT_MOUSE_POSITION && scrdesc.scrollbar_maxy - 2 > scrdesc.slider_size) { int new_slider_min_y; int max_first_row; int max_slider_min_y; int page_cursor_row; max_first_row = MAX_FIRST_ROW; max_slider_min_y = scrdesc.scrollbar_maxy - scrdesc.slider_size - 1; page_cursor_row = cursor_row - first_row; new_slider_min_y = trim_to_range( nced.mevent.y - scrdesc.scrollbar_start_y - scrollbar_mode_initial_slider_mouse_offset_y, 1, max_slider_min_y); /* * set scrollbar does mapping first_row -> slider_min_y * * first_row (0) -> slider_min_y = 1 * first_row (max_first_row) -> slider_min_y (max_slider_min_y) * ------ * first_row (1) -> slider_min_y = 2 * first_row (max_first_row - 1) -> slider_min_y (max_slider_min_y - 1) * * Here we should to do inverse mapping - slider_min_y -> first_row * * slider_min_y (1) -> first_row = 0 * slider_min_y (max_slider_min_y)) -> first_row (max_first_row) * ------ * slider_min_y (2) -> first_row = 1 * slider_min_y (max_slider_min_y - 1) = first_row (max_first_row - 1) * */ if (new_slider_min_y == 1) first_row = 0; else if (new_slider_min_y == max_slider_min_y) first_row = max_first_row; else first_row = ceil(((double) new_slider_min_y - 2) / ((double) max_slider_min_y - 3) * ((double) max_first_row - 2) + 1); cursor_row = first_row + page_cursor_row; scrdesc.slider_min_y = new_slider_min_y; /* slower processing reduce flickering */ if (!opts.no_sleep) usleep(10 * 1000); } #endif break; } #if NCURSES_MOUSE_VERSION > 1 if (mark_mode == MARK_MODE_MOUSE_COLUMNS && nced.mevent.bstate & REPORT_MOUSE_POSITION && nced.mevent.bstate & BUTTON_CTRL) { mouse_col = mousex_get_colno(&desc, &scrdesc, &opts, &cursor_col, default_freezed_cols, nced.mevent.x); break; } #endif if (nced.mevent.y == 0 && scrdesc.top_bar_rows > 0) { #ifdef COMPILE_MENU /* Activate menu only on BUTTON1_PRESS event */ if (nced.mevent.bstate & BUTTON1_PRESSED) { next_command = cmd_ShowMenu; reuse_event = true; prev_event_keycode = 0; break; } #else next_command = cmd_Invalid; last_sec = 0; break; #endif } if (nced.mevent.y >= scrdesc.top_bar_rows && nced.mevent.y <= scrdesc.fix_rows_rows) { if (is_double_click) { /* * protection against unwanted vertical cursor hide, * when cursor was changed by first click of current double click. */ if (mouse_event - vertical_cursor_changed_mouse_event > 3) { next_command = cmd_ShowVerticalCursor; break; } } if (nced.mevent.bstate & BUTTON_CTRL && nced.mevent.bstate & BUTTON1_PRESSED) { mouse_col = mousex_get_colno(&desc, &scrdesc, &opts, &cursor_col, default_freezed_cols, nced.mevent.x); throw_selection(&scrdesc, &desc, &mark_mode); mark_mode = MARK_MODE_MOUSE_COLUMNS; mark_mode_start_col = mouse_col; break; } _is_footer_cursor = false; last_x_focus = nced.mevent.x; } else { mouse_row = nced.mevent.y - scrdesc.fix_rows_rows - scrdesc.top_bar_rows + first_row - fix_rows_offset; /* ignore invalid event */ if (mouse_row < 0 || mouse_row > MAX_CURSOR_ROW || mouse_row - first_row + 1 > VISIBLE_DATA_ROWS) { mouse_row = -1; mouse_col = -1; break; } _is_footer_cursor = is_footer_cursor(mouse_row, &scrdesc, &desc); /* * Save last x focused point. It will be used for repeated hide/unhide * vertical cursor. But only if cursor is not in footer area. */ if (!_is_footer_cursor) last_x_focus = nced.mevent.x; } if (nced.mevent.bstate & BUTTON_ALT && is_double_click) { next_command = cmd_ToggleBookmark; throw_selection(&scrdesc, &desc, &mark_mode); break; } else if (!(nced.mevent.bstate & BUTTON_ALT || nced.mevent.bstate & BUTTON_CTRL) && opts.vertical_cursor && !_is_footer_cursor) { int xpoint = nced.mevent.x - scrdesc.main_start_x; int vertical_cursor_column_orig = vertical_cursor_column; if (xpoint > scrdesc.fix_cols_cols - 1) xpoint += cursor_col; if (xpoint >= 0) { int i; for (i = 0; i < desc.columns; i++) { if (desc.cranges[i].xmin <= xpoint && desc.cranges[i].xmax >= xpoint) { int xmin = desc.cranges[i].xmin; int xmax = desc.cranges[i].xmax; vertical_cursor_column = i + 1; if (vertical_cursor_column != vertical_cursor_column_orig && nced.mevent.y >= scrdesc.top_bar_rows && nced.mevent.y <= scrdesc.fix_rows_rows) { vertical_cursor_changed_mouse_event = mouse_event; } if (vertical_cursor_column > (opts.freezed_cols > -1 ? opts.freezed_cols : default_freezed_cols)) { if (xmax > scrdesc.main_maxx + cursor_col) { cursor_col = xmax - scrdesc.main_maxx; } else if (xmin < scrdesc.fix_cols_cols + cursor_col) { cursor_col = xmin - scrdesc.fix_cols_cols + 1; } } last_x_focus = get_x_focus(vertical_cursor_column, cursor_col, &desc, &scrdesc); break; } } } } #if NCURSES_MOUSE_VERSION > 1 if (nced.mevent.bstate & BUTTON_CTRL && nced.mevent.bstate & BUTTON1_PRESSED) { throw_selection(&scrdesc, &desc, &mark_mode); mark_mode = MARK_MODE_MOUSE; mark_mode_start_row = mouse_row; } if (!_is_footer_cursor && nced.mevent.bstate & BUTTON_ALT && (nced.mevent.bstate & BUTTON1_PRESSED || nced.mevent.bstate & REPORT_MOUSE_POSITION)) { int colno; colno = mousex_get_colno(&desc, &scrdesc, &opts, &cursor_col, default_freezed_cols, nced.mevent.x); if (colno != -1) { mouse_col = colno; if (nced.mevent.bstate & BUTTON1_PRESSED) { throw_selection(&scrdesc, &desc, &mark_mode); mark_mode = MARK_MODE_MOUSE_BLOCK; mark_mode_start_row = mouse_row; mark_mode_start_col = colno; } last_x_focus = get_x_focus(colno, cursor_col, &desc, &scrdesc); } } #endif /* * Synchronize cursor with mouse point when mouse was not * used for selection. */ if (mark_mode != MARK_MODE_MOUSE && mark_mode != MARK_MODE_MOUSE_BLOCK && mark_mode != MARK_MODE_MOUSE_COLUMNS && mouse_row != -1) cursor_row = mouse_row; } break; } } /* end switch */ if (fresh_found && scrdesc.found) { int maxy_loc, maxx_loc; bool _is_footer_cursor = is_footer_cursor(cursor_row, &scrdesc, &desc); UNUSED(maxy_loc); if (opts.vertical_cursor && !_is_footer_cursor) { int i; for (i = 0; i < desc.columns; i++) { if (desc.cranges[i].xmin <= scrdesc.found_start_x && scrdesc.found_start_x < desc.cranges[i].xmax) { vertical_cursor_column = i + 1; last_x_focus = get_x_focus(vertical_cursor_column, cursor_col, &desc, &scrdesc); break; } } } if (w_fix_cols(&scrdesc) != NULL) { getmaxyx(w_fix_cols(&scrdesc), maxy_loc, maxx_loc); if (scrdesc.found_start_x + scrdesc.searchterm_char_size <= maxx_loc) fresh_found = false; } if (fresh_found && !_is_footer_cursor && w_rows(&scrdesc) != NULL) { getmaxyx(w_rows(&scrdesc), maxy_loc, maxx_loc); if (cursor_col + scrdesc.fix_cols_cols <= scrdesc.found_start_x && cursor_col + scrdesc.fix_cols_cols + maxx_loc >= scrdesc.found_start_x + scrdesc.searchterm_char_size) { fresh_found = false; } else { /* we would to move cursor_col to left or right to be partially visible */ if (cursor_col + scrdesc.fix_cols_cols > scrdesc.found_start_x) next_command = cmd_MoveLeft; else if (cursor_col + scrdesc.fix_cols_cols + maxx_loc < scrdesc.found_start_x + scrdesc.searchterm_char_size) next_command = cmd_MoveRight; } } if (fresh_found && _is_footer_cursor && w_footer(&scrdesc) != NULL) { getmaxyx(w_footer(&scrdesc), maxy_loc, maxx_loc); if (footer_cursor_col + scrdesc.fix_cols_cols <= scrdesc.found_start_x && footer_cursor_col + maxx_loc >= scrdesc.found_start_x + scrdesc.searchterm_char_size) { fresh_found = false; } else { /* we would to move cursor_col to left or right to be partially visible */ if (footer_cursor_col > scrdesc.found_start_x) next_command = cmd_MoveLeft; else if (footer_cursor_col + maxx_loc < scrdesc.found_start_x + scrdesc.searchterm_char_size) next_command = cmd_MoveRight; } } if (next_command != 0) { /* protect agains infinity loop */ if (fresh_found_cursor_col != -1) { /* the direction should not be changed */ if (_is_footer_cursor) { if ((fresh_found_cursor_col > footer_cursor_col && next_command == cmd_MoveRight) || (fresh_found_cursor_col < footer_cursor_col && next_command == cmd_MoveLeft) || (fresh_found_cursor_col == footer_cursor_col)) { next_command = cmd_Invalid; fresh_found = false; } } else { if ((fresh_found_cursor_col > cursor_col && next_command == cmd_MoveRight) || (fresh_found_cursor_col < cursor_col && next_command == cmd_MoveLeft) || (fresh_found_cursor_col == cursor_col)) { next_command = cmd_Invalid; fresh_found = false; } } } else fresh_found_cursor_col = _is_footer_cursor? footer_cursor_col : cursor_col; } else fresh_found = false; } set_scrollbar(&scrdesc, &desc, first_row); if (first_row != prev_first_row) { /* now, maybe more/less rows from footer should be displayed */ if (desc.headline_transl != NULL && desc.footer_row > 0) { int rows_rows; rows_rows = min_int(desc.footer_row - scrdesc.fix_rows_rows - first_row - desc.title_rows - fix_hide_header_line, scrdesc.main_maxy - scrdesc.fix_rows_rows); rows_rows = rows_rows > 0 ? rows_rows : 0; if (!refresh_scr) { refresh_scr = scrdesc.rows_rows != rows_rows; } } } if (refresh_scr || current_state->refresh_scr || refresh_clear) { #ifdef COMPILE_MENU refresh: #endif getmaxyx(stdscr, maxy, maxx); log_row("new screen size %d %d", maxy, maxx); if (refresh_clear) { log_row("clear screen"); clear(); refresh_clear = false; } refresh_aux_windows(&opts, &scrdesc); create_layout_dimensions(&opts, &scrdesc, &desc, opts.freezed_cols != -1 ? opts.freezed_cols : default_freezed_cols, fixedRows, maxy, maxx); create_layout(&opts, &scrdesc, &desc, first_data_row); /* recheck visibility of vertical cursor. now we have fresh fix_cols_cols data */ if (recheck_vertical_cursor_visibility && vertical_cursor_column > 0) { int vminx = desc.cranges[vertical_cursor_column - 1].xmin; int left_border = scrdesc.fix_cols_cols + cursor_col - 1; if (vminx < left_border) cursor_col = vminx - scrdesc.fix_cols_cols + 1; } set_scrollbar(&scrdesc, &desc, first_row); #ifdef COMPILE_MENU if (cmdbar) cmdbar = init_cmdbar(cmdbar, &opts); #endif current_state->refresh_scr = false; } } for (pspg_win_iter = 0; pspg_win_iter < PSPG_WINDOW_COUNT; pspg_win_iter++) { if (scrdesc.wins[pspg_win_iter]) delwin(scrdesc.wins[pspg_win_iter]); } #ifdef COMPILE_MENU if (cmdbar) { st_cmdbar_free(cmdbar); log_row("releasing cmd bar before end"); } if (menu) { st_menu_free(menu); log_row("releasing menu bar before end"); } #endif endwin(); disable_xterm_mouse_mode(); log_row("ncurses ended"); active_ncurses = false; /* * The alternate screen doesn't work on BSD, so there are * some possibilities of ending and cleaning. */ if (opts.on_exit_reset) printf("\033c"); if (opts.on_exit_clean) printf("\033[2J"); if (opts.on_exit_erase_line) printf("\33[2K\r"); if (opts.on_exit_sgr0) { char *s = (char *) -1; /* * Some versions of pdcurses has bug and doesn't contains terminfo * functionality. Following code is not critical, and if there are * problems with linking, the tigetstr can be thrown. * #ifndef PDCURSES */ s = tigetstr((NCURSES_CONST char *) "sgr0"); /* #endif */ if (s != 0 && s != (char *) -1) fprintf(stdout, "%s", s); } if (raw_output_quit) { lb_print_all_ddesc(&desc, stdout); } else if (state.no_alternate_screen) { draw_data(&opts, &scrdesc, &desc, first_data_row, first_row, cursor_col, footer_cursor_col, fix_rows_offset); } close_tty_stream(); pspg_save_history(PSPG_HISTORY, &opts); /* * Try to release all allocated memory, although this has not * any real effect in this time (before end of application). * It is not necessary, but it can helps with debugging of * memory leaks. */ lb_free(&desc); free(desc.cranges); free(desc.headline_transl); free(desc.order_map); free(opts.pathname); free(opts.nullstr); free(string_argument); free(state.last_query); close_data_stream(); if (logfile) { log_row("correct quit\n"); fclose(logfile); logfile = NULL; } #ifdef DEBUG_PIPE /* * Attention - this statement can raise warning "free(): invalid pointer" * although is all ok. I think so it is due setlinebuf usage. Because this * is only sometimes and only in debug mode, we can live with it. Maybe it * is glibc bug. */ fclose(debug_pipe); debug_pipe = NULL; #endif return 0; } #ifdef DEBUG_PIPE static void print_memory_stats(bool enable_memory_debug) { if (enable_memory_debug) { #ifdef __GNU_LIBRARY__ /* * This test doesn't work well. Looks so HAVE_MALLINFO2 is undefined * although mallinfo2 function exists, and mallinfo is deprecated. * Maybe autoconf issue. */ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 33) || __GLIBC__ > 2 struct mallinfo2 mi; mi = mallinfo2(); fprintf(debug_pipe, "Total non-mmapped bytes (arena): %ld\n", mi.arena); fprintf(debug_pipe, "# of free chunks (ordblks): %ld\n", mi.ordblks); fprintf(debug_pipe, "# of free fastbin blocks (smblks): %ld\n", mi.smblks); fprintf(debug_pipe, "# of mapped regions (hblks): %ld\n", mi.hblks); fprintf(debug_pipe, "Bytes in mapped regions (hblkhd): %ld\n", mi.hblkhd); fprintf(debug_pipe, "Max. total allocated space (usmblks): %ld\n", mi.usmblks); fprintf(debug_pipe, "Free bytes held in fastbins (fsmblks): %ld\n", mi.fsmblks); fprintf(debug_pipe, "Total allocated space (uordblks): %ld\n", mi.uordblks); fprintf(debug_pipe, "Total free space (fordblks): %ld\n", mi.fordblks); fprintf(debug_pipe, "Topmost releasable block (keepcost): %ld\n", mi.keepcost); #else struct mallinfo mi; mi = mallinfo(); fprintf(debug_pipe, "Total non-mmapped bytes (arena): %d\n", mi.arena); fprintf(debug_pipe, "# of free chunks (ordblks): %d\n", mi.ordblks); fprintf(debug_pipe, "# of free fastbin blocks (smblks): %d\n", mi.smblks); fprintf(debug_pipe, "# of mapped regions (hblks): %d\n", mi.hblks); fprintf(debug_pipe, "Bytes in mapped regions (hblkhd): %d\n", mi.hblkhd); fprintf(debug_pipe, "Max. total allocated space (usmblks): %d\n", mi.usmblks); fprintf(debug_pipe, "Free bytes held in fastbins (fsmblks): %d\n", mi.fsmblks); fprintf(debug_pipe, "Total allocated space (uordblks): %d\n", mi.uordblks); fprintf(debug_pipe, "Total free space (fordblks): %d\n", mi.fordblks); fprintf(debug_pipe, "Topmost releasable block (keepcost): %d\n", mi.keepcost); #endif #endif } } #endif pspg-5.8.1/src/pspg.h000066400000000000000000000427461452457446400144430ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * pspg.h * themes initialization * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/pspg.h * *------------------------------------------------------------------------- */ #ifndef PSPG_PSPG_H #define PSPG_PSPG_H #include #include #include "commands.h" #include "config.h" #include "themes.h" #include "st_menu.h" #define LINEINFO_NONE 0 #define LINEINFO_BOOKMARK 1 #define LINEINFO_FOUNDSTR 2 #define LINEINFO_FOUNDSTR_MULTI 4 #define LINEINFO_UNKNOWN 8 #define LINEINFO_CONTINUATION 16 #define LINEINFO_HASNOT_CONTINUATION 32 #define FILE_UNDEF 0 #define FILE_CSV 1 #define FILE_TSV 2 #define FILE_MATRIX 3 #define PSPG_VERSION "5.8.1" /* GNU Hurd does not define MAXPATHLEN */ #ifndef MAXPATHLEN #define MAXPATHLEN 4096 #endif typedef struct LineInfo { unsigned char mask; short int start_char; short int recno_offset; } LineInfo; #define LINEBUFFER_LINES 1000 typedef struct LineBuffer { int first_row; int nrows; char *rows[LINEBUFFER_LINES]; LineInfo *lineinfo; struct LineBuffer *next; struct LineBuffer *prev; } LineBuffer; typedef struct { LineBuffer *lnb; int lnb_row; } MappedLine; typedef enum { INFO_UNKNOWN, INFO_DOUBLE, INFO_STRXFRM } SortDataInfo; typedef struct { SortDataInfo info; double d; char *strxfrm; LineBuffer *lnb; int lnb_row; } SortData; /* * Column range */ typedef struct { int xmin; int xmax; int name_pos; /* column's name position in chars */ int name_width; /* size of column name in display chars */ int name_offset; /* start of column's name in bytes */ int name_size; /* size of column name in bytes */ } CRange; /* * Available formats of headline chars * * L, R .. outer border * I .. inner border * d .. data */ /* * This structure should be immutable */ typedef struct { int border_top_row; /* nrow of bottom outer border or -1 */ int border_head_row; /* nrow of head outer (required) */ int border_bottom_row; /* nrow of bottom outer border or -1 */ int border_type; /* detected type of border: 0, 1, 2 */ char linestyle; /* detected linestyle: a, u */ bool is_expanded_mode; /* true when data are in expanded mode */ bool is_pgcli_fmt; /* table was generated by pgcli */ int expanded_info_minx; /* begin of info in \x mode .. RECORD x */ char title[65]; /* detected title (trimmed) or NULL */ int title_rows; /* number of rows used as table title (skipped later) */ char filename[65]; /* filename (printed on top bar) */ LineBuffer rows; /* list of rows buffers */ int total_rows; /* number of input rows */ MappedLine *order_map; /* maps sorted lines to original lines */ int order_map_items; /* number of items of order map */ int maxy; /* maxy of used pad area with data */ int maxx; /* maxx of used pad area with data */ int maxbytes; /* max length of line in bytes */ char *namesline; /* header column's names line */ char *headline; /* header separator line */ int headline_size; /* size of headerline in bytes */ char *headline_transl; /* translated headline */ int headline_char_size; /* size of headerline in chars */ CRange *cranges; /* pairs of start, end of columns */ int columns; /* number of columns */ int first_data_row; /* fist data row line (starts by zero) */ int last_data_row; /* last line of data row */ bool fallback_last_data_row; /* when last_data_row was set from last_row */ int footer_row; /* nrow of first footer row or -1 */ int alt_footer_row; /* alternative footer row (used when border = 1) */ int footer_char_size; /* width of footer */ int last_row; /* last not empty row */ int fixed_rows; /* number of fixed rows */ int fixed_columns; /* number of fixed columns */ int data_rows; /* number of data rows */ bool freeze_two_cols; /* detected system table with first oid column */ bool multilines_already_tested; /* true, when we know where are multilines */ bool has_multilines; /* true, when some field contains more lines */ bool initialized; /* used as protection against unwanted initialization in progress mode */ bool completed; /* true, when last input row was processed */ LineBuffer *last_buffer; /* pointer to last LineBuffer */ bool load_data_rows; /* true, when loaded rows holds data */ } DataDesc; #define PSPG_WINDOW_COUNT 10 #define PSPG_WINDOW_THEMES_COUNT 13 /* * This structure can be mutable - depends on displayed data */ typedef struct { int fix_rows_rows; /* current number of fixed rows in window rows */ int fix_cols_cols; /* current number of fixed columns in window rows */ int rows_rows; /* current number of data rows */ int footer_rows; /* current number of footer rows */ int maxy; /* max y size of screen */ int maxx; /* max x size of screen */ int main_maxy; /* max y size of main place (fixed + data + footer rows) */ int main_maxx; /* max x size of main place (maxx - main_start_x) */ int main_start_y; /* y position of first row of main place */ int main_start_x; /* x position of first row of main place */ int top_bar_rows; /* 1 or 0 when top bar is not used */ WINDOW *wins[PSPG_WINDOW_COUNT]; Theme themes[PSPG_WINDOW_THEMES_COUNT]; char searchterm[256]; /* currently active search input */ int searchterm_char_size; /* size of searchterm in chars */ int searchterm_size; /* size of searchterm in bytes */ int search_first_row; int search_rows; int search_first_column; int search_columns; bool search_selected_mode; /* true, when searching is limitted by selected area */ bool has_upperchr; /* true, when search term has upper char */ bool found; /* true, when last search was successfull */ int found_start_x; /* x position of found pattern */ int found_start_bytes; /* bytes position of found pattern */ int found_row; /* row of found pattern */ int first_rec_title_y; /* y of first displayed record title in expanded mode */ int last_rec_title_y; /* y of last displayed record title in expanded mode */ char searchcolterm[256]; /* last searched column patterm */ int searchcolterm_size; /* length of searched column pattern in bytes */ int scrollbar_maxy; /* max y of horisontal scrollbar */ int scrollbar_start_y; /* start y dim of horisontal scrollbar */ int scrollbar_x; /* x position of horisontal scrollbar */ int slider_min_y; /* position of scrollbar slider */ int slider_size; /* height of slider (vertical) */ bool scrollbar_mode; /* true, when vertical scrollbar is active */ bool slider_has_position; /* protection against visual defects from twice setting of * * slider position. After leaving of scrollbar mode * * we should not to set slider position from cursor * * position */ int selected_first_row; int selected_rows; int selected_first_column; int selected_columns; } ScrDesc; #define w_luc(scrdesc) ((scrdesc)->wins[WINDOW_LUC]) #define w_fix_rows(scrdesc) ((scrdesc)->wins[WINDOW_FIX_ROWS]) #define w_fix_cols(scrdesc) ((scrdesc)->wins[WINDOW_FIX_COLS]) #define w_rows(scrdesc) ((scrdesc)->wins[WINDOW_ROWS]) #define w_footer(scrdesc) ((scrdesc)->wins[WINDOW_FOOTER]) #define w_top_bar(scrdesc) ((scrdesc)->wins[WINDOW_TOP_BAR]) #define w_bottom_bar(scrdesc) ((scrdesc)->wins[WINDOW_BOTTOM_BAR]) #define w_rownum(scrdesc) ((scrdesc)->wins[WINDOW_ROWNUM]) #define w_rownum_luc(scrdesc) ((scrdesc)->wins[WINDOW_ROWNUM_LUC]) #define w_vscrollbar(scrdesc) ((scrdesc)->wins[WINDOW_VSCROLLBAR]) /* * Used for storing not yet formatted data */ typedef struct { int nfields; char *fields[]; } RowType; typedef struct _rowBucketType { int nrows; RowType *rows[1000]; bool multilines[1000]; bool allocated; struct _rowBucketType *next_bucket; } RowBucketType; /* * Used for formatting */ typedef struct { int nfields; int nfields_all; bool has_header; char types[1024]; /* a or d .. content in column */ int widths[1024]; /* column's display width */ bool multilines[1024]; /* true if column has multiline row */ int columns_map[1024]; /* column numbers - used when some column is hidden */ } PrintDataDesc; /* * holds pager state data */ typedef struct { bool only_for_tables; bool no_interactive; bool interactive; bool ignore_file_suffix; bool stream_mode; bool no_alternate_screen; bool quit_if_one_screen; int reserved_rows; /* used by dbcli */ int boot_wait; int file_format_from_suffix; const char *errstr; /* ptr to error string */ int _errno; /* saved errno */ char *fmt; /* format string for info when refresh first is required */ char *par; /* parameter for info when refresh first is required */ bool beep; /* beep for info when refresh is required */ bool applytimeout; /* true, when saved info should be close after timeout */ bool is_error; /* true, when saved info should be displayed as error */ bool refresh_scr; /* force rewrite screen */ ScrDesc *scrdesc; /* used for redraw */ DataDesc *desc; /* used for input, for access to necessary data for tabcomplete */ Options *opts; /* used for redraw */ int theme_template; int menu_template; char *last_query; /* last query in querystream mode */ } StateData; typedef struct { LineBuffer *start_lb; MappedLine *order_map; int order_map_items; LineBuffer *current_lb; int current_lb_rowno; int lineno; } LineBufferIter; typedef struct { LineBuffer *lb; int lb_rowno; int lineno; } LineBufferMark; typedef struct { LineBuffer *lb; int lb_rowno; } SimpleLineBufferIter; typedef struct { int len; int maxlen; char *data; } ExtStr; /* from pspg.c */ extern void exit_handler(void); extern void export_to_file(PspgCommand command, ClipboardFormat format, Options *opts, ScrDesc *scrdesc, DataDesc *desc, int cursor_row, int cursor_column, int rows, double percent, const char *pipecmd, bool *force_refresh); extern void throw_searching(ScrDesc *scrdesc, DataDesc *desc); extern void enable_xterm_mouse_mode(bool enable); extern bool disable_xterm_mouse_mode(void); extern void show_info_wait(const char *fmt, const char *par, bool beep, bool refresh_first, bool applytimeout, bool is_error); extern void current_time(time_t *sec, long *ms); extern void refresh_terminal_size(void); extern void refresh_layout_after_terminal_resize(void); extern void redraw_screen(void); extern int min_int(int a, int b); extern int max_int(int a, int b); #define time_diff(s1, ms1, s2, ms2) ((s1 - s2) * 1000 + ms1 - ms2) #define UNUSED(expr) do { (void)(expr); } while (0) /* from print.c */ extern void window_fill(int window_identifier, int srcy, int srcx, int cursor_row, int vcursor_xmin, int vcursor_xmax, int selected_xmin, int selected_xmax, DataDesc *desc, ScrDesc *scrdesc, Options *opts); extern void draw_data(Options *opts, ScrDesc *scrdesc, DataDesc *desc, int first_data_row, int first_row, int cursor_col, int footer_cursor_col, int fix_rows_offset); extern LineInfo *set_line_info(Options *opts, ScrDesc *scrdesc, DataDesc *desc, LineBufferMark *lbm, char *rowstr); #define PSPG_ERRSTR_BUFFER_SIZE 2048 extern char pspg_errstr_buffer[PSPG_ERRSTR_BUFFER_SIZE]; extern bool is_expanded_header(char *str, int *ei_minx, int *ei_maxx); extern int min_int(int a, int b); extern const char *nstrstr(const char *haystack, const char *needle); extern const char *nstrstr_ignore_lower_case(const char *haystack, const char *needle); extern bool nstreq(const char *str1, const char *str2); extern const char *pspg_search(Options *opts, ScrDesc *scrdesc, const char *str); /* from menu.c */ extern void init_menu_config(Options *opts); extern struct ST_MENU *init_menu(struct ST_MENU *current_menu, Options *opts); extern struct ST_CMDBAR *init_cmdbar(struct ST_CMDBAR *current_cmdbar, Options *opts); extern void post_menu(Options *opts, struct ST_MENU *current_menu); extern void refresh_clipboard_options(Options *opts, struct ST_MENU *menu); extern void refresh_copy_target_options(Options *opts, struct ST_MENU *menu); /* from sort.c */ extern void sort_column_num(SortData *sortbuf, int rows, bool desc); extern void sort_column_text(SortData *sortbuf, int rows, bool desc); /* from pretty-csv.c */ extern bool read_and_format(Options *opts, DataDesc *desc, StateData *state); /* from pgclient.c */ extern bool pg_exec_query(Options *opts, char *query, RowBucketType *rb, PrintDataDesc *pdesc, const char **err); /* from args.c */ extern char **buildargv(const char *input, int *argc, char *appname); extern bool readargs(char **argv, int argc, Options *opts, StateData *state); extern bool args_are_consistent(Options *opts, StateData *state); /* from infra.c */ extern void log_row(const char *fmt, ...); extern void leave(const char *fmt, ...) __attribute__ ((noreturn)); extern void format_error(const char *fmt, ...); extern void *smalloc(int size); extern void *smalloc2(int size, char *debugstr); extern void *srealloc(void *ptr, int size); extern char *sstrdup(const char *str); extern char *sstrdup2(const char *str, char *debugstr); extern char *sstrndup(const char *str, int bytes); extern int charlen(const char *str); extern int dsplen(const char *str); extern char *trim_str(const char *str, int *size); extern char *trim_quoted_str(const char *str, int *size); extern void InitExtStr(ExtStr *estr); extern void ResetExtStr(ExtStr *estr); extern void ExtStrAppendNewLine(ExtStr *estr, char *str); extern void ExtStrAppendLine(ExtStr *estr, char *str, int size, char linestyle, bool continuation_mark, bool continuation_mark2); extern int ExtStrTrimEnd(ExtStr *estr, bool replace_nl); extern int rwe_popen(char *command, int *fin, int *fout, int *ferr); extern char *tilde(char *dest, const char *path); /* from table.c */ extern bool readfile(Options *opts, DataDesc *desc, StateData *state); extern bool translate_headline(DataDesc *desc); extern void multilines_detection(DataDesc *desc); extern void update_order_map(ScrDesc *scrdesc, DataDesc *desc, int sbcn, bool desc_sort); /* from string.c */ extern const char *nstrstr(const char *haystack, const char *needle); extern const char *nstrstr_ignore_lower_case(const char *haystack, const char *needle); extern bool nstreq(const char *str1, const char *str2); extern const char *nstrstr_with_sizes(const char *haystack, const int haystack_size, const char *needle, int needle_size); extern bool nstarts_with_with_sizes(const char *str, int str_size, const char *pattern, int pattern_size); /* from export.c */ extern bool export_data(Options *opts, ScrDesc *scrdesc, DataDesc *desc, int cursor_row, int cursor_column, FILE *fp, int rows, double percent, char *table_name, PspgCommand cmd, ClipboardFormat format); /* from linebuffer.c */ extern void init_lbi(LineBufferIter *lbi, LineBuffer *lb, MappedLine *order_map, int order_map_items, int init_pos); extern void init_lbi_ddesc(LineBufferIter *lbi, DataDesc *desc, int init_pos); extern bool lbi_set_lineno(LineBufferIter *lbi, int pos); extern void lbi_set_mark(LineBufferIter *lbi, LineBufferMark *lbm); extern bool lbi_set_mark_next(LineBufferIter *lbi, LineBufferMark *lbm); extern bool lbm_get_line(LineBufferMark *lbm, char **line, LineInfo **linfo, int *lineno); extern bool lbi_get_line(LineBufferIter *lbi, char **line, LineInfo **linfo, int *lineno); extern bool lbi_get_line_prev(LineBufferIter *lbi, char **line, LineInfo **linfo, int *lineno); extern bool lbi_get_line_next(LineBufferIter *lbi, char **line, LineInfo **linfo, int *lineno); extern bool lbi_prev(LineBufferIter *lbi); extern bool lbi_next(LineBufferIter *lbi); extern SimpleLineBufferIter *init_slbi_ddesc(SimpleLineBufferIter *slbi, DataDesc *desc); extern SimpleLineBufferIter *slbi_get_line_next(SimpleLineBufferIter *slbi, char **line, LineInfo **linfo); extern bool ddesc_set_mark(LineBufferMark *lbm, DataDesc *desc, int pos); extern void lbm_xor_mask(LineBufferMark *lbm, char mask); extern void lbm_recno_offset(LineBufferMark *lbm, short int recno_offset); extern void lb_free(DataDesc *desc); extern void lb_print_all_ddesc(DataDesc *desc, FILE *f); extern const char *getline_ddesc(DataDesc *desc, int pos); /* from bscommands.c */ extern const char *get_token(const char *instr, const char **token, int *n); extern const char *parse_and_eval_bscommand(const char *cmdline, Options *opts, ScrDesc *scrdesc, DataDesc *desc, int *next_command, long *long_argument, bool *long_argument_is_valid, char **string_argument, bool *string_argument_is_valid, bool *refresh_clear); #define IS_TOKEN(str, n, token) ((n == strlen(token)) && (strncmp(str, token, n) == 0)) /* from readline.c */ extern void pspg_init_readline(const char *histfile); extern void pspg_save_history(const char *histfile, Options *opts); extern bool get_string(char *prompt, char *buffer, int maxsize, char *defstr, char tabcomplete_mode); /* * Global constants */ #define PSPG_ESC_CODE 27 /* * Global setting */ extern bool use_utf8; extern bool quiet_mode; /* * Global variables */ extern bool handle_sigint; extern bool handle_sigwinch; extern StateData *current_state; extern WINDOW *prompt_window; extern attr_t prompt_window_input_attr; extern attr_t prompt_window_error_attr; extern attr_t prompt_window_info_attr; extern FILE *logfile; /* * REMOVE THIS COMMENT FOR DEBUG OUTPUT * and modify a path. * #define DEBUG_PIPE "/home/pavel/debug" */ #ifdef DEBUG_PIPE extern FILE *debug_pipe; extern int debug_eventno; #endif #endif pspg-5.8.1/src/readline.c000066400000000000000000000402271452457446400152400ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * readline.c * a routines for using readline library * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/readline.c * *------------------------------------------------------------------------- */ /* * Uncomment for test without readline * #undef HAVE_LIBREADLINE #undef HAVE_READLINE_HISTORY */ #include "pspg.h" #include "unicode.h" #include #include #include #include #include #ifdef HAVE_LIBREADLINE #if defined(HAVE_READLINE_READLINE_H) #include #elif defined(HAVE_READLINE_H) #include #endif /* #if defined(HAVE_READLINE_READLINE_H) */ #if RL_VERSION_MAJOR < 6 #define rl_display_prompt rl_prompt #endif #ifdef HAVE_READLINE_HISTORY #if defined(HAVE_READLINE_HISTORY_H) #include #elif defined(HAVE_HISTORY_H) #include #endif #endif static char readline_buffer[1024]; static bool editation_completed; static unsigned char readline_ncurses_proxy_char; static bool readline_ncurses_proxy_char_is_available = false; static bool forward_complete; static char *readline_prompt; static int tabcomplete_mode; static const char **possible_tokens = NULL; static bool readline_initized = false; #ifdef HAVE_READLINE_HISTORY static char last_history[256]; static const char *saved_histfile = NULL; static bool history_loaded = false; #endif static const char *bscommands[] = { "save", "copy", "theme", "ctheme", "quit", "order", "orderd", "search", "sort", "sortd", "rsort", "dsort", "desc", "asc", NULL }; static const char *export_opts[] = { "all", "top", "bottom", "selected", "searched", "marked", "csv", "tsvc", "text", "pipesep", "insert", "cinsert", "nullstr", "sqlvalues", NULL }; static const char *search_opts[] = { "backward", "selected", "column", NULL }; /* * Save history to hist file */ void pspg_save_history(const char *histfile, Options *opts) { #ifdef HAVE_READLINE_HISTORY if (history_loaded) { if (opts->hist_size >= 0) stifle_history(opts->hist_size); write_history(tilde(NULL, histfile)); #if RL_READLINE_VERSION >= 0x0603 rl_clear_history(); #else clear_history(); #endif } #endif } /* * Simple functions for using readline from ncurses */ #if RL_READLINE_VERSION >= 0x0603 static int readline_input_avail(void) { return readline_ncurses_proxy_char_is_available; } #endif static int readline_getc(FILE *dummy) { UNUSED(dummy); #if RL_READLINE_VERSION < 0x0603 /* * readline uses this routine for reading one char. When * rl_input_available_hook is not available, readline try * to read multibyte char by repeated call of readline_getc, * until multibyte char is completed or this function returns * EOF. In this case, probably the most simple solution * is direct reading from input stream. These old versions * of readline can be on RH7 and Solaris. */ if (!readline_ncurses_proxy_char_is_available) return wgetch(prompt_window); #endif readline_ncurses_proxy_char_is_available = false; return readline_ncurses_proxy_char; } static void set_readline_ncurses_proxy_char(char c) { readline_ncurses_proxy_char = c; readline_ncurses_proxy_char_is_available = true; rl_callback_read_char(); } /* * Does copy of readline's result string to persistent buffer. */ static void readline_callback(char *line) { if (line) { strncpy(readline_buffer, line, sizeof(readline_buffer) - 1); *(readline_buffer + sizeof(readline_buffer) - 1) = '\0'; free(line); } else readline_buffer[0] = '\0'; editation_completed = true; } /* * Display readline's result string in ncurses window */ static void readline_redisplay() { size_t cursor_col; if (use_utf8) { size_t prompt_dsplen = utf_string_dsplen(rl_display_prompt, INT_MAX); cursor_col = prompt_dsplen + readline_utf_string_dsplen(rl_line_buffer, rl_point, prompt_dsplen); } else { cursor_col = strlen(rl_display_prompt) + min_int(strlen(rl_line_buffer), rl_point); } wbkgd(prompt_window, prompt_window_input_attr); werase(prompt_window); mvwprintw(prompt_window, 0, 0, "%s%s", rl_display_prompt, rl_line_buffer); mvwchgat(prompt_window, 0, 0, -1, prompt_window_input_attr, PAIR_NUMBER(prompt_window_input_attr), 0); if (cursor_col >= (size_t) COLS) curs_set(0); else { wmove(prompt_window, 0, cursor_col); curs_set(2); } wrefresh(prompt_window); } static char * completion_generator(const char *text, int state) { static int list_index, len; const char *name; if (!state) { list_index = 0; len = strlen(text); } while ((name = possible_tokens[list_index++])) { if (strncmp(name, text, len) == 0) return strdup(name); } return NULL; } static char * tablename_generator(const char *text, int state) { static int list_index, len; if (!current_state->desc->namesline) return NULL; if (!state) { list_index = 0; len = strlen(text); } while (list_index < current_state->desc->columns) { const char *name; int name_len; name = current_state->desc->namesline + current_state->desc->cranges[list_index].name_offset; name_len = current_state->desc->cranges[list_index].name_size; list_index += 1; if (use_utf8) { if (utf8_nstarts_with_with_sizes(name, name_len, text, len)) return sstrndup(name, name_len); } else { if (nstarts_with_with_sizes(name, name_len, text, len)) return sstrndup(name, name_len); } } return NULL; } static void get_prev_token(int start, const char **token, int *size) { *size = 0; *token = NULL; if (start > 0) { char *ptr = &rl_line_buffer[start - 1]; /* check previous token */ if (*ptr == '"') ptr -= 1; while (ptr >= rl_line_buffer && *ptr == ' ') ptr -= 1; while (ptr > rl_line_buffer) { if (isalnum(*(ptr - 1))) ptr -= 1; else break; } if (isalnum(*ptr)) get_token(ptr, token, size); } } static char ** pspg_complete(const char *text, int start, int end) { UNUSED(end); if (tabcomplete_mode == 'f') { rl_completion_suppress_append = 1; rl_attempted_completion_over = 0; } else { rl_completion_suppress_append = 0; rl_attempted_completion_over = 1; if (tabcomplete_mode == 'c') { if (start > 0) { if (rl_line_buffer[start - 1] == '\\') { possible_tokens = bscommands; return rl_completion_matches(text, completion_generator); } else { int i; char *bscommand = NULL; for (i = start - 1; i >= 0; i--) { if (rl_line_buffer[i] == '\\') { bscommand = &rl_line_buffer[i+1]; break; } } if (bscommand) { const char *token; int n; get_token(bscommand, &token, &n); if (n > 0) { if (IS_TOKEN(token, n, "save") || IS_TOKEN(token, n, "copy")) { possible_tokens = export_opts; return rl_completion_matches(text, completion_generator); } else if (IS_TOKEN(token, n, "ordd") || IS_TOKEN(token, n, "orderd") || IS_TOKEN(token, n, "ord") || IS_TOKEN(token, n, "order") || IS_TOKEN(token, n, "sort") || IS_TOKEN(token, n, "sortd") || IS_TOKEN(token, n, "dsort") || IS_TOKEN(token, n, "rsort") || IS_TOKEN(token, n, "rs") || IS_TOKEN(token, n, "asc") || IS_TOKEN(token, n, "desc")) { return rl_completion_matches(text, tablename_generator); } else if (IS_TOKEN(token, n, "search")) { const char *prev_token; int prev_token_size; bool prev_token_is_column = false; get_prev_token(start, &prev_token, &prev_token_size); if (prev_token_size > 0) { prev_token_is_column = IS_TOKEN(prev_token, prev_token_size, "colum") || IS_TOKEN(prev_token, prev_token_size, "column"); } if (prev_token_is_column) return rl_completion_matches(text, tablename_generator); else { possible_tokens = search_opts; return rl_completion_matches(text, completion_generator); } } } } } } } } return (char**) NULL; } /* * Default readline rutine for printing list of possible matches breaks ncurses output. * More we have only one row for editing. I don't want to implement dynamic window for * completion. So pspg implements own method for printing completion menu. */ static void pspg_display_match(char **matches, int num_matches, int max_length) { int common_length; int pos = 1; UNUSED(max_length); forward_complete = false; common_length = strlen(matches[0]); wbkgd(prompt_window, prompt_window_input_attr); werase(prompt_window); while (1) { char c = 0; if (handle_sigint) break; werase(prompt_window); wmove(prompt_window, 0, 0); wprintw(prompt_window, "%s%s", readline_prompt, rl_line_buffer); wattron(prompt_window, A_BOLD); wprintw(prompt_window, "%s", matches[pos] + common_length); wattroff(prompt_window, A_BOLD); wrefresh(prompt_window); noecho(); c = getch(); echo(); if (c == 13) { rl_insert_text(matches[pos] + common_length); ungetch(13); break; } else if (c == 7) { rl_insert_text(matches[pos] + common_length); ungetch(127); break; } else if (c == 3) pos -= 1; else if (c == 2 || c == 9) pos += 1; else if (c == 4 || c == PSPG_ESC_CODE) break; else if (c == 5) { rl_insert_text(matches[pos] + common_length); break; } else if (tabcomplete_mode == 'c' && c == ' ') { rl_insert_text(matches[pos] + common_length); rl_insert_text(" "); break; } else if (tabcomplete_mode == 'c' && c == '"') { rl_insert_text(matches[pos] + common_length); rl_insert_text("\" "); break; } else { if (c != -1) { char str[2]; str[0] = c; str[1] = '\0'; rl_insert_text(str); forward_complete = true; break; } } if (pos > num_matches) pos = 1; if (pos < 1) pos = num_matches; } } bool get_string(char *prompt, char *buffer, int maxsize, char *defstr, char _tabcomplete_mode) { bool result_is_ok = true; int c, prev_c = 0; mmask_t prev_mousemask = 0; bool prev_xterm_mouse_mode; #ifdef HAVE_READLINE_HISTORY /* * Lazy history loading. Loading history can be slow, so use it, only * when string is wanted. */ if (!history_loaded) { log_row("history loaded"); read_history(tilde(NULL, saved_histfile)); history_loaded = true; last_history[0] = '\0'; } #endif log_row("input string prompt - \"%s\"", prompt); editation_completed = false; tabcomplete_mode = _tabcomplete_mode; wattron(prompt_window, prompt_window_input_attr); wmove(prompt_window, 0, 0); wclrtoeol(prompt_window); curs_set(1); echo(); readline_prompt = prompt; rl_getc_function = readline_getc; #if RL_READLINE_VERSION >= 0x0603 rl_input_available_hook = readline_input_avail; #endif rl_redisplay_function = readline_redisplay; rl_callback_handler_install(prompt, readline_callback); if (tabcomplete_mode == 'c') { rl_completer_word_break_characters = "\\ "; rl_completer_quote_characters = "\"'"; } else { rl_completer_word_break_characters = (char *) rl_basic_word_break_characters; rl_completer_quote_characters = NULL; } mousemask(0, &prev_mousemask); prev_xterm_mouse_mode = disable_xterm_mouse_mode(); if (tabcomplete_mode == 'c') { rl_inhibit_completion = 0; rl_insert_text("\\"); rl_forced_update_display(); wrefresh(prompt_window); } else if (tabcomplete_mode == 'f') rl_inhibit_completion = 0; else if (tabcomplete_mode == 'u') rl_inhibit_completion = 1; /* use default value from buffer */ if (defstr && *defstr) { rl_insert_text(defstr); rl_forced_update_display(); wrefresh(prompt_window); } while (!editation_completed) { do { if (forward_complete) { c = 9; forward_complete = false; } else c = wgetch(prompt_window); if (c == ERR && errno == EINTR) { if (handle_sigwinch) { handle_sigwinch = false; clear(); refresh_terminal_size(); refresh_layout_after_terminal_resize(); redraw_screen(); wattron(prompt_window, prompt_window_input_attr); wmove(prompt_window, 0, 0); wclrtoeol(prompt_window); rl_forced_update_display(); wrefresh(prompt_window); } else if (handle_sigint) goto finish_read; continue; } } while (c == ERR || c == 0); /* detect double alts .. escape */ if (c == PSPG_ESC_CODE && prev_c == PSPG_ESC_CODE) { /* * Cannot leave here - readline requires complete ALT pair. * So just update flag here. */ result_is_ok = false; } /* Ctrl C */ else if (c == 3) { handle_sigint = true; goto finish_read; } prev_c = c; set_readline_ncurses_proxy_char(c); wrefresh(prompt_window); if (!result_is_ok) break; } finish_read: if (handle_sigint) { handle_sigint = false; result_is_ok = false; } mousemask(prev_mousemask, NULL); enable_xterm_mouse_mode(prev_xterm_mouse_mode); rl_callback_handler_remove(); curs_set(0); noecho(); /* don't allow alt chars (garbage) in input string */ if (result_is_ok) { char *ptr = readline_buffer; while (*ptr) if (*ptr++ == PSPG_ESC_CODE) { result_is_ok = false; break; } } if (result_is_ok) { if (tabcomplete_mode == 'f') { char *tstr; int bytes; bytes = strlen(readline_buffer); tstr = trim_quoted_str(readline_buffer, &bytes); bytes = bytes < (maxsize - 1) ? bytes : (maxsize - 1); memcpy(buffer, tstr, bytes); buffer[bytes] = '\0'; } else { strncpy(buffer, readline_buffer, maxsize - 1); buffer[maxsize] = '\0'; } #ifdef HAVE_READLINE_HISTORY if (*buffer) { /* * Don't write same strings to hist file */ if (*last_history == '\0' || strncmp(last_history, buffer, sizeof(last_history)) != 0) { add_history(buffer); strncpy(last_history, buffer, sizeof(last_history) - 1); last_history[sizeof(last_history) - 1] = '\0'; } } #endif if (defstr) strcpy(defstr, buffer); } else { if (defstr) *defstr = '\0'; buffer[0] = '\0'; } /* * Screen should be refreshed after show any info. */ current_state->refresh_scr = true; log_row("input string - \"%s\"", buffer); return result_is_ok; } /* * Initialize global readline variables */ void pspg_init_readline(const char *histfile) { /* * Don't repeat readline initialization */ if (readline_initized) return; readline_initized = true; rl_catch_signals = 0; rl_catch_sigwinch = 0; rl_deprep_term_function = NULL; rl_prep_term_function = NULL; #if RL_READLINE_VERSION > 0x0603 rl_change_environment = 0; #endif rl_inhibit_completion = 0; rl_completion_display_matches_hook = pspg_display_match; rl_attempted_completion_function = pspg_complete; #ifdef HAVE_READLINE_HISTORY saved_histfile = histfile; history_loaded = false; last_history[0] = '\0'; #endif } #else /* * Empty functions when readline is not available */ void pspg_init_readline(const char *histfile) { return; } void pspg_save_history(const char *histfile, Options *opts) { return; } bool get_string(char *prompt, char *buffer, int maxsize, char *defstr, char _tabcomplete_mode) { mmask_t prev_mousemask = 0; bool prev_xterm_mouse_mode; log_row("input string prompt - \"%s\"", prompt); wbkgd(prompt_window, prompt_window_input_attr); werase(prompt_window); mvwprintw(prompt_window, 0, 0, "%s", prompt); curs_set(1); echo(); mousemask(0, &prev_mousemask); prev_xterm_mouse_mode = disable_xterm_mouse_mode(); wgetnstr(prompt_window, buffer, maxsize); if (_tabcomplete_mode == 'f') { char *tstr; int bytes; bytes = strlen(buffer); tstr = trim_quoted_str(buffer, &bytes); memcpy(buffer, tstr, bytes); buffer[bytes] = '\0'; } /* reset ctrlc, wgetnstr doesn't handle this signal now */ handle_sigint = false; curs_set(0); noecho(); mousemask(prev_mousemask, NULL); enable_xterm_mouse_mode(prev_xterm_mouse_mode); if (defstr) strcpy(defstr, buffer); /* * Screen should be refreshed after show any info. */ current_state->refresh_scr = true; log_row("input string - \"%s\"", buffer); return true; } #endif pspg-5.8.1/src/sort.c000066400000000000000000000044211452457446400144400ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * sort.c * sort of data inside columns * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/sort.c * *------------------------------------------------------------------------- */ #include #include #include "pspg.h" static inline int signof(double n) { if (n < 0) return -1; else if (n > 0) return 1; else return 0; } static int compar_num_asc(const void *a, const void *b) { SortData *sda = (SortData *) a; SortData *sdb = (SortData *) b; if (sdb->info == INFO_DOUBLE) { if (sda->info == INFO_DOUBLE) /* * Without using signof function there is possible problem with * mapping of 8bytes double to 4bytes int (the sign of result value * after casting can be wrong). */ return signof(sda->d - sdb->d); else return 1; } else { if (sda->info == INFO_DOUBLE) return -1; else return 0; } } static int compar_num_desc(const void *a, const void *b) { SortData *sda = (SortData *) a; SortData *sdb = (SortData *) b; if (sdb->info == INFO_DOUBLE) { if (sda->info == INFO_DOUBLE) return signof(sdb->d - sda->d); else return 1; } else { if (sda->info == INFO_DOUBLE) return -1; else return 0; } } void sort_column_num(SortData *sortbuf, int rows, bool desc) { qsort(sortbuf, rows, sizeof(SortData), desc ? compar_num_desc : compar_num_asc); } static int compar_text_asc(const void *a, const void *b) { SortData *sda = (SortData *) a; SortData *sdb = (SortData *) b; if (sdb->info == INFO_STRXFRM) { if (sda->info == INFO_STRXFRM) return strcmp(sda->strxfrm, sdb->strxfrm); else return 1; } else { if (sda->info == INFO_STRXFRM) return -1; else return 0; } } static int compar_text_desc(const void *a, const void *b) { SortData *sda = (SortData *) a; SortData *sdb = (SortData *) b; if (sdb->info == INFO_STRXFRM) { if (sda->info == INFO_STRXFRM) return strcmp(sdb->strxfrm, sda->strxfrm); else return 1; } else { if (sda->info == INFO_STRXFRM) return -1; else return 0; } } void sort_column_text(SortData *sortbuf, int rows, bool desc) { qsort(sortbuf, rows, sizeof(SortData), desc ? compar_text_desc : compar_text_asc); } pspg-5.8.1/src/st_curses.h000066400000000000000000000007721452457446400154750ustar00rootroot00000000000000#if defined HAVE_NCURSESW_CURSES_H #include #elif defined HAVE_NCURSESW_H #include #elif defined HAVE_NCURSES_CURSES_H #include #elif defined HAVE_NCURSES_H #include #elif defined HAVE_CURSES_H #include #else /* fallback */ #include #endif #ifdef PDCURSES /* Add some APIs that are part of ncurses but not pdcurses */ #ifndef __PDCURSESMOD__ #define wgetparent(win) ((WINDOW*)win->_parent); #endif #endif pspg-5.8.1/src/st_menu.c000066400000000000000000002130701452457446400151250ustar00rootroot00000000000000#include "st_menu.h" #include #include "st_panel.h" #include #include #include #ifdef HAVE_LIBUNISTRING /* libunistring */ #include #include #include #else /* Alternative minimalistic own unicode support */ #include "unicode.h" #endif /* * This window is main application window. It is used for taking content * for shadow drawing. */ static WINDOW *desktop_win = NULL; typedef struct { char *c; int length; int row; } ST_MENU_ACCELERATOR; struct ST_MENU { ST_MENU_ITEM *menu_items; WINDOW *draw_area; WINDOW *window; PANEL *panel; WINDOW *shadow_window; PANEL *shadow_panel; int first_row; /* first visible row */ int cursor_row; int mouse_row; /* mouse row where button1 was pressed */ int *options; /* state options, initially copyied from menu */ int **refvals; /* referenced values */ ST_MENU_ACCELERATOR *accelerators; int naccelerators; ST_MENU_CONFIG *config; int shortcut_x_pos; int item_x_pos; int nitems; /* number of menu items */ int *bar_fields_x_pos; /* array of x positions of menubar fields */ int ideal_y_pos; /* y pos when is enough space */ int ideal_x_pos; /* x pos when is enough space */ int rows; /* number of rows */ int cols; /* number of columns */ int focus; /* identify possible event filtering */ char *title; bool is_menubar; struct ST_MENU *active_submenu; struct ST_MENU **submenus; }; struct ST_CMDBAR { ST_CMDBAR_ITEM *cmdbar_items; WINDOW *window; PANEL *panel; ST_MENU_CONFIG *config; int nitems; int *positions; char **labels; ST_CMDBAR_ITEM **ordered_items; }; static struct ST_CMDBAR *active_cmdbar = NULL; static ST_MENU_ITEM *selected_item = NULL; static ST_CMDBAR_ITEM *selected_command = NULL; static int selected_options = 0; static int *selected_refval = NULL; static bool press_accelerator = false; static bool button1_clicked = false; static bool press_enter = false; static bool command_was_activated = false; static inline int char_length(ST_MENU_CONFIG *config, const char *c); static inline int char_width(ST_MENU_CONFIG *config, char *c); static inline int str_width(ST_MENU_CONFIG *config, char *str); static inline char *chr_casexfrm(ST_MENU_CONFIG *config, char *str); static inline int wchar_to_utf8(ST_MENU_CONFIG *config, char *str, int n, wchar_t wch); static bool _st_menu_driver(struct ST_MENU *menu, int c, bool alt, MEVENT *mevent, bool is_top, bool is_nested_pulldown, bool *unpost_submenu); static void _st_menu_free(struct ST_MENU *menu); static int menutext_displaywidth(ST_MENU_CONFIG *config, char *text, char **accelerator, bool *extern_accel); static void pulldownmenu_content_size(ST_MENU_CONFIG *config, ST_MENU_ITEM *menu_items, int *rows, int *columns, int *shortcut_x_pos, int *item_x_pos, ST_MENU_ACCELERATOR *accelerators, int *naccelerators, int *first_row); static void pulldownmenu_draw_shadow(struct ST_MENU *menu); static void menubar_draw(struct ST_MENU *menu); static void pulldownmenu_draw(struct ST_MENU *menu, bool is_top); static void cmdbar_draw(struct ST_CMDBAR *cmdbar); static bool cmdbar_driver(struct ST_CMDBAR *cmdbar, int c, bool alt, MEVENT *mevent); static void subtract_correction(WINDOW *s, int *y, int *x); /* * Generic functions */ static inline int max_int(int a, int b) { return a > b ? a : b; } static inline int min_int(int a, int b) { return a < b ? a : b; } static void * safe_malloc(size_t size) { void *ptr = malloc(size); if (!ptr) { endwin(); printf("FATAL: Out of memory\n"); exit(1); } memset(ptr, 0, size); return ptr; } static void adjust_dimension(int size, int begin_pos, int min_pos, int max_size, int shadow_size, int *adjusted_size, int *adjusted_begin_pos, int *adjusted_shadow_size, int *adjusted_shadow_begin_pos) { int total_size = size + shadow_size; int _max_size = max_size - min_pos; if ((begin_pos + total_size) <= max_size) { /* data are inside range without any change */ *adjusted_size = size; *adjusted_begin_pos = begin_pos; *adjusted_shadow_size = size; *adjusted_shadow_begin_pos = begin_pos + shadow_size; } else if (_max_size > total_size) { /* we can just move begin pos */ *adjusted_size = size; *adjusted_begin_pos = max_size - total_size; *adjusted_shadow_size = size; *adjusted_shadow_begin_pos = *adjusted_begin_pos + shadow_size; } else { *adjusted_size = (_max_size >= size) ? size : _max_size; *adjusted_begin_pos = min_pos; *adjusted_shadow_size = *adjusted_size; *adjusted_shadow_begin_pos = *adjusted_begin_pos; } } /* * We try to corect dimensions of windows, because pdcurses doesn't allow * parts of window to be out of screen. */ static void adjust_dimensions(int rows, int cols, int begin_y, int begin_x, int min_y, int min_x, int shadow_width, int *adjusted_rows, int *adjusted_cols, int *adjusted_begin_y, int *adjusted_begin_x, int *adjusted_shadow_rows, int *adjusted_shadow_cols, int *adjusted_shadow_begin_y, int *adjusted_shadow_begin_x) { int maxy, maxx; getmaxyx(stdscr, maxy, maxx); adjust_dimension(rows, begin_y, min_y, maxy, shadow_width > 0 ? 1 : 0, adjusted_rows, adjusted_begin_y, adjusted_shadow_rows, adjusted_shadow_begin_y); adjust_dimension(cols, begin_x, min_x, maxx, shadow_width, adjusted_cols, adjusted_begin_x, adjusted_shadow_cols, adjusted_shadow_begin_x); } /* * Returns bytes of multibyte char */ static inline int char_length(ST_MENU_CONFIG *config, const char *c) { int result; if (!config->force8bit) { /* * I would not to check validity of UTF8 char. So I pass * 4 as n (max possible size of UTF8 char in bytes). When * in this case, u8_mblen should to return possitive number, * but be sure, and return 1 everytime. * * This functionality can be enhanced to check real size * of utf8 string. */ #ifdef HAVE_LIBUNISTRING result = u8_mblen((const uint8_t *) c, 4); #else result = utf8charlen(*((char *) c)); #endif if (result > 0) return result; } return 1; } /* * Retuns display width of char */ static inline int char_width(ST_MENU_CONFIG *config, char *c) { if (!config->force8bit) #ifdef HAVE_LIBUNISTRING return u8_width((const uint8_t *) c, 1, config->encoding); #else return utf_dsplen((const char *) c); #endif return 1; } /* * returns display width of string */ static inline int str_width(ST_MENU_CONFIG *config, char *str) { if (!config->force8bit) #ifdef HAVE_LIBUNISTRING return u8_strwidth((const uint8_t *) str, config->encoding); #else return utf_string_dsplen((const char *) str, strlen(str)); #endif return strlen(str); } /* * Transform string to simply compareable case insensitive string */ static inline char * chr_casexfrm(ST_MENU_CONFIG *config, char *str) { char buffer[20]; char *result; if (!config->force8bit) { #ifdef HAVE_LIBUNISTRING size_t length; length = sizeof(buffer); result = u8_casexfrm((const uint8_t *) str, char_length(config, str), config->language, NULL, buffer, &length); if (result == buffer) { result = strdup(buffer); if (!result) { endwin(); printf("FATAL: out of memory\n"); exit(1); } } #else char buffer2[10]; int chrl = utf8charlen(*str); int fold; strncpy(buffer2, str, chrl); buffer2[chrl] = '\0'; fold = utf8_tofold((const char *) buffer2); memcpy(buffer, &fold, sizeof(int)); buffer[sizeof(int)] = '\0'; result = strdup(buffer); if (!result) { endwin(); printf("FATAL: out of memory\n"); exit(1); } #endif } else { buffer[0] = tolower(str[0]); buffer[1] = '\0'; result = strdup(buffer); if (!result) { endwin(); printf("FATAL: out of memory\n"); exit(1); } } return result; } /* * Convert wide char to multibyte encoding */ static inline int wchar_to_utf8(ST_MENU_CONFIG *config, char *str, int n, wchar_t wch) { int result; if (!config->force8bit) { #ifdef HAVE_LIBUNISTRING result = u8_uctomb((uint8_t *) str, (ucs4_t) wch, n); #else /* be compiler quite */ (void) n; unicode_to_utf8(wch, (unsigned char *) str, &result); #endif } else { *str = (char) wch; result = 1; } return result; } /* * Workhorse for st_menu_save */ static int _save_menustate(struct ST_MENU *menu, int *cursor_rows, int max_rows, int write_pos) { int active_row = -1; int i; if (write_pos + 1 + menu->nitems >= max_rows) { endwin(); printf("FATAL: Cannot save menu positions, too complex menu.\n"); exit(1); } cursor_rows[write_pos++] = menu->cursor_row; cursor_rows[write_pos++] = menu->first_row; if (menu->submenus) { for (i = 0; i < menu->nitems; i++) { if (menu->submenus[i]) { write_pos = _save_menustate(menu->submenus[i], cursor_rows, max_rows, write_pos); if (menu->active_submenu == menu->submenus[i]) active_row = i + 1; } } } for (i = 0; i < menu->nitems; i++) cursor_rows[write_pos++] = menu->options[i]; cursor_rows[write_pos++] = active_row; return write_pos; } static int _save_refvals(struct ST_MENU *menu, int **refvals, int max_refvals, int write_pos) { int i; if (write_pos + menu->nitems >= max_refvals) { endwin(); printf("FATAL: Cannot save menu refvals, too complex menu.\n"); exit(1); } if (menu->submenus) { for (i = 0; i < menu->nitems; i++) { if (menu->submenus[i]) write_pos = _save_refvals(menu->submenus[i], refvals, max_refvals, write_pos); } } for (i = 0; i < menu->nitems; i++) refvals[write_pos++] = menu->refvals[i]; return write_pos; } /* * Workhorse for st_menu_load */ static int _load_menustate(struct ST_MENU *menu, int *cursor_rows, int read_pos) { int active_row; int i; menu->cursor_row = cursor_rows[read_pos++]; menu->first_row = cursor_rows[read_pos++]; if (menu->submenus) { for (i = 0; i < menu->nitems; i++) { if (menu->submenus[i]) { read_pos = _load_menustate(menu->submenus[i], cursor_rows, read_pos); } } } for (i = 0; i < menu->nitems; i++) menu->options[i] = cursor_rows[read_pos++]; active_row = cursor_rows[read_pos++]; if (active_row != -1) menu->active_submenu = menu->submenus[active_row - 1]; return read_pos; } static int _load_refvals(struct ST_MENU *menu, int **refvals, int read_pos) { int i; if (menu->submenus) { for (i = 0; i < menu->nitems; i++) { if (menu->submenus[i]) { read_pos = _load_refvals(menu->submenus[i], refvals, read_pos); } } } for (i = 0; i < menu->nitems; i++) menu->refvals[i] = refvals[read_pos++]; return read_pos; } /* * Serialize important fields of menustate to cursor_rows array. */ void st_menu_save(struct ST_MENU *menu, int *cursor_rows, int **refvals, int max_items) { _save_menustate(menu, cursor_rows, max_items, 0); _save_refvals(menu, refvals, max_items, 0); } /* * Load cursor positions and active submenu from safe */ void st_menu_load(struct ST_MENU *menu, int *cursor_rows, int **refvals) { _load_menustate(menu, cursor_rows, 0); _load_refvals(menu, refvals, 0); } /* * Returns display length of some text. ~ char is ignored. * ~~ is used as ~. */ static int menutext_displaywidth(ST_MENU_CONFIG *config, char *text, char **accelerator, bool *extern_accel) { int result = 0; bool _extern_accel = false; char *_accelerator = NULL; bool first_char = true; int bytes; while (*text != '\0') { if (*text == '~' || (*text == '_' && first_char)) { /* * ~~ or __ disable effect of special chars ~ and _. ~x~ defines * internal accelerator (inside menu item text). _x_ defines * external accelerator (displayed before menu item text) _ has this * effect only when it is first char of menu item text. */ if (text[1] == *text) { result += 1; text += 2; } else { if (*text == '_') _extern_accel = true; text += 1; if (_accelerator == NULL) _accelerator = text; /* eat second '_' */ if (_extern_accel) text += 1; } first_char = false; continue; } bytes = char_length(config, text); result += char_width(config, text); text += bytes; first_char = false; } if (extern_accel) *extern_accel = _extern_accel; if (accelerator) *accelerator = _accelerator; return result; } /* * Collect display info about pulldown menu */ static void pulldownmenu_content_size(ST_MENU_CONFIG *config, ST_MENU_ITEM *menu_items, int *rows, int *columns, int *shortcut_x_pos, int *item_x_pos, ST_MENU_ACCELERATOR *accelerators, int *naccelerators, int *first_row) { char *accelerator; bool has_extern_accel = false; int max_text_width = 0; int max_shortcut_width = 0; int naccel = 0; int default_row = -1; *rows = 0; *columns = 0; *shortcut_x_pos = 0; *first_row = -1; *naccelerators = 0; while (menu_items->text) { bool extern_accel; *rows += 1; if (*menu_items->text && strncmp(menu_items->text, "--", 2) != 0) { int text_width = 0; int shortcut_width = 0; if (*first_row == -1) *first_row = *rows; text_width = menutext_displaywidth(config, menu_items->text, &accelerator, &extern_accel); if (extern_accel) has_extern_accel = true; if (accelerator != NULL) { accelerators[naccel].c = chr_casexfrm(config, accelerator); accelerators[naccel].length = strlen(accelerators[naccel].c); accelerators[naccel++].row = *rows; } if (menu_items->shortcut) shortcut_width = str_width(config, menu_items->shortcut); if (menu_items->submenu) shortcut_width += shortcut_width > 0 ? 2 : 1; if (menu_items->options & ST_MENU_OPTION_DEFAULT && default_row == -1) default_row = *rows; /* * left alligned shortcuts are used by MC style */ if (config->left_alligned_shortcuts) { max_text_width = max_int(max_text_width, 1 + text_width + 2); max_shortcut_width = max_int(max_shortcut_width, shortcut_width); } else *columns = max_int(*columns, 1 + text_width + 1 + (config->extra_inner_space ? 2 : 0) + (shortcut_width > 0 ? shortcut_width + 4 : 0)); } menu_items += 1; } if (config->left_alligned_shortcuts) { *columns = max_text_width + (max_shortcut_width > 0 ? max_shortcut_width + 1 : 0); *shortcut_x_pos = max_text_width; } else *shortcut_x_pos = -1; *naccelerators = naccel; /* * When external accelerators are used, move content to right */ if (has_extern_accel) { *columns += config->extern_accel_text_space + 1; if (*shortcut_x_pos != -1) *shortcut_x_pos += config->extern_accel_text_space + 1; *item_x_pos = config->extern_accel_text_space + 1; } else *item_x_pos = 1; if (default_row != -1) *first_row = default_row; } /* * Draw menubar */ static void menubar_draw(struct ST_MENU *menu) { ST_MENU_ITEM *menu_item = menu->menu_items; ST_MENU_CONFIG *config = menu->config; bool has_focus; bool has_accelerators; int i; selected_item = NULL; selected_options = 0; selected_refval = NULL; /* do nothing when content is invisible */ if (menu->focus == ST_MENU_FOCUS_NONE) return; show_panel(menu->panel); top_panel(menu->panel); update_panels(); has_focus = menu->focus == ST_MENU_FOCUS_FULL; has_accelerators = menu->focus == ST_MENU_FOCUS_FULL || menu->focus == ST_MENU_FOCUS_ALT_MOUSE; if (has_focus) wbkgd(menu->window, COLOR_PAIR(config->menu_background_cpn) | config->menu_background_attr); else wbkgd(menu->window, COLOR_PAIR(config->menu_unfocused_cpn) | config->menu_unfocused_attr); werase(menu->window); i = 0; while (menu_item->text) { char *text = menu_item->text; bool highlight = false; bool is_cursor_row = menu->cursor_row == i + 1 && has_focus; bool is_disabled = menu->options[i] & ST_MENU_OPTION_DISABLED; int current_pos; /* bar_fields_x_pos holds x positions of menubar items */ current_pos = menu->bar_fields_x_pos[i]; if (is_cursor_row) { wmove(menu->window, 0, current_pos - 1); wattron(menu->window, COLOR_PAIR(config->cursor_cpn) | config->cursor_attr); waddstr(menu->window, " "); selected_item = menu_item; } else wmove(menu->window, 0, current_pos); if (is_disabled) wattron(menu->window, COLOR_PAIR(config->disabled_cpn) | config->disabled_attr); while (*text) { /* there are not external accelerators */ if (*text == '~') { if (text[1] == '~') { waddstr(menu->window, "~"); text += 2; continue; } if (!is_disabled && has_accelerators) { if (!highlight) { wattron(menu->window, COLOR_PAIR(is_cursor_row ? config->cursor_accel_cpn : config->accelerator_cpn) | (is_cursor_row ? config->cursor_accel_attr : config->accelerator_attr) ); } else { wattroff(menu->window, COLOR_PAIR(is_cursor_row ? config->cursor_accel_cpn : config->accelerator_cpn) | (is_cursor_row ? config->cursor_accel_attr : config->accelerator_attr)); if (is_cursor_row) wattron(menu->window, COLOR_PAIR(config->cursor_cpn) | config->cursor_attr); } highlight = !highlight; } text += 1; } else { int chlen = char_length(config, text); waddnstr(menu->window, text, chlen); text += chlen; } } if (is_cursor_row) { waddstr(menu->window, " "); wattroff(menu->window, COLOR_PAIR(config->cursor_cpn) | config->cursor_attr); } if (is_disabled) wattroff(menu->window, COLOR_PAIR(config->disabled_cpn) | config->disabled_attr); menu_item += 1; i += 1; } wnoutrefresh(menu->window); if (menu->active_submenu) pulldownmenu_draw(menu->active_submenu, true); } #ifdef DEBUG_PIPE static void debug_print_size(WINDOW *window, char *name) { int rows, cols; int y, x; getbegyx(window, y, x); getmaxyx(window, rows, cols); fprintf(debug_pipe, "window \"%s\" y: %d, x: %d, rows: %d. cols: %d\n", name, y, x, rows, cols); } #endif /* * adjust pulldown position - move panels from ideal position to any position * where can be fully displayed. */ static void pulldownmenu_ajust_position(struct ST_MENU *menu, int maxy, int maxx) { ST_MENU_CONFIG *config = menu->config; int rows, cols; int new_y, new_x; int y, x; getbegyx(menu->window, y, x); getmaxyx(menu->window, rows, cols); subtract_correction(menu->window, &y, &x); /* * Hypothesis: when panel is moved, then assigned windows is moved * to and possibly reduced (when terminal is smaller). But when terminal * grows, then size of assigned window grows too, more than was original * size. So we should to recheck size of assigned window, and fix it, when * it is bigger than should be. */ if (rows != menu->rows || cols != menu->cols) { int new_rows = y + menu->rows <= maxy ? menu->rows : maxy - y + 1; int new_cols = x + menu->cols <= maxx ? menu->cols : maxx - x + 1; if (new_rows != rows || new_cols != cols) wresize(menu->window, new_rows, new_cols); } #ifdef DEBUG_PIPE debug_print_size(menu->window, "menu window"); #endif /* * Previous issue is same for shadow window. But with different timing. * Visibility of shadow needs one row and one column more. The begin of * shadow window should be in relation to begin of menu window. */ if (config->shadow_width > 0) { int srows, scols; /* panel move can move shadow window. Force correct position now */ getmaxyx(menu->shadow_window, srows, scols); mvwin(menu->shadow_window, y+1 , x+config->shadow_width); if (srows != menu->rows || scols != menu->cols) { int new_srows, new_scols; new_srows = y + 1 + menu->rows <= maxy ? menu->rows : maxy - y - 1; new_scols = x + config->shadow_width + menu->cols <= maxx ? menu->cols : maxx - x - config->shadow_width; wresize(menu->shadow_window, new_srows, new_scols); } } #ifdef DEBUG_PIPE debug_print_size(menu->shadow_window, "menu shadow window"); #endif if (menu->ideal_x_pos + menu->cols > maxx) { new_x = maxx - menu->cols; if (new_x < 0) new_x = 0; } else new_x = menu->ideal_x_pos; if (menu->ideal_y_pos + menu->rows > maxy) { new_y = maxy - menu->rows; if (new_y < 1) new_y = 1; } else new_y = menu->ideal_y_pos; if (new_y != y || new_x != x) { int result; result = move_panel(menu->panel, new_y, new_x); /* * This is maybe ugly hack. move_panel fails when * attached window cannot be displayed. So we can try * resize attached window first. */ if (result != OK) { WINDOW *pw = panel_window(menu->panel); wresize(pw, maxy - new_y, menu->cols); replace_panel(menu->panel, pw); } result = move_panel(menu->panel, new_y, new_x); /* * move_panel fails when it cannot be displayed completly. * This is problem for shadow window because is n char right, * over left border. So we have to create new window with * different sizes. * Don't try move shadow panel, when a move of menu panel * failed. */ if (result == OK && menu->shadow_panel) { int new_rows, new_cols; int smaxy, smaxx; new_cols = menu->cols - (new_x == menu->ideal_x_pos ? 0 : config->shadow_width); new_rows = menu->rows - (maxy >= new_y + menu->rows + 1 ? 0 : 1); getmaxyx(menu->shadow_window, smaxy, smaxx); if (new_cols <= smaxx || new_rows <= smaxy) { WINDOW *new_shadow_window; new_shadow_window = newwin(new_rows, new_cols, new_y + 1, new_x + config->shadow_width); /* There are no other possibility to resize panel */ replace_panel(menu->shadow_panel, new_shadow_window); delwin(menu->shadow_window); menu->shadow_window = new_shadow_window; wbkgd(menu->shadow_window, COLOR_PAIR(config->menu_shadow_cpn) | config->menu_shadow_attr); wnoutrefresh(menu->shadow_window); } move_panel(menu->shadow_panel, new_y + 1, new_x + config->shadow_width); } } if (menu->active_submenu) pulldownmenu_ajust_position(menu->active_submenu, maxy, maxx); update_panels(); } /* * Draw shadow */ static void pulldownmenu_draw_shadow(struct ST_MENU *menu) { ST_MENU_CONFIG *config = menu->config; if (menu->shadow_window) { int smaxy, smaxx; int i, j; int wmaxy, wmaxx; attr_t shadow_attr; shadow_attr = config->menu_shadow_attr | A_DIM; getmaxyx(menu->shadow_window, smaxy, smaxx); show_panel(menu->shadow_panel); top_panel(menu->shadow_panel); /* desktop_win must be global */ werase(menu->shadow_window); if (desktop_win) overwrite(desktop_win, menu->shadow_window); if (active_cmdbar) overwrite(active_cmdbar->window, menu->shadow_window); wmaxy = smaxy - 1; wmaxx = smaxx - config->shadow_width; for (i = 0; i <= smaxy; i++) for (j = 0; j <= smaxx; j++) { if (i < wmaxy && j < wmaxx) continue; if (mvwinch(menu->shadow_window, i, j) & A_ALTCHARSET) mvwchgat(menu->shadow_window, i, j, 1, shadow_attr | A_ALTCHARSET, config->menu_shadow_cpn, NULL); else mvwchgat(menu->shadow_window, i, j, 1, shadow_attr, config->menu_shadow_cpn, NULL); } wnoutrefresh(menu->shadow_window); } if (menu->active_submenu) pulldownmenu_draw_shadow(menu->active_submenu); } /* * Early search of selected refval items. Is necessary to * change state before next drawing. */ static void searching_selected_refval_items(struct ST_MENU *menu) { ST_MENU_ITEM *menu_items = menu->menu_items; int row = 1; while (menu_items->text != NULL) { int offset = menu_items - menu->menu_items; if (IS_REF_OPTION(menu->options[offset])) { if (menu->cursor_row == row) { selected_item = menu_items; selected_options = menu->options[offset]; selected_refval= menu->refvals[offset]; } } menu_items += 1; row += 1; } if (menu->active_submenu) searching_selected_refval_items(menu->active_submenu); } /* * pulldown menu bar draw */ static void pulldownmenu_draw(struct ST_MENU *menu, bool is_top) { bool draw_box = menu->config->draw_box; ST_MENU_ITEM *menu_items = menu->menu_items; ST_MENU_CONFIG *config = menu->config; WINDOW *draw_area = menu->draw_area; WINDOW *loc_draw_area = NULL; int row = 1; int maxy, maxx; int dmaxy, dmaxx, dy, dx; int text_min_x, text_max_x; int *options = menu->options; bool force_ascii_art = config->force_ascii_art; int max_draw_rows = menu->rows; int i; selected_item = NULL; if (is_top) { int stdscr_maxy, stdscr_maxx; /* adjust positions of pulldown menus */ getmaxyx(stdscr, stdscr_maxy, stdscr_maxx); pulldownmenu_ajust_position(menu, stdscr_maxy, stdscr_maxx); /* Draw shadows of window and all nested active pull down menu */ pulldownmenu_draw_shadow(menu); } show_panel(menu->panel); top_panel(menu->panel); update_panels(); /* clean menu background */ werase(menu->window); /* * Now, we would to check if is possible to draw complete draw area on * screen, and if draw area is good enough for all menu's items. */ getmaxyx(stdscr, maxy, maxx); getmaxyx(draw_area, dmaxy, dmaxx); getbegyx(draw_area, dy, dx); subtract_correction(draw_area, &dy, &dx); if (dy + dmaxy > maxy || dmaxy < menu->rows ) { dmaxy = min_int(maxy - dy, dmaxy); max_draw_rows = draw_box ? (dmaxy - 2) : dmaxy; loc_draw_area = subwin(menu->window, dmaxy, dmaxx, dy, dx); draw_area = loc_draw_area; if (menu->cursor_row < menu->first_row) menu->first_row = menu->cursor_row; if (menu->cursor_row > menu->first_row + max_draw_rows - 1) menu->first_row = menu->cursor_row - max_draw_rows + 1; } else menu->first_row = 1; getmaxyx(draw_area, maxy, maxx); /* be compiler quiet */ (void) maxy; if (draw_box) { if (!force_ascii_art) box(draw_area, 0, 0); else wborder(draw_area, '|', '|','-','-','+','+','+','+'); } text_min_x = (draw_box ? 1 : 0) + (config->extra_inner_space ? 1 : 0); text_max_x = maxx - (draw_box ? 1 : 0) - (config->extra_inner_space ? 1 : 0); /* skip first firt_row rows from menu */ for (i = 1; i < menu->first_row; i++) if (menu_items->text != NULL) menu_items += 1; while (menu_items->text != NULL) { int offset = menu_items - menu->menu_items; bool has_submenu = menu_items->submenu ? true : false; bool is_disabled = false; bool is_marked = false; int mark_tag; if (options) { int option = options[offset]; is_disabled = option & ST_MENU_OPTION_DISABLED; if (option & ST_MENU_OPTION_MARKED) { mark_tag = config->mark_tag; is_marked = true; } else if (option & ST_MENU_OPTION_MARKED_REF) { int *refval = menu->refvals[offset]; if (*refval == menu_items->data) { is_marked = true; mark_tag = config->mark_tag; } } else if (option & ST_MENU_OPTION_SWITCH2_REF) { int *refval = menu->refvals[offset]; is_marked = true; mark_tag = (*refval == 1) ? config->switch_tag_1 : config->switch_tag_0; } else if (option & ST_MENU_OPTION_SWITCH3_REF) { int *refval = menu->refvals[offset]; is_marked = true; switch (*refval) { case 1: mark_tag = config->switch_tag_1; break; case 0: mark_tag = config->switch_tag_0; break; default: mark_tag = config->switch_tag_n1; break; } } } if (*menu_items->text == '\0' || strncmp(menu_items->text, "--", 2) == 0) { if (draw_box) { wmove(draw_area, row, 0); if (!force_ascii_art) waddch(draw_area, ACS_LTEE); else waddch(draw_area, '|'); } else wmove(draw_area, row - 1, 0); for(i = 0; i < maxx - 1 - (draw_box ? 1 : -1); i++) { if (!force_ascii_art) waddch(draw_area, ACS_HLINE); else waddch(draw_area, '-'); } if (draw_box) { if (!force_ascii_art) waddch(draw_area, ACS_RTEE); else waddch(draw_area, '|'); } } else { char *text = menu_items->text; bool highlight = false; bool is_cursor_row = menu->cursor_row == offset + 1; bool first_char = true; bool is_extern_accel; int text_y = -1; int text_x = -1; if (is_cursor_row) { mvwchgat(draw_area, row - (draw_box ? 0 : 1), text_min_x, text_max_x - text_min_x, config->cursor_attr, config->cursor_cpn, NULL); wattron(draw_area, COLOR_PAIR(config->cursor_cpn) | config->cursor_attr); selected_item = menu_items; } if (is_disabled) wattron(draw_area, COLOR_PAIR(config->disabled_cpn) | config->disabled_attr); is_extern_accel = (*text == '_' && text[1] != '_'); if (menu->item_x_pos != 1 && !is_extern_accel) { wmove(draw_area, row - (draw_box ? 0 : 1), text_min_x + 1 + menu->item_x_pos); } else wmove(draw_area, row - (draw_box ? 0 : 1), text_min_x + 1); while (*text) { if (*text == '~' || (*text == '_' && (first_char || highlight))) { if (text[1] == *text) { waddnstr(draw_area, text, 1); text += 2; first_char = false; continue; } if (!is_disabled) { if (!highlight) { wattron(draw_area, COLOR_PAIR(is_cursor_row ? config->cursor_accel_cpn : config->accelerator_cpn) | (is_cursor_row ? config->cursor_accel_attr : config->accelerator_attr)); } else { wattroff(draw_area, COLOR_PAIR(is_cursor_row ? config->cursor_accel_cpn : config->accelerator_cpn) | (is_cursor_row ? config->cursor_accel_attr : config->accelerator_attr)); if (is_cursor_row) wattron(draw_area, COLOR_PAIR(config->cursor_cpn) | config->cursor_attr); if (is_extern_accel) { int y, x; getyx(draw_area, y, x); wmove(draw_area, y, x + config->extern_accel_text_space); } } highlight = !highlight; } text += 1; } else { int chlen = char_length(config, text); /* Save initial position of text. This first char, when is not * external accelerator used, or first char after highlighted char * when extern accelerator is used. */ if (text_y == -1 && text_x == -1) { if (!is_extern_accel || !highlight) getyx(draw_area, text_y, text_x); } waddnstr(draw_area, text, chlen); text += chlen; } first_char = false; } if (menu_items->shortcut != NULL) { if (menu->shortcut_x_pos != -1) { wmove(draw_area, row - (draw_box ? 0 : 1), menu->shortcut_x_pos + (draw_box ? 1 : 0)); } else { int dspl = str_width(config, menu_items->shortcut); wmove(draw_area, row - (draw_box ? 0 : 1), text_max_x - dspl - 1 - (has_submenu ? 2 : 0)); } waddstr(draw_area, menu_items->shortcut); } if (has_submenu) { mvwprintw(draw_area, row - (draw_box ? 0 : 1), text_max_x - 2, "%lc", config->submenu_tag); } if (is_marked) { mvwprintw(draw_area, row - (draw_box ? 0 : 1), text_x - 1, "%lc", mark_tag); } if (is_cursor_row) wattroff(draw_area, COLOR_PAIR(config->cursor_cpn) | config->cursor_attr); if (is_disabled) wattroff(draw_area, COLOR_PAIR(config->disabled_cpn) | config->disabled_attr); } menu_items += 1; row += 1; if (row > max_draw_rows) break; } if (draw_box) { if (menu->first_row > 1) mvwprintw(draw_area, 1, maxx - 1, "%lc", config->scroll_up_tag); if (menu->first_row + max_draw_rows - 1 < menu->nitems) mvwprintw(draw_area, maxy - 2, maxx - 1, "%lc", config->scroll_down_tag); } if (loc_draw_area) { wnoutrefresh(loc_draw_area); delwin(loc_draw_area); } wnoutrefresh(menu->window); if (menu->active_submenu) pulldownmenu_draw(menu->active_submenu, false); } /* * Sets desktop window - it is used to draw shadow. The window * should be panelized. */ void st_menu_set_desktop_window(WINDOW *win) { desktop_win = win; } /* * Show menu - pull down or menu bar. */ void st_menu_post(struct ST_MENU *menu) { curs_set(0); noecho(); menu->mouse_row = -1; /* show menu */ if (menu->is_menubar) menubar_draw(menu); else pulldownmenu_draw(menu, true); } /* * Hide menu. When close_active_submenu is true, then the path * of active submenu is destroyed - it doesn't rememeber opened * submenus. */ void st_menu_unpost(struct ST_MENU *menu, bool close_active_submenu) { /* hide active submenu */ if (menu->active_submenu) { st_menu_unpost(menu->active_submenu, close_active_submenu); if (close_active_submenu) menu->active_submenu = NULL; } menu->mouse_row = -1; hide_panel(menu->panel); if (menu->shadow_panel) hide_panel(menu->shadow_panel); update_panels(); } /* * Allow to set focus level for menu objects. This allow to * redirect events to some else where focus is not full. */ void st_menu_set_focus(struct ST_MENU *menu, int focus) { menu->focus = focus; } /* * The coordinates of subwin are not "correctly" refreshed, when * parent panel is moved. Maybe it is bug in ncurses, maybe not. * The new coordinates are calculated from parent and offset to parent * and difference between new and old coordinates is applyed on * x, y points. */ static void add_correction(WINDOW *s, int *y, int *x) { WINDOW *p = wgetparent(s); /* * Note: function is_subwin is unknown on some * older ncurses implementations. Don't use it. */ if (p) { int py, px, sy, sx, oy, ox; int fix_y, fix_x; getbegyx(p, py, px); getbegyx(s, sy, sx); getparyx(s, oy, ox); fix_y = sy - (py + oy); fix_x = sx - (px + ox); *y += fix_y; *x += fix_x; } } /* * It is correction for window begxy, begx when panel contained * this window was moved. */ static void subtract_correction(WINDOW *s, int *y, int *x) { WINDOW *p = wgetparent(s); /* * Note: function is_subwin is unknown on some * older ncurses implementations. Don't use it. */ if (p) { int py, px, sy, sx, oy, ox; int fix_y, fix_x; getbegyx(p, py, px); getbegyx(s, sy, sx); getparyx(s, oy, ox); fix_y = sy - (py + oy); fix_x = sx - (px + ox); *y -= fix_y; *x -= fix_x; } } /* * Handle any outer event - pressed key, or mouse event. This driver * doesn't handle shortcuts - shortcuts are displayed only. * is_top is true, when _st_menu_driver is called first time, when * it is called recursivly, then it is false. Only in top call, the * draw routines can be called. * when unpost_submenu is true, then driver should to unpost active * subwindow of current menu. This info is propagated back - the nested * element tell to owner, close me. */ static bool _st_menu_driver(struct ST_MENU *menu, int c, bool alt, MEVENT *mevent, bool is_top, bool is_nested_pulldown, bool *unpost_submenu) { ST_MENU_CONFIG *config; int cursor_row; /* number of active menu item */ bool is_menubar; /* true, when processed object is menu bar */ int first_row = -1; /* number of row of first enabled item */ int last_row = -1; /* last menu item */ int mouse_row = -1; /* item number selected by mouse */ int search_row = -1; /* code menu selected by accelerator */ bool found_row = false; /* we found new active menu item (row var will be valid) */ bool post_menu = false; /* when it is true, then assiciated pulldown menu will be posted */ int row; bool processed = false; ST_MENU_ITEM *menu_items; /* reset globals */ selected_item = NULL; press_accelerator = false; press_enter = false; button1_clicked = false; *unpost_submenu = false; /* maybe only cmdbar is used */ if (!menu) goto post_process; config = menu->config; cursor_row = menu->cursor_row; /* number of active menu item */ is_menubar = menu->is_menubar; /* true, when processed object is menu bar */ /* Focus filter */ if ((menu->focus == ST_MENU_FOCUS_MOUSE_ONLY && c != KEY_MOUSE) || (menu->focus == ST_MENU_FOCUS_ALT_MOUSE && c != KEY_MOUSE && !alt) || (menu->focus == ST_MENU_FOCUS_NONE)) goto post_process; #if NCURSES_MOUSE_VERSION > 1 /* use mouse wheel only with FULL FOCUS */ if (c == KEY_MOUSE && (mevent->bstate & BUTTON4_PRESSED || mevent->bstate & BUTTON5_PRESSED) && menu->focus != ST_MENU_FOCUS_FULL) goto post_process; #endif /* * Propagate event to nested active object first. When nested object would be * closed, close it. When nested object read event, go to end */ if (menu->active_submenu) { bool _is_nested_pulldown = is_nested_pulldown ? true : (is_menubar ? false : true); bool unpost_submenu_loc = false; /* * Key right is used in pulldown menu for access to nested menu. * When nested menu is active already, then there is not any * work on this level. KEY_RIGHT can buble to menubar and can * be processed there. */ if (!is_menubar && c == KEY_RIGHT) goto post_process; /* * Submenu cannot be top object. When now is not menu bar, then now should be * pulldown menu, and nested object should be nested pulldown menu. */ processed = _st_menu_driver(menu->active_submenu, c, alt, mevent, false, _is_nested_pulldown, &unpost_submenu_loc); if (unpost_submenu_loc) { st_menu_unpost(menu->active_submenu, false); menu->active_submenu = NULL; } /* * When we close some object, then we did some work on this * level, and we should not do more work here. */ if (processed) goto post_process; } /* * The checks of events, that can unpost this level menu. For unposting top * object is responsible the user. */ if (!is_top) { if (c == ST_MENU_ESCAPE) { *unpost_submenu = true; /* * escape should to close all opened objects, so we cannot to * returns true (processed) due we are in top object. */ return false; } /* * Unpost menu (close) when mouse click outside menu window. Mouse position * event is processed specially. We want to close only submenu, or we want * to swith to other bar menu item. */ if (c == KEY_MOUSE && mevent->bstate & (BUTTON1_PRESSED | BUTTON1_RELEASED #if NCURSES_MOUSE_VERSION > 1 | REPORT_MOUSE_POSITION #endif )) { int y = mevent->y; int x = mevent->x; /* * For some styles, the window is different than draw_area. The * draw_area is subwindow of window. When main window is moved * due moving panel (see adjust position), then subwindow has not * expected coordinates. Following routine calculate fix between * current draw_area coordinates and expected coordinates. Then * apply this fix on mouse position. */ add_correction(menu->draw_area, &y, &x); if (!is_menubar && !wenclose(menu->draw_area, y, x)) { #if NCURSES_MOUSE_VERSION > 1 if (mevent->bstate & REPORT_MOUSE_POSITION) { /* * We want to ignore move movement outside menu's window. Without * it the behaviour is too sensitive, and it is not user friendly. * But we need to close submenus, and we want to allow usage of * bar menu. For these case we should to allow sending event to * upper objects. */ if (is_nested_pulldown) return false; else /* true when we are not in menu bar position */ return y != 0; } else { *unpost_submenu = true; return false; } #else *unpost_submenu = true; return false; #endif } } /* * Nested submenu can be unposted by pressing key left */ if (c == KEY_LEFT && is_nested_pulldown) { *unpost_submenu = true; return true; } } if (c == KEY_MOUSE) { #if NCURSES_MOUSE_VERSION > 1 if (mevent->bstate & BUTTON5_PRESSED) { c = KEY_DOWN; } else if (mevent->bstate & BUTTON4_PRESSED) { c = KEY_UP; } else #endif if (mevent->bstate & (BUTTON1_PRESSED | BUTTON1_RELEASED #if NCURSES_MOUSE_VERSION > 1 | REPORT_MOUSE_POSITION #endif )) { if (is_menubar) { /* * On menubar level we can process mouse event if row is zero, or * we can check if mouse is positioned inside draw area or active * submenu. If not, then we should to unpost active submenu. */ if (mevent->y == 0) { int i = 0; int chars_before; /* * How much chars before active item and following item * specify range of menubar item. */ chars_before = (config->text_space != -1) ? (config->text_space / 2) : 1; menu_items = menu->menu_items; while (menu_items->text) { int minx, maxx; /* first menubar field get mouse from left corner */ minx = i > 0 ? (menu->bar_fields_x_pos[i] - chars_before) : 0; /* last menubar field get mouse to right corner */ maxx = i + 1 < menu->nitems ? menu->bar_fields_x_pos[i + 1] - chars_before : mevent->x + 1; /* transform possitions to target menu code */ if (mevent->x >= minx && mevent->x < maxx) { mouse_row = i + 1; break; } menu_items += 1; i = i + 1; } } } else { int row_loc, col_loc; row_loc = mevent->y; col_loc = mevent->x; /* fix mouse coordinates, if draw_area has "wrong" coordinates */ add_correction(menu->draw_area, &row_loc, &col_loc); /* calculate row from transformed mouse event */ if (wmouse_trafo(menu->draw_area, &row_loc, &col_loc, false)) mouse_row = row_loc + 1 - (config->draw_box ? 1:0) + (menu->first_row - 1); } } } else /* there are no mouse event, reset prev mouse row */ menu->mouse_row = -1; /* * Try to check if key is accelerator. This check should be on last level. * So don't do it if submenu is active. */ if (c != KEY_MOUSE && c != KEY_HOME && c != KEY_END && c != KEY_UP && c != KEY_DOWN && c != KEY_LEFT && c != KEY_RIGHT) { /* * accelerator can be alt accelerator for menuber or non alt, and * the menu should not to have active submenu. */ if ((!alt && !menu->active_submenu) || (alt && is_menubar)) { char buffer[20]; char *pressed; int i; int l_pressed; l_pressed = wchar_to_utf8(config, buffer, 20, (wchar_t) c); buffer[l_pressed] = '\0'; pressed = chr_casexfrm(config, (char *) buffer); l_pressed = strlen(pressed); for (i = 0; i < menu->naccelerators; i++) { if (menu->accelerators[i].length == l_pressed && memcmp(menu->accelerators[i].c, pressed, l_pressed) == 0) { /* check if row is enabled */ search_row = menu->accelerators[i].row; if (menu->options[search_row - 1] & ST_MENU_OPTION_DISABLED) /* revert back, found accelerator is for disabled menu item */ search_row = -1; else break; } } free(pressed); /* Process key in this case only when we found accelerator */ if (search_row != -1) processed = true; } } /* * Iterate over menu items, and try to find next or previous row, code, or mouse * row. */ menu_items = menu->menu_items; row = 1; while (menu_items->text != 0) { if (*menu_items->text != '\0' && (strncmp(menu_items->text, "--", 2) != 0) && ((menu->options[row - 1] & ST_MENU_OPTION_DISABLED) == 0)) { if (first_row == -1) { first_row = row; if (c == KEY_HOME && !is_menubar) { menu->cursor_row = first_row; found_row = true; processed = true; break; } } if (is_menubar) { if (c == KEY_RIGHT && row > cursor_row) { menu->cursor_row = row; found_row = true; processed = true; break; } else if (c == KEY_LEFT && row == cursor_row) { if (last_row != -1) { menu->cursor_row = last_row; found_row = true; processed = true; break; } } } else { /* Is not menubar */ if (c == KEY_DOWN && row > cursor_row) { menu->cursor_row = row; processed = true; found_row = true; break; } else if (c == KEY_UP && row == cursor_row) { if (last_row != -1) { menu->cursor_row = last_row; found_row = true; processed = true; break; } else c = KEY_END; } } if (mouse_row != -1 && row == mouse_row) { menu->cursor_row = row; found_row = true; processed = true; post_menu = true; if (mevent->bstate & BUTTON1_PRESSED #if NCURSES_MOUSE_VERSION > 1 || mevent->bstate & REPORT_MOUSE_POSITION #endif ) { menu->mouse_row = mouse_row; } else { /* * Fully valid release event for transformation to * clicked event is only event, when PRESSED row * and released row is same. */ if (mevent->bstate& BUTTON1_RELEASED && menu->mouse_row == mouse_row) { button1_clicked = true; } menu->mouse_row = -1; } break; } else if (search_row != -1 && row == search_row) { menu->cursor_row = row; press_accelerator = true; found_row = true; post_menu = true; processed = true; break; } last_row = row; } menu_items += 1; row += 1; } /* * When rows not found, maybe we would to search limit points * or we would to return back in ring buffer of menu items. */ if (!found_row) { if (is_menubar) { if (c == KEY_RIGHT) { menu->cursor_row = first_row; processed = true; } else if (c == KEY_LEFT) { menu->cursor_row = last_row; processed = true; } } else { if (c == KEY_END) { menu->cursor_row = last_row; processed = true; } else if (c == KEY_DOWN) { menu->cursor_row = first_row; processed = true; } } } /* when menubar is changed, unpost active pulldown submenu */ if (menu->active_submenu && cursor_row != menu->cursor_row) { st_menu_unpost(menu->active_submenu, false); menu->active_submenu = NULL; /* remember, submenu was visible */ post_menu = true; } /* enter has sense only on selectable menu item */ if ((c == 10 || c == 13) && menu->cursor_row != -1) press_enter = true; /* * Some actions can activate submenu, check it and open it, if it * is required. */ if (press_accelerator || (c == KEY_DOWN && is_menubar) || (c == KEY_RIGHT && !is_menubar) || (c == 10) || (c == 13) || post_menu) { menu->active_submenu = menu->submenus[menu->cursor_row - 1]; if (menu->active_submenu) { /* when submenu is active, then reset accelerator and mouse flags */ press_accelerator = false; press_enter = false; button1_clicked = false; } /* * When mouse event opens or reopens submenu, then we take * this event as processed event. Valid accelerator is processed * always. Enter (c == 10) is processed always too. */ if (press_accelerator || c == 10 || c == 13) processed = true; else processed = menu->active_submenu != NULL; } /* * We can set processed flag, when some mouse row was founded. That means * so mouse click was somewhere to draw area. */ if (mouse_row != -1) processed = true; post_process: /* * show content, only top object is can do this - nested objects * are displayed recursivly. */ if (is_top) { /* when we processed some event, then we usually got a full focus */ if (processed) menu->focus = ST_MENU_FOCUS_FULL; else { /* * When event was not processed by menubar, then we * we can try to sent it to command bar. But with * full focus, the menubar is hungry, and we send nothing. */ if (active_cmdbar) { if (!menu || menu->focus != ST_MENU_FOCUS_FULL) processed = cmdbar_driver(active_cmdbar, c, alt, mevent); } } if (processed) { /* try to search selected item */ if (menu) searching_selected_refval_items(menu); } /* postprocess for referenced values */ if (selected_item && (press_accelerator || press_enter || button1_clicked)) { if (IS_REF_OPTION(selected_options)) { if (selected_refval == NULL) { endwin(); fprintf(stderr, "detected referenced option without referenced value"); exit(1); } if (selected_options & ST_MENU_OPTION_MARKED_REF) { *selected_refval = selected_item->data; } else if ((selected_options & ST_MENU_OPTION_SWITCH2_REF) || (selected_options & ST_MENU_OPTION_SWITCH3_REF)) { *selected_refval = (*selected_refval == 1) ? 0 : 1; } } } /* * command bar should be drawed first - because it is deeper * than pulldown menu */ if (active_cmdbar) cmdbar_draw(active_cmdbar); if (menu) { if (menu->is_menubar) menubar_draw(menu); else pulldownmenu_draw(menu, true); /* eat all keyboard input, when focus is full on top level */ if (c != KEY_MOUSE && c != KEY_RESIZE && c != ST_MENU_ESCAPE && menu->focus == ST_MENU_FOCUS_FULL) processed = true; } } return processed; } bool st_menu_driver(struct ST_MENU *menu, int c, bool alt, MEVENT *mevent) { bool aux_unpost_submenu = false; /* * We should to complete mouse click based on two * events. Mouse click is valid if press, release * was related with same command. Now, when mouse * is pressed, we don't know a related object, but * we can reset selected_command variable. */ if (c != KEY_MOUSE || mevent->bstate & BUTTON1_PRESSED) { selected_command = NULL; command_was_activated = false; } /* * We would to close pulldown menus on F10 key - similar behave * like SCAPE, so we can translate F10 event to ST_MENU_ESCAPE, * when menubar can accept these keys (based on focus). */ if (menu && KEY_F(10) == c && menu->focus == ST_MENU_FOCUS_FULL) c = ST_MENU_ESCAPE; return _st_menu_driver(menu, c, alt, mevent, true, false, &aux_unpost_submenu); } /* * Create state variable for pulldown menu. It based on template - a array of ST_MENU_ITEM fields. * The initial position can be specified. The config (specify desplay properties) should be * passed. The config can be own or preloaded from preddefined styles by function st_menu_load_style. * a title is not supported yet. */ struct ST_MENU * st_menu_new(ST_MENU_CONFIG *config, ST_MENU_ITEM *menu_items, int begin_y, int begin_x, char *title) { struct ST_MENU *menu; int rows, cols; int adjusted_rows, adjusted_cols; int adjusted_begin_y, adjusted_begin_x; int adjusted_shadow_rows, adjusted_shadow_cols; int adjusted_shadow_begin_y, adjusted_shadow_begin_x; ST_MENU_ITEM *menu_item; int menu_fields = 0; int i; menu = safe_malloc(sizeof(struct ST_MENU)); menu->menu_items = menu_items; menu->config = config; menu->title = title; menu->naccelerators = 0; menu->is_menubar = false; menu->mouse_row = -1; menu->first_row = 1; /* how much items are in template */ menu_item = menu_items; while (menu_item->text != NULL) { menu_fields += 1; menu_item += 1; } /* preallocate good enough memory */ menu->accelerators = safe_malloc(sizeof(ST_MENU_ACCELERATOR) * menu_fields); menu->submenus = safe_malloc(sizeof(struct ST_MENU) * menu_fields); menu->options = safe_malloc(sizeof(int) * menu_fields); menu->refvals = safe_malloc(sizeof(int*) * menu_fields); menu->nitems = menu_fields; /* get pull down menu dimensions */ pulldownmenu_content_size(config, menu_items, &rows, &cols, &menu->shortcut_x_pos, &menu->item_x_pos, menu->accelerators, &menu->naccelerators, &menu->cursor_row); if (config->draw_box) { rows += 2; cols += 2; } if (config->wide_vborders) cols += 2; if (config->wide_hborders) rows += 2; menu->ideal_y_pos = begin_y; menu->ideal_x_pos = begin_x; menu->rows = rows; menu->cols = cols; /* * We try to corect dimensions of windows, because pdcurses doesn't allow * parts of window to be out of screen. */ adjust_dimensions(rows, cols, begin_y, begin_x, 1, 0, config->shadow_width, &adjusted_rows, &adjusted_cols, &adjusted_begin_y, &adjusted_begin_x, &adjusted_shadow_rows, &adjusted_shadow_cols, &adjusted_shadow_begin_y, &adjusted_shadow_begin_x); /* Prepare property for menu shadow */ if (config->shadow_width > 0) { menu->shadow_window = newwin(adjusted_shadow_rows, adjusted_shadow_cols, adjusted_shadow_begin_y, adjusted_shadow_begin_x); menu->shadow_panel = new_panel(menu->shadow_window); hide_panel(menu->shadow_panel); wbkgd(menu->shadow_window, COLOR_PAIR(config->menu_shadow_cpn) | config->menu_shadow_attr); wnoutrefresh(menu->shadow_window); } else { menu->shadow_window = NULL; menu->shadow_panel = NULL; } menu->window = newwin(adjusted_rows, adjusted_cols, adjusted_begin_y, adjusted_begin_x); wbkgd(menu->window, COLOR_PAIR(config->menu_background_cpn) | config->menu_background_attr); wnoutrefresh(menu->window); /* * Initialize submenu states (nested submenus) */ menu_item = menu_items; i = 0; while (menu_item->text) { if (menu_item->submenu) { menu->submenus[i] = st_menu_new(config, menu_item->submenu, begin_y + i + config->submenu_offset_y + (config->draw_box ? 1 : 0) + (config->wide_vborders ? 1 : 0), begin_x + cols + config->submenu_offset_x, NULL); } else menu->submenus[i] = NULL; menu->options[i] = menu_item->options; menu->refvals[i] = NULL; menu_item += 1; i += 1; } /* draw area can be same like window or smaller */ if (config->wide_vborders || config->wide_hborders) { menu->draw_area = derwin(menu->window, adjusted_rows - (config->wide_hborders ? 2 : 0), adjusted_cols - (config->wide_vborders ? 2 : 0), config->wide_hborders ? 1 : 0, config->wide_vborders ? 1 : 0); wbkgd(menu->draw_area, COLOR_PAIR(config->menu_background_cpn) | config->menu_background_attr); wnoutrefresh(menu->draw_area); } else menu->draw_area = menu->window; menu->panel = new_panel(menu->window); hide_panel(menu->panel); return menu; } /* * Create state variable for menubar based on template (array) of ST_MENU_ITEM */ struct ST_MENU * st_menu_new_menubar2(ST_MENU_CONFIG *barcfg, ST_MENU_CONFIG *pdcfg, ST_MENU_ITEM *menu_items) { struct ST_MENU *menu; int maxy, maxx; ST_MENU_ITEM *menu_item; int menu_fields = 0; int aux_width = 0; int text_space; int current_pos; int i = 0; int naccel = 0; if (pdcfg == NULL) pdcfg = barcfg; getmaxyx(stdscr, maxy, maxx); menu = safe_malloc(sizeof(struct ST_MENU)); maxy = 1; menu->window = newwin(maxy, maxx, 0, 0); menu->panel = new_panel(menu->window); /* there are not shadows */ menu->shadow_window = NULL; menu->shadow_panel = NULL; menu->config = barcfg; menu->menu_items = menu_items; menu->cursor_row = 1; menu->first_row = 1; menu->active_submenu = NULL; menu->is_menubar = true; menu->mouse_row = -1; wbkgd(menu->window, COLOR_PAIR(barcfg->menu_background_cpn) | barcfg->menu_background_attr); menu_item = menu_items; while (menu_item->text) { menu_fields += 1; if (barcfg->text_space == -1) aux_width += menutext_displaywidth(barcfg, menu_item->text, NULL, NULL); menu_item += 1; } /* * last bar position is hypotetical - we should not to calculate length of last field * every time. */ menu->bar_fields_x_pos = safe_malloc(sizeof(int) * (menu_fields + 1)); menu->submenus = safe_malloc(sizeof(struct ST_MENU) * menu_fields); menu->accelerators = safe_malloc(sizeof(ST_MENU_ACCELERATOR) * menu_fields); menu->options = safe_malloc(sizeof(int) * menu_fields); menu->refvals = safe_malloc(sizeof(int*) * menu_fields); menu->nitems = menu_fields; /* * When text_space is not defined, then try to vallign menu items */ if (barcfg->text_space == -1) { text_space = (maxx + 1 - aux_width) / (menu_fields + 1); if (text_space < 4) text_space = 4; else if (text_space > 15) text_space = 15; current_pos = text_space; } else { text_space = barcfg->text_space; current_pos = barcfg->init_text_space; } /* Initialize submenu */ menu_item = menu_items; i = 0; while (menu_item->text) { char *accelerator; menu->bar_fields_x_pos[i] = current_pos; current_pos += menutext_displaywidth(barcfg, menu_item->text, &accelerator, NULL); current_pos += text_space; if (menu_item->submenu) { menu->submenus[i] = st_menu_new(pdcfg, menu_item->submenu, 1, menu->bar_fields_x_pos[i] + pdcfg->menu_bar_menu_offset - (pdcfg->draw_box ? 1 : 0) - (pdcfg->wide_vborders ? 1 : 0) - (pdcfg->extra_inner_space ? 1 : 0) - 1, NULL); } else menu->submenus[i] = NULL; if (accelerator) { menu->accelerators[naccel].c = chr_casexfrm(barcfg, accelerator); menu->accelerators[naccel].length = strlen(menu->accelerators[naccel].c); menu->accelerators[naccel++].row = i + 1; } menu->naccelerators = naccel; menu->options[i] = menu_item->options; menu->refvals[i] = NULL; menu_item += 1; i += 1; } /* * store hypotetical x bar position */ menu->bar_fields_x_pos[i] = current_pos; return menu; } struct ST_MENU * st_menu_new_menubar(ST_MENU_CONFIG *config, ST_MENU_ITEM *menu_items) { return st_menu_new_menubar2(config, NULL, menu_items); } /* * Remove all objects allocated by menu and nested objects * it is workhorse for st_menu_free */ static void _st_menu_free(struct ST_MENU *menu) { if (menu) { int i; if (menu->submenus) { for (i = 0; i < menu->nitems; i++) st_menu_free(menu->submenus[i]); free(menu->submenus); } for (i = 0; i < menu->naccelerators; i++) free(menu->accelerators[i].c); free(menu->accelerators); if (menu->shadow_panel) del_panel(menu->shadow_panel); if (menu->shadow_window) delwin(menu->shadow_window); del_panel(menu->panel); /* pdcurses doesn't like deleting window with subwindows */ if (menu->window != menu->draw_area && menu->draw_area) delwin(menu->draw_area); delwin(menu->window); free(menu->bar_fields_x_pos); free(menu->options); free(menu->refvals); free(menu); } } void st_menu_free(struct ST_MENU *menu) { _st_menu_free(menu); update_panels(); } /* * Returns active item and info about selecting of active item */ ST_MENU_ITEM * st_menu_selected_item(bool *activated) { /* * Activated can be true only when selected_item is valid */ if (selected_item) *activated = press_accelerator || press_enter || button1_clicked; else *activated = false; return selected_item; } /* * Set flag of first menu item specified by code */ bool st_menu_enable_option(struct ST_MENU *menu, int code, int option) { ST_MENU_ITEM *menu_items = menu->menu_items; int i = 0; while (menu_items->text) { if (menu_items->code == code) { menu->options[i] |= option; return true; } if (menu->submenus[i]) if (st_menu_enable_option(menu->submenus[i], code, option)) return true; menu_items += 1; i += 1; } return false; } /* * Reset flag of first menu item specified by code */ bool st_menu_reset_option(struct ST_MENU *menu, int code, int option) { ST_MENU_ITEM *menu_items = menu->menu_items; int i = 0; while (menu_items->text) { if (menu_items->code == code) { menu->options[i] &= ~option; return true; } if (menu->submenus[i]) if (st_menu_reset_option(menu->submenus[i], code, option)) return true; menu_items += 1; i += 1; } return false; } /* * Reset flag of first menu item specified by code */ bool st_menu_reset_all_options(struct ST_MENU *menu, int option) { ST_MENU_ITEM *menu_items = menu->menu_items; int i = 0; while (menu_items->text) { menu->options[i] &= ~option; if (menu->submenus[i]) st_menu_reset_all_options(menu->submenus[i], option); menu_items += 1; i += 1; } return false; } /* * Reset flag of first menu item specified by code */ bool st_menu_reset_all_submenu_options(struct ST_MENU *menu, int menu_code, int option) { ST_MENU_ITEM *menu_items = menu->menu_items; int i = 0; while (menu_items->text) { if (menu->submenus[i]) { if (menu_items->code == menu_code) { st_menu_reset_all_options(menu->submenus[i], option); return true; } if (st_menu_reset_all_submenu_options(menu->submenus[i], menu_code, option)) return true; } menu_items += 1; i += 1; } return false; } /* * Set flag of first menu item specified by code */ bool st_menu_set_option(struct ST_MENU *menu, int code, int option, bool value) { ST_MENU_ITEM *menu_items = menu->menu_items; int i = 0; while (menu_items->text) { if (menu_items->code == code) { if (value) menu->options[i] |= option; else menu->options[i] &= ~option; return true; } if (menu->submenus[i]) if (st_menu_set_option(menu->submenus[i], code, option, value)) return true; menu_items += 1; i += 1; } return false; } /* * Reduce string to expected display width. The buffer should be * preallocated on good enough length - size of src. */ static void reduce_string(ST_MENU_CONFIG *config, int display_width, char *dest, char *src) { int current_width = str_width(config, src); int char_count = 0; while (src && display_width > 0) { if (current_width <= display_width) { strcpy(dest, src); return; } else { int chrlen = char_length(config, src); int dw = char_width(config, src); if (char_count < 2) { memcpy(dest, src, chrlen); dest += chrlen; display_width -= dw; } else if (char_count == 2) { *dest++ = '~'; display_width -= 1; } char_count += 1; current_width -= dw; src += chrlen; } } *dest = '\0'; } static void cmdbar_draw(struct ST_CMDBAR *cmdbar) { ST_MENU_CONFIG *config = cmdbar->config; int i; show_panel(cmdbar->panel); top_panel(cmdbar->panel); update_panels(); werase(cmdbar->window); if (config->funckey_bar_style) { for (i = 0; i < cmdbar->nitems; i++) { wmove(cmdbar->window, 0, cmdbar->positions[i]); wattron(cmdbar->window, COLOR_PAIR(config->cursor_cpn) | config->cursor_attr); wprintw(cmdbar->window, "%2d", i+1); wattroff(cmdbar->window, COLOR_PAIR(config->cursor_cpn) | config->cursor_attr); if (cmdbar->labels[i]) waddstr(cmdbar->window, cmdbar->labels[i]); } } else { for (i = 0; i < cmdbar->nitems; i++) { bool need_sep = false; bool marked = false; int accel_prop; int text_prop; marked = &cmdbar->cmdbar_items[i] == selected_command && !command_was_activated; if (marked) { mvwchgat(cmdbar->window, 0, cmdbar->positions[i] - 1, cmdbar->positions[i+1] - config->text_space + 1 - cmdbar->positions[i] + 1, config->cursor_attr, config->cursor_cpn, NULL); accel_prop = COLOR_PAIR(config->cursor_accel_cpn) | config->cursor_accel_attr; text_prop = COLOR_PAIR(config->cursor_cpn) | config->cursor_attr; } else { accel_prop = COLOR_PAIR(config->accelerator_cpn) | config->accelerator_attr; text_prop = COLOR_PAIR(config->menu_unfocused_cpn) | config->menu_unfocused_attr; } wmove(cmdbar->window, 0, cmdbar->positions[i]); wattron(cmdbar->window, accel_prop); if (cmdbar->cmdbar_items[i].alt) { need_sep = true; waddstr(cmdbar->window, "M-"); } if (cmdbar->cmdbar_items[i].fkey > 0) { need_sep = true; wprintw(cmdbar->window, "F%d", cmdbar->cmdbar_items[i].fkey); } wattroff(cmdbar->window, accel_prop); wattron(cmdbar->window, text_prop); if (need_sep) waddstr(cmdbar->window, " "); waddstr(cmdbar->window, cmdbar->cmdbar_items[i].text); wattroff(cmdbar->window, text_prop); } } wnoutrefresh(cmdbar->window); } static bool cmdbar_driver(struct ST_CMDBAR *cmdbar, int c, bool alt, MEVENT *mevent) { ST_CMDBAR_ITEM *cmdbar_item = cmdbar->cmdbar_items; ST_MENU_CONFIG *config = cmdbar->config; if (c == KEY_MOUSE && mevent->bstate & (BUTTON1_PRESSED | BUTTON1_RELEASED #if NCURSES_MOUSE_VERSION > 1 | REPORT_MOUSE_POSITION #endif )) { int y = mevent->y; int x = mevent->x; int i; if (!wenclose(cmdbar->window, y, x)) { command_was_activated = true; return false; } for (i = 0; i < cmdbar->nitems; i++) { int begin_x = i > 0 ? cmdbar->positions[i] : 0; int next_begin_x = cmdbar->positions[i + 1]; if (!config->funckey_bar_style) { begin_x -= 1; next_begin_x -= 1; } if (begin_x <= x && x < next_begin_x) { if (config->funckey_bar_style) { if (cmdbar->labels[i]) { /* * This design is not exact, but it is good enough. * The click is valid, when press and release is over same * object. */ if (mevent->bstate & BUTTON1_PRESSED) { command_was_activated = false; selected_command = cmdbar->ordered_items[i]; return true; } else if (mevent->bstate & BUTTON1_RELEASED) { if (selected_command == cmdbar->ordered_items[i]) { command_was_activated = true; return true; } } } } else { if (mevent->bstate & BUTTON1_PRESSED) { command_was_activated = false; selected_command = &cmdbar->cmdbar_items[i]; return true; } else if (mevent->bstate & BUTTON1_RELEASED) { if (selected_command == &cmdbar->cmdbar_items[i]) { command_was_activated = true; return true; } } } } } selected_command = NULL; return true; } else { while (cmdbar_item->text) { if (cmdbar_item->alt == alt && KEY_F(cmdbar_item->fkey) == c) { command_was_activated = true; selected_command = cmdbar_item; return true; } cmdbar_item += 1; } } return false; } ST_CMDBAR_ITEM * st_menu_selected_command(bool *activated) { *activated = selected_command != NULL && command_was_activated; return selected_command; } /* * Create state variable for commandbar. It based on template - a array of ST_CMDBAR_ITEM fields. */ struct ST_CMDBAR * st_cmdbar_new(ST_MENU_CONFIG *config, ST_CMDBAR_ITEM *cmdbar_items) { struct ST_CMDBAR *cmdbar; ST_CMDBAR_ITEM *cmdbar_item; int maxy, maxx, tmpy; int i; int last_position; cmdbar = safe_malloc(sizeof(struct ST_CMDBAR)); cmdbar->cmdbar_items = cmdbar_items; cmdbar->config = config; getmaxyx(stdscr, maxy, maxx); tmpy = 1; cmdbar->window = newwin(tmpy, maxx, maxy - 1, 0); cmdbar->panel = new_panel(cmdbar->window); wbkgd(cmdbar->window, COLOR_PAIR(config->menu_unfocused_cpn) | config->menu_unfocused_attr); werase(cmdbar->window); cmdbar->nitems = 0; cmdbar_item = cmdbar_items; if (!config->funckey_bar_style) { while (cmdbar_item->text) { cmdbar->nitems += 1; cmdbar_item += 1; } } else cmdbar->nitems = 10; cmdbar->positions = safe_malloc(sizeof(int) * (cmdbar->nitems + 1)); cmdbar->labels = safe_malloc(sizeof(char*) * cmdbar->nitems); cmdbar->ordered_items = safe_malloc(sizeof(ST_CMDBAR_ITEM *) * cmdbar->nitems); last_position = 0; if (config->funckey_bar_style) { int width = maxx / 10; double extra_width = (maxx % 10) / 10.0; double extra_width_sum = 0; if (width < 7) { /* when terminal is too thin, don't show all fields */ cmdbar->nitems = maxx / 7; width = maxx / cmdbar->nitems; extra_width = (maxx % cmdbar->nitems) / (cmdbar->nitems * 1.0); extra_width_sum = 0; } for (i = 0; i < cmdbar->nitems; i++) { cmdbar->positions[i] = last_position; last_position += width; extra_width_sum += extra_width; if (extra_width_sum > 1.0) { last_position += 1; extra_width_sum -= 1; } } cmdbar->positions[cmdbar->nitems] = maxx + 1; cmdbar_item = cmdbar_items; while (cmdbar_item->text) { int fkey = cmdbar_item->fkey; int display_width; if (cmdbar_item->alt) { endwin(); fprintf(stderr, "Alt is not supported in funckey bar style"); exit(1); } if (fkey < 1 || fkey > 10) { endwin(); fprintf(stderr, "fkey code should be between 1 and 10"); exit(1); } /* don't display keys in reduced bar */ if (fkey > cmdbar->nitems) { cmdbar_item += 1; continue; } if (cmdbar->labels[fkey - 1]) { endwin(); fprintf(stderr, "multiple assigned items inside funckey bar"); exit(1); } cmdbar->ordered_items[fkey - 1] = cmdbar_item; display_width = cmdbar->positions[fkey] - cmdbar->positions[fkey - 1] - 2; cmdbar->labels[fkey - 1] = safe_malloc(strlen(cmdbar_item->text) + 1); reduce_string(config, display_width, cmdbar->labels[fkey - 1], cmdbar_item->text); cmdbar_item += 1; } } else { last_position = config->init_text_space; for (i = 0; i < cmdbar->nitems; i++) { cmdbar_item = &cmdbar_items[i]; cmdbar->positions[i] = last_position; if (cmdbar_item->alt) last_position += strlen("M-"); if (cmdbar_item->fkey > 0) last_position += strlen("Fx"); if (cmdbar_item->fkey > 9) last_position += strlen("0"); if (cmdbar->positions[i] != last_position) last_position += 1; last_position += str_width(config, cmdbar_item->text); last_position += config->text_space != -1 ? config->text_space : 3; } cmdbar->positions[cmdbar->nitems] = last_position; } return cmdbar; } void st_cmdbar_post(struct ST_CMDBAR *cmdbar) { active_cmdbar = cmdbar; cmdbar_draw(cmdbar); } void st_cmdbar_unpost(struct ST_CMDBAR *cmdbar) { active_cmdbar = NULL; hide_panel(cmdbar->panel); update_panels(); } void st_cmdbar_free(struct ST_CMDBAR *cmdbar) { int i; active_cmdbar = NULL; del_panel(cmdbar->panel); delwin(cmdbar->window); for (i = 0; i < cmdbar->nitems; i++) if (cmdbar->labels[i]) free(cmdbar->labels[i]); free(cmdbar->labels); free(cmdbar->positions); free(cmdbar->ordered_items); free(cmdbar); update_panels(); } /* * Set reference to some variable for menu's option */ bool st_menu_set_ref_option(struct ST_MENU *menu, int code, int option, int *refvalue) { ST_MENU_ITEM *menu_items = menu->menu_items; int i = 0; if (!IS_REF_OPTION(option)) { endwin(); fprintf(stderr, "cannot assign reference value with not reference option"); exit(1); } while (menu_items->text) { if (menu_items->code == code) { menu->options[i] |= option; menu->refvals[i] = refvalue; return true; } if (menu->submenus[i]) if (st_menu_set_ref_option(menu->submenus[i], code, option, refvalue)) return true; menu_items += 1; i += 1; } return false; } /* * Set shortcut for option specified by code */ bool st_menu_set_shortcut(struct ST_MENU *menu, int code, char *shortcut) { ST_MENU_ITEM *menu_items = menu->menu_items; int i = 0; while (menu_items->text) { if (menu_items->code == code) { menu_items->shortcut = shortcut; return true; } if (menu->submenus[i]) if (st_menu_set_shortcut(menu->submenus[i], code, shortcut)) return true; menu_items += 1; i += 1; } return false; } /* * Returns type of focus of menu */ int st_menu_get_focus(struct ST_MENU *menu) { return menu->focus; } pspg-5.8.1/src/st_menu.h000066400000000000000000000171361452457446400151370ustar00rootroot00000000000000#ifndef _ST_MENU_H #define _ST_MENU_H #include #include "st_curses.h" #define ST_MENU_STYLE_MCB 0 #define ST_MENU_STYLE_MC 1 #define ST_MENU_STYLE_VISION 2 #define ST_MENU_STYLE_DOS 3 #define ST_MENU_STYLE_FAND_1 4 #define ST_MENU_STYLE_FAND_2 5 #define ST_MENU_STYLE_FOXPRO 6 #define ST_MENU_STYLE_PERFECT 7 #define ST_MENU_STYLE_NOCOLOR 8 #define ST_MENU_STYLE_ONECOLOR 9 #define ST_MENU_STYLE_TURBO 10 #define ST_MENU_STYLE_PDMENU 11 #define ST_MENU_STYLE_OLD_TURBO 12 #define ST_MENU_STYLE_FREE_DOS 13 #define ST_MENU_STYLE_FREE_DOS_P 14 #define ST_MENU_STYLE_MC46 15 #define ST_MENU_STYLE_DBASE 16 #define ST_MENU_STYLE_MENUWORKS 17 #define ST_MENU_STYLE_TAO 18 #define ST_MENU_STYLE_XGOLD 19 #define ST_MENU_STYLE_XGOLD_BLACK 20 #define ST_MENU_STYLE_FLATWHITE 21 #define ST_MENU_LAST_STYLE ST_MENU_STYLE_FLATWHITE #define ST_MENU_ESCAPE 27 #define ST_MENU_OPTION_DEFAULT 1 #define ST_MENU_OPTION_DISABLED 2 #define ST_MENU_OPTION_MARKED 4 #define ST_MENU_OPTION_MARKED_REF 8 /* mark one from group */ #define ST_MENU_OPTION_SWITCH2_REF 16 /* two state switch: 0, 1*/ #define ST_MENU_OPTION_SWITCH3_REF 32 /* three state switch: -1, 0, 1 */ #define ST_MENU_FOCUS_FULL 0 /* all possible events can be processed */ #define ST_MENU_FOCUS_ALT_MOUSE 1 /* only mouse, ALT key events */ #define ST_MENU_FOCUS_MOUSE_ONLY 2 /* only mouse events are processed */ #define ST_MENU_FOCUS_NONE 3 /* menu has not any focus */ #define IS_REF_OPTION(o) (((o) & ST_MENU_OPTION_MARKED_REF) || ((o) & ST_MENU_OPTION_SWITCH2_REF) || ((o) & ST_MENU_OPTION_SWITCH3_REF)) /* * Uncomment it and set for your environment when you would to * use named pipe for debugging. * #define DEBUG_PIPE "/home/pavel/debug" */ #ifdef DEBUG_PIPE /* * When you would to use named pipe for debugging, then there should * be active reader from this pipe before start demo application. * In this case "tail -f ~/debug" inside other terminal. */ extern FILE *debug_pipe; extern int debug_eventno; #endif typedef struct st_ST_MENU_ITEM { char *text; /* text of menu item, possible specify accelerator by ~ */ int code; /* code of menu item (optional) */ char *shortcut; /* shortcut text, only printed (optional) */ int data; /* allow to assign some value to menu item (optional) */ char group; /* specify semantics of data value (optional) */ int options; /* locked, marked, ... (optional) */ struct st_ST_MENU_ITEM *submenu; /* reference to nested menu (optional) */ } ST_MENU_ITEM; typedef struct { bool force8bit; char *encoding; const char *language; bool wide_vborders; /* wide vertical menu borders like Turbo Vision */ bool wide_hborders; /* wide horizontal menu borders like custom menu mc */ bool draw_box; /* when true, then box is created */ bool left_alligned_shortcuts; /* when true, a shortcuts are left alligned */ bool funckey_bar_style; /* when true, menu bar is displayed as mc toolbar */ bool extra_inner_space; /* when true, then there 2 spaces between text and border */ bool force_ascii_art; /* use ascii chars for borders */ int shadow_width; /* when shadow_width is higher than zero, shadow is visible */ int menu_background_cpn; /* draw area color pair number */ attr_t menu_background_attr; /* draw area attributte */ int menu_unfocused_cpn; /* draw area color pair number when menu has not focus */ attr_t menu_unfocused_attr; /* draw area attribute when menu has not focus */ int menu_shadow_cpn; /* menu shadow color pair number */ attr_t menu_shadow_attr; /* menu shadow area attributte */ int accelerator_cpn; /* color pair of accelerators */ attr_t accelerator_attr; /* accelerator attributes */ int cursor_cpn; /* cursor color pair */ attr_t cursor_attr; /* cursor attributte */ int cursor_accel_cpn; /* color pair of accelerator on cursor row */ attr_t cursor_accel_attr; /* attributte of of accelerator on cursor row */ int disabled_cpn; /* color of disabled menu fields */ attr_t disabled_attr; /* attributes of disabled menu fields */ int shortcut_space; /* spaces between text and shortcut */ int text_space; /* spaces between text fields (menubar), when it is -1, then dynamic spaces (FAND) */ int init_text_space; /* initial space for menu bar */ int menu_bar_menu_offset; /* offset between menu bar and menu */ int inner_space; /* space between draw area and border, FAND uses 2 spaces */ int extern_accel_text_space; /* space between external accelerator and menu item text */ int submenu_tag; /* symbol used for submenu tag */ int submenu_offset_y; /* offset for submenu related to right border of parent menu window */ int submenu_offset_x; /* offset for submenu related to cursor in parent menu window */ int mark_tag; /* symbol used for mark tag */ int switch_tag_n1; /* symbol used for switch negative 1 */ int switch_tag_0; /* symbol used for switch 0 */ int switch_tag_1; /* symbol used for switch 1 */ int scroll_up_tag; /* symbol used for possibility to scroll up */ int scroll_down_tag; /* symbol used for possibility to scroll down */ } ST_MENU_CONFIG; struct ST_MENU; typedef struct { char *text; /* text of command bar field */ bool alt; /* should be used like Alt+FX */ int fkey; /* Func key number */ int code; /* code of command bar item */ int option; /* locked, marked, ... (optional) */ } ST_CMDBAR_ITEM; struct ST_CMDBAR; extern int st_menu_load_style(ST_MENU_CONFIG *config, int style, int start_from_cpn, bool force8bit, bool force_ascii_art); extern int st_menu_load_style_rgb(ST_MENU_CONFIG *config, int style, int start_from_cpn, int *start_from_rgb, bool force8bit, bool force_ascii_art); extern void st_menu_set_desktop_window(WINDOW *win); extern struct ST_MENU *st_menu_new(ST_MENU_CONFIG *config, ST_MENU_ITEM *items, int begin_y, int begin_x, char *title); extern struct ST_MENU *st_menu_new_menubar(ST_MENU_CONFIG *config, ST_MENU_ITEM *items); extern struct ST_MENU *st_menu_new_menubar2(ST_MENU_CONFIG *barcfg, ST_MENU_CONFIG *pdcfg, ST_MENU_ITEM *items); extern void st_menu_post(struct ST_MENU *menu); extern void st_menu_unpost(struct ST_MENU *menu, bool close_active_submenu); extern bool st_menu_driver(struct ST_MENU *menu, int c, bool alt, MEVENT *mevent); extern void st_menu_free(struct ST_MENU *menu); extern void st_menu_save(struct ST_MENU *menu, int *cursor_rows, int **refvals, int max_items); extern void st_menu_load(struct ST_MENU *menu, int *cursor_rows, int **refvals); extern int st_menu_get_focus(struct ST_MENU *menu); extern ST_MENU_ITEM *st_menu_selected_item(bool *activated); extern ST_CMDBAR_ITEM *st_menu_selected_command(bool *activated); extern bool st_menu_enable_option(struct ST_MENU *menu, int code, int option); extern bool st_menu_reset_option(struct ST_MENU *menu, int code, int option); extern bool st_menu_set_option(struct ST_MENU *menu, int code, int option, bool value); extern bool st_menu_reset_all_submenu_options(struct ST_MENU *menu, int menu_code, int option); extern bool st_menu_reset_all_options(struct ST_MENU *menu, int option); extern void st_menu_set_focus(struct ST_MENU *menu, int focus); extern bool st_menu_set_shortcut(struct ST_MENU *menu, int code, char *shortcut); extern bool st_menu_set_ref_option(struct ST_MENU *menu, int code, int option, int *refvalue); extern struct ST_CMDBAR *st_cmdbar_new(ST_MENU_CONFIG *config, ST_CMDBAR_ITEM *cmdbar_items); extern void st_cmdbar_post(struct ST_CMDBAR *cmdbar); extern void st_cmdbar_unpost(struct ST_CMDBAR *cmdbar); extern void st_cmdbar_free(struct ST_CMDBAR *cmdbar); extern void st_menu_set_direct_color(bool direct_color); #endif pspg-5.8.1/src/st_menu_styles.c000066400000000000000000001020341452457446400165250ustar00rootroot00000000000000#include "st_menu.h" #include static bool direct_color = false; static int current_cpn = 0; static unsigned int rgb_color_cache[10]; static int custom_color_start; /* 0..255 rgb based colors */ static void init_color_rgb_ff(short color, short r, short g, short b) { if (direct_color || !can_change_color()) { rgb_color_cache[color] = (r << 16) + (g << 8) + b; } else init_color(custom_color_start + color, (r / 255.0) * 1000.0, (g / 255.0) * 1000.0, (b / 255.0) * 1000.0); } /* * Set ligh colour */ static attr_t slc(short id, short foreground, short background) { if (COLORS == 8 || foreground == -1) { init_pair(id, foreground, background); return A_BOLD; } else if (foreground < 8) { init_pair(id, foreground + 8, background); return 0; } else { init_pair(id, foreground, background); return 0; } } #ifdef NCURSES_EXT_COLORS static unsigned int get_rgb(short c, bool light) { if (light) { switch (c) { case COLOR_BLACK: return 0x555555; case COLOR_RED: return 0xff5555; case COLOR_GREEN: return 0x55ff55; case COLOR_YELLOW: return 0xffff55; case COLOR_BLUE: return 0x5555ff; case COLOR_MAGENTA: return 0xff55ff; case COLOR_CYAN: return 0x55ffff; case COLOR_WHITE: return 0xffffff; default: return -1; } } else { switch (c) { case COLOR_BLACK: return 0x000000; case COLOR_RED: return 0xaa0000; case COLOR_GREEN: return 0x00aa00; case COLOR_YELLOW: return 0xaa5500; case COLOR_BLUE: return 0x0000aa; case COLOR_MAGENTA: return 0xaa00aa; case COLOR_CYAN: return 0x00aaaa; case COLOR_WHITE: return 0xaaaaaa; default: return -1; } } /* fallback */ return -1; } #endif /* * This is taken from tmux */ static int colour_dist_sq(int R, int G, int B, int r, int g, int b) { return ((R - r) * (R - r) + (G - g) * (G - g) + (B - b) * (B - b)); } static int colour_to_6cube(int v) { if (v < 48) return (0); if (v < 114) return (1); return ((v - 35) / 40); } /* * Convert an RGB triplet to the xterm(1) 256 colour palette. * * xterm provides a 6x6x6 colour cube (16 - 231) and 24 greys (232 - 255). We * map our RGB colour to the closest in the cube, also work out the closest * grey, and use the nearest of the two. * * Note that the xterm has much lower resolution for darker colours (they are * not evenly spread out), so our 6 levels are not evenly spread: 0x0, 0x5f * (95), 0x87 (135), 0xaf (175), 0xd7 (215) and 0xff (255). Greys are more * evenly spread (8, 18, 28 ... 238). */ static int colour_find_rgb(unsigned int rgb) { static const int q2c[6] = { 0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff }; unsigned char r, g, b; int qr, qg, qb, cr, cg, cb, d, idx; int grey_avg, grey_idx, grey; /* try to find most near color in 256 color palete */ r = ((rgb >> 16) & 0xff); g = ((rgb >> 8) & 0xff); b = ((rgb) & 0xff); /* Map RGB to 6x6x6 cube. */ qr = colour_to_6cube(r); cr = q2c[qr]; qg = colour_to_6cube(g); cg = q2c[qg]; qb = colour_to_6cube(b); cb = q2c[qb]; /* If we have hit the colour exactly, return early. */ if (cr == r && cg == g && cb == b) return 16 + (36 * qr) + (6 * qg) + qb; /* Work out the closest grey (average of RGB). */ grey_avg = (r + g + b) / 3; if (grey_avg > 238) grey_idx = 23; else grey_idx = (grey_avg - 3) / 10; grey = 8 + (10 * grey_idx); /* Is grey or 6x6x6 colour closest? */ d = colour_dist_sq(cr, cg, cb, r, g, b); if (colour_dist_sq(grey, grey, grey, r, g, b) < d) idx = 232 + grey_idx; else idx = 16 + (36 * qr) + (6 * qg) + qb; return idx; } static void set_rgb_color_pair(int *cp, attr_t *attr, int fg, int bg, const char *csrc, attr_t _attr) { unsigned int fgcolor, bgcolor; if (direct_color) { #ifdef NCURSES_EXT_COLORS fgcolor = csrc[0] == 'b' ? get_rgb(fg, false) : rgb_color_cache[fg]; bgcolor = csrc[1] == 'b' ? get_rgb(bg, false) : rgb_color_cache[bg]; init_extended_pair(current_cpn, fgcolor, bgcolor); #else /* fallback */ init_pair(current_cpn, -1, -1); #endif } else { if (can_change_color()) { /* "b" like basic, "c" custom */ fgcolor = csrc[0] == 'b' ? fg : custom_color_start + fg; bgcolor = csrc[1] == 'b' ? bg : custom_color_start + bg; } else { fgcolor = csrc[0] == 'b' ? fg : colour_find_rgb(rgb_color_cache[fg]); bgcolor = csrc[1] == 'b' ? bg : colour_find_rgb(rgb_color_cache[bg]); } init_pair(current_cpn, fgcolor, bgcolor); } *cp = current_cpn++; *attr = _attr; } static void set_color_pair(int *cp, attr_t *attr, short fg, short bg, bool light) { if (direct_color) { #ifdef NCURSES_EXT_COLORS int fgcolor, bgcolor; fgcolor = get_rgb(fg, light); bgcolor = get_rgb(bg, false); init_extended_pair(current_cpn, fgcolor, bgcolor); #else /* fallback */ init_pair(current_cpn, -1, -1); #endif *attr = 0; } else { if (light) *attr = slc(current_cpn, fg, bg); else { init_pair(current_cpn, fg, bg); *attr = 0; } } *cp = current_cpn++; } #define islc(f,b) (slc(start_from_cpn++, f, b)) void st_menu_set_direct_color(bool _direct_color) { direct_color = _direct_color; } /* * Prepared styles - config settings. start_from_cpn is first color pair * number that can be used by st_menu library. For ST_MENU_STYLE_ONECOLOR * style it is number of already existing color pair. */ int st_menu_load_style(ST_MENU_CONFIG *config, int style, int start_from_cpn, bool force8bit, bool force_ascii_art) { return st_menu_load_style_rgb(config, style, start_from_cpn, NULL, force8bit, force_ascii_art); } int st_menu_load_style_rgb(ST_MENU_CONFIG *config, int style, int start_from_cpn, int *start_from_rgb, bool force8bit, bool force_ascii_art) { memset(config, 0, sizeof(ST_MENU_CONFIG)); config->submenu_tag = '>'; config->mark_tag = '*'; config->switch_tag_n1 = '?'; config->switch_tag_0 = '-'; config->switch_tag_1 = 'x'; config->scroll_up_tag = '^'; config->scroll_down_tag = 'v'; config->draw_box = true; config->extern_accel_text_space = 2; config->force8bit = force8bit; config->force_ascii_art = force_ascii_art; config->submenu_offset_y = 0; config->submenu_offset_x = 0; current_cpn = start_from_cpn; #if defined HAVE_NCURSESW if (!config->force8bit && !config->force_ascii_art) { config->mark_tag = L'\x2714'; /* config->switch_tag_n1 = L'\x2680'; config->switch_tag_0 = L'\x2610'; config->switch_tag_1 = L'\x2611'; */ config->switch_tag_n1 = '.'; config->switch_tag_0 = ' '; config->switch_tag_1 = L'\x2714'; config->scroll_up_tag = L'\x25b2'; config->scroll_down_tag = L'\x25bc'; } #endif config->funckey_bar_style = false; switch (style) { case ST_MENU_STYLE_MCB: set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_BLACK, COLOR_WHITE, false); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_BLACK, COLOR_WHITE, false); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_WHITE, COLOR_BLACK, false); set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_WHITE, COLOR_BLACK, true); set_color_pair(&config->cursor_cpn, &config->cursor_attr, -1, -1, false); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_WHITE, COLOR_BLACK, true); config->disabled_cpn = config->menu_background_cpn; config->disabled_attr = A_BOLD; config->left_alligned_shortcuts = true; config->wide_vborders = false; config->wide_hborders = false; config->shortcut_space = 5; config->text_space = 5; config->init_text_space = 2; config->menu_bar_menu_offset = 0; config->shadow_width = 0; config->funckey_bar_style = true; break; case ST_MENU_STYLE_MC: set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_WHITE, COLOR_CYAN, true); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_BLACK, COLOR_CYAN, false); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_WHITE, COLOR_BLACK, false); set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_YELLOW, COLOR_CYAN, true); set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_WHITE, COLOR_BLACK, true); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_YELLOW, COLOR_BLACK, true); set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_BLACK, COLOR_CYAN, true); config->left_alligned_shortcuts = true; config->wide_vborders = false; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 5; config->text_space = 5; config->init_text_space = 2; config->menu_bar_menu_offset = 0; config->shadow_width = 2; config->funckey_bar_style = true; break; case ST_MENU_STYLE_VISION: set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_BLACK, COLOR_WHITE, false); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_BLACK, COLOR_WHITE, false); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_WHITE, COLOR_BLACK, false); set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_RED, COLOR_WHITE, false); set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_BLACK, COLOR_GREEN, false); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_RED, COLOR_GREEN, false); set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_BLACK, COLOR_WHITE, true); config->left_alligned_shortcuts = false; config->wide_vborders = true; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 4; config->text_space = 2; config->init_text_space = 2; config->menu_bar_menu_offset = 1; config->shadow_width = 2; if (!config->force8bit) config->submenu_tag = L'\x25BA'; config->submenu_offset_y = 0; config->submenu_offset_x = -15; break; case ST_MENU_STYLE_DOS: set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_BLACK, COLOR_WHITE, false); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_BLACK, COLOR_WHITE, false); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_WHITE, COLOR_BLACK, false); set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_WHITE, COLOR_WHITE, true); set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_WHITE, COLOR_BLACK, false); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_WHITE, COLOR_BLACK, true); set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_BLACK, COLOR_WHITE, true); config->left_alligned_shortcuts = false; config->wide_vborders = false; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 4; config->text_space = 2; config->init_text_space = 1; config->menu_bar_menu_offset = 1; config->shadow_width = 2; break; case ST_MENU_STYLE_FAND_1: set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_BLACK, COLOR_CYAN, false); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_BLACK, COLOR_CYAN, false); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_WHITE, COLOR_BLACK, false); set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_RED, COLOR_CYAN, false); set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_YELLOW, COLOR_BLUE, true); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_YELLOW, COLOR_BLUE, true); set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_BLACK, COLOR_CYAN, true); config->left_alligned_shortcuts = false; config->wide_vborders = false; config->wide_hborders = false; config->extra_inner_space = true; config->shortcut_space = 4; config->text_space = -1; config->init_text_space = 1; config->menu_bar_menu_offset = 2; config->shadow_width = 2; if (!config->force8bit) config->submenu_tag = L'\x00BB'; break; case ST_MENU_STYLE_FAND_2: set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_BLACK, COLOR_CYAN, false); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_BLACK, COLOR_CYAN, false); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_WHITE, COLOR_BLACK, false); set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_CYAN, COLOR_CYAN, true); set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_YELLOW, COLOR_BLUE, true); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_YELLOW, COLOR_BLUE, true); set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_BLACK, COLOR_CYAN, true); config->left_alligned_shortcuts = false; config->wide_vborders = false; config->wide_hborders = false; config->extra_inner_space = true; config->shortcut_space = 4; config->text_space = -1; config->init_text_space = 1; config->menu_bar_menu_offset = 2; config->shadow_width = 2; if (!config->force8bit) config->submenu_tag = L'\x00BB'; break; case ST_MENU_STYLE_FOXPRO: set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_BLACK, COLOR_WHITE, false); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_BLACK, COLOR_WHITE, false); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_WHITE, COLOR_BLACK, false); set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_WHITE, COLOR_WHITE, true); set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_BLACK, COLOR_CYAN, false); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_WHITE, COLOR_CYAN, true); /* This is different, from original, but cyan text is not readable */ set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_CYAN, COLOR_WHITE, true); config->disabled_attr |= A_DIM; config->left_alligned_shortcuts = false; config->wide_vborders = false; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 4; config->text_space = 2; config->init_text_space = 1; config->menu_bar_menu_offset = 1; config->shadow_width = 2; break; case ST_MENU_STYLE_PERFECT: set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_BLACK, COLOR_WHITE, false); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_BLACK, COLOR_WHITE, false); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_WHITE, COLOR_BLACK, false); set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_RED, COLOR_WHITE, false); set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_WHITE, COLOR_RED, true); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_WHITE, COLOR_RED, true); set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_BLACK, COLOR_WHITE, true); config->left_alligned_shortcuts = false; config->wide_vborders = false; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 4; config->text_space = 2; config->init_text_space = 1; config->menu_bar_menu_offset = 1; config->shadow_width = 2; if (!config->force8bit) config->submenu_tag = L'\x2BC8'; break; case ST_MENU_STYLE_NOCOLOR: config->menu_background_cpn = 0; config->menu_background_attr = 0; config->menu_unfocused_cpn = 0; config->menu_unfocused_attr = 0; config->menu_shadow_cpn = current_cpn; config->menu_shadow_attr = A_REVERSE; config->accelerator_cpn = 0; config->accelerator_attr = A_UNDERLINE; config->cursor_cpn = 0; config->cursor_attr = A_REVERSE; config->cursor_accel_cpn = 0; config->cursor_accel_attr = A_UNDERLINE | A_REVERSE; config->disabled_cpn = 0; config->disabled_attr = A_DIM; config->left_alligned_shortcuts = false; config->wide_vborders = false; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 4; config->text_space = 2; config->init_text_space = 1; config->menu_bar_menu_offset = 1; config->shadow_width = 0; break; case ST_MENU_STYLE_ONECOLOR: config->menu_background_cpn = current_cpn; config->menu_background_attr = 0; config->menu_unfocused_cpn = current_cpn; config->menu_unfocused_attr = 0; config->menu_shadow_cpn = current_cpn; config->menu_shadow_attr = A_REVERSE; config->accelerator_cpn = current_cpn; config->accelerator_attr = A_UNDERLINE; config->cursor_cpn = current_cpn; config->cursor_attr = A_REVERSE; config->cursor_accel_cpn = current_cpn; config->cursor_accel_attr = A_UNDERLINE | A_REVERSE; config->disabled_cpn = current_cpn; config->disabled_attr = A_DIM; config->left_alligned_shortcuts = false; config->wide_vborders = false; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 4; config->text_space = 2; config->init_text_space = 1; config->menu_bar_menu_offset = 1; config->shadow_width = 0; break; case ST_MENU_STYLE_TURBO: set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_BLACK, COLOR_WHITE, false); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_BLACK, COLOR_WHITE, false); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_WHITE, COLOR_BLACK, false); set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_RED, COLOR_WHITE, false); set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_WHITE, COLOR_BLACK, true); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_WHITE, COLOR_BLACK, true); set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_BLACK, COLOR_WHITE, true); config->left_alligned_shortcuts = false; config->wide_vborders = false; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 4; config->text_space = 2; config->init_text_space = 1; config->menu_bar_menu_offset = 1; config->shadow_width = 2; break; case ST_MENU_STYLE_PDMENU: set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_BLACK, COLOR_CYAN, false); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_BLACK, COLOR_CYAN, false); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_WHITE, COLOR_BLACK, false); set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_WHITE, COLOR_CYAN, true); set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_CYAN, COLOR_BLACK, false); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_WHITE, COLOR_BLACK, true); set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_BLACK, COLOR_CYAN, true); config->left_alligned_shortcuts = false; config->wide_vborders = false; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 4; config->text_space = 2; config->init_text_space = 1; config->menu_bar_menu_offset = 1; config->shadow_width = 2; break; case ST_MENU_STYLE_OLD_TURBO: set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_YELLOW, COLOR_BLUE, true); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_YELLOW, COLOR_BLUE, true); set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_CYAN, COLOR_BLUE, true); set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_YELLOW, COLOR_MAGENTA, true); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_YELLOW, COLOR_MAGENTA, true); set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_WHITE, COLOR_BLUE, true); config->disabled_attr |= A_DIM; config->left_alligned_shortcuts = true; config->wide_vborders = false; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 4; config->text_space = 2; config->init_text_space = 1; config->menu_bar_menu_offset = 1; config->shadow_width = 0; break; case ST_MENU_STYLE_FREE_DOS: set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_BLACK, COLOR_WHITE, false); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_BLACK, COLOR_WHITE, false); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_WHITE, COLOR_BLACK, false); set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_RED, COLOR_WHITE, false); set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_BLACK, COLOR_CYAN, false); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_RED, COLOR_CYAN, false); /* This is different, from original, but cyan text is not readable */ set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_BLACK, COLOR_WHITE, true); config->left_alligned_shortcuts = false; config->wide_vborders = false; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 4; config->text_space = 2; config->init_text_space = 2; config->menu_bar_menu_offset = 0; config->shadow_width = 1; break; case ST_MENU_STYLE_FREE_DOS_P: set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_BLACK, COLOR_CYAN, false); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_BLACK, COLOR_CYAN, false); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_WHITE, COLOR_BLACK, false); set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_RED, COLOR_CYAN, false); set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_BLACK, COLOR_WHITE, false); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_RED, COLOR_WHITE, false); /* This is different, from original, but cyan text is not readable */ set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_BLACK, COLOR_CYAN, true); config->left_alligned_shortcuts = false; config->wide_vborders = false; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 4; config->text_space = 2; config->init_text_space = 1; config->menu_bar_menu_offset = 1; config->shadow_width = 1; break; case ST_MENU_STYLE_MC46: set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_BLACK, COLOR_CYAN, false); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_BLACK, COLOR_CYAN, false); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_WHITE, COLOR_BLACK, false); set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_YELLOW, COLOR_CYAN, true); set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_WHITE, COLOR_BLACK, true); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_YELLOW, COLOR_BLACK, true); set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_BLACK, COLOR_CYAN, true); config->left_alligned_shortcuts = true; config->wide_vborders = false; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 5; config->text_space = 5; config->init_text_space = 2; config->menu_bar_menu_offset = 0; config->shadow_width = 0; config->funckey_bar_style = true; break; case ST_MENU_STYLE_DBASE: set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_WHITE, COLOR_BLACK, true); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_WHITE, COLOR_BLACK, true); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_WHITE, COLOR_BLACK, false); set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_WHITE, COLOR_BLACK, true); config->accelerator_attr |= A_UNDERLINE; set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_YELLOW, COLOR_CYAN, true); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_YELLOW, COLOR_CYAN, true); config->cursor_accel_attr |= A_UNDERLINE; set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_WHITE, COLOR_BLACK, true); config->disabled_attr |= A_DIM; config->left_alligned_shortcuts = true; config->wide_vborders = false; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 5; config->text_space = 5; config->init_text_space = 2; config->menu_bar_menu_offset = 1; config->shadow_width = 2; break; case ST_MENU_STYLE_MENUWORKS: set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_WHITE, COLOR_RED, true); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_WHITE, COLOR_BLACK, true); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_BLUE, COLOR_BLACK, false); set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_YELLOW, COLOR_RED, true); config->accelerator_attr |= A_UNDERLINE; set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_YELLOW, COLOR_BLACK, true); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_YELLOW, COLOR_BLACK, true); config->cursor_accel_attr |= A_UNDERLINE; set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_WHITE, COLOR_RED, true); config->disabled_attr |= A_DIM; config->left_alligned_shortcuts = true; config->wide_vborders = false; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 5; config->text_space = 5; config->init_text_space = 2; config->menu_bar_menu_offset = 1; config->shadow_width = 2; break; case ST_MENU_STYLE_TAO: if (start_from_rgb) { custom_color_start = *start_from_rgb; *start_from_rgb += 5; init_color_rgb_ff(0, 0xfa, 0xfa, 0xfa); /* menu bg */ init_color_rgb_ff(1, 0x17, 0x17, 0x17); /* menu fg */ init_color_rgb_ff(2, 0x4e, 0x4e, 0x4e); /* cursor bg */ init_color_rgb_ff(3, 0xaa, 0xaa, 0xaa); /* shadow */ init_color_rgb_ff(4, 0x66, 0x66, 0x66); /* shadow */ set_rgb_color_pair(&config->menu_background_cpn, &config->menu_background_attr, 1, 0, "cc", 0); set_rgb_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, 1, 0, "cc", 0); set_rgb_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, 4, 3, "cc", 0); set_rgb_color_pair(&config->accelerator_cpn, &config->accelerator_attr, 1, 0, "cc", A_UNDERLINE | A_BOLD); set_rgb_color_pair(&config->cursor_cpn, &config->cursor_attr, 0, 2, "cc", 0); set_rgb_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, 0, 2, "cc", A_UNDERLINE); set_rgb_color_pair(&config->disabled_cpn, &config->disabled_attr, 4, 0, "cc", 0); } else { /* fallback */ set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_BLACK, COLOR_WHITE, true); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_BLACK, COLOR_WHITE, true); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_BLUE, COLOR_BLACK, false); set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_BLACK, COLOR_WHITE, true); config->accelerator_attr |= A_UNDERLINE; set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_WHITE, COLOR_BLACK, true); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_WHITE, COLOR_BLACK, true); config->cursor_accel_attr |= A_UNDERLINE; set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_BLACK, COLOR_WHITE, true); config->disabled_attr |= A_DIM; } config->left_alligned_shortcuts = true; config->wide_vborders = true; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 5; config->text_space = 5; config->init_text_space = 2; config->menu_bar_menu_offset = 1; config->shadow_width = 2; break; case ST_MENU_STYLE_XGOLD: set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_BLUE, COLOR_CYAN, false); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_BLUE, COLOR_CYAN, false); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_CYAN, COLOR_BLUE, false); config->menu_shadow_attr |= A_DIM | A_REVERSE; set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_YELLOW, COLOR_CYAN, true); set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_WHITE, COLOR_BLUE, true); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_WHITE, COLOR_BLUE, true); set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_BLACK, COLOR_CYAN, true); config->left_alligned_shortcuts = false; config->wide_vborders = false; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 4; config->text_space = 2; config->init_text_space = 2; config->menu_bar_menu_offset = 0; config->shadow_width = 2; config->submenu_offset_y = 0; config->submenu_offset_x = 0; break; case ST_MENU_STYLE_XGOLD_BLACK: set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_BLACK, COLOR_CYAN, false); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_BLACK, COLOR_CYAN, false); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_CYAN, COLOR_BLUE, false); config->menu_shadow_attr |= A_DIM | A_REVERSE; set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_YELLOW, COLOR_CYAN, true); set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_WHITE, COLOR_BLUE, true); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_WHITE, COLOR_BLUE, true); set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_BLACK, COLOR_CYAN, true); config->left_alligned_shortcuts = false; config->wide_vborders = false; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 4; config->text_space = 2; config->init_text_space = 2; config->menu_bar_menu_offset = 0; config->shadow_width = 2; config->submenu_offset_y = 0; config->submenu_offset_x = 0; break; case ST_MENU_STYLE_FLATWHITE: if (start_from_rgb) { custom_color_start = *start_from_rgb; *start_from_rgb += 7; init_color_rgb_ff(0, 0xb9, 0xA9, 0x92); /* menu bg */ init_color_rgb_ff(1, 0x17, 0x17, 0x17); /* menu fg */ init_color_rgb_ff(2, 0x6a, 0x4d, 0xff); /* cursor bg */ init_color_rgb_ff(5, 0xff, 0xff, 0xff); /* cursor fg */ init_color_rgb_ff(3, 0x84, 0x7e, 0x76); /* shadow */ init_color_rgb_ff(4, 0x66, 0x66, 0x66); /* disabled */ init_color_rgb_ff(6, 0x00, 0x00, 0x00); /* accel */ set_rgb_color_pair(&config->menu_background_cpn, &config->menu_background_attr, 1, 0, "cc", 0); set_rgb_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, 1, 0, "cc", 0); set_rgb_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_WHITE, 3, "bc", 0); set_rgb_color_pair(&config->accelerator_cpn, &config->accelerator_attr, 6, 0, "cc", A_UNDERLINE); set_rgb_color_pair(&config->cursor_cpn, &config->cursor_attr, 5, 2, "cc", 0); set_rgb_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, 5, 2, "cc", A_UNDERLINE); set_rgb_color_pair(&config->disabled_cpn, &config->disabled_attr, 4, 0, "cc", 0); } else { /* fallback */ set_color_pair(&config->menu_background_cpn, &config->menu_background_attr, COLOR_BLACK, COLOR_WHITE, true); set_color_pair(&config->menu_unfocused_cpn, &config->menu_unfocused_attr, COLOR_BLACK, COLOR_WHITE, true); set_color_pair(&config->menu_shadow_cpn, &config->menu_shadow_attr, COLOR_BLUE, COLOR_BLACK, false); set_color_pair(&config->accelerator_cpn, &config->accelerator_attr, COLOR_BLACK, COLOR_WHITE, true); config->accelerator_attr |= A_UNDERLINE; set_color_pair(&config->cursor_cpn, &config->cursor_attr, COLOR_WHITE, COLOR_BLACK, true); set_color_pair(&config->cursor_accel_cpn, &config->cursor_accel_attr, COLOR_WHITE, COLOR_BLACK, true); config->cursor_accel_attr |= A_UNDERLINE; set_color_pair(&config->disabled_cpn, &config->disabled_attr, COLOR_BLACK, COLOR_WHITE, true); config->disabled_attr |= A_DIM; } config->left_alligned_shortcuts = true; config->wide_vborders = true; config->wide_hborders = false; config->extra_inner_space = false; config->shortcut_space = 5; config->text_space = 5; config->init_text_space = 2; config->menu_bar_menu_offset = 1; config->shadow_width = 2; break; } return current_cpn; } pspg-5.8.1/src/st_panel.h000066400000000000000000000003421452457446400152610ustar00rootroot00000000000000#if defined HAVE_NCURSESW_PANEL_H #include #elif defined HAVE_NCURSES_PANEL_H #include #elif defined HAVE_PANEL_H #include #else /* fallback */ #include #endif pspg-5.8.1/src/string.c000066400000000000000000000064651452457446400147710ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * string.c * a routines for case insensitive string operations * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/string.c * *------------------------------------------------------------------------- */ #include #include "pspg.h" /* * Case insensitive string comparation. */ bool nstreq(const char *str1, const char *str2) { while (*str1 != '\0') { if (*str2 == '\0') return false; if (toupper(*str1++) != toupper(*str2++)) return false; } return *str2 == '\0'; } /* * special case insensitive searching routines */ const char * nstrstr(const char *haystack, const char *needle) { const char *haystack_cur, *needle_cur, *needle_prev; int f1 = 0; needle_cur = needle; needle_prev = NULL; haystack_cur = haystack; while (*needle_cur != '\0') { int f2; if (*haystack_cur == '\0') return NULL; if (needle_prev != needle_cur) { needle_prev = needle_cur; f1 = toupper(*needle_cur); } f2 = toupper(*haystack_cur); if (f1 == f2) { needle_cur += 1; haystack_cur += 1; } else { needle_cur = needle; haystack_cur = haystack += 1; } } return haystack; } const char * nstrstr_with_sizes(const char *haystack, const int haystack_size, const char *needle, int needle_size) { const char *haystack_cur, *needle_cur, *needle_prev; const char *haystack_end, *needle_end; int f1 = 0; needle_cur = needle; needle_prev = NULL; haystack_cur = haystack; haystack_end = haystack + haystack_size; needle_end = needle + needle_size; while (needle_cur < needle_end) { int f2 = 0; if (haystack_cur == haystack_end) return NULL; if (needle_prev != needle_cur) { needle_prev = needle_cur; f1 = toupper(*needle_cur); } f2 = toupper(*haystack_cur); if (f1 == f2) { needle_cur += 1; haystack_cur += 1; } else { needle_cur = needle; haystack_cur = haystack += 1; } } return haystack; } /* * Returns true, when string str starts with pattern */ bool nstarts_with_with_sizes(const char *str, int str_size, const char *pattern, int pattern_size) { if (pattern_size > str_size) return false; while (pattern_size > 0) { if (toupper(*str++) != toupper(*pattern++)) return false; pattern_size -= 1; } return true; } /* * Special string searching, lower chars are case insensitive, * upper chars are case sensitive. */ const char * nstrstr_ignore_lower_case(const char *haystack, const char *needle) { const char *haystack_cur, *needle_cur, *needle_prev; int f1 = 0; bool needle_char_is_upper = false; /* be compiler quiet */ needle_cur = needle; needle_prev = NULL; haystack_cur = haystack; while (*needle_cur != '\0') { bool eq; if (*haystack_cur == '\0') return NULL; if (needle_prev != needle_cur) { needle_prev = needle_cur; needle_char_is_upper = isupper(*needle_cur); f1 = toupper(*needle_cur); } if (needle_char_is_upper) { /* case sensitive */ eq = *haystack_cur == *needle_cur; } else { /* case insensitive */ eq = f1 == toupper(*haystack_cur); } if (eq) { needle_cur += 1; haystack_cur += 1; } else { needle_cur = needle; haystack_cur = haystack += 1; } } return haystack; } pspg-5.8.1/src/table.c000066400000000000000000001265331452457446400145510ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * table.c * a routines for parsing file with data in tabular form * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/table.c * *------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include "inputs.h" #include "pspg.h" #include "unicode.h" #ifdef DEBUG_PIPE #include #include static void print_duration(time_t start_sec, long start_ms, const char *label) { time_t end_sec; long end_ms; current_time(&end_sec, &end_ms); fprintf(debug_pipe, "duration of \"%s\" is %ld ms\n", label, time_diff(end_sec, end_ms, start_sec, start_ms)); } #endif /* * Returns true when char is left upper corner */ static bool isTopLeftChar(const char *str) { if (str[0] == '+') return true; /* * \342\224\214 ┌ * \342\224\217 ┏ * \342\225\224 ╔ * \342\225\255 ╭ */ if (str[0] == '\342') { if (str[1] == '\224') { if (str[2] == '\214' || str[2] == '\217') return true; } else if (str[1] == '\225') { if (str[2] == '\224' || str[2] == '\255') return true; } } return false; } /* * Returns true when char is top left header char */ static bool isHeadLeftChar(char *str, bool *is_unicode) { const char *u1 = "\342\224\200"; const char *u2 = "\342\225\220"; const char *u3 = "\342\225\236"; /* ╞ */ const char *u4 = "\342\224\234"; /* ├ */ const char *u5 = "\342\224\243"; /* ┣ */ const char *u6 = "\342\225\240"; /* ╠ */ const char *u7 = "\342\225\237"; /* ╟ */ const char *u8 = "\342\224\214"; /* ┌ */ const char *u9 = "\342\225\224"; /* ╔ */ *is_unicode = false; /* ascii */ if ((str[0] == '+' || str[0] == '-') && str[1] == '-') return true; /* pgcli fmt */ if (str[0] == '|' && str[1] == '-') return true; /* expanded border 1 */ if (str[0] == '-' && str[1] == '[') return true; /* csv double header */ if ((str[0] == ':' || str[0] == '=') && str[1] == '=') return true; /* monetdb */ if (str[0] == '+' && str[1] == '=') return true; /* Oracle's SQLcli (ANSI CONSOLE) */ if (str[0] == '_') return true; if (str[0] != '\342') return false; *is_unicode = true; if (strncmp(str, u1, 3) == 0) return true; if (strncmp(str, u2, 3) == 0) return true; if (strncmp(str, u3, 3) == 0) return true; if (strncmp(str, u4, 3) == 0) return true; if (strncmp(str, u5, 3) == 0) return true; if (strncmp(str, u6, 3) == 0) return true; if (strncmp(str, u7, 3) == 0) return true; if (strncmp(str, u8, 3) == 0) return true; if (strncmp(str, u9, 3) == 0) return true; return false; } /* * Returns true when char is bottom left corner */ static bool isBottomLeftChar(const char *str) { if (str[0] == '+') return true; /* * \342\224\224 └ * \342\224\227 ┗ * \342\225\232 ╚ * \342\225\260 ╰ */ if (str[0] == '\342') { if (str[1] == '\224') { if (str[2] == '\224' || str[2] == '\227') return true; } else if (str[1] == '\225') { if (str[2] == '\232' || str[2] == '\260') return true; } } return false; } /* * detect different faces of headline in extended mode */ bool is_expanded_header(char *str, int *ei_minx, int *ei_maxx) { int pos = 0; if (*str == '+') { str += 1; pos += 1; } else if (strncmp(str, "\342\224\214", 3) == 0 || /* ┌ */ strncmp(str, "\342\225\224", 3) == 0 || /* ╔ */ strncmp(str, "\342\224\234", 3) == 0 || /* ├╟ */ strncmp(str, "\342\225\237", 3) == 0 || strncmp(str, "\342\225\236", 3) == 0 || /* ╞╠ */ strncmp(str, "\342\225\240", 3) == 0) { str += 3; pos += 1; } if (*str == '-') { str += 1; pos += 1; } else if (strncmp(str, "\342\224\200", 3) == 0 || /* ─ */ strncmp(str, "\342\225\220", 3) == 0) /* ═ */ { str += 3; pos += 1; } if (strncmp(str, "[ ", 2) != 0) return false; pos += 2; str += 2; if (ei_minx) *ei_minx = pos - 1; while (*str != ']' && *str != '\0') { pos += 1; str += charlen(str); } if (strncmp(str - 1, " ]", 2) != 0) return false; if (ei_maxx) *ei_maxx = pos - 1; return true; } /* * Returns true when char (multibyte char) correspond with symbols for * line continuation. */ static bool is_line_continuation_char(char *str, DataDesc *desc) { if (desc->linestyle == 'a') { return str[0] == '+' || str[0] == '.'; } else { const char *u1 = "\342\206\265"; /* ↵ */ const char *u2 = "\342\200\246"; /* … */ /* desc->linestyle == 'u'; */ return strncmp(str, u1, 3) == 0 || strncmp(str, u2, 3) == 0; } } static bool is_cmdtag(char *str) { if (!str) return false; if (*str == '?' && strcmp(str, "???") == 0) { return true; } else if (*str == 'A') { if (strncmp(str, "ALTER ", 6) == 0 || strcmp(str, "ANALYZE") == 0) return true; } else if (*str == 'B' && strcmp(str, "BEGIN") == 0) { return true; } else if (*str == 'C') { if (strncmp(str, "CREATE TABLE", 7) == 0) { /* * MonetDB client show table definition in DDL format. Unfortunately * it is on first line, so there is partial matching with status * line format. But Postgres status line is exactly "CREATE TABLE" * string. It is not hard to different these two situation. */ return str[7] == '\0'; } if (strcmp(str, "CALL") == 0 || strcmp(str, "CHECKPOINT") == 0 || strncmp(str, "CLOSE", 5) == 0 || strcmp(str, "CLUSTER") == 0 || strcmp(str, "COMMENT") == 0 || strncmp(str, "COMMIT", 6) == 0 || strncmp(str, "COPY ", 5) == 0 || strncmp(str, "CREATE ", 7) == 0) return true; } else if (*str == 'D') { if (strncmp(str, "DEALLOCATE", 10) == 0 || strncmp(str, "DECLARE ", 8) == 0 || strncmp(str, "DELETE ", 7) == 0 || strncmp(str, "DISCARD", 7) == 0 || strcmp(str, "DO") == 0 || strncmp(str, "DROP ", 5) == 0) return true; } else if (*str == 'E') { if (strcmp(str, "EXECUTE") == 0 || strcmp(str, "EXPLAIN") == 0) return true; } else if (*str == 'F' && strncmp(str, "FETCH ", 6) == 0) { return true; } else if (*str == 'G' && strncmp(str, "GRANT", 5) == 0) { return true; } else if (*str == 'I') { if (strncmp(str, "IMPORT ", 7) == 0 || strncmp(str, "INSERT ", 7) == 0) return true; } else if (*str == 'L') { if (strcmp(str, "LISTEN") == 0 || strcmp(str, "LOAD") == 0 || strcmp(str, "LOCK TABLE") == 0) return true; } else if (*str == 'M' && strncmp(str, "MOVE ", 5) == 0) { return true; } else if (*str == 'N' && strcmp(str, "NOTIFY") == 0) { return true; } else if (*str == 'P' && strncmp(str, "PREPARE", 7) == 0) { return true; } else if (*str == 'R') { if (strcmp(str, "REASSIGN OWNED") == 0 || strcmp(str, "REFRESH MATERIALIZED VIEW") == 0 || strcmp(str, "REINDEX") == 0 || strcmp(str, "RELEASE") == 0 || strcmp(str, "RESET") == 0 || strncmp(str, "REVOKE", 6) == 0 || strncmp(str, "ROLLBACK", 8) == 0) return true; } else if (*str == 'S') { if (strcmp(str, "SAVEPOINT") == 0 || strcmp(str, "SECURITY LABEL") == 0 || strncmp(str, "SELECT ", 7) == 0 || strncmp(str, "SET", 3) == 0 || strcmp(str, "SHOW") == 0 || strcmp(str, "START TRANSACTION") == 0) return true; } else if (*str == 'T' && strcmp(str, "TRUNCATE TABLE") == 0) { return true; } else if (*str == 'U') { if (strcmp(str, "UNLISTEN") == 0 || strncmp(str, "UPDATE ", 7) == 0) return true; } else if (*str == 'V' && strcmp(str, "VACUUM") == 0) { return true; } return false; } #define STATBUF_SIZE (10 * 1024) static size_t _getline(char **lineptr, size_t *n, FILE *fp, bool is_nonblocking, bool wait_on_data) { int _errno; ssize_t result; if (!is_nonblocking) { result = getline(lineptr, n, fp); _errno = errno; if (result < 0) { free(*lineptr); *lineptr = NULL; errno = _errno; } return result; } if (!feof(fp) && !ferror(fp)) { char *dynbuf = NULL; char statbuf[STATBUF_SIZE]; int fetched_chars = 0; int rc; for (;;) { char *str; int len = 0; errno = 0; str = fgets(statbuf, STATBUF_SIZE, fp); _errno = errno; if (str) { bool endline; len = strlen(str); endline = str[len - 1] == '\n'; if (dynbuf) { char *_dynbuf; _dynbuf = realloc(dynbuf, fetched_chars + len + 1); if (!_dynbuf) { free(_dynbuf); return -1; } else dynbuf = _dynbuf; memcpy(dynbuf + fetched_chars, statbuf, len + 1); fetched_chars += len; } if (endline) { endline_exit: if (dynbuf) { *lineptr = dynbuf; *n = fetched_chars + 1; return fetched_chars; } else { *lineptr = sstrdup(statbuf); *n = *lineptr ? len + 1 : 0; return *lineptr ? len : -1; } } if (!dynbuf) { dynbuf = sstrdup(statbuf); if (!dynbuf) return -1; fetched_chars += len; } errno = _errno; } if (errno || feof(fp)) { if (errno == EAGAIN) { struct pollfd fds[1]; if (fetched_chars == 0 && !wait_on_data) return -1; fds[0].fd = fileno(fp); fds[0].events = POLLIN; rc = poll(fds, 1, -1); if (rc == -1) { log_row("poll error (%s)", strerror(errno)); if (handle_sigint) { free(dynbuf); handle_sigint = false; return -1; } usleep(1000); } if (fds[0].revents & POLLHUP) { free(dynbuf); return -1; } clearerr(fp); continue; } else if (feof(fp)) { goto endline_exit; } else { free(dynbuf); return -1; } } } } return -1; } /* * Copy trimmed string */ static void strncpytrim(char *dest, const char *src, size_t ndest, size_t nsrc) { const char *endptr; endptr = src + nsrc - 1; /* skip trailing spaces */ while (nsrc > 0 && *src == ' ') { nsrc--; src++; } /* skip ending spaces */ while (nsrc > 0 && *endptr == ' ') { nsrc--; endptr--; } while(nsrc > 0) { size_t clen; if (*src == '\0') break; clen = (size_t) charlen(src); if (clen <= ndest && clen <= nsrc) { size_t i; for (i = 0; i < clen; i++) { *dest++ = *src++; ndest--; nsrc--; } } else break; } *dest = '\0'; } /* * Remove ANSI escape sequences from input line */ static ssize_t remove_ansi_escape_seq(char *line, ssize_t bytes) { char *ptr = line; int not_processed = bytes; char *writeptr = ptr; if (bytes == 0) return 0; /* fast mode, escape detection */ while (not_processed > 0) { if (*ptr == '\x1b') break; not_processed -= 1; ptr += 1; } /* when there are not escape sequence, then returns original size */ if (not_processed == 0) return bytes; /* * there are ANSI escape sequences, and * we need to clean it. */ while (not_processed > 0) { if (*ptr != '\x1b') { *writeptr++ = *ptr++; not_processed -= 1; } else { if (not_processed > 2) { not_processed -= 2; ptr += 1; if (*ptr++ == '[') { while (not_processed-- > 0) { int c = *ptr++; if (c) { if (c >= '@' && c <= '~') break; } else /* broken ascii escape sequence or end of line? */ goto finish_deescape; } } } else break; } } finish_deescape: *writeptr++ = '\0'; return writeptr - line; } /* * Read data from file and fill DataDesc. */ bool readfile(Options *opts, DataDesc *desc, StateData *state) { char *line = NULL; size_t len; ssize_t read; int nrows = 0; int stop_after_nrows = 0; bool completed = true; bool initial_run; bool progressive_load_mode; LineBuffer *rows; int clen = -1; #ifdef DEBUG_PIPE time_t start_sec; long start_ms; fprintf(debug_pipe, "readfile start\n"); current_time(&start_sec, &start_ms); #endif progressive_load_mode = opts->progressive_load_mode; if (!desc->initialized) { log_row("DataDesc is initialized"); desc->title[0] = '\0'; desc->title_rows = 0; desc->border_top_row = -1; desc->border_head_row = -1; desc->border_bottom_row = -1; desc->first_data_row = -1; desc->last_data_row = -1; desc->fallback_last_data_row = false; desc->is_expanded_mode = false; desc->headline_transl = NULL; desc->cranges = NULL; desc->columns = 0; desc->footer_row = -1; desc->alt_footer_row = -1; desc->is_pgcli_fmt = false; desc->namesline = NULL; desc->order_map = NULL; desc->total_rows = 0; desc->load_data_rows = false; desc->maxbytes = -1; desc->maxx = -1; memset(&desc->rows, 0, sizeof(LineBuffer)); desc->rows.prev = NULL; desc->freeze_two_cols = false; desc->multilines_already_tested = false; desc->last_buffer = 0; /* safe reset */ desc->filename[0] = '\0'; /* progress load mode */ desc->initialized = true; desc->completed = false; } nrows = desc->total_rows; /* * DataDesc struct can be copied, and then has not * contain any self reference. So instead to set * last_buffer to &desc->rows, I use NULL as signal, * so no other line buffer was created (and used). */ rows = desc->last_buffer ? desc->last_buffer : &desc->rows; state->errstr = NULL; state->_errno = 0; if (opts->pathname != NULL) { char *name; name = basename(opts->pathname); strncpy(desc->filename, name, 64); desc->filename[64] = '\0'; } if (!f_data) return false; clearerr(f_data); if (progressive_load_mode) { if (nrows == 0) stop_after_nrows = max_int(2 * LINES, 500); else stop_after_nrows = nrows + 2000; } else { stop_after_nrows = -1; desc->completed = true; } if (nrows == 0) { /* detection truncating */ detect_file_truncation(); initial_run = true; } else initial_run = false; errno = 0; read = _getline(&line, &len, f_data, f_data_opts & STREAM_IS_IN_NONBLOCKING_MODE, false); if (read == -1) return false; do { bool is_unicode; if (line && read > 0 && line[read - 1] == '\n') { line[read - 1] = '\0'; read -= 1; } /* * In streaming mode go out when you find empty row. * * Attention: streaming mode can be used only for tabular data!!! * on nontabular data (plain text) we have not a possibility * to detect end of block. In theory we can wait sone time to * data, and after timeout we can alert end of block, but it * increase the time of data load (and complexity). * * So until we get more possibilities (some marks in stream), * it is better to hold stream mode as special case. I had an * idea to set stream mode as default, but it doesn't work with * non tabular data. * * Note: psql helps with it - it redirects only tabular data. * */ if (state->stream_mode && read == 0) { free(line); /* ignore this line if we are on second line - probably watch mode */ if (nrows == 1) goto next_row; break; } read = remove_ansi_escape_seq(line, read); /* In query stream node exit when you find row with only GS - Group Separator */ if (opts->querystream && read == 1) { if (*line == 0x1D) break; } /* * When Unicode border 2 is used, then we can save CPU cycles, * becase we can very well detect begin and end of table. Inside * the table we don't need to check display width. */ if (clen == -1 || !desc->load_data_rows) clen = use_utf8 ? utf_string_dsplen(line, read) : read; if (rows->nrows == LINEBUFFER_LINES) { LineBuffer *newrows = smalloc(sizeof(LineBuffer)); rows->next = newrows; newrows->prev = rows; rows = newrows; } rows->rows[rows->nrows++] = line; /* * The input file is not an table */ if (opts->querystream) { nrows += 1; desc->last_row = nrows - 1; goto next_row; } /* save possible table name */ if (nrows == 0 && !isTopLeftChar(line)) { strncpytrim(desc->title, line, 63, read); desc->title_rows = 1; } if (desc->border_head_row == -1 && desc->border_top_row == -1 && isTopLeftChar(line)) { desc->border_top_row = nrows; desc->is_expanded_mode = is_expanded_header(line, NULL, NULL); if (desc->is_expanded_mode) desc->border_head_row = nrows; } else if (desc->border_head_row == -1 && isHeadLeftChar(line, &is_unicode)) { desc->border_head_row = nrows; if (is_unicode) { desc->load_data_rows = true; log_row("next row will be data row"); } if (!desc->is_expanded_mode) desc->is_expanded_mode = is_expanded_header(line, NULL, NULL); /* title surely doesn't it there */ if ((!desc->is_expanded_mode && nrows == 1) || (desc->is_expanded_mode && nrows == 0)) { desc->title[0] = '\0'; desc->title_rows = 0; } } else if (!desc->is_expanded_mode && desc->border_bottom_row == -1 && isBottomLeftChar(line)) { desc->border_bottom_row = nrows; desc->last_data_row = nrows - 1; desc->fallback_last_data_row = false; desc->load_data_rows = false; log_row("next row will be desc row"); } else if (!desc->is_expanded_mode && desc->border_bottom_row != -1 && desc->footer_row == -1) { desc->footer_row = nrows; } else if (desc->is_expanded_mode && isBottomLeftChar(line)) { /* Outer border is repeated in expanded mode, use last detected row */ desc->border_bottom_row = nrows; desc->last_data_row = nrows - 1; desc->fallback_last_data_row = false; log_row("next row will be desc row"); } if (!desc->is_expanded_mode && desc->border_head_row != -1 && desc->border_head_row < nrows && desc->alt_footer_row == -1) { if (*line != '\0' && *line != ' ') desc->alt_footer_row = nrows; } if ((int) len > desc->maxbytes) desc->maxbytes = (int) len; if ((int) clen > desc->maxx + 1) desc->maxx = clen - 1; if ((int) clen > 1 || (clen == 1 && *line != '\n')) desc->last_row = nrows; nrows += 1; /* Detection of status rows */ if (nrows == 1 && is_cmdtag(line)) break; next_row: line = NULL; if (stop_after_nrows > 0 && nrows >= stop_after_nrows) { completed = false; log_row("progressive load stop on %d row", nrows); break; } if ((f_data_opts & STREAM_HAS_NOTIFY_SUPPORT) && nrows % 1000 == 0) { log_row("sleep 10ms per 1000 rows"); usleep(1000 * 10); } read = _getline(&line, &len, f_data, f_data_opts & STREAM_IS_IN_NONBLOCKING_MODE, true); } while (read != -1); desc->total_rows = nrows; desc->last_buffer = rows != &desc->rows ? rows : NULL; desc->completed = completed; if (errno && errno != EAGAIN) { log_row("cannot to read from file (%s)", strerror(errno)); return false; } /* used for file truncation detection */ save_file_position(); log_row("read rows %d", nrows); if (opts->querystream) goto final; if (initial_run) { /* * border headline cannot be higher than 1000, to simply find it * in first row block. Higher number is surelly wrong, probably * some comment. */ if (desc->border_top_row >= 100) desc->border_top_row = -1; if (desc->border_head_row >= 100) desc->border_head_row = -1; desc->headline_char_size = 0; } if (desc->last_row != -1) desc->maxy = desc->last_row; if (desc->border_head_row != -1) { if (desc->border_head_row == 0 && !desc->is_expanded_mode) goto broken_format; desc->headline = desc->rows.rows[desc->border_head_row]; desc->headline_size = strlen(desc->headline); /* * fallback, but can be fixed later, when border_type * will be known. */ if (desc->last_data_row == -1 || desc->fallback_last_data_row) { desc->last_data_row = desc->last_row - 1; desc->fallback_last_data_row = true; log_row("set fallback_last_data_row to %d", desc->last_data_row); } if (desc->border_head_row >= 1) desc->namesline = desc->rows.rows[desc->border_head_row - 1]; } else if (desc->is_expanded_mode && desc->border_top_row != -1) { desc->headline = desc->rows.rows[desc->border_top_row]; desc->headline_size = strlen(desc->headline); } else if (desc->border_top_row != -1) { /* note: desc->border_head_row should be always -1 */ desc->border_head_row = desc->border_top_row; desc->headline = desc->rows.rows[desc->border_top_row]; desc->headline_size = strlen(desc->headline); } else { broken_format: log_row("input format is not tabular"); desc->headline = NULL; desc->headline_size = 0; desc->headline_char_size = 0; /* there are not a data set */ desc->last_data_row = desc->last_row; desc->fallback_last_data_row = false; desc->title_rows = 0; desc->title[0] = '\0'; } final: #ifdef DEBUG_PIPE print_duration(start_sec, start_ms, "read file"); #endif #if defined(HAVE_INOTIFY) || defined(HAVE_KQUEUE) if (completed && f_data_opts & STREAM_HAS_NOTIFY_SUPPORT) /* clean event buffer */ clean_notify_poll(); #endif return true; } /* * Translate from UTF8 to semantic characters. */ bool translate_headline(DataDesc *desc) { char *srcptr; char *destptr; char *last_black_char = NULL; bool broken_format = false; int processed_chars = 0; bool is_expanded_info = false; bool is_headerless = (desc->border_head_row == desc->border_top_row && !desc->is_expanded_mode); srcptr = desc->headline; destptr = smalloc(desc->headline_size + 2); desc->headline_transl = destptr; desc->linestyle = 'a'; desc->border_type = 0; desc->expanded_info_minx = -1; while (*srcptr != '\0' && *srcptr != '\n' && *srcptr != '\r') { /* only spaces can be after known right border */ if (last_black_char != NULL && *last_black_char == 'R') { if (*srcptr != ' ') { broken_format = true; break; } } if (*srcptr != ' ') last_black_char = destptr; if (desc->is_expanded_mode && *srcptr == '[') { if (desc->expanded_info_minx != -1) { broken_format = true; break; } /* entry to expanded info mode */ is_expanded_info = true; desc->expanded_info_minx = processed_chars; *destptr++ = 'd'; srcptr += charlen(srcptr); } else if (is_expanded_info) { if (*srcptr == ']') { is_expanded_info = false; } *destptr++ = 'd'; srcptr += charlen(srcptr); } else if (strncmp(srcptr, "\342\224\214", 3) == 0 || /* ┌ */ strncmp(srcptr, "\342\225\224", 3) == 0 || /* ╔ */ strncmp(srcptr, "\342\224\217", 3) == 0 || /* ┏ */ strncmp(srcptr, "\342\225\255", 3) == 0) /* ╭ */ { /* should be expanded mode */ if (processed_chars > 0 || (!desc->is_expanded_mode && !is_headerless)) { broken_format = true; break; } desc->linestyle = 'u'; desc->border_type = 2; *destptr++ = 'L'; srcptr += 3; } else if (strncmp(srcptr, "\342\224\220", 3) == 0 || /* ┐ */ strncmp(srcptr, "\342\225\227", 3) == 0 || /* ╗ */ strncmp(srcptr, "\342\224\223", 3) == 0 || /* ┓ */ strncmp(srcptr, "\342\225\256", 3) == 0) /* ╮ */ { if (desc->linestyle != 'u' || desc->border_type != 2 || (!desc->is_expanded_mode && !is_headerless)) { broken_format = true; break; } *destptr++ = 'R'; srcptr += 3; } else if (strncmp(srcptr, "\342\224\254", 3) == 0 || /* ┬╤ */ strncmp(srcptr, "\342\225\244", 3) == 0 || strncmp(srcptr, "\342\225\245", 3) == 0 || /* ╥╦ */ strncmp(srcptr, "\342\225\246", 3) == 0 || strncmp(srcptr, "\342\224\263", 3) == 0) /* ┳ */ { if (desc->linestyle != 'u' || (!desc->is_expanded_mode && !is_headerless)) { broken_format = true; break; } if (desc->border_type == 0) desc->border_type = 1; *destptr++ = 'I'; srcptr += 3; } else if (strncmp(srcptr, "\342\224\234", 3) == 0 || /* ├╟ */ strncmp(srcptr, "\342\225\237", 3) == 0 || strncmp(srcptr, "\342\225\236", 3) == 0 || /* ╞╠ */ strncmp(srcptr, "\342\225\240", 3) == 0 || strncmp(srcptr, "\342\224\243", 3) == 0) /* ┣ */ { if (processed_chars > 0) { broken_format = true; break; } desc->linestyle = 'u'; desc->border_type = 2; *destptr++ = 'L'; srcptr += 3; } else if (strncmp(srcptr, "\342\224\244", 3) == 0 || /* ┤╢ */ strncmp(srcptr, "\342\225\242", 3) == 0 || strncmp(srcptr, "\342\225\241", 3) == 0 || /* ╡╣ */ strncmp(srcptr, "\342\225\243", 3) == 0 || strncmp(srcptr, "\342\224\253", 3) == 0) /* ┫ */ { if (desc->linestyle != 'u' || desc->border_type != 2) { broken_format = true; break; } *destptr++ = 'R'; srcptr += 3; } else if (strncmp(srcptr, "\342\224\274", 3) == 0 || /* ┼╪ */ strncmp(srcptr, "\342\225\252", 3) == 0 || strncmp(srcptr, "\342\225\253", 3) == 0 || /* ╫╬ */ strncmp(srcptr, "\342\225\254", 3) == 0 || strncmp(srcptr, "\342\225\213", 3) == 0) /* ╋ */ { if (desc->linestyle != 'u') { broken_format = true; break; } if (desc->border_type == 0) desc->border_type = 1; *destptr++ = 'I'; srcptr += 3; } else if (strncmp(srcptr, "\342\224\200", 3) == 0 || /* ─ */ strncmp(srcptr, "\342\225\220", 3) == 0 || /* ═ */ strncmp(srcptr, "\342\224\201", 3) == 0) /* ━ */ { if (processed_chars == 0) { desc->linestyle = 'u'; } else if (desc->linestyle != 'u') { broken_format = true; break; } *destptr++ = 'd'; srcptr += 3; } else if (*srcptr == '+' || *srcptr == ':') { if (processed_chars == 0) { *destptr++ = 'L'; desc->linestyle = 'a'; desc->border_type = 2; } else { if (desc->linestyle != 'a') { broken_format = true; break; } if (desc->border_type == 0) desc->border_type = 1; *destptr++ = (srcptr[1] == '-' || srcptr[1] == '=') ? 'I' : 'R'; } srcptr += 1; } else if (*srcptr == '-' || *srcptr == '=') { if (processed_chars == 0) { desc->linestyle = 'a'; } else if (desc->linestyle != 'a') { broken_format = true; break; } *destptr++ = 'd'; srcptr += 1; } else if (*srcptr == '_') { if (processed_chars == 0) { desc->linestyle = 'a'; desc->border_type = 0; } else if (desc->linestyle != 'a') { broken_format = true; break; } *destptr++ = 'd'; srcptr += 1; } else if (*srcptr == '|') { if (processed_chars == 0 && srcptr[1] == '-') { *destptr++ = 'L'; desc->linestyle = 'a'; desc->border_type = 2; desc->is_pgcli_fmt = true; } else if (processed_chars > 0 && desc->is_pgcli_fmt && srcptr[-1] == '-') { *destptr++ = 'R'; } else { broken_format = true; break; } srcptr += 1; } else if (*srcptr == ' ') { if (desc->border_type != 0) { broken_format = true; break; } *destptr++ = 'I'; srcptr += 1; } else { broken_format = true; break; } processed_chars += 1; } /* should not be - unclosed header */ if (is_expanded_info) broken_format = true; else if (desc->is_expanded_mode && desc->expanded_info_minx == -1) broken_format = true; if (!broken_format) { char *namesline = desc->namesline; char *first_char = NULL; /* first non space char of column name */ int offset; char *ptr; int i; /* Move right corner more right */ if (desc->border_type == 0 && last_black_char) { last_black_char[0] = 'd'; last_black_char[1] = '\0'; } /* trim ending spaces */ else if (last_black_char) { last_black_char[1] = '\0'; } desc->headline_char_size = strlen(desc->headline_transl); desc->columns = 1; ptr = desc->headline_transl; while (*ptr) { if (*ptr++ == 'I') desc->columns += 1; } desc->cranges = smalloc(desc->columns * sizeof(CRange)); i = 0; offset = 0; ptr = desc->headline_transl; desc->cranges[0].xmin = 0; desc->cranges[0].name_offset = -1; desc->cranges[0].name_size = -1; while (*ptr) { char *nextchar = NULL; int display_width; if (namesline) { /* invalidate namesline if there are not good enough chars */ if (!*namesline) { namesline = NULL; nextchar = NULL; } else { nextchar = namesline + charlen(namesline); display_width = dsplen(namesline); } } else display_width = 1; if (*ptr == 'I') { desc->cranges[i++].xmax = offset; desc->cranges[i].xmin = offset; desc->cranges[i].name_offset = -1; desc->cranges[i].name_size = -1; } else if (*ptr == 'd') { if (namesline && *namesline != ' ') { if (desc->cranges[i].name_offset == -1) { desc->cranges[i].name_pos = ptr - desc->headline_transl; desc->cranges[i].name_width = display_width; desc->cranges[i].name_offset = namesline - desc->namesline; desc->cranges[i].name_size = nextchar - namesline; first_char = namesline; } else { desc->cranges[i].name_size = nextchar - first_char; desc->cranges[i].name_width = offset + display_width - desc->cranges[i].name_pos; } } } /* possibly some chars can hold more display possitions */ if (namesline) namesline = nextchar; else display_width = 1; offset += display_width; ptr += display_width; } desc->cranges[i].xmax = offset - 1; if (!namesline) desc->namesline = NULL; /* * New PostgreSQL system tables contains visible oid columns. I would to * detect this situation and increase by one default freezed columns. So * second column (with name) will be freezed by default too. */ if (desc->namesline && desc->columns >= 2) { if (desc->cranges[0].name_size == 3 && nstrstr_with_sizes(desc->namesline + desc->cranges[0].name_offset, desc->cranges[0].name_size, "oid", 3)) { if (desc->cranges[1].name_size > 4 && nstrstr_with_sizes(desc->namesline + desc->cranges[1].name_offset + desc->cranges[1].name_size - 4, 4, "name", 4)) desc->freeze_two_cols = true; } else if ((desc->cranges[0].name_size == 10 && nstrstr_with_sizes(desc->namesline + desc->cranges[0].name_offset, desc->cranges[0].name_size, "schemaname", 10)) || (desc->cranges[0].name_size == 6 && nstrstr_with_sizes(desc->namesline + desc->cranges[0].name_offset, desc->cranges[0].name_size, "schema", 6))) { desc->freeze_two_cols = true; } } return true; } free(desc->headline_transl); desc->headline_transl = NULL; return false; } /* * Cut text from column. */ static bool cut_text(char *str, int xmin, int xmax, bool border0, char **result) { #define TEXT_STACK_BUFFER_SIZE 1024 if (str) { char *_str = NULL; char *after_last_nospc = NULL; int pos = 0; bool skip_left_spaces = true; while (*str) { int chrlen = charlen(str); if (pos > xmin || (border0 && pos >= xmin)) { if (skip_left_spaces) { if (*str == ' ') { pos += 1; str += 1; continue; } /* first nspc char */ skip_left_spaces = false; _str = str; } } if (*str != ' ') after_last_nospc = str + chrlen; pos += utf_dsplen(str); str += chrlen; if (pos >= xmax) break; } if (_str != NULL) { char buffer[TEXT_STACK_BUFFER_SIZE]; char *dynbuf = NULL; char *cstr = NULL; int size; cstr = strndup(_str, after_last_nospc - _str); if (!cstr) leave("out of memory"); if (!use_utf8) { *result = cstr; return true; } errno = 0; size = strxfrm(buffer, (const char *) cstr, 1024); if (errno != 0) { /* cannot to sort this string */ free(cstr); return false; } if (size > TEXT_STACK_BUFFER_SIZE - 1) { int dynbuf_size = 0; while (size > dynbuf_size) { if (dynbuf) free(dynbuf); dynbuf_size = size + 1; dynbuf = smalloc(dynbuf_size); errno = 0; size = strxfrm(dynbuf, cstr, dynbuf_size); if (errno != 0) { /* cannot to sort this string */ free(cstr); return false; } } } free(cstr); if (!dynbuf) { dynbuf = sstrdup(buffer); if (!dynbuf) leave("out of memory"); } *result = dynbuf; return true; } } *result = NULL; return false; } /* * Try to cut numeric (double) value from row defined by specified xmin, xmax positions. * Units (bytes, kB, MB, GB, TB) are supported. Returns true, when returned value is valid. */ static bool cut_numeric_value(char *str, int xmin, int xmax, double *d, bool border0, bool *isnull, char **nullstr) { #define BUFFER_MAX_SIZE 101 char buffer[BUFFER_MAX_SIZE]; char *buffptr; char *after_last_nospace = NULL; char *first_nospace_nodigit = NULL; *isnull = false; if (str) { bool found_plus_sign = false; bool found_minus_sign = false; bool only_digits = false; bool only_digits_with_point = false; bool skip_initial_spaces = true; int x = 0; char decimal_point = '\0'; long long mp = 1; after_last_nospace = buffptr = buffer; memset(buffer, 0, BUFFER_MAX_SIZE); while (*str) { int chrlen = charlen(str); if (x > xmin || (border0 && x >= xmin)) { char c = *str; if (skip_initial_spaces) { if (c == ' ') { x += 1; str += 1; continue; } else if ((c == '-' || c == '+') && !(found_plus_sign || found_minus_sign)) { if (c == '-') found_minus_sign = true; else found_plus_sign = true; x += 1; str += 1; continue; } /* first char should be a digit */ if (!isdigit(c)) { char *_nullstr = *nullstr; size_t len; char *saved_str = str; after_last_nospace = saved_str; /* * We should to check nullstr if exists, or we should to save * this string as nullstr. */ while (*str) { if (*str != ' ') after_last_nospace = str + chrlen; x += dsplen(str); str += chrlen; if (x >= xmax) break; if (*str) chrlen = charlen(str); } len = after_last_nospace - saved_str; if (_nullstr) { if (strlen(_nullstr) == len) *isnull = strncmp(_nullstr, saved_str, len) == 0; else *isnull = false; } else { _nullstr = smalloc(len + 1); memcpy(_nullstr, saved_str, len); _nullstr[len] = '\0'; *isnull = true; *nullstr = _nullstr; } return false; } skip_initial_spaces = false; only_digits = true; } memcpy(buffptr, str, chrlen); /* trim from right */ if (c != ' ') { bool only_digits_prev = only_digits; bool only_digits_with_point_prev = only_digits_with_point; after_last_nospace = buffptr + chrlen; if (after_last_nospace - buffer > (BUFFER_MAX_SIZE - 1)) { /* too long string - should not be translated to number */ return false; } if (c == '.' || c == ',') { if (only_digits) { only_digits = false; only_digits_with_point = true; decimal_point = c; } else return false; } else if (!isdigit(c)) { only_digits = false; only_digits_with_point = false; } /* Save point of chage between digits and other */ if ((only_digits_prev || only_digits_with_point_prev) && !(only_digits || only_digits_with_point)) { first_nospace_nodigit = buffptr; } } buffptr += chrlen; } x += dsplen(str); str += chrlen; if (x >= xmax) break; } /* while (*str) */ /* trim spaces from right */ *after_last_nospace = '\0'; if (first_nospace_nodigit) { /* units used by psql */ if (nstreq(first_nospace_nodigit, "bytes")) mp = 1l; else if (nstreq(first_nospace_nodigit, "kB")) mp = 1024l; else if (nstreq(first_nospace_nodigit, "MB")) mp = 1024l * 1024; else if (nstreq(first_nospace_nodigit, "GB")) mp = 1024l * 1024 * 1024; else if (nstreq(first_nospace_nodigit, "TB")) mp = 1024l * 1024 * 1024 * 1024; /* units used by nushell */ else if (nstreq(first_nospace_nodigit, "B")) mp = 1l; else if (nstreq(first_nospace_nodigit, "KiB")) mp = 1024l; else if (nstreq(first_nospace_nodigit, "MiB")) mp = 1024l * 1024; else if (nstreq(first_nospace_nodigit, "GiB")) mp = 1024l * 1024 * 1024; else if (nstreq(first_nospace_nodigit, "TiB")) mp = 1024l * 1024 * 1024 * 1024; /* unknown unit */ else { log_row("unknown unit \"%s\"", first_nospace_nodigit); return false; } *first_nospace_nodigit = '\0'; } if (decimal_point == ',') { char *ptr = buffer; while (*ptr) { if (*ptr == ',') *ptr = '.'; ptr += 1; } } errno = 0; *d = strtod(buffer, NULL); if (errno == 0) { *d = *d * mp; if (found_minus_sign) *d *= -1; return true; } } return false; } /* * Try to detect multiline rows. */ void multilines_detection(DataDesc *desc) { LineBufferIter lbi; LineBufferMark lbm; int recno = 1; bool border0 = (desc->border_type == 0); bool border1 = (desc->border_type == 1); bool border2 = (desc->border_type == 2); bool has_multilines = false; if (desc->multilines_already_tested) return; init_lbi_ddesc(&lbi, desc, 0); while (lbi_set_mark_next(&lbi, &lbm)) { char *str; int lineno; bool found_continuation_symbol = false; LineInfo *linfo; (void) lbm_get_line(&lbm, &str, &linfo, &lineno); if (lineno < desc->first_data_row || lineno > desc->last_data_row) continue; /* * This routine can be repeated until progressive load * is not finished. But we don't need to repeat searching * multilines detection. */ if (!linfo || !(linfo->mask & LINEINFO_CONTINUATION || linfo->mask & LINEINFO_HASNOT_CONTINUATION)) { int pos = 0; /* * This implementation doesn't support old-ascii format * * Note - processed string can be shorter than headline for last * column with pset border 1 */ while (pos < desc->headline_char_size && *str != '\0') { if (border0) { if (pos + 1 == desc->headline_char_size) { char *sym; sym = str + charlen(str); if (*sym != '\0') found_continuation_symbol = is_line_continuation_char(sym, desc); } else if (desc->headline_transl[pos] == 'I') found_continuation_symbol = is_line_continuation_char(str, desc); } else if (border1) { if ((pos + 1 < desc->headline_char_size && desc->headline_transl[pos + 1] == 'I') || (pos + 1 == desc->headline_char_size)) found_continuation_symbol = is_line_continuation_char(str, desc); } else if (border2) { if ((pos + 1 < desc->headline_char_size) && (desc->headline_transl[pos + 1] == 'I' || desc->headline_transl[pos + 1] == 'R')) found_continuation_symbol = is_line_continuation_char(str, desc); } if (found_continuation_symbol) { lbm_xor_mask(&lbm, LINEINFO_CONTINUATION); has_multilines = true; break; } pos += dsplen(str); str += charlen(str); } if (!found_continuation_symbol) lbm_xor_mask(&lbm, LINEINFO_HASNOT_CONTINUATION); } else found_continuation_symbol = linfo->mask & LINEINFO_CONTINUATION; lbm_recno_offset(&lbm, lineno - recno); if (!found_continuation_symbol) recno += 1; } if (desc->completed) desc->multilines_already_tested = true; desc->has_multilines = has_multilines; } /* * Prepare order map - it is used for printing data in different than * original order. "sbcn" - sort by column number */ void update_order_map(ScrDesc *scrdesc, DataDesc *desc, int sbcn, bool desc_sort) { LineBuffer *lnb; char *nullstr = NULL; int xmin, xmax; int lineno = 0; bool continual_line = false; bool isnull; bool detect_string_column = false; bool border0 = (desc->border_type == 0); SortData *sortbuf; int sortbuf_pos = 0; int i; xmin = desc->cranges[sbcn - 1].xmin; xmax = desc->cranges[sbcn - 1].xmax; sortbuf = smalloc(desc->total_rows * sizeof(SortData)); /* multilines should be detected first */ multilines_detection(desc); lnb = &desc->rows; lineno = 0; sortbuf_pos = 0; if (!desc->order_map) { desc->order_map = smalloc(desc->total_rows * sizeof(MappedLine)); desc->order_map_items = desc->total_rows; } /* * There are two possible sorting methods: numeric or string. * We can try numeric sort first if all values are numbers or * just only one type of string value (like NULL string). This * value can be repeated, * * When there are more different strings, then start again and * use string sort. */ while (lnb) { for (i = 0; i < lnb->nrows; i++) { desc->order_map[lineno].lnb = lnb; desc->order_map[lineno].lnb_row = i; if (lineno >= desc->first_data_row && lineno <= desc->last_data_row) { if (!continual_line) { sortbuf[sortbuf_pos].lnb = lnb; sortbuf[sortbuf_pos].lnb_row = i; sortbuf[sortbuf_pos].strxfrm = NULL; if (cut_numeric_value(lnb->rows[i], xmin, xmax, &sortbuf[sortbuf_pos].d, border0, &isnull, &nullstr)) sortbuf[sortbuf_pos++].info = INFO_DOUBLE; else { sortbuf[sortbuf_pos++].info = INFO_UNKNOWN; if (!isnull) { detect_string_column = true; goto sort_by_string; } } } if (desc->has_multilines) { continual_line = (lnb->lineinfo && (lnb->lineinfo[i].mask & LINEINFO_CONTINUATION)); } } lineno += 1; } lnb = lnb->next; } sort_by_string: free(nullstr); if (detect_string_column) { /* read data again and use nls_string */ lnb = &desc->rows; lineno = 0; sortbuf_pos = 0; while (lnb) { for (i = 0; i < lnb->nrows; i++) { desc->order_map[lineno].lnb = lnb; desc->order_map[lineno].lnb_row = i; if (lineno >= desc->first_data_row && lineno <= desc->last_data_row) { if (!continual_line) { sortbuf[sortbuf_pos].lnb = lnb; sortbuf[sortbuf_pos].lnb_row = i; sortbuf[sortbuf_pos].d = 0.0; if (cut_text(lnb->rows[i], xmin, xmax, border0, &sortbuf[sortbuf_pos].strxfrm)) sortbuf[sortbuf_pos++].info = INFO_STRXFRM; else sortbuf[sortbuf_pos++].info = INFO_UNKNOWN; /* empty string */ } if (desc->has_multilines) { continual_line = (lnb->lineinfo && (lnb->lineinfo[i].mask & LINEINFO_CONTINUATION)); } } lineno += 1; } lnb = lnb->next; } } if (lineno != desc->total_rows) leave("unexpected processed rows after sort prepare"); if (detect_string_column) { log_row("string sort"); sort_column_text(sortbuf, sortbuf_pos, desc_sort); } else { log_row("numeric sort"); sort_column_num(sortbuf, sortbuf_pos, desc_sort); } lineno = desc->first_data_row; for (i = 0; i < sortbuf_pos; i++) { desc->order_map[lineno].lnb = sortbuf[i].lnb; desc->order_map[lineno].lnb_row = sortbuf[i].lnb_row; lineno += 1; /* assign other continual lines */ if (desc->has_multilines) { int lnb_row; bool continual = false; lnb = sortbuf[i].lnb; lnb_row = sortbuf[i].lnb_row; continual = lnb->lineinfo && (lnb->lineinfo[lnb_row].mask & LINEINFO_CONTINUATION); while (lnb && continual) { lnb_row += 1; if (lnb_row >= lnb->nrows) { lnb_row = 0; lnb = lnb->next; } desc->order_map[lineno].lnb = lnb; desc->order_map[lineno].lnb_row = lnb_row; lineno += 1; continual = lnb && lnb->lineinfo && (lnb->lineinfo[lnb_row].mask & LINEINFO_CONTINUATION); } } } /* * We cannot to say nothing about found_row, so most * correct solution is clean it now. */ scrdesc->found_row = -1; for (i = 0; i < sortbuf_pos; i++) free(sortbuf[i].strxfrm); free(sortbuf); } pspg-5.8.1/src/theme_loader.c000066400000000000000000000363031452457446400161050ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * theme_loader.c * a routines for loading theme (style) definition * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/theme_loader.c * *------------------------------------------------------------------------- */ #include "pspg.h" #include "themes.h" #include #include #include #include #include typedef enum { TOKEN_CHAR, TOKEN_WORD, TOKEN_NUMBER } TokenType; typedef struct { int value; int size; TokenType typ; char *str; } Token; typedef struct { char *start; char *current; bool is_error; Token saved_token; bool saved_token_is_valid; } Tokenizer; static void initTokenizer(Tokenizer *tokenizer, char *str) { tokenizer->start = str; tokenizer->current = str; tokenizer->is_error = false; tokenizer->saved_token_is_valid = false; } static bool iskeychar(int c) { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_'; } #define IS_KEYWORD(t, k) (((t)->size == strlen(k)) && strncasecmp((t)->str, k, (t)->size) == 0) static Token * ThemeLoaderGetToken(Tokenizer *tokenizer, Token *token) { char c; if (tokenizer->saved_token_is_valid) { memcpy(token, &tokenizer->saved_token, sizeof(Token)); tokenizer->saved_token_is_valid = false; return token; } while (isspace(*tokenizer->current)) tokenizer->current++; if (*tokenizer->current == '\0') return NULL; token->str = tokenizer->current; c = *tokenizer->current++; if (c == '#') { token->str = tokenizer->current; while (isxdigit(*tokenizer->current)) tokenizer->current++; if ((tokenizer->current - token->str) != 6) { log_row("theme loader: syntax error (broken format of rgb color)"); tokenizer->is_error = true; return NULL; } token->typ = TOKEN_NUMBER; token->size = 6; token->value = (int) strtol(token->str, NULL, 16); } else if (isdigit(c)) { while (isdigit(*tokenizer->current)) tokenizer->current++; token->typ = TOKEN_NUMBER; token->size = 6; token->value = (int) strtol(token->str, NULL, 10); } else if (iskeychar(c)) { while (iskeychar(*tokenizer->current)) tokenizer->current++; token->typ = TOKEN_WORD; token->size = tokenizer->current - token->str; } else { token->typ = TOKEN_CHAR; token->value = c; } return token; } static void ThemeLoaderPushBackToken(Tokenizer *tokenizer, Token *token) { tokenizer->saved_token_is_valid = true; memcpy(&tokenizer->saved_token, token, sizeof(Token)); } typedef enum { TL_THEME_ELEMENT, TL_MENU_INDEX, TL_TEMPLATE_INDEX } ThemeLoaderKeyType; typedef struct { ThemeLoaderKeyType key_type; PspgThemeElements te_type; } ThemeLoaderKey; static attr_t GetAttr(Tokenizer *tokenizer) { attr_t result = 0; while (1) { Token token, *_token; _token = ThemeLoaderGetToken(tokenizer, &token); if (!_token) return result; if (_token->typ == TOKEN_WORD) { if (IS_KEYWORD(_token, "bold")) result |= A_BOLD; else if (IS_KEYWORD(_token, "italic")) result |= A_ITALIC; else if (IS_KEYWORD(_token, "underline")) result |= A_UNDERLINE; else if (IS_KEYWORD(_token, "reverse")) result |= A_REVERSE; else if (IS_KEYWORD(_token, "standout")) result |= A_STANDOUT; else if (IS_KEYWORD(_token, "dim")) result |= A_DIM; else { log_row("theme loader: unknown attribute \"%.*s\"", _token->size, _token->str); tokenizer->is_error = true; return 0; } } else { log_row("theme loader: unexpected token (expected style attribute)"); tokenizer->is_error = true; return 0; } /* ignore comma */ _token = ThemeLoaderGetToken(tokenizer, &token); if (_token && !(_token->typ == TOKEN_CHAR && _token->value == ',')) ThemeLoaderPushBackToken(tokenizer, &token); } return result; } static ThemeLoaderKey * GetKey(Tokenizer *tokenizer) { static ThemeLoaderKey tlk; if (!tokenizer->is_error) { Token token, *_token; _token = ThemeLoaderGetToken(tokenizer, &token); if (!_token) return NULL; if (_token->typ == TOKEN_WORD) { if (IS_KEYWORD(_token, "template")) tlk.key_type = TL_TEMPLATE_INDEX; else if (IS_KEYWORD(_token, "template_menu")) tlk.key_type = TL_MENU_INDEX; else { tlk.key_type = TL_THEME_ELEMENT; tlk.te_type = PspgTheme_none; if (IS_KEYWORD(_token, "background")) tlk.te_type = PspgTheme_background; else if (IS_KEYWORD(_token, "data")) tlk.te_type = PspgTheme_data; else if (IS_KEYWORD(_token, "border")) tlk.te_type = PspgTheme_border; else if (IS_KEYWORD(_token, "label")) tlk.te_type = PspgTheme_label; else if (IS_KEYWORD(_token, "row_number")) tlk.te_type = PspgTheme_rownum; else if (IS_KEYWORD(_token, "record_number")) tlk.te_type = PspgTheme_recnum; else if (IS_KEYWORD(_token, "selected_area")) tlk.te_type = PspgTheme_selection; else if (IS_KEYWORD(_token, "footer")) tlk.te_type = PspgTheme_footer; else if (IS_KEYWORD(_token, "cursor_data")) tlk.te_type = PspgTheme_cursor_data; else if (IS_KEYWORD(_token, "cursor_border")) tlk.te_type = PspgTheme_cursor_border; else if (IS_KEYWORD(_token, "cursor_label")) tlk.te_type = PspgTheme_cursor_label; else if (IS_KEYWORD(_token, "cursor_row_number")) tlk.te_type = PspgTheme_cursor_rownum; else if (IS_KEYWORD(_token, "cursor_record_number")) tlk.te_type = PspgTheme_cursor_recnum; else if (IS_KEYWORD(_token, "cursor_selected_area")) tlk.te_type = PspgTheme_cursor_selection; else if (IS_KEYWORD(_token, "cursor_footer")) tlk.te_type = PspgTheme_cursor_footer; else if (IS_KEYWORD(_token, "scrollbar_arrows")) tlk.te_type = PspgTheme_scrollbar_arrows; else if (IS_KEYWORD(_token, "scrollbar_background")) tlk.te_type = PspgTheme_scrollbar_background; else if (IS_KEYWORD(_token, "scrollbar_slider")) tlk.te_type = PspgTheme_scrollbar_slider; else if (IS_KEYWORD(_token, "scrollbar_active_slider")) tlk.te_type = PspgTheme_scrollbar_active_slider; else if (IS_KEYWORD(_token, "title")) tlk.te_type = PspgTheme_title; else if (IS_KEYWORD(_token, "status_bar")) tlk.te_type = PspgTheme_status_bar; else if (IS_KEYWORD(_token, "prompt_bar")) tlk.te_type = PspgTheme_prompt_bar; else if (IS_KEYWORD(_token, "info_bar")) tlk.te_type = PspgTheme_info_bar; else if (IS_KEYWORD(_token, "error_bar")) tlk.te_type = PspgTheme_error_bar; else if (IS_KEYWORD(_token, "input_bar")) tlk.te_type = PspgTheme_input_bar; else if (IS_KEYWORD(_token, "bookmark")) tlk.te_type = PspgTheme_bookmark; else if (IS_KEYWORD(_token, "bookmark_border")) tlk.te_type = PspgTheme_bookmark_border; else if (IS_KEYWORD(_token, "cursor_bookmark")) tlk.te_type = PspgTheme_cursor_bookmark; else if (IS_KEYWORD(_token, "cross_cursor")) tlk.te_type = PspgTheme_cross_cursor; else if (IS_KEYWORD(_token, "cross_cursor_border")) tlk.te_type = PspgTheme_cross_cursor_border; else if (IS_KEYWORD(_token, "matched_pattern")) tlk.te_type = PspgTheme_pattern; else if (IS_KEYWORD(_token, "mathed_pattern_nohl")) tlk.te_type = PspgTheme_pattern_nohl; else if (IS_KEYWORD(_token, "matched_line")) tlk.te_type = PspgTheme_pattern_line; else if (IS_KEYWORD(_token, "matched_line_border")) tlk.te_type = PspgTheme_pattern_line_border; else if (IS_KEYWORD(_token, "matched_pattern_cursor")) tlk.te_type = PspgTheme_pattern_cursor; else if (IS_KEYWORD(_token, "matched_line_vertical_cursor")) tlk.te_type = PspgTheme_pattern_line_vertical_cursor; else if (IS_KEYWORD(_token, "matched_line_vertical_cursor_border")) tlk.te_type = PspgTheme_pattern_line_vertical_cursor_border; else if (IS_KEYWORD(_token, "error")) tlk.te_type = PspgTheme_error; else { log_row("theme loader: unknown key \"%.*s\"", _token->size, _token->str); tokenizer->is_error = true; return NULL; } } } else { log_row("theme loader: unexpected token (expected key name)"); tokenizer->is_error = true; return NULL; } } else return NULL; return &tlk; } static PspgColor * GetColorDef(Tokenizer *tokenizer) { Token token, *_token; if (!tokenizer->is_error) { _token = ThemeLoaderGetToken(tokenizer, &token); if (!_token) return NULL; if (_token->typ == TOKEN_CHAR) { log_row("theme loader: unexpected token \"%c\"", _token->value); tokenizer->is_error = true; return NULL; } else if (_token->typ == TOKEN_WORD) { if (IS_KEYWORD(_token, "Black")) return (PspgColor *) &PspgBlack; else if (IS_KEYWORD(_token, "Red")) return (PspgColor *) &PspgRed; else if (IS_KEYWORD(_token, "Green")) return (PspgColor *) &PspgGreen; else if (IS_KEYWORD(_token, "Brown")) return (PspgColor *) &PspgBrown; else if (IS_KEYWORD(_token, "Blue")) return (PspgColor *) &PspgBlue; else if (IS_KEYWORD(_token, "Magenta")) return (PspgColor *) &PspgMagenta; else if (IS_KEYWORD(_token, "Cyan")) return (PspgColor *) &PspgCyan; else if (IS_KEYWORD(_token, "LightGray")) return (PspgColor *) &PspgLightGray; else if (IS_KEYWORD(_token, "Gray")) return (PspgColor *) &PspgGray; else if (IS_KEYWORD(_token, "BrightRed")) return (PspgColor *) &PspgBrightRed; else if (IS_KEYWORD(_token, "BrightGreen")) return (PspgColor *) &PspgBrightGreen; else if (IS_KEYWORD(_token, "Yellow")) return (PspgColor *) &PspgYellow; else if (IS_KEYWORD(_token, "BrightBlue")) return (PspgColor *) &PspgBrightBlue; else if (IS_KEYWORD(_token, "BrightMagenta")) return (PspgColor *) &PspgBrightMagenta; else if (IS_KEYWORD(_token, "BrightCyan")) return (PspgColor *) &PspgBrightCyan; else if (IS_KEYWORD(_token, "White")) return (PspgColor *) &PspgWhite; else if (IS_KEYWORD(_token, "Default")) return (PspgColor *) &PspgDefault; else { log_row("theme loader: unknown color \"%.*s\"", _token->size, _token->str); tokenizer->is_error = true; return NULL; } } else { static PspgColor result; if (COLORS == 8) { log_row("theme loader: cannot to display RGB color"); tokenizer->is_error = true; return NULL; } result.cp = PSPG_COLOR_RGB; result.rgb = _token->value; return &result; } } return NULL; } /* * Theme loader try to work in tolerant mode, broken lines * are ignored. An information about broken lines are printed to log. * * This function returns true, when theme was loaded. An warning can * be raised by setting output argument is_warning to true. * * tle2 is used for odd records. */ bool theme_loader(FILE *theme, PspgThemeLoaderElement *tle, PspgThemeLoaderElement *tle2, int *template, int *menu, bool *is_warning) { char *line = NULL; ssize_t read; size_t len; int lineno = 0; if (THEMEDEF_SIZE <= PspgTheme_error) leave("theme loader: internal error (the size of theme loader table is too small)"); *is_warning = false; memset(tle, 0, THEMEDEF_SIZE * sizeof(PspgThemeLoaderElement)); memset(tle2, 0, THEMEDEF_SIZE * sizeof(PspgThemeLoaderElement)); *template = 6; *menu = 2; errno = 0; while ((read = getline(&line, &len, theme)) != -1) { Tokenizer tokenizer; Token token, *_token; ThemeLoaderKey *key; PspgThemeLoaderElement *_tle = tle; lineno += 1; /* strip new line on the end */ if (line[read - 1] == '\n') line[read - 1] = '\0'; initTokenizer(&tokenizer, line); key = GetKey(&tokenizer); if (key) { int int_value = 0; PspgThemeElement te; te.attr = 0; te.fg = PspgWhite; te.bg = PspgBlack; _token = ThemeLoaderGetToken(&tokenizer, &token); if (_token) { if (_token->typ == TOKEN_CHAR && _token->value == '*') _tle = tle2; else ThemeLoaderPushBackToken(&tokenizer, &token); } _token = ThemeLoaderGetToken(&tokenizer, &token); if (!_token) { log_row("theme loader: syntax error (missing \"=\")"); goto err; } else if (_token->typ != TOKEN_CHAR || _token->value != '=') { log_row("theme loader: unexepected token (expected \"=\")"); goto err; } if (key->key_type == TL_TEMPLATE_INDEX || key->key_type == TL_MENU_INDEX) { _token = ThemeLoaderGetToken(&tokenizer, &token); if (!_token) { log_row("theme loader: missing number"); goto err; } if (_token->typ != TOKEN_NUMBER) { log_row("theme loader: unexpected token (expected number)"); goto err; } if (key->key_type == TL_TEMPLATE_INDEX && (_token->value < 0 || _token->value > MAX_STYLE)) { log_row("theme loader: template style number is out of limit (%d)", MAX_STYLE); goto err; } else if (key->key_type == TL_MENU_INDEX && (_token->value < 0 || _token->value > ST_MENU_LAST_STYLE)) { log_row("theme loader: menu template style number is out of limit (%d)", ST_MENU_LAST_STYLE); goto err; } int_value = _token->value; } else { static PspgColor *color; color = GetColorDef(&tokenizer); if (tokenizer.is_error) goto err; if (!color) { log_row("theme loader: missing foreground color definition"); goto err; } te.fg = *color; _token = ThemeLoaderGetToken(&tokenizer, &token); if (!_token || (_token->typ != TOKEN_CHAR || _token->value != ',')) { log_row("theme loader: syntax error (missing \",\")"); goto err; } color = GetColorDef(&tokenizer); if (tokenizer.is_error) goto err; if (!color) { log_row("theme loader: missing background color definition"); goto err; } te.bg = *color; _token = ThemeLoaderGetToken(&tokenizer, &token); if (_token) { if (_token->typ != TOKEN_CHAR || _token->value != ',') { log_row("theme loader: syntax error (missing \",\")"); goto err; } te.attr = GetAttr(&tokenizer); } } if (!tokenizer.is_error) { _token = ThemeLoaderGetToken(&tokenizer, &token); if (_token) { log_row("theme loader: unexpected token before end of line"); goto err; } if (key->key_type == TL_MENU_INDEX) *menu = int_value; else if (key->key_type == TL_TEMPLATE_INDEX) *template = int_value; else { _tle[key->te_type].te = te; _tle[key->te_type].used = true; } } else goto err; } else { if (tokenizer.is_error) goto err; } continue; err: log_row("theme loader: skips line %d due error", lineno); log_row("%d: \"%s\"", lineno, line); *is_warning = true; } free(line); if (errno != 0) { format_error("cannot to read from theme description file (%s)", strerror(errno)); return false; } return true; } FILE * open_theme_desc(char *name) { const char *PSPG_CONF; char *transf_path; char *dir; char buffer[MAXPATHLEN]; FILE *result; PSPG_CONF = getenv("PSPG_CONF"); if (!PSPG_CONF) PSPG_CONF = "~/.pspgconf"; transf_path = tilde(NULL, PSPG_CONF); dir = dirname(transf_path); snprintf(buffer, MAXPATHLEN - 1, "%s/.pspg_theme_%s", dir, name); log_row("opening custom theme style \"%s\"", buffer); errno = 0; result = fopen(buffer, "r"); if (!result) format_error("cannot to open theme description file \"%s\" (%s)", buffer, strerror(errno)); return result; } pspg-5.8.1/src/themes.c000066400000000000000000002355531452457446400147520ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * themes.c * themes initialization * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/themes.c * *------------------------------------------------------------------------- */ #include "pspg.h" #include "themes.h" #include #include bool has_odd_themedef = false; #ifndef A_ITALIC #define A_ITALIC A_DIM #endif static int ncurses_colorpair_index = 0; static int ncurses_color_index = 0; typedef struct { int fg; int bg; int color_pair_number; } ColorPairCacheItem; static ColorPairCacheItem ColorPairCache[255]; static int nColorPairCache; typedef struct { short color; unsigned int rgb; } ColorCacheItem; #define COLOR_CACHE_SIZE 255 static ColorCacheItem ColorCache[COLOR_CACHE_SIZE]; static int nColorCache; static bool use_direct_color; const PspgColor PspgBlack = {PSPG_COLOR_BASIC, PSPG_BLACK_COLOR, 0x000000}; const PspgColor PspgRed = {PSPG_COLOR_BASIC, PSPG_RED_COLOR, 0xaa0000}; const PspgColor PspgGreen = {PSPG_COLOR_BASIC, PSPG_GREEN_COLOR, 0x00aa00}; const PspgColor PspgBrown = {PSPG_COLOR_BASIC, PSPG_BROWN_COLOR, 0xaa5500}; const PspgColor PspgBlue = {PSPG_COLOR_BASIC, PSPG_BLUE_COLOR, 0x0000aa}; const PspgColor PspgMagenta = {PSPG_COLOR_BASIC, PSPG_MAGENTA_COLOR, 0xaa00aa}; const PspgColor PspgCyan = {PSPG_COLOR_BASIC, PSPG_CYAN_COLOR, 0x00aaaa}; const PspgColor PspgLightGray = {PSPG_COLOR_BASIC, PSPG_LIGHT_GRAY_COLOR, 0xaaaaaa}; const PspgColor PspgGray = {PSPG_COLOR_BASIC, PSPG_GRAY_COLOR, 0x555555}; const PspgColor PspgBrightRed = {PSPG_COLOR_BASIC, PSPG_BRIGHT_RED_COLOR, 0xff5555}; const PspgColor PspgBrightGreen = {PSPG_COLOR_BASIC, PSPG_BRIGHT_GREEN_COLOR, 0x55ff55}; const PspgColor PspgYellow = {PSPG_COLOR_BASIC, PSPG_YELLOW_COLOR, 0xffff55}; const PspgColor PspgBrightBlue = {PSPG_COLOR_BASIC, PSPG_BRIGHT_BLUE_COLOR, 0x5555ff}; const PspgColor PspgBrightMagenta = {PSPG_COLOR_BASIC, PSPG_BRIGHT_MAGENTA_COLOR, 0xff55ff}; const PspgColor PspgBrightCyan = {PSPG_COLOR_BASIC, PSPG_BRIGHT_CYAN_COLOR, 0x55ffff}; const PspgColor PspgWhite = {PSPG_COLOR_BASIC, PSPG_WHITE_COLOR, 0xffffff}; const PspgColor PspgDefault = {PSPG_COLOR_BASIC, PSPG_DEFAULT_COLOR, -1}; static PspgThemeElement themedef[THEMEDEF_SIZE][2]; static int current_themedef_bank = 0; static PspgStyleDependency styledep(PspgThemeElements el) { switch (el) { case PspgTheme_cursor_data: case PspgTheme_cursor_label: case PspgTheme_cursor_rownum: case PspgTheme_cursor_recnum: case PspgTheme_cursor_selection: case PspgTheme_cursor_footer: case PspgTheme_cursor_bookmark: case PspgTheme_cross_cursor: return PSPG_CURSOR_BOLD; case PspgTheme_label: return PSPG_LABEL_BOLD; default: return PSPG_INDEPENDENT; } } /* * This is taken from tmux */ static int colour_dist_sq(int R, int G, int B, int r, int g, int b) { return ((R - r) * (R - r) + (G - g) * (G - g) + (B - b) * (B - b)); } static int colour_to_6cube(int v) { if (v < 48) return (0); if (v < 114) return (1); return ((v - 35) / 40); } /* * Convert an RGB triplet to the xterm(1) 256 colour palette. * * xterm provides a 6x6x6 colour cube (16 - 231) and 24 greys (232 - 255). We * map our RGB colour to the closest in the cube, also work out the closest * grey, and use the nearest of the two. * * Note that the xterm has much lower resolution for darker colours (they are * not evenly spread out), so our 6 levels are not evenly spread: 0x0, 0x5f * (95), 0x87 (135), 0xaf (175), 0xd7 (215) and 0xff (255). Greys are more * evenly spread (8, 18, 28 ... 238). */ static int colour_find_rgb(unsigned char r, unsigned char g, unsigned char b) { static const int q2c[6] = { 0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff }; int qr, qg, qb, cr, cg, cb, d, idx; int grey_avg, grey_idx, grey; /* Map RGB to 6x6x6 cube. */ qr = colour_to_6cube(r); cr = q2c[qr]; qg = colour_to_6cube(g); cg = q2c[qg]; qb = colour_to_6cube(b); cb = q2c[qb]; /* If we have hit the colour exactly, return early. */ if (cr == r && cg == g && cb == b) return 16 + (36 * qr) + (6 * qg) + qb; /* Work out the closest grey (average of RGB). */ grey_avg = (r + g + b) / 3; if (grey_avg > 238) grey_idx = 23; else grey_idx = (grey_avg - 3) / 10; grey = 8 + (10 * grey_idx); /* Is grey or 6x6x6 colour closest? */ d = colour_dist_sq(cr, cg, cb, r, g, b); if (colour_dist_sq(grey, grey, grey, r, g, b) < d) idx = 232 + grey_idx; else idx = 16 + (36 * qr) + (6 * qg) + qb; return idx; } static short color_index_rgb(unsigned int rgb) { int i; bool change_color = true; /* Use already registered colors */ for (i = 0; i = COLORS) { log_row("cannot to define own color, reach limit %d colors", COLORS); return -1; } if (nColorCache >= COLOR_CACHE_SIZE) { log_row("cannot to define own color, reach limit %d colors in color's cache", COLOR_CACHE_SIZE); return -1; } if (change_color) { short r, g, b; ColorCache[nColorCache].color = ncurses_color_index++; ColorCache[nColorCache].rgb = rgb; r = ((rgb >> 16) & 0xff) / 255.0 * 1000.0; g = ((rgb >> 8) & 0xff) / 255.0 * 1000.0; b = ((rgb) & 0xff) / 255.0 * 1000.0; if (init_color(ColorCache[nColorCache].color, r, g, b) == ERR) log_row("init_color function returns ERR"); } else { unsigned char r, g, b; /* try to find most near color in 256 color palete */ r = ((rgb >> 16) & 0xff); g = ((rgb >> 8) & 0xff); b = ((rgb) & 0xff); ColorCache[nColorCache].rgb = rgb; ColorCache[nColorCache].color = colour_find_rgb(r, g, b); } return ColorCache[nColorCache++].color; } #define RGB(r, g, b) ((((int)(r / 1000.0 * 255.0)) << 16) + (((int)(g / 1000.0 * 255.0)) << 8) + ((int)(b / 1000.0 * 255.0))) void deftheme(PspgThemeElements idx, PspgColor fg, PspgColor bg, int attr) { memcpy(&themedef[idx][current_themedef_bank].fg, &fg, sizeof(PspgColor)); memcpy(&themedef[idx][current_themedef_bank].bg, &bg, sizeof(PspgColor)); themedef[idx][current_themedef_bank].attr = attr; } void deftheme_rgb(PspgThemeElements idx, unsigned int fg, unsigned int bg, int attr) { PspgThemeElement *te = &themedef[idx][current_themedef_bank]; te->fg.cp = PSPG_COLOR_RGB; te->fg.rgb = fg; te->bg.cp = PSPG_COLOR_RGB; te->bg.rgb = bg; te->attr = attr; } static int ncurses_color(PspgBasicColor cv, bool *isbright) { *isbright = false; switch (cv) { case PSPG_BLACK_COLOR: return COLOR_BLACK; case PSPG_RED_COLOR: return COLOR_RED; case PSPG_GREEN_COLOR: return COLOR_GREEN; case PSPG_BROWN_COLOR: return COLOR_YELLOW; case PSPG_BLUE_COLOR: return COLOR_BLUE; case PSPG_MAGENTA_COLOR: return COLOR_MAGENTA; case PSPG_CYAN_COLOR: return COLOR_CYAN; case PSPG_LIGHT_GRAY_COLOR: return COLOR_WHITE; case PSPG_GRAY_COLOR: *isbright = true; return COLOR_BLACK; case PSPG_BRIGHT_RED_COLOR: *isbright = true; return COLOR_RED; case PSPG_BRIGHT_GREEN_COLOR: *isbright = true; return COLOR_GREEN; case PSPG_YELLOW_COLOR: *isbright = true; return COLOR_YELLOW; case PSPG_BRIGHT_BLUE_COLOR: *isbright = true; return COLOR_BLUE; case PSPG_BRIGHT_MAGENTA_COLOR: *isbright = true; return COLOR_MAGENTA; case PSPG_BRIGHT_CYAN_COLOR: *isbright = true; return COLOR_CYAN; case PSPG_WHITE_COLOR: *isbright = true; return COLOR_WHITE; case PSPG_DEFAULT_COLOR: return -1; } return -1; } static int ncurses_color_ex(PspgColor c) { if (c.cp == PSPG_COLOR_RGB) { return color_index_rgb(c.rgb); } else if (c.cp == PSPG_COLOR_BASIC) { bool isbright; int result; result = ncurses_color(c.bc, &isbright); return isbright ? result + 8 : result; } else return c.bc; } attr_t ncurses_theme_attr(PspgThemeElements idx) { int bgcolor; int fgcolor; bool bgcolorbright; bool fgcolorbright; attr_t result; int i; PspgStyleDependency dep; PspgThemeElement *te = &themedef[idx][current_themedef_bank]; result = te->attr; dep = styledep(idx); if (dep != PSPG_INDEPENDENT) { if (current_state && current_state->opts) { bool bold_cursor = current_state->opts->bold_cursor; bool bold_labels = current_state->opts->bold_labels; if ((dep == PSPG_CURSOR_BOLD && bold_cursor) || (dep == PSPG_LABEL_BOLD && bold_labels)) result |= A_BOLD; } } if (use_direct_color) { fgcolor = te->fg.rgb; bgcolor = te->bg.rgb; } else if (te->fg.cp == PSPG_COLOR_BASIC && te->bg.cp == PSPG_COLOR_BASIC) { fgcolor = ncurses_color(te->fg.bc, &fgcolorbright); bgcolor = ncurses_color(te->bg.bc, &bgcolorbright); if (COLORS == 8) { /* * cannot to use bright color on background and * foreground together */ if (fgcolorbright && bgcolorbright) bgcolorbright = false; if (bgcolorbright && (result & A_REVERSE)) bgcolorbright = false; if (fgcolorbright) result |= A_BOLD; else if (bgcolorbright) { int aux = fgcolor; fgcolor = bgcolor; bgcolor = aux; result |= A_BOLD | A_REVERSE; } } else { if (fgcolorbright) fgcolor += 8; if (bgcolorbright) bgcolor += 8; } } else if (te->fg.cp == PSPG_COLOR_RGB || te->bg.cp == PSPG_COLOR_RGB) { fgcolor = ncurses_color_ex(te->fg); bgcolor = ncurses_color_ex(te->bg); } else { /* fallback */ fgcolor = -1; bgcolor = -1; } /* try to find color pair in cache - The number of color pairs can be * limmited, so try to reuse it. */ for (i = 0; i < nColorPairCache; i++) { if (ColorPairCache[i].fg == fgcolor && ColorPairCache[i].bg == bgcolor) { result |= COLOR_PAIR(ColorPairCache[i].color_pair_number); return result; } } if (ncurses_colorpair_index >= 255) return 0; /* * The number of color pairs can be limmited, so try * to reuse it. */ if (use_direct_color) { #ifdef NCURSES_EXT_COLORS if (init_extended_pair(ncurses_colorpair_index, fgcolor, bgcolor) == ERR) log_row("the function init_extended_color_pair returns ERR"); #else /* fallback */ init_pair(ncurses_colorpair_index, -1, -1); log_row("init_extended_pair function is not available"); #endif } else { if (init_pair(ncurses_colorpair_index, fgcolor, bgcolor) == ERR) log_row("the function init_pair returns ERR"); } result |= COLOR_PAIR(ncurses_colorpair_index); ColorPairCache[nColorPairCache].fg = fgcolor; ColorPairCache[nColorPairCache].bg = bgcolor; ColorPairCache[nColorPairCache++].color_pair_number = ncurses_colorpair_index++; return result; } /* * Set theme definition */ void initialize_color_pairs(int theme, bool direct_color) { int i; ncurses_colorpair_index = 1; nColorPairCache = 0; ncurses_color_index = 64; nColorCache = 0; has_odd_themedef = false; if (direct_color) { use_direct_color = true; log_row("direct color mode"); } else use_direct_color = false; /* reset colors */ start_color(); use_default_colors(); current_themedef_bank = 0; switch (theme) { case 0: /* mc black theme */ deftheme(PspgTheme_background, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_data, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_border, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_label, PspgDefault, PspgDefault, A_BOLD); deftheme(PspgTheme_rownum, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_recnum, PspgBlack, PspgLightGray, A_BOLD); deftheme(PspgTheme_footer, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_cursor_data, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_cursor_border, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_cursor_label, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_cursor_rownum, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_cursor_recnum, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_cursor_footer, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_arrows, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_scrollbar_background, PspgDefault, PspgDefault, A_DIM); deftheme(PspgTheme_scrollbar_slider, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgDefault, PspgDefault, A_REVERSE); deftheme(PspgTheme_title, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_status_bar, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_prompt_bar, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_info_bar, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_bookmark, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_bookmark_border, PspgBlack, PspgLightGray, A_BOLD); deftheme(PspgTheme_cursor_bookmark, PspgLightGray, PspgBlack, A_BOLD); deftheme(PspgTheme_cross_cursor, PspgDefault, PspgDefault, A_REVERSE); deftheme(PspgTheme_cross_cursor_border, PspgDefault, PspgDefault, A_REVERSE); deftheme(PspgTheme_selection, PspgLightGray, PspgBlack, A_DIM | A_BOLD | A_REVERSE); deftheme(PspgTheme_cursor_selection, PspgLightGray, PspgGray, A_BOLD); deftheme(PspgTheme_pattern, PspgLightGray, PspgBlack, A_BOLD | A_REVERSE); deftheme(PspgTheme_pattern_nohl, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_pattern_line, PspgDefault, PspgDefault, A_REVERSE); deftheme(PspgTheme_pattern_line_border, PspgDefault, PspgDefault, A_REVERSE); deftheme(PspgTheme_pattern_cursor, PspgLightGray, PspgBlack, 0); deftheme(PspgTheme_pattern_line_vertical_cursor, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_pattern_line_vertical_cursor_border, PspgBlack, PspgLightGray, 0); break; case 1: /* mc theme */ deftheme(PspgTheme_background, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_data, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_border, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_label, PspgYellow, PspgBlue, 0); deftheme(PspgTheme_rownum, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_recnum, PspgRed, PspgBlue, A_BOLD); deftheme(PspgTheme_footer, PspgCyan, PspgBlue, 0); deftheme(PspgTheme_cursor_data, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_cursor_border, PspgLightGray, PspgCyan, 0); deftheme(PspgTheme_cursor_label, PspgYellow, PspgCyan, 0); deftheme(PspgTheme_cursor_rownum, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_cursor_recnum, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_cursor_footer, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_scrollbar_arrows, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_scrollbar_background, PspgCyan, PspgBlue, 0); deftheme(PspgTheme_scrollbar_slider, PspgBlue, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlue, PspgWhite, 0); deftheme(PspgTheme_title, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_status_bar, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_prompt_bar, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_info_bar, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_bookmark, PspgWhite, PspgRed, 0); deftheme(PspgTheme_bookmark_border, PspgLightGray, PspgRed, A_BOLD); deftheme(PspgTheme_cursor_bookmark, PspgRed, PspgWhite, A_BOLD); deftheme(PspgTheme_cross_cursor, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cross_cursor_border, PspgLightGray, PspgBrightCyan, 0); deftheme(PspgTheme_selection, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cursor_selection, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_pattern, PspgYellow, PspgGreen, A_BOLD); deftheme(PspgTheme_pattern_nohl, PspgGreen, PspgBlue, 0); deftheme(PspgTheme_pattern_line, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_pattern_line_border, PspgLightGray, PspgGreen, 0); deftheme(PspgTheme_pattern_cursor, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_pattern_line_vertical_cursor, PspgBlack, PspgBrightGreen, 0); deftheme(PspgTheme_pattern_line_vertical_cursor_border, PspgLightGray, PspgBrightGreen, 0); break; case 2: /* FoxPro theme */ deftheme(PspgTheme_background, PspgLightGray, PspgCyan, 0); deftheme(PspgTheme_data, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_border, PspgLightGray, PspgCyan, 0); deftheme(PspgTheme_label, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_rownum, PspgLightGray, PspgCyan, 0); deftheme(PspgTheme_recnum, PspgWhite, PspgBlue, A_BOLD); deftheme(PspgTheme_footer, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_cursor_data, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_border, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_cursor_label, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_rownum, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_recnum, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_footer, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_scrollbar_arrows, PspgYellow, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_background, PspgLightGray, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_slider, PspgYellow, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgYellow, PspgLightGray, A_BOLD); deftheme(PspgTheme_title, PspgYellow, PspgLightGray, 0); deftheme(PspgTheme_status_bar, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_prompt_bar, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_info_bar, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_error_bar, PspgYellow, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_bookmark, PspgWhite, PspgMagenta, A_BOLD); deftheme(PspgTheme_bookmark_border, PspgLightGray, PspgMagenta, 0); deftheme(PspgTheme_cursor_bookmark, PspgWhite, PspgMagenta, A_BOLD | A_REVERSE); deftheme(PspgTheme_cross_cursor, PspgBlack, PspgBrightBlue, 0); deftheme(PspgTheme_cross_cursor_border, PspgLightGray, PspgBrightBlue, 0); deftheme(PspgTheme_selection, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cursor_selection, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_pattern, PspgYellow, PspgGreen, A_BOLD); deftheme(PspgTheme_pattern_nohl, PspgYellow, PspgGreen, 0); deftheme(PspgTheme_pattern_line, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_pattern_line_border, PspgLightGray, PspgGreen, 0); deftheme(PspgTheme_pattern_cursor, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_pattern_line_vertical_cursor, PspgBlack, PspgBrightGreen, 0); deftheme(PspgTheme_pattern_line_vertical_cursor_border, PspgLightGray, PspgBrightGreen, 0); break; case 3: /* PD Menu theme */ deftheme(PspgTheme_background, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_data, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_border, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_label, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_rownum, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_recnum, PspgWhite, PspgCyan, A_BOLD); deftheme(PspgTheme_footer, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_cursor_data, PspgBrightCyan, PspgBlack, 0); deftheme(PspgTheme_cursor_border, PspgCyan, PspgBlack, 0); deftheme(PspgTheme_cursor_label, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_cursor_rownum, PspgBrightCyan, PspgBlack, 0); deftheme(PspgTheme_cursor_recnum, PspgBrightCyan, PspgBlack, 0); deftheme(PspgTheme_cursor_footer, PspgBrightCyan, PspgBlack, 0); deftheme(PspgTheme_scrollbar_arrows, PspgWhite, PspgBlack, A_REVERSE); deftheme(PspgTheme_scrollbar_background, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_scrollbar_slider, PspgBlack, PspgBlue, A_REVERSE); deftheme(PspgTheme_scrollbar_active_slider, PspgWhite, PspgBlack, A_REVERSE); deftheme(PspgTheme_title, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_status_bar, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_prompt_bar, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_info_bar, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_bookmark, PspgWhite, PspgRed, A_BOLD); deftheme(PspgTheme_bookmark_border, PspgWhite, PspgRed, 0); deftheme(PspgTheme_cursor_bookmark, PspgRed, PspgWhite, A_BOLD); deftheme(PspgTheme_cross_cursor, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_cross_cursor_border, PspgCyan, PspgWhite, 0); deftheme(PspgTheme_selection, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cursor_selection, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_pattern, PspgWhite, PspgGreen, A_BOLD); deftheme(PspgTheme_pattern_nohl, PspgWhite, PspgGreen, 0); deftheme(PspgTheme_pattern_line, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_pattern_line_border, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_pattern_cursor, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_pattern_line_vertical_cursor, PspgBlack, PspgBrightGreen, 0); deftheme(PspgTheme_pattern_line_vertical_cursor_border, PspgBlack, PspgBrightGreen, 0); break; case 4: /* White theme */ deftheme(PspgTheme_background, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_data, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_border, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_label, PspgBlack, PspgLightGray, A_BOLD); deftheme(PspgTheme_rownum, PspgLightGray, PspgBlack, 0); deftheme(PspgTheme_recnum, PspgLightGray, PspgBlue, A_BOLD); deftheme(PspgTheme_footer, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_cursor_data, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_border, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_cursor_label, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_rownum, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_recnum, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_footer, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_scrollbar_arrows, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_background, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_scrollbar_slider, PspgBlue, PspgBlack, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_title, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_status_bar, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_prompt_bar, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_info_bar, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_bookmark, PspgWhite, PspgRed, A_BOLD); deftheme(PspgTheme_bookmark_border, PspgWhite, PspgRed, A_BOLD); deftheme(PspgTheme_cursor_bookmark, PspgRed, PspgWhite, A_BOLD); deftheme(PspgTheme_cross_cursor, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_cross_cursor_border, PspgLightGray, PspgBlack, 0); deftheme(PspgTheme_selection, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cursor_selection, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_pattern, PspgYellow, PspgGreen, A_BOLD); deftheme(PspgTheme_pattern_nohl, PspgYellow, PspgGreen, 0); deftheme(PspgTheme_pattern_line, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_pattern_line_border, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_pattern_cursor, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_pattern_line_vertical_cursor, PspgBlack, PspgBrightGreen, 0); deftheme(PspgTheme_pattern_line_vertical_cursor_border, PspgBlack, PspgBrightGreen, 0); break; case 5: /* Mutt theme */ deftheme(PspgTheme_background, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_data, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_border, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_label, PspgBrightCyan, PspgDefault, 0); deftheme(PspgTheme_rownum, PspgLightGray, PspgBlack, 0); deftheme(PspgTheme_recnum, PspgBlack, PspgBlue, A_BOLD); deftheme(PspgTheme_footer, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_cursor_data, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_cursor_border, PspgDefault, PspgCyan, 0); deftheme(PspgTheme_cursor_label, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_cursor_rownum, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_cursor_recnum, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_cursor_footer, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_scrollbar_arrows, PspgLightGray, PspgBlack, A_REVERSE); deftheme(PspgTheme_scrollbar_background, PspgLightGray, PspgGray, 0); deftheme(PspgTheme_scrollbar_slider, PspgBlue, PspgBlack, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlue, PspgWhite, 0); deftheme(PspgTheme_title, PspgBrightGreen, PspgBlue, 0); deftheme(PspgTheme_status_bar, PspgBrightGreen, PspgBlue, 0); deftheme(PspgTheme_prompt_bar, PspgBrightGreen, PspgBlue, 0); deftheme(PspgTheme_info_bar, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_bookmark, PspgWhite, PspgRed, A_BOLD); deftheme(PspgTheme_bookmark_border, PspgWhite, PspgRed, A_BOLD); deftheme(PspgTheme_cursor_bookmark, PspgRed, PspgWhite, A_BOLD); deftheme(PspgTheme_cross_cursor, PspgLightGray, PspgBlack, 0); deftheme(PspgTheme_cross_cursor_border, PspgLightGray, PspgBlack, 0); deftheme(PspgTheme_selection, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cursor_selection, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_pattern, PspgYellow, PspgGreen, A_BOLD); deftheme(PspgTheme_pattern_nohl, PspgYellow, PspgGreen, 0); deftheme(PspgTheme_pattern_line, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_pattern_line_border, PspgDefault, PspgGreen, 0); deftheme(PspgTheme_pattern_cursor, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_pattern_line_vertical_cursor, PspgBlack, PspgBrightGreen, 0); deftheme(PspgTheme_pattern_line_vertical_cursor_border, PspgWhite, PspgBrightGreen, 0); break; case 6: /* PC Fand theme */ deftheme(PspgTheme_background, PspgLightGray, PspgBlack, 0); deftheme(PspgTheme_data, PspgLightGray, PspgBlack, 0); deftheme(PspgTheme_border, PspgLightGray, PspgBlack, 0); deftheme(PspgTheme_label, PspgBrightCyan, PspgBlack, 0); deftheme(PspgTheme_rownum, PspgLightGray, PspgBlack, 0); deftheme(PspgTheme_recnum, PspgLightGray, PspgBlue, A_BOLD); deftheme(PspgTheme_footer, PspgCyan, PspgBlack, 0); deftheme(PspgTheme_cursor_data, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_border, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_cursor_label, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_rownum, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_recnum, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_footer, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_scrollbar_arrows, PspgLightGray, PspgBlack, A_REVERSE); deftheme(PspgTheme_scrollbar_background, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_scrollbar_slider, PspgBlue, PspgBlack, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlue, PspgWhite, 0); deftheme(PspgTheme_title, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_status_bar, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_prompt_bar, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_info_bar, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_bookmark, PspgWhite, PspgRed, A_BOLD); deftheme(PspgTheme_bookmark_border, PspgWhite, PspgRed, 0); deftheme(PspgTheme_cursor_bookmark, PspgRed, PspgWhite, A_BOLD); deftheme(PspgTheme_cross_cursor, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_cross_cursor_border, PspgLightGray, PspgCyan, 0); deftheme(PspgTheme_selection, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cursor_selection, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_pattern, PspgYellow, PspgGreen, A_BOLD); deftheme(PspgTheme_pattern_nohl, PspgYellow, PspgBlack, 0); deftheme(PspgTheme_pattern_line, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_pattern_line_border, PspgLightGray, PspgGreen, 0); deftheme(PspgTheme_pattern_cursor, PspgBrightCyan, PspgBlue, 0); deftheme(PspgTheme_pattern_line_vertical_cursor, PspgBlack, PspgBrightGreen, 0); deftheme(PspgTheme_pattern_line_vertical_cursor_border, PspgLightGray, PspgBrightGreen, 0); break; case 7: /* Green theme */ deftheme(PspgTheme_background, PspgGreen, PspgBlack, 0); deftheme(PspgTheme_data, PspgGreen, PspgBlack, 0); deftheme(PspgTheme_border, PspgGreen, PspgBlack, 0); deftheme(PspgTheme_label, PspgBrightGreen, PspgBlack, 0); deftheme(PspgTheme_rownum, PspgCyan, PspgBlack, 0); deftheme(PspgTheme_recnum, PspgLightGray, PspgBlue, A_BOLD); deftheme(PspgTheme_footer, PspgCyan, PspgBlack, 0); deftheme(PspgTheme_cursor_data, PspgWhite, PspgGreen, 0); deftheme(PspgTheme_cursor_border, PspgBrightGreen, PspgGreen, 0); deftheme(PspgTheme_cursor_label, PspgWhite, PspgGreen, 0); deftheme(PspgTheme_cursor_rownum, PspgWhite, PspgGreen, 0); deftheme(PspgTheme_cursor_recnum, PspgWhite, PspgGreen, 0); deftheme(PspgTheme_cursor_footer, PspgWhite, PspgGreen, 0); deftheme(PspgTheme_scrollbar_arrows, PspgBrightGreen, PspgBlack, 0); deftheme(PspgTheme_scrollbar_background, PspgGreen, PspgBlack, 0); deftheme(PspgTheme_scrollbar_slider, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlack, PspgBrightGreen, 0); deftheme(PspgTheme_title, PspgCyan, PspgBlack, 0); deftheme(PspgTheme_status_bar, PspgCyan, PspgBlack, 0); deftheme(PspgTheme_prompt_bar, PspgCyan, PspgBlack, 0); deftheme(PspgTheme_info_bar, PspgWhite, PspgGreen, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_bookmark, PspgWhite, PspgRed, A_BOLD); deftheme(PspgTheme_bookmark_border, PspgBrightGreen, PspgRed, 0); deftheme(PspgTheme_cursor_bookmark, PspgRed, PspgWhite, A_BOLD); deftheme(PspgTheme_cross_cursor, PspgBlack, PspgBrightGreen, 0); deftheme(PspgTheme_cross_cursor_border, PspgGreen, PspgBrightGreen, 0); deftheme(PspgTheme_selection, PspgBrightGreen, PspgBlack, A_DIM | A_REVERSE); deftheme(PspgTheme_cursor_selection, PspgBlack, PspgBrightGreen, 0); deftheme(PspgTheme_pattern, PspgWhite, PspgCyan, A_BOLD); deftheme(PspgTheme_pattern_nohl, PspgCyan, PspgBlack, 0); deftheme(PspgTheme_pattern_line, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_pattern_line_border, PspgGreen, PspgCyan, 0); deftheme(PspgTheme_pattern_cursor, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_pattern_line_vertical_cursor, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_pattern_line_vertical_cursor_border, PspgGreen, PspgBrightCyan, 0); break; case 8: /* Blue theme */ deftheme(PspgTheme_background, PspgCyan, PspgBlue, 0); deftheme(PspgTheme_data, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_border, PspgCyan, PspgBlue, 0); deftheme(PspgTheme_label, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_rownum, PspgCyan, PspgBlue, 0); deftheme(PspgTheme_recnum, PspgLightGray, PspgBlue, A_BOLD); deftheme(PspgTheme_footer, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_cursor_data, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_cursor_border, PspgBrightCyan, PspgCyan, 0); deftheme(PspgTheme_cursor_label, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_cursor_rownum, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_cursor_recnum, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_cursor_footer, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_scrollbar_arrows, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_scrollbar_background, PspgLightGray, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_slider, PspgBlue, PspgWhite, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlack, PspgBlack, 0); deftheme(PspgTheme_title, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_status_bar, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_prompt_bar, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_info_bar, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_bookmark, PspgWhite, PspgRed, A_BOLD); deftheme(PspgTheme_bookmark_border, PspgLightGray, PspgRed, A_BOLD); deftheme(PspgTheme_cursor_bookmark, PspgRed, PspgWhite, A_BOLD); deftheme(PspgTheme_cross_cursor, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cross_cursor_border, PspgCyan, PspgBrightCyan, 0); deftheme(PspgTheme_selection, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cursor_selection, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_pattern, PspgYellow, PspgGreen, A_BOLD); deftheme(PspgTheme_pattern_nohl, PspgCyan, PspgBlue, 0); deftheme(PspgTheme_pattern_line, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_pattern_line_border, PspgBrightCyan, PspgGreen, 0); deftheme(PspgTheme_pattern_cursor, PspgYellow, PspgBlack, 0); deftheme(PspgTheme_pattern_line_vertical_cursor, PspgBlack, PspgBrightGreen, 0); deftheme(PspgTheme_pattern_line_vertical_cursor_border, PspgCyan, PspgBrightGreen, 0); break; case 9: /* Word Perfect theme */ deftheme(PspgTheme_background, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_data, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_border, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_label, PspgBrightCyan, PspgBlue, 0); deftheme(PspgTheme_rownum, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_recnum, PspgLightGray, PspgBlue, A_BOLD); deftheme(PspgTheme_footer, PspgBrightGreen, PspgBlue, 0); deftheme(PspgTheme_cursor_data, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_cursor_border, PspgLightGray, PspgCyan, 0); deftheme(PspgTheme_cursor_label, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_cursor_rownum, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_cursor_recnum, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_cursor_footer, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_scrollbar_arrows, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_scrollbar_background, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_scrollbar_slider, PspgLightGray, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlue, PspgWhite, 0); deftheme(PspgTheme_title, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_status_bar, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_prompt_bar, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_info_bar, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_bookmark, PspgWhite, PspgRed, A_BOLD); deftheme(PspgTheme_bookmark_border, PspgLightGray, PspgRed, A_BOLD); deftheme(PspgTheme_cursor_bookmark, PspgRed, PspgWhite, A_BOLD); deftheme(PspgTheme_cross_cursor, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cross_cursor_border, PspgLightGray, PspgBrightCyan, 0); deftheme(PspgTheme_selection, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cursor_selection, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_pattern, PspgYellow, PspgGreen, A_BOLD); deftheme(PspgTheme_pattern_nohl, PspgYellow, PspgBlue, 0); deftheme(PspgTheme_pattern_line, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_pattern_line_border, PspgLightGray, PspgGreen, 0); deftheme(PspgTheme_pattern_cursor, PspgYellow, PspgBlack, 0); deftheme(PspgTheme_pattern_line_vertical_cursor, PspgBlack, PspgBrightGreen, 0); deftheme(PspgTheme_pattern_line_vertical_cursor_border, PspgLightGray, PspgBrightGreen, 0); break; case 10: /* low contrast theme */ deftheme(PspgTheme_background, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_data, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_border, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_label, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_rownum, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_recnum, PspgLightGray, PspgBlue, A_BOLD); deftheme(PspgTheme_footer, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_cursor_data, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_border, PspgCyan, PspgBlue, 0); deftheme(PspgTheme_cursor_label, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_rownum, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_recnum, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_footer, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_scrollbar_arrows, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_scrollbar_background, PspgGray, PspgCyan, 0); deftheme(PspgTheme_scrollbar_slider, PspgBlue, PspgBrightCyan, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_title, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_status_bar, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_prompt_bar, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_info_bar, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_bookmark, PspgWhite, PspgRed, A_BOLD); deftheme(PspgTheme_bookmark_border, PspgLightGray, PspgRed, A_BOLD); deftheme(PspgTheme_cursor_bookmark, PspgRed, PspgWhite, A_BOLD); deftheme(PspgTheme_cross_cursor, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_cross_cursor_border, PspgCyan, PspgBlack, 0); deftheme(PspgTheme_selection, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cursor_selection, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_pattern, PspgYellow, PspgGreen, A_BOLD); deftheme(PspgTheme_pattern_nohl, PspgGreen, PspgCyan, 0); deftheme(PspgTheme_pattern_line, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_pattern_line_border, PspgBlue, PspgGreen, 0); deftheme(PspgTheme_pattern_cursor, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_pattern_line_vertical_cursor, PspgBlack, PspgBrightGreen, 0); deftheme(PspgTheme_pattern_line_vertical_cursor_border, PspgBlue, PspgBrightGreen, 0); break; case 11: /* Dark cyan theme */ deftheme(PspgTheme_background, PspgCyan, PspgBlack, 0); deftheme(PspgTheme_data, PspgCyan, PspgBlack, 0); deftheme(PspgTheme_border, PspgCyan, PspgBlack, 0); deftheme(PspgTheme_label, PspgBrightCyan, PspgBlack, 0); deftheme(PspgTheme_rownum, PspgLightGray, PspgBlack, 0); deftheme(PspgTheme_recnum, PspgWhite, PspgBlue, A_BOLD); deftheme(PspgTheme_footer, PspgLightGray, PspgBlack, 0); deftheme(PspgTheme_cursor_data, PspgWhite, PspgMagenta, 0); deftheme(PspgTheme_cursor_border, PspgLightGray, PspgMagenta, 0); deftheme(PspgTheme_cursor_label, PspgWhite, PspgMagenta, 0); deftheme(PspgTheme_cursor_rownum, PspgWhite, PspgMagenta, 0); deftheme(PspgTheme_cursor_recnum, PspgWhite, PspgMagenta, 0); deftheme(PspgTheme_cursor_footer, PspgWhite, PspgMagenta, 0); deftheme(PspgTheme_scrollbar_arrows, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_scrollbar_background, PspgCyan, PspgBlue, 0); deftheme(PspgTheme_scrollbar_slider, PspgBlue, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlue, PspgWhite, 0); deftheme(PspgTheme_title, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_status_bar, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_prompt_bar, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_info_bar, PspgWhite, PspgMagenta, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_bookmark, PspgWhite, PspgRed, A_BOLD); deftheme(PspgTheme_bookmark_border, PspgLightGray, PspgRed, A_BOLD); deftheme(PspgTheme_cursor_bookmark, PspgRed, PspgWhite, A_BOLD); deftheme(PspgTheme_cross_cursor, PspgMagenta, PspgWhite, A_DIM | A_REVERSE); deftheme(PspgTheme_cross_cursor_border, PspgMagenta, PspgLightGray, A_DIM | A_REVERSE); deftheme(PspgTheme_selection, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cursor_selection, PspgBlack, PspgBrightMagenta, 0); deftheme(PspgTheme_pattern, PspgYellow, PspgGreen, A_BOLD); deftheme(PspgTheme_pattern_nohl, PspgYellow, PspgBlack, 0); deftheme(PspgTheme_pattern_line, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_pattern_line_border, PspgCyan, PspgGreen, 0); deftheme(PspgTheme_pattern_cursor, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_pattern_line_vertical_cursor, PspgBlack, PspgBrightGreen, 0); deftheme(PspgTheme_pattern_line_vertical_cursor_border, PspgCyan, PspgBrightGreen, 0); break; case 12: /* Paradox like theme */ deftheme(PspgTheme_background, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_data, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_border, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_label, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_rownum, PspgBrightCyan, PspgCyan, 0); deftheme(PspgTheme_recnum, PspgLightGray, PspgBlue, A_BOLD); deftheme(PspgTheme_footer, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_cursor_data, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_border, PspgCyan, PspgBlue, 0); deftheme(PspgTheme_cursor_label, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_rownum, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_recnum, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_cursor_footer, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_scrollbar_arrows, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_scrollbar_background, PspgCyan, PspgBlue, 0); deftheme(PspgTheme_scrollbar_slider, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlue, PspgBrightCyan, 0); deftheme(PspgTheme_title, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_status_bar, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_prompt_bar, PspgBlue, PspgCyan, 0); deftheme(PspgTheme_info_bar, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_bookmark, PspgWhite, PspgRed, A_BOLD); deftheme(PspgTheme_bookmark_border, PspgLightGray, PspgRed, A_BOLD); deftheme(PspgTheme_cursor_bookmark, PspgRed, PspgWhite, A_BOLD); deftheme(PspgTheme_cross_cursor, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_cross_cursor_border, PspgCyan, PspgBlack, 0); deftheme(PspgTheme_selection, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cursor_selection, PspgBrightCyan, PspgBlack, A_DIM| A_REVERSE); deftheme(PspgTheme_pattern, PspgYellow, PspgGreen, A_BOLD); deftheme(PspgTheme_pattern_nohl, PspgGreen, PspgBlue, 0); deftheme(PspgTheme_pattern_line, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_pattern_line_border, PspgLightGray, PspgGreen, 0); deftheme(PspgTheme_pattern_cursor, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_pattern_line_vertical_cursor, PspgBlack, PspgBrightGreen, 0); deftheme(PspgTheme_pattern_line_vertical_cursor_border, PspgBlue, PspgBrightGreen, 0); break; case 13: /* DBase retro theme */ deftheme(PspgTheme_background, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_data, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_border, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_label, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_rownum, PspgLightGray, PspgBlack, 0); deftheme(PspgTheme_recnum, PspgLightGray, PspgBlue, A_BOLD); deftheme(PspgTheme_footer, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_cursor_data, PspgYellow, PspgCyan, 0); deftheme(PspgTheme_cursor_border, PspgLightGray, PspgCyan, 0); deftheme(PspgTheme_cursor_label, PspgYellow, PspgCyan, 0); deftheme(PspgTheme_cursor_rownum, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_cursor_recnum, PspgYellow, PspgCyan, 0); deftheme(PspgTheme_cursor_footer, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_scrollbar_arrows, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_scrollbar_background, PspgCyan, PspgBlue, 0); deftheme(PspgTheme_scrollbar_slider, PspgBlue, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlue, PspgWhite, 0); deftheme(PspgTheme_title, PspgLightGray, PspgBlack, 0); deftheme(PspgTheme_status_bar, PspgLightGray, PspgBlack, 0); deftheme(PspgTheme_prompt_bar, PspgLightGray, PspgBlack, 0); deftheme(PspgTheme_info_bar, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_bookmark, PspgWhite, PspgRed, A_BOLD); deftheme(PspgTheme_bookmark_border, PspgLightGray, PspgRed, A_BOLD); deftheme(PspgTheme_cursor_bookmark, PspgRed, PspgWhite, A_BOLD); deftheme(PspgTheme_cross_cursor, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cross_cursor_border, PspgLightGray, PspgBrightCyan, 0); deftheme(PspgTheme_selection, PspgWhite, PspgMagenta, 0); deftheme(PspgTheme_cursor_selection, PspgBlack, PspgBrightMagenta, 0); deftheme(PspgTheme_pattern, PspgYellow, PspgGreen, A_BOLD); deftheme(PspgTheme_pattern_nohl, PspgCyan, PspgBlue, 0); deftheme(PspgTheme_pattern_line, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_pattern_line_border, PspgWhite, PspgGreen, 0); deftheme(PspgTheme_pattern_cursor, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_pattern_line_vertical_cursor, PspgBlack, PspgBrightGreen, 0); deftheme(PspgTheme_pattern_line_vertical_cursor_border, PspgLightGray, PspgBrightGreen, 0); break; case 14: /* DBase retro magenta */ deftheme(PspgTheme_background, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_data, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_border, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_label, PspgBrightMagenta, PspgBlue, 0); deftheme(PspgTheme_rownum, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_recnum, PspgLightGray, PspgBlue, A_BOLD); deftheme(PspgTheme_footer, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_cursor_data, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_cursor_border, PspgLightGray, PspgCyan, 0); deftheme(PspgTheme_cursor_label, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_cursor_rownum, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_cursor_recnum, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_cursor_footer, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_scrollbar_arrows, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_scrollbar_background, PspgCyan, PspgBlue, 0); deftheme(PspgTheme_scrollbar_slider, PspgBlue, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlue, PspgWhite, 0); deftheme(PspgTheme_title, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_status_bar, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_prompt_bar, PspgLightGray, PspgBlue, 0); deftheme(PspgTheme_info_bar, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgWhite, PspgBlue, 0); deftheme(PspgTheme_bookmark, PspgWhite, PspgRed, A_BOLD); deftheme(PspgTheme_bookmark_border, PspgLightGray, PspgRed, A_BOLD); deftheme(PspgTheme_cursor_bookmark, PspgRed, PspgWhite, A_BOLD); deftheme(PspgTheme_cross_cursor, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cross_cursor_border, PspgLightGray, PspgBrightCyan, 0); deftheme(PspgTheme_selection, PspgWhite, PspgMagenta, 0); deftheme(PspgTheme_cursor_selection, PspgBlack, PspgBrightMagenta, 0); deftheme(PspgTheme_pattern, PspgYellow, PspgGreen, A_BOLD); deftheme(PspgTheme_pattern_nohl, PspgCyan, PspgBlue, 0); deftheme(PspgTheme_pattern_line, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_pattern_line_border, PspgWhite, PspgGreen, 0); deftheme(PspgTheme_pattern_cursor, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_pattern_line_vertical_cursor, PspgBlack, PspgBrightGreen, 0); deftheme(PspgTheme_pattern_line_vertical_cursor_border, PspgLightGray, PspgBrightGreen, 0); break; case 15: /* Red theme */ deftheme(PspgTheme_background, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_data, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_border, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_label, PspgRed, PspgLightGray, A_DIM); deftheme(PspgTheme_rownum, PspgLightGray, PspgBlack, 0); deftheme(PspgTheme_recnum, PspgWhite, PspgBlue, A_BOLD); deftheme(PspgTheme_footer, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_cursor_data, PspgWhite, PspgRed, 0); deftheme(PspgTheme_cursor_border, PspgBlack, PspgRed, 0); deftheme(PspgTheme_cursor_label, PspgWhite, PspgRed, 0); deftheme(PspgTheme_cursor_rownum, PspgWhite, PspgRed, 0); deftheme(PspgTheme_cursor_recnum, PspgWhite, PspgRed, 0); deftheme(PspgTheme_cursor_footer, PspgWhite, PspgRed, 0); deftheme(PspgTheme_scrollbar_arrows, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_background, PspgGray, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_slider, PspgBlack, PspgBlack, A_DIM | A_REVERSE); deftheme(PspgTheme_scrollbar_active_slider, PspgBlack, PspgRed, 0); deftheme(PspgTheme_title, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_status_bar, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_prompt_bar, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_info_bar, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_bookmark, PspgRed, PspgYellow, A_BOLD); deftheme(PspgTheme_bookmark_border, PspgBlack, PspgYellow, A_BOLD); deftheme(PspgTheme_cursor_bookmark, PspgYellow, PspgRed, A_BOLD); deftheme(PspgTheme_cross_cursor, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_cross_cursor_border, PspgRed, PspgBlack, 0); deftheme(PspgTheme_selection, PspgBlack, PspgYellow, 0); deftheme(PspgTheme_cursor_selection, PspgBlack, PspgBrightRed, 0); deftheme(PspgTheme_pattern, PspgBlack, PspgYellow, A_BOLD); deftheme(PspgTheme_pattern_nohl, PspgCyan, PspgBlue, 0); deftheme(PspgTheme_pattern_line, PspgBlack, PspgWhite, A_BOLD); deftheme(PspgTheme_pattern_line_border, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_pattern_cursor, PspgLightGray, PspgBlack, 0); deftheme(PspgTheme_pattern_line_vertical_cursor, PspgBlack, PspgBrightRed, 0); deftheme(PspgTheme_pattern_line_vertical_cursor_border, PspgBlack, PspgBrightRed, 0); break; case 16: /* Simple theme */ deftheme(PspgTheme_background, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_data, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_border, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_label, PspgDefault, PspgDefault, A_ITALIC); deftheme(PspgTheme_rownum, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_recnum, PspgDefault, PspgDefault, A_BOLD); deftheme(PspgTheme_footer, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_cursor_data, PspgDefault, PspgDefault, A_REVERSE); deftheme(PspgTheme_cursor_border, PspgDefault, PspgDefault, A_REVERSE); deftheme(PspgTheme_cursor_label, PspgDefault, PspgDefault, A_REVERSE); deftheme(PspgTheme_cursor_rownum, PspgDefault, PspgDefault, A_REVERSE); deftheme(PspgTheme_cursor_recnum, PspgDefault, PspgDefault, A_REVERSE); deftheme(PspgTheme_cursor_footer, PspgDefault, PspgDefault, A_REVERSE); deftheme(PspgTheme_scrollbar_arrows, PspgDefault, PspgDefault, A_BOLD); deftheme(PspgTheme_scrollbar_background, PspgDefault, PspgDefault, A_DIM); deftheme(PspgTheme_scrollbar_slider, PspgDefault, PspgDefault, A_REVERSE); deftheme(PspgTheme_scrollbar_active_slider, PspgDefault, PspgDefault, A_REVERSE); deftheme(PspgTheme_title, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_status_bar, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_prompt_bar, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_info_bar, PspgDefault, PspgDefault, A_BOLD); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, A_REVERSE); deftheme(PspgTheme_input_bar, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_bookmark, PspgDefault, PspgDefault, A_UNDERLINE | A_BOLD); deftheme(PspgTheme_bookmark_border, PspgDefault, PspgDefault, A_UNDERLINE | A_BOLD); deftheme(PspgTheme_cursor_bookmark, PspgDefault, PspgDefault, A_UNDERLINE | A_BOLD | A_REVERSE); deftheme(PspgTheme_cross_cursor, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_cross_cursor_border, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_selection, PspgDefault, PspgDefault, A_DIM | A_REVERSE); deftheme(PspgTheme_cursor_selection, PspgDefault, PspgDefault, A_REVERSE | A_UNDERLINE); deftheme(PspgTheme_pattern, PspgDefault, PspgDefault, A_UNDERLINE | A_BOLD); deftheme(PspgTheme_pattern_nohl, PspgDefault, PspgDefault, A_UNDERLINE); deftheme(PspgTheme_pattern_line, PspgDefault, PspgDefault, A_BOLD); deftheme(PspgTheme_pattern_line_border, PspgDefault, PspgDefault, 0); deftheme(PspgTheme_pattern_cursor, PspgDefault, PspgDefault, A_UNDERLINE | A_REVERSE | A_BOLD); deftheme(PspgTheme_pattern_line_vertical_cursor, PspgDefault, PspgDefault, A_REVERSE); deftheme(PspgTheme_pattern_line_vertical_cursor_border, PspgDefault, PspgDefault, A_REVERSE); break; case 17: /* Solar Dark theme */ deftheme_rgb(PspgTheme_background, RGB(576, 631, 631), RGB(0, 169, 212), 0); deftheme_rgb(PspgTheme_data, RGB(557, 616, 624), RGB(0, 169, 212), 0); deftheme_rgb(PspgTheme_border, RGB(576, 631, 631), RGB(0, 169, 212), 0); deftheme_rgb(PspgTheme_label, RGB(149, 545, 824), RGB(0, 169, 212), 0); deftheme_rgb(PspgTheme_rownum, RGB(557, 616, 624), RGB(27, 212, 259), 0); deftheme_rgb(PspgTheme_recnum, RGB(149, 545, 824), RGB(27, 212, 259), A_BOLD); deftheme_rgb(PspgTheme_footer, 0x778899, RGB(0, 169, 212), 0); deftheme_rgb(PspgTheme_cursor_data, RGB(27, 212, 259), RGB(710,537,0), 0); deftheme_rgb(PspgTheme_cursor_border, RGB(27, 212, 259), RGB(710,537,0), 0); deftheme_rgb(PspgTheme_cursor_label, RGB(27, 212, 259), RGB(710,537,0), 0); deftheme_rgb(PspgTheme_cursor_rownum, RGB(27, 212, 259), RGB(710,537,0), 0); deftheme_rgb(PspgTheme_cursor_recnum, RGB(27, 212, 259), RGB(710,537,0), 0); deftheme_rgb(PspgTheme_cursor_footer, RGB(27, 212, 259), RGB(710,537,0), 0); deftheme(PspgTheme_scrollbar_arrows, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_background, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_scrollbar_slider, PspgBlue, PspgBlack, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlue, PspgWhite, 0); deftheme_rgb(PspgTheme_title, RGB(149,545, 824), RGB(27, 212, 259), 0); deftheme_rgb(PspgTheme_status_bar, RGB(576, 631, 631), RGB(27, 212, 259), 0); deftheme_rgb(PspgTheme_prompt_bar, RGB(576, 631, 631), RGB(27, 212, 259), 0); deftheme(PspgTheme_info_bar, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgBlack, PspgLightGray, 0); deftheme_rgb(PspgTheme_bookmark, 0xffffff, RGB(863, 196, 184), A_BOLD); deftheme_rgb(PspgTheme_bookmark_border, 0xffffff, RGB(863, 196, 184), A_BOLD); deftheme_rgb(PspgTheme_cursor_bookmark, RGB(863, 196, 184), 0xffffff, A_BOLD); deftheme_rgb(PspgTheme_cross_cursor, RGB(27, 212, 259), RGB(900, 627, 0), 0); deftheme_rgb(PspgTheme_cross_cursor_border, RGB(27, 212, 259), RGB(900, 627, 0), 0); deftheme(PspgTheme_selection, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cursor_selection, PspgBlack, PspgWhite, 0); deftheme_rgb(PspgTheme_pattern, RGB(933,910, 835), RGB(27, 212, 259), A_BOLD); deftheme_rgb(PspgTheme_pattern_nohl, RGB(576, 631, 631), RGB(0, 169, 212), 0); deftheme_rgb(PspgTheme_pattern_line, RGB(576, 631, 631), RGB(27, 212, 259), 0); deftheme_rgb(PspgTheme_pattern_line_border, RGB(576, 631, 631), RGB(27, 212, 259), 0); deftheme_rgb(PspgTheme_pattern_cursor, RGB(933,910, 835), RGB(710,537,0), 0); deftheme_rgb(PspgTheme_pattern_line_vertical_cursor, RGB(27, 212, 259), RGB(800,627,0), 0); deftheme_rgb(PspgTheme_pattern_line_vertical_cursor_border, RGB(27, 212, 259), RGB(800,627,0), 0); break; case 18: /* Solar Light theme */ deftheme_rgb(PspgTheme_background, RGB(13,98,119), RGB(576, 631, 631), 0); deftheme_rgb(PspgTheme_data, RGB(13,98,119), RGB(576, 631, 631), 0); deftheme_rgb(PspgTheme_border, RGB(13,98,119), RGB(576, 631, 631), 0); deftheme_rgb(PspgTheme_label, 0x001972, RGB(576, 631, 631), 0); deftheme_rgb(PspgTheme_rownum, RGB(18, 141, 172), RGB(557, 616, 624), 0); deftheme_rgb(PspgTheme_recnum, 0xffffff, RGB(557, 616, 624), A_BOLD); deftheme_rgb(PspgTheme_footer, 0xffffff, RGB(576, 631, 631), 0); deftheme_rgb(PspgTheme_cursor_data, RGB(18, 141, 172), RGB(710, 537,0), 0); deftheme_rgb(PspgTheme_cursor_border, RGB(18, 141, 172), RGB(710, 537,0), 0); deftheme_rgb(PspgTheme_cursor_label, RGB(18, 141, 172), RGB(710, 537,0), 0); deftheme_rgb(PspgTheme_cursor_rownum, RGB(18, 141, 172), RGB(710, 537,0), 0); deftheme_rgb(PspgTheme_cursor_recnum, RGB(18, 141, 172), RGB(710, 537,0), 0); deftheme_rgb(PspgTheme_cursor_footer, RGB(18, 141, 172), RGB(710, 537,0), 0); deftheme(PspgTheme_scrollbar_arrows, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_background, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_scrollbar_slider, PspgBlue, PspgBlack, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlue, PspgWhite, 0); deftheme_rgb(PspgTheme_title, 0xffffff, RGB(557, 616, 624), 0); deftheme_rgb(PspgTheme_status_bar, RGB(18, 141, 172), RGB(557, 616, 624), 0); deftheme_rgb(PspgTheme_prompt_bar, RGB(18, 141, 172), RGB(557, 616, 624), 0); deftheme(PspgTheme_info_bar, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgBlack, PspgLightGray, 0); deftheme_rgb(PspgTheme_bookmark, 0xffffff, RGB(863, 196, 184), A_BOLD); deftheme_rgb(PspgTheme_bookmark_border, 0xffffff, RGB(863, 196, 184), A_BOLD); deftheme_rgb(PspgTheme_cursor_bookmark, RGB(863, 196, 184), 0xffffff, A_BOLD); deftheme_rgb(PspgTheme_cross_cursor, RGB(18, 141, 172), RGB(880, 607, 0), 0); deftheme_rgb(PspgTheme_cross_cursor_border, RGB(18, 141, 172), RGB(880, 607, 0), 0); deftheme(PspgTheme_selection, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cursor_selection, PspgBlack, PspgWhite, 0); deftheme_rgb(PspgTheme_pattern, 0xffffff, RGB(557, 616, 624), A_BOLD); deftheme_rgb(PspgTheme_pattern_nohl, RGB(13,98,119), RGB(576, 631, 631), 0); deftheme_rgb(PspgTheme_pattern_line, RGB(110,146, 200), RGB(557, 616, 624), 0); deftheme_rgb(PspgTheme_pattern_line_border, RGB(110,146, 200), RGB(557, 616, 624), 0); deftheme_rgb(PspgTheme_pattern_cursor, RGB(18, 141, 172), RGB(710, 537,0), 0); deftheme_rgb(PspgTheme_pattern_line_vertical_cursor, RGB(18, 141, 172), RGB(780, 607, 0), 0); deftheme_rgb(PspgTheme_pattern_line_vertical_cursor_border, RGB(18, 141, 172), RGB(780, 607, 0), 0); break; case 19: /* Gruvbox light theme */ deftheme_rgb(PspgTheme_background, 0xd7d6af, 0xffffd7, 0); deftheme_rgb(PspgTheme_data, 0x262626, 0xffffd7, 0); deftheme_rgb(PspgTheme_border, 0xd7d6af, 0xffffd7, 0); deftheme_rgb(PspgTheme_label, 0x870000, 0xffffd7, 0); deftheme_rgb(PspgTheme_rownum, 0xafafaf, 0xffffaf, 0); deftheme_rgb(PspgTheme_recnum, 0xffffff, 0xffffd7, A_BOLD); deftheme_rgb(PspgTheme_footer, 0xafafaf, 0xffffd7, 0); deftheme_rgb(PspgTheme_cursor_data, 0x4e4e4e, 0xebdbb2, 0); deftheme_rgb(PspgTheme_cursor_border, 0xafafaf, 0xebdbb2, 0); deftheme_rgb(PspgTheme_cursor_label, 0x870000, 0xebdbb2, 0); deftheme_rgb(PspgTheme_cursor_rownum, 0x4e4e4e, 0xebdbb2, 0); deftheme_rgb(PspgTheme_cursor_recnum, 0x4e4e4e, 0xebdbb2, 0); deftheme_rgb(PspgTheme_cursor_footer, 0x4e4e4e, 0xebdbb2, 0); deftheme(PspgTheme_scrollbar_arrows, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_background, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_scrollbar_slider, PspgBlue, PspgBlack, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlue, PspgWhite, 0); deftheme_rgb(PspgTheme_title, 0x4e4e4e, 0xafaf87, 0); deftheme_rgb(PspgTheme_status_bar, 0x4e4e4e, 0xafaf87, 0); deftheme_rgb(PspgTheme_prompt_bar, 0x4e4e4e, 0xafaf87, 0); deftheme_rgb(PspgTheme_info_bar, 0x4e4e4e, 0xafaf87, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgBlack, PspgLightGray, 0); deftheme_rgb(PspgTheme_bookmark, 0xffffff, 0xd75f5f, A_BOLD); deftheme_rgb(PspgTheme_bookmark_border, 0xffffff, 0xd75f5f, A_BOLD); deftheme_rgb(PspgTheme_cursor_bookmark, 0xd75f5f, 0xffffff, A_BOLD); deftheme_rgb(PspgTheme_cross_cursor, 0x4e4e4e, 0xfbf1c7, 0); deftheme_rgb(PspgTheme_cross_cursor_border, 0xafafaf, 0xfbf1c7, 0); deftheme_rgb(PspgTheme_selection, 0x262626, 0xd7d6af, 0); deftheme_rgb(PspgTheme_cursor_selection, 0x262626, 0xafaf87, 0); deftheme_rgb(PspgTheme_pattern, 0x005f87, 0xd7d6af, A_BOLD); deftheme_rgb(PspgTheme_pattern_nohl, 0xd7d6af, 0xffffd7, 0); deftheme_rgb(PspgTheme_pattern_line, 0x262626, 0xd7d6af, 0); deftheme_rgb(PspgTheme_pattern_line_border, 0xafafaf, 0xd7d6af, 0); deftheme_rgb(PspgTheme_pattern_cursor, 0x005f87, 0xebdbb2, 0); deftheme_rgb(PspgTheme_pattern_line_vertical_cursor, 0x262626, 0xd0cfa0, 0); deftheme_rgb(PspgTheme_pattern_line_vertical_cursor_border, 0xafafaf, 0xd0cfa0, 0); break; case 20: /* Tao theme */ deftheme_rgb(PspgTheme_background, 0x9e9e9e, 0xf1f1f1, 0); deftheme_rgb(PspgTheme_data, 0x616161, 0xf1f1f1, 0); deftheme_rgb(PspgTheme_border, 0x9e9e9e, 0xf1f1f1, 0); deftheme_rgb(PspgTheme_label, 0x000000, 0xf1f1f1, 0); deftheme_rgb(PspgTheme_rownum, 0x9e9e9e, 0xf6f6f6, 0); deftheme_rgb(PspgTheme_recnum, 0xffffff, 0xf1f1f1, A_BOLD); deftheme_rgb(PspgTheme_footer, 0x9e9e9e, 0xf1f1f1, 0); deftheme_rgb(PspgTheme_cursor_data, 0xf6f6f6, 0x4e4e4e, 0); deftheme_rgb(PspgTheme_cursor_border, 0x9e9e9e, 0x4e4e4e, 0); deftheme_rgb(PspgTheme_cursor_label, 0xf6f6f6, 0x4e4e4e, 0); deftheme_rgb(PspgTheme_cursor_rownum, 0xf6f6f6, 0x4e4e4e, 0); deftheme_rgb(PspgTheme_cursor_recnum, 0xf6f6f6, 0x4e4e4e, 0); deftheme_rgb(PspgTheme_cursor_footer, 0xf6f6f6, 0x4e4e4e, 0); deftheme(PspgTheme_scrollbar_arrows, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_background, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_scrollbar_slider, PspgBlue, PspgBlack, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlue, PspgWhite, 0); deftheme_rgb(PspgTheme_title, 0x171717, 0xfcfcfc, 0); deftheme_rgb(PspgTheme_status_bar, 0x171717, 0xfcfcfc, 0); deftheme_rgb(PspgTheme_prompt_bar, 0x171717, 0xfcfcfc, 0); deftheme_rgb(PspgTheme_info_bar, 0x171717, 0xfcfcfc, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgWhite, PspgBlack, A_REVERSE); deftheme_rgb(PspgTheme_bookmark, 0xffffff, 0xd75f5f, 0); deftheme_rgb(PspgTheme_bookmark_border, 0xffffff, 0xd75f5f, A_BOLD); deftheme_rgb(PspgTheme_cursor_bookmark, 0xffffff, 0xd75f5f, A_BOLD | A_REVERSE); deftheme(PspgTheme_cross_cursor, PspgWhite, PspgBlack, 0); deftheme_rgb(PspgTheme_cross_cursor_border, 0x9e9e9e, 0x000000, 0); deftheme_rgb(PspgTheme_selection, 0x171717, 0x9e9e9e, 0); deftheme_rgb(PspgTheme_cursor_selection, 0xf6f6f6, 0x171717, 0); deftheme_rgb(PspgTheme_pattern, 0x252525, 0xdadada, A_BOLD); deftheme_rgb(PspgTheme_pattern_nohl, 0x9e9e9e, 0xf1f1f1, 0); deftheme_rgb(PspgTheme_pattern_line, 0x616161, 0xdadada, 0); deftheme_rgb(PspgTheme_pattern_line_border, 0x9e9e9e, 0xdadada, 0); deftheme_rgb(PspgTheme_pattern_cursor, 0xffffff, 0x4e4e4e, 0); deftheme_rgb(PspgTheme_pattern_line_vertical_cursor, 0xf6f6f6, 0x404040, 0); deftheme_rgb(PspgTheme_pattern_line_vertical_cursor_border, 0x9e9e9e, 0x404040, 0); break; case 21: /* Flatwhite theme */ deftheme_rgb(PspgTheme_background, 0xb9a992, 0xf7f3ee, 0); deftheme_rgb(PspgTheme_data, 0x605a52, 0xf7f3ee, 0); deftheme_rgb(PspgTheme_border, 0xb9a992, 0xf7f3ee, 0); deftheme_rgb(PspgTheme_label, 0x090908, 0xf7f3ee, 0); deftheme_rgb(PspgTheme_rownum, 0xb9a992, 0xf7f3ee, 0); deftheme_rgb(PspgTheme_recnum, 0xffffff, 0xf7f3ee, A_BOLD); deftheme_rgb(PspgTheme_footer, 0x9e9e9e, 0xf7f3ee, 0); deftheme_rgb(PspgTheme_cursor_data, 0xf6f6f6, 0x6a4dff, 0); deftheme_rgb(PspgTheme_cursor_border, 0xb9a992, 0x6a4dff, 0); deftheme_rgb(PspgTheme_cursor_label, 0xf6f6f6, 0x6a4dff, 0); deftheme_rgb(PspgTheme_cursor_rownum, 0xf6f6f6, 0x6a4dff, 0); deftheme_rgb(PspgTheme_cursor_recnum, 0xf6f6f6, 0x6a4dff, 0); deftheme_rgb(PspgTheme_cursor_footer, 0xf6f6f6, 0x6a4dff, 0); deftheme(PspgTheme_scrollbar_arrows, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_background, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_scrollbar_slider, PspgBlue, PspgBlack, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlue, PspgWhite, 0); deftheme_rgb(PspgTheme_title, 0x171717, 0xb9ad92, 0); deftheme_rgb(PspgTheme_status_bar, 0x171717, 0xb9ad92, 0); deftheme_rgb(PspgTheme_prompt_bar, 0x171717, 0xb9ad92, 0); deftheme_rgb(PspgTheme_info_bar, 0x171717, 0xb9ad92, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgBlack, PspgWhite, 0); deftheme_rgb(PspgTheme_bookmark, 0x605a52, 0xf7e0c3, A_BOLD); deftheme_rgb(PspgTheme_bookmark_border, 0xb9a992, 0xf7e0c3, 0); deftheme_rgb(PspgTheme_cursor_bookmark, 0x605a52, 0xf7e0c3, A_BOLD | A_REVERSE); deftheme_rgb(PspgTheme_cross_cursor, 0xffffff, 0x8770ff, 0); deftheme_rgb(PspgTheme_cross_cursor_border, 0xb9a992, 0x8770ff, 0); deftheme_rgb(PspgTheme_selection, 0x90909, 0xb9ad92, 0); deftheme_rgb(PspgTheme_cursor_selection, 0xf6f6f6, 0x171717, 0); deftheme_rgb(PspgTheme_pattern, 0x252525, 0xe3e9c1, A_BOLD); deftheme_rgb(PspgTheme_pattern_nohl, 0xb9a992, 0xf7f3ee, 0); deftheme_rgb(PspgTheme_pattern_line, 0x605a52, 0xe3e9c1, 0); deftheme_rgb(PspgTheme_pattern_line_border, 0xb9a992, 0xe3e9c1, 0); deftheme_rgb(PspgTheme_pattern_cursor, 0xffffff, 0x6a4dff, 0); deftheme_rgb(PspgTheme_pattern_line_vertical_cursor, 0xf6f6f6, 0x5f45e5, 0); deftheme_rgb(PspgTheme_pattern_line_vertical_cursor_border, 0xb9a992, 0x5f45e5, 0); break; case 22: /* Relation pipes theme */ deftheme(PspgTheme_background, PspgGreen, PspgBlack, 0); deftheme(PspgTheme_data, PspgCyan, PspgBlack, 0); deftheme(PspgTheme_border, PspgGreen, PspgBlack, 0); deftheme(PspgTheme_label, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_rownum, PspgWhite, PspgCyan, 0); deftheme(PspgTheme_recnum, PspgRed, PspgBlack, A_BOLD); deftheme(PspgTheme_footer, PspgYellow, PspgBlack, 0); deftheme(PspgTheme_cursor_data, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_cursor_border, PspgBrightGreen, PspgCyan, 0); deftheme(PspgTheme_cursor_label, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_cursor_rownum, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_cursor_recnum, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_cursor_footer, PspgBlack, PspgCyan, 0); deftheme(PspgTheme_scrollbar_arrows, PspgLightGray, PspgBlack, A_REVERSE); deftheme(PspgTheme_scrollbar_background, PspgGray, PspgBlack, A_REVERSE); deftheme(PspgTheme_scrollbar_slider, PspgBlue, PspgLightGray, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_title, PspgBrightRed, PspgBlack, 0); deftheme(PspgTheme_status_bar, PspgBrightRed, PspgBlack, 0); deftheme(PspgTheme_prompt_bar, PspgBrightRed, PspgBlack, 0); deftheme(PspgTheme_info_bar, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_bookmark, PspgWhite, PspgRed, 0); deftheme(PspgTheme_bookmark_border, PspgBrightGreen, PspgRed, A_BOLD); deftheme(PspgTheme_cursor_bookmark, PspgRed, PspgWhite, A_BOLD); deftheme(PspgTheme_cross_cursor, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cross_cursor_border, PspgLightGray, PspgBrightCyan, 0); deftheme(PspgTheme_selection, PspgBlack, PspgBrightCyan, 0); deftheme(PspgTheme_cursor_selection, PspgBlack, PspgWhite, 0); deftheme(PspgTheme_pattern, PspgYellow, PspgGreen, A_BOLD); deftheme(PspgTheme_pattern_nohl, PspgGreen, PspgBlue, 0); deftheme(PspgTheme_pattern_line, PspgBlack, PspgGreen, 0); deftheme(PspgTheme_pattern_line_border, PspgBrightGreen, PspgGreen, 0); deftheme(PspgTheme_pattern_cursor, PspgWhite, PspgBlack, 0); deftheme(PspgTheme_pattern_line_vertical_cursor, PspgBlack, PspgBrightGreen, 0); deftheme(PspgTheme_pattern_line_vertical_cursor_border, PspgLightGray, PspgBrightGreen, 0); break; case 23: /* PaperColour theme */ deftheme_rgb(PspgTheme_background, 0x0087af, 0xeeeeee, 0); deftheme_rgb(PspgTheme_data, 0x090909, 0xeeeeee, 0); deftheme_rgb(PspgTheme_border, 0x0087af, 0xeeeeee, 0); deftheme_rgb(PspgTheme_label, 0xd70087, 0xeeeeee, 0); deftheme_rgb(PspgTheme_rownum, 0x0087af, 0xeeeeee, 0); deftheme_rgb(PspgTheme_recnum, 0xd70087, 0xeeeeee, A_BOLD); deftheme_rgb(PspgTheme_footer, 0x444444, 0xeeeeee, 0); deftheme_rgb(PspgTheme_cursor_data, 0xeeeeee, 0x005f87, 0); deftheme_rgb(PspgTheme_cursor_border, 0x0087af, 0x005f87, 0); deftheme_rgb(PspgTheme_cursor_label, 0xeeeeee, 0x005f87, 0); deftheme_rgb(PspgTheme_cursor_rownum, 0xeeeeee, 0x005f87, 0); deftheme_rgb(PspgTheme_cursor_recnum, 0xeeeeee, 0x005f87, 0); deftheme_rgb(PspgTheme_cursor_footer, 0xeeeeee, 0x005f87, 0); deftheme(PspgTheme_scrollbar_arrows, PspgBlack, PspgLightGray, 0); deftheme_rgb(PspgTheme_scrollbar_background, 0xeeeeee, 0x444444, 0); deftheme_rgb(PspgTheme_scrollbar_slider, 0xeeeeee, 0x005f87, 0); deftheme(PspgTheme_scrollbar_active_slider, PspgBlue, PspgWhite, 0); deftheme_rgb(PspgTheme_title, 0x090909, 0xd0d0d0, 0); deftheme_rgb(PspgTheme_status_bar, 0x090909, 0xd0d0d0, 0); deftheme_rgb(PspgTheme_prompt_bar, 0x090909, 0xd0d0d0, 0); deftheme_rgb(PspgTheme_info_bar, 0x090909, 0xd0d0d0, 0); deftheme(PspgTheme_error_bar, PspgWhite, PspgRed, 0); deftheme(PspgTheme_input_bar, PspgBlack, PspgWhite, 0); deftheme_rgb(PspgTheme_bookmark, 0xfffff0, 0xdf0000, A_BOLD); deftheme_rgb(PspgTheme_bookmark_border, 0x0087af, 0xdf0000, A_BOLD); deftheme_rgb(PspgTheme_cursor_bookmark, 0xfffff0, 0xdf0000, A_BOLD | A_REVERSE); deftheme_rgb(PspgTheme_cross_cursor, 0xffffff, 0x005fd0, 0); deftheme_rgb(PspgTheme_cross_cursor_border, 0x0087af, 0x005fd0, 0); deftheme_rgb(PspgTheme_selection, 0x090909, 0xd0d0d0, 0); deftheme_rgb(PspgTheme_cursor_selection, 0xeeeeee, 0x090909, 0); deftheme_rgb(PspgTheme_pattern, 0x252525, 0xffff87, A_BOLD | A_UNDERLINE); deftheme_rgb(PspgTheme_pattern_nohl, 0x0087af, 0xeeeeee, 0); deftheme_rgb(PspgTheme_pattern_line, 0x090909, 0xffff87, 0); deftheme_rgb(PspgTheme_pattern_line_border, 0x0087af, 0xffff87, 0); deftheme_rgb(PspgTheme_pattern_cursor, 0xffffff, 0x005f87, A_BOLD); deftheme_rgb(PspgTheme_pattern_line_vertical_cursor, 0xeeeeee, 0x005f40, 0); deftheme_rgb(PspgTheme_pattern_line_vertical_cursor_border, 0x0087af, 0x005f40, 0); break; } current_themedef_bank = 1; for (i = 0; i < THEMEDEF_SIZE; i++) themedef[i][1] = themedef[i][0]; switch (theme) { case 1: deftheme(PspgTheme_data, PspgBlue, PspgLightGray, A_REVERSE | A_DIM); deftheme(PspgTheme_border, PspgBlue, PspgLightGray, A_REVERSE | A_DIM); deftheme(PspgTheme_label, PspgBlue, PspgYellow, A_REVERSE | A_DIM); deftheme(PspgTheme_selection, PspgBrightCyan, PspgBlack, A_REVERSE | A_DIM); deftheme(PspgTheme_cursor_selection, PspgBlack, PspgLightGray, 0); deftheme(PspgTheme_cursor_data, PspgCyan, PspgBlack, A_REVERSE | A_DIM); deftheme(PspgTheme_cursor_border, PspgCyan, PspgLightGray, A_REVERSE | A_DIM); deftheme(PspgTheme_cursor_label, PspgCyan, PspgYellow, A_REVERSE | A_DIM); deftheme(PspgTheme_cursor_rownum, PspgCyan, PspgBlack, A_REVERSE | A_DIM); deftheme(PspgTheme_rownum, PspgWhite, PspgCyan, 0); has_odd_themedef = true; break; case 17: /* Solar Dark theme */ deftheme_rgb(PspgTheme_data, RGB(557, 616, 624), RGB(0, 149, 192), 0); deftheme_rgb(PspgTheme_border, RGB(576, 631, 631), RGB(0, 149, 192), 0); deftheme_rgb(PspgTheme_label, RGB(149, 545, 824), RGB(0, 149, 192), 0); deftheme_rgb(PspgTheme_cursor_data, RGB(27, 212, 259), RGB(690, 517, 0), 0); deftheme_rgb(PspgTheme_cursor_border, RGB(27, 212, 259), RGB(690, 517, 0), 0); deftheme_rgb(PspgTheme_cursor_label, RGB(27, 212, 259), RGB(690, 517, 0), 0); deftheme_rgb(PspgTheme_cursor_rownum, RGB(27, 212, 259), RGB(690, 517, 0), 0); has_odd_themedef = true; break; case 18: /* Solar Light theme */ deftheme_rgb(PspgTheme_data, RGB(13,98,119), RGB(546, 601, 601), 0); deftheme_rgb(PspgTheme_border, RGB(13,98,119), RGB(546, 601, 601), 0); deftheme_rgb(PspgTheme_label, 0x001972, RGB(546, 601, 601), 0); deftheme_rgb(PspgTheme_cursor_data, RGB(18, 141, 172), RGB(690, 517, 0), 0); deftheme_rgb(PspgTheme_cursor_border, RGB(18, 141, 172), RGB(690, 517, 0), 0); deftheme_rgb(PspgTheme_cursor_label, RGB(18, 141, 172), RGB(690, 517, 0), 0); deftheme_rgb(PspgTheme_cursor_rownum, RGB(18, 141, 172), RGB(690, 517, 0), 0); has_odd_themedef = true; break; case 19: /* Gruvbox light theme */ deftheme_rgb(PspgTheme_data, 0x262626, 0xf7f7bc, 0); deftheme_rgb(PspgTheme_border, 0xd7d6af, 0xf7f7bc, 0); deftheme_rgb(PspgTheme_label, 0x870000, 0xf7f7bc, 0); deftheme_rgb(PspgTheme_cursor_data, 0x4e4e4e, 0xddcea8, 0); deftheme_rgb(PspgTheme_cursor_border, 0xafafaf, 0xddcea8, 0); deftheme_rgb(PspgTheme_cursor_label, 0x870000, 0xddcea8, 0); deftheme_rgb(PspgTheme_cursor_rownum, 0x4e4e4e, 0xddcea8, 0); deftheme_rgb(PspgTheme_selection, 0x262626, 0xd0cfaa, 0); deftheme_rgb(PspgTheme_cursor_selection, 0x262626, 0x9f9f7c, 0); has_odd_themedef = true; break; case 20: /* Tao theme */ deftheme_rgb(PspgTheme_data, 0x616161, 0xe4e4e4, 0); deftheme_rgb(PspgTheme_border, 0x9e9e9e, 0xe4e4e4, 0); deftheme_rgb(PspgTheme_label, 0x000000, 0xe4e4e4, 0); deftheme_rgb(PspgTheme_cursor_data, 0xf6f6f6, 0x494949, 0); deftheme_rgb(PspgTheme_cursor_border, 0x9e9e9e, 0x494949, 0); deftheme_rgb(PspgTheme_cursor_label, 0xf6f6f6, 0x494949, 0); deftheme_rgb(PspgTheme_cursor_rownum, 0xf6f6f6, 0x494949, 0); deftheme_rgb(PspgTheme_selection, 0x171717, 0x949494, 0); deftheme_rgb(PspgTheme_cursor_selection, 0xf6f6f6, 0x111111, 0); has_odd_themedef = true; break; case 21: /* Flatwhite theme */ deftheme_rgb(PspgTheme_data, 0x605a52, 0xeae0d3, 0); deftheme_rgb(PspgTheme_border, 0xb9a992, 0xeae0d3, 0); deftheme_rgb(PspgTheme_label, 0x090908, 0xeae0d3, 0); deftheme_rgb(PspgTheme_cursor_data, 0xf6f6f6, 0x5534ff, 0); deftheme_rgb(PspgTheme_cursor_border, 0xb9a992, 0x5534ff, 0); deftheme_rgb(PspgTheme_cursor_label, 0xf6f6f6, 0x5534ff, 0); deftheme_rgb(PspgTheme_cursor_rownum, 0xf6f6f6, 0x5534ff, 0); deftheme_rgb(PspgTheme_selection, 0x90909, 0xafa182, 0); deftheme_rgb(PspgTheme_cursor_selection, 0xf6f6f6, 0x101010, 0); has_odd_themedef = true; break; case 23: /* PaperColour theme */ deftheme_rgb(PspgTheme_data, 0x090909, 0xe4e4e4, 0); deftheme_rgb(PspgTheme_border, 0x0087af, 0xe4e4e4, 0); deftheme_rgb(PspgTheme_label, 0xd70087, 0xe4e4e4, 0); deftheme_rgb(PspgTheme_cursor_data, 0xeeeeee, 0x025070, 0); deftheme_rgb(PspgTheme_cursor_border, 0x0087af, 0x025070, 0); deftheme_rgb(PspgTheme_cursor_label, 0xeeeeee, 0x025070, 0); deftheme_rgb(PspgTheme_cursor_rownum, 0xeeeeee, 0x025070, 0); deftheme_rgb(PspgTheme_selection, 0x090909, 0xc0c0c0, 0); deftheme_rgb(PspgTheme_cursor_selection, 0xeeeeee, 0x181717, 0); has_odd_themedef = true; break; } } void initialize_theme(int theme, int window_identifier, bool is_tabular_fmt, bool no_highlight_lines, int themedef_bank, Theme *t) { memset(t, 0, sizeof(Theme)); current_themedef_bank = themedef_bank; t->background_attr = ncurses_theme_attr(PspgTheme_background); /* selected content and cursor in selected area */ t->selection_attr = ncurses_theme_attr(PspgTheme_selection); t->selection_cursor_attr = ncurses_theme_attr(PspgTheme_cursor_selection) ; /* cross cursor - initial setting */ t->cross_cursor_attr = ncurses_theme_attr(PspgTheme_cross_cursor); t->cross_cursor_line_attr = ncurses_theme_attr(PspgTheme_cross_cursor_border); t->pattern_vertical_cursor_attr = ncurses_theme_attr(PspgTheme_pattern_line_vertical_cursor); t->pattern_vertical_cursor_line_attr = ncurses_theme_attr(PspgTheme_pattern_line_vertical_cursor_border); t->line_attr = ncurses_theme_attr(PspgTheme_border); t->bookmark_data_attr = ncurses_theme_attr(PspgTheme_bookmark); t->bookmark_line_attr = ncurses_theme_attr(PspgTheme_bookmark_border); t->cursor_bookmark_attr = ncurses_theme_attr(PspgTheme_cursor_bookmark); t->cursor_line_attr = ncurses_theme_attr(PspgTheme_cursor_border); t->title_attr = ncurses_theme_attr(PspgTheme_title); t->status_bar_attr = ncurses_theme_attr(PspgTheme_status_bar); t->prompt_attr = ncurses_theme_attr(PspgTheme_prompt_bar); t->info_attr = ncurses_theme_attr(PspgTheme_info_bar); t->error_attr = ncurses_theme_attr(PspgTheme_error_bar); t->input_attr = ncurses_theme_attr(PspgTheme_input_bar); t->found_str_attr = no_highlight_lines ? ncurses_theme_attr(PspgTheme_pattern_nohl) : ncurses_theme_attr(PspgTheme_pattern); t->pattern_data_attr = ncurses_theme_attr(PspgTheme_pattern_line); t->pattern_line_attr = ncurses_theme_attr(PspgTheme_pattern_line_border); t->cursor_pattern_attr = ncurses_theme_attr(PspgTheme_pattern_cursor); t->expi_attr = ncurses_theme_attr(PspgTheme_recnum); t->cursor_expi_attr = ncurses_theme_attr(PspgTheme_cursor_recnum); switch (window_identifier) { case WINDOW_LUC: case WINDOW_FIX_ROWS: t->data_attr = ncurses_theme_attr(PspgTheme_label); t->cursor_data_attr = ncurses_theme_attr(PspgTheme_cursor_label); break; case WINDOW_FIX_COLS: t->data_attr = ncurses_theme_attr(PspgTheme_label); t->cursor_data_attr = ncurses_theme_attr(PspgTheme_cursor_label); break; case WINDOW_ROWS: t->data_attr = ncurses_theme_attr(PspgTheme_data); t->cursor_data_attr = ncurses_theme_attr(PspgTheme_cursor_data); break; case WINDOW_FOOTER: t->data_attr = is_tabular_fmt ? ncurses_theme_attr(PspgTheme_footer) : ncurses_theme_attr(PspgTheme_data); t->cursor_data_attr = ncurses_theme_attr(PspgTheme_cursor_footer); break; case WINDOW_ROWNUM: case WINDOW_ROWNUM_LUC: t->data_attr = ncurses_theme_attr(PspgTheme_rownum); t->cursor_data_attr = ncurses_theme_attr(PspgTheme_cursor_rownum); break; case WINDOW_VSCROLLBAR: t->scrollbar_arrow_attr = ncurses_theme_attr(PspgTheme_scrollbar_arrows); t->scrollbar_attr = ncurses_theme_attr(PspgTheme_scrollbar_background); t->scrollbar_slider_attr = ncurses_theme_attr(PspgTheme_scrollbar_slider); t->scrollbar_active_slider_attr = ncurses_theme_attr(PspgTheme_scrollbar_active_slider); switch (theme) { case 2: t->scrollbar_slider_symbol = ACS_DIAMOND; break; case 12: t->scrollbar_slider_symbol = ACS_BLOCK; break; case 0: t->scrollbar_slider_symbol = ACS_BLOCK; t->scrollbar_use_arrows = true; break; case 1: case 3: case 7: case 8: case 13: case 14: case 16: case 15: t->scrollbar_use_arrows = true; break; default: t->scrollbar_slider_symbol = 0; t->scrollbar_use_arrows = false; } break; } if (no_highlight_lines) { t->pattern_data_attr = t->data_attr; t->pattern_line_attr = t->line_attr; } } void applyCustomTheme(PspgThemeLoaderElement *tle, PspgThemeLoaderElement *tle2) { int i; for (i = 0; i < THEMEDEF_SIZE; i++) { if (tle[i].used) { themedef[i][0] = tle[i].te; themedef[i][1] = tle[i].te; } if (tle2[i].used) { themedef[i][1] = tle2[i].te; has_odd_themedef = true; } } } pspg-5.8.1/src/themes.h000066400000000000000000000137251452457446400147520ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * themes.h * themes initialization * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/themes.h * *------------------------------------------------------------------------- */ #ifndef PSPG_THEMES_H #define PSPG_THEMES_H #include #if defined HAVE_NCURSESW_CURSES_H #include #elif defined HAVE_NCURSESW_H #include #elif defined HAVE_NCURSES_CURSES_H #include #elif defined HAVE_NCURSES_H #include #elif defined HAVE_CURSES_H #include #else /* fallback */ #include #endif typedef struct { attr_t background_attr; /* colors for background */ attr_t data_attr; /* colors for data (alphanums) */ attr_t line_attr; /* colors for borders */ attr_t expi_attr; /* colors for expanded headers */ attr_t cursor_data_attr; /* colors for cursor on data positions */ attr_t cursor_line_attr; /* colors for cursor on border position */ attr_t cursor_expi_attr; /* colors for cursor on expanded headers */ attr_t bookmark_data_attr; /* colors for bookmark */ attr_t bookmark_line_attr; /* colors for bookmark line art */ attr_t cursor_bookmark_attr; /* colors for cursor on bookmark line */ attr_t found_str_attr; /* colors for marked string */ attr_t pattern_data_attr; /* colors for pattern line data */ attr_t pattern_line_attr; /* colors for pattern line art */ attr_t cursor_pattern_attr; /* colors for pattern on cursor line */ attr_t title_attr; /* colors for title window */ attr_t info_attr; /* colors for bottom info text */ attr_t prompt_attr; /* less prompt color */ attr_t cursor_rownum_attr; /* colors for cursor rownum column */ attr_t cross_cursor_attr; /* colors for cross horizontal and vertical cursor (data) */ attr_t cross_cursor_line_attr; /* colors for cross horizontal and vertical cursor (border) */ attr_t pattern_vertical_cursor_attr; attr_t pattern_vertical_cursor_line_attr; attr_t error_attr; /* colors for display error */ attr_t input_attr; /* colors for input line */ attr_t scrollbar_arrow_attr; /* colors for scrollbar arrows symbols */ attr_t scrollbar_attr; /* colors for scrollbar background */ attr_t scrollbar_slider_attr; /* colors for scrollbar slider */ attr_t scrollbar_active_slider_attr; /* colors for active scrollbar slider */ chtype scrollbar_slider_symbol; bool scrollbar_use_arrows; attr_t selection_attr; attr_t selection_cursor_attr; attr_t status_bar_attr; } Theme; #define WINDOW_LUC 0 #define WINDOW_FIX_ROWS 1 #define WINDOW_FIX_COLS 2 #define WINDOW_ROWS 3 #define WINDOW_FOOTER 4 #define WINDOW_TOP_BAR 5 #define WINDOW_BOTTOM_BAR 6 #define WINDOW_ROWNUM 7 #define WINDOW_ROWNUM_LUC 8 #define WINDOW_VSCROLLBAR 9 #define WINDOW_ROWS_ODD 10 #define WINDOW_FIX_COLS_ODD 11 #define WINDOW_ROWNUM_ODD 12 typedef enum { PSPG_BLACK_COLOR, PSPG_RED_COLOR, PSPG_GREEN_COLOR, PSPG_BROWN_COLOR, PSPG_BLUE_COLOR, PSPG_MAGENTA_COLOR, PSPG_CYAN_COLOR, PSPG_LIGHT_GRAY_COLOR, PSPG_GRAY_COLOR, PSPG_BRIGHT_RED_COLOR, PSPG_BRIGHT_GREEN_COLOR, PSPG_YELLOW_COLOR, PSPG_BRIGHT_BLUE_COLOR, PSPG_BRIGHT_MAGENTA_COLOR, PSPG_BRIGHT_CYAN_COLOR, PSPG_WHITE_COLOR, PSPG_DEFAULT_COLOR } PspgBasicColor; typedef enum { PSPG_COLOR_BASIC, PSPG_COLOR_256, PSPG_COLOR_RGB } PspgColorPallet; typedef enum { PSPG_INDEPENDENT = 0, PSPG_CURSOR_BOLD, PSPG_LABEL_BOLD, } PspgStyleDependency; typedef struct { PspgColorPallet cp; PspgBasicColor bc; unsigned int rgb; } PspgColor; extern const PspgColor PspgBlack; extern const PspgColor PspgRed; extern const PspgColor PspgGreen; extern const PspgColor PspgBrown; extern const PspgColor PspgBlue; extern const PspgColor PspgMagenta; extern const PspgColor PspgCyan; extern const PspgColor PspgLightGray; extern const PspgColor PspgGray; extern const PspgColor PspgBrightRed; extern const PspgColor PspgBrightGreen; extern const PspgColor PspgYellow; extern const PspgColor PspgBrightBlue; extern const PspgColor PspgBrightMagenta; extern const PspgColor PspgBrightCyan; extern const PspgColor PspgWhite; extern const PspgColor PspgDefault; typedef struct { PspgColor fg; PspgColor bg; int attr; } PspgThemeElement; typedef struct { bool used; PspgThemeElement te; } PspgThemeLoaderElement; typedef enum { PspgTheme_none = 0, PspgTheme_background, PspgTheme_data, PspgTheme_border, PspgTheme_label, PspgTheme_rownum, PspgTheme_recnum, PspgTheme_selection, PspgTheme_footer, PspgTheme_cursor_data, PspgTheme_cursor_border, PspgTheme_cursor_label, PspgTheme_cursor_rownum, PspgTheme_cursor_recnum, PspgTheme_cursor_selection, PspgTheme_cursor_footer, PspgTheme_scrollbar_arrows, PspgTheme_scrollbar_background, PspgTheme_scrollbar_slider, PspgTheme_scrollbar_active_slider, PspgTheme_title, PspgTheme_status_bar, PspgTheme_prompt_bar, PspgTheme_info_bar, PspgTheme_error_bar, PspgTheme_input_bar, PspgTheme_bookmark, PspgTheme_bookmark_border, PspgTheme_cursor_bookmark, PspgTheme_cross_cursor, PspgTheme_cross_cursor_border, PspgTheme_pattern, PspgTheme_pattern_nohl, PspgTheme_pattern_line, PspgTheme_pattern_line_border, PspgTheme_pattern_cursor, PspgTheme_pattern_line_vertical_cursor, PspgTheme_pattern_line_vertical_cursor_border, PspgTheme_error } PspgThemeElements; extern void initialize_color_pairs(int theme, bool direct_color); extern void initialize_theme(int theme, int window_identifier, bool is_tabular_fmt, bool no_highlight_lines, int themedef_bank, Theme *t); extern void applyCustomTheme(PspgThemeLoaderElement *tle, PspgThemeLoaderElement *tle2); extern attr_t ncurses_theme_attr(PspgThemeElements idx); extern bool theme_loader(FILE *theme, PspgThemeLoaderElement *tle, PspgThemeLoaderElement *tle2, int *template, int *menu, bool *is_warning); extern FILE *open_theme_desc(char *name); extern bool has_odd_themedef; #ifndef A_ITALIC #define A_ITALIC A_DIM #endif #define THEMEDEF_SIZE 50 #endif pspg-5.8.1/src/unicode.c000066400000000000000000000535141452457446400151060ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * unicode.c * unicode and wide chars routines * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/unicode.c * *------------------------------------------------------------------------- */ #include #include #include #include "pspg.h" #include "unicode.h" inline static wchar_t utf8_to_unicode(const unsigned char *c); /* * Returns length of utf8 string in chars. */ inline int utf8len(const char *s) { int len = 0; for (; *s; ++s) if ((*s & 0xC0) != 0x80) ++len; return len; } /* * Returns length of utf8 string in chars. */ size_t utf8len_start_stop(const char *start, const char *stop) { size_t len = 0; for (; *start && start < stop ; ++start) if ((*start & 0xC0) != 0x80) ++len; return len; } /* * Returns length of utf8 char in bytes */ inline int utf8charlen(const char ch) { if ((ch & 0x80) == 0) return 1; if ((ch & 0xF0) == 0xF0) return 4; if ((ch & 0xE0) == 0xE0) return 3; if ((ch & 0xC0) == 0xC0) return 2; return 1; } /* * This is an implementation of wcwidth() and wcswidth() as defined in * "The Single UNIX Specification, Version 2, The Open Group, 1997" * * * Markus Kuhn -- 2001-09-08 -- public domain * * customised for PostgreSQL * * original available at : http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c */ struct mbinterval { int first; int last; }; /* auxiliary function for binary search in interval table */ inline static int mbbisearch(wchar_t ucs, const struct mbinterval *table, int max) { int min = 0; if (ucs < table[0].first || ucs > table[max].last) return 0; while (max >= min) { int mid; mid = (min + max) / 2; if (ucs > table[mid].last) min = mid + 1; else if (ucs < table[mid].first) max = mid - 1; else return 1; } return 0; } /* The following functions define the column width of an ISO 10646 * character as follows: * * - The null character (U+0000) has a column width of 0. * * - Other C0/C1 control characters and DEL will lead to a return * value of -1. * * - Non-spacing and enclosing combining characters (general * category code Mn or Me in the Unicode database) have a * column width of 0. * * - Other format characters (general category code Cf in the Unicode * database) and ZERO WIDTH SPACE (U+200B) have a column width of 0. * * - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF) * have a column width of 0. * * - Spacing characters in the East Asian Wide (W) or East Asian * FullWidth (F) category as defined in Unicode Technical * Report #11 have a column width of 2. * * - All remaining characters (including all printable * ISO 8859-1 and WGL4 characters, Unicode control characters, * etc.) have a column width of 1. * * This implementation assumes that wchar_t characters are encoded * in ISO 10646. */ static int ucs_wcwidth(wchar_t ucs) { #include "unicode_combining_table.h" #include "unicode_east_asian_fw_table.h" /* test for 8-bit control characters */ if (ucs == 0) return 0; if (ucs < 0x20 || (ucs >= 0x7f && ucs < 0xa0) || ucs > 0x0010ffff) return -1; /* * binary search in table of non-spacing characters * * XXX: In the official Unicode sources, it is possible for a character to * be described as both non-spacing and wide at the same time. As of * Unicode 13.0, treating the non-spacing property as the determining * factor for display width leads to the correct behavior, so do that * search first. */ if (mbbisearch(ucs, combining, sizeof(combining) / sizeof(struct mbinterval) - 1)) return 0; /* binary search in table of wide characters */ if (mbbisearch(ucs, east_asian_fw, sizeof(east_asian_fw) / sizeof(struct mbinterval) - 1)) return 2; return 1; } /* * Map a Unicode code point to UTF-8. utf8string must have 4 bytes of * space allocated. */ unsigned char * unicode_to_utf8(wchar_t c, unsigned char *utf8string, int *size) { int _size; if (c <= 0x7F) { utf8string[0] = c; _size = 1; } else if (c <= 0x7FF) { utf8string[0] = 0xC0 | ((c >> 6) & 0x1F); utf8string[1] = 0x80 | (c & 0x3F); _size = 2; } else if (c <= 0xFFFF) { utf8string[0] = 0xE0 | ((c >> 12) & 0x0F); utf8string[1] = 0x80 | ((c >> 6) & 0x3F); utf8string[2] = 0x80 | (c & 0x3F); _size = 3; } else { utf8string[0] = 0xF0 | ((c >> 18) & 0x07); utf8string[1] = 0x80 | ((c >> 12) & 0x3F); utf8string[2] = 0x80 | ((c >> 6) & 0x3F); utf8string[3] = 0x80 | (c & 0x3F); _size = 4; } if (size != NULL) *size = _size; return utf8string; } /* * Convert a UTF-8 character to a Unicode code point. * This is a one-character version of pg_utf2wchar_with_len. * * No error checks here, c must point to a long-enough string. */ inline static wchar_t utf8_to_unicode(const unsigned char *c) { if ((*c & 0x80) == 0) return (wchar_t) c[0]; else if ((*c & 0xe0) == 0xc0) return (wchar_t) (((c[0] & 0x1f) << 6) | (c[1] & 0x3f)); else if ((*c & 0xf0) == 0xe0) return (wchar_t) (((c[0] & 0x0f) << 12) | ((c[1] & 0x3f) << 6) | (c[2] & 0x3f)); else if ((*c & 0xf8) == 0xf0) return (wchar_t) (((c[0] & 0x07) << 18) | ((c[1] & 0x3f) << 12) | ((c[2] & 0x3f) << 6) | (c[3] & 0x3f)); else #if __WCHAR_MAX__ > 0x10000 /* that is an invalid code on purpose */ return 0xffffffff; #else /* that is an invalid code on purpose */ return 0xffff; #endif } inline int utf_dsplen(const char *s) { if (*s >= 0x20 && *s < 0x7f) return 1; return ucs_wcwidth(utf8_to_unicode((const unsigned char *) s)); } inline static int _utf_dsplen(const char *s) { return ucs_wcwidth(utf8_to_unicode((const unsigned char *) s)); } /* * Returns display length of \0 ended multibyte string. * The string is limited by max_bytes too. */ int utf_string_dsplen(const char *s, int bytes) { int result = 0; while (bytes > 0) { const char c = *s; if (c == '\t') { do { result++; } while (result % 8 != 0); s += 1; bytes -= 1; } else if (c >= 0x20 && c < 0x7f) { s += 1; result += 1; bytes -= 1; } else if (c) { int clen = utf8charlen(c); result += _utf_dsplen(s); s += clen; bytes -= clen; } else break; } return result; } int utf_string_dsplen_multiline(const char *s, size_t max_bytes, bool *multiline, bool first_only, long int *digits, long int *others, int trim_rows) { int result = -1; int rowlen = 0; int nrows = 0; const char *ptr = s; *multiline = false; while (*ptr != '\0' && max_bytes > 0) { int clen; if (!first_only) { if (*ptr >= '0' && *ptr <= '9') (*digits)++; else if (*ptr != '-' && *ptr != ' ' && *ptr != ':') (*others)++; } if (*ptr == '\n') { *multiline = true; result = rowlen > result ? rowlen : result; max_bytes -= 1; rowlen = 0; ptr += 1; if (first_only) break; if (trim_rows > 0 && ++nrows == trim_rows) break; continue; } clen = utf8charlen(*ptr); if (clen == 1 && *ptr == '\t') { /* this code is designed like pg_wcssize */ do { rowlen++; } while (rowlen % 8 != 0); } else rowlen += utf_dsplen(ptr); ptr += clen; max_bytes -= clen; } result = rowlen > result ? rowlen : result; return result; } /* * This version of previous function uses similar calculation like * readline libarry - and supports terminal tabs. * * This code is based on demo ulfalizer/readline-and-ncurses * */ int readline_utf_string_dsplen(const char *s, size_t max_bytes, size_t offset) { int result = 0; const char *ptr = s; while (*ptr != '\0' && max_bytes > 0) { int clen = utf8charlen(*ptr); int width = utf_dsplen(ptr); if (width > 0) result += width; else if (*ptr == '\t') result = ((result + offset + 8) & ~7) - offset; ptr += clen; max_bytes -= clen; } return result; } /* * following code is taken from starwing/luautf8 library. * */ typedef struct conv_table { wchar_t first; wchar_t last; int step; int offset; } conv_table; typedef struct range_table { wchar_t first; wchar_t last; int step; } range_table; static int convert_char(conv_table *t, size_t size, wchar_t ucs) { size_t begin, end; begin = 0; end = size; while (begin < end) { int mid = (begin + end) / 2; if (t[mid].last < ucs) begin = mid + 1; else if (t[mid].first > ucs) end = mid; else if ((ucs - t[mid].first) % t[mid].step == 0) return ucs + t[mid].offset; else return ucs; } return ucs; } static int find_in_range(range_table *t, size_t size, wchar_t ucs) { size_t begin, end; begin = 0; end = size; while (begin < end) { int mid = (begin + end) / 2; if (t[mid].last < ucs) begin = mid + 1; else if (t[mid].first > ucs) end = mid; else return (ucs - t[mid].first) % t[mid].step == 0; } return 0; } #define table_size(t) (sizeof(t)/sizeof((t)[0])) int utf8_tofold(const char *s) { static struct conv_table tofold_table[] = { { 0x41, 0x5A, 1, 32 }, { 0xB5, 0xB5, 1, 775 }, { 0xC0, 0xD6, 1, 32 }, { 0xD8, 0xDE, 1, 32 }, { 0x100, 0x12E, 2, 1 }, { 0x132, 0x136, 2, 1 }, { 0x139, 0x147, 2, 1 }, { 0x14A, 0x176, 2, 1 }, { 0x178, 0x178, 1, -121 }, { 0x179, 0x17D, 2, 1 }, { 0x17F, 0x17F, 1, -268 }, { 0x181, 0x181, 1, 210 }, { 0x182, 0x184, 2, 1 }, { 0x186, 0x186, 1, 206 }, { 0x187, 0x187, 1, 1 }, { 0x189, 0x18A, 1, 205 }, { 0x18B, 0x18B, 1, 1 }, { 0x18E, 0x18E, 1, 79 }, { 0x18F, 0x18F, 1, 202 }, { 0x190, 0x190, 1, 203 }, { 0x191, 0x191, 1, 1 }, { 0x193, 0x193, 1, 205 }, { 0x194, 0x194, 1, 207 }, { 0x196, 0x196, 1, 211 }, { 0x197, 0x197, 1, 209 }, { 0x198, 0x198, 1, 1 }, { 0x19C, 0x19C, 1, 211 }, { 0x19D, 0x19D, 1, 213 }, { 0x19F, 0x19F, 1, 214 }, { 0x1A0, 0x1A4, 2, 1 }, { 0x1A6, 0x1A6, 1, 218 }, { 0x1A7, 0x1A7, 1, 1 }, { 0x1A9, 0x1A9, 1, 218 }, { 0x1AC, 0x1AC, 1, 1 }, { 0x1AE, 0x1AE, 1, 218 }, { 0x1AF, 0x1AF, 1, 1 }, { 0x1B1, 0x1B2, 1, 217 }, { 0x1B3, 0x1B5, 2, 1 }, { 0x1B7, 0x1B7, 1, 219 }, { 0x1B8, 0x1BC, 4, 1 }, { 0x1C4, 0x1C4, 1, 2 }, { 0x1C5, 0x1C5, 1, 1 }, { 0x1C7, 0x1C7, 1, 2 }, { 0x1C8, 0x1C8, 1, 1 }, { 0x1CA, 0x1CA, 1, 2 }, { 0x1CB, 0x1DB, 2, 1 }, { 0x1DE, 0x1EE, 2, 1 }, { 0x1F1, 0x1F1, 1, 2 }, { 0x1F2, 0x1F4, 2, 1 }, { 0x1F6, 0x1F6, 1, -97 }, { 0x1F7, 0x1F7, 1, -56 }, { 0x1F8, 0x21E, 2, 1 }, { 0x220, 0x220, 1, -130 }, { 0x222, 0x232, 2, 1 }, { 0x23A, 0x23A, 1, 10795 }, { 0x23B, 0x23B, 1, 1 }, { 0x23D, 0x23D, 1, -163 }, { 0x23E, 0x23E, 1, 10792 }, { 0x241, 0x241, 1, 1 }, { 0x243, 0x243, 1, -195 }, { 0x244, 0x244, 1, 69 }, { 0x245, 0x245, 1, 71 }, { 0x246, 0x24E, 2, 1 }, { 0x345, 0x345, 1, 116 }, { 0x370, 0x372, 2, 1 }, { 0x376, 0x376, 1, 1 }, { 0x37F, 0x37F, 1, 116 }, { 0x386, 0x386, 1, 38 }, { 0x388, 0x38A, 1, 37 }, { 0x38C, 0x38C, 1, 64 }, { 0x38E, 0x38F, 1, 63 }, { 0x391, 0x3A1, 1, 32 }, { 0x3A3, 0x3AB, 1, 32 }, { 0x3C2, 0x3C2, 1, 1 }, { 0x3CF, 0x3CF, 1, 8 }, { 0x3D0, 0x3D0, 1, -30 }, { 0x3D1, 0x3D1, 1, -25 }, { 0x3D5, 0x3D5, 1, -15 }, { 0x3D6, 0x3D6, 1, -22 }, { 0x3D8, 0x3EE, 2, 1 }, { 0x3F0, 0x3F0, 1, -54 }, { 0x3F1, 0x3F1, 1, -48 }, { 0x3F4, 0x3F4, 1, -60 }, { 0x3F5, 0x3F5, 1, -64 }, { 0x3F7, 0x3F7, 1, 1 }, { 0x3F9, 0x3F9, 1, -7 }, { 0x3FA, 0x3FA, 1, 1 }, { 0x3FD, 0x3FF, 1, -130 }, { 0x400, 0x40F, 1, 80 }, { 0x410, 0x42F, 1, 32 }, { 0x460, 0x480, 2, 1 }, { 0x48A, 0x4BE, 2, 1 }, { 0x4C0, 0x4C0, 1, 15 }, { 0x4C1, 0x4CD, 2, 1 }, { 0x4D0, 0x52E, 2, 1 }, { 0x531, 0x556, 1, 48 }, { 0x10A0, 0x10C5, 1, 7264 }, { 0x10C7, 0x10CD, 6, 7264 }, { 0x13F8, 0x13FD, 1, -8 }, { 0x1E00, 0x1E94, 2, 1 }, { 0x1E9B, 0x1E9B, 1, -58 }, { 0x1E9E, 0x1E9E, 1, -7615 }, { 0x1EA0, 0x1EFE, 2, 1 }, { 0x1F08, 0x1F0F, 1, -8 }, { 0x1F18, 0x1F1D, 1, -8 }, { 0x1F28, 0x1F2F, 1, -8 }, { 0x1F38, 0x1F3F, 1, -8 }, { 0x1F48, 0x1F4D, 1, -8 }, { 0x1F59, 0x1F5F, 2, -8 }, { 0x1F68, 0x1F6F, 1, -8 }, { 0x1F88, 0x1F8F, 1, -8 }, { 0x1F98, 0x1F9F, 1, -8 }, { 0x1FA8, 0x1FAF, 1, -8 }, { 0x1FB8, 0x1FB9, 1, -8 }, { 0x1FBA, 0x1FBB, 1, -74 }, { 0x1FBC, 0x1FBC, 1, -9 }, { 0x1FBE, 0x1FBE, 1, -7173 }, { 0x1FC8, 0x1FCB, 1, -86 }, { 0x1FCC, 0x1FCC, 1, -9 }, { 0x1FD8, 0x1FD9, 1, -8 }, { 0x1FDA, 0x1FDB, 1, -100 }, { 0x1FE8, 0x1FE9, 1, -8 }, { 0x1FEA, 0x1FEB, 1, -112 }, { 0x1FEC, 0x1FEC, 1, -7 }, { 0x1FF8, 0x1FF9, 1, -128 }, { 0x1FFA, 0x1FFB, 1, -126 }, { 0x1FFC, 0x1FFC, 1, -9 },{ 0x2126, 0x2126, 1, -7517 }, { 0x212A, 0x212A, 1, -8383 }, { 0x212B, 0x212B, 1, -8262 }, { 0x2132, 0x2132, 1, 28 }, { 0x2160, 0x216F, 1, 16 }, { 0x2183, 0x2183, 1, 1 }, { 0x24B6, 0x24CF, 1, 26 }, { 0x2C00, 0x2C2E, 1, 48 }, { 0x2C60, 0x2C60, 1, 1 }, { 0x2C62, 0x2C62, 1, -10743 }, { 0x2C63, 0x2C63, 1, -3814 }, { 0x2C64, 0x2C64, 1, -10727 }, { 0x2C67, 0x2C6B, 2, 1 }, { 0x2C6D, 0x2C6D, 1, -10780 }, { 0x2C6E, 0x2C6E, 1, -10749 }, { 0x2C6F, 0x2C6F, 1, -10783 }, { 0x2C70, 0x2C70, 1, -10782 }, { 0x2C72, 0x2C75, 3, 1 },{ 0x2C7E, 0x2C7F, 1, -10815 }, { 0x2C80, 0x2CE2, 2, 1 }, { 0x2CEB, 0x2CED, 2, 1 }, { 0x2CF2, 0xA640, 31054, 1 }, { 0xA642, 0xA66C, 2, 1 }, { 0xA680, 0xA69A, 2, 1 }, { 0xA722, 0xA72E, 2, 1 }, { 0xA732, 0xA76E, 2, 1 }, { 0xA779, 0xA77B, 2, 1 }, { 0xA77D, 0xA77D, 1, -35332 }, { 0xA77E, 0xA786, 2, 1 }, { 0xA78B, 0xA78B, 1, 1 }, { 0xA78D, 0xA78D, 1, -42280 }, { 0xA790, 0xA792, 2, 1 }, { 0xA796, 0xA7A8, 2, 1 }, { 0xA7AA, 0xA7AA, 1, -42308 }, { 0xA7AB, 0xA7AB, 1, -42319 }, { 0xA7AC, 0xA7AC, 1, -42315 },{ 0xA7AD, 0xA7AD, 1, -42305 }, { 0xA7B0, 0xA7B0, 1, -42258 }, { 0xA7B1, 0xA7B1, 1, -42282 }, { 0xA7B2, 0xA7B2, 1, -42261 }, { 0xA7B3, 0xA7B3, 1, 928 }, { 0xA7B4, 0xA7B6, 2, 1 }, { 0xAB70, 0xABBF, 1, -38864 }, { 0xFF21, 0xFF3A, 1, 32 } #if __WCHAR_MAX__ > 0x10000 , { 0x10400, 0x10427, 1, 40 }, { 0x10C80, 0x10CB2, 1, 64 }, { 0x118A0, 0x118BF, 1, 32 } #endif }; return convert_char(tofold_table, table_size(tofold_table), utf8_to_unicode((const unsigned char *) s)); } const char * utf8_nstrstr_with_sizes(const char *haystack, int haystack_size, const char *needle, int needle_size) { const char *haystack_cur, *needle_cur, *needle_prev; const char *haystack_end, *needle_end; int f1 = 0; int needle_char_len = 0; /* be compiler quiet */ needle_cur = needle; needle_prev = NULL; haystack_cur = haystack; haystack_end = haystack + haystack_size; needle_end = needle + needle_size; while (needle_cur < needle_end) { int f2; if (haystack_cur == haystack_end) return NULL; if (needle_prev != needle_cur) { needle_prev = needle_cur; needle_char_len = utf8charlen(*needle_cur); f1 = utf8_tofold(needle_cur); } f2 = utf8_tofold(haystack_cur); if (f1 == f2) { needle_cur += needle_char_len; haystack_cur += utf8charlen(*haystack_cur); } else { needle_cur = needle; haystack_cur = haystack += utf8charlen(*haystack); } } return haystack; } bool utf8_nstarts_with_with_sizes(const char *str, int str_size, const char *pattern, int pattern_size) { while (pattern_size > 0) { int bytes_c; int bytes_p; if (str_size <= 0) return false; bytes_c = utf8charlen(*str); bytes_p = utf8charlen(*pattern); if (bytes_c != bytes_p || memcmp(str, pattern, bytes_c) != 0) { int f1, f2; f1 = utf8_tofold(str); f2 = utf8_tofold(pattern); if (f1 != f2) return false; } str += bytes_c; str_size -= bytes_c; pattern += bytes_p; pattern_size -= bytes_p; } return true; } const char * utf8_nstrstr(const char *haystack, const char *needle) { const char *haystack_cur, *needle_cur, *needle_prev; int f1 = 0; int needle_char_len = 0; /* be compiler quiet */ needle_cur = needle; needle_prev = NULL; haystack_cur = haystack; while (*needle_cur != '\0') { int f2; if (*haystack_cur == '\0') return NULL; if (needle_prev != needle_cur) { needle_prev = needle_cur; needle_char_len = utf8charlen(*needle_cur); f1 = utf8_tofold(needle_cur); } f2 = utf8_tofold(haystack_cur); if (f1 == f2) { needle_cur += needle_char_len; haystack_cur += utf8charlen(*haystack_cur); } else { needle_cur = needle; haystack_cur = haystack += utf8charlen(*haystack); } } return haystack; } /* * Special string searching, lower chars are case insensitive, * upper chars are case sensitive. */ const char * utf8_nstrstr_ignore_lower_case(const char *haystack, const char *needle) { const char *haystack_cur, *needle_cur, *needle_prev; int f1 = 0; int needle_char_len = 0; bool needle_char_is_upper = false; needle_cur = needle; needle_prev = NULL; haystack_cur = haystack; while (*needle_cur != '\0') { int haystack_char_len; bool eq; if (*haystack_cur == '\0') return NULL; haystack_char_len = utf8charlen(*haystack_cur); if (needle_prev != needle_cur) { needle_prev = needle_cur; needle_char_len = utf8charlen(*needle_cur); needle_char_is_upper = utf8_isupper(needle_cur); f1 = utf8_tofold(needle_cur); } if (needle_char_is_upper) { /* case sensitive */ if (needle_char_len == haystack_char_len) eq = memcmp(haystack_cur, needle_cur, needle_char_len) == 0; else eq = false; } else { int f2; /* case insensitive */ f2 = utf8_tofold(haystack_cur); eq = f1 == f2; } if (eq) { needle_cur += needle_char_len; haystack_cur += haystack_char_len; } else { needle_cur = needle; haystack_cur = haystack += utf8charlen(*haystack); } } return haystack; } bool utf8_isupper(const char *s) { static struct range_table upper_table[] = { { 0x41, 0x5A, 1 }, { 0xC0, 0xD6, 1 }, { 0xD8, 0xDE, 1 }, { 0x100, 0x136, 2 }, { 0x139, 0x147, 2 }, { 0x14A, 0x178, 2 }, { 0x179, 0x17D, 2 }, { 0x181, 0x182, 1 }, { 0x184, 0x186, 2 }, { 0x187, 0x189, 2 }, { 0x18A, 0x18B, 1 }, { 0x18E, 0x191, 1 }, { 0x193, 0x194, 1 }, { 0x196, 0x198, 1 }, { 0x19C, 0x19D, 1 }, { 0x19F, 0x1A0, 1 }, { 0x1A2, 0x1A6, 2 }, { 0x1A7, 0x1A9, 2 }, { 0x1AC, 0x1AE, 2 }, { 0x1AF, 0x1B1, 2 }, { 0x1B2, 0x1B3, 1 }, { 0x1B5, 0x1B7, 2 }, { 0x1B8, 0x1BC, 4 }, { 0x1C4, 0x1CD, 3 }, { 0x1CF, 0x1DB, 2 }, { 0x1DE, 0x1EE, 2 }, { 0x1F1, 0x1F4, 3 }, { 0x1F6, 0x1F8, 1 }, { 0x1FA, 0x232, 2 }, { 0x23A, 0x23B, 1 }, { 0x23D, 0x23E, 1 }, { 0x241, 0x243, 2 }, { 0x244, 0x246, 1 }, { 0x248, 0x24E, 2 }, { 0x370, 0x372, 2 }, { 0x376, 0x37F, 9 }, { 0x386, 0x388, 2 }, { 0x389, 0x38A, 1 }, { 0x38C, 0x38E, 2 }, { 0x38F, 0x391, 2 }, { 0x392, 0x3A1, 1 }, { 0x3A3, 0x3AB, 1 }, { 0x3CF, 0x3D2, 3 }, { 0x3D3, 0x3D4, 1 }, { 0x3D8, 0x3EE, 2 }, { 0x3F4, 0x3F7, 3 }, { 0x3F9, 0x3FA, 1 }, { 0x3FD, 0x42F, 1 }, { 0x460, 0x480, 2 }, { 0x48A, 0x4C0, 2 }, { 0x4C1, 0x4CD, 2 }, { 0x4D0, 0x52E, 2 }, { 0x531, 0x556, 1 }, { 0x10A0, 0x10C5, 1 }, { 0x10C7, 0x10CD, 6 }, { 0x13A0, 0x13F5, 1 }, { 0x1E00, 0x1E94, 2 }, { 0x1E9E, 0x1EFE, 2 }, { 0x1F08, 0x1F0F, 1 }, { 0x1F18, 0x1F1D, 1 }, { 0x1F28, 0x1F2F, 1 }, { 0x1F38, 0x1F3F, 1 }, { 0x1F48, 0x1F4D, 1 }, { 0x1F59, 0x1F5F, 2 }, { 0x1F68, 0x1F6F, 1 }, { 0x1FB8, 0x1FBB, 1 }, { 0x1FC8, 0x1FCB, 1 }, { 0x1FD8, 0x1FDB, 1 }, { 0x1FE8, 0x1FEC, 1 }, { 0x1FF8, 0x1FFB, 1 }, { 0x2102, 0x2107, 5 }, { 0x210B, 0x210D, 1 }, { 0x2110, 0x2112, 1 }, { 0x2115, 0x2119, 4 }, { 0x211A, 0x211D, 1 }, { 0x2124, 0x212A, 2 }, { 0x212B, 0x212D, 1 }, { 0x2130, 0x2133, 1 }, { 0x213E, 0x213F, 1 }, { 0x2145, 0x2160, 27 }, { 0x2161, 0x216F, 1 }, { 0x2183, 0x24B6, 819 }, { 0x24B7, 0x24CF, 1 }, { 0x2C00, 0x2C2E, 1 }, { 0x2C60, 0x2C62, 2 }, { 0x2C63, 0x2C64, 1 }, { 0x2C67, 0x2C6D, 2 }, { 0x2C6E, 0x2C70, 1 }, { 0x2C72, 0x2C75, 3 }, { 0x2C7E, 0x2C80, 1 }, { 0x2C82, 0x2CE2, 2 }, { 0x2CEB, 0x2CED, 2 }, { 0x2CF2, 0xA640, 31054 }, { 0xA642, 0xA66C, 2 }, { 0xA680, 0xA69A, 2 }, { 0xA722, 0xA72E, 2 }, { 0xA732, 0xA76E, 2 }, { 0xA779, 0xA77D, 2 }, { 0xA77E, 0xA786, 2 }, { 0xA78B, 0xA78D, 2 }, { 0xA790, 0xA792, 2 }, { 0xA796, 0xA7AA, 2 }, { 0xA7AB, 0xA7AD, 1 }, { 0xA7B0, 0xA7B4, 1 }, { 0xA7B6, 0xFF21, 22379 }, { 0xFF22, 0xFF3A, 1 } #if __WCHAR_MAX__ > 0x10000 , { 0x10400, 0x10427, 1 }, { 0x10C80, 0x10CB2, 1 }, { 0x118A0, 0x118BF, 1 }, { 0x1D400, 0x1D419, 1 }, { 0x1D434, 0x1D44D, 1 }, { 0x1D468, 0x1D481, 1 }, { 0x1D49C, 0x1D49E, 2 }, { 0x1D49F, 0x1D4A5, 3 }, { 0x1D4A6, 0x1D4A9, 3 }, { 0x1D4AA, 0x1D4AC, 1 }, { 0x1D4AE, 0x1D4B5, 1 }, { 0x1D4D0, 0x1D4E9, 1 }, { 0x1D504, 0x1D505, 1 }, { 0x1D507, 0x1D50A, 1 }, { 0x1D50D, 0x1D514, 1 }, { 0x1D516, 0x1D51C, 1 }, { 0x1D538, 0x1D539, 1 }, { 0x1D53B, 0x1D53E, 1 }, { 0x1D540, 0x1D544, 1 }, { 0x1D546, 0x1D54A, 4 }, { 0x1D54B, 0x1D550, 1 }, { 0x1D56C, 0x1D585, 1 }, { 0x1D5A0, 0x1D5B9, 1 }, { 0x1D5D4, 0x1D5ED, 1 }, { 0x1D608, 0x1D621, 1 }, { 0x1D63C, 0x1D655, 1 }, { 0x1D670, 0x1D689, 1 }, { 0x1D6A8, 0x1D6C0, 1 }, { 0x1D6E2, 0x1D6FA, 1 }, { 0x1D71C, 0x1D734, 1 }, { 0x1D756, 0x1D76E, 1 }, { 0x1D790, 0x1D7A8, 1 }, { 0x1D7CA, 0x1F130, 6502 }, { 0x1F131, 0x1F149, 1 }, { 0x1F150, 0x1F169, 1 }, { 0x1F170, 0x1F189, 1 }, #endif }; return find_in_range(upper_table, table_size(upper_table), utf8_to_unicode((const unsigned char *) s)) != 0; } int utf2wchar_with_len(const unsigned char *from, wchar_t *to, int len) { int cnt = 0; unsigned int c1, c2, c3, c4; while (len > 0 && *from) { if ((*from & 0x80) == 0) { *to = *from++; len--; } else if ((*from & 0xe0) == 0xc0) { if (len < 2) break; /* drop trailing incomplete char */ c1 = *from++ & 0x1f; c2 = *from++ & 0x3f; *to = (c1 << 6) | c2; len -= 2; } else if ((*from & 0xf0) == 0xe0) { if (len < 3) break; /* drop trailing incomplete char */ c1 = *from++ & 0x0f; c2 = *from++ & 0x3f; c3 = *from++ & 0x3f; *to = (c1 << 12) | (c2 << 6) | c3; len -= 3; } else if ((*from & 0xf8) == 0xf0) { if (len < 4) break; /* drop trailing incomplete char */ c1 = *from++ & 0x07; c2 = *from++ & 0x3f; c3 = *from++ & 0x3f; c4 = *from++ & 0x3f; *to = (c1 << 18) | (c2 << 12) | (c3 << 6) | c4; len -= 4; } else { /* treat a bogus char as length 1; not ours to raise error */ *to = *from++; len--; } to++; cnt++; } *to = 0; return cnt; } pspg-5.8.1/src/unicode.h000066400000000000000000000027771452457446400151200ustar00rootroot00000000000000/*------------------------------------------------------------------------- * * unicode.h * unicode and wide chars routines * * Portions Copyright (c) 2017-2023 Pavel Stehule * * IDENTIFICATION * src/unicode.h * *------------------------------------------------------------------------- */ #ifndef PSPG_UNICODE_H #define PSPG_UNICODE_H #include #include extern int utf8len(const char *s); extern size_t utf8len_start_stop(const char *start, const char *stop); extern int utf8charlen(char ch); extern int utf_dsplen(const char *s); extern int utf_string_dsplen(const char *s, int max_bytes); extern int readline_utf_string_dsplen(const char *s, size_t max_bytes, size_t offset); extern const char *utf8_nstrstr(const char *haystack, const char *needle); extern const char *utf8_nstrstr_with_sizes(const char *haystack, int haystack_size, const char *needle, int needle_size); extern const char *utf8_nstrstr_ignore_lower_case(const char *haystack, const char *needle); extern bool utf8_nstarts_with_with_sizes(const char *str, int str_size, const char *pattern, int pattern_size); extern bool utf8_isupper(const char *s); extern unsigned char *unicode_to_utf8(wchar_t c, unsigned char *utf8string, int *size); extern int utf8_tofold(const char *s); extern int utf2wchar_with_len(const unsigned char *from, wchar_t *to, int len); extern int utf_string_dsplen_multiline(const char *s, size_t max_bytes, bool *multiline, bool first_only, long int *digits, long int *others, int trim_rows); #endif pspg-5.8.1/src/unicode_combining_table.h000066400000000000000000000137641452457446400203120ustar00rootroot00000000000000/* generated by src/common/unicode/generate-unicode_combining_table.pl, do not edit */ static const struct mbinterval combining[] = { {0x0300, 0x036F}, {0x0483, 0x0489}, {0x0591, 0x05BD}, {0x05BF, 0x05BF}, {0x05C1, 0x05C2}, {0x05C4, 0x05C5}, {0x05C7, 0x05C7}, {0x0610, 0x061A}, {0x064B, 0x065F}, {0x0670, 0x0670}, {0x06D6, 0x06DC}, {0x06DF, 0x06E4}, {0x06E7, 0x06E8}, {0x06EA, 0x06ED}, {0x0711, 0x0711}, {0x0730, 0x074A}, {0x07A6, 0x07B0}, {0x07EB, 0x07F3}, {0x07FD, 0x07FD}, {0x0816, 0x0819}, {0x081B, 0x0823}, {0x0825, 0x0827}, {0x0829, 0x082D}, {0x0859, 0x085B}, {0x0898, 0x089F}, {0x08CA, 0x08E1}, {0x08E3, 0x0902}, {0x093A, 0x093A}, {0x093C, 0x093C}, {0x0941, 0x0948}, {0x094D, 0x094D}, {0x0951, 0x0957}, {0x0962, 0x0963}, {0x0981, 0x0981}, {0x09BC, 0x09BC}, {0x09C1, 0x09C4}, {0x09CD, 0x09CD}, {0x09E2, 0x09E3}, {0x09FE, 0x0A02}, {0x0A3C, 0x0A3C}, {0x0A41, 0x0A51}, {0x0A70, 0x0A71}, {0x0A75, 0x0A75}, {0x0A81, 0x0A82}, {0x0ABC, 0x0ABC}, {0x0AC1, 0x0AC8}, {0x0ACD, 0x0ACD}, {0x0AE2, 0x0AE3}, {0x0AFA, 0x0B01}, {0x0B3C, 0x0B3C}, {0x0B3F, 0x0B3F}, {0x0B41, 0x0B44}, {0x0B4D, 0x0B56}, {0x0B62, 0x0B63}, {0x0B82, 0x0B82}, {0x0BC0, 0x0BC0}, {0x0BCD, 0x0BCD}, {0x0C00, 0x0C00}, {0x0C04, 0x0C04}, {0x0C3C, 0x0C3C}, {0x0C3E, 0x0C40}, {0x0C46, 0x0C56}, {0x0C62, 0x0C63}, {0x0C81, 0x0C81}, {0x0CBC, 0x0CBC}, {0x0CBF, 0x0CBF}, {0x0CC6, 0x0CC6}, {0x0CCC, 0x0CCD}, {0x0CE2, 0x0CE3}, {0x0D00, 0x0D01}, {0x0D3B, 0x0D3C}, {0x0D41, 0x0D44}, {0x0D4D, 0x0D4D}, {0x0D62, 0x0D63}, {0x0D81, 0x0D81}, {0x0DCA, 0x0DCA}, {0x0DD2, 0x0DD6}, {0x0E31, 0x0E31}, {0x0E34, 0x0E3A}, {0x0E47, 0x0E4E}, {0x0EB1, 0x0EB1}, {0x0EB4, 0x0EBC}, {0x0EC8, 0x0ECD}, {0x0F18, 0x0F19}, {0x0F35, 0x0F35}, {0x0F37, 0x0F37}, {0x0F39, 0x0F39}, {0x0F71, 0x0F7E}, {0x0F80, 0x0F84}, {0x0F86, 0x0F87}, {0x0F8D, 0x0FBC}, {0x0FC6, 0x0FC6}, {0x102D, 0x1030}, {0x1032, 0x1037}, {0x1039, 0x103A}, {0x103D, 0x103E}, {0x1058, 0x1059}, {0x105E, 0x1060}, {0x1071, 0x1074}, {0x1082, 0x1082}, {0x1085, 0x1086}, {0x108D, 0x108D}, {0x109D, 0x109D}, {0x135D, 0x135F}, {0x1712, 0x1714}, {0x1732, 0x1733}, {0x1752, 0x1753}, {0x1772, 0x1773}, {0x17B4, 0x17B5}, {0x17B7, 0x17BD}, {0x17C6, 0x17C6}, {0x17C9, 0x17D3}, {0x17DD, 0x17DD}, {0x180B, 0x180D}, {0x180F, 0x180F}, {0x1885, 0x1886}, {0x18A9, 0x18A9}, {0x1920, 0x1922}, {0x1927, 0x1928}, {0x1932, 0x1932}, {0x1939, 0x193B}, {0x1A17, 0x1A18}, {0x1A1B, 0x1A1B}, {0x1A56, 0x1A56}, {0x1A58, 0x1A60}, {0x1A62, 0x1A62}, {0x1A65, 0x1A6C}, {0x1A73, 0x1A7F}, {0x1AB0, 0x1B03}, {0x1B34, 0x1B34}, {0x1B36, 0x1B3A}, {0x1B3C, 0x1B3C}, {0x1B42, 0x1B42}, {0x1B6B, 0x1B73}, {0x1B80, 0x1B81}, {0x1BA2, 0x1BA5}, {0x1BA8, 0x1BA9}, {0x1BAB, 0x1BAD}, {0x1BE6, 0x1BE6}, {0x1BE8, 0x1BE9}, {0x1BED, 0x1BED}, {0x1BEF, 0x1BF1}, {0x1C2C, 0x1C33}, {0x1C36, 0x1C37}, {0x1CD0, 0x1CD2}, {0x1CD4, 0x1CE0}, {0x1CE2, 0x1CE8}, {0x1CED, 0x1CED}, {0x1CF4, 0x1CF4}, {0x1CF8, 0x1CF9}, {0x1DC0, 0x1DFF}, {0x20D0, 0x20F0}, {0x2CEF, 0x2CF1}, {0x2D7F, 0x2D7F}, {0x2DE0, 0x2DFF}, {0x302A, 0x302D}, {0x3099, 0x309A}, {0xA66F, 0xA672}, {0xA674, 0xA67D}, {0xA69E, 0xA69F}, {0xA6F0, 0xA6F1}, {0xA802, 0xA802}, {0xA806, 0xA806}, {0xA80B, 0xA80B}, {0xA825, 0xA826}, {0xA82C, 0xA82C}, {0xA8C4, 0xA8C5}, {0xA8E0, 0xA8F1}, {0xA8FF, 0xA8FF}, {0xA926, 0xA92D}, {0xA947, 0xA951}, {0xA980, 0xA982}, {0xA9B3, 0xA9B3}, {0xA9B6, 0xA9B9}, {0xA9BC, 0xA9BD}, {0xA9E5, 0xA9E5}, {0xAA29, 0xAA2E}, {0xAA31, 0xAA32}, {0xAA35, 0xAA36}, {0xAA43, 0xAA43}, {0xAA4C, 0xAA4C}, {0xAA7C, 0xAA7C}, {0xAAB0, 0xAAB0}, {0xAAB2, 0xAAB4}, {0xAAB7, 0xAAB8}, {0xAABE, 0xAABF}, {0xAAC1, 0xAAC1}, {0xAAEC, 0xAAED}, {0xAAF6, 0xAAF6}, {0xABE5, 0xABE5}, {0xABE8, 0xABE8}, {0xABED, 0xABED}, {0xFB1E, 0xFB1E}, {0xFE00, 0xFE0F}, {0xFE20, 0xFE2F}, {0x101FD, 0x101FD}, {0x102E0, 0x102E0}, {0x10376, 0x1037A}, {0x10A01, 0x10A0F}, {0x10A38, 0x10A3F}, {0x10AE5, 0x10AE6}, {0x10D24, 0x10D27}, {0x10EAB, 0x10EAC}, {0x10F46, 0x10F50}, {0x10F82, 0x10F85}, {0x11001, 0x11001}, {0x11038, 0x11046}, {0x11070, 0x11070}, {0x11073, 0x11074}, {0x1107F, 0x11081}, {0x110B3, 0x110B6}, {0x110B9, 0x110BA}, {0x110C2, 0x110C2}, {0x11100, 0x11102}, {0x11127, 0x1112B}, {0x1112D, 0x11134}, {0x11173, 0x11173}, {0x11180, 0x11181}, {0x111B6, 0x111BE}, {0x111C9, 0x111CC}, {0x111CF, 0x111CF}, {0x1122F, 0x11231}, {0x11234, 0x11234}, {0x11236, 0x11237}, {0x1123E, 0x1123E}, {0x112DF, 0x112DF}, {0x112E3, 0x112EA}, {0x11300, 0x11301}, {0x1133B, 0x1133C}, {0x11340, 0x11340}, {0x11366, 0x11374}, {0x11438, 0x1143F}, {0x11442, 0x11444}, {0x11446, 0x11446}, {0x1145E, 0x1145E}, {0x114B3, 0x114B8}, {0x114BA, 0x114BA}, {0x114BF, 0x114C0}, {0x114C2, 0x114C3}, {0x115B2, 0x115B5}, {0x115BC, 0x115BD}, {0x115BF, 0x115C0}, {0x115DC, 0x115DD}, {0x11633, 0x1163A}, {0x1163D, 0x1163D}, {0x1163F, 0x11640}, {0x116AB, 0x116AB}, {0x116AD, 0x116AD}, {0x116B0, 0x116B5}, {0x116B7, 0x116B7}, {0x1171D, 0x1171F}, {0x11722, 0x11725}, {0x11727, 0x1172B}, {0x1182F, 0x11837}, {0x11839, 0x1183A}, {0x1193B, 0x1193C}, {0x1193E, 0x1193E}, {0x11943, 0x11943}, {0x119D4, 0x119DB}, {0x119E0, 0x119E0}, {0x11A01, 0x11A0A}, {0x11A33, 0x11A38}, {0x11A3B, 0x11A3E}, {0x11A47, 0x11A47}, {0x11A51, 0x11A56}, {0x11A59, 0x11A5B}, {0x11A8A, 0x11A96}, {0x11A98, 0x11A99}, {0x11C30, 0x11C3D}, {0x11C3F, 0x11C3F}, {0x11C92, 0x11CA7}, {0x11CAA, 0x11CB0}, {0x11CB2, 0x11CB3}, {0x11CB5, 0x11CB6}, {0x11D31, 0x11D45}, {0x11D47, 0x11D47}, {0x11D90, 0x11D91}, {0x11D95, 0x11D95}, {0x11D97, 0x11D97}, {0x11EF3, 0x11EF4}, {0x16AF0, 0x16AF4}, {0x16B30, 0x16B36}, {0x16F4F, 0x16F4F}, {0x16F8F, 0x16F92}, {0x16FE4, 0x16FE4}, {0x1BC9D, 0x1BC9E}, {0x1CF00, 0x1CF46}, {0x1D167, 0x1D169}, {0x1D17B, 0x1D182}, {0x1D185, 0x1D18B}, {0x1D1AA, 0x1D1AD}, {0x1D242, 0x1D244}, {0x1DA00, 0x1DA36}, {0x1DA3B, 0x1DA6C}, {0x1DA75, 0x1DA75}, {0x1DA84, 0x1DA84}, {0x1DA9B, 0x1DAAF}, {0x1E000, 0x1E02A}, {0x1E130, 0x1E136}, {0x1E2AE, 0x1E2AE}, {0x1E2EC, 0x1E2EF}, {0x1E8D0, 0x1E8D6}, {0x1E944, 0x1E94A}, {0xE0100, 0xE01EF}, }; pspg-5.8.1/src/unicode_east_asian_fw_table.h000066400000000000000000000050111452457446400211320ustar00rootroot00000000000000/* generated by src/common/unicode/generate-unicode_east_asian_fw_table.pl, do not edit */ static const struct mbinterval east_asian_fw[] = { {0x1100, 0x115F}, {0x231A, 0x231B}, {0x2329, 0x232A}, {0x23E9, 0x23EC}, {0x23F0, 0x23F0}, {0x23F3, 0x23F3}, {0x25FD, 0x25FE}, {0x2614, 0x2615}, {0x2648, 0x2653}, {0x267F, 0x267F}, {0x2693, 0x2693}, {0x26A1, 0x26A1}, {0x26AA, 0x26AB}, {0x26BD, 0x26BE}, {0x26C4, 0x26C5}, {0x26CE, 0x26CE}, {0x26D4, 0x26D4}, {0x26EA, 0x26EA}, {0x26F2, 0x26F3}, {0x26F5, 0x26F5}, {0x26FA, 0x26FA}, {0x26FD, 0x26FD}, {0x2705, 0x2705}, {0x270A, 0x270B}, {0x2728, 0x2728}, {0x274C, 0x274C}, {0x274E, 0x274E}, {0x2753, 0x2755}, {0x2757, 0x2757}, {0x2795, 0x2797}, {0x27B0, 0x27B0}, {0x27BF, 0x27BF}, {0x2B1B, 0x2B1C}, {0x2B50, 0x2B50}, {0x2B55, 0x2B55}, {0x2E80, 0x2E99}, {0x2E9B, 0x2EF3}, {0x2F00, 0x2FD5}, {0x2FF0, 0x2FFB}, {0x3000, 0x303E}, {0x3041, 0x3096}, {0x3099, 0x30FF}, {0x3105, 0x312F}, {0x3131, 0x318E}, {0x3190, 0x31E3}, {0x31F0, 0x321E}, {0x3220, 0x3247}, {0x3250, 0x4DBF}, {0x4E00, 0xA48C}, {0xA490, 0xA4C6}, {0xA960, 0xA97C}, {0xAC00, 0xD7A3}, {0xF900, 0xFAFF}, {0xFE10, 0xFE19}, {0xFE30, 0xFE52}, {0xFE54, 0xFE66}, {0xFE68, 0xFE6B}, {0xFF01, 0xFF60}, {0xFFE0, 0xFFE6}, {0x16FE0, 0x16FE4}, {0x16FF0, 0x16FF1}, {0x17000, 0x187F7}, {0x18800, 0x18CD5}, {0x18D00, 0x18D08}, {0x1AFF0, 0x1AFF3}, {0x1AFF5, 0x1AFFB}, {0x1AFFD, 0x1AFFE}, {0x1B000, 0x1B122}, {0x1B150, 0x1B152}, {0x1B164, 0x1B167}, {0x1B170, 0x1B2FB}, {0x1F004, 0x1F004}, {0x1F0CF, 0x1F0CF}, {0x1F18E, 0x1F18E}, {0x1F191, 0x1F19A}, {0x1F200, 0x1F202}, {0x1F210, 0x1F23B}, {0x1F240, 0x1F248}, {0x1F250, 0x1F251}, {0x1F260, 0x1F265}, {0x1F300, 0x1F320}, {0x1F32D, 0x1F335}, {0x1F337, 0x1F37C}, {0x1F37E, 0x1F393}, {0x1F3A0, 0x1F3CA}, {0x1F3CF, 0x1F3D3}, {0x1F3E0, 0x1F3F0}, {0x1F3F4, 0x1F3F4}, {0x1F3F8, 0x1F43E}, {0x1F440, 0x1F440}, {0x1F442, 0x1F4FC}, {0x1F4FF, 0x1F53D}, {0x1F54B, 0x1F54E}, {0x1F550, 0x1F567}, {0x1F57A, 0x1F57A}, {0x1F595, 0x1F596}, {0x1F5A4, 0x1F5A4}, {0x1F5FB, 0x1F64F}, {0x1F680, 0x1F6C5}, {0x1F6CC, 0x1F6CC}, {0x1F6D0, 0x1F6D2}, {0x1F6D5, 0x1F6D7}, {0x1F6DD, 0x1F6DF}, {0x1F6EB, 0x1F6EC}, {0x1F6F4, 0x1F6FC}, {0x1F7E0, 0x1F7EB}, {0x1F7F0, 0x1F7F0}, {0x1F90C, 0x1F93A}, {0x1F93C, 0x1F945}, {0x1F947, 0x1F9FF}, {0x1FA70, 0x1FA74}, {0x1FA78, 0x1FA7C}, {0x1FA80, 0x1FA86}, {0x1FA90, 0x1FAAC}, {0x1FAB0, 0x1FABA}, {0x1FAC0, 0x1FAC5}, {0x1FAD0, 0x1FAD9}, {0x1FAE0, 0x1FAE7}, {0x1FAF0, 0x1FAF6}, {0x20000, 0x2FFFD}, {0x30000, 0x3FFFD}, }; pspg-5.8.1/tests/000077500000000000000000000000001452457446400136575ustar00rootroot00000000000000pspg-5.8.1/tests/ascii.txt000066400000000000000000005563001452457446400155210ustar00rootroot00000000000000+-------------------------------------------+--------------+---------+-----------+----------+-------+-------------+---------------+----------+-----------+---------------+---------------+-------------+-------------+----------------+---------+----------+-----------+------------+------------+-------------+----------------+----------------+----------------+---------------------+----------------+--------------+----------------+--------------+------------+------------------------------------------+-------------------------+--------------+ | relname | relnamespace | reltype | reloftype | relowner | relam | relfilenode | reltablespace | relpages | reltuples | relallvisible | reltoastrelid | relhasindex | relisshared | relpersistence | relkind | relnatts | relchecks | relhasoids | relhaspkey | relhasrules | relhastriggers | relhassubclass | relrowsecurity | relforcerowsecurity | relispopulated | relreplident | relispartition | relfrozenxid | relminmxid | relacl | reloptions | relpartbound | +-------------------------------------------+--------------+---------+-----------+----------+-------+-------------+---------------+----------+-----------+---------------+---------------+-------------+-------------+----------------+---------+----------+-----------+------------+------------+-------------+----------------+----------------+----------------+---------------------+----------------+--------------+----------------+--------------+------------+------------------------------------------+-------------------------+--------------+ | test | 2200 | 16387 | 0 | 16384 | 0 | 16391 | 0 | 0 | 0 | 0 | 16388 | f | f | p | r | 1 | 0 | f | f | f | f | f | f | f | t | d | f | 560 | 1 | | | | | pg_toast_16385 | 99 | 16389 | 0 | 16384 | 0 | 16392 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | t | f | f | f | f | f | t | n | f | 560 | 1 | | | | | pg_toast_16385_index | 99 | 0 | 0 | 16384 | 403 | 16393 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_statistic | 11 | 11306 | 0 | 10 | 0 | 2619 | 0 | 16 | 395 | 16 | 2840 | t | f | p | r | 26 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres} | | | | pg_type | 11 | 71 | 0 | 10 | 0 | 0 | 0 | 9 | 382 | 9 | 0 | t | f | p | r | 30 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_toast_2604 | 99 | 11563 | 0 | 10 | 0 | 2830 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | | | | | pg_toast_2604_index | 99 | 0 | 0 | 10 | 403 | 2831 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_toast_2606 | 99 | 11564 | 0 | 10 | 0 | 2832 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | | | | | pg_toast_2606_index | 99 | 0 | 0 | 10 | 403 | 2833 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_toast_2609 | 99 | 11565 | 0 | 10 | 0 | 2834 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | | | | | pg_toast_2609_index | 99 | 0 | 0 | 10 | 403 | 2835 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_toast_1255 | 99 | 11566 | 0 | 10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | | | | | pg_toast_1255_index | 99 | 0 | 0 | 10 | 403 | 0 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_toast_2618 | 99 | 11567 | 0 | 10 | 0 | 2838 | 0 | 52 | 228 | 52 | 0 | t | f | p | t | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | | | | | pg_toast_2618_index | 99 | 0 | 0 | 10 | 403 | 2839 | 0 | 2 | 228 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_toast_3596 | 99 | 11568 | 0 | 10 | 0 | 3598 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | | | | | pg_toast_3596_index | 99 | 0 | 0 | 10 | 403 | 3599 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_toast_2619 | 99 | 11569 | 0 | 10 | 0 | 2840 | 0 | 3 | 13 | 3 | 0 | t | f | p | t | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | | | | | pg_toast_2619_index | 99 | 0 | 0 | 10 | 403 | 2841 | 0 | 2 | 13 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_toast_3381 | 99 | 11570 | 0 | 10 | 0 | 3439 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | | | | | pg_toast_3381_index | 99 | 0 | 0 | 10 | 403 | 3440 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_toast_2620 | 99 | 11571 | 0 | 10 | 0 | 2336 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | | | | | pg_toast_2620_index | 99 | 0 | 0 | 10 | 403 | 2337 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_toast_2396 | 99 | 11572 | 0 | 10 | 0 | 0 | 1664 | 0 | 0 | 0 | 0 | t | t | p | t | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | | | | | pg_toast_2396_index | 99 | 0 | 0 | 10 | 403 | 0 | 1664 | 1 | 0 | 0 | 0 | f | t | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_toast_2964 | 99 | 11573 | 0 | 10 | 0 | 0 | 1664 | 0 | 0 | 0 | 0 | t | t | p | t | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | | | | | pg_toast_2964_index | 99 | 0 | 0 | 10 | 403 | 0 | 1664 | 1 | 0 | 0 | 0 | f | t | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_toast_3592 | 99 | 11574 | 0 | 10 | 0 | 0 | 1664 | 0 | 0 | 0 | 0 | t | t | p | t | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | | | | | pg_toast_3592_index | 99 | 0 | 0 | 10 | 403 | 0 | 1664 | 1 | 0 | 0 | 0 | f | t | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_aggregate_fnoid_index | 11 | 0 | 0 | 10 | 403 | 2650 | 0 | 2 | 142 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_am_name_index | 11 | 0 | 0 | 10 | 403 | 2651 | 0 | 2 | 6 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_am_oid_index | 11 | 0 | 0 | 10 | 403 | 2652 | 0 | 2 | 6 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_amop_fam_strat_index | 11 | 0 | 0 | 10 | 403 | 2653 | 0 | 5 | 725 | 0 | 0 | f | f | p | i | 4 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_amop_opr_fam_index | 11 | 0 | 0 | 10 | 403 | 2654 | 0 | 5 | 725 | 0 | 0 | f | f | p | i | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_amop_oid_index | 11 | 0 | 0 | 10 | 403 | 2756 | 0 | 4 | 725 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_amproc_fam_proc_index | 11 | 0 | 0 | 10 | 403 | 2655 | 0 | 4 | 442 | 0 | 0 | f | f | p | i | 4 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_amproc_oid_index | 11 | 0 | 0 | 10 | 403 | 2757 | 0 | 4 | 442 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_policy | 11 | 11550 | 0 | 10 | 0 | 3256 | 0 | 0 | 0 | 0 | 0 | t | f | p | r | 7 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_attrdef_adrelid_adnum_index | 11 | 0 | 0 | 10 | 403 | 2656 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_attrdef_oid_index | 11 | 0 | 0 | 10 | 403 | 2657 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_attribute_relid_attnam_index | 11 | 0 | 0 | 10 | 403 | 0 | 0 | 13 | 2582 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_attribute_relid_attnum_index | 11 | 0 | 0 | 10 | 403 | 0 | 0 | 10 | 2582 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_authid_rolname_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | 2 | 6 | 0 | 0 | f | t | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_authid_oid_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | 2 | 6 | 0 | 0 | f | t | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_auth_members_role_member_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | 2 | 3 | 0 | 0 | f | t | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_auth_members_member_role_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | 2 | 3 | 0 | 0 | f | t | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_cast_oid_index | 11 | 0 | 0 | 10 | 403 | 2660 | 0 | 2 | 219 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_cast_source_target_index | 11 | 0 | 0 | 10 | 403 | 2661 | 0 | 2 | 219 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_class_oid_index | 11 | 0 | 0 | 10 | 403 | 0 | 0 | 4 | 341 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_class_relname_nsp_index | 11 | 0 | 0 | 10 | 403 | 0 | 0 | 6 | 341 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_class_tblspc_relfilenode_index | 11 | 0 | 0 | 10 | 403 | 0 | 0 | 5 | 341 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_collation_name_enc_nsp_index | 11 | 0 | 0 | 10 | 403 | 3164 | 0 | 9 | 982 | 0 | 0 | f | f | p | i | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_collation_oid_index | 11 | 0 | 0 | 10 | 403 | 3085 | 0 | 5 | 982 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_constraint_conname_nsp_index | 11 | 0 | 0 | 10 | 403 | 2664 | 0 | 2 | 2 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_constraint_conrelid_index | 11 | 0 | 0 | 10 | 403 | 2665 | 0 | 2 | 2 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_constraint_contypid_index | 11 | 0 | 0 | 10 | 403 | 2666 | 0 | 2 | 2 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_constraint_oid_index | 11 | 0 | 0 | 10 | 403 | 2667 | 0 | 2 | 2 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_conversion_default_index | 11 | 0 | 0 | 10 | 403 | 2668 | 0 | 2 | 132 | 0 | 0 | f | f | p | i | 4 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_conversion_name_nsp_index | 11 | 0 | 0 | 10 | 403 | 2669 | 0 | 2 | 132 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_conversion_oid_index | 11 | 0 | 0 | 10 | 403 | 2670 | 0 | 2 | 132 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_database_datname_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | 2 | 2 | 0 | 0 | f | t | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_database_oid_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | 2 | 2 | 0 | 0 | f | t | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_depend_depender_index | 11 | 0 | 0 | 10 | 403 | 2673 | 0 | 41 | 7444 | 0 | 0 | f | f | p | i | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_depend_reference_index | 11 | 0 | 0 | 10 | 403 | 2674 | 0 | 46 | 7444 | 0 | 0 | f | f | p | i | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_description_o_c_o_index | 11 | 0 | 0 | 10 | 403 | 2675 | 0 | 22 | 3986 | 0 | 0 | f | f | p | i | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_shdescription_o_c_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | 2 | 1 | 0 | 0 | f | t | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_enum_oid_index | 11 | 0 | 0 | 10 | 403 | 3502 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_enum_typid_label_index | 11 | 0 | 0 | 10 | 403 | 3503 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_enum_typid_sortorder_index | 11 | 0 | 0 | 10 | 403 | 3534 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_index_indrelid_index | 11 | 0 | 0 | 10 | 403 | 2678 | 0 | 2 | 134 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_index_indexrelid_index | 11 | 0 | 0 | 10 | 403 | 2679 | 0 | 2 | 134 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_inherits_relid_seqno_index | 11 | 0 | 0 | 10 | 403 | 2680 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_inherits_parent_index | 11 | 0 | 0 | 10 | 403 | 2187 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_init_privs_o_c_o_index | 11 | 0 | 0 | 10 | 403 | 3395 | 0 | 2 | 152 | 0 | 0 | f | f | p | i | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_language_name_index | 11 | 0 | 0 | 10 | 403 | 2681 | 0 | 2 | 4 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_language_oid_index | 11 | 0 | 0 | 10 | 403 | 2682 | 0 | 2 | 4 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_largeobject_loid_pn_index | 11 | 0 | 0 | 10 | 403 | 2683 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_largeobject_metadata_oid_index | 11 | 0 | 0 | 10 | 403 | 2996 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_statistic_ext_oid_index | 11 | 0 | 0 | 10 | 403 | 3380 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_statistic_ext_name_index | 11 | 0 | 0 | 10 | 403 | 3997 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_statistic_ext_relid_index | 11 | 0 | 0 | 10 | 403 | 3379 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_namespace_nspname_index | 11 | 0 | 0 | 10 | 403 | 2684 | 0 | 2 | 6 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_namespace_oid_index | 11 | 0 | 0 | 10 | 403 | 2685 | 0 | 2 | 6 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_opclass_am_name_nsp_index | 11 | 0 | 0 | 10 | 403 | 2686 | 0 | 2 | 134 | 0 | 0 | f | f | p | i | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_opclass_oid_index | 11 | 0 | 0 | 10 | 403 | 2687 | 0 | 2 | 134 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_operator_oid_index | 11 | 0 | 0 | 10 | 403 | 2688 | 0 | 5 | 793 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_operator_oprname_l_r_n_index | 11 | 0 | 0 | 10 | 403 | 2689 | 0 | 6 | 793 | 0 | 0 | f | f | p | i | 4 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_opfamily_am_name_nsp_index | 11 | 0 | 0 | 10 | 403 | 2754 | 0 | 2 | 116 | 0 | 0 | f | f | p | i | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_opfamily_oid_index | 11 | 0 | 0 | 10 | 403 | 2755 | 0 | 2 | 116 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_pltemplate_name_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | 2 | 8 | 0 | 0 | f | t | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_proc_oid_index | 11 | 0 | 0 | 10 | 403 | 0 | 0 | 10 | 2949 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_proc_proname_args_nsp_index | 11 | 0 | 0 | 10 | 403 | 0 | 0 | 33 | 2949 | 0 | 0 | f | f | p | i | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_rewrite_oid_index | 11 | 0 | 0 | 10 | 403 | 2692 | 0 | 2 | 121 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_rewrite_rel_rulename_index | 11 | 0 | 0 | 10 | 403 | 2693 | 0 | 2 | 121 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_sequence_seqrelid_index | 11 | 0 | 0 | 10 | 403 | 5002 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_shdepend_depender_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | 2 | 6 | 0 | 0 | f | t | p | i | 4 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_shdepend_reference_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | 2 | 6 | 0 | 0 | f | t | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_statistic_relid_att_inh_index | 11 | 0 | 0 | 10 | 403 | 2696 | 0 | 2 | 395 | 0 | 0 | f | f | p | i | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_tablespace_oid_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | 2 | 2 | 0 | 0 | f | t | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_tablespace_spcname_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | 2 | 2 | 0 | 0 | f | t | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_transform_oid_index | 11 | 0 | 0 | 10 | 403 | 3574 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_transform_type_lang_index | 11 | 0 | 0 | 10 | 403 | 3575 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_trigger_tgconstraint_index | 11 | 0 | 0 | 10 | 403 | 2699 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_trigger_tgrelid_tgname_index | 11 | 0 | 0 | 10 | 403 | 2701 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_trigger_oid_index | 11 | 0 | 0 | 10 | 403 | 2702 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_event_trigger_evtname_index | 11 | 0 | 0 | 10 | 403 | 3467 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_event_trigger_oid_index | 11 | 0 | 0 | 10 | 403 | 3468 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_ts_config_cfgname_index | 11 | 0 | 0 | 10 | 403 | 3608 | 0 | 2 | 16 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_ts_config_oid_index | 11 | 0 | 0 | 10 | 403 | 3712 | 0 | 2 | 16 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_ts_config_map_index | 11 | 0 | 0 | 10 | 403 | 3609 | 0 | 4 | 304 | 0 | 0 | f | f | p | i | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_ts_dict_dictname_index | 11 | 0 | 0 | 10 | 403 | 3604 | 0 | 2 | 16 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_ts_dict_oid_index | 11 | 0 | 0 | 10 | 403 | 3605 | 0 | 2 | 16 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_ts_parser_prsname_index | 11 | 0 | 0 | 10 | 403 | 3606 | 0 | 2 | 1 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_ts_parser_oid_index | 11 | 0 | 0 | 10 | 403 | 3607 | 0 | 2 | 1 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_ts_template_tmplname_index | 11 | 0 | 0 | 10 | 403 | 3766 | 0 | 2 | 5 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_ts_template_oid_index | 11 | 0 | 0 | 10 | 403 | 3767 | 0 | 2 | 5 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_type_oid_index | 11 | 0 | 0 | 10 | 403 | 0 | 0 | 2 | 382 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_type_typname_nsp_index | 11 | 0 | 0 | 10 | 403 | 0 | 0 | 5 | 382 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_foreign_data_wrapper_oid_index | 11 | 0 | 0 | 10 | 403 | 112 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_foreign_data_wrapper_name_index | 11 | 0 | 0 | 10 | 403 | 548 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_foreign_server_oid_index | 11 | 0 | 0 | 10 | 403 | 113 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_foreign_server_name_index | 11 | 0 | 0 | 10 | 403 | 549 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_user_mapping_oid_index | 11 | 0 | 0 | 10 | 403 | 174 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_user_mapping_user_server_index | 11 | 0 | 0 | 10 | 403 | 175 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_foreign_table_relid_index | 11 | 0 | 0 | 10 | 403 | 3119 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_default_acl_role_nsp_obj_index | 11 | 0 | 0 | 10 | 403 | 827 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_default_acl_oid_index | 11 | 0 | 0 | 10 | 403 | 828 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_db_role_setting_databaseid_rol_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | 1 | 0 | 0 | 0 | f | t | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_seclabel_object_index | 11 | 0 | 0 | 10 | 403 | 3597 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 4 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_shseclabel_object_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | 1 | 0 | 0 | 0 | f | t | p | i | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_extension_oid_index | 11 | 0 | 0 | 10 | 403 | 3080 | 0 | 2 | 1 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_extension_name_index | 11 | 0 | 0 | 10 | 403 | 3081 | 0 | 2 | 1 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_range_rngtypid_index | 11 | 0 | 0 | 10 | 403 | 3542 | 0 | 2 | 6 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_policy_oid_index | 11 | 0 | 0 | 10 | 403 | 3257 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_policy_polrelid_polname_index | 11 | 0 | 0 | 10 | 403 | 3258 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_replication_origin_roiident_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | 1 | 0 | 0 | 0 | f | t | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_replication_origin_roname_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | 1 | 0 | 0 | 0 | f | t | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_partitioned_table_partrelid_index | 11 | 0 | 0 | 10 | 403 | 3351 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_publication_oid_index | 11 | 0 | 0 | 10 | 403 | 6110 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_publication_pubname_index | 11 | 0 | 0 | 10 | 403 | 6111 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_publication_rel_oid_index | 11 | 0 | 0 | 10 | 403 | 6112 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_publication_rel_prrelid_prpubid_index | 11 | 0 | 0 | 10 | 403 | 6113 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_subscription_oid_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | 1 | 0 | 0 | 0 | f | t | p | i | 1 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_subscription_subname_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | 1 | 0 | 0 | 0 | f | t | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_subscription_rel_srrelid_srsubid_index | 11 | 0 | 0 | 10 | 403 | 6117 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_authid | 11 | 2842 | 0 | 10 | 0 | 0 | 1664 | 1 | 6 | 1 | 0 | t | t | p | r | 11 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres} | | | | pg_shadow | 11 | 11580 | 0 | 10 | 0 | 11579 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 9 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres} | | | | pg_settings | 11 | 11649 | 0 | 10 | 0 | 11648 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 17 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=rw/postgres} | | | | pg_hba_file_rules | 11 | 11657 | 0 | 10 | 0 | 11656 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 9 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres} | | | | pg_file_settings | 11 | 11654 | 0 | 10 | 0 | 11653 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres} | | | | pg_config | 11 | 11666 | 0 | 10 | 0 | 11665 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 2 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres} | | | | pg_user_mapping | 11 | 11548 | 0 | 10 | 0 | 1418 | 0 | 0 | 0 | 0 | 0 | t | f | p | r | 3 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres} | | | | pg_replication_origin_status | 11 | 11780 | 0 | 10 | 0 | 11779 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 4 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres} | | | | pg_subscription | 11 | 6101 | 0 | 10 | 0 | 0 | 1664 | 0 | 0 | 0 | 0 | t | t | p | r | 8 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres} | | | | pg_stat_user_tables | 11 | 11684 | 0 | 10 | 0 | 11683 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 22 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_xact_user_tables | 11 | 11688 | 0 | 10 | 0 | 11687 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 11 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_attribute | 11 | 75 | 0 | 10 | 0 | 0 | 0 | 48 | 2582 | 48 | 0 | t | f | p | r | 22 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_proc | 11 | 81 | 0 | 10 | 0 | 0 | 0 | 76 | 2949 | 76 | 2836 | t | f | p | r | 29 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_class | 11 | 83 | 0 | 10 | 0 | 0 | 0 | 11 | 341 | 11 | 0 | t | f | p | r | 33 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_attrdef | 11 | 10000 | 0 | 10 | 0 | 2604 | 0 | 0 | 0 | 0 | 2830 | t | f | p | r | 4 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_constraint | 11 | 10001 | 0 | 10 | 0 | 2606 | 0 | 1 | 2 | 1 | 2832 | t | f | p | r | 24 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_statio_all_tables | 11 | 11691 | 0 | 10 | 0 | 11690 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 11 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_statio_sys_tables | 11 | 11695 | 0 | 10 | 0 | 11694 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 11 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_statio_user_tables | 11 | 11698 | 0 | 10 | 0 | 11697 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 11 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_all_indexes | 11 | 11701 | 0 | 10 | 0 | 11700 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 8 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_inherits | 11 | 10002 | 0 | 10 | 0 | 2611 | 0 | 0 | 0 | 0 | 0 | t | f | p | r | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_index | 11 | 10003 | 0 | 10 | 0 | 2610 | 0 | 3 | 134 | 3 | 0 | t | f | p | r | 19 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_operator | 11 | 10004 | 0 | 10 | 0 | 2617 | 0 | 15 | 793 | 15 | 0 | t | f | p | r | 14 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_opfamily | 11 | 10005 | 0 | 10 | 0 | 2753 | 0 | 2 | 116 | 2 | 0 | t | f | p | r | 4 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_opclass | 11 | 10006 | 0 | 10 | 0 | 2616 | 0 | 3 | 134 | 3 | 0 | t | f | p | r | 8 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_am | 11 | 10131 | 0 | 10 | 0 | 2601 | 0 | 1 | 6 | 1 | 0 | t | f | p | r | 3 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_amop | 11 | 10132 | 0 | 10 | 0 | 2602 | 0 | 7 | 725 | 7 | 0 | t | f | p | r | 8 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_amproc | 11 | 10858 | 0 | 10 | 0 | 2603 | 0 | 4 | 442 | 4 | 0 | t | f | p | r | 5 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_language | 11 | 11301 | 0 | 10 | 0 | 2612 | 0 | 1 | 4 | 1 | 0 | t | f | p | r | 8 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_largeobject_metadata | 11 | 11302 | 0 | 10 | 0 | 2995 | 0 | 0 | 0 | 0 | 0 | t | f | p | r | 2 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_aggregate | 11 | 11304 | 0 | 10 | 0 | 2600 | 0 | 2 | 142 | 2 | 0 | t | f | p | r | 22 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_statistic_ext | 11 | 11305 | 0 | 10 | 0 | 3381 | 0 | 0 | 0 | 0 | 3439 | t | f | p | r | 8 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_rewrite | 11 | 11307 | 0 | 10 | 0 | 2618 | 0 | 12 | 121 | 12 | 2838 | t | f | p | r | 7 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_trigger | 11 | 11308 | 0 | 10 | 0 | 2620 | 0 | 0 | 0 | 0 | 2336 | t | f | p | r | 17 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_event_trigger | 11 | 11309 | 0 | 10 | 0 | 3466 | 0 | 0 | 0 | 0 | 0 | t | f | p | r | 6 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_description | 11 | 11310 | 0 | 10 | 0 | 2609 | 0 | 35 | 3986 | 35 | 2834 | t | f | p | r | 4 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_cast | 11 | 11311 | 0 | 10 | 0 | 2605 | 0 | 2 | 219 | 2 | 0 | t | f | p | r | 5 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_enum | 11 | 11531 | 0 | 10 | 0 | 3501 | 0 | 0 | 0 | 0 | 0 | t | f | p | r | 3 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_namespace | 11 | 11532 | 0 | 10 | 0 | 2615 | 0 | 1 | 6 | 1 | 0 | t | f | p | r | 3 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_conversion | 11 | 11533 | 0 | 10 | 0 | 2607 | 0 | 3 | 132 | 3 | 0 | t | f | p | r | 7 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_depend | 11 | 11534 | 0 | 10 | 0 | 2608 | 0 | 55 | 7444 | 55 | 0 | t | f | p | r | 7 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_database | 11 | 1248 | 0 | 10 | 0 | 0 | 1664 | 1 | 2 | 1 | 0 | t | t | p | r | 13 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_db_role_setting | 11 | 11535 | 0 | 10 | 0 | 0 | 1664 | 0 | 0 | 0 | 2966 | t | t | p | r | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_tablespace | 11 | 11536 | 0 | 10 | 0 | 0 | 1664 | 1 | 2 | 1 | 0 | t | t | p | r | 4 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_pltemplate | 11 | 11537 | 0 | 10 | 0 | 0 | 1664 | 1 | 8 | 1 | 0 | t | t | p | r | 8 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_auth_members | 11 | 2843 | 0 | 10 | 0 | 0 | 1664 | 1 | 3 | 1 | 0 | t | t | p | r | 4 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_shdepend | 11 | 11538 | 0 | 10 | 0 | 0 | 1664 | 1 | 6 | 1 | 0 | t | t | p | r | 7 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_shdescription | 11 | 11539 | 0 | 10 | 0 | 0 | 1664 | 1 | 1 | 1 | 2846 | t | t | p | r | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_ts_config | 11 | 11540 | 0 | 10 | 0 | 3602 | 0 | 1 | 16 | 1 | 0 | t | f | p | r | 4 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_ts_config_map | 11 | 11541 | 0 | 10 | 0 | 3603 | 0 | 2 | 304 | 2 | 0 | t | f | p | r | 4 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_ts_dict | 11 | 11542 | 0 | 10 | 0 | 3600 | 0 | 1 | 16 | 1 | 0 | t | f | p | r | 5 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_ts_parser | 11 | 11543 | 0 | 10 | 0 | 3601 | 0 | 1 | 1 | 1 | 0 | t | f | p | r | 7 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_ts_template | 11 | 11544 | 0 | 10 | 0 | 3764 | 0 | 1 | 5 | 1 | 0 | t | f | p | r | 4 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_extension | 11 | 11545 | 0 | 10 | 0 | 3079 | 0 | 1 | 1 | 1 | 0 | t | f | p | r | 7 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_foreign_data_wrapper | 11 | 11546 | 0 | 10 | 0 | 2328 | 0 | 0 | 0 | 0 | 0 | t | f | p | r | 6 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_foreign_server | 11 | 11547 | 0 | 10 | 0 | 1417 | 0 | 0 | 0 | 0 | 0 | t | f | p | r | 7 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_foreign_table | 11 | 11549 | 0 | 10 | 0 | 3118 | 0 | 0 | 0 | 0 | 0 | t | f | p | r | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_replication_origin | 11 | 11551 | 0 | 10 | 0 | 0 | 1664 | 0 | 0 | 0 | 0 | t | t | p | r | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_default_acl | 11 | 11552 | 0 | 10 | 0 | 826 | 0 | 0 | 0 | 0 | 0 | t | f | p | r | 4 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_init_privs | 11 | 11553 | 0 | 10 | 0 | 3394 | 0 | 2 | 152 | 2 | 0 | t | f | p | r | 5 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_seclabel | 11 | 11554 | 0 | 10 | 0 | 3596 | 0 | 0 | 0 | 0 | 3598 | t | f | p | r | 5 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_shseclabel | 11 | 4066 | 0 | 10 | 0 | 0 | 1664 | 0 | 0 | 0 | 4060 | t | t | p | r | 4 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_collation | 11 | 11555 | 0 | 10 | 0 | 3456 | 0 | 30 | 982 | 30 | 0 | t | f | p | r | 8 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_partitioned_table | 11 | 11556 | 0 | 10 | 0 | 3350 | 0 | 0 | 0 | 0 | 0 | t | f | p | r | 8 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_range | 11 | 11557 | 0 | 10 | 0 | 3541 | 0 | 1 | 6 | 1 | 0 | t | f | p | r | 6 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_transform | 11 | 11558 | 0 | 10 | 0 | 3576 | 0 | 0 | 0 | 0 | 0 | t | f | p | r | 4 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_sequence | 11 | 11559 | 0 | 10 | 0 | 2224 | 0 | 0 | 0 | 0 | 0 | t | f | p | r | 8 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_publication | 11 | 11560 | 0 | 10 | 0 | 6104 | 0 | 0 | 0 | 0 | 0 | t | f | p | r | 6 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_publication_rel | 11 | 11561 | 0 | 10 | 0 | 6106 | 0 | 0 | 0 | 0 | 0 | t | f | p | r | 2 | 0 | t | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_subscription_rel | 11 | 11562 | 0 | 10 | 0 | 6102 | 0 | 0 | 0 | 0 | 0 | t | f | p | r | 4 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_roles | 11 | 11576 | 0 | 10 | 0 | 11575 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 13 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_locks | 11 | 11626 | 0 | 10 | 0 | 11625 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 15 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_group | 11 | 11584 | 0 | 10 | 0 | 11583 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 3 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_user | 11 | 11587 | 0 | 10 | 0 | 11586 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 9 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_policies | 11 | 11590 | 0 | 10 | 0 | 11589 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 8 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_rules | 11 | 11594 | 0 | 10 | 0 | 11593 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 4 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_views | 11 | 11598 | 0 | 10 | 0 | 11597 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 4 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_tables | 11 | 11602 | 0 | 10 | 0 | 11601 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 8 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_matviews | 11 | 11606 | 0 | 10 | 0 | 11605 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_indexes | 11 | 11610 | 0 | 10 | 0 | 11609 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 5 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_sequences | 11 | 11614 | 0 | 10 | 0 | 11613 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 11 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stats | 11 | 11618 | 0 | 10 | 0 | 11617 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 14 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | {security_barrier=true} | | | pg_publication_tables | 11 | 11622 | 0 | 10 | 0 | 11621 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 3 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_cursors | 11 | 11629 | 0 | 10 | 0 | 11628 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 6 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_available_extensions | 11 | 11632 | 0 | 10 | 0 | 11631 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 4 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_available_extension_versions | 11 | 11635 | 0 | 10 | 0 | 11634 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 8 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_prepared_xacts | 11 | 11638 | 0 | 10 | 0 | 11637 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 5 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_prepared_statements | 11 | 11642 | 0 | 10 | 0 | 11641 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 5 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_seclabels | 11 | 11645 | 0 | 10 | 0 | 11644 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 8 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_timezone_names | 11 | 11663 | 0 | 10 | 0 | 11662 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 4 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_timezone_abbrevs | 11 | 11660 | 0 | 10 | 0 | 11659 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 3 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_all_tables | 11 | 11669 | 0 | 10 | 0 | 11668 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 22 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_xact_all_tables | 11 | 11673 | 0 | 10 | 0 | 11672 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 11 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_sys_tables | 11 | 11677 | 0 | 10 | 0 | 11676 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 22 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_xact_sys_tables | 11 | 11681 | 0 | 10 | 0 | 11680 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 11 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_sys_indexes | 11 | 11705 | 0 | 10 | 0 | 11704 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 8 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_user_indexes | 11 | 11708 | 0 | 10 | 0 | 11707 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 8 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_statio_all_indexes | 11 | 11711 | 0 | 10 | 0 | 11710 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_statio_sys_indexes | 11 | 11715 | 0 | 10 | 0 | 11714 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_statio_user_indexes | 11 | 11718 | 0 | 10 | 0 | 11717 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_statio_all_sequences | 11 | 11721 | 0 | 10 | 0 | 11720 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 5 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_statio_sys_sequences | 11 | 11725 | 0 | 10 | 0 | 11724 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 5 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_statio_user_sequences | 11 | 11728 | 0 | 10 | 0 | 11727 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 5 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_activity | 11 | 11731 | 0 | 10 | 0 | 11730 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 20 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_replication | 11 | 11735 | 0 | 10 | 0 | 11734 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 19 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_wal_receiver | 11 | 11739 | 0 | 10 | 0 | 11738 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 12 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_subscription | 11 | 11742 | 0 | 10 | 0 | 11741 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 9 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_ssl | 11 | 11745 | 0 | 10 | 0 | 11744 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_replication_slots | 11 | 11748 | 0 | 10 | 0 | 11747 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 12 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_database | 11 | 11752 | 0 | 10 | 0 | 11751 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 19 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_database_conflicts | 11 | 11755 | 0 | 10 | 0 | 11754 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_user_functions | 11 | 11758 | 0 | 10 | 0 | 11757 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 6 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_xact_user_functions | 11 | 11762 | 0 | 10 | 0 | 11761 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 6 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_archiver | 11 | 11766 | 0 | 10 | 0 | 11765 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_bgwriter | 11 | 11769 | 0 | 10 | 0 | 11768 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 11 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_stat_progress_vacuum | 11 | 11772 | 0 | 10 | 0 | 11771 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 11 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_user_mappings | 11 | 11776 | 0 | 10 | 0 | 11775 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 6 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_largeobject | 11 | 11303 | 0 | 10 | 0 | 2613 | 0 | 0 | 0 | 0 | 0 | t | f | p | r | 3 | 0 | f | f | f | f | f | f | f | t | n | f | 550 | 1 | {postgres=arwdDxt/postgres} | | | | information_schema_catalog_name | 13028 | 13049 | 0 | 10 | 0 | 13048 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 1 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | attributes | 13028 | 13064 | 0 | 10 | 0 | 13063 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 31 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | applicable_roles | 13028 | 13057 | 0 | 10 | 0 | 13056 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 3 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | administrable_role_authorizations | 13028 | 13061 | 0 | 10 | 0 | 13060 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 3 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | check_constraint_routine_usage | 13028 | 13072 | 0 | 10 | 0 | 13071 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 6 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | character_sets | 13028 | 13068 | 0 | 10 | 0 | 13067 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 8 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | check_constraints | 13028 | 13076 | 0 | 10 | 0 | 13075 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 4 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | collations | 13028 | 13080 | 0 | 10 | 0 | 13079 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 4 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | collation_character_set_applicability | 13028 | 13084 | 0 | 10 | 0 | 13083 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 6 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | column_domain_usage | 13028 | 13088 | 0 | 10 | 0 | 13087 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | column_privileges | 13028 | 13092 | 0 | 10 | 0 | 13091 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 8 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | routine_privileges | 13028 | 13142 | 0 | 10 | 0 | 13141 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 10 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | column_udt_usage | 13028 | 13096 | 0 | 10 | 0 | 13095 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | columns | 13028 | 13100 | 0 | 10 | 0 | 13099 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 44 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_toast_13169 | 99 | 13172 | 0 | 10 | 0 | 13171 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | t | f | f | f | f | f | t | n | f | 550 | 1 | | | | | constraint_column_usage | 13028 | 13104 | 0 | 10 | 0 | 13103 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | role_routine_grants | 13028 | 13146 | 0 | 10 | 0 | 13145 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 10 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | constraint_table_usage | 13028 | 13108 | 0 | 10 | 0 | 13107 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 6 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | domain_constraints | 13028 | 13112 | 0 | 10 | 0 | 13111 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 8 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_toast_13169_index | 99 | 0 | 0 | 10 | 403 | 13173 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | domain_udt_usage | 13028 | 13116 | 0 | 10 | 0 | 13115 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 6 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | routines | 13028 | 13149 | 0 | 10 | 0 | 13148 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 82 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | domains | 13028 | 13120 | 0 | 10 | 0 | 13119 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 27 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | enabled_roles | 13028 | 13124 | 0 | 10 | 0 | 13123 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 1 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | sql_parts | 13028 | 13180 | 0 | 10 | 0 | 13179 | 0 | 1 | 9 | 1 | 13181 | f | f | p | r | 5 | 0 | f | f | f | f | f | f | f | t | d | f | 550 | 1 | | | | | key_column_usage | 13028 | 13127 | 0 | 10 | 0 | 13126 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 9 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | schemata | 13028 | 13153 | 0 | 10 | 0 | 13152 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | parameters | 13028 | 13131 | 0 | 10 | 0 | 13130 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 32 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | referential_constraints | 13028 | 13135 | 0 | 10 | 0 | 13134 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 9 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | sql_languages | 13028 | 13170 | 0 | 10 | 0 | 13169 | 0 | 1 | 4 | 1 | 13171 | f | f | p | r | 7 | 0 | f | f | f | f | f | f | f | t | d | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | role_column_grants | 13028 | 13139 | 0 | 10 | 0 | 13138 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 8 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | sequences | 13028 | 13156 | 0 | 10 | 0 | 13155 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 12 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_toast_13159 | 99 | 13162 | 0 | 10 | 0 | 13161 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | t | f | f | f | f | f | t | n | f | 550 | 1 | | | | | pg_toast_13159_index | 99 | 0 | 0 | 10 | 403 | 13163 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_toast_13174 | 99 | 13177 | 0 | 10 | 0 | 13176 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | t | f | f | f | f | f | t | n | f | 550 | 1 | | | | | sql_features | 13028 | 13160 | 0 | 10 | 0 | 13159 | 0 | 7 | 671 | 7 | 13161 | f | f | p | r | 7 | 0 | f | f | f | f | f | f | f | t | d | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_toast_13164 | 99 | 13167 | 0 | 10 | 0 | 13166 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | t | f | f | f | f | f | t | n | f | 550 | 1 | | | | | pg_toast_13164_index | 99 | 0 | 0 | 10 | 403 | 13168 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_toast_13174_index | 99 | 0 | 0 | 10 | 403 | 13178 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | sql_implementation_info | 13028 | 13165 | 0 | 10 | 0 | 13164 | 0 | 1 | 12 | 1 | 13166 | f | f | p | r | 5 | 0 | f | f | f | f | f | f | f | t | d | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | sql_packages | 13028 | 13175 | 0 | 10 | 0 | 13174 | 0 | 1 | 10 | 1 | 13176 | f | f | p | r | 5 | 0 | f | f | f | f | f | f | f | t | d | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_toast_13179 | 99 | 13182 | 0 | 10 | 0 | 13181 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | t | f | f | f | f | f | t | n | f | 550 | 1 | | | | | pg_toast_13179_index | 99 | 0 | 0 | 10 | 403 | 13183 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_toast_13184 | 99 | 13187 | 0 | 10 | 0 | 13186 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | t | f | f | f | f | f | t | n | f | 550 | 1 | | | | | pg_toast_13184_index | 99 | 0 | 0 | 10 | 403 | 13188 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | pg_toast_13189 | 99 | 13192 | 0 | 10 | 0 | 13191 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | t | f | f | f | f | f | t | n | f | 550 | 1 | | | | | sql_sizing | 13028 | 13185 | 0 | 10 | 0 | 13184 | 0 | 1 | 23 | 1 | 13186 | f | f | p | r | 4 | 0 | f | f | f | f | f | f | f | t | d | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | pg_toast_13189_index | 99 | 0 | 0 | 10 | 403 | 13193 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | f | f | t | n | f | 0 | 0 | | | | | sql_sizing_profiles | 13028 | 13190 | 0 | 10 | 0 | 13189 | 0 | 0 | 0 | 0 | 13191 | f | f | p | r | 5 | 0 | f | f | f | f | f | f | f | t | d | f | 550 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | | | | view_routine_usage | 13028 | 13244 | 0 | 10 | 0 | 13243 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 6 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | table_constraints | 13028 | 13195 | 0 | 10 | 0 | 13194 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 9 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | table_privileges | 13028 | 13199 | 0 | 10 | 0 | 13198 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 8 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | foreign_table_options | 13028 | 13294 | 0 | 10 | 0 | 13293 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 5 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | role_table_grants | 13028 | 13203 | 0 | 10 | 0 | 13202 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 8 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | view_table_usage | 13028 | 13248 | 0 | 10 | 0 | 13247 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 6 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | tables | 13028 | 13206 | 0 | 10 | 0 | 13205 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 12 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | transforms | 13028 | 13210 | 0 | 10 | 0 | 13209 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 8 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | | | | | triggered_update_columns | 13028 | 13214 | 0 | 10 | 0 | 13213 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | foreign_data_wrappers | 13028 | 13277 | 0 | 10 | 0 | 13276 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 5 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | triggers | 13028 | 13218 | 0 | 10 | 0 | 13217 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 17 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | views | 13028 | 13252 | 0 | 10 | 0 | 13251 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 10 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | udt_privileges | 13028 | 13222 | 0 | 10 | 0 | 13221 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | role_udt_grants | 13028 | 13226 | 0 | 10 | 0 | 13225 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | usage_privileges | 13028 | 13229 | 0 | 10 | 0 | 13228 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 8 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | data_type_privileges | 13028 | 13256 | 0 | 10 | 0 | 13255 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 5 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | role_usage_grants | 13028 | 13233 | 0 | 10 | 0 | 13232 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 8 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | user_defined_types | 13028 | 13236 | 0 | 10 | 0 | 13235 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 29 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | _pg_foreign_servers | 13028 | 13280 | 0 | 10 | 0 | 13279 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 9 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | | | | | view_column_usage | 13028 | 13240 | 0 | 10 | 0 | 13239 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | element_types | 13028 | 13260 | 0 | 10 | 0 | 13259 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 29 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | _pg_foreign_table_columns | 13028 | 13264 | 0 | 10 | 0 | 13263 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 4 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | | | | | column_options | 13028 | 13268 | 0 | 10 | 0 | 13267 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 6 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | _pg_foreign_data_wrappers | 13028 | 13271 | 0 | 10 | 0 | 13270 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | | | | | foreign_server_options | 13028 | 13284 | 0 | 10 | 0 | 13283 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 4 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | foreign_data_wrapper_options | 13028 | 13274 | 0 | 10 | 0 | 13273 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 4 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | user_mapping_options | 13028 | 13304 | 0 | 10 | 0 | 13303 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 5 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | foreign_servers | 13028 | 13287 | 0 | 10 | 0 | 13286 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | _pg_foreign_tables | 13028 | 13290 | 0 | 10 | 0 | 13289 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | | | | | foreign_tables | 13028 | 13297 | 0 | 10 | 0 | 13296 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 5 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | | _pg_user_mappings | 13028 | 13300 | 0 | 10 | 0 | 13299 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 7 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | | | | | user_mappings | 13028 | 13308 | 0 | 10 | 0 | 13307 | 0 | 0 | 0 | 0 | 0 | f | f | p | v | 3 | 0 | f | f | t | f | f | f | f | t | n | f | 0 | 0 | {postgres=arwdDxt/postgres,=r/postgres} | | | +-------------------------------------------+--------------+---------+-----------+----------+-------+-------------+---------------+----------+-----------+---------------+---------------+-------------+-------------+----------------+---------+----------+-----------+------------+------------+-------------+----------------+----------------+----------------+---------------------+----------------+--------------+----------------+--------------+------------+------------------------------------------+-------------------------+--------------+ (344 rows) pspg-5.8.1/tests/def.txt000066400000000000000000000072451452457446400151660ustar00rootroot00000000000000 Table "pg_catalog.pg_class" ┌─────────────────────┬──────────────┬───────────┬──────────┬─────────┐ │ Column │ Type │ Collation │ Nullable │ Default │ ╞═════════════════════╪══════════════╪═══════════╪══════════╪═════════╡ │ oid │ oid │ │ not null │ │ │ relname │ name │ │ not null │ │ │ relnamespace │ oid │ │ not null │ │ │ reltype │ oid │ │ not null │ │ │ reloftype │ oid │ │ not null │ │ │ relowner │ oid │ │ not null │ │ │ relam │ oid │ │ not null │ │ │ relfilenode │ oid │ │ not null │ │ │ reltablespace │ oid │ │ not null │ │ │ relpages │ integer │ │ not null │ │ │ reltuples │ real │ │ not null │ │ │ relallvisible │ integer │ │ not null │ │ │ reltoastrelid │ oid │ │ not null │ │ │ relhasindex │ boolean │ │ not null │ │ │ relisshared │ boolean │ │ not null │ │ │ relpersistence │ "char" │ │ not null │ │ │ relkind │ "char" │ │ not null │ │ │ relnatts │ smallint │ │ not null │ │ │ relchecks │ smallint │ │ not null │ │ │ relhasrules │ boolean │ │ not null │ │ │ relhastriggers │ boolean │ │ not null │ │ │ relhassubclass │ boolean │ │ not null │ │ │ relrowsecurity │ boolean │ │ not null │ │ │ relforcerowsecurity │ boolean │ │ not null │ │ │ relispopulated │ boolean │ │ not null │ │ │ relreplident │ "char" │ │ not null │ │ │ relispartition │ boolean │ │ not null │ │ │ relrewrite │ oid │ │ not null │ │ │ relfrozenxid │ xid │ │ not null │ │ │ relminmxid │ xid │ │ not null │ │ │ relacl │ aclitem[] │ │ │ │ │ reloptions │ text[] │ C │ │ │ │ relpartbound │ pg_node_tree │ C │ │ │ └─────────────────────┴──────────────┴───────────┴──────────┴─────────┘ Indexes: "pg_class_oid_index" UNIQUE, btree (oid) "pg_class_relname_nsp_index" UNIQUE, btree (relname, relnamespace) "pg_class_tblspc_relfilenode_index" btree (reltablespace, relfilenode) pspg-5.8.1/tests/err.txt000066400000000000000000000001521452457446400152060ustar00rootroot00000000000000+-[ RECORD 1 ]-----+ | ?column? | ahoj +| | | svete+| | | xxxx | +----------+-------+ pspg-5.8.1/tests/help.txt000066400000000000000000000137421452457446400153570ustar00rootroot00000000000000General \copyright show PostgreSQL usage and distribution terms \crosstabview [COLUMNS] execute query and display results in crosstab \errverbose show most recent error message at maximum verbosity \g [FILE] or ; execute query (and send results to file or |pipe) \gdesc describe result of query, without executing it \gexec execute query, then execute each value in its result \gset [PREFIX] execute query and store results in psql variables \gx [FILE] as \g, but forces expanded output mode \q quit psql \watch [SEC] execute query every SEC seconds Help \? [commands] show help on backslash commands \? options show help on psql command-line options \? variables show help on special variables \h [NAME] help on syntax of SQL commands, * for all commands Query Buffer \e [FILE] [LINE] edit the query buffer (or file) with external editor \ef [FUNCNAME [LINE]] edit function definition with external editor \ev [VIEWNAME [LINE]] edit view definition with external editor \p show the contents of the query buffer \r reset (clear) the query buffer \s [FILE] display history or save it to file \w FILE write query buffer to file Input/Output \copy ... perform SQL COPY with data stream to the client host \echo [STRING] write string to standard output \i FILE execute commands from file \ir FILE as \i, but relative to location of current script \o [FILE] send all query results to file or |pipe \qecho [STRING] write string to query output stream (see \o) Conditional \if EXPR begin conditional block \elif EXPR alternative within current conditional block \else final alternative within current conditional block \endif end conditional block Informational (options: S = show system objects, + = additional detail) \d[S+] list tables, views, and sequences \d[S+] NAME describe table, view, sequence, or index \da[S] [PATTERN] list aggregates \dA[+] [PATTERN] list access methods \db[+] [PATTERN] list tablespaces \dc[S+] [PATTERN] list conversions \dC[+] [PATTERN] list casts \dd[S] [PATTERN] show object descriptions not displayed elsewhere \dD[S+] [PATTERN] list domains \ddp [PATTERN] list default privileges \dE[S+] [PATTERN] list foreign tables \det[+] [PATTERN] list foreign tables \des[+] [PATTERN] list foreign servers \deu[+] [PATTERN] list user mappings \dew[+] [PATTERN] list foreign-data wrappers \df[anptw][S+] [PATRN] list [only agg/normal/procedures/trigger/window] functions \dF[+] [PATTERN] list text search configurations \dFd[+] [PATTERN] list text search dictionaries \dFp[+] [PATTERN] list text search parsers \dFt[+] [PATTERN] list text search templates \dg[S+] [PATTERN] list roles \di[S+] [PATTERN] list indexes \dl list large objects, same as \lo_list \dL[S+] [PATTERN] list procedural languages \dm[S+] [PATTERN] list materialized views \dn[S+] [PATTERN] list schemas \do[S] [PATTERN] list operators \dO[S+] [PATTERN] list collations \dp [PATTERN] list table, view, and sequence access privileges \drds [PATRN1 [PATRN2]] list per-database role settings \dRp[+] [PATTERN] list replication publications \dRs[+] [PATTERN] list replication subscriptions \ds[S+] [PATTERN] list sequences \dt[S+] [PATTERN] list tables \dT[S+] [PATTERN] list data types \du[S+] [PATTERN] list roles \dv[S+] [PATTERN] list views \dx[+] [PATTERN] list extensions \dy [PATTERN] list event triggers \l[+] [PATTERN] list databases \sf[+] FUNCNAME show a function's definition \sv[+] VIEWNAME show a view's definition \z [PATTERN] same as \dp Formatting \a toggle between unaligned and aligned output mode \C [STRING] set table title, or unset if none \f [STRING] show or set field separator for unaligned query output \H toggle HTML output mode (currently off) \pset [NAME [VALUE]] set table output option (border|columns|csv_fieldsep|expanded|fieldsep| fieldsep_zero|footer|format|linestyle|null| numericlocale|pager|pager_min_lines|recordsep| recordsep_zero|tableattr|title|tuples_only| unicode_border_linestyle|unicode_column_linestyle| unicode_header_linestyle) \t [on|off] show only rows (currently off) \T [STRING] set HTML tag attributes, or unset if none \x [on|off|auto] toggle expanded output (currently off) Connection \c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo} connect to new database (currently "postgres") \conninfo display information about current connection \encoding [ENCODING] show or set client encoding \password [USERNAME] securely change the password for a user Operating System \cd [DIR] change the current working directory \setenv NAME [VALUE] set or unset environment variable \timing [on|off] toggle timing of commands (currently off) \! [COMMAND] execute command in shell or start interactive shell Variables \prompt [TEXT] NAME prompt user to set internal variable \set [NAME [VALUE]] set internal variable, or list all if no parameters \unset NAME unset (delete) internal variable Large Objects \lo_export LOBOID FILE \lo_import FILE [COMMENT] \lo_list \lo_unlink LOBOID large object operations pspg-5.8.1/tests/monet-def.txt000066400000000000000000000021541452457446400163000ustar00rootroot00000000000000CREATE TABLE "import"."import_template" ( "id" BIGINT NOT NULL DEFAULT next value for "import"."seq_8886", "created_by" VARCHAR(128) NOT NULL, "created_timestamp" TIMESTAMP NOT NULL DEFAULT "sys"."current_timestamp"(), "modified_by" VARCHAR(128) NOT NULL, "modified_timestamp" TIMESTAMP NOT NULL DEFAULT "sys"."current_timestamp"(), "import_name" VARCHAR(128) NOT NULL, "template_name" VARCHAR(128) NOT NULL, "server_name" VARCHAR(256) NOT NULL, "database_name" VARCHAR(256) NOT NULL, "sort_order" INTEGER NOT NULL, CONSTRAINT "import_template_id_pkey" PRIMARY KEY ("id"), CONSTRAINT "import_template_import_name_fkey" FOREIGN KEY ("import_name") REFERENCES "import"."import" ("name"), CONSTRAINT "import_template_server_name_fkey" FOREIGN KEY ("server_name") REFERENCES "import"."server" ("name"), CONSTRAINT "import_template_template_name_fkey" FOREIGN KEY ("template_name") REFERENCES "import"."database_template" ("name") ); pspg-5.8.1/tests/monet.txt000066400000000000000000032330221452457446400155470ustar00rootroot00000000000000+------+------------------------------------+-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+--------+---------------+--------+-----------+ | id | name | schema_id | query | type | system | commit_action | access | temporary | +======+====================================+===========+=============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================+======+========+===============+========+===========+ | 2001 | schemas | 2000 | null | 10 | true | 0 | 0 | 0 | | 2007 | types | 2000 | null | 10 | true | 0 | 0 | 0 | | 2016 | functions | 2000 | null | 10 | true | 0 | 0 | 0 | | 2028 | args | 2000 | null | 10 | true | 0 | 0 | 0 | | 2037 | sequences | 2000 | null | 10 | true | 0 | 0 | 0 | | 2047 | table_partitions | 2000 | null | 10 | true | 0 | 0 | 0 | | 2053 | range_partitions | 2000 | null | 10 | true | 0 | 0 | 0 | | 2059 | value_partitions | 2000 | null | 10 | true | 0 | 0 | 0 | | 2063 | dependencies | 2000 | null | 10 | true | 0 | 0 | 0 | | 2067 | _tables | 2000 | null | 10 | true | 0 | 0 | 0 | | 2076 | _columns | 2000 | null | 10 | true | 0 | 0 | 0 | | 2087 | keys | 2000 | null | 10 | true | 0 | 0 | 0 | | 2094 | idxs | 2000 | null | 10 | true | 0 | 0 | 0 | | 2099 | triggers | 2000 | null | 10 | true | 0 | 0 | 0 | | 2110 | objects | 2000 | null | 10 | true | 0 | 0 | 0 | | 6016 | tables | 2000 | SELECT "id", "name", "schema_id", "query", CAST(CASE WHEN "system" THEN "type" + 10 /* system table/view */ ELSE (CASE WHEN "commit_action" = 0 THEN "type" /* table/view */ ELSE "type" + 20 /* global temp table */ END) END AS SMALLINT) AS "type", "system", "commit_action", "access", CASE WHEN (NOT "system" AND "commit_action" > 0) THEN 1 ELSE 0 END AS "temporary" FROM "sys"."_tables" WHERE "type" <> 2 UNION ALL SELECT "id", "name", "schema_id", "query", CAST("type" + 30 /* local temp table */ AS SMALLINT) AS "type", "system", "commit_action", "access", 1 AS "temporary" FROM "tmp"."_tables"; | 11 | true | 0 | 0 | 0 | | 6026 | columns | 2000 | SELECT * FROM (SELECT p.* FROM "sys"."_columns" AS p UNION ALL SELECT t.* FROM "tmp"."_columns" AS t) AS columns; | 11 | true | 0 | 0 | 0 | | 6042 | comments | 2000 | null | 10 | true | 0 | 0 | 0 | | 6047 | db_user_info | 2000 | null | 10 | true | 0 | 0 | 0 | | 6053 | users | 2000 | SELECT u."name" AS "name", ui."fullname", ui."default_schema" FROM db_users() AS u LEFT JOIN "sys"."db_user_info" AS ui ON u."name" = ui."name"; | 11 | true | 0 | 0 | 0 | | 6057 | user_role | 2000 | null | 10 | true | 0 | 0 | 0 | | 6060 | auths | 2000 | null | 10 | true | 0 | 0 | 0 | | 6064 | privileges | 2000 | null | 10 | true | 0 | 0 | 0 | | 6284 | querylog_catalog | 2000 | create view sys.querylog_catalog as select * from sys.querylog_catalog(); | 11 | true | 0 | 0 | 0 | | 6295 | querylog_calls | 2000 | create view sys.querylog_calls as select * from sys.querylog_calls(); | 11 | true | 0 | 0 | 0 | | 6313 | querylog_history | 2000 | create view sys.querylog_history as | 11 | true | 0 | 0 | 0 | : : : : select qd.*, ql."start",ql."stop", ql.arguments, ql.tuples, ql.run, ql.ship, ql.cpu, ql.io : : : : : : : : : : from sys.querylog_catalog() qd, sys.querylog_calls() ql : : : : : : : : : : where qd.id = ql.id and qd.owner = user; : : : : : : | 6352 | tracelog | 2000 | create view sys.tracelog as select * from sys.tracelog(); | 11 | true | 0 | 0 | 0 | | 6404 | ids | 2000 | create view sys.ids (id, name, schema_id, table_id, table_name, obj_type, sys_table) as | 11 | true | 0 | 0 | 0 | : : : : select id, name, cast(null as int) as schema_id, cast(null as int) as table_id, cast(null as varchar(124)) as table_name, 'author' as obj_type, 'sys.auths' as sys_table from sys.auths union all : : : : : : : : : : select id, name, cast(null as int) as schema_id, cast(null as int) as table_id, cast(null as varchar(124)) as table_name, 'schema', 'sys.schemas' from sys.schemas union all : : : : : : : : : : select id, name, schema_id, id as table_id, name as table_name, case when type = 1 then 'view' else 'table' end, 'sys._tables' from sys._tables union all : : : : : : : : : : select id, name, schema_id, id as table_id, name as table_name, case when type = 1 then 'view' else 'table' end, 'tmp._tables' from tmp._tables union all : : : : : : : : : : select c.id, c.name, t.schema_id, c.table_id, t.name as table_name, 'column', 'sys._columns' from sys._columns c join sys._tables t on c.table_id = t.id union all : : : : : : : : : : select c.id, c.name, t.schema_id, c.table_id, t.name as table_name, 'column', 'tmp._columns' from tmp._columns c join tmp._tables t on c.table_id = t.id union all : : : : : : : : : : select k.id, k.name, t.schema_id, k.table_id, t.name as table_name, 'key', 'sys.keys' from sys.keys k join sys._tables t on k.table_id = t.id union all : : : : : : : : : : select k.id, k.name, t.schema_id, k.table_id, t.name as table_name, 'key', 'tmp.keys' from tmp.keys k join tmp._tables t on k.table_id = t.id union all : : : : : : : : : : select i.id, i.name, t.schema_id, i.table_id, t.name as table_name, 'index', 'sys.idxs' from sys.idxs i join sys._tables t on i.table_id = t.id union all : : : : : : : : : : select i.id, i.name, t.schema_id, i.table_id, t.name as table_name, 'index', 'tmp.idxs' from tmp.idxs i join tmp._tables t on i.table_id = t.id union all : : : : : : : : : : select g.id, g.name, t.schema_id, g.table_id, t.name as table_name, 'trigger', 'sys.triggers' from sys.triggers g join sys._tables t on g.table_id = t.id union all : : : : : : : : : : select g.id, g.name, t.schema_id, g.table_id, t.name as table_name, 'trigger', 'tmp.triggers' from tmp.triggers g join tmp._tables t on g.table_id = t.id union all : : : : : : : : : : select id, name, schema_id, cast(null as int) as table_id, cast(null as varchar(124)) as table_name, case when type = 2 then 'procedure' else 'function' end, 'sys.functions' from sys.functions union all : : : : : : : : : : select a.id, a.name, f.schema_id, cast(null as int) as table_id, cast(null as varchar(124)) as table_name, case when f.type = 2 then 'procedure arg' else 'function arg' end, 'sys.args' from sys.args a join sys.functions f on a.func_id = f.id union all : : : : : : : : : : select id, name, schema_id, cast(null as int) as table_id, cast(null as varchar(124)) as table_name, 'sequence', 'sys.sequences' from sys.sequences union all : : : : : : : : : : select id, sqlname, schema_id, cast(null as int) as table_id, cast(null as varchar(124)) as table_name, 'type', 'sys.types' from sys.types where id > 2000 : : : : : : : : : : order by id; : : : : : : | 6412 | dependency_types | 2000 | null | 10 | true | 0 | 1 | 0 | | 6422 | dependencies_vw | 2000 | create view sys.dependencies_vw as | 11 | true | 0 | 0 | 0 | : : : : select d.id, i1.obj_type, i1.name, : : : : : : : : : : d.depend_id as used_by_id, i2.obj_type as used_by_obj_type, i2.name as used_by_name, : : : : : : : : : : d.depend_type, dt.dependency_type_name : : : : : : : : : : from sys.dependencies d : : : : : : : : : : join sys.ids i1 on d.id = i1.id : : : : : : : : : : join sys.ids i2 on d.depend_id = i2.id : : : : : : : : : : join sys.dependency_types dt on d.depend_type = dt.dependency_type_id : : : : : : : : : : order by id, depend_id; : : : : : : | 6428 | dependency_owners_on_schemas | 2000 | create view sys.dependency_owners_on_schemas as | 11 | true | 0 | 0 | 0 | : : : : select a.name as owner_name, s.id as schema_id, s.name as schema_name, cast(1 as smallint) as depend_type : : : : : : : : : : from sys.schemas as s, sys.auths as a : : : : : : : : : : where s.owner = a.id : : : : : : : : : : order by a.name, s.name; : : : : : : | 6440 | dependency_columns_on_keys | 2000 | create view sys.dependency_columns_on_keys as | 11 | true | 0 | 0 | 0 | : : : : select t.schema_id as table_schema_id, t.id as table_id, t.name as table_name, c.id as column_id, c.name as column_name, k.id as key_id, k.name as key_name, cast(kc.nr +1 as int) as key_col_nr, cast(k.type as smallint) as key_type, cast(4 as smallint) as depend_type : : : : : : : : : : from sys.columns as c, sys.objects as kc, sys.keys as k, sys.tables as t : : : : : : : : : : where k.table_id = c.table_id and c.table_id = t.id and kc.id = k.id and kc.name = c.name : : : : : : : : : : and k.type in (0, 1) : : : : : : : : : : order by t.schema_id, t.name, c.name, k.type, k.name, kc.nr; : : : : : : | 6449 | dependency_tables_on_views | 2000 | create view sys.dependency_tables_on_views as | 11 | true | 0 | 0 | 0 | : : : : select t.schema_id as table_schema_id, t.id as table_id, t.name as table_name, v.schema_id as view_schema_id, v.id as view_id, v.name as view_name, dep.depend_type as depend_type : : : : : : : : : : from sys.tables as t, sys.tables as v, sys.dependencies as dep : : : : : : : : : : where t.id = dep.id and v.id = dep.depend_id : : : : : : : : : : and dep.depend_type = 5 and t.type not in (1, 11) and v.type in (1, 11) : : : : : : : : : : order by t.schema_id, t.name, v.schema_id, v.name; : : : : : : | 6458 | dependency_views_on_views | 2000 | create view sys.dependency_views_on_views as | 11 | true | 0 | 0 | 0 | : : : : select v1.schema_id as view1_schema_id, v1.id as view1_id, v1.name as view1_name, v2.schema_id as view2_schema_id, v2.id as view2_id, v2.name as view2_name, dep.depend_type as depend_type : : : : : : : : : : from sys.tables as v1, sys.tables as v2, sys.dependencies as dep : : : : : : : : : : where v1.id = dep.id and v2.id = dep.depend_id : : : : : : : : : : and dep.depend_type = 5 and v1.type in (1, 11) and v2.type in (1, 11) : : : : : : : : : : order by v1.schema_id, v1.name, v2.schema_id, v2.name; : : : : : : | 6469 | dependency_columns_on_views | 2000 | create view sys.dependency_columns_on_views as | 11 | true | 0 | 0 | 0 | : : : : select t.schema_id as table_schema_id, t.id as table_id, t.name as table_name, c.id as column_id, c.name as column_name, v.schema_id as view_schema_id, v.id as view_id, v.name as view_name, dep.depend_type as depend_type : : : : : : : : : : from sys.columns as c, sys.tables as v, sys.tables as t, sys.dependencies as dep : : : : : : : : : : where c.id = dep.id and v.id = dep.depend_id and c.table_id = t.id : : : : : : : : : : and dep.depend_type = 5 and v.type in (1, 11) : : : : : : : : : : order by t.schema_id, t.name, c.name, v.name; : : : : : : | 6478 | dependency_functions_on_views | 2000 | create view sys.dependency_functions_on_views as | 11 | true | 0 | 0 | 0 | : : : : select f.schema_id as function_schema_id, f.id as function_id, f.name as function_name, v.schema_id as view_schema_id, v.id as view_id, v.name as view_name, dep.depend_type as depend_type : : : : : : : : : : from sys.functions as f, sys.tables as v, sys.dependencies as dep : : : : : : : : : : where f.id = dep.id and v.id = dep.depend_id : : : : : : : : : : and dep.depend_type = 5 and v.type in (1, 11) : : : : : : : : : : order by f.schema_id, f.name, v.schema_id, v.name; : : : : : : | 6484 | dependency_schemas_on_users | 2000 | create view sys.dependency_schemas_on_users as | 11 | true | 0 | 0 | 0 | : : : : select s.id as schema_id, s.name as schema_name, u.name as user_name, cast(6 as smallint) as depend_type : : : : : : : : : : from sys.users as u, sys.schemas as s : : : : : : : : : : where u.default_schema = s.id : : : : : : : : : : order by s.name, u.name; : : : : : : | 6492 | dependency_tables_on_functions | 2000 | create view sys.dependency_tables_on_functions as | 11 | true | 0 | 0 | 0 | : : : : select t.schema_id as table_schema_id, t.id as table_id, t.name as table_name, f.name as function_name, f.type as function_type, dep.depend_type as depend_type : : : : : : : : : : from sys.functions as f, sys.tables as t, sys.dependencies as dep : : : : : : : : : : where t.id = dep.id and f.id = dep.depend_id : : : : : : : : : : and dep.depend_type = 7 and f.type <> 2 and t.type not in (1, 11) : : : : : : : : : : order by t.name, t.schema_id, f.name, f.id; : : : : : : | 6500 | dependency_views_on_functions | 2000 | create view sys.dependency_views_on_functions as | 11 | true | 0 | 0 | 0 | : : : : select v.schema_id as view_schema_id, v.id as view_id, v.name as view_name, f.name as function_name, f.type as function_type, dep.depend_type as depend_type : : : : : : : : : : from sys.functions as f, sys.tables as v, sys.dependencies as dep : : : : : : : : : : where v.id = dep.id and f.id = dep.depend_id : : : : : : : : : : and dep.depend_type = 7 and f.type <> 2 and v.type in (1, 11) : : : : : : : : : : order by v.name, v.schema_id, f.name, f.id; : : : : : : | 6509 | dependency_columns_on_functions | 2000 | create view sys.dependency_columns_on_functions as | 11 | true | 0 | 0 | 0 | : : : : select c.table_id, c.id as column_id, c.name, f.id as function_id, f.name as function_name, f.type as function_type, dep.depend_type as depend_type : : : : : : : : : : from sys.functions as f, sys.columns as c, sys.dependencies as dep : : : : : : : : : : where c.id = dep.id and f.id = dep.depend_id : : : : : : : : : : and dep.depend_type = 7 and f.type <> 2 : : : : : : : : : : order by c.name, c.table_id, f.name, f.id; : : : : : : | 6520 | dependency_functions_on_functions | 2000 | create view sys.dependency_functions_on_functions as | 11 | true | 0 | 0 | 0 | : : : : select f1.schema_id, f1.id as function_id, f1.name as function_name, f1.type as function_type, : : : : : : : : : : f2.schema_id as used_in_function_schema_id, f2.id as used_in_function_id, f2.name as used_in_function_name, f2.type as used_in_function_type, dep.depend_type as depend_type : : : : : : : : : : from sys.functions as f1, sys.functions as f2, sys.dependencies as dep : : : : : : : : : : where f1.id = dep.id and f2.id = dep.depend_id : : : : : : : : : : and dep.depend_type = 7 and f2.type <> 2 : : : : : : : : : : order by f1.name, f1.id, f2.name, f2.id; : : : : : : | 6528 | dependency_tables_on_triggers | 2000 | create view sys.dependency_tables_on_triggers as | 11 | true | 0 | 0 | 0 | : : : : (select t.schema_id as table_schema_id, t.id as table_id, t.name as table_name, tri.id as trigger_id, tri.name as trigger_name, cast(8 as smallint) as depend_type : : : : : : : : : : from sys.tables as t, sys.triggers as tri : : : : : : : : : : where tri.table_id = t.id) : : : : : : : : : : union : : : : : : : : : : (select t.schema_id as table_schema_id, t.id as table_id, t.name as table_name, tri.id as trigger_id, tri.name as trigger_name, dep.depend_type as depend_type : : : : : : : : : : from sys.tables as t, sys.triggers as tri, sys.dependencies as dep : : : : : : : : : : where dep.id = t.id and dep.depend_id = tri.id : : : : : : : : : : and dep.depend_type = 8) : : : : : : : : : : order by table_schema_id, table_name, trigger_name; : : : : : : | 6538 | dependency_columns_on_triggers | 2000 | create view sys.dependency_columns_on_triggers as | 11 | true | 0 | 0 | 0 | : : : : select t.schema_id as table_schema_id, t.id as table_id, t.name as table_name, tri.id as trigger_id, tri.name as trigger_name, c.id as column_id, c.name as column_name, dep.depend_type as depend_type : : : : : : : : : : from sys.tables as t, sys.columns as c, sys.triggers as tri, sys.dependencies as dep : : : : : : : : : : where dep.id = c.id and dep.depend_id = tri.id and c.table_id = t.id : : : : : : : : : : and dep.depend_type = 8 : : : : : : : : : : order by t.schema_id, t.name, tri.name, c.name; : : : : : : | 6548 | dependency_functions_on_triggers | 2000 | create view sys.dependency_functions_on_triggers as | 11 | true | 0 | 0 | 0 | : : : : select f.schema_id as function_schema_id, f.id as function_id, f.name as function_name, f.type as function_type, : : : : : : : : : : tri.id as trigger_id, tri.name as trigger_name, tri.table_id as trigger_table_id, dep.depend_type as depend_type : : : : : : : : : : from sys.functions as f, sys.triggers as tri, sys.dependencies as dep : : : : : : : : : : where dep.id = f.id and dep.depend_id = tri.id : : : : : : : : : : and dep.depend_type = 8 : : : : : : : : : : order by f.schema_id, f.name, tri.name; : : : : : : | 6557 | dependency_tables_on_indexes | 2000 | create view sys.dependency_tables_on_indexes as | 11 | true | 0 | 0 | 0 | : : : : select t.schema_id as table_schema_id, t.id as table_id, t.name as table_name, i.id as index_id, i.name as index_name, i.type as index_type, cast(10 as smallint) as depend_type : : : : : : : : : : from sys.tables as t, sys.idxs as i : : : : : : : : : : where i.table_id = t.id : : : : : : : : : : : : : : : : : : : : and (i.table_id, i.name) not in (select k.table_id, k.name from sys.keys k) : : : : : : : : : : order by t.schema_id, t.name, i.name; : : : : : : | 6569 | dependency_columns_on_indexes | 2000 | create view sys.dependency_columns_on_indexes as | 11 | true | 0 | 0 | 0 | : : : : select c.id as column_id, c.name as column_name, t.id as table_id, t.name as table_name, t.schema_id, i.id as index_id, i.name as index_name, i.type as index_type, cast(ic.nr +1 as int) as seq_nr, cast(10 as smallint) as depend_type : : : : : : : : : : from sys.tables as t, sys.columns as c, sys.objects as ic, sys.idxs as i : : : : : : : : : : where ic.name = c.name and ic.id = i.id and c.table_id = i.table_id and c.table_id = t.id : : : : : : : : : : : : : : : : : : : : and (i.table_id, i.name) not in (select k.table_id, k.name from sys.keys k) : : : : : : : : : : order by c.name, t.name, t.schema_id, i.name, ic.nr; : : : : : : | 6577 | dependency_tables_on_foreignkeys | 2000 | create view sys.dependency_tables_on_foreignkeys as | 11 | true | 0 | 0 | 0 | : : : : select t.schema_id as table_schema_id, t.id as table_id, t.name as table_name, fk.name as fk_name, cast(k.type as smallint) as key_type, cast(11 as smallint) as depend_type : : : : : : : : : : from sys.tables as t, sys.keys as k, sys.keys as fk : : : : : : : : : : where fk.rkey = k.id and k.table_id = t.id : : : : : : : : : : order by t.schema_id, t.name, fk.name; : : : : : : | 6587 | dependency_keys_on_foreignkeys | 2000 | create view sys.dependency_keys_on_foreignkeys as | 11 | true | 0 | 0 | 0 | : : : : select k.table_id as key_table_id, k.id as key_id, k.name as key_name, fk.table_id as fk_table_id, fk.id as fk_id, fk.name as fk_name, cast(k.type as smallint) as key_type, cast(11 as smallint) as depend_type : : : : : : : : : : from sys.keys as k, sys.keys as fk : : : : : : : : : : where k.id = fk.rkey : : : : : : : : : : order by k.name, fk.name; : : : : : : | 6596 | dependency_tables_on_procedures | 2000 | create view sys.dependency_tables_on_procedures as | 11 | true | 0 | 0 | 0 | : : : : select t.schema_id as table_schema_id, t.id as table_id, t.name as table_name, p.id as procedure_id, p.name as procedure_name, p.type as procedure_type, dep.depend_type as depend_type : : : : : : : : : : from sys.functions as p, sys.tables as t, sys.dependencies as dep : : : : : : : : : : where t.id = dep.id and p.id = dep.depend_id : : : : : : : : : : and dep.depend_type = 13 and p.type = 2 and t.type not in (1, 11) : : : : : : : : : : order by t.name, t.schema_id, p.name, p.id; : : : : : : | 6605 | dependency_views_on_procedures | 2000 | create view sys.dependency_views_on_procedures as | 11 | true | 0 | 0 | 0 | : : : : select v.schema_id as view_schema_id, v.id as view_id, v.name as view_name, p.id as procedure_id, p.name as procedure_name, p.type as procedure_type, dep.depend_type as depend_type : : : : : : : : : : from sys.functions as p, sys.tables as v, sys.dependencies as dep : : : : : : : : : : where v.id = dep.id and p.id = dep.depend_id : : : : : : : : : : and dep.depend_type = 13 and p.type = 2 and v.type in (1, 11) : : : : : : : : : : order by v.name, v.schema_id, p.name, p.id; : : : : : : | 6614 | dependency_columns_on_procedures | 2000 | create view sys.dependency_columns_on_procedures as | 11 | true | 0 | 0 | 0 | : : : : select c.table_id, c.id as column_id, c.name as column_name, p.id as procedure_id, p.name as procedure_name, p.type as procedure_type, dep.depend_type as depend_type : : : : : : : : : : from sys.functions as p, sys.columns as c, sys.dependencies as dep : : : : : : : : : : where c.id = dep.id and p.id = dep.depend_id : : : : : : : : : : and dep.depend_type = 13 and p.type = 2 : : : : : : : : : : order by c.name, c.table_id, p.name, p.id; : : : : : : | 6625 | dependency_functions_on_procedures | 2000 | create view sys.dependency_functions_on_procedures as | 11 | true | 0 | 0 | 0 | : : : : select f.schema_id as function_schema_id, f.id as function_id, f.name as function_name, f.type as function_type, : : : : : : : : : : p.schema_id as procedure_schema_id, p.id as procedure_id, p.name as procedure_name, p.type as procedure_type, dep.depend_type as depend_type : : : : : : : : : : from sys.functions as p, sys.functions as f, sys.dependencies as dep : : : : : : : : : : where f.id = dep.id and p.id = dep.depend_id : : : : : : : : : : and dep.depend_type = 13 and p.type = 2 : : : : : : : : : : order by p.name, p.id, f.name, f.id; : : : : : : | 6635 | dependency_columns_on_types | 2000 | create view sys.dependency_columns_on_types as | 11 | true | 0 | 0 | 0 | : : : : select t.schema_id as table_schema_id, t.id as table_id, t.name as table_name, dt.id as type_id, dt.sqlname as type_name, c.id as column_id, c.name as column_name, dep.depend_type as depend_type : : : : : : : : : : from sys.tables as t, sys.columns as c, sys.types as dt, sys.dependencies as dep : : : : : : : : : : where dep.id = dt.id and dep.depend_id = c.id and c.table_id = t.id : : : : : : : : : : and dep.depend_type = 15 : : : : : : : : : : order by dt.sqlname, t.name, c.name, c.id; : : : : : : | 6643 | dependency_functions_on_types | 2000 | create view sys.dependency_functions_on_types as | 11 | true | 0 | 0 | 0 | : : : : select dt.id as type_id, dt.sqlname as type_name, f.id as function_id, f.name as function_name, f.type as function_type, dep.depend_type as depend_type : : : : : : : : : : from sys.functions as f, sys.types as dt, sys.dependencies as dep : : : : : : : : : : where dep.id = dt.id and dep.depend_id = f.id : : : : : : : : : : and dep.depend_type = 15 : : : : : : : : : : order by dt.sqlname, f.name, f.id; : : : : : : | 6653 | dependency_args_on_types | 2000 | create view sys.dependency_args_on_types as | 11 | true | 0 | 0 | 0 | : : : : select dt.id as type_id, dt.sqlname as type_name, f.id as function_id, f.name as function_name, a.id as arg_id, a.name as arg_name, a.number as arg_nr, dep.depend_type as depend_type : : : : : : : : : : from sys.args as a, sys.functions as f, sys.types as dt, sys.dependencies as dep : : : : : : : : : : where dep.id = dt.id and dep.depend_id = a.id and a.func_id = f.id : : : : : : : : : : and dep.depend_type = 15 : : : : : : : : : : order by dt.sqlname, f.name, a.number, a.name; : : : : : : | 6679 | sessions | 2000 | create view sys.sessions as select * from sys.sessions(); | 11 | true | 0 | 0 | 0 | | 6750 | optimizers | 2000 | create view sys.optimizers as select * from sys.optimizers(); | 11 | true | 0 | 0 | 0 | | 6754 | environment | 2000 | create view sys.environment as select * from sys.env(); | 11 | true | 0 | 0 | 0 | | 6837 | queue | 2000 | create view sys.queue as select * from sys.queue(); | 11 | true | 0 | 0 | 0 | | 6867 | rejects | 2000 | create view sys.rejects as select * from sys.rejects(); | 11 | true | 0 | 0 | 0 | | 7408 | keywords | 2000 | null | 10 | true | 0 | 1 | 0 | | 7416 | table_types | 2000 | null | 10 | true | 0 | 1 | 0 | | 7425 | function_types | 2000 | null | 10 | true | 0 | 1 | 0 | | 7434 | function_languages | 2000 | null | 10 | true | 0 | 1 | 0 | | 7442 | key_types | 2000 | null | 10 | true | 0 | 1 | 0 | | 7450 | index_types | 2000 | null | 10 | true | 0 | 1 | 0 | | 7458 | privilege_codes | 2000 | null | 10 | true | 0 | 1 | 0 | | 7463 | roles | 2000 | create view sys.roles as select id, name, grantor from sys.auths a where a.name not in (select u.name from sys.db_users() u); | 11 | true | 0 | 0 | 0 | | 7467 | var_values | 2000 | create view sys.var_values (var_name, value) as | 11 | true | 0 | 0 | 0 | : : : : select 'cache' as var_name, convert(cache, varchar(10)) as value union all : : : : : : : : : : select 'current_role', current_role union all : : : : : : : : : : select 'current_schema', current_schema union all : : : : : : : : : : select 'current_timezone', current_timezone union all : : : : : : : : : : select 'current_user', current_user union all : : : : : : : : : : select 'debug', debug union all : : : : : : : : : : select 'last_id', last_id union all : : : : : : : : : : select 'optimizer', optimizer union all : : : : : : : : : : select 'pi', pi() union all : : : : : : : : : : select 'rowcnt', rowcnt; : : : : : : | 7567 | storage | 2000 | create view sys."storage" as | 11 | true | 0 | 0 | 0 | : : : : select * from sys."storage"() : : : : : : : : : : where ("schema", "table") in ( : : : : : : : : : : select sch."name", tbl."name" : : : : : : : : : : from sys."tables" as tbl join sys."schemas" as sch on tbl.schema_id = sch.id : : : : : : : : : : where tbl."system" = false) : : : : : : : : : : order by "schema", "table", "column"; : : : : : : | 7578 | tablestorage | 2000 | create view sys."tablestorage" as | 11 | true | 0 | 0 | 0 | : : : : select "schema", "table", : : : : : : : : : : max("count") as "rowcount", : : : : : : : : : : count(*) as "storages", : : : : : : : : : : sum(columnsize) as columnsize, : : : : : : : : : : sum(heapsize) as heapsize, : : : : : : : : : : sum(hashes) as hashsize, : : : : : : : : : : sum("imprints") as imprintsize, : : : : : : : : : : sum(orderidx) as orderidxsize : : : : : : : : : : from sys."storage" : : : : : : : : : : group by "schema", "table" : : : : : : : : : : order by "schema", "table"; : : : : : : | 7587 | schemastorage | 2000 | create view sys."schemastorage" as | 11 | true | 0 | 0 | 0 | : : : : select "schema", : : : : : : : : : : count(*) as "storages", : : : : : : : : : : sum(columnsize) as columnsize, : : : : : : : : : : sum(heapsize) as heapsize, : : : : : : : : : : sum(hashes) as hashsize, : : : : : : : : : : sum("imprints") as imprintsize, : : : : : : : : : : sum(orderidx) as orderidxsize : : : : : : : : : : from sys."storage" : : : : : : : : : : group by "schema" : : : : : : : : : : order by "schema"; : : : : : : | 7664 | storagemodelinput | 2000 | null | 10 | true | 0 | 0 | 0 | | 7703 | storagemodel | 2000 | create view sys.storagemodel as | 11 | true | 0 | 0 | 0 | : : : : select "schema", "table", "column", "type", "count", : : : : : : : : : : sys.columnsize("type", "count") as columnsize, : : : : : : : : : : sys.heapsize("type", "count", "distinct", "atomwidth") as heapsize, : : : : : : : : : : sys.hashsize("reference", "count") as hashsize, : : : : : : : : : : case when isacolumn then sys.imprintsize("type", "count") else 0 end as imprintsize, : : : : : : : : : : case when (isacolumn and not sorted) then cast(8 * "count" as bigint) else 0 end as orderidxsize, : : : : : : : : : : sorted, "unique", isacolumn : : : : : : : : : : from sys.storagemodelinput : : : : : : : : : : order by "schema", "table", "column"; : : : : : : | 7714 | tablestoragemodel | 2000 | create view sys.tablestoragemodel as | 11 | true | 0 | 0 | 0 | : : : : select "schema", "table", : : : : : : : : : : max("count") as "rowcount", : : : : : : : : : : count(*) as "storages", : : : : : : : : : : sum(sys.columnsize("type", "count")) as columnsize, : : : : : : : : : : sum(sys.heapsize("type", "count", "distinct", "atomwidth")) as heapsize, : : : : : : : : : : sum(sys.hashsize("reference", "count")) as hashsize, : : : : : : : : : : sum(case when isacolumn then sys.imprintsize("type", "count") else 0 end) as imprintsize, : : : : : : : : : : sum(case when (isacolumn and not sorted) then cast(8 * "count" as bigint) else 0 end) as orderidxsize : : : : : : : : : : from sys.storagemodelinput : : : : : : : : : : group by "schema", "table" : : : : : : : : : : order by "schema", "table"; : : : : : : | 7728 | statistics | 2000 | null | 10 | true | 0 | 0 | 0 | | 7858 | systemfunctions | 2000 | create view sys.systemfunctions as select id as function_id from sys.functions where system; | 11 | true | 0 | 0 | 0 | +------+------------------------------------+-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+--------+---------------+--------+-----------+ 77 tuples pspg-5.8.1/tests/multiline-a.txt000066400000000000000000000003001452457446400166310ustar00rootroot00000000000000+---+---+---+ | a | b | c | +---+---+---+ | 1 | a+| a+| | | b | b+| | | | c | | 3 | a+| a+| | | b | b+| | | | c | | 2 | a+| a+| | | b | b+| | | | c | +---+---+---+ (3 rows) pspg-5.8.1/tests/multiline-u.txt000066400000000000000000000005601452457446400166650ustar00rootroot00000000000000┌───┬───┬───┐ │ a │ b │ c │ ╞═══╪═══╪═══╡ │ 1 │ a↵│ a↵│ │ │ b │ b↵│ │ │ │ c │ │ 3 │ a↵│ a↵│ │ │ b │ b↵│ │ │ │ c │ │ 2 │ a↵│ a↵│ │ │ b │ b↵│ │ │ │ c │ └───┴───┴───┘ (3 rows) pspg-5.8.1/tests/mysql-ascii.txt000066400000000000000000000111431452457446400166530ustar00rootroot00000000000000+------+------------------+-----------------------------------------------------------------------------------------------------------------------+-------------+-------+--------+--------+------------------------------------------------------------------------------------------------------------------------------------------------+ | FID | title | description | category | price | length | rating | actors | +------+------------------+-----------------------------------------------------------------------------------------------------------------------+-------------+-------+--------+--------+------------------------------------------------------------------------------------------------------------------------------------------------+ | 1 | ACADEMY DINOSAUR | A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies | Documentary | 0.99 | 86 | PG | Penelope Guiness, Christian Gable, Lucille Tracy, Sandra Peck, Johnny Cage, Mena Temple, Warren Nolte, Oprah Kilmer, Rock Dukakis, Mary Keitel | | 2 | ACE GOLDFINGER | A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China | Horror | 4.99 | 48 | G | Bob Fawcett, Minnie Zellweger, Sean Guiness, Chris Depp | | 3 | ADAPTATION HOLES | A Astounding Reflection of a Lumberjack And a Car who must Sink a Lumberjack in A Baloon Factory | Documentary | 2.99 | 50 | NC-17 | Nick Wahlberg, Bob Fawcett, Cameron Streep, Ray Johansson, Julianne Dench | | 4 | AFFAIR PREJUDICE | A Fanciful Documentary of a Frisbee And a Lumberjack who must Chase a Monkey in A Shark Tank | Horror | 2.99 | 117 | G | Jodie Degeneres, Scarlett Damon, Kenneth Pesci, Fay Winslet, Oprah Kilmer | | 5 | AFRICAN EGG | A Fast-Paced Documentary of a Pastry Chef And a Dentist who must Pursue a Forensic Psychologist in The Gulf of Mexico | Family | 2.99 | 130 | G | Gary Phoenix, Dustin Tautou, Matthew Leigh, Matthew Carrey, Thora Temple | | 6 | AGENT TRUMAN | A Intrepid Panorama of a Robot And a Boy who must Escape a Sumo Wrestler in Ancient China | Foreign | 2.99 | 169 | PG | Kirsten Paltrow, Sandra Kilmer, Jayne Neeson, Warren Nolte, Morgan Williams, Kenneth Hoffman, Reese West | | 7 | AIRPLANE SIERRA | A Touching Saga of a Hunter And a Butler who must Discover a Butler in A Jet Boat | Comedy | 4.99 | 62 | PG-13 | Jim Mostel, Richard Penn, Oprah Kilmer, Mena Hopper, Michael Bolger | | 8 | AIRPORT POLLOCK | A Epic Tale of a Moose And a Girl who must Confront a Monkey in Ancient India | Horror | 4.99 | 54 | R | Fay Kilmer, Gene Willis, Susan Davis, Lucille Dee | | 9 | ALABAMA DEVIL | A Thoughtful Panorama of a Database Administrator And a Mad Scientist who must Outgun a Mad Scientist in A Jet Boat | Horror | 2.99 | 114 | PG-13 | Christian Gable, Elvis Marx, Rip Crawford, Mena Temple, Rip Winslet, Warren Nolte, Greta Keitel, William Hackman, Meryl Allen | | 10 | ALADDIN CALENDAR | A Action-Packed Tale of a Man And a Lumberjack who must Reach a Feminist in Ancient China | Sports | 4.99 | 63 | NC-17 | Alec Wayne, Judy Dean, Val Bolger, Ray Johansson, Renee Tracy, Jada Ryder, Greta Malden, Rock Dukakis | +------+------------------+-----------------------------------------------------------------------------------------------------------------------+-------------+-------+--------+--------+------------------------------------------------------------------------------------------------------------------------------------------------+ 10 rows in set (0.06 sec) MariaDB [sakila]> pspg-5.8.1/tests/mysql.txt000066400000000000000000000006431452457446400155700ustar00rootroot00000000000000+------+------------------+ | fid | title | +------+------------------+ | 1 | ACADEMY DINOSAUR | | 2 | ACE GOLDFINGER | | 3 | ADAPTATION HOLES | | 4 | AFFAIR PREJUDICE | | 5 | AFRICAN EGG | | 6 | AGENT TRUMAN | | 7 | AIRPLANE SIERRA | | 8 | AIRPORT POLLOCK | | 9 | ALABAMA DEVIL | | 10 | ALADDIN CALENDAR | +------+------------------+ (10 rows) in set (0.06 sec)pspg-5.8.1/tests/nu.txt000066400000000000000000000041071452457446400150440ustar00rootroot00000000000000╭───┬──────┬───────────────────────────────────────────┬──────┬───────────┬──────────────────┬──────────────╮ │ # │ name │ brand │ freq │ cpu_usage │ load_average │ vendor_id │ ├───┼──────┼───────────────────────────────────────────┼──────┼───────────┼──────────────────┼──────────────┤ │ 0 │ cpu0 │ Intel(R) Core(TM) i7-2630QM CPU @ 2.00GHz │ 4 │ 0.00 │ 0.82, 0.86, 0.91 │ GenuineIntel │ │ 1 │ cpu1 │ Intel(R) Core(TM) i7-2630QM CPU @ 2.00GHz │ 4 │ 0.00 │ 0.82, 0.86, 0.91 │ GenuineIntel │ │ 2 │ cpu2 │ Intel(R) Core(TM) i7-2630QM CPU @ 2.00GHz │ 4 │ 0.00 │ 0.82, 0.86, 0.91 │ GenuineIntel │ │ 3 │ cpu3 │ Intel(R) Core(TM) i7-2630QM CPU @ 2.00GHz │ 4 │ 0.00 │ 0.82, 0.86, 0.91 │ GenuineIntel │ │ 4 │ cpu4 │ Intel(R) Core(TM) i7-2630QM CPU @ 2.00GHz │ 4 │ 0.00 │ 0.82, 0.86, 0.91 │ GenuineIntel │ │ 5 │ cpu5 │ Intel(R) Core(TM) i7-2630QM CPU @ 2.00GHz │ 4 │ 0.00 │ 0.82, 0.86, 0.91 │ GenuineIntel │ │ 6 │ cpu6 │ Intel(R) Core(TM) i7-2630QM CPU @ 2.00GHz │ 4 │ 0.00 │ 0.82, 0.86, 0.91 │ GenuineIntel │ │ 7 │ cpu7 │ Intel(R) Core(TM) i7-2630QM CPU @ 2.00GHz │ 4 │ 0.00 │ 0.82, 0.86, 0.91 │ GenuineIntel │ ╰───┴──────┴───────────────────────────────────────────┴──────┴───────────┴──────────────────┴──────────────╯ pspg-5.8.1/tests/oracle.txt000066400000000000000000001004641452457446400156720ustar00rootroot00000000000000 TABLE_NAME TABLESPACE_NAME CLUSTER_NAME IOT_NAME STATUS PCT_FREE PCT_USED INI_TRANS MAX_TRANS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE FREELISTS FREELIST_GROUPS LOGGING BACKED_UP NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE CHAIN_CNT AVG_ROW_LEN AVG_SPACE_FREELIST_BLOCKS NUM_FREELIST_BLOCKS DEGREE INSTANCES CACHE TABLE_LOCK SAMPLE_SIZE LAST_ANALYZED PARTITIONED IOT_TYPE TEMPORARY SECONDARY NESTED BUFFER_POOL FLASH_CACHE CELL_FLASH_CACHE ROW_MOVEMENT GLOBAL_STATS USER_STATS DURATION SKIP_CORRUPT MONITORING CLUSTER_OWNER DEPENDENCIES COMPRESSION COMPRESS_FOR DROPPED READ_ONLY SEGMENT_CREATED RESULT_CACHE CLUSTERING ACTIVITY_TRACKING DML_TIMESTAMP HAS_IDENTITY CONTAINER_DATA INMEMORY INMEMORY_PRIORITY INMEMORY_DISTRIBUTE INMEMORY_COMPRESSION INMEMORY_DUPLICATE DEFAULT_COLLATION DUPLICATED SHARDED EXTERNAL CELLMEMORY CONTAINERS_DEFAULT CONTAINER_MAP EXTENDED_DATA_LINK EXTENDED_DATA_LINK_MAP INMEMORY_SERVICE INMEMORY_SERVICE_NAME CONTAINER_MAP_OBJECT MEMOPTIMIZE_READ MEMOPTIMIZE_WRITE HAS_SENSITIVE_COLUMN ______________________________ __________________ _______________ ___________ _________ ___________ ___________ ____________ ____________ _________________ ______________ ______________ ______________ _______________ ____________ __________________ __________ ____________ ___________ _________ _______________ ____________ ____________ ______________ ____________________________ ______________________ _____________ _____________ ________ _____________ ______________ ________________ ______________ ___________ ____________ ____________ _________ ______________ ______________ ___________________ _______________ _______________ _____________ __________________ _______________ _____________ ________________ _______________ ______________ _______________ __________ ____________ __________________ _______________ _____________ ____________________ ________________ _______________ _________________ ___________ ____________________ ______________________ _______________________ _____________________ ____________________ _____________ __________ ___________ _____________ _____________________ ________________ _____________________ _________________________ ___________________ ________________________ _______________________ ___________________ ____________________ _______________________ LOGMNR_SESSION_EVOLVE$ SYSAUX VALID 10 1 255 65536 1048576 1 2147483645 YES N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 NO N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED DISABLED NO NO YES DEFAULT NO NO NO DISABLED USING_NLS_COMP N N NO NO NO NO NO NO DISABLED DISABLED NO LOGMNR_GLOBAL$ SYSAUX VALID 10 1 255 65536 1048576 1 2147483645 YES N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 NO N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED DISABLED NO NO YES DEFAULT NO NO NO DISABLED USING_NLS_COMP N N NO NO NO NO NO NO DISABLED DISABLED NO LOGMNR_PDB_INFO$ SYSAUX VALID 10 1 255 65536 1048576 1 2147483645 YES N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 NO N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED DISABLED NO NO YES DEFAULT NO NO NO DISABLED USING_NLS_COMP N N NO NO NO NO NO NO DISABLED DISABLED NO LOGMNR_DID$ SYSAUX VALID 10 1 255 65536 1048576 1 2147483645 YES N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 NO N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED DISABLED NO NO YES DEFAULT NO NO NO DISABLED USING_NLS_COMP N N NO NO NO NO NO NO DISABLED DISABLED NO LOGMNR_UID$ SYSAUX VALID 10 1 255 65536 1048576 1 2147483645 YES N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 NO N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED DISABLED NO NO YES DEFAULT NO NO NO DISABLED USING_NLS_COMP N N NO NO NO NO NO NO DISABLED DISABLED NO LOGMNRGGC_GTLO SYSTEM VALID 10 40 1 255 65536 1048576 1 2147483645 1 1 YES N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 NO N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED DISABLED NO NO YES DEFAULT NO NO NO DISABLED USING_NLS_COMP N N NO NO NO NO NO NO DISABLED DISABLED NO LOGMNRGGC_GTCS SYSTEM VALID 10 40 1 255 65536 1048576 1 2147483645 1 1 YES N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 NO N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED DISABLED NO NO YES DEFAULT NO NO NO DISABLED USING_NLS_COMP N N NO NO NO NO NO NO DISABLED DISABLED NO LOGMNRC_DBNAME_UID_MAP SYSAUX VALID 10 1 255 65536 1048576 1 2147483645 YES N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 NO N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED DISABLED NO NO YES DEFAULT NO NO NO DISABLED USING_NLS_COMP N N NO NO NO NO NO NO DISABLED DISABLED NO LOGMNR_LOG$ SYSAUX VALID 10 1 255 65536 1048576 1 2147483645 YES N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 NO N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED DISABLED NO NO YES DEFAULT NO NO NO DISABLED USING_NLS_COMP N N NO NO NO NO NO NO DISABLED DISABLED NO LOGMNR_PROCESSED_LOG$ SYSAUX VALID 10 1 255 65536 1048576 1 2147483645 YES N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 NO N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED DISABLED NO NO YES DEFAULT NO NO NO DISABLED USING_NLS_COMP N N NO NO NO NO NO NO DISABLED DISABLED NO LOGMNR_SPILL$ SYSAUX VALID 10 1 255 65536 1048576 1 2147483645 YES N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 NO N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED DISABLED NO NO YES DEFAULT NO NO NO DISABLED USING_NLS_COMP N N NO NO NO NO NO NO DISABLED DISABLED NO LOGMNR_AGE_SPILL$ SYSAUX VALID 10 1 255 65536 1048576 1 2147483645 YES N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 NO N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED DISABLED NO NO YES DEFAULT NO NO NO DISABLED USING_NLS_COMP N N NO NO NO NO NO NO DISABLED DISABLED NO LOGMNR_RESTART_CKPT_TXINFO$ SYSAUX VALID 10 1 255 65536 1048576 1 2147483645 YES N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 NO N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED DISABLED NO NO YES DEFAULT NO NO NO DISABLED USING_NLS_COMP N N NO NO NO NO NO NO DISABLED DISABLED NO LOGMNR_ERROR$ SYSAUX VALID 10 1 255 65536 1048576 1 2147483645 YES N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 NO N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED DISABLED NO NO YES DEFAULT NO NO NO DISABLED USING_NLS_COMP N N NO NO NO NO NO NO DISABLED DISABLED NO LOGMNR_KOPM$ VALID N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 YES N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED NO N/A N/A DEFAULT NO NO NO USING_NLS_COMP N N NO NO NO NO NO NO N/A N/A NO LOGMNR_PROPS$ VALID N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 YES N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED NO N/A N/A DEFAULT NO NO NO USING_NLS_COMP N N NO NO NO NO NO NO N/A N/A NO LOGMNR_ENC$ VALID N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 YES N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED NO N/A N/A DEFAULT NO NO NO USING_NLS_COMP N N NO NO NO NO NO NO N/A N/A NO LOGMNR_REFCON$ VALID N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 YES N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED NO N/A N/A DEFAULT NO NO NO USING_NLS_COMP N N NO NO NO NO NO NO N/A N/A NO LOGMNR_IDNSEQ$ VALID N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 YES N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED NO N/A N/A DEFAULT NO NO NO USING_NLS_COMP N N NO NO NO NO NO NO N/A N/A NO LOGMNR_PARTOBJ$ VALID N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 YES N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED NO N/A N/A DEFAULT NO NO NO USING_NLS_COMP N N NO NO NO NO NO NO N/A N/A NO LOGMNRP_CTAS_PART_MAP VALID N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 YES N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED NO N/A N/A DEFAULT NO NO NO USING_NLS_COMP N N NO NO NO NO NO NO N/A N/A NO LOGMNR_SHARD_TS VALID N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 YES N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED NO N/A N/A DEFAULT NO NO NO USING_NLS_COMP N N NO NO NO NO NO NO N/A N/A NO LOGSTDBY$APPLY_PROGRESS VALID N 0 0 0 0 0 0 0 0 1 1 N ENABLED 0 18-OCT-18 YES N N NO DEFAULT DEFAULT DEFAULT DISABLED YES NO DISABLED YES DISABLED NO N/A N/A DEFAULT NO NO NO USING_NLS_COMP N N NO NO NO NO NO NO N/A N/A NO 131 rows selected. pspg-5.8.1/tests/pg_class.txt000066400000000000000000006367431452457446400162360ustar00rootroot00000000000000┌───────────────────────────────────────────┬──────────────┬─────────┬───────────┬──────────┬───────┬─────────────┬───────────────┬──────────┬───────────┬───────────────┬───────────────┬─────────────┬─────────────┬────────────────┬─────────┬──────────┬───────────┬────────────┬────────────┬─────────────┬────────────────┬────────────────┬────────────────┬─────────────────────┬────────────────┬──────────────┬────────────────┬──────────────┬────────────┬──────────────────────────────────────────┬─────────────────────────┬──────────────┐ │ relname │ relnamespace │ reltype │ reloftype │ relowner │ relam │ relfilenode │ reltablespace │ relpages │ reltuples │ relallvisible │ reltoastrelid │ relhasindex │ relisshared │ relpersistence │ relkind │ relnatts │ relchecks │ relhasoids │ relhaspkey │ relhasrules │ relhastriggers │ relhassubclass │ relrowsecurity │ relforcerowsecurity │ relispopulated │ relreplident │ relispartition │ relfrozenxid │ relminmxid │ relacl │ reloptions │ relpartbound │ ╞═══════════════════════════════════════════╪══════════════╪═════════╪═══════════╪══════════╪═══════╪═════════════╪═══════════════╪══════════╪═══════════╪═══════════════╪═══════════════╪═════════════╪═════════════╪════════════════╪═════════╪══════════╪═══════════╪════════════╪════════════╪═════════════╪════════════════╪════════════════╪════════════════╪═════════════════════╪════════════════╪══════════════╪════════════════╪══════════════╪════════════╪══════════════════════════════════════════╪═════════════════════════╪══════════════╡ │ pg_statistic │ 11 │ 11258 │ 0 │ 10 │ 0 │ 2619 │ 0 │ 16 │ 393 │ 16 │ 2840 │ t │ f │ p │ r │ 26 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres} │ │ │ │ pg_type │ 11 │ 71 │ 0 │ 10 │ 0 │ 0 │ 0 │ 9 │ 375 │ 9 │ 0 │ t │ f │ p │ r │ 30 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_toast_2604 │ 99 │ 11515 │ 0 │ 10 │ 0 │ 2830 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ t │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ pg_toast_2604_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 2831 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_toast_2606 │ 99 │ 11516 │ 0 │ 10 │ 0 │ 2832 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ t │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ pg_toast_2606_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 2833 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_toast_2609 │ 99 │ 11517 │ 0 │ 10 │ 0 │ 2834 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ t │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ pg_toast_2609_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 2835 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_toast_1255 │ 99 │ 11518 │ 0 │ 10 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ t │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ pg_toast_1255_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 0 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_toast_2618 │ 99 │ 11519 │ 0 │ 10 │ 0 │ 2838 │ 0 │ 51 │ 226 │ 51 │ 0 │ t │ f │ p │ t │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ pg_toast_2618_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 2839 │ 0 │ 2 │ 226 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_toast_3596 │ 99 │ 11520 │ 0 │ 10 │ 0 │ 3598 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ t │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ pg_toast_3596_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 3599 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_toast_2619 │ 99 │ 11521 │ 0 │ 10 │ 0 │ 2840 │ 0 │ 3 │ 13 │ 3 │ 0 │ t │ f │ p │ t │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ pg_toast_2619_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 2841 │ 0 │ 2 │ 13 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_toast_3381 │ 99 │ 11522 │ 0 │ 10 │ 0 │ 3439 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ t │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ pg_toast_3381_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 3440 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_toast_2620 │ 99 │ 11523 │ 0 │ 10 │ 0 │ 2336 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ t │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ pg_toast_2620_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 2337 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_toast_2396 │ 99 │ 11524 │ 0 │ 10 │ 0 │ 0 │ 1664 │ 0 │ 0 │ 0 │ 0 │ t │ t │ p │ t │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ pg_toast_2396_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 1 │ 0 │ 0 │ 0 │ f │ t │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_toast_2964 │ 99 │ 11525 │ 0 │ 10 │ 0 │ 0 │ 1664 │ 0 │ 0 │ 0 │ 0 │ t │ t │ p │ t │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ pg_toast_2964_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 1 │ 0 │ 0 │ 0 │ f │ t │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_toast_3592 │ 99 │ 11526 │ 0 │ 10 │ 0 │ 0 │ 1664 │ 0 │ 0 │ 0 │ 0 │ t │ t │ p │ t │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ pg_toast_3592_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 1 │ 0 │ 0 │ 0 │ f │ t │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_aggregate_fnoid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2650 │ 0 │ 2 │ 138 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_am_name_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2651 │ 0 │ 2 │ 6 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_am_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2652 │ 0 │ 2 │ 6 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_amop_fam_strat_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2653 │ 0 │ 5 │ 709 │ 0 │ 0 │ f │ f │ p │ i │ 4 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_amop_opr_fam_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2654 │ 0 │ 5 │ 709 │ 0 │ 0 │ f │ f │ p │ i │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_amop_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2756 │ 0 │ 4 │ 709 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_amproc_fam_proc_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2655 │ 0 │ 4 │ 411 │ 0 │ 0 │ f │ f │ p │ i │ 4 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_amproc_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2757 │ 0 │ 4 │ 411 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_policy │ 11 │ 11502 │ 0 │ 10 │ 0 │ 3256 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ r │ 7 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_attrdef_adrelid_adnum_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2656 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_attrdef_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2657 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_attribute_relid_attnam_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 0 │ 13 │ 2579 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_attribute_relid_attnum_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 0 │ 10 │ 2579 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_authid_rolname_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 2 │ 6 │ 0 │ 0 │ f │ t │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_authid_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 2 │ 6 │ 0 │ 0 │ f │ t │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_auth_members_role_member_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 2 │ 3 │ 0 │ 0 │ f │ t │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_auth_members_member_role_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 2 │ 3 │ 0 │ 0 │ f │ t │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_cast_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2660 │ 0 │ 2 │ 219 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_cast_source_target_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2661 │ 0 │ 2 │ 219 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_class_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 0 │ 4 │ 341 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_class_relname_nsp_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 0 │ 6 │ 341 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_class_tblspc_relfilenode_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 0 │ 5 │ 341 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_collation_name_enc_nsp_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3164 │ 0 │ 9 │ 964 │ 0 │ 0 │ f │ f │ p │ i │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_collation_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3085 │ 0 │ 5 │ 964 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_constraint_conname_nsp_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2664 │ 0 │ 2 │ 2 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_constraint_conrelid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2665 │ 0 │ 2 │ 2 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_constraint_contypid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2666 │ 0 │ 2 │ 2 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_constraint_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2667 │ 0 │ 2 │ 2 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_conversion_default_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2668 │ 0 │ 2 │ 132 │ 0 │ 0 │ f │ f │ p │ i │ 4 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_conversion_name_nsp_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2669 │ 0 │ 2 │ 132 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_conversion_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2670 │ 0 │ 2 │ 132 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_database_datname_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 2 │ 2 │ 0 │ 0 │ f │ t │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_database_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 2 │ 2 │ 0 │ 0 │ f │ t │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_depend_depender_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2673 │ 0 │ 40 │ 7327 │ 0 │ 0 │ f │ f │ p │ i │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_depend_reference_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2674 │ 0 │ 46 │ 7327 │ 0 │ 0 │ f │ f │ p │ i │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_description_o_c_o_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2675 │ 0 │ 22 │ 3924 │ 0 │ 0 │ f │ f │ p │ i │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_shdescription_o_c_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 2 │ 1 │ 0 │ 0 │ f │ t │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_enum_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3502 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_enum_typid_label_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3503 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_enum_typid_sortorder_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3534 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_index_indrelid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2678 │ 0 │ 2 │ 134 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_index_indexrelid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2679 │ 0 │ 2 │ 134 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_inherits_relid_seqno_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2680 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_inherits_parent_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2187 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_init_privs_o_c_o_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3395 │ 0 │ 2 │ 149 │ 0 │ 0 │ f │ f │ p │ i │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_language_name_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2681 │ 0 │ 2 │ 4 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_language_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2682 │ 0 │ 2 │ 4 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_largeobject_loid_pn_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2683 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_largeobject_metadata_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2996 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_statistic_ext_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3380 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_statistic_ext_name_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3997 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_statistic_ext_relid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3379 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_namespace_nspname_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2684 │ 0 │ 2 │ 6 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_namespace_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2685 │ 0 │ 2 │ 6 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_opclass_am_name_nsp_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2686 │ 0 │ 2 │ 133 │ 0 │ 0 │ f │ f │ p │ i │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_opclass_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2687 │ 0 │ 2 │ 133 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_operator_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2688 │ 0 │ 5 │ 787 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_operator_oprname_l_r_n_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2689 │ 0 │ 6 │ 787 │ 0 │ 0 │ f │ f │ p │ i │ 4 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_opfamily_am_name_nsp_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2754 │ 0 │ 2 │ 115 │ 0 │ 0 │ f │ f │ p │ i │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_opfamily_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2755 │ 0 │ 2 │ 115 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_pltemplate_name_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 2 │ 8 │ 0 │ 0 │ f │ t │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_proc_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 0 │ 10 │ 2894 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_proc_proname_args_nsp_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 0 │ 33 │ 2894 │ 0 │ 0 │ f │ f │ p │ i │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_rewrite_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2692 │ 0 │ 2 │ 121 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_rewrite_rel_rulename_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2693 │ 0 │ 2 │ 121 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_sequence_seqrelid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 5002 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_shdepend_depender_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 2 │ 6 │ 0 │ 0 │ f │ t │ p │ i │ 4 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_shdepend_reference_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 2 │ 6 │ 0 │ 0 │ f │ t │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_statistic_relid_att_inh_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2696 │ 0 │ 2 │ 393 │ 0 │ 0 │ f │ f │ p │ i │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_tablespace_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 2 │ 2 │ 0 │ 0 │ f │ t │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_tablespace_spcname_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 2 │ 2 │ 0 │ 0 │ f │ t │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_transform_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3574 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_transform_type_lang_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3575 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_trigger_tgconstraint_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2699 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_trigger_tgrelid_tgname_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2701 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_trigger_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 2702 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_event_trigger_evtname_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3467 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_event_trigger_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3468 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_ts_config_cfgname_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3608 │ 0 │ 2 │ 16 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_ts_config_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3712 │ 0 │ 2 │ 16 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_ts_config_map_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3609 │ 0 │ 4 │ 304 │ 0 │ 0 │ f │ f │ p │ i │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_ts_dict_dictname_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3604 │ 0 │ 2 │ 16 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_ts_dict_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3605 │ 0 │ 2 │ 16 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_ts_parser_prsname_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3606 │ 0 │ 2 │ 1 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_ts_parser_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3607 │ 0 │ 2 │ 1 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_ts_template_tmplname_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3766 │ 0 │ 2 │ 5 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_ts_template_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3767 │ 0 │ 2 │ 5 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_type_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 0 │ 2 │ 375 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_type_typname_nsp_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 0 │ 5 │ 375 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_foreign_data_wrapper_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 112 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_foreign_data_wrapper_name_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 548 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_foreign_server_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 113 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_foreign_server_name_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 549 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_user_mapping_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 174 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_user_mapping_user_server_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 175 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_foreign_table_relid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3119 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_default_acl_role_nsp_obj_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 827 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_default_acl_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 828 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_db_role_setting_databaseid_rol_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 1 │ 0 │ 0 │ 0 │ f │ t │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_seclabel_object_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3597 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 4 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_shseclabel_object_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 1 │ 0 │ 0 │ 0 │ f │ t │ p │ i │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_extension_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3080 │ 0 │ 2 │ 1 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_extension_name_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3081 │ 0 │ 2 │ 1 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_range_rngtypid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3542 │ 0 │ 2 │ 6 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_policy_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3257 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_policy_polrelid_polname_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3258 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_replication_origin_roiident_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 1 │ 0 │ 0 │ 0 │ f │ t │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_replication_origin_roname_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 1 │ 0 │ 0 │ 0 │ f │ t │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_partitioned_table_partrelid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 3351 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_publication_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 6110 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_publication_pubname_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 6111 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_publication_rel_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 6112 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_publication_rel_prrelid_prpubid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 6113 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_subscription_oid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 1 │ 0 │ 0 │ 0 │ f │ t │ p │ i │ 1 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_subscription_subname_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 0 │ 1664 │ 1 │ 0 │ 0 │ 0 │ f │ t │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_subscription_rel_srrelid_srsubid_index │ 11 │ 0 │ 0 │ 10 │ 403 │ 6117 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_authid │ 11 │ 2842 │ 0 │ 10 │ 0 │ 0 │ 1664 │ 1 │ 6 │ 1 │ 0 │ t │ t │ p │ r │ 11 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres} │ │ │ │ pg_shadow │ 11 │ 11532 │ 0 │ 10 │ 0 │ 11531 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 9 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres} │ │ │ │ pg_settings │ 11 │ 11601 │ 0 │ 10 │ 0 │ 11600 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 17 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=rw/postgres} │ │ │ │ pg_hba_file_rules │ 11 │ 11609 │ 0 │ 10 │ 0 │ 11608 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 9 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres} │ │ │ │ pg_file_settings │ 11 │ 11606 │ 0 │ 10 │ 0 │ 11605 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres} │ │ │ │ pg_config │ 11 │ 11618 │ 0 │ 10 │ 0 │ 11617 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 2 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres} │ │ │ │ pg_user_mapping │ 11 │ 11500 │ 0 │ 10 │ 0 │ 1418 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ r │ 3 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres} │ │ │ │ pg_replication_origin_status │ 11 │ 11732 │ 0 │ 10 │ 0 │ 11731 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 4 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres} │ │ │ │ pg_subscription │ 11 │ 6101 │ 0 │ 10 │ 0 │ 0 │ 1664 │ 0 │ 0 │ 0 │ 0 │ t │ t │ p │ r │ 8 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres} │ │ │ │ pg_stat_user_tables │ 11 │ 11636 │ 0 │ 10 │ 0 │ 11635 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 22 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_xact_user_tables │ 11 │ 11640 │ 0 │ 10 │ 0 │ 11639 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 11 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_attribute │ 11 │ 75 │ 0 │ 10 │ 0 │ 0 │ 0 │ 48 │ 2579 │ 48 │ 0 │ t │ f │ p │ r │ 22 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_proc │ 11 │ 81 │ 0 │ 10 │ 0 │ 0 │ 0 │ 74 │ 2894 │ 74 │ 2836 │ t │ f │ p │ r │ 29 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_class │ 11 │ 83 │ 0 │ 10 │ 0 │ 0 │ 0 │ 11 │ 341 │ 11 │ 0 │ t │ f │ p │ r │ 33 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_attrdef │ 11 │ 10000 │ 0 │ 10 │ 0 │ 2604 │ 0 │ 0 │ 0 │ 0 │ 2830 │ t │ f │ p │ r │ 4 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_constraint │ 11 │ 10001 │ 0 │ 10 │ 0 │ 2606 │ 0 │ 1 │ 2 │ 1 │ 2832 │ t │ f │ p │ r │ 24 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_statio_all_tables │ 11 │ 11643 │ 0 │ 10 │ 0 │ 11642 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 11 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_statio_sys_tables │ 11 │ 11647 │ 0 │ 10 │ 0 │ 11646 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 11 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_statio_user_tables │ 11 │ 11650 │ 0 │ 10 │ 0 │ 11649 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 11 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_all_indexes │ 11 │ 11653 │ 0 │ 10 │ 0 │ 11652 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 8 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_inherits │ 11 │ 10002 │ 0 │ 10 │ 0 │ 2611 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ r │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_index │ 11 │ 10003 │ 0 │ 10 │ 0 │ 2610 │ 0 │ 3 │ 134 │ 3 │ 0 │ t │ f │ p │ r │ 19 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_operator │ 11 │ 10004 │ 0 │ 10 │ 0 │ 2617 │ 0 │ 15 │ 787 │ 15 │ 0 │ t │ f │ p │ r │ 14 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_opfamily │ 11 │ 10005 │ 0 │ 10 │ 0 │ 2753 │ 0 │ 2 │ 115 │ 2 │ 0 │ t │ f │ p │ r │ 4 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_opclass │ 11 │ 10006 │ 0 │ 10 │ 0 │ 2616 │ 0 │ 3 │ 133 │ 3 │ 0 │ t │ f │ p │ r │ 8 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_am │ 11 │ 10130 │ 0 │ 10 │ 0 │ 2601 │ 0 │ 1 │ 6 │ 1 │ 0 │ t │ f │ p │ r │ 3 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_amop │ 11 │ 10131 │ 0 │ 10 │ 0 │ 2602 │ 0 │ 6 │ 709 │ 6 │ 0 │ t │ f │ p │ r │ 8 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_amproc │ 11 │ 10841 │ 0 │ 10 │ 0 │ 2603 │ 0 │ 4 │ 411 │ 4 │ 0 │ t │ f │ p │ r │ 5 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_language │ 11 │ 11253 │ 0 │ 10 │ 0 │ 2612 │ 0 │ 1 │ 4 │ 1 │ 0 │ t │ f │ p │ r │ 8 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_largeobject_metadata │ 11 │ 11254 │ 0 │ 10 │ 0 │ 2995 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ r │ 2 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_aggregate │ 11 │ 11256 │ 0 │ 10 │ 0 │ 2600 │ 0 │ 2 │ 138 │ 2 │ 0 │ t │ f │ p │ r │ 20 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_statistic_ext │ 11 │ 11257 │ 0 │ 10 │ 0 │ 3381 │ 0 │ 0 │ 0 │ 0 │ 3439 │ t │ f │ p │ r │ 8 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_rewrite │ 11 │ 11259 │ 0 │ 10 │ 0 │ 2618 │ 0 │ 12 │ 121 │ 12 │ 2838 │ t │ f │ p │ r │ 7 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_trigger │ 11 │ 11260 │ 0 │ 10 │ 0 │ 2620 │ 0 │ 0 │ 0 │ 0 │ 2336 │ t │ f │ p │ r │ 17 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_event_trigger │ 11 │ 11261 │ 0 │ 10 │ 0 │ 3466 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ r │ 6 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_description │ 11 │ 11262 │ 0 │ 10 │ 0 │ 2609 │ 0 │ 35 │ 3924 │ 35 │ 2834 │ t │ f │ p │ r │ 4 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_cast │ 11 │ 11263 │ 0 │ 10 │ 0 │ 2605 │ 0 │ 2 │ 219 │ 2 │ 0 │ t │ f │ p │ r │ 5 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_enum │ 11 │ 11483 │ 0 │ 10 │ 0 │ 3501 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ r │ 3 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_namespace │ 11 │ 11484 │ 0 │ 10 │ 0 │ 2615 │ 0 │ 1 │ 6 │ 1 │ 0 │ t │ f │ p │ r │ 3 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_conversion │ 11 │ 11485 │ 0 │ 10 │ 0 │ 2607 │ 0 │ 3 │ 132 │ 3 │ 0 │ t │ f │ p │ r │ 7 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_depend │ 11 │ 11486 │ 0 │ 10 │ 0 │ 2608 │ 0 │ 54 │ 7327 │ 54 │ 0 │ t │ f │ p │ r │ 7 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_database │ 11 │ 1248 │ 0 │ 10 │ 0 │ 0 │ 1664 │ 1 │ 2 │ 1 │ 0 │ t │ t │ p │ r │ 13 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_db_role_setting │ 11 │ 11487 │ 0 │ 10 │ 0 │ 0 │ 1664 │ 0 │ 0 │ 0 │ 2966 │ t │ t │ p │ r │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_tablespace │ 11 │ 11488 │ 0 │ 10 │ 0 │ 0 │ 1664 │ 1 │ 2 │ 1 │ 0 │ t │ t │ p │ r │ 4 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_pltemplate │ 11 │ 11489 │ 0 │ 10 │ 0 │ 0 │ 1664 │ 1 │ 8 │ 1 │ 0 │ t │ t │ p │ r │ 8 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_auth_members │ 11 │ 2843 │ 0 │ 10 │ 0 │ 0 │ 1664 │ 1 │ 3 │ 1 │ 0 │ t │ t │ p │ r │ 4 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_shdepend │ 11 │ 11490 │ 0 │ 10 │ 0 │ 0 │ 1664 │ 1 │ 6 │ 1 │ 0 │ t │ t │ p │ r │ 7 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_shdescription │ 11 │ 11491 │ 0 │ 10 │ 0 │ 0 │ 1664 │ 1 │ 1 │ 1 │ 2846 │ t │ t │ p │ r │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_ts_config │ 11 │ 11492 │ 0 │ 10 │ 0 │ 3602 │ 0 │ 1 │ 16 │ 1 │ 0 │ t │ f │ p │ r │ 4 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_ts_config_map │ 11 │ 11493 │ 0 │ 10 │ 0 │ 3603 │ 0 │ 2 │ 304 │ 2 │ 0 │ t │ f │ p │ r │ 4 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_ts_dict │ 11 │ 11494 │ 0 │ 10 │ 0 │ 3600 │ 0 │ 1 │ 16 │ 1 │ 0 │ t │ f │ p │ r │ 5 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_ts_parser │ 11 │ 11495 │ 0 │ 10 │ 0 │ 3601 │ 0 │ 1 │ 1 │ 1 │ 0 │ t │ f │ p │ r │ 7 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_ts_template │ 11 │ 11496 │ 0 │ 10 │ 0 │ 3764 │ 0 │ 1 │ 5 │ 1 │ 0 │ t │ f │ p │ r │ 4 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_extension │ 11 │ 11497 │ 0 │ 10 │ 0 │ 3079 │ 0 │ 1 │ 1 │ 1 │ 0 │ t │ f │ p │ r │ 7 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_foreign_data_wrapper │ 11 │ 11498 │ 0 │ 10 │ 0 │ 2328 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ r │ 6 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_foreign_server │ 11 │ 11499 │ 0 │ 10 │ 0 │ 1417 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ r │ 7 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_foreign_table │ 11 │ 11501 │ 0 │ 10 │ 0 │ 3118 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ r │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_replication_origin │ 11 │ 11503 │ 0 │ 10 │ 0 │ 0 │ 1664 │ 0 │ 0 │ 0 │ 0 │ t │ t │ p │ r │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_default_acl │ 11 │ 11504 │ 0 │ 10 │ 0 │ 826 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ r │ 4 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_init_privs │ 11 │ 11505 │ 0 │ 10 │ 0 │ 3394 │ 0 │ 2 │ 149 │ 2 │ 0 │ t │ f │ p │ r │ 5 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_seclabel │ 11 │ 11506 │ 0 │ 10 │ 0 │ 3596 │ 0 │ 0 │ 0 │ 0 │ 3598 │ t │ f │ p │ r │ 5 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_shseclabel │ 11 │ 4066 │ 0 │ 10 │ 0 │ 0 │ 1664 │ 0 │ 0 │ 0 │ 4060 │ t │ t │ p │ r │ 4 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_collation │ 11 │ 11507 │ 0 │ 10 │ 0 │ 3456 │ 0 │ 30 │ 964 │ 30 │ 0 │ t │ f │ p │ r │ 8 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_partitioned_table │ 11 │ 11508 │ 0 │ 10 │ 0 │ 3350 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ r │ 7 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_range │ 11 │ 11509 │ 0 │ 10 │ 0 │ 3541 │ 0 │ 1 │ 6 │ 1 │ 0 │ t │ f │ p │ r │ 6 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_transform │ 11 │ 11510 │ 0 │ 10 │ 0 │ 3576 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ r │ 4 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_sequence │ 11 │ 11511 │ 0 │ 10 │ 0 │ 2224 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ r │ 8 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_publication │ 11 │ 11512 │ 0 │ 10 │ 0 │ 6104 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ r │ 6 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_publication_rel │ 11 │ 11513 │ 0 │ 10 │ 0 │ 6106 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ r │ 2 │ 0 │ t │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_subscription_rel │ 11 │ 11514 │ 0 │ 10 │ 0 │ 6102 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ r │ 4 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_roles │ 11 │ 11528 │ 0 │ 10 │ 0 │ 11527 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 13 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_locks │ 11 │ 11578 │ 0 │ 10 │ 0 │ 11577 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 15 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_group │ 11 │ 11536 │ 0 │ 10 │ 0 │ 11535 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 3 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_user │ 11 │ 11539 │ 0 │ 10 │ 0 │ 11538 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 9 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_policies │ 11 │ 11542 │ 0 │ 10 │ 0 │ 11541 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 8 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_rules │ 11 │ 11546 │ 0 │ 10 │ 0 │ 11545 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 4 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_views │ 11 │ 11550 │ 0 │ 10 │ 0 │ 11549 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 4 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_tables │ 11 │ 11554 │ 0 │ 10 │ 0 │ 11553 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 8 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_matviews │ 11 │ 11558 │ 0 │ 10 │ 0 │ 11557 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_indexes │ 11 │ 11562 │ 0 │ 10 │ 0 │ 11561 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 5 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_sequences │ 11 │ 11566 │ 0 │ 10 │ 0 │ 11565 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 11 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stats │ 11 │ 11570 │ 0 │ 10 │ 0 │ 11569 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 14 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ {security_barrier=true} │ │ │ pg_publication_tables │ 11 │ 11574 │ 0 │ 10 │ 0 │ 11573 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 3 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_cursors │ 11 │ 11581 │ 0 │ 10 │ 0 │ 11580 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 6 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_available_extensions │ 11 │ 11584 │ 0 │ 10 │ 0 │ 11583 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 4 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_available_extension_versions │ 11 │ 11587 │ 0 │ 10 │ 0 │ 11586 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 8 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_prepared_xacts │ 11 │ 11590 │ 0 │ 10 │ 0 │ 11589 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 5 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_prepared_statements │ 11 │ 11594 │ 0 │ 10 │ 0 │ 11593 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 5 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_seclabels │ 11 │ 11597 │ 0 │ 10 │ 0 │ 11596 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 8 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_timezone_names │ 11 │ 11615 │ 0 │ 10 │ 0 │ 11614 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 4 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_timezone_abbrevs │ 11 │ 11612 │ 0 │ 10 │ 0 │ 11611 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 3 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_all_tables │ 11 │ 11621 │ 0 │ 10 │ 0 │ 11620 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 22 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_xact_all_tables │ 11 │ 11625 │ 0 │ 10 │ 0 │ 11624 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 11 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_sys_tables │ 11 │ 11629 │ 0 │ 10 │ 0 │ 11628 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 22 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_xact_sys_tables │ 11 │ 11633 │ 0 │ 10 │ 0 │ 11632 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 11 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_sys_indexes │ 11 │ 11657 │ 0 │ 10 │ 0 │ 11656 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 8 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_user_indexes │ 11 │ 11660 │ 0 │ 10 │ 0 │ 11659 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 8 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_statio_all_indexes │ 11 │ 11663 │ 0 │ 10 │ 0 │ 11662 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_statio_sys_indexes │ 11 │ 11667 │ 0 │ 10 │ 0 │ 11666 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_statio_user_indexes │ 11 │ 11670 │ 0 │ 10 │ 0 │ 11669 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_statio_all_sequences │ 11 │ 11673 │ 0 │ 10 │ 0 │ 11672 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 5 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_statio_sys_sequences │ 11 │ 11677 │ 0 │ 10 │ 0 │ 11676 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 5 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_statio_user_sequences │ 11 │ 11680 │ 0 │ 10 │ 0 │ 11679 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 5 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_activity │ 11 │ 11683 │ 0 │ 10 │ 0 │ 11682 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 20 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_replication │ 11 │ 11687 │ 0 │ 10 │ 0 │ 11686 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 19 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_wal_receiver │ 11 │ 11691 │ 0 │ 10 │ 0 │ 11690 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 12 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_subscription │ 11 │ 11694 │ 0 │ 10 │ 0 │ 11693 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 9 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_ssl │ 11 │ 11697 │ 0 │ 10 │ 0 │ 11696 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_replication_slots │ 11 │ 11700 │ 0 │ 10 │ 0 │ 11699 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 12 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_database │ 11 │ 11704 │ 0 │ 10 │ 0 │ 11703 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 19 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_database_conflicts │ 11 │ 11707 │ 0 │ 10 │ 0 │ 11706 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_user_functions │ 11 │ 11710 │ 0 │ 10 │ 0 │ 11709 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 6 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_xact_user_functions │ 11 │ 11714 │ 0 │ 10 │ 0 │ 11713 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 6 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_archiver │ 11 │ 11718 │ 0 │ 10 │ 0 │ 11717 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_bgwriter │ 11 │ 11721 │ 0 │ 10 │ 0 │ 11720 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 11 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_stat_progress_vacuum │ 11 │ 11724 │ 0 │ 10 │ 0 │ 11723 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 11 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_user_mappings │ 11 │ 11728 │ 0 │ 10 │ 0 │ 11727 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 6 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_largeobject │ 11 │ 11255 │ 0 │ 10 │ 0 │ 2613 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ r │ 3 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres} │ │ │ │ information_schema_catalog_name │ 12962 │ 12980 │ 0 │ 10 │ 0 │ 12979 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 1 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ attributes │ 12962 │ 12993 │ 0 │ 10 │ 0 │ 12992 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 31 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ applicable_roles │ 12962 │ 12986 │ 0 │ 10 │ 0 │ 12985 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 3 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ administrable_role_authorizations │ 12962 │ 12990 │ 0 │ 10 │ 0 │ 12989 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 3 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ check_constraint_routine_usage │ 12962 │ 13001 │ 0 │ 10 │ 0 │ 13000 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 6 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ character_sets │ 12962 │ 12997 │ 0 │ 10 │ 0 │ 12996 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 8 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ check_constraints │ 12962 │ 13005 │ 0 │ 10 │ 0 │ 13004 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 4 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ collations │ 12962 │ 13009 │ 0 │ 10 │ 0 │ 13008 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 4 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ collation_character_set_applicability │ 12962 │ 13013 │ 0 │ 10 │ 0 │ 13012 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 6 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ column_domain_usage │ 12962 │ 13017 │ 0 │ 10 │ 0 │ 13016 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ column_privileges │ 12962 │ 13021 │ 0 │ 10 │ 0 │ 13020 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 8 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ routine_privileges │ 12962 │ 13071 │ 0 │ 10 │ 0 │ 13070 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 10 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ column_udt_usage │ 12962 │ 13025 │ 0 │ 10 │ 0 │ 13024 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ columns │ 12962 │ 13029 │ 0 │ 10 │ 0 │ 13028 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 44 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_toast_13098 │ 99 │ 13101 │ 0 │ 10 │ 0 │ 13100 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ t │ 3 │ 0 │ f │ t │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ constraint_column_usage │ 12962 │ 13033 │ 0 │ 10 │ 0 │ 13032 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ role_routine_grants │ 12962 │ 13075 │ 0 │ 10 │ 0 │ 13074 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 10 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ constraint_table_usage │ 12962 │ 13037 │ 0 │ 10 │ 0 │ 13036 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 6 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ domain_constraints │ 12962 │ 13041 │ 0 │ 10 │ 0 │ 13040 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 8 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_toast_13098_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 13102 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ domain_udt_usage │ 12962 │ 13045 │ 0 │ 10 │ 0 │ 13044 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 6 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ routines │ 12962 │ 13078 │ 0 │ 10 │ 0 │ 13077 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 82 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ domains │ 12962 │ 13049 │ 0 │ 10 │ 0 │ 13048 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 27 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ enabled_roles │ 12962 │ 13053 │ 0 │ 10 │ 0 │ 13052 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 1 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ sql_parts │ 12962 │ 13109 │ 0 │ 10 │ 0 │ 13108 │ 0 │ 1 │ 9 │ 1 │ 13110 │ f │ f │ p │ r │ 5 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ d │ f │ 548 │ 1 │ │ │ │ │ key_column_usage │ 12962 │ 13056 │ 0 │ 10 │ 0 │ 13055 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 9 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ schemata │ 12962 │ 13082 │ 0 │ 10 │ 0 │ 13081 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ parameters │ 12962 │ 13060 │ 0 │ 10 │ 0 │ 13059 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 32 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ referential_constraints │ 12962 │ 13064 │ 0 │ 10 │ 0 │ 13063 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 9 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ sql_languages │ 12962 │ 13099 │ 0 │ 10 │ 0 │ 13098 │ 0 │ 1 │ 4 │ 1 │ 13100 │ f │ f │ p │ r │ 7 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ d │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ role_column_grants │ 12962 │ 13068 │ 0 │ 10 │ 0 │ 13067 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 8 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ sequences │ 12962 │ 13085 │ 0 │ 10 │ 0 │ 13084 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 12 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_toast_13088 │ 99 │ 13091 │ 0 │ 10 │ 0 │ 13090 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ t │ 3 │ 0 │ f │ t │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ pg_toast_13088_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 13092 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_toast_13103 │ 99 │ 13106 │ 0 │ 10 │ 0 │ 13105 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ t │ 3 │ 0 │ f │ t │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ sql_features │ 12962 │ 13089 │ 0 │ 10 │ 0 │ 13088 │ 0 │ 7 │ 671 │ 7 │ 13090 │ f │ f │ p │ r │ 7 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ d │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_toast_13093 │ 99 │ 13096 │ 0 │ 10 │ 0 │ 13095 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ t │ 3 │ 0 │ f │ t │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ pg_toast_13093_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 13097 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_toast_13103_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 13107 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ sql_implementation_info │ 12962 │ 13094 │ 0 │ 10 │ 0 │ 13093 │ 0 │ 1 │ 12 │ 1 │ 13095 │ f │ f │ p │ r │ 5 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ d │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ sql_packages │ 12962 │ 13104 │ 0 │ 10 │ 0 │ 13103 │ 0 │ 1 │ 10 │ 1 │ 13105 │ f │ f │ p │ r │ 5 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ d │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_toast_13108 │ 99 │ 13111 │ 0 │ 10 │ 0 │ 13110 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ t │ 3 │ 0 │ f │ t │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ pg_toast_13108_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 13112 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_toast_13113 │ 99 │ 13116 │ 0 │ 10 │ 0 │ 13115 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ t │ 3 │ 0 │ f │ t │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ pg_toast_13113_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 13117 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ pg_toast_13118 │ 99 │ 13121 │ 0 │ 10 │ 0 │ 13120 │ 0 │ 0 │ 0 │ 0 │ 0 │ t │ f │ p │ t │ 3 │ 0 │ f │ t │ f │ f │ f │ f │ f │ t │ n │ f │ 548 │ 1 │ │ │ │ │ sql_sizing │ 12962 │ 13114 │ 0 │ 10 │ 0 │ 13113 │ 0 │ 1 │ 23 │ 1 │ 13115 │ f │ f │ p │ r │ 4 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ d │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ pg_toast_13118_index │ 99 │ 0 │ 0 │ 10 │ 403 │ 13122 │ 0 │ 1 │ 0 │ 0 │ 0 │ f │ f │ p │ i │ 2 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ sql_sizing_profiles │ 12962 │ 13119 │ 0 │ 10 │ 0 │ 13118 │ 0 │ 0 │ 0 │ 0 │ 13120 │ f │ f │ p │ r │ 5 │ 0 │ f │ f │ f │ f │ f │ f │ f │ t │ d │ f │ 548 │ 1 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ view_routine_usage │ 12962 │ 13173 │ 0 │ 10 │ 0 │ 13172 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 6 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ table_constraints │ 12962 │ 13124 │ 0 │ 10 │ 0 │ 13123 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 9 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ table_privileges │ 12962 │ 13128 │ 0 │ 10 │ 0 │ 13127 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 8 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ foreign_table_options │ 12962 │ 13223 │ 0 │ 10 │ 0 │ 13222 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 5 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ role_table_grants │ 12962 │ 13132 │ 0 │ 10 │ 0 │ 13131 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 8 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ view_table_usage │ 12962 │ 13177 │ 0 │ 10 │ 0 │ 13176 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 6 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ tables │ 12962 │ 13135 │ 0 │ 10 │ 0 │ 13134 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 12 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ transforms │ 12962 │ 13139 │ 0 │ 10 │ 0 │ 13138 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 8 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ triggered_update_columns │ 12962 │ 13143 │ 0 │ 10 │ 0 │ 13142 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ foreign_data_wrappers │ 12962 │ 13206 │ 0 │ 10 │ 0 │ 13205 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 5 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ triggers │ 12962 │ 13147 │ 0 │ 10 │ 0 │ 13146 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 17 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ views │ 12962 │ 13181 │ 0 │ 10 │ 0 │ 13180 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 10 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ udt_privileges │ 12962 │ 13151 │ 0 │ 10 │ 0 │ 13150 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ role_udt_grants │ 12962 │ 13155 │ 0 │ 10 │ 0 │ 13154 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ usage_privileges │ 12962 │ 13158 │ 0 │ 10 │ 0 │ 13157 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 8 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ data_type_privileges │ 12962 │ 13185 │ 0 │ 10 │ 0 │ 13184 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 5 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ role_usage_grants │ 12962 │ 13162 │ 0 │ 10 │ 0 │ 13161 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 8 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ user_defined_types │ 12962 │ 13165 │ 0 │ 10 │ 0 │ 13164 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 29 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ _pg_foreign_servers │ 12962 │ 13209 │ 0 │ 10 │ 0 │ 13208 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 9 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ view_column_usage │ 12962 │ 13169 │ 0 │ 10 │ 0 │ 13168 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ element_types │ 12962 │ 13189 │ 0 │ 10 │ 0 │ 13188 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 29 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ _pg_foreign_table_columns │ 12962 │ 13193 │ 0 │ 10 │ 0 │ 13192 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 4 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ column_options │ 12962 │ 13197 │ 0 │ 10 │ 0 │ 13196 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 6 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ _pg_foreign_data_wrappers │ 12962 │ 13200 │ 0 │ 10 │ 0 │ 13199 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ foreign_server_options │ 12962 │ 13213 │ 0 │ 10 │ 0 │ 13212 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 4 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ foreign_data_wrapper_options │ 12962 │ 13203 │ 0 │ 10 │ 0 │ 13202 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 4 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ user_mapping_options │ 12962 │ 13233 │ 0 │ 10 │ 0 │ 13232 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 5 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ foreign_servers │ 12962 │ 13216 │ 0 │ 10 │ 0 │ 13215 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ _pg_foreign_tables │ 12962 │ 13219 │ 0 │ 10 │ 0 │ 13218 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ foreign_tables │ 12962 │ 13226 │ 0 │ 10 │ 0 │ 13225 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 5 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ │ _pg_user_mappings │ 12962 │ 13229 │ 0 │ 10 │ 0 │ 13228 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 7 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ │ │ │ │ user_mappings │ 12962 │ 13237 │ 0 │ 10 │ 0 │ 13236 │ 0 │ 0 │ 0 │ 0 │ 0 │ f │ f │ p │ v │ 3 │ 0 │ f │ f │ t │ f │ f │ f │ f │ t │ n │ f │ 0 │ 0 │ {postgres=arwdDxt/postgres,=r/postgres} │ │ │ └───────────────────────────────────────────┴──────────────┴─────────┴───────────┴──────────┴───────┴─────────────┴───────────────┴──────────┴───────────┴───────────────┴───────────────┴─────────────┴─────────────┴────────────────┴─────────┴──────────┴───────────┴────────────┴────────────┴─────────────┴────────────────┴────────────────┴────────────────┴─────────────────────┴────────────────┴──────────────┴────────────────┴──────────────┴────────────┴──────────────────────────────────────────┴─────────────────────────┴──────────────┘ (341 rows) pspg-5.8.1/tests/pg_class2.txt000066400000000000000000000134271452457446400163040ustar00rootroot00000000000000 oid | relname | relnamespace | reltype | reloftype | relowner | relam | relfilenode | reltablespace | relpages | reltuples | relallvisible | reltoastrelid | relhasindex | relisshared | relpersistence | relkind | relnatts | relchecks | relhasrules | relhastriggers | relhassubclass | relrowsecurity | relforcerowsecurity | relispopulated | relreplident | relispartition | relrewrite | relfrozenxid | relminmxid | relacl | reloptions | relpartbound -------+----------------------+--------------+---------+-----------+----------+-------+-------------+---------------+----------+-----------+---------------+---------------+-------------+-------------+----------------+---------+----------+-----------+-------------+----------------+----------------+----------------+---------------------+----------------+--------------+----------------+------------+--------------+------------+-----------------------------------------+------------+-------------- 16402 | pg_toast_16399 | 99 | 16403 | 0 | 16384 | 2 | 16402 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | f | f | f | f | t | n | f | 0 | 497 | 1 | ∅ | ∅ | ∅ 16404 | pg_toast_16399_index | 99 | 0 | 0 | 16384 | 403 | 16404 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | t | n | f | 0 | 0 | 0 | ∅ | ∅ | ∅ 16399 | foo | 2200 | 16401 | 0 | 16384 | 2 | 16399 | 0 | 0 | 0 | 0 | 16402 | f | f | p | r | 1 | 0 | f | f | f | f | f | t | d | f | 0 | 497 | 1 | ∅ | ∅ | ∅ 2619 | pg_statistic | 11 | 12016 | 0 | 10 | 2 | 2619 | 0 | 19 | 410 | 19 | 2840 | t | f | p | r | 31 | 0 | f | f | f | f | f | t | n | f | 0 | 481 | 1 | {postgres=arwdDxt/postgres} | ∅ | ∅ 1247 | pg_type | 11 | 71 | 0 | 10 | 2 | 0 | 0 | 10 | 401 | 10 | 4171 | t | f | p | r | 31 | 0 | f | f | f | f | f | t | n | f | 0 | 481 | 1 | {postgres=arwdDxt/postgres,=r/postgres} | ∅ | ∅ 4159 | pg_toast_2600 | 99 | 12054 | 0 | 10 | 2 | 4159 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | f | f | f | f | t | n | f | 0 | 481 | 1 | ∅ | ∅ | ∅ 4160 | pg_toast_2600_index | 99 | 0 | 0 | 10 | 403 | 4160 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | t | n | f | 0 | 0 | 0 | ∅ | ∅ | ∅ 2830 | pg_toast_2604 | 99 | 12055 | 0 | 10 | 2 | 2830 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | f | f | f | f | t | n | f | 0 | 481 | 1 | ∅ | ∅ | ∅ 2831 | pg_toast_2604_index | 99 | 0 | 0 | 10 | 403 | 2831 | 0 | 1 | 0 | 0 | 0 | f | f | p | i | 2 | 0 | f | f | f | f | f | t | n | f | 0 | 0 | 0 | ∅ | ∅ | ∅ 4161 | pg_toast_3456 | 99 | 12056 | 0 | 10 | 2 | 4161 | 0 | 0 | 0 | 0 | 0 | t | f | p | t | 3 | 0 | f | f | f | f | f | t | n | f | 0 | 481 | 1 | ∅ | ∅ | ∅ (10 rows) pspg-5.8.1/tests/pg_proc.txt000066400000000000000000346635651452457446400161050ustar00rootroot00000000000000┌───────┬──────────────────────────────────────────────┬──────────────┬──────────┬─────────┬─────────┬─────────┬─────────────┬──────────────────────────────┬─────────┬───────────┬──────────────┬─────────────┬───────────┬─────────────┬─────────────┬──────────┬─────────────────┬────────────┬─────────────────────────────────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────┬─────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬─────────────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬────────────────────────────┬───────────┬─────────────────────────────────────────────┐ │ oid │ proname │ pronamespace │ proowner │ prolang │ procost │ prorows │ provariadic │ prosupport │ prokind │ prosecdef │ proleakproof │ proisstrict │ proretset │ provolatile │ proparallel │ pronargs │ pronargdefaults │ prorettype │ proargtypes │ proallargtypes │ proargmodes │ proargnames │ proargdefaults │ protrftypes │ prosrc │ probin │ proconfig │ proacl │ ╞═══════╪══════════════════════════════════════════════╪══════════════╪══════════╪═════════╪═════════╪═════════╪═════════════╪══════════════════════════════╪═════════╪═══════════╪══════════════╪═════════════╪═══════════╪═════════════╪═════════════╪══════════╪═════════════════╪════════════╪═════════════════════════════════════╪═══════════════════════════════════════════════════════════════════════════════════════════════════════════╪═════════════════════════════════════════════════════════════════╪══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╪═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╪═════════════╪════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╪════════════════════════════╪═══════════╪═════════════════════════════════════════════╡ │ 1242 │ boolin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ boolin │ ∅ │ ∅ │ ∅ │ │ 1243 │ boolout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ boolout │ ∅ │ ∅ │ ∅ │ │ 1244 │ byteain │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteain │ ∅ │ ∅ │ ∅ │ │ 31 │ byteaout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteaout │ ∅ │ ∅ │ ∅ │ │ 1245 │ charin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 18 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ charin │ ∅ │ ∅ │ ∅ │ │ 33 │ charout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 18 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ charout │ ∅ │ ∅ │ ∅ │ │ 34 │ namein │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 19 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ namein │ ∅ │ ∅ │ ∅ │ │ 35 │ nameout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ nameout │ ∅ │ ∅ │ ∅ │ │ 38 │ int2in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 21 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2in │ ∅ │ ∅ │ ∅ │ │ 39 │ int2out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2out │ ∅ │ ∅ │ ∅ │ │ 40 │ int2vectorin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 22 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2vectorin │ ∅ │ ∅ │ ∅ │ │ 41 │ int2vectorout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 22 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2vectorout │ ∅ │ ∅ │ ∅ │ │ 42 │ int4in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4in │ ∅ │ ∅ │ ∅ │ │ 43 │ int4out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4out │ ∅ │ ∅ │ ∅ │ │ 44 │ regprocin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 24 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regprocin │ ∅ │ ∅ │ ∅ │ │ 45 │ regprocout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 24 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regprocout │ ∅ │ ∅ │ ∅ │ │ 3494 │ to_regproc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 24 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_regproc │ ∅ │ ∅ │ ∅ │ │ 3479 │ to_regprocedure │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2202 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_regprocedure │ ∅ │ ∅ │ ∅ │ │ 46 │ textin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textin │ ∅ │ ∅ │ ∅ │ │ 47 │ textout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textout │ ∅ │ ∅ │ ∅ │ │ 48 │ tidin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 27 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tidin │ ∅ │ ∅ │ ∅ │ │ 49 │ tidout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 27 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tidout │ ∅ │ ∅ │ ∅ │ │ 50 │ xidin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 28 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xidin │ ∅ │ ∅ │ ∅ │ │ 51 │ xidout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 28 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xidout │ ∅ │ ∅ │ ∅ │ │ 5070 │ xid8in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 5069 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xid8in │ ∅ │ ∅ │ ∅ │ │ 5081 │ xid8out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 5069 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xid8out │ ∅ │ ∅ │ ∅ │ │ 5082 │ xid8recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 5069 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xid8recv │ ∅ │ ∅ │ ∅ │ │ 5083 │ xid8send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 5069 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xid8send │ ∅ │ ∅ │ ∅ │ │ 52 │ cidin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 29 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cidin │ ∅ │ ∅ │ ∅ │ │ 53 │ cidout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 29 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cidout │ ∅ │ ∅ │ ∅ │ │ 54 │ oidvectorin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 30 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidvectorin │ ∅ │ ∅ │ ∅ │ │ 55 │ oidvectorout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 30 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidvectorout │ ∅ │ ∅ │ ∅ │ │ 56 │ boollt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ boollt │ ∅ │ ∅ │ ∅ │ │ 57 │ boolgt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ boolgt │ ∅ │ ∅ │ ∅ │ │ 60 │ booleq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ booleq │ ∅ │ ∅ │ ∅ │ │ 61 │ chareq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 18 18 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ chareq │ ∅ │ ∅ │ ∅ │ │ 62 │ nameeq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ nameeq │ ∅ │ ∅ │ ∅ │ │ 63 │ int2eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 21 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2eq │ ∅ │ ∅ │ ∅ │ │ 64 │ int2lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 21 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2lt │ ∅ │ ∅ │ ∅ │ │ 65 │ int4eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4eq │ ∅ │ ∅ │ ∅ │ │ 66 │ int4lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4lt │ ∅ │ ∅ │ ∅ │ │ 67 │ texteq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ texteq │ ∅ │ ∅ │ ∅ │ │ 3696 │ starts_with │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_starts_with │ ∅ │ ∅ │ ∅ │ │ 68 │ xideq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 28 28 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xideq │ ∅ │ ∅ │ ∅ │ │ 3308 │ xidneq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 28 28 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xidneq │ ∅ │ ∅ │ ∅ │ │ 5084 │ xid8eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 5069 5069 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xid8eq │ ∅ │ ∅ │ ∅ │ │ 5085 │ xid8ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 5069 5069 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xid8ne │ ∅ │ ∅ │ ∅ │ │ 5034 │ xid8lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 5069 5069 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xid8lt │ ∅ │ ∅ │ ∅ │ │ 5035 │ xid8gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 5069 5069 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xid8gt │ ∅ │ ∅ │ ∅ │ │ 5036 │ xid8le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 5069 5069 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xid8le │ ∅ │ ∅ │ ∅ │ │ 5037 │ xid8ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 5069 5069 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xid8ge │ ∅ │ ∅ │ ∅ │ │ 5096 │ xid8cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 5069 5069 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xid8cmp │ ∅ │ ∅ │ ∅ │ │ 5071 │ xid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 28 │ 5069 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xid8toxid │ ∅ │ ∅ │ ∅ │ │ 69 │ cideq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 29 29 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cideq │ ∅ │ ∅ │ ∅ │ │ 70 │ charne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 18 18 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ charne │ ∅ │ ∅ │ ∅ │ │ 1246 │ charlt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 18 18 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ charlt │ ∅ │ ∅ │ ∅ │ │ 72 │ charle │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 18 18 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ charle │ ∅ │ ∅ │ ∅ │ │ 73 │ chargt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 18 18 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ chargt │ ∅ │ ∅ │ ∅ │ │ 74 │ charge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 18 18 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ charge │ ∅ │ ∅ │ ∅ │ │ 77 │ int4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 18 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ chartoi4 │ ∅ │ ∅ │ ∅ │ │ 78 │ char │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 18 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ i4tochar │ ∅ │ ∅ │ ∅ │ │ 79 │ nameregexeq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ textregexeq_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ nameregexeq │ ∅ │ ∅ │ ∅ │ │ 1252 │ nameregexne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ nameregexne │ ∅ │ ∅ │ ∅ │ │ 1254 │ textregexeq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ textregexeq_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textregexeq │ ∅ │ ∅ │ ∅ │ │ 1256 │ textregexne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textregexne │ ∅ │ ∅ │ ∅ │ │ 1364 │ textregexeq_support │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textregexeq_support │ ∅ │ ∅ │ ∅ │ │ 1257 │ textlen │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textlen │ ∅ │ ∅ │ ∅ │ │ 1258 │ textcat │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textcat │ ∅ │ ∅ │ ∅ │ │ 84 │ boolne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ boolne │ ∅ │ ∅ │ ∅ │ │ 89 │ version │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 0 │ 0 │ 25 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pgsql_version │ ∅ │ ∅ │ ∅ │ │ 86 │ pg_ddl_command_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 32 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_ddl_command_in │ ∅ │ ∅ │ ∅ │ │ 87 │ pg_ddl_command_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 32 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_ddl_command_out │ ∅ │ ∅ │ ∅ │ │ 88 │ pg_ddl_command_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 32 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_ddl_command_recv │ ∅ │ ∅ │ ∅ │ │ 90 │ pg_ddl_command_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 32 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_ddl_command_send │ ∅ │ ∅ │ ∅ │ │ 101 │ eqsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ eqsel │ ∅ │ ∅ │ ∅ │ │ 102 │ neqsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ neqsel │ ∅ │ ∅ │ ∅ │ │ 103 │ scalarltsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ scalarltsel │ ∅ │ ∅ │ ∅ │ │ 104 │ scalargtsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ scalargtsel │ ∅ │ ∅ │ ∅ │ │ 105 │ eqjoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ eqjoinsel │ ∅ │ ∅ │ ∅ │ │ 106 │ neqjoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ neqjoinsel │ ∅ │ ∅ │ ∅ │ │ 107 │ scalarltjoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ scalarltjoinsel │ ∅ │ ∅ │ ∅ │ │ 108 │ scalargtjoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ scalargtjoinsel │ ∅ │ ∅ │ ∅ │ │ 336 │ scalarlesel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ scalarlesel │ ∅ │ ∅ │ ∅ │ │ 337 │ scalargesel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ scalargesel │ ∅ │ ∅ │ ∅ │ │ 386 │ scalarlejoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ scalarlejoinsel │ ∅ │ ∅ │ ∅ │ │ 398 │ scalargejoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ scalargejoinsel │ ∅ │ ∅ │ ∅ │ │ 109 │ unknownin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 705 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ unknownin │ ∅ │ ∅ │ ∅ │ │ 110 │ unknownout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 705 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ unknownout │ ∅ │ ∅ │ ∅ │ │ 111 │ numeric_fac │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_fac │ ∅ │ ∅ │ ∅ │ │ 115 │ box_above_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_above_eq │ ∅ │ ∅ │ ∅ │ │ 116 │ box_below_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_below_eq │ ∅ │ ∅ │ ∅ │ │ 117 │ point_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 600 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_in │ ∅ │ ∅ │ ∅ │ │ 118 │ point_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_out │ ∅ │ ∅ │ ∅ │ │ 119 │ lseg_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 601 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_in │ ∅ │ ∅ │ ∅ │ │ 120 │ lseg_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_out │ ∅ │ ∅ │ ∅ │ │ 121 │ path_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 602 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_in │ ∅ │ ∅ │ ∅ │ │ 122 │ path_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_out │ ∅ │ ∅ │ ∅ │ │ 123 │ box_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 603 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_in │ ∅ │ ∅ │ ∅ │ │ 124 │ box_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_out │ ∅ │ ∅ │ ∅ │ │ 125 │ box_overlap │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_overlap │ ∅ │ ∅ │ ∅ │ │ 126 │ box_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_ge │ ∅ │ ∅ │ ∅ │ │ 127 │ box_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_gt │ ∅ │ ∅ │ ∅ │ │ 128 │ box_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_eq │ ∅ │ ∅ │ ∅ │ │ 129 │ box_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_lt │ ∅ │ ∅ │ ∅ │ │ 130 │ box_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_le │ ∅ │ ∅ │ ∅ │ │ 131 │ point_above │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_above │ ∅ │ ∅ │ ∅ │ │ 132 │ point_left │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_left │ ∅ │ ∅ │ ∅ │ │ 133 │ point_right │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_right │ ∅ │ ∅ │ ∅ │ │ 134 │ point_below │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_below │ ∅ │ ∅ │ ∅ │ │ 135 │ point_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_eq │ ∅ │ ∅ │ ∅ │ │ 136 │ on_pb │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 600 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ on_pb │ ∅ │ ∅ │ ∅ │ │ 137 │ on_ppath │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 600 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ on_ppath │ ∅ │ ∅ │ ∅ │ │ 138 │ box_center │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 600 │ 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_center │ ∅ │ ∅ │ ∅ │ │ 139 │ areasel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ areasel │ ∅ │ ∅ │ ∅ │ │ 140 │ areajoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ areajoinsel │ ∅ │ ∅ │ ∅ │ │ 141 │ int4mul │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4mul │ ∅ │ ∅ │ ∅ │ │ 144 │ int4ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4ne │ ∅ │ ∅ │ ∅ │ │ 145 │ int2ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 21 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2ne │ ∅ │ ∅ │ ∅ │ │ 146 │ int2gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 21 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2gt │ ∅ │ ∅ │ ∅ │ │ 147 │ int4gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4gt │ ∅ │ ∅ │ ∅ │ │ 148 │ int2le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 21 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2le │ ∅ │ ∅ │ ∅ │ │ 149 │ int4le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4le │ ∅ │ ∅ │ ∅ │ │ 150 │ int4ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4ge │ ∅ │ ∅ │ ∅ │ │ 151 │ int2ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 21 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2ge │ ∅ │ ∅ │ ∅ │ │ 152 │ int2mul │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 21 │ 21 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2mul │ ∅ │ ∅ │ ∅ │ │ 153 │ int2div │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 21 │ 21 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2div │ ∅ │ ∅ │ ∅ │ │ 154 │ int4div │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4div │ ∅ │ ∅ │ ∅ │ │ 155 │ int2mod │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 21 │ 21 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2mod │ ∅ │ ∅ │ ∅ │ │ 156 │ int4mod │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4mod │ ∅ │ ∅ │ ∅ │ │ 157 │ textne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textne │ ∅ │ ∅ │ ∅ │ │ 158 │ int24eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 21 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int24eq │ ∅ │ ∅ │ ∅ │ │ 159 │ int42eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 23 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int42eq │ ∅ │ ∅ │ ∅ │ │ 160 │ int24lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 21 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int24lt │ ∅ │ ∅ │ ∅ │ │ 161 │ int42lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 23 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int42lt │ ∅ │ ∅ │ ∅ │ │ 162 │ int24gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 21 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int24gt │ ∅ │ ∅ │ ∅ │ │ 163 │ int42gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 23 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int42gt │ ∅ │ ∅ │ ∅ │ │ 164 │ int24ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 21 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int24ne │ ∅ │ ∅ │ ∅ │ │ 165 │ int42ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 23 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int42ne │ ∅ │ ∅ │ ∅ │ │ 166 │ int24le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 21 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int24le │ ∅ │ ∅ │ ∅ │ │ 167 │ int42le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 23 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int42le │ ∅ │ ∅ │ ∅ │ │ 168 │ int24ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 21 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int24ge │ ∅ │ ∅ │ ∅ │ │ 169 │ int42ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 23 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int42ge │ ∅ │ ∅ │ ∅ │ │ 170 │ int24mul │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 21 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int24mul │ ∅ │ ∅ │ ∅ │ │ 171 │ int42mul │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int42mul │ ∅ │ ∅ │ ∅ │ │ 172 │ int24div │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 21 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int24div │ ∅ │ ∅ │ ∅ │ │ 173 │ int42div │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int42div │ ∅ │ ∅ │ ∅ │ │ 176 │ int2pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 21 │ 21 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2pl │ ∅ │ ∅ │ ∅ │ │ 177 │ int4pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4pl │ ∅ │ ∅ │ ∅ │ │ 178 │ int24pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 21 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int24pl │ ∅ │ ∅ │ ∅ │ │ 179 │ int42pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int42pl │ ∅ │ ∅ │ ∅ │ │ 180 │ int2mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 21 │ 21 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2mi │ ∅ │ ∅ │ ∅ │ │ 181 │ int4mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4mi │ ∅ │ ∅ │ ∅ │ │ 182 │ int24mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 21 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int24mi │ ∅ │ ∅ │ ∅ │ │ 183 │ int42mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int42mi │ ∅ │ ∅ │ ∅ │ │ 184 │ oideq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 26 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oideq │ ∅ │ ∅ │ ∅ │ │ 185 │ oidne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 26 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidne │ ∅ │ ∅ │ ∅ │ │ 186 │ box_same │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_same │ ∅ │ ∅ │ ∅ │ │ 187 │ box_contain │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_contain │ ∅ │ ∅ │ ∅ │ │ 188 │ box_left │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_left │ ∅ │ ∅ │ ∅ │ │ 189 │ box_overleft │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_overleft │ ∅ │ ∅ │ ∅ │ │ 190 │ box_overright │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_overright │ ∅ │ ∅ │ ∅ │ │ 191 │ box_right │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_right │ ∅ │ ∅ │ ∅ │ │ 192 │ box_contained │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_contained │ ∅ │ ∅ │ ∅ │ │ 193 │ box_contain_pt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_contain_pt │ ∅ │ ∅ │ ∅ │ │ 195 │ pg_node_tree_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 194 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_node_tree_in │ ∅ │ ∅ │ ∅ │ │ 196 │ pg_node_tree_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 194 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_node_tree_out │ ∅ │ ∅ │ ∅ │ │ 197 │ pg_node_tree_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 194 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_node_tree_recv │ ∅ │ ∅ │ ∅ │ │ 198 │ pg_node_tree_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 17 │ 194 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_node_tree_send │ ∅ │ ∅ │ ∅ │ │ 200 │ float4in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 700 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4in │ ∅ │ ∅ │ ∅ │ │ 201 │ float4out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4out │ ∅ │ ∅ │ ∅ │ │ 202 │ float4mul │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 700 │ 700 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4mul │ ∅ │ ∅ │ ∅ │ │ 203 │ float4div │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 700 │ 700 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4div │ ∅ │ ∅ │ ∅ │ │ 204 │ float4pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 700 │ 700 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4pl │ ∅ │ ∅ │ ∅ │ │ 205 │ float4mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 700 │ 700 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4mi │ ∅ │ ∅ │ ∅ │ │ 206 │ float4um │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 700 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4um │ ∅ │ ∅ │ ∅ │ │ 207 │ float4abs │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 700 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4abs │ ∅ │ ∅ │ ∅ │ │ 208 │ float4_accum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1022 │ 1022 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4_accum │ ∅ │ ∅ │ ∅ │ │ 209 │ float4larger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 700 │ 700 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4larger │ ∅ │ ∅ │ ∅ │ │ 211 │ float4smaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 700 │ 700 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4smaller │ ∅ │ ∅ │ ∅ │ │ 212 │ int4um │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4um │ ∅ │ ∅ │ ∅ │ │ 213 │ int2um │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 21 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2um │ ∅ │ ∅ │ ∅ │ │ 214 │ float8in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8in │ ∅ │ ∅ │ ∅ │ │ 215 │ float8out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8out │ ∅ │ ∅ │ ∅ │ │ 216 │ float8mul │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8mul │ ∅ │ ∅ │ ∅ │ │ 217 │ float8div │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8div │ ∅ │ ∅ │ ∅ │ │ 218 │ float8pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8pl │ ∅ │ ∅ │ ∅ │ │ 219 │ float8mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8mi │ ∅ │ ∅ │ ∅ │ │ 220 │ float8um │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8um │ ∅ │ ∅ │ ∅ │ │ 221 │ float8abs │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8abs │ ∅ │ ∅ │ ∅ │ │ 222 │ float8_accum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1022 │ 1022 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_accum │ ∅ │ ∅ │ ∅ │ │ 276 │ float8_combine │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1022 │ 1022 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_combine │ ∅ │ ∅ │ ∅ │ │ 223 │ float8larger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8larger │ ∅ │ ∅ │ ∅ │ │ 224 │ float8smaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8smaller │ ∅ │ ∅ │ ∅ │ │ 225 │ lseg_center │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 600 │ 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_center │ ∅ │ ∅ │ ∅ │ │ 226 │ path_center │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 600 │ 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_center │ ∅ │ ∅ │ ∅ │ │ 227 │ poly_center │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 600 │ 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_center │ ∅ │ ∅ │ ∅ │ │ 228 │ dround │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dround │ ∅ │ ∅ │ ∅ │ │ 229 │ dtrunc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dtrunc │ ∅ │ ∅ │ ∅ │ │ 2308 │ ceil │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dceil │ ∅ │ ∅ │ ∅ │ │ 2320 │ ceiling │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dceil │ ∅ │ ∅ │ ∅ │ │ 2309 │ floor │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dfloor │ ∅ │ ∅ │ ∅ │ │ 2310 │ sign │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dsign │ ∅ │ ∅ │ ∅ │ │ 230 │ dsqrt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dsqrt │ ∅ │ ∅ │ ∅ │ │ 231 │ dcbrt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dcbrt │ ∅ │ ∅ │ ∅ │ │ 232 │ dpow │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dpow │ ∅ │ ∅ │ ∅ │ │ 233 │ dexp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dexp │ ∅ │ ∅ │ ∅ │ │ 234 │ dlog1 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dlog1 │ ∅ │ ∅ │ ∅ │ │ 235 │ float8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ i2tod │ ∅ │ ∅ │ ∅ │ │ 236 │ float4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 700 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ i2tof │ ∅ │ ∅ │ ∅ │ │ 237 │ int2 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 21 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dtoi2 │ ∅ │ ∅ │ ∅ │ │ 238 │ int2 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 21 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ftoi2 │ ∅ │ ∅ │ ∅ │ │ 239 │ line_distance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 628 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ line_distance │ ∅ │ ∅ │ ∅ │ │ 240 │ nameeqtext │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ nameeqtext │ ∅ │ ∅ │ ∅ │ │ 241 │ namelttext │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ namelttext │ ∅ │ ∅ │ ∅ │ │ 242 │ nameletext │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ nameletext │ ∅ │ ∅ │ ∅ │ │ 243 │ namegetext │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ namegetext │ ∅ │ ∅ │ ∅ │ │ 244 │ namegttext │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ namegttext │ ∅ │ ∅ │ ∅ │ │ 245 │ namenetext │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ namenetext │ ∅ │ ∅ │ ∅ │ │ 246 │ btnametextcmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btnametextcmp │ ∅ │ ∅ │ ∅ │ │ 247 │ texteqname │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ texteqname │ ∅ │ ∅ │ ∅ │ │ 248 │ textltname │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textltname │ ∅ │ ∅ │ ∅ │ │ 249 │ textlename │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textlename │ ∅ │ ∅ │ ∅ │ │ 250 │ textgename │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textgename │ ∅ │ ∅ │ ∅ │ │ 251 │ textgtname │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textgtname │ ∅ │ ∅ │ ∅ │ │ 252 │ textnename │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textnename │ ∅ │ ∅ │ ∅ │ │ 253 │ bttextnamecmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 25 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bttextnamecmp │ ∅ │ ∅ │ ∅ │ │ 266 │ nameconcatoid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 19 │ 19 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ nameconcatoid │ ∅ │ ∅ │ ∅ │ │ 274 │ timeofday │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 25 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timeofday │ ∅ │ ∅ │ ∅ │ │ 277 │ inter_sl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 601 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inter_sl │ ∅ │ ∅ │ ∅ │ │ 278 │ inter_lb │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 628 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inter_lb │ ∅ │ ∅ │ ∅ │ │ 279 │ float48mul │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 700 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float48mul │ ∅ │ ∅ │ ∅ │ │ 280 │ float48div │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 700 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float48div │ ∅ │ ∅ │ ∅ │ │ 281 │ float48pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 700 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float48pl │ ∅ │ ∅ │ ∅ │ │ 282 │ float48mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 700 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float48mi │ ∅ │ ∅ │ ∅ │ │ 283 │ float84mul │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 701 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float84mul │ ∅ │ ∅ │ ∅ │ │ 284 │ float84div │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 701 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float84div │ ∅ │ ∅ │ ∅ │ │ 285 │ float84pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 701 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float84pl │ ∅ │ ∅ │ ∅ │ │ 286 │ float84mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 701 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float84mi │ ∅ │ ∅ │ ∅ │ │ 287 │ float4eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 700 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4eq │ ∅ │ ∅ │ ∅ │ │ 288 │ float4ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 700 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4ne │ ∅ │ ∅ │ ∅ │ │ 289 │ float4lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 700 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4lt │ ∅ │ ∅ │ ∅ │ │ 290 │ float4le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 700 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4le │ ∅ │ ∅ │ ∅ │ │ 291 │ float4gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 700 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4gt │ ∅ │ ∅ │ ∅ │ │ 292 │ float4ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 700 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4ge │ ∅ │ ∅ │ ∅ │ │ 293 │ float8eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8eq │ ∅ │ ∅ │ ∅ │ │ 294 │ float8ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8ne │ ∅ │ ∅ │ ∅ │ │ 295 │ float8lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8lt │ ∅ │ ∅ │ ∅ │ │ 296 │ float8le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8le │ ∅ │ ∅ │ ∅ │ │ 297 │ float8gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8gt │ ∅ │ ∅ │ ∅ │ │ 298 │ float8ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8ge │ ∅ │ ∅ │ ∅ │ │ 299 │ float48eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 700 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float48eq │ ∅ │ ∅ │ ∅ │ │ 300 │ float48ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 700 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float48ne │ ∅ │ ∅ │ ∅ │ │ 301 │ float48lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 700 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float48lt │ ∅ │ ∅ │ ∅ │ │ 302 │ float48le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 700 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float48le │ ∅ │ ∅ │ ∅ │ │ 303 │ float48gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 700 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float48gt │ ∅ │ ∅ │ ∅ │ │ 304 │ float48ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 700 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float48ge │ ∅ │ ∅ │ ∅ │ │ 305 │ float84eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 701 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float84eq │ ∅ │ ∅ │ ∅ │ │ 306 │ float84ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 701 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float84ne │ ∅ │ ∅ │ ∅ │ │ 307 │ float84lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 701 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float84lt │ ∅ │ ∅ │ ∅ │ │ 308 │ float84le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 701 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float84le │ ∅ │ ∅ │ ∅ │ │ 309 │ float84gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 701 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float84gt │ ∅ │ ∅ │ ∅ │ │ 310 │ float84ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 701 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float84ge │ ∅ │ ∅ │ ∅ │ │ 320 │ width_bucket │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 23 │ 701 701 701 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ width_bucket_float8 │ ∅ │ ∅ │ ∅ │ │ 311 │ float8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ftod │ ∅ │ ∅ │ ∅ │ │ 312 │ float4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 700 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dtof │ ∅ │ ∅ │ ∅ │ │ 313 │ int4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ i2toi4 │ ∅ │ ∅ │ ∅ │ │ 314 │ int2 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 21 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ i4toi2 │ ∅ │ ∅ │ ∅ │ │ 316 │ float8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ i4tod │ ∅ │ ∅ │ ∅ │ │ 317 │ int4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dtoi4 │ ∅ │ ∅ │ ∅ │ │ 318 │ float4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 700 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ i4tof │ ∅ │ ∅ │ ∅ │ │ 319 │ int4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ftoi4 │ ∅ │ ∅ │ ∅ │ │ 3 │ heap_tableam_handler │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 269 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ heap_tableam_handler │ ∅ │ ∅ │ ∅ │ │ 330 │ bthandler │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 325 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bthandler │ ∅ │ ∅ │ ∅ │ │ 331 │ hashhandler │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 325 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashhandler │ ∅ │ ∅ │ ∅ │ │ 332 │ gisthandler │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 325 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gisthandler │ ∅ │ ∅ │ ∅ │ │ 333 │ ginhandler │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 325 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ginhandler │ ∅ │ ∅ │ ∅ │ │ 334 │ spghandler │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 325 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spghandler │ ∅ │ ∅ │ ∅ │ │ 335 │ brinhandler │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 325 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ brinhandler │ ∅ │ ∅ │ ∅ │ │ 3952 │ brin_summarize_new_values │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 23 │ 2205 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ brin_summarize_new_values │ ∅ │ ∅ │ ∅ │ │ 3999 │ brin_summarize_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 23 │ 2205 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ brin_summarize_range │ ∅ │ ∅ │ ∅ │ │ 4014 │ brin_desummarize_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 2278 │ 2205 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ brin_desummarize_range │ ∅ │ ∅ │ ∅ │ │ 338 │ amvalidate │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 16 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ amvalidate │ ∅ │ ∅ │ ∅ │ │ 636 │ pg_indexam_has_property │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_indexam_has_property │ ∅ │ ∅ │ ∅ │ │ 637 │ pg_index_has_property │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 2205 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_index_has_property │ ∅ │ ∅ │ ∅ │ │ 638 │ pg_index_column_has_property │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 2205 23 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_index_column_has_property │ ∅ │ ∅ │ ∅ │ │ 676 │ pg_indexam_progress_phasename │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 26 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_indexam_progress_phasename │ ∅ │ ∅ │ ∅ │ │ 339 │ poly_same │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 604 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_same │ ∅ │ ∅ │ ∅ │ │ 340 │ poly_contain │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 604 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_contain │ ∅ │ ∅ │ ∅ │ │ 341 │ poly_left │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 604 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_left │ ∅ │ ∅ │ ∅ │ │ 342 │ poly_overleft │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 604 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_overleft │ ∅ │ ∅ │ ∅ │ │ 343 │ poly_overright │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 604 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_overright │ ∅ │ ∅ │ ∅ │ │ 344 │ poly_right │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 604 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_right │ ∅ │ ∅ │ ∅ │ │ 345 │ poly_contained │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 604 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_contained │ ∅ │ ∅ │ ∅ │ │ 346 │ poly_overlap │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 604 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_overlap │ ∅ │ ∅ │ ∅ │ │ 347 │ poly_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 604 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_in │ ∅ │ ∅ │ ∅ │ │ 348 │ poly_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_out │ ∅ │ ∅ │ ∅ │ │ 350 │ btint2cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 21 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btint2cmp │ ∅ │ ∅ │ ∅ │ │ 3129 │ btint2sortsupport │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btint2sortsupport │ ∅ │ ∅ │ ∅ │ │ 351 │ btint4cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btint4cmp │ ∅ │ ∅ │ ∅ │ │ 3130 │ btint4sortsupport │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btint4sortsupport │ ∅ │ ∅ │ ∅ │ │ 842 │ btint8cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btint8cmp │ ∅ │ ∅ │ ∅ │ │ 3131 │ btint8sortsupport │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btint8sortsupport │ ∅ │ ∅ │ ∅ │ │ 354 │ btfloat4cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 700 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btfloat4cmp │ ∅ │ ∅ │ ∅ │ │ 3132 │ btfloat4sortsupport │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btfloat4sortsupport │ ∅ │ ∅ │ ∅ │ │ 355 │ btfloat8cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btfloat8cmp │ ∅ │ ∅ │ ∅ │ │ 3133 │ btfloat8sortsupport │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btfloat8sortsupport │ ∅ │ ∅ │ ∅ │ │ 356 │ btoidcmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 26 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btoidcmp │ ∅ │ ∅ │ ∅ │ │ 3134 │ btoidsortsupport │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btoidsortsupport │ ∅ │ ∅ │ ∅ │ │ 404 │ btoidvectorcmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 30 30 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btoidvectorcmp │ ∅ │ ∅ │ ∅ │ │ 358 │ btcharcmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 18 18 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btcharcmp │ ∅ │ ∅ │ ∅ │ │ 359 │ btnamecmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 19 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btnamecmp │ ∅ │ ∅ │ ∅ │ │ 3135 │ btnamesortsupport │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btnamesortsupport │ ∅ │ ∅ │ ∅ │ │ 360 │ bttextcmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bttextcmp │ ∅ │ ∅ │ ∅ │ │ 3255 │ bttextsortsupport │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bttextsortsupport │ ∅ │ ∅ │ ∅ │ │ 5050 │ btvarstrequalimage │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btvarstrequalimage │ ∅ │ ∅ │ ∅ │ │ 377 │ cash_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 790 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_cmp │ ∅ │ ∅ │ ∅ │ │ 382 │ btarraycmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 2277 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btarraycmp │ ∅ │ ∅ │ ∅ │ │ 4126 │ in_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 20 20 20 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ in_range_int8_int8 │ ∅ │ ∅ │ ∅ │ │ 4127 │ in_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 23 23 20 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ in_range_int4_int8 │ ∅ │ ∅ │ ∅ │ │ 4128 │ in_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 23 23 23 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ in_range_int4_int4 │ ∅ │ ∅ │ ∅ │ │ 4129 │ in_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 23 23 21 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ in_range_int4_int2 │ ∅ │ ∅ │ ∅ │ │ 4130 │ in_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 21 21 20 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ in_range_int2_int8 │ ∅ │ ∅ │ ∅ │ │ 4131 │ in_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 21 21 23 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ in_range_int2_int4 │ ∅ │ ∅ │ ∅ │ │ 4132 │ in_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 21 21 21 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ in_range_int2_int2 │ ∅ │ ∅ │ ∅ │ │ 4139 │ in_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 701 701 701 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ in_range_float8_float8 │ ∅ │ ∅ │ ∅ │ │ 4140 │ in_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 700 700 701 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ in_range_float4_float8 │ ∅ │ ∅ │ ∅ │ │ 4141 │ in_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 1700 1700 1700 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ in_range_numeric_numeric │ ∅ │ ∅ │ ∅ │ │ 361 │ lseg_distance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 601 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_distance │ ∅ │ ∅ │ ∅ │ │ 362 │ lseg_interpt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 600 │ 601 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_interpt │ ∅ │ ∅ │ ∅ │ │ 363 │ dist_ps │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 600 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_ps │ ∅ │ ∅ │ ∅ │ │ 380 │ dist_sp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 601 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_sp │ ∅ │ ∅ │ ∅ │ │ 364 │ dist_pb │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 600 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_pb │ ∅ │ ∅ │ ∅ │ │ 357 │ dist_bp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 603 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_bp │ ∅ │ ∅ │ ∅ │ │ 365 │ dist_sb │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 601 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_sb │ ∅ │ ∅ │ ∅ │ │ 381 │ dist_bs │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 603 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_bs │ ∅ │ ∅ │ ∅ │ │ 366 │ close_ps │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 600 │ 600 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ close_ps │ ∅ │ ∅ │ ∅ │ │ 367 │ close_pb │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 600 │ 600 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ close_pb │ ∅ │ ∅ │ ∅ │ │ 368 │ close_sb │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 600 │ 601 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ close_sb │ ∅ │ ∅ │ ∅ │ │ 369 │ on_ps │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 600 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ on_ps │ ∅ │ ∅ │ ∅ │ │ 370 │ path_distance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 602 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_distance │ ∅ │ ∅ │ ∅ │ │ 371 │ dist_ppath │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 600 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_ppath │ ∅ │ ∅ │ ∅ │ │ 421 │ dist_pathp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 602 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_pathp │ ∅ │ ∅ │ ∅ │ │ 372 │ on_sb │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 601 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ on_sb │ ∅ │ ∅ │ ∅ │ │ 373 │ inter_sb │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 601 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inter_sb │ ∅ │ ∅ │ ∅ │ │ 401 │ text │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ rtrim1 │ ∅ │ ∅ │ ∅ │ │ 406 │ text │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ name_text │ ∅ │ ∅ │ ∅ │ │ 407 │ name │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 19 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_name │ ∅ │ ∅ │ ∅ │ │ 408 │ bpchar │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1042 │ 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ name_bpchar │ ∅ │ ∅ │ ∅ │ │ 409 │ name │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 19 │ 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpchar_name │ ∅ │ ∅ │ ∅ │ │ 449 │ hashint2 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashint2 │ ∅ │ ∅ │ ∅ │ │ 441 │ hashint2extended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 21 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashint2extended │ ∅ │ ∅ │ ∅ │ │ 450 │ hashint4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashint4 │ ∅ │ ∅ │ ∅ │ │ 425 │ hashint4extended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 23 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashint4extended │ ∅ │ ∅ │ ∅ │ │ 949 │ hashint8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashint8 │ ∅ │ ∅ │ ∅ │ │ 442 │ hashint8extended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashint8extended │ ∅ │ ∅ │ ∅ │ │ 451 │ hashfloat4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashfloat4 │ ∅ │ ∅ │ ∅ │ │ 443 │ hashfloat4extended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 700 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashfloat4extended │ ∅ │ ∅ │ ∅ │ │ 452 │ hashfloat8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashfloat8 │ ∅ │ ∅ │ ∅ │ │ 444 │ hashfloat8extended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 701 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashfloat8extended │ ∅ │ ∅ │ ∅ │ │ 453 │ hashoid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashoid │ ∅ │ ∅ │ ∅ │ │ 445 │ hashoidextended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 26 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashoidextended │ ∅ │ ∅ │ ∅ │ │ 454 │ hashchar │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 18 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashchar │ ∅ │ ∅ │ ∅ │ │ 446 │ hashcharextended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 18 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashcharextended │ ∅ │ ∅ │ ∅ │ │ 455 │ hashname │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashname │ ∅ │ ∅ │ ∅ │ │ 447 │ hashnameextended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 19 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashnameextended │ ∅ │ ∅ │ ∅ │ │ 400 │ hashtext │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashtext │ ∅ │ ∅ │ ∅ │ │ 448 │ hashtextextended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 25 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashtextextended │ ∅ │ ∅ │ ∅ │ │ 456 │ hashvarlena │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashvarlena │ ∅ │ ∅ │ ∅ │ │ 772 │ hashvarlenaextended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 2281 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashvarlenaextended │ ∅ │ ∅ │ ∅ │ │ 457 │ hashoidvector │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 30 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashoidvector │ ∅ │ ∅ │ ∅ │ │ 776 │ hashoidvectorextended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 30 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashoidvectorextended │ ∅ │ ∅ │ ∅ │ │ 329 │ hash_aclitem │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1033 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hash_aclitem │ ∅ │ ∅ │ ∅ │ │ 777 │ hash_aclitem_extended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 1033 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hash_aclitem_extended │ ∅ │ ∅ │ ∅ │ │ 399 │ hashmacaddr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 829 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashmacaddr │ ∅ │ ∅ │ ∅ │ │ 778 │ hashmacaddrextended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 829 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashmacaddrextended │ ∅ │ ∅ │ ∅ │ │ 422 │ hashinet │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashinet │ ∅ │ ∅ │ ∅ │ │ 779 │ hashinetextended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 869 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashinetextended │ ∅ │ ∅ │ ∅ │ │ 432 │ hash_numeric │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hash_numeric │ ∅ │ ∅ │ ∅ │ │ 780 │ hash_numeric_extended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 1700 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hash_numeric_extended │ ∅ │ ∅ │ ∅ │ │ 328 │ hashmacaddr8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 774 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashmacaddr8 │ ∅ │ ∅ │ ∅ │ │ 781 │ hashmacaddr8extended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 774 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashmacaddr8extended │ ∅ │ ∅ │ ∅ │ │ 438 │ num_nulls │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 23 │ 2276 │ {2276} │ {v} │ ∅ │ ∅ │ ∅ │ pg_num_nulls │ ∅ │ ∅ │ ∅ │ │ 440 │ num_nonnulls │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 23 │ 2276 │ {2276} │ {v} │ ∅ │ ∅ │ ∅ │ pg_num_nonnulls │ ∅ │ ∅ │ ∅ │ │ 458 │ text_larger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_larger │ ∅ │ ∅ │ ∅ │ │ 459 │ text_smaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_smaller │ ∅ │ ∅ │ ∅ │ │ 460 │ int8in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8in │ ∅ │ ∅ │ ∅ │ │ 461 │ int8out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8out │ ∅ │ ∅ │ ∅ │ │ 462 │ int8um │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8um │ ∅ │ ∅ │ ∅ │ │ 463 │ int8pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8pl │ ∅ │ ∅ │ ∅ │ │ 464 │ int8mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8mi │ ∅ │ ∅ │ ∅ │ │ 465 │ int8mul │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8mul │ ∅ │ ∅ │ ∅ │ │ 466 │ int8div │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8div │ ∅ │ ∅ │ ∅ │ │ 467 │ int8eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8eq │ ∅ │ ∅ │ ∅ │ │ 468 │ int8ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8ne │ ∅ │ ∅ │ ∅ │ │ 469 │ int8lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8lt │ ∅ │ ∅ │ ∅ │ │ 470 │ int8gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8gt │ ∅ │ ∅ │ ∅ │ │ 471 │ int8le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8le │ ∅ │ ∅ │ ∅ │ │ 472 │ int8ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8ge │ ∅ │ ∅ │ ∅ │ │ 474 │ int84eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int84eq │ ∅ │ ∅ │ ∅ │ │ 475 │ int84ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int84ne │ ∅ │ ∅ │ ∅ │ │ 476 │ int84lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int84lt │ ∅ │ ∅ │ ∅ │ │ 477 │ int84gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int84gt │ ∅ │ ∅ │ ∅ │ │ 478 │ int84le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int84le │ ∅ │ ∅ │ ∅ │ │ 479 │ int84ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int84ge │ ∅ │ ∅ │ ∅ │ │ 480 │ int4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int84 │ ∅ │ ∅ │ ∅ │ │ 481 │ int8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int48 │ ∅ │ ∅ │ ∅ │ │ 482 │ float8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ i8tod │ ∅ │ ∅ │ ∅ │ │ 483 │ int8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dtoi8 │ ∅ │ ∅ │ ∅ │ │ 626 │ hash_array │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hash_array │ ∅ │ ∅ │ ∅ │ │ 782 │ hash_array_extended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 2277 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hash_array_extended │ ∅ │ ∅ │ ∅ │ │ 652 │ float4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 700 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ i8tof │ ∅ │ ∅ │ ∅ │ │ 653 │ int8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ftoi8 │ ∅ │ ∅ │ ∅ │ │ 714 │ int2 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 21 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int82 │ ∅ │ ∅ │ ∅ │ │ 754 │ int8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int28 │ ∅ │ ∅ │ ∅ │ │ 655 │ namelt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ namelt │ ∅ │ ∅ │ ∅ │ │ 656 │ namele │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ namele │ ∅ │ ∅ │ ∅ │ │ 657 │ namegt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ namegt │ ∅ │ ∅ │ ∅ │ │ 658 │ namege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ namege │ ∅ │ ∅ │ ∅ │ │ 659 │ namene │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ namene │ ∅ │ ∅ │ ∅ │ │ 668 │ bpchar │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1042 │ 1042 23 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpchar │ ∅ │ ∅ │ ∅ │ │ 3097 │ varchar_support │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ varchar_support │ ∅ │ ∅ │ ∅ │ │ 669 │ varchar │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ varchar_support │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1043 │ 1043 23 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ varchar │ ∅ │ ∅ │ ∅ │ │ 619 │ oidvectorne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 30 30 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidvectorne │ ∅ │ ∅ │ ∅ │ │ 677 │ oidvectorlt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 30 30 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidvectorlt │ ∅ │ ∅ │ ∅ │ │ 678 │ oidvectorle │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 30 30 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidvectorle │ ∅ │ ∅ │ ∅ │ │ 679 │ oidvectoreq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 30 30 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidvectoreq │ ∅ │ ∅ │ ∅ │ │ 680 │ oidvectorge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 30 30 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidvectorge │ ∅ │ ∅ │ ∅ │ │ 681 │ oidvectorgt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 30 30 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidvectorgt │ ∅ │ ∅ │ ∅ │ │ 710 │ getpgusername │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 0 │ 0 │ 19 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ current_user │ ∅ │ ∅ │ ∅ │ │ 716 │ oidlt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 26 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidlt │ ∅ │ ∅ │ ∅ │ │ 717 │ oidle │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 26 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidle │ ∅ │ ∅ │ ∅ │ │ 720 │ octet_length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteaoctetlen │ ∅ │ ∅ │ ∅ │ │ 721 │ get_byte │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 17 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteaGetByte │ ∅ │ ∅ │ ∅ │ │ 722 │ set_byte │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 17 │ 17 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteaSetByte │ ∅ │ ∅ │ ∅ │ │ 723 │ get_bit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 17 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteaGetBit │ ∅ │ ∅ │ ∅ │ │ 724 │ set_bit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 17 │ 17 20 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteaSetBit │ ∅ │ ∅ │ ∅ │ │ 749 │ overlay │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 17 │ 17 17 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteaoverlay │ ∅ │ ∅ │ ∅ │ │ 752 │ overlay │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 17 │ 17 17 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteaoverlay_no_len │ ∅ │ ∅ │ ∅ │ │ 725 │ dist_pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 600 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_pl │ ∅ │ ∅ │ ∅ │ │ 702 │ dist_lp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 628 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_lp │ ∅ │ ∅ │ ∅ │ │ 726 │ dist_lb │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 628 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_lb │ ∅ │ ∅ │ ∅ │ │ 703 │ dist_bl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 603 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_bl │ ∅ │ ∅ │ ∅ │ │ 727 │ dist_sl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 601 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_sl │ ∅ │ ∅ │ ∅ │ │ 704 │ dist_ls │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 628 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_ls │ ∅ │ ∅ │ ∅ │ │ 728 │ dist_cpoly │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 718 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_cpoly │ ∅ │ ∅ │ ∅ │ │ 785 │ dist_polyc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 604 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_polyc │ ∅ │ ∅ │ ∅ │ │ 729 │ poly_distance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 604 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_distance │ ∅ │ ∅ │ ∅ │ │ 3275 │ dist_ppoly │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 600 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_ppoly │ ∅ │ ∅ │ ∅ │ │ 3292 │ dist_polyp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 604 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_polyp │ ∅ │ ∅ │ ∅ │ │ 3290 │ dist_cpoint │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 718 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_cpoint │ ∅ │ ∅ │ ∅ │ │ 740 │ text_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_lt │ ∅ │ ∅ │ ∅ │ │ 741 │ text_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_le │ ∅ │ ∅ │ ∅ │ │ 742 │ text_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_gt │ ∅ │ ∅ │ ∅ │ │ 743 │ text_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_ge │ ∅ │ ∅ │ ∅ │ │ 745 │ current_user │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 0 │ 0 │ 19 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ current_user │ ∅ │ ∅ │ ∅ │ │ 746 │ session_user │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 0 │ 0 │ 19 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ session_user │ ∅ │ ∅ │ ∅ │ │ 744 │ array_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2277 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_eq │ ∅ │ ∅ │ ∅ │ │ 390 │ array_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2277 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_ne │ ∅ │ ∅ │ ∅ │ │ 391 │ array_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2277 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_lt │ ∅ │ ∅ │ ∅ │ │ 392 │ array_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2277 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_gt │ ∅ │ ∅ │ ∅ │ │ 393 │ array_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2277 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_le │ ∅ │ ∅ │ ∅ │ │ 396 │ array_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2277 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_ge │ ∅ │ ∅ │ ∅ │ │ 747 │ array_dims │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_dims │ ∅ │ ∅ │ ∅ │ │ 748 │ array_ndims │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_ndims │ ∅ │ ∅ │ ∅ │ │ 750 │ array_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 2277 │ 2275 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_in │ ∅ │ ∅ │ ∅ │ │ 751 │ array_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_out │ ∅ │ ∅ │ ∅ │ │ 2091 │ array_lower │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 2277 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_lower │ ∅ │ ∅ │ ∅ │ │ 2092 │ array_upper │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 2277 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_upper │ ∅ │ ∅ │ ∅ │ │ 2176 │ array_length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 2277 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_length │ ∅ │ ∅ │ ∅ │ │ 3179 │ cardinality │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_cardinality │ ∅ │ ∅ │ ∅ │ │ 378 │ array_append │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2277 │ 2277 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_append │ ∅ │ ∅ │ ∅ │ │ 379 │ array_prepend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2277 │ 2283 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_prepend │ ∅ │ ∅ │ ∅ │ │ 383 │ array_cat │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2277 │ 2277 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_cat │ ∅ │ ∅ │ ∅ │ │ 394 │ string_to_array │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 1009 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_to_array │ ∅ │ ∅ │ ∅ │ │ 395 │ array_to_string │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 2277 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_to_text │ ∅ │ ∅ │ ∅ │ │ 376 │ string_to_array │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 3 │ 0 │ 1009 │ 25 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_to_array_null │ ∅ │ ∅ │ ∅ │ │ 384 │ array_to_string │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 3 │ 0 │ 25 │ 2277 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_to_text_null │ ∅ │ ∅ │ ∅ │ │ 515 │ array_larger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2277 │ 2277 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_larger │ ∅ │ ∅ │ ∅ │ │ 516 │ array_smaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2277 │ 2277 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_smaller │ ∅ │ ∅ │ ∅ │ │ 3277 │ array_position │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 23 │ 2277 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_position │ ∅ │ ∅ │ ∅ │ │ 3278 │ array_position │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 3 │ 0 │ 23 │ 2277 2283 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_position_start │ ∅ │ ∅ │ ∅ │ │ 3279 │ array_positions │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 1007 │ 2277 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_positions │ ∅ │ ∅ │ ∅ │ │ 1191 │ generate_subscripts │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 3 │ 0 │ 23 │ 2277 23 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ generate_subscripts │ ∅ │ ∅ │ ∅ │ │ 1192 │ generate_subscripts │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 2 │ 0 │ 23 │ 2277 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ generate_subscripts_nodir │ ∅ │ ∅ │ ∅ │ │ 1193 │ array_fill │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2277 │ 2283 1007 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_fill │ ∅ │ ∅ │ ∅ │ │ 1286 │ array_fill │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 3 │ 0 │ 2277 │ 2283 1007 1007 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_fill_with_lower_bounds │ ∅ │ ∅ │ ∅ │ │ 2331 │ unnest │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ array_unnest_support │ f │ f │ f │ t │ t │ i │ s │ 1 │ 0 │ 2283 │ 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_unnest │ ∅ │ ∅ │ ∅ │ │ 3996 │ array_unnest_support │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_unnest_support │ ∅ │ ∅ │ ∅ │ │ 3167 │ array_remove │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2277 │ 2277 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_remove │ ∅ │ ∅ │ ∅ │ │ 3168 │ array_replace │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 3 │ 0 │ 2277 │ 2277 2283 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_replace │ ∅ │ ∅ │ ∅ │ │ 2333 │ array_agg_transfn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 2776 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_agg_transfn │ ∅ │ ∅ │ ∅ │ │ 2334 │ array_agg_finalfn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2277 │ 2281 2776 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_agg_finalfn │ ∅ │ ∅ │ ∅ │ │ 2335 │ array_agg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 2277 │ 2776 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 4051 │ array_agg_array_transfn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_agg_array_transfn │ ∅ │ ∅ │ ∅ │ │ 4052 │ array_agg_array_finalfn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2277 │ 2281 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_agg_array_finalfn │ ∅ │ ∅ │ ∅ │ │ 4053 │ array_agg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 2277 │ 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3218 │ width_bucket │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 2283 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ width_bucket_array │ ∅ │ ∅ │ ∅ │ │ 3816 │ array_typanalyze │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_typanalyze │ ∅ │ ∅ │ ∅ │ │ 3817 │ arraycontsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ arraycontsel │ ∅ │ ∅ │ ∅ │ │ 3818 │ arraycontjoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ arraycontjoinsel │ ∅ │ ∅ │ ∅ │ │ 24576 │ p1 │ 2200 │ 16384 │ 13653 │ 100 │ 0 │ 0 │ - │ p │ f │ f │ f │ f │ v │ u │ 2 │ 0 │ 2249 │ 23 23 │ {23,23} │ {b,b} │ {r,v} │ ∅ │ ∅ │ ↵│ ∅ │ ∅ │ ∅ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ begin v := random() * r; end ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ 766 │ int4inc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4inc │ ∅ │ ∅ │ ∅ │ │ 768 │ int4larger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4larger │ ∅ │ ∅ │ ∅ │ │ 769 │ int4smaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4smaller │ ∅ │ ∅ │ ∅ │ │ 770 │ int2larger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 21 │ 21 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2larger │ ∅ │ ∅ │ ∅ │ │ 771 │ int2smaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 21 │ 21 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2smaller │ ∅ │ ∅ │ ∅ │ │ 846 │ cash_mul_flt4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 790 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_mul_flt4 │ ∅ │ ∅ │ ∅ │ │ 847 │ cash_div_flt4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 790 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_div_flt4 │ ∅ │ ∅ │ ∅ │ │ 848 │ flt4_mul_cash │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 700 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ flt4_mul_cash │ ∅ │ ∅ │ ∅ │ │ 849 │ position │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textpos │ ∅ │ ∅ │ ∅ │ │ 850 │ textlike │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ textlike_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textlike │ ∅ │ ∅ │ ∅ │ │ 1023 │ textlike_support │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textlike_support │ ∅ │ ∅ │ ∅ │ │ 851 │ textnlike │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textnlike │ ∅ │ ∅ │ ∅ │ │ 852 │ int48eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 23 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int48eq │ ∅ │ ∅ │ ∅ │ │ 853 │ int48ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 23 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int48ne │ ∅ │ ∅ │ ∅ │ │ 854 │ int48lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 23 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int48lt │ ∅ │ ∅ │ ∅ │ │ 855 │ int48gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 23 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int48gt │ ∅ │ ∅ │ ∅ │ │ 856 │ int48le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 23 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int48le │ ∅ │ ∅ │ ∅ │ │ 857 │ int48ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 23 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int48ge │ ∅ │ ∅ │ ∅ │ │ 858 │ namelike │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ textlike_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ namelike │ ∅ │ ∅ │ ∅ │ │ 859 │ namenlike │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ namenlike │ ∅ │ ∅ │ ∅ │ │ 860 │ bpchar │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1042 │ 18 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ char_bpchar │ ∅ │ ∅ │ ∅ │ │ 861 │ current_database │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 0 │ 0 │ 19 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ current_database │ ∅ │ ∅ │ ∅ │ │ 817 │ current_query │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ v │ r │ 0 │ 0 │ 25 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ current_query │ ∅ │ ∅ │ ∅ │ │ 3399 │ int8_mul_cash │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 20 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8_mul_cash │ ∅ │ ∅ │ ∅ │ │ 862 │ int4_mul_cash │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 23 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4_mul_cash │ ∅ │ ∅ │ ∅ │ │ 863 │ int2_mul_cash │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 21 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2_mul_cash │ ∅ │ ∅ │ ∅ │ │ 3344 │ cash_mul_int8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 790 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_mul_int8 │ ∅ │ ∅ │ ∅ │ │ 3345 │ cash_div_int8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 790 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_div_int8 │ ∅ │ ∅ │ ∅ │ │ 864 │ cash_mul_int4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 790 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_mul_int4 │ ∅ │ ∅ │ ∅ │ │ 865 │ cash_div_int4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 790 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_div_int4 │ ∅ │ ∅ │ ∅ │ │ 866 │ cash_mul_int2 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 790 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_mul_int2 │ ∅ │ ∅ │ ∅ │ │ 867 │ cash_div_int2 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 790 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_div_int2 │ ∅ │ ∅ │ ∅ │ │ 886 │ cash_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 790 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_in │ ∅ │ ∅ │ ∅ │ │ 887 │ cash_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_out │ ∅ │ ∅ │ ∅ │ │ 888 │ cash_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 790 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_eq │ ∅ │ ∅ │ ∅ │ │ 889 │ cash_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 790 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_ne │ ∅ │ ∅ │ ∅ │ │ 890 │ cash_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 790 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_lt │ ∅ │ ∅ │ ∅ │ │ 891 │ cash_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 790 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_le │ ∅ │ ∅ │ ∅ │ │ 892 │ cash_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 790 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_gt │ ∅ │ ∅ │ ∅ │ │ 893 │ cash_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 790 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_ge │ ∅ │ ∅ │ ∅ │ │ 894 │ cash_pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 790 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_pl │ ∅ │ ∅ │ ∅ │ │ 895 │ cash_mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 790 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_mi │ ∅ │ ∅ │ ∅ │ │ 896 │ cash_mul_flt8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 790 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_mul_flt8 │ ∅ │ ∅ │ ∅ │ │ 897 │ cash_div_flt8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 790 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_div_flt8 │ ∅ │ ∅ │ ∅ │ │ 898 │ cashlarger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 790 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cashlarger │ ∅ │ ∅ │ ∅ │ │ 899 │ cashsmaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 790 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cashsmaller │ ∅ │ ∅ │ ∅ │ │ 919 │ flt8_mul_cash │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 790 │ 701 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ flt8_mul_cash │ ∅ │ ∅ │ ∅ │ │ 935 │ cash_words │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_words │ ∅ │ ∅ │ ∅ │ │ 3822 │ cash_div_cash │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 790 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_div_cash │ ∅ │ ∅ │ ∅ │ │ 3823 │ numeric │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 1700 │ 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_numeric │ ∅ │ ∅ │ ∅ │ │ 3824 │ money │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 790 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_cash │ ∅ │ ∅ │ ∅ │ │ 3811 │ money │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 790 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4_cash │ ∅ │ ∅ │ ∅ │ │ 3812 │ money │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 790 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8_cash │ ∅ │ ∅ │ ∅ │ │ 940 │ mod │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 21 │ 21 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2mod │ ∅ │ ∅ │ ∅ │ │ 941 │ mod │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4mod │ ∅ │ ∅ │ ∅ │ │ 945 │ int8mod │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8mod │ ∅ │ ∅ │ ∅ │ │ 947 │ mod │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8mod │ ∅ │ ∅ │ ∅ │ │ 5044 │ gcd │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4gcd │ ∅ │ ∅ │ ∅ │ │ 5045 │ gcd │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8gcd │ ∅ │ ∅ │ ∅ │ │ 5046 │ lcm │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4lcm │ ∅ │ ∅ │ ∅ │ │ 5047 │ lcm │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8lcm │ ∅ │ ∅ │ ∅ │ │ 944 │ char │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 18 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_char │ ∅ │ ∅ │ ∅ │ │ 946 │ text │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 18 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ char_text │ ∅ │ ∅ │ ∅ │ │ 952 │ lo_open │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 23 │ 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lo_open │ ∅ │ ∅ │ ∅ │ │ 953 │ lo_close │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 23 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lo_close │ ∅ │ ∅ │ ∅ │ │ 954 │ loread │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 17 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_loread │ ∅ │ ∅ │ ∅ │ │ 955 │ lowrite │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 23 │ 23 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lowrite │ ∅ │ ∅ │ ∅ │ │ 956 │ lo_lseek │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 3 │ 0 │ 23 │ 23 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lo_lseek │ ∅ │ ∅ │ ∅ │ │ 3170 │ lo_lseek64 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 3 │ 0 │ 20 │ 23 20 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lo_lseek64 │ ∅ │ ∅ │ ∅ │ │ 957 │ lo_creat │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 26 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lo_creat │ ∅ │ ∅ │ ∅ │ │ 715 │ lo_create │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 26 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lo_create │ ∅ │ ∅ │ ∅ │ │ 958 │ lo_tell │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 23 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lo_tell │ ∅ │ ∅ │ ∅ │ │ 3171 │ lo_tell64 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 20 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lo_tell64 │ ∅ │ ∅ │ ∅ │ │ 1004 │ lo_truncate │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 23 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lo_truncate │ ∅ │ ∅ │ ∅ │ │ 3172 │ lo_truncate64 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 23 │ 23 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lo_truncate64 │ ∅ │ ∅ │ ∅ │ │ 3457 │ lo_from_bytea │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 26 │ 26 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lo_from_bytea │ ∅ │ ∅ │ ∅ │ │ 3458 │ lo_get │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 17 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lo_get │ ∅ │ ∅ │ ∅ │ │ 3459 │ lo_get │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 3 │ 0 │ 17 │ 26 20 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lo_get_fragment │ ∅ │ ∅ │ ∅ │ │ 3460 │ lo_put │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 3 │ 0 │ 2278 │ 26 20 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lo_put │ ∅ │ ∅ │ ∅ │ │ 959 │ on_pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 600 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ on_pl │ ∅ │ ∅ │ ∅ │ │ 960 │ on_sl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 601 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ on_sl │ ∅ │ ∅ │ ∅ │ │ 961 │ close_pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 600 │ 600 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ close_pl │ ∅ │ ∅ │ ∅ │ │ 962 │ close_sl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 600 │ 601 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ close_sl │ ∅ │ ∅ │ ∅ │ │ 963 │ close_lb │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 600 │ 628 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ close_lb │ ∅ │ ∅ │ ∅ │ │ 964 │ lo_unlink │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 23 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lo_unlink │ ∅ │ ∅ │ ∅ │ │ 973 │ path_inter │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 602 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_inter │ ∅ │ ∅ │ ∅ │ │ 975 │ area │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_area │ ∅ │ ∅ │ ∅ │ │ 976 │ width │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_width │ ∅ │ ∅ │ ∅ │ │ 977 │ height │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_height │ ∅ │ ∅ │ ∅ │ │ 978 │ box_distance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_distance │ ∅ │ ∅ │ ∅ │ │ 979 │ area │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_area │ ∅ │ ∅ │ ∅ │ │ 980 │ box_intersect │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 603 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_intersect │ ∅ │ ∅ │ ∅ │ │ 4067 │ bound_box │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 603 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ boxes_bound_box │ ∅ │ ∅ │ ∅ │ │ 981 │ diagonal │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 601 │ 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_diagonal │ ∅ │ ∅ │ ∅ │ │ 982 │ path_n_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 602 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_n_lt │ ∅ │ ∅ │ ∅ │ │ 983 │ path_n_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 602 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_n_gt │ ∅ │ ∅ │ ∅ │ │ 984 │ path_n_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 602 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_n_eq │ ∅ │ ∅ │ ∅ │ │ 985 │ path_n_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 602 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_n_le │ ∅ │ ∅ │ ∅ │ │ 986 │ path_n_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 602 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_n_ge │ ∅ │ ∅ │ ∅ │ │ 987 │ path_length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_length │ ∅ │ ∅ │ ∅ │ │ 988 │ point_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_ne │ ∅ │ ∅ │ ∅ │ │ 989 │ point_vert │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_vert │ ∅ │ ∅ │ ∅ │ │ 990 │ point_horiz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_horiz │ ∅ │ ∅ │ ∅ │ │ 991 │ point_distance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_distance │ ∅ │ ∅ │ ∅ │ │ 992 │ slope │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_slope │ ∅ │ ∅ │ ∅ │ │ 993 │ lseg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 601 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_construct │ ∅ │ ∅ │ ∅ │ │ 994 │ lseg_intersect │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 601 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_intersect │ ∅ │ ∅ │ ∅ │ │ 995 │ lseg_parallel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 601 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_parallel │ ∅ │ ∅ │ ∅ │ │ 996 │ lseg_perp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 601 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_perp │ ∅ │ ∅ │ ∅ │ │ 997 │ lseg_vertical │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_vertical │ ∅ │ ∅ │ ∅ │ │ 998 │ lseg_horizontal │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_horizontal │ ∅ │ ∅ │ ∅ │ │ 999 │ lseg_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 601 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_eq │ ∅ │ ∅ │ ∅ │ │ 1026 │ timezone │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1114 │ 1186 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_izone │ ∅ │ ∅ │ ∅ │ │ 1031 │ aclitemin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 1033 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aclitemin │ ∅ │ ∅ │ ∅ │ │ 1032 │ aclitemout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 1033 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aclitemout │ ∅ │ ∅ │ ∅ │ │ 1035 │ aclinsert │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1034 │ 1034 1033 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aclinsert │ ∅ │ ∅ │ ∅ │ │ 1036 │ aclremove │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1034 │ 1034 1033 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aclremove │ ∅ │ ∅ │ ∅ │ │ 1037 │ aclcontains │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1034 1033 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aclcontains │ ∅ │ ∅ │ ∅ │ │ 1062 │ aclitemeq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1033 1033 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aclitem_eq │ ∅ │ ∅ │ ∅ │ │ 1365 │ makeaclitem │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 1033 │ 26 26 25 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ makeaclitem │ ∅ │ ∅ │ ∅ │ │ 3943 │ acldefault │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1034 │ 18 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ acldefault_sql │ ∅ │ ∅ │ ∅ │ │ 1689 │ aclexplode │ 11 │ 10 │ 12 │ 1 │ 10 │ 0 │ - │ f │ f │ f │ t │ t │ s │ s │ 1 │ 0 │ 2249 │ 1034 │ {1034,26,26,25,16} │ {i,o,o,o,o} │ {acl,grantor,grantee,privilege_type,is_grantable} │ ∅ │ ∅ │ aclexplode │ ∅ │ ∅ │ ∅ │ │ 1044 │ bpcharin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1042 │ 2275 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpcharin │ ∅ │ ∅ │ ∅ │ │ 1045 │ bpcharout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpcharout │ ∅ │ ∅ │ ∅ │ │ 2913 │ bpchartypmodin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1263 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpchartypmodin │ ∅ │ ∅ │ ∅ │ │ 2914 │ bpchartypmodout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpchartypmodout │ ∅ │ ∅ │ ∅ │ │ 1046 │ varcharin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1043 │ 2275 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ varcharin │ ∅ │ ∅ │ ∅ │ │ 1047 │ varcharout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 1043 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ varcharout │ ∅ │ ∅ │ ∅ │ │ 2915 │ varchartypmodin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1263 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ varchartypmodin │ ∅ │ ∅ │ ∅ │ │ 2916 │ varchartypmodout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ varchartypmodout │ ∅ │ ∅ │ ∅ │ │ 1048 │ bpchareq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1042 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpchareq │ ∅ │ ∅ │ ∅ │ │ 1049 │ bpcharlt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1042 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpcharlt │ ∅ │ ∅ │ ∅ │ │ 1050 │ bpcharle │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1042 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpcharle │ ∅ │ ∅ │ ∅ │ │ 1051 │ bpchargt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1042 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpchargt │ ∅ │ ∅ │ ∅ │ │ 1052 │ bpcharge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1042 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpcharge │ ∅ │ ∅ │ ∅ │ │ 1053 │ bpcharne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1042 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpcharne │ ∅ │ ∅ │ ∅ │ │ 1063 │ bpchar_larger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 1042 │ 1042 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpchar_larger │ ∅ │ ∅ │ ∅ │ │ 1064 │ bpchar_smaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 1042 │ 1042 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpchar_smaller │ ∅ │ ∅ │ ∅ │ │ 1078 │ bpcharcmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 1042 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpcharcmp │ ∅ │ ∅ │ ∅ │ │ 3328 │ bpchar_sortsupport │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpchar_sortsupport │ ∅ │ ∅ │ ∅ │ │ 1080 │ hashbpchar │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashbpchar │ ∅ │ ∅ │ ∅ │ │ 972 │ hashbpcharextended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 1042 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashbpcharextended │ ∅ │ ∅ │ ∅ │ │ 1081 │ format_type │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 2 │ 0 │ 25 │ 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ format_type │ ∅ │ ∅ │ ∅ │ │ 1084 │ date_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 1082 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_in │ ∅ │ ∅ │ ∅ │ │ 1085 │ date_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_out │ ∅ │ ∅ │ ∅ │ │ 1086 │ date_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1082 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_eq │ ∅ │ ∅ │ ∅ │ │ 1087 │ date_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1082 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_lt │ ∅ │ ∅ │ ∅ │ │ 1088 │ date_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1082 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_le │ ∅ │ ∅ │ ∅ │ │ 1089 │ date_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1082 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_gt │ ∅ │ ∅ │ ∅ │ │ 1090 │ date_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1082 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_ge │ ∅ │ ∅ │ ∅ │ │ 1091 │ date_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1082 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_ne │ ∅ │ ∅ │ ∅ │ │ 1092 │ date_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 1082 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_cmp │ ∅ │ ∅ │ ∅ │ │ 3136 │ date_sortsupport │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_sortsupport │ ∅ │ ∅ │ ∅ │ │ 4133 │ in_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 1082 1082 1186 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ in_range_date_interval │ ∅ │ ∅ │ ∅ │ │ 1102 │ time_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1083 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_lt │ ∅ │ ∅ │ ∅ │ │ 1103 │ time_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1083 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_le │ ∅ │ ∅ │ ∅ │ │ 1104 │ time_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1083 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_gt │ ∅ │ ∅ │ ∅ │ │ 1105 │ time_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1083 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_ge │ ∅ │ ∅ │ ∅ │ │ 1106 │ time_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1083 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_ne │ ∅ │ ∅ │ ∅ │ │ 1107 │ time_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 1083 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_cmp │ ∅ │ ∅ │ ∅ │ │ 1138 │ date_larger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1082 │ 1082 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_larger │ ∅ │ ∅ │ ∅ │ │ 1139 │ date_smaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1082 │ 1082 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_smaller │ ∅ │ ∅ │ ∅ │ │ 1140 │ date_mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 1082 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_mi │ ∅ │ ∅ │ ∅ │ │ 1141 │ date_pli │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1082 │ 1082 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_pli │ ∅ │ ∅ │ ∅ │ │ 1142 │ date_mii │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1082 │ 1082 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_mii │ ∅ │ ∅ │ ∅ │ │ 1143 │ time_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 1083 │ 2275 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_in │ ∅ │ ∅ │ ∅ │ │ 1144 │ time_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_out │ ∅ │ ∅ │ ∅ │ │ 2909 │ timetypmodin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1263 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetypmodin │ ∅ │ ∅ │ ∅ │ │ 2910 │ timetypmodout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetypmodout │ ∅ │ ∅ │ ∅ │ │ 1145 │ time_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1083 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_eq │ ∅ │ ∅ │ ∅ │ │ 1146 │ circle_add_pt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 718 │ 718 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_add_pt │ ∅ │ ∅ │ ∅ │ │ 1147 │ circle_sub_pt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 718 │ 718 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_sub_pt │ ∅ │ ∅ │ ∅ │ │ 1148 │ circle_mul_pt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 718 │ 718 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_mul_pt │ ∅ │ ∅ │ ∅ │ │ 1149 │ circle_div_pt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 718 │ 718 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_div_pt │ ∅ │ ∅ │ ∅ │ │ 1150 │ timestamptz_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 1184 │ 2275 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_in │ ∅ │ ∅ │ ∅ │ │ 1151 │ timestamptz_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_out │ ∅ │ ∅ │ ∅ │ │ 2907 │ timestamptztypmodin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1263 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptztypmodin │ ∅ │ ∅ │ ∅ │ │ 2908 │ timestamptztypmodout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptztypmodout │ ∅ │ ∅ │ ∅ │ │ 1152 │ timestamptz_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1184 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_eq │ ∅ │ ∅ │ ∅ │ │ 1153 │ timestamptz_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1184 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_ne │ ∅ │ ∅ │ ∅ │ │ 1154 │ timestamptz_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1184 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_lt │ ∅ │ ∅ │ ∅ │ │ 1155 │ timestamptz_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1184 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_le │ ∅ │ ∅ │ ∅ │ │ 1156 │ timestamptz_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1184 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_ge │ ∅ │ ∅ │ ∅ │ │ 1157 │ timestamptz_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1184 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_gt │ ∅ │ ∅ │ ∅ │ │ 1158 │ to_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1184 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_timestamptz │ ∅ │ ∅ │ ∅ │ │ 1159 │ timezone │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1114 │ 25 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_zone │ ∅ │ ∅ │ ∅ │ │ 1160 │ interval_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 1186 │ 2275 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_in │ ∅ │ ∅ │ ∅ │ │ 1161 │ interval_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_out │ ∅ │ ∅ │ ∅ │ │ 2903 │ intervaltypmodin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1263 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ intervaltypmodin │ ∅ │ ∅ │ ∅ │ │ 2904 │ intervaltypmodout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ intervaltypmodout │ ∅ │ ∅ │ ∅ │ │ 1162 │ interval_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1186 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_eq │ ∅ │ ∅ │ ∅ │ │ 1163 │ interval_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1186 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_ne │ ∅ │ ∅ │ ∅ │ │ 1164 │ interval_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1186 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_lt │ ∅ │ ∅ │ ∅ │ │ 1165 │ interval_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1186 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_le │ ∅ │ ∅ │ ∅ │ │ 1166 │ interval_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1186 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_ge │ ∅ │ ∅ │ ∅ │ │ 1167 │ interval_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1186 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_gt │ ∅ │ ∅ │ ∅ │ │ 1168 │ interval_um │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1186 │ 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_um │ ∅ │ ∅ │ ∅ │ │ 1169 │ interval_pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1186 │ 1186 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_pl │ ∅ │ ∅ │ ∅ │ │ 1170 │ interval_mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1186 │ 1186 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_mi │ ∅ │ ∅ │ ∅ │ │ 1171 │ date_part │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 701 │ 25 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_part │ ∅ │ ∅ │ ∅ │ │ 1172 │ date_part │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 25 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_part │ ∅ │ ∅ │ ∅ │ │ 1174 │ timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 1184 │ 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_timestamptz │ ∅ │ ∅ │ ∅ │ │ 2711 │ justify_interval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1186 │ 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_justify_interval │ ∅ │ ∅ │ ∅ │ │ 1175 │ justify_hours │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1186 │ 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_justify_hours │ ∅ │ ∅ │ ∅ │ │ 1295 │ justify_days │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1186 │ 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_justify_days │ ∅ │ ∅ │ ∅ │ │ 1176 │ timestamptz │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 1184 │ 1082 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select cast(($1 + $2) as timestamp with time zone) │ ∅ │ ∅ │ ∅ │ │ 1178 │ date │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 1082 │ 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_date │ ∅ │ ∅ │ ∅ │ │ 1181 │ age │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 23 │ 28 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xid_age │ ∅ │ ∅ │ ∅ │ │ 3939 │ mxid_age │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 23 │ 28 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ mxid_age │ ∅ │ ∅ │ ∅ │ │ 1188 │ timestamptz_mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1186 │ 1184 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_mi │ ∅ │ ∅ │ ∅ │ │ 1189 │ timestamptz_pl_interval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 1184 │ 1184 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_pl_interval │ ∅ │ ∅ │ ∅ │ │ 1190 │ timestamptz_mi_interval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 1184 │ 1184 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_mi_interval │ ∅ │ ∅ │ ∅ │ │ 1195 │ timestamptz_smaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1184 │ 1184 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_smaller │ ∅ │ ∅ │ ∅ │ │ 1196 │ timestamptz_larger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1184 │ 1184 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_larger │ ∅ │ ∅ │ ∅ │ │ 1197 │ interval_smaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1186 │ 1186 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_smaller │ ∅ │ ∅ │ ∅ │ │ 1198 │ interval_larger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1186 │ 1186 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_larger │ ∅ │ ∅ │ ∅ │ │ 1199 │ age │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1186 │ 1184 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_age │ ∅ │ ∅ │ ∅ │ │ 3918 │ interval_support │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_support │ ∅ │ ∅ │ ∅ │ │ 1200 │ interval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ interval_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1186 │ 1186 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_scale │ ∅ │ ∅ │ ∅ │ │ 1215 │ obj_description │ 11 │ 10 │ 14 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 26 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select description from pg_catalog.pg_description where objoid = $1 and classoid = (select oid from pg_catalog.pg_class where relname = $2 and relnamespace = 11) and objsubid = 0 │ ∅ │ ∅ │ ∅ │ │ 1216 │ col_description │ 11 │ 10 │ 14 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select description from pg_catalog.pg_description where objoid = $1 and classoid = 'pg_catalog.pg_class'::pg_catalog.regclass and objsubid = $2 │ ∅ │ ∅ │ ∅ │ │ 1993 │ shobj_description │ 11 │ 10 │ 14 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 26 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select description from pg_catalog.pg_shdescription where objoid = $1 and classoid = (select oid from pg_catalog.pg_class where relname = $2 and relnamespace = 11) │ ∅ │ ∅ │ ∅ │ │ 1217 │ date_trunc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 1184 │ 25 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_trunc │ ∅ │ ∅ │ ∅ │ │ 1284 │ date_trunc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 1184 │ 25 1184 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_trunc_zone │ ∅ │ ∅ │ ∅ │ │ 1218 │ date_trunc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1186 │ 25 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_trunc │ ∅ │ ∅ │ ∅ │ │ 1219 │ int8inc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8inc │ ∅ │ ∅ │ ∅ │ │ 3546 │ int8dec │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8dec │ ∅ │ ∅ │ ∅ │ │ 2804 │ int8inc_any │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 2276 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8inc_any │ ∅ │ ∅ │ ∅ │ │ 3547 │ int8dec_any │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 2276 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8dec_any │ ∅ │ ∅ │ ∅ │ │ 1230 │ int8abs │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8abs │ ∅ │ ∅ │ ∅ │ │ 1236 │ int8larger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8larger │ ∅ │ ∅ │ ∅ │ │ 1237 │ int8smaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8smaller │ ∅ │ ∅ │ ∅ │ │ 1238 │ texticregexeq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ texticregexeq_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ texticregexeq │ ∅ │ ∅ │ ∅ │ │ 1024 │ texticregexeq_support │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ texticregexeq_support │ ∅ │ ∅ │ ∅ │ │ 1239 │ texticregexne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ texticregexne │ ∅ │ ∅ │ ∅ │ │ 1240 │ nameicregexeq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ texticregexeq_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ nameicregexeq │ ∅ │ ∅ │ ∅ │ │ 1241 │ nameicregexne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ nameicregexne │ ∅ │ ∅ │ ∅ │ │ 1251 │ int4abs │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4abs │ ∅ │ ∅ │ ∅ │ │ 1253 │ int2abs │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 21 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2abs │ ∅ │ ∅ │ ∅ │ │ 1271 │ overlaps │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 4 │ 0 │ 16 │ 1266 1266 1266 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ overlaps_timetz │ ∅ │ ∅ │ ∅ │ │ 1272 │ datetime_pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1114 │ 1082 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ datetime_timestamp │ ∅ │ ∅ │ ∅ │ │ 1273 │ date_part │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 25 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_part │ ∅ │ ∅ │ ∅ │ │ 1274 │ int84pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int84pl │ ∅ │ ∅ │ ∅ │ │ 1275 │ int84mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int84mi │ ∅ │ ∅ │ ∅ │ │ 1276 │ int84mul │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int84mul │ ∅ │ ∅ │ ∅ │ │ 1277 │ int84div │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int84div │ ∅ │ ∅ │ ∅ │ │ 1278 │ int48pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 23 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int48pl │ ∅ │ ∅ │ ∅ │ │ 1279 │ int48mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 23 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int48mi │ ∅ │ ∅ │ ∅ │ │ 1280 │ int48mul │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 23 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int48mul │ ∅ │ ∅ │ ∅ │ │ 1281 │ int48div │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 23 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int48div │ ∅ │ ∅ │ ∅ │ │ 837 │ int82pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int82pl │ ∅ │ ∅ │ ∅ │ │ 838 │ int82mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int82mi │ ∅ │ ∅ │ ∅ │ │ 839 │ int82mul │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int82mul │ ∅ │ ∅ │ ∅ │ │ 840 │ int82div │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int82div │ ∅ │ ∅ │ ∅ │ │ 841 │ int28pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 21 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int28pl │ ∅ │ ∅ │ ∅ │ │ 942 │ int28mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 21 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int28mi │ ∅ │ ∅ │ ∅ │ │ 943 │ int28mul │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 21 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int28mul │ ∅ │ ∅ │ ∅ │ │ 948 │ int28div │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 21 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int28div │ ∅ │ ∅ │ ∅ │ │ 1287 │ oid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 26 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ i8tooid │ ∅ │ ∅ │ ∅ │ │ 1288 │ int8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidtoi8 │ ∅ │ ∅ │ ∅ │ │ 1291 │ suppress_redundant_updates_trigger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2279 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ suppress_redundant_updates_trigger │ ∅ │ ∅ │ ∅ │ │ 1292 │ tideq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 27 27 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tideq │ ∅ │ ∅ │ ∅ │ │ 1293 │ currtid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 27 │ 26 27 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ currtid_byreloid │ ∅ │ ∅ │ ∅ │ │ 1294 │ currtid2 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 27 │ 25 27 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ currtid_byrelname │ ∅ │ ∅ │ ∅ │ │ 1265 │ tidne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 27 27 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tidne │ ∅ │ ∅ │ ∅ │ │ 2790 │ tidgt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 27 27 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tidgt │ ∅ │ ∅ │ ∅ │ │ 2791 │ tidlt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 27 27 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tidlt │ ∅ │ ∅ │ ∅ │ │ 2792 │ tidge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 27 27 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tidge │ ∅ │ ∅ │ ∅ │ │ 2793 │ tidle │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 27 27 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tidle │ ∅ │ ∅ │ ∅ │ │ 2794 │ bttidcmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 27 27 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bttidcmp │ ∅ │ ∅ │ ∅ │ │ 2795 │ tidlarger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 27 │ 27 27 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tidlarger │ ∅ │ ∅ │ ∅ │ │ 2796 │ tidsmaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 27 │ 27 27 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tidsmaller │ ∅ │ ∅ │ ∅ │ │ 2233 │ hashtid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 27 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashtid │ ∅ │ ∅ │ ∅ │ │ 2234 │ hashtidextended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 27 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashtidextended │ ∅ │ ∅ │ ∅ │ │ 1296 │ timedate_pl │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1114 │ 1083 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select ($2 + $1) │ ∅ │ ∅ │ ∅ │ │ 1297 │ datetimetz_pl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1184 │ 1082 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ datetimetz_timestamptz │ ∅ │ ∅ │ ∅ │ │ 1298 │ timetzdate_pl │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1184 │ 1266 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select ($2 + $1) │ ∅ │ ∅ │ ∅ │ │ 1299 │ now │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 0 │ 0 │ 1184 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ now │ ∅ │ ∅ │ ∅ │ │ 2647 │ transaction_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 0 │ 0 │ 1184 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ now │ ∅ │ ∅ │ ∅ │ │ 2648 │ statement_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 0 │ 0 │ 1184 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ statement_timestamp │ ∅ │ ∅ │ ∅ │ │ 2649 │ clock_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 1184 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ clock_timestamp │ ∅ │ ∅ │ ∅ │ │ 1300 │ positionsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ positionsel │ ∅ │ ∅ │ ∅ │ │ 1301 │ positionjoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ positionjoinsel │ ∅ │ ∅ │ ∅ │ │ 1302 │ contsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ contsel │ ∅ │ ∅ │ ∅ │ │ 1303 │ contjoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ contjoinsel │ ∅ │ ∅ │ ∅ │ │ 1355 │ timetz_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1266 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_le │ ∅ │ ∅ │ ∅ │ │ 1304 │ overlaps │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 4 │ 0 │ 16 │ 1184 1184 1184 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ overlaps_timestamp │ ∅ │ ∅ │ ∅ │ │ 1305 │ overlaps │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 4 │ 0 │ 16 │ 1184 1186 1184 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select ($1, ($1 + $2)) overlaps ($3, ($3 + $4)) │ ∅ │ ∅ │ ∅ │ │ 1306 │ overlaps │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 4 │ 0 │ 16 │ 1184 1184 1184 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select ($1, $2) overlaps ($3, ($3 + $4)) │ ∅ │ ∅ │ ∅ │ │ 1307 │ overlaps │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 4 │ 0 │ 16 │ 1184 1186 1184 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select ($1, ($1 + $2)) overlaps ($3, $4) │ ∅ │ ∅ │ ∅ │ │ 1308 │ overlaps │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 4 │ 0 │ 16 │ 1083 1083 1083 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ overlaps_time │ ∅ │ ∅ │ ∅ │ │ 1309 │ overlaps │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 4 │ 0 │ 16 │ 1083 1186 1083 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select ($1, ($1 + $2)) overlaps ($3, ($3 + $4)) │ ∅ │ ∅ │ ∅ │ │ 1310 │ overlaps │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 4 │ 0 │ 16 │ 1083 1083 1083 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select ($1, $2) overlaps ($3, ($3 + $4)) │ ∅ │ ∅ │ ∅ │ │ 1311 │ overlaps │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 4 │ 0 │ 16 │ 1083 1186 1083 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select ($1, ($1 + $2)) overlaps ($3, $4) │ ∅ │ ∅ │ ∅ │ │ 1312 │ timestamp_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 1114 │ 2275 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_in │ ∅ │ ∅ │ ∅ │ │ 1313 │ timestamp_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_out │ ∅ │ ∅ │ ∅ │ │ 2905 │ timestamptypmodin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1263 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptypmodin │ ∅ │ ∅ │ ∅ │ │ 2906 │ timestamptypmodout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptypmodout │ ∅ │ ∅ │ ∅ │ │ 1314 │ timestamptz_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 1184 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_cmp │ ∅ │ ∅ │ ∅ │ │ 1315 │ interval_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 1186 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_cmp │ ∅ │ ∅ │ ∅ │ │ 1316 │ time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1083 │ 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_time │ ∅ │ ∅ │ ∅ │ │ 1317 │ length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textlen │ ∅ │ ∅ │ ∅ │ │ 1318 │ length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpcharlen │ ∅ │ ∅ │ ∅ │ │ 1319 │ xideqint4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 28 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xideq │ ∅ │ ∅ │ ∅ │ │ 3309 │ xidneqint4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 28 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xidneq │ ∅ │ ∅ │ ∅ │ │ 1326 │ interval_div │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1186 │ 1186 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_div │ ∅ │ ∅ │ ∅ │ │ 1339 │ dlog10 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dlog10 │ ∅ │ ∅ │ ∅ │ │ 1340 │ log │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dlog10 │ ∅ │ ∅ │ ∅ │ │ 1194 │ log10 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dlog10 │ ∅ │ ∅ │ ∅ │ │ 1341 │ ln │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dlog1 │ ∅ │ ∅ │ ∅ │ │ 1342 │ round │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dround │ ∅ │ ∅ │ ∅ │ │ 1343 │ trunc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dtrunc │ ∅ │ ∅ │ ∅ │ │ 1344 │ sqrt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dsqrt │ ∅ │ ∅ │ ∅ │ │ 1345 │ cbrt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dcbrt │ ∅ │ ∅ │ ∅ │ │ 1346 │ pow │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dpow │ ∅ │ ∅ │ ∅ │ │ 1368 │ power │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dpow │ ∅ │ ∅ │ ∅ │ │ 1347 │ exp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dexp │ ∅ │ ∅ │ ∅ │ │ 1348 │ obj_description │ 11 │ 10 │ 14 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 25 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select description from pg_catalog.pg_description where objoid = $1 and objsubid = 0 │ ∅ │ ∅ │ ∅ │ │ 1349 │ oidvectortypes │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 25 │ 30 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidvectortypes │ ∅ │ ∅ │ ∅ │ │ 1350 │ timetz_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 1266 │ 2275 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_in │ ∅ │ ∅ │ ∅ │ │ 1351 │ timetz_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_out │ ∅ │ ∅ │ ∅ │ │ 2911 │ timetztypmodin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1263 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetztypmodin │ ∅ │ ∅ │ ∅ │ │ 2912 │ timetztypmodout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetztypmodout │ ∅ │ ∅ │ ∅ │ │ 1352 │ timetz_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1266 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_eq │ ∅ │ ∅ │ ∅ │ │ 1353 │ timetz_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1266 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_ne │ ∅ │ ∅ │ ∅ │ │ 1354 │ timetz_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1266 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_lt │ ∅ │ ∅ │ ∅ │ │ 1356 │ timetz_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1266 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_ge │ ∅ │ ∅ │ ∅ │ │ 1357 │ timetz_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1266 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_gt │ ∅ │ ∅ │ ∅ │ │ 1358 │ timetz_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 1266 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_cmp │ ∅ │ ∅ │ ∅ │ │ 1359 │ timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1184 │ 1082 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ datetimetz_timestamptz │ ∅ │ ∅ │ ∅ │ │ 1367 │ character_length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpcharlen │ ∅ │ ∅ │ ∅ │ │ 1369 │ character_length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textlen │ ∅ │ ∅ │ ∅ │ │ 1370 │ interval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1186 │ 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_interval │ ∅ │ ∅ │ ∅ │ │ 1372 │ char_length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpcharlen │ ∅ │ ∅ │ ∅ │ │ 1374 │ octet_length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textoctetlen │ ∅ │ ∅ │ ∅ │ │ 1375 │ octet_length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpcharoctetlen │ ∅ │ ∅ │ ∅ │ │ 1377 │ time_larger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1083 │ 1083 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_larger │ ∅ │ ∅ │ ∅ │ │ 1378 │ time_smaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1083 │ 1083 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_smaller │ ∅ │ ∅ │ ∅ │ │ 1379 │ timetz_larger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1266 │ 1266 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_larger │ ∅ │ ∅ │ ∅ │ │ 1380 │ timetz_smaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1266 │ 1266 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_smaller │ ∅ │ ∅ │ ∅ │ │ 1381 │ char_length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textlen │ ∅ │ ∅ │ ∅ │ │ 1384 │ date_part │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 25 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.date_part($1, cast($2 as timestamp without time zone)) │ ∅ │ ∅ │ ∅ │ │ 1385 │ date_part │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 25 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_part │ ∅ │ ∅ │ ∅ │ │ 1386 │ age │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 1186 │ 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.age(cast(current_date as timestamp with time zone), $1) │ ∅ │ ∅ │ ∅ │ │ 1388 │ timetz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 1266 │ 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_timetz │ ∅ │ ∅ │ ∅ │ │ 1373 │ isfinite │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_finite │ ∅ │ ∅ │ ∅ │ │ 1389 │ isfinite │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_finite │ ∅ │ ∅ │ ∅ │ │ 1390 │ isfinite │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_finite │ ∅ │ ∅ │ ∅ │ │ 1376 │ factorial │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_fac │ ∅ │ ∅ │ ∅ │ │ 1394 │ abs │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 700 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4abs │ ∅ │ ∅ │ ∅ │ │ 1395 │ abs │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8abs │ ∅ │ ∅ │ ∅ │ │ 1396 │ abs │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8abs │ ∅ │ ∅ │ ∅ │ │ 1397 │ abs │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4abs │ ∅ │ ∅ │ ∅ │ │ 1398 │ abs │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 21 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2abs │ ∅ │ ∅ │ ∅ │ │ 1400 │ name │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 19 │ 1043 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_name │ ∅ │ ∅ │ ∅ │ │ 1401 │ varchar │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1043 │ 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ name_text │ ∅ │ ∅ │ ∅ │ │ 1402 │ current_schema │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ u │ 0 │ 0 │ 19 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ current_schema │ ∅ │ ∅ │ ∅ │ │ 1403 │ current_schemas │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ u │ 1 │ 0 │ 1003 │ 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ current_schemas │ ∅ │ ∅ │ ∅ │ │ 1404 │ overlay │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 25 │ 25 25 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textoverlay │ ∅ │ ∅ │ ∅ │ │ 1405 │ overlay │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 25 │ 25 25 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textoverlay_no_len │ ∅ │ ∅ │ ∅ │ │ 1406 │ isvertical │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_vert │ ∅ │ ∅ │ ∅ │ │ 1407 │ ishorizontal │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_horiz │ ∅ │ ∅ │ ∅ │ │ 1408 │ isparallel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 601 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_parallel │ ∅ │ ∅ │ ∅ │ │ 1409 │ isperp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 601 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_perp │ ∅ │ ∅ │ ∅ │ │ 1410 │ isvertical │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_vertical │ ∅ │ ∅ │ ∅ │ │ 1411 │ ishorizontal │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_horizontal │ ∅ │ ∅ │ ∅ │ │ 1412 │ isparallel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 628 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ line_parallel │ ∅ │ ∅ │ ∅ │ │ 1413 │ isperp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 628 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ line_perp │ ∅ │ ∅ │ ∅ │ │ 1414 │ isvertical │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ line_vertical │ ∅ │ ∅ │ ∅ │ │ 1415 │ ishorizontal │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ line_horizontal │ ∅ │ ∅ │ ∅ │ │ 1416 │ point │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 600 │ 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_center │ ∅ │ ∅ │ ∅ │ │ 1419 │ time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1083 │ 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_time │ ∅ │ ∅ │ ∅ │ │ 1421 │ box │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 603 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ points_box │ ∅ │ ∅ │ ∅ │ │ 1422 │ box_add │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 603 │ 603 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_add │ ∅ │ ∅ │ ∅ │ │ 1423 │ box_sub │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 603 │ 603 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_sub │ ∅ │ ∅ │ ∅ │ │ 1424 │ box_mul │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 603 │ 603 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_mul │ ∅ │ ∅ │ ∅ │ │ 1425 │ box_div │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 603 │ 603 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_div │ ∅ │ ∅ │ ∅ │ │ 1426 │ path_contain_pt │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 602 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.on_ppath($2, $1) │ ∅ │ ∅ │ ∅ │ │ 1428 │ poly_contain_pt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 604 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_contain_pt │ ∅ │ ∅ │ ∅ │ │ 1429 │ pt_contained_poly │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 600 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pt_contained_poly │ ∅ │ ∅ │ ∅ │ │ 1430 │ isclosed │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_isclosed │ ∅ │ ∅ │ ∅ │ │ 1431 │ isopen │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_isopen │ ∅ │ ∅ │ ∅ │ │ 1432 │ path_npoints │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_npoints │ ∅ │ ∅ │ ∅ │ │ 1433 │ pclose │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 602 │ 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_close │ ∅ │ ∅ │ ∅ │ │ 1434 │ popen │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 602 │ 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_open │ ∅ │ ∅ │ ∅ │ │ 1435 │ path_add │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 602 │ 602 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_add │ ∅ │ ∅ │ ∅ │ │ 1436 │ path_add_pt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 602 │ 602 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_add_pt │ ∅ │ ∅ │ ∅ │ │ 1437 │ path_sub_pt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 602 │ 602 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_sub_pt │ ∅ │ ∅ │ ∅ │ │ 1438 │ path_mul_pt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 602 │ 602 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_mul_pt │ ∅ │ ∅ │ ∅ │ │ 1439 │ path_div_pt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 602 │ 602 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_div_pt │ ∅ │ ∅ │ ∅ │ │ 1440 │ point │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 600 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ construct_point │ ∅ │ ∅ │ ∅ │ │ 1441 │ point_add │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 600 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_add │ ∅ │ ∅ │ ∅ │ │ 1442 │ point_sub │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 600 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_sub │ ∅ │ ∅ │ ∅ │ │ 1443 │ point_mul │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 600 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_mul │ ∅ │ ∅ │ ∅ │ │ 1444 │ point_div │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 600 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_div │ ∅ │ ∅ │ ∅ │ │ 1445 │ poly_npoints │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_npoints │ ∅ │ ∅ │ ∅ │ │ 1446 │ box │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 603 │ 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_box │ ∅ │ ∅ │ ∅ │ │ 1447 │ path │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 602 │ 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_path │ ∅ │ ∅ │ ∅ │ │ 1448 │ polygon │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 604 │ 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_poly │ ∅ │ ∅ │ ∅ │ │ 1449 │ polygon │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 604 │ 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_poly │ ∅ │ ∅ │ ∅ │ │ 1450 │ circle_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 718 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_in │ ∅ │ ∅ │ ∅ │ │ 1451 │ circle_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_out │ ∅ │ ∅ │ ∅ │ │ 1452 │ circle_same │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_same │ ∅ │ ∅ │ ∅ │ │ 1453 │ circle_contain │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_contain │ ∅ │ ∅ │ ∅ │ │ 1454 │ circle_left │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_left │ ∅ │ ∅ │ ∅ │ │ 1455 │ circle_overleft │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_overleft │ ∅ │ ∅ │ ∅ │ │ 1456 │ circle_overright │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_overright │ ∅ │ ∅ │ ∅ │ │ 1457 │ circle_right │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_right │ ∅ │ ∅ │ ∅ │ │ 1530 │ length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_length │ ∅ │ ∅ │ ∅ │ │ 1458 │ circle_contained │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_contained │ ∅ │ ∅ │ ∅ │ │ 1459 │ circle_overlap │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_overlap │ ∅ │ ∅ │ ∅ │ │ 1460 │ circle_below │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_below │ ∅ │ ∅ │ ∅ │ │ 1461 │ circle_above │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_above │ ∅ │ ∅ │ ∅ │ │ 1462 │ circle_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_eq │ ∅ │ ∅ │ ∅ │ │ 1463 │ circle_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_ne │ ∅ │ ∅ │ ∅ │ │ 1464 │ circle_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_lt │ ∅ │ ∅ │ ∅ │ │ 1465 │ circle_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_gt │ ∅ │ ∅ │ ∅ │ │ 1466 │ circle_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_le │ ∅ │ ∅ │ ∅ │ │ 1467 │ circle_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_ge │ ∅ │ ∅ │ ∅ │ │ 1468 │ area │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_area │ ∅ │ ∅ │ ∅ │ │ 1469 │ diameter │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_diameter │ ∅ │ ∅ │ ∅ │ │ 1470 │ radius │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_radius │ ∅ │ ∅ │ ∅ │ │ 1471 │ circle_distance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_distance │ ∅ │ ∅ │ ∅ │ │ 1472 │ circle_center │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 600 │ 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_center │ ∅ │ ∅ │ ∅ │ │ 1473 │ circle │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 718 │ 600 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cr_circle │ ∅ │ ∅ │ ∅ │ │ 1474 │ circle │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 718 │ 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_circle │ ∅ │ ∅ │ ∅ │ │ 1475 │ polygon │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 604 │ 23 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_poly │ ∅ │ ∅ │ ∅ │ │ 1476 │ dist_pc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 600 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dist_pc │ ∅ │ ∅ │ ∅ │ │ 1477 │ circle_contain_pt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_contain_pt │ ∅ │ ∅ │ ∅ │ │ 1478 │ pt_contained_circle │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 600 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pt_contained_circle │ ∅ │ ∅ │ ∅ │ │ 4091 │ box │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 603 │ 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_box │ ∅ │ ∅ │ ∅ │ │ 1479 │ circle │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 718 │ 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_circle │ ∅ │ ∅ │ ∅ │ │ 1480 │ box │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 603 │ 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_box │ ∅ │ ∅ │ ∅ │ │ 1482 │ lseg_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 601 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_ne │ ∅ │ ∅ │ ∅ │ │ 1483 │ lseg_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 601 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_lt │ ∅ │ ∅ │ ∅ │ │ 1484 │ lseg_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 601 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_le │ ∅ │ ∅ │ ∅ │ │ 1485 │ lseg_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 601 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_gt │ ∅ │ ∅ │ ∅ │ │ 1486 │ lseg_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 601 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_ge │ ∅ │ ∅ │ ∅ │ │ 1487 │ lseg_length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_length │ ∅ │ ∅ │ ∅ │ │ 1488 │ close_ls │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 600 │ 628 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ close_ls │ ∅ │ ∅ │ ∅ │ │ 1489 │ close_lseg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 600 │ 601 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ close_lseg │ ∅ │ ∅ │ ∅ │ │ 1490 │ line_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 628 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ line_in │ ∅ │ ∅ │ ∅ │ │ 1491 │ line_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ line_out │ ∅ │ ∅ │ ∅ │ │ 1492 │ line_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 628 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ line_eq │ ∅ │ ∅ │ ∅ │ │ 1493 │ line │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 628 │ 600 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ line_construct_pp │ ∅ │ ∅ │ ∅ │ │ 1494 │ line_interpt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 600 │ 628 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ line_interpt │ ∅ │ ∅ │ ∅ │ │ 1495 │ line_intersect │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 628 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ line_intersect │ ∅ │ ∅ │ ∅ │ │ 1496 │ line_parallel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 628 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ line_parallel │ ∅ │ ∅ │ ∅ │ │ 1497 │ line_perp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 628 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ line_perp │ ∅ │ ∅ │ ∅ │ │ 1498 │ line_vertical │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ line_vertical │ ∅ │ ∅ │ ∅ │ │ 1499 │ line_horizontal │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ line_horizontal │ ∅ │ ∅ │ ∅ │ │ 1531 │ length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_length │ ∅ │ ∅ │ ∅ │ │ 1532 │ point │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 600 │ 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_center │ ∅ │ ∅ │ ∅ │ │ 1533 │ point │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 600 │ 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_center │ ∅ │ ∅ │ ∅ │ │ 1534 │ point │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 600 │ 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_center │ ∅ │ ∅ │ ∅ │ │ 1540 │ point │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 600 │ 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_center │ ∅ │ ∅ │ ∅ │ │ 1541 │ lseg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 601 │ 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_diagonal │ ∅ │ ∅ │ ∅ │ │ 1542 │ center │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 600 │ 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_center │ ∅ │ ∅ │ ∅ │ │ 1543 │ center │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 600 │ 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_center │ ∅ │ ∅ │ ∅ │ │ 1544 │ polygon │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 604 │ 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.polygon(12, $1) │ ∅ │ ∅ │ ∅ │ │ 1545 │ npoints │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_npoints │ ∅ │ ∅ │ ∅ │ │ 1556 │ npoints │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_npoints │ ∅ │ ∅ │ ∅ │ │ 1564 │ bit_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1560 │ 2275 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bit_in │ ∅ │ ∅ │ ∅ │ │ 1565 │ bit_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bit_out │ ∅ │ ∅ │ ∅ │ │ 2919 │ bittypmodin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1263 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bittypmodin │ ∅ │ ∅ │ ∅ │ │ 2920 │ bittypmodout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bittypmodout │ ∅ │ ∅ │ ∅ │ │ 1569 │ like │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ textlike_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textlike │ ∅ │ ∅ │ ∅ │ │ 1570 │ notlike │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textnlike │ ∅ │ ∅ │ ∅ │ │ 1571 │ like │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ textlike_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ namelike │ ∅ │ ∅ │ ∅ │ │ 1572 │ notlike │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ namenlike │ ∅ │ ∅ │ ∅ │ │ 1574 │ nextval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 20 │ 2205 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ nextval_oid │ ∅ │ ∅ │ ∅ │ │ 1575 │ currval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 20 │ 2205 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ currval_oid │ ∅ │ ∅ │ ∅ │ │ 1576 │ setval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 20 │ 2205 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ setval_oid │ ∅ │ ∅ │ ∅ │ │ 1765 │ setval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 3 │ 0 │ 20 │ 2205 20 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ setval3_oid │ ∅ │ ∅ │ ∅ │ │ 3078 │ pg_sequence_parameters │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2249 │ 26 │ {26,20,20,20,20,16,20,26} │ {i,o,o,o,o,o,o,o} │ {sequence_oid,start_value,minimum_value,maximum_value,increment,cycle_option,cache_size,data_type} │ ∅ │ ∅ │ pg_sequence_parameters │ ∅ │ ∅ │ ∅ │ │ 4032 │ pg_sequence_last_value │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 20 │ 2205 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_sequence_last_value │ ∅ │ ∅ │ ∅ │ │ 275 │ pg_nextoid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 3 │ 0 │ 26 │ 2205 19 2205 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_nextoid │ ∅ │ ∅ │ ∅ │ │ 1579 │ varbit_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1562 │ 2275 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ varbit_in │ ∅ │ ∅ │ ∅ │ │ 1580 │ varbit_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 1562 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ varbit_out │ ∅ │ ∅ │ ∅ │ │ 2902 │ varbittypmodin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1263 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ varbittypmodin │ ∅ │ ∅ │ ∅ │ │ 2921 │ varbittypmodout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ varbittypmodout │ ∅ │ ∅ │ ∅ │ │ 1581 │ biteq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1560 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ biteq │ ∅ │ ∅ │ ∅ │ │ 1582 │ bitne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1560 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitne │ ∅ │ ∅ │ ∅ │ │ 1592 │ bitge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1560 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitge │ ∅ │ ∅ │ ∅ │ │ 1593 │ bitgt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1560 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitgt │ ∅ │ ∅ │ ∅ │ │ 1594 │ bitle │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1560 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitle │ ∅ │ ∅ │ ∅ │ │ 1595 │ bitlt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1560 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitlt │ ∅ │ ∅ │ ∅ │ │ 1596 │ bitcmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 1560 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitcmp │ ∅ │ ∅ │ ∅ │ │ 1598 │ random │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 0 │ 0 │ 701 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ drandom │ ∅ │ ∅ │ ∅ │ │ 1599 │ setseed │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 2278 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ setseed │ ∅ │ ∅ │ ∅ │ │ 1600 │ asin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dasin │ ∅ │ ∅ │ ∅ │ │ 1601 │ acos │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dacos │ ∅ │ ∅ │ ∅ │ │ 1602 │ atan │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ datan │ ∅ │ ∅ │ ∅ │ │ 1603 │ atan2 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ datan2 │ ∅ │ ∅ │ ∅ │ │ 1604 │ sin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dsin │ ∅ │ ∅ │ ∅ │ │ 1605 │ cos │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dcos │ ∅ │ ∅ │ ∅ │ │ 1606 │ tan │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dtan │ ∅ │ ∅ │ ∅ │ │ 1607 │ cot │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dcot │ ∅ │ ∅ │ ∅ │ │ 2731 │ asind │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dasind │ ∅ │ ∅ │ ∅ │ │ 2732 │ acosd │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dacosd │ ∅ │ ∅ │ ∅ │ │ 2733 │ atand │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ datand │ ∅ │ ∅ │ ∅ │ │ 2734 │ atan2d │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ datan2d │ ∅ │ ∅ │ ∅ │ │ 2735 │ sind │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dsind │ ∅ │ ∅ │ ∅ │ │ 2736 │ cosd │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dcosd │ ∅ │ ∅ │ ∅ │ │ 2737 │ tand │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dtand │ ∅ │ ∅ │ ∅ │ │ 2738 │ cotd │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dcotd │ ∅ │ ∅ │ ∅ │ │ 1608 │ degrees │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ degrees │ ∅ │ ∅ │ ∅ │ │ 1609 │ radians │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ radians │ ∅ │ ∅ │ ∅ │ │ 1610 │ pi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 0 │ 0 │ 701 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dpi │ ∅ │ ∅ │ ∅ │ │ 2462 │ sinh │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dsinh │ ∅ │ ∅ │ ∅ │ │ 2463 │ cosh │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dcosh │ ∅ │ ∅ │ ∅ │ │ 2464 │ tanh │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dtanh │ ∅ │ ∅ │ ∅ │ │ 2465 │ asinh │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dasinh │ ∅ │ ∅ │ ∅ │ │ 2466 │ acosh │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dacosh │ ∅ │ ∅ │ ∅ │ │ 2467 │ atanh │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ datanh │ ∅ │ ∅ │ ∅ │ │ 1618 │ interval_mul │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1186 │ 1186 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_mul │ ∅ │ ∅ │ ∅ │ │ 1620 │ ascii │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ascii │ ∅ │ ∅ │ ∅ │ │ 1621 │ chr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ chr │ ∅ │ ∅ │ ∅ │ │ 1622 │ repeat │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 25 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ repeat │ ∅ │ ∅ │ ∅ │ │ 1623 │ similar_escape │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 25 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ similar_escape │ ∅ │ ∅ │ ∅ │ │ 1986 │ similar_to_escape │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ similar_to_escape_2 │ ∅ │ ∅ │ ∅ │ │ 1987 │ similar_to_escape │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ similar_to_escape_1 │ ∅ │ ∅ │ ∅ │ │ 1624 │ mul_d_interval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1186 │ 701 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ mul_d_interval │ ∅ │ ∅ │ ∅ │ │ 1631 │ bpcharlike │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ textlike_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1042 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textlike │ ∅ │ ∅ │ ∅ │ │ 1632 │ bpcharnlike │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1042 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textnlike │ ∅ │ ∅ │ ∅ │ │ 1633 │ texticlike │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ texticlike_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ texticlike │ ∅ │ ∅ │ ∅ │ │ 1025 │ texticlike_support │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ texticlike_support │ ∅ │ ∅ │ ∅ │ │ 1634 │ texticnlike │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ texticnlike │ ∅ │ ∅ │ ∅ │ │ 1635 │ nameiclike │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ texticlike_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ nameiclike │ ∅ │ ∅ │ ∅ │ │ 1636 │ nameicnlike │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ nameicnlike │ ∅ │ ∅ │ ∅ │ │ 1637 │ like_escape │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ like_escape │ ∅ │ ∅ │ ∅ │ │ 1656 │ bpcharicregexeq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ texticregexeq_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1042 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ texticregexeq │ ∅ │ ∅ │ ∅ │ │ 1657 │ bpcharicregexne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1042 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ texticregexne │ ∅ │ ∅ │ ∅ │ │ 1658 │ bpcharregexeq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ textregexeq_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1042 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textregexeq │ ∅ │ ∅ │ ∅ │ │ 1659 │ bpcharregexne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1042 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textregexne │ ∅ │ ∅ │ ∅ │ │ 1660 │ bpchariclike │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ texticlike_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1042 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ texticlike │ ∅ │ ∅ │ ∅ │ │ 1661 │ bpcharicnlike │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1042 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ texticnlike │ ∅ │ ∅ │ ∅ │ │ 868 │ strpos │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textpos │ ∅ │ ∅ │ ∅ │ │ 870 │ lower │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lower │ ∅ │ ∅ │ ∅ │ │ 871 │ upper │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ upper │ ∅ │ ∅ │ ∅ │ │ 872 │ initcap │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ initcap │ ∅ │ ∅ │ ∅ │ │ 873 │ lpad │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 25 │ 25 23 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lpad │ ∅ │ ∅ │ ∅ │ │ 874 │ rpad │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 25 │ 25 23 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ rpad │ ∅ │ ∅ │ ∅ │ │ 875 │ ltrim │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ltrim │ ∅ │ ∅ │ ∅ │ │ 876 │ rtrim │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ rtrim │ ∅ │ ∅ │ ∅ │ │ 877 │ substr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 25 │ 25 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_substr │ ∅ │ ∅ │ ∅ │ │ 878 │ translate │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 25 │ 25 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ translate │ ∅ │ ∅ │ ∅ │ │ 879 │ lpad │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 25 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.lpad($1, $2, ' ') │ ∅ │ ∅ │ ∅ │ │ 880 │ rpad │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 25 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.rpad($1, $2, ' ') │ ∅ │ ∅ │ ∅ │ │ 881 │ ltrim │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ltrim1 │ ∅ │ ∅ │ ∅ │ │ 882 │ rtrim │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ rtrim1 │ ∅ │ ∅ │ ∅ │ │ 883 │ substr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 25 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_substr_no_len │ ∅ │ ∅ │ ∅ │ │ 884 │ btrim │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btrim │ ∅ │ ∅ │ ∅ │ │ 885 │ btrim │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btrim1 │ ∅ │ ∅ │ ∅ │ │ 936 │ substring │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 25 │ 25 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_substr │ ∅ │ ∅ │ ∅ │ │ 937 │ substring │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 25 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_substr_no_len │ ∅ │ ∅ │ ∅ │ │ 2087 │ replace │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 25 │ 25 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ replace_text │ ∅ │ ∅ │ ∅ │ │ 2284 │ regexp_replace │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 25 │ 25 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textregexreplace_noopt │ ∅ │ ∅ │ ∅ │ │ 2285 │ regexp_replace │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 25 │ 25 25 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textregexreplace │ ∅ │ ∅ │ ∅ │ │ 3396 │ regexp_match │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1009 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regexp_match_no_flags │ ∅ │ ∅ │ ∅ │ │ 3397 │ regexp_match │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1009 │ 25 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regexp_match │ ∅ │ ∅ │ ∅ │ │ 2763 │ regexp_matches │ 11 │ 10 │ 12 │ 1 │ 1 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 2 │ 0 │ 1009 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regexp_matches_no_flags │ ∅ │ ∅ │ ∅ │ │ 2764 │ regexp_matches │ 11 │ 10 │ 12 │ 1 │ 10 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 3 │ 0 │ 1009 │ 25 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regexp_matches │ ∅ │ ∅ │ ∅ │ │ 2088 │ split_part │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 25 │ 25 25 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ split_text │ ∅ │ ∅ │ ∅ │ │ 2765 │ regexp_split_to_table │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 2 │ 0 │ 25 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regexp_split_to_table_no_flags │ ∅ │ ∅ │ ∅ │ │ 2766 │ regexp_split_to_table │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 3 │ 0 │ 25 │ 25 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regexp_split_to_table │ ∅ │ ∅ │ ∅ │ │ 2767 │ regexp_split_to_array │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1009 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regexp_split_to_array_no_flags │ ∅ │ ∅ │ ∅ │ │ 2768 │ regexp_split_to_array │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1009 │ 25 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regexp_split_to_array │ ∅ │ ∅ │ ∅ │ │ 2089 │ to_hex │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_hex32 │ ∅ │ ∅ │ ∅ │ │ 2090 │ to_hex │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_hex64 │ ∅ │ ∅ │ ∅ │ │ 1039 │ getdatabaseencoding │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 0 │ 0 │ 19 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ getdatabaseencoding │ ∅ │ ∅ │ ∅ │ │ 810 │ pg_client_encoding │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 0 │ 0 │ 19 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_client_encoding │ ∅ │ ∅ │ ∅ │ │ 1713 │ length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 23 │ 17 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ length_in_encoding │ ∅ │ ∅ │ ∅ │ │ 1714 │ convert_from │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 17 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_convert_from │ ∅ │ ∅ │ ∅ │ │ 1717 │ convert_to │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 17 │ 25 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_convert_to │ ∅ │ ∅ │ ∅ │ │ 1813 │ convert │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 17 │ 17 19 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_convert │ ∅ │ ∅ │ ∅ │ │ 1264 │ pg_char_to_encoding │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 23 │ 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ PG_char_to_encoding │ ∅ │ ∅ │ ∅ │ │ 1597 │ pg_encoding_to_char │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 19 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ PG_encoding_to_char │ ∅ │ ∅ │ ∅ │ │ 2319 │ pg_encoding_max_length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_encoding_max_length_sql │ ∅ │ ∅ │ ∅ │ │ 1638 │ oidgt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 26 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidgt │ ∅ │ ∅ │ ∅ │ │ 1639 │ oidge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 26 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidge │ ∅ │ ∅ │ ∅ │ │ 1573 │ pg_get_ruledef │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 25 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_ruledef │ ∅ │ ∅ │ ∅ │ │ 1640 │ pg_get_viewdef │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_viewdef_name │ ∅ │ ∅ │ ∅ │ │ 1641 │ pg_get_viewdef │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 25 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_viewdef │ ∅ │ ∅ │ ∅ │ │ 1642 │ pg_get_userbyid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 19 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_userbyid │ ∅ │ ∅ │ ∅ │ │ 1643 │ pg_get_indexdef │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 25 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_indexdef │ ∅ │ ∅ │ ∅ │ │ 3415 │ pg_get_statisticsobjdef │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 25 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_statisticsobjdef │ ∅ │ ∅ │ ∅ │ │ 3352 │ pg_get_partkeydef │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 25 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_partkeydef │ ∅ │ ∅ │ ∅ │ │ 3408 │ pg_get_partition_constraintdef │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 25 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_partition_constraintdef │ ∅ │ ∅ │ ∅ │ │ 1662 │ pg_get_triggerdef │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 25 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_triggerdef │ ∅ │ ∅ │ ∅ │ │ 1387 │ pg_get_constraintdef │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 25 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_constraintdef │ ∅ │ ∅ │ ∅ │ │ 1716 │ pg_get_expr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 194 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_expr │ ∅ │ ∅ │ ∅ │ │ 1665 │ pg_get_serial_sequence │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_serial_sequence │ ∅ │ ∅ │ ∅ │ │ 2098 │ pg_get_functiondef │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 25 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_functiondef │ ∅ │ ∅ │ ∅ │ │ 2162 │ pg_get_function_arguments │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 25 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_function_arguments │ ∅ │ ∅ │ ∅ │ │ 2232 │ pg_get_function_identity_arguments │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 25 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_function_identity_arguments │ ∅ │ ∅ │ ∅ │ │ 2165 │ pg_get_function_result │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 25 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_function_result │ ∅ │ ∅ │ ∅ │ │ 3808 │ pg_get_function_arg_default │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_function_arg_default │ ∅ │ ∅ │ ∅ │ │ 1686 │ pg_get_keywords │ 11 │ 10 │ 12 │ 10 │ 400 │ 0 │ - │ f │ f │ f │ t │ t │ s │ s │ 0 │ 0 │ 2249 │ │ {25,18,25} │ {o,o,o} │ {word,catcode,catdesc} │ ∅ │ ∅ │ pg_get_keywords │ ∅ │ ∅ │ ∅ │ │ 2289 │ pg_options_to_table │ 11 │ 10 │ 12 │ 1 │ 3 │ 0 │ - │ f │ f │ f │ t │ t │ s │ s │ 1 │ 0 │ 2249 │ 1009 │ {1009,25,25} │ {i,o,o} │ {options_array,option_name,option_value} │ ∅ │ ∅ │ pg_options_to_table │ ∅ │ ∅ │ ∅ │ │ 1619 │ pg_typeof │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 1 │ 0 │ 2206 │ 2276 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_typeof │ ∅ │ ∅ │ ∅ │ │ 3162 │ pg_collation_for │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 1 │ 0 │ 25 │ 2276 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_collation_for │ ∅ │ ∅ │ ∅ │ │ 3842 │ pg_relation_is_updatable │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 23 │ 2205 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_relation_is_updatable │ ∅ │ ∅ │ ∅ │ │ 3843 │ pg_column_is_updatable │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 2205 21 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_column_is_updatable │ ∅ │ ∅ │ ∅ │ │ 6120 │ pg_get_replica_identity_index │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2205 │ 2205 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_replica_identity_index │ ∅ │ ∅ │ ∅ │ │ 1250 │ unique_key_recheck │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2279 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ unique_key_recheck │ ∅ │ ∅ │ ∅ │ │ 1644 │ RI_FKey_check_ins │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2279 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ RI_FKey_check_ins │ ∅ │ ∅ │ ∅ │ │ 1645 │ RI_FKey_check_upd │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2279 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ RI_FKey_check_upd │ ∅ │ ∅ │ ∅ │ │ 1646 │ RI_FKey_cascade_del │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2279 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ RI_FKey_cascade_del │ ∅ │ ∅ │ ∅ │ │ 1647 │ RI_FKey_cascade_upd │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2279 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ RI_FKey_cascade_upd │ ∅ │ ∅ │ ∅ │ │ 1648 │ RI_FKey_restrict_del │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2279 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ RI_FKey_restrict_del │ ∅ │ ∅ │ ∅ │ │ 1649 │ RI_FKey_restrict_upd │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2279 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ RI_FKey_restrict_upd │ ∅ │ ∅ │ ∅ │ │ 1650 │ RI_FKey_setnull_del │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2279 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ RI_FKey_setnull_del │ ∅ │ ∅ │ ∅ │ │ 1651 │ RI_FKey_setnull_upd │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2279 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ RI_FKey_setnull_upd │ ∅ │ ∅ │ ∅ │ │ 1652 │ RI_FKey_setdefault_del │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2279 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ RI_FKey_setdefault_del │ ∅ │ ∅ │ ∅ │ │ 1653 │ RI_FKey_setdefault_upd │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2279 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ RI_FKey_setdefault_upd │ ∅ │ ∅ │ ∅ │ │ 1654 │ RI_FKey_noaction_del │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2279 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ RI_FKey_noaction_del │ ∅ │ ∅ │ ∅ │ │ 1655 │ RI_FKey_noaction_upd │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2279 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ RI_FKey_noaction_upd │ ∅ │ ∅ │ ∅ │ │ 1666 │ varbiteq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1562 1562 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ biteq │ ∅ │ ∅ │ ∅ │ │ 1667 │ varbitne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1562 1562 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitne │ ∅ │ ∅ │ ∅ │ │ 1668 │ varbitge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1562 1562 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitge │ ∅ │ ∅ │ ∅ │ │ 1669 │ varbitgt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1562 1562 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitgt │ ∅ │ ∅ │ ∅ │ │ 1670 │ varbitle │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1562 1562 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitle │ ∅ │ ∅ │ ∅ │ │ 1671 │ varbitlt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1562 1562 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitlt │ ∅ │ ∅ │ ∅ │ │ 1672 │ varbitcmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 1562 1562 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitcmp │ ∅ │ ∅ │ ∅ │ │ 1673 │ bitand │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1560 │ 1560 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bit_and │ ∅ │ ∅ │ ∅ │ │ 1674 │ bitor │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1560 │ 1560 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bit_or │ ∅ │ ∅ │ ∅ │ │ 1675 │ bitxor │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1560 │ 1560 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitxor │ ∅ │ ∅ │ ∅ │ │ 1676 │ bitnot │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1560 │ 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitnot │ ∅ │ ∅ │ ∅ │ │ 1677 │ bitshiftleft │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1560 │ 1560 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitshiftleft │ ∅ │ ∅ │ ∅ │ │ 1678 │ bitshiftright │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1560 │ 1560 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitshiftright │ ∅ │ ∅ │ ∅ │ │ 1679 │ bitcat │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1562 │ 1562 1562 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitcat │ ∅ │ ∅ │ ∅ │ │ 1680 │ substring │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1560 │ 1560 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitsubstr │ ∅ │ ∅ │ ∅ │ │ 1681 │ length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitlength │ ∅ │ ∅ │ ∅ │ │ 1682 │ octet_length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitoctetlength │ ∅ │ ∅ │ ∅ │ │ 1683 │ bit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1560 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitfromint4 │ ∅ │ ∅ │ ∅ │ │ 1684 │ int4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bittoint4 │ ∅ │ ∅ │ ∅ │ │ 1685 │ bit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1560 │ 1560 23 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bit │ ∅ │ ∅ │ ∅ │ │ 3158 │ varbit_support │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ varbit_support │ ∅ │ ∅ │ ∅ │ │ 1687 │ varbit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ varbit_support │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1562 │ 1562 23 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ varbit │ ∅ │ ∅ │ ∅ │ │ 1698 │ position │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 1560 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitposition │ ∅ │ ∅ │ ∅ │ │ 1699 │ substring │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1560 │ 1560 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitsubstr_no_len │ ∅ │ ∅ │ ∅ │ │ 3030 │ overlay │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 1560 │ 1560 1560 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitoverlay │ ∅ │ ∅ │ ∅ │ │ 3031 │ overlay │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1560 │ 1560 1560 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitoverlay_no_len │ ∅ │ ∅ │ ∅ │ │ 3032 │ get_bit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 1560 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitgetbit │ ∅ │ ∅ │ ∅ │ │ 3033 │ set_bit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1560 │ 1560 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitsetbit │ ∅ │ ∅ │ ∅ │ │ 436 │ macaddr_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 829 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr_in │ ∅ │ ∅ │ ∅ │ │ 437 │ macaddr_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 829 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr_out │ ∅ │ ∅ │ ∅ │ │ 753 │ trunc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 829 │ 829 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr_trunc │ ∅ │ ∅ │ ∅ │ │ 830 │ macaddr_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 829 829 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr_eq │ ∅ │ ∅ │ ∅ │ │ 831 │ macaddr_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 829 829 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr_lt │ ∅ │ ∅ │ ∅ │ │ 832 │ macaddr_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 829 829 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr_le │ ∅ │ ∅ │ ∅ │ │ 833 │ macaddr_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 829 829 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr_gt │ ∅ │ ∅ │ ∅ │ │ 834 │ macaddr_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 829 829 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr_ge │ ∅ │ ∅ │ ∅ │ │ 835 │ macaddr_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 829 829 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr_ne │ ∅ │ ∅ │ ∅ │ │ 836 │ macaddr_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 829 829 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr_cmp │ ∅ │ ∅ │ ∅ │ │ 3144 │ macaddr_not │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 829 │ 829 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr_not │ ∅ │ ∅ │ ∅ │ │ 3145 │ macaddr_and │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 829 │ 829 829 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr_and │ ∅ │ ∅ │ ∅ │ │ 3146 │ macaddr_or │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 829 │ 829 829 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr_or │ ∅ │ ∅ │ ∅ │ │ 3359 │ macaddr_sortsupport │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr_sortsupport │ ∅ │ ∅ │ ∅ │ │ 4110 │ macaddr8_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 774 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr8_in │ ∅ │ ∅ │ ∅ │ │ 4111 │ macaddr8_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 774 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr8_out │ ∅ │ ∅ │ ∅ │ │ 4112 │ trunc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 774 │ 774 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr8_trunc │ ∅ │ ∅ │ ∅ │ │ 4113 │ macaddr8_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 774 774 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr8_eq │ ∅ │ ∅ │ ∅ │ │ 4114 │ macaddr8_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 774 774 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr8_lt │ ∅ │ ∅ │ ∅ │ │ 4115 │ macaddr8_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 774 774 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr8_le │ ∅ │ ∅ │ ∅ │ │ 4116 │ macaddr8_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 774 774 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr8_gt │ ∅ │ ∅ │ ∅ │ │ 4117 │ macaddr8_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 774 774 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr8_ge │ ∅ │ ∅ │ ∅ │ │ 4118 │ macaddr8_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 774 774 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr8_ne │ ∅ │ ∅ │ ∅ │ │ 4119 │ macaddr8_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 774 774 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr8_cmp │ ∅ │ ∅ │ ∅ │ │ 4120 │ macaddr8_not │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 774 │ 774 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr8_not │ ∅ │ ∅ │ ∅ │ │ 4121 │ macaddr8_and │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 774 │ 774 774 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr8_and │ ∅ │ ∅ │ ∅ │ │ 4122 │ macaddr8_or │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 774 │ 774 774 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr8_or │ ∅ │ ∅ │ ∅ │ │ 4123 │ macaddr8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 774 │ 829 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddrtomacaddr8 │ ∅ │ ∅ │ ∅ │ │ 4124 │ macaddr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 829 │ 774 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr8tomacaddr │ ∅ │ ∅ │ ∅ │ │ 4125 │ macaddr8_set7bit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 774 │ 774 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr8_set7bit │ ∅ │ ∅ │ ∅ │ │ 910 │ inet_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 869 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_in │ ∅ │ ∅ │ ∅ │ │ 911 │ inet_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_out │ ∅ │ ∅ │ ∅ │ │ 1267 │ cidr_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 650 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cidr_in │ ∅ │ ∅ │ ∅ │ │ 1427 │ cidr_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 650 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cidr_out │ ∅ │ ∅ │ ∅ │ │ 920 │ network_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_eq │ ∅ │ ∅ │ ∅ │ │ 921 │ network_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_lt │ ∅ │ ∅ │ ∅ │ │ 922 │ network_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_le │ ∅ │ ∅ │ ∅ │ │ 923 │ network_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_gt │ ∅ │ ∅ │ ∅ │ │ 924 │ network_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_ge │ ∅ │ ∅ │ ∅ │ │ 925 │ network_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_ne │ ∅ │ ∅ │ ∅ │ │ 3562 │ network_larger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 869 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_larger │ ∅ │ ∅ │ ∅ │ │ 3563 │ network_smaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 869 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_smaller │ ∅ │ ∅ │ ∅ │ │ 926 │ network_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_cmp │ ∅ │ ∅ │ ∅ │ │ 927 │ network_sub │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ network_subset_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_sub │ ∅ │ ∅ │ ∅ │ │ 928 │ network_subeq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ network_subset_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_subeq │ ∅ │ ∅ │ ∅ │ │ 929 │ network_sup │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ network_subset_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_sup │ ∅ │ ∅ │ ∅ │ │ 930 │ network_supeq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ network_subset_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_supeq │ ∅ │ ∅ │ ∅ │ │ 1173 │ network_subset_support │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_subset_support │ ∅ │ ∅ │ ∅ │ │ 3551 │ network_overlap │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_overlap │ ∅ │ ∅ │ ∅ │ │ 5033 │ network_sortsupport │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_sortsupport │ ∅ │ ∅ │ ∅ │ │ 598 │ abbrev │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_abbrev │ ∅ │ ∅ │ ∅ │ │ 599 │ abbrev │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 650 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cidr_abbrev │ ∅ │ ∅ │ ∅ │ │ 605 │ set_masklen │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 869 │ 869 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_set_masklen │ ∅ │ ∅ │ ∅ │ │ 635 │ set_masklen │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 650 │ 650 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cidr_set_masklen │ ∅ │ ∅ │ ∅ │ │ 711 │ family │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_family │ ∅ │ ∅ │ ∅ │ │ 683 │ network │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 650 │ 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_network │ ∅ │ ∅ │ ∅ │ │ 696 │ netmask │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 869 │ 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_netmask │ ∅ │ ∅ │ ∅ │ │ 697 │ masklen │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_masklen │ ∅ │ ∅ │ ∅ │ │ 698 │ broadcast │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 869 │ 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_broadcast │ ∅ │ ∅ │ ∅ │ │ 699 │ host │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_host │ ∅ │ ∅ │ ∅ │ │ 730 │ text │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_show │ ∅ │ ∅ │ ∅ │ │ 1362 │ hostmask │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 869 │ 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ network_hostmask │ ∅ │ ∅ │ ∅ │ │ 1715 │ cidr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 650 │ 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_to_cidr │ ∅ │ ∅ │ ∅ │ │ 2196 │ inet_client_addr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ r │ 0 │ 0 │ 869 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_client_addr │ ∅ │ ∅ │ ∅ │ │ 2197 │ inet_client_port │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ r │ 0 │ 0 │ 23 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_client_port │ ∅ │ ∅ │ ∅ │ │ 2198 │ inet_server_addr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 0 │ 0 │ 869 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_server_addr │ ∅ │ ∅ │ ∅ │ │ 2199 │ inet_server_port │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 0 │ 0 │ 23 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_server_port │ ∅ │ ∅ │ ∅ │ │ 2627 │ inetnot │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 869 │ 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inetnot │ ∅ │ ∅ │ ∅ │ │ 2628 │ inetand │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 869 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inetand │ ∅ │ ∅ │ ∅ │ │ 2629 │ inetor │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 869 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inetor │ ∅ │ ∅ │ ∅ │ │ 2630 │ inetpl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 869 │ 869 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inetpl │ ∅ │ ∅ │ ∅ │ │ 2631 │ int8pl_inet │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 869 │ 20 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select $2 + $1 │ ∅ │ ∅ │ ∅ │ │ 2632 │ inetmi_int8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 869 │ 869 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inetmi_int8 │ ∅ │ ∅ │ ∅ │ │ 2633 │ inetmi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inetmi │ ∅ │ ∅ │ ∅ │ │ 4071 │ inet_same_family │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_same_family │ ∅ │ ∅ │ ∅ │ │ 4063 │ inet_merge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 650 │ 869 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_merge │ ∅ │ ∅ │ ∅ │ │ 3553 │ inet_gist_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 2281 869 21 26 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_gist_consistent │ ∅ │ ∅ │ ∅ │ │ 3554 │ inet_gist_union │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 869 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_gist_union │ ∅ │ ∅ │ ∅ │ │ 3555 │ inet_gist_compress │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_gist_compress │ ∅ │ ∅ │ ∅ │ │ 3573 │ inet_gist_fetch │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_gist_fetch │ ∅ │ ∅ │ ∅ │ │ 3557 │ inet_gist_penalty │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 2281 │ 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_gist_penalty │ ∅ │ ∅ │ ∅ │ │ 3558 │ inet_gist_picksplit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_gist_picksplit │ ∅ │ ∅ │ ∅ │ │ 3559 │ inet_gist_same │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 2281 │ 869 869 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_gist_same │ ∅ │ ∅ │ ∅ │ │ 3795 │ inet_spg_config │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_spg_config │ ∅ │ ∅ │ ∅ │ │ 3796 │ inet_spg_choose │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_spg_choose │ ∅ │ ∅ │ ∅ │ │ 3797 │ inet_spg_picksplit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_spg_picksplit │ ∅ │ ∅ │ ∅ │ │ 3798 │ inet_spg_inner_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_spg_inner_consistent │ ∅ │ ∅ │ ∅ │ │ 3799 │ inet_spg_leaf_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_spg_leaf_consistent │ ∅ │ ∅ │ ∅ │ │ 3560 │ networksel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ networksel │ ∅ │ ∅ │ ∅ │ │ 3561 │ networkjoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ networkjoinsel │ ∅ │ ∅ │ ∅ │ │ 1690 │ time_mi_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1186 │ 1083 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_mi_time │ ∅ │ ∅ │ ∅ │ │ 1691 │ boolle │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ boolle │ ∅ │ ∅ │ ∅ │ │ 1692 │ boolge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ boolge │ ∅ │ ∅ │ ∅ │ │ 1693 │ btboolcmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btboolcmp │ ∅ │ ∅ │ ∅ │ │ 1688 │ time_hash │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_hash │ ∅ │ ∅ │ ∅ │ │ 3409 │ time_hash_extended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 1083 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_hash_extended │ ∅ │ ∅ │ ∅ │ │ 1696 │ timetz_hash │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_hash │ ∅ │ ∅ │ ∅ │ │ 3410 │ timetz_hash_extended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 1266 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_hash_extended │ ∅ │ ∅ │ ∅ │ │ 1697 │ interval_hash │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_hash │ ∅ │ ∅ │ ∅ │ │ 3418 │ interval_hash_extended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 1186 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_hash_extended │ ∅ │ ∅ │ ∅ │ │ 1701 │ numeric_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1700 │ 2275 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_in │ ∅ │ ∅ │ ∅ │ │ 1702 │ numeric_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_out │ ∅ │ ∅ │ ∅ │ │ 2917 │ numerictypmodin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1263 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numerictypmodin │ ∅ │ ∅ │ ∅ │ │ 2918 │ numerictypmodout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numerictypmodout │ ∅ │ ∅ │ ∅ │ │ 3157 │ numeric_support │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_support │ ∅ │ ∅ │ ∅ │ │ 1703 │ numeric │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ numeric_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric │ ∅ │ ∅ │ ∅ │ │ 1704 │ numeric_abs │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_abs │ ∅ │ ∅ │ ∅ │ │ 1705 │ abs │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_abs │ ∅ │ ∅ │ ∅ │ │ 1706 │ sign │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_sign │ ∅ │ ∅ │ ∅ │ │ 1707 │ round │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_round │ ∅ │ ∅ │ ∅ │ │ 1708 │ round │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.round($1,0) │ ∅ │ ∅ │ ∅ │ │ 1709 │ trunc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_trunc │ ∅ │ ∅ │ ∅ │ │ 1710 │ trunc │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.trunc($1,0) │ ∅ │ ∅ │ ∅ │ │ 1711 │ ceil │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_ceil │ ∅ │ ∅ │ ∅ │ │ 2167 │ ceiling │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_ceil │ ∅ │ ∅ │ ∅ │ │ 1712 │ floor │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_floor │ ∅ │ ∅ │ ∅ │ │ 1718 │ numeric_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_eq │ ∅ │ ∅ │ ∅ │ │ 1719 │ numeric_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_ne │ ∅ │ ∅ │ ∅ │ │ 1720 │ numeric_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_gt │ ∅ │ ∅ │ ∅ │ │ 1721 │ numeric_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_ge │ ∅ │ ∅ │ ∅ │ │ 1722 │ numeric_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_lt │ ∅ │ ∅ │ ∅ │ │ 1723 │ numeric_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_le │ ∅ │ ∅ │ ∅ │ │ 1724 │ numeric_add │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_add │ ∅ │ ∅ │ ∅ │ │ 1725 │ numeric_sub │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_sub │ ∅ │ ∅ │ ∅ │ │ 1726 │ numeric_mul │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_mul │ ∅ │ ∅ │ ∅ │ │ 1727 │ numeric_div │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_div │ ∅ │ ∅ │ ∅ │ │ 1728 │ mod │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_mod │ ∅ │ ∅ │ ∅ │ │ 1729 │ numeric_mod │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_mod │ ∅ │ ∅ │ ∅ │ │ 5048 │ gcd │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_gcd │ ∅ │ ∅ │ ∅ │ │ 5049 │ lcm │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_lcm │ ∅ │ ∅ │ ∅ │ │ 1730 │ sqrt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_sqrt │ ∅ │ ∅ │ ∅ │ │ 1731 │ numeric_sqrt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_sqrt │ ∅ │ ∅ │ ∅ │ │ 1732 │ exp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_exp │ ∅ │ ∅ │ ∅ │ │ 1733 │ numeric_exp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_exp │ ∅ │ ∅ │ ∅ │ │ 1734 │ ln │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_ln │ ∅ │ ∅ │ ∅ │ │ 1735 │ numeric_ln │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_ln │ ∅ │ ∅ │ ∅ │ │ 1736 │ log │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_log │ ∅ │ ∅ │ ∅ │ │ 1737 │ numeric_log │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_log │ ∅ │ ∅ │ ∅ │ │ 1738 │ pow │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_power │ ∅ │ ∅ │ ∅ │ │ 2169 │ power │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_power │ ∅ │ ∅ │ ∅ │ │ 1739 │ numeric_power │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_power │ ∅ │ ∅ │ ∅ │ │ 3281 │ scale │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_scale │ ∅ │ ∅ │ ∅ │ │ 5042 │ min_scale │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_min_scale │ ∅ │ ∅ │ ∅ │ │ 5043 │ trim_scale │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_trim_scale │ ∅ │ ∅ │ ∅ │ │ 1740 │ numeric │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4_numeric │ ∅ │ ∅ │ ∅ │ │ 1741 │ log │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.log(10, $1) │ ∅ │ ∅ │ ∅ │ │ 1481 │ log10 │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.log(10, $1) │ ∅ │ ∅ │ ∅ │ │ 1742 │ numeric │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4_numeric │ ∅ │ ∅ │ ∅ │ │ 1743 │ numeric │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_numeric │ ∅ │ ∅ │ ∅ │ │ 1744 │ int4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_int4 │ ∅ │ ∅ │ ∅ │ │ 1745 │ float4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_float4 │ ∅ │ ∅ │ ∅ │ │ 1746 │ float8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_float8 │ ∅ │ ∅ │ ∅ │ │ 1973 │ div │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_div_trunc │ ∅ │ ∅ │ ∅ │ │ 1980 │ numeric_div_trunc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_div_trunc │ ∅ │ ∅ │ ∅ │ │ 2170 │ width_bucket │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 23 │ 1700 1700 1700 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ width_bucket_numeric │ ∅ │ ∅ │ ∅ │ │ 1747 │ time_pl_interval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1083 │ 1083 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_pl_interval │ ∅ │ ∅ │ ∅ │ │ 1748 │ time_mi_interval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1083 │ 1083 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_mi_interval │ ∅ │ ∅ │ ∅ │ │ 1749 │ timetz_pl_interval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1266 │ 1266 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_pl_interval │ ∅ │ ∅ │ ∅ │ │ 1750 │ timetz_mi_interval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1266 │ 1266 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_mi_interval │ ∅ │ ∅ │ ∅ │ │ 1764 │ numeric_inc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_inc │ ∅ │ ∅ │ ∅ │ │ 1766 │ numeric_smaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_smaller │ ∅ │ ∅ │ ∅ │ │ 1767 │ numeric_larger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_larger │ ∅ │ ∅ │ ∅ │ │ 1769 │ numeric_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_cmp │ ∅ │ ∅ │ ∅ │ │ 3283 │ numeric_sortsupport │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_sortsupport │ ∅ │ ∅ │ ∅ │ │ 1771 │ numeric_uminus │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_uminus │ ∅ │ ∅ │ ∅ │ │ 1779 │ int8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_int8 │ ∅ │ ∅ │ ∅ │ │ 1781 │ numeric │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8_numeric │ ∅ │ ∅ │ ∅ │ │ 1782 │ numeric │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2_numeric │ ∅ │ ∅ │ ∅ │ │ 1783 │ int2 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 21 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_int2 │ ∅ │ ∅ │ ∅ │ │ 3556 │ bool │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_bool │ ∅ │ ∅ │ ∅ │ │ 3449 │ numeric │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_numeric │ ∅ │ ∅ │ ∅ │ │ 3450 │ int2 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 21 │ 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_int2 │ ∅ │ ∅ │ ∅ │ │ 3451 │ int4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_int4 │ ∅ │ ∅ │ ∅ │ │ 3452 │ int8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_int8 │ ∅ │ ∅ │ ∅ │ │ 3453 │ float4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 700 │ 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_float4 │ ∅ │ ∅ │ ∅ │ │ 2580 │ float8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_float8 │ ∅ │ ∅ │ ∅ │ │ 1770 │ to_char │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 1184 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_to_char │ ∅ │ ∅ │ ∅ │ │ 1772 │ to_char │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 1700 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_to_char │ ∅ │ ∅ │ ∅ │ │ 1773 │ to_char │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 23 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4_to_char │ ∅ │ ∅ │ ∅ │ │ 1774 │ to_char │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 20 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8_to_char │ ∅ │ ∅ │ ∅ │ │ 1775 │ to_char │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 700 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4_to_char │ ∅ │ ∅ │ ∅ │ │ 1776 │ to_char │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 701 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_to_char │ ∅ │ ∅ │ ∅ │ │ 1777 │ to_number │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 1700 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_to_number │ ∅ │ ∅ │ ∅ │ │ 1778 │ to_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 1184 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_timestamp │ ∅ │ ∅ │ ∅ │ │ 1780 │ to_date │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 1082 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_date │ ∅ │ ∅ │ ∅ │ │ 1768 │ to_char │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 1186 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_to_char │ ∅ │ ∅ │ ∅ │ │ 1282 │ quote_ident │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ quote_ident │ ∅ │ ∅ │ ∅ │ │ 1283 │ quote_literal │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ quote_literal │ ∅ │ ∅ │ ∅ │ │ 1285 │ quote_literal │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 25 │ 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.quote_literal($1::pg_catalog.text) │ ∅ │ ∅ │ ∅ │ │ 1289 │ quote_nullable │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ quote_nullable │ ∅ │ ∅ │ ∅ │ │ 1290 │ quote_nullable │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 1 │ 0 │ 25 │ 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.quote_nullable($1::pg_catalog.text) │ ∅ │ ∅ │ ∅ │ │ 1798 │ oidin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 26 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidin │ ∅ │ ∅ │ ∅ │ │ 1799 │ oidout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidout │ ∅ │ ∅ │ ∅ │ │ 3058 │ concat │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ f │ f │ f │ f │ f │ s │ s │ 1 │ 0 │ 25 │ 2276 │ {2276} │ {v} │ ∅ │ ∅ │ ∅ │ text_concat │ ∅ │ ∅ │ ∅ │ │ 3059 │ concat_ws │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ f │ f │ f │ f │ f │ s │ s │ 2 │ 0 │ 25 │ 25 2276 │ {25,2276} │ {i,v} │ ∅ │ ∅ │ ∅ │ text_concat_ws │ ∅ │ ∅ │ ∅ │ │ 3060 │ left │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 25 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_left │ ∅ │ ∅ │ ∅ │ │ 3061 │ right │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 25 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_right │ ∅ │ ∅ │ ∅ │ │ 3062 │ reverse │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_reverse │ ∅ │ ∅ │ ∅ │ │ 3539 │ format │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ f │ f │ f │ f │ f │ s │ s │ 2 │ 0 │ 25 │ 25 2276 │ {25,2276} │ {i,v} │ ∅ │ ∅ │ ∅ │ text_format │ ∅ │ ∅ │ ∅ │ │ 3540 │ format │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_format_nv │ ∅ │ ∅ │ ∅ │ │ 1810 │ bit_length │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.octet_length($1) * 8 │ ∅ │ ∅ │ ∅ │ │ 1811 │ bit_length │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.octet_length($1) * 8 │ ∅ │ ∅ │ ∅ │ │ 1812 │ bit_length │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.length($1) │ ∅ │ ∅ │ ∅ │ │ 1814 │ iclikesel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ iclikesel │ ∅ │ ∅ │ ∅ │ │ 1815 │ icnlikesel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ icnlikesel │ ∅ │ ∅ │ ∅ │ │ 1816 │ iclikejoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ iclikejoinsel │ ∅ │ ∅ │ ∅ │ │ 1817 │ icnlikejoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ icnlikejoinsel │ ∅ │ ∅ │ ∅ │ │ 1818 │ regexeqsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regexeqsel │ ∅ │ ∅ │ ∅ │ │ 1819 │ likesel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ likesel │ ∅ │ ∅ │ ∅ │ │ 1820 │ icregexeqsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ icregexeqsel │ ∅ │ ∅ │ ∅ │ │ 1821 │ regexnesel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regexnesel │ ∅ │ ∅ │ ∅ │ │ 1822 │ nlikesel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ nlikesel │ ∅ │ ∅ │ ∅ │ │ 1823 │ icregexnesel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ icregexnesel │ ∅ │ ∅ │ ∅ │ │ 1824 │ regexeqjoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regexeqjoinsel │ ∅ │ ∅ │ ∅ │ │ 1825 │ likejoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ likejoinsel │ ∅ │ ∅ │ ∅ │ │ 1826 │ icregexeqjoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ icregexeqjoinsel │ ∅ │ ∅ │ ∅ │ │ 1827 │ regexnejoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regexnejoinsel │ ∅ │ ∅ │ ∅ │ │ 1828 │ nlikejoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ nlikejoinsel │ ∅ │ ∅ │ ∅ │ │ 1829 │ icregexnejoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ icregexnejoinsel │ ∅ │ ∅ │ ∅ │ │ 3437 │ prefixsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ prefixsel │ ∅ │ ∅ │ ∅ │ │ 3438 │ prefixjoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ prefixjoinsel │ ∅ │ ∅ │ ∅ │ │ 1830 │ float8_avg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_avg │ ∅ │ ∅ │ ∅ │ │ 2512 │ float8_var_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_var_pop │ ∅ │ ∅ │ ∅ │ │ 1831 │ float8_var_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_var_samp │ ∅ │ ∅ │ ∅ │ │ 2513 │ float8_stddev_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_stddev_pop │ ∅ │ ∅ │ ∅ │ │ 1832 │ float8_stddev_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_stddev_samp │ ∅ │ ∅ │ ∅ │ │ 1833 │ numeric_accum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_accum │ ∅ │ ∅ │ ∅ │ │ 3341 │ numeric_combine │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_combine │ ∅ │ ∅ │ ∅ │ │ 2858 │ numeric_avg_accum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_avg_accum │ ∅ │ ∅ │ ∅ │ │ 3337 │ numeric_avg_combine │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_avg_combine │ ∅ │ ∅ │ ∅ │ │ 2740 │ numeric_avg_serialize │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_avg_serialize │ ∅ │ ∅ │ ∅ │ │ 2741 │ numeric_avg_deserialize │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2281 │ 17 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_avg_deserialize │ ∅ │ ∅ │ ∅ │ │ 3335 │ numeric_serialize │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_serialize │ ∅ │ ∅ │ ∅ │ │ 3336 │ numeric_deserialize │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2281 │ 17 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_deserialize │ ∅ │ ∅ │ ∅ │ │ 3548 │ numeric_accum_inv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_accum_inv │ ∅ │ ∅ │ ∅ │ │ 1834 │ int2_accum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2_accum │ ∅ │ ∅ │ ∅ │ │ 1835 │ int4_accum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4_accum │ ∅ │ ∅ │ ∅ │ │ 1836 │ int8_accum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8_accum │ ∅ │ ∅ │ ∅ │ │ 3338 │ numeric_poly_combine │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_poly_combine │ ∅ │ ∅ │ ∅ │ │ 3339 │ numeric_poly_serialize │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_poly_serialize │ ∅ │ ∅ │ ∅ │ │ 3340 │ numeric_poly_deserialize │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2281 │ 17 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_poly_deserialize │ ∅ │ ∅ │ ∅ │ │ 2746 │ int8_avg_accum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8_avg_accum │ ∅ │ ∅ │ ∅ │ │ 3567 │ int2_accum_inv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2_accum_inv │ ∅ │ ∅ │ ∅ │ │ 3568 │ int4_accum_inv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4_accum_inv │ ∅ │ ∅ │ ∅ │ │ 3569 │ int8_accum_inv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8_accum_inv │ ∅ │ ∅ │ ∅ │ │ 3387 │ int8_avg_accum_inv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8_avg_accum_inv │ ∅ │ ∅ │ ∅ │ │ 2785 │ int8_avg_combine │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8_avg_combine │ ∅ │ ∅ │ ∅ │ │ 2786 │ int8_avg_serialize │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8_avg_serialize │ ∅ │ ∅ │ ∅ │ │ 2787 │ int8_avg_deserialize │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2281 │ 17 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8_avg_deserialize │ ∅ │ ∅ │ ∅ │ │ 3324 │ int4_avg_combine │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1016 │ 1016 1016 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4_avg_combine │ ∅ │ ∅ │ ∅ │ │ 3178 │ numeric_sum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_sum │ ∅ │ ∅ │ ∅ │ │ 1837 │ numeric_avg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_avg │ ∅ │ ∅ │ ∅ │ │ 2514 │ numeric_var_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_var_pop │ ∅ │ ∅ │ ∅ │ │ 1838 │ numeric_var_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_var_samp │ ∅ │ ∅ │ ∅ │ │ 2596 │ numeric_stddev_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_stddev_pop │ ∅ │ ∅ │ ∅ │ │ 1839 │ numeric_stddev_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_stddev_samp │ ∅ │ ∅ │ ∅ │ │ 1840 │ int2_sum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 20 │ 20 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2_sum │ ∅ │ ∅ │ ∅ │ │ 1841 │ int4_sum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 20 │ 20 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4_sum │ ∅ │ ∅ │ ∅ │ │ 1842 │ int8_sum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 1700 │ 1700 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8_sum │ ∅ │ ∅ │ ∅ │ │ 3388 │ numeric_poly_sum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_poly_sum │ ∅ │ ∅ │ ∅ │ │ 3389 │ numeric_poly_avg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_poly_avg │ ∅ │ ∅ │ ∅ │ │ 3390 │ numeric_poly_var_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_poly_var_pop │ ∅ │ ∅ │ ∅ │ │ 3391 │ numeric_poly_var_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_poly_var_samp │ ∅ │ ∅ │ ∅ │ │ 3392 │ numeric_poly_stddev_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_poly_stddev_pop │ ∅ │ ∅ │ ∅ │ │ 3393 │ numeric_poly_stddev_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_poly_stddev_samp │ ∅ │ ∅ │ ∅ │ │ 1843 │ interval_accum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1187 │ 1187 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_accum │ ∅ │ ∅ │ ∅ │ │ 3325 │ interval_combine │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1187 │ 1187 1187 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_combine │ ∅ │ ∅ │ ∅ │ │ 3549 │ interval_accum_inv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1187 │ 1187 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_accum_inv │ ∅ │ ∅ │ ∅ │ │ 1844 │ interval_avg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1186 │ 1187 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_avg │ ∅ │ ∅ │ ∅ │ │ 1962 │ int2_avg_accum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1016 │ 1016 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2_avg_accum │ ∅ │ ∅ │ ∅ │ │ 1963 │ int4_avg_accum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1016 │ 1016 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4_avg_accum │ ∅ │ ∅ │ ∅ │ │ 3570 │ int2_avg_accum_inv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1016 │ 1016 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2_avg_accum_inv │ ∅ │ ∅ │ ∅ │ │ 3571 │ int4_avg_accum_inv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1016 │ 1016 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4_avg_accum_inv │ ∅ │ ∅ │ ∅ │ │ 1964 │ int8_avg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1016 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8_avg │ ∅ │ ∅ │ ∅ │ │ 3572 │ int2int4_sum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 1016 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2int4_sum │ ∅ │ ∅ │ ∅ │ │ 2805 │ int8inc_float8_float8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 20 │ 20 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8inc_float8_float8 │ ∅ │ ∅ │ ∅ │ │ 2806 │ float8_regr_accum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1022 │ 1022 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_regr_accum │ ∅ │ ∅ │ ∅ │ │ 3342 │ float8_regr_combine │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1022 │ 1022 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_regr_combine │ ∅ │ ∅ │ ∅ │ │ 2807 │ float8_regr_sxx │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_regr_sxx │ ∅ │ ∅ │ ∅ │ │ 2808 │ float8_regr_syy │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_regr_syy │ ∅ │ ∅ │ ∅ │ │ 2809 │ float8_regr_sxy │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_regr_sxy │ ∅ │ ∅ │ ∅ │ │ 2810 │ float8_regr_avgx │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_regr_avgx │ ∅ │ ∅ │ ∅ │ │ 2811 │ float8_regr_avgy │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_regr_avgy │ ∅ │ ∅ │ ∅ │ │ 2812 │ float8_regr_r2 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_regr_r2 │ ∅ │ ∅ │ ∅ │ │ 2813 │ float8_regr_slope │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_regr_slope │ ∅ │ ∅ │ ∅ │ │ 2814 │ float8_regr_intercept │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_regr_intercept │ ∅ │ ∅ │ ∅ │ │ 2815 │ float8_covar_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_covar_pop │ ∅ │ ∅ │ ∅ │ │ 2816 │ float8_covar_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_covar_samp │ ∅ │ ∅ │ ∅ │ │ 2817 │ float8_corr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8_corr │ ∅ │ ∅ │ ∅ │ │ 3535 │ string_agg_transfn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 3 │ 0 │ 2281 │ 2281 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ string_agg_transfn │ ∅ │ ∅ │ ∅ │ │ 3536 │ string_agg_finalfn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 25 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ string_agg_finalfn │ ∅ │ ∅ │ ∅ │ │ 3538 │ string_agg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 25 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3543 │ bytea_string_agg_transfn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 3 │ 0 │ 2281 │ 2281 17 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bytea_string_agg_transfn │ ∅ │ ∅ │ ∅ │ │ 3544 │ bytea_string_agg_finalfn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 17 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bytea_string_agg_finalfn │ ∅ │ ∅ │ ∅ │ │ 3545 │ string_agg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 17 │ 17 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 1845 │ to_ascii │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_ascii_default │ ∅ │ ∅ │ ∅ │ │ 1846 │ to_ascii │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 25 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_ascii_enc │ ∅ │ ∅ │ ∅ │ │ 1847 │ to_ascii │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 25 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_ascii_encname │ ∅ │ ∅ │ ∅ │ │ 1848 │ interval_pl_time │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1083 │ 1186 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select $2 + $1 │ ∅ │ ∅ │ ∅ │ │ 1850 │ int28eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 21 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int28eq │ ∅ │ ∅ │ ∅ │ │ 1851 │ int28ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 21 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int28ne │ ∅ │ ∅ │ ∅ │ │ 1852 │ int28lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 21 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int28lt │ ∅ │ ∅ │ ∅ │ │ 1853 │ int28gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 21 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int28gt │ ∅ │ ∅ │ ∅ │ │ 1854 │ int28le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 21 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int28le │ ∅ │ ∅ │ ∅ │ │ 1855 │ int28ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 21 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int28ge │ ∅ │ ∅ │ ∅ │ │ 1856 │ int82eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int82eq │ ∅ │ ∅ │ ∅ │ │ 1857 │ int82ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int82ne │ ∅ │ ∅ │ ∅ │ │ 1858 │ int82lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int82lt │ ∅ │ ∅ │ ∅ │ │ 1859 │ int82gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int82gt │ ∅ │ ∅ │ ∅ │ │ 1860 │ int82le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int82le │ ∅ │ ∅ │ ∅ │ │ 1861 │ int82ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int82ge │ ∅ │ ∅ │ ∅ │ │ 1892 │ int2and │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 21 │ 21 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2and │ ∅ │ ∅ │ ∅ │ │ 1893 │ int2or │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 21 │ 21 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2or │ ∅ │ ∅ │ ∅ │ │ 1894 │ int2xor │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 21 │ 21 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2xor │ ∅ │ ∅ │ ∅ │ │ 1895 │ int2not │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 21 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2not │ ∅ │ ∅ │ ∅ │ │ 1896 │ int2shl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 21 │ 21 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2shl │ ∅ │ ∅ │ ∅ │ │ 1897 │ int2shr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 21 │ 21 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2shr │ ∅ │ ∅ │ ∅ │ │ 1898 │ int4and │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4and │ ∅ │ ∅ │ ∅ │ │ 1899 │ int4or │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4or │ ∅ │ ∅ │ ∅ │ │ 1900 │ int4xor │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4xor │ ∅ │ ∅ │ ∅ │ │ 1901 │ int4not │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4not │ ∅ │ ∅ │ ∅ │ │ 1902 │ int4shl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4shl │ ∅ │ ∅ │ ∅ │ │ 1903 │ int4shr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4shr │ ∅ │ ∅ │ ∅ │ │ 1904 │ int8and │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8and │ ∅ │ ∅ │ ∅ │ │ 1905 │ int8or │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8or │ ∅ │ ∅ │ ∅ │ │ 1906 │ int8xor │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8xor │ ∅ │ ∅ │ ∅ │ │ 1907 │ int8not │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8not │ ∅ │ ∅ │ ∅ │ │ 1908 │ int8shl │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8shl │ ∅ │ ∅ │ ∅ │ │ 1909 │ int8shr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 20 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8shr │ ∅ │ ∅ │ ∅ │ │ 1910 │ int8up │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8up │ ∅ │ ∅ │ ∅ │ │ 1911 │ int2up │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 21 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2up │ ∅ │ ∅ │ ∅ │ │ 1912 │ int4up │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4up │ ∅ │ ∅ │ ∅ │ │ 1913 │ float4up │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 700 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4up │ ∅ │ ∅ │ ∅ │ │ 1914 │ float8up │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8up │ ∅ │ ∅ │ ∅ │ │ 1915 │ numeric_uplus │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_uplus │ ∅ │ ∅ │ ∅ │ │ 1922 │ has_table_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_table_privilege_name_name │ ∅ │ ∅ │ ∅ │ │ 1923 │ has_table_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_table_privilege_name_id │ ∅ │ ∅ │ ∅ │ │ 1924 │ has_table_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_table_privilege_id_name │ ∅ │ ∅ │ ∅ │ │ 1925 │ has_table_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_table_privilege_id_id │ ∅ │ ∅ │ ∅ │ │ 1926 │ has_table_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_table_privilege_name │ ∅ │ ∅ │ ∅ │ │ 1927 │ has_table_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_table_privilege_id │ ∅ │ ∅ │ ∅ │ │ 2181 │ has_sequence_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_sequence_privilege_name_name │ ∅ │ ∅ │ ∅ │ │ 2182 │ has_sequence_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_sequence_privilege_name_id │ ∅ │ ∅ │ ∅ │ │ 2183 │ has_sequence_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_sequence_privilege_id_name │ ∅ │ ∅ │ ∅ │ │ 2184 │ has_sequence_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_sequence_privilege_id_id │ ∅ │ ∅ │ ∅ │ │ 2185 │ has_sequence_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_sequence_privilege_name │ ∅ │ ∅ │ ∅ │ │ 2186 │ has_sequence_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_sequence_privilege_id │ ∅ │ ∅ │ ∅ │ │ 3012 │ has_column_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 16 │ 19 25 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_column_privilege_name_name_name │ ∅ │ ∅ │ ∅ │ │ 3013 │ has_column_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 16 │ 19 25 21 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_column_privilege_name_name_attnum │ ∅ │ ∅ │ ∅ │ │ 3014 │ has_column_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 16 │ 19 26 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_column_privilege_name_id_name │ ∅ │ ∅ │ ∅ │ │ 3015 │ has_column_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 16 │ 19 26 21 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_column_privilege_name_id_attnum │ ∅ │ ∅ │ ∅ │ │ 3016 │ has_column_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 16 │ 26 25 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_column_privilege_id_name_name │ ∅ │ ∅ │ ∅ │ │ 3017 │ has_column_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 16 │ 26 25 21 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_column_privilege_id_name_attnum │ ∅ │ ∅ │ ∅ │ │ 3018 │ has_column_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 16 │ 26 26 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_column_privilege_id_id_name │ ∅ │ ∅ │ ∅ │ │ 3019 │ has_column_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 16 │ 26 26 21 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_column_privilege_id_id_attnum │ ∅ │ ∅ │ ∅ │ │ 3020 │ has_column_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 25 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_column_privilege_name_name │ ∅ │ ∅ │ ∅ │ │ 3021 │ has_column_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 25 21 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_column_privilege_name_attnum │ ∅ │ ∅ │ ∅ │ │ 3022 │ has_column_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_column_privilege_id_name │ ∅ │ ∅ │ ∅ │ │ 3023 │ has_column_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 21 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_column_privilege_id_attnum │ ∅ │ ∅ │ ∅ │ │ 3024 │ has_any_column_privilege │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_any_column_privilege_name_name │ ∅ │ ∅ │ ∅ │ │ 3025 │ has_any_column_privilege │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_any_column_privilege_name_id │ ∅ │ ∅ │ ∅ │ │ 3026 │ has_any_column_privilege │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_any_column_privilege_id_name │ ∅ │ ∅ │ ∅ │ │ 3027 │ has_any_column_privilege │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_any_column_privilege_id_id │ ∅ │ ∅ │ ∅ │ │ 3028 │ has_any_column_privilege │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_any_column_privilege_name │ ∅ │ ∅ │ ∅ │ │ 3029 │ has_any_column_privilege │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_any_column_privilege_id │ ∅ │ ∅ │ ∅ │ │ 3355 │ pg_ndistinct_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3361 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_ndistinct_in │ ∅ │ ∅ │ ∅ │ │ 3356 │ pg_ndistinct_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 3361 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_ndistinct_out │ ∅ │ ∅ │ ∅ │ │ 3357 │ pg_ndistinct_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 3361 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_ndistinct_recv │ ∅ │ ∅ │ ∅ │ │ 3358 │ pg_ndistinct_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 17 │ 3361 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_ndistinct_send │ ∅ │ ∅ │ ∅ │ │ 3404 │ pg_dependencies_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3402 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_dependencies_in │ ∅ │ ∅ │ ∅ │ │ 3405 │ pg_dependencies_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 3402 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_dependencies_out │ ∅ │ ∅ │ ∅ │ │ 3406 │ pg_dependencies_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 3402 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_dependencies_recv │ ∅ │ ∅ │ ∅ │ │ 3407 │ pg_dependencies_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 17 │ 3402 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_dependencies_send │ ∅ │ ∅ │ ∅ │ │ 5018 │ pg_mcv_list_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 5017 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_mcv_list_in │ ∅ │ ∅ │ ∅ │ │ 5019 │ pg_mcv_list_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 5017 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_mcv_list_out │ ∅ │ ∅ │ ∅ │ │ 5020 │ pg_mcv_list_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 5017 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_mcv_list_recv │ ∅ │ ∅ │ ∅ │ │ 5021 │ pg_mcv_list_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 17 │ 5017 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_mcv_list_send │ ∅ │ ∅ │ ∅ │ │ 3427 │ pg_mcv_list_items │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ s │ s │ 1 │ 0 │ 2249 │ 5017 │ {5017,23,1009,1000,701,701} │ {i,o,o,o,o,o} │ {mcv_list,index,values,nulls,frequency,base_frequency} │ ∅ │ ∅ │ pg_stats_ext_mcvlist_items │ ∅ │ ∅ │ ∅ │ │ 1928 │ pg_stat_get_numscans │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_numscans │ ∅ │ ∅ │ ∅ │ │ 1929 │ pg_stat_get_tuples_returned │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_tuples_returned │ ∅ │ ∅ │ ∅ │ │ 1930 │ pg_stat_get_tuples_fetched │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_tuples_fetched │ ∅ │ ∅ │ ∅ │ │ 1931 │ pg_stat_get_tuples_inserted │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_tuples_inserted │ ∅ │ ∅ │ ∅ │ │ 1932 │ pg_stat_get_tuples_updated │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_tuples_updated │ ∅ │ ∅ │ ∅ │ │ 1933 │ pg_stat_get_tuples_deleted │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_tuples_deleted │ ∅ │ ∅ │ ∅ │ │ 1972 │ pg_stat_get_tuples_hot_updated │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_tuples_hot_updated │ ∅ │ ∅ │ ∅ │ │ 2878 │ pg_stat_get_live_tuples │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_live_tuples │ ∅ │ ∅ │ ∅ │ │ 2879 │ pg_stat_get_dead_tuples │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_dead_tuples │ ∅ │ ∅ │ ∅ │ │ 3177 │ pg_stat_get_mod_since_analyze │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_mod_since_analyze │ ∅ │ ∅ │ ∅ │ │ 5053 │ pg_stat_get_ins_since_vacuum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_ins_since_vacuum │ ∅ │ ∅ │ ∅ │ │ 1934 │ pg_stat_get_blocks_fetched │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_blocks_fetched │ ∅ │ ∅ │ ∅ │ │ 1935 │ pg_stat_get_blocks_hit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_blocks_hit │ ∅ │ ∅ │ ∅ │ │ 2781 │ pg_stat_get_last_vacuum_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 1184 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_last_vacuum_time │ ∅ │ ∅ │ ∅ │ │ 2782 │ pg_stat_get_last_autovacuum_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 1184 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_last_autovacuum_time │ ∅ │ ∅ │ ∅ │ │ 2783 │ pg_stat_get_last_analyze_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 1184 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_last_analyze_time │ ∅ │ ∅ │ ∅ │ │ 2784 │ pg_stat_get_last_autoanalyze_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 1184 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_last_autoanalyze_time │ ∅ │ ∅ │ ∅ │ │ 3054 │ pg_stat_get_vacuum_count │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_vacuum_count │ ∅ │ ∅ │ ∅ │ │ 3055 │ pg_stat_get_autovacuum_count │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_autovacuum_count │ ∅ │ ∅ │ ∅ │ │ 3056 │ pg_stat_get_analyze_count │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_analyze_count │ ∅ │ ∅ │ ∅ │ │ 3057 │ pg_stat_get_autoanalyze_count │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_autoanalyze_count │ ∅ │ ∅ │ ∅ │ │ 1936 │ pg_stat_get_backend_idset │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ t │ t │ s │ r │ 0 │ 0 │ 23 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_backend_idset │ ∅ │ ∅ │ ∅ │ │ 2022 │ pg_stat_get_activity │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ f │ t │ s │ r │ 1 │ 0 │ 2249 │ 23 │ {23,26,23,26,25,25,25,25,25,1184,1184,1184,1184,869,25,23,28,28,25,16,25,25,23,16,25,1700,25,16,25,16,23} │ {i,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o} │ {pid,datid,pid,usesysid,application_name,state,query,wait_event_type,wait_event,xact_start,query_start,backend_start,state_change,client_addr,client_hostname,client_port,backend_xid,backend_xmin,backend_type,ssl,sslversion,sslcipher,sslbits,sslcompression,ssl_client_dn,ssl_client_serial,ssl_issuer_dn,gss_auth,gss_princ,gss_enc,leader_pid} │ ∅ │ ∅ │ pg_stat_get_activity │ ∅ │ ∅ │ ∅ │ │ 3318 │ pg_stat_get_progress_info │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ t │ t │ s │ r │ 1 │ 0 │ 2249 │ 25 │ {25,23,26,26,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20} │ {i,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o} │ {cmdtype,pid,datid,relid,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10,param11,param12,param13,param14,param15,param16,param17,param18,param19,param20} │ ∅ │ ∅ │ pg_stat_get_progress_info │ ∅ │ ∅ │ ∅ │ │ 3099 │ pg_stat_get_wal_senders │ 11 │ 10 │ 12 │ 1 │ 10 │ 0 │ - │ f │ f │ f │ f │ t │ s │ r │ 0 │ 0 │ 2249 │ │ {23,25,3220,3220,3220,3220,1186,1186,1186,23,25,1184,20,20,20} │ {o,o,o,o,o,o,o,o,o,o,o,o,o,o,o} │ {pid,state,sent_lsn,write_lsn,flush_lsn,replay_lsn,write_lag,flush_lag,replay_lag,sync_priority,sync_state,reply_time,spill_txns,spill_count,spill_bytes} │ ∅ │ ∅ │ pg_stat_get_wal_senders │ ∅ │ ∅ │ ∅ │ │ 2844 │ pg_stat_get_db_blk_read_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 701 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_blk_read_time │ ∅ │ ∅ │ ∅ │ │ 2845 │ pg_stat_get_db_blk_write_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 701 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_blk_write_time │ ∅ │ ∅ │ ∅ │ │ 3317 │ pg_stat_get_wal_receiver │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ r │ 0 │ 0 │ 2249 │ │ {23,25,3220,23,3220,23,1184,1184,3220,1184,25,25,23,25} │ {o,o,o,o,o,o,o,o,o,o,o,o,o,o} │ {pid,status,receive_start_lsn,receive_start_tli,received_lsn,received_tli,last_msg_send_time,last_msg_receipt_time,latest_end_lsn,latest_end_time,slot_name,sender_host,sender_port,conninfo} │ ∅ │ ∅ │ pg_stat_get_wal_receiver │ ∅ │ ∅ │ ∅ │ │ 6118 │ pg_stat_get_subscription │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ r │ 1 │ 0 │ 2249 │ 26 │ {26,26,26,23,3220,1184,1184,3220,1184} │ {i,o,o,o,o,o,o,o,o} │ {subid,subid,relid,pid,received_lsn,last_msg_send_time,last_msg_receipt_time,latest_end_lsn,latest_end_time} │ ∅ │ ∅ │ pg_stat_get_subscription │ ∅ │ ∅ │ ∅ │ │ 2026 │ pg_backend_pid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 0 │ 0 │ 23 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_backend_pid │ ∅ │ ∅ │ ∅ │ │ 1937 │ pg_stat_get_backend_pid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 23 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_backend_pid │ ∅ │ ∅ │ ∅ │ │ 1938 │ pg_stat_get_backend_dbid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 26 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_backend_dbid │ ∅ │ ∅ │ ∅ │ │ 1939 │ pg_stat_get_backend_userid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 26 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_backend_userid │ ∅ │ ∅ │ ∅ │ │ 1940 │ pg_stat_get_backend_activity │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 25 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_backend_activity │ ∅ │ ∅ │ ∅ │ │ 2788 │ pg_stat_get_backend_wait_event_type │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 25 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_backend_wait_event_type │ ∅ │ ∅ │ ∅ │ │ 2853 │ pg_stat_get_backend_wait_event │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 25 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_backend_wait_event │ ∅ │ ∅ │ ∅ │ │ 2094 │ pg_stat_get_backend_activity_start │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 1184 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_backend_activity_start │ ∅ │ ∅ │ ∅ │ │ 2857 │ pg_stat_get_backend_xact_start │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 1184 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_backend_xact_start │ ∅ │ ∅ │ ∅ │ │ 1391 │ pg_stat_get_backend_start │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 1184 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_backend_start │ ∅ │ ∅ │ ∅ │ │ 1392 │ pg_stat_get_backend_client_addr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 869 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_backend_client_addr │ ∅ │ ∅ │ ∅ │ │ 1393 │ pg_stat_get_backend_client_port │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 23 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_backend_client_port │ ∅ │ ∅ │ ∅ │ │ 1941 │ pg_stat_get_db_numbackends │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 23 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_numbackends │ ∅ │ ∅ │ ∅ │ │ 1942 │ pg_stat_get_db_xact_commit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_xact_commit │ ∅ │ ∅ │ ∅ │ │ 1943 │ pg_stat_get_db_xact_rollback │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_xact_rollback │ ∅ │ ∅ │ ∅ │ │ 1944 │ pg_stat_get_db_blocks_fetched │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_blocks_fetched │ ∅ │ ∅ │ ∅ │ │ 1945 │ pg_stat_get_db_blocks_hit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_blocks_hit │ ∅ │ ∅ │ ∅ │ │ 2758 │ pg_stat_get_db_tuples_returned │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_tuples_returned │ ∅ │ ∅ │ ∅ │ │ 2759 │ pg_stat_get_db_tuples_fetched │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_tuples_fetched │ ∅ │ ∅ │ ∅ │ │ 2760 │ pg_stat_get_db_tuples_inserted │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_tuples_inserted │ ∅ │ ∅ │ ∅ │ │ 2761 │ pg_stat_get_db_tuples_updated │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_tuples_updated │ ∅ │ ∅ │ ∅ │ │ 2762 │ pg_stat_get_db_tuples_deleted │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_tuples_deleted │ ∅ │ ∅ │ ∅ │ │ 3065 │ pg_stat_get_db_conflict_tablespace │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_conflict_tablespace │ ∅ │ ∅ │ ∅ │ │ 3066 │ pg_stat_get_db_conflict_lock │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_conflict_lock │ ∅ │ ∅ │ ∅ │ │ 3067 │ pg_stat_get_db_conflict_snapshot │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_conflict_snapshot │ ∅ │ ∅ │ ∅ │ │ 3068 │ pg_stat_get_db_conflict_bufferpin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_conflict_bufferpin │ ∅ │ ∅ │ ∅ │ │ 3069 │ pg_stat_get_db_conflict_startup_deadlock │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_conflict_startup_deadlock │ ∅ │ ∅ │ ∅ │ │ 3070 │ pg_stat_get_db_conflict_all │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_conflict_all │ ∅ │ ∅ │ ∅ │ │ 3152 │ pg_stat_get_db_deadlocks │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_deadlocks │ ∅ │ ∅ │ ∅ │ │ 3426 │ pg_stat_get_db_checksum_failures │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_checksum_failures │ ∅ │ ∅ │ ∅ │ │ 3428 │ pg_stat_get_db_checksum_last_failure │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 1184 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_checksum_last_failure │ ∅ │ ∅ │ ∅ │ │ 3074 │ pg_stat_get_db_stat_reset_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 1184 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_stat_reset_time │ ∅ │ ∅ │ ∅ │ │ 3150 │ pg_stat_get_db_temp_files │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_temp_files │ ∅ │ ∅ │ ∅ │ │ 3151 │ pg_stat_get_db_temp_bytes │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_db_temp_bytes │ ∅ │ ∅ │ ∅ │ │ 3195 │ pg_stat_get_archiver │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ r │ 0 │ 0 │ 2249 │ │ {20,25,1184,20,25,1184,1184} │ {o,o,o,o,o,o,o} │ {archived_count,last_archived_wal,last_archived_time,failed_count,last_failed_wal,last_failed_time,stats_reset} │ ∅ │ ∅ │ pg_stat_get_archiver │ ∅ │ ∅ │ ∅ │ │ 2769 │ pg_stat_get_bgwriter_timed_checkpoints │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 0 │ 0 │ 20 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_bgwriter_timed_checkpoints │ ∅ │ ∅ │ ∅ │ │ 2770 │ pg_stat_get_bgwriter_requested_checkpoints │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 0 │ 0 │ 20 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_bgwriter_requested_checkpoints │ ∅ │ ∅ │ ∅ │ │ 2771 │ pg_stat_get_bgwriter_buf_written_checkpoints │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 0 │ 0 │ 20 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_bgwriter_buf_written_checkpoints │ ∅ │ ∅ │ ∅ │ │ 2772 │ pg_stat_get_bgwriter_buf_written_clean │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 0 │ 0 │ 20 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_bgwriter_buf_written_clean │ ∅ │ ∅ │ ∅ │ │ 2773 │ pg_stat_get_bgwriter_maxwritten_clean │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 0 │ 0 │ 20 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_bgwriter_maxwritten_clean │ ∅ │ ∅ │ ∅ │ │ 3075 │ pg_stat_get_bgwriter_stat_reset_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 0 │ 0 │ 1184 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_bgwriter_stat_reset_time │ ∅ │ ∅ │ ∅ │ │ 3160 │ pg_stat_get_checkpoint_write_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 0 │ 0 │ 701 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_checkpoint_write_time │ ∅ │ ∅ │ ∅ │ │ 3161 │ pg_stat_get_checkpoint_sync_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 0 │ 0 │ 701 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_checkpoint_sync_time │ ∅ │ ∅ │ ∅ │ │ 2775 │ pg_stat_get_buf_written_backend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 0 │ 0 │ 20 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_buf_written_backend │ ∅ │ ∅ │ ∅ │ │ 3063 │ pg_stat_get_buf_fsync_backend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 0 │ 0 │ 20 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_buf_fsync_backend │ ∅ │ ∅ │ ∅ │ │ 2859 │ pg_stat_get_buf_alloc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 0 │ 0 │ 20 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_buf_alloc │ ∅ │ ∅ │ ∅ │ │ 2306 │ pg_stat_get_slru │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ f │ t │ s │ r │ 0 │ 0 │ 2249 │ │ {25,20,20,20,20,20,20,20,1184} │ {o,o,o,o,o,o,o,o,o} │ {name,blks_zeroed,blks_hit,blks_read,blks_written,blks_exists,flushes,truncates,stats_reset} │ ∅ │ ∅ │ pg_stat_get_slru │ ∅ │ ∅ │ ∅ │ │ 2978 │ pg_stat_get_function_calls │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_function_calls │ ∅ │ ∅ │ ∅ │ │ 2979 │ pg_stat_get_function_total_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 701 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_function_total_time │ ∅ │ ∅ │ ∅ │ │ 2980 │ pg_stat_get_function_self_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 1 │ 0 │ 701 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_function_self_time │ ∅ │ ∅ │ ∅ │ │ 3037 │ pg_stat_get_xact_numscans │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_xact_numscans │ ∅ │ ∅ │ ∅ │ │ 3038 │ pg_stat_get_xact_tuples_returned │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_xact_tuples_returned │ ∅ │ ∅ │ ∅ │ │ 3039 │ pg_stat_get_xact_tuples_fetched │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_xact_tuples_fetched │ ∅ │ ∅ │ ∅ │ │ 3040 │ pg_stat_get_xact_tuples_inserted │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_xact_tuples_inserted │ ∅ │ ∅ │ ∅ │ │ 3041 │ pg_stat_get_xact_tuples_updated │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_xact_tuples_updated │ ∅ │ ∅ │ ∅ │ │ 3042 │ pg_stat_get_xact_tuples_deleted │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_xact_tuples_deleted │ ∅ │ ∅ │ ∅ │ │ 3043 │ pg_stat_get_xact_tuples_hot_updated │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_xact_tuples_hot_updated │ ∅ │ ∅ │ ∅ │ │ 3044 │ pg_stat_get_xact_blocks_fetched │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_xact_blocks_fetched │ ∅ │ ∅ │ ∅ │ │ 3045 │ pg_stat_get_xact_blocks_hit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_xact_blocks_hit │ ∅ │ ∅ │ ∅ │ │ 3046 │ pg_stat_get_xact_function_calls │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_xact_function_calls │ ∅ │ ∅ │ ∅ │ │ 3047 │ pg_stat_get_xact_function_total_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 701 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_xact_function_total_time │ ∅ │ ∅ │ ∅ │ │ 3048 │ pg_stat_get_xact_function_self_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 701 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_xact_function_self_time │ ∅ │ ∅ │ ∅ │ │ 3788 │ pg_stat_get_snapshot_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 0 │ 0 │ 1184 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_get_snapshot_timestamp │ ∅ │ ∅ │ ∅ │ │ 2230 │ pg_stat_clear_snapshot │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ v │ r │ 0 │ 0 │ 2278 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_clear_snapshot │ ∅ │ ∅ │ ∅ │ │ 21203 │ test_proc7 │ 2200 │ 16384 │ 13653 │ 100 │ 0 │ 0 │ - │ p │ f │ f │ f │ f │ v │ u │ 3 │ 0 │ 2249 │ 23 23 1700 │ {23,23,1700} │ {i,b,b} │ {x,a,b} │ ∅ │ ∅ │ ↵│ ∅ │ ∅ │ ∅ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ BEGIN RAISE NOTICE 'test_proc7 %d %d %d', x, a, b; ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ IF x > 1 THEN ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ a := x / 10; ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ b := x / 2; ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ RAISE NOTICE 'before nested call'; ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ CALL test_proc7(b::int, a, b); ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ RAISE NOTICE 'after nested call'; ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ END IF; ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ END; ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ 3163 │ pg_trigger_depth │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 0 │ 0 │ 23 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_trigger_depth │ ∅ │ ∅ │ ∅ │ │ 3778 │ pg_tablespace_location │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 25 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_tablespace_location │ ∅ │ ∅ │ ∅ │ │ 1946 │ encode │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 17 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ binary_encode │ ∅ │ ∅ │ ∅ │ │ 1947 │ decode │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 17 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ binary_decode │ ∅ │ ∅ │ ∅ │ │ 1948 │ byteaeq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 17 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteaeq │ ∅ │ ∅ │ ∅ │ │ 1949 │ bytealt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 17 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bytealt │ ∅ │ ∅ │ ∅ │ │ 1950 │ byteale │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 17 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteale │ ∅ │ ∅ │ ∅ │ │ 1951 │ byteagt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 17 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteagt │ ∅ │ ∅ │ ∅ │ │ 1952 │ byteage │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 17 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteage │ ∅ │ ∅ │ ∅ │ │ 1953 │ byteane │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 17 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteane │ ∅ │ ∅ │ ∅ │ │ 1954 │ byteacmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 17 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteacmp │ ∅ │ ∅ │ ∅ │ │ 3331 │ bytea_sortsupport │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bytea_sortsupport │ ∅ │ ∅ │ ∅ │ │ 3917 │ timestamp_support │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_support │ ∅ │ ∅ │ ∅ │ │ 3944 │ time_support │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_support │ ∅ │ ∅ │ ∅ │ │ 1961 │ timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ timestamp_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1114 │ 1114 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_scale │ ∅ │ ∅ │ ∅ │ │ 1965 │ oidlarger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 26 │ 26 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidlarger │ ∅ │ ∅ │ ∅ │ │ 1966 │ oidsmaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 26 │ 26 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidsmaller │ ∅ │ ∅ │ ∅ │ │ 1967 │ timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ timestamp_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1184 │ 1184 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_scale │ ∅ │ ∅ │ ∅ │ │ 1968 │ time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ time_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1083 │ 1083 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_scale │ ∅ │ ∅ │ ∅ │ │ 1969 │ timetz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ time_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1266 │ 1266 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_scale │ ∅ │ ∅ │ ∅ │ │ 2003 │ textanycat │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 25 2776 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select $1 || $2::pg_catalog.text │ ∅ │ ∅ │ ∅ │ │ 2004 │ anytextcat │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 2776 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select $1::pg_catalog.text || $2 │ ∅ │ ∅ │ ∅ │ │ 2005 │ bytealike │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ textlike_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 17 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bytealike │ ∅ │ ∅ │ ∅ │ │ 2006 │ byteanlike │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 17 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteanlike │ ∅ │ ∅ │ ∅ │ │ 2007 │ like │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ textlike_support │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 17 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bytealike │ ∅ │ ∅ │ ∅ │ │ 2008 │ notlike │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 17 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteanlike │ ∅ │ ∅ │ ∅ │ │ 2009 │ like_escape │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 17 │ 17 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ like_escape_bytea │ ∅ │ ∅ │ ∅ │ │ 2010 │ length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteaoctetlen │ ∅ │ ∅ │ ∅ │ │ 2011 │ byteacat │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 17 │ 17 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteacat │ ∅ │ ∅ │ ∅ │ │ 2012 │ substring │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 17 │ 17 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bytea_substr │ ∅ │ ∅ │ ∅ │ │ 2013 │ substring │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 17 │ 17 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bytea_substr_no_len │ ∅ │ ∅ │ ∅ │ │ 2085 │ substr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 17 │ 17 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bytea_substr │ ∅ │ ∅ │ ∅ │ │ 2086 │ substr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 17 │ 17 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bytea_substr_no_len │ ∅ │ ∅ │ ∅ │ │ 2014 │ position │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 17 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteapos │ ∅ │ ∅ │ ∅ │ │ 2015 │ btrim │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 17 │ 17 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteatrim │ ∅ │ ∅ │ ∅ │ │ 2019 │ time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 1083 │ 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_time │ ∅ │ ∅ │ ∅ │ │ 2020 │ date_trunc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1114 │ 25 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_trunc │ ∅ │ ∅ │ ∅ │ │ 2021 │ date_part │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 25 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_part │ ∅ │ ∅ │ ∅ │ │ 2024 │ timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1114 │ 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_timestamp │ ∅ │ ∅ │ ∅ │ │ 2025 │ timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1114 │ 1082 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ datetime_timestamp │ ∅ │ ∅ │ ∅ │ │ 2027 │ timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 1114 │ 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_timestamp │ ∅ │ ∅ │ ∅ │ │ 2028 │ timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 1184 │ 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_timestamptz │ ∅ │ ∅ │ ∅ │ │ 2029 │ date │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1082 │ 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_date │ ∅ │ ∅ │ ∅ │ │ 2031 │ timestamp_mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1186 │ 1114 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_mi │ ∅ │ ∅ │ ∅ │ │ 2032 │ timestamp_pl_interval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1114 │ 1114 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_pl_interval │ ∅ │ ∅ │ ∅ │ │ 2033 │ timestamp_mi_interval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1114 │ 1114 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_mi_interval │ ∅ │ ∅ │ ∅ │ │ 2035 │ timestamp_smaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1114 │ 1114 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_smaller │ ∅ │ ∅ │ ∅ │ │ 2036 │ timestamp_larger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1114 │ 1114 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_larger │ ∅ │ ∅ │ ∅ │ │ 2037 │ timezone │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 2 │ 0 │ 1266 │ 25 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_zone │ ∅ │ ∅ │ ∅ │ │ 2038 │ timezone │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1266 │ 1186 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_izone │ ∅ │ ∅ │ ∅ │ │ 2039 │ timestamp_hash │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_hash │ ∅ │ ∅ │ ∅ │ │ 3411 │ timestamp_hash_extended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 1114 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_hash_extended │ ∅ │ ∅ │ ∅ │ │ 2041 │ overlaps │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 4 │ 0 │ 16 │ 1114 1114 1114 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ overlaps_timestamp │ ∅ │ ∅ │ ∅ │ │ 2042 │ overlaps │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 4 │ 0 │ 16 │ 1114 1186 1114 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select ($1, ($1 + $2)) overlaps ($3, ($3 + $4)) │ ∅ │ ∅ │ ∅ │ │ 2043 │ overlaps │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 4 │ 0 │ 16 │ 1114 1114 1114 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select ($1, $2) overlaps ($3, ($3 + $4)) │ ∅ │ ∅ │ ∅ │ │ 2044 │ overlaps │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 4 │ 0 │ 16 │ 1114 1186 1114 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select ($1, ($1 + $2)) overlaps ($3, $4) │ ∅ │ ∅ │ ∅ │ │ 2045 │ timestamp_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 1114 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_cmp │ ∅ │ ∅ │ ∅ │ │ 3137 │ timestamp_sortsupport │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_sortsupport │ ∅ │ ∅ │ ∅ │ │ 4134 │ in_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 1114 1114 1186 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ in_range_timestamp_interval │ ∅ │ ∅ │ ∅ │ │ 4135 │ in_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 16 │ 1184 1184 1186 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ in_range_timestamptz_interval │ ∅ │ ∅ │ ∅ │ │ 4136 │ in_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 1186 1186 1186 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ in_range_interval_interval │ ∅ │ ∅ │ ∅ │ │ 4137 │ in_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 1083 1083 1186 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ in_range_time_interval │ ∅ │ ∅ │ ∅ │ │ 4138 │ in_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 1266 1266 1186 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ in_range_timetz_interval │ ∅ │ ∅ │ ∅ │ │ 2046 │ time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1083 │ 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_time │ ∅ │ ∅ │ ∅ │ │ 2047 │ timetz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 1266 │ 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_timetz │ ∅ │ ∅ │ ∅ │ │ 2048 │ isfinite │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_finite │ ∅ │ ∅ │ ∅ │ │ 2049 │ to_char │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 1114 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_to_char │ ∅ │ ∅ │ ∅ │ │ 2052 │ timestamp_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1114 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_eq │ ∅ │ ∅ │ ∅ │ │ 2053 │ timestamp_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1114 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_ne │ ∅ │ ∅ │ ∅ │ │ 2054 │ timestamp_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1114 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_lt │ ∅ │ ∅ │ ∅ │ │ 2055 │ timestamp_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1114 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_le │ ∅ │ ∅ │ ∅ │ │ 2056 │ timestamp_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1114 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_ge │ ∅ │ ∅ │ ∅ │ │ 2057 │ timestamp_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1114 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_gt │ ∅ │ ∅ │ ∅ │ │ 2058 │ age │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1186 │ 1114 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_age │ ∅ │ ∅ │ ∅ │ │ 2059 │ age │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 1186 │ 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.age(cast(current_date as timestamp without time zone), $1) │ ∅ │ ∅ │ ∅ │ │ 2069 │ timezone │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1184 │ 25 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_zone │ ∅ │ ∅ │ ∅ │ │ 2070 │ timezone │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1184 │ 1186 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_izone │ ∅ │ ∅ │ ∅ │ │ 2071 │ date_pl_interval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1114 │ 1082 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_pl_interval │ ∅ │ ∅ │ ∅ │ │ 2072 │ date_mi_interval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1114 │ 1082 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_mi_interval │ ∅ │ ∅ │ ∅ │ │ 2073 │ substring │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textregexsubstr │ ∅ │ ∅ │ ∅ │ │ 2074 │ substring │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 25 │ 25 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.substring($1, pg_catalog.similar_to_escape($2, $3)) │ ∅ │ ∅ │ ∅ │ │ 2075 │ bit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1560 │ 20 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bitfromint8 │ ∅ │ ∅ │ ∅ │ │ 2076 │ int8 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bittoint8 │ ∅ │ ∅ │ ∅ │ │ 2077 │ current_setting │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ show_config_by_name │ ∅ │ ∅ │ ∅ │ │ 3294 │ current_setting │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 25 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ show_config_by_name_missing_ok │ ∅ │ ∅ │ ∅ │ │ 2078 │ set_config │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ v │ u │ 3 │ 0 │ 25 │ 25 25 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ set_config_by_name │ ∅ │ ∅ │ ∅ │ │ 2084 │ pg_show_all_settings │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ s │ s │ 0 │ 0 │ 2249 │ │ {25,25,25,25,25,25,25,25,25,25,25,1009,25,25,25,23,16} │ {o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o} │ {name,setting,unit,category,short_desc,extra_desc,context,vartype,source,min_val,max_val,enumvals,boot_val,reset_val,sourcefile,sourceline,pending_restart} │ ∅ │ ∅ │ show_all_settings │ ∅ │ ∅ │ ∅ │ │ 1371 │ pg_lock_status │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ v │ s │ 0 │ 0 │ 2249 │ │ {25,26,26,23,21,25,28,26,26,21,25,23,25,16,16} │ {o,o,o,o,o,o,o,o,o,o,o,o,o,o,o} │ {locktype,database,relation,page,tuple,virtualxid,transactionid,classid,objid,objsubid,virtualtransaction,pid,mode,granted,fastpath} │ ∅ │ ∅ │ pg_lock_status │ ∅ │ ∅ │ ∅ │ │ 2561 │ pg_blocking_pids │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 1007 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_blocking_pids │ ∅ │ ∅ │ ∅ │ │ 3376 │ pg_safe_snapshot_blocking_pids │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 1007 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_safe_snapshot_blocking_pids │ ∅ │ ∅ │ ∅ │ │ 3378 │ pg_isolation_test_session_is_blocked │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 2 │ 0 │ 16 │ 23 1007 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_isolation_test_session_is_blocked │ ∅ │ ∅ │ ∅ │ │ 1065 │ pg_prepared_xact │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ v │ s │ 0 │ 0 │ 2249 │ │ {28,25,1184,26,26} │ {o,o,o,o,o} │ {transaction,gid,prepared,ownerid,dbid} │ ∅ │ ∅ │ pg_prepared_xact │ ∅ │ ∅ │ ∅ │ │ 3819 │ pg_get_multixact_members │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ v │ s │ 1 │ 0 │ 2249 │ 28 │ {28,28,25} │ {i,o,o} │ {multixid,xid,mode} │ ∅ │ ∅ │ pg_get_multixact_members │ ∅ │ ∅ │ ∅ │ │ 3581 │ pg_xact_commit_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 1184 │ 28 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_xact_commit_timestamp │ ∅ │ ∅ │ ∅ │ │ 3583 │ pg_last_committed_xact │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2249 │ │ {28,1184} │ {o,o} │ {xid,timestamp} │ ∅ │ ∅ │ pg_last_committed_xact │ ∅ │ ∅ │ ∅ │ │ 3537 │ pg_describe_object │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 25 │ 26 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_describe_object │ ∅ │ ∅ │ ∅ │ │ 3839 │ pg_identify_object │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 2249 │ 26 26 23 │ {26,26,23,25,25,25,25} │ {i,i,i,o,o,o,o} │ {classid,objid,objsubid,type,schema,name,identity} │ ∅ │ ∅ │ pg_identify_object │ ∅ │ ∅ │ ∅ │ │ 3382 │ pg_identify_object_as_address │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 2249 │ 26 26 23 │ {26,26,23,25,1009,1009} │ {i,i,i,o,o,o} │ {classid,objid,objsubid,type,object_names,object_args} │ ∅ │ ∅ │ pg_identify_object_as_address │ ∅ │ ∅ │ ∅ │ │ 3954 │ pg_get_object_address │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 2249 │ 25 1009 1009 │ {25,1009,1009,26,26,23} │ {i,i,i,o,o,o} │ {type,object_names,object_args,classid,objid,objsubid} │ ∅ │ ∅ │ pg_get_object_address │ ∅ │ ∅ │ ∅ │ │ 2079 │ pg_table_is_visible │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_table_is_visible │ ∅ │ ∅ │ ∅ │ │ 2080 │ pg_type_is_visible │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_type_is_visible │ ∅ │ ∅ │ ∅ │ │ 2081 │ pg_function_is_visible │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_function_is_visible │ ∅ │ ∅ │ ∅ │ │ 2082 │ pg_operator_is_visible │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_operator_is_visible │ ∅ │ ∅ │ ∅ │ │ 2083 │ pg_opclass_is_visible │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_opclass_is_visible │ ∅ │ ∅ │ ∅ │ │ 3829 │ pg_opfamily_is_visible │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_opfamily_is_visible │ ∅ │ ∅ │ ∅ │ │ 2093 │ pg_conversion_is_visible │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_conversion_is_visible │ ∅ │ ∅ │ ∅ │ │ 3403 │ pg_statistics_obj_is_visible │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_statistics_obj_is_visible │ ∅ │ ∅ │ ∅ │ │ 3756 │ pg_ts_parser_is_visible │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_ts_parser_is_visible │ ∅ │ ∅ │ ∅ │ │ 3757 │ pg_ts_dict_is_visible │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_ts_dict_is_visible │ ∅ │ ∅ │ ∅ │ │ 3401 │ pg_hba_file_rules │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ v │ s │ 0 │ 0 │ 2249 │ │ {23,25,1009,1009,25,25,25,1009,25} │ {o,o,o,o,o,o,o,o,o} │ {line_number,type,database,user_name,address,netmask,auth_method,options,error} │ ∅ │ ∅ │ pg_hba_file_rules │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 3768 │ pg_ts_template_is_visible │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_ts_template_is_visible │ ∅ │ ∅ │ ∅ │ │ 3758 │ pg_ts_config_is_visible │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_ts_config_is_visible │ ∅ │ ∅ │ ∅ │ │ 3815 │ pg_collation_is_visible │ 11 │ 10 │ 12 │ 10 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_collation_is_visible │ ∅ │ ∅ │ ∅ │ │ 2854 │ pg_my_temp_schema │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 0 │ 0 │ 26 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_my_temp_schema │ ∅ │ ∅ │ ∅ │ │ 2855 │ pg_is_other_temp_schema │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_is_other_temp_schema │ ∅ │ ∅ │ ∅ │ │ 2171 │ pg_cancel_backend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 16 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_cancel_backend │ ∅ │ ∅ │ ∅ │ │ 2096 │ pg_terminate_backend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 16 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_terminate_backend │ ∅ │ ∅ │ ∅ │ │ 3813 │ pg_is_in_backup │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 16 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_is_in_backup │ ∅ │ ∅ │ ∅ │ │ 3814 │ pg_backup_start_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 0 │ 0 │ 1184 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_backup_start_time │ ∅ │ ∅ │ ∅ │ │ 2849 │ pg_current_wal_lsn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 3220 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_current_wal_lsn │ ∅ │ ∅ │ ∅ │ │ 2852 │ pg_current_wal_insert_lsn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 3220 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_current_wal_insert_lsn │ ∅ │ ∅ │ ∅ │ │ 3330 │ pg_current_wal_flush_lsn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 3220 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_current_wal_flush_lsn │ ∅ │ ∅ │ ∅ │ │ 2850 │ pg_walfile_name_offset │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2249 │ 3220 │ {3220,25,23} │ {i,o,o} │ {lsn,file_name,file_offset} │ ∅ │ ∅ │ pg_walfile_name_offset │ ∅ │ ∅ │ ∅ │ │ 2851 │ pg_walfile_name │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 3220 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_walfile_name │ ∅ │ ∅ │ ∅ │ │ 3165 │ pg_wal_lsn_diff │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 3220 3220 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_wal_lsn_diff │ ∅ │ ∅ │ ∅ │ │ 3809 │ pg_export_snapshot │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 0 │ 0 │ 25 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_export_snapshot │ ∅ │ ∅ │ ∅ │ │ 3810 │ pg_is_in_recovery │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 16 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_is_in_recovery │ ∅ │ ∅ │ ∅ │ │ 3820 │ pg_last_wal_receive_lsn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 3220 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_last_wal_receive_lsn │ ∅ │ ∅ │ ∅ │ │ 3821 │ pg_last_wal_replay_lsn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 3220 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_last_wal_replay_lsn │ ∅ │ ∅ │ ∅ │ │ 3830 │ pg_last_xact_replay_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 1184 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_last_xact_replay_timestamp │ ∅ │ ∅ │ ∅ │ │ 3073 │ pg_is_wal_replay_paused │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 16 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_is_wal_replay_paused │ ∅ │ ∅ │ ∅ │ │ 4099 │ pg_rotate_logfile_old │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 16 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_rotate_logfile │ ∅ │ ∅ │ ∅ │ │ 2624 │ pg_read_file │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 3 │ 0 │ 25 │ 25 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_read_file_off_len │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 2173 │ pg_stop_backup │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 0 │ 0 │ 3220 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stop_backup │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 2623 │ pg_stat_file │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 2249 │ 25 │ {25,20,1184,1184,1184,1184,16} │ {i,o,o,o,o,o,o} │ {filename,size,access,modification,change,creation,isdir} │ ∅ │ ∅ │ pg_stat_file_1arg │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 3307 │ pg_stat_file │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 2 │ 0 │ 2249 │ 25 16 │ {25,16,20,1184,1184,1184,1184,16} │ {i,i,o,o,o,o,o,o} │ {filename,missing_ok,size,access,modification,change,creation,isdir} │ ∅ │ ∅ │ pg_stat_file │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 4100 │ pg_read_file_old │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 3 │ 0 │ 25 │ 25 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_read_file │ ∅ │ ∅ │ ∅ │ │ 2626 │ pg_sleep │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 2278 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_sleep │ ∅ │ ∅ │ ∅ │ │ 3935 │ pg_sleep_for │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 2278 │ 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.pg_sleep(extract(epoch from pg_catalog.clock_timestamp() operator(pg_catalog.+) $1) operator(pg_catalog.-) extract(epoch from pg_catalog.clock_timestamp())) │ ∅ │ ∅ │ ∅ │ │ 3936 │ pg_sleep_until │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 2278 │ 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.pg_sleep(extract(epoch from $1) operator(pg_catalog.-) extract(epoch from pg_catalog.clock_timestamp())) │ ∅ │ ∅ │ ∅ │ │ 315 │ pg_jit_available │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 16 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_jit_available │ ∅ │ ∅ │ ∅ │ │ 2971 │ text │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ booltext │ ∅ │ ∅ │ ∅ │ │ 2100 │ avg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2101 │ avg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2102 │ avg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2103 │ avg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2104 │ avg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2105 │ avg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2106 │ avg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1186 │ 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2107 │ sum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2108 │ sum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 20 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2109 │ sum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 20 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2110 │ sum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 700 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2111 │ sum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2112 │ sum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 790 │ 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2113 │ sum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1186 │ 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2114 │ sum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2115 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 20 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2116 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 23 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2117 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 21 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2118 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 26 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2119 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 700 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2120 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2122 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1082 │ 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2123 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1083 │ 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2124 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1266 │ 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2125 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 790 │ 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2126 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1114 │ 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2127 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1184 │ 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3828 │ pg_read_binary_file │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 17 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_read_binary_file_all │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 2625 │ pg_ls_dir │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ v │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_ls_dir_1arg │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 3297 │ pg_ls_dir │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ v │ s │ 3 │ 0 │ 25 │ 25 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_ls_dir │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 2128 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1186 │ 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2129 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2130 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2050 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 2277 │ 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2244 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1042 │ 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2797 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 27 │ 27 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3564 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 869 │ 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 4189 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 3220 │ 3220 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2131 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 20 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2132 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 23 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2133 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 21 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2134 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 26 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2135 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 700 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2136 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2138 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1082 │ 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2139 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1083 │ 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2140 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1266 │ 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2141 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 790 │ 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2142 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1114 │ 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2143 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1184 │ 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2144 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1186 │ 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2145 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2146 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2051 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 2277 │ 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2245 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1042 │ 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2798 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 27 │ 27 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3565 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 869 │ 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 4190 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 3220 │ 3220 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2147 │ count │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 20 │ 2276 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2803 │ count │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 0 │ 0 │ 20 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2718 │ var_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2719 │ var_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2720 │ var_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2721 │ var_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2722 │ var_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2723 │ var_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2641 │ var_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2642 │ var_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2643 │ var_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2644 │ var_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2645 │ var_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2646 │ var_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2148 │ variance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2149 │ variance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2150 │ variance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2151 │ variance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2152 │ variance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2153 │ variance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2724 │ stddev_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2725 │ stddev_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2726 │ stddev_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2727 │ stddev_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2728 │ stddev_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2729 │ stddev_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2712 │ stddev_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2713 │ stddev_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2714 │ stddev_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2715 │ stddev_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2716 │ stddev_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2717 │ stddev_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2154 │ stddev │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2155 │ stddev │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2156 │ stddev │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2157 │ stddev │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2158 │ stddev │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2159 │ stddev │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1700 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2818 │ regr_count │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 20 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2819 │ regr_sxx │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2820 │ regr_syy │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2821 │ regr_sxy │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2822 │ regr_avgx │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2823 │ regr_avgy │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2824 │ regr_r2 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2825 │ regr_slope │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2826 │ regr_intercept │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2827 │ covar_pop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2828 │ covar_samp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2829 │ corr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2160 │ text_pattern_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_pattern_lt │ ∅ │ ∅ │ ∅ │ │ 2161 │ text_pattern_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_pattern_le │ ∅ │ ∅ │ ∅ │ │ 2163 │ text_pattern_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_pattern_ge │ ∅ │ ∅ │ ∅ │ │ 2164 │ text_pattern_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_pattern_gt │ ∅ │ ∅ │ ∅ │ │ 2166 │ bttext_pattern_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bttext_pattern_cmp │ ∅ │ ∅ │ ∅ │ │ 3332 │ bttext_pattern_sortsupport │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bttext_pattern_sortsupport │ ∅ │ ∅ │ ∅ │ │ 2174 │ bpchar_pattern_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1042 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpchar_pattern_lt │ ∅ │ ∅ │ ∅ │ │ 2175 │ bpchar_pattern_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1042 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpchar_pattern_le │ ∅ │ ∅ │ ∅ │ │ 2177 │ bpchar_pattern_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1042 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpchar_pattern_ge │ ∅ │ ∅ │ ∅ │ │ 2178 │ bpchar_pattern_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1042 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpchar_pattern_gt │ ∅ │ ∅ │ ∅ │ │ 2180 │ btbpchar_pattern_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 1042 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btbpchar_pattern_cmp │ ∅ │ ∅ │ ∅ │ │ 3333 │ btbpchar_pattern_sortsupport │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btbpchar_pattern_sortsupport │ ∅ │ ∅ │ ∅ │ │ 2188 │ btint48cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btint48cmp │ ∅ │ ∅ │ ∅ │ │ 2189 │ btint84cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 20 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btint84cmp │ ∅ │ ∅ │ ∅ │ │ 2190 │ btint24cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 21 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btint24cmp │ ∅ │ ∅ │ ∅ │ │ 2191 │ btint42cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 23 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btint42cmp │ ∅ │ ∅ │ ∅ │ │ 2192 │ btint28cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 21 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btint28cmp │ ∅ │ ∅ │ ∅ │ │ 2193 │ btint82cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 20 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btint82cmp │ ∅ │ ∅ │ ∅ │ │ 2194 │ btfloat48cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 700 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btfloat48cmp │ ∅ │ ∅ │ ∅ │ │ 2195 │ btfloat84cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 701 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btfloat84cmp │ ∅ │ ∅ │ ∅ │ │ 2212 │ regprocedurein │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2202 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regprocedurein │ ∅ │ ∅ │ ∅ │ │ 2213 │ regprocedureout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 2202 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regprocedureout │ ∅ │ ∅ │ ∅ │ │ 2214 │ regoperin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2203 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regoperin │ ∅ │ ∅ │ ∅ │ │ 2215 │ regoperout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 2203 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regoperout │ ∅ │ ∅ │ ∅ │ │ 3492 │ to_regoper │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2203 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_regoper │ ∅ │ ∅ │ ∅ │ │ 3476 │ to_regoperator │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2204 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_regoperator │ ∅ │ ∅ │ ∅ │ │ 2216 │ regoperatorin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2204 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regoperatorin │ ∅ │ ∅ │ ∅ │ │ 2217 │ regoperatorout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 2204 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regoperatorout │ ∅ │ ∅ │ ∅ │ │ 2218 │ regclassin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2205 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regclassin │ ∅ │ ∅ │ ∅ │ │ 2219 │ regclassout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 2205 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regclassout │ ∅ │ ∅ │ ∅ │ │ 3495 │ to_regclass │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2205 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_regclass │ ∅ │ ∅ │ ∅ │ │ 4193 │ regcollationin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 4191 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regcollationin │ ∅ │ ∅ │ ∅ │ │ 4194 │ regcollationout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 4191 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regcollationout │ ∅ │ ∅ │ ∅ │ │ 4195 │ to_regcollation │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 4191 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_regcollation │ ∅ │ ∅ │ ∅ │ │ 2220 │ regtypein │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2206 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regtypein │ ∅ │ ∅ │ ∅ │ │ 2221 │ regtypeout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 2206 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regtypeout │ ∅ │ ∅ │ ∅ │ │ 3493 │ to_regtype │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2206 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_regtype │ ∅ │ ∅ │ ∅ │ │ 1079 │ regclass │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2205 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ text_regclass │ ∅ │ ∅ │ ∅ │ │ 4098 │ regrolein │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 4096 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regrolein │ ∅ │ ∅ │ ∅ │ │ 4092 │ regroleout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 4096 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regroleout │ ∅ │ ∅ │ ∅ │ │ 4093 │ to_regrole │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 4096 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_regrole │ ∅ │ ∅ │ ∅ │ │ 4084 │ regnamespacein │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 4089 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regnamespacein │ ∅ │ ∅ │ ∅ │ │ 4085 │ regnamespaceout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 4089 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regnamespaceout │ ∅ │ ∅ │ ∅ │ │ 4086 │ to_regnamespace │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 4089 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_regnamespace │ ∅ │ ∅ │ ∅ │ │ 2246 │ fmgr_internal_validator │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2278 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ fmgr_internal_validator │ ∅ │ ∅ │ ∅ │ │ 2247 │ fmgr_c_validator │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2278 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ fmgr_c_validator │ ∅ │ ∅ │ ∅ │ │ 2248 │ fmgr_sql_validator │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2278 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ fmgr_sql_validator │ ∅ │ ∅ │ ∅ │ │ 2250 │ has_database_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_database_privilege_name_name │ ∅ │ ∅ │ ∅ │ │ 2251 │ has_database_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_database_privilege_name_id │ ∅ │ ∅ │ ∅ │ │ 2252 │ has_database_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_database_privilege_id_name │ ∅ │ ∅ │ ∅ │ │ 2253 │ has_database_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_database_privilege_id_id │ ∅ │ ∅ │ ∅ │ │ 2254 │ has_database_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_database_privilege_name │ ∅ │ ∅ │ ∅ │ │ 2255 │ has_database_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_database_privilege_id │ ∅ │ ∅ │ ∅ │ │ 2256 │ has_function_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_function_privilege_name_name │ ∅ │ ∅ │ ∅ │ │ 2257 │ has_function_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_function_privilege_name_id │ ∅ │ ∅ │ ∅ │ │ 2258 │ has_function_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_function_privilege_id_name │ ∅ │ ∅ │ ∅ │ │ 2259 │ has_function_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_function_privilege_id_id │ ∅ │ ∅ │ ∅ │ │ 2260 │ has_function_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_function_privilege_name │ ∅ │ ∅ │ ∅ │ │ 2261 │ has_function_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_function_privilege_id │ ∅ │ ∅ │ ∅ │ │ 2262 │ has_language_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_language_privilege_name_name │ ∅ │ ∅ │ ∅ │ │ 2263 │ has_language_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_language_privilege_name_id │ ∅ │ ∅ │ ∅ │ │ 2264 │ has_language_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_language_privilege_id_name │ ∅ │ ∅ │ ∅ │ │ 2265 │ has_language_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_language_privilege_id_id │ ∅ │ ∅ │ ∅ │ │ 2266 │ has_language_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_language_privilege_name │ ∅ │ ∅ │ ∅ │ │ 2267 │ has_language_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_language_privilege_id │ ∅ │ ∅ │ ∅ │ │ 2268 │ has_schema_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_schema_privilege_name_name │ ∅ │ ∅ │ ∅ │ │ 2269 │ has_schema_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_schema_privilege_name_id │ ∅ │ ∅ │ ∅ │ │ 2270 │ has_schema_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_schema_privilege_id_name │ ∅ │ ∅ │ ∅ │ │ 2271 │ has_schema_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_schema_privilege_id_id │ ∅ │ ∅ │ ∅ │ │ 2272 │ has_schema_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_schema_privilege_name │ ∅ │ ∅ │ ∅ │ │ 2273 │ has_schema_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_schema_privilege_id │ ∅ │ ∅ │ ∅ │ │ 2390 │ has_tablespace_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_tablespace_privilege_name_name │ ∅ │ ∅ │ ∅ │ │ 2391 │ has_tablespace_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_tablespace_privilege_name_id │ ∅ │ ∅ │ ∅ │ │ 2392 │ has_tablespace_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_tablespace_privilege_id_name │ ∅ │ ∅ │ ∅ │ │ 2393 │ has_tablespace_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_tablespace_privilege_id_id │ ∅ │ ∅ │ ∅ │ │ 2394 │ has_tablespace_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_tablespace_privilege_name │ ∅ │ ∅ │ ∅ │ │ 2395 │ has_tablespace_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_tablespace_privilege_id │ ∅ │ ∅ │ ∅ │ │ 3000 │ has_foreign_data_wrapper_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_foreign_data_wrapper_privilege_name_name │ ∅ │ ∅ │ ∅ │ │ 3001 │ has_foreign_data_wrapper_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_foreign_data_wrapper_privilege_name_id │ ∅ │ ∅ │ ∅ │ │ 3002 │ has_foreign_data_wrapper_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_foreign_data_wrapper_privilege_id_name │ ∅ │ ∅ │ ∅ │ │ 3003 │ has_foreign_data_wrapper_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_foreign_data_wrapper_privilege_id_id │ ∅ │ ∅ │ ∅ │ │ 3004 │ has_foreign_data_wrapper_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_foreign_data_wrapper_privilege_name │ ∅ │ ∅ │ ∅ │ │ 3005 │ has_foreign_data_wrapper_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_foreign_data_wrapper_privilege_id │ ∅ │ ∅ │ ∅ │ │ 3006 │ has_server_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_server_privilege_name_name │ ∅ │ ∅ │ ∅ │ │ 3007 │ has_server_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_server_privilege_name_id │ ∅ │ ∅ │ ∅ │ │ 3008 │ has_server_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_server_privilege_id_name │ ∅ │ ∅ │ ∅ │ │ 3009 │ has_server_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_server_privilege_id_id │ ∅ │ ∅ │ ∅ │ │ 3010 │ has_server_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_server_privilege_name │ ∅ │ ∅ │ ∅ │ │ 3011 │ has_server_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_server_privilege_id │ ∅ │ ∅ │ ∅ │ │ 3138 │ has_type_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_type_privilege_name_name │ ∅ │ ∅ │ ∅ │ │ 3139 │ has_type_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_type_privilege_name_id │ ∅ │ ∅ │ ∅ │ │ 3140 │ has_type_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_type_privilege_id_name │ ∅ │ ∅ │ ∅ │ │ 3141 │ has_type_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_type_privilege_id_id │ ∅ │ ∅ │ ∅ │ │ 3142 │ has_type_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_type_privilege_name │ ∅ │ ∅ │ ∅ │ │ 3143 │ has_type_privilege │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ has_type_privilege_id │ ∅ │ ∅ │ ∅ │ │ 2705 │ pg_has_role │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_has_role_name_name │ ∅ │ ∅ │ ∅ │ │ 2706 │ pg_has_role │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 19 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_has_role_name_id │ ∅ │ ∅ │ ∅ │ │ 2707 │ pg_has_role │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_has_role_id_name │ ∅ │ ∅ │ ∅ │ │ 2708 │ pg_has_role │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 16 │ 26 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_has_role_id_id │ ∅ │ ∅ │ ∅ │ │ 2709 │ pg_has_role │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 19 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_has_role_name │ ∅ │ ∅ │ ∅ │ │ 2710 │ pg_has_role │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_has_role_id │ ∅ │ ∅ │ ∅ │ │ 1269 │ pg_column_size │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 23 │ 2276 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_column_size │ ∅ │ ∅ │ ∅ │ │ 2322 │ pg_tablespace_size │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_tablespace_size_oid │ ∅ │ ∅ │ ∅ │ │ 2323 │ pg_tablespace_size │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 20 │ 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_tablespace_size_name │ ∅ │ ∅ │ ∅ │ │ 2324 │ pg_database_size │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 20 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_database_size_oid │ ∅ │ ∅ │ ∅ │ │ 2168 │ pg_database_size │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 20 │ 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_database_size_name │ ∅ │ ∅ │ ∅ │ │ 2325 │ pg_relation_size │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 20 │ 2205 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.pg_relation_size($1, 'main') │ ∅ │ ∅ │ ∅ │ │ 2332 │ pg_relation_size │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 2 │ 0 │ 20 │ 2205 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_relation_size │ ∅ │ ∅ │ ∅ │ │ 2286 │ pg_total_relation_size │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 20 │ 2205 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_total_relation_size │ ∅ │ ∅ │ ∅ │ │ 2288 │ pg_size_pretty │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_size_pretty │ ∅ │ ∅ │ ∅ │ │ 3166 │ pg_size_pretty │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_size_pretty_numeric │ ∅ │ ∅ │ ∅ │ │ 3334 │ pg_size_bytes │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_size_bytes │ ∅ │ ∅ │ ∅ │ │ 2997 │ pg_table_size │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 20 │ 2205 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_table_size │ ∅ │ ∅ │ ∅ │ │ 2998 │ pg_indexes_size │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 20 │ 2205 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_indexes_size │ ∅ │ ∅ │ ∅ │ │ 2999 │ pg_relation_filenode │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 26 │ 2205 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_relation_filenode │ ∅ │ ∅ │ ∅ │ │ 3454 │ pg_filenode_relation │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 2205 │ 26 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_filenode_relation │ ∅ │ ∅ │ ∅ │ │ 3034 │ pg_relation_filepath │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 25 │ 2205 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_relation_filepath │ ∅ │ ∅ │ ∅ │ │ 2316 │ postgresql_fdw_validator │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1009 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ postgresql_fdw_validator │ ∅ │ ∅ │ ∅ │ │ 2290 │ record_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 2249 │ 2275 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ record_in │ ∅ │ ∅ │ ∅ │ │ 2291 │ record_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 2249 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ record_out │ ∅ │ ∅ │ ∅ │ │ 2292 │ cstring_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cstring_in │ ∅ │ ∅ │ ∅ │ │ 2293 │ cstring_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cstring_out │ ∅ │ ∅ │ ∅ │ │ 2294 │ any_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2276 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ any_in │ ∅ │ ∅ │ ∅ │ │ 2295 │ any_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 2276 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ any_out │ ∅ │ ∅ │ ∅ │ │ 2296 │ anyarray_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2277 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anyarray_in │ ∅ │ ∅ │ ∅ │ │ 2297 │ anyarray_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anyarray_out │ ∅ │ ∅ │ ∅ │ │ 2298 │ void_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ void_in │ ∅ │ ∅ │ ∅ │ │ 2299 │ void_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 2278 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ void_out │ ∅ │ ∅ │ ∅ │ │ 2300 │ trigger_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 2279 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ trigger_in │ ∅ │ ∅ │ ∅ │ │ 2301 │ trigger_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 2279 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ trigger_out │ ∅ │ ∅ │ ∅ │ │ 3594 │ event_trigger_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 3838 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ event_trigger_in │ ∅ │ ∅ │ ∅ │ │ 3595 │ event_trigger_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 3838 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ event_trigger_out │ ∅ │ ∅ │ ∅ │ │ 2302 │ language_handler_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 2280 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ language_handler_in │ ∅ │ ∅ │ ∅ │ │ 2303 │ language_handler_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 2280 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ language_handler_out │ ∅ │ ∅ │ ∅ │ │ 2304 │ internal_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 2281 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ internal_in │ ∅ │ ∅ │ ∅ │ │ 2305 │ internal_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ internal_out │ ∅ │ ∅ │ ∅ │ │ 2312 │ anyelement_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2283 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anyelement_in │ ∅ │ ∅ │ ∅ │ │ 2313 │ anyelement_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anyelement_out │ ∅ │ ∅ │ ∅ │ │ 2398 │ shell_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 2278 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ shell_in │ ∅ │ ∅ │ ∅ │ │ 2399 │ shell_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 2278 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ shell_out │ ∅ │ ∅ │ ∅ │ │ 2597 │ domain_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 3 │ 0 │ 2276 │ 2275 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ domain_in │ ∅ │ ∅ │ ∅ │ │ 2598 │ domain_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 3 │ 0 │ 2276 │ 2281 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ domain_recv │ ∅ │ ∅ │ ∅ │ │ 2777 │ anynonarray_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2776 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anynonarray_in │ ∅ │ ∅ │ ∅ │ │ 2778 │ anynonarray_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 2776 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anynonarray_out │ ∅ │ ∅ │ ∅ │ │ 3116 │ fdw_handler_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 3115 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ fdw_handler_in │ ∅ │ ∅ │ ∅ │ │ 3117 │ fdw_handler_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 3115 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ fdw_handler_out │ ∅ │ ∅ │ ∅ │ │ 326 │ index_am_handler_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 325 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ index_am_handler_in │ ∅ │ ∅ │ ∅ │ │ 327 │ index_am_handler_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 325 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ index_am_handler_out │ ∅ │ ∅ │ ∅ │ │ 3311 │ tsm_handler_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 3310 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsm_handler_in │ ∅ │ ∅ │ ∅ │ │ 3312 │ tsm_handler_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 3310 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsm_handler_out │ ∅ │ ∅ │ ∅ │ │ 267 │ table_am_handler_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 269 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ table_am_handler_in │ ∅ │ ∅ │ ∅ │ │ 268 │ table_am_handler_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 269 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ table_am_handler_out │ ∅ │ ∅ │ ∅ │ │ 5086 │ anycompatible_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 5077 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anycompatible_in │ ∅ │ ∅ │ ∅ │ │ 5087 │ anycompatible_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 5077 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anycompatible_out │ ∅ │ ∅ │ ∅ │ │ 5088 │ anycompatiblearray_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 5078 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anycompatiblearray_in │ ∅ │ ∅ │ ∅ │ │ 5089 │ anycompatiblearray_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 5078 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anycompatiblearray_out │ ∅ │ ∅ │ ∅ │ │ 5090 │ anycompatiblearray_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 5078 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anycompatiblearray_recv │ ∅ │ ∅ │ ∅ │ │ 5091 │ anycompatiblearray_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 17 │ 5078 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anycompatiblearray_send │ ∅ │ ∅ │ ∅ │ │ 5092 │ anycompatiblenonarray_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 5079 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anycompatiblenonarray_in │ ∅ │ ∅ │ ∅ │ │ 5093 │ anycompatiblenonarray_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 5079 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anycompatiblenonarray_out │ ∅ │ ∅ │ ∅ │ │ 5094 │ anycompatiblerange_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 5080 │ 2275 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anycompatiblerange_in │ ∅ │ ∅ │ ∅ │ │ 5095 │ anycompatiblerange_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 5080 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anycompatiblerange_out │ ∅ │ ∅ │ ∅ │ │ 3313 │ bernoulli │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 3310 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsm_bernoulli_handler │ ∅ │ ∅ │ ∅ │ │ 3314 │ system │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 3310 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsm_system_handler │ ∅ │ ∅ │ ∅ │ │ 2311 │ md5 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ md5_text │ ∅ │ ∅ │ ∅ │ │ 2321 │ md5 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ md5_bytea │ ∅ │ ∅ │ ∅ │ │ 3419 │ sha224 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ sha224_bytea │ ∅ │ ∅ │ ∅ │ │ 3420 │ sha256 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ sha256_bytea │ ∅ │ ∅ │ ∅ │ │ 3421 │ sha384 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ sha384_bytea │ ∅ │ ∅ │ ∅ │ │ 3422 │ sha512 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ sha512_bytea │ ∅ │ ∅ │ ∅ │ │ 2338 │ date_lt_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1082 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_lt_timestamp │ ∅ │ ∅ │ ∅ │ │ 2339 │ date_le_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1082 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_le_timestamp │ ∅ │ ∅ │ ∅ │ │ 2340 │ date_eq_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1082 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_eq_timestamp │ ∅ │ ∅ │ ∅ │ │ 2341 │ date_gt_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1082 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_gt_timestamp │ ∅ │ ∅ │ ∅ │ │ 2342 │ date_ge_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1082 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_ge_timestamp │ ∅ │ ∅ │ ∅ │ │ 2343 │ date_ne_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1082 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_ne_timestamp │ ∅ │ ∅ │ ∅ │ │ 2344 │ date_cmp_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 1082 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_cmp_timestamp │ ∅ │ ∅ │ ∅ │ │ 2351 │ date_lt_timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1082 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_lt_timestamptz │ ∅ │ ∅ │ ∅ │ │ 2352 │ date_le_timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1082 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_le_timestamptz │ ∅ │ ∅ │ ∅ │ │ 2353 │ date_eq_timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1082 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_eq_timestamptz │ ∅ │ ∅ │ ∅ │ │ 2354 │ date_gt_timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1082 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_gt_timestamptz │ ∅ │ ∅ │ ∅ │ │ 2355 │ date_ge_timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1082 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_ge_timestamptz │ ∅ │ ∅ │ ∅ │ │ 2356 │ date_ne_timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1082 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_ne_timestamptz │ ∅ │ ∅ │ ∅ │ │ 2357 │ date_cmp_timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 23 │ 1082 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_cmp_timestamptz │ ∅ │ ∅ │ ∅ │ │ 2364 │ timestamp_lt_date │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1114 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_lt_date │ ∅ │ ∅ │ ∅ │ │ 2365 │ timestamp_le_date │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1114 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_le_date │ ∅ │ ∅ │ ∅ │ │ 2366 │ timestamp_eq_date │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1114 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_eq_date │ ∅ │ ∅ │ ∅ │ │ 2367 │ timestamp_gt_date │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1114 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_gt_date │ ∅ │ ∅ │ ∅ │ │ 2368 │ timestamp_ge_date │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1114 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_ge_date │ ∅ │ ∅ │ ∅ │ │ 2369 │ timestamp_ne_date │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 1114 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_ne_date │ ∅ │ ∅ │ ∅ │ │ 2370 │ timestamp_cmp_date │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 1114 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_cmp_date │ ∅ │ ∅ │ ∅ │ │ 2377 │ timestamptz_lt_date │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1184 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_lt_date │ ∅ │ ∅ │ ∅ │ │ 2378 │ timestamptz_le_date │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1184 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_le_date │ ∅ │ ∅ │ ∅ │ │ 2379 │ timestamptz_eq_date │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1184 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_eq_date │ ∅ │ ∅ │ ∅ │ │ 2380 │ timestamptz_gt_date │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1184 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_gt_date │ ∅ │ ∅ │ ∅ │ │ 2381 │ timestamptz_ge_date │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1184 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_ge_date │ ∅ │ ∅ │ ∅ │ │ 2382 │ timestamptz_ne_date │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1184 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_ne_date │ ∅ │ ∅ │ ∅ │ │ 2383 │ timestamptz_cmp_date │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 23 │ 1184 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_cmp_date │ ∅ │ ∅ │ ∅ │ │ 2520 │ timestamp_lt_timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1114 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_lt_timestamptz │ ∅ │ ∅ │ ∅ │ │ 2521 │ timestamp_le_timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1114 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_le_timestamptz │ ∅ │ ∅ │ ∅ │ │ 2522 │ timestamp_eq_timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1114 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_eq_timestamptz │ ∅ │ ∅ │ ∅ │ │ 2523 │ timestamp_gt_timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1114 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_gt_timestamptz │ ∅ │ ∅ │ ∅ │ │ 2524 │ timestamp_ge_timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1114 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_ge_timestamptz │ ∅ │ ∅ │ ∅ │ │ 2525 │ timestamp_ne_timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1114 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_ne_timestamptz │ ∅ │ ∅ │ ∅ │ │ 2526 │ timestamp_cmp_timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 23 │ 1114 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_cmp_timestamptz │ ∅ │ ∅ │ ∅ │ │ 2527 │ timestamptz_lt_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1184 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_lt_timestamp │ ∅ │ ∅ │ ∅ │ │ 2528 │ timestamptz_le_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1184 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_le_timestamp │ ∅ │ ∅ │ ∅ │ │ 2529 │ timestamptz_eq_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1184 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_eq_timestamp │ ∅ │ ∅ │ ∅ │ │ 2530 │ timestamptz_gt_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1184 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_gt_timestamp │ ∅ │ ∅ │ ∅ │ │ 2531 │ timestamptz_ge_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1184 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_ge_timestamp │ ∅ │ ∅ │ ∅ │ │ 2532 │ timestamptz_ne_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 1184 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_ne_timestamp │ ∅ │ ∅ │ ∅ │ │ 2533 │ timestamptz_cmp_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 23 │ 1184 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_cmp_timestamp │ ∅ │ ∅ │ ∅ │ │ 2400 │ array_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 2277 │ 2281 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_recv │ ∅ │ ∅ │ ∅ │ │ 2401 │ array_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 17 │ 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_send │ ∅ │ ∅ │ ∅ │ │ 2402 │ record_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 2249 │ 2281 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ record_recv │ ∅ │ ∅ │ ∅ │ │ 2403 │ record_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 17 │ 2249 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ record_send │ ∅ │ ∅ │ ∅ │ │ 2404 │ int2recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 21 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2recv │ ∅ │ ∅ │ ∅ │ │ 2405 │ int2send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2send │ ∅ │ ∅ │ ∅ │ │ 2406 │ int4recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4recv │ ∅ │ ∅ │ ∅ │ │ 2407 │ int4send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4send │ ∅ │ ∅ │ ∅ │ │ 2408 │ int8recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8recv │ ∅ │ ∅ │ ∅ │ │ 2409 │ int8send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8send │ ∅ │ ∅ │ ∅ │ │ 2410 │ int2vectorrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 22 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2vectorrecv │ ∅ │ ∅ │ ∅ │ │ 2411 │ int2vectorsend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 22 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int2vectorsend │ ∅ │ ∅ │ ∅ │ │ 2412 │ bytearecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bytearecv │ ∅ │ ∅ │ ∅ │ │ 2413 │ byteasend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ byteasend │ ∅ │ ∅ │ ∅ │ │ 2414 │ textrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 25 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textrecv │ ∅ │ ∅ │ ∅ │ │ 2415 │ textsend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 17 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ textsend │ ∅ │ ∅ │ ∅ │ │ 2416 │ unknownrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 705 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ unknownrecv │ ∅ │ ∅ │ ∅ │ │ 2417 │ unknownsend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 705 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ unknownsend │ ∅ │ ∅ │ ∅ │ │ 2418 │ oidrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 26 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidrecv │ ∅ │ ∅ │ ∅ │ │ 2419 │ oidsend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidsend │ ∅ │ ∅ │ ∅ │ │ 2420 │ oidvectorrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 30 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidvectorrecv │ ∅ │ ∅ │ ∅ │ │ 2421 │ oidvectorsend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 30 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ oidvectorsend │ ∅ │ ∅ │ ∅ │ │ 2422 │ namerecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 19 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ namerecv │ ∅ │ ∅ │ ∅ │ │ 2423 │ namesend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 17 │ 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ namesend │ ∅ │ ∅ │ ∅ │ │ 2424 │ float4recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 700 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4recv │ ∅ │ ∅ │ ∅ │ │ 2425 │ float4send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float4send │ ∅ │ ∅ │ ∅ │ │ 2426 │ float8recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 701 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8recv │ ∅ │ ∅ │ ∅ │ │ 2427 │ float8send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ float8send │ ∅ │ ∅ │ ∅ │ │ 2428 │ point_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 600 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_recv │ ∅ │ ∅ │ ∅ │ │ 2429 │ point_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 600 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ point_send │ ∅ │ ∅ │ ∅ │ │ 2430 │ bpcharrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 1042 │ 2281 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpcharrecv │ ∅ │ ∅ │ ∅ │ │ 2431 │ bpcharsend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 17 │ 1042 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bpcharsend │ ∅ │ ∅ │ ∅ │ │ 2432 │ varcharrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 1043 │ 2281 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ varcharrecv │ ∅ │ ∅ │ ∅ │ │ 2433 │ varcharsend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 17 │ 1043 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ varcharsend │ ∅ │ ∅ │ ∅ │ │ 2434 │ charrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 18 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ charrecv │ ∅ │ ∅ │ ∅ │ │ 2435 │ charsend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 18 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ charsend │ ∅ │ ∅ │ ∅ │ │ 2436 │ boolrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ boolrecv │ ∅ │ ∅ │ ∅ │ │ 2437 │ boolsend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ boolsend │ ∅ │ ∅ │ ∅ │ │ 2438 │ tidrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 27 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tidrecv │ ∅ │ ∅ │ ∅ │ │ 2439 │ tidsend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 27 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tidsend │ ∅ │ ∅ │ ∅ │ │ 2440 │ xidrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 28 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xidrecv │ ∅ │ ∅ │ ∅ │ │ 2441 │ xidsend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 28 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xidsend │ ∅ │ ∅ │ ∅ │ │ 2442 │ cidrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 29 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cidrecv │ ∅ │ ∅ │ ∅ │ │ 2443 │ cidsend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 29 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cidsend │ ∅ │ ∅ │ ∅ │ │ 2444 │ regprocrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 24 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regprocrecv │ ∅ │ ∅ │ ∅ │ │ 2445 │ regprocsend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 24 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regprocsend │ ∅ │ ∅ │ ∅ │ │ 2446 │ regprocedurerecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2202 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regprocedurerecv │ ∅ │ ∅ │ ∅ │ │ 2447 │ regproceduresend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 2202 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regproceduresend │ ∅ │ ∅ │ ∅ │ │ 2448 │ regoperrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2203 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regoperrecv │ ∅ │ ∅ │ ∅ │ │ 2449 │ regopersend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 2203 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regopersend │ ∅ │ ∅ │ ∅ │ │ 2450 │ regoperatorrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2204 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regoperatorrecv │ ∅ │ ∅ │ ∅ │ │ 2451 │ regoperatorsend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 2204 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regoperatorsend │ ∅ │ ∅ │ ∅ │ │ 2452 │ regclassrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2205 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regclassrecv │ ∅ │ ∅ │ ∅ │ │ 2453 │ regclasssend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 2205 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regclasssend │ ∅ │ ∅ │ ∅ │ │ 4196 │ regcollationrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 4191 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regcollationrecv │ ∅ │ ∅ │ ∅ │ │ 4197 │ regcollationsend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 4191 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regcollationsend │ ∅ │ ∅ │ ∅ │ │ 2454 │ regtyperecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2206 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regtyperecv │ ∅ │ ∅ │ ∅ │ │ 2455 │ regtypesend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 2206 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regtypesend │ ∅ │ ∅ │ ∅ │ │ 4094 │ regrolerecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 4096 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regrolerecv │ ∅ │ ∅ │ ∅ │ │ 4095 │ regrolesend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 4096 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regrolesend │ ∅ │ ∅ │ ∅ │ │ 4087 │ regnamespacerecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 4089 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regnamespacerecv │ ∅ │ ∅ │ ∅ │ │ 4088 │ regnamespacesend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 4089 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regnamespacesend │ ∅ │ ∅ │ ∅ │ │ 2456 │ bit_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1560 │ 2281 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bit_recv │ ∅ │ ∅ │ ∅ │ │ 2457 │ bit_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bit_send │ ∅ │ ∅ │ ∅ │ │ 2458 │ varbit_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1562 │ 2281 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ varbit_recv │ ∅ │ ∅ │ ∅ │ │ 2459 │ varbit_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 1562 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ varbit_send │ ∅ │ ∅ │ ∅ │ │ 2460 │ numeric_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1700 │ 2281 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_recv │ ∅ │ ∅ │ ∅ │ │ 2461 │ numeric_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numeric_send │ ∅ │ ∅ │ ∅ │ │ 2468 │ date_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1082 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_recv │ ∅ │ ∅ │ ∅ │ │ 2469 │ date_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ date_send │ ∅ │ ∅ │ ∅ │ │ 2470 │ time_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1083 │ 2281 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_recv │ ∅ │ ∅ │ ∅ │ │ 2471 │ time_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 1083 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ time_send │ ∅ │ ∅ │ ∅ │ │ 2472 │ timetz_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1266 │ 2281 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_recv │ ∅ │ ∅ │ ∅ │ │ 2473 │ timetz_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timetz_send │ ∅ │ ∅ │ ∅ │ │ 2474 │ timestamp_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1114 │ 2281 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_recv │ ∅ │ ∅ │ ∅ │ │ 2475 │ timestamp_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamp_send │ ∅ │ ∅ │ ∅ │ │ 2476 │ timestamptz_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1184 │ 2281 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_recv │ ∅ │ ∅ │ ∅ │ │ 2477 │ timestamptz_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ timestamptz_send │ ∅ │ ∅ │ ∅ │ │ 2478 │ interval_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1186 │ 2281 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_recv │ ∅ │ ∅ │ ∅ │ │ 2479 │ interval_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ interval_send │ ∅ │ ∅ │ ∅ │ │ 2480 │ lseg_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 601 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_recv │ ∅ │ ∅ │ ∅ │ │ 2481 │ lseg_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 601 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lseg_send │ ∅ │ ∅ │ ∅ │ │ 2482 │ path_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 602 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_recv │ ∅ │ ∅ │ ∅ │ │ 2483 │ path_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 602 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ path_send │ ∅ │ ∅ │ ∅ │ │ 2484 │ box_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 603 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_recv │ ∅ │ ∅ │ ∅ │ │ 2485 │ box_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_send │ ∅ │ ∅ │ ∅ │ │ 2486 │ poly_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 604 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_recv │ ∅ │ ∅ │ ∅ │ │ 2487 │ poly_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_send │ ∅ │ ∅ │ ∅ │ │ 2488 │ line_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 628 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ line_recv │ ∅ │ ∅ │ ∅ │ │ 2489 │ line_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 628 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ line_send │ ∅ │ ∅ │ ∅ │ │ 2490 │ circle_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 718 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_recv │ ∅ │ ∅ │ ∅ │ │ 2491 │ circle_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_send │ ∅ │ ∅ │ ∅ │ │ 2492 │ cash_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 790 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_recv │ ∅ │ ∅ │ ∅ │ │ 2493 │ cash_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 790 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cash_send │ ∅ │ ∅ │ ∅ │ │ 2494 │ macaddr_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 829 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr_recv │ ∅ │ ∅ │ ∅ │ │ 2495 │ macaddr_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 829 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr_send │ ∅ │ ∅ │ ∅ │ │ 2496 │ inet_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 869 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_recv │ ∅ │ ∅ │ ∅ │ │ 2497 │ inet_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 869 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ inet_send │ ∅ │ ∅ │ ∅ │ │ 2498 │ cidr_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 650 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cidr_recv │ ∅ │ ∅ │ ∅ │ │ 2499 │ cidr_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 650 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cidr_send │ ∅ │ ∅ │ ∅ │ │ 2500 │ cstring_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cstring_recv │ ∅ │ ∅ │ ∅ │ │ 2501 │ cstring_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 17 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ cstring_send │ ∅ │ ∅ │ ∅ │ │ 2502 │ anyarray_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2277 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anyarray_recv │ ∅ │ ∅ │ ∅ │ │ 2503 │ anyarray_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 17 │ 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anyarray_send │ ∅ │ ∅ │ ∅ │ │ 3120 │ void_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ void_recv │ ∅ │ ∅ │ ∅ │ │ 3121 │ void_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 2278 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ void_send │ ∅ │ ∅ │ ∅ │ │ 3446 │ macaddr8_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 774 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr8_recv │ ∅ │ ∅ │ ∅ │ │ 3447 │ macaddr8_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 774 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ macaddr8_send │ ∅ │ ∅ │ ∅ │ │ 2504 │ pg_get_ruledef │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 26 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_ruledef_ext │ ∅ │ ∅ │ ∅ │ │ 2505 │ pg_get_viewdef │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 2 │ 0 │ 25 │ 25 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_viewdef_name_ext │ ∅ │ ∅ │ ∅ │ │ 2506 │ pg_get_viewdef │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 2 │ 0 │ 25 │ 26 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_viewdef_ext │ ∅ │ ∅ │ ∅ │ │ 3159 │ pg_get_viewdef │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 2 │ 0 │ 25 │ 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_viewdef_wrap │ ∅ │ ∅ │ ∅ │ │ 2507 │ pg_get_indexdef │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 25 │ 26 23 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_indexdef_ext │ ∅ │ ∅ │ ∅ │ │ 2508 │ pg_get_constraintdef │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 26 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_constraintdef_ext │ ∅ │ ∅ │ ∅ │ │ 2509 │ pg_get_expr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 25 │ 194 26 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_expr_ext │ ∅ │ ∅ │ ∅ │ │ 2510 │ pg_prepared_statement │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ s │ r │ 0 │ 0 │ 2249 │ │ {25,25,1184,2211,16} │ {o,o,o,o,o} │ {name,statement,prepare_time,parameter_types,from_sql} │ ∅ │ ∅ │ pg_prepared_statement │ ∅ │ ∅ │ ∅ │ │ 2511 │ pg_cursor │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ s │ r │ 0 │ 0 │ 2249 │ │ {25,25,16,16,16,1184} │ {o,o,o,o,o,o} │ {name,statement,is_holdable,is_binary,is_scrollable,creation_time} │ ∅ │ ∅ │ pg_cursor │ ∅ │ ∅ │ ∅ │ │ 2599 │ pg_timezone_abbrevs │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ s │ s │ 0 │ 0 │ 2249 │ │ {25,1186,16} │ {o,o,o} │ {abbrev,utc_offset,is_dst} │ ∅ │ ∅ │ pg_timezone_abbrevs │ ∅ │ ∅ │ ∅ │ │ 2856 │ pg_timezone_names │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ s │ s │ 0 │ 0 │ 2249 │ │ {25,25,1186,16} │ {o,o,o,o} │ {name,abbrev,utc_offset,is_dst} │ ∅ │ ∅ │ pg_timezone_names │ ∅ │ ∅ │ ∅ │ │ 2730 │ pg_get_triggerdef │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 26 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_get_triggerdef_ext │ ∅ │ ∅ │ ∅ │ │ 3035 │ pg_listening_channels │ 11 │ 10 │ 12 │ 1 │ 10 │ 0 │ - │ f │ f │ f │ t │ t │ s │ r │ 0 │ 0 │ 25 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_listening_channels │ ∅ │ ∅ │ ∅ │ │ 3036 │ pg_notify │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ v │ r │ 2 │ 0 │ 2278 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_notify │ ∅ │ ∅ │ ∅ │ │ 3296 │ pg_notification_queue_usage │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 0 │ 0 │ 701 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_notification_queue_usage │ ∅ │ ∅ │ ∅ │ │ 1066 │ generate_series │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ generate_series_int4_support │ f │ f │ f │ t │ t │ i │ s │ 3 │ 0 │ 23 │ 23 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ generate_series_step_int4 │ ∅ │ ∅ │ ∅ │ │ 1067 │ generate_series │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ generate_series_int4_support │ f │ f │ f │ t │ t │ i │ s │ 2 │ 0 │ 23 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ generate_series_int4 │ ∅ │ ∅ │ ∅ │ │ 3994 │ generate_series_int4_support │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ generate_series_int4_support │ ∅ │ ∅ │ ∅ │ │ 1068 │ generate_series │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ generate_series_int8_support │ f │ f │ f │ t │ t │ i │ s │ 3 │ 0 │ 20 │ 20 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ generate_series_step_int8 │ ∅ │ ∅ │ ∅ │ │ 1069 │ generate_series │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ generate_series_int8_support │ f │ f │ f │ t │ t │ i │ s │ 2 │ 0 │ 20 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ generate_series_int8 │ ∅ │ ∅ │ ∅ │ │ 3995 │ generate_series_int8_support │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ generate_series_int8_support │ ∅ │ ∅ │ ∅ │ │ 3259 │ generate_series │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 3 │ 0 │ 1700 │ 1700 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ generate_series_step_numeric │ ∅ │ ∅ │ ∅ │ │ 3260 │ generate_series │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 2 │ 0 │ 1700 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ generate_series_numeric │ ∅ │ ∅ │ ∅ │ │ 938 │ generate_series │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 3 │ 0 │ 1114 │ 1114 1114 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ generate_series_timestamp │ ∅ │ ∅ │ ∅ │ │ 939 │ generate_series │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ s │ s │ 3 │ 0 │ 1184 │ 1184 1184 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ generate_series_timestamptz │ ∅ │ ∅ │ ∅ │ │ 2515 │ booland_statefunc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ booland_statefunc │ ∅ │ ∅ │ ∅ │ │ 2516 │ boolor_statefunc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 16 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ boolor_statefunc │ ∅ │ ∅ │ ∅ │ │ 3496 │ bool_accum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bool_accum │ ∅ │ ∅ │ ∅ │ │ 3497 │ bool_accum_inv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bool_accum_inv │ ∅ │ ∅ │ ∅ │ │ 3498 │ bool_alltrue │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bool_alltrue │ ∅ │ ∅ │ ∅ │ │ 3499 │ bool_anytrue │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bool_anytrue │ ∅ │ ∅ │ ∅ │ │ 2517 │ bool_and │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 16 │ 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2518 │ bool_or │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 16 │ 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2519 │ every │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 16 │ 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2236 │ bit_and │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 21 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2237 │ bit_or │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 21 │ 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2238 │ bit_and │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 23 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2239 │ bit_or │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 23 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2240 │ bit_and │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 20 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2241 │ bit_or │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 20 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2242 │ bit_and │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1560 │ 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2243 │ bit_or │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 1560 │ 1560 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2546 │ interval_pl_date │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1114 │ 1186 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select $2 + $1 │ ∅ │ ∅ │ ∅ │ │ 2547 │ interval_pl_timetz │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1266 │ 1186 1266 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select $2 + $1 │ ∅ │ ∅ │ ∅ │ │ 2548 │ interval_pl_timestamp │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1114 │ 1186 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select $2 + $1 │ ∅ │ ∅ │ ∅ │ │ 2549 │ interval_pl_timestamptz │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 1184 │ 1186 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select $2 + $1 │ ∅ │ ∅ │ ∅ │ │ 2550 │ integer_pl_date │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1082 │ 23 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select $2 + $1 │ ∅ │ ∅ │ ∅ │ │ 2556 │ pg_tablespace_databases │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ s │ s │ 1 │ 0 │ 26 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_tablespace_databases │ ∅ │ ∅ │ ∅ │ │ 2557 │ bool │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4_bool │ ∅ │ ∅ │ ∅ │ │ 2558 │ int4 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ bool_int4 │ ∅ │ ∅ │ ∅ │ │ 2559 │ lastval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 0 │ 0 │ 20 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ lastval │ ∅ │ ∅ │ ∅ │ │ 2560 │ pg_postmaster_start_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 0 │ 0 │ 1184 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_postmaster_start_time │ ∅ │ ∅ │ ∅ │ │ 2034 │ pg_conf_load_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 0 │ 0 │ 1184 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_conf_load_time │ ∅ │ ∅ │ ∅ │ │ 2562 │ box_below │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_below │ ∅ │ ∅ │ ∅ │ │ 2563 │ box_overbelow │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_overbelow │ ∅ │ ∅ │ ∅ │ │ 2564 │ box_overabove │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_overabove │ ∅ │ ∅ │ ∅ │ │ 2565 │ box_above │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 603 603 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ box_above │ ∅ │ ∅ │ ∅ │ │ 2566 │ poly_below │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 604 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_below │ ∅ │ ∅ │ ∅ │ │ 2567 │ poly_overbelow │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 604 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_overbelow │ ∅ │ ∅ │ ∅ │ │ 2568 │ poly_overabove │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 604 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_overabove │ ∅ │ ∅ │ ∅ │ │ 2569 │ poly_above │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 604 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ poly_above │ ∅ │ ∅ │ ∅ │ │ 2587 │ circle_overbelow │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_overbelow │ ∅ │ ∅ │ ∅ │ │ 2588 │ circle_overabove │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 718 718 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ circle_overabove │ ∅ │ ∅ │ ∅ │ │ 2578 │ gist_box_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 2281 603 21 26 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gist_box_consistent │ ∅ │ ∅ │ ∅ │ │ 2581 │ gist_box_penalty │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 2281 │ 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gist_box_penalty │ ∅ │ ∅ │ ∅ │ │ 2582 │ gist_box_picksplit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gist_box_picksplit │ ∅ │ ∅ │ ∅ │ │ 2583 │ gist_box_union │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 603 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gist_box_union │ ∅ │ ∅ │ ∅ │ │ 2584 │ gist_box_same │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 2281 │ 603 603 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gist_box_same │ ∅ │ ∅ │ ∅ │ │ 3998 │ gist_box_distance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 701 │ 2281 603 21 26 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gist_box_distance │ ∅ │ ∅ │ ∅ │ │ 2585 │ gist_poly_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 2281 604 21 26 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gist_poly_consistent │ ∅ │ ∅ │ ∅ │ │ 2586 │ gist_poly_compress │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gist_poly_compress │ ∅ │ ∅ │ ∅ │ │ 2591 │ gist_circle_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 2281 718 21 26 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gist_circle_consistent │ ∅ │ ∅ │ ∅ │ │ 2592 │ gist_circle_compress │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gist_circle_compress │ ∅ │ ∅ │ ∅ │ │ 1030 │ gist_point_compress │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gist_point_compress │ ∅ │ ∅ │ ∅ │ │ 3282 │ gist_point_fetch │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gist_point_fetch │ ∅ │ ∅ │ ∅ │ │ 2179 │ gist_point_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 2281 600 21 26 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gist_point_consistent │ ∅ │ ∅ │ ∅ │ │ 3064 │ gist_point_distance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 701 │ 2281 600 21 26 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gist_point_distance │ ∅ │ ∅ │ ∅ │ │ 3280 │ gist_circle_distance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 701 │ 2281 718 21 26 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gist_circle_distance │ ∅ │ ∅ │ ∅ │ │ 3288 │ gist_poly_distance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 701 │ 2281 604 21 26 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gist_poly_distance │ ∅ │ ∅ │ ∅ │ │ 2743 │ ginarrayextract │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 2281 │ 2277 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ginarrayextract │ ∅ │ ∅ │ ∅ │ │ 2774 │ ginqueryarrayextract │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 7 │ 0 │ 2281 │ 2277 2281 21 2281 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ginqueryarrayextract │ ∅ │ ∅ │ ∅ │ │ 2744 │ ginarrayconsistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 8 │ 0 │ 16 │ 2281 21 2277 23 2281 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ginarrayconsistent │ ∅ │ ∅ │ ∅ │ │ 3920 │ ginarraytriconsistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 7 │ 0 │ 18 │ 2281 21 2277 23 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ginarraytriconsistent │ ∅ │ ∅ │ ∅ │ │ 3076 │ ginarrayextract │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2281 │ 2277 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ginarrayextract_2args │ ∅ │ ∅ │ ∅ │ │ 2747 │ arrayoverlap │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2277 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ arrayoverlap │ ∅ │ ∅ │ ∅ │ │ 2748 │ arraycontains │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2277 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ arraycontains │ ∅ │ ∅ │ ∅ │ │ 2749 │ arraycontained │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2277 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ arraycontained │ ∅ │ ∅ │ ∅ │ │ 3383 │ brin_minmax_opcinfo │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ brin_minmax_opcinfo │ ∅ │ ∅ │ ∅ │ │ 3384 │ brin_minmax_add_value │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 16 │ 2281 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ brin_minmax_add_value │ ∅ │ ∅ │ ∅ │ │ 3385 │ brin_minmax_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 16 │ 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ brin_minmax_consistent │ ∅ │ ∅ │ ∅ │ │ 3386 │ brin_minmax_union │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 16 │ 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ brin_minmax_union │ ∅ │ ∅ │ ∅ │ │ 4105 │ brin_inclusion_opcinfo │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ brin_inclusion_opcinfo │ ∅ │ ∅ │ ∅ │ │ 4106 │ brin_inclusion_add_value │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 16 │ 2281 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ brin_inclusion_add_value │ ∅ │ ∅ │ ∅ │ │ 4107 │ brin_inclusion_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 16 │ 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ brin_inclusion_consistent │ ∅ │ ∅ │ ∅ │ │ 4108 │ brin_inclusion_union │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 16 │ 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ brin_inclusion_union │ ∅ │ ∅ │ ∅ │ │ 2880 │ pg_advisory_lock │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 2278 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_advisory_lock_int8 │ ∅ │ ∅ │ ∅ │ │ 3089 │ pg_advisory_xact_lock │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 2278 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_advisory_xact_lock_int8 │ ∅ │ ∅ │ ∅ │ │ 2881 │ pg_advisory_lock_shared │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 2278 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_advisory_lock_shared_int8 │ ∅ │ ∅ │ ∅ │ │ 3090 │ pg_advisory_xact_lock_shared │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 2278 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_advisory_xact_lock_shared_int8 │ ∅ │ ∅ │ ∅ │ │ 2882 │ pg_try_advisory_lock │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 16 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_try_advisory_lock_int8 │ ∅ │ ∅ │ ∅ │ │ 3091 │ pg_try_advisory_xact_lock │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 16 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_try_advisory_xact_lock_int8 │ ∅ │ ∅ │ ∅ │ │ 2883 │ pg_try_advisory_lock_shared │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 16 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_try_advisory_lock_shared_int8 │ ∅ │ ∅ │ ∅ │ │ 3092 │ pg_try_advisory_xact_lock_shared │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 16 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_try_advisory_xact_lock_shared_int8 │ ∅ │ ∅ │ ∅ │ │ 2884 │ pg_advisory_unlock │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 16 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_advisory_unlock_int8 │ ∅ │ ∅ │ ∅ │ │ 2885 │ pg_advisory_unlock_shared │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 16 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_advisory_unlock_shared_int8 │ ∅ │ ∅ │ ∅ │ │ 2886 │ pg_advisory_lock │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 2 │ 0 │ 2278 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_advisory_lock_int4 │ ∅ │ ∅ │ ∅ │ │ 3093 │ pg_advisory_xact_lock │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 2 │ 0 │ 2278 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_advisory_xact_lock_int4 │ ∅ │ ∅ │ ∅ │ │ 2887 │ pg_advisory_lock_shared │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 2 │ 0 │ 2278 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_advisory_lock_shared_int4 │ ∅ │ ∅ │ ∅ │ │ 3094 │ pg_advisory_xact_lock_shared │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 2 │ 0 │ 2278 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_advisory_xact_lock_shared_int4 │ ∅ │ ∅ │ ∅ │ │ 2888 │ pg_try_advisory_lock │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 2 │ 0 │ 16 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_try_advisory_lock_int4 │ ∅ │ ∅ │ ∅ │ │ 3095 │ pg_try_advisory_xact_lock │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 2 │ 0 │ 16 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_try_advisory_xact_lock_int4 │ ∅ │ ∅ │ ∅ │ │ 2889 │ pg_try_advisory_lock_shared │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 2 │ 0 │ 16 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_try_advisory_lock_shared_int4 │ ∅ │ ∅ │ ∅ │ │ 3096 │ pg_try_advisory_xact_lock_shared │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 2 │ 0 │ 16 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_try_advisory_xact_lock_shared_int4 │ ∅ │ ∅ │ ∅ │ │ 2890 │ pg_advisory_unlock │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 2 │ 0 │ 16 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_advisory_unlock_int4 │ ∅ │ ∅ │ ∅ │ │ 2891 │ pg_advisory_unlock_shared │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 2 │ 0 │ 16 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_advisory_unlock_shared_int4 │ ∅ │ ∅ │ ∅ │ │ 2892 │ pg_advisory_unlock_all │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 0 │ 0 │ 2278 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_advisory_unlock_all │ ∅ │ ∅ │ ∅ │ │ 2893 │ xml_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 142 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xml_in │ ∅ │ ∅ │ ∅ │ │ 2894 │ xml_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 142 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xml_out │ ∅ │ ∅ │ ∅ │ │ 2895 │ xmlcomment │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 142 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xmlcomment │ ∅ │ ∅ │ ∅ │ │ 2896 │ xml │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 142 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ texttoxml │ ∅ │ ∅ │ ∅ │ │ 2897 │ xmlvalidate │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 142 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xmlvalidate │ ∅ │ ∅ │ ∅ │ │ 2898 │ xml_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 142 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xml_recv │ ∅ │ ∅ │ ∅ │ │ 2899 │ xml_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 17 │ 142 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xml_send │ ∅ │ ∅ │ ∅ │ │ 2900 │ xmlconcat2 │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 142 │ 142 142 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xmlconcat2 │ ∅ │ ∅ │ ∅ │ │ 2901 │ xmlagg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 142 │ 142 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 2922 │ text │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 142 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xmltotext │ ∅ │ ∅ │ ∅ │ │ 2923 │ table_to_xml │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 4 │ 0 │ 142 │ 2205 16 16 25 │ ∅ │ ∅ │ {tbl,nulls,tableforest,targetns} │ ∅ │ ∅ │ table_to_xml │ ∅ │ ∅ │ ∅ │ │ 2924 │ query_to_xml │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 4 │ 0 │ 142 │ 25 16 16 25 │ ∅ │ ∅ │ {query,nulls,tableforest,targetns} │ ∅ │ ∅ │ query_to_xml │ ∅ │ ∅ │ ∅ │ │ 2925 │ cursor_to_xml │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 5 │ 0 │ 142 │ 1790 23 16 16 25 │ ∅ │ ∅ │ {cursor,count,nulls,tableforest,targetns} │ ∅ │ ∅ │ cursor_to_xml │ ∅ │ ∅ │ ∅ │ │ 2926 │ table_to_xmlschema │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 4 │ 0 │ 142 │ 2205 16 16 25 │ ∅ │ ∅ │ {tbl,nulls,tableforest,targetns} │ ∅ │ ∅ │ table_to_xmlschema │ ∅ │ ∅ │ ∅ │ │ 2927 │ query_to_xmlschema │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 4 │ 0 │ 142 │ 25 16 16 25 │ ∅ │ ∅ │ {query,nulls,tableforest,targetns} │ ∅ │ ∅ │ query_to_xmlschema │ ∅ │ ∅ │ ∅ │ │ 2928 │ cursor_to_xmlschema │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 4 │ 0 │ 142 │ 1790 16 16 25 │ ∅ │ ∅ │ {cursor,nulls,tableforest,targetns} │ ∅ │ ∅ │ cursor_to_xmlschema │ ∅ │ ∅ │ ∅ │ │ 2929 │ table_to_xml_and_xmlschema │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 4 │ 0 │ 142 │ 2205 16 16 25 │ ∅ │ ∅ │ {tbl,nulls,tableforest,targetns} │ ∅ │ ∅ │ table_to_xml_and_xmlschema │ ∅ │ ∅ │ ∅ │ │ 2930 │ query_to_xml_and_xmlschema │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 4 │ 0 │ 142 │ 25 16 16 25 │ ∅ │ ∅ │ {query,nulls,tableforest,targetns} │ ∅ │ ∅ │ query_to_xml_and_xmlschema │ ∅ │ ∅ │ ∅ │ │ 2933 │ schema_to_xml │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 4 │ 0 │ 142 │ 19 16 16 25 │ ∅ │ ∅ │ {schema,nulls,tableforest,targetns} │ ∅ │ ∅ │ schema_to_xml │ ∅ │ ∅ │ ∅ │ │ 2934 │ schema_to_xmlschema │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 4 │ 0 │ 142 │ 19 16 16 25 │ ∅ │ ∅ │ {schema,nulls,tableforest,targetns} │ ∅ │ ∅ │ schema_to_xmlschema │ ∅ │ ∅ │ ∅ │ │ 2935 │ schema_to_xml_and_xmlschema │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 4 │ 0 │ 142 │ 19 16 16 25 │ ∅ │ ∅ │ {schema,nulls,tableforest,targetns} │ ∅ │ ∅ │ schema_to_xml_and_xmlschema │ ∅ │ ∅ │ ∅ │ │ 2936 │ database_to_xml │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 3 │ 0 │ 142 │ 16 16 25 │ ∅ │ ∅ │ {nulls,tableforest,targetns} │ ∅ │ ∅ │ database_to_xml │ ∅ │ ∅ │ ∅ │ │ 2937 │ database_to_xmlschema │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 3 │ 0 │ 142 │ 16 16 25 │ ∅ │ ∅ │ {nulls,tableforest,targetns} │ ∅ │ ∅ │ database_to_xmlschema │ ∅ │ ∅ │ ∅ │ │ 2938 │ database_to_xml_and_xmlschema │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 3 │ 0 │ 142 │ 16 16 25 │ ∅ │ ∅ │ {nulls,tableforest,targetns} │ ∅ │ ∅ │ database_to_xml_and_xmlschema │ ∅ │ ∅ │ ∅ │ │ 2931 │ xpath │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 143 │ 25 142 1009 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xpath │ ∅ │ ∅ │ ∅ │ │ 2932 │ xpath │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 143 │ 25 142 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.xpath($1, $2, '{}'::pg_catalog.text[]) │ ∅ │ ∅ │ ∅ │ │ 2614 │ xmlexists │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 142 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xmlexists │ ∅ │ ∅ │ ∅ │ │ 3049 │ xpath_exists │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 16 │ 25 142 1009 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xpath_exists │ ∅ │ ∅ │ ∅ │ │ 3050 │ xpath_exists │ 11 │ 10 │ 14 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 25 142 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ select pg_catalog.xpath_exists($1, $2, '{}'::pg_catalog.text[]) │ ∅ │ ∅ │ ∅ │ │ 3051 │ xml_is_well_formed │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xml_is_well_formed │ ∅ │ ∅ │ ∅ │ │ 3052 │ xml_is_well_formed_document │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xml_is_well_formed_document │ ∅ │ ∅ │ ∅ │ │ 3053 │ xml_is_well_formed_content │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ xml_is_well_formed_content │ ∅ │ ∅ │ ∅ │ │ 321 │ json_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 114 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_in │ ∅ │ ∅ │ ∅ │ │ 322 │ json_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_out │ ∅ │ ∅ │ ∅ │ │ 323 │ json_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 114 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_recv │ ∅ │ ∅ │ ∅ │ │ 324 │ json_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_send │ ∅ │ ∅ │ ∅ │ │ 3153 │ array_to_json │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 114 │ 2277 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_to_json │ ∅ │ ∅ │ ∅ │ │ 3154 │ array_to_json │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 114 │ 2277 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_to_json_pretty │ ∅ │ ∅ │ ∅ │ │ 3155 │ row_to_json │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 114 │ 2249 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ row_to_json │ ∅ │ ∅ │ ∅ │ │ 3156 │ row_to_json │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 114 │ 2249 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ row_to_json_pretty │ ∅ │ ∅ │ ∅ │ │ 3173 │ json_agg_transfn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 2 │ 0 │ 2281 │ 2281 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_agg_transfn │ ∅ │ ∅ │ ∅ │ │ 3174 │ json_agg_finalfn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 114 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_agg_finalfn │ ∅ │ ∅ │ ∅ │ │ 3175 │ json_agg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ s │ s │ 1 │ 0 │ 114 │ 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3180 │ json_object_agg_transfn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 3 │ 0 │ 2281 │ 2281 2276 2276 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_object_agg_transfn │ ∅ │ ∅ │ ∅ │ │ 3196 │ json_object_agg_finalfn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 114 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_object_agg_finalfn │ ∅ │ ∅ │ ∅ │ │ 3197 │ json_object_agg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ s │ s │ 2 │ 0 │ 114 │ 2276 2276 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3198 │ json_build_array │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ f │ f │ f │ f │ f │ s │ s │ 1 │ 0 │ 114 │ 2276 │ {2276} │ {v} │ ∅ │ ∅ │ ∅ │ json_build_array │ ∅ │ ∅ │ ∅ │ │ 3199 │ json_build_array │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 0 │ 0 │ 114 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_build_array_noargs │ ∅ │ ∅ │ ∅ │ │ 3200 │ json_build_object │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ f │ f │ f │ f │ f │ s │ s │ 1 │ 0 │ 114 │ 2276 │ {2276} │ {v} │ ∅ │ ∅ │ ∅ │ json_build_object │ ∅ │ ∅ │ ∅ │ │ 3201 │ json_build_object │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 0 │ 0 │ 114 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_build_object_noargs │ ∅ │ ∅ │ ∅ │ │ 3202 │ json_object │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 114 │ 1009 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_object │ ∅ │ ∅ │ ∅ │ │ 3203 │ json_object │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 114 │ 1009 1009 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_object_two_arg │ ∅ │ ∅ │ ∅ │ │ 3176 │ to_json │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 114 │ 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_json │ ∅ │ ∅ │ ∅ │ │ 3261 │ json_strip_nulls │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 114 │ 114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_strip_nulls │ ∅ │ ∅ │ ∅ │ │ 3947 │ json_object_field │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 114 │ 114 25 │ ∅ │ ∅ │ {from_json,field_name} │ ∅ │ ∅ │ json_object_field │ ∅ │ ∅ │ ∅ │ │ 3948 │ json_object_field_text │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 114 25 │ ∅ │ ∅ │ {from_json,field_name} │ ∅ │ ∅ │ json_object_field_text │ ∅ │ ∅ │ ∅ │ │ 3949 │ json_array_element │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 114 │ 114 23 │ ∅ │ ∅ │ {from_json,element_index} │ ∅ │ ∅ │ json_array_element │ ∅ │ ∅ │ ∅ │ │ 3950 │ json_array_element_text │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 114 23 │ ∅ │ ∅ │ {from_json,element_index} │ ∅ │ ∅ │ json_array_element_text │ ∅ │ ∅ │ ∅ │ │ 3951 │ json_extract_path │ 11 │ 10 │ 12 │ 1 │ 0 │ 25 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 114 │ 114 1009 │ {114,1009} │ {i,v} │ {from_json,path_elems} │ ∅ │ ∅ │ json_extract_path │ ∅ │ ∅ │ ∅ │ │ 3953 │ json_extract_path_text │ 11 │ 10 │ 12 │ 1 │ 0 │ 25 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 114 1009 │ {114,1009} │ {i,v} │ {from_json,path_elems} │ ∅ │ ∅ │ json_extract_path_text │ ∅ │ ∅ │ ∅ │ │ 3955 │ json_array_elements │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 1 │ 0 │ 114 │ 114 │ {114,114} │ {i,o} │ {from_json,value} │ ∅ │ ∅ │ json_array_elements │ ∅ │ ∅ │ ∅ │ │ 3969 │ json_array_elements_text │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 1 │ 0 │ 25 │ 114 │ {114,25} │ {i,o} │ {from_json,value} │ ∅ │ ∅ │ json_array_elements_text │ ∅ │ ∅ │ ∅ │ │ 3956 │ json_array_length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_array_length │ ∅ │ ∅ │ ∅ │ │ 3957 │ json_object_keys │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 1 │ 0 │ 25 │ 114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_object_keys │ ∅ │ ∅ │ ∅ │ │ 3958 │ json_each │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 1 │ 0 │ 2249 │ 114 │ {114,25,114} │ {i,o,o} │ {from_json,key,value} │ ∅ │ ∅ │ json_each │ ∅ │ ∅ │ ∅ │ │ 3959 │ json_each_text │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 1 │ 0 │ 2249 │ 114 │ {114,25,25} │ {i,o,o} │ {from_json,key,value} │ ∅ │ ∅ │ json_each_text │ ∅ │ ∅ │ ∅ │ │ 3204 │ json_to_record │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2249 │ 114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_to_record │ ∅ │ ∅ │ ∅ │ │ 3205 │ json_to_recordset │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ f │ t │ s │ s │ 1 │ 0 │ 2249 │ 114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_to_recordset │ ∅ │ ∅ │ ∅ │ │ 3968 │ json_typeof │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_typeof │ ∅ │ ∅ │ ∅ │ │ 2952 │ uuid_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2950 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ uuid_in │ ∅ │ ∅ │ ∅ │ │ 2953 │ uuid_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 2950 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ uuid_out │ ∅ │ ∅ │ ∅ │ │ 2954 │ uuid_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2950 2950 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ uuid_lt │ ∅ │ ∅ │ ∅ │ │ 2955 │ uuid_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2950 2950 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ uuid_le │ ∅ │ ∅ │ ∅ │ │ 2956 │ uuid_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2950 2950 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ uuid_eq │ ∅ │ ∅ │ ∅ │ │ 2957 │ uuid_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2950 2950 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ uuid_ge │ ∅ │ ∅ │ ∅ │ │ 2958 │ uuid_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2950 2950 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ uuid_gt │ ∅ │ ∅ │ ∅ │ │ 2959 │ uuid_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2950 2950 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ uuid_ne │ ∅ │ ∅ │ ∅ │ │ 2960 │ uuid_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 2950 2950 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ uuid_cmp │ ∅ │ ∅ │ ∅ │ │ 3300 │ uuid_sortsupport │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ uuid_sortsupport │ ∅ │ ∅ │ ∅ │ │ 2961 │ uuid_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2950 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ uuid_recv │ ∅ │ ∅ │ ∅ │ │ 2962 │ uuid_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 2950 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ uuid_send │ ∅ │ ∅ │ ∅ │ │ 2963 │ uuid_hash │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 2950 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ uuid_hash │ ∅ │ ∅ │ ∅ │ │ 3412 │ uuid_hash_extended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 2950 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ uuid_hash_extended │ ∅ │ ∅ │ ∅ │ │ 3432 │ gen_random_uuid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ v │ s │ 0 │ 0 │ 2950 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gen_random_uuid │ ∅ │ ∅ │ ∅ │ │ 3229 │ pg_lsn_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3220 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_lsn_in │ ∅ │ ∅ │ ∅ │ │ 3230 │ pg_lsn_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 3220 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_lsn_out │ ∅ │ ∅ │ ∅ │ │ 3231 │ pg_lsn_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3220 3220 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_lsn_lt │ ∅ │ ∅ │ ∅ │ │ 3232 │ pg_lsn_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3220 3220 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_lsn_le │ ∅ │ ∅ │ ∅ │ │ 3233 │ pg_lsn_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3220 3220 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_lsn_eq │ ∅ │ ∅ │ ∅ │ │ 3234 │ pg_lsn_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3220 3220 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_lsn_ge │ ∅ │ ∅ │ ∅ │ │ 3235 │ pg_lsn_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3220 3220 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_lsn_gt │ ∅ │ ∅ │ ∅ │ │ 3236 │ pg_lsn_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3220 3220 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_lsn_ne │ ∅ │ ∅ │ ∅ │ │ 3237 │ pg_lsn_mi │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1700 │ 3220 3220 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_lsn_mi │ ∅ │ ∅ │ ∅ │ │ 3238 │ pg_lsn_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3220 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_lsn_recv │ ∅ │ ∅ │ ∅ │ │ 3239 │ pg_lsn_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 3220 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_lsn_send │ ∅ │ ∅ │ ∅ │ │ 3251 │ pg_lsn_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ t │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 3220 3220 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_lsn_cmp │ ∅ │ ∅ │ ∅ │ │ 3252 │ pg_lsn_hash │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 3220 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_lsn_hash │ ∅ │ ∅ │ ∅ │ │ 3413 │ pg_lsn_hash_extended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 3220 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_lsn_hash_extended │ ∅ │ ∅ │ ∅ │ │ 4187 │ pg_lsn_larger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3220 │ 3220 3220 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_lsn_larger │ ∅ │ ∅ │ ∅ │ │ 4188 │ pg_lsn_smaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3220 │ 3220 3220 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_lsn_smaller │ ∅ │ ∅ │ ∅ │ │ 3504 │ anyenum_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3500 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anyenum_in │ ∅ │ ∅ │ ∅ │ │ 3505 │ anyenum_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anyenum_out │ ∅ │ ∅ │ ∅ │ │ 3506 │ enum_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 3500 │ 2275 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ enum_in │ ∅ │ ∅ │ ∅ │ │ 3507 │ enum_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ enum_out │ ∅ │ ∅ │ ∅ │ │ 3508 │ enum_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3500 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ enum_eq │ ∅ │ ∅ │ ∅ │ │ 3509 │ enum_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3500 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ enum_ne │ ∅ │ ∅ │ ∅ │ │ 3510 │ enum_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3500 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ enum_lt │ ∅ │ ∅ │ ∅ │ │ 3511 │ enum_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3500 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ enum_gt │ ∅ │ ∅ │ ∅ │ │ 3512 │ enum_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3500 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ enum_le │ ∅ │ ∅ │ ∅ │ │ 3513 │ enum_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3500 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ enum_ge │ ∅ │ ∅ │ ∅ │ │ 3514 │ enum_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 3500 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ enum_cmp │ ∅ │ ∅ │ ∅ │ │ 3515 │ hashenum │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashenum │ ∅ │ ∅ │ ∅ │ │ 3414 │ hashenumextended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 3500 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hashenumextended │ ∅ │ ∅ │ ∅ │ │ 3524 │ enum_smaller │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3500 │ 3500 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ enum_smaller │ ∅ │ ∅ │ ∅ │ │ 3525 │ enum_larger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3500 │ 3500 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ enum_larger │ ∅ │ ∅ │ ∅ │ │ 3526 │ max │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 3500 │ 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3527 │ min │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 3500 │ 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3528 │ enum_first │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 1 │ 0 │ 3500 │ 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ enum_first │ ∅ │ ∅ │ ∅ │ │ 3529 │ enum_last │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 1 │ 0 │ 3500 │ 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ enum_last │ ∅ │ ∅ │ ∅ │ │ 3530 │ enum_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 2 │ 0 │ 2277 │ 3500 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ enum_range_bounds │ ∅ │ ∅ │ ∅ │ │ 3531 │ enum_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 1 │ 0 │ 2277 │ 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ enum_range_all │ ∅ │ ∅ │ ∅ │ │ 3532 │ enum_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 3500 │ 2281 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ enum_recv │ ∅ │ ∅ │ ∅ │ │ 3533 │ enum_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 17 │ 3500 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ enum_send │ ∅ │ ∅ │ ∅ │ │ 3610 │ tsvectorin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3614 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvectorin │ ∅ │ ∅ │ ∅ │ │ 3639 │ tsvectorrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3614 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvectorrecv │ ∅ │ ∅ │ ∅ │ │ 3611 │ tsvectorout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 3614 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvectorout │ ∅ │ ∅ │ ∅ │ │ 3638 │ tsvectorsend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 3614 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvectorsend │ ∅ │ ∅ │ ∅ │ │ 3612 │ tsqueryin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3615 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsqueryin │ ∅ │ ∅ │ ∅ │ │ 3641 │ tsqueryrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3615 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsqueryrecv │ ∅ │ ∅ │ ∅ │ │ 3613 │ tsqueryout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsqueryout │ ∅ │ ∅ │ ∅ │ │ 3640 │ tsquerysend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsquerysend │ ∅ │ ∅ │ ∅ │ │ 3646 │ gtsvectorin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3642 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gtsvectorin │ ∅ │ ∅ │ ∅ │ │ 3647 │ gtsvectorout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 3642 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gtsvectorout │ ∅ │ ∅ │ ∅ │ │ 3616 │ tsvector_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3614 3614 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvector_lt │ ∅ │ ∅ │ ∅ │ │ 3617 │ tsvector_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3614 3614 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvector_le │ ∅ │ ∅ │ ∅ │ │ 3618 │ tsvector_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3614 3614 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvector_eq │ ∅ │ ∅ │ ∅ │ │ 3619 │ tsvector_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3614 3614 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvector_ne │ ∅ │ ∅ │ ∅ │ │ 3620 │ tsvector_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3614 3614 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvector_ge │ ∅ │ ∅ │ ∅ │ │ 3621 │ tsvector_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3614 3614 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvector_gt │ ∅ │ ∅ │ ∅ │ │ 3622 │ tsvector_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 3614 3614 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvector_cmp │ ∅ │ ∅ │ ∅ │ │ 3711 │ length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 3614 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvector_length │ ∅ │ ∅ │ ∅ │ │ 3623 │ strip │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3614 │ 3614 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvector_strip │ ∅ │ ∅ │ ∅ │ │ 3624 │ setweight │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3614 │ 3614 18 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvector_setweight │ ∅ │ ∅ │ ∅ │ │ 3320 │ setweight │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 3614 │ 3614 18 1009 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvector_setweight_by_filter │ ∅ │ ∅ │ ∅ │ │ 3625 │ tsvector_concat │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3614 │ 3614 3614 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvector_concat │ ∅ │ ∅ │ ∅ │ │ 3321 │ ts_delete │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3614 │ 3614 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvector_delete_str │ ∅ │ ∅ │ ∅ │ │ 3323 │ ts_delete │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3614 │ 3614 1009 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvector_delete_arr │ ∅ │ ∅ │ ∅ │ │ 3322 │ unnest │ 11 │ 10 │ 12 │ 1 │ 10 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 1 │ 0 │ 2249 │ 3614 │ {3614,25,1005,1009} │ {i,o,o,o} │ {tsvector,lexeme,positions,weights} │ ∅ │ ∅ │ tsvector_unnest │ ∅ │ ∅ │ ∅ │ │ 3326 │ tsvector_to_array │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 1009 │ 3614 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvector_to_array │ ∅ │ ∅ │ ∅ │ │ 3327 │ array_to_tsvector │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3614 │ 1009 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ array_to_tsvector │ ∅ │ ∅ │ ∅ │ │ 3319 │ ts_filter │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3614 │ 3614 1002 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvector_filter │ ∅ │ ∅ │ ∅ │ │ 3634 │ ts_match_vq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3614 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_match_vq │ ∅ │ ∅ │ ∅ │ │ 3635 │ ts_match_qv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3615 3614 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_match_qv │ ∅ │ ∅ │ ∅ │ │ 3760 │ ts_match_tt │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_match_tt │ ∅ │ ∅ │ ∅ │ │ 3761 │ ts_match_tq │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 16 │ 25 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_match_tq │ ∅ │ ∅ │ ∅ │ │ 3648 │ gtsvector_compress │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gtsvector_compress │ ∅ │ ∅ │ ∅ │ │ 3649 │ gtsvector_decompress │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gtsvector_decompress │ ∅ │ ∅ │ ∅ │ │ 3650 │ gtsvector_picksplit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gtsvector_picksplit │ ∅ │ ∅ │ ∅ │ │ 3651 │ gtsvector_union │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3642 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gtsvector_union │ ∅ │ ∅ │ ∅ │ │ 3652 │ gtsvector_same │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 2281 │ 3642 3642 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gtsvector_same │ ∅ │ ∅ │ ∅ │ │ 3653 │ gtsvector_penalty │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 2281 │ 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gtsvector_penalty │ ∅ │ ∅ │ ∅ │ │ 3654 │ gtsvector_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 2281 3614 21 26 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gtsvector_consistent │ ∅ │ ∅ │ ∅ │ │ 3790 │ gtsvector_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 2281 3642 23 26 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gtsvector_consistent_oldsig │ ∅ │ ∅ │ ∅ │ │ 3434 │ gtsvector_options │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gtsvector_options │ ∅ │ ∅ │ ∅ │ │ 3656 │ gin_extract_tsvector │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 2281 │ 3614 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_extract_tsvector │ ∅ │ ∅ │ ∅ │ │ 3657 │ gin_extract_tsquery │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 7 │ 0 │ 2281 │ 3614 2281 21 2281 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_extract_tsquery │ ∅ │ ∅ │ ∅ │ │ 3658 │ gin_tsquery_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 8 │ 0 │ 16 │ 2281 21 3614 23 2281 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_tsquery_consistent │ ∅ │ ∅ │ ∅ │ │ 3921 │ gin_tsquery_triconsistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 7 │ 0 │ 18 │ 2281 21 3614 23 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_tsquery_triconsistent │ ∅ │ ∅ │ ∅ │ │ 3724 │ gin_cmp_tslexeme │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_cmp_tslexeme │ ∅ │ ∅ │ ∅ │ │ 2700 │ gin_cmp_prefix │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 23 │ 25 25 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_cmp_prefix │ ∅ │ ∅ │ ∅ │ │ 3077 │ gin_extract_tsvector │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2281 │ 3614 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_extract_tsvector_2args │ ∅ │ ∅ │ ∅ │ │ 3087 │ gin_extract_tsquery │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2281 │ 3615 2281 21 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_extract_tsquery_5args │ ∅ │ ∅ │ ∅ │ │ 3088 │ gin_tsquery_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 6 │ 0 │ 16 │ 2281 21 3615 23 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_tsquery_consistent_6args │ ∅ │ ∅ │ ∅ │ │ 3791 │ gin_extract_tsquery │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 7 │ 0 │ 2281 │ 3615 2281 21 2281 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_extract_tsquery_oldsig │ ∅ │ ∅ │ ∅ │ │ 3792 │ gin_tsquery_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 8 │ 0 │ 16 │ 2281 21 3615 23 2281 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_tsquery_consistent_oldsig │ ∅ │ ∅ │ ∅ │ │ 3789 │ gin_clean_pending_list │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 20 │ 2205 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_clean_pending_list │ ∅ │ ∅ │ ∅ │ │ 3662 │ tsquery_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3615 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsquery_lt │ ∅ │ ∅ │ ∅ │ │ 3663 │ tsquery_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3615 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsquery_le │ ∅ │ ∅ │ ∅ │ │ 3664 │ tsquery_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3615 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsquery_eq │ ∅ │ ∅ │ ∅ │ │ 3665 │ tsquery_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3615 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsquery_ne │ ∅ │ ∅ │ ∅ │ │ 3666 │ tsquery_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3615 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsquery_ge │ ∅ │ ∅ │ ∅ │ │ 3667 │ tsquery_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3615 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsquery_gt │ ∅ │ ∅ │ ∅ │ │ 3668 │ tsquery_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 3615 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsquery_cmp │ ∅ │ ∅ │ ∅ │ │ 3669 │ tsquery_and │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3615 │ 3615 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsquery_and │ ∅ │ ∅ │ ∅ │ │ 3670 │ tsquery_or │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3615 │ 3615 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsquery_or │ ∅ │ ∅ │ ∅ │ │ 5003 │ tsquery_phrase │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3615 │ 3615 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsquery_phrase │ ∅ │ ∅ │ ∅ │ │ 5004 │ tsquery_phrase │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 3615 │ 3615 3615 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsquery_phrase_distance │ ∅ │ ∅ │ ∅ │ │ 3671 │ tsquery_not │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3615 │ 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsquery_not │ ∅ │ ∅ │ ∅ │ │ 3691 │ tsq_mcontains │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3615 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsq_mcontains │ ∅ │ ∅ │ ∅ │ │ 3692 │ tsq_mcontained │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3615 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsq_mcontained │ ∅ │ ∅ │ ∅ │ │ 3672 │ numnode │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsquery_numnode │ ∅ │ ∅ │ ∅ │ │ 3673 │ querytree │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsquerytree │ ∅ │ ∅ │ ∅ │ │ 3684 │ ts_rewrite │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 3615 │ 3615 3615 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsquery_rewrite │ ∅ │ ∅ │ ∅ │ │ 3685 │ ts_rewrite │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 3615 │ 3615 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsquery_rewrite_query │ ∅ │ ∅ │ ∅ │ │ 3695 │ gtsquery_compress │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gtsquery_compress │ ∅ │ ∅ │ ∅ │ │ 3697 │ gtsquery_picksplit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gtsquery_picksplit │ ∅ │ ∅ │ ∅ │ │ 3698 │ gtsquery_union │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gtsquery_union │ ∅ │ ∅ │ ∅ │ │ 3699 │ gtsquery_same │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 2281 │ 20 20 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gtsquery_same │ ∅ │ ∅ │ ∅ │ │ 3700 │ gtsquery_penalty │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 2281 │ 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gtsquery_penalty │ ∅ │ ∅ │ ∅ │ │ 3701 │ gtsquery_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 2281 3615 21 26 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gtsquery_consistent │ ∅ │ ∅ │ ∅ │ │ 3793 │ gtsquery_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 2281 2281 23 26 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gtsquery_consistent_oldsig │ ∅ │ ∅ │ ∅ │ │ 3686 │ tsmatchsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsmatchsel │ ∅ │ ∅ │ ∅ │ │ 3687 │ tsmatchjoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsmatchjoinsel │ ∅ │ ∅ │ ∅ │ │ 3688 │ ts_typanalyze │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_typanalyze │ ∅ │ ∅ │ ∅ │ │ 3689 │ ts_stat │ 11 │ 10 │ 12 │ 10 │ 10000 │ 0 │ - │ f │ f │ f │ t │ t │ v │ u │ 1 │ 0 │ 2249 │ 25 │ {25,25,23,23} │ {i,o,o,o} │ {query,word,ndoc,nentry} │ ∅ │ ∅ │ ts_stat1 │ ∅ │ ∅ │ ∅ │ │ 3690 │ ts_stat │ 11 │ 10 │ 12 │ 10 │ 10000 │ 0 │ - │ f │ f │ f │ t │ t │ v │ u │ 2 │ 0 │ 2249 │ 25 25 │ {25,25,25,23,23} │ {i,i,o,o,o} │ {query,weights,word,ndoc,nentry} │ ∅ │ ∅ │ ts_stat2 │ ∅ │ ∅ │ ∅ │ │ 3703 │ ts_rank │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 700 │ 1021 3614 3615 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_rank_wttf │ ∅ │ ∅ │ ∅ │ │ 3704 │ ts_rank │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 700 │ 1021 3614 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_rank_wtt │ ∅ │ ∅ │ ∅ │ │ 3705 │ ts_rank │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 700 │ 3614 3615 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_rank_ttf │ ∅ │ ∅ │ ∅ │ │ 3706 │ ts_rank │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 700 │ 3614 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_rank_tt │ ∅ │ ∅ │ ∅ │ │ 3707 │ ts_rank_cd │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 700 │ 1021 3614 3615 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_rankcd_wttf │ ∅ │ ∅ │ ∅ │ │ 3708 │ ts_rank_cd │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 700 │ 1021 3614 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_rankcd_wtt │ ∅ │ ∅ │ ∅ │ │ 3709 │ ts_rank_cd │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 700 │ 3614 3615 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_rankcd_ttf │ ∅ │ ∅ │ ∅ │ │ 3710 │ ts_rank_cd │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 700 │ 3614 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_rankcd_tt │ ∅ │ ∅ │ ∅ │ │ 3713 │ ts_token_type │ 11 │ 10 │ 12 │ 1 │ 16 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 1 │ 0 │ 2249 │ 26 │ {26,23,25,25} │ {i,o,o,o} │ {parser_oid,tokid,alias,description} │ ∅ │ ∅ │ ts_token_type_byid │ ∅ │ ∅ │ ∅ │ │ 3714 │ ts_token_type │ 11 │ 10 │ 12 │ 1 │ 16 │ 0 │ - │ f │ f │ f │ t │ t │ s │ s │ 1 │ 0 │ 2249 │ 25 │ {25,23,25,25} │ {i,o,o,o} │ {parser_name,tokid,alias,description} │ ∅ │ ∅ │ ts_token_type_byname │ ∅ │ ∅ │ ∅ │ │ 3715 │ ts_parse │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 2 │ 0 │ 2249 │ 26 25 │ {26,25,23,25} │ {i,i,o,o} │ {parser_oid,txt,tokid,token} │ ∅ │ ∅ │ ts_parse_byid │ ∅ │ ∅ │ ∅ │ │ 3716 │ ts_parse │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ s │ s │ 2 │ 0 │ 2249 │ 25 25 │ {25,25,23,25} │ {i,i,o,o} │ {parser_name,txt,tokid,token} │ ∅ │ ∅ │ ts_parse_byname │ ∅ │ ∅ │ ∅ │ │ 3717 │ prsd_start │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ prsd_start │ ∅ │ ∅ │ ∅ │ │ 3718 │ prsd_nexttoken │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 2281 │ 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ prsd_nexttoken │ ∅ │ ∅ │ ∅ │ │ 3719 │ prsd_end │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ prsd_end │ ∅ │ ∅ │ ∅ │ │ 3720 │ prsd_headline │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 2281 │ 2281 2281 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ prsd_headline │ ∅ │ ∅ │ ∅ │ │ 3721 │ prsd_lextype │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ prsd_lextype │ ∅ │ ∅ │ ∅ │ │ 3723 │ ts_lexize │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 1009 │ 3769 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_lexize │ ∅ │ ∅ │ ∅ │ │ 3725 │ dsimple_init │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dsimple_init │ ∅ │ ∅ │ ∅ │ │ 3726 │ dsimple_lexize │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 2281 │ 2281 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dsimple_lexize │ ∅ │ ∅ │ ∅ │ │ 3728 │ dsynonym_init │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dsynonym_init │ ∅ │ ∅ │ ∅ │ │ 3729 │ dsynonym_lexize │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 2281 │ 2281 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dsynonym_lexize │ ∅ │ ∅ │ ∅ │ │ 3731 │ dispell_init │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dispell_init │ ∅ │ ∅ │ ∅ │ │ 3732 │ dispell_lexize │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 2281 │ 2281 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dispell_lexize │ ∅ │ ∅ │ ∅ │ │ 3740 │ thesaurus_init │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ thesaurus_init │ ∅ │ ∅ │ ∅ │ │ 3741 │ thesaurus_lexize │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 2281 │ 2281 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ thesaurus_lexize │ ∅ │ ∅ │ ∅ │ │ 3743 │ ts_headline │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 25 │ 3734 25 3615 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_headline_byid_opt │ ∅ │ ∅ │ ∅ │ │ 3744 │ ts_headline │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 25 │ 3734 25 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_headline_byid │ ∅ │ ∅ │ ∅ │ │ 3754 │ ts_headline │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 25 │ 25 3615 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_headline_opt │ ∅ │ ∅ │ ∅ │ │ 3755 │ ts_headline │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 25 │ 25 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_headline │ ∅ │ ∅ │ ∅ │ │ 4201 │ ts_headline │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 3802 │ 3734 3802 3615 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_headline_jsonb_byid_opt │ ∅ │ ∅ │ ∅ │ │ 4202 │ ts_headline │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 3802 │ 3734 3802 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_headline_jsonb_byid │ ∅ │ ∅ │ ∅ │ │ 4203 │ ts_headline │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 3802 │ 3802 3615 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_headline_jsonb_opt │ ∅ │ ∅ │ ∅ │ │ 4204 │ ts_headline │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 3802 │ 3802 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_headline_jsonb │ ∅ │ ∅ │ ∅ │ │ 4205 │ ts_headline │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 0 │ 114 │ 3734 114 3615 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_headline_json_byid_opt │ ∅ │ ∅ │ ∅ │ │ 4206 │ ts_headline │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 114 │ 3734 114 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_headline_json_byid │ ∅ │ ∅ │ ∅ │ │ 4207 │ ts_headline │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 114 │ 114 3615 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_headline_json_opt │ ∅ │ ∅ │ ∅ │ │ 4208 │ ts_headline │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 114 │ 114 3615 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ts_headline_json │ ∅ │ ∅ │ ∅ │ │ 3745 │ to_tsvector │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3614 │ 3734 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_tsvector_byid │ ∅ │ ∅ │ ∅ │ │ 3746 │ to_tsquery │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3615 │ 3734 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_tsquery_byid │ ∅ │ ∅ │ ∅ │ │ 3747 │ plainto_tsquery │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3615 │ 3734 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ plainto_tsquery_byid │ ∅ │ ∅ │ ∅ │ │ 5006 │ phraseto_tsquery │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3615 │ 3734 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ phraseto_tsquery_byid │ ∅ │ ∅ │ ∅ │ │ 5007 │ websearch_to_tsquery │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3615 │ 3734 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ websearch_to_tsquery_byid │ ∅ │ ∅ │ ∅ │ │ 3749 │ to_tsvector │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 3614 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_tsvector │ ∅ │ ∅ │ ∅ │ │ 3750 │ to_tsquery │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 3615 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_tsquery │ ∅ │ ∅ │ ∅ │ │ 3751 │ plainto_tsquery │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 3615 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ plainto_tsquery │ ∅ │ ∅ │ ∅ │ │ 5001 │ phraseto_tsquery │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 3615 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ phraseto_tsquery │ ∅ │ ∅ │ ∅ │ │ 5009 │ websearch_to_tsquery │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 3615 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ websearch_to_tsquery │ ∅ │ ∅ │ ∅ │ │ 4209 │ to_tsvector │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 3614 │ 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_string_to_tsvector │ ∅ │ ∅ │ ∅ │ │ 4213 │ jsonb_to_tsvector │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 3614 │ 3802 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_to_tsvector │ ∅ │ ∅ │ ∅ │ │ 4210 │ to_tsvector │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 3614 │ 114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_string_to_tsvector │ ∅ │ ∅ │ ∅ │ │ 4215 │ json_to_tsvector │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 2 │ 0 │ 3614 │ 114 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_to_tsvector │ ∅ │ ∅ │ ∅ │ │ 4211 │ to_tsvector │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3614 │ 3734 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_string_to_tsvector_byid │ ∅ │ ∅ │ ∅ │ │ 4214 │ jsonb_to_tsvector │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 3614 │ 3734 3802 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_to_tsvector_byid │ ∅ │ ∅ │ ∅ │ │ 4212 │ to_tsvector │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3614 │ 3734 114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_string_to_tsvector_byid │ ∅ │ ∅ │ ∅ │ │ 4216 │ json_to_tsvector │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 3614 │ 3734 114 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ json_to_tsvector_byid │ ∅ │ ∅ │ ∅ │ │ 3752 │ tsvector_update_trigger │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ v │ s │ 0 │ 0 │ 2279 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvector_update_trigger_byid │ ∅ │ ∅ │ ∅ │ │ 3753 │ tsvector_update_trigger_column │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ v │ s │ 0 │ 0 │ 2279 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsvector_update_trigger_bycolumn │ ∅ │ ∅ │ ∅ │ │ 3759 │ get_current_ts_config │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 0 │ 0 │ 3734 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ get_current_ts_config │ ∅ │ ∅ │ ∅ │ │ 3736 │ regconfigin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 3734 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regconfigin │ ∅ │ ∅ │ ∅ │ │ 3737 │ regconfigout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 3734 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regconfigout │ ∅ │ ∅ │ ∅ │ │ 3738 │ regconfigrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3734 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regconfigrecv │ ∅ │ ∅ │ ∅ │ │ 3739 │ regconfigsend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 3734 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regconfigsend │ ∅ │ ∅ │ ∅ │ │ 3771 │ regdictionaryin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 3769 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regdictionaryin │ ∅ │ ∅ │ ∅ │ │ 3772 │ regdictionaryout │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 3769 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regdictionaryout │ ∅ │ ∅ │ ∅ │ │ 3773 │ regdictionaryrecv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3769 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regdictionaryrecv │ ∅ │ ∅ │ ∅ │ │ 3774 │ regdictionarysend │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 3769 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ regdictionarysend │ ∅ │ ∅ │ ∅ │ │ 3806 │ jsonb_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3802 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_in │ ∅ │ ∅ │ ∅ │ │ 3805 │ jsonb_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3802 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_recv │ ∅ │ ∅ │ ∅ │ │ 3804 │ jsonb_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_out │ ∅ │ ∅ │ ∅ │ │ 3803 │ jsonb_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_send │ ∅ │ ∅ │ ∅ │ │ 3263 │ jsonb_object │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3802 │ 1009 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_object │ ∅ │ ∅ │ ∅ │ │ 3264 │ jsonb_object │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3802 │ 1009 1009 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_object_two_arg │ ∅ │ ∅ │ ∅ │ │ 3787 │ to_jsonb │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 3802 │ 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ to_jsonb │ ∅ │ ∅ │ ∅ │ │ 3265 │ jsonb_agg_transfn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 2 │ 0 │ 2281 │ 2281 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_agg_transfn │ ∅ │ ∅ │ ∅ │ │ 3266 │ jsonb_agg_finalfn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 1 │ 0 │ 3802 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_agg_finalfn │ ∅ │ ∅ │ ∅ │ │ 3267 │ jsonb_agg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ s │ s │ 1 │ 0 │ 3802 │ 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3268 │ jsonb_object_agg_transfn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 3 │ 0 │ 2281 │ 2281 2276 2276 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_object_agg_transfn │ ∅ │ ∅ │ ∅ │ │ 3269 │ jsonb_object_agg_finalfn │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 1 │ 0 │ 3802 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_object_agg_finalfn │ ∅ │ ∅ │ ∅ │ │ 3270 │ jsonb_object_agg │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 3802 │ 2276 2276 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3271 │ jsonb_build_array │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ f │ f │ f │ f │ f │ s │ s │ 1 │ 0 │ 3802 │ 2276 │ {2276} │ {v} │ ∅ │ ∅ │ ∅ │ jsonb_build_array │ ∅ │ ∅ │ ∅ │ │ 3272 │ jsonb_build_array │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 0 │ 0 │ 3802 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_build_array_noargs │ ∅ │ ∅ │ ∅ │ │ 3273 │ jsonb_build_object │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ f │ f │ f │ f │ f │ s │ s │ 1 │ 0 │ 3802 │ 2276 │ {2276} │ {v} │ ∅ │ ∅ │ ∅ │ jsonb_build_object │ ∅ │ ∅ │ ∅ │ │ 3274 │ jsonb_build_object │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 0 │ 0 │ 3802 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_build_object_noargs │ ∅ │ ∅ │ ∅ │ │ 3262 │ jsonb_strip_nulls │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3802 │ 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_strip_nulls │ ∅ │ ∅ │ ∅ │ │ 3478 │ jsonb_object_field │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3802 │ 3802 25 │ ∅ │ ∅ │ {from_json,field_name} │ ∅ │ ∅ │ jsonb_object_field │ ∅ │ ∅ │ ∅ │ │ 3214 │ jsonb_object_field_text │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 3802 25 │ ∅ │ ∅ │ {from_json,field_name} │ ∅ │ ∅ │ jsonb_object_field_text │ ∅ │ ∅ │ ∅ │ │ 3215 │ jsonb_array_element │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3802 │ 3802 23 │ ∅ │ ∅ │ {from_json,element_index} │ ∅ │ ∅ │ jsonb_array_element │ ∅ │ ∅ │ ∅ │ │ 3216 │ jsonb_array_element_text │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 3802 23 │ ∅ │ ∅ │ {from_json,element_index} │ ∅ │ ∅ │ jsonb_array_element_text │ ∅ │ ∅ │ ∅ │ │ 3217 │ jsonb_extract_path │ 11 │ 10 │ 12 │ 1 │ 0 │ 25 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3802 │ 3802 1009 │ {3802,1009} │ {i,v} │ {from_json,path_elems} │ ∅ │ ∅ │ jsonb_extract_path │ ∅ │ ∅ │ ∅ │ │ 3940 │ jsonb_extract_path_text │ 11 │ 10 │ 12 │ 1 │ 0 │ 25 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 3802 1009 │ {3802,1009} │ {i,v} │ {from_json,path_elems} │ ∅ │ ∅ │ jsonb_extract_path_text │ ∅ │ ∅ │ ∅ │ │ 3219 │ jsonb_array_elements │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 1 │ 0 │ 3802 │ 3802 │ {3802,3802} │ {i,o} │ {from_json,value} │ ∅ │ ∅ │ jsonb_array_elements │ ∅ │ ∅ │ ∅ │ │ 3465 │ jsonb_array_elements_text │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 1 │ 0 │ 25 │ 3802 │ {3802,25} │ {i,o} │ {from_json,value} │ ∅ │ ∅ │ jsonb_array_elements_text │ ∅ │ ∅ │ ∅ │ │ 3207 │ jsonb_array_length │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_array_length │ ∅ │ ∅ │ ∅ │ │ 3931 │ jsonb_object_keys │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 1 │ 0 │ 25 │ 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_object_keys │ ∅ │ ∅ │ ∅ │ │ 3208 │ jsonb_each │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 1 │ 0 │ 2249 │ 3802 │ {3802,25,3802} │ {i,o,o} │ {from_json,key,value} │ ∅ │ ∅ │ jsonb_each │ ∅ │ ∅ │ ∅ │ │ 3932 │ jsonb_each_text │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 1 │ 0 │ 2249 │ 3802 │ {3802,25,25} │ {i,o,o} │ {from_json,key,value} │ ∅ │ ∅ │ jsonb_each_text │ ∅ │ ∅ │ ∅ │ │ 3209 │ jsonb_populate_record │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 2 │ 0 │ 2283 │ 2283 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_populate_record │ ∅ │ ∅ │ ∅ │ │ 3475 │ jsonb_populate_recordset │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ f │ t │ s │ s │ 2 │ 0 │ 2283 │ 2283 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_populate_recordset │ ∅ │ ∅ │ ∅ │ │ 3490 │ jsonb_to_record │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2249 │ 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_to_record │ ∅ │ ∅ │ ∅ │ │ 3491 │ jsonb_to_recordset │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ f │ t │ s │ s │ 1 │ 0 │ 2249 │ 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_to_recordset │ ∅ │ ∅ │ ∅ │ │ 3210 │ jsonb_typeof │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_typeof │ ∅ │ ∅ │ ∅ │ │ 4038 │ jsonb_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3802 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_ne │ ∅ │ ∅ │ ∅ │ │ 4039 │ jsonb_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3802 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_lt │ ∅ │ ∅ │ ∅ │ │ 4040 │ jsonb_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3802 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_gt │ ∅ │ ∅ │ ∅ │ │ 4041 │ jsonb_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3802 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_le │ ∅ │ ∅ │ ∅ │ │ 4042 │ jsonb_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3802 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_ge │ ∅ │ ∅ │ ∅ │ │ 4043 │ jsonb_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3802 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_eq │ ∅ │ ∅ │ ∅ │ │ 4044 │ jsonb_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 3802 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_cmp │ ∅ │ ∅ │ ∅ │ │ 4045 │ jsonb_hash │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_hash │ ∅ │ ∅ │ ∅ │ │ 3416 │ jsonb_hash_extended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 3802 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_hash_extended │ ∅ │ ∅ │ ∅ │ │ 4046 │ jsonb_contains │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3802 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_contains │ ∅ │ ∅ │ ∅ │ │ 4047 │ jsonb_exists │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3802 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_exists │ ∅ │ ∅ │ ∅ │ │ 4048 │ jsonb_exists_any │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3802 1009 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_exists_any │ ∅ │ ∅ │ ∅ │ │ 4049 │ jsonb_exists_all │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3802 1009 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_exists_all │ ∅ │ ∅ │ ∅ │ │ 4050 │ jsonb_contained │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3802 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_contained │ ∅ │ ∅ │ ∅ │ │ 3480 │ gin_compare_jsonb │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_compare_jsonb │ ∅ │ ∅ │ ∅ │ │ 3482 │ gin_extract_jsonb │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 2281 │ 3802 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_extract_jsonb │ ∅ │ ∅ │ ∅ │ │ 3483 │ gin_extract_jsonb_query │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 7 │ 0 │ 2281 │ 3802 2281 21 2281 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_extract_jsonb_query │ ∅ │ ∅ │ ∅ │ │ 3484 │ gin_consistent_jsonb │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 8 │ 0 │ 16 │ 2281 21 3802 23 2281 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_consistent_jsonb │ ∅ │ ∅ │ ∅ │ │ 3488 │ gin_triconsistent_jsonb │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 7 │ 0 │ 18 │ 2281 21 3802 23 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_triconsistent_jsonb │ ∅ │ ∅ │ ∅ │ │ 3485 │ gin_extract_jsonb_path │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 2281 │ 3802 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_extract_jsonb_path │ ∅ │ ∅ │ ∅ │ │ 3486 │ gin_extract_jsonb_query_path │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 7 │ 0 │ 2281 │ 3802 2281 21 2281 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_extract_jsonb_query_path │ ∅ │ ∅ │ ∅ │ │ 3487 │ gin_consistent_jsonb_path │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 8 │ 0 │ 16 │ 2281 21 3802 23 2281 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_consistent_jsonb_path │ ∅ │ ∅ │ ∅ │ │ 3489 │ gin_triconsistent_jsonb_path │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 7 │ 0 │ 18 │ 2281 21 3802 23 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gin_triconsistent_jsonb_path │ ∅ │ ∅ │ ∅ │ │ 3301 │ jsonb_concat │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3802 │ 3802 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_concat │ ∅ │ ∅ │ ∅ │ │ 3302 │ jsonb_delete │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3802 │ 3802 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_delete │ ∅ │ ∅ │ ∅ │ │ 3303 │ jsonb_delete │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3802 │ 3802 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_delete_idx │ ∅ │ ∅ │ ∅ │ │ 3343 │ jsonb_delete │ 11 │ 10 │ 12 │ 1 │ 0 │ 25 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3802 │ 3802 1009 │ {3802,1009} │ {i,v} │ {from_json,path_elems} │ ∅ │ ∅ │ jsonb_delete_array │ ∅ │ ∅ │ ∅ │ │ 3304 │ jsonb_delete_path │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3802 │ 3802 1009 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_delete_path │ ∅ │ ∅ │ ∅ │ │ 3306 │ jsonb_pretty │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 25 │ 3802 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_pretty │ ∅ │ ∅ │ ∅ │ │ 4001 │ jsonpath_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 4072 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonpath_in │ ∅ │ ∅ │ ∅ │ │ 4002 │ jsonpath_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 4072 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonpath_recv │ ∅ │ ∅ │ ∅ │ │ 4003 │ jsonpath_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 4072 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonpath_out │ ∅ │ ∅ │ ∅ │ │ 4004 │ jsonpath_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 4072 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonpath_send │ ∅ │ ∅ │ ∅ │ │ 3579 │ jsonb_insert │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 1 │ 3802 │ 3802 1009 3802 16 │ ∅ │ ∅ │ {jsonb_in,path,replacement,insert_after} │ ({CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 132 :constvalue 1 [ 0 0 0 0 0 0 0 0 ]}) │ ∅ │ jsonb_insert │ ∅ │ ∅ │ ∅ │ │ 4007 │ jsonb_path_query_array │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 2 │ 3802 │ 3802 4072 3802 16 │ ∅ │ ∅ │ {target,path,vars,silent} │ ({CONST :consttype 3802 :consttypmod -1 :constcollid 0 :constlen -1 :constbyval false :constisnull false :location 100 :constvalue 8 [ 32 0 0 0 0 0 0 32 ]} {CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 154 :constvalue 1 [ 0 0 0 0 0 0 0 0 ]}) │ ∅ │ jsonb_path_query_array │ ∅ │ ∅ │ ∅ │ │ 4010 │ jsonb_path_exists_opr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3802 4072 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_path_exists_opr │ ∅ │ ∅ │ ∅ │ │ 4011 │ jsonb_path_match_opr │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3802 4072 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ jsonb_path_match_opr │ ∅ │ ∅ │ ∅ │ │ 2939 │ txid_snapshot_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2970 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_snapshot_in │ ∅ │ ∅ │ ∅ │ │ 2940 │ txid_snapshot_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 2970 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_snapshot_out │ ∅ │ ∅ │ ∅ │ │ 2941 │ txid_snapshot_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2970 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_snapshot_recv │ ∅ │ ∅ │ ∅ │ │ 2942 │ txid_snapshot_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 2970 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_snapshot_send │ ∅ │ ∅ │ ∅ │ │ 2943 │ txid_current │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ u │ 0 │ 0 │ 20 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_current_xact_id │ ∅ │ ∅ │ ∅ │ │ 3348 │ txid_current_if_assigned │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ u │ 0 │ 0 │ 20 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_current_xact_id_if_assigned │ ∅ │ ∅ │ ∅ │ │ 2944 │ txid_current_snapshot │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 0 │ 0 │ 2970 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_current_snapshot │ ∅ │ ∅ │ ∅ │ │ 2945 │ txid_snapshot_xmin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 2970 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_snapshot_xmin │ ∅ │ ∅ │ ∅ │ │ 2946 │ txid_snapshot_xmax │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 20 │ 2970 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_snapshot_xmax │ ∅ │ ∅ │ ∅ │ │ 2947 │ txid_snapshot_xip │ 11 │ 10 │ 12 │ 1 │ 50 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 1 │ 0 │ 20 │ 2970 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_snapshot_xip │ ∅ │ ∅ │ ∅ │ │ 2948 │ txid_visible_in_snapshot │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 20 2970 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_visible_in_snapshot │ ∅ │ ∅ │ ∅ │ │ 3360 │ txid_status │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 25 │ 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_xact_status │ ∅ │ ∅ │ ∅ │ │ 5055 │ pg_snapshot_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 5038 │ 2275 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_snapshot_in │ ∅ │ ∅ │ ∅ │ │ 5056 │ pg_snapshot_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2275 │ 5038 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_snapshot_out │ ∅ │ ∅ │ ∅ │ │ 5057 │ pg_snapshot_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 5038 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_snapshot_recv │ ∅ │ ∅ │ ∅ │ │ 5058 │ pg_snapshot_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 17 │ 5038 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_snapshot_send │ ∅ │ ∅ │ ∅ │ │ 5061 │ pg_current_snapshot │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 0 │ 0 │ 5038 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_current_snapshot │ ∅ │ ∅ │ ∅ │ │ 5062 │ pg_snapshot_xmin │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 5069 │ 5038 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_snapshot_xmin │ ∅ │ ∅ │ ∅ │ │ 5063 │ pg_snapshot_xmax │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 5069 │ 5038 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_snapshot_xmax │ ∅ │ ∅ │ ∅ │ │ 5064 │ pg_snapshot_xip │ 11 │ 10 │ 12 │ 1 │ 50 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 1 │ 0 │ 5069 │ 5038 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_snapshot_xip │ ∅ │ ∅ │ ∅ │ │ 5065 │ pg_visible_in_snapshot │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 5069 5038 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_visible_in_snapshot │ ∅ │ ∅ │ ∅ │ │ 5059 │ pg_current_xact_id │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ u │ 0 │ 0 │ 5069 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_current_xact_id │ ∅ │ ∅ │ ∅ │ │ 5060 │ pg_current_xact_id_if_assigned │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ u │ 0 │ 0 │ 5069 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_current_xact_id_if_assigned │ ∅ │ ∅ │ ∅ │ │ 5066 │ pg_xact_status │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 25 │ 5069 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_xact_status │ ∅ │ ∅ │ ∅ │ │ 2981 │ record_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2249 2249 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ record_eq │ ∅ │ ∅ │ ∅ │ │ 2982 │ record_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2249 2249 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ record_ne │ ∅ │ ∅ │ ∅ │ │ 2983 │ record_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2249 2249 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ record_lt │ ∅ │ ∅ │ ∅ │ │ 2984 │ record_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2249 2249 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ record_gt │ ∅ │ ∅ │ ∅ │ │ 2985 │ record_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2249 2249 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ record_le │ ∅ │ ∅ │ ∅ │ │ 2986 │ record_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2249 2249 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ record_ge │ ∅ │ ∅ │ ∅ │ │ 2987 │ btrecordcmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 2249 2249 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btrecordcmp │ ∅ │ ∅ │ ∅ │ │ 2030 │ jsonb_path_match_tz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 2 │ 16 │ 3802 4072 3802 16 │ ∅ │ ∅ │ {target,path,vars,silent} │ ({CONST :consttype 3802 :consttypmod -1 :constcollid 0 :constlen -1 :constbyval false :constisnull false :location 97 :constvalue 8 [ 32 0 0 0 0 0 0 32 ]} {CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 145 :constvalue 1 [ 0 0 0 0 0 0 0 0 ]}) │ ∅ │ jsonb_path_match_tz │ ∅ │ ∅ │ ∅ │ │ 1180 │ jsonb_path_query_array_tz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 2 │ 3802 │ 3802 4072 3802 16 │ ∅ │ ∅ │ {target,path,vars,silent} │ ({CONST :consttype 3802 :consttypmod -1 :constcollid 0 :constlen -1 :constbyval false :constisnull false :location 103 :constvalue 8 [ 32 0 0 0 0 0 0 32 ]} {CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 157 :constvalue 1 [ 0 0 0 0 0 0 0 0 ]}) │ ∅ │ jsonb_path_query_array_tz │ ∅ │ ∅ │ ∅ │ │ 3181 │ record_image_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2249 2249 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ record_image_eq │ ∅ │ ∅ │ ∅ │ │ 3182 │ record_image_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2249 2249 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ record_image_ne │ ∅ │ ∅ │ ∅ │ │ 3183 │ record_image_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2249 2249 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ record_image_lt │ ∅ │ ∅ │ ∅ │ │ 3184 │ record_image_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2249 2249 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ record_image_gt │ ∅ │ ∅ │ ∅ │ │ 3185 │ record_image_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2249 2249 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ record_image_le │ ∅ │ ∅ │ ∅ │ │ 3186 │ record_image_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2249 2249 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ record_image_ge │ ∅ │ ∅ │ ∅ │ │ 3187 │ btrecordimagecmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 2249 2249 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btrecordimagecmp │ ∅ │ ∅ │ ∅ │ │ 5051 │ btequalimage │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ btequalimage │ ∅ │ ∅ │ ∅ │ │ 3082 │ pg_available_extensions │ 11 │ 10 │ 12 │ 10 │ 100 │ 0 │ - │ f │ f │ f │ t │ t │ s │ s │ 0 │ 0 │ 2249 │ │ {19,25,25} │ {o,o,o} │ {name,default_version,comment} │ ∅ │ ∅ │ pg_available_extensions │ ∅ │ ∅ │ ∅ │ │ 3083 │ pg_available_extension_versions │ 11 │ 10 │ 12 │ 10 │ 100 │ 0 │ - │ f │ f │ f │ t │ t │ s │ s │ 0 │ 0 │ 2249 │ │ {19,25,16,16,16,19,1003,25} │ {o,o,o,o,o,o,o,o} │ {name,version,superuser,trusted,relocatable,schema,requires,comment} │ ∅ │ ∅ │ pg_available_extension_versions │ ∅ │ ∅ │ ∅ │ │ 3084 │ pg_extension_update_paths │ 11 │ 10 │ 12 │ 10 │ 100 │ 0 │ - │ f │ f │ f │ t │ t │ s │ s │ 1 │ 0 │ 2249 │ 19 │ {19,25,25,25} │ {i,o,o,o} │ {name,source,target,path} │ ∅ │ ∅ │ pg_extension_update_paths │ ∅ │ ∅ │ ∅ │ │ 3086 │ pg_extension_config_dump │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 2278 │ 2205 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_extension_config_dump │ ∅ │ ∅ │ ∅ │ │ 3100 │ row_number │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ w │ f │ f │ f │ f │ i │ s │ 0 │ 0 │ 20 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ window_row_number │ ∅ │ ∅ │ ∅ │ │ 3101 │ rank │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ w │ f │ f │ f │ f │ i │ s │ 0 │ 0 │ 20 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ window_rank │ ∅ │ ∅ │ ∅ │ │ 3102 │ dense_rank │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ w │ f │ f │ f │ f │ i │ s │ 0 │ 0 │ 20 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ window_dense_rank │ ∅ │ ∅ │ ∅ │ │ 3103 │ percent_rank │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ w │ f │ f │ f │ f │ i │ s │ 0 │ 0 │ 701 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ window_percent_rank │ ∅ │ ∅ │ ∅ │ │ 3104 │ cume_dist │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ w │ f │ f │ f │ f │ i │ s │ 0 │ 0 │ 701 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ window_cume_dist │ ∅ │ ∅ │ ∅ │ │ 3105 │ ntile │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ w │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ window_ntile │ ∅ │ ∅ │ ∅ │ │ 3106 │ lag │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ w │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2283 │ 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ window_lag │ ∅ │ ∅ │ ∅ │ │ 3107 │ lag │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ w │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2283 │ 2283 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ window_lag_with_offset │ ∅ │ ∅ │ ∅ │ │ 3108 │ lag │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ w │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 2283 │ 2283 23 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ window_lag_with_offset_and_default │ ∅ │ ∅ │ ∅ │ │ 3109 │ lead │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ w │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2283 │ 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ window_lead │ ∅ │ ∅ │ ∅ │ │ 3110 │ lead │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ w │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2283 │ 2283 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ window_lead_with_offset │ ∅ │ ∅ │ ∅ │ │ 3111 │ lead │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ w │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 2283 │ 2283 23 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ window_lead_with_offset_and_default │ ∅ │ ∅ │ ∅ │ │ 3112 │ first_value │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ w │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2283 │ 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ window_first_value │ ∅ │ ∅ │ ∅ │ │ 3113 │ last_value │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ w │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2283 │ 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ window_last_value │ ∅ │ ∅ │ ∅ │ │ 3114 │ nth_value │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ w │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2283 │ 2283 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ window_nth_value │ ∅ │ ∅ │ ∅ │ │ 3832 │ anyrange_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 3831 │ 2275 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anyrange_in │ ∅ │ ∅ │ ∅ │ │ 3833 │ anyrange_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ anyrange_out │ ∅ │ ∅ │ ∅ │ │ 3834 │ range_in │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 3831 │ 2275 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_in │ ∅ │ ∅ │ ∅ │ │ 3835 │ range_out │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 2275 │ 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_out │ ∅ │ ∅ │ ∅ │ │ 3836 │ range_recv │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 3 │ 0 │ 3831 │ 2281 26 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_recv │ ∅ │ ∅ │ ∅ │ │ 3837 │ range_send │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 17 │ 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_send │ ∅ │ ∅ │ ∅ │ │ 3848 │ lower │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2283 │ 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_lower │ ∅ │ ∅ │ ∅ │ │ 3849 │ upper │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2283 │ 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_upper │ ∅ │ ∅ │ ∅ │ │ 3850 │ isempty │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_empty │ ∅ │ ∅ │ ∅ │ │ 3851 │ lower_inc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_lower_inc │ ∅ │ ∅ │ ∅ │ │ 3852 │ upper_inc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_upper_inc │ ∅ │ ∅ │ ∅ │ │ 3853 │ lower_inf │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_lower_inf │ ∅ │ ∅ │ ∅ │ │ 3854 │ upper_inf │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 16 │ 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_upper_inf │ ∅ │ ∅ │ ∅ │ │ 3855 │ range_eq │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_eq │ ∅ │ ∅ │ ∅ │ │ 3856 │ range_ne │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_ne │ ∅ │ ∅ │ ∅ │ │ 3857 │ range_overlaps │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_overlaps │ ∅ │ ∅ │ ∅ │ │ 3858 │ range_contains_elem │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3831 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_contains_elem │ ∅ │ ∅ │ ∅ │ │ 3859 │ range_contains │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_contains │ ∅ │ ∅ │ ∅ │ │ 3860 │ elem_contained_by_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2283 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ elem_contained_by_range │ ∅ │ ∅ │ ∅ │ │ 3861 │ range_contained_by │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_contained_by │ ∅ │ ∅ │ ∅ │ │ 3862 │ range_adjacent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_adjacent │ ∅ │ ∅ │ ∅ │ │ 3863 │ range_before │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_before │ ∅ │ ∅ │ ∅ │ │ 3864 │ range_after │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_after │ ∅ │ ∅ │ ∅ │ │ 3865 │ range_overleft │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_overleft │ ∅ │ ∅ │ ∅ │ │ 3866 │ range_overright │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_overright │ ∅ │ ∅ │ ∅ │ │ 3867 │ range_union │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3831 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_union │ ∅ │ ∅ │ ∅ │ │ 4057 │ range_merge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3831 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_merge │ ∅ │ ∅ │ ∅ │ │ 3868 │ range_intersect │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3831 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_intersect │ ∅ │ ∅ │ ∅ │ │ 3869 │ range_minus │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3831 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_minus │ ∅ │ ∅ │ ∅ │ │ 3870 │ range_cmp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_cmp │ ∅ │ ∅ │ ∅ │ │ 3871 │ range_lt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_lt │ ∅ │ ∅ │ ∅ │ │ 3872 │ range_le │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_le │ ∅ │ ∅ │ ∅ │ │ 3873 │ range_ge │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_ge │ ∅ │ ∅ │ ∅ │ │ 3874 │ range_gt │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 3831 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_gt │ ∅ │ ∅ │ ∅ │ │ 3875 │ range_gist_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 16 │ 2281 3831 21 26 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_gist_consistent │ ∅ │ ∅ │ ∅ │ │ 3876 │ range_gist_union │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 3831 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_gist_union │ ∅ │ ∅ │ ∅ │ │ 3879 │ range_gist_penalty │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 2281 │ 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_gist_penalty │ ∅ │ ∅ │ ∅ │ │ 3880 │ range_gist_picksplit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_gist_picksplit │ ∅ │ ∅ │ ∅ │ │ 3881 │ range_gist_same │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 2281 │ 3831 3831 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_gist_same │ ∅ │ ∅ │ ∅ │ │ 3902 │ hash_range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 23 │ 3831 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hash_range │ ∅ │ ∅ │ ∅ │ │ 3417 │ hash_range_extended │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 20 │ 3831 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ hash_range_extended │ ∅ │ ∅ │ ∅ │ │ 3916 │ range_typanalyze │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_typanalyze │ ∅ │ ∅ │ ∅ │ │ 3169 │ rangesel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ rangesel │ ∅ │ ∅ │ ∅ │ │ 3914 │ int4range_canonical │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3904 │ 3904 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4range_canonical │ ∅ │ ∅ │ ∅ │ │ 3928 │ int8range_canonical │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3926 │ 3926 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8range_canonical │ ∅ │ ∅ │ ∅ │ │ 3915 │ daterange_canonical │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 3912 │ 3912 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ daterange_canonical │ ∅ │ ∅ │ ∅ │ │ 3922 │ int4range_subdiff │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int4range_subdiff │ ∅ │ ∅ │ ∅ │ │ 3923 │ int8range_subdiff │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ int8range_subdiff │ ∅ │ ∅ │ ∅ │ │ 3924 │ numrange_subdiff │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ numrange_subdiff │ ∅ │ ∅ │ ∅ │ │ 3925 │ daterange_subdiff │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 1082 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ daterange_subdiff │ ∅ │ ∅ │ ∅ │ │ 3929 │ tsrange_subdiff │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 1114 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tsrange_subdiff │ ∅ │ ∅ │ ∅ │ │ 3930 │ tstzrange_subdiff │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 701 │ 1184 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ tstzrange_subdiff │ ∅ │ ∅ │ ∅ │ │ 3840 │ int4range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 3904 │ 23 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_constructor2 │ ∅ │ ∅ │ ∅ │ │ 3841 │ int4range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 3 │ 0 │ 3904 │ 23 23 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_constructor3 │ ∅ │ ∅ │ ∅ │ │ 3844 │ numrange │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 3906 │ 1700 1700 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_constructor2 │ ∅ │ ∅ │ ∅ │ │ 3845 │ numrange │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 3 │ 0 │ 3906 │ 1700 1700 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_constructor3 │ ∅ │ ∅ │ ∅ │ │ 3933 │ tsrange │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 3908 │ 1114 1114 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_constructor2 │ ∅ │ ∅ │ ∅ │ │ 3934 │ tsrange │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 3 │ 0 │ 3908 │ 1114 1114 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_constructor3 │ ∅ │ ∅ │ ∅ │ │ 3937 │ tstzrange │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 3910 │ 1184 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_constructor2 │ ∅ │ ∅ │ ∅ │ │ 3938 │ tstzrange │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 3 │ 0 │ 3910 │ 1184 1184 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_constructor3 │ ∅ │ ∅ │ ∅ │ │ 3941 │ daterange │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 3912 │ 1082 1082 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_constructor2 │ ∅ │ ∅ │ ∅ │ │ 3942 │ daterange │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 3 │ 0 │ 3912 │ 1082 1082 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_constructor3 │ ∅ │ ∅ │ ∅ │ │ 3945 │ int8range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 3926 │ 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_constructor2 │ ∅ │ ∅ │ ∅ │ │ 3946 │ int8range │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 3 │ 0 │ 3926 │ 20 20 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ range_constructor3 │ ∅ │ ∅ │ ∅ │ │ 3846 │ make_date │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1082 │ 23 23 23 │ ∅ │ ∅ │ {year,month,day} │ ∅ │ ∅ │ make_date │ ∅ │ ∅ │ ∅ │ │ 3847 │ make_time │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 3 │ 0 │ 1083 │ 23 23 701 │ ∅ │ ∅ │ {hour,min,sec} │ ∅ │ ∅ │ make_time │ ∅ │ ∅ │ ∅ │ │ 3461 │ make_timestamp │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 6 │ 0 │ 1114 │ 23 23 23 23 23 701 │ ∅ │ ∅ │ {year,month,mday,hour,min,sec} │ ∅ │ ∅ │ make_timestamp │ ∅ │ ∅ │ ∅ │ │ 3462 │ make_timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 6 │ 0 │ 1184 │ 23 23 23 23 23 701 │ ∅ │ ∅ │ {year,month,mday,hour,min,sec} │ ∅ │ ∅ │ make_timestamptz │ ∅ │ ∅ │ ∅ │ │ 3463 │ make_timestamptz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 7 │ 0 │ 1184 │ 23 23 23 23 23 701 25 │ ∅ │ ∅ │ {year,month,mday,hour,min,sec,timezone} │ ∅ │ ∅ │ make_timestamptz_at_timezone │ ∅ │ ∅ │ ∅ │ │ 4018 │ spg_quad_config │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_quad_config │ ∅ │ ∅ │ ∅ │ │ 4019 │ spg_quad_choose │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_quad_choose │ ∅ │ ∅ │ ∅ │ │ 4020 │ spg_quad_picksplit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_quad_picksplit │ ∅ │ ∅ │ ∅ │ │ 4021 │ spg_quad_inner_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_quad_inner_consistent │ ∅ │ ∅ │ ∅ │ │ 4022 │ spg_quad_leaf_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_quad_leaf_consistent │ ∅ │ ∅ │ ∅ │ │ 4023 │ spg_kd_config │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_kd_config │ ∅ │ ∅ │ ∅ │ │ 4024 │ spg_kd_choose │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_kd_choose │ ∅ │ ∅ │ ∅ │ │ 4025 │ spg_kd_picksplit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_kd_picksplit │ ∅ │ ∅ │ ∅ │ │ 4026 │ spg_kd_inner_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_kd_inner_consistent │ ∅ │ ∅ │ ∅ │ │ 4027 │ spg_text_config │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_text_config │ ∅ │ ∅ │ ∅ │ │ 4028 │ spg_text_choose │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_text_choose │ ∅ │ ∅ │ ∅ │ │ 4029 │ spg_text_picksplit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_text_picksplit │ ∅ │ ∅ │ ∅ │ │ 4030 │ spg_text_inner_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_text_inner_consistent │ ∅ │ ∅ │ ∅ │ │ 4031 │ spg_text_leaf_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_text_leaf_consistent │ ∅ │ ∅ │ ∅ │ │ 3469 │ spg_range_quad_config │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_range_quad_config │ ∅ │ ∅ │ ∅ │ │ 3470 │ spg_range_quad_choose │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_range_quad_choose │ ∅ │ ∅ │ ∅ │ │ 3471 │ spg_range_quad_picksplit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_range_quad_picksplit │ ∅ │ ∅ │ ∅ │ │ 3472 │ spg_range_quad_inner_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_range_quad_inner_consistent │ ∅ │ ∅ │ ∅ │ │ 3473 │ spg_range_quad_leaf_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_range_quad_leaf_consistent │ ∅ │ ∅ │ ∅ │ │ 5012 │ spg_box_quad_config │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_box_quad_config │ ∅ │ ∅ │ ∅ │ │ 5013 │ spg_box_quad_choose │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_box_quad_choose │ ∅ │ ∅ │ ∅ │ │ 5014 │ spg_box_quad_picksplit │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_box_quad_picksplit │ ∅ │ ∅ │ ∅ │ │ 5015 │ spg_box_quad_inner_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_box_quad_inner_consistent │ ∅ │ ∅ │ ∅ │ │ 5016 │ spg_box_quad_leaf_consistent │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 16 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_box_quad_leaf_consistent │ ∅ │ ∅ │ ∅ │ │ 5010 │ spg_bbox_quad_config │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 2278 │ 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_bbox_quad_config │ ∅ │ ∅ │ ∅ │ │ 5011 │ spg_poly_quad_compress │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 603 │ 604 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ spg_poly_quad_compress │ ∅ │ ∅ │ ∅ │ │ 4220 │ pg_copy_physical_replication_slot │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 3 │ 0 │ 2249 │ 19 19 16 │ {19,19,16,19,3220} │ {i,i,i,o,o} │ {src_slot_name,dst_slot_name,temporary,slot_name,lsn} │ ∅ │ ∅ │ pg_copy_physical_replication_slot_a │ ∅ │ ∅ │ ∅ │ │ 4221 │ pg_copy_physical_replication_slot │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 2249 │ 19 19 │ {19,19,19,3220} │ {i,i,o,o} │ {src_slot_name,dst_slot_name,slot_name,lsn} │ ∅ │ ∅ │ pg_copy_physical_replication_slot_b │ ∅ │ ∅ │ ∅ │ │ 3780 │ pg_drop_replication_slot │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 2278 │ 19 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_drop_replication_slot │ ∅ │ ∅ │ ∅ │ │ 3781 │ pg_get_replication_slots │ 11 │ 10 │ 12 │ 1 │ 10 │ 0 │ - │ f │ f │ f │ f │ t │ s │ s │ 0 │ 0 │ 2249 │ │ {19,19,25,26,16,16,23,28,28,3220,3220,25,3220} │ {o,o,o,o,o,o,o,o,o,o,o,o,o} │ {slot_name,plugin,slot_type,datoid,temporary,active,active_pid,xmin,catalog_xmin,restart_lsn,confirmed_flush_lsn,wal_status,min_safe_lsn} │ ∅ │ ∅ │ pg_get_replication_slots │ ∅ │ ∅ │ ∅ │ │ 4222 │ pg_copy_logical_replication_slot │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 4 │ 0 │ 2249 │ 19 19 16 19 │ {19,19,16,19,19,3220} │ {i,i,i,i,o,o} │ {src_slot_name,dst_slot_name,temporary,plugin,slot_name,lsn} │ ∅ │ ∅ │ pg_copy_logical_replication_slot_a │ ∅ │ ∅ │ ∅ │ │ 4223 │ pg_copy_logical_replication_slot │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 3 │ 0 │ 2249 │ 19 19 16 │ {19,19,16,19,3220} │ {i,i,i,o,o} │ {src_slot_name,dst_slot_name,temporary,slot_name,lsn} │ ∅ │ ∅ │ pg_copy_logical_replication_slot_b │ ∅ │ ∅ │ ∅ │ │ 4224 │ pg_copy_logical_replication_slot │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 2249 │ 19 19 │ {19,19,19,3220} │ {i,i,o,o} │ {src_slot_name,dst_slot_name,slot_name,lsn} │ ∅ │ ∅ │ pg_copy_logical_replication_slot_c │ ∅ │ ∅ │ ∅ │ │ 3878 │ pg_replication_slot_advance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 2249 │ 19 3220 │ {19,3220,19,3220} │ {i,i,o,o} │ {slot_name,upto_lsn,slot_name,end_lsn} │ ∅ │ ∅ │ pg_replication_slot_advance │ ∅ │ ∅ │ ∅ │ │ 3577 │ pg_logical_emit_message │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 3 │ 0 │ 3220 │ 16 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_logical_emit_message_text │ ∅ │ ∅ │ ∅ │ │ 3578 │ pg_logical_emit_message │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 3 │ 0 │ 3220 │ 16 25 17 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_logical_emit_message_bytea │ ∅ │ ∅ │ ∅ │ │ 3566 │ pg_event_trigger_dropped_objects │ 11 │ 10 │ 12 │ 10 │ 100 │ 0 │ - │ f │ f │ f │ t │ t │ s │ r │ 0 │ 0 │ 2249 │ │ {26,26,23,16,16,16,25,25,25,25,1009,1009} │ {o,o,o,o,o,o,o,o,o,o,o,o} │ {classid,objid,objsubid,original,normal,is_temporary,object_type,schema_name,object_name,object_identity,address_names,address_args} │ ∅ │ ∅ │ pg_event_trigger_dropped_objects │ ∅ │ ∅ │ ∅ │ │ 4566 │ pg_event_trigger_table_rewrite_oid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 0 │ 0 │ 26 │ │ {26} │ {o} │ {oid} │ ∅ │ ∅ │ pg_event_trigger_table_rewrite_oid │ ∅ │ ∅ │ ∅ │ │ 3783 │ pg_logical_slot_get_binary_changes │ 11 │ 10 │ 12 │ 1000 │ 1000 │ 25 │ - │ f │ f │ f │ f │ t │ v │ u │ 4 │ 1 │ 2249 │ 19 3220 23 1009 │ {19,3220,23,1009,3220,28,17} │ {i,i,i,v,o,o,o} │ {slot_name,upto_lsn,upto_nchanges,options,lsn,xid,data} │ ({CONST :consttype 1009 :consttypmod -1 :constcollid 100 :constlen -1 :constbyval false :constisnull false :location 160 :constvalue 16 [ 64 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 ]}) │ ∅ │ pg_logical_slot_get_binary_changes │ ∅ │ ∅ │ ∅ │ │ 3785 │ pg_logical_slot_peek_binary_changes │ 11 │ 10 │ 12 │ 1000 │ 1000 │ 25 │ - │ f │ f │ f │ f │ t │ v │ u │ 4 │ 1 │ 2249 │ 19 3220 23 1009 │ {19,3220,23,1009,3220,28,17} │ {i,i,i,v,o,o,o} │ {slot_name,upto_lsn,upto_nchanges,options,lsn,xid,data} │ ({CONST :consttype 1009 :consttypmod -1 :constcollid 100 :constlen -1 :constbyval false :constisnull false :location 161 :constvalue 16 [ 64 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 ]}) │ ∅ │ pg_logical_slot_peek_binary_changes │ ∅ │ ∅ │ ∅ │ │ 3786 │ pg_create_logical_replication_slot │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 3 │ 1 │ 2249 │ 19 19 16 │ {19,19,16,19,3220} │ {i,i,i,o,o} │ {slot_name,plugin,temporary,slot_name,lsn} │ ({CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 135 :constvalue 1 [ 0 0 0 0 0 0 0 0 ]}) │ ∅ │ pg_create_logical_replication_slot │ ∅ │ ∅ │ ∅ │ │ 4567 │ pg_event_trigger_table_rewrite_reason │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ r │ 0 │ 0 │ 23 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_event_trigger_table_rewrite_reason │ ∅ │ ∅ │ ∅ │ │ 4568 │ pg_event_trigger_ddl_commands │ 11 │ 10 │ 12 │ 10 │ 100 │ 0 │ - │ f │ f │ f │ t │ t │ s │ r │ 0 │ 0 │ 2249 │ │ {26,26,23,25,25,25,25,16,32} │ {o,o,o,o,o,o,o,o,o} │ {classid,objid,objsubid,command_tag,object_type,schema_name,object_identity,in_extension,command} │ ∅ │ ∅ │ pg_event_trigger_ddl_commands │ ∅ │ ∅ │ ∅ │ │ 3970 │ ordered_set_transition │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 2276 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ordered_set_transition │ ∅ │ ∅ │ ∅ │ │ 3971 │ ordered_set_transition_multi │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2281 │ 2281 2276 │ {2281,2276} │ {i,v} │ ∅ │ ∅ │ ∅ │ ordered_set_transition_multi │ ∅ │ ∅ │ ∅ │ │ 3972 │ percentile_disc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2283 │ 701 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3973 │ percentile_disc_final │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 3 │ 0 │ 2283 │ 2281 701 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ percentile_disc_final │ ∅ │ ∅ │ ∅ │ │ 3974 │ percentile_cont │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 701 │ 701 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3975 │ percentile_cont_float8_final │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 701 │ 2281 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ percentile_cont_float8_final │ ∅ │ ∅ │ ∅ │ │ 3976 │ percentile_cont │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 1186 │ 701 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3977 │ percentile_cont_interval_final │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 1186 │ 2281 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ percentile_cont_interval_final │ ∅ │ ∅ │ ∅ │ │ 3978 │ percentile_disc │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2277 │ 1022 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3979 │ percentile_disc_multi_final │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 3 │ 0 │ 2277 │ 2281 1022 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ percentile_disc_multi_final │ ∅ │ ∅ │ ∅ │ │ 3980 │ percentile_cont │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 1022 │ 1022 701 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3981 │ percentile_cont_float8_multi_final │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 1022 │ 2281 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ percentile_cont_float8_multi_final │ ∅ │ ∅ │ ∅ │ │ 3982 │ percentile_cont │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 1187 │ 1022 1186 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3983 │ percentile_cont_interval_multi_final │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 1187 │ 2281 1022 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ percentile_cont_interval_multi_final │ ∅ │ ∅ │ ∅ │ │ 3984 │ mode │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 2283 │ 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3985 │ mode_final │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 2283 │ 2281 2283 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ mode_final │ ∅ │ ∅ │ ∅ │ │ 3986 │ rank │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 20 │ 2276 │ {2276} │ {v} │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3987 │ rank_final │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 20 │ 2281 2276 │ {2281,2276} │ {i,v} │ ∅ │ ∅ │ ∅ │ hypothetical_rank_final │ ∅ │ ∅ │ ∅ │ │ 3988 │ percent_rank │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 2276 │ {2276} │ {v} │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3989 │ percent_rank_final │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 701 │ 2281 2276 │ {2281,2276} │ {i,v} │ ∅ │ ∅ │ ∅ │ hypothetical_percent_rank_final │ ∅ │ ∅ │ ∅ │ │ 3990 │ cume_dist │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 701 │ 2276 │ {2276} │ {v} │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3991 │ cume_dist_final │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 701 │ 2281 2276 │ {2281,2276} │ {i,v} │ ∅ │ ∅ │ ∅ │ hypothetical_cume_dist_final │ ∅ │ ∅ │ ∅ │ │ 3992 │ dense_rank │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ a │ f │ f │ f │ f │ i │ s │ 1 │ 0 │ 20 │ 2276 │ {2276} │ {v} │ ∅ │ ∅ │ ∅ │ aggregate_dummy │ ∅ │ ∅ │ ∅ │ │ 3993 │ dense_rank_final │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ f │ f │ f │ f │ f │ i │ s │ 2 │ 0 │ 20 │ 2281 2276 │ {2281,2276} │ {i,v} │ ∅ │ ∅ │ ∅ │ hypothetical_dense_rank_final │ ∅ │ ∅ │ ∅ │ │ 3582 │ binary_upgrade_set_next_pg_type_oid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 2278 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ binary_upgrade_set_next_pg_type_oid │ ∅ │ ∅ │ ∅ │ │ 3584 │ binary_upgrade_set_next_array_pg_type_oid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 2278 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ binary_upgrade_set_next_array_pg_type_oid │ ∅ │ ∅ │ ∅ │ │ 3585 │ binary_upgrade_set_next_toast_pg_type_oid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 2278 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ binary_upgrade_set_next_toast_pg_type_oid │ ∅ │ ∅ │ ∅ │ │ 3586 │ binary_upgrade_set_next_heap_pg_class_oid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 2278 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ binary_upgrade_set_next_heap_pg_class_oid │ ∅ │ ∅ │ ∅ │ │ 3587 │ binary_upgrade_set_next_index_pg_class_oid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 2278 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ binary_upgrade_set_next_index_pg_class_oid │ ∅ │ ∅ │ ∅ │ │ 3588 │ binary_upgrade_set_next_toast_pg_class_oid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 2278 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ binary_upgrade_set_next_toast_pg_class_oid │ ∅ │ ∅ │ ∅ │ │ 3589 │ binary_upgrade_set_next_pg_enum_oid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 2278 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ binary_upgrade_set_next_pg_enum_oid │ ∅ │ ∅ │ ∅ │ │ 3590 │ binary_upgrade_set_next_pg_authid_oid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 2278 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ binary_upgrade_set_next_pg_authid_oid │ ∅ │ ∅ │ ∅ │ │ 3591 │ binary_upgrade_create_empty_extension │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ v │ u │ 7 │ 0 │ 2278 │ 25 25 16 25 1028 1009 1009 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ binary_upgrade_create_empty_extension │ ∅ │ ∅ │ ∅ │ │ 4083 │ binary_upgrade_set_record_init_privs │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 1 │ 0 │ 2278 │ 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ binary_upgrade_set_record_init_privs │ ∅ │ ∅ │ ∅ │ │ 4101 │ binary_upgrade_set_missing_value │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 3 │ 0 │ 2278 │ 26 25 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ binary_upgrade_set_missing_value │ ∅ │ ∅ │ ∅ │ │ 4302 │ koi8r_to_mic │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ koi8r_to_mic │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4303 │ mic_to_koi8r │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ mic_to_koi8r │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4304 │ iso_to_mic │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ iso_to_mic │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4305 │ mic_to_iso │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ mic_to_iso │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4306 │ win1251_to_mic │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ win1251_to_mic │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4307 │ mic_to_win1251 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ mic_to_win1251 │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4308 │ win866_to_mic │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ win866_to_mic │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4309 │ mic_to_win866 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ mic_to_win866 │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4310 │ koi8r_to_win1251 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ koi8r_to_win1251 │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4311 │ win1251_to_koi8r │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ win1251_to_koi8r │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4312 │ koi8r_to_win866 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ koi8r_to_win866 │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4313 │ win866_to_koi8r │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ win866_to_koi8r │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4314 │ win866_to_win1251 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ win866_to_win1251 │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4315 │ win1251_to_win866 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ win1251_to_win866 │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4316 │ iso_to_koi8r │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ iso_to_koi8r │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4317 │ koi8r_to_iso │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ koi8r_to_iso │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4318 │ iso_to_win1251 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ iso_to_win1251 │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4319 │ win1251_to_iso │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ win1251_to_iso │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4320 │ iso_to_win866 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ iso_to_win866 │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4321 │ win866_to_iso │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ win866_to_iso │ $libdir/cyrillic_and_mic │ ∅ │ ∅ │ │ 4322 │ euc_cn_to_mic │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ euc_cn_to_mic │ $libdir/euc_cn_and_mic │ ∅ │ ∅ │ │ 4323 │ mic_to_euc_cn │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ mic_to_euc_cn │ $libdir/euc_cn_and_mic │ ∅ │ ∅ │ │ 4324 │ euc_jp_to_sjis │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ euc_jp_to_sjis │ $libdir/euc_jp_and_sjis │ ∅ │ ∅ │ │ 4325 │ sjis_to_euc_jp │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ sjis_to_euc_jp │ $libdir/euc_jp_and_sjis │ ∅ │ ∅ │ │ 4326 │ euc_jp_to_mic │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ euc_jp_to_mic │ $libdir/euc_jp_and_sjis │ ∅ │ ∅ │ │ 4327 │ sjis_to_mic │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ sjis_to_mic │ $libdir/euc_jp_and_sjis │ ∅ │ ∅ │ │ 4328 │ mic_to_euc_jp │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ mic_to_euc_jp │ $libdir/euc_jp_and_sjis │ ∅ │ ∅ │ │ 4329 │ mic_to_sjis │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ mic_to_sjis │ $libdir/euc_jp_and_sjis │ ∅ │ ∅ │ │ 4330 │ euc_kr_to_mic │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ euc_kr_to_mic │ $libdir/euc_kr_and_mic │ ∅ │ ∅ │ │ 4331 │ mic_to_euc_kr │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ mic_to_euc_kr │ $libdir/euc_kr_and_mic │ ∅ │ ∅ │ │ 4332 │ euc_tw_to_big5 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ euc_tw_to_big5 │ $libdir/euc_tw_and_big5 │ ∅ │ ∅ │ │ 4333 │ big5_to_euc_tw │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ big5_to_euc_tw │ $libdir/euc_tw_and_big5 │ ∅ │ ∅ │ │ 4334 │ euc_tw_to_mic │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ euc_tw_to_mic │ $libdir/euc_tw_and_big5 │ ∅ │ ∅ │ │ 4335 │ big5_to_mic │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ big5_to_mic │ $libdir/euc_tw_and_big5 │ ∅ │ ∅ │ │ 4336 │ mic_to_euc_tw │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ mic_to_euc_tw │ $libdir/euc_tw_and_big5 │ ∅ │ ∅ │ │ 4337 │ mic_to_big5 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ mic_to_big5 │ $libdir/euc_tw_and_big5 │ ∅ │ ∅ │ │ 4338 │ latin2_to_mic │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ latin2_to_mic │ $libdir/latin2_and_win1250 │ ∅ │ ∅ │ │ 4339 │ mic_to_latin2 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ mic_to_latin2 │ $libdir/latin2_and_win1250 │ ∅ │ ∅ │ │ 4340 │ win1250_to_mic │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ win1250_to_mic │ $libdir/latin2_and_win1250 │ ∅ │ ∅ │ │ 4341 │ mic_to_win1250 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ mic_to_win1250 │ $libdir/latin2_and_win1250 │ ∅ │ ∅ │ │ 4342 │ latin2_to_win1250 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ latin2_to_win1250 │ $libdir/latin2_and_win1250 │ ∅ │ ∅ │ │ 4343 │ win1250_to_latin2 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ win1250_to_latin2 │ $libdir/latin2_and_win1250 │ ∅ │ ∅ │ │ 4344 │ latin1_to_mic │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ latin1_to_mic │ $libdir/latin_and_mic │ ∅ │ ∅ │ │ 4345 │ mic_to_latin1 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ mic_to_latin1 │ $libdir/latin_and_mic │ ∅ │ ∅ │ │ 4346 │ latin3_to_mic │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ latin3_to_mic │ $libdir/latin_and_mic │ ∅ │ ∅ │ │ 4347 │ mic_to_latin3 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ mic_to_latin3 │ $libdir/latin_and_mic │ ∅ │ ∅ │ │ 4348 │ latin4_to_mic │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ latin4_to_mic │ $libdir/latin_and_mic │ ∅ │ ∅ │ │ 4349 │ mic_to_latin4 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ mic_to_latin4 │ $libdir/latin_and_mic │ ∅ │ ∅ │ │ 4352 │ big5_to_utf8 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ big5_to_utf8 │ $libdir/utf8_and_big5 │ ∅ │ ∅ │ │ 4353 │ utf8_to_big5 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ utf8_to_big5 │ $libdir/utf8_and_big5 │ ∅ │ ∅ │ │ 4354 │ utf8_to_koi8r │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ utf8_to_koi8r │ $libdir/utf8_and_cyrillic │ ∅ │ ∅ │ │ 4355 │ koi8r_to_utf8 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ koi8r_to_utf8 │ $libdir/utf8_and_cyrillic │ ∅ │ ∅ │ │ 4356 │ utf8_to_koi8u │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ utf8_to_koi8u │ $libdir/utf8_and_cyrillic │ ∅ │ ∅ │ │ 4357 │ koi8u_to_utf8 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ koi8u_to_utf8 │ $libdir/utf8_and_cyrillic │ ∅ │ ∅ │ │ 4358 │ utf8_to_win │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ utf8_to_win │ $libdir/utf8_and_win │ ∅ │ ∅ │ │ 4359 │ win_to_utf8 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ win_to_utf8 │ $libdir/utf8_and_win │ ∅ │ ∅ │ │ 4360 │ euc_cn_to_utf8 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ euc_cn_to_utf8 │ $libdir/utf8_and_euc_cn │ ∅ │ ∅ │ │ 4361 │ utf8_to_euc_cn │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ utf8_to_euc_cn │ $libdir/utf8_and_euc_cn │ ∅ │ ∅ │ │ 4362 │ euc_jp_to_utf8 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ euc_jp_to_utf8 │ $libdir/utf8_and_euc_jp │ ∅ │ ∅ │ │ 4363 │ utf8_to_euc_jp │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ utf8_to_euc_jp │ $libdir/utf8_and_euc_jp │ ∅ │ ∅ │ │ 4364 │ euc_kr_to_utf8 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ euc_kr_to_utf8 │ $libdir/utf8_and_euc_kr │ ∅ │ ∅ │ │ 4365 │ utf8_to_euc_kr │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ utf8_to_euc_kr │ $libdir/utf8_and_euc_kr │ ∅ │ ∅ │ │ 4366 │ euc_tw_to_utf8 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ euc_tw_to_utf8 │ $libdir/utf8_and_euc_tw │ ∅ │ ∅ │ │ 4367 │ utf8_to_euc_tw │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ utf8_to_euc_tw │ $libdir/utf8_and_euc_tw │ ∅ │ ∅ │ │ 4368 │ gb18030_to_utf8 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gb18030_to_utf8 │ $libdir/utf8_and_gb18030 │ ∅ │ ∅ │ │ 4369 │ utf8_to_gb18030 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ utf8_to_gb18030 │ $libdir/utf8_and_gb18030 │ ∅ │ ∅ │ │ 4370 │ gbk_to_utf8 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ gbk_to_utf8 │ $libdir/utf8_and_gbk │ ∅ │ ∅ │ │ 4371 │ utf8_to_gbk │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ utf8_to_gbk │ $libdir/utf8_and_gbk │ ∅ │ ∅ │ │ 4372 │ utf8_to_iso8859 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ utf8_to_iso8859 │ $libdir/utf8_and_iso8859 │ ∅ │ ∅ │ │ 4373 │ iso8859_to_utf8 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ iso8859_to_utf8 │ $libdir/utf8_and_iso8859 │ ∅ │ ∅ │ │ 4374 │ iso8859_1_to_utf8 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ iso8859_1_to_utf8 │ $libdir/utf8_and_iso8859_1 │ ∅ │ ∅ │ │ 4375 │ utf8_to_iso8859_1 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ utf8_to_iso8859_1 │ $libdir/utf8_and_iso8859_1 │ ∅ │ ∅ │ │ 4376 │ johab_to_utf8 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ johab_to_utf8 │ $libdir/utf8_and_johab │ ∅ │ ∅ │ │ 4377 │ utf8_to_johab │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ utf8_to_johab │ $libdir/utf8_and_johab │ ∅ │ ∅ │ │ 4378 │ sjis_to_utf8 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ sjis_to_utf8 │ $libdir/utf8_and_sjis │ ∅ │ ∅ │ │ 4379 │ utf8_to_sjis │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ utf8_to_sjis │ $libdir/utf8_and_sjis │ ∅ │ ∅ │ │ 4380 │ uhc_to_utf8 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ uhc_to_utf8 │ $libdir/utf8_and_uhc │ ∅ │ ∅ │ │ 4381 │ utf8_to_uhc │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ utf8_to_uhc │ $libdir/utf8_and_uhc │ ∅ │ ∅ │ │ 4382 │ euc_jis_2004_to_utf8 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ euc_jis_2004_to_utf8 │ $libdir/utf8_and_euc2004 │ ∅ │ ∅ │ │ 4383 │ utf8_to_euc_jis_2004 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ utf8_to_euc_jis_2004 │ $libdir/utf8_and_euc2004 │ ∅ │ ∅ │ │ 4384 │ shift_jis_2004_to_utf8 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ shift_jis_2004_to_utf8 │ $libdir/utf8_and_sjis2004 │ ∅ │ ∅ │ │ 4385 │ utf8_to_shift_jis_2004 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ utf8_to_shift_jis_2004 │ $libdir/utf8_and_sjis2004 │ ∅ │ ∅ │ │ 4386 │ euc_jis_2004_to_shift_jis_2004 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ euc_jis_2004_to_shift_jis_2004 │ $libdir/euc2004_sjis2004 │ ∅ │ ∅ │ │ 4387 │ shift_jis_2004_to_euc_jis_2004 │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 5 │ 0 │ 2278 │ 23 23 2275 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ shift_jis_2004_to_euc_jis_2004 │ $libdir/euc2004_sjis2004 │ ∅ │ ∅ │ │ 5040 │ matchingsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 0 │ 701 │ 2281 26 2281 23 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ matchingsel │ ∅ │ ∅ │ ∅ │ │ 5041 │ matchingjoinsel │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 5 │ 0 │ 701 │ 2281 26 2281 21 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ matchingjoinsel │ ∅ │ ∅ │ ∅ │ │ 6003 │ pg_replication_origin_create │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 26 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_replication_origin_create │ ∅ │ ∅ │ ∅ │ │ 6004 │ pg_replication_origin_drop │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 2278 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_replication_origin_drop │ ∅ │ ∅ │ ∅ │ │ 6005 │ pg_replication_origin_oid │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 26 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_replication_origin_oid │ ∅ │ ∅ │ ∅ │ │ 6006 │ pg_replication_origin_session_setup │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 2278 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_replication_origin_session_setup │ ∅ │ ∅ │ ∅ │ │ 6007 │ pg_replication_origin_session_reset │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 0 │ 0 │ 2278 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_replication_origin_session_reset │ ∅ │ ∅ │ ∅ │ │ 6008 │ pg_replication_origin_session_is_setup │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 0 │ 0 │ 16 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_replication_origin_session_is_setup │ ∅ │ ∅ │ ∅ │ │ 6009 │ pg_replication_origin_session_progress │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 3220 │ 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_replication_origin_session_progress │ ∅ │ ∅ │ ∅ │ │ 6010 │ pg_replication_origin_xact_setup │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 2 │ 0 │ 2278 │ 3220 1184 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_replication_origin_xact_setup │ ∅ │ ∅ │ ∅ │ │ 6011 │ pg_replication_origin_xact_reset │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 0 │ 0 │ 2278 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_replication_origin_xact_reset │ ∅ │ ∅ │ ∅ │ │ 6012 │ pg_replication_origin_advance │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 2278 │ 25 3220 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_replication_origin_advance │ ∅ │ ∅ │ ∅ │ │ 6013 │ pg_replication_origin_progress │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 3220 │ 25 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_replication_origin_progress │ ∅ │ ∅ │ ∅ │ │ 6014 │ pg_show_replication_origin_status │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ f │ t │ v │ r │ 0 │ 0 │ 2249 │ │ {26,25,3220,3220} │ {o,o,o,o} │ {local_id,external_id,remote_lsn,local_lsn} │ ∅ │ ∅ │ pg_show_replication_origin_status │ ∅ │ ∅ │ ∅ │ │ 6119 │ pg_get_publication_tables │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ s │ s │ 1 │ 0 │ 26 │ 25 │ {25,26} │ {i,o} │ {pubname,relid} │ ∅ │ ∅ │ pg_get_publication_tables │ ∅ │ ∅ │ ∅ │ │ 6121 │ pg_relation_is_publishable │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 2205 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_relation_is_publishable │ ∅ │ ∅ │ ∅ │ │ 3298 │ row_security_active │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ row_security_active │ ∅ │ ∅ │ ∅ │ │ 3299 │ row_security_active │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 1 │ 0 │ 16 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ row_security_active_name │ ∅ │ ∅ │ ∅ │ │ 3441 │ pg_control_system │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2249 │ │ {23,23,20,1184} │ {o,o,o,o} │ {pg_control_version,catalog_version_no,system_identifier,pg_control_last_modified} │ ∅ │ ∅ │ pg_control_system │ ∅ │ ∅ │ ∅ │ │ 3442 │ pg_control_checkpoint │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2249 │ │ {3220,3220,25,23,23,16,25,26,28,28,28,26,28,28,26,28,28,1184} │ {o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o} │ {checkpoint_lsn,redo_lsn,redo_wal_file,timeline_id,prev_timeline_id,full_page_writes,next_xid,next_oid,next_multixact_id,next_multi_offset,oldest_xid,oldest_xid_dbid,oldest_active_xid,oldest_multi_xid,oldest_multi_dbid,oldest_commit_ts_xid,newest_commit_ts_xid,checkpoint_time} │ ∅ │ ∅ │ pg_control_checkpoint │ ∅ │ ∅ │ ∅ │ │ 3443 │ pg_control_recovery │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2249 │ │ {3220,23,3220,3220,16} │ {o,o,o,o,o} │ {min_recovery_end_lsn,min_recovery_end_timeline,backup_start_lsn,backup_end_lsn,end_of_backup_record_required} │ ∅ │ ∅ │ pg_control_recovery │ ∅ │ ∅ │ ∅ │ │ 3444 │ pg_control_init │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2249 │ │ {23,23,23,23,23,23,23,23,23,16,23} │ {o,o,o,o,o,o,o,o,o,o,o} │ {max_data_alignment,database_block_size,blocks_per_segment,wal_block_size,bytes_per_wal_segment,max_identifier_length,max_index_columns,max_toast_chunk_size,large_object_chunk_size,float8_pass_by_value,data_page_checksum_version} │ ∅ │ ∅ │ pg_control_init │ ∅ │ ∅ │ ∅ │ │ 3445 │ pg_import_system_collations │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 23 │ 4089 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_import_system_collations │ ∅ │ ∅ │ ∅ │ │ 3448 │ pg_collation_actual_version │ 11 │ 10 │ 12 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 25 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_collation_actual_version │ ∅ │ ∅ │ ∅ │ │ 5028 │ satisfies_hash_partition │ 11 │ 10 │ 12 │ 1 │ 0 │ 2276 │ - │ f │ f │ f │ f │ f │ i │ s │ 4 │ 0 │ 16 │ 26 23 23 2276 │ ∅ │ {i,i,i,v} │ ∅ │ ∅ │ ∅ │ satisfies_hash_partition │ ∅ │ ∅ │ ∅ │ │ 3423 │ pg_partition_tree │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ v │ s │ 1 │ 0 │ 2249 │ 2205 │ {2205,2205,2205,16,23} │ {i,o,o,o,o} │ {rootrelid,relid,parentrelid,isleaf,level} │ ∅ │ ∅ │ pg_partition_tree │ ∅ │ ∅ │ ∅ │ │ 3425 │ pg_partition_ancestors │ 11 │ 10 │ 12 │ 1 │ 10 │ 0 │ - │ f │ f │ f │ t │ t │ v │ s │ 1 │ 0 │ 2205 │ 2205 │ {2205,2205} │ {i,o} │ {partitionid,relid} │ ∅ │ ∅ │ pg_partition_ancestors │ ∅ │ ∅ │ ∅ │ │ 3424 │ pg_partition_root │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 1 │ 0 │ 2205 │ 2205 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_partition_root │ ∅ │ ∅ │ ∅ │ │ 3329 │ pg_show_all_file_settings │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ v │ s │ 0 │ 0 │ 2249 │ │ {25,23,23,25,25,16,25} │ {o,o,o,o,o,o,o} │ {sourcefile,sourceline,seqno,name,setting,applied,error} │ ∅ │ ∅ │ show_all_file_settings │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 3400 │ pg_config │ 11 │ 10 │ 12 │ 1 │ 23 │ 0 │ - │ f │ f │ f │ t │ t │ s │ r │ 0 │ 0 │ 2249 │ │ {25,25} │ {o,o} │ {name,setting} │ ∅ │ ∅ │ pg_config │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 5052 │ pg_get_shmem_allocations │ 11 │ 10 │ 12 │ 1 │ 50 │ 0 │ - │ f │ f │ f │ t │ t │ v │ s │ 0 │ 0 │ 2249 │ │ {25,20,20,20} │ {o,o,o,o} │ {name,off,size,allocated_size} │ ∅ │ ∅ │ pg_get_shmem_allocations │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 5054 │ jsonb_set_lax │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ i │ s │ 5 │ 2 │ 3802 │ 3802 1009 3802 16 25 │ ∅ │ ∅ │ {jsonb_in,path,replacement,create_if_missing,null_value_treatment} │ ({CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 138 :constvalue 1 [ 1 0 0 0 0 0 0 0 ]} {CONST :consttype 25 :consttypmod -1 :constcollid 100 :constlen -1 :constbyval false :constisnull false :location 190 :constvalue 17 [ 68 0 0 0 117 115 101 95 106 115 111 110 95 110 117 108 108 ]}) │ ∅ │ jsonb_set_lax │ ∅ │ ∅ │ ∅ │ │ 1268 │ parse_ident │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 1 │ 1009 │ 25 16 │ ∅ │ ∅ │ {str,strict} │ ({CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 74 :constvalue 1 [ 1 0 0 0 0 0 0 0 ]}) │ ∅ │ parse_ident │ ∅ │ ∅ │ ∅ │ │ 4351 │ is_normalized │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 1 │ 16 │ 25 25 │ ∅ │ ∅ │ ∅ │ ({CONST :consttype 25 :consttypmod -1 :constcollid 100 :constlen -1 :constbyval false :constisnull false :location 62 :constvalue 7 [ 28 0 0 0 78 70 67 ]}) │ ∅ │ unicode_is_normalized │ ∅ │ ∅ │ ∅ │ │ 12325 │ ts_debug │ 11 │ 10 │ 14 │ 100 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ s │ s │ 2 │ 0 │ 2249 │ 3734 25 │ {3734,25,25,25,25,3770,3769,1009} │ {i,i,o,o,o,o,o,o} │ {config,document,alias,description,token,dictionaries,dictionary,lexemes} │ ∅ │ ∅ │ ↵│ ∅ │ ∅ │ ∅ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ SELECT ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ tt.alias AS alias, ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ tt.description AS description, ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ parse.token AS token, ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ARRAY ( SELECT m.mapdict::pg_catalog.regdictionary ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ FROM pg_catalog.pg_ts_config_map AS m ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ORDER BY m.mapseqno ) ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ AS dictionaries, ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ( SELECT mapdict::pg_catalog.regdictionary ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ FROM pg_catalog.pg_ts_config_map AS m ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ORDER BY pg_catalog.ts_lexize(mapdict, parse.token) IS NULL, m.mapseqno ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ LIMIT 1 ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ) AS dictionary, ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ( SELECT pg_catalog.ts_lexize(mapdict, parse.token) ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ FROM pg_catalog.pg_ts_config_map AS m ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ WHERE m.mapcfg = $1 AND m.maptokentype = parse.tokid ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ORDER BY pg_catalog.ts_lexize(mapdict, parse.token) IS NULL, m.mapseqno ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ LIMIT 1 ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ) AS lexemes ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ FROM pg_catalog.ts_parse( ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ (SELECT cfgparser FROM pg_catalog.pg_ts_config WHERE oid = $1 ), $2 ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ) AS parse, ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ pg_catalog.ts_token_type( ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ (SELECT cfgparser FROM pg_catalog.pg_ts_config WHERE oid = $1 ) ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ) AS tt ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ WHERE tt.tokid = parse.tokid ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ 12326 │ ts_debug │ 11 │ 10 │ 14 │ 100 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ s │ s │ 1 │ 0 │ 2249 │ 25 │ {25,25,25,25,3770,3769,1009} │ {i,o,o,o,o,o,o} │ {document,alias,description,token,dictionaries,dictionary,lexemes} │ ∅ │ ∅ │ ↵│ ∅ │ ∅ │ ∅ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ SELECT * FROM pg_catalog.ts_debug( pg_catalog.get_current_ts_config(), $1); ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ 3960 │ json_populate_record │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ s │ s │ 3 │ 1 │ 2283 │ 2283 114 16 │ ∅ │ ∅ │ {base,from_json,use_json_as_text} │ ({CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 164 :constvalue 1 [ 0 0 0 0 0 0 0 0 ]}) │ ∅ │ json_populate_record │ ∅ │ ∅ │ ∅ │ │ 3961 │ json_populate_recordset │ 11 │ 10 │ 12 │ 1 │ 100 │ 0 │ - │ f │ f │ f │ f │ t │ s │ s │ 3 │ 1 │ 2283 │ 2283 114 16 │ ∅ │ ∅ │ {base,from_json,use_json_as_text} │ ({CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 167 :constvalue 1 [ 0 0 0 0 0 0 0 0 ]}) │ ∅ │ json_populate_recordset │ ∅ │ ∅ │ ∅ │ │ 3782 │ pg_logical_slot_get_changes │ 11 │ 10 │ 12 │ 1000 │ 1000 │ 25 │ - │ f │ f │ f │ f │ t │ v │ u │ 4 │ 1 │ 2249 │ 19 3220 23 1009 │ {19,3220,23,1009,3220,28,25} │ {i,i,i,v,o,o,o} │ {slot_name,upto_lsn,upto_nchanges,options,lsn,xid,data} │ ({CONST :consttype 1009 :consttypmod -1 :constcollid 100 :constlen -1 :constbyval false :constisnull false :location 153 :constvalue 16 [ 64 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 ]}) │ ∅ │ pg_logical_slot_get_changes │ ∅ │ ∅ │ ∅ │ │ 3784 │ pg_logical_slot_peek_changes │ 11 │ 10 │ 12 │ 1000 │ 1000 │ 25 │ - │ f │ f │ f │ f │ t │ v │ u │ 4 │ 1 │ 2249 │ 19 3220 23 1009 │ {19,3220,23,1009,3220,28,25} │ {i,i,i,v,o,o,o} │ {slot_name,upto_lsn,upto_nchanges,options,lsn,xid,data} │ ({CONST :consttype 1009 :consttypmod -1 :constcollid 100 :constlen -1 :constbyval false :constisnull false :location 154 :constvalue 16 [ 64 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 ]}) │ ∅ │ pg_logical_slot_peek_changes │ ∅ │ ∅ │ ∅ │ │ 3779 │ pg_create_physical_replication_slot │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 3 │ 2 │ 2249 │ 19 16 16 │ {19,16,16,19,3220} │ {i,i,i,o,o} │ {slot_name,immediately_reserve,temporary,slot_name,lsn} │ ({CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 126 :constvalue 1 [ 0 0 0 0 0 0 0 0 ]} {CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 166 :constvalue 1 [ 0 0 0 0 0 0 0 0 ]}) │ ∅ │ pg_create_physical_replication_slot │ ∅ │ ∅ │ ∅ │ │ 3464 │ make_interval │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 7 │ 7 │ 1186 │ 23 23 23 23 23 23 701 │ ∅ │ ∅ │ {years,months,weeks,days,hours,mins,secs} │ ({CONST :consttype 23 :consttypmod -1 :constcollid 0 :constlen 4 :constbyval true :constisnull false :location 62 :constvalue 4 [ 0 0 0 0 0 0 0 0 ]} {CONST :consttype 23 :consttypmod -1 :constcollid 0 :constlen 4 :constbyval true :constisnull false :location 85 :constvalue 4 [ 0 0 0 0 0 0 0 0 ]} {CONST :consttype 23 :consttypmod -1 :constcollid 0 :constlen 4 :constbyval true :constisnull false :location 107 :constvalue 4 [ 0 0 0 0 0 0 0 0 ]} {CONST :consttype 23 :consttypmod -1 :constcollid 0 :constlen 4 :constbyval true :constisnull false :location 144 :constvalue 4 [ 0 0 0 0 0 0 0 0 ]} {CONST :consttype 23 :consttypmod -1 :constcollid 0 :constlen 4 :constbyval true :constisnull false :location 166 :constvalue 4 [ 0 0 0 0 0 0 0 0 ]} {CONST :consttype 23 :consttypmod -1 :constcollid 0 :constlen 4 :constbyval true :constisnull false :location 187 :constvalue 4 [ 0 0 0 0 0 0 0 0 ]} {FUNCEXPR :funcid 1746 :funcresulttype 701 :funcretset false :funcvariadic false :funcformat 2 :funccollid 0 :inputcollid 0 :args ({CONST :consttype 1700 :consttypmod -1 :constcollid 0 :constlen -1 :constbyval false :constisnull false :location 236 :constvalue 6 [ 24 0 0 0 -128 -128 ]}) :location -1}) │ ∅ │ make_interval │ ∅ │ ∅ │ ∅ │ │ 3305 │ jsonb_set │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 1 │ 3802 │ 3802 1009 3802 16 │ ∅ │ ∅ │ {jsonb_in,path,replacement,create_if_missing} │ ({CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 134 :constvalue 1 [ 1 0 0 0 0 0 0 0 ]}) │ ∅ │ jsonb_set │ ∅ │ ∅ │ ∅ │ │ 2274 │ pg_stat_reset │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ v │ s │ 0 │ 0 │ 2278 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_reset │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 4005 │ jsonb_path_exists │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 2 │ 16 │ 3802 4072 3802 16 │ ∅ │ ∅ │ {target,path,vars,silent} │ ({CONST :consttype 3802 :consttypmod -1 :constcollid 0 :constlen -1 :constbyval false :constisnull false :location 95 :constvalue 8 [ 32 0 0 0 0 0 0 32 ]} {CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 144 :constvalue 1 [ 0 0 0 0 0 0 0 0 ]}) │ ∅ │ jsonb_path_exists │ ∅ │ ∅ │ ∅ │ │ 4009 │ jsonb_path_match │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 2 │ 16 │ 3802 4072 3802 16 │ ∅ │ ∅ │ {target,path,vars,silent} │ ({CONST :consttype 3802 :consttypmod -1 :constcollid 0 :constlen -1 :constbyval false :constisnull false :location 94 :constvalue 8 [ 32 0 0 0 0 0 0 32 ]} {CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 142 :constvalue 1 [ 0 0 0 0 0 0 0 0 ]}) │ ∅ │ jsonb_path_match │ ∅ │ ∅ │ ∅ │ │ 4006 │ jsonb_path_query │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 4 │ 2 │ 3802 │ 3802 4072 3802 16 │ ∅ │ ∅ │ {target,path,vars,silent} │ ({CONST :consttype 3802 :consttypmod -1 :constcollid 0 :constlen -1 :constbyval false :constisnull false :location 94 :constvalue 8 [ 32 0 0 0 0 0 0 32 ]} {CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 142 :constvalue 1 [ 0 0 0 0 0 0 0 0 ]}) │ ∅ │ jsonb_path_query │ ∅ │ ∅ │ ∅ │ │ 4008 │ jsonb_path_query_first │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 4 │ 2 │ 3802 │ 3802 4072 3802 16 │ ∅ │ ∅ │ {target,path,vars,silent} │ ({CONST :consttype 3802 :consttypmod -1 :constcollid 0 :constlen -1 :constbyval false :constisnull false :location 100 :constvalue 8 [ 32 0 0 0 0 0 0 32 ]} {CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 154 :constvalue 1 [ 0 0 0 0 0 0 0 0 ]}) │ ∅ │ jsonb_path_query_first │ ∅ │ ∅ │ ∅ │ │ 1177 │ jsonb_path_exists_tz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 2 │ 16 │ 3802 4072 3802 16 │ ∅ │ ∅ │ {target,path,vars,silent} │ ({CONST :consttype 3802 :consttypmod -1 :constcollid 0 :constlen -1 :constbyval false :constisnull false :location 98 :constvalue 8 [ 32 0 0 0 0 0 0 32 ]} {CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 147 :constvalue 1 [ 0 0 0 0 0 0 0 0 ]}) │ ∅ │ jsonb_path_exists_tz │ ∅ │ ∅ │ ∅ │ │ 1179 │ jsonb_path_query_tz │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ s │ s │ 4 │ 2 │ 3802 │ 3802 4072 3802 16 │ ∅ │ ∅ │ {target,path,vars,silent} │ ({CONST :consttype 3802 :consttypmod -1 :constcollid 0 :constlen -1 :constbyval false :constisnull false :location 97 :constvalue 8 [ 32 0 0 0 0 0 0 32 ]} {CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 145 :constvalue 1 [ 0 0 0 0 0 0 0 0 ]}) │ ∅ │ jsonb_path_query_tz │ ∅ │ ∅ │ ∅ │ │ 2023 │ jsonb_path_query_first_tz │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ s │ 4 │ 2 │ 3802 │ 3802 4072 3802 16 │ ∅ │ ∅ │ {target,path,vars,silent} │ ({CONST :consttype 3802 :consttypmod -1 :constcollid 0 :constlen -1 :constbyval false :constisnull false :location 103 :constvalue 8 [ 32 0 0 0 0 0 0 32 ]} {CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 157 :constvalue 1 [ 0 0 0 0 0 0 0 0 ]}) │ ∅ │ jsonb_path_query_first_tz │ ∅ │ ∅ │ ∅ │ │ 4350 │ normalize │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 1 │ 25 │ 25 25 │ ∅ │ ∅ │ ∅ │ ({CONST :consttype 25 :consttypmod -1 :constcollid 100 :constlen -1 :constbyval false :constisnull false :location 115 :constvalue 7 [ 28 0 0 0 78 70 67 ]}) │ ∅ │ unicode_normalize_func │ ∅ │ ∅ │ ∅ │ │ 2172 │ pg_start_backup │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ r │ 3 │ 2 │ 3220 │ 25 16 16 │ ∅ │ ∅ │ {label,fast,exclusive} │ ({CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 481 :constvalue 1 [ 0 0 0 0 0 0 0 0 ]} {CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 514 :constvalue 1 [ 1 0 0 0 0 0 0 0 ]}) │ ∅ │ pg_start_backup │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 2739 │ pg_stop_backup │ 11 │ 10 │ 12 │ 1 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ v │ r │ 2 │ 1 │ 2249 │ 16 16 │ {16,16,3220,25,25} │ {i,i,o,o,o} │ {exclusive,wait_for_archive,lsn,labelfile,spcmapfile} │ ({CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 104 :constvalue 1 [ 1 0 0 0 0 0 0 0 ]}) │ ∅ │ pg_stop_backup_v2 │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 3098 │ pg_create_restore_point │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 3220 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_create_restore_point │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 2848 │ pg_switch_wal │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 3220 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_switch_wal │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 3071 │ pg_wal_replay_pause │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2278 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_wal_replay_pause │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 3072 │ pg_wal_replay_resume │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 2278 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_wal_replay_resume │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 2622 │ pg_rotate_logfile │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 16 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_rotate_logfile_v2 │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 2621 │ pg_reload_conf │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 0 │ 0 │ 16 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_reload_conf │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 3800 │ pg_current_logfile │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ v │ s │ 0 │ 0 │ 25 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_current_logfile │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 3801 │ pg_current_logfile │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ v │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_current_logfile_1arg │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 3436 │ pg_promote │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 2 │ 2 │ 16 │ 16 23 │ ∅ │ ∅ │ {wait,wait_seconds} │ ({CONST :consttype 16 :consttypmod -1 :constcollid 0 :constlen 1 :constbyval true :constisnull false :location 61 :constvalue 1 [ 1 0 0 0 0 0 0 0 ]} {CONST :consttype 23 :consttypmod -1 :constcollid 0 :constlen 4 :constbyval true :constisnull false :location 96 :constvalue 4 [ 60 0 0 0 0 0 0 0 ]}) │ ∅ │ pg_promote │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 3775 │ pg_stat_reset_shared │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 2278 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_reset_shared │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 2307 │ pg_stat_reset_slru │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ v │ s │ 1 │ 0 │ 2278 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_reset_slru │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 3776 │ pg_stat_reset_single_table_counters │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 2278 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_reset_single_table_counters │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 3777 │ pg_stat_reset_single_function_counters │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 2278 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_stat_reset_single_function_counters │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 764 │ lo_import │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 26 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lo_import │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 767 │ lo_import │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 26 │ 25 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lo_import_with_oid │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 765 │ lo_export │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 2 │ 0 │ 23 │ 26 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ be_lo_export │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 3826 │ pg_read_file │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 1 │ 0 │ 25 │ 25 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_read_file_all │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 3293 │ pg_read_file │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 4 │ 0 │ 25 │ 25 20 20 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_read_file_v2 │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 3827 │ pg_read_binary_file │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 3 │ 0 │ 17 │ 25 20 20 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_read_binary_file_off_len │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 3295 │ pg_read_binary_file │ 11 │ 10 │ 12 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ s │ 4 │ 0 │ 17 │ 25 20 20 16 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ pg_read_binary_file │ ∅ │ ∅ │ {postgres=X/postgres} │ │ 3353 │ pg_ls_logdir │ 11 │ 10 │ 12 │ 10 │ 20 │ 0 │ - │ f │ f │ f │ t │ t │ v │ s │ 0 │ 0 │ 2249 │ │ {25,20,1184} │ {o,o,o} │ {name,size,modification} │ ∅ │ ∅ │ pg_ls_logdir │ ∅ │ ∅ │ {postgres=X/postgres,pg_monitor=X/postgres} │ │ 3354 │ pg_ls_waldir │ 11 │ 10 │ 12 │ 10 │ 20 │ 0 │ - │ f │ f │ f │ t │ t │ v │ s │ 0 │ 0 │ 2249 │ │ {25,20,1184} │ {o,o,o} │ {name,size,modification} │ ∅ │ ∅ │ pg_ls_waldir │ ∅ │ ∅ │ {postgres=X/postgres,pg_monitor=X/postgres} │ │ 5031 │ pg_ls_archive_statusdir │ 11 │ 10 │ 12 │ 10 │ 20 │ 0 │ - │ f │ f │ f │ t │ t │ v │ s │ 0 │ 0 │ 2249 │ │ {25,20,1184} │ {o,o,o} │ {name,size,modification} │ ∅ │ ∅ │ pg_ls_archive_statusdir │ ∅ │ ∅ │ {postgres=X/postgres,pg_monitor=X/postgres} │ │ 5029 │ pg_ls_tmpdir │ 11 │ 10 │ 12 │ 10 │ 20 │ 0 │ - │ f │ f │ f │ t │ t │ v │ s │ 0 │ 0 │ 2249 │ │ {25,20,1184} │ {o,o,o} │ {name,size,modification} │ ∅ │ ∅ │ pg_ls_tmpdir_noargs │ ∅ │ ∅ │ {postgres=X/postgres,pg_monitor=X/postgres} │ │ 5030 │ pg_ls_tmpdir │ 11 │ 10 │ 12 │ 10 │ 20 │ 0 │ - │ f │ f │ f │ t │ t │ v │ s │ 1 │ 0 │ 2249 │ 26 │ {26,25,20,1184} │ {i,o,o,o} │ {tablespace,name,size,modification} │ ∅ │ ∅ │ pg_ls_tmpdir_1arg │ ∅ │ ∅ │ {postgres=X/postgres,pg_monitor=X/postgres} │ │ 13332 │ dsnowball_init │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 2281 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dsnowball_init │ $libdir/dict_snowball │ ∅ │ ∅ │ │ 13333 │ dsnowball_lexize │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 4 │ 0 │ 2281 │ 2281 2281 2281 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ dsnowball_lexize │ $libdir/dict_snowball │ ∅ │ ∅ │ │ 13380 │ _pg_expandarray │ 13379 │ 10 │ 14 │ 100 │ 1000 │ 0 │ - │ f │ f │ f │ t │ t │ i │ s │ 1 │ 0 │ 2249 │ 2277 │ {2277,2283,23} │ {i,o,o} │ {"",x,n} │ ∅ │ ∅ │ select $1[s], s - pg_catalog.array_lower($1,1) + 1 ↵│ ∅ │ ∅ │ ∅ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ from pg_catalog.generate_series(pg_catalog.array_lower($1,1), ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ pg_catalog.array_upper($1,1), ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ 1) as g(s) │ │ │ │ │ 13381 │ _pg_index_position │ 13379 │ 10 │ 14 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ s │ u │ 2 │ 0 │ 23 │ 26 21 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ ↵│ ∅ │ ∅ │ ∅ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ SELECT (ss.a).n FROM ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ (SELECT information_schema._pg_expandarray(indkey) AS a ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ FROM pg_catalog.pg_index WHERE indexrelid = $1) ss ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ WHERE (ss.a).x = $2; ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ 13382 │ _pg_truetypid │ 13379 │ 10 │ 14 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 26 │ 75 71 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ SELECT CASE WHEN $2.typtype = 'd' THEN $2.typbasetype ELSE $1.atttypid END │ ∅ │ ∅ │ ∅ │ │ 13383 │ _pg_truetypmod │ 13379 │ 10 │ 14 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 75 71 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ SELECT CASE WHEN $2.typtype = 'd' THEN $2.typtypmod ELSE $1.atttypmod END │ ∅ │ ∅ │ ∅ │ │ 13384 │ _pg_char_max_length │ 13379 │ 10 │ 14 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 26 23 │ ∅ │ ∅ │ {typid,typmod} │ ∅ │ ∅ │ SELECT ↵│ ∅ │ ∅ │ ∅ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ CASE WHEN $2 = -1 /* default typmod */ ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ THEN null ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ WHEN $1 IN (1042, 1043) /* char, varchar */ ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ THEN $2 - 4 ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ WHEN $1 IN (1560, 1562) /* bit, varbit */ ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ THEN $2 ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ELSE null ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ END │ │ │ │ │ 13385 │ _pg_char_octet_length │ 13379 │ 10 │ 14 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 26 23 │ ∅ │ ∅ │ {typid,typmod} │ ∅ │ ∅ │ SELECT ↵│ ∅ │ ∅ │ ∅ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ CASE WHEN $1 IN (25, 1042, 1043) /* text, char, varchar */ ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ THEN CASE WHEN $2 = -1 /* default typmod */ ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ THEN CAST(2^30 AS integer) ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ELSE information_schema._pg_char_max_length($1, $2) * ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ pg_catalog.pg_encoding_max_length((SELECT encoding FROM pg_catalog.pg_database WHERE datname = pg_catalog.current_database())) ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ END ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ELSE null ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ END │ │ │ │ │ 13386 │ _pg_numeric_precision │ 13379 │ 10 │ 14 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 26 23 │ ∅ │ ∅ │ {typid,typmod} │ ∅ │ ∅ │ SELECT ↵│ ∅ │ ∅ │ ∅ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ CASE $1 ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ WHEN 21 /*int2*/ THEN 16 ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ WHEN 23 /*int4*/ THEN 32 ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ WHEN 20 /*int8*/ THEN 64 ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ WHEN 1700 /*numeric*/ THEN ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ CASE WHEN $2 = -1 ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ THEN null ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ELSE (($2 - 4) >> 16) & 65535 ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ END ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ WHEN 700 /*float4*/ THEN 24 /*FLT_MANT_DIG*/ ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ WHEN 701 /*float8*/ THEN 53 /*DBL_MANT_DIG*/ ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ELSE null ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ END │ │ │ │ │ 13387 │ _pg_numeric_precision_radix │ 13379 │ 10 │ 14 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 26 23 │ ∅ │ ∅ │ {typid,typmod} │ ∅ │ ∅ │ SELECT ↵│ ∅ │ ∅ │ ∅ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ CASE WHEN $1 IN (21, 23, 20, 700, 701) THEN 2 ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ WHEN $1 IN (1700) THEN 10 ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ELSE null ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ END │ │ │ │ │ 13388 │ _pg_numeric_scale │ 13379 │ 10 │ 14 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 26 23 │ ∅ │ ∅ │ {typid,typmod} │ ∅ │ ∅ │ SELECT ↵│ ∅ │ ∅ │ ∅ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ CASE WHEN $1 IN (21, 23, 20) THEN 0 ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ WHEN $1 IN (1700) THEN ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ CASE WHEN $2 = -1 ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ THEN null ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ELSE ($2 - 4) & 65535 ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ END ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ELSE null ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ END │ │ │ │ │ 13389 │ _pg_datetime_precision │ 13379 │ 10 │ 14 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 23 │ 26 23 │ ∅ │ ∅ │ {typid,typmod} │ ∅ │ ∅ │ SELECT ↵│ ∅ │ ∅ │ ∅ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ CASE WHEN $1 IN (1082) /* date */ ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ THEN 0 ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ WHEN $1 IN (1083, 1114, 1184, 1266) /* time, timestamp, same + tz */ ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ THEN CASE WHEN $2 < 0 THEN 6 ELSE $2 END ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ WHEN $1 IN (1186) /* interval */ ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ THEN CASE WHEN $2 < 0 OR $2 & 65535 = 65535 THEN 6 ELSE $2 & 65535 END ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ELSE null ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ END │ │ │ │ │ 13390 │ _pg_interval_type │ 13379 │ 10 │ 14 │ 100 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ i │ s │ 2 │ 0 │ 25 │ 26 23 │ ∅ │ ∅ │ {typid,mod} │ ∅ │ ∅ │ SELECT ↵│ ∅ │ ∅ │ ∅ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ CASE WHEN $1 IN (1186) /* interval */ ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ THEN pg_catalog.upper(substring(pg_catalog.format_type($1, $2) from 'interval[()0-9]* #"%#"' for '#')) ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ELSE null ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ END │ │ │ │ │ 13650 │ plpgsql_call_handler │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ f │ f │ v │ u │ 0 │ 0 │ 2280 │ │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ plpgsql_call_handler │ $libdir/plpgsql │ ∅ │ ∅ │ │ 13651 │ plpgsql_inline_handler │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 2278 │ 2281 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ plpgsql_inline_handler │ $libdir/plpgsql │ ∅ │ ∅ │ │ 13652 │ plpgsql_validator │ 11 │ 10 │ 13 │ 1 │ 0 │ 0 │ - │ f │ f │ f │ t │ f │ v │ u │ 1 │ 0 │ 2278 │ 26 │ ∅ │ ∅ │ ∅ │ ∅ │ ∅ │ plpgsql_validator │ $libdir/plpgsql │ ∅ │ ∅ │ └───────┴──────────────────────────────────────────────┴──────────────┴──────────┴─────────┴─────────┴─────────┴─────────────┴──────────────────────────────┴─────────┴───────────┴──────────────┴─────────────┴───────────┴─────────────┴─────────────┴──────────┴─────────────────┴────────────┴─────────────────────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────┴─────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴─────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────┴───────────┴─────────────────────────────────────────────┘ (3036 rows) pspg-5.8.1/tests/select1.txt000066400000000000000000000001251452457446400157560ustar00rootroot00000000000000+------------+ | ?column? | |------------| | 1 | +------------+ SELECT 1 pspg-5.8.1/tests/single.txt000066400000000000000000000002401452457446400156750ustar00rootroot00000000000000┌─────────┐ │ column1 │ ╞═════════╡ │ 1 │ │ 3 │ └─────────┘ (2 rows) pspg-5.8.1/tests/small.txt000066400000000000000000000007041452457446400155310ustar00rootroot00000000000000┌─────────────┬───────┬───────┐ │ a │ b │ c │ ╞═════════════╪═══════╪═══════╡ │ tomas │ tomas │ tomas │ │ pavel pavel │ tomas │ tomas │ │ petr │ tomas │ tomas │ └─────────────┴───────┴───────┘ (3 rows) pspg-5.8.1/tests/small2.txt000066400000000000000000000003611452457446400156120ustar00rootroot00000000000000+--------------+-------+-------+ | a | b | c | +--------------+-------+-------+ | tomas | tomas | tomas | | pavel a petr | tomas | tomas | | pavel | tomas | tomas | +--------------+-------+-------+ (3 rows) pspg-5.8.1/tests/strange.txt000066400000000000000000000012341452457446400160630ustar00rootroot00000000000000┌──────┬───────┬───────────────┬───────────────────────────┬───────┐ │ 1995 │ Opel │ Vectra │ klimatizace, střešní okno │ 45000 │ │ 1998 │ Škoda │ Felicia "Fun" │ │ 80000 │ │ 2002 │ Škoda │ Octavia │ klimatizace, ABS bouraná │ 70000 │ └──────┴───────┴───────────────┴───────────────────────────┴───────┘ (3 rows) pspg-5.8.1/tests/strange2.txt000066400000000000000000000044651452457446400161560ustar00rootroot00000000000000 OWNER TABLE_NAME COLUMN_NAME DATA_TYPE DATA_TYPE_MOD DATA_TYPE_OWNER DATA_LENGTH DATA_PRECISION DATA_SCALE NULLABLE COLUMN_ID DEFAULT_LENGTH DATA_DEFAULT NUM_DISTINCT LOW_VALUE HIGH_VALUE DENSITY NUM_NULLS NUM_BUCKETS LAST_ANALYZED SAMPLE_SIZE CHARACTER_SET_NAME CHAR_COL_DECL_LENGTH GLOBAL_STATS USER_STATS AVG_COL_LEN CHAR_LENGTH CHAR_USED V80_FMT_IMAGE DATA_UPGRADED HISTOGRAM DEFAULT_ON_NULL IDENTITY_COLUMN EVALUATION_EDITION UNUSABLE_BEFORE UNUSABLE_BEGINNING COLLATION --------- ------------- -------------- ------------ ---------------- ------------------ -------------- ----------------- ------------- ----------- ------------ ----------------- --------------- --------------- ------------ ------------- ---------- ------------ -------------- ---------------- -------------- --------------------- ----------------------- --------------- ------------- -------------- -------------- ------------ ---------------- ---------------- ------------ ------------------ ------------------ --------------------- ------------------ --------------------- ------------ SYSTEM T2 A NUMBER 22 0 Y 1 1 C102 C102 1 0 1 28-OCT-21 2 YES NO 3 0 NO YES NONE NO NO SYSTEM T2 B NUMBER 22 0 Y 2 1 C103 C103 1 0 1 28-OCT-21 2 YES NO 3 0 NO YES NONE NO NO pspg-5.8.1/tests/tables.txt000066400000000000000000000206021452457446400156720ustar00rootroot00000000000000 List of relations ┌────────────┬─────────────────────────┬───────┬──────────┬─────────────┬────────────┬─────────────┐ │ Schema │ Name │ Type │ Owner │ Persistence │ Size │ Description │ ╞════════════╪═════════════════════════╪═══════╪══════════╪═════════════╪════════════╪═════════════╡ │ pg_catalog │ pg_aggregate │ table │ postgres │ permanent │ 56 kB │ │ │ pg_catalog │ pg_am │ table │ postgres │ permanent │ 40 kB │ │ │ pg_catalog │ pg_amop │ table │ postgres │ permanent │ 80 kB │ │ │ pg_catalog │ pg_amproc │ table │ postgres │ permanent │ 56 kB │ │ │ pg_catalog │ pg_attrdef │ table │ postgres │ permanent │ 8192 bytes │ │ │ pg_catalog │ pg_attribute │ table │ postgres │ permanent │ 464 kB │ │ │ pg_catalog │ pg_auth_members │ table │ postgres │ permanent │ 40 kB │ │ │ pg_catalog │ pg_authid │ table │ postgres │ permanent │ 48 kB │ │ │ pg_catalog │ pg_cast │ table │ postgres │ permanent │ 48 kB │ │ │ pg_catalog │ pg_class │ table │ postgres │ permanent │ 136 kB │ │ │ pg_catalog │ pg_collation │ table │ postgres │ permanent │ 296 kB │ │ │ pg_catalog │ pg_constraint │ table │ postgres │ permanent │ 48 kB │ │ │ pg_catalog │ pg_conversion │ table │ postgres │ permanent │ 48 kB │ │ │ pg_catalog │ pg_database │ table │ postgres │ permanent │ 48 kB │ │ │ pg_catalog │ pg_db_role_setting │ table │ postgres │ permanent │ 8192 bytes │ │ │ pg_catalog │ pg_default_acl │ table │ postgres │ permanent │ 8192 bytes │ │ │ pg_catalog │ pg_depend │ table │ postgres │ permanent │ 488 kB │ │ │ pg_catalog │ pg_description │ table │ postgres │ permanent │ 320 kB │ │ │ pg_catalog │ pg_enum │ table │ postgres │ permanent │ 0 bytes │ │ │ pg_catalog │ pg_event_trigger │ table │ postgres │ permanent │ 8192 bytes │ │ │ pg_catalog │ pg_extension │ table │ postgres │ permanent │ 48 kB │ │ │ pg_catalog │ pg_foreign_data_wrapper │ table │ postgres │ permanent │ 8192 bytes │ │ │ pg_catalog │ pg_foreign_server │ table │ postgres │ permanent │ 8192 bytes │ │ │ pg_catalog │ pg_foreign_table │ table │ postgres │ permanent │ 8192 bytes │ │ │ pg_catalog │ pg_index │ table │ postgres │ permanent │ 64 kB │ │ │ pg_catalog │ pg_inherits │ table │ postgres │ permanent │ 0 bytes │ │ │ pg_catalog │ pg_init_privs │ table │ postgres │ permanent │ 56 kB │ │ │ pg_catalog │ pg_language │ table │ postgres │ permanent │ 48 kB │ │ │ pg_catalog │ pg_largeobject │ table │ postgres │ permanent │ 0 bytes │ │ │ pg_catalog │ pg_largeobject_metadata │ table │ postgres │ permanent │ 0 bytes │ │ │ pg_catalog │ pg_namespace │ table │ postgres │ permanent │ 48 kB │ │ │ pg_catalog │ pg_opclass │ table │ postgres │ permanent │ 48 kB │ │ │ pg_catalog │ pg_operator │ table │ postgres │ permanent │ 144 kB │ │ │ pg_catalog │ pg_opfamily │ table │ postgres │ permanent │ 48 kB │ │ │ pg_catalog │ pg_partitioned_table │ table │ postgres │ permanent │ 8192 bytes │ │ │ pg_catalog │ pg_pltemplate │ table │ postgres │ permanent │ 48 kB │ │ │ pg_catalog │ pg_policy │ table │ postgres │ permanent │ 8192 bytes │ │ │ pg_catalog │ pg_proc │ table │ postgres │ permanent │ 672 kB │ │ │ pg_catalog │ pg_publication │ table │ postgres │ permanent │ 0 bytes │ │ │ pg_catalog │ pg_publication_rel │ table │ postgres │ permanent │ 0 bytes │ │ │ pg_catalog │ pg_range │ table │ postgres │ permanent │ 40 kB │ │ │ pg_catalog │ pg_replication_origin │ table │ postgres │ permanent │ 8192 bytes │ │ │ pg_catalog │ pg_rewrite │ table │ postgres │ permanent │ 632 kB │ │ │ pg_catalog │ pg_seclabel │ table │ postgres │ permanent │ 8192 bytes │ │ │ pg_catalog │ pg_sequence │ table │ postgres │ permanent │ 0 bytes │ │ │ pg_catalog │ pg_shdepend │ table │ postgres │ permanent │ 40 kB │ │ │ pg_catalog │ pg_shdescription │ table │ postgres │ permanent │ 48 kB │ │ │ pg_catalog │ pg_shseclabel │ table │ postgres │ permanent │ 8192 bytes │ │ │ pg_catalog │ pg_statistic │ table │ postgres │ permanent │ 256 kB │ │ │ pg_catalog │ pg_statistic_ext │ table │ postgres │ permanent │ 8192 bytes │ │ │ pg_catalog │ pg_statistic_ext_data │ table │ postgres │ permanent │ 8192 bytes │ │ │ pg_catalog │ pg_subscription │ table │ postgres │ permanent │ 8192 bytes │ │ │ pg_catalog │ pg_subscription_rel │ table │ postgres │ permanent │ 0 bytes │ │ │ pg_catalog │ pg_tablespace │ table │ postgres │ permanent │ 48 kB │ │ │ pg_catalog │ pg_transform │ table │ postgres │ permanent │ 0 bytes │ │ │ pg_catalog │ pg_trigger │ table │ postgres │ permanent │ 8192 bytes │ │ │ pg_catalog │ pg_ts_config │ table │ postgres │ permanent │ 40 kB │ │ │ pg_catalog │ pg_ts_config_map │ table │ postgres │ permanent │ 56 kB │ │ │ pg_catalog │ pg_ts_dict │ table │ postgres │ permanent │ 48 kB │ │ │ pg_catalog │ pg_ts_parser │ table │ postgres │ permanent │ 40 kB │ │ │ pg_catalog │ pg_ts_template │ table │ postgres │ permanent │ 40 kB │ │ │ pg_catalog │ pg_type │ table │ postgres │ permanent │ 120 kB │ │ │ pg_catalog │ pg_user_mapping │ table │ postgres │ permanent │ 8192 bytes │ │ │ public │ bigtable │ table │ pavel │ permanent │ 35 MB │ │ └────────────┴─────────────────────────┴───────┴──────────┴─────────────┴────────────┴─────────────┘ (64 rows) pspg-5.8.1/tests/test.sh000066400000000000000000000006031452457446400151710ustar00rootroot00000000000000for i in {1..100} do echo `date` echo cat << END ┌──────────┬──────────┐ │ ?column? │ ?column? │ ╞══════════╪══════════╡ │ 1 │ 2 │ │ 1 │ 2 │ └──────────┴──────────┘ (2 rows) END echo sleep 1 done;pspg-5.8.1/tests/test10.csv000066400000000000000000000005021452457446400155110ustar00rootroot00000000000000col1,col2,col3 dat1,dat2,dat3 dat1,dat2,dat3 dat1 ,dat2 ,dat3 dat1 ,dat2 x,dat3 dat1 ,dat2muex,dat3 dat1 ,dat2 ,dat3 dat1 ,dat2,dat3 dat1 ,dat2 ,dat3 dat1 ,dat2,dat3 dat1 ,dat2,dat3 dat1 ,dat2,dat3 dat1 ,dat2,dat3 dat1, dat2,dat3 dat1, dat2,dat3 dat1,dat2,dat3 dat1,da t2,dat3 dat1,d at2,dat3 dat1,d a,dat3 dat1,dat2,dat3 pspg-5.8.1/tests/test11.csv000066400000000000000000000007701452457446400155210ustar00rootroot00000000000000Name,Owner,Encoding,Collate,Ctype,ICU Locale,Locale Provider,Access privileges,Size,Tablespace,Description postgres,postgres,UTF8,cs_CZ.UTF-8,cs_CZ.UTF-8,,libc,,7693 kB,pg_default,default administrative connection database template0,postgres,UTF8,cs_CZ.UTF-8,cs_CZ.UTF-8,,libc,"=c/postgres postgres=CTc/postgres",7537 kB,pg_default,unmodifiable empty database template1,postgres,UTF8,cs_CZ.UTF-8,cs_CZ.UTF-8,,libc,"=c/postgres postgres=CTc/postgres",7765 kB,pg_default,default template for new databases pspg-5.8.1/tests/test12.csv000066400000000000000000000001331452457446400155130ustar00rootroot00000000000000abcd, abcd, abcd, abcd 1,2,3,4 abc,abc,abc,abc abc,ab,abc,abc abc,"abcd abcd abcdef",ab,ab pspg-5.8.1/tests/test2.csv000066400000000000000000000002401452457446400154310ustar00rootroot00000000000000s1, s2, s3, s4, s5 1, 2, 3, 4, 5 6, 7, 8, 9, 10 11, 12, 13, 14, 15 16, 17, 18, 19, 20 Horní Libochová , 100, Dlouhé , Dobrá voda 10,,20,30,,40pspg-5.8.1/tests/test2.sh000066400000000000000000000006261452457446400152600ustar00rootroot00000000000000for i in {1..100} do echo `date` echo cat << END ┌──────────┬──────────┐ │ ?column? │ ?column? │ ╞══════════╪══════════╡ │ 1 │ 2 │ │ 1 │ 2 │ └──────────┴──────────┘ (2 rows) END echo echo -n -e '\x05' sleep 1 done;pspg-5.8.1/tests/test3.csv000066400000000000000000000002611452457446400154350ustar00rootroot00000000000000rok,firma,typ, poznamka,najezd 1995,Opel,Vectra,"klimatizace, střešní okno",45000 1998,Škoda,"Felicia ""Fun""",,80000 2002,Škoda,Octavia,"klimatizace, ABS bouraná",70000 pspg-5.8.1/tests/test4.csv000066400000000000000000000002651452457446400154420ustar00rootroot00000000000000rok,firma,typ, poznamka,najezd 1995,Opel,Vectra,"klimatizace, střešní okno",45000 1998,Škoda,"Felicia ""Fun""",,80000 2002, Škoda, Octavia,"klimatizace, ABS bouraná",70000 pspg-5.8.1/tests/test5.csv000066400000000000000000000002201452457446400154320ustar00rootroot00000000000000rok,firma,typ, poznamka 1995,Opel,Vectra,"klimatizace, střešní okno" 1998,Škoda,"Felicia ""Fun""",ss 2002,Škoda,Octavia,"klimatizace, ABS" pspg-5.8.1/tests/test6.csv000066400000000000000000000002311452457446400154350ustar00rootroot00000000000000rok,firma,typ, poznamka 1995,Opel,Vectra,"klimatizace, střešní okno" 1998,Škoda,"Felicia ""Fun""", ss 2002,Škoda,Octavia,"klimatizace, ABS bourana" pspg-5.8.1/tests/test7.csv000066400000000000000000000002221452457446400154360ustar00rootroot000000000000001995,Opel,Vectra,"klimatizace, střešní okno",45000 1998,Škoda,"Felicia ""Fun""",,80000 2002,Škoda,Octavia,"klimatizace, ABS bouraná",70000 pspg-5.8.1/tests/test8.csv000066400000000000000000000000331452457446400154370ustar00rootroot0000000000000010,20,20,40,50 1,20,3 1,2 pspg-5.8.1/tests/test9.csv000066400000000000000000000000311452457446400154360ustar00rootroot00000000000000a, b, c d, e, f g, h, i pspg-5.8.1/tests/vystup_explain_verbose.txt000066400000000000000000000030021452457446400212320ustar00rootroot00000000000000 QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Seq Scan on pg_temp_3.t1 (cost=0.00..11.00 rows=100 width=735) Output: call_id, call_start, call_end, caller_num, caller_name, caller_agent_id, dialed_num, disposition, direction, diverted_num, answering_exten, answering_name, answering_agent_id, answering_queue, outgoing_cid_num, billsec, billsec_interval, duration, duration_interval, dial_duration, dial_interval, ringing_extens, abandoned_queues, call_type, fop_call, channel, technology, record_name, record_start, hangup_cause, pickuped, finished, dials, records, queues, bridges, created (2 řádky) pspg-5.8.1/tools/000077500000000000000000000000001452457446400136555ustar00rootroot00000000000000pspg-5.8.1/tools/ax_debug_cflags.m4000066400000000000000000000020661452457446400172200ustar00rootroot00000000000000# gcc default/debug CFLAGS handling respecting user's CFLAGS # avoid AC_PROG_CC setting -O2 CFLAGS which will override DEBUG_CFLAGS' -O0 # must be used right after AC_INIT AC_DEFUN([AX_DEBUG_CFLAGS], [ # ensure CFLAGS are set AS_IF([test "${CFLAGS+set}"], [ USE_DEFAULT_CFLAGS=false ], [ USE_DEFAULT_CFLAGS=true CFLAGS="" ]) AC_PROG_CC # add --enable-debug arg AC_ARG_ENABLE([debug], AS_HELP_STRING([--enable-debug], [enable debug build]), [], []) AS_IF([test "$enable_debug" = "yes"], [ # add the DEBUG pre-processor define AC_DEFINE([DEBUG], [1], [debug build]) # gcc/gdb debug options AS_IF([test "$GCC" = "yes"], [ DEBUG_CFLAGS="-ggdb -O0" ], [ ACX_DEBUG_CFLAGS_G ]) ], [ # what AC_PROG_CC would have done if CFLAGS were not set AS_IF([$USE_DEFAULT_CFLAGS], [ ACX_DEBUG_CFLAGS_G AS_IF([test "$GCC" = "yes"], [ DEBUG_CFLAGS="$DEBUG_CFLAGS -O2" ]) ]) ]) AC_SUBST([DEBUG_CFLAGS], [$DEBUG_CFLAGS]) ]) AC_DEFUN([ACX_DEBUG_CFLAGS_G], [ # default to -g AS_IF([test "$ac_cv_prog_cc_g" = "yes"], [ DEBUG_CFLAGS="-g" ], [ DEBUG_CFLAGS="" ]) ]) pspg-5.8.1/tools/ax_lib_readline.m4000066400000000000000000000074471452457446400172340ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_lib_readline.html # =========================================================================== # # SYNOPSIS # # AX_LIB_READLINE # # DESCRIPTION # # Searches for a readline compatible library. If found, defines # `HAVE_LIBREADLINE'. If the found library has the `add_history' function, # sets also `HAVE_READLINE_HISTORY'. Also checks for the locations of the # necessary include files and sets `HAVE_READLINE_H' or # `HAVE_READLINE_READLINE_H' and `HAVE_READLINE_HISTORY_H' or # 'HAVE_HISTORY_H' if the corresponding include files exists. # # The libraries that may be readline compatible are `libedit', # `libeditline' and `libreadline'. Sometimes we need to link a termcap # library for readline to work, this macro tests these cases too by trying # to link with `libtermcap', `libcurses' or `libncurses' before giving up. # # Here is an example of how to use the information provided by this macro # to perform the necessary includes or declarations in a C file: # # #ifdef HAVE_LIBREADLINE # # if defined(HAVE_READLINE_READLINE_H) # # include # # elif defined(HAVE_READLINE_H) # # include # # else /* !defined(HAVE_READLINE_H) */ # extern char *readline (); # # endif /* !defined(HAVE_READLINE_H) */ # char *cmdline = NULL; # #else /* !defined(HAVE_READLINE_READLINE_H) */ # /* no readline */ # #endif /* HAVE_LIBREADLINE */ # # #ifdef HAVE_READLINE_HISTORY # # if defined(HAVE_READLINE_HISTORY_H) # # include # # elif defined(HAVE_HISTORY_H) # # include # # else /* !defined(HAVE_HISTORY_H) */ # extern void add_history (); # extern int write_history (); # extern int read_history (); # # endif /* defined(HAVE_READLINE_HISTORY_H) */ # /* no history */ # #endif /* HAVE_READLINE_HISTORY */ # # LICENSE # # Copyright (c) 2008 Ville Laurikari # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 7 AU_ALIAS([VL_LIB_READLINE], [AX_LIB_READLINE]) AC_DEFUN([AX_LIB_READLINE], [ AC_CACHE_CHECK([for a readline compatible library], ax_cv_lib_readline, [ ORIG_LIBS="$LIBS" for readline_lib in readline edit editline; do for termcap_lib in "" termcap curses ncurses; do if test -z "$termcap_lib"; then TRY_LIB="-l$readline_lib" else TRY_LIB="-l$readline_lib -l$termcap_lib" fi LIBS="$ORIG_LIBS $TRY_LIB" AC_TRY_LINK_FUNC(readline, ax_cv_lib_readline="$TRY_LIB") if test -n "$ax_cv_lib_readline"; then break fi done if test -n "$ax_cv_lib_readline"; then break fi done if test -z "$ax_cv_lib_readline"; then ax_cv_lib_readline="no" fi LIBS="$ORIG_LIBS" ]) if test "$ax_cv_lib_readline" != "no"; then LIBS="$LIBS $ax_cv_lib_readline" AC_DEFINE(HAVE_LIBREADLINE, 1, [Define if you have a readline compatible library]) AC_CHECK_HEADERS(readline.h readline/readline.h) AC_CACHE_CHECK([whether readline supports history], ax_cv_lib_readline_history, [ ax_cv_lib_readline_history="no" AC_TRY_LINK_FUNC(add_history, ax_cv_lib_readline_history="yes") ]) if test "$ax_cv_lib_readline_history" = "yes"; then AC_DEFINE(HAVE_READLINE_HISTORY, 1, [Define if your readline library has \`add_history']) AC_CHECK_HEADERS(history.h readline/history.h) fi fi ])dnl pspg-5.8.1/tools/ax_require_defined.m4000066400000000000000000000023011452457446400177350ustar00rootroot00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_require_defined.html # =========================================================================== # # SYNOPSIS # # AX_REQUIRE_DEFINED(MACRO) # # DESCRIPTION # # AX_REQUIRE_DEFINED is a simple helper for making sure other macros have # been defined and thus are available for use. This avoids random issues # where a macro isn't expanded. Instead the configure script emits a # non-fatal: # # ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found # # It's like AC_REQUIRE except it doesn't expand the required macro. # # Here's an example: # # AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG]) # # LICENSE # # Copyright (c) 2014 Mike Frysinger # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 1 AC_DEFUN([AX_REQUIRE_DEFINED], [dnl m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])]) ])dnl AX_REQUIRE_DEFINED pspg-5.8.1/tools/ax_with_curses.m4000066400000000000000000000664231452457446400171610ustar00rootroot00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_with_curses.html # =========================================================================== # # SYNOPSIS # # AX_WITH_CURSES # # DESCRIPTION # # This macro checks whether a SysV or X/Open-compatible Curses library is # present, along with the associated header file. The NcursesW # (wide-character) library is searched for first, followed by Ncurses, # then the system-default plain Curses. The first library found is the # one returned. Finding libraries will first be attempted by using # pkg-config, and should the pkg-config files not be available, will # fallback to combinations of known flags itself. # # The following options are understood: --with-ncursesw, --with-ncurses, # --without-ncursesw, --without-ncurses. The "--with" options force the # macro to use that particular library, terminating with an error if not # found. The "--without" options simply skip the check for that library. # The effect on the search pattern is: # # (no options) - NcursesW, Ncurses, Curses # --with-ncurses --with-ncursesw - NcursesW only [*] # --without-ncurses --with-ncursesw - NcursesW only [*] # --with-ncursesw - NcursesW only [*] # --with-ncurses --without-ncursesw - Ncurses only [*] # --with-ncurses - NcursesW, Ncurses [**] # --without-ncurses --without-ncursesw - Curses only # --without-ncursesw - Ncurses, Curses # --without-ncurses - NcursesW, Curses # # [*] If the library is not found, abort the configure script. # # [**] If the second library (Ncurses) is not found, abort configure. # # The following preprocessor symbols may be defined by this macro if the # appropriate conditions are met: # # HAVE_CURSES - if any SysV or X/Open Curses library found # HAVE_CURSES_ENHANCED - if library supports X/Open Enhanced functions # HAVE_CURSES_COLOR - if library supports color (enhanced functions) # HAVE_CURSES_OBSOLETE - if library supports certain obsolete features # HAVE_NCURSESW - if NcursesW (wide char) library is to be used # HAVE_NCURSES - if the Ncurses library is to be used # # HAVE_CURSES_H - if is present and should be used # HAVE_NCURSESW_H - if should be used # HAVE_NCURSES_H - if should be used # HAVE_NCURSESW_CURSES_H - if should be used # HAVE_NCURSES_CURSES_H - if should be used # # (These preprocessor symbols are discussed later in this document.) # # The following output variables are defined by this macro; they are # precious and may be overridden on the ./configure command line: # # CURSES_LIBS - library to add to xxx_LDADD # CURSES_CFLAGS - include paths to add to xxx_CPPFLAGS # # In previous versions of this macro, the flags CURSES_LIB and # CURSES_CPPFLAGS were defined. These have been renamed, in keeping with # AX_WITH_CURSES's close bigger brother, PKG_CHECK_MODULES, which should # eventually supersede the use of AX_WITH_CURSES. Neither the library # listed in CURSES_LIBS, nor the flags in CURSES_CFLAGS are added to LIBS, # respectively CPPFLAGS, by default. You need to add both to the # appropriate xxx_LDADD/xxx_CPPFLAGS line in your Makefile.am. For # example: # # prog_LDADD = @CURSES_LIBS@ # prog_CPPFLAGS = @CURSES_CFLAGS@ # # If CURSES_LIBS is set on the configure command line (such as by running # "./configure CURSES_LIBS=-lmycurses"), then the only header searched for # is . If the user needs to specify an alternative path for a # library (such as for a non-standard NcurseW), the user should use the # LDFLAGS variable. # # The following shell variables may be defined by this macro: # # ax_cv_curses - set to "yes" if any Curses library found # ax_cv_curses_enhanced - set to "yes" if Enhanced functions present # ax_cv_curses_color - set to "yes" if color functions present # ax_cv_curses_obsolete - set to "yes" if obsolete features present # # ax_cv_ncursesw - set to "yes" if NcursesW library found # ax_cv_ncurses - set to "yes" if Ncurses library found # ax_cv_plaincurses - set to "yes" if plain Curses library found # ax_cv_curses_which - set to "ncursesw", "ncurses", "plaincurses" or "no" # # These variables can be used in your configure.ac to determine the level # of support you need from the Curses library. For example, if you must # have either Ncurses or NcursesW, you could include: # # AX_WITH_CURSES # if test "x$ax_cv_ncursesw" != xyes && test "x$ax_cv_ncurses" != xyes; then # AC_MSG_ERROR([requires either NcursesW or Ncurses library]) # fi # # If any Curses library will do (but one must be present and must support # color), you could use: # # AX_WITH_CURSES # if test "x$ax_cv_curses" != xyes || test "x$ax_cv_curses_color" != xyes; then # AC_MSG_ERROR([requires an X/Open-compatible Curses library with color]) # fi # # Certain preprocessor symbols and shell variables defined by this macro # can be used to determine various features of the Curses library. In # particular, HAVE_CURSES and ax_cv_curses are defined if the Curses # library found conforms to the traditional SysV and/or X/Open Base Curses # definition. Any working Curses library conforms to this level. # # HAVE_CURSES_ENHANCED and ax_cv_curses_enhanced are defined if the # library supports the X/Open Enhanced Curses definition. In particular, # the wide-character types attr_t, cchar_t and wint_t, the functions # wattr_set() and wget_wch() and the macros WA_NORMAL and _XOPEN_CURSES # are checked. The Ncurses library does NOT conform to this definition, # although NcursesW does. # # HAVE_CURSES_COLOR and ax_cv_curses_color are defined if the library # supports color functions and macros such as COLOR_PAIR, A_COLOR, # COLOR_WHITE, COLOR_RED and init_pair(). These are NOT part of the # X/Open Base Curses definition, but are part of the Enhanced set of # functions. The Ncurses library DOES support these functions, as does # NcursesW. # # HAVE_CURSES_OBSOLETE and ax_cv_curses_obsolete are defined if the # library supports certain features present in SysV and BSD Curses but not # defined in the X/Open definition. In particular, the functions # getattrs(), getcurx() and getmaxx() are checked. # # To use the HAVE_xxx_H preprocessor symbols, insert the following into # your system.h (or equivalent) header file: # # #if defined HAVE_NCURSESW_CURSES_H # # include # #elif defined HAVE_NCURSESW_H # # include # #elif defined HAVE_NCURSES_CURSES_H # # include # #elif defined HAVE_NCURSES_H # # include # #elif defined HAVE_CURSES_H # # include # #else # # error "SysV or X/Open-compatible Curses header file required" # #endif # # For previous users of this macro: you should not need to change anything # in your configure.ac or Makefile.am, as the previous (serial 10) # semantics are still valid. However, you should update your system.h (or # equivalent) header file to the fragment shown above. You are encouraged # also to make use of the extended functionality provided by this version # of AX_WITH_CURSES, as well as in the additional macros # AX_WITH_CURSES_PANEL, AX_WITH_CURSES_MENU and AX_WITH_CURSES_FORM. # # LICENSE # # Copyright (c) 2009 Mark Pulford # Copyright (c) 2009 Damian Pietras # Copyright (c) 2012 Reuben Thomas # Copyright (c) 2011 John Zaitseff # # 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 . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 17 # internal function to factorize common code that is used by both ncurses # and ncursesw AC_DEFUN([_FIND_CURSES_FLAGS], [ AC_MSG_CHECKING([for $1 via pkg-config]) AX_REQUIRE_DEFINED([PKG_CHECK_EXISTS]) _PKG_CONFIG([_ax_cv_$1_libs], [libs], [$1]) _PKG_CONFIG([_ax_cv_$1_cppflags], [cflags], [$1]) AS_IF([test "x$pkg_failed" = "xyes" || test "x$pkg_failed" = "xuntried"],[ AC_MSG_RESULT([no]) # No suitable .pc file found, have to find flags via fallback AC_CACHE_CHECK([for $1 via fallback], [ax_cv_$1], [ AS_ECHO() pkg_cv__ax_cv_$1_libs="-l$1" pkg_cv__ax_cv_$1_cppflags="-D_GNU_SOURCE $CURSES_CFLAGS" LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_$1_libs" CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_$1_cppflags" AC_MSG_CHECKING([for initscr() with $pkg_cv__ax_cv_$1_libs]) AC_LINK_IFELSE([AC_LANG_CALL([], [initscr])], [ AC_MSG_RESULT([yes]) AC_MSG_CHECKING([for nodelay() with $pkg_cv__ax_cv_$1_libs]) AC_LINK_IFELSE([AC_LANG_CALL([], [nodelay])],[ ax_cv_$1=yes ],[ AC_MSG_RESULT([no]) m4_if( [$1],[ncursesw],[pkg_cv__ax_cv_$1_libs="$pkg_cv__ax_cv_$1_libs -ltinfow"], [$1],[ncurses],[pkg_cv__ax_cv_$1_libs="$pkg_cv__ax_cv_$1_libs -ltinfo"] ) LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_$1_libs" AC_MSG_CHECKING([for nodelay() with $pkg_cv__ax_cv_$1_libs]) AC_LINK_IFELSE([AC_LANG_CALL([], [nodelay])],[ ax_cv_$1=yes ],[ ax_cv_$1=no ]) ]) ],[ ax_cv_$1=no ]) ]) ],[ AC_MSG_RESULT([yes]) # Found .pc file, using its information LIBS="$ax_saved_LIBS $pkg_cv__ax_cv_$1_libs" CPPFLAGS="$ax_saved_CPPFLAGS $pkg_cv__ax_cv_$1_cppflags" ax_cv_$1=yes ]) ]) AU_ALIAS([MP_WITH_CURSES], [AX_WITH_CURSES]) AC_DEFUN([AX_WITH_CURSES], [ AC_ARG_VAR([CURSES_LIBS], [linker library for Curses, e.g. -lcurses]) AC_ARG_VAR([CURSES_CFLAGS], [preprocessor flags for Curses, e.g. -I/usr/include/ncursesw]) AC_ARG_WITH([ncurses], [AS_HELP_STRING([--with-ncurses], [force the use of Ncurses or NcursesW])], [], [with_ncurses=check]) AC_ARG_WITH([ncursesw], [AS_HELP_STRING([--without-ncursesw], [do not use NcursesW (wide character support)])], [], [with_ncursesw=check]) ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS AS_IF([test "x$with_ncurses" = xyes || test "x$with_ncursesw" = xyes], [ax_with_plaincurses=no], [ax_with_plaincurses=check]) ax_cv_curses_which=no # Test for NcursesW AS_IF([test "x$CURSES_LIBS" = x && test "x$with_ncursesw" != xno], [ _FIND_CURSES_FLAGS([ncursesw]) AS_IF([test "x$ax_cv_ncursesw" = xno && test "x$with_ncursesw" = xyes], [ AC_MSG_ERROR([--with-ncursesw specified but could not find NcursesW library]) ]) AS_IF([test "x$ax_cv_ncursesw" = xyes], [ ax_cv_curses=yes ax_cv_curses_which=ncursesw CURSES_LIBS="$pkg_cv__ax_cv_ncursesw_libs" CURSES_CFLAGS="$pkg_cv__ax_cv_ncursesw_cppflags" AC_DEFINE([HAVE_NCURSESW], [1], [Define to 1 if the NcursesW library is present]) AC_DEFINE([HAVE_CURSES], [1], [Define to 1 if a SysV or X/Open compatible Curses library is present]) AC_CACHE_CHECK([for working ncursesw/curses.h], [ax_cv_header_ncursesw_curses_h], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@define _XOPEN_SOURCE_EXTENDED 1 @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ]])], [ax_cv_header_ncursesw_curses_h=yes], [ax_cv_header_ncursesw_curses_h=no]) ]) AS_IF([test "x$ax_cv_header_ncursesw_curses_h" = xyes], [ ax_cv_curses_enhanced=yes ax_cv_curses_color=yes ax_cv_curses_obsolete=yes AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions]) AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) AC_DEFINE([HAVE_NCURSESW_CURSES_H], [1], [Define to 1 if is present]) ]) AC_CACHE_CHECK([for working ncursesw.h], [ax_cv_header_ncursesw_h], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@define _XOPEN_SOURCE_EXTENDED 1 @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ]])], [ax_cv_header_ncursesw_h=yes], [ax_cv_header_ncursesw_h=no]) ]) AS_IF([test "x$ax_cv_header_ncursesw_h" = xyes], [ ax_cv_curses_enhanced=yes ax_cv_curses_color=yes ax_cv_curses_obsolete=yes AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions]) AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) AC_DEFINE([HAVE_NCURSESW_H], [1], [Define to 1 if is present]) ]) AC_CACHE_CHECK([for working ncurses.h], [ax_cv_header_ncurses_h_with_ncursesw], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@define _XOPEN_SOURCE_EXTENDED 1 @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ]])], [ax_cv_header_ncurses_h_with_ncursesw=yes], [ax_cv_header_ncurses_h_with_ncursesw=no]) ]) AS_IF([test "x$ax_cv_header_ncurses_h_with_ncursesw" = xyes], [ ax_cv_curses_enhanced=yes ax_cv_curses_color=yes ax_cv_curses_obsolete=yes AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions]) AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) AC_DEFINE([HAVE_NCURSES_H], [1], [Define to 1 if is present]) ]) AS_IF([test "x$ax_cv_header_ncursesw_curses_h" = xno && test "x$ax_cv_header_ncursesw_h" = xno && test "x$ax_cv_header_ncurses_h_with_ncursesw" = xno], [ AC_MSG_WARN([could not find a working ncursesw/curses.h, ncursesw.h or ncurses.h]) ]) ]) ]) unset pkg_cv__ax_cv_ncursesw_libs unset pkg_cv__ax_cv_ncursesw_cppflags # Test for Ncurses AS_IF([test "x$CURSES_LIBS" = x && test "x$with_ncurses" != xno && test "x$ax_cv_curses_which" = xno], [ _FIND_CURSES_FLAGS([ncurses]) AS_IF([test "x$ax_cv_ncurses" = xno && test "x$with_ncurses" = xyes], [ AC_MSG_ERROR([--with-ncurses specified but could not find Ncurses library]) ]) AS_IF([test "x$ax_cv_ncurses" = xyes], [ ax_cv_curses=yes ax_cv_curses_which=ncurses CURSES_LIBS="$pkg_cv__ax_cv_ncurses_libs" CURSES_CFLAGS="$pkg_cv__ax_cv_ncurses_cppflags" AC_DEFINE([HAVE_NCURSES], [1], [Define to 1 if the Ncurses library is present]) AC_DEFINE([HAVE_CURSES], [1], [Define to 1 if a SysV or X/Open compatible Curses library is present]) AC_CACHE_CHECK([for working ncurses/curses.h], [ax_cv_header_ncurses_curses_h], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); ]])], [ax_cv_header_ncurses_curses_h=yes], [ax_cv_header_ncurses_curses_h=no]) ]) AS_IF([test "x$ax_cv_header_ncurses_curses_h" = xyes], [ ax_cv_curses_color=yes ax_cv_curses_obsolete=yes AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) AC_DEFINE([HAVE_NCURSES_CURSES_H], [1], [Define to 1 if is present]) ]) AC_CACHE_CHECK([for working ncurses.h], [ax_cv_header_ncurses_h], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); ]])], [ax_cv_header_ncurses_h=yes], [ax_cv_header_ncurses_h=no]) ]) AS_IF([test "x$ax_cv_header_ncurses_h" = xyes], [ ax_cv_curses_color=yes ax_cv_curses_obsolete=yes AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) AC_DEFINE([HAVE_NCURSES_H], [1], [Define to 1 if is present]) ]) AS_IF([test "x$ax_cv_header_ncurses_curses_h" = xno && test "x$ax_cv_header_ncurses_h" = xno], [ AC_MSG_WARN([could not find a working ncurses/curses.h or ncurses.h]) ]) ]) ]) unset pkg_cv__ax_cv_ncurses_libs unset pkg_cv__ax_cv_ncurses_cppflags # Test for plain Curses (or if CURSES_LIBS was set by user) AS_IF([test "x$with_plaincurses" != xno && test "x$ax_cv_curses_which" = xno], [ AS_IF([test "x$CURSES_LIBS" != x], [ LIBS="$ax_saved_LIBS $CURSES_LIBS" ], [ LIBS="$ax_saved_LIBS -lcurses" ]) AC_CACHE_CHECK([for Curses library], [ax_cv_plaincurses], [ AC_LINK_IFELSE([AC_LANG_CALL([], [initscr])], [ax_cv_plaincurses=yes], [ax_cv_plaincurses=no]) ]) AS_IF([test "x$ax_cv_plaincurses" = xyes], [ ax_cv_curses=yes ax_cv_curses_which=plaincurses AS_IF([test "x$CURSES_LIBS" = x], [ CURSES_LIBS="-lcurses" ]) AC_DEFINE([HAVE_CURSES], [1], [Define to 1 if a SysV or X/Open compatible Curses library is present]) # Check for base conformance (and header file) AC_CACHE_CHECK([for working curses.h], [ax_cv_header_curses_h], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; initscr(); ]])], [ax_cv_header_curses_h=yes], [ax_cv_header_curses_h=no]) ]) AS_IF([test "x$ax_cv_header_curses_h" = xyes], [ AC_DEFINE([HAVE_CURSES_H], [1], [Define to 1 if is present]) # Check for X/Open Enhanced conformance AC_CACHE_CHECK([for X/Open Enhanced Curses conformance], [ax_cv_plaincurses_enhanced], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@define _XOPEN_SOURCE_EXTENDED 1 @%:@include @%:@ifndef _XOPEN_CURSES @%:@error "this Curses library is not enhanced" "this Curses library is not enhanced" @%:@endif ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; attr_t d = WA_NORMAL; cchar_t e; wint_t f; initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); wattr_set(stdscr, d, 0, NULL); wget_wch(stdscr, &f); ]])], [ax_cv_plaincurses_enhanced=yes], [ax_cv_plaincurses_enhanced=no]) ]) AS_IF([test "x$ax_cv_plaincurses_enhanced" = xyes], [ ax_cv_curses_enhanced=yes ax_cv_curses_color=yes AC_DEFINE([HAVE_CURSES_ENHANCED], [1], [Define to 1 if library supports X/Open Enhanced functions]) AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) ]) # Check for color functions AC_CACHE_CHECK([for Curses color functions], [ax_cv_plaincurses_color], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@define _XOPEN_SOURCE_EXTENDED 1 @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; chtype c = COLOR_PAIR(1) & A_COLOR; initscr(); init_pair(1, COLOR_WHITE, COLOR_RED); ]])], [ax_cv_plaincurses_color=yes], [ax_cv_plaincurses_color=no]) ]) AS_IF([test "x$ax_cv_plaincurses_color" = xyes], [ ax_cv_curses_color=yes AC_DEFINE([HAVE_CURSES_COLOR], [1], [Define to 1 if library supports color (enhanced functions)]) ]) # Check for obsolete functions AC_CACHE_CHECK([for obsolete Curses functions], [ax_cv_plaincurses_obsolete], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ chtype a = A_BOLD; int b = KEY_LEFT; int g = getattrs(stdscr); int h = getcurx(stdscr) + getmaxx(stdscr); initscr(); ]])], [ax_cv_plaincurses_obsolete=yes], [ax_cv_plaincurses_obsolete=no]) ]) AS_IF([test "x$ax_cv_plaincurses_obsolete" = xyes], [ ax_cv_curses_obsolete=yes AC_DEFINE([HAVE_CURSES_OBSOLETE], [1], [Define to 1 if library supports certain obsolete features]) ]) ]) AS_IF([test "x$ax_cv_header_curses_h" = xno], [ AC_MSG_WARN([could not find a working curses.h]) ]) ]) ]) AS_IF([test "x$ax_cv_curses" != xyes], [ax_cv_curses=no]) AS_IF([test "x$ax_cv_curses_enhanced" != xyes], [ax_cv_curses_enhanced=no]) AS_IF([test "x$ax_cv_curses_color" != xyes], [ax_cv_curses_color=no]) AS_IF([test "x$ax_cv_curses_obsolete" != xyes], [ax_cv_curses_obsolete=no]) LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS ])dnl pspg-5.8.1/tools/install.sh000077500000000000000000000020411452457446400156570ustar00rootroot00000000000000#!/bin/sh # # Install data or executable file. # # Usage: $0 {data|bin} src dest # # Copyright (c) 2014 Jonas Fonseca # # 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 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. set -e data="$1" src="$2" dest="$3" mode=0755 trash= case "$data" in data) mode=0644 esac install -d "$dest" if [ "$V" = "@" ]; then echo "$src -> $dest" fi # Replace fake /etc-path case "$src" in doc/*) dest="$dest/$(basename "$src")" sed "s#++SYSCONFDIR++#${sysconfdir}#" < "$src" > "$src+" trash="$src+" src="$src+" esac install -p -m "$mode" "$src" "$dest" if [ -n "$trash" ]; then rm -f "$trash" fi pspg-5.8.1/tools/m4_ax_compare_version.m4000066400000000000000000000146531452457446400204130ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_compare_version.html # =========================================================================== # # SYNOPSIS # # AX_COMPARE_VERSION(VERSION_A, OP, VERSION_B, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # # DESCRIPTION # # This macro compares two version strings. Due to the various number of # minor-version numbers that can exist, and the fact that string # comparisons are not compatible with numeric comparisons, this is not # necessarily trivial to do in a autoconf script. This macro makes doing # these comparisons easy. # # The six basic comparisons are available, as well as checking equality # limited to a certain number of minor-version levels. # # The operator OP determines what type of comparison to do, and can be one # of: # # eq - equal (test A == B) # ne - not equal (test A != B) # le - less than or equal (test A <= B) # ge - greater than or equal (test A >= B) # lt - less than (test A < B) # gt - greater than (test A > B) # # Additionally, the eq and ne operator can have a number after it to limit # the test to that number of minor versions. # # eq0 - equal up to the length of the shorter version # ne0 - not equal up to the length of the shorter version # eqN - equal up to N sub-version levels # neN - not equal up to N sub-version levels # # When the condition is true, shell commands ACTION-IF-TRUE are run, # otherwise shell commands ACTION-IF-FALSE are run. The environment # variable 'ax_compare_version' is always set to either 'true' or 'false' # as well. # # Examples: # # AX_COMPARE_VERSION([3.15.7],[lt],[3.15.8]) # AX_COMPARE_VERSION([3.15],[lt],[3.15.8]) # # would both be true. # # AX_COMPARE_VERSION([3.15.7],[eq],[3.15.8]) # AX_COMPARE_VERSION([3.15],[gt],[3.15.8]) # # would both be false. # # AX_COMPARE_VERSION([3.15.7],[eq2],[3.15.8]) # # would be true because it is only comparing two minor versions. # # AX_COMPARE_VERSION([3.15.7],[eq0],[3.15]) # # would be true because it is only comparing the lesser number of minor # versions of the two values. # # Note: The characters that separate the version numbers do not matter. An # empty string is the same as version 0. OP is evaluated by autoconf, not # configure, so must be a string, not a variable. # # The author would like to acknowledge Guido Draheim whose advice about # the m4_case and m4_ifvaln functions make this macro only include the # portions necessary to perform the specific comparison specified by the # OP argument in the final configure script. # # LICENSE # # Copyright (c) 2008 Tim Toolan # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 13 dnl ######################################################################### AC_DEFUN([AX_COMPARE_VERSION], [ AC_REQUIRE([AC_PROG_AWK]) # Used to indicate true or false condition ax_compare_version=false # Convert the two version strings to be compared into a format that # allows a simple string comparison. The end result is that a version # string of the form 1.12.5-r617 will be converted to the form # 0001001200050617. In other words, each number is zero padded to four # digits, and non digits are removed. AS_VAR_PUSHDEF([A],[ax_compare_version_A]) A=`echo "$1" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \ -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \ -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \ -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \ -e 's/[[^0-9]]//g'` AS_VAR_PUSHDEF([B],[ax_compare_version_B]) B=`echo "$3" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \ -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \ -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \ -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \ -e 's/[[^0-9]]//g'` dnl # In the case of le, ge, lt, and gt, the strings are sorted as necessary dnl # then the first line is used to determine if the condition is true. dnl # The sed right after the echo is to remove any indented white space. m4_case(m4_tolower($2), [lt],[ ax_compare_version=`echo "x$A x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/false/;s/x${B}/true/;1q"` ], [gt],[ ax_compare_version=`echo "x$A x$B" | sed 's/^ *//' | sort | sed "s/x${A}/false/;s/x${B}/true/;1q"` ], [le],[ ax_compare_version=`echo "x$A x$B" | sed 's/^ *//' | sort | sed "s/x${A}/true/;s/x${B}/false/;1q"` ], [ge],[ ax_compare_version=`echo "x$A x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/true/;s/x${B}/false/;1q"` ],[ dnl Split the operator from the subversion count if present. m4_bmatch(m4_substr($2,2), [0],[ # A count of zero means use the length of the shorter version. # Determine the number of characters in A and B. ax_compare_version_len_A=`echo "$A" | $AWK '{print(length)}'` ax_compare_version_len_B=`echo "$B" | $AWK '{print(length)}'` # Set A to no more than B's length and B to no more than A's length. A=`echo "$A" | sed "s/\(.\{$ax_compare_version_len_B\}\).*/\1/"` B=`echo "$B" | sed "s/\(.\{$ax_compare_version_len_A\}\).*/\1/"` ], [[0-9]+],[ # A count greater than zero means use only that many subversions A=`echo "$A" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"` B=`echo "$B" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"` ], [.+],[ AC_WARNING( [invalid OP numeric parameter: $2]) ],[]) # Pad zeros at end of numbers to make same length. ax_compare_version_tmp_A="$A`echo $B | sed 's/./0/g'`" B="$B`echo $A | sed 's/./0/g'`" A="$ax_compare_version_tmp_A" # Check for equality or inequality as necessary. m4_case(m4_tolower(m4_substr($2,0,2)), [eq],[ test "x$A" = "x$B" && ax_compare_version=true ], [ne],[ test "x$A" != "x$B" && ax_compare_version=true ],[ AC_WARNING([invalid OP parameter: $2]) ]) ]) AS_VAR_POPDEF([A])dnl AS_VAR_POPDEF([B])dnl dnl # Execute ACTION-IF-TRUE / ACTION-IF-FALSE. if test "$ax_compare_version" = "true" ; then m4_ifvaln([$4],[$4],[:])dnl m4_ifvaln([$5],[else $5])dnl fi ]) dnl AX_COMPARE_VERSION pspg-5.8.1/tools/m4_ax_lib_postgresql.m4000066400000000000000000000212731452457446400202450ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_lib_postgresql.html # =========================================================================== # # SYNOPSIS # # AX_LIB_POSTGRESQL([MINIMUM-VERSION],[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) # # DESCRIPTION # # This macro provides tests of availability of PostgreSQL 'libpq' library # of particular version or newer. # # AX_LIB_POSTGRESQL macro takes only one argument which is optional. If # there is no required version passed, then macro does not run version # test. # # The --with-postgresql option takes one of three possible values: # # no - do not check for PostgreSQL client library # # yes - do check for PostgreSQL library in standard locations (pg_config # should be in the PATH) # # path - complete path to pg_config utility, use this option if pg_config # can't be found in the PATH (You could set also PG_CONFIG variable) # # This macro calls: # # AC_SUBST(POSTGRESQL_CPPFLAGS) # AC_SUBST(POSTGRESQL_LDFLAGS) # AC_SUBST(POSTGRESQL_LIBS) # AC_SUBST(POSTGRESQL_VERSION) # # And sets: # # HAVE_POSTGRESQL # # It execute if found ACTION-IF-FOUND (empty by default) and # ACTION-IF-NOT-FOUND (AC_MSG_FAILURE by default) if not found. # # LICENSE # # Copyright (c) 2008 Mateusz Loskot # Copyright (c) 2014 Sree Harsha Totakura # Copyright (c) 2018 Bastien Roucaries # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 22 AC_DEFUN([_AX_LIB_POSTGRESQL_OLD],[ found_postgresql="no" _AX_LIB_POSTGRESQL_OLD_fail="no" while true; do AC_CACHE_CHECK([for the pg_config program], [ac_cv_path_PG_CONFIG], [AC_PATH_PROGS_FEATURE_CHECK([PG_CONFIG], [pg_config], [[ac_cv_path_PG_CONFIG="";$ac_path_PG_CONFIG --includedir > /dev/null \ && ac_cv_path_PG_CONFIG=$ac_path_PG_CONFIG ac_path_PG_CONFIG_found=:]], [ac_cv_path_PG_CONFIG=""])]) PG_CONFIG=$ac_cv_path_PG_CONFIG AS_IF([test "X$PG_CONFIG" = "X"],[break]) AC_CACHE_CHECK([for the PostgreSQL libraries CPPFLAGS],[ac_cv_POSTGRESQL_CPPFLAGS], [ac_cv_POSTGRESQL_CPPFLAGS="-I`$PG_CONFIG --includedir`" || _AX_LIB_POSTGRESQL_OLD_fail=yes]) AS_IF([test "X$_AX_LIB_POSTGRESQL_OLD_fail" = "Xyes"],[break]) POSTGRESQL_CPPFLAGS="$ac_cv_POSTGRESQL_CPPFLAGS" AC_CACHE_CHECK([for the PostgreSQL libraries LDFLAGS],[ac_cv_POSTGRESQL_LDFLAGS], [ac_cv_POSTGRESQL_LDFLAGS="-L`$PG_CONFIG --libdir`" || _AX_LIB_POSTGRESQL_OLD_fail=yes]) AS_IF([test "X$_AX_LIB_POSTGRESQL_OLD_fail" = "Xyes"],[break]) POSTGRESQL_LDFLAGS="$ac_cv_POSTGRESQL_LDFLAGS" AC_CACHE_CHECK([for the PostgreSQL libraries LIBS],[ac_cv_POSTGRESQL_LIBS], [ac_cv_POSTGRESQL_LIBS="-lpq"]) POSTGRESQL_LIBS="$ac_cv_POSTGRESQL_LIBS" AC_CACHE_CHECK([for the PostgreSQL version],[ac_cv_POSTGRESQL_VERSION], [ ac_cv_POSTGRESQL_VERSION=`$PG_CONFIG --version | sed "s/^PostgreSQL[[[:space:]]][[[:space:]]]*\([[0-9.]][[0-9.]]*\).*/\1/"` \ || _AX_LIB_POSTGRESQL_OLD_fail=yes ]) AS_IF([test "X$_AX_LIB_POSTGRESQL_OLD_fail" = "Xyes"],[break]) POSTGRESQL_VERSION="$ac_cv_POSTGRESQL_VERSION" dnl dnl Check if required version of PostgreSQL is available dnl AS_IF([test X"$postgresql_version_req" != "X"],[ AC_MSG_CHECKING([if PostgreSQL version $POSTGRESQL_VERSION is >= $postgresql_version_req]) AX_COMPARE_VERSION([$POSTGRESQL_VERSION],[ge],[$postgresql_version_req], [found_postgresql_req_version=yes],[found_postgresql_req_version=no]) AC_MSG_RESULT([$found_postgresql_req_version]) ]) AS_IF([test "Xfound_postgresql_req_version" = "Xno"],[break]) found_postgresql="yes" break done ]) AC_DEFUN([_AX_LIB_POSTGRESQL_PKG_CONFIG], [ AC_REQUIRE([PKG_PROG_PKG_CONFIG]) found_postgresql=no while true; do PKG_PROG_PKG_CONFIG AS_IF([test X$PKG_CONFIG = X],[break]) _AX_LIB_POSTGRESQL_PKG_CONFIG_fail=no; AS_IF([test "X$postgresql_version_req" = "X"], [PKG_CHECK_EXISTS([libpq],[found_postgresql_pkg_config=yes],[found_postgresql=no])], [PKG_CHECK_EXISTS([libpq >= "$postgresql_version_req"], [found_postgresql=yes],[found_postgresql=no])]) AS_IF([test "X$found_postgresql" = "no"],[break]) AC_CACHE_CHECK([for the PostgreSQL libraries CPPFLAGS],[ac_cv_POSTGRESQL_CPPFLAGS], [ac_cv_POSTGRESQL_CPPFLAGS="`$PKG_CONFIG libpq --cflags-only-I`" || _AX_LIB_POSTGRESQL_PKG_CONFIG_fail=yes]) AS_IF([test "X$_AX_LIB_POSTGRESQL_PKG_CONFIG_fail" = "Xyes"],[break]) POSTGRESQL_CPPFLAGS="$ac_cv_POSTGRESQL_CPPFLAGS" AC_CACHE_CHECK([for the PostgreSQL libraries LDFLAGS],[ac_cv_POSTGRESQL_LDFLAGS], [ac_cv_POSTGRESQL_LDFLAGS="`$PKG_CONFIG libpq --libs-only-L --libs-only-other`" || _AX_LIB_POSTGRESQL_PKG_CONFIG_fail=yes]) AS_IF([test "X$_AX_LIB_POSTGRESQL_PKG_CONFIG_fail" = "Xyes"],[break]) POSTGRESQL_LDFLAGS="$ac_cv_POSTGRESQL_LDFLAGS" AC_CACHE_CHECK([for the PostgreSQL libraries LIBS],[ac_cv_POSTGRESQL_LIBS], [ac_cv_POSTGRESQL_LIBS="`$PKG_CONFIG libpq --libs-only-l`" || _AX_LIB_POSTGRESQL_PKG_CONFIG_fail=ye]) AS_IF([test "X$_AX_LIB_POSTGRESQL_PKG_CONFIG_fail" = "Xyes"],[break]) POSTGRESQL_LIBS="$ac_cv_POSTGRESQL_LIBS" dnl already checked by exist but need to be recovered AC_CACHE_CHECK([for the PostgreSQL version],[ac_cv_POSTGRESQL_VERSION], [ac_cv_POSTGRESQL_VERSION="`$PKG_CONFIG libpq --modversion`" || _AX_LIB_POSTGRESQL_PKG_CONFIG_fail=yes]) AS_IF([test "X$_AX_LIB_POSTGRESQL_PKG_CONFIG_fail" = "Xyes"],[break]) POSTGRESQL_VERSION="$ac_cv_POSTGRESQL_VERSION" found_postgresql=yes break; done ]) AC_DEFUN([AX_LIB_POSTGRESQL], [ AC_ARG_WITH([postgresql], AS_HELP_STRING([--with-postgresql=@<:@ARG@:>@], [use PostgreSQL library @<:@default=yes@:>@, optionally specify path to pg_config] ), [ AS_CASE([$withval], [[[nN]][[oO]]],[want_postgresql="no"], [[[yY]][[eE]][[sS]]],[want_postgresql="yes"], [ want_postgresql="yes" PG_CONFIG="$withval" ]) ], [want_postgresql="yes"] ) AC_ARG_VAR([POSTGRESQL_CPPFLAGS],[cpp flags for PostgreSQL overriding detected flags]) AC_ARG_VAR([POSTGRESQL_LIBFLAGS],[libs for PostgreSQL overriding detected flags]) AC_ARG_VAR([POSTGRESQL_LDFLAGS],[linker flags for PostgreSQL overriding detected flags]) # populate cache AS_IF([test "X$POSTGRESQL_CPPFLAGS" != X],[ac_cv_POSTGRESQL_CPPFLAGS="$POSTGRESQL_CPPFLAGS"]) AS_IF([test "X$POSTGRESQL_LDFLAGS" != X],[ac_cv_POSTGRESQL_LDFLAGS="$POSTGRESQL_LDFLAGS"]) AS_IF([test "X$POSTGRESQL_LIBS" != X],[ac_cv_POSTGRESQL_LIBS="$POSTGRESQL_LIBS"]) postgresql_version_req=ifelse([$1], [], [], [$1]) found_postgresql="no" POSTGRESQL_VERSION="" dnl dnl Check PostgreSQL libraries (libpq) dnl AS_IF([test X"$want_postgresql" = "Xyes"],[ _AX_LIB_POSTGRESQL_PKG_CONFIG AS_IF([test X"$found_postgresql" = "Xno"], [_AX_LIB_POSTGRESQL_OLD]) AS_IF([test X"$found_postgresql" = Xyes],[ _AX_LIB_POSTGRESQL_OLD_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $POSTGRESQL_CPPFLAGS" _AX_LIB_POSTGRESQL_OLD_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $POSTGRESQL_LDFLAGS" _AX_LIB_POSTGRESQL_OLD_LIBS="$LIBS" LIBS="$LIBS $POSTGRESQL_LIBS" while true; do dnl try to compile AC_CHECK_HEADER([libpq-fe.h],[],[found_postgresql=no]) AS_IF([test "X$found_postgresql" = "Xno"],[break]) dnl try now to link AC_CACHE_CHECK([for the PostgreSQL library linking is working],[ac_cv_postgresql_found], [ AC_LINK_IFELSE([ AC_LANG_PROGRAM( [ #include ], [[ char conninfo[]="dbname = postgres"; PGconn *conn; conn = PQconnectdb(conninfo); ]] ) ],[ac_cv_postgresql_found=yes], [ac_cv_postgresql_found=no]) ]) found_postgresql="$ac_cv_postgresql_found" AS_IF([test "X$found_postgresql" = "Xno"],[break]) break done CPPFLAGS="$_AX_LIB_POSTGRESQL_OLD_CPPFLAGS" LDFLAGS="$_AX_LIB_POSTGRESQL_OLD_LDFLAGS" LIBS="$_AX_LIB_POSTGRESQL_OLD_LIBS" ]) AS_IF([test "x$found_postgresql" = "xyes"],[ AC_DEFINE([HAVE_POSTGRESQL], [1], [Define to 1 if PostgreSQL libraries are available])]) ]) AC_SUBST([POSTGRESQL_VERSION]) AC_SUBST([POSTGRESQL_CPPFLAGS]) AC_SUBST([POSTGRESQL_LDFLAGS]) AC_SUBST([POSTGRESQL_LIBS]) AS_IF([test "x$found_postgresql" = "xyes"], [ifelse([$2], , :, [$2])], [ifelse([$3], , AS_IF([test X"$want_postgresql" = "Xyes"],[AC_MSG_ERROR([Library requirements (PostgreSQL) not met.])],[:]), [$3])]) ]) pspg-5.8.1/tools/m4_ax_with_curses_extra.m4000066400000000000000000000240611452457446400207540ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_with_curses_extra.html # =========================================================================== # # SYNOPSIS # # AX_WITH_CURSES_PANEL # AX_WITH_CURSES_MENU # AX_WITH_CURSES_FORM # # DESCRIPTION # # These macros try to find additional libraries that often come with # SysV-compatible Curses. In particular, the Panel, Menu and Form # libraries are searched, along with their header files. These macros # depend on AX_WITH_CURSES. # # The following preprocessor symbols may be defined by these macros: # # By AX_WITH_CURSES_PANEL: # # HAVE_PANEL - if the Panel library is present # HAVE_PANEL_H - if is present and should be used # HAVE_NCURSES_PANEL_H - if should be used # HAVE_NCURSESW_PANEL_H - if should be used # # By AX_WITH_CURSES_MENU: # # HAVE_MENU - if the Menu library is present # HAVE_MENU_H - if is present and should be used # HAVE_NCURSES_MENU_H - if should be used # HAVE_NCURSESW_MENU_H - if should be used # # By AX_WITH_CURSES_FORM: # # HAVE_FORM - if the Form library is present # HAVE_FORM_H - if is present and should be used # HAVE_NCURSES_FORM_H - if should be used # HAVE_NCURSESW_FORM_H - if should be used # # The following output variables may be defined by these macros; these are # precious and may be overridden on the ./configure command line: # # PANEL_LIBS - library to add to xxx_LDADD before CURSES_LIBS # MENU_LIBS - library to add to xxx_LDADD before CURSES_LIBS # FORM_LIBS - library to add to xxx_LDADD before CURSES_LIBS # # In previous versions of this macro, the flags PANEL_LIB, MENU_LIB and # FORM_LIB were defined. These have been renamed, in keeping with the # variable scheme of PKG_CHECK_MODULES, which should eventually supersede # the use of AX_WITH_CURSES and AX_WITH_CURSES_* macros. These libraries # are NOT added to LIBS by default. You need to add them to the # appropriate xxx_LDADD line in your Makefile.am in front of the # equivalent CURSES_LIBS incantation. For example: # # prog_LDADD = @PANEL_LIBS@ @CURSES_LIBS@ # # If one of the xxx_LIBS variables is set on the configure command line # (such as by running "./configure PANEL_LIBS=-lmypanel"), then the header # file searched must NOT contain a subpath. In this case, in other words, # only would be searched for. The user may use the CPPFLAGS # precious variable to override the standard #include search path. # # The following shell variables may be defined by these macros: # # ax_cv_panel - set to "yes" if Panels library is present # ax_cv_menu - set to "yes" if Menu library is present # ax_cv_form - set to "yes" if Form library is present # # These variables can be used in your configure.ac to determine whether a # library you require is actually present. For example: # # AX_WITH_CURSES # if test "x$ax_cv_curses" != xyes; then # AC_MSG_ERROR([requires a SysV or X/Open-compatible Curses library]) # fi # AX_WITH_CURSES_PANEL # if test "x$ax_cv_panel" != xyes; then # AC_MSG_ERROR([requires the Curses Panel library]) # fi # # To use the HAVE_xxx_H preprocessor symbols, insert the following into # your system.h (or equivalent) header file: # # For AX_WITH_CURSES_PANEL: # # #if defined HAVE_NCURSESW_PANEL_H # # include # #elif defined HAVE_NCURSES_PANEL_H # # include # #elif defined HAVE_PANEL_H # # include # #else # # error "SysV-compatible Curses Panel header file required" # #endif # # For AX_WITH_CURSES_MENU: # # #if defined HAVE_NCURSESW_MENU_H # # include # #elif defined HAVE_NCURSES_MENU_H # # include # #elif defined HAVE_MENU_H # # include # #else # # error "SysV-compatible Curses Menu header file required" # #endif # # For AX_WITH_CURSES_FORM: # # #if defined HAVE_NCURSESW_FORM_H # # include # #elif defined HAVE_NCURSES_FORM_H # # include # #elif defined HAVE_FORM_H # # include # #else # # error "SysV-compatible Curses Form header file required" # #endif # # LICENSE # # Copyright (c) 2011 John Zaitseff # # 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 . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 5 AC_DEFUN([_AX_WITH_CURSES_CHECKEXTRA], [ dnl Parameter 1 is the variable name component, using uppercase letters only dnl Parameter 2 is the printable library name dnl Parameter 3 is the C code to try compiling and linking dnl Parameter 4 is the header filename dnl Parameter 5 is the library command line AS_VAR_PUSHDEF([_AX_WITH_CURSES_CHECKEXTRA_have_var], [HAVE_$1])dnl AS_VAR_PUSHDEF([_AX_WITH_CURSES_CHECKEXTRA_cv_var], [ax_cv_[]m4_tolower($1)])dnl AS_VAR_PUSHDEF([_AX_WITH_CURSES_CHECKEXTRA_header_var], [ax_cv_header_$4])dnl AS_VAR_PUSHDEF([_AX_WITH_CURSES_CHECKEXTRA_have_header_var], [HAVE_[]m4_toupper($4)])dnl ax_saved_LIBS=$LIBS ax_saved_CPPFLAGS=$CPPFLAGS AC_CACHE_CHECK([for Curses $2 library with $4], [_AX_WITH_CURSES_CHECKEXTRA_header_var], [ LIBS="$ax_saved_LIBS $5 $CURSES_LIBS" CPPFLAGS="$ax_saved_CPPFLAGS $CURSES_CFLAGS" AC_LINK_IFELSE([AC_LANG_PROGRAM([[ @%:@include <$4> ]], [$3])], [_AX_WITH_CURSES_CHECKEXTRA_header_var=yes], [_AX_WITH_CURSES_CHECKEXTRA_header_var=no]) ]) AS_IF([test "x$[]_AX_WITH_CURSES_CHECKEXTRA_header_var" = xyes], [ _AX_WITH_CURSES_CHECKEXTRA_cv_var=yes AS_LITERAL_IF([$5], [$1_LIBS="$5"]) AC_DEFINE([_AX_WITH_CURSES_CHECKEXTRA_have_var], [1], [Define to 1 if the Curses $2 library is present]) AC_DEFINE([_AX_WITH_CURSES_CHECKEXTRA_have_header_var], [1], [Define to 1 if <$4> is present]) ], [ AS_IF([test "x$[]_AX_WITH_CURSES_CHECKEXTRA_cv_var" = xyes], [], [_AX_WITH_CURSES_CHECKEXTRA_cv_var=no]) ]) LIBS=$ax_saved_LIBS CPPFLAGS=$ax_saved_CPPFLAGS unset ax_saved_LIBS unset ax_saved_CPPFLAGS AS_VAR_POPDEF([_AX_WITH_CURSES_CHECKEXTRA_have_header_var])dnl AS_VAR_POPDEF([_AX_WITH_CURSES_CHECKEXTRA_header_var])dnl AS_VAR_POPDEF([_AX_WITH_CURSES_CHECKEXTRA_cv_var])dnl AS_VAR_POPDEF([_AX_WITH_CURSES_CHECKEXTRA_have_var])dnl ])dnl AC_DEFUN([_AX_WITH_CURSES_EXTRA], [ dnl Parameter 1 is the variable name component, using uppercase letters only dnl Parameter 2 is the printable library name dnl Parameter 3 is the C code to try compiling and linking dnl Parameter 4 is the header filename component dnl Parameter 5 is the NCursesW library command line dnl Parameter 6 is the NCurses library command line dnl Parameter 7 is the plain Curses library command line AC_REQUIRE([AX_WITH_CURSES]) AC_ARG_VAR([$1_LIBS], [linker library for Curses $2, e.g. $7]) AS_IF([test "x$[]$1_LIBS" != x], [ _AX_WITH_CURSES_CHECKEXTRA([$1], [$2], [$3], [$4], [$[]$1_LIBS]) ], [ AS_IF([test "x$ax_cv_curses_which" = xncursesw], [ _AX_WITH_CURSES_CHECKEXTRA([$1], [$2], [$3], [ncursesw/$4], [$5]) AS_IF([test x$[]ax_cv_[]m4_tolower($1) != "xyes"], [ _AX_WITH_CURSES_CHECKEXTRA([$1], [$2], [$3], [$4], [$6]) ]) ], [test "x$ax_cv_curses_which" = xncurses], [ _AX_WITH_CURSES_CHECKEXTRA([$1], [$2], [$3], [$4], [$6]) AS_IF([test x$[]ax_cv_[]m4_tolower($1) != "xyes"], [ _AX_WITH_CURSES_CHECKEXTRA([$1], [$2], [$3], [ncurses/$4], [$6]) ]) ], [test "x$ax_cv_curses_which" = xplaincurses], [ _AX_WITH_CURSES_CHECKEXTRA([$1], [$2], [$3], [$4], [$7]) ]) ]) ])dnl AC_DEFUN([AX_WITH_CURSES_PANEL], [ _AX_WITH_CURSES_EXTRA([PANEL], [Panel], [[ WINDOW *win = newwin(0, 0, 0, 0); PANEL *pan = new_panel(win); ]], [panel.h], [-lpanelw], [-lpanel], [-lpanel]) ])dnl AC_DEFUN([AX_WITH_CURSES_MENU], [ _AX_WITH_CURSES_EXTRA([MENU], [Menu], [[ ITEM **mi; MENU *m = new_menu(mi); ]], [menu.h], [-lmenuw], [-lmenu], [-lmenu]) ])dnl AC_DEFUN([AX_WITH_CURSES_FORM], [ _AX_WITH_CURSES_EXTRA([FORM], [Form], [[ FIELD **ff; FORM *f = new_form(ff); ]], [form.h], [-lformw], [-lform], [-lform]) ])dnl