diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..44c6c71 --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +# Ignore available pkg files +**/*.pkg.tar.gz + +# Now ignore other things that are not needed to be included in .git +**/pkg +**/src +**/*xz* +**/*tar.gz +**/*tar.bz2 +**/*.zip +**/*tgz +**/*tar.zst +**/*sign* +**/*sig* +**/*asc* +**/.git +**/*.dat.gz + +# Ignore all of the extra folders in pkgbuild dir +*/*/*/*/ + +# Also ignore this +**/key diff --git a/x86_64/cleanup.sh b/x86_64/cleanup.sh new file mode 100755 index 0000000..07ba378 --- /dev/null +++ b/x86_64/cleanup.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +remove_leftovers() { + iam=$1 + + cd $@ + + set +e + echo " " + echo "[*]: Moving $iam pkgs to proper place" + mv */*pkg.t* ../../pkgs/$iam/ &> /dev/null + set -e + echo "[*]: Cleaning up $iam" + + rm -rf */pkg/ */src/ */*pkg* */*xz* */*tar.gz */*tar.bz2 */*.zip */*/ */*tgz */*tar.zst */*sign* */*sig* */*asc* + + cd .. +} + +set -e + +remove_leftovers core +remove_leftovers cross_tools +remove_leftovers extra +remove_leftovers extra32 +remove_leftovers games +remove_leftovers layers +remove_leftovers pentest +remove_leftovers perl +remove_leftovers proprietary +remove_leftovers python +remove_leftovers server +remove_leftovers xfce +remove_leftovers kde +remove_leftovers gnome + +echo " " +echo "[*]: Done" diff --git a/x86_64/core/PKGBUILD b/x86_64/core/PKGBUILD new file mode 100644 index 0000000..1bbffd3 --- /dev/null +++ b/x86_64/core/PKGBUILD @@ -0,0 +1,25 @@ +pkgname= +pkgver= +pkgrel=1 +arch=('x86_64') +depends=() +makedepends=() +source=() + +prepare() { + cd $pkgname-$pkgver + + +} + +build() { + cd $pkgname-$pkgver + + +} + +package() { + cd $pkgname-$pkgver + + +} diff --git a/x86_64/core/accountsservice/40-adm.rules b/x86_64/core/accountsservice/40-adm.rules new file mode 100644 index 0000000..9e1017d --- /dev/null +++ b/x86_64/core/accountsservice/40-adm.rules @@ -0,0 +1,3 @@ +polkit.addAdminRule(function(action, subject) { + return["unix-group:adm"]; + }); diff --git a/x86_64/core/accountsservice/PKGBUILD b/x86_64/core/accountsservice/PKGBUILD new file mode 100644 index 0000000..6721188 --- /dev/null +++ b/x86_64/core/accountsservice/PKGBUILD @@ -0,0 +1,34 @@ +pkgname=accountsservice +pkgver=22.08.8 +pkgrel=1 +arch=('x86_64') +depends=(glib2 polkit systemd shadow) +makedepends=(gtk-doc gobject-introspection meson docbook-xsl docbook-xml + xmlto vala python3-pygments) +source=(https://freedesktop.org/software/$pkgname/$pkgname-$pkgver.tar.xz + 40-adm.rules) + +prepare() { + mkdir -p $pkgname-$pkgver/build +} + +build() { + cd $pkgname-$pkgver/build + + meson \ + --prefix=/usr \ + -D admin_group=adm \ + -D gtk_doc=true \ + -D docbook=true + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install + + mkdir -p $pkgdir/etc/polkit-1/rules.d + cp $srcdir/40-adm.rules $pkgdir/etc/polkit-1/rules.d/ +} diff --git a/x86_64/core/acl/PKGBUILD b/x86_64/core/acl/PKGBUILD new file mode 100644 index 0000000..2866558 --- /dev/null +++ b/x86_64/core/acl/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=acl +pkgver=2.3.1 +pkgrel=3 +arch=('x86_64') +depends=(attr) +source=(https://download.savannah.gnu.org/releases/$pkgname/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --bindir=/bin \ + --libexecdir=/usr/lib + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + + mkdir -vp $pkgdir/lib + mv -v $pkgdir/usr/lib/libacl.so.* $pkgdir/lib/ + ln -sfv ../../lib/$(readlink $pkgdir/usr/lib/libacl.so) $pkgdir/usr/lib/libacl.so +} diff --git a/x86_64/core/attr/PKGBUILD b/x86_64/core/attr/PKGBUILD new file mode 100644 index 0000000..f4c8199 --- /dev/null +++ b/x86_64/core/attr/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=attr +pkgver=2.5.1 +arch=('x86_64') +pkgrel=4 +depends=(glibc) +makedepends=(grep gawk file) +source=(https://download.savannah.gnu.org/releases/$pkgname/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --bindir=/bin \ + --sysconfdir=/etc + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/base-chroot/PKGBUILD b/x86_64/core/base-chroot/PKGBUILD new file mode 100644 index 0000000..e78b4e6 --- /dev/null +++ b/x86_64/core/base-chroot/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=base-chroot +pkgver=2022.3 +pkgrel=1 +pkgdesc="Base metapckage alike pkg to give user/dev needed CLI-System" +arch=('x86_64') +conflicts=(base-drunk) +source=(os-release neofetch) +depends=( + # Base packages + accountsservice ca-certificates diffutils file gnu-efi kmod libnl linux-pam pciutils procps-ng tar xz + acl dosfstools filesystem gzip less libseccomp lz4 pcre readline texinfo zlib + attr coreutils freetype2 iana-etc libarchive libtasn1 lzo pcre2 sed tzdata + cpio duktape fuse2 icu libcap ncurses shadow util-linux + bash curl e2fsprogs gawk inetutils libevent libx11 openssl pkgconf squashfs-tools wget + binutils dbus gettext intltool libffi libxcrypt p11-kit polkit syslinux which + bzip2 dhcpcd expat glib2 iproute2 libgudev libxml2 popt systemd wpa_supplicant + findutils nghttp2 + + # pkg manager + bottle) + +build() { + mkdir -p $pkgname-$pkgver + cd $pkgname-$pkgver +} + +package() { + cd $pkgname-$pkgver + + # Make rootfs structure + mkdir -vp $pkgdir/etc/systemd/system/ + mkdir -vp $pkgdir/usr/bin + + # Copy over needed files + cp -rf ../../os-release $pkgdir/etc + cp -rf ../../neofetch $pkgdir/usr/bin && chmod +x $pkgdir/usr/bin/neofetch +} diff --git a/x86_64/core/base-chroot/neofetch b/x86_64/core/base-chroot/neofetch new file mode 100755 index 0000000..9ca8859 --- /dev/null +++ b/x86_64/core/base-chroot/neofetch @@ -0,0 +1,11563 @@ +#!/usr/bin/env bash +# vim: noai:ts=4:sw=4:expandtab +# shellcheck source=/dev/null +# shellcheck disable=2009 +# +# Neofetch: A command-line system information tool written in bash 3.2+. +# https://github.com/dylanaraps/neofetch +# +# The MIT License (MIT) +# +# Copyright (c) 2015-2021 Dylan Araps +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +version=7.1.0 + +# Fallback to a value of '5' for shells which support bash +# but do not set the 'BASH_' shell variables (osh). +bash_version=${BASH_VERSINFO[0]:-5} +shopt -s eval_unsafe_arith &>/dev/null + +sys_locale=${LANG:-C} +XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-${HOME}/.config} +PATH=$PATH:/usr/xpg4/bin:/usr/sbin:/sbin:/usr/etc:/usr/libexec +reset='\e[0m' +shopt -s nocasematch + +# Speed up script by not using unicode. +LC_ALL=C +LANG=C + +# Fix issues with gsettings. +export GIO_EXTRA_MODULES=/usr/lib/x86_64-linux-gnu/gio/modules/ + +# Neofetch default config. +read -rd '' config <<'EOF' +# See this wiki page for more info: +# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info +print_info() { + info title + info underline + + info "OS" distro + info "Host" model + info "Kernel" kernel + info "Uptime" uptime + info "Packages" packages + info "Shell" shell + info "Resolution" resolution + info "DE" de + info "WM" wm + info "WM Theme" wm_theme + info "Theme" theme + info "Icons" icons + info "Terminal" term + info "Terminal Font" term_font + info "CPU" cpu + info "GPU" gpu + info "Memory" memory + + # info "GPU Driver" gpu_driver # Linux/macOS only + # info "Disk" disk + # info "Battery" battery + # info "Font" font + # info "Song" song + # [[ "$player" ]] && prin "Music Player" "$player" + # info "Local IP" local_ip + # info "Public IP" public_ip + # info "Users" users + # info "Locale" locale # This only works on glibc systems. + + info cols +} + +# Title + + +# Hide/Show Fully qualified domain name. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --title_fqdn +title_fqdn="off" + + +# Kernel + + +# Shorten the output of the kernel function. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --kernel_shorthand +# Supports: Everything except *BSDs (except PacBSD and PC-BSD) +# +# Example: +# on: '4.8.9-1-ARCH' +# off: 'Linux 4.8.9-1-ARCH' +kernel_shorthand="on" + + +# Distro + + +# Shorten the output of the distro function +# +# Default: 'off' +# Values: 'on', 'tiny', 'off' +# Flag: --distro_shorthand +# Supports: Everything except Windows and Haiku +distro_shorthand="off" + +# Show/Hide OS Architecture. +# Show 'x86_64', 'x86' and etc in 'Distro:' output. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --os_arch +# +# Example: +# on: 'Arch Linux x86_64' +# off: 'Arch Linux' +os_arch="on" + + +# Uptime + + +# Shorten the output of the uptime function +# +# Default: 'on' +# Values: 'on', 'tiny', 'off' +# Flag: --uptime_shorthand +# +# Example: +# on: '2 days, 10 hours, 3 mins' +# tiny: '2d 10h 3m' +# off: '2 days, 10 hours, 3 minutes' +uptime_shorthand="on" + + +# Memory + + +# Show memory percentage in output. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --memory_percent +# +# Example: +# on: '1801MiB / 7881MiB (22%)' +# off: '1801MiB / 7881MiB' +memory_percent="off" + +# Change memory output unit. +# +# Default: 'mib' +# Values: 'kib', 'mib', 'gib' +# Flag: --memory_unit +# +# Example: +# kib '1020928KiB / 7117824KiB' +# mib '1042MiB / 6951MiB' +# gib: ' 0.98GiB / 6.79GiB' +memory_unit="mib" + + +# Packages + + +# Show/Hide Package Manager names. +# +# Default: 'tiny' +# Values: 'on', 'tiny' 'off' +# Flag: --package_managers +# +# Example: +# on: '998 (pacman), 8 (flatpak), 4 (snap)' +# tiny: '908 (pacman, flatpak, snap)' +# off: '908' +package_managers="on" + + +# Shell + + +# Show the path to $SHELL +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --shell_path +# +# Example: +# on: '/bin/bash' +# off: 'bash' +shell_path="off" + +# Show $SHELL version +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --shell_version +# +# Example: +# on: 'bash 4.4.5' +# off: 'bash' +shell_version="on" + + +# CPU + + +# CPU speed type +# +# Default: 'bios_limit' +# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'. +# Flag: --speed_type +# Supports: Linux with 'cpufreq' +# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value. +speed_type="bios_limit" + +# CPU speed shorthand +# +# Default: 'off' +# Values: 'on', 'off'. +# Flag: --speed_shorthand +# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz +# +# Example: +# on: 'i7-6500U (4) @ 3.1GHz' +# off: 'i7-6500U (4) @ 3.100GHz' +speed_shorthand="off" + +# Enable/Disable CPU brand in output. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --cpu_brand +# +# Example: +# on: 'Intel i7-6500U' +# off: 'i7-6500U (4)' +cpu_brand="on" + +# CPU Speed +# Hide/Show CPU speed. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --cpu_speed +# +# Example: +# on: 'Intel i7-6500U (4) @ 3.1GHz' +# off: 'Intel i7-6500U (4)' +cpu_speed="on" + +# CPU Cores +# Display CPU cores in output +# +# Default: 'logical' +# Values: 'logical', 'physical', 'off' +# Flag: --cpu_cores +# Support: 'physical' doesn't work on BSD. +# +# Example: +# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores) +# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores) +# off: 'Intel i7-6500U @ 3.1GHz' +cpu_cores="logical" + +# CPU Temperature +# Hide/Show CPU temperature. +# Note the temperature is added to the regular CPU function. +# +# Default: 'off' +# Values: 'C', 'F', 'off' +# Flag: --cpu_temp +# Supports: Linux, BSD +# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable +# coretemp kernel module. This only supports newer Intel processors. +# +# Example: +# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]' +# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]' +# off: 'Intel i7-6500U (4) @ 3.1GHz' +cpu_temp="off" + + +# GPU + + +# Enable/Disable GPU Brand +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gpu_brand +# +# Example: +# on: 'AMD HD 7950' +# off: 'HD 7950' +gpu_brand="on" + +# Which GPU to display +# +# Default: 'all' +# Values: 'all', 'dedicated', 'integrated' +# Flag: --gpu_type +# Supports: Linux +# +# Example: +# all: +# GPU1: AMD HD 7950 +# GPU2: Intel Integrated Graphics +# +# dedicated: +# GPU1: AMD HD 7950 +# +# integrated: +# GPU1: Intel Integrated Graphics +gpu_type="all" + + +# Resolution + + +# Display refresh rate next to each monitor +# Default: 'off' +# Values: 'on', 'off' +# Flag: --refresh_rate +# Supports: Doesn't work on Windows. +# +# Example: +# on: '1920x1080 @ 60Hz' +# off: '1920x1080' +refresh_rate="off" + + +# Gtk Theme / Icons / Font + + +# Shorten output of GTK Theme / Icons / Font +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --gtk_shorthand +# +# Example: +# on: 'Numix, Adwaita' +# off: 'Numix [GTK2], Adwaita [GTK3]' +gtk_shorthand="off" + + +# Enable/Disable gtk2 Theme / Icons / Font +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gtk2 +# +# Example: +# on: 'Numix [GTK2], Adwaita [GTK3]' +# off: 'Adwaita [GTK3]' +gtk2="on" + +# Enable/Disable gtk3 Theme / Icons / Font +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gtk3 +# +# Example: +# on: 'Numix [GTK2], Adwaita [GTK3]' +# off: 'Numix [GTK2]' +gtk3="on" + + +# IP Address + + +# Website to ping for the public IP +# +# Default: 'http://ident.me' +# Values: 'url' +# Flag: --ip_host +public_ip_host="http://ident.me" + +# Public IP timeout. +# +# Default: '2' +# Values: 'int' +# Flag: --ip_timeout +public_ip_timeout=2 + +# Local IP interface +# +# Default: 'auto' (interface of default route) +# Values: 'auto', 'en0', 'en1' +# Flag: --ip_interface +local_ip_interface=('auto') + + +# Desktop Environment + + +# Show Desktop Environment version +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --de_version +de_version="on" + + +# Disk + + +# Which disks to display. +# The values can be any /dev/sdXX, mount point or directory. +# NOTE: By default we only show the disk info for '/'. +# +# Default: '/' +# Values: '/', '/dev/sdXX', '/path/to/drive'. +# Flag: --disk_show +# +# Example: +# disk_show=('/' '/dev/sdb1'): +# 'Disk (/): 74G / 118G (66%)' +# 'Disk (/mnt/Videos): 823G / 893G (93%)' +# +# disk_show=('/'): +# 'Disk (/): 74G / 118G (66%)' +# +disk_show=('/') + +# Disk subtitle. +# What to append to the Disk subtitle. +# +# Default: 'mount' +# Values: 'mount', 'name', 'dir', 'none' +# Flag: --disk_subtitle +# +# Example: +# name: 'Disk (/dev/sda1): 74G / 118G (66%)' +# 'Disk (/dev/sdb2): 74G / 118G (66%)' +# +# mount: 'Disk (/): 74G / 118G (66%)' +# 'Disk (/mnt/Local Disk): 74G / 118G (66%)' +# 'Disk (/mnt/Videos): 74G / 118G (66%)' +# +# dir: 'Disk (/): 74G / 118G (66%)' +# 'Disk (Local Disk): 74G / 118G (66%)' +# 'Disk (Videos): 74G / 118G (66%)' +# +# none: 'Disk: 74G / 118G (66%)' +# 'Disk: 74G / 118G (66%)' +# 'Disk: 74G / 118G (66%)' +disk_subtitle="mount" + +# Disk percent. +# Show/Hide disk percent. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --disk_percent +# +# Example: +# on: 'Disk (/): 74G / 118G (66%)' +# off: 'Disk (/): 74G / 118G' +disk_percent="on" + + +# Song + + +# Manually specify a music player. +# +# Default: 'auto' +# Values: 'auto', 'player-name' +# Flag: --music_player +# +# Available values for 'player-name': +# +# amarok +# audacious +# banshee +# bluemindo +# clementine +# cmus +# deadbeef +# deepin-music +# dragon +# elisa +# exaile +# gnome-music +# gmusicbrowser +# gogglesmm +# guayadeque +# io.elementary.music +# iTunes +# Music +# juk +# lollypop +# MellowPlayer +# mocp +# mopidy +# mpd +# muine +# netease-cloud-music +# olivia +# playerctl +# pogo +# pragha +# qmmp +# quodlibet +# rhythmbox +# sayonara +# smplayer +# spotify +# strawberry +# tauonmb +# tomahawk +# vlc +# xmms2d +# xnoise +# yarock +music_player="auto" + +# Format to display song information. +# +# Default: '%artist% - %album% - %title%' +# Values: '%artist%', '%album%', '%title%' +# Flag: --song_format +# +# Example: +# default: 'Song: Jet - Get Born - Sgt Major' +song_format="%artist% - %album% - %title%" + +# Print the Artist, Album and Title on separate lines +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --song_shorthand +# +# Example: +# on: 'Artist: The Fratellis' +# 'Album: Costello Music' +# 'Song: Chelsea Dagger' +# +# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger' +song_shorthand="off" + +# 'mpc' arguments (specify a host, password etc). +# +# Default: '' +# Example: mpc_args=(-h HOST -P PASSWORD) +mpc_args=() + + +# Text Colors + + +# Text Colors +# +# Default: 'distro' +# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' +# Flag: --colors +# +# Each number represents a different part of the text in +# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info' +# +# Example: +# colors=(distro) - Text is colored based on Distro colors. +# colors=(4 6 1 8 8 6) - Text is colored in the order above. +colors=(distro) + + +# Text Options + + +# Toggle bold text +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --bold +bold="on" + +# Enable/Disable Underline +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --underline +underline_enabled="on" + +# Underline character +# +# Default: '-' +# Values: 'string' +# Flag: --underline_char +underline_char="-" + + +# Info Separator +# Replace the default separator with the specified string. +# +# Default: ':' +# Flag: --separator +# +# Example: +# separator="->": 'Shell-> bash' +# separator=" =": 'WM = dwm' +separator=":" + + +# Color Blocks + + +# Color block range +# The range of colors to print. +# +# Default: '0', '15' +# Values: 'num' +# Flag: --block_range +# +# Example: +# +# Display colors 0-7 in the blocks. (8 colors) +# neofetch --block_range 0 7 +# +# Display colors 0-15 in the blocks. (16 colors) +# neofetch --block_range 0 15 +block_range=(0 15) + +# Toggle color blocks +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --color_blocks +color_blocks="on" + +# Color block width in spaces +# +# Default: '3' +# Values: 'num' +# Flag: --block_width +block_width=3 + +# Color block height in lines +# +# Default: '1' +# Values: 'num' +# Flag: --block_height +block_height=1 + +# Color Alignment +# +# Default: 'auto' +# Values: 'auto', 'num' +# Flag: --col_offset +# +# Number specifies how far from the left side of the terminal (in spaces) to +# begin printing the columns, in case you want to e.g. center them under your +# text. +# Example: +# col_offset="auto" - Default behavior of neofetch +# col_offset=7 - Leave 7 spaces then print the colors +col_offset="auto" + +# Progress Bars + + +# Bar characters +# +# Default: '-', '=' +# Values: 'string', 'string' +# Flag: --bar_char +# +# Example: +# neofetch --bar_char 'elapsed' 'total' +# neofetch --bar_char '-' '=' +bar_char_elapsed="-" +bar_char_total="=" + +# Toggle Bar border +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --bar_border +bar_border="on" + +# Progress bar length in spaces +# Number of chars long to make the progress bars. +# +# Default: '15' +# Values: 'num' +# Flag: --bar_length +bar_length=15 + +# Progress bar colors +# When set to distro, uses your distro's logo colors. +# +# Default: 'distro', 'distro' +# Values: 'distro', 'num' +# Flag: --bar_colors +# +# Example: +# neofetch --bar_colors 3 4 +# neofetch --bar_colors distro 5 +bar_color_elapsed="distro" +bar_color_total="distro" + + +# Info display +# Display a bar with the info. +# +# Default: 'off' +# Values: 'bar', 'infobar', 'barinfo', 'off' +# Flags: --memory_display +# --battery_display +# --disk_display +# +# Example: +# bar: '[---=======]' +# infobar: 'info [---=======]' +# barinfo: '[---=======] info' +# off: 'info' +memory_display="off" +battery_display="off" +disk_display="off" + + +# Backend Settings + + +# Image backend. +# +# Default: 'ascii' +# Values: 'ascii', 'caca', 'catimg', 'chafa', 'jp2a', 'iterm2', 'off', +# 'pot', 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty', 'ueberzug', +# 'viu' + +# Flag: --backend +image_backend="ascii" + +# Image Source +# +# Which image or ascii file to display. +# +# Default: 'auto' +# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/' +# 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")' +# Flag: --source +# +# NOTE: 'auto' will pick the best image source for whatever image backend is used. +# In ascii mode, distro ascii art will be used and in an image mode, your +# wallpaper will be used. +image_source="auto" + + +# Ascii Options + + +# Ascii distro +# Which distro's ascii art to display. +# +# Default: 'auto' +# Values: 'auto', 'distro_name' +# Flag: --ascii_distro +# NOTE: AIX, Hash, Alpine, AlterLinux, Amazon, Anarchy, Android, instantOS, +# Antergos, antiX, "AOSC OS", "AOSC OS/Retro", Apricity, ArchCraft, +# ArcoLinux, ArchBox, ARCHlabs, ArchStrike, XFerience, ArchMerge, Arch, +# Artix, Arya, Bedrock, Bitrig, BlackArch, BLAG, BlankOn, BlueLight, +# Bodhi, bonsai, BSD, BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS, +# Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover, Condres, +# Container_Linux, Crystal Linux, CRUX, Cucumber, dahlia, Debian, Deepin, +# DesaOS, Devuan, DracOS, DarkOs, Itc, DragonFly, Drauger, Elementary, +# EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD, +# FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, Pentoo, +# gNewSense, GNOME, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra, HydroOS +# Hyperbola, iglunix, janus, Kali, Drunk, KaOS, KDE_neon, Kibojoe, Kogaion, Korora, +# KSLinux, Kubuntu, LEDE, LaxerOS, LibreELEC, LFS, Linux_Lite, LMDE, +# Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva, Manjaro, TeArch, Maui, +# Mer, Minix, LinuxMint, Live_Raizo, MX_Linux, Namib, Neptune, NetBSD, +# Netrunner, Nitrux, NixOS, Nurunner, NuTyX, OBRevenge, OpenBSD, +# openEuler, OpenIndiana, openmamba, OpenMandriva, OpenStage, OpenWrt, +# osmc, Oracle, OS Elbrus, PacBSD, Parabola, Pardus, Parrot, Parsix, +# TrueOS, PCLinuxOS, Pengwin, Peppermint, Pisi, popos, Porteus, PostMarketOS, +# Proxmox, PuffOS, Puppy, PureOS, Qubes, Quibian, Radix, Raspbian, +# Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan, Regata, Regolith, +# Rocky, Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific, Septor, +# SereneLinux, SharkLinux, Siduction, SkiffOS, Slackware, SliTaz, SmartOS, +# Solus, Source_Mage, Sparky, Star, SteamOS, SunOS, openSUSE_Leap, t2, +# openSUSE_Tumbleweed, openSUSE, SwagArch, Tails, Trisquel, +# Ubuntu-Cinnamon, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, +# Ubuntu-Studio, Ubuntu, Univention, Venom, Void, VNux, LangitKetujuh, semc, +# Obarun, windows10, Windows7, Xubuntu, Zorin, and IRIX have ascii logos. +# NOTE: Arch, Ubuntu, Redhat, Fedora and Dragonfly have 'old' logo variants. +# Use '{distro name}_old' to use the old logos. +# NOTE: Ubuntu has flavor variants. +# Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME, +# Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors. +# NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu, +# CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android, +# Artix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola, +# Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS, +# Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian, +# postmarketOS, and Void have a smaller logo variant. +# Use '{distro name}_small' to use the small variants. +ascii_distro="auto" + +# Ascii Colors +# +# Default: 'distro' +# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' +# Flag: --ascii_colors +# +# Example: +# ascii_colors=(distro) - Ascii is colored based on Distro colors. +# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors. +ascii_colors=(distro) + +# Bold ascii logo +# Whether or not to bold the ascii logo. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --ascii_bold +ascii_bold="on" + + +# Image Options + + +# Image loop +# Setting this to on will make neofetch redraw the image constantly until +# Ctrl+C is pressed. This fixes display issues in some terminal emulators. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --loop +image_loop="off" + +# Thumbnail directory +# +# Default: '~/.cache/thumbnails/neofetch' +# Values: 'dir' +thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch" + +# Crop mode +# +# Default: 'normal' +# Values: 'normal', 'fit', 'fill' +# Flag: --crop_mode +# +# See this wiki page to learn about the fit and fill options. +# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F +crop_mode="normal" + +# Crop offset +# Note: Only affects 'normal' crop mode. +# +# Default: 'center' +# Values: 'northwest', 'north', 'northeast', 'west', 'center' +# 'east', 'southwest', 'south', 'southeast' +# Flag: --crop_offset +crop_offset="center" + +# Image size +# The image is half the terminal width by default. +# +# Default: 'auto' +# Values: 'auto', '00px', '00%', 'none' +# Flags: --image_size +# --size +image_size="auto" + +# Catimg block size. +# Control the resolution of catimg. +# +# Default: '2' +# Values: '1', '2' +# Flags: --catimg_size +catimg_size="2" + +# Gap between image and text +# +# Default: '3' +# Values: 'num', '-num' +# Flag: --gap +gap=3 + +# Image offsets +# Only works with the w3m backend. +# +# Default: '0' +# Values: 'px' +# Flags: --xoffset +# --yoffset +yoffset=0 +xoffset=0 + +# Image background color +# Only works with the w3m backend. +# +# Default: '' +# Values: 'color', 'blue' +# Flag: --bg_color +background_color= + + +# Misc Options + +# Stdout mode +# Turn off all colors and disables image backend (ASCII/Image). +# Useful for piping into another command. +# Default: 'off' +# Values: 'on', 'off' +stdout="off" +EOF + +# DETECT INFORMATION + +get_os() { + # $kernel_name is set in a function called cache_uname and is + # just the output of "uname -s". + case $kernel_name in + Darwin) os=$darwin_name ;; + SunOS) os=Solaris ;; + Haiku) os=Haiku ;; + MINIX) os=MINIX ;; + AIX) os=AIX ;; + IRIX*) os=IRIX ;; + FreeMiNT) os=FreeMiNT ;; + + Linux|GNU*) + os=Linux + ;; + + *BSD|DragonFly|Bitrig) + os=BSD + ;; + + CYGWIN*|MSYS*|MINGW*) + os=Windows + ;; + + *) + printf '%s\n' "Unknown OS detected: '$kernel_name', aborting..." >&2 + printf '%s\n' "Open an issue on GitHub to add support for your OS." >&2 + exit 1 + ;; + esac +} + +get_distro() { + [[ $distro ]] && return + + case $os in + Linux|BSD|MINIX) + if [[ -f /bedrock/etc/bedrock-release && -z $BEDROCK_RESTRICT ]]; then + case $distro_shorthand in + on|tiny) distro="Bedrock Linux" ;; + *) distro=$(< /bedrock/etc/bedrock-release) + esac + + elif [[ -f /etc/redstar-release ]]; then + case $distro_shorthand in + on|tiny) distro="Red Star OS" ;; + *) distro="Red Star OS $(awk -F'[^0-9*]' '$0=$2' /etc/redstar-release)" + esac + + elif [[ -f /etc/armbian-release ]]; then + . /etc/armbian-release + distro="Armbian $DISTRIBUTION_CODENAME (${VERSION:-})" + + elif [[ -f /etc/siduction-version ]]; then + case $distro_shorthand in + on|tiny) distro=Siduction ;; + *) distro="Siduction ($(lsb_release -sic))" + esac + + elif [[ -f /etc/mcst_version ]]; then + case $distro_shorthand in + on|tiny) distro="OS Elbrus" ;; + *) distro="OS Elbrus $(< /etc/mcst_version)" + esac + + elif type -p pveversion >/dev/null; then + case $distro_shorthand in + on|tiny) distro="Proxmox VE" ;; + *) + distro=$(pveversion) + distro=${distro#pve-manager/} + distro="Proxmox VE ${distro%/*}" + esac + + elif type -p lsb_release >/dev/null; then + case $distro_shorthand in + on) lsb_flags=-si ;; + tiny) lsb_flags=-si ;; + *) lsb_flags=-sd ;; + esac + distro=$(lsb_release "$lsb_flags") + + elif [[ -f /etc/os-release || \ + -f /usr/lib/os-release || \ + -f /etc/openwrt_release || \ + -f /etc/lsb-release ]]; then + + # Source the os-release file + for file in /etc/lsb-release /usr/lib/os-release \ + /etc/os-release /etc/openwrt_release; do + source "$file" && break + done + + # Format the distro name. + case $distro_shorthand in + on) distro="${NAME:-${DISTRIB_ID}} ${VERSION_ID:-${DISTRIB_RELEASE}}" ;; + tiny) distro="${NAME:-${DISTRIB_ID:-${TAILS_PRODUCT_NAME}}}" ;; + off) distro="${PRETTY_NAME:-${DISTRIB_DESCRIPTION}} ${UBUNTU_CODENAME}" ;; + esac + + elif [[ -f /etc/GoboLinuxVersion ]]; then + case $distro_shorthand in + on|tiny) distro=GoboLinux ;; + *) distro="GoboLinux $(< /etc/GoboLinuxVersion)" + esac + + elif [[ -f /etc/SDE-VERSION ]]; then + distro="$(< /etc/SDE-VERSION)" + case $distro_shorthand in + on|tiny) distro="${distro% *}" ;; + esac + + elif type -p crux >/dev/null; then + distro=$(crux) + case $distro_shorthand in + on) distro=${distro//version} ;; + tiny) distro=${distro//version*} + esac + + elif type -p tazpkg >/dev/null; then + distro="SliTaz $(< /etc/slitaz-release)" + + elif type -p kpt >/dev/null && \ + type -p kpm >/dev/null; then + distro=KSLinux + + elif [[ -d /system/app/ && -d /system/priv-app ]]; then + distro="Android $(getprop ro.build.version.release)" + + # Chrome OS doesn't conform to the /etc/*-release standard. + # While the file is a series of variables they can't be sourced + # by the shell since the values aren't quoted. + elif [[ -f /etc/lsb-release && $(< /etc/lsb-release) == *CHROMEOS* ]]; then + distro='Chrome OS' + + elif type -p guix >/dev/null; then + case $distro_shorthand in + on|tiny) distro="Guix System" ;; + *) distro="Guix System $(guix -V | awk 'NR==1{printf $4}')" + esac + + # Display whether using '-current' or '-release' on OpenBSD. + elif [[ $kernel_name = OpenBSD ]] ; then + read -ra kernel_info <<< "$(sysctl -n kern.version)" + distro=${kernel_info[*]:0:2} + + else + for release_file in /etc/*-release; do + distro+=$(< "$release_file") + done + + if [[ -z $distro ]]; then + case $distro_shorthand in + on|tiny) distro=$kernel_name ;; + *) distro="$kernel_name $kernel_version" ;; + esac + + distro=${distro/DragonFly/DragonFlyBSD} + + # Workarounds for some BSD based distros. + [[ -f /etc/pcbsd-lang ]] && distro=PCBSD + [[ -f /etc/trueos-lang ]] && distro=TrueOS + [[ -f /etc/pacbsd-release ]] && distro=PacBSD + [[ -f /etc/hbsd-update.conf ]] && distro=HardenedBSD + fi + fi + + if [[ $(< /proc/version) == *Microsoft* || $kernel_version == *Microsoft* ]]; then + case $distro_shorthand in + on) distro+=" [Windows 10]" ;; + tiny) distro="Windows 10" ;; + *) distro+=" on Windows 10" ;; + esac + + elif [[ $(< /proc/version) == *chrome-bot* || -f /dev/cros_ec ]]; then + [[ $distro != *Chrome* ]] && + case $distro_shorthand in + on) distro+=" [Chrome OS]" ;; + tiny) distro="Chrome OS" ;; + *) distro+=" on Chrome OS" ;; + esac + distro=${distro## on } + fi + + distro=$(trim_quotes "$distro") + distro=${distro/NAME=} + + # Get Ubuntu flavor. + if [[ $distro == "Ubuntu"* ]]; then + case $XDG_CONFIG_DIRS in + *"studio"*) distro=${distro/Ubuntu/Ubuntu Studio} ;; + *"plasma"*) distro=${distro/Ubuntu/Kubuntu} ;; + *"mate"*) distro=${distro/Ubuntu/Ubuntu MATE} ;; + *"xubuntu"*) distro=${distro/Ubuntu/Xubuntu} ;; + *"Lubuntu"*) distro=${distro/Ubuntu/Lubuntu} ;; + *"budgie"*) distro=${distro/Ubuntu/Ubuntu Budgie} ;; + *"cinnamon"*) distro=${distro/Ubuntu/Ubuntu Cinnamon} ;; + esac + fi + ;; + + "Mac OS X"|"macOS") + case $osx_version in + 10.4*) codename="Mac OS X Tiger" ;; + 10.5*) codename="Mac OS X Leopard" ;; + 10.6*) codename="Mac OS X Snow Leopard" ;; + 10.7*) codename="Mac OS X Lion" ;; + 10.8*) codename="OS X Mountain Lion" ;; + 10.9*) codename="OS X Mavericks" ;; + 10.10*) codename="OS X Yosemite" ;; + 10.11*) codename="OS X El Capitan" ;; + 10.12*) codename="macOS Sierra" ;; + 10.13*) codename="macOS High Sierra" ;; + 10.14*) codename="macOS Mojave" ;; + 10.15*) codename="macOS Catalina" ;; + 10.16*) codename="macOS Big Sur" ;; + 11.*) codename="macOS Big Sur" ;; + 12.*) codename="macOS Monterey" ;; + *) codename=macOS ;; + esac + + distro="$codename $osx_version $osx_build" + + case $distro_shorthand in + on) distro=${distro/ ${osx_build}} ;; + + tiny) + case $osx_version in + 10.[4-7]*) distro=${distro/${codename}/Mac OS X} ;; + 10.[8-9]*|10.1[0-1]*) distro=${distro/${codename}/OS X} ;; + 10.1[2-6]*|11.0*) distro=${distro/${codename}/macOS} ;; + esac + distro=${distro/ ${osx_build}} + ;; + esac + ;; + + "iPhone OS") + distro="iOS $osx_version" + + # "uname -m" doesn't print architecture on iOS. + os_arch=off + ;; + + Windows) + distro=$(wmic os get Caption) + distro=${distro/Caption} + distro=${distro/Microsoft } + ;; + + Solaris) + case $distro_shorthand in + on|tiny) distro=$(awk 'NR==1 {print $1,$3}' /etc/release) ;; + *) distro=$(awk 'NR==1 {print $1,$2,$3}' /etc/release) ;; + esac + distro=${distro/\(*} + ;; + + Haiku) + distro=Haiku + ;; + + AIX) + distro="AIX $(oslevel)" + ;; + + IRIX) + distro="IRIX ${kernel_version}" + ;; + + FreeMiNT) + distro=FreeMiNT + ;; + esac + + distro=${distro//Enterprise Server} + + [[ $distro ]] || distro="$os (Unknown)" + + # Get OS architecture. + case $os in + Solaris|AIX|Haiku|IRIX|FreeMiNT) + machine_arch=$(uname -p) + ;; + + *) machine_arch=$kernel_machine ;; + esac + + [[ $os_arch == on ]] && \ + distro+=" $machine_arch" + + [[ ${ascii_distro:-auto} == auto ]] && \ + ascii_distro=$(trim "$distro") +} + +get_model() { + case $os in + Linux) + if [[ -d /system/app/ && -d /system/priv-app ]]; then + model="$(getprop ro.product.brand) $(getprop ro.product.model)" + + elif [[ -f /sys/devices/virtual/dmi/id/board_vendor || + -f /sys/devices/virtual/dmi/id/board_name ]]; then + model=$(< /sys/devices/virtual/dmi/id/board_vendor) + model+=" $(< /sys/devices/virtual/dmi/id/board_name)" + + elif [[ -f /sys/devices/virtual/dmi/id/product_name || + -f /sys/devices/virtual/dmi/id/product_version ]]; then + model=$(< /sys/devices/virtual/dmi/id/product_name) + model+=" $(< /sys/devices/virtual/dmi/id/product_version)" + + elif [[ -f /sys/firmware/devicetree/base/model ]]; then + model=$(< /sys/firmware/devicetree/base/model) + + elif [[ -f /tmp/sysinfo/model ]]; then + model=$(< /tmp/sysinfo/model) + fi + ;; + + "Mac OS X"|"macOS") + if [[ $(kextstat | grep -F -e "FakeSMC" -e "VirtualSMC") != "" ]]; then + model="Hackintosh (SMBIOS: $(sysctl -n hw.model))" + else + model=$(sysctl -n hw.model) + fi + ;; + + "iPhone OS") + case $kernel_machine in + iPad1,1): "iPad" ;; + iPad2,[1-4]): "iPad 2" ;; + iPad3,[1-3]): "iPad 3" ;; + iPad3,[4-6]): "iPad 4" ;; + iPad6,1[12]): "iPad 5" ;; + iPad7,[5-6]): "iPad 6" ;; + iPad7,1[12]): "iPad 7" ;; + iPad11,[67]): "iPad 8" ;; + iPad4,[1-3]): "iPad Air" ;; + iPad5,[3-4]): "iPad Air 2" ;; + iPad11,[3-4]): "iPad Air 3" ;; + iPad13,[1-2]): "iPad Air 4";; + iPad6,[7-8]): "iPad Pro (12.9 Inch)" ;; + iPad6,[3-4]): "iPad Pro (9.7 Inch)" ;; + iPad7,[1-2]): "iPad Pro 2 (12.9 Inch)" ;; + iPad7,[3-4]): "iPad Pro (10.5 Inch)" ;; + iPad8,[1-4]): "iPad Pro (11 Inch)" ;; + iPad8,[5-8]): "iPad Pro 3 (12.9 Inch)" ;; + iPad8,9 | iPad8,10): "iPad Pro 4 (11 Inch)" ;; + iPad8,1[1-2]): "iPad Pro 4 (12.9 Inch)" ;; + iPad2,[5-7]): "iPad mini" ;; + iPad4,[4-6]): "iPad mini 2" ;; + iPad4,[7-9]): "iPad mini 3" ;; + iPad5,[1-2]): "iPad mini 4" ;; + iPad11,[1-2]): "iPad mini 5" ;; + + iPhone1,1): "iPhone" ;; + iPhone1,2): "iPhone 3G" ;; + iPhone2,1): "iPhone 3GS" ;; + iPhone3,[1-3]): "iPhone 4" ;; + iPhone4,1): "iPhone 4S" ;; + iPhone5,[1-2]): "iPhone 5" ;; + iPhone5,[3-4]): "iPhone 5c" ;; + iPhone6,[1-2]): "iPhone 5s" ;; + iPhone7,2): "iPhone 6" ;; + iPhone7,1): "iPhone 6 Plus" ;; + iPhone8,1): "iPhone 6s" ;; + iPhone8,2): "iPhone 6s Plus" ;; + iPhone8,4): "iPhone SE" ;; + iPhone9,[13]): "iPhone 7" ;; + iPhone9,[24]): "iPhone 7 Plus" ;; + iPhone10,[14]): "iPhone 8" ;; + iPhone10,[25]): "iPhone 8 Plus" ;; + iPhone10,[36]): "iPhone X" ;; + iPhone11,2): "iPhone XS" ;; + iPhone11,[46]): "iPhone XS Max" ;; + iPhone11,8): "iPhone XR" ;; + iPhone12,1): "iPhone 11" ;; + iPhone12,3): "iPhone 11 Pro" ;; + iPhone12,5): "iPhone 11 Pro Max" ;; + iPhone12,8): "iPhone SE 2020" ;; + iPhone13,1): "iPhone 12 Mini" ;; + iPhone13,2): "iPhone 12" ;; + iPhone13,3): "iPhone 12 Pro" ;; + iPhone13,4): "iPhone 12 Pro Max" ;; + + iPod1,1): "iPod touch" ;; + ipod2,1): "iPod touch 2G" ;; + ipod3,1): "iPod touch 3G" ;; + ipod4,1): "iPod touch 4G" ;; + ipod5,1): "iPod touch 5G" ;; + ipod7,1): "iPod touch 6G" ;; + iPod9,1): "iPod touch 7G" ;; + esac + + model=$_ + ;; + + BSD|MINIX) + model=$(sysctl -n hw.vendor hw.product) + ;; + + Windows) + model=$(wmic computersystem get manufacturer,model) + model=${model/Manufacturer} + model=${model/Model} + ;; + + Solaris) + model=$(prtconf -b | awk -F':' '/banner-name/ {printf $2}') + ;; + + AIX) + model=$(/usr/bin/uname -M) + ;; + + FreeMiNT) + model=$(sysctl -n hw.model) + model=${model/ (_MCH *)} + ;; + esac + + # Remove dummy OEM info. + model=${model//To be filled by O.E.M.} + model=${model//To Be Filled*} + model=${model//OEM*} + model=${model//Not Applicable} + model=${model//System Product Name} + model=${model//System Version} + model=${model//Undefined} + model=${model//Default string} + model=${model//Not Specified} + model=${model//Type1ProductConfigId} + model=${model//INVALID} + model=${model//All Series} + model=${model//�} + + case $model in + "Standard PC"*) model="KVM/QEMU (${model})" ;; + OpenBSD*) model="vmm ($model)" ;; + esac +} + +get_title() { + user=${USER:-$(id -un || printf %s "${HOME/*\/}")} + + case $title_fqdn in + on) hostname=$(hostname -f) ;; + *) hostname=${HOSTNAME:-$(hostname)} ;; + esac + + title=${title_color}${bold}${user}${at_color}@${title_color}${bold}${hostname} + length=$((${#user} + ${#hostname} + 1)) +} + +get_kernel() { + # Since these OS are integrated systems, it's better to skip this function altogether + [[ $os =~ (AIX|IRIX) ]] && return + + # Haiku uses 'uname -v' and not - 'uname -r'. + [[ $os == Haiku ]] && { + kernel=$(uname -v) + return + } + + # In Windows 'uname' may return the info of GNUenv thus use wmic for OS kernel. + [[ $os == Windows ]] && { + kernel=$(wmic os get Version) + kernel=${kernel/Version} + return + } + + case $kernel_shorthand in + on) kernel=$kernel_version ;; + off) kernel="$kernel_name $kernel_version" ;; + esac + + # Hide kernel info if it's identical to the distro info. + [[ $os =~ (BSD|MINIX) && $distro == *"$kernel_name"* ]] && + case $distro_shorthand in + on|tiny) kernel=$kernel_version ;; + *) unset kernel ;; + esac +} + +get_uptime() { + # Get uptime in seconds. + case $os in + Linux|Windows|MINIX) + if [[ -r /proc/uptime ]]; then + s=$(< /proc/uptime) + s=${s/.*} + else + boot=$(date -d"$(uptime -s)" +%s) + now=$(date +%s) + s=$((now - boot)) + fi + ;; + + "Mac OS X"|"macOS"|"iPhone OS"|BSD|FreeMiNT) + boot=$(sysctl -n kern.boottime) + boot=${boot/\{ sec = } + boot=${boot/,*} + + # Get current date in seconds. + now=$(date +%s) + s=$((now - boot)) + ;; + + Solaris) + s=$(kstat -p unix:0:system_misc:snaptime | awk '{print $2}') + s=${s/.*} + ;; + + AIX|IRIX) + t=$(LC_ALL=POSIX ps -o etime= -p 1) + + [[ $t == *-* ]] && { d=${t%%-*}; t=${t#*-}; } + [[ $t == *:*:* ]] && { h=${t%%:*}; t=${t#*:}; } + + h=${h#0} + t=${t#0} + + s=$((${d:-0}*86400 + ${h:-0}*3600 + ${t%%:*}*60 + ${t#*:})) + ;; + + Haiku) + s=$(($(system_time) / 1000000)) + ;; + esac + + d="$((s / 60 / 60 / 24)) days" + h="$((s / 60 / 60 % 24)) hours" + m="$((s / 60 % 60)) minutes" + + # Remove plural if < 2. + ((${d/ *} == 1)) && d=${d/s} + ((${h/ *} == 1)) && h=${h/s} + ((${m/ *} == 1)) && m=${m/s} + + # Hide empty fields. + ((${d/ *} == 0)) && unset d + ((${h/ *} == 0)) && unset h + ((${m/ *} == 0)) && unset m + + uptime=${d:+$d, }${h:+$h, }$m + uptime=${uptime%', '} + uptime=${uptime:-$s seconds} + + # Make the output of uptime smaller. + case $uptime_shorthand in + on) + uptime=${uptime/ minutes/ mins} + uptime=${uptime/ minute/ min} + uptime=${uptime/ seconds/ secs} + ;; + + tiny) + uptime=${uptime/ days/d} + uptime=${uptime/ day/d} + uptime=${uptime/ hours/h} + uptime=${uptime/ hour/h} + uptime=${uptime/ minutes/m} + uptime=${uptime/ minute/m} + uptime=${uptime/ seconds/s} + uptime=${uptime//,} + ;; + esac +} + +get_packages() { + # to adjust the number of pkgs per pkg manager + pkgs_h=0 + + # has: Check if package manager installed. + # dir: Count files or dirs in a glob. + # pac: If packages > 0, log package manager name. + # tot: Count lines in command output. + has() { type -p "$1" >/dev/null && manager=$1; } + # globbing is intentional here + # shellcheck disable=SC2206 + dir() { pkgs=($@); ((packages+=${#pkgs[@]})); pac "$((${#pkgs[@]}-pkgs_h))"; } + pac() { (($1 > 0)) && { managers+=("$1 (${manager})"); manager_string+="${manager}, "; }; } + tot() { + IFS=$'\n' read -d "" -ra pkgs <<< "$("$@")"; + ((packages+=${#pkgs[@]})); + pac "$((${#pkgs[@]}-pkgs_h))"; + } + + # Redefine tot() and dir() for Bedrock Linux. + [[ -f /bedrock/etc/bedrock-release && $PATH == */bedrock/cross/* ]] && { + br_strata=$(brl list) + tot() { + IFS=$'\n' read -d "" -ra pkgs <<< "$(for s in ${br_strata}; do strat -r "$s" "$@"; done)" + ((packages+="${#pkgs[@]}")) + pac "$((${#pkgs[@]}-pkgs_h))"; + } + dir() { + local pkgs=() + # globbing is intentional here + # shellcheck disable=SC2206 + for s in ${br_strata}; do pkgs+=(/bedrock/strata/$s/$@); done + ((packages+=${#pkgs[@]})) + pac "$((${#pkgs[@]}-pkgs_h))" + } + } + + case $os in + Linux|BSD|"iPhone OS"|Solaris) + # Package Manager Programs. + has kiss && tot kiss l + has cpt-list && tot cpt-list + has pacman-key && tot pacman -Qq --color never + has bottle-key && tot bottle -Qq --color never + has dpkg && tot dpkg-query -f '.\n' -W + has xbps-query && tot xbps-query -l + has apk && tot apk info + has opkg && tot opkg list-installed + has pacman-g2 && tot pacman-g2 -Q + has lvu && tot lvu installed + has tce-status && tot tce-status -i + has pkg_info && tot pkg_info + has pkgin && tot pkgin list + has tazpkg && pkgs_h=6 tot tazpkg list && ((packages-=6)) + has sorcery && tot gaze installed + has alps && tot alps showinstalled + has butch && tot butch list + has swupd && tot swupd bundle-list --quiet + has pisi && tot pisi li + + # Using the dnf package cache is much faster than rpm. + if has dnf && type -p sqlite3 >/dev/null && [[ -f /var/cache/dnf/packages.db ]]; then + pac "$(sqlite3 /var/cache/dnf/packages.db "SELECT count(pkg) FROM installed")" + else + has rpm && tot rpm -qa + fi + + # 'mine' conflicts with minesweeper games. + [[ -f /etc/SDE-VERSION ]] && + has mine && tot mine -q + + # Counting files/dirs. + # Variables need to be unquoted here. Only Bedrock Linux is affected. + # $br_prefix is fixed and won't change based on user input so this is safe either way. + # shellcheck disable=SC2086 + { + shopt -s nullglob + has brew && dir "$(brew --cellar)/* $(brew --caskroom)/*" + has emerge && dir "/var/db/pkg/*/*" + has Compile && dir "/Programs/*/" + has eopkg && dir "/var/lib/eopkg/package/*" + has crew && dir "${CREW_PREFIX:-/usr/local}/etc/crew/meta/*.filelist" + has pkgtool && dir "/var/log/packages/*" + has scratch && dir "/var/lib/scratchpkg/index/*/.pkginfo" + has kagami && dir "/var/lib/kagami/pkgs/*" + has cave && dir "/var/db/paludis/repositories/cross-installed/*/data/*/ \ + /var/db/paludis/repositories/installed/data/*/" + shopt -u nullglob + } + + # Other (Needs complex command) + has kpm-pkg && ((packages+=$(kpm --get-selections | grep -cv deinstall$))) + + has guix && { + manager=guix-system && tot guix package -p "/run/current-system/profile" -I + manager=guix-user && tot guix package -I + } + + has nix-store && { + nix-user-pkgs() { + nix-store -qR ~/.nix-profile + nix-store -qR /etc/profiles/per-user/"$USER" + } + manager=nix-system && tot nix-store -qR /run/current-system/sw + manager=nix-user && tot nix-user-pkgs + manager=nix-default && tot nix-store -qR /nix/var/nix/profiles/default + } + + # pkginfo is also the name of a python package manager which is painfully slow. + # TODO: Fix this somehow. + has pkginfo && tot pkginfo -i + + case $os-$kernel_name in + BSD-FreeBSD|BSD-DragonFly) + has pkg && tot pkg info + ;; + + BSD-*) + has pkg && dir /var/db/pkg/* + + ((packages == 0)) && + has pkg && tot pkg list + ;; + esac + + # List these last as they accompany regular package managers. + has flatpak && tot flatpak list + has spm && tot spm list -i + has puyo && dir ~/.puyo/installed + + # Snap hangs if the command is run without the daemon running. + # Only run snap if the daemon is also running. + has snap && ps -e | grep -qFm 1 snapd >/dev/null && \ + pkgs_h=1 tot snap list && ((packages-=1)) + + # This is the only standard location for appimages. + # See: https://github.com/AppImage/AppImageKit/wiki + manager=appimage && has appimaged && dir ~/.local/bin/*.appimage + ;; + + "Mac OS X"|"macOS"|MINIX) + has port && pkgs_h=1 tot port installed && ((packages-=1)) + has brew && dir "$(brew --cellar)/* $(brew --caskroom)/*" + has pkgin && tot pkgin list + has dpkg && tot dpkg-query -f '.\n' -W + + has nix-store && { + nix-user-pkgs() { + nix-store -qR ~/.nix-profile + nix-store -qR /etc/profiles/per-user/"$USER" + } + manager=nix-system && tot nix-store -qR /run/current-system/sw + manager=nix-user && tot nix-user-pkgs + } + ;; + + AIX|FreeMiNT) + has lslpp && ((packages+=$(lslpp -J -l -q | grep -cv '^#'))) + has rpm && tot rpm -qa + ;; + + Windows) + case $kernel_name in + CYGWIN*) has cygcheck && tot cygcheck -cd ;; + MSYS*) has pacman && tot pacman -Qq --color never ;; + MSYS*) has bottle && tot bottle -Qq --color never ;; + esac + + # Scoop environment throws errors if `tot scoop list` is used + has scoop && pkgs_h=1 dir ~/scoop/apps/* && ((packages-=1)) + + # Count chocolatey packages. + [[ -d /cygdrive/c/ProgramData/chocolatey/lib ]] && \ + dir /cygdrive/c/ProgramData/chocolatey/lib/* + ;; + + Haiku) + has pkgman && dir /boot/system/package-links/* + packages=${packages/pkgman/depot} + ;; + + IRIX) + manager=swpkg + pkgs_h=3 tot versions -b && ((packages-=3)) + ;; + esac + + if ((packages == 0)); then + unset packages + + elif [[ $package_managers == on ]]; then + printf -v packages '%s, ' "${managers[@]}" + packages=${packages%,*} + + elif [[ $package_managers == tiny ]]; then + packages+=" (${manager_string%,*})" + fi + + packages=${packages/pacman-key/pacman} +} + +get_shell() { + case $shell_path in + on) shell="$SHELL " ;; + off) shell="${SHELL##*/} " ;; + esac + + [[ $shell_version != on ]] && return + + case ${shell_name:=${SHELL##*/}} in + bash) + [[ $BASH_VERSION ]] || + BASH_VERSION=$("$SHELL" -c "printf %s \"\$BASH_VERSION\"") + + shell+=${BASH_VERSION/-*} + ;; + + sh|ash|dash|es) ;; + + *ksh) + shell+=$("$SHELL" -c "printf %s \"\$KSH_VERSION\"") + shell=${shell/ * KSH} + shell=${shell/version} + ;; + + osh) + if [[ $OIL_VERSION ]]; then + shell+=$OIL_VERSION + else + shell+=$("$SHELL" -c "printf %s \"\$OIL_VERSION\"") + fi + ;; + + tcsh) + shell+=$("$SHELL" -c "printf %s \$tcsh") + ;; + + yash) + shell+=$("$SHELL" --version 2>&1) + shell=${shell/ $shell_name} + shell=${shell/ Yet another shell} + shell=${shell/Copyright*} + ;; + + nu) + shell+=$("$SHELL" -c "version | get version") + shell=${shell/ $shell_name} + ;; + + + *) + shell+=$("$SHELL" --version 2>&1) + shell=${shell/ $shell_name} + ;; + esac + + # Remove unwanted info. + shell=${shell/, version} + shell=${shell/xonsh\//xonsh } + shell=${shell/options*} + shell=${shell/\(*\)} +} + +get_de() { + # If function was run, stop here. + ((de_run == 1)) && return + + case $os in + "Mac OS X"|"macOS") de=Aqua ;; + + Windows) + case $distro in + *"Windows 10"*) + de=Fluent + ;; + + *"Windows 8"*) + de=Metro + ;; + + *) + de=Aero + ;; + esac + ;; + + FreeMiNT) + freemint_wm=(/proc/*) + + case ${freemint_wm[*]} in + *thing*) de=Thing ;; + *jinnee*) de=Jinnee ;; + *tera*) de=Teradesk ;; + *neod*) de=NeoDesk ;; + *zdesk*) de=zDesk ;; + *mdesk*) de=mDesk ;; + esac + ;; + + *) + ((wm_run != 1)) && get_wm + + # Temporary support for Regolith Linux + if [[ $DESKTOP_SESSION == *regolith ]]; then + de=Regolith + + elif [[ $XDG_CURRENT_DESKTOP ]]; then + de=${XDG_CURRENT_DESKTOP/X\-} + de=${de/Budgie:GNOME/Budgie} + de=${de/:Unity7:ubuntu} + + elif [[ $DESKTOP_SESSION ]]; then + de=${DESKTOP_SESSION##*/} + + elif [[ $GNOME_DESKTOP_SESSION_ID ]]; then + de=GNOME + + elif [[ $MATE_DESKTOP_SESSION_ID ]]; then + de=MATE + + elif [[ $TDE_FULL_SESSION ]]; then + de=Trinity + fi + + # When a window manager is started from a display manager + # the desktop variables are sometimes also set to the + # window manager name. This checks to see if WM == DE + # and discards the DE value. + [[ $de == "$wm" ]] && { unset -v de; return; } + ;; + esac + + # Fallback to using xprop. + [[ $DISPLAY && -z $de ]] && type -p xprop &>/dev/null && \ + de=$(xprop -root | awk '/KDE_SESSION_VERSION|^_MUFFIN|xfce4|xfce5/') + + # Format strings. + case $de in + KDE_SESSION_VERSION*) de=KDE${de/* = } ;; + *xfce4*) de=Xfce4 ;; + *xfce5*) de=Xfce5 ;; + *xfce*) de=Xfce ;; + *mate*) de=MATE ;; + *GNOME*) de=GNOME ;; + *MUFFIN*) de=Cinnamon ;; + esac + + ((${KDE_SESSION_VERSION:-0} >= 4)) && de=${de/KDE/Plasma} + + if [[ $de_version == on && $de ]]; then + case $de in + Plasma*) de_ver=$(plasmashell --version) ;; + MATE*) de_ver=$(mate-session --version) ;; + Xfce*) de_ver=$(xfce4-session --version) ;; + GNOME*) de_ver=$(gnome-shell --version) ;; + Cinnamon*) de_ver=$(cinnamon --version) ;; + Deepin*) de_ver=$(awk -F'=' '/MajorVersion/ {print $2}' /etc/os-version) ;; + Budgie*) de_ver=$(budgie-desktop --version) ;; + LXQt*) de_ver=$(lxqt-session --version) ;; + Lumina*) de_ver=$(lumina-desktop --version 2>&1) ;; + Trinity*) de_ver=$(tde-config --version) ;; + Unity*) de_ver=$(unity --version) ;; + esac + + de_ver=${de_ver/*TDE:} + de_ver=${de_ver/tde-config*} + de_ver=${de_ver/liblxqt*} + de_ver=${de_ver/Copyright*} + de_ver=${de_ver/)*} + de_ver=${de_ver/* } + de_ver=${de_ver//\"} + + de+=" $de_ver" + fi + + # TODO: + # - New config option + flag: --de_display_server on/off ? + # - Add display of X11, Arcan and anything else relevant. + [[ $de && $WAYLAND_DISPLAY ]] && + de+=" (Wayland)" + + de_run=1 +} + +get_wm() { + # If function was run, stop here. + ((wm_run == 1)) && return + + case $kernel_name in + *OpenBSD*) ps_flags=(x -c) ;; + *) ps_flags=(-e) ;; + esac + + if [[ -O "${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY:-wayland-0}" ]]; then + if tmp_pid="$(lsof -t "${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY:-wayland-0}" 2>&1)" || + tmp_pid="$(fuser "${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY:-wayland-0}" 2>&1)"; then + wm="$(ps -p "${tmp_pid}" -ho comm=)" + else + # lsof may not exist, or may need root on some systems. Similarly fuser. + # On those systems we search for a list of known window managers, this can mistakenly + # match processes for another user or session and will miss unlisted window managers. + wm=$(ps "${ps_flags[@]}" | grep -m 1 -o -F \ + -e arcan \ + -e asc \ + -e clayland \ + -e dwc \ + -e fireplace \ + -e gnome-shell \ + -e greenfield \ + -e grefsen \ + -e hikari \ + -e kwin \ + -e lipstick \ + -e maynard \ + -e mazecompositor \ + -e motorcar \ + -e orbital \ + -e orbment \ + -e perceptia \ + -e river \ + -e rustland \ + -e sway \ + -e ulubis \ + -e velox \ + -e wavy \ + -e way-cooler \ + -e wayfire \ + -e wayhouse \ + -e westeros \ + -e westford \ + -e weston) + fi + + elif [[ $DISPLAY && $os != "Mac OS X" && $os != "macOS" && $os != FreeMiNT ]]; then + # non-EWMH WMs. + wm=$(ps "${ps_flags[@]}" | grep -m 1 -o \ + -e "[s]owm" \ + -e "[c]atwm" \ + -e "[f]vwm" \ + -e "[d]wm" \ + -e "[2]bwm" \ + -e "[m]onsterwm" \ + -e "[t]inywm" \ + -e "[x]11fs" \ + -e "[x]monad") + + [[ -z $wm ]] && type -p xprop &>/dev/null && { + id=$(xprop -root -notype _NET_SUPPORTING_WM_CHECK) + id=${id##* } + wm=$(xprop -id "$id" -notype -len 100 -f _NET_WM_NAME 8t) + wm=${wm/*WM_NAME = } + wm=${wm/\"} + wm=${wm/\"*} + } + + else + case $os in + "Mac OS X"|"macOS") + ps_line=$(ps -e | grep -o \ + -e "[S]pectacle" \ + -e "[A]methyst" \ + -e "[k]wm" \ + -e "[c]hun[k]wm" \ + -e "[y]abai" \ + -e "[R]ectangle") + + case $ps_line in + *chunkwm*) wm=chunkwm ;; + *kwm*) wm=Kwm ;; + *yabai*) wm=yabai ;; + *Amethyst*) wm=Amethyst ;; + *Spectacle*) wm=Spectacle ;; + *Rectangle*) wm=Rectangle ;; + *) wm="Quartz Compositor" ;; + esac + ;; + + Windows) + wm=$( + tasklist | + + grep -Fom 1 \ + -e bugn \ + -e Windawesome \ + -e blackbox \ + -e emerge \ + -e litestep + ) + + [[ $wm == blackbox ]] && + wm="bbLean (Blackbox)" + + wm=${wm:+$wm, }DWM.exe + ;; + + FreeMiNT) + freemint_wm=(/proc/*) + + case ${freemint_wm[*]} in + *xaaes* | *xaloader*) wm=XaAES ;; + *myaes*) wm=MyAES ;; + *naes*) wm=N.AES ;; + geneva) wm=Geneva ;; + *) wm="Atari AES" ;; + esac + ;; + esac + fi + + # Rename window managers to their proper values. + [[ $wm == *WINDOWMAKER* ]] && wm=wmaker + [[ $wm == *GNOME*Shell* ]] && wm=Mutter + + wm_run=1 +} + +get_wm_theme() { + ((wm_run != 1)) && get_wm + ((de_run != 1)) && get_de + + case $wm in + E16) + wm_theme=$(awk -F "= " '/theme.name/ {print $2}' "${HOME}/.e16/e_config--0.0.cfg") + ;; + + Sawfish) + wm_theme=$(awk -F '\\(quote|\\)' '/default-frame-style/ {print $(NF-4)}' \ + "$HOME/.sawfish/custom") + ;; + + Cinnamon|Muffin|"Mutter (Muffin)") + detheme=$(gsettings get org.cinnamon.theme name) + wm_theme=$(gsettings get org.cinnamon.desktop.wm.preferences theme) + wm_theme="$detheme ($wm_theme)" + ;; + + Compiz|Mutter|Gala) + if type -p gsettings >/dev/null; then + wm_theme=$(gsettings get org.gnome.shell.extensions.user-theme name) + + [[ ${wm_theme//\'} ]] || \ + wm_theme=$(gsettings get org.gnome.desktop.wm.preferences theme) + + elif type -p gconftool-2 >/dev/null; then + wm_theme=$(gconftool-2 -g /apps/metacity/general/theme) + fi + ;; + + Metacity*) + if [[ $de == Deepin ]]; then + wm_theme=$(gsettings get com.deepin.wrap.gnome.desktop.wm.preferences theme) + + elif [[ $de == MATE ]]; then + wm_theme=$(gsettings get org.mate.Marco.general theme) + + else + wm_theme=$(gconftool-2 -g /apps/metacity/general/theme) + fi + ;; + + E17|Enlightenment) + if type -p eet >/dev/null; then + wm_theme=$(eet -d "$HOME/.e/e/config/standard/e.cfg" config |\ + awk '/value \"file\" string.*.edj/ {print $4}') + wm_theme=${wm_theme##*/} + wm_theme=${wm_theme%.*} + fi + ;; + + Fluxbox) + [[ -f $HOME/.fluxbox/init ]] && + wm_theme=$(awk -F "/" '/styleFile/ {print $NF}' "$HOME/.fluxbox/init") + ;; + + IceWM*) + [[ -f $HOME/.icewm/theme ]] && + wm_theme=$(awk -F "[\",/]" '!/#/ {print $2}' "$HOME/.icewm/theme") + ;; + + Openbox) + case $de in + LXDE*) ob_file=lxde-rc ;; + LXQt*) ob_file=lxqt-rc ;; + *) ob_file=rc ;; + esac + + ob_file=$XDG_CONFIG_HOME/openbox/$ob_file.xml + + [[ -f $ob_file ]] && + wm_theme=$(awk '// {while (getline n) {if (match(n, //)) + {l=n; exit}}} END {split(l, a, "[<>]"); print a[3]}' "$ob_file") + ;; + + PekWM) + [[ -f $HOME/.pekwm/config ]] && + wm_theme=$(awk -F "/" '/Theme/{gsub(/\"/,""); print $NF}' "$HOME/.pekwm/config") + ;; + + Xfwm4) + [[ -f $HOME/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml ]] && + wm_theme=$(xfconf-query -c xfwm4 -p /general/theme) + ;; + + KWin*) + kde_config_dir + kwinrc=$kde_config_dir/kwinrc + kdebugrc=$kde_config_dir/kdebugrc + + if [[ -f $kwinrc ]]; then + wm_theme=$(awk '/theme=/ { + gsub(/theme=.*qml_|theme=.*svg__/,"",$0); + print $0; + exit + }' "$kwinrc") + + [[ "$wm_theme" ]] || + wm_theme=$(awk '/library=org.kde/ { + gsub(/library=org.kde./,"",$0); + print $0; + exit + }' "$kwinrc") + + [[ $wm_theme ]] || + wm_theme=$(awk '/PluginLib=kwin3_/ { + gsub(/PluginLib=kwin3_/,"",$0); + print $0; + exit + }' "$kwinrc") + + elif [[ -f $kdebugrc ]]; then + wm_theme=$(awk '/(decoration)/ {gsub(/\[/,"",$1); print $1; exit}' "$kdebugrc") + fi + + wm_theme=${wm_theme/theme=} + ;; + + "Quartz Compositor") + global_preferences=$HOME/Library/Preferences/.GlobalPreferences.plist + wm_theme=$(PlistBuddy -c "Print AppleInterfaceStyle" "$global_preferences") + wm_theme_color=$(PlistBuddy -c "Print AppleAccentColor" "$global_preferences") + + [[ "$wm_theme" ]] || + wm_theme=Light + + case $wm_theme_color in + -1) wm_theme_color=Graphite ;; + 0) wm_theme_color=Red ;; + 1) wm_theme_color=Orange ;; + 2) wm_theme_color=Yellow ;; + 3) wm_theme_color=Green ;; + 5) wm_theme_color=Purple ;; + 6) wm_theme_color=Pink ;; + *) wm_theme_color=Blue ;; + esac + + wm_theme="$wm_theme_color ($wm_theme)" + ;; + + *Explorer) + path=/proc/registry/HKEY_CURRENT_USER/Software/Microsoft + path+=/Windows/CurrentVersion/Themes/CurrentTheme + + wm_theme=$(head -n1 "$path") + wm_theme=${wm_theme##*\\} + wm_theme=${wm_theme%.*} + ;; + + Blackbox|bbLean*) + path=$(wmic process get ExecutablePath | grep -F "blackbox") + path=${path//\\/\/} + + wm_theme=$(grep '^session\.styleFile:' "${path/\.exe/.rc}") + wm_theme=${wm_theme/session\.styleFile: } + wm_theme=${wm_theme##*\\} + wm_theme=${wm_theme%.*} + ;; + esac + + wm_theme=$(trim_quotes "$wm_theme") +} + +get_cpu() { + case $os in + "Linux" | "MINIX" | "Windows") + # Get CPU name. + cpu_file="/proc/cpuinfo" + + case $kernel_machine in + "frv" | "hppa" | "m68k" | "openrisc" | "or"* | "powerpc" | "ppc"* | "sparc"*) + cpu="$(awk -F':' '/^cpu\t|^CPU/ {printf $2; exit}' "$cpu_file")" + ;; + + "s390"*) + cpu="$(awk -F'=' '/machine/ {print $4; exit}' "$cpu_file")" + ;; + + "ia64" | "m32r") + cpu="$(awk -F':' '/model/ {print $2; exit}' "$cpu_file")" + [[ -z "$cpu" ]] && cpu="$(awk -F':' '/family/ {printf $2; exit}' "$cpu_file")" + ;; + + *) + cpu="$(awk -F '\\s*: | @' \ + '/model name|Hardware|Processor|^cpu model|chip type|^cpu type/ { + cpu=$2; if ($1 == "Hardware") exit } END { print cpu }' "$cpu_file")" + ;; + esac + + speed_dir="/sys/devices/system/cpu/cpu0/cpufreq" + + # Select the right temperature file. + for temp_dir in /sys/class/hwmon/*; do + [[ "$(< "${temp_dir}/name")" =~ (cpu_thermal|coretemp|fam15h_power|k10temp) ]] && { + temp_dirs=("$temp_dir"/temp*_input) + temp_dir=${temp_dirs[0]} + break + } + done + + # Get CPU speed. + if [[ -d "$speed_dir" ]]; then + # Fallback to bios_limit if $speed_type fails. + speed="$(< "${speed_dir}/${speed_type}")" ||\ + speed="$(< "${speed_dir}/bios_limit")" ||\ + speed="$(< "${speed_dir}/scaling_max_freq")" ||\ + speed="$(< "${speed_dir}/cpuinfo_max_freq")" + speed="$((speed / 1000))" + + else + case $kernel_machine in + "sparc"*) + # SPARC systems use a different file to expose clock speed information. + speed_file="/sys/devices/system/cpu/cpu0/clock_tick" + speed="$(($(< "$speed_file") / 1000000))" + ;; + + *) + speed="$(awk -F ': |\\.' '/cpu MHz|^clock/ {printf $2; exit}' "$cpu_file")" + speed="${speed/MHz}" + ;; + esac + fi + + # Get CPU temp. + [[ -f "$temp_dir" ]] && deg="$(($(< "$temp_dir") * 100 / 10000))" + + # Get CPU cores. + case $kernel_machine in + "sparc"*) + case $cpu_cores in + # SPARC systems doesn't expose detailed topology information in + # /proc/cpuinfo so I have to use lscpu here. + "logical" | "on") + cores="$(lscpu | awk -F ': *' '/^CPU\(s\)/ {print $2}')" + ;; + "physical") + cores="$(lscpu | awk -F ': *' '/^Core\(s\) per socket/ {print $2}')" + sockets="$(lscpu | awk -F ': *' '/^Socket\(s\)/ {print $2}')" + cores="$((sockets * cores))" + ;; + esac + ;; + + *) + case $cpu_cores in + "logical" | "on") + cores="$(grep -c "^processor" "$cpu_file")" + ;; + "physical") + cores="$(awk '/^core id/&&!a[$0]++{++i} END {print i}' "$cpu_file")" + ;; + esac + ;; + esac + ;; + + "Mac OS X"|"macOS") + cpu="$(sysctl -n machdep.cpu.brand_string)" + + # Get CPU cores. + case $cpu_cores in + "logical" | "on") cores="$(sysctl -n hw.logicalcpu_max)" ;; + "physical") cores="$(sysctl -n hw.physicalcpu_max)" ;; + esac + ;; + + "iPhone OS") + case $kernel_machine in + "iPhone1,"[1-2] | "iPod1,1"): "Samsung S5L8900 (1) @ 412MHz" ;; + "iPhone2,1"): "Samsung S5PC100 (1) @ 600MHz" ;; + "iPhone3,"[1-3] | "iPod4,1"): "Apple A4 (1) @ 800MHz" ;; + "iPhone4,1" | "iPod5,1"): "Apple A5 (2) @ 800MHz" ;; + "iPhone5,"[1-4]): "Apple A6 (2) @ 1.3GHz" ;; + "iPhone6,"[1-2]): "Apple A7 (2) @ 1.3GHz" ;; + "iPhone7,"[1-2]): "Apple A8 (2) @ 1.4GHz" ;; + "iPhone8,"[1-4] | "iPad6,1"[12]): "Apple A9 (2) @ 1.85GHz" ;; + "iPhone9,"[1-4] | "iPad7,"[5-6] | "iPad7,1"[1-2]): + "Apple A10 Fusion (4) @ 2.34GHz" + ;; + "iPhone10,"[1-6]): "Apple A11 Bionic (6) @ 2.39GHz" ;; + "iPhone11,"[2468] | "iPad11,"[1-4] | "iPad11,"[6-7]): "Apple A12 Bionic (6) @ 2.49GHz" ;; + "iPhone12,"[1358]): "Apple A13 Bionic (6) @ 2.65GHz" ;; + "iPhone13,"[1-4] | "iPad13,"[1-2]): "Apple A14 Bionic (6) @ 3.00Ghz" ;; + + "iPod2,1"): "Samsung S5L8720 (1) @ 533MHz" ;; + "iPod3,1"): "Samsung S5L8922 (1) @ 600MHz" ;; + "iPod7,1"): "Apple A8 (2) @ 1.1GHz" ;; + "iPad1,1"): "Apple A4 (1) @ 1GHz" ;; + "iPad2,"[1-7]): "Apple A5 (2) @ 1GHz" ;; + "iPad3,"[1-3]): "Apple A5X (2) @ 1GHz" ;; + "iPad3,"[4-6]): "Apple A6X (2) @ 1.4GHz" ;; + "iPad4,"[1-3]): "Apple A7 (2) @ 1.4GHz" ;; + "iPad4,"[4-9]): "Apple A7 (2) @ 1.4GHz" ;; + "iPad5,"[1-2]): "Apple A8 (2) @ 1.5GHz" ;; + "iPad5,"[3-4]): "Apple A8X (3) @ 1.5GHz" ;; + "iPad6,"[3-4]): "Apple A9X (2) @ 2.16GHz" ;; + "iPad6,"[7-8]): "Apple A9X (2) @ 2.26GHz" ;; + "iPad7,"[1-4]): "Apple A10X Fusion (6) @ 2.39GHz" ;; + "iPad8,"[1-8]): "Apple A12X Bionic (8) @ 2.49GHz" ;; + "iPad8,9" | "iPad8,1"[0-2]): "Apple A12Z Bionic (8) @ 2.49GHz" ;; + esac + cpu="$_" + ;; + + "BSD") + # Get CPU name. + cpu="$(sysctl -n hw.model)" + cpu="${cpu/[0-9]\.*}" + cpu="${cpu/ @*}" + + # Get CPU speed. + speed="$(sysctl -n hw.cpuspeed)" + [[ -z "$speed" ]] && speed="$(sysctl -n hw.clockrate)" + + # Get CPU cores. + case $kernel_name in + "OpenBSD"*) + [[ "$(sysctl -n hw.smt)" == "1" ]] && smt="on" || smt="off" + ncpufound="$(sysctl -n hw.ncpufound)" + ncpuonline="$(sysctl -n hw.ncpuonline)" + cores="${ncpuonline}/${ncpufound},\\xc2\\xa0SMT\\xc2\\xa0${smt}" + ;; + *) + cores="$(sysctl -n hw.ncpu)" + ;; + esac + + # Get CPU temp. + case $kernel_name in + "FreeBSD"* | "DragonFly"* | "NetBSD"*) + deg="$(sysctl -n dev.cpu.0.temperature)" + deg="${deg/C}" + ;; + "OpenBSD"* | "Bitrig"*) + deg="$(sysctl hw.sensors | \ + awk -F'=|degC' '/(ksmn|adt|lm|cpu)0.temp0/ {printf("%2.1f", $2); exit}')" + ;; + esac + ;; + + "Solaris") + # Get CPU name. + cpu="$(psrinfo -pv)" + cpu="${cpu//*$'\n'}" + cpu="${cpu/[0-9]\.*}" + cpu="${cpu/ @*}" + cpu="${cpu/\(portid*}" + + # Get CPU speed. + speed="$(psrinfo -v | awk '/operates at/ {print $6; exit}')" + + # Get CPU cores. + case $cpu_cores in + "logical" | "on") cores="$(kstat -m cpu_info | grep -c -F "chip_id")" ;; + "physical") cores="$(psrinfo -p)" ;; + esac + ;; + + "Haiku") + # Get CPU name. + cpu="$(sysinfo -cpu | awk -F '\\"' '/CPU #0/ {print $2}')" + cpu="${cpu/@*}" + + # Get CPU speed. + speed="$(sysinfo -cpu | awk '/running at/ {print $NF; exit}')" + speed="${speed/MHz}" + + # Get CPU cores. + cores="$(sysinfo -cpu | grep -c -F 'CPU #')" + ;; + + "AIX") + # Get CPU name. + cpu="$(lsattr -El proc0 -a type | awk '{printf $2}')" + + # Get CPU speed. + speed="$(prtconf -s | awk -F':' '{printf $2}')" + speed="${speed/MHz}" + + # Get CPU cores. + case $cpu_cores in + "logical" | "on") + cores="$(lparstat -i | awk -F':' '/Online Virtual CPUs/ {printf $2}')" + ;; + + "physical") + cores="$(lparstat -i | awk -F':' '/Active Physical CPUs/ {printf $2}')" + ;; + esac + ;; + + "IRIX") + # Get CPU name. + cpu="$(hinv -c processor | awk -F':' '/CPU:/ {printf $2}')" + + # Get CPU speed. + speed="$(hinv -c processor | awk '/MHZ/ {printf $2}')" + + # Get CPU cores. + cores="$(sysconf NPROC_ONLN)" + ;; + + "FreeMiNT") + cpu="$(awk -F':' '/CPU:/ {printf $2}' /kern/cpuinfo)" + speed="$(awk -F '[:.M]' '/Clocking:/ {printf $2}' /kern/cpuinfo)" + ;; + esac + + # Remove un-needed patterns from cpu output. + cpu="${cpu//(TM)}" + cpu="${cpu//(tm)}" + cpu="${cpu//(R)}" + cpu="${cpu//(r)}" + cpu="${cpu//CPU}" + cpu="${cpu//Processor}" + cpu="${cpu//Dual-Core}" + cpu="${cpu//Quad-Core}" + cpu="${cpu//Six-Core}" + cpu="${cpu//Eight-Core}" + cpu="${cpu//[1-9][0-9]-Core}" + cpu="${cpu//[0-9]-Core}" + cpu="${cpu//, * Compute Cores}" + cpu="${cpu//Core / }" + cpu="${cpu//(\"AuthenticAMD\"*)}" + cpu="${cpu//with Radeon * Graphics}" + cpu="${cpu//, altivec supported}" + cpu="${cpu//FPU*}" + cpu="${cpu//Chip Revision*}" + cpu="${cpu//Technologies, Inc}" + cpu="${cpu//Core2/Core 2}" + + # Trim spaces from core and speed output + cores="${cores//[[:space:]]}" + speed="${speed//[[:space:]]}" + + # Remove CPU brand from the output. + if [[ "$cpu_brand" == "off" ]]; then + cpu="${cpu/AMD }" + cpu="${cpu/Intel }" + cpu="${cpu/Core? Duo }" + cpu="${cpu/Qualcomm }" + fi + + # Add CPU cores to the output. + [[ "$cpu_cores" != "off" && "$cores" ]] && \ + case $os in + "Mac OS X"|"macOS") cpu="${cpu/@/(${cores}) @}" ;; + *) cpu="$cpu ($cores)" ;; + esac + + # Add CPU speed to the output. + if [[ "$cpu_speed" != "off" && "$speed" ]]; then + if (( speed < 1000 )); then + cpu="$cpu @ ${speed}MHz" + else + [[ "$speed_shorthand" == "on" ]] && speed="$((speed / 100))" + speed="${speed:0:1}.${speed:1}" + cpu="$cpu @ ${speed}GHz" + fi + fi + + # Add CPU temp to the output. + if [[ "$cpu_temp" != "off" && "$deg" ]]; then + deg="${deg//.}" + + # Convert to Fahrenheit if enabled + [[ "$cpu_temp" == "F" ]] && deg="$((deg * 90 / 50 + 320))" + + # Format the output + deg="[${deg/${deg: -1}}.${deg: -1}°${cpu_temp:-C}]" + cpu="$cpu $deg" + fi +} + +get_gpu() { + case $os in + "Linux") + # Read GPUs into array. + gpu_cmd="$(lspci -mm | + awk -F '\"|\" \"|\\(' \ + '/"Display|"3D|"VGA/ { + a[$0] = $1 " " $3 " " ($(NF-1) ~ /^$|^Device [[:xdigit:]]+$/ ? $4 : $(NF-1)) + } + END { for (i in a) { + if (!seen[a[i]]++) { + sub("^[^ ]+ ", "", a[i]); + print a[i] + } + }}')" + IFS=$'\n' read -d "" -ra gpus <<< "$gpu_cmd" + + # Remove duplicate Intel Graphics outputs. + # This fixes cases where the outputs are both + # Intel but not entirely identical. + # + # Checking the first two array elements should + # be safe since there won't be 2 intel outputs if + # there's a dedicated GPU in play. + [[ "${gpus[0]}" == *Intel* && "${gpus[1]}" == *Intel* ]] && unset -v "gpus[0]" + + for gpu in "${gpus[@]}"; do + # GPU shorthand tests. + [[ "$gpu_type" == "dedicated" && "$gpu" == *Intel* ]] || \ + [[ "$gpu_type" == "integrated" && ! "$gpu" == *Intel* ]] && \ + { unset -v gpu; continue; } + + case $gpu in + *"Advanced"*) + brand="${gpu/*AMD*ATI*/AMD ATI}" + brand="${brand:-${gpu/*AMD*/AMD}}" + brand="${brand:-${gpu/*ATI*/ATi}}" + + gpu="${gpu/\[AMD\/ATI\] }" + gpu="${gpu/\[AMD\] }" + gpu="${gpu/OEM }" + gpu="${gpu/Advanced Micro Devices, Inc.}" + gpu="${gpu/*\[}" + gpu="${gpu/\]*}" + gpu="$brand $gpu" + ;; + + *"NVIDIA"*) + gpu="${gpu/*\[}" + gpu="${gpu/\]*}" + gpu="NVIDIA $gpu" + ;; + + *"Intel"*) + gpu="${gpu/*Intel/Intel}" + gpu="${gpu/\(R\)}" + gpu="${gpu/Corporation}" + gpu="${gpu/ \(*}" + gpu="${gpu/Integrated Graphics Controller}" + gpu="${gpu/*Xeon*/Intel HD Graphics}" + + [[ -z "$(trim "$gpu")" ]] && gpu="Intel Integrated Graphics" + ;; + + *"MCST"*) + gpu="${gpu/*MCST*MGA2*/MCST MGA2}" + ;; + + *"VirtualBox"*) + gpu="VirtualBox Graphics Adapter" + ;; + + *) continue ;; + esac + + if [[ "$gpu_brand" == "off" ]]; then + gpu="${gpu/AMD }" + gpu="${gpu/NVIDIA }" + gpu="${gpu/Intel }" + fi + + prin "${subtitle:+${subtitle}${gpu_name}}" "$gpu" + done + + return + ;; + + "Mac OS X"|"macOS") + if [[ -f "${cache_dir}/neofetch/gpu" ]]; then + source "${cache_dir}/neofetch/gpu" + + else + gpu="$(system_profiler SPDisplaysDataType |\ + awk -F': ' '/^\ *Chipset Model:/ {printf $2 ", "}')" + gpu="${gpu//\/ \$}" + gpu="${gpu%,*}" + + cache "gpu" "$gpu" + fi + ;; + + "iPhone OS") + case $kernel_machine in + "iPhone1,"[1-2]): "PowerVR MBX Lite 3D" ;; + "iPhone2,1" | "iPhone3,"[1-3] | "iPod3,1" | "iPod4,1" | "iPad1,1"): + "PowerVR SGX535" + ;; + "iPhone4,1" | "iPad2,"[1-7] | "iPod5,1"): "PowerVR SGX543MP2" ;; + "iPhone5,"[1-4]): "PowerVR SGX543MP3" ;; + "iPhone6,"[1-2] | "iPad4,"[1-9]): "PowerVR G6430" ;; + "iPhone7,"[1-2] | "iPod7,1" | "iPad5,"[1-2]): "PowerVR GX6450" ;; + "iPhone8,"[1-4] | "iPad6,1"[12]): "PowerVR GT7600" ;; + "iPhone9,"[1-4] | "iPad7,"[5-6]): "PowerVR GT7600 Plus" ;; + "iPhone10,"[1-6]): "Apple Designed GPU (A11)" ;; + "iPhone11,"[2468] | "iPad11,"[67]): "Apple Designed GPU (A12)" ;; + "iPhone12,"[1358]): "Apple Designed GPU (A13)" ;; + "iPhone13,"[1234] | "iPad13,"[12]): "Apple Designed GPU (A14)" ;; + + "iPad3,"[1-3]): "PowerVR SGX534MP4" ;; + "iPad3,"[4-6]): "PowerVR SGX554MP4" ;; + "iPad5,"[3-4]): "PowerVR GXA6850" ;; + "iPad6,"[3-8]): "PowerVR 7XT" ;; + + "iPod1,1" | "iPod2,1") + : "PowerVR MBX Lite" + ;; + esac + gpu="$_" + ;; + + "Windows") + wmic path Win32_VideoController get caption | while read -r line; do + line=$(trim "$line") + + case $line in + *Caption*|'') + continue + ;; + + *) + prin "${subtitle:+${subtitle}${gpu_name}}" "$line" + ;; + esac + done + ;; + + "Haiku") + gpu="$(listdev | grep -A2 -F 'device Display controller' |\ + awk -F':' '/device beef/ {print $2}')" + ;; + + *) + case $kernel_name in + "FreeBSD"* | "DragonFly"*) + gpu="$(pciconf -lv | grep -B 4 -F "VGA" | grep -F "device")" + gpu="${gpu/*device*= }" + gpu="$(trim_quotes "$gpu")" + ;; + + *) + gpu="$(glxinfo -B | grep -F 'OpenGL renderer string')" + gpu="${gpu/OpenGL renderer string: }" + ;; + esac + ;; + esac + + if [[ "$gpu_brand" == "off" ]]; then + gpu="${gpu/AMD}" + gpu="${gpu/NVIDIA}" + gpu="${gpu/Intel}" + fi +} + +get_memory() { + case $os in + "Linux" | "Windows") + # MemUsed = Memtotal + Shmem - MemFree - Buffers - Cached - SReclaimable + # Source: https://github.com/KittyKatt/screenFetch/issues/386#issuecomment-249312716 + while IFS=":" read -r a b; do + case $a in + "MemTotal") ((mem_used+=${b/kB})); mem_total="${b/kB}" ;; + "Shmem") ((mem_used+=${b/kB})) ;; + "MemFree" | "Buffers" | "Cached" | "SReclaimable") + mem_used="$((mem_used-=${b/kB}))" + ;; + + # Available since Linux 3.14rc (34e431b0ae398fc54ea69ff85ec700722c9da773). + # If detected this will be used over the above calculation for mem_used. + "MemAvailable") + mem_avail=${b/kB} + ;; + esac + done < /proc/meminfo + + if [[ $mem_avail ]]; then + mem_used=$(((mem_total - mem_avail) / 1024)) + else + mem_used="$((mem_used / 1024))" + fi + + mem_total="$((mem_total / 1024))" + ;; + + "Mac OS X" | "macOS" | "iPhone OS") + hw_pagesize="$(sysctl -n hw.pagesize)" + mem_total="$(($(sysctl -n hw.memsize) / 1024 / 1024))" + pages_app="$(($(sysctl -n vm.page_pageable_internal_count) - $(sysctl -n vm.page_purgeable_count)))" + pages_wired="$(vm_stat | awk '/ wired/ { print $4 }')" + pages_compressed="$(vm_stat | awk '/ occupied/ { printf $5 }')" + pages_compressed="${pages_compressed:-0}" + mem_used="$(((${pages_app} + ${pages_wired//.} + ${pages_compressed//.}) * hw_pagesize / 1024 / 1024))" + ;; + + "BSD" | "MINIX") + # Mem total. + case $kernel_name in + "NetBSD"*) mem_total="$(($(sysctl -n hw.physmem64) / 1024 / 1024))" ;; + *) mem_total="$(($(sysctl -n hw.physmem) / 1024 / 1024))" ;; + esac + + # Mem free. + case $kernel_name in + "NetBSD"*) + mem_free="$(($(awk -F ':|kB' '/MemFree:/ {printf $2}' /proc/meminfo) / 1024))" + ;; + + "FreeBSD"* | "DragonFly"*) + hw_pagesize="$(sysctl -n hw.pagesize)" + mem_inactive="$(($(sysctl -n vm.stats.vm.v_inactive_count) * hw_pagesize))" + mem_unused="$(($(sysctl -n vm.stats.vm.v_free_count) * hw_pagesize))" + mem_cache="$(($(sysctl -n vm.stats.vm.v_cache_count) * hw_pagesize))" + mem_free="$(((mem_inactive + mem_unused + mem_cache) / 1024 / 1024))" + ;; + + "MINIX") + mem_free="$(top -d 1 | awk -F ',' '/^Memory:/ {print $2}')" + mem_free="${mem_free/M Free}" + ;; + + "OpenBSD"*) ;; + *) mem_free="$(($(vmstat | awk 'END {printf $5}') / 1024))" ;; + esac + + # Mem used. + case $kernel_name in + "OpenBSD"*) + mem_used="$(vmstat | awk 'END {printf $3}')" + mem_used="${mem_used/M}" + ;; + + *) mem_used="$((mem_total - mem_free))" ;; + esac + ;; + + "Solaris" | "AIX") + hw_pagesize="$(pagesize)" + case $os in + "Solaris") + pages_total="$(kstat -p unix:0:system_pages:pagestotal | awk '{print $2}')" + pages_free="$(kstat -p unix:0:system_pages:pagesfree | awk '{print $2}')" + ;; + + "AIX") + IFS=$'\n'"| " read -d "" -ra mem_stat <<< "$(svmon -G -O unit=page)" + pages_total="${mem_stat[11]}" + pages_free="${mem_stat[16]}" + ;; + esac + mem_total="$((pages_total * hw_pagesize / 1024 / 1024))" + mem_free="$((pages_free * hw_pagesize / 1024 / 1024))" + mem_used="$((mem_total - mem_free))" + ;; + + "Haiku") + mem_total="$(($(sysinfo -mem | awk -F '\\/ |)' '{print $2; exit}') / 1024 / 1024))" + mem_used="$(sysinfo -mem | awk -F '\\/|)' '{print $2; exit}')" + mem_used="$((${mem_used/max} / 1024 / 1024))" + ;; + + "IRIX") + IFS=$'\n' read -d "" -ra mem_cmd <<< "$(pmem)" + IFS=" " read -ra mem_stat <<< "${mem_cmd[0]}" + + mem_total="$((mem_stat[3] / 1024))" + mem_free="$((mem_stat[5] / 1024))" + mem_used="$((mem_total - mem_free))" + ;; + + "FreeMiNT") + mem="$(awk -F ':|kB' '/MemTotal:|MemFree:/ {printf $2, " "}' /kern/meminfo)" + mem_free="${mem/* }" + mem_total="${mem/$mem_free}" + mem_used="$((mem_total - mem_free))" + mem_total="$((mem_total / 1024))" + mem_used="$((mem_used / 1024))" + ;; + + esac + + [[ "$memory_percent" == "on" ]] && ((mem_perc=mem_used * 100 / mem_total)) + + case $memory_unit in + gib) + mem_used=$(awk '{printf "%.2f", $1 / $2}' <<< "$mem_used 1024") + mem_total=$(awk '{printf "%.2f", $1 / $2}' <<< "$mem_total 1024") + mem_label=GiB + ;; + + kib) + mem_used=$((mem_used * 1024)) + mem_total=$((mem_total * 1024)) + mem_label=KiB + ;; + esac + + memory="${mem_used}${mem_label:-MiB} / ${mem_total}${mem_label:-MiB} ${mem_perc:+(${mem_perc}%)}" + + # Bars. + case $memory_display in + "bar") memory="$(bar "${mem_used}" "${mem_total}")" ;; + "infobar") memory="${memory} $(bar "${mem_used}" "${mem_total}")" ;; + "barinfo") memory="$(bar "${mem_used}" "${mem_total}")${info_color} ${memory}" ;; + esac +} + +get_song() { + players=( + "amarok" + "audacious" + "banshee" + "bluemindo" + "clementine" + "cmus" + "deadbeef" + "deepin-music" + "dragon" + "elisa" + "exaile" + "gnome-music" + "gmusicbrowser" + "gogglesmm" + "guayadeque" + "io.elementary.music" + "iTunes" + "Music" + "juk" + "lollypop" + "MellowPlayer" + "mocp" + "mopidy" + "mpd" + "muine" + "netease-cloud-music" + "olivia" + "plasma-browser-integration" + "playerctl" + "pogo" + "pragha" + "qmmp" + "quodlibet" + "rhythmbox" + "sayonara" + "smplayer" + "spotify" + "Spotify" + "strawberry" + "tauonmb" + "tomahawk" + "vlc" + "xmms2d" + "xnoise" + "yarock" + ) + + printf -v players "|%s" "${players[@]}" + player="$(ps aux | awk -v pattern="(${players:1})" \ + '!/ awk / && !/iTunesHelper/ && match($0,pattern){print substr($0,RSTART,RLENGTH); exit}')" + + [[ "$music_player" && "$music_player" != "auto" ]] && player="$music_player" + + get_song_dbus() { + # Multiple players use an almost identical dbus command to get the information. + # This function saves us using the same command throughout the function. + song="$(\ + dbus-send --print-reply --dest=org.mpris.MediaPlayer2."${1}" /org/mpris/MediaPlayer2 \ + org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' \ + string:'Metadata' |\ + awk -F '"' 'BEGIN {RS=" entry"}; /"xesam:artist"/ {a = $4} /"xesam:album"/ {b = $4} + /"xesam:title"/ {t = $4} END {print a " \n" b " \n" t}' + )" + } + + case ${player/*\/} in + "mocp"*) song="$(mocp -Q '%artist \n%album \n%song')" ;; + "deadbeef"*) song="$(deadbeef --nowplaying-tf '%artist% \\n%album% \\n%title%')" ;; + "qmmp"*) song="$(qmmp --nowplaying '%p \n%a \n%t')" ;; + "gnome-music"*) get_song_dbus "GnomeMusic" ;; + "lollypop"*) get_song_dbus "Lollypop" ;; + "clementine"*) get_song_dbus "clementine" ;; + "cmus"*) get_song_dbus "cmus" ;; + "juk"*) get_song_dbus "juk" ;; + "bluemindo"*) get_song_dbus "Bluemindo" ;; + "guayadeque"*) get_song_dbus "guayadeque" ;; + "yarock"*) get_song_dbus "yarock" ;; + "deepin-music"*) get_song_dbus "DeepinMusic" ;; + "tomahawk"*) get_song_dbus "tomahawk" ;; + "elisa"*) get_song_dbus "elisa" ;; + "sayonara"*) get_song_dbus "sayonara" ;; + "audacious"*) get_song_dbus "audacious" ;; + "vlc"*) get_song_dbus "vlc" ;; + "gmusicbrowser"*) get_song_dbus "gmusicbrowser" ;; + "pragha"*) get_song_dbus "pragha" ;; + "amarok"*) get_song_dbus "amarok" ;; + "dragon"*) get_song_dbus "dragonplayer" ;; + "smplayer"*) get_song_dbus "smplayer" ;; + "rhythmbox"*) get_song_dbus "rhythmbox" ;; + "strawberry"*) get_song_dbus "strawberry" ;; + "gogglesmm"*) get_song_dbus "gogglesmm" ;; + "xnoise"*) get_song_dbus "xnoise" ;; + "tauonmb"*) get_song_dbus "tauon" ;; + "olivia"*) get_song_dbus "olivia" ;; + "exaile"*) get_song_dbus "exaile" ;; + "netease-cloud-music"*) get_song_dbus "netease-cloud-music" ;; + "plasma-browser-integration"*) get_song_dbus "plasma-browser-integration" ;; + "io.elementary.music"*) get_song_dbus "Music" ;; + "MellowPlayer"*) get_song_dbus "MellowPlayer3" ;; + + "mpd"* | "mopidy"*) + song="$(mpc -f '%artist% \n%album% \n%title%' current "${mpc_args[@]}")" + ;; + + "xmms2d"*) + song="$(xmms2 current -f "\${artist}"$' \n'"\${album}"$' \n'"\${title}")" + ;; + + "spotify"*) + case $os in + "Linux") get_song_dbus "spotify" ;; + + "Mac OS X"|"macOS") + song="$(osascript -e 'tell application "Spotify" to artist of current track as¬ + string & "\n" & album of current track as¬ + string & "\n" & name of current track as string')" + ;; + esac + ;; + + "itunes"*) + song="$(osascript -e 'tell application "iTunes" to artist of current track as¬ + string & "\n" & album of current track as¬ + string & "\n" & name of current track as string')" + ;; + + "music"*) + song="$(osascript -e 'tell application "Music" to artist of current track as¬ + string & "\n" & album of current track as¬ + string & "\n" & name of current track as string')" + ;; + + "banshee"*) + song="$(banshee --query-artist --query-album --query-title |\ + awk -F':' '/^artist/ {a=$2} /^album/ {b=$2} /^title/ {t=$2} + END {print a " \n" b " \n"t}')" + ;; + + "muine"*) + song="$(dbus-send --print-reply --dest=org.gnome.Muine /org/gnome/Muine/Player \ + org.gnome.Muine.Player.GetCurrentSong | + awk -F':' '/^artist/ {a=$2} /^album/ {b=$2} /^title/ {t=$2} + END {print a " \n" b " \n" t}')" + ;; + + "quodlibet"*) + song="$(dbus-send --print-reply --dest=net.sacredchao.QuodLibet \ + /net/sacredchao/QuodLibet net.sacredchao.QuodLibet.CurrentSong |\ + awk -F'"' 'BEGIN {RS=" entry"}; /"artist"/ {a=$4} /"album"/ {b=$4} + /"title"/ {t=$4} END {print a " \n" b " \n" t}')" + ;; + + "pogo"*) + song="$(dbus-send --print-reply --dest=org.mpris.pogo /Player \ + org.freedesktop.MediaPlayer.GetMetadata | + awk -F'"' 'BEGIN {RS=" entry"}; /"artist"/ {a=$4} /"album"/ {b=$4} + /"title"/ {t=$4} END {print a " \n" b " \n" t}')" + ;; + + "playerctl"*) + song="$(playerctl metadata --format '{{ artist }} \n{{ album }} \n{{ title }}')" + ;; + + *) mpc &>/dev/null && song="$(mpc -f '%artist% \n%album% \n%title%' current)" || return ;; + esac + + IFS=$'\n' read -d "" -r artist album title <<< "${song//'\n'/$'\n'}" + + # Make sure empty tags are truly empty. + artist="$(trim "$artist")" + album="$(trim "$album")" + title="$(trim "$title")" + + # Set default values if no tags were found. + : "${artist:=Unknown Artist}" "${album:=Unknown Album}" "${title:=Unknown Song}" + + # Display Artist, Album and Title on separate lines. + if [[ "$song_shorthand" == "on" ]]; then + prin "Artist" "$artist" + prin "Album" "$album" + prin "Song" "$title" + else + song="${song_format/\%artist\%/$artist}" + song="${song/\%album\%/$album}" + song="${song/\%title\%/$title}" + fi +} + +get_resolution() { + case $os in + "Mac OS X"|"macOS") + if type -p screenresolution >/dev/null; then + resolution="$(screenresolution get 2>&1 | awk '/Display/ {printf $6 "Hz, "}')" + resolution="${resolution//x??@/ @ }" + + else + resolution="$(system_profiler SPDisplaysDataType |\ + awk '/Resolution:/ {printf $2"x"$4" @ "$6"Hz, "}')" + fi + + if [[ -e "/Library/Preferences/com.apple.windowserver.plist" ]]; then + scale_factor="$(PlistBuddy -c "Print DisplayAnyUserSets:0:0:Resolution" \ + /Library/Preferences/com.apple.windowserver.plist)" + else + scale_factor="" + fi + + # If no refresh rate is empty. + [[ "$resolution" == *"@ Hz"* ]] && \ + resolution="${resolution//@ Hz}" + + [[ "${scale_factor%.*}" == 2 ]] && \ + resolution="${resolution// @/@2x @}" + + if [[ "$refresh_rate" == "off" ]]; then + resolution="${resolution// @ [0-9][0-9]Hz}" + resolution="${resolution// @ [0-9][0-9][0-9]Hz}" + fi + + [[ "$resolution" == *"0Hz"* ]] && \ + resolution="${resolution// @ 0Hz}" + ;; + + "Windows") + IFS=$'\n' read -d "" -ra sw \ + <<< "$(wmic path Win32_VideoController get CurrentHorizontalResolution)" + + IFS=$'\n' read -d "" -ra sh \ + <<< "$(wmic path Win32_VideoController get CurrentVerticalResolution)" + + sw=("${sw[@]//CurrentHorizontalResolution}") + sh=("${sh[@]//CurrentVerticalResolution}") + + for ((mn = 0; mn < ${#sw[@]}; mn++)) { + [[ ${sw[mn]//[[:space:]]} && ${sh[mn]//[[:space:]]} ]] && + resolution+="${sw[mn]//[[:space:]]}x${sh[mn]//[[:space:]]}, " + } + + resolution=${resolution%,} + ;; + + "Haiku") + resolution="$(screenmode | awk -F ' |, ' 'END{printf $2 "x" $3 " @ " $6 $7}')" + + [[ "$refresh_rate" == "off" ]] && resolution="${resolution/ @*}" + ;; + + "FreeMiNT") + # Need to block X11 queries + ;; + + *) + if type -p xrandr >/dev/null && [[ $DISPLAY && -z $WAYLAND_DISPLAY ]]; then + case $refresh_rate in + "on") + resolution="$(xrandr --nograb --current |\ + awk 'match($0,/[0-9]*\.[0-9]*\*/) { + printf $1 " @ " substr($0,RSTART,RLENGTH) "Hz, "}')" + ;; + + "off") + resolution="$(xrandr --nograb --current |\ + awk -F 'connected |\\+|\\(' \ + '/ connected.*[0-9]+x[0-9]+\+/ && $2 {printf $2 ", "}')" + + resolution="${resolution/primary, }" + resolution="${resolution/primary }" + ;; + esac + resolution="${resolution//\*}" + + elif type -p xwininfo >/dev/null && [[ $DISPLAY && -z $WAYLAND_DISPLAY ]]; then + read -r w h \ + <<< "$(xwininfo -root | awk -F':' '/Width|Height/ {printf $2}')" + resolution="${w}x${h}" + + elif type -p xdpyinfo >/dev/null && [[ $DISPLAY && -z $WAYLAND_DISPLAY ]]; then + resolution="$(xdpyinfo | awk '/dimensions:/ {printf $2}')" + + elif [[ -d /sys/class/drm ]]; then + for dev in /sys/class/drm/*/modes; do + read -r single_resolution _ < "$dev" + + [[ $single_resolution ]] && resolution="${single_resolution}, ${resolution}" + done + fi + ;; + esac + + resolution="${resolution%%,}" + resolution="${resolution%%, }" + [[ -z "${resolution/x}" ]] && resolution= +} + +get_style() { + # Fix weird output when the function is run multiple times. + unset gtk2_theme gtk3_theme theme path + + if [[ "$DISPLAY" && $os != "Mac OS X" && $os != "macOS" ]]; then + # Get DE if user has disabled the function. + ((de_run != 1)) && get_de + + # Remove version from '$de'. + [[ $de_version == on ]] && de=${de/ *} + + # Check for DE Theme. + case $de in + "KDE"* | "Plasma"*) + kde_config_dir + + if [[ -f "${kde_config_dir}/kdeglobals" ]]; then + kde_config_file="${kde_config_dir}/kdeglobals" + + kde_theme="$(grep "^${kde}" "$kde_config_file")" + kde_theme="${kde_theme/*=}" + if [[ "$kde" == "font" ]]; then + kde_font_size="${kde_theme#*,}" + kde_font_size="${kde_font_size/,*}" + kde_theme="${kde_theme/,*} ${kde_theme/*,} ${kde_font_size}" + fi + kde_theme="$kde_theme [$de], " + else + err "Theme: KDE config files not found, skipping." + fi + ;; + + *"Cinnamon"*) + if type -p gsettings >/dev/null; then + gtk3_theme="$(gsettings get org.cinnamon.desktop.interface "$gsettings")" + gtk2_theme="$gtk3_theme" + fi + ;; + + "Gnome"* | "Unity"* | "Budgie"*) + if type -p gsettings >/dev/null; then + gtk3_theme="$(gsettings get org.gnome.desktop.interface "$gsettings")" + gtk2_theme="$gtk3_theme" + + elif type -p gconftool-2 >/dev/null; then + gtk2_theme="$(gconftool-2 -g /desktop/gnome/interface/"$gconf")" + fi + ;; + + "Mate"*) + gtk3_theme="$(gsettings get org.mate.interface "$gsettings")" + gtk2_theme="$gtk3_theme" + ;; + + "Xfce"*) + type -p xfconf-query >/dev/null && \ + gtk2_theme="$(xfconf-query -c xsettings -p "$xfconf")" + ;; + esac + + # Check for general GTK2 Theme. + if [[ -z "$gtk2_theme" ]]; then + if [[ -n "$GTK2_RC_FILES" ]]; then + IFS=: read -ra rc_files <<< "$GTK2_RC_FILES" + gtk2_theme="$(grep "^[^#]*${name}" "${rc_files[@]}")" + elif [[ -f "${HOME}/.gtkrc-2.0" ]]; then + gtk2_theme="$(grep "^[^#]*${name}" "${HOME}/.gtkrc-2.0")" + + elif [[ -f "/etc/gtk-2.0/gtkrc" ]]; then + gtk2_theme="$(grep "^[^#]*${name}" /etc/gtk-2.0/gtkrc)" + + elif [[ -f "/usr/share/gtk-2.0/gtkrc" ]]; then + gtk2_theme="$(grep "^[^#]*${name}" /usr/share/gtk-2.0/gtkrc)" + + fi + + gtk2_theme="${gtk2_theme/*${name}*=}" + fi + + # Check for general GTK3 Theme. + if [[ -z "$gtk3_theme" ]]; then + if [[ -f "${XDG_CONFIG_HOME}/gtk-3.0/settings.ini" ]]; then + gtk3_theme="$(grep "^[^#]*$name" "${XDG_CONFIG_HOME}/gtk-3.0/settings.ini")" + + elif type -p gsettings >/dev/null; then + gtk3_theme="$(gsettings get org.gnome.desktop.interface "$gsettings")" + + elif [[ -f "/etc/gtk-3.0/settings.ini" ]]; then + gtk3_theme="$(grep "^[^#]*$name" /etc/gtk-3.0/settings.ini)" + + elif [[ -f "/usr/share/gtk-3.0/settings.ini" ]]; then + gtk3_theme="$(grep "^[^#]*$name" /usr/share/gtk-3.0/settings.ini)" + fi + + gtk3_theme="${gtk3_theme/${name}*=}" + fi + + # Trim whitespace. + gtk2_theme="$(trim "$gtk2_theme")" + gtk3_theme="$(trim "$gtk3_theme")" + + # Remove quotes. + gtk2_theme="$(trim_quotes "$gtk2_theme")" + gtk3_theme="$(trim_quotes "$gtk3_theme")" + + # Toggle visibility of GTK themes. + [[ "$gtk2" == "off" ]] && unset gtk2_theme + [[ "$gtk3" == "off" ]] && unset gtk3_theme + + # Format the string based on which themes exist. + if [[ "$gtk2_theme" && "$gtk2_theme" == "$gtk3_theme" ]]; then + gtk3_theme+=" [GTK2/3]" + unset gtk2_theme + + elif [[ "$gtk2_theme" && "$gtk3_theme" ]]; then + gtk2_theme+=" [GTK2], " + gtk3_theme+=" [GTK3] " + + else + [[ "$gtk2_theme" ]] && gtk2_theme+=" [GTK2] " + [[ "$gtk3_theme" ]] && gtk3_theme+=" [GTK3] " + fi + + # Final string. + theme="${kde_theme}${gtk2_theme}${gtk3_theme}" + theme="${theme%, }" + + # Make the output shorter by removing "[GTKX]" from the string. + if [[ "$gtk_shorthand" == "on" ]]; then + theme="${theme// '[GTK'[0-9]']'}" + theme="${theme/ '[GTK2/3]'}" + theme="${theme/ '[KDE]'}" + theme="${theme/ '[Plasma]'}" + fi + fi +} + +get_theme() { + name="gtk-theme-name" + gsettings="gtk-theme" + gconf="gtk_theme" + xfconf="/Net/ThemeName" + kde="Name" + + get_style +} + +get_icons() { + name="gtk-icon-theme-name" + gsettings="icon-theme" + gconf="icon_theme" + xfconf="/Net/IconThemeName" + kde="Theme" + + get_style + icons="$theme" +} + +get_font() { + name="gtk-font-name" + gsettings="font-name" + gconf="font_theme" + xfconf="/Gtk/FontName" + kde="font" + + get_style + font="$theme" +} + +get_term() { + # If function was run, stop here. + ((term_run == 1)) && return + + # Workaround for macOS systems that + # don't support the block below. + case $TERM_PROGRAM in + "iTerm.app") term="iTerm2" ;; + "Terminal.app") term="Apple Terminal" ;; + "Hyper") term="HyperTerm" ;; + *) term="${TERM_PROGRAM/\.app}" ;; + esac + + # Most likely TosWin2 on FreeMiNT - quick check + [[ "$TERM" == "tw52" || "$TERM" == "tw100" ]] && term="TosWin2" + [[ "$SSH_CONNECTION" ]] && term="$SSH_TTY" + [[ "$WT_SESSION" ]] && term="Windows Terminal" + + # Check $PPID for terminal emulator. + while [[ -z "$term" ]]; do + parent="$(get_ppid "$parent")" + [[ -z "$parent" ]] && break + name="$(get_process_name "$parent")" + + case ${name// } in + "${SHELL/*\/}"|*"sh"|"screen"|"su"*|"newgrp") ;; + + "login"*|*"Login"*|"init"|"(init)") + term="$(tty)" + ;; + + "ruby"|"1"|"tmux"*|"systemd"|"sshd"*|"python"*|\ + "USER"*"PID"*|"kdeinit"*|"launchd"*|"bwrap") + break + ;; + + "gnome-terminal-") term="gnome-terminal" ;; + "urxvtd") term="urxvt" ;; + *"nvim") term="Neovim Terminal" ;; + *"NeoVimServer"*) term="VimR Terminal" ;; + + *) + # Fix issues with long process names on Linux. + [[ $os == Linux ]] && term=$(realpath "/proc/$parent/exe") + + term="${name##*/}" + + # Fix wrapper names in Nix. + [[ $term == .*-wrapped ]] && { + term="${term#.}" + term="${term%-wrapped}" + } + ;; + esac + done + + # Log that the function was run. + term_run=1 +} + +get_term_font() { + ((term_run != 1)) && get_term + + case $term in + "alacritty"*) + shopt -s nullglob + confs=({$XDG_CONFIG_HOME,$HOME}/{alacritty,}/{.,}alacritty.ym?) + shopt -u nullglob + + [[ -f "${confs[0]}" ]] || return + + term_font="$(awk '/normal:/ {while (!/family:/ || /#/) + {if (!getline) {exit}} print; exit}' "${confs[0]}")" + term_font="${term_font/*family:}" + term_font="${term_font/$'\n'*}" + term_font="${term_font/\#*}" + term_font="${term_font//\"}" + ;; + + "Apple_Terminal") + term_font="$(osascript </dev/null || + { err "Disk requires 'df' to function. Install 'df' to get disk info."; return; } + + df_version=$(df --version 2>&1) + + case $df_version in + *IMitv*) df_flags=(-P -g) ;; # AIX + *befhikm*) df_flags=(-P -k) ;; # IRIX + *hiklnP*) df_flags=(-h) ;; # OpenBSD + + *Tracker*) # Haiku + err "Your version of df cannot be used due to the non-standard flags" + return + ;; + + *) df_flags=(-P -h) ;; + esac + + # Create an array called 'disks' where each element is a separate line from + # df's output. We then unset the first element which removes the column titles. + IFS=$'\n' read -d "" -ra disks <<< "$(df "${df_flags[@]}" "${disk_show[@]:-/}")" + unset "disks[0]" + + # Stop here if 'df' fails to print disk info. + [[ ${disks[*]} ]] || { + err "Disk: df failed to print the disks, make sure the disk_show array is set properly." + return + } + + for disk in "${disks[@]}"; do + # Create a second array and make each element split at whitespace this time. + IFS=" " read -ra disk_info <<< "$disk" + disk_perc=${disk_info[${#disk_info[@]} - 2]/\%} + + case $disk_percent in + off) disk_perc= + esac + + case $df_version in + *befhikm*) + disk=$((disk_info[${#disk_info[@]} - 4] / 1024 / 1024))G + disk+=" / " + disk+=$((disk_info[${#disk_info[@]} - 5] / 1024/ 1024))G + disk+=${disk_perc:+ ($disk_perc%)} + ;; + + *) + disk=${disk_info[${#disk_info[@]} - 4]/i} + disk+=" / " + disk+=${disk_info[${#disk_info[@]} - 5]/i} + disk+=${disk_perc:+ ($disk_perc%)} + ;; + esac + + case $disk_subtitle in + name) + disk_sub=${disk_info[*]::${#disk_info[@]} - 5} + ;; + + dir) + disk_sub=${disk_info[${#disk_info[@]} - 1]/*\/} + disk_sub=${disk_sub:-${disk_info[${#disk_info[@]} - 1]}} + ;; + + none) ;; + + *) + disk_sub=${disk_info[${#disk_info[@]} - 1]} + ;; + esac + + case $disk_display in + bar) disk="$(bar "$disk_perc" "100")" ;; + infobar) disk+=" $(bar "$disk_perc" "100")" ;; + barinfo) disk="$(bar "$disk_perc" "100")${info_color} $disk" ;; + perc) disk="${disk_perc}% $(bar "$disk_perc" "100")" ;; + esac + + # Append '(disk mount point)' to the subtitle. + if [[ "$subtitle" ]]; then + prin "$subtitle${disk_sub:+ ($disk_sub)}" "$disk" + else + prin "$disk_sub" "$disk" + fi + done +} + +get_battery() { + case $os in + "Linux") + # We use 'prin' here so that we can do multi battery support + # with a single battery per line. + for bat in "/sys/class/power_supply/"{BAT,axp288_fuel_gauge,CMB}*; do + capacity="$(< "${bat}/capacity")" + status="$(< "${bat}/status")" + + if [[ "$capacity" ]]; then + battery="${capacity}% [${status}]" + + case $battery_display in + "bar") battery="$(bar "$capacity" 100)" ;; + "infobar") battery+=" $(bar "$capacity" 100)" ;; + "barinfo") battery="$(bar "$capacity" 100)${info_color} ${battery}" ;; + esac + + bat="${bat/*axp288_fuel_gauge}" + prin "${subtitle:+${subtitle}${bat: -1}}" "$battery" + fi + done + return + ;; + + "BSD") + case $kernel_name in + "FreeBSD"* | "DragonFly"*) + battery="$(acpiconf -i 0 | awk -F ':\t' '/Remaining capacity/ {print $2}')" + battery_state="$(acpiconf -i 0 | awk -F ':\t\t\t' '/State/ {print $2}')" + ;; + + "NetBSD"*) + battery="$(envstat | awk '\\(|\\)' '/charge:/ {print $2}')" + battery="${battery/\.*/%}" + ;; + + "OpenBSD"* | "Bitrig"*) + battery0full="$(sysctl -n hw.sensors.acpibat0.watthour0\ + hw.sensors.acpibat0.amphour0)" + battery0full="${battery0full%% *}" + + battery0now="$(sysctl -n hw.sensors.acpibat0.watthour3\ + hw.sensors.acpibat0.amphour3)" + battery0now="${battery0now%% *}" + + state="$(sysctl -n hw.sensors.acpibat0.raw0)" + state="${state##? (battery }" + state="${state%)*}" + + [[ "${state}" == "charging" ]] && battery_state="charging" + [[ "$battery0full" ]] && \ + battery="$((100 * ${battery0now/\.} / ${battery0full/\.}))%" + ;; + esac + ;; + + "Mac OS X"|"macOS") + battery="$(pmset -g batt | grep -o '[0-9]*%')" + state="$(pmset -g batt | awk '/;/ {print $4}')" + [[ "$state" == "charging;" ]] && battery_state="charging" + ;; + + "Windows") + battery="$(wmic Path Win32_Battery get EstimatedChargeRemaining)" + battery="${battery/EstimatedChargeRemaining}" + battery="$(trim "$battery")%" + state="$(wmic /NameSpace:'\\root\WMI' Path BatteryStatus get Charging)" + state="${state/Charging}" + [[ "$state" == *TRUE* ]] && battery_state="charging" + ;; + + "Haiku") + battery0full="$(awk -F '[^0-9]*' 'NR==2 {print $4}' /dev/power/acpi_battery/0)" + battery0now="$(awk -F '[^0-9]*' 'NR==5 {print $4}' /dev/power/acpi_battery/0)" + battery="$((battery0full * 100 / battery0now))%" + ;; + esac + + [[ "$battery_state" ]] && battery+=" Charging" + + case $battery_display in + "bar") battery="$(bar "${battery/\%*}" 100)" ;; + "infobar") battery="${battery} $(bar "${battery/\%*}" 100)" ;; + "barinfo") battery="$(bar "${battery/\%*}" 100)${info_color} ${battery}" ;; + esac +} + +get_local_ip() { + case $os in + "Linux" | "BSD" | "Solaris" | "AIX" | "IRIX") + if [[ "${local_ip_interface[0]}" == "auto" ]]; then + local_ip="$(ip route get 1 | awk -F'src' '{print $2; exit}')" + local_ip="${local_ip/uid*}" + [[ "$local_ip" ]] || local_ip="$(ifconfig -a | awk '/broadcast/ {print $2; exit}')" + else + for interface in "${local_ip_interface[@]}"; do + local_ip="$(ip addr show "$interface" 2> /dev/null | + awk '/inet / {print $2; exit}')" + local_ip="${local_ip/\/*}" + [[ "$local_ip" ]] || + local_ip="$(ifconfig "$interface" 2> /dev/null | + awk '/broadcast/ {print $2; exit}')" + if [[ -n "$local_ip" ]]; then + prin "$interface" "$local_ip" + else + err "Local IP: Could not detect local ip for $interface" + fi + done + fi + ;; + + "MINIX") + local_ip="$(ifconfig | awk '{printf $3; exit}')" + ;; + + "Mac OS X" | "macOS" | "iPhone OS") + if [[ "${local_ip_interface[0]}" == "auto" ]]; then + interface="$(route get 1 | awk -F': ' '/interface/ {printf $2; exit}')" + local_ip="$(ipconfig getifaddr "$interface")" + else + for interface in "${local_ip_interface[@]}"; do + local_ip="$(ipconfig getifaddr "$interface")" + if [[ -n "$local_ip" ]]; then + prin "$interface" "$local_ip" + else + err "Local IP: Could not detect local ip for $interface" + fi + done + fi + ;; + + "Windows") + local_ip="$(ipconfig | awk -F ': ' '/IPv4 Address/ {printf $2 ", "}')" + local_ip="${local_ip%\,*}" + ;; + + "Haiku") + local_ip="$(ifconfig | awk -F ': ' '/Bcast/ {print $2}')" + local_ip="${local_ip/, Bcast}" + ;; + esac +} + +get_public_ip() { + if [[ ! -n "$public_ip_host" ]] && type -p dig >/dev/null; then + public_ip="$(dig +time=1 +tries=1 +short myip.opendns.com @resolver1.opendns.com)" + [[ "$public_ip" =~ ^\; ]] && unset public_ip + fi + + if [[ ! -n "$public_ip_host" ]] && [[ -z "$public_ip" ]] && type -p drill >/dev/null; then + public_ip="$(drill myip.opendns.com @resolver1.opendns.com | \ + awk '/^myip\./ && $3 == "IN" {print $5}')" + fi + + if [[ -z "$public_ip" ]] && type -p curl >/dev/null; then + public_ip="$(curl -L --max-time "$public_ip_timeout" -w '\n' "$public_ip_host")" + fi + + if [[ -z "$public_ip" ]] && type -p wget >/dev/null; then + public_ip="$(wget -T "$public_ip_timeout" -qO- "$public_ip_host")" + fi +} + +get_users() { + users="$(who | awk '!seen[$1]++ {printf $1 ", "}')" + users="${users%\,*}" +} + +get_locale() { + locale="$sys_locale" +} + +get_gpu_driver() { + case $os in + "Linux") + gpu_driver="$(lspci -nnk | awk -F ': ' \ + '/Display|3D|VGA/{nr[NR+2]}; NR in nr {printf $2 ", "; exit}')" + gpu_driver="${gpu_driver%, }" + + if [[ "$gpu_driver" == *"nvidia"* ]]; then + gpu_driver="$(< /proc/driver/nvidia/version)" + gpu_driver="${gpu_driver/*Module }" + gpu_driver="NVIDIA ${gpu_driver/ *}" + fi + ;; + + "Mac OS X"|"macOS") + if [[ "$(kextstat | grep "GeForceWeb")" != "" ]]; then + gpu_driver="NVIDIA Web Driver" + else + gpu_driver="macOS Default Graphics Driver" + fi + ;; + esac +} + +get_cols() { + local blocks blocks2 cols + + if [[ "$color_blocks" == "on" ]]; then + # Convert the width to space chars. + printf -v block_width "%${block_width}s" + + # Generate the string. + for ((block_range[0]; block_range[0]<=block_range[1]; block_range[0]++)); do + case ${block_range[0]} in + [0-7]) + printf -v blocks '%b\e[3%bm\e[4%bm%b' \ + "$blocks" "${block_range[0]}" "${block_range[0]}" "$block_width" + ;; + + *) + printf -v blocks2 '%b\e[38;5;%bm\e[48;5;%bm%b' \ + "$blocks2" "${block_range[0]}" "${block_range[0]}" "$block_width" + ;; + esac + done + + # Convert height into spaces. + printf -v block_spaces "%${block_height}s" + + # Convert the spaces into rows of blocks. + [[ "$blocks" ]] && cols+="${block_spaces// /${blocks}nl}" + [[ "$blocks2" ]] && cols+="${block_spaces// /${blocks2}nl}" + + # Add newlines to the string. + cols=${cols%%nl} + cols=${cols//nl/ +[${text_padding}C${zws}} + + # Add block height to info height. + ((info_height+=block_range[1]>7?block_height+2:block_height+1)) + + case $col_offset in + "auto") printf '\n\e[%bC%b\n' "$text_padding" "${zws}${cols}" ;; + *) printf '\n\e[%bC%b\n' "$col_offset" "${zws}${cols}" ;; + esac + fi + + unset -v blocks blocks2 cols + + # Tell info() that we printed manually. + prin=1 +} + +# IMAGES + +image_backend() { + [[ "$image_backend" != "off" ]] && ! type -p convert &>/dev/null && \ + { image_backend="ascii"; err "Image: Imagemagick not found, falling back to ascii mode."; } + + case ${image_backend:-off} in + "ascii") print_ascii ;; + "off") image_backend="off" ;; + + "caca" | "catimg" | "chafa" | "jp2a" | "iterm2" | "termpix" |\ + "tycat" | "w3m" | "sixel" | "pixterm" | "kitty" | "pot", | "ueberzug" |\ + "viu") + get_image_source + + [[ ! -f "$image" ]] && { + to_ascii "Image: '$image_source' doesn't exist, falling back to ascii mode." + return + } + [[ "$image_backend" == "ueberzug" ]] && wait=true; + + get_window_size + + ((term_width < 1)) && { + to_ascii "Image: Failed to find terminal window size." + err "Image: Check the 'Images in the terminal' wiki page for more info," + return + } + + printf '\e[2J\e[H' + get_image_size + make_thumbnail + display_image || to_off "Image: $image_backend failed to display the image." + ;; + + *) + err "Image: Unknown image backend specified '$image_backend'." + err "Image: Valid backends are: 'ascii', 'caca', 'catimg', 'chafa', 'jp2a', 'iterm2', + 'kitty', 'off', 'sixel', 'pot', 'pixterm', 'termpix', + 'tycat', 'w3m', 'viu')" + err "Image: Falling back to ascii mode." + print_ascii + ;; + esac + + # Set cursor position next image/ascii. + [[ "$image_backend" != "off" ]] && printf '\e[%sA\e[9999999D' "${lines:-0}" +} + +print_ascii() { + if [[ -f "$image_source" && ! "$image_source" =~ (png|jpg|jpeg|jpe|svg|gif) ]]; then + ascii_data="$(< "$image_source")" + elif [[ "$image_source" == "ascii" || $image_source == auto ]]; then + : + else + ascii_data="$image_source" + fi + + # Set locale to get correct padding. + LC_ALL="$sys_locale" + + # Calculate size of ascii file in line length / line count. + while IFS=$'\n' read -r line; do + line=${line//\\\\/\\} + line=${line//█/ } + ((++lines,${#line}>ascii_len)) && ascii_len="${#line}" + done <<< "${ascii_data//\$\{??\}}" + + # Fallback if file not found. + ((lines==1)) && { + lines= + ascii_len= + image_source=auto + get_distro_ascii + print_ascii + return + } + + # Colors. + ascii_data="${ascii_data//\$\{c1\}/$c1}" + ascii_data="${ascii_data//\$\{c2\}/$c2}" + ascii_data="${ascii_data//\$\{c3\}/$c3}" + ascii_data="${ascii_data//\$\{c4\}/$c4}" + ascii_data="${ascii_data//\$\{c5\}/$c5}" + ascii_data="${ascii_data//\$\{c6\}/$c6}" + + ((text_padding=ascii_len+gap)) + printf '%b\n' "$ascii_data${reset}" + LC_ALL=C +} + +get_image_source() { + case $image_source in + "auto" | "wall" | "wallpaper") + get_wallpaper + ;; + + *) + # Get the absolute path. + image_source="$(get_full_path "$image_source")" + + if [[ -d "$image_source" ]]; then + shopt -s nullglob + files=("${image_source%/}"/*.{png,jpg,jpeg,jpe,gif,svg}) + shopt -u nullglob + image="${files[RANDOM % ${#files[@]}]}" + + else + image="$image_source" + fi + ;; + esac + + err "Image: Using image '$image'" +} + +get_wallpaper() { + case $os in + "Mac OS X"|"macOS") + image="$(osascript </dev/null && [[ -f "${HOME}/.cache/wal/wal" ]] && \ + { image="$(< "${HOME}/.cache/wal/wal")"; return; } + + case $de in + "MATE"*) + image="$(gsettings get org.mate.background picture-filename)" + ;; + + "Xfce"*) + image="$(xfconf-query -c xfce4-desktop -p \ + "/backdrop/screen0/monitor0/workspace0/last-image")" + ;; + + "Cinnamon"*) + image="$(gsettings get org.cinnamon.desktop.background picture-uri)" + image="$(decode_url "$image")" + ;; + + "GNOME"*) + image="$(gsettings get org.gnome.desktop.background picture-uri)" + image="$(decode_url "$image")" + ;; + + "Plasma"*) + image=$XDG_CONFIG_HOME/plasma-org.kde.plasma.desktop-appletsrc + image=$(awk -F '=' '$1 == "Image" { print $2 }' "$image") + ;; + + "LXQt"*) + image="$XDG_CONFIG_HOME/pcmanfm-qt/lxqt/settings.conf" + image="$(awk -F '=' '$1 == "Wallpaper" {print $2}' "$image")" + ;; + + *) + if type -p feh >/dev/null && [[ -f "${HOME}/.fehbg" ]]; then + image="$(awk -F\' '/feh/ {printf $(NF-1)}' "${HOME}/.fehbg")" + + elif type -p setroot >/dev/null && \ + [[ -f "${XDG_CONFIG_HOME}/setroot/.setroot-restore" ]]; then + image="$(awk -F\' '/setroot/ {printf $(NF-1)}' \ + "${XDG_CONFIG_HOME}/setroot/.setroot-restore")" + + elif type -p nitrogen >/dev/null; then + image="$(awk -F'=' '/file/ {printf $2;exit;}' \ + "${XDG_CONFIG_HOME}/nitrogen/bg-saved.cfg")" + + else + image="$(gsettings get org.gnome.desktop.background picture-uri)" + image="$(decode_url "$image")" + fi + ;; + esac + + # Strip un-needed info from the path. + image="${image/file:\/\/}" + image="$(trim_quotes "$image")" + ;; + esac + + # If image is an xml file, don't use it. + [[ "${image/*\./}" == "xml" ]] && image="" +} + +get_w3m_img_path() { + # Find w3m-img path. + shopt -s nullglob + w3m_paths=({/usr/{local/,},~/.nix-profile/}{lib,libexec,lib64,libexec64}/w3m/w3mi*) + shopt -u nullglob + + [[ -x "${w3m_paths[0]}" ]] && \ + { w3m_img_path="${w3m_paths[0]}"; return; } + + err "Image: w3m-img wasn't found on your system" +} + +get_window_size() { + # This functions gets the current window size in + # pixels. + # + # We first try to use the escape sequence "\033[14t" + # to get the terminal window size in pixels. If this + # fails we then fallback to using "xdotool" or other + # programs. + + # Tmux has a special way of reading escape sequences + # so we have to use a slightly different sequence to + # get the terminal size. + if [[ "$image_backend" == "tycat" ]]; then + printf '%b' '\e}qs\000' + + elif [[ -z $VTE_VERSION ]]; then + case ${TMUX:-null} in + "null") printf '%b' '\e[14t' ;; + *) printf '%b' '\ePtmux;\e\e[14t\e\\ ' ;; + esac + fi + + # The escape codes above print the desired output as + # user input so we have to use read to store the out + # -put as a variable. + # The 1 second timeout is required for older bash + # + # False positive. + # shellcheck disable=2141 + case $bash_version in + 4|5) IFS=';t' read -d t -t 0.05 -sra term_size ;; + *) IFS=';t' read -d t -t 1 -sra term_size ;; + esac + unset IFS + + # Split the string into height/width. + if [[ "$image_backend" == "tycat" ]]; then + term_width="$((term_size[2] * term_size[0]))" + term_height="$((term_size[3] * term_size[1]))" + + else + term_height="${term_size[1]}" + term_width="${term_size[2]}" + fi + + # Get terminal width/height. + if (( "${term_width:-0}" < 50 )) && [[ "$DISPLAY" && $os != "Mac OS X" && $os != "macOS" ]]; then + if type -p xdotool &>/dev/null; then + IFS=$'\n' read -d "" -ra win \ + <<< "$(xdotool getactivewindow getwindowgeometry --shell %1)" + term_width="${win[3]/WIDTH=}" + term_height="${win[4]/HEIGHT=}" + + elif type -p xwininfo &>/dev/null; then + # Get the focused window's ID. + if type -p xdo &>/dev/null; then + current_window="$(xdo id)" + + elif type -p xprop &>/dev/null; then + current_window="$(xprop -root _NET_ACTIVE_WINDOW)" + current_window="${current_window##* }" + + elif type -p xdpyinfo &>/dev/null; then + current_window="$(xdpyinfo | grep -F "focus:")" + current_window="${current_window/*window }" + current_window="${current_window/,*}" + fi + + # If the ID was found get the window size. + if [[ "$current_window" ]]; then + term_size=("$(xwininfo -id "$current_window")") + term_width="${term_size[0]#*Width: }" + term_width="${term_width/$'\n'*}" + term_height="${term_size[0]/*Height: }" + term_height="${term_height/$'\n'*}" + fi + fi + fi + + term_width="${term_width:-0}" +} + + +get_term_size() { + # Get the terminal size in cells. + read -r lines columns <<< "$(stty size)" + + # Calculate font size. + font_width="$((term_width / columns))" + font_height="$((term_height / lines))" +} + +get_image_size() { + # This functions determines the size to make the thumbnail image. + get_term_size + + case $image_size in + "auto") + image_size="$((columns * font_width / 2))" + term_height="$((term_height - term_height / 4))" + + ((term_height < image_size)) && \ + image_size="$term_height" + ;; + + *"%") + percent="${image_size/\%}" + image_size="$((percent * term_width / 100))" + + (((percent * term_height / 50) < image_size)) && \ + image_size="$((percent * term_height / 100))" + ;; + + "none") + # Get image size so that we can do a better crop. + read -r width height <<< "$(identify -format "%w %h" "$image")" + + while ((width >= (term_width / 2) || height >= term_height)); do + ((width=width/2,height=height/2)) + done + + crop_mode="none" + ;; + + *) image_size="${image_size/px}" ;; + esac + + # Check for terminal padding. + [[ "$image_backend" == "w3m" ]] && term_padding + + width="${width:-$image_size}" + height="${height:-$image_size}" + text_padding="$(((width + padding + xoffset) / font_width + gap))" +} + +make_thumbnail() { + # Name the thumbnail using variables so we can + # use it later. + image_name="${crop_mode}-${crop_offset}-${width}-${height}-${image//\/}" + + # Handle file extensions. + case ${image##*.} in + "eps"|"pdf"|"svg"|"gif"|"png") + image_name+=".png" ;; + *) image_name+=".jpg" ;; + esac + + # Create the thumbnail dir if it doesn't exist. + mkdir -p "${thumbnail_dir:=${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch}" + + if [[ ! -f "${thumbnail_dir}/${image_name}" ]]; then + # Get image size so that we can do a better crop. + [[ -z "$size" ]] && { + read -r og_width og_height <<< "$(identify -format "%w %h" "$image")" + ((og_height > og_width)) && size="$og_width" || size="$og_height" + } + + case $crop_mode in + "fit") + c="$(convert "$image" \ + -colorspace srgb \ + -format "%[pixel:p{0,0}]" info:)" + + convert \ + -background none \ + "$image" \ + -trim +repage \ + -gravity south \ + -background "$c" \ + -extent "${size}x${size}" \ + -scale "${width}x${height}" \ + "${thumbnail_dir}/${image_name}" + ;; + + "fill") + convert \ + -background none \ + "$image" \ + -trim +repage \ + -scale "${width}x${height}^" \ + -extent "${width}x${height}" \ + "${thumbnail_dir}/${image_name}" + ;; + + "none") + cp "$image" "${thumbnail_dir}/${image_name}" + ;; + + *) + convert \ + -background none \ + "$image" \ + -strip \ + -gravity "$crop_offset" \ + -crop "${size}x${size}+0+0" \ + -scale "${width}x${height}" \ + "${thumbnail_dir}/${image_name}" + ;; + esac + fi + + # The final image. + image="${thumbnail_dir}/${image_name}" +} + +display_image() { + case $image_backend in + "caca") + img2txt \ + -W "$((width / font_width))" \ + -H "$((height / font_height))" \ + --gamma=0.6 \ + "$image" + ;; + + + "ueberzug") + if [ "$wait" = true ];then + wait=false; + else + ueberzug layer --parser bash 0< <( + declare -Ap ADD=(\ + [action]="add"\ + [identifier]="neofetch"\ + [x]=$xoffset [y]=$yoffset\ + [path]=$image\ + ) + read -rs + ) + fi + ;; + + "catimg") + catimg -w "$((width*catimg_size / font_width))" -r "$catimg_size" "$image" + ;; + + "chafa") + chafa --stretch --size="$((width / font_width))x$((height / font_height))" "$image" + ;; + + "jp2a") + jp2a \ + --colors \ + --width="$((width / font_width))" \ + --height="$((height / font_height))" \ + "$image" + ;; + + "kitty") + kitty +kitten icat \ + --align left \ + --place "$((width/font_width))x$((height/font_height))@${xoffset}x${yoffset}" \ + "$image" + ;; + + "pot") + pot \ + "$image" \ + --size="$((width / font_width))x$((height / font_height))" + ;; + + "pixterm") + pixterm \ + -tc "$((width / font_width))" \ + -tr "$((height / font_height))" \ + "$image" + ;; + + "sixel") + img2sixel \ + -w "$width" \ + -h "$height" \ + "$image" + ;; + + "termpix") + termpix \ + --width "$((width / font_width))" \ + --height "$((height / font_height))" \ + "$image" + ;; + + "iterm2") + printf -v iterm_cmd '\e]1337;File=width=%spx;height=%spx;inline=1:%s' \ + "$width" "$height" "$(base64 < "$image")" + + # Tmux requires an additional escape sequence for this to work. + [[ -n "$TMUX" ]] && printf -v iterm_cmd '\ePtmux;\e%b\e'\\ "$iterm_cmd" + + printf '%b\a\n' "$iterm_cmd" + ;; + + "tycat") + tycat \ + -g "${width}x${height}" \ + "$image" + ;; + + "viu") + viu \ + -t -w "$((width / font_width))" -h "$((height / font_height))" \ + "$image" + ;; + + "w3m") + get_w3m_img_path + zws='\xE2\x80\x8B\x20' + + # Add a tiny delay to fix issues with images not + # appearing in specific terminal emulators. + ((bash_version>3)) && sleep 0.05 + printf '%b\n%s;\n%s\n' "0;1;$xoffset;$yoffset;$width;$height;;;;;$image" 3 4 |\ + "${w3m_img_path:-false}" -bg "$background_color" &>/dev/null + ;; + esac +} + +to_ascii() { + err "$1" + image_backend="ascii" + print_ascii + + # Set cursor position next image/ascii. + printf '\e[%sA\e[9999999D' "${lines:-0}" +} + +to_off() { + err "$1" + image_backend="off" + text_padding= +} + + +# TEXT FORMATTING + +info() { + # Save subtitle value. + [[ "$2" ]] && subtitle="$1" + + # Make sure that $prin is unset. + unset -v prin + + # Call the function. + "get_${2:-$1}" + + # If the get_func function called 'prin' directly, stop here. + [[ "$prin" ]] && return + + # Update the variable. + if [[ "$2" ]]; then + output="$(trim "${!2}")" + else + output="$(trim "${!1}")" + fi + + if [[ "$2" && "${output// }" ]]; then + prin "$1" "$output" + + elif [[ "${output// }" ]]; then + prin "$output" + + else + err "Info: Couldn't detect ${1}." + fi + + unset -v subtitle +} + +prin() { + # If $2 doesn't exist we format $1 as info. + if [[ "$(trim "$1")" && "$2" ]]; then + [[ "$json" ]] && { printf ' %s\n' "\"${1}\": \"${2}\","; return; } + + string="${1}${2:+: $2}" + else + string="${2:-$1}" + local subtitle_color="$info_color" + fi + + string="$(trim "${string//$'\e[0m'}")" + length="$(strip_sequences "$string")" + length="${#length}" + + # Format the output. + string="${string/:/${reset}${colon_color}${separator:=:}${info_color}}" + string="${subtitle_color}${bold}${string}" + + # Print the info. + printf '%b\n' "${text_padding:+\e[${text_padding}C}${zws}${string//\\n}${reset} " + + # Calculate info height. + ((++info_height)) + + # Log that prin was used. + prin=1 +} + +get_underline() { + [[ "$underline_enabled" == "on" ]] && { + printf -v underline "%${length}s" + printf '%b%b\n' "${text_padding:+\e[${text_padding}C}${zws}${underline_color}" \ + "${underline// /$underline_char}${reset} " + } + + ((++info_height)) + length= + prin=1 +} + +get_bold() { + case $ascii_bold in + "on") ascii_bold='\e[1m' ;; + "off") ascii_bold="" ;; + esac + + case $bold in + "on") bold='\e[1m' ;; + "off") bold="" ;; + esac +} + +trim() { + set -f + # shellcheck disable=2048,2086 + set -- $* + printf '%s\n' "${*//[[:space:]]/}" + set +f +} + +trim_quotes() { + trim_output="${1//\'}" + trim_output="${trim_output//\"}" + printf "%s" "$trim_output" +} + +strip_sequences() { + strip="${1//$'\e['3[0-9]m}" + strip="${strip//$'\e['[0-9]m}" + strip="${strip//\\e\[[0-9]m}" + strip="${strip//$'\e['38\;5\;[0-9]m}" + strip="${strip//$'\e['38\;5\;[0-9][0-9]m}" + strip="${strip//$'\e['38\;5\;[0-9][0-9][0-9]m}" + + printf '%s\n' "$strip" +} + +# COLORS + +set_colors() { + c1="$(color "$1")${ascii_bold}" + c2="$(color "$2")${ascii_bold}" + c3="$(color "$3")${ascii_bold}" + c4="$(color "$4")${ascii_bold}" + c5="$(color "$5")${ascii_bold}" + c6="$(color "$6")${ascii_bold}" + + [[ "$color_text" != "off" ]] && set_text_colors "$@" +} + +set_text_colors() { + if [[ "${colors[0]}" == "distro" ]]; then + title_color="$(color "$1")" + at_color="$reset" + underline_color="$reset" + subtitle_color="$(color "$2")" + colon_color="$reset" + info_color="$reset" + + # If the ascii art uses 8 as a color, make the text the fg. + ((${1:-1} == 8)) && title_color="$reset" + ((${2:-7} == 8)) && subtitle_color="$reset" + + # If the second color is white use the first for the subtitle. + ((${2:-7} == 7)) && subtitle_color="$(color "$1")" + ((${1:-1} == 7)) && title_color="$reset" + else + title_color="$(color "${colors[0]}")" + at_color="$(color "${colors[1]}")" + underline_color="$(color "${colors[2]}")" + subtitle_color="$(color "${colors[3]}")" + colon_color="$(color "${colors[4]}")" + info_color="$(color "${colors[5]}")" + fi + + # Bar colors. + if [[ "$bar_color_elapsed" == "distro" ]]; then + bar_color_elapsed="$(color fg)" + else + bar_color_elapsed="$(color "$bar_color_elapsed")" + fi + + case ${bar_color_total}${1} in + distro[736]) bar_color_total=$(color "$1") ;; + distro[0-9]) bar_color_total=$(color "$2") ;; + *) bar_color_total=$(color "$bar_color_total") ;; + esac +} + +color() { + case $1 in + [0-6]) printf '%b\e[3%sm' "$reset" "$1" ;; + 7 | "fg") printf '\e[37m%b' "$reset" ;; + *) printf '\e[38;5;%bm' "$1" ;; + esac +} + +# OTHER + +stdout() { + image_backend="off" + unset subtitle_color colon_color info_color underline_color bold title_color at_color \ + text_padding zws reset color_blocks bar_color_elapsed bar_color_total \ + c1 c2 c3 c4 c5 c6 c7 c8 +} + +err() { + err+="$(color 1)[!]${reset} $1 +" +} + +get_full_path() { + # This function finds the absolute path from a relative one. + # For example "Pictures/Wallpapers" --> "/home/dylan/Pictures/Wallpapers" + + # If the file exists in the current directory, stop here. + [[ -f "${PWD}/${1}" ]] && { printf '%s\n' "${PWD}/${1}"; return; } + + ! cd "${1%/*}" && { + err "Error: Directory '${1%/*}' doesn't exist or is inaccessible" + err " Check that the directory exists or try another directory." + exit 1 + } + + local full_dir="${1##*/}" + + # Iterate down a (possible) chain of symlinks. + while [[ -L "$full_dir" ]]; do + full_dir="$(readlink "$full_dir")" + cd "${full_dir%/*}" || exit + full_dir="${full_dir##*/}" + done + + # Final directory. + full_dir="$(pwd -P)/${1/*\/}" + + [[ -e "$full_dir" ]] && printf '%s\n' "$full_dir" +} + +get_user_config() { + # --config /path/to/config.conf + if [[ -f "$config_file" ]]; then + source "$config_file" + err "Config: Sourced user config. (${config_file})" + return + + elif [[ -f "${XDG_CONFIG_HOME}/neofetch/config.conf" ]]; then + source "${XDG_CONFIG_HOME}/neofetch/config.conf" + err "Config: Sourced user config. (${XDG_CONFIG_HOME}/neofetch/config.conf)" + + elif [[ -f "${XDG_CONFIG_HOME}/neofetch/config" ]]; then + source "${XDG_CONFIG_HOME}/neofetch/config" + err "Config: Sourced user config. (${XDG_CONFIG_HOME}/neofetch/config)" + + elif [[ -z "$no_config" ]]; then + config_file="${XDG_CONFIG_HOME}/neofetch/config.conf" + + # The config file doesn't exist, create it. + mkdir -p "${XDG_CONFIG_HOME}/neofetch/" + printf '%s\n' "$config" > "$config_file" + fi +} + +bar() { + # Get the values. + elapsed="$(($1 * bar_length / $2))" + + # Create the bar with spaces. + printf -v prog "%${elapsed}s" + printf -v total "%$((bar_length - elapsed))s" + + # Set the colors and swap the spaces for $bar_char_. + bar+="${bar_color_elapsed}${prog// /${bar_char_elapsed}}" + bar+="${bar_color_total}${total// /${bar_char_total}}" + + # Borders. + [[ "$bar_border" == "on" ]] && \ + bar="$(color fg)[${bar}$(color fg)]" + + printf "%b" "${bar}${info_color}" +} + +cache() { + if [[ "$2" ]]; then + mkdir -p "${cache_dir}/neofetch" + printf "%s" "${1/*-}=\"$2\"" > "${cache_dir}/neofetch/${1/*-}" + fi +} + +get_cache_dir() { + case $os in + "Mac OS X"|"macOS") cache_dir="/Library/Caches" ;; + *) cache_dir="/tmp" ;; + esac +} + +kde_config_dir() { + # If the user is using KDE get the KDE + # configuration directory. + if [[ "$kde_config_dir" ]]; then + return + + elif type -p kf5-config &>/dev/null; then + kde_config_dir="$(kf5-config --path config)" + + elif type -p kde4-config &>/dev/null; then + kde_config_dir="$(kde4-config --path config)" + + elif type -p kde-config &>/dev/null; then + kde_config_dir="$(kde-config --path config)" + + elif [[ -d "${HOME}/.kde4" ]]; then + kde_config_dir="${HOME}/.kde4/share/config" + + elif [[ -d "${HOME}/.kde3" ]]; then + kde_config_dir="${HOME}/.kde3/share/config" + fi + + kde_config_dir="${kde_config_dir/$'/:'*}" +} + +term_padding() { + # Get terminal padding to properly align cursor. + [[ -z "$term" ]] && get_term + + case $term in + urxvt*|rxvt-unicode) + [[ $xrdb ]] || xrdb=$(xrdb -query) + + [[ $xrdb != *internalBorder:* ]] && + return + + padding=${xrdb/*internalBorder:} + padding=${padding/$'\n'*} + + [[ $padding =~ ^[0-9]+$ ]] || + padding= + ;; + esac +} + +dynamic_prompt() { + [[ "$image_backend" == "off" ]] && { printf '\n'; return; } + [[ "$image_backend" != "ascii" ]] && ((lines=(height + yoffset) / font_height + 1)) + [[ "$image_backend" == "w3m" ]] && ((lines=lines + padding / font_height + 1)) + + # If the ascii art is taller than the info. + ((lines=lines>info_height?lines-info_height+1:1)) + + printf -v nlines "%${lines}s" + printf "%b" "${nlines// /\\n}" +} + +cache_uname() { + # Cache the output of uname so we don't + # have to spawn it multiple times. + IFS=" " read -ra uname <<< "$(uname -srm)" + + kernel_name="${uname[0]}" + kernel_version="${uname[1]}" + kernel_machine="${uname[2]}" + + if [[ "$kernel_name" == "Darwin" ]]; then + # macOS can report incorrect versions unless this is 0. + # https://github.com/dylanaraps/neofetch/issues/1607 + export SYSTEM_VERSION_COMPAT=0 + + IFS=$'\n' read -d "" -ra sw_vers <<< "$(awk -F'<|>' '/key|string/ {print $3}' \ + "/System/Library/CoreServices/SystemVersion.plist")" + for ((i=0;i<${#sw_vers[@]};i+=2)) { + case ${sw_vers[i]} in + ProductName) darwin_name=${sw_vers[i+1]} ;; + ProductVersion) osx_version=${sw_vers[i+1]} ;; + ProductBuildVersion) osx_build=${sw_vers[i+1]} ;; + esac + } + fi +} + +get_ppid() { + # Get parent process ID of PID. + case $os in + "Windows") + ppid="$(ps -p "${1:-$PPID}" | awk '{printf $2}')" + ppid="${ppid/PPID}" + ;; + + "Linux") + ppid="$(grep -i -F "PPid:" "/proc/${1:-$PPID}/status")" + ppid="$(trim "${ppid/PPid:}")" + ;; + + *) + ppid="$(ps -p "${1:-$PPID}" -o ppid=)" + ;; + esac + + printf "%s" "$ppid" +} + +get_process_name() { + # Get PID name. + case $os in + "Windows") + name="$(ps -p "${1:-$PPID}" | awk '{printf $8}')" + name="${name/COMMAND}" + name="${name/*\/}" + ;; + + "Linux") + name="$(< "/proc/${1:-$PPID}/comm")" + ;; + + *) + name="$(ps -p "${1:-$PPID}" -o comm=)" + ;; + esac + + printf "%s" "$name" +} + +decode_url() { + decode="${1//+/ }" + printf "%b" "${decode//%/\\x}" +} + +# FINISH UP + +usage() { printf "%s" "\ +Usage: neofetch func_name --option \"value\" --option \"value\" + +Neofetch is a CLI system information tool written in BASH. Neofetch +displays information about your system next to an image, your OS logo, +or any ASCII file of your choice. + +NOTE: Every launch flag has a config option. + +Options: + +INFO: + func_name Specify a function name (second part of info() from config) to + quickly display only that function's information. + + Example: neofetch uptime --uptime_shorthand tiny + + Example: neofetch uptime disk wm memory + + This can be used in bars and scripts like so: + + memory=\"\$(neofetch memory)\"; memory=\"\${memory##*: }\" + + For multiple outputs at once (each line of info in an array): + + IFS=\$'\\n' read -d \"\" -ra info < <(neofetch memory uptime wm) + + info=(\"\${info[@]##*: }\") + + --disable infoname Allows you to disable an info line from appearing + in the output. 'infoname' is the function name from the + 'print_info()' function inside the config file. + For example: 'info \"Memory\" memory' would be '--disable memory' + + NOTE: You can supply multiple args. eg. 'neofetch --disable cpu gpu' + + --title_fqdn on/off Hide/Show Fully Qualified Domain Name in title. + --package_managers on/off Hide/Show Package Manager names . (on, tiny, off) + --os_arch on/off Hide/Show OS architecture. + --speed_type type Change the type of cpu speed to display. + Possible values: current, min, max, bios, + scaling_current, scaling_min, scaling_max + + NOTE: This only supports Linux with cpufreq. + + --speed_shorthand on/off Whether or not to show decimals in CPU speed. + + NOTE: This flag is not supported in systems with CPU speed less than + 1 GHz. + + --cpu_brand on/off Enable/Disable CPU brand in output. + --cpu_cores type Whether or not to display the number of CPU cores + Possible values: logical, physical, off + + NOTE: 'physical' doesn't work on BSD. + + --cpu_speed on/off Hide/Show cpu speed. + --cpu_temp C/F/off Hide/Show cpu temperature. + + NOTE: This only works on Linux and BSD. + + NOTE: For FreeBSD and NetBSD-based systems, you need to enable + coretemp kernel module. This only supports newer Intel processors. + + --distro_shorthand on/off Shorten the output of distro (on, tiny, off) + + NOTE: This option won't work in Windows (Cygwin) + + --kernel_shorthand on/off Shorten the output of kernel + + NOTE: This option won't work in BSDs (except PacBSD and PC-BSD) + + --uptime_shorthand on/off Shorten the output of uptime (on, tiny, off) + --refresh_rate on/off Whether to display the refresh rate of each monitor + Unsupported on Windows + --gpu_brand on/off Enable/Disable GPU brand in output. (AMD/NVIDIA/Intel) + --gpu_type type Which GPU to display. (all, dedicated, integrated) + + NOTE: This only supports Linux. + + --de_version on/off Show/Hide Desktop Environment version + --gtk_shorthand on/off Shorten output of gtk theme/icons + --gtk2 on/off Enable/Disable gtk2 theme/font/icons output + --gtk3 on/off Enable/Disable gtk3 theme/font/icons output + --shell_path on/off Enable/Disable showing \$SHELL path + --shell_version on/off Enable/Disable showing \$SHELL version + --disk_show value Which disks to display. + Possible values: '/', '/dev/sdXX', '/path/to/mount point' + + NOTE: Multiple values can be given. (--disk_show '/' '/dev/sdc1') + + --disk_subtitle type What information to append to the Disk subtitle. + Takes: name, mount, dir, none + + 'name' shows the disk's name (sda1, sda2, etc) + + 'mount' shows the disk's mount point (/, /mnt/Local Disk, etc) + + 'dir' shows the basename of the disks's path. (/, Local Disk, etc) + + 'none' shows only 'Disk' or the configured title. + + --disk_percent on/off Hide/Show disk percent. + + --ip_host url URL to query for public IP + --ip_timeout int Public IP timeout (in seconds). + --ip_interface value Interface(s) to use for local IP + --song_format format Print the song data in a specific format (see config file). + --song_shorthand on/off Print the Artist/Album/Title on separate lines. + --memory_percent on/off Display memory percentage. + --memory_unit kib/mib/gib Memory output unit. + --music_player player-name Manually specify a player to use. + Available values are listed in the config file + +TEXT FORMATTING: + --colors x x x x x x Changes the text colors in this order: + title, @, underline, subtitle, colon, info + --underline on/off Enable/Disable the underline. + --underline_char char Character to use when underlining title + --bold on/off Enable/Disable bold text + --separator string Changes the default ':' separator to the specified string. + +COLOR BLOCKS: + --color_blocks on/off Enable/Disable the color blocks + --col_offset auto/num Left-padding of color blocks + --block_width num Width of color blocks in spaces + --block_height num Height of color blocks in lines + --block_range num num Range of colors to print as blocks + +BARS: + --bar_char 'elapsed char' 'total char' + Characters to use when drawing bars. + --bar_border on/off Whether or not to surround the bar with '[]' + --bar_length num Length in spaces to make the bars. + --bar_colors num num Colors to make the bar. + Set in this order: elapsed, total + --memory_display mode Bar mode. + Possible values: bar, infobar, barinfo, off + --battery_display mode Bar mode. + Possible values: bar, infobar, barinfo, off + --disk_display mode Bar mode. + Possible values: bar, infobar, barinfo, off + +IMAGE BACKEND: + --backend backend Which image backend to use. + Possible values: 'ascii', 'caca', 'catimg', 'chafa', 'jp2a', + 'iterm2', 'off', 'sixel', 'tycat', 'w3m', 'kitty', 'viu' + --source source Which image or ascii file to use. + Possible values: 'auto', 'ascii', 'wallpaper', '/path/to/img', + '/path/to/ascii', '/path/to/dir/', 'command output' [ascii] + + --ascii source Shortcut to use 'ascii' backend. + + NEW: neofetch --ascii \"\$(fortune | cowsay -W 30)\" + + --caca source Shortcut to use 'caca' backend. + --catimg source Shortcut to use 'catimg' backend. + --chafa source Shortcut to use 'chafa' backend. + --iterm2 source Shortcut to use 'iterm2' backend. + --jp2a source Shortcut to use 'jp2a' backend. + --kitty source Shortcut to use 'kitty' backend. + --pot source Shortcut to use 'pot' backend. + --pixterm source Shortcut to use 'pixterm' backend. + --sixel source Shortcut to use 'sixel' backend. + --termpix source Shortcut to use 'termpix' backend. + --tycat source Shortcut to use 'tycat' backend. + --w3m source Shortcut to use 'w3m' backend. + --ueberzug source Shortcut to use 'ueberzug' backend + --viu source Shortcut to use 'viu' backend + --off Shortcut to use 'off' backend (Disable ascii art). + + NOTE: 'source; can be any of the following: 'auto', 'ascii', 'wallpaper', '/path/to/img', + '/path/to/ascii', '/path/to/dir/' + +ASCII: + --ascii_colors x x x x x x Colors to print the ascii art + --ascii_distro distro Which Distro's ascii art to print + + NOTE: AIX, Hash, Alpine, AlterLinux, Amazon, Anarchy, Android, + instantOS, Antergos, antiX, \"AOSC OS\", \"AOSC OS/Retro\", + Apricity, ArchCraft, ArcoLinux, ArchBox, ARCHlabs, ArchStrike, + XFerience, ArchMerge, Arch, Artix, Arya, Bedrock, Bitrig, + BlackArch, BLAG, BlankOn, BlueLight, Bodhi, bonsai, BSD, BunsenLabs, + Calculate, Carbs, CentOS, Chakra, ChaletOS, Chapeau, Chrom, + Cleanjaro, ClearOS, Clear_Linux, Clover, Condres, Container_Linux, + Crystal Linux, CRUX, Cucumber, dahlia, Debian, Deepin, DesaOS, Devuan, + DracOS, DarkOs, Itc, DragonFly, Drauger, Elementary, EndeavourOS, Endless, + EuroLinux, Exherbo, Fedora, Feren, FreeBSD, FreeMiNT, Frugalware, + Funtoo, GalliumOS, Garuda, Gentoo, Pentoo, gNewSense, GNOME, GNU, + GoboLinux, Grombyang, Guix, Haiku, Huayra, Hyperbola, iglunix, janus, Kali, Drunk, + KaOS, KDE_neon, Kibojoe, Kogaion, Korora, KSLinux, Kubuntu, LEDE, + LaxerOS, LibreELEC, LFS, Linux_Lite, LMDE, Lubuntu, Lunar, macos, + Mageia, MagpieOS, Mandriva, Manjaro, TeArch, Maui, Mer, Minix, LinuxMint, + Live_Raizo, MX_Linux, Namib, Neptune, NetBSD, Netrunner, Nitrux, + NixOS, Nurunner, NuTyX, OBRevenge, OpenBSD, openEuler, OpenIndiana, + openmamba, OpenMandriva, OpenStage, OpenWrt, osmc, Oracle, + OS Elbrus, PacBSD, Parabola, Pardus, Parrot, Parsix, TrueOS, + PCLinuxOS, Pengwin, Peppermint, Pisi, popos, Porteus, PostMarketOS, + Proxmox, PuffOS, Puppy, PureOS, Qubes, Quibian, Radix, Raspbian, Reborn_OS, + Redstar, Redcore, Redhat, Refracted_Devuan, Regata, Regolith, Rosa, + sabotage, Sabayon, Sailfish, SalentOS, Scientific, Septor, + SereneLinux, SharkLinux, Siduction, Slackware, SliTaz, SmartOS, + Solus, Source_Mage, Sparky, Star, SteamOS, SunOS, openSUSE_Leap, + t2, openSUSE_Tumbleweed, openSUSE, SwagArch, Tails, Trisquel, + Ubuntu-Cinnamon, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, + Ubuntu-Studio, Ubuntu, Univention, Venom, Void, VNux, LangitKetujuh, semc, + Obarun, windows10, Windows7, Xubuntu, Zorin, and IRIX have ascii logos. + + NOTE: Arch, Ubuntu, Redhat, Fedora and Dragonfly have 'old' logo variants. + + NOTE: Use '{distro name}_old' to use the old logos. + + NOTE: Ubuntu has flavor variants. + + NOTE: Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME, + Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors. + + NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu, + CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android, + Artix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola, + Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS, + Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian, + postmarketOS, and Void have a smaller logo variant. + + NOTE: Use '{distro name}_small' to use the small variants. + + --ascii_bold on/off Whether or not to bold the ascii logo. + -L, --logo Hide the info text and only show the ascii logo. + +IMAGE: + --loop Redraw the image constantly until Ctrl+C is used. This fixes issues + in some terminals emulators when using image mode. + --size 00px | --size 00% How to size the image. + Possible values: auto, 00px, 00%, none + --catimg_size 1/2 Change the resolution of catimg. + --crop_mode mode Which crop mode to use + Takes the values: normal, fit, fill + --crop_offset value Change the crop offset for normal mode. + Possible values: northwest, north, northeast, + west, center, east, southwest, south, southeast + + --xoffset px How close the image will be to the left edge of the + window. This only works with w3m. + --yoffset px How close the image will be to the top edge of the + window. This only works with w3m. + --bg_color color Background color to display behind transparent image. + This only works with w3m. + --gap num Gap between image and text. + + NOTE: --gap can take a negative value which will move the text + closer to the left side. + + --clean Delete cached files and thumbnails. + +OTHER: + --config /path/to/config Specify a path to a custom config file + --config none Launch the script without a config file + --no_config Don't create the user config file. + --print_config Print the default config file to stdout. + --stdout Turn off all colors and disables any ASCII/image backend. + --help Print this text and exit + --version Show neofetch version + -v Display error messages. + -vv Display a verbose log for error reporting. + +DEVELOPER: + --gen-man Generate a manpage for Neofetch in your PWD. (Requires GNU help2man) + + +Report bugs to https://github.com/dylanaraps/neofetch/issues + +" +exit 1 +} + +get_args() { + # Check the commandline flags early for '--config'. + [[ "$*" != *--config* && "$*" != *--no_config* ]] && get_user_config + + while [[ "$1" ]]; do + case $1 in + # Info + "--title_fqdn") title_fqdn="$2" ;; + "--package_managers") package_managers="$2" ;; + "--os_arch") os_arch="$2" ;; + "--cpu_cores") cpu_cores="$2" ;; + "--cpu_speed") cpu_speed="$2" ;; + "--speed_type") speed_type="$2" ;; + "--speed_shorthand") speed_shorthand="$2" ;; + "--distro_shorthand") distro_shorthand="$2" ;; + "--kernel_shorthand") kernel_shorthand="$2" ;; + "--uptime_shorthand") uptime_shorthand="$2" ;; + "--cpu_brand") cpu_brand="$2" ;; + "--gpu_brand") gpu_brand="$2" ;; + "--gpu_type") gpu_type="$2" ;; + "--refresh_rate") refresh_rate="$2" ;; + "--de_version") de_version="$2" ;; + "--gtk_shorthand") gtk_shorthand="$2" ;; + "--gtk2") gtk2="$2" ;; + "--gtk3") gtk3="$2" ;; + "--shell_path") shell_path="$2" ;; + "--shell_version") shell_version="$2" ;; + "--ip_host") public_ip_host="$2" ;; + "--ip_timeout") public_ip_timeout="$2" ;; + "--ip_interface") + unset local_ip_interface + for arg in "$@"; do + case "$arg" in + "--ip_interface") ;; + "-"*) break ;; + *) local_ip_interface+=("$arg") ;; + esac + done + ;; + + "--song_format") song_format="$2" ;; + "--song_shorthand") song_shorthand="$2" ;; + "--music_player") music_player="$2" ;; + "--memory_percent") memory_percent="$2" ;; + "--memory_unit") memory_unit="$2" ;; + "--cpu_temp") + cpu_temp="$2" + [[ "$cpu_temp" == "on" ]] && cpu_temp="C" + ;; + + "--disk_subtitle") disk_subtitle="$2" ;; + "--disk_percent") disk_percent="$2" ;; + "--disk_show") + unset disk_show + for arg in "$@"; do + case $arg in + "--disk_show") ;; + "-"*) break ;; + *) disk_show+=("$arg") ;; + esac + done + ;; + + "--disable") + for func in "$@"; do + case $func in + "--disable") continue ;; + "-"*) break ;; + *) + ((bash_version >= 4)) && func="${func,,}" + unset -f "get_$func" + ;; + esac + done + ;; + + # Text Colors + "--colors") + unset colors + for arg in "$2" "$3" "$4" "$5" "$6" "$7"; do + case $arg in + "-"*) break ;; + *) colors+=("$arg") ;; + esac + done + colors+=(7 7 7 7 7 7) + ;; + + # Text Formatting + "--underline") underline_enabled="$2" ;; + "--underline_char") underline_char="$2" ;; + "--bold") bold="$2" ;; + "--separator") separator="$2" ;; + + # Color Blocks + "--color_blocks") color_blocks="$2" ;; + "--block_range") block_range=("$2" "$3") ;; + "--block_width") block_width="$2" ;; + "--block_height") block_height="$2" ;; + "--col_offset") col_offset="$2" ;; + + # Bars + "--bar_char") + bar_char_elapsed="$2" + bar_char_total="$3" + ;; + + "--bar_border") bar_border="$2" ;; + "--bar_length") bar_length="$2" ;; + "--bar_colors") + bar_color_elapsed="$2" + bar_color_total="$3" + ;; + + "--memory_display") memory_display="$2" ;; + "--battery_display") battery_display="$2" ;; + "--disk_display") disk_display="$2" ;; + + # Image backend + "--backend") image_backend="$2" ;; + "--source") image_source="$2" ;; + "--ascii" | "--caca" | "--catimg" | "--chafa" | "--jp2a" | "--iterm2" | "--off" |\ + "--pot" | "--pixterm" | "--sixel" | "--termpix" | "--tycat" | "--w3m" | "--kitty" |\ + "--ueberzug" | "--viu") + image_backend="${1/--}" + case $2 in + "-"* | "") ;; + *) image_source="$2" ;; + esac + ;; + + # Image options + "--loop") image_loop="on" ;; + "--image_size" | "--size") image_size="$2" ;; + "--catimg_size") catimg_size="$2" ;; + "--crop_mode") crop_mode="$2" ;; + "--crop_offset") crop_offset="$2" ;; + "--xoffset") xoffset="$2" ;; + "--yoffset") yoffset="$2" ;; + "--background_color" | "--bg_color") background_color="$2" ;; + "--gap") gap="$2" ;; + "--clean") + [[ -d "$thumbnail_dir" ]] && rm -rf "$thumbnail_dir" + rm -rf "/Library/Caches/neofetch/" + rm -rf "/tmp/neofetch/" + exit + ;; + + "--ascii_colors") + unset ascii_colors + for arg in "$2" "$3" "$4" "$5" "$6" "$7"; do + case $arg in + "-"*) break ;; + *) ascii_colors+=("$arg") + esac + done + ascii_colors+=(7 7 7 7 7 7) + ;; + + "--ascii_distro") + image_backend="ascii" + ascii_distro="$2" + ;; + + "--ascii_bold") ascii_bold="$2" ;; + "--logo" | "-L") + image_backend="ascii" + print_info() { printf '\n'; } + ;; + + # Other + "--config") + case $2 in + "none" | "off" | "") ;; + *) + config_file="$(get_full_path "$2")" + get_user_config + ;; + esac + ;; + "--no_config") no_config="on" ;; + "--stdout") stdout="on" ;; + "-v") verbose="on" ;; + "--print_config") printf '%s\n' "$config"; exit ;; + "-vv") set -x; verbose="on" ;; + "--help") usage ;; + "--version") + printf '%s\n' "Neofetch $version" + exit 1 + ;; + "--gen-man") + help2man -n "A fast, highly customizable system info script" \ + -N ./neofetch -o neofetch.1 + exit 1 + ;; + + "--json") + json="on" + unset -f get_title get_cols get_underline + + printf '{\n' + print_info 2>/dev/null + printf ' %s\n' "\"Version\": \"${version}\"" + printf '}\n' + exit + ;; + + "--travis") + print_info() { + info title + info underline + + info "OS" distro + info "Host" model + info "Kernel" kernel + info "Uptime" uptime + info "Packages" packages + info "Shell" shell + info "Resolution" resolution + info "DE" de + info "WM" wm + info "WM Theme" wm_theme + info "Theme" theme + info "Icons" icons + info "Terminal" term + info "Terminal Font" term_font + info "CPU" cpu + info "GPU" gpu + info "GPU Driver" gpu_driver + info "Memory" memory + + info "Disk" disk + info "Battery" battery + info "Font" font + info "Song" song + info "Local IP" local_ip + info "Public IP" public_ip + info "Users" users + + info cols + + # Testing. + prin "prin" + prin "prin" "prin" + + # Testing no subtitles. + info uptime + info disk + } + + refresh_rate="on" + shell_version="on" + memory_display="infobar" + disk_display="infobar" + cpu_temp="C" + + # Known implicit unused variables. + mpc_args=() + printf '%s\n' "$kernel $icons $font $battery $locale ${mpc_args[*]}" + ;; + esac + + shift + done +} + +get_simple() { + while [[ "$1" ]]; do + [[ "$(type -t "get_$1")" == "function" ]] && { + get_distro + stdout + simple=1 + info "$1" "$1" + } + shift + done + ((simple)) && exit +} + +old_functions() { + # Removed functions for backwards compatibility. + get_line_break() { :; } + get_cpu_usage() { :; } +} + +get_distro_ascii() { + # This function gets the distro ascii art and colors. + # + # $ascii_distro is the same as $distro. + case $(trim "$ascii_distro") in + "AIX"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} `:+ssssossossss+-` + .oys///oyhddddhyo///sy+. + /yo:+hNNNNNNNNNNNNNNNNh+:oy/ + :h/:yNNNNNNNNNNNNNNNNNNNNNNy-+h: + `ys.yNNNNNNNNNNNNNNNNNNNNNNNNNNy.ys + `h+-mNNNNNNNNNNNNNNNNNNNNNNNNNNNNm-oh + h+-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN.oy +/d`mNNNNNNN/::mNNNd::m+:/dNNNo::dNNNd`m: +h//NNNNNNN: . .NNNh mNo od. -dNNNNN:+y +N.sNNNNNN+ -N/ -NNh mNNd. sNNNNNNNo-m +N.sNNNNNs +oo /Nh mNNs` ` /mNNNNNNo-m +h//NNNNh ossss` +h md- .hm/ `sNNNNN:+y +:d`mNNN+/yNNNNNd//y//h//oNNNNy//sNNNd`m- + yo-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNm.ss + `h+-mNNNNNNNNNNNNNNNNNNNNNNNNNNNNm-oy + sy.yNNNNNNNNNNNNNNNNNNNNNNNNNNs.yo + :h+-yNNNNNNNNNNNNNNNNNNNNNNs-oh- + :ys:/yNNNNNNNNNNNNNNNmy/:sy: + .+ys///osyhhhhys+///sy+. + -/osssossossso/- +EOF + ;; + + "Aperio GNU/Linux"*) + set_colors 255 + read -rd '' ascii_data <<'EOF' +${c2} + _.._ _ ._.. _ +(_][_)(/,[ |(_) + | GNU/Linux +EOF + ;; + + "Hash"*) + set_colors 123 + read -rd '' ascii_data <<'EOF' +${c1} + + + ###### + + ### ###### ### + ##### ###### ##### + ###### ###### ###### + +####### '"###### '"######## +####### ###### ######## +####### ###### ######## + + ###### '"###### '"###### + ##### ###### ##### + ### ###### ### + ~ ###### ~ + +EOF + ;; + + "AlmaLinux"*) + set_colors 1 3 4 2 6 + read -rd '' ascii_data <<'EOF' +${c1} 'c:. +${c1} lkkkx, .. ${c2}.. ,cc, +${c1} okkkk:ckkx' ${c2}.lxkkx.okkkkd +${c1} .:llcokkx' ${c2}:kkkxkko:xkkd, +${c1} .xkkkkdood: ${c2};kx, .lkxlll; +${c1} xkkx. ${c2}xk' xkkkkk: +${c1} 'xkx. ${c2}xd .....,. +${c3} .. ${c1}:xkl' ${c2}:c ..''.. +${c3} .dkx' ${c1}.:ldl:'. ${c2}' ${c4}':lollldkkxo; +${c3} .''lkkko' ${c4}ckkkx. +${c3}'xkkkd:kkd. .. ${c5};' ${c4}:kkxo. +${c3},xkkkd;kk' ,d; ${c5}ld. ${c4}':dkd::cc, +${c3} .,,.;xkko'.';lxo. ${c5}dx, ${c4}:kkk'xkkkkc +${c3} 'dkkkkkxo:. ${c5};kx ${c4}.kkk:;xkkd. +${c3} ..... ${c5}.;dk:. ${c5}lkk. ${c4}:;, + ${c5}:kkkkkkkdoxkkx + ,c,,;;;:xkkd. + ;kkkkl... + ;kkkkl + ,od; +EOF + ;; + + "alpine_small") + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c1} /\\ /\\ + /${c2}/ ${c1}\\ \\ + /${c2}/ ${c1}\\ \\ +/${c2}// ${c1}\\ \\ +${c2}// ${c1}\\ \\ + \\ +EOF + ;; + + "Alpine"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} .hddddddddddddddddddddddh. + :dddddddddddddddddddddddddd: + /dddddddddddddddddddddddddddd/ + +dddddddddddddddddddddddddddddd+ + `sdddddddddddddddddddddddddddddddds` + `ydddddddddddd++hdddddddddddddddddddy` +.hddddddddddd+` `+ddddh:-sdddddddddddh. +hdddddddddd+` `+y: .sddddddddddh +ddddddddh+` `//` `.` -sddddddddd +ddddddh+` `/hddh/` `:s- -sddddddd +ddddh+` `/+/dddddh/` `+s- -sddddd +ddd+` `/o` :dddddddh/` `oy- .yddd +hdddyo+ohddyosdddddddddho+oydddy++ohdddh +.hddddddddddddddddddddddddddddddddddddh. + `yddddddddddddddddddddddddddddddddddy` + `sdddddddddddddddddddddddddddddddds` + +dddddddddddddddddddddddddddddd+ + /dddddddddddddddddddddddddddd/ + :dddddddddddddddddddddddddd: + .hddddddddddddddddddddddh. +EOF + ;; + + "Alter"*) + set_colors 6 6 + read -rd '' ascii_data <<'EOF' +${c1} %, + ^WWWw + 'wwwwww + !wwwwwwww + #`wwwwwwwww + @wwwwwwwwwwww + wwwwwwwwwwwwwww + wwwwwwwwwwwwwwwww + wwwwwwwwwwwwwwwwwww + wwwwwwwwwwwwwwwwwwww, + w~1i.wwwwwwwwwwwwwwwww, + 3~:~1lli.wwwwwwwwwwwwwwww. + :~~:~?ttttzwwwwwwwwwwwwwwww + #<~:~~~~?llllltO-.wwwwwwwwwww + #~:~~:~:~~?ltlltlttO-.wwwwwwwww + @~:~~:~:~:~~(zttlltltlOda.wwwwwww + @~:~~: ~:~~:~:(zltlltlO a,wwwwww + 8~~:~~:~~~~:~~~~_1ltltu ,www + 5~~:~~:~~:~~:~~:~~~_1ltq N,, + g~:~~:~~~:~~:~~:~:~~~~1q N, +EOF + ;; + + "Amazon"*) + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} `-/oydNNdyo:.` + `.:+shmMMMMMMMMMMMMMMmhs+:.` + -+hNNMMMMMMMMMMMMMMMMMMMMMMNNho- +.`` -/+shmNNMMMMMMNNmhs+/- ``. +dNmhs+:. `.:/oo/:.` .:+shmNd +dMMMMMMMNdhs+:.. ..:+shdNMMMMMMMd +dMMMMMMMMMMMMMMNds odNMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +.:+ydNMMMMMMMMMMMh yMMMMMMMMMMMNdy+:. + `.:+shNMMMMMh yMMMMMNhs+:`` + `-+shy shs+:` +EOF + ;; + "Anarchy"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' + ${c2}..${c1} + ${c2}..${c1} + ${c2}:..${c1} + ${c2}:+++.${c1} + .:::++${c2}++++${c1}+::. + .:+######${c2}++++${c1}######+:. + .+#########${c2}+++++${c1}##########:. + .+##########${c2}+++++++${c1}##${c2}+${c1}#########+. + +###########${c2}+++++++++${c1}############: + +##########${c2}++++++${c1}#${c2}++++${c1}#${c2}+${c1}###########+ + +###########${c2}+++++${c1}###${c2}++++${c1}#${c2}+${c1}###########+ + :##########${c2}+${c1}#${c2}++++${c1}####${c2}++++${c1}#${c2}+${c1}############: + ###########${c2}+++++${c1}#####${c2}+++++${c1}#${c2}+${c1}###${c2}++${c1}######+ +.##########${c2}++++++${c1}#####${c2}++++++++++++${c1}#######. +.##########${c2}+++++++++++++++++++${c1}###########. + #####${c2}++++++++++++++${c1}###${c2}++++++++${c1}#########+ + :###${c2}++++++++++${c1}#########${c2}+++++++${c1}#########: + +######${c2}+++++${c1}##########${c2}++++++++${c1}#######+ + +####${c2}+++++${c1}###########${c2}+++++++++${c1}#####+ + :##${c2}++++++${c1}############${c2}++++++++++${c1}##: + .${c2}++++++${c1}#############${c2}++++++++++${c1}+. + :${c2}++++${c1}###############${c2}+++++++${c1}:: + .${c2}++. .:+${c1}##############${c2}+++++++${c1}.. + ${c2}.:.${c1} ..::++++++::..:${c2}++++${c1}+. + ${c2}.${c1} ${c2}.:+++${c1}. + ${c2}.:${c1}: + ${c2}..${c1} + ${c2}..${c1} +EOF + ;; + + "android_small"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} ;, ,; + ';,.-----.,;' + ,' ', + / O O \\ +| | +'-----------------' +EOF + ;; + + "Android"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} -o o- + +hydNNNNdyh+ + +mMMMMMMMMMMMMm+ + `dMM${c2}m:${c1}NMMMMMMN${c2}:m${c1}MMd` + hMMMMMMMMMMMMMMMMMMh + .. yyyyyyyyyyyyyyyyyyyy .. +.mMMm`MMMMMMMMMMMMMMMMMMMM`mMMm. +:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: +:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: +:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: +:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: +-MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM- + +yy+ MMMMMMMMMMMMMMMMMMMM +yy+ + mMMMMMMMMMMMMMMMMMMm + `/++MMMMh++hMMMM++/` + MMMMo oMMMM + MMMMo oMMMM + oNMm- -mMNs +EOF + ;; + + "instantOS"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' + +${c1} + 'cx0XWWMMWNKOd:'. + .;kNMMMMMMMMMMMMMWNKd' + 'kNMMMMMMWNNNWMMMMMMMMXo. +,0MMMMMW0o;'..,:dKWMMMMMWx. +OMMMMMXl. .xNMMMMMNo +WMMMMNl .kWWMMMMO' +MMMMMX; oNWMMMMK, +NMMMMWo .OWMMMMMK, +kWMMMMNd. ,kWMMMMMMK, +'kWMMMMWXxl:;;:okNMMMMMMMMK, + .oXMMMMMMMWWWMMMMMMMMMMMMK, + 'oKWMMMMMMMMMMMMMMMMMMMK, + .;lxOKXXXXXXXXXXXXXXXO;...... + ................,d0000000kd:. + .kMMMMMMMMMW0; + .kMMMMMMMMMMMX + .xMMMMMMMMMMMW + cXMMMMMMMMMM0 + :0WMMMMMMNx, + .o0NMWNOc. +EOF + ;; + + "Antergos"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' +${c2} `.-/::/-`` + .-/osssssssso/. + :osyysssssssyyys+- + `.+yyyysssssssssyyyyy+. + `/syyyyyssssssssssyyyyys-` + `/yhyyyyysss${c1}++${c2}ssosyyyyhhy/` + .ohhhyyyys${c1}o++/+o${c2}so${c1}+${c2}syy${c1}+${c2}shhhho. + .shhhhys${c1}oo++//+${c2}sss${c1}+++${c2}yyy${c1}+s${c2}hhhhs. + -yhhhhs${c1}+++++++o${c2}ssso${c1}+++${c2}yyy${c1}s+o${c2}hhddy: + -yddhhy${c1}o+++++o${c2}syyss${c1}++++${c2}yyy${c1}yooy${c2}hdddy- + .yddddhs${c1}o++o${c2}syyyyys${c1}+++++${c2}yyhh${c1}sos${c2}hddddy` +`odddddhyosyhyyyyyy${c1}++++++${c2}yhhhyosddddddo +.dmdddddhhhhhhhyyyo${c1}+++++${c2}shhhhhohddddmmh. +ddmmdddddhhhhhhhso${c1}++++++${c2}yhhhhhhdddddmmdy +dmmmdddddddhhhyso${c1}++++++${c2}shhhhhddddddmmmmh +-dmmmdddddddhhys${c1}o++++o${c2}shhhhdddddddmmmmd- +.smmmmddddddddhhhhhhhhhdddddddddmmmms. + `+ydmmmdddddddddddddddddddmmmmdy/. + `.:+ooyyddddddddddddyyso+:.` +EOF + ;; + + "antiX"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} + \ + , - ~ ^ ~ - \ / + , ' \ ' , / + , \ '/ + , \ / , + ,___, \/ , + / | _ _ _|_ o /\ , +|, | / |/ | | | / \ , + \,_/\_/ | |_/|_/|_/_/ \, + , / ,\ + , / , ' \ + ' - , _ _ _ , ' +EOF + ;; + + "AOSC OS/Retro"*) + set_colors 4 7 1 3 + read -rd '' ascii_data <<'EOF' +${c2} ......... + ................... + .....................${c1}################${c2} + .............. ....${c1}################${c2} +.............. ...${c1}################${c2} +............. ..${c1}****************${c2} +............ . .${c1}****************${c2} +........... ... ${c1}................${c2} +.......... ..... ${c1}...............${c2} +......... ....... ... + .${c3}...... ${c2}. + ${c3}..... .....${c2}.... ${c4}........... + ${c3}.... ......${c2}. ${c4}........... + ${c3}... ....... ${c4}........... + ${c3}................ ${c4}*********** + ${c3}................ ${c4}########### + ${c3}**************** + ${c3}################ +EOF + ;; + + "AOSC OS"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} .:+syhhhhys+:. + .ohNMMMMMMMMMMMMMMNho. + `+mMMMMMMMMMMmdmNMMMMMMMMm+` + +NMMMMMMMMMMMM/ `./smMMMMMN+ + .mMMMMMMMMMMMMMMo -yMMMMMm. + :NMMMMMMMMMMMMMMMs .hMMMMN: + .NMMMMhmMMMMMMMMMMm+/- oMMMMN. + dMMMMs ./ymMMMMMMMMMMNy. sMMMMd +-MMMMN` oMMMMMMMMMMMN: `NMMMM- +/MMMMh NMMMMMMMMMMMMm hMMMM/ +/MMMMh NMMMMMMMMMMMMm hMMMM/ +-MMMMN` :MMMMMMMMMMMMy. `NMMMM- + dMMMMs .yNMMMMMMMMMMMNy/. sMMMMd + .NMMMMo -/+sMMMMMMMMMMMmMMMMN. + :NMMMMh. .MMMMMMMMMMMMMMMN: + .mMMMMMy- NMMMMMMMMMMMMMm. + +NMMMMMms/.` mMMMMMMMMMMMN+ + `+mMMMMMMMMNmddMMMMMMMMMMm+` + .ohNMMMMMMMMMMMMMMNho. + .:+syhhhhys+:. +EOF + ;; + + "Apricity"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} ./o- + ``...`` `:. -/: + `-+ymNMMMMMNmho-` :sdNNm/ + `+dMMMMMMMMMMMMMMMmo` sh:.:::- + /mMMMMMMMMMMMMMMMMMMMm/`sNd/ + oMMMMMMMMMMMMMMMMMMMMMMMs -` +:MMMMMMMMMMMMMMMMMMMMMMMMM/ +NMMMMMMMMMMMMMMMMMMMMMMMMMd +MMMMMMMmdmMMMMMMMMMMMMMMMMd +MMMMMMy` .mMMMMMMMMMMMmho:` +MMMMMMNo/sMMMMMMMNdy+-.`-/ +MMMMMMMMMMMMNdy+:.`.:ohmm: +MMMMMMMmhs+-.`.:+ymNMMMy. +MMMMMM/`.-/ohmNMMMMMMy- +MMMMMMNmNNMMMMMMMMmo. +MMMMMMMMMMMMMMMms:` +MMMMMMMMMMNds/. +dhhyys+/-` +EOF + ;; + + "Archcraft"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} -m: + :NMM+ .+ + +MMMMMo -NMy + sMMMMMMMy -MMMMh` + yMMMMMMMMMd` oMMMMd` + `dMMMMMMMMMMMm. /MMMMm- + .mMMMMMm-dMMMMMN- :NMMMN: + -NMMMMMd` yMMMMMN: .mMMMM/ + :NMMMMMy sMMMMMM+ `dMMMMo + +MMMMMMs +MMMMMMs `hMMMMy + oMMMMMMMds- :NMMMMMy sMMMMh` + yMMMMMNoydMMmo` -NMMMMMd` +MMMMd. + `dMMMMMN- `:yNNs` .mMMMMMm. /MMMMm- + .mMMMMMm. :hN/ `dMMMMMN- -NMMMN: + -NMMMMMd` -hh` `yMMMMMN: .mMMMM/ + :NMMMMMy `s` :h. oMMMMMM+ `----- + +MMMMMMo .dMm. `o. +MMMMMMo +sMMMMMM+ .mMMMN: :` :NMMMMMy +EOF + ;; + + "arcolinux_small"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' +${c2} A + ooo + ooooo + ooooooo + ooooooooo + ooooo ooooo + ooooo ooooo + ooooo ooooo + ooooo ${c1}${c2} + ooooo ${c1}${c2} +ooooo ${c1}${c2} +EOF + ;; + + "ArcoLinux"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' +${c2} /- + ooo: + yoooo/ + yooooooo + yooooooooo + yooooooooooo + .yooooooooooooo + .oooooooooooooooo + .oooooooarcoooooooo + .ooooooooo-oooooooooo + .ooooooooo- oooooooooo + :ooooooooo. :ooooooooo + :ooooooooo. :ooooooooo + :oooarcooo .oooarcooo + :ooooooooy .ooooooooo + :ooooooooo ${c1}/ooooooooooooooooooo${c2} + :ooooooooo ${c1}.-ooooooooooooooooo.${c2} + ooooooooo- ${c1}-ooooooooooooo.${c2} + ooooooooo- ${c1}.-oooooooooo.${c2} +ooooooooo. ${c1}-ooooooooo${c2} +EOF + ;; + + "arch_small") + set_colors 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} /\\ + / \\ + /\\ \\ +${c2} / \\ + / ,, \\ + / | | -\\ +/_-'' ''-_\\ +EOF + ;; + + "arch_old") + set_colors 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} __ + _=(SDGJT=_ + _GTDJHGGFCVS) + ,GTDJGGDTDFBGX0 +${c1} JDJDIJHRORVFSBSVL${c2}-=+=,_ +${c1} IJFDUFHJNXIXCDXDSV,${c2} "DEBL +${c1} [LKDSDJTDU=OUSCSBFLD.${c2} '?ZWX, +${c1} ,LMDSDSWH' `DCBOSI${c2} DRDS], +${c1} SDDFDFH' !YEWD,${c2} )HDROD +${c1} !KMDOCG &GSU|${c2}\_GFHRGO\' +${c1} HKLSGP'${c2} __${c1}\TKM0${c2}\GHRBV)' +${c1}JSNRVW'${c2} __+MNAEC${c1}\IOI,${c2}\BN' +${c1}HELK['${c2} __,=OFFXCBGHC${c1}\FD) +${c1}?KGHE ${c2}\_-#DASDFLSV='${c1} 'EF +'EHTI !H + `0F' '! +EOF + ;; + + "ArchBox"*) + set_colors 2 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ...:+oh/:::.. + ..-/oshhhhhh` `::::-. + .:/ohhhhhhhhhhhh` `-::::. + .+shhhhhhhhhhhhhhhhh` `.::-. + /`-:+shhhhhhhhhhhhhh` .-/+shh + / .:/ohhhhhhhhh` .:/ohhhhhhhh + / `-:+shhh` ..:+shhhhhhhhhhhh + / .:ohhhhhhhhhhhhhhhhhhh + / `hhhhhhhhhhhhhhhhhhhh + / `hhhhhhhhhhhhhhhhhhhh + / `hhhhhhhhhhhhhhhhhhhh + / `hhhhhhhhhhhhhhhhhhhh + / .+o+ `hhhhhhhhhhhhhhhhhhhh + / -hhhhh `hhhhhhhhhhhhhhhhhhhh + / ohhhhho `hhhhhhhhhhhhhhhhhhhh + /:::+`hhhhoos` `hhhhhhhhhhhhhhhhhs+` + `--/:` /: `hhhhhhhhhhhho/- + -/:. `hhhhhhs+:-` + ::::/ho/-` +EOF + ;; + + "ARCHlabs"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} 'c' + 'kKk, + .dKKKx. + .oKXKXKd. + .l0XXXXKKo. + c0KXXXXKX0l. + :0XKKOxxOKX0l. + :OXKOc. .c0XX0l. + :OK0o. ${c4}...${c1}'dKKX0l. + :OX0c ${c4};xOx'${c1}'dKXX0l. + :0KKo.${c4}.o0XXKd'.${c1}lKXX0l. + c0XKd.${c4}.oKXXXXKd..${c1}oKKX0l. + .c0XKk;${c4}.l0K0OO0XKd..${c1}oKXXKo. + .l0XXXk:${c4},dKx,.'l0XKo.${c1}.kXXXKo. + .o0XXXX0d,${c4}:x; .oKKx'${c1}.dXKXXKd. + .oKXXXXKK0c.${c4};. :00c'${c1}cOXXXXXKd. + .dKXXXXXXXXk,${c4}. cKx'${c1}'xKXXXXXXKx' + 'xKXXXXK0kdl:. ${c4}.ok; ${c1}.cdk0KKXXXKx' + 'xKK0koc,.. ${c4}'c, ${c1} ..,cok0KKk, + ,xko:'. ${c4}.. ${c1} .':okx; + .,'. .',. +EOF + ;; + + "ArchStrike"*) + set_colors 8 6 + read -rd '' ascii_data <<'EOF' +${c1}                   *    +                  **. +                 **** +                ****** +                ******* +              ** ******* +             **** ******* +            ${c1}****${c2}_____${c1}***${c2}/${c1}* +           ***${c2}/${c1}*******${c2}//${c1}*** +          **${c2}/${c1}********${c2}///${c1}*${c2}/${c1}** +         **${c2}/${c1}*******${c2}////${c1}***${c2}/${c1}** +        **${c2}/${c1}****${c2}//////.,${c1}****${c2}/${c1}** +       ***${c2}/${c1}*****${c2}/////////${c1}**${c2}/${c1}*** +      ****${c2}/${c1}****    ${c2}/////${c1}***${c2}/${c1}**** +     ******${c2}/${c1}*** ${c2}////   ${c1}**${c2}/${c1}****** +    ********${c2}/${c1}* ${c2}///      ${c1}*${c2}/${c1}******** +  ,******     ${c2}// ______ /    ${c1}******, +EOF + ;; + + *"XFerience"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ``--:::::::-.` + .-/+++ooooooooo+++:-` + `-/+oooooooooooooooooo++:. + -/+oooooo/+ooooooooo+/ooo++:` + `/+oo++oo. .+oooooo+.-: +:-o+- + `/+o/. -o. :oooooo+ ```:.+oo+- +`:+oo- -/` :oooooo+ .`-`+oooo/. +.+ooo+. .` `://///+-+..oooooo+:` +-+ooo:` ``.-+oooooo+/` +-+oo/` :+oooo/. +.+oo: ..-/. . -+oo+/` +`/++- -:::++::/. -+oo+- + ./o: `:///+- `./ooo+:` + .++- `` /-` -:/+oooo+:` + .:+/:`` `-:ooooooo++- + ./+o+//:...../+oooooooo++:` + `:/++ooooooooooooo++/-` + `.-//++++++//:-.` + `````` +EOF + ;; + + "ArchMerge"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} y: + sMN- + +MMMm` + /MMMMMd` + :NMMMMMMy + -NMMMMMMMMs + .NMMMMMMMMMM+ + .mMMMMMMMMMMMM+ + oNMMMMMMMMMMMMM+ + `+:-+NMMMMMMMMMMMM+ + .sNMNhNMMMMMMMMMMMM/ + `hho/sNMMMMMMMMMMMMMMM/ + `.`omMMmMMMMMMMMMMMMMMMM+ + .mMNdshMMMMd+::oNMMMMMMMMMo + .mMMMMMMMMM+ `yMMMMMMMMMs + .NMMMMMMMMM/ yMMMMMMMMMy + -NMMMMMMMMMh `mNMMMMMMMMd` + /NMMMNds+:.` `-/oymMMMm. + +Mmy/. `:smN: +/+. -o. +EOF + ;; + + "Arch"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} -` + .o+` + `ooo/ + `+oooo: + `+oooooo: + -+oooooo+: + `/:-:++oooo+: + `/++++/+++++++: + `/++++++++++++++: + `/+++o${c2}oooooooo${c1}oooo/` +${c2} ${c1}./${c2}ooosssso++osssssso${c1}+` +${c2} .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +EOF + ;; + + "artix_small"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} /\\ + / \\ + /`'.,\\ + / ', + / ,`\\ + / ,.'`. \\ +/.,'` `'.\\ +EOF + ;; + + "Artix"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ' + 'o' + 'ooo' + 'ooxoo' + 'ooxxxoo' + 'oookkxxoo' + 'oiioxkkxxoo' + ':;:iiiioxxxoo' + `'.;::ioxxoo' + '-. `':;jiooo' + 'oooio-.. `'i:io' + 'ooooxxxxoio:,. `'-;' + 'ooooxxxxxkkxoooIi:-. `' + 'ooooxxxxxkkkkxoiiiiiji' + 'ooooxxxxxkxxoiiii:'` .i' + 'ooooxxxxxoi:::'` .;ioxo' + 'ooooxooi::'` .:iiixkxxo' + 'ooooi:'` `'';ioxxo' + 'i:'` '':io' +'` `' +EOF + ;; + + "Arya"*) + set_colors 2 1 + read -rd '' ascii_data <<'EOF' +${c1} `oyyy/${c2}-yyyyyy+ +${c1} -syyyy/${c2}-yyyyyy+ +${c1} .syyyyy/${c2}-yyyyyy+ +${c1} :yyyyyy/${c2}-yyyyyy+ +${c1} `/ :yyyyyy/${c2}-yyyyyy+ +${c1} .+s :yyyyyy/${c2}-yyyyyy+ +${c1} .oys :yyyyyy/${c2}-yyyyyy+ +${c1} -oyys :yyyyyy/${c2}-yyyyyy+ +${c1} :syyys :yyyyyy/${c2}-yyyyyy+ +${c1} /syyyys :yyyyyy/${c2}-yyyyyy+ +${c1} +yyyyyys :yyyyyy/${c2}-yyyyyy+ +${c1} .oyyyyyyo. :yyyyyy/${c2}-yyyyyy+ --------- +${c1} .syyyyyy+` :yyyyyy/${c2}-yyyyy+-+syyyyyyyy +${c1} -syyyyyy/ :yyyyyy/${c2}-yyys:.syyyyyyyyyy +${c1}:syyyyyy/ :yyyyyy/${c2}-yyo.:syyyyyyyyyyy +EOF + ;; + + "AsteroidOS"*) + set_colors 160 208 202 214 + read -rd '' ascii_data <<'EOF' +${c1} *** +${c1} ***** +${c1} ********** +${c1} *************** +${c1} *///****////****////. +${c2} (/////// /////// ///////( +${c2} /(((((//* //, //((((((. +${c2} ((((((((((( ((( (((((((( +${c2} *((((((((((((((((((((((( (((((((( +${c3} (((((#(((((((#((((( ((#((((( +${c3} (#(#(#####(#(#, ####(#(# +${c3} ######### ######## +${c3} /######## ######## +${c4} #######%####### +${c4} (#%%%%%%%# +${c4} %%%%% +${c4} %%% +EOF + ;; + + "Bedrock"*) + set_colors 8 7 + read -rd '' ascii_data <<'EOF' +${c1}-------------------------------------- +-------------------------------------- +-------------------------------------- +---${c2}\\\\\\\\\\\\\\\\\\\\\\\\${c1}----------------------- +----${c2}\\\\\\ \\\\\\${c1}---------------------- +-----${c2}\\\\\\ \\\\\\${c1}--------------------- +------${c2}\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\${c1}------ +-------${c2}\\\\\\ \\\\\\${c1}----- +--------${c2}\\\\\\ \\\\\\${c1}---- +---------${c2}\\\\\\ ______ \\\\\\${c1}--- +----------${c2}\\\\\\ ///${c1}--- +-----------${c2}\\\\\\ ///${c1}---- +------------${c2}\\\\\\ ///${c1}----- +-------------${c2}\\\\\\////////////////${c1}------ +-------------------------------------- +-------------------------------------- +-------------------------------------- +EOF + ;; + + "Bitrig"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} `hMMMMN+ + -MMo-dMd` + oMN- oMN` + yMd /NM: + .mMmyyhMMs + :NMMMhsmMh + +MNhNNoyMm- + hMd.-hMNMN: + mMmsssmMMMo + .MMdyyhNMMMd + oMN.`/dMddMN` + yMm/hNm+./MM/ +.dMMMmo.``.NMo +:NMMMNmmmmmMMh +/MN/-------oNN: +hMd. .dMh +sm/ /ms +EOF + ;; + + "BlackArch"*) + set_colors 1 1 0 1 + read -rd '' ascii_data <<'EOF' +${c3} 00 + 11 + ====${c1} + .${c3}//${c1} + `o${c3}//${c1}: + `+o${c3}//${c1}o: + `+oo${c3}//${c1}oo: + -+oo${c3}//${c1}oo+: + `/:-:+${c3}//${c1}ooo+: + `/+++++${c3}//${c1}+++++: + `/++++++${c3}//${c1}++++++: + `/+++o${c2}ooo${c3}//${c2}ooo${c1}oooo/` +${c2} ${c1}./${c2}ooosssso${c3}//${c2}osssssso${c1}+` +${c2} .oossssso-`${c3}//${c1}`/ossssss+` + -osssssso. ${c3}//${c1} :ssssssso. + :osssssss/ ${c3}//${c1} osssso+++. + /ossssssss/ ${c3}//${c1} +ssssooo/- + `/ossssso+/:- ${c3}//${c1} -:/+osssso+- + `+sso+:-` ${c3}//${c1} `.-/+oso: + `++:. ${c3}//${c1} `-/+/ + .` ${c3}/${c1} `/ +EOF + ;; + + "BLAG"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} d + ,MK: + xMMMX: + .NMMMMMX; + lMMMMMMMM0clodkO0KXWW: + KMMMMMMMMMMMMMMMMMMX' + .;d0NMMMMMMMMMMMMMMMMMMK. + .;dONMMMMMMMMMMMMMMMMMMMMMMx +'dKMMMMMMMMMMMMMMMMMMMMMMMMl + .:xKWMMMMMMMMMMMMMMMMMMM0. + .:xNMMMMMMMMMMMMMMMMMK. + lMMMMMMMMMMMMMMMMMMK. + ,MMMMMMMMWkOXWMMMMMM0 + .NMMMMMNd. `':ldko + OMMMK: + oWk, + ;: +EOF + ;; + + "BlankOn"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c2} `./ohdNMMMMNmho+.` ${c1} .+oo:` +${c2} -smMMMMMMMMMMMMMMMMmy-` ${c1}`yyyyy+ +${c2} `:dMMMMMMMMMMMMMMMMMMMMMMd/` ${c1}`yyyyys +${c2} .hMMMMMMMNmhso/++symNMMMMMMMh- ${c1}`yyyyys +${c2} -mMMMMMMms-` -omMMMMMMN-${c1}.yyyyys +${c2}.mMMMMMMy. .yMMMMMMm:${c1}yyyyys +${c2}sMMMMMMy `sMMMMMMh${c1}yyyyys +${c2}NMMMMMN: .NMMMMMN${c1}yyyyys +${c2}MMMMMMm. NMMMMMN${c1}yyyyys +${c2}hMMMMMM+ /MMMMMMN${c1}yyyyys +${c2}:NMMMMMN: :mMMMMMM+${c1}yyyyys +${c2} oMMMMMMNs- .sNMMMMMMs.${c1}yyyyys +${c2} +MMMMMMMNho:.` `.:ohNMMMMMMNo ${c1}`yyyyys +${c2} -hMMMMMMMMNNNmmNNNMMMMMMMMh- ${c1}`yyyyys +${c2} :yNMMMMMMMMMMMMMMMMMMNy:` ${c1}`yyyyys +${c2} .:sdNMMMMMMMMMMNds/. ${c1}`yyyyyo +${c2} `.:/++++/:.` ${c1}:oys+. +EOF + ;; + + "BlueLight"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' +${c1} oMMNMMMMMMMMMMMMMMMMMMMMMM + oMMMMMMMMMMMMMMMMMMMMMMMMM + oMMMMMMMMMMMMMMMMMMMMMMMMM + oMMMMMMMMMMMMMMMMMMMMMMMMM + -+++++++++++++++++++++++mM${c2} + ```````````````````````..${c1}dM${c2} + ```````````````````````....${c1}dM${c2} + ```````````````````````......${c1}dM${c2} + ```````````````````````........${c1}dM${c2} + ```````````````````````..........${c1}dM${c2} + ```````````````````````............${c1}dM${c2} +.::::::::::::::::::::::-..............${c1}dM${c2} + `-+yyyyyyyyyyyyyyyyyyyo............${c1}+mMM${c2} + -+yyyyyyyyyyyyyyyyo..........${c1}+mMMMM${c2} + ./syyyyyyyyyyyyo........${c1}+mMMMMMM${c2} + ./oyyyyyyyyyo......${c1}+mMMMMMMMM${c2} + omdyyyyyyo....${c1}+mMMMMMMMMMM${c2} + ${c1}oMMM${c2}mdhyyo..${c1}+mMMMMMMMMMMMM + oNNNNNNm${c2}dso${c1}mMMMMMMMMMMMMMM +EOF + ;; + + "Bodhi"*) + set_colors 7 11 2 + read -rd '' ascii_data <<'EOF' +${c1}| ${c2},,mmKKKKKKKKWm,, + ${c1}' ${c2},aKKP${c1}LL**********|L*${c2}TKp, + ${c1}t ${c2}aKP${c1}L**``` ```**L${c2}*Kp + IX${c1}EL${c3}L,wwww, ${c1}``*||${c2}Kp + ,#P${c1}L|${c3}KKKpPP@IPPTKmw, ${c1}`*||${c2}K + ,K${c1}LL*${c3}{KKKKKKPPb$KPhpKKPKp ${c1}`||${c2}K + #${c1}PL ${c3}!KKKKKKPhKPPP$KKEhKKKKp ${c1}`||${c2}K +!H${c1}L* ${c3}1KKKKKKKphKbPKKKKKK$KKp ${c1}`|I${c2}W +$${c1}bL ${c3}KKKKKKKKBQKhKbKKKKKKKK ${c1}|I${c2}N +$${c1}bL ${c3}!KKKKKKKKKKNKKKKKKKPP` ${c1}|I${c2}b +TH${c1}L* ${c3}TKKKKKK##KKKN@KKKK^ ${c1}|I${c2}M + K@${c1}L ${c3}*KKKKKKKKKKKEKE5 ${c1}||${c2}K + `NL${c1}L ${c3}`KKKKKKKKKK"```|L ${c1}||${c2}#P + `K@${c1}LL ${c3}`"**"` ${c1}'. :||${c2}#P + Yp${c1}LL ${c1}' |L${c2}$M` + `Tp${c1}pLL, ,|||${c2}p'L + "Kpp${c1}LL++,., ,,|||$${c2}#K* ${c1}'. + ${c2}`"MKWpppppppp#KM"` ${c1}`h, +EOF + ;; + + "bonsai"*) + set_colors 6 2 3 + read -rd '' ascii_data <<'EOF' +${c2} ,####, + ${c2}#######, ${c2},#####, + ${c2}#####',# ${c2}'###### + ${c2}''###'${c3}';,,,'${c2}###' + ${c3} ,; '''' + ${c3} ;;; ${c2},#####, + ${c3} ;;;' ,,;${c2};;### + ${c3} ';;;;''${c2}'####' + ${c3} ;;; + ${c3} ,.;;';'',,, + ${c3} ' ' +${c1} # + # O + ##, ,##,',##, ,## ,#, , + # # # # #''# #,, # # # + '#' '##' # # ,,# '##;, # +EOF + ;; + + "BSD") + set_colors 1 7 4 3 6 + read -rd '' ascii_data <<'EOF' +${c1} , , + /( )` + \ \___ / | + /- _ `-/ ' + (${c2}/\/ \ ${c1}\ /\ + ${c2}/ / | ` ${c1}\ + ${c3}O O ${c2}) ${c1}/ | + ${c2}`-^--'${c1}`< ' + (_.) _ ) / + `.___/` / + `-----' / +${c4}<----. __ / __ \ +${c4}<----|====${c1}O)))${c4}==${c1}) \) /${c4}====| +<----' ${c1}`--' `.__,' \ + | | + \ / /\ + ${c5}______${c1}( (_ / \______/ + ${c5},' ,-----' | + `--{__________) +EOF + ;; + + "BunsenLabs"*) + set_colors fg 7 + read -rd '' ascii_data <<'EOF' +${c1} `++ + -yMMs + `yMMMMN` + -NMMMMMMm. + :MMMMMMMMMN- + .NMMMMMMMMMMM/ + yMMMMMMMMMMMMM/ +`MMMMMMNMMMMMMMN. +-MMMMN+ /mMMMMMMy +-MMMm` `dMMMMMM +`MMN. .NMMMMM. + hMy yMMMMM` + -Mo +MMMMN + /o +MMMMs + +MMMN` + hMMM: + `NMM/ + +MN: + mh. + -/ +EOF + ;; + + "Calculate"*) + set_colors 7 3 + read -rd '' ascii_data <<'EOF' +${c1} ...... + ,,+++++++,. + .,,,....,,,${c2}+**+,,.${c1} + ............,${c2}++++,,,${c1} + ............... + ......,,,........ + .....+*#####+,,,*+. + .....,*###############,..,,,,,,.. + ......,*#################*..,,,,,..,,,.. + .,,....*####################+***+,,,,...,++, + .,,..,..*#####################*, + ,+,.+*..*#######################. + ,+,,+*+..,########################* +.,++++++. ..+##**###################+ +..... ..+##***#################*. + .,.*#*****##############*. + ..,,*********#####****+. + ${c2}.,++*****+++${c1}*****************${c2}+++++,.${c1} + ${c2},++++++**+++++${c1}***********${c2}+++++++++,${c1} + ${c2}.,,,,++++,.. .,,,,,.....,+++,.,,${c1} +EOF + ;; + "Carbs"*) + set_colors 4 5 4 4 4 4 + read -rd '' ascii_data <<'EOF' +${c2} .......... + ..,;:ccccccc:;'.. + ..,clllc:;;;;;:cllc,. + .,cllc,... ..';;'. + .;lol;.. .. + .,lol;. + .coo:. + .'lol,. + .,lol,. + .,lol,. + 'col;. + .:ooc'. + .'col:. + .'cllc'.. .''. + ..:lolc,'.......',cll,. + ..;cllllccccclllc;'. + ...',;;;;;;,,... + ..... +EOF + ;; + + + "CelOS"*) + set_colors 4 6 0 5 + read -rd '' ascii_data <<'EOF' + +${c4} .,cmmmmmmmmmmmc,. + .,cmMMMMMMMMMMMMMMMMMMMMmc. + .cMMMMMMMMMMMMMMMMMMMMMMMMMMMmc. + .cMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMc. + ,:MMM ${c3}####################################${c4} + cMMMMMMmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmc. + .MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM. + .MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMc + "******************************MMMMMMMMMMMMMc: +${c3}#################################### ${c4}MMMMMMMMMMMMMc + "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM: + "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + 'MMMMMMMMM*******************************: + \"MMMMMM ${c3}##################################### + ${c4}`:MMMMMMmmmmmmmmmmmmmmmmmmmmmmmmmmmmm; + `"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + `":MMMMMMMMMMMMMMMMMMMMMMMMM;' + `":MMMMMMMMMMMMMMMMMMM:" + "************" + + + + +EOF + ;; + + "centos_small"*) + set_colors 3 2 4 5 7 + read -rd '' ascii_data <<'EOF' +${c2} ____${c1}^${c4}____ +${c2} |\\ ${c1}|${c4} /| +${c2} | \\ ${c1}|${c4} / | +${c4}<---- ${c3}----> +${c3} | / ${c2}|${c1} \\ | +${c3} |/__${c2}|${c1}__\\| +${c2} v +EOF + ;; + + "CentOS"*) + set_colors 3 2 4 5 7 + read -rd '' ascii_data <<'EOF' +${c1} .. + .PLTJ. + <><><><> + ${c2}KKSSV' 4KKK ${c1}LJ${c4} KKKL.'VSSKK + ${c2}KKV' 4KKKKK ${c1}LJ${c4} KKKKAL 'VKK + ${c2}V' ' 'VKKKK ${c1}LJ${c4} KKKKV' ' 'V + ${c2}.4MA.' 'VKK ${c1}LJ${c4} KKV' '.4Mb. +${c4} . ${c2}KKKKKA.' 'V ${c1}LJ${c4} V' '.4KKKKK ${c3}. +${c4} .4D ${c2}KKKKKKKA.'' ${c1}LJ${c4} ''.4KKKKKKK ${c3}FA. +${c4} +${c4} 'VD ${c3}KKKKKKKK'.. ${c2}LJ ${c1}..'KKKKKKKK ${c3}FV +${c4} ' ${c3}VKKKKK'. .4 ${c2}LJ ${c1}K. .'KKKKKV ${c3}' + ${c3} 'VK'. .4KK ${c2}LJ ${c1}KKA. .'KV' + ${c3}A. . .4KKKK ${c2}LJ ${c1}KKKKA. . .4 + ${c3}KKA. 'KKKKK ${c2}LJ ${c1}KKKKK' .4KK + ${c3}KKSSA. VKKK ${c2}LJ ${c1}KKKV .4SSKK +${c2} <><><><> + 'MKKM' + '' +EOF + ;; + + "Chakra"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} _ _ _ "kkkkkkkk. + ,kkkkkkkk., 'kkkkkkkkk, + ,kkkkkkkkkkkk., 'kkkkkkkkk. + ,kkkkkkkkkkkkkkkk,'kkkkkkkk, + ,kkkkkkkkkkkkkkkkkkk'kkkkkkk. + "''"''',;::,,"''kkk''kkkkk; __ + ,kkkkkkkkkk, "k''kkkkk' ,kkkk + ,kkkkkkk' ., ' .: 'kkkk',kkkkkk + ,kkkkkkkk'.k' , ,kkkk;kkkkkkkkk + ,kkkkkkkk';kk 'k "'k',kkkkkkkkkkkk +.kkkkkkkkk.kkkk.'kkkkkkkkkkkkkkkkkk' +;kkkkkkkk''kkkkkk;'kkkkkkkkkkkkk'' +'kkkkkkk; 'kkkkkkkk.,""''"''"" + ''kkkk; 'kkkkkkkkkk., + ';' 'kkkkkkkkkkkk., + ';kkkkkkkkkk' + ';kkkkkk' + "''" +EOF + ;; + + "ChaletOS"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} `.//+osso+/:`` + `/sdNNmhyssssydmNNdo:` + :hNmy+-` .-+hNNs- + /mMh/` `+:` `+dMd: + .hMd- -sNNMNo. /yyy /mMs` + -NM+ `/dMd/--omNh::dMM `yMd` + .NN+ .sNNs:/dMNy:/hNmo/s yMd` + hMs `/hNd+-smMMMMMMd+:omNy- `dMo +:NM. .omMy:/hNMMMMMMMMMMNy:/hMd+` :Md` +/Md` `sm+.omMMMMMMMMMMMMMMMMd/-sm+ .MN: +/Md` MMMMMMMMMMMMMMMMMMMN .MN: +:NN. MMMMMMm....--NMMMMMN -Mm. +`dMo MMMMMMd mMMMMMN hMs + -MN: MMMMMMd mMMMMMN oMm` + :NM: MMMMMMd mMMMMMN +Mm- + -mMy. mmmmmmh dmmmmmh -hMh. + oNNs- :yMm/ + .+mMdo:` `:smMd/` + -ohNNmhsoo++osshmNNh+. + `./+syyhhyys+:`` +EOF + ;; + + "Chapeau"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} .-/-. + ////////. + ////////${c2}y+${c1}//. + ////////${c2}mMN${c1}/////. + ////////${c2}mMN+${c1}////////. + ////////////////////////. + /////////+${c2}shhddhyo${c1}+////////. + ////////${c2}ymMNmdhhdmNNdo${c1}///////. +///////+${c2}mMms${c1}////////${c2}hNMh${c1}///////. +///////${c2}NMm+${c1}//////////${c2}sMMh${c1}/////// +//////${c2}oMMNmmmmmmmmmmmmMMm${c1}/////// +//////${c2}+MMmssssssssssssss+${c1}/////// +`//////${c2}yMMy${c1}//////////////////// + `//////${c2}smMNhso++oydNm${c1}//////// + `///////${c2}ohmNMMMNNdy+${c1}/////// + `//////////${c2}++${c1}////////// + `////////////////. + -////////- +EOF + ;; + + "Chrom"*) + set_colors 2 1 3 4 7 + read -rd '' ascii_data <<'EOF' +${c2} .,:loool:,. + .,coooooooooooooc,. + .,lllllllllllllllllllll,. + ;ccccccccccccccccccccccccc; +${c1} '${c2}ccccccccccccccccccccccccccccc. +${c1} ,oo${c2}c::::::::okO${c5}000${c3}0OOkkkkkkkkkkk: +${c1}.ooool${c2};;;;:x${c5}K0${c4}kxxxxxk${c5}0X${c3}K0000000000. +${c1}:oooool${c2};,;O${c5}K${c4}ddddddddddd${c5}KX${c3}000000000d +${c1}lllllool${c2};l${c5}N${c4}dllllllllllld${c5}N${c3}K000000000 +${c1}lllllllll${c2}o${c5}M${c4}dccccccccccco${c5}W${c3}K000000000 +${c1};cllllllllX${c5}X${c4}c:::::::::c${c5}0X${c3}000000000d +${c1}.ccccllllllO${c5}Nk${c4}c;,,,;cx${c5}KK${c3}0000000000. +${c1} .cccccclllllxOO${c5}OOO${c1}Okx${c3}O0000000000; +${c1} .:ccccccccllllllllo${c3}O0000000OOO, +${c1} ,:ccccccccclllcd${c3}0000OOOOOOl. +${c1} '::ccccccccc${c3}dOOOOOOOkx:. +${c1} ..,::cccc${c3}xOOOkkko;. +${c1} ..,:${c3}dOkxl:. +EOF + ;; + + "cleanjaro_small"*) + set_colors 7 7 + read -rd '' ascii_data <<'EOF' +${c1}█████ ██████████ +█████ ██████████ +█████ +█████ +█████ +████████████████ +████████████████ +EOF + ;; + + "Cleanjaro"*) + set_colors 7 7 + read -rd '' ascii_data <<'EOF' +${c1}███████▌ ████████████████ +███████▌ ████████████████ +███████▌ ████████████████ +███████▌ +███████▌ +███████▌ +███████▌ +███████▌ +█████████████████████████ +█████████████████████████ +█████████████████████████ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +EOF + ;; + + "ClearOS"*) + set_colors 2 + read -rd '' ascii_data <<'EOF' +${c1} `.--::::::--.` + .-:////////////////:-. + `-////////////////////////-` + -////////////////////////////- + `//////////////-..-//////////////` + ./////////////: ://///////////. + `//////:..-////: :////-..-//////` + ://////` -///:.``.:///-` ://///: +`///////:. -////////-` `:///////` +.//:--////:. -////-` `:////--://. +./: .////:. --` `:////- :/. +`//-` .////:. `:////- `-//` + :///-` .////:. `:////- `-///: + `/////-` -///: :///- `-/////` + `//////- `///: :///` .//////` + `:////: `///: :///` -////:` + .://: `///: :///` -//:. + .:: `///: :///` -:. + `///: :///` + `... ...` +EOF + ;; + + "Clear Linux OS"* | "Clear_Linux"*) + set_colors 4 3 7 6 + read -rd '' ascii_data <<'EOF' +${c1} BBB + BBBBBBBBB + BBBBBBBBBBBBBBB + BBBBBBBBBBBBBBBBBBBB + BBBBBBBBBBB BBB + BBBBBBBB${c2}YYYYY +${c1} BBBBBBBB${c2}YYYYYY +${c1} BBBBBBBB${c2}YYYYYYY +${c1} BBBBBBBBB${c2}YYYYY${c3}W +${c4} GG${c1}BBBBBBBY${c2}YYYY${c3}WWW +${c4} GGG${c1}BBBBBBB${c2}YY${c3}WWWWWWWW +${c4} GGGGGG${c1}BBBBBB${c3}WWWWWWWW +${c4} GGGGGGGG${c1}BBBB${c3}WWWWWWWW +${c4}GGGGGGGGGGG${c1}BBB${c3}WWWWWWW +${c4}GGGGGGGGGGGGG${c1}B${c3}WWWWWW +${c4}GGGGGGGG${c3}WWWWWWWWWWW +${c4}GG${c3}WWWWWWWWWWWWWWWW + WWWWWWWWWWWWWWWW + WWWWWWWWWW + WWW +EOF + ;; + + "Clover"*) + set_colors 2 6 + read -rd '' ascii_data <<'EOF' +${c1} `omo``omo` + `oNMMMNNMMMNo` + `oNMMMMMMMMMMMMNo` + oNMMMMMMMMMMMMMMMMNo + `sNMMMMMMMMMMMMMMNs` + `omo` `sNMMMMMMMMMMNs` `omo` + `oNMMMNo` `sNMMMMMMNs` `oNMMMNo` + `oNMMMMMMMNo` `oNMMNs` `oNMMMMMMMNo` +oNMMMMMMMMMMMNo` `sy` `oNMMMMMMMMMMMNo +`sNMMMMMMMMMMMMNo.${c2}oNNs${c1}.oNMMMMMMMMMMMMNs` +`oNMMMMMMMMMMMMNs.${c2}oNNs${c1}.oNMMMMMMMMMMMMNo` +oNMMMMMMMMMMMNs` `sy` `oNMMMMMMMMMMMNo + `oNMMMMMMMNs` `oNMMNo` `oNMMMMMMMNs` + `oNMMMNs` `sNMMMMMMNs` `oNMMMNs` + `oNs` `sNMMMMMMMMMMNs` `oNs` + `sNMMMMMMMMMMMMMMNs` + +NMMMMMMMMMMMMMMMMNo + `oNMMMMMMMMMMMMNo` + `oNMMMNNMMMNs` + `omo``oNs` +EOF + ;; + + "Condres"*) + set_colors 2 3 6 + read -rd '' ascii_data <<'EOF' +${c1}syyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy+${c3}.+. +${c1}`oyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy+${c3}:++. +${c2}/o${c1}+oyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy/${c3}oo++. +${c2}/y+${c1}syyyyyyyyyyyyyyyyyyyyyyyyyyyyy${c3}+ooo++. +${c2}/hy+${c1}oyyyhhhhhhhhhhhhhhyyyyyyyyy${c3}+oo+++++. +${c2}/hhh+${c1}shhhhhdddddhhhhhhhyyyyyyy${c3}+oo++++++. +${c2}/hhdd+${c1}oddddddddddddhhhhhyyyys${c3}+oo+++++++. +${c2}/hhddd+${c1}odmmmdddddddhhhhyyyy${c3}+ooo++++++++. +${c2}/hhdddmo${c1}odmmmdddddhhhhhyyy${c3}+oooo++++++++. +${c2}/hdddmmms${c1}/dmdddddhhhhyyys${c3}+oooo+++++++++. +${c2}/hddddmmmy${c1}/hdddhhhhyyyyo${c3}+oooo++++++++++: +${c2}/hhdddmmmmy${c1}:yhhhhyyyyy+${c3}+oooo+++++++++++: +${c2}/hhddddddddy${c1}-syyyyyys+${c3}ooooo++++++++++++: +${c2}/hhhddddddddy${c1}-+yyyy+${c3}/ooooo+++++++++++++: +${c2}/hhhhhdddddhhy${c1}./yo:${c3}+oooooo+++++++++++++/ +${c2}/hhhhhhhhhhhhhy${c1}:-.${c3}+sooooo+++++++++++///: +${c2}:sssssssssssso++${c1}${c3}`:/:--------.```````` +EOF + ;; + + "Container Linux by CoreOS"* | "Container_Linux"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ..... + .';:cccccccc:;'. + ':ccccclc${c3}lllllllll${c1}cc:. + .;cccccccc${c3}lllllllllllllll${c1}c, + ;clllccccc${c3}llllllllllllllllll${c1}c, + .cllclccccc${c3}lllll${c2}lll${c3}llllllllllll${c1}c: + ccclclcccc${c3}cllll${c2}kWMMNKk${c3}llllllllll${c1}c: + :ccclclcccc${c3}llll${c2}oWMMMMMMWO${c3}lllllllll${c1}c, +.ccllllllccc${c3}clll${c2}OMMMMMMMMM0${c3}lllllllll${c1}c +.lllllclcccc${c3}llll${c2}KMMMMMMMMMMo${c3}llllllll${c1}c. +.lllllllcccc${c3}clll${c2}KMMMMMMMMN0${c3}lllllllll${c1}c. +.cclllllcccc${c3}lllld${c2}xkkxxdo${c3}llllllllllc${c1}lc + :cccllllllcccc${c3}lllccllllcclccc${c1}cccccc; + .ccclllllllcccccccc${c3}lll${c1}ccccclccccccc + .cllllllllllclcccclccclccllllcllc + :cllllllllccclcllllllllllllcc; + .cccccccccccccclcccccccccc:. + .;cccclccccccllllllccc,. + .';ccccclllccc:;.. + ..... +EOF + ;; + + "crux_small"|KISS*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} ___ + (${c3}.· ${c1}| + (${c2}<> ${c1}| + / ${c3}__ ${c1}\\ + ( ${c3}/ \\ ${c1}/| +${c2}_${c1}/\\ ${c3}__)${c1}/${c2}_${c1}) +${c2}\/${c1}-____${c2}\/ +EOF + ;; + + "CRUX"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} odddd + oddxkkkxxdoo + ddcoddxxxdoool + xdclodod olol + xoc xdd olol + xdc ${c2}k00${c1}Okdlol + xxd${c2}kOKKKOkd${c1}ldd + xdco${c2}xOkdlo${c1}dldd + ddc:cl${c2}lll${c1}oooodo + odxxdd${c3}xkO000kx${c1}ooxdo + oxdd${c3}x0NMMMMMMWW0od${c1}kkxo + oooxd${c3}0WMMMMMMMMMW0o${c1}dxkx +docldkXW${c3}MMMMMMMWWN${c1}Odolco +xx${c2}dx${c1}kxxOKN${c3}WMMWN${c1}0xdoxo::c +${c2}xOkkO${c1}0oo${c3}odOW${c2}WW${c1}XkdodOxc:l +${c2}dkkkxkkk${c3}OKX${c2}NNNX0Oxx${c1}xc:cd +${c2} odxxdx${c3}xllod${c2}ddooxx${c1}dc:ldo +${c2} lodd${c1}dolccc${c2}ccox${c1}xoloo +EOF + ;; + + *"Crystal Linux"*) + set_colors 13 5 + read -rd '' ascii_data <<'EOF' +${c1} mysssym +${c1} mysssym +${c1} mysssym +${c1} mysssym +${c1} mysssyd +${c1} mysssyd N +${c1} mysssyd mysym +${c1} mysssyd dysssym +${c1} mysssyd dysssym +${c1} mysssyd dysssym +${c1} mysssyd dysssym +${c1} mysssyd dysssym +${c1} mysssyd dysssym +${c1} mysym dysssym +${c1} N dysssym +${c1} dysssym +${c1} dysssym +${c1} dysssym +${c1} dysssym +${c1} dysssym +EOF + ;; + + *"Cucumber"*) + set_colors 2 3 + read -rd '' ascii_data <<'EOF' +${c1} `.-://++++++//:-.` + `:/+//${c2}::--------${c1}:://+/:` + -++/:${c2}----..........----${c1}:/++- + .++:${c2}---...........-......---${c1}:++. + /+:${c2}---....-::/:/--//:::-....---${c1}:+/ + `++:${c2}--.....:---::/--/::---:.....--${c1}:++` + /+:${c2}--.....--.--::::-/::--.--.....--${c1}:+/ +-o:${c2}--.......-:::://--/:::::-.......--${c1}:o- +/+:${c2}--...-:-::---:::..:::---:--:-...--${c1}:+/ +o/:${c2}-...-:.:.-/:::......::/:.--.:-...-${c1}:/o +o/${c2}--...::-:/::/:-......-::::::-/-...-${c1}:/o +/+:${c2}--..-/:/:::--:::..:::--::////-..--${c1}:+/ +-o:${c2}--...----::/:::/--/:::::-----...--${c1}:o- + /+:${c2}--....://:::.:/--/:.::://:....--${c1}:+/ + `++:${c2}--...-:::.--.:..:.--.:/:-...--${c1}:++` + /+:${c2}---....----:-..-:----....---${c1}:+/ + .++:${c2}---..................---${c1}:++. + -/+/:${c2}----..........----${c1}:/+/- + `:/+//${c2}::--------:::${c1}/+/:` + `.-://++++++//:-.` +EOF + ;; + + "CyberOS"*) + set_colors 50 32 57 + read -rd '' ascii_data <<'EOF' +${c3} !M$EEEEEEEEEEEP + .MMMMM000000Nr. + ${c3}&MMMMMM${c2}MMMMMMMMMMMMM9 + ${c3}~MMM${c1}MMMM${c2}MMMMMMMMMMMMC + ${c1}" ${c3}M${c1}MMMMMMM${c2}MMMMMMMMMMs + ${c1}iM${c2}MMM&&${c1}MMMMMMMM${c2}MMMMMMMM\\ + ${c1}BMMM${c2}MMMMM${c1}MMMMMMM${c2}MMMMMM${c3}" + ${c1}9MMMMM${c2}MMMMMMM${c1}MMMM${c2}MMMM${c3}MMMf- + ${c2}sMMMMMMMM${c1}MM${c2}M${c3}MMMMMMMMM3_ + ${c2}+ffffffff${c1}P${c3}MMMMMMMMMMMM0 + ${c2}CMMMMMMMMMMM + }MMMMMMMMM + ~MMMMMMM + "RMMMM + .PMB +EOF + ;; + + "dahlia"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} + .#. + *%@@@%* + .,,,,,(&@@@@@@@&/,,,,,. + ,#@@@@@@@@@@@@@@@@@@@@@#. + ,#@@@@@@@&#///#&@@@@@@@#. + ,/%&@@@@@%/, .,(%@@@@@&#/. + *#&@@@@@@#,. .*#@@@@@@&#, + .&@@@@@@@@@( .(@@@@@@@@@&&. +#@@@@@@@@@@( )@@@@@@@@@@@# + °@@@@@@@@@@( .(@@@@@@@@@@@° + *%@@@@@@@(. ,#@@@@@@@%* + ,(&@@@@@@%*. ./%@@@@@@%(, + ,#@@@@@@@&(***(&@@@@@@@#. + ,#@@@@@@@@@@@@@@@@@@@@@#. + ,*****#&@@@@@@@&(*****, + ,/%@@@%/. + ,#, +EOF + ;; + + "debian_small") + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} _____ + / __ \\ +| / | +| \\___- +-_ + --_ +EOF + ;; + + "Debian"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c2} _,met$$$$$gg. + ,g$$$$$$$$$$$$$$$P. + ,g$$P" """Y$$.". + ,$$P' `$$$. +',$$P ,ggs. `$$b: +`d$$' ,$P"' ${c1}.${c2} $$$ + $$P d$' ${c1},${c2} $$P + $$: $$. ${c1}-${c2} ,d$$' + $$; Y$b._ _,d$P' + Y$$. ${c1}`.${c2}`"Y$$$$P"' +${c2} `$$b ${c1}"-.__ +${c2} `Y$$ + `Y$$. + `$$b. + `Y$$b. + `"Y$b._ + `""" +EOF + ;; + + "Deepin"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} ............ + .';;;;;. .,;,. + .,;;;;;;;. ';;;;;;;. + .;::::::::' .,::;;,''''',. + ,'.:::::::: .;;'. '; + ;' 'cccccc, ,' :: '.. .: + ,, :ccccc. ;: .c, '' :. ,; +.l. cllll' ., .lc :; .l' l. +.c :lllc ;cl: .l' .ll. :' +.l 'looc. . ,o: 'oo' c, +.o. .:ool::coc' .ooo' o. + :: ..... .;dddo ;c + l:... .';lddddo. ,o + lxxxxxdoolllodxxxxxxxxxc :l + ,dxxxxxxxxxxxxxxxxxxl. 'o, + ,dkkkkkkkkkkkkko;. .;o; + .;okkkkkdl;. .,cl:. + .,:cccccccc:,. +EOF + ;; + + "DesaOS") + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1}███████████████████████ +███████████████████████ +███████████████████████ +███████████████████████ +████████ ███████ +████████ ███████ +████████ ███████ +████████ ███████ +████████ ███████ +████████ ███████ +████████ ███████ +██████████████████████████████ +██████████████████████████████ +████████████████████████ +████████████████████████ +████████████████████████ +EOF + ;; + + "Devuan"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} ..,,;;;::;,.. + `':ddd;:,. + `'dPPd:,. + `:b$$b`. + 'P$$$d` + .$$$$$` + ;$$$$$P + .:P$$$$$$` + .,:b$$$$$$$;' + .,:dP$$$$$$$$b:' + .,:;db$$$$$$$$$$Pd'` + ,db$$$$$$$$$$$$$$b:'` +:$$$$$$$$$$$$b:'` + `$$$$$bd:''` + `'''` +EOF + ;; + + "DracOS"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} `-:/- + -os: + -os/` + :sy+-` + `/yyyy+. + `+yyyyo- + `/yyyys: +`:osssoooo++- +yyyyyy/` + ./yyyyyyo yo`:syyyy+. + -oyyy+ +- :yyyyyo- + `:sy: `. `/yyyyys: + ./o/.` .oyyso+oo:` + :+oo+//::::///:-.` `.` +EOF + ;; + + "DarkOs") + set_colors 1 6 5 3 2 + read -rd '' ascii_data <<'EOF' + +${c3}⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c1}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣶⠋⡆⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c5}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡆⢀⣤⢛⠛⣠⣿⠀⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c6}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣶⣿⠟⣡⠊⣠⣾⣿⠃⣠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c2}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣯⣿⠀⠊⣤⣿⣿⣿⠃⣴⣧⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c1}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣿⣿⡟⣠⣶⣿⣿⣿⢋⣤⠿⠛⠉⢁⣭⣽⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c4} ⠀⠀⠀⠀⠀⠀ ⠀⣠⠖⡭⢉⣿⣯⣿⣯⣿⣿⣿⣟⣧⠛⢉⣤⣶⣾⣿⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c5}⠀⠀⠀⠀⠀⠀⠀⠀⣴⣫⠓⢱⣯⣿⢿⠋⠛⢛⠟⠯⠶⢟⣿⣯⣿⣿⣿⣿⣿⣿⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c2}⠀⠀⠀⠀⠀⠀⢀⡮⢁⣴⣿⣿⣿⠖⣠⠐⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠛⠛⠛⢿⣶⣄⠀⠀⠀⠀⠀⠀⠀ +${c3}⠀⠀⠀⠀⢀⣤⣷⣿⣿⠿⢛⣭⠒⠉⠀⠀⠀⣀⣀⣄⣤⣤⣴⣶⣶⣶⣿⣿⣿⣿⣿⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀ +${c1}⠀⢀⣶⠏⠟⠝⠉⢀⣤⣿⣿⣶⣾⣿⣿⣿⣿⣿⣿⣟⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c6}⢴⣯⣤⣶⣿⣿⣿⣿⣿⡿⣿⣯⠉⠉⠉⠉⠀⠀⠀⠈⣿⡀⣟⣿⣿⢿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c5}⠀⠀⠀⠉⠛⣿⣧⠀⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠃⣿⣿⣯⣿⣦⡀⠀⠉⠻⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c3}⠀⠀⠀⠀⠀⠀⠉⢿⣮⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⠀⣯⠉⠉⠛⢿⣿⣷⣄⠀⠈⢻⣆⠀⠀⠀⠀⠀⠀⠀⠀ +${c2}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠢⠀⠀⠀⠀⠀⠀⠀⢀⢡⠃⣾⣿⣿⣦⠀⠀⠀⠙⢿⣿⣤⠀⠙⣄⠀⠀⠀⠀⠀⠀⠀ +${c6}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⢋⡟⢠⣿⣿⣿⠋⢿⣄⠀⠀⠀⠈⡄⠙⣶⣈⡄⠀⠀⠀⠀⠀⠀ +${c1}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠚⢲⣿⠀⣾⣿⣿⠁⠀⠀⠉⢷⡀⠀⠀⣇⠀⠀⠈⠻⡀⠀⠀⠀⠀⠀ +${c4}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢢⣀⣿⡏⠀⣿⡿⠀⠀⠀⠀⠀⠀⠙⣦⠀⢧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c3}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠿⣧⣾⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣮⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c5}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + +EOF + ;; + + "Itc"*) + set_colors 1 + read -rd '' ascii_data <<'EOF' +${c1}....................-==============+... +${c1}....................-==============:... +${c1}...:===========-....-==============:... +${c1}...-===========:....-==============-... +${c1}....*==========+........-::********-... +${c1}....*===========+.:*====**==*+-.-...... +${c1}....:============*+-..--:+**====*---... +${c1}......::--........................::... +${c1}..+-:+-.+::*:+::+:-++::++-.:-.*.:++:++. +${c1}..:-:-++++:-::--:+::-::.:++-++:++--:-:. ⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +EOF + ;; + + "dragonfly_old"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' + ${c1} .-. + ${c3} ()${c1}I${c3}() + ${c1} "==.__:-:__.==" + "==.__/~|~\__.==" + "==._( Y )_.==" + ${c2}.-'~~""~=--...,__${c1}\/|\/${c2}__,...--=~""~~'-. +( ..=${c1}\\=${c1}/${c2}=.. ) + `'-. ,.-"`;${c1}/=\\${c2};"-.,_ .-'` + `~"-=-~` .-~` ${c1}|=|${c2} `~-. `~-=-"~` + .-~` /${c1}|=|${c2}\ `~-. + .~` / ${c1}|=|${c2} \ `~. + .-~` .' ${c1}|=|${c2} `. `~-. + (` _,.-="` ${c1} |=|${c2} `"=-.,_ `) + `~"~"` ${c1} |=|${c2} `"~"~` + ${c1} /=\\ + \\=/ + ^ +EOF + ;; + + "dragonfly_small"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c2} ,${c1}_${c2}, +('-_${c1}|${c2}_-') + >--${c1}|${c2}--< +(_-'${c1}|${c2}'-_) + ${c1}| + | + | +EOF + ;; + + "DragonFly"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c2},--, ${c1}| ${c2},--, +${c2}| `-, ${c1},^, ${c2},-' | +${c2} `, `-, ${c3}(/ \) ${c2},-' ,' +${c2} `-, `-,${c1}/ \${c2},-' ,-' +${c2} `------${c1}( )${c2}------' +${c2} ,----------${c1}( )${c2}----------, +${c2} | _,-${c1}( )${c2}-,_ | +${c2} `-,__,-' ${c1}\ /${c2} `-,__,-' +${c1} | | + | | + | | + | | + | | + | | + `|' +EOF + ;; + + "Drauger"*) + set_colors 1 7 + read -rd '' ascii_data <<'EOF' +${c1} -``- + `:+``+:` + `/++``++/. + .++/. ./++. + :++/` `/++: + `/++: :++/` + ./+/- -/+/. + -++/. ./++- + :++:` `:++: + `/++- -++/` + ./++. ./+/. + -++/` `/++- + :++:` `:++: + `/++- -++/` +.:-.`..............................`.-:. +`.-/++++++++++++++++++++++++++++++++/-.` +EOF + ;; + + "elementary_small"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} _______ + / ____ \\ +/ | / /\\ +|__\\ / / | +\\ /__/ / + \\_______/ +EOF + ;; + + "Elementary"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} eeeeeeeeeeeeeeeee + eeeeeeeeeeeeeeeeeeeeeee + eeeee eeeeeeeeeeee eeeee + eeee eeeee eee eeee + eeee eeee eee eeee +eee eee eee eee +eee eee eee eee +ee eee eeee eeee +ee eee eeeee eeeeee +ee eee eeeee eeeee ee +eee eeee eeeeee eeeee eee +eee eeeeeeeeee eeeeee eee + eeeeeeeeeeeeeeeeeeeeeeee eeeee + eeeeeeee eeeeeeeeeeee eeee + eeeee eeeee + eeeeeee eeeeeee + eeeeeeeeeeeeeeeee +EOF + ;; + + "EndeavourOS"*) + set_colors 1 5 4 + read -rd '' ascii_data <<'EOF' +${c1} ./${c2}o${c3}. +${c1} ./${c2}sssso${c3}- +${c1} `:${c2}osssssss+${c3}- +${c1} `:+${c2}sssssssssso${c3}/. +${c1} `-/o${c2}ssssssssssssso${c3}/. +${c1} `-/+${c2}sssssssssssssssso${c3}+:` +${c1} `-:/+${c2}sssssssssssssssssso${c3}+/. +${c1} `.://o${c2}sssssssssssssssssssso${c3}++- +${c1} .://+${c2}ssssssssssssssssssssssso${c3}++: +${c1} .:///o${c2}ssssssssssssssssssssssssso${c3}++: +${c1} `:////${c2}ssssssssssssssssssssssssssso${c3}+++. +${c1}`-////+${c2}ssssssssssssssssssssssssssso${c3}++++- +${c1} `..-+${c2}oosssssssssssssssssssssssso${c3}+++++/` + ./++++++++++++++++++++++++++++++/:. + `:::::::::::::::::::::::::------`` +EOF + ;; + + "Endless"*) + set_colors 1 7 + read -rd '' ascii_data <<'EOF' +${c1} `:+yhmNMMMMNmhy+:` + -odMMNhso//////oshNMMdo- + /dMMh+. .+hMMd/ + /mMNo` `oNMm: + `yMMo` `oMMy` + `dMN- -NMd` + hMN. .NMh +/MM/ -os` /MM/ +dMm `smNmmhs/- `:sNMd+ `` mMd +MMy oMd--:+yMMMMMNo.:ohmMMMNy` yMM +MMy -NNyyhmMNh+oNMMMMMy:. dMo yMM +dMm `/++/-``/yNNh+/sdNMNddMm- mMd +/MM/ `dNy: `-::- /MM/ + hMN. .NMh + `dMN- -NMd` + `yMMo` `oMMy` + /mMNo` `oNMm/ + /dMMh+. .+hMMd/ + -odMMNhso//////oshNMMdo- + `:+yhmNMMMMNmhy+:` +EOF + ;; + + "EuroLinux"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c1} __ + -wwwWWWWWWWWWwww- + -WWWWWWWWWWWWWWWWWWw- + \WWWWWWWWWWWWWWWWWWW- + _Ww `WWWWWWWWWWWWWWWWWWWw + -W${c2}E${c1}Www -WWWWWWWWW- +_WW${c2}U${c1}WWWW- _WWWWWWWW +_WW${c2}R${c1}WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW- +wWW${c2}O${c1}WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWW${c2}L${c1}WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw +WWW${c2}I${c1}WWWWWWWWWWWWWWWWWWWWWWWWWWWWww- +wWW${c2}N${c1}WWWWw + WW${c2}U${c1}WWWWWWw + wW${c2}X${c1}WWWWWWWWww + wWWWWWWWWWWWWWWWw + wWWWWWWWWWWWWWWWw + WWWWWWWWWWWWWw + wWWWWWWWw +EOF + ;; + + "Exherbo"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} , +OXo. +NXdX0: .cok0KXNNXXK0ko:. +KX '0XdKMMK;.xMMMk, .0MMMMMXx; ... +'NO..xWkMMx kMMM cMMMMMX,NMWOxOXd. + cNMk NK .oXM. OMMMMO. 0MMNo kW. + lMc o: ., .oKNk; ;NMMWlxW' + ;Mc .. .,,' .0M${c1}g;${c2}WMN'dWMMMMMMO + XX ,WMMMMW. cM${c1}cfli${c2}WMKlo. .kMk +.Mo .WM${c1}GD${c2}MW. XM${c1}WO0${c2}MMk oMl +,M: ,XMMWx::,''oOK0x; NM. +'Ml ,kNKOxxxxxkkO0XXKOd:. oMk + NK .0Nxc${c3}:::::::::::::::${c2}fkKNk, .MW + ,Mo .NXc${c3}::${c2}qXWXb${c3}::::::::::${c2}oo${c3}::${c2}lNK. .MW + ;Wo oMd${c3}:::${c2}oNMNP${c3}::::::::${c2}oWMMMx${c3}:${c2}c0M; lMO + 'NO;W0c${c3}:::::::::::::::${c2}dMMMMO${c3}::${c2}lMk .WM' + xWONXdc${c3}::::::::::::::${c2}oOOo${c3}::${c2}lXN. ,WMd + 'KWWNXXK0Okxxo,${c3}:::::::${c2},lkKNo xMMO + :XMNxl,';:lodxkOO000Oxc. .oWMMo + 'dXMMXkl;,. .,o0MMNo' + ':d0XWMMMMWNNNNMMMNOl' + ':okKXWNKkl' +EOF + ;; + + "fedora_small") + set_colors 12 + read -rd '' ascii_data <<'EOF' +${c1} ,'''''. + | ,. | + | | '_' + ,....| |.. +.' ,_;| ..' +| | | | +| ',_,' | + '. ,' + ''''' +EOF + ;; + + "Fedora_old"* | "RFRemix"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} /:-------------:\\ + :-------------------:: + :-----------${c2}/shhOHbmp${c1}---:\\ + /-----------${c2}omMMMNNNMMD ${c1}---: + :-----------${c2}sMMMMNMNMP${c1}. ---: + :-----------${c2}:MMMdP${c1}------- ---\\ +,------------${c2}:MMMd${c1}-------- ---: +:------------${c2}:MMMd${c1}------- .---: +:---- ${c2}oNMMMMMMMMMNho${c1} .----: +:-- .${c2}+shhhMMMmhhy++${c1} .------/ +:- -------${c2}:MMMd${c1}--------------: +:- --------${c2}/MMMd${c1}-------------; +:- ------${c2}/hMMMy${c1}------------: +:--${c2} :dMNdhhdNMMNo${c1}------------; +:---${c2}:sdNMMMMNds:${c1}------------: +:------${c2}:://:${c1}-------------:: +:---------------------:// +EOF + ;; + + "Fedora"*) + set_colors 12 7 + read -rd '' ascii_data <<'EOF' +${c1} .',;::::;,'. + .';:cccccccccccc:;,. + .;cccccccccccccccccccccc;. + .:cccccccccccccccccccccccccc:. + .;ccccccccccccc;${c2}.:dddl:.${c1};ccccccc;. + .:ccccccccccccc;${c2}OWMKOOXMWd${c1};ccccccc:. +.:ccccccccccccc;${c2}KMMc${c1};cc;${c2}xMMc${c1};ccccccc:. +,cccccccccccccc;${c2}MMM.${c1};cc;${c2};WW:${c1};cccccccc, +:cccccccccccccc;${c2}MMM.${c1};cccccccccccccccc: +:ccccccc;${c2}oxOOOo${c1};${c2}MMM0OOk.${c1};cccccccccccc: +cccccc;${c2}0MMKxdd:${c1};${c2}MMMkddc.${c1};cccccccccccc; +ccccc;${c2}XM0'${c1};cccc;${c2}MMM.${c1};cccccccccccccccc' +ccccc;${c2}MMo${c1};ccccc;${c2}MMW.${c1};ccccccccccccccc; +ccccc;${c2}0MNc.${c1}ccc${c2}.xMMd${c1};ccccccccccccccc; +cccccc;${c2}dNMWXXXWM0:${c1};cccccccccccccc:, +cccccccc;${c2}.:odl:.${c1};cccccccccccccc:,. +:cccccccccccccccccccccccccccc:'. +.:cccccccccccccccccccccc:;,.. + '::cccccccccccccc::;,. +EOF + ;; + + "Feren"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} `----------` + :+ooooooooo+. +-o+oooooooooo+- +..`/+++++++++++/...````````````````` + .++++++++++++++++++++++++++/////- + ++++++++++++++++++++++++++++++++//:` + -++++++++++++++++++++++++++++++/-` + ++++++++++++++++++++++++++++:. + -++++++++++++++++++++++++/. + +++++++++++++++++++++/-` + -++++++++++++++++++//-` + .:+++++++++++++//////- + .:++++++++//////////- + `-++++++---:::://///. + `.:///+++. ` + `......... +EOF + ;; + + "freebsd_small") + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1}/\\,-'''''-,/\\ +\\_) (_/ +| | +| | + ; ; + '-_____-' +EOF + ;; + + FreeBSD*|HardenedBSD*) + case $ascii_distro in + *HardenedBSD*) set_colors 4 7 3 ;; + *) set_colors 1 7 3 + esac + + read -rd '' ascii_data <<'EOF' + ${c2}``` ${c1}` + ${c2}` `.....---...${c1}....--.``` -/ + ${c2}+o .--` ${c1}/y:` +. + ${c2} yo`:. ${c1}:o `+- + ${c2}y/ ${c1}-/` -o/ + ${c2}.- ${c1}::/sy+:. + ${c2}/ ${c1}`-- / + ${c2}`: ${c1}:` + ${c2}`: ${c1}:` + ${c2}/ ${c1}/ + ${c2}.- ${c1}-. + ${c2}-- ${c1}-. + ${c2}`:` ${c1}`:` + .-- `--. + .---.....----. +EOF + ;; + + "FreeMiNT"*) + set_colors 7 + read -rd '' ascii_data <<'EOF' +${c1} ## + ## ######### + #### ## + #### #### ## +#### #### ## ## + #### #### ## ## + #### #### ## ## ## + #### ###### + ###### ## ## #### + #### ################ + #### ## #### + ## #### ###### + ## ## #### #### + ## ## ## ## ## #### + #### ## ## ## +EOF + ;; + + "Frugalware"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} `++/::-.` + /o+++++++++/::-.` + `o+++++++++++++++o++/::-.` + /+++++++++++++++++++++++oo++/:-.`` + .o+ooooooooooooooooooosssssssso++oo++/:-` + ++osoooooooooooosssssssssssssyyo+++++++o: + -o+ssoooooooooooosssssssssssssyyo+++++++s` + o++ssoooooo++++++++++++++sssyyyyo++++++o: + :o++ssoooooo${c2}/-------------${c1}+syyyyyo+++++oo + `o+++ssoooooo${c2}/-----${c1}+++++ooosyyyyyyo++++os: + /o+++ssoooooo${c2}/-----${c1}ooooooosyyyyyyyo+oooss + .o++++ssooooos${c2}/------------${c1}syyyyyyhsosssy- + ++++++ssooooss${c2}/-----${c1}+++++ooyyhhhhhdssssso + -s+++++syssssss${c2}/-----${c1}yyhhhhhhhhhhhddssssy. + sooooooyhyyyyyh${c2}/-----${c1}hhhhhhhhhhhddddyssy+ + :yooooooyhyyyhhhyyyyyyhhhhhhhhhhdddddyssy` + yoooooooyhyyhhhhhhhhhhhhhhhhhhhddddddysy/ +-ysooooooydhhhhhhhhhhhddddddddddddddddssy + .-:/+osssyyyysyyyyyyyyyyyyyyyyyyyyyyssy: + ``.-/+oosysssssssssssssssssssssss + ``.:/+osyysssssssssssssh. + `-:/+osyyssssyo + .-:+++` +EOF + ;; + + "Funtoo"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} .dKXXd . + :XXl;:. .OXo +.'OXO'' .''''''''''''''''''''':XNd..'oco.lco, +xXXXXXX, cXXXNNNXXXXNNXXXXXXXXNNNNKOOK; d0O .k + kXX xXo KNNN0 KNN. 'xXNo :c; 'cc. + kXX xNo KNNN0 KNN. :xxxx. 'NNo + kXX xNo loooc KNN. oNNNN. 'NNo + kXX xN0:. KNN' oNNNX' ,XNk + kXX xNNXNNNNNNNNXNNNNNNNNXNNOxXNX0Xl + ... ......................... .;cc;. +EOF + ;; + + "GalliumOS"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1}sooooooooooooooooooooooooooooooooooooo+: +yyooooooooooooooooooooooooooooooooo+/::: +yyysoooooooooooooooooooooooooooo+/:::::: +yyyyyoooooooooooooooooooooooo+/::::::::: +yyyyyysoooooooooooooooooo++/:::::::::::: +yyyyyyysoooooooooooooo++/::::::::::::::: +yyyyyyyyysoooooo${c2}sydddys${c1}+/::::::::::::::: +yyyyyyyyyysooo${c2}smMMMMMMMNd${c1}+:::::::::::::: +yyyyyyyyyyyyo${c2}sMMMMMMMMMMMN${c1}/::::::::::::: +yyyyyyyyyyyyy${c2}dMMMMMMMMMMMM${c1}o//::::::::::: +yyyyyyyyyyyyy${c2}hMMMMMMMMMMMm${c1}--//:::::::::: +yyyyyyyyyyyyyy${c2}hmMMMMMMMNy${c1}:..-://:::::::: +yyyyyyyyyyyyyyy${c2}yyhhyys+:${c1}......://::::::: +yyyyyyyyyyyyyyys+:--...........-///::::: +yyyyyyyyyyyys+:--................://:::: +yyyyyyyyyo+:-.....................-//::: +yyyyyyo+:-..........................://: +yyyo+:-..............................-// +o/:-...................................: +EOF + ;; + + "Garuda"*) + set_colors 7 7 3 7 2 4 + read -rd '' ascii_data <<'EOF' + +${c3} + .%;888:8898898: + x;XxXB%89b8:b8%b88: + .8Xxd 8X:. + .8Xx; 8x:. + .tt8x ${c6}.d${c3} x88; + .@8x8; ${c6}.db:${c3} xx@; + ${c4},tSXX° .bbbbbbbbbbbbbbbbbbbB8x@; + .SXxx bBBBBBBBBBBBBBBBBBBBbSBX8; + ,888S pd! + 8X88/ q + GBB. + ${c5}x%88 d888@8@X@X@X88X@@XX@@X@8@X. + dxXd dB8b8b8B8B08bB88b998888b88x. + dxx8o .@@;. + dx88 .t@x. + d:SS@8ba89aa67a853Sxxad. + .d988999889889899dd. + +EOF + + ;; + + "gentoo_small") + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} _-----_ +( \\ +\ 0 \\ +${c2} \ ) + / _/ +( _- +\____- +EOF + ;; + + "Gentoo"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} -/oyddmdhs+:. + -o${c2}dNMMMMMMMMNNmhy+${c1}-` + -y${c2}NMMMMMMMMMMMNNNmmdhy${c1}+- + `o${c2}mMMMMMMMMMMMMNmdmmmmddhhy${c1}/` + om${c2}MMMMMMMMMMMN${c1}hhyyyo${c2}hmdddhhhd${c1}o` +.y${c2}dMMMMMMMMMMd${c1}hs++so/s${c2}mdddhhhhdm${c1}+` + oy${c2}hdmNMMMMMMMN${c1}dyooy${c2}dmddddhhhhyhN${c1}d. + :o${c2}yhhdNNMMMMMMMNNNmmdddhhhhhyym${c1}Mh + .:${c2}+sydNMMMMMNNNmmmdddhhhhhhmM${c1}my + /m${c2}MMMMMMNNNmmmdddhhhhhmMNh${c1}s: + `o${c2}NMMMMMMMNNNmmmddddhhdmMNhs${c1}+` + `s${c2}NMMMMMMMMNNNmmmdddddmNMmhs${c1}/. + /N${c2}MMMMMMMMNNNNmmmdddmNMNdso${c1}:` ++M${c2}MMMMMMNNNNNmmmmdmNMNdso${c1}/- +yM${c2}MNNNNNNNmmmmmNNMmhs+/${c1}-` +/h${c2}MMNNNNNNNNMNdhs++/${c1}-` +`/${c2}ohdmmddhys+++/:${c1}.` + `-//////:--. +EOF + ;; + + "Pentoo"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c2} `:oydNNMMMMNNdyo:` + :yNMMMMMMMMMMMMMMMMNy: + :dMMMMMMMMMMMMMMMMMMMMMMd: + oMMMMMMMho/-....-/ohMMMMMMMo + oMMMMMMy. .yMMMMMMo + .MMMMMMo oMMMMMM. + +MMMMMm mMMMMM+ + oMMMMMh hMMMMMo + //hMMMMMm//${c1}`${c2} ${c1}`${c2}////mMMMMMh// +MMMMMMMMMMM${c1}/${c2} ${c1}/o/`${c2} ${c1}.${c2}smMMMMMMMMMMM +MMMMMMMMMMm ${c1}`NMN:${c2} ${c1}.${c2}yMMMMMMMMMM +MMMMMMMMMMMh${c1}:.${c2} dMMMMMMMMM +MMMMMMMMMMMMMy${c1}.${c2} ${c1}-${c2}NMMMMMMMMM +MMMMMMMMMMMd:${c1}`${c2} ${c1}-${c2}yNMMMMMMMMMM +MMMMMMMMMMh${c1}`${c2} ${c1}./${c2}hNMMMMMMMMMMMM +MMMMMMMMMM${c1}s${c2} ${c1}.:${c2}ymMMMMMMMMMMMMMMM +MMMMMMMMMMN${c1}s:..-/${c2}ohNMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM + +EOF + ;; + + "glaucus"*) + set_colors 5 + read -rd '' ascii_data <<'EOF' +${c1} ,, ,d88P + ,d8P ,ad8888* + ,888P d88888* ,,ad8888P* + d d888P a88888P* ,ad8888888* + .d8 d8888: d888888* ,d888888P* + .888; 88888b d8888888b8888888P + d8888J888888a88888888888888P* ,d + 88888888888888888888888888P ,,d8* + 888888888888888888888888888888888* + *8888888888888888888888888888888* + Y888888888P* `*``*888888888888* + *^888^* *Y888P** +EOF + ;; + + "gNewSense"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} ..,,,,.. + .oocchhhhhhhhhhccoo. + .ochhlllllllc hhhhhh ollllllhhco. + ochlllllllllll hhhllllllhhh lllllllllllhco + .cllllllllllllll hlllllo +hllh llllllllllllllc. +ollllllllllhco'' hlllllo +hllh ``ochllllllllllo +hllllllllc' hllllllllllllh `cllllllllh +ollllllh +llllllllllll+ hllllllo + `cllllh. ohllllllho .hllllc' + ochllc. ++++ .cllhco + `+occooo+. .+ooocco+' + `+oo++++ ++++oo+' +EOF + ;; + + "GNOME"*) + set_colors 4 + read -rd '' ascii_data <<'EOF' +${c1} ,@@@@@@@@, + @@@@@@ @@@@@@@@@@@@ + ,@@. @@@@@@@ *@@@@@@@@@@@@ + @@@@@% @@@@@@( @@@@@@@@@@@& + @@@@@@ @@@@* @@@@@@@@@# +@@@@* @@@@, *@@@@@% +@@@@@. + @@@@# @@@@@@@@@@@@@@@@ + ,@@@@@@@@@@@@@@@@@@@@@@@, + ,@@@@@@@@@@@@@@@@@@@@@@@@@@& + .@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@( + @@@@@@@@@@@@@@@@@@@@% + @@@@@@@@@@@@@@@@ + @@@@@@@@@@@@* @@@@@@@@/ + &@@@@@@@@@@ @@@@@@@@@* + @@@@@@@@@@@, @@@@@@@@@* + ,@@@@@@@@@@@@@@@@@@@@& + &@@@@@@@@@@@@@@ + ... +EOF + ;; + + "GNU") + set_colors fg 7 + read -rd '' ascii_data <<'EOF' +${c1} _-`````-, ,- '- . + .' .- - | | - -. `. + /.' / `. \ +:/ : _... ..._ `` : +:: : /._ .`:'_.._\. || : +:: `._ ./ ,` : \ . _.'' . +`:. / | -. \-. \\_ / + \:._ _/ .' .@) \@) ` `\ ,.' + _/,--' .- .\,-.`--`. + ,'/'' (( \ ` ) + /'/' \ `-' ( + '/'' `._,-----' + ''/' .,---' + ''/' ;: + ''/'' ''/ + ''/''/'' + '/'/' + `; +EOF + ;; + + "GoboLinux"*) + set_colors 5 4 6 2 + read -rd '' ascii_data <<'EOF' +${c1} _____ _ + / ____| | | +| | __ ___ | |__ ___ +| | |_ |/ _ \| '_ \ / _ \ +| |__| | (_) | |_) | (_) | + \_____|\___/|_.__/ \___/ +EOF + ;; + + "Grombyang"*) + set_colors 4 2 1 + read -rd '' ascii_data <<'EOF' +${c1} eeeeeeeeeeee + eeeeeeeeeeeeeeeee + eeeeeeeeeeeeeeeeeeeeeee + eeeee ${c2}.o+ ${c1}eeee + eeee ${c2}`ooo/ ${c1}eeee + eeee ${c2}`+oooo: ${c1}eeee +eee ${c2}`+oooooo: ${c1}eee +eee ${c2}-+oooooo+: ${c1}eee +ee ${c2}`/:oooooooo+: ${c1}ee +ee ${c2}`/+ +++ +: ${c1}ee +ee ${c2}+o+\ ${c1}ee +eee ${c2}+o+\ ${c1}eee +eee ${c2}// \\ooo/ \\\ ${c1}eee + eee ${c2}//++++oooo++++\\\ ${c1}eee + eeee ${c2}::::++oooo+::::: ${c1}eeee + eeeee ${c3}Grombyang OS ${c1} eeee + eeeeeeeeeeeeeeeeeeeeeee + eeeeeeeeeeeeeeeee +EOF + ;; + + "guix_small"*) + set_colors 3 7 6 1 8 + read -rd '' ascii_data <<'EOF' +${c1}|.__ __.| +|__ \\ / __| + \\ \\ / / + \\ \\ / / + \\ \\ / / + \\ \\/ / + \\__/ +EOF + ;; + + "Guix"*) + set_colors 3 7 6 1 8 + read -rd '' ascii_data <<'EOF' +${c1} .. `. + `--..```..` `..```..--` + .-:///-:::. `-:::///:-. + ````.:::` `:::.```` + -//:` -::- + ://: -::- + `///- .:::` + -+++-:::. + :+/:::- + `-....` +EOF + ;; + + "haiku_small"*) + set_colors 2 8 + read -rd '' ascii_data <<'EOF' +${c1} ,^, + / \\ +*--_ ; ; _--* +\\ '" "' / + '. .' +.-'" "'-. + '-.__. .__.-' + |_| +EOF + ;; + + "Haiku"*) + set_colors 1 3 7 2 + read -rd '' ascii_data <<'EOF' +${c3} + + MMMM MMMM + MMMM MMMM + MMMM MMMM + MMMM MMMM + MMMM${c4} .ciO| /YMMMMM*" +${c3} MMMM${c4} .cOMMMMM|/MMMMM/` + , ,iMM|/MMMMMMMMMMMMMMM* + `*.__,-cMMMMMMMMMMMMMMMMM/`${c3}.MMM + MM${c4}MMMMMMM/`:MMM/ ${c3}MMMM + MMMM MMMM + MMMM MMMM + """" """" +EOF + ;; + + "Huayra"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c2} ` + . . ` + `` - . . + `.` -` `. - `` .` + ..`-`-` + - / .` ``` + .--.+--`+:- :/.` .-``.` + -+/so::h:.d-`./:`.` + :hNhyMomy:os-...-. ```` + .dhsshNmNhoo+:-``.``` + ${c1}`ohy:-${c2}NMds+::-.`` + ````${c1}.hNN+`${c2}mMNho/:-....```` + ````` `../dmNhoo+/:..`` + ```` .dh++o/:....` +.+s/` `/s-.-.:.`` ```` +::` `::`..` + .` `.. + `` +EOF + ;; + + "HydroOS"*) + set_colors 1 2 3 4 5 + read -rd '' ascii_data <<'EOF' +${c1} + _ _ _ ____ _____ + | | | | | | / __ \ / ____| + | |__| |_ _ __| |_ __ ___ | | | | (___ + | __ | | | |/ _` | '__/ _ \| | | |\___ \ + | | | | |_| | (_| | | | (_) | |__| |____) | + |_| |_|\__, |\__,_|_| \___/ \____/|_____/ + __/ | + |___/ +EOF + ;; + + "hyperbola_small"*) + set_colors 8 + read -rd '' ascii_data <<'EOF' +${c1} |`__.`/ + \____/ + .--. + / \\ + / ___ \\ + / .` `.\\ +/.` `.\\ +EOF + ;; + + "Hyperbola"*) + set_colors 8 + read -rd '' ascii_data <<'EOF' +${c1} WW + KX W + WO0W NX0O + NOO0NW WNXK0OOKW + W0OOOOOOOOOOOOKN + N0OOOOOOO0KXW + WNXXXNW + NXK00000KN + WNK0OOOOOOOOOO0W + NK0OOOOOOOOOOOOOO0W + X0OOOOOOO00KK00OOOOOK + X0OOOO0KNWW WX0OO0W + X0OO0XNW KOOW + N00KNW KOW + NKXN W0W +WW W +EOF + ;; + + "iglunix"*|"iglu"*) + set_colors 8 + read -rd '' ascii_data <<'EOF' +${c1} | + | | + | +| ________ +| /\ | \ + / \ | \ | + / \ \ | +/ \________\ +\ / / + \ / / + \ / / + \/________/ +EOF + ;; + + "januslinux"*|"janus"*|"Ataraxia Linux"*|"Ataraxia"*) + set_colors 4 5 6 2 + read -rd '' ascii_data <<'EOF' +${c1} 'l: + loooooo + loooo coooool + looooooooooooooooooool + looooooooooooooooo + lool cooo + coooooooloooooooo + clooooo ;lood cloooo + :loooocooo cloo loooo + loooo :ooooool loooo +looo cooooo cooooo +looooooooooooo ;loooooo ${c2}looooooc +${c1}looooooooo loo cloooooool ${c2}looooc +${c1} cooo cooooooooooo ${c2}looolooooool +${c1} cooo: ${c2}coooooooooooooooooool + loooooooooooolc: loooc; + cooo: loooooooooooc + ;oool looooooo: + coool olc, + looooc ,, + coooooc loc + :oooool, coool:, looool:, + looool: ooooooooooooooo: + cooolc .ooooooooooool +EOF + ;; + + "Kaisen"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} ` + `:+oyyho. + `+:`sdddddd/ + `+` :ho oyo++ohds-` + .ho :dd. .: `sddddddhhyso+/- + ody.ddd-:yd- +hysssyhddddddddho` + yddddddhddd` ` `--` -+hddddddh. + hddy-+dddddy+ohh/..+sddddy/:::+ys + :ddd/sdddddddddd- oddddddd ` + `yddddddddddddddd/ /ddddddd/ +:. :ydddddddddddddddddo..sddddddy/` +odhdddddddo- `ddddh+-``....-+hdddddds. +-ddddddhd: /dddo -ydddddddhdddddddd- + /hdy:o - `:sddds .`./hdddddddddddddo + `/- `+hddyosy+ :dddddddy-.-od/ + :sydds -hddddddd` / + .+shd- `:ohddddddddd` + `:+ooooooooooooo: +EOF + ;; + + "Kali"*) + set_colors 4 8 + read -rd '' ascii_data <<'EOF' +${c1}.............. + ..,;:ccc,. + ......''';lxO. +.....''''..........,:ld; + .';;;:::;,,.x, + ..'''. 0Xxoc:,. ... + .... ,ONkc;,;cokOdc',. + . OMo ':${c2}dd${c1}o. + dMc :OO; + 0M. .:o. + ;Wd + ;XO, + ,d0Odlc;,.. + ..',;:cdOOd::,. + .:d;.':;. + 'd, .' + ;l .. + .o + c + .' + . +EOF + ;; + + "Drunk"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1}######################################### +######################################### +####/ . ####* /######## +##/ ############/ * /####### +############### /####### +###########* ,*/######## +#######/ /######, ######### +#######* ,##########* ####### +###* ############* ##### +#/ *#%##############/ #### +#/ #### ####################/. ### +#W ##/ /######################*## # +## ### /#####################/ /# +#### ###* #################### # +##/# ######## *################## /# +############## ####################### +######################################### +EOF + ;; + + "KaOS"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} .. + ..... ..OSSAAAAAAA.. + .KKKKSS. .SSAAAAAAAAAAA. +.KKKKKSO. .SAAAAAAAAAA... +KKKKKKS. .OAAAAAAAA. +KKKKKKS. .OAAAAAA. +KKKKKKS. .SSAA.. +.KKKKKS..OAAAAAAAAAAAA........ + DKKKKO.=AA=========A===AASSSO.. + AKKKS.==========AASSSSAAAAAASS. + .=KKO..========ASS.....SSSSASSSS. + .KK. .ASS..O.. =SSSSAOSS: + .OK. .ASSSSSSSO...=A.SSA. + .K ..SSSASSSS.. ..SSA. + .SSS.AAKAKSSKA. + .SSS....S.. +EOF + ;; + + "KDE"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} `..---+/---..` + `---.`` `` `.---.` + .--.` `` `-:-. + `:/: `.----//----.` :/- + .:. `---` `--.` .:` + .:` `--` .:- `:. + `/ `:. `.-::-.` -:` `/` + /. /. `:++++++++:` .: .: +`/ .: `+++++++++++/ /` `+` +/+` -- .++++++++++++` :. .+: +`/ .: `+++++++++++/ /` `+` + /` /. `:++++++++:` .: .: + ./ `:. `.:::-.` -:` `/` + .:` `--` .:- `:. + .:. `---` `--.` .:` + `:/: `.----//----.` :/- + .-:.` `` `-:-. + `---.`` `` `.---.` + `..---+/---..` +EOF + ;; + + "Kibojoe"*) + set_colors 2 7 4 + read -rd '' ascii_data <<'EOF' + ${c3} ./+oooooo+/. + -/+ooooo+/:.` + ${c1}`${c3}yyyo${c2}+++/++${c3}osss${c1}. + ${c1}+NMN${c3}yssssssssssss${c1}. + ${c1}.dMMMMN${c3}sssssssssssy${c1}Ns` + +MMMMMMMm${c3}sssssssssssh${c1}MNo` + `hMMMMMNNNMd${c3}sssssssssssd${c1}MMN/ + .${c3}syyyssssssy${c1}NNmmmmd${c3}sssss${c1}hMMMMd: + -NMmh${c3}yssssssssyhhhhyssyh${c1}mMMMMMMMy` + -NMMMMMNN${c3}mdhyyyyyyyhdm${c1}NMMMMMMMMMMMN+ +`NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd. +ods+/:-----://+oyydmNMMMMMMMMMMMMMMMMMN- +` .-:+osyhhdmmNNNmdo +EOF + ;; + + "Kogaion"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ;; ,; + ;;; ,;; + ,;;;; ;;;; + ,;;;;;;;; ;;;; + ;;;;;;;;;;; ;;;;; + ,;;;;;;;;;;;; ';;;;;, + ;;;;;;;;;;;;;;, ';;;;;;; + ;;;;;;;;;;;;;;;;;, ';;;;; +; ';;;;;;;;;;;;;;;;;;, ;;; +;;;, ';;;;;;;;;;;;;;;;;;;,;; +;;;;;, ';;;;;;;;;;;;;;;;;;, +;;;;;;;;, ';;;;;;;;;;;;;;;;, +;;;;;;;;;;;;, ';;;;;;;;;;;;;; +';;;;;;;;;;;;; ';;;;;;;;;;;;; + ';;;;;;;;;;;;;, ';;;;;;;;;;; + ';;;;;;;;;;;;; ;;;;;;;;;; + ';;;;;;;;;;;; ;;;;;;;; + ';;;;;;;; ;;;;;; + ';;;;; ;;;; + ';;; ;; +EOF + ;; + + "Korora"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} ____________ + _add55555555554${c1}: + _w?'${c1}``````````'${c2})k${c1}: + _Z'${c1}`${c2} ]k${c1}: + m(${c1}`${c2} )k${c1}: + _.ss${c1}`${c2}m[${c1}`${c2}, ]e${c1}: + .uY"^`${c1}`${c2}Xc${c1}`${c2}?Ss. d(${c1}` + jF'${c1}`${c2} `@. ${c1}`${c2}Sc .jr${c1}` + jr${c1}`${c2} `?n_ ${c1}`${c2}$; _a2"${c1}` +.m${c1}:${c2} `~M${c1}`${c2}1k${c1}`${c2}5?!`${c1}` +:#${c1}:${c2} ${c1}`${c2})e${c1}``` +:m${c1}:${c2} ,#'${c1}` +:#${c1}:${c2} .s2'${c1}` +:m,________.aa7^${c1}` +:#baaaaaaas!J'${c1}` + ``````````` +EOF + ;; + + "KSLinux"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} K K U U RRRR ooo + K K U U R R o o + KKK U U RRRR o o + K K U U R R o o + K K UUU R R ooo + +${c2} SSS AAA W W AAA + S A A W W A A + SSS AAAAA W W W AAAAA + S A A WW WW A A + SSS A A W W A A +EOF + ;; + + "Kubuntu"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} `.:/ossyyyysso/:. + .:oyyyyyyyyyyyyyyyyyyo:` + -oyyyyyyyo${c2}dMMy${c1}yyyyyyysyyyyo- + -syyyyyyyyyy${c2}dMMy${c1}oyyyy${c2}dmMMy${c1}yyyys- + oyyys${c2}dMy${c1}syyyy${c2}dMMMMMMMMMMMMMy${c1}yyyyyyo + `oyyyy${c2}dMMMMy${c1}syysoooooo${c2}dMMMMy${c1}yyyyyyyyo` + oyyyyyy${c2}dMMMMy${c1}yyyyyyyyyyys${c2}dMMy${c1}sssssyyyo +-yyyyyyyy${c2}dMy${c1}syyyyyyyyyyyyyys${c2}dMMMMMy${c1}syyy- +oyyyysoo${c2}dMy${c1}yyyyyyyyyyyyyyyyyy${c2}dMMMMy${c1}syyyo +yyys${c2}dMMMMMy${c1}yyyyyyyyyyyyyyyyyysosyyyyyyyy +yyys${c2}dMMMMMy${c1}yyyyyyyyyyyyyyyyyyyyyyyyyyyyy +oyyyyysos${c2}dy${c1}yyyyyyyyyyyyyyyyyy${c2}dMMMMy${c1}syyyo +-yyyyyyyy${c2}dMy${c1}syyyyyyyyyyyyyys${c2}dMMMMMy${c1}syyy- + oyyyyyy${c2}dMMMy${c1}syyyyyyyyyyys${c2}dMMy${c1}oyyyoyyyo + `oyyyy${c2}dMMMy${c1}syyyoooooo${c2}dMMMMy${c1}oyyyyyyyyo + oyyysyyoyyyys${c2}dMMMMMMMMMMMy${c1}yyyyyyyo + -syyyyyyyyy${c2}dMMMy${c1}syyy${c2}dMMMy${c1}syyyys- + -oyyyyyyy${c2}dMMy${c1}yyyyyysosyyyyo- + ./oyyyyyyyyyyyyyyyyyyo/. + `.:/oosyyyysso/:.` +EOF + ;; + + "LEDE"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' + ${c1} _________ + / /\ + / LE / \ + / DE / \ + /________/ LE \ + \ \ DE / + \ LE \ / + \ DE \ / + \________\/ +EOF + ;; + + "LaxerOS"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' +${c2} + /. + `://:- + `//////: + .////////:` + -//////////:` + -/////////////` + :///////////////. + `://////.```-//////- + `://///:` .//////- + `//////: `//////: + .//////- `://///:` + -//////- `://///:` + -//////. ://////` + ://////` -//////. + `/////:` ./////: + .-::-` .:::-` + +.:://////////////////////////////////::. +//////////////////////////////////////// +.:////////////////////////////////////:. + +EOF + ;; + + "LibreELEC"*) + set_colors 2 3 7 14 13 + read -rd '' ascii_data <<'EOF' +${c1} :+ooo/. ${c2}./ooo+: +${c1} :+ooooooo/. ${c2}./ooooooo+: +${c1} :+ooooooooooo:${c2}:ooooooooooo+: +${c1} :+ooooooooooo+- ${c2}-+ooooooooooo+: +${c1} :+ooooooooooo+- ${c3}-- ${c2}-+ooooooooooo+: +${c1}.+ooooooooooo+- ${c3}:+oo+: ${c2}-+ooooooooooo+- +${c1}-+ooooooooo+- ${c3}:+oooooo+: ${c2}-+oooooooooo- +${c1} :+ooooo+- ${c3}:+oooooooooo+: ${c2}-+oooooo: +${c1} :+o+- ${c3}:+oooooooooooooo+: ${c2}-+oo: +${c4} ./ ${c3}:oooooooooooooooooo: ${c5}/. +${c4} ./oo+: ${c3}-+oooooooooooooo+- ${c5}:+oo/. +${c4} ./oooooo+: ${c3}-+oooooooooo+- ${c5}:+oooooo/. +${c4}-oooooooooo+: ${c3}-+oooooo+- ${c5}:+oooooooooo- +${c4}.+ooooooooooo+: ${c3}-+oo+- ${c5}:+ooooooooooo+. +${c4} -+ooooooooooo+: ${c3}.. ${c5}:+ooooooooooo+- +${c4} -+ooooooooooo+: ${c5}:+ooooooooooo+- +${c4} -+oooooooooo+:${c5}:+oooooooooo+- +${c4} -+oooooo+: ${c5}:+oooooo+- +${c4} -+oo+: ${c5}:+oo+- +${c4} .. ${c5}.. +EOF + ;; + + "Linux") + set_colors fg 8 3 + read -rd '' ascii_data <<'EOF' +${c2} ##### +${c2} ####### +${c2} ##${c1}O${c2}#${c1}O${c2}## +${c2} #${c3}#####${c2}# +${c2} ##${c1}##${c3}###${c1}##${c2}## +${c2} #${c1}##########${c2}## +${c2} #${c1}############${c2}## +${c2} #${c1}############${c2}### +${c3} ##${c2}#${c1}###########${c2}##${c3}# +${c3}######${c2}#${c1}#######${c2}#${c3}###### +${c3}#######${c2}#${c1}#####${c2}#${c3}####### +${c3} #####${c2}#######${c3}##### +EOF + ;; + + "linuxlite_small"*) + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} /\\ + / \\ + / ${c2}/ ${c1}/ +> ${c2}/ ${c1}/ +\\ ${c2}\\ ${c1}\\ + \\_${c2}\\${c1}_\\ +${c2} \\ +EOF + ;; + + "Linux Lite"* | "Linux_Lite"*) + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} ,xXc + .l0MMMMMO + .kNMMMMMWMMMN, + KMMMMMMKMMMMMMo + 'MMMMMMNKMMMMMM: + kMMMMMMOMMMMMMO + .MMMMMMX0MMMMMW. + oMMMMMMxWMMMMM: + WMMMMMNkMMMMMO +:MMMMMMOXMMMMW +.0MMMMMxMMMMM; +:;cKMMWxMMMMO +'MMWMMXOMMMMl + kMMMMKOMMMMMX: + .WMMMMKOWMMM0c + lMMMMMWO0MNd:' + oollXMKXoxl;. + ':. .: .' + .. + . +EOF + ;; + + "LMDE"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' + ${c2}`.-::---.. +${c1} .:++++ooooosssoo:. + .+o++::. `.:oos+. +${c1} :oo:.` -+oo${c2}: +${c1} ${c2}`${c1}+o/` .${c2}::::::${c1}-. .++-${c2}` +${c1}${c2}`${c1}/s/ .yyyyyyyyyyo: +o-${c2}` +${c1}${c2}`${c1}so .ss ohyo` :s-${c2}: +${c1}${c2}`${c1}s/ .ss h m myy/ /s`${c2}` +${c1}`s: `oo s m Myy+-o:` +`oo :+sdoohyoydyso/. + :o. .:////////++: +${c1} `/++ ${c2}-:::::- +${c1} ${c2}`${c1}++- +${c1} ${c2}`${c1}/+- +${c1} ${c2}.${c1}+/. +${c1} ${c2}.${c1}:+-. + `--.`` +EOF + ;; + + "Lubuntu"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} `.:/ossyyyysso/:. + `.:yyyyyyyyyyyyyyyyyy:.` + .:yyyyyyyyyyyyyyyyyyyyyyyy:. + .:yyyyyyyyyyyyyyyyyyyyyyyyyyyy:. + -yyyyyyyyyyyyyy${c2}+hNMMMNh+${c1}yyyyyyyyy- + :yy${c2}mNy+${c1}yyyyyyyy${c2}+Nmso++smMdhyysoo+${c1}yy: + -yy${c2}+MMMmmy${c1}yyyyyy${c2}hh${c1}yyyyyyyyyyyyyyyyyyy- +.yyyy${c2}NMN${c1}yy${c2}shhs${c1}yyy${c2}+o${c1}yyyyyyyyyyyyyyyyyyyy. +:yyyy${c2}oNM+${c1}yyyy${c2}+sso${c1}yyyyyyy${c2}ss${c1}yyyyyyyyyyyyy: +:yyyyy${c2}+dNs${c1}yyyyyyy${c2}++${c1}yyyyy${c2}oN+${c1}yyyyyyyyyyyy: +:yyyyy${c2}oMMmhysso${c1}yyyyyyyyyy${c2}mN+${c1}yyyyyyyyyyy: +:yyyyyy${c2}hMm${c1}yyyyy${c2}+++${c1}yyyyyyy${c2}+MN${c1}yyyyyyyyyyy: +.yyyyyyy${c2}ohmy+${c1}yyyyyyyyyyyyy${c2}NMh${c1}yyyyyyyyyy. + -yyyyyyyyyy${c2}++${c1}yyyyyyyyyyyy${c2}MMh${c1}yyyyyyyyy- + :yyyyyyyyyyyyyyyyyyyyy${c2}+mMN+${c1}yyyyyyyy: + -yyyyyyyyyyyyyyyyy${c2}+sdMMd+${c1}yyyyyyyy- + .:yyyyyyyyy${c2}hmdmmNMNdy+${c1}yyyyyyyy:. + .:yyyyyyy${c2}my${c1}yyyyyyyyyyyyyyy:. + `.:yyyy${c2}s${c1}yyyyyyyyyyyyy:.` + `.:/oosyyyysso/:.` +EOF + ;; + + "Lunar"*) + set_colors 4 7 3 + read -rd '' ascii_data <<'EOF' +${c1}`-. `-. + -ohys/-` `:+shy/` + -omNNdyo/` :+shmNNy/` + ${c3} - + /mMmo + hMMMN` + .NMMs + ${c1} -:+oooo+//: ${c3}/MN${c1}. -///oooo+/-` + /:.` ${c3}/${c1} `.:/` +${c3} __ + | | _ _ ___ ___ ___ + | |__| | | | .'| _| + |_____|___|_|_|__,|_| +EOF + ;; + + "mac"*"_small") + set_colors 2 3 1 5 4 + read -rd '' ascii_data <<'EOF' +${c1} .:' + _ :'_ +${c2} .'`_`-'_``. +:________.-' +${c3}:_______: +:_______: +${c4} :_______`-; +${c5} `._.-._.' +EOF + ;; + + "mac"* | "Darwin") + set_colors 2 3 1 1 5 4 + read -rd '' ascii_data <<'EOF' +${c1} c.' + ,xNMM. + .OMMMMo + lMM" + .;loddo:. .olloddol;. + cKMMMMMMMMMMNWMMMMMMMMMM0: +${c2} .KMMMMMMMMMMMMMMMMMMMMMMMWd. + XMMMMMMMMMMMMMMMMMMMMMMMX. +${c3};MMMMMMMMMMMMMMMMMMMMMMMM: +:MMMMMMMMMMMMMMMMMMMMMMMM: +${c4}.MMMMMMMMMMMMMMMMMMMMMMMMX. + kMMMMMMMMMMMMMMMMMMMMMMMMWd. + ${c5}'XMMMMMMMMMMMMMMMMMMMMMMMMMMk + 'XMMMMMMMMMMMMMMMMMMMMMMMMK. + ${c6}kMMMMMMMMMMMMMMMMMMMMMMd + ;KMMMMMMMWXXWMMMMMMMk. + "cooc*" "*coo'" +EOF + ;; + + "mageia_small"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} * + * + ** +${c2} /\\__/\\ +/ \\ +\\ / + \\____/ +EOF + ;; + + "Mageia"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} .°°. + °° .°°. + .°°°. °° + . . + °°° .°°°. + .°°°. '___' +${c2} .${c1}'___' ${c2} . + :dkxc;'. ..,cxkd; + .dkk. kkkkkkkkkk .kkd. +.dkk. ';cloolc;. .kkd +ckk. .kk; +xO: cOd +xO: lOd +lOO. .OO: +.k00. .00x + .k00; ;00O. + .lO0Kc;,,,,,,;c0KOc. + ;d00KKKKKK00d; + .,KKKK,. +EOF + ;; + + "MagpieOS"*) + set_colors 2 1 3 5 + read -rd '' ascii_data <<'EOF' +${c1} ;00000 :000Ol + .x00kk00: O0kk00k; + l00: :00. o0k :O0k. + .k0k. x${c2}d$dddd${c1}k' .d00; + k0k. ${c2}.dddddl ${c1}o00, + o00. ${c2}':cc:. ${c1}d0O +.00l ,00. +l00. d0x +k0O .:k0o +O0k ;dO0000d. +k0O .O0O${c2}xxxxk${c1}00: +o00. k0O${c2}dddddd${c1}occ +'00l x0O${c2}dddddo${c3};..${c1} + x00. .x00${c2}kxxd${c3}:..${c1} + .O0x .:oxxx${c4}Okl.${c1} + .x0d ${c4},xx,${c1} + .:o. ${c4}.xd ckd${c1} + .. ${c4}dxl .xx; + :xxolldxd' + ;oxdl. +EOF + ;; + + "Mandriva"* | "Mandrake"*) + set_colors 4 3 + read -rd '' ascii_data <<'EOF' +${c2} `` + `-. +${c1} ` ${c2}.--- +${c1} -/ ${c2}-::--` +${c1} `++ ${c2}`----...```-:::::. +${c1} `os. ${c2}.::::::::::::::-``` ` ` +${c1} +s+ ${c2}.::::::::::::::::---...--` +${c1}-ss: ${c2}`-::::::::::::::::-.``.`` +${c1}/ss- ${c2}.::::::::::::-.`` ` +${c1}+ss: ${c2}.::::::::::::- +${c1}/sso ${c2}.::::::-::::::- +${c1}.sss/ ${c2}-:::-.` .::::: +${c1} /sss+. ${c2}..`${c1} `--` ${c2}.::: +${c1} -ossso+/:://+/-` ${c2}.:` +${c1} -/+ooo+/-. ${c2}` +EOF + ;; + + "manjaro_small"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1}||||||||| |||| +||||||||| |||| +|||| |||| +|||| |||| |||| +|||| |||| |||| +|||| |||| |||| +|||| |||| |||| +EOF + ;; + + "Manjaro"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1}██████████████████ ████████ +██████████████████ ████████ +██████████████████ ████████ +██████████████████ ████████ +████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +EOF + ;; + + "TeArch"*) + set_colors 39 7 1 + read -rd '' ascii_data <<'EOF' +${c1} @@@@@@@@@@@@@@ + @@@@@@@@@ @@@@@@ + @@@@@ @@@@@ + @@ @@ + @% @@ + @ @ + @@@@@@@@@@@@@@@@@@@@@@@@ @@ + .@@@@@@@@@@@@/@@@@@@@@@@@@ + @@@@@@@@@@@@///@@@@@@@@@@@@ + @@@@@@@@@@@@@((((@@@@@@@@@@@@ + @@@@@@@@@@@#(((((((#@@@@@@@@@@@ + @@@@@@@@@@@#//////////@@@@@@@@@@& + @@@@@@@@@@////@@@@@////@@@@@@@@@@ + @@@@@@@@//////@@@@@/////@@@@@@@@@ + @@@@@@@//@@@@@@@@@@@@@@@//@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@@ .@@@@@@@@@@@@@@@@@@@@@@@@@ @ + @@@@@@ @@@. @@@@@@@ + @@@@@@@&@@@@@@@# #@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@ +EOF + ;; + + "Maui"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} `.-://////:--` + .:/oooooooooooooooo+:. + `:+ooooooooooooooooooooooo:` + `:oooooooooooooooooooooooooooo/` + ..```-oooooo/-`` `:oooooo+:.` `-- + :. +oo+-` /ooo/` -/ + -o. `o+- +o/` -o: +`oo` ::` :o/ `+. .+o` /oo. +/o+ . -+oo- ` /oo/ `ooo/ ++o- /ooo+` .+ooo. :ooo+ +++ .+oooo: -oooo+ `oooo+ +:. .oooooo` :ooooo- :oooo: +` .oooooo: :ooooo+ `ooo+-` + .+oooooo` -oooooo: `o/- + +oooooo: .ooooooo. + /ooooooo` /ooooooo/ .. + `:oooooooo/:::/ooooooooo+:--:/:` + `:+oooooooooooooooooooooo+:` + .:+oooooooooooooooo+:. + `.-://////:-.` +EOF + ;; + + "Mer"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} dMs + .-` + `y`-o+` + ``NMMy + .--`:++. + .hNNNNs + /MMMMMN + `ommmd/ +/ + ```` +/ + `:+sssso/-` + .-::. `-::-` `smNMNmdmNMNd/ .://-` +.ymNMNNdmNMMNm+` -dMMh:.....+dMMs `sNNMMNo +dMN+::NMMy::hMM+ mMMo `ohhy/ `dMM+ yMMy::- +MMm yMM- :MMs NMN` `:::::--sMMh dMM` +MMm yMM- -MMs mMM+ `ymmdsymMMMs dMM` +NNd sNN- -NNs -mMNs-.--..:dMMh` dNN +--- .--` `--. .smMMmdddmMNdo` .-- + ./ohddds+:` + +h- `.:-. + ./`.dMMMN+ + +MMMMMd + `+dmmy- + ``` .+` + .dMNo-y. + `hmm/ + .:` + dMs +EOF + ;; + + "Minix"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c2} -sdhyo+:-` -/syymm: + sdyooymmNNy. `` .smNmmdysNd + odyoso+syNNmysoyhhdhsoomNmm+/osdm/ + :hhy+-/syNNmddhddddddmNMNo:sdNd: + `smNNdNmmNmddddddddddmmmmmmmy` + `ohhhhdddddmmNNdmddNmNNmdddddmdh- + odNNNmdyo/:/-/hNddNy-`..-+ydNNNmd: + `+mNho:` smmd/ sNNh :dmms` -+ymmo. +-od/ -m${c1}mm${c2}mo -NN+ +m${c1}mm${c2}m- yms: ++sms -.` :so: .NN+ :os/ .-`mNh: +.-hyh+:////- -sNNd:` .--://ohNs- + `:hNNNNNNNMMd/sNMmhsdMMh/ymmNNNmmNNy/ + -+sNNNNMMNNNsmNMo: :NNmymNNNNMMMms: + //oydNMMMMydMMNysNMMmsMMMMMNyo/` + ../-yNMMy--/::/-.sMMmos+.` + -+oyhNsooo+omy/``` + `::ohdmds-` +EOF + ;; + + "linuxmint_small"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} ___________ +|_ \\ + | ${c2}| _____ ${c1}| + | ${c2}| | | | ${c1}| + | ${c2}| | | | ${c1}| + | ${c2}\\__${c2}___/ ${c1}| + \\_________/ +EOF + ;; + + "Linux Mint Old"* | "LinuxMintOld"* | "mint_old"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1}MMMMMMMMMMMMMMMMMMMMMMMMMmds+. +MMm----::-://////////////oymNMd+` +MMd ${c2}/++ ${c1}-sNMd: +MMNso/` ${c2}dMM `.::-. .-::.` ${c1}.hMN: +ddddMMh ${c2}dMM :hNMNMNhNMNMNh: ${c1}`NMm + NMm ${c2}dMM .NMN/-+MMM+-/NMN` ${c1}dMM + NMm ${c2}dMM -MMm `MMM dMM. ${c1}dMM + NMm ${c2}dMM -MMm `MMM dMM. ${c1}dMM + NMm ${c2}dMM .mmd `mmm yMM. ${c1}dMM + NMm ${c2}dMM` ..` ... ydm. ${c1}dMM + hMM- ${c2}+MMd/-------...-:sdds ${c1}dMM + -NMm- ${c2}:hNMNNNmdddddddddy/` ${c1}dMM + -dMNs-${c2}``-::::-------.`` ${c1}dMM + `/dMNmy+/:-------------:/yMMM + ./ydNMMMMMMMMMMMMMMMMMMMMM + .MMMMMMMMMMMMMMMMMMM +EOF + ;; + + "Linux Mint"* | "LinuxMint"* | "mint"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c2} ...-:::::-... +${c2} .-MMMMMMMMMMMMMMM-. + .-MMMM${c1}`..-:::::::-..`${c2}MMMM-. + .:MMMM${c1}.:MMMMMMMMMMMMMMM:.${c2}MMMM:. + -MMM${c1}-M---MMMMMMMMMMMMMMMMMMM.${c2}MMM- + `:MMM${c1}:MM` :MMMM:....::-...-MMMM:${c2}MMM:` + :MMM${c1}:MMM` :MM:` `` `` `:MMM:${c2}MMM: +.MMM${c1}.MMMM` :MM. -MM. .MM- `MMMM.${c2}MMM. +:MMM${c1}:MMMM` :MM. -MM- .MM: `MMMM-${c2}MMM: +:MMM${c1}:MMMM` :MM. -MM- .MM: `MMMM:${c2}MMM: +:MMM${c1}:MMMM` :MM. -MM- .MM: `MMMM-${c2}MMM: +.MMM${c1}.MMMM` :MM:--:MM:--:MM: `MMMM.${c2}MMM. + :MMM${c1}:MMM- `-MMMMMMMMMMMM-` -MMM-${c2}MMM: + :MMM${c1}:MMM:` `:MMM:${c2}MMM: + .MMM${c1}.MMMM:--------------:MMMM.${c2}MMM. + '-MMMM${c1}.-MMMMMMMMMMMMMMM-.${c2}MMMM-' + '.-MMMM${c1}``--:::::--``${c2}MMMM-.' +${c2} '-MMMMMMMMMMMMM-' +${c2} ``-:::::-`` +EOF + ;; + + "Live Raizo"* | "Live_Raizo"*) + set_colors 3 + read -rd '' ascii_data <<'EOF' +${c1} `......` + -+shmNMMMMMMNmhs/. + :smMMMMMmmhyyhmmMMMMMmo- + -hMMMMd+:. `----` .:odMMMMh- + `hMMMN+. .odNMMMMMMNdo. .yMMMMs` + hMMMd. -dMMMMmdhhdNMMMNh` .mMMMh +oMMMm` :MMMNs.:sddy:-sMMMN- `NMMM+ +mMMMs dMMMo sMMMMMMd yMMMd sMMMm +----` .---` oNMMMMMh `---. .---- + .sMMy: + /MM/ + +dMMms. + hMMMMMMN + `dMMMMMMm: + .+ss+sMNysMMoomMd+ss+. + +MMMMMMN` +MM/ hMMMMMNs + sMMMMMMm-hNMMMd-hMMMMMMd + :yddh+`hMMMMMMN :yddy/` + .hMMMMd: + `..` +EOF + ;; + + "mx_small"*) + set_colors 4 6 7 + read -rd '' ascii_data <<'EOF' +${c3} \\\\ / + \\\\/ + \\\\ + /\\/ \\\\ + / \\ /\\ + / \\/ \\ +/__________\\ +EOF + ;; + + "MX"*) + set_colors 4 6 7 + read -rd '' ascii_data <<'EOF' +${c3}MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMMMMMMM +MMMMMMMMMMNs..yMMMMMMMMMMMMMm: +NMMMMMMM +MMMMMMMMMN+ :mMMMMMMMMMNo` -dMMMMMMMM +MMMMMMMMMMMs. `oNMMMMMMh- `sNMMMMMMMMM +MMMMMMMMMMMMN/ -hMMMN+ :dMMMMMMMMMMM +MMMMMMMMMMMMMMh- +ms. .sMMMMMMMMMMMMM +MMMMMMMMMMMMMMMN+` ` +NMMMMMMMMMMMMMM +MMMMMMMMMMMMMMNMMd: .dMMMMMMMMMMMMMMM +MMMMMMMMMMMMm/-hMd- `sNMMMMMMMMMMMMM +MMMMMMMMMMNo` -` :h/ -dMMMMMMMMMMMM +MMMMMMMMMd: /NMMh- `+NMMMMMMMMMM +MMMMMMMNo` :mMMN+` `-hMMMMMMMM +MMMMMMh. `oNMMd: `/mMMMMMM +MMMMm/ -hMd- `sNMMMM +MMNs` - :dMMM +Mm: `oMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +EOF + ;; + + "Namib"*) + set_colors 1 + read -rd '' ascii_data <<'EOF' +${c1} .:+shysyhhhhysyhs+:. + -/yyys syyy/- + -shy yhs- + -yhs shy- + +hy yh+ + +ds sd+ +/ys so sy/ +sh smMMNdyo hs +yo ymMMMMNNMMNho oy +N ydMMMNNMMMMMMMMMmy N +N shmMMMMNNMMMMMMMMMMMMMNy N +yo ooshmNMMMNNNNMMMMMMMMMMMMMMMMMms oy +sd yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy ds +/ys sy/ + +ds sd+ + +hy yh+ + -yhs shy- + -shy yhs- + -/yyys syyy/- + .:+shysyhyhhysyhs+:. +EOF + ;; + + "Neptune"*) + set_colors 7 + read -rd '' ascii_data <<'EOF' +${c1} ./+sydddddddys/-. + .+ymNNdyooo/:+oooymNNmy/` + `/hNNh/.` `-+dNNy:` + /mMd/. .++.:oy/ .+mMd- + `sMN/ oMMmdy+. `oNNo + `hMd. `/ymy/. :NMo + oMN- `/dMd: /MM- +`mMy -dMN+` mMs +.MMo -NMM/ yMs + dMh mMMMo:` `NMo + /MM/ /ymMMMm- sMN. + +Mm: .hMMd` oMN/ + +mNs. `yNd/` -dMm- + .yMNs: `/.` `/yNNo` + .odNNy+-` .:ohNNd/. + -+ymNNmdyyyyyyydmNNmy+. + `-//sssssss//. +EOF + ;; + + "netbsd_small"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c2}\\\\${c1}\`-______,----__ +${c2} \\\\ ${c1}__,---\`_ +${c2} \\\\ ${c1}\`.____ +${c2} \\\\${c1}-______,----\`- +${c2} \\\\ + \\\\ + \\\\ +EOF + ;; + + "NetBSD"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} `-/oshdmNMNdhyo+:-` +${c2}y${c1}/s+:-`` `.-:+oydNMMMMNhs/-`` +${c2}-m+${c1}NMMMMMMMMMMMMMMMMMMMNdhmNMMMmdhs+/-` + ${c2}-m+${c1}NMMMMMMMMMMMMMMMMMMMMmy+:` + ${c2}-N/${c1}dMMMMMMMMMMMMMMMds:` + ${c2}-N/${c1}hMMMMMMMMMmho:` + ${c2}-N/${c1}-:/++/:.` +${c2} :M+ + :Mo + :Ms + :Ms + :Ms + :Ms + :Ms + :Ms + :Ms + :Ms +EOF + ;; + + "Netrunner"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} .:oydmMMMMMMmdyo:` + -smMMMMMMMMMMMMMMMMMMds- + +mMMMMMMMMMMMMMMMMMMMMMMMMd+ + /mMMMMMMMMMMMMMMMMMMMMMMMMMMMMm/ + `hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMy` + .mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd` + dMMMMMMMMMMMMMMMMMMMMMMNdhmMMMMMMMMMMh ++MMMMMMMMMMMMMNmhyo+/-. -MMMMMMMMMMMM/ +mMMMMMMMMd+:.` `mMMMMMMMMMMMMd +MMMMMMMMMMMdy/. yMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMNh+` +MMMMMMMMMMMMMMM +mMMMMMMMMMMMMMMMMMs -NMMMMMMMMMMMMMMd ++MMMMMMMMMMMMMMMMMN. `mMMMMMMMMMMMMMMM/ + dMMMMMMMMMMMMMMMMMy hMMMMMMMMMMMMMMMh + `dMMMMMMMMMMMMMMMMM-+MMMMMMMMMMMMMMMd` + `hMMMMMMMMMMMMMMMMmMMMMMMMMMMMMMMMy + /mMMMMMMMMMMMMMMMMMMMMMMMMMMMMm: + +dMMMMMMMMMMMMMMMMMMMMMMMMd/ + -odMMMMMMMMMMMMMMMMMMdo- + `:+ydmNMMMMNmhy+-` +EOF + ;; + + "Nitrux"*) + set_colors 4 + read -rd '' ascii_data <<'EOF' +${c1}`:/. +`/yo +`/yo +`/yo .+:. +`/yo .sys+:.` +`/yo `-/sys+:.` +`/yo ./sss+:.` +`/yo .:oss+:-` +`/yo ./o///:-` +`/yo `.-:///////:` +`/yo `.://///++//-`` +`/yo `.-:////++++/-` +`/yo `-://///++o+/-` +`/yo `-/+o+++ooo+/-` +`/s+:+oooossso/.` +`//+sssssso:. +`+syyyy+:` +:+s+- +EOF + ;; + + "nixos_small") + set_colors 4 6 + read -rd '' ascii_data <<'EOF' + ${c1} \\\\ \\\\ // + ==\\\\__\\\\/ // + // \\\\// +==// //== + //\\\\___// +// /\\\\ \\\\== + // \\\\ \\\\ +EOF + ;; + + "nixos_old"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' +${c1} ::::. ${c2}'::::: ::::' +${c1} '::::: ${c2}':::::. ::::' +${c1} ::::: ${c2}'::::.::::: +${c1} .......:::::..... ${c2}:::::::: +${c1} ::::::::::::::::::. ${c2}:::::: ${c1}::::. + ::::::::::::::::::::: ${c2}:::::. ${c1}.::::' +${c2} ..... ::::' ${c1}:::::' +${c2} ::::: '::' ${c1}:::::' +${c2} ........::::: ' ${c1}:::::::::::. +${c2}::::::::::::: ${c1}::::::::::::: +${c2} ::::::::::: ${c1}.. ${c1}::::: +${c2} .::::: ${c1}.::: ${c1}::::: +${c2} .::::: ${c1}::::: ${c1}''''' ${c2}..... + ::::: ${c1}':::::. ${c2}......:::::::::::::' + ::: ${c1}::::::. ${c2}':::::::::::::::::' +${c1} .:::::::: ${c2}':::::::::: +${c1} .::::''::::. ${c2}'::::. +${c1} .::::' ::::. ${c2}'::::. +${c1} .:::: :::: ${c2}'::::. +EOF + ;; + + "NixOS"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' +${c1} ▗▄▄▄ ${c2}▗▄▄▄▄ ▄▄▄▖ +${c1} ▜███▙ ${c2}▜███▙ ▟███▛ +${c1} ▜███▙ ${c2}▜███▙▟███▛ +${c1} ▜███▙ ${c2}▜██████▛ +${c1} ▟█████████████████▙ ${c2}▜████▛ ${c1}▟▙ +${c1} ▟███████████████████▙ ${c2}▜███▙ ${c1}▟██▙ +${c2} ▄▄▄▄▖ ▜███▙ ${c1}▟███▛ +${c2} ▟███▛ ▜██▛ ${c1}▟███▛ +${c2} ▟███▛ ▜▛ ${c1}▟███▛ +${c2}▟███████████▛ ${c1}▟██████████▙ +${c2}▜██████████▛ ${c1}▟███████████▛ +${c2} ▟███▛ ${c1}▟▙ ▟███▛ +${c2} ▟███▛ ${c1}▟██▙ ▟███▛ +${c2} ▟███▛ ${c1}▜███▙ ▝▀▀▀▀ +${c2} ▜██▛ ${c1}▜███▙ ${c2}▜██████████████████▛ +${c2} ▜▛ ${c1}▟████▙ ${c2}▜████████████████▛ +${c1} ▟██████▙ ${c2}▜███▙ +${c1} ▟███▛▜███▙ ${c2}▜███▙ +${c1} ▟███▛ ▜███▙ ${c2}▜███▙ +${c1} ▝▀▀▀ ▀▀▀▀▘ ${c2}▀▀▀▘ +EOF + ;; + + "Nurunner"*) + set_colors 4 + read -rd '' ascii_data <<'EOF' +${c1} ,xc + ;00cxXl + ;K0, .xNo. + :KO' .lXx. + cXk. ;xl cXk. + cXk. ;k:.,xo. cXk. + .lXx. :x::0MNl,dd. :KO, + .xNx. cx;:KMMMMMNo'dx. ;KK; + .dNl. cd,cXMMMMMMMMMWd,ox' 'OK: +;WK. 'K,.KMMMMMMMMMMMMMWc.Kx lMO + 'OK: 'dl'xWMMMMMMMMMM0::x: 'OK: + .kNo .xo'xWMMMMMM0;:O: ;KK; + .dXd. .do,oNMMO;ck: ;00, + oNd. .dx,;'cO; ;K0, + oNx. okk; ;K0, + lXx. :KO' + cKk' cXk. + ;00:lXx. + ,kd. +EOF + ;; + + "NuTyX"*) + set_colors 4 1 + read -rd '' ascii_data <<'EOF' +${c1} . + . + ... + ... + .... .........--. + ..-++-----....--++++++---. + .-++++++-. .-++++++++++++-----.. + .--... .++..-+++--.....-++++++++++--.. + . .-+-. .**- .... ..-+----.. + .+++. .*+. + -++-----. + .+++++- ++. .*+. .....-+++-----. + -+++-++. .+. .-+***++***++--++++. . + -+-. -- -. -*- ...... ..--. +.-. .+- . -+. +. .+- +. + -- -- + -+----. .- + -++-.+. . + .++. -- + +. ----. + . .+. .. + - . + . +EOF + ;; + + "OBRevenge"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} __ __ + _@@@@ @@@g_ + _@@@@@@ @@@@@@ + _@@@@@@M W@@@@@@_ + j@@@@P ^W@@@@ + @@@@L____ _____Q@@@@ +Q@@@@@@@@@@j@@@@@@@@@@ +@@@@@ T@j@ T@@@@@ +@@@@@ ___Q@J@ _@@@@@ +@@@@@fMMM@@j@jggg@@@@@@ +@@@@@ j@j@^MW@P @@@@ +Q@@@@@ggg@@f@ @@@@@@L +^@@@@WWMMP ^ Q@@@@ + @@@@@_ _@@@@l + W@@@@@g_____g@@@@@P + @@@@@@@@@@@@@@@@l + ^W@@@@@@@@@@@P + ^TMMMMTll +EOF + ;; + + "openbsd_small") + set_colors 3 7 6 1 8 + read -rd '' ascii_data <<'EOF' +${c1} _____ + \\- -/ + \\_/ \\ + | ${c2}O O${c1} | + |_ < ) 3 ) + / \\ / + /-_____-\\ +EOF + ;; + + "OpenBSD"*) + set_colors 3 7 6 1 8 + read -rd '' ascii_data <<'EOF' +${c3} _ + (_) +${c1} | . +${c1} . |L /| . ${c3} _ +${c1} _ . |\ _| \--+._/| . ${c3}(_) +${c1} / ||\| Y J ) / |/| ./ + J |)'( | ` F`.'/ ${c3} _ +${c1} -<| F __ .-< ${c3}(_) +${c1} | / .-'${c3}. ${c1}`. /${c3}-. ${c1}L___ + J \\ < ${c3}\ ${c1} | | ${c5}O${c3}\\${c1}|.-' ${c3} _ +${c1} _J \\ .- \\${c3}/ ${c5}O ${c3}| ${c1}| \\ |${c1}F ${c3}(_) +${c1} '-F -<_. \\ .-' `-' L__ +__J _ _. >-' ${c1})${c4}._. ${c1}|-' +${c1} `-|.' /_. ${c4}\_| ${c1} F + /.- . _.< + /' /.' .' `\\ + /L /' |/ _.-'-\\ + /'J ___.---'\| + |\ .--' V | `. ` + |/`. `-. `._) + / .-.\\ + \\ ( `\\ + `.\\ +EOF + ;; + + "openEuler"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} + (##### + (((######## ##### + ((( ########## __...__ + (((((((( ####### /((((((###\ + ((((((((((( ....... \(((((####/ + (((((( ((((######### ******* + %((((((# ((######## + /////((((( ### +/////(((((((# (((& + ((((((((((((( + (((((((((((( + ((((((((( ((((((### + /((((((###### + //((((((###### + /((((((##### + *********/ +EOF + ;; + + "OpenIndiana"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} .sy/ + .yh+ + + ${c1}-+syyyo+- ${c2} /+. + ${c1}+ddo/---/sdh/ ${c2} ym- + ${c1}`hm+ `sms${c2} ym-```````.-. + ${c1}sm+ sm/ ${c2} ym- +s + ${c1}hm. /mo ${c2} ym- /h + ${c1}omo ym: ${c2} ym- `os` + ${c1}smo` .ym+ ${c2} ym- .os- + `` ${c1}:ymy+///oyms- ${c2} ym- .+s+. + ..` ${c1}`:+oo+/-` ${c2} -//oyo- + -:` .:oys/. ++- `./oyys/. +h+` `.-:+oyyyo/-` +`/ossssysso+/-.` +EOF + ;; + + "openmamba"*) + set_colors 7 2 + read -rd '' ascii_data <<'EOF' +${c1} ````` + .-/+ooooooooo+/:-` + ./ooooooooooooooooooo+:. + -+oooooooooooooooooooooooo+- + .+ooooooooo+/:---::/+ooooooooo+. + :oooooooo/-` `-/oo${c2}s´${c1}oooo.${c2}s´${c1} + :ooooooo/` `${c2}sNds${c1}ooo${c2}sNds${c1} + -ooooooo- ${c2}:dmy${c1}ooo${c2}:dmy${c1} + +oooooo: :oooooo- +.ooooooo .://:` +:oooooo+ ./+o+:` +-ooooooo` `oooooo+ +`ooooooo: /oooooo+ + -ooooooo: :ooooooo. + :ooooooo+. .+ooooooo: + :oooooooo+-` `-+oooooooo: + .+ooooooooo+/::::://oooooooooo+. + -+oooooooooooooooooooooooo+- + .:ooooooooooooooooooo+:. + `-:/ooooooooo+/:.` + `````` +EOF + ;; + + "OpenMandriva"*) + set_colors 4 + read -rd '' ascii_data <<'EOF' +${c1} `````` + `-:/+++++++//:-.` + .:+++oooo+/:.`` `` + `:+ooooooo+:. `-:/++++++/:.` + -+oooooooo:` `-++o+/::::://+o+/- + `/ooooooooo- -+oo/.` `-/oo+. + `+ooooooooo. :os/` .+so: + +sssssssss/ :ss/ `+ss- + :ssssssssss` sss` .sso + ossssssssss `yyo sys +`sssssssssss` `yys `yys +`sssssssssss: +yy/ +yy: + oyyyyyyyyyys. `oyy/` `+yy+ + :yyyyyyyyyyyo. `+yhs:. `./shy/ + oyyyyyyyyyyys:` .oyhys+:----/+syhy+. ` + `syyyyyyyyyyyyo-` .:osyhhhhhyys+:``.:` + `oyyyyyyyyyyyyys+-`` `.----.```./oo. + /yhhhhhhhhhhhhhhyso+//://+osyhy/` + `/yhhhhhhhhhhhhhhhhhhhhhhhhy/` + `:oyhhhhhhhhhhhhhhhhhhyo:` + .:+syhhhhhhhhys+:-` + ``....`` +EOF + ;; + + "OpenStage"*) + set_colors 2 + read -rd '' ascii_data <<'EOF' +${c1} /(/ + .(((((((, + /(((((((((/ + .(((((/,/(((((, + *(((((* ,(((((/ + (((((* .*/(( + *((((/ (//(/* + /((((* ((((((((((, + . /((((* (((((((((((((. + ((. *((((/ ,(((((((( + ,(((/ (((((/ ** ,((((((* + /(((((. .(((((/ //(((* *(((((/ + .(((((, ((/ .(((((/. .(((((, + /((((* ,(((((((/ ,((((( + /(((((((((((((((((((/. /(((((((((/ + /(((((((((((((((((, /(((((((((((/ + */(((((//*. */((/(/(/* +EOF + ;; + + "OpenWrt"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} _______ +| |.-----.-----.-----. +| - || _ | -__| | +|_______|| __|_____|__|__| + |__| + ________ __ +| | | |.----.| |_ +| | | || _|| _| +|________||__| |____| +EOF + ;; + + "Open Source Media Center"* | "osmc") + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} -+shdmNNNNmdhs+- + .+hMNho/:..``..:/ohNMh+. + :hMdo. .odMh: + -dMy- -yMd- + sMd- -dMs + hMy +. .+ yMh + yMy dMs. .sMd yMy +:Mm dMNMs` `sMNMd `mM: +yM+ dM//mNs``sNm//Md +My +mM- dM: +NNNN+ :Md -Mm +mM- dM: `oNN+ :Md -Mm +yM+ dM/+NNo` :Md +My +:Mm` dMMNs` :Md `mM: + yMy dMs` -ms yMy + hMy +. yMh + sMd- -dMs + -dMy- -yMd- + :hMdo. .odMh: + .+hMNho/:..``..:/ohNMh+. + -+shdmNNNNmdhs+- +EOF + ;; + + "Oracle"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} + `-/+++++++++++++++++/-.` + `/syyyyyyyyyyyyyyyyyyyyyyys/. + :yyyyo/-...............-/oyyyy/ + /yyys- .oyyy+ +.yyyy` `syyy- +:yyyo /yyy/ +.yyyy` `syyy- + /yyys. .oyyyo + /yyyyo:-...............-:oyyyy/` + `/syyyyyyyyyyyyyyyyyyyyyyys+. + `.:/+ooooooooooooooo+/:.` +EOF + ;; + + "OS Elbrus"*) + set_colors 4 7 3 + read -rd '' ascii_data <<'EOF' +${c1} ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + ██▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀██ + ██ ██ + ██ ███████ ███████ ██ + ██ ██ ██ ██ ██ ██ + ██ ██ ██ ██ ██ ██ + ██ ██ ██ ██ ██ ██ + ██ ██ ██ ██ ██ ██ + ██ ██ ███████ ███████ + ██ ██ ██ + ██ ██▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄██ + ██ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀██ + ██ ██ + ███████████████████████████ +EOF + ;; + + "PacBSD"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} :+sMs. + `:ddNMd- -o--` + -sMMMMh: `+N+`` + yMMMMMs` .....-/-... `mNh/ + yMMMMMmh+-`:sdmmmmmmMmmmmddy+-``./ddNMMm + yNMMNMMMMNdyyNNMMMMMMMMMMMMMMMhyshNmMMMm + :yMMMMMMMMMNdooNMMMMMMMMMMMMMMMMNmy:mMMd + +MMMMMMMMMmy:sNMMMMMMMMMMMMMMMMMMMmshs- + :hNMMMMMMN+-+MMMMMMMMMMMMMMMMMMMMMMMs. + .omysmNNhy/+yNMMMMMMMMMMNMMMMMMMMMNdNNy- + /hMM:::::/hNMMMMMMMMMMMm/-yNMMMMMMN.mMNh` +.hMMMMdhdMMMMMMMMMMMMMMmo `sMMMMMMN mMMm- +:dMMMMMMMMMMMMMMMMMMMMMdo+ oMMMMMMN`smMNo` +/dMMMMMMMMMMMMMMMMMMMMMNd/` :yMMMMMN:-hMMM. +:dMMMMMMMMMMMMMMMMMMMMMNh` oMMMMMMNo/dMNN` +:hMMMMMMMMMMMMMMMMMMMMMMNs--sMMMMMMMNNmy++` + sNMMMMMMMMMMMMMMMMMMMMMMMmmNMMMMMMNho::o. + :yMMMMMMMMMMMMMNho+sydNNNNNNNmysso/` -// + /dMMMMMMMMMMMMMs- ````````..`` + .oMMMMMMMMMMMMNs` ./y:` + +dNMMNMMMMMMMmy` ``./ys. + `/hMMMMMMMMMMMNo-`` `.+yy+-` + `-/hmNMNMMMMMMmmddddhhy/-` + `-+oooyMMMdsoo+/:. +EOF + ;; + + "parabola_small"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} __ __ __ _ +.`_//_//_/ / `. + / .` + / .` + /.` + /` +EOF + ;; + + "Parabola"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} `.-. `. + `.` `:++. `-+o+. + `` `:+/. `:+/. `-+oooo+ + ``-::-.:+/. `:+/. `-+oooooo+ + `.-:///- ..` .-. `-+oooooooo- + `..-..` `+ooooooooo: +`` :oooooooo/ + `ooooooo: + `oooooo: + -oooo+. + +ooo/` + -ooo- + `+o/. + /+- + //` + -. +EOF + ;; + + "Pardus"*) + set_colors 3 7 6 1 8 + read -rd '' ascii_data <<'EOF' +${c1} .smNdy+- `.:/osyyso+:.` -+ydmNs. +/Md- -/ymMdmNNdhso/::/oshdNNmdMmy/. :dM/ +mN. oMdyy- -y `-dMo .Nm +.mN+` sMy hN+ -: yMs `+Nm. + `yMMddMs.dy `+` sMddMMy` + +MMMo .` . oMMM+ + `NM/ `````.` `.````` +MN` + yM+ `.-:yhomy ymohy:-.` +My + yM: yo oy :My + +Ms .N` `N. +h sM+ + `MN - -::::::- : :o:+`NM` + yM/ sh -dMMMMd- ho +y+My + .dNhsohMh-//: /mm/ ://-yMyoshNd` + `-ommNMm+:/. oo ./:+mMNmmo:` + `/o+.-somNh- :yy: -hNmos-.+o/` + ./` .s/`s+sMdd+``+ddMs+s`/s. `/. + : -y. -hNmddmNy. .y- : + -+ `..` +- +EOF + ;; + + "Parrot"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} `:oho/-` +`mMMMMMMMMMMMNmmdhy- + dMMMMMMMMMMMMMMMMMMs` + +MMsohNMMMMMMMMMMMMMm/ + .My .+dMMMMMMMMMMMMMh. + + :NMMMMMMMMMMMMNo + `yMMMMMMMMMMMMMm: + /NMMMMMMMMMMMMMy` + .hMMMMMMMMMMMMMN+ + ``-NMMMMMMMMMd- + /MMMMMMMMMMMs` + mMMMMMMMsyNMN/ + +MMMMMMMo :sNh. + `NMMMMMMm -o/ + oMMMMMMM. + `NMMMMMM+ + +MMd/NMh + mMm -mN` + /MM `h: + dM` . + :M- + d: + -+ + - +EOF + ;; + + "Parsix"*) + set_colors 3 1 7 8 + read -rd '' ascii_data <<'EOF' + ${c2}-/+/:. + ${c2}.syssssys. + ${c1}.--. ${c2}ssssssssso${c1} ..--. + :++++++: ${c2}+ssssssss+${c1} ./++/+++: + /+++++++++.${c2}.yssooooy`${c1}-+///////o- + /++++++++++.${c2}+soooos:${c1}:+////////+- + :+++++////o-${c2}oooooo-${c1}+/////////- + `-/++//++-${c4}.-----.-${c1}:+/////:- + ${c3}-://::--${c1}-:/:${c4}.--.````.--.${c1}:::-${c3}--::::::. +${c3}-/:::::::://:${c4}.:-` `-:${c3}`:/:::::::--/- +${c3}/::::::::::/-${c4}--. .-.${c3}-/://///::::/ +${c3}-/:::::::::/:${c4}`:-. .-:${c3}`:///////////- + `${c3}-::::--${c1}.-://.${c4}---....---${c1}`:+/:-${c3}--::::-` + ${c1}-/+///+o/-${c4}.----.${c1}.:oo+++o+. + ${c1}-+/////+++o:${c2}syyyyy.${c1}o+++++++++: + ${c1}.+////+++++-${c2}+sssssy+${c1}.++++++++++\ + ${c1}.+:/++++++.${c2}.yssssssy-${c1}`+++++++++: + ${c1}:/+++++- ${c2}+sssssssss ${c1}-++++++- + ${c1}`--` ${c2}+sssssssso ${c1}`--` + ${c2}+sssssy+` + ${c2}`.::-` +EOF + ;; + + "PCBSD"* | "TrueOS"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} .. + s. + +y + yN + -MN `. + :NMs `m + .yMMm` `No + `-/+++sdMMMNs+-`+Ms + `:oo+-` .yMMMMy` `-+oNMh + -oo- +NMMMM/ oMMh- + .s+` ` oMMMMM/ - oMMMhy. + +s`- :: :MMMMMd -o `mMMMy`s+ + y+ h .Ny+oNMMMMMN/ sh+NMMMMo +y + s+ .ds -NMMMMMMMMMMNdhdNMMMMMMh` +s +-h .NM` `hMMMMMMMMMMMMMMNMMNy: h- +y- hMN` hMMmMMMMMMMMMNsdMNs. -y +m` mMMy` oMMNoNMMMMMMo` sMMMo `m +m` :NMMMdyydMMMMo+MdMMMs sMMMd` `m +h- `+ymMMMMMMMM--M+hMMN/ +MMMMy -h +:y `.sMMMMM/ oMM+.yMMNddNMMMMMm y: + y: `s dMMN- .MMMM/ :MMMMMMMMMMh :y + `h: `mdmMMM/ yMMMMs sMMMMMMMMN- :h` + so -NMMMN /mmd+ `dMMMMMMMm- os + :y: `yMMM` `+NMMMMMMNo`:y: + /s+`.omy /NMMMMMNh/.+s: + .+oo:-. /mdhs+::oo+. + -/o+++++++++++/- +EOF + ;; + + "PCLinuxOS"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} mhhhyyyyhhhdN + dyssyhhhhhhhhhhhssyhN + Nysyhhyo/:-.....-/oyhhhssd + Nsshhy+. `/shhysm + dohhy/ -shhsy + dohhs` /hhys +N+hho ${c2}+ssssss+- .+syhys+ ${c1}/hhsy +ohhh` ${c2}ymmo++hmm+`smmy/::+y` ${c1}shh+ ++hho ${c2}ymm- /mmy+mms ${c1}:hhod +/hh+ ${c2}ymmhhdmmh.smm/ ${c1}.hhsh ++hhs ${c2}ymm+::-` /mmy` ` ${c1}/hh+m +yyhh- ${c2}ymm- /dmdyosyd` ${c1}`yhh+ + ohhy` ${c2}://` -/+++/- ${c1}ohhom + N+hhy- `shhoh + sshho. `+hhyom + dsyhhs/. `:ohhhoy + dysyhhhso///://+syhhhssh + dhyssyhhhhhhyssyyhN + mddhdhdmN +EOF + ;; + + "Pengwin"*) + set_colors 5 5 13 + read -rd '' ascii_data <<'EOF' +${c3} ...` +${c3} `-///:-` +${c3} .+${c2}ssys${c3}/ +${c3} +${c2}yyyyy${c3}o ${c2} +${c2} -yyyyyy: +${c2} `.:/+ooo+/:` -yyyyyy+ +${c2} `:oyyyyyys+:-.`syyyyyy: +${c2} .syyyyyyo-` .oyyyyyyo +${c2} `syyyyyy `-+yyyyyyy/` +${c2} /yyyyyy+ -/osyyyyyyo/. +${c2} +yyyyyy- `.-:::-.` +${c2} .yyyyyy- +${c3} :${c2}yyyyy${c3}o +${c3} .+${c2}ooo${c3}+ +${c3} `.::/:. +EOF + ;; + + "Peppermint"*) + set_colors 1 15 3 + read -rd '' ascii_data <<'EOF' +${c1} PPPPPPPPPPPPPP +${c1} PPPP${c2}MMMMMMM${c1}PPPPPPPPPPP +${c1} PPPP${c2}MMMMMMMMMM${c1}PPPPPPPP${c2}MM${c1}PP +${c1} PPPPPPPP${c2}MMMMMMM${c1}PPPPPPPP${c2}MMMMM${c1}PP +${c1} PPPPPPPPPPPP${c2}MMMMMM${c1}PPPPPPP${c2}MMMMMMM${c1}PP +${c1} PPPPPPPPPPPP${c2}MMMMMMM${c1}PPPP${c2}M${c1}P${c2}MMMMMMMMM${c1}PP +${c1} PP${c2}MMMM${c1}PPPPPPPPPP${c2}MMM${c1}PPPPP${c2}MMMMMMM${c1}P${c2}MM${c1}PPPP +${c1} P${c2}MMMMMMMMMM${c1}PPPPPP${c2}MM${c1}PPPPP${c2}MMMMMM${c1}PPPPPPPP +${c1} P${c2}MMMMMMMMMMMM${c1}PPPPP${c2}MM${c1}PP${c2}M${c1}P${c2}MM${c1}P${c2}MM${c1}PPPPPPPPPPP +${c1} P${c2}MMMMMMMMMMMMMMMM${c1}PP${c2}M${c1}P${c2}MMM${c1}PPPPPPPPPPPPPPPP +${c1} P${c2}MMM${c1}PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP${c2}MMMMM${c1}P +${c1} PPPPPPPPPPPPPPPP${c2}MMM${c1}P${c2}M${c1}P${c2}MMMMMMMMMMMMMMMM${c1}PP +${c1} PPPPPPPPPPP${c2}MM${c1}P${c2}MM${c1}PPPP${c2}MM${c1}PPPPP${c2}MMMMMMMMMMM${c1}PP +${c1} PPPPPPPP${c2}MMMMMM${c1}PPPPP${c2}MM${c1}PPPPPP${c2}MMMMMMMMM${c1}PP +${c1} PPPP${c2}MM${c1}P${c2}MMMMMMM${c1}PPPPPP${c2}MM${c1}PPPPPPPPPP${c2}MMMM${c1}PP +${c1} PP${c2}MMMMMMMMM${c1}P${c2}M${c1}PPPP${c2}MMMMMM${c1}PPPPPPPPPPPPP +${c1} PP${c2}MMMMMMM${c1}PPPPPPP${c2}MMMMMM${c1}PPPPPPPPPPPP +${c1} PP${c2}MMMM${c1}PPPPPPPPP${c2}MMMMMMM${c1}PPPPPPPP +${c1} PP${c2}MM${c1}PPPPPPPP${c2}MMMMMMMMMM${c1}PPPP +${c1} PPPPPPPPPP${c2}MMMMMMMM${c1}PPPP +${c1} PPPPPPPPPPPPPP +EOF + ;; + + "Pisi"*) + set_colors 12 7 6 1 8 + read -rd '' ascii_data <<'EOF' +${c1} \Fv/!- `:?lzC +${c1} Q!::=zFx! ${c2}`;v6WBCicl;` ${c1},vCC\!::#. +${c1} ,%:::,'` ${c2}+#%@@FQ@@. ,cF%i${c1}``-',::a? +${c1} +m:,'```${c2}}3,/@@Q\@@ "af-${c1} `-'"7f + =o'.` ${c2}/m' :Q@:Qg ,kl${c1} `.|o + :k` '${c2}$+ 'Narm >d,${c1} ii + #`${c2}!p. `C , 'd+${c1} %' +${c2} !0m `6Kv + =a m+ + !A !\L|: :|L\! $: + .8` Q''%Q#' '#Q%''Q `0- + :6 E|.6QQu uQQ6.|E p: + i{ \jts9? ?9stj\ u\ + |a` -''. `e> + ,m+ ${c1}'^ !`${c2}s@@@@a${c1}'"`+`${c2} >e' + !3|${c1}`|=>>r- ${c2}'U%:${c1} '>>>=:`\3! + 'xopE| ${c2}`'${c1} `ledoz- + `;=>>+`${c2}`^llci/|==|/iclc;`${c1}'>>>>: + `^`+~ ${c2}````${c1} !!-^ +EOF + ;; + + "PNM Linux"* | "WHPNM Linux"*) + set_colors 33 9 15 202 + read -rd '' ascii_data <<'EOF' + +${c1} + ``.---..` `--` + ``.---........-:.${c2}-::`${c1} + ${c2}./::-${c1}........${c2}--::.````${c1} + ${c2}.:://:::${c1}----${c2}::::-..${c1} + ..${c2}--:::::--::::++-${c1}.` + ${c2}`-:-`${c1} .-ohy+::${c2}-:::${c1}/sdmdd:.${c2} `-:- + .-:::${c1}...${c3}sNNmds$y${c1}o/+${c3}sy+NN$m${c1}d+.`${c2}-:::-. + `.-:-${c1}./${c3}dN${c1}()${c3}yyooosd${c1}()${c3}$m${c1}dy${c2}-.::-.`${c1} + ${c2}`.${c1}-...-${c3}+hNdyyyyyydmy${c1}:......${c2}`${c1} + ``..--.....-${c3}yNNm${c4}hssssh${c3}mmdo${c1}.........``` +`-:://:.....${c3}hNNNNN${c4}mddm${c3}NNNmds${c1}.....//::--` + ```.:-...${c3}oNNNNNNNNNNNNNNmd/${c1}...:-.``` + .....${c3}hNNNNNNNNNNNNNNmds${c1}....` + --...${c3}hNNNNNNNNNNNNNNmdo${c1}..... + .:...${c3}/NNNNNNNNNNNNNNdd${c1}:....` + `-...${c3}+mNNNNNNNNNNNmh${c1}:...-. + ${c4}.:+o+/:-${c1}:+oo+///++o+/:-${c4}:/+ooo/:. + ${c4}+oo/:o- +oooooso.` + ${c4}.` ` `/ .-//- +EOF + ;; + + "popos_small"* | "pop_os_small"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1}______ +\\ _ \\ __ + \\ \\ \\ \\ / / + \\ \\_\\ \\ / / + \\ ___\\ /_/ + \\ \\ _ + __\\_\\__(_)_ + (___________)` +EOF + ;; + + "Pop!_OS"* | "popos"* | "pop_os"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} ///////////// + ///////////////////// + ///////${c2}*767${c1}//////////////// + //////${c2}7676767676*${c1}////////////// + /////${c2}76767${c1}//${c2}7676767${c1}////////////// + /////${c2}767676${c1}///${c2}*76767${c1}/////////////// + ///////${c2}767676${c1}///${c2}76767${c1}.///${c2}7676*${c1}/////// +/////////${c2}767676${c1}//${c2}76767${c1}///${c2}767676${c1}//////// +//////////${c2}76767676767${c1}////${c2}76767${c1}///////// +///////////${c2}76767676${c1}//////${c2}7676${c1}////////// +////////////,${c2}7676${c1},///////${c2}767${c1}/////////// +/////////////*${c2}7676${c1}///////${c2}76${c1}//////////// +///////////////${c2}7676${c1}//////////////////// + ///////////////${c2}7676${c1}///${c2}767${c1}//////////// + //////////////////////${c2}'${c1}//////////// + //////${c2}.7676767676767676767,${c1}////// + /////${c2}767676767676767676767${c1}///// + /////////////////////////// + ///////////////////// + ///////////// +EOF + ;; + + "Porteus"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} `.-:::-.` + -+ydmNNNNNNNmdy+- + .+dNmdhs+//////+shdmdo. + .smmy+-` ./sdy: + `omdo. `.-/+osssso+/-` `+dy. + `yms. `:shmNmdhsoo++osyyo-``oh. + hm/ .odNmds/.` ``.....:::-+s +/m: `+dNmy:` `./oyhhhhyyooo++so +ys `yNmy- .+hmmho:-.` ``` +s: yNm+` .smNd+. +`` /Nm: +dNd+` + yN+ `smNy. + dm oNNy` + hy -mNm. + +y oNNo + `y` sNN: + `: +NN: + ` .mNo + /mm` + /my` + .sy` + .+: + ` +EOF + ;; + + "postmarketos_small") + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} /\\ + / \\ + / \\ + \\__ \\ + /\\__ \\ _\\ + / / \\/ __ + / / ____/ \\ + / \\ \\ \\ +/_____/ /________\\ +EOF + ;; + + "PostMarketOS"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} /\\ + / \\ + / \\ + / \\ + / \\ + / \\ + \\ \\ + /\\ \\____ \\ + / \\____ \\ \\ + / / \\ \\ + / / \\ ___\\ + / / \\ / ____ + / / \\/ / \\ + / / __________/ \\ + / \\ \\ \\ + / \\ \\ \\ + / / / \\ +/___________/ /____________________\\ +EOF + ;; + + "PuffOS"*) + set_colors 3 + read -rd '' ascii_data <<'EOF' +${c1} + _,..._,m, + ,/' '""; + / ". + ,'mmmMMMMmm. \ + _/-"^^^^^"""%#%mm, ; + ,m,_,' "###) ;, +(###% \#/ ;##mm. + ^#/ __ ___ ; (######) + ; //.\\ //.\\ ; \####/ + _; (#\"// \\"/#) ; ,/ +@##\ \##/ = `"=" ,;mm/ +`\##>.____,...,____,<####@ +EOF + ;; + + "Proxmox"*) + set_colors 7 202 + read -rd '' ascii_data <<'EOF' +${c1} .://:` `://:. + `hMMMMMMd/ /dMMMMMMh` + `sMMMMMMMd: :mMMMMMMMs` +${c2}`-/+oo+/:${c1}`.yMMMMMMMh- -hMMMMMMMy.`${c2}:/+oo+/-` +`:oooooooo/${c1}`-hMMMMMMMyyMMMMMMMh-`${c2}/oooooooo:` + `/oooooooo:${c1}`:mMMMMMMMMMMMMm:`${c2}:oooooooo/` + ./ooooooo+-${c1} +NMMMMMMMMN+ ${c2}-+ooooooo/. + .+ooooooo+-${c1}`oNMMMMNo`${c2}-+ooooooo+. + -+ooooooo/.${c1}`sMMs`${c2}./ooooooo+- + :oooooooo/${c1}`..`${c2}/oooooooo: + :oooooooo/`${c1}..${c2}`/oooooooo: + -+ooooooo/.`${c1}sMMs${c2}`./ooooooo+- + .+ooooooo+-`${c1}oNMMMMNo${c2}`-+ooooooo+. + ./ooooooo+-${c1} +NMMMMMMMMN+ ${c2}-+ooooooo/. + `/oooooooo:`${c1}:mMMMMMMMMMMMMm:${c2}`:oooooooo/` +`:oooooooo/`${c1}-hMMMMMMMyyMMMMMMMh-${c2}`/oooooooo:` +`-/+oo+/:`${c1}.yMMMMMMMh- -hMMMMMMMy.${c2}`:/+oo+/-` +${c1} `sMMMMMMMm: :dMMMMMMMs` + `hMMMMMMd/ /dMMMMMMh` + `://:` `://:` +EOF + ;; + + "Puppy"* | "Quirky Werewolf"* | "Precise Puppy"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c1} `-/osyyyysosyhhhhhyys+- + -ohmNNmh+/hMMMMMMMMNNNNd+dMMMMNM+ + yMMMMNNmmddo/NMMMNNNNNNNNNo+NNNNNy +.NNNNNNmmmddds:MMNNNNNNNNNNNh:mNNN/ +-NNNdyyyhdmmmd`dNNNNNmmmmNNmdd/os/ +.Nm+shddyooo+/smNNNNmmmmNh. :mmd. + NNNNy:` ./hmmmmmmmNNNN: hNMh + NMN- -++- +NNNNNNNNNNm+..-sMMMM- +.MMo oNNNNo hNNNNNNNNmhdNNNMMMMM+ +.MMs /NNNN/ dNmhs+:-` yMMMMMMMM+ + mMM+ .. `sNN+. hMMMMhhMMM- + +MMMmo:...:sNMMMMMms:` hMMMMm.hMMy + yMMMMMMMMMMMNdMMMMMM::/+o+//dMMd` + sMMMMMMMMMMN+:oyyo:sMMMNNMMMNy` + :mMMMMMMMMMMMmddNMMMMMMMMmh/ + /dMMMMMMMMMMMMMMMMMMNdy/` + .+hNMMMMMMMMMNmdhs/. + .:/+ooo+/:-. +EOF + ;; + + "pureos_small"*) + set_colors 2 7 7 + read -rd '' ascii_data <<'EOF' +${c1} _____________ +| _________ | +| | | | +| | | | +| |_________| | +|_____________| +EOF + ;; + + "PureOS"*) + set_colors 2 7 7 + read -rd '' ascii_data <<'EOF' +${c1}dmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd +dNm//////////////////////////////////mNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNm//////////////////////////////////mNd +dmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd +EOF + ;; + + "Qubes"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} `..--..` + `.----------.` + `..----------------..` + `.------------------------.`` + `..-------------....-------------..` +.::----------..`` ``..----------:+: +:////:----..` `..---:/ossso +:///////:` `/osssssso +:///////: /ssssssso +:///////: /ssssssso +:///////: /ssssssso +:///////: /ssssssso +:///////: /ssssssso +:////////-` .:sssssssso +:///////////-.` `-/osssssssssso +`//////////////:-```.:+ssssssssssssso- + .-://////////////sssssssssssssso/-` + `.:///////////sssssssssssssso:. + .-:///////ssssssssssssssssss/` + `.:////ssss+/+ssssssssssss. + `--//- `-/osssso/. +EOF + ;; + + "Quibian"*) + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} `.--::::::::--.` + `.-:::-..`` ``..-::-.` + .::::-` .${c2}+${c1}:`` `.-::.` + .::::.` -::::::-` `.::. + `-:::-` -:::::::::--..`` .::` + `::::- .${c2}oy${c1}:::::::---.```.: `::` + -:::: `.-:::::::::::-.``` `:: +.::::.`-:::::::::::::. `:. +-::::.::::::::::::::: -: +::::::::::::::::::::` `: +:::::::::::::::::::- `: +::::::::::::::::::: -- +.:::::::::::::::::` `:` +`::::::::::::::::: -` + .:::::::::::::::- -` + `::::::::::::::- `.` + .::::::::::::- `` + `.--:::::-. +EOF + ;; + + "Radix"*) + set_colors 1 2 + read -rd '' ascii_data <<'EOF' +${c2} .:oyhdmNo + `/yhyoosdms` + -o+/ohmmho- + ..`.:/:-` + `.--:::-.``${c1} + .+ydNMMMMMMNmhs:` +`omMMMMMMMMMMMMMMNh- +oNMMMNmddhhyyhhhddmy. +mMMMMNmmddhhysoo+/:-` +yMMMMMMMMMMMMMMMMNNh. +-dmmmmmNNMMMMMMMMMMs` + -+oossyhmMMMMMMMMd- + `sNMMMMMMMMMMMMMm: + `yMMMMMMNmdhhhh: + `sNMMMMMNmmho. + `+mMMMMMMMy. + .yNMMMm+` + `:yd+. +EOF + ;; + + "Raspbian_small"*) + set_colors 2 1 + read -rd '' ascii_data <<'EOF' +${c1} .. ,. + :oo: .:oo: + 'o\\o o/o: +${c2} :: . :: . :: +:: ::: ::: :: +:' '',.'' ': + ::: :::: ::: + ':, '' ,:' + ' ~::~ ' +EOF + ;; + + "Raspbian"*) + set_colors 2 1 + read -rd '' ascii_data <<'EOF' +${c1} `.::///+:/-. --///+//-:`` + `+oooooooooooo: `+oooooooooooo: + /oooo++//ooooo: ooooo+//+ooooo. + `+ooooooo:-:oo- +o+::/ooooooo: + `:oooooooo+`` `.oooooooo+- + `:++ooo/. :+ooo+/.` + ${c2}...` `.----.` ``.. + .::::-``:::::::::.`-:::-` + -:::-` .:::::::-` `-:::- + `::. `.--.` `` `.---.``.::` + .::::::::` -::::::::` ` + .::` .:::::::::- `::::::::::``::. +-:::` ::::::::::. ::::::::::.`:::- +:::: -::::::::. `-:::::::: :::: +-::- .-:::-.``....``.-::-. -::- + .. `` .::::::::. `..`.. + -:::-` -::::::::::` .:::::` + :::::::` -::::::::::` :::::::. + .::::::: -::::::::. :::::::: + `-:::::` ..--.` ::::::. + `...` `...--..` `...` + .:::::::::: + `.-::::-` +EOF + ;; + + "Reborn OS"* | "Reborn"*) + set_colors 2 2 8 + read -rd '' ascii_data <<'EOF' +${c3} + mMMMMMMMMM MMMMMMMMMm + NM MN + MM ${c1}dddddddd dddddddd ${c3}MN + mM ${c1}dd dd ${c3}MM + ${c1}dd hhhhhh hhhhh dd + ${c3}mM ${c1}hh hh ${c3}Mm + NM ${c1}hd ${c3}mMMMMMMd ${c1}dh ${c3}MN + NM ${c1}dd hh ${c3}mMMMMMMMMm ${c1}hh dd ${c3}MN +NM ${c1}dd hh ${c3}mMMMMMMMMMMm ${c1}hh dd ${c3}MN + NM ${c1}dd hh ${c3}mMMMMMMMMm ${c1}hh dd ${c3}MN + NM ${c1}hd ${c3}mMMMMMMm ${c1}dh ${c3}MN + mM ${c1}hh hh ${c3}Mm + ${c1}dd hhhhhh hhhhhh dd + ${c3}MM ${c1}dd dd ${c3}MM + MM ${c1}dddddddd dddddddd ${c3}MN + NM MN + mMMMMMMMMM MMMMMMMMMm +EOF + ;; + + "Red Star"* | "Redstar"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} .. + .oK0l + :0KKKKd. + .xKO0KKKKd + ,Od' .d0000l + .c;. .'''... ..'. +.,:cloddxxxkkkkOOOOkkkkkkkkxxxxxxxxxkkkx: +;kOOOOOOOkxOkc'...',;;;;,,,'',;;:cllc:,. + .okkkkd,.lko .......',;:cllc:;,,'''''. + .cdo. :xd' cd:. ..';'',,,'',,;;;,'. + . .ddl.;doooc'..;oc;'..';::;,'. + coo;.oooolllllllcccc:'. . + .ool''lllllccccccc:::::;. + ;lll. .':cccc:::::::;;;;' + :lcc:'',..';::::;;;;;;;,,. + :cccc::::;...';;;;;,,,,,,. + ,::::::;;;,'. ..',,,,'''. + ........ ...... +EOF + ;; + + "Redcore"*) + set_colors 1 + read -rd '' ascii_data <<'EOF' +${c1} RRRRRRRRR + RRRRRRRRRRRRR + RRRRRRRRRR RRRRR + RRRRRRRRRRRRRRRRRRRRRRRRRRR + RRRRRRR RRR RRR RRRRRRRR +RRRRR RR RRRRRRRRR +RRRR RR RRRRRRRR RR RRRRRR +RRRR R RRRRRRRRRRRRRR RR RRRRR +RRRR R RRRRRRRRRRRRRRRRRR R RRRRR +RRRR RRRRRRRRRRRRRRRRRRR R RRRR + RRR RRRRRRRRRRRRRRRRRRRR R RRRR + RRR RRRRRRRRRRRRRRRRRRRR RRRR + RR RRRRRRRRRRRRRRRRRRR RRR + RR RRRRRRRRRRRRRRRRR RRR + RR RRRRRRRRRRRRRR RR + R RRRR RR +EOF + ;; + + "redhat_old" | "rhel_old"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} `.-..........` + `////////::.`-/. + -: ....-////////. + //:-::///////////` + `--::: `-://////////////: + //////- ``.-:///////// .` + `://////:-.` :///////::///:` + .-/////////:---/////////////: + .-://////////////////////. +${c2} yMN+`.-${c1}::///////////////-` +${c2} .-`:NMMNMs` `..-------..` + MN+/mMMMMMhoooyysshsss +MMM MMMMMMMMMMMMMMyyddMMM+ + MMMM MMMMMMMMMMMMMNdyNMMh` hyhMMM + MMMMMMMMMMMMMMMMyoNNNMMM+. MMMMMMMM + MMNMMMNNMMMMMNM+ mhsMNyyyyMNMMMMsMM +EOF + ;; + + "Redhat"* | "Red Hat"* | "rhel"*) + set_colors 1 + read -rd '' ascii_data <<'EOF' +${c1} .MMM..:MMMMMMM + MMMMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMMMMMM. + MMMMMMMMMMMMMMMMMMMMMM + ,MMMMMMMMMMMMMMMMMMMMMM: + MMMMMMMMMMMMMMMMMMMMMMMM + .MMMM' MMMMMMMMMMMMMMMMMMMMMM + MMMMMM `MMMMMMMMMMMMMMMMMMMM. +MMMMMMMM MMMMMMMMMMMMMMMMMM . +MMMMMMMMM. `MMMMMMMMMMMMM' MM. +MMMMMMMMMMM. MMMM +`MMMMMMMMMMMMM. ,MMMMM. + `MMMMMMMMMMMMMMMMM. ,MMMMMMMM. + MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM: + MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM + `MMMMMMMMMMMMMMMMMMMMMMMM: + ``MMMMMMMMMMMMMMMMM' +EOF + ;; + + "Refracted Devuan"* | "Refracted_Devuan"*) + set_colors 8 7 + read -rd '' ascii_data <<'EOF' +${c2} A + VW + VVW\\ + .yWWW\\ + ,;,,u,;yy;;v;uyyyyyyy ,WWWWW^ + *WWWWWWWWWWWWWWWW/ $VWWWWw , + ^*%WWWWWWVWWX $WWWW** ,yy + , "**WWW/' **' ,yy/WWW*` + &WWWWwy `*` <,ywWW%VWWW* + yWWWWWWWWWW* ., "**WW%W + ,&WWWWWM*"` ,y/ &WWWww ^* + XWWX*^ ,yWWWW09 .WWWWWWWWwy, + *` &WWWWWM WWWWWWWWWWWWWww, + (WWWWW` /#####WWW*********** + ^WWWW + VWW + Wh. + V/ +EOF + ;; + + "Regata"*) + set_colors 7 1 4 5 3 2 + read -rd '' ascii_data <<'EOF' +${c1} ddhso+++++osydd + dho/.`hh${c2}.:/+/:.${c1}hhh`:+yd + do-hhhhhh${c2}/sssssss+`${c1}hhhhh./yd + h/`hhhhhhh${c2}-sssssssss:${c1}hhhhhhhh-yd + do`hhhhhhhhh${c2}`ossssssso.${c1}hhhhhhhhhh/d + d/hhhhhhhhhhhh${c2}`/ossso/.${c1}hhhhhhhhhhhh.h + /hhhhhhhhhhhh${c3}`-/osyso/-`${c1}hhhhhhhhhhhh.h +shh${c4}-/ooo+-${c1}hhh${c3}:syyso+osyys/`${c1}hhh${c5}`+oo`${c1}hhh/ +h${c4}`ohhhhhhho`${c3}+yyo.${c1}hhhhh${c3}.+yyo`${c5}.sssssss.${c1}h`h +s${c4}:hhhhhhhhho${c3}yys`${c1}hhhhhhh${c3}.oyy/${c5}ossssssso-${c1}hs +s${c4}.yhhhhhhhy/${c3}yys`${c1}hhhhhhh${c3}.oyy/${c5}ossssssso-${c1}hs +hh${c4}./syyys+.${c1} ${c3}+yy+.${c1}hhhhh${c3}.+yyo`${c5}.ossssso/${c1}h`h +shhh${c4}``.`${c1}hhh${c3}`/syyso++oyys/`${c1}hhh${c5}`+++-`${c1}hh:h +d/hhhhhhhhhhhh${c3}`-/osyso+-`${c1}hhhhhhhhhhhh.h + d/hhhhhhhhhhhh${c6}`/ossso/.${c1}hhhhhhhhhhhh.h + do`hhhhhhhhh${c6}`ossssssso.${c1}hhhhhhhhhh:h + h/`hhhhhhh${c6}-sssssssss:${c1}hhhhhhhh-yd + h+.hhhhhh${c6}+sssssss+${c1}hhhhhh`/yd + dho:.hhh${c6}.:+++/.${c1}hhh`-+yd + ddhso+++++osyhd +EOF + ;; + + "Regolith"*) + set_colors 1 + read -rd '' ascii_data <<'EOF' +${c1} + ``....``` + `.:/++++++/::-.` + -/+++++++:.` + -++++++++:` + `/++++++++- + `/++++++++. -/+/ + /++++++++/ `` .:+++:. + -+++++++++/ ./++++:+++/-` + :+++++++++/ `+++++++/-` + :++++++++++` .-/+++++++` + `:++++++++++/``.-/++++:-:::-` ` + `:+++++++++++++++++/:.` ./` +:++/-:+++++++++/:-.. -/+. ++++++++++/::-...:/+++/-..````..-/+++. +`......``.::/+++++++++++++++++++++/. + -/+++++++++++++++++++++/. + .:/+++++++++++++++/-` + `.-:://////:-. +EOF + ;; + + "rocky_small"*) + set_colors 2 + read -rd '' ascii_data <<'EOF' +${c1} `-/+++++++++/-.` + `-+++++++++++++++++-` +.+++++++++++++++++++++. +-+++++++++++++++++++++++. ++++++++++++++++/-/+++++++ ++++++++++++++/. ./+++++ ++++++++++++:. ./+++ ++++++++++:` `:/:` .:/ +-++++++:` .:+++++:` + .+++-` ./+++++++++:` + `-` ./+++++++++++- + -+++++++++:-.` +EOF + ;; + + "rocky"*) + set_colors 35 + read -rd '' ascii_data <<'EOF' +${c1} __wgliliiligw_, + _williiiiiiliilililw, + _%iiiiiilililiiiiiiiiiii_ + .Qliiiililiiiiiiililililiilm. + _iiiiiliiiiiililiiiiiiiiiiliil, + .lililiiilililiiiilililililiiiii, +_liiiiiiliiiiiiiliiiiiF{iiiiiilili, +jliililiiilililiiili@` ~ililiiiiiL +iiiliiiiliiiiiiili>` ~liililii +liliiiliiilililii` -9liiiil +iiiiiliiliiiiii~ "4lili +4ililiiiiilil~| -w, )4lf +-liiiiililiF' _liig, )' + )iiiliii@` _QIililig, + )iiii>` .Qliliiiililw + )<>~ .mliiiiiliiiiiil, + _gllilililiililii~ + giliiiiiiiiiiiiT` + -^~$ililili@~~' +EOF + ;; + + "Rosa"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ROSAROSAROSAROSAR + ROSA AROS + ROS SAROSAROSAROSAR AROS + RO ROSAROSAROSAROSAROSAR RO + ARO AROSAROSAROSARO AROS ROS + ARO ROSAROS OSAR ROSA ROS + RO AROSA ROSAROSAROSA ROSAR RO +RO ROSAR ROSAROSAROSAR R ROSARO RO +RO ROSA AROSAROSAROSA AR ROSARO AR +RO AROS ROSAROSAROSA ROS AROSARO AR +RO AROS ROSAROSARO ROSARO ROSARO AR +RO ROS AROSAROS ROSAROSA AROSAR AR +RO ROSA ROS ROSAROSAR ROSARO RO + RO ROS AROSAROSAROSA ROSARO AR + ARO ROSA ROSAROSAROS AROSAR ARO + ARO OROSA R ROSAROS ROS + RO AROSAROS AROSAROSAR RO + AROS AROSAROSAROSARO AROS + ROSA SARO + ROSAROSAROSAROSAR +EOF + ;; + + "sabotage"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} .|'''.| | '||''|. ..|''|| + ||.. ' ||| || || .|' || + ''|||. | || ||'''|. || || +. '|| .''''|. || || '|. || +|'....|' .|. .||. .||...|' ''|...|' + +|''||''| | ..|'''.| '||''''| + || ||| .|' ' || . + || | || || .... ||''| + || .''''|. '|. || || + .||. .|. .||. ''|...'| .||.....| +EOF + ;; + + "Sabayon"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ........... + .. .. + .. .. + .. ${c2}o ${c1}.. + .. ${c2}:W' ${c1}.. + .. ${c2}.d. ${c1}.. +:. ${c2}.KNO ${c1}.: +:. ${c2}cNNN. ${c1}.: +: ${c2}dXXX, ${c1}: +: ${c2}. dXXX, .cd, ${c1}: +: ${c2}'kc .. dKKK. ,ll;:' ${c1}: +: ${c2}.xkkxc;..dkkkc',cxkkl ${c1}: +:. ${c2}.,cdddddddddddddo:. ${c1}.: + .. ${c2}:lllllll: ${c1}.. + .. ${c2}',,,,, ${c1}.. + .. .. + .. .. + ............... +EOF + ;; + + "Sailfish"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} _a@b + _#b (b + _@@ @_ _, + _#^@ _#*^^*gg,aa@^^ + #- @@^ _a@^^ + @_ *g#b + ^@_ ^@_ + ^@_ @ + @(b (b + #b(b#^ + _@_#@^ + _a@a*^ + ,a@*^ +EOF + ;; + + "SalentOS"*) + set_colors 2 1 3 7 + read -rd '' ascii_data <<'EOF' +${c1} ``..`` + .-:+oshdNMMMMMMNdhyo+:-.` + -oydmMMMMMMMMMMMMMMMMMMMMMMMMMMNdhs/ +${c4} +hdddm${c1}NMMMMMMMMMMMMMMMMMMMMMMMMN${c4}mdddh+` +${c2}`MMMMMN${c4}mdddddm${c1}MMMMMMMMMMMM${c4}mdddddm${c3}NMMMMM- +${c2} mMMMMMMMMMMMN${c4}ddddhyyhhddd${c3}NMMMMMMMMMMMM` +${c2} dMMMMMMMMMMMMMMMMM${c4}oo${c3}MMMMMMMMMMMMMMMMMN` +${c2} yMMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMMd +${c2} +MMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMMy +${c2} :MMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMMo +${c2} .MMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMM/ +${c2} `NMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMM- +${c2} mMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMN` +${c2} hMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMm +${c2} /MMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMy +${c2} .+hMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMms: +${c2} `:smMMMMMMMMM${c4}hh${c3}MMMMMMMMMNh+. +${c2} .+hMMMMMM${c4}hh${c3}MMMMMMdo: +${c2} `:smMM${c4}yy${c3}MMNy/` + ${c2}.- ${c4}`${c3}:. +EOF + ;; + + "Scientific"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} =/;;/- + +: // + /; /; + -X H. +.//;;;:;;-, X= :+ .-;:=;:;#;. +M- ,=;;;#:, ,:#;;:=, ,@ +:# :#.=/++++/=.$= #= + ,#; #/:+/;,,/++:+/ ;+. + ,+/. ,;@+, ,#H;, ,/+, + ;+;;/= @. ${c3}.H${c2}#${c3}#X ${c1}-X :///+; + ;+=;;;.@, ${c2}.X${c3}M${c2}@$. ${c1}=X.//;=#/. + ,;: :@#= =$H: .+#- + ,#= #;-///==///-// =#, +;+ :#-;;;:;;;;-X- +: +@- .-;;;;M- =M/;;;-. -X + :;;::;;-. #- :+ ,-;;-;:== + ,X H. + ;/ #= + // +; + '////' +EOF + ;; + + "Septor"*) + set_colors 4 7 4 + read -rd '' ascii_data <<'EOF' +${c1}ssssssssssssssssssssssssssssssssssssssss +ssssssssssssssssssssssssssssssssssssssss +ssssssssssssssssssssssssssssssssssssssss +ssssssssssssssssssssssssssssssssssssssss +ssssssssss${c2};okOOOOOOOOOOOOOOko;${c1}ssssssssss +sssssssss${c2}oNWWWWWWWWWWWWWWWWWWNo${c1}sssssssss +ssssssss${c2}:WWWWWWWWWWWWWWWWWWWWWW:${c1}ssssssss +ssssssss${c2}lWWWWWk${c1}ssssssssss${c2}lddddd:${c1}ssssssss +ssssssss${c2}cWWWWWNKKKKKKKKKKKKOx:${c1}ssssssssss +${c3}yy${c1}sssssss${c2}OWWWWWWWWWWWWWWWWWWWWx${c1}sssssss${c3}yy +yyyyyyyyyy${c2}:kKNNNNNNNNNNNNWWWWWW:${c3}yyyyyyyy +yyyyyyyy${c2}sccccc;${c3}yyyyyyyyyy${c2}kWWWWW:${c3}yyyyyyyy +yyyyyyyy${c2}:WWWWWWNNNNNNNNNNWWWWWW;${c3}yyyyyyyy +yyyyyyyy${c2}.dWWWWWWWWWWWWWWWWWWWNd${c3}yyyyyyyyy +yyyyyyyyyy${c2}sdO0KKKKKKKKKKKK0Od;${c3}yyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +EOF + ;; + + "Serene"*) + set_colors 6 6 + read -rd '' ascii_data <<'EOF' +${c1} __---''''''---__ + . . + : : + - _______----_- + s __----''' __---- + __h_ _-' _-' h + '-._''--.._ ; _-' y + : ''-._ '-._/ _-' : + y ':_ _--'' y + m .--'' '-._.;' m + m : : m + y '.._ '-__ y + : '--._ '''----___ : + y '--._ ''-- _ y + h '--._ : h + s __'; vs + - __..--'' - + :_..--'' : + . _ . + `''---______---''-`` +EOF + ;; + + "SharkLinux"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c1} `:shd/ + `:yNMMMMs + `-smMMMMMMN. + .+dNMMMMMMMMs + .smNNMMMMMMMMm` + .sNNNNNNNMMMMMM/ + `omNNNNNNNMMMMMMm + /dNNNNNNNNMMMMMMM+ + .yNNNNNNNNNMMMMMMMN` + +mNNNNNNNNNMMMMMMMMh + .hNNNNNNNNNNMMMMMMMMMs + +mMNNNNNNNNMMMMMMMMMMMs + .hNMMNNNNMMMMMMMMMMMMMMMd + .oNNNNNNNNNNMMMMMMMMMMMMMMMo + `:+syyssoo++++ooooossssssssssso: +EOF + ;; + + "Siduction"*) + set_colors 4 4 + read -rd '' ascii_data <<'EOF' +${c1} _aass, + jQh: =$w + QWmwawQW + )$QQQQ@( .. + _a_a. ~??^ syDY?Sa, + _mW>-<$c jWmi imm. + ]QQwayQE 4QQmgwmQQ` + ?WWQWP' -9QQQQQ@'._aas, + _a%is. .adYYs,. -"?!` aQB*~^3$c +_Qh;.nm .QWc. {QL ]QQp;..vmQ/ +"QQmmQ@ -QQQggmQP ]QQWmggmQQ( + -???" "$WQQQY` __, ?QQQQQQW! + _yZ!?q, - .yWY!!Sw, "???^ + .QQa_=qQ mQm>..vmm + $QQWQQP $QQQgmQQ@ + "???" _aa, -9WWQQWY` + _mB>~)$a -~~ + mQms_vmQ. + ]WQQQQQP + -?T??" +EOF + ;; + + "slackware_small"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ________ + / ______| + | |______ + \\______ \\ + ______| | +| |________/ +|____________ +EOF + ;; + + "Slackware"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ::::::: + ::::::::::::::::::: + ::::::::::::::::::::::::: + ::::::::${c2}cllcccccllllllll${c1}:::::: + :::::::::${c2}lc dc${c1}::::::: + ::::::::${c2}cl clllccllll oc${c1}::::::::: + :::::::::${c2}o lc${c1}::::::::${c2}co oc${c1}:::::::::: + ::::::::::${c2}o cccclc${c1}:::::${c2}clcc${c1}:::::::::::: + :::::::::::${c2}lc cclccclc${c1}::::::::::::: +::::::::::::::${c2}lcclcc lc${c1}:::::::::::: +::::::::::${c2}cclcc${c1}:::::${c2}lccclc oc${c1}::::::::::: +::::::::::${c2}o l${c1}::::::::::${c2}l lc${c1}::::::::::: + :::::${c2}cll${c1}:${c2}o clcllcccll o${c1}::::::::::: + :::::${c2}occ${c1}:${c2}o clc${c1}::::::::::: + ::::${c2}ocl${c1}:${c2}ccslclccclclccclclc${c1}::::::::::::: + :::${c2}oclcccccccccccccllllllllllllll${c1}::::: + ::${c2}lcc1lcccccccccccccccccccccccco${c1}:::: + :::::::::::::::::::::::::::::::: + :::::::::::::::::::::::::::: + :::::::::::::::::::::: + :::::::::::: +EOF + ;; + + "SliTaz"*) + set_colors 3 3 + read -rd '' ascii_data <<'EOF' +${c1} @ @( @ + @@ @@ @ @/ + @@ @@ @@ @@ + @@ %@@ @@ @@ + @@ %@@@ @@@@@. @@@@ @@ + @@@ @@@@ @@@@@@@ &@@@ @@@ + @@@@@@@ %@@@@@@@@@@@@ &@@@% @@@@@@@/ + ,@@@@@@@@@@@@@@@@@@@@@@@@@ + .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/ +@@@@@@. @@@@@@@@@@@@@@@@@@@@@ /@@@@@@ +@@ @@@@@ @@@@@@@@@@@@, @@@@@ @@@ +@@ @@@@. @@@@@@@@@@@@@% #@@@@ @@. +@@ ,@@ @@@@@@@@@@@@@ @@@ @@ +@ @@. @@@@@@@@@@@@@ @@@ *@ +@ @@ @@@@@@@@@@@@ @@ @ + @ @@@@@@@@@. #@ + @ ,@@@@@ @ +EOF + ;; + + "SmartOS"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1}yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyys oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyy oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyy oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyy oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyy oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyy syyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyy syyyy +yyyyyyyyyyyyyyyy syyyyyyyyy syyyy +yyyyyyyyyyyyyyyy oyyyyyyyyy syyyy +yyyyyyyyyyyyyyyy oyyyyyyyyy syyyy +yyyyyyyyyyyyyyyy syyyyyyyyy syyyy +yyyyyyyyyyyyyyyy yyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +EOF + ;; + + "SkiffOS"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c2} + ,@@@@@@@@@@@w,_ + ${c2}====~~~,,.${c2}A@@@@@@@@@@@@@@@@@W,_ + ${c1}`||||||||||||||L{${c2}"@$@@@@@@@@B" + ${c1}`|||||||||||||||||||||L{${c2}"$D + ${c2}@@@@@@@@@@@@@@@@@@@@@${c1}_||||}==, + ${c2}*@@@@@@@@@@@@@@@@@@@@@@@@@p${c1}||||==, + ${c1}`'||LLL{{""${c2}@$B@@@@@@@@@@@@@@@p${c1}|| + ${c1}`~=|||||||||||L"${c2}$@@@@@@@@@@@ + ${c1}````'"""""""${c2}'"""""""" +EOF + ;; + + "Solus"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} -``````````` + `-+/------------.` + .---:mNo---------------. + .-----yMMMy:---------------. + `------oMMMMMm/----------------` + .------/MMMMMMMN+----------------. + .------/NMMMMMMMMm-+/--------------. +`------/NMMMMMMMMMN-:mh/-------------` +.-----/NMMMMMMMMMMM:-+MMd//oso/:-----. +-----/NMMMMMMMMMMMM+--mMMMh::smMmyo:-- +----+NMMMMMMMMMMMMMo--yMMMMNo-:yMMMMd/. +.--oMMMMMMMMMMMMMMMy--yMMMMMMh:-yMMMy-` +`-sMMMMMMMMMMMMMMMMh--dMMMMMMMd:/Ny+y. +`-/+osyhhdmmNNMMMMMm-/MMMMMMMmh+/ohm+ + .------------:://+-/++++++${c1}oshddys: + -hhhhyyyyyyyyyyyhhhhddddhysssso- + `:ossssssyysssssssssssssssso:` + `:+ssssssssssssssssssss+- + `-/+ssssssssssso+/-` + `.-----..` +EOF + ;; + + "Source Mage"* | "Source_Mage"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} :ymNMNho. +.+sdmNMMMMMMMMMMy` +.-::/yMMMMMMMMMMMm- + sMMMMMMMMMMMm/ + /NMMMMMMMMMMMMMm: + .MMMMMMMMMMMMMMMMM: + `MMMMMMMMMMMMMMMMMN. + NMMMMMMMMMMMMMMMMMd + mMMMMMMMMMMMMMMMMMMo + hhMMMMMMMMMMMMMMMMMM. + .`/MMMMMMMMMMMMMMMMMs + :mMMMMMMMMMMMMMMMN` + `sMMMMMMMMMMMMMMM+ + /NMMMMMMMMMMMMMN` + oMMMMMMMMMMMMM+ + ./sd.-hMMMMMMMMmmN` + ./+oyyyh- `MMMMMMMMMmNh + sMMMMMMMMMmmo + `NMMMMMMMMMd: + -dMMMMMMMMMo + -shmNMMms. +EOF + ;; + + "Sparky"*) + set_colors 1 7 + read -rd '' ascii_data <<'EOF' +${c1} + . `-:-` + .o` .-///-` + `oo` .:/++:. + os+` -/+++:` ``.........``` + /ys+`./+++/-.-::::::----......`` + `syyo`++o+--::::-::/+++/-`` + -yyy+.+o+`:/:-:sdmmmmmmmmdy+-` +::-` :yyy/-oo.-+/`ymho++++++oyhdmdy/` +`/yy+-`.syyo`+o..o--h..osyhhddhs+//osyy/` + -ydhs+-oyy/.+o.-: ` ` :/::+ydhy+```-os- + .sdddy::syo--/:. `.:dy+-ohhho ./: + :yddds/:+oo+//:-`- /+ +hy+.shhy: `` + `:ydmmdysooooooo-.ss`/yss--oyyo + `./ossyyyyo+:-/oo:.osso- .oys + ``..-------::////.-oooo/ :so + `...----::::::::--.`/oooo: .o: + ``````` ++o+:` `:` + ./+/-` ` + `-:-. + `` +EOF + ;; + + "Star"*) + set_colors 7 + read -rd '' ascii_data <<'EOF' +${c1} ./ + `yy- + `y.`y` + `` s- .y ` + +h//:..` +/ /o ``..:/so + /o``.-::/:/+ o/://::-.`+o` + :s` `. .` `s/ + .y. .s- + `y- :s` + .-//. /+:. + .:/:. .:/:. +-+o:. .:+:. +-///++///:::` .-::::///+so- + ``..o/ d-....``` + s. `/. d + h .+o-+o- h. + h -o/` `/o: s: + -s/o:` `:o/+/ + /s- -yo +EOF + ;; + + "SteamOS"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} .,,,,. + .,'onNMMMMMNNnn',. + .'oNMANKMMMMMMMMMMMNNn'. + .'ANMMMMMMMXKNNWWWPFFWNNMNn. + ;NNMMMMMMMMMMNWW'' ,.., 'WMMM, + ;NMMMMV+##+VNWWW' .+;'':+, 'WMW, +,VNNWP+${c2}######${c1}+WW, ${c2}+: ${c1}:+, +MMM, +'${c2}+#############, +. ,+' ${c1}+NMMM +${c2} '*#########*' '*,,*' ${c1}.+NMMMM. +${c2} `'*###*' ,.,;###${c1}+WNM, +${c2} .,;;, .;##########${c1}+W +${c2},',. '; ,+##############' + '###+. :,. .,; ,###############' + '####.. `'' .,###############' + '#####+++################' + '*##################*' + ''*##########*'' + '''''' +EOF + ;; + + "sunos_small" | "solaris_small") + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} . .; . + . :; :: ;: . + .;. .. .. .;. +.. .. .. .. + .;, ,;. +EOF + ;; + + "SunOS" | "Solaris") + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} `- ` + `-- `+- .: + .+: `++: -/+- . + `.::` -++/``:::`./+/ `.-/. + `++/-`.` ` /++:` + `` ./:` .: `..`.- +``./+/:- -+++:- + -/+` :. +EOF + ;; + + "openSUSE Leap"* | "openSUSE_Leap"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c2} `-++:` + ./oooooo/- + `:oooooooooooo:. + -+oooooooooooooooo+-` + ./oooooooooooooooooooooo/- + :oooooooooooooooooooooooooo: + ` `-+oooooooooooooooooooo/- ` + `:oo/- .:ooooooooooooooo+:` `-+oo/. +`/oooooo:. -/oooooooooo/. ./oooooo/. + `:+ooooo+-` `:+oooo+- `:oooooo+:` + .:oooooo/. .::` -+oooooo/. + -/oooooo:. ./oooooo+- + `:+ooooo+-:+oooooo:` + ./oooooooooo/. + -/oooo+:` + `:/. +EOF + ;; + + "t2"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' +${c2} +TTTTTTTTTT + tt ${c1}222${c2} + tt ${c1}2 2${c2} + tt ${c1}2${c2} + tt ${c1}2${c2} + tt ${c1}22222${c2} +EOF + ;; + + "openSUSE Tumbleweed"* | "openSUSE_Tumbleweed"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c2} ...... + .,cdxxxoc,. .:kKMMMNWMMMNk:. + cKMMN0OOOKWMMXo. ; ;0MWk:. .:OMMk. + ;WMK;. .lKMMNM, :NMK, .OMW; + cMW; 'WMMMN ,XMK, oMM' +.MMc ..;l. xMN: KM0 +'MM. 'NMO oMM +.MM, .kMMl xMN + KM0 .kMM0. .dl:,.. .WMd + .XM0. ,OMMK, OMMMK. .XMK + oWMO:. .;xNMMk, NNNMKl. .xWMx + :ONMMNXMMMKx; . ,xNMWKkxllox0NMWk, + ..... .:dOOXXKOxl, +EOF + ;; + + "opensuse_small" | "suse_small"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} _______ +__| __ \\ + / .\\ \\ + \\__/ | + _______| + \\_______ +__________/ +EOF + ;; + + "openSUSE"* | "open SUSE"* | "SUSE"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c2} .;ldkO0000Okdl;. + .;d00xl:^''''''^:ok00d;. + .d00l' 'o00d. + .d0Kd'${c1} Okxol:;,. ${c2}:O0d. + .OK${c1}KKK0kOKKKKKKKKKKOxo:, ${c2}lKO. + ,0K${c1}KKKKKKKKKKKKKKK0P^${c2},,,${c1}^dx:${c2} ;00, +.OK${c1}KKKKKKKKKKKKKKKk'${c2}.oOPPb.${c1}'0k.${c2} cKO. +:KK${c1}KKKKKKKKKKKKKKK: ${c2}kKx..dd ${c1}lKd${c2} 'OK: +dKK${c1}KKKKKKKKKOx0KKKd ${c2}^0KKKO' ${c1}kKKc${c2} dKd +dKK${c1}KKKKKKKKKK;.;oOKx,..${c2}^${c1}..;kKKK0.${c2} dKd +:KK${c1}KKKKKKKKKK0o;...^cdxxOK0O/^^' ${c2}.0K: + kKK${c1}KKKKKKKKKKKKK0x;,,......,;od ${c2}lKk + '0K${c1}KKKKKKKKKKKKKKKKKKKK00KKOo^ ${c2}c00' + 'kK${c1}KKOxddxkOO00000Okxoc;'' ${c2}.dKk' + l0Ko. .c00l' + 'l0Kk:. .;xK0l' + 'lkK0xl:;,,,,;:ldO0kl' + '^:ldxkkkkxdl:^' +EOF + ;; + + "SwagArch"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} .;ldkOKXXNNNNXXK0Oxoc,. + ,lkXMMNK0OkkxkkOKWMMMMMMMMMM; + 'K0xo ..,;:c:. `'lKMMMMM0 + .lONMMMMMM' `lNMk' +${c2} ;WMMMMMMMMMO. ${c1}....::... +${c2} OMMMMMMMMMMMMKl. ${c1}.,;;;;;ccccccc, +${c2} `0MMMMMMMMMMMMMM0: ${c1}.. .ccccccc. +${c2} 'kWMMMMMMMMMMMMMNo. ${c1}.,:' .ccccccc. +${c2} `c0MMMMMMMMMMMMMN,${c1},:c; :cccccc: +${c2} ckl. `lXMMMMMMMMMX${c1}occcc:.. ;ccccccc. +${c2}dMMMMXd, `OMMMMMMWk${c1}ccc;:''` ,ccccccc: +${c2}XMMMMMMMWKkxxOWMMMMMNo${c1}ccc; .cccccccc. +${c2} `':ldxO0KXXXXXK0Okdo${c1}cccc. :cccccccc. + :ccc:' `cccccccc:, + '' +EOF + ;; + + "Tails"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} `` + ./yhNh +syy/Nshh `:o/ +N:dsNshh █ `ohNMMd +N-/+Nshh `yMMMMd +N-yhMshh yMMMMd +N-s:hshh █ yMMMMd so//. +N-oyNsyh yMMMMd d Mms. +N:hohhhd:. yMMMMd syMMM+ +Nsyh+-..+y+- yMMMMd :mMM+ ++hy- -ss/`yMMMM `+d+ + :sy/. ./yNMMMMm `` + .+ys- `:+hNMMMMMMy/` + `hNmmMMMMMMMMMMMMdo. + dMMMMMMMMMMMMMMMMMNh: + +hMMMMMMMMMMMMMMMMMmy. + -oNMMMMMMMMMMmy+.` + `:yNMMMds/.` + .//` +EOF + ;; + + "Trisquel"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' +${c1} ▄▄▄▄▄▄ + ▄█████████▄ + ▄▄▄▄▄▄ ████▀ ▀████ + ▄██████████▄ ████▀ ▄▄ ▀███ + ▄███▀▀ ▀▀████ ███▄ ▄█ ███ +▄███ ▄▄▄ ████▄ ▀██████ ▄███ +███ █▀▀██▄ █████▄ ▀▀ ▄████ +▀███ ███ ███████▄▄ ▄▄██████ +${c1} ▀███▄ ▄███ █████████████${c2}████▀ +${c1} ▀█████████ ███████${c2}███▀▀▀ + ▀▀███▀▀ ██████▀▀ + ██████▀ ▄▄▄▄ + █████▀ ████████ + █████ ███▀ ▀███ + ████▄ ██▄▄▄ ███ + █████▄ ▀▀ ▄██ + ██████▄▄▄████ + ▀▀█████▀▀ +EOF + ;; + + "Ubuntu Cinnamon"* | "Ubuntu-Cinnamon"*) + set_colors 1 7 + read -rd '' ascii_data <<'EOF' +${c1} .-/+oooooooo+/-. + `:+oooooooooooooooooo+:` + -+oooooooooooooooooooooooo+- + .ooooooooooooooooooo${c2}:ohNd${c1}oooooo. + /oooooooooooo${c2}:/+oo++:/ohNd${c1}ooooooo/ + +oooooooooo${c2}:osNdhyyhdNNh+:+${c1}oooooooo+ + /ooooooooo${c2}/dN/${c1}ooooooooo${c2}/sNNo${c1}ooooooooo/ +.ooooooooo${c2}oMd:${c1}oooooooooooo${c2}:yMy${c1}ooooooooo. ++ooooo${c2}:+o/Md${c1}oooooo${c2}:sm/${c1}oo/ooo${c2}yMo${c1}oooooooo+ +ooo${c2}:sdMdosMo${c1}ooooo${c2}oNMd${c1}//${c2}dMd+${c1}o${c2}:so${c1}ooooooooo +oooo${c2}+ymdosMo${c1}ooo${c2}+mMm${c1}+/${c2}hMMMMMh+hs${c1}ooooooooo ++oooooo${c2}:${c1}:${c2}/Nm:${c1}/${c2}hMNo${c1}:y${c2}MMMMMMMMMM+${c1}oooooooo+ +.ooooooooo${c2}/NNMNy${c1}:o${c2}NMMMMMMMMMMo${c1}ooooooooo. +/oooooooooo${c2}:yh:${c1}+m${c2}MMMMMMMMMMd/${c1}ooooooooo/ + +oooooooooo${c2}+${c1}/h${c2}mMMMMMMNds//o${c1}oooooooo+ + /oooooooooooo${c2}+:////:o/ymMd${c1}ooooooo/ + .oooooooooooooooooooo${c2}/sdh${c1}oooooo. + -+oooooooooooooooooooooooo+- + `:+oooooooooooooooooo+:` + .-/+oooooooo+/-. +EOF + ;; + + "Ubuntu Budgie"* | "Ubuntu-Budgie"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} ./oydmMMMMMMmdyo/. + :smMMMMMMMMMMMhs+:++yhs: + `omMMMMMMMMMMMN+` `odo` + /NMMMMMMMMMMMMN- `sN/ + `hMMMMmhhmMMMMMMh sMh` + .mMmo- /yMMMMm` `MMm. + mN/ yMMMMMMMd- MMMm +oN- oMMMMMMMMMms+//+o+: :MMMMo +m/ +NMMMMMMMMMMMMMMMMm. :NMMMMm +M` .NMMMMMMMMMMMMMMMNodMMMMMMM +M- sMMMMMMMMMMMMMMMMMMMMMMMMM +mm` mMMMMMMMMMNdhhdNMMMMMMMMMm +oMm/ .dMMMMMMMMh: :dMMMMMMMo + mMMNyo/:/sdMMMMMMMMM+ sMMMMMm + .mMMMMMMMMMMMMMMMMMs `NMMMm. + `hMMMMMMMMMMM.oo+. `MMMh` + /NMMMMMMMMMo sMN/ + `omMMMMMMMMy. :dmo` + :smMMMMMMMh+-` `.:ohs: + ./oydmMMMMMMdhyo/. +EOF + ;; + + "Ubuntu-GNOME"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c3} ./o. + .oooooooo + .oooo```soooo + .oooo` `soooo + .ooo` ${c4}.o.${c3} `\/ooo. + :ooo ${c4}:oooo.${c3} `\/ooo. + sooo ${c4}`ooooo${c3} \/oooo + \/ooo ${c4}`soooo${c3} `ooooo + `soooo ${c4}`\/ooo${c3} `soooo +${c4}./oo ${c3}`\/ooo ${c4}`/oooo.${c3} `/ooo +${c4}`\/ooo. ${c3}`/oooo. ${c4}`/oooo.${c3} `` +${c4} `\/ooo. ${c3}/oooo ${c4}/ooo` +${c4} `ooooo ${c3}`` ${c4}.oooo +${c4} `soooo. .oooo` + `\/oooooooooo` + ``\/oo`` +EOF + ;; + + "Ubuntu MATE"* | "Ubuntu-MATE"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} .:/+oossssoo+/:.` + `:+ssssssssssssssssss+:` + -+sssssssssssssss${c2}y${c1}ssssssss+- + .osssssssssssss${c2}yy${c1}ss${c2}mMmh${c1}ssssssso. + /sssssssss${c2}ydmNNNmmd${c1}s${c2}mMMMMNdy${c1}sssss/ + `+ssssssss${c2}hNNdy${c1}sssssss${c2}mMMMMNdy${c1}ssssss+` + +sssssss${c2}yNNh${c1}ss${c2}hmNNNNm${c1}s${c2}mMmh${c1}s${c2}ydy${c1}sssssss+ +-sssss${c2}y${c1}ss${c2}Nm${c1}ss${c2}hNNh${c1}ssssss${c2}y${c1}s${c2}hh${c1}ss${c2}mMy${c1}sssssss- ++ssss${c2}yMNdy${c1}ss${c2}hMd${c1}ssssssssss${c2}hMd${c1}ss${c2}NN${c1}sssssss+ +sssss${c2}yMMMMMmh${c1}sssssssssssss${c2}NM${c1}ss${c2}dMy${c1}sssssss +sssss${c2}yMMMMMmhy${c1}ssssssssssss${c2}NM${c1}ss${c2}dMy${c1}sssssss ++ssss${c2}yMNdy${c1}ss${c2}hMd${c1}ssssssssss${c2}hMd${c1}ss${c2}NN${c1}sssssss+ +-sssss${c2}y${c1}ss${c2}Nm${c1}ss${c2}hNNh${c1}ssssssss${c2}dh${c1}ss${c2}mMy${c1}sssssss- + +sssssss${c2}yNNh${c1}ss${c2}hmNNNNm${c1}s${c2}mNmh${c1}s${c2}ymy${c1}sssssss+ + +ssssssss${c2}hNNdy${c1}sssssss${c2}mMMMMmhy${c1}ssssss+ + /sssssssss${c2}ydmNNNNmd${c1}s${c2}mMMMMNdh${c1}sssss/ + .osssssssssssss${c2}yy${c1}ss${c2}mMmdy${c1}sssssso. + -+sssssssssssssss${c2}y${c1}ssssssss+- + `:+ssssssssssssssssss+:` + .:/+oossssoo+/:. + +EOF + ;; + + "ubuntu_old") + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} ./+o+- +${c2} yyyyy- ${c1}-yyyyyy+ +${c2} ${c2}://+//////${c1}-yyyyyyo +${c3} .++ ${c2}.:/++++++/-${c1}.+sss/` +${c3} .:++o: ${c2}/++++++++/:--:/- +${c3} o:+o+:++.${c2}`..```.-/oo+++++/ +${c3} .:+o:+o/.${c2} `+sssoo+/ +${c2} .++/+:${c3}+oo+o:`${c2} /sssooo. +${c2}/+++//+:${c3}`oo+o${c2} /::--:. +${c2}+/+o+++${c3}`o++o${c1} ++////. +${c2} .++.o+${c3}++oo+:`${c1} /dddhhh. +${c3} .+.o+oo:.${c1} `oddhhhh+ +${c3} +.++o+o`${c1}`-````.:ohdhhhhh+ +${c3} `:o+++ ${c1}`ohhhhhhhhyo++os: +${c3} .o:${c1}`.syhhhhhhh/${c3}.oo++o` +${c1} /osyyyyyyo${c3}++ooo+++/ +${c1} ````` ${c3}+oo+++o: +${c3} `oo++. +EOF + ;; + + "Ubuntu Studio"* | "Ubuntu-Studio") + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} ..-::::::-.` + `.:+++++++++++${c2}ooo${c1}++:.` + ./+++++++++++++${c2}sMMMNdyo${c1}+/. + .++++++++++++++++${c2}oyhmMMMMms${c1}++. + `/+++++++++${c2}osyhddddhys${c1}+${c2}osdMMMh${c1}++/` + `+++++++++${c2}ydMMMMNNNMMMMNds${c1}+${c2}oyyo${c1}++++` + +++++++++${c2}dMMNhso${c1}++++${c2}oydNMMmo${c1}++++++++` + :+${c2}odmy${c1}+++${c2}ooysoohmNMMNmyoohMMNs${c1}+++++++: + ++${c2}dMMm${c1}+${c2}oNMd${c1}++${c2}yMMMmhhmMMNs+yMMNo${c1}+++++++ +`++${c2}NMMy${c1}+${c2}hMMd${c1}+${c2}oMMMs${c1}++++${c2}sMMN${c1}++${c2}NMMs${c1}+++++++. +`++${c2}NMMy${c1}+${c2}hMMd${c1}+${c2}oMMMo${c1}++++${c2}sMMN${c1}++${c2}mMMs${c1}+++++++. + ++${c2}dMMd${c1}+${c2}oNMm${c1}++${c2}yMMNdhhdMMMs${c1}+y${c2}MMNo${c1}+++++++ + :+${c2}odmy${c1}++${c2}oo${c1}+${c2}ss${c1}+${c2}ohNMMMMmho${c1}+${c2}yMMMs${c1}+++++++: + +++++++++${c2}hMMmhs+ooo+oshNMMms${c1}++++++++ + `++++++++${c2}oymMMMMNmmNMMMMmy+oys${c1}+++++` + `/+++++++++${c2}oyhdmmmmdhso+sdMMMs${c1}++/ + ./+++++++++++++++${c2}oyhdNMMMms${c1}++. + ./+++++++++++++${c2}hMMMNdyo${c1}+/. + `.:+++++++++++${c2}sso${c1}++:. + ..-::::::-.. +EOF + ;; + + "ubuntu_small") + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} _ + ---(_) + _/ --- \\ +(_) | | + \\ --- _/ + ---(_) +EOF + ;; + + "Ubuntu"* | "i3buntu"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} .-/+oossssoo+\-. + ´:+ssssssssssssssssss+:` + -+ssssssssssssssssssyyssss+- + .ossssssssssssssssss${c2}dMMMNy${c1}sssso. + /sssssssssss${c2}hdmmNNmmyNMMMMh${c1}ssssss\ + +sssssssss${c2}hm${c1}yd${c2}MMMMMMMNddddy${c1}ssssssss+ + /ssssssss${c2}hNMMM${c1}yh${c2}hyyyyhmNMMMNh${c1}ssssssss\ +.ssssssss${c2}dMMMNh${c1}ssssssssss${c2}hNMMMd${c1}ssssssss. ++ssss${c2}hhhyNMMNy${c1}ssssssssssss${c2}yNMMMy${c1}sssssss+ +oss${c2}yNMMMNyMMh${c1}ssssssssssssss${c2}hmmmh${c1}ssssssso +oss${c2}yNMMMNyMMh${c1}sssssssssssssshmmmh${c1}ssssssso ++ssss${c2}hhhyNMMNy${c1}ssssssssssss${c2}yNMMMy${c1}sssssss+ +.ssssssss${c2}dMMMNh${c1}ssssssssss${c2}hNMMMd${c1}ssssssss. + \ssssssss${c2}hNMMM${c1}yh${c2}hyyyyhdNMMMNh${c1}ssssssss/ + +sssssssss${c2}dm${c1}yd${c2}MMMMMMMMddddy${c1}ssssssss+ + \sssssssssss${c2}hdmNNNNmyNMMMMh${c1}ssssss/ + .ossssssssssssssssss${c2}dMMMNy${c1}sssso. + -+sssssssssssssssss${c2}yyy${c1}ssss+- + `:+ssssssssssssssssss+:` + .-\+oossssoo+/-. +EOF + ;; + + "Univention"*) + set_colors 1 7 + read -rd '' ascii_data <<'EOF' +${c1} ./osssssssssssssssssssssso+- + `ohhhhhhhhhhhhhhhhhhhhhhhhhhhhy: + shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh- + `-//${c2}sssss${c1}/hhhhhhhhhhhhhh+${c2}s${c1}.hhhhhhhhh+ + .ohhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sss${c1}+hhhhhhh+ +.yhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}ssss${c1}:hhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}ssssss${c1}+yhhhhhhhhhhy/${c2}ssssss${c1}yhhhhh+ ++hhhhhh:${c2}sssssss${c1}:hhhhhhh+${c2}.ssssssss${c1}yhhhhy. ++hhhhhhh+`${c2}ssssssssssssssss${c1}hh${c2}sssss${c1}yhhho` ++hhhhhhhhhs+${c2}ssssssssssss${c1}+hh+${c2}sssss${c1}/:-` +-hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhho + :yhhhhhhhhhhhhhhhhhhhhhhhhhhhh+` + -+ossssssssssssssssssssss+:` +EOF + ;; + + "Venom"*) + set_colors 8 4 + read -rd '' ascii_data <<'EOF' +${c1} ::::::: ::::::: + mMMMMMMm dMMMMMMm + /MMMMMMMo +MMMMMMM/ + yMMMMMMN mMMMMMMy + NMMMMMMs oMMMMMMm + +MMMMMMN: NMMMMMM+ + hMMMMMMy sMMMMMMy + :NMMMMMM::NMMMMMN: + oMMMMMMyyMMMMMM+ + dMMMMMMMMMMMMh + /MMMMMMMMMMMN: + sMMMMMMMMMMo + mMMMMMMMMd + +MMMMMMMN: + :::::: +EOF + ;; + + "void_small") + set_colors 2 8 + read -rd '' ascii_data <<'EOF' +${c1} _______ + _ \\______ - +| \\ ___ \\ | +| | / \ | | +| | \___/ | | +| \\______ \\_| + -_______\\ +EOF + ;; + + "Void"*) + set_colors 2 8 + read -rd '' ascii_data <<'EOF' +${c1} __.;=====;.__ + _.=+==++=++=+=+===;. + -=+++=+===+=+=+++++=_ + . -=:`` `--==+=++==. + _vi, ` --+=++++: + .uvnvi. _._ -==+==+. + .vvnvnI` .;==|==;. :|=||=|. +${c2}+QmQQm${c1}pvvnv; ${c2}_yYsyQQWUUQQQm #QmQ#${c1}:${c2}QQQWUV$QQm. +${c2} -QQWQW${c1}pvvo${c2}wZ?.wQQQE${c1}==<${c2}QWWQ/QWQW.QQWW${c1}(: ${c2}jQWQE +${c2} -$QQQQmmU' jQQQ@${c1}+=<${c2}QWQQ)mQQQ.mQQQC${c1}+;${c2}jWQQ@' +${c2} -$WQ8Y${c1}nI: ${c2}QWQQwgQQWV${c1}`${c2}mWQQ.jQWQQgyyWW@! +${c1} -1vvnvv. `~+++` ++|+++ + +vnvnnv, `-|=== + +vnvnvns. . :=- + -Invnvvnsi..___..=sv=. ` + +Invnvnvnnnnnnnnvvnn;. + ~|Invnvnvvnvvvnnv}+` + -~|{*l}*|~ +EOF + + ;; + + "VNux"*) + set_colors 11 8 15 1 7 + read -rd '' ascii_data <<'EOF' +${c1} ` + ^[XOx~. + ^_nwdbbkp0ti' + +${c2} _j>!vC1,, + ${c4},${c2} ,CY${c3}O${c2}t${c3}O${c2}1(l;" +`${c4}~-{r(1I${c2} ^${c1}/zmwJuc:${c2}I^ +'${c4}?)|${c1}U${c4}/}-${c2} ^${c3}f${c1}OCLLOw${c3}_${c2},; + ,${c4}i,``. ${c2}",${c3}k%ooW@$d"${c2}I,' + ' ;^${c3}u$$$$$$$$^<${c2}:^ + ` .>>${c3}($$${c5}$@@@@$$${c3}$nl${c2}[:: + `!}?${c3}B$${c5}%&WMMW&%$${c3}$1}-${c2}}": + ^?j${c3}Z$${c5}WMMWWWWMMW$${c3}ofc${c2};;` + <~x&${c3}$${c5}&MWWWWWWWWp${c3}-${c5}l>[< +${c1} 'ljmwn${c2}~tk8${c5}MWWWWM8O${c2}X${c1}r${c2}+]nC${c1}[ +!JZqwwdX${c2}:^C8${c5}#MMMM@${c2}X${c1}Odpdpq0< + ^x00J(" + ^" +EOF + + ;; + + "LangitKetujuh"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' +${c1} + L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L + 'L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L + L7L. 'L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L + L7L7L7L L7L7L7L + L7L7L7L L7L7L7L + L7L7L7L L7L7L7L7L7L7L7L7L7L7L7L + L7L7L7L 'L7L7L7L7L7L7L7L7L7L + L7L7L7L 'L7L7L7L7L7L7L7L + L7L7L7L L7L7L7L + L7L7L7L L7L7L7L + L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L. 'L7L + L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L. + L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L +${c2} +EOF + ;; + + "semc"*) + set_colors 2 8 1 + read -rd '' ascii_data <<'EOF' +${c1} /\ + ______/ \ + / |()| ${c2}E M C +${c1} | (-- | | + \ \ | | +.----) | |__| +|_______/ / ${c3}"${c1} \ + ${c3}" + " +EOF + + ;; + + "Obarun"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ,;::::; + ;cooolc;, + ,coool; + ,loool, + loooo; + :ooool + cooooc ,:ccc; + looooc :oooooool + cooooo ;oooooooooo, + :ooooo; :ooooooooooo + oooooo oooooooooooc + :oooooo :ooooooooool + loooooo ;oooooooool + looooooc .coooooooc + cooooooo: ,;co; + ,ooooooool; ,:loc + cooooooooooooloooooc + ;ooooooooooooool; + ;looooooolc; +EOF + ;; + + *"[Windows 11]"*|*"on Windows 11"*|\ + "Windows 11"* |"windows11") + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} +################ ################ +################ ################ +################ ################ +################ ################ +################ ################ +################ ################ +################ ################ + +################ ################ +################ ################ +################ ################ +################ ################ +################ ################ +################ ################ +################ ################ +EOF + ;; + + *"[Windows 10]"*|*"on Windows 10"*|"Windows 8"*|\ + "Windows 10"* |"windows10"|"windows8") + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} .., + ....,,:;+ccllll + ...,,+:; cllllllllllllllllll +,cclllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll + +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +`'ccllllllllll lllllllllllllllllll + `' \\*:: :ccllllllllllllllll + ````''*::cll + `` +EOF + ;; + + "Windows"*) + set_colors 1 2 4 3 + read -rd '' ascii_data <<'EOF' +${c1} ,.=:!!t3Z3z., + :tt:::tt333EE3 +${c1} Et:::ztt33EEEL${c2} @Ee., .., +${c1} ;tt:::tt333EE7${c2} ;EEEEEEttttt33# +${c1} :Et:::zt333EEQ.${c2} $EEEEEttttt33QL +${c1} it::::tt333EEF${c2} @EEEEEEttttt33F +${c1} ;3=*^```"*4EEV${c2} :EEEEEEttttt33@. +${c3} ,.=::::!t=., ${c1}`${c2} @EEEEEEtttz33QF +${c3} ;::::::::zt33)${c2} "4EEEtttji3P* +${c3} :t::::::::tt33.${c4}:Z3z..${c2} ``${c4} ,..g. +${c3} i::::::::zt33F${c4} AEEEtttt::::ztF +${c3} ;:::::::::t33V${c4} ;EEEttttt::::t3 +${c3} E::::::::zt33L${c4} @EEEtttt::::z3F +${c3}{3=*^```"*4E3)${c4} ;EEEtttt:::::tZ` +${c3} `${c4} :EEEEtttt::::z7 + "VEzjt:;;z>*` +EOF + ;; + + "Xubuntu"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} `.:/ossyyyysso/:. + `.yyyyyyyyyyyyyyyyyyyy.` + `yyyyyyyyyyyyyyyyyyyyyyyyyy` + `yyyyyyyyyyyyyyyyyyyy${c2}::${c1}yyyyyyyy` + .yyyyyyyyyyy${c2}/+:${c1}yyyyyyy${c2}ds${c1}yyy${c2}+y${c1}yyyy. + yyyyyyy${c2}:o/${c1}yy${c2}dMMM+${c1}yyyyy${c2}/M+${c1}y${c2}:hM+${c1}yyyyyy + yyyyyyy${c2}+MMMy${c1}y${c2}mMMMh${c1}yyyyy${c2}yM::mM+${c1}yyyyyyyy +`yyyyyyy${c2}+MMMMysMMMd${c1}yyyyy${c2}dh:mN+${c1}yyyyyyyyy` +yyyyyyyy${c2}:NMMMMmMMMMmmdhyy+/y:${c1}yyyyyyyyyyy +yyyyyyyy${c2}+MMMMMMMMMMMMMMMMMMNho:${c1}yyyyyyyyy +yyyyyyyy${c2}mMMMMMMMMMMMMMMMMMMMMMMy${c1}yyyyyyyy +yyyyyyy${c2}+MMMMMMMMMMMMMMMMMMMMMMMM/${c1}yyyyyyy +`yyyyyy${c2}sMMMMMMMMMMMMMMMMMMMMMMmo${c1}yyyyyyy` + yyyyyy${c2}oMMMMMMMMMMMMMMMMMMMmy+${c1}yyyyyyyyy + yyyyy${c2}:mMMMMMMMMMMMMMMNho/${c1}yyyyyyyyyyy + .yyyy${c2}:yNMMMMMMMNdyo:${c1}yyyyyyyyyyyyy. + `yyyyyy${c2}:/++/::${c1}yyyyyyyyyyyyyyyyy` + `yyyyyyyyyyyyyyyyyyyyyyyyyy` + `.yyyyyyyyyyyyyyyyyyyy.` + `.:/oosyyyysso/:.` +EOF + ;; + "IRIX"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c1} ./ohmNd/ +dNmho/- + `:+ydNMMMMMMMM.-MMMMMMMMMdyo:. + `hMMMMMMNhs/sMMM-:MMM+/shNMMMMMMh` + -NMMMMMmo-` /MMM-/MMM- `-omMMMMMN. + `.`-+hNMMMMMNhyMMM-/MMMshmMMMMMmy+...` ++mMNds:-:sdNMMMMMMMyyMMMMMMMNdo:.:sdMMm+ +dMMMMMMmy+.-/ymNMMMMMMMMNmy/-.+hmMMMMMMd +oMMMMmMMMMNds:.+MMMmmMMN/.-odNMMMMmMMMM+ +.MMMM-/ymMMMMMmNMMy..hMMNmMMMMMmy/-MMMM. + hMMM/ `/dMMMMMMMN////NMMMMMMMd/. /MMMh + /MMMdhmMMMmyyMMMMMMMMMMMMhymMMMmhdMMM: + `mMMMMNho//sdMMMMM//NMMMMms//ohNMMMMd + `/so/:+ymMMMNMMMM` mMMMMMMMmh+::+o/` + `yNMMNho-yMMMM` NMMMm.+hNMMNh` + -MMMMd: oMMMM. NMMMh :hMMMM- + -yNMMMmooMMMM- NMMMyomMMMNy- + .omMMMMMMMM-`NMMMMMMMmo. + `:hMMMMMM. NMMMMMh/` + .odNm+ /dNms. +EOF + ;; + "Zorin"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' +${c1} `osssssssssssssssssssso` + .osssssssssssssssssssssso. + .+oooooooooooooooooooooooo+. + + + `::::::::::::::::::::::. .:` + `+ssssssssssssssssss+:.` `.:+ssso` +.ossssssssssssssso/. `-+ossssssso. +ssssssssssssso/-` `-/osssssssssssss +.ossssssso/-` .-/ossssssssssssssso. + `+sss+:. `.:+ssssssssssssssssss+` + `:. .::::::::::::::::::::::` + + + .+oooooooooooooooooooooooo+. + -osssssssssssssssssssssso- + `osssssssssssssssssssso` +EOF + ;; + + *) + case $kernel_name in + *"BSD") + set_colors 1 7 4 3 6 + read -rd '' ascii_data <<'EOF' +${c1} , , + /( )` + \ \___ / | + /- _ `-/ ' + (${c2}/\/ \ ${c1}\ /\ + ${c2}/ / | ` ${c1}\ + ${c3}O O ${c2}) ${c1}/ | + ${c2}`-^--'${c1}`< ' + (_.) _ ) / + `.___/` / + `-----' / +${c4}<----. __ / __ \ +${c4}<----|====${c1}O)))${c4}==${c1}) \) /${c4}====| +<----' ${c1}`--' `.__,' \ + | | + \ / /\ + ${c5}______${c1}( (_ / \______/ + ${c5},' ,-----' | + `--{__________) +EOF + ;; + + "Darwin") + set_colors 2 3 1 1 5 4 + read -rd '' ascii_data <<'EOF' +${c1} c.' + ,xNMM. + .OMMMMo + lMMM" + .;loddo:. .olloddol;. + cKMMMMMMMMMMNWMMMMMMMMMM0: +${c2} .KMMMMMMMMMMMMMMMMMMMMMMMWd. + XMMMMMMMMMMMMMMMMMMMMMMMX. +${c3};MMMMMMMMMMMMMMMMMMMMMMMM: +:MMMMMMMMMMMMMMMMMMMMMMMM: +${c4}.MMMMMMMMMMMMMMMMMMMMMMMMX. + kMMMMMMMMMMMMMMMMMMMMMMMMWd. + ${c5}'XMMMMMMMMMMMMMMMMMMMMMMMMMMk + 'XMMMMMMMMMMMMMMMMMMMMMMMMK. + ${c6}kMMMMMMMMMMMMMMMMMMMMMMd + ;KMMMMMMMWXXWMMMMMMMk. + "cooc*" "*coo'" +EOF + ;; + + "GNU"*) + set_colors fg 7 + read -rd '' ascii_data <<'EOF' +${c1} _-`````-, ,- '- . + .' .- - | | - -. `. + /.' / `. \ +:/ : _... ..._ `` : +:: : /._ .`:'_.._\. || : +:: `._ ./ ,` : \ . _.'' . +`:. / | -. \-. \\_ / + \:._ _/ .' .@) \@) ` `\ ,.' + _/,--' .- .\,-.`--`. + ,'/'' (( \ ` ) + /'/' \ `-' ( + '/'' `._,-----' + ''/' .,---' + ''/' ;: + ''/'' ''/ + ''/''/'' + '/'/' + `; +EOF + ;; + + "Linux") + set_colors fg 8 3 + read -rd '' ascii_data <<'EOF' +${c2} ##### +${c2} ####### +${c2} ##${c1}O${c2}#${c1}O${c2}## +${c2} #${c3}#####${c2}# +${c2} ##${c1}##${c3}###${c1}##${c2}## +${c2} #${c1}##########${c2}## +${c2} #${c1}############${c2}## +${c2} #${c1}############${c2}### +${c3} ##${c2}#${c1}###########${c2}##${c3}# +${c3}######${c2}#${c1}#######${c2}#${c3}###### +${c3}#######${c2}#${c1}#####${c2}#${c3}####### +${c3} #####${c2}#######${c3}##### +EOF + ;; + "Profelis SambaBOX"* | "SambaBOX"*) + set_colors 3 6 + read -rd '' ascii_data <<'EOF' +${c1} + # + *////##### + /////////#########( + .((((((///// ,####(#((((( + /#######(((* (#(((((((((. +//((#(#(#, ((##( ,((((((// +////// #(##########( ////// +////// ((#(#(#(#(##########(///////// +/////( (((((((#########(##((((((///// +/(((#( ((((/ +####(# ((### +#########(((/////////(((((((((, (#(#( +########( /////////(((((((* ##### +####///, *////((( ((((((( +./////////// .//((((((((( + ///////////, *(/////((((* + ,/(((((((((##########/. + .((((((####### + ((##* +EOF + ;; + + "SunOS") + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} `- ` + `-- `+- .: + .+: `++: -/+- . + `.::` -++/``:::`./+/ `.-/. + `++/-`.` ` /++:` + `` ./:` .: `..`.- +``./+/:- -+++:- + -/+` :. +EOF + ;; + + "IRIX"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c1} ./ohmNd/ +dNmho/- + `:+ydNMMMMMMMM.-MMMMMMMMMdyo:. + `hMMMMMMNhs/sMMM-:MMM+/shNMMMMMMh` + -NMMMMMmo-` /MMM-/MMM- `-omMMMMMN. + `.`-+hNMMMMMNhyMMM-/MMMshmMMMMMmy+...` ++mMNds:-:sdNMMMMMMMyyMMMMMMMNdo:.:sdMMm+ +dMMMMMMmy+.-/ymNMMMMMMMMNmy/-.+hmMMMMMMd +oMMMMmMMMMNds:.+MMMmmMMN/.-odNMMMMmMMMM+ +.MMMM-/ymMMMMMmNMMy..hMMNmMMMMMmy/-MMMM. + hMMM/ `/dMMMMMMMN////NMMMMMMMd/. /MMMh + /MMMdhmMMMmyyMMMMMMMMMMMMhymMMMmhdMMM: + `mMMMMNho//sdMMMMM//NMMMMms//ohNMMMMd + `/so/:+ymMMMNMMMM` mMMMMMMMmh+::+o/` + `yNMMNho-yMMMM` NMMMm.+hNMMNh` + -MMMMd: oMMMM. NMMMh :hMMMM- + -yNMMMmooMMMM- NMMMyomMMMNy- + .omMMMMMMMM-`NMMMMMMMmo. + `:hMMMMMM. NMMMMMh/` + .odNm+ /dNms. +EOF + ;; + + esac + ;; + esac + + # Overwrite distro colors if '$ascii_colors' doesn't + # equal 'distro'. + [[ ${ascii_colors[0]} != distro ]] && { + color_text=off + set_colors "${ascii_colors[@]}" + } +} + +main() { + cache_uname + get_os + + # Load default config. + eval "$config" + + get_args "$@" + [[ $verbose != on ]] && exec 2>/dev/null + get_simple "$@" + get_distro + get_bold + get_distro_ascii + [[ $stdout == on ]] && stdout + + # Minix doesn't support these sequences. + [[ $TERM != minix && $stdout != on ]] && { + # If the script exits for any reason, unhide the cursor. + trap 'printf "\e[?25h\e[?7h"' EXIT + + # Hide the cursor and disable line wrap. + printf '\e[?25l\e[?7l' + } + + image_backend + get_cache_dir + old_functions + print_info + dynamic_prompt + + # w3m-img: Draw the image a second time to fix + # rendering issues in specific terminal emulators. + [[ $image_backend == *w3m* ]] && display_image + [[ $image_backend == *ueberzug* ]] && display_image + + # Add neofetch info to verbose output. + err "Neofetch command: $0 $*" + err "Neofetch version: $version" + + [[ $verbose == on ]] && printf %b "$err" >&2 + + # If `--loop` was used, constantly redraw the image. + while [[ $image_loop == on && $image_backend == w3m ]]; do + display_image + sleep 1 + done + + return 0 +} + +main "$@" diff --git a/x86_64/core/base-chroot/os-release b/x86_64/core/base-chroot/os-release new file mode 100644 index 0000000..f4ade54 --- /dev/null +++ b/x86_64/core/base-chroot/os-release @@ -0,0 +1,7 @@ +NAME="Drunk" +VERSION="2022.3" +ID=drunk +ID_LIKE=drunk +PRETTY_NAME="Drunk 2022.3" +VERSION_ID="2022.3" +VERSION_CODENAME=sober diff --git a/x86_64/core/base-drunk/PKGBUILD b/x86_64/core/base-drunk/PKGBUILD new file mode 100644 index 0000000..ec96eda --- /dev/null +++ b/x86_64/core/base-drunk/PKGBUILD @@ -0,0 +1,39 @@ +pkgname=base-drunk +pkgver=2022.3 +pkgrel=1 +pkgdesc="Base metapckage alike pkg to give user/dev needed bootable CLI-System" +arch=('x86_64') +source=(os-release neofetch) +depends=( + # Base packages + accountsservice ca-certificates diffutils file gnu-efi kmod libnl linux-pam pciutils procps-ng tar xz + acl dosfstools filesystem gzip less libseccomp lz4 pcre readline texinfo zlib + attr coreutils dracut freetype2 iana-etc libarchive libtasn1 lzo pcre2 sed tzdata + cpio duktape fuse2 icu libcap libtool ncurses shadow util-linux + bash curl e2fsprogs gawk inetutils libevent libx11 openssl pkgconf squashfs-tools wget + binutils dbus gettext intltool libffi libxcrypt p11-kit polkit syslinux which + bzip2 dhcpcd expat glib2 iproute2 libgudev libxml2 popt systemd wpa_supplicant + findutils nghttp2 + + # Needed to boot base-drunk + linux linux-firmware + + # pkg manager + bottle) + +build() { + mkdir -p $pkgname-$pkgver + cd $pkgname-$pkgver +} + +package() { + cd $pkgname-$pkgver + + # Make rootfs structure + mkdir -vp $pkgdir/etc/systemd/system/ + mkdir -vp $pkgdir/usr/bin + + # Copy over needed files + cp -rf ../../os-release $pkgdir/etc + cp -rf ../../neofetch $pkgdir/usr/bin && chmod +x $pkgdir/usr/bin/neofetch +} diff --git a/x86_64/core/base-drunk/neofetch b/x86_64/core/base-drunk/neofetch new file mode 100755 index 0000000..9ca8859 --- /dev/null +++ b/x86_64/core/base-drunk/neofetch @@ -0,0 +1,11563 @@ +#!/usr/bin/env bash +# vim: noai:ts=4:sw=4:expandtab +# shellcheck source=/dev/null +# shellcheck disable=2009 +# +# Neofetch: A command-line system information tool written in bash 3.2+. +# https://github.com/dylanaraps/neofetch +# +# The MIT License (MIT) +# +# Copyright (c) 2015-2021 Dylan Araps +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +version=7.1.0 + +# Fallback to a value of '5' for shells which support bash +# but do not set the 'BASH_' shell variables (osh). +bash_version=${BASH_VERSINFO[0]:-5} +shopt -s eval_unsafe_arith &>/dev/null + +sys_locale=${LANG:-C} +XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-${HOME}/.config} +PATH=$PATH:/usr/xpg4/bin:/usr/sbin:/sbin:/usr/etc:/usr/libexec +reset='\e[0m' +shopt -s nocasematch + +# Speed up script by not using unicode. +LC_ALL=C +LANG=C + +# Fix issues with gsettings. +export GIO_EXTRA_MODULES=/usr/lib/x86_64-linux-gnu/gio/modules/ + +# Neofetch default config. +read -rd '' config <<'EOF' +# See this wiki page for more info: +# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info +print_info() { + info title + info underline + + info "OS" distro + info "Host" model + info "Kernel" kernel + info "Uptime" uptime + info "Packages" packages + info "Shell" shell + info "Resolution" resolution + info "DE" de + info "WM" wm + info "WM Theme" wm_theme + info "Theme" theme + info "Icons" icons + info "Terminal" term + info "Terminal Font" term_font + info "CPU" cpu + info "GPU" gpu + info "Memory" memory + + # info "GPU Driver" gpu_driver # Linux/macOS only + # info "Disk" disk + # info "Battery" battery + # info "Font" font + # info "Song" song + # [[ "$player" ]] && prin "Music Player" "$player" + # info "Local IP" local_ip + # info "Public IP" public_ip + # info "Users" users + # info "Locale" locale # This only works on glibc systems. + + info cols +} + +# Title + + +# Hide/Show Fully qualified domain name. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --title_fqdn +title_fqdn="off" + + +# Kernel + + +# Shorten the output of the kernel function. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --kernel_shorthand +# Supports: Everything except *BSDs (except PacBSD and PC-BSD) +# +# Example: +# on: '4.8.9-1-ARCH' +# off: 'Linux 4.8.9-1-ARCH' +kernel_shorthand="on" + + +# Distro + + +# Shorten the output of the distro function +# +# Default: 'off' +# Values: 'on', 'tiny', 'off' +# Flag: --distro_shorthand +# Supports: Everything except Windows and Haiku +distro_shorthand="off" + +# Show/Hide OS Architecture. +# Show 'x86_64', 'x86' and etc in 'Distro:' output. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --os_arch +# +# Example: +# on: 'Arch Linux x86_64' +# off: 'Arch Linux' +os_arch="on" + + +# Uptime + + +# Shorten the output of the uptime function +# +# Default: 'on' +# Values: 'on', 'tiny', 'off' +# Flag: --uptime_shorthand +# +# Example: +# on: '2 days, 10 hours, 3 mins' +# tiny: '2d 10h 3m' +# off: '2 days, 10 hours, 3 minutes' +uptime_shorthand="on" + + +# Memory + + +# Show memory percentage in output. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --memory_percent +# +# Example: +# on: '1801MiB / 7881MiB (22%)' +# off: '1801MiB / 7881MiB' +memory_percent="off" + +# Change memory output unit. +# +# Default: 'mib' +# Values: 'kib', 'mib', 'gib' +# Flag: --memory_unit +# +# Example: +# kib '1020928KiB / 7117824KiB' +# mib '1042MiB / 6951MiB' +# gib: ' 0.98GiB / 6.79GiB' +memory_unit="mib" + + +# Packages + + +# Show/Hide Package Manager names. +# +# Default: 'tiny' +# Values: 'on', 'tiny' 'off' +# Flag: --package_managers +# +# Example: +# on: '998 (pacman), 8 (flatpak), 4 (snap)' +# tiny: '908 (pacman, flatpak, snap)' +# off: '908' +package_managers="on" + + +# Shell + + +# Show the path to $SHELL +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --shell_path +# +# Example: +# on: '/bin/bash' +# off: 'bash' +shell_path="off" + +# Show $SHELL version +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --shell_version +# +# Example: +# on: 'bash 4.4.5' +# off: 'bash' +shell_version="on" + + +# CPU + + +# CPU speed type +# +# Default: 'bios_limit' +# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'. +# Flag: --speed_type +# Supports: Linux with 'cpufreq' +# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value. +speed_type="bios_limit" + +# CPU speed shorthand +# +# Default: 'off' +# Values: 'on', 'off'. +# Flag: --speed_shorthand +# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz +# +# Example: +# on: 'i7-6500U (4) @ 3.1GHz' +# off: 'i7-6500U (4) @ 3.100GHz' +speed_shorthand="off" + +# Enable/Disable CPU brand in output. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --cpu_brand +# +# Example: +# on: 'Intel i7-6500U' +# off: 'i7-6500U (4)' +cpu_brand="on" + +# CPU Speed +# Hide/Show CPU speed. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --cpu_speed +# +# Example: +# on: 'Intel i7-6500U (4) @ 3.1GHz' +# off: 'Intel i7-6500U (4)' +cpu_speed="on" + +# CPU Cores +# Display CPU cores in output +# +# Default: 'logical' +# Values: 'logical', 'physical', 'off' +# Flag: --cpu_cores +# Support: 'physical' doesn't work on BSD. +# +# Example: +# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores) +# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores) +# off: 'Intel i7-6500U @ 3.1GHz' +cpu_cores="logical" + +# CPU Temperature +# Hide/Show CPU temperature. +# Note the temperature is added to the regular CPU function. +# +# Default: 'off' +# Values: 'C', 'F', 'off' +# Flag: --cpu_temp +# Supports: Linux, BSD +# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable +# coretemp kernel module. This only supports newer Intel processors. +# +# Example: +# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]' +# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]' +# off: 'Intel i7-6500U (4) @ 3.1GHz' +cpu_temp="off" + + +# GPU + + +# Enable/Disable GPU Brand +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gpu_brand +# +# Example: +# on: 'AMD HD 7950' +# off: 'HD 7950' +gpu_brand="on" + +# Which GPU to display +# +# Default: 'all' +# Values: 'all', 'dedicated', 'integrated' +# Flag: --gpu_type +# Supports: Linux +# +# Example: +# all: +# GPU1: AMD HD 7950 +# GPU2: Intel Integrated Graphics +# +# dedicated: +# GPU1: AMD HD 7950 +# +# integrated: +# GPU1: Intel Integrated Graphics +gpu_type="all" + + +# Resolution + + +# Display refresh rate next to each monitor +# Default: 'off' +# Values: 'on', 'off' +# Flag: --refresh_rate +# Supports: Doesn't work on Windows. +# +# Example: +# on: '1920x1080 @ 60Hz' +# off: '1920x1080' +refresh_rate="off" + + +# Gtk Theme / Icons / Font + + +# Shorten output of GTK Theme / Icons / Font +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --gtk_shorthand +# +# Example: +# on: 'Numix, Adwaita' +# off: 'Numix [GTK2], Adwaita [GTK3]' +gtk_shorthand="off" + + +# Enable/Disable gtk2 Theme / Icons / Font +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gtk2 +# +# Example: +# on: 'Numix [GTK2], Adwaita [GTK3]' +# off: 'Adwaita [GTK3]' +gtk2="on" + +# Enable/Disable gtk3 Theme / Icons / Font +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --gtk3 +# +# Example: +# on: 'Numix [GTK2], Adwaita [GTK3]' +# off: 'Numix [GTK2]' +gtk3="on" + + +# IP Address + + +# Website to ping for the public IP +# +# Default: 'http://ident.me' +# Values: 'url' +# Flag: --ip_host +public_ip_host="http://ident.me" + +# Public IP timeout. +# +# Default: '2' +# Values: 'int' +# Flag: --ip_timeout +public_ip_timeout=2 + +# Local IP interface +# +# Default: 'auto' (interface of default route) +# Values: 'auto', 'en0', 'en1' +# Flag: --ip_interface +local_ip_interface=('auto') + + +# Desktop Environment + + +# Show Desktop Environment version +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --de_version +de_version="on" + + +# Disk + + +# Which disks to display. +# The values can be any /dev/sdXX, mount point or directory. +# NOTE: By default we only show the disk info for '/'. +# +# Default: '/' +# Values: '/', '/dev/sdXX', '/path/to/drive'. +# Flag: --disk_show +# +# Example: +# disk_show=('/' '/dev/sdb1'): +# 'Disk (/): 74G / 118G (66%)' +# 'Disk (/mnt/Videos): 823G / 893G (93%)' +# +# disk_show=('/'): +# 'Disk (/): 74G / 118G (66%)' +# +disk_show=('/') + +# Disk subtitle. +# What to append to the Disk subtitle. +# +# Default: 'mount' +# Values: 'mount', 'name', 'dir', 'none' +# Flag: --disk_subtitle +# +# Example: +# name: 'Disk (/dev/sda1): 74G / 118G (66%)' +# 'Disk (/dev/sdb2): 74G / 118G (66%)' +# +# mount: 'Disk (/): 74G / 118G (66%)' +# 'Disk (/mnt/Local Disk): 74G / 118G (66%)' +# 'Disk (/mnt/Videos): 74G / 118G (66%)' +# +# dir: 'Disk (/): 74G / 118G (66%)' +# 'Disk (Local Disk): 74G / 118G (66%)' +# 'Disk (Videos): 74G / 118G (66%)' +# +# none: 'Disk: 74G / 118G (66%)' +# 'Disk: 74G / 118G (66%)' +# 'Disk: 74G / 118G (66%)' +disk_subtitle="mount" + +# Disk percent. +# Show/Hide disk percent. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --disk_percent +# +# Example: +# on: 'Disk (/): 74G / 118G (66%)' +# off: 'Disk (/): 74G / 118G' +disk_percent="on" + + +# Song + + +# Manually specify a music player. +# +# Default: 'auto' +# Values: 'auto', 'player-name' +# Flag: --music_player +# +# Available values for 'player-name': +# +# amarok +# audacious +# banshee +# bluemindo +# clementine +# cmus +# deadbeef +# deepin-music +# dragon +# elisa +# exaile +# gnome-music +# gmusicbrowser +# gogglesmm +# guayadeque +# io.elementary.music +# iTunes +# Music +# juk +# lollypop +# MellowPlayer +# mocp +# mopidy +# mpd +# muine +# netease-cloud-music +# olivia +# playerctl +# pogo +# pragha +# qmmp +# quodlibet +# rhythmbox +# sayonara +# smplayer +# spotify +# strawberry +# tauonmb +# tomahawk +# vlc +# xmms2d +# xnoise +# yarock +music_player="auto" + +# Format to display song information. +# +# Default: '%artist% - %album% - %title%' +# Values: '%artist%', '%album%', '%title%' +# Flag: --song_format +# +# Example: +# default: 'Song: Jet - Get Born - Sgt Major' +song_format="%artist% - %album% - %title%" + +# Print the Artist, Album and Title on separate lines +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --song_shorthand +# +# Example: +# on: 'Artist: The Fratellis' +# 'Album: Costello Music' +# 'Song: Chelsea Dagger' +# +# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger' +song_shorthand="off" + +# 'mpc' arguments (specify a host, password etc). +# +# Default: '' +# Example: mpc_args=(-h HOST -P PASSWORD) +mpc_args=() + + +# Text Colors + + +# Text Colors +# +# Default: 'distro' +# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' +# Flag: --colors +# +# Each number represents a different part of the text in +# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info' +# +# Example: +# colors=(distro) - Text is colored based on Distro colors. +# colors=(4 6 1 8 8 6) - Text is colored in the order above. +colors=(distro) + + +# Text Options + + +# Toggle bold text +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --bold +bold="on" + +# Enable/Disable Underline +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --underline +underline_enabled="on" + +# Underline character +# +# Default: '-' +# Values: 'string' +# Flag: --underline_char +underline_char="-" + + +# Info Separator +# Replace the default separator with the specified string. +# +# Default: ':' +# Flag: --separator +# +# Example: +# separator="->": 'Shell-> bash' +# separator=" =": 'WM = dwm' +separator=":" + + +# Color Blocks + + +# Color block range +# The range of colors to print. +# +# Default: '0', '15' +# Values: 'num' +# Flag: --block_range +# +# Example: +# +# Display colors 0-7 in the blocks. (8 colors) +# neofetch --block_range 0 7 +# +# Display colors 0-15 in the blocks. (16 colors) +# neofetch --block_range 0 15 +block_range=(0 15) + +# Toggle color blocks +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --color_blocks +color_blocks="on" + +# Color block width in spaces +# +# Default: '3' +# Values: 'num' +# Flag: --block_width +block_width=3 + +# Color block height in lines +# +# Default: '1' +# Values: 'num' +# Flag: --block_height +block_height=1 + +# Color Alignment +# +# Default: 'auto' +# Values: 'auto', 'num' +# Flag: --col_offset +# +# Number specifies how far from the left side of the terminal (in spaces) to +# begin printing the columns, in case you want to e.g. center them under your +# text. +# Example: +# col_offset="auto" - Default behavior of neofetch +# col_offset=7 - Leave 7 spaces then print the colors +col_offset="auto" + +# Progress Bars + + +# Bar characters +# +# Default: '-', '=' +# Values: 'string', 'string' +# Flag: --bar_char +# +# Example: +# neofetch --bar_char 'elapsed' 'total' +# neofetch --bar_char '-' '=' +bar_char_elapsed="-" +bar_char_total="=" + +# Toggle Bar border +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --bar_border +bar_border="on" + +# Progress bar length in spaces +# Number of chars long to make the progress bars. +# +# Default: '15' +# Values: 'num' +# Flag: --bar_length +bar_length=15 + +# Progress bar colors +# When set to distro, uses your distro's logo colors. +# +# Default: 'distro', 'distro' +# Values: 'distro', 'num' +# Flag: --bar_colors +# +# Example: +# neofetch --bar_colors 3 4 +# neofetch --bar_colors distro 5 +bar_color_elapsed="distro" +bar_color_total="distro" + + +# Info display +# Display a bar with the info. +# +# Default: 'off' +# Values: 'bar', 'infobar', 'barinfo', 'off' +# Flags: --memory_display +# --battery_display +# --disk_display +# +# Example: +# bar: '[---=======]' +# infobar: 'info [---=======]' +# barinfo: '[---=======] info' +# off: 'info' +memory_display="off" +battery_display="off" +disk_display="off" + + +# Backend Settings + + +# Image backend. +# +# Default: 'ascii' +# Values: 'ascii', 'caca', 'catimg', 'chafa', 'jp2a', 'iterm2', 'off', +# 'pot', 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty', 'ueberzug', +# 'viu' + +# Flag: --backend +image_backend="ascii" + +# Image Source +# +# Which image or ascii file to display. +# +# Default: 'auto' +# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/' +# 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")' +# Flag: --source +# +# NOTE: 'auto' will pick the best image source for whatever image backend is used. +# In ascii mode, distro ascii art will be used and in an image mode, your +# wallpaper will be used. +image_source="auto" + + +# Ascii Options + + +# Ascii distro +# Which distro's ascii art to display. +# +# Default: 'auto' +# Values: 'auto', 'distro_name' +# Flag: --ascii_distro +# NOTE: AIX, Hash, Alpine, AlterLinux, Amazon, Anarchy, Android, instantOS, +# Antergos, antiX, "AOSC OS", "AOSC OS/Retro", Apricity, ArchCraft, +# ArcoLinux, ArchBox, ARCHlabs, ArchStrike, XFerience, ArchMerge, Arch, +# Artix, Arya, Bedrock, Bitrig, BlackArch, BLAG, BlankOn, BlueLight, +# Bodhi, bonsai, BSD, BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS, +# Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover, Condres, +# Container_Linux, Crystal Linux, CRUX, Cucumber, dahlia, Debian, Deepin, +# DesaOS, Devuan, DracOS, DarkOs, Itc, DragonFly, Drauger, Elementary, +# EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD, +# FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, Pentoo, +# gNewSense, GNOME, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra, HydroOS +# Hyperbola, iglunix, janus, Kali, Drunk, KaOS, KDE_neon, Kibojoe, Kogaion, Korora, +# KSLinux, Kubuntu, LEDE, LaxerOS, LibreELEC, LFS, Linux_Lite, LMDE, +# Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva, Manjaro, TeArch, Maui, +# Mer, Minix, LinuxMint, Live_Raizo, MX_Linux, Namib, Neptune, NetBSD, +# Netrunner, Nitrux, NixOS, Nurunner, NuTyX, OBRevenge, OpenBSD, +# openEuler, OpenIndiana, openmamba, OpenMandriva, OpenStage, OpenWrt, +# osmc, Oracle, OS Elbrus, PacBSD, Parabola, Pardus, Parrot, Parsix, +# TrueOS, PCLinuxOS, Pengwin, Peppermint, Pisi, popos, Porteus, PostMarketOS, +# Proxmox, PuffOS, Puppy, PureOS, Qubes, Quibian, Radix, Raspbian, +# Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan, Regata, Regolith, +# Rocky, Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific, Septor, +# SereneLinux, SharkLinux, Siduction, SkiffOS, Slackware, SliTaz, SmartOS, +# Solus, Source_Mage, Sparky, Star, SteamOS, SunOS, openSUSE_Leap, t2, +# openSUSE_Tumbleweed, openSUSE, SwagArch, Tails, Trisquel, +# Ubuntu-Cinnamon, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, +# Ubuntu-Studio, Ubuntu, Univention, Venom, Void, VNux, LangitKetujuh, semc, +# Obarun, windows10, Windows7, Xubuntu, Zorin, and IRIX have ascii logos. +# NOTE: Arch, Ubuntu, Redhat, Fedora and Dragonfly have 'old' logo variants. +# Use '{distro name}_old' to use the old logos. +# NOTE: Ubuntu has flavor variants. +# Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME, +# Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors. +# NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu, +# CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android, +# Artix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola, +# Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS, +# Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian, +# postmarketOS, and Void have a smaller logo variant. +# Use '{distro name}_small' to use the small variants. +ascii_distro="auto" + +# Ascii Colors +# +# Default: 'distro' +# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' +# Flag: --ascii_colors +# +# Example: +# ascii_colors=(distro) - Ascii is colored based on Distro colors. +# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors. +ascii_colors=(distro) + +# Bold ascii logo +# Whether or not to bold the ascii logo. +# +# Default: 'on' +# Values: 'on', 'off' +# Flag: --ascii_bold +ascii_bold="on" + + +# Image Options + + +# Image loop +# Setting this to on will make neofetch redraw the image constantly until +# Ctrl+C is pressed. This fixes display issues in some terminal emulators. +# +# Default: 'off' +# Values: 'on', 'off' +# Flag: --loop +image_loop="off" + +# Thumbnail directory +# +# Default: '~/.cache/thumbnails/neofetch' +# Values: 'dir' +thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch" + +# Crop mode +# +# Default: 'normal' +# Values: 'normal', 'fit', 'fill' +# Flag: --crop_mode +# +# See this wiki page to learn about the fit and fill options. +# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F +crop_mode="normal" + +# Crop offset +# Note: Only affects 'normal' crop mode. +# +# Default: 'center' +# Values: 'northwest', 'north', 'northeast', 'west', 'center' +# 'east', 'southwest', 'south', 'southeast' +# Flag: --crop_offset +crop_offset="center" + +# Image size +# The image is half the terminal width by default. +# +# Default: 'auto' +# Values: 'auto', '00px', '00%', 'none' +# Flags: --image_size +# --size +image_size="auto" + +# Catimg block size. +# Control the resolution of catimg. +# +# Default: '2' +# Values: '1', '2' +# Flags: --catimg_size +catimg_size="2" + +# Gap between image and text +# +# Default: '3' +# Values: 'num', '-num' +# Flag: --gap +gap=3 + +# Image offsets +# Only works with the w3m backend. +# +# Default: '0' +# Values: 'px' +# Flags: --xoffset +# --yoffset +yoffset=0 +xoffset=0 + +# Image background color +# Only works with the w3m backend. +# +# Default: '' +# Values: 'color', 'blue' +# Flag: --bg_color +background_color= + + +# Misc Options + +# Stdout mode +# Turn off all colors and disables image backend (ASCII/Image). +# Useful for piping into another command. +# Default: 'off' +# Values: 'on', 'off' +stdout="off" +EOF + +# DETECT INFORMATION + +get_os() { + # $kernel_name is set in a function called cache_uname and is + # just the output of "uname -s". + case $kernel_name in + Darwin) os=$darwin_name ;; + SunOS) os=Solaris ;; + Haiku) os=Haiku ;; + MINIX) os=MINIX ;; + AIX) os=AIX ;; + IRIX*) os=IRIX ;; + FreeMiNT) os=FreeMiNT ;; + + Linux|GNU*) + os=Linux + ;; + + *BSD|DragonFly|Bitrig) + os=BSD + ;; + + CYGWIN*|MSYS*|MINGW*) + os=Windows + ;; + + *) + printf '%s\n' "Unknown OS detected: '$kernel_name', aborting..." >&2 + printf '%s\n' "Open an issue on GitHub to add support for your OS." >&2 + exit 1 + ;; + esac +} + +get_distro() { + [[ $distro ]] && return + + case $os in + Linux|BSD|MINIX) + if [[ -f /bedrock/etc/bedrock-release && -z $BEDROCK_RESTRICT ]]; then + case $distro_shorthand in + on|tiny) distro="Bedrock Linux" ;; + *) distro=$(< /bedrock/etc/bedrock-release) + esac + + elif [[ -f /etc/redstar-release ]]; then + case $distro_shorthand in + on|tiny) distro="Red Star OS" ;; + *) distro="Red Star OS $(awk -F'[^0-9*]' '$0=$2' /etc/redstar-release)" + esac + + elif [[ -f /etc/armbian-release ]]; then + . /etc/armbian-release + distro="Armbian $DISTRIBUTION_CODENAME (${VERSION:-})" + + elif [[ -f /etc/siduction-version ]]; then + case $distro_shorthand in + on|tiny) distro=Siduction ;; + *) distro="Siduction ($(lsb_release -sic))" + esac + + elif [[ -f /etc/mcst_version ]]; then + case $distro_shorthand in + on|tiny) distro="OS Elbrus" ;; + *) distro="OS Elbrus $(< /etc/mcst_version)" + esac + + elif type -p pveversion >/dev/null; then + case $distro_shorthand in + on|tiny) distro="Proxmox VE" ;; + *) + distro=$(pveversion) + distro=${distro#pve-manager/} + distro="Proxmox VE ${distro%/*}" + esac + + elif type -p lsb_release >/dev/null; then + case $distro_shorthand in + on) lsb_flags=-si ;; + tiny) lsb_flags=-si ;; + *) lsb_flags=-sd ;; + esac + distro=$(lsb_release "$lsb_flags") + + elif [[ -f /etc/os-release || \ + -f /usr/lib/os-release || \ + -f /etc/openwrt_release || \ + -f /etc/lsb-release ]]; then + + # Source the os-release file + for file in /etc/lsb-release /usr/lib/os-release \ + /etc/os-release /etc/openwrt_release; do + source "$file" && break + done + + # Format the distro name. + case $distro_shorthand in + on) distro="${NAME:-${DISTRIB_ID}} ${VERSION_ID:-${DISTRIB_RELEASE}}" ;; + tiny) distro="${NAME:-${DISTRIB_ID:-${TAILS_PRODUCT_NAME}}}" ;; + off) distro="${PRETTY_NAME:-${DISTRIB_DESCRIPTION}} ${UBUNTU_CODENAME}" ;; + esac + + elif [[ -f /etc/GoboLinuxVersion ]]; then + case $distro_shorthand in + on|tiny) distro=GoboLinux ;; + *) distro="GoboLinux $(< /etc/GoboLinuxVersion)" + esac + + elif [[ -f /etc/SDE-VERSION ]]; then + distro="$(< /etc/SDE-VERSION)" + case $distro_shorthand in + on|tiny) distro="${distro% *}" ;; + esac + + elif type -p crux >/dev/null; then + distro=$(crux) + case $distro_shorthand in + on) distro=${distro//version} ;; + tiny) distro=${distro//version*} + esac + + elif type -p tazpkg >/dev/null; then + distro="SliTaz $(< /etc/slitaz-release)" + + elif type -p kpt >/dev/null && \ + type -p kpm >/dev/null; then + distro=KSLinux + + elif [[ -d /system/app/ && -d /system/priv-app ]]; then + distro="Android $(getprop ro.build.version.release)" + + # Chrome OS doesn't conform to the /etc/*-release standard. + # While the file is a series of variables they can't be sourced + # by the shell since the values aren't quoted. + elif [[ -f /etc/lsb-release && $(< /etc/lsb-release) == *CHROMEOS* ]]; then + distro='Chrome OS' + + elif type -p guix >/dev/null; then + case $distro_shorthand in + on|tiny) distro="Guix System" ;; + *) distro="Guix System $(guix -V | awk 'NR==1{printf $4}')" + esac + + # Display whether using '-current' or '-release' on OpenBSD. + elif [[ $kernel_name = OpenBSD ]] ; then + read -ra kernel_info <<< "$(sysctl -n kern.version)" + distro=${kernel_info[*]:0:2} + + else + for release_file in /etc/*-release; do + distro+=$(< "$release_file") + done + + if [[ -z $distro ]]; then + case $distro_shorthand in + on|tiny) distro=$kernel_name ;; + *) distro="$kernel_name $kernel_version" ;; + esac + + distro=${distro/DragonFly/DragonFlyBSD} + + # Workarounds for some BSD based distros. + [[ -f /etc/pcbsd-lang ]] && distro=PCBSD + [[ -f /etc/trueos-lang ]] && distro=TrueOS + [[ -f /etc/pacbsd-release ]] && distro=PacBSD + [[ -f /etc/hbsd-update.conf ]] && distro=HardenedBSD + fi + fi + + if [[ $(< /proc/version) == *Microsoft* || $kernel_version == *Microsoft* ]]; then + case $distro_shorthand in + on) distro+=" [Windows 10]" ;; + tiny) distro="Windows 10" ;; + *) distro+=" on Windows 10" ;; + esac + + elif [[ $(< /proc/version) == *chrome-bot* || -f /dev/cros_ec ]]; then + [[ $distro != *Chrome* ]] && + case $distro_shorthand in + on) distro+=" [Chrome OS]" ;; + tiny) distro="Chrome OS" ;; + *) distro+=" on Chrome OS" ;; + esac + distro=${distro## on } + fi + + distro=$(trim_quotes "$distro") + distro=${distro/NAME=} + + # Get Ubuntu flavor. + if [[ $distro == "Ubuntu"* ]]; then + case $XDG_CONFIG_DIRS in + *"studio"*) distro=${distro/Ubuntu/Ubuntu Studio} ;; + *"plasma"*) distro=${distro/Ubuntu/Kubuntu} ;; + *"mate"*) distro=${distro/Ubuntu/Ubuntu MATE} ;; + *"xubuntu"*) distro=${distro/Ubuntu/Xubuntu} ;; + *"Lubuntu"*) distro=${distro/Ubuntu/Lubuntu} ;; + *"budgie"*) distro=${distro/Ubuntu/Ubuntu Budgie} ;; + *"cinnamon"*) distro=${distro/Ubuntu/Ubuntu Cinnamon} ;; + esac + fi + ;; + + "Mac OS X"|"macOS") + case $osx_version in + 10.4*) codename="Mac OS X Tiger" ;; + 10.5*) codename="Mac OS X Leopard" ;; + 10.6*) codename="Mac OS X Snow Leopard" ;; + 10.7*) codename="Mac OS X Lion" ;; + 10.8*) codename="OS X Mountain Lion" ;; + 10.9*) codename="OS X Mavericks" ;; + 10.10*) codename="OS X Yosemite" ;; + 10.11*) codename="OS X El Capitan" ;; + 10.12*) codename="macOS Sierra" ;; + 10.13*) codename="macOS High Sierra" ;; + 10.14*) codename="macOS Mojave" ;; + 10.15*) codename="macOS Catalina" ;; + 10.16*) codename="macOS Big Sur" ;; + 11.*) codename="macOS Big Sur" ;; + 12.*) codename="macOS Monterey" ;; + *) codename=macOS ;; + esac + + distro="$codename $osx_version $osx_build" + + case $distro_shorthand in + on) distro=${distro/ ${osx_build}} ;; + + tiny) + case $osx_version in + 10.[4-7]*) distro=${distro/${codename}/Mac OS X} ;; + 10.[8-9]*|10.1[0-1]*) distro=${distro/${codename}/OS X} ;; + 10.1[2-6]*|11.0*) distro=${distro/${codename}/macOS} ;; + esac + distro=${distro/ ${osx_build}} + ;; + esac + ;; + + "iPhone OS") + distro="iOS $osx_version" + + # "uname -m" doesn't print architecture on iOS. + os_arch=off + ;; + + Windows) + distro=$(wmic os get Caption) + distro=${distro/Caption} + distro=${distro/Microsoft } + ;; + + Solaris) + case $distro_shorthand in + on|tiny) distro=$(awk 'NR==1 {print $1,$3}' /etc/release) ;; + *) distro=$(awk 'NR==1 {print $1,$2,$3}' /etc/release) ;; + esac + distro=${distro/\(*} + ;; + + Haiku) + distro=Haiku + ;; + + AIX) + distro="AIX $(oslevel)" + ;; + + IRIX) + distro="IRIX ${kernel_version}" + ;; + + FreeMiNT) + distro=FreeMiNT + ;; + esac + + distro=${distro//Enterprise Server} + + [[ $distro ]] || distro="$os (Unknown)" + + # Get OS architecture. + case $os in + Solaris|AIX|Haiku|IRIX|FreeMiNT) + machine_arch=$(uname -p) + ;; + + *) machine_arch=$kernel_machine ;; + esac + + [[ $os_arch == on ]] && \ + distro+=" $machine_arch" + + [[ ${ascii_distro:-auto} == auto ]] && \ + ascii_distro=$(trim "$distro") +} + +get_model() { + case $os in + Linux) + if [[ -d /system/app/ && -d /system/priv-app ]]; then + model="$(getprop ro.product.brand) $(getprop ro.product.model)" + + elif [[ -f /sys/devices/virtual/dmi/id/board_vendor || + -f /sys/devices/virtual/dmi/id/board_name ]]; then + model=$(< /sys/devices/virtual/dmi/id/board_vendor) + model+=" $(< /sys/devices/virtual/dmi/id/board_name)" + + elif [[ -f /sys/devices/virtual/dmi/id/product_name || + -f /sys/devices/virtual/dmi/id/product_version ]]; then + model=$(< /sys/devices/virtual/dmi/id/product_name) + model+=" $(< /sys/devices/virtual/dmi/id/product_version)" + + elif [[ -f /sys/firmware/devicetree/base/model ]]; then + model=$(< /sys/firmware/devicetree/base/model) + + elif [[ -f /tmp/sysinfo/model ]]; then + model=$(< /tmp/sysinfo/model) + fi + ;; + + "Mac OS X"|"macOS") + if [[ $(kextstat | grep -F -e "FakeSMC" -e "VirtualSMC") != "" ]]; then + model="Hackintosh (SMBIOS: $(sysctl -n hw.model))" + else + model=$(sysctl -n hw.model) + fi + ;; + + "iPhone OS") + case $kernel_machine in + iPad1,1): "iPad" ;; + iPad2,[1-4]): "iPad 2" ;; + iPad3,[1-3]): "iPad 3" ;; + iPad3,[4-6]): "iPad 4" ;; + iPad6,1[12]): "iPad 5" ;; + iPad7,[5-6]): "iPad 6" ;; + iPad7,1[12]): "iPad 7" ;; + iPad11,[67]): "iPad 8" ;; + iPad4,[1-3]): "iPad Air" ;; + iPad5,[3-4]): "iPad Air 2" ;; + iPad11,[3-4]): "iPad Air 3" ;; + iPad13,[1-2]): "iPad Air 4";; + iPad6,[7-8]): "iPad Pro (12.9 Inch)" ;; + iPad6,[3-4]): "iPad Pro (9.7 Inch)" ;; + iPad7,[1-2]): "iPad Pro 2 (12.9 Inch)" ;; + iPad7,[3-4]): "iPad Pro (10.5 Inch)" ;; + iPad8,[1-4]): "iPad Pro (11 Inch)" ;; + iPad8,[5-8]): "iPad Pro 3 (12.9 Inch)" ;; + iPad8,9 | iPad8,10): "iPad Pro 4 (11 Inch)" ;; + iPad8,1[1-2]): "iPad Pro 4 (12.9 Inch)" ;; + iPad2,[5-7]): "iPad mini" ;; + iPad4,[4-6]): "iPad mini 2" ;; + iPad4,[7-9]): "iPad mini 3" ;; + iPad5,[1-2]): "iPad mini 4" ;; + iPad11,[1-2]): "iPad mini 5" ;; + + iPhone1,1): "iPhone" ;; + iPhone1,2): "iPhone 3G" ;; + iPhone2,1): "iPhone 3GS" ;; + iPhone3,[1-3]): "iPhone 4" ;; + iPhone4,1): "iPhone 4S" ;; + iPhone5,[1-2]): "iPhone 5" ;; + iPhone5,[3-4]): "iPhone 5c" ;; + iPhone6,[1-2]): "iPhone 5s" ;; + iPhone7,2): "iPhone 6" ;; + iPhone7,1): "iPhone 6 Plus" ;; + iPhone8,1): "iPhone 6s" ;; + iPhone8,2): "iPhone 6s Plus" ;; + iPhone8,4): "iPhone SE" ;; + iPhone9,[13]): "iPhone 7" ;; + iPhone9,[24]): "iPhone 7 Plus" ;; + iPhone10,[14]): "iPhone 8" ;; + iPhone10,[25]): "iPhone 8 Plus" ;; + iPhone10,[36]): "iPhone X" ;; + iPhone11,2): "iPhone XS" ;; + iPhone11,[46]): "iPhone XS Max" ;; + iPhone11,8): "iPhone XR" ;; + iPhone12,1): "iPhone 11" ;; + iPhone12,3): "iPhone 11 Pro" ;; + iPhone12,5): "iPhone 11 Pro Max" ;; + iPhone12,8): "iPhone SE 2020" ;; + iPhone13,1): "iPhone 12 Mini" ;; + iPhone13,2): "iPhone 12" ;; + iPhone13,3): "iPhone 12 Pro" ;; + iPhone13,4): "iPhone 12 Pro Max" ;; + + iPod1,1): "iPod touch" ;; + ipod2,1): "iPod touch 2G" ;; + ipod3,1): "iPod touch 3G" ;; + ipod4,1): "iPod touch 4G" ;; + ipod5,1): "iPod touch 5G" ;; + ipod7,1): "iPod touch 6G" ;; + iPod9,1): "iPod touch 7G" ;; + esac + + model=$_ + ;; + + BSD|MINIX) + model=$(sysctl -n hw.vendor hw.product) + ;; + + Windows) + model=$(wmic computersystem get manufacturer,model) + model=${model/Manufacturer} + model=${model/Model} + ;; + + Solaris) + model=$(prtconf -b | awk -F':' '/banner-name/ {printf $2}') + ;; + + AIX) + model=$(/usr/bin/uname -M) + ;; + + FreeMiNT) + model=$(sysctl -n hw.model) + model=${model/ (_MCH *)} + ;; + esac + + # Remove dummy OEM info. + model=${model//To be filled by O.E.M.} + model=${model//To Be Filled*} + model=${model//OEM*} + model=${model//Not Applicable} + model=${model//System Product Name} + model=${model//System Version} + model=${model//Undefined} + model=${model//Default string} + model=${model//Not Specified} + model=${model//Type1ProductConfigId} + model=${model//INVALID} + model=${model//All Series} + model=${model//�} + + case $model in + "Standard PC"*) model="KVM/QEMU (${model})" ;; + OpenBSD*) model="vmm ($model)" ;; + esac +} + +get_title() { + user=${USER:-$(id -un || printf %s "${HOME/*\/}")} + + case $title_fqdn in + on) hostname=$(hostname -f) ;; + *) hostname=${HOSTNAME:-$(hostname)} ;; + esac + + title=${title_color}${bold}${user}${at_color}@${title_color}${bold}${hostname} + length=$((${#user} + ${#hostname} + 1)) +} + +get_kernel() { + # Since these OS are integrated systems, it's better to skip this function altogether + [[ $os =~ (AIX|IRIX) ]] && return + + # Haiku uses 'uname -v' and not - 'uname -r'. + [[ $os == Haiku ]] && { + kernel=$(uname -v) + return + } + + # In Windows 'uname' may return the info of GNUenv thus use wmic for OS kernel. + [[ $os == Windows ]] && { + kernel=$(wmic os get Version) + kernel=${kernel/Version} + return + } + + case $kernel_shorthand in + on) kernel=$kernel_version ;; + off) kernel="$kernel_name $kernel_version" ;; + esac + + # Hide kernel info if it's identical to the distro info. + [[ $os =~ (BSD|MINIX) && $distro == *"$kernel_name"* ]] && + case $distro_shorthand in + on|tiny) kernel=$kernel_version ;; + *) unset kernel ;; + esac +} + +get_uptime() { + # Get uptime in seconds. + case $os in + Linux|Windows|MINIX) + if [[ -r /proc/uptime ]]; then + s=$(< /proc/uptime) + s=${s/.*} + else + boot=$(date -d"$(uptime -s)" +%s) + now=$(date +%s) + s=$((now - boot)) + fi + ;; + + "Mac OS X"|"macOS"|"iPhone OS"|BSD|FreeMiNT) + boot=$(sysctl -n kern.boottime) + boot=${boot/\{ sec = } + boot=${boot/,*} + + # Get current date in seconds. + now=$(date +%s) + s=$((now - boot)) + ;; + + Solaris) + s=$(kstat -p unix:0:system_misc:snaptime | awk '{print $2}') + s=${s/.*} + ;; + + AIX|IRIX) + t=$(LC_ALL=POSIX ps -o etime= -p 1) + + [[ $t == *-* ]] && { d=${t%%-*}; t=${t#*-}; } + [[ $t == *:*:* ]] && { h=${t%%:*}; t=${t#*:}; } + + h=${h#0} + t=${t#0} + + s=$((${d:-0}*86400 + ${h:-0}*3600 + ${t%%:*}*60 + ${t#*:})) + ;; + + Haiku) + s=$(($(system_time) / 1000000)) + ;; + esac + + d="$((s / 60 / 60 / 24)) days" + h="$((s / 60 / 60 % 24)) hours" + m="$((s / 60 % 60)) minutes" + + # Remove plural if < 2. + ((${d/ *} == 1)) && d=${d/s} + ((${h/ *} == 1)) && h=${h/s} + ((${m/ *} == 1)) && m=${m/s} + + # Hide empty fields. + ((${d/ *} == 0)) && unset d + ((${h/ *} == 0)) && unset h + ((${m/ *} == 0)) && unset m + + uptime=${d:+$d, }${h:+$h, }$m + uptime=${uptime%', '} + uptime=${uptime:-$s seconds} + + # Make the output of uptime smaller. + case $uptime_shorthand in + on) + uptime=${uptime/ minutes/ mins} + uptime=${uptime/ minute/ min} + uptime=${uptime/ seconds/ secs} + ;; + + tiny) + uptime=${uptime/ days/d} + uptime=${uptime/ day/d} + uptime=${uptime/ hours/h} + uptime=${uptime/ hour/h} + uptime=${uptime/ minutes/m} + uptime=${uptime/ minute/m} + uptime=${uptime/ seconds/s} + uptime=${uptime//,} + ;; + esac +} + +get_packages() { + # to adjust the number of pkgs per pkg manager + pkgs_h=0 + + # has: Check if package manager installed. + # dir: Count files or dirs in a glob. + # pac: If packages > 0, log package manager name. + # tot: Count lines in command output. + has() { type -p "$1" >/dev/null && manager=$1; } + # globbing is intentional here + # shellcheck disable=SC2206 + dir() { pkgs=($@); ((packages+=${#pkgs[@]})); pac "$((${#pkgs[@]}-pkgs_h))"; } + pac() { (($1 > 0)) && { managers+=("$1 (${manager})"); manager_string+="${manager}, "; }; } + tot() { + IFS=$'\n' read -d "" -ra pkgs <<< "$("$@")"; + ((packages+=${#pkgs[@]})); + pac "$((${#pkgs[@]}-pkgs_h))"; + } + + # Redefine tot() and dir() for Bedrock Linux. + [[ -f /bedrock/etc/bedrock-release && $PATH == */bedrock/cross/* ]] && { + br_strata=$(brl list) + tot() { + IFS=$'\n' read -d "" -ra pkgs <<< "$(for s in ${br_strata}; do strat -r "$s" "$@"; done)" + ((packages+="${#pkgs[@]}")) + pac "$((${#pkgs[@]}-pkgs_h))"; + } + dir() { + local pkgs=() + # globbing is intentional here + # shellcheck disable=SC2206 + for s in ${br_strata}; do pkgs+=(/bedrock/strata/$s/$@); done + ((packages+=${#pkgs[@]})) + pac "$((${#pkgs[@]}-pkgs_h))" + } + } + + case $os in + Linux|BSD|"iPhone OS"|Solaris) + # Package Manager Programs. + has kiss && tot kiss l + has cpt-list && tot cpt-list + has pacman-key && tot pacman -Qq --color never + has bottle-key && tot bottle -Qq --color never + has dpkg && tot dpkg-query -f '.\n' -W + has xbps-query && tot xbps-query -l + has apk && tot apk info + has opkg && tot opkg list-installed + has pacman-g2 && tot pacman-g2 -Q + has lvu && tot lvu installed + has tce-status && tot tce-status -i + has pkg_info && tot pkg_info + has pkgin && tot pkgin list + has tazpkg && pkgs_h=6 tot tazpkg list && ((packages-=6)) + has sorcery && tot gaze installed + has alps && tot alps showinstalled + has butch && tot butch list + has swupd && tot swupd bundle-list --quiet + has pisi && tot pisi li + + # Using the dnf package cache is much faster than rpm. + if has dnf && type -p sqlite3 >/dev/null && [[ -f /var/cache/dnf/packages.db ]]; then + pac "$(sqlite3 /var/cache/dnf/packages.db "SELECT count(pkg) FROM installed")" + else + has rpm && tot rpm -qa + fi + + # 'mine' conflicts with minesweeper games. + [[ -f /etc/SDE-VERSION ]] && + has mine && tot mine -q + + # Counting files/dirs. + # Variables need to be unquoted here. Only Bedrock Linux is affected. + # $br_prefix is fixed and won't change based on user input so this is safe either way. + # shellcheck disable=SC2086 + { + shopt -s nullglob + has brew && dir "$(brew --cellar)/* $(brew --caskroom)/*" + has emerge && dir "/var/db/pkg/*/*" + has Compile && dir "/Programs/*/" + has eopkg && dir "/var/lib/eopkg/package/*" + has crew && dir "${CREW_PREFIX:-/usr/local}/etc/crew/meta/*.filelist" + has pkgtool && dir "/var/log/packages/*" + has scratch && dir "/var/lib/scratchpkg/index/*/.pkginfo" + has kagami && dir "/var/lib/kagami/pkgs/*" + has cave && dir "/var/db/paludis/repositories/cross-installed/*/data/*/ \ + /var/db/paludis/repositories/installed/data/*/" + shopt -u nullglob + } + + # Other (Needs complex command) + has kpm-pkg && ((packages+=$(kpm --get-selections | grep -cv deinstall$))) + + has guix && { + manager=guix-system && tot guix package -p "/run/current-system/profile" -I + manager=guix-user && tot guix package -I + } + + has nix-store && { + nix-user-pkgs() { + nix-store -qR ~/.nix-profile + nix-store -qR /etc/profiles/per-user/"$USER" + } + manager=nix-system && tot nix-store -qR /run/current-system/sw + manager=nix-user && tot nix-user-pkgs + manager=nix-default && tot nix-store -qR /nix/var/nix/profiles/default + } + + # pkginfo is also the name of a python package manager which is painfully slow. + # TODO: Fix this somehow. + has pkginfo && tot pkginfo -i + + case $os-$kernel_name in + BSD-FreeBSD|BSD-DragonFly) + has pkg && tot pkg info + ;; + + BSD-*) + has pkg && dir /var/db/pkg/* + + ((packages == 0)) && + has pkg && tot pkg list + ;; + esac + + # List these last as they accompany regular package managers. + has flatpak && tot flatpak list + has spm && tot spm list -i + has puyo && dir ~/.puyo/installed + + # Snap hangs if the command is run without the daemon running. + # Only run snap if the daemon is also running. + has snap && ps -e | grep -qFm 1 snapd >/dev/null && \ + pkgs_h=1 tot snap list && ((packages-=1)) + + # This is the only standard location for appimages. + # See: https://github.com/AppImage/AppImageKit/wiki + manager=appimage && has appimaged && dir ~/.local/bin/*.appimage + ;; + + "Mac OS X"|"macOS"|MINIX) + has port && pkgs_h=1 tot port installed && ((packages-=1)) + has brew && dir "$(brew --cellar)/* $(brew --caskroom)/*" + has pkgin && tot pkgin list + has dpkg && tot dpkg-query -f '.\n' -W + + has nix-store && { + nix-user-pkgs() { + nix-store -qR ~/.nix-profile + nix-store -qR /etc/profiles/per-user/"$USER" + } + manager=nix-system && tot nix-store -qR /run/current-system/sw + manager=nix-user && tot nix-user-pkgs + } + ;; + + AIX|FreeMiNT) + has lslpp && ((packages+=$(lslpp -J -l -q | grep -cv '^#'))) + has rpm && tot rpm -qa + ;; + + Windows) + case $kernel_name in + CYGWIN*) has cygcheck && tot cygcheck -cd ;; + MSYS*) has pacman && tot pacman -Qq --color never ;; + MSYS*) has bottle && tot bottle -Qq --color never ;; + esac + + # Scoop environment throws errors if `tot scoop list` is used + has scoop && pkgs_h=1 dir ~/scoop/apps/* && ((packages-=1)) + + # Count chocolatey packages. + [[ -d /cygdrive/c/ProgramData/chocolatey/lib ]] && \ + dir /cygdrive/c/ProgramData/chocolatey/lib/* + ;; + + Haiku) + has pkgman && dir /boot/system/package-links/* + packages=${packages/pkgman/depot} + ;; + + IRIX) + manager=swpkg + pkgs_h=3 tot versions -b && ((packages-=3)) + ;; + esac + + if ((packages == 0)); then + unset packages + + elif [[ $package_managers == on ]]; then + printf -v packages '%s, ' "${managers[@]}" + packages=${packages%,*} + + elif [[ $package_managers == tiny ]]; then + packages+=" (${manager_string%,*})" + fi + + packages=${packages/pacman-key/pacman} +} + +get_shell() { + case $shell_path in + on) shell="$SHELL " ;; + off) shell="${SHELL##*/} " ;; + esac + + [[ $shell_version != on ]] && return + + case ${shell_name:=${SHELL##*/}} in + bash) + [[ $BASH_VERSION ]] || + BASH_VERSION=$("$SHELL" -c "printf %s \"\$BASH_VERSION\"") + + shell+=${BASH_VERSION/-*} + ;; + + sh|ash|dash|es) ;; + + *ksh) + shell+=$("$SHELL" -c "printf %s \"\$KSH_VERSION\"") + shell=${shell/ * KSH} + shell=${shell/version} + ;; + + osh) + if [[ $OIL_VERSION ]]; then + shell+=$OIL_VERSION + else + shell+=$("$SHELL" -c "printf %s \"\$OIL_VERSION\"") + fi + ;; + + tcsh) + shell+=$("$SHELL" -c "printf %s \$tcsh") + ;; + + yash) + shell+=$("$SHELL" --version 2>&1) + shell=${shell/ $shell_name} + shell=${shell/ Yet another shell} + shell=${shell/Copyright*} + ;; + + nu) + shell+=$("$SHELL" -c "version | get version") + shell=${shell/ $shell_name} + ;; + + + *) + shell+=$("$SHELL" --version 2>&1) + shell=${shell/ $shell_name} + ;; + esac + + # Remove unwanted info. + shell=${shell/, version} + shell=${shell/xonsh\//xonsh } + shell=${shell/options*} + shell=${shell/\(*\)} +} + +get_de() { + # If function was run, stop here. + ((de_run == 1)) && return + + case $os in + "Mac OS X"|"macOS") de=Aqua ;; + + Windows) + case $distro in + *"Windows 10"*) + de=Fluent + ;; + + *"Windows 8"*) + de=Metro + ;; + + *) + de=Aero + ;; + esac + ;; + + FreeMiNT) + freemint_wm=(/proc/*) + + case ${freemint_wm[*]} in + *thing*) de=Thing ;; + *jinnee*) de=Jinnee ;; + *tera*) de=Teradesk ;; + *neod*) de=NeoDesk ;; + *zdesk*) de=zDesk ;; + *mdesk*) de=mDesk ;; + esac + ;; + + *) + ((wm_run != 1)) && get_wm + + # Temporary support for Regolith Linux + if [[ $DESKTOP_SESSION == *regolith ]]; then + de=Regolith + + elif [[ $XDG_CURRENT_DESKTOP ]]; then + de=${XDG_CURRENT_DESKTOP/X\-} + de=${de/Budgie:GNOME/Budgie} + de=${de/:Unity7:ubuntu} + + elif [[ $DESKTOP_SESSION ]]; then + de=${DESKTOP_SESSION##*/} + + elif [[ $GNOME_DESKTOP_SESSION_ID ]]; then + de=GNOME + + elif [[ $MATE_DESKTOP_SESSION_ID ]]; then + de=MATE + + elif [[ $TDE_FULL_SESSION ]]; then + de=Trinity + fi + + # When a window manager is started from a display manager + # the desktop variables are sometimes also set to the + # window manager name. This checks to see if WM == DE + # and discards the DE value. + [[ $de == "$wm" ]] && { unset -v de; return; } + ;; + esac + + # Fallback to using xprop. + [[ $DISPLAY && -z $de ]] && type -p xprop &>/dev/null && \ + de=$(xprop -root | awk '/KDE_SESSION_VERSION|^_MUFFIN|xfce4|xfce5/') + + # Format strings. + case $de in + KDE_SESSION_VERSION*) de=KDE${de/* = } ;; + *xfce4*) de=Xfce4 ;; + *xfce5*) de=Xfce5 ;; + *xfce*) de=Xfce ;; + *mate*) de=MATE ;; + *GNOME*) de=GNOME ;; + *MUFFIN*) de=Cinnamon ;; + esac + + ((${KDE_SESSION_VERSION:-0} >= 4)) && de=${de/KDE/Plasma} + + if [[ $de_version == on && $de ]]; then + case $de in + Plasma*) de_ver=$(plasmashell --version) ;; + MATE*) de_ver=$(mate-session --version) ;; + Xfce*) de_ver=$(xfce4-session --version) ;; + GNOME*) de_ver=$(gnome-shell --version) ;; + Cinnamon*) de_ver=$(cinnamon --version) ;; + Deepin*) de_ver=$(awk -F'=' '/MajorVersion/ {print $2}' /etc/os-version) ;; + Budgie*) de_ver=$(budgie-desktop --version) ;; + LXQt*) de_ver=$(lxqt-session --version) ;; + Lumina*) de_ver=$(lumina-desktop --version 2>&1) ;; + Trinity*) de_ver=$(tde-config --version) ;; + Unity*) de_ver=$(unity --version) ;; + esac + + de_ver=${de_ver/*TDE:} + de_ver=${de_ver/tde-config*} + de_ver=${de_ver/liblxqt*} + de_ver=${de_ver/Copyright*} + de_ver=${de_ver/)*} + de_ver=${de_ver/* } + de_ver=${de_ver//\"} + + de+=" $de_ver" + fi + + # TODO: + # - New config option + flag: --de_display_server on/off ? + # - Add display of X11, Arcan and anything else relevant. + [[ $de && $WAYLAND_DISPLAY ]] && + de+=" (Wayland)" + + de_run=1 +} + +get_wm() { + # If function was run, stop here. + ((wm_run == 1)) && return + + case $kernel_name in + *OpenBSD*) ps_flags=(x -c) ;; + *) ps_flags=(-e) ;; + esac + + if [[ -O "${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY:-wayland-0}" ]]; then + if tmp_pid="$(lsof -t "${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY:-wayland-0}" 2>&1)" || + tmp_pid="$(fuser "${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY:-wayland-0}" 2>&1)"; then + wm="$(ps -p "${tmp_pid}" -ho comm=)" + else + # lsof may not exist, or may need root on some systems. Similarly fuser. + # On those systems we search for a list of known window managers, this can mistakenly + # match processes for another user or session and will miss unlisted window managers. + wm=$(ps "${ps_flags[@]}" | grep -m 1 -o -F \ + -e arcan \ + -e asc \ + -e clayland \ + -e dwc \ + -e fireplace \ + -e gnome-shell \ + -e greenfield \ + -e grefsen \ + -e hikari \ + -e kwin \ + -e lipstick \ + -e maynard \ + -e mazecompositor \ + -e motorcar \ + -e orbital \ + -e orbment \ + -e perceptia \ + -e river \ + -e rustland \ + -e sway \ + -e ulubis \ + -e velox \ + -e wavy \ + -e way-cooler \ + -e wayfire \ + -e wayhouse \ + -e westeros \ + -e westford \ + -e weston) + fi + + elif [[ $DISPLAY && $os != "Mac OS X" && $os != "macOS" && $os != FreeMiNT ]]; then + # non-EWMH WMs. + wm=$(ps "${ps_flags[@]}" | grep -m 1 -o \ + -e "[s]owm" \ + -e "[c]atwm" \ + -e "[f]vwm" \ + -e "[d]wm" \ + -e "[2]bwm" \ + -e "[m]onsterwm" \ + -e "[t]inywm" \ + -e "[x]11fs" \ + -e "[x]monad") + + [[ -z $wm ]] && type -p xprop &>/dev/null && { + id=$(xprop -root -notype _NET_SUPPORTING_WM_CHECK) + id=${id##* } + wm=$(xprop -id "$id" -notype -len 100 -f _NET_WM_NAME 8t) + wm=${wm/*WM_NAME = } + wm=${wm/\"} + wm=${wm/\"*} + } + + else + case $os in + "Mac OS X"|"macOS") + ps_line=$(ps -e | grep -o \ + -e "[S]pectacle" \ + -e "[A]methyst" \ + -e "[k]wm" \ + -e "[c]hun[k]wm" \ + -e "[y]abai" \ + -e "[R]ectangle") + + case $ps_line in + *chunkwm*) wm=chunkwm ;; + *kwm*) wm=Kwm ;; + *yabai*) wm=yabai ;; + *Amethyst*) wm=Amethyst ;; + *Spectacle*) wm=Spectacle ;; + *Rectangle*) wm=Rectangle ;; + *) wm="Quartz Compositor" ;; + esac + ;; + + Windows) + wm=$( + tasklist | + + grep -Fom 1 \ + -e bugn \ + -e Windawesome \ + -e blackbox \ + -e emerge \ + -e litestep + ) + + [[ $wm == blackbox ]] && + wm="bbLean (Blackbox)" + + wm=${wm:+$wm, }DWM.exe + ;; + + FreeMiNT) + freemint_wm=(/proc/*) + + case ${freemint_wm[*]} in + *xaaes* | *xaloader*) wm=XaAES ;; + *myaes*) wm=MyAES ;; + *naes*) wm=N.AES ;; + geneva) wm=Geneva ;; + *) wm="Atari AES" ;; + esac + ;; + esac + fi + + # Rename window managers to their proper values. + [[ $wm == *WINDOWMAKER* ]] && wm=wmaker + [[ $wm == *GNOME*Shell* ]] && wm=Mutter + + wm_run=1 +} + +get_wm_theme() { + ((wm_run != 1)) && get_wm + ((de_run != 1)) && get_de + + case $wm in + E16) + wm_theme=$(awk -F "= " '/theme.name/ {print $2}' "${HOME}/.e16/e_config--0.0.cfg") + ;; + + Sawfish) + wm_theme=$(awk -F '\\(quote|\\)' '/default-frame-style/ {print $(NF-4)}' \ + "$HOME/.sawfish/custom") + ;; + + Cinnamon|Muffin|"Mutter (Muffin)") + detheme=$(gsettings get org.cinnamon.theme name) + wm_theme=$(gsettings get org.cinnamon.desktop.wm.preferences theme) + wm_theme="$detheme ($wm_theme)" + ;; + + Compiz|Mutter|Gala) + if type -p gsettings >/dev/null; then + wm_theme=$(gsettings get org.gnome.shell.extensions.user-theme name) + + [[ ${wm_theme//\'} ]] || \ + wm_theme=$(gsettings get org.gnome.desktop.wm.preferences theme) + + elif type -p gconftool-2 >/dev/null; then + wm_theme=$(gconftool-2 -g /apps/metacity/general/theme) + fi + ;; + + Metacity*) + if [[ $de == Deepin ]]; then + wm_theme=$(gsettings get com.deepin.wrap.gnome.desktop.wm.preferences theme) + + elif [[ $de == MATE ]]; then + wm_theme=$(gsettings get org.mate.Marco.general theme) + + else + wm_theme=$(gconftool-2 -g /apps/metacity/general/theme) + fi + ;; + + E17|Enlightenment) + if type -p eet >/dev/null; then + wm_theme=$(eet -d "$HOME/.e/e/config/standard/e.cfg" config |\ + awk '/value \"file\" string.*.edj/ {print $4}') + wm_theme=${wm_theme##*/} + wm_theme=${wm_theme%.*} + fi + ;; + + Fluxbox) + [[ -f $HOME/.fluxbox/init ]] && + wm_theme=$(awk -F "/" '/styleFile/ {print $NF}' "$HOME/.fluxbox/init") + ;; + + IceWM*) + [[ -f $HOME/.icewm/theme ]] && + wm_theme=$(awk -F "[\",/]" '!/#/ {print $2}' "$HOME/.icewm/theme") + ;; + + Openbox) + case $de in + LXDE*) ob_file=lxde-rc ;; + LXQt*) ob_file=lxqt-rc ;; + *) ob_file=rc ;; + esac + + ob_file=$XDG_CONFIG_HOME/openbox/$ob_file.xml + + [[ -f $ob_file ]] && + wm_theme=$(awk '// {while (getline n) {if (match(n, //)) + {l=n; exit}}} END {split(l, a, "[<>]"); print a[3]}' "$ob_file") + ;; + + PekWM) + [[ -f $HOME/.pekwm/config ]] && + wm_theme=$(awk -F "/" '/Theme/{gsub(/\"/,""); print $NF}' "$HOME/.pekwm/config") + ;; + + Xfwm4) + [[ -f $HOME/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml ]] && + wm_theme=$(xfconf-query -c xfwm4 -p /general/theme) + ;; + + KWin*) + kde_config_dir + kwinrc=$kde_config_dir/kwinrc + kdebugrc=$kde_config_dir/kdebugrc + + if [[ -f $kwinrc ]]; then + wm_theme=$(awk '/theme=/ { + gsub(/theme=.*qml_|theme=.*svg__/,"",$0); + print $0; + exit + }' "$kwinrc") + + [[ "$wm_theme" ]] || + wm_theme=$(awk '/library=org.kde/ { + gsub(/library=org.kde./,"",$0); + print $0; + exit + }' "$kwinrc") + + [[ $wm_theme ]] || + wm_theme=$(awk '/PluginLib=kwin3_/ { + gsub(/PluginLib=kwin3_/,"",$0); + print $0; + exit + }' "$kwinrc") + + elif [[ -f $kdebugrc ]]; then + wm_theme=$(awk '/(decoration)/ {gsub(/\[/,"",$1); print $1; exit}' "$kdebugrc") + fi + + wm_theme=${wm_theme/theme=} + ;; + + "Quartz Compositor") + global_preferences=$HOME/Library/Preferences/.GlobalPreferences.plist + wm_theme=$(PlistBuddy -c "Print AppleInterfaceStyle" "$global_preferences") + wm_theme_color=$(PlistBuddy -c "Print AppleAccentColor" "$global_preferences") + + [[ "$wm_theme" ]] || + wm_theme=Light + + case $wm_theme_color in + -1) wm_theme_color=Graphite ;; + 0) wm_theme_color=Red ;; + 1) wm_theme_color=Orange ;; + 2) wm_theme_color=Yellow ;; + 3) wm_theme_color=Green ;; + 5) wm_theme_color=Purple ;; + 6) wm_theme_color=Pink ;; + *) wm_theme_color=Blue ;; + esac + + wm_theme="$wm_theme_color ($wm_theme)" + ;; + + *Explorer) + path=/proc/registry/HKEY_CURRENT_USER/Software/Microsoft + path+=/Windows/CurrentVersion/Themes/CurrentTheme + + wm_theme=$(head -n1 "$path") + wm_theme=${wm_theme##*\\} + wm_theme=${wm_theme%.*} + ;; + + Blackbox|bbLean*) + path=$(wmic process get ExecutablePath | grep -F "blackbox") + path=${path//\\/\/} + + wm_theme=$(grep '^session\.styleFile:' "${path/\.exe/.rc}") + wm_theme=${wm_theme/session\.styleFile: } + wm_theme=${wm_theme##*\\} + wm_theme=${wm_theme%.*} + ;; + esac + + wm_theme=$(trim_quotes "$wm_theme") +} + +get_cpu() { + case $os in + "Linux" | "MINIX" | "Windows") + # Get CPU name. + cpu_file="/proc/cpuinfo" + + case $kernel_machine in + "frv" | "hppa" | "m68k" | "openrisc" | "or"* | "powerpc" | "ppc"* | "sparc"*) + cpu="$(awk -F':' '/^cpu\t|^CPU/ {printf $2; exit}' "$cpu_file")" + ;; + + "s390"*) + cpu="$(awk -F'=' '/machine/ {print $4; exit}' "$cpu_file")" + ;; + + "ia64" | "m32r") + cpu="$(awk -F':' '/model/ {print $2; exit}' "$cpu_file")" + [[ -z "$cpu" ]] && cpu="$(awk -F':' '/family/ {printf $2; exit}' "$cpu_file")" + ;; + + *) + cpu="$(awk -F '\\s*: | @' \ + '/model name|Hardware|Processor|^cpu model|chip type|^cpu type/ { + cpu=$2; if ($1 == "Hardware") exit } END { print cpu }' "$cpu_file")" + ;; + esac + + speed_dir="/sys/devices/system/cpu/cpu0/cpufreq" + + # Select the right temperature file. + for temp_dir in /sys/class/hwmon/*; do + [[ "$(< "${temp_dir}/name")" =~ (cpu_thermal|coretemp|fam15h_power|k10temp) ]] && { + temp_dirs=("$temp_dir"/temp*_input) + temp_dir=${temp_dirs[0]} + break + } + done + + # Get CPU speed. + if [[ -d "$speed_dir" ]]; then + # Fallback to bios_limit if $speed_type fails. + speed="$(< "${speed_dir}/${speed_type}")" ||\ + speed="$(< "${speed_dir}/bios_limit")" ||\ + speed="$(< "${speed_dir}/scaling_max_freq")" ||\ + speed="$(< "${speed_dir}/cpuinfo_max_freq")" + speed="$((speed / 1000))" + + else + case $kernel_machine in + "sparc"*) + # SPARC systems use a different file to expose clock speed information. + speed_file="/sys/devices/system/cpu/cpu0/clock_tick" + speed="$(($(< "$speed_file") / 1000000))" + ;; + + *) + speed="$(awk -F ': |\\.' '/cpu MHz|^clock/ {printf $2; exit}' "$cpu_file")" + speed="${speed/MHz}" + ;; + esac + fi + + # Get CPU temp. + [[ -f "$temp_dir" ]] && deg="$(($(< "$temp_dir") * 100 / 10000))" + + # Get CPU cores. + case $kernel_machine in + "sparc"*) + case $cpu_cores in + # SPARC systems doesn't expose detailed topology information in + # /proc/cpuinfo so I have to use lscpu here. + "logical" | "on") + cores="$(lscpu | awk -F ': *' '/^CPU\(s\)/ {print $2}')" + ;; + "physical") + cores="$(lscpu | awk -F ': *' '/^Core\(s\) per socket/ {print $2}')" + sockets="$(lscpu | awk -F ': *' '/^Socket\(s\)/ {print $2}')" + cores="$((sockets * cores))" + ;; + esac + ;; + + *) + case $cpu_cores in + "logical" | "on") + cores="$(grep -c "^processor" "$cpu_file")" + ;; + "physical") + cores="$(awk '/^core id/&&!a[$0]++{++i} END {print i}' "$cpu_file")" + ;; + esac + ;; + esac + ;; + + "Mac OS X"|"macOS") + cpu="$(sysctl -n machdep.cpu.brand_string)" + + # Get CPU cores. + case $cpu_cores in + "logical" | "on") cores="$(sysctl -n hw.logicalcpu_max)" ;; + "physical") cores="$(sysctl -n hw.physicalcpu_max)" ;; + esac + ;; + + "iPhone OS") + case $kernel_machine in + "iPhone1,"[1-2] | "iPod1,1"): "Samsung S5L8900 (1) @ 412MHz" ;; + "iPhone2,1"): "Samsung S5PC100 (1) @ 600MHz" ;; + "iPhone3,"[1-3] | "iPod4,1"): "Apple A4 (1) @ 800MHz" ;; + "iPhone4,1" | "iPod5,1"): "Apple A5 (2) @ 800MHz" ;; + "iPhone5,"[1-4]): "Apple A6 (2) @ 1.3GHz" ;; + "iPhone6,"[1-2]): "Apple A7 (2) @ 1.3GHz" ;; + "iPhone7,"[1-2]): "Apple A8 (2) @ 1.4GHz" ;; + "iPhone8,"[1-4] | "iPad6,1"[12]): "Apple A9 (2) @ 1.85GHz" ;; + "iPhone9,"[1-4] | "iPad7,"[5-6] | "iPad7,1"[1-2]): + "Apple A10 Fusion (4) @ 2.34GHz" + ;; + "iPhone10,"[1-6]): "Apple A11 Bionic (6) @ 2.39GHz" ;; + "iPhone11,"[2468] | "iPad11,"[1-4] | "iPad11,"[6-7]): "Apple A12 Bionic (6) @ 2.49GHz" ;; + "iPhone12,"[1358]): "Apple A13 Bionic (6) @ 2.65GHz" ;; + "iPhone13,"[1-4] | "iPad13,"[1-2]): "Apple A14 Bionic (6) @ 3.00Ghz" ;; + + "iPod2,1"): "Samsung S5L8720 (1) @ 533MHz" ;; + "iPod3,1"): "Samsung S5L8922 (1) @ 600MHz" ;; + "iPod7,1"): "Apple A8 (2) @ 1.1GHz" ;; + "iPad1,1"): "Apple A4 (1) @ 1GHz" ;; + "iPad2,"[1-7]): "Apple A5 (2) @ 1GHz" ;; + "iPad3,"[1-3]): "Apple A5X (2) @ 1GHz" ;; + "iPad3,"[4-6]): "Apple A6X (2) @ 1.4GHz" ;; + "iPad4,"[1-3]): "Apple A7 (2) @ 1.4GHz" ;; + "iPad4,"[4-9]): "Apple A7 (2) @ 1.4GHz" ;; + "iPad5,"[1-2]): "Apple A8 (2) @ 1.5GHz" ;; + "iPad5,"[3-4]): "Apple A8X (3) @ 1.5GHz" ;; + "iPad6,"[3-4]): "Apple A9X (2) @ 2.16GHz" ;; + "iPad6,"[7-8]): "Apple A9X (2) @ 2.26GHz" ;; + "iPad7,"[1-4]): "Apple A10X Fusion (6) @ 2.39GHz" ;; + "iPad8,"[1-8]): "Apple A12X Bionic (8) @ 2.49GHz" ;; + "iPad8,9" | "iPad8,1"[0-2]): "Apple A12Z Bionic (8) @ 2.49GHz" ;; + esac + cpu="$_" + ;; + + "BSD") + # Get CPU name. + cpu="$(sysctl -n hw.model)" + cpu="${cpu/[0-9]\.*}" + cpu="${cpu/ @*}" + + # Get CPU speed. + speed="$(sysctl -n hw.cpuspeed)" + [[ -z "$speed" ]] && speed="$(sysctl -n hw.clockrate)" + + # Get CPU cores. + case $kernel_name in + "OpenBSD"*) + [[ "$(sysctl -n hw.smt)" == "1" ]] && smt="on" || smt="off" + ncpufound="$(sysctl -n hw.ncpufound)" + ncpuonline="$(sysctl -n hw.ncpuonline)" + cores="${ncpuonline}/${ncpufound},\\xc2\\xa0SMT\\xc2\\xa0${smt}" + ;; + *) + cores="$(sysctl -n hw.ncpu)" + ;; + esac + + # Get CPU temp. + case $kernel_name in + "FreeBSD"* | "DragonFly"* | "NetBSD"*) + deg="$(sysctl -n dev.cpu.0.temperature)" + deg="${deg/C}" + ;; + "OpenBSD"* | "Bitrig"*) + deg="$(sysctl hw.sensors | \ + awk -F'=|degC' '/(ksmn|adt|lm|cpu)0.temp0/ {printf("%2.1f", $2); exit}')" + ;; + esac + ;; + + "Solaris") + # Get CPU name. + cpu="$(psrinfo -pv)" + cpu="${cpu//*$'\n'}" + cpu="${cpu/[0-9]\.*}" + cpu="${cpu/ @*}" + cpu="${cpu/\(portid*}" + + # Get CPU speed. + speed="$(psrinfo -v | awk '/operates at/ {print $6; exit}')" + + # Get CPU cores. + case $cpu_cores in + "logical" | "on") cores="$(kstat -m cpu_info | grep -c -F "chip_id")" ;; + "physical") cores="$(psrinfo -p)" ;; + esac + ;; + + "Haiku") + # Get CPU name. + cpu="$(sysinfo -cpu | awk -F '\\"' '/CPU #0/ {print $2}')" + cpu="${cpu/@*}" + + # Get CPU speed. + speed="$(sysinfo -cpu | awk '/running at/ {print $NF; exit}')" + speed="${speed/MHz}" + + # Get CPU cores. + cores="$(sysinfo -cpu | grep -c -F 'CPU #')" + ;; + + "AIX") + # Get CPU name. + cpu="$(lsattr -El proc0 -a type | awk '{printf $2}')" + + # Get CPU speed. + speed="$(prtconf -s | awk -F':' '{printf $2}')" + speed="${speed/MHz}" + + # Get CPU cores. + case $cpu_cores in + "logical" | "on") + cores="$(lparstat -i | awk -F':' '/Online Virtual CPUs/ {printf $2}')" + ;; + + "physical") + cores="$(lparstat -i | awk -F':' '/Active Physical CPUs/ {printf $2}')" + ;; + esac + ;; + + "IRIX") + # Get CPU name. + cpu="$(hinv -c processor | awk -F':' '/CPU:/ {printf $2}')" + + # Get CPU speed. + speed="$(hinv -c processor | awk '/MHZ/ {printf $2}')" + + # Get CPU cores. + cores="$(sysconf NPROC_ONLN)" + ;; + + "FreeMiNT") + cpu="$(awk -F':' '/CPU:/ {printf $2}' /kern/cpuinfo)" + speed="$(awk -F '[:.M]' '/Clocking:/ {printf $2}' /kern/cpuinfo)" + ;; + esac + + # Remove un-needed patterns from cpu output. + cpu="${cpu//(TM)}" + cpu="${cpu//(tm)}" + cpu="${cpu//(R)}" + cpu="${cpu//(r)}" + cpu="${cpu//CPU}" + cpu="${cpu//Processor}" + cpu="${cpu//Dual-Core}" + cpu="${cpu//Quad-Core}" + cpu="${cpu//Six-Core}" + cpu="${cpu//Eight-Core}" + cpu="${cpu//[1-9][0-9]-Core}" + cpu="${cpu//[0-9]-Core}" + cpu="${cpu//, * Compute Cores}" + cpu="${cpu//Core / }" + cpu="${cpu//(\"AuthenticAMD\"*)}" + cpu="${cpu//with Radeon * Graphics}" + cpu="${cpu//, altivec supported}" + cpu="${cpu//FPU*}" + cpu="${cpu//Chip Revision*}" + cpu="${cpu//Technologies, Inc}" + cpu="${cpu//Core2/Core 2}" + + # Trim spaces from core and speed output + cores="${cores//[[:space:]]}" + speed="${speed//[[:space:]]}" + + # Remove CPU brand from the output. + if [[ "$cpu_brand" == "off" ]]; then + cpu="${cpu/AMD }" + cpu="${cpu/Intel }" + cpu="${cpu/Core? Duo }" + cpu="${cpu/Qualcomm }" + fi + + # Add CPU cores to the output. + [[ "$cpu_cores" != "off" && "$cores" ]] && \ + case $os in + "Mac OS X"|"macOS") cpu="${cpu/@/(${cores}) @}" ;; + *) cpu="$cpu ($cores)" ;; + esac + + # Add CPU speed to the output. + if [[ "$cpu_speed" != "off" && "$speed" ]]; then + if (( speed < 1000 )); then + cpu="$cpu @ ${speed}MHz" + else + [[ "$speed_shorthand" == "on" ]] && speed="$((speed / 100))" + speed="${speed:0:1}.${speed:1}" + cpu="$cpu @ ${speed}GHz" + fi + fi + + # Add CPU temp to the output. + if [[ "$cpu_temp" != "off" && "$deg" ]]; then + deg="${deg//.}" + + # Convert to Fahrenheit if enabled + [[ "$cpu_temp" == "F" ]] && deg="$((deg * 90 / 50 + 320))" + + # Format the output + deg="[${deg/${deg: -1}}.${deg: -1}°${cpu_temp:-C}]" + cpu="$cpu $deg" + fi +} + +get_gpu() { + case $os in + "Linux") + # Read GPUs into array. + gpu_cmd="$(lspci -mm | + awk -F '\"|\" \"|\\(' \ + '/"Display|"3D|"VGA/ { + a[$0] = $1 " " $3 " " ($(NF-1) ~ /^$|^Device [[:xdigit:]]+$/ ? $4 : $(NF-1)) + } + END { for (i in a) { + if (!seen[a[i]]++) { + sub("^[^ ]+ ", "", a[i]); + print a[i] + } + }}')" + IFS=$'\n' read -d "" -ra gpus <<< "$gpu_cmd" + + # Remove duplicate Intel Graphics outputs. + # This fixes cases where the outputs are both + # Intel but not entirely identical. + # + # Checking the first two array elements should + # be safe since there won't be 2 intel outputs if + # there's a dedicated GPU in play. + [[ "${gpus[0]}" == *Intel* && "${gpus[1]}" == *Intel* ]] && unset -v "gpus[0]" + + for gpu in "${gpus[@]}"; do + # GPU shorthand tests. + [[ "$gpu_type" == "dedicated" && "$gpu" == *Intel* ]] || \ + [[ "$gpu_type" == "integrated" && ! "$gpu" == *Intel* ]] && \ + { unset -v gpu; continue; } + + case $gpu in + *"Advanced"*) + brand="${gpu/*AMD*ATI*/AMD ATI}" + brand="${brand:-${gpu/*AMD*/AMD}}" + brand="${brand:-${gpu/*ATI*/ATi}}" + + gpu="${gpu/\[AMD\/ATI\] }" + gpu="${gpu/\[AMD\] }" + gpu="${gpu/OEM }" + gpu="${gpu/Advanced Micro Devices, Inc.}" + gpu="${gpu/*\[}" + gpu="${gpu/\]*}" + gpu="$brand $gpu" + ;; + + *"NVIDIA"*) + gpu="${gpu/*\[}" + gpu="${gpu/\]*}" + gpu="NVIDIA $gpu" + ;; + + *"Intel"*) + gpu="${gpu/*Intel/Intel}" + gpu="${gpu/\(R\)}" + gpu="${gpu/Corporation}" + gpu="${gpu/ \(*}" + gpu="${gpu/Integrated Graphics Controller}" + gpu="${gpu/*Xeon*/Intel HD Graphics}" + + [[ -z "$(trim "$gpu")" ]] && gpu="Intel Integrated Graphics" + ;; + + *"MCST"*) + gpu="${gpu/*MCST*MGA2*/MCST MGA2}" + ;; + + *"VirtualBox"*) + gpu="VirtualBox Graphics Adapter" + ;; + + *) continue ;; + esac + + if [[ "$gpu_brand" == "off" ]]; then + gpu="${gpu/AMD }" + gpu="${gpu/NVIDIA }" + gpu="${gpu/Intel }" + fi + + prin "${subtitle:+${subtitle}${gpu_name}}" "$gpu" + done + + return + ;; + + "Mac OS X"|"macOS") + if [[ -f "${cache_dir}/neofetch/gpu" ]]; then + source "${cache_dir}/neofetch/gpu" + + else + gpu="$(system_profiler SPDisplaysDataType |\ + awk -F': ' '/^\ *Chipset Model:/ {printf $2 ", "}')" + gpu="${gpu//\/ \$}" + gpu="${gpu%,*}" + + cache "gpu" "$gpu" + fi + ;; + + "iPhone OS") + case $kernel_machine in + "iPhone1,"[1-2]): "PowerVR MBX Lite 3D" ;; + "iPhone2,1" | "iPhone3,"[1-3] | "iPod3,1" | "iPod4,1" | "iPad1,1"): + "PowerVR SGX535" + ;; + "iPhone4,1" | "iPad2,"[1-7] | "iPod5,1"): "PowerVR SGX543MP2" ;; + "iPhone5,"[1-4]): "PowerVR SGX543MP3" ;; + "iPhone6,"[1-2] | "iPad4,"[1-9]): "PowerVR G6430" ;; + "iPhone7,"[1-2] | "iPod7,1" | "iPad5,"[1-2]): "PowerVR GX6450" ;; + "iPhone8,"[1-4] | "iPad6,1"[12]): "PowerVR GT7600" ;; + "iPhone9,"[1-4] | "iPad7,"[5-6]): "PowerVR GT7600 Plus" ;; + "iPhone10,"[1-6]): "Apple Designed GPU (A11)" ;; + "iPhone11,"[2468] | "iPad11,"[67]): "Apple Designed GPU (A12)" ;; + "iPhone12,"[1358]): "Apple Designed GPU (A13)" ;; + "iPhone13,"[1234] | "iPad13,"[12]): "Apple Designed GPU (A14)" ;; + + "iPad3,"[1-3]): "PowerVR SGX534MP4" ;; + "iPad3,"[4-6]): "PowerVR SGX554MP4" ;; + "iPad5,"[3-4]): "PowerVR GXA6850" ;; + "iPad6,"[3-8]): "PowerVR 7XT" ;; + + "iPod1,1" | "iPod2,1") + : "PowerVR MBX Lite" + ;; + esac + gpu="$_" + ;; + + "Windows") + wmic path Win32_VideoController get caption | while read -r line; do + line=$(trim "$line") + + case $line in + *Caption*|'') + continue + ;; + + *) + prin "${subtitle:+${subtitle}${gpu_name}}" "$line" + ;; + esac + done + ;; + + "Haiku") + gpu="$(listdev | grep -A2 -F 'device Display controller' |\ + awk -F':' '/device beef/ {print $2}')" + ;; + + *) + case $kernel_name in + "FreeBSD"* | "DragonFly"*) + gpu="$(pciconf -lv | grep -B 4 -F "VGA" | grep -F "device")" + gpu="${gpu/*device*= }" + gpu="$(trim_quotes "$gpu")" + ;; + + *) + gpu="$(glxinfo -B | grep -F 'OpenGL renderer string')" + gpu="${gpu/OpenGL renderer string: }" + ;; + esac + ;; + esac + + if [[ "$gpu_brand" == "off" ]]; then + gpu="${gpu/AMD}" + gpu="${gpu/NVIDIA}" + gpu="${gpu/Intel}" + fi +} + +get_memory() { + case $os in + "Linux" | "Windows") + # MemUsed = Memtotal + Shmem - MemFree - Buffers - Cached - SReclaimable + # Source: https://github.com/KittyKatt/screenFetch/issues/386#issuecomment-249312716 + while IFS=":" read -r a b; do + case $a in + "MemTotal") ((mem_used+=${b/kB})); mem_total="${b/kB}" ;; + "Shmem") ((mem_used+=${b/kB})) ;; + "MemFree" | "Buffers" | "Cached" | "SReclaimable") + mem_used="$((mem_used-=${b/kB}))" + ;; + + # Available since Linux 3.14rc (34e431b0ae398fc54ea69ff85ec700722c9da773). + # If detected this will be used over the above calculation for mem_used. + "MemAvailable") + mem_avail=${b/kB} + ;; + esac + done < /proc/meminfo + + if [[ $mem_avail ]]; then + mem_used=$(((mem_total - mem_avail) / 1024)) + else + mem_used="$((mem_used / 1024))" + fi + + mem_total="$((mem_total / 1024))" + ;; + + "Mac OS X" | "macOS" | "iPhone OS") + hw_pagesize="$(sysctl -n hw.pagesize)" + mem_total="$(($(sysctl -n hw.memsize) / 1024 / 1024))" + pages_app="$(($(sysctl -n vm.page_pageable_internal_count) - $(sysctl -n vm.page_purgeable_count)))" + pages_wired="$(vm_stat | awk '/ wired/ { print $4 }')" + pages_compressed="$(vm_stat | awk '/ occupied/ { printf $5 }')" + pages_compressed="${pages_compressed:-0}" + mem_used="$(((${pages_app} + ${pages_wired//.} + ${pages_compressed//.}) * hw_pagesize / 1024 / 1024))" + ;; + + "BSD" | "MINIX") + # Mem total. + case $kernel_name in + "NetBSD"*) mem_total="$(($(sysctl -n hw.physmem64) / 1024 / 1024))" ;; + *) mem_total="$(($(sysctl -n hw.physmem) / 1024 / 1024))" ;; + esac + + # Mem free. + case $kernel_name in + "NetBSD"*) + mem_free="$(($(awk -F ':|kB' '/MemFree:/ {printf $2}' /proc/meminfo) / 1024))" + ;; + + "FreeBSD"* | "DragonFly"*) + hw_pagesize="$(sysctl -n hw.pagesize)" + mem_inactive="$(($(sysctl -n vm.stats.vm.v_inactive_count) * hw_pagesize))" + mem_unused="$(($(sysctl -n vm.stats.vm.v_free_count) * hw_pagesize))" + mem_cache="$(($(sysctl -n vm.stats.vm.v_cache_count) * hw_pagesize))" + mem_free="$(((mem_inactive + mem_unused + mem_cache) / 1024 / 1024))" + ;; + + "MINIX") + mem_free="$(top -d 1 | awk -F ',' '/^Memory:/ {print $2}')" + mem_free="${mem_free/M Free}" + ;; + + "OpenBSD"*) ;; + *) mem_free="$(($(vmstat | awk 'END {printf $5}') / 1024))" ;; + esac + + # Mem used. + case $kernel_name in + "OpenBSD"*) + mem_used="$(vmstat | awk 'END {printf $3}')" + mem_used="${mem_used/M}" + ;; + + *) mem_used="$((mem_total - mem_free))" ;; + esac + ;; + + "Solaris" | "AIX") + hw_pagesize="$(pagesize)" + case $os in + "Solaris") + pages_total="$(kstat -p unix:0:system_pages:pagestotal | awk '{print $2}')" + pages_free="$(kstat -p unix:0:system_pages:pagesfree | awk '{print $2}')" + ;; + + "AIX") + IFS=$'\n'"| " read -d "" -ra mem_stat <<< "$(svmon -G -O unit=page)" + pages_total="${mem_stat[11]}" + pages_free="${mem_stat[16]}" + ;; + esac + mem_total="$((pages_total * hw_pagesize / 1024 / 1024))" + mem_free="$((pages_free * hw_pagesize / 1024 / 1024))" + mem_used="$((mem_total - mem_free))" + ;; + + "Haiku") + mem_total="$(($(sysinfo -mem | awk -F '\\/ |)' '{print $2; exit}') / 1024 / 1024))" + mem_used="$(sysinfo -mem | awk -F '\\/|)' '{print $2; exit}')" + mem_used="$((${mem_used/max} / 1024 / 1024))" + ;; + + "IRIX") + IFS=$'\n' read -d "" -ra mem_cmd <<< "$(pmem)" + IFS=" " read -ra mem_stat <<< "${mem_cmd[0]}" + + mem_total="$((mem_stat[3] / 1024))" + mem_free="$((mem_stat[5] / 1024))" + mem_used="$((mem_total - mem_free))" + ;; + + "FreeMiNT") + mem="$(awk -F ':|kB' '/MemTotal:|MemFree:/ {printf $2, " "}' /kern/meminfo)" + mem_free="${mem/* }" + mem_total="${mem/$mem_free}" + mem_used="$((mem_total - mem_free))" + mem_total="$((mem_total / 1024))" + mem_used="$((mem_used / 1024))" + ;; + + esac + + [[ "$memory_percent" == "on" ]] && ((mem_perc=mem_used * 100 / mem_total)) + + case $memory_unit in + gib) + mem_used=$(awk '{printf "%.2f", $1 / $2}' <<< "$mem_used 1024") + mem_total=$(awk '{printf "%.2f", $1 / $2}' <<< "$mem_total 1024") + mem_label=GiB + ;; + + kib) + mem_used=$((mem_used * 1024)) + mem_total=$((mem_total * 1024)) + mem_label=KiB + ;; + esac + + memory="${mem_used}${mem_label:-MiB} / ${mem_total}${mem_label:-MiB} ${mem_perc:+(${mem_perc}%)}" + + # Bars. + case $memory_display in + "bar") memory="$(bar "${mem_used}" "${mem_total}")" ;; + "infobar") memory="${memory} $(bar "${mem_used}" "${mem_total}")" ;; + "barinfo") memory="$(bar "${mem_used}" "${mem_total}")${info_color} ${memory}" ;; + esac +} + +get_song() { + players=( + "amarok" + "audacious" + "banshee" + "bluemindo" + "clementine" + "cmus" + "deadbeef" + "deepin-music" + "dragon" + "elisa" + "exaile" + "gnome-music" + "gmusicbrowser" + "gogglesmm" + "guayadeque" + "io.elementary.music" + "iTunes" + "Music" + "juk" + "lollypop" + "MellowPlayer" + "mocp" + "mopidy" + "mpd" + "muine" + "netease-cloud-music" + "olivia" + "plasma-browser-integration" + "playerctl" + "pogo" + "pragha" + "qmmp" + "quodlibet" + "rhythmbox" + "sayonara" + "smplayer" + "spotify" + "Spotify" + "strawberry" + "tauonmb" + "tomahawk" + "vlc" + "xmms2d" + "xnoise" + "yarock" + ) + + printf -v players "|%s" "${players[@]}" + player="$(ps aux | awk -v pattern="(${players:1})" \ + '!/ awk / && !/iTunesHelper/ && match($0,pattern){print substr($0,RSTART,RLENGTH); exit}')" + + [[ "$music_player" && "$music_player" != "auto" ]] && player="$music_player" + + get_song_dbus() { + # Multiple players use an almost identical dbus command to get the information. + # This function saves us using the same command throughout the function. + song="$(\ + dbus-send --print-reply --dest=org.mpris.MediaPlayer2."${1}" /org/mpris/MediaPlayer2 \ + org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' \ + string:'Metadata' |\ + awk -F '"' 'BEGIN {RS=" entry"}; /"xesam:artist"/ {a = $4} /"xesam:album"/ {b = $4} + /"xesam:title"/ {t = $4} END {print a " \n" b " \n" t}' + )" + } + + case ${player/*\/} in + "mocp"*) song="$(mocp -Q '%artist \n%album \n%song')" ;; + "deadbeef"*) song="$(deadbeef --nowplaying-tf '%artist% \\n%album% \\n%title%')" ;; + "qmmp"*) song="$(qmmp --nowplaying '%p \n%a \n%t')" ;; + "gnome-music"*) get_song_dbus "GnomeMusic" ;; + "lollypop"*) get_song_dbus "Lollypop" ;; + "clementine"*) get_song_dbus "clementine" ;; + "cmus"*) get_song_dbus "cmus" ;; + "juk"*) get_song_dbus "juk" ;; + "bluemindo"*) get_song_dbus "Bluemindo" ;; + "guayadeque"*) get_song_dbus "guayadeque" ;; + "yarock"*) get_song_dbus "yarock" ;; + "deepin-music"*) get_song_dbus "DeepinMusic" ;; + "tomahawk"*) get_song_dbus "tomahawk" ;; + "elisa"*) get_song_dbus "elisa" ;; + "sayonara"*) get_song_dbus "sayonara" ;; + "audacious"*) get_song_dbus "audacious" ;; + "vlc"*) get_song_dbus "vlc" ;; + "gmusicbrowser"*) get_song_dbus "gmusicbrowser" ;; + "pragha"*) get_song_dbus "pragha" ;; + "amarok"*) get_song_dbus "amarok" ;; + "dragon"*) get_song_dbus "dragonplayer" ;; + "smplayer"*) get_song_dbus "smplayer" ;; + "rhythmbox"*) get_song_dbus "rhythmbox" ;; + "strawberry"*) get_song_dbus "strawberry" ;; + "gogglesmm"*) get_song_dbus "gogglesmm" ;; + "xnoise"*) get_song_dbus "xnoise" ;; + "tauonmb"*) get_song_dbus "tauon" ;; + "olivia"*) get_song_dbus "olivia" ;; + "exaile"*) get_song_dbus "exaile" ;; + "netease-cloud-music"*) get_song_dbus "netease-cloud-music" ;; + "plasma-browser-integration"*) get_song_dbus "plasma-browser-integration" ;; + "io.elementary.music"*) get_song_dbus "Music" ;; + "MellowPlayer"*) get_song_dbus "MellowPlayer3" ;; + + "mpd"* | "mopidy"*) + song="$(mpc -f '%artist% \n%album% \n%title%' current "${mpc_args[@]}")" + ;; + + "xmms2d"*) + song="$(xmms2 current -f "\${artist}"$' \n'"\${album}"$' \n'"\${title}")" + ;; + + "spotify"*) + case $os in + "Linux") get_song_dbus "spotify" ;; + + "Mac OS X"|"macOS") + song="$(osascript -e 'tell application "Spotify" to artist of current track as¬ + string & "\n" & album of current track as¬ + string & "\n" & name of current track as string')" + ;; + esac + ;; + + "itunes"*) + song="$(osascript -e 'tell application "iTunes" to artist of current track as¬ + string & "\n" & album of current track as¬ + string & "\n" & name of current track as string')" + ;; + + "music"*) + song="$(osascript -e 'tell application "Music" to artist of current track as¬ + string & "\n" & album of current track as¬ + string & "\n" & name of current track as string')" + ;; + + "banshee"*) + song="$(banshee --query-artist --query-album --query-title |\ + awk -F':' '/^artist/ {a=$2} /^album/ {b=$2} /^title/ {t=$2} + END {print a " \n" b " \n"t}')" + ;; + + "muine"*) + song="$(dbus-send --print-reply --dest=org.gnome.Muine /org/gnome/Muine/Player \ + org.gnome.Muine.Player.GetCurrentSong | + awk -F':' '/^artist/ {a=$2} /^album/ {b=$2} /^title/ {t=$2} + END {print a " \n" b " \n" t}')" + ;; + + "quodlibet"*) + song="$(dbus-send --print-reply --dest=net.sacredchao.QuodLibet \ + /net/sacredchao/QuodLibet net.sacredchao.QuodLibet.CurrentSong |\ + awk -F'"' 'BEGIN {RS=" entry"}; /"artist"/ {a=$4} /"album"/ {b=$4} + /"title"/ {t=$4} END {print a " \n" b " \n" t}')" + ;; + + "pogo"*) + song="$(dbus-send --print-reply --dest=org.mpris.pogo /Player \ + org.freedesktop.MediaPlayer.GetMetadata | + awk -F'"' 'BEGIN {RS=" entry"}; /"artist"/ {a=$4} /"album"/ {b=$4} + /"title"/ {t=$4} END {print a " \n" b " \n" t}')" + ;; + + "playerctl"*) + song="$(playerctl metadata --format '{{ artist }} \n{{ album }} \n{{ title }}')" + ;; + + *) mpc &>/dev/null && song="$(mpc -f '%artist% \n%album% \n%title%' current)" || return ;; + esac + + IFS=$'\n' read -d "" -r artist album title <<< "${song//'\n'/$'\n'}" + + # Make sure empty tags are truly empty. + artist="$(trim "$artist")" + album="$(trim "$album")" + title="$(trim "$title")" + + # Set default values if no tags were found. + : "${artist:=Unknown Artist}" "${album:=Unknown Album}" "${title:=Unknown Song}" + + # Display Artist, Album and Title on separate lines. + if [[ "$song_shorthand" == "on" ]]; then + prin "Artist" "$artist" + prin "Album" "$album" + prin "Song" "$title" + else + song="${song_format/\%artist\%/$artist}" + song="${song/\%album\%/$album}" + song="${song/\%title\%/$title}" + fi +} + +get_resolution() { + case $os in + "Mac OS X"|"macOS") + if type -p screenresolution >/dev/null; then + resolution="$(screenresolution get 2>&1 | awk '/Display/ {printf $6 "Hz, "}')" + resolution="${resolution//x??@/ @ }" + + else + resolution="$(system_profiler SPDisplaysDataType |\ + awk '/Resolution:/ {printf $2"x"$4" @ "$6"Hz, "}')" + fi + + if [[ -e "/Library/Preferences/com.apple.windowserver.plist" ]]; then + scale_factor="$(PlistBuddy -c "Print DisplayAnyUserSets:0:0:Resolution" \ + /Library/Preferences/com.apple.windowserver.plist)" + else + scale_factor="" + fi + + # If no refresh rate is empty. + [[ "$resolution" == *"@ Hz"* ]] && \ + resolution="${resolution//@ Hz}" + + [[ "${scale_factor%.*}" == 2 ]] && \ + resolution="${resolution// @/@2x @}" + + if [[ "$refresh_rate" == "off" ]]; then + resolution="${resolution// @ [0-9][0-9]Hz}" + resolution="${resolution// @ [0-9][0-9][0-9]Hz}" + fi + + [[ "$resolution" == *"0Hz"* ]] && \ + resolution="${resolution// @ 0Hz}" + ;; + + "Windows") + IFS=$'\n' read -d "" -ra sw \ + <<< "$(wmic path Win32_VideoController get CurrentHorizontalResolution)" + + IFS=$'\n' read -d "" -ra sh \ + <<< "$(wmic path Win32_VideoController get CurrentVerticalResolution)" + + sw=("${sw[@]//CurrentHorizontalResolution}") + sh=("${sh[@]//CurrentVerticalResolution}") + + for ((mn = 0; mn < ${#sw[@]}; mn++)) { + [[ ${sw[mn]//[[:space:]]} && ${sh[mn]//[[:space:]]} ]] && + resolution+="${sw[mn]//[[:space:]]}x${sh[mn]//[[:space:]]}, " + } + + resolution=${resolution%,} + ;; + + "Haiku") + resolution="$(screenmode | awk -F ' |, ' 'END{printf $2 "x" $3 " @ " $6 $7}')" + + [[ "$refresh_rate" == "off" ]] && resolution="${resolution/ @*}" + ;; + + "FreeMiNT") + # Need to block X11 queries + ;; + + *) + if type -p xrandr >/dev/null && [[ $DISPLAY && -z $WAYLAND_DISPLAY ]]; then + case $refresh_rate in + "on") + resolution="$(xrandr --nograb --current |\ + awk 'match($0,/[0-9]*\.[0-9]*\*/) { + printf $1 " @ " substr($0,RSTART,RLENGTH) "Hz, "}')" + ;; + + "off") + resolution="$(xrandr --nograb --current |\ + awk -F 'connected |\\+|\\(' \ + '/ connected.*[0-9]+x[0-9]+\+/ && $2 {printf $2 ", "}')" + + resolution="${resolution/primary, }" + resolution="${resolution/primary }" + ;; + esac + resolution="${resolution//\*}" + + elif type -p xwininfo >/dev/null && [[ $DISPLAY && -z $WAYLAND_DISPLAY ]]; then + read -r w h \ + <<< "$(xwininfo -root | awk -F':' '/Width|Height/ {printf $2}')" + resolution="${w}x${h}" + + elif type -p xdpyinfo >/dev/null && [[ $DISPLAY && -z $WAYLAND_DISPLAY ]]; then + resolution="$(xdpyinfo | awk '/dimensions:/ {printf $2}')" + + elif [[ -d /sys/class/drm ]]; then + for dev in /sys/class/drm/*/modes; do + read -r single_resolution _ < "$dev" + + [[ $single_resolution ]] && resolution="${single_resolution}, ${resolution}" + done + fi + ;; + esac + + resolution="${resolution%%,}" + resolution="${resolution%%, }" + [[ -z "${resolution/x}" ]] && resolution= +} + +get_style() { + # Fix weird output when the function is run multiple times. + unset gtk2_theme gtk3_theme theme path + + if [[ "$DISPLAY" && $os != "Mac OS X" && $os != "macOS" ]]; then + # Get DE if user has disabled the function. + ((de_run != 1)) && get_de + + # Remove version from '$de'. + [[ $de_version == on ]] && de=${de/ *} + + # Check for DE Theme. + case $de in + "KDE"* | "Plasma"*) + kde_config_dir + + if [[ -f "${kde_config_dir}/kdeglobals" ]]; then + kde_config_file="${kde_config_dir}/kdeglobals" + + kde_theme="$(grep "^${kde}" "$kde_config_file")" + kde_theme="${kde_theme/*=}" + if [[ "$kde" == "font" ]]; then + kde_font_size="${kde_theme#*,}" + kde_font_size="${kde_font_size/,*}" + kde_theme="${kde_theme/,*} ${kde_theme/*,} ${kde_font_size}" + fi + kde_theme="$kde_theme [$de], " + else + err "Theme: KDE config files not found, skipping." + fi + ;; + + *"Cinnamon"*) + if type -p gsettings >/dev/null; then + gtk3_theme="$(gsettings get org.cinnamon.desktop.interface "$gsettings")" + gtk2_theme="$gtk3_theme" + fi + ;; + + "Gnome"* | "Unity"* | "Budgie"*) + if type -p gsettings >/dev/null; then + gtk3_theme="$(gsettings get org.gnome.desktop.interface "$gsettings")" + gtk2_theme="$gtk3_theme" + + elif type -p gconftool-2 >/dev/null; then + gtk2_theme="$(gconftool-2 -g /desktop/gnome/interface/"$gconf")" + fi + ;; + + "Mate"*) + gtk3_theme="$(gsettings get org.mate.interface "$gsettings")" + gtk2_theme="$gtk3_theme" + ;; + + "Xfce"*) + type -p xfconf-query >/dev/null && \ + gtk2_theme="$(xfconf-query -c xsettings -p "$xfconf")" + ;; + esac + + # Check for general GTK2 Theme. + if [[ -z "$gtk2_theme" ]]; then + if [[ -n "$GTK2_RC_FILES" ]]; then + IFS=: read -ra rc_files <<< "$GTK2_RC_FILES" + gtk2_theme="$(grep "^[^#]*${name}" "${rc_files[@]}")" + elif [[ -f "${HOME}/.gtkrc-2.0" ]]; then + gtk2_theme="$(grep "^[^#]*${name}" "${HOME}/.gtkrc-2.0")" + + elif [[ -f "/etc/gtk-2.0/gtkrc" ]]; then + gtk2_theme="$(grep "^[^#]*${name}" /etc/gtk-2.0/gtkrc)" + + elif [[ -f "/usr/share/gtk-2.0/gtkrc" ]]; then + gtk2_theme="$(grep "^[^#]*${name}" /usr/share/gtk-2.0/gtkrc)" + + fi + + gtk2_theme="${gtk2_theme/*${name}*=}" + fi + + # Check for general GTK3 Theme. + if [[ -z "$gtk3_theme" ]]; then + if [[ -f "${XDG_CONFIG_HOME}/gtk-3.0/settings.ini" ]]; then + gtk3_theme="$(grep "^[^#]*$name" "${XDG_CONFIG_HOME}/gtk-3.0/settings.ini")" + + elif type -p gsettings >/dev/null; then + gtk3_theme="$(gsettings get org.gnome.desktop.interface "$gsettings")" + + elif [[ -f "/etc/gtk-3.0/settings.ini" ]]; then + gtk3_theme="$(grep "^[^#]*$name" /etc/gtk-3.0/settings.ini)" + + elif [[ -f "/usr/share/gtk-3.0/settings.ini" ]]; then + gtk3_theme="$(grep "^[^#]*$name" /usr/share/gtk-3.0/settings.ini)" + fi + + gtk3_theme="${gtk3_theme/${name}*=}" + fi + + # Trim whitespace. + gtk2_theme="$(trim "$gtk2_theme")" + gtk3_theme="$(trim "$gtk3_theme")" + + # Remove quotes. + gtk2_theme="$(trim_quotes "$gtk2_theme")" + gtk3_theme="$(trim_quotes "$gtk3_theme")" + + # Toggle visibility of GTK themes. + [[ "$gtk2" == "off" ]] && unset gtk2_theme + [[ "$gtk3" == "off" ]] && unset gtk3_theme + + # Format the string based on which themes exist. + if [[ "$gtk2_theme" && "$gtk2_theme" == "$gtk3_theme" ]]; then + gtk3_theme+=" [GTK2/3]" + unset gtk2_theme + + elif [[ "$gtk2_theme" && "$gtk3_theme" ]]; then + gtk2_theme+=" [GTK2], " + gtk3_theme+=" [GTK3] " + + else + [[ "$gtk2_theme" ]] && gtk2_theme+=" [GTK2] " + [[ "$gtk3_theme" ]] && gtk3_theme+=" [GTK3] " + fi + + # Final string. + theme="${kde_theme}${gtk2_theme}${gtk3_theme}" + theme="${theme%, }" + + # Make the output shorter by removing "[GTKX]" from the string. + if [[ "$gtk_shorthand" == "on" ]]; then + theme="${theme// '[GTK'[0-9]']'}" + theme="${theme/ '[GTK2/3]'}" + theme="${theme/ '[KDE]'}" + theme="${theme/ '[Plasma]'}" + fi + fi +} + +get_theme() { + name="gtk-theme-name" + gsettings="gtk-theme" + gconf="gtk_theme" + xfconf="/Net/ThemeName" + kde="Name" + + get_style +} + +get_icons() { + name="gtk-icon-theme-name" + gsettings="icon-theme" + gconf="icon_theme" + xfconf="/Net/IconThemeName" + kde="Theme" + + get_style + icons="$theme" +} + +get_font() { + name="gtk-font-name" + gsettings="font-name" + gconf="font_theme" + xfconf="/Gtk/FontName" + kde="font" + + get_style + font="$theme" +} + +get_term() { + # If function was run, stop here. + ((term_run == 1)) && return + + # Workaround for macOS systems that + # don't support the block below. + case $TERM_PROGRAM in + "iTerm.app") term="iTerm2" ;; + "Terminal.app") term="Apple Terminal" ;; + "Hyper") term="HyperTerm" ;; + *) term="${TERM_PROGRAM/\.app}" ;; + esac + + # Most likely TosWin2 on FreeMiNT - quick check + [[ "$TERM" == "tw52" || "$TERM" == "tw100" ]] && term="TosWin2" + [[ "$SSH_CONNECTION" ]] && term="$SSH_TTY" + [[ "$WT_SESSION" ]] && term="Windows Terminal" + + # Check $PPID for terminal emulator. + while [[ -z "$term" ]]; do + parent="$(get_ppid "$parent")" + [[ -z "$parent" ]] && break + name="$(get_process_name "$parent")" + + case ${name// } in + "${SHELL/*\/}"|*"sh"|"screen"|"su"*|"newgrp") ;; + + "login"*|*"Login"*|"init"|"(init)") + term="$(tty)" + ;; + + "ruby"|"1"|"tmux"*|"systemd"|"sshd"*|"python"*|\ + "USER"*"PID"*|"kdeinit"*|"launchd"*|"bwrap") + break + ;; + + "gnome-terminal-") term="gnome-terminal" ;; + "urxvtd") term="urxvt" ;; + *"nvim") term="Neovim Terminal" ;; + *"NeoVimServer"*) term="VimR Terminal" ;; + + *) + # Fix issues with long process names on Linux. + [[ $os == Linux ]] && term=$(realpath "/proc/$parent/exe") + + term="${name##*/}" + + # Fix wrapper names in Nix. + [[ $term == .*-wrapped ]] && { + term="${term#.}" + term="${term%-wrapped}" + } + ;; + esac + done + + # Log that the function was run. + term_run=1 +} + +get_term_font() { + ((term_run != 1)) && get_term + + case $term in + "alacritty"*) + shopt -s nullglob + confs=({$XDG_CONFIG_HOME,$HOME}/{alacritty,}/{.,}alacritty.ym?) + shopt -u nullglob + + [[ -f "${confs[0]}" ]] || return + + term_font="$(awk '/normal:/ {while (!/family:/ || /#/) + {if (!getline) {exit}} print; exit}' "${confs[0]}")" + term_font="${term_font/*family:}" + term_font="${term_font/$'\n'*}" + term_font="${term_font/\#*}" + term_font="${term_font//\"}" + ;; + + "Apple_Terminal") + term_font="$(osascript </dev/null || + { err "Disk requires 'df' to function. Install 'df' to get disk info."; return; } + + df_version=$(df --version 2>&1) + + case $df_version in + *IMitv*) df_flags=(-P -g) ;; # AIX + *befhikm*) df_flags=(-P -k) ;; # IRIX + *hiklnP*) df_flags=(-h) ;; # OpenBSD + + *Tracker*) # Haiku + err "Your version of df cannot be used due to the non-standard flags" + return + ;; + + *) df_flags=(-P -h) ;; + esac + + # Create an array called 'disks' where each element is a separate line from + # df's output. We then unset the first element which removes the column titles. + IFS=$'\n' read -d "" -ra disks <<< "$(df "${df_flags[@]}" "${disk_show[@]:-/}")" + unset "disks[0]" + + # Stop here if 'df' fails to print disk info. + [[ ${disks[*]} ]] || { + err "Disk: df failed to print the disks, make sure the disk_show array is set properly." + return + } + + for disk in "${disks[@]}"; do + # Create a second array and make each element split at whitespace this time. + IFS=" " read -ra disk_info <<< "$disk" + disk_perc=${disk_info[${#disk_info[@]} - 2]/\%} + + case $disk_percent in + off) disk_perc= + esac + + case $df_version in + *befhikm*) + disk=$((disk_info[${#disk_info[@]} - 4] / 1024 / 1024))G + disk+=" / " + disk+=$((disk_info[${#disk_info[@]} - 5] / 1024/ 1024))G + disk+=${disk_perc:+ ($disk_perc%)} + ;; + + *) + disk=${disk_info[${#disk_info[@]} - 4]/i} + disk+=" / " + disk+=${disk_info[${#disk_info[@]} - 5]/i} + disk+=${disk_perc:+ ($disk_perc%)} + ;; + esac + + case $disk_subtitle in + name) + disk_sub=${disk_info[*]::${#disk_info[@]} - 5} + ;; + + dir) + disk_sub=${disk_info[${#disk_info[@]} - 1]/*\/} + disk_sub=${disk_sub:-${disk_info[${#disk_info[@]} - 1]}} + ;; + + none) ;; + + *) + disk_sub=${disk_info[${#disk_info[@]} - 1]} + ;; + esac + + case $disk_display in + bar) disk="$(bar "$disk_perc" "100")" ;; + infobar) disk+=" $(bar "$disk_perc" "100")" ;; + barinfo) disk="$(bar "$disk_perc" "100")${info_color} $disk" ;; + perc) disk="${disk_perc}% $(bar "$disk_perc" "100")" ;; + esac + + # Append '(disk mount point)' to the subtitle. + if [[ "$subtitle" ]]; then + prin "$subtitle${disk_sub:+ ($disk_sub)}" "$disk" + else + prin "$disk_sub" "$disk" + fi + done +} + +get_battery() { + case $os in + "Linux") + # We use 'prin' here so that we can do multi battery support + # with a single battery per line. + for bat in "/sys/class/power_supply/"{BAT,axp288_fuel_gauge,CMB}*; do + capacity="$(< "${bat}/capacity")" + status="$(< "${bat}/status")" + + if [[ "$capacity" ]]; then + battery="${capacity}% [${status}]" + + case $battery_display in + "bar") battery="$(bar "$capacity" 100)" ;; + "infobar") battery+=" $(bar "$capacity" 100)" ;; + "barinfo") battery="$(bar "$capacity" 100)${info_color} ${battery}" ;; + esac + + bat="${bat/*axp288_fuel_gauge}" + prin "${subtitle:+${subtitle}${bat: -1}}" "$battery" + fi + done + return + ;; + + "BSD") + case $kernel_name in + "FreeBSD"* | "DragonFly"*) + battery="$(acpiconf -i 0 | awk -F ':\t' '/Remaining capacity/ {print $2}')" + battery_state="$(acpiconf -i 0 | awk -F ':\t\t\t' '/State/ {print $2}')" + ;; + + "NetBSD"*) + battery="$(envstat | awk '\\(|\\)' '/charge:/ {print $2}')" + battery="${battery/\.*/%}" + ;; + + "OpenBSD"* | "Bitrig"*) + battery0full="$(sysctl -n hw.sensors.acpibat0.watthour0\ + hw.sensors.acpibat0.amphour0)" + battery0full="${battery0full%% *}" + + battery0now="$(sysctl -n hw.sensors.acpibat0.watthour3\ + hw.sensors.acpibat0.amphour3)" + battery0now="${battery0now%% *}" + + state="$(sysctl -n hw.sensors.acpibat0.raw0)" + state="${state##? (battery }" + state="${state%)*}" + + [[ "${state}" == "charging" ]] && battery_state="charging" + [[ "$battery0full" ]] && \ + battery="$((100 * ${battery0now/\.} / ${battery0full/\.}))%" + ;; + esac + ;; + + "Mac OS X"|"macOS") + battery="$(pmset -g batt | grep -o '[0-9]*%')" + state="$(pmset -g batt | awk '/;/ {print $4}')" + [[ "$state" == "charging;" ]] && battery_state="charging" + ;; + + "Windows") + battery="$(wmic Path Win32_Battery get EstimatedChargeRemaining)" + battery="${battery/EstimatedChargeRemaining}" + battery="$(trim "$battery")%" + state="$(wmic /NameSpace:'\\root\WMI' Path BatteryStatus get Charging)" + state="${state/Charging}" + [[ "$state" == *TRUE* ]] && battery_state="charging" + ;; + + "Haiku") + battery0full="$(awk -F '[^0-9]*' 'NR==2 {print $4}' /dev/power/acpi_battery/0)" + battery0now="$(awk -F '[^0-9]*' 'NR==5 {print $4}' /dev/power/acpi_battery/0)" + battery="$((battery0full * 100 / battery0now))%" + ;; + esac + + [[ "$battery_state" ]] && battery+=" Charging" + + case $battery_display in + "bar") battery="$(bar "${battery/\%*}" 100)" ;; + "infobar") battery="${battery} $(bar "${battery/\%*}" 100)" ;; + "barinfo") battery="$(bar "${battery/\%*}" 100)${info_color} ${battery}" ;; + esac +} + +get_local_ip() { + case $os in + "Linux" | "BSD" | "Solaris" | "AIX" | "IRIX") + if [[ "${local_ip_interface[0]}" == "auto" ]]; then + local_ip="$(ip route get 1 | awk -F'src' '{print $2; exit}')" + local_ip="${local_ip/uid*}" + [[ "$local_ip" ]] || local_ip="$(ifconfig -a | awk '/broadcast/ {print $2; exit}')" + else + for interface in "${local_ip_interface[@]}"; do + local_ip="$(ip addr show "$interface" 2> /dev/null | + awk '/inet / {print $2; exit}')" + local_ip="${local_ip/\/*}" + [[ "$local_ip" ]] || + local_ip="$(ifconfig "$interface" 2> /dev/null | + awk '/broadcast/ {print $2; exit}')" + if [[ -n "$local_ip" ]]; then + prin "$interface" "$local_ip" + else + err "Local IP: Could not detect local ip for $interface" + fi + done + fi + ;; + + "MINIX") + local_ip="$(ifconfig | awk '{printf $3; exit}')" + ;; + + "Mac OS X" | "macOS" | "iPhone OS") + if [[ "${local_ip_interface[0]}" == "auto" ]]; then + interface="$(route get 1 | awk -F': ' '/interface/ {printf $2; exit}')" + local_ip="$(ipconfig getifaddr "$interface")" + else + for interface in "${local_ip_interface[@]}"; do + local_ip="$(ipconfig getifaddr "$interface")" + if [[ -n "$local_ip" ]]; then + prin "$interface" "$local_ip" + else + err "Local IP: Could not detect local ip for $interface" + fi + done + fi + ;; + + "Windows") + local_ip="$(ipconfig | awk -F ': ' '/IPv4 Address/ {printf $2 ", "}')" + local_ip="${local_ip%\,*}" + ;; + + "Haiku") + local_ip="$(ifconfig | awk -F ': ' '/Bcast/ {print $2}')" + local_ip="${local_ip/, Bcast}" + ;; + esac +} + +get_public_ip() { + if [[ ! -n "$public_ip_host" ]] && type -p dig >/dev/null; then + public_ip="$(dig +time=1 +tries=1 +short myip.opendns.com @resolver1.opendns.com)" + [[ "$public_ip" =~ ^\; ]] && unset public_ip + fi + + if [[ ! -n "$public_ip_host" ]] && [[ -z "$public_ip" ]] && type -p drill >/dev/null; then + public_ip="$(drill myip.opendns.com @resolver1.opendns.com | \ + awk '/^myip\./ && $3 == "IN" {print $5}')" + fi + + if [[ -z "$public_ip" ]] && type -p curl >/dev/null; then + public_ip="$(curl -L --max-time "$public_ip_timeout" -w '\n' "$public_ip_host")" + fi + + if [[ -z "$public_ip" ]] && type -p wget >/dev/null; then + public_ip="$(wget -T "$public_ip_timeout" -qO- "$public_ip_host")" + fi +} + +get_users() { + users="$(who | awk '!seen[$1]++ {printf $1 ", "}')" + users="${users%\,*}" +} + +get_locale() { + locale="$sys_locale" +} + +get_gpu_driver() { + case $os in + "Linux") + gpu_driver="$(lspci -nnk | awk -F ': ' \ + '/Display|3D|VGA/{nr[NR+2]}; NR in nr {printf $2 ", "; exit}')" + gpu_driver="${gpu_driver%, }" + + if [[ "$gpu_driver" == *"nvidia"* ]]; then + gpu_driver="$(< /proc/driver/nvidia/version)" + gpu_driver="${gpu_driver/*Module }" + gpu_driver="NVIDIA ${gpu_driver/ *}" + fi + ;; + + "Mac OS X"|"macOS") + if [[ "$(kextstat | grep "GeForceWeb")" != "" ]]; then + gpu_driver="NVIDIA Web Driver" + else + gpu_driver="macOS Default Graphics Driver" + fi + ;; + esac +} + +get_cols() { + local blocks blocks2 cols + + if [[ "$color_blocks" == "on" ]]; then + # Convert the width to space chars. + printf -v block_width "%${block_width}s" + + # Generate the string. + for ((block_range[0]; block_range[0]<=block_range[1]; block_range[0]++)); do + case ${block_range[0]} in + [0-7]) + printf -v blocks '%b\e[3%bm\e[4%bm%b' \ + "$blocks" "${block_range[0]}" "${block_range[0]}" "$block_width" + ;; + + *) + printf -v blocks2 '%b\e[38;5;%bm\e[48;5;%bm%b' \ + "$blocks2" "${block_range[0]}" "${block_range[0]}" "$block_width" + ;; + esac + done + + # Convert height into spaces. + printf -v block_spaces "%${block_height}s" + + # Convert the spaces into rows of blocks. + [[ "$blocks" ]] && cols+="${block_spaces// /${blocks}nl}" + [[ "$blocks2" ]] && cols+="${block_spaces// /${blocks2}nl}" + + # Add newlines to the string. + cols=${cols%%nl} + cols=${cols//nl/ +[${text_padding}C${zws}} + + # Add block height to info height. + ((info_height+=block_range[1]>7?block_height+2:block_height+1)) + + case $col_offset in + "auto") printf '\n\e[%bC%b\n' "$text_padding" "${zws}${cols}" ;; + *) printf '\n\e[%bC%b\n' "$col_offset" "${zws}${cols}" ;; + esac + fi + + unset -v blocks blocks2 cols + + # Tell info() that we printed manually. + prin=1 +} + +# IMAGES + +image_backend() { + [[ "$image_backend" != "off" ]] && ! type -p convert &>/dev/null && \ + { image_backend="ascii"; err "Image: Imagemagick not found, falling back to ascii mode."; } + + case ${image_backend:-off} in + "ascii") print_ascii ;; + "off") image_backend="off" ;; + + "caca" | "catimg" | "chafa" | "jp2a" | "iterm2" | "termpix" |\ + "tycat" | "w3m" | "sixel" | "pixterm" | "kitty" | "pot", | "ueberzug" |\ + "viu") + get_image_source + + [[ ! -f "$image" ]] && { + to_ascii "Image: '$image_source' doesn't exist, falling back to ascii mode." + return + } + [[ "$image_backend" == "ueberzug" ]] && wait=true; + + get_window_size + + ((term_width < 1)) && { + to_ascii "Image: Failed to find terminal window size." + err "Image: Check the 'Images in the terminal' wiki page for more info," + return + } + + printf '\e[2J\e[H' + get_image_size + make_thumbnail + display_image || to_off "Image: $image_backend failed to display the image." + ;; + + *) + err "Image: Unknown image backend specified '$image_backend'." + err "Image: Valid backends are: 'ascii', 'caca', 'catimg', 'chafa', 'jp2a', 'iterm2', + 'kitty', 'off', 'sixel', 'pot', 'pixterm', 'termpix', + 'tycat', 'w3m', 'viu')" + err "Image: Falling back to ascii mode." + print_ascii + ;; + esac + + # Set cursor position next image/ascii. + [[ "$image_backend" != "off" ]] && printf '\e[%sA\e[9999999D' "${lines:-0}" +} + +print_ascii() { + if [[ -f "$image_source" && ! "$image_source" =~ (png|jpg|jpeg|jpe|svg|gif) ]]; then + ascii_data="$(< "$image_source")" + elif [[ "$image_source" == "ascii" || $image_source == auto ]]; then + : + else + ascii_data="$image_source" + fi + + # Set locale to get correct padding. + LC_ALL="$sys_locale" + + # Calculate size of ascii file in line length / line count. + while IFS=$'\n' read -r line; do + line=${line//\\\\/\\} + line=${line//█/ } + ((++lines,${#line}>ascii_len)) && ascii_len="${#line}" + done <<< "${ascii_data//\$\{??\}}" + + # Fallback if file not found. + ((lines==1)) && { + lines= + ascii_len= + image_source=auto + get_distro_ascii + print_ascii + return + } + + # Colors. + ascii_data="${ascii_data//\$\{c1\}/$c1}" + ascii_data="${ascii_data//\$\{c2\}/$c2}" + ascii_data="${ascii_data//\$\{c3\}/$c3}" + ascii_data="${ascii_data//\$\{c4\}/$c4}" + ascii_data="${ascii_data//\$\{c5\}/$c5}" + ascii_data="${ascii_data//\$\{c6\}/$c6}" + + ((text_padding=ascii_len+gap)) + printf '%b\n' "$ascii_data${reset}" + LC_ALL=C +} + +get_image_source() { + case $image_source in + "auto" | "wall" | "wallpaper") + get_wallpaper + ;; + + *) + # Get the absolute path. + image_source="$(get_full_path "$image_source")" + + if [[ -d "$image_source" ]]; then + shopt -s nullglob + files=("${image_source%/}"/*.{png,jpg,jpeg,jpe,gif,svg}) + shopt -u nullglob + image="${files[RANDOM % ${#files[@]}]}" + + else + image="$image_source" + fi + ;; + esac + + err "Image: Using image '$image'" +} + +get_wallpaper() { + case $os in + "Mac OS X"|"macOS") + image="$(osascript </dev/null && [[ -f "${HOME}/.cache/wal/wal" ]] && \ + { image="$(< "${HOME}/.cache/wal/wal")"; return; } + + case $de in + "MATE"*) + image="$(gsettings get org.mate.background picture-filename)" + ;; + + "Xfce"*) + image="$(xfconf-query -c xfce4-desktop -p \ + "/backdrop/screen0/monitor0/workspace0/last-image")" + ;; + + "Cinnamon"*) + image="$(gsettings get org.cinnamon.desktop.background picture-uri)" + image="$(decode_url "$image")" + ;; + + "GNOME"*) + image="$(gsettings get org.gnome.desktop.background picture-uri)" + image="$(decode_url "$image")" + ;; + + "Plasma"*) + image=$XDG_CONFIG_HOME/plasma-org.kde.plasma.desktop-appletsrc + image=$(awk -F '=' '$1 == "Image" { print $2 }' "$image") + ;; + + "LXQt"*) + image="$XDG_CONFIG_HOME/pcmanfm-qt/lxqt/settings.conf" + image="$(awk -F '=' '$1 == "Wallpaper" {print $2}' "$image")" + ;; + + *) + if type -p feh >/dev/null && [[ -f "${HOME}/.fehbg" ]]; then + image="$(awk -F\' '/feh/ {printf $(NF-1)}' "${HOME}/.fehbg")" + + elif type -p setroot >/dev/null && \ + [[ -f "${XDG_CONFIG_HOME}/setroot/.setroot-restore" ]]; then + image="$(awk -F\' '/setroot/ {printf $(NF-1)}' \ + "${XDG_CONFIG_HOME}/setroot/.setroot-restore")" + + elif type -p nitrogen >/dev/null; then + image="$(awk -F'=' '/file/ {printf $2;exit;}' \ + "${XDG_CONFIG_HOME}/nitrogen/bg-saved.cfg")" + + else + image="$(gsettings get org.gnome.desktop.background picture-uri)" + image="$(decode_url "$image")" + fi + ;; + esac + + # Strip un-needed info from the path. + image="${image/file:\/\/}" + image="$(trim_quotes "$image")" + ;; + esac + + # If image is an xml file, don't use it. + [[ "${image/*\./}" == "xml" ]] && image="" +} + +get_w3m_img_path() { + # Find w3m-img path. + shopt -s nullglob + w3m_paths=({/usr/{local/,},~/.nix-profile/}{lib,libexec,lib64,libexec64}/w3m/w3mi*) + shopt -u nullglob + + [[ -x "${w3m_paths[0]}" ]] && \ + { w3m_img_path="${w3m_paths[0]}"; return; } + + err "Image: w3m-img wasn't found on your system" +} + +get_window_size() { + # This functions gets the current window size in + # pixels. + # + # We first try to use the escape sequence "\033[14t" + # to get the terminal window size in pixels. If this + # fails we then fallback to using "xdotool" or other + # programs. + + # Tmux has a special way of reading escape sequences + # so we have to use a slightly different sequence to + # get the terminal size. + if [[ "$image_backend" == "tycat" ]]; then + printf '%b' '\e}qs\000' + + elif [[ -z $VTE_VERSION ]]; then + case ${TMUX:-null} in + "null") printf '%b' '\e[14t' ;; + *) printf '%b' '\ePtmux;\e\e[14t\e\\ ' ;; + esac + fi + + # The escape codes above print the desired output as + # user input so we have to use read to store the out + # -put as a variable. + # The 1 second timeout is required for older bash + # + # False positive. + # shellcheck disable=2141 + case $bash_version in + 4|5) IFS=';t' read -d t -t 0.05 -sra term_size ;; + *) IFS=';t' read -d t -t 1 -sra term_size ;; + esac + unset IFS + + # Split the string into height/width. + if [[ "$image_backend" == "tycat" ]]; then + term_width="$((term_size[2] * term_size[0]))" + term_height="$((term_size[3] * term_size[1]))" + + else + term_height="${term_size[1]}" + term_width="${term_size[2]}" + fi + + # Get terminal width/height. + if (( "${term_width:-0}" < 50 )) && [[ "$DISPLAY" && $os != "Mac OS X" && $os != "macOS" ]]; then + if type -p xdotool &>/dev/null; then + IFS=$'\n' read -d "" -ra win \ + <<< "$(xdotool getactivewindow getwindowgeometry --shell %1)" + term_width="${win[3]/WIDTH=}" + term_height="${win[4]/HEIGHT=}" + + elif type -p xwininfo &>/dev/null; then + # Get the focused window's ID. + if type -p xdo &>/dev/null; then + current_window="$(xdo id)" + + elif type -p xprop &>/dev/null; then + current_window="$(xprop -root _NET_ACTIVE_WINDOW)" + current_window="${current_window##* }" + + elif type -p xdpyinfo &>/dev/null; then + current_window="$(xdpyinfo | grep -F "focus:")" + current_window="${current_window/*window }" + current_window="${current_window/,*}" + fi + + # If the ID was found get the window size. + if [[ "$current_window" ]]; then + term_size=("$(xwininfo -id "$current_window")") + term_width="${term_size[0]#*Width: }" + term_width="${term_width/$'\n'*}" + term_height="${term_size[0]/*Height: }" + term_height="${term_height/$'\n'*}" + fi + fi + fi + + term_width="${term_width:-0}" +} + + +get_term_size() { + # Get the terminal size in cells. + read -r lines columns <<< "$(stty size)" + + # Calculate font size. + font_width="$((term_width / columns))" + font_height="$((term_height / lines))" +} + +get_image_size() { + # This functions determines the size to make the thumbnail image. + get_term_size + + case $image_size in + "auto") + image_size="$((columns * font_width / 2))" + term_height="$((term_height - term_height / 4))" + + ((term_height < image_size)) && \ + image_size="$term_height" + ;; + + *"%") + percent="${image_size/\%}" + image_size="$((percent * term_width / 100))" + + (((percent * term_height / 50) < image_size)) && \ + image_size="$((percent * term_height / 100))" + ;; + + "none") + # Get image size so that we can do a better crop. + read -r width height <<< "$(identify -format "%w %h" "$image")" + + while ((width >= (term_width / 2) || height >= term_height)); do + ((width=width/2,height=height/2)) + done + + crop_mode="none" + ;; + + *) image_size="${image_size/px}" ;; + esac + + # Check for terminal padding. + [[ "$image_backend" == "w3m" ]] && term_padding + + width="${width:-$image_size}" + height="${height:-$image_size}" + text_padding="$(((width + padding + xoffset) / font_width + gap))" +} + +make_thumbnail() { + # Name the thumbnail using variables so we can + # use it later. + image_name="${crop_mode}-${crop_offset}-${width}-${height}-${image//\/}" + + # Handle file extensions. + case ${image##*.} in + "eps"|"pdf"|"svg"|"gif"|"png") + image_name+=".png" ;; + *) image_name+=".jpg" ;; + esac + + # Create the thumbnail dir if it doesn't exist. + mkdir -p "${thumbnail_dir:=${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch}" + + if [[ ! -f "${thumbnail_dir}/${image_name}" ]]; then + # Get image size so that we can do a better crop. + [[ -z "$size" ]] && { + read -r og_width og_height <<< "$(identify -format "%w %h" "$image")" + ((og_height > og_width)) && size="$og_width" || size="$og_height" + } + + case $crop_mode in + "fit") + c="$(convert "$image" \ + -colorspace srgb \ + -format "%[pixel:p{0,0}]" info:)" + + convert \ + -background none \ + "$image" \ + -trim +repage \ + -gravity south \ + -background "$c" \ + -extent "${size}x${size}" \ + -scale "${width}x${height}" \ + "${thumbnail_dir}/${image_name}" + ;; + + "fill") + convert \ + -background none \ + "$image" \ + -trim +repage \ + -scale "${width}x${height}^" \ + -extent "${width}x${height}" \ + "${thumbnail_dir}/${image_name}" + ;; + + "none") + cp "$image" "${thumbnail_dir}/${image_name}" + ;; + + *) + convert \ + -background none \ + "$image" \ + -strip \ + -gravity "$crop_offset" \ + -crop "${size}x${size}+0+0" \ + -scale "${width}x${height}" \ + "${thumbnail_dir}/${image_name}" + ;; + esac + fi + + # The final image. + image="${thumbnail_dir}/${image_name}" +} + +display_image() { + case $image_backend in + "caca") + img2txt \ + -W "$((width / font_width))" \ + -H "$((height / font_height))" \ + --gamma=0.6 \ + "$image" + ;; + + + "ueberzug") + if [ "$wait" = true ];then + wait=false; + else + ueberzug layer --parser bash 0< <( + declare -Ap ADD=(\ + [action]="add"\ + [identifier]="neofetch"\ + [x]=$xoffset [y]=$yoffset\ + [path]=$image\ + ) + read -rs + ) + fi + ;; + + "catimg") + catimg -w "$((width*catimg_size / font_width))" -r "$catimg_size" "$image" + ;; + + "chafa") + chafa --stretch --size="$((width / font_width))x$((height / font_height))" "$image" + ;; + + "jp2a") + jp2a \ + --colors \ + --width="$((width / font_width))" \ + --height="$((height / font_height))" \ + "$image" + ;; + + "kitty") + kitty +kitten icat \ + --align left \ + --place "$((width/font_width))x$((height/font_height))@${xoffset}x${yoffset}" \ + "$image" + ;; + + "pot") + pot \ + "$image" \ + --size="$((width / font_width))x$((height / font_height))" + ;; + + "pixterm") + pixterm \ + -tc "$((width / font_width))" \ + -tr "$((height / font_height))" \ + "$image" + ;; + + "sixel") + img2sixel \ + -w "$width" \ + -h "$height" \ + "$image" + ;; + + "termpix") + termpix \ + --width "$((width / font_width))" \ + --height "$((height / font_height))" \ + "$image" + ;; + + "iterm2") + printf -v iterm_cmd '\e]1337;File=width=%spx;height=%spx;inline=1:%s' \ + "$width" "$height" "$(base64 < "$image")" + + # Tmux requires an additional escape sequence for this to work. + [[ -n "$TMUX" ]] && printf -v iterm_cmd '\ePtmux;\e%b\e'\\ "$iterm_cmd" + + printf '%b\a\n' "$iterm_cmd" + ;; + + "tycat") + tycat \ + -g "${width}x${height}" \ + "$image" + ;; + + "viu") + viu \ + -t -w "$((width / font_width))" -h "$((height / font_height))" \ + "$image" + ;; + + "w3m") + get_w3m_img_path + zws='\xE2\x80\x8B\x20' + + # Add a tiny delay to fix issues with images not + # appearing in specific terminal emulators. + ((bash_version>3)) && sleep 0.05 + printf '%b\n%s;\n%s\n' "0;1;$xoffset;$yoffset;$width;$height;;;;;$image" 3 4 |\ + "${w3m_img_path:-false}" -bg "$background_color" &>/dev/null + ;; + esac +} + +to_ascii() { + err "$1" + image_backend="ascii" + print_ascii + + # Set cursor position next image/ascii. + printf '\e[%sA\e[9999999D' "${lines:-0}" +} + +to_off() { + err "$1" + image_backend="off" + text_padding= +} + + +# TEXT FORMATTING + +info() { + # Save subtitle value. + [[ "$2" ]] && subtitle="$1" + + # Make sure that $prin is unset. + unset -v prin + + # Call the function. + "get_${2:-$1}" + + # If the get_func function called 'prin' directly, stop here. + [[ "$prin" ]] && return + + # Update the variable. + if [[ "$2" ]]; then + output="$(trim "${!2}")" + else + output="$(trim "${!1}")" + fi + + if [[ "$2" && "${output// }" ]]; then + prin "$1" "$output" + + elif [[ "${output// }" ]]; then + prin "$output" + + else + err "Info: Couldn't detect ${1}." + fi + + unset -v subtitle +} + +prin() { + # If $2 doesn't exist we format $1 as info. + if [[ "$(trim "$1")" && "$2" ]]; then + [[ "$json" ]] && { printf ' %s\n' "\"${1}\": \"${2}\","; return; } + + string="${1}${2:+: $2}" + else + string="${2:-$1}" + local subtitle_color="$info_color" + fi + + string="$(trim "${string//$'\e[0m'}")" + length="$(strip_sequences "$string")" + length="${#length}" + + # Format the output. + string="${string/:/${reset}${colon_color}${separator:=:}${info_color}}" + string="${subtitle_color}${bold}${string}" + + # Print the info. + printf '%b\n' "${text_padding:+\e[${text_padding}C}${zws}${string//\\n}${reset} " + + # Calculate info height. + ((++info_height)) + + # Log that prin was used. + prin=1 +} + +get_underline() { + [[ "$underline_enabled" == "on" ]] && { + printf -v underline "%${length}s" + printf '%b%b\n' "${text_padding:+\e[${text_padding}C}${zws}${underline_color}" \ + "${underline// /$underline_char}${reset} " + } + + ((++info_height)) + length= + prin=1 +} + +get_bold() { + case $ascii_bold in + "on") ascii_bold='\e[1m' ;; + "off") ascii_bold="" ;; + esac + + case $bold in + "on") bold='\e[1m' ;; + "off") bold="" ;; + esac +} + +trim() { + set -f + # shellcheck disable=2048,2086 + set -- $* + printf '%s\n' "${*//[[:space:]]/}" + set +f +} + +trim_quotes() { + trim_output="${1//\'}" + trim_output="${trim_output//\"}" + printf "%s" "$trim_output" +} + +strip_sequences() { + strip="${1//$'\e['3[0-9]m}" + strip="${strip//$'\e['[0-9]m}" + strip="${strip//\\e\[[0-9]m}" + strip="${strip//$'\e['38\;5\;[0-9]m}" + strip="${strip//$'\e['38\;5\;[0-9][0-9]m}" + strip="${strip//$'\e['38\;5\;[0-9][0-9][0-9]m}" + + printf '%s\n' "$strip" +} + +# COLORS + +set_colors() { + c1="$(color "$1")${ascii_bold}" + c2="$(color "$2")${ascii_bold}" + c3="$(color "$3")${ascii_bold}" + c4="$(color "$4")${ascii_bold}" + c5="$(color "$5")${ascii_bold}" + c6="$(color "$6")${ascii_bold}" + + [[ "$color_text" != "off" ]] && set_text_colors "$@" +} + +set_text_colors() { + if [[ "${colors[0]}" == "distro" ]]; then + title_color="$(color "$1")" + at_color="$reset" + underline_color="$reset" + subtitle_color="$(color "$2")" + colon_color="$reset" + info_color="$reset" + + # If the ascii art uses 8 as a color, make the text the fg. + ((${1:-1} == 8)) && title_color="$reset" + ((${2:-7} == 8)) && subtitle_color="$reset" + + # If the second color is white use the first for the subtitle. + ((${2:-7} == 7)) && subtitle_color="$(color "$1")" + ((${1:-1} == 7)) && title_color="$reset" + else + title_color="$(color "${colors[0]}")" + at_color="$(color "${colors[1]}")" + underline_color="$(color "${colors[2]}")" + subtitle_color="$(color "${colors[3]}")" + colon_color="$(color "${colors[4]}")" + info_color="$(color "${colors[5]}")" + fi + + # Bar colors. + if [[ "$bar_color_elapsed" == "distro" ]]; then + bar_color_elapsed="$(color fg)" + else + bar_color_elapsed="$(color "$bar_color_elapsed")" + fi + + case ${bar_color_total}${1} in + distro[736]) bar_color_total=$(color "$1") ;; + distro[0-9]) bar_color_total=$(color "$2") ;; + *) bar_color_total=$(color "$bar_color_total") ;; + esac +} + +color() { + case $1 in + [0-6]) printf '%b\e[3%sm' "$reset" "$1" ;; + 7 | "fg") printf '\e[37m%b' "$reset" ;; + *) printf '\e[38;5;%bm' "$1" ;; + esac +} + +# OTHER + +stdout() { + image_backend="off" + unset subtitle_color colon_color info_color underline_color bold title_color at_color \ + text_padding zws reset color_blocks bar_color_elapsed bar_color_total \ + c1 c2 c3 c4 c5 c6 c7 c8 +} + +err() { + err+="$(color 1)[!]${reset} $1 +" +} + +get_full_path() { + # This function finds the absolute path from a relative one. + # For example "Pictures/Wallpapers" --> "/home/dylan/Pictures/Wallpapers" + + # If the file exists in the current directory, stop here. + [[ -f "${PWD}/${1}" ]] && { printf '%s\n' "${PWD}/${1}"; return; } + + ! cd "${1%/*}" && { + err "Error: Directory '${1%/*}' doesn't exist or is inaccessible" + err " Check that the directory exists or try another directory." + exit 1 + } + + local full_dir="${1##*/}" + + # Iterate down a (possible) chain of symlinks. + while [[ -L "$full_dir" ]]; do + full_dir="$(readlink "$full_dir")" + cd "${full_dir%/*}" || exit + full_dir="${full_dir##*/}" + done + + # Final directory. + full_dir="$(pwd -P)/${1/*\/}" + + [[ -e "$full_dir" ]] && printf '%s\n' "$full_dir" +} + +get_user_config() { + # --config /path/to/config.conf + if [[ -f "$config_file" ]]; then + source "$config_file" + err "Config: Sourced user config. (${config_file})" + return + + elif [[ -f "${XDG_CONFIG_HOME}/neofetch/config.conf" ]]; then + source "${XDG_CONFIG_HOME}/neofetch/config.conf" + err "Config: Sourced user config. (${XDG_CONFIG_HOME}/neofetch/config.conf)" + + elif [[ -f "${XDG_CONFIG_HOME}/neofetch/config" ]]; then + source "${XDG_CONFIG_HOME}/neofetch/config" + err "Config: Sourced user config. (${XDG_CONFIG_HOME}/neofetch/config)" + + elif [[ -z "$no_config" ]]; then + config_file="${XDG_CONFIG_HOME}/neofetch/config.conf" + + # The config file doesn't exist, create it. + mkdir -p "${XDG_CONFIG_HOME}/neofetch/" + printf '%s\n' "$config" > "$config_file" + fi +} + +bar() { + # Get the values. + elapsed="$(($1 * bar_length / $2))" + + # Create the bar with spaces. + printf -v prog "%${elapsed}s" + printf -v total "%$((bar_length - elapsed))s" + + # Set the colors and swap the spaces for $bar_char_. + bar+="${bar_color_elapsed}${prog// /${bar_char_elapsed}}" + bar+="${bar_color_total}${total// /${bar_char_total}}" + + # Borders. + [[ "$bar_border" == "on" ]] && \ + bar="$(color fg)[${bar}$(color fg)]" + + printf "%b" "${bar}${info_color}" +} + +cache() { + if [[ "$2" ]]; then + mkdir -p "${cache_dir}/neofetch" + printf "%s" "${1/*-}=\"$2\"" > "${cache_dir}/neofetch/${1/*-}" + fi +} + +get_cache_dir() { + case $os in + "Mac OS X"|"macOS") cache_dir="/Library/Caches" ;; + *) cache_dir="/tmp" ;; + esac +} + +kde_config_dir() { + # If the user is using KDE get the KDE + # configuration directory. + if [[ "$kde_config_dir" ]]; then + return + + elif type -p kf5-config &>/dev/null; then + kde_config_dir="$(kf5-config --path config)" + + elif type -p kde4-config &>/dev/null; then + kde_config_dir="$(kde4-config --path config)" + + elif type -p kde-config &>/dev/null; then + kde_config_dir="$(kde-config --path config)" + + elif [[ -d "${HOME}/.kde4" ]]; then + kde_config_dir="${HOME}/.kde4/share/config" + + elif [[ -d "${HOME}/.kde3" ]]; then + kde_config_dir="${HOME}/.kde3/share/config" + fi + + kde_config_dir="${kde_config_dir/$'/:'*}" +} + +term_padding() { + # Get terminal padding to properly align cursor. + [[ -z "$term" ]] && get_term + + case $term in + urxvt*|rxvt-unicode) + [[ $xrdb ]] || xrdb=$(xrdb -query) + + [[ $xrdb != *internalBorder:* ]] && + return + + padding=${xrdb/*internalBorder:} + padding=${padding/$'\n'*} + + [[ $padding =~ ^[0-9]+$ ]] || + padding= + ;; + esac +} + +dynamic_prompt() { + [[ "$image_backend" == "off" ]] && { printf '\n'; return; } + [[ "$image_backend" != "ascii" ]] && ((lines=(height + yoffset) / font_height + 1)) + [[ "$image_backend" == "w3m" ]] && ((lines=lines + padding / font_height + 1)) + + # If the ascii art is taller than the info. + ((lines=lines>info_height?lines-info_height+1:1)) + + printf -v nlines "%${lines}s" + printf "%b" "${nlines// /\\n}" +} + +cache_uname() { + # Cache the output of uname so we don't + # have to spawn it multiple times. + IFS=" " read -ra uname <<< "$(uname -srm)" + + kernel_name="${uname[0]}" + kernel_version="${uname[1]}" + kernel_machine="${uname[2]}" + + if [[ "$kernel_name" == "Darwin" ]]; then + # macOS can report incorrect versions unless this is 0. + # https://github.com/dylanaraps/neofetch/issues/1607 + export SYSTEM_VERSION_COMPAT=0 + + IFS=$'\n' read -d "" -ra sw_vers <<< "$(awk -F'<|>' '/key|string/ {print $3}' \ + "/System/Library/CoreServices/SystemVersion.plist")" + for ((i=0;i<${#sw_vers[@]};i+=2)) { + case ${sw_vers[i]} in + ProductName) darwin_name=${sw_vers[i+1]} ;; + ProductVersion) osx_version=${sw_vers[i+1]} ;; + ProductBuildVersion) osx_build=${sw_vers[i+1]} ;; + esac + } + fi +} + +get_ppid() { + # Get parent process ID of PID. + case $os in + "Windows") + ppid="$(ps -p "${1:-$PPID}" | awk '{printf $2}')" + ppid="${ppid/PPID}" + ;; + + "Linux") + ppid="$(grep -i -F "PPid:" "/proc/${1:-$PPID}/status")" + ppid="$(trim "${ppid/PPid:}")" + ;; + + *) + ppid="$(ps -p "${1:-$PPID}" -o ppid=)" + ;; + esac + + printf "%s" "$ppid" +} + +get_process_name() { + # Get PID name. + case $os in + "Windows") + name="$(ps -p "${1:-$PPID}" | awk '{printf $8}')" + name="${name/COMMAND}" + name="${name/*\/}" + ;; + + "Linux") + name="$(< "/proc/${1:-$PPID}/comm")" + ;; + + *) + name="$(ps -p "${1:-$PPID}" -o comm=)" + ;; + esac + + printf "%s" "$name" +} + +decode_url() { + decode="${1//+/ }" + printf "%b" "${decode//%/\\x}" +} + +# FINISH UP + +usage() { printf "%s" "\ +Usage: neofetch func_name --option \"value\" --option \"value\" + +Neofetch is a CLI system information tool written in BASH. Neofetch +displays information about your system next to an image, your OS logo, +or any ASCII file of your choice. + +NOTE: Every launch flag has a config option. + +Options: + +INFO: + func_name Specify a function name (second part of info() from config) to + quickly display only that function's information. + + Example: neofetch uptime --uptime_shorthand tiny + + Example: neofetch uptime disk wm memory + + This can be used in bars and scripts like so: + + memory=\"\$(neofetch memory)\"; memory=\"\${memory##*: }\" + + For multiple outputs at once (each line of info in an array): + + IFS=\$'\\n' read -d \"\" -ra info < <(neofetch memory uptime wm) + + info=(\"\${info[@]##*: }\") + + --disable infoname Allows you to disable an info line from appearing + in the output. 'infoname' is the function name from the + 'print_info()' function inside the config file. + For example: 'info \"Memory\" memory' would be '--disable memory' + + NOTE: You can supply multiple args. eg. 'neofetch --disable cpu gpu' + + --title_fqdn on/off Hide/Show Fully Qualified Domain Name in title. + --package_managers on/off Hide/Show Package Manager names . (on, tiny, off) + --os_arch on/off Hide/Show OS architecture. + --speed_type type Change the type of cpu speed to display. + Possible values: current, min, max, bios, + scaling_current, scaling_min, scaling_max + + NOTE: This only supports Linux with cpufreq. + + --speed_shorthand on/off Whether or not to show decimals in CPU speed. + + NOTE: This flag is not supported in systems with CPU speed less than + 1 GHz. + + --cpu_brand on/off Enable/Disable CPU brand in output. + --cpu_cores type Whether or not to display the number of CPU cores + Possible values: logical, physical, off + + NOTE: 'physical' doesn't work on BSD. + + --cpu_speed on/off Hide/Show cpu speed. + --cpu_temp C/F/off Hide/Show cpu temperature. + + NOTE: This only works on Linux and BSD. + + NOTE: For FreeBSD and NetBSD-based systems, you need to enable + coretemp kernel module. This only supports newer Intel processors. + + --distro_shorthand on/off Shorten the output of distro (on, tiny, off) + + NOTE: This option won't work in Windows (Cygwin) + + --kernel_shorthand on/off Shorten the output of kernel + + NOTE: This option won't work in BSDs (except PacBSD and PC-BSD) + + --uptime_shorthand on/off Shorten the output of uptime (on, tiny, off) + --refresh_rate on/off Whether to display the refresh rate of each monitor + Unsupported on Windows + --gpu_brand on/off Enable/Disable GPU brand in output. (AMD/NVIDIA/Intel) + --gpu_type type Which GPU to display. (all, dedicated, integrated) + + NOTE: This only supports Linux. + + --de_version on/off Show/Hide Desktop Environment version + --gtk_shorthand on/off Shorten output of gtk theme/icons + --gtk2 on/off Enable/Disable gtk2 theme/font/icons output + --gtk3 on/off Enable/Disable gtk3 theme/font/icons output + --shell_path on/off Enable/Disable showing \$SHELL path + --shell_version on/off Enable/Disable showing \$SHELL version + --disk_show value Which disks to display. + Possible values: '/', '/dev/sdXX', '/path/to/mount point' + + NOTE: Multiple values can be given. (--disk_show '/' '/dev/sdc1') + + --disk_subtitle type What information to append to the Disk subtitle. + Takes: name, mount, dir, none + + 'name' shows the disk's name (sda1, sda2, etc) + + 'mount' shows the disk's mount point (/, /mnt/Local Disk, etc) + + 'dir' shows the basename of the disks's path. (/, Local Disk, etc) + + 'none' shows only 'Disk' or the configured title. + + --disk_percent on/off Hide/Show disk percent. + + --ip_host url URL to query for public IP + --ip_timeout int Public IP timeout (in seconds). + --ip_interface value Interface(s) to use for local IP + --song_format format Print the song data in a specific format (see config file). + --song_shorthand on/off Print the Artist/Album/Title on separate lines. + --memory_percent on/off Display memory percentage. + --memory_unit kib/mib/gib Memory output unit. + --music_player player-name Manually specify a player to use. + Available values are listed in the config file + +TEXT FORMATTING: + --colors x x x x x x Changes the text colors in this order: + title, @, underline, subtitle, colon, info + --underline on/off Enable/Disable the underline. + --underline_char char Character to use when underlining title + --bold on/off Enable/Disable bold text + --separator string Changes the default ':' separator to the specified string. + +COLOR BLOCKS: + --color_blocks on/off Enable/Disable the color blocks + --col_offset auto/num Left-padding of color blocks + --block_width num Width of color blocks in spaces + --block_height num Height of color blocks in lines + --block_range num num Range of colors to print as blocks + +BARS: + --bar_char 'elapsed char' 'total char' + Characters to use when drawing bars. + --bar_border on/off Whether or not to surround the bar with '[]' + --bar_length num Length in spaces to make the bars. + --bar_colors num num Colors to make the bar. + Set in this order: elapsed, total + --memory_display mode Bar mode. + Possible values: bar, infobar, barinfo, off + --battery_display mode Bar mode. + Possible values: bar, infobar, barinfo, off + --disk_display mode Bar mode. + Possible values: bar, infobar, barinfo, off + +IMAGE BACKEND: + --backend backend Which image backend to use. + Possible values: 'ascii', 'caca', 'catimg', 'chafa', 'jp2a', + 'iterm2', 'off', 'sixel', 'tycat', 'w3m', 'kitty', 'viu' + --source source Which image or ascii file to use. + Possible values: 'auto', 'ascii', 'wallpaper', '/path/to/img', + '/path/to/ascii', '/path/to/dir/', 'command output' [ascii] + + --ascii source Shortcut to use 'ascii' backend. + + NEW: neofetch --ascii \"\$(fortune | cowsay -W 30)\" + + --caca source Shortcut to use 'caca' backend. + --catimg source Shortcut to use 'catimg' backend. + --chafa source Shortcut to use 'chafa' backend. + --iterm2 source Shortcut to use 'iterm2' backend. + --jp2a source Shortcut to use 'jp2a' backend. + --kitty source Shortcut to use 'kitty' backend. + --pot source Shortcut to use 'pot' backend. + --pixterm source Shortcut to use 'pixterm' backend. + --sixel source Shortcut to use 'sixel' backend. + --termpix source Shortcut to use 'termpix' backend. + --tycat source Shortcut to use 'tycat' backend. + --w3m source Shortcut to use 'w3m' backend. + --ueberzug source Shortcut to use 'ueberzug' backend + --viu source Shortcut to use 'viu' backend + --off Shortcut to use 'off' backend (Disable ascii art). + + NOTE: 'source; can be any of the following: 'auto', 'ascii', 'wallpaper', '/path/to/img', + '/path/to/ascii', '/path/to/dir/' + +ASCII: + --ascii_colors x x x x x x Colors to print the ascii art + --ascii_distro distro Which Distro's ascii art to print + + NOTE: AIX, Hash, Alpine, AlterLinux, Amazon, Anarchy, Android, + instantOS, Antergos, antiX, \"AOSC OS\", \"AOSC OS/Retro\", + Apricity, ArchCraft, ArcoLinux, ArchBox, ARCHlabs, ArchStrike, + XFerience, ArchMerge, Arch, Artix, Arya, Bedrock, Bitrig, + BlackArch, BLAG, BlankOn, BlueLight, Bodhi, bonsai, BSD, BunsenLabs, + Calculate, Carbs, CentOS, Chakra, ChaletOS, Chapeau, Chrom, + Cleanjaro, ClearOS, Clear_Linux, Clover, Condres, Container_Linux, + Crystal Linux, CRUX, Cucumber, dahlia, Debian, Deepin, DesaOS, Devuan, + DracOS, DarkOs, Itc, DragonFly, Drauger, Elementary, EndeavourOS, Endless, + EuroLinux, Exherbo, Fedora, Feren, FreeBSD, FreeMiNT, Frugalware, + Funtoo, GalliumOS, Garuda, Gentoo, Pentoo, gNewSense, GNOME, GNU, + GoboLinux, Grombyang, Guix, Haiku, Huayra, Hyperbola, iglunix, janus, Kali, Drunk, + KaOS, KDE_neon, Kibojoe, Kogaion, Korora, KSLinux, Kubuntu, LEDE, + LaxerOS, LibreELEC, LFS, Linux_Lite, LMDE, Lubuntu, Lunar, macos, + Mageia, MagpieOS, Mandriva, Manjaro, TeArch, Maui, Mer, Minix, LinuxMint, + Live_Raizo, MX_Linux, Namib, Neptune, NetBSD, Netrunner, Nitrux, + NixOS, Nurunner, NuTyX, OBRevenge, OpenBSD, openEuler, OpenIndiana, + openmamba, OpenMandriva, OpenStage, OpenWrt, osmc, Oracle, + OS Elbrus, PacBSD, Parabola, Pardus, Parrot, Parsix, TrueOS, + PCLinuxOS, Pengwin, Peppermint, Pisi, popos, Porteus, PostMarketOS, + Proxmox, PuffOS, Puppy, PureOS, Qubes, Quibian, Radix, Raspbian, Reborn_OS, + Redstar, Redcore, Redhat, Refracted_Devuan, Regata, Regolith, Rosa, + sabotage, Sabayon, Sailfish, SalentOS, Scientific, Septor, + SereneLinux, SharkLinux, Siduction, Slackware, SliTaz, SmartOS, + Solus, Source_Mage, Sparky, Star, SteamOS, SunOS, openSUSE_Leap, + t2, openSUSE_Tumbleweed, openSUSE, SwagArch, Tails, Trisquel, + Ubuntu-Cinnamon, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, + Ubuntu-Studio, Ubuntu, Univention, Venom, Void, VNux, LangitKetujuh, semc, + Obarun, windows10, Windows7, Xubuntu, Zorin, and IRIX have ascii logos. + + NOTE: Arch, Ubuntu, Redhat, Fedora and Dragonfly have 'old' logo variants. + + NOTE: Use '{distro name}_old' to use the old logos. + + NOTE: Ubuntu has flavor variants. + + NOTE: Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME, + Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors. + + NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu, + CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android, + Artix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola, + Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS, + Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian, + postmarketOS, and Void have a smaller logo variant. + + NOTE: Use '{distro name}_small' to use the small variants. + + --ascii_bold on/off Whether or not to bold the ascii logo. + -L, --logo Hide the info text and only show the ascii logo. + +IMAGE: + --loop Redraw the image constantly until Ctrl+C is used. This fixes issues + in some terminals emulators when using image mode. + --size 00px | --size 00% How to size the image. + Possible values: auto, 00px, 00%, none + --catimg_size 1/2 Change the resolution of catimg. + --crop_mode mode Which crop mode to use + Takes the values: normal, fit, fill + --crop_offset value Change the crop offset for normal mode. + Possible values: northwest, north, northeast, + west, center, east, southwest, south, southeast + + --xoffset px How close the image will be to the left edge of the + window. This only works with w3m. + --yoffset px How close the image will be to the top edge of the + window. This only works with w3m. + --bg_color color Background color to display behind transparent image. + This only works with w3m. + --gap num Gap between image and text. + + NOTE: --gap can take a negative value which will move the text + closer to the left side. + + --clean Delete cached files and thumbnails. + +OTHER: + --config /path/to/config Specify a path to a custom config file + --config none Launch the script without a config file + --no_config Don't create the user config file. + --print_config Print the default config file to stdout. + --stdout Turn off all colors and disables any ASCII/image backend. + --help Print this text and exit + --version Show neofetch version + -v Display error messages. + -vv Display a verbose log for error reporting. + +DEVELOPER: + --gen-man Generate a manpage for Neofetch in your PWD. (Requires GNU help2man) + + +Report bugs to https://github.com/dylanaraps/neofetch/issues + +" +exit 1 +} + +get_args() { + # Check the commandline flags early for '--config'. + [[ "$*" != *--config* && "$*" != *--no_config* ]] && get_user_config + + while [[ "$1" ]]; do + case $1 in + # Info + "--title_fqdn") title_fqdn="$2" ;; + "--package_managers") package_managers="$2" ;; + "--os_arch") os_arch="$2" ;; + "--cpu_cores") cpu_cores="$2" ;; + "--cpu_speed") cpu_speed="$2" ;; + "--speed_type") speed_type="$2" ;; + "--speed_shorthand") speed_shorthand="$2" ;; + "--distro_shorthand") distro_shorthand="$2" ;; + "--kernel_shorthand") kernel_shorthand="$2" ;; + "--uptime_shorthand") uptime_shorthand="$2" ;; + "--cpu_brand") cpu_brand="$2" ;; + "--gpu_brand") gpu_brand="$2" ;; + "--gpu_type") gpu_type="$2" ;; + "--refresh_rate") refresh_rate="$2" ;; + "--de_version") de_version="$2" ;; + "--gtk_shorthand") gtk_shorthand="$2" ;; + "--gtk2") gtk2="$2" ;; + "--gtk3") gtk3="$2" ;; + "--shell_path") shell_path="$2" ;; + "--shell_version") shell_version="$2" ;; + "--ip_host") public_ip_host="$2" ;; + "--ip_timeout") public_ip_timeout="$2" ;; + "--ip_interface") + unset local_ip_interface + for arg in "$@"; do + case "$arg" in + "--ip_interface") ;; + "-"*) break ;; + *) local_ip_interface+=("$arg") ;; + esac + done + ;; + + "--song_format") song_format="$2" ;; + "--song_shorthand") song_shorthand="$2" ;; + "--music_player") music_player="$2" ;; + "--memory_percent") memory_percent="$2" ;; + "--memory_unit") memory_unit="$2" ;; + "--cpu_temp") + cpu_temp="$2" + [[ "$cpu_temp" == "on" ]] && cpu_temp="C" + ;; + + "--disk_subtitle") disk_subtitle="$2" ;; + "--disk_percent") disk_percent="$2" ;; + "--disk_show") + unset disk_show + for arg in "$@"; do + case $arg in + "--disk_show") ;; + "-"*) break ;; + *) disk_show+=("$arg") ;; + esac + done + ;; + + "--disable") + for func in "$@"; do + case $func in + "--disable") continue ;; + "-"*) break ;; + *) + ((bash_version >= 4)) && func="${func,,}" + unset -f "get_$func" + ;; + esac + done + ;; + + # Text Colors + "--colors") + unset colors + for arg in "$2" "$3" "$4" "$5" "$6" "$7"; do + case $arg in + "-"*) break ;; + *) colors+=("$arg") ;; + esac + done + colors+=(7 7 7 7 7 7) + ;; + + # Text Formatting + "--underline") underline_enabled="$2" ;; + "--underline_char") underline_char="$2" ;; + "--bold") bold="$2" ;; + "--separator") separator="$2" ;; + + # Color Blocks + "--color_blocks") color_blocks="$2" ;; + "--block_range") block_range=("$2" "$3") ;; + "--block_width") block_width="$2" ;; + "--block_height") block_height="$2" ;; + "--col_offset") col_offset="$2" ;; + + # Bars + "--bar_char") + bar_char_elapsed="$2" + bar_char_total="$3" + ;; + + "--bar_border") bar_border="$2" ;; + "--bar_length") bar_length="$2" ;; + "--bar_colors") + bar_color_elapsed="$2" + bar_color_total="$3" + ;; + + "--memory_display") memory_display="$2" ;; + "--battery_display") battery_display="$2" ;; + "--disk_display") disk_display="$2" ;; + + # Image backend + "--backend") image_backend="$2" ;; + "--source") image_source="$2" ;; + "--ascii" | "--caca" | "--catimg" | "--chafa" | "--jp2a" | "--iterm2" | "--off" |\ + "--pot" | "--pixterm" | "--sixel" | "--termpix" | "--tycat" | "--w3m" | "--kitty" |\ + "--ueberzug" | "--viu") + image_backend="${1/--}" + case $2 in + "-"* | "") ;; + *) image_source="$2" ;; + esac + ;; + + # Image options + "--loop") image_loop="on" ;; + "--image_size" | "--size") image_size="$2" ;; + "--catimg_size") catimg_size="$2" ;; + "--crop_mode") crop_mode="$2" ;; + "--crop_offset") crop_offset="$2" ;; + "--xoffset") xoffset="$2" ;; + "--yoffset") yoffset="$2" ;; + "--background_color" | "--bg_color") background_color="$2" ;; + "--gap") gap="$2" ;; + "--clean") + [[ -d "$thumbnail_dir" ]] && rm -rf "$thumbnail_dir" + rm -rf "/Library/Caches/neofetch/" + rm -rf "/tmp/neofetch/" + exit + ;; + + "--ascii_colors") + unset ascii_colors + for arg in "$2" "$3" "$4" "$5" "$6" "$7"; do + case $arg in + "-"*) break ;; + *) ascii_colors+=("$arg") + esac + done + ascii_colors+=(7 7 7 7 7 7) + ;; + + "--ascii_distro") + image_backend="ascii" + ascii_distro="$2" + ;; + + "--ascii_bold") ascii_bold="$2" ;; + "--logo" | "-L") + image_backend="ascii" + print_info() { printf '\n'; } + ;; + + # Other + "--config") + case $2 in + "none" | "off" | "") ;; + *) + config_file="$(get_full_path "$2")" + get_user_config + ;; + esac + ;; + "--no_config") no_config="on" ;; + "--stdout") stdout="on" ;; + "-v") verbose="on" ;; + "--print_config") printf '%s\n' "$config"; exit ;; + "-vv") set -x; verbose="on" ;; + "--help") usage ;; + "--version") + printf '%s\n' "Neofetch $version" + exit 1 + ;; + "--gen-man") + help2man -n "A fast, highly customizable system info script" \ + -N ./neofetch -o neofetch.1 + exit 1 + ;; + + "--json") + json="on" + unset -f get_title get_cols get_underline + + printf '{\n' + print_info 2>/dev/null + printf ' %s\n' "\"Version\": \"${version}\"" + printf '}\n' + exit + ;; + + "--travis") + print_info() { + info title + info underline + + info "OS" distro + info "Host" model + info "Kernel" kernel + info "Uptime" uptime + info "Packages" packages + info "Shell" shell + info "Resolution" resolution + info "DE" de + info "WM" wm + info "WM Theme" wm_theme + info "Theme" theme + info "Icons" icons + info "Terminal" term + info "Terminal Font" term_font + info "CPU" cpu + info "GPU" gpu + info "GPU Driver" gpu_driver + info "Memory" memory + + info "Disk" disk + info "Battery" battery + info "Font" font + info "Song" song + info "Local IP" local_ip + info "Public IP" public_ip + info "Users" users + + info cols + + # Testing. + prin "prin" + prin "prin" "prin" + + # Testing no subtitles. + info uptime + info disk + } + + refresh_rate="on" + shell_version="on" + memory_display="infobar" + disk_display="infobar" + cpu_temp="C" + + # Known implicit unused variables. + mpc_args=() + printf '%s\n' "$kernel $icons $font $battery $locale ${mpc_args[*]}" + ;; + esac + + shift + done +} + +get_simple() { + while [[ "$1" ]]; do + [[ "$(type -t "get_$1")" == "function" ]] && { + get_distro + stdout + simple=1 + info "$1" "$1" + } + shift + done + ((simple)) && exit +} + +old_functions() { + # Removed functions for backwards compatibility. + get_line_break() { :; } + get_cpu_usage() { :; } +} + +get_distro_ascii() { + # This function gets the distro ascii art and colors. + # + # $ascii_distro is the same as $distro. + case $(trim "$ascii_distro") in + "AIX"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} `:+ssssossossss+-` + .oys///oyhddddhyo///sy+. + /yo:+hNNNNNNNNNNNNNNNNh+:oy/ + :h/:yNNNNNNNNNNNNNNNNNNNNNNy-+h: + `ys.yNNNNNNNNNNNNNNNNNNNNNNNNNNy.ys + `h+-mNNNNNNNNNNNNNNNNNNNNNNNNNNNNm-oh + h+-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN.oy +/d`mNNNNNNN/::mNNNd::m+:/dNNNo::dNNNd`m: +h//NNNNNNN: . .NNNh mNo od. -dNNNNN:+y +N.sNNNNNN+ -N/ -NNh mNNd. sNNNNNNNo-m +N.sNNNNNs +oo /Nh mNNs` ` /mNNNNNNo-m +h//NNNNh ossss` +h md- .hm/ `sNNNNN:+y +:d`mNNN+/yNNNNNd//y//h//oNNNNy//sNNNd`m- + yo-NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNm.ss + `h+-mNNNNNNNNNNNNNNNNNNNNNNNNNNNNm-oy + sy.yNNNNNNNNNNNNNNNNNNNNNNNNNNs.yo + :h+-yNNNNNNNNNNNNNNNNNNNNNNs-oh- + :ys:/yNNNNNNNNNNNNNNNmy/:sy: + .+ys///osyhhhhys+///sy+. + -/osssossossso/- +EOF + ;; + + "Aperio GNU/Linux"*) + set_colors 255 + read -rd '' ascii_data <<'EOF' +${c2} + _.._ _ ._.. _ +(_][_)(/,[ |(_) + | GNU/Linux +EOF + ;; + + "Hash"*) + set_colors 123 + read -rd '' ascii_data <<'EOF' +${c1} + + + ###### + + ### ###### ### + ##### ###### ##### + ###### ###### ###### + +####### '"###### '"######## +####### ###### ######## +####### ###### ######## + + ###### '"###### '"###### + ##### ###### ##### + ### ###### ### + ~ ###### ~ + +EOF + ;; + + "AlmaLinux"*) + set_colors 1 3 4 2 6 + read -rd '' ascii_data <<'EOF' +${c1} 'c:. +${c1} lkkkx, .. ${c2}.. ,cc, +${c1} okkkk:ckkx' ${c2}.lxkkx.okkkkd +${c1} .:llcokkx' ${c2}:kkkxkko:xkkd, +${c1} .xkkkkdood: ${c2};kx, .lkxlll; +${c1} xkkx. ${c2}xk' xkkkkk: +${c1} 'xkx. ${c2}xd .....,. +${c3} .. ${c1}:xkl' ${c2}:c ..''.. +${c3} .dkx' ${c1}.:ldl:'. ${c2}' ${c4}':lollldkkxo; +${c3} .''lkkko' ${c4}ckkkx. +${c3}'xkkkd:kkd. .. ${c5};' ${c4}:kkxo. +${c3},xkkkd;kk' ,d; ${c5}ld. ${c4}':dkd::cc, +${c3} .,,.;xkko'.';lxo. ${c5}dx, ${c4}:kkk'xkkkkc +${c3} 'dkkkkkxo:. ${c5};kx ${c4}.kkk:;xkkd. +${c3} ..... ${c5}.;dk:. ${c5}lkk. ${c4}:;, + ${c5}:kkkkkkkdoxkkx + ,c,,;;;:xkkd. + ;kkkkl... + ;kkkkl + ,od; +EOF + ;; + + "alpine_small") + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c1} /\\ /\\ + /${c2}/ ${c1}\\ \\ + /${c2}/ ${c1}\\ \\ +/${c2}// ${c1}\\ \\ +${c2}// ${c1}\\ \\ + \\ +EOF + ;; + + "Alpine"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} .hddddddddddddddddddddddh. + :dddddddddddddddddddddddddd: + /dddddddddddddddddddddddddddd/ + +dddddddddddddddddddddddddddddd+ + `sdddddddddddddddddddddddddddddddds` + `ydddddddddddd++hdddddddddddddddddddy` +.hddddddddddd+` `+ddddh:-sdddddddddddh. +hdddddddddd+` `+y: .sddddddddddh +ddddddddh+` `//` `.` -sddddddddd +ddddddh+` `/hddh/` `:s- -sddddddd +ddddh+` `/+/dddddh/` `+s- -sddddd +ddd+` `/o` :dddddddh/` `oy- .yddd +hdddyo+ohddyosdddddddddho+oydddy++ohdddh +.hddddddddddddddddddddddddddddddddddddh. + `yddddddddddddddddddddddddddddddddddy` + `sdddddddddddddddddddddddddddddddds` + +dddddddddddddddddddddddddddddd+ + /dddddddddddddddddddddddddddd/ + :dddddddddddddddddddddddddd: + .hddddddddddddddddddddddh. +EOF + ;; + + "Alter"*) + set_colors 6 6 + read -rd '' ascii_data <<'EOF' +${c1} %, + ^WWWw + 'wwwwww + !wwwwwwww + #`wwwwwwwww + @wwwwwwwwwwww + wwwwwwwwwwwwwww + wwwwwwwwwwwwwwwww + wwwwwwwwwwwwwwwwwww + wwwwwwwwwwwwwwwwwwww, + w~1i.wwwwwwwwwwwwwwwww, + 3~:~1lli.wwwwwwwwwwwwwwww. + :~~:~?ttttzwwwwwwwwwwwwwwww + #<~:~~~~?llllltO-.wwwwwwwwwww + #~:~~:~:~~?ltlltlttO-.wwwwwwwww + @~:~~:~:~:~~(zttlltltlOda.wwwwwww + @~:~~: ~:~~:~:(zltlltlO a,wwwwww + 8~~:~~:~~~~:~~~~_1ltltu ,www + 5~~:~~:~~:~~:~~:~~~_1ltq N,, + g~:~~:~~~:~~:~~:~:~~~~1q N, +EOF + ;; + + "Amazon"*) + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} `-/oydNNdyo:.` + `.:+shmMMMMMMMMMMMMMMmhs+:.` + -+hNNMMMMMMMMMMMMMMMMMMMMMMNNho- +.`` -/+shmNNMMMMMMNNmhs+/- ``. +dNmhs+:. `.:/oo/:.` .:+shmNd +dMMMMMMMNdhs+:.. ..:+shdNMMMMMMMd +dMMMMMMMMMMMMMMNds odNMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +dMMMMMMMMMMMMMMMMh yMMMMMMMMMMMMMMMMd +.:+ydNMMMMMMMMMMMh yMMMMMMMMMMMNdy+:. + `.:+shNMMMMMh yMMMMMNhs+:`` + `-+shy shs+:` +EOF + ;; + "Anarchy"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' + ${c2}..${c1} + ${c2}..${c1} + ${c2}:..${c1} + ${c2}:+++.${c1} + .:::++${c2}++++${c1}+::. + .:+######${c2}++++${c1}######+:. + .+#########${c2}+++++${c1}##########:. + .+##########${c2}+++++++${c1}##${c2}+${c1}#########+. + +###########${c2}+++++++++${c1}############: + +##########${c2}++++++${c1}#${c2}++++${c1}#${c2}+${c1}###########+ + +###########${c2}+++++${c1}###${c2}++++${c1}#${c2}+${c1}###########+ + :##########${c2}+${c1}#${c2}++++${c1}####${c2}++++${c1}#${c2}+${c1}############: + ###########${c2}+++++${c1}#####${c2}+++++${c1}#${c2}+${c1}###${c2}++${c1}######+ +.##########${c2}++++++${c1}#####${c2}++++++++++++${c1}#######. +.##########${c2}+++++++++++++++++++${c1}###########. + #####${c2}++++++++++++++${c1}###${c2}++++++++${c1}#########+ + :###${c2}++++++++++${c1}#########${c2}+++++++${c1}#########: + +######${c2}+++++${c1}##########${c2}++++++++${c1}#######+ + +####${c2}+++++${c1}###########${c2}+++++++++${c1}#####+ + :##${c2}++++++${c1}############${c2}++++++++++${c1}##: + .${c2}++++++${c1}#############${c2}++++++++++${c1}+. + :${c2}++++${c1}###############${c2}+++++++${c1}:: + .${c2}++. .:+${c1}##############${c2}+++++++${c1}.. + ${c2}.:.${c1} ..::++++++::..:${c2}++++${c1}+. + ${c2}.${c1} ${c2}.:+++${c1}. + ${c2}.:${c1}: + ${c2}..${c1} + ${c2}..${c1} +EOF + ;; + + "android_small"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} ;, ,; + ';,.-----.,;' + ,' ', + / O O \\ +| | +'-----------------' +EOF + ;; + + "Android"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} -o o- + +hydNNNNdyh+ + +mMMMMMMMMMMMMm+ + `dMM${c2}m:${c1}NMMMMMMN${c2}:m${c1}MMd` + hMMMMMMMMMMMMMMMMMMh + .. yyyyyyyyyyyyyyyyyyyy .. +.mMMm`MMMMMMMMMMMMMMMMMMMM`mMMm. +:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: +:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: +:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: +:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM: +-MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM- + +yy+ MMMMMMMMMMMMMMMMMMMM +yy+ + mMMMMMMMMMMMMMMMMMMm + `/++MMMMh++hMMMM++/` + MMMMo oMMMM + MMMMo oMMMM + oNMm- -mMNs +EOF + ;; + + "instantOS"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' + +${c1} + 'cx0XWWMMWNKOd:'. + .;kNMMMMMMMMMMMMMWNKd' + 'kNMMMMMMWNNNWMMMMMMMMXo. +,0MMMMMW0o;'..,:dKWMMMMMWx. +OMMMMMXl. .xNMMMMMNo +WMMMMNl .kWWMMMMO' +MMMMMX; oNWMMMMK, +NMMMMWo .OWMMMMMK, +kWMMMMNd. ,kWMMMMMMK, +'kWMMMMWXxl:;;:okNMMMMMMMMK, + .oXMMMMMMMWWWMMMMMMMMMMMMK, + 'oKWMMMMMMMMMMMMMMMMMMMK, + .;lxOKXXXXXXXXXXXXXXXO;...... + ................,d0000000kd:. + .kMMMMMMMMMW0; + .kMMMMMMMMMMMX + .xMMMMMMMMMMMW + cXMMMMMMMMMM0 + :0WMMMMMMNx, + .o0NMWNOc. +EOF + ;; + + "Antergos"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' +${c2} `.-/::/-`` + .-/osssssssso/. + :osyysssssssyyys+- + `.+yyyysssssssssyyyyy+. + `/syyyyyssssssssssyyyyys-` + `/yhyyyyysss${c1}++${c2}ssosyyyyhhy/` + .ohhhyyyys${c1}o++/+o${c2}so${c1}+${c2}syy${c1}+${c2}shhhho. + .shhhhys${c1}oo++//+${c2}sss${c1}+++${c2}yyy${c1}+s${c2}hhhhs. + -yhhhhs${c1}+++++++o${c2}ssso${c1}+++${c2}yyy${c1}s+o${c2}hhddy: + -yddhhy${c1}o+++++o${c2}syyss${c1}++++${c2}yyy${c1}yooy${c2}hdddy- + .yddddhs${c1}o++o${c2}syyyyys${c1}+++++${c2}yyhh${c1}sos${c2}hddddy` +`odddddhyosyhyyyyyy${c1}++++++${c2}yhhhyosddddddo +.dmdddddhhhhhhhyyyo${c1}+++++${c2}shhhhhohddddmmh. +ddmmdddddhhhhhhhso${c1}++++++${c2}yhhhhhhdddddmmdy +dmmmdddddddhhhyso${c1}++++++${c2}shhhhhddddddmmmmh +-dmmmdddddddhhys${c1}o++++o${c2}shhhhdddddddmmmmd- +.smmmmddddddddhhhhhhhhhdddddddddmmmms. + `+ydmmmdddddddddddddddddddmmmmdy/. + `.:+ooyyddddddddddddyyso+:.` +EOF + ;; + + "antiX"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} + \ + , - ~ ^ ~ - \ / + , ' \ ' , / + , \ '/ + , \ / , + ,___, \/ , + / | _ _ _|_ o /\ , +|, | / |/ | | | / \ , + \,_/\_/ | |_/|_/|_/_/ \, + , / ,\ + , / , ' \ + ' - , _ _ _ , ' +EOF + ;; + + "AOSC OS/Retro"*) + set_colors 4 7 1 3 + read -rd '' ascii_data <<'EOF' +${c2} ......... + ................... + .....................${c1}################${c2} + .............. ....${c1}################${c2} +.............. ...${c1}################${c2} +............. ..${c1}****************${c2} +............ . .${c1}****************${c2} +........... ... ${c1}................${c2} +.......... ..... ${c1}...............${c2} +......... ....... ... + .${c3}...... ${c2}. + ${c3}..... .....${c2}.... ${c4}........... + ${c3}.... ......${c2}. ${c4}........... + ${c3}... ....... ${c4}........... + ${c3}................ ${c4}*********** + ${c3}................ ${c4}########### + ${c3}**************** + ${c3}################ +EOF + ;; + + "AOSC OS"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} .:+syhhhhys+:. + .ohNMMMMMMMMMMMMMMNho. + `+mMMMMMMMMMMmdmNMMMMMMMMm+` + +NMMMMMMMMMMMM/ `./smMMMMMN+ + .mMMMMMMMMMMMMMMo -yMMMMMm. + :NMMMMMMMMMMMMMMMs .hMMMMN: + .NMMMMhmMMMMMMMMMMm+/- oMMMMN. + dMMMMs ./ymMMMMMMMMMMNy. sMMMMd +-MMMMN` oMMMMMMMMMMMN: `NMMMM- +/MMMMh NMMMMMMMMMMMMm hMMMM/ +/MMMMh NMMMMMMMMMMMMm hMMMM/ +-MMMMN` :MMMMMMMMMMMMy. `NMMMM- + dMMMMs .yNMMMMMMMMMMMNy/. sMMMMd + .NMMMMo -/+sMMMMMMMMMMMmMMMMN. + :NMMMMh. .MMMMMMMMMMMMMMMN: + .mMMMMMy- NMMMMMMMMMMMMMm. + +NMMMMMms/.` mMMMMMMMMMMMN+ + `+mMMMMMMMMNmddMMMMMMMMMMm+` + .ohNMMMMMMMMMMMMMMNho. + .:+syhhhhys+:. +EOF + ;; + + "Apricity"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} ./o- + ``...`` `:. -/: + `-+ymNMMMMMNmho-` :sdNNm/ + `+dMMMMMMMMMMMMMMMmo` sh:.:::- + /mMMMMMMMMMMMMMMMMMMMm/`sNd/ + oMMMMMMMMMMMMMMMMMMMMMMMs -` +:MMMMMMMMMMMMMMMMMMMMMMMMM/ +NMMMMMMMMMMMMMMMMMMMMMMMMMd +MMMMMMMmdmMMMMMMMMMMMMMMMMd +MMMMMMy` .mMMMMMMMMMMMmho:` +MMMMMMNo/sMMMMMMMNdy+-.`-/ +MMMMMMMMMMMMNdy+:.`.:ohmm: +MMMMMMMmhs+-.`.:+ymNMMMy. +MMMMMM/`.-/ohmNMMMMMMy- +MMMMMMNmNNMMMMMMMMmo. +MMMMMMMMMMMMMMMms:` +MMMMMMMMMMNds/. +dhhyys+/-` +EOF + ;; + + "Archcraft"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} -m: + :NMM+ .+ + +MMMMMo -NMy + sMMMMMMMy -MMMMh` + yMMMMMMMMMd` oMMMMd` + `dMMMMMMMMMMMm. /MMMMm- + .mMMMMMm-dMMMMMN- :NMMMN: + -NMMMMMd` yMMMMMN: .mMMMM/ + :NMMMMMy sMMMMMM+ `dMMMMo + +MMMMMMs +MMMMMMs `hMMMMy + oMMMMMMMds- :NMMMMMy sMMMMh` + yMMMMMNoydMMmo` -NMMMMMd` +MMMMd. + `dMMMMMN- `:yNNs` .mMMMMMm. /MMMMm- + .mMMMMMm. :hN/ `dMMMMMN- -NMMMN: + -NMMMMMd` -hh` `yMMMMMN: .mMMMM/ + :NMMMMMy `s` :h. oMMMMMM+ `----- + +MMMMMMo .dMm. `o. +MMMMMMo +sMMMMMM+ .mMMMN: :` :NMMMMMy +EOF + ;; + + "arcolinux_small"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' +${c2} A + ooo + ooooo + ooooooo + ooooooooo + ooooo ooooo + ooooo ooooo + ooooo ooooo + ooooo ${c1}${c2} + ooooo ${c1}${c2} +ooooo ${c1}${c2} +EOF + ;; + + "ArcoLinux"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' +${c2} /- + ooo: + yoooo/ + yooooooo + yooooooooo + yooooooooooo + .yooooooooooooo + .oooooooooooooooo + .oooooooarcoooooooo + .ooooooooo-oooooooooo + .ooooooooo- oooooooooo + :ooooooooo. :ooooooooo + :ooooooooo. :ooooooooo + :oooarcooo .oooarcooo + :ooooooooy .ooooooooo + :ooooooooo ${c1}/ooooooooooooooooooo${c2} + :ooooooooo ${c1}.-ooooooooooooooooo.${c2} + ooooooooo- ${c1}-ooooooooooooo.${c2} + ooooooooo- ${c1}.-oooooooooo.${c2} +ooooooooo. ${c1}-ooooooooo${c2} +EOF + ;; + + "arch_small") + set_colors 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} /\\ + / \\ + /\\ \\ +${c2} / \\ + / ,, \\ + / | | -\\ +/_-'' ''-_\\ +EOF + ;; + + "arch_old") + set_colors 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} __ + _=(SDGJT=_ + _GTDJHGGFCVS) + ,GTDJGGDTDFBGX0 +${c1} JDJDIJHRORVFSBSVL${c2}-=+=,_ +${c1} IJFDUFHJNXIXCDXDSV,${c2} "DEBL +${c1} [LKDSDJTDU=OUSCSBFLD.${c2} '?ZWX, +${c1} ,LMDSDSWH' `DCBOSI${c2} DRDS], +${c1} SDDFDFH' !YEWD,${c2} )HDROD +${c1} !KMDOCG &GSU|${c2}\_GFHRGO\' +${c1} HKLSGP'${c2} __${c1}\TKM0${c2}\GHRBV)' +${c1}JSNRVW'${c2} __+MNAEC${c1}\IOI,${c2}\BN' +${c1}HELK['${c2} __,=OFFXCBGHC${c1}\FD) +${c1}?KGHE ${c2}\_-#DASDFLSV='${c1} 'EF +'EHTI !H + `0F' '! +EOF + ;; + + "ArchBox"*) + set_colors 2 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ...:+oh/:::.. + ..-/oshhhhhh` `::::-. + .:/ohhhhhhhhhhhh` `-::::. + .+shhhhhhhhhhhhhhhhh` `.::-. + /`-:+shhhhhhhhhhhhhh` .-/+shh + / .:/ohhhhhhhhh` .:/ohhhhhhhh + / `-:+shhh` ..:+shhhhhhhhhhhh + / .:ohhhhhhhhhhhhhhhhhhh + / `hhhhhhhhhhhhhhhhhhhh + / `hhhhhhhhhhhhhhhhhhhh + / `hhhhhhhhhhhhhhhhhhhh + / `hhhhhhhhhhhhhhhhhhhh + / .+o+ `hhhhhhhhhhhhhhhhhhhh + / -hhhhh `hhhhhhhhhhhhhhhhhhhh + / ohhhhho `hhhhhhhhhhhhhhhhhhhh + /:::+`hhhhoos` `hhhhhhhhhhhhhhhhhs+` + `--/:` /: `hhhhhhhhhhhho/- + -/:. `hhhhhhs+:-` + ::::/ho/-` +EOF + ;; + + "ARCHlabs"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} 'c' + 'kKk, + .dKKKx. + .oKXKXKd. + .l0XXXXKKo. + c0KXXXXKX0l. + :0XKKOxxOKX0l. + :OXKOc. .c0XX0l. + :OK0o. ${c4}...${c1}'dKKX0l. + :OX0c ${c4};xOx'${c1}'dKXX0l. + :0KKo.${c4}.o0XXKd'.${c1}lKXX0l. + c0XKd.${c4}.oKXXXXKd..${c1}oKKX0l. + .c0XKk;${c4}.l0K0OO0XKd..${c1}oKXXKo. + .l0XXXk:${c4},dKx,.'l0XKo.${c1}.kXXXKo. + .o0XXXX0d,${c4}:x; .oKKx'${c1}.dXKXXKd. + .oKXXXXKK0c.${c4};. :00c'${c1}cOXXXXXKd. + .dKXXXXXXXXk,${c4}. cKx'${c1}'xKXXXXXXKx' + 'xKXXXXK0kdl:. ${c4}.ok; ${c1}.cdk0KKXXXKx' + 'xKK0koc,.. ${c4}'c, ${c1} ..,cok0KKk, + ,xko:'. ${c4}.. ${c1} .':okx; + .,'. .',. +EOF + ;; + + "ArchStrike"*) + set_colors 8 6 + read -rd '' ascii_data <<'EOF' +${c1}                   *    +                  **. +                 **** +                ****** +                ******* +              ** ******* +             **** ******* +            ${c1}****${c2}_____${c1}***${c2}/${c1}* +           ***${c2}/${c1}*******${c2}//${c1}*** +          **${c2}/${c1}********${c2}///${c1}*${c2}/${c1}** +         **${c2}/${c1}*******${c2}////${c1}***${c2}/${c1}** +        **${c2}/${c1}****${c2}//////.,${c1}****${c2}/${c1}** +       ***${c2}/${c1}*****${c2}/////////${c1}**${c2}/${c1}*** +      ****${c2}/${c1}****    ${c2}/////${c1}***${c2}/${c1}**** +     ******${c2}/${c1}*** ${c2}////   ${c1}**${c2}/${c1}****** +    ********${c2}/${c1}* ${c2}///      ${c1}*${c2}/${c1}******** +  ,******     ${c2}// ______ /    ${c1}******, +EOF + ;; + + *"XFerience"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ``--:::::::-.` + .-/+++ooooooooo+++:-` + `-/+oooooooooooooooooo++:. + -/+oooooo/+ooooooooo+/ooo++:` + `/+oo++oo. .+oooooo+.-: +:-o+- + `/+o/. -o. :oooooo+ ```:.+oo+- +`:+oo- -/` :oooooo+ .`-`+oooo/. +.+ooo+. .` `://///+-+..oooooo+:` +-+ooo:` ``.-+oooooo+/` +-+oo/` :+oooo/. +.+oo: ..-/. . -+oo+/` +`/++- -:::++::/. -+oo+- + ./o: `:///+- `./ooo+:` + .++- `` /-` -:/+oooo+:` + .:+/:`` `-:ooooooo++- + ./+o+//:...../+oooooooo++:` + `:/++ooooooooooooo++/-` + `.-//++++++//:-.` + `````` +EOF + ;; + + "ArchMerge"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} y: + sMN- + +MMMm` + /MMMMMd` + :NMMMMMMy + -NMMMMMMMMs + .NMMMMMMMMMM+ + .mMMMMMMMMMMMM+ + oNMMMMMMMMMMMMM+ + `+:-+NMMMMMMMMMMMM+ + .sNMNhNMMMMMMMMMMMM/ + `hho/sNMMMMMMMMMMMMMMM/ + `.`omMMmMMMMMMMMMMMMMMMM+ + .mMNdshMMMMd+::oNMMMMMMMMMo + .mMMMMMMMMM+ `yMMMMMMMMMs + .NMMMMMMMMM/ yMMMMMMMMMy + -NMMMMMMMMMh `mNMMMMMMMMd` + /NMMMNds+:.` `-/oymMMMm. + +Mmy/. `:smN: +/+. -o. +EOF + ;; + + "Arch"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} -` + .o+` + `ooo/ + `+oooo: + `+oooooo: + -+oooooo+: + `/:-:++oooo+: + `/++++/+++++++: + `/++++++++++++++: + `/+++o${c2}oooooooo${c1}oooo/` +${c2} ${c1}./${c2}ooosssso++osssssso${c1}+` +${c2} .oossssso-````/ossssss+` + -osssssso. :ssssssso. + :osssssss/ osssso+++. + /ossssssss/ +ssssooo/- + `/ossssso+/:- -:/+osssso+- + `+sso+:-` `.-/+oso: + `++:. `-/+/ + .` `/ +EOF + ;; + + "artix_small"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} /\\ + / \\ + /`'.,\\ + / ', + / ,`\\ + / ,.'`. \\ +/.,'` `'.\\ +EOF + ;; + + "Artix"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ' + 'o' + 'ooo' + 'ooxoo' + 'ooxxxoo' + 'oookkxxoo' + 'oiioxkkxxoo' + ':;:iiiioxxxoo' + `'.;::ioxxoo' + '-. `':;jiooo' + 'oooio-.. `'i:io' + 'ooooxxxxoio:,. `'-;' + 'ooooxxxxxkkxoooIi:-. `' + 'ooooxxxxxkkkkxoiiiiiji' + 'ooooxxxxxkxxoiiii:'` .i' + 'ooooxxxxxoi:::'` .;ioxo' + 'ooooxooi::'` .:iiixkxxo' + 'ooooi:'` `'';ioxxo' + 'i:'` '':io' +'` `' +EOF + ;; + + "Arya"*) + set_colors 2 1 + read -rd '' ascii_data <<'EOF' +${c1} `oyyy/${c2}-yyyyyy+ +${c1} -syyyy/${c2}-yyyyyy+ +${c1} .syyyyy/${c2}-yyyyyy+ +${c1} :yyyyyy/${c2}-yyyyyy+ +${c1} `/ :yyyyyy/${c2}-yyyyyy+ +${c1} .+s :yyyyyy/${c2}-yyyyyy+ +${c1} .oys :yyyyyy/${c2}-yyyyyy+ +${c1} -oyys :yyyyyy/${c2}-yyyyyy+ +${c1} :syyys :yyyyyy/${c2}-yyyyyy+ +${c1} /syyyys :yyyyyy/${c2}-yyyyyy+ +${c1} +yyyyyys :yyyyyy/${c2}-yyyyyy+ +${c1} .oyyyyyyo. :yyyyyy/${c2}-yyyyyy+ --------- +${c1} .syyyyyy+` :yyyyyy/${c2}-yyyyy+-+syyyyyyyy +${c1} -syyyyyy/ :yyyyyy/${c2}-yyys:.syyyyyyyyyy +${c1}:syyyyyy/ :yyyyyy/${c2}-yyo.:syyyyyyyyyyy +EOF + ;; + + "AsteroidOS"*) + set_colors 160 208 202 214 + read -rd '' ascii_data <<'EOF' +${c1} *** +${c1} ***** +${c1} ********** +${c1} *************** +${c1} *///****////****////. +${c2} (/////// /////// ///////( +${c2} /(((((//* //, //((((((. +${c2} ((((((((((( ((( (((((((( +${c2} *((((((((((((((((((((((( (((((((( +${c3} (((((#(((((((#((((( ((#((((( +${c3} (#(#(#####(#(#, ####(#(# +${c3} ######### ######## +${c3} /######## ######## +${c4} #######%####### +${c4} (#%%%%%%%# +${c4} %%%%% +${c4} %%% +EOF + ;; + + "Bedrock"*) + set_colors 8 7 + read -rd '' ascii_data <<'EOF' +${c1}-------------------------------------- +-------------------------------------- +-------------------------------------- +---${c2}\\\\\\\\\\\\\\\\\\\\\\\\${c1}----------------------- +----${c2}\\\\\\ \\\\\\${c1}---------------------- +-----${c2}\\\\\\ \\\\\\${c1}--------------------- +------${c2}\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\${c1}------ +-------${c2}\\\\\\ \\\\\\${c1}----- +--------${c2}\\\\\\ \\\\\\${c1}---- +---------${c2}\\\\\\ ______ \\\\\\${c1}--- +----------${c2}\\\\\\ ///${c1}--- +-----------${c2}\\\\\\ ///${c1}---- +------------${c2}\\\\\\ ///${c1}----- +-------------${c2}\\\\\\////////////////${c1}------ +-------------------------------------- +-------------------------------------- +-------------------------------------- +EOF + ;; + + "Bitrig"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} `hMMMMN+ + -MMo-dMd` + oMN- oMN` + yMd /NM: + .mMmyyhMMs + :NMMMhsmMh + +MNhNNoyMm- + hMd.-hMNMN: + mMmsssmMMMo + .MMdyyhNMMMd + oMN.`/dMddMN` + yMm/hNm+./MM/ +.dMMMmo.``.NMo +:NMMMNmmmmmMMh +/MN/-------oNN: +hMd. .dMh +sm/ /ms +EOF + ;; + + "BlackArch"*) + set_colors 1 1 0 1 + read -rd '' ascii_data <<'EOF' +${c3} 00 + 11 + ====${c1} + .${c3}//${c1} + `o${c3}//${c1}: + `+o${c3}//${c1}o: + `+oo${c3}//${c1}oo: + -+oo${c3}//${c1}oo+: + `/:-:+${c3}//${c1}ooo+: + `/+++++${c3}//${c1}+++++: + `/++++++${c3}//${c1}++++++: + `/+++o${c2}ooo${c3}//${c2}ooo${c1}oooo/` +${c2} ${c1}./${c2}ooosssso${c3}//${c2}osssssso${c1}+` +${c2} .oossssso-`${c3}//${c1}`/ossssss+` + -osssssso. ${c3}//${c1} :ssssssso. + :osssssss/ ${c3}//${c1} osssso+++. + /ossssssss/ ${c3}//${c1} +ssssooo/- + `/ossssso+/:- ${c3}//${c1} -:/+osssso+- + `+sso+:-` ${c3}//${c1} `.-/+oso: + `++:. ${c3}//${c1} `-/+/ + .` ${c3}/${c1} `/ +EOF + ;; + + "BLAG"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} d + ,MK: + xMMMX: + .NMMMMMX; + lMMMMMMMM0clodkO0KXWW: + KMMMMMMMMMMMMMMMMMMX' + .;d0NMMMMMMMMMMMMMMMMMMK. + .;dONMMMMMMMMMMMMMMMMMMMMMMx +'dKMMMMMMMMMMMMMMMMMMMMMMMMl + .:xKWMMMMMMMMMMMMMMMMMMM0. + .:xNMMMMMMMMMMMMMMMMMK. + lMMMMMMMMMMMMMMMMMMK. + ,MMMMMMMMWkOXWMMMMMM0 + .NMMMMMNd. `':ldko + OMMMK: + oWk, + ;: +EOF + ;; + + "BlankOn"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c2} `./ohdNMMMMNmho+.` ${c1} .+oo:` +${c2} -smMMMMMMMMMMMMMMMMmy-` ${c1}`yyyyy+ +${c2} `:dMMMMMMMMMMMMMMMMMMMMMMd/` ${c1}`yyyyys +${c2} .hMMMMMMMNmhso/++symNMMMMMMMh- ${c1}`yyyyys +${c2} -mMMMMMMms-` -omMMMMMMN-${c1}.yyyyys +${c2}.mMMMMMMy. .yMMMMMMm:${c1}yyyyys +${c2}sMMMMMMy `sMMMMMMh${c1}yyyyys +${c2}NMMMMMN: .NMMMMMN${c1}yyyyys +${c2}MMMMMMm. NMMMMMN${c1}yyyyys +${c2}hMMMMMM+ /MMMMMMN${c1}yyyyys +${c2}:NMMMMMN: :mMMMMMM+${c1}yyyyys +${c2} oMMMMMMNs- .sNMMMMMMs.${c1}yyyyys +${c2} +MMMMMMMNho:.` `.:ohNMMMMMMNo ${c1}`yyyyys +${c2} -hMMMMMMMMNNNmmNNNMMMMMMMMh- ${c1}`yyyyys +${c2} :yNMMMMMMMMMMMMMMMMMMNy:` ${c1}`yyyyys +${c2} .:sdNMMMMMMMMMMNds/. ${c1}`yyyyyo +${c2} `.:/++++/:.` ${c1}:oys+. +EOF + ;; + + "BlueLight"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' +${c1} oMMNMMMMMMMMMMMMMMMMMMMMMM + oMMMMMMMMMMMMMMMMMMMMMMMMM + oMMMMMMMMMMMMMMMMMMMMMMMMM + oMMMMMMMMMMMMMMMMMMMMMMMMM + -+++++++++++++++++++++++mM${c2} + ```````````````````````..${c1}dM${c2} + ```````````````````````....${c1}dM${c2} + ```````````````````````......${c1}dM${c2} + ```````````````````````........${c1}dM${c2} + ```````````````````````..........${c1}dM${c2} + ```````````````````````............${c1}dM${c2} +.::::::::::::::::::::::-..............${c1}dM${c2} + `-+yyyyyyyyyyyyyyyyyyyo............${c1}+mMM${c2} + -+yyyyyyyyyyyyyyyyo..........${c1}+mMMMM${c2} + ./syyyyyyyyyyyyo........${c1}+mMMMMMM${c2} + ./oyyyyyyyyyo......${c1}+mMMMMMMMM${c2} + omdyyyyyyo....${c1}+mMMMMMMMMMM${c2} + ${c1}oMMM${c2}mdhyyo..${c1}+mMMMMMMMMMMMM + oNNNNNNm${c2}dso${c1}mMMMMMMMMMMMMMM +EOF + ;; + + "Bodhi"*) + set_colors 7 11 2 + read -rd '' ascii_data <<'EOF' +${c1}| ${c2},,mmKKKKKKKKWm,, + ${c1}' ${c2},aKKP${c1}LL**********|L*${c2}TKp, + ${c1}t ${c2}aKP${c1}L**``` ```**L${c2}*Kp + IX${c1}EL${c3}L,wwww, ${c1}``*||${c2}Kp + ,#P${c1}L|${c3}KKKpPP@IPPTKmw, ${c1}`*||${c2}K + ,K${c1}LL*${c3}{KKKKKKPPb$KPhpKKPKp ${c1}`||${c2}K + #${c1}PL ${c3}!KKKKKKPhKPPP$KKEhKKKKp ${c1}`||${c2}K +!H${c1}L* ${c3}1KKKKKKKphKbPKKKKKK$KKp ${c1}`|I${c2}W +$${c1}bL ${c3}KKKKKKKKBQKhKbKKKKKKKK ${c1}|I${c2}N +$${c1}bL ${c3}!KKKKKKKKKKNKKKKKKKPP` ${c1}|I${c2}b +TH${c1}L* ${c3}TKKKKKK##KKKN@KKKK^ ${c1}|I${c2}M + K@${c1}L ${c3}*KKKKKKKKKKKEKE5 ${c1}||${c2}K + `NL${c1}L ${c3}`KKKKKKKKKK"```|L ${c1}||${c2}#P + `K@${c1}LL ${c3}`"**"` ${c1}'. :||${c2}#P + Yp${c1}LL ${c1}' |L${c2}$M` + `Tp${c1}pLL, ,|||${c2}p'L + "Kpp${c1}LL++,., ,,|||$${c2}#K* ${c1}'. + ${c2}`"MKWpppppppp#KM"` ${c1}`h, +EOF + ;; + + "bonsai"*) + set_colors 6 2 3 + read -rd '' ascii_data <<'EOF' +${c2} ,####, + ${c2}#######, ${c2},#####, + ${c2}#####',# ${c2}'###### + ${c2}''###'${c3}';,,,'${c2}###' + ${c3} ,; '''' + ${c3} ;;; ${c2},#####, + ${c3} ;;;' ,,;${c2};;### + ${c3} ';;;;''${c2}'####' + ${c3} ;;; + ${c3} ,.;;';'',,, + ${c3} ' ' +${c1} # + # O + ##, ,##,',##, ,## ,#, , + # # # # #''# #,, # # # + '#' '##' # # ,,# '##;, # +EOF + ;; + + "BSD") + set_colors 1 7 4 3 6 + read -rd '' ascii_data <<'EOF' +${c1} , , + /( )` + \ \___ / | + /- _ `-/ ' + (${c2}/\/ \ ${c1}\ /\ + ${c2}/ / | ` ${c1}\ + ${c3}O O ${c2}) ${c1}/ | + ${c2}`-^--'${c1}`< ' + (_.) _ ) / + `.___/` / + `-----' / +${c4}<----. __ / __ \ +${c4}<----|====${c1}O)))${c4}==${c1}) \) /${c4}====| +<----' ${c1}`--' `.__,' \ + | | + \ / /\ + ${c5}______${c1}( (_ / \______/ + ${c5},' ,-----' | + `--{__________) +EOF + ;; + + "BunsenLabs"*) + set_colors fg 7 + read -rd '' ascii_data <<'EOF' +${c1} `++ + -yMMs + `yMMMMN` + -NMMMMMMm. + :MMMMMMMMMN- + .NMMMMMMMMMMM/ + yMMMMMMMMMMMMM/ +`MMMMMMNMMMMMMMN. +-MMMMN+ /mMMMMMMy +-MMMm` `dMMMMMM +`MMN. .NMMMMM. + hMy yMMMMM` + -Mo +MMMMN + /o +MMMMs + +MMMN` + hMMM: + `NMM/ + +MN: + mh. + -/ +EOF + ;; + + "Calculate"*) + set_colors 7 3 + read -rd '' ascii_data <<'EOF' +${c1} ...... + ,,+++++++,. + .,,,....,,,${c2}+**+,,.${c1} + ............,${c2}++++,,,${c1} + ............... + ......,,,........ + .....+*#####+,,,*+. + .....,*###############,..,,,,,,.. + ......,*#################*..,,,,,..,,,.. + .,,....*####################+***+,,,,...,++, + .,,..,..*#####################*, + ,+,.+*..*#######################. + ,+,,+*+..,########################* +.,++++++. ..+##**###################+ +..... ..+##***#################*. + .,.*#*****##############*. + ..,,*********#####****+. + ${c2}.,++*****+++${c1}*****************${c2}+++++,.${c1} + ${c2},++++++**+++++${c1}***********${c2}+++++++++,${c1} + ${c2}.,,,,++++,.. .,,,,,.....,+++,.,,${c1} +EOF + ;; + "Carbs"*) + set_colors 4 5 4 4 4 4 + read -rd '' ascii_data <<'EOF' +${c2} .......... + ..,;:ccccccc:;'.. + ..,clllc:;;;;;:cllc,. + .,cllc,... ..';;'. + .;lol;.. .. + .,lol;. + .coo:. + .'lol,. + .,lol,. + .,lol,. + 'col;. + .:ooc'. + .'col:. + .'cllc'.. .''. + ..:lolc,'.......',cll,. + ..;cllllccccclllc;'. + ...',;;;;;;,,... + ..... +EOF + ;; + + + "CelOS"*) + set_colors 4 6 0 5 + read -rd '' ascii_data <<'EOF' + +${c4} .,cmmmmmmmmmmmc,. + .,cmMMMMMMMMMMMMMMMMMMMMmc. + .cMMMMMMMMMMMMMMMMMMMMMMMMMMMmc. + .cMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMc. + ,:MMM ${c3}####################################${c4} + cMMMMMMmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmc. + .MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM. + .MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMc + "******************************MMMMMMMMMMMMMc: +${c3}#################################### ${c4}MMMMMMMMMMMMMc + "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM: + "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + 'MMMMMMMMM*******************************: + \"MMMMMM ${c3}##################################### + ${c4}`:MMMMMMmmmmmmmmmmmmmmmmmmmmmmmmmmmmm; + `"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" + `":MMMMMMMMMMMMMMMMMMMMMMMMM;' + `":MMMMMMMMMMMMMMMMMMM:" + "************" + + + + +EOF + ;; + + "centos_small"*) + set_colors 3 2 4 5 7 + read -rd '' ascii_data <<'EOF' +${c2} ____${c1}^${c4}____ +${c2} |\\ ${c1}|${c4} /| +${c2} | \\ ${c1}|${c4} / | +${c4}<---- ${c3}----> +${c3} | / ${c2}|${c1} \\ | +${c3} |/__${c2}|${c1}__\\| +${c2} v +EOF + ;; + + "CentOS"*) + set_colors 3 2 4 5 7 + read -rd '' ascii_data <<'EOF' +${c1} .. + .PLTJ. + <><><><> + ${c2}KKSSV' 4KKK ${c1}LJ${c4} KKKL.'VSSKK + ${c2}KKV' 4KKKKK ${c1}LJ${c4} KKKKAL 'VKK + ${c2}V' ' 'VKKKK ${c1}LJ${c4} KKKKV' ' 'V + ${c2}.4MA.' 'VKK ${c1}LJ${c4} KKV' '.4Mb. +${c4} . ${c2}KKKKKA.' 'V ${c1}LJ${c4} V' '.4KKKKK ${c3}. +${c4} .4D ${c2}KKKKKKKA.'' ${c1}LJ${c4} ''.4KKKKKKK ${c3}FA. +${c4} +${c4} 'VD ${c3}KKKKKKKK'.. ${c2}LJ ${c1}..'KKKKKKKK ${c3}FV +${c4} ' ${c3}VKKKKK'. .4 ${c2}LJ ${c1}K. .'KKKKKV ${c3}' + ${c3} 'VK'. .4KK ${c2}LJ ${c1}KKA. .'KV' + ${c3}A. . .4KKKK ${c2}LJ ${c1}KKKKA. . .4 + ${c3}KKA. 'KKKKK ${c2}LJ ${c1}KKKKK' .4KK + ${c3}KKSSA. VKKK ${c2}LJ ${c1}KKKV .4SSKK +${c2} <><><><> + 'MKKM' + '' +EOF + ;; + + "Chakra"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} _ _ _ "kkkkkkkk. + ,kkkkkkkk., 'kkkkkkkkk, + ,kkkkkkkkkkkk., 'kkkkkkkkk. + ,kkkkkkkkkkkkkkkk,'kkkkkkkk, + ,kkkkkkkkkkkkkkkkkkk'kkkkkkk. + "''"''',;::,,"''kkk''kkkkk; __ + ,kkkkkkkkkk, "k''kkkkk' ,kkkk + ,kkkkkkk' ., ' .: 'kkkk',kkkkkk + ,kkkkkkkk'.k' , ,kkkk;kkkkkkkkk + ,kkkkkkkk';kk 'k "'k',kkkkkkkkkkkk +.kkkkkkkkk.kkkk.'kkkkkkkkkkkkkkkkkk' +;kkkkkkkk''kkkkkk;'kkkkkkkkkkkkk'' +'kkkkkkk; 'kkkkkkkk.,""''"''"" + ''kkkk; 'kkkkkkkkkk., + ';' 'kkkkkkkkkkkk., + ';kkkkkkkkkk' + ';kkkkkk' + "''" +EOF + ;; + + "ChaletOS"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} `.//+osso+/:`` + `/sdNNmhyssssydmNNdo:` + :hNmy+-` .-+hNNs- + /mMh/` `+:` `+dMd: + .hMd- -sNNMNo. /yyy /mMs` + -NM+ `/dMd/--omNh::dMM `yMd` + .NN+ .sNNs:/dMNy:/hNmo/s yMd` + hMs `/hNd+-smMMMMMMd+:omNy- `dMo +:NM. .omMy:/hNMMMMMMMMMMNy:/hMd+` :Md` +/Md` `sm+.omMMMMMMMMMMMMMMMMd/-sm+ .MN: +/Md` MMMMMMMMMMMMMMMMMMMN .MN: +:NN. MMMMMMm....--NMMMMMN -Mm. +`dMo MMMMMMd mMMMMMN hMs + -MN: MMMMMMd mMMMMMN oMm` + :NM: MMMMMMd mMMMMMN +Mm- + -mMy. mmmmmmh dmmmmmh -hMh. + oNNs- :yMm/ + .+mMdo:` `:smMd/` + -ohNNmhsoo++osshmNNh+. + `./+syyhhyys+:`` +EOF + ;; + + "Chapeau"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} .-/-. + ////////. + ////////${c2}y+${c1}//. + ////////${c2}mMN${c1}/////. + ////////${c2}mMN+${c1}////////. + ////////////////////////. + /////////+${c2}shhddhyo${c1}+////////. + ////////${c2}ymMNmdhhdmNNdo${c1}///////. +///////+${c2}mMms${c1}////////${c2}hNMh${c1}///////. +///////${c2}NMm+${c1}//////////${c2}sMMh${c1}/////// +//////${c2}oMMNmmmmmmmmmmmmMMm${c1}/////// +//////${c2}+MMmssssssssssssss+${c1}/////// +`//////${c2}yMMy${c1}//////////////////// + `//////${c2}smMNhso++oydNm${c1}//////// + `///////${c2}ohmNMMMNNdy+${c1}/////// + `//////////${c2}++${c1}////////// + `////////////////. + -////////- +EOF + ;; + + "Chrom"*) + set_colors 2 1 3 4 7 + read -rd '' ascii_data <<'EOF' +${c2} .,:loool:,. + .,coooooooooooooc,. + .,lllllllllllllllllllll,. + ;ccccccccccccccccccccccccc; +${c1} '${c2}ccccccccccccccccccccccccccccc. +${c1} ,oo${c2}c::::::::okO${c5}000${c3}0OOkkkkkkkkkkk: +${c1}.ooool${c2};;;;:x${c5}K0${c4}kxxxxxk${c5}0X${c3}K0000000000. +${c1}:oooool${c2};,;O${c5}K${c4}ddddddddddd${c5}KX${c3}000000000d +${c1}lllllool${c2};l${c5}N${c4}dllllllllllld${c5}N${c3}K000000000 +${c1}lllllllll${c2}o${c5}M${c4}dccccccccccco${c5}W${c3}K000000000 +${c1};cllllllllX${c5}X${c4}c:::::::::c${c5}0X${c3}000000000d +${c1}.ccccllllllO${c5}Nk${c4}c;,,,;cx${c5}KK${c3}0000000000. +${c1} .cccccclllllxOO${c5}OOO${c1}Okx${c3}O0000000000; +${c1} .:ccccccccllllllllo${c3}O0000000OOO, +${c1} ,:ccccccccclllcd${c3}0000OOOOOOl. +${c1} '::ccccccccc${c3}dOOOOOOOkx:. +${c1} ..,::cccc${c3}xOOOkkko;. +${c1} ..,:${c3}dOkxl:. +EOF + ;; + + "cleanjaro_small"*) + set_colors 7 7 + read -rd '' ascii_data <<'EOF' +${c1}█████ ██████████ +█████ ██████████ +█████ +█████ +█████ +████████████████ +████████████████ +EOF + ;; + + "Cleanjaro"*) + set_colors 7 7 + read -rd '' ascii_data <<'EOF' +${c1}███████▌ ████████████████ +███████▌ ████████████████ +███████▌ ████████████████ +███████▌ +███████▌ +███████▌ +███████▌ +███████▌ +█████████████████████████ +█████████████████████████ +█████████████████████████ +▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ +EOF + ;; + + "ClearOS"*) + set_colors 2 + read -rd '' ascii_data <<'EOF' +${c1} `.--::::::--.` + .-:////////////////:-. + `-////////////////////////-` + -////////////////////////////- + `//////////////-..-//////////////` + ./////////////: ://///////////. + `//////:..-////: :////-..-//////` + ://////` -///:.``.:///-` ://///: +`///////:. -////////-` `:///////` +.//:--////:. -////-` `:////--://. +./: .////:. --` `:////- :/. +`//-` .////:. `:////- `-//` + :///-` .////:. `:////- `-///: + `/////-` -///: :///- `-/////` + `//////- `///: :///` .//////` + `:////: `///: :///` -////:` + .://: `///: :///` -//:. + .:: `///: :///` -:. + `///: :///` + `... ...` +EOF + ;; + + "Clear Linux OS"* | "Clear_Linux"*) + set_colors 4 3 7 6 + read -rd '' ascii_data <<'EOF' +${c1} BBB + BBBBBBBBB + BBBBBBBBBBBBBBB + BBBBBBBBBBBBBBBBBBBB + BBBBBBBBBBB BBB + BBBBBBBB${c2}YYYYY +${c1} BBBBBBBB${c2}YYYYYY +${c1} BBBBBBBB${c2}YYYYYYY +${c1} BBBBBBBBB${c2}YYYYY${c3}W +${c4} GG${c1}BBBBBBBY${c2}YYYY${c3}WWW +${c4} GGG${c1}BBBBBBB${c2}YY${c3}WWWWWWWW +${c4} GGGGGG${c1}BBBBBB${c3}WWWWWWWW +${c4} GGGGGGGG${c1}BBBB${c3}WWWWWWWW +${c4}GGGGGGGGGGG${c1}BBB${c3}WWWWWWW +${c4}GGGGGGGGGGGGG${c1}B${c3}WWWWWW +${c4}GGGGGGGG${c3}WWWWWWWWWWW +${c4}GG${c3}WWWWWWWWWWWWWWWW + WWWWWWWWWWWWWWWW + WWWWWWWWWW + WWW +EOF + ;; + + "Clover"*) + set_colors 2 6 + read -rd '' ascii_data <<'EOF' +${c1} `omo``omo` + `oNMMMNNMMMNo` + `oNMMMMMMMMMMMMNo` + oNMMMMMMMMMMMMMMMMNo + `sNMMMMMMMMMMMMMMNs` + `omo` `sNMMMMMMMMMMNs` `omo` + `oNMMMNo` `sNMMMMMMNs` `oNMMMNo` + `oNMMMMMMMNo` `oNMMNs` `oNMMMMMMMNo` +oNMMMMMMMMMMMNo` `sy` `oNMMMMMMMMMMMNo +`sNMMMMMMMMMMMMNo.${c2}oNNs${c1}.oNMMMMMMMMMMMMNs` +`oNMMMMMMMMMMMMNs.${c2}oNNs${c1}.oNMMMMMMMMMMMMNo` +oNMMMMMMMMMMMNs` `sy` `oNMMMMMMMMMMMNo + `oNMMMMMMMNs` `oNMMNo` `oNMMMMMMMNs` + `oNMMMNs` `sNMMMMMMNs` `oNMMMNs` + `oNs` `sNMMMMMMMMMMNs` `oNs` + `sNMMMMMMMMMMMMMMNs` + +NMMMMMMMMMMMMMMMMNo + `oNMMMMMMMMMMMMNo` + `oNMMMNNMMMNs` + `omo``oNs` +EOF + ;; + + "Condres"*) + set_colors 2 3 6 + read -rd '' ascii_data <<'EOF' +${c1}syyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy+${c3}.+. +${c1}`oyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy+${c3}:++. +${c2}/o${c1}+oyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy/${c3}oo++. +${c2}/y+${c1}syyyyyyyyyyyyyyyyyyyyyyyyyyyyy${c3}+ooo++. +${c2}/hy+${c1}oyyyhhhhhhhhhhhhhhyyyyyyyyy${c3}+oo+++++. +${c2}/hhh+${c1}shhhhhdddddhhhhhhhyyyyyyy${c3}+oo++++++. +${c2}/hhdd+${c1}oddddddddddddhhhhhyyyys${c3}+oo+++++++. +${c2}/hhddd+${c1}odmmmdddddddhhhhyyyy${c3}+ooo++++++++. +${c2}/hhdddmo${c1}odmmmdddddhhhhhyyy${c3}+oooo++++++++. +${c2}/hdddmmms${c1}/dmdddddhhhhyyys${c3}+oooo+++++++++. +${c2}/hddddmmmy${c1}/hdddhhhhyyyyo${c3}+oooo++++++++++: +${c2}/hhdddmmmmy${c1}:yhhhhyyyyy+${c3}+oooo+++++++++++: +${c2}/hhddddddddy${c1}-syyyyyys+${c3}ooooo++++++++++++: +${c2}/hhhddddddddy${c1}-+yyyy+${c3}/ooooo+++++++++++++: +${c2}/hhhhhdddddhhy${c1}./yo:${c3}+oooooo+++++++++++++/ +${c2}/hhhhhhhhhhhhhy${c1}:-.${c3}+sooooo+++++++++++///: +${c2}:sssssssssssso++${c1}${c3}`:/:--------.```````` +EOF + ;; + + "Container Linux by CoreOS"* | "Container_Linux"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ..... + .';:cccccccc:;'. + ':ccccclc${c3}lllllllll${c1}cc:. + .;cccccccc${c3}lllllllllllllll${c1}c, + ;clllccccc${c3}llllllllllllllllll${c1}c, + .cllclccccc${c3}lllll${c2}lll${c3}llllllllllll${c1}c: + ccclclcccc${c3}cllll${c2}kWMMNKk${c3}llllllllll${c1}c: + :ccclclcccc${c3}llll${c2}oWMMMMMMWO${c3}lllllllll${c1}c, +.ccllllllccc${c3}clll${c2}OMMMMMMMMM0${c3}lllllllll${c1}c +.lllllclcccc${c3}llll${c2}KMMMMMMMMMMo${c3}llllllll${c1}c. +.lllllllcccc${c3}clll${c2}KMMMMMMMMN0${c3}lllllllll${c1}c. +.cclllllcccc${c3}lllld${c2}xkkxxdo${c3}llllllllllc${c1}lc + :cccllllllcccc${c3}lllccllllcclccc${c1}cccccc; + .ccclllllllcccccccc${c3}lll${c1}ccccclccccccc + .cllllllllllclcccclccclccllllcllc + :cllllllllccclcllllllllllllcc; + .cccccccccccccclcccccccccc:. + .;cccclccccccllllllccc,. + .';ccccclllccc:;.. + ..... +EOF + ;; + + "crux_small"|KISS*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} ___ + (${c3}.· ${c1}| + (${c2}<> ${c1}| + / ${c3}__ ${c1}\\ + ( ${c3}/ \\ ${c1}/| +${c2}_${c1}/\\ ${c3}__)${c1}/${c2}_${c1}) +${c2}\/${c1}-____${c2}\/ +EOF + ;; + + "CRUX"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} odddd + oddxkkkxxdoo + ddcoddxxxdoool + xdclodod olol + xoc xdd olol + xdc ${c2}k00${c1}Okdlol + xxd${c2}kOKKKOkd${c1}ldd + xdco${c2}xOkdlo${c1}dldd + ddc:cl${c2}lll${c1}oooodo + odxxdd${c3}xkO000kx${c1}ooxdo + oxdd${c3}x0NMMMMMMWW0od${c1}kkxo + oooxd${c3}0WMMMMMMMMMW0o${c1}dxkx +docldkXW${c3}MMMMMMMWWN${c1}Odolco +xx${c2}dx${c1}kxxOKN${c3}WMMWN${c1}0xdoxo::c +${c2}xOkkO${c1}0oo${c3}odOW${c2}WW${c1}XkdodOxc:l +${c2}dkkkxkkk${c3}OKX${c2}NNNX0Oxx${c1}xc:cd +${c2} odxxdx${c3}xllod${c2}ddooxx${c1}dc:ldo +${c2} lodd${c1}dolccc${c2}ccox${c1}xoloo +EOF + ;; + + *"Crystal Linux"*) + set_colors 13 5 + read -rd '' ascii_data <<'EOF' +${c1} mysssym +${c1} mysssym +${c1} mysssym +${c1} mysssym +${c1} mysssyd +${c1} mysssyd N +${c1} mysssyd mysym +${c1} mysssyd dysssym +${c1} mysssyd dysssym +${c1} mysssyd dysssym +${c1} mysssyd dysssym +${c1} mysssyd dysssym +${c1} mysssyd dysssym +${c1} mysym dysssym +${c1} N dysssym +${c1} dysssym +${c1} dysssym +${c1} dysssym +${c1} dysssym +${c1} dysssym +EOF + ;; + + *"Cucumber"*) + set_colors 2 3 + read -rd '' ascii_data <<'EOF' +${c1} `.-://++++++//:-.` + `:/+//${c2}::--------${c1}:://+/:` + -++/:${c2}----..........----${c1}:/++- + .++:${c2}---...........-......---${c1}:++. + /+:${c2}---....-::/:/--//:::-....---${c1}:+/ + `++:${c2}--.....:---::/--/::---:.....--${c1}:++` + /+:${c2}--.....--.--::::-/::--.--.....--${c1}:+/ +-o:${c2}--.......-:::://--/:::::-.......--${c1}:o- +/+:${c2}--...-:-::---:::..:::---:--:-...--${c1}:+/ +o/:${c2}-...-:.:.-/:::......::/:.--.:-...-${c1}:/o +o/${c2}--...::-:/::/:-......-::::::-/-...-${c1}:/o +/+:${c2}--..-/:/:::--:::..:::--::////-..--${c1}:+/ +-o:${c2}--...----::/:::/--/:::::-----...--${c1}:o- + /+:${c2}--....://:::.:/--/:.::://:....--${c1}:+/ + `++:${c2}--...-:::.--.:..:.--.:/:-...--${c1}:++` + /+:${c2}---....----:-..-:----....---${c1}:+/ + .++:${c2}---..................---${c1}:++. + -/+/:${c2}----..........----${c1}:/+/- + `:/+//${c2}::--------:::${c1}/+/:` + `.-://++++++//:-.` +EOF + ;; + + "CyberOS"*) + set_colors 50 32 57 + read -rd '' ascii_data <<'EOF' +${c3} !M$EEEEEEEEEEEP + .MMMMM000000Nr. + ${c3}&MMMMMM${c2}MMMMMMMMMMMMM9 + ${c3}~MMM${c1}MMMM${c2}MMMMMMMMMMMMC + ${c1}" ${c3}M${c1}MMMMMMM${c2}MMMMMMMMMMs + ${c1}iM${c2}MMM&&${c1}MMMMMMMM${c2}MMMMMMMM\\ + ${c1}BMMM${c2}MMMMM${c1}MMMMMMM${c2}MMMMMM${c3}" + ${c1}9MMMMM${c2}MMMMMMM${c1}MMMM${c2}MMMM${c3}MMMf- + ${c2}sMMMMMMMM${c1}MM${c2}M${c3}MMMMMMMMM3_ + ${c2}+ffffffff${c1}P${c3}MMMMMMMMMMMM0 + ${c2}CMMMMMMMMMMM + }MMMMMMMMM + ~MMMMMMM + "RMMMM + .PMB +EOF + ;; + + "dahlia"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} + .#. + *%@@@%* + .,,,,,(&@@@@@@@&/,,,,,. + ,#@@@@@@@@@@@@@@@@@@@@@#. + ,#@@@@@@@&#///#&@@@@@@@#. + ,/%&@@@@@%/, .,(%@@@@@&#/. + *#&@@@@@@#,. .*#@@@@@@&#, + .&@@@@@@@@@( .(@@@@@@@@@&&. +#@@@@@@@@@@( )@@@@@@@@@@@# + °@@@@@@@@@@( .(@@@@@@@@@@@° + *%@@@@@@@(. ,#@@@@@@@%* + ,(&@@@@@@%*. ./%@@@@@@%(, + ,#@@@@@@@&(***(&@@@@@@@#. + ,#@@@@@@@@@@@@@@@@@@@@@#. + ,*****#&@@@@@@@&(*****, + ,/%@@@%/. + ,#, +EOF + ;; + + "debian_small") + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} _____ + / __ \\ +| / | +| \\___- +-_ + --_ +EOF + ;; + + "Debian"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c2} _,met$$$$$gg. + ,g$$$$$$$$$$$$$$$P. + ,g$$P" """Y$$.". + ,$$P' `$$$. +',$$P ,ggs. `$$b: +`d$$' ,$P"' ${c1}.${c2} $$$ + $$P d$' ${c1},${c2} $$P + $$: $$. ${c1}-${c2} ,d$$' + $$; Y$b._ _,d$P' + Y$$. ${c1}`.${c2}`"Y$$$$P"' +${c2} `$$b ${c1}"-.__ +${c2} `Y$$ + `Y$$. + `$$b. + `Y$$b. + `"Y$b._ + `""" +EOF + ;; + + "Deepin"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} ............ + .';;;;;. .,;,. + .,;;;;;;;. ';;;;;;;. + .;::::::::' .,::;;,''''',. + ,'.:::::::: .;;'. '; + ;' 'cccccc, ,' :: '.. .: + ,, :ccccc. ;: .c, '' :. ,; +.l. cllll' ., .lc :; .l' l. +.c :lllc ;cl: .l' .ll. :' +.l 'looc. . ,o: 'oo' c, +.o. .:ool::coc' .ooo' o. + :: ..... .;dddo ;c + l:... .';lddddo. ,o + lxxxxxdoolllodxxxxxxxxxc :l + ,dxxxxxxxxxxxxxxxxxxl. 'o, + ,dkkkkkkkkkkkkko;. .;o; + .;okkkkkdl;. .,cl:. + .,:cccccccc:,. +EOF + ;; + + "DesaOS") + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1}███████████████████████ +███████████████████████ +███████████████████████ +███████████████████████ +████████ ███████ +████████ ███████ +████████ ███████ +████████ ███████ +████████ ███████ +████████ ███████ +████████ ███████ +██████████████████████████████ +██████████████████████████████ +████████████████████████ +████████████████████████ +████████████████████████ +EOF + ;; + + "Devuan"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} ..,,;;;::;,.. + `':ddd;:,. + `'dPPd:,. + `:b$$b`. + 'P$$$d` + .$$$$$` + ;$$$$$P + .:P$$$$$$` + .,:b$$$$$$$;' + .,:dP$$$$$$$$b:' + .,:;db$$$$$$$$$$Pd'` + ,db$$$$$$$$$$$$$$b:'` +:$$$$$$$$$$$$b:'` + `$$$$$bd:''` + `'''` +EOF + ;; + + "DracOS"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} `-:/- + -os: + -os/` + :sy+-` + `/yyyy+. + `+yyyyo- + `/yyyys: +`:osssoooo++- +yyyyyy/` + ./yyyyyyo yo`:syyyy+. + -oyyy+ +- :yyyyyo- + `:sy: `. `/yyyyys: + ./o/.` .oyyso+oo:` + :+oo+//::::///:-.` `.` +EOF + ;; + + "DarkOs") + set_colors 1 6 5 3 2 + read -rd '' ascii_data <<'EOF' + +${c3}⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c1}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣶⠋⡆⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c5}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡆⢀⣤⢛⠛⣠⣿⠀⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c6}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣶⣿⠟⣡⠊⣠⣾⣿⠃⣠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c2}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣯⣿⠀⠊⣤⣿⣿⣿⠃⣴⣧⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c1}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣿⣿⡟⣠⣶⣿⣿⣿⢋⣤⠿⠛⠉⢁⣭⣽⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c4} ⠀⠀⠀⠀⠀⠀ ⠀⣠⠖⡭⢉⣿⣯⣿⣯⣿⣿⣿⣟⣧⠛⢉⣤⣶⣾⣿⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c5}⠀⠀⠀⠀⠀⠀⠀⠀⣴⣫⠓⢱⣯⣿⢿⠋⠛⢛⠟⠯⠶⢟⣿⣯⣿⣿⣿⣿⣿⣿⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c2}⠀⠀⠀⠀⠀⠀⢀⡮⢁⣴⣿⣿⣿⠖⣠⠐⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠛⠛⠛⢿⣶⣄⠀⠀⠀⠀⠀⠀⠀ +${c3}⠀⠀⠀⠀⢀⣤⣷⣿⣿⠿⢛⣭⠒⠉⠀⠀⠀⣀⣀⣄⣤⣤⣴⣶⣶⣶⣿⣿⣿⣿⣿⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀ +${c1}⠀⢀⣶⠏⠟⠝⠉⢀⣤⣿⣿⣶⣾⣿⣿⣿⣿⣿⣿⣟⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c6}⢴⣯⣤⣶⣿⣿⣿⣿⣿⡿⣿⣯⠉⠉⠉⠉⠀⠀⠀⠈⣿⡀⣟⣿⣿⢿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c5}⠀⠀⠀⠉⠛⣿⣧⠀⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠃⣿⣿⣯⣿⣦⡀⠀⠉⠻⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c3}⠀⠀⠀⠀⠀⠀⠉⢿⣮⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⠀⣯⠉⠉⠛⢿⣿⣷⣄⠀⠈⢻⣆⠀⠀⠀⠀⠀⠀⠀⠀ +${c2}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠢⠀⠀⠀⠀⠀⠀⠀⢀⢡⠃⣾⣿⣿⣦⠀⠀⠀⠙⢿⣿⣤⠀⠙⣄⠀⠀⠀⠀⠀⠀⠀ +${c6}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⢋⡟⢠⣿⣿⣿⠋⢿⣄⠀⠀⠀⠈⡄⠙⣶⣈⡄⠀⠀⠀⠀⠀⠀ +${c1}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠚⢲⣿⠀⣾⣿⣿⠁⠀⠀⠉⢷⡀⠀⠀⣇⠀⠀⠈⠻⡀⠀⠀⠀⠀⠀ +${c4}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢢⣀⣿⡏⠀⣿⡿⠀⠀⠀⠀⠀⠀⠙⣦⠀⢧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c3}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠿⣧⣾⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣮⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +${c5}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + +EOF + ;; + + "Itc"*) + set_colors 1 + read -rd '' ascii_data <<'EOF' +${c1}....................-==============+... +${c1}....................-==============:... +${c1}...:===========-....-==============:... +${c1}...-===========:....-==============-... +${c1}....*==========+........-::********-... +${c1}....*===========+.:*====**==*+-.-...... +${c1}....:============*+-..--:+**====*---... +${c1}......::--........................::... +${c1}..+-:+-.+::*:+::+:-++::++-.:-.*.:++:++. +${c1}..:-:-++++:-::--:+::-::.:++-++:++--:-:. ⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +EOF + ;; + + "dragonfly_old"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' + ${c1} .-. + ${c3} ()${c1}I${c3}() + ${c1} "==.__:-:__.==" + "==.__/~|~\__.==" + "==._( Y )_.==" + ${c2}.-'~~""~=--...,__${c1}\/|\/${c2}__,...--=~""~~'-. +( ..=${c1}\\=${c1}/${c2}=.. ) + `'-. ,.-"`;${c1}/=\\${c2};"-.,_ .-'` + `~"-=-~` .-~` ${c1}|=|${c2} `~-. `~-=-"~` + .-~` /${c1}|=|${c2}\ `~-. + .~` / ${c1}|=|${c2} \ `~. + .-~` .' ${c1}|=|${c2} `. `~-. + (` _,.-="` ${c1} |=|${c2} `"=-.,_ `) + `~"~"` ${c1} |=|${c2} `"~"~` + ${c1} /=\\ + \\=/ + ^ +EOF + ;; + + "dragonfly_small"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c2} ,${c1}_${c2}, +('-_${c1}|${c2}_-') + >--${c1}|${c2}--< +(_-'${c1}|${c2}'-_) + ${c1}| + | + | +EOF + ;; + + "DragonFly"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c2},--, ${c1}| ${c2},--, +${c2}| `-, ${c1},^, ${c2},-' | +${c2} `, `-, ${c3}(/ \) ${c2},-' ,' +${c2} `-, `-,${c1}/ \${c2},-' ,-' +${c2} `------${c1}( )${c2}------' +${c2} ,----------${c1}( )${c2}----------, +${c2} | _,-${c1}( )${c2}-,_ | +${c2} `-,__,-' ${c1}\ /${c2} `-,__,-' +${c1} | | + | | + | | + | | + | | + | | + `|' +EOF + ;; + + "Drauger"*) + set_colors 1 7 + read -rd '' ascii_data <<'EOF' +${c1} -``- + `:+``+:` + `/++``++/. + .++/. ./++. + :++/` `/++: + `/++: :++/` + ./+/- -/+/. + -++/. ./++- + :++:` `:++: + `/++- -++/` + ./++. ./+/. + -++/` `/++- + :++:` `:++: + `/++- -++/` +.:-.`..............................`.-:. +`.-/++++++++++++++++++++++++++++++++/-.` +EOF + ;; + + "elementary_small"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} _______ + / ____ \\ +/ | / /\\ +|__\\ / / | +\\ /__/ / + \\_______/ +EOF + ;; + + "Elementary"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} eeeeeeeeeeeeeeeee + eeeeeeeeeeeeeeeeeeeeeee + eeeee eeeeeeeeeeee eeeee + eeee eeeee eee eeee + eeee eeee eee eeee +eee eee eee eee +eee eee eee eee +ee eee eeee eeee +ee eee eeeee eeeeee +ee eee eeeee eeeee ee +eee eeee eeeeee eeeee eee +eee eeeeeeeeee eeeeee eee + eeeeeeeeeeeeeeeeeeeeeeee eeeee + eeeeeeee eeeeeeeeeeee eeee + eeeee eeeee + eeeeeee eeeeeee + eeeeeeeeeeeeeeeee +EOF + ;; + + "EndeavourOS"*) + set_colors 1 5 4 + read -rd '' ascii_data <<'EOF' +${c1} ./${c2}o${c3}. +${c1} ./${c2}sssso${c3}- +${c1} `:${c2}osssssss+${c3}- +${c1} `:+${c2}sssssssssso${c3}/. +${c1} `-/o${c2}ssssssssssssso${c3}/. +${c1} `-/+${c2}sssssssssssssssso${c3}+:` +${c1} `-:/+${c2}sssssssssssssssssso${c3}+/. +${c1} `.://o${c2}sssssssssssssssssssso${c3}++- +${c1} .://+${c2}ssssssssssssssssssssssso${c3}++: +${c1} .:///o${c2}ssssssssssssssssssssssssso${c3}++: +${c1} `:////${c2}ssssssssssssssssssssssssssso${c3}+++. +${c1}`-////+${c2}ssssssssssssssssssssssssssso${c3}++++- +${c1} `..-+${c2}oosssssssssssssssssssssssso${c3}+++++/` + ./++++++++++++++++++++++++++++++/:. + `:::::::::::::::::::::::::------`` +EOF + ;; + + "Endless"*) + set_colors 1 7 + read -rd '' ascii_data <<'EOF' +${c1} `:+yhmNMMMMNmhy+:` + -odMMNhso//////oshNMMdo- + /dMMh+. .+hMMd/ + /mMNo` `oNMm: + `yMMo` `oMMy` + `dMN- -NMd` + hMN. .NMh +/MM/ -os` /MM/ +dMm `smNmmhs/- `:sNMd+ `` mMd +MMy oMd--:+yMMMMMNo.:ohmMMMNy` yMM +MMy -NNyyhmMNh+oNMMMMMy:. dMo yMM +dMm `/++/-``/yNNh+/sdNMNddMm- mMd +/MM/ `dNy: `-::- /MM/ + hMN. .NMh + `dMN- -NMd` + `yMMo` `oMMy` + /mMNo` `oNMm/ + /dMMh+. .+hMMd/ + -odMMNhso//////oshNMMdo- + `:+yhmNMMMMNmhy+:` +EOF + ;; + + "EuroLinux"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c1} __ + -wwwWWWWWWWWWwww- + -WWWWWWWWWWWWWWWWWWw- + \WWWWWWWWWWWWWWWWWWW- + _Ww `WWWWWWWWWWWWWWWWWWWw + -W${c2}E${c1}Www -WWWWWWWWW- +_WW${c2}U${c1}WWWW- _WWWWWWWW +_WW${c2}R${c1}WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW- +wWW${c2}O${c1}WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW +WWW${c2}L${c1}WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw +WWW${c2}I${c1}WWWWWWWWWWWWWWWWWWWWWWWWWWWWww- +wWW${c2}N${c1}WWWWw + WW${c2}U${c1}WWWWWWw + wW${c2}X${c1}WWWWWWWWww + wWWWWWWWWWWWWWWWw + wWWWWWWWWWWWWWWWw + WWWWWWWWWWWWWw + wWWWWWWWw +EOF + ;; + + "Exherbo"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} , +OXo. +NXdX0: .cok0KXNNXXK0ko:. +KX '0XdKMMK;.xMMMk, .0MMMMMXx; ... +'NO..xWkMMx kMMM cMMMMMX,NMWOxOXd. + cNMk NK .oXM. OMMMMO. 0MMNo kW. + lMc o: ., .oKNk; ;NMMWlxW' + ;Mc .. .,,' .0M${c1}g;${c2}WMN'dWMMMMMMO + XX ,WMMMMW. cM${c1}cfli${c2}WMKlo. .kMk +.Mo .WM${c1}GD${c2}MW. XM${c1}WO0${c2}MMk oMl +,M: ,XMMWx::,''oOK0x; NM. +'Ml ,kNKOxxxxxkkO0XXKOd:. oMk + NK .0Nxc${c3}:::::::::::::::${c2}fkKNk, .MW + ,Mo .NXc${c3}::${c2}qXWXb${c3}::::::::::${c2}oo${c3}::${c2}lNK. .MW + ;Wo oMd${c3}:::${c2}oNMNP${c3}::::::::${c2}oWMMMx${c3}:${c2}c0M; lMO + 'NO;W0c${c3}:::::::::::::::${c2}dMMMMO${c3}::${c2}lMk .WM' + xWONXdc${c3}::::::::::::::${c2}oOOo${c3}::${c2}lXN. ,WMd + 'KWWNXXK0Okxxo,${c3}:::::::${c2},lkKNo xMMO + :XMNxl,';:lodxkOO000Oxc. .oWMMo + 'dXMMXkl;,. .,o0MMNo' + ':d0XWMMMMWNNNNMMMNOl' + ':okKXWNKkl' +EOF + ;; + + "fedora_small") + set_colors 12 + read -rd '' ascii_data <<'EOF' +${c1} ,'''''. + | ,. | + | | '_' + ,....| |.. +.' ,_;| ..' +| | | | +| ',_,' | + '. ,' + ''''' +EOF + ;; + + "Fedora_old"* | "RFRemix"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} /:-------------:\\ + :-------------------:: + :-----------${c2}/shhOHbmp${c1}---:\\ + /-----------${c2}omMMMNNNMMD ${c1}---: + :-----------${c2}sMMMMNMNMP${c1}. ---: + :-----------${c2}:MMMdP${c1}------- ---\\ +,------------${c2}:MMMd${c1}-------- ---: +:------------${c2}:MMMd${c1}------- .---: +:---- ${c2}oNMMMMMMMMMNho${c1} .----: +:-- .${c2}+shhhMMMmhhy++${c1} .------/ +:- -------${c2}:MMMd${c1}--------------: +:- --------${c2}/MMMd${c1}-------------; +:- ------${c2}/hMMMy${c1}------------: +:--${c2} :dMNdhhdNMMNo${c1}------------; +:---${c2}:sdNMMMMNds:${c1}------------: +:------${c2}:://:${c1}-------------:: +:---------------------:// +EOF + ;; + + "Fedora"*) + set_colors 12 7 + read -rd '' ascii_data <<'EOF' +${c1} .',;::::;,'. + .';:cccccccccccc:;,. + .;cccccccccccccccccccccc;. + .:cccccccccccccccccccccccccc:. + .;ccccccccccccc;${c2}.:dddl:.${c1};ccccccc;. + .:ccccccccccccc;${c2}OWMKOOXMWd${c1};ccccccc:. +.:ccccccccccccc;${c2}KMMc${c1};cc;${c2}xMMc${c1};ccccccc:. +,cccccccccccccc;${c2}MMM.${c1};cc;${c2};WW:${c1};cccccccc, +:cccccccccccccc;${c2}MMM.${c1};cccccccccccccccc: +:ccccccc;${c2}oxOOOo${c1};${c2}MMM0OOk.${c1};cccccccccccc: +cccccc;${c2}0MMKxdd:${c1};${c2}MMMkddc.${c1};cccccccccccc; +ccccc;${c2}XM0'${c1};cccc;${c2}MMM.${c1};cccccccccccccccc' +ccccc;${c2}MMo${c1};ccccc;${c2}MMW.${c1};ccccccccccccccc; +ccccc;${c2}0MNc.${c1}ccc${c2}.xMMd${c1};ccccccccccccccc; +cccccc;${c2}dNMWXXXWM0:${c1};cccccccccccccc:, +cccccccc;${c2}.:odl:.${c1};cccccccccccccc:,. +:cccccccccccccccccccccccccccc:'. +.:cccccccccccccccccccccc:;,.. + '::cccccccccccccc::;,. +EOF + ;; + + "Feren"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} `----------` + :+ooooooooo+. +-o+oooooooooo+- +..`/+++++++++++/...````````````````` + .++++++++++++++++++++++++++/////- + ++++++++++++++++++++++++++++++++//:` + -++++++++++++++++++++++++++++++/-` + ++++++++++++++++++++++++++++:. + -++++++++++++++++++++++++/. + +++++++++++++++++++++/-` + -++++++++++++++++++//-` + .:+++++++++++++//////- + .:++++++++//////////- + `-++++++---:::://///. + `.:///+++. ` + `......... +EOF + ;; + + "freebsd_small") + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1}/\\,-'''''-,/\\ +\\_) (_/ +| | +| | + ; ; + '-_____-' +EOF + ;; + + FreeBSD*|HardenedBSD*) + case $ascii_distro in + *HardenedBSD*) set_colors 4 7 3 ;; + *) set_colors 1 7 3 + esac + + read -rd '' ascii_data <<'EOF' + ${c2}``` ${c1}` + ${c2}` `.....---...${c1}....--.``` -/ + ${c2}+o .--` ${c1}/y:` +. + ${c2} yo`:. ${c1}:o `+- + ${c2}y/ ${c1}-/` -o/ + ${c2}.- ${c1}::/sy+:. + ${c2}/ ${c1}`-- / + ${c2}`: ${c1}:` + ${c2}`: ${c1}:` + ${c2}/ ${c1}/ + ${c2}.- ${c1}-. + ${c2}-- ${c1}-. + ${c2}`:` ${c1}`:` + .-- `--. + .---.....----. +EOF + ;; + + "FreeMiNT"*) + set_colors 7 + read -rd '' ascii_data <<'EOF' +${c1} ## + ## ######### + #### ## + #### #### ## +#### #### ## ## + #### #### ## ## + #### #### ## ## ## + #### ###### + ###### ## ## #### + #### ################ + #### ## #### + ## #### ###### + ## ## #### #### + ## ## ## ## ## #### + #### ## ## ## +EOF + ;; + + "Frugalware"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} `++/::-.` + /o+++++++++/::-.` + `o+++++++++++++++o++/::-.` + /+++++++++++++++++++++++oo++/:-.`` + .o+ooooooooooooooooooosssssssso++oo++/:-` + ++osoooooooooooosssssssssssssyyo+++++++o: + -o+ssoooooooooooosssssssssssssyyo+++++++s` + o++ssoooooo++++++++++++++sssyyyyo++++++o: + :o++ssoooooo${c2}/-------------${c1}+syyyyyo+++++oo + `o+++ssoooooo${c2}/-----${c1}+++++ooosyyyyyyo++++os: + /o+++ssoooooo${c2}/-----${c1}ooooooosyyyyyyyo+oooss + .o++++ssooooos${c2}/------------${c1}syyyyyyhsosssy- + ++++++ssooooss${c2}/-----${c1}+++++ooyyhhhhhdssssso + -s+++++syssssss${c2}/-----${c1}yyhhhhhhhhhhhddssssy. + sooooooyhyyyyyh${c2}/-----${c1}hhhhhhhhhhhddddyssy+ + :yooooooyhyyyhhhyyyyyyhhhhhhhhhhdddddyssy` + yoooooooyhyyhhhhhhhhhhhhhhhhhhhddddddysy/ +-ysooooooydhhhhhhhhhhhddddddddddddddddssy + .-:/+osssyyyysyyyyyyyyyyyyyyyyyyyyyyssy: + ``.-/+oosysssssssssssssssssssssss + ``.:/+osyysssssssssssssh. + `-:/+osyyssssyo + .-:+++` +EOF + ;; + + "Funtoo"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} .dKXXd . + :XXl;:. .OXo +.'OXO'' .''''''''''''''''''''':XNd..'oco.lco, +xXXXXXX, cXXXNNNXXXXNNXXXXXXXXNNNNKOOK; d0O .k + kXX xXo KNNN0 KNN. 'xXNo :c; 'cc. + kXX xNo KNNN0 KNN. :xxxx. 'NNo + kXX xNo loooc KNN. oNNNN. 'NNo + kXX xN0:. KNN' oNNNX' ,XNk + kXX xNNXNNNNNNNNXNNNNNNNNXNNOxXNX0Xl + ... ......................... .;cc;. +EOF + ;; + + "GalliumOS"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1}sooooooooooooooooooooooooooooooooooooo+: +yyooooooooooooooooooooooooooooooooo+/::: +yyysoooooooooooooooooooooooooooo+/:::::: +yyyyyoooooooooooooooooooooooo+/::::::::: +yyyyyysoooooooooooooooooo++/:::::::::::: +yyyyyyysoooooooooooooo++/::::::::::::::: +yyyyyyyyysoooooo${c2}sydddys${c1}+/::::::::::::::: +yyyyyyyyyysooo${c2}smMMMMMMMNd${c1}+:::::::::::::: +yyyyyyyyyyyyo${c2}sMMMMMMMMMMMN${c1}/::::::::::::: +yyyyyyyyyyyyy${c2}dMMMMMMMMMMMM${c1}o//::::::::::: +yyyyyyyyyyyyy${c2}hMMMMMMMMMMMm${c1}--//:::::::::: +yyyyyyyyyyyyyy${c2}hmMMMMMMMNy${c1}:..-://:::::::: +yyyyyyyyyyyyyyy${c2}yyhhyys+:${c1}......://::::::: +yyyyyyyyyyyyyyys+:--...........-///::::: +yyyyyyyyyyyys+:--................://:::: +yyyyyyyyyo+:-.....................-//::: +yyyyyyo+:-..........................://: +yyyo+:-..............................-// +o/:-...................................: +EOF + ;; + + "Garuda"*) + set_colors 7 7 3 7 2 4 + read -rd '' ascii_data <<'EOF' + +${c3} + .%;888:8898898: + x;XxXB%89b8:b8%b88: + .8Xxd 8X:. + .8Xx; 8x:. + .tt8x ${c6}.d${c3} x88; + .@8x8; ${c6}.db:${c3} xx@; + ${c4},tSXX° .bbbbbbbbbbbbbbbbbbbB8x@; + .SXxx bBBBBBBBBBBBBBBBBBBBbSBX8; + ,888S pd! + 8X88/ q + GBB. + ${c5}x%88 d888@8@X@X@X88X@@XX@@X@8@X. + dxXd dB8b8b8B8B08bB88b998888b88x. + dxx8o .@@;. + dx88 .t@x. + d:SS@8ba89aa67a853Sxxad. + .d988999889889899dd. + +EOF + + ;; + + "gentoo_small") + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} _-----_ +( \\ +\ 0 \\ +${c2} \ ) + / _/ +( _- +\____- +EOF + ;; + + "Gentoo"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} -/oyddmdhs+:. + -o${c2}dNMMMMMMMMNNmhy+${c1}-` + -y${c2}NMMMMMMMMMMMNNNmmdhy${c1}+- + `o${c2}mMMMMMMMMMMMMNmdmmmmddhhy${c1}/` + om${c2}MMMMMMMMMMMN${c1}hhyyyo${c2}hmdddhhhd${c1}o` +.y${c2}dMMMMMMMMMMd${c1}hs++so/s${c2}mdddhhhhdm${c1}+` + oy${c2}hdmNMMMMMMMN${c1}dyooy${c2}dmddddhhhhyhN${c1}d. + :o${c2}yhhdNNMMMMMMMNNNmmdddhhhhhyym${c1}Mh + .:${c2}+sydNMMMMMNNNmmmdddhhhhhhmM${c1}my + /m${c2}MMMMMMNNNmmmdddhhhhhmMNh${c1}s: + `o${c2}NMMMMMMMNNNmmmddddhhdmMNhs${c1}+` + `s${c2}NMMMMMMMMNNNmmmdddddmNMmhs${c1}/. + /N${c2}MMMMMMMMNNNNmmmdddmNMNdso${c1}:` ++M${c2}MMMMMMNNNNNmmmmdmNMNdso${c1}/- +yM${c2}MNNNNNNNmmmmmNNMmhs+/${c1}-` +/h${c2}MMNNNNNNNNMNdhs++/${c1}-` +`/${c2}ohdmmddhys+++/:${c1}.` + `-//////:--. +EOF + ;; + + "Pentoo"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c2} `:oydNNMMMMNNdyo:` + :yNMMMMMMMMMMMMMMMMNy: + :dMMMMMMMMMMMMMMMMMMMMMMd: + oMMMMMMMho/-....-/ohMMMMMMMo + oMMMMMMy. .yMMMMMMo + .MMMMMMo oMMMMMM. + +MMMMMm mMMMMM+ + oMMMMMh hMMMMMo + //hMMMMMm//${c1}`${c2} ${c1}`${c2}////mMMMMMh// +MMMMMMMMMMM${c1}/${c2} ${c1}/o/`${c2} ${c1}.${c2}smMMMMMMMMMMM +MMMMMMMMMMm ${c1}`NMN:${c2} ${c1}.${c2}yMMMMMMMMMM +MMMMMMMMMMMh${c1}:.${c2} dMMMMMMMMM +MMMMMMMMMMMMMy${c1}.${c2} ${c1}-${c2}NMMMMMMMMM +MMMMMMMMMMMd:${c1}`${c2} ${c1}-${c2}yNMMMMMMMMMM +MMMMMMMMMMh${c1}`${c2} ${c1}./${c2}hNMMMMMMMMMMMM +MMMMMMMMMM${c1}s${c2} ${c1}.:${c2}ymMMMMMMMMMMMMMMM +MMMMMMMMMMN${c1}s:..-/${c2}ohNMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM + +EOF + ;; + + "glaucus"*) + set_colors 5 + read -rd '' ascii_data <<'EOF' +${c1} ,, ,d88P + ,d8P ,ad8888* + ,888P d88888* ,,ad8888P* + d d888P a88888P* ,ad8888888* + .d8 d8888: d888888* ,d888888P* + .888; 88888b d8888888b8888888P + d8888J888888a88888888888888P* ,d + 88888888888888888888888888P ,,d8* + 888888888888888888888888888888888* + *8888888888888888888888888888888* + Y888888888P* `*``*888888888888* + *^888^* *Y888P** +EOF + ;; + + "gNewSense"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} ..,,,,.. + .oocchhhhhhhhhhccoo. + .ochhlllllllc hhhhhh ollllllhhco. + ochlllllllllll hhhllllllhhh lllllllllllhco + .cllllllllllllll hlllllo +hllh llllllllllllllc. +ollllllllllhco'' hlllllo +hllh ``ochllllllllllo +hllllllllc' hllllllllllllh `cllllllllh +ollllllh +llllllllllll+ hllllllo + `cllllh. ohllllllho .hllllc' + ochllc. ++++ .cllhco + `+occooo+. .+ooocco+' + `+oo++++ ++++oo+' +EOF + ;; + + "GNOME"*) + set_colors 4 + read -rd '' ascii_data <<'EOF' +${c1} ,@@@@@@@@, + @@@@@@ @@@@@@@@@@@@ + ,@@. @@@@@@@ *@@@@@@@@@@@@ + @@@@@% @@@@@@( @@@@@@@@@@@& + @@@@@@ @@@@* @@@@@@@@@# +@@@@* @@@@, *@@@@@% +@@@@@. + @@@@# @@@@@@@@@@@@@@@@ + ,@@@@@@@@@@@@@@@@@@@@@@@, + ,@@@@@@@@@@@@@@@@@@@@@@@@@@& + .@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@( + @@@@@@@@@@@@@@@@@@@@% + @@@@@@@@@@@@@@@@ + @@@@@@@@@@@@* @@@@@@@@/ + &@@@@@@@@@@ @@@@@@@@@* + @@@@@@@@@@@, @@@@@@@@@* + ,@@@@@@@@@@@@@@@@@@@@& + &@@@@@@@@@@@@@@ + ... +EOF + ;; + + "GNU") + set_colors fg 7 + read -rd '' ascii_data <<'EOF' +${c1} _-`````-, ,- '- . + .' .- - | | - -. `. + /.' / `. \ +:/ : _... ..._ `` : +:: : /._ .`:'_.._\. || : +:: `._ ./ ,` : \ . _.'' . +`:. / | -. \-. \\_ / + \:._ _/ .' .@) \@) ` `\ ,.' + _/,--' .- .\,-.`--`. + ,'/'' (( \ ` ) + /'/' \ `-' ( + '/'' `._,-----' + ''/' .,---' + ''/' ;: + ''/'' ''/ + ''/''/'' + '/'/' + `; +EOF + ;; + + "GoboLinux"*) + set_colors 5 4 6 2 + read -rd '' ascii_data <<'EOF' +${c1} _____ _ + / ____| | | +| | __ ___ | |__ ___ +| | |_ |/ _ \| '_ \ / _ \ +| |__| | (_) | |_) | (_) | + \_____|\___/|_.__/ \___/ +EOF + ;; + + "Grombyang"*) + set_colors 4 2 1 + read -rd '' ascii_data <<'EOF' +${c1} eeeeeeeeeeee + eeeeeeeeeeeeeeeee + eeeeeeeeeeeeeeeeeeeeeee + eeeee ${c2}.o+ ${c1}eeee + eeee ${c2}`ooo/ ${c1}eeee + eeee ${c2}`+oooo: ${c1}eeee +eee ${c2}`+oooooo: ${c1}eee +eee ${c2}-+oooooo+: ${c1}eee +ee ${c2}`/:oooooooo+: ${c1}ee +ee ${c2}`/+ +++ +: ${c1}ee +ee ${c2}+o+\ ${c1}ee +eee ${c2}+o+\ ${c1}eee +eee ${c2}// \\ooo/ \\\ ${c1}eee + eee ${c2}//++++oooo++++\\\ ${c1}eee + eeee ${c2}::::++oooo+::::: ${c1}eeee + eeeee ${c3}Grombyang OS ${c1} eeee + eeeeeeeeeeeeeeeeeeeeeee + eeeeeeeeeeeeeeeee +EOF + ;; + + "guix_small"*) + set_colors 3 7 6 1 8 + read -rd '' ascii_data <<'EOF' +${c1}|.__ __.| +|__ \\ / __| + \\ \\ / / + \\ \\ / / + \\ \\ / / + \\ \\/ / + \\__/ +EOF + ;; + + "Guix"*) + set_colors 3 7 6 1 8 + read -rd '' ascii_data <<'EOF' +${c1} .. `. + `--..```..` `..```..--` + .-:///-:::. `-:::///:-. + ````.:::` `:::.```` + -//:` -::- + ://: -::- + `///- .:::` + -+++-:::. + :+/:::- + `-....` +EOF + ;; + + "haiku_small"*) + set_colors 2 8 + read -rd '' ascii_data <<'EOF' +${c1} ,^, + / \\ +*--_ ; ; _--* +\\ '" "' / + '. .' +.-'" "'-. + '-.__. .__.-' + |_| +EOF + ;; + + "Haiku"*) + set_colors 1 3 7 2 + read -rd '' ascii_data <<'EOF' +${c3} + + MMMM MMMM + MMMM MMMM + MMMM MMMM + MMMM MMMM + MMMM${c4} .ciO| /YMMMMM*" +${c3} MMMM${c4} .cOMMMMM|/MMMMM/` + , ,iMM|/MMMMMMMMMMMMMMM* + `*.__,-cMMMMMMMMMMMMMMMMM/`${c3}.MMM + MM${c4}MMMMMMM/`:MMM/ ${c3}MMMM + MMMM MMMM + MMMM MMMM + """" """" +EOF + ;; + + "Huayra"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c2} ` + . . ` + `` - . . + `.` -` `. - `` .` + ..`-`-` + - / .` ``` + .--.+--`+:- :/.` .-``.` + -+/so::h:.d-`./:`.` + :hNhyMomy:os-...-. ```` + .dhsshNmNhoo+:-``.``` + ${c1}`ohy:-${c2}NMds+::-.`` + ````${c1}.hNN+`${c2}mMNho/:-....```` + ````` `../dmNhoo+/:..`` + ```` .dh++o/:....` +.+s/` `/s-.-.:.`` ```` +::` `::`..` + .` `.. + `` +EOF + ;; + + "HydroOS"*) + set_colors 1 2 3 4 5 + read -rd '' ascii_data <<'EOF' +${c1} + _ _ _ ____ _____ + | | | | | | / __ \ / ____| + | |__| |_ _ __| |_ __ ___ | | | | (___ + | __ | | | |/ _` | '__/ _ \| | | |\___ \ + | | | | |_| | (_| | | | (_) | |__| |____) | + |_| |_|\__, |\__,_|_| \___/ \____/|_____/ + __/ | + |___/ +EOF + ;; + + "hyperbola_small"*) + set_colors 8 + read -rd '' ascii_data <<'EOF' +${c1} |`__.`/ + \____/ + .--. + / \\ + / ___ \\ + / .` `.\\ +/.` `.\\ +EOF + ;; + + "Hyperbola"*) + set_colors 8 + read -rd '' ascii_data <<'EOF' +${c1} WW + KX W + WO0W NX0O + NOO0NW WNXK0OOKW + W0OOOOOOOOOOOOKN + N0OOOOOOO0KXW + WNXXXNW + NXK00000KN + WNK0OOOOOOOOOO0W + NK0OOOOOOOOOOOOOO0W + X0OOOOOOO00KK00OOOOOK + X0OOOO0KNWW WX0OO0W + X0OO0XNW KOOW + N00KNW KOW + NKXN W0W +WW W +EOF + ;; + + "iglunix"*|"iglu"*) + set_colors 8 + read -rd '' ascii_data <<'EOF' +${c1} | + | | + | +| ________ +| /\ | \ + / \ | \ | + / \ \ | +/ \________\ +\ / / + \ / / + \ / / + \/________/ +EOF + ;; + + "januslinux"*|"janus"*|"Ataraxia Linux"*|"Ataraxia"*) + set_colors 4 5 6 2 + read -rd '' ascii_data <<'EOF' +${c1} 'l: + loooooo + loooo coooool + looooooooooooooooooool + looooooooooooooooo + lool cooo + coooooooloooooooo + clooooo ;lood cloooo + :loooocooo cloo loooo + loooo :ooooool loooo +looo cooooo cooooo +looooooooooooo ;loooooo ${c2}looooooc +${c1}looooooooo loo cloooooool ${c2}looooc +${c1} cooo cooooooooooo ${c2}looolooooool +${c1} cooo: ${c2}coooooooooooooooooool + loooooooooooolc: loooc; + cooo: loooooooooooc + ;oool looooooo: + coool olc, + looooc ,, + coooooc loc + :oooool, coool:, looool:, + looool: ooooooooooooooo: + cooolc .ooooooooooool +EOF + ;; + + "Kaisen"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} ` + `:+oyyho. + `+:`sdddddd/ + `+` :ho oyo++ohds-` + .ho :dd. .: `sddddddhhyso+/- + ody.ddd-:yd- +hysssyhddddddddho` + yddddddhddd` ` `--` -+hddddddh. + hddy-+dddddy+ohh/..+sddddy/:::+ys + :ddd/sdddddddddd- oddddddd ` + `yddddddddddddddd/ /ddddddd/ +:. :ydddddddddddddddddo..sddddddy/` +odhdddddddo- `ddddh+-``....-+hdddddds. +-ddddddhd: /dddo -ydddddddhdddddddd- + /hdy:o - `:sddds .`./hdddddddddddddo + `/- `+hddyosy+ :dddddddy-.-od/ + :sydds -hddddddd` / + .+shd- `:ohddddddddd` + `:+ooooooooooooo: +EOF + ;; + + "Kali"*) + set_colors 4 8 + read -rd '' ascii_data <<'EOF' +${c1}.............. + ..,;:ccc,. + ......''';lxO. +.....''''..........,:ld; + .';;;:::;,,.x, + ..'''. 0Xxoc:,. ... + .... ,ONkc;,;cokOdc',. + . OMo ':${c2}dd${c1}o. + dMc :OO; + 0M. .:o. + ;Wd + ;XO, + ,d0Odlc;,.. + ..',;:cdOOd::,. + .:d;.':;. + 'd, .' + ;l .. + .o + c + .' + . +EOF + ;; + + "Drunk"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1}######################################### +######################################### +####/ . ####* /######## +##/ ############/ * /####### +############### /####### +###########* ,*/######## +#######/ /######, ######### +#######* ,##########* ####### +###* ############* ##### +#/ *#%##############/ #### +#/ #### ####################/. ### +#W ##/ /######################*## # +## ### /#####################/ /# +#### ###* #################### # +##/# ######## *################## /# +############## ####################### +######################################### +EOF + ;; + + "KaOS"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} .. + ..... ..OSSAAAAAAA.. + .KKKKSS. .SSAAAAAAAAAAA. +.KKKKKSO. .SAAAAAAAAAA... +KKKKKKS. .OAAAAAAAA. +KKKKKKS. .OAAAAAA. +KKKKKKS. .SSAA.. +.KKKKKS..OAAAAAAAAAAAA........ + DKKKKO.=AA=========A===AASSSO.. + AKKKS.==========AASSSSAAAAAASS. + .=KKO..========ASS.....SSSSASSSS. + .KK. .ASS..O.. =SSSSAOSS: + .OK. .ASSSSSSSO...=A.SSA. + .K ..SSSASSSS.. ..SSA. + .SSS.AAKAKSSKA. + .SSS....S.. +EOF + ;; + + "KDE"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} `..---+/---..` + `---.`` `` `.---.` + .--.` `` `-:-. + `:/: `.----//----.` :/- + .:. `---` `--.` .:` + .:` `--` .:- `:. + `/ `:. `.-::-.` -:` `/` + /. /. `:++++++++:` .: .: +`/ .: `+++++++++++/ /` `+` +/+` -- .++++++++++++` :. .+: +`/ .: `+++++++++++/ /` `+` + /` /. `:++++++++:` .: .: + ./ `:. `.:::-.` -:` `/` + .:` `--` .:- `:. + .:. `---` `--.` .:` + `:/: `.----//----.` :/- + .-:.` `` `-:-. + `---.`` `` `.---.` + `..---+/---..` +EOF + ;; + + "Kibojoe"*) + set_colors 2 7 4 + read -rd '' ascii_data <<'EOF' + ${c3} ./+oooooo+/. + -/+ooooo+/:.` + ${c1}`${c3}yyyo${c2}+++/++${c3}osss${c1}. + ${c1}+NMN${c3}yssssssssssss${c1}. + ${c1}.dMMMMN${c3}sssssssssssy${c1}Ns` + +MMMMMMMm${c3}sssssssssssh${c1}MNo` + `hMMMMMNNNMd${c3}sssssssssssd${c1}MMN/ + .${c3}syyyssssssy${c1}NNmmmmd${c3}sssss${c1}hMMMMd: + -NMmh${c3}yssssssssyhhhhyssyh${c1}mMMMMMMMy` + -NMMMMMNN${c3}mdhyyyyyyyhdm${c1}NMMMMMMMMMMMN+ +`NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd. +ods+/:-----://+oyydmNMMMMMMMMMMMMMMMMMN- +` .-:+osyhhdmmNNNmdo +EOF + ;; + + "Kogaion"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ;; ,; + ;;; ,;; + ,;;;; ;;;; + ,;;;;;;;; ;;;; + ;;;;;;;;;;; ;;;;; + ,;;;;;;;;;;;; ';;;;;, + ;;;;;;;;;;;;;;, ';;;;;;; + ;;;;;;;;;;;;;;;;;, ';;;;; +; ';;;;;;;;;;;;;;;;;;, ;;; +;;;, ';;;;;;;;;;;;;;;;;;;,;; +;;;;;, ';;;;;;;;;;;;;;;;;;, +;;;;;;;;, ';;;;;;;;;;;;;;;;, +;;;;;;;;;;;;, ';;;;;;;;;;;;;; +';;;;;;;;;;;;; ';;;;;;;;;;;;; + ';;;;;;;;;;;;;, ';;;;;;;;;;; + ';;;;;;;;;;;;; ;;;;;;;;;; + ';;;;;;;;;;;; ;;;;;;;; + ';;;;;;;; ;;;;;; + ';;;;; ;;;; + ';;; ;; +EOF + ;; + + "Korora"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} ____________ + _add55555555554${c1}: + _w?'${c1}``````````'${c2})k${c1}: + _Z'${c1}`${c2} ]k${c1}: + m(${c1}`${c2} )k${c1}: + _.ss${c1}`${c2}m[${c1}`${c2}, ]e${c1}: + .uY"^`${c1}`${c2}Xc${c1}`${c2}?Ss. d(${c1}` + jF'${c1}`${c2} `@. ${c1}`${c2}Sc .jr${c1}` + jr${c1}`${c2} `?n_ ${c1}`${c2}$; _a2"${c1}` +.m${c1}:${c2} `~M${c1}`${c2}1k${c1}`${c2}5?!`${c1}` +:#${c1}:${c2} ${c1}`${c2})e${c1}``` +:m${c1}:${c2} ,#'${c1}` +:#${c1}:${c2} .s2'${c1}` +:m,________.aa7^${c1}` +:#baaaaaaas!J'${c1}` + ``````````` +EOF + ;; + + "KSLinux"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} K K U U RRRR ooo + K K U U R R o o + KKK U U RRRR o o + K K U U R R o o + K K UUU R R ooo + +${c2} SSS AAA W W AAA + S A A W W A A + SSS AAAAA W W W AAAAA + S A A WW WW A A + SSS A A W W A A +EOF + ;; + + "Kubuntu"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} `.:/ossyyyysso/:. + .:oyyyyyyyyyyyyyyyyyyo:` + -oyyyyyyyo${c2}dMMy${c1}yyyyyyysyyyyo- + -syyyyyyyyyy${c2}dMMy${c1}oyyyy${c2}dmMMy${c1}yyyys- + oyyys${c2}dMy${c1}syyyy${c2}dMMMMMMMMMMMMMy${c1}yyyyyyo + `oyyyy${c2}dMMMMy${c1}syysoooooo${c2}dMMMMy${c1}yyyyyyyyo` + oyyyyyy${c2}dMMMMy${c1}yyyyyyyyyyys${c2}dMMy${c1}sssssyyyo +-yyyyyyyy${c2}dMy${c1}syyyyyyyyyyyyyys${c2}dMMMMMy${c1}syyy- +oyyyysoo${c2}dMy${c1}yyyyyyyyyyyyyyyyyy${c2}dMMMMy${c1}syyyo +yyys${c2}dMMMMMy${c1}yyyyyyyyyyyyyyyyyysosyyyyyyyy +yyys${c2}dMMMMMy${c1}yyyyyyyyyyyyyyyyyyyyyyyyyyyyy +oyyyyysos${c2}dy${c1}yyyyyyyyyyyyyyyyyy${c2}dMMMMy${c1}syyyo +-yyyyyyyy${c2}dMy${c1}syyyyyyyyyyyyyys${c2}dMMMMMy${c1}syyy- + oyyyyyy${c2}dMMMy${c1}syyyyyyyyyyys${c2}dMMy${c1}oyyyoyyyo + `oyyyy${c2}dMMMy${c1}syyyoooooo${c2}dMMMMy${c1}oyyyyyyyyo + oyyysyyoyyyys${c2}dMMMMMMMMMMMy${c1}yyyyyyyo + -syyyyyyyyy${c2}dMMMy${c1}syyy${c2}dMMMy${c1}syyyys- + -oyyyyyyy${c2}dMMy${c1}yyyyyysosyyyyo- + ./oyyyyyyyyyyyyyyyyyyo/. + `.:/oosyyyysso/:.` +EOF + ;; + + "LEDE"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' + ${c1} _________ + / /\ + / LE / \ + / DE / \ + /________/ LE \ + \ \ DE / + \ LE \ / + \ DE \ / + \________\/ +EOF + ;; + + "LaxerOS"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' +${c2} + /. + `://:- + `//////: + .////////:` + -//////////:` + -/////////////` + :///////////////. + `://////.```-//////- + `://///:` .//////- + `//////: `//////: + .//////- `://///:` + -//////- `://///:` + -//////. ://////` + ://////` -//////. + `/////:` ./////: + .-::-` .:::-` + +.:://////////////////////////////////::. +//////////////////////////////////////// +.:////////////////////////////////////:. + +EOF + ;; + + "LibreELEC"*) + set_colors 2 3 7 14 13 + read -rd '' ascii_data <<'EOF' +${c1} :+ooo/. ${c2}./ooo+: +${c1} :+ooooooo/. ${c2}./ooooooo+: +${c1} :+ooooooooooo:${c2}:ooooooooooo+: +${c1} :+ooooooooooo+- ${c2}-+ooooooooooo+: +${c1} :+ooooooooooo+- ${c3}-- ${c2}-+ooooooooooo+: +${c1}.+ooooooooooo+- ${c3}:+oo+: ${c2}-+ooooooooooo+- +${c1}-+ooooooooo+- ${c3}:+oooooo+: ${c2}-+oooooooooo- +${c1} :+ooooo+- ${c3}:+oooooooooo+: ${c2}-+oooooo: +${c1} :+o+- ${c3}:+oooooooooooooo+: ${c2}-+oo: +${c4} ./ ${c3}:oooooooooooooooooo: ${c5}/. +${c4} ./oo+: ${c3}-+oooooooooooooo+- ${c5}:+oo/. +${c4} ./oooooo+: ${c3}-+oooooooooo+- ${c5}:+oooooo/. +${c4}-oooooooooo+: ${c3}-+oooooo+- ${c5}:+oooooooooo- +${c4}.+ooooooooooo+: ${c3}-+oo+- ${c5}:+ooooooooooo+. +${c4} -+ooooooooooo+: ${c3}.. ${c5}:+ooooooooooo+- +${c4} -+ooooooooooo+: ${c5}:+ooooooooooo+- +${c4} -+oooooooooo+:${c5}:+oooooooooo+- +${c4} -+oooooo+: ${c5}:+oooooo+- +${c4} -+oo+: ${c5}:+oo+- +${c4} .. ${c5}.. +EOF + ;; + + "Linux") + set_colors fg 8 3 + read -rd '' ascii_data <<'EOF' +${c2} ##### +${c2} ####### +${c2} ##${c1}O${c2}#${c1}O${c2}## +${c2} #${c3}#####${c2}# +${c2} ##${c1}##${c3}###${c1}##${c2}## +${c2} #${c1}##########${c2}## +${c2} #${c1}############${c2}## +${c2} #${c1}############${c2}### +${c3} ##${c2}#${c1}###########${c2}##${c3}# +${c3}######${c2}#${c1}#######${c2}#${c3}###### +${c3}#######${c2}#${c1}#####${c2}#${c3}####### +${c3} #####${c2}#######${c3}##### +EOF + ;; + + "linuxlite_small"*) + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} /\\ + / \\ + / ${c2}/ ${c1}/ +> ${c2}/ ${c1}/ +\\ ${c2}\\ ${c1}\\ + \\_${c2}\\${c1}_\\ +${c2} \\ +EOF + ;; + + "Linux Lite"* | "Linux_Lite"*) + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} ,xXc + .l0MMMMMO + .kNMMMMMWMMMN, + KMMMMMMKMMMMMMo + 'MMMMMMNKMMMMMM: + kMMMMMMOMMMMMMO + .MMMMMMX0MMMMMW. + oMMMMMMxWMMMMM: + WMMMMMNkMMMMMO +:MMMMMMOXMMMMW +.0MMMMMxMMMMM; +:;cKMMWxMMMMO +'MMWMMXOMMMMl + kMMMMKOMMMMMX: + .WMMMMKOWMMM0c + lMMMMMWO0MNd:' + oollXMKXoxl;. + ':. .: .' + .. + . +EOF + ;; + + "LMDE"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' + ${c2}`.-::---.. +${c1} .:++++ooooosssoo:. + .+o++::. `.:oos+. +${c1} :oo:.` -+oo${c2}: +${c1} ${c2}`${c1}+o/` .${c2}::::::${c1}-. .++-${c2}` +${c1}${c2}`${c1}/s/ .yyyyyyyyyyo: +o-${c2}` +${c1}${c2}`${c1}so .ss ohyo` :s-${c2}: +${c1}${c2}`${c1}s/ .ss h m myy/ /s`${c2}` +${c1}`s: `oo s m Myy+-o:` +`oo :+sdoohyoydyso/. + :o. .:////////++: +${c1} `/++ ${c2}-:::::- +${c1} ${c2}`${c1}++- +${c1} ${c2}`${c1}/+- +${c1} ${c2}.${c1}+/. +${c1} ${c2}.${c1}:+-. + `--.`` +EOF + ;; + + "Lubuntu"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} `.:/ossyyyysso/:. + `.:yyyyyyyyyyyyyyyyyy:.` + .:yyyyyyyyyyyyyyyyyyyyyyyy:. + .:yyyyyyyyyyyyyyyyyyyyyyyyyyyy:. + -yyyyyyyyyyyyyy${c2}+hNMMMNh+${c1}yyyyyyyyy- + :yy${c2}mNy+${c1}yyyyyyyy${c2}+Nmso++smMdhyysoo+${c1}yy: + -yy${c2}+MMMmmy${c1}yyyyyy${c2}hh${c1}yyyyyyyyyyyyyyyyyyy- +.yyyy${c2}NMN${c1}yy${c2}shhs${c1}yyy${c2}+o${c1}yyyyyyyyyyyyyyyyyyyy. +:yyyy${c2}oNM+${c1}yyyy${c2}+sso${c1}yyyyyyy${c2}ss${c1}yyyyyyyyyyyyy: +:yyyyy${c2}+dNs${c1}yyyyyyy${c2}++${c1}yyyyy${c2}oN+${c1}yyyyyyyyyyyy: +:yyyyy${c2}oMMmhysso${c1}yyyyyyyyyy${c2}mN+${c1}yyyyyyyyyyy: +:yyyyyy${c2}hMm${c1}yyyyy${c2}+++${c1}yyyyyyy${c2}+MN${c1}yyyyyyyyyyy: +.yyyyyyy${c2}ohmy+${c1}yyyyyyyyyyyyy${c2}NMh${c1}yyyyyyyyyy. + -yyyyyyyyyy${c2}++${c1}yyyyyyyyyyyy${c2}MMh${c1}yyyyyyyyy- + :yyyyyyyyyyyyyyyyyyyyy${c2}+mMN+${c1}yyyyyyyy: + -yyyyyyyyyyyyyyyyy${c2}+sdMMd+${c1}yyyyyyyy- + .:yyyyyyyyy${c2}hmdmmNMNdy+${c1}yyyyyyyy:. + .:yyyyyyy${c2}my${c1}yyyyyyyyyyyyyyy:. + `.:yyyy${c2}s${c1}yyyyyyyyyyyyy:.` + `.:/oosyyyysso/:.` +EOF + ;; + + "Lunar"*) + set_colors 4 7 3 + read -rd '' ascii_data <<'EOF' +${c1}`-. `-. + -ohys/-` `:+shy/` + -omNNdyo/` :+shmNNy/` + ${c3} - + /mMmo + hMMMN` + .NMMs + ${c1} -:+oooo+//: ${c3}/MN${c1}. -///oooo+/-` + /:.` ${c3}/${c1} `.:/` +${c3} __ + | | _ _ ___ ___ ___ + | |__| | | | .'| _| + |_____|___|_|_|__,|_| +EOF + ;; + + "mac"*"_small") + set_colors 2 3 1 5 4 + read -rd '' ascii_data <<'EOF' +${c1} .:' + _ :'_ +${c2} .'`_`-'_``. +:________.-' +${c3}:_______: +:_______: +${c4} :_______`-; +${c5} `._.-._.' +EOF + ;; + + "mac"* | "Darwin") + set_colors 2 3 1 1 5 4 + read -rd '' ascii_data <<'EOF' +${c1} c.' + ,xNMM. + .OMMMMo + lMM" + .;loddo:. .olloddol;. + cKMMMMMMMMMMNWMMMMMMMMMM0: +${c2} .KMMMMMMMMMMMMMMMMMMMMMMMWd. + XMMMMMMMMMMMMMMMMMMMMMMMX. +${c3};MMMMMMMMMMMMMMMMMMMMMMMM: +:MMMMMMMMMMMMMMMMMMMMMMMM: +${c4}.MMMMMMMMMMMMMMMMMMMMMMMMX. + kMMMMMMMMMMMMMMMMMMMMMMMMWd. + ${c5}'XMMMMMMMMMMMMMMMMMMMMMMMMMMk + 'XMMMMMMMMMMMMMMMMMMMMMMMMK. + ${c6}kMMMMMMMMMMMMMMMMMMMMMMd + ;KMMMMMMMWXXWMMMMMMMk. + "cooc*" "*coo'" +EOF + ;; + + "mageia_small"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} * + * + ** +${c2} /\\__/\\ +/ \\ +\\ / + \\____/ +EOF + ;; + + "Mageia"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} .°°. + °° .°°. + .°°°. °° + . . + °°° .°°°. + .°°°. '___' +${c2} .${c1}'___' ${c2} . + :dkxc;'. ..,cxkd; + .dkk. kkkkkkkkkk .kkd. +.dkk. ';cloolc;. .kkd +ckk. .kk; +xO: cOd +xO: lOd +lOO. .OO: +.k00. .00x + .k00; ;00O. + .lO0Kc;,,,,,,;c0KOc. + ;d00KKKKKK00d; + .,KKKK,. +EOF + ;; + + "MagpieOS"*) + set_colors 2 1 3 5 + read -rd '' ascii_data <<'EOF' +${c1} ;00000 :000Ol + .x00kk00: O0kk00k; + l00: :00. o0k :O0k. + .k0k. x${c2}d$dddd${c1}k' .d00; + k0k. ${c2}.dddddl ${c1}o00, + o00. ${c2}':cc:. ${c1}d0O +.00l ,00. +l00. d0x +k0O .:k0o +O0k ;dO0000d. +k0O .O0O${c2}xxxxk${c1}00: +o00. k0O${c2}dddddd${c1}occ +'00l x0O${c2}dddddo${c3};..${c1} + x00. .x00${c2}kxxd${c3}:..${c1} + .O0x .:oxxx${c4}Okl.${c1} + .x0d ${c4},xx,${c1} + .:o. ${c4}.xd ckd${c1} + .. ${c4}dxl .xx; + :xxolldxd' + ;oxdl. +EOF + ;; + + "Mandriva"* | "Mandrake"*) + set_colors 4 3 + read -rd '' ascii_data <<'EOF' +${c2} `` + `-. +${c1} ` ${c2}.--- +${c1} -/ ${c2}-::--` +${c1} `++ ${c2}`----...```-:::::. +${c1} `os. ${c2}.::::::::::::::-``` ` ` +${c1} +s+ ${c2}.::::::::::::::::---...--` +${c1}-ss: ${c2}`-::::::::::::::::-.``.`` +${c1}/ss- ${c2}.::::::::::::-.`` ` +${c1}+ss: ${c2}.::::::::::::- +${c1}/sso ${c2}.::::::-::::::- +${c1}.sss/ ${c2}-:::-.` .::::: +${c1} /sss+. ${c2}..`${c1} `--` ${c2}.::: +${c1} -ossso+/:://+/-` ${c2}.:` +${c1} -/+ooo+/-. ${c2}` +EOF + ;; + + "manjaro_small"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1}||||||||| |||| +||||||||| |||| +|||| |||| +|||| |||| |||| +|||| |||| |||| +|||| |||| |||| +|||| |||| |||| +EOF + ;; + + "Manjaro"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1}██████████████████ ████████ +██████████████████ ████████ +██████████████████ ████████ +██████████████████ ████████ +████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +████████ ████████ ████████ +EOF + ;; + + "TeArch"*) + set_colors 39 7 1 + read -rd '' ascii_data <<'EOF' +${c1} @@@@@@@@@@@@@@ + @@@@@@@@@ @@@@@@ + @@@@@ @@@@@ + @@ @@ + @% @@ + @ @ + @@@@@@@@@@@@@@@@@@@@@@@@ @@ + .@@@@@@@@@@@@/@@@@@@@@@@@@ + @@@@@@@@@@@@///@@@@@@@@@@@@ + @@@@@@@@@@@@@((((@@@@@@@@@@@@ + @@@@@@@@@@@#(((((((#@@@@@@@@@@@ + @@@@@@@@@@@#//////////@@@@@@@@@@& + @@@@@@@@@@////@@@@@////@@@@@@@@@@ + @@@@@@@@//////@@@@@/////@@@@@@@@@ + @@@@@@@//@@@@@@@@@@@@@@@//@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@@ .@@@@@@@@@@@@@@@@@@@@@@@@@ @ + @@@@@@ @@@. @@@@@@@ + @@@@@@@&@@@@@@@# #@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@ +EOF + ;; + + "Maui"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} `.-://////:--` + .:/oooooooooooooooo+:. + `:+ooooooooooooooooooooooo:` + `:oooooooooooooooooooooooooooo/` + ..```-oooooo/-`` `:oooooo+:.` `-- + :. +oo+-` /ooo/` -/ + -o. `o+- +o/` -o: +`oo` ::` :o/ `+. .+o` /oo. +/o+ . -+oo- ` /oo/ `ooo/ ++o- /ooo+` .+ooo. :ooo+ +++ .+oooo: -oooo+ `oooo+ +:. .oooooo` :ooooo- :oooo: +` .oooooo: :ooooo+ `ooo+-` + .+oooooo` -oooooo: `o/- + +oooooo: .ooooooo. + /ooooooo` /ooooooo/ .. + `:oooooooo/:::/ooooooooo+:--:/:` + `:+oooooooooooooooooooooo+:` + .:+oooooooooooooooo+:. + `.-://////:-.` +EOF + ;; + + "Mer"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} dMs + .-` + `y`-o+` + ``NMMy + .--`:++. + .hNNNNs + /MMMMMN + `ommmd/ +/ + ```` +/ + `:+sssso/-` + .-::. `-::-` `smNMNmdmNMNd/ .://-` +.ymNMNNdmNMMNm+` -dMMh:.....+dMMs `sNNMMNo +dMN+::NMMy::hMM+ mMMo `ohhy/ `dMM+ yMMy::- +MMm yMM- :MMs NMN` `:::::--sMMh dMM` +MMm yMM- -MMs mMM+ `ymmdsymMMMs dMM` +NNd sNN- -NNs -mMNs-.--..:dMMh` dNN +--- .--` `--. .smMMmdddmMNdo` .-- + ./ohddds+:` + +h- `.:-. + ./`.dMMMN+ + +MMMMMd + `+dmmy- + ``` .+` + .dMNo-y. + `hmm/ + .:` + dMs +EOF + ;; + + "Minix"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c2} -sdhyo+:-` -/syymm: + sdyooymmNNy. `` .smNmmdysNd + odyoso+syNNmysoyhhdhsoomNmm+/osdm/ + :hhy+-/syNNmddhddddddmNMNo:sdNd: + `smNNdNmmNmddddddddddmmmmmmmy` + `ohhhhdddddmmNNdmddNmNNmdddddmdh- + odNNNmdyo/:/-/hNddNy-`..-+ydNNNmd: + `+mNho:` smmd/ sNNh :dmms` -+ymmo. +-od/ -m${c1}mm${c2}mo -NN+ +m${c1}mm${c2}m- yms: ++sms -.` :so: .NN+ :os/ .-`mNh: +.-hyh+:////- -sNNd:` .--://ohNs- + `:hNNNNNNNMMd/sNMmhsdMMh/ymmNNNmmNNy/ + -+sNNNNMMNNNsmNMo: :NNmymNNNNMMMms: + //oydNMMMMydMMNysNMMmsMMMMMNyo/` + ../-yNMMy--/::/-.sMMmos+.` + -+oyhNsooo+omy/``` + `::ohdmds-` +EOF + ;; + + "linuxmint_small"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} ___________ +|_ \\ + | ${c2}| _____ ${c1}| + | ${c2}| | | | ${c1}| + | ${c2}| | | | ${c1}| + | ${c2}\\__${c2}___/ ${c1}| + \\_________/ +EOF + ;; + + "Linux Mint Old"* | "LinuxMintOld"* | "mint_old"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1}MMMMMMMMMMMMMMMMMMMMMMMMMmds+. +MMm----::-://////////////oymNMd+` +MMd ${c2}/++ ${c1}-sNMd: +MMNso/` ${c2}dMM `.::-. .-::.` ${c1}.hMN: +ddddMMh ${c2}dMM :hNMNMNhNMNMNh: ${c1}`NMm + NMm ${c2}dMM .NMN/-+MMM+-/NMN` ${c1}dMM + NMm ${c2}dMM -MMm `MMM dMM. ${c1}dMM + NMm ${c2}dMM -MMm `MMM dMM. ${c1}dMM + NMm ${c2}dMM .mmd `mmm yMM. ${c1}dMM + NMm ${c2}dMM` ..` ... ydm. ${c1}dMM + hMM- ${c2}+MMd/-------...-:sdds ${c1}dMM + -NMm- ${c2}:hNMNNNmdddddddddy/` ${c1}dMM + -dMNs-${c2}``-::::-------.`` ${c1}dMM + `/dMNmy+/:-------------:/yMMM + ./ydNMMMMMMMMMMMMMMMMMMMMM + .MMMMMMMMMMMMMMMMMMM +EOF + ;; + + "Linux Mint"* | "LinuxMint"* | "mint"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c2} ...-:::::-... +${c2} .-MMMMMMMMMMMMMMM-. + .-MMMM${c1}`..-:::::::-..`${c2}MMMM-. + .:MMMM${c1}.:MMMMMMMMMMMMMMM:.${c2}MMMM:. + -MMM${c1}-M---MMMMMMMMMMMMMMMMMMM.${c2}MMM- + `:MMM${c1}:MM` :MMMM:....::-...-MMMM:${c2}MMM:` + :MMM${c1}:MMM` :MM:` `` `` `:MMM:${c2}MMM: +.MMM${c1}.MMMM` :MM. -MM. .MM- `MMMM.${c2}MMM. +:MMM${c1}:MMMM` :MM. -MM- .MM: `MMMM-${c2}MMM: +:MMM${c1}:MMMM` :MM. -MM- .MM: `MMMM:${c2}MMM: +:MMM${c1}:MMMM` :MM. -MM- .MM: `MMMM-${c2}MMM: +.MMM${c1}.MMMM` :MM:--:MM:--:MM: `MMMM.${c2}MMM. + :MMM${c1}:MMM- `-MMMMMMMMMMMM-` -MMM-${c2}MMM: + :MMM${c1}:MMM:` `:MMM:${c2}MMM: + .MMM${c1}.MMMM:--------------:MMMM.${c2}MMM. + '-MMMM${c1}.-MMMMMMMMMMMMMMM-.${c2}MMMM-' + '.-MMMM${c1}``--:::::--``${c2}MMMM-.' +${c2} '-MMMMMMMMMMMMM-' +${c2} ``-:::::-`` +EOF + ;; + + "Live Raizo"* | "Live_Raizo"*) + set_colors 3 + read -rd '' ascii_data <<'EOF' +${c1} `......` + -+shmNMMMMMMNmhs/. + :smMMMMMmmhyyhmmMMMMMmo- + -hMMMMd+:. `----` .:odMMMMh- + `hMMMN+. .odNMMMMMMNdo. .yMMMMs` + hMMMd. -dMMMMmdhhdNMMMNh` .mMMMh +oMMMm` :MMMNs.:sddy:-sMMMN- `NMMM+ +mMMMs dMMMo sMMMMMMd yMMMd sMMMm +----` .---` oNMMMMMh `---. .---- + .sMMy: + /MM/ + +dMMms. + hMMMMMMN + `dMMMMMMm: + .+ss+sMNysMMoomMd+ss+. + +MMMMMMN` +MM/ hMMMMMNs + sMMMMMMm-hNMMMd-hMMMMMMd + :yddh+`hMMMMMMN :yddy/` + .hMMMMd: + `..` +EOF + ;; + + "mx_small"*) + set_colors 4 6 7 + read -rd '' ascii_data <<'EOF' +${c3} \\\\ / + \\\\/ + \\\\ + /\\/ \\\\ + / \\ /\\ + / \\/ \\ +/__________\\ +EOF + ;; + + "MX"*) + set_colors 4 6 7 + read -rd '' ascii_data <<'EOF' +${c3}MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMMMMMMM +MMMMMMMMMMNs..yMMMMMMMMMMMMMm: +NMMMMMMM +MMMMMMMMMN+ :mMMMMMMMMMNo` -dMMMMMMMM +MMMMMMMMMMMs. `oNMMMMMMh- `sNMMMMMMMMM +MMMMMMMMMMMMN/ -hMMMN+ :dMMMMMMMMMMM +MMMMMMMMMMMMMMh- +ms. .sMMMMMMMMMMMMM +MMMMMMMMMMMMMMMN+` ` +NMMMMMMMMMMMMMM +MMMMMMMMMMMMMMNMMd: .dMMMMMMMMMMMMMMM +MMMMMMMMMMMMm/-hMd- `sNMMMMMMMMMMMMM +MMMMMMMMMMNo` -` :h/ -dMMMMMMMMMMMM +MMMMMMMMMd: /NMMh- `+NMMMMMMMMMM +MMMMMMMNo` :mMMN+` `-hMMMMMMMM +MMMMMMh. `oNMMd: `/mMMMMMM +MMMMm/ -hMd- `sNMMMM +MMNs` - :dMMM +Mm: `oMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +EOF + ;; + + "Namib"*) + set_colors 1 + read -rd '' ascii_data <<'EOF' +${c1} .:+shysyhhhhysyhs+:. + -/yyys syyy/- + -shy yhs- + -yhs shy- + +hy yh+ + +ds sd+ +/ys so sy/ +sh smMMNdyo hs +yo ymMMMMNNMMNho oy +N ydMMMNNMMMMMMMMMmy N +N shmMMMMNNMMMMMMMMMMMMMNy N +yo ooshmNMMMNNNNMMMMMMMMMMMMMMMMMms oy +sd yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy ds +/ys sy/ + +ds sd+ + +hy yh+ + -yhs shy- + -shy yhs- + -/yyys syyy/- + .:+shysyhyhhysyhs+:. +EOF + ;; + + "Neptune"*) + set_colors 7 + read -rd '' ascii_data <<'EOF' +${c1} ./+sydddddddys/-. + .+ymNNdyooo/:+oooymNNmy/` + `/hNNh/.` `-+dNNy:` + /mMd/. .++.:oy/ .+mMd- + `sMN/ oMMmdy+. `oNNo + `hMd. `/ymy/. :NMo + oMN- `/dMd: /MM- +`mMy -dMN+` mMs +.MMo -NMM/ yMs + dMh mMMMo:` `NMo + /MM/ /ymMMMm- sMN. + +Mm: .hMMd` oMN/ + +mNs. `yNd/` -dMm- + .yMNs: `/.` `/yNNo` + .odNNy+-` .:ohNNd/. + -+ymNNmdyyyyyyydmNNmy+. + `-//sssssss//. +EOF + ;; + + "netbsd_small"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c2}\\\\${c1}\`-______,----__ +${c2} \\\\ ${c1}__,---\`_ +${c2} \\\\ ${c1}\`.____ +${c2} \\\\${c1}-______,----\`- +${c2} \\\\ + \\\\ + \\\\ +EOF + ;; + + "NetBSD"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} `-/oshdmNMNdhyo+:-` +${c2}y${c1}/s+:-`` `.-:+oydNMMMMNhs/-`` +${c2}-m+${c1}NMMMMMMMMMMMMMMMMMMMNdhmNMMMmdhs+/-` + ${c2}-m+${c1}NMMMMMMMMMMMMMMMMMMMMmy+:` + ${c2}-N/${c1}dMMMMMMMMMMMMMMMds:` + ${c2}-N/${c1}hMMMMMMMMMmho:` + ${c2}-N/${c1}-:/++/:.` +${c2} :M+ + :Mo + :Ms + :Ms + :Ms + :Ms + :Ms + :Ms + :Ms + :Ms +EOF + ;; + + "Netrunner"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} .:oydmMMMMMMmdyo:` + -smMMMMMMMMMMMMMMMMMMds- + +mMMMMMMMMMMMMMMMMMMMMMMMMd+ + /mMMMMMMMMMMMMMMMMMMMMMMMMMMMMm/ + `hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMy` + .mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd` + dMMMMMMMMMMMMMMMMMMMMMMNdhmMMMMMMMMMMh ++MMMMMMMMMMMMMNmhyo+/-. -MMMMMMMMMMMM/ +mMMMMMMMMd+:.` `mMMMMMMMMMMMMd +MMMMMMMMMMMdy/. yMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMNh+` +MMMMMMMMMMMMMMM +mMMMMMMMMMMMMMMMMMs -NMMMMMMMMMMMMMMd ++MMMMMMMMMMMMMMMMMN. `mMMMMMMMMMMMMMMM/ + dMMMMMMMMMMMMMMMMMy hMMMMMMMMMMMMMMMh + `dMMMMMMMMMMMMMMMMM-+MMMMMMMMMMMMMMMd` + `hMMMMMMMMMMMMMMMMmMMMMMMMMMMMMMMMy + /mMMMMMMMMMMMMMMMMMMMMMMMMMMMMm: + +dMMMMMMMMMMMMMMMMMMMMMMMMd/ + -odMMMMMMMMMMMMMMMMMMdo- + `:+ydmNMMMMNmhy+-` +EOF + ;; + + "Nitrux"*) + set_colors 4 + read -rd '' ascii_data <<'EOF' +${c1}`:/. +`/yo +`/yo +`/yo .+:. +`/yo .sys+:.` +`/yo `-/sys+:.` +`/yo ./sss+:.` +`/yo .:oss+:-` +`/yo ./o///:-` +`/yo `.-:///////:` +`/yo `.://///++//-`` +`/yo `.-:////++++/-` +`/yo `-://///++o+/-` +`/yo `-/+o+++ooo+/-` +`/s+:+oooossso/.` +`//+sssssso:. +`+syyyy+:` +:+s+- +EOF + ;; + + "nixos_small") + set_colors 4 6 + read -rd '' ascii_data <<'EOF' + ${c1} \\\\ \\\\ // + ==\\\\__\\\\/ // + // \\\\// +==// //== + //\\\\___// +// /\\\\ \\\\== + // \\\\ \\\\ +EOF + ;; + + "nixos_old"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' +${c1} ::::. ${c2}'::::: ::::' +${c1} '::::: ${c2}':::::. ::::' +${c1} ::::: ${c2}'::::.::::: +${c1} .......:::::..... ${c2}:::::::: +${c1} ::::::::::::::::::. ${c2}:::::: ${c1}::::. + ::::::::::::::::::::: ${c2}:::::. ${c1}.::::' +${c2} ..... ::::' ${c1}:::::' +${c2} ::::: '::' ${c1}:::::' +${c2} ........::::: ' ${c1}:::::::::::. +${c2}::::::::::::: ${c1}::::::::::::: +${c2} ::::::::::: ${c1}.. ${c1}::::: +${c2} .::::: ${c1}.::: ${c1}::::: +${c2} .::::: ${c1}::::: ${c1}''''' ${c2}..... + ::::: ${c1}':::::. ${c2}......:::::::::::::' + ::: ${c1}::::::. ${c2}':::::::::::::::::' +${c1} .:::::::: ${c2}':::::::::: +${c1} .::::''::::. ${c2}'::::. +${c1} .::::' ::::. ${c2}'::::. +${c1} .:::: :::: ${c2}'::::. +EOF + ;; + + "NixOS"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' +${c1} ▗▄▄▄ ${c2}▗▄▄▄▄ ▄▄▄▖ +${c1} ▜███▙ ${c2}▜███▙ ▟███▛ +${c1} ▜███▙ ${c2}▜███▙▟███▛ +${c1} ▜███▙ ${c2}▜██████▛ +${c1} ▟█████████████████▙ ${c2}▜████▛ ${c1}▟▙ +${c1} ▟███████████████████▙ ${c2}▜███▙ ${c1}▟██▙ +${c2} ▄▄▄▄▖ ▜███▙ ${c1}▟███▛ +${c2} ▟███▛ ▜██▛ ${c1}▟███▛ +${c2} ▟███▛ ▜▛ ${c1}▟███▛ +${c2}▟███████████▛ ${c1}▟██████████▙ +${c2}▜██████████▛ ${c1}▟███████████▛ +${c2} ▟███▛ ${c1}▟▙ ▟███▛ +${c2} ▟███▛ ${c1}▟██▙ ▟███▛ +${c2} ▟███▛ ${c1}▜███▙ ▝▀▀▀▀ +${c2} ▜██▛ ${c1}▜███▙ ${c2}▜██████████████████▛ +${c2} ▜▛ ${c1}▟████▙ ${c2}▜████████████████▛ +${c1} ▟██████▙ ${c2}▜███▙ +${c1} ▟███▛▜███▙ ${c2}▜███▙ +${c1} ▟███▛ ▜███▙ ${c2}▜███▙ +${c1} ▝▀▀▀ ▀▀▀▀▘ ${c2}▀▀▀▘ +EOF + ;; + + "Nurunner"*) + set_colors 4 + read -rd '' ascii_data <<'EOF' +${c1} ,xc + ;00cxXl + ;K0, .xNo. + :KO' .lXx. + cXk. ;xl cXk. + cXk. ;k:.,xo. cXk. + .lXx. :x::0MNl,dd. :KO, + .xNx. cx;:KMMMMMNo'dx. ;KK; + .dNl. cd,cXMMMMMMMMMWd,ox' 'OK: +;WK. 'K,.KMMMMMMMMMMMMMWc.Kx lMO + 'OK: 'dl'xWMMMMMMMMMM0::x: 'OK: + .kNo .xo'xWMMMMMM0;:O: ;KK; + .dXd. .do,oNMMO;ck: ;00, + oNd. .dx,;'cO; ;K0, + oNx. okk; ;K0, + lXx. :KO' + cKk' cXk. + ;00:lXx. + ,kd. +EOF + ;; + + "NuTyX"*) + set_colors 4 1 + read -rd '' ascii_data <<'EOF' +${c1} . + . + ... + ... + .... .........--. + ..-++-----....--++++++---. + .-++++++-. .-++++++++++++-----.. + .--... .++..-+++--.....-++++++++++--.. + . .-+-. .**- .... ..-+----.. + .+++. .*+. + -++-----. + .+++++- ++. .*+. .....-+++-----. + -+++-++. .+. .-+***++***++--++++. . + -+-. -- -. -*- ...... ..--. +.-. .+- . -+. +. .+- +. + -- -- + -+----. .- + -++-.+. . + .++. -- + +. ----. + . .+. .. + - . + . +EOF + ;; + + "OBRevenge"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} __ __ + _@@@@ @@@g_ + _@@@@@@ @@@@@@ + _@@@@@@M W@@@@@@_ + j@@@@P ^W@@@@ + @@@@L____ _____Q@@@@ +Q@@@@@@@@@@j@@@@@@@@@@ +@@@@@ T@j@ T@@@@@ +@@@@@ ___Q@J@ _@@@@@ +@@@@@fMMM@@j@jggg@@@@@@ +@@@@@ j@j@^MW@P @@@@ +Q@@@@@ggg@@f@ @@@@@@L +^@@@@WWMMP ^ Q@@@@ + @@@@@_ _@@@@l + W@@@@@g_____g@@@@@P + @@@@@@@@@@@@@@@@l + ^W@@@@@@@@@@@P + ^TMMMMTll +EOF + ;; + + "openbsd_small") + set_colors 3 7 6 1 8 + read -rd '' ascii_data <<'EOF' +${c1} _____ + \\- -/ + \\_/ \\ + | ${c2}O O${c1} | + |_ < ) 3 ) + / \\ / + /-_____-\\ +EOF + ;; + + "OpenBSD"*) + set_colors 3 7 6 1 8 + read -rd '' ascii_data <<'EOF' +${c3} _ + (_) +${c1} | . +${c1} . |L /| . ${c3} _ +${c1} _ . |\ _| \--+._/| . ${c3}(_) +${c1} / ||\| Y J ) / |/| ./ + J |)'( | ` F`.'/ ${c3} _ +${c1} -<| F __ .-< ${c3}(_) +${c1} | / .-'${c3}. ${c1}`. /${c3}-. ${c1}L___ + J \\ < ${c3}\ ${c1} | | ${c5}O${c3}\\${c1}|.-' ${c3} _ +${c1} _J \\ .- \\${c3}/ ${c5}O ${c3}| ${c1}| \\ |${c1}F ${c3}(_) +${c1} '-F -<_. \\ .-' `-' L__ +__J _ _. >-' ${c1})${c4}._. ${c1}|-' +${c1} `-|.' /_. ${c4}\_| ${c1} F + /.- . _.< + /' /.' .' `\\ + /L /' |/ _.-'-\\ + /'J ___.---'\| + |\ .--' V | `. ` + |/`. `-. `._) + / .-.\\ + \\ ( `\\ + `.\\ +EOF + ;; + + "openEuler"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} + (##### + (((######## ##### + ((( ########## __...__ + (((((((( ####### /((((((###\ + ((((((((((( ....... \(((((####/ + (((((( ((((######### ******* + %((((((# ((######## + /////((((( ### +/////(((((((# (((& + ((((((((((((( + (((((((((((( + ((((((((( ((((((### + /((((((###### + //((((((###### + /((((((##### + *********/ +EOF + ;; + + "OpenIndiana"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} .sy/ + .yh+ + + ${c1}-+syyyo+- ${c2} /+. + ${c1}+ddo/---/sdh/ ${c2} ym- + ${c1}`hm+ `sms${c2} ym-```````.-. + ${c1}sm+ sm/ ${c2} ym- +s + ${c1}hm. /mo ${c2} ym- /h + ${c1}omo ym: ${c2} ym- `os` + ${c1}smo` .ym+ ${c2} ym- .os- + `` ${c1}:ymy+///oyms- ${c2} ym- .+s+. + ..` ${c1}`:+oo+/-` ${c2} -//oyo- + -:` .:oys/. ++- `./oyys/. +h+` `.-:+oyyyo/-` +`/ossssysso+/-.` +EOF + ;; + + "openmamba"*) + set_colors 7 2 + read -rd '' ascii_data <<'EOF' +${c1} ````` + .-/+ooooooooo+/:-` + ./ooooooooooooooooooo+:. + -+oooooooooooooooooooooooo+- + .+ooooooooo+/:---::/+ooooooooo+. + :oooooooo/-` `-/oo${c2}s´${c1}oooo.${c2}s´${c1} + :ooooooo/` `${c2}sNds${c1}ooo${c2}sNds${c1} + -ooooooo- ${c2}:dmy${c1}ooo${c2}:dmy${c1} + +oooooo: :oooooo- +.ooooooo .://:` +:oooooo+ ./+o+:` +-ooooooo` `oooooo+ +`ooooooo: /oooooo+ + -ooooooo: :ooooooo. + :ooooooo+. .+ooooooo: + :oooooooo+-` `-+oooooooo: + .+ooooooooo+/::::://oooooooooo+. + -+oooooooooooooooooooooooo+- + .:ooooooooooooooooooo+:. + `-:/ooooooooo+/:.` + `````` +EOF + ;; + + "OpenMandriva"*) + set_colors 4 + read -rd '' ascii_data <<'EOF' +${c1} `````` + `-:/+++++++//:-.` + .:+++oooo+/:.`` `` + `:+ooooooo+:. `-:/++++++/:.` + -+oooooooo:` `-++o+/::::://+o+/- + `/ooooooooo- -+oo/.` `-/oo+. + `+ooooooooo. :os/` .+so: + +sssssssss/ :ss/ `+ss- + :ssssssssss` sss` .sso + ossssssssss `yyo sys +`sssssssssss` `yys `yys +`sssssssssss: +yy/ +yy: + oyyyyyyyyyys. `oyy/` `+yy+ + :yyyyyyyyyyyo. `+yhs:. `./shy/ + oyyyyyyyyyyys:` .oyhys+:----/+syhy+. ` + `syyyyyyyyyyyyo-` .:osyhhhhhyys+:``.:` + `oyyyyyyyyyyyyys+-`` `.----.```./oo. + /yhhhhhhhhhhhhhhyso+//://+osyhy/` + `/yhhhhhhhhhhhhhhhhhhhhhhhhy/` + `:oyhhhhhhhhhhhhhhhhhhyo:` + .:+syhhhhhhhhys+:-` + ``....`` +EOF + ;; + + "OpenStage"*) + set_colors 2 + read -rd '' ascii_data <<'EOF' +${c1} /(/ + .(((((((, + /(((((((((/ + .(((((/,/(((((, + *(((((* ,(((((/ + (((((* .*/(( + *((((/ (//(/* + /((((* ((((((((((, + . /((((* (((((((((((((. + ((. *((((/ ,(((((((( + ,(((/ (((((/ ** ,((((((* + /(((((. .(((((/ //(((* *(((((/ + .(((((, ((/ .(((((/. .(((((, + /((((* ,(((((((/ ,((((( + /(((((((((((((((((((/. /(((((((((/ + /(((((((((((((((((, /(((((((((((/ + */(((((//*. */((/(/(/* +EOF + ;; + + "OpenWrt"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} _______ +| |.-----.-----.-----. +| - || _ | -__| | +|_______|| __|_____|__|__| + |__| + ________ __ +| | | |.----.| |_ +| | | || _|| _| +|________||__| |____| +EOF + ;; + + "Open Source Media Center"* | "osmc") + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} -+shdmNNNNmdhs+- + .+hMNho/:..``..:/ohNMh+. + :hMdo. .odMh: + -dMy- -yMd- + sMd- -dMs + hMy +. .+ yMh + yMy dMs. .sMd yMy +:Mm dMNMs` `sMNMd `mM: +yM+ dM//mNs``sNm//Md +My +mM- dM: +NNNN+ :Md -Mm +mM- dM: `oNN+ :Md -Mm +yM+ dM/+NNo` :Md +My +:Mm` dMMNs` :Md `mM: + yMy dMs` -ms yMy + hMy +. yMh + sMd- -dMs + -dMy- -yMd- + :hMdo. .odMh: + .+hMNho/:..``..:/ohNMh+. + -+shdmNNNNmdhs+- +EOF + ;; + + "Oracle"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} + `-/+++++++++++++++++/-.` + `/syyyyyyyyyyyyyyyyyyyyyyys/. + :yyyyo/-...............-/oyyyy/ + /yyys- .oyyy+ +.yyyy` `syyy- +:yyyo /yyy/ +.yyyy` `syyy- + /yyys. .oyyyo + /yyyyo:-...............-:oyyyy/` + `/syyyyyyyyyyyyyyyyyyyyyyys+. + `.:/+ooooooooooooooo+/:.` +EOF + ;; + + "OS Elbrus"*) + set_colors 4 7 3 + read -rd '' ascii_data <<'EOF' +${c1} ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + ██▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀██ + ██ ██ + ██ ███████ ███████ ██ + ██ ██ ██ ██ ██ ██ + ██ ██ ██ ██ ██ ██ + ██ ██ ██ ██ ██ ██ + ██ ██ ██ ██ ██ ██ + ██ ██ ███████ ███████ + ██ ██ ██ + ██ ██▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄██ + ██ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀██ + ██ ██ + ███████████████████████████ +EOF + ;; + + "PacBSD"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} :+sMs. + `:ddNMd- -o--` + -sMMMMh: `+N+`` + yMMMMMs` .....-/-... `mNh/ + yMMMMMmh+-`:sdmmmmmmMmmmmddy+-``./ddNMMm + yNMMNMMMMNdyyNNMMMMMMMMMMMMMMMhyshNmMMMm + :yMMMMMMMMMNdooNMMMMMMMMMMMMMMMMNmy:mMMd + +MMMMMMMMMmy:sNMMMMMMMMMMMMMMMMMMMmshs- + :hNMMMMMMN+-+MMMMMMMMMMMMMMMMMMMMMMMs. + .omysmNNhy/+yNMMMMMMMMMMNMMMMMMMMMNdNNy- + /hMM:::::/hNMMMMMMMMMMMm/-yNMMMMMMN.mMNh` +.hMMMMdhdMMMMMMMMMMMMMMmo `sMMMMMMN mMMm- +:dMMMMMMMMMMMMMMMMMMMMMdo+ oMMMMMMN`smMNo` +/dMMMMMMMMMMMMMMMMMMMMMNd/` :yMMMMMN:-hMMM. +:dMMMMMMMMMMMMMMMMMMMMMNh` oMMMMMMNo/dMNN` +:hMMMMMMMMMMMMMMMMMMMMMMNs--sMMMMMMMNNmy++` + sNMMMMMMMMMMMMMMMMMMMMMMMmmNMMMMMMNho::o. + :yMMMMMMMMMMMMMNho+sydNNNNNNNmysso/` -// + /dMMMMMMMMMMMMMs- ````````..`` + .oMMMMMMMMMMMMNs` ./y:` + +dNMMNMMMMMMMmy` ``./ys. + `/hMMMMMMMMMMMNo-`` `.+yy+-` + `-/hmNMNMMMMMMmmddddhhy/-` + `-+oooyMMMdsoo+/:. +EOF + ;; + + "parabola_small"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} __ __ __ _ +.`_//_//_/ / `. + / .` + / .` + /.` + /` +EOF + ;; + + "Parabola"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} `.-. `. + `.` `:++. `-+o+. + `` `:+/. `:+/. `-+oooo+ + ``-::-.:+/. `:+/. `-+oooooo+ + `.-:///- ..` .-. `-+oooooooo- + `..-..` `+ooooooooo: +`` :oooooooo/ + `ooooooo: + `oooooo: + -oooo+. + +ooo/` + -ooo- + `+o/. + /+- + //` + -. +EOF + ;; + + "Pardus"*) + set_colors 3 7 6 1 8 + read -rd '' ascii_data <<'EOF' +${c1} .smNdy+- `.:/osyyso+:.` -+ydmNs. +/Md- -/ymMdmNNdhso/::/oshdNNmdMmy/. :dM/ +mN. oMdyy- -y `-dMo .Nm +.mN+` sMy hN+ -: yMs `+Nm. + `yMMddMs.dy `+` sMddMMy` + +MMMo .` . oMMM+ + `NM/ `````.` `.````` +MN` + yM+ `.-:yhomy ymohy:-.` +My + yM: yo oy :My + +Ms .N` `N. +h sM+ + `MN - -::::::- : :o:+`NM` + yM/ sh -dMMMMd- ho +y+My + .dNhsohMh-//: /mm/ ://-yMyoshNd` + `-ommNMm+:/. oo ./:+mMNmmo:` + `/o+.-somNh- :yy: -hNmos-.+o/` + ./` .s/`s+sMdd+``+ddMs+s`/s. `/. + : -y. -hNmddmNy. .y- : + -+ `..` +- +EOF + ;; + + "Parrot"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} `:oho/-` +`mMMMMMMMMMMMNmmdhy- + dMMMMMMMMMMMMMMMMMMs` + +MMsohNMMMMMMMMMMMMMm/ + .My .+dMMMMMMMMMMMMMh. + + :NMMMMMMMMMMMMNo + `yMMMMMMMMMMMMMm: + /NMMMMMMMMMMMMMy` + .hMMMMMMMMMMMMMN+ + ``-NMMMMMMMMMd- + /MMMMMMMMMMMs` + mMMMMMMMsyNMN/ + +MMMMMMMo :sNh. + `NMMMMMMm -o/ + oMMMMMMM. + `NMMMMMM+ + +MMd/NMh + mMm -mN` + /MM `h: + dM` . + :M- + d: + -+ + - +EOF + ;; + + "Parsix"*) + set_colors 3 1 7 8 + read -rd '' ascii_data <<'EOF' + ${c2}-/+/:. + ${c2}.syssssys. + ${c1}.--. ${c2}ssssssssso${c1} ..--. + :++++++: ${c2}+ssssssss+${c1} ./++/+++: + /+++++++++.${c2}.yssooooy`${c1}-+///////o- + /++++++++++.${c2}+soooos:${c1}:+////////+- + :+++++////o-${c2}oooooo-${c1}+/////////- + `-/++//++-${c4}.-----.-${c1}:+/////:- + ${c3}-://::--${c1}-:/:${c4}.--.````.--.${c1}:::-${c3}--::::::. +${c3}-/:::::::://:${c4}.:-` `-:${c3}`:/:::::::--/- +${c3}/::::::::::/-${c4}--. .-.${c3}-/://///::::/ +${c3}-/:::::::::/:${c4}`:-. .-:${c3}`:///////////- + `${c3}-::::--${c1}.-://.${c4}---....---${c1}`:+/:-${c3}--::::-` + ${c1}-/+///+o/-${c4}.----.${c1}.:oo+++o+. + ${c1}-+/////+++o:${c2}syyyyy.${c1}o+++++++++: + ${c1}.+////+++++-${c2}+sssssy+${c1}.++++++++++\ + ${c1}.+:/++++++.${c2}.yssssssy-${c1}`+++++++++: + ${c1}:/+++++- ${c2}+sssssssss ${c1}-++++++- + ${c1}`--` ${c2}+sssssssso ${c1}`--` + ${c2}+sssssy+` + ${c2}`.::-` +EOF + ;; + + "PCBSD"* | "TrueOS"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} .. + s. + +y + yN + -MN `. + :NMs `m + .yMMm` `No + `-/+++sdMMMNs+-`+Ms + `:oo+-` .yMMMMy` `-+oNMh + -oo- +NMMMM/ oMMh- + .s+` ` oMMMMM/ - oMMMhy. + +s`- :: :MMMMMd -o `mMMMy`s+ + y+ h .Ny+oNMMMMMN/ sh+NMMMMo +y + s+ .ds -NMMMMMMMMMMNdhdNMMMMMMh` +s +-h .NM` `hMMMMMMMMMMMMMMNMMNy: h- +y- hMN` hMMmMMMMMMMMMNsdMNs. -y +m` mMMy` oMMNoNMMMMMMo` sMMMo `m +m` :NMMMdyydMMMMo+MdMMMs sMMMd` `m +h- `+ymMMMMMMMM--M+hMMN/ +MMMMy -h +:y `.sMMMMM/ oMM+.yMMNddNMMMMMm y: + y: `s dMMN- .MMMM/ :MMMMMMMMMMh :y + `h: `mdmMMM/ yMMMMs sMMMMMMMMN- :h` + so -NMMMN /mmd+ `dMMMMMMMm- os + :y: `yMMM` `+NMMMMMMNo`:y: + /s+`.omy /NMMMMMNh/.+s: + .+oo:-. /mdhs+::oo+. + -/o+++++++++++/- +EOF + ;; + + "PCLinuxOS"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} mhhhyyyyhhhdN + dyssyhhhhhhhhhhhssyhN + Nysyhhyo/:-.....-/oyhhhssd + Nsshhy+. `/shhysm + dohhy/ -shhsy + dohhs` /hhys +N+hho ${c2}+ssssss+- .+syhys+ ${c1}/hhsy +ohhh` ${c2}ymmo++hmm+`smmy/::+y` ${c1}shh+ ++hho ${c2}ymm- /mmy+mms ${c1}:hhod +/hh+ ${c2}ymmhhdmmh.smm/ ${c1}.hhsh ++hhs ${c2}ymm+::-` /mmy` ` ${c1}/hh+m +yyhh- ${c2}ymm- /dmdyosyd` ${c1}`yhh+ + ohhy` ${c2}://` -/+++/- ${c1}ohhom + N+hhy- `shhoh + sshho. `+hhyom + dsyhhs/. `:ohhhoy + dysyhhhso///://+syhhhssh + dhyssyhhhhhhyssyyhN + mddhdhdmN +EOF + ;; + + "Pengwin"*) + set_colors 5 5 13 + read -rd '' ascii_data <<'EOF' +${c3} ...` +${c3} `-///:-` +${c3} .+${c2}ssys${c3}/ +${c3} +${c2}yyyyy${c3}o ${c2} +${c2} -yyyyyy: +${c2} `.:/+ooo+/:` -yyyyyy+ +${c2} `:oyyyyyys+:-.`syyyyyy: +${c2} .syyyyyyo-` .oyyyyyyo +${c2} `syyyyyy `-+yyyyyyy/` +${c2} /yyyyyy+ -/osyyyyyyo/. +${c2} +yyyyyy- `.-:::-.` +${c2} .yyyyyy- +${c3} :${c2}yyyyy${c3}o +${c3} .+${c2}ooo${c3}+ +${c3} `.::/:. +EOF + ;; + + "Peppermint"*) + set_colors 1 15 3 + read -rd '' ascii_data <<'EOF' +${c1} PPPPPPPPPPPPPP +${c1} PPPP${c2}MMMMMMM${c1}PPPPPPPPPPP +${c1} PPPP${c2}MMMMMMMMMM${c1}PPPPPPPP${c2}MM${c1}PP +${c1} PPPPPPPP${c2}MMMMMMM${c1}PPPPPPPP${c2}MMMMM${c1}PP +${c1} PPPPPPPPPPPP${c2}MMMMMM${c1}PPPPPPP${c2}MMMMMMM${c1}PP +${c1} PPPPPPPPPPPP${c2}MMMMMMM${c1}PPPP${c2}M${c1}P${c2}MMMMMMMMM${c1}PP +${c1} PP${c2}MMMM${c1}PPPPPPPPPP${c2}MMM${c1}PPPPP${c2}MMMMMMM${c1}P${c2}MM${c1}PPPP +${c1} P${c2}MMMMMMMMMM${c1}PPPPPP${c2}MM${c1}PPPPP${c2}MMMMMM${c1}PPPPPPPP +${c1} P${c2}MMMMMMMMMMMM${c1}PPPPP${c2}MM${c1}PP${c2}M${c1}P${c2}MM${c1}P${c2}MM${c1}PPPPPPPPPPP +${c1} P${c2}MMMMMMMMMMMMMMMM${c1}PP${c2}M${c1}P${c2}MMM${c1}PPPPPPPPPPPPPPPP +${c1} P${c2}MMM${c1}PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP${c2}MMMMM${c1}P +${c1} PPPPPPPPPPPPPPPP${c2}MMM${c1}P${c2}M${c1}P${c2}MMMMMMMMMMMMMMMM${c1}PP +${c1} PPPPPPPPPPP${c2}MM${c1}P${c2}MM${c1}PPPP${c2}MM${c1}PPPPP${c2}MMMMMMMMMMM${c1}PP +${c1} PPPPPPPP${c2}MMMMMM${c1}PPPPP${c2}MM${c1}PPPPPP${c2}MMMMMMMMM${c1}PP +${c1} PPPP${c2}MM${c1}P${c2}MMMMMMM${c1}PPPPPP${c2}MM${c1}PPPPPPPPPP${c2}MMMM${c1}PP +${c1} PP${c2}MMMMMMMMM${c1}P${c2}M${c1}PPPP${c2}MMMMMM${c1}PPPPPPPPPPPPP +${c1} PP${c2}MMMMMMM${c1}PPPPPPP${c2}MMMMMM${c1}PPPPPPPPPPPP +${c1} PP${c2}MMMM${c1}PPPPPPPPP${c2}MMMMMMM${c1}PPPPPPPP +${c1} PP${c2}MM${c1}PPPPPPPP${c2}MMMMMMMMMM${c1}PPPP +${c1} PPPPPPPPPP${c2}MMMMMMMM${c1}PPPP +${c1} PPPPPPPPPPPPPP +EOF + ;; + + "Pisi"*) + set_colors 12 7 6 1 8 + read -rd '' ascii_data <<'EOF' +${c1} \Fv/!- `:?lzC +${c1} Q!::=zFx! ${c2}`;v6WBCicl;` ${c1},vCC\!::#. +${c1} ,%:::,'` ${c2}+#%@@FQ@@. ,cF%i${c1}``-',::a? +${c1} +m:,'```${c2}}3,/@@Q\@@ "af-${c1} `-'"7f + =o'.` ${c2}/m' :Q@:Qg ,kl${c1} `.|o + :k` '${c2}$+ 'Narm >d,${c1} ii + #`${c2}!p. `C , 'd+${c1} %' +${c2} !0m `6Kv + =a m+ + !A !\L|: :|L\! $: + .8` Q''%Q#' '#Q%''Q `0- + :6 E|.6QQu uQQ6.|E p: + i{ \jts9? ?9stj\ u\ + |a` -''. `e> + ,m+ ${c1}'^ !`${c2}s@@@@a${c1}'"`+`${c2} >e' + !3|${c1}`|=>>r- ${c2}'U%:${c1} '>>>=:`\3! + 'xopE| ${c2}`'${c1} `ledoz- + `;=>>+`${c2}`^llci/|==|/iclc;`${c1}'>>>>: + `^`+~ ${c2}````${c1} !!-^ +EOF + ;; + + "PNM Linux"* | "WHPNM Linux"*) + set_colors 33 9 15 202 + read -rd '' ascii_data <<'EOF' + +${c1} + ``.---..` `--` + ``.---........-:.${c2}-::`${c1} + ${c2}./::-${c1}........${c2}--::.````${c1} + ${c2}.:://:::${c1}----${c2}::::-..${c1} + ..${c2}--:::::--::::++-${c1}.` + ${c2}`-:-`${c1} .-ohy+::${c2}-:::${c1}/sdmdd:.${c2} `-:- + .-:::${c1}...${c3}sNNmds$y${c1}o/+${c3}sy+NN$m${c1}d+.`${c2}-:::-. + `.-:-${c1}./${c3}dN${c1}()${c3}yyooosd${c1}()${c3}$m${c1}dy${c2}-.::-.`${c1} + ${c2}`.${c1}-...-${c3}+hNdyyyyyydmy${c1}:......${c2}`${c1} + ``..--.....-${c3}yNNm${c4}hssssh${c3}mmdo${c1}.........``` +`-:://:.....${c3}hNNNNN${c4}mddm${c3}NNNmds${c1}.....//::--` + ```.:-...${c3}oNNNNNNNNNNNNNNmd/${c1}...:-.``` + .....${c3}hNNNNNNNNNNNNNNmds${c1}....` + --...${c3}hNNNNNNNNNNNNNNmdo${c1}..... + .:...${c3}/NNNNNNNNNNNNNNdd${c1}:....` + `-...${c3}+mNNNNNNNNNNNmh${c1}:...-. + ${c4}.:+o+/:-${c1}:+oo+///++o+/:-${c4}:/+ooo/:. + ${c4}+oo/:o- +oooooso.` + ${c4}.` ` `/ .-//- +EOF + ;; + + "popos_small"* | "pop_os_small"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1}______ +\\ _ \\ __ + \\ \\ \\ \\ / / + \\ \\_\\ \\ / / + \\ ___\\ /_/ + \\ \\ _ + __\\_\\__(_)_ + (___________)` +EOF + ;; + + "Pop!_OS"* | "popos"* | "pop_os"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} ///////////// + ///////////////////// + ///////${c2}*767${c1}//////////////// + //////${c2}7676767676*${c1}////////////// + /////${c2}76767${c1}//${c2}7676767${c1}////////////// + /////${c2}767676${c1}///${c2}*76767${c1}/////////////// + ///////${c2}767676${c1}///${c2}76767${c1}.///${c2}7676*${c1}/////// +/////////${c2}767676${c1}//${c2}76767${c1}///${c2}767676${c1}//////// +//////////${c2}76767676767${c1}////${c2}76767${c1}///////// +///////////${c2}76767676${c1}//////${c2}7676${c1}////////// +////////////,${c2}7676${c1},///////${c2}767${c1}/////////// +/////////////*${c2}7676${c1}///////${c2}76${c1}//////////// +///////////////${c2}7676${c1}//////////////////// + ///////////////${c2}7676${c1}///${c2}767${c1}//////////// + //////////////////////${c2}'${c1}//////////// + //////${c2}.7676767676767676767,${c1}////// + /////${c2}767676767676767676767${c1}///// + /////////////////////////// + ///////////////////// + ///////////// +EOF + ;; + + "Porteus"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} `.-:::-.` + -+ydmNNNNNNNmdy+- + .+dNmdhs+//////+shdmdo. + .smmy+-` ./sdy: + `omdo. `.-/+osssso+/-` `+dy. + `yms. `:shmNmdhsoo++osyyo-``oh. + hm/ .odNmds/.` ``.....:::-+s +/m: `+dNmy:` `./oyhhhhyyooo++so +ys `yNmy- .+hmmho:-.` ``` +s: yNm+` .smNd+. +`` /Nm: +dNd+` + yN+ `smNy. + dm oNNy` + hy -mNm. + +y oNNo + `y` sNN: + `: +NN: + ` .mNo + /mm` + /my` + .sy` + .+: + ` +EOF + ;; + + "postmarketos_small") + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} /\\ + / \\ + / \\ + \\__ \\ + /\\__ \\ _\\ + / / \\/ __ + / / ____/ \\ + / \\ \\ \\ +/_____/ /________\\ +EOF + ;; + + "PostMarketOS"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} /\\ + / \\ + / \\ + / \\ + / \\ + / \\ + \\ \\ + /\\ \\____ \\ + / \\____ \\ \\ + / / \\ \\ + / / \\ ___\\ + / / \\ / ____ + / / \\/ / \\ + / / __________/ \\ + / \\ \\ \\ + / \\ \\ \\ + / / / \\ +/___________/ /____________________\\ +EOF + ;; + + "PuffOS"*) + set_colors 3 + read -rd '' ascii_data <<'EOF' +${c1} + _,..._,m, + ,/' '""; + / ". + ,'mmmMMMMmm. \ + _/-"^^^^^"""%#%mm, ; + ,m,_,' "###) ;, +(###% \#/ ;##mm. + ^#/ __ ___ ; (######) + ; //.\\ //.\\ ; \####/ + _; (#\"// \\"/#) ; ,/ +@##\ \##/ = `"=" ,;mm/ +`\##>.____,...,____,<####@ +EOF + ;; + + "Proxmox"*) + set_colors 7 202 + read -rd '' ascii_data <<'EOF' +${c1} .://:` `://:. + `hMMMMMMd/ /dMMMMMMh` + `sMMMMMMMd: :mMMMMMMMs` +${c2}`-/+oo+/:${c1}`.yMMMMMMMh- -hMMMMMMMy.`${c2}:/+oo+/-` +`:oooooooo/${c1}`-hMMMMMMMyyMMMMMMMh-`${c2}/oooooooo:` + `/oooooooo:${c1}`:mMMMMMMMMMMMMm:`${c2}:oooooooo/` + ./ooooooo+-${c1} +NMMMMMMMMN+ ${c2}-+ooooooo/. + .+ooooooo+-${c1}`oNMMMMNo`${c2}-+ooooooo+. + -+ooooooo/.${c1}`sMMs`${c2}./ooooooo+- + :oooooooo/${c1}`..`${c2}/oooooooo: + :oooooooo/`${c1}..${c2}`/oooooooo: + -+ooooooo/.`${c1}sMMs${c2}`./ooooooo+- + .+ooooooo+-`${c1}oNMMMMNo${c2}`-+ooooooo+. + ./ooooooo+-${c1} +NMMMMMMMMN+ ${c2}-+ooooooo/. + `/oooooooo:`${c1}:mMMMMMMMMMMMMm:${c2}`:oooooooo/` +`:oooooooo/`${c1}-hMMMMMMMyyMMMMMMMh-${c2}`/oooooooo:` +`-/+oo+/:`${c1}.yMMMMMMMh- -hMMMMMMMy.${c2}`:/+oo+/-` +${c1} `sMMMMMMMm: :dMMMMMMMs` + `hMMMMMMd/ /dMMMMMMh` + `://:` `://:` +EOF + ;; + + "Puppy"* | "Quirky Werewolf"* | "Precise Puppy"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c1} `-/osyyyysosyhhhhhyys+- + -ohmNNmh+/hMMMMMMMMNNNNd+dMMMMNM+ + yMMMMNNmmddo/NMMMNNNNNNNNNo+NNNNNy +.NNNNNNmmmddds:MMNNNNNNNNNNNh:mNNN/ +-NNNdyyyhdmmmd`dNNNNNmmmmNNmdd/os/ +.Nm+shddyooo+/smNNNNmmmmNh. :mmd. + NNNNy:` ./hmmmmmmmNNNN: hNMh + NMN- -++- +NNNNNNNNNNm+..-sMMMM- +.MMo oNNNNo hNNNNNNNNmhdNNNMMMMM+ +.MMs /NNNN/ dNmhs+:-` yMMMMMMMM+ + mMM+ .. `sNN+. hMMMMhhMMM- + +MMMmo:...:sNMMMMMms:` hMMMMm.hMMy + yMMMMMMMMMMMNdMMMMMM::/+o+//dMMd` + sMMMMMMMMMMN+:oyyo:sMMMNNMMMNy` + :mMMMMMMMMMMMmddNMMMMMMMMmh/ + /dMMMMMMMMMMMMMMMMMMNdy/` + .+hNMMMMMMMMMNmdhs/. + .:/+ooo+/:-. +EOF + ;; + + "pureos_small"*) + set_colors 2 7 7 + read -rd '' ascii_data <<'EOF' +${c1} _____________ +| _________ | +| | | | +| | | | +| |_________| | +|_____________| +EOF + ;; + + "PureOS"*) + set_colors 2 7 7 + read -rd '' ascii_data <<'EOF' +${c1}dmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd +dNm//////////////////////////////////mNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNd dNd +dNm//////////////////////////////////mNd +dmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd +EOF + ;; + + "Qubes"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} `..--..` + `.----------.` + `..----------------..` + `.------------------------.`` + `..-------------....-------------..` +.::----------..`` ``..----------:+: +:////:----..` `..---:/ossso +:///////:` `/osssssso +:///////: /ssssssso +:///////: /ssssssso +:///////: /ssssssso +:///////: /ssssssso +:///////: /ssssssso +:////////-` .:sssssssso +:///////////-.` `-/osssssssssso +`//////////////:-```.:+ssssssssssssso- + .-://////////////sssssssssssssso/-` + `.:///////////sssssssssssssso:. + .-:///////ssssssssssssssssss/` + `.:////ssss+/+ssssssssssss. + `--//- `-/osssso/. +EOF + ;; + + "Quibian"*) + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} `.--::::::::--.` + `.-:::-..`` ``..-::-.` + .::::-` .${c2}+${c1}:`` `.-::.` + .::::.` -::::::-` `.::. + `-:::-` -:::::::::--..`` .::` + `::::- .${c2}oy${c1}:::::::---.```.: `::` + -:::: `.-:::::::::::-.``` `:: +.::::.`-:::::::::::::. `:. +-::::.::::::::::::::: -: +::::::::::::::::::::` `: +:::::::::::::::::::- `: +::::::::::::::::::: -- +.:::::::::::::::::` `:` +`::::::::::::::::: -` + .:::::::::::::::- -` + `::::::::::::::- `.` + .::::::::::::- `` + `.--:::::-. +EOF + ;; + + "Radix"*) + set_colors 1 2 + read -rd '' ascii_data <<'EOF' +${c2} .:oyhdmNo + `/yhyoosdms` + -o+/ohmmho- + ..`.:/:-` + `.--:::-.``${c1} + .+ydNMMMMMMNmhs:` +`omMMMMMMMMMMMMMMNh- +oNMMMNmddhhyyhhhddmy. +mMMMMNmmddhhysoo+/:-` +yMMMMMMMMMMMMMMMMNNh. +-dmmmmmNNMMMMMMMMMMs` + -+oossyhmMMMMMMMMd- + `sNMMMMMMMMMMMMMm: + `yMMMMMMNmdhhhh: + `sNMMMMMNmmho. + `+mMMMMMMMy. + .yNMMMm+` + `:yd+. +EOF + ;; + + "Raspbian_small"*) + set_colors 2 1 + read -rd '' ascii_data <<'EOF' +${c1} .. ,. + :oo: .:oo: + 'o\\o o/o: +${c2} :: . :: . :: +:: ::: ::: :: +:' '',.'' ': + ::: :::: ::: + ':, '' ,:' + ' ~::~ ' +EOF + ;; + + "Raspbian"*) + set_colors 2 1 + read -rd '' ascii_data <<'EOF' +${c1} `.::///+:/-. --///+//-:`` + `+oooooooooooo: `+oooooooooooo: + /oooo++//ooooo: ooooo+//+ooooo. + `+ooooooo:-:oo- +o+::/ooooooo: + `:oooooooo+`` `.oooooooo+- + `:++ooo/. :+ooo+/.` + ${c2}...` `.----.` ``.. + .::::-``:::::::::.`-:::-` + -:::-` .:::::::-` `-:::- + `::. `.--.` `` `.---.``.::` + .::::::::` -::::::::` ` + .::` .:::::::::- `::::::::::``::. +-:::` ::::::::::. ::::::::::.`:::- +:::: -::::::::. `-:::::::: :::: +-::- .-:::-.``....``.-::-. -::- + .. `` .::::::::. `..`.. + -:::-` -::::::::::` .:::::` + :::::::` -::::::::::` :::::::. + .::::::: -::::::::. :::::::: + `-:::::` ..--.` ::::::. + `...` `...--..` `...` + .:::::::::: + `.-::::-` +EOF + ;; + + "Reborn OS"* | "Reborn"*) + set_colors 2 2 8 + read -rd '' ascii_data <<'EOF' +${c3} + mMMMMMMMMM MMMMMMMMMm + NM MN + MM ${c1}dddddddd dddddddd ${c3}MN + mM ${c1}dd dd ${c3}MM + ${c1}dd hhhhhh hhhhh dd + ${c3}mM ${c1}hh hh ${c3}Mm + NM ${c1}hd ${c3}mMMMMMMd ${c1}dh ${c3}MN + NM ${c1}dd hh ${c3}mMMMMMMMMm ${c1}hh dd ${c3}MN +NM ${c1}dd hh ${c3}mMMMMMMMMMMm ${c1}hh dd ${c3}MN + NM ${c1}dd hh ${c3}mMMMMMMMMm ${c1}hh dd ${c3}MN + NM ${c1}hd ${c3}mMMMMMMm ${c1}dh ${c3}MN + mM ${c1}hh hh ${c3}Mm + ${c1}dd hhhhhh hhhhhh dd + ${c3}MM ${c1}dd dd ${c3}MM + MM ${c1}dddddddd dddddddd ${c3}MN + NM MN + mMMMMMMMMM MMMMMMMMMm +EOF + ;; + + "Red Star"* | "Redstar"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} .. + .oK0l + :0KKKKd. + .xKO0KKKKd + ,Od' .d0000l + .c;. .'''... ..'. +.,:cloddxxxkkkkOOOOkkkkkkkkxxxxxxxxxkkkx: +;kOOOOOOOkxOkc'...',;;;;,,,'',;;:cllc:,. + .okkkkd,.lko .......',;:cllc:;,,'''''. + .cdo. :xd' cd:. ..';'',,,'',,;;;,'. + . .ddl.;doooc'..;oc;'..';::;,'. + coo;.oooolllllllcccc:'. . + .ool''lllllccccccc:::::;. + ;lll. .':cccc:::::::;;;;' + :lcc:'',..';::::;;;;;;;,,. + :cccc::::;...';;;;;,,,,,,. + ,::::::;;;,'. ..',,,,'''. + ........ ...... +EOF + ;; + + "Redcore"*) + set_colors 1 + read -rd '' ascii_data <<'EOF' +${c1} RRRRRRRRR + RRRRRRRRRRRRR + RRRRRRRRRR RRRRR + RRRRRRRRRRRRRRRRRRRRRRRRRRR + RRRRRRR RRR RRR RRRRRRRR +RRRRR RR RRRRRRRRR +RRRR RR RRRRRRRR RR RRRRRR +RRRR R RRRRRRRRRRRRRR RR RRRRR +RRRR R RRRRRRRRRRRRRRRRRR R RRRRR +RRRR RRRRRRRRRRRRRRRRRRR R RRRR + RRR RRRRRRRRRRRRRRRRRRRR R RRRR + RRR RRRRRRRRRRRRRRRRRRRR RRRR + RR RRRRRRRRRRRRRRRRRRR RRR + RR RRRRRRRRRRRRRRRRR RRR + RR RRRRRRRRRRRRRR RR + R RRRR RR +EOF + ;; + + "redhat_old" | "rhel_old"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} `.-..........` + `////////::.`-/. + -: ....-////////. + //:-::///////////` + `--::: `-://////////////: + //////- ``.-:///////// .` + `://////:-.` :///////::///:` + .-/////////:---/////////////: + .-://////////////////////. +${c2} yMN+`.-${c1}::///////////////-` +${c2} .-`:NMMNMs` `..-------..` + MN+/mMMMMMhoooyysshsss +MMM MMMMMMMMMMMMMMyyddMMM+ + MMMM MMMMMMMMMMMMMNdyNMMh` hyhMMM + MMMMMMMMMMMMMMMMyoNNNMMM+. MMMMMMMM + MMNMMMNNMMMMMNM+ mhsMNyyyyMNMMMMsMM +EOF + ;; + + "Redhat"* | "Red Hat"* | "rhel"*) + set_colors 1 + read -rd '' ascii_data <<'EOF' +${c1} .MMM..:MMMMMMM + MMMMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMMMMMM. + MMMMMMMMMMMMMMMMMMMMMM + ,MMMMMMMMMMMMMMMMMMMMMM: + MMMMMMMMMMMMMMMMMMMMMMMM + .MMMM' MMMMMMMMMMMMMMMMMMMMMM + MMMMMM `MMMMMMMMMMMMMMMMMMMM. +MMMMMMMM MMMMMMMMMMMMMMMMMM . +MMMMMMMMM. `MMMMMMMMMMMMM' MM. +MMMMMMMMMMM. MMMM +`MMMMMMMMMMMMM. ,MMMMM. + `MMMMMMMMMMMMMMMMM. ,MMMMMMMM. + MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM + MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM: + MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM + `MMMMMMMMMMMMMMMMMMMMMMMM: + ``MMMMMMMMMMMMMMMMM' +EOF + ;; + + "Refracted Devuan"* | "Refracted_Devuan"*) + set_colors 8 7 + read -rd '' ascii_data <<'EOF' +${c2} A + VW + VVW\\ + .yWWW\\ + ,;,,u,;yy;;v;uyyyyyyy ,WWWWW^ + *WWWWWWWWWWWWWWWW/ $VWWWWw , + ^*%WWWWWWVWWX $WWWW** ,yy + , "**WWW/' **' ,yy/WWW*` + &WWWWwy `*` <,ywWW%VWWW* + yWWWWWWWWWW* ., "**WW%W + ,&WWWWWM*"` ,y/ &WWWww ^* + XWWX*^ ,yWWWW09 .WWWWWWWWwy, + *` &WWWWWM WWWWWWWWWWWWWww, + (WWWWW` /#####WWW*********** + ^WWWW + VWW + Wh. + V/ +EOF + ;; + + "Regata"*) + set_colors 7 1 4 5 3 2 + read -rd '' ascii_data <<'EOF' +${c1} ddhso+++++osydd + dho/.`hh${c2}.:/+/:.${c1}hhh`:+yd + do-hhhhhh${c2}/sssssss+`${c1}hhhhh./yd + h/`hhhhhhh${c2}-sssssssss:${c1}hhhhhhhh-yd + do`hhhhhhhhh${c2}`ossssssso.${c1}hhhhhhhhhh/d + d/hhhhhhhhhhhh${c2}`/ossso/.${c1}hhhhhhhhhhhh.h + /hhhhhhhhhhhh${c3}`-/osyso/-`${c1}hhhhhhhhhhhh.h +shh${c4}-/ooo+-${c1}hhh${c3}:syyso+osyys/`${c1}hhh${c5}`+oo`${c1}hhh/ +h${c4}`ohhhhhhho`${c3}+yyo.${c1}hhhhh${c3}.+yyo`${c5}.sssssss.${c1}h`h +s${c4}:hhhhhhhhho${c3}yys`${c1}hhhhhhh${c3}.oyy/${c5}ossssssso-${c1}hs +s${c4}.yhhhhhhhy/${c3}yys`${c1}hhhhhhh${c3}.oyy/${c5}ossssssso-${c1}hs +hh${c4}./syyys+.${c1} ${c3}+yy+.${c1}hhhhh${c3}.+yyo`${c5}.ossssso/${c1}h`h +shhh${c4}``.`${c1}hhh${c3}`/syyso++oyys/`${c1}hhh${c5}`+++-`${c1}hh:h +d/hhhhhhhhhhhh${c3}`-/osyso+-`${c1}hhhhhhhhhhhh.h + d/hhhhhhhhhhhh${c6}`/ossso/.${c1}hhhhhhhhhhhh.h + do`hhhhhhhhh${c6}`ossssssso.${c1}hhhhhhhhhh:h + h/`hhhhhhh${c6}-sssssssss:${c1}hhhhhhhh-yd + h+.hhhhhh${c6}+sssssss+${c1}hhhhhh`/yd + dho:.hhh${c6}.:+++/.${c1}hhh`-+yd + ddhso+++++osyhd +EOF + ;; + + "Regolith"*) + set_colors 1 + read -rd '' ascii_data <<'EOF' +${c1} + ``....``` + `.:/++++++/::-.` + -/+++++++:.` + -++++++++:` + `/++++++++- + `/++++++++. -/+/ + /++++++++/ `` .:+++:. + -+++++++++/ ./++++:+++/-` + :+++++++++/ `+++++++/-` + :++++++++++` .-/+++++++` + `:++++++++++/``.-/++++:-:::-` ` + `:+++++++++++++++++/:.` ./` +:++/-:+++++++++/:-.. -/+. ++++++++++/::-...:/+++/-..````..-/+++. +`......``.::/+++++++++++++++++++++/. + -/+++++++++++++++++++++/. + .:/+++++++++++++++/-` + `.-:://////:-. +EOF + ;; + + "rocky_small"*) + set_colors 2 + read -rd '' ascii_data <<'EOF' +${c1} `-/+++++++++/-.` + `-+++++++++++++++++-` +.+++++++++++++++++++++. +-+++++++++++++++++++++++. ++++++++++++++++/-/+++++++ ++++++++++++++/. ./+++++ ++++++++++++:. ./+++ ++++++++++:` `:/:` .:/ +-++++++:` .:+++++:` + .+++-` ./+++++++++:` + `-` ./+++++++++++- + -+++++++++:-.` +EOF + ;; + + "rocky"*) + set_colors 35 + read -rd '' ascii_data <<'EOF' +${c1} __wgliliiligw_, + _williiiiiiliilililw, + _%iiiiiilililiiiiiiiiiii_ + .Qliiiililiiiiiiililililiilm. + _iiiiiliiiiiililiiiiiiiiiiliil, + .lililiiilililiiiilililililiiiii, +_liiiiiiliiiiiiiliiiiiF{iiiiiilili, +jliililiiilililiiili@` ~ililiiiiiL +iiiliiiiliiiiiiili>` ~liililii +liliiiliiilililii` -9liiiil +iiiiiliiliiiiii~ "4lili +4ililiiiiilil~| -w, )4lf +-liiiiililiF' _liig, )' + )iiiliii@` _QIililig, + )iiii>` .Qliliiiililw + )<>~ .mliiiiiliiiiiil, + _gllilililiililii~ + giliiiiiiiiiiiiT` + -^~$ililili@~~' +EOF + ;; + + "Rosa"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ROSAROSAROSAROSAR + ROSA AROS + ROS SAROSAROSAROSAR AROS + RO ROSAROSAROSAROSAROSAR RO + ARO AROSAROSAROSARO AROS ROS + ARO ROSAROS OSAR ROSA ROS + RO AROSA ROSAROSAROSA ROSAR RO +RO ROSAR ROSAROSAROSAR R ROSARO RO +RO ROSA AROSAROSAROSA AR ROSARO AR +RO AROS ROSAROSAROSA ROS AROSARO AR +RO AROS ROSAROSARO ROSARO ROSARO AR +RO ROS AROSAROS ROSAROSA AROSAR AR +RO ROSA ROS ROSAROSAR ROSARO RO + RO ROS AROSAROSAROSA ROSARO AR + ARO ROSA ROSAROSAROS AROSAR ARO + ARO OROSA R ROSAROS ROS + RO AROSAROS AROSAROSAR RO + AROS AROSAROSAROSARO AROS + ROSA SARO + ROSAROSAROSAROSAR +EOF + ;; + + "sabotage"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} .|'''.| | '||''|. ..|''|| + ||.. ' ||| || || .|' || + ''|||. | || ||'''|. || || +. '|| .''''|. || || '|. || +|'....|' .|. .||. .||...|' ''|...|' + +|''||''| | ..|'''.| '||''''| + || ||| .|' ' || . + || | || || .... ||''| + || .''''|. '|. || || + .||. .|. .||. ''|...'| .||.....| +EOF + ;; + + "Sabayon"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ........... + .. .. + .. .. + .. ${c2}o ${c1}.. + .. ${c2}:W' ${c1}.. + .. ${c2}.d. ${c1}.. +:. ${c2}.KNO ${c1}.: +:. ${c2}cNNN. ${c1}.: +: ${c2}dXXX, ${c1}: +: ${c2}. dXXX, .cd, ${c1}: +: ${c2}'kc .. dKKK. ,ll;:' ${c1}: +: ${c2}.xkkxc;..dkkkc',cxkkl ${c1}: +:. ${c2}.,cdddddddddddddo:. ${c1}.: + .. ${c2}:lllllll: ${c1}.. + .. ${c2}',,,,, ${c1}.. + .. .. + .. .. + ............... +EOF + ;; + + "Sailfish"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c1} _a@b + _#b (b + _@@ @_ _, + _#^@ _#*^^*gg,aa@^^ + #- @@^ _a@^^ + @_ *g#b + ^@_ ^@_ + ^@_ @ + @(b (b + #b(b#^ + _@_#@^ + _a@a*^ + ,a@*^ +EOF + ;; + + "SalentOS"*) + set_colors 2 1 3 7 + read -rd '' ascii_data <<'EOF' +${c1} ``..`` + .-:+oshdNMMMMMMNdhyo+:-.` + -oydmMMMMMMMMMMMMMMMMMMMMMMMMMMNdhs/ +${c4} +hdddm${c1}NMMMMMMMMMMMMMMMMMMMMMMMMN${c4}mdddh+` +${c2}`MMMMMN${c4}mdddddm${c1}MMMMMMMMMMMM${c4}mdddddm${c3}NMMMMM- +${c2} mMMMMMMMMMMMN${c4}ddddhyyhhddd${c3}NMMMMMMMMMMMM` +${c2} dMMMMMMMMMMMMMMMMM${c4}oo${c3}MMMMMMMMMMMMMMMMMN` +${c2} yMMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMMd +${c2} +MMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMMy +${c2} :MMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMMo +${c2} .MMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMM/ +${c2} `NMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMM- +${c2} mMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMN` +${c2} hMMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMm +${c2} /MMMMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMMMMy +${c2} .+hMMMMMMMMMMMMM${c4}hh${c3}MMMMMMMMMMMMMms: +${c2} `:smMMMMMMMMM${c4}hh${c3}MMMMMMMMMNh+. +${c2} .+hMMMMMM${c4}hh${c3}MMMMMMdo: +${c2} `:smMM${c4}yy${c3}MMNy/` + ${c2}.- ${c4}`${c3}:. +EOF + ;; + + "Scientific"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} =/;;/- + +: // + /; /; + -X H. +.//;;;:;;-, X= :+ .-;:=;:;#;. +M- ,=;;;#:, ,:#;;:=, ,@ +:# :#.=/++++/=.$= #= + ,#; #/:+/;,,/++:+/ ;+. + ,+/. ,;@+, ,#H;, ,/+, + ;+;;/= @. ${c3}.H${c2}#${c3}#X ${c1}-X :///+; + ;+=;;;.@, ${c2}.X${c3}M${c2}@$. ${c1}=X.//;=#/. + ,;: :@#= =$H: .+#- + ,#= #;-///==///-// =#, +;+ :#-;;;:;;;;-X- +: +@- .-;;;;M- =M/;;;-. -X + :;;::;;-. #- :+ ,-;;-;:== + ,X H. + ;/ #= + // +; + '////' +EOF + ;; + + "Septor"*) + set_colors 4 7 4 + read -rd '' ascii_data <<'EOF' +${c1}ssssssssssssssssssssssssssssssssssssssss +ssssssssssssssssssssssssssssssssssssssss +ssssssssssssssssssssssssssssssssssssssss +ssssssssssssssssssssssssssssssssssssssss +ssssssssss${c2};okOOOOOOOOOOOOOOko;${c1}ssssssssss +sssssssss${c2}oNWWWWWWWWWWWWWWWWWWNo${c1}sssssssss +ssssssss${c2}:WWWWWWWWWWWWWWWWWWWWWW:${c1}ssssssss +ssssssss${c2}lWWWWWk${c1}ssssssssss${c2}lddddd:${c1}ssssssss +ssssssss${c2}cWWWWWNKKKKKKKKKKKKOx:${c1}ssssssssss +${c3}yy${c1}sssssss${c2}OWWWWWWWWWWWWWWWWWWWWx${c1}sssssss${c3}yy +yyyyyyyyyy${c2}:kKNNNNNNNNNNNNWWWWWW:${c3}yyyyyyyy +yyyyyyyy${c2}sccccc;${c3}yyyyyyyyyy${c2}kWWWWW:${c3}yyyyyyyy +yyyyyyyy${c2}:WWWWWWNNNNNNNNNNWWWWWW;${c3}yyyyyyyy +yyyyyyyy${c2}.dWWWWWWWWWWWWWWWWWWWNd${c3}yyyyyyyyy +yyyyyyyyyy${c2}sdO0KKKKKKKKKKKK0Od;${c3}yyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +EOF + ;; + + "Serene"*) + set_colors 6 6 + read -rd '' ascii_data <<'EOF' +${c1} __---''''''---__ + . . + : : + - _______----_- + s __----''' __---- + __h_ _-' _-' h + '-._''--.._ ; _-' y + : ''-._ '-._/ _-' : + y ':_ _--'' y + m .--'' '-._.;' m + m : : m + y '.._ '-__ y + : '--._ '''----___ : + y '--._ ''-- _ y + h '--._ : h + s __'; vs + - __..--'' - + :_..--'' : + . _ . + `''---______---''-`` +EOF + ;; + + "SharkLinux"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c1} `:shd/ + `:yNMMMMs + `-smMMMMMMN. + .+dNMMMMMMMMs + .smNNMMMMMMMMm` + .sNNNNNNNMMMMMM/ + `omNNNNNNNMMMMMMm + /dNNNNNNNNMMMMMMM+ + .yNNNNNNNNNMMMMMMMN` + +mNNNNNNNNNMMMMMMMMh + .hNNNNNNNNNNMMMMMMMMMs + +mMNNNNNNNNMMMMMMMMMMMs + .hNMMNNNNMMMMMMMMMMMMMMMd + .oNNNNNNNNNNMMMMMMMMMMMMMMMo + `:+syyssoo++++ooooossssssssssso: +EOF + ;; + + "Siduction"*) + set_colors 4 4 + read -rd '' ascii_data <<'EOF' +${c1} _aass, + jQh: =$w + QWmwawQW + )$QQQQ@( .. + _a_a. ~??^ syDY?Sa, + _mW>-<$c jWmi imm. + ]QQwayQE 4QQmgwmQQ` + ?WWQWP' -9QQQQQ@'._aas, + _a%is. .adYYs,. -"?!` aQB*~^3$c +_Qh;.nm .QWc. {QL ]QQp;..vmQ/ +"QQmmQ@ -QQQggmQP ]QQWmggmQQ( + -???" "$WQQQY` __, ?QQQQQQW! + _yZ!?q, - .yWY!!Sw, "???^ + .QQa_=qQ mQm>..vmm + $QQWQQP $QQQgmQQ@ + "???" _aa, -9WWQQWY` + _mB>~)$a -~~ + mQms_vmQ. + ]WQQQQQP + -?T??" +EOF + ;; + + "slackware_small"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ________ + / ______| + | |______ + \\______ \\ + ______| | +| |________/ +|____________ +EOF + ;; + + "Slackware"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ::::::: + ::::::::::::::::::: + ::::::::::::::::::::::::: + ::::::::${c2}cllcccccllllllll${c1}:::::: + :::::::::${c2}lc dc${c1}::::::: + ::::::::${c2}cl clllccllll oc${c1}::::::::: + :::::::::${c2}o lc${c1}::::::::${c2}co oc${c1}:::::::::: + ::::::::::${c2}o cccclc${c1}:::::${c2}clcc${c1}:::::::::::: + :::::::::::${c2}lc cclccclc${c1}::::::::::::: +::::::::::::::${c2}lcclcc lc${c1}:::::::::::: +::::::::::${c2}cclcc${c1}:::::${c2}lccclc oc${c1}::::::::::: +::::::::::${c2}o l${c1}::::::::::${c2}l lc${c1}::::::::::: + :::::${c2}cll${c1}:${c2}o clcllcccll o${c1}::::::::::: + :::::${c2}occ${c1}:${c2}o clc${c1}::::::::::: + ::::${c2}ocl${c1}:${c2}ccslclccclclccclclc${c1}::::::::::::: + :::${c2}oclcccccccccccccllllllllllllll${c1}::::: + ::${c2}lcc1lcccccccccccccccccccccccco${c1}:::: + :::::::::::::::::::::::::::::::: + :::::::::::::::::::::::::::: + :::::::::::::::::::::: + :::::::::::: +EOF + ;; + + "SliTaz"*) + set_colors 3 3 + read -rd '' ascii_data <<'EOF' +${c1} @ @( @ + @@ @@ @ @/ + @@ @@ @@ @@ + @@ %@@ @@ @@ + @@ %@@@ @@@@@. @@@@ @@ + @@@ @@@@ @@@@@@@ &@@@ @@@ + @@@@@@@ %@@@@@@@@@@@@ &@@@% @@@@@@@/ + ,@@@@@@@@@@@@@@@@@@@@@@@@@ + .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/ +@@@@@@. @@@@@@@@@@@@@@@@@@@@@ /@@@@@@ +@@ @@@@@ @@@@@@@@@@@@, @@@@@ @@@ +@@ @@@@. @@@@@@@@@@@@@% #@@@@ @@. +@@ ,@@ @@@@@@@@@@@@@ @@@ @@ +@ @@. @@@@@@@@@@@@@ @@@ *@ +@ @@ @@@@@@@@@@@@ @@ @ + @ @@@@@@@@@. #@ + @ ,@@@@@ @ +EOF + ;; + + "SmartOS"*) + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1}yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyys oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyy oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyy oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyy oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyy oyyyyyyyyyyyyyyyy +yyyys yyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyy syyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyy syyyy +yyyyyyyyyyyyyyyy syyyyyyyyy syyyy +yyyyyyyyyyyyyyyy oyyyyyyyyy syyyy +yyyyyyyyyyyyyyyy oyyyyyyyyy syyyy +yyyyyyyyyyyyyyyy syyyyyyyyy syyyy +yyyyyyyyyyyyyyyy yyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy +EOF + ;; + + "SkiffOS"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c2} + ,@@@@@@@@@@@w,_ + ${c2}====~~~,,.${c2}A@@@@@@@@@@@@@@@@@W,_ + ${c1}`||||||||||||||L{${c2}"@$@@@@@@@@B" + ${c1}`|||||||||||||||||||||L{${c2}"$D + ${c2}@@@@@@@@@@@@@@@@@@@@@${c1}_||||}==, + ${c2}*@@@@@@@@@@@@@@@@@@@@@@@@@p${c1}||||==, + ${c1}`'||LLL{{""${c2}@$B@@@@@@@@@@@@@@@p${c1}|| + ${c1}`~=|||||||||||L"${c2}$@@@@@@@@@@@ + ${c1}````'"""""""${c2}'"""""""" +EOF + ;; + + "Solus"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} -``````````` + `-+/------------.` + .---:mNo---------------. + .-----yMMMy:---------------. + `------oMMMMMm/----------------` + .------/MMMMMMMN+----------------. + .------/NMMMMMMMMm-+/--------------. +`------/NMMMMMMMMMN-:mh/-------------` +.-----/NMMMMMMMMMMM:-+MMd//oso/:-----. +-----/NMMMMMMMMMMMM+--mMMMh::smMmyo:-- +----+NMMMMMMMMMMMMMo--yMMMMNo-:yMMMMd/. +.--oMMMMMMMMMMMMMMMy--yMMMMMMh:-yMMMy-` +`-sMMMMMMMMMMMMMMMMh--dMMMMMMMd:/Ny+y. +`-/+osyhhdmmNNMMMMMm-/MMMMMMMmh+/ohm+ + .------------:://+-/++++++${c1}oshddys: + -hhhhyyyyyyyyyyyhhhhddddhysssso- + `:ossssssyysssssssssssssssso:` + `:+ssssssssssssssssssss+- + `-/+ssssssssssso+/-` + `.-----..` +EOF + ;; + + "Source Mage"* | "Source_Mage"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} :ymNMNho. +.+sdmNMMMMMMMMMMy` +.-::/yMMMMMMMMMMMm- + sMMMMMMMMMMMm/ + /NMMMMMMMMMMMMMm: + .MMMMMMMMMMMMMMMMM: + `MMMMMMMMMMMMMMMMMN. + NMMMMMMMMMMMMMMMMMd + mMMMMMMMMMMMMMMMMMMo + hhMMMMMMMMMMMMMMMMMM. + .`/MMMMMMMMMMMMMMMMMs + :mMMMMMMMMMMMMMMMN` + `sMMMMMMMMMMMMMMM+ + /NMMMMMMMMMMMMMN` + oMMMMMMMMMMMMM+ + ./sd.-hMMMMMMMMmmN` + ./+oyyyh- `MMMMMMMMMmNh + sMMMMMMMMMmmo + `NMMMMMMMMMd: + -dMMMMMMMMMo + -shmNMMms. +EOF + ;; + + "Sparky"*) + set_colors 1 7 + read -rd '' ascii_data <<'EOF' +${c1} + . `-:-` + .o` .-///-` + `oo` .:/++:. + os+` -/+++:` ``.........``` + /ys+`./+++/-.-::::::----......`` + `syyo`++o+--::::-::/+++/-`` + -yyy+.+o+`:/:-:sdmmmmmmmmdy+-` +::-` :yyy/-oo.-+/`ymho++++++oyhdmdy/` +`/yy+-`.syyo`+o..o--h..osyhhddhs+//osyy/` + -ydhs+-oyy/.+o.-: ` ` :/::+ydhy+```-os- + .sdddy::syo--/:. `.:dy+-ohhho ./: + :yddds/:+oo+//:-`- /+ +hy+.shhy: `` + `:ydmmdysooooooo-.ss`/yss--oyyo + `./ossyyyyo+:-/oo:.osso- .oys + ``..-------::////.-oooo/ :so + `...----::::::::--.`/oooo: .o: + ``````` ++o+:` `:` + ./+/-` ` + `-:-. + `` +EOF + ;; + + "Star"*) + set_colors 7 + read -rd '' ascii_data <<'EOF' +${c1} ./ + `yy- + `y.`y` + `` s- .y ` + +h//:..` +/ /o ``..:/so + /o``.-::/:/+ o/://::-.`+o` + :s` `. .` `s/ + .y. .s- + `y- :s` + .-//. /+:. + .:/:. .:/:. +-+o:. .:+:. +-///++///:::` .-::::///+so- + ``..o/ d-....``` + s. `/. d + h .+o-+o- h. + h -o/` `/o: s: + -s/o:` `:o/+/ + /s- -yo +EOF + ;; + + "SteamOS"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} .,,,,. + .,'onNMMMMMNNnn',. + .'oNMANKMMMMMMMMMMMNNn'. + .'ANMMMMMMMXKNNWWWPFFWNNMNn. + ;NNMMMMMMMMMMNWW'' ,.., 'WMMM, + ;NMMMMV+##+VNWWW' .+;'':+, 'WMW, +,VNNWP+${c2}######${c1}+WW, ${c2}+: ${c1}:+, +MMM, +'${c2}+#############, +. ,+' ${c1}+NMMM +${c2} '*#########*' '*,,*' ${c1}.+NMMMM. +${c2} `'*###*' ,.,;###${c1}+WNM, +${c2} .,;;, .;##########${c1}+W +${c2},',. '; ,+##############' + '###+. :,. .,; ,###############' + '####.. `'' .,###############' + '#####+++################' + '*##################*' + ''*##########*'' + '''''' +EOF + ;; + + "sunos_small" | "solaris_small") + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} . .; . + . :; :: ;: . + .;. .. .. .;. +.. .. .. .. + .;, ,;. +EOF + ;; + + "SunOS" | "Solaris") + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} `- ` + `-- `+- .: + .+: `++: -/+- . + `.::` -++/``:::`./+/ `.-/. + `++/-`.` ` /++:` + `` ./:` .: `..`.- +``./+/:- -+++:- + -/+` :. +EOF + ;; + + "openSUSE Leap"* | "openSUSE_Leap"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c2} `-++:` + ./oooooo/- + `:oooooooooooo:. + -+oooooooooooooooo+-` + ./oooooooooooooooooooooo/- + :oooooooooooooooooooooooooo: + ` `-+oooooooooooooooooooo/- ` + `:oo/- .:ooooooooooooooo+:` `-+oo/. +`/oooooo:. -/oooooooooo/. ./oooooo/. + `:+ooooo+-` `:+oooo+- `:oooooo+:` + .:oooooo/. .::` -+oooooo/. + -/oooooo:. ./oooooo+- + `:+ooooo+-:+oooooo:` + ./oooooooooo/. + -/oooo+:` + `:/. +EOF + ;; + + "t2"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' +${c2} +TTTTTTTTTT + tt ${c1}222${c2} + tt ${c1}2 2${c2} + tt ${c1}2${c2} + tt ${c1}2${c2} + tt ${c1}22222${c2} +EOF + ;; + + "openSUSE Tumbleweed"* | "openSUSE_Tumbleweed"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c2} ...... + .,cdxxxoc,. .:kKMMMNWMMMNk:. + cKMMN0OOOKWMMXo. ; ;0MWk:. .:OMMk. + ;WMK;. .lKMMNM, :NMK, .OMW; + cMW; 'WMMMN ,XMK, oMM' +.MMc ..;l. xMN: KM0 +'MM. 'NMO oMM +.MM, .kMMl xMN + KM0 .kMM0. .dl:,.. .WMd + .XM0. ,OMMK, OMMMK. .XMK + oWMO:. .;xNMMk, NNNMKl. .xWMx + :ONMMNXMMMKx; . ,xNMWKkxllox0NMWk, + ..... .:dOOXXKOxl, +EOF + ;; + + "opensuse_small" | "suse_small"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} _______ +__| __ \\ + / .\\ \\ + \\__/ | + _______| + \\_______ +__________/ +EOF + ;; + + "openSUSE"* | "open SUSE"* | "SUSE"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c2} .;ldkO0000Okdl;. + .;d00xl:^''''''^:ok00d;. + .d00l' 'o00d. + .d0Kd'${c1} Okxol:;,. ${c2}:O0d. + .OK${c1}KKK0kOKKKKKKKKKKOxo:, ${c2}lKO. + ,0K${c1}KKKKKKKKKKKKKKK0P^${c2},,,${c1}^dx:${c2} ;00, +.OK${c1}KKKKKKKKKKKKKKKk'${c2}.oOPPb.${c1}'0k.${c2} cKO. +:KK${c1}KKKKKKKKKKKKKKK: ${c2}kKx..dd ${c1}lKd${c2} 'OK: +dKK${c1}KKKKKKKKKOx0KKKd ${c2}^0KKKO' ${c1}kKKc${c2} dKd +dKK${c1}KKKKKKKKKK;.;oOKx,..${c2}^${c1}..;kKKK0.${c2} dKd +:KK${c1}KKKKKKKKKK0o;...^cdxxOK0O/^^' ${c2}.0K: + kKK${c1}KKKKKKKKKKKKK0x;,,......,;od ${c2}lKk + '0K${c1}KKKKKKKKKKKKKKKKKKKK00KKOo^ ${c2}c00' + 'kK${c1}KKOxddxkOO00000Okxoc;'' ${c2}.dKk' + l0Ko. .c00l' + 'l0Kk:. .;xK0l' + 'lkK0xl:;,,,,;:ldO0kl' + '^:ldxkkkkxdl:^' +EOF + ;; + + "SwagArch"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} .;ldkOKXXNNNNXXK0Oxoc,. + ,lkXMMNK0OkkxkkOKWMMMMMMMMMM; + 'K0xo ..,;:c:. `'lKMMMMM0 + .lONMMMMMM' `lNMk' +${c2} ;WMMMMMMMMMO. ${c1}....::... +${c2} OMMMMMMMMMMMMKl. ${c1}.,;;;;;ccccccc, +${c2} `0MMMMMMMMMMMMMM0: ${c1}.. .ccccccc. +${c2} 'kWMMMMMMMMMMMMMNo. ${c1}.,:' .ccccccc. +${c2} `c0MMMMMMMMMMMMMN,${c1},:c; :cccccc: +${c2} ckl. `lXMMMMMMMMMX${c1}occcc:.. ;ccccccc. +${c2}dMMMMXd, `OMMMMMMWk${c1}ccc;:''` ,ccccccc: +${c2}XMMMMMMMWKkxxOWMMMMMNo${c1}ccc; .cccccccc. +${c2} `':ldxO0KXXXXXK0Okdo${c1}cccc. :cccccccc. + :ccc:' `cccccccc:, + '' +EOF + ;; + + "Tails"*) + set_colors 5 7 + read -rd '' ascii_data <<'EOF' +${c1} `` + ./yhNh +syy/Nshh `:o/ +N:dsNshh █ `ohNMMd +N-/+Nshh `yMMMMd +N-yhMshh yMMMMd +N-s:hshh █ yMMMMd so//. +N-oyNsyh yMMMMd d Mms. +N:hohhhd:. yMMMMd syMMM+ +Nsyh+-..+y+- yMMMMd :mMM+ ++hy- -ss/`yMMMM `+d+ + :sy/. ./yNMMMMm `` + .+ys- `:+hNMMMMMMy/` + `hNmmMMMMMMMMMMMMdo. + dMMMMMMMMMMMMMMMMMNh: + +hMMMMMMMMMMMMMMMMMmy. + -oNMMMMMMMMMMmy+.` + `:yNMMMds/.` + .//` +EOF + ;; + + "Trisquel"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' +${c1} ▄▄▄▄▄▄ + ▄█████████▄ + ▄▄▄▄▄▄ ████▀ ▀████ + ▄██████████▄ ████▀ ▄▄ ▀███ + ▄███▀▀ ▀▀████ ███▄ ▄█ ███ +▄███ ▄▄▄ ████▄ ▀██████ ▄███ +███ █▀▀██▄ █████▄ ▀▀ ▄████ +▀███ ███ ███████▄▄ ▄▄██████ +${c1} ▀███▄ ▄███ █████████████${c2}████▀ +${c1} ▀█████████ ███████${c2}███▀▀▀ + ▀▀███▀▀ ██████▀▀ + ██████▀ ▄▄▄▄ + █████▀ ████████ + █████ ███▀ ▀███ + ████▄ ██▄▄▄ ███ + █████▄ ▀▀ ▄██ + ██████▄▄▄████ + ▀▀█████▀▀ +EOF + ;; + + "Ubuntu Cinnamon"* | "Ubuntu-Cinnamon"*) + set_colors 1 7 + read -rd '' ascii_data <<'EOF' +${c1} .-/+oooooooo+/-. + `:+oooooooooooooooooo+:` + -+oooooooooooooooooooooooo+- + .ooooooooooooooooooo${c2}:ohNd${c1}oooooo. + /oooooooooooo${c2}:/+oo++:/ohNd${c1}ooooooo/ + +oooooooooo${c2}:osNdhyyhdNNh+:+${c1}oooooooo+ + /ooooooooo${c2}/dN/${c1}ooooooooo${c2}/sNNo${c1}ooooooooo/ +.ooooooooo${c2}oMd:${c1}oooooooooooo${c2}:yMy${c1}ooooooooo. ++ooooo${c2}:+o/Md${c1}oooooo${c2}:sm/${c1}oo/ooo${c2}yMo${c1}oooooooo+ +ooo${c2}:sdMdosMo${c1}ooooo${c2}oNMd${c1}//${c2}dMd+${c1}o${c2}:so${c1}ooooooooo +oooo${c2}+ymdosMo${c1}ooo${c2}+mMm${c1}+/${c2}hMMMMMh+hs${c1}ooooooooo ++oooooo${c2}:${c1}:${c2}/Nm:${c1}/${c2}hMNo${c1}:y${c2}MMMMMMMMMM+${c1}oooooooo+ +.ooooooooo${c2}/NNMNy${c1}:o${c2}NMMMMMMMMMMo${c1}ooooooooo. +/oooooooooo${c2}:yh:${c1}+m${c2}MMMMMMMMMMd/${c1}ooooooooo/ + +oooooooooo${c2}+${c1}/h${c2}mMMMMMMNds//o${c1}oooooooo+ + /oooooooooooo${c2}+:////:o/ymMd${c1}ooooooo/ + .oooooooooooooooooooo${c2}/sdh${c1}oooooo. + -+oooooooooooooooooooooooo+- + `:+oooooooooooooooooo+:` + .-/+oooooooo+/-. +EOF + ;; + + "Ubuntu Budgie"* | "Ubuntu-Budgie"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c2} ./oydmMMMMMMmdyo/. + :smMMMMMMMMMMMhs+:++yhs: + `omMMMMMMMMMMMN+` `odo` + /NMMMMMMMMMMMMN- `sN/ + `hMMMMmhhmMMMMMMh sMh` + .mMmo- /yMMMMm` `MMm. + mN/ yMMMMMMMd- MMMm +oN- oMMMMMMMMMms+//+o+: :MMMMo +m/ +NMMMMMMMMMMMMMMMMm. :NMMMMm +M` .NMMMMMMMMMMMMMMMNodMMMMMMM +M- sMMMMMMMMMMMMMMMMMMMMMMMMM +mm` mMMMMMMMMMNdhhdNMMMMMMMMMm +oMm/ .dMMMMMMMMh: :dMMMMMMMo + mMMNyo/:/sdMMMMMMMMM+ sMMMMMm + .mMMMMMMMMMMMMMMMMMs `NMMMm. + `hMMMMMMMMMMM.oo+. `MMMh` + /NMMMMMMMMMo sMN/ + `omMMMMMMMMy. :dmo` + :smMMMMMMMh+-` `.:ohs: + ./oydmMMMMMMdhyo/. +EOF + ;; + + "Ubuntu-GNOME"*) + set_colors 4 5 7 6 + read -rd '' ascii_data <<'EOF' +${c3} ./o. + .oooooooo + .oooo```soooo + .oooo` `soooo + .ooo` ${c4}.o.${c3} `\/ooo. + :ooo ${c4}:oooo.${c3} `\/ooo. + sooo ${c4}`ooooo${c3} \/oooo + \/ooo ${c4}`soooo${c3} `ooooo + `soooo ${c4}`\/ooo${c3} `soooo +${c4}./oo ${c3}`\/ooo ${c4}`/oooo.${c3} `/ooo +${c4}`\/ooo. ${c3}`/oooo. ${c4}`/oooo.${c3} `` +${c4} `\/ooo. ${c3}/oooo ${c4}/ooo` +${c4} `ooooo ${c3}`` ${c4}.oooo +${c4} `soooo. .oooo` + `\/oooooooooo` + ``\/oo`` +EOF + ;; + + "Ubuntu MATE"* | "Ubuntu-MATE"*) + set_colors 2 7 + read -rd '' ascii_data <<'EOF' +${c1} .:/+oossssoo+/:.` + `:+ssssssssssssssssss+:` + -+sssssssssssssss${c2}y${c1}ssssssss+- + .osssssssssssss${c2}yy${c1}ss${c2}mMmh${c1}ssssssso. + /sssssssss${c2}ydmNNNmmd${c1}s${c2}mMMMMNdy${c1}sssss/ + `+ssssssss${c2}hNNdy${c1}sssssss${c2}mMMMMNdy${c1}ssssss+` + +sssssss${c2}yNNh${c1}ss${c2}hmNNNNm${c1}s${c2}mMmh${c1}s${c2}ydy${c1}sssssss+ +-sssss${c2}y${c1}ss${c2}Nm${c1}ss${c2}hNNh${c1}ssssss${c2}y${c1}s${c2}hh${c1}ss${c2}mMy${c1}sssssss- ++ssss${c2}yMNdy${c1}ss${c2}hMd${c1}ssssssssss${c2}hMd${c1}ss${c2}NN${c1}sssssss+ +sssss${c2}yMMMMMmh${c1}sssssssssssss${c2}NM${c1}ss${c2}dMy${c1}sssssss +sssss${c2}yMMMMMmhy${c1}ssssssssssss${c2}NM${c1}ss${c2}dMy${c1}sssssss ++ssss${c2}yMNdy${c1}ss${c2}hMd${c1}ssssssssss${c2}hMd${c1}ss${c2}NN${c1}sssssss+ +-sssss${c2}y${c1}ss${c2}Nm${c1}ss${c2}hNNh${c1}ssssssss${c2}dh${c1}ss${c2}mMy${c1}sssssss- + +sssssss${c2}yNNh${c1}ss${c2}hmNNNNm${c1}s${c2}mNmh${c1}s${c2}ymy${c1}sssssss+ + +ssssssss${c2}hNNdy${c1}sssssss${c2}mMMMMmhy${c1}ssssss+ + /sssssssss${c2}ydmNNNNmd${c1}s${c2}mMMMMNdh${c1}sssss/ + .osssssssssssss${c2}yy${c1}ss${c2}mMmdy${c1}sssssso. + -+sssssssssssssss${c2}y${c1}ssssssss+- + `:+ssssssssssssssssss+:` + .:/+oossssoo+/:. + +EOF + ;; + + "ubuntu_old") + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} ./+o+- +${c2} yyyyy- ${c1}-yyyyyy+ +${c2} ${c2}://+//////${c1}-yyyyyyo +${c3} .++ ${c2}.:/++++++/-${c1}.+sss/` +${c3} .:++o: ${c2}/++++++++/:--:/- +${c3} o:+o+:++.${c2}`..```.-/oo+++++/ +${c3} .:+o:+o/.${c2} `+sssoo+/ +${c2} .++/+:${c3}+oo+o:`${c2} /sssooo. +${c2}/+++//+:${c3}`oo+o${c2} /::--:. +${c2}+/+o+++${c3}`o++o${c1} ++////. +${c2} .++.o+${c3}++oo+:`${c1} /dddhhh. +${c3} .+.o+oo:.${c1} `oddhhhh+ +${c3} +.++o+o`${c1}`-````.:ohdhhhhh+ +${c3} `:o+++ ${c1}`ohhhhhhhhyo++os: +${c3} .o:${c1}`.syhhhhhhh/${c3}.oo++o` +${c1} /osyyyyyyo${c3}++ooo+++/ +${c1} ````` ${c3}+oo+++o: +${c3} `oo++. +EOF + ;; + + "Ubuntu Studio"* | "Ubuntu-Studio") + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} ..-::::::-.` + `.:+++++++++++${c2}ooo${c1}++:.` + ./+++++++++++++${c2}sMMMNdyo${c1}+/. + .++++++++++++++++${c2}oyhmMMMMms${c1}++. + `/+++++++++${c2}osyhddddhys${c1}+${c2}osdMMMh${c1}++/` + `+++++++++${c2}ydMMMMNNNMMMMNds${c1}+${c2}oyyo${c1}++++` + +++++++++${c2}dMMNhso${c1}++++${c2}oydNMMmo${c1}++++++++` + :+${c2}odmy${c1}+++${c2}ooysoohmNMMNmyoohMMNs${c1}+++++++: + ++${c2}dMMm${c1}+${c2}oNMd${c1}++${c2}yMMMmhhmMMNs+yMMNo${c1}+++++++ +`++${c2}NMMy${c1}+${c2}hMMd${c1}+${c2}oMMMs${c1}++++${c2}sMMN${c1}++${c2}NMMs${c1}+++++++. +`++${c2}NMMy${c1}+${c2}hMMd${c1}+${c2}oMMMo${c1}++++${c2}sMMN${c1}++${c2}mMMs${c1}+++++++. + ++${c2}dMMd${c1}+${c2}oNMm${c1}++${c2}yMMNdhhdMMMs${c1}+y${c2}MMNo${c1}+++++++ + :+${c2}odmy${c1}++${c2}oo${c1}+${c2}ss${c1}+${c2}ohNMMMMmho${c1}+${c2}yMMMs${c1}+++++++: + +++++++++${c2}hMMmhs+ooo+oshNMMms${c1}++++++++ + `++++++++${c2}oymMMMMNmmNMMMMmy+oys${c1}+++++` + `/+++++++++${c2}oyhdmmmmdhso+sdMMMs${c1}++/ + ./+++++++++++++++${c2}oyhdNMMMms${c1}++. + ./+++++++++++++${c2}hMMMNdyo${c1}+/. + `.:+++++++++++${c2}sso${c1}++:. + ..-::::::-.. +EOF + ;; + + "ubuntu_small") + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} _ + ---(_) + _/ --- \\ +(_) | | + \\ --- _/ + ---(_) +EOF + ;; + + "Ubuntu"* | "i3buntu"*) + set_colors 1 7 3 + read -rd '' ascii_data <<'EOF' +${c1} .-/+oossssoo+\-. + ´:+ssssssssssssssssss+:` + -+ssssssssssssssssssyyssss+- + .ossssssssssssssssss${c2}dMMMNy${c1}sssso. + /sssssssssss${c2}hdmmNNmmyNMMMMh${c1}ssssss\ + +sssssssss${c2}hm${c1}yd${c2}MMMMMMMNddddy${c1}ssssssss+ + /ssssssss${c2}hNMMM${c1}yh${c2}hyyyyhmNMMMNh${c1}ssssssss\ +.ssssssss${c2}dMMMNh${c1}ssssssssss${c2}hNMMMd${c1}ssssssss. ++ssss${c2}hhhyNMMNy${c1}ssssssssssss${c2}yNMMMy${c1}sssssss+ +oss${c2}yNMMMNyMMh${c1}ssssssssssssss${c2}hmmmh${c1}ssssssso +oss${c2}yNMMMNyMMh${c1}sssssssssssssshmmmh${c1}ssssssso ++ssss${c2}hhhyNMMNy${c1}ssssssssssss${c2}yNMMMy${c1}sssssss+ +.ssssssss${c2}dMMMNh${c1}ssssssssss${c2}hNMMMd${c1}ssssssss. + \ssssssss${c2}hNMMM${c1}yh${c2}hyyyyhdNMMMNh${c1}ssssssss/ + +sssssssss${c2}dm${c1}yd${c2}MMMMMMMMddddy${c1}ssssssss+ + \sssssssssss${c2}hdmNNNNmyNMMMMh${c1}ssssss/ + .ossssssssssssssssss${c2}dMMMNy${c1}sssso. + -+sssssssssssssssss${c2}yyy${c1}ssss+- + `:+ssssssssssssssssss+:` + .-\+oossssoo+/-. +EOF + ;; + + "Univention"*) + set_colors 1 7 + read -rd '' ascii_data <<'EOF' +${c1} ./osssssssssssssssssssssso+- + `ohhhhhhhhhhhhhhhhhhhhhhhhhhhhy: + shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh- + `-//${c2}sssss${c1}/hhhhhhhhhhhhhh+${c2}s${c1}.hhhhhhhhh+ + .ohhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sss${c1}+hhhhhhh+ +.yhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}ssss${c1}:hhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}sssss${c1}.hhhhhhhhhhhhhh.${c2}sssss${c1}yhhhhh+ ++hhhhhy${c2}ssssss${c1}+yhhhhhhhhhhy/${c2}ssssss${c1}yhhhhh+ ++hhhhhh:${c2}sssssss${c1}:hhhhhhh+${c2}.ssssssss${c1}yhhhhy. ++hhhhhhh+`${c2}ssssssssssssssss${c1}hh${c2}sssss${c1}yhhho` ++hhhhhhhhhs+${c2}ssssssssssss${c1}+hh+${c2}sssss${c1}/:-` +-hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhho + :yhhhhhhhhhhhhhhhhhhhhhhhhhhhh+` + -+ossssssssssssssssssssss+:` +EOF + ;; + + "Venom"*) + set_colors 8 4 + read -rd '' ascii_data <<'EOF' +${c1} ::::::: ::::::: + mMMMMMMm dMMMMMMm + /MMMMMMMo +MMMMMMM/ + yMMMMMMN mMMMMMMy + NMMMMMMs oMMMMMMm + +MMMMMMN: NMMMMMM+ + hMMMMMMy sMMMMMMy + :NMMMMMM::NMMMMMN: + oMMMMMMyyMMMMMM+ + dMMMMMMMMMMMMh + /MMMMMMMMMMMN: + sMMMMMMMMMMo + mMMMMMMMMd + +MMMMMMMN: + :::::: +EOF + ;; + + "void_small") + set_colors 2 8 + read -rd '' ascii_data <<'EOF' +${c1} _______ + _ \\______ - +| \\ ___ \\ | +| | / \ | | +| | \___/ | | +| \\______ \\_| + -_______\\ +EOF + ;; + + "Void"*) + set_colors 2 8 + read -rd '' ascii_data <<'EOF' +${c1} __.;=====;.__ + _.=+==++=++=+=+===;. + -=+++=+===+=+=+++++=_ + . -=:`` `--==+=++==. + _vi, ` --+=++++: + .uvnvi. _._ -==+==+. + .vvnvnI` .;==|==;. :|=||=|. +${c2}+QmQQm${c1}pvvnv; ${c2}_yYsyQQWUUQQQm #QmQ#${c1}:${c2}QQQWUV$QQm. +${c2} -QQWQW${c1}pvvo${c2}wZ?.wQQQE${c1}==<${c2}QWWQ/QWQW.QQWW${c1}(: ${c2}jQWQE +${c2} -$QQQQmmU' jQQQ@${c1}+=<${c2}QWQQ)mQQQ.mQQQC${c1}+;${c2}jWQQ@' +${c2} -$WQ8Y${c1}nI: ${c2}QWQQwgQQWV${c1}`${c2}mWQQ.jQWQQgyyWW@! +${c1} -1vvnvv. `~+++` ++|+++ + +vnvnnv, `-|=== + +vnvnvns. . :=- + -Invnvvnsi..___..=sv=. ` + +Invnvnvnnnnnnnnvvnn;. + ~|Invnvnvvnvvvnnv}+` + -~|{*l}*|~ +EOF + + ;; + + "VNux"*) + set_colors 11 8 15 1 7 + read -rd '' ascii_data <<'EOF' +${c1} ` + ^[XOx~. + ^_nwdbbkp0ti' + +${c2} _j>!vC1,, + ${c4},${c2} ,CY${c3}O${c2}t${c3}O${c2}1(l;" +`${c4}~-{r(1I${c2} ^${c1}/zmwJuc:${c2}I^ +'${c4}?)|${c1}U${c4}/}-${c2} ^${c3}f${c1}OCLLOw${c3}_${c2},; + ,${c4}i,``. ${c2}",${c3}k%ooW@$d"${c2}I,' + ' ;^${c3}u$$$$$$$$^<${c2}:^ + ` .>>${c3}($$${c5}$@@@@$$${c3}$nl${c2}[:: + `!}?${c3}B$${c5}%&WMMW&%$${c3}$1}-${c2}}": + ^?j${c3}Z$${c5}WMMWWWWMMW$${c3}ofc${c2};;` + <~x&${c3}$${c5}&MWWWWWWWWp${c3}-${c5}l>[< +${c1} 'ljmwn${c2}~tk8${c5}MWWWWM8O${c2}X${c1}r${c2}+]nC${c1}[ +!JZqwwdX${c2}:^C8${c5}#MMMM@${c2}X${c1}Odpdpq0< + ^x00J(" + ^" +EOF + + ;; + + "LangitKetujuh"*) + set_colors 7 4 + read -rd '' ascii_data <<'EOF' +${c1} + L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L + 'L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L + L7L. 'L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L + L7L7L7L L7L7L7L + L7L7L7L L7L7L7L + L7L7L7L L7L7L7L7L7L7L7L7L7L7L7L + L7L7L7L 'L7L7L7L7L7L7L7L7L7L + L7L7L7L 'L7L7L7L7L7L7L7L + L7L7L7L L7L7L7L + L7L7L7L L7L7L7L + L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L. 'L7L + L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L. + L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L7L +${c2} +EOF + ;; + + "semc"*) + set_colors 2 8 1 + read -rd '' ascii_data <<'EOF' +${c1} /\ + ______/ \ + / |()| ${c2}E M C +${c1} | (-- | | + \ \ | | +.----) | |__| +|_______/ / ${c3}"${c1} \ + ${c3}" + " +EOF + + ;; + + "Obarun"*) + set_colors 6 6 7 1 + read -rd '' ascii_data <<'EOF' +${c1} ,;::::; + ;cooolc;, + ,coool; + ,loool, + loooo; + :ooool + cooooc ,:ccc; + looooc :oooooool + cooooo ;oooooooooo, + :ooooo; :ooooooooooo + oooooo oooooooooooc + :oooooo :ooooooooool + loooooo ;oooooooool + looooooc .coooooooc + cooooooo: ,;co; + ,ooooooool; ,:loc + cooooooooooooloooooc + ;ooooooooooooool; + ;looooooolc; +EOF + ;; + + *"[Windows 11]"*|*"on Windows 11"*|\ + "Windows 11"* |"windows11") + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} +################ ################ +################ ################ +################ ################ +################ ################ +################ ################ +################ ################ +################ ################ + +################ ################ +################ ################ +################ ################ +################ ################ +################ ################ +################ ################ +################ ################ +EOF + ;; + + *"[Windows 10]"*|*"on Windows 10"*|"Windows 8"*|\ + "Windows 10"* |"windows10"|"windows8") + set_colors 6 7 + read -rd '' ascii_data <<'EOF' +${c1} .., + ....,,:;+ccllll + ...,,+:; cllllllllllllllllll +,cclllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll + +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +llllllllllllll lllllllllllllllllll +`'ccllllllllll lllllllllllllllllll + `' \\*:: :ccllllllllllllllll + ````''*::cll + `` +EOF + ;; + + "Windows"*) + set_colors 1 2 4 3 + read -rd '' ascii_data <<'EOF' +${c1} ,.=:!!t3Z3z., + :tt:::tt333EE3 +${c1} Et:::ztt33EEEL${c2} @Ee., .., +${c1} ;tt:::tt333EE7${c2} ;EEEEEEttttt33# +${c1} :Et:::zt333EEQ.${c2} $EEEEEttttt33QL +${c1} it::::tt333EEF${c2} @EEEEEEttttt33F +${c1} ;3=*^```"*4EEV${c2} :EEEEEEttttt33@. +${c3} ,.=::::!t=., ${c1}`${c2} @EEEEEEtttz33QF +${c3} ;::::::::zt33)${c2} "4EEEtttji3P* +${c3} :t::::::::tt33.${c4}:Z3z..${c2} ``${c4} ,..g. +${c3} i::::::::zt33F${c4} AEEEtttt::::ztF +${c3} ;:::::::::t33V${c4} ;EEEttttt::::t3 +${c3} E::::::::zt33L${c4} @EEEtttt::::z3F +${c3}{3=*^```"*4E3)${c4} ;EEEtttt:::::tZ` +${c3} `${c4} :EEEEtttt::::z7 + "VEzjt:;;z>*` +EOF + ;; + + "Xubuntu"*) + set_colors 4 7 1 + read -rd '' ascii_data <<'EOF' +${c1} `.:/ossyyyysso/:. + `.yyyyyyyyyyyyyyyyyyyy.` + `yyyyyyyyyyyyyyyyyyyyyyyyyy` + `yyyyyyyyyyyyyyyyyyyy${c2}::${c1}yyyyyyyy` + .yyyyyyyyyyy${c2}/+:${c1}yyyyyyy${c2}ds${c1}yyy${c2}+y${c1}yyyy. + yyyyyyy${c2}:o/${c1}yy${c2}dMMM+${c1}yyyyy${c2}/M+${c1}y${c2}:hM+${c1}yyyyyy + yyyyyyy${c2}+MMMy${c1}y${c2}mMMMh${c1}yyyyy${c2}yM::mM+${c1}yyyyyyyy +`yyyyyyy${c2}+MMMMysMMMd${c1}yyyyy${c2}dh:mN+${c1}yyyyyyyyy` +yyyyyyyy${c2}:NMMMMmMMMMmmdhyy+/y:${c1}yyyyyyyyyyy +yyyyyyyy${c2}+MMMMMMMMMMMMMMMMMMNho:${c1}yyyyyyyyy +yyyyyyyy${c2}mMMMMMMMMMMMMMMMMMMMMMMy${c1}yyyyyyyy +yyyyyyy${c2}+MMMMMMMMMMMMMMMMMMMMMMMM/${c1}yyyyyyy +`yyyyyy${c2}sMMMMMMMMMMMMMMMMMMMMMMmo${c1}yyyyyyy` + yyyyyy${c2}oMMMMMMMMMMMMMMMMMMMmy+${c1}yyyyyyyyy + yyyyy${c2}:mMMMMMMMMMMMMMMNho/${c1}yyyyyyyyyyy + .yyyy${c2}:yNMMMMMMMNdyo:${c1}yyyyyyyyyyyyy. + `yyyyyy${c2}:/++/::${c1}yyyyyyyyyyyyyyyyy` + `yyyyyyyyyyyyyyyyyyyyyyyyyy` + `.yyyyyyyyyyyyyyyyyyyy.` + `.:/oosyyyysso/:.` +EOF + ;; + "IRIX"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c1} ./ohmNd/ +dNmho/- + `:+ydNMMMMMMMM.-MMMMMMMMMdyo:. + `hMMMMMMNhs/sMMM-:MMM+/shNMMMMMMh` + -NMMMMMmo-` /MMM-/MMM- `-omMMMMMN. + `.`-+hNMMMMMNhyMMM-/MMMshmMMMMMmy+...` ++mMNds:-:sdNMMMMMMMyyMMMMMMMNdo:.:sdMMm+ +dMMMMMMmy+.-/ymNMMMMMMMMNmy/-.+hmMMMMMMd +oMMMMmMMMMNds:.+MMMmmMMN/.-odNMMMMmMMMM+ +.MMMM-/ymMMMMMmNMMy..hMMNmMMMMMmy/-MMMM. + hMMM/ `/dMMMMMMMN////NMMMMMMMd/. /MMMh + /MMMdhmMMMmyyMMMMMMMMMMMMhymMMMmhdMMM: + `mMMMMNho//sdMMMMM//NMMMMms//ohNMMMMd + `/so/:+ymMMMNMMMM` mMMMMMMMmh+::+o/` + `yNMMNho-yMMMM` NMMMm.+hNMMNh` + -MMMMd: oMMMM. NMMMh :hMMMM- + -yNMMMmooMMMM- NMMMyomMMMNy- + .omMMMMMMMM-`NMMMMMMMmo. + `:hMMMMMM. NMMMMMh/` + .odNm+ /dNms. +EOF + ;; + "Zorin"*) + set_colors 4 6 + read -rd '' ascii_data <<'EOF' +${c1} `osssssssssssssssssssso` + .osssssssssssssssssssssso. + .+oooooooooooooooooooooooo+. + + + `::::::::::::::::::::::. .:` + `+ssssssssssssssssss+:.` `.:+ssso` +.ossssssssssssssso/. `-+ossssssso. +ssssssssssssso/-` `-/osssssssssssss +.ossssssso/-` .-/ossssssssssssssso. + `+sss+:. `.:+ssssssssssssssssss+` + `:. .::::::::::::::::::::::` + + + .+oooooooooooooooooooooooo+. + -osssssssssssssssssssssso- + `osssssssssssssssssssso` +EOF + ;; + + *) + case $kernel_name in + *"BSD") + set_colors 1 7 4 3 6 + read -rd '' ascii_data <<'EOF' +${c1} , , + /( )` + \ \___ / | + /- _ `-/ ' + (${c2}/\/ \ ${c1}\ /\ + ${c2}/ / | ` ${c1}\ + ${c3}O O ${c2}) ${c1}/ | + ${c2}`-^--'${c1}`< ' + (_.) _ ) / + `.___/` / + `-----' / +${c4}<----. __ / __ \ +${c4}<----|====${c1}O)))${c4}==${c1}) \) /${c4}====| +<----' ${c1}`--' `.__,' \ + | | + \ / /\ + ${c5}______${c1}( (_ / \______/ + ${c5},' ,-----' | + `--{__________) +EOF + ;; + + "Darwin") + set_colors 2 3 1 1 5 4 + read -rd '' ascii_data <<'EOF' +${c1} c.' + ,xNMM. + .OMMMMo + lMMM" + .;loddo:. .olloddol;. + cKMMMMMMMMMMNWMMMMMMMMMM0: +${c2} .KMMMMMMMMMMMMMMMMMMMMMMMWd. + XMMMMMMMMMMMMMMMMMMMMMMMX. +${c3};MMMMMMMMMMMMMMMMMMMMMMMM: +:MMMMMMMMMMMMMMMMMMMMMMMM: +${c4}.MMMMMMMMMMMMMMMMMMMMMMMMX. + kMMMMMMMMMMMMMMMMMMMMMMMMWd. + ${c5}'XMMMMMMMMMMMMMMMMMMMMMMMMMMk + 'XMMMMMMMMMMMMMMMMMMMMMMMMK. + ${c6}kMMMMMMMMMMMMMMMMMMMMMMd + ;KMMMMMMMWXXWMMMMMMMk. + "cooc*" "*coo'" +EOF + ;; + + "GNU"*) + set_colors fg 7 + read -rd '' ascii_data <<'EOF' +${c1} _-`````-, ,- '- . + .' .- - | | - -. `. + /.' / `. \ +:/ : _... ..._ `` : +:: : /._ .`:'_.._\. || : +:: `._ ./ ,` : \ . _.'' . +`:. / | -. \-. \\_ / + \:._ _/ .' .@) \@) ` `\ ,.' + _/,--' .- .\,-.`--`. + ,'/'' (( \ ` ) + /'/' \ `-' ( + '/'' `._,-----' + ''/' .,---' + ''/' ;: + ''/'' ''/ + ''/''/'' + '/'/' + `; +EOF + ;; + + "Linux") + set_colors fg 8 3 + read -rd '' ascii_data <<'EOF' +${c2} ##### +${c2} ####### +${c2} ##${c1}O${c2}#${c1}O${c2}## +${c2} #${c3}#####${c2}# +${c2} ##${c1}##${c3}###${c1}##${c2}## +${c2} #${c1}##########${c2}## +${c2} #${c1}############${c2}## +${c2} #${c1}############${c2}### +${c3} ##${c2}#${c1}###########${c2}##${c3}# +${c3}######${c2}#${c1}#######${c2}#${c3}###### +${c3}#######${c2}#${c1}#####${c2}#${c3}####### +${c3} #####${c2}#######${c3}##### +EOF + ;; + "Profelis SambaBOX"* | "SambaBOX"*) + set_colors 3 6 + read -rd '' ascii_data <<'EOF' +${c1} + # + *////##### + /////////#########( + .((((((///// ,####(#((((( + /#######(((* (#(((((((((. +//((#(#(#, ((##( ,((((((// +////// #(##########( ////// +////// ((#(#(#(#(##########(///////// +/////( (((((((#########(##((((((///// +/(((#( ((((/ +####(# ((### +#########(((/////////(((((((((, (#(#( +########( /////////(((((((* ##### +####///, *////((( ((((((( +./////////// .//((((((((( + ///////////, *(/////((((* + ,/(((((((((##########/. + .((((((####### + ((##* +EOF + ;; + + "SunOS") + set_colors 3 7 + read -rd '' ascii_data <<'EOF' +${c1} `- ` + `-- `+- .: + .+: `++: -/+- . + `.::` -++/``:::`./+/ `.-/. + `++/-`.` ` /++:` + `` ./:` .: `..`.- +``./+/:- -+++:- + -/+` :. +EOF + ;; + + "IRIX"*) + set_colors 4 7 + read -rd '' ascii_data <<'EOF' +${c1} ./ohmNd/ +dNmho/- + `:+ydNMMMMMMMM.-MMMMMMMMMdyo:. + `hMMMMMMNhs/sMMM-:MMM+/shNMMMMMMh` + -NMMMMMmo-` /MMM-/MMM- `-omMMMMMN. + `.`-+hNMMMMMNhyMMM-/MMMshmMMMMMmy+...` ++mMNds:-:sdNMMMMMMMyyMMMMMMMNdo:.:sdMMm+ +dMMMMMMmy+.-/ymNMMMMMMMMNmy/-.+hmMMMMMMd +oMMMMmMMMMNds:.+MMMmmMMN/.-odNMMMMmMMMM+ +.MMMM-/ymMMMMMmNMMy..hMMNmMMMMMmy/-MMMM. + hMMM/ `/dMMMMMMMN////NMMMMMMMd/. /MMMh + /MMMdhmMMMmyyMMMMMMMMMMMMhymMMMmhdMMM: + `mMMMMNho//sdMMMMM//NMMMMms//ohNMMMMd + `/so/:+ymMMMNMMMM` mMMMMMMMmh+::+o/` + `yNMMNho-yMMMM` NMMMm.+hNMMNh` + -MMMMd: oMMMM. NMMMh :hMMMM- + -yNMMMmooMMMM- NMMMyomMMMNy- + .omMMMMMMMM-`NMMMMMMMmo. + `:hMMMMMM. NMMMMMh/` + .odNm+ /dNms. +EOF + ;; + + esac + ;; + esac + + # Overwrite distro colors if '$ascii_colors' doesn't + # equal 'distro'. + [[ ${ascii_colors[0]} != distro ]] && { + color_text=off + set_colors "${ascii_colors[@]}" + } +} + +main() { + cache_uname + get_os + + # Load default config. + eval "$config" + + get_args "$@" + [[ $verbose != on ]] && exec 2>/dev/null + get_simple "$@" + get_distro + get_bold + get_distro_ascii + [[ $stdout == on ]] && stdout + + # Minix doesn't support these sequences. + [[ $TERM != minix && $stdout != on ]] && { + # If the script exits for any reason, unhide the cursor. + trap 'printf "\e[?25h\e[?7h"' EXIT + + # Hide the cursor and disable line wrap. + printf '\e[?25l\e[?7l' + } + + image_backend + get_cache_dir + old_functions + print_info + dynamic_prompt + + # w3m-img: Draw the image a second time to fix + # rendering issues in specific terminal emulators. + [[ $image_backend == *w3m* ]] && display_image + [[ $image_backend == *ueberzug* ]] && display_image + + # Add neofetch info to verbose output. + err "Neofetch command: $0 $*" + err "Neofetch version: $version" + + [[ $verbose == on ]] && printf %b "$err" >&2 + + # If `--loop` was used, constantly redraw the image. + while [[ $image_loop == on && $image_backend == w3m ]]; do + display_image + sleep 1 + done + + return 0 +} + +main "$@" diff --git a/x86_64/core/base-drunk/os-release b/x86_64/core/base-drunk/os-release new file mode 100644 index 0000000..f4ade54 --- /dev/null +++ b/x86_64/core/base-drunk/os-release @@ -0,0 +1,7 @@ +NAME="Drunk" +VERSION="2022.3" +ID=drunk +ID_LIKE=drunk +PRETTY_NAME="Drunk 2022.3" +VERSION_ID="2022.3" +VERSION_CODENAME=sober diff --git a/x86_64/core/bash/PKGBUILD b/x86_64/core/bash/PKGBUILD new file mode 100644 index 0000000..354262a --- /dev/null +++ b/x86_64/core/bash/PKGBUILD @@ -0,0 +1,49 @@ +pkgname=bash +pkgver=5.1.16 +pkgrel=1 +arch=('x86_64') +depends=(readline glibc ncurses) +backup=(etc/bash.bash{rc,_logout} + etc/skel/.bash{rc,_profile,_logout}) +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz + dot.bash_logout + dot.bash_profile + dot.bashrc + system.bash_logout + system.bashrc) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --with-curses \ + --enable-readline \ + --without-bash-malloc \ + --with-installed-readline + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + cd ../ + + mkdir -p $pkgdir/bin/ + mv $pkgdir/usr/bin/bash $pkgdir/bin + ln -s bash $pkgdir/bin/sh + + # System + mkdir -p $pkgdir/etc + install -Dm644 system.bashrc $pkgdir/etc/bash.bashrc + install -Dm644 system.bash_logout $pkgdir/etc/bash.bash_logout + + # User + install -dm755 $pkgdir/etc/skel/ + install -m644 dot.bashrc $pkgdir/etc/skel/.bashrc + install -m644 dot.bash_profile $pkgdir/etc/skel/.bash_profile + install -m644 dot.bash_logout $pkgdir/etc/skel/.bash_logout +} diff --git a/x86_64/core/bash/dot.bash_logout b/x86_64/core/bash/dot.bash_logout new file mode 100644 index 0000000..0e4e4f1 --- /dev/null +++ b/x86_64/core/bash/dot.bash_logout @@ -0,0 +1,3 @@ +# +# ~/.bash_logout +# diff --git a/x86_64/core/bash/dot.bash_profile b/x86_64/core/bash/dot.bash_profile new file mode 100644 index 0000000..5545f00 --- /dev/null +++ b/x86_64/core/bash/dot.bash_profile @@ -0,0 +1,5 @@ +# +# ~/.bash_profile +# + +[[ -f ~/.bashrc ]] && . ~/.bashrc diff --git a/x86_64/core/bash/dot.bashrc b/x86_64/core/bash/dot.bashrc new file mode 100644 index 0000000..0dc9563 --- /dev/null +++ b/x86_64/core/bash/dot.bashrc @@ -0,0 +1,22 @@ +# +# /etc/bash.bashrc +# + +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +[[ $DISPLAY ]] && shopt -s checkwinsize + +PS1='\[\e[1;32m\]\u [ \[\e[0m\]\w\[\e[1;32m\] ]$ \[\e[0m\]' + +case ${TERM} in + xterm*|rxvt*|Eterm|aterm|kterm|gnome*) + PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"' + + ;; + screen*) + PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033_%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"' + ;; +esac + +[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion diff --git a/x86_64/core/bash/system.bash_logout b/x86_64/core/bash/system.bash_logout new file mode 100644 index 0000000..a76e48e --- /dev/null +++ b/x86_64/core/bash/system.bash_logout @@ -0,0 +1,3 @@ +# +# /etc/bash.bash_logout +# diff --git a/x86_64/core/bash/system.bashrc b/x86_64/core/bash/system.bashrc new file mode 100644 index 0000000..0dc9563 --- /dev/null +++ b/x86_64/core/bash/system.bashrc @@ -0,0 +1,22 @@ +# +# /etc/bash.bashrc +# + +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +[[ $DISPLAY ]] && shopt -s checkwinsize + +PS1='\[\e[1;32m\]\u [ \[\e[0m\]\w\[\e[1;32m\] ]$ \[\e[0m\]' + +case ${TERM} in + xterm*|rxvt*|Eterm|aterm|kterm|gnome*) + PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"' + + ;; + screen*) + PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033_%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"' + ;; +esac + +[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion diff --git a/x86_64/core/binutils/PKGBUILD b/x86_64/core/binutils/PKGBUILD new file mode 100644 index 0000000..97aba33 --- /dev/null +++ b/x86_64/core/binutils/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=binutils +pkgver=2.38 +pkgrel=1 +arch=('x86_64') +depends=(glibc zlib readline elfutils flex) +makedepends=(bc git) +source=(https://ftp.gnu.org/gnu/binutils/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + mkdir -vp build + cd build + + ../configure \ + --prefix=/usr \ + --enable-gold \ + --enable-ld=default \ + --enable-plugins \ + --enable-shared \ + --enable-gold \ + --enable-targets=all \ + --with-pic \ + --disable-werror \ + --enable-64-bit-bfd \ + --with-system-zlib \ + --enable-multilib \ + --with-lib-path=/usr/lib:/lib:/usr/lib32 + + make tooldir=/usr +} + +package() { + cd $pkgname-$pkgver/build + + make tooldir=/usr DESTDIR=$pkgdir install -j1 +} diff --git a/x86_64/core/bottle/PKGBUILD b/x86_64/core/bottle/PKGBUILD new file mode 100644 index 0000000..eac7e6c --- /dev/null +++ b/x86_64/core/bottle/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=bottle +pkgver=2022.3 +pkgrel=3 +arch=('x86_64') +depends=(zstd bash glibc libarchive curl gpgme libassuan) +commitid=21769caf0e603d8d90ba2506bdf582361b7182f5 +replaces=(pacman) +source=(git+https://git.it-kuny.ch/drunk/source-code/bottle#commit=$commitid) + +build() { + cd $pkgname + + meson \ + --prefix=/usr \ + -D doxygen=enabled \ + -D scriptlet-shell=/bin/bash \ + -D ldconfig=/usr/bin/ldconfig \ + build + + ninja -C build +} + +package() { + cd $pkgname + + mkdir -vp $pkgdir + export DESTDIR=$pkgdir/ + + ninja -C build install + + # copy our own bottle.conf that has proper server list + cp -f ../../bottle.conf $pkgdir/etc/bottle.conf + mkdir -p $pkgdir/etc/bottle.d + touch $pkgdir/etc/bottle.d/mirrorlist +} diff --git a/x86_64/core/bottle/bottle.conf b/x86_64/core/bottle/bottle.conf new file mode 100644 index 0000000..9419b49 --- /dev/null +++ b/x86_64/core/bottle/bottle.conf @@ -0,0 +1,135 @@ +# +# /etc/bottle.conf +# +# See the bottle.conf(5) manpage for option and repository directives + +# +# GENERAL OPTIONS +# +[options] +# The following paths are commented out with their default values listed. +# If you wish to use different paths, uncomment and update the paths. +#RootDir = / +#DBPath = /var/lib/bottle/ +#CacheDir = /var/cache/bottle/pkg/ +#LogFile = /var/log/bottle.log +#GPGDir = /etc/bottle.d/gnupg/ +#HookDir = /etc/bottle.d/hooks/ +HoldPkg = bottle glibc +#XferCommand = /usr/bin/curl -L -C - -f -o %o %u +#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u +#CleanMethod = KeepInstalled +Architecture = auto + +# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup +#IgnorePkg = +#IgnoreGroup = + +#NoUpgrade = +#NoExtract = + +# Misc options +#UseSyslog +Color +#NoProgressBar +CheckSpace +#VerbosePkgLists +ParallelDownloads = 2 + +# PGP signature checking +#SigLevel = Optional +#LocalFileSigLevel = Optional +#RemoteFileSigLevel = Optional + +# +# REPOSITORIES +# - can be defined here or included from another file +# - bottle will search repositories in the order defined here +# - local/custom mirrors can be added here or in separate files +# - repositories listed first will take precedence when packages +# have identical names, regardless of version number +# - URLs will have $repo replaced by the name of the current repo +# - URLs will have $arch replaced by the name of the architecture +# +# Repository entries are of the format: +# [repo-name] +# Server = ServerName +# Include = IncludePath +# +# The header [repo-name] is crucial - it must be present and +# uncommented to enable the repo. +# + +# An example of a disabled remote package repository with multiple servers +# available. To enable, uncomment the following lines. You can add preferred +# servers immediately after the header and they will be used before the +# default mirrors. + +# +# Drunk - needed repos to work properly +# + +[core] +Server = https://git.it-kuny.ch/drunk/repository/$arch/$repo/-/raw/main/packages/ + +[extra] +Server = https://git.it-kuny.ch/drunk/repository/$arch/$repo/-/raw/main/packages/ + +# Needed as glibc depends on it for mulitlib support +[extra32] +Server = https://git.it-kuny.ch/drunk/repository/$arch/$repo/-/raw/main/packages/ + +# +# Drunk - other repos that can be enabled/disabled manually ( though its not suggested ) +# + +# Includes cross compiling tools +[cross_tools] +Server = https://git.it-kuny.ch/drunk/repository/$arch/cross_tools/-/raw/main/packages/ + +# Open source games that are non-proprietary +[games] +Server = https://git.it-kuny.ch/drunk/repository/$arch/$repo/-/raw/main/packages/ + +# Example being wine and darling +[layers] +Server = https://git.it-kuny.ch/drunk/repository/$arch/$repo/-/raw/main/packages/ + +# Example steam +[proprietary] +Server = https://git.it-kuny.ch/drunk/repository/$arch/$repo/-/raw/main/packages/ + +# Example httpd also known as apache +[server] +Server = https://git.it-kuny.ch/drunk/repository/$arch/$repo/-/raw/main/packages/ + +# Example aircrack-ng +[pentest] +Server = https://git.it-kuny.ch/drunk/repository/$arch/$repo/-/raw/main/packages/ + +# For perl modules +[perl] +Server = https://git.it-kuny.ch/drunk/repository/$arch/$repo/-/raw/main/packages/ + +# For python modules +[python] +Server = https://git.it-kuny.ch/drunk/repository/$arch/$repo/-/raw/main/packages/ + +# +# Here are Drunk desktop env's that are separated to keep everything clean and shiny +# Also enabled by default as of thyere libs usage in extra repo + +[gnome] +Server = https://git.it-kuny.ch/drunk/repository/$arch/$repo/-/raw/main/packages/ + +[kde] +Server = https://git.it-kuny.ch/drunk/repository/$arch/$repo/-/raw/main/packages/ + +[xfce] +Server = https://git.it-kuny.ch/drunk/repository/$arch/$repo/-/raw/main/packages/ + +# An example of a custom package repository. See the bottle manpage for +# tips on creating your own repositories. +#[custom] +#SigLevel = Optional TrustAll +#Server = file:///home/custompkgs diff --git a/x86_64/core/bzip2/PKGBUILD b/x86_64/core/bzip2/PKGBUILD new file mode 100644 index 0000000..cdf1d19 --- /dev/null +++ b/x86_64/core/bzip2/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=bzip2 +pkgver=1.0.8 +pkgrel=2 +arch=('x86_64') +depends=(glibc) +source=(https://www.sourceware.org/pub/bzip2/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile + sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile + + # use our optimization + [[ -n ${CFLAGS} ]] && sed -i "s|-O2|${CFLAGS}|g" Makefile + [[ -n ${CFLAGS} ]] && sed -i "s|-O2|${CFLAGS}|g" Makefile-libbz2_so + + make -f Makefile-libbz2_so + make clean + make +} + +package() { + cd $pkgname-$pkgver + + make PREFIX=$pkgdir/usr install + + mkdir -pv $pkgdir/{bin,lib,usr/lib} + + cp -v bzip2-shared $pkgdir/bin/bzip2 + cp -av libbz2.so* $pkgdir/lib + ln -sv ../../lib/libbz2.so.1.0 $pkgdir/usr/lib/libbz2.so + rm -v $pkgdir/usr/bin/{bunzip2,bzcat,bzip2} + ln -sv bzip2 $pkgdir/bin/bunzip2 + ln -sv bzip2 $pkgdir/bin/bzcat +} diff --git a/x86_64/core/ca-certificates/PKGBUILD b/x86_64/core/ca-certificates/PKGBUILD new file mode 100644 index 0000000..557312b --- /dev/null +++ b/x86_64/core/ca-certificates/PKGBUILD @@ -0,0 +1,11 @@ +pkgname=ca-certificates +pkgver=20220719 +pkgrel=1 +arch=('x86_64') +source=(cacert.pem::https://curl.se/ca/cacert-2022-07-19.pem) + +package() { + install -Dm644 $pkgdir/../../cacert.pem $pkgdir/etc/ssl/cert.pem + install -Dm644 $pkgdir/../../cacert.pem $pkgdir/etc/ssl/ca-bundle.pem + install -Dm644 $pkgdir/../../cacert.pem $pkgdir/etc/ssl/certs/ca-certificates.crt +} diff --git a/x86_64/core/ca-certificates/cacert.pem b/x86_64/core/ca-certificates/cacert.pem new file mode 100644 index 0000000..5dbd0af --- /dev/null +++ b/x86_64/core/ca-certificates/cacert.pem @@ -0,0 +1,3281 @@ +## +## Bundle of CA Root Certificates +## +## Certificate data from Mozilla as of: Tue Mar 29 03:12:05 2022 GMT +## +## This is a bundle of X.509 certificates of public Certificate Authorities +## (CA). These were automatically extracted from Mozilla's root certificates +## file (certdata.txt). This file can be found in the mozilla source tree: +## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt +## +## It contains the certificates in PEM format and therefore +## can be directly used with curl / libcurl / php_curl, or with +## an Apache+mod_ssl webserver for SSL client authentication. +## Just configure this file as the SSLCACertificateFile. +## +## Conversion done with mk-ca-bundle.pl version 1.29. +## SHA256: d59c5c83ce7a7635fa95521d8d245677949b86d5574bfcc6f855b6a48f2d5566 +## + + +GlobalSign Root CA +================== +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx +GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds +b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD +VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa +DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc +THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb +Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP +c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX +gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF +AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj +Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG +j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH +hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC +X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +Entrust.net Premium 2048 Secure Server CA +========================================= +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u +ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp +bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV +BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx +NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 +d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl +MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u +ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL +Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr +hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW +nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi +VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ +KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy +T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT +J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e +nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- + +Baltimore CyberTrust Root +========================= +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE +ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li +ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC +SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs +dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME +uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB +UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C +G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 +XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr +l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI +VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB +BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh +cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 +hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa +Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H +RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +Entrust Root Certification Authority +==================================== +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw +b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG +A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 +MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu +MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu +Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v +dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz +A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww +Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 +j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN +rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 +MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH +hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM +Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa +v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS +W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 +tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +Comodo AAA Services root +======================== +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw +MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl +c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV +BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG +C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs +i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW +Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH +Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK +Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f +BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl +cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz +LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm +7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z +8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C +12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +QuoVadis Root CA 2 +================== +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT +EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx +ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6 +XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk +lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB +lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy +lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt +66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn +wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh +D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy +BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie +J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud +DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU +a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv +Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 +UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm +VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK ++JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW +IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1 +WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X +f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II +4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8 +VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- + +QuoVadis Root CA 3 +================== +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT +EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx +OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg +DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij +KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K +DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv +BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp +p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8 +nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX +MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM +Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz +uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT +BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj +YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB +BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD +VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4 +ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE +AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV +qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s +hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z +POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2 +Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp +8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC +bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu +g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p +vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr +qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- + +Security Communication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw +8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM +DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX +5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd +DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 +JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g +0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a +mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ +s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ +6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi +FL39vmwLAw== +-----END CERTIFICATE----- + +XRamp Global CA Root +==================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE +BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj +dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx +HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg +U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu +IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx +foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE +zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs +AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry +xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap +oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC +AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc +/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n +nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz +8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +Go Daddy Class 2 CA +=================== +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY +VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG +A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g +RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD +ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv +2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 +qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j +YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY +vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O +BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o +atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu +MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG +A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim +PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt +I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI +Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b +vZ8= +-----END CERTIFICATE----- + +Starfield Class 2 CA +==================== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc +U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo +MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG +A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG +SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY +bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ +JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm +epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN +F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF +MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f +hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo +bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g +QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs +afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM +PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD +KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 +QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +DigiCert Assured ID Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx +MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO +9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy +UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW +/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy +oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf +GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF +66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq +hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc +EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn +SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i +8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +DigiCert Global Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw +MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn +TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 +BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H +4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y +7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB +o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm +8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF +BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr +EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt +tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 +UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +DigiCert High Assurance EV Root CA +================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw +KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw +MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ +MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu +Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t +Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS +OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 +MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ +NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe +h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB +Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY +JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ +V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp +myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK +mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K +-----END CERTIFICATE----- + +SwissSign Gold CA - G2 +====================== +-----BEGIN CERTIFICATE----- +MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw +EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN +MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp +c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq +t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C +jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg +vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF +ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR +AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend +jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO +peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR +7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi +GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64 +OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov +L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm +5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr +44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf +Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m +Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp +mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk +vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf +KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br +NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj +viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ +-----END CERTIFICATE----- + +SwissSign Silver CA - G2 +======================== +-----BEGIN CERTIFICATE----- +MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT +BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X +DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3 +aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG +9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644 +N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm ++/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH +6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu +MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h +qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5 +FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs +ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc +celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X +CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB +tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 +cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P +4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F +kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L +3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx +/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa +DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP +e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu +WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ +DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub +DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u +-----END CERTIFICATE----- + +SecureTrust CA +============== +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy +dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe +BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX +OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t +DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH +GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b +01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH +ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj +aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu +SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf +mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ +nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +Secure Global CA +================ +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH +bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg +MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx +YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ +bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g +8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV +HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi +0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn +oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA +MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ +OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn +CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 +3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +COMODO Certification Authority +============================== +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb +MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD +T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH ++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww +xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV +4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA +1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI +rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k +b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC +AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP +OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc +IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN ++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== +-----END CERTIFICATE----- + +Network Solutions Certificate Authority +======================================= +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG +EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr +IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx +MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx +jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT +aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT +crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc +/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB +AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv +bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA +A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q +4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ +GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD +ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +COMODO ECC Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix +GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X +4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni +wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG +FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA +U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +Certigna +======== +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw +EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 +MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI +Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q +XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH +GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p +ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg +DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf +Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ +tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ +BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J +SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA +hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ +ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu +PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY +1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +ePKI Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx +MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq +MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs +IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi +lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv +qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX +12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O +WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ +ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao +lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ +vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi +Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi +MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 +1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq +KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV +xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP +NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r +GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE +xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx +gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy +sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD +BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +certSIGN ROOT CA +================ +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD +VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa +Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE +CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I +JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH +rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 +ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD +0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 +AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B +Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB +AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 +SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 +x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt +vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz +TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +NetLock Arany (Class Gold) Főtanúsítvány +======================================== +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G +A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 +dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB +cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx +MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO +ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 +c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu +0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw +/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk +H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw +fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 +neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW +qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta +YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna +NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu +dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +Hongkong Post Root CA 1 +======================= +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT +DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx +NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n +IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 +ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr +auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh +qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY +V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV +HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i +h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio +l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei +IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps +T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT +c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== +-----END CERTIFICATE----- + +SecureSign RootCA11 +=================== +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi +SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS +b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw +KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 +cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL +TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO +wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq +g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP +O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA +bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX +t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh +OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r +bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ +Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 +y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 +lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER +MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv +c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE +BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt +U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA +fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG +0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA +pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm +1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC +AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf +QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE +FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o +lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX +I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 +yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi +LXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +GlobalSign Root CA - R3 +======================= +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt +iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ +0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 +rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl +OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 +xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 +lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 +EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E +bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 +YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r +kpeDMdmztcpHWD9f +-----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud +EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH +DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA +bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx +ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx +51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk +R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP +T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f +Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl +osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR +crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR +saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD +KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi +6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +Izenpe.com +========== +-----BEGIN CERTIFICATE----- +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG +EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz +MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu +QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ +03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK +ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU ++zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC +PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT +OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK +F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK +0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ +0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB +leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID +AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ +SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG +NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l +Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga +kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q +hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs +g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 +aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 +nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC +ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo +Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z +WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +-----END CERTIFICATE----- + +Go Daddy Root Certificate Authority - G2 +======================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu +MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G +A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq +9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD ++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd +fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl +NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 +BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac +vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r +5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV +N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 +-----END CERTIFICATE----- + +Starfield Root Certificate Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 +eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw +DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg +VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB +dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv +W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs +bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk +N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf +ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU +JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol +TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx +4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw +F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ +c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +Starfield Services Root Certificate Authority - G2 +================================================== +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl +IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT +dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 +h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa +hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP +LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB +rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG +SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP +E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy +xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza +YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 +-----END CERTIFICATE----- + +AffirmTrust Commercial +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw +MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb +DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV +C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 +BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww +MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV +HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG +hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi +qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv +0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh +sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +AffirmTrust Networking +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw +MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE +Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI +dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 +/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb +h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV +HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu +UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 +12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 +WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 +/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +AffirmTrust Premium +=================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy +OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy +dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn +BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV +5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs ++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd +GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R +p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI +S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 +6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 +/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo ++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv +MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC +6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S +L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK ++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV +BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg +IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 +g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb +zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== +-----END CERTIFICATE----- + +AffirmTrust Premium ECC +======================= +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV +BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx +MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U +cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ +N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW +BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X +57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM +eQ== +-----END CERTIFICATE----- + +Certum Trusted Network CA +========================= +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK +ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy +MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU +ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC +l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J +J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 +fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 +cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB +Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw +DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj +jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 +mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj +Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +TWCA Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ +VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG +EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB +IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx +QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC +oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP +4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r +y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG +9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC +mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW +QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY +T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny +Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +Security Communication RootCA2 +============================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC +SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy +aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ ++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R +3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV +spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K +EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 +QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB +CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj +u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk +3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q +tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 +mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2011 +======================================================= +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT +O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y +aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT +AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo +IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI +1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa +71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u +8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH +3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ +MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 +MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu +b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt +XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD +/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N +7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +Actalis Authentication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM +BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE +AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky +MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz +IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ +wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa +by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 +zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f +YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 +oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l +EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 +hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 +EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 +jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY +iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI +WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 +JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx +K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ +Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC +4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo +2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz +lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem +OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 +vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +Buypass Class 2 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X +DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 +g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn +9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b +/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU +CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff +awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI +zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn +Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX +Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs +M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI +osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S +aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd +DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD +LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 +oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC +wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS +CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN +rJgWVqA= +-----END CERTIFICATE----- + +Buypass Class 3 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X +DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH +sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR +5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh +7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ +ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH +2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV +/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ +RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA +Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq +j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G +uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG +Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 +ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 +KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz +6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug +UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe +eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi +Cp/HuZc= +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 3 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx +MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK +9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU +NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF +iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W +0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr +AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb +fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT +ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h +P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe +Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE +LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD +ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA +BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv +KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z +p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC +AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ +4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y +eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw +MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G +PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw +OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm +2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV +dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph +X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 EV 2009 +================================= +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS +egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh +zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T +7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 +sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 +11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv +cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v +ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El +MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp +b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh +c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ +PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX +ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA +NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv +w9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +CA Disig Root R2 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC +w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia +xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 +A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S +GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV +g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa +5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE +koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A +Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i +Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u +Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV +sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je +dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 +1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx +mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 +utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 +sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg +UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV +7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +ACCVRAIZ1 +========= +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB +SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 +MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH +UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM +jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 +RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD +aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ +0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG +WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 +8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR +5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J +9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK +Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw +Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu +Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM +Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA +QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh +AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA +YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj +AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA +IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk +aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 +dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 +MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI +hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E +R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN +YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 +nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ +TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 +sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg +Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd +3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p +EfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +TWCA Global Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT +CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD +QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK +EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg +Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C +nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV +r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR +Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV +tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W +KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 +sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p +yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn +kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI +zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g +cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M +8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg +/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg +lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP +A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m +i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 +EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 +zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= +-----END CERTIFICATE----- + +TeliaSonera Root CA v1 +====================== +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE +CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 +MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW +VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ +6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA +3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k +B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn +Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH +oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 +F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ +oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 +gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc +TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB +AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW +DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm +zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW +pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV +G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc +c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT +JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 +qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 +Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems +WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +E-Tugra Certification Authority +=============================== +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w +DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls +ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw +NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx +QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl +cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD +DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd +hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K +CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g +ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ +BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 +E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz +rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq +jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 +dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB +/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG +MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK +kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO +XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 +VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo +a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc +dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV +KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT +Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 +8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G +C7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 2 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx +MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ +SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F +vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 +2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV +WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy +YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 +r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf +vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR +3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== +-----END CERTIFICATE----- + +Atos TrustedRoot 2011 +===================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU +cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 +MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG +A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV +hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr +54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ +DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 +HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR +z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R +l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ +bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h +k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh +TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 +61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G +3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +QuoVadis Root CA 1 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE +PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm +PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 +Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN +ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l +g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV +7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX +9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f +iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg +t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI +hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 +GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct +Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP ++V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh +3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa +wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 +O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 +FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV +hMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +QuoVadis Root CA 2 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh +ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY +NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t +oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o +MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l +V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo +L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ +sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD +6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh +lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI +hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K +pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 +x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz +dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X +U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw +mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD +zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN +JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr +O3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +QuoVadis Root CA 3 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 +IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL +Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe +6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 +I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U +VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 +5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi +Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM +dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt +rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI +hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS +t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ +TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du +DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib +Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD +hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX +0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW +dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 +PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +DigiCert Assured ID Root G2 +=========================== +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw +MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH +35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq +bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw +VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP +YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn +lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO +w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv +0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz +d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW +hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M +jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +DigiCert Assured ID Root G3 +=========================== +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD +VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ +BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb +RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs +KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF +UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy +YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy +1vUhZscv6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +DigiCert Global Root G2 +======================= +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx +MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ +kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO +3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV +BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM +UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB +o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu +5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr +F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U +WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH +QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ +iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +DigiCert Global Root G3 +======================= +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD +VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw +MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k +aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C +AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O +YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp +Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y +3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 +VOKa5Vt8sycX +-----END CERTIFICATE----- + +DigiCert Trusted Root G4 +======================== +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o +k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa +vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY +QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 +MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm +mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 +f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH +dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 +oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY +ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr +yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy +7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah +ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN +5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb +/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa +5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK +G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP +82Z+ +-----END CERTIFICATE----- + +COMODO RSA Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwHhcNMTAwMTE5MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0Rn +dJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZ +FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+ +5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pG +x8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z+pUX +2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQL +OvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3 +sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+C +GCe01a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5 +WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w +DQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvlwFTPoCWOAvn9sKIN9SCYPBMt +rFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+ +nq6PK7o9mfjYcwlYRm6mnPTXJ9OV2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSg +tZx8jb8uk2IntznaFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwW +sRqZCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiKboHGhfKp +pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA +zMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yLS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHq +ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52 +7RH89elWsn2/x20Kk4yl0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7I +LaZRfyHBNVOFBkpdn627G190 +-----END CERTIFICATE----- + +USERTrust RSA Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK +ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK +ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCAEmUXNg7D2wiz +0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2j +Y0K2dvKpOyuR+OJv0OwWIJAJPuLodMkYtJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFn +RghRy4YUVD+8M/5+bJz/Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O ++T23LLb2VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT79uq +/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6c0Plfg6lZrEpfDKE +Y1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmTYo61Zs8liM2EuLE/pDkP2QKe6xJM +lXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97lc6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8 +yexDJtC/QV9AqURE9JnnV4eeUB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+ +eLf8ZxXhyVeEHg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd +BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPFUp/L+M+ZBn8b2kMVn54CVVeW +FPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KOVWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ +7l8wXEskEVX/JJpuXior7gtNn3/3ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQ +Eg9zKC7F4iRO/Fjs8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM +8WcRiQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYzeSf7dNXGi +FSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZXHlKYC6SQK5MNyosycdi +yA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9c +J2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRBVXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGw +sAvgnEzDHNb842m1R0aBL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gx +Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +USERTrust ECC Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 +0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez +nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV +HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB +HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu +9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R5 +=========================== +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 +SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS +h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx +uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 +yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +Staat der Nederlanden EV Root CA +================================ +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M +MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl +cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk +SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW +O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r +0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 +Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV +XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr +08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV +0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd +74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx +fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa +ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu +c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq +5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN +b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN +f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi +5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 +WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK +DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy +eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== +-----END CERTIFICATE----- + +IdenTrust Commercial Root CA 1 +============================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS +b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES +MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB +IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld +hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ +mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi +1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C +XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl +3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy +NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV +WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg +xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix +uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI +hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg +ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt +ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV +YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX +feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro +kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe +2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz +Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R +cGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +IdenTrust Public Sector Root CA 1 +================================= +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv +ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV +UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS +b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy +P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 +Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI +rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf +qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS +mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn +ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh +LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v +iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL +4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B +Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw +DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A +mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt +GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt +m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx +NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 +Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI +ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC +ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ +3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +Entrust Root Certification Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy +bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug +b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw +HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT +DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx +OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP +/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz +HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU +s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y +TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx +AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 +0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z +iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi +nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ +vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO +e4pIb4tF9g== +-----END CERTIFICATE----- + +Entrust Root Certification Authority - EC1 +========================================== +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx +FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn +YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw +FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs +LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg +dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy +AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef +9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h +vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 +kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +CFCA EV ROOT +============ +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE +CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB +IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw +MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD +DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV +BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD +7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN +uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW +ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 +xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f +py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K +gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol +hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ +tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf +BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q +ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua +4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG +E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX +BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn +aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy +PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX +kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C +ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GB CA +=============================== +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG +EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw +MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds +b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX +scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP +rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk +9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o +Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg +GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI +hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD +dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0 +VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui +HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +SZAFIR ROOT CA2 +=============== +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG +A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV +BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ +BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD +VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q +qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK +DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE +2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ +ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi +ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P +AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC +AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5 +O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67 +oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul +4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6 ++/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- + +Certum Trusted Network CA 2 +=========================== +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE +BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1 +bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y +ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ +TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB +IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9 +7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o +CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b +Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p +uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130 +GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ +9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB +Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye +hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM +BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI +hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW +Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA +L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo +clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM +pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb +w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo +J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm +ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX +is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7 +zAYspsbiDrW5viSP +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2015 +======================================================= +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT +BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0 +aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl +YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx +MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg +QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV +BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw +MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv +bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh +iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+ +6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd +FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr +i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F +GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2 +fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu +iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI +hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+ +D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM +d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y +d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn +82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb +davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F +Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt +J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa +JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q +p/UsQu0yrbYhnr68 +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions ECC RootCA 2015 +=========================================================== +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0 +aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u +cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj +aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw +MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj +IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD +VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290 +Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP +dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK +Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA +GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn +dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- + +ISRG Root X1 +============ +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE +BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD +EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG +EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT +DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r +Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1 +3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K +b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN +Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ +4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf +1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu +hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH +usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r +OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G +A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY +9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV +0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt +hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw +TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx +e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA +JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD +YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n +JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ +m+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- + +AC RAIZ FNMT-RCM +================ +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT +AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw +MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD +TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf +qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr +btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL +j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou +08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw +WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT +tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ +47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC +ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa +i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o +dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s +D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ +j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT +Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW ++YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 +Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d +8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm +5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG +rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + +Amazon Root CA 1 +================ +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD +VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1 +MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv +bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH +FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ +gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t +dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce +VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3 +DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM +CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy +8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa +2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2 +xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- + +Amazon Root CA 2 +================ +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD +VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1 +MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv +bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4 +kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp +N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9 +AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd +fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx +kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS +btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0 +Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN +c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+ +3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw +DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA +A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE +YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW +xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ +gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW +aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV +Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3 +KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi +JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw= +-----END CERTIFICATE----- + +Amazon Root CA 3 +================ +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG +EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy +NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ +MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB +f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr +Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43 +rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc +eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw== +-----END CERTIFICATE----- + +Amazon Root CA 4 +================ +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG +EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy +NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ +MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN +/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri +83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA +MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1 +AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- + +TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 +============================================= +-----BEGIN CERTIFICATE----- +MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT +D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr +IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g +TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp +ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD +VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt +c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth +bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11 +IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8 +6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc +wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0 +3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9 +WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU +ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ +KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh +AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc +lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R +e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j +q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= +-----END CERTIFICATE----- + +GDCA TrustAUTH R5 ROOT +====================== +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCQ04xMjAw +BgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8wHQYDVQQD +DBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVow +YjELMAkGA1UEBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJjDp6L3TQs +AlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBjTnnEt1u9ol2x8kECK62p +OqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+uKU49tm7srsHwJ5uu4/Ts765/94Y9cnrr +pftZTqfrlYwiOXnhLQiPzLyRuEH3FMEjqcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ +9Cy5WmYqsBebnh52nUpmMUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQ +xXABZG12ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloPzgsM +R6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3GkL30SgLdTMEZeS1SZ +D2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeCjGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4 +oR24qoAATILnsn8JuLwwoC8N9VKejveSswoAHQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx +9hoh49pwBiFYFIeFd3mqgnkCAwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlR +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZmDRd9FBUb1Ov9 +H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5COmSdI31R9KrO9b7eGZONn35 +6ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ryL3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd ++PwyvzeG5LuOmCd+uh8W4XAR8gPfJWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQ +HtZa37dG/OaG+svgIHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBD +F8Io2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV09tL7ECQ +8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQXR4EzzffHqhmsYzmIGrv +/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrqT8p+ck0LcIymSLumoRT2+1hEmRSuqguT +aaApJUqlyyvdimYHFngVV3Eb7PVHhPOeMTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- + +TrustCor RootCert CA-1 +====================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP +MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig +U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx +MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu +YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe +VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy +dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq +jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4 +pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0 +JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h +gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw +/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j +BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5 +mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf +ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C +qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P +3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk= +-----END CERTIFICATE----- + +TrustCor RootCert CA-2 +====================== +-----BEGIN CERTIFICATE----- +MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNVBAYTAlBBMQ8w +DQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBT +eXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0 +eTEfMB0GA1UEAwwWVHJ1c3RDb3IgUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEy +MzExNzI2MzlaMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5h +bWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0 +IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnIG7CKqJiJJWQdsg4foDSq8Gb +ZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9Nk +RvRUqdw6VC0xK5mC8tkq1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1 +oYxOdqHp2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nKDOOb +XUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hapeaz6LMvYHL1cEksr1 +/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF3wP+TfSvPd9cW436cOGlfifHhi5q +jxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQP +eSghYA2FFn3XVDjxklb9tTNMg9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+Ctg +rKAmrhQhJ8Z3mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh +8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAdBgNVHQ4EFgQU +2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6UnrybPZx9mCAZ5YwwYrIwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/h +Osh80QA9z+LqBrWyOrsGS2h60COXdKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnp +kpfbsEZC89NiqpX+MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv +2wnL/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RXCI/hOWB3 +S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYaZH9bDTMJBzN7Bj8RpFxw +PIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dv +DDqPys/cA8GiCcjl/YBeyGBCARsaU1q7N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYU +RpFHmygk71dSTlxCnKr3Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANE +xdqtvArBAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp5KeX +RKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu1uwJ +-----END CERTIFICATE----- + +TrustCor ECA-1 +============== +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP +MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig +U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw +N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5 +MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y +IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR +MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23 +xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc +p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+ +fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj +YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL +f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF +AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u +/ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F +hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs +J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC +jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g== +-----END CERTIFICATE----- + +SSL.com Root Certification Authority RSA +======================================== +-----BEGIN CERTIFICATE----- +MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxDjAM +BgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24x +MTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYw +MjEyMTczOTM5WhcNNDEwMjEyMTczOTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx +EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NM +LmNvbSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2RxFdHaxh3a3by/ZPkPQ/C +Fp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aXqhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8 +P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcCC52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/ge +oeOy3ZExqysdBP+lSgQ36YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkp +k8zruFvh/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrFYD3Z +fBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93EJNyAKoFBbZQ+yODJ +gUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVcUS4cK38acijnALXRdMbX5J+tB5O2 +UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi8 +1xtZPCvM8hnIk2snYxnP/Okm+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4s +bE6x/c+cCbqiM+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGVcpNxJK1ok1iOMq8bs3AD/CUr +dIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBcHadm47GUBwwyOabqG7B52B2ccETjit3E+ZUf +ijhDPwGFpUenPUayvOUiaPd7nNgsPgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAsl +u1OJD7OAUN5F7kR/q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjq +erQ0cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jra6x+3uxj +MxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90IH37hVZkLId6Tngr75qNJ +vTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/YK9f1JmzJBjSWFupwWRoyeXkLtoh/D1JI +Pb9s2KJELtFOt3JY04kTlf5Eq/jXixtunLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406y +wKBjYZC6VWg3dGq2ktufoYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NI +WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- + +SSL.com Root Certification Authority ECC +======================================== +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV +BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv +BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy +MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO +BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA +BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+ +8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR +hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT +jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW +e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z +5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- + +SSL.com EV Root Certification Authority RSA R2 +============================================== +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w +DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u +MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD +VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh +hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w +cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO +Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+ +B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh +CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim +9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto +RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm +JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48 ++qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp +qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1 +++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx +Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G +guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz +OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7 +CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq +lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR +rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1 +hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX +9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- + +SSL.com EV Root Certification Authority ECC +=========================================== +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV +BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy +BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw +MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx +EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM +LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy +3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O +BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe +5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ +N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm +m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- + +GlobalSign Root CA - R6 +======================= +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEgMB4GA1UECxMX +R2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds +b2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQxMjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9i +YWxTaWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFs +U2lnbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQss +grRIxutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1kZguSgMpE +3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxDaNc9PIrFsmbVkJq3MQbF +vuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJwLnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqM +PKq0pPbzlUoSB239jLKJz9CgYXfIWHSw1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+ +azayOeSsJDa38O+2HBNXk7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05O +WgtH8wY2SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/hbguy +CLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4nWUx2OVvq+aWh2IMP +0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpYrZxCRXluDocZXFSxZba/jJvcE+kN +b7gu3GduyYsRtYQUigAZcIN5kZeR1BonvzceMgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQE +AwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNV +HSMEGDAWgBSubAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN +nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGtIxg93eFyRJa0 +lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr6155wsTLxDKZmOMNOsIeDjHfrY +BzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLjvUYAGm0CuiVdjaExUd1URhxN25mW7xocBFym +Fe944Hn+Xds+qkxV/ZoVqW/hpvvfcDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr +3TsTjxKM4kEaSHpzoHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB1 +0jZpnOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfspA9MRf/T +uTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+vJJUEeKgDu+6B5dpffItK +oZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+t +JDfLRVpOoERIyNiwmcUVhAn21klJwGW45hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GC CA +=============================== +-----BEGIN CERTIFICATE----- +MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQswCQYDVQQGEwJD +SDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEo +MCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRa +Fw00MjA1MDkwOTU4MzNaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQL +ExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh +bCBSb290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4nieUqjFqdr +VCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4Wp2OQ0jnUsYd4XxiWD1Ab +NTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7TrYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0E +AwMDaAAwZQIwJsdpW9zV57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtk +AjEA2zQgMgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 +-----END CERTIFICATE----- + +UCA Global G2 Root +================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9MQswCQYDVQQG +EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBHbG9iYWwgRzIgUm9vdDAeFw0x +NjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0xCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlU +cnVzdDEbMBkGA1UEAwwSVUNBIEdsb2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxeYrb3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmT +oni9kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzmVHqUwCoV +8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/RVogvGjqNO7uCEeBHANBS +h6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDcC/Vkw85DvG1xudLeJ1uK6NjGruFZfc8o +LTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIjtm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/ +R+zvWr9LesGtOxdQXGLYD0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBe +KW4bHAyvj5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6DlNaBa +4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6iIis7nCs+dwp4wwc +OxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznPO6Q0ibd5Ei9Hxeepl2n8pndntd97 +8XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFIHEjMz15DD/pQwIX4wVZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo +5sOASD0Ee/ojL3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 +1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl1qnN3e92mI0A +Ds0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oUb3n09tDh05S60FdRvScFDcH9 +yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LVPtateJLbXDzz2K36uGt/xDYotgIVilQsnLAX +c47QN6MUPJiVAAwpBVueSUmxX8fjy88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHo +jhJi6IjMtX9Gl8CbEGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZk +bxqgDMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI+Vg7RE+x +ygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGyYiGqhkCyLmTTX8jjfhFn +RR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bXUB+K+wb1whnw0A== +-----END CERTIFICATE----- + +UCA Extended Validation Root +============================ +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQG +EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9u +IFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMxMDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8G +A1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrs +iWogD4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvSsPGP2KxF +Rv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aopO2z6+I9tTcg1367r3CTu +eUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dksHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR +59mzLC52LqGj3n5qiAno8geK+LLNEOfic0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH +0mK1lTnj8/FtDw5lhIpjVMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KR +el7sFsLzKuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/TuDv +B0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41Gsx2VYVdWf6/wFlth +WG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs1+lvK9JKBZP8nm9rZ/+I8U6laUpS +NwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQDfwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS +3H5aBZ8eNJr34RQwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQEL +BQADggIBADaNl8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR +ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQVBcZEhrxH9cM +aVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5c6sq1WnIeJEmMX3ixzDx/BR4 +dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb ++7lsq+KePRXBOy5nAliRn+/4Qh8st2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOW +F3sGPjLtx7dCvHaj2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwi +GpWOvpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2CxR9GUeOc +GMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmxcmtpzyKEC2IPrNkZAJSi +djzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbMfjKaiJUINlK73nZfdklJrX+9ZSCyycEr +dhh2n1ax +-----END CERTIFICATE----- + +Certigna Root CA +================ +-----BEGIN CERTIFICATE----- +MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAwWjELMAkGA1UE +BhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAwMiA0ODE0NjMwODEwMDAzNjEZ +MBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0xMzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjda +MFoxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYz +MDgxMDAwMzYxGTAXBgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sOty3tRQgX +stmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9MCiBtnyN6tMbaLOQdLNyz +KNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPuI9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8 +JXrJhFwLrN1CTivngqIkicuQstDuI7pmTLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16 +XdG+RCYyKfHx9WzMfgIhC59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq +4NYKpkDfePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3YzIoej +wpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWTCo/1VTp2lc5ZmIoJ +lXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1kJWumIWmbat10TWuXekG9qxf5kBdI +jzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp/ +/TBt2dzhauH8XwIDAQABo4IBGjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw +HQYDVR0OBBYEFBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of +1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczovL3d3d3cuY2Vy +dGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilodHRwOi8vY3JsLmNlcnRpZ25h +LmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYraHR0cDovL2NybC5kaGlteW90aXMuY29tL2Nl +cnRpZ25hcm9vdGNhLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOIt +OoldaDgvUSILSo3L6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxP +TGRGHVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH60BGM+RFq +7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncBlA2c5uk5jR+mUYyZDDl3 +4bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdio2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd +8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS +6Cvu5zHbugRqh5jnxV/vfaci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaY +tlu3zM63Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayhjWZS +aX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw3kAP+HwV96LOPNde +E4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= +-----END CERTIFICATE----- + +emSign Root CA - G1 +=================== +-----BEGIN CERTIFICATE----- +MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJJTjET +MBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRl +ZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBHMTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgx +ODMwMDBaMGcxCzAJBgNVBAYTAklOMRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVk +aHJhIFRlY2hub2xvZ2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQzf2N4aLTN +LnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO8oG0x5ZOrRkVUkr+PHB1 +cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aqd7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHW +DV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhMtTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ +6DqS0hdW5TUaQBw+jSztOd9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrH +hQIDAQABo0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQDAgEG +MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31xPaOfG1vR2vjTnGs2 +vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjMwiI/aTvFthUvozXGaCocV685743Q +NcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6dGNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q ++Mri/Tm3R7nrft8EI6/6nAYH6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeih +U80Bv2noWgbyRQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx +iN66zB+Afko= +-----END CERTIFICATE----- + +emSign ECC Root CA - G3 +======================= +-----BEGIN CERTIFICATE----- +MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQGEwJJTjETMBEG +A1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEg +MB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4 +MTgzMDAwWjBrMQswCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11 +ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g +RzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0WXTsuwYc +58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xySfvalY8L1X44uT6EYGQIr +MgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuBzhccLikenEhjQjAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+D +CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7 +jHvrZQnD+JbNR6iC8hZVdyR+EhCVBCyj +-----END CERTIFICATE----- + +emSign Root CA - C1 +=================== +-----BEGIN CERTIFICATE----- +MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx +EzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNp +Z24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UE +BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQD +ExNlbVNpZ24gUm9vdCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+up +ufGZBczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZHdPIWoU/ +Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH3DspVpNqs8FqOp099cGX +OFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvHGPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4V +I5b2P/AgNBbeCsbEBEV5f6f9vtKppa+cxSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleooms +lMuoaJuvimUnzYnu3Yy1aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+ +XJGFehiqTbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQAD +ggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87/kOXSTKZEhVb3xEp +/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4kqNPEjE2NuLe/gDEo2APJ62gsIq1 +NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrGYQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9 +wC68AivTxEDkigcxHpvOJpkT+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQ +BmIMMMAVSKeoWXzhriKi4gp6D/piq1JM4fHfyr6DDUI= +-----END CERTIFICATE----- + +emSign ECC Root CA - C3 +======================= +-----BEGIN CERTIFICATE----- +MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQGEwJVUzETMBEG +A1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMxIDAeBgNVBAMTF2VtU2lnbiBF +Q0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UE +BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQD +ExdlbVNpZ24gRUNDIFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd +6bciMK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4OjavtisIGJAnB9 +SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0OBBYEFPtaSNCAIEDyqOkA +B2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMDA2gA +MGUCMQC02C8Cif22TGK6Q04ThHK1rt0c3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwU +ZOR8loMRnLDRWmFLpg9J0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== +-----END CERTIFICATE----- + +Hongkong Post Root CA 3 +======================= +-----BEGIN CERTIFICATE----- +MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQELBQAwbzELMAkG +A1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJSG9uZyBLb25nMRYwFAYDVQQK +Ew1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25na29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2 +MDMwMjI5NDZaFw00MjA2MDMwMjI5NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtv +bmcxEjAQBgNVBAcTCUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMX +SG9uZ2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz +iNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFOdem1p+/l6TWZ5Mwc50tf +jTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mIVoBc+L0sPOFMV4i707mV78vH9toxdCim +5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOe +sL4jpNrcyCse2m5FHomY2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj +0mRiikKYvLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+TtbNe/ +JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZbx39ri1UbSsUgYT2u +y1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+l2oBlKN8W4UdKjk60FSh0Tlxnf0h ++bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YKTE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsG +xVd7GYYKecsAyVKvQv83j+GjHno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwID +AQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e +i9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEwDQYJKoZIhvcN +AQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG7BJ8dNVI0lkUmcDrudHr9Egw +W62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCkMpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWld +y8joRTnU+kLBEUx3XZL7av9YROXrgZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov ++BS5gLNdTaqX4fnkGMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDc +eqFS3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJmOzj/2ZQw +9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+l6mc1X5VTMbeRRAc6uk7 +nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6cJfTzPV4e0hz5sy229zdcxsshTrD3mUcY +hcErulWuBurQB7Lcq9CClnXO0lD+mefPL5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB +60PZ2Pierc+xYw5F9KBaLJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fq +dBb9HxEGmpv0 +-----END CERTIFICATE----- + +Entrust Root Certification Authority - G4 +========================================= +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAwgb4xCzAJBgNV +BAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3Qu +bmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1 +dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eSAtIEc0MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYT +AlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 +L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eSAtIEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3D +umSXbcr3DbVZwbPLqGgZ2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV +3imz/f3ET+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j5pds +8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAMC1rlLAHGVK/XqsEQ +e9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73TDtTUXm6Hnmo9RR3RXRv06QqsYJn7 +ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNXwbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5X +xNMhIWNlUpEbsZmOeX7m640A2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV +7rtNOzK+mndmnqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8 +dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwlN4y6mACXi0mW +Hv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNjc0kCAwEAAaNCMEAwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9n +MA0GCSqGSIb3DQEBCwUAA4ICAQAS5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4Q +jbRaZIxowLByQzTSGwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht +7LGrhFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/B7NTeLUK +YvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uIAeV8KEsD+UmDfLJ/fOPt +jqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbwH5Lk6rWS02FREAutp9lfx1/cH6NcjKF+ +m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKW +RGhXxNUzzxkvFMSUHHuk2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjA +JOgc47OlIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk5F6G ++TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuYn/PIjhs4ViFqUZPT +kcpG2om3PVODLAgfi49T3f+sHw== +-----END CERTIFICATE----- + +Microsoft ECC Root Certificate Authority 2017 +============================================= +-----BEGIN CERTIFICATE----- +MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV +UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQgRUND +IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4 +MjMxNjA0WjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw +NAYDVQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQ +BgcqhkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZRogPZnZH6 +thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYbhGBKia/teQ87zvH2RPUB +eMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIy5lycFIM ++Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlf +Xu5gKcs68tvWMoQZP3zVL8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaR +eNtUjGUBiudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= +-----END CERTIFICATE----- + +Microsoft RSA Root Certificate Authority 2017 +============================================= +-----BEGIN CERTIFICATE----- +MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQg +UlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIw +NzE4MjMwMDIzWjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u +MTYwNAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZNt9GkMml +7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0ZdDMbRnMlfl7rEqUrQ7e +S0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw7 +1VdyvD/IybLeS2v4I2wDwAW9lcfNcztmgGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+ +dkC0zVJhUXAoP8XFWvLJjEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49F +yGcohJUcaDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaGYaRS +MLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6W6IYZVcSn2i51BVr +lMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4KUGsTuqwPN1q3ErWQgR5WrlcihtnJ +0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH+FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJ +ClTUFLkqqNfs+avNJVgyeY+QW5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZCLgLNFgVZJ8og +6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OCgMNPOsduET/m4xaRhPtthH80 +dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk ++ONVFT24bcMKpBLBaYVu32TxU5nhSnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex +/2kskZGT4d9Mozd2TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDy +AmH3pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGRxpl/j8nW +ZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiAppGWSZI1b7rCoucL5mxAyE +7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKT +c0QWbej09+CVgI+WXTik9KveCjCHk9hNAHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D +5KbvtwEwXlGjefVwaaZBRA+GsCyRxj3qrg+E +-----END CERTIFICATE----- + +e-Szigno Root CA 2017 +===================== +-----BEGIN CERTIFICATE----- +MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNVBAYTAkhVMREw +DwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUt +MjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJvb3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZa +Fw00MjA4MjIxMjA3MDZaMHExCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UE +CgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3pp +Z25vIFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtvxie+RJCx +s1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+HWyx7xf58etqjYzBhMA8G +A1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSHERUI0arBeAyxr87GyZDv +vzAEwDAfBgNVHSMEGDAWgBSHERUI0arBeAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEA +tVfd14pVCzbhhkT61NlojbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxO +svxyqltZ+efcMQ== +-----END CERTIFICATE----- + +certSIGN Root CA G2 +=================== +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlJPMRQw +EgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjAeFw0xNzAy +MDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJBgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lH +TiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAMDFdRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05 +N0IwvlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZuIt4Imfk +abBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhpn+Sc8CnTXPnGFiWeI8Mg +wT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKscpc/I1mbySKEwQdPzH/iV8oScLumZfNp +dWO9lfsbl83kqK/20U6o2YpxJM02PbyWxPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91Qqh +ngLjYl/rNUssuHLoPj1PrCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732 +jcZZroiFDsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fxDTvf +95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgyLcsUDFDYg2WD7rlc +z8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6CeWRgKRM+o/1Pcmqr4tTluCRVLERL +iohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1Ud +DgQWBBSCIS1mxteg4BXrzkwJd8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOB +ywaK8SJJ6ejqkX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC +b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQlqiCA2ClV9+BB +/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0OJD7uNGzcgbJceaBxXntC6Z5 +8hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+cNywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5 +BiKDUyUM/FHE5r7iOZULJK2v0ZXkltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklW +atKcsWMy5WHgUyIOpwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tU +Sxfj03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZkPuXaTH4M +NMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE1LlSVHJ7liXMvGnjSG4N +0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MXQRBdJ3NghVdJIgc= +-----END CERTIFICATE----- + +Trustwave Global Certification Authority +======================================== +-----BEGIN CERTIFICATE----- +MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJV +UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2 +ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTAeFw0xNzA4MjMxOTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJV +UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2 +ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALldUShLPDeS0YLOvR29 +zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0XznswuvCAAJWX/NKSqIk4cXGIDtiLK0thAf +LdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4Bq +stTnoApTAbqOl5F2brz81Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9o +WN0EACyW80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotPJqX+ +OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1lRtzuzWniTY+HKE40 +Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfwhI0Vcnyh78zyiGG69Gm7DIwLdVcE +uE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm ++9jaJXLE9gCxInm943xZYkqcBW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqj +ifLJS3tBEW1ntwiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1UdDwEB/wQEAwIB +BjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W0OhUKDtkLSGm+J1WE2pIPU/H +PinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfeuyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0H +ZJDmHvUqoai7PF35owgLEQzxPy0QlG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla +4gt5kNdXElE1GYhBaCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5R +vbbEsLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPTMaCm/zjd +zyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qequ5AvzSxnI9O4fKSTx+O +856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxhVicGaeVyQYHTtgGJoC86cnn+OjC/QezH +Yj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu +3R3y4G5OBVixwJAWKqQ9EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP +29FpHOTKyeC2nOnOcXHebD8WpHk= +-----END CERTIFICATE----- + +Trustwave Global ECC P256 Certification Authority +================================================= +-----BEGIN CERTIFICATE----- +MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYDVQQGEwJVUzER +MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI +b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy +dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1 +NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH77bOYj +43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoNFWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqm +P62jQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt +0UrrdaVKEJmzsaGLSvcwCgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjz +RM4q3wghDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 +-----END CERTIFICATE----- + +Trustwave Global ECC P384 Certification Authority +================================================= +-----BEGIN CERTIFICATE----- +MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYDVQQGEwJVUzER +MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI +b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy +dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4 +NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuBBAAiA2IABGvaDXU1CDFH +Ba5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJj9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr +/TklZvFe/oyujUF5nQlgziip04pt89ZF1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNV +HQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNn +ADBkAjA3AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsCMGcl +CrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVuSw== +-----END CERTIFICATE----- + +NAVER Global Root Certification Authority +========================================= +-----BEGIN CERTIFICATE----- +MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEMBQAwaTELMAkG +A1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRGT1JNIENvcnAuMTIwMAYDVQQD +DClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4 +NDJaFw0zNzA4MTgyMzU5NTlaMGkxCzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVT +UyBQTEFURk9STSBDb3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVAiQqrDZBb +UGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH38dq6SZeWYp34+hInDEW ++j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lEHoSTGEq0n+USZGnQJoViAbbJAh2+g1G7 +XNr4rRVqmfeSVPc0W+m/6imBEtRTkZazkVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2 +aacp+yPOiNgSnABIqKYPszuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4 +Yb8ObtoqvC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHfnZ3z +VHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaGYQ5fG8Ir4ozVu53B +A0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo0es+nPxdGoMuK8u180SdOqcXYZai +cdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3aCJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejy +YhbLgGvtPe31HzClrkvJE+2KAQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNV +HQ4EFgQU0p+I36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB +Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoNqo0hV4/GPnrK +21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatjcu3cvuzHV+YwIHHW1xDBE1UB +jCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bx +hYTeodoS76TiEJd6eN4MUZeoIUCLhr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTg +E34h5prCy8VCZLQelHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTH +D8z7p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8piKCk5XQ +A76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLRLBT/DShycpWbXgnbiUSY +qqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oG +I/hGoiLtk/bdmuYqh7GYVPEi92tF4+KOdh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmg +kpzNNIaRkPpkUZ3+/uul9XXeifdy +-----END CERTIFICATE----- + +AC RAIZ FNMT-RCM SERVIDORES SEGUROS +=================================== +-----BEGIN CERTIFICATE----- +MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQswCQYDVQQGEwJF +UzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgwFgYDVQRhDA9WQVRFUy1RMjgy +NjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1SQ00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4 +MTIyMDA5MzczM1oXDTQzMTIyMDA5MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQt +UkNNMQ4wDAYDVQQLDAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNB +QyBSQUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuBBAAiA2IA +BPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LHsbI6GA60XYyzZl2hNPk2 +LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oKUm8BA06Oi6NCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqG +SM49BAMDA2kAMGYCMQCuSuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoD +zBOQn5ICMQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJyv+c= +-----END CERTIFICATE----- + +GlobalSign Root R46 +=================== +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUAMEYxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJv +b3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAX +BgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08Es +CVeJOaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQGvGIFAha/ +r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud316HCkD7rRlr+/fKYIje +2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo0q3v84RLHIf8E6M6cqJaESvWJ3En7YEt +bWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSEy132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvj +K8Cd+RTyG/FWaha/LIWFzXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD4 +12lPFzYE+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCNI/on +ccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzsx2sZy/N78CsHpdls +eVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqaByFrgY/bxFn63iLABJzjqls2k+g9 +vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEM +BQADggIBAHx47PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg +JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti2kM3S+LGteWy +gxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIkpnnpHs6i58FZFZ8d4kuaPp92 +CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRFFRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZm +OUdkLG5NrmJ7v2B0GbhWrJKsFjLtrWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qq +JZ4d16GLuc1CLgSkZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwye +qiv5u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP4vkYxboz +nxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6N3ec592kD3ZDZopD8p/7 +DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3vouXsXgxT7PntgMTzlSdriVZzH81Xwj3 +QEUxeCp6 +-----END CERTIFICATE----- + +GlobalSign Root E46 +=================== +-----BEGIN CERTIFICATE----- +MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYxCzAJBgNVBAYT +AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJvb3Qg +RTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNV +BAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkB +jtjqR+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGddyXqBPCCj +QjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQxCpCPtsad0kRL +gLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZk +vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+ +CAezNIm8BZ/3Hobui3A= +-----END CERTIFICATE----- + +GLOBALTRUST 2020 +================ +-----BEGIN CERTIFICATE----- +MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkGA1UEBhMCQVQx +IzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVT +VCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYxMDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAh +BgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAy +MDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWi +D59bRatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9ZYybNpyrO +VPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3QWPKzv9pj2gOlTblzLmM +CcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPwyJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCm +fecqQjuCgGOlYx8ZzHyyZqjC0203b+J+BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKA +A1GqtH6qRNdDYfOiaxaJSaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9OR +JitHHmkHr96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj04KlG +DfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9MedKZssCz3AwyIDMvU +clOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIwq7ejMZdnrY8XD2zHc+0klGvIg5rQ +mjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1Ud +IwQYMBaAFNwuH9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA +VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJCXtzoRlgHNQIw +4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd6IwPS3BD0IL/qMy/pJTAvoe9 +iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf+I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS +8cE54+X1+NZK3TTN+2/BT+MAi1bikvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2 +HcqtbepBEX4tdJP7wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxS +vTOBTI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6CMUO+1918 +oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn4rnvyOL2NSl6dPrFf4IF +YqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+IaFvowdlxfv1k7/9nR4hYJS8+hge9+6jl +gqispdNpQ80xiEmEU5LAsTkbOYMBMMTyqfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg== +-----END CERTIFICATE----- + +ANF Secure Server Root CA +========================= +-----BEGIN CERTIFICATE----- +MIIF7zCCA9egAwIBAgIIDdPjvGz5a7EwDQYJKoZIhvcNAQELBQAwgYQxEjAQBgNVBAUTCUc2MzI4 +NzUxMDELMAkGA1UEBhMCRVMxJzAlBgNVBAoTHkFORiBBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lv +bjEUMBIGA1UECxMLQU5GIENBIFJhaXoxIjAgBgNVBAMTGUFORiBTZWN1cmUgU2VydmVyIFJvb3Qg +Q0EwHhcNMTkwOTA0MTAwMDM4WhcNMzkwODMwMTAwMDM4WjCBhDESMBAGA1UEBRMJRzYzMjg3NTEw +MQswCQYDVQQGEwJFUzEnMCUGA1UEChMeQU5GIEF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uMRQw +EgYDVQQLEwtBTkYgQ0EgUmFpejEiMCAGA1UEAxMZQU5GIFNlY3VyZSBTZXJ2ZXIgUm9vdCBDQTCC +AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANvrayvmZFSVgpCjcqQZAZ2cC4Ffc0m6p6zz +BE57lgvsEeBbphzOG9INgxwruJ4dfkUyYA8H6XdYfp9qyGFOtibBTI3/TO80sh9l2Ll49a2pcbnv +T1gdpd50IJeh7WhM3pIXS7yr/2WanvtH2Vdy8wmhrnZEE26cLUQ5vPnHO6RYPUG9tMJJo8gN0pcv +B2VSAKduyK9o7PQUlrZXH1bDOZ8rbeTzPvY1ZNoMHKGESy9LS+IsJJ1tk0DrtSOOMspvRdOoiXse +zx76W0OLzc2oD2rKDF65nkeP8Nm2CgtYZRczuSPkdxl9y0oukntPLxB3sY0vaJxizOBQ+OyRp1RM +VwnVdmPF6GUe7m1qzwmd+nxPrWAI/VaZDxUse6mAq4xhj0oHdkLePfTdsiQzW7i1o0TJrH93PB0j +7IKppuLIBkwC/qxcmZkLLxCKpvR/1Yd0DVlJRfbwcVw5Kda/SiOL9V8BY9KHcyi1Swr1+KuCLH5z +JTIdC2MKF4EA/7Z2Xue0sUDKIbvVgFHlSFJnLNJhiQcND85Cd8BEc5xEUKDbEAotlRyBr+Qc5RQe +8TZBAQIvfXOn3kLMTOmJDVb3n5HUA8ZsyY/b2BzgQJhdZpmYgG4t/wHFzstGH6wCxkPmrqKEPMVO +Hj1tyRRM4y5Bu8o5vzY8KhmqQYdOpc5LMnndkEl/AgMBAAGjYzBhMB8GA1UdIwQYMBaAFJxf0Gxj +o1+TypOYCK2Mh6UsXME3MB0GA1UdDgQWBBScX9BsY6Nfk8qTmAitjIelLFzBNzAOBgNVHQ8BAf8E +BAMCAYYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEATh65isagmD9uw2nAalxJ +UqzLK114OMHVVISfk/CHGT0sZonrDUL8zPB1hT+L9IBdeeUXZ701guLyPI59WzbLWoAAKfLOKyzx +j6ptBZNscsdW699QIyjlRRA96Gejrw5VD5AJYu9LWaL2U/HANeQvwSS9eS9OICI7/RogsKQOLHDt +dD+4E5UGUcjohybKpFtqFiGS3XNgnhAY3jyB6ugYw3yJ8otQPr0R4hUDqDZ9MwFsSBXXiJCZBMXM +5gf0vPSQ7RPi6ovDj6MzD8EpTBNO2hVWcXNyglD2mjN8orGoGjR0ZVzO0eurU+AagNjqOknkJjCb +5RyKqKkVMoaZkgoQI1YS4PbOTOK7vtuNknMBZi9iPrJyJ0U27U1W45eZ/zo1PqVUSlJZS2Db7v54 +EX9K3BR5YLZrZAPbFYPhor72I5dQ8AkzNqdxliXzuUJ92zg/LFis6ELhDtjTO0wugumDLmsx2d1H +hk9tl5EuT+IocTUW0fJz/iUrB0ckYyfI+PbZa/wSMVYIwFNCr5zQM378BvAxRAMU8Vjq8moNqRGy +g77FGr8H6lnco4g175x2MjxNBiLOFeXdntiP2t7SxDnlF4HPOEfrf4htWRvfn0IUrn7PqLBmZdo3 +r5+qPeoott7VMVgWglvquxl1AnMaykgaIZOQCo6ThKd9OyMYkomgjaw= +-----END CERTIFICATE----- + +Certum EC-384 CA +================ +-----BEGIN CERTIFICATE----- +MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQswCQYDVQQGEwJQ +TDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2 +MDcyNDU0WhcNNDMwMzI2MDcyNDU0WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERh +dGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx +GTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATEKI6rGFtq +vm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7TmFy8as10CW4kjPMIRBSqn +iBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68KjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFI0GZnQkdjrzife81r1HfS+8EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNo +ADBlAjADVS2m5hjEfO/JUG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0 +QoSZ/6vnnvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= +-----END CERTIFICATE----- + +Certum Trusted Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6MQswCQYDVQQG +EwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0g +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0Ew +HhcNMTgwMzE2MTIxMDEzWhcNNDMwMzE2MTIxMDEzWjB6MQswCQYDVQQGEwJQTDEhMB8GA1UEChMY +QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQDRLY67tzbqbTeRn06TpwXkKQMlzhyC93yZn0EGze2jusDbCSzBfN8p +fktlL5On1AFrAygYo9idBcEq2EXxkd7fO9CAAozPOA/qp1x4EaTByIVcJdPTsuclzxFUl6s1wB52 +HO8AU5853BSlLCIls3Jy/I2z5T4IHhQqNwuIPMqw9MjCoa68wb4pZ1Xi/K1ZXP69VyywkI3C7Te2 +fJmItdUDmj0VDT06qKhF8JVOJVkdzZhpu9PMMsmN74H+rX2Ju7pgE8pllWeg8xn2A1bUatMn4qGt +g/BKEiJ3HAVz4hlxQsDsdUaakFjgao4rpUYwBI4Zshfjvqm6f1bxJAPXsiEodg42MEx51UGamqi4 +NboMOvJEGyCI98Ul1z3G4z5D3Yf+xOr1Uz5MZf87Sst4WmsXXw3Hw09Omiqi7VdNIuJGmj8PkTQk +fVXjjJU30xrwCSss0smNtA0Aq2cpKNgB9RkEth2+dv5yXMSFytKAQd8FqKPVhJBPC/PgP5sZ0jeJ +P/J7UhyM9uH3PAeXjA6iWYEMspA90+NZRu0PqafegGtaqge2Gcu8V/OXIXoMsSt0Puvap2ctTMSY +njYJdmZm/Bo/6khUHL4wvYBQv3y1zgD2DGHZ5yQD4OMBgQ692IU0iL2yNqh7XAjlRICMb/gv1SHK +HRzQ+8S1h9E6Tsd2tTVItQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSM+xx1 +vALTn04uSNn5YFSqxLNP+jAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQENBQADggIBAEii1QAL +LtA/vBzVtVRJHlpr9OTy4EA34MwUe7nJ+jW1dReTagVphZzNTxl4WxmB82M+w85bj/UvXgF2Ez8s +ALnNllI5SW0ETsXpD4YN4fqzX4IS8TrOZgYkNCvozMrnadyHncI013nR03e4qllY/p0m+jiGPp2K +h2RX5Rc64vmNueMzeMGQ2Ljdt4NR5MTMI9UGfOZR0800McD2RrsLrfw9EAUqO0qRJe6M1ISHgCq8 +CYyqOhNf6DR5UMEQGfnTKB7U0VEwKbOukGfWHwpjscWpxkIxYxeU72nLL/qMFH3EQxiJ2fAyQOaA +4kZf5ePBAFmo+eggvIksDkc0C+pXwlM2/KfUrzHN/gLldfq5Jwn58/U7yn2fqSLLiMmq0Uc9Nneo +WWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7DP78v3DSk+yshzWePS/Tj +6tQ/50+6uaWTRRxmHyH6ZF5v4HaUMst19W7l9o/HuKTMqJZ9ZPskWkoDbGs4xugDQ5r3V7mzKWmT +OPQD8rv7gmsHINFSH5pkAnuYZttcTVoP0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZck +bxJF0WddCajJFdr60qZfE2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb +-----END CERTIFICATE----- + +TunTrust Root CA +================ +-----BEGIN CERTIFICATE----- +MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQELBQAwYTELMAkG +A1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUgQ2VydGlmaWNhdGlvbiBFbGVj +dHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJvb3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQw +NDI2MDg1NzU2WjBhMQswCQYDVQQGEwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBD +ZXJ0aWZpY2F0aW9uIEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZn56eY+hz +2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd2JQDoOw05TDENX37Jk0b +bjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgFVwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7 +NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZGoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAd +gjH8KcwAWJeRTIAAHDOFli/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViW +VSHbhlnUr8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2eY8f +Tpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIbMlEsPvLfe/ZdeikZ +juXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISgjwBUFfyRbVinljvrS5YnzWuioYas +DXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwS +VXAkPcvCFDVDXSdOvsC9qnyW5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI +04Y+oXNZtPdEITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0 +90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+zxiD2BkewhpMl +0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYuQEkHDVneixCwSQXi/5E/S7fd +Ao74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRY +YdZ2vyJ/0Adqp2RT8JeNnYA/u8EH22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJp +adbGNjHh/PqAulxPxOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65x +xBzndFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5Xc0yGYuP +jCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7bnV2UqL1g52KAdoGDDIzM +MEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQCvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9z +ZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZHu/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3r +AZ3r2OvEhJn7wAzMMujjd9qDRIueVSjAi1jTkD5OGwDxFa2DK5o= +-----END CERTIFICATE----- + +HARICA TLS RSA Root CA 2021 +=========================== +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQG +EwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u +cyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0EgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUz +OFoXDTQ1MDIxMzEwNTUzN1owbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRl +bWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNB +IFJvb3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569lmwVnlskN +JLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE4VGC/6zStGndLuwRo0Xu +a2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uva9of08WRiFukiZLRgeaMOVig1mlDqa2Y +Ulhu2wr7a89o+uOkXjpFc5gH6l8Cct4MpbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K +5FrZx40d/JiZ+yykgmvwKh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEv +dmn8kN3bLW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcYAuUR +0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqBAGMUuTNe3QvboEUH +GjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYqE613TBoYm5EPWNgGVMWX+Ko/IIqm +haZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHrW2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQ +CPxrvrNQKlr9qEgYRtaQQJKQCoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAUX15QvWiWkKQU +EapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3f5Z2EMVGpdAgS1D0NTsY9FVq +QRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxajaH6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxD +QpSbIPDRzbLrLFPCU3hKTwSUQZqPJzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcR +j88YxeMn/ibvBZ3PzzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5 +vZStjBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0/L5H9MG0 +qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pTBGIBnfHAT+7hOtSLIBD6 +Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79aPib8qXPMThcFarmlwDB31qlpzmq6YR/ +PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YWxw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnn +kf3/W9b3raYvAwtt41dU63ZTGI0RmLo= +-----END CERTIFICATE----- + +HARICA TLS ECC Root CA 2021 +=========================== +-----BEGIN CERTIFICATE----- +MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQswCQYDVQQGEwJH +UjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBD +QTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoX +DTQ1MDIxMzExMDEwOVowbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWlj +IGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJv +b3QgQ0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7KKrxcm1l +AEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9YSTHMmE5gEYd103KUkE+b +ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW +0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAi +rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw +CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps +-----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMB0GA1Ud +DgQWBBRlzeurNR4APn7VdMActHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4w +gZswgZgGBFUdIAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j +b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABCAG8AbgBhAG4A +bwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAwADEANzAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9miWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL +4QjbEwj4KKE1soCzC1HA01aajTNFSa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDb +LIpgD7dvlAceHabJhfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1il +I45PVf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZEEAEeiGaP +cjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV1aUsIC+nmCjuRfzxuIgA +LI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2tCsvMo2ebKHTEm9caPARYpoKdrcd7b/+A +lun4jWq9GJAd/0kakFI3ky88Al2CdgtR5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH +9IBk9W6VULgRfhVwOEqwf9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpf +NIbnYrX9ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNKGbqE +ZycPvEJdvSRUDewdcAZfpLz6IHxV +-----END CERTIFICATE----- + +vTrus ECC Root CA +================= +-----BEGIN CERTIFICATE----- +MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMwRzELMAkGA1UE +BhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBS +b290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDczMTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAa +BgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYw +EAYHKoZIzj0CAQYFK4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+c +ToL0v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUde4BdS49n +TPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIwV53dVvHH4+m4SVBrm2nDb+zDfSXkV5UT +QJtS0zvzQBm8JsctBp61ezaf9SXUY2sAAjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQL +YgmRWAD5Tfs0aNoJrSEGGJTO +-----END CERTIFICATE----- + +vTrus Root CA +============= +-----BEGIN CERTIFICATE----- +MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQELBQAwQzELMAkG +A1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xFjAUBgNVBAMTDXZUcnVzIFJv +b3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMxMDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoG +A1UEChMTaVRydXNDaGluYSBDby4sTHRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZots +SKYcIrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykUAyyNJJrI +ZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+GrPSbcKvdmaVayqwlHeF +XgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z98Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KA +YPxMvDVTAWqXcoKv8R1w6Jz1717CbMdHflqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70 +kLJrxLT5ZOrpGgrIDajtJ8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2 +AXPKBlim0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZNpGvu +/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQUqqzApVg+QxMaPnu +1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHWOXSuTEGC2/KmSNGzm/MzqvOmwMVO +9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMBAAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYg +scasGrz2iTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOC +AgEAKbqSSaet8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd +nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1jbhd47F18iMjr +jld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvMKar5CKXiNxTKsbhm7xqC5PD4 +8acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIivTDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJn +xDHO2zTlJQNgJXtxmOTAGytfdELSS8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554Wg +icEFOwE30z9J4nfrI8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4 +sEb9b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNBUvupLnKW +nyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1PTi07NEPhmg4NpGaXutIc +SkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929vensBxXVsFy6K2ir40zSbofitzmdHxghm+H +l3s= +-----END CERTIFICATE----- + +ISRG Root X2 +============ +-----BEGIN CERTIFICATE----- +MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQswCQYDVQQGEwJV +UzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElT +UkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVT +MSkwJwYDVQQKEyBJbnRlcm5ldCBTZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNS +RyBSb290IFgyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0H +ttwW+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9ItgKbppb +d9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZIzj0EAwMDaAAwZQIwe3lORlCEwkSHRhtF +cP9Ymd70/aTSVaYgLXTWNLxBo1BfASdWtL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5 +U6VR5CmD1/iQMVtCnwr1/q4AaOeMSQ+2b1tbFfLn +-----END CERTIFICATE----- + +HiPKI Root CA - G1 +================== +-----BEGIN CERTIFICATE----- +MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBPMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xGzAZBgNVBAMMEkhpUEtJ +IFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRaFw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYT +AlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kg +Um9vdCBDQSAtIEcxMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0 +o9QwqNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twvVcg3Px+k +wJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6lZgRZq2XNdZ1AYDgr/SE +YYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnzQs7ZngyzsHeXZJzA9KMuH5UHsBffMNsA +GJZMoYFL3QRtU6M9/Aes1MU3guvklQgZKILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfd +hSi8MEyr48KxRURHH+CKFgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj +1jOXTyFjHluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDry+K4 +9a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ/W3c1pzAtH2lsN0/ +Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgMa/aOEmem8rJY5AIJEzypuxC00jBF +8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQD +AgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi +7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqcSE5XCV0vrPSl +tJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6FzaZsT0pPBWGTMpWmWSBUdGSquE +wx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9TcXzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07Q +JNBAsNB1CI69aO4I1258EHBGG3zgiLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv +5wiZqAxeJoBF1PhoL5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+Gpz +jLrFNe85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wrkkVbbiVg +hUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+vhV4nYWBSipX3tUZQ9rb +yltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQUYDksswBVLuT1sw5XxJFBAJw/6KXf6vb/ +yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ== +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R4 +=========================== +-----BEGIN CERTIFICATE----- +MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYDVQQLExtHbG9i +YWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds +b2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgwMTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9i +YWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds +b2JhbFNpZ24wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkW +ymOxuYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNVHQ8BAf8E +BAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/+wpu+74zyTyjhNUwCgYI +KoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147bmF0774BxL4YSFlhgjICICadVGNA3jdg +UM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm +-----END CERTIFICATE----- + +GTS Root R1 +=========== +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQGEwJV +UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg +UjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE +ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaM +f/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7wCl7raKb0 +xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjwTcLCeoiKu7rPWRnWr4+w +B7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0PfyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXW +nOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk +9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zq +kUspzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92wO1A +K/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om3xPX +V2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDW +cfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQAD +ggIBAJ+qQibbC5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe +QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuyh6f88/qBVRRi +ClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM47HLwEXWdyzRSjeZ2axfG34ar +J45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8JZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYci +NuaCp+0KueIHoI17eko8cdLiA6EfMgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5me +LMFrUKTX5hgUvYU/Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJF +fbdT6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ0E6yove+ +7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm2tIMPNuzjsmhDYAPexZ3 +FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bbbP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3 +gm3c +-----END CERTIFICATE----- + +GTS Root R2 +=========== +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQGEwJV +UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg +UjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE +ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3Lv +CvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo7JUl +e3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWIm8Wb +a96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS ++LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7M +kogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJG +r61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RWIr9q +S34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73VululycslaVNV +J1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy5okL +dWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQAD +ggIBAB/Kzt3HvqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8 +0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyCB19m3H0Q/gxh +swWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2uNmSRXbBoGOqKYcl3qJfEycel +/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMgyALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVn +jWQye+mew4K6Ki3pHrTgSAai/GevHyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y5 +9PYjJbigapordwj6xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M +7YNRTOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924SgJPFI/2R8 +0L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV7LXTWtiBmelDGDfrs7vR +WGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjW +HYbL +-----END CERTIFICATE----- + +GTS Root R3 +=========== +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJVUzEi +MCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMw +HhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZ +R29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjO +PQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout +736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24CejQjBA +MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP0/Eq +Er24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azT +L818+FsuVbu/3ZL3pAzcMeGiAjEA/JdmZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV +11RZt+cRLInUue4X +-----END CERTIFICATE----- + +GTS Root R4 +=========== +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJVUzEi +MCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQw +HhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZ +R29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjO +PQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzu +hXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqjQjBA +MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV2Py1 +PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/C +r8deVl5c1RxYIigL9zC2L7F8AjEA8GE8p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh +4rsUecrNIdSUtUlD +-----END CERTIFICATE----- diff --git a/x86_64/core/core-build.sh b/x86_64/core/core-build.sh new file mode 100755 index 0000000..e37aa1b --- /dev/null +++ b/x86_64/core/core-build.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +function build_core() { + shopt -s globstar + for d in ./*/ ; do + cd "$d" + echo " " + echo "[!]: Building ${d}" + $@ + rm -rf src/ + rm -rf pkg/ + cd .. + done +} + +build_core "makepkg --skipint" diff --git a/x86_64/core/coreutils/01-fix-fs72253.patch b/x86_64/core/coreutils/01-fix-fs72253.patch new file mode 100644 index 0000000..ad2b068 --- /dev/null +++ b/x86_64/core/coreutils/01-fix-fs72253.patch @@ -0,0 +1,92 @@ +From e8b56ebd536e82b15542a00c888109471936bfda Mon Sep 17 00:00:00 2001 +From: =?utf8?q?P=C3=A1draig=20Brady?= +Date: Fri, 24 Sep 2021 20:57:41 +0100 +Subject: [PATCH] chmod: fix exit status when ignoring symlinks + +* src/chmod.c: Reorder enum so CH_NOT_APPLIED +can be treated as a non error. +* tests/chmod/ignore-symlink.sh: A new test. +* tests/local.mk: Reference the new test. +Fixes https://bugs.gnu.org/50784 +--- + src/chmod.c | 4 ++-- + tests/chmod/ignore-symlink.sh | 31 +++++++++++++++++++++++++++++++ + tests/local.mk | 1 + + 4 files changed, 40 insertions(+), 2 deletions(-) + create mode 100755 tests/chmod/ignore-symlink.sh + +diff --git a/src/chmod.c b/src/chmod.c +index 37b04f5..57ac47f 100644 +--- a/src/chmod.c ++++ b/src/chmod.c +@@ -44,8 +44,8 @@ struct change_status + enum + { + CH_NO_STAT, +- CH_NOT_APPLIED, + CH_FAILED, ++ CH_NOT_APPLIED, + CH_NO_CHANGE_REQUESTED, + CH_SUCCEEDED + } +@@ -322,7 +322,7 @@ process_file (FTS *fts, FTSENT *ent) + if ( ! recurse) + fts_set (fts, ent, FTS_SKIP); + +- return CH_NO_CHANGE_REQUESTED <= ch.status; ++ return CH_NOT_APPLIED <= ch.status; + } + + /* Recursively change the modes of the specified FILES (the last entry +diff --git a/tests/chmod/ignore-symlink.sh b/tests/chmod/ignore-symlink.sh +new file mode 100755 +index 0000000..5ce3de8 +--- /dev/null ++++ b/tests/chmod/ignore-symlink.sh +@@ -0,0 +1,31 @@ ++#!/bin/sh ++# Test for proper exit code of chmod on a processed symlink. ++ ++# Copyright (C) 2021 Free Software Foundation, Inc. ++ ++# This program is free software: you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation, either version 3 of the License, or ++# (at your option) any later version. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++ ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++ ++. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src ++print_ver_ chmod ++ ++mkdir dir || framework_failure_ ++touch dir/f || framework_failure_ ++ln -s f dir/l || framework_failure_ ++ ++# This operation ignores symlinks but should succeed. ++chmod u+w -R dir 2> out || fail=1 ++ ++compare /dev/null out || fail=1 ++ ++Exit $fail +diff --git a/tests/local.mk b/tests/local.mk +index 228d0e3..b5b893f 100644 +--- a/tests/local.mk ++++ b/tests/local.mk +@@ -456,6 +456,7 @@ all_tests = \ + tests/chmod/c-option.sh \ + tests/chmod/equal-x.sh \ + tests/chmod/equals.sh \ ++ tests/chmod/ignore-symlink.sh \ + tests/chmod/inaccessible.sh \ + tests/chmod/octal.sh \ + tests/chmod/setgid.sh \ +-- +1.9.1 + diff --git a/x86_64/core/coreutils/PKGBUILD b/x86_64/core/coreutils/PKGBUILD new file mode 100644 index 0000000..9f8b0ee --- /dev/null +++ b/x86_64/core/coreutils/PKGBUILD @@ -0,0 +1,43 @@ +pkgname=coreutils +pkgver=9.0 +pkgrel=4 +pkgdesc='The basic file, shell and text manipulation utilities of the GNU operating system' +arch=('x86_64') +license=('GPL3') +url='https://www.gnu.org/software/coreutils/' +depends=('glibc' 'acl' 'attr' 'gmp' 'libcap' 'openssl') +source=("https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz" + '01-fix-fs72253.patch') + +prepare() { + cd $pkgname-$pkgver + # apply patch from the source array (should be a pacman feature) + local filename + for filename in "${source[@]}"; do + if [[ "$filename" =~ \.patch$ ]]; then + echo "Applying patch ${filename##*/}" + patch -Np1 -i "$srcdir/${filename##*/}" + fi + done +} + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --libexecdir=/usr/lib \ + --with-openssl \ + --enable-no-install-program=groups,hostname,kill,uptime + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + + # Compatability for hardcoded shit that needs cp, echo, cat, rm at /bin + mkdir -p $pkgdir/bin + cd $pkgdir/bin + cp -f ../usr/bin/* . +} diff --git a/x86_64/core/cpio/PKGBUILD b/x86_64/core/cpio/PKGBUILD new file mode 100644 index 0000000..7b87cf5 --- /dev/null +++ b/x86_64/core/cpio/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=cpio +pkgver=2.13 +pkgrel=2 +arch=('x86_64') +depends=(glibc) +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + sed -i '/The name/,+2 d' src/global.c + + ./configure --prefix=/usr \ + --enable-mt \ + --bindir=/bin \ + --libexecdir=/usr/lib \ + --with-rmt=/usr/libexec/rmt + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + rm -r $pkgdir/usr/share/man/man8 +} diff --git a/x86_64/core/curl/PKGBUILD b/x86_64/core/curl/PKGBUILD new file mode 100644 index 0000000..f6a11ea --- /dev/null +++ b/x86_64/core/curl/PKGBUILD @@ -0,0 +1,53 @@ +pkgname=curl +pkgver=7.81.0 +pkgrel=2 +arch=('x86_64') +depends=(ca-certificates brotli libidn2 gnutls libpsl openssl zlib zstd) +source=(https://curl.haxx.se/download/$pkgname-$pkgver.tar.xz) + +prepare() { + # We also want gnutls libs for steam ( possibly for other pkg's too ) + cp -rf $pkgname-$pkgver $pkgname-$pkgver-gnutls +} + +build() { + cd $srcdir/$pkgname-$pkgver + + ./configure --prefix=/usr \ + --enable-threaded-resolver \ + --with-openssl \ + --with-ca-bundle=/etc/ssl/cert.pem + make + + cd $srcdir/$pkgname-$pkgver-gnutls + + ./configure \ + --prefix=/usr \ + --enable-threaded-resolver \ + --without-ssl \ + --with-gnutls='/usr' \ + --with-ca-bundle=/etc/ssl/cert.pem + + make -C lib +} + +package() { + cd $srcdir/$pkgname-$pkgver + + make DESTDIR=$pkgdir install + + cd $srcdir/$pkgname-$pkgver-gnutls + + tmpdir1=$srcdir/tmpdir1 + make -C lib DESTDIR="${tmpdir1}" install + + mv "${tmpdir1}"/usr/lib/libcurl{,-gnutls}.so.4.7.0 + rm "${tmpdir1}"/usr/lib/libcurl.{a,so}* + + for version in 3 4 4.0.0 4.1.0 4.2.0 4.3.0 4.4.0 4.5.0 4.6.0; do + ln -s libcurl-gnutls.so.4.7.0 "${tmpdir1}"/usr/lib/libcurl-gnutls.so.${version} + done + + # Now move tmpdir1 libs to pkgdir + cp -rf $tmpdir1/* $pkgdir/ +} diff --git a/x86_64/core/dbus/PKGBUILD b/x86_64/core/dbus/PKGBUILD new file mode 100644 index 0000000..340d51f --- /dev/null +++ b/x86_64/core/dbus/PKGBUILD @@ -0,0 +1,55 @@ +pkgname=dbus +pkgver=1.12.20 +pkgrel=5 +arch=('x86_64') +depends=(libx11 systemd expat) +source=(https://dbus.freedesktop.org/releases/dbus/dbus-$pkgver.tar.gz + dbus-reload.hook + no-fatal-warnings.diff) + +build() { + cd $pkgname-$pkgver + + patch -Np1 -i ../no-fatal-warnings.diff + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --libexecdir=/usr/lib/dbus-1.0 \ + runstatedir=/var/run \ + --with-console-auth-dir=/var/run/console \ + --with-dbus-user=dbus \ + --with-system-pid-file=/var/run/dbus/pid \ + --with-system-socket=/var/run/dbus/system_bus_socket \ + --with-systemdsystemunitdir=/usr/lib/systemd/system \ + --enable-systemd \ + --enable-user-session \ + --with-x + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + rm -r $pkgdir/{etc,var} + + mkdir -p $pkgdir/lib + mv -v $pkgdir/usr/lib/libdbus-1.so.* $pkgdir/lib + ln -sfv ../../lib/$(readlink $pkgdir/usr/lib/libdbus-1.so) $pkgdir/usr/lib/libdbus-1.so + + #chown -v root:messagebus $pkgdir/usr/libexec/dbus-daemon-launch-helper + #chmod -v 4750 $pkgdir/usr/libexec/dbus-daemon-launch-helper + + echo 'u dbus 81 "System Message Bus"' | + install -Dm644 /dev/stdin "$pkgdir/usr/lib/sysusers.d/dbus.conf" + + install -Dt $pkgdir/usr/share/libalpm -m644 $srcdir/*.hook + + # if build logind support + #ln -sv $pkgdir/var/lib/dbus/machine-id $pkgdir/etc + rm -rf $pkgdir/var/run $pkgdir/run +} diff --git a/x86_64/core/dbus/dbus-reload.hook b/x86_64/core/dbus/dbus-reload.hook new file mode 100644 index 0000000..9f87829 --- /dev/null +++ b/x86_64/core/dbus/dbus-reload.hook @@ -0,0 +1,13 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = etc/dbus-1/system.d/*.conf +Target = usr/share/dbus-1/system.d/*.conf +Target = usr/share/dbus-1/system-services/*.service + +[Action] +Description = Reloading system bus configuration... +When = PostTransaction +Exec = /usr/share/libalpm/scripts/systemd-hook reload dbus diff --git a/x86_64/core/dbus/no-fatal-warnings.diff b/x86_64/core/dbus/no-fatal-warnings.diff new file mode 100644 index 0000000..459da90 --- /dev/null +++ b/x86_64/core/dbus/no-fatal-warnings.diff @@ -0,0 +1,13 @@ +diff --git i/dbus/dbus-internals.c w/dbus/dbus-internals.c +index 267aef97..b1064e85 100644 +--- i/dbus/dbus-internals.c ++++ w/dbus/dbus-internals.c +@@ -185,7 +185,7 @@ const char *_dbus_no_memory_message = "Not enough memory"; + + static dbus_bool_t warn_initted = FALSE; + static dbus_bool_t fatal_warnings = FALSE; +-static dbus_bool_t fatal_warnings_on_check_failed = TRUE; ++static dbus_bool_t fatal_warnings_on_check_failed = FALSE; + + static void + init_warnings(void) diff --git a/x86_64/core/dhcpcd/PKGBUILD b/x86_64/core/dhcpcd/PKGBUILD new file mode 100644 index 0000000..7fa9d6e --- /dev/null +++ b/x86_64/core/dhcpcd/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=dhcpcd +pkgver=9.4.1 +pkgrel=3 +arch=('x86_64') +depends=(glibc systemd libgudev libmd) +install=$pkgname.install +source=(https://roy.marples.name/downloads/dhcpcd/dhcpcd-$pkgver.tar.xz + dhcpcd.install + dhcpcd_.service + dhcpcd.service + dhcpcd.sysusers + dhcpcd.tmpfiles) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --dbdir=/var/lib/dhcpcd \ + --runstatedir=/run \ + --privsepuser=dhcpcd + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + install -Dm644 "$srcdir/dhcpcd_.service" "$pkgdir/usr/lib/systemd/system/dhcpcd@.service" + install -Dm644 "$srcdir/dhcpcd.service" "$pkgdir/usr/lib/systemd/system/dhcpcd.service" + install -Dm644 "$srcdir/dhcpcd.sysusers" "$pkgdir/usr/lib/sysusers.d/dhcpcd.conf" + install -Dm644 "$srcdir/dhcpcd.tmpfiles" "$pkgdir/usr/lib/tmpfiles.d/dhcpcd.conf" +} diff --git a/x86_64/core/dhcpcd/dhcpcd.install b/x86_64/core/dhcpcd/dhcpcd.install new file mode 100644 index 0000000..b17aebe --- /dev/null +++ b/x86_64/core/dhcpcd/dhcpcd.install @@ -0,0 +1,12 @@ +post_upgrade() { + if [ -d /var/lib/dhcpcd ]; then + chown root:root /var/lib/dhcpcd + chmod 0750 /var/lib/dhcpcd + fi + + systemctl enable dhcpcd +} + +post_install() { + post_upgrade +} diff --git a/x86_64/core/dhcpcd/dhcpcd.service b/x86_64/core/dhcpcd/dhcpcd.service new file mode 100644 index 0000000..8b44120 --- /dev/null +++ b/x86_64/core/dhcpcd/dhcpcd.service @@ -0,0 +1,13 @@ +[Unit] +Description=dhcpcd on all interfaces +Wants=network.target +Before=network.target + +[Service] +Type=forking +PIDFile=/run/dhcpcd/pid +ExecStart=/usr/sbin/dhcpcd -q -b +ExecStop=/usr/sbin/dhcpcd -x + +[Install] +WantedBy=multi-user.target diff --git a/x86_64/core/dhcpcd/dhcpcd.sysusers b/x86_64/core/dhcpcd/dhcpcd.sysusers new file mode 100644 index 0000000..bcf09a5 --- /dev/null +++ b/x86_64/core/dhcpcd/dhcpcd.sysusers @@ -0,0 +1 @@ +u dhcpcd - "dhcpcd privilege separation" - diff --git a/x86_64/core/dhcpcd/dhcpcd.tmpfiles b/x86_64/core/dhcpcd/dhcpcd.tmpfiles new file mode 100644 index 0000000..3d83f2a --- /dev/null +++ b/x86_64/core/dhcpcd/dhcpcd.tmpfiles @@ -0,0 +1 @@ +d /run/dhcpcd 0755 root root - diff --git a/x86_64/core/dhcpcd/dhcpcd_.service b/x86_64/core/dhcpcd/dhcpcd_.service new file mode 100644 index 0000000..f7ff618 --- /dev/null +++ b/x86_64/core/dhcpcd/dhcpcd_.service @@ -0,0 +1,15 @@ +[Unit] +Description=dhcpcd on %I +Wants=network.target +Before=network.target +BindsTo=sys-subsystem-net-devices-%i.device +After=sys-subsystem-net-devices-%i.device + +[Service] +Type=forking +PIDFile=/run/dhcpcd/%I.pid +ExecStart=/usr/sbin/dhcpcd -q -w %I +ExecStop=/usr/sbin/dhcpcd -x %I + +[Install] +WantedBy=multi-user.target diff --git a/x86_64/core/diffutils/PKGBUILD b/x86_64/core/diffutils/PKGBUILD new file mode 100644 index 0000000..04ea31e --- /dev/null +++ b/x86_64/core/diffutils/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=diffutils +pkgver=3.8 +pkgrel=1 +arch=('x86_64') +depends=(glibc bash) +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/dosfstools/PKGBUILD b/x86_64/core/dosfstools/PKGBUILD new file mode 100644 index 0000000..3356a51 --- /dev/null +++ b/x86_64/core/dosfstools/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=dosfstools +pkgver=4.2 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +source=(https://github.com/dosfstools/dosfstools/releases/download/v$pkgver/dosfstools-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/ \ + --enable-compat-symlinks \ + --mandir=/usr/share/man + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/dracut/PKGBUILD b/x86_64/core/dracut/PKGBUILD new file mode 100644 index 0000000..b1340bb --- /dev/null +++ b/x86_64/core/dracut/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=dracut +pkgver=056 +pkgrel=1 +arch=('x86_64') +depends=(cpio sed bash coreutils lvm2 filesystem findutils grep gzip kmod pkgconf + procps-ng binutils sed systemd util-linux xz) +source=(https://kernel.org/pub/linux/utils/boot/$pkgname/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr \ + --bindir=/bin \ + --libexecdir=/usr/lib + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/duktape/PKGBUILD b/x86_64/core/duktape/PKGBUILD new file mode 100644 index 0000000..bd1afa3 --- /dev/null +++ b/x86_64/core/duktape/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=duktape +pkgver=2.6.0 +pkgrel=2 +arch=('x86_64') +makedepends=(setconf) +depends=(glibc) +source=(https://duktape.org/duktape-$pkgver.tar.xz + duktape.pc) + +prepare() { + cd $pkgname-$pkgver + + mv Makefile.sharedlibrary Makefile + sed 's/-Wall -Wextra/$(CFLAGS)/g' -i Makefile + setconf Makefile INSTALL_PREFIX "$pkgdir/usr" + setconf "$srcdir/duktape.pc" Version "$pkgver" +} + +build() { + CFLAGS="$CFLAGS -D DUK_USE_FASTINT -w" make -C $pkgname-$pkgver +} + +package() { + install -d "$pkgdir/usr/include" + install -Dm644 duktape.pc "$pkgdir/usr/lib/pkgconfig/duktape.pc" + + cd $pkgname-$pkgver + make install +} diff --git a/x86_64/core/duktape/duktape.pc b/x86_64/core/duktape/duktape.pc new file mode 100644 index 0000000..936ff93 --- /dev/null +++ b/x86_64/core/duktape/duktape.pc @@ -0,0 +1,10 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: duktape +Description: Embeddable Javascript engine +Version: 2.6.0 +Libs: -L${libdir} -lduktape +Cflags: -I${includedir} diff --git a/x86_64/core/e2fsprogs/PKGBUILD b/x86_64/core/e2fsprogs/PKGBUILD new file mode 100644 index 0000000..7d60b0c --- /dev/null +++ b/x86_64/core/e2fsprogs/PKGBUILD @@ -0,0 +1,34 @@ +pkgname=e2fsprogs +pkgver=1.46.5 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(systemd util-linux fuse2) +source=(https://www.kernel.org/pub/linux/kernel/people/tytso/$pkgname/v$pkgver/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + mkdir -vp build + cd build + + ../configure --prefix=/usr \ + --bindir=/bin \ + --with-root-prefix="" \ + --enable-elf-shlibs \ + --disable-libblkid \ + --disable-libuuid \ + --disable-uuidd \ + --disable-fsck + + make +} +package() { + cd $pkgname-$pkgver + cd build + + make DESTDIR=$pkgdir install + make DESTDIR=$pkgdir install-libs + + chmod -v u+w $pkgdir/usr/lib/{libcom_err,libe2p,libext2fs,libss}.a +} diff --git a/x86_64/core/earlyoom/PKGBUILD b/x86_64/core/earlyoom/PKGBUILD new file mode 100644 index 0000000..33f0725 --- /dev/null +++ b/x86_64/core/earlyoom/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=earlyoom +pkgver=1.7 +pkgrel=1 +arch=('x86_64') +depends=(glibc systembus-notify systemd) +makedepends=(gcc) +install=earlyoom.install +source=(https://github.com/rfjakob/$pkgname/archive/v$pkgver/$pkgname-$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + sed "/systemctl|chcon/d" -ri Makefile + sed '/^DynamicUser=/a SupplementaryGroups=proc' -i earlyoom.service.in + sed 's;^EARLYOOM_ARGS="(.*)";EARLYOOM_ARGS="\1 -n --avoid '\''(^|/)(init|systemd|Xorg|sshd)$'\''";' -ri earlyoom.default +} + +build() { + cd $pkgname-$pkgver + + make \ + PREFIX=/usr \ + SYSTEMDUNITDIR=/usr/lib/systemd/system \ + VERSION=$pkgver \ + earlyoom +} + +package() { + cd $pkgname-$pkgver + + make \ + DESTDIR=$pkgdir \ + PREFIX=/usr \ + SYSTEMDUNITDIR=/usr/lib/systemd/system \ + install +} diff --git a/x86_64/core/earlyoom/earlyoom.install b/x86_64/core/earlyoom/earlyoom.install new file mode 100644 index 0000000..a0716df --- /dev/null +++ b/x86_64/core/earlyoom/earlyoom.install @@ -0,0 +1,14 @@ +post_upgrade() { + post_install +} + +post_install() { + echo " " + echo "[ NOTICE ]: EarlyOOM is enabled by default on drunk!" + echo "[ NOTICE ]: To disable it use 'systemctl disable earlyoom'" + systemctl enable earlyoom + sleep 1 + systemctl start earlyoom + + echo " " +} diff --git a/x86_64/core/erofs-utils/PKGBUILD b/x86_64/core/erofs-utils/PKGBUILD new file mode 100644 index 0000000..c0ff555 --- /dev/null +++ b/x86_64/core/erofs-utils/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=erofs-utils +pkgver=1.4 +pkgrel=2 +arch=('x86_64') +depends=(glibc lz4) +makedepends=(util-linux) +source=(https://git.kernel.org/pub/scm/linux/kernel/git/xiang/${pkgname}.git/snapshot/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./autogen.sh + ./configure --prefix=/usr \ + --bindir=/bin \ + --sysconfdir=/etc + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/expat/PKGBUILD b/x86_64/core/expat/PKGBUILD new file mode 100644 index 0000000..dd94fd3 --- /dev/null +++ b/x86_64/core/expat/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=expat +pkgver=2.4.4 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +source=(https://sourceforge.net/projects/expat/files/expat/$pkgver/expat-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + # fix a problem with the regression tests + sed -i 's|usr/bin/env |bin/|' run.sh.in + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/file/PKGBUILD b/x86_64/core/file/PKGBUILD new file mode 100644 index 0000000..9f1fef3 --- /dev/null +++ b/x86_64/core/file/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=file +pkgver=5.41 +pkgrel=1 +arch=('x86_64') +depends=(glibc zlib xz bzip2 libseccomp) +source=(ftp://ftp.astron.com/pub/$pkgname/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/filesystem/PKGBUILD b/x86_64/core/filesystem/PKGBUILD new file mode 100644 index 0000000..e92e126 --- /dev/null +++ b/x86_64/core/filesystem/PKGBUILD @@ -0,0 +1,88 @@ +pkgname=filesystem +pkgver=1 +pkgrel=8 +arch=('x86_64') +backup=(etc/dircolors.sh + etc/extrapaths.sh + etc/fstab + etc/hostname + etc/hosts + etc/i18n.sh + etc/inputrc + etc/profile + etc/profile.skel + etc/readline.sh + etc/resolv.conf + etc/shells + etc/umask.sh + etc/usb.conf + etc/passwd + etc/group + etc/issue) +source=(dircolors.sh + extrapaths.sh + fstab + hostname + hosts + i18n.sh + inputrc + profile + profile.skel + readline.sh + resolv.conf + shells + umask.sh + usb.conf + passwd + group + issue) + +build() { + echo "Nothing here to do..." +} + +package() { + mkdir -pv $pkgdir/{bin,boot,etc/{opt,sysconfig},home,lib/firmware,mnt,opt} + mkdir -pv $pkgdir/{media/{floppy,cdrom},sbin,srv,var} + install -dv -m 0750 $pkgdir/root + install -dv -m 1777 $pkgdir/tmp /var/tmp + mkdir -pv $pkgdir/usr/{,local/}{bin,include,lib,sbin,src} + ln -sf lib $pkgdir/usr/lib64 + mkdir -pv $pkgdir/usr/{,local/}share/{color,dict,doc,info,locale,man} + mkdir -v $pkgdir/usr/{,local/}share/{misc,terminfo,zoneinfo} + mkdir -v $pkgdir/usr/libexec + mkdir -pv $pkgdir/usr/{,local/}share/man/man{1..8} + mkdir -v $pkgdir/usr/lib/pkgconfig + + mkdir -v $pkgdir/var/{log,mail,spool} + ln -sv /run $pkgdir/var/run + ln -sv /run/lock $pkgdir/var/lock + mkdir -pv $pkgdir/var/{opt,cache,lib/{color,misc,locate},local} + + install --directory --mode=0755 --owner=root --group=root $pkgdir/etc/profile.d + install --directory --mode=0755 --owner=root --group=root $pkgdir/etc/bash_completion.d + dircolors -p > $pkgdir/etc/dircolors + + install -dm0755 -d $pkgdir/etc/modprobe.d + install -m0644 usb.conf $pkgdir/etc/modprobe.d + + # profile.d + install -d $pkgdir/etc/profile.d + for i in *.sh; do + install -m0755 $i $pkgdir/etc/profile.d + done + + # skel + install -d $pkgdir/etc/skel + for s in *.skel; do + install -m0644 $s $pkgdir/etc/skel/.${s/.skel/} + done + + # /etc + install -d $pkgdir/etc + for p in profile shells resolv.conf inputrc fstab hostname hosts passwd group issue; do + install -m0644 $p $pkgdir/etc + done + + ln -s /proc/self/mounts $pkgdir/etc/mtab +} diff --git a/x86_64/core/filesystem/bash_completion.sh b/x86_64/core/filesystem/bash_completion.sh new file mode 100644 index 0000000..4ea3521 --- /dev/null +++ b/x86_64/core/filesystem/bash_completion.sh @@ -0,0 +1,34 @@ +# Begin /etc/profile.d/bash_completion.sh +# Import bash completion scripts + +# If the bash-completion package is installed, use its configuration instead +if [ -f /usr/share/bash-completion/bash_completion ]; then + + # Check for interactive bash and that we haven't already been sourced. + if [ -n "${BASH_VERSION-}" -a -n "${PS1-}" -a -z "${BASH_COMPLETION_VERSINFO-}" ]; then + + # Check for recent enough version of bash. + if [ ${BASH_VERSINFO[0]} -gt 4 ] || \ + [ ${BASH_VERSINFO[0]} -eq 4 -a ${BASH_VERSINFO[1]} -ge 1 ]; then + [ -r "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion" ] && \ + . "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion" + if shopt -q progcomp && [ -r /usr/share/bash-completion/bash_completion ]; then + # Source completion code. + . /usr/share/bash-completion/bash_completion + fi + fi + fi + +else + + # bash-completions are not installed, use only bash completion directory + if shopt -q progcomp; then + for script in /etc/bash_completion.d/* ; do + if [ -r $script ] ; then + . $script + fi + done + fi +fi + +# End /etc/profile.d/bash_completion.sh diff --git a/x86_64/core/filesystem/dircolors.sh b/x86_64/core/filesystem/dircolors.sh new file mode 100644 index 0000000..f703551 --- /dev/null +++ b/x86_64/core/filesystem/dircolors.sh @@ -0,0 +1,11 @@ +# Setup for /bin/ls and /bin/grep to support color, the alias is in /etc/bashrc. +if [ -f "/etc/dircolors" ] ; then + eval $(dircolors -b /etc/dircolors) +fi + +if [ -f "$HOME/.dircolors" ] ; then + eval $(dircolors -b $HOME/.dircolors) +fi + +alias ls='ls --color=auto' +alias grep='grep --color=auto' diff --git a/x86_64/core/filesystem/extrapaths.sh b/x86_64/core/filesystem/extrapaths.sh new file mode 100644 index 0000000..aef885b --- /dev/null +++ b/x86_64/core/filesystem/extrapaths.sh @@ -0,0 +1,13 @@ +if [ -d /usr/local/lib/pkgconfig ] ; then + pathappend /usr/local/lib/pkgconfig PKG_CONFIG_PATH +fi +if [ -d /usr/local/bin ]; then + pathprepend /usr/local/bin +fi +if [ -d /usr/local/sbin -a $EUID -eq 0 ]; then + pathprepend /usr/local/sbin +fi + +# Set some defaults before other applications add to these paths. +pathappend /usr/share/man MANPATH +pathappend /usr/share/info INFOPATH diff --git a/x86_64/core/filesystem/fstab b/x86_64/core/filesystem/fstab new file mode 100644 index 0000000..33d366c --- /dev/null +++ b/x86_64/core/filesystem/fstab @@ -0,0 +1,12 @@ +# Begin /etc/fstab + +# file system mount-point type options dump fsck +# order + +#/dev/ / defaults 1 1 +#/dev/ swap swap pri=1 0 0 +#/dev/ /boot/efi vfat defaults 0 2 +devpts /dev/pts devpts gid=5,mode=620 0 0 +tmpfs /run tmpfs defaults 0 0 + +# End /etc/fstab diff --git a/x86_64/core/filesystem/group b/x86_64/core/filesystem/group new file mode 100644 index 0000000..87b442b --- /dev/null +++ b/x86_64/core/filesystem/group @@ -0,0 +1,24 @@ +root:x:0: +bin:x:1:daemon +sys:x:2: +kmem:x:3: +tape:x:4: +tty:x:5: +daemon:x:6: +floppy:x:7: +disk:x:8: +lp:x:9: +dialout:x:10: +audio:x:11: +video:x:12: +utmp:x:13: +usb:x:14: +cdrom:x:15: +adm:x:16: +messagebus:x:18: +input:x:24: +mail:x:34: +kvm:x:61: +wheel:x:97: +nogroup:x:99: +users:x:999: diff --git a/x86_64/core/filesystem/hostname b/x86_64/core/filesystem/hostname new file mode 100644 index 0000000..a20c088 --- /dev/null +++ b/x86_64/core/filesystem/hostname @@ -0,0 +1 @@ +drunk diff --git a/x86_64/core/filesystem/hosts b/x86_64/core/filesystem/hosts new file mode 100644 index 0000000..a126a53 --- /dev/null +++ b/x86_64/core/filesystem/hosts @@ -0,0 +1,4 @@ +# /etc/hosts + +127.0.0.1 localhost +::1 localhost diff --git a/x86_64/core/filesystem/i18n.sh b/x86_64/core/filesystem/i18n.sh new file mode 100644 index 0000000..5cad8c2 --- /dev/null +++ b/x86_64/core/filesystem/i18n.sh @@ -0,0 +1,2 @@ +# Set up i18n variables +#export LANG=_.<@modifiers> diff --git a/x86_64/core/filesystem/inputrc b/x86_64/core/filesystem/inputrc new file mode 100644 index 0000000..3f3cf46 --- /dev/null +++ b/x86_64/core/filesystem/inputrc @@ -0,0 +1,41 @@ +# Begin /etc/inputrc +# Modified by Chris Lynn + +# Allow the command prompt to wrap to the next line +set horizontal-scroll-mode Off + +# Enable 8bit input +set meta-flag On +set input-meta On + +# Turns off 8th bit stripping +set convert-meta Off + +# Keep the 8th bit for display +set output-meta On + +# none, visible or audible +set bell-style none + +# All of the following map the escape sequence of the value +# contained in the 1st argument to the readline specific functions +"\eOd": backward-word +"\eOc": forward-word + +# for linux console +"\e[1~": beginning-of-line +"\e[4~": end-of-line +"\e[5~": beginning-of-history +"\e[6~": end-of-history +"\e[3~": delete-char +"\e[2~": quoted-insert + +# for xterm +"\eOH": beginning-of-line +"\eOF": end-of-line + +# for Konsole +"\e[H": beginning-of-line +"\e[F": end-of-line + +# End /etc/inputrc diff --git a/x86_64/core/filesystem/issue b/x86_64/core/filesystem/issue new file mode 100644 index 0000000..3bffcdd --- /dev/null +++ b/x86_64/core/filesystem/issue @@ -0,0 +1,2 @@ +[ DRUNK ]: \r (\l) + diff --git a/x86_64/core/filesystem/passwd b/x86_64/core/filesystem/passwd new file mode 100644 index 0000000..757a665 --- /dev/null +++ b/x86_64/core/filesystem/passwd @@ -0,0 +1,5 @@ +root:x:0:0:root:/root:/bin/bash +bin:x:1:1:bin:/dev/null:/bin/false +daemon:x:6:6:Daemon User:/dev/null:/bin/false +messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false +nobody:x:99:99:Unprivileged User:/dev/null:/bin/false diff --git a/x86_64/core/filesystem/profile b/x86_64/core/filesystem/profile new file mode 100644 index 0000000..d7337b7 --- /dev/null +++ b/x86_64/core/filesystem/profile @@ -0,0 +1,77 @@ +# Begin /etc/profile +# Written for Beyond Linux From Scratch +# by James Robertson +# modifications by Dagmar d'Surreal + +# System wide environment variables and startup programs. + +# System wide aliases and functions should go in /etc/bashrc. Personal +# environment variables and startup programs should go into +# ~/.bash_profile. Personal aliases and functions should go into +# ~/.bashrc. + +# Functions to help us manage paths. Second argument is the name of the +# path variable to be modified (default: PATH) +pathremove () { + local IFS=':' + local NEWPATH + local DIR + local PATHVARIABLE=${2:-PATH} + for DIR in ${!PATHVARIABLE} ; do + if [ "$DIR" != "$1" ] ; then + NEWPATH=${NEWPATH:+$NEWPATH:}$DIR + fi + done + export $PATHVARIABLE="$NEWPATH" +} + +pathprepend () { + pathremove $1 $2 + local PATHVARIABLE=${2:-PATH} + export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}" +} + +pathappend () { + pathremove $1 $2 + local PATHVARIABLE=${2:-PATH} + export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1" +} + +export -f pathremove pathprepend pathappend + +# Set the initial path +export PATH=/bin:/usr/bin:/usr/local/bin + +if [ $EUID -eq 0 ] ; then + pathappend /sbin:/usr/sbin:/usr/local/sbin + unset HISTFILE +fi + +# Setup some environment variables. +export HISTSIZE=1000 +export HISTIGNORE="&:[bf]g:exit" + +# Set some defaults for graphical systems +export XDG_DATA_DIRS=${XDG_DATA_DIRS:-/usr/share/} +export XDG_CONFIG_DIRS=${XDG_CONFIG_DIRS:-/etc/xdg/} +export XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR:-/tmp/xdg-$USER} + +# Setup a red prompt for root and a green one for users. +NORMAL="\[\e[0m\]" +RED="\[\e[1;31m\]" +GREEN="\[\e[1;32m\]" +if [[ $EUID == 0 ]] ; then + PS1="$RED\u [ $NORMAL\w$RED ]# $NORMAL" +else + PS1="$GREEN\u [ $NORMAL\w$GREEN ]\$ $NORMAL" +fi + +for script in /etc/profile.d/*.sh ; do + if [ -r $script ] ; then + . $script + fi +done + +unset script RED GREEN NORMAL + +# End /etc/profile diff --git a/x86_64/core/filesystem/profile.skel b/x86_64/core/filesystem/profile.skel new file mode 100644 index 0000000..9317dcb --- /dev/null +++ b/x86_64/core/filesystem/profile.skel @@ -0,0 +1,11 @@ +# Begin ~/.profile +# Personal environment variables and startup programs. + +if [ -d "$HOME/bin" ] ; then + pathprepend $HOME/bin +fi + +# Set up user specific i18n variables +#export LANG=_.<@modifiers> + +# End ~/.profile diff --git a/x86_64/core/filesystem/readline.sh b/x86_64/core/filesystem/readline.sh new file mode 100644 index 0000000..816d7c1 --- /dev/null +++ b/x86_64/core/filesystem/readline.sh @@ -0,0 +1,5 @@ +# Setup the INPUTRC environment variable. +if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then + INPUTRC=/etc/inputrc +fi +export INPUTRC diff --git a/x86_64/core/filesystem/resolv.conf b/x86_64/core/filesystem/resolv.conf new file mode 100644 index 0000000..c69c152 --- /dev/null +++ b/x86_64/core/filesystem/resolv.conf @@ -0,0 +1,4 @@ +# /etc/resolv.conf + +nameserver 8.8.8.8 +nameserver 8.8.4.4 diff --git a/x86_64/core/filesystem/shells b/x86_64/core/filesystem/shells new file mode 100644 index 0000000..de0249b --- /dev/null +++ b/x86_64/core/filesystem/shells @@ -0,0 +1,2 @@ +/bin/sh +/bin/bash diff --git a/x86_64/core/filesystem/umask.sh b/x86_64/core/filesystem/umask.sh new file mode 100644 index 0000000..191d324 --- /dev/null +++ b/x86_64/core/filesystem/umask.sh @@ -0,0 +1,6 @@ +# By default, the umask should be set. +if [ "$(id -gn)" = "$(id -un)" -a $EUID -gt 99 ] ; then + umask 002 +else + umask 022 +fi diff --git a/x86_64/core/filesystem/usb.conf b/x86_64/core/filesystem/usb.conf new file mode 100644 index 0000000..0d597e1 --- /dev/null +++ b/x86_64/core/filesystem/usb.conf @@ -0,0 +1,6 @@ +# Begin /etc/modprobe.d/usb.conf + +install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true +install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true + +# End /etc/modprobe.d/usb.conf diff --git a/x86_64/core/findutils/PKGBUILD b/x86_64/core/findutils/PKGBUILD new file mode 100644 index 0000000..9b2d7cf --- /dev/null +++ b/x86_64/core/findutils/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=findutils +pkgver=4.9.0 +pkgrel=1 +arch=('x86_64') +depends=(glibc bash) +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --localstatedir=/var/lib/locate + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + + mkdir -pv $pkgdir/bin + mv -v $pkgdir/usr/bin/find $pkgdir/bin + sed -i 's|find:=${BINDIR}|find:=/bin|' $pkgdir/usr/bin/updatedb +} diff --git a/x86_64/core/fontconfig/40-fontconfig-config.hook b/x86_64/core/fontconfig/40-fontconfig-config.hook new file mode 100644 index 0000000..41c058c --- /dev/null +++ b/x86_64/core/fontconfig/40-fontconfig-config.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Remove +Target = usr/share/fontconfig/conf.default/* + +[Action] +Description = Updating fontconfig configuration... +When = PostTransaction +Exec = /usr/share/libalpm/scripts/40-fontconfig-config /etc/fonts/conf.d +NeedsTargets diff --git a/x86_64/core/fontconfig/40-fontconfig-config.script b/x86_64/core/fontconfig/40-fontconfig-config.script new file mode 100644 index 0000000..132f0f9 --- /dev/null +++ b/x86_64/core/fontconfig/40-fontconfig-config.script @@ -0,0 +1,12 @@ +#!/bin/bash + +while read -r f; do + link="${1:?}/${f##*/}" + if [[ -e $f && ! -e $link ]]; then + ln -sT "/$f" "$link" + elif [[ ! -e $f && -L $link ]]; then + rm -f "$link" + fi +done + +# vim:set sw=2 et: diff --git a/x86_64/core/fontconfig/PKGBUILD b/x86_64/core/fontconfig/PKGBUILD new file mode 100644 index 0000000..dcbed1d --- /dev/null +++ b/x86_64/core/fontconfig/PKGBUILD @@ -0,0 +1,61 @@ +pkgname=fontconfig +pkgver=2.14.0 +pkgrel=2 +arch=('x86_64') +depends=(glibc libpng expat zstd bzip2 readline freetype2) +source=(https://freedesktop.org/software/$pkgname/release/$pkgname-$pkgver.tar.gz + 40-fontconfig-config.script + 40-fontconfig-config.hook + fontconfig.hook) +backup=(etc/fonts/fonts.conf) +install=fontconfig.install + +prepare() { + mkdir -p $pkgname-$pkgver/build + + cd $pkgname-$pkgver + autoreconf -fvi +} + +build() { + cd $pkgname-$pkgver/build + + # NOTICE: Using other methods than configure will not produce .la files that some source code's need to be compiled ( VLC as a example that searches for libfontconfig.la ) + + #meson \ + #--prefix=/usr \ + #--sysconfdir=/etc \ + #--localstatedir=/var \ + #-D doc-txt=disabled \ + #-D doc-pdf=disabled \ + #-D doc-html=disabled \ + #.. + + #ninja + + ./../configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver/build + + export FONTCONFIG_PATH=/etc/fonts + #DESTDIR=$pkgdir ninja install + make DESTDIR=$pkgdir install + + cd $srcdir + + # Handle conf.d using the hook to avoid overwriting the symlinks on upgrade + mkdir -p "$pkgdir/usr/share/fontconfig/conf.default" + for _f in "$pkgdir"/etc/fonts/conf.d/*.conf; do + ln -sfr "$pkgdir"/usr/share/fontconfig/conf.{avail,default}/"${_f##*/}" + rm -f "$_f" + done + + install -Dt "$pkgdir/usr/share/libalpm/hooks" -m644 *.hook + install -D 40-fontconfig-config.script \ + "$pkgdir/usr/share/libalpm/scripts/40-fontconfig-config" +} diff --git a/x86_64/core/fontconfig/fontconfig.hook b/x86_64/core/fontconfig/fontconfig.hook new file mode 100644 index 0000000..c1d93b4 --- /dev/null +++ b/x86_64/core/fontconfig/fontconfig.hook @@ -0,0 +1,14 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = etc/fonts/conf.d/* +Target = usr/share/fonts/* +Target = usr/share/fontconfig/conf.avail/* +Target = usr/share/fontconfig/conf.default/* + +[Action] +Description = Updating fontconfig cache... +When = PostTransaction +Exec = /usr/bin/fc-cache -s diff --git a/x86_64/core/fontconfig/fontconfig.install b/x86_64/core/fontconfig/fontconfig.install new file mode 100644 index 0000000..a135f73 --- /dev/null +++ b/x86_64/core/fontconfig/fontconfig.install @@ -0,0 +1,24 @@ +post_upgrade() { + if (( $(vercmp $2 2:2.13.93-1) < 0 )); then + echo "Creating fontconfig configuration..." + find usr/share/fontconfig/conf.default -mindepth 1 | + /usr/share/libalpm/scripts/40-fontconfig-config /etc/fonts/conf.d + + (( $(vercmp $2 0) > 0 )) && cat <>> If you have configured NoExtract to prevent symlinks in /etc/fonts/conf.d/ + from being restored, these symlinks have been recreated one last time. You + can now delete the symlinks and remove the paths from NoExtract and they + will not be created again. + +END + fi + + # a full forced directory scan is required here + echo "Rebuilding fontconfig cache..." + /usr/bin/fc-cache -rs +} + +post_install() { + post_upgrade $1 0 +} diff --git a/x86_64/core/freetype2/PKGBUILD b/x86_64/core/freetype2/PKGBUILD new file mode 100644 index 0000000..f1af3cb --- /dev/null +++ b/x86_64/core/freetype2/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=freetype2 +pkgver=2.11.1 +pkgrel=1 +arch=('x86_64') +depends=(zlib bzip2 bash libpng harfbuzz brotli) +source=(https://downloads.sourceforge.net/freetype/freetype-$pkgver.tar.xz) + +build() { + cd freetype-$pkgver + + sed -ri "s:.*(AUX_MODULES.*valid):\1:" modules.cfg + + sed -r "s:.*(#.*SUBPIXEL_RENDERING) .*:\1:" \ + -i include/freetype/config/ftoption.h + + ./configure \ + --prefix=/usr \ + --enable-freetype-config + + make +} + +package() { + cd freetype-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/fuse2/PKGBUILD b/x86_64/core/fuse2/PKGBUILD new file mode 100644 index 0000000..cc10f34 --- /dev/null +++ b/x86_64/core/fuse2/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=fuse2 +pkgver=2.9.9 +pkgrel=2 +arch=('x86_64') +depends=(glibc) +source=(https://github.com/libfuse/libfuse/releases/download/fuse-$pkgver/fuse-$pkgver.tar.gz) + +build() { + cd fuse-$pkgver + + ./configure \ + --prefix=/usr \ + INIT_D_PATH=/tmp/init.d + + make +} + +package() { + cd fuse-$pkgver + make DESTDIR=$pkgdir install + + install -d $pkgdir/lib + mv -v $pkgdir/usr/lib/libfuse.so.* $pkgdir/lib + ln -sfv ../../lib/libfuse.so.2.9.9 $pkgdir/usr/lib/libfuse.so + rm -rf $pkgdir/{tmp,dev} +} diff --git a/x86_64/core/fuse2/update b/x86_64/core/fuse2/update new file mode 100644 index 0000000..e3335db --- /dev/null +++ b/x86_64/core/fuse2/update @@ -0,0 +1,3 @@ +getver_fuse2() { + getver_github | grep ^2 +} diff --git a/x86_64/core/gawk/PKGBUILD b/x86_64/core/gawk/PKGBUILD new file mode 100644 index 0000000..26cc85a --- /dev/null +++ b/x86_64/core/gawk/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=gawk +pkgver=5.1.1 +pkgrel=1 +arch=('x86_64') +depends=(bash glibc mpfr) +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + # ensure some unneeded files are not installed + sed -i 's/extras//' Makefile.in + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/gcc/PKGBUILD b/x86_64/core/gcc/PKGBUILD new file mode 100644 index 0000000..e37edc2 --- /dev/null +++ b/x86_64/core/gcc/PKGBUILD @@ -0,0 +1,72 @@ +pkgname=gcc +pkgver=12.1.0 +pkgrel=2 +arch=('x86_64') +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver/$pkgname-$pkgver.tar.gz) +options=(!emptydirs !lto !strip) +depends=(binutils mpfr mpc glibc libxcrypt zstd flex) + +prepare() { + cd $pkgname-$pkgver + + # link isl for in-tree build + ln -sf ../isl-${_islver} isl + + # Do not run fixincludes + sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in + + sed -e '/m64=/s/lib64/lib/' \ + -i.orig gcc/config/i386/t-linux64 + + mkdir -pv build + cd build + + SED=sed \ + ../configure \ + --prefix=/usr \ + --enable-languages=c,c++,fortran,go,lto,objc,obj-c++,d \ + --with-system-zlib \ + --enable-multilib \ + --enable-lto \ + --enable-default-pie \ + --enable-plugin \ + --enable-shared \ + --enable-threads=posix \ + --disable-werror \ + --with-arch_32=i686 +} + +build() { + cd $pkgname-$pkgver/build + + #make -j4 +} + +package() { + cd $pkgname-$pkgver + cd build + + # Lets use install-strip so we get pre-stripped binaries + make -j1 DESTDIR=$pkgdir install-strip + + rm -rf $pkgdir/usr/lib/gcc/$(gcc -dumpmachine)/$pkgver/include-fixed/bits/ + + chown -v -R root:root \ + $pkgdir/usr/lib/gcc/*linux-gnu/$pkgver/include{,-fixed} + + mkdir -p $pkgdir/lib + ln -sfv ../usr/bin/cpp $pkgdir/lib + + ln -sfv gcc $pkgdir/usr/bin/cc + + install -v -dm755 $pkgdir/usr/lib/bfd-plugins + ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/$pkgver/liblto_plugin.so \ + $pkgdir/usr/lib/bfd-plugins/ + + mkdir -pv $pkgdir/usr/share/gdb/auto-load/usr/lib + mv -v $pkgdir/usr/lib/*gdb.py $pkgdir/usr/share/gdb/auto-load/usr/lib + + # Move / Rename some things ( mainly as of conflicts with other pkg's ) + mv $pkgdir/usr/bin/go $pkgdir/usr/bin/gcc-go + mv $pkgdir/usr/bin/gofmt $pkgdir/usr/bin/gcc-gofmt +} diff --git a/x86_64/core/gettext/PKGBUILD b/x86_64/core/gettext/PKGBUILD new file mode 100644 index 0000000..0d4507c --- /dev/null +++ b/x86_64/core/gettext/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=gettext +pkgver=0.21 +pkgrel=2 +arch=('x86_64') +depends=(bash glib2 glibc) +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + # suppress two invocations of test-lock which on some machines can loop forever + sed -i '/^TESTS =/d' gettext-runtime/tests/Makefile.in + sed -i 's/test-lock..EXEEXT.//' gettext-tools/gnulib-tests/Makefile.in + + ./configure \ + --prefix=/usr +} + +package() { + cd $pkgname-$pkgver + make || make -j1 + make -j1 DESTDIR=$pkgdir install + + chmod -v 0755 $pkgdir/usr/lib/preloadable_libintl.so +} diff --git a/x86_64/core/glib2/PKGBUILD b/x86_64/core/glib2/PKGBUILD new file mode 100644 index 0000000..444ba4e --- /dev/null +++ b/x86_64/core/glib2/PKGBUILD @@ -0,0 +1,47 @@ +pkgname=glib2 +pkgver=2.72.2 +pkgrel=1 +arch=('x86_64') +depends=('libffi' 'pcre' 'util-linux' 'zlib' 'elfutils' 'libxslt' 'libxml2') +makedepends=('gtk-doc' 'python3-pip' 'dbus' 'gettext' 'git' 'meson' 'docbook-xml' 'docbook-xsl') +source=(git+https://gitlab.gnome.org/GNOME/glib.git#tag=$pkgver + noisy-glib-compile-schemas.diff + glib-compile-schemas.hook + gio-querymodules.{hook,script}) + +prepare() { + cd glib + git apply -3 ../noisy-glib-compile-schemas.diff + + pip3 install pygments +} + +build() { + CFLAGS+=" -DG_DISABLE_CAST_CHECKS" + + meson glib build \ + -D glib_debug=disabled \ + -D selinux=disabled \ + -D man=false \ + -D gtk_doc=true \ + --prefix=/usr \ + --libdir=/usr/lib + + meson compile -C build +} + +package() { + meson install -C build --destdir $pkgdir + + python3 -m compileall -d /usr/share/glib-2.0/codegen \ + $pkgdir/usr/share/glib-2.0/codegen + + python3 -O -m compileall -d /usr/share/glib-2.0/codegen \ + $pkgdir/usr/share/glib-2.0/codegen + + mkdir -p $pkgdir/usr/lib/pkgconfig + cp -f build/meson-private/*.pc $pkgdir/usr/lib/pkgconfig + + install -Dt $pkgdir/usr/share/libalpm/hooks/ -m644 *.hook + install -D gio-querymodules.script $pkgdir/usr/share/libalpm/scripts/gio-querymodules +} diff --git a/x86_64/core/glib2/PKGBUILD.save b/x86_64/core/glib2/PKGBUILD.save new file mode 100644 index 0000000..db31174 --- /dev/null +++ b/x86_64/core/glib2/PKGBUILD.save @@ -0,0 +1,45 @@ +pkgname=glib2 +pkgver=2.70.2 +pkgrel=5 +arch=('x86_64') +depends=('glibc' 'libxslt') +makedepends=('gtk-doc') +source=(git+https://gitlab.gnome.org/GNOME/glib.git#tag=$pkgver + noisy-glib-compile-schemas.diff + glib-compile-schemas.hook + gio-querymodules.{hook,script}) + +prepare() { + cd glib + git apply -3 ../noisy-glib-compile-schemas.diff +} + +build() { + CFLAGS+=" -DG_DISABLE_CAST_CHECKS" + + meson glib build \ + -D glib_debug=disabled \ + -D selinux=disabled \ + -D man=false \ + -D gtk_doc=true \ + --prefix=/usr \ + --libdir=/usr/lib + + meson compile -C build +} + +package() { + meson install -C build --destdir $pkgdir + + python3 -m compileall -d /usr/share/glib-2.0/codegen \ + $pkgdir/usr/share/glib-2.0/codegen + + python3 -O -m compileall -d /usr/share/glib-2.0/codegen \ + $pkgdir/usr/share/glib-2.0/codegen + + mkdir -p $pkgdir/usr/lib/pkgconfig + cp -f build/meson-private/*.pc $pkgdir/usr/lib/pkgconfig + + install -Dt $pkgdir/usr/share/libalpm/hooks/ -m644 *.hook + install -D gio-querymodules.script $pkgdir/usr/share/libalpm/scripts/gio-querymodules +} diff --git a/x86_64/core/glib2/gio-querymodules.hook b/x86_64/core/glib2/gio-querymodules.hook new file mode 100644 index 0000000..09b0c2f --- /dev/null +++ b/x86_64/core/glib2/gio-querymodules.hook @@ -0,0 +1,12 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/lib/gio/modules/ + +[Action] +Description = Updating GIO module cache... +When = PostTransaction +Exec = /usr/share/libalpm/scripts/gio-querymodules +NeedsTargets diff --git a/x86_64/core/glib2/gio-querymodules.script b/x86_64/core/glib2/gio-querymodules.script new file mode 100644 index 0000000..5c21877 --- /dev/null +++ b/x86_64/core/glib2/gio-querymodules.script @@ -0,0 +1,7 @@ +#!/bin/bash + +while read -r d; do + [[ -d $d ]] || continue + gio-querymodules "$d" + rmdir --ignore-fail-on-non-empty "$d" +done diff --git a/x86_64/core/glib2/glib-compile-schemas.hook b/x86_64/core/glib2/glib-compile-schemas.hook new file mode 100644 index 0000000..974549d --- /dev/null +++ b/x86_64/core/glib2/glib-compile-schemas.hook @@ -0,0 +1,12 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/share/glib-2.0/schemas/*.gschema.xml +Target = usr/share/glib-2.0/schemas/*.gschema.override + +[Action] +Description = Compiling GSettings XML schema files... +When = PostTransaction +Exec = /usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas diff --git a/x86_64/core/glib2/noisy-glib-compile-schemas.diff b/x86_64/core/glib2/noisy-glib-compile-schemas.diff new file mode 100644 index 0000000..a21deee --- /dev/null +++ b/x86_64/core/glib2/noisy-glib-compile-schemas.diff @@ -0,0 +1,24 @@ +diff --git i/gio/glib-compile-schemas.c w/gio/glib-compile-schemas.c +index cfea042f8..1b2afe457 100644 +--- i/gio/glib-compile-schemas.c ++++ w/gio/glib-compile-schemas.c +@@ -1232,19 +1232,6 @@ parse_state_start_schema (ParseState *state, + return; + } + +- if (path && (g_str_has_prefix (path, "/apps/") || +- g_str_has_prefix (path, "/desktop/") || +- g_str_has_prefix (path, "/system/"))) +- { +- gchar *message = NULL; +- message = g_strdup_printf (_("Warning: Schema “%s” has path “%s”. " +- "Paths starting with " +- "“/apps/”, “/desktop/” or “/system/” are deprecated."), +- id, path); +- g_printerr ("%s\n", message); +- g_free (message); +- } +- + state->schema_state = schema_state_new (path, gettext_domain, + extends, extends_name, list_of); + diff --git a/x86_64/core/glibc/PKGBUILD b/x86_64/core/glibc/PKGBUILD new file mode 100644 index 0000000..ee95c36 --- /dev/null +++ b/x86_64/core/glibc/PKGBUILD @@ -0,0 +1,155 @@ +pkgname=glibc +pkgver=2.35 +pkgrel=4 +arch=('x86_64') +depends=(libxcrypt filesystem lib32-libxcrypt) +makedepends=(python3 bison m4) +options=(!strip emptydirs staticlibs) +backup=(etc/gai.conf + etc/locale.gen + etc/nscd.conf) +install=glibc.install +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + mkdir -pv build + cd build + + ../configure \ + --prefix=/usr \ + --disable-werror \ + --enable-add-ons \ + --enable-bind-now \ + --enable-cet \ + --enable-lock-elision \ + --enable-stack-protector=strong \ + --enable-stackguard-randomization \ + --enable-kernel=3.2 \ + --enable-stack-protector=strong \ + --with-headers=/usr/include \ + --disable-crypt \ + --enable-multi-arch \ + libc_cv_slibdir=/lib + + make + + mkdir -p ../build32 + cd ../build32 + CC="gcc -m32" \ + CXX="g++ -m32" \ + ../configure \ + --prefix=/usr \ + --disable-werror \ + --enable-kernel=3.2 \ + --enable-multi-arch \ + --enable-stack-protector=strong \ + --libdir=/usr/lib32 \ + --disable-crypt \ + --enable-add-ons \ + --libexecdir=/usr/lib32 \ + libc_cv_slibdir=/usr/lib32 \ + i686-pc-linux-gnu + + make + +} + +package() { + # 64bit install + cd $pkgname-$pkgver + cd build + + mkdir -p $pkgdir/lib64 + ln -sfv ../lib/ld-linux-x86-64.so.2 $pkgdir/lib64/ld-linux-x86-64.so.2 + ln -sfv ../lib/ld-linux-x86-64.so.2 $pkgdir/lib64/ld-lsb-x86-64.so.3 + + mkdir -p $pkgdir/etc + touch $pkgdir/etc/ld.so.conf + make install_root=$pkgdir install + + cp -v ../nscd/nscd.conf $pkgdir/etc/nscd.conf + mkdir -pv $pkgdir/var/cache/nscd + + mkdir -pv $pkgdir/usr/lib/locale + make install_root=$pkgdir localedata/install-locales -j2 + + # 32bit + cd ../build32 + + rm -rf DESTDIR + mkdir -p DESTDIR/usr/lib32/ + sleep 10 + + make install_root=$('pwd')/DESTDIR install + + install -vdm755 $pkgdir/usr/lib32 + install -vdm755 $pkgdir/include/gnu + install -vdm755 $pkgdir/etc/ld.so.conf.d + + find DESTDIR/usr/include -type f -not -name '*-32.h' -delete + cp -rf DESTDIR/usr/include/* $pkgdir/usr/include/ + + mkdir -vp $pkgdir/usr/lib32/ + cp -Rv DESTDIR/usr/lib32/* $pkgdir/usr/lib32/ + + # Provided by libxcrypt; keep the old shared library for backwards compatibility + rm -f "$pkgdir"/usr/include/crypt.h "$pkgdir"/usr/{lib,lib32}/libcrypt.{a,so} + + mkdir -vp $pkgdir/etc/ld.so.conf.d + mkdir -vp $pkgdir/lib/ + + ln -sv ../usr/lib32/ld-linux.so.2 $pkgdir/lib/ld-linux.so.2 + ln -sv ../usr/lib32/ld-linux.so.2 $pkgdir/lib/ld-lsb.so.3 + ln -sv ../lib/locale $pkgdir/usr/lib32/locale + + mkdir -p $pkgdir/etc/ld.so.conf.d + echo "/usr/lib32" > "$pkgdir/etc/ld.so.conf.d/lib32-glibc.conf" + + cat > $pkgdir/etc/nsswitch.conf << "EOF" +# Begin /etc/nsswitch.conf + +passwd: files +group: files +shadow: files + +hosts: files dns +networks: files + +protocols: files +services: files +ethers: files +rpc: files + +# End /etc/nsswitch.conf +EOF + +cat > $pkgdir/etc/ld.so.conf << "EOF" +# Begin /etc/ld.so.conf +/usr/local/lib +/opt/lib + +EOF + +cat >> $pkgdir/etc/ld.so.conf << "EOF" +# Add an include directory +include /etc/ld.so.conf.d/*.conf + +EOF + mkdir -pv $pkgdir/etc/ld.so.conf.d + + # Stripping + if check_option 'debug' n; then + find "$pkgdir"/usr/bin -type f -executable -exec strip $STRIP_BINARIES {} + 2> /dev/null || true + find "$pkgdir"/usr/lib -name '*.a' -type f -exec strip $STRIP_STATIC {} + 2> /dev/null || true + + # Do not strip these for gdb and valgrind functionality, but strip the rest + find "$pkgdir"/usr/lib \ + -not -name 'ld-*.so' \ + -not -name 'libc-*.so' \ + -not -name 'libpthread-*.so' \ + -not -name 'libthread_db-*.so' \ + -name '*-*.so' -type f -exec strip $STRIP_SHARED {} + 2> /dev/null || true + fi +} diff --git a/x86_64/core/glibc/glibc-fhs-1.patch b/x86_64/core/glibc/glibc-fhs-1.patch new file mode 100644 index 0000000..4ac8d10 --- /dev/null +++ b/x86_64/core/glibc/glibc-fhs-1.patch @@ -0,0 +1,72 @@ +Submitted By: Armin K. +Date: 2013-02-11 +Initial Package Version: 2.17 +Upstream Status: Not Applicable +Origin: Self +Description: This patch removes references to /var/db directory which is not part + of FHS and replaces them with more suitable directories in /var + hierarchy - /var/cache/nscd for nscd and /var/lib/nss_db for nss_db. + +--- a/Makeconfig 2012-12-25 04:02:13.000000000 +0100 ++++ b/Makeconfig 2013-02-11 01:32:32.500667439 +0100 +@@ -250,7 +250,7 @@ + + # Directory for the database files and Makefile for nss_db. + ifndef vardbdir +-vardbdir = $(localstatedir)/db ++vardbdir = $(localstatedir)/lib/nss_db + endif + inst_vardbdir = $(install_root)$(vardbdir) + +--- a/nscd/nscd.h 2012-12-25 04:02:13.000000000 +0100 ++++ b/nscd/nscd.h 2013-02-11 01:32:32.500667439 +0100 +@@ -112,11 +112,11 @@ + + + /* Paths of the file for the persistent storage. */ +-#define _PATH_NSCD_PASSWD_DB "/var/db/nscd/passwd" +-#define _PATH_NSCD_GROUP_DB "/var/db/nscd/group" +-#define _PATH_NSCD_HOSTS_DB "/var/db/nscd/hosts" +-#define _PATH_NSCD_SERVICES_DB "/var/db/nscd/services" +-#define _PATH_NSCD_NETGROUP_DB "/var/db/nscd/netgroup" ++#define _PATH_NSCD_PASSWD_DB "/var/cache/nscd/passwd" ++#define _PATH_NSCD_GROUP_DB "/var/cache/nscd/group" ++#define _PATH_NSCD_HOSTS_DB "/var/cache/nscd/hosts" ++#define _PATH_NSCD_SERVICES_DB "/var/cache/nscd/services" ++#define _PATH_NSCD_NETGROUP_DB "/var/cache/nscd/netgroup" + + /* Path used when not using persistent storage. */ + #define _PATH_NSCD_XYZ_DB_TMP "/var/run/nscd/dbXXXXXX" +--- a/nss/db-Makefile 2012-12-25 04:02:13.000000000 +0100 ++++ b/nss/db-Makefile 2013-02-11 01:32:32.500667439 +0100 +@@ -22,7 +22,7 @@ + /etc/rpc /etc/services /etc/shadow /etc/gshadow \ + /etc/netgroup) + +-VAR_DB = /var/db ++VAR_DB = /var/lib/nss_db + + AWK = awk + MAKEDB = makedb --quiet +--- a/sysdeps/generic/paths.h 2012-12-25 04:02:13.000000000 +0100 ++++ b/sysdeps/generic/paths.h 2013-02-11 01:32:32.500667439 +0100 +@@ -68,7 +68,7 @@ + /* Provide trailing slash, since mostly used for building pathnames. */ + #define _PATH_DEV "/dev/" + #define _PATH_TMP "/tmp/" +-#define _PATH_VARDB "/var/db/" ++#define _PATH_VARDB "/var/lib/nss_db/" + #define _PATH_VARRUN "/var/run/" + #define _PATH_VARTMP "/var/tmp/" + +--- a/sysdeps/unix/sysv/linux/paths.h 2012-12-25 04:02:13.000000000 +0100 ++++ b/sysdeps/unix/sysv/linux/paths.h 2013-02-11 01:32:32.504000831 +0100 +@@ -68,7 +68,7 @@ + /* Provide trailing slash, since mostly used for building pathnames. */ + #define _PATH_DEV "/dev/" + #define _PATH_TMP "/tmp/" +-#define _PATH_VARDB "/var/db/" ++#define _PATH_VARDB "/var/lib/nss_db/" + #define _PATH_VARRUN "/var/run/" + #define _PATH_VARTMP "/var/tmp/" + diff --git a/x86_64/core/glibc/glibc.install b/x86_64/core/glibc/glibc.install new file mode 100644 index 0000000..c8f990b --- /dev/null +++ b/x86_64/core/glibc/glibc.install @@ -0,0 +1,3 @@ +post_upgrade() { + ldconfig -r . +} diff --git a/x86_64/core/gnu-efi/PKGBUILD b/x86_64/core/gnu-efi/PKGBUILD new file mode 100644 index 0000000..f67e6ce --- /dev/null +++ b/x86_64/core/gnu-efi/PKGBUILD @@ -0,0 +1,39 @@ +pkgname=gnu-efi +pkgver=3.0.14 +pkgrel=1 +pkgdesc="Develop EFI applications using the GNU toolchain and the EFI development environment" +arch=(x86_64) +url="https://sourceforge.net/projects/gnu-efi/" +license=(BSD) +source=("https://download.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.bz2" + "${pkgname}-3.0.12-ldflags.patch") + +prepare() { + cd "$pkgname-$pkgver" + # -Werror, not even once + sed -e 's/-Werror//g' -i Make.defaults + # insert LDFLFAGS into custom linker for apps + patch -Np1 -i "../${pkgname}-3.0.12-ldflags.patch" +} + +build() { + cd "$pkgname-$pkgver" + # fat-lto-objects is required for non-mangled (static) object files + CFLAGS+=" -ffat-lto-objects" + make + make -C lib + make -C gnuefi + make -C inc + # unset LDFLAGS for custom linker used in apps, as we have patched our + # LDFLAGS in manually in prepare() + LDFLAGS="" + make -C apps +} + +package() { + cd "$pkgname-$pkgver" + make INSTALLROOT="$pkgdir/" PREFIX='/usr' install + install -vDm 644 apps/*.efi -t "${pkgdir}/usr/share/${pkgname}/apps/$CARCH" + install -vDm 644 README.efilib -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -vDm 644 {ChangeLog,README.{gnuefi,git,elilo}} -t "${pkgdir}/usr/share/doc/${pkgname}" +} \ No newline at end of file diff --git a/x86_64/core/gnu-efi/gnu-efi-3.0.12-ldflags.patch b/x86_64/core/gnu-efi/gnu-efi-3.0.12-ldflags.patch new file mode 100644 index 0000000..9bb2732 --- /dev/null +++ b/x86_64/core/gnu-efi/gnu-efi-3.0.12-ldflags.patch @@ -0,0 +1,12 @@ +diff -ruN a/apps/Makefile b/apps/Makefile +--- a/apps/Makefile 2020-05-11 17:05:20.000000000 +0200 ++++ b/apps/Makefile 2020-05-26 00:32:48.470418674 +0200 +@@ -52,7 +52,7 @@ + LDSCRIPT = $(TOPDIR)/gnuefi/elf_$(ARCH)_fbsd_efi.lds + endif + +-LDFLAGS += -shared -Bsymbolic -L../lib -L../gnuefi $(CRTOBJS) ++LDFLAGS += -O1 --sort-common --as-needed -z relro -z now -shared -Bsymbolic -L../lib -L../gnuefi $(CRTOBJS) + + LOADLIBES += -lefi -lgnuefi + LOADLIBES += $(LIBGCC) diff --git a/x86_64/core/gzip/PKGBUILD b/x86_64/core/gzip/PKGBUILD new file mode 100644 index 0000000..4faf8dd --- /dev/null +++ b/x86_64/core/gzip/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=gzip +pkgver=1.11 +pkgrel=1 +arch=('x86_64') +depends=(glibc bash) +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + mkdir -p $pkgdir/bin + mv -v $pkgdir/usr/bin/gzip $pkgdir/bin +} diff --git a/x86_64/core/iana-etc/PKGBUILD b/x86_64/core/iana-etc/PKGBUILD new file mode 100644 index 0000000..881f760 --- /dev/null +++ b/x86_64/core/iana-etc/PKGBUILD @@ -0,0 +1,15 @@ +pkgname=iana-etc +pkgver=20210222 +pkgrel=1 +arch=('x86_64') +source=(services protocols) + +build() { + echo "build" +} + +package() { + install -d -m 755 $pkgdir/etc + install -m 644 services $pkgdir/etc + install -m 644 protocols $pkgdir/etc +} diff --git a/x86_64/core/iana-etc/protocols b/x86_64/core/iana-etc/protocols new file mode 100644 index 0000000..e695584 --- /dev/null +++ b/x86_64/core/iana-etc/protocols @@ -0,0 +1,137 @@ +# /etc/protocols, created 2021-02-22T22:50:58+0800 +# Source: https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml +hopopt 0 HOPOPT +icmp 1 ICMP +igmp 2 IGMP +ggp 3 GGP +ipv4 4 IPv4 +st 5 ST +tcp 6 TCP +cbt 7 CBT +egp 8 EGP +igp 9 IGP +bbn-rcc-mon 10 BBN-RCC-MON +nvp-ii 11 NVP-II +pup 12 PUP +emcon 14 EMCON +xnet 15 XNET +chaos 16 CHAOS +udp 17 UDP +mux 18 MUX +dcn-meas 19 DCN-MEAS +hmp 20 HMP +prm 21 PRM +xns-idp 22 XNS-IDP +trunk-1 23 TRUNK-1 +trunk-2 24 TRUNK-2 +leaf-1 25 LEAF-1 +leaf-2 26 LEAF-2 +rdp 27 RDP +irtp 28 IRTP +iso-tp4 29 ISO-TP4 +netblt 30 NETBLT +mfe-nsp 31 MFE-NSP +merit-inp 32 MERIT-INP +dccp 33 DCCP +3pc 34 3PC +idpr 35 IDPR +xtp 36 XTP +ddp 37 DDP +idpr-cmtp 38 IDPR-CMTP +tp++ 39 TP++ +il 40 IL +ipv6 41 IPv6 +sdrp 42 SDRP +ipv6-route 43 IPv6-Route +ipv6-frag 44 IPv6-Frag +idrp 45 IDRP +rsvp 46 RSVP +gre 47 GRE +dsr 48 DSR +bna 49 BNA +esp 50 ESP +ah 51 AH +i-nlsp 52 I-NLSP +narp 54 NARP +mobile 55 MOBILE +tlsp 56 TLSP +skip 57 SKIP +ipv6-icmp 58 IPv6-ICMP +ipv6-nonxt 59 IPv6-NoNxt +ipv6-opts 60 IPv6-Opts +cftp 62 CFTP +sat-expak 64 SAT-EXPAK +kryptolan 65 KRYPTOLAN +rvd 66 RVD +ippc 67 IPPC +sat-mon 69 SAT-MON +visa 70 VISA +ipcv 71 IPCV +cpnx 72 CPNX +cphb 73 CPHB +wsn 74 WSN +pvp 75 PVP +br-sat-mon 76 BR-SAT-MON +sun-nd 77 SUN-ND +wb-mon 78 WB-MON +wb-expak 79 WB-EXPAK +iso-ip 80 ISO-IP +vmtp 81 VMTP +secure-vmtp 82 SECURE-VMTP +vines 83 VINES +ttp 84 TTP +iptm 84 IPTM +nsfnet-igp 85 NSFNET-IGP +dgp 86 DGP +tcf 87 TCF +eigrp 88 EIGRP +ospfigp 89 OSPFIGP +sprite-rpc 90 Sprite-RPC +larp 91 LARP +mtp 92 MTP +ax.25 93 AX.25 +ipip 94 IPIP +scc-sp 96 SCC-SP +etherip 97 ETHERIP +encap 98 ENCAP +gmtp 100 GMTP +ifmp 101 IFMP +pnni 102 PNNI +pim 103 PIM +aris 104 ARIS +scps 105 SCPS +qnx 106 QNX +a/n 107 A/N +ipcomp 108 IPComp +snp 109 SNP +compaq-peer 110 Compaq-Peer +ipx-in-ip 111 IPX-in-IP +vrrp 112 VRRP +pgm 113 PGM +l2tp 115 L2TP +ddx 116 DDX +iatp 117 IATP +stp 118 STP +srp 119 SRP +uti 120 UTI +smp 121 SMP +ptp 123 PTP +fire 125 FIRE +crtp 126 CRTP +crudp 127 CRUDP +sscopmce 128 SSCOPMCE +iplt 129 IPLT +sps 130 SPS +pipe 131 PIPE +sctp 132 SCTP +fc 133 FC +rsvp-e2e-ignore 134 RSVP-E2E-IGNORE +udplite 136 UDPLite +mpls-in-ip 137 MPLS-in-IP +manet 138 manet +hip 139 HIP +shim6 140 Shim6 +wesp 141 WESP +rohc 142 ROHC +ethernet 143 Ethernet +reserved 255 Reserved diff --git a/x86_64/core/iana-etc/services b/x86_64/core/iana-etc/services new file mode 100644 index 0000000..ab6a0e8 --- /dev/null +++ b/x86_64/core/iana-etc/services @@ -0,0 +1,11447 @@ +# /etc/services, created 2021-02-22T22:50:58+0800 +# Source: https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml +tcpmux 1/tcp +tcpmux 1/udp +compressnet 2/tcp +compressnet 2/udp +compressnet 3/tcp +compressnet 3/udp +rje 5/tcp +rje 5/udp +echo 7/tcp +echo 7/udp +discard 9/tcp +discard 9/udp +discard 9/sctp +discard 9/dccp +systat 11/tcp +systat 11/udp +daytime 13/tcp +daytime 13/udp +qotd 17/tcp +qotd 17/udp +chargen 19/tcp +chargen 19/udp +ftp-data 20/tcp +ftp-data 20/udp +ftp-data 20/sctp +ftp 21/tcp +ftp 21/udp +ftp 21/sctp +ssh 22/tcp +ssh 22/udp +ssh 22/sctp +telnet 23/tcp +telnet 23/udp +smtp 25/tcp +smtp 25/udp +nsw-fe 27/tcp +nsw-fe 27/udp +msg-icp 29/tcp +msg-icp 29/udp +msg-auth 31/tcp +msg-auth 31/udp +dsp 33/tcp +dsp 33/udp +time 37/tcp +time 37/udp +rap 38/tcp +rap 38/udp +rlp 39/tcp +rlp 39/udp +graphics 41/tcp +graphics 41/udp +name 42/tcp +name 42/udp +nameserver 42/tcp +nameserver 42/udp +nicname 43/tcp +nicname 43/udp +mpm-flags 44/tcp +mpm-flags 44/udp +mpm 45/tcp +mpm 45/udp +mpm-snd 46/tcp +mpm-snd 46/udp +auditd 48/tcp +auditd 48/udp +tacacs 49/tcp +tacacs 49/udp +re-mail-ck 50/tcp +re-mail-ck 50/udp +xns-time 52/tcp +xns-time 52/udp +domain 53/tcp +domain 53/udp +xns-ch 54/tcp +xns-ch 54/udp +isi-gl 55/tcp +isi-gl 55/udp +xns-auth 56/tcp +xns-auth 56/udp +xns-mail 58/tcp +xns-mail 58/udp +acas 62/tcp +acas 62/udp +whoispp 63/tcp +whoispp 63/udp +covia 64/tcp +covia 64/udp +tacacs-ds 65/tcp +tacacs-ds 65/udp +sql-net 66/tcp +sql-net 66/udp +bootps 67/tcp +bootps 67/udp +bootpc 68/tcp +bootpc 68/udp +tftp 69/tcp +tftp 69/udp +gopher 70/tcp +gopher 70/udp +netrjs-1 71/tcp +netrjs-1 71/udp +netrjs-2 72/tcp +netrjs-2 72/udp +netrjs-3 73/tcp +netrjs-3 73/udp +netrjs-4 74/tcp +netrjs-4 74/udp +deos 76/tcp +deos 76/udp +vettcp 78/tcp +vettcp 78/udp +finger 79/tcp +finger 79/udp +http 80/tcp +http 80/udp +www 80/tcp +www 80/udp +www-http 80/tcp +www-http 80/udp +http 80/sctp +xfer 82/tcp +xfer 82/udp +mit-ml-dev 83/tcp +mit-ml-dev 83/udp +ctf 84/tcp +ctf 84/udp +mit-ml-dev 85/tcp +mit-ml-dev 85/udp +mfcobol 86/tcp +mfcobol 86/udp +kerberos 88/tcp +kerberos 88/udp +su-mit-tg 89/tcp +su-mit-tg 89/udp +dnsix 90/tcp +dnsix 90/udp +mit-dov 91/tcp +mit-dov 91/udp +npp 92/tcp +npp 92/udp +dcp 93/tcp +dcp 93/udp +objcall 94/tcp +objcall 94/udp +supdup 95/tcp +supdup 95/udp +dixie 96/tcp +dixie 96/udp +swift-rvf 97/tcp +swift-rvf 97/udp +tacnews 98/tcp +tacnews 98/udp +metagram 99/tcp +metagram 99/udp +hostname 101/tcp +hostname 101/udp +iso-tsap 102/tcp +iso-tsap 102/udp +gppitnp 103/tcp +gppitnp 103/udp +acr-nema 104/tcp +acr-nema 104/udp +cso 105/tcp +cso 105/udp +csnet-ns 105/tcp +csnet-ns 105/udp +3com-tsmux 106/tcp +3com-tsmux 106/udp +rtelnet 107/tcp +rtelnet 107/udp +snagas 108/tcp +snagas 108/udp +pop2 109/tcp +pop2 109/udp +pop3 110/tcp +pop3 110/udp +sunrpc 111/tcp +sunrpc 111/udp +mcidas 112/tcp +mcidas 112/udp +ident 113/tcp +auth 113/tcp +auth 113/udp +sftp 115/tcp +sftp 115/udp +ansanotify 116/tcp +ansanotify 116/udp +uucp-path 117/tcp +uucp-path 117/udp +sqlserv 118/tcp +sqlserv 118/udp +nntp 119/tcp +nntp 119/udp +cfdptkt 120/tcp +cfdptkt 120/udp +erpc 121/tcp +erpc 121/udp +smakynet 122/tcp +smakynet 122/udp +ntp 123/tcp +ntp 123/udp +ansatrader 124/tcp +ansatrader 124/udp +locus-map 125/tcp +locus-map 125/udp +nxedit 126/tcp +nxedit 126/udp +locus-con 127/tcp +locus-con 127/udp +gss-xlicen 128/tcp +gss-xlicen 128/udp +pwdgen 129/tcp +pwdgen 129/udp +cisco-fna 130/tcp +cisco-fna 130/udp +cisco-tna 131/tcp +cisco-tna 131/udp +cisco-sys 132/tcp +cisco-sys 132/udp +statsrv 133/tcp +statsrv 133/udp +ingres-net 134/tcp +ingres-net 134/udp +epmap 135/tcp +epmap 135/udp +profile 136/tcp +profile 136/udp +netbios-ns 137/tcp +netbios-ns 137/udp +netbios-dgm 138/tcp +netbios-dgm 138/udp +netbios-ssn 139/tcp +netbios-ssn 139/udp +emfis-data 140/tcp +emfis-data 140/udp +emfis-cntl 141/tcp +emfis-cntl 141/udp +bl-idm 142/tcp +bl-idm 142/udp +imap 143/tcp +imap 143/udp +uma 144/tcp +uma 144/udp +uaac 145/tcp +uaac 145/udp +iso-tp0 146/tcp +iso-tp0 146/udp +iso-ip 147/tcp +iso-ip 147/udp +jargon 148/tcp +jargon 148/udp +aed-512 149/tcp +aed-512 149/udp +sql-net 150/tcp +sql-net 150/udp +hems 151/tcp +hems 151/udp +bftp 152/tcp +bftp 152/udp +sgmp 153/tcp +sgmp 153/udp +netsc-prod 154/tcp +netsc-prod 154/udp +netsc-dev 155/tcp +netsc-dev 155/udp +sqlsrv 156/tcp +sqlsrv 156/udp +knet-cmp 157/tcp +knet-cmp 157/udp +pcmail-srv 158/tcp +pcmail-srv 158/udp +nss-routing 159/tcp +nss-routing 159/udp +sgmp-traps 160/tcp +sgmp-traps 160/udp +snmp 161/tcp +snmp 161/udp +snmptrap 162/tcp +snmptrap 162/udp +cmip-man 163/tcp +cmip-man 163/udp +cmip-agent 164/tcp +cmip-agent 164/udp +xns-courier 165/tcp +xns-courier 165/udp +s-net 166/tcp +s-net 166/udp +namp 167/tcp +namp 167/udp +rsvd 168/tcp +rsvd 168/udp +send 169/tcp +send 169/udp +print-srv 170/tcp +print-srv 170/udp +multiplex 171/tcp +multiplex 171/udp +cl-1 172/tcp +cl-1 172/udp +xyplex-mux 173/tcp +xyplex-mux 173/udp +mailq 174/tcp +mailq 174/udp +vmnet 175/tcp +vmnet 175/udp +genrad-mux 176/tcp +genrad-mux 176/udp +xdmcp 177/tcp +xdmcp 177/udp +nextstep 178/tcp +nextstep 178/udp +bgp 179/tcp +bgp 179/udp +bgp 179/sctp +ris 180/tcp +ris 180/udp +unify 181/tcp +unify 181/udp +audit 182/tcp +audit 182/udp +ocbinder 183/tcp +ocbinder 183/udp +ocserver 184/tcp +ocserver 184/udp +remote-kis 185/tcp +remote-kis 185/udp +kis 186/tcp +kis 186/udp +aci 187/tcp +aci 187/udp +mumps 188/tcp +mumps 188/udp +qft 189/tcp +qft 189/udp +gacp 190/tcp +gacp 190/udp +prospero 191/tcp +prospero 191/udp +osu-nms 192/tcp +osu-nms 192/udp +srmp 193/tcp +srmp 193/udp +irc 194/tcp +irc 194/udp +dn6-nlm-aud 195/tcp +dn6-nlm-aud 195/udp +dn6-smm-red 196/tcp +dn6-smm-red 196/udp +dls 197/tcp +dls 197/udp +dls-mon 198/tcp +dls-mon 198/udp +smux 199/tcp +smux 199/udp +src 200/tcp +src 200/udp +at-rtmp 201/tcp +at-rtmp 201/udp +at-nbp 202/tcp +at-nbp 202/udp +at-3 203/tcp +at-3 203/udp +at-echo 204/tcp +at-echo 204/udp +at-5 205/tcp +at-5 205/udp +at-zis 206/tcp +at-zis 206/udp +at-7 207/tcp +at-7 207/udp +at-8 208/tcp +at-8 208/udp +qmtp 209/tcp +qmtp 209/udp +z39-50 210/tcp +z39-50 210/udp +914c-g 211/tcp +914c-g 211/udp +anet 212/tcp +anet 212/udp +ipx 213/tcp +ipx 213/udp +vmpwscs 214/tcp +vmpwscs 214/udp +softpc 215/tcp +softpc 215/udp +CAIlic 216/tcp +CAIlic 216/udp +dbase 217/tcp +dbase 217/udp +mpp 218/tcp +mpp 218/udp +uarps 219/tcp +uarps 219/udp +imap3 220/tcp +imap3 220/udp +fln-spx 221/tcp +fln-spx 221/udp +rsh-spx 222/tcp +rsh-spx 222/udp +cdc 223/tcp +cdc 223/udp +masqdialer 224/tcp +masqdialer 224/udp +direct 242/tcp +direct 242/udp +sur-meas 243/tcp +sur-meas 243/udp +inbusiness 244/tcp +inbusiness 244/udp +link 245/tcp +link 245/udp +dsp3270 246/tcp +dsp3270 246/udp +subntbcst-tftp 247/tcp +subntbcst-tftp 247/udp +bhfhs 248/tcp +bhfhs 248/udp +rap 256/tcp +rap 256/udp +set 257/tcp +set 257/udp +esro-gen 259/tcp +esro-gen 259/udp +openport 260/tcp +openport 260/udp +nsiiops 261/tcp +nsiiops 261/udp +arcisdms 262/tcp +arcisdms 262/udp +hdap 263/tcp +hdap 263/udp +bgmp 264/tcp +bgmp 264/udp +x-bone-ctl 265/tcp +x-bone-ctl 265/udp +sst 266/tcp +sst 266/udp +td-service 267/tcp +td-service 267/udp +td-replica 268/tcp +td-replica 268/udp +manet 269/tcp +manet 269/udp +gist 270/udp +pt-tls 271/tcp +http-mgmt 280/tcp +http-mgmt 280/udp +personal-link 281/tcp +personal-link 281/udp +cableport-ax 282/tcp +cableport-ax 282/udp +rescap 283/tcp +rescap 283/udp +corerjd 284/tcp +corerjd 284/udp +fxp 286/tcp +fxp 286/udp +k-block 287/tcp +k-block 287/udp +novastorbakcup 308/tcp +novastorbakcup 308/udp +entrusttime 309/tcp +entrusttime 309/udp +bhmds 310/tcp +bhmds 310/udp +asip-webadmin 311/tcp +asip-webadmin 311/udp +vslmp 312/tcp +vslmp 312/udp +magenta-logic 313/tcp +magenta-logic 313/udp +opalis-robot 314/tcp +opalis-robot 314/udp +dpsi 315/tcp +dpsi 315/udp +decauth 316/tcp +decauth 316/udp +zannet 317/tcp +zannet 317/udp +pkix-timestamp 318/tcp +pkix-timestamp 318/udp +ptp-event 319/tcp +ptp-event 319/udp +ptp-general 320/tcp +ptp-general 320/udp +pip 321/tcp +pip 321/udp +rtsps 322/tcp +rtsps 322/udp +rpki-rtr 323/tcp +rpki-rtr-tls 324/tcp +texar 333/tcp +texar 333/udp +pdap 344/tcp +pdap 344/udp +pawserv 345/tcp +pawserv 345/udp +zserv 346/tcp +zserv 346/udp +fatserv 347/tcp +fatserv 347/udp +csi-sgwp 348/tcp +csi-sgwp 348/udp +mftp 349/tcp +mftp 349/udp +matip-type-a 350/tcp +matip-type-a 350/udp +matip-type-b 351/tcp +matip-type-b 351/udp +bhoetty 351/tcp +bhoetty 351/udp +dtag-ste-sb 352/tcp +dtag-ste-sb 352/udp +bhoedap4 352/tcp +bhoedap4 352/udp +ndsauth 353/tcp +ndsauth 353/udp +bh611 354/tcp +bh611 354/udp +datex-asn 355/tcp +datex-asn 355/udp +cloanto-net-1 356/tcp +cloanto-net-1 356/udp +bhevent 357/tcp +bhevent 357/udp +shrinkwrap 358/tcp +shrinkwrap 358/udp +nsrmp 359/tcp +nsrmp 359/udp +scoi2odialog 360/tcp +scoi2odialog 360/udp +semantix 361/tcp +semantix 361/udp +srssend 362/tcp +srssend 362/udp +rsvp-tunnel 363/tcp +rsvp-tunnel 363/udp +aurora-cmgr 364/tcp +aurora-cmgr 364/udp +dtk 365/tcp +dtk 365/udp +odmr 366/tcp +odmr 366/udp +mortgageware 367/tcp +mortgageware 367/udp +qbikgdp 368/tcp +qbikgdp 368/udp +rpc2portmap 369/tcp +rpc2portmap 369/udp +codaauth2 370/tcp +codaauth2 370/udp +clearcase 371/tcp +clearcase 371/udp +ulistproc 372/tcp +ulistproc 372/udp +legent-1 373/tcp +legent-1 373/udp +legent-2 374/tcp +legent-2 374/udp +hassle 375/tcp +hassle 375/udp +nip 376/tcp +nip 376/udp +tnETOS 377/tcp +tnETOS 377/udp +dsETOS 378/tcp +dsETOS 378/udp +is99c 379/tcp +is99c 379/udp +is99s 380/tcp +is99s 380/udp +hp-collector 381/tcp +hp-collector 381/udp +hp-managed-node 382/tcp +hp-managed-node 382/udp +hp-alarm-mgr 383/tcp +hp-alarm-mgr 383/udp +arns 384/tcp +arns 384/udp +ibm-app 385/tcp +ibm-app 385/udp +asa 386/tcp +asa 386/udp +aurp 387/tcp +aurp 387/udp +unidata-ldm 388/tcp +unidata-ldm 388/udp +ldap 389/tcp +ldap 389/udp +uis 390/tcp +uis 390/udp +synotics-relay 391/tcp +synotics-relay 391/udp +synotics-broker 392/tcp +synotics-broker 392/udp +meta5 393/tcp +meta5 393/udp +embl-ndt 394/tcp +embl-ndt 394/udp +netcp 395/tcp +netcp 395/udp +netware-ip 396/tcp +netware-ip 396/udp +mptn 397/tcp +mptn 397/udp +kryptolan 398/tcp +kryptolan 398/udp +iso-tsap-c2 399/tcp +iso-tsap-c2 399/udp +osb-sd 400/tcp +osb-sd 400/udp +ups 401/tcp +ups 401/udp +genie 402/tcp +genie 402/udp +decap 403/tcp +decap 403/udp +nced 404/tcp +nced 404/udp +ncld 405/tcp +ncld 405/udp +imsp 406/tcp +imsp 406/udp +timbuktu 407/tcp +timbuktu 407/udp +prm-sm 408/tcp +prm-sm 408/udp +prm-nm 409/tcp +prm-nm 409/udp +decladebug 410/tcp +decladebug 410/udp +rmt 411/tcp +rmt 411/udp +synoptics-trap 412/tcp +synoptics-trap 412/udp +smsp 413/tcp +smsp 413/udp +infoseek 414/tcp +infoseek 414/udp +bnet 415/tcp +bnet 415/udp +silverplatter 416/tcp +silverplatter 416/udp +onmux 417/tcp +onmux 417/udp +hyper-g 418/tcp +hyper-g 418/udp +ariel1 419/tcp +ariel1 419/udp +smpte 420/tcp +smpte 420/udp +ariel2 421/tcp +ariel2 421/udp +ariel3 422/tcp +ariel3 422/udp +opc-job-start 423/tcp +opc-job-start 423/udp +opc-job-track 424/tcp +opc-job-track 424/udp +icad-el 425/tcp +icad-el 425/udp +smartsdp 426/tcp +smartsdp 426/udp +svrloc 427/tcp +svrloc 427/udp +ocs-cmu 428/tcp +ocs-cmu 428/udp +ocs-amu 429/tcp +ocs-amu 429/udp +utmpsd 430/tcp +utmpsd 430/udp +utmpcd 431/tcp +utmpcd 431/udp +iasd 432/tcp +iasd 432/udp +nnsp 433/tcp +nnsp 433/udp +mobileip-agent 434/tcp +mobileip-agent 434/udp +mobilip-mn 435/tcp +mobilip-mn 435/udp +dna-cml 436/tcp +dna-cml 436/udp +comscm 437/tcp +comscm 437/udp +dsfgw 438/tcp +dsfgw 438/udp +dasp 439/tcp +dasp 439/udp +sgcp 440/tcp +sgcp 440/udp +decvms-sysmgt 441/tcp +decvms-sysmgt 441/udp +cvc-hostd 442/tcp +cvc-hostd 442/udp +https 443/tcp +https 443/udp +https 443/sctp +snpp 444/tcp +snpp 444/udp +microsoft-ds 445/tcp +microsoft-ds 445/udp +ddm-rdb 446/tcp +ddm-rdb 446/udp +ddm-dfm 447/tcp +ddm-dfm 447/udp +ddm-ssl 448/tcp +ddm-ssl 448/udp +as-servermap 449/tcp +as-servermap 449/udp +tserver 450/tcp +tserver 450/udp +sfs-smp-net 451/tcp +sfs-smp-net 451/udp +sfs-config 452/tcp +sfs-config 452/udp +creativeserver 453/tcp +creativeserver 453/udp +contentserver 454/tcp +contentserver 454/udp +creativepartnr 455/tcp +creativepartnr 455/udp +macon-tcp 456/tcp +macon-udp 456/udp +scohelp 457/tcp +scohelp 457/udp +appleqtc 458/tcp +appleqtc 458/udp +ampr-rcmd 459/tcp +ampr-rcmd 459/udp +skronk 460/tcp +skronk 460/udp +datasurfsrv 461/tcp +datasurfsrv 461/udp +datasurfsrvsec 462/tcp +datasurfsrvsec 462/udp +alpes 463/tcp +alpes 463/udp +kpasswd 464/tcp +kpasswd 464/udp +urd 465/tcp +submissions 465/tcp +igmpv3lite 465/udp +digital-vrc 466/tcp +digital-vrc 466/udp +mylex-mapd 467/tcp +mylex-mapd 467/udp +photuris 468/tcp +photuris 468/udp +rcp 469/tcp +rcp 469/udp +scx-proxy 470/tcp +scx-proxy 470/udp +mondex 471/tcp +mondex 471/udp +ljk-login 472/tcp +ljk-login 472/udp +hybrid-pop 473/tcp +hybrid-pop 473/udp +tn-tl-w1 474/tcp +tn-tl-w2 474/udp +tcpnethaspsrv 475/tcp +tcpnethaspsrv 475/udp +tn-tl-fd1 476/tcp +tn-tl-fd1 476/udp +ss7ns 477/tcp +ss7ns 477/udp +spsc 478/tcp +spsc 478/udp +iafserver 479/tcp +iafserver 479/udp +iafdbase 480/tcp +iafdbase 480/udp +ph 481/tcp +ph 481/udp +bgs-nsi 482/tcp +bgs-nsi 482/udp +ulpnet 483/tcp +ulpnet 483/udp +integra-sme 484/tcp +integra-sme 484/udp +powerburst 485/tcp +powerburst 485/udp +avian 486/tcp +avian 486/udp +saft 487/tcp +saft 487/udp +gss-http 488/tcp +gss-http 488/udp +nest-protocol 489/tcp +nest-protocol 489/udp +micom-pfs 490/tcp +micom-pfs 490/udp +go-login 491/tcp +go-login 491/udp +ticf-1 492/tcp +ticf-1 492/udp +ticf-2 493/tcp +ticf-2 493/udp +pov-ray 494/tcp +pov-ray 494/udp +intecourier 495/tcp +intecourier 495/udp +pim-rp-disc 496/tcp +pim-rp-disc 496/udp +retrospect 497/tcp +retrospect 497/udp +siam 498/tcp +siam 498/udp +iso-ill 499/tcp +iso-ill 499/udp +isakmp 500/tcp +isakmp 500/udp +stmf 501/tcp +stmf 501/udp +mbap 502/tcp +mbap 502/udp +intrinsa 503/tcp +intrinsa 503/udp +citadel 504/tcp +citadel 504/udp +mailbox-lm 505/tcp +mailbox-lm 505/udp +ohimsrv 506/tcp +ohimsrv 506/udp +crs 507/tcp +crs 507/udp +xvttp 508/tcp +xvttp 508/udp +snare 509/tcp +snare 509/udp +fcp 510/tcp +fcp 510/udp +passgo 511/tcp +passgo 511/udp +exec 512/tcp +comsat 512/udp +biff 512/udp +login 513/tcp +who 513/udp +shell 514/tcp +syslog 514/udp +printer 515/tcp +printer 515/udp +videotex 516/tcp +videotex 516/udp +talk 517/tcp +talk 517/udp +ntalk 518/tcp +ntalk 518/udp +utime 519/tcp +utime 519/udp +efs 520/tcp +router 520/udp +ripng 521/tcp +ripng 521/udp +ulp 522/tcp +ulp 522/udp +ibm-db2 523/tcp +ibm-db2 523/udp +ncp 524/tcp +ncp 524/udp +timed 525/tcp +timed 525/udp +tempo 526/tcp +tempo 526/udp +stx 527/tcp +stx 527/udp +custix 528/tcp +custix 528/udp +irc-serv 529/tcp +irc-serv 529/udp +courier 530/tcp +courier 530/udp +conference 531/tcp +conference 531/udp +netnews 532/tcp +netnews 532/udp +netwall 533/tcp +netwall 533/udp +windream 534/tcp +windream 534/udp +iiop 535/tcp +iiop 535/udp +opalis-rdv 536/tcp +opalis-rdv 536/udp +nmsp 537/tcp +nmsp 537/udp +gdomap 538/tcp +gdomap 538/udp +apertus-ldp 539/tcp +apertus-ldp 539/udp +uucp 540/tcp +uucp 540/udp +uucp-rlogin 541/tcp +uucp-rlogin 541/udp +commerce 542/tcp +commerce 542/udp +klogin 543/tcp +klogin 543/udp +kshell 544/tcp +kshell 544/udp +appleqtcsrvr 545/tcp +appleqtcsrvr 545/udp +dhcpv6-client 546/tcp +dhcpv6-client 546/udp +dhcpv6-server 547/tcp +dhcpv6-server 547/udp +afpovertcp 548/tcp +afpovertcp 548/udp +idfp 549/tcp +idfp 549/udp +new-rwho 550/tcp +new-rwho 550/udp +cybercash 551/tcp +cybercash 551/udp +devshr-nts 552/tcp +devshr-nts 552/udp +pirp 553/tcp +pirp 553/udp +rtsp 554/tcp +rtsp 554/udp +dsf 555/tcp +dsf 555/udp +remotefs 556/tcp +remotefs 556/udp +openvms-sysipc 557/tcp +openvms-sysipc 557/udp +sdnskmp 558/tcp +sdnskmp 558/udp +teedtap 559/tcp +teedtap 559/udp +rmonitor 560/tcp +rmonitor 560/udp +monitor 561/tcp +monitor 561/udp +chshell 562/tcp +chshell 562/udp +nntps 563/tcp +nntps 563/udp +9pfs 564/tcp +9pfs 564/udp +whoami 565/tcp +whoami 565/udp +streettalk 566/tcp +streettalk 566/udp +banyan-rpc 567/tcp +banyan-rpc 567/udp +ms-shuttle 568/tcp +ms-shuttle 568/udp +ms-rome 569/tcp +ms-rome 569/udp +meter 570/tcp +meter 570/udp +meter 571/tcp +meter 571/udp +sonar 572/tcp +sonar 572/udp +banyan-vip 573/tcp +banyan-vip 573/udp +ftp-agent 574/tcp +ftp-agent 574/udp +vemmi 575/tcp +vemmi 575/udp +ipcd 576/tcp +ipcd 576/udp +vnas 577/tcp +vnas 577/udp +ipdd 578/tcp +ipdd 578/udp +decbsrv 579/tcp +decbsrv 579/udp +sntp-heartbeat 580/tcp +sntp-heartbeat 580/udp +bdp 581/tcp +bdp 581/udp +scc-security 582/tcp +scc-security 582/udp +philips-vc 583/tcp +philips-vc 583/udp +keyserver 584/tcp +keyserver 584/udp +password-chg 586/tcp +password-chg 586/udp +submission 587/tcp +submission 587/udp +cal 588/tcp +cal 588/udp +eyelink 589/tcp +eyelink 589/udp +tns-cml 590/tcp +tns-cml 590/udp +http-alt 591/tcp +http-alt 591/udp +eudora-set 592/tcp +eudora-set 592/udp +http-rpc-epmap 593/tcp +http-rpc-epmap 593/udp +tpip 594/tcp +tpip 594/udp +cab-protocol 595/tcp +cab-protocol 595/udp +smsd 596/tcp +smsd 596/udp +ptcnameservice 597/tcp +ptcnameservice 597/udp +sco-websrvrmg3 598/tcp +sco-websrvrmg3 598/udp +acp 599/tcp +acp 599/udp +ipcserver 600/tcp +ipcserver 600/udp +syslog-conn 601/tcp +syslog-conn 601/udp +xmlrpc-beep 602/tcp +xmlrpc-beep 602/udp +idxp 603/tcp +idxp 603/udp +tunnel 604/tcp +tunnel 604/udp +soap-beep 605/tcp +soap-beep 605/udp +urm 606/tcp +urm 606/udp +nqs 607/tcp +nqs 607/udp +sift-uft 608/tcp +sift-uft 608/udp +npmp-trap 609/tcp +npmp-trap 609/udp +npmp-local 610/tcp +npmp-local 610/udp +npmp-gui 611/tcp +npmp-gui 611/udp +hmmp-ind 612/tcp +hmmp-ind 612/udp +hmmp-op 613/tcp +hmmp-op 613/udp +sshell 614/tcp +sshell 614/udp +sco-inetmgr 615/tcp +sco-inetmgr 615/udp +sco-sysmgr 616/tcp +sco-sysmgr 616/udp +sco-dtmgr 617/tcp +sco-dtmgr 617/udp +dei-icda 618/tcp +dei-icda 618/udp +compaq-evm 619/tcp +compaq-evm 619/udp +sco-websrvrmgr 620/tcp +sco-websrvrmgr 620/udp +escp-ip 621/tcp +escp-ip 621/udp +collaborator 622/tcp +collaborator 622/udp +oob-ws-http 623/tcp +asf-rmcp 623/udp +cryptoadmin 624/tcp +cryptoadmin 624/udp +dec-dlm 625/tcp +dec-dlm 625/udp +asia 626/tcp +asia 626/udp +passgo-tivoli 627/tcp +passgo-tivoli 627/udp +qmqp 628/tcp +qmqp 628/udp +3com-amp3 629/tcp +3com-amp3 629/udp +rda 630/tcp +rda 630/udp +ipp 631/tcp +ipp 631/udp +ipps 631/tcp +bmpp 632/tcp +bmpp 632/udp +servstat 633/tcp +servstat 633/udp +ginad 634/tcp +ginad 634/udp +rlzdbase 635/tcp +rlzdbase 635/udp +ldaps 636/tcp +ldaps 636/udp +lanserver 637/tcp +lanserver 637/udp +mcns-sec 638/tcp +mcns-sec 638/udp +msdp 639/tcp +msdp 639/udp +entrust-sps 640/tcp +entrust-sps 640/udp +repcmd 641/tcp +repcmd 641/udp +esro-emsdp 642/tcp +esro-emsdp 642/udp +sanity 643/tcp +sanity 643/udp +dwr 644/tcp +dwr 644/udp +pssc 645/tcp +pssc 645/udp +ldp 646/tcp +ldp 646/udp +dhcp-failover 647/tcp +dhcp-failover 647/udp +rrp 648/tcp +rrp 648/udp +cadview-3d 649/tcp +cadview-3d 649/udp +obex 650/tcp +obex 650/udp +ieee-mms 651/tcp +ieee-mms 651/udp +hello-port 652/tcp +hello-port 652/udp +repscmd 653/tcp +repscmd 653/udp +aodv 654/tcp +aodv 654/udp +tinc 655/tcp +tinc 655/udp +spmp 656/tcp +spmp 656/udp +rmc 657/tcp +rmc 657/udp +tenfold 658/tcp +tenfold 658/udp +mac-srvr-admin 660/tcp +mac-srvr-admin 660/udp +hap 661/tcp +hap 661/udp +pftp 662/tcp +pftp 662/udp +purenoise 663/tcp +purenoise 663/udp +oob-ws-https 664/tcp +asf-secure-rmcp 664/udp +sun-dr 665/tcp +sun-dr 665/udp +mdqs 666/tcp +mdqs 666/udp +doom 666/tcp +doom 666/udp +disclose 667/tcp +disclose 667/udp +mecomm 668/tcp +mecomm 668/udp +meregister 669/tcp +meregister 669/udp +vacdsm-sws 670/tcp +vacdsm-sws 670/udp +vacdsm-app 671/tcp +vacdsm-app 671/udp +vpps-qua 672/tcp +vpps-qua 672/udp +cimplex 673/tcp +cimplex 673/udp +acap 674/tcp +acap 674/udp +dctp 675/tcp +dctp 675/udp +vpps-via 676/tcp +vpps-via 676/udp +vpp 677/tcp +vpp 677/udp +ggf-ncp 678/tcp +ggf-ncp 678/udp +mrm 679/tcp +mrm 679/udp +entrust-aaas 680/tcp +entrust-aaas 680/udp +entrust-aams 681/tcp +entrust-aams 681/udp +xfr 682/tcp +xfr 682/udp +corba-iiop 683/tcp +corba-iiop 683/udp +corba-iiop-ssl 684/tcp +corba-iiop-ssl 684/udp +mdc-portmapper 685/tcp +mdc-portmapper 685/udp +hcp-wismar 686/tcp +hcp-wismar 686/udp +asipregistry 687/tcp +asipregistry 687/udp +realm-rusd 688/tcp +realm-rusd 688/udp +nmap 689/tcp +nmap 689/udp +vatp 690/tcp +vatp 690/udp +msexch-routing 691/tcp +msexch-routing 691/udp +hyperwave-isp 692/tcp +hyperwave-isp 692/udp +connendp 693/tcp +connendp 693/udp +ha-cluster 694/tcp +ha-cluster 694/udp +ieee-mms-ssl 695/tcp +ieee-mms-ssl 695/udp +rushd 696/tcp +rushd 696/udp +uuidgen 697/tcp +uuidgen 697/udp +olsr 698/tcp +olsr 698/udp +accessnetwork 699/tcp +accessnetwork 699/udp +epp 700/tcp +epp 700/udp +lmp 701/tcp +lmp 701/udp +iris-beep 702/tcp +iris-beep 702/udp +elcsd 704/tcp +elcsd 704/udp +agentx 705/tcp +agentx 705/udp +silc 706/tcp +silc 706/udp +borland-dsj 707/tcp +borland-dsj 707/udp +entrust-kmsh 709/tcp +entrust-kmsh 709/udp +entrust-ash 710/tcp +entrust-ash 710/udp +cisco-tdp 711/tcp +cisco-tdp 711/udp +tbrpf 712/tcp +tbrpf 712/udp +iris-xpc 713/tcp +iris-xpc 713/udp +iris-xpcs 714/tcp +iris-xpcs 714/udp +iris-lwz 715/tcp +iris-lwz 715/udp +pana 716/udp +netviewdm1 729/tcp +netviewdm1 729/udp +netviewdm2 730/tcp +netviewdm2 730/udp +netviewdm3 731/tcp +netviewdm3 731/udp +netgw 741/tcp +netgw 741/udp +netrcs 742/tcp +netrcs 742/udp +flexlm 744/tcp +flexlm 744/udp +fujitsu-dev 747/tcp +fujitsu-dev 747/udp +ris-cm 748/tcp +ris-cm 748/udp +kerberos-adm 749/tcp +kerberos-adm 749/udp +rfile 750/tcp +loadav 750/udp +kerberos-iv 750/udp +pump 751/tcp +pump 751/udp +qrh 752/tcp +qrh 752/udp +rrh 753/tcp +rrh 753/udp +tell 754/tcp +tell 754/udp +nlogin 758/tcp +nlogin 758/udp +con 759/tcp +con 759/udp +ns 760/tcp +ns 760/udp +rxe 761/tcp +rxe 761/udp +quotad 762/tcp +quotad 762/udp +cycleserv 763/tcp +cycleserv 763/udp +omserv 764/tcp +omserv 764/udp +webster 765/tcp +webster 765/udp +phonebook 767/tcp +phonebook 767/udp +vid 769/tcp +vid 769/udp +cadlock 770/tcp +cadlock 770/udp +rtip 771/tcp +rtip 771/udp +cycleserv2 772/tcp +cycleserv2 772/udp +submit 773/tcp +notify 773/udp +rpasswd 774/tcp +acmaint-dbd 774/udp +entomb 775/tcp +acmaint-transd 775/udp +wpages 776/tcp +wpages 776/udp +multiling-http 777/tcp +multiling-http 777/udp +wpgs 780/tcp +wpgs 780/udp +mdbs-daemon 800/tcp +mdbs-daemon 800/udp +device 801/tcp +device 801/udp +mbap-s 802/tcp +mbap-s 802/udp +fcp-udp 810/tcp +fcp-udp 810/udp +itm-mcell-s 828/tcp +itm-mcell-s 828/udp +pkix-3-ca-ra 829/tcp +pkix-3-ca-ra 829/udp +netconf-ssh 830/tcp +netconf-ssh 830/udp +netconf-beep 831/tcp +netconf-beep 831/udp +netconfsoaphttp 832/tcp +netconfsoaphttp 832/udp +netconfsoapbeep 833/tcp +netconfsoapbeep 833/udp +dhcp-failover2 847/tcp +dhcp-failover2 847/udp +gdoi 848/tcp +gdoi 848/udp +domain-s 853/tcp +domain-s 853/udp +dlep 854/tcp +dlep 854/udp +iscsi 860/tcp +iscsi 860/udp +owamp-control 861/tcp +owamp-test 861/udp +twamp-control 862/tcp +twamp-test 862/udp +rsync 873/tcp +rsync 873/udp +iclcnet-locate 886/tcp +iclcnet-locate 886/udp +iclcnet-svinfo 887/tcp +iclcnet-svinfo 887/udp +accessbuilder 888/tcp +accessbuilder 888/udp +cddbp 888/tcp +omginitialrefs 900/tcp +omginitialrefs 900/udp +smpnameres 901/tcp +smpnameres 901/udp +ideafarm-door 902/tcp +ideafarm-door 902/udp +ideafarm-panic 903/tcp +ideafarm-panic 903/udp +kink 910/tcp +kink 910/udp +xact-backup 911/tcp +xact-backup 911/udp +apex-mesh 912/tcp +apex-mesh 912/udp +apex-edge 913/tcp +apex-edge 913/udp +rndc 953/tcp +ftps-data 989/tcp +ftps-data 989/udp +ftps 990/tcp +ftps 990/udp +nas 991/tcp +nas 991/udp +telnets 992/tcp +telnets 992/udp +imaps 993/tcp +imaps 993/udp +pop3s 995/tcp +pop3s 995/udp +vsinet 996/tcp +vsinet 996/udp +maitrd 997/tcp +maitrd 997/udp +busboy 998/tcp +puparp 998/udp +garcon 999/tcp +applix 999/udp +puprouter 999/tcp +puprouter 999/udp +cadlock2 1000/tcp +cadlock2 1000/udp +webpush 1001/tcp +surf 1010/tcp +surf 1010/udp +exp1 1021/tcp +exp1 1021/udp +exp1 1021/sctp +exp1 1021/dccp +exp2 1022/tcp +exp2 1022/udp +exp2 1022/sctp +exp2 1022/dccp +blackjack 1025/tcp +blackjack 1025/udp +cap 1026/tcp +cap 1026/udp +6a44 1027/udp +solid-mux 1029/tcp +solid-mux 1029/udp +netinfo-local 1033/tcp +netinfo-local 1033/udp +activesync 1034/tcp +activesync 1034/udp +mxxrlogin 1035/tcp +mxxrlogin 1035/udp +nsstp 1036/tcp +nsstp 1036/udp +ams 1037/tcp +ams 1037/udp +mtqp 1038/tcp +mtqp 1038/udp +sbl 1039/tcp +sbl 1039/udp +netarx 1040/tcp +netarx 1040/udp +danf-ak2 1041/tcp +danf-ak2 1041/udp +afrog 1042/tcp +afrog 1042/udp +boinc-client 1043/tcp +boinc-client 1043/udp +dcutility 1044/tcp +dcutility 1044/udp +fpitp 1045/tcp +fpitp 1045/udp +wfremotertm 1046/tcp +wfremotertm 1046/udp +neod1 1047/tcp +neod1 1047/udp +neod2 1048/tcp +neod2 1048/udp +td-postman 1049/tcp +td-postman 1049/udp +cma 1050/tcp +cma 1050/udp +optima-vnet 1051/tcp +optima-vnet 1051/udp +ddt 1052/tcp +ddt 1052/udp +remote-as 1053/tcp +remote-as 1053/udp +brvread 1054/tcp +brvread 1054/udp +ansyslmd 1055/tcp +ansyslmd 1055/udp +vfo 1056/tcp +vfo 1056/udp +startron 1057/tcp +startron 1057/udp +nim 1058/tcp +nim 1058/udp +nimreg 1059/tcp +nimreg 1059/udp +polestar 1060/tcp +polestar 1060/udp +kiosk 1061/tcp +kiosk 1061/udp +veracity 1062/tcp +veracity 1062/udp +kyoceranetdev 1063/tcp +kyoceranetdev 1063/udp +jstel 1064/tcp +jstel 1064/udp +syscomlan 1065/tcp +syscomlan 1065/udp +fpo-fns 1066/tcp +fpo-fns 1066/udp +instl-boots 1067/tcp +instl-boots 1067/udp +instl-bootc 1068/tcp +instl-bootc 1068/udp +cognex-insight 1069/tcp +cognex-insight 1069/udp +gmrupdateserv 1070/tcp +gmrupdateserv 1070/udp +bsquare-voip 1071/tcp +bsquare-voip 1071/udp +cardax 1072/tcp +cardax 1072/udp +bridgecontrol 1073/tcp +bridgecontrol 1073/udp +warmspotMgmt 1074/tcp +warmspotMgmt 1074/udp +rdrmshc 1075/tcp +rdrmshc 1075/udp +dab-sti-c 1076/tcp +dab-sti-c 1076/udp +imgames 1077/tcp +imgames 1077/udp +avocent-proxy 1078/tcp +avocent-proxy 1078/udp +asprovatalk 1079/tcp +asprovatalk 1079/udp +socks 1080/tcp +socks 1080/udp +pvuniwien 1081/tcp +pvuniwien 1081/udp +amt-esd-prot 1082/tcp +amt-esd-prot 1082/udp +ansoft-lm-1 1083/tcp +ansoft-lm-1 1083/udp +ansoft-lm-2 1084/tcp +ansoft-lm-2 1084/udp +webobjects 1085/tcp +webobjects 1085/udp +cplscrambler-lg 1086/tcp +cplscrambler-lg 1086/udp +cplscrambler-in 1087/tcp +cplscrambler-in 1087/udp +cplscrambler-al 1088/tcp +cplscrambler-al 1088/udp +ff-annunc 1089/tcp +ff-annunc 1089/udp +ff-fms 1090/tcp +ff-fms 1090/udp +ff-sm 1091/tcp +ff-sm 1091/udp +obrpd 1092/tcp +obrpd 1092/udp +proofd 1093/tcp +proofd 1093/udp +rootd 1094/tcp +rootd 1094/udp +nicelink 1095/tcp +nicelink 1095/udp +cnrprotocol 1096/tcp +cnrprotocol 1096/udp +sunclustermgr 1097/tcp +sunclustermgr 1097/udp +rmiactivation 1098/tcp +rmiactivation 1098/udp +rmiregistry 1099/tcp +rmiregistry 1099/udp +mctp 1100/tcp +mctp 1100/udp +pt2-discover 1101/tcp +pt2-discover 1101/udp +adobeserver-1 1102/tcp +adobeserver-1 1102/udp +adobeserver-2 1103/tcp +adobeserver-2 1103/udp +xrl 1104/tcp +xrl 1104/udp +ftranhc 1105/tcp +ftranhc 1105/udp +isoipsigport-1 1106/tcp +isoipsigport-1 1106/udp +isoipsigport-2 1107/tcp +isoipsigport-2 1107/udp +ratio-adp 1108/tcp +ratio-adp 1108/udp +webadmstart 1110/tcp +nfsd-keepalive 1110/udp +lmsocialserver 1111/tcp +lmsocialserver 1111/udp +icp 1112/tcp +icp 1112/udp +ltp-deepspace 1113/tcp +ltp-deepspace 1113/udp +ltp-deepspace 1113/dccp +mini-sql 1114/tcp +mini-sql 1114/udp +ardus-trns 1115/tcp +ardus-trns 1115/udp +ardus-cntl 1116/tcp +ardus-cntl 1116/udp +ardus-mtrns 1117/tcp +ardus-mtrns 1117/udp +sacred 1118/tcp +sacred 1118/udp +bnetgame 1119/tcp +bnetgame 1119/udp +bnetfile 1120/tcp +bnetfile 1120/udp +rmpp 1121/tcp +rmpp 1121/udp +availant-mgr 1122/tcp +availant-mgr 1122/udp +murray 1123/tcp +murray 1123/udp +hpvmmcontrol 1124/tcp +hpvmmcontrol 1124/udp +hpvmmagent 1125/tcp +hpvmmagent 1125/udp +hpvmmdata 1126/tcp +hpvmmdata 1126/udp +kwdb-commn 1127/tcp +kwdb-commn 1127/udp +saphostctrl 1128/tcp +saphostctrl 1128/udp +saphostctrls 1129/tcp +saphostctrls 1129/udp +casp 1130/tcp +casp 1130/udp +caspssl 1131/tcp +caspssl 1131/udp +kvm-via-ip 1132/tcp +kvm-via-ip 1132/udp +dfn 1133/tcp +dfn 1133/udp +aplx 1134/tcp +aplx 1134/udp +omnivision 1135/tcp +omnivision 1135/udp +hhb-gateway 1136/tcp +hhb-gateway 1136/udp +trim 1137/tcp +trim 1137/udp +encrypted-admin 1138/tcp +encrypted-admin 1138/udp +evm 1139/tcp +evm 1139/udp +autonoc 1140/tcp +autonoc 1140/udp +mxomss 1141/tcp +mxomss 1141/udp +edtools 1142/tcp +edtools 1142/udp +imyx 1143/tcp +imyx 1143/udp +fuscript 1144/tcp +fuscript 1144/udp +x9-icue 1145/tcp +x9-icue 1145/udp +audit-transfer 1146/tcp +audit-transfer 1146/udp +capioverlan 1147/tcp +capioverlan 1147/udp +elfiq-repl 1148/tcp +elfiq-repl 1148/udp +bvtsonar 1149/tcp +bvtsonar 1149/udp +blaze 1150/tcp +blaze 1150/udp +unizensus 1151/tcp +unizensus 1151/udp +winpoplanmess 1152/tcp +winpoplanmess 1152/udp +c1222-acse 1153/tcp +c1222-acse 1153/udp +resacommunity 1154/tcp +resacommunity 1154/udp +nfa 1155/tcp +nfa 1155/udp +iascontrol-oms 1156/tcp +iascontrol-oms 1156/udp +iascontrol 1157/tcp +iascontrol 1157/udp +dbcontrol-oms 1158/tcp +dbcontrol-oms 1158/udp +oracle-oms 1159/tcp +oracle-oms 1159/udp +olsv 1160/tcp +olsv 1160/udp +health-polling 1161/tcp +health-polling 1161/udp +health-trap 1162/tcp +health-trap 1162/udp +sddp 1163/tcp +sddp 1163/udp +qsm-proxy 1164/tcp +qsm-proxy 1164/udp +qsm-gui 1165/tcp +qsm-gui 1165/udp +qsm-remote 1166/tcp +qsm-remote 1166/udp +cisco-ipsla 1167/tcp +cisco-ipsla 1167/udp +cisco-ipsla 1167/sctp +vchat 1168/tcp +vchat 1168/udp +tripwire 1169/tcp +tripwire 1169/udp +atc-lm 1170/tcp +atc-lm 1170/udp +atc-appserver 1171/tcp +atc-appserver 1171/udp +dnap 1172/tcp +dnap 1172/udp +d-cinema-rrp 1173/tcp +d-cinema-rrp 1173/udp +fnet-remote-ui 1174/tcp +fnet-remote-ui 1174/udp +dossier 1175/tcp +dossier 1175/udp +indigo-server 1176/tcp +indigo-server 1176/udp +dkmessenger 1177/tcp +dkmessenger 1177/udp +sgi-storman 1178/tcp +sgi-storman 1178/udp +b2n 1179/tcp +b2n 1179/udp +mc-client 1180/tcp +mc-client 1180/udp +3comnetman 1181/tcp +3comnetman 1181/udp +accelenet 1182/tcp +accelenet-data 1182/udp +llsurfup-http 1183/tcp +llsurfup-http 1183/udp +llsurfup-https 1184/tcp +llsurfup-https 1184/udp +catchpole 1185/tcp +catchpole 1185/udp +mysql-cluster 1186/tcp +mysql-cluster 1186/udp +alias 1187/tcp +alias 1187/udp +hp-webadmin 1188/tcp +hp-webadmin 1188/udp +unet 1189/tcp +unet 1189/udp +commlinx-avl 1190/tcp +commlinx-avl 1190/udp +gpfs 1191/tcp +gpfs 1191/udp +caids-sensor 1192/tcp +caids-sensor 1192/udp +fiveacross 1193/tcp +fiveacross 1193/udp +openvpn 1194/tcp +openvpn 1194/udp +rsf-1 1195/tcp +rsf-1 1195/udp +netmagic 1196/tcp +netmagic 1196/udp +carrius-rshell 1197/tcp +carrius-rshell 1197/udp +cajo-discovery 1198/tcp +cajo-discovery 1198/udp +dmidi 1199/tcp +dmidi 1199/udp +scol 1200/tcp +scol 1200/udp +nucleus-sand 1201/tcp +nucleus-sand 1201/udp +caiccipc 1202/tcp +caiccipc 1202/udp +ssslic-mgr 1203/tcp +ssslic-mgr 1203/udp +ssslog-mgr 1204/tcp +ssslog-mgr 1204/udp +accord-mgc 1205/tcp +accord-mgc 1205/udp +anthony-data 1206/tcp +anthony-data 1206/udp +metasage 1207/tcp +metasage 1207/udp +seagull-ais 1208/tcp +seagull-ais 1208/udp +ipcd3 1209/tcp +ipcd3 1209/udp +eoss 1210/tcp +eoss 1210/udp +groove-dpp 1211/tcp +groove-dpp 1211/udp +lupa 1212/tcp +lupa 1212/udp +mpc-lifenet 1213/tcp +mpc-lifenet 1213/udp +kazaa 1214/tcp +kazaa 1214/udp +scanstat-1 1215/tcp +scanstat-1 1215/udp +etebac5 1216/tcp +etebac5 1216/udp +hpss-ndapi 1217/tcp +hpss-ndapi 1217/udp +aeroflight-ads 1218/tcp +aeroflight-ads 1218/udp +aeroflight-ret 1219/tcp +aeroflight-ret 1219/udp +qt-serveradmin 1220/tcp +qt-serveradmin 1220/udp +sweetware-apps 1221/tcp +sweetware-apps 1221/udp +nerv 1222/tcp +nerv 1222/udp +tgp 1223/tcp +tgp 1223/udp +vpnz 1224/tcp +vpnz 1224/udp +slinkysearch 1225/tcp +slinkysearch 1225/udp +stgxfws 1226/tcp +stgxfws 1226/udp +dns2go 1227/tcp +dns2go 1227/udp +florence 1228/tcp +florence 1228/udp +zented 1229/tcp +zented 1229/udp +periscope 1230/tcp +periscope 1230/udp +menandmice-lpm 1231/tcp +menandmice-lpm 1231/udp +first-defense 1232/tcp +first-defense 1232/udp +univ-appserver 1233/tcp +univ-appserver 1233/udp +search-agent 1234/tcp +search-agent 1234/udp +mosaicsyssvc1 1235/tcp +mosaicsyssvc1 1235/udp +bvcontrol 1236/tcp +bvcontrol 1236/udp +tsdos390 1237/tcp +tsdos390 1237/udp +hacl-qs 1238/tcp +hacl-qs 1238/udp +nmsd 1239/tcp +nmsd 1239/udp +instantia 1240/tcp +instantia 1240/udp +nessus 1241/tcp +nessus 1241/udp +nmasoverip 1242/tcp +nmasoverip 1242/udp +serialgateway 1243/tcp +serialgateway 1243/udp +isbconference1 1244/tcp +isbconference1 1244/udp +isbconference2 1245/tcp +isbconference2 1245/udp +payrouter 1246/tcp +payrouter 1246/udp +visionpyramid 1247/tcp +visionpyramid 1247/udp +hermes 1248/tcp +hermes 1248/udp +mesavistaco 1249/tcp +mesavistaco 1249/udp +swldy-sias 1250/tcp +swldy-sias 1250/udp +servergraph 1251/tcp +servergraph 1251/udp +bspne-pcc 1252/tcp +bspne-pcc 1252/udp +q55-pcc 1253/tcp +q55-pcc 1253/udp +de-noc 1254/tcp +de-noc 1254/udp +de-cache-query 1255/tcp +de-cache-query 1255/udp +de-server 1256/tcp +de-server 1256/udp +shockwave2 1257/tcp +shockwave2 1257/udp +opennl 1258/tcp +opennl 1258/udp +opennl-voice 1259/tcp +opennl-voice 1259/udp +ibm-ssd 1260/tcp +ibm-ssd 1260/udp +mpshrsv 1261/tcp +mpshrsv 1261/udp +qnts-orb 1262/tcp +qnts-orb 1262/udp +dka 1263/tcp +dka 1263/udp +prat 1264/tcp +prat 1264/udp +dssiapi 1265/tcp +dssiapi 1265/udp +dellpwrappks 1266/tcp +dellpwrappks 1266/udp +epc 1267/tcp +epc 1267/udp +propel-msgsys 1268/tcp +propel-msgsys 1268/udp +watilapp 1269/tcp +watilapp 1269/udp +opsmgr 1270/tcp +opsmgr 1270/udp +excw 1271/tcp +excw 1271/udp +cspmlockmgr 1272/tcp +cspmlockmgr 1272/udp +emc-gateway 1273/tcp +emc-gateway 1273/udp +t1distproc 1274/tcp +t1distproc 1274/udp +ivcollector 1275/tcp +ivcollector 1275/udp +miva-mqs 1277/tcp +miva-mqs 1277/udp +dellwebadmin-1 1278/tcp +dellwebadmin-1 1278/udp +dellwebadmin-2 1279/tcp +dellwebadmin-2 1279/udp +pictrography 1280/tcp +pictrography 1280/udp +healthd 1281/tcp +healthd 1281/udp +emperion 1282/tcp +emperion 1282/udp +productinfo 1283/tcp +productinfo 1283/udp +iee-qfx 1284/tcp +iee-qfx 1284/udp +neoiface 1285/tcp +neoiface 1285/udp +netuitive 1286/tcp +netuitive 1286/udp +routematch 1287/tcp +routematch 1287/udp +navbuddy 1288/tcp +navbuddy 1288/udp +jwalkserver 1289/tcp +jwalkserver 1289/udp +winjaserver 1290/tcp +winjaserver 1290/udp +seagulllms 1291/tcp +seagulllms 1291/udp +dsdn 1292/tcp +dsdn 1292/udp +pkt-krb-ipsec 1293/tcp +pkt-krb-ipsec 1293/udp +cmmdriver 1294/tcp +cmmdriver 1294/udp +ehtp 1295/tcp +ehtp 1295/udp +dproxy 1296/tcp +dproxy 1296/udp +sdproxy 1297/tcp +sdproxy 1297/udp +lpcp 1298/tcp +lpcp 1298/udp +hp-sci 1299/tcp +hp-sci 1299/udp +h323hostcallsc 1300/tcp +h323hostcallsc 1300/udp +sftsrv 1303/tcp +sftsrv 1303/udp +boomerang 1304/tcp +boomerang 1304/udp +pe-mike 1305/tcp +pe-mike 1305/udp +re-conn-proto 1306/tcp +re-conn-proto 1306/udp +pacmand 1307/tcp +pacmand 1307/udp +odsi 1308/tcp +odsi 1308/udp +jtag-server 1309/tcp +jtag-server 1309/udp +husky 1310/tcp +husky 1310/udp +rxmon 1311/tcp +rxmon 1311/udp +sti-envision 1312/tcp +sti-envision 1312/udp +bmc-patroldb 1313/tcp +bmc-patroldb 1313/udp +pdps 1314/tcp +pdps 1314/udp +els 1315/tcp +els 1315/udp +exbit-escp 1316/tcp +exbit-escp 1316/udp +vrts-ipcserver 1317/tcp +vrts-ipcserver 1317/udp +krb5gatekeeper 1318/tcp +krb5gatekeeper 1318/udp +amx-icsp 1319/tcp +amx-icsp 1319/udp +amx-axbnet 1320/tcp +amx-axbnet 1320/udp +pip 1321/tcp +pip 1321/udp +novation 1322/tcp +novation 1322/udp +brcd 1323/tcp +brcd 1323/udp +delta-mcp 1324/tcp +delta-mcp 1324/udp +dx-instrument 1325/tcp +dx-instrument 1325/udp +wimsic 1326/tcp +wimsic 1326/udp +ultrex 1327/tcp +ultrex 1327/udp +ewall 1328/tcp +ewall 1328/udp +netdb-export 1329/tcp +netdb-export 1329/udp +streetperfect 1330/tcp +streetperfect 1330/udp +intersan 1331/tcp +intersan 1331/udp +pcia-rxp-b 1332/tcp +pcia-rxp-b 1332/udp +passwrd-policy 1333/tcp +passwrd-policy 1333/udp +writesrv 1334/tcp +writesrv 1334/udp +digital-notary 1335/tcp +digital-notary 1335/udp +ischat 1336/tcp +ischat 1336/udp +menandmice-dns 1337/tcp +menandmice-dns 1337/udp +wmc-log-svc 1338/tcp +wmc-log-svc 1338/udp +kjtsiteserver 1339/tcp +kjtsiteserver 1339/udp +naap 1340/tcp +naap 1340/udp +qubes 1341/tcp +qubes 1341/udp +esbroker 1342/tcp +esbroker 1342/udp +re101 1343/tcp +re101 1343/udp +icap 1344/tcp +icap 1344/udp +vpjp 1345/tcp +vpjp 1345/udp +alta-ana-lm 1346/tcp +alta-ana-lm 1346/udp +bbn-mmc 1347/tcp +bbn-mmc 1347/udp +bbn-mmx 1348/tcp +bbn-mmx 1348/udp +sbook 1349/tcp +sbook 1349/udp +editbench 1350/tcp +editbench 1350/udp +equationbuilder 1351/tcp +equationbuilder 1351/udp +lotusnote 1352/tcp +lotusnote 1352/udp +relief 1353/tcp +relief 1353/udp +XSIP-network 1354/tcp +XSIP-network 1354/udp +intuitive-edge 1355/tcp +intuitive-edge 1355/udp +cuillamartin 1356/tcp +cuillamartin 1356/udp +pegboard 1357/tcp +pegboard 1357/udp +connlcli 1358/tcp +connlcli 1358/udp +ftsrv 1359/tcp +ftsrv 1359/udp +mimer 1360/tcp +mimer 1360/udp +linx 1361/tcp +linx 1361/udp +timeflies 1362/tcp +timeflies 1362/udp +ndm-requester 1363/tcp +ndm-requester 1363/udp +ndm-server 1364/tcp +ndm-server 1364/udp +adapt-sna 1365/tcp +adapt-sna 1365/udp +netware-csp 1366/tcp +netware-csp 1366/udp +dcs 1367/tcp +dcs 1367/udp +screencast 1368/tcp +screencast 1368/udp +gv-us 1369/tcp +gv-us 1369/udp +us-gv 1370/tcp +us-gv 1370/udp +fc-cli 1371/tcp +fc-cli 1371/udp +fc-ser 1372/tcp +fc-ser 1372/udp +chromagrafx 1373/tcp +chromagrafx 1373/udp +molly 1374/tcp +molly 1374/udp +bytex 1375/tcp +bytex 1375/udp +ibm-pps 1376/tcp +ibm-pps 1376/udp +cichlid 1377/tcp +cichlid 1377/udp +elan 1378/tcp +elan 1378/udp +dbreporter 1379/tcp +dbreporter 1379/udp +telesis-licman 1380/tcp +telesis-licman 1380/udp +apple-licman 1381/tcp +apple-licman 1381/udp +udt-os 1382/tcp +udt-os 1382/udp +gwha 1383/tcp +gwha 1383/udp +os-licman 1384/tcp +os-licman 1384/udp +atex-elmd 1385/tcp +atex-elmd 1385/udp +checksum 1386/tcp +checksum 1386/udp +cadsi-lm 1387/tcp +cadsi-lm 1387/udp +objective-dbc 1388/tcp +objective-dbc 1388/udp +iclpv-dm 1389/tcp +iclpv-dm 1389/udp +iclpv-sc 1390/tcp +iclpv-sc 1390/udp +iclpv-sas 1391/tcp +iclpv-sas 1391/udp +iclpv-pm 1392/tcp +iclpv-pm 1392/udp +iclpv-nls 1393/tcp +iclpv-nls 1393/udp +iclpv-nlc 1394/tcp +iclpv-nlc 1394/udp +iclpv-wsm 1395/tcp +iclpv-wsm 1395/udp +dvl-activemail 1396/tcp +dvl-activemail 1396/udp +audio-activmail 1397/tcp +audio-activmail 1397/udp +video-activmail 1398/tcp +video-activmail 1398/udp +cadkey-licman 1399/tcp +cadkey-licman 1399/udp +cadkey-tablet 1400/tcp +cadkey-tablet 1400/udp +goldleaf-licman 1401/tcp +goldleaf-licman 1401/udp +prm-sm-np 1402/tcp +prm-sm-np 1402/udp +prm-nm-np 1403/tcp +prm-nm-np 1403/udp +igi-lm 1404/tcp +igi-lm 1404/udp +ibm-res 1405/tcp +ibm-res 1405/udp +netlabs-lm 1406/tcp +netlabs-lm 1406/udp +tibet-server 1407/tcp +sophia-lm 1408/tcp +sophia-lm 1408/udp +here-lm 1409/tcp +here-lm 1409/udp +hiq 1410/tcp +hiq 1410/udp +af 1411/tcp +af 1411/udp +innosys 1412/tcp +innosys 1412/udp +innosys-acl 1413/tcp +innosys-acl 1413/udp +ibm-mqseries 1414/tcp +ibm-mqseries 1414/udp +dbstar 1415/tcp +dbstar 1415/udp +novell-lu6-2 1416/tcp +novell-lu6-2 1416/udp +timbuktu-srv1 1417/tcp +timbuktu-srv1 1417/udp +timbuktu-srv2 1418/tcp +timbuktu-srv2 1418/udp +timbuktu-srv3 1419/tcp +timbuktu-srv3 1419/udp +timbuktu-srv4 1420/tcp +timbuktu-srv4 1420/udp +gandalf-lm 1421/tcp +gandalf-lm 1421/udp +autodesk-lm 1422/tcp +autodesk-lm 1422/udp +essbase 1423/tcp +essbase 1423/udp +hybrid 1424/tcp +hybrid 1424/udp +zion-lm 1425/tcp +zion-lm 1425/udp +sais 1426/tcp +sais 1426/udp +mloadd 1427/tcp +mloadd 1427/udp +informatik-lm 1428/tcp +informatik-lm 1428/udp +nms 1429/tcp +nms 1429/udp +tpdu 1430/tcp +tpdu 1430/udp +rgtp 1431/tcp +rgtp 1431/udp +blueberry-lm 1432/tcp +blueberry-lm 1432/udp +ms-sql-s 1433/tcp +ms-sql-s 1433/udp +ms-sql-m 1434/tcp +ms-sql-m 1434/udp +ibm-cics 1435/tcp +ibm-cics 1435/udp +saism 1436/tcp +saism 1436/udp +tabula 1437/tcp +tabula 1437/udp +eicon-server 1438/tcp +eicon-server 1438/udp +eicon-x25 1439/tcp +eicon-x25 1439/udp +eicon-slp 1440/tcp +eicon-slp 1440/udp +cadis-1 1441/tcp +cadis-1 1441/udp +cadis-2 1442/tcp +cadis-2 1442/udp +ies-lm 1443/tcp +ies-lm 1443/udp +marcam-lm 1444/tcp +marcam-lm 1444/udp +proxima-lm 1445/tcp +proxima-lm 1445/udp +ora-lm 1446/tcp +ora-lm 1446/udp +apri-lm 1447/tcp +apri-lm 1447/udp +oc-lm 1448/tcp +oc-lm 1448/udp +peport 1449/tcp +peport 1449/udp +dwf 1450/tcp +dwf 1450/udp +infoman 1451/tcp +infoman 1451/udp +gtegsc-lm 1452/tcp +gtegsc-lm 1452/udp +genie-lm 1453/tcp +genie-lm 1453/udp +interhdl-elmd 1454/tcp +interhdl-elmd 1454/udp +esl-lm 1455/tcp +esl-lm 1455/udp +dca 1456/tcp +dca 1456/udp +valisys-lm 1457/tcp +valisys-lm 1457/udp +nrcabq-lm 1458/tcp +nrcabq-lm 1458/udp +proshare1 1459/tcp +proshare1 1459/udp +proshare2 1460/tcp +proshare2 1460/udp +ibm-wrless-lan 1461/tcp +ibm-wrless-lan 1461/udp +world-lm 1462/tcp +world-lm 1462/udp +nucleus 1463/tcp +nucleus 1463/udp +msl-lmd 1464/tcp +msl-lmd 1464/udp +pipes 1465/tcp +pipes 1465/udp +oceansoft-lm 1466/tcp +oceansoft-lm 1466/udp +csdmbase 1467/tcp +csdmbase 1467/udp +csdm 1468/tcp +csdm 1468/udp +aal-lm 1469/tcp +aal-lm 1469/udp +uaiact 1470/tcp +uaiact 1470/udp +csdmbase 1471/tcp +csdmbase 1471/udp +csdm 1472/tcp +csdm 1472/udp +openmath 1473/tcp +openmath 1473/udp +telefinder 1474/tcp +telefinder 1474/udp +taligent-lm 1475/tcp +taligent-lm 1475/udp +clvm-cfg 1476/tcp +clvm-cfg 1476/udp +ms-sna-server 1477/tcp +ms-sna-server 1477/udp +ms-sna-base 1478/tcp +ms-sna-base 1478/udp +dberegister 1479/tcp +dberegister 1479/udp +pacerforum 1480/tcp +pacerforum 1480/udp +airs 1481/tcp +airs 1481/udp +miteksys-lm 1482/tcp +miteksys-lm 1482/udp +afs 1483/tcp +afs 1483/udp +confluent 1484/tcp +confluent 1484/udp +lansource 1485/tcp +lansource 1485/udp +nms-topo-serv 1486/tcp +nms-topo-serv 1486/udp +localinfosrvr 1487/tcp +localinfosrvr 1487/udp +docstor 1488/tcp +docstor 1488/udp +dmdocbroker 1489/tcp +dmdocbroker 1489/udp +insitu-conf 1490/tcp +insitu-conf 1490/udp +stone-design-1 1492/tcp +stone-design-1 1492/udp +netmap-lm 1493/tcp +netmap-lm 1493/udp +ica 1494/tcp +ica 1494/udp +cvc 1495/tcp +cvc 1495/udp +liberty-lm 1496/tcp +liberty-lm 1496/udp +rfx-lm 1497/tcp +rfx-lm 1497/udp +sybase-sqlany 1498/tcp +sybase-sqlany 1498/udp +fhc 1499/tcp +fhc 1499/udp +vlsi-lm 1500/tcp +vlsi-lm 1500/udp +saiscm 1501/tcp +saiscm 1501/udp +shivadiscovery 1502/tcp +shivadiscovery 1502/udp +imtc-mcs 1503/tcp +imtc-mcs 1503/udp +evb-elm 1504/tcp +evb-elm 1504/udp +funkproxy 1505/tcp +funkproxy 1505/udp +utcd 1506/tcp +utcd 1506/udp +symplex 1507/tcp +symplex 1507/udp +diagmond 1508/tcp +diagmond 1508/udp +robcad-lm 1509/tcp +robcad-lm 1509/udp +mvx-lm 1510/tcp +mvx-lm 1510/udp +3l-l1 1511/tcp +3l-l1 1511/udp +wins 1512/tcp +wins 1512/udp +fujitsu-dtc 1513/tcp +fujitsu-dtc 1513/udp +fujitsu-dtcns 1514/tcp +fujitsu-dtcns 1514/udp +ifor-protocol 1515/tcp +ifor-protocol 1515/udp +vpad 1516/tcp +vpad 1516/udp +vpac 1517/tcp +vpac 1517/udp +vpvd 1518/tcp +vpvd 1518/udp +vpvc 1519/tcp +vpvc 1519/udp +atm-zip-office 1520/tcp +atm-zip-office 1520/udp +ncube-lm 1521/tcp +ncube-lm 1521/udp +ricardo-lm 1522/tcp +ricardo-lm 1522/udp +cichild-lm 1523/tcp +cichild-lm 1523/udp +ingreslock 1524/tcp +ingreslock 1524/udp +orasrv 1525/tcp +orasrv 1525/udp +prospero-np 1525/tcp +prospero-np 1525/udp +pdap-np 1526/tcp +pdap-np 1526/udp +tlisrv 1527/tcp +tlisrv 1527/udp +ngr-t 1528/udp +coauthor 1529/tcp +coauthor 1529/udp +rap-service 1530/tcp +rap-service 1530/udp +rap-listen 1531/tcp +rap-listen 1531/udp +miroconnect 1532/tcp +miroconnect 1532/udp +virtual-places 1533/tcp +virtual-places 1533/udp +micromuse-lm 1534/tcp +micromuse-lm 1534/udp +ampr-info 1535/tcp +ampr-info 1535/udp +ampr-inter 1536/tcp +ampr-inter 1536/udp +sdsc-lm 1537/tcp +sdsc-lm 1537/udp +3ds-lm 1538/tcp +3ds-lm 1538/udp +intellistor-lm 1539/tcp +intellistor-lm 1539/udp +rds 1540/tcp +rds 1540/udp +rds2 1541/tcp +rds2 1541/udp +gridgen-elmd 1542/tcp +gridgen-elmd 1542/udp +simba-cs 1543/tcp +simba-cs 1543/udp +aspeclmd 1544/tcp +aspeclmd 1544/udp +vistium-share 1545/tcp +vistium-share 1545/udp +abbaccuray 1546/tcp +abbaccuray 1546/udp +laplink 1547/tcp +laplink 1547/udp +axon-lm 1548/tcp +axon-lm 1548/udp +shivahose 1549/tcp +shivasound 1549/udp +3m-image-lm 1550/tcp +3m-image-lm 1550/udp +hecmtl-db 1551/tcp +hecmtl-db 1551/udp +pciarray 1552/tcp +pciarray 1552/udp +sna-cs 1553/tcp +sna-cs 1553/udp +caci-lm 1554/tcp +caci-lm 1554/udp +livelan 1555/tcp +livelan 1555/udp +veritas-pbx 1556/tcp +veritas-pbx 1556/udp +arbortext-lm 1557/tcp +arbortext-lm 1557/udp +xingmpeg 1558/tcp +xingmpeg 1558/udp +web2host 1559/tcp +web2host 1559/udp +asci-val 1560/tcp +asci-val 1560/udp +facilityview 1561/tcp +facilityview 1561/udp +pconnectmgr 1562/tcp +pconnectmgr 1562/udp +cadabra-lm 1563/tcp +cadabra-lm 1563/udp +pay-per-view 1564/tcp +pay-per-view 1564/udp +winddlb 1565/tcp +winddlb 1565/udp +corelvideo 1566/tcp +corelvideo 1566/udp +jlicelmd 1567/tcp +jlicelmd 1567/udp +tsspmap 1568/tcp +tsspmap 1568/udp +ets 1569/tcp +ets 1569/udp +orbixd 1570/tcp +orbixd 1570/udp +rdb-dbs-disp 1571/tcp +rdb-dbs-disp 1571/udp +chip-lm 1572/tcp +chip-lm 1572/udp +itscomm-ns 1573/tcp +itscomm-ns 1573/udp +mvel-lm 1574/tcp +mvel-lm 1574/udp +oraclenames 1575/tcp +oraclenames 1575/udp +moldflow-lm 1576/tcp +moldflow-lm 1576/udp +hypercube-lm 1577/tcp +hypercube-lm 1577/udp +jacobus-lm 1578/tcp +jacobus-lm 1578/udp +ioc-sea-lm 1579/tcp +ioc-sea-lm 1579/udp +tn-tl-r1 1580/tcp +tn-tl-r2 1580/udp +mil-2045-47001 1581/tcp +mil-2045-47001 1581/udp +msims 1582/tcp +msims 1582/udp +simbaexpress 1583/tcp +simbaexpress 1583/udp +tn-tl-fd2 1584/tcp +tn-tl-fd2 1584/udp +intv 1585/tcp +intv 1585/udp +ibm-abtact 1586/tcp +ibm-abtact 1586/udp +pra-elmd 1587/tcp +pra-elmd 1587/udp +triquest-lm 1588/tcp +triquest-lm 1588/udp +vqp 1589/tcp +vqp 1589/udp +gemini-lm 1590/tcp +gemini-lm 1590/udp +ncpm-pm 1591/tcp +ncpm-pm 1591/udp +commonspace 1592/tcp +commonspace 1592/udp +mainsoft-lm 1593/tcp +mainsoft-lm 1593/udp +sixtrak 1594/tcp +sixtrak 1594/udp +radio 1595/tcp +radio 1595/udp +radio-sm 1596/tcp +radio-bc 1596/udp +orbplus-iiop 1597/tcp +orbplus-iiop 1597/udp +picknfs 1598/tcp +picknfs 1598/udp +simbaservices 1599/tcp +simbaservices 1599/udp +issd 1600/tcp +issd 1600/udp +aas 1601/tcp +aas 1601/udp +inspect 1602/tcp +inspect 1602/udp +picodbc 1603/tcp +picodbc 1603/udp +icabrowser 1604/tcp +icabrowser 1604/udp +slp 1605/tcp +slp 1605/udp +slm-api 1606/tcp +slm-api 1606/udp +stt 1607/tcp +stt 1607/udp +smart-lm 1608/tcp +smart-lm 1608/udp +isysg-lm 1609/tcp +isysg-lm 1609/udp +taurus-wh 1610/tcp +taurus-wh 1610/udp +ill 1611/tcp +ill 1611/udp +netbill-trans 1612/tcp +netbill-trans 1612/udp +netbill-keyrep 1613/tcp +netbill-keyrep 1613/udp +netbill-cred 1614/tcp +netbill-cred 1614/udp +netbill-auth 1615/tcp +netbill-auth 1615/udp +netbill-prod 1616/tcp +netbill-prod 1616/udp +nimrod-agent 1617/tcp +nimrod-agent 1617/udp +skytelnet 1618/tcp +skytelnet 1618/udp +xs-openstorage 1619/tcp +xs-openstorage 1619/udp +faxportwinport 1620/tcp +faxportwinport 1620/udp +softdataphone 1621/tcp +softdataphone 1621/udp +ontime 1622/tcp +ontime 1622/udp +jaleosnd 1623/tcp +jaleosnd 1623/udp +udp-sr-port 1624/tcp +udp-sr-port 1624/udp +svs-omagent 1625/tcp +svs-omagent 1625/udp +shockwave 1626/tcp +shockwave 1626/udp +t128-gateway 1627/tcp +t128-gateway 1627/udp +lontalk-norm 1628/tcp +lontalk-norm 1628/udp +lontalk-urgnt 1629/tcp +lontalk-urgnt 1629/udp +oraclenet8cman 1630/tcp +oraclenet8cman 1630/udp +visitview 1631/tcp +visitview 1631/udp +pammratc 1632/tcp +pammratc 1632/udp +pammrpc 1633/tcp +pammrpc 1633/udp +loaprobe 1634/tcp +loaprobe 1634/udp +edb-server1 1635/tcp +edb-server1 1635/udp +isdc 1636/tcp +isdc 1636/udp +islc 1637/tcp +islc 1637/udp +ismc 1638/tcp +ismc 1638/udp +cert-initiator 1639/tcp +cert-initiator 1639/udp +cert-responder 1640/tcp +cert-responder 1640/udp +invision 1641/tcp +invision 1641/udp +isis-am 1642/tcp +isis-am 1642/udp +isis-ambc 1643/tcp +isis-ambc 1643/udp +saiseh 1644/tcp +saiseh 1644/udp +sightline 1645/tcp +sightline 1645/udp +sa-msg-port 1646/tcp +sa-msg-port 1646/udp +rsap 1647/tcp +rsap 1647/udp +concurrent-lm 1648/tcp +concurrent-lm 1648/udp +kermit 1649/tcp +kermit 1649/udp +nkd 1650/tcp +nkd 1650/udp +shiva-confsrvr 1651/tcp +shiva-confsrvr 1651/udp +xnmp 1652/tcp +xnmp 1652/udp +alphatech-lm 1653/tcp +alphatech-lm 1653/udp +stargatealerts 1654/tcp +stargatealerts 1654/udp +dec-mbadmin 1655/tcp +dec-mbadmin 1655/udp +dec-mbadmin-h 1656/tcp +dec-mbadmin-h 1656/udp +fujitsu-mmpdc 1657/tcp +fujitsu-mmpdc 1657/udp +sixnetudr 1658/tcp +sixnetudr 1658/udp +sg-lm 1659/tcp +sg-lm 1659/udp +skip-mc-gikreq 1660/tcp +skip-mc-gikreq 1660/udp +netview-aix-1 1661/tcp +netview-aix-1 1661/udp +netview-aix-2 1662/tcp +netview-aix-2 1662/udp +netview-aix-3 1663/tcp +netview-aix-3 1663/udp +netview-aix-4 1664/tcp +netview-aix-4 1664/udp +netview-aix-5 1665/tcp +netview-aix-5 1665/udp +netview-aix-6 1666/tcp +netview-aix-6 1666/udp +netview-aix-7 1667/tcp +netview-aix-7 1667/udp +netview-aix-8 1668/tcp +netview-aix-8 1668/udp +netview-aix-9 1669/tcp +netview-aix-9 1669/udp +netview-aix-10 1670/tcp +netview-aix-10 1670/udp +netview-aix-11 1671/tcp +netview-aix-11 1671/udp +netview-aix-12 1672/tcp +netview-aix-12 1672/udp +proshare-mc-1 1673/tcp +proshare-mc-1 1673/udp +proshare-mc-2 1674/tcp +proshare-mc-2 1674/udp +pdp 1675/tcp +pdp 1675/udp +netcomm1 1676/tcp +netcomm2 1676/udp +groupwise 1677/tcp +groupwise 1677/udp +prolink 1678/tcp +prolink 1678/udp +darcorp-lm 1679/tcp +darcorp-lm 1679/udp +microcom-sbp 1680/tcp +microcom-sbp 1680/udp +sd-elmd 1681/tcp +sd-elmd 1681/udp +lanyon-lantern 1682/tcp +lanyon-lantern 1682/udp +ncpm-hip 1683/tcp +ncpm-hip 1683/udp +snaresecure 1684/tcp +snaresecure 1684/udp +n2nremote 1685/tcp +n2nremote 1685/udp +cvmon 1686/tcp +cvmon 1686/udp +nsjtp-ctrl 1687/tcp +nsjtp-ctrl 1687/udp +nsjtp-data 1688/tcp +nsjtp-data 1688/udp +firefox 1689/tcp +firefox 1689/udp +ng-umds 1690/tcp +ng-umds 1690/udp +empire-empuma 1691/tcp +empire-empuma 1691/udp +sstsys-lm 1692/tcp +sstsys-lm 1692/udp +rrirtr 1693/tcp +rrirtr 1693/udp +rrimwm 1694/tcp +rrimwm 1694/udp +rrilwm 1695/tcp +rrilwm 1695/udp +rrifmm 1696/tcp +rrifmm 1696/udp +rrisat 1697/tcp +rrisat 1697/udp +rsvp-encap-1 1698/tcp +rsvp-encap-1 1698/udp +rsvp-encap-2 1699/tcp +rsvp-encap-2 1699/udp +mps-raft 1700/tcp +mps-raft 1700/udp +l2f 1701/tcp +l2f 1701/udp +l2tp 1701/tcp +l2tp 1701/udp +deskshare 1702/tcp +deskshare 1702/udp +hb-engine 1703/tcp +hb-engine 1703/udp +bcs-broker 1704/tcp +bcs-broker 1704/udp +slingshot 1705/tcp +slingshot 1705/udp +jetform 1706/tcp +jetform 1706/udp +vdmplay 1707/tcp +vdmplay 1707/udp +gat-lmd 1708/tcp +gat-lmd 1708/udp +centra 1709/tcp +centra 1709/udp +impera 1710/tcp +impera 1710/udp +pptconference 1711/tcp +pptconference 1711/udp +registrar 1712/tcp +registrar 1712/udp +conferencetalk 1713/tcp +conferencetalk 1713/udp +sesi-lm 1714/tcp +sesi-lm 1714/udp +houdini-lm 1715/tcp +houdini-lm 1715/udp +xmsg 1716/tcp +xmsg 1716/udp +fj-hdnet 1717/tcp +fj-hdnet 1717/udp +h323gatedisc 1718/tcp +h323gatedisc 1718/udp +h323gatestat 1719/tcp +h323gatestat 1719/udp +h323hostcall 1720/tcp +h323hostcall 1720/udp +h323hostcall 1720/sctp +caicci 1721/tcp +caicci 1721/udp +hks-lm 1722/tcp +hks-lm 1722/udp +pptp 1723/tcp +pptp 1723/udp +csbphonemaster 1724/tcp +csbphonemaster 1724/udp +iden-ralp 1725/tcp +iden-ralp 1725/udp +iberiagames 1726/tcp +iberiagames 1726/udp +winddx 1727/tcp +winddx 1727/udp +telindus 1728/tcp +telindus 1728/udp +citynl 1729/tcp +citynl 1729/udp +roketz 1730/tcp +roketz 1730/udp +msiccp 1731/tcp +msiccp 1731/udp +proxim 1732/tcp +proxim 1732/udp +siipat 1733/tcp +siipat 1733/udp +cambertx-lm 1734/tcp +cambertx-lm 1734/udp +privatechat 1735/tcp +privatechat 1735/udp +street-stream 1736/tcp +street-stream 1736/udp +ultimad 1737/tcp +ultimad 1737/udp +gamegen1 1738/tcp +gamegen1 1738/udp +webaccess 1739/tcp +webaccess 1739/udp +encore 1740/tcp +encore 1740/udp +cisco-net-mgmt 1741/tcp +cisco-net-mgmt 1741/udp +3Com-nsd 1742/tcp +3Com-nsd 1742/udp +cinegrfx-lm 1743/tcp +cinegrfx-lm 1743/udp +ncpm-ft 1744/tcp +ncpm-ft 1744/udp +remote-winsock 1745/tcp +remote-winsock 1745/udp +ftrapid-1 1746/tcp +ftrapid-1 1746/udp +ftrapid-2 1747/tcp +ftrapid-2 1747/udp +oracle-em1 1748/tcp +oracle-em1 1748/udp +aspen-services 1749/tcp +aspen-services 1749/udp +sslp 1750/tcp +sslp 1750/udp +swiftnet 1751/tcp +swiftnet 1751/udp +lofr-lm 1752/tcp +lofr-lm 1752/udp +predatar-comms 1753/tcp +oracle-em2 1754/tcp +oracle-em2 1754/udp +ms-streaming 1755/tcp +ms-streaming 1755/udp +capfast-lmd 1756/tcp +capfast-lmd 1756/udp +cnhrp 1757/tcp +cnhrp 1757/udp +tftp-mcast 1758/tcp +tftp-mcast 1758/udp +spss-lm 1759/tcp +spss-lm 1759/udp +www-ldap-gw 1760/tcp +www-ldap-gw 1760/udp +cft-0 1761/tcp +cft-0 1761/udp +cft-1 1762/tcp +cft-1 1762/udp +cft-2 1763/tcp +cft-2 1763/udp +cft-3 1764/tcp +cft-3 1764/udp +cft-4 1765/tcp +cft-4 1765/udp +cft-5 1766/tcp +cft-5 1766/udp +cft-6 1767/tcp +cft-6 1767/udp +cft-7 1768/tcp +cft-7 1768/udp +bmc-net-adm 1769/tcp +bmc-net-adm 1769/udp +bmc-net-svc 1770/tcp +bmc-net-svc 1770/udp +vaultbase 1771/tcp +vaultbase 1771/udp +essweb-gw 1772/tcp +essweb-gw 1772/udp +kmscontrol 1773/tcp +kmscontrol 1773/udp +global-dtserv 1774/tcp +global-dtserv 1774/udp +vdab 1775/tcp +femis 1776/tcp +femis 1776/udp +powerguardian 1777/tcp +powerguardian 1777/udp +prodigy-intrnet 1778/tcp +prodigy-intrnet 1778/udp +pharmasoft 1779/tcp +pharmasoft 1779/udp +dpkeyserv 1780/tcp +dpkeyserv 1780/udp +answersoft-lm 1781/tcp +answersoft-lm 1781/udp +hp-hcip 1782/tcp +hp-hcip 1782/udp +finle-lm 1784/tcp +finle-lm 1784/udp +windlm 1785/tcp +windlm 1785/udp +funk-logger 1786/tcp +funk-logger 1786/udp +funk-license 1787/tcp +funk-license 1787/udp +psmond 1788/tcp +psmond 1788/udp +hello 1789/tcp +hello 1789/udp +nmsp 1790/tcp +nmsp 1790/udp +ea1 1791/tcp +ea1 1791/udp +ibm-dt-2 1792/tcp +ibm-dt-2 1792/udp +rsc-robot 1793/tcp +rsc-robot 1793/udp +cera-bcm 1794/tcp +cera-bcm 1794/udp +dpi-proxy 1795/tcp +dpi-proxy 1795/udp +vocaltec-admin 1796/tcp +vocaltec-admin 1796/udp +uma 1797/tcp +uma 1797/udp +etp 1798/tcp +etp 1798/udp +netrisk 1799/tcp +netrisk 1799/udp +ansys-lm 1800/tcp +ansys-lm 1800/udp +msmq 1801/tcp +msmq 1801/udp +concomp1 1802/tcp +concomp1 1802/udp +hp-hcip-gwy 1803/tcp +hp-hcip-gwy 1803/udp +enl 1804/tcp +enl 1804/udp +enl-name 1805/tcp +enl-name 1805/udp +musiconline 1806/tcp +musiconline 1806/udp +fhsp 1807/tcp +fhsp 1807/udp +oracle-vp2 1808/tcp +oracle-vp2 1808/udp +oracle-vp1 1809/tcp +oracle-vp1 1809/udp +jerand-lm 1810/tcp +jerand-lm 1810/udp +scientia-sdb 1811/tcp +scientia-sdb 1811/udp +radius 1812/tcp +radius 1812/udp +radius-acct 1813/tcp +radius-acct 1813/udp +tdp-suite 1814/tcp +tdp-suite 1814/udp +mmpft 1815/tcp +mmpft 1815/udp +harp 1816/tcp +harp 1816/udp +rkb-oscs 1817/tcp +rkb-oscs 1817/udp +etftp 1818/tcp +etftp 1818/udp +plato-lm 1819/tcp +plato-lm 1819/udp +mcagent 1820/tcp +mcagent 1820/udp +donnyworld 1821/tcp +donnyworld 1821/udp +es-elmd 1822/tcp +es-elmd 1822/udp +unisys-lm 1823/tcp +unisys-lm 1823/udp +metrics-pas 1824/tcp +metrics-pas 1824/udp +direcpc-video 1825/tcp +direcpc-video 1825/udp +ardt 1826/tcp +ardt 1826/udp +asi 1827/tcp +asi 1827/udp +itm-mcell-u 1828/tcp +itm-mcell-u 1828/udp +optika-emedia 1829/tcp +optika-emedia 1829/udp +net8-cman 1830/tcp +net8-cman 1830/udp +myrtle 1831/tcp +myrtle 1831/udp +tht-treasure 1832/tcp +tht-treasure 1832/udp +udpradio 1833/tcp +udpradio 1833/udp +ardusuni 1834/tcp +ardusuni 1834/udp +ardusmul 1835/tcp +ardusmul 1835/udp +ste-smsc 1836/tcp +ste-smsc 1836/udp +csoft1 1837/tcp +csoft1 1837/udp +talnet 1838/tcp +talnet 1838/udp +netopia-vo1 1839/tcp +netopia-vo1 1839/udp +netopia-vo2 1840/tcp +netopia-vo2 1840/udp +netopia-vo3 1841/tcp +netopia-vo3 1841/udp +netopia-vo4 1842/tcp +netopia-vo4 1842/udp +netopia-vo5 1843/tcp +netopia-vo5 1843/udp +direcpc-dll 1844/tcp +direcpc-dll 1844/udp +altalink 1845/tcp +altalink 1845/udp +tunstall-pnc 1846/tcp +tunstall-pnc 1846/udp +slp-notify 1847/tcp +slp-notify 1847/udp +fjdocdist 1848/tcp +fjdocdist 1848/udp +alpha-sms 1849/tcp +alpha-sms 1849/udp +gsi 1850/tcp +gsi 1850/udp +ctcd 1851/tcp +ctcd 1851/udp +virtual-time 1852/tcp +virtual-time 1852/udp +vids-avtp 1853/tcp +vids-avtp 1853/udp +buddy-draw 1854/tcp +buddy-draw 1854/udp +fiorano-rtrsvc 1855/tcp +fiorano-rtrsvc 1855/udp +fiorano-msgsvc 1856/tcp +fiorano-msgsvc 1856/udp +datacaptor 1857/tcp +datacaptor 1857/udp +privateark 1858/tcp +privateark 1858/udp +gammafetchsvr 1859/tcp +gammafetchsvr 1859/udp +sunscalar-svc 1860/tcp +sunscalar-svc 1860/udp +lecroy-vicp 1861/tcp +lecroy-vicp 1861/udp +mysql-cm-agent 1862/tcp +mysql-cm-agent 1862/udp +msnp 1863/tcp +msnp 1863/udp +paradym-31port 1864/tcp +paradym-31port 1864/udp +entp 1865/tcp +entp 1865/udp +swrmi 1866/tcp +swrmi 1866/udp +udrive 1867/tcp +udrive 1867/udp +viziblebrowser 1868/tcp +viziblebrowser 1868/udp +transact 1869/tcp +transact 1869/udp +sunscalar-dns 1870/tcp +sunscalar-dns 1870/udp +canocentral0 1871/tcp +canocentral0 1871/udp +canocentral1 1872/tcp +canocentral1 1872/udp +fjmpjps 1873/tcp +fjmpjps 1873/udp +fjswapsnp 1874/tcp +fjswapsnp 1874/udp +westell-stats 1875/tcp +westell-stats 1875/udp +ewcappsrv 1876/tcp +ewcappsrv 1876/udp +hp-webqosdb 1877/tcp +hp-webqosdb 1877/udp +drmsmc 1878/tcp +drmsmc 1878/udp +nettgain-nms 1879/tcp +nettgain-nms 1879/udp +vsat-control 1880/tcp +vsat-control 1880/udp +ibm-mqseries2 1881/tcp +ibm-mqseries2 1881/udp +ecsqdmn 1882/tcp +ecsqdmn 1882/udp +mqtt 1883/tcp +mqtt 1883/udp +idmaps 1884/tcp +idmaps 1884/udp +vrtstrapserver 1885/tcp +vrtstrapserver 1885/udp +leoip 1886/tcp +leoip 1886/udp +filex-lport 1887/tcp +filex-lport 1887/udp +ncconfig 1888/tcp +ncconfig 1888/udp +unify-adapter 1889/tcp +unify-adapter 1889/udp +wilkenlistener 1890/tcp +wilkenlistener 1890/udp +childkey-notif 1891/tcp +childkey-notif 1891/udp +childkey-ctrl 1892/tcp +childkey-ctrl 1892/udp +elad 1893/tcp +elad 1893/udp +o2server-port 1894/tcp +o2server-port 1894/udp +b-novative-ls 1896/tcp +b-novative-ls 1896/udp +metaagent 1897/tcp +metaagent 1897/udp +cymtec-port 1898/tcp +cymtec-port 1898/udp +mc2studios 1899/tcp +mc2studios 1899/udp +ssdp 1900/tcp +ssdp 1900/udp +fjicl-tep-a 1901/tcp +fjicl-tep-a 1901/udp +fjicl-tep-b 1902/tcp +fjicl-tep-b 1902/udp +linkname 1903/tcp +linkname 1903/udp +fjicl-tep-c 1904/tcp +fjicl-tep-c 1904/udp +sugp 1905/tcp +sugp 1905/udp +tpmd 1906/tcp +tpmd 1906/udp +intrastar 1907/tcp +intrastar 1907/udp +dawn 1908/tcp +dawn 1908/udp +global-wlink 1909/tcp +global-wlink 1909/udp +ultrabac 1910/tcp +ultrabac 1910/udp +mtp 1911/tcp +mtp 1911/udp +rhp-iibp 1912/tcp +rhp-iibp 1912/udp +armadp 1913/tcp +armadp 1913/udp +elm-momentum 1914/tcp +elm-momentum 1914/udp +facelink 1915/tcp +facelink 1915/udp +persona 1916/tcp +persona 1916/udp +noagent 1917/tcp +noagent 1917/udp +can-nds 1918/tcp +can-nds 1918/udp +can-dch 1919/tcp +can-dch 1919/udp +can-ferret 1920/tcp +can-ferret 1920/udp +noadmin 1921/tcp +noadmin 1921/udp +tapestry 1922/tcp +tapestry 1922/udp +spice 1923/tcp +spice 1923/udp +xiip 1924/tcp +xiip 1924/udp +discovery-port 1925/tcp +discovery-port 1925/udp +egs 1926/tcp +egs 1926/udp +videte-cipc 1927/tcp +videte-cipc 1927/udp +emsd-port 1928/tcp +emsd-port 1928/udp +bandwiz-system 1929/tcp +bandwiz-system 1929/udp +driveappserver 1930/tcp +driveappserver 1930/udp +amdsched 1931/tcp +amdsched 1931/udp +ctt-broker 1932/tcp +ctt-broker 1932/udp +xmapi 1933/tcp +xmapi 1933/udp +xaapi 1934/tcp +xaapi 1934/udp +macromedia-fcs 1935/tcp +macromedia-fcs 1935/udp +jetcmeserver 1936/tcp +jetcmeserver 1936/udp +jwserver 1937/tcp +jwserver 1937/udp +jwclient 1938/tcp +jwclient 1938/udp +jvserver 1939/tcp +jvserver 1939/udp +jvclient 1940/tcp +jvclient 1940/udp +dic-aida 1941/tcp +dic-aida 1941/udp +res 1942/tcp +res 1942/udp +beeyond-media 1943/tcp +beeyond-media 1943/udp +close-combat 1944/tcp +close-combat 1944/udp +dialogic-elmd 1945/tcp +dialogic-elmd 1945/udp +tekpls 1946/tcp +tekpls 1946/udp +sentinelsrm 1947/tcp +sentinelsrm 1947/udp +eye2eye 1948/tcp +eye2eye 1948/udp +ismaeasdaqlive 1949/tcp +ismaeasdaqlive 1949/udp +ismaeasdaqtest 1950/tcp +ismaeasdaqtest 1950/udp +bcs-lmserver 1951/tcp +bcs-lmserver 1951/udp +mpnjsc 1952/tcp +mpnjsc 1952/udp +rapidbase 1953/tcp +rapidbase 1953/udp +abr-api 1954/tcp +abr-api 1954/udp +abr-secure 1955/tcp +abr-secure 1955/udp +vrtl-vmf-ds 1956/tcp +vrtl-vmf-ds 1956/udp +unix-status 1957/tcp +unix-status 1957/udp +dxadmind 1958/tcp +dxadmind 1958/udp +simp-all 1959/tcp +simp-all 1959/udp +nasmanager 1960/tcp +nasmanager 1960/udp +bts-appserver 1961/tcp +bts-appserver 1961/udp +biap-mp 1962/tcp +biap-mp 1962/udp +webmachine 1963/tcp +webmachine 1963/udp +solid-e-engine 1964/tcp +solid-e-engine 1964/udp +tivoli-npm 1965/tcp +tivoli-npm 1965/udp +slush 1966/tcp +slush 1966/udp +sns-quote 1967/tcp +sns-quote 1967/udp +lipsinc 1968/tcp +lipsinc 1968/udp +lipsinc1 1969/tcp +lipsinc1 1969/udp +netop-rc 1970/tcp +netop-rc 1970/udp +netop-school 1971/tcp +netop-school 1971/udp +intersys-cache 1972/tcp +intersys-cache 1972/udp +dlsrap 1973/tcp +dlsrap 1973/udp +drp 1974/tcp +drp 1974/udp +tcoflashagent 1975/tcp +tcoflashagent 1975/udp +tcoregagent 1976/tcp +tcoregagent 1976/udp +tcoaddressbook 1977/tcp +tcoaddressbook 1977/udp +unisql 1978/tcp +unisql 1978/udp +unisql-java 1979/tcp +unisql-java 1979/udp +pearldoc-xact 1980/tcp +pearldoc-xact 1980/udp +p2pq 1981/tcp +p2pq 1981/udp +estamp 1982/tcp +estamp 1982/udp +lhtp 1983/tcp +lhtp 1983/udp +bb 1984/tcp +bb 1984/udp +hsrp 1985/tcp +hsrp 1985/udp +licensedaemon 1986/tcp +licensedaemon 1986/udp +tr-rsrb-p1 1987/tcp +tr-rsrb-p1 1987/udp +tr-rsrb-p2 1988/tcp +tr-rsrb-p2 1988/udp +tr-rsrb-p3 1989/tcp +tr-rsrb-p3 1989/udp +mshnet 1989/tcp +mshnet 1989/udp +stun-p1 1990/tcp +stun-p1 1990/udp +stun-p2 1991/tcp +stun-p2 1991/udp +stun-p3 1992/tcp +stun-p3 1992/udp +ipsendmsg 1992/tcp +ipsendmsg 1992/udp +snmp-tcp-port 1993/tcp +snmp-tcp-port 1993/udp +stun-port 1994/tcp +stun-port 1994/udp +perf-port 1995/tcp +perf-port 1995/udp +tr-rsrb-port 1996/tcp +tr-rsrb-port 1996/udp +gdp-port 1997/tcp +gdp-port 1997/udp +x25-svc-port 1998/tcp +x25-svc-port 1998/udp +tcp-id-port 1999/tcp +tcp-id-port 1999/udp +cisco-sccp 2000/tcp +cisco-sccp 2000/udp +dc 2001/tcp +wizard 2001/udp +globe 2002/tcp +globe 2002/udp +brutus 2003/tcp +brutus 2003/udp +mailbox 2004/tcp +emce 2004/udp +berknet 2005/tcp +oracle 2005/udp +invokator 2006/tcp +raid-cd 2006/udp +dectalk 2007/tcp +raid-am 2007/udp +conf 2008/tcp +terminaldb 2008/udp +news 2009/tcp +whosockami 2009/udp +search 2010/tcp +pipe-server 2010/udp +raid-cc 2011/tcp +servserv 2011/udp +ttyinfo 2012/tcp +raid-ac 2012/udp +raid-am 2013/tcp +raid-cd 2013/udp +troff 2014/tcp +raid-sf 2014/udp +cypress 2015/tcp +raid-cs 2015/udp +bootserver 2016/tcp +bootserver 2016/udp +cypress-stat 2017/tcp +bootclient 2017/udp +terminaldb 2018/tcp +rellpack 2018/udp +whosockami 2019/tcp +about 2019/udp +xinupageserver 2020/tcp +xinupageserver 2020/udp +servexec 2021/tcp +xinuexpansion1 2021/udp +down 2022/tcp +xinuexpansion2 2022/udp +xinuexpansion3 2023/tcp +xinuexpansion3 2023/udp +xinuexpansion4 2024/tcp +xinuexpansion4 2024/udp +ellpack 2025/tcp +xribs 2025/udp +scrabble 2026/tcp +scrabble 2026/udp +shadowserver 2027/tcp +shadowserver 2027/udp +submitserver 2028/tcp +submitserver 2028/udp +hsrpv6 2029/tcp +hsrpv6 2029/udp +device2 2030/tcp +device2 2030/udp +mobrien-chat 2031/tcp +mobrien-chat 2031/udp +blackboard 2032/tcp +blackboard 2032/udp +glogger 2033/tcp +glogger 2033/udp +scoremgr 2034/tcp +scoremgr 2034/udp +imsldoc 2035/tcp +imsldoc 2035/udp +e-dpnet 2036/tcp +e-dpnet 2036/udp +applus 2037/tcp +applus 2037/udp +objectmanager 2038/tcp +objectmanager 2038/udp +prizma 2039/tcp +prizma 2039/udp +lam 2040/tcp +lam 2040/udp +interbase 2041/tcp +interbase 2041/udp +isis 2042/tcp +isis 2042/udp +isis-bcast 2043/tcp +isis-bcast 2043/udp +rimsl 2044/tcp +rimsl 2044/udp +cdfunc 2045/tcp +cdfunc 2045/udp +sdfunc 2046/tcp +sdfunc 2046/udp +dls 2047/tcp +dls 2047/udp +dls-monitor 2048/tcp +dls-monitor 2048/udp +shilp 2049/tcp +shilp 2049/udp +nfs 2049/tcp +nfs 2049/udp +nfs 2049/sctp +av-emb-config 2050/tcp +av-emb-config 2050/udp +epnsdp 2051/tcp +epnsdp 2051/udp +clearvisn 2052/tcp +clearvisn 2052/udp +lot105-ds-upd 2053/tcp +lot105-ds-upd 2053/udp +weblogin 2054/tcp +weblogin 2054/udp +iop 2055/tcp +iop 2055/udp +omnisky 2056/tcp +omnisky 2056/udp +rich-cp 2057/tcp +rich-cp 2057/udp +newwavesearch 2058/tcp +newwavesearch 2058/udp +bmc-messaging 2059/tcp +bmc-messaging 2059/udp +teleniumdaemon 2060/tcp +teleniumdaemon 2060/udp +netmount 2061/tcp +netmount 2061/udp +icg-swp 2062/tcp +icg-swp 2062/udp +icg-bridge 2063/tcp +icg-bridge 2063/udp +icg-iprelay 2064/tcp +icg-iprelay 2064/udp +dlsrpn 2065/tcp +dlsrpn 2065/udp +aura 2066/tcp +aura 2066/udp +dlswpn 2067/tcp +dlswpn 2067/udp +avauthsrvprtcl 2068/tcp +avauthsrvprtcl 2068/udp +event-port 2069/tcp +event-port 2069/udp +ah-esp-encap 2070/tcp +ah-esp-encap 2070/udp +acp-port 2071/tcp +acp-port 2071/udp +msync 2072/tcp +msync 2072/udp +gxs-data-port 2073/tcp +gxs-data-port 2073/udp +vrtl-vmf-sa 2074/tcp +vrtl-vmf-sa 2074/udp +newlixengine 2075/tcp +newlixengine 2075/udp +newlixconfig 2076/tcp +newlixconfig 2076/udp +tsrmagt 2077/tcp +tsrmagt 2077/udp +tpcsrvr 2078/tcp +tpcsrvr 2078/udp +idware-router 2079/tcp +idware-router 2079/udp +autodesk-nlm 2080/tcp +autodesk-nlm 2080/udp +kme-trap-port 2081/tcp +kme-trap-port 2081/udp +infowave 2082/tcp +infowave 2082/udp +radsec 2083/tcp +radsec 2083/udp +sunclustergeo 2084/tcp +sunclustergeo 2084/udp +ada-cip 2085/tcp +ada-cip 2085/udp +gnunet 2086/tcp +gnunet 2086/udp +eli 2087/tcp +eli 2087/udp +ip-blf 2088/tcp +ip-blf 2088/udp +sep 2089/tcp +sep 2089/udp +lrp 2090/tcp +lrp 2090/udp +prp 2091/tcp +prp 2091/udp +descent3 2092/tcp +descent3 2092/udp +nbx-cc 2093/tcp +nbx-cc 2093/udp +nbx-au 2094/tcp +nbx-au 2094/udp +nbx-ser 2095/tcp +nbx-ser 2095/udp +nbx-dir 2096/tcp +nbx-dir 2096/udp +jetformpreview 2097/tcp +jetformpreview 2097/udp +dialog-port 2098/tcp +dialog-port 2098/udp +h2250-annex-g 2099/tcp +h2250-annex-g 2099/udp +amiganetfs 2100/tcp +amiganetfs 2100/udp +rtcm-sc104 2101/tcp +rtcm-sc104 2101/udp +zephyr-srv 2102/tcp +zephyr-srv 2102/udp +zephyr-clt 2103/tcp +zephyr-clt 2103/udp +zephyr-hm 2104/tcp +zephyr-hm 2104/udp +minipay 2105/tcp +minipay 2105/udp +mzap 2106/tcp +mzap 2106/udp +bintec-admin 2107/tcp +bintec-admin 2107/udp +comcam 2108/tcp +comcam 2108/udp +ergolight 2109/tcp +ergolight 2109/udp +umsp 2110/tcp +umsp 2110/udp +dsatp 2111/tcp +dsatp 2111/udp +idonix-metanet 2112/tcp +idonix-metanet 2112/udp +hsl-storm 2113/tcp +hsl-storm 2113/udp +ariascribe 2114/tcp +ariascribe 2114/udp +kdm 2115/tcp +kdm 2115/udp +ccowcmr 2116/tcp +ccowcmr 2116/udp +mentaclient 2117/tcp +mentaclient 2117/udp +mentaserver 2118/tcp +mentaserver 2118/udp +gsigatekeeper 2119/tcp +gsigatekeeper 2119/udp +qencp 2120/tcp +qencp 2120/udp +scientia-ssdb 2121/tcp +scientia-ssdb 2121/udp +caupc-remote 2122/tcp +caupc-remote 2122/udp +gtp-control 2123/tcp +gtp-control 2123/udp +elatelink 2124/tcp +elatelink 2124/udp +lockstep 2125/tcp +lockstep 2125/udp +pktcable-cops 2126/tcp +pktcable-cops 2126/udp +index-pc-wb 2127/tcp +index-pc-wb 2127/udp +net-steward 2128/tcp +net-steward 2128/udp +cs-live 2129/tcp +cs-live 2129/udp +xds 2130/tcp +xds 2130/udp +avantageb2b 2131/tcp +avantageb2b 2131/udp +solera-epmap 2132/tcp +solera-epmap 2132/udp +zymed-zpp 2133/tcp +zymed-zpp 2133/udp +avenue 2134/tcp +avenue 2134/udp +gris 2135/tcp +gris 2135/udp +appworxsrv 2136/tcp +appworxsrv 2136/udp +connect 2137/tcp +connect 2137/udp +unbind-cluster 2138/tcp +unbind-cluster 2138/udp +ias-auth 2139/tcp +ias-auth 2139/udp +ias-reg 2140/tcp +ias-reg 2140/udp +ias-admind 2141/tcp +ias-admind 2141/udp +tdmoip 2142/tcp +tdmoip 2142/udp +lv-jc 2143/tcp +lv-jc 2143/udp +lv-ffx 2144/tcp +lv-ffx 2144/udp +lv-pici 2145/tcp +lv-pici 2145/udp +lv-not 2146/tcp +lv-not 2146/udp +lv-auth 2147/tcp +lv-auth 2147/udp +veritas-ucl 2148/tcp +veritas-ucl 2148/udp +acptsys 2149/tcp +acptsys 2149/udp +dynamic3d 2150/tcp +dynamic3d 2150/udp +docent 2151/tcp +docent 2151/udp +gtp-user 2152/tcp +gtp-user 2152/udp +ctlptc 2153/tcp +ctlptc 2153/udp +stdptc 2154/tcp +stdptc 2154/udp +brdptc 2155/tcp +brdptc 2155/udp +trp 2156/tcp +trp 2156/udp +xnds 2157/tcp +xnds 2157/udp +touchnetplus 2158/tcp +touchnetplus 2158/udp +gdbremote 2159/tcp +gdbremote 2159/udp +apc-2160 2160/tcp +apc-2160 2160/udp +apc-2161 2161/tcp +apc-2161 2161/udp +navisphere 2162/tcp +navisphere 2162/udp +navisphere-sec 2163/tcp +navisphere-sec 2163/udp +ddns-v3 2164/tcp +ddns-v3 2164/udp +x-bone-api 2165/tcp +x-bone-api 2165/udp +iwserver 2166/tcp +iwserver 2166/udp +raw-serial 2167/tcp +raw-serial 2167/udp +easy-soft-mux 2168/tcp +easy-soft-mux 2168/udp +brain 2169/tcp +brain 2169/udp +eyetv 2170/tcp +eyetv 2170/udp +msfw-storage 2171/tcp +msfw-storage 2171/udp +msfw-s-storage 2172/tcp +msfw-s-storage 2172/udp +msfw-replica 2173/tcp +msfw-replica 2173/udp +msfw-array 2174/tcp +msfw-array 2174/udp +airsync 2175/tcp +airsync 2175/udp +rapi 2176/tcp +rapi 2176/udp +qwave 2177/tcp +qwave 2177/udp +bitspeer 2178/tcp +bitspeer 2178/udp +vmrdp 2179/tcp +vmrdp 2179/udp +mc-gt-srv 2180/tcp +mc-gt-srv 2180/udp +eforward 2181/tcp +eforward 2181/udp +cgn-stat 2182/tcp +cgn-stat 2182/udp +cgn-config 2183/tcp +cgn-config 2183/udp +nvd 2184/tcp +nvd 2184/udp +onbase-dds 2185/tcp +onbase-dds 2185/udp +gtaua 2186/tcp +gtaua 2186/udp +ssmc 2187/tcp +ssmd 2187/udp +radware-rpm 2188/tcp +radware-rpm-s 2189/tcp +tivoconnect 2190/tcp +tivoconnect 2190/udp +tvbus 2191/tcp +tvbus 2191/udp +asdis 2192/tcp +asdis 2192/udp +drwcs 2193/tcp +drwcs 2193/udp +mnp-exchange 2197/tcp +mnp-exchange 2197/udp +onehome-remote 2198/tcp +onehome-remote 2198/udp +onehome-help 2199/tcp +onehome-help 2199/udp +ats 2201/tcp +ats 2201/udp +imtc-map 2202/tcp +imtc-map 2202/udp +b2-runtime 2203/tcp +b2-runtime 2203/udp +b2-license 2204/tcp +b2-license 2204/udp +jps 2205/tcp +jps 2205/udp +hpocbus 2206/tcp +hpocbus 2206/udp +hpssd 2207/tcp +hpssd 2207/udp +hpiod 2208/tcp +hpiod 2208/udp +rimf-ps 2209/tcp +rimf-ps 2209/udp +noaaport 2210/tcp +noaaport 2210/udp +emwin 2211/tcp +emwin 2211/udp +leecoposserver 2212/tcp +leecoposserver 2212/udp +kali 2213/tcp +kali 2213/udp +rpi 2214/tcp +rpi 2214/udp +ipcore 2215/tcp +ipcore 2215/udp +vtu-comms 2216/tcp +vtu-comms 2216/udp +gotodevice 2217/tcp +gotodevice 2217/udp +bounzza 2218/tcp +bounzza 2218/udp +netiq-ncap 2219/tcp +netiq-ncap 2219/udp +netiq 2220/tcp +netiq 2220/udp +ethernet-ip-s 2221/tcp +ethernet-ip-s 2221/udp +EtherNet-IP-1 2222/tcp +EtherNet-IP-1 2222/udp +rockwell-csp2 2223/tcp +rockwell-csp2 2223/udp +efi-mg 2224/tcp +efi-mg 2224/udp +rcip-itu 2225/tcp +rcip-itu 2225/sctp +di-drm 2226/tcp +di-drm 2226/udp +di-msg 2227/tcp +di-msg 2227/udp +ehome-ms 2228/tcp +ehome-ms 2228/udp +datalens 2229/tcp +datalens 2229/udp +queueadm 2230/tcp +queueadm 2230/udp +wimaxasncp 2231/tcp +wimaxasncp 2231/udp +ivs-video 2232/tcp +ivs-video 2232/udp +infocrypt 2233/tcp +infocrypt 2233/udp +directplay 2234/tcp +directplay 2234/udp +sercomm-wlink 2235/tcp +sercomm-wlink 2235/udp +nani 2236/tcp +nani 2236/udp +optech-port1-lm 2237/tcp +optech-port1-lm 2237/udp +aviva-sna 2238/tcp +aviva-sna 2238/udp +imagequery 2239/tcp +imagequery 2239/udp +recipe 2240/tcp +recipe 2240/udp +ivsd 2241/tcp +ivsd 2241/udp +foliocorp 2242/tcp +foliocorp 2242/udp +magicom 2243/tcp +magicom 2243/udp +nmsserver 2244/tcp +nmsserver 2244/udp +hao 2245/tcp +hao 2245/udp +pc-mta-addrmap 2246/tcp +pc-mta-addrmap 2246/udp +antidotemgrsvr 2247/tcp +antidotemgrsvr 2247/udp +ums 2248/tcp +ums 2248/udp +rfmp 2249/tcp +rfmp 2249/udp +remote-collab 2250/tcp +remote-collab 2250/udp +dif-port 2251/tcp +dif-port 2251/udp +njenet-ssl 2252/tcp +njenet-ssl 2252/udp +dtv-chan-req 2253/tcp +dtv-chan-req 2253/udp +seispoc 2254/tcp +seispoc 2254/udp +vrtp 2255/tcp +vrtp 2255/udp +pcc-mfp 2256/tcp +pcc-mfp 2256/udp +simple-tx-rx 2257/tcp +simple-tx-rx 2257/udp +rcts 2258/tcp +rcts 2258/udp +apc-2260 2260/tcp +apc-2260 2260/udp +comotionmaster 2261/tcp +comotionmaster 2261/udp +comotionback 2262/tcp +comotionback 2262/udp +ecwcfg 2263/tcp +ecwcfg 2263/udp +apx500api-1 2264/tcp +apx500api-1 2264/udp +apx500api-2 2265/tcp +apx500api-2 2265/udp +mfserver 2266/tcp +mfserver 2266/udp +ontobroker 2267/tcp +ontobroker 2267/udp +amt 2268/tcp +amt 2268/udp +mikey 2269/tcp +mikey 2269/udp +starschool 2270/tcp +starschool 2270/udp +mmcals 2271/tcp +mmcals 2271/udp +mmcal 2272/tcp +mmcal 2272/udp +mysql-im 2273/tcp +mysql-im 2273/udp +pcttunnell 2274/tcp +pcttunnell 2274/udp +ibridge-data 2275/tcp +ibridge-data 2275/udp +ibridge-mgmt 2276/tcp +ibridge-mgmt 2276/udp +bluectrlproxy 2277/tcp +bluectrlproxy 2277/udp +s3db 2278/tcp +s3db 2278/udp +xmquery 2279/tcp +xmquery 2279/udp +lnvpoller 2280/tcp +lnvpoller 2280/udp +lnvconsole 2281/tcp +lnvconsole 2281/udp +lnvalarm 2282/tcp +lnvalarm 2282/udp +lnvstatus 2283/tcp +lnvstatus 2283/udp +lnvmaps 2284/tcp +lnvmaps 2284/udp +lnvmailmon 2285/tcp +lnvmailmon 2285/udp +nas-metering 2286/tcp +nas-metering 2286/udp +dna 2287/tcp +dna 2287/udp +netml 2288/tcp +netml 2288/udp +dict-lookup 2289/tcp +dict-lookup 2289/udp +sonus-logging 2290/tcp +sonus-logging 2290/udp +eapsp 2291/tcp +eapsp 2291/udp +mib-streaming 2292/tcp +mib-streaming 2292/udp +npdbgmngr 2293/tcp +npdbgmngr 2293/udp +konshus-lm 2294/tcp +konshus-lm 2294/udp +advant-lm 2295/tcp +advant-lm 2295/udp +theta-lm 2296/tcp +theta-lm 2296/udp +d2k-datamover1 2297/tcp +d2k-datamover1 2297/udp +d2k-datamover2 2298/tcp +d2k-datamover2 2298/udp +pc-telecommute 2299/tcp +pc-telecommute 2299/udp +cvmmon 2300/tcp +cvmmon 2300/udp +cpq-wbem 2301/tcp +cpq-wbem 2301/udp +binderysupport 2302/tcp +binderysupport 2302/udp +proxy-gateway 2303/tcp +proxy-gateway 2303/udp +attachmate-uts 2304/tcp +attachmate-uts 2304/udp +mt-scaleserver 2305/tcp +mt-scaleserver 2305/udp +tappi-boxnet 2306/tcp +tappi-boxnet 2306/udp +pehelp 2307/tcp +pehelp 2307/udp +sdhelp 2308/tcp +sdhelp 2308/udp +sdserver 2309/tcp +sdserver 2309/udp +sdclient 2310/tcp +sdclient 2310/udp +messageservice 2311/tcp +messageservice 2311/udp +wanscaler 2312/tcp +wanscaler 2312/udp +iapp 2313/tcp +iapp 2313/udp +cr-websystems 2314/tcp +cr-websystems 2314/udp +precise-sft 2315/tcp +precise-sft 2315/udp +sent-lm 2316/tcp +sent-lm 2316/udp +attachmate-g32 2317/tcp +attachmate-g32 2317/udp +cadencecontrol 2318/tcp +cadencecontrol 2318/udp +infolibria 2319/tcp +infolibria 2319/udp +siebel-ns 2320/tcp +siebel-ns 2320/udp +rdlap 2321/tcp +rdlap 2321/udp +ofsd 2322/tcp +ofsd 2322/udp +3d-nfsd 2323/tcp +3d-nfsd 2323/udp +cosmocall 2324/tcp +cosmocall 2324/udp +ansysli 2325/tcp +ansysli 2325/udp +idcp 2326/tcp +idcp 2326/udp +xingcsm 2327/tcp +xingcsm 2327/udp +netrix-sftm 2328/tcp +netrix-sftm 2328/udp +nvd 2329/tcp +nvd 2329/udp +tscchat 2330/tcp +tscchat 2330/udp +agentview 2331/tcp +agentview 2331/udp +rcc-host 2332/tcp +rcc-host 2332/udp +snapp 2333/tcp +snapp 2333/udp +ace-client 2334/tcp +ace-client 2334/udp +ace-proxy 2335/tcp +ace-proxy 2335/udp +appleugcontrol 2336/tcp +appleugcontrol 2336/udp +ideesrv 2337/tcp +ideesrv 2337/udp +norton-lambert 2338/tcp +norton-lambert 2338/udp +3com-webview 2339/tcp +3com-webview 2339/udp +wrs-registry 2340/tcp +wrs-registry 2340/udp +xiostatus 2341/tcp +xiostatus 2341/udp +manage-exec 2342/tcp +manage-exec 2342/udp +nati-logos 2343/tcp +nati-logos 2343/udp +fcmsys 2344/tcp +fcmsys 2344/udp +dbm 2345/tcp +dbm 2345/udp +redstorm-join 2346/tcp +redstorm-join 2346/udp +redstorm-find 2347/tcp +redstorm-find 2347/udp +redstorm-info 2348/tcp +redstorm-info 2348/udp +redstorm-diag 2349/tcp +redstorm-diag 2349/udp +psbserver 2350/tcp +psbserver 2350/udp +psrserver 2351/tcp +psrserver 2351/udp +pslserver 2352/tcp +pslserver 2352/udp +pspserver 2353/tcp +pspserver 2353/udp +psprserver 2354/tcp +psprserver 2354/udp +psdbserver 2355/tcp +psdbserver 2355/udp +gxtelmd 2356/tcp +gxtelmd 2356/udp +unihub-server 2357/tcp +unihub-server 2357/udp +futrix 2358/tcp +futrix 2358/udp +flukeserver 2359/tcp +flukeserver 2359/udp +nexstorindltd 2360/tcp +nexstorindltd 2360/udp +tl1 2361/tcp +tl1 2361/udp +digiman 2362/tcp +digiman 2362/udp +mediacntrlnfsd 2363/tcp +mediacntrlnfsd 2363/udp +oi-2000 2364/tcp +oi-2000 2364/udp +dbref 2365/tcp +dbref 2365/udp +qip-login 2366/tcp +qip-login 2366/udp +service-ctrl 2367/tcp +service-ctrl 2367/udp +opentable 2368/tcp +opentable 2368/udp +l3-hbmon 2370/tcp +l3-hbmon 2370/udp +rda 2371/tcp +lanmessenger 2372/tcp +lanmessenger 2372/udp +remographlm 2373/tcp +hydra 2374/tcp +docker 2375/tcp +docker-s 2376/tcp +swarm 2377/tcp +dali 2378/udp +etcd-client 2379/tcp +etcd-server 2380/tcp +compaq-https 2381/tcp +compaq-https 2381/udp +ms-olap3 2382/tcp +ms-olap3 2382/udp +ms-olap4 2383/tcp +ms-olap4 2383/udp +sd-request 2384/tcp +sd-capacity 2384/udp +sd-data 2385/tcp +sd-data 2385/udp +virtualtape 2386/tcp +virtualtape 2386/udp +vsamredirector 2387/tcp +vsamredirector 2387/udp +mynahautostart 2388/tcp +mynahautostart 2388/udp +ovsessionmgr 2389/tcp +ovsessionmgr 2389/udp +rsmtp 2390/tcp +rsmtp 2390/udp +3com-net-mgmt 2391/tcp +3com-net-mgmt 2391/udp +tacticalauth 2392/tcp +tacticalauth 2392/udp +ms-olap1 2393/tcp +ms-olap1 2393/udp +ms-olap2 2394/tcp +ms-olap2 2394/udp +lan900-remote 2395/tcp +lan900-remote 2395/udp +wusage 2396/tcp +wusage 2396/udp +ncl 2397/tcp +ncl 2397/udp +orbiter 2398/tcp +orbiter 2398/udp +fmpro-fdal 2399/tcp +fmpro-fdal 2399/udp +opequus-server 2400/tcp +opequus-server 2400/udp +cvspserver 2401/tcp +cvspserver 2401/udp +taskmaster2000 2402/tcp +taskmaster2000 2402/udp +taskmaster2000 2403/tcp +taskmaster2000 2403/udp +iec-104 2404/tcp +iec-104 2404/udp +trc-netpoll 2405/tcp +trc-netpoll 2405/udp +jediserver 2406/tcp +jediserver 2406/udp +orion 2407/tcp +orion 2407/udp +railgun-webaccl 2408/tcp +sns-protocol 2409/tcp +sns-protocol 2409/udp +vrts-registry 2410/tcp +vrts-registry 2410/udp +netwave-ap-mgmt 2411/tcp +netwave-ap-mgmt 2411/udp +cdn 2412/tcp +cdn 2412/udp +orion-rmi-reg 2413/tcp +orion-rmi-reg 2413/udp +beeyond 2414/tcp +beeyond 2414/udp +codima-rtp 2415/tcp +codima-rtp 2415/udp +rmtserver 2416/tcp +rmtserver 2416/udp +composit-server 2417/tcp +composit-server 2417/udp +cas 2418/tcp +cas 2418/udp +attachmate-s2s 2419/tcp +attachmate-s2s 2419/udp +dslremote-mgmt 2420/tcp +dslremote-mgmt 2420/udp +g-talk 2421/tcp +g-talk 2421/udp +crmsbits 2422/tcp +crmsbits 2422/udp +rnrp 2423/tcp +rnrp 2423/udp +kofax-svr 2424/tcp +kofax-svr 2424/udp +fjitsuappmgr 2425/tcp +fjitsuappmgr 2425/udp +vcmp 2426/tcp +vcmp 2426/udp +mgcp-gateway 2427/tcp +mgcp-gateway 2427/udp +ott 2428/tcp +ott 2428/udp +ft-role 2429/tcp +ft-role 2429/udp +venus 2430/tcp +venus 2430/udp +venus-se 2431/tcp +venus-se 2431/udp +codasrv 2432/tcp +codasrv 2432/udp +codasrv-se 2433/tcp +codasrv-se 2433/udp +pxc-epmap 2434/tcp +pxc-epmap 2434/udp +optilogic 2435/tcp +optilogic 2435/udp +topx 2436/tcp +topx 2436/udp +unicontrol 2437/tcp +unicontrol 2437/udp +msp 2438/tcp +msp 2438/udp +sybasedbsynch 2439/tcp +sybasedbsynch 2439/udp +spearway 2440/tcp +spearway 2440/udp +pvsw-inet 2441/tcp +pvsw-inet 2441/udp +netangel 2442/tcp +netangel 2442/udp +powerclientcsf 2443/tcp +powerclientcsf 2443/udp +btpp2sectrans 2444/tcp +btpp2sectrans 2444/udp +dtn1 2445/tcp +dtn1 2445/udp +bues-service 2446/tcp +bues-service 2446/udp +ovwdb 2447/tcp +ovwdb 2447/udp +hpppssvr 2448/tcp +hpppssvr 2448/udp +ratl 2449/tcp +ratl 2449/udp +netadmin 2450/tcp +netadmin 2450/udp +netchat 2451/tcp +netchat 2451/udp +snifferclient 2452/tcp +snifferclient 2452/udp +madge-ltd 2453/tcp +madge-ltd 2453/udp +indx-dds 2454/tcp +indx-dds 2454/udp +wago-io-system 2455/tcp +wago-io-system 2455/udp +altav-remmgt 2456/tcp +altav-remmgt 2456/udp +rapido-ip 2457/tcp +rapido-ip 2457/udp +griffin 2458/tcp +griffin 2458/udp +xrpl 2459/tcp +xrpl 2459/udp +ms-theater 2460/tcp +ms-theater 2460/udp +qadmifoper 2461/tcp +qadmifoper 2461/udp +qadmifevent 2462/tcp +qadmifevent 2462/udp +lsi-raid-mgmt 2463/tcp +lsi-raid-mgmt 2463/udp +direcpc-si 2464/tcp +direcpc-si 2464/udp +lbm 2465/tcp +lbm 2465/udp +lbf 2466/tcp +lbf 2466/udp +high-criteria 2467/tcp +high-criteria 2467/udp +qip-msgd 2468/tcp +qip-msgd 2468/udp +mti-tcs-comm 2469/tcp +mti-tcs-comm 2469/udp +taskman-port 2470/tcp +taskman-port 2470/udp +seaodbc 2471/tcp +seaodbc 2471/udp +c3 2472/tcp +c3 2472/udp +aker-cdp 2473/tcp +aker-cdp 2473/udp +vitalanalysis 2474/tcp +vitalanalysis 2474/udp +ace-server 2475/tcp +ace-server 2475/udp +ace-svr-prop 2476/tcp +ace-svr-prop 2476/udp +ssm-cvs 2477/tcp +ssm-cvs 2477/udp +ssm-cssps 2478/tcp +ssm-cssps 2478/udp +ssm-els 2479/tcp +ssm-els 2479/udp +powerexchange 2480/tcp +powerexchange 2480/udp +giop 2481/tcp +giop 2481/udp +giop-ssl 2482/tcp +giop-ssl 2482/udp +ttc 2483/tcp +ttc 2483/udp +ttc-ssl 2484/tcp +ttc-ssl 2484/udp +netobjects1 2485/tcp +netobjects1 2485/udp +netobjects2 2486/tcp +netobjects2 2486/udp +pns 2487/tcp +pns 2487/udp +moy-corp 2488/tcp +moy-corp 2488/udp +tsilb 2489/tcp +tsilb 2489/udp +qip-qdhcp 2490/tcp +qip-qdhcp 2490/udp +conclave-cpp 2491/tcp +conclave-cpp 2491/udp +groove 2492/tcp +groove 2492/udp +talarian-mqs 2493/tcp +talarian-mqs 2493/udp +bmc-ar 2494/tcp +bmc-ar 2494/udp +fast-rem-serv 2495/tcp +fast-rem-serv 2495/udp +dirgis 2496/tcp +dirgis 2496/udp +quaddb 2497/tcp +quaddb 2497/udp +odn-castraq 2498/tcp +odn-castraq 2498/udp +unicontrol 2499/tcp +unicontrol 2499/udp +rtsserv 2500/tcp +rtsserv 2500/udp +rtsclient 2501/tcp +rtsclient 2501/udp +kentrox-prot 2502/tcp +kentrox-prot 2502/udp +nms-dpnss 2503/tcp +nms-dpnss 2503/udp +wlbs 2504/tcp +wlbs 2504/udp +ppcontrol 2505/tcp +ppcontrol 2505/udp +jbroker 2506/tcp +jbroker 2506/udp +spock 2507/tcp +spock 2507/udp +jdatastore 2508/tcp +jdatastore 2508/udp +fjmpss 2509/tcp +fjmpss 2509/udp +fjappmgrbulk 2510/tcp +fjappmgrbulk 2510/udp +metastorm 2511/tcp +metastorm 2511/udp +citrixima 2512/tcp +citrixima 2512/udp +citrixadmin 2513/tcp +citrixadmin 2513/udp +facsys-ntp 2514/tcp +facsys-ntp 2514/udp +facsys-router 2515/tcp +facsys-router 2515/udp +maincontrol 2516/tcp +maincontrol 2516/udp +call-sig-trans 2517/tcp +call-sig-trans 2517/udp +willy 2518/tcp +willy 2518/udp +globmsgsvc 2519/tcp +globmsgsvc 2519/udp +pvsw 2520/tcp +pvsw 2520/udp +adaptecmgr 2521/tcp +adaptecmgr 2521/udp +windb 2522/tcp +windb 2522/udp +qke-llc-v3 2523/tcp +qke-llc-v3 2523/udp +optiwave-lm 2524/tcp +optiwave-lm 2524/udp +ms-v-worlds 2525/tcp +ms-v-worlds 2525/udp +ema-sent-lm 2526/tcp +ema-sent-lm 2526/udp +iqserver 2527/tcp +iqserver 2527/udp +ncr-ccl 2528/tcp +ncr-ccl 2528/udp +utsftp 2529/tcp +utsftp 2529/udp +vrcommerce 2530/tcp +vrcommerce 2530/udp +ito-e-gui 2531/tcp +ito-e-gui 2531/udp +ovtopmd 2532/tcp +ovtopmd 2532/udp +snifferserver 2533/tcp +snifferserver 2533/udp +combox-web-acc 2534/tcp +combox-web-acc 2534/udp +madcap 2535/tcp +madcap 2535/udp +btpp2audctr1 2536/tcp +btpp2audctr1 2536/udp +upgrade 2537/tcp +upgrade 2537/udp +vnwk-prapi 2538/tcp +vnwk-prapi 2538/udp +vsiadmin 2539/tcp +vsiadmin 2539/udp +lonworks 2540/tcp +lonworks 2540/udp +lonworks2 2541/tcp +lonworks2 2541/udp +udrawgraph 2542/tcp +udrawgraph 2542/udp +reftek 2543/tcp +reftek 2543/udp +novell-zen 2544/tcp +novell-zen 2544/udp +sis-emt 2545/tcp +sis-emt 2545/udp +vytalvaultbrtp 2546/tcp +vytalvaultbrtp 2546/udp +vytalvaultvsmp 2547/tcp +vytalvaultvsmp 2547/udp +vytalvaultpipe 2548/tcp +vytalvaultpipe 2548/udp +ipass 2549/tcp +ipass 2549/udp +ads 2550/tcp +ads 2550/udp +isg-uda-server 2551/tcp +isg-uda-server 2551/udp +call-logging 2552/tcp +call-logging 2552/udp +efidiningport 2553/tcp +efidiningport 2553/udp +vcnet-link-v10 2554/tcp +vcnet-link-v10 2554/udp +compaq-wcp 2555/tcp +compaq-wcp 2555/udp +nicetec-nmsvc 2556/tcp +nicetec-nmsvc 2556/udp +nicetec-mgmt 2557/tcp +nicetec-mgmt 2557/udp +pclemultimedia 2558/tcp +pclemultimedia 2558/udp +lstp 2559/tcp +lstp 2559/udp +labrat 2560/tcp +labrat 2560/udp +mosaixcc 2561/tcp +mosaixcc 2561/udp +delibo 2562/tcp +delibo 2562/udp +cti-redwood 2563/tcp +cti-redwood 2563/udp +hp-3000-telnet 2564/tcp +hp-3000-telnet 2564/udp +coord-svr 2565/tcp +coord-svr 2565/udp +pcs-pcw 2566/tcp +pcs-pcw 2566/udp +clp 2567/tcp +clp 2567/udp +spamtrap 2568/tcp +spamtrap 2568/udp +sonuscallsig 2569/tcp +sonuscallsig 2569/udp +hs-port 2570/tcp +hs-port 2570/udp +cecsvc 2571/tcp +cecsvc 2571/udp +ibp 2572/tcp +ibp 2572/udp +trustestablish 2573/tcp +trustestablish 2573/udp +blockade-bpsp 2574/tcp +blockade-bpsp 2574/udp +hl7 2575/tcp +hl7 2575/udp +tclprodebugger 2576/tcp +tclprodebugger 2576/udp +scipticslsrvr 2577/tcp +scipticslsrvr 2577/udp +rvs-isdn-dcp 2578/tcp +rvs-isdn-dcp 2578/udp +mpfoncl 2579/tcp +mpfoncl 2579/udp +tributary 2580/tcp +tributary 2580/udp +argis-te 2581/tcp +argis-te 2581/udp +argis-ds 2582/tcp +argis-ds 2582/udp +mon 2583/tcp +mon 2583/udp +cyaserv 2584/tcp +cyaserv 2584/udp +netx-server 2585/tcp +netx-server 2585/udp +netx-agent 2586/tcp +netx-agent 2586/udp +masc 2587/tcp +masc 2587/udp +privilege 2588/tcp +privilege 2588/udp +quartus-tcl 2589/tcp +quartus-tcl 2589/udp +idotdist 2590/tcp +idotdist 2590/udp +maytagshuffle 2591/tcp +maytagshuffle 2591/udp +netrek 2592/tcp +netrek 2592/udp +mns-mail 2593/tcp +mns-mail 2593/udp +dts 2594/tcp +dts 2594/udp +worldfusion1 2595/tcp +worldfusion1 2595/udp +worldfusion2 2596/tcp +worldfusion2 2596/udp +homesteadglory 2597/tcp +homesteadglory 2597/udp +citriximaclient 2598/tcp +citriximaclient 2598/udp +snapd 2599/tcp +snapd 2599/udp +hpstgmgr 2600/tcp +hpstgmgr 2600/udp +discp-client 2601/tcp +discp-client 2601/udp +discp-server 2602/tcp +discp-server 2602/udp +servicemeter 2603/tcp +servicemeter 2603/udp +nsc-ccs 2604/tcp +nsc-ccs 2604/udp +nsc-posa 2605/tcp +nsc-posa 2605/udp +netmon 2606/tcp +netmon 2606/udp +connection 2607/tcp +connection 2607/udp +wag-service 2608/tcp +wag-service 2608/udp +system-monitor 2609/tcp +system-monitor 2609/udp +versa-tek 2610/tcp +versa-tek 2610/udp +lionhead 2611/tcp +lionhead 2611/udp +qpasa-agent 2612/tcp +qpasa-agent 2612/udp +smntubootstrap 2613/tcp +smntubootstrap 2613/udp +neveroffline 2614/tcp +neveroffline 2614/udp +firepower 2615/tcp +firepower 2615/udp +appswitch-emp 2616/tcp +appswitch-emp 2616/udp +cmadmin 2617/tcp +cmadmin 2617/udp +priority-e-com 2618/tcp +priority-e-com 2618/udp +bruce 2619/tcp +bruce 2619/udp +lpsrecommender 2620/tcp +lpsrecommender 2620/udp +miles-apart 2621/tcp +miles-apart 2621/udp +metricadbc 2622/tcp +metricadbc 2622/udp +lmdp 2623/tcp +lmdp 2623/udp +aria 2624/tcp +aria 2624/udp +blwnkl-port 2625/tcp +blwnkl-port 2625/udp +gbjd816 2626/tcp +gbjd816 2626/udp +moshebeeri 2627/tcp +moshebeeri 2627/udp +dict 2628/tcp +dict 2628/udp +sitaraserver 2629/tcp +sitaraserver 2629/udp +sitaramgmt 2630/tcp +sitaramgmt 2630/udp +sitaradir 2631/tcp +sitaradir 2631/udp +irdg-post 2632/tcp +irdg-post 2632/udp +interintelli 2633/tcp +interintelli 2633/udp +pk-electronics 2634/tcp +pk-electronics 2634/udp +backburner 2635/tcp +backburner 2635/udp +solve 2636/tcp +solve 2636/udp +imdocsvc 2637/tcp +imdocsvc 2637/udp +sybaseanywhere 2638/tcp +sybaseanywhere 2638/udp +aminet 2639/tcp +aminet 2639/udp +ami-control 2640/tcp +ami-control 2640/udp +hdl-srv 2641/tcp +hdl-srv 2641/udp +tragic 2642/tcp +tragic 2642/udp +gte-samp 2643/tcp +gte-samp 2643/udp +travsoft-ipx-t 2644/tcp +travsoft-ipx-t 2644/udp +novell-ipx-cmd 2645/tcp +novell-ipx-cmd 2645/udp +and-lm 2646/tcp +and-lm 2646/udp +syncserver 2647/tcp +syncserver 2647/udp +upsnotifyprot 2648/tcp +upsnotifyprot 2648/udp +vpsipport 2649/tcp +vpsipport 2649/udp +eristwoguns 2650/tcp +eristwoguns 2650/udp +ebinsite 2651/tcp +ebinsite 2651/udp +interpathpanel 2652/tcp +interpathpanel 2652/udp +sonus 2653/tcp +sonus 2653/udp +corel-vncadmin 2654/tcp +corel-vncadmin 2654/udp +unglue 2655/tcp +unglue 2655/udp +kana 2656/tcp +kana 2656/udp +sns-dispatcher 2657/tcp +sns-dispatcher 2657/udp +sns-admin 2658/tcp +sns-admin 2658/udp +sns-query 2659/tcp +sns-query 2659/udp +gcmonitor 2660/tcp +gcmonitor 2660/udp +olhost 2661/tcp +olhost 2661/udp +bintec-capi 2662/tcp +bintec-capi 2662/udp +bintec-tapi 2663/tcp +bintec-tapi 2663/udp +patrol-mq-gm 2664/tcp +patrol-mq-gm 2664/udp +patrol-mq-nm 2665/tcp +patrol-mq-nm 2665/udp +extensis 2666/tcp +extensis 2666/udp +alarm-clock-s 2667/tcp +alarm-clock-s 2667/udp +alarm-clock-c 2668/tcp +alarm-clock-c 2668/udp +toad 2669/tcp +toad 2669/udp +tve-announce 2670/tcp +tve-announce 2670/udp +newlixreg 2671/tcp +newlixreg 2671/udp +nhserver 2672/tcp +nhserver 2672/udp +firstcall42 2673/tcp +firstcall42 2673/udp +ewnn 2674/tcp +ewnn 2674/udp +ttc-etap 2675/tcp +ttc-etap 2675/udp +simslink 2676/tcp +simslink 2676/udp +gadgetgate1way 2677/tcp +gadgetgate1way 2677/udp +gadgetgate2way 2678/tcp +gadgetgate2way 2678/udp +syncserverssl 2679/tcp +syncserverssl 2679/udp +pxc-sapxom 2680/tcp +pxc-sapxom 2680/udp +mpnjsomb 2681/tcp +mpnjsomb 2681/udp +ncdloadbalance 2683/tcp +ncdloadbalance 2683/udp +mpnjsosv 2684/tcp +mpnjsosv 2684/udp +mpnjsocl 2685/tcp +mpnjsocl 2685/udp +mpnjsomg 2686/tcp +mpnjsomg 2686/udp +pq-lic-mgmt 2687/tcp +pq-lic-mgmt 2687/udp +md-cg-http 2688/tcp +md-cg-http 2688/udp +fastlynx 2689/tcp +fastlynx 2689/udp +hp-nnm-data 2690/tcp +hp-nnm-data 2690/udp +itinternet 2691/tcp +itinternet 2691/udp +admins-lms 2692/tcp +admins-lms 2692/udp +pwrsevent 2694/tcp +pwrsevent 2694/udp +vspread 2695/tcp +vspread 2695/udp +unifyadmin 2696/tcp +unifyadmin 2696/udp +oce-snmp-trap 2697/tcp +oce-snmp-trap 2697/udp +mck-ivpip 2698/tcp +mck-ivpip 2698/udp +csoft-plusclnt 2699/tcp +csoft-plusclnt 2699/udp +tqdata 2700/tcp +tqdata 2700/udp +sms-rcinfo 2701/tcp +sms-rcinfo 2701/udp +sms-xfer 2702/tcp +sms-xfer 2702/udp +sms-chat 2703/tcp +sms-chat 2703/udp +sms-remctrl 2704/tcp +sms-remctrl 2704/udp +sds-admin 2705/tcp +sds-admin 2705/udp +ncdmirroring 2706/tcp +ncdmirroring 2706/udp +emcsymapiport 2707/tcp +emcsymapiport 2707/udp +banyan-net 2708/tcp +banyan-net 2708/udp +supermon 2709/tcp +supermon 2709/udp +sso-service 2710/tcp +sso-service 2710/udp +sso-control 2711/tcp +sso-control 2711/udp +aocp 2712/tcp +aocp 2712/udp +raventbs 2713/tcp +raventbs 2713/udp +raventdm 2714/tcp +raventdm 2714/udp +hpstgmgr2 2715/tcp +hpstgmgr2 2715/udp +inova-ip-disco 2716/tcp +inova-ip-disco 2716/udp +pn-requester 2717/tcp +pn-requester 2717/udp +pn-requester2 2718/tcp +pn-requester2 2718/udp +scan-change 2719/tcp +scan-change 2719/udp +wkars 2720/tcp +wkars 2720/udp +smart-diagnose 2721/tcp +smart-diagnose 2721/udp +proactivesrvr 2722/tcp +proactivesrvr 2722/udp +watchdog-nt 2723/tcp +watchdog-nt 2723/udp +qotps 2724/tcp +qotps 2724/udp +msolap-ptp2 2725/tcp +msolap-ptp2 2725/udp +tams 2726/tcp +tams 2726/udp +mgcp-callagent 2727/tcp +mgcp-callagent 2727/udp +sqdr 2728/tcp +sqdr 2728/udp +tcim-control 2729/tcp +tcim-control 2729/udp +nec-raidplus 2730/tcp +nec-raidplus 2730/udp +fyre-messanger 2731/tcp +fyre-messanger 2731/udp +g5m 2732/tcp +g5m 2732/udp +signet-ctf 2733/tcp +signet-ctf 2733/udp +ccs-software 2734/tcp +ccs-software 2734/udp +netiq-mc 2735/tcp +netiq-mc 2735/udp +radwiz-nms-srv 2736/tcp +radwiz-nms-srv 2736/udp +srp-feedback 2737/tcp +srp-feedback 2737/udp +ndl-tcp-ois-gw 2738/tcp +ndl-tcp-ois-gw 2738/udp +tn-timing 2739/tcp +tn-timing 2739/udp +alarm 2740/tcp +alarm 2740/udp +tsb 2741/tcp +tsb 2741/udp +tsb2 2742/tcp +tsb2 2742/udp +murx 2743/tcp +murx 2743/udp +honyaku 2744/tcp +honyaku 2744/udp +urbisnet 2745/tcp +urbisnet 2745/udp +cpudpencap 2746/tcp +cpudpencap 2746/udp +fjippol-swrly 2747/tcp +fjippol-swrly 2747/udp +fjippol-polsvr 2748/tcp +fjippol-polsvr 2748/udp +fjippol-cnsl 2749/tcp +fjippol-cnsl 2749/udp +fjippol-port1 2750/tcp +fjippol-port1 2750/udp +fjippol-port2 2751/tcp +fjippol-port2 2751/udp +rsisysaccess 2752/tcp +rsisysaccess 2752/udp +de-spot 2753/tcp +de-spot 2753/udp +apollo-cc 2754/tcp +apollo-cc 2754/udp +expresspay 2755/tcp +expresspay 2755/udp +simplement-tie 2756/tcp +simplement-tie 2756/udp +cnrp 2757/tcp +cnrp 2757/udp +apollo-status 2758/tcp +apollo-status 2758/udp +apollo-gms 2759/tcp +apollo-gms 2759/udp +sabams 2760/tcp +sabams 2760/udp +dicom-iscl 2761/tcp +dicom-iscl 2761/udp +dicom-tls 2762/tcp +dicom-tls 2762/udp +desktop-dna 2763/tcp +desktop-dna 2763/udp +data-insurance 2764/tcp +data-insurance 2764/udp +qip-audup 2765/tcp +qip-audup 2765/udp +compaq-scp 2766/tcp +compaq-scp 2766/udp +uadtc 2767/tcp +uadtc 2767/udp +uacs 2768/tcp +uacs 2768/udp +exce 2769/tcp +exce 2769/udp +veronica 2770/tcp +veronica 2770/udp +vergencecm 2771/tcp +vergencecm 2771/udp +auris 2772/tcp +auris 2772/udp +rbakcup1 2773/tcp +rbakcup1 2773/udp +rbakcup2 2774/tcp +rbakcup2 2774/udp +smpp 2775/tcp +smpp 2775/udp +ridgeway1 2776/tcp +ridgeway1 2776/udp +ridgeway2 2777/tcp +ridgeway2 2777/udp +gwen-sonya 2778/tcp +gwen-sonya 2778/udp +lbc-sync 2779/tcp +lbc-sync 2779/udp +lbc-control 2780/tcp +lbc-control 2780/udp +whosells 2781/tcp +whosells 2781/udp +everydayrc 2782/tcp +everydayrc 2782/udp +aises 2783/tcp +aises 2783/udp +www-dev 2784/tcp +www-dev 2784/udp +aic-np 2785/tcp +aic-np 2785/udp +aic-oncrpc 2786/tcp +aic-oncrpc 2786/udp +piccolo 2787/tcp +piccolo 2787/udp +fryeserv 2788/tcp +fryeserv 2788/udp +media-agent 2789/tcp +media-agent 2789/udp +plgproxy 2790/tcp +plgproxy 2790/udp +mtport-regist 2791/tcp +mtport-regist 2791/udp +f5-globalsite 2792/tcp +f5-globalsite 2792/udp +initlsmsad 2793/tcp +initlsmsad 2793/udp +livestats 2795/tcp +livestats 2795/udp +ac-tech 2796/tcp +ac-tech 2796/udp +esp-encap 2797/tcp +esp-encap 2797/udp +tmesis-upshot 2798/tcp +tmesis-upshot 2798/udp +icon-discover 2799/tcp +icon-discover 2799/udp +acc-raid 2800/tcp +acc-raid 2800/udp +igcp 2801/tcp +igcp 2801/udp +veritas-tcp1 2802/tcp +veritas-udp1 2802/udp +btprjctrl 2803/tcp +btprjctrl 2803/udp +dvr-esm 2804/tcp +dvr-esm 2804/udp +wta-wsp-s 2805/tcp +wta-wsp-s 2805/udp +cspuni 2806/tcp +cspuni 2806/udp +cspmulti 2807/tcp +cspmulti 2807/udp +j-lan-p 2808/tcp +j-lan-p 2808/udp +corbaloc 2809/tcp +corbaloc 2809/udp +netsteward 2810/tcp +netsteward 2810/udp +gsiftp 2811/tcp +gsiftp 2811/udp +atmtcp 2812/tcp +atmtcp 2812/udp +llm-pass 2813/tcp +llm-pass 2813/udp +llm-csv 2814/tcp +llm-csv 2814/udp +lbc-measure 2815/tcp +lbc-measure 2815/udp +lbc-watchdog 2816/tcp +lbc-watchdog 2816/udp +nmsigport 2817/tcp +nmsigport 2817/udp +rmlnk 2818/tcp +rmlnk 2818/udp +fc-faultnotify 2819/tcp +fc-faultnotify 2819/udp +univision 2820/tcp +univision 2820/udp +vrts-at-port 2821/tcp +vrts-at-port 2821/udp +ka0wuc 2822/tcp +ka0wuc 2822/udp +cqg-netlan 2823/tcp +cqg-netlan 2823/udp +cqg-netlan-1 2824/tcp +cqg-netlan-1 2824/udp +slc-systemlog 2826/tcp +slc-systemlog 2826/udp +slc-ctrlrloops 2827/tcp +slc-ctrlrloops 2827/udp +itm-lm 2828/tcp +itm-lm 2828/udp +silkp1 2829/tcp +silkp1 2829/udp +silkp2 2830/tcp +silkp2 2830/udp +silkp3 2831/tcp +silkp3 2831/udp +silkp4 2832/tcp +silkp4 2832/udp +glishd 2833/tcp +glishd 2833/udp +evtp 2834/tcp +evtp 2834/udp +evtp-data 2835/tcp +evtp-data 2835/udp +catalyst 2836/tcp +catalyst 2836/udp +repliweb 2837/tcp +repliweb 2837/udp +starbot 2838/tcp +starbot 2838/udp +nmsigport 2839/tcp +nmsigport 2839/udp +l3-exprt 2840/tcp +l3-exprt 2840/udp +l3-ranger 2841/tcp +l3-ranger 2841/udp +l3-hawk 2842/tcp +l3-hawk 2842/udp +pdnet 2843/tcp +pdnet 2843/udp +bpcp-poll 2844/tcp +bpcp-poll 2844/udp +bpcp-trap 2845/tcp +bpcp-trap 2845/udp +aimpp-hello 2846/tcp +aimpp-hello 2846/udp +aimpp-port-req 2847/tcp +aimpp-port-req 2847/udp +amt-blc-port 2848/tcp +amt-blc-port 2848/udp +fxp 2849/tcp +fxp 2849/udp +metaconsole 2850/tcp +metaconsole 2850/udp +webemshttp 2851/tcp +webemshttp 2851/udp +bears-01 2852/tcp +bears-01 2852/udp +ispipes 2853/tcp +ispipes 2853/udp +infomover 2854/tcp +infomover 2854/udp +msrp 2855/tcp +cesdinv 2856/tcp +cesdinv 2856/udp +simctlp 2857/tcp +simctlp 2857/udp +ecnp 2858/tcp +ecnp 2858/udp +activememory 2859/tcp +activememory 2859/udp +dialpad-voice1 2860/tcp +dialpad-voice1 2860/udp +dialpad-voice2 2861/tcp +dialpad-voice2 2861/udp +ttg-protocol 2862/tcp +ttg-protocol 2862/udp +sonardata 2863/tcp +sonardata 2863/udp +astronova-main 2864/tcp +astronova-main 2864/udp +pit-vpn 2865/tcp +pit-vpn 2865/udp +iwlistener 2866/tcp +iwlistener 2866/udp +esps-portal 2867/tcp +esps-portal 2867/udp +npep-messaging 2868/tcp +npep-messaging 2868/udp +icslap 2869/tcp +icslap 2869/udp +daishi 2870/tcp +daishi 2870/udp +msi-selectplay 2871/tcp +msi-selectplay 2871/udp +radix 2872/tcp +radix 2872/udp +dxmessagebase1 2874/tcp +dxmessagebase1 2874/udp +dxmessagebase2 2875/tcp +dxmessagebase2 2875/udp +sps-tunnel 2876/tcp +sps-tunnel 2876/udp +bluelance 2877/tcp +bluelance 2877/udp +aap 2878/tcp +aap 2878/udp +ucentric-ds 2879/tcp +ucentric-ds 2879/udp +synapse 2880/tcp +synapse 2880/udp +ndsp 2881/tcp +ndsp 2881/udp +ndtp 2882/tcp +ndtp 2882/udp +ndnp 2883/tcp +ndnp 2883/udp +flashmsg 2884/tcp +flashmsg 2884/udp +topflow 2885/tcp +topflow 2885/udp +responselogic 2886/tcp +responselogic 2886/udp +aironetddp 2887/tcp +aironetddp 2887/udp +spcsdlobby 2888/tcp +spcsdlobby 2888/udp +rsom 2889/tcp +rsom 2889/udp +cspclmulti 2890/tcp +cspclmulti 2890/udp +cinegrfx-elmd 2891/tcp +cinegrfx-elmd 2891/udp +snifferdata 2892/tcp +snifferdata 2892/udp +vseconnector 2893/tcp +vseconnector 2893/udp +abacus-remote 2894/tcp +abacus-remote 2894/udp +natuslink 2895/tcp +natuslink 2895/udp +ecovisiong6-1 2896/tcp +ecovisiong6-1 2896/udp +citrix-rtmp 2897/tcp +citrix-rtmp 2897/udp +appliance-cfg 2898/tcp +appliance-cfg 2898/udp +powergemplus 2899/tcp +powergemplus 2899/udp +quicksuite 2900/tcp +quicksuite 2900/udp +allstorcns 2901/tcp +allstorcns 2901/udp +netaspi 2902/tcp +netaspi 2902/udp +suitcase 2903/tcp +suitcase 2903/udp +m2ua 2904/tcp +m2ua 2904/udp +m2ua 2904/sctp +m3ua 2905/tcp +m3ua 2905/sctp +caller9 2906/tcp +caller9 2906/udp +webmethods-b2b 2907/tcp +webmethods-b2b 2907/udp +mao 2908/tcp +mao 2908/udp +funk-dialout 2909/tcp +funk-dialout 2909/udp +tdaccess 2910/tcp +tdaccess 2910/udp +blockade 2911/tcp +blockade 2911/udp +epicon 2912/tcp +epicon 2912/udp +boosterware 2913/tcp +boosterware 2913/udp +gamelobby 2914/tcp +gamelobby 2914/udp +tksocket 2915/tcp +tksocket 2915/udp +elvin-server 2916/tcp +elvin-server 2916/udp +elvin-client 2917/tcp +elvin-client 2917/udp +kastenchasepad 2918/tcp +kastenchasepad 2918/udp +roboer 2919/tcp +roboer 2919/udp +roboeda 2920/tcp +roboeda 2920/udp +cesdcdman 2921/tcp +cesdcdman 2921/udp +cesdcdtrn 2922/tcp +cesdcdtrn 2922/udp +wta-wsp-wtp-s 2923/tcp +wta-wsp-wtp-s 2923/udp +precise-vip 2924/tcp +precise-vip 2924/udp +mobile-file-dl 2926/tcp +mobile-file-dl 2926/udp +unimobilectrl 2927/tcp +unimobilectrl 2927/udp +redstone-cpss 2928/tcp +redstone-cpss 2928/udp +amx-webadmin 2929/tcp +amx-webadmin 2929/udp +amx-weblinx 2930/tcp +amx-weblinx 2930/udp +circle-x 2931/tcp +circle-x 2931/udp +incp 2932/tcp +incp 2932/udp +4-tieropmgw 2933/tcp +4-tieropmgw 2933/udp +4-tieropmcli 2934/tcp +4-tieropmcli 2934/udp +qtp 2935/tcp +qtp 2935/udp +otpatch 2936/tcp +otpatch 2936/udp +pnaconsult-lm 2937/tcp +pnaconsult-lm 2937/udp +sm-pas-1 2938/tcp +sm-pas-1 2938/udp +sm-pas-2 2939/tcp +sm-pas-2 2939/udp +sm-pas-3 2940/tcp +sm-pas-3 2940/udp +sm-pas-4 2941/tcp +sm-pas-4 2941/udp +sm-pas-5 2942/tcp +sm-pas-5 2942/udp +ttnrepository 2943/tcp +ttnrepository 2943/udp +megaco-h248 2944/tcp +megaco-h248 2944/udp +megaco-h248 2944/sctp +h248-binary 2945/tcp +h248-binary 2945/udp +h248-binary 2945/sctp +fjsvmpor 2946/tcp +fjsvmpor 2946/udp +gpsd 2947/tcp +gpsd 2947/udp +wap-push 2948/tcp +wap-push 2948/udp +wap-pushsecure 2949/tcp +wap-pushsecure 2949/udp +esip 2950/tcp +esip 2950/udp +ottp 2951/tcp +ottp 2951/udp +mpfwsas 2952/tcp +mpfwsas 2952/udp +ovalarmsrv 2953/tcp +ovalarmsrv 2953/udp +ovalarmsrv-cmd 2954/tcp +ovalarmsrv-cmd 2954/udp +csnotify 2955/tcp +csnotify 2955/udp +ovrimosdbman 2956/tcp +ovrimosdbman 2956/udp +jmact5 2957/tcp +jmact5 2957/udp +jmact6 2958/tcp +jmact6 2958/udp +rmopagt 2959/tcp +rmopagt 2959/udp +dfoxserver 2960/tcp +dfoxserver 2960/udp +boldsoft-lm 2961/tcp +boldsoft-lm 2961/udp +iph-policy-cli 2962/tcp +iph-policy-cli 2962/udp +iph-policy-adm 2963/tcp +iph-policy-adm 2963/udp +bullant-srap 2964/tcp +bullant-srap 2964/udp +bullant-rap 2965/tcp +bullant-rap 2965/udp +idp-infotrieve 2966/tcp +idp-infotrieve 2966/udp +ssc-agent 2967/tcp +ssc-agent 2967/udp +enpp 2968/tcp +enpp 2968/udp +essp 2969/tcp +essp 2969/udp +index-net 2970/tcp +index-net 2970/udp +netclip 2971/tcp +netclip 2971/udp +pmsm-webrctl 2972/tcp +pmsm-webrctl 2972/udp +svnetworks 2973/tcp +svnetworks 2973/udp +signal 2974/tcp +signal 2974/udp +fjmpcm 2975/tcp +fjmpcm 2975/udp +cns-srv-port 2976/tcp +cns-srv-port 2976/udp +ttc-etap-ns 2977/tcp +ttc-etap-ns 2977/udp +ttc-etap-ds 2978/tcp +ttc-etap-ds 2978/udp +h263-video 2979/tcp +h263-video 2979/udp +wimd 2980/tcp +wimd 2980/udp +mylxamport 2981/tcp +mylxamport 2981/udp +iwb-whiteboard 2982/tcp +iwb-whiteboard 2982/udp +netplan 2983/tcp +netplan 2983/udp +hpidsadmin 2984/tcp +hpidsadmin 2984/udp +hpidsagent 2985/tcp +hpidsagent 2985/udp +stonefalls 2986/tcp +stonefalls 2986/udp +identify 2987/tcp +identify 2987/udp +hippad 2988/tcp +hippad 2988/udp +zarkov 2989/tcp +zarkov 2989/udp +boscap 2990/tcp +boscap 2990/udp +wkstn-mon 2991/tcp +wkstn-mon 2991/udp +avenyo 2992/tcp +avenyo 2992/udp +veritas-vis1 2993/tcp +veritas-vis1 2993/udp +veritas-vis2 2994/tcp +veritas-vis2 2994/udp +idrs 2995/tcp +idrs 2995/udp +vsixml 2996/tcp +vsixml 2996/udp +rebol 2997/tcp +rebol 2997/udp +realsecure 2998/tcp +realsecure 2998/udp +hbci 3000/tcp +hbci 3000/udp +remoteware-cl 3000/tcp +remoteware-cl 3000/udp +origo-native 3001/tcp +exlm-agent 3002/tcp +exlm-agent 3002/udp +remoteware-srv 3002/tcp +remoteware-srv 3002/udp +cgms 3003/tcp +cgms 3003/udp +csoftragent 3004/tcp +csoftragent 3004/udp +geniuslm 3005/tcp +geniuslm 3005/udp +ii-admin 3006/tcp +ii-admin 3006/udp +lotusmtap 3007/tcp +lotusmtap 3007/udp +midnight-tech 3008/tcp +midnight-tech 3008/udp +pxc-ntfy 3009/tcp +pxc-ntfy 3009/udp +gw 3010/tcp +ping-pong 3010/udp +trusted-web 3011/tcp +trusted-web 3011/udp +twsdss 3012/tcp +twsdss 3012/udp +gilatskysurfer 3013/tcp +gilatskysurfer 3013/udp +broker-service 3014/tcp +broker-service 3014/udp +nati-dstp 3015/tcp +nati-dstp 3015/udp +notify-srvr 3016/tcp +notify-srvr 3016/udp +event-listener 3017/tcp +event-listener 3017/udp +srvc-registry 3018/tcp +srvc-registry 3018/udp +resource-mgr 3019/tcp +resource-mgr 3019/udp +cifs 3020/tcp +cifs 3020/udp +agriserver 3021/tcp +agriserver 3021/udp +csregagent 3022/tcp +csregagent 3022/udp +magicnotes 3023/tcp +magicnotes 3023/udp +nds-sso 3024/tcp +nds-sso 3024/udp +arepa-raft 3025/tcp +arepa-raft 3025/udp +agri-gateway 3026/tcp +agri-gateway 3026/udp +LiebDevMgmt-C 3027/tcp +LiebDevMgmt-C 3027/udp +LiebDevMgmt-DM 3028/tcp +LiebDevMgmt-DM 3028/udp +LiebDevMgmt-A 3029/tcp +LiebDevMgmt-A 3029/udp +arepa-cas 3030/tcp +arepa-cas 3030/udp +eppc 3031/tcp +eppc 3031/udp +redwood-chat 3032/tcp +redwood-chat 3032/udp +pdb 3033/tcp +pdb 3033/udp +osmosis-aeea 3034/tcp +osmosis-aeea 3034/udp +fjsv-gssagt 3035/tcp +fjsv-gssagt 3035/udp +hagel-dump 3036/tcp +hagel-dump 3036/udp +hp-san-mgmt 3037/tcp +hp-san-mgmt 3037/udp +santak-ups 3038/tcp +santak-ups 3038/udp +cogitate 3039/tcp +cogitate 3039/udp +tomato-springs 3040/tcp +tomato-springs 3040/udp +di-traceware 3041/tcp +di-traceware 3041/udp +journee 3042/tcp +journee 3042/udp +brp 3043/tcp +brp 3043/udp +epp 3044/tcp +epp 3044/udp +responsenet 3045/tcp +responsenet 3045/udp +di-ase 3046/tcp +di-ase 3046/udp +hlserver 3047/tcp +hlserver 3047/udp +pctrader 3048/tcp +pctrader 3048/udp +nsws 3049/tcp +nsws 3049/udp +gds-db 3050/tcp +gds-db 3050/udp +galaxy-server 3051/tcp +galaxy-server 3051/udp +apc-3052 3052/tcp +apc-3052 3052/udp +dsom-server 3053/tcp +dsom-server 3053/udp +amt-cnf-prot 3054/tcp +amt-cnf-prot 3054/udp +policyserver 3055/tcp +policyserver 3055/udp +cdl-server 3056/tcp +cdl-server 3056/udp +goahead-fldup 3057/tcp +goahead-fldup 3057/udp +videobeans 3058/tcp +videobeans 3058/udp +qsoft 3059/tcp +qsoft 3059/udp +interserver 3060/tcp +interserver 3060/udp +cautcpd 3061/tcp +cautcpd 3061/udp +ncacn-ip-tcp 3062/tcp +ncacn-ip-tcp 3062/udp +ncadg-ip-udp 3063/tcp +ncadg-ip-udp 3063/udp +rprt 3064/tcp +rprt 3064/udp +slinterbase 3065/tcp +slinterbase 3065/udp +netattachsdmp 3066/tcp +netattachsdmp 3066/udp +fjhpjp 3067/tcp +fjhpjp 3067/udp +ls3bcast 3068/tcp +ls3bcast 3068/udp +ls3 3069/tcp +ls3 3069/udp +mgxswitch 3070/tcp +mgxswitch 3070/udp +xplat-replicate 3071/tcp +csd-monitor 3072/tcp +csd-monitor 3072/udp +vcrp 3073/tcp +vcrp 3073/udp +xbox 3074/tcp +xbox 3074/udp +orbix-locator 3075/tcp +orbix-locator 3075/udp +orbix-config 3076/tcp +orbix-config 3076/udp +orbix-loc-ssl 3077/tcp +orbix-loc-ssl 3077/udp +orbix-cfg-ssl 3078/tcp +orbix-cfg-ssl 3078/udp +lv-frontpanel 3079/tcp +lv-frontpanel 3079/udp +stm-pproc 3080/tcp +stm-pproc 3080/udp +tl1-lv 3081/tcp +tl1-lv 3081/udp +tl1-raw 3082/tcp +tl1-raw 3082/udp +tl1-telnet 3083/tcp +tl1-telnet 3083/udp +itm-mccs 3084/tcp +itm-mccs 3084/udp +pcihreq 3085/tcp +pcihreq 3085/udp +jdl-dbkitchen 3086/tcp +jdl-dbkitchen 3086/udp +asoki-sma 3087/tcp +asoki-sma 3087/udp +xdtp 3088/tcp +xdtp 3088/udp +ptk-alink 3089/tcp +ptk-alink 3089/udp +stss 3090/tcp +stss 3090/udp +1ci-smcs 3091/tcp +1ci-smcs 3091/udp +rapidmq-center 3093/tcp +rapidmq-center 3093/udp +rapidmq-reg 3094/tcp +rapidmq-reg 3094/udp +panasas 3095/tcp +panasas 3095/udp +ndl-aps 3096/tcp +ndl-aps 3096/udp +itu-bicc-stc 3097/sctp +umm-port 3098/tcp +umm-port 3098/udp +chmd 3099/tcp +chmd 3099/udp +opcon-xps 3100/tcp +opcon-xps 3100/udp +hp-pxpib 3101/tcp +hp-pxpib 3101/udp +slslavemon 3102/tcp +slslavemon 3102/udp +autocuesmi 3103/tcp +autocuesmi 3103/udp +autocuelog 3104/tcp +autocuetime 3104/udp +cardbox 3105/tcp +cardbox 3105/udp +cardbox-http 3106/tcp +cardbox-http 3106/udp +business 3107/tcp +business 3107/udp +geolocate 3108/tcp +geolocate 3108/udp +personnel 3109/tcp +personnel 3109/udp +sim-control 3110/tcp +sim-control 3110/udp +wsynch 3111/tcp +wsynch 3111/udp +ksysguard 3112/tcp +ksysguard 3112/udp +cs-auth-svr 3113/tcp +cs-auth-svr 3113/udp +ccmad 3114/tcp +ccmad 3114/udp +mctet-master 3115/tcp +mctet-master 3115/udp +mctet-gateway 3116/tcp +mctet-gateway 3116/udp +mctet-jserv 3117/tcp +mctet-jserv 3117/udp +pkagent 3118/tcp +pkagent 3118/udp +d2000kernel 3119/tcp +d2000kernel 3119/udp +d2000webserver 3120/tcp +d2000webserver 3120/udp +pcmk-remote 3121/tcp +vtr-emulator 3122/tcp +vtr-emulator 3122/udp +edix 3123/tcp +edix 3123/udp +beacon-port 3124/tcp +beacon-port 3124/udp +a13-an 3125/tcp +a13-an 3125/udp +ctx-bridge 3127/tcp +ctx-bridge 3127/udp +ndl-aas 3128/tcp +ndl-aas 3128/udp +netport-id 3129/tcp +netport-id 3129/udp +icpv2 3130/tcp +icpv2 3130/udp +netbookmark 3131/tcp +netbookmark 3131/udp +ms-rule-engine 3132/tcp +ms-rule-engine 3132/udp +prism-deploy 3133/tcp +prism-deploy 3133/udp +ecp 3134/tcp +ecp 3134/udp +peerbook-port 3135/tcp +peerbook-port 3135/udp +grubd 3136/tcp +grubd 3136/udp +rtnt-1 3137/tcp +rtnt-1 3137/udp +rtnt-2 3138/tcp +rtnt-2 3138/udp +incognitorv 3139/tcp +incognitorv 3139/udp +ariliamulti 3140/tcp +ariliamulti 3140/udp +vmodem 3141/tcp +vmodem 3141/udp +rdc-wh-eos 3142/tcp +rdc-wh-eos 3142/udp +seaview 3143/tcp +seaview 3143/udp +tarantella 3144/tcp +tarantella 3144/udp +csi-lfap 3145/tcp +csi-lfap 3145/udp +bears-02 3146/tcp +bears-02 3146/udp +rfio 3147/tcp +rfio 3147/udp +nm-game-admin 3148/tcp +nm-game-admin 3148/udp +nm-game-server 3149/tcp +nm-game-server 3149/udp +nm-asses-admin 3150/tcp +nm-asses-admin 3150/udp +nm-assessor 3151/tcp +nm-assessor 3151/udp +feitianrockey 3152/tcp +feitianrockey 3152/udp +s8-client-port 3153/tcp +s8-client-port 3153/udp +ccmrmi 3154/tcp +ccmrmi 3154/udp +jpegmpeg 3155/tcp +jpegmpeg 3155/udp +indura 3156/tcp +indura 3156/udp +e3consultants 3157/tcp +e3consultants 3157/udp +stvp 3158/tcp +stvp 3158/udp +navegaweb-port 3159/tcp +navegaweb-port 3159/udp +tip-app-server 3160/tcp +tip-app-server 3160/udp +doc1lm 3161/tcp +doc1lm 3161/udp +sflm 3162/tcp +sflm 3162/udp +res-sap 3163/tcp +res-sap 3163/udp +imprs 3164/tcp +imprs 3164/udp +newgenpay 3165/tcp +newgenpay 3165/udp +sossecollector 3166/tcp +sossecollector 3166/udp +nowcontact 3167/tcp +nowcontact 3167/udp +poweronnud 3168/tcp +poweronnud 3168/udp +serverview-as 3169/tcp +serverview-as 3169/udp +serverview-asn 3170/tcp +serverview-asn 3170/udp +serverview-gf 3171/tcp +serverview-gf 3171/udp +serverview-rm 3172/tcp +serverview-rm 3172/udp +serverview-icc 3173/tcp +serverview-icc 3173/udp +armi-server 3174/tcp +armi-server 3174/udp +t1-e1-over-ip 3175/tcp +t1-e1-over-ip 3175/udp +ars-master 3176/tcp +ars-master 3176/udp +phonex-port 3177/tcp +phonex-port 3177/udp +radclientport 3178/tcp +radclientport 3178/udp +h2gf-w-2m 3179/tcp +h2gf-w-2m 3179/udp +mc-brk-srv 3180/tcp +mc-brk-srv 3180/udp +bmcpatrolagent 3181/tcp +bmcpatrolagent 3181/udp +bmcpatrolrnvu 3182/tcp +bmcpatrolrnvu 3182/udp +cops-tls 3183/tcp +cops-tls 3183/udp +apogeex-port 3184/tcp +apogeex-port 3184/udp +smpppd 3185/tcp +smpppd 3185/udp +iiw-port 3186/tcp +iiw-port 3186/udp +odi-port 3187/tcp +odi-port 3187/udp +brcm-comm-port 3188/tcp +brcm-comm-port 3188/udp +pcle-infex 3189/tcp +pcle-infex 3189/udp +csvr-proxy 3190/tcp +csvr-proxy 3190/udp +csvr-sslproxy 3191/tcp +csvr-sslproxy 3191/udp +firemonrcc 3192/tcp +firemonrcc 3192/udp +spandataport 3193/tcp +spandataport 3193/udp +magbind 3194/tcp +magbind 3194/udp +ncu-1 3195/tcp +ncu-1 3195/udp +ncu-2 3196/tcp +ncu-2 3196/udp +embrace-dp-s 3197/tcp +embrace-dp-s 3197/udp +embrace-dp-c 3198/tcp +embrace-dp-c 3198/udp +dmod-workspace 3199/tcp +dmod-workspace 3199/udp +tick-port 3200/tcp +tick-port 3200/udp +cpq-tasksmart 3201/tcp +cpq-tasksmart 3201/udp +intraintra 3202/tcp +intraintra 3202/udp +netwatcher-mon 3203/tcp +netwatcher-mon 3203/udp +netwatcher-db 3204/tcp +netwatcher-db 3204/udp +isns 3205/tcp +isns 3205/udp +ironmail 3206/tcp +ironmail 3206/udp +vx-auth-port 3207/tcp +vx-auth-port 3207/udp +pfu-prcallback 3208/tcp +pfu-prcallback 3208/udp +netwkpathengine 3209/tcp +netwkpathengine 3209/udp +flamenco-proxy 3210/tcp +flamenco-proxy 3210/udp +avsecuremgmt 3211/tcp +avsecuremgmt 3211/udp +surveyinst 3212/tcp +surveyinst 3212/udp +neon24x7 3213/tcp +neon24x7 3213/udp +jmq-daemon-1 3214/tcp +jmq-daemon-1 3214/udp +jmq-daemon-2 3215/tcp +jmq-daemon-2 3215/udp +ferrari-foam 3216/tcp +ferrari-foam 3216/udp +unite 3217/tcp +unite 3217/udp +smartpackets 3218/tcp +smartpackets 3218/udp +wms-messenger 3219/tcp +wms-messenger 3219/udp +xnm-ssl 3220/tcp +xnm-ssl 3220/udp +xnm-clear-text 3221/tcp +xnm-clear-text 3221/udp +glbp 3222/tcp +glbp 3222/udp +digivote 3223/tcp +digivote 3223/udp +aes-discovery 3224/tcp +aes-discovery 3224/udp +fcip-port 3225/tcp +fcip-port 3225/udp +isi-irp 3226/tcp +isi-irp 3226/udp +dwnmshttp 3227/tcp +dwnmshttp 3227/udp +dwmsgserver 3228/tcp +dwmsgserver 3228/udp +global-cd-port 3229/tcp +global-cd-port 3229/udp +sftdst-port 3230/tcp +sftdst-port 3230/udp +vidigo 3231/tcp +vidigo 3231/udp +mdtp 3232/tcp +mdtp 3232/udp +whisker 3233/tcp +whisker 3233/udp +alchemy 3234/tcp +alchemy 3234/udp +mdap-port 3235/tcp +mdap-port 3235/udp +apparenet-ts 3236/tcp +apparenet-ts 3236/udp +apparenet-tps 3237/tcp +apparenet-tps 3237/udp +apparenet-as 3238/tcp +apparenet-as 3238/udp +apparenet-ui 3239/tcp +apparenet-ui 3239/udp +triomotion 3240/tcp +triomotion 3240/udp +sysorb 3241/tcp +sysorb 3241/udp +sdp-id-port 3242/tcp +sdp-id-port 3242/udp +timelot 3243/tcp +timelot 3243/udp +onesaf 3244/tcp +onesaf 3244/udp +vieo-fe 3245/tcp +vieo-fe 3245/udp +dvt-system 3246/tcp +dvt-system 3246/udp +dvt-data 3247/tcp +dvt-data 3247/udp +procos-lm 3248/tcp +procos-lm 3248/udp +ssp 3249/tcp +ssp 3249/udp +hicp 3250/tcp +hicp 3250/udp +sysscanner 3251/tcp +sysscanner 3251/udp +dhe 3252/tcp +dhe 3252/udp +pda-data 3253/tcp +pda-data 3253/udp +pda-sys 3254/tcp +pda-sys 3254/udp +semaphore 3255/tcp +semaphore 3255/udp +cpqrpm-agent 3256/tcp +cpqrpm-agent 3256/udp +cpqrpm-server 3257/tcp +cpqrpm-server 3257/udp +ivecon-port 3258/tcp +ivecon-port 3258/udp +epncdp2 3259/tcp +epncdp2 3259/udp +iscsi-target 3260/tcp +iscsi-target 3260/udp +winshadow 3261/tcp +winshadow 3261/udp +necp 3262/tcp +necp 3262/udp +ecolor-imager 3263/tcp +ecolor-imager 3263/udp +ccmail 3264/tcp +ccmail 3264/udp +altav-tunnel 3265/tcp +altav-tunnel 3265/udp +ns-cfg-server 3266/tcp +ns-cfg-server 3266/udp +ibm-dial-out 3267/tcp +ibm-dial-out 3267/udp +msft-gc 3268/tcp +msft-gc 3268/udp +msft-gc-ssl 3269/tcp +msft-gc-ssl 3269/udp +verismart 3270/tcp +verismart 3270/udp +csoft-prev 3271/tcp +csoft-prev 3271/udp +user-manager 3272/tcp +user-manager 3272/udp +sxmp 3273/tcp +sxmp 3273/udp +ordinox-server 3274/tcp +ordinox-server 3274/udp +samd 3275/tcp +samd 3275/udp +maxim-asics 3276/tcp +maxim-asics 3276/udp +awg-proxy 3277/tcp +awg-proxy 3277/udp +lkcmserver 3278/tcp +lkcmserver 3278/udp +admind 3279/tcp +admind 3279/udp +vs-server 3280/tcp +vs-server 3280/udp +sysopt 3281/tcp +sysopt 3281/udp +datusorb 3282/tcp +datusorb 3282/udp +4talk 3284/tcp +4talk 3284/udp +plato 3285/tcp +plato 3285/udp +e-net 3286/tcp +e-net 3286/udp +directvdata 3287/tcp +directvdata 3287/udp +cops 3288/tcp +cops 3288/udp +enpc 3289/tcp +enpc 3289/udp +caps-lm 3290/tcp +caps-lm 3290/udp +sah-lm 3291/tcp +sah-lm 3291/udp +cart-o-rama 3292/tcp +cart-o-rama 3292/udp +fg-fps 3293/tcp +fg-fps 3293/udp +fg-gip 3294/tcp +fg-gip 3294/udp +dyniplookup 3295/tcp +dyniplookup 3295/udp +rib-slm 3296/tcp +rib-slm 3296/udp +cytel-lm 3297/tcp +cytel-lm 3297/udp +deskview 3298/tcp +deskview 3298/udp +pdrncs 3299/tcp +pdrncs 3299/udp +ceph 3300/tcp +mcs-fastmail 3302/tcp +mcs-fastmail 3302/udp +opsession-clnt 3303/tcp +opsession-clnt 3303/udp +opsession-srvr 3304/tcp +opsession-srvr 3304/udp +odette-ftp 3305/tcp +odette-ftp 3305/udp +mysql 3306/tcp +mysql 3306/udp +opsession-prxy 3307/tcp +opsession-prxy 3307/udp +tns-server 3308/tcp +tns-server 3308/udp +tns-adv 3309/tcp +tns-adv 3309/udp +dyna-access 3310/tcp +dyna-access 3310/udp +mcns-tel-ret 3311/tcp +mcns-tel-ret 3311/udp +appman-server 3312/tcp +appman-server 3312/udp +uorb 3313/tcp +uorb 3313/udp +uohost 3314/tcp +uohost 3314/udp +cdid 3315/tcp +cdid 3315/udp +aicc-cmi 3316/tcp +aicc-cmi 3316/udp +vsaiport 3317/tcp +vsaiport 3317/udp +ssrip 3318/tcp +ssrip 3318/udp +sdt-lmd 3319/tcp +sdt-lmd 3319/udp +officelink2000 3320/tcp +officelink2000 3320/udp +vnsstr 3321/tcp +vnsstr 3321/udp +sftu 3326/tcp +sftu 3326/udp +bbars 3327/tcp +bbars 3327/udp +egptlm 3328/tcp +egptlm 3328/udp +hp-device-disc 3329/tcp +hp-device-disc 3329/udp +mcs-calypsoicf 3330/tcp +mcs-calypsoicf 3330/udp +mcs-messaging 3331/tcp +mcs-messaging 3331/udp +mcs-mailsvr 3332/tcp +mcs-mailsvr 3332/udp +dec-notes 3333/tcp +dec-notes 3333/udp +directv-web 3334/tcp +directv-web 3334/udp +directv-soft 3335/tcp +directv-soft 3335/udp +directv-tick 3336/tcp +directv-tick 3336/udp +directv-catlg 3337/tcp +directv-catlg 3337/udp +anet-b 3338/tcp +anet-b 3338/udp +anet-l 3339/tcp +anet-l 3339/udp +anet-m 3340/tcp +anet-m 3340/udp +anet-h 3341/tcp +anet-h 3341/udp +webtie 3342/tcp +webtie 3342/udp +ms-cluster-net 3343/tcp +ms-cluster-net 3343/udp +bnt-manager 3344/tcp +bnt-manager 3344/udp +influence 3345/tcp +influence 3345/udp +trnsprntproxy 3346/tcp +trnsprntproxy 3346/udp +phoenix-rpc 3347/tcp +phoenix-rpc 3347/udp +pangolin-laser 3348/tcp +pangolin-laser 3348/udp +chevinservices 3349/tcp +chevinservices 3349/udp +findviatv 3350/tcp +findviatv 3350/udp +btrieve 3351/tcp +btrieve 3351/udp +ssql 3352/tcp +ssql 3352/udp +fatpipe 3353/tcp +fatpipe 3353/udp +suitjd 3354/tcp +suitjd 3354/udp +ordinox-dbase 3355/tcp +ordinox-dbase 3355/udp +upnotifyps 3356/tcp +upnotifyps 3356/udp +adtech-test 3357/tcp +adtech-test 3357/udp +mpsysrmsvr 3358/tcp +mpsysrmsvr 3358/udp +wg-netforce 3359/tcp +wg-netforce 3359/udp +kv-server 3360/tcp +kv-server 3360/udp +kv-agent 3361/tcp +kv-agent 3361/udp +dj-ilm 3362/tcp +dj-ilm 3362/udp +nati-vi-server 3363/tcp +nati-vi-server 3363/udp +creativeserver 3364/tcp +creativeserver 3364/udp +contentserver 3365/tcp +contentserver 3365/udp +creativepartnr 3366/tcp +creativepartnr 3366/udp +tip2 3372/tcp +tip2 3372/udp +lavenir-lm 3373/tcp +lavenir-lm 3373/udp +cluster-disc 3374/tcp +cluster-disc 3374/udp +vsnm-agent 3375/tcp +vsnm-agent 3375/udp +cdbroker 3376/tcp +cdbroker 3376/udp +cogsys-lm 3377/tcp +cogsys-lm 3377/udp +wsicopy 3378/tcp +wsicopy 3378/udp +socorfs 3379/tcp +socorfs 3379/udp +sns-channels 3380/tcp +sns-channels 3380/udp +geneous 3381/tcp +geneous 3381/udp +fujitsu-neat 3382/tcp +fujitsu-neat 3382/udp +esp-lm 3383/tcp +esp-lm 3383/udp +hp-clic 3384/tcp +hp-clic 3384/udp +qnxnetman 3385/tcp +qnxnetman 3385/udp +gprs-data 3386/tcp +gprs-sig 3386/udp +backroomnet 3387/tcp +backroomnet 3387/udp +cbserver 3388/tcp +cbserver 3388/udp +ms-wbt-server 3389/tcp +ms-wbt-server 3389/udp +dsc 3390/tcp +dsc 3390/udp +savant 3391/tcp +savant 3391/udp +efi-lm 3392/tcp +efi-lm 3392/udp +d2k-tapestry1 3393/tcp +d2k-tapestry1 3393/udp +d2k-tapestry2 3394/tcp +d2k-tapestry2 3394/udp +dyna-lm 3395/tcp +dyna-lm 3395/udp +printer-agent 3396/tcp +printer-agent 3396/udp +cloanto-lm 3397/tcp +cloanto-lm 3397/udp +mercantile 3398/tcp +mercantile 3398/udp +csms 3399/tcp +csms 3399/udp +csms2 3400/tcp +csms2 3400/udp +filecast 3401/tcp +filecast 3401/udp +fxaengine-net 3402/tcp +fxaengine-net 3402/udp +nokia-ann-ch1 3405/tcp +nokia-ann-ch1 3405/udp +nokia-ann-ch2 3406/tcp +nokia-ann-ch2 3406/udp +ldap-admin 3407/tcp +ldap-admin 3407/udp +BESApi 3408/tcp +BESApi 3408/udp +networklens 3409/tcp +networklens 3409/udp +networklenss 3410/tcp +networklenss 3410/udp +biolink-auth 3411/tcp +biolink-auth 3411/udp +xmlblaster 3412/tcp +xmlblaster 3412/udp +svnet 3413/tcp +svnet 3413/udp +wip-port 3414/tcp +wip-port 3414/udp +bcinameservice 3415/tcp +bcinameservice 3415/udp +commandport 3416/tcp +commandport 3416/udp +csvr 3417/tcp +csvr 3417/udp +rnmap 3418/tcp +rnmap 3418/udp +softaudit 3419/tcp +softaudit 3419/udp +ifcp-port 3420/tcp +ifcp-port 3420/udp +bmap 3421/tcp +bmap 3421/udp +rusb-sys-port 3422/tcp +rusb-sys-port 3422/udp +xtrm 3423/tcp +xtrm 3423/udp +xtrms 3424/tcp +xtrms 3424/udp +agps-port 3425/tcp +agps-port 3425/udp +arkivio 3426/tcp +arkivio 3426/udp +websphere-snmp 3427/tcp +websphere-snmp 3427/udp +twcss 3428/tcp +twcss 3428/udp +gcsp 3429/tcp +gcsp 3429/udp +ssdispatch 3430/tcp +ssdispatch 3430/udp +ndl-als 3431/tcp +ndl-als 3431/udp +osdcp 3432/tcp +osdcp 3432/udp +opnet-smp 3433/tcp +opnet-smp 3433/udp +opencm 3434/tcp +opencm 3434/udp +pacom 3435/tcp +pacom 3435/udp +gc-config 3436/tcp +gc-config 3436/udp +autocueds 3437/tcp +autocueds 3437/udp +spiral-admin 3438/tcp +spiral-admin 3438/udp +hri-port 3439/tcp +hri-port 3439/udp +ans-console 3440/tcp +ans-console 3440/udp +connect-client 3441/tcp +connect-client 3441/udp +connect-server 3442/tcp +connect-server 3442/udp +ov-nnm-websrv 3443/tcp +ov-nnm-websrv 3443/udp +denali-server 3444/tcp +denali-server 3444/udp +monp 3445/tcp +monp 3445/udp +3comfaxrpc 3446/tcp +3comfaxrpc 3446/udp +directnet 3447/tcp +directnet 3447/udp +dnc-port 3448/tcp +dnc-port 3448/udp +hotu-chat 3449/tcp +hotu-chat 3449/udp +castorproxy 3450/tcp +castorproxy 3450/udp +asam 3451/tcp +asam 3451/udp +sabp-signal 3452/tcp +sabp-signal 3452/udp +pscupd 3453/tcp +pscupd 3453/udp +mira 3454/tcp +mira 3454/udp +prsvp 3455/tcp +prsvp 3455/udp +vat 3456/tcp +vat 3456/udp +vat-control 3457/tcp +vat-control 3457/udp +d3winosfi 3458/tcp +d3winosfi 3458/udp +integral 3459/tcp +integral 3459/udp +edm-manager 3460/tcp +edm-manager 3460/udp +edm-stager 3461/tcp +edm-stager 3461/udp +edm-std-notify 3462/tcp +edm-std-notify 3462/udp +edm-adm-notify 3463/tcp +edm-adm-notify 3463/udp +edm-mgr-sync 3464/tcp +edm-mgr-sync 3464/udp +edm-mgr-cntrl 3465/tcp +edm-mgr-cntrl 3465/udp +workflow 3466/tcp +workflow 3466/udp +rcst 3467/tcp +rcst 3467/udp +ttcmremotectrl 3468/tcp +ttcmremotectrl 3468/udp +pluribus 3469/tcp +pluribus 3469/udp +jt400 3470/tcp +jt400 3470/udp +jt400-ssl 3471/tcp +jt400-ssl 3471/udp +jaugsremotec-1 3472/tcp +jaugsremotec-1 3472/udp +jaugsremotec-2 3473/tcp +jaugsremotec-2 3473/udp +ttntspauto 3474/tcp +ttntspauto 3474/udp +genisar-port 3475/tcp +genisar-port 3475/udp +nppmp 3476/tcp +nppmp 3476/udp +ecomm 3477/tcp +ecomm 3477/udp +stun 3478/tcp +stun 3478/udp +turn 3478/tcp +turn 3478/udp +stun-behavior 3478/tcp +stun-behavior 3478/udp +twrpc 3479/tcp +twrpc 3479/udp +plethora 3480/tcp +plethora 3480/udp +cleanerliverc 3481/tcp +cleanerliverc 3481/udp +vulture 3482/tcp +vulture 3482/udp +slim-devices 3483/tcp +slim-devices 3483/udp +gbs-stp 3484/tcp +gbs-stp 3484/udp +celatalk 3485/tcp +celatalk 3485/udp +ifsf-hb-port 3486/tcp +ifsf-hb-port 3486/udp +ltctcp 3487/tcp +ltcudp 3487/udp +fs-rh-srv 3488/tcp +fs-rh-srv 3488/udp +dtp-dia 3489/tcp +dtp-dia 3489/udp +colubris 3490/tcp +colubris 3490/udp +swr-port 3491/tcp +swr-port 3491/udp +tvdumtray-port 3492/tcp +tvdumtray-port 3492/udp +nut 3493/tcp +nut 3493/udp +ibm3494 3494/tcp +ibm3494 3494/udp +seclayer-tcp 3495/tcp +seclayer-tcp 3495/udp +seclayer-tls 3496/tcp +seclayer-tls 3496/udp +ipether232port 3497/tcp +ipether232port 3497/udp +dashpas-port 3498/tcp +dashpas-port 3498/udp +sccip-media 3499/tcp +sccip-media 3499/udp +rtmp-port 3500/tcp +rtmp-port 3500/udp +isoft-p2p 3501/tcp +isoft-p2p 3501/udp +avinstalldisc 3502/tcp +avinstalldisc 3502/udp +lsp-ping 3503/tcp +lsp-ping 3503/udp +ironstorm 3504/tcp +ironstorm 3504/udp +ccmcomm 3505/tcp +ccmcomm 3505/udp +apc-3506 3506/tcp +apc-3506 3506/udp +nesh-broker 3507/tcp +nesh-broker 3507/udp +interactionweb 3508/tcp +interactionweb 3508/udp +vt-ssl 3509/tcp +vt-ssl 3509/udp +xss-port 3510/tcp +xss-port 3510/udp +webmail-2 3511/tcp +webmail-2 3511/udp +aztec 3512/tcp +aztec 3512/udp +arcpd 3513/tcp +arcpd 3513/udp +must-p2p 3514/tcp +must-p2p 3514/udp +must-backplane 3515/tcp +must-backplane 3515/udp +smartcard-port 3516/tcp +smartcard-port 3516/udp +802-11-iapp 3517/tcp +802-11-iapp 3517/udp +artifact-msg 3518/tcp +artifact-msg 3518/udp +nvmsgd 3519/tcp +galileo 3519/udp +galileolog 3520/tcp +galileolog 3520/udp +mc3ss 3521/tcp +mc3ss 3521/udp +nssocketport 3522/tcp +nssocketport 3522/udp +odeumservlink 3523/tcp +odeumservlink 3523/udp +ecmport 3524/tcp +ecmport 3524/udp +eisport 3525/tcp +eisport 3525/udp +starquiz-port 3526/tcp +starquiz-port 3526/udp +beserver-msg-q 3527/tcp +beserver-msg-q 3527/udp +jboss-iiop 3528/tcp +jboss-iiop 3528/udp +jboss-iiop-ssl 3529/tcp +jboss-iiop-ssl 3529/udp +gf 3530/tcp +gf 3530/udp +joltid 3531/tcp +joltid 3531/udp +raven-rmp 3532/tcp +raven-rmp 3532/udp +raven-rdp 3533/tcp +raven-rdp 3533/udp +urld-port 3534/tcp +urld-port 3534/udp +ms-la 3535/tcp +ms-la 3535/udp +snac 3536/tcp +snac 3536/udp +ni-visa-remote 3537/tcp +ni-visa-remote 3537/udp +ibm-diradm 3538/tcp +ibm-diradm 3538/udp +ibm-diradm-ssl 3539/tcp +ibm-diradm-ssl 3539/udp +pnrp-port 3540/tcp +pnrp-port 3540/udp +voispeed-port 3541/tcp +voispeed-port 3541/udp +hacl-monitor 3542/tcp +hacl-monitor 3542/udp +qftest-lookup 3543/tcp +qftest-lookup 3543/udp +teredo 3544/tcp +teredo 3544/udp +camac 3545/tcp +camac 3545/udp +symantec-sim 3547/tcp +symantec-sim 3547/udp +interworld 3548/tcp +interworld 3548/udp +tellumat-nms 3549/tcp +tellumat-nms 3549/udp +ssmpp 3550/tcp +ssmpp 3550/udp +apcupsd 3551/tcp +apcupsd 3551/udp +taserver 3552/tcp +taserver 3552/udp +rbr-discovery 3553/tcp +rbr-discovery 3553/udp +questnotify 3554/tcp +questnotify 3554/udp +razor 3555/tcp +razor 3555/udp +sky-transport 3556/tcp +sky-transport 3556/udp +personalos-001 3557/tcp +personalos-001 3557/udp +mcp-port 3558/tcp +mcp-port 3558/udp +cctv-port 3559/tcp +cctv-port 3559/udp +iniserve-port 3560/tcp +iniserve-port 3560/udp +bmc-onekey 3561/tcp +bmc-onekey 3561/udp +sdbproxy 3562/tcp +sdbproxy 3562/udp +watcomdebug 3563/tcp +watcomdebug 3563/udp +esimport 3564/tcp +esimport 3564/udp +m2pa 3565/tcp +m2pa 3565/sctp +quest-data-hub 3566/tcp +dof-eps 3567/tcp +dof-eps 3567/udp +dof-tunnel-sec 3568/tcp +dof-tunnel-sec 3568/udp +mbg-ctrl 3569/tcp +mbg-ctrl 3569/udp +mccwebsvr-port 3570/tcp +mccwebsvr-port 3570/udp +megardsvr-port 3571/tcp +megardsvr-port 3571/udp +megaregsvrport 3572/tcp +megaregsvrport 3572/udp +tag-ups-1 3573/tcp +tag-ups-1 3573/udp +dmaf-server 3574/tcp +dmaf-caster 3574/udp +ccm-port 3575/tcp +ccm-port 3575/udp +cmc-port 3576/tcp +cmc-port 3576/udp +config-port 3577/tcp +config-port 3577/udp +data-port 3578/tcp +data-port 3578/udp +ttat3lb 3579/tcp +ttat3lb 3579/udp +nati-svrloc 3580/tcp +nati-svrloc 3580/udp +kfxaclicensing 3581/tcp +kfxaclicensing 3581/udp +press 3582/tcp +press 3582/udp +canex-watch 3583/tcp +canex-watch 3583/udp +u-dbap 3584/tcp +u-dbap 3584/udp +emprise-lls 3585/tcp +emprise-lls 3585/udp +emprise-lsc 3586/tcp +emprise-lsc 3586/udp +p2pgroup 3587/tcp +p2pgroup 3587/udp +sentinel 3588/tcp +sentinel 3588/udp +isomair 3589/tcp +isomair 3589/udp +wv-csp-sms 3590/tcp +wv-csp-sms 3590/udp +gtrack-server 3591/tcp +gtrack-server 3591/udp +gtrack-ne 3592/tcp +gtrack-ne 3592/udp +bpmd 3593/tcp +bpmd 3593/udp +mediaspace 3594/tcp +mediaspace 3594/udp +shareapp 3595/tcp +shareapp 3595/udp +iw-mmogame 3596/tcp +iw-mmogame 3596/udp +a14 3597/tcp +a14 3597/udp +a15 3598/tcp +a15 3598/udp +quasar-server 3599/tcp +quasar-server 3599/udp +trap-daemon 3600/tcp +trap-daemon 3600/udp +visinet-gui 3601/tcp +visinet-gui 3601/udp +infiniswitchcl 3602/tcp +infiniswitchcl 3602/udp +int-rcv-cntrl 3603/tcp +int-rcv-cntrl 3603/udp +bmc-jmx-port 3604/tcp +bmc-jmx-port 3604/udp +comcam-io 3605/tcp +comcam-io 3605/udp +splitlock 3606/tcp +splitlock 3606/udp +precise-i3 3607/tcp +precise-i3 3607/udp +trendchip-dcp 3608/tcp +trendchip-dcp 3608/udp +cpdi-pidas-cm 3609/tcp +cpdi-pidas-cm 3609/udp +echonet 3610/tcp +echonet 3610/udp +six-degrees 3611/tcp +six-degrees 3611/udp +dataprotector 3612/tcp +dataprotector 3612/udp +alaris-disc 3613/tcp +alaris-disc 3613/udp +sigma-port 3614/tcp +sigma-port 3614/udp +start-network 3615/tcp +start-network 3615/udp +cd3o-protocol 3616/tcp +cd3o-protocol 3616/udp +sharp-server 3617/tcp +sharp-server 3617/udp +aairnet-1 3618/tcp +aairnet-1 3618/udp +aairnet-2 3619/tcp +aairnet-2 3619/udp +ep-pcp 3620/tcp +ep-pcp 3620/udp +ep-nsp 3621/tcp +ep-nsp 3621/udp +ff-lr-port 3622/tcp +ff-lr-port 3622/udp +haipe-discover 3623/tcp +haipe-discover 3623/udp +dist-upgrade 3624/tcp +dist-upgrade 3624/udp +volley 3625/tcp +volley 3625/udp +bvcdaemon-port 3626/tcp +bvcdaemon-port 3626/udp +jamserverport 3627/tcp +jamserverport 3627/udp +ept-machine 3628/tcp +ept-machine 3628/udp +escvpnet 3629/tcp +escvpnet 3629/udp +cs-remote-db 3630/tcp +cs-remote-db 3630/udp +cs-services 3631/tcp +cs-services 3631/udp +distcc 3632/tcp +distcc 3632/udp +wacp 3633/tcp +wacp 3633/udp +hlibmgr 3634/tcp +hlibmgr 3634/udp +sdo 3635/tcp +sdo 3635/udp +servistaitsm 3636/tcp +servistaitsm 3636/udp +scservp 3637/tcp +scservp 3637/udp +ehp-backup 3638/tcp +ehp-backup 3638/udp +xap-ha 3639/tcp +xap-ha 3639/udp +netplay-port1 3640/tcp +netplay-port1 3640/udp +netplay-port2 3641/tcp +netplay-port2 3641/udp +juxml-port 3642/tcp +juxml-port 3642/udp +audiojuggler 3643/tcp +audiojuggler 3643/udp +ssowatch 3644/tcp +ssowatch 3644/udp +cyc 3645/tcp +cyc 3645/udp +xss-srv-port 3646/tcp +xss-srv-port 3646/udp +splitlock-gw 3647/tcp +splitlock-gw 3647/udp +fjcp 3648/tcp +fjcp 3648/udp +nmmp 3649/tcp +nmmp 3649/udp +prismiq-plugin 3650/tcp +prismiq-plugin 3650/udp +xrpc-registry 3651/tcp +xrpc-registry 3651/udp +vxcrnbuport 3652/tcp +vxcrnbuport 3652/udp +tsp 3653/tcp +tsp 3653/udp +vaprtm 3654/tcp +vaprtm 3654/udp +abatemgr 3655/tcp +abatemgr 3655/udp +abatjss 3656/tcp +abatjss 3656/udp +immedianet-bcn 3657/tcp +immedianet-bcn 3657/udp +ps-ams 3658/tcp +ps-ams 3658/udp +apple-sasl 3659/tcp +apple-sasl 3659/udp +can-nds-ssl 3660/tcp +can-nds-ssl 3660/udp +can-ferret-ssl 3661/tcp +can-ferret-ssl 3661/udp +pserver 3662/tcp +pserver 3662/udp +dtp 3663/tcp +dtp 3663/udp +ups-engine 3664/tcp +ups-engine 3664/udp +ent-engine 3665/tcp +ent-engine 3665/udp +eserver-pap 3666/tcp +eserver-pap 3666/udp +infoexch 3667/tcp +infoexch 3667/udp +dell-rm-port 3668/tcp +dell-rm-port 3668/udp +casanswmgmt 3669/tcp +casanswmgmt 3669/udp +smile 3670/tcp +smile 3670/udp +efcp 3671/tcp +efcp 3671/udp +lispworks-orb 3672/tcp +lispworks-orb 3672/udp +mediavault-gui 3673/tcp +mediavault-gui 3673/udp +wininstall-ipc 3674/tcp +wininstall-ipc 3674/udp +calltrax 3675/tcp +calltrax 3675/udp +va-pacbase 3676/tcp +va-pacbase 3676/udp +roverlog 3677/tcp +roverlog 3677/udp +ipr-dglt 3678/tcp +ipr-dglt 3678/udp +npds-tracker 3680/tcp +npds-tracker 3680/udp +bts-x73 3681/tcp +bts-x73 3681/udp +cas-mapi 3682/tcp +cas-mapi 3682/udp +bmc-ea 3683/tcp +bmc-ea 3683/udp +faxstfx-port 3684/tcp +faxstfx-port 3684/udp +dsx-agent 3685/tcp +dsx-agent 3685/udp +tnmpv2 3686/tcp +tnmpv2 3686/udp +simple-push 3687/tcp +simple-push 3687/udp +simple-push-s 3688/tcp +simple-push-s 3688/udp +daap 3689/tcp +daap 3689/udp +svn 3690/tcp +svn 3690/udp +magaya-network 3691/tcp +magaya-network 3691/udp +intelsync 3692/tcp +intelsync 3692/udp +easl 3693/tcp +bmc-data-coll 3695/tcp +bmc-data-coll 3695/udp +telnetcpcd 3696/tcp +telnetcpcd 3696/udp +nw-license 3697/tcp +nw-license 3697/udp +sagectlpanel 3698/tcp +sagectlpanel 3698/udp +kpn-icw 3699/tcp +kpn-icw 3699/udp +lrs-paging 3700/tcp +lrs-paging 3700/udp +netcelera 3701/tcp +netcelera 3701/udp +ws-discovery 3702/tcp +ws-discovery 3702/udp +adobeserver-3 3703/tcp +adobeserver-3 3703/udp +adobeserver-4 3704/tcp +adobeserver-4 3704/udp +adobeserver-5 3705/tcp +adobeserver-5 3705/udp +rt-event 3706/tcp +rt-event 3706/udp +rt-event-s 3707/tcp +rt-event-s 3707/udp +sun-as-iiops 3708/tcp +sun-as-iiops 3708/udp +ca-idms 3709/tcp +ca-idms 3709/udp +portgate-auth 3710/tcp +portgate-auth 3710/udp +edb-server2 3711/tcp +edb-server2 3711/udp +sentinel-ent 3712/tcp +sentinel-ent 3712/udp +tftps 3713/tcp +tftps 3713/udp +delos-dms 3714/tcp +delos-dms 3714/udp +anoto-rendezv 3715/tcp +anoto-rendezv 3715/udp +wv-csp-sms-cir 3716/tcp +wv-csp-sms-cir 3716/udp +wv-csp-udp-cir 3717/tcp +wv-csp-udp-cir 3717/udp +opus-services 3718/tcp +opus-services 3718/udp +itelserverport 3719/tcp +itelserverport 3719/udp +ufastro-instr 3720/tcp +ufastro-instr 3720/udp +xsync 3721/tcp +xsync 3721/udp +xserveraid 3722/tcp +xserveraid 3722/udp +sychrond 3723/tcp +sychrond 3723/udp +blizwow 3724/tcp +blizwow 3724/udp +na-er-tip 3725/tcp +na-er-tip 3725/udp +array-manager 3726/tcp +array-manager 3726/udp +e-mdu 3727/tcp +e-mdu 3727/udp +e-woa 3728/tcp +e-woa 3728/udp +fksp-audit 3729/tcp +fksp-audit 3729/udp +client-ctrl 3730/tcp +client-ctrl 3730/udp +smap 3731/tcp +smap 3731/udp +m-wnn 3732/tcp +m-wnn 3732/udp +multip-msg 3733/tcp +multip-msg 3733/udp +synel-data 3734/tcp +synel-data 3734/udp +pwdis 3735/tcp +pwdis 3735/udp +rs-rmi 3736/tcp +rs-rmi 3736/udp +xpanel 3737/tcp +versatalk 3738/tcp +versatalk 3738/udp +launchbird-lm 3739/tcp +launchbird-lm 3739/udp +heartbeat 3740/tcp +heartbeat 3740/udp +wysdma 3741/tcp +wysdma 3741/udp +cst-port 3742/tcp +cst-port 3742/udp +ipcs-command 3743/tcp +ipcs-command 3743/udp +sasg 3744/tcp +sasg 3744/udp +gw-call-port 3745/tcp +gw-call-port 3745/udp +linktest 3746/tcp +linktest 3746/udp +linktest-s 3747/tcp +linktest-s 3747/udp +webdata 3748/tcp +webdata 3748/udp +cimtrak 3749/tcp +cimtrak 3749/udp +cbos-ip-port 3750/tcp +cbos-ip-port 3750/udp +gprs-cube 3751/tcp +gprs-cube 3751/udp +vipremoteagent 3752/tcp +vipremoteagent 3752/udp +nattyserver 3753/tcp +nattyserver 3753/udp +timestenbroker 3754/tcp +timestenbroker 3754/udp +sas-remote-hlp 3755/tcp +sas-remote-hlp 3755/udp +canon-capt 3756/tcp +canon-capt 3756/udp +grf-port 3757/tcp +grf-port 3757/udp +apw-registry 3758/tcp +apw-registry 3758/udp +exapt-lmgr 3759/tcp +exapt-lmgr 3759/udp +adtempusclient 3760/tcp +adtempusclient 3760/udp +gsakmp 3761/tcp +gsakmp 3761/udp +gbs-smp 3762/tcp +gbs-smp 3762/udp +xo-wave 3763/tcp +xo-wave 3763/udp +mni-prot-rout 3764/tcp +mni-prot-rout 3764/udp +rtraceroute 3765/tcp +rtraceroute 3765/udp +sitewatch-s 3766/tcp +listmgr-port 3767/tcp +listmgr-port 3767/udp +rblcheckd 3768/tcp +rblcheckd 3768/udp +haipe-otnk 3769/tcp +haipe-otnk 3769/udp +cindycollab 3770/tcp +cindycollab 3770/udp +paging-port 3771/tcp +paging-port 3771/udp +ctp 3772/tcp +ctp 3772/udp +ctdhercules 3773/tcp +ctdhercules 3773/udp +zicom 3774/tcp +zicom 3774/udp +ispmmgr 3775/tcp +ispmmgr 3775/udp +dvcprov-port 3776/tcp +dvcprov-port 3776/udp +jibe-eb 3777/tcp +jibe-eb 3777/udp +c-h-it-port 3778/tcp +c-h-it-port 3778/udp +cognima 3779/tcp +cognima 3779/udp +nnp 3780/tcp +nnp 3780/udp +abcvoice-port 3781/tcp +abcvoice-port 3781/udp +iso-tp0s 3782/tcp +iso-tp0s 3782/udp +bim-pem 3783/tcp +bim-pem 3783/udp +bfd-control 3784/tcp +bfd-control 3784/udp +bfd-echo 3785/tcp +bfd-echo 3785/udp +upstriggervsw 3786/tcp +upstriggervsw 3786/udp +fintrx 3787/tcp +fintrx 3787/udp +isrp-port 3788/tcp +isrp-port 3788/udp +remotedeploy 3789/tcp +remotedeploy 3789/udp +quickbooksrds 3790/tcp +quickbooksrds 3790/udp +tvnetworkvideo 3791/tcp +tvnetworkvideo 3791/udp +sitewatch 3792/tcp +sitewatch 3792/udp +dcsoftware 3793/tcp +dcsoftware 3793/udp +jaus 3794/tcp +jaus 3794/udp +myblast 3795/tcp +myblast 3795/udp +spw-dialer 3796/tcp +spw-dialer 3796/udp +idps 3797/tcp +idps 3797/udp +minilock 3798/tcp +minilock 3798/udp +radius-dynauth 3799/tcp +radius-dynauth 3799/udp +pwgpsi 3800/tcp +pwgpsi 3800/udp +ibm-mgr 3801/tcp +ibm-mgr 3801/udp +vhd 3802/tcp +vhd 3802/udp +soniqsync 3803/tcp +soniqsync 3803/udp +iqnet-port 3804/tcp +iqnet-port 3804/udp +tcpdataserver 3805/tcp +tcpdataserver 3805/udp +wsmlb 3806/tcp +wsmlb 3806/udp +spugna 3807/tcp +spugna 3807/udp +sun-as-iiops-ca 3808/tcp +sun-as-iiops-ca 3808/udp +apocd 3809/tcp +apocd 3809/udp +wlanauth 3810/tcp +wlanauth 3810/udp +amp 3811/tcp +amp 3811/udp +neto-wol-server 3812/tcp +neto-wol-server 3812/udp +rap-ip 3813/tcp +rap-ip 3813/udp +neto-dcs 3814/tcp +neto-dcs 3814/udp +lansurveyorxml 3815/tcp +lansurveyorxml 3815/udp +sunlps-http 3816/tcp +sunlps-http 3816/udp +tapeware 3817/tcp +tapeware 3817/udp +crinis-hb 3818/tcp +crinis-hb 3818/udp +epl-slp 3819/tcp +epl-slp 3819/udp +scp 3820/tcp +scp 3820/udp +pmcp 3821/tcp +pmcp 3821/udp +acp-discovery 3822/tcp +acp-discovery 3822/udp +acp-conduit 3823/tcp +acp-conduit 3823/udp +acp-policy 3824/tcp +acp-policy 3824/udp +ffserver 3825/tcp +ffserver 3825/udp +warmux 3826/tcp +warmux 3826/udp +netmpi 3827/tcp +netmpi 3827/udp +neteh 3828/tcp +neteh 3828/udp +neteh-ext 3829/tcp +neteh-ext 3829/udp +cernsysmgmtagt 3830/tcp +cernsysmgmtagt 3830/udp +dvapps 3831/tcp +dvapps 3831/udp +xxnetserver 3832/tcp +xxnetserver 3832/udp +aipn-auth 3833/tcp +aipn-auth 3833/udp +spectardata 3834/tcp +spectardata 3834/udp +spectardb 3835/tcp +spectardb 3835/udp +markem-dcp 3836/tcp +markem-dcp 3836/udp +mkm-discovery 3837/tcp +mkm-discovery 3837/udp +sos 3838/tcp +sos 3838/udp +amx-rms 3839/tcp +amx-rms 3839/udp +flirtmitmir 3840/tcp +flirtmitmir 3840/udp +shiprush-db-svr 3841/tcp +nhci 3842/tcp +nhci 3842/udp +quest-agent 3843/tcp +quest-agent 3843/udp +rnm 3844/tcp +rnm 3844/udp +v-one-spp 3845/tcp +v-one-spp 3845/udp +an-pcp 3846/tcp +an-pcp 3846/udp +msfw-control 3847/tcp +msfw-control 3847/udp +item 3848/tcp +item 3848/udp +spw-dnspreload 3849/tcp +spw-dnspreload 3849/udp +qtms-bootstrap 3850/tcp +qtms-bootstrap 3850/udp +spectraport 3851/tcp +spectraport 3851/udp +sse-app-config 3852/tcp +sse-app-config 3852/udp +sscan 3853/tcp +sscan 3853/udp +stryker-com 3854/tcp +stryker-com 3854/udp +opentrac 3855/tcp +opentrac 3855/udp +informer 3856/tcp +informer 3856/udp +trap-port 3857/tcp +trap-port 3857/udp +trap-port-mom 3858/tcp +trap-port-mom 3858/udp +nav-port 3859/tcp +nav-port 3859/udp +sasp 3860/tcp +sasp 3860/udp +winshadow-hd 3861/tcp +winshadow-hd 3861/udp +giga-pocket 3862/tcp +giga-pocket 3862/udp +asap-tcp 3863/tcp +asap-udp 3863/udp +asap-sctp 3863/sctp +asap-tcp-tls 3864/tcp +asap-sctp-tls 3864/sctp +xpl 3865/tcp +xpl 3865/udp +dzdaemon 3866/tcp +dzdaemon 3866/udp +dzoglserver 3867/tcp +dzoglserver 3867/udp +diameter 3868/tcp +diameter 3868/sctp +ovsam-mgmt 3869/tcp +ovsam-mgmt 3869/udp +ovsam-d-agent 3870/tcp +ovsam-d-agent 3870/udp +avocent-adsap 3871/tcp +avocent-adsap 3871/udp +oem-agent 3872/tcp +oem-agent 3872/udp +fagordnc 3873/tcp +fagordnc 3873/udp +sixxsconfig 3874/tcp +sixxsconfig 3874/udp +pnbscada 3875/tcp +pnbscada 3875/udp +dl-agent 3876/tcp +dl-agent 3876/udp +xmpcr-interface 3877/tcp +xmpcr-interface 3877/udp +fotogcad 3878/tcp +fotogcad 3878/udp +appss-lm 3879/tcp +appss-lm 3879/udp +igrs 3880/tcp +igrs 3880/udp +idac 3881/tcp +idac 3881/udp +msdts1 3882/tcp +msdts1 3882/udp +vrpn 3883/tcp +vrpn 3883/udp +softrack-meter 3884/tcp +softrack-meter 3884/udp +topflow-ssl 3885/tcp +topflow-ssl 3885/udp +nei-management 3886/tcp +nei-management 3886/udp +ciphire-data 3887/tcp +ciphire-data 3887/udp +ciphire-serv 3888/tcp +ciphire-serv 3888/udp +dandv-tester 3889/tcp +dandv-tester 3889/udp +ndsconnect 3890/tcp +ndsconnect 3890/udp +rtc-pm-port 3891/tcp +rtc-pm-port 3891/udp +pcc-image-port 3892/tcp +pcc-image-port 3892/udp +cgi-starapi 3893/tcp +cgi-starapi 3893/udp +syam-agent 3894/tcp +syam-agent 3894/udp +syam-smc 3895/tcp +syam-smc 3895/udp +sdo-tls 3896/tcp +sdo-tls 3896/udp +sdo-ssh 3897/tcp +sdo-ssh 3897/udp +senip 3898/tcp +senip 3898/udp +itv-control 3899/tcp +itv-control 3899/udp +udt-os 3900/tcp +udt-os 3900/udp +nimsh 3901/tcp +nimsh 3901/udp +nimaux 3902/tcp +nimaux 3902/udp +charsetmgr 3903/tcp +charsetmgr 3903/udp +omnilink-port 3904/tcp +omnilink-port 3904/udp +mupdate 3905/tcp +mupdate 3905/udp +topovista-data 3906/tcp +topovista-data 3906/udp +imoguia-port 3907/tcp +imoguia-port 3907/udp +hppronetman 3908/tcp +hppronetman 3908/udp +surfcontrolcpa 3909/tcp +surfcontrolcpa 3909/udp +prnrequest 3910/tcp +prnrequest 3910/udp +prnstatus 3911/tcp +prnstatus 3911/udp +gbmt-stars 3912/tcp +gbmt-stars 3912/udp +listcrt-port 3913/tcp +listcrt-port 3913/udp +listcrt-port-2 3914/tcp +listcrt-port-2 3914/udp +agcat 3915/tcp +agcat 3915/udp +wysdmc 3916/tcp +wysdmc 3916/udp +aftmux 3917/tcp +aftmux 3917/udp +pktcablemmcops 3918/tcp +pktcablemmcops 3918/udp +hyperip 3919/tcp +hyperip 3919/udp +exasoftport1 3920/tcp +exasoftport1 3920/udp +herodotus-net 3921/tcp +herodotus-net 3921/udp +sor-update 3922/tcp +sor-update 3922/udp +symb-sb-port 3923/tcp +symb-sb-port 3923/udp +mpl-gprs-port 3924/tcp +mpl-gprs-port 3924/udp +zmp 3925/tcp +zmp 3925/udp +winport 3926/tcp +winport 3926/udp +natdataservice 3927/tcp +natdataservice 3927/udp +netboot-pxe 3928/tcp +netboot-pxe 3928/udp +smauth-port 3929/tcp +smauth-port 3929/udp +syam-webserver 3930/tcp +syam-webserver 3930/udp +msr-plugin-port 3931/tcp +msr-plugin-port 3931/udp +dyn-site 3932/tcp +dyn-site 3932/udp +plbserve-port 3933/tcp +plbserve-port 3933/udp +sunfm-port 3934/tcp +sunfm-port 3934/udp +sdp-portmapper 3935/tcp +sdp-portmapper 3935/udp +mailprox 3936/tcp +mailprox 3936/udp +dvbservdsc 3937/tcp +dvbservdsc 3937/udp +dbcontrol-agent 3938/tcp +dbcontrol-agent 3938/udp +aamp 3939/tcp +aamp 3939/udp +xecp-node 3940/tcp +xecp-node 3940/udp +homeportal-web 3941/tcp +homeportal-web 3941/udp +srdp 3942/tcp +srdp 3942/udp +tig 3943/tcp +tig 3943/udp +sops 3944/tcp +sops 3944/udp +emcads 3945/tcp +emcads 3945/udp +backupedge 3946/tcp +backupedge 3946/udp +ccp 3947/tcp +ccp 3947/udp +apdap 3948/tcp +apdap 3948/udp +drip 3949/tcp +drip 3949/udp +namemunge 3950/tcp +namemunge 3950/udp +pwgippfax 3951/tcp +pwgippfax 3951/udp +i3-sessionmgr 3952/tcp +i3-sessionmgr 3952/udp +xmlink-connect 3953/tcp +xmlink-connect 3953/udp +adrep 3954/tcp +adrep 3954/udp +p2pcommunity 3955/tcp +p2pcommunity 3955/udp +gvcp 3956/tcp +gvcp 3956/udp +mqe-broker 3957/tcp +mqe-broker 3957/udp +mqe-agent 3958/tcp +mqe-agent 3958/udp +treehopper 3959/tcp +treehopper 3959/udp +bess 3960/tcp +bess 3960/udp +proaxess 3961/tcp +proaxess 3961/udp +sbi-agent 3962/tcp +sbi-agent 3962/udp +thrp 3963/tcp +thrp 3963/udp +sasggprs 3964/tcp +sasggprs 3964/udp +ati-ip-to-ncpe 3965/tcp +ati-ip-to-ncpe 3965/udp +bflckmgr 3966/tcp +bflckmgr 3966/udp +ppsms 3967/tcp +ppsms 3967/udp +ianywhere-dbns 3968/tcp +ianywhere-dbns 3968/udp +landmarks 3969/tcp +landmarks 3969/udp +lanrevagent 3970/tcp +lanrevagent 3970/udp +lanrevserver 3971/tcp +lanrevserver 3971/udp +iconp 3972/tcp +iconp 3972/udp +progistics 3973/tcp +progistics 3973/udp +citysearch 3974/tcp +citysearch 3974/udp +airshot 3975/tcp +airshot 3975/udp +opswagent 3976/tcp +opswagent 3976/udp +opswmanager 3977/tcp +opswmanager 3977/udp +secure-cfg-svr 3978/tcp +secure-cfg-svr 3978/udp +smwan 3979/tcp +smwan 3979/udp +starfish 3981/tcp +starfish 3981/udp +eis 3982/tcp +eis 3982/udp +eisp 3983/tcp +eisp 3983/udp +mapper-nodemgr 3984/tcp +mapper-nodemgr 3984/udp +mapper-mapethd 3985/tcp +mapper-mapethd 3985/udp +mapper-ws-ethd 3986/tcp +mapper-ws-ethd 3986/udp +centerline 3987/tcp +centerline 3987/udp +dcs-config 3988/tcp +dcs-config 3988/udp +bv-queryengine 3989/tcp +bv-queryengine 3989/udp +bv-is 3990/tcp +bv-is 3990/udp +bv-smcsrv 3991/tcp +bv-smcsrv 3991/udp +bv-ds 3992/tcp +bv-ds 3992/udp +bv-agent 3993/tcp +bv-agent 3993/udp +iss-mgmt-ssl 3995/tcp +iss-mgmt-ssl 3995/udp +abcsoftware 3996/tcp +abcsoftware 3996/udp +agentsease-db 3997/tcp +agentsease-db 3997/udp +dnx 3998/tcp +dnx 3998/udp +nvcnet 3999/tcp +nvcnet 3999/udp +terabase 4000/tcp +terabase 4000/udp +newoak 4001/tcp +newoak 4001/udp +pxc-spvr-ft 4002/tcp +pxc-spvr-ft 4002/udp +pxc-splr-ft 4003/tcp +pxc-splr-ft 4003/udp +pxc-roid 4004/tcp +pxc-roid 4004/udp +pxc-pin 4005/tcp +pxc-pin 4005/udp +pxc-spvr 4006/tcp +pxc-spvr 4006/udp +pxc-splr 4007/tcp +pxc-splr 4007/udp +netcheque 4008/tcp +netcheque 4008/udp +chimera-hwm 4009/tcp +chimera-hwm 4009/udp +samsung-unidex 4010/tcp +samsung-unidex 4010/udp +altserviceboot 4011/tcp +altserviceboot 4011/udp +pda-gate 4012/tcp +pda-gate 4012/udp +acl-manager 4013/tcp +acl-manager 4013/udp +taiclock 4014/tcp +taiclock 4014/udp +talarian-mcast1 4015/tcp +talarian-mcast1 4015/udp +talarian-mcast2 4016/tcp +talarian-mcast2 4016/udp +talarian-mcast3 4017/tcp +talarian-mcast3 4017/udp +talarian-mcast4 4018/tcp +talarian-mcast4 4018/udp +talarian-mcast5 4019/tcp +talarian-mcast5 4019/udp +trap 4020/tcp +trap 4020/udp +nexus-portal 4021/tcp +nexus-portal 4021/udp +dnox 4022/tcp +dnox 4022/udp +esnm-zoning 4023/tcp +esnm-zoning 4023/udp +tnp1-port 4024/tcp +tnp1-port 4024/udp +partimage 4025/tcp +partimage 4025/udp +as-debug 4026/tcp +as-debug 4026/udp +bxp 4027/tcp +bxp 4027/udp +dtserver-port 4028/tcp +dtserver-port 4028/udp +ip-qsig 4029/tcp +ip-qsig 4029/udp +jdmn-port 4030/tcp +jdmn-port 4030/udp +suucp 4031/tcp +suucp 4031/udp +vrts-auth-port 4032/tcp +vrts-auth-port 4032/udp +sanavigator 4033/tcp +sanavigator 4033/udp +ubxd 4034/tcp +ubxd 4034/udp +wap-push-http 4035/tcp +wap-push-http 4035/udp +wap-push-https 4036/tcp +wap-push-https 4036/udp +ravehd 4037/tcp +ravehd 4037/udp +fazzt-ptp 4038/tcp +fazzt-ptp 4038/udp +fazzt-admin 4039/tcp +fazzt-admin 4039/udp +yo-main 4040/tcp +yo-main 4040/udp +houston 4041/tcp +houston 4041/udp +ldxp 4042/tcp +ldxp 4042/udp +nirp 4043/tcp +nirp 4043/udp +ltp 4044/tcp +ltp 4044/udp +npp 4045/tcp +npp 4045/udp +acp-proto 4046/tcp +acp-proto 4046/udp +ctp-state 4047/tcp +ctp-state 4047/udp +wafs 4049/tcp +wafs 4049/udp +cisco-wafs 4050/tcp +cisco-wafs 4050/udp +cppdp 4051/tcp +cppdp 4051/udp +interact 4052/tcp +interact 4052/udp +ccu-comm-1 4053/tcp +ccu-comm-1 4053/udp +ccu-comm-2 4054/tcp +ccu-comm-2 4054/udp +ccu-comm-3 4055/tcp +ccu-comm-3 4055/udp +lms 4056/tcp +lms 4056/udp +wfm 4057/tcp +wfm 4057/udp +kingfisher 4058/tcp +kingfisher 4058/udp +dlms-cosem 4059/tcp +dlms-cosem 4059/udp +dsmeter-iatc 4060/tcp +dsmeter-iatc 4060/udp +ice-location 4061/tcp +ice-location 4061/udp +ice-slocation 4062/tcp +ice-slocation 4062/udp +ice-router 4063/tcp +ice-router 4063/udp +ice-srouter 4064/tcp +ice-srouter 4064/udp +avanti-cdp 4065/tcp +avanti-cdp 4065/udp +pmas 4066/tcp +pmas 4066/udp +idp 4067/tcp +idp 4067/udp +ipfltbcst 4068/tcp +ipfltbcst 4068/udp +minger 4069/tcp +minger 4069/udp +tripe 4070/tcp +tripe 4070/udp +aibkup 4071/tcp +aibkup 4071/udp +zieto-sock 4072/tcp +zieto-sock 4072/udp +iRAPP 4073/tcp +iRAPP 4073/udp +cequint-cityid 4074/tcp +cequint-cityid 4074/udp +perimlan 4075/tcp +perimlan 4075/udp +seraph 4076/tcp +seraph 4076/udp +ascomalarm 4077/udp +cssp 4078/tcp +santools 4079/tcp +santools 4079/udp +lorica-in 4080/tcp +lorica-in 4080/udp +lorica-in-sec 4081/tcp +lorica-in-sec 4081/udp +lorica-out 4082/tcp +lorica-out 4082/udp +lorica-out-sec 4083/tcp +lorica-out-sec 4083/udp +fortisphere-vm 4084/udp +ezmessagesrv 4085/tcp +ftsync 4086/udp +applusservice 4087/tcp +npsp 4088/tcp +opencore 4089/tcp +opencore 4089/udp +omasgport 4090/tcp +omasgport 4090/udp +ewinstaller 4091/tcp +ewinstaller 4091/udp +ewdgs 4092/tcp +ewdgs 4092/udp +pvxpluscs 4093/tcp +pvxpluscs 4093/udp +sysrqd 4094/tcp +sysrqd 4094/udp +xtgui 4095/tcp +xtgui 4095/udp +bre 4096/tcp +bre 4096/udp +patrolview 4097/tcp +patrolview 4097/udp +drmsfsd 4098/tcp +drmsfsd 4098/udp +dpcp 4099/tcp +dpcp 4099/udp +igo-incognito 4100/tcp +igo-incognito 4100/udp +brlp-0 4101/tcp +brlp-0 4101/udp +brlp-1 4102/tcp +brlp-1 4102/udp +brlp-2 4103/tcp +brlp-2 4103/udp +brlp-3 4104/tcp +brlp-3 4104/udp +shofar 4105/tcp +shofar 4105/udp +synchronite 4106/tcp +synchronite 4106/udp +j-ac 4107/tcp +j-ac 4107/udp +accel 4108/tcp +accel 4108/udp +izm 4109/tcp +izm 4109/udp +g2tag 4110/tcp +g2tag 4110/udp +xgrid 4111/tcp +xgrid 4111/udp +apple-vpns-rp 4112/tcp +apple-vpns-rp 4112/udp +aipn-reg 4113/tcp +aipn-reg 4113/udp +jomamqmonitor 4114/tcp +jomamqmonitor 4114/udp +cds 4115/tcp +cds 4115/udp +smartcard-tls 4116/tcp +smartcard-tls 4116/udp +hillrserv 4117/tcp +hillrserv 4117/udp +netscript 4118/tcp +netscript 4118/udp +assuria-slm 4119/tcp +assuria-slm 4119/udp +minirem 4120/tcp +e-builder 4121/tcp +e-builder 4121/udp +fprams 4122/tcp +fprams 4122/udp +z-wave 4123/tcp +z-wave 4123/udp +tigv2 4124/tcp +tigv2 4124/udp +opsview-envoy 4125/tcp +opsview-envoy 4125/udp +ddrepl 4126/tcp +ddrepl 4126/udp +unikeypro 4127/tcp +unikeypro 4127/udp +nufw 4128/tcp +nufw 4128/udp +nuauth 4129/tcp +nuauth 4129/udp +fronet 4130/tcp +fronet 4130/udp +stars 4131/tcp +stars 4131/udp +nuts-dem 4132/tcp +nuts-dem 4132/udp +nuts-bootp 4133/tcp +nuts-bootp 4133/udp +nifty-hmi 4134/tcp +nifty-hmi 4134/udp +cl-db-attach 4135/tcp +cl-db-attach 4135/udp +cl-db-request 4136/tcp +cl-db-request 4136/udp +cl-db-remote 4137/tcp +cl-db-remote 4137/udp +nettest 4138/tcp +nettest 4138/udp +thrtx 4139/tcp +thrtx 4139/udp +cedros-fds 4140/tcp +cedros-fds 4140/udp +oirtgsvc 4141/tcp +oirtgsvc 4141/udp +oidocsvc 4142/tcp +oidocsvc 4142/udp +oidsr 4143/tcp +oidsr 4143/udp +vvr-control 4145/tcp +vvr-control 4145/udp +tgcconnect 4146/tcp +tgcconnect 4146/udp +vrxpservman 4147/tcp +vrxpservman 4147/udp +hhb-handheld 4148/tcp +hhb-handheld 4148/udp +agslb 4149/tcp +agslb 4149/udp +PowerAlert-nsa 4150/tcp +PowerAlert-nsa 4150/udp +menandmice-noh 4151/tcp +menandmice-noh 4151/udp +idig-mux 4152/tcp +idig-mux 4152/udp +mbl-battd 4153/tcp +mbl-battd 4153/udp +atlinks 4154/tcp +atlinks 4154/udp +bzr 4155/tcp +bzr 4155/udp +stat-results 4156/tcp +stat-results 4156/udp +stat-scanner 4157/tcp +stat-scanner 4157/udp +stat-cc 4158/tcp +stat-cc 4158/udp +nss 4159/tcp +nss 4159/udp +jini-discovery 4160/tcp +jini-discovery 4160/udp +omscontact 4161/tcp +omscontact 4161/udp +omstopology 4162/tcp +omstopology 4162/udp +silverpeakpeer 4163/tcp +silverpeakpeer 4163/udp +silverpeakcomm 4164/tcp +silverpeakcomm 4164/udp +altcp 4165/tcp +altcp 4165/udp +joost 4166/tcp +joost 4166/udp +ddgn 4167/tcp +ddgn 4167/udp +pslicser 4168/tcp +pslicser 4168/udp +iadt 4169/tcp +iadt-disc 4169/udp +d-cinema-csp 4170/tcp +ml-svnet 4171/tcp +pcoip 4172/tcp +pcoip 4172/udp +mma-discovery 4173/udp +smcluster 4174/tcp +sm-disc 4174/udp +bccp 4175/tcp +tl-ipcproxy 4176/tcp +wello 4177/tcp +wello 4177/udp +storman 4178/tcp +storman 4178/udp +MaxumSP 4179/tcp +MaxumSP 4179/udp +httpx 4180/tcp +httpx 4180/udp +macbak 4181/tcp +macbak 4181/udp +pcptcpservice 4182/tcp +pcptcpservice 4182/udp +cyborgnet 4183/tcp +cyborgnet 4183/udp +universe-suite 4184/tcp +universe-suite 4184/udp +wcpp 4185/tcp +wcpp 4185/udp +boxbackupstore 4186/tcp +csc-proxy 4187/tcp +vatata 4188/tcp +vatata 4188/udp +pcep 4189/tcp +sieve 4190/tcp +dsmipv6 4191/udp +azeti 4192/tcp +azeti-bd 4192/udp +pvxplusio 4193/tcp +aws-wsp 4195/tcp +aws-wsp 4195/udp +aws-wsp 4195/sctp +aws-wsp 4195/dccp +hctl 4197/tcp +hctl 4197/udp +eims-admin 4199/tcp +eims-admin 4199/udp +corelccam 4300/tcp +corelccam 4300/udp +d-data 4301/tcp +d-data 4301/udp +d-data-control 4302/tcp +d-data-control 4302/udp +srcp 4303/tcp +srcp 4303/udp +owserver 4304/tcp +owserver 4304/udp +batman 4305/tcp +batman 4305/udp +pinghgl 4306/tcp +pinghgl 4306/udp +trueconf 4307/tcp +trueconf 4307/udp +compx-lockview 4308/tcp +compx-lockview 4308/udp +dserver 4309/tcp +dserver 4309/udp +mirrtex 4310/tcp +mirrtex 4310/udp +p6ssmc 4311/tcp +pscl-mgt 4312/tcp +perrla 4313/tcp +choiceview-agt 4314/tcp +choiceview-clt 4316/tcp +opentelemetry 4317/tcp +fdt-rcatp 4320/tcp +fdt-rcatp 4320/udp +rwhois 4321/tcp +rwhois 4321/udp +trim-event 4322/tcp +trim-event 4322/udp +trim-ice 4323/tcp +trim-ice 4323/udp +geognosisman 4325/tcp +geognosisman 4325/udp +geognosis 4326/tcp +geognosis 4326/udp +jaxer-web 4327/tcp +jaxer-web 4327/udp +jaxer-manager 4328/tcp +jaxer-manager 4328/udp +publiqare-sync 4329/tcp +dey-sapi 4330/tcp +ktickets-rest 4331/tcp +getty-focus 4332/tcp +ahsp 4333/tcp +ahsp 4333/udp +ahsp 4333/sctp +netconf-ch-ssh 4334/tcp +netconf-ch-tls 4335/tcp +restconf-ch-tls 4336/tcp +gaia 4340/tcp +gaia 4340/udp +lisp-data 4341/udp +lisp-control 4342/udp +unicall 4343/tcp +unicall 4343/udp +vinainstall 4344/tcp +vinainstall 4344/udp +m4-network-as 4345/tcp +m4-network-as 4345/udp +elanlm 4346/tcp +elanlm 4346/udp +lansurveyor 4347/tcp +lansurveyor 4347/udp +itose 4348/tcp +itose 4348/udp +fsportmap 4349/tcp +fsportmap 4349/udp +net-device 4350/tcp +net-device 4350/udp +plcy-net-svcs 4351/tcp +plcy-net-svcs 4351/udp +pjlink 4352/tcp +pjlink 4352/udp +f5-iquery 4353/tcp +f5-iquery 4353/udp +qsnet-trans 4354/tcp +qsnet-trans 4354/udp +qsnet-workst 4355/tcp +qsnet-workst 4355/udp +qsnet-assist 4356/tcp +qsnet-assist 4356/udp +qsnet-cond 4357/tcp +qsnet-cond 4357/udp +qsnet-nucl 4358/tcp +qsnet-nucl 4358/udp +omabcastltkm 4359/tcp +omabcastltkm 4359/udp +matrix-vnet 4360/tcp +nacnl 4361/udp +afore-vdp-disc 4362/udp +shadowstream 4366/udp +wxbrief 4368/tcp +wxbrief 4368/udp +epmd 4369/tcp +epmd 4369/udp +elpro-tunnel 4370/tcp +elpro-tunnel 4370/udp +l2c-control 4371/tcp +l2c-disc 4371/udp +l2c-data 4372/tcp +l2c-data 4372/udp +remctl 4373/tcp +remctl 4373/udp +psi-ptt 4374/tcp +tolteces 4375/tcp +tolteces 4375/udp +bip 4376/tcp +bip 4376/udp +cp-spxsvr 4377/tcp +cp-spxsvr 4377/udp +cp-spxdpy 4378/tcp +cp-spxdpy 4378/udp +ctdb 4379/tcp +ctdb 4379/udp +xandros-cms 4389/tcp +xandros-cms 4389/udp +wiegand 4390/tcp +wiegand 4390/udp +apwi-imserver 4391/tcp +apwi-rxserver 4392/tcp +apwi-rxspooler 4393/tcp +apwi-disc 4394/udp +omnivisionesx 4395/tcp +omnivisionesx 4395/udp +fly 4396/tcp +ds-srv 4400/tcp +ds-srv 4400/udp +ds-srvr 4401/tcp +ds-srvr 4401/udp +ds-clnt 4402/tcp +ds-clnt 4402/udp +ds-user 4403/tcp +ds-user 4403/udp +ds-admin 4404/tcp +ds-admin 4404/udp +ds-mail 4405/tcp +ds-mail 4405/udp +ds-slp 4406/tcp +ds-slp 4406/udp +nacagent 4407/tcp +slscc 4408/tcp +netcabinet-com 4409/tcp +itwo-server 4410/tcp +found 4411/tcp +smallchat 4412/udp +avi-nms 4413/tcp +avi-nms-disc 4413/udp +updog 4414/tcp +brcd-vr-req 4415/tcp +pjj-player 4416/tcp +pjj-player-disc 4416/udp +workflowdir 4417/tcp +axysbridge 4418/udp +cbp 4419/tcp +nvme 4420/tcp +nvme 4420/udp +scaleft 4421/tcp +tsepisp 4422/tcp +thingkit 4423/tcp +netrockey6 4425/tcp +netrockey6 4425/udp +beacon-port-2 4426/tcp +beacon-port-2 4426/udp +drizzle 4427/tcp +omviserver 4428/tcp +omviagent 4429/tcp +rsqlserver 4430/tcp +rsqlserver 4430/udp +wspipe 4431/tcp +l-acoustics 4432/tcp +l-acoustics 4432/udp +vop 4433/tcp +netblox 4441/udp +saris 4442/tcp +saris 4442/udp +pharos 4443/tcp +pharos 4443/udp +krb524 4444/tcp +krb524 4444/udp +nv-video 4444/tcp +nv-video 4444/udp +upnotifyp 4445/tcp +upnotifyp 4445/udp +n1-fwp 4446/tcp +n1-fwp 4446/udp +n1-rmgmt 4447/tcp +n1-rmgmt 4447/udp +asc-slmd 4448/tcp +asc-slmd 4448/udp +privatewire 4449/tcp +privatewire 4449/udp +camp 4450/tcp +camp 4450/udp +ctisystemmsg 4451/tcp +ctisystemmsg 4451/udp +ctiprogramload 4452/tcp +ctiprogramload 4452/udp +nssalertmgr 4453/tcp +nssalertmgr 4453/udp +nssagentmgr 4454/tcp +nssagentmgr 4454/udp +prchat-user 4455/tcp +prchat-user 4455/udp +prchat-server 4456/tcp +prchat-server 4456/udp +prRegister 4457/tcp +prRegister 4457/udp +mcp 4458/tcp +mcp 4458/udp +ntske 4460/tcp +hpssmgmt 4484/tcp +hpssmgmt 4484/udp +assyst-dr 4485/tcp +icms 4486/tcp +icms 4486/udp +prex-tcp 4487/tcp +awacs-ice 4488/tcp +awacs-ice 4488/udp +ipsec-nat-t 4500/tcp +ipsec-nat-t 4500/udp +a25-fap-fgw 4502/sctp +armagetronad 4534/udp +ehs 4535/tcp +ehs 4535/udp +ehs-ssl 4536/tcp +ehs-ssl 4536/udp +wssauthsvc 4537/tcp +wssauthsvc 4537/udp +swx-gate 4538/tcp +swx-gate 4538/udp +worldscores 4545/tcp +worldscores 4545/udp +sf-lm 4546/tcp +sf-lm 4546/udp +lanner-lm 4547/tcp +lanner-lm 4547/udp +synchromesh 4548/tcp +synchromesh 4548/udp +aegate 4549/tcp +aegate 4549/udp +gds-adppiw-db 4550/tcp +gds-adppiw-db 4550/udp +ieee-mih 4551/tcp +ieee-mih 4551/udp +menandmice-mon 4552/tcp +menandmice-mon 4552/udp +icshostsvc 4553/tcp +msfrs 4554/tcp +msfrs 4554/udp +rsip 4555/tcp +rsip 4555/udp +dtn-bundle 4556/tcp +dtn-bundle 4556/udp +dtn-bundle 4556/dccp +mtcevrunqss 4557/udp +mtcevrunqman 4558/udp +hylafax 4559/tcp +hylafax 4559/udp +amahi-anywhere 4563/tcp +kwtc 4566/tcp +kwtc 4566/udp +tram 4567/tcp +tram 4567/udp +bmc-reporting 4568/tcp +bmc-reporting 4568/udp +iax 4569/tcp +iax 4569/udp +deploymentmap 4570/tcp +cardifftec-back 4573/tcp +rid 4590/tcp +l3t-at-an 4591/tcp +l3t-at-an 4591/udp +hrpd-ith-at-an 4592/udp +ipt-anri-anri 4593/tcp +ipt-anri-anri 4593/udp +ias-session 4594/tcp +ias-session 4594/udp +ias-paging 4595/tcp +ias-paging 4595/udp +ias-neighbor 4596/tcp +ias-neighbor 4596/udp +a21-an-1xbs 4597/tcp +a21-an-1xbs 4597/udp +a16-an-an 4598/tcp +a16-an-an 4598/udp +a17-an-an 4599/tcp +a17-an-an 4599/udp +piranha1 4600/tcp +piranha1 4600/udp +piranha2 4601/tcp +piranha2 4601/udp +mtsserver 4602/tcp +menandmice-upg 4603/tcp +irp 4604/tcp +sixchat 4605/tcp +sixid 4606/tcp +ventoso 4621/udp +dots-signal 4646/tcp +dots-signal 4646/udp +playsta2-app 4658/tcp +playsta2-app 4658/udp +playsta2-lob 4659/tcp +playsta2-lob 4659/udp +smaclmgr 4660/tcp +smaclmgr 4660/udp +kar2ouche 4661/tcp +kar2ouche 4661/udp +oms 4662/tcp +oms 4662/udp +noteit 4663/tcp +noteit 4663/udp +ems 4664/tcp +ems 4664/udp +contclientms 4665/tcp +contclientms 4665/udp +eportcomm 4666/tcp +eportcomm 4666/udp +mmacomm 4667/tcp +mmacomm 4667/udp +mmaeds 4668/tcp +mmaeds 4668/udp +eportcommdata 4669/tcp +eportcommdata 4669/udp +light 4670/tcp +light 4670/udp +acter 4671/tcp +acter 4671/udp +rfa 4672/tcp +rfa 4672/udp +cxws 4673/tcp +cxws 4673/udp +appiq-mgmt 4674/tcp +appiq-mgmt 4674/udp +dhct-status 4675/tcp +dhct-status 4675/udp +dhct-alerts 4676/tcp +dhct-alerts 4676/udp +bcs 4677/tcp +bcs 4677/udp +traversal 4678/tcp +traversal 4678/udp +mgesupervision 4679/tcp +mgesupervision 4679/udp +mgemanagement 4680/tcp +mgemanagement 4680/udp +parliant 4681/tcp +parliant 4681/udp +finisar 4682/tcp +finisar 4682/udp +spike 4683/tcp +spike 4683/udp +rfid-rp1 4684/tcp +rfid-rp1 4684/udp +autopac 4685/tcp +autopac 4685/udp +msp-os 4686/tcp +msp-os 4686/udp +nst 4687/tcp +nst 4687/udp +mobile-p2p 4688/tcp +mobile-p2p 4688/udp +altovacentral 4689/tcp +altovacentral 4689/udp +prelude 4690/tcp +prelude 4690/udp +mtn 4691/tcp +mtn 4691/udp +conspiracy 4692/tcp +conspiracy 4692/udp +netxms-agent 4700/tcp +netxms-agent 4700/udp +netxms-mgmt 4701/tcp +netxms-mgmt 4701/udp +netxms-sync 4702/tcp +netxms-sync 4702/udp +npqes-test 4703/tcp +assuria-ins 4704/tcp +trinity-dist 4711/tcp +trinity-dist 4711/udp +trinity-dist 4711/sctp +truckstar 4725/tcp +truckstar 4725/udp +a26-fap-fgw 4726/udp +fcis 4727/tcp +fcis-disc 4727/udp +capmux 4728/tcp +capmux 4728/udp +gsmtap 4729/udp +gearman 4730/tcp +gearman 4730/udp +remcap 4731/tcp +ohmtrigger 4732/udp +resorcs 4733/tcp +ipdr-sp 4737/tcp +ipdr-sp 4737/udp +solera-lpn 4738/tcp +solera-lpn 4738/udp +ipfix 4739/tcp +ipfix 4739/udp +ipfix 4739/sctp +ipfixs 4740/tcp +ipfixs 4740/sctp +ipfixs 4740/udp +lumimgrd 4741/tcp +lumimgrd 4741/udp +sicct 4742/tcp +sicct-sdp 4742/udp +openhpid 4743/tcp +openhpid 4743/udp +ifsp 4744/tcp +ifsp 4744/udp +fmp 4745/tcp +fmp 4745/udp +intelliadm-disc 4746/udp +buschtrommel 4747/udp +profilemac 4749/tcp +profilemac 4749/udp +ssad 4750/tcp +ssad 4750/udp +spocp 4751/tcp +spocp 4751/udp +snap 4752/tcp +snap 4752/udp +simon 4753/tcp +simon-disc 4753/udp +gre-in-udp 4754/udp +gre-udp-dtls 4755/udp +RDCenter 4756/tcp +converge 4774/tcp +bfd-multi-ctl 4784/tcp +bfd-multi-ctl 4784/udp +cncp 4785/udp +smart-install 4786/tcp +sia-ctrl-plane 4787/tcp +xmcp 4788/tcp +vxlan 4789/udp +vxlan-gpe 4790/udp +roce 4791/udp +iims 4800/tcp +iims 4800/udp +iwec 4801/tcp +iwec 4801/udp +ilss 4802/tcp +ilss 4802/udp +notateit 4803/tcp +notateit-disc 4803/udp +aja-ntv4-disc 4804/udp +htcp 4827/tcp +htcp 4827/udp +varadero-0 4837/tcp +varadero-0 4837/udp +varadero-1 4838/tcp +varadero-1 4838/udp +varadero-2 4839/tcp +varadero-2 4839/udp +opcua-tcp 4840/tcp +opcua-udp 4840/udp +quosa 4841/tcp +quosa 4841/udp +gw-asv 4842/tcp +gw-asv 4842/udp +opcua-tls 4843/tcp +opcua-tls 4843/udp +gw-log 4844/tcp +gw-log 4844/udp +wcr-remlib 4845/tcp +wcr-remlib 4845/udp +contamac-icm 4846/tcp +contamac-icm 4846/udp +wfc 4847/tcp +wfc 4847/udp +appserv-http 4848/tcp +appserv-http 4848/udp +appserv-https 4849/tcp +appserv-https 4849/udp +sun-as-nodeagt 4850/tcp +sun-as-nodeagt 4850/udp +derby-repli 4851/tcp +derby-repli 4851/udp +unify-debug 4867/tcp +unify-debug 4867/udp +phrelay 4868/tcp +phrelay 4868/udp +phrelaydbg 4869/tcp +phrelaydbg 4869/udp +cc-tracking 4870/tcp +cc-tracking 4870/udp +wired 4871/tcp +wired 4871/udp +tritium-can 4876/tcp +tritium-can 4876/udp +lmcs 4877/tcp +lmcs 4877/udp +inst-discovery 4878/udp +wsdl-event 4879/tcp +hislip 4880/tcp +socp-t 4881/udp +socp-c 4882/udp +wmlserver 4883/tcp +hivestor 4884/tcp +hivestor 4884/udp +abbs 4885/tcp +abbs 4885/udp +xcap-portal 4888/tcp +xcap-control 4889/tcp +lyskom 4894/tcp +lyskom 4894/udp +radmin-port 4899/tcp +radmin-port 4899/udp +hfcs 4900/tcp +hfcs 4900/udp +flr-agent 4901/tcp +magiccontrol 4902/tcp +lutap 4912/tcp +lutcp 4913/tcp +bones 4914/tcp +bones 4914/udp +frcs 4915/tcp +an-signaling 4936/udp +atsc-mh-ssc 4937/udp +eq-office-4940 4940/tcp +eq-office-4940 4940/udp +eq-office-4941 4941/tcp +eq-office-4941 4941/udp +eq-office-4942 4942/tcp +eq-office-4942 4942/udp +munin 4949/tcp +munin 4949/udp +sybasesrvmon 4950/tcp +sybasesrvmon 4950/udp +pwgwims 4951/tcp +pwgwims 4951/udp +sagxtsds 4952/tcp +sagxtsds 4952/udp +dbsyncarbiter 4953/tcp +ccss-qmm 4969/tcp +ccss-qmm 4969/udp +ccss-qsm 4970/tcp +ccss-qsm 4970/udp +burp 4971/tcp +ctxs-vpp 4980/udp +webyast 4984/tcp +gerhcs 4985/tcp +mrip 4986/tcp +mrip 4986/udp +smar-se-port1 4987/tcp +smar-se-port1 4987/udp +smar-se-port2 4988/tcp +smar-se-port2 4988/udp +parallel 4989/tcp +parallel 4989/udp +busycal 4990/tcp +busycal 4990/udp +vrt 4991/tcp +vrt 4991/udp +hfcs-manager 4999/tcp +hfcs-manager 4999/udp +commplex-main 5000/tcp +commplex-main 5000/udp +commplex-link 5001/tcp +commplex-link 5001/udp +rfe 5002/tcp +rfe 5002/udp +fmpro-internal 5003/tcp +fmpro-internal 5003/udp +avt-profile-1 5004/tcp +avt-profile-1 5004/udp +avt-profile-1 5004/dccp +avt-profile-2 5005/tcp +avt-profile-2 5005/udp +avt-profile-2 5005/dccp +wsm-server 5006/tcp +wsm-server 5006/udp +wsm-server-ssl 5007/tcp +wsm-server-ssl 5007/udp +synapsis-edge 5008/tcp +synapsis-edge 5008/udp +winfs 5009/tcp +winfs 5009/udp +telelpathstart 5010/tcp +telelpathstart 5010/udp +telelpathattack 5011/tcp +telelpathattack 5011/udp +nsp 5012/tcp +nsp 5012/udp +fmpro-v6 5013/tcp +fmpro-v6 5013/udp +onpsocket 5014/udp +fmwp 5015/tcp +zenginkyo-1 5020/tcp +zenginkyo-1 5020/udp +zenginkyo-2 5021/tcp +zenginkyo-2 5021/udp +mice 5022/tcp +mice 5022/udp +htuilsrv 5023/tcp +htuilsrv 5023/udp +scpi-telnet 5024/tcp +scpi-telnet 5024/udp +scpi-raw 5025/tcp +scpi-raw 5025/udp +strexec-d 5026/tcp +strexec-d 5026/udp +strexec-s 5027/tcp +strexec-s 5027/udp +qvr 5028/tcp +infobright 5029/tcp +infobright 5029/udp +surfpass 5030/tcp +surfpass 5030/udp +dmp 5031/udp +signacert-agent 5032/tcp +jtnetd-server 5033/tcp +jtnetd-status 5034/tcp +asnaacceler8db 5042/tcp +asnaacceler8db 5042/udp +swxadmin 5043/tcp +swxadmin 5043/udp +lxi-evntsvc 5044/tcp +lxi-evntsvc 5044/udp +osp 5045/tcp +vpm-udp 5046/udp +iscape 5047/udp +texai 5048/tcp +ivocalize 5049/tcp +ivocalize 5049/udp +mmcc 5050/tcp +mmcc 5050/udp +ita-agent 5051/tcp +ita-agent 5051/udp +ita-manager 5052/tcp +ita-manager 5052/udp +rlm 5053/tcp +rlm-disc 5053/udp +rlm-admin 5054/tcp +unot 5055/tcp +unot 5055/udp +intecom-ps1 5056/tcp +intecom-ps1 5056/udp +intecom-ps2 5057/tcp +intecom-ps2 5057/udp +locus-disc 5058/udp +sds 5059/tcp +sds 5059/udp +sip 5060/tcp +sip 5060/udp +sip 5060/sctp +sips 5061/tcp +sips 5061/udp +sips 5061/sctp +na-localise 5062/tcp +na-localise 5062/udp +csrpc 5063/tcp +ca-1 5064/tcp +ca-1 5064/udp +ca-2 5065/tcp +ca-2 5065/udp +stanag-5066 5066/tcp +stanag-5066 5066/udp +authentx 5067/tcp +authentx 5067/udp +bitforestsrv 5068/tcp +i-net-2000-npr 5069/tcp +i-net-2000-npr 5069/udp +vtsas 5070/tcp +vtsas 5070/udp +powerschool 5071/tcp +powerschool 5071/udp +ayiya 5072/tcp +ayiya 5072/udp +tag-pm 5073/tcp +tag-pm 5073/udp +alesquery 5074/tcp +alesquery 5074/udp +pvaccess 5075/tcp +pixelpusher 5078/udp +cp-spxrpts 5079/udp +onscreen 5080/tcp +onscreen 5080/udp +sdl-ets 5081/tcp +sdl-ets 5081/udp +qcp 5082/tcp +qcp 5082/udp +qfp 5083/tcp +qfp 5083/udp +llrp 5084/tcp +llrp 5084/udp +encrypted-llrp 5085/tcp +encrypted-llrp 5085/udp +aprigo-cs 5086/tcp +biotic 5087/tcp +car 5090/sctp +cxtp 5091/sctp +magpie 5092/udp +sentinel-lm 5093/tcp +sentinel-lm 5093/udp +hart-ip 5094/tcp +hart-ip 5094/udp +sentlm-srv2srv 5099/tcp +sentlm-srv2srv 5099/udp +socalia 5100/tcp +socalia 5100/udp +talarian-tcp 5101/tcp +talarian-udp 5101/udp +oms-nonsecure 5102/tcp +oms-nonsecure 5102/udp +actifio-c2c 5103/tcp +tinymessage 5104/udp +hughes-ap 5105/udp +actifioudsagent 5106/tcp +actifioreplic 5107/tcp +taep-as-svc 5111/tcp +taep-as-svc 5111/udp +pm-cmdsvr 5112/tcp +pm-cmdsvr 5112/udp +ev-services 5114/tcp +autobuild 5115/tcp +emb-proj-cmd 5116/udp +gradecam 5117/tcp +barracuda-bbs 5120/tcp +barracuda-bbs 5120/udp +nbt-pc 5133/tcp +nbt-pc 5133/udp +ppactivation 5134/tcp +erp-scale 5135/tcp +minotaur-sa 5136/udp +ctsd 5137/tcp +ctsd 5137/udp +rmonitor-secure 5145/tcp +rmonitor-secure 5145/udp +social-alarm 5146/tcp +atmp 5150/tcp +atmp 5150/udp +esri-sde 5151/tcp +esri-sde 5151/udp +sde-discovery 5152/tcp +sde-discovery 5152/udp +bzflag 5154/tcp +bzflag 5154/udp +asctrl-agent 5155/tcp +asctrl-agent 5155/udp +rugameonline 5156/tcp +mediat 5157/tcp +snmpssh 5161/tcp +snmpssh-trap 5162/tcp +sbackup 5163/tcp +vpa 5164/tcp +vpa-disc 5164/udp +ife-icorp 5165/tcp +ife-icorp 5165/udp +winpcs 5166/tcp +winpcs 5166/udp +scte104 5167/tcp +scte104 5167/udp +scte30 5168/tcp +scte30 5168/udp +pcoip-mgmt 5172/tcp +aol 5190/tcp +aol 5190/udp +aol-1 5191/tcp +aol-1 5191/udp +aol-2 5192/tcp +aol-2 5192/udp +aol-3 5193/tcp +aol-3 5193/udp +cpscomm 5194/tcp +ampl-lic 5195/tcp +ampl-tableproxy 5196/tcp +tunstall-lwp 5197/tcp +targus-getdata 5200/tcp +targus-getdata 5200/udp +targus-getdata1 5201/tcp +targus-getdata1 5201/udp +targus-getdata2 5202/tcp +targus-getdata2 5202/udp +targus-getdata3 5203/tcp +targus-getdata3 5203/udp +nomad 5209/tcp +noteza 5215/tcp +noteza 5215/sctp +3exmp 5221/tcp +xmpp-client 5222/tcp +hpvirtgrp 5223/tcp +hpvirtgrp 5223/udp +hpvirtctrl 5224/tcp +hpvirtctrl 5224/udp +hp-server 5225/tcp +hp-server 5225/udp +hp-status 5226/tcp +hp-status 5226/udp +perfd 5227/tcp +perfd 5227/udp +hpvroom 5228/tcp +jaxflow 5229/tcp +jaxflow-data 5230/tcp +crusecontrol 5231/tcp +csedaemon 5232/tcp +enfs 5233/tcp +eenet 5234/tcp +eenet 5234/udp +galaxy-network 5235/tcp +galaxy-network 5235/udp +padl2sim 5236/tcp +padl2sim 5236/udp +mnet-discovery 5237/tcp +mnet-discovery 5237/udp +downtools 5245/tcp +downtools-disc 5245/udp +capwap-control 5246/udp +capwap-data 5247/udp +caacws 5248/tcp +caacws 5248/udp +caaclang2 5249/tcp +caaclang2 5249/udp +soagateway 5250/tcp +soagateway 5250/udp +caevms 5251/tcp +caevms 5251/udp +movaz-ssc 5252/tcp +movaz-ssc 5252/udp +kpdp 5253/tcp +logcabin 5254/tcp +3com-njack-1 5264/tcp +3com-njack-1 5264/udp +3com-njack-2 5265/tcp +3com-njack-2 5265/udp +xmpp-server 5269/tcp +cartographerxmp 5270/tcp +cartographerxmp 5270/udp +cuelink 5271/tcp +cuelink-disc 5271/udp +pk 5272/tcp +pk 5272/udp +xmpp-bosh 5280/tcp +undo-lm 5281/tcp +transmit-port 5282/tcp +transmit-port 5282/udp +presence 5298/tcp +presence 5298/udp +nlg-data 5299/tcp +nlg-data 5299/udp +hacl-hb 5300/tcp +hacl-hb 5300/udp +hacl-gs 5301/tcp +hacl-gs 5301/udp +hacl-cfg 5302/tcp +hacl-cfg 5302/udp +hacl-probe 5303/tcp +hacl-probe 5303/udp +hacl-local 5304/tcp +hacl-local 5304/udp +hacl-test 5305/tcp +hacl-test 5305/udp +sun-mc-grp 5306/tcp +sun-mc-grp 5306/udp +sco-aip 5307/tcp +sco-aip 5307/udp +cfengine 5308/tcp +cfengine 5308/udp +jprinter 5309/tcp +jprinter 5309/udp +outlaws 5310/tcp +outlaws 5310/udp +permabit-cs 5312/tcp +permabit-cs 5312/udp +rrdp 5313/tcp +rrdp 5313/udp +opalis-rbt-ipc 5314/tcp +opalis-rbt-ipc 5314/udp +hacl-poll 5315/tcp +hacl-poll 5315/udp +hpbladems 5316/tcp +hpdevms 5317/tcp +pkix-cmc 5318/tcp +bsfserver-zn 5320/tcp +bsfsvr-zn-ssl 5321/tcp +kfserver 5343/tcp +kfserver 5343/udp +xkotodrcp 5344/tcp +xkotodrcp 5344/udp +stuns 5349/tcp +stuns 5349/udp +turns 5349/tcp +turns 5349/udp +stun-behaviors 5349/tcp +pcp-multicast 5350/udp +pcp 5351/udp +dns-llq 5352/tcp +dns-llq 5352/udp +mdns 5353/tcp +mdns 5353/udp +mdnsresponder 5354/tcp +mdnsresponder 5354/udp +llmnr 5355/tcp +llmnr 5355/udp +ms-smlbiz 5356/tcp +ms-smlbiz 5356/udp +wsdapi 5357/tcp +wsdapi 5357/udp +wsdapi-s 5358/tcp +wsdapi-s 5358/udp +ms-alerter 5359/tcp +ms-alerter 5359/udp +ms-sideshow 5360/tcp +ms-sideshow 5360/udp +ms-s-sideshow 5361/tcp +ms-s-sideshow 5361/udp +serverwsd2 5362/tcp +serverwsd2 5362/udp +net-projection 5363/tcp +net-projection 5363/udp +kdnet 5364/udp +stresstester 5397/tcp +stresstester 5397/udp +elektron-admin 5398/tcp +elektron-admin 5398/udp +securitychase 5399/tcp +securitychase 5399/udp +excerpt 5400/tcp +excerpt 5400/udp +excerpts 5401/tcp +excerpts 5401/udp +mftp 5402/tcp +mftp 5402/udp +hpoms-ci-lstn 5403/tcp +hpoms-ci-lstn 5403/udp +hpoms-dps-lstn 5404/tcp +hpoms-dps-lstn 5404/udp +netsupport 5405/tcp +netsupport 5405/udp +systemics-sox 5406/tcp +systemics-sox 5406/udp +foresyte-clear 5407/tcp +foresyte-clear 5407/udp +foresyte-sec 5408/tcp +foresyte-sec 5408/udp +salient-dtasrv 5409/tcp +salient-dtasrv 5409/udp +salient-usrmgr 5410/tcp +salient-usrmgr 5410/udp +actnet 5411/tcp +actnet 5411/udp +continuus 5412/tcp +continuus 5412/udp +wwiotalk 5413/tcp +wwiotalk 5413/udp +statusd 5414/tcp +statusd 5414/udp +ns-server 5415/tcp +ns-server 5415/udp +sns-gateway 5416/tcp +sns-gateway 5416/udp +sns-agent 5417/tcp +sns-agent 5417/udp +mcntp 5418/tcp +mcntp 5418/udp +dj-ice 5419/tcp +dj-ice 5419/udp +cylink-c 5420/tcp +cylink-c 5420/udp +netsupport2 5421/tcp +netsupport2 5421/udp +salient-mux 5422/tcp +salient-mux 5422/udp +virtualuser 5423/tcp +virtualuser 5423/udp +beyond-remote 5424/tcp +beyond-remote 5424/udp +br-channel 5425/tcp +br-channel 5425/udp +devbasic 5426/tcp +devbasic 5426/udp +sco-peer-tta 5427/tcp +sco-peer-tta 5427/udp +telaconsole 5428/tcp +telaconsole 5428/udp +base 5429/tcp +base 5429/udp +radec-corp 5430/tcp +radec-corp 5430/udp +park-agent 5431/tcp +park-agent 5431/udp +postgresql 5432/tcp +postgresql 5432/udp +pyrrho 5433/tcp +pyrrho 5433/udp +sgi-arrayd 5434/tcp +sgi-arrayd 5434/udp +sceanics 5435/tcp +sceanics 5435/udp +pmip6-cntl 5436/udp +pmip6-data 5437/udp +spss 5443/tcp +spss 5443/udp +smbdirect 5445/tcp +smbdirect 5445/sctp +tiepie 5450/tcp +tiepie-disc 5450/udp +surebox 5453/tcp +surebox 5453/udp +apc-5454 5454/tcp +apc-5454 5454/udp +apc-5455 5455/tcp +apc-5455 5455/udp +apc-5456 5456/tcp +apc-5456 5456/udp +silkmeter 5461/tcp +silkmeter 5461/udp +ttl-publisher 5462/tcp +ttl-publisher 5462/udp +ttlpriceproxy 5463/tcp +ttlpriceproxy 5463/udp +quailnet 5464/tcp +quailnet 5464/udp +netops-broker 5465/tcp +netops-broker 5465/udp +apsolab-col 5470/tcp +apsolab-cols 5471/tcp +apsolab-tag 5472/tcp +apsolab-tags 5473/tcp +apsolab-rpc 5474/udp +apsolab-data 5475/tcp +fcp-addr-srvr1 5500/tcp +fcp-addr-srvr1 5500/udp +fcp-addr-srvr2 5501/tcp +fcp-addr-srvr2 5501/udp +fcp-srvr-inst1 5502/tcp +fcp-srvr-inst1 5502/udp +fcp-srvr-inst2 5503/tcp +fcp-srvr-inst2 5503/udp +fcp-cics-gw1 5504/tcp +fcp-cics-gw1 5504/udp +checkoutdb 5505/tcp +checkoutdb 5505/udp +amc 5506/tcp +amc 5506/udp +psl-management 5507/tcp +cbus 5550/tcp +sgi-eventmond 5553/tcp +sgi-eventmond 5553/udp +sgi-esphttp 5554/tcp +sgi-esphttp 5554/udp +personal-agent 5555/tcp +personal-agent 5555/udp +freeciv 5556/tcp +freeciv 5556/udp +farenet 5557/tcp +dp-bura 5565/tcp +westec-connect 5566/tcp +dof-dps-mc-sec 5567/tcp +dof-dps-mc-sec 5567/udp +sdt 5568/tcp +sdt 5568/udp +rdmnet-ctrl 5569/tcp +rdmnet-device 5569/udp +sdmmp 5573/tcp +sdmmp 5573/udp +lsi-bobcat 5574/tcp +ora-oap 5575/tcp +fdtracks 5579/tcp +tmosms0 5580/tcp +tmosms0 5580/udp +tmosms1 5581/tcp +tmosms1 5581/udp +fac-restore 5582/tcp +fac-restore 5582/udp +tmo-icon-sync 5583/tcp +tmo-icon-sync 5583/udp +bis-web 5584/tcp +bis-web 5584/udp +bis-sync 5585/tcp +bis-sync 5585/udp +att-mt-sms 5586/tcp +ininmessaging 5597/tcp +ininmessaging 5597/udp +mctfeed 5598/tcp +mctfeed 5598/udp +esinstall 5599/tcp +esinstall 5599/udp +esmmanager 5600/tcp +esmmanager 5600/udp +esmagent 5601/tcp +esmagent 5601/udp +a1-msc 5602/tcp +a1-msc 5602/udp +a1-bs 5603/tcp +a1-bs 5603/udp +a3-sdunode 5604/tcp +a3-sdunode 5604/udp +a4-sdunode 5605/tcp +a4-sdunode 5605/udp +efr 5618/tcp +ninaf 5627/tcp +ninaf 5627/udp +htrust 5628/tcp +htrust 5628/udp +symantec-sfdb 5629/tcp +symantec-sfdb 5629/udp +precise-comm 5630/tcp +precise-comm 5630/udp +pcanywheredata 5631/tcp +pcanywheredata 5631/udp +pcanywherestat 5632/tcp +pcanywherestat 5632/udp +beorl 5633/tcp +beorl 5633/udp +xprtld 5634/tcp +xprtld 5634/udp +sfmsso 5635/tcp +sfm-db-server 5636/tcp +cssc 5637/tcp +flcrs 5638/tcp +ics 5639/tcp +vfmobile 5646/tcp +nrpe 5666/tcp +filemq 5670/tcp +zre-disc 5670/udp +amqps 5671/tcp +amqps 5671/udp +amqp 5672/tcp +amqp 5672/udp +amqp 5672/sctp +jms 5673/tcp +jms 5673/udp +hyperscsi-port 5674/tcp +hyperscsi-port 5674/udp +v5ua 5675/tcp +v5ua 5675/udp +v5ua 5675/sctp +raadmin 5676/tcp +raadmin 5676/udp +questdb2-lnchr 5677/tcp +questdb2-lnchr 5677/udp +rrac 5678/tcp +rrac 5678/udp +dccm 5679/tcp +dccm 5679/udp +auriga-router 5680/tcp +auriga-router 5680/udp +ncxcp 5681/tcp +ncxcp 5681/udp +brightcore 5682/udp +coap 5683/tcp +coap 5683/udp +coaps 5684/tcp +coaps 5684/udp +gog-multiplayer 5687/udp +ggz 5688/tcp +ggz 5688/udp +qmvideo 5689/tcp +qmvideo 5689/udp +rbsystem 5693/tcp +kmip 5696/tcp +supportassist 5700/tcp +storageos 5705/tcp +proshareaudio 5713/tcp +proshareaudio 5713/udp +prosharevideo 5714/tcp +prosharevideo 5714/udp +prosharedata 5715/tcp +prosharedata 5715/udp +prosharerequest 5716/tcp +prosharerequest 5716/udp +prosharenotify 5717/tcp +prosharenotify 5717/udp +dpm 5718/tcp +dpm 5718/udp +dpm-agent 5719/tcp +dpm-agent 5719/udp +ms-licensing 5720/tcp +ms-licensing 5720/udp +dtpt 5721/tcp +dtpt 5721/udp +msdfsr 5722/tcp +msdfsr 5722/udp +omhs 5723/tcp +omhs 5723/udp +omsdk 5724/tcp +omsdk 5724/udp +ms-ilm 5725/tcp +ms-ilm-sts 5726/tcp +asgenf 5727/tcp +io-dist-data 5728/tcp +io-dist-group 5728/udp +openmail 5729/tcp +openmail 5729/udp +unieng 5730/tcp +unieng 5730/udp +ida-discover1 5741/tcp +ida-discover1 5741/udp +ida-discover2 5742/tcp +ida-discover2 5742/udp +watchdoc-pod 5743/tcp +watchdoc-pod 5743/udp +watchdoc 5744/tcp +watchdoc 5744/udp +fcopy-server 5745/tcp +fcopy-server 5745/udp +fcopys-server 5746/tcp +fcopys-server 5746/udp +tunatic 5747/tcp +tunatic 5747/udp +tunalyzer 5748/tcp +tunalyzer 5748/udp +rscd 5750/tcp +rscd 5750/udp +openmailg 5755/tcp +openmailg 5755/udp +x500ms 5757/tcp +x500ms 5757/udp +openmailns 5766/tcp +openmailns 5766/udp +s-openmail 5767/tcp +s-openmail 5767/udp +openmailpxy 5768/tcp +openmailpxy 5768/udp +spramsca 5769/tcp +spramsca 5769/udp +spramsd 5770/tcp +spramsd 5770/udp +netagent 5771/tcp +netagent 5771/udp +starfield-io 5777/tcp +starfield-io 5777/udp +vts-rpc 5780/tcp +3par-evts 5781/tcp +3par-evts 5781/udp +3par-mgmt 5782/tcp +3par-mgmt 5782/udp +3par-mgmt-ssl 5783/tcp +3par-mgmt-ssl 5783/udp +ibar 5784/udp +3par-rcopy 5785/tcp +3par-rcopy 5785/udp +cisco-redu 5786/udp +waascluster 5787/udp +xtreamx 5793/tcp +xtreamx 5793/udp +spdp 5794/udp +icmpd 5813/tcp +icmpd 5813/udp +spt-automation 5814/tcp +spt-automation 5814/udp +shiprush-d-ch 5841/tcp +reversion 5842/tcp +wherehoo 5859/tcp +wherehoo 5859/udp +ppsuitemsg 5863/tcp +ppsuitemsg 5863/udp +diameters 5868/tcp +diameters 5868/sctp +jute 5883/tcp +rfb 5900/tcp +rfb 5900/udp +cm 5910/tcp +cm 5910/udp +cm 5910/sctp +cpdlc 5911/tcp +cpdlc 5911/udp +cpdlc 5911/sctp +fis 5912/tcp +fis 5912/udp +fis 5912/sctp +ads-c 5913/tcp +ads-c 5913/udp +ads-c 5913/sctp +indy 5963/tcp +indy 5963/udp +mppolicy-v5 5968/tcp +mppolicy-v5 5968/udp +mppolicy-mgr 5969/tcp +mppolicy-mgr 5969/udp +couchdb 5984/tcp +couchdb 5984/udp +wsman 5985/tcp +wsman 5985/udp +wsmans 5986/tcp +wsmans 5986/udp +wbem-rmi 5987/tcp +wbem-rmi 5987/udp +wbem-http 5988/tcp +wbem-http 5988/udp +wbem-https 5989/tcp +wbem-https 5989/udp +wbem-exp-https 5990/tcp +wbem-exp-https 5990/udp +nuxsl 5991/tcp +nuxsl 5991/udp +consul-insight 5992/tcp +consul-insight 5992/udp +cim-rs 5993/tcp +cvsup 5999/tcp +cvsup 5999/udp +x11 6000/tcp +x11 6000/udp +ndl-ahp-svc 6064/tcp +ndl-ahp-svc 6064/udp +winpharaoh 6065/tcp +winpharaoh 6065/udp +ewctsp 6066/tcp +ewctsp 6066/udp +gsmp-ancp 6068/tcp +trip 6069/tcp +trip 6069/udp +messageasap 6070/tcp +messageasap 6070/udp +ssdtp 6071/tcp +ssdtp 6071/udp +diagnose-proc 6072/tcp +diagnose-proc 6072/udp +directplay8 6073/tcp +directplay8 6073/udp +max 6074/tcp +max 6074/udp +dpm-acm 6075/tcp +msft-dpm-cert 6076/tcp +iconstructsrv 6077/tcp +gue 6080/udp +geneve 6081/udp +p25cai 6082/udp +miami-bcast 6083/udp +reload-config 6084/tcp +konspire2b 6085/tcp +konspire2b 6085/udp +pdtp 6086/tcp +pdtp 6086/udp +ldss 6087/tcp +ldss 6087/udp +doglms 6088/tcp +doglms-notify 6088/udp +raxa-mgmt 6099/tcp +synchronet-db 6100/tcp +synchronet-db 6100/udp +synchronet-rtc 6101/tcp +synchronet-rtc 6101/udp +synchronet-upd 6102/tcp +synchronet-upd 6102/udp +rets 6103/tcp +rets 6103/udp +dbdb 6104/tcp +dbdb 6104/udp +primaserver 6105/tcp +primaserver 6105/udp +mpsserver 6106/tcp +mpsserver 6106/udp +etc-control 6107/tcp +etc-control 6107/udp +sercomm-scadmin 6108/tcp +sercomm-scadmin 6108/udp +globecast-id 6109/tcp +globecast-id 6109/udp +softcm 6110/tcp +softcm 6110/udp +spc 6111/tcp +spc 6111/udp +dtspcd 6112/tcp +dtspcd 6112/udp +dayliteserver 6113/tcp +wrspice 6114/tcp +xic 6115/tcp +xtlserv 6116/tcp +daylitetouch 6117/tcp +tipc 6118/udp +spdy 6121/tcp +bex-webadmin 6122/tcp +bex-webadmin 6122/udp +backup-express 6123/tcp +backup-express 6123/udp +pnbs 6124/tcp +pnbs 6124/udp +damewaremobgtwy 6130/tcp +nbt-wol 6133/tcp +nbt-wol 6133/udp +pulsonixnls 6140/tcp +pulsonixnls 6140/udp +meta-corp 6141/tcp +meta-corp 6141/udp +aspentec-lm 6142/tcp +aspentec-lm 6142/udp +watershed-lm 6143/tcp +watershed-lm 6143/udp +statsci1-lm 6144/tcp +statsci1-lm 6144/udp +statsci2-lm 6145/tcp +statsci2-lm 6145/udp +lonewolf-lm 6146/tcp +lonewolf-lm 6146/udp +montage-lm 6147/tcp +montage-lm 6147/udp +ricardo-lm 6148/tcp +ricardo-lm 6148/udp +tal-pod 6149/tcp +tal-pod 6149/udp +efb-aci 6159/tcp +ecmp 6160/tcp +ecmp-data 6160/udp +patrol-ism 6161/tcp +patrol-ism 6161/udp +patrol-coll 6162/tcp +patrol-coll 6162/udp +pscribe 6163/tcp +pscribe 6163/udp +lm-x 6200/tcp +lm-x 6200/udp +thermo-calc 6201/udp +qmtps 6209/tcp +qmtps 6209/udp +radmind 6222/tcp +radmind 6222/udp +jeol-nsdtp-1 6241/tcp +jeol-nsddp-1 6241/udp +jeol-nsdtp-2 6242/tcp +jeol-nsddp-2 6242/udp +jeol-nsdtp-3 6243/tcp +jeol-nsddp-3 6243/udp +jeol-nsdtp-4 6244/tcp +jeol-nsddp-4 6244/udp +tl1-raw-ssl 6251/tcp +tl1-raw-ssl 6251/udp +tl1-ssh 6252/tcp +tl1-ssh 6252/udp +crip 6253/tcp +crip 6253/udp +gld 6267/tcp +grid 6268/tcp +grid 6268/udp +grid-alt 6269/tcp +grid-alt 6269/udp +bmc-grx 6300/tcp +bmc-grx 6300/udp +bmc-ctd-ldap 6301/tcp +bmc-ctd-ldap 6301/udp +ufmp 6306/tcp +ufmp 6306/udp +scup 6315/tcp +scup-disc 6315/udp +abb-escp 6316/tcp +abb-escp 6316/udp +nav-data-cmd 6317/tcp +nav-data 6317/udp +repsvc 6320/tcp +repsvc 6320/udp +emp-server1 6321/tcp +emp-server1 6321/udp +emp-server2 6322/tcp +emp-server2 6322/udp +hrd-ncs 6324/tcp +hrd-ns-disc 6324/udp +dt-mgmtsvc 6325/tcp +dt-vra 6326/tcp +sflow 6343/tcp +sflow 6343/udp +streletz 6344/tcp +gnutella-svc 6346/tcp +gnutella-svc 6346/udp +gnutella-rtr 6347/tcp +gnutella-rtr 6347/udp +adap 6350/tcp +adap 6350/udp +pmcs 6355/tcp +pmcs 6355/udp +metaedit-mu 6360/tcp +metaedit-mu 6360/udp +ndn 6363/udp +metaedit-se 6370/tcp +metaedit-se 6370/udp +redis 6379/tcp +metatude-mds 6382/tcp +metatude-mds 6382/udp +clariion-evr01 6389/tcp +clariion-evr01 6389/udp +metaedit-ws 6390/tcp +metaedit-ws 6390/udp +faxcomservice 6417/tcp +faxcomservice 6417/udp +syserverremote 6418/tcp +svdrp 6419/tcp +svdrp-disc 6419/udp +nim-vdrshell 6420/tcp +nim-vdrshell 6420/udp +nim-wan 6421/tcp +nim-wan 6421/udp +pgbouncer 6432/tcp +heliosd 6440/tcp +tarp 6442/tcp +sun-sr-https 6443/tcp +sun-sr-https 6443/udp +sge-qmaster 6444/tcp +sge-qmaster 6444/udp +sge-execd 6445/tcp +sge-execd 6445/udp +mysql-proxy 6446/tcp +mysql-proxy 6446/udp +skip-cert-recv 6455/tcp +skip-cert-recv 6455/udp +skip-cert-send 6456/tcp +skip-cert-send 6456/udp +ieee11073-20701 6464/tcp +ieee11073-20701 6464/udp +lvision-lm 6471/tcp +lvision-lm 6471/udp +sun-sr-http 6480/tcp +sun-sr-http 6480/udp +servicetags 6481/tcp +servicetags 6481/udp +ldoms-mgmt 6482/tcp +ldoms-mgmt 6482/udp +SunVTS-RMI 6483/tcp +SunVTS-RMI 6483/udp +sun-sr-jms 6484/tcp +sun-sr-jms 6484/udp +sun-sr-iiop 6485/tcp +sun-sr-iiop 6485/udp +sun-sr-iiops 6486/tcp +sun-sr-iiops 6486/udp +sun-sr-iiop-aut 6487/tcp +sun-sr-iiop-aut 6487/udp +sun-sr-jmx 6488/tcp +sun-sr-jmx 6488/udp +sun-sr-admin 6489/tcp +sun-sr-admin 6489/udp +boks 6500/tcp +boks 6500/udp +boks-servc 6501/tcp +boks-servc 6501/udp +boks-servm 6502/tcp +boks-servm 6502/udp +boks-clntd 6503/tcp +boks-clntd 6503/udp +badm-priv 6505/tcp +badm-priv 6505/udp +badm-pub 6506/tcp +badm-pub 6506/udp +bdir-priv 6507/tcp +bdir-priv 6507/udp +bdir-pub 6508/tcp +bdir-pub 6508/udp +mgcs-mfp-port 6509/tcp +mgcs-mfp-port 6509/udp +mcer-port 6510/tcp +mcer-port 6510/udp +dccp-udp 6511/udp +netconf-tls 6513/tcp +syslog-tls 6514/tcp +syslog-tls 6514/udp +syslog-tls 6514/dccp +elipse-rec 6515/tcp +elipse-rec 6515/udp +lds-distrib 6543/tcp +lds-distrib 6543/udp +lds-dump 6544/tcp +lds-dump 6544/udp +apc-6547 6547/tcp +apc-6547 6547/udp +apc-6548 6548/tcp +apc-6548 6548/udp +apc-6549 6549/tcp +apc-6549 6549/udp +fg-sysupdate 6550/tcp +fg-sysupdate 6550/udp +sum 6551/tcp +sum 6551/udp +checkmk-agent 6556/tcp +xdsxdm 6558/tcp +xdsxdm 6558/udp +sane-port 6566/tcp +sane-port 6566/udp +canit-store 6568/tcp +rp-reputation 6568/udp +affiliate 6579/tcp +affiliate 6579/udp +parsec-master 6580/tcp +parsec-master 6580/udp +parsec-peer 6581/tcp +parsec-peer 6581/udp +parsec-game 6582/tcp +parsec-game 6582/udp +joaJewelSuite 6583/tcp +joaJewelSuite 6583/udp +mshvlm 6600/tcp +mstmg-sstp 6601/tcp +wsscomfrmwk 6602/tcp +odette-ftps 6619/tcp +odette-ftps 6619/udp +kftp-data 6620/tcp +kftp-data 6620/udp +kftp 6621/tcp +kftp 6621/udp +mcftp 6622/tcp +mcftp 6622/udp +ktelnet 6623/tcp +ktelnet 6623/udp +datascaler-db 6624/tcp +datascaler-ctl 6625/tcp +wago-service 6626/tcp +wago-service 6626/udp +nexgen 6627/tcp +nexgen 6627/udp +afesc-mc 6628/tcp +afesc-mc 6628/udp +nexgen-aux 6629/tcp +nexgen-aux 6629/udp +mxodbc-connect 6632/tcp +cisco-vpath-tun 6633/udp +mpls-pm 6634/udp +mpls-udp 6635/udp +mpls-udp-dtls 6636/udp +ovsdb 6640/tcp +openflow 6653/tcp +openflow 6653/udp +pcs-sf-ui-man 6655/tcp +emgmsg 6656/tcp +palcom-disc 6657/udp +ircu 6665/tcp +vocaltec-gold 6670/tcp +vocaltec-gold 6670/udp +p4p-portal 6671/tcp +p4p-portal 6671/udp +vision-server 6672/tcp +vision-server 6672/udp +vision-elmd 6673/tcp +vision-elmd 6673/udp +vfbp 6678/tcp +vfbp-disc 6678/udp +osaut 6679/tcp +osaut 6679/udp +clever-ctrace 6687/tcp +clever-tcpip 6688/tcp +tsa 6689/tcp +tsa 6689/udp +cleverdetect 6690/tcp +babel 6696/udp +ircs-u 6697/tcp +babel-dtls 6699/udp +kti-icad-srvr 6701/tcp +kti-icad-srvr 6701/udp +e-design-net 6702/tcp +e-design-net 6702/udp +e-design-web 6703/tcp +e-design-web 6703/udp +frc-hp 6704/sctp +frc-mp 6705/sctp +frc-lp 6706/sctp +ibprotocol 6714/tcp +ibprotocol 6714/udp +fibotrader-com 6715/tcp +fibotrader-com 6715/udp +princity-agent 6716/tcp +bmc-perf-agent 6767/tcp +bmc-perf-agent 6767/udp +bmc-perf-mgrd 6768/tcp +bmc-perf-mgrd 6768/udp +adi-gxp-srvprt 6769/tcp +adi-gxp-srvprt 6769/udp +plysrv-http 6770/tcp +plysrv-http 6770/udp +plysrv-https 6771/tcp +plysrv-https 6771/udp +ntz-tracker 6777/tcp +ntz-p2p-storage 6778/tcp +bfd-lag 6784/udp +dgpf-exchg 6785/tcp +dgpf-exchg 6785/udp +smc-jmx 6786/tcp +smc-jmx 6786/udp +smc-admin 6787/tcp +smc-admin 6787/udp +smc-http 6788/tcp +smc-http 6788/udp +radg 6789/tcp +hnmp 6790/tcp +hnmp 6790/udp +hnm 6791/tcp +hnm 6791/udp +acnet 6801/tcp +acnet 6801/udp +pentbox-sim 6817/tcp +ambit-lm 6831/tcp +ambit-lm 6831/udp +netmo-default 6841/tcp +netmo-default 6841/udp +netmo-http 6842/tcp +netmo-http 6842/udp +iccrushmore 6850/tcp +iccrushmore 6850/udp +acctopus-cc 6868/tcp +acctopus-st 6868/udp +muse 6888/tcp +muse 6888/udp +rtimeviewer 6900/tcp +jetstream 6901/tcp +split-ping 6924/tcp +split-ping 6924/udp +ethoscan 6935/tcp +ethoscan 6935/udp +xsmsvc 6936/tcp +xsmsvc 6936/udp +bioserver 6946/tcp +bioserver 6946/udp +otlp 6951/tcp +otlp 6951/udp +jmact3 6961/tcp +jmact3 6961/udp +jmevt2 6962/tcp +jmevt2 6962/udp +swismgr1 6963/tcp +swismgr1 6963/udp +swismgr2 6964/tcp +swismgr2 6964/udp +swistrap 6965/tcp +swistrap 6965/udp +swispol 6966/tcp +swispol 6966/udp +acmsoda 6969/tcp +acmsoda 6969/udp +conductor 6970/tcp +conductor-mpx 6970/sctp +MobilitySrv 6997/tcp +MobilitySrv 6997/udp +iatp-highpri 6998/tcp +iatp-highpri 6998/udp +iatp-normalpri 6999/tcp +iatp-normalpri 6999/udp +afs3-fileserver 7000/tcp +afs3-fileserver 7000/udp +afs3-callback 7001/tcp +afs3-callback 7001/udp +afs3-prserver 7002/tcp +afs3-prserver 7002/udp +afs3-vlserver 7003/tcp +afs3-vlserver 7003/udp +afs3-kaserver 7004/tcp +afs3-kaserver 7004/udp +afs3-volser 7005/tcp +afs3-volser 7005/udp +afs3-errors 7006/tcp +afs3-errors 7006/udp +afs3-bos 7007/tcp +afs3-bos 7007/udp +afs3-update 7008/tcp +afs3-update 7008/udp +afs3-rmtsys 7009/tcp +afs3-rmtsys 7009/udp +ups-onlinet 7010/tcp +ups-onlinet 7010/udp +talon-disc 7011/tcp +talon-disc 7011/udp +talon-engine 7012/tcp +talon-engine 7012/udp +microtalon-dis 7013/tcp +microtalon-dis 7013/udp +microtalon-com 7014/tcp +microtalon-com 7014/udp +talon-webserver 7015/tcp +talon-webserver 7015/udp +spg 7016/tcp +spg 7016/udp +grasp 7017/tcp +grasp 7017/udp +fisa-svc 7018/tcp +doceri-ctl 7019/tcp +doceri-view 7019/udp +dpserve 7020/tcp +dpserve 7020/udp +dpserveadmin 7021/tcp +dpserveadmin 7021/udp +ctdp 7022/tcp +ctdp 7022/udp +ct2nmcs 7023/tcp +ct2nmcs 7023/udp +vmsvc 7024/tcp +vmsvc 7024/udp +vmsvc-2 7025/tcp +vmsvc-2 7025/udp +loreji-panel 7026/tcp +op-probe 7030/tcp +op-probe 7030/udp +iposplanet 7031/tcp +quest-disc 7040/udp +arcp 7070/tcp +arcp 7070/udp +iwg1 7071/tcp +iwg1 7071/udp +iba-cfg 7072/tcp +iba-cfg-disc 7072/udp +martalk 7073/tcp +empowerid 7080/tcp +empowerid 7080/udp +zixi-transport 7088/udp +jdp-disc 7095/udp +lazy-ptop 7099/tcp +lazy-ptop 7099/udp +font-service 7100/tcp +font-service 7100/udp +elcn 7101/tcp +elcn 7101/udp +aes-x170 7107/udp +rothaga 7117/tcp +virprot-lm 7121/tcp +virprot-lm 7121/udp +scenidm 7128/tcp +scenidm 7128/udp +scenccs 7129/tcp +scenccs 7129/udp +cabsm-comm 7161/tcp +cabsm-comm 7161/udp +caistoragemgr 7162/tcp +caistoragemgr 7162/udp +cacsambroker 7163/tcp +cacsambroker 7163/udp +fsr 7164/tcp +fsr 7164/udp +doc-server 7165/tcp +doc-server 7165/udp +aruba-server 7166/tcp +aruba-server 7166/udp +casrmagent 7167/tcp +cnckadserver 7168/tcp +ccag-pib 7169/tcp +ccag-pib 7169/udp +nsrp 7170/tcp +nsrp 7170/udp +drm-production 7171/tcp +drm-production 7171/udp +metalbend 7172/tcp +zsecure 7173/tcp +clutild 7174/tcp +clutild 7174/udp +janus-disc 7181/udp +fodms 7200/tcp +fodms 7200/udp +dlip 7201/tcp +dlip 7201/udp +pon-ictp 7202/tcp +PS-Server 7215/tcp +PS-Capture-Pro 7216/tcp +ramp 7227/tcp +ramp 7227/udp +citrixupp 7228/tcp +citrixuppg 7229/tcp +asa-gateways 7234/tcp +aspcoordination 7235/udp +display 7236/tcp +pads 7237/tcp +frc-hicp 7244/tcp +frc-hicp-disc 7244/udp +cnap 7262/tcp +cnap 7262/udp +watchme-7272 7272/tcp +watchme-7272 7272/udp +oma-rlp 7273/tcp +oma-rlp 7273/udp +oma-rlp-s 7274/tcp +oma-rlp-s 7274/udp +oma-ulp 7275/tcp +oma-ulp 7275/udp +oma-ilp 7276/tcp +oma-ilp 7276/udp +oma-ilp-s 7277/tcp +oma-ilp-s 7277/udp +oma-dcdocbs 7278/tcp +oma-dcdocbs 7278/udp +ctxlic 7279/tcp +ctxlic 7279/udp +itactionserver1 7280/tcp +itactionserver1 7280/udp +itactionserver2 7281/tcp +itactionserver2 7281/udp +mzca-action 7282/tcp +mzca-alert 7282/udp +genstat 7283/tcp +lcm-server 7365/tcp +lcm-server 7365/udp +mindfilesys 7391/tcp +mindfilesys 7391/udp +mrssrendezvous 7392/tcp +mrssrendezvous 7392/udp +nfoldman 7393/tcp +nfoldman 7393/udp +fse 7394/tcp +fse 7394/udp +winqedit 7395/tcp +winqedit 7395/udp +hexarc 7397/tcp +hexarc 7397/udp +rtps-discovery 7400/tcp +rtps-discovery 7400/udp +rtps-dd-ut 7401/tcp +rtps-dd-ut 7401/udp +rtps-dd-mt 7402/tcp +rtps-dd-mt 7402/udp +ionixnetmon 7410/tcp +ionixnetmon 7410/udp +daqstream 7411/tcp +daqstream 7411/udp +ipluminary 7420/udp +mtportmon 7421/tcp +mtportmon 7421/udp +pmdmgr 7426/tcp +pmdmgr 7426/udp +oveadmgr 7427/tcp +oveadmgr 7427/udp +ovladmgr 7428/tcp +ovladmgr 7428/udp +opi-sock 7429/tcp +opi-sock 7429/udp +xmpv7 7430/tcp +xmpv7 7430/udp +pmd 7431/tcp +pmd 7431/udp +faximum 7437/tcp +faximum 7437/udp +oracleas-https 7443/tcp +oracleas-https 7443/udp +sttunnel 7471/tcp +rise 7473/tcp +rise 7473/udp +neo4j 7474/tcp +openit 7478/tcp +telops-lmd 7491/tcp +telops-lmd 7491/udp +silhouette 7500/tcp +silhouette 7500/udp +ovbus 7501/tcp +ovbus 7501/udp +adcp 7508/tcp +acplt 7509/tcp +ovhpas 7510/tcp +ovhpas 7510/udp +pafec-lm 7511/tcp +pafec-lm 7511/udp +saratoga 7542/tcp +saratoga 7542/udp +atul 7543/tcp +atul 7543/udp +nta-ds 7544/tcp +nta-ds 7544/udp +nta-us 7545/tcp +nta-us 7545/udp +cfs 7546/tcp +cfs 7546/udp +cwmp 7547/tcp +cwmp 7547/udp +tidp 7548/tcp +tidp 7548/udp +nls-tl 7549/tcp +nls-tl 7549/udp +cloudsignaling 7550/udp +controlone-con 7551/tcp +sncp 7560/tcp +sncp 7560/udp +cfw 7563/tcp +vsi-omega 7566/tcp +vsi-omega 7566/udp +dell-eql-asm 7569/tcp +aries-kfinder 7570/tcp +aries-kfinder 7570/udp +coherence 7574/tcp +coherence-disc 7574/udp +sun-lm 7588/tcp +sun-lm 7588/udp +mipi-debug 7606/tcp +mipi-debug 7606/udp +indi 7624/tcp +indi 7624/udp +simco 7626/tcp +simco 7626/sctp +soap-http 7627/tcp +soap-http 7627/udp +zen-pawn 7628/tcp +zen-pawn 7628/udp +xdas 7629/tcp +xdas 7629/udp +hawk 7630/tcp +tesla-sys-msg 7631/tcp +pmdfmgt 7633/tcp +pmdfmgt 7633/udp +cuseeme 7648/tcp +cuseeme 7648/udp +rome 7663/tcp +rome 7663/udp +imqstomp 7672/tcp +imqstomps 7673/tcp +imqtunnels 7674/tcp +imqtunnels 7674/udp +imqtunnel 7675/tcp +imqtunnel 7675/udp +imqbrokerd 7676/tcp +imqbrokerd 7676/udp +sun-user-https 7677/tcp +sun-user-https 7677/udp +pando-pub 7680/tcp +pando-pub 7680/udp +dmt 7683/tcp +bolt 7687/tcp +collaber 7689/tcp +collaber 7689/udp +klio 7697/tcp +klio 7697/udp +em7-secom 7700/tcp +nfapi 7701/sctp +sync-em7 7707/tcp +sync-em7 7707/udp +scinet 7708/tcp +scinet 7708/udp +medimageportal 7720/tcp +medimageportal 7720/udp +nsdeepfreezectl 7724/tcp +nsdeepfreezectl 7724/udp +nitrogen 7725/tcp +nitrogen 7725/udp +freezexservice 7726/tcp +freezexservice 7726/udp +trident-data 7727/tcp +trident-data 7727/udp +osvr 7728/tcp +osvr 7728/udp +osvr 7728/sctp +smip 7734/tcp +smip 7734/udp +aiagent 7738/tcp +aiagent 7738/udp +scriptview 7741/tcp +scriptview 7741/udp +msss 7742/tcp +sstp-1 7743/tcp +sstp-1 7743/udp +raqmon-pdu 7744/tcp +raqmon-pdu 7744/udp +prgp 7747/tcp +prgp 7747/udp +inetfs 7775/tcp +cbt 7777/tcp +cbt 7777/udp +interwise 7778/tcp +interwise 7778/udp +vstat 7779/tcp +vstat 7779/udp +accu-lmgr 7781/tcp +accu-lmgr 7781/udp +s-bfd 7784/udp +minivend 7786/tcp +minivend 7786/udp +popup-reminders 7787/tcp +popup-reminders 7787/udp +office-tools 7789/tcp +office-tools 7789/udp +q3ade 7794/tcp +q3ade 7794/udp +pnet-conn 7797/tcp +pnet-conn 7797/udp +pnet-enc 7798/tcp +pnet-enc 7798/udp +altbsdp 7799/tcp +altbsdp 7799/udp +asr 7800/tcp +asr 7800/udp +ssp-client 7801/tcp +ssp-client 7801/udp +vns-tp 7802/udp +rbt-wanopt 7810/tcp +rbt-wanopt 7810/udp +apc-7845 7845/tcp +apc-7845 7845/udp +apc-7846 7846/tcp +apc-7846 7846/udp +csoauth 7847/tcp +mobileanalyzer 7869/tcp +rbt-smc 7870/tcp +mdm 7871/tcp +mipv6tls 7872/udp +owms 7878/tcp +pss 7880/tcp +pss 7880/udp +ubroker 7887/tcp +ubroker 7887/udp +mevent 7900/tcp +mevent 7900/udp +tnos-sp 7901/tcp +tnos-sp 7901/udp +tnos-dp 7902/tcp +tnos-dp 7902/udp +tnos-dps 7903/tcp +tnos-dps 7903/udp +qo-secure 7913/tcp +qo-secure 7913/udp +t2-drm 7932/tcp +t2-drm 7932/udp +t2-brm 7933/tcp +t2-brm 7933/udp +generalsync 7962/tcp +generalsync 7962/udp +supercell 7967/tcp +supercell 7967/udp +micromuse-ncps 7979/tcp +micromuse-ncps 7979/udp +quest-vista 7980/tcp +quest-vista 7980/udp +sossd-collect 7981/tcp +sossd-agent 7982/tcp +sossd-disc 7982/udp +pushns 7997/tcp +usicontentpush 7998/udp +irdmi2 7999/tcp +irdmi2 7999/udp +irdmi 8000/tcp +irdmi 8000/udp +vcom-tunnel 8001/tcp +vcom-tunnel 8001/udp +teradataordbms 8002/tcp +teradataordbms 8002/udp +mcreport 8003/tcp +mcreport 8003/udp +p2pevolvenet 8004/tcp +mxi 8005/tcp +mxi 8005/udp +wpl-analytics 8006/tcp +wpl-disc 8006/udp +warppipe 8007/tcp +warppipe 8007/udp +http-alt 8008/tcp +http-alt 8008/udp +nvme-disc 8009/tcp +cfg-cloud 8015/tcp +ads-s 8016/tcp +qbdb 8019/tcp +qbdb 8019/udp +intu-ec-svcdisc 8020/tcp +intu-ec-svcdisc 8020/udp +intu-ec-client 8021/tcp +intu-ec-client 8021/udp +oa-system 8022/tcp +oa-system 8022/udp +arca-api 8023/tcp +arca-api 8023/udp +ca-audit-da 8025/tcp +ca-audit-da 8025/udp +ca-audit-ds 8026/tcp +ca-audit-ds 8026/udp +papachi-p2p-srv 8027/tcp +papachi-p2p-srv 8027/udp +pro-ed 8032/tcp +pro-ed 8032/udp +mindprint 8033/tcp +mindprint 8033/udp +vantronix-mgmt 8034/tcp +vantronix-mgmt 8034/udp +ampify 8040/tcp +ampify 8040/udp +enguity-xccetp 8041/tcp +enguity-xccetp 8041/udp +fs-agent 8042/tcp +fs-server 8043/tcp +fs-mgmt 8044/tcp +rocrail 8051/tcp +senomix01 8052/tcp +senomix01 8052/udp +senomix02 8053/tcp +senomix02 8053/udp +senomix03 8054/tcp +senomix03 8054/udp +senomix04 8055/tcp +senomix04 8055/udp +senomix05 8056/tcp +senomix05 8056/udp +senomix06 8057/tcp +senomix06 8057/udp +senomix07 8058/tcp +senomix07 8058/udp +senomix08 8059/tcp +senomix08 8059/udp +aero 8060/udp +toad-bi-appsrvr 8066/tcp +infi-async 8067/tcp +ucs-isc 8070/tcp +gadugadu 8074/tcp +gadugadu 8074/udp +mles 8077/tcp +http-alt 8080/tcp +http-alt 8080/udp +sunproxyadmin 8081/tcp +sunproxyadmin 8081/udp +us-cli 8082/tcp +us-cli 8082/udp +us-srv 8083/tcp +us-srv 8083/udp +websnp 8084/tcp +d-s-n 8086/tcp +d-s-n 8086/udp +simplifymedia 8087/tcp +simplifymedia 8087/udp +radan-http 8088/tcp +radan-http 8088/udp +opsmessaging 8090/tcp +jamlink 8091/tcp +sac 8097/tcp +sac 8097/udp +xprint-server 8100/tcp +xprint-server 8100/udp +ldoms-migr 8101/tcp +kz-migr 8102/tcp +skynetflow 8111/udp +mtl8000-matrix 8115/tcp +mtl8000-matrix 8115/udp +cp-cluster 8116/tcp +cp-cluster 8116/udp +purityrpc 8117/tcp +privoxy 8118/tcp +privoxy 8118/udp +apollo-data 8121/tcp +apollo-data 8121/udp +apollo-admin 8122/tcp +apollo-admin 8122/udp +paycash-online 8128/tcp +paycash-online 8128/udp +paycash-wbp 8129/tcp +paycash-wbp 8129/udp +indigo-vrmi 8130/tcp +indigo-vrmi 8130/udp +indigo-vbcp 8131/tcp +indigo-vbcp 8131/udp +dbabble 8132/tcp +dbabble 8132/udp +puppet 8140/tcp +isdd 8148/tcp +isdd 8148/udp +eor-game 8149/udp +quantastor 8153/tcp +patrol 8160/tcp +patrol 8160/udp +patrol-snmp 8161/tcp +patrol-snmp 8161/udp +lpar2rrd 8162/tcp +intermapper 8181/tcp +vmware-fdm 8182/tcp +vmware-fdm 8182/udp +proremote 8183/tcp +itach 8184/tcp +itach 8184/udp +gcp-rphy 8190/tcp +limnerpressure 8191/tcp +spytechphone 8192/tcp +spytechphone 8192/udp +blp1 8194/tcp +blp1 8194/udp +blp2 8195/tcp +blp2 8195/udp +vvr-data 8199/tcp +vvr-data 8199/udp +trivnet1 8200/tcp +trivnet1 8200/udp +trivnet2 8201/tcp +trivnet2 8201/udp +aesop 8202/udp +lm-perfworks 8204/tcp +lm-perfworks 8204/udp +lm-instmgr 8205/tcp +lm-instmgr 8205/udp +lm-dta 8206/tcp +lm-dta 8206/udp +lm-sserver 8207/tcp +lm-sserver 8207/udp +lm-webwatcher 8208/tcp +lm-webwatcher 8208/udp +aruba-papi 8211/udp +rexecj 8230/tcp +rexecj 8230/udp +hncp-udp-port 8231/udp +hncp-dtls-port 8232/udp +synapse-nhttps 8243/tcp +synapse-nhttps 8243/udp +espeasy-p2p 8266/udp +robot-remote 8270/tcp +pando-sec 8276/tcp +pando-sec 8276/udp +synapse-nhttp 8280/tcp +synapse-nhttp 8280/udp +libelle 8282/tcp +libelle-disc 8282/udp +blp3 8292/tcp +blp3 8292/udp +hiperscan-id 8293/tcp +blp4 8294/tcp +blp4 8294/udp +tmi 8300/tcp +tmi 8300/udp +amberon 8301/tcp +amberon 8301/udp +hub-open-net 8313/tcp +tnp-discover 8320/tcp +tnp-discover 8320/udp +tnp 8321/tcp +tnp 8321/udp +garmin-marine 8322/tcp +garmin-marine 8322/udp +server-find 8351/tcp +server-find 8351/udp +cruise-enum 8376/tcp +cruise-enum 8376/udp +cruise-swroute 8377/tcp +cruise-swroute 8377/udp +cruise-config 8378/tcp +cruise-config 8378/udp +cruise-diags 8379/tcp +cruise-diags 8379/udp +cruise-update 8380/tcp +cruise-update 8380/udp +m2mservices 8383/tcp +m2mservices 8383/udp +marathontp 8384/udp +cvd 8400/tcp +cvd 8400/udp +sabarsd 8401/tcp +sabarsd 8401/udp +abarsd 8402/tcp +abarsd 8402/udp +admind 8403/tcp +admind 8403/udp +svcloud 8404/tcp +svbackup 8405/tcp +dlpx-sp 8415/tcp +espeech 8416/tcp +espeech 8416/udp +espeech-rtp 8417/tcp +espeech-rtp 8417/udp +aritts 8423/tcp +cybro-a-bus 8442/tcp +cybro-a-bus 8442/udp +pcsync-https 8443/tcp +pcsync-https 8443/udp +pcsync-http 8444/tcp +pcsync-http 8444/udp +copy 8445/tcp +copy-disc 8445/udp +npmp 8450/tcp +npmp 8450/udp +nexentamv 8457/tcp +cisco-avp 8470/tcp +pim-port 8471/tcp +pim-port 8471/sctp +otv 8472/tcp +otv 8472/udp +vp2p 8473/tcp +vp2p 8473/udp +noteshare 8474/tcp +noteshare 8474/udp +fmtp 8500/tcp +fmtp 8500/udp +cmtp-mgt 8501/tcp +cmtp-av 8501/udp +ftnmtp 8502/tcp +lsp-self-ping 8503/udp +rtsp-alt 8554/tcp +rtsp-alt 8554/udp +d-fence 8555/tcp +d-fence 8555/udp +dof-tunnel 8567/tcp +dof-tunnel 8567/udp +asterix 8600/tcp +asterix 8600/udp +canon-cpp-disc 8609/udp +canon-mfnp 8610/tcp +canon-mfnp 8610/udp +canon-bjnp1 8611/tcp +canon-bjnp1 8611/udp +canon-bjnp2 8612/tcp +canon-bjnp2 8612/udp +canon-bjnp3 8613/tcp +canon-bjnp3 8613/udp +canon-bjnp4 8614/tcp +canon-bjnp4 8614/udp +imink 8615/tcp +monetra 8665/tcp +monetra-admin 8666/tcp +msi-cps-rm 8675/tcp +msi-cps-rm-disc 8675/udp +sun-as-jmxrmi 8686/tcp +sun-as-jmxrmi 8686/udp +openremote-ctrl 8688/tcp +vnyx 8699/tcp +semi-grpc 8710/tcp +nvc 8711/tcp +dtp-net 8732/udp +ibus 8733/tcp +ibus 8733/udp +dey-keyneg 8750/tcp +mc-appserver 8763/tcp +mc-appserver 8763/udp +openqueue 8764/tcp +openqueue 8764/udp +ultraseek-http 8765/tcp +ultraseek-http 8765/udp +amcs 8766/tcp +amcs 8766/udp +core-of-source 8767/tcp +sandpolis 8768/tcp +oktaauthenticat 8769/tcp +dpap 8770/tcp +dpap 8770/udp +uec 8778/tcp +msgclnt 8786/tcp +msgclnt 8786/udp +msgsrvr 8787/tcp +msgsrvr 8787/udp +acd-pm 8793/tcp +acd-pm 8793/udp +sunwebadmin 8800/tcp +sunwebadmin 8800/udp +truecm 8804/tcp +truecm 8804/udp +pfcp 8805/udp +hes-clip 8807/udp +ssports-bcast 8808/udp +3gpp-monp 8809/udp +dxspider 8873/tcp +dxspider 8873/udp +cddbp-alt 8880/tcp +cddbp-alt 8880/udp +galaxy4d 8881/tcp +secure-mqtt 8883/tcp +secure-mqtt 8883/udp +ddi-tcp-1 8888/tcp +ddi-udp-1 8888/udp +ddi-tcp-2 8889/tcp +ddi-udp-2 8889/udp +ddi-tcp-3 8890/tcp +ddi-udp-3 8890/udp +ddi-tcp-4 8891/tcp +ddi-udp-4 8891/udp +ddi-tcp-5 8892/tcp +ddi-udp-5 8892/udp +ddi-tcp-6 8893/tcp +ddi-udp-6 8893/udp +ddi-tcp-7 8894/tcp +ddi-udp-7 8894/udp +ospf-lite 8899/tcp +ospf-lite 8899/udp +jmb-cds1 8900/tcp +jmb-cds1 8900/udp +jmb-cds2 8901/tcp +jmb-cds2 8901/udp +dpp 8908/tcp +manyone-http 8910/tcp +manyone-http 8910/udp +manyone-xml 8911/tcp +manyone-xml 8911/udp +wcbackup 8912/tcp +wcbackup 8912/udp +dragonfly 8913/tcp +dragonfly 8913/udp +twds 8937/tcp +ub-dns-control 8953/tcp +cumulus-admin 8954/tcp +cumulus-admin 8954/udp +nod-provider 8980/tcp +nod-provider 8980/udp +nod-client 8981/udp +sunwebadmins 8989/tcp +sunwebadmins 8989/udp +http-wmap 8990/tcp +http-wmap 8990/udp +https-wmap 8991/tcp +https-wmap 8991/udp +oracle-ms-ens 8997/tcp +canto-roboflow 8998/tcp +bctp 8999/tcp +bctp 8999/udp +cslistener 9000/tcp +cslistener 9000/udp +etlservicemgr 9001/tcp +etlservicemgr 9001/udp +dynamid 9002/tcp +dynamid 9002/udp +golem 9005/tcp +ogs-client 9007/udp +ogs-server 9008/tcp +pichat 9009/tcp +pichat 9009/udp +sdr 9010/tcp +d-star 9011/udp +tambora 9020/tcp +tambora 9020/udp +panagolin-ident 9021/tcp +panagolin-ident 9021/udp +paragent 9022/tcp +paragent 9022/udp +swa-1 9023/tcp +swa-1 9023/udp +swa-2 9024/tcp +swa-2 9024/udp +swa-3 9025/tcp +swa-3 9025/udp +swa-4 9026/tcp +swa-4 9026/udp +versiera 9050/tcp +fio-cmgmt 9051/tcp +CardWeb-IO 9060/tcp +CardWeb-RT 9060/udp +glrpc 9080/tcp +glrpc 9080/udp +cisco-aqos 9081/udp +lcs-ap 9082/sctp +emc-pp-mgmtsvc 9083/tcp +aurora 9084/tcp +aurora 9084/udp +aurora 9084/sctp +ibm-rsyscon 9085/tcp +ibm-rsyscon 9085/udp +net2display 9086/tcp +net2display 9086/udp +classic 9087/tcp +classic 9087/udp +sqlexec 9088/tcp +sqlexec 9088/udp +sqlexec-ssl 9089/tcp +sqlexec-ssl 9089/udp +websm 9090/tcp +websm 9090/udp +xmltec-xmlmail 9091/tcp +xmltec-xmlmail 9091/udp +XmlIpcRegSvc 9092/tcp +XmlIpcRegSvc 9092/udp +copycat 9093/tcp +hp-pdl-datastr 9100/tcp +hp-pdl-datastr 9100/udp +pdl-datastream 9100/tcp +pdl-datastream 9100/udp +bacula-dir 9101/tcp +bacula-dir 9101/udp +bacula-fd 9102/tcp +bacula-fd 9102/udp +bacula-sd 9103/tcp +bacula-sd 9103/udp +peerwire 9104/tcp +peerwire 9104/udp +xadmin 9105/tcp +xadmin 9105/udp +astergate 9106/tcp +astergate-disc 9106/udp +astergatefax 9107/tcp +hexxorecore 9111/tcp +hexxorecore 9111/udp +mxit 9119/tcp +mxit 9119/udp +grcmp 9122/tcp +grcp 9123/tcp +dddp 9131/tcp +dddp 9131/udp +apani1 9160/tcp +apani1 9160/udp +apani2 9161/tcp +apani2 9161/udp +apani3 9162/tcp +apani3 9162/udp +apani4 9163/tcp +apani4 9163/udp +apani5 9164/tcp +apani5 9164/udp +sun-as-jpda 9191/tcp +sun-as-jpda 9191/udp +wap-wsp 9200/tcp +wap-wsp 9200/udp +wap-wsp-wtp 9201/tcp +wap-wsp-wtp 9201/udp +wap-wsp-s 9202/tcp +wap-wsp-s 9202/udp +wap-wsp-wtp-s 9203/tcp +wap-wsp-wtp-s 9203/udp +wap-vcard 9204/tcp +wap-vcard 9204/udp +wap-vcal 9205/tcp +wap-vcal 9205/udp +wap-vcard-s 9206/tcp +wap-vcard-s 9206/udp +wap-vcal-s 9207/tcp +wap-vcal-s 9207/udp +rjcdb-vcards 9208/tcp +rjcdb-vcards 9208/udp +almobile-system 9209/tcp +almobile-system 9209/udp +oma-mlp 9210/tcp +oma-mlp 9210/udp +oma-mlp-s 9211/tcp +oma-mlp-s 9211/udp +serverviewdbms 9212/tcp +serverviewdbms 9212/udp +serverstart 9213/tcp +serverstart 9213/udp +ipdcesgbs 9214/tcp +ipdcesgbs 9214/udp +insis 9215/tcp +insis 9215/udp +acme 9216/tcp +acme 9216/udp +fsc-port 9217/tcp +fsc-port 9217/udp +teamcoherence 9222/tcp +teamcoherence 9222/udp +mon 9255/tcp +mon 9255/udp +traingpsdata 9277/udp +pegasus 9278/tcp +pegasus 9278/udp +pegasus-ctl 9279/tcp +pegasus-ctl 9279/udp +pgps 9280/tcp +pgps 9280/udp +swtp-port1 9281/tcp +swtp-port1 9281/udp +swtp-port2 9282/tcp +swtp-port2 9282/udp +callwaveiam 9283/tcp +callwaveiam 9283/udp +visd 9284/tcp +visd 9284/udp +n2h2server 9285/tcp +n2h2server 9285/udp +n2receive 9286/udp +cumulus 9287/tcp +cumulus 9287/udp +armtechdaemon 9292/tcp +armtechdaemon 9292/udp +storview 9293/tcp +storview 9293/udp +armcenterhttp 9294/tcp +armcenterhttp 9294/udp +armcenterhttps 9295/tcp +armcenterhttps 9295/udp +vrace 9300/tcp +vrace 9300/udp +sphinxql 9306/tcp +sapms 9310/tcp +sphinxapi 9312/tcp +secure-ts 9318/tcp +secure-ts 9318/udp +guibase 9321/tcp +guibase 9321/udp +gnmi-gnoi 9339/tcp +mpidcmgr 9343/tcp +mpidcmgr 9343/udp +mphlpdmc 9344/tcp +mphlpdmc 9344/udp +rancher 9345/tcp +ctechlicensing 9346/tcp +ctechlicensing 9346/udp +fjdmimgr 9374/tcp +fjdmimgr 9374/udp +boxp 9380/tcp +boxp 9380/udp +d2dconfig 9387/tcp +d2ddatatrans 9388/tcp +adws 9389/tcp +otp 9390/tcp +fjinvmgr 9396/tcp +fjinvmgr 9396/udp +mpidcagt 9397/tcp +mpidcagt 9397/udp +sec-t4net-srv 9400/tcp +sec-t4net-srv 9400/udp +sec-t4net-clt 9401/tcp +sec-t4net-clt 9401/udp +sec-pc2fax-srv 9402/tcp +sec-pc2fax-srv 9402/udp +git 9418/tcp +git 9418/udp +tungsten-https 9443/tcp +tungsten-https 9443/udp +wso2esb-console 9444/tcp +wso2esb-console 9444/udp +mindarray-ca 9445/tcp +sntlkeyssrvr 9450/tcp +sntlkeyssrvr 9450/udp +ismserver 9500/tcp +ismserver 9500/udp +sma-spw 9522/udp +mngsuite 9535/tcp +mngsuite 9535/udp +laes-bf 9536/tcp +laes-bf 9536/udp +trispen-sra 9555/tcp +trispen-sra 9555/udp +p4runtime 9559/tcp +ldgateway 9592/tcp +ldgateway 9592/udp +cba8 9593/tcp +cba8 9593/udp +msgsys 9594/tcp +msgsys 9594/udp +pds 9595/tcp +pds 9595/udp +mercury-disc 9596/tcp +mercury-disc 9596/udp +pd-admin 9597/tcp +pd-admin 9597/udp +vscp 9598/tcp +vscp 9598/udp +robix 9599/tcp +robix 9599/udp +micromuse-ncpw 9600/tcp +micromuse-ncpw 9600/udp +streamcomm-ds 9612/tcp +streamcomm-ds 9612/udp +iadt-tls 9614/tcp +erunbook-agent 9616/tcp +erunbook-server 9617/tcp +condor 9618/tcp +condor 9618/udp +odbcpathway 9628/tcp +odbcpathway 9628/udp +uniport 9629/tcp +uniport 9629/udp +peoctlr 9630/tcp +peocoll 9631/tcp +mc-comm 9632/udp +pqsflows 9640/tcp +zoomcp 9666/tcp +xmms2 9667/tcp +xmms2 9667/udp +tec5-sdctp 9668/tcp +tec5-sdctp 9668/udp +client-wakeup 9694/tcp +client-wakeup 9694/udp +ccnx 9695/tcp +ccnx 9695/udp +board-roar 9700/tcp +board-roar 9700/udp +l5nas-parchan 9747/tcp +l5nas-parchan 9747/udp +board-voip 9750/tcp +board-voip 9750/udp +rasadv 9753/tcp +rasadv 9753/udp +tungsten-http 9762/tcp +tungsten-http 9762/udp +davsrc 9800/tcp +davsrc 9800/udp +sstp-2 9801/tcp +sstp-2 9801/udp +davsrcs 9802/tcp +davsrcs 9802/udp +sapv1 9875/tcp +sapv1 9875/udp +sd 9876/tcp +x510 9877/tcp +kca-service 9878/udp +cyborg-systems 9888/tcp +cyborg-systems 9888/udp +gt-proxy 9889/tcp +gt-proxy 9889/udp +monkeycom 9898/tcp +monkeycom 9898/udp +sctp-tunneling 9899/udp +iua 9900/tcp +iua 9900/udp +iua 9900/sctp +enrp 9901/udp +enrp-sctp 9901/sctp +enrp-sctp-tls 9902/sctp +multicast-ping 9903/udp +domaintime 9909/tcp +domaintime 9909/udp +sype-transport 9911/tcp +sype-transport 9911/udp +xybrid-cloud 9925/tcp +apc-9950 9950/tcp +apc-9950 9950/udp +apc-9951 9951/tcp +apc-9951 9951/udp +apc-9952 9952/tcp +apc-9952 9952/udp +acis 9953/tcp +acis 9953/udp +hinp 9954/tcp +alljoyn-stm 9955/tcp +alljoyn-mcm 9955/udp +alljoyn 9956/udp +odnsp 9966/tcp +odnsp 9966/udp +xybrid-rt 9978/tcp +visweather 9979/tcp +pumpkindb 9981/tcp +dsm-scm-target 9987/tcp +dsm-scm-target 9987/udp +nsesrvr 9988/tcp +osm-appsrvr 9990/tcp +osm-appsrvr 9990/udp +osm-oev 9991/tcp +osm-oev 9991/udp +palace-1 9992/tcp +palace-1 9992/udp +palace-2 9993/tcp +palace-2 9993/udp +palace-3 9994/tcp +palace-3 9994/udp +palace-4 9995/tcp +palace-4 9995/udp +palace-5 9996/tcp +palace-5 9996/udp +palace-6 9997/tcp +palace-6 9997/udp +distinct32 9998/tcp +distinct32 9998/udp +distinct 9999/tcp +distinct 9999/udp +ndmp 10000/tcp +ndmp 10000/udp +scp-config 10001/tcp +scp-config 10001/udp +documentum 10002/tcp +documentum 10002/udp +documentum-s 10003/tcp +documentum-s 10003/udp +emcrmirccd 10004/tcp +emcrmird 10005/tcp +netapp-sync 10006/tcp +mvs-capacity 10007/tcp +mvs-capacity 10007/udp +octopus 10008/tcp +octopus 10008/udp +swdtp-sv 10009/tcp +swdtp-sv 10009/udp +rxapi 10010/tcp +abb-hw 10020/tcp +cefd-vmp 10023/udp +zabbix-agent 10050/tcp +zabbix-agent 10050/udp +zabbix-trapper 10051/tcp +zabbix-trapper 10051/udp +qptlmd 10055/tcp +amanda 10080/tcp +amanda 10080/udp +famdc 10081/tcp +famdc 10081/udp +itap-ddtp 10100/tcp +itap-ddtp 10100/udp +ezmeeting-2 10101/tcp +ezmeeting-2 10101/udp +ezproxy-2 10102/tcp +ezproxy-2 10102/udp +ezrelay 10103/tcp +ezrelay 10103/udp +swdtp 10104/tcp +swdtp 10104/udp +bctp-server 10107/tcp +bctp-server 10107/udp +nmea-0183 10110/tcp +nmea-0183 10110/udp +nmea-onenet 10111/udp +netiq-endpoint 10113/tcp +netiq-endpoint 10113/udp +netiq-qcheck 10114/tcp +netiq-qcheck 10114/udp +netiq-endpt 10115/tcp +netiq-endpt 10115/udp +netiq-voipa 10116/tcp +netiq-voipa 10116/udp +iqrm 10117/tcp +iqrm 10117/udp +cimple 10125/tcp +bmc-perf-sd 10128/tcp +bmc-perf-sd 10128/udp +bmc-gms 10129/tcp +qb-db-server 10160/tcp +qb-db-server 10160/udp +snmptls 10161/tcp +snmpdtls 10161/udp +snmptls-trap 10162/tcp +snmpdtls-trap 10162/udp +trisoap 10200/tcp +trisoap 10200/udp +rsms 10201/tcp +rscs 10201/udp +apollo-relay 10252/tcp +apollo-relay 10252/udp +eapol-relay 10253/udp +axis-wimp-port 10260/tcp +axis-wimp-port 10260/udp +tile-ml 10261/tcp +blocks 10288/tcp +blocks 10288/udp +cosir 10321/tcp +bngsync 10439/udp +cirrossp 10443/tcp +hip-nat-t 10500/udp +MOS-lower 10540/tcp +MOS-lower 10540/udp +MOS-upper 10541/tcp +MOS-upper 10541/udp +MOS-aux 10542/tcp +MOS-aux 10542/udp +MOS-soap 10543/tcp +MOS-soap 10543/udp +MOS-soap-opt 10544/tcp +MOS-soap-opt 10544/udp +serverdocs 10548/tcp +printopia 10631/tcp +gap 10800/tcp +gap 10800/udp +lpdg 10805/tcp +lpdg 10805/udp +nbd 10809/tcp +nmc-disc 10810/udp +helix 10860/tcp +helix 10860/udp +bveapi 10880/tcp +bveapi 10880/udp +octopustentacle 10933/tcp +rmiaux 10990/tcp +rmiaux 10990/udp +irisa 11000/tcp +irisa 11000/udp +metasys 11001/tcp +metasys 11001/udp +weave 11095/tcp +weave 11095/udp +origo-sync 11103/tcp +netapp-icmgmt 11104/tcp +netapp-icdata 11105/tcp +sgi-lk 11106/tcp +sgi-lk 11106/udp +myq-termlink 11108/udp +sgi-dmfmgr 11109/tcp +sgi-soap 11110/tcp +vce 11111/tcp +vce 11111/udp +dicom 11112/tcp +dicom 11112/udp +suncacao-snmp 11161/tcp +suncacao-snmp 11161/udp +suncacao-jmxmp 11162/tcp +suncacao-jmxmp 11162/udp +suncacao-rmi 11163/tcp +suncacao-rmi 11163/udp +suncacao-csa 11164/tcp +suncacao-csa 11164/udp +suncacao-websvc 11165/tcp +suncacao-websvc 11165/udp +snss 11171/udp +oemcacao-jmxmp 11172/tcp +t5-straton 11173/tcp +oemcacao-rmi 11174/tcp +oemcacao-websvc 11175/tcp +smsqp 11201/tcp +smsqp 11201/udp +dcsl-backup 11202/tcp +wifree 11208/tcp +wifree 11208/udp +memcache 11211/tcp +memcache 11211/udp +xcompute 11235/tcp +xcompute 11235/sctp +imip 11319/tcp +imip 11319/udp +imip-channels 11320/tcp +imip-channels 11320/udp +arena-server 11321/tcp +arena-server 11321/udp +atm-uhas 11367/tcp +atm-uhas 11367/udp +hkp 11371/tcp +hkp 11371/udp +lsdp 11430/udp +asgcypresstcps 11489/tcp +tempest-port 11600/tcp +tempest-port 11600/udp +emc-xsw-dconfig 11623/tcp +h323callsigalt 11720/tcp +h323callsigalt 11720/udp +emc-xsw-dcache 11723/tcp +emc-xsw-dcache 11723/udp +intrepid-ssl 11751/tcp +intrepid-ssl 11751/udp +lanschool 11796/tcp +lanschool-mpt 11796/udp +xoraya 11876/tcp +xoraya 11876/udp +x2e-disc 11877/udp +sysinfo-sp 11967/tcp +sysinfo-sp 11967/udp +tibsd 11971/tcp +wmereceiving 11997/sctp +wmedistribution 11998/sctp +wmereporting 11999/sctp +entextxid 12000/tcp +entextxid 12000/udp +entextnetwk 12001/tcp +entextnetwk 12001/udp +entexthigh 12002/tcp +entexthigh 12002/udp +entextmed 12003/tcp +entextmed 12003/udp +entextlow 12004/tcp +entextlow 12004/udp +dbisamserver1 12005/tcp +dbisamserver1 12005/udp +dbisamserver2 12006/tcp +dbisamserver2 12006/udp +accuracer 12007/tcp +accuracer 12007/udp +accuracer-dbms 12008/tcp +accuracer-dbms 12008/udp +ghvpn 12009/udp +edbsrvr 12010/tcp +vipera 12012/tcp +vipera 12012/udp +vipera-ssl 12013/tcp +vipera-ssl 12013/udp +rets-ssl 12109/tcp +rets-ssl 12109/udp +nupaper-ss 12121/tcp +nupaper-ss 12121/udp +cawas 12168/tcp +cawas 12168/udp +hivep 12172/tcp +hivep 12172/udp +linogridengine 12300/tcp +linogridengine 12300/udp +rads 12302/tcp +warehouse-sss 12321/tcp +warehouse-sss 12321/udp +warehouse 12322/tcp +warehouse 12322/udp +italk 12345/tcp +italk 12345/udp +tsaf 12753/tcp +tsaf 12753/udp +netperf 12865/tcp +i-zipqd 13160/tcp +i-zipqd 13160/udp +bcslogc 13216/tcp +bcslogc 13216/udp +rs-pias 13217/tcp +rs-pias 13217/udp +emc-vcas-tcp 13218/tcp +emc-vcas-udp 13218/udp +powwow-client 13223/tcp +powwow-client 13223/udp +powwow-server 13224/tcp +powwow-server 13224/udp +doip-data 13400/tcp +doip-disc 13400/udp +bprd 13720/tcp +bprd 13720/udp +bpdbm 13721/tcp +bpdbm 13721/udp +bpjava-msvc 13722/tcp +bpjava-msvc 13722/udp +vnetd 13724/tcp +vnetd 13724/udp +bpcd 13782/tcp +bpcd 13782/udp +vopied 13783/tcp +vopied 13783/udp +nbdb 13785/tcp +nbdb 13785/udp +nomdb 13786/tcp +nomdb 13786/udp +dsmcc-config 13818/tcp +dsmcc-config 13818/udp +dsmcc-session 13819/tcp +dsmcc-session 13819/udp +dsmcc-passthru 13820/tcp +dsmcc-passthru 13820/udp +dsmcc-download 13821/tcp +dsmcc-download 13821/udp +dsmcc-ccp 13822/tcp +dsmcc-ccp 13822/udp +bmdss 13823/tcp +ucontrol 13894/tcp +ucontrol 13894/udp +dta-systems 13929/tcp +dta-systems 13929/udp +medevolve 13930/tcp +scotty-ft 14000/tcp +scotty-ft 14000/udp +sua 14001/tcp +sua 14001/udp +sua 14001/sctp +scotty-disc 14002/udp +sage-best-com1 14033/tcp +sage-best-com1 14033/udp +sage-best-com2 14034/tcp +sage-best-com2 14034/udp +vcs-app 14141/tcp +vcs-app 14141/udp +icpp 14142/tcp +icpp 14142/udp +icpps 14143/tcp +gcm-app 14145/tcp +gcm-app 14145/udp +vrts-tdd 14149/tcp +vrts-tdd 14149/udp +vcscmd 14150/tcp +vad 14154/tcp +vad 14154/udp +cps 14250/tcp +cps 14250/udp +ca-web-update 14414/tcp +ca-web-update 14414/udp +xpra 14500/tcp +hde-lcesrvr-1 14936/tcp +hde-lcesrvr-1 14936/udp +hde-lcesrvr-2 14937/tcp +hde-lcesrvr-2 14937/udp +hydap 15000/tcp +hydap 15000/udp +onep-tls 15002/tcp +v2g-secc 15118/udp +xpilot 15345/tcp +xpilot 15345/udp +3link 15363/tcp +3link 15363/udp +cisco-snat 15555/tcp +cisco-snat 15555/udp +bex-xr 15660/tcp +bex-xr 15660/udp +ptp 15740/tcp +ptp 15740/udp +2ping 15998/udp +programmar 15999/tcp +fmsas 16000/tcp +fmsascon 16001/tcp +gsms 16002/tcp +alfin 16003/udp +jwpc 16020/tcp +jwpc-bin 16021/tcp +sun-sea-port 16161/tcp +sun-sea-port 16161/udp +solaris-audit 16162/tcp +etb4j 16309/tcp +etb4j 16309/udp +pduncs 16310/tcp +pduncs 16310/udp +pdefmns 16311/tcp +pdefmns 16311/udp +netserialext1 16360/tcp +netserialext1 16360/udp +netserialext2 16361/tcp +netserialext2 16361/udp +netserialext3 16367/tcp +netserialext3 16367/udp +netserialext4 16368/tcp +netserialext4 16368/udp +connected 16384/tcp +connected 16384/udp +rdgs 16385/tcp +xoms 16619/tcp +axon-tunnel 16665/tcp +vtp 16666/udp +cadsisvr 16789/tcp +newbay-snc-mc 16900/tcp +newbay-snc-mc 16900/udp +sgcip 16950/tcp +sgcip 16950/udp +intel-rci-mp 16991/tcp +intel-rci-mp 16991/udp +amt-soap-http 16992/tcp +amt-soap-http 16992/udp +amt-soap-https 16993/tcp +amt-soap-https 16993/udp +amt-redir-tcp 16994/tcp +amt-redir-tcp 16994/udp +amt-redir-tls 16995/tcp +amt-redir-tls 16995/udp +isode-dua 17007/tcp +isode-dua 17007/udp +vestasdlp 17184/tcp +soundsvirtual 17185/tcp +soundsvirtual 17185/udp +chipper 17219/tcp +chipper 17219/udp +avtp 17220/tcp +avtp 17220/udp +avdecc 17221/tcp +avdecc 17221/udp +cpsp 17222/udp +isa100-gci 17223/tcp +trdp-pd 17224/udp +trdp-md 17225/tcp +trdp-md 17225/udp +integrius-stp 17234/tcp +integrius-stp 17234/udp +ssh-mgmt 17235/tcp +ssh-mgmt 17235/udp +db-lsp 17500/tcp +db-lsp-disc 17500/udp +ailith 17555/tcp +ea 17729/tcp +ea 17729/udp +zep 17754/tcp +zep 17754/udp +zigbee-ip 17755/tcp +zigbee-ip 17755/udp +zigbee-ips 17756/tcp +zigbee-ips 17756/udp +sw-orion 17777/tcp +biimenu 18000/tcp +biimenu 18000/udp +radpdf 18104/tcp +racf 18136/tcp +opsec-cvp 18181/tcp +opsec-cvp 18181/udp +opsec-ufp 18182/tcp +opsec-ufp 18182/udp +opsec-sam 18183/tcp +opsec-sam 18183/udp +opsec-lea 18184/tcp +opsec-lea 18184/udp +opsec-omi 18185/tcp +opsec-omi 18185/udp +ohsc 18186/tcp +ohsc 18186/udp +opsec-ela 18187/tcp +opsec-ela 18187/udp +checkpoint-rtm 18241/tcp +checkpoint-rtm 18241/udp +iclid 18242/tcp +clusterxl 18243/tcp +gv-pf 18262/tcp +gv-pf 18262/udp +ac-cluster 18463/tcp +ac-cluster 18463/udp +heythings 18516/udp +rds-ib 18634/tcp +rds-ib 18634/udp +rds-ip 18635/tcp +rds-ip 18635/udp +vdmmesh 18668/tcp +vdmmesh-disc 18668/udp +ique 18769/tcp +ique 18769/udp +infotos 18881/tcp +infotos 18881/udp +apc-necmp 18888/tcp +apc-necmp 18888/udp +igrid 19000/tcp +igrid 19000/udp +scintilla 19007/tcp +scintilla 19007/udp +j-link 19020/tcp +opsec-uaa 19191/tcp +opsec-uaa 19191/udp +ua-secureagent 19194/tcp +ua-secureagent 19194/udp +cora 19220/tcp +cora-disc 19220/udp +keysrvr 19283/tcp +keysrvr 19283/udp +keyshadow 19315/tcp +keyshadow 19315/udp +mtrgtrans 19398/tcp +mtrgtrans 19398/udp +hp-sco 19410/tcp +hp-sco 19410/udp +hp-sca 19411/tcp +hp-sca 19411/udp +hp-sessmon 19412/tcp +hp-sessmon 19412/udp +fxuptp 19539/tcp +fxuptp 19539/udp +sxuptp 19540/tcp +sxuptp 19540/udp +jcp 19541/tcp +jcp 19541/udp +mle 19788/udp +faircom-db 19790/tcp +iec-104-sec 19998/tcp +dnp-sec 19999/tcp +dnp-sec 19999/udp +dnp 20000/tcp +dnp 20000/udp +microsan 20001/tcp +microsan 20001/udp +commtact-http 20002/tcp +commtact-http 20002/udp +commtact-https 20003/tcp +commtact-https 20003/udp +openwebnet 20005/tcp +openwebnet 20005/udp +ss-idi-disc 20012/udp +ss-idi 20013/tcp +opendeploy 20014/tcp +opendeploy 20014/udp +nburn-id 20034/tcp +nburn-id 20034/udp +tmophl7mts 20046/tcp +tmophl7mts 20046/udp +mountd 20048/tcp +mountd 20048/udp +nfsrdma 20049/tcp +nfsrdma 20049/udp +nfsrdma 20049/sctp +avesterra 20057/tcp +tolfab 20167/tcp +tolfab 20167/udp +ipdtp-port 20202/tcp +ipdtp-port 20202/udp +ipulse-ics 20222/tcp +ipulse-ics 20222/udp +emwavemsg 20480/tcp +emwavemsg 20480/udp +track 20670/tcp +track 20670/udp +athand-mmp 20999/tcp +athand-mmp 20999/udp +irtrans 21000/tcp +irtrans 21000/udp +notezilla-lan 21010/tcp +trinket-agent 21212/tcp +cohesity-agent 21213/tcp +aigairserver 21221/tcp +rdm-tfs 21553/tcp +dfserver 21554/tcp +dfserver 21554/udp +vofr-gateway 21590/tcp +vofr-gateway 21590/udp +tvpm 21800/tcp +tvpm 21800/udp +webphone 21845/tcp +webphone 21845/udp +netspeak-is 21846/tcp +netspeak-is 21846/udp +netspeak-cs 21847/tcp +netspeak-cs 21847/udp +netspeak-acd 21848/tcp +netspeak-acd 21848/udp +netspeak-cps 21849/tcp +netspeak-cps 21849/udp +snapenetio 22000/tcp +snapenetio 22000/udp +optocontrol 22001/tcp +optocontrol 22001/udp +optohost002 22002/tcp +optohost002 22002/udp +optohost003 22003/tcp +optohost003 22003/udp +optohost004 22004/tcp +optohost004 22004/udp +optohost004 22005/tcp +optohost004 22005/udp +dcap 22125/tcp +gsidcap 22128/tcp +easyengine 22222/tcp +wnn6 22273/tcp +wnn6 22273/udp +cis 22305/tcp +cis 22305/udp +showcockpit-net 22333/tcp +showcockpit-net 22333/udp +shrewd-control 22335/tcp +shrewd-stream 22335/udp +cis-secure 22343/tcp +cis-secure 22343/udp +wibukey 22347/tcp +wibukey 22347/udp +codemeter 22350/tcp +codemeter 22350/udp +codemeter-cmwan 22351/tcp +caldsoft-backup 22537/tcp +vocaltec-wconf 22555/tcp +vocaltec-phone 22555/udp +talikaserver 22763/tcp +talikaserver 22763/udp +aws-brf 22800/tcp +aws-brf 22800/udp +brf-gw 22951/tcp +brf-gw 22951/udp +inovaport1 23000/tcp +inovaport1 23000/udp +inovaport2 23001/tcp +inovaport2 23001/udp +inovaport3 23002/tcp +inovaport3 23002/udp +inovaport4 23003/tcp +inovaport4 23003/udp +inovaport5 23004/tcp +inovaport5 23004/udp +inovaport6 23005/tcp +inovaport6 23005/udp +gntp 23053/tcp +s102 23272/udp +5afe-dir 23294/tcp +5afe-disc 23294/udp +elxmgmt 23333/tcp +elxmgmt 23333/udp +novar-dbase 23400/tcp +novar-dbase 23400/udp +novar-alarm 23401/tcp +novar-alarm 23401/udp +novar-global 23402/tcp +novar-global 23402/udp +aequus 23456/tcp +aequus-alt 23457/tcp +areaguard-neo 23546/tcp +med-ltp 24000/tcp +med-ltp 24000/udp +med-fsp-rx 24001/tcp +med-fsp-rx 24001/udp +med-fsp-tx 24002/tcp +med-fsp-tx 24002/udp +med-supp 24003/tcp +med-supp 24003/udp +med-ovw 24004/tcp +med-ovw 24004/udp +med-ci 24005/tcp +med-ci 24005/udp +med-net-svc 24006/tcp +med-net-svc 24006/udp +filesphere 24242/tcp +filesphere 24242/udp +vista-4gl 24249/tcp +vista-4gl 24249/udp +ild 24321/tcp +ild 24321/udp +hid 24322/udp +vrmg-ip 24323/tcp +intel-rci 24386/tcp +intel-rci 24386/udp +tonidods 24465/tcp +tonidods 24465/udp +binkp 24554/tcp +binkp 24554/udp +bilobit 24577/tcp +bilobit-update 24577/udp +sdtvwcam 24666/tcp +canditv 24676/tcp +canditv 24676/udp +flashfiler 24677/tcp +flashfiler 24677/udp +proactivate 24678/tcp +proactivate 24678/udp +tcc-http 24680/tcp +tcc-http 24680/udp +cslg 24754/tcp +assoc-disc 24850/udp +find 24922/tcp +find 24922/udp +icl-twobase1 25000/tcp +icl-twobase1 25000/udp +icl-twobase2 25001/tcp +icl-twobase2 25001/udp +icl-twobase3 25002/tcp +icl-twobase3 25002/udp +icl-twobase4 25003/tcp +icl-twobase4 25003/udp +icl-twobase5 25004/tcp +icl-twobase5 25004/udp +icl-twobase6 25005/tcp +icl-twobase6 25005/udp +icl-twobase7 25006/tcp +icl-twobase7 25006/udp +icl-twobase8 25007/tcp +icl-twobase8 25007/udp +icl-twobase9 25008/tcp +icl-twobase9 25008/udp +icl-twobase10 25009/tcp +icl-twobase10 25009/udp +rna 25471/sctp +sauterdongle 25576/tcp +idtp 25604/tcp +vocaltec-hos 25793/tcp +vocaltec-hos 25793/udp +tasp-net 25900/tcp +tasp-net 25900/udp +niobserver 25901/tcp +niobserver 25901/udp +nilinkanalyst 25902/tcp +nilinkanalyst 25902/udp +niprobe 25903/tcp +niprobe 25903/udp +bf-game 25954/udp +bf-master 25955/udp +quake 26000/tcp +quake 26000/udp +scscp 26133/tcp +scscp 26133/udp +wnn6-ds 26208/tcp +wnn6-ds 26208/udp +cockroach 26257/tcp +ezproxy 26260/tcp +ezproxy 26260/udp +ezmeeting 26261/tcp +ezmeeting 26261/udp +k3software-svr 26262/tcp +k3software-svr 26262/udp +k3software-cli 26263/tcp +k3software-cli 26263/udp +exoline-tcp 26486/tcp +exoline-udp 26486/udp +exoconfig 26487/tcp +exoconfig 26487/udp +exonet 26489/tcp +exonet 26489/udp +flex-lmadmin 27010/tcp +mongodb 27017/tcp +imagepump 27345/tcp +imagepump 27345/udp +jesmsjc 27442/tcp +jesmsjc 27442/udp +kopek-httphead 27504/tcp +kopek-httphead 27504/udp +ars-vista 27782/tcp +ars-vista 27782/udp +astrolink 27876/tcp +tw-auth-key 27999/tcp +tw-auth-key 27999/udp +nxlmd 28000/tcp +nxlmd 28000/udp +pqsp 28001/tcp +gruber-cashreg 28010/tcp +a27-ran-ran 28119/udp +voxelstorm 28200/tcp +voxelstorm 28200/udp +siemensgsm 28240/tcp +siemensgsm 28240/udp +bosswave 28589/tcp +saltd-licensing 29000/tcp +sgsap 29118/sctp +otmp 29167/tcp +otmp 29167/udp +sbcap 29168/sctp +iuhsctpassoc 29169/sctp +bingbang 29999/tcp +ndmps 30000/tcp +pago-services1 30001/tcp +pago-services1 30001/udp +pago-services2 30002/tcp +pago-services2 30002/udp +amicon-fpsu-ra 30003/tcp +amicon-fpsu-ra 30003/udp +amicon-fpsu-s 30004/udp +rwp 30100/tcp +rwp 30100/sctp +kingdomsonline 30260/tcp +kingdomsonline 30260/udp +gs-realtime 30400/tcp +samsung-disc 30832/udp +ovobs 30999/tcp +ovobs 30999/udp +ka-sddp 31016/tcp +ka-kdp 31016/udp +autotrac-acp 31020/tcp +yawn 31029/udp +pace-licensed 31400/tcp +xqosd 31416/tcp +xqosd 31416/udp +tetrinet 31457/tcp +tetrinet 31457/udp +lm-mon 31620/tcp +lm-mon 31620/udp +dsx-monitor 31685/tcp +gamesmith-port 31765/tcp +gamesmith-port 31765/udp +iceedcp-tx 31948/tcp +iceedcp-tx 31948/udp +iceedcp-rx 31949/tcp +iceedcp-rx 31949/udp +iracinghelper 32034/tcp +iracinghelper 32034/udp +t1distproc60 32249/tcp +t1distproc60 32249/udp +plex 32400/tcp +apm-link 32483/tcp +apm-link 32483/udp +sec-ntb-clnt 32635/tcp +sec-ntb-clnt 32635/udp +DMExpress 32636/tcp +DMExpress 32636/udp +filenet-powsrm 32767/tcp +filenet-powsrm 32767/udp +filenet-tms 32768/tcp +filenet-tms 32768/udp +filenet-rpc 32769/tcp +filenet-rpc 32769/udp +filenet-nch 32770/tcp +filenet-nch 32770/udp +filenet-rmi 32771/tcp +filenet-rmi 32771/udp +filenet-pa 32772/tcp +filenet-pa 32772/udp +filenet-cm 32773/tcp +filenet-cm 32773/udp +filenet-re 32774/tcp +filenet-re 32774/udp +filenet-pch 32775/tcp +filenet-pch 32775/udp +filenet-peior 32776/tcp +filenet-peior 32776/udp +filenet-obrok 32777/tcp +filenet-obrok 32777/udp +mlsn 32801/tcp +mlsn 32801/udp +retp 32811/tcp +idmgratm 32896/tcp +idmgratm 32896/udp +wg-endpt-comms 33000/tcp +mysqlx 33060/tcp +aurora-balaena 33123/tcp +aurora-balaena 33123/udp +diamondport 33331/tcp +diamondport 33331/udp +dgi-serv 33333/tcp +speedtrace 33334/tcp +speedtrace-disc 33334/udp +traceroute 33434/tcp +traceroute 33434/udp +mtrace 33435/udp +snip-slave 33656/tcp +snip-slave 33656/udp +digilent-adept 33890/tcp +turbonote-2 34249/tcp +turbonote-2 34249/udp +p-net-local 34378/tcp +p-net-local 34378/udp +p-net-remote 34379/tcp +p-net-remote 34379/udp +dhanalakshmi 34567/tcp +edi_service 34567/udp +profinet-rt 34962/tcp +profinet-rt 34962/udp +profinet-rtm 34963/tcp +profinet-rtm 34963/udp +profinet-cm 34964/tcp +profinet-cm 34964/udp +ethercat 34980/tcp +ethercat 34980/udp +heathview 35000/tcp +rt-viewer 35001/tcp +rt-viewer 35001/udp +rt-sound 35002/tcp +rt-devicemapper 35003/tcp +rt-classmanager 35004/tcp +rt-classmanager 35004/udp +rt-labtracker 35005/tcp +rt-helper 35006/tcp +axio-disc 35100/tcp +axio-disc 35100/udp +kitim 35354/tcp +altova-lm 35355/tcp +altova-lm-disc 35355/udp +guttersnex 35356/tcp +openstack-id 35357/tcp +allpeers 36001/tcp +allpeers 36001/udp +wlcp 36411/udp +s1-control 36412/sctp +x2-control 36422/sctp +slmap 36423/sctp +nq-ap 36424/sctp +m2ap 36443/sctp +m3ap 36444/sctp +xw-control 36462/sctp +febooti-aw 36524/tcp +observium-agent 36602/tcp +mapx 36700/tcp +kastenxpipe 36865/tcp +kastenxpipe 36865/udp +3gpp-w1ap 37472/sctp +neckar 37475/tcp +neckar 37475/udp +gdrive-sync 37483/tcp +eftp 37601/tcp +unisys-eportal 37654/tcp +unisys-eportal 37654/udp +ivs-database 38000/tcp +ivs-insertion 38001/tcp +cresco-control 38002/tcp +crescoctrl-disc 38002/udp +galaxy7-data 38201/tcp +galaxy7-data 38201/udp +fairview 38202/tcp +fairview 38202/udp +agpolicy 38203/tcp +agpolicy 38203/udp +ng-control 38412/sctp +xn-control 38422/sctp +e1-interface 38462/sctp +f1-control 38472/sctp +sruth 38800/tcp +secrmmsafecopya 38865/tcp +turbonote-1 39681/tcp +turbonote-1 39681/udp +safetynetp 40000/tcp +safetynetp 40000/udp +k-patentssensor 40023/udp +sptx 40404/tcp +cscp 40841/tcp +cscp 40841/udp +csccredir 40842/tcp +csccredir 40842/udp +csccfirewall 40843/tcp +csccfirewall 40843/udp +ortec-disc 40853/udp +fs-qos 41111/tcp +fs-qos 41111/udp +tentacle 41121/tcp +z-wave-s 41230/tcp +z-wave-s 41230/udp +crestron-cip 41794/tcp +crestron-cip 41794/udp +crestron-ctp 41795/tcp +crestron-ctp 41795/udp +crestron-cips 41796/tcp +crestron-ctps 41797/tcp +candp 42508/tcp +candp 42508/udp +candrp 42509/tcp +candrp 42509/udp +caerpc 42510/tcp +caerpc 42510/udp +recvr-rc 43000/tcp +recvr-rc-disc 43000/udp +reachout 43188/tcp +reachout 43188/udp +ndm-agent-port 43189/tcp +ndm-agent-port 43189/udp +ip-provision 43190/tcp +ip-provision 43190/udp +noit-transport 43191/tcp +shaperai 43210/tcp +shaperai-disc 43210/udp +hmip-routing 43438/udp +eq3-update 43439/tcp +eq3-config 43439/udp +ew-mgmt 43440/tcp +ew-disc-cmd 43440/udp +ciscocsdb 43441/tcp +ciscocsdb 43441/udp +z-wave-tunnel 44123/tcp +pmcd 44321/tcp +pmcd 44321/udp +pmcdproxy 44322/tcp +pmcdproxy 44322/udp +pmwebapi 44323/tcp +cognex-dataman 44444/tcp +acronis-backup 44445/tcp +domiq 44544/udp +rbr-debug 44553/tcp +rbr-debug 44553/udp +asihpi 44600/udp +EtherNet-IP-2 44818/tcp +EtherNet-IP-2 44818/udp +m3da 44900/tcp +m3da-disc 44900/udp +asmp 45000/tcp +asmp-mon 45000/udp +asmps 45001/tcp +rs-status 45002/tcp +synctest 45045/tcp +invision-ag 45054/tcp +invision-ag 45054/udp +cloudcheck 45514/tcp +cloudcheck-ping 45514/udp +eba 45678/tcp +eba 45678/udp +dai-shell 45824/tcp +qdb2service 45825/tcp +qdb2service 45825/udp +ssr-servermgr 45966/tcp +ssr-servermgr 45966/udp +inedo 46336/tcp +spremotetablet 46998/tcp +mediabox 46999/tcp +mediabox 46999/udp +mbus 47000/tcp +mbus 47000/udp +winrm 47001/tcp +jvl-mactalk 47100/udp +dbbrowse 47557/tcp +dbbrowse 47557/udp +directplaysrvr 47624/tcp +directplaysrvr 47624/udp +ap 47806/tcp +ap 47806/udp +bacnet 47808/tcp +bacnet 47808/udp +presonus-ucnet 47809/udp +nimcontroller 48000/tcp +nimcontroller 48000/udp +nimspooler 48001/tcp +nimspooler 48001/udp +nimhub 48002/tcp +nimhub 48002/udp +nimgtw 48003/tcp +nimgtw 48003/udp +nimbusdb 48004/tcp +nimbusdbctrl 48005/tcp +juka 48048/tcp +3gpp-cbsp 48049/tcp +weandsf 48050/tcp +isnetserv 48128/tcp +isnetserv 48128/udp +blp5 48129/tcp +blp5 48129/udp +com-bardac-dw 48556/tcp +com-bardac-dw 48556/udp +iqobject 48619/tcp +iqobject 48619/udp +robotraconteur 48653/tcp +robotraconteur 48653/udp +matahari 49000/tcp +nusrp 49001/tcp +nusdp-disc 49001/udp +inspider 49150/tcp diff --git a/x86_64/core/iana-etc/update.sh b/x86_64/core/iana-etc/update.sh new file mode 100644 index 0000000..3b4f59d --- /dev/null +++ b/x86_64/core/iana-etc/update.sh @@ -0,0 +1,66 @@ +#!/bin/sh - +#@ Update protocols and services from IANA. +#@ Taken from ArchLinux script written by Gaetan Bisson. Adjusted for CRUX. + +awk=awk +curl=curl +url_pn='https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml' +url_snpn="https://www.iana.org/assignments/service-names-port-numbers/\ +service-names-port-numbers.xml" + +download() { + datetime=`date +'%FT%T%z'` + echo 'Downloading protocols' + ${curl} -o protocols.xml ${url_pn} + [ ${?} -eq 0 ] || exit 20 + echo 'Downloading services' + ${curl} -o services.xml ${url_snpn} + [ ${?} -eq 0 ] || exit 21 +} + +process() { + echo 'Processing protocols' + ${awk} -F "[<>]" -v URL="${url_pn}" -v DT="${datetime}" ' + BEGIN{ + print "# /etc/protocols, created " DT + print "# Source: " URL + } + / protocols.new + [ ${?} -eq 0 ] || exit 30 + + echo 'Processing services' + ${awk} -F "[<>]" -v URL="${url_snpn}" -v DT="${datetime}" ' + BEGIN{ + print "# /etc/services, created " DT + print "# Source: " URL + } + / services.new + [ ${?} -eq 0 ] || exit 31 +} + +update() { + mv protocols.new protocols + [ ${?} -eq 0 ] || exit 40 + mv services.new services + [ ${?} -eq 0 ] || exit 41 + rm -f protocols.xml services.xml + [ ${?} -eq 0 ] || exit 42 +} + +download +process +update diff --git a/x86_64/core/icu/PKGBUILD b/x86_64/core/icu/PKGBUILD new file mode 100644 index 0000000..1689def --- /dev/null +++ b/x86_64/core/icu/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=icu +pkgver=70.1 +aver=70 +bver=1 +pkgrel=1 +arch=('x86_64') +depends=(gcc bash) +makedepends=(llvm python3 doxygen) +source=(https://github.com/unicode-org/icu/releases/download/release-$aver-$bver/icu4c-${aver}_$bver-src.tgz) + +build() { + cd $pkgname + + cd source + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname/source + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/inetutils/PKGBUILD b/x86_64/core/inetutils/PKGBUILD new file mode 100644 index 0000000..b8c57eb --- /dev/null +++ b/x86_64/core/inetutils/PKGBUILD @@ -0,0 +1,33 @@ +pkgname=inetutils +pkgver=2.2 +pkgrel=1 +arch=('x86_64') +depends=(glibc libcap readline ncurses linux-pam) +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --libexecdir=/usr/sbin \ + --localstatedir=/var \ + --disable-logger \ + --disable-whois \ + --disable-rcp \ + --disable-rexec \ + --disable-rlogin \ + --disable-rsh \ + --disable-servers + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + mkdir -pv $pkgdir/{bin,sbin} + mv -v $pkgdir/usr/bin/{hostname,ping,ping6,traceroute} $pkgdir/bin + mv -v $pkgdir/usr/bin/ifconfig $pkgdir/sbin +} diff --git a/x86_64/core/intltool/PKGBUILD b/x86_64/core/intltool/PKGBUILD new file mode 100644 index 0000000..44f667d --- /dev/null +++ b/x86_64/core/intltool/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=intltool +pkgver=0.51.0 +pkgrel=2 +arch=('x86_64') +depends=(glibc) +source=(http://launchpad.net/intltool/trunk/$pkgver/+download/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + sed -i 's:\\\${:\\\$\\{:' intltool-update.in + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/iproute2/PKGBUILD b/x86_64/core/iproute2/PKGBUILD new file mode 100644 index 0000000..d1b8f17 --- /dev/null +++ b/x86_64/core/iproute2/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=iproute2 +pkgver=5.16.0 +pkgrel=1 +arch=('x86_64') +depends=(glibc elfutils) +source=(https://www.kernel.org/pub/linux/utils/net/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + sed -i /ARPD/d Makefile + rm -fv man/man8/arpd.8 + + [ -e /usr/lib/pkgconfig/xtables.pc ] || sed -i 's/m_ipt.o//' tc/Makefile + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/kmod/PKGBUILD b/x86_64/core/kmod/PKGBUILD new file mode 100644 index 0000000..c94bc96 --- /dev/null +++ b/x86_64/core/kmod/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=kmod +pkgver=29 +pkgrel=2 +arch=('x86_64') +depends=(glibc zlib openssl xz zstd) +source=(https://www.kernel.org/pub/linux/utils/kernel/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr \ + --bindir=/bin \ + --sysconfdir=/etc \ + --with-rootlibdir=/lib \ + --with-xz \ + --with-openssl \ + --with-zlib + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + + mkdir -p $pkgdir/sbin + for target in depmod insmod lsmod modinfo modprobe rmmod; do + ln -sfv ../bin/kmod $pkgdir/sbin/$target + done + + ln -sfv kmod $pkgdir/bin/lsmod +} diff --git a/x86_64/core/less/PKGBUILD b/x86_64/core/less/PKGBUILD new file mode 100644 index 0000000..c9171fe --- /dev/null +++ b/x86_64/core/less/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=less +pkgver=590 +pkgrel=2 +arch=('x86_64') +depends=(glibc ncurses pcre2) +source=(http://www.greenwoodsoftware.com/$pkgname/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --with-regex=pcre2 \ + --sysconfdir=/etc + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/less/update b/x86_64/core/less/update new file mode 100644 index 0000000..7771570 --- /dev/null +++ b/x86_64/core/less/update @@ -0,0 +1,2 @@ +url=http://www.greenwoodsoftware.com/less/download.html + diff --git a/x86_64/core/libarchive/0001-unescape-when-extracting-link.patch b/x86_64/core/libarchive/0001-unescape-when-extracting-link.patch new file mode 100644 index 0000000..7aa2242 --- /dev/null +++ b/x86_64/core/libarchive/0001-unescape-when-extracting-link.patch @@ -0,0 +1,10 @@ +--- a/libarchive/archive_read_support_format_mtree.c ++++ b/libarchive/archive_read_support_format_mtree.c +@@ -1675,6 +1675,7 @@ parse_keyword(struct archive_read *a, struct mtree *mtree, + break; + case 'l': + if (strcmp(key, "link") == 0) { ++ parse_escapes(val, NULL); + archive_entry_copy_symlink(entry, val); + return (ARCHIVE_OK); + } diff --git a/x86_64/core/libarchive/PKGBUILD b/x86_64/core/libarchive/PKGBUILD new file mode 100644 index 0000000..69893f4 --- /dev/null +++ b/x86_64/core/libarchive/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=libarchive +pkgver=3.6.1 +pkgrel=1 +arch=('x86_64') +depends=(acl bzip2 expat lz4 openssl xz zlib zstd libxml2 nettle expat) +source=(https://github.com/libarchive/libarchive/releases/download/v$pkgver/libarchive-$pkgver.tar.xz + 0001-unescape-when-extracting-link.patch) + +prepare() { + cd $pkgname-$pkgver +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --with-xml2 \ + --with-lzo2 \ + --with-zstd \ + --with-nettle + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/libcap/PKGBUILD b/x86_64/core/libcap/PKGBUILD new file mode 100644 index 0000000..5682503 --- /dev/null +++ b/x86_64/core/libcap/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=libcap +pkgver=2.63 +pkgrel=3 +arch=('x86_64') +depends=('glibc' 'linux-pam') +source=(https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + sed -i '/install.*STALIBNAME/d' libcap/Makefile + + make +} + +package() { + cd $pkgname-$pkgver + make RAISE_SETFCAP=no lib=lib prefix=/usr DESTDIR=$pkgdir install + chmod -v 755 $pkgdir/usr/lib/libcap.so + + mkdir -p $pkgdir/lib + mv -v $pkgdir/usr/lib/libcap.so.* $pkgdir/lib + ln -sfv ../../lib/$(readlink $pkgdir/usr/lib/libcap.so) $pkgdir/usr/lib/libcap.so +} diff --git a/x86_64/core/libevent/PKGBUILD b/x86_64/core/libevent/PKGBUILD new file mode 100644 index 0000000..8b4e20f --- /dev/null +++ b/x86_64/core/libevent/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=libevent +pkgver=2.1.12 +pkgrel=2 +arch=('x86_64') +depends=(openssl) +source=(https://github.com/libevent/libevent/releases/download/release-$pkgver-stable/libevent-$pkgver-stable.tar.gz) + +build() { + cd $pkgname-$pkgver-stable + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver-stable + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/libevent/update b/x86_64/core/libevent/update new file mode 100644 index 0000000..25af2dc --- /dev/null +++ b/x86_64/core/libevent/update @@ -0,0 +1,9 @@ +getver_libevent() { + fetch \ + | grep archive \ + | grep -Eo release-[0-9.]+-stable.tar.gz \ + | sed 's/release-//;s/-stable.*//' \ + | sort -V \ + | uniq +} + diff --git a/x86_64/core/libffi/PKGBUILD b/x86_64/core/libffi/PKGBUILD new file mode 100644 index 0000000..eef0e54 --- /dev/null +++ b/x86_64/core/libffi/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=libffi +pkgver=3.3 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +source=(ftp://sourceware.org/pub/$pkgname/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + sed -e '/^includesdir/ s/$(libdir).*$/$(includedir)/' \ + -i include/Makefile.in + + sed -e '/^includedir/ s/=.*$/=@includedir@/' \ + -e 's/^Cflags: -I${includedir}/Cflags:/' \ + -i libffi.pc.in + + ./configure --prefix=/usr --disable-static --with-gcc-arch=x86-64 + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/libgudev/PKGBUILD b/x86_64/core/libgudev/PKGBUILD new file mode 100644 index 0000000..cd40dd7 --- /dev/null +++ b/x86_64/core/libgudev/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=libgudev +pkgver=237 +pkgrel=1 +arch=('x86_64') +depends=('systemd' 'glib2') +commitid=f6ec5ecb6ef68272392a7e950b3f60194c42f1ee +source=(git+https://gitlab.gnome.org/GNOME/libgudev.git#commit=$commitid) + +build() { + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + ../$pkgname + + ninja +} + +package() { + meson install -C build --destdir $pkgdir +} diff --git a/x86_64/core/libnl/PKGBUILD b/x86_64/core/libnl/PKGBUILD new file mode 100644 index 0000000..c2f9e49 --- /dev/null +++ b/x86_64/core/libnl/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=libnl +pkgver=3.5.0 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +source=(https://github.com/thom311/libnl/releases/download/libnl${pkgver//./_}/libnl-$pkgver.tar.gz) + +build() { + ls + cd $pkgname-$pkgver + + ./configure --prefix=/usr \ + --sysconfdir=/etc + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/libnl/update b/x86_64/core/libnl/update new file mode 100644 index 0000000..27b55da --- /dev/null +++ b/x86_64/core/libnl/update @@ -0,0 +1,11 @@ +getver_libnl() { + fetch \ + | grep archive \ + | tr '_' '.' \ + | grep -Eo libnl[0-9a-z.]+.tar.gz \ + | grep -v rc \ + | sed 's/libnl//;s/\.tar.*//' \ + | sort -V \ + | uniq +} + diff --git a/x86_64/core/libseccomp/PKGBUILD b/x86_64/core/libseccomp/PKGBUILD new file mode 100644 index 0000000..5adb3c4 --- /dev/null +++ b/x86_64/core/libseccomp/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=libseccomp +pkgver=2.5.3 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(valgrind gperf python3-pip) +source=(https://github.com/seccomp/${pkgname}/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + pip install setuptools Cython + + autoreconf -fi +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make + + cd src/python + env VERSION_RELEASE=$pkgver python setup.py build +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="${pkgdir}" install + + cd src/python + env VERSION_RELEASE=${pkgver} python setup.py install --root="${pkgdir}" --prefix=/usr -O1 --skip-build +} diff --git a/x86_64/core/libtasn1/PKGBUILD b/x86_64/core/libtasn1/PKGBUILD new file mode 100644 index 0000000..aab9355 --- /dev/null +++ b/x86_64/core/libtasn1/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=libtasn1 +pkgver=4.17.0 +pkgrel=2 +arch=('x86_64') +depends=(glibc) +source=(https://ftp.gnu.org/gnu/libtasn1/libtasn1-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/libtool/PKGBUILD b/x86_64/core/libtool/PKGBUILD new file mode 100644 index 0000000..c075962 --- /dev/null +++ b/x86_64/core/libtool/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=libtool +pkgver=2.4.6 +pkgrel=2 +arch=('x86_64') +depends=(glibc bash tar) +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/libx11/PKGBUILD b/x86_64/core/libx11/PKGBUILD new file mode 100644 index 0000000..362a7bf --- /dev/null +++ b/x86_64/core/libx11/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=libx11 +pkgver=1.7.3.1 +pkgrel=1 +arch=('x86_64') +depends=('libxaw' 'libxext' 'libxt' 'libxmu' 'libxau' 'xcb-proto' 'libxtrans' 'xorgproto' 'libxrender' 'libxdmcp' 'libxrandr' 'libxi') +source=(https://x.org/releases/individual/lib/libX11-$pkgver.tar.gz) + +build() { + cd libX11-$pkgver + + ./configure --prefix=/usr --disable-xf86bigfont + + make +} + +check() { + cd libX11-$pkgver + make check +} + +package() { + cd libX11-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/libxcrypt/PKGBUILD b/x86_64/core/libxcrypt/PKGBUILD new file mode 100644 index 0000000..df20d32 --- /dev/null +++ b/x86_64/core/libxcrypt/PKGBUILD @@ -0,0 +1,38 @@ +pkgname=libxcrypt +pkgver=4.4.28 +pkgrel=1 +pkgdesc='Modern library for one-way hashing of passwords' +arch=('x86_64') +url='https://github.com/besser82/libxcrypt/' +depends=('glibc') +install=libxcrypt.install +source=("${url}/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.xz") + +build() { + cd "${pkgname}-${pkgver}" + + mkdir build build-compat + + cd build + ./../configure \ + --prefix=/usr \ + --enable-hashes=strong,glibc \ + --enable-obsolete-api=no \ + --disable-failure-tokens + + make -j4 + + cd ../build-compat + ./../configure \ + --prefix=/usr \ + --enable-hashes=strong,glibc \ + --enable-obsolete-api=glibc \ + --disable-failure-tokens +} + +package() { + cd "${pkgname}-${pkgver}" + + make -C build DESTDIR="${pkgdir}" install + make -C build-compat DESTDIR="${pkgdir}" install +} diff --git a/x86_64/core/libxcrypt/libxcrypt.install b/x86_64/core/libxcrypt/libxcrypt.install new file mode 100644 index 0000000..b096087 --- /dev/null +++ b/x86_64/core/libxcrypt/libxcrypt.install @@ -0,0 +1,15 @@ +#!/bin/sh + +post_upgrade() { + # return if old package version greater 4.4.21... + (( $(vercmp $2 '4.4.21') > 0 )) && return + + cat < Starting with 'libxcrypt' 4.4.21, weak password hashes (such as MD5 and SHA1) + > are no longer accepted for new passwords. Users that still have their + > passwords stored with a weak hash will be asked to update their password on + > their next login. + > If the login just fails (for example from display manager) switch to a + > virtual terminal ('Ctrl-Alt-F2') and log in there once. +EOM +} \ No newline at end of file diff --git a/x86_64/core/libxml2/PKGBUILD b/x86_64/core/libxml2/PKGBUILD new file mode 100644 index 0000000..f342820 --- /dev/null +++ b/x86_64/core/libxml2/PKGBUILD @@ -0,0 +1,48 @@ +pkgname=libxml2 +pkgver=2.9.12 +pkgrel=5 +arch=('x86_64') +depends=(icu readline zlib ncurses xz) +install=libxml2.install +makedepends=(python3) +source=(http://xmlsoft.org/sources/$pkgname-$pkgver.tar.gz + libxml2-2.9.8-python3-unicode-errors.patch + no-fuzz.diff) + +prepare() { + mkdir -p build + + cd $pkgname-$pkgver + + # https://src.fedoraproject.org/rpms/libxml2/tree/rawhide + patch -p1 -i ../libxml2-2.9.8-python3-unicode-errors.patch + + # Do not run fuzzing tests + patch -p1 -i ../no-fuzz.diff + + autoreconf -fiv +} + +build() { + cd build + + ./../$pkgname-$pkgver/configure \ + --prefix=/usr \ + --with-history \ + --with-icu \ + --with-threads \ + --with-python=/usr/bin/python3 + + make + + find doc -type f -exec chmod -c 0644 {} + +} + +package() { + cd build + + make DESTDIR=$pkgdir install + + python -m compileall -d /usr/lib "$pkgdir/usr/lib" + python -O -m compileall -d /usr/lib "$pkgdir/usr/lib" +} diff --git a/x86_64/core/libxml2/libxml2-2.9.8-python3-unicode-errors.patch b/x86_64/core/libxml2/libxml2-2.9.8-python3-unicode-errors.patch new file mode 100644 index 0000000..e87dcde --- /dev/null +++ b/x86_64/core/libxml2/libxml2-2.9.8-python3-unicode-errors.patch @@ -0,0 +1,34 @@ +Index: libxml2-2.9.5/python/libxml.c +=================================================================== +--- libxml2-2.9.5.orig/python/libxml.c ++++ libxml2-2.9.5/python/libxml.c +@@ -1620,6 +1620,7 @@ libxml_xmlErrorFuncHandler(ATTRIBUTE_UNU + PyObject *message; + PyObject *result; + char str[1000]; ++ unsigned char *ptr = (unsigned char *)str; + + #ifdef DEBUG_ERROR + printf("libxml_xmlErrorFuncHandler(%p, %s, ...) called\n", ctx, msg); +@@ -1636,12 +1637,20 @@ libxml_xmlErrorFuncHandler(ATTRIBUTE_UNU + str[999] = 0; + va_end(ap); + ++#if PY_MAJOR_VERSION >= 3 ++ /* Ensure the error string doesn't start at UTF8 continuation. */ ++ while (*ptr && (*ptr & 0xc0) == 0x80) ++ ptr++; ++#endif ++ + list = PyTuple_New(2); + PyTuple_SetItem(list, 0, libxml_xmlPythonErrorFuncCtxt); + Py_XINCREF(libxml_xmlPythonErrorFuncCtxt); +- message = libxml_charPtrConstWrap(str); ++ message = libxml_charPtrConstWrap(ptr); + PyTuple_SetItem(list, 1, message); + result = PyEval_CallObject(libxml_xmlPythonErrorFuncHandler, list); ++ /* Forget any errors caused in the error handler. */ ++ PyErr_Clear(); + Py_XDECREF(list); + Py_XDECREF(result); + } diff --git a/x86_64/core/libxml2/libxml2.install b/x86_64/core/libxml2/libxml2.install new file mode 100644 index 0000000..3857b5d --- /dev/null +++ b/x86_64/core/libxml2/libxml2.install @@ -0,0 +1,10 @@ +post_install() { + if [[ -f etc/xml/catalog ]] + then + /usr/bin/xmlcatalog --create > etc/xml/catalog + fi +} + +post_remove() { + rm etc/xml/catalog +} diff --git a/x86_64/core/libxml2/no-fuzz.diff b/x86_64/core/libxml2/no-fuzz.diff new file mode 100644 index 0000000..67ab6cc --- /dev/null +++ b/x86_64/core/libxml2/no-fuzz.diff @@ -0,0 +1,24 @@ +diff --git i/Makefile.am w/Makefile.am +index 7917b595..f0f4b695 100644 +--- i/Makefile.am ++++ w/Makefile.am +@@ -2,9 +2,9 @@ + + ACLOCAL_AMFLAGS = -I m4 + +-SUBDIRS = include . doc example fuzz xstc $(PYTHON_SUBDIR) ++SUBDIRS = include . doc example xstc $(PYTHON_SUBDIR) + +-DIST_SUBDIRS = include . doc example fuzz python xstc ++DIST_SUBDIRS = include . doc example python xstc + + AM_CPPFLAGS = -I$(top_builddir)/include -I$(srcdir)/include + +@@ -210,7 +210,6 @@ runtests: runtest$(EXEEXT) testrecurse$(EXEEXT) testapi$(EXEEXT) \ + $(CHECKER) ./runxmlconf$(EXEEXT) + @(if [ "$(PYTHON_SUBDIR)" != "" ] ; then cd python ; \ + $(MAKE) tests ; fi) +- @cd fuzz; $(MAKE) tests + + check: all runtests + diff --git a/x86_64/core/linux-firmware/.nostrip b/x86_64/core/linux-firmware/.nostrip new file mode 100644 index 0000000..e69de29 diff --git a/x86_64/core/linux-firmware/PKGBUILD b/x86_64/core/linux-firmware/PKGBUILD new file mode 100644 index 0000000..03a0856 --- /dev/null +++ b/x86_64/core/linux-firmware/PKGBUILD @@ -0,0 +1,14 @@ +pkgname=linux-firmware +pkgver=20210511 +pkgrel=1 +arch=('x86_64') +source=(https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/snapshot/linux-firmware-$pkgver.tar.gz) + +build() { + echo "nothing" +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/linux-firmware/update b/x86_64/core/linux-firmware/update new file mode 100644 index 0000000..b17e15e --- /dev/null +++ b/x86_64/core/linux-firmware/update @@ -0,0 +1,9 @@ +url=https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git + +getver_linux-firmware() { + fetch \ + | grep -Eo h=[0-9.]+ \ + | sed 's/h=//' \ + | sort -V \ + | uniq +} diff --git a/x86_64/core/linux-pam/PKGBUILD b/x86_64/core/linux-pam/PKGBUILD new file mode 100644 index 0000000..beca9ff --- /dev/null +++ b/x86_64/core/linux-pam/PKGBUILD @@ -0,0 +1,53 @@ +pkgname=linux-pam +pkgver=1.5.2 +pkgrel=2 +pkgdesc="PAM (Pluggable Authentication Modules) library" +arch=('x86_64') +license=('GPL2') +url="http://linux-pam.org" +depends=('glibc' 'libtirpc' 'libgcrypt') +makedepends=('docbook-xml' 'docbook-xsl') +backup=(etc/security/{access.conf,faillock.conf,group.conf,limits.conf,namespace.conf,namespace.init,pam_env.conf,time.conf} + etc/environment + etc/pam.d/system-auth + etc/pam.d/system-local-login + etc/pam.d/system-login + etc/pam.d/system-remote-login + etc/pam.d/system-services + etc/pam.d/other) +source=(https://github.com/linux-pam/linux-pam/releases/download/v$pkgver/Linux-PAM-$pkgver.tar.xz{,.asc} + pam.tmpfiles + other + system-auth + system-local-login + system-login + system-remote-login + system-services) + +options=('!emptydirs') + +build() { + cd Linux-PAM-$pkgver + ./configure \ + --libdir=/usr/lib \ + --sbindir=/usr/bin \ + --disable-db + make +} + +package() { + install -Dm 644 pam.tmpfiles "$pkgdir"/usr/lib/tmpfiles.d/pam.conf + cd Linux-PAM-$pkgver + make DESTDIR="$pkgdir" SCONFIGDIR=/etc/security install + + # set unix_chkpwd uid + chmod +s "$pkgdir"/usr/bin/unix_chkpwd + + install -dm755 $pkgdir/etc/pam.d + install -m644 -t $pkgdir/etc/pam.d $srcdir/system-auth + install -m644 -t $pkgdir/etc/pam.d $srcdir/system-local-login + install -m644 -t $pkgdir/etc/pam.d $srcdir/system-login + install -m644 -t $pkgdir/etc/pam.d $srcdir/system-remote-login + install -m644 -t $pkgdir/etc/pam.d $srcdir/system-services + install -m644 -t $pkgdir/etc/pam.d $srcdir/other +} diff --git a/x86_64/core/linux-pam/other b/x86_64/core/linux-pam/other new file mode 100644 index 0000000..3f50bd1 --- /dev/null +++ b/x86_64/core/linux-pam/other @@ -0,0 +1,9 @@ +#%PAM-1.0 +auth required pam_deny.so +auth required pam_warn.so +account required pam_deny.so +account required pam_warn.so +password required pam_deny.so +password required pam_warn.so +session required pam_deny.so +session required pam_warn.so diff --git a/x86_64/core/linux-pam/pam.tmpfiles b/x86_64/core/linux-pam/pam.tmpfiles new file mode 100644 index 0000000..f6e490b --- /dev/null +++ b/x86_64/core/linux-pam/pam.tmpfiles @@ -0,0 +1 @@ +d /run/faillock 0755 root root - diff --git a/x86_64/core/linux-pam/system-auth b/x86_64/core/linux-pam/system-auth new file mode 100644 index 0000000..a30490b --- /dev/null +++ b/x86_64/core/linux-pam/system-auth @@ -0,0 +1,27 @@ +#%PAM-1.0 + +auth required pam_faillock.so preauth +# Optionally use requisite above if you do not want to prompt for the password +# on locked accounts. +-auth [success=2 default=ignore] pam_systemd_home.so +auth [success=1 default=bad] pam_unix.so try_first_pass nullok +auth [default=die] pam_faillock.so authfail +auth optional pam_permit.so +auth required pam_env.so +auth required pam_faillock.so authsucc +# If you drop the above call to pam_faillock.so the lock will be done also +# on non-consecutive authentication failures. + +-account [success=1 default=ignore] pam_systemd_home.so +account required pam_unix.so +account optional pam_permit.so +account required pam_time.so + +-password [success=1 default=ignore] pam_systemd_home.so +password required pam_unix.so try_first_pass nullok shadow sha512 +password optional pam_permit.so + +-session optional pam_systemd_home.so +session required pam_limits.so +session required pam_unix.so +session optional pam_permit.so diff --git a/x86_64/core/linux-pam/system-local-login b/x86_64/core/linux-pam/system-local-login new file mode 100644 index 0000000..347b815 --- /dev/null +++ b/x86_64/core/linux-pam/system-local-login @@ -0,0 +1,6 @@ +#%PAM-1.0 + +auth include system-login +account include system-login +password include system-login +session include system-login diff --git a/x86_64/core/linux-pam/system-login b/x86_64/core/linux-pam/system-login new file mode 100644 index 0000000..63e6fed --- /dev/null +++ b/x86_64/core/linux-pam/system-login @@ -0,0 +1,19 @@ +#%PAM-1.0 + +auth required pam_shells.so +auth requisite pam_nologin.so +auth include system-auth + +account required pam_access.so +account required pam_nologin.so +account include system-auth + +password include system-auth + +session optional pam_loginuid.so +session optional pam_keyinit.so force revoke +session include system-auth +session optional pam_motd.so +session optional pam_mail.so dir=/var/spool/mail standard quiet +-session optional pam_systemd.so +session required pam_env.so user_readenv=1 diff --git a/x86_64/core/linux-pam/system-remote-login b/x86_64/core/linux-pam/system-remote-login new file mode 100644 index 0000000..347b815 --- /dev/null +++ b/x86_64/core/linux-pam/system-remote-login @@ -0,0 +1,6 @@ +#%PAM-1.0 + +auth include system-login +account include system-login +password include system-login +session include system-login diff --git a/x86_64/core/linux-pam/system-services b/x86_64/core/linux-pam/system-services new file mode 100644 index 0000000..6ed9bdc --- /dev/null +++ b/x86_64/core/linux-pam/system-services @@ -0,0 +1,11 @@ +#%PAM-1.0 + +auth sufficient pam_permit.so + +account include system-auth + +session optional pam_loginuid.so +session required pam_limits.so +session required pam_unix.so +session optional pam_permit.so +session required pam_env.so diff --git a/x86_64/core/linux/.nostrip b/x86_64/core/linux/.nostrip new file mode 100644 index 0000000..e69de29 diff --git a/x86_64/core/linux/PKGBUILD b/x86_64/core/linux/PKGBUILD new file mode 100644 index 0000000..b785c03 --- /dev/null +++ b/x86_64/core/linux/PKGBUILD @@ -0,0 +1,116 @@ +pkgname=linux +pkgver=5.17.8 +pkgrel=1 +pkgdesc='Linux' +arch=('x86_64') +options=('!strip' 'emptydirs') +makedepends=(rsync) +source=(https://github.com/Drunk-Linux/Linux/archive/refs/heads/$pkgver-drunk.tar.gz) + +# Deprecated as we ship modules/headers in 1 pkg now +replaces=(linux-api-headers) + +export KBUILD_BUILD_HOST=drunk-linux +export KBUILD_BUILD_USER=$pkgname +export KBUILD_BUILD_TIMESTAMP="$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EPOCH})" + +prepare() { + cd Linux-$pkgver-drunk + + echo "[!]: Cleaning src base" + make clean + + echo "[!]: Running mrproper" + make mrproper +} + +build() { + cd Linux-$pkgver-drunk + + echo "[!]: Getting up default config of drunk" + make drunk_defconfig + + echo "[!]: Started making all" + make all -j7 + + echo "[!]: Making headers" + make headers -j7 +} + +package() { + pkgdesc="The Linux kernel, modules and headers package" + + cd Linux-$pkgver-drunk + + echo "[!]: Installing modules" + make INSTALL_MOD_PATH=$pkgdir INSTALL_MOD_STRIP=1 modules_install + rm $pkgdir/lib/modules/$pkgver-drunk/{source,build} + + mkdir -p $pkgdir/boot + + echo "[!]: Installing vmlinuz" + cp arch/x86/boot/bzImage $pkgdir/boot/vmlinuz-drunk + cp .config $pkgdir/boot/config-drunk + echo $kernver > $pkgdir/lib/modules/KERNELVERSION + + echo "[!]: Installing build files..." + local builddir="$pkgdir/lib/modules/$pkgver-drunk/build" + install -Dt "$builddir" -m644 .config Makefile Module.symvers System.map \ + vmlinux + + install -Dt "$builddir/kernel" -m644 kernel/Makefile + install -Dt "$builddir/arch/x86" -m644 arch/x86/Makefile + cp -t "$builddir" -a scripts + + # add objtool for external module building and enabled VALIDATION_STACK option + install -Dt "$builddir/tools/objtool" tools/objtool/objtool + + # add xfs and shmem for aufs building + mkdir -p "$builddir"/{fs/xfs,mm} + + echo "[!]: Installing headers" + cp -t "$builddir" -a include + cp -t "$builddir/arch/x86" -a arch/x86/include + install -Dt "$builddir/arch/x86/kernel" -m644 arch/x86/kernel/asm-offsets.s + + install -Dt "$builddir/drivers/md" -m644 drivers/md/*.h + install -Dt "$builddir/net/mac80211" -m644 net/mac80211/*.h + + install -Dt "$builddir/drivers/media/i2c" -m644 drivers/media/i2c/msp3400-driver.h + + install -Dt "$builddir/drivers/media/usb/dvb-usb" -m644 drivers/media/usb/dvb-usb/*.h + install -Dt "$builddir/drivers/media/dvb-frontends" -m644 drivers/media/dvb-frontends/*.h + install -Dt "$builddir/drivers/media/tuners" -m644 drivers/media/tuners/*.h + + install -Dt "$builddir/drivers/iio/common/hid-sensors" -m644 drivers/iio/common/hid-sensors/*.h + + # Also insall with make ( Just to be sure that headers match with kernel ) + make headers_install INSTALL_HDR_PATH=$pkgdir/usr + + echo "[!]: Installing KConfig files" + find . -name 'Kconfig*' -exec install -Dm644 {} "$builddir/{}" \; + + echo "[!]: Removing unneeded architectures" + local arch + for arch in "$builddir"/arch/*/; do + [[ $arch = */x86/ ]] && continue + echo "Removing $(basename "$arch")" + rm -r "$arch" + done + + echo "[!]: Removing documentation" + rm -r "$builddir/Documentation" + + echo "[!]: Removing broken symlinks" + find -L "$builddir" -type l -printf 'Removing %P\n' -delete + + echo "[!]: Removing loose objects" + find "$builddir" -type f -name '*.o' -printf 'Removing %P\n' -delete + + echo "[!]: Stripping vmlinux" + strip -v $STRIP_STATIC "$builddir/vmlinux" + + echo "[!]: Adding src symlink to /usr/src/linux" + mkdir -p "$pkgdir/usr/src" + ln -sr "$builddir" "$pkgdir/usr/src/linux" +} diff --git a/x86_64/core/linux/config b/x86_64/core/linux/config new file mode 100644 index 0000000..536772a --- /dev/null +++ b/x86_64/core/linux/config @@ -0,0 +1,11040 @@ +# +# Automatically generated file; DO NOT EDIT. +# Linux/x86 5.15.13 Kernel Configuration +# +CONFIG_CC_VERSION_TEXT="gcc (GCC) 11.2.0" +CONFIG_CC_IS_GCC=y +CONFIG_GCC_VERSION=110200 +CONFIG_CLANG_VERSION=0 +CONFIG_AS_IS_GNU=y +CONFIG_AS_VERSION=23601 +CONFIG_LD_IS_BFD=y +CONFIG_LD_VERSION=23601 +CONFIG_LLD_VERSION=0 +CONFIG_CC_CAN_LINK=y +CONFIG_CC_CAN_LINK_STATIC=y +CONFIG_CC_HAS_ASM_GOTO=y +CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y +CONFIG_CC_HAS_ASM_INLINE=y +CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y +CONFIG_IRQ_WORK=y +CONFIG_BUILDTIME_TABLE_SORT=y +CONFIG_THREAD_INFO_IN_TASK=y + +# +# General setup +# +CONFIG_INIT_ENV_ARG_LIMIT=32 +# CONFIG_COMPILE_TEST is not set +# CONFIG_WERROR is not set +CONFIG_LOCALVERSION="-drunk" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_BUILD_SALT="" +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_BZIP2=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_XZ=y +CONFIG_HAVE_KERNEL_LZO=y +CONFIG_HAVE_KERNEL_LZ4=y +CONFIG_HAVE_KERNEL_ZSTD=y +# CONFIG_KERNEL_GZIP is not set +# CONFIG_KERNEL_BZIP2 is not set +# CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_XZ is not set +# CONFIG_KERNEL_LZO is not set +CONFIG_KERNEL_LZ4=y +# CONFIG_KERNEL_ZSTD is not set +CONFIG_DEFAULT_INIT="" +CONFIG_DEFAULT_HOSTNAME="drunk" +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y +# CONFIG_WATCH_QUEUE is not set +CONFIG_CROSS_MEMORY_ATTACH=y +CONFIG_USELIB=y +CONFIG_AUDIT=y +CONFIG_HAVE_ARCH_AUDITSYSCALL=y +CONFIG_AUDITSYSCALL=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y +CONFIG_GENERIC_PENDING_IRQ=y +CONFIG_GENERIC_IRQ_MIGRATION=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_CHIP=y +CONFIG_IRQ_DOMAIN=y +CONFIG_IRQ_DOMAIN_HIERARCHY=y +CONFIG_GENERIC_MSI_IRQ=y +CONFIG_GENERIC_MSI_IRQ_DOMAIN=y +CONFIG_IRQ_MSI_IOMMU=y +CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y +CONFIG_GENERIC_IRQ_RESERVATION_MODE=y +CONFIG_IRQ_FORCED_THREADING=y +CONFIG_SPARSE_IRQ=y +# CONFIG_GENERIC_IRQ_DEBUGFS is not set +# end of IRQ subsystem + +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_ARCH_CLOCKSOURCE_INIT=y +CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y +CONFIG_GENERIC_TIME_VSYSCALL=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y +CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y + +# +# Timers subsystem +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ_COMMON=y +# CONFIG_HZ_PERIODIC is not set +CONFIG_NO_HZ_IDLE=y +# CONFIG_NO_HZ_FULL is not set +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +# end of Timers subsystem + +CONFIG_BPF=y +CONFIG_HAVE_EBPF_JIT=y +CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y + +# +# BPF subsystem +# +CONFIG_BPF_SYSCALL=y +CONFIG_BPF_JIT=y +CONFIG_BPF_JIT_ALWAYS_ON=y +CONFIG_BPF_JIT_DEFAULT_ON=y +# CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set +CONFIG_USERMODE_DRIVER=y +# CONFIG_BPF_PRELOAD is not set +# CONFIG_BPF_LSM is not set +# end of BPF subsystem + +# CONFIG_PREEMPT_NONE is not set +CONFIG_PREEMPT_VOLUNTARY=y +# CONFIG_PREEMPT is not set +# CONFIG_SCHED_CORE is not set + +# +# CPU/Task time and stats accounting +# +CONFIG_TICK_CPU_ACCOUNTING=y +# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set +# CONFIG_IRQ_TIME_ACCOUNTING is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_TASKSTATS=y +CONFIG_TASK_DELAY_ACCT=y +CONFIG_TASK_XACCT=y +CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_PSI=y +# CONFIG_PSI_DEFAULT_DISABLED is not set +# end of CPU/Task time and stats accounting + +CONFIG_CPU_ISOLATION=y + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_RCU_EXPERT is not set +CONFIG_SRCU=y +CONFIG_TREE_SRCU=y +CONFIG_TASKS_RCU_GENERIC=y +CONFIG_TASKS_RUDE_RCU=y +CONFIG_TASKS_TRACE_RCU=y +CONFIG_RCU_STALL_COMMON=y +CONFIG_RCU_NEED_SEGCBLIST=y +# end of RCU Subsystem + +CONFIG_BUILD_BIN2C=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_IKHEADERS=y +CONFIG_LOG_BUF_SHIFT=18 +CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 +CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13 +# CONFIG_PRINTK_INDEX is not set +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y + +# +# Scheduler features +# +CONFIG_UCLAMP_TASK=y +CONFIG_UCLAMP_BUCKETS_COUNT=5 +# end of Scheduler features + +CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y +CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y +CONFIG_CC_HAS_INT128=y +CONFIG_ARCH_SUPPORTS_INT128=y +CONFIG_NUMA_BALANCING=y +CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y +CONFIG_CGROUPS=y +CONFIG_PAGE_COUNTER=y +CONFIG_MEMCG=y +CONFIG_MEMCG_SWAP=y +CONFIG_MEMCG_KMEM=y +CONFIG_BLK_CGROUP=y +CONFIG_CGROUP_WRITEBACK=y +CONFIG_CGROUP_SCHED=y +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_CFS_BANDWIDTH=y +# CONFIG_RT_GROUP_SCHED is not set +CONFIG_UCLAMP_TASK_GROUP=y +CONFIG_CGROUP_PIDS=y +CONFIG_CGROUP_RDMA=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_HUGETLB=y +CONFIG_CPUSETS=y +CONFIG_PROC_PID_CPUSET=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_BPF=y +# CONFIG_CGROUP_MISC is not set +# CONFIG_CGROUP_DEBUG is not set +CONFIG_SOCK_CGROUP_DATA=y +CONFIG_NAMESPACES=y +CONFIG_UTS_NS=y +CONFIG_TIME_NS=y +CONFIG_IPC_NS=y +CONFIG_USER_NS=y +CONFIG_PID_NS=y +CONFIG_NET_NS=y +CONFIG_CHECKPOINT_RESTORE=y +CONFIG_SCHED_AUTOGROUP=y +# CONFIG_SYSFS_DEPRECATED is not set +CONFIG_RELAY=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +CONFIG_RD_BZIP2=y +CONFIG_RD_LZMA=y +CONFIG_RD_XZ=y +CONFIG_RD_LZO=y +CONFIG_RD_LZ4=y +CONFIG_RD_ZSTD=y +CONFIG_BOOT_CONFIG=y +CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_LD_ORPHAN_WARN=y +CONFIG_SYSCTL=y +CONFIG_HAVE_UID16=y +CONFIG_SYSCTL_EXCEPTION_TRACE=y +CONFIG_HAVE_PCSPKR_PLATFORM=y +CONFIG_EXPERT=y +CONFIG_UID16=y +CONFIG_MULTIUSER=y +CONFIG_SGETMASK_SYSCALL=y +CONFIG_SYSFS_SYSCALL=y +CONFIG_FHANDLE=y +CONFIG_POSIX_TIMERS=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_PCSPKR_PLATFORM=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_FUTEX_PI=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_IO_URING=y +CONFIG_ADVISE_SYSCALLS=y +CONFIG_HAVE_ARCH_USERFAULTFD_WP=y +CONFIG_HAVE_ARCH_USERFAULTFD_MINOR=y +CONFIG_MEMBARRIER=y +CONFIG_KALLSYMS=y +CONFIG_KALLSYMS_ALL=y +CONFIG_KALLSYMS_ABSOLUTE_PERCPU=y +CONFIG_KALLSYMS_BASE_RELATIVE=y +CONFIG_USERFAULTFD=y +CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y +CONFIG_KCMP=y +CONFIG_RSEQ=y +# CONFIG_DEBUG_RSEQ is not set +# CONFIG_EMBEDDED is not set +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_PC104=y + +# +# Kernel Performance Events And Counters +# +CONFIG_PERF_EVENTS=y +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +# end of Kernel Performance Events And Counters + +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLUB_DEBUG=y +# CONFIG_COMPAT_BRK is not set +# CONFIG_SLAB is not set +CONFIG_SLUB=y +# CONFIG_SLOB is not set +CONFIG_SLAB_MERGE_DEFAULT=y +CONFIG_SLAB_FREELIST_RANDOM=y +CONFIG_SLAB_FREELIST_HARDENED=y +CONFIG_SHUFFLE_PAGE_ALLOCATOR=y +CONFIG_SLUB_CPU_PARTIAL=y +CONFIG_SYSTEM_DATA_VERIFICATION=y +CONFIG_PROFILING=y +CONFIG_TRACEPOINTS=y +# end of General setup + +CONFIG_64BIT=y +CONFIG_X86_64=y +CONFIG_X86=y +CONFIG_INSTRUCTION_DECODER=y +CONFIG_OUTPUT_FORMAT="elf64-x86-64" +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_MMU=y +CONFIG_ARCH_MMAP_RND_BITS_MIN=28 +CONFIG_ARCH_MMAP_RND_BITS_MAX=32 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16 +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ARCH_HAS_CPU_RELAX=y +CONFIG_ARCH_HAS_FILTER_PGPROT=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_NR_GPIO=1024 +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_ARCH_WANT_GENERAL_HUGETLB=y +CONFIG_AUDIT_ARCH=y +CONFIG_HAVE_INTEL_TXT=y +CONFIG_X86_64_SMP=y +CONFIG_ARCH_SUPPORTS_UPROBES=y +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_DYNAMIC_PHYSICAL_MASK=y +CONFIG_PGTABLE_LEVELS=4 +CONFIG_CC_HAS_SANE_STACKPROTECTOR=y + +# +# Processor type and features +# +CONFIG_SMP=y +CONFIG_X86_FEATURE_NAMES=y +CONFIG_X86_X2APIC=y +CONFIG_X86_MPPARSE=y +# CONFIG_GOLDFISH is not set +CONFIG_RETPOLINE=y +CONFIG_X86_CPU_RESCTRL=y +CONFIG_X86_EXTENDED_PLATFORM=y +CONFIG_X86_NUMACHIP=y +# CONFIG_X86_VSMP is not set +CONFIG_X86_UV=y +# CONFIG_X86_GOLDFISH is not set +# CONFIG_X86_INTEL_MID is not set +CONFIG_X86_INTEL_LPSS=y +CONFIG_X86_AMD_PLATFORM_DEVICE=y +CONFIG_IOSF_MBI=y +CONFIG_IOSF_MBI_DEBUG=y +CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y +CONFIG_SCHED_OMIT_FRAME_POINTER=y +CONFIG_HYPERVISOR_GUEST=y +CONFIG_PARAVIRT=y +CONFIG_PARAVIRT_XXL=y +# CONFIG_PARAVIRT_DEBUG is not set +CONFIG_PARAVIRT_SPINLOCKS=y +CONFIG_X86_HV_CALLBACK_VECTOR=y +CONFIG_XEN=y +CONFIG_XEN_PV=y +CONFIG_XEN_512GB=y +CONFIG_XEN_PV_SMP=y +CONFIG_XEN_PV_DOM0=y +CONFIG_XEN_PVHVM=y +CONFIG_XEN_PVHVM_SMP=y +CONFIG_XEN_PVHVM_GUEST=y +CONFIG_XEN_SAVE_RESTORE=y +# CONFIG_XEN_DEBUG_FS is not set +CONFIG_XEN_PVH=y +CONFIG_XEN_DOM0=y +CONFIG_KVM_GUEST=y +CONFIG_ARCH_CPUIDLE_HALTPOLL=y +CONFIG_PVH=y +# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set +CONFIG_PARAVIRT_CLOCK=y +CONFIG_JAILHOUSE_GUEST=y +CONFIG_ACRN_GUEST=y +# CONFIG_MK8 is not set +# CONFIG_MPSC is not set +# CONFIG_MCORE2 is not set +# CONFIG_MATOM is not set +CONFIG_GENERIC_CPU=y +CONFIG_X86_INTERNODE_CACHE_SHIFT=6 +CONFIG_X86_L1_CACHE_SHIFT=6 +CONFIG_X86_TSC=y +CONFIG_X86_CMPXCHG64=y +CONFIG_X86_CMOV=y +CONFIG_X86_MINIMUM_CPU_FAMILY=64 +CONFIG_X86_DEBUGCTLMSR=y +CONFIG_IA32_FEAT_CTL=y +CONFIG_X86_VMX_FEATURE_NAMES=y +CONFIG_PROCESSOR_SELECT=y +CONFIG_CPU_SUP_INTEL=y +CONFIG_CPU_SUP_AMD=y +CONFIG_CPU_SUP_HYGON=y +CONFIG_CPU_SUP_CENTAUR=y +CONFIG_CPU_SUP_ZHAOXIN=y +CONFIG_HPET_TIMER=y +CONFIG_HPET_EMULATE_RTC=y +CONFIG_DMI=y +CONFIG_GART_IOMMU=y +CONFIG_MAXSMP=y +CONFIG_NR_CPUS_RANGE_BEGIN=8192 +CONFIG_NR_CPUS_RANGE_END=8192 +CONFIG_NR_CPUS_DEFAULT=8192 +CONFIG_NR_CPUS=8192 +CONFIG_SCHED_SMT=y +CONFIG_SCHED_MC=y +CONFIG_SCHED_MC_PRIO=y +CONFIG_X86_LOCAL_APIC=y +CONFIG_X86_IO_APIC=y +CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y +CONFIG_X86_MCE=y +CONFIG_X86_MCELOG_LEGACY=y +CONFIG_X86_MCE_INTEL=y +CONFIG_X86_MCE_AMD=y +CONFIG_X86_MCE_THRESHOLD=y +CONFIG_X86_MCE_INJECT=m + +# +# Performance monitoring +# +CONFIG_PERF_EVENTS_INTEL_UNCORE=y +CONFIG_PERF_EVENTS_INTEL_RAPL=m +CONFIG_PERF_EVENTS_INTEL_CSTATE=m +# CONFIG_PERF_EVENTS_AMD_POWER is not set +CONFIG_PERF_EVENTS_AMD_UNCORE=y +# end of Performance monitoring + +CONFIG_X86_16BIT=y +CONFIG_X86_ESPFIX64=y +CONFIG_X86_VSYSCALL_EMULATION=y +CONFIG_X86_IOPL_IOPERM=y +CONFIG_I8K=m +CONFIG_MICROCODE=y +CONFIG_MICROCODE_INTEL=y +CONFIG_MICROCODE_AMD=y +CONFIG_MICROCODE_OLD_INTERFACE=y +CONFIG_X86_MSR=m +CONFIG_X86_CPUID=m +# CONFIG_X86_5LEVEL is not set +CONFIG_X86_DIRECT_GBPAGES=y +# CONFIG_X86_CPA_STATISTICS is not set +CONFIG_AMD_MEM_ENCRYPT=y +# CONFIG_AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT is not set +CONFIG_NUMA=y +CONFIG_AMD_NUMA=y +CONFIG_X86_64_ACPI_NUMA=y +# CONFIG_NUMA_EMU is not set +CONFIG_NODES_SHIFT=10 +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_DEFAULT=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_MEMORY_PROBE=y +CONFIG_ARCH_PROC_KCORE_TEXT=y +CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 +CONFIG_X86_PMEM_LEGACY_DEVICE=y +CONFIG_X86_PMEM_LEGACY=y +CONFIG_X86_CHECK_BIOS_CORRUPTION=y +CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y +CONFIG_MTRR=y +CONFIG_MTRR_SANITIZER=y +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1 +CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 +CONFIG_X86_PAT=y +CONFIG_ARCH_USES_PG_UNCACHED=y +CONFIG_ARCH_RANDOM=y +CONFIG_X86_SMAP=y +CONFIG_X86_UMIP=y +CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y +CONFIG_X86_INTEL_TSX_MODE_OFF=y +# CONFIG_X86_INTEL_TSX_MODE_ON is not set +# CONFIG_X86_INTEL_TSX_MODE_AUTO is not set +# CONFIG_X86_SGX is not set +CONFIG_EFI=y +CONFIG_EFI_STUB=y +CONFIG_EFI_MIXED=y +# CONFIG_HZ_100 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_300 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ=250 +CONFIG_SCHED_HRTICK=y +CONFIG_KEXEC=y +CONFIG_KEXEC_FILE=y +CONFIG_ARCH_HAS_KEXEC_PURGATORY=y +CONFIG_KEXEC_SIG=y +# CONFIG_KEXEC_SIG_FORCE is not set +CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y +CONFIG_CRASH_DUMP=y +CONFIG_KEXEC_JUMP=y +CONFIG_PHYSICAL_START=0x1000000 +CONFIG_RELOCATABLE=y +CONFIG_RANDOMIZE_BASE=y +CONFIG_X86_NEED_RELOCS=y +CONFIG_PHYSICAL_ALIGN=0x200000 +CONFIG_DYNAMIC_MEMORY_LAYOUT=y +CONFIG_RANDOMIZE_MEMORY=y +CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING=0xa +CONFIG_HOTPLUG_CPU=y +# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set +# CONFIG_DEBUG_HOTPLUG_CPU0 is not set +# CONFIG_COMPAT_VDSO is not set +# CONFIG_LEGACY_VSYSCALL_EMULATE is not set +CONFIG_LEGACY_VSYSCALL_XONLY=y +# CONFIG_LEGACY_VSYSCALL_NONE is not set +# CONFIG_CMDLINE_BOOL is not set +CONFIG_MODIFY_LDT_SYSCALL=y +CONFIG_HAVE_LIVEPATCH=y +CONFIG_LIVEPATCH=y +# end of Processor type and features + +CONFIG_ARCH_HAS_ADD_PAGES=y +CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y +CONFIG_USE_PERCPU_NUMA_NODE_ID=y + +# +# Power management and ACPI options +# +CONFIG_ARCH_HIBERNATION_HEADER=y +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +# CONFIG_SUSPEND_SKIP_SYNC is not set +CONFIG_HIBERNATE_CALLBACKS=y +CONFIG_HIBERNATION=y +CONFIG_HIBERNATION_SNAPSHOT_DEV=y +CONFIG_PM_STD_PARTITION="" +CONFIG_PM_SLEEP=y +CONFIG_PM_SLEEP_SMP=y +# CONFIG_PM_AUTOSLEEP is not set +CONFIG_PM_WAKELOCKS=y +CONFIG_PM_WAKELOCKS_LIMIT=100 +CONFIG_PM_WAKELOCKS_GC=y +CONFIG_PM=y +CONFIG_PM_DEBUG=y +CONFIG_PM_ADVANCED_DEBUG=y +# CONFIG_PM_TEST_SUSPEND is not set +CONFIG_PM_SLEEP_DEBUG=y +# CONFIG_DPM_WATCHDOG is not set +CONFIG_PM_TRACE=y +CONFIG_PM_TRACE_RTC=y +CONFIG_PM_CLK=y +CONFIG_PM_GENERIC_DOMAINS=y +CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y +CONFIG_PM_GENERIC_DOMAINS_SLEEP=y +# CONFIG_ENERGY_MODEL is not set +CONFIG_ARCH_SUPPORTS_ACPI=y +CONFIG_ACPI=y +CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y +CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y +CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=y +CONFIG_ACPI_DEBUGGER=y +CONFIG_ACPI_DEBUGGER_USER=y +CONFIG_ACPI_SPCR_TABLE=y +# CONFIG_ACPI_FPDT is not set +CONFIG_ACPI_LPIT=y +CONFIG_ACPI_SLEEP=y +CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y +CONFIG_ACPI_EC_DEBUGFS=m +CONFIG_ACPI_AC=y +CONFIG_ACPI_BATTERY=y +CONFIG_ACPI_BUTTON=y +CONFIG_ACPI_VIDEO=m +CONFIG_ACPI_FAN=y +CONFIG_ACPI_TAD=m +CONFIG_ACPI_DOCK=y +CONFIG_ACPI_CPU_FREQ_PSS=y +CONFIG_ACPI_PROCESSOR_CSTATE=y +CONFIG_ACPI_PROCESSOR_IDLE=y +CONFIG_ACPI_CPPC_LIB=y +CONFIG_ACPI_PROCESSOR=y +CONFIG_ACPI_IPMI=m +CONFIG_ACPI_HOTPLUG_CPU=y +CONFIG_ACPI_PROCESSOR_AGGREGATOR=m +CONFIG_ACPI_THERMAL=y +CONFIG_ACPI_PLATFORM_PROFILE=m +CONFIG_ACPI_CUSTOM_DSDT_FILE="" +CONFIG_ARCH_HAS_ACPI_TABLE_UPGRADE=y +CONFIG_ACPI_TABLE_UPGRADE=y +CONFIG_ACPI_DEBUG=y +CONFIG_ACPI_PCI_SLOT=y +CONFIG_ACPI_CONTAINER=y +CONFIG_ACPI_HOTPLUG_MEMORY=y +CONFIG_ACPI_HOTPLUG_IOAPIC=y +CONFIG_ACPI_SBS=m +CONFIG_ACPI_HED=y +# CONFIG_ACPI_CUSTOM_METHOD is not set +CONFIG_ACPI_BGRT=y +# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set +CONFIG_ACPI_NFIT=m +# CONFIG_NFIT_SECURITY_DEBUG is not set +CONFIG_ACPI_NUMA=y +CONFIG_ACPI_HMAT=y +CONFIG_HAVE_ACPI_APEI=y +CONFIG_HAVE_ACPI_APEI_NMI=y +CONFIG_ACPI_APEI=y +CONFIG_ACPI_APEI_GHES=y +CONFIG_ACPI_APEI_PCIEAER=y +CONFIG_ACPI_APEI_MEMORY_FAILURE=y +CONFIG_ACPI_APEI_EINJ=m +# CONFIG_ACPI_APEI_ERST_DEBUG is not set +# CONFIG_ACPI_DPTF is not set +CONFIG_ACPI_WATCHDOG=y +CONFIG_ACPI_EXTLOG=m +CONFIG_ACPI_ADXL=y +CONFIG_ACPI_CONFIGFS=m +# CONFIG_PMIC_OPREGION is not set +CONFIG_X86_PM_TIMER=y +CONFIG_ACPI_PRMT=y + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_GOV_ATTR_SET=y +CONFIG_CPU_FREQ_GOV_COMMON=y +CONFIG_CPU_FREQ_STAT=y +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y + +# +# CPU frequency scaling drivers +# +CONFIG_X86_INTEL_PSTATE=y +CONFIG_X86_PCC_CPUFREQ=y +CONFIG_X86_ACPI_CPUFREQ=y +CONFIG_X86_ACPI_CPUFREQ_CPB=y +CONFIG_X86_POWERNOW_K8=y +CONFIG_X86_AMD_FREQ_SENSITIVITY=m +CONFIG_X86_SPEEDSTEP_CENTRINO=y +CONFIG_X86_P4_CLOCKMOD=m + +# +# shared options +# +CONFIG_X86_SPEEDSTEP_LIB=m +# end of CPU Frequency scaling + +# +# CPU Idle +# +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_CPU_IDLE_GOV_MENU=y +CONFIG_CPU_IDLE_GOV_TEO=y +CONFIG_CPU_IDLE_GOV_HALTPOLL=y +CONFIG_HALTPOLL_CPUIDLE=m +# end of CPU Idle + +CONFIG_INTEL_IDLE=y +# end of Power management and ACPI options + +# +# Bus options (PCI etc.) +# +CONFIG_PCI_DIRECT=y +CONFIG_PCI_MMCONFIG=y +CONFIG_PCI_XEN=y +CONFIG_MMCONF_FAM10H=y +# CONFIG_PCI_CNB20LE_QUIRK is not set +CONFIG_ISA_BUS=y +CONFIG_ISA_DMA_API=y +CONFIG_AMD_NB=y +# end of Bus options (PCI etc.) + +# +# Binary Emulations +# +CONFIG_IA32_EMULATION=y +CONFIG_X86_X32=y +CONFIG_COMPAT_32=y +CONFIG_COMPAT=y +CONFIG_COMPAT_FOR_U64_ALIGNMENT=y +CONFIG_SYSVIPC_COMPAT=y +# end of Binary Emulations + +CONFIG_HAVE_KVM=y +CONFIG_HAVE_KVM_IRQCHIP=y +CONFIG_HAVE_KVM_IRQFD=y +CONFIG_HAVE_KVM_IRQ_ROUTING=y +CONFIG_HAVE_KVM_EVENTFD=y +CONFIG_KVM_MMIO=y +CONFIG_KVM_ASYNC_PF=y +CONFIG_HAVE_KVM_MSI=y +CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y +CONFIG_KVM_VFIO=y +CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y +CONFIG_KVM_COMPAT=y +CONFIG_HAVE_KVM_IRQ_BYPASS=y +CONFIG_HAVE_KVM_NO_POLL=y +CONFIG_KVM_XFER_TO_GUEST_WORK=y +CONFIG_HAVE_KVM_PM_NOTIFIER=y +CONFIG_VIRTUALIZATION=y +CONFIG_KVM=m +CONFIG_KVM_WERROR=y +CONFIG_KVM_INTEL=m +CONFIG_KVM_AMD=m +# CONFIG_KVM_AMD_SEV is not set +CONFIG_KVM_XEN=y +CONFIG_KVM_MMU_AUDIT=y +CONFIG_AS_AVX512=y +CONFIG_AS_SHA1_NI=y +CONFIG_AS_SHA256_NI=y +CONFIG_AS_TPAUSE=y + +# +# General architecture-dependent options +# +CONFIG_CRASH_CORE=y +CONFIG_KEXEC_CORE=y +CONFIG_HOTPLUG_SMT=y +CONFIG_GENERIC_ENTRY=y +CONFIG_KPROBES=y +CONFIG_JUMP_LABEL=y +# CONFIG_STATIC_KEYS_SELFTEST is not set +# CONFIG_STATIC_CALL_SELFTEST is not set +CONFIG_OPTPROBES=y +CONFIG_KPROBES_ON_FTRACE=y +CONFIG_UPROBES=y +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_ARCH_USE_BUILTIN_BSWAP=y +CONFIG_KRETPROBES=y +CONFIG_USER_RETURN_NOTIFIER=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_OPTPROBES=y +CONFIG_HAVE_KPROBES_ON_FTRACE=y +CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y +CONFIG_HAVE_NMI=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_CONTIGUOUS=y +CONFIG_GENERIC_SMP_IDLE_THREAD=y +CONFIG_ARCH_HAS_FORTIFY_SOURCE=y +CONFIG_ARCH_HAS_SET_MEMORY=y +CONFIG_ARCH_HAS_SET_DIRECT_MAP=y +CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y +CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y +CONFIG_ARCH_WANTS_NO_INSTR=y +CONFIG_HAVE_ASM_MODVERSIONS=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_RSEQ=y +CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y +CONFIG_HAVE_USER_RETURN_NOTIFIER=y +CONFIG_HAVE_PERF_EVENTS_NMI=y +CONFIG_HAVE_HARDLOCKUP_DETECTOR_PERF=y +CONFIG_HAVE_PERF_REGS=y +CONFIG_HAVE_PERF_USER_STACK_DUMP=y +CONFIG_HAVE_ARCH_JUMP_LABEL=y +CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y +CONFIG_MMU_GATHER_TABLE_FREE=y +CONFIG_MMU_GATHER_RCU_TABLE_FREE=y +CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y +CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y +CONFIG_HAVE_CMPXCHG_LOCAL=y +CONFIG_HAVE_CMPXCHG_DOUBLE=y +CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y +CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y +CONFIG_HAVE_ARCH_SECCOMP=y +CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +CONFIG_SECCOMP=y +CONFIG_SECCOMP_FILTER=y +# CONFIG_SECCOMP_CACHE_DEBUG is not set +CONFIG_HAVE_ARCH_STACKLEAK=y +CONFIG_HAVE_STACKPROTECTOR=y +CONFIG_STACKPROTECTOR=y +CONFIG_STACKPROTECTOR_STRONG=y +CONFIG_ARCH_SUPPORTS_LTO_CLANG=y +CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y +CONFIG_LTO_NONE=y +CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=y +CONFIG_HAVE_CONTEXT_TRACKING=y +CONFIG_HAVE_CONTEXT_TRACKING_OFFSTACK=y +CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y +CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y +CONFIG_HAVE_MOVE_PUD=y +CONFIG_HAVE_MOVE_PMD=y +CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y +CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=y +CONFIG_HAVE_ARCH_HUGE_VMAP=y +CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y +CONFIG_HAVE_ARCH_SOFT_DIRTY=y +CONFIG_HAVE_MOD_ARCH_SPECIFIC=y +CONFIG_MODULES_USE_ELF_RELA=y +CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y +CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK=y +CONFIG_ARCH_HAS_ELF_RANDOMIZE=y +CONFIG_HAVE_ARCH_MMAP_RND_BITS=y +CONFIG_HAVE_EXIT_THREAD=y +CONFIG_ARCH_MMAP_RND_BITS=28 +CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y +CONFIG_ARCH_MMAP_RND_COMPAT_BITS=8 +CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES=y +CONFIG_HAVE_STACK_VALIDATION=y +CONFIG_HAVE_RELIABLE_STACKTRACE=y +CONFIG_ISA_BUS_API=y +CONFIG_OLD_SIGSUSPEND3=y +CONFIG_COMPAT_OLD_SIGACTION=y +CONFIG_COMPAT_32BIT_TIME=y +CONFIG_HAVE_ARCH_VMAP_STACK=y +CONFIG_VMAP_STACK=y +CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y +# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set +CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y +CONFIG_STRICT_KERNEL_RWX=y +CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y +CONFIG_STRICT_MODULE_RWX=y +CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y +CONFIG_ARCH_USE_MEMREMAP_PROT=y +# CONFIG_LOCK_EVENT_COUNTS is not set +CONFIG_ARCH_HAS_MEM_ENCRYPT=y +CONFIG_ARCH_HAS_CC_PLATFORM=y +CONFIG_HAVE_STATIC_CALL=y +CONFIG_HAVE_STATIC_CALL_INLINE=y +CONFIG_HAVE_PREEMPT_DYNAMIC=y +CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_ARCH_HAS_ELFCORE_COMPAT=y +CONFIG_ARCH_HAS_PARANOID_L1D_FLUSH=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y +# end of GCOV-based kernel profiling + +CONFIG_HAVE_GCC_PLUGINS=y +CONFIG_GCC_PLUGINS=y +# CONFIG_GCC_PLUGIN_CYC_COMPLEXITY is not set +# CONFIG_GCC_PLUGIN_LATENT_ENTROPY is not set +# CONFIG_GCC_PLUGIN_RANDSTRUCT is not set +# end of General architecture-dependent options + +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=0 +CONFIG_MODULE_SIG_FORMAT=y +CONFIG_MODULES=y +CONFIG_MODULE_FORCE_LOAD=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_MODVERSIONS=y +CONFIG_ASM_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_MODULE_SIG=y +# CONFIG_MODULE_SIG_FORCE is not set +# CONFIG_MODULE_SIG_ALL is not set +# CONFIG_MODULE_SIG_SHA1 is not set +# CONFIG_MODULE_SIG_SHA224 is not set +# CONFIG_MODULE_SIG_SHA256 is not set +# CONFIG_MODULE_SIG_SHA384 is not set +CONFIG_MODULE_SIG_SHA512=y +CONFIG_MODULE_SIG_HASH="sha512" +CONFIG_MODULE_COMPRESS_NONE=y +# CONFIG_MODULE_COMPRESS_GZIP is not set +# CONFIG_MODULE_COMPRESS_XZ is not set +# CONFIG_MODULE_COMPRESS_ZSTD is not set +CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=y +CONFIG_MODPROBE_PATH="/sbin/modprobe" +# CONFIG_TRIM_UNUSED_KSYMS is not set +CONFIG_MODULES_TREE_LOOKUP=y +CONFIG_BLOCK=y +CONFIG_BLK_RQ_ALLOC_TIME=y +CONFIG_BLK_CGROUP_RWSTAT=y +CONFIG_BLK_DEV_BSG_COMMON=y +CONFIG_BLK_DEV_BSGLIB=y +CONFIG_BLK_DEV_INTEGRITY=y +CONFIG_BLK_DEV_INTEGRITY_T10=y +CONFIG_BLK_DEV_ZONED=y +CONFIG_BLK_DEV_THROTTLING=y +# CONFIG_BLK_DEV_THROTTLING_LOW is not set +CONFIG_BLK_WBT=y +CONFIG_BLK_WBT_MQ=y +# CONFIG_BLK_CGROUP_IOLATENCY is not set +# CONFIG_BLK_CGROUP_FC_APPID is not set +CONFIG_BLK_CGROUP_IOCOST=y +# CONFIG_BLK_CGROUP_IOPRIO is not set +CONFIG_BLK_DEBUG_FS=y +CONFIG_BLK_DEBUG_FS_ZONED=y +CONFIG_BLK_SED_OPAL=y +# CONFIG_BLK_INLINE_ENCRYPTION is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +CONFIG_AIX_PARTITION=y +CONFIG_OSF_PARTITION=y +CONFIG_AMIGA_PARTITION=y +CONFIG_ATARI_PARTITION=y +CONFIG_MAC_PARTITION=y +CONFIG_MSDOS_PARTITION=y +CONFIG_BSD_DISKLABEL=y +CONFIG_MINIX_SUBPARTITION=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_LDM_PARTITION=y +# CONFIG_LDM_DEBUG is not set +CONFIG_SGI_PARTITION=y +CONFIG_ULTRIX_PARTITION=y +CONFIG_SUN_PARTITION=y +CONFIG_KARMA_PARTITION=y +CONFIG_EFI_PARTITION=y +CONFIG_SYSV68_PARTITION=y +CONFIG_CMDLINE_PARTITION=y +# end of Partition Types + +CONFIG_BLOCK_COMPAT=y +CONFIG_BLK_MQ_PCI=y +CONFIG_BLK_MQ_VIRTIO=y +CONFIG_BLK_MQ_RDMA=y +CONFIG_BLK_PM=y +CONFIG_BLOCK_HOLDER_DEPRECATED=y + +# +# IO Schedulers +# +CONFIG_MQ_IOSCHED_DEADLINE=y +CONFIG_MQ_IOSCHED_KYBER=y +CONFIG_IOSCHED_BFQ=y +CONFIG_BFQ_GROUP_IOSCHED=y +# CONFIG_BFQ_CGROUP_DEBUG is not set +# end of IO Schedulers + +CONFIG_PREEMPT_NOTIFIERS=y +CONFIG_PADATA=y +CONFIG_ASN1=y +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +CONFIG_INLINE_READ_UNLOCK=y +CONFIG_INLINE_READ_UNLOCK_IRQ=y +CONFIG_INLINE_WRITE_UNLOCK=y +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y +CONFIG_MUTEX_SPIN_ON_OWNER=y +CONFIG_RWSEM_SPIN_ON_OWNER=y +CONFIG_LOCK_SPIN_ON_OWNER=y +CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y +CONFIG_QUEUED_SPINLOCKS=y +CONFIG_ARCH_USE_QUEUED_RWLOCKS=y +CONFIG_QUEUED_RWLOCKS=y +CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y +CONFIG_ARCH_HAS_SYNC_CORE_BEFORE_USERMODE=y +CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y +CONFIG_FREEZER=y + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +CONFIG_COMPAT_BINFMT_ELF=y +CONFIG_ELFCORE=y +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y +CONFIG_BINFMT_SCRIPT=y +CONFIG_BINFMT_MISC=y +CONFIG_COREDUMP=y +# end of Executable file formats + +# +# Memory Management options +# +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_SPARSEMEM_MANUAL=y +CONFIG_SPARSEMEM=y +CONFIG_SPARSEMEM_EXTREME=y +CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y +CONFIG_SPARSEMEM_VMEMMAP=y +CONFIG_HAVE_FAST_GUP=y +CONFIG_NUMA_KEEP_MEMINFO=y +CONFIG_MEMORY_ISOLATION=y +CONFIG_HAVE_BOOTMEM_INFO_NODE=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y +CONFIG_MEMORY_HOTPLUG=y +CONFIG_MEMORY_HOTPLUG_SPARSE=y +CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +CONFIG_MEMORY_HOTREMOVE=y +CONFIG_MHP_MEMMAP_ON_MEMORY=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y +CONFIG_MEMORY_BALLOON=y +CONFIG_BALLOON_COMPACTION=y +CONFIG_COMPACTION=y +CONFIG_PAGE_REPORTING=y +CONFIG_MIGRATION=y +CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y +CONFIG_ARCH_ENABLE_THP_MIGRATION=y +CONFIG_CONTIG_ALLOC=y +CONFIG_PHYS_ADDR_T_64BIT=y +CONFIG_VIRT_TO_BUS=y +CONFIG_MMU_NOTIFIER=y +CONFIG_KSM=y +CONFIG_DEFAULT_MMAP_MIN_ADDR=65536 +CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y +CONFIG_MEMORY_FAILURE=y +CONFIG_HWPOISON_INJECT=m +CONFIG_TRANSPARENT_HUGEPAGE=y +# CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS is not set +CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y +CONFIG_ARCH_WANTS_THP_SWAP=y +CONFIG_THP_SWAP=y +CONFIG_CLEANCACHE=y +CONFIG_FRONTSWAP=y +CONFIG_CMA=y +# CONFIG_CMA_DEBUG is not set +# CONFIG_CMA_DEBUGFS is not set +# CONFIG_CMA_SYSFS is not set +CONFIG_CMA_AREAS=7 +CONFIG_MEM_SOFT_DIRTY=y +CONFIG_ZSWAP=y +# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_DEFLATE is not set +CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y +# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_842 is not set +# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4 is not set +# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4HC is not set +# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set +CONFIG_ZSWAP_COMPRESSOR_DEFAULT="lzo" +CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y +# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD is not set +# CONFIG_ZSWAP_ZPOOL_DEFAULT_ZSMALLOC is not set +CONFIG_ZSWAP_ZPOOL_DEFAULT="zbud" +# CONFIG_ZSWAP_DEFAULT_ON is not set +CONFIG_ZPOOL=y +CONFIG_ZBUD=y +CONFIG_Z3FOLD=m +CONFIG_ZSMALLOC=y +# CONFIG_ZSMALLOC_STAT is not set +CONFIG_GENERIC_EARLY_IOREMAP=y +# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set +CONFIG_PAGE_IDLE_FLAG=y +CONFIG_IDLE_PAGE_TRACKING=y +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_ARCH_HAS_PTE_DEVMAP=y +CONFIG_ARCH_HAS_ZONE_DMA_SET=y +CONFIG_ZONE_DMA=y +CONFIG_ZONE_DMA32=y +CONFIG_ZONE_DEVICE=y +CONFIG_DEV_PAGEMAP_OPS=y +CONFIG_HMM_MIRROR=y +CONFIG_DEVICE_PRIVATE=y +CONFIG_VMAP_PFN=y +CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y +CONFIG_ARCH_HAS_PKEYS=y +# CONFIG_PERCPU_STATS is not set +# CONFIG_GUP_TEST is not set +# CONFIG_READ_ONLY_THP_FOR_FS is not set +CONFIG_ARCH_HAS_PTE_SPECIAL=y +CONFIG_MAPPING_DIRTY_HELPERS=y +CONFIG_SECRETMEM=y + +# +# Data Access Monitoring +# +# CONFIG_DAMON is not set +# end of Data Access Monitoring +# end of Memory Management options + +CONFIG_NET=y +CONFIG_COMPAT_NETLINK_MESSAGES=y +CONFIG_NET_INGRESS=y +CONFIG_NET_EGRESS=y +CONFIG_NET_REDIRECT=y +CONFIG_SKB_EXTENSIONS=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_DIAG=y +CONFIG_UNIX=y +CONFIG_UNIX_SCM=y +CONFIG_AF_UNIX_OOB=y +CONFIG_UNIX_DIAG=y +CONFIG_TLS=y +CONFIG_TLS_DEVICE=y +# CONFIG_TLS_TOE is not set +CONFIG_XFRM=y +CONFIG_XFRM_OFFLOAD=y +CONFIG_XFRM_ALGO=y +CONFIG_XFRM_USER=y +# CONFIG_XFRM_USER_COMPAT is not set +CONFIG_XFRM_INTERFACE=y +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +CONFIG_XFRM_STATISTICS=y +CONFIG_XFRM_AH=m +CONFIG_XFRM_ESP=m +CONFIG_XFRM_IPCOMP=m +CONFIG_NET_KEY=y +# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_SMC=m +CONFIG_SMC_DIAG=m +CONFIG_XDP_SOCKETS=y +CONFIG_XDP_SOCKETS_DIAG=m +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_FIB_TRIE_STATS=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_IP_ROUTE_CLASSID=y +# CONFIG_IP_PNP is not set +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE_DEMUX=m +CONFIG_NET_IP_TUNNEL=y +CONFIG_NET_IPGRE=m +CONFIG_NET_IPGRE_BROADCAST=y +CONFIG_IP_MROUTE_COMMON=y +CONFIG_IP_MROUTE=y +CONFIG_IP_MROUTE_MULTIPLE_TABLES=y +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +CONFIG_SYN_COOKIES=y +CONFIG_NET_IPVTI=m +CONFIG_NET_UDP_TUNNEL=y +CONFIG_NET_FOU=m +CONFIG_NET_FOU_IP_TUNNELS=y +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_ESP_OFFLOAD=m +# CONFIG_INET_ESPINTCP is not set +CONFIG_INET_IPCOMP=m +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INET_TUNNEL=m +CONFIG_INET_DIAG=m +CONFIG_INET_TCP_DIAG=m +CONFIG_INET_UDP_DIAG=m +CONFIG_INET_RAW_DIAG=m +CONFIG_INET_DIAG_DESTROY=y +CONFIG_TCP_CONG_ADVANCED=y +CONFIG_TCP_CONG_BIC=m +CONFIG_TCP_CONG_CUBIC=y +CONFIG_TCP_CONG_WESTWOOD=m +CONFIG_TCP_CONG_HTCP=m +CONFIG_TCP_CONG_HSTCP=m +CONFIG_TCP_CONG_HYBLA=m +CONFIG_TCP_CONG_VEGAS=m +CONFIG_TCP_CONG_NV=m +CONFIG_TCP_CONG_SCALABLE=m +CONFIG_TCP_CONG_LP=m +CONFIG_TCP_CONG_VENO=m +CONFIG_TCP_CONG_YEAH=m +CONFIG_TCP_CONG_ILLINOIS=m +CONFIG_TCP_CONG_DCTCP=m +CONFIG_TCP_CONG_CDG=m +CONFIG_TCP_CONG_BBR=m +CONFIG_DEFAULT_CUBIC=y +# CONFIG_DEFAULT_RENO is not set +CONFIG_DEFAULT_TCP_CONG="cubic" +CONFIG_TCP_MD5SIG=y +CONFIG_IPV6=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_ESP_OFFLOAD=m +# CONFIG_INET6_ESPINTCP is not set +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_MIP6=m +CONFIG_IPV6_ILA=m +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_IPV6_VTI=m +CONFIG_IPV6_SIT=m +CONFIG_IPV6_SIT_6RD=y +CONFIG_IPV6_NDISC_NODETYPE=y +CONFIG_IPV6_TUNNEL=m +CONFIG_IPV6_GRE=m +CONFIG_IPV6_FOU=m +CONFIG_IPV6_FOU_TUNNEL=m +CONFIG_IPV6_MULTIPLE_TABLES=y +CONFIG_IPV6_SUBTREES=y +CONFIG_IPV6_MROUTE=y +CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y +CONFIG_IPV6_PIMSM_V2=y +CONFIG_IPV6_SEG6_LWTUNNEL=y +CONFIG_IPV6_SEG6_HMAC=y +CONFIG_IPV6_SEG6_BPF=y +# CONFIG_IPV6_RPL_LWTUNNEL is not set +# CONFIG_IPV6_IOAM6_LWTUNNEL is not set +CONFIG_NETLABEL=y +# CONFIG_MPTCP is not set +CONFIG_NETWORK_SECMARK=y +CONFIG_NET_PTP_CLASSIFY=y +CONFIG_NETWORK_PHY_TIMESTAMPING=y +CONFIG_NETFILTER=y +CONFIG_NETFILTER_ADVANCED=y +CONFIG_BRIDGE_NETFILTER=m + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_INGRESS=y +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_FAMILY_BRIDGE=y +CONFIG_NETFILTER_FAMILY_ARP=y +# CONFIG_NETFILTER_NETLINK_HOOK is not set +CONFIG_NETFILTER_NETLINK_ACCT=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NETFILTER_NETLINK_OSF=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_LOG_SYSLOG=m +CONFIG_NETFILTER_CONNCOUNT=m +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_SECMARK=y +CONFIG_NF_CONNTRACK_ZONES=y +# CONFIG_NF_CONNTRACK_PROCFS is not set +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CONNTRACK_TIMEOUT=y +CONFIG_NF_CONNTRACK_TIMESTAMP=y +CONFIG_NF_CONNTRACK_LABELS=y +CONFIG_NF_CT_PROTO_DCCP=y +CONFIG_NF_CT_PROTO_GRE=y +CONFIG_NF_CT_PROTO_SCTP=y +CONFIG_NF_CT_PROTO_UDPLITE=y +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_BROADCAST=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_SNMP=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m +CONFIG_NF_CT_NETLINK_TIMEOUT=m +CONFIG_NF_CT_NETLINK_HELPER=m +CONFIG_NETFILTER_NETLINK_GLUE_CT=y +CONFIG_NF_NAT=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_SIP=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_REDIRECT=y +CONFIG_NF_NAT_MASQUERADE=y +CONFIG_NETFILTER_SYNPROXY=m +CONFIG_NF_TABLES=m +CONFIG_NF_TABLES_INET=y +CONFIG_NF_TABLES_NETDEV=y +CONFIG_NFT_NUMGEN=m +CONFIG_NFT_CT=m +CONFIG_NFT_FLOW_OFFLOAD=m +CONFIG_NFT_COUNTER=m +CONFIG_NFT_CONNLIMIT=m +CONFIG_NFT_LOG=m +CONFIG_NFT_LIMIT=m +CONFIG_NFT_MASQ=m +CONFIG_NFT_REDIR=m +CONFIG_NFT_NAT=m +CONFIG_NFT_TUNNEL=m +CONFIG_NFT_OBJREF=m +CONFIG_NFT_QUEUE=m +CONFIG_NFT_QUOTA=m +CONFIG_NFT_REJECT=m +CONFIG_NFT_REJECT_INET=m +CONFIG_NFT_COMPAT=m +CONFIG_NFT_HASH=m +CONFIG_NFT_FIB=m +CONFIG_NFT_FIB_INET=m +CONFIG_NFT_XFRM=m +CONFIG_NFT_SOCKET=m +CONFIG_NFT_OSF=m +CONFIG_NFT_TPROXY=m +CONFIG_NFT_SYNPROXY=m +CONFIG_NF_DUP_NETDEV=m +CONFIG_NFT_DUP_NETDEV=m +CONFIG_NFT_FWD_NETDEV=m +CONFIG_NFT_FIB_NETDEV=m +# CONFIG_NFT_REJECT_NETDEV is not set +CONFIG_NF_FLOW_TABLE_INET=m +CONFIG_NF_FLOW_TABLE=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XTABLES_COMPAT=y + +# +# Xtables combined modules +# +CONFIG_NETFILTER_XT_MARK=m +CONFIG_NETFILTER_XT_CONNMARK=m +CONFIG_NETFILTER_XT_SET=m + +# +# Xtables targets +# +CONFIG_NETFILTER_XT_TARGET_AUDIT=m +CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m +CONFIG_NETFILTER_XT_TARGET_CT=m +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_HL=m +CONFIG_NETFILTER_XT_TARGET_HMARK=m +CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m +CONFIG_NETFILTER_XT_TARGET_LED=m +CONFIG_NETFILTER_XT_TARGET_LOG=m +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_NAT=m +CONFIG_NETFILTER_XT_TARGET_NETMAP=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set +CONFIG_NETFILTER_XT_TARGET_RATEEST=m +CONFIG_NETFILTER_XT_TARGET_REDIRECT=m +CONFIG_NETFILTER_XT_TARGET_MASQUERADE=m +CONFIG_NETFILTER_XT_TARGET_TEE=m +CONFIG_NETFILTER_XT_TARGET_TPROXY=m +CONFIG_NETFILTER_XT_TARGET_TRACE=m +CONFIG_NETFILTER_XT_TARGET_SECMARK=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m + +# +# Xtables matches +# +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m +CONFIG_NETFILTER_XT_MATCH_BPF=m +CONFIG_NETFILTER_XT_MATCH_CGROUP=m +CONFIG_NETFILTER_XT_MATCH_CLUSTER=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_CPU=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ECN=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_HL=m +CONFIG_NETFILTER_XT_MATCH_IPCOMP=m +CONFIG_NETFILTER_XT_MATCH_IPRANGE=m +CONFIG_NETFILTER_XT_MATCH_IPVS=m +CONFIG_NETFILTER_XT_MATCH_L2TP=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_NFACCT=m +CONFIG_NETFILTER_XT_MATCH_OSF=m +CONFIG_NETFILTER_XT_MATCH_OWNER=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_RATEEST=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_RECENT=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_SOCKET=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_TIME=m +CONFIG_NETFILTER_XT_MATCH_U32=m +# end of Core Netfilter Configuration + +CONFIG_IP_SET=m +CONFIG_IP_SET_MAX=256 +CONFIG_IP_SET_BITMAP_IP=m +CONFIG_IP_SET_BITMAP_IPMAC=m +CONFIG_IP_SET_BITMAP_PORT=m +CONFIG_IP_SET_HASH_IP=m +CONFIG_IP_SET_HASH_IPMARK=m +CONFIG_IP_SET_HASH_IPPORT=m +CONFIG_IP_SET_HASH_IPPORTIP=m +CONFIG_IP_SET_HASH_IPPORTNET=m +CONFIG_IP_SET_HASH_IPMAC=m +CONFIG_IP_SET_HASH_MAC=m +CONFIG_IP_SET_HASH_NETPORTNET=m +CONFIG_IP_SET_HASH_NET=m +CONFIG_IP_SET_HASH_NETNET=m +CONFIG_IP_SET_HASH_NETPORT=m +CONFIG_IP_SET_HASH_NETIFACE=m +CONFIG_IP_SET_LIST_SET=m +CONFIG_IP_VS=m +CONFIG_IP_VS_IPV6=y +# CONFIG_IP_VS_DEBUG is not set +CONFIG_IP_VS_TAB_BITS=12 + +# +# IPVS transport protocol load balancing support +# +CONFIG_IP_VS_PROTO_TCP=y +CONFIG_IP_VS_PROTO_UDP=y +CONFIG_IP_VS_PROTO_AH_ESP=y +CONFIG_IP_VS_PROTO_ESP=y +CONFIG_IP_VS_PROTO_AH=y +CONFIG_IP_VS_PROTO_SCTP=y + +# +# IPVS scheduler +# +CONFIG_IP_VS_RR=m +CONFIG_IP_VS_WRR=m +CONFIG_IP_VS_LC=m +CONFIG_IP_VS_WLC=m +CONFIG_IP_VS_FO=m +CONFIG_IP_VS_OVF=m +CONFIG_IP_VS_LBLC=m +CONFIG_IP_VS_LBLCR=m +CONFIG_IP_VS_DH=m +CONFIG_IP_VS_SH=m +CONFIG_IP_VS_MH=m +CONFIG_IP_VS_SED=m +CONFIG_IP_VS_NQ=m +# CONFIG_IP_VS_TWOS is not set + +# +# IPVS SH scheduler +# +CONFIG_IP_VS_SH_TAB_BITS=8 + +# +# IPVS MH scheduler +# +CONFIG_IP_VS_MH_TAB_INDEX=12 + +# +# IPVS application helper +# +CONFIG_IP_VS_FTP=m +CONFIG_IP_VS_NFCT=y +CONFIG_IP_VS_PE_SIP=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV4=m +CONFIG_NF_SOCKET_IPV4=m +CONFIG_NF_TPROXY_IPV4=m +CONFIG_NF_TABLES_IPV4=y +CONFIG_NFT_REJECT_IPV4=m +CONFIG_NFT_DUP_IPV4=m +CONFIG_NFT_FIB_IPV4=m +CONFIG_NF_TABLES_ARP=y +CONFIG_NF_FLOW_TABLE_IPV4=m +CONFIG_NF_DUP_IPV4=m +CONFIG_NF_LOG_ARP=m +CONFIG_NF_LOG_IPV4=m +CONFIG_NF_REJECT_IPV4=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_RPFILTER=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_SYNPROXY=m +CONFIG_IP_NF_NAT=m +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_SECURITY=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m +# end of IP: Netfilter Configuration + +# +# IPv6: Netfilter Configuration +# +CONFIG_NF_SOCKET_IPV6=m +CONFIG_NF_TPROXY_IPV6=m +CONFIG_NF_TABLES_IPV6=y +CONFIG_NFT_REJECT_IPV6=m +CONFIG_NFT_DUP_IPV6=m +CONFIG_NFT_FIB_IPV6=m +CONFIG_NF_FLOW_TABLE_IPV6=m +CONFIG_NF_DUP_IPV6=m +CONFIG_NF_REJECT_IPV6=m +CONFIG_NF_LOG_IPV6=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_RPFILTER=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_SRH=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_TARGET_SYNPROXY=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_RAW=m +CONFIG_IP6_NF_SECURITY=m +CONFIG_IP6_NF_NAT=m +CONFIG_IP6_NF_TARGET_MASQUERADE=m +CONFIG_IP6_NF_TARGET_NPT=m +# end of IPv6: Netfilter Configuration + +CONFIG_NF_DEFRAG_IPV6=m + +# +# DECnet: Netfilter Configuration +# +CONFIG_DECNET_NF_GRABULATOR=m +# end of DECnet: Netfilter Configuration + +CONFIG_NF_TABLES_BRIDGE=m +CONFIG_NFT_BRIDGE_META=m +CONFIG_NFT_BRIDGE_REJECT=m +CONFIG_NF_CONNTRACK_BRIDGE=m +CONFIG_BRIDGE_NF_EBTABLES=m +CONFIG_BRIDGE_EBT_BROUTE=m +CONFIG_BRIDGE_EBT_T_FILTER=m +CONFIG_BRIDGE_EBT_T_NAT=m +CONFIG_BRIDGE_EBT_802_3=m +CONFIG_BRIDGE_EBT_AMONG=m +CONFIG_BRIDGE_EBT_ARP=m +CONFIG_BRIDGE_EBT_IP=m +CONFIG_BRIDGE_EBT_IP6=m +CONFIG_BRIDGE_EBT_LIMIT=m +CONFIG_BRIDGE_EBT_MARK=m +CONFIG_BRIDGE_EBT_PKTTYPE=m +CONFIG_BRIDGE_EBT_STP=m +CONFIG_BRIDGE_EBT_VLAN=m +CONFIG_BRIDGE_EBT_ARPREPLY=m +CONFIG_BRIDGE_EBT_DNAT=m +CONFIG_BRIDGE_EBT_MARK_T=m +CONFIG_BRIDGE_EBT_REDIRECT=m +CONFIG_BRIDGE_EBT_SNAT=m +CONFIG_BRIDGE_EBT_LOG=m +CONFIG_BRIDGE_EBT_NFLOG=m +CONFIG_BPFILTER=y +CONFIG_BPFILTER_UMH=m +CONFIG_IP_DCCP=m +CONFIG_INET_DCCP_DIAG=m + +# +# DCCP CCIDs Configuration +# +# CONFIG_IP_DCCP_CCID2_DEBUG is not set +# CONFIG_IP_DCCP_CCID3 is not set +# end of DCCP CCIDs Configuration + +# +# DCCP Kernel Hacking +# +# CONFIG_IP_DCCP_DEBUG is not set +# end of DCCP Kernel Hacking + +CONFIG_IP_SCTP=y +# CONFIG_SCTP_DBG_OBJCNT is not set +# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set +CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y +# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set +CONFIG_SCTP_COOKIE_HMAC_MD5=y +CONFIG_SCTP_COOKIE_HMAC_SHA1=y +CONFIG_INET_SCTP_DIAG=m +CONFIG_RDS=m +CONFIG_RDS_RDMA=m +CONFIG_RDS_TCP=m +# CONFIG_RDS_DEBUG is not set +CONFIG_TIPC=m +CONFIG_TIPC_MEDIA_IB=y +CONFIG_TIPC_MEDIA_UDP=y +CONFIG_TIPC_CRYPTO=y +CONFIG_TIPC_DIAG=m +CONFIG_ATM=m +CONFIG_ATM_CLIP=m +# CONFIG_ATM_CLIP_NO_ICMP is not set +CONFIG_ATM_LANE=m +CONFIG_ATM_MPOA=m +CONFIG_ATM_BR2684=m +# CONFIG_ATM_BR2684_IPFILTER is not set +CONFIG_L2TP=m +CONFIG_L2TP_DEBUGFS=m +CONFIG_L2TP_V3=y +CONFIG_L2TP_IP=m +CONFIG_L2TP_ETH=m +CONFIG_STP=m +CONFIG_GARP=m +CONFIG_MRP=m +CONFIG_BRIDGE=m +CONFIG_BRIDGE_IGMP_SNOOPING=y +CONFIG_BRIDGE_VLAN_FILTERING=y +# CONFIG_BRIDGE_MRP is not set +# CONFIG_BRIDGE_CFM is not set +CONFIG_NET_DSA=m +# CONFIG_NET_DSA_TAG_AR9331 is not set +CONFIG_NET_DSA_TAG_BRCM_COMMON=m +CONFIG_NET_DSA_TAG_BRCM=m +CONFIG_NET_DSA_TAG_BRCM_LEGACY=m +CONFIG_NET_DSA_TAG_BRCM_PREPEND=m +# CONFIG_NET_DSA_TAG_HELLCREEK is not set +CONFIG_NET_DSA_TAG_GSWIP=m +CONFIG_NET_DSA_TAG_DSA_COMMON=m +CONFIG_NET_DSA_TAG_DSA=m +CONFIG_NET_DSA_TAG_EDSA=m +CONFIG_NET_DSA_TAG_MTK=m +CONFIG_NET_DSA_TAG_KSZ=m +CONFIG_NET_DSA_TAG_RTL4_A=m +# CONFIG_NET_DSA_TAG_OCELOT is not set +# CONFIG_NET_DSA_TAG_OCELOT_8021Q is not set +CONFIG_NET_DSA_TAG_QCA=m +CONFIG_NET_DSA_TAG_LAN9303=m +CONFIG_NET_DSA_TAG_SJA1105=m +CONFIG_NET_DSA_TAG_TRAILER=m +# CONFIG_NET_DSA_TAG_XRS700X is not set +CONFIG_VLAN_8021Q=m +CONFIG_VLAN_8021Q_GVRP=y +CONFIG_VLAN_8021Q_MVRP=y +CONFIG_DECNET=m +# CONFIG_DECNET_ROUTER is not set +CONFIG_LLC=m +CONFIG_LLC2=m +CONFIG_ATALK=m +CONFIG_DEV_APPLETALK=m +CONFIG_LTPC=m +# CONFIG_IPDDP is not set +CONFIG_X25=m +CONFIG_LAPB=m +CONFIG_PHONET=m +CONFIG_6LOWPAN=m +# CONFIG_6LOWPAN_DEBUGFS is not set +CONFIG_6LOWPAN_NHC=m +CONFIG_6LOWPAN_NHC_DEST=m +CONFIG_6LOWPAN_NHC_FRAGMENT=m +CONFIG_6LOWPAN_NHC_HOP=m +CONFIG_6LOWPAN_NHC_IPV6=m +CONFIG_6LOWPAN_NHC_MOBILITY=m +CONFIG_6LOWPAN_NHC_ROUTING=m +CONFIG_6LOWPAN_NHC_UDP=m +# CONFIG_6LOWPAN_GHC_EXT_HDR_HOP is not set +# CONFIG_6LOWPAN_GHC_UDP is not set +# CONFIG_6LOWPAN_GHC_ICMPV6 is not set +# CONFIG_6LOWPAN_GHC_EXT_HDR_DEST is not set +# CONFIG_6LOWPAN_GHC_EXT_HDR_FRAG is not set +# CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE is not set +CONFIG_IEEE802154=m +# CONFIG_IEEE802154_NL802154_EXPERIMENTAL is not set +CONFIG_IEEE802154_SOCKET=m +CONFIG_IEEE802154_6LOWPAN=m +CONFIG_MAC802154=m +CONFIG_NET_SCHED=y + +# +# Queueing/Scheduling +# +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_HFSC=m +CONFIG_NET_SCH_ATM=m +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_MULTIQ=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFB=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_CBS=m +CONFIG_NET_SCH_ETF=m +CONFIG_NET_SCH_TAPRIO=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_DSMARK=m +CONFIG_NET_SCH_NETEM=m +CONFIG_NET_SCH_DRR=m +CONFIG_NET_SCH_MQPRIO=m +CONFIG_NET_SCH_SKBPRIO=m +CONFIG_NET_SCH_CHOKE=m +CONFIG_NET_SCH_QFQ=m +CONFIG_NET_SCH_CODEL=m +CONFIG_NET_SCH_FQ_CODEL=m +CONFIG_NET_SCH_CAKE=m +CONFIG_NET_SCH_FQ=m +CONFIG_NET_SCH_HHF=m +CONFIG_NET_SCH_PIE=m +# CONFIG_NET_SCH_FQ_PIE is not set +CONFIG_NET_SCH_INGRESS=m +CONFIG_NET_SCH_PLUG=m +# CONFIG_NET_SCH_ETS is not set +# CONFIG_NET_SCH_DEFAULT is not set + +# +# Classification +# +CONFIG_NET_CLS=y +CONFIG_NET_CLS_BASIC=m +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_FW=m +CONFIG_NET_CLS_U32=m +# CONFIG_CLS_U32_PERF is not set +CONFIG_CLS_U32_MARK=y +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +CONFIG_NET_CLS_FLOW=m +CONFIG_NET_CLS_CGROUP=m +CONFIG_NET_CLS_BPF=m +CONFIG_NET_CLS_FLOWER=m +CONFIG_NET_CLS_MATCHALL=m +CONFIG_NET_EMATCH=y +CONFIG_NET_EMATCH_STACK=32 +CONFIG_NET_EMATCH_CMP=m +CONFIG_NET_EMATCH_NBYTE=m +CONFIG_NET_EMATCH_U32=m +CONFIG_NET_EMATCH_META=m +CONFIG_NET_EMATCH_TEXT=m +CONFIG_NET_EMATCH_CANID=m +CONFIG_NET_EMATCH_IPSET=m +CONFIG_NET_EMATCH_IPT=m +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_POLICE=m +CONFIG_NET_ACT_GACT=m +CONFIG_GACT_PROB=y +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_SAMPLE=m +CONFIG_NET_ACT_IPT=m +CONFIG_NET_ACT_NAT=m +CONFIG_NET_ACT_PEDIT=m +CONFIG_NET_ACT_SIMP=m +CONFIG_NET_ACT_SKBEDIT=m +CONFIG_NET_ACT_CSUM=m +CONFIG_NET_ACT_MPLS=m +CONFIG_NET_ACT_VLAN=m +CONFIG_NET_ACT_BPF=m +CONFIG_NET_ACT_CONNMARK=m +CONFIG_NET_ACT_CTINFO=m +CONFIG_NET_ACT_SKBMOD=m +# CONFIG_NET_ACT_IFE is not set +CONFIG_NET_ACT_TUNNEL_KEY=m +CONFIG_NET_ACT_CT=m +# CONFIG_NET_ACT_GATE is not set +CONFIG_NET_TC_SKB_EXT=y +CONFIG_NET_SCH_FIFO=y +CONFIG_DCB=y +CONFIG_DNS_RESOLVER=y +CONFIG_BATMAN_ADV=m +# CONFIG_BATMAN_ADV_BATMAN_V is not set +CONFIG_BATMAN_ADV_BLA=y +CONFIG_BATMAN_ADV_DAT=y +CONFIG_BATMAN_ADV_NC=y +CONFIG_BATMAN_ADV_MCAST=y +# CONFIG_BATMAN_ADV_DEBUG is not set +# CONFIG_BATMAN_ADV_TRACING is not set +CONFIG_OPENVSWITCH=m +CONFIG_OPENVSWITCH_GRE=m +CONFIG_OPENVSWITCH_VXLAN=m +CONFIG_OPENVSWITCH_GENEVE=m +CONFIG_VSOCKETS=m +CONFIG_VSOCKETS_DIAG=m +CONFIG_VSOCKETS_LOOPBACK=m +CONFIG_VMWARE_VMCI_VSOCKETS=m +CONFIG_VIRTIO_VSOCKETS=m +CONFIG_VIRTIO_VSOCKETS_COMMON=m +CONFIG_HYPERV_VSOCKETS=m +CONFIG_NETLINK_DIAG=m +CONFIG_MPLS=y +CONFIG_NET_MPLS_GSO=m +CONFIG_MPLS_ROUTING=m +CONFIG_MPLS_IPTUNNEL=m +CONFIG_NET_NSH=m +CONFIG_HSR=m +CONFIG_NET_SWITCHDEV=y +CONFIG_NET_L3_MASTER_DEV=y +# CONFIG_QRTR is not set +CONFIG_NET_NCSI=y +CONFIG_NCSI_OEM_CMD_GET_MAC=y +# CONFIG_NCSI_OEM_CMD_KEEP_PHY is not set +CONFIG_PCPU_DEV_REFCNT=y +CONFIG_RPS=y +CONFIG_RFS_ACCEL=y +CONFIG_SOCK_RX_QUEUE_MAPPING=y +CONFIG_XPS=y +CONFIG_CGROUP_NET_PRIO=y +CONFIG_CGROUP_NET_CLASSID=y +CONFIG_NET_RX_BUSY_POLL=y +CONFIG_BQL=y +CONFIG_BPF_STREAM_PARSER=y +CONFIG_NET_FLOW_LIMIT=y + +# +# Network testing +# +CONFIG_NET_PKTGEN=m +CONFIG_NET_DROP_MONITOR=y +# end of Network testing +# end of Networking options + +CONFIG_HAMRADIO=y + +# +# Packet Radio protocols +# +CONFIG_AX25=m +CONFIG_AX25_DAMA_SLAVE=y +CONFIG_NETROM=m +CONFIG_ROSE=m + +# +# AX.25 network device drivers +# +CONFIG_MKISS=m +CONFIG_6PACK=m +CONFIG_BPQETHER=m +CONFIG_BAYCOM_SER_FDX=m +CONFIG_BAYCOM_SER_HDX=m +CONFIG_BAYCOM_PAR=m +CONFIG_YAM=m +# end of AX.25 network device drivers + +CONFIG_CAN=m +CONFIG_CAN_RAW=m +CONFIG_CAN_BCM=m +CONFIG_CAN_GW=m +CONFIG_CAN_J1939=m +# CONFIG_CAN_ISOTP is not set + +# +# CAN Device Drivers +# +CONFIG_CAN_VCAN=m +CONFIG_CAN_VXCAN=m +CONFIG_CAN_SLCAN=m +CONFIG_CAN_DEV=m +CONFIG_CAN_CALC_BITTIMING=y +CONFIG_CAN_JANZ_ICAN3=m +CONFIG_CAN_KVASER_PCIEFD=m +CONFIG_CAN_C_CAN=m +CONFIG_CAN_C_CAN_PLATFORM=m +CONFIG_CAN_C_CAN_PCI=m +CONFIG_CAN_CC770=m +CONFIG_CAN_CC770_ISA=m +CONFIG_CAN_CC770_PLATFORM=m +CONFIG_CAN_IFI_CANFD=m +CONFIG_CAN_M_CAN=m +# CONFIG_CAN_M_CAN_PCI is not set +CONFIG_CAN_M_CAN_PLATFORM=m +CONFIG_CAN_M_CAN_TCAN4X5X=m +CONFIG_CAN_PEAK_PCIEFD=m +CONFIG_CAN_SJA1000=m +CONFIG_CAN_EMS_PCI=m +CONFIG_CAN_EMS_PCMCIA=m +CONFIG_CAN_F81601=m +CONFIG_CAN_KVASER_PCI=m +CONFIG_CAN_PEAK_PCI=m +CONFIG_CAN_PEAK_PCIEC=y +CONFIG_CAN_PEAK_PCMCIA=m +CONFIG_CAN_PLX_PCI=m +CONFIG_CAN_SJA1000_ISA=m +CONFIG_CAN_SJA1000_PLATFORM=m +CONFIG_CAN_SOFTING=m +CONFIG_CAN_SOFTING_CS=m + +# +# CAN SPI interfaces +# +CONFIG_CAN_HI311X=m +CONFIG_CAN_MCP251X=m +# CONFIG_CAN_MCP251XFD is not set +# end of CAN SPI interfaces + +# +# CAN USB interfaces +# +CONFIG_CAN_8DEV_USB=m +CONFIG_CAN_EMS_USB=m +CONFIG_CAN_ESD_USB2=m +# CONFIG_CAN_ETAS_ES58X is not set +CONFIG_CAN_GS_USB=m +CONFIG_CAN_KVASER_USB=m +CONFIG_CAN_MCBA_USB=m +CONFIG_CAN_PEAK_USB=m +CONFIG_CAN_UCAN=m +# end of CAN USB interfaces + +# CONFIG_CAN_DEBUG_DEVICES is not set +# end of CAN Device Drivers + +CONFIG_BT=m +CONFIG_BT_BREDR=y +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_CMTP=m +CONFIG_BT_HIDP=m +# CONFIG_BT_HS is not set +CONFIG_BT_LE=y +CONFIG_BT_6LOWPAN=m +CONFIG_BT_LEDS=y +# CONFIG_BT_MSFTEXT is not set +# CONFIG_BT_AOSPEXT is not set +CONFIG_BT_DEBUGFS=y +# CONFIG_BT_SELFTEST is not set + +# +# Bluetooth device drivers +# +CONFIG_BT_INTEL=m +CONFIG_BT_BCM=m +CONFIG_BT_RTL=m +CONFIG_BT_QCA=m +CONFIG_BT_HCIBTUSB=m +CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y +CONFIG_BT_HCIBTUSB_BCM=y +CONFIG_BT_HCIBTUSB_MTK=y +CONFIG_BT_HCIBTUSB_RTL=y +CONFIG_BT_HCIBTSDIO=m +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_SERDEV=y +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_NOKIA=m +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIUART_ATH3K=y +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_HCIUART_3WIRE=y +CONFIG_BT_HCIUART_INTEL=y +CONFIG_BT_HCIUART_BCM=y +CONFIG_BT_HCIUART_RTL=y +CONFIG_BT_HCIUART_QCA=y +CONFIG_BT_HCIUART_AG6XX=y +CONFIG_BT_HCIUART_MRVL=y +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIVHCI=m +CONFIG_BT_MRVL=m +CONFIG_BT_MRVL_SDIO=m +CONFIG_BT_ATH3K=m +CONFIG_BT_MTKSDIO=m +CONFIG_BT_MTKUART=m +CONFIG_BT_HCIRSI=m +# CONFIG_BT_VIRTIO is not set +# end of Bluetooth device drivers + +CONFIG_AF_RXRPC=m +CONFIG_AF_RXRPC_IPV6=y +# CONFIG_AF_RXRPC_INJECT_LOSS is not set +# CONFIG_AF_RXRPC_DEBUG is not set +CONFIG_RXKAD=y +CONFIG_AF_KCM=m +CONFIG_STREAM_PARSER=y +# CONFIG_MCTP is not set +CONFIG_FIB_RULES=y +CONFIG_WIRELESS=y +CONFIG_WIRELESS_EXT=y +CONFIG_WEXT_CORE=y +CONFIG_WEXT_PROC=y +CONFIG_WEXT_SPY=y +CONFIG_WEXT_PRIV=y +CONFIG_CFG80211=y +# CONFIG_NL80211_TESTMODE is not set +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +# CONFIG_CFG80211_CERTIFICATION_ONUS is not set +CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y +CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y +CONFIG_CFG80211_DEFAULT_PS=y +CONFIG_CFG80211_DEBUGFS=y +CONFIG_CFG80211_CRDA_SUPPORT=y +CONFIG_CFG80211_WEXT=y +CONFIG_CFG80211_WEXT_EXPORT=y +CONFIG_LIB80211=m +CONFIG_LIB80211_CRYPT_WEP=m +CONFIG_LIB80211_CRYPT_CCMP=m +CONFIG_LIB80211_CRYPT_TKIP=m +# CONFIG_LIB80211_DEBUG is not set +CONFIG_MAC80211=y +CONFIG_MAC80211_HAS_RC=y +CONFIG_MAC80211_RC_MINSTREL=y +CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y +CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" +CONFIG_MAC80211_MESH=y +CONFIG_MAC80211_LEDS=y +CONFIG_MAC80211_DEBUGFS=y +CONFIG_MAC80211_MESSAGE_TRACING=y +# CONFIG_MAC80211_DEBUG_MENU is not set +CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 +CONFIG_RFKILL=y +CONFIG_RFKILL_LEDS=y +CONFIG_RFKILL_INPUT=y +CONFIG_RFKILL_GPIO=m +CONFIG_NET_9P=m +CONFIG_NET_9P_VIRTIO=m +CONFIG_NET_9P_XEN=m +CONFIG_NET_9P_RDMA=m +# CONFIG_NET_9P_DEBUG is not set +CONFIG_CAIF=m +# CONFIG_CAIF_DEBUG is not set +CONFIG_CAIF_NETDEV=m +CONFIG_CAIF_USB=m +CONFIG_CEPH_LIB=m +# CONFIG_CEPH_LIB_PRETTYDEBUG is not set +CONFIG_CEPH_LIB_USE_DNS_RESOLVER=y +CONFIG_NFC=m +CONFIG_NFC_DIGITAL=m +CONFIG_NFC_NCI=m +CONFIG_NFC_NCI_SPI=m +CONFIG_NFC_NCI_UART=m +CONFIG_NFC_HCI=m +CONFIG_NFC_SHDLC=y + +# +# Near Field Communication (NFC) devices +# +CONFIG_NFC_TRF7970A=m +CONFIG_NFC_MEI_PHY=m +CONFIG_NFC_SIM=m +CONFIG_NFC_PORT100=m +# CONFIG_NFC_VIRTUAL_NCI is not set +CONFIG_NFC_FDP=m +CONFIG_NFC_FDP_I2C=m +CONFIG_NFC_PN544=m +CONFIG_NFC_PN544_I2C=m +CONFIG_NFC_PN544_MEI=m +CONFIG_NFC_PN533=m +CONFIG_NFC_PN533_USB=m +CONFIG_NFC_PN533_I2C=m +# CONFIG_NFC_PN532_UART is not set +CONFIG_NFC_MICROREAD=m +CONFIG_NFC_MICROREAD_I2C=m +CONFIG_NFC_MICROREAD_MEI=m +CONFIG_NFC_MRVL=m +CONFIG_NFC_MRVL_USB=m +CONFIG_NFC_MRVL_UART=m +CONFIG_NFC_MRVL_I2C=m +CONFIG_NFC_MRVL_SPI=m +CONFIG_NFC_ST21NFCA=m +CONFIG_NFC_ST21NFCA_I2C=m +CONFIG_NFC_ST_NCI=m +CONFIG_NFC_ST_NCI_I2C=m +CONFIG_NFC_ST_NCI_SPI=m +CONFIG_NFC_NXP_NCI=m +CONFIG_NFC_NXP_NCI_I2C=m +CONFIG_NFC_S3FWRN5=m +CONFIG_NFC_S3FWRN5_I2C=m +# CONFIG_NFC_S3FWRN82_UART is not set +CONFIG_NFC_ST95HF=m +# end of Near Field Communication (NFC) devices + +CONFIG_PSAMPLE=m +CONFIG_NET_IFE=m +CONFIG_LWTUNNEL=y +CONFIG_LWTUNNEL_BPF=y +CONFIG_DST_CACHE=y +CONFIG_GRO_CELLS=y +CONFIG_SOCK_VALIDATE_XMIT=y +CONFIG_NET_SELFTESTS=y +CONFIG_NET_SOCK_MSG=y +CONFIG_NET_DEVLINK=y +CONFIG_PAGE_POOL=y +CONFIG_FAILOVER=m +CONFIG_ETHTOOL_NETLINK=y + +# +# Device Drivers +# +CONFIG_HAVE_EISA=y +CONFIG_EISA=y +CONFIG_EISA_VLB_PRIMING=y +CONFIG_EISA_PCI_EISA=y +CONFIG_EISA_VIRTUAL_ROOT=y +CONFIG_EISA_NAMES=y +CONFIG_HAVE_PCI=y +CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y +CONFIG_PCIEPORTBUS=y +CONFIG_HOTPLUG_PCI_PCIE=y +CONFIG_PCIEAER=y +# CONFIG_PCIEAER_INJECT is not set +# CONFIG_PCIE_ECRC is not set +CONFIG_PCIEASPM=y +CONFIG_PCIEASPM_DEFAULT=y +# CONFIG_PCIEASPM_POWERSAVE is not set +# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set +# CONFIG_PCIEASPM_PERFORMANCE is not set +CONFIG_PCIE_PME=y +CONFIG_PCIE_DPC=y +CONFIG_PCIE_PTM=y +# CONFIG_PCIE_EDR is not set +CONFIG_PCI_MSI=y +CONFIG_PCI_MSI_IRQ_DOMAIN=y +CONFIG_PCI_QUIRKS=y +# CONFIG_PCI_DEBUG is not set +CONFIG_PCI_REALLOC_ENABLE_AUTO=y +CONFIG_PCI_STUB=m +CONFIG_PCI_PF_STUB=m +CONFIG_XEN_PCIDEV_FRONTEND=m +CONFIG_PCI_ATS=y +CONFIG_PCI_LOCKLESS_CONFIG=y +CONFIG_PCI_IOV=y +CONFIG_PCI_PRI=y +CONFIG_PCI_PASID=y +# CONFIG_PCI_P2PDMA is not set +CONFIG_PCI_LABEL=y +CONFIG_PCI_HYPERV=m +# CONFIG_PCIE_BUS_TUNE_OFF is not set +CONFIG_PCIE_BUS_DEFAULT=y +# CONFIG_PCIE_BUS_SAFE is not set +# CONFIG_PCIE_BUS_PERFORMANCE is not set +# CONFIG_PCIE_BUS_PEER2PEER is not set +CONFIG_HOTPLUG_PCI=y +CONFIG_HOTPLUG_PCI_ACPI=y +CONFIG_HOTPLUG_PCI_ACPI_IBM=m +CONFIG_HOTPLUG_PCI_CPCI=y +CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m +CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m +CONFIG_HOTPLUG_PCI_SHPC=y + +# +# PCI controller drivers +# +CONFIG_VMD=m +CONFIG_PCI_HYPERV_INTERFACE=m + +# +# DesignWare PCI Core Support +# +CONFIG_PCIE_DW=y +CONFIG_PCIE_DW_HOST=y +CONFIG_PCIE_DW_EP=y +CONFIG_PCIE_DW_PLAT=y +CONFIG_PCIE_DW_PLAT_HOST=y +CONFIG_PCIE_DW_PLAT_EP=y +# CONFIG_PCI_MESON is not set +# end of DesignWare PCI Core Support + +# +# Mobiveil PCIe Core Support +# +# end of Mobiveil PCIe Core Support + +# +# Cadence PCIe controllers support +# +# end of Cadence PCIe controllers support +# end of PCI controller drivers + +# +# PCI Endpoint +# +CONFIG_PCI_ENDPOINT=y +CONFIG_PCI_ENDPOINT_CONFIGFS=y +# CONFIG_PCI_EPF_TEST is not set +# CONFIG_PCI_EPF_NTB is not set +# end of PCI Endpoint + +# +# PCI switch controller drivers +# +CONFIG_PCI_SW_SWITCHTEC=m +# end of PCI switch controller drivers + +# CONFIG_CXL_BUS is not set +CONFIG_PCCARD=m +CONFIG_PCMCIA=m +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_CARDBUS=y + +# +# PC-card bridges +# +CONFIG_YENTA=m +CONFIG_YENTA_O2=y +CONFIG_YENTA_RICOH=y +CONFIG_YENTA_TI=y +CONFIG_YENTA_ENE_TUNE=y +CONFIG_YENTA_TOSHIBA=y +CONFIG_PD6729=m +CONFIG_I82092=m +CONFIG_PCCARD_NONSTATIC=y +CONFIG_RAPIDIO=y +CONFIG_RAPIDIO_TSI721=m +CONFIG_RAPIDIO_DISC_TIMEOUT=30 +# CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS is not set +CONFIG_RAPIDIO_DMA_ENGINE=y +# CONFIG_RAPIDIO_DEBUG is not set +CONFIG_RAPIDIO_ENUM_BASIC=m +CONFIG_RAPIDIO_CHMAN=m +CONFIG_RAPIDIO_MPORT_CDEV=m + +# +# RapidIO Switch drivers +# +CONFIG_RAPIDIO_TSI57X=m +CONFIG_RAPIDIO_CPS_XX=m +CONFIG_RAPIDIO_TSI568=m +CONFIG_RAPIDIO_CPS_GEN2=m +CONFIG_RAPIDIO_RXS_GEN3=m +# end of RapidIO Switch drivers + +# +# Generic Driver Options +# +CONFIG_AUXILIARY_BUS=y +CONFIG_UEVENT_HELPER=y +CONFIG_UEVENT_HELPER_PATH="" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +# CONFIG_STANDALONE is not set +CONFIG_PREVENT_FIRMWARE_BUILD=y + +# +# Firmware loader +# +CONFIG_FW_LOADER=y +CONFIG_FW_LOADER_PAGED_BUF=y +CONFIG_EXTRA_FIRMWARE="" +CONFIG_FW_LOADER_USER_HELPER=y +# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set +CONFIG_FW_LOADER_COMPRESS=y +CONFIG_FW_CACHE=y +# end of Firmware loader + +CONFIG_WANT_DEV_COREDUMP=y +CONFIG_ALLOW_DEV_COREDUMP=y +CONFIG_DEV_COREDUMP=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set +CONFIG_HMEM_REPORTING=y +# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set +CONFIG_SYS_HYPERVISOR=y +CONFIG_GENERIC_CPU_AUTOPROBE=y +CONFIG_GENERIC_CPU_VULNERABILITIES=y +CONFIG_REGMAP=y +CONFIG_REGMAP_I2C=y +CONFIG_REGMAP_SLIMBUS=m +CONFIG_REGMAP_SPI=y +CONFIG_REGMAP_SPMI=m +CONFIG_REGMAP_W1=m +CONFIG_REGMAP_MMIO=y +CONFIG_REGMAP_IRQ=y +CONFIG_REGMAP_SCCB=m +CONFIG_REGMAP_I3C=m +CONFIG_DMA_SHARED_BUFFER=y +# CONFIG_DMA_FENCE_TRACE is not set +# end of Generic Driver Options + +# +# Bus devices +# +# CONFIG_MHI_BUS is not set +# end of Bus devices + +CONFIG_CONNECTOR=y +CONFIG_PROC_EVENTS=y + +# +# Firmware Drivers +# + +# +# ARM System Control and Management Interface Protocol +# +# end of ARM System Control and Management Interface Protocol + +CONFIG_EDD=y +CONFIG_EDD_OFF=y +CONFIG_FIRMWARE_MEMMAP=y +CONFIG_DMIID=y +CONFIG_DMI_SYSFS=y +CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y +CONFIG_ISCSI_IBFT_FIND=y +CONFIG_ISCSI_IBFT=y +CONFIG_FW_CFG_SYSFS=y +# CONFIG_FW_CFG_SYSFS_CMDLINE is not set +CONFIG_SYSFB=y +# CONFIG_SYSFB_SIMPLEFB is not set +# CONFIG_GOOGLE_FIRMWARE is not set + +# +# EFI (Extensible Firmware Interface) Support +# +CONFIG_EFI_VARS=y +CONFIG_EFI_ESRT=y +CONFIG_EFI_VARS_PSTORE=m +# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set +CONFIG_EFI_RUNTIME_MAP=y +# CONFIG_EFI_FAKE_MEMMAP is not set +CONFIG_EFI_SOFT_RESERVE=y +CONFIG_EFI_RUNTIME_WRAPPERS=y +CONFIG_EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER=y +CONFIG_EFI_BOOTLOADER_CONTROL=m +CONFIG_EFI_CAPSULE_LOADER=m +CONFIG_EFI_TEST=m +CONFIG_APPLE_PROPERTIES=y +CONFIG_RESET_ATTACK_MITIGATION=y +CONFIG_EFI_RCI2_TABLE=y +# CONFIG_EFI_DISABLE_PCI_DMA is not set +# end of EFI (Extensible Firmware Interface) Support + +CONFIG_EFI_EMBEDDED_FIRMWARE=y +CONFIG_UEFI_CPER=y +CONFIG_UEFI_CPER_X86=y +CONFIG_EFI_DEV_PATH_PARSER=y +CONFIG_EFI_EARLYCON=y +CONFIG_EFI_CUSTOM_SSDT_OVERLAYS=y + +# +# Tegra firmware driver +# +# end of Tegra firmware driver +# end of Firmware Drivers + +CONFIG_GNSS=m +CONFIG_GNSS_SERIAL=m +CONFIG_GNSS_MTK_SERIAL=m +CONFIG_GNSS_SIRF_SERIAL=m +CONFIG_GNSS_UBX_SERIAL=m +CONFIG_MTD=m +# CONFIG_MTD_TESTS is not set + +# +# Partition parsers +# +CONFIG_MTD_AR7_PARTS=m +CONFIG_MTD_CMDLINE_PARTS=m +CONFIG_MTD_REDBOOT_PARTS=m +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 +# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set +# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set +# end of Partition parsers + +# +# User Modules And Translation Layers +# +CONFIG_MTD_BLKDEVS=m +CONFIG_MTD_BLOCK=m +CONFIG_MTD_BLOCK_RO=m + +# +# Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK. +# +CONFIG_FTL=m +CONFIG_NFTL=m +CONFIG_NFTL_RW=y +CONFIG_INFTL=m +CONFIG_RFD_FTL=m +CONFIG_SSFDC=m +CONFIG_SM_FTL=m +CONFIG_MTD_OOPS=m +CONFIG_MTD_SWAP=m +# CONFIG_MTD_PARTITIONED_MASTER is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=m +CONFIG_MTD_JEDECPROBE=m +CONFIG_MTD_GEN_PROBE=m +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +CONFIG_MTD_CFI_INTELEXT=m +CONFIG_MTD_CFI_AMDSTD=m +CONFIG_MTD_CFI_STAA=m +CONFIG_MTD_CFI_UTIL=m +CONFIG_MTD_RAM=m +CONFIG_MTD_ROM=m +CONFIG_MTD_ABSENT=m +# end of RAM/ROM/Flash chip drivers + +# +# Mapping drivers for chip access +# +CONFIG_MTD_COMPLEX_MAPPINGS=y +CONFIG_MTD_PHYSMAP=m +# CONFIG_MTD_PHYSMAP_COMPAT is not set +CONFIG_MTD_PHYSMAP_GPIO_ADDR=y +CONFIG_MTD_SBC_GXX=m +CONFIG_MTD_AMD76XROM=m +CONFIG_MTD_ICHXROM=m +CONFIG_MTD_ESB2ROM=m +CONFIG_MTD_CK804XROM=m +CONFIG_MTD_SCB2_FLASH=m +CONFIG_MTD_NETtel=m +CONFIG_MTD_L440GX=m +CONFIG_MTD_PCI=m +CONFIG_MTD_PCMCIA=m +# CONFIG_MTD_PCMCIA_ANONYMOUS is not set +CONFIG_MTD_INTEL_VR_NOR=m +CONFIG_MTD_PLATRAM=m +# end of Mapping drivers for chip access + +# +# Self-contained MTD device drivers +# +CONFIG_MTD_PMC551=m +# CONFIG_MTD_PMC551_BUGFIX is not set +# CONFIG_MTD_PMC551_DEBUG is not set +CONFIG_MTD_DATAFLASH=m +# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set +CONFIG_MTD_DATAFLASH_OTP=y +CONFIG_MTD_MCHP23K256=m +# CONFIG_MTD_MCHP48L640 is not set +CONFIG_MTD_SST25L=m +CONFIG_MTD_SLRAM=m +CONFIG_MTD_PHRAM=m +CONFIG_MTD_MTDRAM=m +CONFIG_MTDRAM_TOTAL_SIZE=4096 +CONFIG_MTDRAM_ERASE_SIZE=128 +CONFIG_MTD_BLOCK2MTD=m + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOCG3 is not set +# end of Self-contained MTD device drivers + +# +# NAND +# +CONFIG_MTD_NAND_CORE=m +CONFIG_MTD_ONENAND=m +CONFIG_MTD_ONENAND_VERIFY_WRITE=y +CONFIG_MTD_ONENAND_GENERIC=m +# CONFIG_MTD_ONENAND_OTP is not set +CONFIG_MTD_ONENAND_2X_PROGRAM=y +CONFIG_MTD_RAW_NAND=m + +# +# Raw/parallel NAND flash controllers +# +CONFIG_MTD_NAND_DENALI=m +CONFIG_MTD_NAND_DENALI_PCI=m +CONFIG_MTD_NAND_CAFE=m +CONFIG_MTD_NAND_MXIC=m +CONFIG_MTD_NAND_GPIO=m +CONFIG_MTD_NAND_PLATFORM=m +# CONFIG_MTD_NAND_ARASAN is not set + +# +# Misc +# +CONFIG_MTD_SM_COMMON=m +CONFIG_MTD_NAND_NANDSIM=m +CONFIG_MTD_NAND_RICOH=m +CONFIG_MTD_NAND_DISKONCHIP=m +# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set +CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0 +# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set +CONFIG_MTD_SPI_NAND=m + +# +# ECC engine support +# +CONFIG_MTD_NAND_ECC=y +CONFIG_MTD_NAND_ECC_SW_HAMMING=y +# CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC is not set +CONFIG_MTD_NAND_ECC_SW_BCH=y +# end of ECC engine support +# end of NAND + +# +# LPDDR & LPDDR2 PCM memory drivers +# +CONFIG_MTD_LPDDR=m +CONFIG_MTD_QINFO_PROBE=m +# end of LPDDR & LPDDR2 PCM memory drivers + +CONFIG_MTD_SPI_NOR=m +CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y +# CONFIG_MTD_SPI_NOR_SWP_DISABLE is not set +CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y +# CONFIG_MTD_SPI_NOR_SWP_KEEP is not set +# CONFIG_SPI_INTEL_SPI_PCI is not set +# CONFIG_SPI_INTEL_SPI_PLATFORM is not set +CONFIG_MTD_UBI=m +CONFIG_MTD_UBI_WL_THRESHOLD=4096 +CONFIG_MTD_UBI_BEB_LIMIT=20 +CONFIG_MTD_UBI_FASTMAP=y +CONFIG_MTD_UBI_GLUEBI=m +CONFIG_MTD_UBI_BLOCK=y +CONFIG_MTD_HYPERBUS=m +# CONFIG_OF is not set +CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y +CONFIG_PARPORT=y +CONFIG_PARPORT_PC=m +CONFIG_PARPORT_SERIAL=m +CONFIG_PARPORT_PC_FIFO=y +# CONFIG_PARPORT_PC_SUPERIO is not set +CONFIG_PARPORT_PC_PCMCIA=m +CONFIG_PARPORT_AX88796=m +CONFIG_PARPORT_1284=y +CONFIG_PARPORT_NOT_PC=y +CONFIG_PNP=y +# CONFIG_PNP_DEBUG_MESSAGES is not set + +# +# Protocols +# +CONFIG_PNPACPI=y +CONFIG_BLK_DEV=y +CONFIG_BLK_DEV_NULL_BLK=y +CONFIG_BLK_DEV_FD=y +CONFIG_CDROM=y +CONFIG_PARIDE=m + +# +# Parallel IDE high-level drivers +# +CONFIG_PARIDE_PD=m +CONFIG_PARIDE_PCD=m +CONFIG_PARIDE_PF=m +CONFIG_PARIDE_PT=m +CONFIG_PARIDE_PG=m + +# +# Parallel IDE protocol modules +# +CONFIG_PARIDE_ATEN=m +CONFIG_PARIDE_BPCK=m +CONFIG_PARIDE_COMM=m +CONFIG_PARIDE_DSTR=m +CONFIG_PARIDE_FIT2=m +CONFIG_PARIDE_FIT3=m +CONFIG_PARIDE_EPAT=m +CONFIG_PARIDE_EPATC8=y +CONFIG_PARIDE_EPIA=m +CONFIG_PARIDE_FRIQ=m +CONFIG_PARIDE_FRPW=m +CONFIG_PARIDE_KBIC=m +CONFIG_PARIDE_KTTI=m +CONFIG_PARIDE_ON20=m +CONFIG_PARIDE_ON26=m +CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m +CONFIG_ZRAM=m +CONFIG_ZRAM_DEF_COMP_LZORLE=y +# CONFIG_ZRAM_DEF_COMP_ZSTD is not set +# CONFIG_ZRAM_DEF_COMP_LZ4 is not set +# CONFIG_ZRAM_DEF_COMP_LZO is not set +# CONFIG_ZRAM_DEF_COMP_LZ4HC is not set +# CONFIG_ZRAM_DEF_COMP_842 is not set +CONFIG_ZRAM_DEF_COMP="lzo-rle" +CONFIG_ZRAM_WRITEBACK=y +CONFIG_ZRAM_MEMORY_TRACKING=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 +CONFIG_BLK_DEV_CRYPTOLOOP=m +CONFIG_BLK_DEV_DRBD=m +# CONFIG_DRBD_FAULT_INJECTION is not set +CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_SX8=m +CONFIG_BLK_DEV_RAM=m +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=65536 +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set +CONFIG_ATA_OVER_ETH=y +CONFIG_XEN_BLKDEV_FRONTEND=y +CONFIG_XEN_BLKDEV_BACKEND=m +CONFIG_VIRTIO_BLK=m +CONFIG_BLK_DEV_RBD=m +CONFIG_BLK_DEV_RSXX=m + +# +# NVME Support +# +CONFIG_NVME_CORE=m +CONFIG_BLK_DEV_NVME=m +CONFIG_NVME_MULTIPATH=y +# CONFIG_NVME_HWMON is not set +CONFIG_NVME_FABRICS=m +CONFIG_NVME_RDMA=m +CONFIG_NVME_FC=m +CONFIG_NVME_TCP=m +CONFIG_NVME_TARGET=m +# CONFIG_NVME_TARGET_PASSTHRU is not set +CONFIG_NVME_TARGET_LOOP=m +CONFIG_NVME_TARGET_RDMA=m +CONFIG_NVME_TARGET_FC=m +# CONFIG_NVME_TARGET_FCLOOP is not set +CONFIG_NVME_TARGET_TCP=m +# end of NVME Support + +# +# Misc devices +# +CONFIG_SENSORS_LIS3LV02D=m +CONFIG_AD525X_DPOT=m +CONFIG_AD525X_DPOT_I2C=m +CONFIG_AD525X_DPOT_SPI=m +CONFIG_DUMMY_IRQ=m +CONFIG_IBM_ASM=m +CONFIG_PHANTOM=m +CONFIG_TIFM_CORE=m +CONFIG_TIFM_7XX1=m +CONFIG_ICS932S401=m +CONFIG_ENCLOSURE_SERVICES=m +CONFIG_SGI_XP=m +CONFIG_HP_ILO=m +CONFIG_SGI_GRU=m +# CONFIG_SGI_GRU_DEBUG is not set +CONFIG_APDS9802ALS=m +CONFIG_ISL29003=m +CONFIG_ISL29020=m +CONFIG_SENSORS_TSL2550=m +CONFIG_SENSORS_BH1770=m +CONFIG_SENSORS_APDS990X=m +CONFIG_HMC6352=m +CONFIG_DS1682=m +CONFIG_VMWARE_BALLOON=m +CONFIG_LATTICE_ECP3_CONFIG=m +CONFIG_SRAM=y +# CONFIG_DW_XDATA_PCIE is not set +# CONFIG_PCI_ENDPOINT_TEST is not set +CONFIG_XILINX_SDFEC=m +CONFIG_MISC_RTSX=m +CONFIG_C2PORT=m +CONFIG_C2PORT_DURAMAR_2150=m + +# +# EEPROM support +# +CONFIG_EEPROM_AT24=m +CONFIG_EEPROM_AT25=m +CONFIG_EEPROM_LEGACY=m +CONFIG_EEPROM_MAX6875=m +CONFIG_EEPROM_93CX6=m +CONFIG_EEPROM_93XX46=m +CONFIG_EEPROM_IDT_89HPESX=m +CONFIG_EEPROM_EE1004=m +# end of EEPROM support + +CONFIG_CB710_CORE=m +# CONFIG_CB710_DEBUG is not set +CONFIG_CB710_DEBUG_ASSUMPTIONS=y + +# +# Texas Instruments shared transport line discipline +# +CONFIG_TI_ST=m +# end of Texas Instruments shared transport line discipline + +CONFIG_SENSORS_LIS3_I2C=m +CONFIG_ALTERA_STAPL=m +CONFIG_INTEL_MEI=m +CONFIG_INTEL_MEI_ME=m +CONFIG_INTEL_MEI_TXE=m +CONFIG_INTEL_MEI_HDCP=m +CONFIG_VMWARE_VMCI=m +CONFIG_GENWQE=m +CONFIG_GENWQE_PLATFORM_ERROR_RECOVERY=0 +CONFIG_ECHO=m +# CONFIG_BCM_VK is not set +CONFIG_MISC_ALCOR_PCI=m +CONFIG_MISC_RTSX_PCI=m +CONFIG_MISC_RTSX_USB=m +CONFIG_HABANA_AI=m +# CONFIG_UACCE is not set +# CONFIG_PVPANIC is not set +# end of Misc devices + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +CONFIG_RAID_ATTRS=y +CONFIG_SCSI_COMMON=y +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +CONFIG_SCSI_NETLINK=y +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +CONFIG_CHR_DEV_ST=y +CONFIG_BLK_DEV_SR=y +CONFIG_CHR_DEV_SG=y +CONFIG_BLK_DEV_BSG=y +CONFIG_CHR_DEV_SCH=y +CONFIG_SCSI_ENCLOSURE=m +CONFIG_SCSI_CONSTANTS=y +CONFIG_SCSI_LOGGING=y +CONFIG_SCSI_SCAN_ASYNC=y + +# +# SCSI Transports +# +CONFIG_SCSI_SPI_ATTRS=m +CONFIG_SCSI_FC_ATTRS=m +CONFIG_SCSI_ISCSI_ATTRS=m +CONFIG_SCSI_SAS_ATTRS=m +CONFIG_SCSI_SAS_LIBSAS=m +CONFIG_SCSI_SAS_ATA=y +CONFIG_SCSI_SAS_HOST_SMP=y +CONFIG_SCSI_SRP_ATTRS=m +# end of SCSI Transports + +CONFIG_SCSI_LOWLEVEL=y +CONFIG_ISCSI_TCP=m +CONFIG_ISCSI_BOOT_SYSFS=y +CONFIG_SCSI_CXGB3_ISCSI=m +CONFIG_SCSI_CXGB4_ISCSI=m +CONFIG_SCSI_BNX2_ISCSI=m +CONFIG_SCSI_BNX2X_FCOE=m +CONFIG_BE2ISCSI=m +CONFIG_BLK_DEV_3W_XXXX_RAID=m +CONFIG_SCSI_HPSA=m +CONFIG_SCSI_3W_9XXX=m +CONFIG_SCSI_3W_SAS=m +CONFIG_SCSI_ACARD=m +CONFIG_SCSI_AHA1740=m +CONFIG_SCSI_AACRAID=m +CONFIG_SCSI_AIC7XXX=m +CONFIG_AIC7XXX_CMDS_PER_DEVICE=8 +CONFIG_AIC7XXX_RESET_DELAY_MS=5000 +# CONFIG_AIC7XXX_DEBUG_ENABLE is not set +CONFIG_AIC7XXX_DEBUG_MASK=0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y +CONFIG_SCSI_AIC79XX=m +CONFIG_AIC79XX_CMDS_PER_DEVICE=32 +CONFIG_AIC79XX_RESET_DELAY_MS=5000 +# CONFIG_AIC79XX_DEBUG_ENABLE is not set +CONFIG_AIC79XX_DEBUG_MASK=0 +CONFIG_AIC79XX_REG_PRETTY_PRINT=y +CONFIG_SCSI_AIC94XX=m +# CONFIG_AIC94XX_DEBUG is not set +CONFIG_SCSI_MVSAS=m +# CONFIG_SCSI_MVSAS_DEBUG is not set +# CONFIG_SCSI_MVSAS_TASKLET is not set +CONFIG_SCSI_MVUMI=m +CONFIG_SCSI_DPT_I2O=m +CONFIG_SCSI_ADVANSYS=m +CONFIG_SCSI_ARCMSR=m +CONFIG_SCSI_ESAS2R=m +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_MM=m +CONFIG_MEGARAID_MAILBOX=m +CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_SAS=m +CONFIG_SCSI_MPT3SAS=m +CONFIG_SCSI_MPT2SAS_MAX_SGE=128 +CONFIG_SCSI_MPT3SAS_MAX_SGE=128 +CONFIG_SCSI_MPT2SAS=m +# CONFIG_SCSI_MPI3MR is not set +CONFIG_SCSI_SMARTPQI=m +CONFIG_SCSI_UFSHCD=m +CONFIG_SCSI_UFSHCD_PCI=m +CONFIG_SCSI_UFS_DWC_TC_PCI=m +CONFIG_SCSI_UFSHCD_PLATFORM=m +CONFIG_SCSI_UFS_CDNS_PLATFORM=m +CONFIG_SCSI_UFS_DWC_TC_PLATFORM=m +CONFIG_SCSI_UFS_BSG=y +# CONFIG_SCSI_UFS_HPB is not set +CONFIG_SCSI_HPTIOP=m +CONFIG_SCSI_BUSLOGIC=m +CONFIG_SCSI_FLASHPOINT=y +CONFIG_SCSI_MYRB=m +CONFIG_SCSI_MYRS=m +CONFIG_VMWARE_PVSCSI=m +CONFIG_XEN_SCSI_FRONTEND=m +CONFIG_HYPERV_STORAGE=m +CONFIG_LIBFC=m +CONFIG_LIBFCOE=m +CONFIG_FCOE=m +CONFIG_FCOE_FNIC=m +CONFIG_SCSI_SNIC=m +# CONFIG_SCSI_SNIC_DEBUG_FS is not set +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_FDOMAIN=m +CONFIG_SCSI_FDOMAIN_PCI=m +CONFIG_SCSI_ISCI=m +CONFIG_SCSI_IPS=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_PPA=m +CONFIG_SCSI_IMM=m +# CONFIG_SCSI_IZIP_EPP16 is not set +# CONFIG_SCSI_IZIP_SLOW_CTR is not set +CONFIG_SCSI_STEX=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +CONFIG_SCSI_SYM53C8XX_MMIO=y +CONFIG_SCSI_IPR=m +CONFIG_SCSI_IPR_TRACE=y +CONFIG_SCSI_IPR_DUMP=y +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_QLA_FC=m +CONFIG_TCM_QLA2XXX=m +# CONFIG_TCM_QLA2XXX_DEBUG is not set +CONFIG_SCSI_QLA_ISCSI=m +CONFIG_QEDI=m +CONFIG_QEDF=m +CONFIG_SCSI_LPFC=m +# CONFIG_SCSI_LPFC_DEBUG_FS is not set +# CONFIG_SCSI_EFCT is not set +CONFIG_SCSI_SIM710=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_AM53C974=m +CONFIG_SCSI_WD719X=m +CONFIG_SCSI_DEBUG=m +CONFIG_SCSI_PMCRAID=m +CONFIG_SCSI_PM8001=m +CONFIG_SCSI_BFA_FC=m +CONFIG_SCSI_VIRTIO=m +CONFIG_SCSI_CHELSIO_FCOE=m +CONFIG_SCSI_LOWLEVEL_PCMCIA=y +CONFIG_PCMCIA_AHA152X=m +CONFIG_PCMCIA_FDOMAIN=m +CONFIG_PCMCIA_QLOGIC=m +CONFIG_PCMCIA_SYM53C500=m +CONFIG_SCSI_DH=y +CONFIG_SCSI_DH_RDAC=y +CONFIG_SCSI_DH_HP_SW=y +CONFIG_SCSI_DH_EMC=y +CONFIG_SCSI_DH_ALUA=y +# end of SCSI device support + +CONFIG_ATA=y +CONFIG_SATA_HOST=y +CONFIG_PATA_TIMINGS=y +CONFIG_ATA_VERBOSE_ERROR=y +CONFIG_ATA_FORCE=y +CONFIG_ATA_ACPI=y +CONFIG_SATA_ZPODD=y +CONFIG_SATA_PMP=y + +# +# Controllers with non-SFF native interface +# +CONFIG_SATA_AHCI=y +CONFIG_SATA_MOBILE_LPM_POLICY=3 +CONFIG_SATA_AHCI_PLATFORM=y +CONFIG_SATA_INIC162X=y +CONFIG_SATA_ACARD_AHCI=y +CONFIG_SATA_SIL24=y +CONFIG_ATA_SFF=y + +# +# SFF controllers with custom DMA interface +# +CONFIG_PDC_ADMA=y +CONFIG_SATA_QSTOR=y +CONFIG_SATA_SX4=y +CONFIG_ATA_BMDMA=y + +# +# SATA SFF controllers with BMDMA +# +CONFIG_ATA_PIIX=y +CONFIG_SATA_DWC=y +CONFIG_SATA_DWC_OLD_DMA=y +# CONFIG_SATA_DWC_DEBUG is not set +CONFIG_SATA_MV=y +CONFIG_SATA_NV=y +CONFIG_SATA_PROMISE=y +CONFIG_SATA_SIL=y +CONFIG_SATA_SIS=y +CONFIG_SATA_SVW=y +CONFIG_SATA_ULI=y +CONFIG_SATA_VIA=y +CONFIG_SATA_VITESSE=y + +# +# PATA SFF controllers with BMDMA +# +CONFIG_PATA_ALI=y +CONFIG_PATA_AMD=y +CONFIG_PATA_ARTOP=y +CONFIG_PATA_ATIIXP=y +CONFIG_PATA_ATP867X=y +CONFIG_PATA_CMD64X=y +CONFIG_PATA_CYPRESS=y +CONFIG_PATA_EFAR=y +CONFIG_PATA_HPT366=y +CONFIG_PATA_HPT37X=y +CONFIG_PATA_HPT3X2N=y +CONFIG_PATA_HPT3X3=y +CONFIG_PATA_HPT3X3_DMA=y +CONFIG_PATA_IT8213=y +CONFIG_PATA_IT821X=y +CONFIG_PATA_JMICRON=y +CONFIG_PATA_MARVELL=y +CONFIG_PATA_NETCELL=y +CONFIG_PATA_NINJA32=y +CONFIG_PATA_NS87415=y +CONFIG_PATA_OLDPIIX=y +CONFIG_PATA_OPTIDMA=y +CONFIG_PATA_PDC2027X=y +CONFIG_PATA_PDC_OLD=y +CONFIG_PATA_RADISYS=y +CONFIG_PATA_RDC=y +CONFIG_PATA_SCH=y +CONFIG_PATA_SERVERWORKS=y +CONFIG_PATA_SIL680=y +CONFIG_PATA_SIS=y +CONFIG_PATA_TOSHIBA=y +CONFIG_PATA_TRIFLEX=y +CONFIG_PATA_VIA=y +CONFIG_PATA_WINBOND=y + +# +# PIO-only SFF controllers +# +CONFIG_PATA_CMD640_PCI=y +CONFIG_PATA_MPIIX=y +CONFIG_PATA_NS87410=y +CONFIG_PATA_OPTI=y +# CONFIG_PATA_PCMCIA is not set +CONFIG_PATA_PLATFORM=y +CONFIG_PATA_RZ1000=y + +# +# Generic fallback / legacy drivers +# +CONFIG_PATA_ACPI=y +CONFIG_ATA_GENERIC=y +CONFIG_PATA_LEGACY=y +CONFIG_MD=y +CONFIG_BLK_DEV_MD=y +CONFIG_MD_AUTODETECT=y +CONFIG_MD_LINEAR=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID10=m +CONFIG_MD_RAID456=m +CONFIG_MD_MULTIPATH=m +CONFIG_MD_FAULTY=m +CONFIG_MD_CLUSTER=m +CONFIG_BCACHE=y +# CONFIG_BCACHE_DEBUG is not set +# CONFIG_BCACHE_CLOSURES_DEBUG is not set +# CONFIG_BCACHE_ASYNC_REGISTRATION is not set +CONFIG_BLK_DEV_DM_BUILTIN=y +CONFIG_BLK_DEV_DM=y +# CONFIG_DM_DEBUG is not set +CONFIG_DM_BUFIO=m +# CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING is not set +CONFIG_DM_BIO_PRISON=m +CONFIG_DM_PERSISTENT_DATA=m +CONFIG_DM_UNSTRIPED=m +CONFIG_DM_CRYPT=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_THIN_PROVISIONING=m +CONFIG_DM_CACHE=m +CONFIG_DM_CACHE_SMQ=m +CONFIG_DM_WRITECACHE=m +# CONFIG_DM_EBS is not set +CONFIG_DM_ERA=m +CONFIG_DM_CLONE=m +CONFIG_DM_MIRROR=m +CONFIG_DM_LOG_USERSPACE=m +CONFIG_DM_RAID=m +CONFIG_DM_ZERO=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_QL=m +CONFIG_DM_MULTIPATH_ST=m +# CONFIG_DM_MULTIPATH_HST is not set +# CONFIG_DM_MULTIPATH_IOA is not set +CONFIG_DM_DELAY=m +# CONFIG_DM_DUST is not set +CONFIG_DM_INIT=y +CONFIG_DM_UEVENT=y +CONFIG_DM_FLAKEY=m +CONFIG_DM_VERITY=m +CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG=y +# CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING is not set +# CONFIG_DM_VERITY_FEC is not set +CONFIG_DM_SWITCH=m +CONFIG_DM_LOG_WRITES=m +CONFIG_DM_INTEGRITY=m +CONFIG_DM_ZONED=m +CONFIG_TARGET_CORE=y +CONFIG_TCM_IBLOCK=m +CONFIG_TCM_FILEIO=m +CONFIG_TCM_PSCSI=m +CONFIG_TCM_USER2=m +CONFIG_LOOPBACK_TARGET=m +CONFIG_TCM_FC=m +CONFIG_ISCSI_TARGET=m +CONFIG_ISCSI_TARGET_CXGB4=m +CONFIG_SBP_TARGET=m +CONFIG_FUSION=y +CONFIG_FUSION_SPI=m +CONFIG_FUSION_FC=m +CONFIG_FUSION_SAS=m +CONFIG_FUSION_MAX_SGE=128 +CONFIG_FUSION_CTL=m +CONFIG_FUSION_LAN=m +CONFIG_FUSION_LOGGING=y + +# +# IEEE 1394 (FireWire) support +# +CONFIG_FIREWIRE=m +CONFIG_FIREWIRE_OHCI=m +CONFIG_FIREWIRE_SBP2=m +CONFIG_FIREWIRE_NET=m +CONFIG_FIREWIRE_NOSY=m +# end of IEEE 1394 (FireWire) support + +CONFIG_MACINTOSH_DRIVERS=y +CONFIG_MAC_EMUMOUSEBTN=m +CONFIG_NETDEVICES=y +CONFIG_MII=m +CONFIG_NET_CORE=y +CONFIG_BONDING=m +CONFIG_DUMMY=m +# CONFIG_WIREGUARD is not set +CONFIG_EQUALIZER=m +CONFIG_NET_FC=y +CONFIG_IFB=m +CONFIG_NET_TEAM=m +CONFIG_NET_TEAM_MODE_BROADCAST=m +CONFIG_NET_TEAM_MODE_ROUNDROBIN=m +CONFIG_NET_TEAM_MODE_RANDOM=m +CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m +CONFIG_NET_TEAM_MODE_LOADBALANCE=m +CONFIG_MACVLAN=m +CONFIG_MACVTAP=m +CONFIG_IPVLAN_L3S=y +CONFIG_IPVLAN=m +CONFIG_IPVTAP=m +CONFIG_VXLAN=m +CONFIG_GENEVE=m +# CONFIG_BAREUDP is not set +CONFIG_GTP=m +CONFIG_MACSEC=m +CONFIG_NETCONSOLE=m +CONFIG_NETCONSOLE_DYNAMIC=y +CONFIG_NETPOLL=y +CONFIG_NET_POLL_CONTROLLER=y +CONFIG_NTB_NETDEV=m +CONFIG_RIONET=m +CONFIG_RIONET_TX_SIZE=128 +CONFIG_RIONET_RX_SIZE=128 +CONFIG_TUN=y +CONFIG_TAP=m +# CONFIG_TUN_VNET_CROSS_LE is not set +CONFIG_VETH=m +CONFIG_VIRTIO_NET=m +CONFIG_NLMON=m +CONFIG_NET_VRF=m +CONFIG_VSOCKMON=m +CONFIG_SUNGEM_PHY=m +CONFIG_ARCNET=m +CONFIG_ARCNET_1201=m +CONFIG_ARCNET_1051=m +CONFIG_ARCNET_RAW=m +CONFIG_ARCNET_CAP=m +CONFIG_ARCNET_COM90xx=m +CONFIG_ARCNET_COM90xxIO=m +CONFIG_ARCNET_RIM_I=m +CONFIG_ARCNET_COM20020=m +CONFIG_ARCNET_COM20020_PCI=m +CONFIG_ARCNET_COM20020_CS=m +CONFIG_ATM_DRIVERS=y +CONFIG_ATM_DUMMY=m +CONFIG_ATM_TCP=m +CONFIG_ATM_LANAI=m +CONFIG_ATM_ENI=m +# CONFIG_ATM_ENI_DEBUG is not set +# CONFIG_ATM_ENI_TUNE_BURST is not set +CONFIG_ATM_FIRESTREAM=m +CONFIG_ATM_ZATM=m +# CONFIG_ATM_ZATM_DEBUG is not set +CONFIG_ATM_NICSTAR=m +# CONFIG_ATM_NICSTAR_USE_SUNI is not set +# CONFIG_ATM_NICSTAR_USE_IDT77105 is not set +CONFIG_ATM_IDT77252=m +# CONFIG_ATM_IDT77252_DEBUG is not set +# CONFIG_ATM_IDT77252_RCV_ALL is not set +CONFIG_ATM_IDT77252_USE_SUNI=y +CONFIG_ATM_AMBASSADOR=m +# CONFIG_ATM_AMBASSADOR_DEBUG is not set +CONFIG_ATM_HORIZON=m +# CONFIG_ATM_HORIZON_DEBUG is not set +CONFIG_ATM_IA=m +# CONFIG_ATM_IA_DEBUG is not set +CONFIG_ATM_FORE200E=m +# CONFIG_ATM_FORE200E_USE_TASKLET is not set +CONFIG_ATM_FORE200E_TX_RETRY=16 +CONFIG_ATM_FORE200E_DEBUG=0 +CONFIG_ATM_HE=m +CONFIG_ATM_HE_USE_SUNI=y +CONFIG_ATM_SOLOS=m +# CONFIG_CAIF_DRIVERS is not set + +# +# Distributed Switch Architecture drivers +# +CONFIG_B53=m +CONFIG_B53_SPI_DRIVER=m +CONFIG_B53_MDIO_DRIVER=m +CONFIG_B53_MMAP_DRIVER=m +CONFIG_B53_SRAB_DRIVER=m +CONFIG_B53_SERDES=m +CONFIG_NET_DSA_BCM_SF2=m +# CONFIG_NET_DSA_LOOP is not set +# CONFIG_NET_DSA_HIRSCHMANN_HELLCREEK is not set +CONFIG_NET_DSA_LANTIQ_GSWIP=m +CONFIG_NET_DSA_MT7530=m +CONFIG_NET_DSA_MV88E6060=m +CONFIG_NET_DSA_MICROCHIP_KSZ_COMMON=m +CONFIG_NET_DSA_MICROCHIP_KSZ9477=m +CONFIG_NET_DSA_MICROCHIP_KSZ9477_I2C=m +CONFIG_NET_DSA_MICROCHIP_KSZ9477_SPI=m +CONFIG_NET_DSA_MICROCHIP_KSZ8795=m +CONFIG_NET_DSA_MICROCHIP_KSZ8795_SPI=m +# CONFIG_NET_DSA_MICROCHIP_KSZ8863_SMI is not set +CONFIG_NET_DSA_MV88E6XXX=m +CONFIG_NET_DSA_MV88E6XXX_PTP=y +# CONFIG_NET_DSA_MSCC_SEVILLE is not set +# CONFIG_NET_DSA_AR9331 is not set +CONFIG_NET_DSA_SJA1105=m +CONFIG_NET_DSA_SJA1105_PTP=y +CONFIG_NET_DSA_SJA1105_TAS=y +# CONFIG_NET_DSA_SJA1105_VL is not set +# CONFIG_NET_DSA_XRS700X_I2C is not set +# CONFIG_NET_DSA_XRS700X_MDIO is not set +CONFIG_NET_DSA_QCA8K=m +CONFIG_NET_DSA_REALTEK_SMI=m +CONFIG_NET_DSA_SMSC_LAN9303=m +CONFIG_NET_DSA_SMSC_LAN9303_I2C=m +CONFIG_NET_DSA_SMSC_LAN9303_MDIO=m +# CONFIG_NET_DSA_VITESSE_VSC73XX_SPI is not set +# CONFIG_NET_DSA_VITESSE_VSC73XX_PLATFORM is not set +# end of Distributed Switch Architecture drivers + +CONFIG_ETHERNET=y +CONFIG_MDIO=m +CONFIG_NET_VENDOR_3COM=y +CONFIG_EL3=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_3C589=m +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +CONFIG_NET_VENDOR_ADAPTEC=y +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_NET_VENDOR_AGERE=y +CONFIG_ET131X=m +CONFIG_NET_VENDOR_ALACRITECH=y +CONFIG_SLICOSS=m +CONFIG_NET_VENDOR_ALTEON=y +CONFIG_ACENIC=m +# CONFIG_ACENIC_OMIT_TIGON_I is not set +CONFIG_ALTERA_TSE=m +CONFIG_NET_VENDOR_AMAZON=y +CONFIG_ENA_ETHERNET=m +CONFIG_NET_VENDOR_AMD=y +CONFIG_AMD8111_ETH=m +CONFIG_PCNET32=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_AMD_XGBE=m +CONFIG_AMD_XGBE_DCB=y +CONFIG_AMD_XGBE_HAVE_ECC=y +CONFIG_NET_VENDOR_AQUANTIA=y +CONFIG_AQTION=m +CONFIG_NET_VENDOR_ARC=y +CONFIG_NET_VENDOR_ATHEROS=y +CONFIG_ATL2=m +CONFIG_ATL1=m +CONFIG_ATL1E=m +CONFIG_ATL1C=m +CONFIG_ALX=m +CONFIG_NET_VENDOR_BROADCOM=y +CONFIG_B44=m +CONFIG_B44_PCI_AUTOSELECT=y +CONFIG_B44_PCICORE_AUTOSELECT=y +CONFIG_B44_PCI=y +CONFIG_BCMGENET=m +CONFIG_BNX2=m +CONFIG_CNIC=m +CONFIG_TIGON3=m +CONFIG_TIGON3_HWMON=y +CONFIG_BNX2X=m +CONFIG_BNX2X_SRIOV=y +CONFIG_SYSTEMPORT=m +CONFIG_BNXT=m +CONFIG_BNXT_SRIOV=y +CONFIG_BNXT_FLOWER_OFFLOAD=y +CONFIG_BNXT_DCB=y +CONFIG_BNXT_HWMON=y +CONFIG_NET_VENDOR_BROCADE=y +CONFIG_BNA=m +CONFIG_NET_VENDOR_CADENCE=y +CONFIG_MACB=m +CONFIG_MACB_USE_HWSTAMP=y +CONFIG_MACB_PCI=m +CONFIG_NET_VENDOR_CAVIUM=y +CONFIG_THUNDER_NIC_PF=m +CONFIG_THUNDER_NIC_VF=m +CONFIG_THUNDER_NIC_BGX=m +CONFIG_THUNDER_NIC_RGX=m +CONFIG_CAVIUM_PTP=m +CONFIG_LIQUIDIO=m +CONFIG_LIQUIDIO_VF=m +CONFIG_NET_VENDOR_CHELSIO=y +CONFIG_CHELSIO_T1=m +CONFIG_CHELSIO_T1_1G=y +CONFIG_CHELSIO_T3=m +CONFIG_CHELSIO_T4=m +CONFIG_CHELSIO_T4_DCB=y +CONFIG_CHELSIO_T4_FCOE=y +CONFIG_CHELSIO_T4VF=m +CONFIG_CHELSIO_LIB=m +CONFIG_CHELSIO_INLINE_CRYPTO=y +CONFIG_CHELSIO_IPSEC_INLINE=m +# CONFIG_CHELSIO_TLS_DEVICE is not set +CONFIG_NET_VENDOR_CIRRUS=y +CONFIG_NET_VENDOR_CISCO=y +CONFIG_ENIC=m +CONFIG_NET_VENDOR_CORTINA=y +CONFIG_CX_ECAT=m +CONFIG_DNET=m +CONFIG_NET_VENDOR_DEC=y +CONFIG_NET_TULIP=y +CONFIG_DE2104X=m +CONFIG_DE2104X_DSL=0 +CONFIG_TULIP=m +# CONFIG_TULIP_MWI is not set +# CONFIG_TULIP_MMIO is not set +# CONFIG_TULIP_NAPI is not set +CONFIG_DE4X5=m +CONFIG_WINBOND_840=m +CONFIG_DM9102=m +CONFIG_ULI526X=m +CONFIG_PCMCIA_XIRCOM=m +CONFIG_NET_VENDOR_DLINK=y +CONFIG_DL2K=m +CONFIG_SUNDANCE=m +# CONFIG_SUNDANCE_MMIO is not set +CONFIG_NET_VENDOR_EMULEX=y +CONFIG_BE2NET=m +CONFIG_BE2NET_HWMON=y +CONFIG_BE2NET_BE2=y +CONFIG_BE2NET_BE3=y +CONFIG_BE2NET_LANCER=y +CONFIG_BE2NET_SKYHAWK=y +CONFIG_NET_VENDOR_EZCHIP=y +CONFIG_NET_VENDOR_FUJITSU=y +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_NET_VENDOR_GOOGLE=y +CONFIG_GVE=m +CONFIG_NET_VENDOR_HUAWEI=y +CONFIG_HINIC=m +CONFIG_NET_VENDOR_I825XX=y +CONFIG_NET_VENDOR_INTEL=y +CONFIG_E100=m +CONFIG_E1000=m +CONFIG_E1000E=m +CONFIG_E1000E_HWTS=y +CONFIG_IGB=m +CONFIG_IGB_HWMON=y +CONFIG_IGB_DCA=y +CONFIG_IGBVF=m +CONFIG_IXGB=m +CONFIG_IXGBE=m +CONFIG_IXGBE_HWMON=y +CONFIG_IXGBE_DCA=y +CONFIG_IXGBE_DCB=y +CONFIG_IXGBE_IPSEC=y +CONFIG_IXGBEVF=m +CONFIG_IXGBEVF_IPSEC=y +CONFIG_I40E=m +CONFIG_I40E_DCB=y +CONFIG_IAVF=m +CONFIG_I40EVF=m +CONFIG_ICE=m +CONFIG_FM10K=m +CONFIG_IGC=m +CONFIG_NET_VENDOR_MICROSOFT=y +# CONFIG_MICROSOFT_MANA is not set +CONFIG_JME=m +CONFIG_NET_VENDOR_LITEX=y +CONFIG_NET_VENDOR_MARVELL=y +CONFIG_MVMDIO=m +CONFIG_SKGE=m +# CONFIG_SKGE_DEBUG is not set +CONFIG_SKGE_GENESIS=y +CONFIG_SKY2=m +# CONFIG_SKY2_DEBUG is not set +# CONFIG_PRESTERA is not set +CONFIG_NET_VENDOR_MELLANOX=y +CONFIG_MLX4_EN=m +CONFIG_MLX4_EN_DCB=y +CONFIG_MLX4_CORE=m +CONFIG_MLX4_DEBUG=y +CONFIG_MLX4_CORE_GEN2=y +CONFIG_MLX5_CORE=m +CONFIG_MLX5_ACCEL=y +CONFIG_MLX5_FPGA=y +CONFIG_MLX5_CORE_EN=y +CONFIG_MLX5_EN_ARFS=y +CONFIG_MLX5_EN_RXNFC=y +CONFIG_MLX5_MPFS=y +CONFIG_MLX5_ESWITCH=y +CONFIG_MLX5_BRIDGE=y +CONFIG_MLX5_CLS_ACT=y +CONFIG_MLX5_TC_CT=y +CONFIG_MLX5_TC_SAMPLE=y +CONFIG_MLX5_CORE_EN_DCB=y +CONFIG_MLX5_CORE_IPOIB=y +CONFIG_MLX5_FPGA_IPSEC=y +# CONFIG_MLX5_IPSEC is not set +CONFIG_MLX5_EN_IPSEC=y +CONFIG_MLX5_FPGA_TLS=y +CONFIG_MLX5_TLS=y +CONFIG_MLX5_EN_TLS=y +CONFIG_MLX5_SW_STEERING=y +# CONFIG_MLX5_SF is not set +CONFIG_MLXSW_CORE=m +CONFIG_MLXSW_CORE_HWMON=y +CONFIG_MLXSW_CORE_THERMAL=y +CONFIG_MLXSW_PCI=m +CONFIG_MLXSW_I2C=m +CONFIG_MLXSW_SPECTRUM=m +CONFIG_MLXSW_SPECTRUM_DCB=y +CONFIG_MLXSW_MINIMAL=m +CONFIG_MLXFW=m +CONFIG_NET_VENDOR_MICREL=y +CONFIG_KS8842=m +CONFIG_KS8851=m +CONFIG_KS8851_MLL=m +CONFIG_KSZ884X_PCI=m +CONFIG_NET_VENDOR_MICROCHIP=y +CONFIG_ENC28J60=m +# CONFIG_ENC28J60_WRITEVERIFY is not set +CONFIG_ENCX24J600=m +CONFIG_LAN743X=m +CONFIG_NET_VENDOR_MICROSEMI=y +CONFIG_NET_VENDOR_MYRI=y +CONFIG_MYRI10GE=m +CONFIG_MYRI10GE_DCA=y +CONFIG_FEALNX=m +CONFIG_NET_VENDOR_NATSEMI=y +CONFIG_NATSEMI=m +CONFIG_NS83820=m +CONFIG_NET_VENDOR_NETERION=y +CONFIG_S2IO=m +CONFIG_VXGE=m +# CONFIG_VXGE_DEBUG_TRACE_ALL is not set +CONFIG_NET_VENDOR_NETRONOME=y +CONFIG_NFP=m +CONFIG_NFP_APP_FLOWER=y +CONFIG_NFP_APP_ABM_NIC=y +# CONFIG_NFP_DEBUG is not set +CONFIG_NET_VENDOR_NI=y +CONFIG_NI_XGE_MANAGEMENT_ENET=m +CONFIG_NET_VENDOR_8390=y +CONFIG_PCMCIA_AXNET=m +CONFIG_NE2K_PCI=m +CONFIG_PCMCIA_PCNET=m +CONFIG_NET_VENDOR_NVIDIA=y +CONFIG_FORCEDETH=m +CONFIG_NET_VENDOR_OKI=y +CONFIG_ETHOC=m +CONFIG_NET_VENDOR_PACKET_ENGINES=y +CONFIG_HAMACHI=m +CONFIG_YELLOWFIN=m +CONFIG_NET_VENDOR_PENSANDO=y +CONFIG_IONIC=m +CONFIG_NET_VENDOR_QLOGIC=y +CONFIG_QLA3XXX=m +CONFIG_QLCNIC=m +CONFIG_QLCNIC_SRIOV=y +CONFIG_QLCNIC_DCB=y +CONFIG_QLCNIC_HWMON=y +CONFIG_NETXEN_NIC=m +CONFIG_QED=m +CONFIG_QED_LL2=y +CONFIG_QED_SRIOV=y +CONFIG_QEDE=m +CONFIG_QED_RDMA=y +CONFIG_QED_ISCSI=y +CONFIG_QED_FCOE=y +CONFIG_QED_OOO=y +CONFIG_NET_VENDOR_QUALCOMM=y +CONFIG_QCOM_EMAC=m +CONFIG_RMNET=m +CONFIG_NET_VENDOR_RDC=y +CONFIG_R6040=m +CONFIG_NET_VENDOR_REALTEK=y +CONFIG_ATP=m +CONFIG_8139CP=m +CONFIG_8139TOO=m +CONFIG_8139TOO_PIO=y +# CONFIG_8139TOO_TUNE_TWISTER is not set +CONFIG_8139TOO_8129=y +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_R8169=m +CONFIG_NET_VENDOR_RENESAS=y +CONFIG_NET_VENDOR_ROCKER=y +CONFIG_ROCKER=m +CONFIG_NET_VENDOR_SAMSUNG=y +CONFIG_SXGBE_ETH=m +CONFIG_NET_VENDOR_SEEQ=y +CONFIG_NET_VENDOR_SOLARFLARE=y +CONFIG_SFC=m +CONFIG_SFC_MTD=y +CONFIG_SFC_MCDI_MON=y +CONFIG_SFC_SRIOV=y +CONFIG_SFC_MCDI_LOGGING=y +CONFIG_SFC_FALCON=m +CONFIG_SFC_FALCON_MTD=y +CONFIG_NET_VENDOR_SILAN=y +CONFIG_SC92031=m +CONFIG_NET_VENDOR_SIS=y +CONFIG_SIS900=m +CONFIG_SIS190=m +CONFIG_NET_VENDOR_SMSC=y +CONFIG_PCMCIA_SMC91C92=m +CONFIG_EPIC100=m +CONFIG_SMSC911X=m +CONFIG_SMSC9420=m +CONFIG_NET_VENDOR_SOCIONEXT=y +CONFIG_NET_VENDOR_STMICRO=y +CONFIG_STMMAC_ETH=m +# CONFIG_STMMAC_SELFTESTS is not set +CONFIG_STMMAC_PLATFORM=m +CONFIG_DWMAC_GENERIC=m +CONFIG_DWMAC_INTEL=m +# CONFIG_DWMAC_LOONGSON is not set +CONFIG_STMMAC_PCI=m +CONFIG_NET_VENDOR_SUN=y +CONFIG_HAPPYMEAL=m +CONFIG_SUNGEM=m +CONFIG_CASSINI=m +CONFIG_NIU=m +CONFIG_NET_VENDOR_SYNOPSYS=y +CONFIG_DWC_XLGMAC=m +CONFIG_DWC_XLGMAC_PCI=m +CONFIG_NET_VENDOR_TEHUTI=y +CONFIG_TEHUTI=m +CONFIG_NET_VENDOR_TI=y +# CONFIG_TI_CPSW_PHY_SEL is not set +CONFIG_TLAN=m +CONFIG_NET_VENDOR_VIA=y +CONFIG_VIA_RHINE=m +CONFIG_VIA_RHINE_MMIO=y +CONFIG_VIA_VELOCITY=m +CONFIG_NET_VENDOR_WIZNET=y +CONFIG_WIZNET_W5100=m +CONFIG_WIZNET_W5300=m +# CONFIG_WIZNET_BUS_DIRECT is not set +# CONFIG_WIZNET_BUS_INDIRECT is not set +CONFIG_WIZNET_BUS_ANY=y +CONFIG_WIZNET_W5100_SPI=m +CONFIG_NET_VENDOR_XILINX=y +# CONFIG_XILINX_EMACLITE is not set +CONFIG_XILINX_AXI_EMAC=m +CONFIG_XILINX_LL_TEMAC=m +CONFIG_NET_VENDOR_XIRCOM=y +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_FDDI=y +CONFIG_DEFXX=m +CONFIG_SKFP=m +# CONFIG_HIPPI is not set +CONFIG_NET_SB1000=m +CONFIG_PHYLINK=m +CONFIG_PHYLIB=y +CONFIG_SWPHY=y +CONFIG_LED_TRIGGER_PHY=y +CONFIG_FIXED_PHY=y +CONFIG_SFP=m + +# +# MII PHY device drivers +# +CONFIG_AMD_PHY=m +CONFIG_ADIN_PHY=m +CONFIG_AQUANTIA_PHY=m +CONFIG_AX88796B_PHY=m +CONFIG_BROADCOM_PHY=m +# CONFIG_BCM54140_PHY is not set +CONFIG_BCM7XXX_PHY=m +# CONFIG_BCM84881_PHY is not set +CONFIG_BCM87XX_PHY=m +CONFIG_BCM_NET_PHYLIB=m +CONFIG_CICADA_PHY=m +CONFIG_CORTINA_PHY=m +CONFIG_DAVICOM_PHY=m +CONFIG_ICPLUS_PHY=m +CONFIG_LXT_PHY=m +CONFIG_INTEL_XWAY_PHY=m +CONFIG_LSI_ET1011C_PHY=m +CONFIG_MARVELL_PHY=m +CONFIG_MARVELL_10G_PHY=m +# CONFIG_MARVELL_88X2222_PHY is not set +# CONFIG_MAXLINEAR_GPHY is not set +# CONFIG_MEDIATEK_GE_PHY is not set +CONFIG_MICREL_PHY=m +CONFIG_MICROCHIP_PHY=m +CONFIG_MICROCHIP_T1_PHY=m +CONFIG_MICROSEMI_PHY=m +# CONFIG_MOTORCOMM_PHY is not set +CONFIG_NATIONAL_PHY=m +# CONFIG_NXP_C45_TJA11XX_PHY is not set +CONFIG_NXP_TJA11XX_PHY=m +CONFIG_AT803X_PHY=m +CONFIG_QSEMI_PHY=m +CONFIG_REALTEK_PHY=m +CONFIG_RENESAS_PHY=m +CONFIG_ROCKCHIP_PHY=m +CONFIG_SMSC_PHY=m +CONFIG_STE10XP=m +CONFIG_TERANETICS_PHY=m +CONFIG_DP83822_PHY=m +CONFIG_DP83TC811_PHY=m +CONFIG_DP83848_PHY=m +CONFIG_DP83867_PHY=m +# CONFIG_DP83869_PHY is not set +CONFIG_VITESSE_PHY=m +CONFIG_XILINX_GMII2RGMII=m +CONFIG_MICREL_KS8995MA=m +CONFIG_MDIO_DEVICE=y +CONFIG_MDIO_BUS=y +CONFIG_FWNODE_MDIO=y +CONFIG_ACPI_MDIO=y +CONFIG_MDIO_DEVRES=y +CONFIG_MDIO_BITBANG=m +CONFIG_MDIO_BCM_UNIMAC=m +CONFIG_MDIO_CAVIUM=m +CONFIG_MDIO_GPIO=m +CONFIG_MDIO_I2C=m +# CONFIG_MDIO_MVUSB is not set +CONFIG_MDIO_MSCC_MIIM=m +CONFIG_MDIO_THUNDER=m + +# +# MDIO Multiplexers +# + +# +# PCS device drivers +# +CONFIG_PCS_XPCS=m +# end of PCS device drivers + +CONFIG_PLIP=m +CONFIG_PPP=y +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_FILTER=y +CONFIG_PPP_MPPE=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPPOATM=m +CONFIG_PPPOE=m +CONFIG_PPTP=m +CONFIG_PPPOL2TP=m +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_SLIP=m +CONFIG_SLHC=y +CONFIG_SLIP_COMPRESSED=y +CONFIG_SLIP_SMART=y +CONFIG_SLIP_MODE_SLIP6=y +CONFIG_USB_NET_DRIVERS=m +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_RTL8152=m +CONFIG_USB_LAN78XX=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_AX88179_178A=m +CONFIG_USB_NET_CDCETHER=m +CONFIG_USB_NET_CDC_EEM=m +CONFIG_USB_NET_CDC_NCM=m +CONFIG_USB_NET_HUAWEI_CDC_NCM=m +CONFIG_USB_NET_CDC_MBIM=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_SR9700=m +CONFIG_USB_NET_SR9800=m +CONFIG_USB_NET_SMSC75XX=m +CONFIG_USB_NET_SMSC95XX=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_MCS7830=m +CONFIG_USB_NET_RNDIS_HOST=m +CONFIG_USB_NET_CDC_SUBSET_ENABLE=m +CONFIG_USB_NET_CDC_SUBSET=m +CONFIG_USB_ALI_M5632=y +CONFIG_USB_AN2720=y +CONFIG_USB_BELKIN=y +CONFIG_USB_ARMLINUX=y +CONFIG_USB_EPSON2888=y +CONFIG_USB_KC2190=y +CONFIG_USB_NET_ZAURUS=m +CONFIG_USB_NET_CX82310_ETH=m +CONFIG_USB_NET_KALMIA=m +CONFIG_USB_NET_QMI_WWAN=m +CONFIG_USB_HSO=m +CONFIG_USB_NET_INT51X1=m +CONFIG_USB_CDC_PHONET=m +CONFIG_USB_IPHETH=m +CONFIG_USB_SIERRA_NET=m +CONFIG_USB_VL600=m +CONFIG_USB_NET_CH9200=m +CONFIG_USB_NET_AQC111=m +# CONFIG_USB_RTL8153_ECM is not set +CONFIG_WLAN=y +CONFIG_WLAN_VENDOR_ADMTEK=y +CONFIG_ADM8211=m +CONFIG_ATH_COMMON=m +CONFIG_WLAN_VENDOR_ATH=y +# CONFIG_ATH_DEBUG is not set +CONFIG_ATH5K=m +# CONFIG_ATH5K_DEBUG is not set +# CONFIG_ATH5K_TRACER is not set +CONFIG_ATH5K_PCI=y +CONFIG_ATH9K_HW=m +CONFIG_ATH9K_COMMON=m +CONFIG_ATH9K_COMMON_DEBUG=y +CONFIG_ATH9K_BTCOEX_SUPPORT=y +CONFIG_ATH9K=m +CONFIG_ATH9K_PCI=y +CONFIG_ATH9K_AHB=y +CONFIG_ATH9K_DEBUGFS=y +CONFIG_ATH9K_STATION_STATISTICS=y +# CONFIG_ATH9K_DYNACK is not set +CONFIG_ATH9K_WOW=y +CONFIG_ATH9K_RFKILL=y +CONFIG_ATH9K_CHANNEL_CONTEXT=y +CONFIG_ATH9K_PCOEM=y +CONFIG_ATH9K_PCI_NO_EEPROM=m +CONFIG_ATH9K_HTC=m +CONFIG_ATH9K_HTC_DEBUGFS=y +CONFIG_ATH9K_HWRNG=y +CONFIG_ATH9K_COMMON_SPECTRAL=y +CONFIG_CARL9170=m +CONFIG_CARL9170_LEDS=y +# CONFIG_CARL9170_DEBUGFS is not set +CONFIG_CARL9170_WPC=y +CONFIG_CARL9170_HWRNG=y +CONFIG_ATH6KL=m +CONFIG_ATH6KL_SDIO=m +CONFIG_ATH6KL_USB=m +# CONFIG_ATH6KL_DEBUG is not set +# CONFIG_ATH6KL_TRACING is not set +CONFIG_AR5523=m +CONFIG_WIL6210=m +CONFIG_WIL6210_ISR_COR=y +CONFIG_WIL6210_TRACING=y +CONFIG_WIL6210_DEBUGFS=y +CONFIG_ATH10K=m +CONFIG_ATH10K_CE=y +CONFIG_ATH10K_PCI=m +CONFIG_ATH10K_SDIO=m +CONFIG_ATH10K_USB=m +# CONFIG_ATH10K_DEBUG is not set +CONFIG_ATH10K_DEBUGFS=y +CONFIG_ATH10K_SPECTRAL=y +CONFIG_ATH10K_TRACING=y +CONFIG_WCN36XX=m +# CONFIG_WCN36XX_DEBUGFS is not set +# CONFIG_ATH11K is not set +CONFIG_WLAN_VENDOR_ATMEL=y +CONFIG_ATMEL=m +CONFIG_PCI_ATMEL=m +CONFIG_PCMCIA_ATMEL=m +CONFIG_AT76C50X_USB=m +CONFIG_WLAN_VENDOR_BROADCOM=y +CONFIG_B43=m +CONFIG_B43_BCMA=y +CONFIG_B43_SSB=y +CONFIG_B43_BUSES_BCMA_AND_SSB=y +# CONFIG_B43_BUSES_BCMA is not set +# CONFIG_B43_BUSES_SSB is not set +CONFIG_B43_PCI_AUTOSELECT=y +CONFIG_B43_PCICORE_AUTOSELECT=y +# CONFIG_B43_SDIO is not set +CONFIG_B43_BCMA_PIO=y +CONFIG_B43_PIO=y +CONFIG_B43_PHY_G=y +CONFIG_B43_PHY_N=y +CONFIG_B43_PHY_LP=y +CONFIG_B43_PHY_HT=y +CONFIG_B43_LEDS=y +CONFIG_B43_HWRNG=y +# CONFIG_B43_DEBUG is not set +CONFIG_B43LEGACY=m +CONFIG_B43LEGACY_PCI_AUTOSELECT=y +CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y +CONFIG_B43LEGACY_LEDS=y +CONFIG_B43LEGACY_HWRNG=y +# CONFIG_B43LEGACY_DEBUG is not set +CONFIG_B43LEGACY_DMA=y +CONFIG_B43LEGACY_PIO=y +CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y +# CONFIG_B43LEGACY_DMA_MODE is not set +# CONFIG_B43LEGACY_PIO_MODE is not set +CONFIG_BRCMUTIL=m +CONFIG_BRCMSMAC=m +CONFIG_BRCMFMAC=m +CONFIG_BRCMFMAC_PROTO_BCDC=y +CONFIG_BRCMFMAC_PROTO_MSGBUF=y +CONFIG_BRCMFMAC_SDIO=y +CONFIG_BRCMFMAC_USB=y +CONFIG_BRCMFMAC_PCIE=y +CONFIG_BRCM_TRACING=y +# CONFIG_BRCMDBG is not set +CONFIG_WLAN_VENDOR_CISCO=y +CONFIG_AIRO=m +CONFIG_AIRO_CS=m +CONFIG_WLAN_VENDOR_INTEL=y +CONFIG_IPW2100=m +CONFIG_IPW2100_MONITOR=y +# CONFIG_IPW2100_DEBUG is not set +CONFIG_IPW2200=m +CONFIG_IPW2200_MONITOR=y +CONFIG_IPW2200_RADIOTAP=y +CONFIG_IPW2200_PROMISCUOUS=y +CONFIG_IPW2200_QOS=y +# CONFIG_IPW2200_DEBUG is not set +CONFIG_LIBIPW=m +# CONFIG_LIBIPW_DEBUG is not set +CONFIG_IWLEGACY=m +CONFIG_IWL4965=m +CONFIG_IWL3945=m + +# +# iwl3945 / iwl4965 Debugging Options +# +# CONFIG_IWLEGACY_DEBUG is not set +CONFIG_IWLEGACY_DEBUGFS=y +# end of iwl3945 / iwl4965 Debugging Options + +CONFIG_IWLWIFI=m +CONFIG_IWLWIFI_LEDS=y +CONFIG_IWLDVM=m +CONFIG_IWLMVM=m +CONFIG_IWLWIFI_OPMODE_MODULAR=y +# CONFIG_IWLWIFI_BCAST_FILTERING is not set + +# +# Debugging Options +# +# CONFIG_IWLWIFI_DEBUG is not set +CONFIG_IWLWIFI_DEBUGFS=y +CONFIG_IWLWIFI_DEVICE_TRACING=y +# end of Debugging Options + +CONFIG_WLAN_VENDOR_INTERSIL=y +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_HOSTAP_PLX=m +CONFIG_HOSTAP_PCI=m +CONFIG_HOSTAP_CS=m +CONFIG_HERMES=m +# CONFIG_HERMES_PRISM is not set +CONFIG_HERMES_CACHE_FW_ON_INIT=y +CONFIG_PLX_HERMES=m +CONFIG_TMD_HERMES=m +CONFIG_NORTEL_HERMES=m +CONFIG_PCMCIA_HERMES=m +CONFIG_PCMCIA_SPECTRUM=m +CONFIG_ORINOCO_USB=m +CONFIG_P54_COMMON=m +CONFIG_P54_USB=m +CONFIG_P54_PCI=m +CONFIG_P54_SPI=m +# CONFIG_P54_SPI_DEFAULT_EEPROM is not set +CONFIG_P54_LEDS=y +CONFIG_WLAN_VENDOR_MARVELL=y +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_USB=m +CONFIG_LIBERTAS_CS=m +CONFIG_LIBERTAS_SDIO=m +CONFIG_LIBERTAS_SPI=m +# CONFIG_LIBERTAS_DEBUG is not set +CONFIG_LIBERTAS_MESH=y +CONFIG_LIBERTAS_THINFIRM=m +# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set +CONFIG_LIBERTAS_THINFIRM_USB=m +CONFIG_MWIFIEX=m +CONFIG_MWIFIEX_SDIO=m +CONFIG_MWIFIEX_PCIE=m +CONFIG_MWIFIEX_USB=m +CONFIG_MWL8K=m +CONFIG_WLAN_VENDOR_MEDIATEK=y +CONFIG_MT7601U=m +CONFIG_MT76_CORE=m +CONFIG_MT76_LEDS=y +CONFIG_MT76_USB=m +CONFIG_MT76_SDIO=m +CONFIG_MT76x02_LIB=m +CONFIG_MT76x02_USB=m +CONFIG_MT76_CONNAC_LIB=m +CONFIG_MT76x0_COMMON=m +CONFIG_MT76x0U=m +CONFIG_MT76x0E=m +CONFIG_MT76x2_COMMON=m +CONFIG_MT76x2E=m +CONFIG_MT76x2U=m +CONFIG_MT7603E=m +CONFIG_MT7615_COMMON=m +CONFIG_MT7615E=m +CONFIG_MT7663_USB_SDIO_COMMON=m +CONFIG_MT7663U=m +CONFIG_MT7663S=m +CONFIG_MT7915E=m +CONFIG_MT7921E=m +CONFIG_WLAN_VENDOR_MICROCHIP=y +CONFIG_WILC1000=m +CONFIG_WILC1000_SDIO=m +CONFIG_WILC1000_SPI=m +CONFIG_WILC1000_HW_OOB_INTR=y +CONFIG_WLAN_VENDOR_RALINK=y +CONFIG_RT2X00=m +CONFIG_RT2400PCI=m +CONFIG_RT2500PCI=m +CONFIG_RT61PCI=m +CONFIG_RT2800PCI=m +CONFIG_RT2800PCI_RT33XX=y +CONFIG_RT2800PCI_RT35XX=y +CONFIG_RT2800PCI_RT53XX=y +CONFIG_RT2800PCI_RT3290=y +CONFIG_RT2500USB=m +CONFIG_RT73USB=m +CONFIG_RT2800USB=m +CONFIG_RT2800USB_RT33XX=y +CONFIG_RT2800USB_RT35XX=y +CONFIG_RT2800USB_RT3573=y +CONFIG_RT2800USB_RT53XX=y +CONFIG_RT2800USB_RT55XX=y +CONFIG_RT2800USB_UNKNOWN=y +CONFIG_RT2800_LIB=m +CONFIG_RT2800_LIB_MMIO=m +CONFIG_RT2X00_LIB_MMIO=m +CONFIG_RT2X00_LIB_PCI=m +CONFIG_RT2X00_LIB_USB=m +CONFIG_RT2X00_LIB=m +CONFIG_RT2X00_LIB_FIRMWARE=y +CONFIG_RT2X00_LIB_CRYPTO=y +CONFIG_RT2X00_LIB_LEDS=y +# CONFIG_RT2X00_LIB_DEBUGFS is not set +# CONFIG_RT2X00_DEBUG is not set +CONFIG_WLAN_VENDOR_REALTEK=y +CONFIG_RTL8180=m +CONFIG_RTL8187=m +CONFIG_RTL8187_LEDS=y +CONFIG_RTL_CARDS=m +CONFIG_RTL8192CE=m +CONFIG_RTL8192SE=m +CONFIG_RTL8192DE=m +CONFIG_RTL8723AE=m +CONFIG_RTL8723BE=m +CONFIG_RTL8188EE=m +CONFIG_RTL8192EE=m +CONFIG_RTL8821AE=m +CONFIG_RTL8192CU=m +CONFIG_RTLWIFI=m +CONFIG_RTLWIFI_PCI=m +CONFIG_RTLWIFI_USB=m +# CONFIG_RTLWIFI_DEBUG is not set +CONFIG_RTL8192C_COMMON=m +CONFIG_RTL8723_COMMON=m +CONFIG_RTLBTCOEXIST=m +CONFIG_RTL8XXXU=m +CONFIG_RTL8XXXU_UNTESTED=y +CONFIG_RTW88=m +CONFIG_RTW88_CORE=m +CONFIG_RTW88_PCI=m +CONFIG_RTW88_8822B=m +CONFIG_RTW88_8822C=m +CONFIG_RTW88_8723D=m +CONFIG_RTW88_8822BE=m +CONFIG_RTW88_8822CE=m +CONFIG_RTW88_8723DE=m +# CONFIG_RTW88_8821CE is not set +CONFIG_RTW88_DEBUG=y +CONFIG_RTW88_DEBUGFS=y +CONFIG_WLAN_VENDOR_RSI=y +CONFIG_RSI_91X=m +# CONFIG_RSI_DEBUGFS is not set +CONFIG_RSI_SDIO=m +CONFIG_RSI_USB=m +CONFIG_RSI_COEX=y +CONFIG_WLAN_VENDOR_ST=y +CONFIG_CW1200=m +CONFIG_CW1200_WLAN_SDIO=m +CONFIG_CW1200_WLAN_SPI=m +CONFIG_WLAN_VENDOR_TI=y +CONFIG_WL1251=m +CONFIG_WL1251_SPI=m +CONFIG_WL1251_SDIO=m +CONFIG_WL12XX=m +CONFIG_WL18XX=m +CONFIG_WLCORE=m +CONFIG_WLCORE_SDIO=m +CONFIG_WILINK_PLATFORM_DATA=y +CONFIG_WLAN_VENDOR_ZYDAS=y +CONFIG_USB_ZD1201=m +CONFIG_ZD1211RW=m +# CONFIG_ZD1211RW_DEBUG is not set +CONFIG_WLAN_VENDOR_QUANTENNA=y +CONFIG_QTNFMAC=m +CONFIG_QTNFMAC_PCIE=m +CONFIG_PCMCIA_RAYCS=m +CONFIG_PCMCIA_WL3501=m +CONFIG_MAC80211_HWSIM=m +CONFIG_USB_NET_RNDIS_WLAN=m +CONFIG_VIRT_WIFI=m +CONFIG_WAN=y +CONFIG_LANMEDIA=m +CONFIG_HDLC=m +CONFIG_HDLC_RAW=m +CONFIG_HDLC_RAW_ETH=m +CONFIG_HDLC_CISCO=m +CONFIG_HDLC_FR=m +CONFIG_HDLC_PPP=m +CONFIG_HDLC_X25=m +CONFIG_PCI200SYN=m +CONFIG_WANXL=m +CONFIG_PC300TOO=m +CONFIG_FARSYNC=m +CONFIG_LAPBETHER=m +CONFIG_IEEE802154_DRIVERS=m +CONFIG_IEEE802154_FAKELB=m +CONFIG_IEEE802154_AT86RF230=m +CONFIG_IEEE802154_AT86RF230_DEBUGFS=y +CONFIG_IEEE802154_MRF24J40=m +CONFIG_IEEE802154_CC2520=m +CONFIG_IEEE802154_ATUSB=m +CONFIG_IEEE802154_ADF7242=m +CONFIG_IEEE802154_CA8210=m +CONFIG_IEEE802154_CA8210_DEBUGFS=y +CONFIG_IEEE802154_MCR20A=m +CONFIG_IEEE802154_HWSIM=m + +# +# Wireless WAN +# +# CONFIG_WWAN is not set +# end of Wireless WAN + +CONFIG_XEN_NETDEV_FRONTEND=y +CONFIG_XEN_NETDEV_BACKEND=m +CONFIG_VMXNET3=m +CONFIG_FUJITSU_ES=m +CONFIG_HYPERV_NET=m +CONFIG_NETDEVSIM=m +CONFIG_NET_FAILOVER=m +CONFIG_ISDN=y +CONFIG_ISDN_CAPI=y +CONFIG_CAPI_TRACE=y +CONFIG_ISDN_CAPI_MIDDLEWARE=y +CONFIG_MISDN=m +CONFIG_MISDN_DSP=m +CONFIG_MISDN_L1OIP=m + +# +# mISDN hardware drivers +# +CONFIG_MISDN_HFCPCI=m +CONFIG_MISDN_HFCMULTI=m +CONFIG_MISDN_HFCUSB=m +CONFIG_MISDN_AVMFRITZ=m +CONFIG_MISDN_SPEEDFAX=m +CONFIG_MISDN_INFINEON=m +CONFIG_MISDN_W6692=m +CONFIG_MISDN_NETJET=m +CONFIG_MISDN_HDLC=m +CONFIG_MISDN_IPAC=m +CONFIG_MISDN_ISAR=m + +# +# Input device support +# +CONFIG_INPUT=y +CONFIG_INPUT_LEDS=y +CONFIG_INPUT_FF_MEMLESS=y +CONFIG_INPUT_SPARSEKMAP=y +CONFIG_INPUT_MATRIXKMAP=y + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +CONFIG_INPUT_JOYDEV=y +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ADC=m +CONFIG_KEYBOARD_ADP5520=y +CONFIG_KEYBOARD_ADP5588=y +CONFIG_KEYBOARD_ADP5589=y +CONFIG_KEYBOARD_APPLESPI=y +CONFIG_KEYBOARD_ATKBD=y +CONFIG_KEYBOARD_QT1050=y +CONFIG_KEYBOARD_QT1070=y +CONFIG_KEYBOARD_QT2160=y +CONFIG_KEYBOARD_DLINK_DIR685=y +CONFIG_KEYBOARD_LKKBD=y +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_GPIO_POLLED=y +CONFIG_KEYBOARD_TCA6416=y +CONFIG_KEYBOARD_TCA8418=y +CONFIG_KEYBOARD_MATRIX=y +CONFIG_KEYBOARD_LM8323=y +CONFIG_KEYBOARD_LM8333=y +CONFIG_KEYBOARD_MAX7359=y +CONFIG_KEYBOARD_MCS=y +CONFIG_KEYBOARD_MPR121=y +CONFIG_KEYBOARD_NEWTON=y +CONFIG_KEYBOARD_OPENCORES=y +CONFIG_KEYBOARD_SAMSUNG=y +CONFIG_KEYBOARD_STOWAWAY=y +CONFIG_KEYBOARD_SUNKBD=y +CONFIG_KEYBOARD_TM2_TOUCHKEY=y +CONFIG_KEYBOARD_TWL4030=y +CONFIG_KEYBOARD_XTKBD=y +CONFIG_KEYBOARD_CROS_EC=m +CONFIG_KEYBOARD_MTK_PMIC=m +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_BYD=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y +CONFIG_MOUSE_PS2_CYPRESS=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +CONFIG_MOUSE_PS2_ELANTECH=y +CONFIG_MOUSE_PS2_ELANTECH_SMBUS=y +CONFIG_MOUSE_PS2_SENTELIC=y +CONFIG_MOUSE_PS2_TOUCHKIT=y +CONFIG_MOUSE_PS2_FOCALTECH=y +CONFIG_MOUSE_PS2_VMMOUSE=y +CONFIG_MOUSE_PS2_SMBUS=y +CONFIG_MOUSE_SERIAL=y +CONFIG_MOUSE_APPLETOUCH=y +CONFIG_MOUSE_BCM5974=y +CONFIG_MOUSE_CYAPA=y +CONFIG_MOUSE_ELAN_I2C=y +CONFIG_MOUSE_ELAN_I2C_I2C=y +CONFIG_MOUSE_ELAN_I2C_SMBUS=y +CONFIG_MOUSE_VSXXXAA=y +CONFIG_MOUSE_GPIO=y +CONFIG_MOUSE_SYNAPTICS_I2C=y +CONFIG_MOUSE_SYNAPTICS_USB=y +CONFIG_INPUT_JOYSTICK=y +CONFIG_JOYSTICK_ANALOG=m +CONFIG_JOYSTICK_A3D=m +# CONFIG_JOYSTICK_ADC is not set +CONFIG_JOYSTICK_ADI=m +CONFIG_JOYSTICK_COBRA=m +CONFIG_JOYSTICK_GF2K=m +CONFIG_JOYSTICK_GRIP=m +CONFIG_JOYSTICK_GRIP_MP=m +CONFIG_JOYSTICK_GUILLEMOT=m +CONFIG_JOYSTICK_INTERACT=m +CONFIG_JOYSTICK_SIDEWINDER=m +CONFIG_JOYSTICK_TMDC=m +CONFIG_JOYSTICK_IFORCE=m +CONFIG_JOYSTICK_IFORCE_USB=m +CONFIG_JOYSTICK_IFORCE_232=m +CONFIG_JOYSTICK_WARRIOR=m +CONFIG_JOYSTICK_MAGELLAN=m +CONFIG_JOYSTICK_SPACEORB=m +CONFIG_JOYSTICK_SPACEBALL=m +CONFIG_JOYSTICK_STINGER=m +CONFIG_JOYSTICK_TWIDJOY=m +CONFIG_JOYSTICK_ZHENHUA=m +CONFIG_JOYSTICK_DB9=m +CONFIG_JOYSTICK_GAMECON=m +CONFIG_JOYSTICK_TURBOGRAFX=m +CONFIG_JOYSTICK_AS5011=m +CONFIG_JOYSTICK_JOYDUMP=m +CONFIG_JOYSTICK_XPAD=m +CONFIG_JOYSTICK_XPAD_FF=y +CONFIG_JOYSTICK_XPAD_LEDS=y +CONFIG_JOYSTICK_WALKERA0701=m +CONFIG_JOYSTICK_PSXPAD_SPI=m +CONFIG_JOYSTICK_PSXPAD_SPI_FF=y +CONFIG_JOYSTICK_PXRC=m +# CONFIG_JOYSTICK_QWIIC is not set +CONFIG_JOYSTICK_FSIA6B=m +CONFIG_INPUT_TABLET=y +CONFIG_TABLET_USB_ACECAD=m +CONFIG_TABLET_USB_AIPTEK=m +CONFIG_TABLET_USB_HANWANG=m +CONFIG_TABLET_USB_KBTAB=m +CONFIG_TABLET_USB_PEGASUS=m +CONFIG_TABLET_SERIAL_WACOM4=m +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_88PM860X=m +CONFIG_TOUCHSCREEN_ADS7846=m +CONFIG_TOUCHSCREEN_AD7877=m +CONFIG_TOUCHSCREEN_AD7879=m +CONFIG_TOUCHSCREEN_AD7879_I2C=m +CONFIG_TOUCHSCREEN_AD7879_SPI=m +CONFIG_TOUCHSCREEN_ADC=m +CONFIG_TOUCHSCREEN_ATMEL_MXT=m +CONFIG_TOUCHSCREEN_ATMEL_MXT_T37=y +CONFIG_TOUCHSCREEN_AUO_PIXCIR=m +CONFIG_TOUCHSCREEN_BU21013=m +CONFIG_TOUCHSCREEN_BU21029=m +CONFIG_TOUCHSCREEN_CHIPONE_ICN8505=m +# CONFIG_TOUCHSCREEN_CY8CTMA140 is not set +CONFIG_TOUCHSCREEN_CY8CTMG110=m +CONFIG_TOUCHSCREEN_CYTTSP_CORE=m +CONFIG_TOUCHSCREEN_CYTTSP_I2C=m +CONFIG_TOUCHSCREEN_CYTTSP_SPI=m +CONFIG_TOUCHSCREEN_CYTTSP4_CORE=m +CONFIG_TOUCHSCREEN_CYTTSP4_I2C=m +CONFIG_TOUCHSCREEN_CYTTSP4_SPI=m +CONFIG_TOUCHSCREEN_DA9034=m +CONFIG_TOUCHSCREEN_DA9052=m +CONFIG_TOUCHSCREEN_DYNAPRO=m +CONFIG_TOUCHSCREEN_HAMPSHIRE=m +CONFIG_TOUCHSCREEN_EETI=m +CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m +CONFIG_TOUCHSCREEN_EXC3000=m +CONFIG_TOUCHSCREEN_FUJITSU=m +CONFIG_TOUCHSCREEN_GOODIX=m +CONFIG_TOUCHSCREEN_HIDEEP=m +# CONFIG_TOUCHSCREEN_HYCON_HY46XX is not set +CONFIG_TOUCHSCREEN_ILI210X=m +# CONFIG_TOUCHSCREEN_ILITEK is not set +CONFIG_TOUCHSCREEN_S6SY761=m +CONFIG_TOUCHSCREEN_GUNZE=m +CONFIG_TOUCHSCREEN_EKTF2127=m +CONFIG_TOUCHSCREEN_ELAN=y +CONFIG_TOUCHSCREEN_ELO=m +CONFIG_TOUCHSCREEN_WACOM_W8001=m +CONFIG_TOUCHSCREEN_WACOM_I2C=m +CONFIG_TOUCHSCREEN_MAX11801=m +CONFIG_TOUCHSCREEN_MCS5000=m +CONFIG_TOUCHSCREEN_MMS114=m +CONFIG_TOUCHSCREEN_MELFAS_MIP4=m +# CONFIG_TOUCHSCREEN_MSG2638 is not set +CONFIG_TOUCHSCREEN_MTOUCH=m +CONFIG_TOUCHSCREEN_INEXIO=m +CONFIG_TOUCHSCREEN_MK712=m +CONFIG_TOUCHSCREEN_PENMOUNT=m +CONFIG_TOUCHSCREEN_EDT_FT5X06=m +CONFIG_TOUCHSCREEN_TOUCHRIGHT=m +CONFIG_TOUCHSCREEN_TOUCHWIN=m +CONFIG_TOUCHSCREEN_TI_AM335X_TSC=m +CONFIG_TOUCHSCREEN_UCB1400=m +CONFIG_TOUCHSCREEN_PIXCIR=m +CONFIG_TOUCHSCREEN_WDT87XX_I2C=m +CONFIG_TOUCHSCREEN_WM831X=m +CONFIG_TOUCHSCREEN_WM97XX=m +CONFIG_TOUCHSCREEN_WM9705=y +CONFIG_TOUCHSCREEN_WM9712=y +CONFIG_TOUCHSCREEN_WM9713=y +CONFIG_TOUCHSCREEN_USB_COMPOSITE=m +CONFIG_TOUCHSCREEN_MC13783=m +CONFIG_TOUCHSCREEN_USB_EGALAX=y +CONFIG_TOUCHSCREEN_USB_PANJIT=y +CONFIG_TOUCHSCREEN_USB_3M=y +CONFIG_TOUCHSCREEN_USB_ITM=y +CONFIG_TOUCHSCREEN_USB_ETURBO=y +CONFIG_TOUCHSCREEN_USB_GUNZE=y +CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y +CONFIG_TOUCHSCREEN_USB_IRTOUCH=y +CONFIG_TOUCHSCREEN_USB_IDEALTEK=y +CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y +CONFIG_TOUCHSCREEN_USB_GOTOP=y +CONFIG_TOUCHSCREEN_USB_JASTEC=y +CONFIG_TOUCHSCREEN_USB_ELO=y +CONFIG_TOUCHSCREEN_USB_E2I=y +CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y +CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y +CONFIG_TOUCHSCREEN_USB_NEXIO=y +CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y +CONFIG_TOUCHSCREEN_TOUCHIT213=m +CONFIG_TOUCHSCREEN_TSC_SERIO=m +CONFIG_TOUCHSCREEN_TSC200X_CORE=m +CONFIG_TOUCHSCREEN_TSC2004=m +CONFIG_TOUCHSCREEN_TSC2005=m +CONFIG_TOUCHSCREEN_TSC2007=m +CONFIG_TOUCHSCREEN_TSC2007_IIO=y +CONFIG_TOUCHSCREEN_PCAP=m +CONFIG_TOUCHSCREEN_RM_TS=m +CONFIG_TOUCHSCREEN_SILEAD=m +CONFIG_TOUCHSCREEN_SIS_I2C=m +CONFIG_TOUCHSCREEN_ST1232=m +CONFIG_TOUCHSCREEN_STMFTS=m +CONFIG_TOUCHSCREEN_SUR40=m +CONFIG_TOUCHSCREEN_SURFACE3_SPI=m +CONFIG_TOUCHSCREEN_SX8654=m +CONFIG_TOUCHSCREEN_TPS6507X=m +CONFIG_TOUCHSCREEN_ZET6223=m +CONFIG_TOUCHSCREEN_ZFORCE=m +CONFIG_TOUCHSCREEN_ROHM_BU21023=m +CONFIG_TOUCHSCREEN_IQS5XX=m +# CONFIG_TOUCHSCREEN_ZINITIX is not set +CONFIG_INPUT_MISC=y +CONFIG_INPUT_88PM860X_ONKEY=y +CONFIG_INPUT_88PM80X_ONKEY=m +CONFIG_INPUT_AD714X=y +CONFIG_INPUT_AD714X_I2C=y +CONFIG_INPUT_AD714X_SPI=y +CONFIG_INPUT_ARIZONA_HAPTICS=m +CONFIG_INPUT_BMA150=y +CONFIG_INPUT_E3X0_BUTTON=y +CONFIG_INPUT_PCSPKR=y +CONFIG_INPUT_MAX77693_HAPTIC=y +CONFIG_INPUT_MAX8925_ONKEY=y +CONFIG_INPUT_MAX8997_HAPTIC=y +CONFIG_INPUT_MC13783_PWRBUTTON=m +CONFIG_INPUT_MMA8450=y +CONFIG_INPUT_APANEL=y +CONFIG_INPUT_GPIO_BEEPER=y +CONFIG_INPUT_GPIO_DECODER=y +CONFIG_INPUT_GPIO_VIBRA=y +CONFIG_INPUT_ATLAS_BTNS=y +CONFIG_INPUT_ATI_REMOTE2=y +CONFIG_INPUT_KEYSPAN_REMOTE=y +CONFIG_INPUT_KXTJ9=y +CONFIG_INPUT_POWERMATE=y +CONFIG_INPUT_YEALINK=y +CONFIG_INPUT_CM109=y +CONFIG_INPUT_REGULATOR_HAPTIC=y +CONFIG_INPUT_RETU_PWRBUTTON=m +CONFIG_INPUT_AXP20X_PEK=m +CONFIG_INPUT_TWL4030_PWRBUTTON=y +CONFIG_INPUT_TWL4030_VIBRA=y +CONFIG_INPUT_TWL6040_VIBRA=y +CONFIG_INPUT_UINPUT=y +CONFIG_INPUT_PALMAS_PWRBUTTON=y +CONFIG_INPUT_PCF50633_PMU=m +CONFIG_INPUT_PCF8574=y +CONFIG_INPUT_PWM_BEEPER=y +CONFIG_INPUT_PWM_VIBRA=y +CONFIG_INPUT_GPIO_ROTARY_ENCODER=y +CONFIG_INPUT_DA7280_HAPTICS=m +CONFIG_INPUT_DA9052_ONKEY=y +CONFIG_INPUT_DA9055_ONKEY=y +CONFIG_INPUT_DA9063_ONKEY=y +CONFIG_INPUT_WM831X_ON=y +CONFIG_INPUT_PCAP=y +CONFIG_INPUT_ADXL34X=y +CONFIG_INPUT_ADXL34X_I2C=y +CONFIG_INPUT_ADXL34X_SPI=y +CONFIG_INPUT_IMS_PCU=y +CONFIG_INPUT_IQS269A=m +# CONFIG_INPUT_IQS626A is not set +CONFIG_INPUT_CMA3000=y +CONFIG_INPUT_CMA3000_I2C=y +CONFIG_INPUT_XEN_KBDDEV_FRONTEND=y +CONFIG_INPUT_IDEAPAD_SLIDEBAR=y +CONFIG_INPUT_SOC_BUTTON_ARRAY=y +CONFIG_INPUT_DRV260X_HAPTICS=y +CONFIG_INPUT_DRV2665_HAPTICS=y +CONFIG_INPUT_DRV2667_HAPTICS=y +CONFIG_INPUT_RAVE_SP_PWRBUTTON=m +CONFIG_RMI4_CORE=y +CONFIG_RMI4_I2C=y +CONFIG_RMI4_SPI=y +CONFIG_RMI4_SMB=y +CONFIG_RMI4_F03=y +CONFIG_RMI4_F03_SERIO=y +CONFIG_RMI4_2D_SENSOR=y +CONFIG_RMI4_F11=y +CONFIG_RMI4_F12=y +CONFIG_RMI4_F30=y +CONFIG_RMI4_F34=y +CONFIG_RMI4_F3A=y +CONFIG_RMI4_F55=y + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=y +CONFIG_SERIO_CT82C710=y +CONFIG_SERIO_PARKBD=y +CONFIG_SERIO_PCIPS2=y +CONFIG_SERIO_LIBPS2=y +CONFIG_SERIO_RAW=y +CONFIG_SERIO_ALTERA_PS2=y +CONFIG_SERIO_PS2MULT=y +CONFIG_SERIO_ARC_PS2=y +CONFIG_HYPERV_KEYBOARD=m +CONFIG_SERIO_GPIO_PS2=m +CONFIG_USERIO=y +CONFIG_GAMEPORT=y +CONFIG_GAMEPORT_NS558=y +CONFIG_GAMEPORT_L4=y +CONFIG_GAMEPORT_EMU10K1=y +CONFIG_GAMEPORT_FM801=y +# end of Hardware I/O ports +# end of Input device support + +# +# Character devices +# +CONFIG_TTY=y +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_VT_CONSOLE_SLEEP=y +CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=0 +CONFIG_LDISC_AUTOLOAD=y + +# +# Serial drivers +# +CONFIG_SERIAL_EARLYCON=y +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set +CONFIG_SERIAL_8250_PNP=y +# CONFIG_SERIAL_8250_16550A_VARIANTS is not set +CONFIG_SERIAL_8250_FINTEK=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_DMA=y +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_EXAR=m +CONFIG_SERIAL_8250_CS=m +CONFIG_SERIAL_8250_MEN_MCB=m +CONFIG_SERIAL_8250_NR_UARTS=48 +CONFIG_SERIAL_8250_RUNTIME_UARTS=32 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_8250_DWLIB=y +CONFIG_SERIAL_8250_DW=m +CONFIG_SERIAL_8250_RT288X=y +CONFIG_SERIAL_8250_LPSS=m +CONFIG_SERIAL_8250_MID=m + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_KGDB_NMI=y +CONFIG_SERIAL_MAX3100=m +CONFIG_SERIAL_MAX310X=y +CONFIG_SERIAL_UARTLITE=m +CONFIG_SERIAL_UARTLITE_NR_UARTS=1 +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_CONSOLE_POLL=y +CONFIG_SERIAL_JSM=m +# CONFIG_SERIAL_LANTIQ is not set +CONFIG_SERIAL_SCCNXP=y +CONFIG_SERIAL_SCCNXP_CONSOLE=y +CONFIG_SERIAL_SC16IS7XX_CORE=m +CONFIG_SERIAL_SC16IS7XX=m +CONFIG_SERIAL_SC16IS7XX_I2C=y +CONFIG_SERIAL_SC16IS7XX_SPI=y +# CONFIG_SERIAL_BCM63XX is not set +CONFIG_SERIAL_ALTERA_JTAGUART=m +CONFIG_SERIAL_ALTERA_UART=m +CONFIG_SERIAL_ALTERA_UART_MAXPORTS=4 +CONFIG_SERIAL_ALTERA_UART_BAUDRATE=115200 +CONFIG_SERIAL_ARC=m +CONFIG_SERIAL_ARC_NR_PORTS=1 +CONFIG_SERIAL_RP2=m +CONFIG_SERIAL_RP2_NR_UARTS=32 +CONFIG_SERIAL_FSL_LPUART=m +CONFIG_SERIAL_FSL_LINFLEXUART=m +CONFIG_SERIAL_MEN_Z135=m +# CONFIG_SERIAL_SPRD is not set +# end of Serial drivers + +CONFIG_SERIAL_MCTRL_GPIO=y +CONFIG_SERIAL_NONSTANDARD=y +CONFIG_MOXA_INTELLIO=m +CONFIG_MOXA_SMARTIO=m +CONFIG_SYNCLINK_GT=m +CONFIG_N_HDLC=m +CONFIG_N_GSM=m +CONFIG_NOZOMI=m +CONFIG_NULL_TTY=y +CONFIG_HVC_DRIVER=y +CONFIG_HVC_IRQ=y +CONFIG_HVC_XEN=y +CONFIG_HVC_XEN_FRONTEND=y +CONFIG_SERIAL_DEV_BUS=y +CONFIG_SERIAL_DEV_CTRL_TTYPORT=y +CONFIG_TTY_PRINTK=y +CONFIG_TTY_PRINTK_LEVEL=6 +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +CONFIG_PPDEV=m +CONFIG_VIRTIO_CONSOLE=y +CONFIG_IPMI_HANDLER=m +CONFIG_IPMI_DMI_DECODE=y +CONFIG_IPMI_PLAT_DATA=y +# CONFIG_IPMI_PANIC_EVENT is not set +CONFIG_IPMI_DEVICE_INTERFACE=m +CONFIG_IPMI_SI=m +CONFIG_IPMI_SSIF=m +CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_TIMERIOMEM=m +CONFIG_HW_RANDOM_INTEL=m +CONFIG_HW_RANDOM_AMD=m +# CONFIG_HW_RANDOM_BA431 is not set +CONFIG_HW_RANDOM_VIA=m +CONFIG_HW_RANDOM_VIRTIO=m +# CONFIG_HW_RANDOM_XIPHERA is not set +CONFIG_APPLICOM=m + +# +# PCMCIA character devices +# +CONFIG_SYNCLINK_CS=m +CONFIG_CARDMAN_4000=m +CONFIG_CARDMAN_4040=m +CONFIG_SCR24X=m +CONFIG_IPWIRELESS=m +# end of PCMCIA character devices + +CONFIG_MWAVE=m +CONFIG_DEVMEM=y +CONFIG_NVRAM=m +CONFIG_DEVPORT=y +CONFIG_HPET=y +CONFIG_HPET_MMAP=y +CONFIG_HPET_MMAP_DEFAULT=y +CONFIG_HANGCHECK_TIMER=m +CONFIG_UV_MMTIMER=m +CONFIG_TCG_TPM=y +CONFIG_HW_RANDOM_TPM=y +CONFIG_TCG_TIS_CORE=y +CONFIG_TCG_TIS=y +CONFIG_TCG_TIS_SPI=m +# CONFIG_TCG_TIS_SPI_CR50 is not set +# CONFIG_TCG_TIS_I2C_CR50 is not set +CONFIG_TCG_TIS_I2C_ATMEL=m +CONFIG_TCG_TIS_I2C_INFINEON=m +CONFIG_TCG_TIS_I2C_NUVOTON=m +CONFIG_TCG_NSC=m +CONFIG_TCG_ATMEL=m +CONFIG_TCG_INFINEON=m +CONFIG_TCG_XEN=m +CONFIG_TCG_CRB=y +CONFIG_TCG_VTPM_PROXY=m +CONFIG_TCG_TIS_ST33ZP24=m +CONFIG_TCG_TIS_ST33ZP24_I2C=m +CONFIG_TCG_TIS_ST33ZP24_SPI=m +CONFIG_TELCLOCK=m +CONFIG_XILLYBUS_CLASS=m +CONFIG_XILLYBUS=m +CONFIG_XILLYBUS_PCIE=m +# CONFIG_XILLYUSB is not set +CONFIG_RANDOM_TRUST_CPU=y +CONFIG_RANDOM_TRUST_BOOTLOADER=y +# end of Character devices + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_ACPI_I2C_OPREGION=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_MUX=y + +# +# Multiplexer I2C Chip support +# +CONFIG_I2C_MUX_GPIO=m +CONFIG_I2C_MUX_LTC4306=m +CONFIG_I2C_MUX_PCA9541=m +CONFIG_I2C_MUX_PCA954x=m +CONFIG_I2C_MUX_REG=m +CONFIG_I2C_MUX_MLXCPLD=m +# end of Multiplexer I2C Chip support + +CONFIG_I2C_HELPER_AUTO=y +CONFIG_I2C_SMBUS=m +CONFIG_I2C_ALGOBIT=m +CONFIG_I2C_ALGOPCA=m + +# +# I2C Hardware Bus support +# + +# +# PC SMBus host controller drivers +# +CONFIG_I2C_ALI1535=m +CONFIG_I2C_ALI1563=m +CONFIG_I2C_ALI15X3=m +CONFIG_I2C_AMD756=m +CONFIG_I2C_AMD756_S4882=m +CONFIG_I2C_AMD8111=m +CONFIG_I2C_AMD_MP2=m +CONFIG_I2C_I801=m +CONFIG_I2C_ISCH=m +CONFIG_I2C_ISMT=m +CONFIG_I2C_PIIX4=m +CONFIG_I2C_CHT_WC=m +CONFIG_I2C_NFORCE2=m +CONFIG_I2C_NFORCE2_S4985=m +CONFIG_I2C_NVIDIA_GPU=m +CONFIG_I2C_SIS5595=m +CONFIG_I2C_SIS630=m +CONFIG_I2C_SIS96X=m +CONFIG_I2C_VIA=m +CONFIG_I2C_VIAPRO=m + +# +# ACPI drivers +# +CONFIG_I2C_SCMI=m + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +CONFIG_I2C_CBUS_GPIO=m +CONFIG_I2C_DESIGNWARE_CORE=y +# CONFIG_I2C_DESIGNWARE_SLAVE is not set +CONFIG_I2C_DESIGNWARE_PLATFORM=y +CONFIG_I2C_DESIGNWARE_BAYTRAIL=y +CONFIG_I2C_DESIGNWARE_PCI=m +# CONFIG_I2C_EMEV2 is not set +CONFIG_I2C_GPIO=m +# CONFIG_I2C_GPIO_FAULT_INJECTOR is not set +CONFIG_I2C_KEMPLD=m +CONFIG_I2C_OCORES=m +CONFIG_I2C_PCA_PLATFORM=m +CONFIG_I2C_SIMTEC=m +CONFIG_I2C_XILINX=m + +# +# External I2C/SMBus adapter drivers +# +CONFIG_I2C_DIOLAN_U2C=m +CONFIG_I2C_DLN2=m +# CONFIG_I2C_CP2615 is not set +CONFIG_I2C_PARPORT=m +CONFIG_I2C_ROBOTFUZZ_OSIF=m +CONFIG_I2C_TAOS_EVM=m +CONFIG_I2C_TINY_USB=m +CONFIG_I2C_VIPERBOARD=m + +# +# Other I2C/SMBus bus drivers +# +CONFIG_I2C_MLXCPLD=m +CONFIG_I2C_CROS_EC_TUNNEL=m +# CONFIG_I2C_VIRTIO is not set +# end of I2C Hardware Bus support + +CONFIG_I2C_STUB=m +# CONFIG_I2C_SLAVE is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# end of I2C support + +CONFIG_I3C=m +CONFIG_CDNS_I3C_MASTER=m +CONFIG_DW_I3C_MASTER=m +# CONFIG_SVC_I3C_MASTER is not set +# CONFIG_MIPI_I3C_HCI is not set +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y +CONFIG_SPI_MEM=y + +# +# SPI Master Controller Drivers +# +CONFIG_SPI_ALTERA=m +CONFIG_SPI_ALTERA_CORE=m +# CONFIG_SPI_ALTERA_DFL is not set +CONFIG_SPI_AXI_SPI_ENGINE=m +CONFIG_SPI_BITBANG=m +CONFIG_SPI_BUTTERFLY=m +CONFIG_SPI_CADENCE=m +CONFIG_SPI_DESIGNWARE=m +# CONFIG_SPI_DW_DMA is not set +CONFIG_SPI_DW_PCI=m +CONFIG_SPI_DW_MMIO=m +CONFIG_SPI_DLN2=m +CONFIG_SPI_NXP_FLEXSPI=m +CONFIG_SPI_GPIO=m +CONFIG_SPI_LM70_LLP=m +# CONFIG_SPI_LANTIQ_SSC is not set +CONFIG_SPI_OC_TINY=m +CONFIG_SPI_PXA2XX=m +CONFIG_SPI_PXA2XX_PCI=m +# CONFIG_SPI_ROCKCHIP is not set +CONFIG_SPI_SC18IS602=m +CONFIG_SPI_SIFIVE=m +CONFIG_SPI_MXIC=m +CONFIG_SPI_XCOMM=m +# CONFIG_SPI_XILINX is not set +CONFIG_SPI_ZYNQMP_GQSPI=m +# CONFIG_SPI_AMD is not set + +# +# SPI Multiplexer support +# +# CONFIG_SPI_MUX is not set + +# +# SPI Protocol Masters +# +CONFIG_SPI_SPIDEV=m +CONFIG_SPI_LOOPBACK_TEST=m +CONFIG_SPI_TLE62X0=m +CONFIG_SPI_SLAVE=y +CONFIG_SPI_SLAVE_TIME=m +CONFIG_SPI_SLAVE_SYSTEM_CONTROL=m +CONFIG_SPI_DYNAMIC=y +CONFIG_SPMI=m +# CONFIG_SPMI_HISI3670 is not set +CONFIG_HSI=m +CONFIG_HSI_BOARDINFO=y + +# +# HSI controllers +# + +# +# HSI clients +# +CONFIG_HSI_CHAR=m +CONFIG_PPS=y +# CONFIG_PPS_DEBUG is not set + +# +# PPS clients support +# +# CONFIG_PPS_CLIENT_KTIMER is not set +CONFIG_PPS_CLIENT_LDISC=m +CONFIG_PPS_CLIENT_PARPORT=m +CONFIG_PPS_CLIENT_GPIO=m + +# +# PPS generators support +# + +# +# PTP clock support +# +CONFIG_PTP_1588_CLOCK=y +CONFIG_PTP_1588_CLOCK_OPTIONAL=y +CONFIG_DP83640_PHY=m +# CONFIG_PTP_1588_CLOCK_INES is not set +CONFIG_PTP_1588_CLOCK_KVM=m +# CONFIG_PTP_1588_CLOCK_IDT82P33 is not set +# CONFIG_PTP_1588_CLOCK_IDTCM is not set +# CONFIG_PTP_1588_CLOCK_VMW is not set +# CONFIG_PTP_1588_CLOCK_OCP is not set +# end of PTP clock support + +CONFIG_PINCTRL=y +CONFIG_PINMUX=y +CONFIG_PINCONF=y +CONFIG_GENERIC_PINCONF=y +# CONFIG_DEBUG_PINCTRL is not set +CONFIG_PINCTRL_AMD=y +# CONFIG_PINCTRL_DA9062 is not set +CONFIG_PINCTRL_MCP23S08_I2C=m +CONFIG_PINCTRL_MCP23S08_SPI=m +CONFIG_PINCTRL_MCP23S08=m +CONFIG_PINCTRL_SX150X=y +CONFIG_PINCTRL_BAYTRAIL=y +CONFIG_PINCTRL_CHERRYVIEW=y +# CONFIG_PINCTRL_LYNXPOINT is not set +CONFIG_PINCTRL_INTEL=y +# CONFIG_PINCTRL_ALDERLAKE is not set +CONFIG_PINCTRL_BROXTON=m +CONFIG_PINCTRL_CANNONLAKE=m +CONFIG_PINCTRL_CEDARFORK=m +CONFIG_PINCTRL_DENVERTON=m +# CONFIG_PINCTRL_ELKHARTLAKE is not set +# CONFIG_PINCTRL_EMMITSBURG is not set +CONFIG_PINCTRL_GEMINILAKE=m +CONFIG_PINCTRL_ICELAKE=m +# CONFIG_PINCTRL_JASPERLAKE is not set +# CONFIG_PINCTRL_LAKEFIELD is not set +CONFIG_PINCTRL_LEWISBURG=m +CONFIG_PINCTRL_SUNRISEPOINT=m +# CONFIG_PINCTRL_TIGERLAKE is not set + +# +# Renesas pinctrl drivers +# +# end of Renesas pinctrl drivers + +CONFIG_PINCTRL_MADERA=m +CONFIG_PINCTRL_CS47L15=y +CONFIG_PINCTRL_CS47L35=y +CONFIG_PINCTRL_CS47L85=y +CONFIG_PINCTRL_CS47L90=y +CONFIG_PINCTRL_CS47L92=y +CONFIG_GPIOLIB=y +CONFIG_GPIOLIB_FASTPATH_LIMIT=512 +CONFIG_GPIO_ACPI=y +CONFIG_GPIOLIB_IRQCHIP=y +# CONFIG_DEBUG_GPIO is not set +CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_CDEV=y +CONFIG_GPIO_CDEV_V1=y +CONFIG_GPIO_GENERIC=m +CONFIG_GPIO_MAX730X=m + +# +# Memory mapped GPIO drivers +# +CONFIG_GPIO_AMDPT=m +CONFIG_GPIO_DWAPB=m +CONFIG_GPIO_EXAR=m +CONFIG_GPIO_GENERIC_PLATFORM=m +CONFIG_GPIO_ICH=m +CONFIG_GPIO_MB86S7X=m +CONFIG_GPIO_MENZ127=m +CONFIG_GPIO_SIOX=m +CONFIG_GPIO_VX855=m +CONFIG_GPIO_AMD_FCH=m +# end of Memory mapped GPIO drivers + +# +# Port-mapped I/O GPIO drivers +# +CONFIG_GPIO_104_DIO_48E=m +CONFIG_GPIO_104_IDIO_16=m +CONFIG_GPIO_104_IDI_48=m +CONFIG_GPIO_F7188X=m +CONFIG_GPIO_GPIO_MM=m +CONFIG_GPIO_IT87=m +CONFIG_GPIO_SCH=m +CONFIG_GPIO_SCH311X=m +CONFIG_GPIO_WINBOND=m +CONFIG_GPIO_WS16C48=m +# end of Port-mapped I/O GPIO drivers + +# +# I2C GPIO expanders +# +CONFIG_GPIO_ADP5588=m +CONFIG_GPIO_MAX7300=m +CONFIG_GPIO_MAX732X=m +CONFIG_GPIO_PCA953X=m +# CONFIG_GPIO_PCA953X_IRQ is not set +# CONFIG_GPIO_PCA9570 is not set +CONFIG_GPIO_PCF857X=m +CONFIG_GPIO_TPIC2810=m +# end of I2C GPIO expanders + +# +# MFD GPIO expanders +# +CONFIG_GPIO_ADP5520=m +CONFIG_GPIO_ARIZONA=m +CONFIG_GPIO_BD9571MWV=m +CONFIG_GPIO_CRYSTAL_COVE=m +CONFIG_GPIO_DA9052=m +CONFIG_GPIO_DA9055=m +CONFIG_GPIO_DLN2=m +CONFIG_GPIO_JANZ_TTL=m +CONFIG_GPIO_KEMPLD=m +CONFIG_GPIO_LP3943=m +CONFIG_GPIO_LP873X=m +CONFIG_GPIO_MADERA=m +CONFIG_GPIO_PALMAS=y +CONFIG_GPIO_RC5T583=y +CONFIG_GPIO_TPS65086=m +CONFIG_GPIO_TPS6586X=y +CONFIG_GPIO_TPS65910=y +CONFIG_GPIO_TPS65912=m +CONFIG_GPIO_TQMX86=m +CONFIG_GPIO_TWL4030=m +CONFIG_GPIO_TWL6040=m +CONFIG_GPIO_UCB1400=m +CONFIG_GPIO_WM831X=m +CONFIG_GPIO_WM8350=m +CONFIG_GPIO_WM8994=m +# end of MFD GPIO expanders + +# +# PCI GPIO expanders +# +CONFIG_GPIO_AMD8111=m +CONFIG_GPIO_ML_IOH=m +CONFIG_GPIO_PCI_IDIO_16=m +CONFIG_GPIO_PCIE_IDIO_24=m +CONFIG_GPIO_RDC321X=m +# end of PCI GPIO expanders + +# +# SPI GPIO expanders +# +CONFIG_GPIO_MAX3191X=m +CONFIG_GPIO_MAX7301=m +CONFIG_GPIO_MC33880=m +CONFIG_GPIO_PISOSR=m +CONFIG_GPIO_XRA1403=m +# end of SPI GPIO expanders + +# +# USB GPIO expanders +# +CONFIG_GPIO_VIPERBOARD=m +# end of USB GPIO expanders + +# +# Virtual GPIO drivers +# +# CONFIG_GPIO_AGGREGATOR is not set +# CONFIG_GPIO_MOCKUP is not set +# CONFIG_GPIO_VIRTIO is not set +# end of Virtual GPIO drivers + +CONFIG_W1=m +CONFIG_W1_CON=y + +# +# 1-wire Bus Masters +# +CONFIG_W1_MASTER_MATROX=m +CONFIG_W1_MASTER_DS2490=m +CONFIG_W1_MASTER_DS2482=m +CONFIG_W1_MASTER_DS1WM=m +CONFIG_W1_MASTER_GPIO=m +CONFIG_W1_MASTER_SGI=m +# end of 1-wire Bus Masters + +# +# 1-wire Slaves +# +CONFIG_W1_SLAVE_THERM=m +CONFIG_W1_SLAVE_SMEM=m +CONFIG_W1_SLAVE_DS2405=m +CONFIG_W1_SLAVE_DS2408=m +CONFIG_W1_SLAVE_DS2408_READBACK=y +CONFIG_W1_SLAVE_DS2413=m +CONFIG_W1_SLAVE_DS2406=m +CONFIG_W1_SLAVE_DS2423=m +CONFIG_W1_SLAVE_DS2805=m +# CONFIG_W1_SLAVE_DS2430 is not set +CONFIG_W1_SLAVE_DS2431=m +CONFIG_W1_SLAVE_DS2433=m +# CONFIG_W1_SLAVE_DS2433_CRC is not set +CONFIG_W1_SLAVE_DS2438=m +CONFIG_W1_SLAVE_DS250X=m +CONFIG_W1_SLAVE_DS2780=m +CONFIG_W1_SLAVE_DS2781=m +CONFIG_W1_SLAVE_DS28E04=m +CONFIG_W1_SLAVE_DS28E17=m +# end of 1-wire Slaves + +CONFIG_POWER_RESET=y +# CONFIG_POWER_RESET_MT6323 is not set +CONFIG_POWER_RESET_RESTART=y +# CONFIG_POWER_RESET_TPS65086 is not set +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +CONFIG_POWER_SUPPLY_HWMON=y +CONFIG_PDA_POWER=m +CONFIG_GENERIC_ADC_BATTERY=m +CONFIG_MAX8925_POWER=m +CONFIG_WM831X_BACKUP=m +CONFIG_WM831X_POWER=m +CONFIG_WM8350_POWER=m +CONFIG_TEST_POWER=m +CONFIG_BATTERY_88PM860X=m +CONFIG_CHARGER_ADP5061=m +# CONFIG_BATTERY_CW2015 is not set +CONFIG_BATTERY_DS2760=m +CONFIG_BATTERY_DS2780=m +CONFIG_BATTERY_DS2781=m +CONFIG_BATTERY_DS2782=m +CONFIG_BATTERY_SBS=m +CONFIG_CHARGER_SBS=m +CONFIG_MANAGER_SBS=m +CONFIG_BATTERY_BQ27XXX=m +CONFIG_BATTERY_BQ27XXX_I2C=m +CONFIG_BATTERY_BQ27XXX_HDQ=m +# CONFIG_BATTERY_BQ27XXX_DT_UPDATES_NVM is not set +CONFIG_BATTERY_DA9030=m +CONFIG_BATTERY_DA9052=m +CONFIG_CHARGER_DA9150=m +CONFIG_BATTERY_DA9150=m +CONFIG_CHARGER_AXP20X=m +CONFIG_BATTERY_AXP20X=m +CONFIG_AXP20X_POWER=m +CONFIG_AXP288_CHARGER=m +CONFIG_AXP288_FUEL_GAUGE=m +CONFIG_BATTERY_MAX17040=m +CONFIG_BATTERY_MAX17042=m +CONFIG_BATTERY_MAX1721X=m +CONFIG_BATTERY_TWL4030_MADC=m +CONFIG_CHARGER_88PM860X=m +CONFIG_CHARGER_PCF50633=m +CONFIG_BATTERY_RX51=m +CONFIG_CHARGER_ISP1704=m +CONFIG_CHARGER_MAX8903=m +CONFIG_CHARGER_TWL4030=m +CONFIG_CHARGER_LP8727=m +CONFIG_CHARGER_LP8788=m +CONFIG_CHARGER_GPIO=m +CONFIG_CHARGER_MANAGER=y +CONFIG_CHARGER_LT3651=m +# CONFIG_CHARGER_LTC4162L is not set +CONFIG_CHARGER_MAX14577=m +CONFIG_CHARGER_MAX77693=m +CONFIG_CHARGER_MAX8997=m +CONFIG_CHARGER_MAX8998=m +CONFIG_CHARGER_BQ2415X=m +CONFIG_CHARGER_BQ24190=m +CONFIG_CHARGER_BQ24257=m +CONFIG_CHARGER_BQ24735=m +# CONFIG_CHARGER_BQ2515X is not set +CONFIG_CHARGER_BQ25890=m +# CONFIG_CHARGER_BQ25980 is not set +# CONFIG_CHARGER_BQ256XX is not set +CONFIG_CHARGER_SMB347=m +CONFIG_CHARGER_TPS65090=m +CONFIG_BATTERY_GAUGE_LTC2941=m +# CONFIG_BATTERY_GOLDFISH is not set +CONFIG_BATTERY_RT5033=m +CONFIG_CHARGER_RT9455=m +CONFIG_CHARGER_CROS_USBPD=m +CONFIG_CHARGER_CROS_PCHG=m +# CONFIG_CHARGER_BD99954 is not set +CONFIG_CHARGER_WILCO=m +CONFIG_HWMON=y +CONFIG_HWMON_VID=m +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Native drivers +# +CONFIG_SENSORS_ABITUGURU=m +CONFIG_SENSORS_ABITUGURU3=m +CONFIG_SENSORS_AD7314=m +CONFIG_SENSORS_AD7414=m +CONFIG_SENSORS_AD7418=m +CONFIG_SENSORS_ADM1021=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1026=m +CONFIG_SENSORS_ADM1029=m +CONFIG_SENSORS_ADM1031=m +# CONFIG_SENSORS_ADM1177 is not set +CONFIG_SENSORS_ADM9240=m +CONFIG_SENSORS_ADT7X10=m +CONFIG_SENSORS_ADT7310=m +CONFIG_SENSORS_ADT7410=m +CONFIG_SENSORS_ADT7411=m +CONFIG_SENSORS_ADT7462=m +CONFIG_SENSORS_ADT7470=m +CONFIG_SENSORS_ADT7475=m +# CONFIG_SENSORS_AHT10 is not set +# CONFIG_SENSORS_AQUACOMPUTER_D5NEXT is not set +CONFIG_SENSORS_AS370=m +CONFIG_SENSORS_ASC7621=m +# CONFIG_SENSORS_AXI_FAN_CONTROL is not set +CONFIG_SENSORS_K8TEMP=m +CONFIG_SENSORS_K10TEMP=m +CONFIG_SENSORS_FAM15H_POWER=m +CONFIG_SENSORS_APPLESMC=m +CONFIG_SENSORS_ASB100=m +CONFIG_SENSORS_ASPEED=m +CONFIG_SENSORS_ATXP1=m +# CONFIG_SENSORS_CORSAIR_CPRO is not set +# CONFIG_SENSORS_CORSAIR_PSU is not set +# CONFIG_SENSORS_DRIVETEMP is not set +CONFIG_SENSORS_DS620=m +CONFIG_SENSORS_DS1621=m +CONFIG_SENSORS_DELL_SMM=m +CONFIG_SENSORS_DA9052_ADC=m +CONFIG_SENSORS_DA9055=m +CONFIG_SENSORS_I5K_AMB=m +CONFIG_SENSORS_F71805F=m +CONFIG_SENSORS_F71882FG=m +CONFIG_SENSORS_F75375S=m +CONFIG_SENSORS_MC13783_ADC=m +CONFIG_SENSORS_FSCHMD=m +CONFIG_SENSORS_FTSTEUTATES=m +CONFIG_SENSORS_GL518SM=m +CONFIG_SENSORS_GL520SM=m +CONFIG_SENSORS_G760A=m +CONFIG_SENSORS_G762=m +CONFIG_SENSORS_HIH6130=m +CONFIG_SENSORS_IBMAEM=m +CONFIG_SENSORS_IBMPEX=m +CONFIG_SENSORS_IIO_HWMON=m +CONFIG_SENSORS_I5500=m +CONFIG_SENSORS_CORETEMP=m +CONFIG_SENSORS_IT87=m +CONFIG_SENSORS_JC42=m +CONFIG_SENSORS_POWR1220=m +CONFIG_SENSORS_LINEAGE=m +CONFIG_SENSORS_LTC2945=m +# CONFIG_SENSORS_LTC2947_I2C is not set +# CONFIG_SENSORS_LTC2947_SPI is not set +CONFIG_SENSORS_LTC2990=m +# CONFIG_SENSORS_LTC2992 is not set +CONFIG_SENSORS_LTC4151=m +CONFIG_SENSORS_LTC4215=m +CONFIG_SENSORS_LTC4222=m +CONFIG_SENSORS_LTC4245=m +CONFIG_SENSORS_LTC4260=m +CONFIG_SENSORS_LTC4261=m +CONFIG_SENSORS_MAX1111=m +# CONFIG_SENSORS_MAX127 is not set +CONFIG_SENSORS_MAX16065=m +CONFIG_SENSORS_MAX1619=m +CONFIG_SENSORS_MAX1668=m +CONFIG_SENSORS_MAX197=m +CONFIG_SENSORS_MAX31722=m +# CONFIG_SENSORS_MAX31730 is not set +CONFIG_SENSORS_MAX6621=m +CONFIG_SENSORS_MAX6639=m +CONFIG_SENSORS_MAX6642=m +CONFIG_SENSORS_MAX6650=m +CONFIG_SENSORS_MAX6697=m +CONFIG_SENSORS_MAX31790=m +CONFIG_SENSORS_MCP3021=m +CONFIG_SENSORS_MLXREG_FAN=m +CONFIG_SENSORS_TC654=m +# CONFIG_SENSORS_TPS23861 is not set +CONFIG_SENSORS_MENF21BMC_HWMON=m +# CONFIG_SENSORS_MR75203 is not set +CONFIG_SENSORS_ADCXX=m +CONFIG_SENSORS_LM63=m +CONFIG_SENSORS_LM70=m +CONFIG_SENSORS_LM73=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM87=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_LM92=m +CONFIG_SENSORS_LM93=m +CONFIG_SENSORS_LM95234=m +CONFIG_SENSORS_LM95241=m +CONFIG_SENSORS_LM95245=m +CONFIG_SENSORS_PC87360=m +CONFIG_SENSORS_PC87427=m +CONFIG_SENSORS_NTC_THERMISTOR=m +CONFIG_SENSORS_NCT6683=m +CONFIG_SENSORS_NCT6775=m +CONFIG_SENSORS_NCT7802=m +CONFIG_SENSORS_NCT7904=m +CONFIG_SENSORS_NPCM7XX=m +# CONFIG_SENSORS_NZXT_KRAKEN2 is not set +CONFIG_SENSORS_PCF8591=m +CONFIG_PMBUS=m +CONFIG_SENSORS_PMBUS=m +# CONFIG_SENSORS_ADM1266 is not set +CONFIG_SENSORS_ADM1275=m +# CONFIG_SENSORS_BEL_PFE is not set +# CONFIG_SENSORS_BPA_RS600 is not set +# CONFIG_SENSORS_FSP_3Y is not set +CONFIG_SENSORS_IBM_CFFPS=m +# CONFIG_SENSORS_DPS920AB is not set +CONFIG_SENSORS_INSPUR_IPSPS=m +CONFIG_SENSORS_IR35221=m +# CONFIG_SENSORS_IR36021 is not set +CONFIG_SENSORS_IR38064=m +CONFIG_SENSORS_IRPS5401=m +CONFIG_SENSORS_ISL68137=m +CONFIG_SENSORS_LM25066=m +CONFIG_SENSORS_LTC2978=m +CONFIG_SENSORS_LTC2978_REGULATOR=y +CONFIG_SENSORS_LTC3815=m +# CONFIG_SENSORS_MAX15301 is not set +CONFIG_SENSORS_MAX16064=m +# CONFIG_SENSORS_MAX16601 is not set +# CONFIG_SENSORS_MAX20730 is not set +CONFIG_SENSORS_MAX20751=m +CONFIG_SENSORS_MAX31785=m +CONFIG_SENSORS_MAX34440=m +CONFIG_SENSORS_MAX8688=m +# CONFIG_SENSORS_MP2888 is not set +# CONFIG_SENSORS_MP2975 is not set +# CONFIG_SENSORS_PIM4328 is not set +# CONFIG_SENSORS_PM6764TR is not set +CONFIG_SENSORS_PXE1610=m +# CONFIG_SENSORS_Q54SJ108A2 is not set +# CONFIG_SENSORS_STPDDC60 is not set +CONFIG_SENSORS_TPS40422=m +CONFIG_SENSORS_TPS53679=m +CONFIG_SENSORS_UCD9000=m +CONFIG_SENSORS_UCD9200=m +# CONFIG_SENSORS_XDPE122 is not set +CONFIG_SENSORS_ZL6100=m +# CONFIG_SENSORS_SBTSI is not set +# CONFIG_SENSORS_SBRMI is not set +CONFIG_SENSORS_SHT15=m +CONFIG_SENSORS_SHT21=m +CONFIG_SENSORS_SHT3x=m +# CONFIG_SENSORS_SHT4x is not set +CONFIG_SENSORS_SHTC1=m +CONFIG_SENSORS_SIS5595=m +CONFIG_SENSORS_DME1737=m +CONFIG_SENSORS_EMC1403=m +CONFIG_SENSORS_EMC2103=m +CONFIG_SENSORS_EMC6W201=m +CONFIG_SENSORS_SMSC47M1=m +CONFIG_SENSORS_SMSC47M192=m +CONFIG_SENSORS_SMSC47B397=m +CONFIG_SENSORS_SCH56XX_COMMON=m +CONFIG_SENSORS_SCH5627=m +CONFIG_SENSORS_SCH5636=m +CONFIG_SENSORS_STTS751=m +CONFIG_SENSORS_SMM665=m +CONFIG_SENSORS_ADC128D818=m +CONFIG_SENSORS_ADS7828=m +CONFIG_SENSORS_ADS7871=m +CONFIG_SENSORS_AMC6821=m +CONFIG_SENSORS_INA209=m +CONFIG_SENSORS_INA2XX=m +CONFIG_SENSORS_INA3221=m +CONFIG_SENSORS_TC74=m +CONFIG_SENSORS_THMC50=m +CONFIG_SENSORS_TMP102=m +CONFIG_SENSORS_TMP103=m +CONFIG_SENSORS_TMP108=m +CONFIG_SENSORS_TMP401=m +CONFIG_SENSORS_TMP421=m +# CONFIG_SENSORS_TMP513 is not set +CONFIG_SENSORS_VIA_CPUTEMP=m +CONFIG_SENSORS_VIA686A=m +CONFIG_SENSORS_VT1211=m +CONFIG_SENSORS_VT8231=m +CONFIG_SENSORS_W83773G=m +CONFIG_SENSORS_W83781D=m +CONFIG_SENSORS_W83791D=m +CONFIG_SENSORS_W83792D=m +CONFIG_SENSORS_W83793=m +CONFIG_SENSORS_W83795=m +# CONFIG_SENSORS_W83795_FANCTRL is not set +CONFIG_SENSORS_W83L785TS=m +CONFIG_SENSORS_W83L786NG=m +CONFIG_SENSORS_W83627HF=m +CONFIG_SENSORS_W83627EHF=m +CONFIG_SENSORS_WM831X=m +CONFIG_SENSORS_WM8350=m +CONFIG_SENSORS_XGENE=m + +# +# ACPI drivers +# +CONFIG_SENSORS_ACPI_POWER=m +CONFIG_SENSORS_ATK0110=m +CONFIG_THERMAL=y +# CONFIG_THERMAL_NETLINK is not set +CONFIG_THERMAL_STATISTICS=y +CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 +CONFIG_THERMAL_HWMON=y +CONFIG_THERMAL_WRITABLE_TRIPS=y +CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y +# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set +# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set +CONFIG_THERMAL_GOV_FAIR_SHARE=y +CONFIG_THERMAL_GOV_STEP_WISE=y +CONFIG_THERMAL_GOV_BANG_BANG=y +CONFIG_THERMAL_GOV_USER_SPACE=y +CONFIG_DEVFREQ_THERMAL=y +CONFIG_THERMAL_EMULATION=y + +# +# Intel thermal drivers +# +CONFIG_INTEL_POWERCLAMP=m +CONFIG_X86_THERMAL_VECTOR=y +CONFIG_X86_PKG_TEMP_THERMAL=m +CONFIG_INTEL_SOC_DTS_IOSF_CORE=m +CONFIG_INTEL_SOC_DTS_THERMAL=m + +# +# ACPI INT340X thermal drivers +# +CONFIG_INT340X_THERMAL=m +CONFIG_ACPI_THERMAL_REL=m +CONFIG_INT3406_THERMAL=m +CONFIG_PROC_THERMAL_MMIO_RAPL=m +# end of ACPI INT340X thermal drivers + +CONFIG_INTEL_PCH_THERMAL=m +# CONFIG_INTEL_TCC_COOLING is not set +CONFIG_INTEL_MENLOW=m +# end of Intel thermal drivers + +CONFIG_GENERIC_ADC_THERMAL=m +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_CORE=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y +CONFIG_WATCHDOG_OPEN_TIMEOUT=0 +CONFIG_WATCHDOG_SYSFS=y +# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set + +# +# Watchdog Pretimeout Governors +# +CONFIG_WATCHDOG_PRETIMEOUT_GOV=y +CONFIG_WATCHDOG_PRETIMEOUT_GOV_SEL=m +CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP=y +CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=m +CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP=y +# CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC is not set + +# +# Watchdog Device Drivers +# +CONFIG_SOFT_WATCHDOG=m +CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y +CONFIG_DA9052_WATCHDOG=m +CONFIG_DA9055_WATCHDOG=m +CONFIG_DA9063_WATCHDOG=m +CONFIG_DA9062_WATCHDOG=m +CONFIG_MENF21BMC_WATCHDOG=m +CONFIG_MENZ069_WATCHDOG=m +CONFIG_WDAT_WDT=m +CONFIG_WM831X_WATCHDOG=m +CONFIG_WM8350_WATCHDOG=m +CONFIG_XILINX_WATCHDOG=m +CONFIG_ZIIRAVE_WATCHDOG=m +CONFIG_RAVE_SP_WATCHDOG=m +CONFIG_MLX_WDT=m +CONFIG_CADENCE_WATCHDOG=m +CONFIG_DW_WATCHDOG=m +CONFIG_TWL4030_WATCHDOG=m +CONFIG_MAX63XX_WATCHDOG=m +CONFIG_RETU_WATCHDOG=m +CONFIG_ACQUIRE_WDT=m +CONFIG_ADVANTECH_WDT=m +CONFIG_ALIM1535_WDT=m +CONFIG_ALIM7101_WDT=m +CONFIG_EBC_C384_WDT=m +CONFIG_F71808E_WDT=m +CONFIG_SP5100_TCO=m +CONFIG_SBC_FITPC2_WATCHDOG=m +CONFIG_EUROTECH_WDT=m +CONFIG_IB700_WDT=m +CONFIG_IBMASR=m +CONFIG_WAFER_WDT=m +CONFIG_I6300ESB_WDT=m +CONFIG_IE6XX_WDT=m +CONFIG_ITCO_WDT=m +CONFIG_ITCO_VENDOR_SUPPORT=y +CONFIG_IT8712F_WDT=m +CONFIG_IT87_WDT=m +CONFIG_HP_WATCHDOG=m +CONFIG_HPWDT_NMI_DECODING=y +CONFIG_KEMPLD_WDT=m +CONFIG_SC1200_WDT=m +CONFIG_PC87413_WDT=m +CONFIG_NV_TCO=m +CONFIG_60XX_WDT=m +CONFIG_CPU5_WDT=m +CONFIG_SMSC_SCH311X_WDT=m +CONFIG_SMSC37B787_WDT=m +CONFIG_TQMX86_WDT=m +CONFIG_VIA_WDT=m +CONFIG_W83627HF_WDT=m +CONFIG_W83877F_WDT=m +CONFIG_W83977F_WDT=m +CONFIG_MACHZ_WDT=m +CONFIG_SBC_EPX_C3_WATCHDOG=m +CONFIG_INTEL_MEI_WDT=m +CONFIG_NI903X_WDT=m +CONFIG_NIC7018_WDT=m +CONFIG_MEN_A21_WDT=m +CONFIG_XEN_WDT=m + +# +# PCI-based Watchdog Cards +# +CONFIG_PCIPCWATCHDOG=m +CONFIG_WDTPCI=m + +# +# USB-based Watchdog Cards +# +CONFIG_USBPCWATCHDOG=m +CONFIG_SSB_POSSIBLE=y +CONFIG_SSB=m +CONFIG_SSB_SPROM=y +CONFIG_SSB_BLOCKIO=y +CONFIG_SSB_PCIHOST_POSSIBLE=y +CONFIG_SSB_PCIHOST=y +CONFIG_SSB_B43_PCI_BRIDGE=y +CONFIG_SSB_PCMCIAHOST_POSSIBLE=y +# CONFIG_SSB_PCMCIAHOST is not set +CONFIG_SSB_SDIOHOST_POSSIBLE=y +CONFIG_SSB_SDIOHOST=y +CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y +CONFIG_SSB_DRIVER_PCICORE=y +CONFIG_SSB_DRIVER_GPIO=y +CONFIG_BCMA_POSSIBLE=y +CONFIG_BCMA=m +CONFIG_BCMA_BLOCKIO=y +CONFIG_BCMA_HOST_PCI_POSSIBLE=y +CONFIG_BCMA_HOST_PCI=y +CONFIG_BCMA_HOST_SOC=y +CONFIG_BCMA_DRIVER_PCI=y +CONFIG_BCMA_SFLASH=y +CONFIG_BCMA_DRIVER_GMAC_CMN=y +CONFIG_BCMA_DRIVER_GPIO=y +# CONFIG_BCMA_DEBUG is not set + +# +# Multifunction device drivers +# +CONFIG_MFD_CORE=y +CONFIG_MFD_AS3711=y +CONFIG_PMIC_ADP5520=y +CONFIG_MFD_AAT2870_CORE=y +CONFIG_MFD_BCM590XX=m +CONFIG_MFD_BD9571MWV=m +CONFIG_MFD_AXP20X=m +CONFIG_MFD_AXP20X_I2C=m +CONFIG_MFD_CROS_EC_DEV=m +CONFIG_MFD_MADERA=m +CONFIG_MFD_MADERA_I2C=m +CONFIG_MFD_MADERA_SPI=m +CONFIG_MFD_CS47L15=y +CONFIG_MFD_CS47L35=y +CONFIG_MFD_CS47L85=y +CONFIG_MFD_CS47L90=y +CONFIG_MFD_CS47L92=y +CONFIG_PMIC_DA903X=y +CONFIG_PMIC_DA9052=y +CONFIG_MFD_DA9052_SPI=y +CONFIG_MFD_DA9052_I2C=y +CONFIG_MFD_DA9055=y +CONFIG_MFD_DA9062=m +CONFIG_MFD_DA9063=y +CONFIG_MFD_DA9150=m +CONFIG_MFD_DLN2=m +CONFIG_MFD_MC13XXX=m +CONFIG_MFD_MC13XXX_SPI=m +CONFIG_MFD_MC13XXX_I2C=m +# CONFIG_MFD_MP2629 is not set +CONFIG_HTC_PASIC3=m +CONFIG_HTC_I2CPLD=y +CONFIG_MFD_INTEL_QUARK_I2C_GPIO=m +CONFIG_LPC_ICH=m +CONFIG_LPC_SCH=m +CONFIG_INTEL_SOC_PMIC=y +CONFIG_INTEL_SOC_PMIC_CHTWC=y +CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m +CONFIG_MFD_INTEL_LPSS=m +CONFIG_MFD_INTEL_LPSS_ACPI=m +CONFIG_MFD_INTEL_LPSS_PCI=m +# CONFIG_MFD_INTEL_PMC_BXT is not set +# CONFIG_MFD_INTEL_PMT is not set +# CONFIG_MFD_IQS62X is not set +CONFIG_MFD_JANZ_CMODIO=m +CONFIG_MFD_KEMPLD=m +CONFIG_MFD_88PM800=m +CONFIG_MFD_88PM805=m +CONFIG_MFD_88PM860X=y +CONFIG_MFD_MAX14577=y +CONFIG_MFD_MAX77693=y +CONFIG_MFD_MAX77843=y +CONFIG_MFD_MAX8907=m +CONFIG_MFD_MAX8925=y +CONFIG_MFD_MAX8997=y +CONFIG_MFD_MAX8998=y +# CONFIG_MFD_MT6360 is not set +CONFIG_MFD_MT6397=m +CONFIG_MFD_MENF21BMC=m +CONFIG_EZX_PCAP=y +CONFIG_MFD_VIPERBOARD=m +CONFIG_MFD_RETU=m +CONFIG_MFD_PCF50633=m +CONFIG_PCF50633_ADC=m +CONFIG_PCF50633_GPIO=m +CONFIG_UCB1400_CORE=m +CONFIG_MFD_RDC321X=m +# CONFIG_MFD_RT4831 is not set +CONFIG_MFD_RT5033=m +CONFIG_MFD_RC5T583=y +CONFIG_MFD_SI476X_CORE=m +CONFIG_MFD_SM501=m +CONFIG_MFD_SM501_GPIO=y +CONFIG_MFD_SKY81452=m +CONFIG_MFD_SYSCON=y +CONFIG_MFD_TI_AM335X_TSCADC=m +CONFIG_MFD_LP3943=m +CONFIG_MFD_LP8788=y +CONFIG_MFD_TI_LMU=m +CONFIG_MFD_PALMAS=y +CONFIG_TPS6105X=m +CONFIG_TPS65010=m +CONFIG_TPS6507X=m +CONFIG_MFD_TPS65086=m +CONFIG_MFD_TPS65090=y +CONFIG_MFD_TI_LP873X=m +CONFIG_MFD_TPS6586X=y +CONFIG_MFD_TPS65910=y +CONFIG_MFD_TPS65912=y +CONFIG_MFD_TPS65912_I2C=y +CONFIG_MFD_TPS65912_SPI=y +CONFIG_MFD_TPS80031=y +CONFIG_TWL4030_CORE=y +CONFIG_MFD_TWL4030_AUDIO=y +CONFIG_TWL6040_CORE=y +CONFIG_MFD_WL1273_CORE=m +CONFIG_MFD_LM3533=m +CONFIG_MFD_TQMX86=m +CONFIG_MFD_VX855=m +CONFIG_MFD_ARIZONA=m +CONFIG_MFD_ARIZONA_I2C=m +CONFIG_MFD_ARIZONA_SPI=m +CONFIG_MFD_CS47L24=y +CONFIG_MFD_WM5102=y +CONFIG_MFD_WM5110=y +CONFIG_MFD_WM8997=y +CONFIG_MFD_WM8998=y +CONFIG_MFD_WM8400=y +CONFIG_MFD_WM831X=y +CONFIG_MFD_WM831X_I2C=y +CONFIG_MFD_WM831X_SPI=y +CONFIG_MFD_WM8350=y +CONFIG_MFD_WM8350_I2C=y +CONFIG_MFD_WM8994=m +# CONFIG_MFD_WCD934X is not set +# CONFIG_MFD_ATC260X_I2C is not set +CONFIG_RAVE_SP_CORE=m +# CONFIG_MFD_INTEL_M10_BMC is not set +# end of Multifunction device drivers + +CONFIG_REGULATOR=y +# CONFIG_REGULATOR_DEBUG is not set +CONFIG_REGULATOR_FIXED_VOLTAGE=m +CONFIG_REGULATOR_VIRTUAL_CONSUMER=m +CONFIG_REGULATOR_USERSPACE_CONSUMER=m +CONFIG_REGULATOR_88PG86X=m +CONFIG_REGULATOR_88PM800=m +CONFIG_REGULATOR_88PM8607=m +CONFIG_REGULATOR_ACT8865=m +CONFIG_REGULATOR_AD5398=m +CONFIG_REGULATOR_AAT2870=m +CONFIG_REGULATOR_ARIZONA_LDO1=m +CONFIG_REGULATOR_ARIZONA_MICSUPP=m +CONFIG_REGULATOR_AS3711=m +CONFIG_REGULATOR_AXP20X=m +CONFIG_REGULATOR_BCM590XX=m +CONFIG_REGULATOR_BD9571MWV=m +CONFIG_REGULATOR_DA903X=m +CONFIG_REGULATOR_DA9052=m +CONFIG_REGULATOR_DA9055=m +CONFIG_REGULATOR_DA9062=m +CONFIG_REGULATOR_DA9210=m +CONFIG_REGULATOR_DA9211=m +CONFIG_REGULATOR_FAN53555=m +CONFIG_REGULATOR_GPIO=m +CONFIG_REGULATOR_ISL9305=m +CONFIG_REGULATOR_ISL6271A=m +CONFIG_REGULATOR_LM363X=m +CONFIG_REGULATOR_LP3971=m +CONFIG_REGULATOR_LP3972=m +CONFIG_REGULATOR_LP872X=m +CONFIG_REGULATOR_LP8755=m +CONFIG_REGULATOR_LP8788=m +CONFIG_REGULATOR_LTC3589=m +CONFIG_REGULATOR_LTC3676=m +CONFIG_REGULATOR_MAX14577=m +CONFIG_REGULATOR_MAX1586=m +CONFIG_REGULATOR_MAX8649=m +CONFIG_REGULATOR_MAX8660=m +# CONFIG_REGULATOR_MAX8893 is not set +CONFIG_REGULATOR_MAX8907=m +CONFIG_REGULATOR_MAX8925=m +CONFIG_REGULATOR_MAX8952=m +CONFIG_REGULATOR_MAX8997=m +CONFIG_REGULATOR_MAX8998=m +CONFIG_REGULATOR_MAX77693=m +# CONFIG_REGULATOR_MAX77826 is not set +CONFIG_REGULATOR_MC13XXX_CORE=m +CONFIG_REGULATOR_MC13783=m +CONFIG_REGULATOR_MC13892=m +# CONFIG_REGULATOR_MP8859 is not set +CONFIG_REGULATOR_MT6311=m +# CONFIG_REGULATOR_MT6315 is not set +CONFIG_REGULATOR_MT6323=m +# CONFIG_REGULATOR_MT6358 is not set +# CONFIG_REGULATOR_MT6359 is not set +CONFIG_REGULATOR_MT6397=m +CONFIG_REGULATOR_PALMAS=m +# CONFIG_REGULATOR_PCA9450 is not set +CONFIG_REGULATOR_PCAP=m +CONFIG_REGULATOR_PCF50633=m +CONFIG_REGULATOR_PV88060=m +CONFIG_REGULATOR_PV88080=m +CONFIG_REGULATOR_PV88090=m +CONFIG_REGULATOR_PWM=m +CONFIG_REGULATOR_QCOM_SPMI=m +# CONFIG_REGULATOR_QCOM_USB_VBUS is not set +# CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY is not set +CONFIG_REGULATOR_RC5T583=m +# CONFIG_REGULATOR_RT4801 is not set +CONFIG_REGULATOR_RT5033=m +# CONFIG_REGULATOR_RT6160 is not set +# CONFIG_REGULATOR_RT6245 is not set +# CONFIG_REGULATOR_RTQ2134 is not set +# CONFIG_REGULATOR_RTMV20 is not set +# CONFIG_REGULATOR_RTQ6752 is not set +CONFIG_REGULATOR_SKY81452=m +CONFIG_REGULATOR_SLG51000=m +CONFIG_REGULATOR_TPS51632=m +CONFIG_REGULATOR_TPS6105X=m +CONFIG_REGULATOR_TPS62360=m +CONFIG_REGULATOR_TPS65023=m +CONFIG_REGULATOR_TPS6507X=m +CONFIG_REGULATOR_TPS65086=m +CONFIG_REGULATOR_TPS65090=m +CONFIG_REGULATOR_TPS65132=m +CONFIG_REGULATOR_TPS6524X=m +CONFIG_REGULATOR_TPS6586X=m +CONFIG_REGULATOR_TPS65910=m +CONFIG_REGULATOR_TPS65912=m +CONFIG_REGULATOR_TPS80031=m +CONFIG_REGULATOR_TWL4030=m +CONFIG_REGULATOR_WM831X=m +CONFIG_REGULATOR_WM8350=m +CONFIG_REGULATOR_WM8400=m +CONFIG_REGULATOR_WM8994=m +# CONFIG_REGULATOR_QCOM_LABIBB is not set +CONFIG_RC_CORE=m +CONFIG_RC_MAP=m +CONFIG_LIRC=y +CONFIG_RC_DECODERS=y +CONFIG_IR_NEC_DECODER=m +CONFIG_IR_RC5_DECODER=m +CONFIG_IR_RC6_DECODER=m +CONFIG_IR_JVC_DECODER=m +CONFIG_IR_SONY_DECODER=m +CONFIG_IR_SANYO_DECODER=m +CONFIG_IR_SHARP_DECODER=m +CONFIG_IR_MCE_KBD_DECODER=m +CONFIG_IR_XMP_DECODER=m +CONFIG_IR_IMON_DECODER=m +CONFIG_IR_RCMM_DECODER=m +CONFIG_RC_DEVICES=y +CONFIG_RC_ATI_REMOTE=m +CONFIG_IR_ENE=m +CONFIG_IR_IMON=m +CONFIG_IR_IMON_RAW=m +CONFIG_IR_MCEUSB=m +CONFIG_IR_ITE_CIR=m +CONFIG_IR_FINTEK=m +CONFIG_IR_NUVOTON=m +CONFIG_IR_REDRAT3=m +CONFIG_IR_STREAMZAP=m +CONFIG_IR_WINBOND_CIR=m +CONFIG_IR_IGORPLUGUSB=m +CONFIG_IR_IGUANA=m +CONFIG_IR_TTUSBIR=m +CONFIG_RC_LOOPBACK=m +CONFIG_IR_SERIAL=m +CONFIG_IR_SERIAL_TRANSMITTER=y +CONFIG_IR_SIR=m +CONFIG_RC_XBOX_DVD=m +# CONFIG_IR_TOY is not set +CONFIG_CEC_CORE=m +CONFIG_CEC_NOTIFIER=y +# CONFIG_MEDIA_CEC_RC is not set +CONFIG_MEDIA_CEC_SUPPORT=y +# CONFIG_CEC_CH7322 is not set +# CONFIG_CEC_CROS_EC is not set +# CONFIG_CEC_SECO is not set +CONFIG_USB_PULSE8_CEC=m +CONFIG_USB_RAINSHADOW_CEC=m +CONFIG_MEDIA_SUPPORT=y +# CONFIG_MEDIA_SUPPORT_FILTER is not set +CONFIG_MEDIA_SUBDRV_AUTOSELECT=y + +# +# Media device types +# +CONFIG_MEDIA_CAMERA_SUPPORT=y +CONFIG_MEDIA_ANALOG_TV_SUPPORT=y +CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y +CONFIG_MEDIA_RADIO_SUPPORT=y +CONFIG_MEDIA_SDR_SUPPORT=y +CONFIG_MEDIA_PLATFORM_SUPPORT=y +CONFIG_MEDIA_TEST_SUPPORT=y +# end of Media device types + +# +# Media core support +# +CONFIG_VIDEO_DEV=m +CONFIG_MEDIA_CONTROLLER=y +CONFIG_DVB_CORE=y +# end of Media core support + +# +# Video4Linux options +# +CONFIG_VIDEO_V4L2=m +CONFIG_VIDEO_V4L2_I2C=y +CONFIG_VIDEO_V4L2_SUBDEV_API=y +# CONFIG_VIDEO_ADV_DEBUG is not set +# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set +CONFIG_VIDEO_TUNER=m +CONFIG_V4L2_MEM2MEM_DEV=m +CONFIG_V4L2_FLASH_LED_CLASS=m +CONFIG_V4L2_FWNODE=m +CONFIG_V4L2_ASYNC=m +CONFIG_VIDEOBUF_GEN=m +CONFIG_VIDEOBUF_DMA_SG=m +CONFIG_VIDEOBUF_VMALLOC=m +# end of Video4Linux options + +# +# Media controller options +# +CONFIG_MEDIA_CONTROLLER_DVB=y +CONFIG_MEDIA_CONTROLLER_REQUEST_API=y + +# +# Please notice that the enabled Media controller Request API is EXPERIMENTAL +# +# end of Media controller options + +# +# Digital TV options +# +CONFIG_DVB_NET=y +CONFIG_DVB_MAX_ADAPTERS=8 +CONFIG_DVB_DYNAMIC_MINORS=y +# CONFIG_DVB_DEMUX_SECTION_LOSS_LOG is not set +# CONFIG_DVB_ULE_DEBUG is not set +# end of Digital TV options + +# +# Media drivers +# +CONFIG_MEDIA_USB_SUPPORT=y + +# +# Webcam devices +# +CONFIG_USB_VIDEO_CLASS=m +CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y +CONFIG_USB_GSPCA=m +CONFIG_USB_M5602=m +CONFIG_USB_STV06XX=m +CONFIG_USB_GL860=m +CONFIG_USB_GSPCA_BENQ=m +CONFIG_USB_GSPCA_CONEX=m +CONFIG_USB_GSPCA_CPIA1=m +CONFIG_USB_GSPCA_DTCS033=m +CONFIG_USB_GSPCA_ETOMS=m +CONFIG_USB_GSPCA_FINEPIX=m +CONFIG_USB_GSPCA_JEILINJ=m +CONFIG_USB_GSPCA_JL2005BCD=m +CONFIG_USB_GSPCA_KINECT=m +CONFIG_USB_GSPCA_KONICA=m +CONFIG_USB_GSPCA_MARS=m +CONFIG_USB_GSPCA_MR97310A=m +CONFIG_USB_GSPCA_NW80X=m +CONFIG_USB_GSPCA_OV519=m +CONFIG_USB_GSPCA_OV534=m +CONFIG_USB_GSPCA_OV534_9=m +CONFIG_USB_GSPCA_PAC207=m +CONFIG_USB_GSPCA_PAC7302=m +CONFIG_USB_GSPCA_PAC7311=m +CONFIG_USB_GSPCA_SE401=m +CONFIG_USB_GSPCA_SN9C2028=m +CONFIG_USB_GSPCA_SN9C20X=m +CONFIG_USB_GSPCA_SONIXB=m +CONFIG_USB_GSPCA_SONIXJ=m +CONFIG_USB_GSPCA_SPCA500=m +CONFIG_USB_GSPCA_SPCA501=m +CONFIG_USB_GSPCA_SPCA505=m +CONFIG_USB_GSPCA_SPCA506=m +CONFIG_USB_GSPCA_SPCA508=m +CONFIG_USB_GSPCA_SPCA561=m +CONFIG_USB_GSPCA_SPCA1528=m +CONFIG_USB_GSPCA_SQ905=m +CONFIG_USB_GSPCA_SQ905C=m +CONFIG_USB_GSPCA_SQ930X=m +CONFIG_USB_GSPCA_STK014=m +CONFIG_USB_GSPCA_STK1135=m +CONFIG_USB_GSPCA_STV0680=m +CONFIG_USB_GSPCA_SUNPLUS=m +CONFIG_USB_GSPCA_T613=m +CONFIG_USB_GSPCA_TOPRO=m +CONFIG_USB_GSPCA_TOUPTEK=m +CONFIG_USB_GSPCA_TV8532=m +CONFIG_USB_GSPCA_VC032X=m +CONFIG_USB_GSPCA_VICAM=m +CONFIG_USB_GSPCA_XIRLINK_CIT=m +CONFIG_USB_GSPCA_ZC3XX=m +CONFIG_USB_PWC=m +# CONFIG_USB_PWC_DEBUG is not set +CONFIG_USB_PWC_INPUT_EVDEV=y +CONFIG_VIDEO_CPIA2=m +CONFIG_USB_ZR364XX=m +CONFIG_USB_STKWEBCAM=m +CONFIG_USB_S2255=m +CONFIG_VIDEO_USBTV=m + +# +# Analog TV USB devices +# +CONFIG_VIDEO_PVRUSB2=m +CONFIG_VIDEO_PVRUSB2_SYSFS=y +CONFIG_VIDEO_PVRUSB2_DVB=y +# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set +CONFIG_VIDEO_HDPVR=m +CONFIG_VIDEO_STK1160_COMMON=m +CONFIG_VIDEO_STK1160=m +CONFIG_VIDEO_GO7007=m +CONFIG_VIDEO_GO7007_USB=m +CONFIG_VIDEO_GO7007_LOADER=m +CONFIG_VIDEO_GO7007_USB_S2250_BOARD=m + +# +# Analog/digital TV USB devices +# +CONFIG_VIDEO_AU0828=m +CONFIG_VIDEO_AU0828_V4L2=y +CONFIG_VIDEO_AU0828_RC=y +CONFIG_VIDEO_CX231XX=m +CONFIG_VIDEO_CX231XX_RC=y +CONFIG_VIDEO_CX231XX_ALSA=m +CONFIG_VIDEO_CX231XX_DVB=m +CONFIG_VIDEO_TM6000=m +CONFIG_VIDEO_TM6000_ALSA=m +CONFIG_VIDEO_TM6000_DVB=m + +# +# Digital TV USB devices +# +CONFIG_DVB_USB=m +# CONFIG_DVB_USB_DEBUG is not set +CONFIG_DVB_USB_DIB3000MC=m +CONFIG_DVB_USB_A800=m +CONFIG_DVB_USB_DIBUSB_MB=m +# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set +CONFIG_DVB_USB_DIBUSB_MC=m +CONFIG_DVB_USB_DIB0700=m +CONFIG_DVB_USB_UMT_010=m +CONFIG_DVB_USB_CXUSB=m +CONFIG_DVB_USB_CXUSB_ANALOG=y +CONFIG_DVB_USB_M920X=m +CONFIG_DVB_USB_DIGITV=m +CONFIG_DVB_USB_VP7045=m +CONFIG_DVB_USB_VP702X=m +CONFIG_DVB_USB_GP8PSK=m +CONFIG_DVB_USB_NOVA_T_USB2=m +CONFIG_DVB_USB_TTUSB2=m +CONFIG_DVB_USB_DTT200U=m +CONFIG_DVB_USB_OPERA1=m +CONFIG_DVB_USB_AF9005=m +CONFIG_DVB_USB_AF9005_REMOTE=m +CONFIG_DVB_USB_PCTV452E=m +CONFIG_DVB_USB_DW2102=m +CONFIG_DVB_USB_CINERGY_T2=m +CONFIG_DVB_USB_DTV5100=m +CONFIG_DVB_USB_AZ6027=m +CONFIG_DVB_USB_TECHNISAT_USB2=m +CONFIG_DVB_USB_V2=m +CONFIG_DVB_USB_AF9015=m +CONFIG_DVB_USB_AF9035=m +CONFIG_DVB_USB_ANYSEE=m +CONFIG_DVB_USB_AU6610=m +CONFIG_DVB_USB_AZ6007=m +CONFIG_DVB_USB_CE6230=m +CONFIG_DVB_USB_EC168=m +CONFIG_DVB_USB_GL861=m +CONFIG_DVB_USB_LME2510=m +CONFIG_DVB_USB_MXL111SF=m +CONFIG_DVB_USB_RTL28XXU=m +CONFIG_DVB_USB_DVBSKY=m +CONFIG_DVB_USB_ZD1301=m +CONFIG_DVB_TTUSB_BUDGET=m +CONFIG_DVB_TTUSB_DEC=m +CONFIG_SMS_USB_DRV=m +CONFIG_DVB_B2C2_FLEXCOP_USB=m +# CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set +CONFIG_DVB_AS102=m + +# +# Webcam, TV (analog/digital) USB devices +# +CONFIG_VIDEO_EM28XX=m +CONFIG_VIDEO_EM28XX_V4L2=m +CONFIG_VIDEO_EM28XX_ALSA=m +CONFIG_VIDEO_EM28XX_DVB=m +CONFIG_VIDEO_EM28XX_RC=m + +# +# Software defined radio USB devices +# +CONFIG_USB_AIRSPY=m +CONFIG_USB_HACKRF=m +CONFIG_USB_MSI2500=m +CONFIG_MEDIA_PCI_SUPPORT=y + +# +# Media capture support +# +CONFIG_VIDEO_MEYE=m +CONFIG_VIDEO_SOLO6X10=m +CONFIG_VIDEO_TW5864=m +CONFIG_VIDEO_TW68=m +CONFIG_VIDEO_TW686X=m + +# +# Media capture/analog TV support +# +CONFIG_VIDEO_IVTV=m +CONFIG_VIDEO_IVTV_ALSA=m +CONFIG_VIDEO_FB_IVTV=m +CONFIG_VIDEO_FB_IVTV_FORCE_PAT=y +CONFIG_VIDEO_HEXIUM_GEMINI=m +CONFIG_VIDEO_HEXIUM_ORION=m +CONFIG_VIDEO_MXB=m +CONFIG_VIDEO_DT3155=m + +# +# Media capture/analog/hybrid TV support +# +CONFIG_VIDEO_CX18=m +CONFIG_VIDEO_CX18_ALSA=m +CONFIG_VIDEO_CX23885=m +CONFIG_MEDIA_ALTERA_CI=m +CONFIG_VIDEO_CX25821=m +CONFIG_VIDEO_CX25821_ALSA=m +CONFIG_VIDEO_CX88=m +CONFIG_VIDEO_CX88_ALSA=m +CONFIG_VIDEO_CX88_BLACKBIRD=m +CONFIG_VIDEO_CX88_DVB=m +CONFIG_VIDEO_CX88_ENABLE_VP3054=y +CONFIG_VIDEO_CX88_VP3054=m +CONFIG_VIDEO_CX88_MPEG=m +CONFIG_VIDEO_BT848=m +CONFIG_DVB_BT8XX=m +CONFIG_VIDEO_SAA7134=m +CONFIG_VIDEO_SAA7134_ALSA=m +CONFIG_VIDEO_SAA7134_RC=y +CONFIG_VIDEO_SAA7134_DVB=m +CONFIG_VIDEO_SAA7134_GO7007=m +CONFIG_VIDEO_SAA7164=m +CONFIG_VIDEO_COBALT=m + +# +# Media digital TV PCI Adapters +# +CONFIG_DVB_BUDGET_CORE=m +CONFIG_DVB_BUDGET=m +CONFIG_DVB_BUDGET_CI=m +CONFIG_DVB_BUDGET_AV=m +CONFIG_DVB_B2C2_FLEXCOP_PCI=m +# CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set +CONFIG_DVB_PLUTO2=m +CONFIG_DVB_DM1105=m +CONFIG_DVB_PT1=m +CONFIG_DVB_PT3=m +CONFIG_MANTIS_CORE=m +CONFIG_DVB_MANTIS=m +CONFIG_DVB_HOPPER=m +CONFIG_DVB_NGENE=m +CONFIG_DVB_DDBRIDGE=m +# CONFIG_DVB_DDBRIDGE_MSIENABLE is not set +CONFIG_DVB_SMIPCIE=m +CONFIG_DVB_NETUP_UNIDVB=m +CONFIG_VIDEO_IPU3_CIO2=m +# CONFIG_CIO2_BRIDGE is not set +# CONFIG_VIDEO_PCI_SKELETON is not set +CONFIG_RADIO_ADAPTERS=y +CONFIG_RADIO_TEA575X=m +CONFIG_RADIO_SI470X=m +CONFIG_USB_SI470X=m +CONFIG_I2C_SI470X=m +CONFIG_RADIO_SI4713=m +CONFIG_USB_SI4713=m +CONFIG_PLATFORM_SI4713=m +CONFIG_I2C_SI4713=m +CONFIG_RADIO_SI476X=m +CONFIG_USB_MR800=m +CONFIG_USB_DSBR=m +CONFIG_RADIO_MAXIRADIO=m +CONFIG_RADIO_SHARK=m +CONFIG_RADIO_SHARK2=m +CONFIG_USB_KEENE=m +CONFIG_USB_RAREMONO=m +CONFIG_USB_MA901=m +CONFIG_RADIO_TEA5764=m +CONFIG_RADIO_SAA7706H=m +CONFIG_RADIO_TEF6862=m +CONFIG_RADIO_WL1273=m +CONFIG_RADIO_WL128X=m +CONFIG_MEDIA_COMMON_OPTIONS=y + +# +# common driver options +# +CONFIG_VIDEO_CX2341X=m +CONFIG_VIDEO_TVEEPROM=m +CONFIG_TTPCI_EEPROM=m +CONFIG_CYPRESS_FIRMWARE=m +CONFIG_VIDEOBUF2_CORE=m +CONFIG_VIDEOBUF2_V4L2=m +CONFIG_VIDEOBUF2_MEMOPS=m +CONFIG_VIDEOBUF2_DMA_CONTIG=m +CONFIG_VIDEOBUF2_VMALLOC=m +CONFIG_VIDEOBUF2_DMA_SG=m +CONFIG_VIDEOBUF2_DVB=m +CONFIG_DVB_B2C2_FLEXCOP=m +CONFIG_VIDEO_SAA7146=m +CONFIG_VIDEO_SAA7146_VV=m +CONFIG_SMS_SIANO_MDTV=m +CONFIG_SMS_SIANO_RC=y +CONFIG_SMS_SIANO_DEBUGFS=y +CONFIG_VIDEO_V4L2_TPG=m +CONFIG_V4L_PLATFORM_DRIVERS=y +CONFIG_VIDEO_CAFE_CCIC=m +CONFIG_VIDEO_VIA_CAMERA=m +CONFIG_VIDEO_CADENCE=y +CONFIG_VIDEO_CADENCE_CSI2RX=m +CONFIG_VIDEO_CADENCE_CSI2TX=m +CONFIG_VIDEO_ASPEED=m +CONFIG_V4L_MEM2MEM_DRIVERS=y +CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m +CONFIG_DVB_PLATFORM_DRIVERS=y +CONFIG_SDR_PLATFORM_DRIVERS=y + +# +# MMC/SDIO DVB adapters +# +CONFIG_SMS_SDIO_DRV=m +CONFIG_V4L_TEST_DRIVERS=y +CONFIG_VIDEO_VIMC=m +CONFIG_VIDEO_VIVID=m +CONFIG_VIDEO_VIVID_CEC=y +CONFIG_VIDEO_VIVID_MAX_DEVS=64 +CONFIG_VIDEO_VIM2M=m +CONFIG_VIDEO_VICODEC=m +# CONFIG_DVB_TEST_DRIVERS is not set + +# +# FireWire (IEEE 1394) Adapters +# +CONFIG_DVB_FIREDTV=m +CONFIG_DVB_FIREDTV_INPUT=y +# end of Media drivers + +# +# Media ancillary drivers +# +CONFIG_MEDIA_ATTACH=y + +# +# IR I2C driver auto-selected by 'Autoselect ancillary drivers' +# +CONFIG_VIDEO_IR_I2C=m + +# +# Audio decoders, processors and mixers +# +CONFIG_VIDEO_TVAUDIO=m +CONFIG_VIDEO_TDA7432=m +CONFIG_VIDEO_TDA9840=m +CONFIG_VIDEO_TDA1997X=m +CONFIG_VIDEO_TEA6415C=m +CONFIG_VIDEO_TEA6420=m +CONFIG_VIDEO_MSP3400=m +CONFIG_VIDEO_CS3308=m +CONFIG_VIDEO_CS5345=m +CONFIG_VIDEO_CS53L32A=m +CONFIG_VIDEO_TLV320AIC23B=m +CONFIG_VIDEO_UDA1342=m +CONFIG_VIDEO_WM8775=m +CONFIG_VIDEO_WM8739=m +CONFIG_VIDEO_VP27SMPX=m +CONFIG_VIDEO_SONY_BTF_MPX=m +# end of Audio decoders, processors and mixers + +# +# RDS decoders +# +CONFIG_VIDEO_SAA6588=m +# end of RDS decoders + +# +# Video decoders +# +CONFIG_VIDEO_ADV7180=m +CONFIG_VIDEO_ADV7183=m +CONFIG_VIDEO_ADV7604=m +CONFIG_VIDEO_ADV7604_CEC=y +CONFIG_VIDEO_ADV7842=m +CONFIG_VIDEO_ADV7842_CEC=y +CONFIG_VIDEO_BT819=m +CONFIG_VIDEO_BT856=m +CONFIG_VIDEO_BT866=m +CONFIG_VIDEO_KS0127=m +CONFIG_VIDEO_ML86V7667=m +CONFIG_VIDEO_SAA7110=m +CONFIG_VIDEO_SAA711X=m +CONFIG_VIDEO_TC358743=m +CONFIG_VIDEO_TC358743_CEC=y +CONFIG_VIDEO_TVP514X=m +CONFIG_VIDEO_TVP5150=m +CONFIG_VIDEO_TVP7002=m +CONFIG_VIDEO_TW2804=m +CONFIG_VIDEO_TW9903=m +CONFIG_VIDEO_TW9906=m +CONFIG_VIDEO_TW9910=m +CONFIG_VIDEO_VPX3220=m + +# +# Video and audio decoders +# +CONFIG_VIDEO_SAA717X=m +CONFIG_VIDEO_CX25840=m +# end of Video decoders + +# +# Video encoders +# +CONFIG_VIDEO_SAA7127=m +CONFIG_VIDEO_SAA7185=m +CONFIG_VIDEO_ADV7170=m +CONFIG_VIDEO_ADV7175=m +CONFIG_VIDEO_ADV7343=m +CONFIG_VIDEO_ADV7393=m +CONFIG_VIDEO_ADV7511=m +CONFIG_VIDEO_ADV7511_CEC=y +CONFIG_VIDEO_AD9389B=m +CONFIG_VIDEO_AK881X=m +CONFIG_VIDEO_THS8200=m +# end of Video encoders + +# +# Video improvement chips +# +CONFIG_VIDEO_UPD64031A=m +CONFIG_VIDEO_UPD64083=m +# end of Video improvement chips + +# +# Audio/Video compression chips +# +CONFIG_VIDEO_SAA6752HS=m +# end of Audio/Video compression chips + +# +# SDR tuner chips +# +CONFIG_SDR_MAX2175=m +# end of SDR tuner chips + +# +# Miscellaneous helper chips +# +CONFIG_VIDEO_THS7303=m +CONFIG_VIDEO_M52790=m +CONFIG_VIDEO_I2C=m +CONFIG_VIDEO_ST_MIPID02=m +# end of Miscellaneous helper chips + +# +# Camera sensor devices +# +CONFIG_VIDEO_APTINA_PLL=m +# CONFIG_VIDEO_HI556 is not set +# CONFIG_VIDEO_IMX208 is not set +CONFIG_VIDEO_IMX214=m +# CONFIG_VIDEO_IMX219 is not set +CONFIG_VIDEO_IMX258=m +CONFIG_VIDEO_IMX274=m +# CONFIG_VIDEO_IMX290 is not set +CONFIG_VIDEO_IMX319=m +CONFIG_VIDEO_IMX355=m +# CONFIG_VIDEO_OV02A10 is not set +CONFIG_VIDEO_OV2640=m +CONFIG_VIDEO_OV2659=m +CONFIG_VIDEO_OV2680=m +CONFIG_VIDEO_OV2685=m +# CONFIG_VIDEO_OV2740 is not set +CONFIG_VIDEO_OV5647=m +# CONFIG_VIDEO_OV5648 is not set +CONFIG_VIDEO_OV6650=m +CONFIG_VIDEO_OV5670=m +CONFIG_VIDEO_OV5675=m +CONFIG_VIDEO_OV5695=m +CONFIG_VIDEO_OV7251=m +CONFIG_VIDEO_OV772X=m +CONFIG_VIDEO_OV7640=m +CONFIG_VIDEO_OV7670=m +CONFIG_VIDEO_OV7740=m +CONFIG_VIDEO_OV8856=m +# CONFIG_VIDEO_OV8865 is not set +CONFIG_VIDEO_OV9640=m +CONFIG_VIDEO_OV9650=m +# CONFIG_VIDEO_OV9734 is not set +CONFIG_VIDEO_OV13858=m +CONFIG_VIDEO_VS6624=m +CONFIG_VIDEO_MT9M001=m +CONFIG_VIDEO_MT9M032=m +CONFIG_VIDEO_MT9M111=m +CONFIG_VIDEO_MT9P031=m +CONFIG_VIDEO_MT9T001=m +CONFIG_VIDEO_MT9T112=m +CONFIG_VIDEO_MT9V011=m +CONFIG_VIDEO_MT9V032=m +CONFIG_VIDEO_MT9V111=m +CONFIG_VIDEO_SR030PC30=m +CONFIG_VIDEO_NOON010PC30=m +CONFIG_VIDEO_M5MOLS=m +# CONFIG_VIDEO_RDACM20 is not set +# CONFIG_VIDEO_RDACM21 is not set +CONFIG_VIDEO_RJ54N1=m +CONFIG_VIDEO_S5K6AA=m +CONFIG_VIDEO_S5K6A3=m +CONFIG_VIDEO_S5K4ECGX=m +CONFIG_VIDEO_S5K5BAF=m +# CONFIG_VIDEO_CCS is not set +CONFIG_VIDEO_ET8EK8=m +CONFIG_VIDEO_S5C73M3=m +# end of Camera sensor devices + +# +# Lens drivers +# +CONFIG_VIDEO_AD5820=m +CONFIG_VIDEO_AK7375=m +CONFIG_VIDEO_DW9714=m +# CONFIG_VIDEO_DW9768 is not set +CONFIG_VIDEO_DW9807_VCM=m +# end of Lens drivers + +# +# Flash devices +# +CONFIG_VIDEO_ADP1653=m +CONFIG_VIDEO_LM3560=m +CONFIG_VIDEO_LM3646=m +# end of Flash devices + +# +# SPI helper chips +# +CONFIG_VIDEO_GS1662=m +# end of SPI helper chips + +# +# Media SPI Adapters +# +CONFIG_CXD2880_SPI_DRV=m +# end of Media SPI Adapters + +CONFIG_MEDIA_TUNER=y + +# +# Customize TV tuners +# +CONFIG_MEDIA_TUNER_SIMPLE=y +CONFIG_MEDIA_TUNER_TDA18250=m +CONFIG_MEDIA_TUNER_TDA8290=y +CONFIG_MEDIA_TUNER_TDA827X=y +CONFIG_MEDIA_TUNER_TDA18271=y +CONFIG_MEDIA_TUNER_TDA9887=y +CONFIG_MEDIA_TUNER_TEA5761=y +CONFIG_MEDIA_TUNER_TEA5767=y +CONFIG_MEDIA_TUNER_MSI001=m +CONFIG_MEDIA_TUNER_MT20XX=y +CONFIG_MEDIA_TUNER_MT2060=m +CONFIG_MEDIA_TUNER_MT2063=m +CONFIG_MEDIA_TUNER_MT2266=m +CONFIG_MEDIA_TUNER_MT2131=m +CONFIG_MEDIA_TUNER_QT1010=m +CONFIG_MEDIA_TUNER_XC2028=y +CONFIG_MEDIA_TUNER_XC5000=y +CONFIG_MEDIA_TUNER_XC4000=y +CONFIG_MEDIA_TUNER_MXL5005S=m +CONFIG_MEDIA_TUNER_MXL5007T=m +CONFIG_MEDIA_TUNER_MC44S803=y +CONFIG_MEDIA_TUNER_MAX2165=m +CONFIG_MEDIA_TUNER_TDA18218=m +CONFIG_MEDIA_TUNER_FC0011=m +CONFIG_MEDIA_TUNER_FC0012=m +CONFIG_MEDIA_TUNER_FC0013=m +CONFIG_MEDIA_TUNER_TDA18212=m +CONFIG_MEDIA_TUNER_E4000=m +CONFIG_MEDIA_TUNER_FC2580=m +CONFIG_MEDIA_TUNER_M88RS6000T=m +CONFIG_MEDIA_TUNER_TUA9001=m +CONFIG_MEDIA_TUNER_SI2157=m +CONFIG_MEDIA_TUNER_IT913X=m +CONFIG_MEDIA_TUNER_R820T=m +CONFIG_MEDIA_TUNER_MXL301RF=m +CONFIG_MEDIA_TUNER_QM1D1C0042=m +CONFIG_MEDIA_TUNER_QM1D1B0004=m +# end of Customize TV tuners + +# +# Customise DVB Frontends +# + +# +# Multistandard (satellite) frontends +# +CONFIG_DVB_STB0899=m +CONFIG_DVB_STB6100=m +CONFIG_DVB_STV090x=m +CONFIG_DVB_STV0910=m +CONFIG_DVB_STV6110x=m +CONFIG_DVB_STV6111=m +CONFIG_DVB_MXL5XX=m +CONFIG_DVB_M88DS3103=m + +# +# Multistandard (cable + terrestrial) frontends +# +CONFIG_DVB_DRXK=m +CONFIG_DVB_TDA18271C2DD=m +CONFIG_DVB_SI2165=m +CONFIG_DVB_MN88472=m +CONFIG_DVB_MN88473=m + +# +# DVB-S (satellite) frontends +# +CONFIG_DVB_CX24110=m +CONFIG_DVB_CX24123=m +CONFIG_DVB_MT312=m +CONFIG_DVB_ZL10036=m +CONFIG_DVB_ZL10039=m +CONFIG_DVB_S5H1420=m +CONFIG_DVB_STV0288=m +CONFIG_DVB_STB6000=m +CONFIG_DVB_STV0299=m +CONFIG_DVB_STV6110=m +CONFIG_DVB_STV0900=m +CONFIG_DVB_TDA8083=m +CONFIG_DVB_TDA10086=m +CONFIG_DVB_TDA8261=m +CONFIG_DVB_VES1X93=m +CONFIG_DVB_TUNER_ITD1000=m +CONFIG_DVB_TUNER_CX24113=m +CONFIG_DVB_TDA826X=m +CONFIG_DVB_TUA6100=m +CONFIG_DVB_CX24116=m +CONFIG_DVB_CX24117=m +CONFIG_DVB_CX24120=m +CONFIG_DVB_SI21XX=m +CONFIG_DVB_TS2020=m +CONFIG_DVB_DS3000=m +CONFIG_DVB_MB86A16=m +CONFIG_DVB_TDA10071=m + +# +# DVB-T (terrestrial) frontends +# +CONFIG_DVB_SP887X=m +CONFIG_DVB_CX22700=m +CONFIG_DVB_CX22702=m +CONFIG_DVB_S5H1432=m +CONFIG_DVB_DRXD=m +CONFIG_DVB_L64781=m +CONFIG_DVB_TDA1004X=m +CONFIG_DVB_NXT6000=m +CONFIG_DVB_MT352=m +CONFIG_DVB_ZL10353=m +CONFIG_DVB_DIB3000MB=m +CONFIG_DVB_DIB3000MC=m +CONFIG_DVB_DIB7000M=m +CONFIG_DVB_DIB7000P=m +CONFIG_DVB_DIB9000=m +CONFIG_DVB_TDA10048=m +CONFIG_DVB_AF9013=m +CONFIG_DVB_EC100=m +CONFIG_DVB_STV0367=m +CONFIG_DVB_CXD2820R=m +CONFIG_DVB_CXD2841ER=m +CONFIG_DVB_RTL2830=m +CONFIG_DVB_RTL2832=m +CONFIG_DVB_RTL2832_SDR=m +CONFIG_DVB_SI2168=m +CONFIG_DVB_AS102_FE=m +CONFIG_DVB_ZD1301_DEMOD=m +CONFIG_DVB_GP8PSK_FE=m +CONFIG_DVB_CXD2880=m + +# +# DVB-C (cable) frontends +# +CONFIG_DVB_VES1820=m +CONFIG_DVB_TDA10021=m +CONFIG_DVB_TDA10023=m +CONFIG_DVB_STV0297=m + +# +# ATSC (North American/Korean Terrestrial/Cable DTV) frontends +# +CONFIG_DVB_NXT200X=m +CONFIG_DVB_OR51211=m +CONFIG_DVB_OR51132=m +CONFIG_DVB_BCM3510=m +CONFIG_DVB_LGDT330X=m +CONFIG_DVB_LGDT3305=m +CONFIG_DVB_LGDT3306A=m +CONFIG_DVB_LG2160=m +CONFIG_DVB_S5H1409=m +CONFIG_DVB_AU8522=m +CONFIG_DVB_AU8522_DTV=m +CONFIG_DVB_AU8522_V4L=m +CONFIG_DVB_S5H1411=m +CONFIG_DVB_MXL692=m + +# +# ISDB-T (terrestrial) frontends +# +CONFIG_DVB_S921=m +CONFIG_DVB_DIB8000=m +CONFIG_DVB_MB86A20S=m + +# +# ISDB-S (satellite) & ISDB-T (terrestrial) frontends +# +CONFIG_DVB_TC90522=m +CONFIG_DVB_MN88443X=m + +# +# Digital terrestrial only tuners/PLL +# +CONFIG_DVB_PLL=m +CONFIG_DVB_TUNER_DIB0070=m +CONFIG_DVB_TUNER_DIB0090=m + +# +# SEC control devices for DVB-S +# +CONFIG_DVB_DRX39XYJ=m +CONFIG_DVB_LNBH25=m +CONFIG_DVB_LNBH29=m +CONFIG_DVB_LNBP21=m +CONFIG_DVB_LNBP22=m +CONFIG_DVB_ISL6405=m +CONFIG_DVB_ISL6421=m +CONFIG_DVB_ISL6423=m +CONFIG_DVB_A8293=m +CONFIG_DVB_LGS8GL5=m +CONFIG_DVB_LGS8GXX=m +CONFIG_DVB_ATBM8830=m +CONFIG_DVB_TDA665x=m +CONFIG_DVB_IX2505V=m +CONFIG_DVB_M88RS2000=m +CONFIG_DVB_AF9033=m +CONFIG_DVB_HORUS3A=m +CONFIG_DVB_ASCOT2E=m +CONFIG_DVB_HELENE=m + +# +# Common Interface (EN50221) controller drivers +# +CONFIG_DVB_CXD2099=m +CONFIG_DVB_SP2=m +# end of Customise DVB Frontends + +# +# Tools to develop new frontends +# +CONFIG_DVB_DUMMY_FE=m +# end of Media ancillary drivers + +# +# Graphics support +# +CONFIG_AGP=y +CONFIG_AGP_AMD64=y +CONFIG_AGP_INTEL=y +CONFIG_AGP_SIS=m +CONFIG_AGP_VIA=y +CONFIG_INTEL_GTT=y +CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16 +CONFIG_VGA_SWITCHEROO=y +CONFIG_DRM=m +CONFIG_DRM_MIPI_DBI=m +CONFIG_DRM_MIPI_DSI=y +CONFIG_DRM_DP_AUX_CHARDEV=y +# CONFIG_DRM_DEBUG_SELFTEST is not set +CONFIG_DRM_KMS_HELPER=m +# CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set +CONFIG_DRM_FBDEV_EMULATION=y +CONFIG_DRM_FBDEV_OVERALLOC=100 +# CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM is not set +CONFIG_DRM_LOAD_EDID_FIRMWARE=y +CONFIG_DRM_DP_CEC=y +CONFIG_DRM_TTM=m +CONFIG_DRM_VRAM_HELPER=m +CONFIG_DRM_TTM_HELPER=m +CONFIG_DRM_GEM_CMA_HELPER=y +CONFIG_DRM_KMS_CMA_HELPER=y +CONFIG_DRM_GEM_SHMEM_HELPER=y +CONFIG_DRM_SCHED=m + +# +# I2C encoder or helper chips +# +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_I2C_SIL164=m +CONFIG_DRM_I2C_NXP_TDA998X=m +CONFIG_DRM_I2C_NXP_TDA9950=m +# end of I2C encoder or helper chips + +# +# ARM devices +# +# end of ARM devices + +CONFIG_DRM_RADEON=m +# CONFIG_DRM_RADEON_USERPTR is not set +CONFIG_DRM_AMDGPU=m +CONFIG_DRM_AMDGPU_SI=y +CONFIG_DRM_AMDGPU_CIK=y +CONFIG_DRM_AMDGPU_USERPTR=y + +# +# ACP (Audio CoProcessor) Configuration +# +CONFIG_DRM_AMD_ACP=y +# end of ACP (Audio CoProcessor) Configuration + +# +# Display Engine Configuration +# +CONFIG_DRM_AMD_DC=y +CONFIG_DRM_AMD_DC_DCN=y +# CONFIG_DRM_AMD_DC_HDCP is not set +# CONFIG_DRM_AMD_DC_SI is not set +# CONFIG_DEBUG_KERNEL_DC is not set +# CONFIG_DRM_AMD_SECURE_DISPLAY is not set +# end of Display Engine Configuration + +CONFIG_HSA_AMD=y +CONFIG_HSA_AMD_SVM=y +CONFIG_DRM_NOUVEAU=m +# CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT is not set +CONFIG_NOUVEAU_DEBUG=5 +CONFIG_NOUVEAU_DEBUG_DEFAULT=3 +# CONFIG_NOUVEAU_DEBUG_MMU is not set +# CONFIG_NOUVEAU_DEBUG_PUSH is not set +CONFIG_DRM_NOUVEAU_BACKLIGHT=y +# CONFIG_DRM_NOUVEAU_SVM is not set +CONFIG_DRM_I915=m +CONFIG_DRM_I915_FORCE_PROBE="" +CONFIG_DRM_I915_CAPTURE_ERROR=y +CONFIG_DRM_I915_COMPRESS_ERROR=y +CONFIG_DRM_I915_USERPTR=y +CONFIG_DRM_I915_GVT=y +CONFIG_DRM_I915_GVT_KVMGT=m + +# +# drm/i915 Debugging +# +# CONFIG_DRM_I915_WERROR is not set +# CONFIG_DRM_I915_DEBUG is not set +# CONFIG_DRM_I915_DEBUG_MMIO is not set +# CONFIG_DRM_I915_SW_FENCE_DEBUG_OBJECTS is not set +# CONFIG_DRM_I915_SW_FENCE_CHECK_DAG is not set +# CONFIG_DRM_I915_DEBUG_GUC is not set +# CONFIG_DRM_I915_SELFTEST is not set +# CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set +# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set +# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set +# end of drm/i915 Debugging + +# +# drm/i915 Profile Guided Optimisation +# +CONFIG_DRM_I915_REQUEST_TIMEOUT=20000 +CONFIG_DRM_I915_FENCE_TIMEOUT=10000 +CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND=250 +CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500 +CONFIG_DRM_I915_PREEMPT_TIMEOUT=640 +CONFIG_DRM_I915_MAX_REQUEST_BUSYWAIT=8000 +CONFIG_DRM_I915_STOP_TIMEOUT=100 +CONFIG_DRM_I915_TIMESLICE_DURATION=1 +# end of drm/i915 Profile Guided Optimisation + +CONFIG_DRM_VGEM=m +CONFIG_DRM_VKMS=m +CONFIG_DRM_VMWGFX=m +CONFIG_DRM_VMWGFX_FBCON=y +# CONFIG_DRM_VMWGFX_MKSSTATS is not set +CONFIG_DRM_GMA500=m +CONFIG_DRM_UDL=m +CONFIG_DRM_AST=m +CONFIG_DRM_MGAG200=m +CONFIG_DRM_QXL=m +CONFIG_DRM_VIRTIO_GPU=m +CONFIG_DRM_PANEL=y + +# +# Display Panels +# +CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m +# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set +# end of Display Panels + +CONFIG_DRM_BRIDGE=y +CONFIG_DRM_PANEL_BRIDGE=y + +# +# Display Interface Bridges +# +CONFIG_DRM_ANALOGIX_ANX78XX=m +CONFIG_DRM_ANALOGIX_DP=m +# end of Display Interface Bridges + +# CONFIG_DRM_ETNAVIV is not set +CONFIG_DRM_BOCHS=m +CONFIG_DRM_CIRRUS_QEMU=m +CONFIG_DRM_GM12U320=m +# CONFIG_DRM_SIMPLEDRM is not set +CONFIG_TINYDRM_HX8357D=m +CONFIG_TINYDRM_ILI9225=m +CONFIG_TINYDRM_ILI9341=m +# CONFIG_TINYDRM_ILI9486 is not set +CONFIG_TINYDRM_MI0283QT=m +CONFIG_TINYDRM_REPAPER=m +CONFIG_TINYDRM_ST7586=m +CONFIG_TINYDRM_ST7735R=m +CONFIG_DRM_XEN=y +CONFIG_DRM_XEN_FRONTEND=m +CONFIG_DRM_VBOXVIDEO=m +# CONFIG_DRM_GUD is not set +# CONFIG_DRM_HYPERV is not set +# CONFIG_DRM_LEGACY is not set +CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y + +# +# Frame buffer Devices +# +CONFIG_FB_CMDLINE=y +CONFIG_FB_NOTIFY=y +CONFIG_FB=y +CONFIG_FIRMWARE_EDID=y +CONFIG_FB_DDC=m +CONFIG_FB_BOOT_VESA_SUPPORT=y +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +CONFIG_FB_SYS_FILLRECT=y +CONFIG_FB_SYS_COPYAREA=y +CONFIG_FB_SYS_IMAGEBLIT=y +# CONFIG_FB_FOREIGN_ENDIAN is not set +CONFIG_FB_SYS_FOPS=y +CONFIG_FB_DEFERRED_IO=y +CONFIG_FB_HECUBA=m +CONFIG_FB_SVGALIB=m +CONFIG_FB_BACKLIGHT=m +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y + +# +# Frame buffer hardware drivers +# +CONFIG_FB_CIRRUS=m +CONFIG_FB_PM2=m +CONFIG_FB_PM2_FIFO_DISCONNECT=y +CONFIG_FB_CYBER2000=m +CONFIG_FB_CYBER2000_DDC=y +CONFIG_FB_ARC=m +CONFIG_FB_ASILIANT=y +CONFIG_FB_IMSTT=y +CONFIG_FB_VGA16=m +CONFIG_FB_UVESA=m +CONFIG_FB_VESA=y +CONFIG_FB_EFI=y +CONFIG_FB_N411=m +CONFIG_FB_HGA=m +CONFIG_FB_OPENCORES=m +CONFIG_FB_S1D13XXX=m +CONFIG_FB_NVIDIA=m +CONFIG_FB_NVIDIA_I2C=y +# CONFIG_FB_NVIDIA_DEBUG is not set +CONFIG_FB_NVIDIA_BACKLIGHT=y +CONFIG_FB_RIVA=m +CONFIG_FB_RIVA_I2C=y +# CONFIG_FB_RIVA_DEBUG is not set +CONFIG_FB_RIVA_BACKLIGHT=y +CONFIG_FB_I740=m +CONFIG_FB_LE80578=m +CONFIG_FB_CARILLO_RANCH=m +CONFIG_FB_INTEL=m +# CONFIG_FB_INTEL_DEBUG is not set +CONFIG_FB_INTEL_I2C=y +CONFIG_FB_MATROX=m +CONFIG_FB_MATROX_MILLENIUM=y +CONFIG_FB_MATROX_MYSTIQUE=y +CONFIG_FB_MATROX_G=y +CONFIG_FB_MATROX_I2C=m +CONFIG_FB_MATROX_MAVEN=m +CONFIG_FB_RADEON=m +CONFIG_FB_RADEON_I2C=y +CONFIG_FB_RADEON_BACKLIGHT=y +# CONFIG_FB_RADEON_DEBUG is not set +CONFIG_FB_ATY128=m +CONFIG_FB_ATY128_BACKLIGHT=y +CONFIG_FB_ATY=m +CONFIG_FB_ATY_CT=y +# CONFIG_FB_ATY_GENERIC_LCD is not set +CONFIG_FB_ATY_GX=y +CONFIG_FB_ATY_BACKLIGHT=y +CONFIG_FB_S3=m +CONFIG_FB_S3_DDC=y +CONFIG_FB_SAVAGE=m +CONFIG_FB_SAVAGE_I2C=y +# CONFIG_FB_SAVAGE_ACCEL is not set +CONFIG_FB_SIS=m +CONFIG_FB_SIS_300=y +CONFIG_FB_SIS_315=y +CONFIG_FB_VIA=m +# CONFIG_FB_VIA_DIRECT_PROCFS is not set +CONFIG_FB_VIA_X_COMPATIBILITY=y +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_KYRO=m +CONFIG_FB_3DFX=m +# CONFIG_FB_3DFX_ACCEL is not set +# CONFIG_FB_3DFX_I2C is not set +CONFIG_FB_VOODOO1=m +CONFIG_FB_VT8623=m +CONFIG_FB_TRIDENT=m +CONFIG_FB_ARK=m +CONFIG_FB_PM3=m +CONFIG_FB_CARMINE=m +CONFIG_FB_CARMINE_DRAM_EVAL=y +# CONFIG_CARMINE_DRAM_CUSTOM is not set +CONFIG_FB_SM501=m +CONFIG_FB_SMSCUFX=m +CONFIG_FB_UDL=m +# CONFIG_FB_IBM_GXT4500 is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_XEN_FBDEV_FRONTEND=m +CONFIG_FB_METRONOME=m +CONFIG_FB_MB862XX=m +CONFIG_FB_MB862XX_PCI_GDC=y +CONFIG_FB_MB862XX_I2C=y +CONFIG_FB_HYPERV=m +CONFIG_FB_SIMPLE=y +# CONFIG_FB_SSD1307 is not set +CONFIG_FB_SM712=m +# end of Frame buffer Devices + +# +# Backlight & LCD device support +# +CONFIG_LCD_CLASS_DEVICE=m +CONFIG_LCD_L4F00242T03=m +CONFIG_LCD_LMS283GF05=m +CONFIG_LCD_LTV350QV=m +CONFIG_LCD_ILI922X=m +CONFIG_LCD_ILI9320=m +CONFIG_LCD_TDO24M=m +CONFIG_LCD_VGG2432A4=m +CONFIG_LCD_PLATFORM=m +CONFIG_LCD_AMS369FG06=m +CONFIG_LCD_LMS501KF03=m +CONFIG_LCD_HX8357=m +CONFIG_LCD_OTM3225A=m +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_KTD253 is not set +CONFIG_BACKLIGHT_LM3533=m +CONFIG_BACKLIGHT_CARILLO_RANCH=m +CONFIG_BACKLIGHT_PWM=m +CONFIG_BACKLIGHT_DA903X=m +CONFIG_BACKLIGHT_DA9052=m +CONFIG_BACKLIGHT_MAX8925=m +CONFIG_BACKLIGHT_APPLE=m +# CONFIG_BACKLIGHT_QCOM_WLED is not set +CONFIG_BACKLIGHT_SAHARA=m +CONFIG_BACKLIGHT_WM831X=m +CONFIG_BACKLIGHT_ADP5520=m +CONFIG_BACKLIGHT_ADP8860=m +CONFIG_BACKLIGHT_ADP8870=m +CONFIG_BACKLIGHT_88PM860X=m +CONFIG_BACKLIGHT_PCF50633=m +CONFIG_BACKLIGHT_AAT2870=m +CONFIG_BACKLIGHT_LM3630A=m +CONFIG_BACKLIGHT_LM3639=m +CONFIG_BACKLIGHT_LP855X=m +CONFIG_BACKLIGHT_LP8788=m +CONFIG_BACKLIGHT_PANDORA=m +CONFIG_BACKLIGHT_SKY81452=m +CONFIG_BACKLIGHT_AS3711=m +CONFIG_BACKLIGHT_GPIO=m +CONFIG_BACKLIGHT_LV5207LP=m +CONFIG_BACKLIGHT_BD6107=m +CONFIG_BACKLIGHT_ARCXCNN=m +CONFIG_BACKLIGHT_RAVE_SP=m +# end of Backlight & LCD device support + +CONFIG_VGASTATE=m +CONFIG_VIDEOMODE_HELPERS=y +CONFIG_HDMI=y + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +CONFIG_DUMMY_CONSOLE=y +CONFIG_DUMMY_CONSOLE_COLUMNS=80 +CONFIG_DUMMY_CONSOLE_ROWS=25 +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y +# end of Console display driver support + +# CONFIG_LOGO is not set +# end of Graphics support + +CONFIG_SOUND=m +CONFIG_SOUND_OSS_CORE=y +# CONFIG_SOUND_OSS_CORE_PRECLAIM is not set +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_PCM_ELD=y +CONFIG_SND_PCM_IEC958=y +CONFIG_SND_DMAENGINE_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_SEQ_DEVICE=m +CONFIG_SND_RAWMIDI=m +CONFIG_SND_COMPRESS_OFFLOAD=m +CONFIG_SND_JACK=y +CONFIG_SND_JACK_INPUT_DEV=y +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +# CONFIG_SND_PCM_OSS is not set +CONFIG_SND_PCM_TIMER=y +CONFIG_SND_HRTIMER=m +CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_SND_MAX_CARDS=32 +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_PROC_FS=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set +CONFIG_SND_VMASTER=y +CONFIG_SND_DMA_SGBUF=y +CONFIG_SND_CTL_LED=m +CONFIG_SND_SEQUENCER=m +CONFIG_SND_SEQ_DUMMY=m +# CONFIG_SND_SEQUENCER_OSS is not set +CONFIG_SND_SEQ_HRTIMER_DEFAULT=y +CONFIG_SND_SEQ_MIDI_EVENT=m +CONFIG_SND_SEQ_MIDI=m +CONFIG_SND_SEQ_MIDI_EMUL=m +CONFIG_SND_SEQ_VIRMIDI=m +CONFIG_SND_MPU401_UART=m +CONFIG_SND_OPL3_LIB=m +CONFIG_SND_OPL3_LIB_SEQ=m +CONFIG_SND_VX_LIB=m +CONFIG_SND_AC97_CODEC=m +CONFIG_SND_DRIVERS=y +CONFIG_SND_PCSP=m +CONFIG_SND_DUMMY=m +CONFIG_SND_ALOOP=m +CONFIG_SND_VIRMIDI=m +CONFIG_SND_MTPAV=m +CONFIG_SND_MTS64=m +CONFIG_SND_SERIAL_U16550=m +CONFIG_SND_MPU401=m +CONFIG_SND_PORTMAN2X4=m +CONFIG_SND_AC97_POWER_SAVE=y +CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0 +CONFIG_SND_SB_COMMON=m +CONFIG_SND_PCI=y +CONFIG_SND_AD1889=m +CONFIG_SND_ALS300=m +CONFIG_SND_ALS4000=m +CONFIG_SND_ALI5451=m +CONFIG_SND_ASIHPI=m +CONFIG_SND_ATIIXP=m +CONFIG_SND_ATIIXP_MODEM=m +CONFIG_SND_AU8810=m +CONFIG_SND_AU8820=m +CONFIG_SND_AU8830=m +CONFIG_SND_AW2=m +CONFIG_SND_AZT3328=m +CONFIG_SND_BT87X=m +# CONFIG_SND_BT87X_OVERCLOCK is not set +CONFIG_SND_CA0106=m +CONFIG_SND_CMIPCI=m +CONFIG_SND_OXYGEN_LIB=m +CONFIG_SND_OXYGEN=m +CONFIG_SND_CS4281=m +CONFIG_SND_CS46XX=m +CONFIG_SND_CS46XX_NEW_DSP=y +CONFIG_SND_CTXFI=m +CONFIG_SND_DARLA20=m +CONFIG_SND_GINA20=m +CONFIG_SND_LAYLA20=m +CONFIG_SND_DARLA24=m +CONFIG_SND_GINA24=m +CONFIG_SND_LAYLA24=m +CONFIG_SND_MONA=m +CONFIG_SND_MIA=m +CONFIG_SND_ECHO3G=m +CONFIG_SND_INDIGO=m +CONFIG_SND_INDIGOIO=m +CONFIG_SND_INDIGODJ=m +CONFIG_SND_INDIGOIOX=m +CONFIG_SND_INDIGODJX=m +CONFIG_SND_EMU10K1=m +CONFIG_SND_EMU10K1_SEQ=m +CONFIG_SND_EMU10K1X=m +CONFIG_SND_ENS1370=m +CONFIG_SND_ENS1371=m +CONFIG_SND_ES1938=m +CONFIG_SND_ES1968=m +CONFIG_SND_ES1968_INPUT=y +CONFIG_SND_ES1968_RADIO=y +CONFIG_SND_FM801=m +CONFIG_SND_FM801_TEA575X_BOOL=y +CONFIG_SND_HDSP=m +CONFIG_SND_HDSPM=m +CONFIG_SND_ICE1712=m +CONFIG_SND_ICE1724=m +CONFIG_SND_INTEL8X0=m +CONFIG_SND_INTEL8X0M=m +CONFIG_SND_KORG1212=m +CONFIG_SND_LOLA=m +CONFIG_SND_LX6464ES=m +CONFIG_SND_MAESTRO3=m +CONFIG_SND_MAESTRO3_INPUT=y +CONFIG_SND_MIXART=m +CONFIG_SND_NM256=m +CONFIG_SND_PCXHR=m +CONFIG_SND_RIPTIDE=m +CONFIG_SND_RME32=m +CONFIG_SND_RME96=m +CONFIG_SND_RME9652=m +CONFIG_SND_SONICVIBES=m +CONFIG_SND_TRIDENT=m +CONFIG_SND_VIA82XX=m +CONFIG_SND_VIA82XX_MODEM=m +CONFIG_SND_VIRTUOSO=m +CONFIG_SND_VX222=m +CONFIG_SND_YMFPCI=m + +# +# HD-Audio +# +CONFIG_SND_HDA=m +CONFIG_SND_HDA_GENERIC_LEDS=y +CONFIG_SND_HDA_INTEL=m +CONFIG_SND_HDA_HWDEP=y +CONFIG_SND_HDA_RECONFIG=y +CONFIG_SND_HDA_INPUT_BEEP=y +CONFIG_SND_HDA_INPUT_BEEP_MODE=0 +CONFIG_SND_HDA_PATCH_LOADER=y +CONFIG_SND_HDA_CODEC_REALTEK=m +CONFIG_SND_HDA_CODEC_ANALOG=m +CONFIG_SND_HDA_CODEC_SIGMATEL=m +CONFIG_SND_HDA_CODEC_VIA=m +CONFIG_SND_HDA_CODEC_HDMI=m +CONFIG_SND_HDA_CODEC_CIRRUS=m +# CONFIG_SND_HDA_CODEC_CS8409 is not set +CONFIG_SND_HDA_CODEC_CONEXANT=m +CONFIG_SND_HDA_CODEC_CA0110=m +CONFIG_SND_HDA_CODEC_CA0132=m +CONFIG_SND_HDA_CODEC_CA0132_DSP=y +CONFIG_SND_HDA_CODEC_CMEDIA=m +CONFIG_SND_HDA_CODEC_SI3054=m +CONFIG_SND_HDA_GENERIC=m +CONFIG_SND_HDA_POWER_SAVE_DEFAULT=1 +# CONFIG_SND_HDA_INTEL_HDMI_SILENT_STREAM is not set +# end of HD-Audio + +CONFIG_SND_HDA_CORE=m +CONFIG_SND_HDA_DSP_LOADER=y +CONFIG_SND_HDA_COMPONENT=y +CONFIG_SND_HDA_I915=y +CONFIG_SND_HDA_EXT_CORE=m +CONFIG_SND_HDA_PREALLOC_SIZE=0 +CONFIG_SND_INTEL_NHLT=y +CONFIG_SND_INTEL_DSP_CONFIG=m +CONFIG_SND_INTEL_SOUNDWIRE_ACPI=m +# CONFIG_SND_INTEL_BYT_PREFER_SOF is not set +CONFIG_SND_SPI=y +CONFIG_SND_USB=y +CONFIG_SND_USB_AUDIO=m +CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y +CONFIG_SND_USB_UA101=m +CONFIG_SND_USB_USX2Y=m +CONFIG_SND_USB_CAIAQ=m +CONFIG_SND_USB_CAIAQ_INPUT=y +CONFIG_SND_USB_US122L=m +CONFIG_SND_USB_6FIRE=m +CONFIG_SND_USB_HIFACE=m +CONFIG_SND_BCD2000=m +CONFIG_SND_USB_LINE6=m +CONFIG_SND_USB_POD=m +CONFIG_SND_USB_PODHD=m +CONFIG_SND_USB_TONEPORT=m +CONFIG_SND_USB_VARIAX=m +CONFIG_SND_FIREWIRE=y +CONFIG_SND_FIREWIRE_LIB=m +CONFIG_SND_DICE=m +CONFIG_SND_OXFW=m +CONFIG_SND_ISIGHT=m +CONFIG_SND_FIREWORKS=m +CONFIG_SND_BEBOB=m +CONFIG_SND_FIREWIRE_DIGI00X=m +CONFIG_SND_FIREWIRE_TASCAM=m +CONFIG_SND_FIREWIRE_MOTU=m +CONFIG_SND_FIREFACE=m +CONFIG_SND_PCMCIA=y +CONFIG_SND_VXPOCKET=m +CONFIG_SND_PDAUDIOCF=m +CONFIG_SND_SOC=m +CONFIG_SND_SOC_AC97_BUS=y +CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y +CONFIG_SND_SOC_COMPRESS=y +CONFIG_SND_SOC_TOPOLOGY=y +CONFIG_SND_SOC_ACPI=m +# CONFIG_SND_SOC_ADI is not set +CONFIG_SND_SOC_AMD_ACP=m +CONFIG_SND_SOC_AMD_CZ_DA7219MX98357_MACH=m +CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m +CONFIG_SND_SOC_AMD_ACP3x=m +# CONFIG_SND_SOC_AMD_RV_RT5682_MACH is not set +CONFIG_SND_SOC_AMD_RENOIR=m +CONFIG_SND_SOC_AMD_RENOIR_MACH=m +# CONFIG_SND_SOC_AMD_ACP5x is not set +CONFIG_SND_ATMEL_SOC=m +# CONFIG_SND_BCM63XX_I2S_WHISTLER is not set +CONFIG_SND_DESIGNWARE_I2S=m +CONFIG_SND_DESIGNWARE_PCM=y + +# +# SoC Audio for Freescale CPUs +# + +# +# Common SoC Audio options for Freescale CPUs: +# +CONFIG_SND_SOC_FSL_ASRC=m +CONFIG_SND_SOC_FSL_SAI=m +# CONFIG_SND_SOC_FSL_MQS is not set +CONFIG_SND_SOC_FSL_AUDMIX=m +CONFIG_SND_SOC_FSL_SSI=m +CONFIG_SND_SOC_FSL_SPDIF=m +CONFIG_SND_SOC_FSL_ESAI=m +CONFIG_SND_SOC_FSL_MICFIL=m +# CONFIG_SND_SOC_FSL_EASRC is not set +# CONFIG_SND_SOC_FSL_XCVR is not set +# CONFIG_SND_SOC_FSL_RPMSG is not set +CONFIG_SND_SOC_IMX_AUDMUX=m +# end of SoC Audio for Freescale CPUs + +CONFIG_SND_I2S_HI6210_I2S=m +CONFIG_SND_SOC_IMG=y +CONFIG_SND_SOC_IMG_I2S_IN=m +CONFIG_SND_SOC_IMG_I2S_OUT=m +CONFIG_SND_SOC_IMG_PARALLEL_OUT=m +CONFIG_SND_SOC_IMG_SPDIF_IN=m +CONFIG_SND_SOC_IMG_SPDIF_OUT=m +CONFIG_SND_SOC_IMG_PISTACHIO_INTERNAL_DAC=m +CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y +CONFIG_SND_SOC_INTEL_SST=m +# CONFIG_SND_SOC_INTEL_CATPT is not set +CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=m +CONFIG_SND_SST_ATOM_HIFI2_PLATFORM_PCI=m +CONFIG_SND_SST_ATOM_HIFI2_PLATFORM_ACPI=m +# CONFIG_SND_SOC_INTEL_SKYLAKE is not set +CONFIG_SND_SOC_INTEL_SKL=m +CONFIG_SND_SOC_INTEL_APL=m +CONFIG_SND_SOC_INTEL_KBL=m +CONFIG_SND_SOC_INTEL_GLK=m +# CONFIG_SND_SOC_INTEL_CNL is not set +# CONFIG_SND_SOC_INTEL_CFL is not set +# CONFIG_SND_SOC_INTEL_CML_H is not set +# CONFIG_SND_SOC_INTEL_CML_LP is not set +CONFIG_SND_SOC_INTEL_SKYLAKE_FAMILY=m +CONFIG_SND_SOC_INTEL_SKYLAKE_SSP_CLK=m +# CONFIG_SND_SOC_INTEL_SKYLAKE_HDAUDIO_CODEC is not set +CONFIG_SND_SOC_INTEL_SKYLAKE_COMMON=m +CONFIG_SND_SOC_ACPI_INTEL_MATCH=m +CONFIG_SND_SOC_INTEL_MACH=y +# CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES is not set +CONFIG_SND_SOC_INTEL_HDA_DSP_COMMON=m +CONFIG_SND_SOC_INTEL_SOF_MAXIM_COMMON=m +# CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH is not set +CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH=m +CONFIG_SND_SOC_INTEL_BROADWELL_MACH=m +CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH=m +CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH=m +# CONFIG_SND_SOC_INTEL_BYTCR_WM5102_MACH is not set +CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m +CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m +CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m +CONFIG_SND_SOC_INTEL_CHT_BSW_NAU8824_MACH=m +CONFIG_SND_SOC_INTEL_BYT_CHT_CX2072X_MACH=m +CONFIG_SND_SOC_INTEL_BYT_CHT_DA7213_MACH=m +CONFIG_SND_SOC_INTEL_BYT_CHT_ES8316_MACH=m +# CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH is not set +CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m +CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m +CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=m +CONFIG_SND_SOC_INTEL_DA7219_MAX98357A_GENERIC=m +CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_COMMON=m +CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH=m +CONFIG_SND_SOC_INTEL_BXT_RT298_MACH=m +# CONFIG_SND_SOC_INTEL_SOF_WM8804_MACH is not set +CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m +CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m +CONFIG_SND_SOC_INTEL_KBL_DA7219_MAX98357A_MACH=m +CONFIG_SND_SOC_INTEL_KBL_DA7219_MAX98927_MACH=m +CONFIG_SND_SOC_INTEL_KBL_RT5660_MACH=m +# CONFIG_SND_SOC_INTEL_GLK_DA7219_MAX98357A_MACH is not set +CONFIG_SND_SOC_INTEL_GLK_RT5682_MAX98357A_MACH=m +CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m +CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH=m +# CONFIG_SND_SOC_INTEL_SOF_CS42L42_MACH is not set +# CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH is not set +CONFIG_SND_SOC_INTEL_CML_LP_DA7219_MAX98357A_MACH=m +# CONFIG_SND_SOC_INTEL_SOF_CML_RT1011_RT5682_MACH is not set +# CONFIG_SND_SOC_INTEL_SOF_DA7219_MAX98373_MACH is not set +# CONFIG_SND_SOC_INTEL_EHL_RT5660_MACH is not set +CONFIG_SND_SOC_MTK_BTCVSD=m +CONFIG_SND_SOC_SOF_TOPLEVEL=y +CONFIG_SND_SOC_SOF_PCI_DEV=m +CONFIG_SND_SOC_SOF_PCI=m +CONFIG_SND_SOC_SOF_ACPI=m +CONFIG_SND_SOC_SOF_ACPI_DEV=m +# CONFIG_SND_SOC_SOF_DEBUG_PROBES is not set +# CONFIG_SND_SOC_SOF_DEVELOPER_SUPPORT is not set +CONFIG_SND_SOC_SOF=m +CONFIG_SND_SOC_SOF_PROBE_WORK_QUEUE=y +CONFIG_SND_SOC_SOF_INTEL_TOPLEVEL=y +CONFIG_SND_SOC_SOF_INTEL_HIFI_EP_IPC=m +CONFIG_SND_SOC_SOF_INTEL_ATOM_HIFI_EP=m +CONFIG_SND_SOC_SOF_INTEL_COMMON=m +CONFIG_SND_SOC_SOF_BAYTRAIL=m +CONFIG_SND_SOC_SOF_BROADWELL=m +CONFIG_SND_SOC_SOF_MERRIFIELD=m +CONFIG_SND_SOC_SOF_INTEL_APL=m +CONFIG_SND_SOC_SOF_APOLLOLAKE=m +CONFIG_SND_SOC_SOF_GEMINILAKE=m +CONFIG_SND_SOC_SOF_INTEL_CNL=m +CONFIG_SND_SOC_SOF_CANNONLAKE=m +CONFIG_SND_SOC_SOF_COFFEELAKE=m +CONFIG_SND_SOC_SOF_COMETLAKE=m +CONFIG_SND_SOC_SOF_INTEL_ICL=m +CONFIG_SND_SOC_SOF_ICELAKE=m +CONFIG_SND_SOC_SOF_JASPERLAKE=m +CONFIG_SND_SOC_SOF_INTEL_TGL=m +CONFIG_SND_SOC_SOF_TIGERLAKE=m +CONFIG_SND_SOC_SOF_ELKHARTLAKE=m +CONFIG_SND_SOC_SOF_ALDERLAKE=m +CONFIG_SND_SOC_SOF_HDA_COMMON=m +CONFIG_SND_SOC_SOF_HDA_LINK=y +CONFIG_SND_SOC_SOF_HDA_AUDIO_CODEC=y +CONFIG_SND_SOC_SOF_HDA_LINK_BASELINE=m +CONFIG_SND_SOC_SOF_HDA=m +CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE=m +CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE=m +CONFIG_SND_SOC_SOF_XTENSA=m + +# +# STMicroelectronics STM32 SOC audio support +# +# end of STMicroelectronics STM32 SOC audio support + +CONFIG_SND_SOC_XILINX_I2S=m +CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER=m +CONFIG_SND_SOC_XILINX_SPDIF=m +CONFIG_SND_SOC_XTFPGA_I2S=m +CONFIG_SND_SOC_I2C_AND_SPI=m + +# +# CODEC drivers +# +CONFIG_SND_SOC_AC97_CODEC=m +CONFIG_SND_SOC_ADAU_UTILS=m +# CONFIG_SND_SOC_ADAU1372_I2C is not set +# CONFIG_SND_SOC_ADAU1372_SPI is not set +CONFIG_SND_SOC_ADAU1701=m +CONFIG_SND_SOC_ADAU17X1=m +CONFIG_SND_SOC_ADAU1761=m +CONFIG_SND_SOC_ADAU1761_I2C=m +CONFIG_SND_SOC_ADAU1761_SPI=m +CONFIG_SND_SOC_ADAU7002=m +# CONFIG_SND_SOC_ADAU7118_HW is not set +# CONFIG_SND_SOC_ADAU7118_I2C is not set +CONFIG_SND_SOC_AK4104=m +CONFIG_SND_SOC_AK4118=m +CONFIG_SND_SOC_AK4458=m +CONFIG_SND_SOC_AK4554=m +CONFIG_SND_SOC_AK4613=m +CONFIG_SND_SOC_AK4642=m +CONFIG_SND_SOC_AK5386=m +CONFIG_SND_SOC_AK5558=m +CONFIG_SND_SOC_ALC5623=m +CONFIG_SND_SOC_BD28623=m +CONFIG_SND_SOC_BT_SCO=m +CONFIG_SND_SOC_CROS_EC_CODEC=m +CONFIG_SND_SOC_CS35L32=m +CONFIG_SND_SOC_CS35L33=m +CONFIG_SND_SOC_CS35L34=m +CONFIG_SND_SOC_CS35L35=m +CONFIG_SND_SOC_CS35L36=m +CONFIG_SND_SOC_CS42L42=m +CONFIG_SND_SOC_CS42L51=m +CONFIG_SND_SOC_CS42L51_I2C=m +CONFIG_SND_SOC_CS42L52=m +CONFIG_SND_SOC_CS42L56=m +CONFIG_SND_SOC_CS42L73=m +# CONFIG_SND_SOC_CS4234 is not set +CONFIG_SND_SOC_CS4265=m +CONFIG_SND_SOC_CS4270=m +CONFIG_SND_SOC_CS4271=m +CONFIG_SND_SOC_CS4271_I2C=m +CONFIG_SND_SOC_CS4271_SPI=m +CONFIG_SND_SOC_CS42XX8=m +CONFIG_SND_SOC_CS42XX8_I2C=m +CONFIG_SND_SOC_CS43130=m +CONFIG_SND_SOC_CS4341=m +CONFIG_SND_SOC_CS4349=m +CONFIG_SND_SOC_CS53L30=m +CONFIG_SND_SOC_CX2072X=m +CONFIG_SND_SOC_DA7213=m +CONFIG_SND_SOC_DA7219=m +CONFIG_SND_SOC_DMIC=m +CONFIG_SND_SOC_HDMI_CODEC=m +CONFIG_SND_SOC_ES7134=m +CONFIG_SND_SOC_ES7241=m +CONFIG_SND_SOC_ES8316=m +CONFIG_SND_SOC_ES8328=m +CONFIG_SND_SOC_ES8328_I2C=m +CONFIG_SND_SOC_ES8328_SPI=m +CONFIG_SND_SOC_GTM601=m +CONFIG_SND_SOC_HDAC_HDMI=m +CONFIG_SND_SOC_HDAC_HDA=m +# CONFIG_SND_SOC_ICS43432 is not set +CONFIG_SND_SOC_INNO_RK3036=m +CONFIG_SND_SOC_MAX98088=m +CONFIG_SND_SOC_MAX98090=m +CONFIG_SND_SOC_MAX98357A=m +CONFIG_SND_SOC_MAX98504=m +CONFIG_SND_SOC_MAX9867=m +CONFIG_SND_SOC_MAX98927=m +CONFIG_SND_SOC_MAX98373=m +CONFIG_SND_SOC_MAX98373_I2C=m +# CONFIG_SND_SOC_MAX98373_SDW is not set +CONFIG_SND_SOC_MAX98390=m +CONFIG_SND_SOC_MAX9860=m +CONFIG_SND_SOC_MSM8916_WCD_ANALOG=m +CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=m +CONFIG_SND_SOC_PCM1681=m +CONFIG_SND_SOC_PCM1789=m +CONFIG_SND_SOC_PCM1789_I2C=m +CONFIG_SND_SOC_PCM179X=m +CONFIG_SND_SOC_PCM179X_I2C=m +CONFIG_SND_SOC_PCM179X_SPI=m +CONFIG_SND_SOC_PCM186X=m +CONFIG_SND_SOC_PCM186X_I2C=m +CONFIG_SND_SOC_PCM186X_SPI=m +CONFIG_SND_SOC_PCM3060=m +CONFIG_SND_SOC_PCM3060_I2C=m +CONFIG_SND_SOC_PCM3060_SPI=m +CONFIG_SND_SOC_PCM3168A=m +CONFIG_SND_SOC_PCM3168A_I2C=m +CONFIG_SND_SOC_PCM3168A_SPI=m +# CONFIG_SND_SOC_PCM5102A is not set +CONFIG_SND_SOC_PCM512x=m +CONFIG_SND_SOC_PCM512x_I2C=m +CONFIG_SND_SOC_PCM512x_SPI=m +CONFIG_SND_SOC_RK3328=m +CONFIG_SND_SOC_RL6231=m +CONFIG_SND_SOC_RL6347A=m +CONFIG_SND_SOC_RT286=m +CONFIG_SND_SOC_RT298=m +CONFIG_SND_SOC_RT1011=m +CONFIG_SND_SOC_RT1015=m +CONFIG_SND_SOC_RT1015P=m +# CONFIG_SND_SOC_RT1308_SDW is not set +# CONFIG_SND_SOC_RT1316_SDW is not set +CONFIG_SND_SOC_RT5514=m +CONFIG_SND_SOC_RT5514_SPI=m +CONFIG_SND_SOC_RT5616=m +CONFIG_SND_SOC_RT5631=m +CONFIG_SND_SOC_RT5640=m +CONFIG_SND_SOC_RT5645=m +CONFIG_SND_SOC_RT5651=m +# CONFIG_SND_SOC_RT5659 is not set +CONFIG_SND_SOC_RT5660=m +CONFIG_SND_SOC_RT5663=m +CONFIG_SND_SOC_RT5670=m +CONFIG_SND_SOC_RT5677=m +CONFIG_SND_SOC_RT5677_SPI=m +CONFIG_SND_SOC_RT5682=m +CONFIG_SND_SOC_RT5682_I2C=m +# CONFIG_SND_SOC_RT5682_SDW is not set +# CONFIG_SND_SOC_RT700_SDW is not set +# CONFIG_SND_SOC_RT711_SDW is not set +# CONFIG_SND_SOC_RT711_SDCA_SDW is not set +# CONFIG_SND_SOC_RT715_SDW is not set +# CONFIG_SND_SOC_RT715_SDCA_SDW is not set +# CONFIG_SND_SOC_SDW_MOCKUP is not set +CONFIG_SND_SOC_SGTL5000=m +CONFIG_SND_SOC_SI476X=m +CONFIG_SND_SOC_SIGMADSP=m +CONFIG_SND_SOC_SIGMADSP_I2C=m +CONFIG_SND_SOC_SIGMADSP_REGMAP=m +CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m +# CONFIG_SND_SOC_SIMPLE_MUX is not set +CONFIG_SND_SOC_SPDIF=m +CONFIG_SND_SOC_SSM2305=m +# CONFIG_SND_SOC_SSM2518 is not set +CONFIG_SND_SOC_SSM2602=m +CONFIG_SND_SOC_SSM2602_SPI=m +CONFIG_SND_SOC_SSM2602_I2C=m +CONFIG_SND_SOC_SSM4567=m +CONFIG_SND_SOC_STA32X=m +CONFIG_SND_SOC_STA350=m +CONFIG_SND_SOC_STI_SAS=m +CONFIG_SND_SOC_TAS2552=m +# CONFIG_SND_SOC_TAS2562 is not set +# CONFIG_SND_SOC_TAS2764 is not set +# CONFIG_SND_SOC_TAS2770 is not set +CONFIG_SND_SOC_TAS5086=m +CONFIG_SND_SOC_TAS571X=m +CONFIG_SND_SOC_TAS5720=m +CONFIG_SND_SOC_TAS6424=m +CONFIG_SND_SOC_TDA7419=m +CONFIG_SND_SOC_TFA9879=m +# CONFIG_SND_SOC_TFA989X is not set +CONFIG_SND_SOC_TLV320AIC23=m +CONFIG_SND_SOC_TLV320AIC23_I2C=m +CONFIG_SND_SOC_TLV320AIC23_SPI=m +CONFIG_SND_SOC_TLV320AIC31XX=m +CONFIG_SND_SOC_TLV320AIC32X4=m +CONFIG_SND_SOC_TLV320AIC32X4_I2C=m +CONFIG_SND_SOC_TLV320AIC32X4_SPI=m +# CONFIG_SND_SOC_TLV320AIC3X_I2C is not set +# CONFIG_SND_SOC_TLV320AIC3X_SPI is not set +# CONFIG_SND_SOC_TLV320ADCX140 is not set +CONFIG_SND_SOC_TS3A227E=m +CONFIG_SND_SOC_TSCS42XX=m +CONFIG_SND_SOC_TSCS454=m +CONFIG_SND_SOC_UDA1334=m +CONFIG_SND_SOC_WCD9335=m +# CONFIG_SND_SOC_WCD938X_SDW is not set +CONFIG_SND_SOC_WM8510=m +CONFIG_SND_SOC_WM8523=m +CONFIG_SND_SOC_WM8524=m +CONFIG_SND_SOC_WM8580=m +CONFIG_SND_SOC_WM8711=m +CONFIG_SND_SOC_WM8728=m +CONFIG_SND_SOC_WM8731=m +CONFIG_SND_SOC_WM8737=m +CONFIG_SND_SOC_WM8741=m +CONFIG_SND_SOC_WM8750=m +CONFIG_SND_SOC_WM8753=m +CONFIG_SND_SOC_WM8770=m +CONFIG_SND_SOC_WM8776=m +CONFIG_SND_SOC_WM8782=m +CONFIG_SND_SOC_WM8804=m +CONFIG_SND_SOC_WM8804_I2C=m +CONFIG_SND_SOC_WM8804_SPI=m +CONFIG_SND_SOC_WM8903=m +CONFIG_SND_SOC_WM8904=m +CONFIG_SND_SOC_WM8960=m +CONFIG_SND_SOC_WM8962=m +CONFIG_SND_SOC_WM8974=m +CONFIG_SND_SOC_WM8978=m +CONFIG_SND_SOC_WM8985=m +# CONFIG_SND_SOC_WSA881X is not set +# CONFIG_SND_SOC_ZL38060 is not set +CONFIG_SND_SOC_MAX9759=m +CONFIG_SND_SOC_MT6351=m +CONFIG_SND_SOC_MT6358=m +# CONFIG_SND_SOC_MT6660 is not set +# CONFIG_SND_SOC_NAU8315 is not set +CONFIG_SND_SOC_NAU8540=m +CONFIG_SND_SOC_NAU8810=m +CONFIG_SND_SOC_NAU8822=m +CONFIG_SND_SOC_NAU8824=m +CONFIG_SND_SOC_NAU8825=m +CONFIG_SND_SOC_TPA6130A2=m +# CONFIG_SND_SOC_LPASS_WSA_MACRO is not set +# CONFIG_SND_SOC_LPASS_VA_MACRO is not set +# CONFIG_SND_SOC_LPASS_RX_MACRO is not set +# CONFIG_SND_SOC_LPASS_TX_MACRO is not set +# end of CODEC drivers + +CONFIG_SND_SIMPLE_CARD_UTILS=m +CONFIG_SND_SIMPLE_CARD=m +CONFIG_SND_X86=y +CONFIG_HDMI_LPE_AUDIO=m +CONFIG_SND_SYNTH_EMUX=m +CONFIG_SND_XEN_FRONTEND=m +# CONFIG_SND_VIRTIO is not set +CONFIG_AC97_BUS=m + +# +# HID support +# +CONFIG_HID=y +CONFIG_HID_BATTERY_STRENGTH=y +CONFIG_HIDRAW=y +CONFIG_UHID=y +CONFIG_HID_GENERIC=y + +# +# Special HID drivers +# +CONFIG_HID_A4TECH=y +CONFIG_HID_ACCUTOUCH=m +CONFIG_HID_ACRUX=y +CONFIG_HID_ACRUX_FF=y +CONFIG_HID_APPLE=y +# CONFIG_HID_APPLEIR is not set +# CONFIG_HID_ASUS is not set +CONFIG_HID_AUREAL=y +CONFIG_HID_BELKIN=y +# CONFIG_HID_BETOP_FF is not set +# CONFIG_HID_BIGBEN_FF is not set +CONFIG_HID_CHERRY=y +CONFIG_HID_CHICONY=y +CONFIG_HID_CORSAIR=y +CONFIG_HID_COUGAR=y +CONFIG_HID_MACALLY=y +# CONFIG_HID_PRODIKEYS is not set +CONFIG_HID_CMEDIA=y +# CONFIG_HID_CP2112 is not set +# CONFIG_HID_CREATIVE_SB0540 is not set +CONFIG_HID_CYPRESS=y +CONFIG_HID_DRAGONRISE=y +CONFIG_DRAGONRISE_FF=y +CONFIG_HID_EMS_FF=y +CONFIG_HID_ELAN=m +CONFIG_HID_ELECOM=y +# CONFIG_HID_ELO is not set +CONFIG_HID_EZKEY=y +# CONFIG_HID_FT260 is not set +CONFIG_HID_GEMBIRD=y +CONFIG_HID_GFRM=y +CONFIG_HID_GLORIOUS=m +CONFIG_HID_HOLTEK=m +CONFIG_HOLTEK_FF=y +CONFIG_HID_GOOGLE_HAMMER=m +CONFIG_HID_VIVALDI=y +CONFIG_HID_GT683R=m +CONFIG_HID_KEYTOUCH=y +CONFIG_HID_KYE=y +CONFIG_HID_UCLOGIC=m +CONFIG_HID_WALTOP=y +CONFIG_HID_VIEWSONIC=y +CONFIG_HID_GYRATION=y +CONFIG_HID_ICADE=y +CONFIG_HID_ITE=y +CONFIG_HID_JABRA=y +CONFIG_HID_TWINHAN=y +CONFIG_HID_KENSINGTON=y +CONFIG_HID_LCPOWER=y +CONFIG_HID_LED=y +CONFIG_HID_LENOVO=y +CONFIG_HID_LOGITECH=y +CONFIG_HID_LOGITECH_DJ=m +CONFIG_HID_LOGITECH_HIDPP=y +CONFIG_LOGITECH_FF=y +CONFIG_LOGIRUMBLEPAD2_FF=y +CONFIG_LOGIG940_FF=y +CONFIG_LOGIWHEELS_FF=y +CONFIG_HID_MAGICMOUSE=y +CONFIG_HID_MALTRON=y +CONFIG_HID_MAYFLASH=y +CONFIG_HID_REDRAGON=y +CONFIG_HID_MICROSOFT=y +CONFIG_HID_MONTEREY=y +CONFIG_HID_MULTITOUCH=y +CONFIG_HID_NTI=y +CONFIG_HID_NTRIG=m +CONFIG_HID_ORTEK=y +CONFIG_HID_PANTHERLORD=y +CONFIG_PANTHERLORD_FF=y +CONFIG_HID_PENMOUNT=m +CONFIG_HID_PETALYNX=y +CONFIG_HID_PICOLCD=y +CONFIG_HID_PICOLCD_FB=y +CONFIG_HID_PICOLCD_BACKLIGHT=y +CONFIG_HID_PICOLCD_LEDS=y +CONFIG_HID_PLANTRONICS=y +CONFIG_HID_PLAYSTATION=m +CONFIG_PLAYSTATION_FF=y +CONFIG_HID_PRIMAX=y +CONFIG_HID_RETRODE=m +CONFIG_HID_ROCCAT=m +CONFIG_HID_SAITEK=y +CONFIG_HID_SAMSUNG=y +# CONFIG_HID_SEMITEK is not set +CONFIG_HID_SONY=m +CONFIG_SONY_FF=y +CONFIG_HID_SPEEDLINK=y +CONFIG_HID_STEAM=y +CONFIG_HID_STEELSERIES=y +CONFIG_HID_SUNPLUS=y +CONFIG_HID_RMI=y +CONFIG_HID_GREENASIA=y +CONFIG_GREENASIA_FF=y +# CONFIG_HID_HYPERV_MOUSE is not set +CONFIG_HID_SMARTJOYPLUS=y +CONFIG_SMARTJOYPLUS_FF=y +CONFIG_HID_TIVO=y +CONFIG_HID_TOPSEED=y +CONFIG_HID_THINGM=y +CONFIG_HID_THRUSTMASTER=y +CONFIG_THRUSTMASTER_FF=y +CONFIG_HID_UDRAW_PS3=y +CONFIG_HID_U2FZERO=m +CONFIG_HID_WACOM=m +CONFIG_HID_WIIMOTE=y +CONFIG_HID_XINMO=y +CONFIG_HID_ZEROPLUS=y +CONFIG_ZEROPLUS_FF=y +CONFIG_HID_ZYDACRON=y +CONFIG_HID_SENSOR_HUB=y +CONFIG_HID_SENSOR_CUSTOM_SENSOR=m +CONFIG_HID_ALPS=y +# CONFIG_HID_MCP2221 is not set +# end of Special HID drivers + +# +# USB HID support +# +CONFIG_USB_HID=y +CONFIG_HID_PID=y +CONFIG_USB_HIDDEV=y +# end of USB HID support + +# +# I2C HID support +# +CONFIG_I2C_HID_ACPI=y +# end of I2C HID support + +CONFIG_I2C_HID_CORE=y + +# +# Intel ISH HID support +# +CONFIG_INTEL_ISH_HID=y +CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER=y +# end of Intel ISH HID support + +# +# AMD SFH HID Support +# +CONFIG_AMD_SFH_HID=y +# end of AMD SFH HID Support +# end of HID support + +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_SUPPORT=y +CONFIG_USB_COMMON=y +CONFIG_USB_LED_TRIG=y +CONFIG_USB_ULPI_BUS=y +CONFIG_USB_CONN_GPIO=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB=y +CONFIG_USB_PCI=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y + +# +# Miscellaneous USB options +# +CONFIG_USB_DEFAULT_PERSIST=y +# CONFIG_USB_FEW_INIT_RETRIES is not set +CONFIG_USB_DYNAMIC_MINORS=y +CONFIG_USB_OTG=y +# CONFIG_USB_OTG_PRODUCTLIST is not set +# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set +CONFIG_USB_OTG_FSM=y +CONFIG_USB_LEDS_TRIGGER_USBPORT=y +CONFIG_USB_AUTOSUSPEND_DELAY=2 +CONFIG_USB_MON=y + +# +# USB Host Controller Drivers +# +CONFIG_USB_C67X00_HCD=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_DBGCAP=y +CONFIG_USB_XHCI_PCI=y +# CONFIG_USB_XHCI_PCI_RENESAS is not set +CONFIG_USB_XHCI_PLATFORM=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +CONFIG_USB_EHCI_PCI=y +CONFIG_USB_EHCI_FSL=y +CONFIG_USB_EHCI_HCD_PLATFORM=y +CONFIG_USB_OXU210HP_HCD=y +CONFIG_USB_ISP116X_HCD=y +CONFIG_USB_FOTG210_HCD=y +CONFIG_USB_MAX3421_HCD=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PCI=y +CONFIG_USB_OHCI_HCD_PLATFORM=y +CONFIG_USB_UHCI_HCD=y +CONFIG_USB_U132_HCD=m +CONFIG_USB_SL811_HCD=y +CONFIG_USB_SL811_HCD_ISO=y +CONFIG_USB_SL811_CS=m +CONFIG_USB_R8A66597_HCD=y +CONFIG_USB_HCD_BCMA=m +CONFIG_USB_HCD_SSB=m +# CONFIG_USB_HCD_TEST_MODE is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=y +CONFIG_USB_PRINTER=y +CONFIG_USB_WDM=y +CONFIG_USB_TMC=y + +# +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may +# + +# +# also be needed; see USB_STORAGE Help for more info +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +CONFIG_USB_STORAGE_REALTEK=y +CONFIG_REALTEK_AUTOPM=y +CONFIG_USB_STORAGE_DATAFAB=y +CONFIG_USB_STORAGE_FREECOM=y +CONFIG_USB_STORAGE_ISD200=y +CONFIG_USB_STORAGE_USBAT=y +CONFIG_USB_STORAGE_SDDR09=y +CONFIG_USB_STORAGE_SDDR55=y +CONFIG_USB_STORAGE_JUMPSHOT=y +CONFIG_USB_STORAGE_ALAUDA=y +CONFIG_USB_STORAGE_ONETOUCH=y +CONFIG_USB_STORAGE_KARMA=y +CONFIG_USB_STORAGE_CYPRESS_ATACB=y +CONFIG_USB_STORAGE_ENE_UB6250=y +CONFIG_USB_UAS=y + +# +# USB Imaging devices +# +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +CONFIG_USBIP_CORE=y +CONFIG_USBIP_VHCI_HCD=y +CONFIG_USBIP_VHCI_HC_PORTS=8 +CONFIG_USBIP_VHCI_NR_HCS=1 +CONFIG_USBIP_HOST=y +CONFIG_USBIP_VUDC=y +# CONFIG_USBIP_DEBUG is not set +# CONFIG_USB_CDNS_SUPPORT is not set +CONFIG_USB_MUSB_HDRC=m +# CONFIG_USB_MUSB_HOST is not set +# CONFIG_USB_MUSB_GADGET is not set +CONFIG_USB_MUSB_DUAL_ROLE=y + +# +# Platform Glue Layer +# + +# +# MUSB DMA mode +# +CONFIG_MUSB_PIO_ONLY=y +CONFIG_USB_DWC3=m +CONFIG_USB_DWC3_ULPI=y +# CONFIG_USB_DWC3_HOST is not set +# CONFIG_USB_DWC3_GADGET is not set +CONFIG_USB_DWC3_DUAL_ROLE=y + +# +# Platform Glue Driver Support +# +CONFIG_USB_DWC3_PCI=m +CONFIG_USB_DWC3_HAPS=m +CONFIG_USB_DWC2=y +CONFIG_USB_DWC2_HOST=y + +# +# Gadget/Dual-role mode requires USB Gadget support to be enabled +# +# CONFIG_USB_DWC2_PERIPHERAL is not set +# CONFIG_USB_DWC2_DUAL_ROLE is not set +CONFIG_USB_DWC2_PCI=m +# CONFIG_USB_DWC2_DEBUG is not set +# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set +CONFIG_USB_CHIPIDEA=m +CONFIG_USB_CHIPIDEA_UDC=y +CONFIG_USB_CHIPIDEA_HOST=y +CONFIG_USB_CHIPIDEA_PCI=m +CONFIG_USB_CHIPIDEA_MSM=m +CONFIG_USB_CHIPIDEA_GENERIC=m +CONFIG_USB_ISP1760=m +CONFIG_USB_ISP1760_HCD=y +CONFIG_USB_ISP1761_UDC=y +# CONFIG_USB_ISP1760_HOST_ROLE is not set +# CONFIG_USB_ISP1760_GADGET_ROLE is not set +CONFIG_USB_ISP1760_DUAL_ROLE=y + +# +# USB port drivers +# +CONFIG_USB_USS720=m +CONFIG_USB_SERIAL=y +# CONFIG_USB_SERIAL_CONSOLE is not set +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_SIMPLE=m +CONFIG_USB_SERIAL_AIRCABLE=m +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_CH341=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +CONFIG_USB_SERIAL_CP210X=m +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_F81232=m +CONFIG_USB_SERIAL_F8153X=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_IUU=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_METRO=m +CONFIG_USB_SERIAL_MOS7720=m +CONFIG_USB_SERIAL_MOS7715_PARPORT=y +CONFIG_USB_SERIAL_MOS7840=m +CONFIG_USB_SERIAL_MXUPORT=m +CONFIG_USB_SERIAL_NAVMAN=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_OTI6858=m +CONFIG_USB_SERIAL_QCAUX=m +CONFIG_USB_SERIAL_QUALCOMM=m +CONFIG_USB_SERIAL_SPCP8X5=m +CONFIG_USB_SERIAL_SAFE=m +# CONFIG_USB_SERIAL_SAFE_PADDED is not set +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +CONFIG_USB_SERIAL_SYMBOL=m +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_WWAN=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_OMNINET=m +CONFIG_USB_SERIAL_OPTICON=m +CONFIG_USB_SERIAL_XSENS_MT=m +CONFIG_USB_SERIAL_WISHBONE=m +CONFIG_USB_SERIAL_SSU100=m +CONFIG_USB_SERIAL_QT2=m +CONFIG_USB_SERIAL_UPD78F0730=m +# CONFIG_USB_SERIAL_XR is not set +CONFIG_USB_SERIAL_DEBUG=m + +# +# USB Miscellaneous drivers +# +CONFIG_USB_EMI62=m +CONFIG_USB_EMI26=m +CONFIG_USB_ADUTUX=m +CONFIG_USB_SEVSEG=m +CONFIG_USB_LEGOTOWER=y +CONFIG_USB_LCD=y +CONFIG_USB_CYPRESS_CY7C63=m +CONFIG_USB_CYTHERM=m +CONFIG_USB_IDMOUSE=m +CONFIG_USB_FTDI_ELAN=m +CONFIG_USB_APPLEDISPLAY=y +CONFIG_APPLE_MFI_FASTCHARGE=m +CONFIG_USB_SISUSBVGA=m +CONFIG_USB_LD=y +CONFIG_USB_TRANCEVIBRATOR=m +CONFIG_USB_IOWARRIOR=m +CONFIG_USB_TEST=m +CONFIG_USB_EHSET_TEST_FIXTURE=m +CONFIG_USB_ISIGHTFW=m +CONFIG_USB_YUREX=m +CONFIG_USB_EZUSB_FX2=m +CONFIG_USB_HUB_USB251XB=m +CONFIG_USB_HSIC_USB3503=m +CONFIG_USB_HSIC_USB4604=m +CONFIG_USB_LINK_LAYER_TEST=m +CONFIG_USB_CHAOSKEY=m +CONFIG_USB_ATM=m +CONFIG_USB_SPEEDTOUCH=m +CONFIG_USB_CXACRU=m +CONFIG_USB_UEAGLEATM=m +CONFIG_USB_XUSBATM=m + +# +# USB Physical Layer drivers +# +CONFIG_USB_PHY=y +CONFIG_NOP_USB_XCEIV=m +CONFIG_USB_GPIO_VBUS=m +CONFIG_TAHVO_USB=m +CONFIG_TAHVO_USB_HOST_BY_DEFAULT=y +CONFIG_USB_ISP1301=m +# end of USB Physical Layer drivers + +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +# CONFIG_USB_GADGET_DEBUG_FS is not set +CONFIG_USB_GADGET_VBUS_DRAW=2 +CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 +CONFIG_U_SERIAL_CONSOLE=y + +# +# USB Peripheral Controller +# +CONFIG_USB_FOTG210_UDC=m +CONFIG_USB_GR_UDC=m +CONFIG_USB_R8A66597=m +CONFIG_USB_PXA27X=m +CONFIG_USB_MV_UDC=m +CONFIG_USB_MV_U3D=m +CONFIG_USB_SNP_CORE=m +# CONFIG_USB_M66592 is not set +CONFIG_USB_BDC_UDC=m +CONFIG_USB_AMD5536UDC=m +CONFIG_USB_NET2272=m +CONFIG_USB_NET2272_DMA=y +CONFIG_USB_NET2280=m +CONFIG_USB_GOKU=m +CONFIG_USB_EG20T=m +# CONFIG_USB_MAX3420_UDC is not set +# CONFIG_USB_DUMMY_HCD is not set +# end of USB Peripheral Controller + +CONFIG_USB_LIBCOMPOSITE=m +CONFIG_USB_F_ACM=m +CONFIG_USB_F_SS_LB=m +CONFIG_USB_U_SERIAL=m +CONFIG_USB_U_ETHER=m +CONFIG_USB_U_AUDIO=m +CONFIG_USB_F_SERIAL=m +CONFIG_USB_F_OBEX=m +CONFIG_USB_F_NCM=m +CONFIG_USB_F_ECM=m +CONFIG_USB_F_PHONET=m +CONFIG_USB_F_EEM=m +CONFIG_USB_F_SUBSET=m +CONFIG_USB_F_RNDIS=m +CONFIG_USB_F_MASS_STORAGE=m +CONFIG_USB_F_FS=m +CONFIG_USB_F_UAC1=m +CONFIG_USB_F_UAC1_LEGACY=m +CONFIG_USB_F_UAC2=m +CONFIG_USB_F_UVC=m +CONFIG_USB_F_MIDI=m +CONFIG_USB_F_HID=m +CONFIG_USB_F_PRINTER=m +CONFIG_USB_F_TCM=m +CONFIG_USB_CONFIGFS=m +CONFIG_USB_CONFIGFS_SERIAL=y +CONFIG_USB_CONFIGFS_ACM=y +CONFIG_USB_CONFIGFS_OBEX=y +CONFIG_USB_CONFIGFS_NCM=y +CONFIG_USB_CONFIGFS_ECM=y +CONFIG_USB_CONFIGFS_ECM_SUBSET=y +CONFIG_USB_CONFIGFS_RNDIS=y +CONFIG_USB_CONFIGFS_EEM=y +CONFIG_USB_CONFIGFS_PHONET=y +CONFIG_USB_CONFIGFS_MASS_STORAGE=y +CONFIG_USB_CONFIGFS_F_LB_SS=y +CONFIG_USB_CONFIGFS_F_FS=y +CONFIG_USB_CONFIGFS_F_UAC1=y +CONFIG_USB_CONFIGFS_F_UAC1_LEGACY=y +CONFIG_USB_CONFIGFS_F_UAC2=y +CONFIG_USB_CONFIGFS_F_MIDI=y +CONFIG_USB_CONFIGFS_F_HID=y +CONFIG_USB_CONFIGFS_F_UVC=y +CONFIG_USB_CONFIGFS_F_PRINTER=y +CONFIG_USB_CONFIGFS_F_TCM=y + +# +# USB Gadget precomposed configurations +# +CONFIG_USB_ZERO=m +# CONFIG_USB_ZERO_HNPTEST is not set +CONFIG_USB_AUDIO=m +CONFIG_GADGET_UAC1=y +# CONFIG_GADGET_UAC1_LEGACY is not set +CONFIG_USB_ETH=m +CONFIG_USB_ETH_RNDIS=y +CONFIG_USB_ETH_EEM=y +CONFIG_USB_G_NCM=m +CONFIG_USB_GADGETFS=m +CONFIG_USB_FUNCTIONFS=m +CONFIG_USB_FUNCTIONFS_ETH=y +CONFIG_USB_FUNCTIONFS_RNDIS=y +CONFIG_USB_FUNCTIONFS_GENERIC=y +CONFIG_USB_MASS_STORAGE=m +CONFIG_USB_GADGET_TARGET=m +CONFIG_USB_G_SERIAL=m +CONFIG_USB_MIDI_GADGET=m +CONFIG_USB_G_PRINTER=m +CONFIG_USB_CDC_COMPOSITE=m +CONFIG_USB_G_NOKIA=m +CONFIG_USB_G_ACM_MS=m +# CONFIG_USB_G_MULTI is not set +CONFIG_USB_G_HID=m +CONFIG_USB_G_DBGP=m +# CONFIG_USB_G_DBGP_PRINTK is not set +CONFIG_USB_G_DBGP_SERIAL=y +CONFIG_USB_G_WEBCAM=m +# CONFIG_USB_RAW_GADGET is not set +# end of USB Gadget precomposed configurations + +CONFIG_TYPEC=y +CONFIG_TYPEC_TCPM=y +CONFIG_TYPEC_TCPCI=y +CONFIG_TYPEC_RT1711H=y +CONFIG_TYPEC_TCPCI_MAXIM=y +CONFIG_TYPEC_FUSB302=y +CONFIG_TYPEC_UCSI=y +CONFIG_UCSI_CCG=y +CONFIG_UCSI_ACPI=y +CONFIG_TYPEC_TPS6598X=y +# CONFIG_TYPEC_HD3SS3220 is not set +# CONFIG_TYPEC_STUSB160X is not set + +# +# USB Type-C Multiplexer/DeMultiplexer Switch support +# +CONFIG_TYPEC_MUX_PI3USB30532=m +# end of USB Type-C Multiplexer/DeMultiplexer Switch support + +# +# USB Type-C Alternate Mode drivers +# +CONFIG_TYPEC_DP_ALTMODE=m +CONFIG_TYPEC_NVIDIA_ALTMODE=m +# end of USB Type-C Alternate Mode drivers + +CONFIG_USB_ROLE_SWITCH=y +CONFIG_USB_ROLES_INTEL_XHCI=y +CONFIG_MMC=y +CONFIG_MMC_BLOCK=m +CONFIG_MMC_BLOCK_MINORS=8 +CONFIG_SDIO_UART=m +# CONFIG_MMC_TEST is not set + +# +# MMC/SD/SDIO Host Controller Drivers +# +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_SDHCI=m +CONFIG_MMC_SDHCI_IO_ACCESSORS=y +CONFIG_MMC_SDHCI_PCI=m +CONFIG_MMC_RICOH_MMC=y +CONFIG_MMC_SDHCI_ACPI=m +CONFIG_MMC_SDHCI_PLTFM=m +CONFIG_MMC_SDHCI_F_SDH30=m +CONFIG_MMC_WBSD=m +CONFIG_MMC_ALCOR=m +CONFIG_MMC_TIFM_SD=m +CONFIG_MMC_SPI=m +CONFIG_MMC_SDRICOH_CS=m +CONFIG_MMC_CB710=m +CONFIG_MMC_VIA_SDMMC=m +CONFIG_MMC_VUB300=m +CONFIG_MMC_USHC=m +CONFIG_MMC_USDHI6ROL0=m +CONFIG_MMC_REALTEK_PCI=m +CONFIG_MMC_REALTEK_USB=m +CONFIG_MMC_CQHCI=m +# CONFIG_MMC_HSQ is not set +CONFIG_MMC_TOSHIBA_PCI=m +CONFIG_MMC_MTK=m +CONFIG_MMC_SDHCI_XENON=m +CONFIG_MEMSTICK=m +# CONFIG_MEMSTICK_DEBUG is not set + +# +# MemoryStick drivers +# +# CONFIG_MEMSTICK_UNSAFE_RESUME is not set +CONFIG_MSPRO_BLOCK=m +CONFIG_MS_BLOCK=m + +# +# MemoryStick Host Controller Drivers +# +CONFIG_MEMSTICK_TIFM_MS=m +CONFIG_MEMSTICK_JMICRON_38X=m +CONFIG_MEMSTICK_R592=m +CONFIG_MEMSTICK_REALTEK_PCI=m +CONFIG_MEMSTICK_REALTEK_USB=m +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_CLASS_FLASH=m +# CONFIG_LEDS_CLASS_MULTICOLOR is not set +CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y + +# +# LED drivers +# +CONFIG_LEDS_88PM860X=m +CONFIG_LEDS_APU=m +CONFIG_LEDS_LM3530=m +CONFIG_LEDS_LM3532=m +CONFIG_LEDS_LM3533=m +CONFIG_LEDS_LM3642=m +CONFIG_LEDS_MT6323=m +CONFIG_LEDS_PCA9532=m +CONFIG_LEDS_PCA9532_GPIO=y +CONFIG_LEDS_GPIO=m +CONFIG_LEDS_LP3944=m +CONFIG_LEDS_LP3952=m +# CONFIG_LEDS_LP50XX is not set +CONFIG_LEDS_LP8788=m +CONFIG_LEDS_CLEVO_MAIL=m +CONFIG_LEDS_PCA955X=m +CONFIG_LEDS_PCA955X_GPIO=y +CONFIG_LEDS_PCA963X=m +CONFIG_LEDS_WM831X_STATUS=m +CONFIG_LEDS_WM8350=m +CONFIG_LEDS_DA903X=m +CONFIG_LEDS_DA9052=m +CONFIG_LEDS_DAC124S085=m +CONFIG_LEDS_PWM=m +CONFIG_LEDS_REGULATOR=m +CONFIG_LEDS_BD2802=m +CONFIG_LEDS_INTEL_SS4200=m +# CONFIG_LEDS_LT3593 is not set +CONFIG_LEDS_ADP5520=m +CONFIG_LEDS_MC13783=m +CONFIG_LEDS_TCA6507=m +CONFIG_LEDS_TLC591XX=m +CONFIG_LEDS_MAX8997=m +CONFIG_LEDS_LM355x=m +CONFIG_LEDS_MENF21BMC=m + +# +# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) +# +CONFIG_LEDS_BLINKM=m +CONFIG_LEDS_MLXCPLD=m +CONFIG_LEDS_MLXREG=m +CONFIG_LEDS_USER=m +CONFIG_LEDS_NIC78BX=m +CONFIG_LEDS_TI_LMU_COMMON=m +CONFIG_LEDS_LM36274=m +CONFIG_LEDS_TPS6105X=m + +# +# Flash and Torch LED drivers +# +CONFIG_LEDS_AS3645A=m +CONFIG_LEDS_LM3601X=m +# CONFIG_LEDS_RT8515 is not set +# CONFIG_LEDS_SGM3140 is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=m +CONFIG_LEDS_TRIGGER_ONESHOT=m +CONFIG_LEDS_TRIGGER_DISK=y +CONFIG_LEDS_TRIGGER_MTD=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=m +CONFIG_LEDS_TRIGGER_BACKLIGHT=m +CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_TRIGGER_ACTIVITY=m +CONFIG_LEDS_TRIGGER_GPIO=m +CONFIG_LEDS_TRIGGER_DEFAULT_ON=m + +# +# iptables trigger is under Netfilter config (LED target) +# +CONFIG_LEDS_TRIGGER_TRANSIENT=m +CONFIG_LEDS_TRIGGER_CAMERA=m +CONFIG_LEDS_TRIGGER_PANIC=y +CONFIG_LEDS_TRIGGER_NETDEV=m +CONFIG_LEDS_TRIGGER_PATTERN=m +CONFIG_LEDS_TRIGGER_AUDIO=m +# CONFIG_LEDS_TRIGGER_TTY is not set +# CONFIG_ACCESSIBILITY is not set +CONFIG_INFINIBAND=m +CONFIG_INFINIBAND_USER_MAD=m +CONFIG_INFINIBAND_USER_ACCESS=m +CONFIG_INFINIBAND_USER_MEM=y +CONFIG_INFINIBAND_ON_DEMAND_PAGING=y +CONFIG_INFINIBAND_ADDR_TRANS=y +CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y +CONFIG_INFINIBAND_VIRT_DMA=y +CONFIG_INFINIBAND_MTHCA=m +# CONFIG_INFINIBAND_MTHCA_DEBUG is not set +CONFIG_INFINIBAND_QIB=m +CONFIG_INFINIBAND_QIB_DCA=y +CONFIG_INFINIBAND_CXGB4=m +CONFIG_INFINIBAND_EFA=m +# CONFIG_INFINIBAND_IRDMA is not set +CONFIG_MLX4_INFINIBAND=m +CONFIG_MLX5_INFINIBAND=m +CONFIG_INFINIBAND_OCRDMA=m +CONFIG_INFINIBAND_VMWARE_PVRDMA=m +CONFIG_INFINIBAND_USNIC=m +CONFIG_INFINIBAND_BNXT_RE=m +CONFIG_INFINIBAND_HFI1=m +# CONFIG_HFI1_DEBUG_SDMA_ORDER is not set +# CONFIG_SDMA_VERBOSITY is not set +CONFIG_INFINIBAND_QEDR=m +CONFIG_INFINIBAND_RDMAVT=m +CONFIG_RDMA_RXE=m +CONFIG_RDMA_SIW=m +CONFIG_INFINIBAND_IPOIB=m +CONFIG_INFINIBAND_IPOIB_CM=y +# CONFIG_INFINIBAND_IPOIB_DEBUG is not set +CONFIG_INFINIBAND_SRP=m +CONFIG_INFINIBAND_SRPT=m +CONFIG_INFINIBAND_ISER=m +CONFIG_INFINIBAND_ISERT=m +# CONFIG_INFINIBAND_RTRS_CLIENT is not set +# CONFIG_INFINIBAND_RTRS_SERVER is not set +CONFIG_INFINIBAND_OPA_VNIC=m +CONFIG_EDAC_ATOMIC_SCRUB=y +CONFIG_EDAC_SUPPORT=y +CONFIG_EDAC=y +# CONFIG_EDAC_LEGACY_SYSFS is not set +# CONFIG_EDAC_DEBUG is not set +CONFIG_EDAC_DECODE_MCE=m +CONFIG_EDAC_GHES=y +CONFIG_EDAC_AMD64=m +CONFIG_EDAC_E752X=m +CONFIG_EDAC_I82975X=m +CONFIG_EDAC_I3000=m +CONFIG_EDAC_I3200=m +CONFIG_EDAC_IE31200=m +CONFIG_EDAC_X38=m +CONFIG_EDAC_I5400=m +CONFIG_EDAC_I7CORE=m +CONFIG_EDAC_I5000=m +CONFIG_EDAC_I5100=m +CONFIG_EDAC_I7300=m +CONFIG_EDAC_SBRIDGE=m +CONFIG_EDAC_SKX=m +CONFIG_EDAC_I10NM=m +CONFIG_EDAC_PND2=m +# CONFIG_EDAC_IGEN6 is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_MC146818_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +CONFIG_RTC_SYSTOHC=y +CONFIG_RTC_SYSTOHC_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set +CONFIG_RTC_NVMEM=y + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +CONFIG_RTC_DRV_88PM860X=m +CONFIG_RTC_DRV_88PM80X=m +CONFIG_RTC_DRV_ABB5ZES3=m +CONFIG_RTC_DRV_ABEOZ9=m +CONFIG_RTC_DRV_ABX80X=m +CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS1307_CENTURY=y +CONFIG_RTC_DRV_DS1374=m +CONFIG_RTC_DRV_DS1374_WDT=y +CONFIG_RTC_DRV_DS1672=m +CONFIG_RTC_DRV_LP8788=m +CONFIG_RTC_DRV_MAX6900=m +CONFIG_RTC_DRV_MAX8907=m +CONFIG_RTC_DRV_MAX8925=m +CONFIG_RTC_DRV_MAX8998=m +CONFIG_RTC_DRV_MAX8997=m +CONFIG_RTC_DRV_RS5C372=m +CONFIG_RTC_DRV_ISL1208=m +CONFIG_RTC_DRV_ISL12022=m +CONFIG_RTC_DRV_X1205=m +CONFIG_RTC_DRV_PCF8523=m +CONFIG_RTC_DRV_PCF85063=m +CONFIG_RTC_DRV_PCF85363=m +CONFIG_RTC_DRV_PCF8563=m +CONFIG_RTC_DRV_PCF8583=m +CONFIG_RTC_DRV_M41T80=m +CONFIG_RTC_DRV_M41T80_WDT=y +CONFIG_RTC_DRV_BQ32K=m +CONFIG_RTC_DRV_PALMAS=m +CONFIG_RTC_DRV_TPS6586X=m +CONFIG_RTC_DRV_TPS65910=m +CONFIG_RTC_DRV_TPS80031=m +CONFIG_RTC_DRV_RC5T583=m +CONFIG_RTC_DRV_S35390A=m +CONFIG_RTC_DRV_FM3130=m +CONFIG_RTC_DRV_RX8010=m +CONFIG_RTC_DRV_RX8581=m +CONFIG_RTC_DRV_RX8025=m +CONFIG_RTC_DRV_EM3027=m +CONFIG_RTC_DRV_RV3028=m +# CONFIG_RTC_DRV_RV3032 is not set +CONFIG_RTC_DRV_RV8803=m +CONFIG_RTC_DRV_SD3078=m + +# +# SPI RTC drivers +# +CONFIG_RTC_DRV_M41T93=m +CONFIG_RTC_DRV_M41T94=m +CONFIG_RTC_DRV_DS1302=m +CONFIG_RTC_DRV_DS1305=m +CONFIG_RTC_DRV_DS1343=m +CONFIG_RTC_DRV_DS1347=m +CONFIG_RTC_DRV_DS1390=m +CONFIG_RTC_DRV_MAX6916=m +CONFIG_RTC_DRV_R9701=m +CONFIG_RTC_DRV_RX4581=m +CONFIG_RTC_DRV_RS5C348=m +CONFIG_RTC_DRV_MAX6902=m +CONFIG_RTC_DRV_PCF2123=m +CONFIG_RTC_DRV_MCP795=m +CONFIG_RTC_I2C_AND_SPI=y + +# +# SPI and I2C RTC drivers +# +CONFIG_RTC_DRV_DS3232=m +CONFIG_RTC_DRV_DS3232_HWMON=y +CONFIG_RTC_DRV_PCF2127=m +CONFIG_RTC_DRV_RV3029C2=m +CONFIG_RTC_DRV_RV3029_HWMON=y +CONFIG_RTC_DRV_RX6110=m + +# +# Platform RTC drivers +# +CONFIG_RTC_DRV_CMOS=y +CONFIG_RTC_DRV_DS1286=m +CONFIG_RTC_DRV_DS1511=m +CONFIG_RTC_DRV_DS1553=m +CONFIG_RTC_DRV_DS1685_FAMILY=m +CONFIG_RTC_DRV_DS1685=y +# CONFIG_RTC_DRV_DS1689 is not set +# CONFIG_RTC_DRV_DS17285 is not set +# CONFIG_RTC_DRV_DS17485 is not set +# CONFIG_RTC_DRV_DS17885 is not set +CONFIG_RTC_DRV_DS1742=m +CONFIG_RTC_DRV_DS2404=m +CONFIG_RTC_DRV_DA9052=m +CONFIG_RTC_DRV_DA9055=m +CONFIG_RTC_DRV_DA9063=m +CONFIG_RTC_DRV_STK17TA8=m +CONFIG_RTC_DRV_M48T86=m +CONFIG_RTC_DRV_M48T35=m +CONFIG_RTC_DRV_M48T59=m +CONFIG_RTC_DRV_MSM6242=m +CONFIG_RTC_DRV_BQ4802=m +CONFIG_RTC_DRV_RP5C01=m +CONFIG_RTC_DRV_V3020=m +CONFIG_RTC_DRV_WM831X=m +CONFIG_RTC_DRV_WM8350=m +CONFIG_RTC_DRV_PCF50633=m +CONFIG_RTC_DRV_CROS_EC=m + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_FTRTC010=m +CONFIG_RTC_DRV_PCAP=m +CONFIG_RTC_DRV_MC13XXX=m +CONFIG_RTC_DRV_MT6397=m + +# +# HID Sensor RTC drivers +# +CONFIG_RTC_DRV_HID_SENSOR_TIME=m +# CONFIG_RTC_DRV_GOLDFISH is not set +CONFIG_RTC_DRV_WILCO_EC=m +CONFIG_DMADEVICES=y +# CONFIG_DMADEVICES_DEBUG is not set + +# +# DMA Devices +# +CONFIG_DMA_ENGINE=y +CONFIG_DMA_VIRTUAL_CHANNELS=m +CONFIG_DMA_ACPI=y +CONFIG_ALTERA_MSGDMA=m +CONFIG_INTEL_IDMA64=m +# CONFIG_INTEL_IDXD is not set +# CONFIG_INTEL_IDXD_COMPAT is not set +CONFIG_INTEL_IOATDMA=m +# CONFIG_PLX_DMA is not set +# CONFIG_AMD_PTDMA is not set +CONFIG_QCOM_HIDMA_MGMT=m +CONFIG_QCOM_HIDMA=m +CONFIG_DW_DMAC_CORE=y +CONFIG_DW_DMAC=m +CONFIG_DW_DMAC_PCI=m +CONFIG_DW_EDMA=m +CONFIG_DW_EDMA_PCIE=m +CONFIG_HSU_DMA=m +# CONFIG_SF_PDMA is not set +# CONFIG_INTEL_LDMA is not set + +# +# DMA Clients +# +CONFIG_ASYNC_TX_DMA=y +# CONFIG_DMATEST is not set +CONFIG_DMA_ENGINE_RAID=y + +# +# DMABUF options +# +CONFIG_SYNC_FILE=y +CONFIG_SW_SYNC=y +CONFIG_UDMABUF=y +# CONFIG_DMABUF_MOVE_NOTIFY is not set +# CONFIG_DMABUF_DEBUG is not set +# CONFIG_DMABUF_SELFTESTS is not set +# CONFIG_DMABUF_HEAPS is not set +# CONFIG_DMABUF_SYSFS_STATS is not set +# end of DMABUF options + +CONFIG_DCA=m +CONFIG_AUXDISPLAY=y +CONFIG_CHARLCD=m +CONFIG_HD44780_COMMON=m +CONFIG_HD44780=m +CONFIG_KS0108=m +CONFIG_KS0108_PORT=0x378 +CONFIG_KS0108_DELAY=2 +CONFIG_CFAG12864B=m +CONFIG_CFAG12864B_RATE=20 +CONFIG_IMG_ASCII_LCD=m +# CONFIG_LCD2S is not set +CONFIG_PARPORT_PANEL=m +CONFIG_PANEL_PARPORT=0 +CONFIG_PANEL_PROFILE=5 +# CONFIG_PANEL_CHANGE_MESSAGE is not set +# CONFIG_CHARLCD_BL_OFF is not set +# CONFIG_CHARLCD_BL_ON is not set +CONFIG_CHARLCD_BL_FLASH=y +CONFIG_PANEL=m +CONFIG_UIO=y +CONFIG_UIO_CIF=m +CONFIG_UIO_PDRV_GENIRQ=m +CONFIG_UIO_DMEM_GENIRQ=m +CONFIG_UIO_AEC=m +CONFIG_UIO_SERCOS3=m +CONFIG_UIO_PCI_GENERIC=m +CONFIG_UIO_NETX=m +CONFIG_UIO_PRUSS=m +CONFIG_UIO_MF624=m +CONFIG_UIO_HV_GENERIC=m +# CONFIG_UIO_DFL is not set +CONFIG_VFIO=y +CONFIG_VFIO_IOMMU_TYPE1=y +CONFIG_VFIO_VIRQFD=y +CONFIG_VFIO_NOIOMMU=y +CONFIG_VFIO_PCI_CORE=y +CONFIG_VFIO_PCI_MMAP=y +CONFIG_VFIO_PCI_INTX=y +CONFIG_VFIO_PCI=y +CONFIG_VFIO_PCI_VGA=y +CONFIG_VFIO_PCI_IGD=y +CONFIG_VFIO_MDEV=m +CONFIG_IRQ_BYPASS_MANAGER=y +CONFIG_VIRT_DRIVERS=y +# CONFIG_VBOXGUEST is not set +# CONFIG_NITRO_ENCLAVES is not set +# CONFIG_ACRN_HSM is not set +CONFIG_VIRTIO=y +CONFIG_ARCH_HAS_RESTRICTED_VIRTIO_MEMORY_ACCESS=y +CONFIG_VIRTIO_PCI_LIB=y +CONFIG_VIRTIO_MENU=y +CONFIG_VIRTIO_PCI=y +CONFIG_VIRTIO_PCI_LEGACY=y +CONFIG_VIRTIO_PMEM=m +CONFIG_VIRTIO_BALLOON=y +CONFIG_VIRTIO_MEM=m +CONFIG_VIRTIO_INPUT=m +CONFIG_VIRTIO_MMIO=y +CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y +CONFIG_VIRTIO_DMA_SHARED_BUFFER=m +# CONFIG_VDPA is not set +CONFIG_VHOST_IOTLB=m +CONFIG_VHOST=m +CONFIG_VHOST_MENU=y +CONFIG_VHOST_NET=m +CONFIG_VHOST_SCSI=m +CONFIG_VHOST_VSOCK=m +# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set + +# +# Microsoft Hyper-V guest support +# +CONFIG_HYPERV=m +CONFIG_HYPERV_TIMER=y +CONFIG_HYPERV_UTILS=m +CONFIG_HYPERV_BALLOON=m +# end of Microsoft Hyper-V guest support + +# +# Xen driver support +# +CONFIG_XEN_BALLOON=y +CONFIG_XEN_BALLOON_MEMORY_HOTPLUG=y +CONFIG_XEN_MEMORY_HOTPLUG_LIMIT=512 +CONFIG_XEN_SCRUB_PAGES_DEFAULT=y +CONFIG_XEN_DEV_EVTCHN=m +CONFIG_XEN_BACKEND=y +CONFIG_XENFS=m +CONFIG_XEN_COMPAT_XENFS=y +CONFIG_XEN_SYS_HYPERVISOR=y +CONFIG_XEN_XENBUS_FRONTEND=y +CONFIG_XEN_GNTDEV=m +CONFIG_XEN_GNTDEV_DMABUF=y +CONFIG_XEN_GRANT_DEV_ALLOC=m +CONFIG_XEN_GRANT_DMA_ALLOC=y +CONFIG_SWIOTLB_XEN=y +CONFIG_XEN_PCIDEV_BACKEND=m +CONFIG_XEN_PVCALLS_FRONTEND=m +# CONFIG_XEN_PVCALLS_BACKEND is not set +CONFIG_XEN_SCSI_BACKEND=m +CONFIG_XEN_PRIVCMD=m +CONFIG_XEN_ACPI_PROCESSOR=y +CONFIG_XEN_MCE_LOG=y +CONFIG_XEN_HAVE_PVMMU=y +CONFIG_XEN_EFI=y +CONFIG_XEN_AUTO_XLATE=y +CONFIG_XEN_ACPI=y +CONFIG_XEN_SYMS=y +CONFIG_XEN_HAVE_VPMU=y +CONFIG_XEN_FRONT_PGDIR_SHBUF=m +CONFIG_XEN_UNPOPULATED_ALLOC=y +# end of Xen driver support + +CONFIG_GREYBUS=m +CONFIG_GREYBUS_ES2=m +CONFIG_COMEDI=m +# CONFIG_COMEDI_DEBUG is not set +CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048 +CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480 +CONFIG_COMEDI_MISC_DRIVERS=y +CONFIG_COMEDI_BOND=m +CONFIG_COMEDI_TEST=m +CONFIG_COMEDI_PARPORT=m +CONFIG_COMEDI_ISA_DRIVERS=y +CONFIG_COMEDI_PCL711=m +CONFIG_COMEDI_PCL724=m +CONFIG_COMEDI_PCL726=m +CONFIG_COMEDI_PCL730=m +CONFIG_COMEDI_PCL812=m +CONFIG_COMEDI_PCL816=m +CONFIG_COMEDI_PCL818=m +CONFIG_COMEDI_PCM3724=m +CONFIG_COMEDI_AMPLC_DIO200_ISA=m +CONFIG_COMEDI_AMPLC_PC236_ISA=m +CONFIG_COMEDI_AMPLC_PC263_ISA=m +CONFIG_COMEDI_RTI800=m +CONFIG_COMEDI_RTI802=m +CONFIG_COMEDI_DAC02=m +CONFIG_COMEDI_DAS16M1=m +CONFIG_COMEDI_DAS08_ISA=m +CONFIG_COMEDI_DAS16=m +CONFIG_COMEDI_DAS800=m +CONFIG_COMEDI_DAS1800=m +CONFIG_COMEDI_DAS6402=m +CONFIG_COMEDI_DT2801=m +CONFIG_COMEDI_DT2811=m +CONFIG_COMEDI_DT2814=m +CONFIG_COMEDI_DT2815=m +CONFIG_COMEDI_DT2817=m +CONFIG_COMEDI_DT282X=m +CONFIG_COMEDI_DMM32AT=m +CONFIG_COMEDI_FL512=m +CONFIG_COMEDI_AIO_AIO12_8=m +CONFIG_COMEDI_AIO_IIRO_16=m +CONFIG_COMEDI_II_PCI20KC=m +CONFIG_COMEDI_C6XDIGIO=m +CONFIG_COMEDI_MPC624=m +CONFIG_COMEDI_ADQ12B=m +CONFIG_COMEDI_NI_AT_A2150=m +CONFIG_COMEDI_NI_AT_AO=m +CONFIG_COMEDI_NI_ATMIO=m +CONFIG_COMEDI_NI_ATMIO16D=m +CONFIG_COMEDI_NI_LABPC_ISA=m +CONFIG_COMEDI_PCMAD=m +CONFIG_COMEDI_PCMDA12=m +CONFIG_COMEDI_PCMMIO=m +CONFIG_COMEDI_PCMUIO=m +CONFIG_COMEDI_MULTIQ3=m +CONFIG_COMEDI_S526=m +CONFIG_COMEDI_PCI_DRIVERS=m +CONFIG_COMEDI_8255_PCI=m +CONFIG_COMEDI_ADDI_WATCHDOG=m +CONFIG_COMEDI_ADDI_APCI_1032=m +CONFIG_COMEDI_ADDI_APCI_1500=m +CONFIG_COMEDI_ADDI_APCI_1516=m +CONFIG_COMEDI_ADDI_APCI_1564=m +CONFIG_COMEDI_ADDI_APCI_16XX=m +CONFIG_COMEDI_ADDI_APCI_2032=m +CONFIG_COMEDI_ADDI_APCI_2200=m +CONFIG_COMEDI_ADDI_APCI_3120=m +CONFIG_COMEDI_ADDI_APCI_3501=m +CONFIG_COMEDI_ADDI_APCI_3XXX=m +CONFIG_COMEDI_ADL_PCI6208=m +CONFIG_COMEDI_ADL_PCI7X3X=m +CONFIG_COMEDI_ADL_PCI8164=m +CONFIG_COMEDI_ADL_PCI9111=m +CONFIG_COMEDI_ADL_PCI9118=m +CONFIG_COMEDI_ADV_PCI1710=m +CONFIG_COMEDI_ADV_PCI1720=m +CONFIG_COMEDI_ADV_PCI1723=m +CONFIG_COMEDI_ADV_PCI1724=m +CONFIG_COMEDI_ADV_PCI1760=m +CONFIG_COMEDI_ADV_PCI_DIO=m +CONFIG_COMEDI_AMPLC_DIO200_PCI=m +CONFIG_COMEDI_AMPLC_PC236_PCI=m +CONFIG_COMEDI_AMPLC_PC263_PCI=m +CONFIG_COMEDI_AMPLC_PCI224=m +CONFIG_COMEDI_AMPLC_PCI230=m +CONFIG_COMEDI_CONTEC_PCI_DIO=m +CONFIG_COMEDI_DAS08_PCI=m +CONFIG_COMEDI_DT3000=m +CONFIG_COMEDI_DYNA_PCI10XX=m +CONFIG_COMEDI_GSC_HPDI=m +CONFIG_COMEDI_MF6X4=m +CONFIG_COMEDI_ICP_MULTI=m +CONFIG_COMEDI_DAQBOARD2000=m +CONFIG_COMEDI_JR3_PCI=m +CONFIG_COMEDI_KE_COUNTER=m +CONFIG_COMEDI_CB_PCIDAS64=m +CONFIG_COMEDI_CB_PCIDAS=m +CONFIG_COMEDI_CB_PCIDDA=m +CONFIG_COMEDI_CB_PCIMDAS=m +CONFIG_COMEDI_CB_PCIMDDA=m +CONFIG_COMEDI_ME4000=m +CONFIG_COMEDI_ME_DAQ=m +CONFIG_COMEDI_NI_6527=m +CONFIG_COMEDI_NI_65XX=m +CONFIG_COMEDI_NI_660X=m +CONFIG_COMEDI_NI_670X=m +CONFIG_COMEDI_NI_LABPC_PCI=m +CONFIG_COMEDI_NI_PCIDIO=m +CONFIG_COMEDI_NI_PCIMIO=m +CONFIG_COMEDI_RTD520=m +CONFIG_COMEDI_S626=m +CONFIG_COMEDI_MITE=m +CONFIG_COMEDI_NI_TIOCMD=m +CONFIG_COMEDI_PCMCIA_DRIVERS=m +CONFIG_COMEDI_CB_DAS16_CS=m +CONFIG_COMEDI_DAS08_CS=m +CONFIG_COMEDI_NI_DAQ_700_CS=m +CONFIG_COMEDI_NI_DAQ_DIO24_CS=m +CONFIG_COMEDI_NI_LABPC_CS=m +CONFIG_COMEDI_NI_MIO_CS=m +CONFIG_COMEDI_QUATECH_DAQP_CS=m +CONFIG_COMEDI_USB_DRIVERS=m +CONFIG_COMEDI_DT9812=m +CONFIG_COMEDI_NI_USB6501=m +CONFIG_COMEDI_USBDUX=m +CONFIG_COMEDI_USBDUXFAST=m +CONFIG_COMEDI_USBDUXSIGMA=m +CONFIG_COMEDI_VMK80XX=m +CONFIG_COMEDI_8254=m +CONFIG_COMEDI_8255=m +CONFIG_COMEDI_8255_SA=m +CONFIG_COMEDI_KCOMEDILIB=m +CONFIG_COMEDI_AMPLC_DIO200=m +CONFIG_COMEDI_AMPLC_PC236=m +CONFIG_COMEDI_DAS08=m +CONFIG_COMEDI_ISADMA=m +CONFIG_COMEDI_NI_LABPC=m +CONFIG_COMEDI_NI_LABPC_ISADMA=m +CONFIG_COMEDI_NI_TIO=m +CONFIG_COMEDI_NI_ROUTING=m +# CONFIG_COMEDI_TESTS is not set +CONFIG_STAGING=y +CONFIG_PRISM2_USB=m +CONFIG_RTL8192U=m +CONFIG_RTLLIB=m +CONFIG_RTLLIB_CRYPTO_CCMP=m +CONFIG_RTLLIB_CRYPTO_TKIP=m +CONFIG_RTLLIB_CRYPTO_WEP=m +CONFIG_RTL8192E=m +CONFIG_RTL8723BS=m +CONFIG_R8712U=m +CONFIG_R8188EU=m +CONFIG_88EU_AP_MODE=y +CONFIG_RTS5208=m +CONFIG_VT6655=m +CONFIG_VT6656=m + +# +# IIO staging drivers +# + +# +# Accelerometers +# +CONFIG_ADIS16203=m +CONFIG_ADIS16240=m +# end of Accelerometers + +# +# Analog to digital converters +# +CONFIG_AD7816=m +CONFIG_AD7280=m +# end of Analog to digital converters + +# +# Analog digital bi-direction converters +# +CONFIG_ADT7316=m +CONFIG_ADT7316_SPI=m +CONFIG_ADT7316_I2C=m +# end of Analog digital bi-direction converters + +# +# Capacitance to digital converters +# +CONFIG_AD7746=m +# end of Capacitance to digital converters + +# +# Direct Digital Synthesis +# +CONFIG_AD9832=m +CONFIG_AD9834=m +# end of Direct Digital Synthesis + +# +# Network Analyzer, Impedance Converters +# +CONFIG_AD5933=m +# end of Network Analyzer, Impedance Converters + +# +# Active energy metering IC +# +CONFIG_ADE7854=m +CONFIG_ADE7854_I2C=m +CONFIG_ADE7854_SPI=m +# end of Active energy metering IC + +# +# Resolver to digital converters +# +CONFIG_AD2S1210=m +# end of Resolver to digital converters +# end of IIO staging drivers + +CONFIG_FB_SM750=m +CONFIG_STAGING_MEDIA=y +# CONFIG_INTEL_ATOMISP is not set +# CONFIG_VIDEO_ZORAN is not set +CONFIG_VIDEO_IPU3_IMGU=m +CONFIG_DVB_AV7110_IR=y +CONFIG_DVB_AV7110=m +CONFIG_DVB_AV7110_OSD=y +CONFIG_DVB_BUDGET_PATCH=m +CONFIG_DVB_SP8870=m + +# +# Android +# +# CONFIG_ASHMEM is not set +# end of Android + +CONFIG_LTE_GDM724X=m +CONFIG_FIREWIRE_SERIAL=m +CONFIG_FWTTY_MAX_TOTAL_PORTS=64 +CONFIG_FWTTY_MAX_CARD_PORTS=32 +CONFIG_GS_FPGABOOT=m +CONFIG_UNISYSSPAR=y +CONFIG_UNISYS_VISORNIC=m +CONFIG_UNISYS_VISORINPUT=m +CONFIG_UNISYS_VISORHBA=m +# CONFIG_FB_TFT is not set +# CONFIG_MOST_COMPONENTS is not set +CONFIG_KS7010=m +CONFIG_GREYBUS_AUDIO=m +# CONFIG_GREYBUS_AUDIO_APB_CODEC is not set +CONFIG_GREYBUS_BOOTROM=m +CONFIG_GREYBUS_FIRMWARE=m +CONFIG_GREYBUS_HID=m +CONFIG_GREYBUS_LIGHT=m +CONFIG_GREYBUS_LOG=m +CONFIG_GREYBUS_LOOPBACK=m +CONFIG_GREYBUS_POWER=m +CONFIG_GREYBUS_RAW=m +CONFIG_GREYBUS_VIBRATOR=m +CONFIG_GREYBUS_BRIDGED_PHY=m +CONFIG_GREYBUS_GPIO=m +CONFIG_GREYBUS_I2C=m +CONFIG_GREYBUS_PWM=m +CONFIG_GREYBUS_SDIO=m +CONFIG_GREYBUS_SPI=m +CONFIG_GREYBUS_UART=m +CONFIG_GREYBUS_USB=m +CONFIG_PI433=m +CONFIG_FIELDBUS_DEV=m +CONFIG_QLGE=m +# CONFIG_WFX is not set +CONFIG_X86_PLATFORM_DEVICES=y +CONFIG_ACPI_WMI=m +CONFIG_WMI_BMOF=m +CONFIG_HUAWEI_WMI=m +# CONFIG_UV_SYSFS is not set +CONFIG_MXM_WMI=m +CONFIG_PEAQ_WMI=m +CONFIG_XIAOMI_WMI=m +# CONFIG_GIGABYTE_WMI is not set +CONFIG_ACERHDF=m +CONFIG_ACER_WIRELESS=m +CONFIG_ACER_WMI=m +# CONFIG_AMD_PMC is not set +# CONFIG_ADV_SWBUTTON is not set +CONFIG_APPLE_GMUX=m +CONFIG_ASUS_LAPTOP=m +CONFIG_ASUS_WIRELESS=m +CONFIG_ASUS_WMI=m +CONFIG_ASUS_NB_WMI=m +# CONFIG_MERAKI_MX100 is not set +CONFIG_EEEPC_LAPTOP=m +CONFIG_EEEPC_WMI=m +# CONFIG_X86_PLATFORM_DRIVERS_DELL is not set +CONFIG_AMILO_RFKILL=m +CONFIG_FUJITSU_LAPTOP=m +CONFIG_FUJITSU_TABLET=m +CONFIG_GPD_POCKET_FAN=m +CONFIG_HP_ACCEL=m +# CONFIG_WIRELESS_HOTKEY is not set +CONFIG_HP_WMI=m +CONFIG_IBM_RTL=m +CONFIG_IDEAPAD_LAPTOP=m +CONFIG_SENSORS_HDAPS=m +CONFIG_THINKPAD_ACPI=m +CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y +CONFIG_THINKPAD_ACPI_DEBUGFACILITIES=y +# CONFIG_THINKPAD_ACPI_DEBUG is not set +# CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set +CONFIG_THINKPAD_ACPI_VIDEO=y +CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y +# CONFIG_THINKPAD_LMI is not set +CONFIG_INTEL_ATOMISP2_PDX86=y +# CONFIG_INTEL_ATOMISP2_LED is not set +CONFIG_INTEL_ATOMISP2_PM=m +# CONFIG_INTEL_SAR_INT1092 is not set +CONFIG_INTEL_CHT_INT33FE=m +# CONFIG_INTEL_SKL_INT3472 is not set +CONFIG_INTEL_PMC_CORE=y + +# +# Intel Speed Select Technology interface support +# +CONFIG_INTEL_SPEED_SELECT_INTERFACE=m +# end of Intel Speed Select Technology interface support + +CONFIG_INTEL_WMI=y +# CONFIG_INTEL_WMI_SBL_FW_UPDATE is not set +CONFIG_INTEL_WMI_THUNDERBOLT=m +CONFIG_INTEL_HID_EVENT=m +CONFIG_INTEL_VBTN=m +CONFIG_INTEL_INT0002_VGPIO=m +CONFIG_INTEL_OAKTRAIL=m +CONFIG_INTEL_CHTDC_TI_PWRBTN=m +CONFIG_INTEL_PUNIT_IPC=m +CONFIG_INTEL_RST=m +CONFIG_INTEL_SMARTCONNECT=m +CONFIG_INTEL_TURBO_MAX_3=y +# CONFIG_INTEL_UNCORE_FREQ_CONTROL is not set +CONFIG_MSI_LAPTOP=m +CONFIG_MSI_WMI=m +CONFIG_PCENGINES_APU2=m +CONFIG_SAMSUNG_LAPTOP=m +CONFIG_SAMSUNG_Q10=m +CONFIG_ACPI_TOSHIBA=m +CONFIG_TOSHIBA_BT_RFKILL=m +CONFIG_TOSHIBA_HAPS=m +# CONFIG_TOSHIBA_WMI is not set +CONFIG_ACPI_CMPC=m +CONFIG_COMPAL_LAPTOP=m +CONFIG_LG_LAPTOP=m +CONFIG_PANASONIC_LAPTOP=m +CONFIG_SONY_LAPTOP=m +CONFIG_SONYPI_COMPAT=y +# CONFIG_SYSTEM76_ACPI is not set +CONFIG_TOPSTAR_LAPTOP=m +CONFIG_I2C_MULTI_INSTANTIATE=m +CONFIG_MLX_PLATFORM=m +CONFIG_TOUCHSCREEN_DMI=y +CONFIG_INTEL_IPS=m +# CONFIG_INTEL_SCU_PCI is not set +# CONFIG_INTEL_SCU_PLATFORM is not set +CONFIG_PMC_ATOM=y +CONFIG_CHROME_PLATFORMS=y +CONFIG_CHROMEOS_LAPTOP=m +CONFIG_CHROMEOS_PSTORE=m +CONFIG_CHROMEOS_TBMC=m +CONFIG_CROS_EC=m +CONFIG_CROS_EC_I2C=m +CONFIG_CROS_EC_ISHTP=m +CONFIG_CROS_EC_SPI=m +CONFIG_CROS_EC_LPC=m +CONFIG_CROS_EC_PROTO=y +CONFIG_CROS_KBD_LED_BACKLIGHT=m +CONFIG_CROS_EC_CHARDEV=m +CONFIG_CROS_EC_LIGHTBAR=m +CONFIG_CROS_EC_DEBUGFS=m +CONFIG_CROS_EC_SENSORHUB=m +CONFIG_CROS_EC_SYSFS=m +CONFIG_CROS_EC_TYPEC=m +CONFIG_CROS_USBPD_LOGGER=m +CONFIG_CROS_USBPD_NOTIFY=m +CONFIG_WILCO_EC=m +CONFIG_WILCO_EC_DEBUGFS=m +CONFIG_WILCO_EC_EVENTS=m +CONFIG_WILCO_EC_TELEMETRY=m +CONFIG_MELLANOX_PLATFORM=y +CONFIG_MLXREG_HOTPLUG=m +CONFIG_MLXREG_IO=m +CONFIG_SURFACE_PLATFORMS=y +CONFIG_SURFACE3_WMI=m +CONFIG_SURFACE_3_BUTTON=m +# CONFIG_SURFACE_3_POWER_OPREGION is not set +# CONFIG_SURFACE_GPE is not set +# CONFIG_SURFACE_HOTPLUG is not set +CONFIG_SURFACE_PRO3_BUTTON=m +# CONFIG_SURFACE_AGGREGATOR is not set +CONFIG_HAVE_CLK=y +CONFIG_HAVE_CLK_PREPARE=y +CONFIG_COMMON_CLK=y +CONFIG_COMMON_CLK_WM831X=m + +# +# Clock driver for ARM Reference designs +# +# CONFIG_ICST is not set +# CONFIG_CLK_SP810 is not set +# end of Clock driver for ARM Reference designs + +# CONFIG_LMK04832 is not set +CONFIG_COMMON_CLK_MAX9485=m +CONFIG_COMMON_CLK_SI5341=m +CONFIG_COMMON_CLK_SI5351=m +CONFIG_COMMON_CLK_SI544=m +CONFIG_COMMON_CLK_CDCE706=m +CONFIG_COMMON_CLK_CS2000_CP=m +CONFIG_CLK_TWL6040=m +CONFIG_COMMON_CLK_PALMAS=m +CONFIG_COMMON_CLK_PWM=m +CONFIG_XILINX_VCU=m +CONFIG_HWSPINLOCK=y + +# +# Clock Source drivers +# +CONFIG_CLKEVT_I8253=y +CONFIG_I8253_LOCK=y +CONFIG_CLKBLD_I8253=y +# end of Clock Source drivers + +CONFIG_MAILBOX=y +CONFIG_PCC=y +CONFIG_ALTERA_MBOX=m +CONFIG_IOMMU_IOVA=y +CONFIG_IOASID=y +CONFIG_IOMMU_API=y +CONFIG_IOMMU_SUPPORT=y + +# +# Generic IOMMU Pagetable Support +# +CONFIG_IOMMU_IO_PGTABLE=y +# end of Generic IOMMU Pagetable Support + +# CONFIG_IOMMU_DEBUGFS is not set +# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set +CONFIG_IOMMU_DEFAULT_DMA_LAZY=y +# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set +CONFIG_IOMMU_DMA=y +CONFIG_IOMMU_SVA_LIB=y +CONFIG_AMD_IOMMU=y +CONFIG_AMD_IOMMU_V2=m +CONFIG_DMAR_TABLE=y +CONFIG_INTEL_IOMMU=y +CONFIG_INTEL_IOMMU_SVM=y +# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set +CONFIG_INTEL_IOMMU_FLOPPY_WA=y +# CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON is not set +CONFIG_IRQ_REMAP=y +CONFIG_HYPERV_IOMMU=y +# CONFIG_VIRTIO_IOMMU is not set + +# +# Remoteproc drivers +# +CONFIG_REMOTEPROC=y +# CONFIG_REMOTEPROC_CDEV is not set +# end of Remoteproc drivers + +# +# Rpmsg drivers +# +CONFIG_RPMSG=m +CONFIG_RPMSG_CHAR=m +CONFIG_RPMSG_NS=m +CONFIG_RPMSG_QCOM_GLINK=m +CONFIG_RPMSG_QCOM_GLINK_RPM=m +CONFIG_RPMSG_VIRTIO=m +# end of Rpmsg drivers + +CONFIG_SOUNDWIRE=m + +# +# SoundWire Devices +# +CONFIG_SOUNDWIRE_CADENCE=m +CONFIG_SOUNDWIRE_INTEL=m +# CONFIG_SOUNDWIRE_QCOM is not set +CONFIG_SOUNDWIRE_GENERIC_ALLOCATION=m + +# +# SOC (System On Chip) specific Drivers +# + +# +# Amlogic SoC drivers +# +# end of Amlogic SoC drivers + +# +# Broadcom SoC drivers +# +# end of Broadcom SoC drivers + +# +# NXP/Freescale QorIQ SoC drivers +# +# end of NXP/Freescale QorIQ SoC drivers + +# +# i.MX SoC drivers +# +# end of i.MX SoC drivers + +# +# Enable LiteX SoC Builder specific drivers +# +# end of Enable LiteX SoC Builder specific drivers + +# +# Qualcomm SoC drivers +# +# end of Qualcomm SoC drivers + +CONFIG_SOC_TI=y + +# +# Xilinx SoC drivers +# +# end of Xilinx SoC drivers +# end of SOC (System On Chip) specific Drivers + +CONFIG_PM_DEVFREQ=y + +# +# DEVFREQ Governors +# +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y +CONFIG_DEVFREQ_GOV_PERFORMANCE=y +CONFIG_DEVFREQ_GOV_POWERSAVE=y +CONFIG_DEVFREQ_GOV_USERSPACE=y +CONFIG_DEVFREQ_GOV_PASSIVE=y + +# +# DEVFREQ Drivers +# +CONFIG_PM_DEVFREQ_EVENT=y +CONFIG_EXTCON=y + +# +# Extcon Device Drivers +# +CONFIG_EXTCON_ADC_JACK=m +CONFIG_EXTCON_AXP288=m +CONFIG_EXTCON_FSA9480=m +CONFIG_EXTCON_GPIO=m +CONFIG_EXTCON_INTEL_INT3496=m +CONFIG_EXTCON_INTEL_CHT_WC=m +CONFIG_EXTCON_MAX14577=m +CONFIG_EXTCON_MAX3355=m +CONFIG_EXTCON_MAX77693=m +CONFIG_EXTCON_MAX77843=m +CONFIG_EXTCON_MAX8997=m +CONFIG_EXTCON_PALMAS=m +CONFIG_EXTCON_PTN5150=m +CONFIG_EXTCON_RT8973A=m +CONFIG_EXTCON_SM5502=m +CONFIG_EXTCON_USB_GPIO=m +CONFIG_EXTCON_USBC_CROS_EC=m +# CONFIG_EXTCON_USBC_TUSB320 is not set +CONFIG_MEMORY=y +# CONFIG_FPGA_DFL_EMIF is not set +CONFIG_IIO=m +CONFIG_IIO_BUFFER=y +CONFIG_IIO_BUFFER_CB=m +# CONFIG_IIO_BUFFER_DMA is not set +# CONFIG_IIO_BUFFER_DMAENGINE is not set +CONFIG_IIO_BUFFER_HW_CONSUMER=m +CONFIG_IIO_KFIFO_BUF=m +CONFIG_IIO_TRIGGERED_BUFFER=m +CONFIG_IIO_CONFIGFS=m +CONFIG_IIO_TRIGGER=y +CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 +CONFIG_IIO_SW_DEVICE=m +CONFIG_IIO_SW_TRIGGER=m +CONFIG_IIO_TRIGGERED_EVENT=m + +# +# Accelerometers +# +CONFIG_ADIS16201=m +CONFIG_ADIS16209=m +CONFIG_ADXL372=m +CONFIG_ADXL372_SPI=m +CONFIG_ADXL372_I2C=m +CONFIG_BMA220=m +# CONFIG_BMA400 is not set +CONFIG_BMC150_ACCEL=m +CONFIG_BMC150_ACCEL_I2C=m +CONFIG_BMC150_ACCEL_SPI=m +# CONFIG_BMI088_ACCEL is not set +CONFIG_DA280=m +CONFIG_DA311=m +CONFIG_DMARD09=m +CONFIG_DMARD10=m +# CONFIG_FXLS8962AF_I2C is not set +# CONFIG_FXLS8962AF_SPI is not set +CONFIG_HID_SENSOR_ACCEL_3D=m +CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m +CONFIG_IIO_ST_ACCEL_3AXIS=m +CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m +CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m +CONFIG_KXSD9=m +CONFIG_KXSD9_SPI=m +CONFIG_KXSD9_I2C=m +CONFIG_KXCJK1013=m +CONFIG_MC3230=m +CONFIG_MMA7455=m +CONFIG_MMA7455_I2C=m +CONFIG_MMA7455_SPI=m +CONFIG_MMA7660=m +CONFIG_MMA8452=m +CONFIG_MMA9551_CORE=m +CONFIG_MMA9551=m +CONFIG_MMA9553=m +CONFIG_MXC4005=m +CONFIG_MXC6255=m +CONFIG_SCA3000=m +# CONFIG_SCA3300 is not set +CONFIG_STK8312=m +CONFIG_STK8BA50=m +# end of Accelerometers + +# +# Analog to digital converters +# +CONFIG_AD_SIGMA_DELTA=m +# CONFIG_AD7091R5 is not set +CONFIG_AD7124=m +CONFIG_AD7192=m +CONFIG_AD7266=m +CONFIG_AD7291=m +# CONFIG_AD7292 is not set +CONFIG_AD7298=m +CONFIG_AD7476=m +CONFIG_AD7606=m +CONFIG_AD7606_IFACE_PARALLEL=m +CONFIG_AD7606_IFACE_SPI=m +CONFIG_AD7766=m +CONFIG_AD7768_1=m +CONFIG_AD7780=m +CONFIG_AD7791=m +CONFIG_AD7793=m +CONFIG_AD7887=m +CONFIG_AD7923=m +CONFIG_AD7949=m +CONFIG_AD799X=m +CONFIG_AXP20X_ADC=m +CONFIG_AXP288_ADC=m +CONFIG_CC10001_ADC=m +CONFIG_DA9150_GPADC=m +CONFIG_DLN2_ADC=m +CONFIG_HI8435=m +CONFIG_HX711=m +CONFIG_INA2XX_ADC=m +CONFIG_LP8788_ADC=m +CONFIG_LTC2471=m +CONFIG_LTC2485=m +# CONFIG_LTC2496 is not set +CONFIG_LTC2497=m +CONFIG_MAX1027=m +CONFIG_MAX11100=m +CONFIG_MAX1118=m +# CONFIG_MAX1241 is not set +CONFIG_MAX1363=m +CONFIG_MAX9611=m +CONFIG_MCP320X=m +CONFIG_MCP3422=m +CONFIG_MCP3911=m +CONFIG_MEN_Z188_ADC=m +CONFIG_NAU7802=m +CONFIG_PALMAS_GPADC=m +CONFIG_QCOM_VADC_COMMON=m +CONFIG_QCOM_SPMI_IADC=m +CONFIG_QCOM_SPMI_VADC=m +CONFIG_QCOM_SPMI_ADC5=m +CONFIG_STX104=m +CONFIG_TI_ADC081C=m +CONFIG_TI_ADC0832=m +CONFIG_TI_ADC084S021=m +CONFIG_TI_ADC12138=m +CONFIG_TI_ADC108S102=m +CONFIG_TI_ADC128S052=m +CONFIG_TI_ADC161S626=m +CONFIG_TI_ADS1015=m +CONFIG_TI_ADS7950=m +# CONFIG_TI_ADS131E08 is not set +CONFIG_TI_AM335X_ADC=m +CONFIG_TI_TLC4541=m +# CONFIG_TI_TSC2046 is not set +CONFIG_TWL4030_MADC=m +CONFIG_TWL6030_GPADC=m +CONFIG_VIPERBOARD_ADC=m +CONFIG_XILINX_XADC=m +# end of Analog to digital converters + +# +# Analog Front Ends +# +# end of Analog Front Ends + +# +# Amplifiers +# +CONFIG_AD8366=m +# CONFIG_HMC425 is not set +# end of Amplifiers + +# +# Capacitance to digital converters +# +CONFIG_AD7150=m +# end of Capacitance to digital converters + +# +# Chemical Sensors +# +CONFIG_ATLAS_PH_SENSOR=m +# CONFIG_ATLAS_EZO_SENSOR is not set +CONFIG_BME680=m +CONFIG_BME680_I2C=m +CONFIG_BME680_SPI=m +CONFIG_CCS811=m +CONFIG_IAQCORE=m +CONFIG_PMS7003=m +# CONFIG_SCD30_CORE is not set +CONFIG_SENSIRION_SGP30=m +# CONFIG_SENSIRION_SGP40 is not set +# CONFIG_SPS30_I2C is not set +# CONFIG_SPS30_SERIAL is not set +CONFIG_VZ89X=m +# end of Chemical Sensors + +CONFIG_IIO_CROS_EC_SENSORS_CORE=m +CONFIG_IIO_CROS_EC_SENSORS=m +CONFIG_IIO_CROS_EC_SENSORS_LID_ANGLE=m + +# +# Hid Sensor IIO Common +# +CONFIG_HID_SENSOR_IIO_COMMON=m +CONFIG_HID_SENSOR_IIO_TRIGGER=m +# end of Hid Sensor IIO Common + +CONFIG_IIO_MS_SENSORS_I2C=m + +# +# IIO SCMI Sensors +# +# end of IIO SCMI Sensors + +# +# SSP Sensor Common +# +CONFIG_IIO_SSP_SENSORS_COMMONS=m +CONFIG_IIO_SSP_SENSORHUB=m +# end of SSP Sensor Common + +CONFIG_IIO_ST_SENSORS_I2C=m +CONFIG_IIO_ST_SENSORS_SPI=m +CONFIG_IIO_ST_SENSORS_CORE=m + +# +# Digital to analog converters +# +CONFIG_AD5064=m +CONFIG_AD5360=m +CONFIG_AD5380=m +CONFIG_AD5421=m +CONFIG_AD5446=m +CONFIG_AD5449=m +CONFIG_AD5592R_BASE=m +CONFIG_AD5592R=m +CONFIG_AD5593R=m +CONFIG_AD5504=m +CONFIG_AD5624R_SPI=m +CONFIG_AD5686=m +CONFIG_AD5686_SPI=m +CONFIG_AD5696_I2C=m +CONFIG_AD5755=m +CONFIG_AD5758=m +CONFIG_AD5761=m +CONFIG_AD5764=m +# CONFIG_AD5766 is not set +# CONFIG_AD5770R is not set +CONFIG_AD5791=m +CONFIG_AD7303=m +CONFIG_AD8801=m +CONFIG_CIO_DAC=m +CONFIG_DS4424=m +CONFIG_LTC1660=m +CONFIG_LTC2632=m +CONFIG_M62332=m +CONFIG_MAX517=m +CONFIG_MCP4725=m +CONFIG_MCP4922=m +CONFIG_TI_DAC082S085=m +CONFIG_TI_DAC5571=m +CONFIG_TI_DAC7311=m +CONFIG_TI_DAC7612=m +# end of Digital to analog converters + +# +# IIO dummy driver +# +CONFIG_IIO_SIMPLE_DUMMY=m +# CONFIG_IIO_SIMPLE_DUMMY_EVENTS is not set +# CONFIG_IIO_SIMPLE_DUMMY_BUFFER is not set +# end of IIO dummy driver + +# +# Frequency Synthesizers DDS/PLL +# + +# +# Clock Generator/Distribution +# +CONFIG_AD9523=m +# end of Clock Generator/Distribution + +# +# Phase-Locked Loop (PLL) frequency synthesizers +# +CONFIG_ADF4350=m +CONFIG_ADF4371=m +# end of Phase-Locked Loop (PLL) frequency synthesizers +# end of Frequency Synthesizers DDS/PLL + +# +# Digital gyroscope sensors +# +CONFIG_ADIS16080=m +CONFIG_ADIS16130=m +CONFIG_ADIS16136=m +CONFIG_ADIS16260=m +# CONFIG_ADXRS290 is not set +CONFIG_ADXRS450=m +CONFIG_BMG160=m +CONFIG_BMG160_I2C=m +CONFIG_BMG160_SPI=m +CONFIG_FXAS21002C=m +CONFIG_FXAS21002C_I2C=m +CONFIG_FXAS21002C_SPI=m +CONFIG_HID_SENSOR_GYRO_3D=m +CONFIG_MPU3050=m +CONFIG_MPU3050_I2C=m +CONFIG_IIO_ST_GYRO_3AXIS=m +CONFIG_IIO_ST_GYRO_I2C_3AXIS=m +CONFIG_IIO_ST_GYRO_SPI_3AXIS=m +CONFIG_ITG3200=m +# end of Digital gyroscope sensors + +# +# Health Sensors +# + +# +# Heart Rate Monitors +# +CONFIG_AFE4403=m +CONFIG_AFE4404=m +CONFIG_MAX30100=m +CONFIG_MAX30102=m +# end of Heart Rate Monitors +# end of Health Sensors + +# +# Humidity sensors +# +CONFIG_AM2315=m +CONFIG_DHT11=m +CONFIG_HDC100X=m +# CONFIG_HDC2010 is not set +CONFIG_HID_SENSOR_HUMIDITY=m +CONFIG_HTS221=m +CONFIG_HTS221_I2C=m +CONFIG_HTS221_SPI=m +CONFIG_HTU21=m +CONFIG_SI7005=m +CONFIG_SI7020=m +# end of Humidity sensors + +# +# Inertial measurement units +# +CONFIG_ADIS16400=m +CONFIG_ADIS16460=m +# CONFIG_ADIS16475 is not set +CONFIG_ADIS16480=m +CONFIG_BMI160=m +CONFIG_BMI160_I2C=m +CONFIG_BMI160_SPI=m +# CONFIG_FXOS8700_I2C is not set +# CONFIG_FXOS8700_SPI is not set +CONFIG_KMX61=m +# CONFIG_INV_ICM42600_I2C is not set +# CONFIG_INV_ICM42600_SPI is not set +CONFIG_INV_MPU6050_IIO=m +CONFIG_INV_MPU6050_I2C=m +CONFIG_INV_MPU6050_SPI=m +CONFIG_IIO_ST_LSM6DSX=m +CONFIG_IIO_ST_LSM6DSX_I2C=m +CONFIG_IIO_ST_LSM6DSX_SPI=m +CONFIG_IIO_ST_LSM6DSX_I3C=m +# CONFIG_IIO_ST_LSM9DS0 is not set +# end of Inertial measurement units + +CONFIG_IIO_ADIS_LIB=m +CONFIG_IIO_ADIS_LIB_BUFFER=y + +# +# Light sensors +# +CONFIG_ACPI_ALS=m +CONFIG_ADJD_S311=m +# CONFIG_ADUX1020 is not set +# CONFIG_AL3010 is not set +CONFIG_AL3320A=m +CONFIG_APDS9300=m +CONFIG_APDS9960=m +# CONFIG_AS73211 is not set +CONFIG_BH1750=m +CONFIG_BH1780=m +CONFIG_CM32181=m +CONFIG_CM3232=m +CONFIG_CM3323=m +CONFIG_CM36651=m +CONFIG_IIO_CROS_EC_LIGHT_PROX=m +# CONFIG_GP2AP002 is not set +CONFIG_GP2AP020A00F=m +CONFIG_SENSORS_ISL29018=m +CONFIG_SENSORS_ISL29028=m +CONFIG_ISL29125=m +CONFIG_HID_SENSOR_ALS=m +CONFIG_HID_SENSOR_PROX=m +CONFIG_JSA1212=m +CONFIG_RPR0521=m +CONFIG_SENSORS_LM3533=m +CONFIG_LTR501=m +CONFIG_LV0104CS=m +CONFIG_MAX44000=m +CONFIG_MAX44009=m +CONFIG_NOA1305=m +CONFIG_OPT3001=m +CONFIG_PA12203001=m +CONFIG_SI1133=m +CONFIG_SI1145=m +CONFIG_STK3310=m +CONFIG_ST_UVIS25=m +CONFIG_ST_UVIS25_I2C=m +CONFIG_ST_UVIS25_SPI=m +CONFIG_TCS3414=m +CONFIG_TCS3472=m +CONFIG_SENSORS_TSL2563=m +CONFIG_TSL2583=m +# CONFIG_TSL2591 is not set +CONFIG_TSL2772=m +CONFIG_TSL4531=m +CONFIG_US5182D=m +CONFIG_VCNL4000=m +CONFIG_VCNL4035=m +# CONFIG_VEML6030 is not set +CONFIG_VEML6070=m +CONFIG_VL6180=m +CONFIG_ZOPT2201=m +# end of Light sensors + +# +# Magnetometer sensors +# +CONFIG_AK8975=m +CONFIG_AK09911=m +CONFIG_BMC150_MAGN=m +CONFIG_BMC150_MAGN_I2C=m +CONFIG_BMC150_MAGN_SPI=m +CONFIG_MAG3110=m +CONFIG_HID_SENSOR_MAGNETOMETER_3D=m +CONFIG_MMC35240=m +CONFIG_IIO_ST_MAGN_3AXIS=m +CONFIG_IIO_ST_MAGN_I2C_3AXIS=m +CONFIG_IIO_ST_MAGN_SPI_3AXIS=m +CONFIG_SENSORS_HMC5843=m +CONFIG_SENSORS_HMC5843_I2C=m +CONFIG_SENSORS_HMC5843_SPI=m +CONFIG_SENSORS_RM3100=m +CONFIG_SENSORS_RM3100_I2C=m +CONFIG_SENSORS_RM3100_SPI=m +# CONFIG_YAMAHA_YAS530 is not set +# end of Magnetometer sensors + +# +# Multiplexers +# +# end of Multiplexers + +# +# Inclinometer sensors +# +CONFIG_HID_SENSOR_INCLINOMETER_3D=m +CONFIG_HID_SENSOR_DEVICE_ROTATION=m +# end of Inclinometer sensors + +# +# Triggers - standalone +# +CONFIG_IIO_HRTIMER_TRIGGER=m +CONFIG_IIO_INTERRUPT_TRIGGER=m +CONFIG_IIO_TIGHTLOOP_TRIGGER=m +CONFIG_IIO_SYSFS_TRIGGER=m +# end of Triggers - standalone + +# +# Linear and angular position sensors +# +# CONFIG_HID_SENSOR_CUSTOM_INTEL_HINGE is not set +# end of Linear and angular position sensors + +# +# Digital potentiometers +# +# CONFIG_AD5110 is not set +CONFIG_AD5272=m +CONFIG_DS1803=m +CONFIG_MAX5432=m +CONFIG_MAX5481=m +CONFIG_MAX5487=m +CONFIG_MCP4018=m +CONFIG_MCP4131=m +CONFIG_MCP4531=m +CONFIG_MCP41010=m +CONFIG_TPL0102=m +# end of Digital potentiometers + +# +# Digital potentiostats +# +CONFIG_LMP91000=m +# end of Digital potentiostats + +# +# Pressure sensors +# +CONFIG_ABP060MG=m +CONFIG_BMP280=m +CONFIG_BMP280_I2C=m +CONFIG_BMP280_SPI=m +CONFIG_IIO_CROS_EC_BARO=m +# CONFIG_DLHL60D is not set +CONFIG_DPS310=m +CONFIG_HID_SENSOR_PRESS=m +CONFIG_HP03=m +# CONFIG_ICP10100 is not set +CONFIG_MPL115=m +CONFIG_MPL115_I2C=m +CONFIG_MPL115_SPI=m +CONFIG_MPL3115=m +CONFIG_MS5611=m +CONFIG_MS5611_I2C=m +CONFIG_MS5611_SPI=m +CONFIG_MS5637=m +CONFIG_IIO_ST_PRESS=m +CONFIG_IIO_ST_PRESS_I2C=m +CONFIG_IIO_ST_PRESS_SPI=m +CONFIG_T5403=m +CONFIG_HP206C=m +CONFIG_ZPA2326=m +CONFIG_ZPA2326_I2C=m +CONFIG_ZPA2326_SPI=m +# end of Pressure sensors + +# +# Lightning sensors +# +CONFIG_AS3935=m +# end of Lightning sensors + +# +# Proximity and distance sensors +# +# CONFIG_CROS_EC_MKBP_PROXIMITY is not set +CONFIG_ISL29501=m +CONFIG_LIDAR_LITE_V2=m +CONFIG_MB1232=m +# CONFIG_PING is not set +CONFIG_RFD77402=m +CONFIG_SRF04=m +# CONFIG_SX9310 is not set +CONFIG_SX9500=m +CONFIG_SRF08=m +# CONFIG_VCNL3020 is not set +CONFIG_VL53L0X_I2C=m +# end of Proximity and distance sensors + +# +# Resolver to digital converters +# +CONFIG_AD2S90=m +CONFIG_AD2S1200=m +# end of Resolver to digital converters + +# +# Temperature sensors +# +# CONFIG_LTC2983 is not set +CONFIG_MAXIM_THERMOCOUPLE=m +CONFIG_HID_SENSOR_TEMP=m +CONFIG_MLX90614=m +CONFIG_MLX90632=m +CONFIG_TMP006=m +CONFIG_TMP007=m +# CONFIG_TMP117 is not set +CONFIG_TSYS01=m +CONFIG_TSYS02D=m +CONFIG_MAX31856=m +# end of Temperature sensors + +CONFIG_NTB=m +CONFIG_NTB_MSI=y +# CONFIG_NTB_AMD is not set +CONFIG_NTB_IDT=m +CONFIG_NTB_INTEL=m +# CONFIG_NTB_EPF is not set +CONFIG_NTB_SWITCHTEC=m +CONFIG_NTB_PINGPONG=m +CONFIG_NTB_TOOL=m +CONFIG_NTB_PERF=m +# CONFIG_NTB_MSI_TEST is not set +CONFIG_NTB_TRANSPORT=m +CONFIG_VME_BUS=y + +# +# VME Bridge Drivers +# +CONFIG_VME_CA91CX42=m +CONFIG_VME_TSI148=m +CONFIG_VME_FAKE=m + +# +# VME Board Drivers +# +CONFIG_VMIVME_7805=m + +# +# VME Device Drivers +# +CONFIG_VME_USER=m +CONFIG_PWM=y +CONFIG_PWM_SYSFS=y +# CONFIG_PWM_DEBUG is not set +CONFIG_PWM_CRC=y +CONFIG_PWM_CROS_EC=m +# CONFIG_PWM_DWC is not set +CONFIG_PWM_LP3943=m +CONFIG_PWM_LPSS=y +CONFIG_PWM_LPSS_PCI=y +CONFIG_PWM_LPSS_PLATFORM=y +CONFIG_PWM_PCA9685=m +CONFIG_PWM_TWL=m +CONFIG_PWM_TWL_LED=m + +# +# IRQ chip support +# +CONFIG_MADERA_IRQ=m +# end of IRQ chip support + +CONFIG_IPACK_BUS=m +CONFIG_BOARD_TPCI200=m +CONFIG_SERIAL_IPOCTAL=m +CONFIG_RESET_CONTROLLER=y +CONFIG_RESET_TI_SYSCON=m + +# +# PHY Subsystem +# +CONFIG_GENERIC_PHY=y +# CONFIG_USB_LGM_PHY is not set +# CONFIG_PHY_CAN_TRANSCEIVER is not set +CONFIG_BCM_KONA_USB2_PHY=m +CONFIG_PHY_PXA_28NM_HSIC=m +CONFIG_PHY_PXA_28NM_USB2=m +CONFIG_PHY_CPCAP_USB=m +CONFIG_PHY_QCOM_USB_HS=m +CONFIG_PHY_QCOM_USB_HSIC=m +CONFIG_PHY_SAMSUNG_USB2=m +CONFIG_PHY_TUSB1210=m +# CONFIG_PHY_INTEL_LGM_EMMC is not set +# end of PHY Subsystem + +CONFIG_POWERCAP=y +CONFIG_INTEL_RAPL_CORE=m +CONFIG_INTEL_RAPL=m +CONFIG_IDLE_INJECT=y +# CONFIG_DTPM is not set +CONFIG_MCB=m +CONFIG_MCB_PCI=m +CONFIG_MCB_LPC=m + +# +# Performance monitor support +# +# end of Performance monitor support + +CONFIG_RAS=y +CONFIG_RAS_CEC=y +# CONFIG_RAS_CEC_DEBUG is not set +# CONFIG_USB4 is not set + +# +# Android +# +CONFIG_ANDROID=y +# CONFIG_ANDROID_BINDER_IPC is not set +# end of Android + +CONFIG_LIBNVDIMM=y +CONFIG_BLK_DEV_PMEM=m +CONFIG_ND_BLK=m +CONFIG_ND_CLAIM=y +CONFIG_ND_BTT=m +CONFIG_BTT=y +CONFIG_ND_PFN=m +CONFIG_NVDIMM_PFN=y +CONFIG_NVDIMM_DAX=y +CONFIG_NVDIMM_KEYS=y +CONFIG_DAX_DRIVER=y +CONFIG_DAX=y +CONFIG_DEV_DAX=m +CONFIG_DEV_DAX_PMEM=m +CONFIG_DEV_DAX_HMEM=m +CONFIG_DEV_DAX_HMEM_DEVICES=y +CONFIG_DEV_DAX_KMEM=m +CONFIG_DEV_DAX_PMEM_COMPAT=m +CONFIG_NVMEM=y +CONFIG_NVMEM_SYSFS=y +# CONFIG_NVMEM_SPMI_SDAM is not set +CONFIG_RAVE_SP_EEPROM=m +# CONFIG_NVMEM_RMEM is not set + +# +# HW tracing support +# +CONFIG_STM=m +CONFIG_STM_PROTO_BASIC=m +CONFIG_STM_PROTO_SYS_T=m +CONFIG_STM_DUMMY=m +CONFIG_STM_SOURCE_CONSOLE=m +CONFIG_STM_SOURCE_HEARTBEAT=m +CONFIG_STM_SOURCE_FTRACE=m +CONFIG_INTEL_TH=m +CONFIG_INTEL_TH_PCI=m +CONFIG_INTEL_TH_ACPI=m +CONFIG_INTEL_TH_GTH=m +CONFIG_INTEL_TH_STH=m +CONFIG_INTEL_TH_MSU=m +CONFIG_INTEL_TH_PTI=m +# CONFIG_INTEL_TH_DEBUG is not set +# end of HW tracing support + +CONFIG_FPGA=m +CONFIG_ALTERA_PR_IP_CORE=m +CONFIG_FPGA_MGR_ALTERA_PS_SPI=m +CONFIG_FPGA_MGR_ALTERA_CVP=m +CONFIG_FPGA_MGR_XILINX_SPI=m +CONFIG_FPGA_MGR_MACHXO2_SPI=m +CONFIG_FPGA_BRIDGE=m +CONFIG_ALTERA_FREEZE_BRIDGE=m +CONFIG_XILINX_PR_DECOUPLER=m +CONFIG_FPGA_REGION=m +CONFIG_FPGA_DFL=m +CONFIG_FPGA_DFL_FME=m +CONFIG_FPGA_DFL_FME_MGR=m +CONFIG_FPGA_DFL_FME_BRIDGE=m +CONFIG_FPGA_DFL_FME_REGION=m +CONFIG_FPGA_DFL_AFU=m +# CONFIG_FPGA_DFL_NIOS_INTEL_PAC_N3000 is not set +CONFIG_FPGA_DFL_PCI=m +# CONFIG_TEE is not set +CONFIG_PM_OPP=y +CONFIG_UNISYS_VISORBUS=m +CONFIG_SIOX=m +CONFIG_SIOX_BUS_GPIO=m +CONFIG_SLIMBUS=m +CONFIG_SLIM_QCOM_CTRL=m +# CONFIG_INTERCONNECT is not set +CONFIG_COUNTER=m +CONFIG_104_QUAD_8=m +# CONFIG_INTERRUPT_CNT is not set +# CONFIG_INTEL_QEP is not set +CONFIG_MOST=m +# CONFIG_MOST_USB_HDM is not set +CONFIG_MOST_CDEV=m +# CONFIG_MOST_SND is not set +# end of Device Drivers + +# +# File systems +# +CONFIG_DCACHE_WORD_ACCESS=y +CONFIG_VALIDATE_FS_PARSER=y +CONFIG_FS_IOMAP=y +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT2_FS_POSIX_ACL=y +CONFIG_EXT2_FS_SECURITY=y +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y +CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +# CONFIG_EXT4_DEBUG is not set +CONFIG_JBD2=y +CONFIG_JBD2_DEBUG=y +CONFIG_FS_MBCACHE=y +CONFIG_REISERFS_FS=y +CONFIG_REISERFS_CHECK=y +CONFIG_REISERFS_PROC_INFO=y +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +CONFIG_JFS_FS=y +CONFIG_JFS_POSIX_ACL=y +CONFIG_JFS_SECURITY=y +# CONFIG_JFS_DEBUG is not set +CONFIG_JFS_STATISTICS=y +CONFIG_XFS_FS=y +CONFIG_XFS_SUPPORT_V4=y +CONFIG_XFS_QUOTA=y +CONFIG_XFS_POSIX_ACL=y +CONFIG_XFS_RT=y +# CONFIG_XFS_ONLINE_SCRUB is not set +# CONFIG_XFS_WARN is not set +# CONFIG_XFS_DEBUG is not set +CONFIG_GFS2_FS=y +CONFIG_GFS2_FS_LOCKING_DLM=y +CONFIG_OCFS2_FS=y +CONFIG_OCFS2_FS_O2CB=y +# CONFIG_OCFS2_FS_USERSPACE_CLUSTER is not set +CONFIG_OCFS2_FS_STATS=y +CONFIG_OCFS2_DEBUG_MASKLOG=y +CONFIG_OCFS2_DEBUG_FS=y +CONFIG_BTRFS_FS=y +CONFIG_BTRFS_FS_POSIX_ACL=y +# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set +# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set +# CONFIG_BTRFS_DEBUG is not set +# CONFIG_BTRFS_ASSERT is not set +# CONFIG_BTRFS_FS_REF_VERIFY is not set +CONFIG_NILFS2_FS=y +CONFIG_F2FS_FS=y +CONFIG_F2FS_STAT_FS=y +CONFIG_F2FS_FS_XATTR=y +CONFIG_F2FS_FS_POSIX_ACL=y +CONFIG_F2FS_FS_SECURITY=y +# CONFIG_F2FS_CHECK_FS is not set +# CONFIG_F2FS_FAULT_INJECTION is not set +# CONFIG_F2FS_FS_COMPRESSION is not set +CONFIG_F2FS_IOSTAT=y +CONFIG_ZONEFS_FS=m +CONFIG_FS_DAX=y +CONFIG_FS_DAX_PMD=y +CONFIG_FS_POSIX_ACL=y +CONFIG_EXPORTFS=y +CONFIG_EXPORTFS_BLOCK_OPS=y +CONFIG_FILE_LOCKING=y +CONFIG_FS_ENCRYPTION=y +CONFIG_FS_ENCRYPTION_ALGS=y +CONFIG_FS_VERITY=y +# CONFIG_FS_VERITY_DEBUG is not set +CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y +CONFIG_INOTIFY_USER=y +CONFIG_FANOTIFY=y +CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y +CONFIG_QUOTA=y +CONFIG_QUOTA_NETLINK_INTERFACE=y +# CONFIG_PRINT_QUOTA_WARNING is not set +# CONFIG_QUOTA_DEBUG is not set +CONFIG_QUOTA_TREE=y +CONFIG_QFMT_V1=y +CONFIG_QFMT_V2=y +CONFIG_QUOTACTL=y +CONFIG_AUTOFS4_FS=y +CONFIG_AUTOFS_FS=y +CONFIG_FUSE_FS=y +CONFIG_CUSE=y +CONFIG_VIRTIO_FS=y +CONFIG_FUSE_DAX=y +CONFIG_OVERLAY_FS=y +# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set +CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y +# CONFIG_OVERLAY_FS_INDEX is not set +CONFIG_OVERLAY_FS_XINO_AUTO=y +# CONFIG_OVERLAY_FS_METACOPY is not set + +# +# Caches +# +CONFIG_NETFS_SUPPORT=m +CONFIG_NETFS_STATS=y +CONFIG_FSCACHE=m +CONFIG_FSCACHE_STATS=y +# CONFIG_FSCACHE_DEBUG is not set +CONFIG_CACHEFILES=m +# CONFIG_CACHEFILES_DEBUG is not set +# end of Caches + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=y +# end of CD-ROM/DVD Filesystems + +# +# DOS/FAT/EXFAT/NT Filesystems +# +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_FAT_DEFAULT_UTF8 is not set +CONFIG_EXFAT_FS=y +CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" +CONFIG_NTFS_FS=y +# CONFIG_NTFS_DEBUG is not set +CONFIG_NTFS_RW=y +CONFIG_NTFS3_FS=y +CONFIG_NTFS3_64BIT_CLUSTER=y +CONFIG_NTFS3_LZX_XPRESS=y +CONFIG_NTFS3_FS_POSIX_ACL=y +# end of DOS/FAT/EXFAT/NT Filesystems + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_VMCORE=y +CONFIG_PROC_VMCORE_DEVICE_DUMP=y +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_PROC_CHILDREN=y +CONFIG_PROC_PID_ARCH_STATUS=y +CONFIG_PROC_CPU_RESCTRL=y +CONFIG_KERNFS=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_TMPFS_XATTR=y +# CONFIG_TMPFS_INODE64 is not set +CONFIG_HUGETLBFS=y +CONFIG_HUGETLB_PAGE=y +CONFIG_HUGETLB_PAGE_FREE_VMEMMAP=y +# CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON is not set +CONFIG_MEMFD_CREATE=y +CONFIG_ARCH_HAS_GIGANTIC_PAGE=y +CONFIG_CONFIGFS_FS=y +CONFIG_EFIVAR_FS=y +# end of Pseudo filesystems + +CONFIG_MISC_FILESYSTEMS=y +CONFIG_ORANGEFS_FS=m +CONFIG_ADFS_FS=m +# CONFIG_ADFS_FS_RW is not set +CONFIG_AFFS_FS=m +CONFIG_ECRYPT_FS=y +CONFIG_ECRYPT_FS_MESSAGING=y +CONFIG_HFS_FS=m +CONFIG_HFSPLUS_FS=m +CONFIG_BEFS_FS=m +# CONFIG_BEFS_DEBUG is not set +CONFIG_BFS_FS=m +CONFIG_EFS_FS=m +CONFIG_JFFS2_FS=m +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set +# CONFIG_JFFS2_SUMMARY is not set +CONFIG_JFFS2_FS_XATTR=y +CONFIG_JFFS2_FS_POSIX_ACL=y +CONFIG_JFFS2_FS_SECURITY=y +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_LZO=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_JFFS2_CMODE_NONE is not set +# CONFIG_JFFS2_CMODE_PRIORITY is not set +# CONFIG_JFFS2_CMODE_SIZE is not set +CONFIG_JFFS2_CMODE_FAVOURLZO=y +CONFIG_UBIFS_FS=m +# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set +CONFIG_UBIFS_FS_LZO=y +CONFIG_UBIFS_FS_ZLIB=y +CONFIG_UBIFS_FS_ZSTD=y +# CONFIG_UBIFS_ATIME_SUPPORT is not set +CONFIG_UBIFS_FS_XATTR=y +CONFIG_UBIFS_FS_SECURITY=y +CONFIG_UBIFS_FS_AUTHENTICATION=y +CONFIG_CRAMFS=m +CONFIG_CRAMFS_BLOCKDEV=y +CONFIG_CRAMFS_MTD=y +CONFIG_SQUASHFS=y +# CONFIG_SQUASHFS_FILE_CACHE is not set +CONFIG_SQUASHFS_FILE_DIRECT=y +CONFIG_SQUASHFS_DECOMP_SINGLE=y +# CONFIG_SQUASHFS_DECOMP_MULTI is not set +# CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set +CONFIG_SQUASHFS_XATTR=y +CONFIG_SQUASHFS_ZLIB=y +CONFIG_SQUASHFS_LZ4=y +CONFIG_SQUASHFS_LZO=y +CONFIG_SQUASHFS_XZ=y +CONFIG_SQUASHFS_ZSTD=y +# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +CONFIG_VXFS_FS=m +CONFIG_MINIX_FS=m +CONFIG_OMFS_FS=m +CONFIG_HPFS_FS=m +CONFIG_QNX4FS_FS=m +CONFIG_QNX6FS_FS=m +# CONFIG_QNX6FS_DEBUG is not set +CONFIG_ROMFS_FS=m +CONFIG_ROMFS_BACKED_BY_BLOCK=y +# CONFIG_ROMFS_BACKED_BY_MTD is not set +# CONFIG_ROMFS_BACKED_BY_BOTH is not set +CONFIG_ROMFS_ON_BLOCK=y +CONFIG_PSTORE=y +CONFIG_PSTORE_DEFAULT_KMSG_BYTES=10240 +CONFIG_PSTORE_DEFLATE_COMPRESS=y +# CONFIG_PSTORE_LZO_COMPRESS is not set +# CONFIG_PSTORE_LZ4_COMPRESS is not set +# CONFIG_PSTORE_LZ4HC_COMPRESS is not set +# CONFIG_PSTORE_842_COMPRESS is not set +# CONFIG_PSTORE_ZSTD_COMPRESS is not set +CONFIG_PSTORE_COMPRESS=y +CONFIG_PSTORE_DEFLATE_COMPRESS_DEFAULT=y +CONFIG_PSTORE_COMPRESS_DEFAULT="deflate" +# CONFIG_PSTORE_CONSOLE is not set +# CONFIG_PSTORE_PMSG is not set +# CONFIG_PSTORE_FTRACE is not set +CONFIG_PSTORE_RAM=m +# CONFIG_PSTORE_BLK is not set +CONFIG_SYSV_FS=m +CONFIG_UFS_FS=m +# CONFIG_UFS_FS_WRITE is not set +# CONFIG_UFS_DEBUG is not set +CONFIG_EROFS_FS=m +# CONFIG_EROFS_FS_DEBUG is not set +CONFIG_EROFS_FS_XATTR=y +CONFIG_EROFS_FS_POSIX_ACL=y +CONFIG_EROFS_FS_SECURITY=y +CONFIG_EROFS_FS_ZIP=y +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=m +CONFIG_NFS_V2=m +CONFIG_NFS_V3=m +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=m +CONFIG_NFS_SWAP=y +CONFIG_NFS_V4_1=y +CONFIG_NFS_V4_2=y +CONFIG_PNFS_FILE_LAYOUT=m +CONFIG_PNFS_BLOCK=m +CONFIG_PNFS_FLEXFILE_LAYOUT=m +CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" +CONFIG_NFS_V4_1_MIGRATION=y +CONFIG_NFS_V4_SECURITY_LABEL=y +CONFIG_NFS_FSCACHE=y +# CONFIG_NFS_USE_LEGACY_DNS is not set +CONFIG_NFS_USE_KERNEL_DNS=y +CONFIG_NFS_DEBUG=y +CONFIG_NFS_DISABLE_UDP_SUPPORT=y +# CONFIG_NFS_V4_2_READ_PLUS is not set +CONFIG_NFSD=m +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +CONFIG_NFSD_V4=y +CONFIG_NFSD_PNFS=y +CONFIG_NFSD_BLOCKLAYOUT=y +CONFIG_NFSD_SCSILAYOUT=y +CONFIG_NFSD_FLEXFILELAYOUT=y +# CONFIG_NFSD_V4_2_INTER_SSC is not set +CONFIG_NFSD_V4_SECURITY_LABEL=y +CONFIG_GRACE_PERIOD=m +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_NFS_ACL_SUPPORT=m +CONFIG_NFS_COMMON=y +CONFIG_NFS_V4_2_SSC_HELPER=y +CONFIG_SUNRPC=m +CONFIG_SUNRPC_GSS=m +CONFIG_SUNRPC_BACKCHANNEL=y +CONFIG_SUNRPC_SWAP=y +CONFIG_RPCSEC_GSS_KRB5=m +# CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES is not set +CONFIG_SUNRPC_DEBUG=y +CONFIG_SUNRPC_XPRT_RDMA=m +CONFIG_CEPH_FS=m +CONFIG_CEPH_FSCACHE=y +CONFIG_CEPH_FS_POSIX_ACL=y +CONFIG_CEPH_FS_SECURITY_LABEL=y +CONFIG_CIFS=m +# CONFIG_CIFS_STATS2 is not set +CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y +CONFIG_CIFS_UPCALL=y +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +CONFIG_CIFS_DEBUG=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_DEBUG_DUMP_KEYS is not set +CONFIG_CIFS_DFS_UPCALL=y +# CONFIG_CIFS_SWN_UPCALL is not set +# CONFIG_CIFS_SMB_DIRECT is not set +CONFIG_CIFS_FSCACHE=y +# CONFIG_SMB_SERVER is not set +CONFIG_SMBFS_COMMON=m +CONFIG_CODA_FS=m +CONFIG_AFS_FS=m +# CONFIG_AFS_DEBUG is not set +CONFIG_AFS_FSCACHE=y +# CONFIG_AFS_DEBUG_CURSOR is not set +CONFIG_9P_FS=m +CONFIG_9P_FSCACHE=y +CONFIG_9P_FS_POSIX_ACL=y +CONFIG_9P_FS_SECURITY=y +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_737=y +CONFIG_NLS_CODEPAGE_775=y +CONFIG_NLS_CODEPAGE_850=y +CONFIG_NLS_CODEPAGE_852=y +CONFIG_NLS_CODEPAGE_855=y +CONFIG_NLS_CODEPAGE_857=y +CONFIG_NLS_CODEPAGE_860=y +CONFIG_NLS_CODEPAGE_861=y +CONFIG_NLS_CODEPAGE_862=y +CONFIG_NLS_CODEPAGE_863=y +CONFIG_NLS_CODEPAGE_864=y +CONFIG_NLS_CODEPAGE_865=y +CONFIG_NLS_CODEPAGE_866=y +CONFIG_NLS_CODEPAGE_869=y +CONFIG_NLS_CODEPAGE_936=y +CONFIG_NLS_CODEPAGE_950=y +CONFIG_NLS_CODEPAGE_932=y +CONFIG_NLS_CODEPAGE_949=y +CONFIG_NLS_CODEPAGE_874=y +CONFIG_NLS_ISO8859_8=y +CONFIG_NLS_CODEPAGE_1250=y +CONFIG_NLS_CODEPAGE_1251=y +CONFIG_NLS_ASCII=y +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_ISO8859_2=y +CONFIG_NLS_ISO8859_3=y +CONFIG_NLS_ISO8859_4=y +CONFIG_NLS_ISO8859_5=y +CONFIG_NLS_ISO8859_6=y +CONFIG_NLS_ISO8859_7=y +CONFIG_NLS_ISO8859_9=y +CONFIG_NLS_ISO8859_13=y +CONFIG_NLS_ISO8859_14=y +CONFIG_NLS_ISO8859_15=y +CONFIG_NLS_KOI8_R=y +CONFIG_NLS_KOI8_U=y +CONFIG_NLS_MAC_ROMAN=y +CONFIG_NLS_MAC_CELTIC=y +CONFIG_NLS_MAC_CENTEURO=y +CONFIG_NLS_MAC_CROATIAN=y +CONFIG_NLS_MAC_CYRILLIC=y +CONFIG_NLS_MAC_GAELIC=y +CONFIG_NLS_MAC_GREEK=y +CONFIG_NLS_MAC_ICELAND=y +CONFIG_NLS_MAC_INUIT=y +CONFIG_NLS_MAC_ROMANIAN=y +CONFIG_NLS_MAC_TURKISH=y +CONFIG_NLS_UTF8=y +CONFIG_DLM=y +# CONFIG_DLM_DEBUG is not set +CONFIG_UNICODE=y +# CONFIG_UNICODE_NORMALIZATION_SELFTEST is not set +CONFIG_IO_WQ=y +# end of File systems + +# +# Security options +# +CONFIG_KEYS=y +CONFIG_KEYS_REQUEST_CACHE=y +CONFIG_PERSISTENT_KEYRINGS=y +# CONFIG_TRUSTED_KEYS is not set +CONFIG_ENCRYPTED_KEYS=y +CONFIG_KEY_DH_OPERATIONS=y +# CONFIG_SECURITY_DMESG_RESTRICT is not set +CONFIG_SECURITY=y +CONFIG_SECURITYFS=y +CONFIG_SECURITY_NETWORK=y +# CONFIG_PAGE_TABLE_ISOLATION is not set +CONFIG_SECURITY_INFINIBAND=y +CONFIG_SECURITY_NETWORK_XFRM=y +CONFIG_SECURITY_PATH=y +CONFIG_INTEL_TXT=y +CONFIG_LSM_MMAP_MIN_ADDR=0 +CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y +# CONFIG_HARDENED_USERCOPY is not set +# CONFIG_FORTIFY_SOURCE is not set +# CONFIG_STATIC_USERMODEHELPER is not set +CONFIG_SECURITY_SELINUX=y +CONFIG_SECURITY_SELINUX_BOOTPARAM=y +# CONFIG_SECURITY_SELINUX_DISABLE is not set +CONFIG_SECURITY_SELINUX_DEVELOP=y +CONFIG_SECURITY_SELINUX_AVC_STATS=y +CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 +CONFIG_SECURITY_SELINUX_SIDTAB_HASH_BITS=9 +CONFIG_SECURITY_SELINUX_SID2STR_CACHE_SIZE=256 +CONFIG_SECURITY_SMACK=y +# CONFIG_SECURITY_SMACK_BRINGUP is not set +CONFIG_SECURITY_SMACK_NETFILTER=y +CONFIG_SECURITY_SMACK_APPEND_SIGNALS=y +CONFIG_SECURITY_TOMOYO=y +CONFIG_SECURITY_TOMOYO_MAX_ACCEPT_ENTRY=2048 +CONFIG_SECURITY_TOMOYO_MAX_AUDIT_LOG=1024 +# CONFIG_SECURITY_TOMOYO_OMIT_USERSPACE_LOADER is not set +CONFIG_SECURITY_TOMOYO_POLICY_LOADER="/sbin/tomoyo-init" +CONFIG_SECURITY_TOMOYO_ACTIVATION_TRIGGER="/sbin/init" +# CONFIG_SECURITY_TOMOYO_INSECURE_BUILTIN_SETTING is not set +CONFIG_SECURITY_APPARMOR=y +CONFIG_SECURITY_APPARMOR_HASH=y +CONFIG_SECURITY_APPARMOR_HASH_DEFAULT=y +# CONFIG_SECURITY_APPARMOR_DEBUG is not set +# CONFIG_SECURITY_LOADPIN is not set +CONFIG_SECURITY_YAMA=y +CONFIG_SECURITY_SAFESETID=y +CONFIG_SECURITY_LOCKDOWN_LSM=y +CONFIG_SECURITY_LOCKDOWN_LSM_EARLY=y +CONFIG_LOCK_DOWN_KERNEL_FORCE_NONE=y +# CONFIG_LOCK_DOWN_KERNEL_FORCE_INTEGRITY is not set +# CONFIG_LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY is not set +# CONFIG_SECURITY_LANDLOCK is not set +CONFIG_INTEGRITY=y +CONFIG_INTEGRITY_SIGNATURE=y +CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y +CONFIG_INTEGRITY_TRUSTED_KEYRING=y +CONFIG_INTEGRITY_PLATFORM_KEYRING=y +CONFIG_LOAD_UEFI_KEYS=y +CONFIG_INTEGRITY_AUDIT=y +CONFIG_IMA=y +CONFIG_IMA_MEASURE_PCR_IDX=10 +CONFIG_IMA_LSM_RULES=y +# CONFIG_IMA_TEMPLATE is not set +CONFIG_IMA_NG_TEMPLATE=y +# CONFIG_IMA_SIG_TEMPLATE is not set +CONFIG_IMA_DEFAULT_TEMPLATE="ima-ng" +CONFIG_IMA_DEFAULT_HASH_SHA1=y +# CONFIG_IMA_DEFAULT_HASH_SHA256 is not set +# CONFIG_IMA_DEFAULT_HASH_SHA512 is not set +CONFIG_IMA_DEFAULT_HASH="sha1" +# CONFIG_IMA_WRITE_POLICY is not set +# CONFIG_IMA_READ_POLICY is not set +CONFIG_IMA_APPRAISE=y +# CONFIG_IMA_ARCH_POLICY is not set +# CONFIG_IMA_APPRAISE_BUILD_POLICY is not set +CONFIG_IMA_APPRAISE_BOOTPARAM=y +CONFIG_IMA_APPRAISE_MODSIG=y +CONFIG_IMA_TRUSTED_KEYRING=y +# CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY is not set +# CONFIG_IMA_BLACKLIST_KEYRING is not set +# CONFIG_IMA_LOAD_X509 is not set +CONFIG_IMA_MEASURE_ASYMMETRIC_KEYS=y +CONFIG_IMA_QUEUE_EARLY_BOOT_KEYS=y +# CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT is not set +# CONFIG_IMA_DISABLE_HTABLE is not set +CONFIG_EVM=y +CONFIG_EVM_ATTR_FSUUID=y +CONFIG_EVM_EXTRA_SMACK_XATTRS=y +CONFIG_EVM_ADD_XATTRS=y +# CONFIG_EVM_LOAD_X509 is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_APPARMOR=y +# CONFIG_DEFAULT_SECURITY_DAC is not set +CONFIG_LSM="lockdown,yama,integrity,apparmor" + +# +# Kernel hardening options +# + +# +# Memory initialization +# +CONFIG_INIT_STACK_NONE=y +# CONFIG_GCC_PLUGIN_STRUCTLEAK_USER is not set +# CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF is not set +# CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL is not set +# CONFIG_GCC_PLUGIN_STACKLEAK is not set +CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y +# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set +CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y +# CONFIG_ZERO_CALL_USED_REGS is not set +# end of Memory initialization +# end of Kernel hardening options +# end of Security options + +CONFIG_XOR_BLOCKS=y +CONFIG_ASYNC_CORE=m +CONFIG_ASYNC_MEMCPY=m +CONFIG_ASYNC_XOR=m +CONFIG_ASYNC_PQ=m +CONFIG_ASYNC_RAID6_RECOV=m +CONFIG_CRYPTO=y + +# +# Crypto core or helper +# +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_AEAD=y +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_SKCIPHER=y +CONFIG_CRYPTO_SKCIPHER2=y +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_RNG=y +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_RNG_DEFAULT=y +CONFIG_CRYPTO_AKCIPHER2=y +CONFIG_CRYPTO_AKCIPHER=y +CONFIG_CRYPTO_KPP2=y +CONFIG_CRYPTO_KPP=y +CONFIG_CRYPTO_ACOMP2=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +CONFIG_CRYPTO_USER=m +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y +CONFIG_CRYPTO_GF128MUL=y +CONFIG_CRYPTO_NULL=y +CONFIG_CRYPTO_NULL2=y +CONFIG_CRYPTO_PCRYPT=m +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_AUTHENC=m +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_SIMD=m +CONFIG_CRYPTO_ENGINE=m + +# +# Public-key cryptography +# +CONFIG_CRYPTO_RSA=y +CONFIG_CRYPTO_DH=y +CONFIG_CRYPTO_ECC=m +CONFIG_CRYPTO_ECDH=m +# CONFIG_CRYPTO_ECDSA is not set +CONFIG_CRYPTO_ECRDSA=m +# CONFIG_CRYPTO_SM2 is not set +# CONFIG_CRYPTO_CURVE25519 is not set +# CONFIG_CRYPTO_CURVE25519_X86 is not set + +# +# Authenticated Encryption with Associated Data +# +CONFIG_CRYPTO_CCM=y +CONFIG_CRYPTO_GCM=y +CONFIG_CRYPTO_CHACHA20POLY1305=m +CONFIG_CRYPTO_AEGIS128=m +CONFIG_CRYPTO_AEGIS128_AESNI_SSE2=m +CONFIG_CRYPTO_SEQIV=y +CONFIG_CRYPTO_ECHAINIV=m + +# +# Block modes +# +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_CFB=m +CONFIG_CRYPTO_CTR=y +CONFIG_CRYPTO_CTS=y +CONFIG_CRYPTO_ECB=y +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_OFB=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_XTS=y +CONFIG_CRYPTO_KEYWRAP=m +CONFIG_CRYPTO_NHPOLY1305=m +CONFIG_CRYPTO_NHPOLY1305_SSE2=m +CONFIG_CRYPTO_NHPOLY1305_AVX2=m +CONFIG_CRYPTO_ADIANTUM=m +CONFIG_CRYPTO_ESSIV=m + +# +# Hash modes +# +CONFIG_CRYPTO_CMAC=y +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_VMAC=m + +# +# Digest +# +CONFIG_CRYPTO_CRC32C=y +CONFIG_CRYPTO_CRC32C_INTEL=y +CONFIG_CRYPTO_CRC32=y +CONFIG_CRYPTO_CRC32_PCLMUL=m +CONFIG_CRYPTO_XXHASH=y +CONFIG_CRYPTO_BLAKE2B=y +# CONFIG_CRYPTO_BLAKE2S is not set +# CONFIG_CRYPTO_BLAKE2S_X86 is not set +CONFIG_CRYPTO_CRCT10DIF=y +CONFIG_CRYPTO_CRCT10DIF_PCLMUL=m +CONFIG_CRYPTO_GHASH=y +CONFIG_CRYPTO_POLY1305=m +CONFIG_CRYPTO_POLY1305_X86_64=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_RMD160=m +CONFIG_CRYPTO_SHA1=y +CONFIG_CRYPTO_SHA1_SSSE3=m +CONFIG_CRYPTO_SHA256_SSSE3=m +CONFIG_CRYPTO_SHA512_SSSE3=m +CONFIG_CRYPTO_SHA256=y +CONFIG_CRYPTO_SHA512=y +CONFIG_CRYPTO_SHA3=m +CONFIG_CRYPTO_SM3=m +CONFIG_CRYPTO_STREEBOG=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m + +# +# Ciphers +# +CONFIG_CRYPTO_AES=y +CONFIG_CRYPTO_AES_TI=m +CONFIG_CRYPTO_AES_NI_INTEL=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_BLOWFISH_COMMON=m +CONFIG_CRYPTO_BLOWFISH_X86_64=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_CAMELLIA_X86_64=m +CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64=m +CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64=m +CONFIG_CRYPTO_CAST_COMMON=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST5_AVX_X86_64=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_CAST6_AVX_X86_64=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_DES3_EDE_X86_64=m +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_CHACHA20=m +CONFIG_CRYPTO_CHACHA20_X86_64=m +CONFIG_CRYPTO_SEED=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_SERPENT_SSE2_X86_64=m +CONFIG_CRYPTO_SERPENT_AVX_X86_64=m +CONFIG_CRYPTO_SERPENT_AVX2_X86_64=m +CONFIG_CRYPTO_SM4=m +# CONFIG_CRYPTO_SM4_AESNI_AVX_X86_64 is not set +# CONFIG_CRYPTO_SM4_AESNI_AVX2_X86_64 is not set +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_TWOFISH_X86_64=m +CONFIG_CRYPTO_TWOFISH_X86_64_3WAY=m +CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m + +# +# Compression +# +CONFIG_CRYPTO_DEFLATE=y +CONFIG_CRYPTO_LZO=y +CONFIG_CRYPTO_842=m +CONFIG_CRYPTO_LZ4=m +CONFIG_CRYPTO_LZ4HC=m +CONFIG_CRYPTO_ZSTD=m + +# +# Random Number Generation +# +CONFIG_CRYPTO_ANSI_CPRNG=m +CONFIG_CRYPTO_DRBG_MENU=y +CONFIG_CRYPTO_DRBG_HMAC=y +CONFIG_CRYPTO_DRBG_HASH=y +CONFIG_CRYPTO_DRBG_CTR=y +CONFIG_CRYPTO_DRBG=y +CONFIG_CRYPTO_JITTERENTROPY=y +CONFIG_CRYPTO_USER_API=m +CONFIG_CRYPTO_USER_API_HASH=m +CONFIG_CRYPTO_USER_API_SKCIPHER=m +CONFIG_CRYPTO_USER_API_RNG=m +# CONFIG_CRYPTO_USER_API_RNG_CAVP is not set +CONFIG_CRYPTO_USER_API_AEAD=m +CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE=y +CONFIG_CRYPTO_STATS=y +CONFIG_CRYPTO_HASH_INFO=y + +# +# Crypto library routines +# +CONFIG_CRYPTO_LIB_AES=y +CONFIG_CRYPTO_LIB_ARC4=y +# CONFIG_CRYPTO_LIB_BLAKE2S is not set +CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA=m +CONFIG_CRYPTO_LIB_CHACHA_GENERIC=m +# CONFIG_CRYPTO_LIB_CHACHA is not set +# CONFIG_CRYPTO_LIB_CURVE25519 is not set +CONFIG_CRYPTO_LIB_DES=m +CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11 +CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305=m +CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m +# CONFIG_CRYPTO_LIB_POLY1305 is not set +# CONFIG_CRYPTO_LIB_CHACHA20POLY1305 is not set +CONFIG_CRYPTO_LIB_SHA256=y +CONFIG_CRYPTO_LIB_SM4=m +CONFIG_CRYPTO_HW=y +CONFIG_CRYPTO_DEV_PADLOCK=y +CONFIG_CRYPTO_DEV_PADLOCK_AES=m +CONFIG_CRYPTO_DEV_PADLOCK_SHA=m +CONFIG_CRYPTO_DEV_ATMEL_I2C=m +CONFIG_CRYPTO_DEV_ATMEL_ECC=m +CONFIG_CRYPTO_DEV_ATMEL_SHA204A=m +CONFIG_CRYPTO_DEV_CCP=y +CONFIG_CRYPTO_DEV_CCP_DD=m +CONFIG_CRYPTO_DEV_SP_CCP=y +CONFIG_CRYPTO_DEV_CCP_CRYPTO=m +CONFIG_CRYPTO_DEV_SP_PSP=y +# CONFIG_CRYPTO_DEV_CCP_DEBUGFS is not set +CONFIG_CRYPTO_DEV_QAT=m +CONFIG_CRYPTO_DEV_QAT_DH895xCC=m +CONFIG_CRYPTO_DEV_QAT_C3XXX=m +CONFIG_CRYPTO_DEV_QAT_C62X=m +# CONFIG_CRYPTO_DEV_QAT_4XXX is not set +CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=m +CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m +CONFIG_CRYPTO_DEV_QAT_C62XVF=m +CONFIG_CRYPTO_DEV_NITROX=m +CONFIG_CRYPTO_DEV_NITROX_CNN55XX=m +CONFIG_CRYPTO_DEV_CHELSIO=m +CONFIG_CRYPTO_DEV_VIRTIO=m +CONFIG_CRYPTO_DEV_SAFEXCEL=m +# CONFIG_CRYPTO_DEV_AMLOGIC_GXL is not set +CONFIG_ASYMMETRIC_KEY_TYPE=y +CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y +CONFIG_X509_CERTIFICATE_PARSER=y +CONFIG_PKCS8_PRIVATE_KEY_PARSER=m +CONFIG_PKCS7_MESSAGE_PARSER=y +CONFIG_PKCS7_TEST_KEY=m +CONFIG_SIGNED_PE_FILE_VERIFICATION=y + +# +# Certificates for signature checking +# +CONFIG_MODULE_SIG_KEY="certs/signing_key.pem" +CONFIG_MODULE_SIG_KEY_TYPE_RSA=y +# CONFIG_MODULE_SIG_KEY_TYPE_ECDSA is not set +CONFIG_SYSTEM_TRUSTED_KEYRING=y +CONFIG_SYSTEM_TRUSTED_KEYS="" +CONFIG_SYSTEM_EXTRA_CERTIFICATE=y +CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE=4096 +CONFIG_SECONDARY_TRUSTED_KEYRING=y +CONFIG_SYSTEM_BLACKLIST_KEYRING=y +CONFIG_SYSTEM_BLACKLIST_HASH_LIST="" +# CONFIG_SYSTEM_REVOCATION_LIST is not set +# end of Certificates for signature checking + +CONFIG_BINARY_PRINTF=y + +# +# Library routines +# +CONFIG_RAID6_PQ=y +CONFIG_RAID6_PQ_BENCHMARK=y +CONFIG_LINEAR_RANGES=y +CONFIG_PACKING=y +CONFIG_BITREVERSE=y +CONFIG_GENERIC_STRNCPY_FROM_USER=y +CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y +CONFIG_GENERIC_FIND_FIRST_BIT=y +CONFIG_CORDIC=m +# CONFIG_PRIME_NUMBERS is not set +CONFIG_RATIONAL=y +CONFIG_GENERIC_PCI_IOMAP=y +CONFIG_GENERIC_IOMAP=y +CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y +CONFIG_ARCH_HAS_FAST_MULTIPLIER=y +CONFIG_ARCH_USE_SYM_ANNOTATIONS=y +CONFIG_CRC_CCITT=y +CONFIG_CRC16=y +CONFIG_CRC_T10DIF=y +CONFIG_CRC_ITU_T=y +CONFIG_CRC32=y +# CONFIG_CRC32_SELFTEST is not set +CONFIG_CRC32_SLICEBY8=y +# CONFIG_CRC32_SLICEBY4 is not set +# CONFIG_CRC32_SARWATE is not set +# CONFIG_CRC32_BIT is not set +CONFIG_CRC64=y +CONFIG_CRC4=y +CONFIG_CRC7=y +CONFIG_LIBCRC32C=y +CONFIG_CRC8=y +CONFIG_XXHASH=y +# CONFIG_RANDOM32_SELFTEST is not set +CONFIG_842_COMPRESS=m +CONFIG_842_DECOMPRESS=m +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_LZ4_COMPRESS=m +CONFIG_LZ4HC_COMPRESS=m +CONFIG_LZ4_DECOMPRESS=y +CONFIG_ZSTD_COMPRESS=y +CONFIG_ZSTD_DECOMPRESS=y +CONFIG_XZ_DEC=y +CONFIG_XZ_DEC_X86=y +CONFIG_XZ_DEC_POWERPC=y +CONFIG_XZ_DEC_IA64=y +CONFIG_XZ_DEC_ARM=y +CONFIG_XZ_DEC_ARMTHUMB=y +CONFIG_XZ_DEC_SPARC=y +CONFIG_XZ_DEC_BCJ=y +CONFIG_XZ_DEC_TEST=m +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_BZIP2=y +CONFIG_DECOMPRESS_LZMA=y +CONFIG_DECOMPRESS_XZ=y +CONFIG_DECOMPRESS_LZO=y +CONFIG_DECOMPRESS_LZ4=y +CONFIG_DECOMPRESS_ZSTD=y +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_REED_SOLOMON=m +CONFIG_REED_SOLOMON_ENC8=y +CONFIG_REED_SOLOMON_DEC8=y +CONFIG_REED_SOLOMON_DEC16=y +CONFIG_BCH=m +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_BTREE=y +CONFIG_INTERVAL_TREE=y +CONFIG_XARRAY_MULTI=y +CONFIG_ASSOCIATIVE_ARRAY=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT_MAP=y +CONFIG_HAS_DMA=y +CONFIG_DMA_OPS=y +CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_NEED_DMA_MAP_STATE=y +CONFIG_ARCH_DMA_ADDR_T_64BIT=y +CONFIG_ARCH_HAS_FORCE_DMA_UNENCRYPTED=y +CONFIG_SWIOTLB=y +CONFIG_DMA_COHERENT_POOL=y +CONFIG_DMA_CMA=y +# CONFIG_DMA_PERNUMA_CMA is not set + +# +# Default contiguous memory area size: +# +CONFIG_CMA_SIZE_MBYTES=0 +CONFIG_CMA_SIZE_SEL_MBYTES=y +# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set +# CONFIG_CMA_SIZE_SEL_MIN is not set +# CONFIG_CMA_SIZE_SEL_MAX is not set +CONFIG_CMA_ALIGNMENT=8 +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_DMA_MAP_BENCHMARK is not set +CONFIG_SGL_ALLOC=y +CONFIG_IOMMU_HELPER=y +CONFIG_CHECK_SIGNATURE=y +CONFIG_CPUMASK_OFFSTACK=y +CONFIG_CPU_RMAP=y +CONFIG_DQL=y +CONFIG_GLOB=y +# CONFIG_GLOB_SELFTEST is not set +CONFIG_NLATTR=y +CONFIG_LRU_CACHE=m +CONFIG_CLZ_TAB=y +CONFIG_IRQ_POLL=y +CONFIG_MPILIB=y +CONFIG_SIGNATURE=y +CONFIG_DIMLIB=y +CONFIG_OID_REGISTRY=y +CONFIG_UCS2_STRING=y +CONFIG_HAVE_GENERIC_VDSO=y +CONFIG_GENERIC_GETTIMEOFDAY=y +CONFIG_GENERIC_VDSO_TIME_NS=y +CONFIG_FONT_SUPPORT=y +CONFIG_FONTS=y +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +# CONFIG_FONT_6x11 is not set +# CONFIG_FONT_7x14 is not set +# CONFIG_FONT_PEARL_8x8 is not set +CONFIG_FONT_ACORN_8x8=y +# CONFIG_FONT_MINI_4x6 is not set +CONFIG_FONT_6x10=y +# CONFIG_FONT_10x18 is not set +# CONFIG_FONT_SUN8x16 is not set +# CONFIG_FONT_SUN12x22 is not set +CONFIG_FONT_TER16x32=y +# CONFIG_FONT_6x8 is not set +CONFIG_SG_POOL=y +CONFIG_ARCH_HAS_PMEM_API=y +CONFIG_MEMREGION=y +CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE=y +CONFIG_ARCH_HAS_COPY_MC=y +CONFIG_ARCH_STACKWALK=y +CONFIG_SBITMAP=y +CONFIG_PARMAN=m +CONFIG_OBJAGG=m +# end of Library routines + +CONFIG_PLDMFW=y + +# +# Kernel hacking +# + +# +# printk and dmesg options +# +CONFIG_PRINTK_TIME=y +# CONFIG_PRINTK_CALLER is not set +# CONFIG_STACKTRACE_BUILD_ID is not set +CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 +CONFIG_CONSOLE_LOGLEVEL_QUIET=4 +CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 +CONFIG_BOOT_PRINTK_DELAY=y +CONFIG_DYNAMIC_DEBUG=y +CONFIG_DYNAMIC_DEBUG_CORE=y +CONFIG_SYMBOLIC_ERRNAME=y +CONFIG_DEBUG_BUGVERBOSE=y +# end of printk and dmesg options + +# +# Compile-time checks and compiler options +# +CONFIG_DEBUG_INFO=y +# CONFIG_DEBUG_INFO_REDUCED is not set +# CONFIG_DEBUG_INFO_COMPRESSED is not set +# CONFIG_DEBUG_INFO_SPLIT is not set +# CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set +CONFIG_DEBUG_INFO_DWARF4=y +# CONFIG_DEBUG_INFO_DWARF5 is not set +# CONFIG_DEBUG_INFO_BTF is not set +CONFIG_GDB_SCRIPTS=y +CONFIG_FRAME_WARN=1024 +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_READABLE_ASM is not set +# CONFIG_HEADERS_INSTALL is not set +# CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_SECTION_MISMATCH_WARN_ONLY=y +# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B is not set +CONFIG_FRAME_POINTER=y +CONFIG_STACK_VALIDATION=y +# CONFIG_VMLINUX_MAP is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# end of Compile-time checks and compiler options + +# +# Generic Kernel Debugging Instruments +# +CONFIG_MAGIC_SYSRQ=y +CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x01b6 +CONFIG_MAGIC_SYSRQ_SERIAL=y +CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE="" +CONFIG_DEBUG_FS=y +CONFIG_DEBUG_FS_ALLOW_ALL=y +# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set +# CONFIG_DEBUG_FS_ALLOW_NONE is not set +CONFIG_HAVE_ARCH_KGDB=y +CONFIG_KGDB=y +CONFIG_KGDB_HONOUR_BLOCKLIST=y +CONFIG_KGDB_SERIAL_CONSOLE=y +# CONFIG_KGDB_TESTS is not set +CONFIG_KGDB_LOW_LEVEL_TRAP=y +CONFIG_KGDB_KDB=y +CONFIG_KDB_DEFAULT_ENABLE=0x1 +CONFIG_KDB_KEYBOARD=y +CONFIG_KDB_CONTINUE_CATASTROPHIC=0 +CONFIG_ARCH_HAS_EARLY_DEBUG=y +CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y +# CONFIG_UBSAN is not set +CONFIG_HAVE_ARCH_KCSAN=y +CONFIG_HAVE_KCSAN_COMPILER=y +# CONFIG_KCSAN is not set +# end of Generic Kernel Debugging Instruments + +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_MISC=y + +# +# Memory Debugging +# +# CONFIG_PAGE_EXTENSION is not set +# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_PAGE_OWNER is not set +CONFIG_PAGE_POISONING=y +# CONFIG_DEBUG_PAGE_REF is not set +# CONFIG_DEBUG_RODATA_TEST is not set +CONFIG_ARCH_HAS_DEBUG_WX=y +CONFIG_DEBUG_WX=y +CONFIG_GENERIC_PTDUMP=y +CONFIG_PTDUMP_CORE=y +# CONFIG_PTDUMP_DEBUGFS is not set +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_SLUB_STATS is not set +CONFIG_HAVE_DEBUG_KMEMLEAK=y +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_DEBUG_STACK_USAGE is not set +CONFIG_SCHED_STACK_END_CHECK=y +CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_VM_PGTABLE is not set +CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y +# CONFIG_DEBUG_VIRTUAL is not set +# CONFIG_DEBUG_MEMORY_INIT is not set +CONFIG_MEMORY_NOTIFIER_ERROR_INJECT=m +# CONFIG_DEBUG_PER_CPU_MAPS is not set +CONFIG_HAVE_ARCH_KASAN=y +CONFIG_HAVE_ARCH_KASAN_VMALLOC=y +CONFIG_CC_HAS_KASAN_GENERIC=y +CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y +# CONFIG_KASAN is not set +CONFIG_HAVE_ARCH_KFENCE=y +# CONFIG_KFENCE is not set +# end of Memory Debugging + +# CONFIG_DEBUG_SHIRQ is not set + +# +# Debug Oops, Lockups and Hangs +# +# CONFIG_PANIC_ON_OOPS is not set +CONFIG_PANIC_ON_OOPS_VALUE=0 +CONFIG_PANIC_TIMEOUT=0 +CONFIG_LOCKUP_DETECTOR=y +CONFIG_SOFTLOCKUP_DETECTOR=y +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +CONFIG_HARDLOCKUP_DETECTOR_PERF=y +CONFIG_HARDLOCKUP_CHECK_TIMESTAMP=y +CONFIG_HARDLOCKUP_DETECTOR=y +# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set +CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=0 +CONFIG_DETECT_HUNG_TASK=y +CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 +# CONFIG_WQ_WATCHDOG is not set +# CONFIG_TEST_LOCKUP is not set +# end of Debug Oops, Lockups and Hangs + +# +# Scheduler Debugging +# +CONFIG_SCHED_DEBUG=y +CONFIG_SCHED_INFO=y +CONFIG_SCHEDSTATS=y +# end of Scheduler Debugging + +# CONFIG_DEBUG_TIMEKEEPING is not set + +# +# Lock Debugging (spinlocks, mutexes, etc...) +# +CONFIG_LOCK_DEBUGGING_SUPPORT=y +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set +# CONFIG_DEBUG_RWSEMS is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_DEBUG_ATOMIC_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_LOCK_TORTURE_TEST is not set +# CONFIG_WW_MUTEX_SELFTEST is not set +# CONFIG_SCF_TORTURE_TEST is not set +# CONFIG_CSD_LOCK_WAIT_DEBUG is not set +# end of Lock Debugging (spinlocks, mutexes, etc...) + +# CONFIG_DEBUG_IRQFLAGS is not set +CONFIG_STACKTRACE=y +# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set +# CONFIG_DEBUG_KOBJECT is not set + +# +# Debug kernel data structures +# +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_PLIST is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_BUG_ON_DATA_CORRUPTION is not set +# end of Debug kernel data structures + +# CONFIG_DEBUG_CREDENTIALS is not set + +# +# RCU Debugging +# +# CONFIG_RCU_SCALE_TEST is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_RCU_REF_SCALE_TEST is not set +CONFIG_RCU_CPU_STALL_TIMEOUT=60 +# CONFIG_RCU_TRACE is not set +# CONFIG_RCU_EQS_DEBUG is not set +# end of RCU Debugging + +# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set +# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set +# CONFIG_LATENCYTOP is not set +CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_NOP_TRACER=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_FENTRY=y +CONFIG_HAVE_OBJTOOL_MCOUNT=y +CONFIG_HAVE_C_RECORDMCOUNT=y +CONFIG_TRACER_MAX_TRACE=y +CONFIG_TRACE_CLOCK=y +CONFIG_RING_BUFFER=y +CONFIG_EVENT_TRACING=y +CONFIG_CONTEXT_SWITCH_TRACER=y +CONFIG_TRACING=y +CONFIG_GENERIC_TRACER=y +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y +# CONFIG_BOOTTIME_TRACING is not set +CONFIG_FUNCTION_TRACER=y +CONFIG_FUNCTION_GRAPH_TRACER=y +CONFIG_DYNAMIC_FTRACE=y +CONFIG_DYNAMIC_FTRACE_WITH_REGS=y +CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y +CONFIG_DYNAMIC_FTRACE_WITH_ARGS=y +CONFIG_FUNCTION_PROFILER=y +CONFIG_STACK_TRACER=y +# CONFIG_IRQSOFF_TRACER is not set +CONFIG_SCHED_TRACER=y +CONFIG_HWLAT_TRACER=y +# CONFIG_OSNOISE_TRACER is not set +# CONFIG_TIMERLAT_TRACER is not set +CONFIG_MMIOTRACE=y +CONFIG_FTRACE_SYSCALLS=y +CONFIG_TRACER_SNAPSHOT=y +# CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set +CONFIG_BLK_DEV_IO_TRACE=y +CONFIG_KPROBE_EVENTS=y +# CONFIG_KPROBE_EVENTS_ON_NOTRACE is not set +CONFIG_UPROBE_EVENTS=y +CONFIG_BPF_EVENTS=y +CONFIG_DYNAMIC_EVENTS=y +CONFIG_PROBE_EVENTS=y +CONFIG_BPF_KPROBE_OVERRIDE=y +CONFIG_FTRACE_MCOUNT_RECORD=y +CONFIG_FTRACE_MCOUNT_USE_CC=y +CONFIG_TRACING_MAP=y +CONFIG_SYNTH_EVENTS=y +CONFIG_HIST_TRIGGERS=y +# CONFIG_TRACE_EVENT_INJECT is not set +# CONFIG_TRACEPOINT_BENCHMARK is not set +# CONFIG_RING_BUFFER_BENCHMARK is not set +# CONFIG_TRACE_EVAL_MAP_FILE is not set +# CONFIG_FTRACE_RECORD_RECURSION is not set +# CONFIG_FTRACE_STARTUP_TEST is not set +# CONFIG_RING_BUFFER_STARTUP_TEST is not set +# CONFIG_RING_BUFFER_VALIDATE_TIME_DELTAS is not set +# CONFIG_MMIOTRACE_TEST is not set +# CONFIG_PREEMPTIRQ_DELAY_TEST is not set +# CONFIG_SYNTH_EVENT_GEN_TEST is not set +# CONFIG_KPROBE_EVENT_GEN_TEST is not set +# CONFIG_HIST_TRIGGERS_DEBUG is not set +# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set +CONFIG_SAMPLES=y +# CONFIG_SAMPLE_AUXDISPLAY is not set +# CONFIG_SAMPLE_TRACE_EVENTS is not set +CONFIG_SAMPLE_TRACE_PRINTK=m +# CONFIG_SAMPLE_FTRACE_DIRECT is not set +# CONFIG_SAMPLE_TRACE_ARRAY is not set +# CONFIG_SAMPLE_KOBJECT is not set +# CONFIG_SAMPLE_KPROBES is not set +# CONFIG_SAMPLE_HW_BREAKPOINT is not set +# CONFIG_SAMPLE_KFIFO is not set +# CONFIG_SAMPLE_KDB is not set +# CONFIG_SAMPLE_RPMSG_CLIENT is not set +# CONFIG_SAMPLE_LIVEPATCH is not set +# CONFIG_SAMPLE_CONFIGFS is not set +# CONFIG_SAMPLE_VFIO_MDEV_MTTY is not set +# CONFIG_SAMPLE_VFIO_MDEV_MDPY is not set +# CONFIG_SAMPLE_VFIO_MDEV_MDPY_FB is not set +# CONFIG_SAMPLE_VFIO_MDEV_MBOCHS is not set +# CONFIG_SAMPLE_WATCHDOG is not set +CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y +CONFIG_STRICT_DEVMEM=y +# CONFIG_IO_STRICT_DEVMEM is not set + +# +# x86 Debugging +# +CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y +CONFIG_EARLY_PRINTK_USB=y +# CONFIG_X86_VERBOSE_BOOTUP is not set +CONFIG_EARLY_PRINTK=y +CONFIG_EARLY_PRINTK_DBGP=y +CONFIG_EARLY_PRINTK_USB_XDBC=y +# CONFIG_EFI_PGT_DUMP is not set +# CONFIG_DEBUG_TLBFLUSH is not set +# CONFIG_IOMMU_DEBUG is not set +CONFIG_HAVE_MMIOTRACE_SUPPORT=y +# CONFIG_X86_DECODER_SELFTEST is not set +# CONFIG_IO_DELAY_0X80 is not set +CONFIG_IO_DELAY_0XED=y +# CONFIG_IO_DELAY_UDELAY is not set +# CONFIG_IO_DELAY_NONE is not set +# CONFIG_DEBUG_BOOT_PARAMS is not set +# CONFIG_CPA_DEBUG is not set +# CONFIG_DEBUG_ENTRY is not set +# CONFIG_DEBUG_NMI_SELFTEST is not set +CONFIG_X86_DEBUG_FPU=y +CONFIG_PUNIT_ATOM_DEBUG=m +# CONFIG_UNWINDER_ORC is not set +CONFIG_UNWINDER_FRAME_POINTER=y +# CONFIG_UNWINDER_GUESS is not set +# end of x86 Debugging + +# +# Kernel Testing and Coverage +# +# CONFIG_KUNIT is not set +CONFIG_NOTIFIER_ERROR_INJECTION=m +CONFIG_PM_NOTIFIER_ERROR_INJECT=m +# CONFIG_NETDEV_NOTIFIER_ERROR_INJECT is not set +CONFIG_FUNCTION_ERROR_INJECTION=y +# CONFIG_FAULT_INJECTION is not set +CONFIG_ARCH_HAS_KCOV=y +CONFIG_CC_HAS_SANCOV_TRACE_PC=y +# CONFIG_KCOV is not set +CONFIG_RUNTIME_TESTING_MENU=y +# CONFIG_LKDTM is not set +# CONFIG_TEST_MIN_HEAP is not set +# CONFIG_TEST_DIV64 is not set +# CONFIG_KPROBES_SANITY_TEST is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_RBTREE_TEST is not set +# CONFIG_REED_SOLOMON_TEST is not set +# CONFIG_INTERVAL_TREE_TEST is not set +# CONFIG_PERCPU_TEST is not set +# CONFIG_ATOMIC64_SELFTEST is not set +# CONFIG_ASYNC_RAID6_TEST is not set +# CONFIG_TEST_HEXDUMP is not set +# CONFIG_STRING_SELFTEST is not set +# CONFIG_TEST_STRING_HELPERS is not set +# CONFIG_TEST_STRSCPY is not set +# CONFIG_TEST_KSTRTOX is not set +# CONFIG_TEST_PRINTF is not set +# CONFIG_TEST_SCANF is not set +# CONFIG_TEST_BITMAP is not set +# CONFIG_TEST_UUID is not set +# CONFIG_TEST_XARRAY is not set +# CONFIG_TEST_OVERFLOW is not set +# CONFIG_TEST_RHASHTABLE is not set +# CONFIG_TEST_HASH is not set +# CONFIG_TEST_IDA is not set +# CONFIG_TEST_PARMAN is not set +# CONFIG_TEST_LKM is not set +# CONFIG_TEST_BITOPS is not set +# CONFIG_TEST_VMALLOC is not set +# CONFIG_TEST_USER_COPY is not set +CONFIG_TEST_BPF=m +CONFIG_TEST_BLACKHOLE_DEV=m +# CONFIG_FIND_BIT_BENCHMARK is not set +# CONFIG_TEST_FIRMWARE is not set +# CONFIG_TEST_SYSCTL is not set +# CONFIG_TEST_UDELAY is not set +# CONFIG_TEST_STATIC_KEYS is not set +# CONFIG_TEST_KMOD is not set +# CONFIG_TEST_MEMCAT_P is not set +# CONFIG_TEST_LIVEPATCH is not set +# CONFIG_TEST_OBJAGG is not set +# CONFIG_TEST_STACKINIT is not set +# CONFIG_TEST_MEMINIT is not set +# CONFIG_TEST_HMM is not set +# CONFIG_TEST_FREE_PAGES is not set +# CONFIG_TEST_FPU is not set +# CONFIG_TEST_CLOCKSOURCE_WATCHDOG is not set +CONFIG_ARCH_USE_MEMTEST=y +CONFIG_MEMTEST=y +# CONFIG_HYPERV_TESTING is not set +# end of Kernel Testing and Coverage +# end of Kernel hacking diff --git a/x86_64/core/lz4/PKGBUILD b/x86_64/core/lz4/PKGBUILD new file mode 100644 index 0000000..111fb06 --- /dev/null +++ b/x86_64/core/lz4/PKGBUILD @@ -0,0 +1,16 @@ +pkgname=lz4 +pkgver=1.9.3 +pkgrel=2 +arch=('x86_64') +depends=(glibc) +source=(https://github.com/lz4/lz4/archive/v$pkgver/lz4-v$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + make PREFIX=/usr +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir PREFIX=/usr install +} diff --git a/x86_64/core/lzo/PKGBUILD b/x86_64/core/lzo/PKGBUILD new file mode 100644 index 0000000..6440a1e --- /dev/null +++ b/x86_64/core/lzo/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=lzo +pkgver=2.10 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(make gcc) +source=(https://www.oberhumer.com/opensource/lzo/download/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-shared + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/ncurses/PKGBUILD b/x86_64/core/ncurses/PKGBUILD new file mode 100644 index 0000000..db7e1cb --- /dev/null +++ b/x86_64/core/ncurses/PKGBUILD @@ -0,0 +1,59 @@ +pkgname=ncurses +pkgver=6.3 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(autoconf-archive ) +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + sed -i '/LIBTOOL_INSTALL/d' c++/Makefile.in + + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --with-shared \ + --with-cxx-shared \ + --without-debug \ + --without-normal \ + --enable-pc-files \ + --enable-widec \ + --with-versioned-syms + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + mkdir -p $pkgdir/lib + mv -v $pkgdir/usr/lib/libncursesw.so.6* $pkgdir/lib + mkdir -p $pkgdir/usr/lib + ln -sfv ../../lib/$(readlink $pkgdir/usr/lib/libncursesw.so) $pkgdir/usr/lib/libncursesw.so + + for lib in ncurses form panel menu ; do + rm -vf $pkgdir/usr/lib/lib${lib}.so + echo "INPUT(-l${lib}w)" > $pkgdir/usr/lib/lib${lib}.so + mkdir -p $pkgdir/usr/lib/pkgconfig/ + ln -sfv ${lib}w.pc $pkgdir/usr/lib/pkgconfig/${lib}.pc + done + + rm -vf $pkgdir/usr/lib/libcursesw.so + echo "INPUT(-lncursesw)" > $pkgdir/usr/lib/libcursesw.so + ln -sfv libncurses.so $pkgdir/usr/lib/libcurses.so + + # Some backwards compatability for foreign tools + # Example where compiling AOSP will whine about missing *.5 lib symlink + # libncurses.so.5: cannot open shared object file: No such file or directory + + for compat in ncurses ncurses++ form panel menu; do + ln -sfv libncursesw.so $pkgdir/usr/lib/lib${compat}.so.5 + done + + ln -sfv libncursesw.so $pkgdir/usr/lib/libtinfo.so.5 + ln -sfv libncursesw.so $pkgdir/usr/lib/libtic.so.5 +} diff --git a/x86_64/core/nghttp2/PKGBUILD b/x86_64/core/nghttp2/PKGBUILD new file mode 100644 index 0000000..fcd296d --- /dev/null +++ b/x86_64/core/nghttp2/PKGBUILD @@ -0,0 +1,45 @@ +pkgname=nghttp2 +pkgver=1.46.0 +pkgrel=1 +arch=('x86_64') +depends=(openssl libev zlib libxml2 jansson c-ares) +makedepends=(systemd python3 python3-pip) +options=(!emptydirs) +source=(https://github.com/nghttp2/nghttp2/releases/download/v$pkgver/nghttp2-$pkgver.tar.xz) +backup=( + etc/nghttpx/nghttpx.conf + etc/logrotate.d/nghttpx +) + +prepare() { + cd $pkgname-$pkgver + + autoreconf -i +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --disable-examples + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + +# make -C lib DESTDIR="$pkgdir" uninstall + + install -Dm644 contrib/nghttpx.service "$pkgdir/usr/lib/systemd/system/nghttpx.service" + install -Dm644 contrib/nghttpx-logrotate "$pkgdir/etc/logrotate.d/nghttpx" + + # Install .pc files + install -D src/libnghttp2_asio.pc "$pkgdir/usr/lib/pkgconfig/libnghttp2_asio.pc" + install -D lib/libnghttp2.pc "$pkgdir/usr/lib/pkgconfig/libnghttp2.pc" + + install -Dm644 nghttpx.conf.sample "$pkgdir/etc/nghttpx/nghttpx.conf" +} diff --git a/x86_64/core/openssl/PKGBUILD b/x86_64/core/openssl/PKGBUILD new file mode 100644 index 0000000..430d1dd --- /dev/null +++ b/x86_64/core/openssl/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=openssl +pkgver=1.1.1m +pkgrel=1 +arch=('x86_64') +depends=(glibc) +source=(https://openssl.org/source/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./config --prefix=/usr \ + --openssldir=/etc/ssl \ + --libdir=lib \ + shared \ + zlib-dynamic + + make + + # disable static lib + sed -i '/INSTALL_LIBS/s/libcrypto.a libssl.a//' Makefile +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir MANDIR=/usr/share/man MANSUFFIX=ssl install +} diff --git a/x86_64/core/openssl/ca-dir.patch b/x86_64/core/openssl/ca-dir.patch new file mode 100644 index 0000000..d0ad704 --- /dev/null +++ b/x86_64/core/openssl/ca-dir.patch @@ -0,0 +1,31 @@ +--- apps/CA.pl.in 2019-09-10 15:13:07.000000000 +0200 ++++ apps/CA.pl.in 2019-10-06 09:34:23.960864556 +0200 +@@ -33,7 +33,7 @@ + my $PKCS12 = "$openssl pkcs12"; + + # default openssl.cnf file has setup as per the following +-my $CATOP = "./demoCA"; ++my $CATOP = "/etc/ssl"; + my $CAKEY = "cakey.pem"; + my $CAREQ = "careq.pem"; + my $CACERT = "cacert.pem"; +--- apps/openssl.cnf 2019-09-10 15:13:07.000000000 +0200 ++++ apps/openssl.cnf 2019-10-06 09:34:23.960864556 +0200 +@@ -42,7 +42,7 @@ + #################################################################### + [ CA_default ] + +-dir = ./demoCA # Where everything is kept ++dir = /etc/ssl # Where everything is kept + certs = $dir/certs # Where the issued certs are kept + crl_dir = $dir/crl # Where the issued crl are kept + database = $dir/index.txt # database index file. +@@ -325,7 +325,7 @@ + [ tsa_config1 ] + + # These are used by the TSA reply generation only. +-dir = ./demoCA # TSA root directory ++dir = /etc/ssl # TSA root directory + serial = $dir/tsaserial # The current serial number (mandatory) + crypto_device = builtin # OpenSSL engine to use for signing + signer_cert = $dir/tsacert.pem # The TSA signing certificate diff --git a/x86_64/core/p11-kit/PKGBUILD b/x86_64/core/p11-kit/PKGBUILD new file mode 100644 index 0000000..2b104f3 --- /dev/null +++ b/x86_64/core/p11-kit/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=p11-kit +pkgver=0.24.1 +pkgrel=1 +arch=('x86_64') +depends=(libtasn1 libffi systemd libtasn1 libffi) +source=(https://github.com/p11-glue/p11-kit/releases/download/$pkgver/p11-kit-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --with-trust-paths=/etc/ca-certificates/trust-source:/usr/share/ca-certificates/trust-source + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/pacman/PKGBUILD b/x86_64/core/pacman/PKGBUILD new file mode 100644 index 0000000..b36b5fa --- /dev/null +++ b/x86_64/core/pacman/PKGBUILD @@ -0,0 +1,33 @@ +# Pacman will be removed soon as of bottle that is a fork of pacman + +pkgname=pacman +pkgver=v6.0.1 +pkgrel=8 +arch=('x86_64') +depends=(zstd bash glibc libarchive curl) +source=(https://gitlab.archlinux.org/$pkgname/$pkgname/-/archive/$pkgver/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + meson --prefix=/usr \ + -Ddoxygen=enabled \ + -Dscriptlet-shell=/bin/bash \ + -Dldconfig=/usr/bin/ldconfig \ + build + ninja -C build +} + +package() { + cd $pkgname-$pkgver + + mkdir -vp $pkgdir + export DESTDIR=$pkgdir/ + + ninja -C build install + + # copy right .conf + cp -f ../../pacman.conf $pkgdir/etc/pacman.conf + mkdir -p $pkgdir/etc/pacman.d + touch $pkgdir/etc/pacman.d/mirrorlist +} diff --git a/x86_64/core/pacman/pacman.conf b/x86_64/core/pacman/pacman.conf new file mode 100644 index 0000000..cb86389 --- /dev/null +++ b/x86_64/core/pacman/pacman.conf @@ -0,0 +1,74 @@ +# +# /etc/pacman.conf +# +# See the pacman.conf(5) manpage for option and repository directives + +# +# GENERAL OPTIONS +# +[options] +# The following paths are commented out with their default values listed. +# If you wish to use different paths, uncomment and update the paths. +#RootDir = / +#DBPath = /var/lib/pacman/ +#CacheDir = /var/cache/pacman/pkg/ +#LogFile = /var/log/pacman.log +#GPGDir = /etc/pacman.d/gnupg/ +#HookDir = /etc/pacman.d/hooks/ +HoldPkg = pacman glibc +#XferCommand = /usr/bin/curl -L -C - -f -o %o %u +#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u +#CleanMethod = KeepInstalled +Architecture = auto + +# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup +#IgnorePkg = +#IgnoreGroup = + +#NoUpgrade = +#NoExtract = + +# Misc options +#UseSyslog +Color +#NoProgressBar +CheckSpace +#VerbosePkgLists +ParallelDownloads = 5 + +# PGP signature checking +#SigLevel = Optional +#LocalFileSigLevel = Optional +#RemoteFileSigLevel = Optional + +# +# REPOSITORIES +# - can be defined here or included from another file +# - pacman will search repositories in the order defined here +# - local/custom mirrors can be added here or in separate files +# - repositories listed first will take precedence when packages +# have identical names, regardless of version number +# - URLs will have $repo replaced by the name of the current repo +# - URLs will have $arch replaced by the name of the architecture +# +# Repository entries are of the format: +# [repo-name] +# Server = ServerName +# Include = IncludePath +# +# The header [repo-name] is crucial - it must be present and +# uncommented to enable the repo. +# + +# An example of a disabled remote package repository with multiple servers +# available. To enable, uncomment the following lines. You can add preferred +# servers immediately after the header and they will be used before the +# default mirrors. +[sober] +Server = https://git.it-kuny.ch/drunk/drunk-repo/-/raw/main/$arch/ + +# An example of a custom package repository. See the pacman manpage for +# tips on creating your own repositories. +#[custom] +#SigLevel = Optional TrustAll +#Server = file:///home/custompkgs diff --git a/x86_64/core/pciutils/PKGBUILD b/x86_64/core/pciutils/PKGBUILD new file mode 100644 index 0000000..3ef1e44 --- /dev/null +++ b/x86_64/core/pciutils/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=pciutils +pkgver=3.7.0 +pkgrel=2 +arch=('x86_64') +depends=(glibc kmod) +source=(https://www.kernel.org/pub/software/utils/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + make OPT="${CFLAGS} -fPIC -DPIC" \ + PREFIX=/usr \ + SHAREDIR=/usr/share/hwdata \ + MANDIR=/usr/share/man \ + SHARED=yes +} + +package() { + cd $pkgname-$pkgver + make PREFIX=/usr \ + SHAREDIR=/usr/share/hwdata \ + MANDIR=/usr/share/man \ + SHARED=yes \ + DESTDIR=$pkgdir \ + install install-lib + + chmod -v 755 $pkgdir/usr/lib/libpci.so +} diff --git a/x86_64/core/pcre/PKGBUILD b/x86_64/core/pcre/PKGBUILD new file mode 100644 index 0000000..5db34c4 --- /dev/null +++ b/x86_64/core/pcre/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=pcre +pkgver=8.45 +pkgrel=2 +arch=('x86_64') +depends=(valgrind) +source=(https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-unicode-properties \ + --enable-pcre16 \ + --enable-pcre21 \ + --enable-pcre32 \ + --enable-pcregrep-libz \ + --enable-pcregrep-libbz2 \ + --enable-pcretest-libreadline + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/pcre2/PKGBUILD b/x86_64/core/pcre2/PKGBUILD new file mode 100644 index 0000000..32fa652 --- /dev/null +++ b/x86_64/core/pcre2/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=pcre2 +pkgver=10.39 +pkgrel=1 +arch=('x86_64') +depends=(valgrind libedit) +source=(https://github.com/PhilipHazel/$pkgname/releases/download/$pkgname-$pkgver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-unicode \ + --enable-jit \ + --enable-pcre2-16 \ + --enable-pcre2-32 \ + --enable-pcre2grep-libz \ + --enable-pcre2grep-libbz2 + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/pkgconf/PKGBUILD b/x86_64/core/pkgconf/PKGBUILD new file mode 100644 index 0000000..0f14d26 --- /dev/null +++ b/x86_64/core/pkgconf/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=pkgconf +pkgver=1.8.0 +pkgrel=2 +arch=('x86_64') +depends=(glibc bash) +source=(http://distfiles.dereferenced.org/$pkgname/$pkgname-$pkgver.tar.xz + i686-pc-linux-gnu.personality + x86_64-pc-linux-gnu.personality) + +build() { + meson pkgconf-1.8.0 build \ + --prefix=/usr \ + --buildtype=release \ + -Dtests=false +} + +package() { + meson install -C build --destdir "$pkgdir" + + install -Dt "$pkgdir/usr/share/pkgconfig/personality.d" -m644 \ + i686-pc-linux-gnu.personality \ + x86_64-pc-linux-gnu.personality + + ln -s pkgconf "$pkgdir/usr/bin/i686-pc-linux-gnu-pkg-config" + ln -s pkgconf "$pkgdir/usr/bin/x86_64-pc-linux-gnu-pkg-config" + ln -s pkgconf "$pkgdir/usr/bin/pkg-config" + + ln -s pkgconf.1 "$pkgdir/usr/share/man/man1/pkg-config.1" +} diff --git a/x86_64/core/pkgconf/i686-pc-linux-gnu.personality b/x86_64/core/pkgconf/i686-pc-linux-gnu.personality new file mode 100644 index 0000000..b76226b --- /dev/null +++ b/x86_64/core/pkgconf/i686-pc-linux-gnu.personality @@ -0,0 +1,5 @@ +Triplet: i686-pc-linux-gnu +SysrootDir: / +DefaultSearchPaths: /usr/lib32/pkgconfig:/usr/share/pkgconfig +SystemIncludePaths: /usr/include +SystemLibraryPaths: /usr/lib32 diff --git a/x86_64/core/pkgconf/x86_64-pc-linux-gnu.personality b/x86_64/core/pkgconf/x86_64-pc-linux-gnu.personality new file mode 100644 index 0000000..4578869 --- /dev/null +++ b/x86_64/core/pkgconf/x86_64-pc-linux-gnu.personality @@ -0,0 +1,5 @@ +Triplet: x86_64-pc-linux-gnu +SysrootDir: / +DefaultSearchPaths: /usr/lib/pkgconfig:/usr/share/pkgconfig +SystemIncludePaths: /usr/include +SystemLibraryPaths: /usr/lib diff --git a/x86_64/core/polkit/PKGBUILD b/x86_64/core/polkit/PKGBUILD new file mode 100644 index 0000000..c7e264e --- /dev/null +++ b/x86_64/core/polkit/PKGBUILD @@ -0,0 +1,32 @@ +pkgname=polkit +pkgver=0.120 +pkgrel=5 +arch=('x86_64') +depends=(glib2 systemd duktape) +makedepends=(meson gtk-doc gobject-introspection git) +commitid= +source=(git+https://gitlab.freedesktop.org/polkit/polkit.git#commit=a6bedfd09b7bba753de7a107dc471da0db801858) + +build() { + meson build $pkgname \ + --prefix=/usr \ + --libdir=/usr/lib \ + -D tests=false \ + -D js_engine=duktape \ + -D man=false \ + -D session_tracking=libsystemd-login + + meson compile -C build +} + +package() { + meson install -C build --destdir $pkgdir + + install -d -o root -g 102 -m 750 $pkgdir/{etc,usr/share}/polkit-1/rules.d + mv $pkgdir/{etc,usr/share}/polkit-1/rules.d/50-default.rules + + install -Dm644 /dev/stdin $pkgdir/usr/lib/sysusers.d/$pkgname.conf < 002, 077 -> 007) for non-root users, if the uid is +# the same as gid, and username is the same as the primary group name. +# +# This also enables userdel to remove user groups if no members exist. +# +USERGROUPS_ENAB yes + +# +# Controls display of the motd file. This is better handled by pam_motd.so +# so the declaration here is empty is suppress display by readers of this +# file. +# +MOTD_FILE + +# +# Hash shadow passwords with SHA512. +# +ENCRYPT_METHOD SHA512 diff --git a/x86_64/core/shadow/newusers b/x86_64/core/shadow/newusers new file mode 100644 index 0000000..5d44798 --- /dev/null +++ b/x86_64/core/shadow/newusers @@ -0,0 +1,6 @@ +#%PAM-1.0 +auth sufficient pam_rootok.so +auth required pam_unix.so +account required pam_unix.so +session required pam_unix.so +password required pam_unix.so sha512 shadow diff --git a/x86_64/core/shadow/passwd b/x86_64/core/shadow/passwd new file mode 100644 index 0000000..ab56da4 --- /dev/null +++ b/x86_64/core/shadow/passwd @@ -0,0 +1,4 @@ +#%PAM-1.0 +#password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3 +#password required pam_unix.so sha512 shadow use_authtok +password required pam_unix.so sha512 shadow nullok diff --git a/x86_64/core/shadow/shadow.install b/x86_64/core/shadow/shadow.install new file mode 100644 index 0000000..83d9ab7 --- /dev/null +++ b/x86_64/core/shadow/shadow.install @@ -0,0 +1,22 @@ +setcaps() { + _setcap() { + if filecap "$1" "$2"; then + chmod -s "$1" + fi + } + + # shadow ships these as setuid, but if we can apply file caps, use those instead. + # 'filecap' insists on absolute paths + _setcap /usr/bin/newuidmap setuid + _setcap /usr/bin/newgidmap setgid +} + +post_install() { + setcaps +} + +post_upgrade() { + setcaps +} + +# vim:set ts=2 sw=2 et: diff --git a/x86_64/core/shadow/shadow.service b/x86_64/core/shadow/shadow.service new file mode 100644 index 0000000..39025d9 --- /dev/null +++ b/x86_64/core/shadow/shadow.service @@ -0,0 +1,11 @@ +[Unit] +Description=Verify integrity of password and group files +After=systemd-sysusers.service + +[Service] +Type=simple +# Always run both checks, but fail the service if either fails +ExecStart=/bin/sh -c '/usr/bin/pwck -r || r=1; /usr/bin/grpck -r && exit $r' +Nice=19 +IOSchedulingClass=best-effort +IOSchedulingPriority=7 diff --git a/x86_64/core/shadow/shadow.timer b/x86_64/core/shadow/shadow.timer new file mode 100644 index 0000000..9cc6baa --- /dev/null +++ b/x86_64/core/shadow/shadow.timer @@ -0,0 +1,7 @@ +[Unit] +Description=Daily verification of password and group files + +[Timer] +OnCalendar=daily +AccuracySec=12h +Persistent=true diff --git a/x86_64/core/shadow/useradd.defaults b/x86_64/core/shadow/useradd.defaults new file mode 100644 index 0000000..e07fe27 --- /dev/null +++ b/x86_64/core/shadow/useradd.defaults @@ -0,0 +1,9 @@ +# useradd defaults file for ArchLinux +# original changes by TomK +GROUP=users +HOME=/home +INACTIVE=-1 +EXPIRE= +SHELL=/bin/bash +SKEL=/etc/skel +CREATE_MAIL_SPOOL=no diff --git a/x86_64/core/squashfs-tools/PKGBUILD b/x86_64/core/squashfs-tools/PKGBUILD new file mode 100644 index 0000000..66335d5 --- /dev/null +++ b/x86_64/core/squashfs-tools/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=squashfs-tools +pkgver=4.5 +pkgrel=1 +arch=('x86_64') +depends=(lz4 lzo xz zlib zstd) +source=(https://downloads.sourceforge.net/squashfs/squashfs$pkgver.tar.gz + fix-glibc-2.28.patch) + +build() { + cd squashfs-tools-${pkgver}/${pkgname} + export CFLAGS="$CFLAGS -fcommon" # gcc-10 + patch -Np1 -i ../../fix-glibc-2.28.patch + make XZ_SUPPORT=1 LZO_SUPPORT=1 LZMA_XZ_SUPPORT=1 LZ4_SUPPORT=1 +} + +package() { + cd squashfs-tools-${pkgver}/${pkgname} + install -Dm755 mksquashfs "$pkgdir"/usr/bin/mksquashfs + install -m755 unsquashfs "$pkgdir"/usr/bin/unsquashfs +} diff --git a/x86_64/core/squashfs-tools/fix-glibc-2.28.patch b/x86_64/core/squashfs-tools/fix-glibc-2.28.patch new file mode 100644 index 0000000..6df349e --- /dev/null +++ b/x86_64/core/squashfs-tools/fix-glibc-2.28.patch @@ -0,0 +1,20 @@ +--- squashfs-tools/mksquashfs.c 2018-02-15 14:11:24.661930637 +0100 ++++ squashfs-tools/mksquashfs.c 2018-02-15 14:12:28.218412025 +0100 +@@ -44,6 +44,7 @@ + #include + #include ++#include + #include + #include + #include + #include +--- squashfs-tools/unsquashfs.c 2018-02-15 14:25:34.608263881 +0100 ++++ squashfs-tools/unsquashfs.c 2018-02-15 14:26:01.376410327 +0100 +@@ -36,6 +36,7 @@ + #include ++#include + #include + #include + #include + #include + diff --git a/x86_64/core/syslinux/PKGBUILD b/x86_64/core/syslinux/PKGBUILD new file mode 100644 index 0000000..83face3 --- /dev/null +++ b/x86_64/core/syslinux/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=syslinux +pkgver=6.03 +pkgrel=1 +arch=('x86_64') +depends=(dosfstools efibootmgr gptfdisk mtools util-linux) +makedepends=(git nasm python3 upx asciidoc) +source=(http://www.kernel.org/pub/linux/utils/boot/$pkgname/$pkgname-$pkgver.tar.xz + $pkgname-$pkgver-sysmacros.patch) + +build() { + cd $pkgname-$pkgver + + export CFLAGS="$CFLAGS -fcommon" + + patch -p1 -i ../../$pkgname-$pkgver-sysmacros.patch + + make OPTFLAGS="$CFLAGS" bios efi64 efi32 installer +} + +package() { + cd $pkgname-$pkgver + + make OPTFLAGS="$CFLAGS" INSTALLROOT=$pkgdir AUXDIR=/usr/lib/syslinux MANDIR=/usr/share/man install bios efi64 efi32 +} diff --git a/x86_64/core/syslinux/syslinux-6.03-sysmacros.patch b/x86_64/core/syslinux/syslinux-6.03-sysmacros.patch new file mode 100644 index 0000000..af464fe --- /dev/null +++ b/x86_64/core/syslinux/syslinux-6.03-sysmacros.patch @@ -0,0 +1,34 @@ +https://bugs.gentoo.org/579928 + +From d84db34dbe39d55b4d7e868764c056689aa0793b Mon Sep 17 00:00:00 2001 +From: Mike Frysinger +Date: Tue, 19 Apr 2016 01:56:41 -0400 +Subject: [PATCH] extlinux: pull in sys/sysmacros.h for major/minor/makedev + +These functions are defined in sys/sysmacros.h, so add the include to +main.c. This is already handled correctly in mountinfo.c. Otherwise +we get build failures like: + +main.o: In function 'find_device_sysfs': +extlinux/main.c:1131: undefined reference to 'minor' + +Signed-off-by: Mike Frysinger +--- + extlinux/main.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/extlinux/main.c b/extlinux/main.c +index a7ebd49..ebff7ea 100644 +--- a/extlinux/main.c ++++ b/extlinux/main.c +@@ -38,6 +38,7 @@ + #include + #include + #include ++#include + #include + #include + #include +-- +2.7.4 + diff --git a/x86_64/core/systembus-notify/PKGBUILD b/x86_64/core/systembus-notify/PKGBUILD new file mode 100644 index 0000000..2b3cd98 --- /dev/null +++ b/x86_64/core/systembus-notify/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=systembus-notify +pkgver=1.1 +pkgrel=1 +arch=('x86_64') +depends=(systemd glibc) +makedepends=(gcc) +source=(https://github.com/rfjakob/$pkgname/archive/v$pkgver/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + make +} + +package() { + cd $pkgname-$pkgver + + install -Dm755 -t "$pkgdir/usr/bin/" systembus-notify + install -Dm644 -t "$pkgdir/etc/xdg/autostart/" systembus-notify.desktop +} diff --git a/x86_64/core/systemd/20-systemd-sysusers.hook b/x86_64/core/systemd/20-systemd-sysusers.hook new file mode 100644 index 0000000..edc7195 --- /dev/null +++ b/x86_64/core/systemd/20-systemd-sysusers.hook @@ -0,0 +1,10 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Target = usr/lib/sysusers.d/*.conf + +[Action] +Description = Creating system user accounts... +When = PostTransaction +Exec = /usr/share/libalpm/scripts/systemd-hook sysusers diff --git a/x86_64/core/systemd/30-systemd-binfmt.hook b/x86_64/core/systemd/30-systemd-binfmt.hook new file mode 100644 index 0000000..19f3bcc --- /dev/null +++ b/x86_64/core/systemd/30-systemd-binfmt.hook @@ -0,0 +1,10 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Target = usr/lib/binfmt.d/*.conf + +[Action] +Description = Registering binary formats... +When = PostTransaction +Exec = /usr/share/libalpm/scripts/systemd-hook binfmt diff --git a/x86_64/core/systemd/30-systemd-catalog.hook b/x86_64/core/systemd/30-systemd-catalog.hook new file mode 100644 index 0000000..6e717b9 --- /dev/null +++ b/x86_64/core/systemd/30-systemd-catalog.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/lib/systemd/catalog/* + +[Action] +Description = Updating journal message catalog... +When = PostTransaction +Exec = /usr/share/libalpm/scripts/systemd-hook catalog diff --git a/x86_64/core/systemd/30-systemd-daemon-reload.hook b/x86_64/core/systemd/30-systemd-daemon-reload.hook new file mode 100644 index 0000000..dff95e4 --- /dev/null +++ b/x86_64/core/systemd/30-systemd-daemon-reload.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/lib/systemd/system/* + +[Action] +Description = Reloading system manager configuration... +When = PostTransaction +Exec = /usr/share/libalpm/scripts/systemd-hook daemon-reload diff --git a/x86_64/core/systemd/30-systemd-hwdb.hook b/x86_64/core/systemd/30-systemd-hwdb.hook new file mode 100644 index 0000000..1d85e29 --- /dev/null +++ b/x86_64/core/systemd/30-systemd-hwdb.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/lib/udev/hwdb.d/* + +[Action] +Description = Updating udev hardware database... +When = PostTransaction +Exec = /usr/share/libalpm/scripts/systemd-hook hwdb diff --git a/x86_64/core/systemd/30-systemd-sysctl.hook b/x86_64/core/systemd/30-systemd-sysctl.hook new file mode 100644 index 0000000..e2354c0 --- /dev/null +++ b/x86_64/core/systemd/30-systemd-sysctl.hook @@ -0,0 +1,10 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Target = usr/lib/sysctl.d/*.conf + +[Action] +Description = Applying kernel sysctl settings... +When = PostTransaction +Exec = /usr/share/libalpm/scripts/systemd-hook sysctl diff --git a/x86_64/core/systemd/30-systemd-tmpfiles.hook b/x86_64/core/systemd/30-systemd-tmpfiles.hook new file mode 100644 index 0000000..b07db6a --- /dev/null +++ b/x86_64/core/systemd/30-systemd-tmpfiles.hook @@ -0,0 +1,10 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Target = usr/lib/tmpfiles.d/*.conf + +[Action] +Description = Creating temporary files... +When = PostTransaction +Exec = /usr/share/libalpm/scripts/systemd-hook tmpfiles diff --git a/x86_64/core/systemd/30-systemd-udev-reload.hook b/x86_64/core/systemd/30-systemd-udev-reload.hook new file mode 100644 index 0000000..7676cca --- /dev/null +++ b/x86_64/core/systemd/30-systemd-udev-reload.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/lib/udev/rules.d/* + +[Action] +Description = Reloading device manager configuration... +When = PostTransaction +Exec = /usr/share/libalpm/scripts/systemd-hook udev-reload diff --git a/x86_64/core/systemd/30-systemd-update.hook b/x86_64/core/systemd/30-systemd-update.hook new file mode 100644 index 0000000..f95d9dc --- /dev/null +++ b/x86_64/core/systemd/30-systemd-update.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/ + +[Action] +Description = Arming ConditionNeedsUpdate... +When = PostTransaction +Exec = /usr/share/libalpm/scripts/systemd-hook update diff --git a/x86_64/core/systemd/PKGBUILD b/x86_64/core/systemd/PKGBUILD new file mode 100644 index 0000000..0776258 --- /dev/null +++ b/x86_64/core/systemd/PKGBUILD @@ -0,0 +1,97 @@ +pkgname=systemd +pkgver=251 +pkgrel=1 +arch=('x86_64') +depends=('acl' 'gperf' 'lz4' 'xz' 'linux-pam' 'elfutils' + 'kmod' 'libcap' 'libidn2' 'libgcrypt' + 'libxslt' 'util-linux' + 'shadow' 'gnu-efi' + 'libxkbcommon' + 'bash-completion' 'p11-kit' + 'gnutls') +makedepends=('meson' 'docbook-xsl' 'git' 'rsync' 'intltool' 'python3-pip') +source=("https://github.com/systemd/systemd-stable/archive/refs/tags/v${pkgver}.tar.gz" + 'drunk.conf' + 'initrd-drunk.conf' + 'loader.conf' + 'systemd-user.pam' + 'systemd-hook' + '20-systemd-sysusers.hook' + '30-systemd-binfmt.hook' + '30-systemd-catalog.hook' + '30-systemd-daemon-reload.hook' + '30-systemd-hwdb.hook' + '30-systemd-sysctl.hook' + '30-systemd-tmpfiles.hook' + '30-systemd-udev-reload.hook' + '30-systemd-update.hook') + +backup=(etc/pam.d/systemd-user + etc/systemd/coredump.conf + etc/systemd/homed.conf + etc/systemd/journald.conf + etc/systemd/journal-remote.conf + etc/systemd/journal-upload.conf + etc/systemd/logind.conf + etc/systemd/networkd.conf) + +prepare() { + pip3 install setuptools + + pip3 install jinja2 + + cd $pkgname-stable-$pkgver + + sed -i -e 's/GROUP="render"/GROUP="video"/' \ + -e 's/GROUP="sgx", //' rules.d/50-udev-default.rules.in + + sed -i 's/+ want_libfuzzer.*$/and want_libfuzzer/' meson.build +} + +build() { + cd $pkgname-stable-$pkgver + mkdir -p build && cd build + + export PATH=/bin:/sbin:/usr/bin:/usr/sbin:$PATH + LANG=en_US.UTF-8 \ + meson \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --buildtype=release \ + -D blkid=true \ + -D mode=release \ + -D default-hierarchy=unified \ + -D install-tests=false \ + -D tests=false \ + -D dns-servers='1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com 2606:4700:4700::1111#cloudflare-dns.com 2606:4700:4700::1001#cloudflare-dns.com' \ + -D docdir=/usr/share/doc/systemd \ + -D dbuspolicydir=/usr/share/dbus-1/system.d \ + -D sbat-distro='drunk' \ + -D sbat-distro-summary='Drunk Linux'\ + -D sbat-distro-pkgname="${pkgname}" \ + -D sbat-distro-version="${pkgver}" \ + -D sbat-distro-url="http://drunk.epizy.com/" \ + .. + + ninja +} + +package() { + # Install bootctl conf file examples + install -D -m0644 drunk.conf "$pkgdir"/usr/share/systemd/bootctl/drunk.conf + install -D -m0644 drunk.conf "$pkgdir"/usr/share/systemd/bootctl/initrd-drunk.conf + install -D -m0644 loader.conf "$pkgdir"/usr/share/systemd/bootctl/loader.conf + + cd $pkgname-stable-$pkgver/build + + LANG=en_US.UTF-8 ninja + LANG=en_US.UTF-8 DESTDIR=$pkgdir PREFIX=$pkgdir ninja install + + + install -D -m0644 $srcdir/systemd-user.pam $pkgdir/etc/pam.d/systemd-user + install -D -m0755 $srcdir/systemd-hook $pkgdir/usr/share/libalpm/scripts/systemd-hook + install -D -m0644 -t $pkgdir/usr/share/libalpm/hooks $srcdir/*.hook + install -d -o root -g 102 -m 0750 $pkgdir/usr/share/polkit-1/rules.d + install -d -o root -g root -m 2755 $pkgdir/var/log/journal +} diff --git a/x86_64/core/systemd/drunk.conf b/x86_64/core/systemd/drunk.conf new file mode 100755 index 0000000..afadf33 --- /dev/null +++ b/x86_64/core/systemd/drunk.conf @@ -0,0 +1,3 @@ +title [sda2]: Drunk 2021.4 +linux /vmlinuz-drunk +options root=/dev/sda2 init=/lib/systemd/systemd rw diff --git a/x86_64/core/systemd/initrd-drunk.conf b/x86_64/core/systemd/initrd-drunk.conf new file mode 100755 index 0000000..166184d --- /dev/null +++ b/x86_64/core/systemd/initrd-drunk.conf @@ -0,0 +1,4 @@ +title [initrd]: Drunk 2021.4 +linux /vmlinuz-drunk +initrd /initrd.img +options root=PARTLABEL=drunk rw diff --git a/x86_64/core/systemd/loader.conf b/x86_64/core/systemd/loader.conf new file mode 100755 index 0000000..2580f66 --- /dev/null +++ b/x86_64/core/systemd/loader.conf @@ -0,0 +1,7 @@ +#timeout 3 +#console-mode keep + +default initrd-drunk +timeout 4 +console-mode max +editor no diff --git a/x86_64/core/systemd/systemd-hook b/x86_64/core/systemd/systemd-hook new file mode 100755 index 0000000..d40e93a --- /dev/null +++ b/x86_64/core/systemd/systemd-hook @@ -0,0 +1,46 @@ +#!/bin/sh -e + +is_chrooted() { + if systemd-detect-virt --chroot; then + echo >&2 " Skipped: Running in chroot." + exit 0 + fi +} + +systemd_live() { + is_chrooted + if [ ! -d /run/systemd/system ]; then + echo >&2 " Skipped: Current root is not booted." + exit 0 + fi +} + +udevd_live() { + is_chrooted + if [ ! -d /run/udev ]; then + echo >&2 " Skipped: Device manager is not running." + exit 0 + fi +} + +op="$1"; shift + +case "$op" in + catalog) /bin/journalctl --update-catalog ;; + hwdb) /bin/systemd-hwdb --usr update ;; + update) touch -c /usr ;; + sysusers) /bin/systemd-sysusers ;; + tmpfiles) /bin/systemd-tmpfiles --create ;; + + daemon-reload) systemd_live; /bin/systemctl daemon-reload ;; + udev-reload) udevd_live; /bin/udevadm control --reload ;; + binfmt) systemd_live; /lib/systemd/systemd-binfmt ;; + sysctl) systemd_live; /lib/systemd/systemd-sysctl ;; + + # For use by other packages + reload) systemd_live; /bin/systemctl try-reload-or-restart "$@" ;; + + *) echo >&2 " Invalid operation '$op'"; exit 1 ;; +esac + +exit 0 diff --git a/x86_64/core/systemd/systemd-user.pam b/x86_64/core/systemd/systemd-user.pam new file mode 100644 index 0000000..83f7626 --- /dev/null +++ b/x86_64/core/systemd/systemd-user.pam @@ -0,0 +1,5 @@ +# Used by systemd --user instances. + +account include system-login +session required pam_loginuid.so +session include system-login diff --git a/x86_64/core/tar/PKGBUILD b/x86_64/core/tar/PKGBUILD new file mode 100644 index 0000000..093d095 --- /dev/null +++ b/x86_64/core/tar/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=tar +pkgver=1.34 +pkgrel=1 +arch=('x86_64') +depends=(glibc acl attr) +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + FORCE_UNSAFE_CONFIGURE=1 \ + ./configure --prefix=/usr \ + --bindir=/bin + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/texinfo/PKGBUILD b/x86_64/core/texinfo/PKGBUILD new file mode 100644 index 0000000..918fd60 --- /dev/null +++ b/x86_64/core/texinfo/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=texinfo +pkgver=6.7 +pkgrel=1 +arch=('x86_64') +depends=(ncurses gzip bash) +source=(https://ftp.gnu.org/gnu/texinfo/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/ttf-dejavu/PKGBUILD b/x86_64/core/ttf-dejavu/PKGBUILD new file mode 100644 index 0000000..13338fb --- /dev/null +++ b/x86_64/core/ttf-dejavu/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=ttf-dejavu +pkgver=2.37 +pkgrel=1 +arch=('x86_64') +makedepends=(fontforge git perl5-font-ttf) +commitid=a0acdee6947d645b207c160ebc77cc981285c2ce +source=(git+https://github.com/dejavu-fonts/dejavu-fonts.git#commit=$commitid) + +build() { + cd dejavu-fonts + + make full-ttf +} + +package() { + cd dejavu-fonts + + install -Dt "$pkgdir/usr/share/fonts/TTF" -m644 build/*.ttf + install -Dt "$pkgdir/usr/share/fontconfig/conf.avail" -m644 fontconfig/*.conf + + mkdir "$pkgdir/usr/share/fontconfig/conf.default" + ln -srt "$pkgdir/usr/share/fontconfig/conf.default" \ + "$pkgdir"/usr/share/fontconfig/conf.avail/* +} diff --git a/x86_64/core/tzdata/PKGBUILD b/x86_64/core/tzdata/PKGBUILD new file mode 100644 index 0000000..b73e82f --- /dev/null +++ b/x86_64/core/tzdata/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=tzdata +pkgver=2021e +pkgrel=1 +arch=('x86_64') +source=(https://www.iana.org/time-zones/repository/releases/${pkgname}${pkgver}.tar.gz) + +build() { + echo "build" +} + +package() { + ZONEINFO=$pkgdir/usr/share/zoneinfo + mkdir -pv $ZONEINFO/{posix,right} + export PATH=/usr/sbin:$PATH + for tz in etcetera southamerica northamerica europe africa antarctica \ + asia australasia backward; do + zic -L /dev/null -d $ZONEINFO -y "sh yearistype.sh" ${tz} + zic -L /dev/null -d $ZONEINFO/posix -y "sh yearistype.sh" ${tz} + zic -L leapseconds -d $ZONEINFO/right -y "sh yearistype.sh" ${tz} + done + + cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO + zic -d $ZONEINFO -p America/New_York +} diff --git a/x86_64/core/tzdata/update b/x86_64/core/tzdata/update new file mode 100644 index 0000000..dbe1504 --- /dev/null +++ b/x86_64/core/tzdata/update @@ -0,0 +1,8 @@ +getver_tzdata() { + fetch \ + | grep -Eo tzdata[0-9a-z.]+.tar.gz \ + | sed 's/tzdata//;s/\.tar\.gz//' \ + | grep -v beta \ + | sort -V \ + | uniq +} diff --git a/x86_64/core/util-linux/60-rfkill.rules b/x86_64/core/util-linux/60-rfkill.rules new file mode 100644 index 0000000..bc98a3b --- /dev/null +++ b/x86_64/core/util-linux/60-rfkill.rules @@ -0,0 +1 @@ +KERNEL=="rfkill", GROUP="rfkill", MODE="0664" diff --git a/x86_64/core/util-linux/PKGBUILD b/x86_64/core/util-linux/PKGBUILD new file mode 100644 index 0000000..d943169 --- /dev/null +++ b/x86_64/core/util-linux/PKGBUILD @@ -0,0 +1,63 @@ +pkgname=util-linux +pkgver=2.37.2 +pkgrel=6 +arch=('x86_64') +depends=('python3' 'systemd' 'linux-pam') +source=(https://www.kernel.org/pub/linux/utils/$pkgname/v${pkgver::4}/$pkgname-$pkgver.tar.xz + pam-{login,common,runuser,su} + 60-rfkill.rules + rfkill-unblock_.service + rfkill-block_.service + util-linux.sysusers) +backup=(etc/pam.d/chfn + etc/pam.d/chsh + etc/pam.d/login + etc/pam.d/runuser + etc/pam.d/runuser-l + etc/pamd.d/su + etc/pam.d/su-l) + +build() { + cd $pkgname-$pkgver + + ./configure \ + ADJTIME_PATH=/var/lib/hwclock/adjtime \ + --prefix=/usr \ + --localstatedir=/var \ + --enable-vipw \ + --enable-newgrp \ + --enable-chfn-chsh \ + --enable-login \ + --enable-write \ + --enable-mesg \ + --with-python=3 \ + --with-systemd \ + --with-systemdsystemunitdir + + make +} + +package() { + cd $pkgname-$pkgver + mkdir -pv $pkgdir/var/lib/hwclock + make DESTDIR=$pkgdir install + + chmod 4755 $pkgdir/usr/bin/{newgrp,ch{sh,fn}} + + install -Dm0644 $srcdir/pam-common $pkgdir/etc/pam.d/chfn + install -m0644 $srcdir/pam-common $pkgdir/etc/pam.d/chsh + install -m0644 $srcdir/pam-login $pkgdir/etc/pam.d/login + install -m0644 $srcdir/pam-runuser $pkgdir/etc/pam.d/runuser + install -m0644 $srcdir/pam-runuser $pkgdir/etc/pam.d/runuser-l + install -m0644 $srcdir/pam-su $pkgdir/etc/pam.d/su + install -m0644 $srcdir/pam-su $pkgdir/etc/pam.d/su-l + + install -Dm0644 "$srcdir/util-linux.sysusers" \ + $pkgdir/usr/lib/sysusers.d/util-linux.conf + + install -Dm0644 $srcdir/60-rfkill.rules \ + $pkgdir/usr/lib/systemd/rfkill-unblock@.service + + install -Dm0644 $srcdir/rfkill-block_.service \ + $pkgdir/usr/lib/systemd/system/rfkill-block@.service +} diff --git a/x86_64/core/util-linux/pam-common b/x86_64/core/util-linux/pam-common new file mode 100644 index 0000000..066186e --- /dev/null +++ b/x86_64/core/util-linux/pam-common @@ -0,0 +1,6 @@ +#%PAM-1.0 +auth sufficient pam_rootok.so +auth required pam_unix.so +account required pam_unix.so +session required pam_unix.so +password required pam_permit.so diff --git a/x86_64/core/util-linux/pam-login b/x86_64/core/util-linux/pam-login new file mode 100644 index 0000000..2dac6ab --- /dev/null +++ b/x86_64/core/util-linux/pam-login @@ -0,0 +1,8 @@ +#%PAM-1.0 + +auth required pam_securetty.so +auth requisite pam_nologin.so +auth include system-local-login +account include system-local-login +session include system-local-login +password include system-local-login diff --git a/x86_64/core/util-linux/pam-runuser b/x86_64/core/util-linux/pam-runuser new file mode 100644 index 0000000..26b59d5 --- /dev/null +++ b/x86_64/core/util-linux/pam-runuser @@ -0,0 +1,4 @@ +#%PAM-1.0 + +auth sufficient pam_rootok.so +session include system-login diff --git a/x86_64/core/util-linux/pam-su b/x86_64/core/util-linux/pam-su new file mode 100644 index 0000000..cb5aa84 --- /dev/null +++ b/x86_64/core/util-linux/pam-su @@ -0,0 +1,10 @@ +#%PAM-1.0 +auth sufficient pam_rootok.so +# Uncomment the following line to implicitly trust users in the "wheel" group. +#auth sufficient pam_wheel.so trust use_uid +# Uncomment the following line to require a user to be in the "wheel" group. +#auth required pam_wheel.so use_uid +auth required pam_unix.so +account required pam_unix.so +session required pam_unix.so +password include system-auth diff --git a/x86_64/core/util-linux/rfkill-block_.service b/x86_64/core/util-linux/rfkill-block_.service new file mode 100644 index 0000000..ede74d1 --- /dev/null +++ b/x86_64/core/util-linux/rfkill-block_.service @@ -0,0 +1,10 @@ +[Unit] +Description=RFKill-Block %I +After=rfkill-unblock@all.service + +[Service] +Type=oneshot +ExecStart=/usr/bin/rfkill block %I + +[Install] +WantedBy=multi-user.target diff --git a/x86_64/core/util-linux/rfkill-unblock_.service b/x86_64/core/util-linux/rfkill-unblock_.service new file mode 100644 index 0000000..94ebf35 --- /dev/null +++ b/x86_64/core/util-linux/rfkill-unblock_.service @@ -0,0 +1,10 @@ +[Unit] +Description=RFKill-Unblock %I +After=rfkill-block@all.service + +[Service] +Type=oneshot +ExecStart=/usr/bin/rfkill unblock %I + +[Install] +WantedBy=multi-user.target diff --git a/x86_64/core/util-linux/util-linux.sysusers b/x86_64/core/util-linux/util-linux.sysusers new file mode 100644 index 0000000..de04d9f --- /dev/null +++ b/x86_64/core/util-linux/util-linux.sysusers @@ -0,0 +1,2 @@ +u uuidd 68 +g rfkill - - - diff --git a/x86_64/core/wget/PKGBUILD b/x86_64/core/wget/PKGBUILD new file mode 100644 index 0000000..5f021cf --- /dev/null +++ b/x86_64/core/wget/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=wget +pkgver=1.21.2 +pkgrel=1 +arch=('x86_64') +depends=(glibc zlib gnutls libidn2 util-linux libpsl pcre2 nettle) +source=(https://ftp.gnu.org/gnu/wget/wget-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --with-ssl=openssl + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/which/PKGBUILD b/x86_64/core/which/PKGBUILD new file mode 100644 index 0000000..98a593c --- /dev/null +++ b/x86_64/core/which/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=which +pkgver=2.21 +pkgrel=2 +arch=('x86_64') +depends=(glibc bash) +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/core/wpa_supplicant/0001-P2P-Fix-copying-of-secondary-device-types-for-P2P-gr.patch b/x86_64/core/wpa_supplicant/0001-P2P-Fix-copying-of-secondary-device-types-for-P2P-gr.patch new file mode 100644 index 0000000..4657b55 --- /dev/null +++ b/x86_64/core/wpa_supplicant/0001-P2P-Fix-copying-of-secondary-device-types-for-P2P-gr.patch @@ -0,0 +1,38 @@ +From 947272febe24a8f0ea828b5b2f35f13c3821901e Mon Sep 17 00:00:00 2001 +From: Jouni Malinen +Date: Mon, 9 Nov 2020 11:43:12 +0200 +Subject: [PATCH] P2P: Fix copying of secondary device types for P2P group + client + +Parsing and copying of WPS secondary device types list was verifying +that the contents is not too long for the internal maximum in the case +of WPS messages, but similar validation was missing from the case of P2P +group information which encodes this information in a different +attribute. This could result in writing beyond the memory area assigned +for these entries and corrupting memory within an instance of struct +p2p_device. This could result in invalid operations and unexpected +behavior when trying to free pointers from that corrupted memory. + +Credit to OSS-Fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=27269 +Fixes: e57ae6e19edf ("P2P: Keep track of secondary device types for peers") +Signed-off-by: Jouni Malinen +--- + src/p2p/p2p.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c +index 74b7b52ae05c..5cbfc217fc1f 100644 +--- a/src/p2p/p2p.c ++++ b/src/p2p/p2p.c +@@ -453,6 +453,8 @@ static void p2p_copy_client_info(struct p2p_device *dev, + dev->info.config_methods = cli->config_methods; + os_memcpy(dev->info.pri_dev_type, cli->pri_dev_type, 8); + dev->info.wps_sec_dev_type_list_len = 8 * cli->num_sec_dev_types; ++ if (dev->info.wps_sec_dev_type_list_len > WPS_SEC_DEV_TYPE_MAX_LEN) ++ dev->info.wps_sec_dev_type_list_len = WPS_SEC_DEV_TYPE_MAX_LEN; + os_memcpy(dev->info.wps_sec_dev_type_list, cli->sec_dev_types, + dev->info.wps_sec_dev_type_list_len); + } +-- +2.25.1 + diff --git a/x86_64/core/wpa_supplicant/CVE-2019-16275.patch b/x86_64/core/wpa_supplicant/CVE-2019-16275.patch new file mode 100644 index 0000000..d764a9d --- /dev/null +++ b/x86_64/core/wpa_supplicant/CVE-2019-16275.patch @@ -0,0 +1,73 @@ +From 8c07fa9eda13e835f3f968b2e1c9a8be3a851ff9 Mon Sep 17 00:00:00 2001 +From: Jouni Malinen +Date: Thu, 29 Aug 2019 11:52:04 +0300 +Subject: [PATCH] AP: Silently ignore management frame from unexpected source + address + +Do not process any received Management frames with unexpected/invalid SA +so that we do not add any state for unexpected STA addresses or end up +sending out frames to unexpected destination. This prevents unexpected +sequences where an unprotected frame might end up causing the AP to send +out a response to another device and that other device processing the +unexpected response. + +In particular, this prevents some potential denial of service cases +where the unexpected response frame from the AP might result in a +connected station dropping its association. + +Signed-off-by: Jouni Malinen +--- + src/ap/drv_callbacks.c | 13 +++++++++++++ + src/ap/ieee802_11.c | 12 ++++++++++++ + 2 files changed, 25 insertions(+) + +diff --git a/src/ap/drv_callbacks.c b/src/ap/drv_callbacks.c +index 31587685fe3b..34ca379edc3d 100644 +--- a/src/ap/drv_callbacks.c ++++ b/src/ap/drv_callbacks.c +@@ -131,6 +131,19 @@ int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr, + "hostapd_notif_assoc: Skip event with no address"); + return -1; + } ++ ++ if (is_multicast_ether_addr(addr) || ++ is_zero_ether_addr(addr) || ++ os_memcmp(addr, hapd->own_addr, ETH_ALEN) == 0) { ++ /* Do not process any frames with unexpected/invalid SA so that ++ * we do not add any state for unexpected STA addresses or end ++ * up sending out frames to unexpected destination. */ ++ wpa_printf(MSG_DEBUG, "%s: Invalid SA=" MACSTR ++ " in received indication - ignore this indication silently", ++ __func__, MAC2STR(addr)); ++ return 0; ++ } ++ + random_add_randomness(addr, ETH_ALEN); + + hostapd_logger(hapd, addr, HOSTAPD_MODULE_IEEE80211, +diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c +index c85a28db44b7..e7065372e158 100644 +--- a/src/ap/ieee802_11.c ++++ b/src/ap/ieee802_11.c +@@ -4626,6 +4626,18 @@ int ieee802_11_mgmt(struct hostapd_data *hapd, const u8 *buf, size_t len, + fc = le_to_host16(mgmt->frame_control); + stype = WLAN_FC_GET_STYPE(fc); + ++ if (is_multicast_ether_addr(mgmt->sa) || ++ is_zero_ether_addr(mgmt->sa) || ++ os_memcmp(mgmt->sa, hapd->own_addr, ETH_ALEN) == 0) { ++ /* Do not process any frames with unexpected/invalid SA so that ++ * we do not add any state for unexpected STA addresses or end ++ * up sending out frames to unexpected destination. */ ++ wpa_printf(MSG_DEBUG, "MGMT: Invalid SA=" MACSTR ++ " in received frame - ignore this frame silently", ++ MAC2STR(mgmt->sa)); ++ return 0; ++ } ++ + if (stype == WLAN_FC_STYPE_BEACON) { + handle_beacon(hapd, mgmt, len, fi); + return 1; +-- +2.20.1 + diff --git a/x86_64/core/wpa_supplicant/PKGBUILD b/x86_64/core/wpa_supplicant/PKGBUILD new file mode 100644 index 0000000..5d8bbc2 --- /dev/null +++ b/x86_64/core/wpa_supplicant/PKGBUILD @@ -0,0 +1,70 @@ +# Maintainer: Bartłomiej Piotrowski +# Contributor: Thomas Bächler + +pkgname=wpa_supplicant +pkgver=2.9 +pkgrel=3 +pkgdesc='A utility providing key negotiation for WPA wireless networks' +url='https://w1.fi/wpa_supplicant/' +arch=(x86_64) +license=(GPL) +depends=(openssl dbus readline libnl) +install=wpa_supplicant.install +source=( + https://w1.fi/releases/${pkgname}-${pkgver}.tar.gz{,.asc} + https://w1.fi/security/2020-2/0001-P2P-Fix-copying-of-secondary-device-types-for-P2P-gr.patch + CVE-2019-16275.patch + tls.patch # More permissive TLS fallback + systemd.patch # Unit improvements from Ubuntu + roam-properties.patch # https://bugs.archlinux.org/task/65482 + config +) + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + local src + for src in "${source[@]}"; do + src="${src%%::*}" + src="${src##*/}" + [[ $src = *.patch ]] || continue + echo "Applying patch $src..." + patch -Np1 < "../$src" + done + + cd "$srcdir/$pkgname-$pkgver/$pkgname" + cp "$srcdir/config" ./.config +} + +build() { + cd "$srcdir/$pkgname-$pkgver/$pkgname" + + make LIBDIR=/usr/lib BINDIR=/usr/bin + make LIBDIR=/usr/lib BINDIR=/usr/bin eapol_test +} + +package() { + cd "$srcdir/$pkgname-$pkgver/$pkgname" + make LIBDIR=/usr/lib BINDIR=/usr/bin DESTDIR="$pkgdir" install + install -Dm755 eapol_test "$pkgdir/usr/bin/eapol_test" + + install -d -m755 "$pkgdir/etc/wpa_supplicant" + install -Dm644 wpa_supplicant.conf \ + "$pkgdir/usr/share/doc/wpa_supplicant/wpa_supplicant.conf" + + +install -d -m755 "$pkgdir"/usr/share/dbus-1/{system.d,system-services} +install -m644 \ +dbus/fi.w1.wpa_supplicant1.service \ +"$pkgdir/usr/share/dbus-1/system-services/" + + install -Dm644 dbus/dbus-wpa_supplicant.conf \ +"$pkgdir/usr/share/dbus-1/system.d/wpa_supplicant.conf" + + install -d -m755 "$pkgdir/usr/share/man/man"{5,8} + install -m644 doc/docbook/*.5 "$pkgdir/usr/share/man/man5/" + install -m644 doc/docbook/*.8 "$pkgdir/usr/share/man/man8/" + rm -f "$pkgdir/usr/share/man/man8/wpa_"{priv,gui}.8 + + install -d -m755 "$pkgdir/usr/lib/systemd/system" + install -m644 systemd/*.service "$pkgdir/usr/lib/systemd/system/" +} diff --git a/x86_64/core/wpa_supplicant/config b/x86_64/core/wpa_supplicant/config new file mode 100644 index 0000000..71c82ee --- /dev/null +++ b/x86_64/core/wpa_supplicant/config @@ -0,0 +1,80 @@ +CONFIG_ACS=y +CONFIG_AP=y +CONFIG_AUTOSCAN_EXPONENTIAL=y +CONFIG_AUTOSCAN_PERIODIC=y +CONFIG_BACKEND=file +CONFIG_BGSCAN_LEARN=y +CONFIG_BGSCAN_SIMPLE=y +CONFIG_CTRL_IFACE=y +CONFIG_CTRL_IFACE_DBUS_INTRO=y +CONFIG_CTRL_IFACE_DBUS_NEW=y +CONFIG_DEBUG_FILE=y +CONFIG_DEBUG_LINUX_TRACING=y +CONFIG_DEBUG_SYSLOG=y +CONFIG_DEBUG_SYSLOG_FACILITY=LOG_DAEMON +CONFIG_DELAYED_MIC_ERROR_REPORT=y +CONFIG_DPP=y +CONFIG_DRIVER_MACSEC_LINUX=y +CONFIG_DRIVER_NL80211=y +CONFIG_DRIVER_NL80211_QCA=y +CONFIG_DRIVER_NONE=y +CONFIG_DRIVER_WEXT=y +CONFIG_DRIVER_WIRED=y +CONFIG_EAP_AKA=y +CONFIG_EAP_AKA_PRIME=y +CONFIG_EAP_EKE=y +CONFIG_EAP_FAST=y +CONFIG_EAP_GPSK=y +CONFIG_EAP_GPSK_SHA256=y +CONFIG_EAP_GTC=y +CONFIG_EAP_IKEV2=y +CONFIG_EAP_LEAP=y +CONFIG_EAP_MD5=y +CONFIG_EAP_MSCHAPV2=y +CONFIG_EAP_OTP=y +CONFIG_EAP_PAX=y +CONFIG_EAP_PEAP=y +CONFIG_EAP_PSK=y +CONFIG_EAP_PWD=y +CONFIG_EAP_SAKE=y +CONFIG_EAP_SIM=y +CONFIG_EAP_TLS=y +CONFIG_EAP_TNC=y +CONFIG_EAP_TTLS=y +CONFIG_ELOOP=eloop +CONFIG_FST=y +CONFIG_GETRANDOM=y +CONFIG_HS20=y +CONFIG_HT_OVERRIDES=y +CONFIG_IBSS_RSN=y +CONFIG_IEEE80211AC=y +CONFIG_IEEE80211N=y +CONFIG_IEEE80211R=y +CONFIG_IEEE80211W=y +CONFIG_IEEE8021X_EAPOL=y +CONFIG_INTERWORKING=y +CONFIG_IPV6=y +CONFIG_L2_PACKET=linux +CONFIG_LIBNL32=y +CONFIG_MACSEC=y +CONFIG_MAIN=main +CONFIG_NO_RANDOM_POOL=y +CONFIG_OS=unix +CONFIG_OWE=y +CONFIG_P2P=y +CONFIG_PKCS12=y +CONFIG_PMKSA_CACHE_EXTERNAL=y +CONFIG_READLINE=y +CONFIG_SAE=y +CONFIG_SMARTCARD=y +CONFIG_TDLS=y +CONFIG_TLS=openssl +CONFIG_TLSV11=y +CONFIG_TLSV12=y +CONFIG_TLS_DEFAULT_CIPHERS="DEFAULT@SECLEVEL=1" +CONFIG_VHT_OVERRIDES=y +CONFIG_WIFI_DISPLAY=y +CONFIG_WPS=y +CONFIG_WPS_ER=y +CONFIG_WPS_NFC=y +CONFIG_WPS_REG_DISABLE_OPEN=y diff --git a/x86_64/core/wpa_supplicant/roam-properties.patch b/x86_64/core/wpa_supplicant/roam-properties.patch new file mode 100644 index 0000000..30cd2ef --- /dev/null +++ b/x86_64/core/wpa_supplicant/roam-properties.patch @@ -0,0 +1,88 @@ +From 23d87687c2428f3b94865580b0d33e05c03e6756 Mon Sep 17 00:00:00 2001 +From: Matthew Wang +Date: Fri, 11 Oct 2019 13:49:25 -0700 +Subject: dbus: Move roam metrics to the correct interface + +These properties were in the wpas_dbus_bss_properties array when they +should have been in the wpas_dbus_interface_properties array. Move them +to the right place. This is the logical location for these properties +and it matches both the other parts of the implementation (e.g., being +in enum wpas_dbus_prop, not in enum wpas_dbus_bss_prop) and what +was originally documented for the interface in dbus.doxygen. + +Fixes: 2bbad1c7c9cb ("dbus: Export roam time, roam complete, and session length") +Fixes: 80d06d0ca9f3 ("dbus: Export BSS Transition Management status") +Signed-off-by: Matthew Wang +--- + wpa_supplicant/dbus/dbus_new.c | 48 +++++++++++++++++++++--------------------- + 1 file changed, 24 insertions(+), 24 deletions(-) + +diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c +index 5e6b522..e9e77bd 100644 +--- a/wpa_supplicant/dbus/dbus_new.c ++++ b/wpa_supplicant/dbus/dbus_new.c +@@ -2855,30 +2855,6 @@ static const struct wpa_dbus_property_desc wpas_dbus_bss_properties[] = { + NULL, + NULL + }, +- { +- "RoamTime", WPAS_DBUS_NEW_IFACE_INTERFACE, "u", +- wpas_dbus_getter_roam_time, +- NULL, +- NULL +- }, +- { +- "RoamComplete", WPAS_DBUS_NEW_IFACE_INTERFACE, "b", +- wpas_dbus_getter_roam_complete, +- NULL, +- NULL +- }, +- { +- "SessionLength", WPAS_DBUS_NEW_IFACE_INTERFACE, "u", +- wpas_dbus_getter_session_length, +- NULL, +- NULL +- }, +- { +- "BSSTMStatus", WPAS_DBUS_NEW_IFACE_INTERFACE, "u", +- wpas_dbus_getter_bss_tm_status, +- NULL, +- NULL +- }, + { NULL, NULL, NULL, NULL, NULL, NULL } + }; + +@@ -3786,6 +3762,30 @@ static const struct wpa_dbus_property_desc wpas_dbus_interface_properties[] = { + NULL, + NULL + }, ++ { ++ "RoamTime", WPAS_DBUS_NEW_IFACE_INTERFACE, "u", ++ wpas_dbus_getter_roam_time, ++ NULL, ++ NULL ++ }, ++ { ++ "RoamComplete", WPAS_DBUS_NEW_IFACE_INTERFACE, "b", ++ wpas_dbus_getter_roam_complete, ++ NULL, ++ NULL ++ }, ++ { ++ "SessionLength", WPAS_DBUS_NEW_IFACE_INTERFACE, "u", ++ wpas_dbus_getter_session_length, ++ NULL, ++ NULL ++ }, ++ { ++ "BSSTMStatus", WPAS_DBUS_NEW_IFACE_INTERFACE, "u", ++ wpas_dbus_getter_bss_tm_status, ++ NULL, ++ NULL ++ }, + #ifdef CONFIG_MESH + { "MeshPeers", WPAS_DBUS_NEW_IFACE_MESH, "aay", + wpas_dbus_getter_mesh_peers, +-- +cgit v0.12 + diff --git a/x86_64/core/wpa_supplicant/systemd.patch b/x86_64/core/wpa_supplicant/systemd.patch new file mode 100644 index 0000000..0ef2778 --- /dev/null +++ b/x86_64/core/wpa_supplicant/systemd.patch @@ -0,0 +1,29 @@ +diff -u -r wpa_supplicant-2.9/wpa_supplicant/dbus/fi.w1.wpa_supplicant1.service.in wpa_supplicant-2.9-systemd/wpa_supplicant/dbus/fi.w1.wpa_supplicant1.service.in +--- wpa_supplicant-2.9/wpa_supplicant/dbus/fi.w1.wpa_supplicant1.service.in 2019-08-07 13:25:25.000000000 +0000 ++++ wpa_supplicant-2.9-systemd/wpa_supplicant/dbus/fi.w1.wpa_supplicant1.service.in 2020-01-22 22:46:14.676497087 +0000 +@@ -1,5 +1,5 @@ + [D-BUS Service] + Name=fi.w1.wpa_supplicant1 +-Exec=@BINDIR@/wpa_supplicant -u ++Exec=@BINDIR@/wpa_supplicant -u -s -O /run/wpa_supplicant + User=root + SystemdService=wpa_supplicant.service +diff -u -r wpa_supplicant-2.9/wpa_supplicant/systemd/wpa_supplicant.service.in wpa_supplicant-2.9-systemd/wpa_supplicant/systemd/wpa_supplicant.service.in +--- wpa_supplicant-2.9/wpa_supplicant/systemd/wpa_supplicant.service.in 2019-08-07 13:25:25.000000000 +0000 ++++ wpa_supplicant-2.9-systemd/wpa_supplicant/systemd/wpa_supplicant.service.in 2020-01-22 22:47:53.561183663 +0000 +@@ -1,12 +1,14 @@ + [Unit] + Description=WPA supplicant + Before=network.target ++After=dbus.service + Wants=network.target ++IgnoreOnIsolate=true + + [Service] + Type=dbus + BusName=fi.w1.wpa_supplicant1 +-ExecStart=@BINDIR@/wpa_supplicant -u ++ExecStart=@BINDIR@/wpa_supplicant -u -s -O /run/wpa_supplicant + + [Install] + WantedBy=multi-user.target diff --git a/x86_64/core/wpa_supplicant/tls.patch b/x86_64/core/wpa_supplicant/tls.patch new file mode 100644 index 0000000..819f69e --- /dev/null +++ b/x86_64/core/wpa_supplicant/tls.patch @@ -0,0 +1,26 @@ +diff -u -r wpa_supplicant-2.9/src/crypto/tls_openssl.c wpa_supplicant-2.9-tls/src/crypto/tls_openssl.c +--- wpa_supplicant-2.9/src/crypto/tls_openssl.c 2019-08-07 13:25:25.000000000 +0000 ++++ wpa_supplicant-2.9-tls/src/crypto/tls_openssl.c 2020-01-22 22:49:12.575598357 +0000 +@@ -1035,6 +1035,13 @@ + os_free(data); + return NULL; + } ++ ++#ifndef EAP_SERVER_TLS ++ /* Enable TLSv1.0 by default to allow connecting to legacy ++ * networks since Debian OpenSSL is set to minimum TLSv1.2 and SECLEVEL=2. */ ++ SSL_CTX_set_min_proto_version(ssl, TLS1_VERSION); ++#endif ++ + data->ssl = ssl; + if (conf) { + data->tls_session_lifetime = conf->tls_session_lifetime; +@@ -1577,6 +1584,7 @@ + #ifdef SSL_OP_NO_COMPRESSION + options |= SSL_OP_NO_COMPRESSION; + #endif /* SSL_OP_NO_COMPRESSION */ ++ options |= SSL_OP_NO_TICKET; + SSL_set_options(conn->ssl, options); + #ifdef SSL_OP_ENABLE_MIDDLEBOX_COMPAT + /* Hopefully there is no need for middlebox compatibility mechanisms +Only in wpa_supplicant-2.9-tls/src/crypto: tls_openssl.c.orig diff --git a/x86_64/core/wpa_supplicant/wpa_supplicant.install b/x86_64/core/wpa_supplicant/wpa_supplicant.install new file mode 100644 index 0000000..3e4bcd3 --- /dev/null +++ b/x86_64/core/wpa_supplicant/wpa_supplicant.install @@ -0,0 +1,7 @@ +post_upgrade() { + if [[ $(vercmp "$2" '1:2.6-3') -lt 0 ]]; then + echo ':: The /etc/wpa_supplicant/wpa_supplicant.conf is file no longer managed by pacman' + echo ' and if it was modified, it has been renamed to wpa_supplicant.conf.pacsave.' + echo ' Move it to the original location if needed.' + fi +} diff --git a/x86_64/core/zlib/PKGBUILD b/x86_64/core/zlib/PKGBUILD new file mode 100644 index 0000000..0ce93ff --- /dev/null +++ b/x86_64/core/zlib/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=zlib +pkgver=1.2.11 +pkgrel=2 +arch=('x86_64') +depends=(glibc) +source=(https://zlib.net/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + + mkdir -p $pkgdir/lib + mv -v $pkgdir/usr/lib/libz.so.* $pkgdir/lib + ln -sfv ../../lib/$(readlink $pkgdir/usr/lib/libz.so) $pkgdir/usr/lib/libz.so +} diff --git a/x86_64/cross_tools/aarch64-linux-gnu-binutils/PKGBUILD b/x86_64/cross_tools/aarch64-linux-gnu-binutils/PKGBUILD new file mode 100644 index 0000000..332c4e3 --- /dev/null +++ b/x86_64/cross_tools/aarch64-linux-gnu-binutils/PKGBUILD @@ -0,0 +1,59 @@ +_target=aarch64-linux-gnu +pkgname=$_target-binutils +pkgver=2.37 +pkgrel=1 +pkgdesc='A set of programs to assemble and manipulate binary and object files for the ARM64 target' +arch=(x86_64) +url='https://www.gnu.org/software/binutils/' +depends=(zlib) +source=(https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.bz2{,.sig}) + +prepare() { + cd binutils-$pkgver + sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" libiberty/configure +} + +build() { + cd binutils-$pkgver + + if [ "${CARCH}" != "i686" ]; + then + # enabling gold linker at i686 makes the install fail + enable_gold='--enable-gold' + fi + + ./configure --target=$_target \ + --with-sysroot=/usr/$_target \ + --prefix=/usr \ + --disable-multilib \ + --with-gnu-as \ + --with-gnu-ld \ + --disable-nls \ + --enable-ld=default \ + $enable_gold \ + --enable-plugins \ + --enable-deterministic-archives + + make +} + +check() { + cd binutils-$pkgver + + # unset LDFLAGS as testsuite makes assumptions about which ones are active + # do not abort on errors - manually check log files + make -k LDFLAGS="" check || true +} + +package() { + cd binutils-$pkgver + + make DESTDIR="$pkgdir" install + + # Remove file conflicting with host binutils and manpages for MS Windows tools + rm "$pkgdir"/usr/share/man/man1/$_target-{dlltool,windres,windmc}* + rm "$pkgdir"/usr/lib/bfd-plugins/libdep.so + + # Remove info documents that conflict with host version + rm -r "$pkgdir"/usr/share/info +} \ No newline at end of file diff --git a/x86_64/cross_tools/aarch64-linux-gnu-gcc/PKGBUILD b/x86_64/cross_tools/aarch64-linux-gnu-gcc/PKGBUILD new file mode 100644 index 0000000..5acb2bd --- /dev/null +++ b/x86_64/cross_tools/aarch64-linux-gnu-gcc/PKGBUILD @@ -0,0 +1,92 @@ +_target=aarch64-linux-gnu +pkgname=$_target-gcc +pkgver=11.2.0 +_islver=0.24 +pkgrel=1 +pkgdesc='The GNU Compiler Collection - cross compiler for ARM64 target' +arch=(x86_64) +url='https://gcc.gnu.org/' +license=(GPL LGPL FDL) +depends=($_target-binutils $_target-glibc libmpc zlib) +makedepends=(gmp mpfr) +options=(!emptydirs !strip staticlibs) +source=(https://ftp.gnu.org/gnu/gcc/gcc-$pkgver/gcc-$pkgver.tar.xz{,.sig} + #https://gcc.gnu.org/pub/gcc/snapshots/$_snapshot/gcc-$_snapshot.tar.xz + https://ftp.slackware.pl/pub/slackware/slackware64-current/source/l/isl/isl-$_islver.tar.xz) + +if [ -n "$_snapshot" ]; then + _basedir=gcc-$_snapshot +else + _basedir=gcc-$pkgver +fi + +prepare() { + cd $_basedir + + # link isl for in-tree builds + ln -sf ../isl-$_islver isl + + echo $pkgver > gcc/BASE-VER + + # Do not run fixincludes + sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in + + # hack! - some configure tests for header files using "$CPP $CPPFLAGS" + sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" "$srcdir"/$_basedir/{libiberty,gcc}/configure + + rm -rf "$srcdir"/gcc-build + mkdir "$srcdir"/gcc-build +} + +build() { + cd gcc-build + + # using -pipe causes spurious test-suite failures + # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48565 + CFLAGS=${CFLAGS/-pipe/} + CXXFLAGS=${CXXFLAGS/-pipe/} + + "$srcdir"/$_basedir/configure \ + --prefix=/usr \ + --program-prefix=$_target- \ + --with-local-prefix=/usr/$_target \ + --with-sysroot=/usr/$_target \ + --with-build-sysroot=/usr/$_target \ + --with-native-system-header-dir=/include \ + --libdir=/usr/lib --libexecdir=/usr/lib \ + --target=$_target --host=$CHOST --build=$CHOST \ + --disable-nls --enable-default-pie \ + --enable-languages=c,c++,fortran \ + --enable-shared --enable-threads=posix \ + --with-system-zlib --with-isl --enable-__cxa_atexit \ + --disable-libunwind-exceptions --enable-clocale=gnu \ + --disable-libstdcxx-pch --disable-libssp \ + --enable-gnu-unique-object --enable-linker-build-id \ + --enable-lto --enable-plugin --enable-install-libiberty \ + --with-linker-hash-style=gnu --enable-gnu-indirect-function \ + --disable-multilib --disable-werror \ + --enable-checking=release + + make +} + +package() { + cd gcc-build + + make DESTDIR="$pkgdir" install-gcc install-target-{libgcc,libstdc++-v3,libgomp,libgfortran,libquadmath,libatomic} + + # strip target binaries + find "$pkgdir"/usr/lib/gcc/$_target/ "$pkgdir"/usr/$_target/lib \ + -type f -and \( -name \*.a -or -name \*.o \) \ + -exec $_target-objcopy -R .comment -R .note -R .debug_info -R .debug_aranges \ + -R .debug_pubnames -R .debug_pubtypes -R .debug_abbrev -R .debug_line \ + -R .debug_str -R .debug_ranges -R .debug_loc '{}' \; + + # strip host binaries + find "$pkgdir"/usr/bin/ "$pkgdir"/usr/lib/gcc/$_target/ -type f -and \( -executable \) -exec strip '{}' \; + + # Remove files that conflict with host gcc package + rm -r "$pkgdir"/usr/share/man/man7 + rm -r "$pkgdir"/usr/share/info + rm -r "$pkgdir"/usr/share/gcc-$pkgver +} diff --git a/x86_64/cross_tools/aarch64-linux-gnu-glibc/PKGBUILD b/x86_64/cross_tools/aarch64-linux-gnu-glibc/PKGBUILD new file mode 100644 index 0000000..ce1f3af --- /dev/null +++ b/x86_64/cross_tools/aarch64-linux-gnu-glibc/PKGBUILD @@ -0,0 +1,65 @@ +_target=aarch64-linux-gnu +pkgname=$_target-glibc +pkgver=2.33 +pkgrel=1 +_commit=be176490b818b65b5162c332eb6b581690b16e5c +pkgdesc="GNU C Library ARM64 target" +arch=(x86_64) +url='https://www.gnu.org/software/libc/' +depends=($_target-gcc $_target-linux-api-headers) +makedepends=(python3) +source=(https://ftp.gnu.org/gnu/libc/glibc-$pkgver.tar.xz{,.sig}) +prepare() { + mkdir -p glibc-build +} + +build() { + cd glibc-build + + echo "slibdir=/lib" >> configparms + echo "rtlddir=/lib" >> configparms + echo "sbindir=/bin" >> configparms + echo "rootsbindir=/bin" >> configparms + + # remove hardening options for building libraries + export CFLAGS="-U_FORTIFY_SOURCE -mlittle-endian -O2" + export CPPFLAGS="-U_FORTIFY_SOURCE -O2" + unset LD_LIBRARY_PATH + + export BUILD_CC=gcc + export CC=${_target}-gcc + export CXX=${_target}-g++ + export AR=${_target}-ar + export RANLIB=${_target}-ranlib + + ../glibc-$pkgver/configure \ + --prefix=/usr \ + --target=$_target \ + --host=$_target \ + --build=$CHOST \ + --includedir=/include \ + --libdir=/lib \ + --libexecdir=/lib \ + --with-headers=/usr/$_target/include \ + --with-bugurl=https://bugs.archlinux.org/ \ + --enable-add-ons \ + --enable-obsolete-rpc \ + --enable-kernel=2.6.32 \ + --enable-bind-now \ + --disable-profile \ + --enable-stackguard-randomization \ + --enable-lock-elision \ + --enable-multi-arch \ + --disable-werror + + echo "build-programs=no" >> configparms + make +} + +package() { + cd glibc-build + + make install_root="$pkgdir"/usr/$_target install + + rm -r "$pkgdir"/usr/$_target/{etc,usr/share,var} +} \ No newline at end of file diff --git a/x86_64/cross_tools/aarch64-linux-gnu-linux-api-headers/PKGBUILD b/x86_64/cross_tools/aarch64-linux-gnu-linux-api-headers/PKGBUILD new file mode 100644 index 0000000..a1f3ac6 --- /dev/null +++ b/x86_64/cross_tools/aarch64-linux-gnu-linux-api-headers/PKGBUILD @@ -0,0 +1,27 @@ +_target_arch=arm64 +_target=aarch64-linux-gnu +pkgname=$_target-linux-api-headers +pkgver=5.15.13 +pkgrel=1 +pkgdesc="Kernel headers sanitized for use in userspace ($_target)" +arch=(x86_64) +url='https://www.kernel.org' +license=(GPL2) +makedepends=(rsync) +source=(https://www.kernel.org/pub/linux/kernel/v5.x/linux-$pkgver.tar.{xz,sign}) + +build() { + cd linux-$pkgver + + make ARCH=$_target_arch mrproper + make ARCH=$_target_arch headers_check +} + +package() { + cd linux-$pkgver + + make INSTALL_HDR_PATH="$pkgdir/usr/$_target/" ARCH=$_target_arch V=0 headers_install + + # clean-up unnecessary files generated during install + find "$pkgdir" \( -name .install -or -name ..install.cmd \) -delete +} \ No newline at end of file diff --git a/x86_64/cross_tools/i686-linux-gnu-binutils/PKGBUILD b/x86_64/cross_tools/i686-linux-gnu-binutils/PKGBUILD new file mode 100644 index 0000000..0224203 --- /dev/null +++ b/x86_64/cross_tools/i686-linux-gnu-binutils/PKGBUILD @@ -0,0 +1,60 @@ +_target=i686-linux-gnu +pkgname=$_target-binutils +pkgver=2.37 +pkgrel=1 +pkgdesc='A set of programs to assemble and manipulate binary and object files for the ARM64 target' +arch=(x86_64) +url='https://www.gnu.org/software/binutils/' +license=(GPL) +depends=(zlib) +source=(https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.bz2{,.sig}) + +prepare() { + cd binutils-$pkgver + sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" libiberty/configure +} + +build() { + cd binutils-$pkgver + + if [ "${CARCH}" != "i686" ]; + then + # enabling gold linker at i686 makes the install fail + enable_gold='--enable-gold' + fi + + ./configure --target=$_target \ + --with-sysroot=/usr/$_target \ + --prefix=/usr \ + --disable-multilib \ + --with-gnu-as \ + --with-gnu-ld \ + --disable-nls \ + --enable-ld=default \ + $enable_gold \ + --enable-plugins \ + --enable-deterministic-archives + + make +} + +check() { + cd binutils-$pkgver + + # unset LDFLAGS as testsuite makes assumptions about which ones are active + # do not abort on errors - manually check log files + make -k LDFLAGS="" check || true +} + +package() { + cd binutils-$pkgver + + make DESTDIR="$pkgdir" install + + # Remove file conflicting with host binutils and manpages for MS Windows tools + rm "$pkgdir"/usr/share/man/man1/$_target-{dlltool,windres,windmc}* + rm "$pkgdir"/usr/lib/bfd-plugins/libdep.so + + # Remove info documents that conflict with host version + rm -r "$pkgdir"/usr/share/info +} diff --git a/x86_64/cross_tools/i686-linux-gnu-gcc/PKGBUILD b/x86_64/cross_tools/i686-linux-gnu-gcc/PKGBUILD new file mode 100644 index 0000000..701ba6a --- /dev/null +++ b/x86_64/cross_tools/i686-linux-gnu-gcc/PKGBUILD @@ -0,0 +1,117 @@ +_target=i686-linux-gnu +pkgname=$_target-gcc +pkgver=11.2.0 +_islver=0.24 +pkgrel=1 +pkgdesc='The GNU Compiler Collection - cross compiler for I686 target' +arch=(x86_64) +url='https://gcc.gnu.org/' +license=(GPL LGPL FDL) +#depends=($_target-binutils $_target-glibc mpc zlib) +makedepends=(gmp mpfr) +options=(!emptydirs !strip staticlibs) +source=(https://ftp.gnu.org/gnu/gcc/gcc-$pkgver/gcc-$pkgver.tar.xz{,.sig} + #https://gcc.gnu.org/pub/gcc/snapshots/$_snapshot/gcc-$_snapshot.tar.xz + https://ftp.slackware.pl/pub/slackware/slackware64-current/source/l/isl/isl-$_islver.tar.xz) + +if [ -n "$_snapshot" ]; then + _basedir=gcc-$_snapshot +else + _basedir=gcc-$pkgver +fi + +prepare() { + cd $_basedir + + # link isl for in-tree builds + ln -sf ../isl-$_islver isl + + echo $pkgver > gcc/BASE-VER + + # Do not run fixincludes + sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in + + # hack! - some configure tests for header files using "$CPP $CPPFLAGS" + sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" "$srcdir"/$_basedir/{libiberty,gcc}/configure + + rm -rf "$srcdir"/gcc-build + mkdir "$srcdir"/gcc-build +} + +build() { + cd gcc-build + + # using -pipe causes spurious test-suite failures + # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48565 + CFLAGS=${CFLAGS/-pipe/} + CXXFLAGS=${CXXFLAGS/-pipe/} + + "$srcdir"/$_basedir/configure \ + --prefix=/usr \ + --program-prefix=$_target- \ + --with-local-prefix=/usr/$_target \ + --with-sysroot=/usr/$_target \ + --with-build-sysroot=/usr/$_target \ + --with-native-system-header-dir=/include \ + --libdir=/usr/lib --libexecdir=/usr/lib \ + --target=$_target --host=$CHOST --build=$CHOST \ + --with-newlib \ + --without-headers \ + --enable-initfini-array \ + --disable-nls \ + --disable-shared \ + --disable-multilib \ + --disable-decimal-float \ + --disable-threads \ + --disable-libatomic \ + --disable-libgomp \ + --disable-libquadmath \ + --disable-libssp \ + --disable-libvtv \ + --disable-libstdcxx \ + --enable-languages=c,c++ + + +# --prefix=/usr \ +# --program-prefix=$_target- \ +# --with-local-prefix=/usr/$_target \ +# --with-sysroot=/usr/$_target \ +# --with-build-sysroot=/usr/$_target \ +# --with-native-system-header-dir=/include \ +# --libdir=/usr/lib --libexecdir=/usr/lib \ +# --target=$_target --host=$CHOST --build=$CHOST \ +# --disable-nls --enable-default-pie \ +# --enable-languages=c,c++,fortran \ +# --enable-shared --enable-threads=posix \ +# --with-system-zlib --with-isl --enable-__cxa_atexit \ +# --disable-libunwind-exceptions --enable-clocale=gnu \ +# --disable-libstdcxx-pch --disable-libssp \ +# --enable-gnu-unique-object --enable-linker-build-id \ +# --enable-lto --enable-plugin --enable-install-libiberty \ +# --with-linker-hash-style=gnu --enable-gnu-indirect-function \ +# --disable-multilib --disable-werror \ +# --enable-checking=release + + make +} + +package() { + cd gcc-build + + make DESTDIR="$pkgdir" install-gcc install-target-{libgcc,libstdc++-v3,libgomp,libgfortran,libquadmath,libatomic} + + # strip target binaries + find "$pkgdir"/usr/lib/gcc/$_target/ "$pkgdir"/usr/$_target/lib \ + -type f -and \( -name \*.a -or -name \*.o \) \ + -exec $_target-objcopy -R .comment -R .note -R .debug_info -R .debug_aranges \ + -R .debug_pubnames -R .debug_pubtypes -R .debug_abbrev -R .debug_line \ + -R .debug_str -R .debug_ranges -R .debug_loc '{}' \; + + # strip host binaries + find "$pkgdir"/usr/bin/ "$pkgdir"/usr/lib/gcc/$_target/ -type f -and \( -executable \) -exec strip '{}' \; + + # Remove files that conflict with host gcc package + rm -r "$pkgdir"/usr/share/man/man7 + rm -r "$pkgdir"/usr/share/info + rm -r "$pkgdir"/usr/share/gcc-$pkgver +} diff --git a/x86_64/cross_tools/i686-linux-gnu-glibc/PKGBUILD b/x86_64/cross_tools/i686-linux-gnu-glibc/PKGBUILD new file mode 100644 index 0000000..1ac7c31 --- /dev/null +++ b/x86_64/cross_tools/i686-linux-gnu-glibc/PKGBUILD @@ -0,0 +1,70 @@ +_target=i386-linux-gnu +_targetname=i686-linux-gnu +pkgname=$_targetname-glibc +pkgver=2.34 +pkgrel=1 +_commit=be176490b818b65b5162c332eb6b581690b16e5c +pkgdesc="GNU C Library ARM64 target" +arch=(any) +url='https://www.gnu.org/software/libc/' +license=('GPL' 'LGPL') +#depends=($_targetname-gcc $_targetname-linux-api-headers) +makedepends=(python3) +options=(!buildflags !strip staticlibs) +source=(https://ftp.gnu.org/gnu/libc/glibc-$pkgver.tar.xz) + +prepare() { + mkdir -p glibc-build +} + +build() { + cd glibc-build + + echo "slibdir=/lib" >> configparms + echo "rtlddir=/lib" >> configparms + echo "sbindir=/bin" >> configparms + echo "rootsbindir=/bin" >> configparms + + # remove hardening options for building libraries + export CFLAGS="-U_FORTIFY_SOURCE -O2" + export CPPFLAGS="-U_FORTIFY_SOURCE -O2" + unset LD_LIBRARY_PATH + + export BUILD_CC=gcc + export CC=${_target}-gcc + export CXX=${_target}-g++ + export AR=${_target}-ar + export RANLIB=${_target}-ranlib + + ../glibc-$pkgver/configure \ + --prefix=/usr \ + --target=$_target \ + --with-headers=/usr/i686-linux-gnu/include/ \ + --host=$_target \ + --build=$CHOST \ + --includedir=/include \ + --libdir=/lib \ + --libexecdir=/lib \ + --with-headers=/usr/$_target/include \ + --with-bugurl=https://bugs.archlinux.org/ \ + --enable-add-ons \ + --enable-obsolete-rpc \ + --enable-kernel=2.6.32 \ + --enable-bind-now \ + --disable-profile \ + --enable-stackguard-randomization \ + --enable-lock-elision \ + --enable-multi-arch \ + --disable-werror + + echo "build-programs=no" >> configparms + make +} + +package() { + cd glibc-build + + make install_root="$pkgdir"/usr/$_target install + + rm -r "$pkgdir"/usr/$_target/{etc,usr/share,var} +} diff --git a/x86_64/cross_tools/i686-linux-gnu-linux-api-headers/PKGBUILD b/x86_64/cross_tools/i686-linux-gnu-linux-api-headers/PKGBUILD new file mode 100644 index 0000000..f821cbe --- /dev/null +++ b/x86_64/cross_tools/i686-linux-gnu-linux-api-headers/PKGBUILD @@ -0,0 +1,27 @@ +_target_arch=i386 +_target=i686-linux-gnu +pkgname=$_target-linux-api-headers +pkgver=5.15.13 +pkgrel=1 +pkgdesc="Kernel headers sanitized for use in userspace ($_target)" +arch=(any) +url='https://www.kernel.org' +license=(GPL2) +makedepends=(rsync) +source=(https://www.kernel.org/pub/linux/kernel/v5.x/linux-$pkgver.tar.xz) + +build() { + cd linux-$pkgver + + make ARCH=$_target_arch mrproper + make ARCH=$_target_arch headers_check +} + +package() { + cd linux-$pkgver + + make INSTALL_HDR_PATH="$pkgdir/usr/$_target/" ARCH=$_target_arch V=0 headers_install + + # clean-up unnecessary files generated during install + find "$pkgdir" \( -name .install -or -name ..install.cmd \) -delete +} diff --git a/x86_64/extra/PKGBUILD b/x86_64/extra/PKGBUILD new file mode 100644 index 0000000..68afd75 --- /dev/null +++ b/x86_64/extra/PKGBUILD @@ -0,0 +1,19 @@ +pkgname= +pkgver= +pkgrel=1 +arch=(x86_64) +depends=() +makedepends=() +source=() + +build() { + cd $pkgname-$pkgver + + +} + +package() { + cd $pkgname-$pkgver + + +} diff --git a/x86_64/extra/abseil-cpp/PKGBUILD b/x86_64/extra/abseil-cpp/PKGBUILD new file mode 100644 index 0000000..93e90d4 --- /dev/null +++ b/x86_64/extra/abseil-cpp/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=abseil-cpp +pkgver=20211102.0 +pkgrel=1 +arch=('x86_64') +makedepends=('cmake') +source=("https://github.com/abseil/abseil-cpp/archive/$pkgver/$pkgname-$pkgver.tar.gz") + +build() { + cd "$srcdir/$pkgname-$pkgver" + + cmake -Bbuild \ + -D CMAKE_BUILD_TYPE=RelWithDebInfo \ + -D CMAKE_CXX_FLAGS="-DNDEBUG" \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_CXX_STANDARD=17 \ + -D BUILD_SHARED_LIBS=ON \ + -D CMAKE_POSITION_INDEPENDENT_CODE=ON + + cd build + + cmake --build . +} + +package() { + cd "$srcdir/$pkgname-$pkgver/build" + + DESTDIR="$pkgdir" cmake --install . +} diff --git a/x86_64/extra/acpid/PKGBUILD b/x86_64/extra/acpid/PKGBUILD new file mode 100644 index 0000000..a114587 --- /dev/null +++ b/x86_64/extra/acpid/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=acpid +pkgver=2.0.33 +pkgrel=2 +arch=('x86_64') +depends=('which') +source=(https://downloads.sourceforge.net/acpid2/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + install -v -m755 -d $pkgdir/etc/acpi/events +} diff --git a/x86_64/extra/adwaita-icon-theme/PKGBUILD b/x86_64/extra/adwaita-icon-theme/PKGBUILD new file mode 100644 index 0000000..3265609 --- /dev/null +++ b/x86_64/extra/adwaita-icon-theme/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=adwaita-icon-theme +pkgver=41.0 +pkgrel=1 +arch=('x86_64') +depends=('gtk+' 'librsvg') +makedepends=(git) +source=(https://download.gnome.org/sources/$pkgname/41/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/alsa-firmware/PKGBUILD b/x86_64/extra/alsa-firmware/PKGBUILD new file mode 100644 index 0000000..3ed755a --- /dev/null +++ b/x86_64/extra/alsa-firmware/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=alsa-firmware +pkgver=1.2.4 +pkgrel=1 +pkgdesc="Firmware binaries for loader programs in alsa-tools and hotplug firmware loader" +arch=('x86_64') +depends=(alsa-tools) +source=(https://www.alsa-project.org/files/pub/firmware/${pkgname}-${pkgver}.tar.bz2) + +prepare() { + cd "$pkgname-$pkgver" + autoreconf -vfi +} + +build() { + cd "$pkgname-$pkgver" + + ./configure \ + --prefix=/usr \ + --enable-buildfw \ + -with-hotplug-dir=/usr/lib/firmware + + make +} + +package() { + cd "$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install + + # remove files which conflict with linux-firmware + rm -rf "${pkgdir}"/usr/lib/firmware/{ct{efx,speq}.bin,ess,korg,sb16,yamaha} + + # remove broken symlinks (broken upstream) + rm -rf "${pkgdir}"/usr/lib/firmware/turtlebeach +} diff --git a/x86_64/extra/alsa-lib/PKGBUILD b/x86_64/extra/alsa-lib/PKGBUILD new file mode 100644 index 0000000..cf7400d --- /dev/null +++ b/x86_64/extra/alsa-lib/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=alsa-lib +pkgver=1.2.6.1 +pkgrel=1 +arch=('x86_64') +depends=(doxygen python3) +source=(https://alsa-project.org/files/pub/lib/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/alsa-plugins/PKGBUILD b/x86_64/extra/alsa-plugins/PKGBUILD new file mode 100644 index 0000000..4d2d456 --- /dev/null +++ b/x86_64/extra/alsa-plugins/PKGBUILD @@ -0,0 +1,49 @@ +pkgname=alsa-plugins +pkgver=1.2.6 +pkgrel=1 +arch=(x86_64) +makedepends=(alsa-lib dbus ffmpeg jack2 libavtp pulseaudio) +source=("https://www.alsa-project.org/files/pub/plugins/$pkgname-$pkgver.tar.bz2" + pulse-sysdefault.diff) + +prepare() { + cd $pkgname-$pkgver + + # Make use of the pulse plugin's "fallback" feature + # Keeps parity with our old config from pulseaudio-alsa + patch -Np1 -i ../pulse-sysdefault.diff + + autoreconf -fiv +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --enable-maemo-plugin \ + --enable-maemo-resource-manager + + # prevent excessive overlinking due to libtool + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + + # remove maemo plugin configuration (it overrides defaults for pcm and ctl), + # until a better way is found to package default overrides: + # https://bugs.archlinux.org/task/65440 + rm -v "${pkgdir}/etc/alsa/conf.d/98-maemo.conf" + + # make a proper off-by-default config template out of the example file + mv -v "${pkgdir}/etc/alsa/conf.d/99-pulseaudio-default.conf.example" \ + "${pkgdir}/usr/share/alsa/alsa.conf.d/99-pulseaudio-default.conf" + + mkdir -p "${pkgdir}/etc/alsa/conf.d" + ln -st "${pkgdir}/etc/alsa/conf.d" /usr/share/alsa/alsa.conf.d/99-pulseaudio-default.conf +} diff --git a/x86_64/extra/alsa-plugins/pulse-sysdefault.diff b/x86_64/extra/alsa-plugins/pulse-sysdefault.diff new file mode 100644 index 0000000..4ecd45f --- /dev/null +++ b/x86_64/extra/alsa-plugins/pulse-sysdefault.diff @@ -0,0 +1,17 @@ +diff -u -r alsa-plugins-1.2.2/pulse/99-pulseaudio-default.conf.example alsa-plugins-1.2.2-pulse-sysdefault/pulse/99-pulseaudio-default.conf.example +--- alsa-plugins-1.2.2/pulse/99-pulseaudio-default.conf.example 2020-02-19 09:35:42.000000000 +0000 ++++ alsa-plugins-1.2.2-pulse-sysdefault/pulse/99-pulseaudio-default.conf.example 2020-05-13 10:04:28.446568563 +0000 +@@ -2,6 +2,7 @@ + + pcm.!default { + type pulse ++ fallback "sysdefault" + hint { + show on + description "Default ALSA Output (currently PulseAudio Sound Server)" +@@ -10,4 +11,5 @@ + + ctl.!default { + type pulse ++ fallback "sysdefault" + } diff --git a/x86_64/extra/alsa-tools/PKGBUILD b/x86_64/extra/alsa-tools/PKGBUILD new file mode 100644 index 0000000..6b36dcd --- /dev/null +++ b/x86_64/extra/alsa-tools/PKGBUILD @@ -0,0 +1,40 @@ +pkgname=alsa-tools +pkgver=1.2.5 +pkgrel=1 +arch=('x86_64') +depends=(alsa-lib gtk2+ gtk+ fltk) +source=(https://alsa-project.org/files/pub/tools/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + # remove a tool that needs Qt2 or 3 and two unneed files + # https://linuxfromscratch.org/blfs/view/systemd/multimedia/alsa-tools.html + rm -rf qlo10k1 Makefile gitcompile + + c_dirs=(as10k1 hdajackretask hdspconf hwmixvolume seq/sbiload pcxhrloader usx2yloader echomixer hdajacksensetest hdsploader ld10k1 rmedigicontrol sscape_ctl vxloader envy24control hda-verb hdspmixer mixartloader sb16_csp us428control) + + shopt -s globstar + for d in ${c_dirs[@]} ; do + cd "$d" + echo " " + pwd + ./configure --prefix=/usr + make + cd $srcdir/$pkgname-$pkgver + done + +} + +package() { + cd $pkgname-$pkgver + + c_dirs=(as10k1 hdajackretask hdspconf hwmixvolume seq/sbiload pcxhrloader usx2yloader echomixer hdajacksensetest hdsploader ld10k1 rmedigicontrol sscape_ctl vxloader envy24control hda-verb hdspmixer mixartloader sb16_csp us428control) + + shopt -s globstar + for d in ${c_dirs[@]} ; do + cd "$d" + make DESTDIR=$pkgdir install + cd $srcdir/$pkgname-$pkgver + done +} diff --git a/x86_64/extra/alsa-topology-conf/PKGBUILD b/x86_64/extra/alsa-topology-conf/PKGBUILD new file mode 100644 index 0000000..1be8a95 --- /dev/null +++ b/x86_64/extra/alsa-topology-conf/PKGBUILD @@ -0,0 +1,12 @@ +pkgname=alsa-topology-conf +pkgver=1.2.5.1 +pkgrel=1 +arch=(x86_64) +source=("https://www.alsa-project.org/files/pub/lib/${pkgname}-${pkgver}.tar.bz2") + +package() { + cd "${pkgname}-${pkgver}" + for dir in topology/*; do + install -vDm 644 "${dir}"/*.conf -t "$pkgdir/usr/share/alsa/topology/$(basename $dir)" + done +} diff --git a/x86_64/extra/alsa-ucm-conf/PKGBUILD b/x86_64/extra/alsa-ucm-conf/PKGBUILD new file mode 100644 index 0000000..e7af1e4 --- /dev/null +++ b/x86_64/extra/alsa-ucm-conf/PKGBUILD @@ -0,0 +1,11 @@ +pkgname=alsa-ucm-conf +pkgver=1.2.6.3 +pkgrel=1 +arch=(x86_64) +source=("https://www.alsa-project.org/files/pub/lib/${pkgname}-${pkgver}.tar.bz2") + +package() { + cd "${pkgname}-${pkgver}" + install -vdm 755 "${pkgdir}/usr/share/alsa/" + cp -av ucm2 "${pkgdir}/usr/share/alsa/" +} diff --git a/x86_64/extra/alsa-utils/PKGBUILD b/x86_64/extra/alsa-utils/PKGBUILD new file mode 100644 index 0000000..6ff8b25 --- /dev/null +++ b/x86_64/extra/alsa-utils/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=alsa-utils +pkgver=1.2.6 +pkgrel=1 +arch=('x86_64') +depends=(alsa-lib) +source=(https://alsa-project.org/files/pub/utils/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --with-curses=ncursesw + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/amdvlk/PKGBUILD b/x86_64/extra/amdvlk/PKGBUILD new file mode 100644 index 0000000..6c4d105 --- /dev/null +++ b/x86_64/extra/amdvlk/PKGBUILD @@ -0,0 +1,44 @@ +pkgname=amdvlk +pkgver=2022.Q2.3 +pkgrel=1 +arch=(x86_64) +makedepends=('perl-modules' 'python3' 'wayland' 'libxrandr' + 'xorg-server' 'cmake' 'ninja' 'git' 'clang' 'python2' 'lld' 'repo') +options=('!lto') + +prepare() { + mkdir -p amdvlk && cd amdvlk + + repo init -u https://github.com/GPUOpen-Drivers/AMDVLK.git -b refs/tags/v-$pkgver + + repo sync --force-sync --no-clone-bundle --no-tags +} + +build() { + cd $srcdir/amdvlk/drivers/spvgen/external + python2 fetch_external_sources.py + + cd $srcdir/amdvlk/drivers + + # use lld and clang to fix linking error + # https://github.com/GPUOpen-Drivers/llpc/issues/1645 + cmake -H. -B builds/Release64 -S xgl \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_C_COMPILER=clang \ + -D CMAKE_CXX_COMPILER=clang++ \ + -D LLVM_USE_LINKER=lld \ + -D CMAKE_EXE_LINKER_FLAGS='-fuse-ld=lld' \ + -D CMAKE_SHARED_LINKER_FLAGS='-fuse-ld=lld' \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_WAYLAND_SUPPORT=ON \ + -G Ninja + + ninja -C builds/Release64 +} + +package() { + DESTDIR=$pkgdir ninja install -C amdvlk/drivers/builds/Release64 + + # Remove included home dir + rm -rf $pkgdir/home +} diff --git a/x86_64/extra/appstream/PKGBUILD b/x86_64/extra/appstream/PKGBUILD new file mode 100644 index 0000000..bdfa1f3 --- /dev/null +++ b/x86_64/extra/appstream/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=appstream +pkgver=0.15.2 +pkgrel=2 +arch=(x86_64) +depends=(curl qt5 librsvg yaml libxmlb libsoup nghttp2) +makedepends=(meson xmlto gobject-introspection gtk-doc qt5 itstool vala gperf) +source=(https://www.freedesktop.org/software/appstream/releases/AppStream-$pkgver.tar.xz + update-appstream-cache.hook) + +build() { + meson build AppStream-$pkgver \ + --prefix=/usr \ + --libexecdir=lib \ + -Dqt=true \ + -Dvapi=true \ + -Dcompose=true + + meson compile -C build +} + +package() { + meson install --destdir "$pkgdir" -C build + + install -Dm644 update-appstream-cache.hook "$pkgdir"/usr/share/libalpm/hooks/90-update-appstream-cache.hook +} diff --git a/x86_64/extra/appstream/update-appstream-cache.hook b/x86_64/extra/appstream/update-appstream-cache.hook new file mode 100644 index 0000000..d73dff8 --- /dev/null +++ b/x86_64/extra/appstream/update-appstream-cache.hook @@ -0,0 +1,17 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/share/app-info/* + +[Trigger] +Type = Package +Operation = Install +Operation = Upgrade +Target = appstream + +[Action] +Description = Updating the appstream cache... +When = PostTransaction +Exec = /usr/bin/appstreamcli refresh-cache --force diff --git a/x86_64/extra/apr-util/PKGBUILD b/x86_64/extra/apr-util/PKGBUILD new file mode 100644 index 0000000..2762d2b --- /dev/null +++ b/x86_64/extra/apr-util/PKGBUILD @@ -0,0 +1,39 @@ +pkgname=apr-util +pkgver=1.6.1 +pkgrel=1 +arch=(x86_64) +depends=(apr expat) +makedepends=(openldap gdbm openssl nss sqlite3 python3) +source=(https://www.apache.org/dist/apr/apr-util-${pkgver}.tar.bz2 + https://github.com/archlinux/svntogit-packages/raw/packages/apr-util/trunk/buildconf_config.guess_sub_location.patch) + +prepare() { + cd $pkgname-$pkgver + + patch -Np1 < ../buildconf_config.guess_sub_location.patch + + ./buildconf --with-apr=`apr-1-config --srcdir` +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --with-apr=/usr \ + --with-ldap \ + --with-crypto \ + --with-gdbm=/usr \ + --with-sqlite3 \ + --with-nss=/usr \ + --with-odbc=/usr \ + --with-openssl=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/apr-util/buildconf_config.guess_sub_location.patch b/x86_64/extra/apr-util/buildconf_config.guess_sub_location.patch new file mode 100644 index 0000000..c89bef9 --- /dev/null +++ b/x86_64/extra/apr-util/buildconf_config.guess_sub_location.patch @@ -0,0 +1,22 @@ +From: Tollef Fog Heen +Subject: Adjust path of config.guess and config.sub + +--- + buildconf | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Index: trunk/buildconf +=================================================================== +--- trunk.orig/buildconf ++++ trunk/buildconf +@@ -61,8 +61,8 @@ + rm -f build/apr_common.m4 build/find_apr.m4 build/install.sh \ + build/config.guess build/config.sub build/get-version.sh + cp -p $apr_src_dir/build/apr_common.m4 $apr_src_dir/build/find_apr.m4 \ +- $apr_src_dir/build/install.sh $apr_src_dir/build/config.guess \ +- $apr_src_dir/build/config.sub $apr_src_dir/build/get-version.sh \ ++ $apr_src_dir/build/install.sh /usr/share/libtool/build-aux/config.guess \ ++ /usr/share/libtool/build-aux/config.sub $apr_src_dir/build/get-version.sh \ + build/ + + # Remove aclocal.m4 as it'll break some builds... diff --git a/x86_64/extra/apr/PKGBUILD b/x86_64/extra/apr/PKGBUILD new file mode 100644 index 0000000..f9ee147 --- /dev/null +++ b/x86_64/extra/apr/PKGBUILD @@ -0,0 +1,44 @@ +pkgname=apr +pkgver=1.7.0 +pkgrel=1 +arch=(x86_64) +depends=(util-linux) +makedepends=(python3) +source=(https://dlcdn.apache.org/apr/apr-$pkgver.tar.bz2 + https://github.com/archlinux/svntogit-packages/raw/packages/apr/trunk/fix-apr.pc.patch + https://github.com/archlinux/svntogit-packages/raw/packages/apr/trunk/fix_apr-config.patch + https://github.com/archlinux/svntogit-packages/raw/packages/apr/trunk/omit_extra_libs.patch + https://github.com/archlinux/svntogit-packages/raw/packages/apr/trunk/ship_find_apr.m4.patch + fix_autoconf_270.patch::https://github.com/apache/apr/commit/0a763c5e500f4304b7c534fae0fad430d64982e8.patch) + +prepare() { + cd $pkgname-$pkgver + + patch -Np1 -i ../fix_apr-config.patch + patch -Np1 -i ../ship_find_apr.m4.patch + patch -Np1 -i ../fix-apr.pc.patch + patch -Np1 -i ../omit_extra_libs.patch + patch -Np1 -i ../fix_autoconf_270.patch # FS#71783 + + ./buildconf +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --includedir=/usr/include/apr-1 \ + --with-installbuilddir=/usr/share/apr-1/build \ + --enable-nonportable-atomics \ + --with-devrandom=/dev/urandom + + make + +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/apr/fix-apr.pc.patch b/x86_64/extra/apr/fix-apr.pc.patch new file mode 100644 index 0000000..890b514 --- /dev/null +++ b/x86_64/extra/apr/fix-apr.pc.patch @@ -0,0 +1,20 @@ +From: +Subject: No description. + +--- + apr.pc.in | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +Index: apr/apr.pc.in +=================================================================== +--- apr.orig/apr.pc.in ++++ apr/apr.pc.in +@@ -7,5 +7,6 @@ + Name: APR + Description: The Apache Portable Runtime library + Version: @APR_DOTTED_VERSION@ +-Libs: -L${libdir} -l@APR_LIBNAME@ @EXTRA_LIBS@ +-Cflags: @EXTRA_CPPFLAGS@ @EXTRA_CFLAGS@ -I${includedir} ++Libs: -L${libdir} -l@APR_LIBNAME@ ++Libs.private: @EXTRA_LIBS@ ++Cflags: @EXTRA_CPPFLAGS@ -I${includedir} diff --git a/x86_64/extra/apr/fix_apr-config.patch b/x86_64/extra/apr/fix_apr-config.patch new file mode 100644 index 0000000..51b4aa3 --- /dev/null +++ b/x86_64/extra/apr/fix_apr-config.patch @@ -0,0 +1,33 @@ +From: +Subject: No description. + +--- + apr-config.in | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +Index: apr/apr-config.in +=================================================================== +--- apr.orig/apr-config.in ++++ apr/apr-config.in +@@ -39,7 +39,7 @@ + LIBS="@EXTRA_LIBS@" + EXTRA_INCLUDES="@EXTRA_INCLUDES@" + SHLIBPATH_VAR="@shlibpath_var@" +-APR_SOURCE_DIR="@apr_srcdir@" ++APR_SOURCE_DIR="$(cd @installbuilddir@/.. ; pwd)" + APR_BUILD_DIR="@apr_builddir@" + APR_SO_EXT="@so_ext@" + APR_LIB_TARGET="@export_lib_target@" +@@ -223,11 +223,7 @@ + exit 0 + ;; + --apr-libtool) +- if test "$location" = "installed"; then +- echo "${installbuilddir}/libtool" +- else +- echo "$APR_BUILD_DIR/libtool" +- fi ++ echo "$installbuilddir/libtool" + exit 0 + ;; + --help) diff --git a/x86_64/extra/apr/fix_autoconf_270.patch b/x86_64/extra/apr/fix_autoconf_270.patch new file mode 100644 index 0000000..baadd6b --- /dev/null +++ b/x86_64/extra/apr/fix_autoconf_270.patch @@ -0,0 +1,63 @@ +From 0a763c5e500f4304b7c534fae0fad430d64982e8 Mon Sep 17 00:00:00 2001 +From: Yann Ylavic +Date: Sat, 6 Mar 2021 22:20:59 +0000 +Subject: [PATCH] build/apr_common.m4: avoid explicit inclusion of "confdefs.h" + +The failure is observed on `autoconf-2.69d` (soon to be released +as `autoconf-2.70`). There `int64_t` detection fails as: + +$ autoreconf && ./configure +checking whether int64_t and int use fmt %d... no +checking whether int64_t and long use fmt %ld... no +checking whether int64_t and long long use fmt %lld... no +configure: error: could not determine the string function for int64_t +``` + +This happens because `./configure` always stumbles on warning: + +configure:3350: gcc -c -g -O2 -Werror conftest.c >&5 +In file included from conftest.c:31: +confdefs.h:22: error: "__STDC_WANT_IEC_60559_ATTRIBS_EXT__" redefined [-Werror] + 22 | #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 + | + +It's triggered by double inclusion of `"confdefs.h"` contents: +explicitly in `APR_TRY_COMPILE_NO_WARNING` macro and implicitly +via `AC_LANG_SOURCE` use. + +To fix it and avoid having to define `main()` declaration the change +uses `AC_LANG_PROGRAM` instead. + +Tested on both `autoconf-2.69` and `autoconf-2.69d`. + + +Github: closes #25 +Submitted by: Sergei Trofimovich +Reviewed by: ylavic + + +git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1887279 13f79535-47bb-0310-9956-ffa450edef68 +--- + build/apr_common.m4 | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +diff --git a/build/apr_common.m4 b/build/apr_common.m4 +index 3dfe85542b7..67d004983d2 100644 +--- a/build/apr_common.m4 ++++ b/build/apr_common.m4 +@@ -467,13 +467,9 @@ AC_DEFUN([APR_TRY_COMPILE_NO_WARNING], + CFLAGS="$CFLAGS -Werror" + fi + AC_COMPILE_IFELSE( +- [AC_LANG_SOURCE( +- [#include "confdefs.h" +- ] +- [[$1]] +- [int main(int argc, const char *const *argv) {] ++ [AC_LANG_PROGRAM( ++ [[$1]], + [[$2]] +- [ return 0; }] + )], [CFLAGS=$apr_save_CFLAGS + $3], [CFLAGS=$apr_save_CFLAGS + $4]) diff --git a/x86_64/extra/apr/omit_extra_libs.patch b/x86_64/extra/apr/omit_extra_libs.patch new file mode 100644 index 0000000..524602e --- /dev/null +++ b/x86_64/extra/apr/omit_extra_libs.patch @@ -0,0 +1,20 @@ +From: Stefan Fritsch +Subject: #463399 + +--- + apr-config.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: apr/apr-config.in +=================================================================== +--- apr.orig/apr-config.in ++++ apr/apr-config.in +@@ -36,7 +36,7 @@ + CPPFLAGS="@EXTRA_CPPFLAGS@" + CFLAGS="@EXTRA_CFLAGS@" + LDFLAGS="@EXTRA_LDFLAGS@" +-LIBS="@EXTRA_LIBS@" ++LIBS="" + EXTRA_INCLUDES="@EXTRA_INCLUDES@" + SHLIBPATH_VAR="@shlibpath_var@" + APR_SOURCE_DIR="$(cd @installbuilddir@/.. ; pwd)" diff --git a/x86_64/extra/apr/ship_find_apr.m4.patch b/x86_64/extra/apr/ship_find_apr.m4.patch new file mode 100644 index 0000000..0393970 --- /dev/null +++ b/x86_64/extra/apr/ship_find_apr.m4.patch @@ -0,0 +1,25 @@ +From: Tollef Fog Heen +Subject: Install a set of random build files too + +--- + Makefile.in | 9 +++++++++ + 1 file changed, 9 insertions(+) + +--- apr.orig/Makefile.in ++++ apr/Makefile.in +@@ -92,6 +92,15 @@ install: $(TARGETS) + done + $(INSTALL_DATA) build/apr_rules.out $(DESTDIR)$(installbuilddir)/apr_rules.mk + $(INSTALL) -m 755 apr-config.out $(DESTDIR)$(bindir)/$(APR_CONFIG) ++ ++ if [ ! -d $(DESTDIR)$(installbuilddir) ]; then \ ++ $(top_srcdir)/build/mkdir.sh $(DESTDIR)$(installbuilddir); \ ++ fi ++ for file in find_apr.m4 apr_common.m4 install.sh gen-build.py get-version.sh ; do \ ++ $(LIBTOOL) --mode=install cp $(top_srcdir)/build/$$file \ ++ $(DESTDIR)$(installbuilddir)/$$file ; \ ++ done ++ + @if [ $(INSTALL_SUBDIRS) != "none" ]; then \ + for i in $(INSTALL_SUBDIRS); do \ + ( cd $$i ; $(MAKE) DESTDIR=$(DESTDIR) install ); \ diff --git a/x86_64/extra/at-spi2-atk/PKGBUILD b/x86_64/extra/at-spi2-atk/PKGBUILD new file mode 100644 index 0000000..67d483e --- /dev/null +++ b/x86_64/extra/at-spi2-atk/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=at-spi2-atk +pkgver=2.38.0 +pkgrel=1 +arch=('x86_64') +depends=(atk at-spi2-core) +source=(https://download.gnome.org/sources/$pkgname/2.38/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + mkdir -p build && cd build + meson --prefix=/usr --libdir=/usr/lib --buildtype=release .. + ninja +} + +package() { + cd $pkgname-$pkgver/build + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/at-spi2-core/PKGBUILD b/x86_64/extra/at-spi2-core/PKGBUILD new file mode 100644 index 0000000..bc8675c --- /dev/null +++ b/x86_64/extra/at-spi2-core/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=at-spi2-core +pkgver=2.40.3 +pkgrel=1 +arch=('x86_64') +depends=(dbus glib2 libx11 libxtst) +source=(https://download.gnome.org/sources/$pkgname/2.40/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + mkdir -p build && cd build + meson --prefix=/usr --libdir=/usr/lib --buildtype=release .. + ninja +} + +package() { + cd $pkgname-$pkgver/build + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/atk/PKGBUILD b/x86_64/extra/atk/PKGBUILD new file mode 100644 index 0000000..562d740 --- /dev/null +++ b/x86_64/extra/atk/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=atk +pkgver=2.36.0 +pkgrel=1 +arch=('x86_64') +depends=(glib2) +makedepends=(gobject-introspection gtk-doc) +source=(https://download.gnome.org/sources/$pkgname/2.36/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + mkdir -p build && cd build + meson --prefix=/usr --libdir=/usr/lib --buildtype=release .. + ninja +} + +package() { + cd $pkgname-$pkgver/build + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/atkmm/PKGBUILD b/x86_64/extra/atkmm/PKGBUILD new file mode 100644 index 0000000..845cd9d --- /dev/null +++ b/x86_64/extra/atkmm/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=atkmm +pkgver=2.28.2 +pkgrel=1 +arch=('x86_64') +depends=(atk glibmm) +source=(https://download.gnome.org/sources/$pkgname/2.28/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + meson \ + --prefix=/usr \ + --buildtype=release \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/autoconf-archive/PKGBUILD b/x86_64/extra/autoconf-archive/PKGBUILD new file mode 100644 index 0000000..cd90905 --- /dev/null +++ b/x86_64/extra/autoconf-archive/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=autoconf-archive +pkgver=2021.02.19 +pkgrel=1 +pkgdesc="A collection of freely re-usable Autoconf macros" +arch=('x86_64') +url="https://www.gnu.org/software/autoconf-archive/" +depends=('autoconf') +source=("https://ftpmirror.gnu.org/${pkgname}/${pkgname}-${pkgver}.tar.xz"{,.sig} + "revert.patch::https://github.com/autoconf-archive/autoconf-archive/commit/59008cc7f85e1982eb298e1c424c2e6ad5942c4a.patch") + +prepare() { + cd "${pkgname}-${pkgver}" + patch -Np1 < "$srcdir/revert.patch" +} + +build() { + cd ${pkgname}-${pkgver} + + ./configure --prefix=/usr + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install +} diff --git a/x86_64/extra/autoconf-archive/revert.patch b/x86_64/extra/autoconf-archive/revert.patch new file mode 100644 index 0000000..bb5f729 --- /dev/null +++ b/x86_64/extra/autoconf-archive/revert.patch @@ -0,0 +1,71 @@ +From 59008cc7f85e1982eb298e1c424c2e6ad5942c4a Mon Sep 17 00:00:00 2001 +From: David Seifert +Date: Sat, 12 Jun 2021 22:29:03 +0200 +Subject: [PATCH] Revert "AX_PTHREAD: target > host" + +This reverts commit 2567e0ce0f3a11b535c6b527386197fb49ff172b. + +* `AC_CANONICAL_HOST` is the system on which the actual binary will run, + `AC_CANONICAL_TARGET` is the system for which code is generated. The + Autoconf manual even mentions that + + --target=target-type + the type of system for which any compiler tools in the package produce code (**rarely needed**). +--- + m4/ax_pthread.m4 | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/m4/ax_pthread.m4 b/m4/ax_pthread.m4 +index e5858e50..9f35d139 100644 +--- a/m4/ax_pthread.m4 ++++ b/m4/ax_pthread.m4 +@@ -87,11 +87,11 @@ + # modified version of the Autoconf Macro, you may extend this special + # exception to the GPL to apply to your modified version as well. + +-#serial 30 ++#serial 31 + + AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) + AC_DEFUN([AX_PTHREAD], [ +-AC_REQUIRE([AC_CANONICAL_TARGET]) ++AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_PROG_SED]) + AC_LANG_PUSH([C]) +@@ -158,7 +158,7 @@ ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread -- + # --thread-safe: KAI C++ + # pthread-config: use pthread-config program (for GNU Pth library) + +-case $target_os in ++case $host_os in + + freebsd*) + +@@ -248,7 +248,7 @@ AS_IF([test "x$ax_pthread_clang" = "xyes"], + # definitions is, on some systems, a strong hint that pthreads support is + # correctly enabled + +-case $target_os in ++case $host_os in + darwin* | hpux* | linux* | osf* | solaris*) + ax_pthread_check_macro="_REENTRANT" + ;; +@@ -450,7 +450,7 @@ if test "x$ax_pthread_ok" = "xyes"; then + AC_CACHE_CHECK([whether more special flags are required for pthreads], + [ax_cv_PTHREAD_SPECIAL_FLAGS], + [ax_cv_PTHREAD_SPECIAL_FLAGS=no +- case $target_os in ++ case $host_os in + solaris*) + ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS" + ;; +@@ -480,7 +480,7 @@ if test "x$ax_pthread_ok" = "xyes"; then + + # More AIX lossage: compile with *_r variant + if test "x$GCC" != "xyes"; then +- case $target_os in ++ case $host_os in + aix*) + AS_CASE(["x/$CC"], + [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], diff --git a/x86_64/extra/autoconf/PKGBUILD b/x86_64/extra/autoconf/PKGBUILD new file mode 100644 index 0000000..490c6c6 --- /dev/null +++ b/x86_64/extra/autoconf/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=autoconf +pkgver=2.71 +arch=('x86_64') +pkgrel=2 +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz + autoconf-2.13-consolidated_fixes-1.patch) + +build() { + cd $pkgname-$pkgver + + #patch -Np1 -i ../autoconf-2.13-consolidated_fixes-1.patch + + #mv -v autoconf.texi autoconf213.texi + #rm autoconf.info + + ./configure --prefix=/usr + make +} +package() { + cd $pkgname-$pkgver + make prefix=$pkgdir install + + mkdir $pkgdir/usr + cp -rf $pkgdir/bin $pkgdir/usr/bin + mv $pkgdir/share $pkgdir/usr + rm -rf $pkgdir/bin + #mkdir -p $pkgdir/usr/share/info + #install -v -m644 autoconf213.info $pkgdir/usr/share/info +} diff --git a/x86_64/extra/autoconf/autoconf-2.13-consolidated_fixes-1.patch b/x86_64/extra/autoconf/autoconf-2.13-consolidated_fixes-1.patch new file mode 100644 index 0000000..fba36c9 --- /dev/null +++ b/x86_64/extra/autoconf/autoconf-2.13-consolidated_fixes-1.patch @@ -0,0 +1,504 @@ +Submitted By: Ken Moffat +Date: 2016-06-11 +Initial Package Version: 2.13 +Upstream Status: Version is historic and unmaintained. +Origin: Found at fedora, plus fixes for LFS. +Description: All of the patches currently used by fedora, except for +the patch which ensures gawk is used in preference to mawk (we do not +install mawk). For LFS: we put mktemp in /usr/bin not /bin, remove +the install-info target because that will overwrite standards.info +with an old version (fedora always use a DESTDIR), and change the +man and info dirs to ${datadir}/ i.e. /usr/share (an empty /usr/info +will otherwise be created). + +diff -Naur a/acgeneral.m4 b/acgeneral.m4 +--- a/acgeneral.m4 1999-01-05 13:27:37.000000000 +0000 ++++ b/acgeneral.m4 2016-06-11 00:18:24.429043947 +0100 +@@ -1817,10 +1817,6 @@ + [cat > conftest.$ac_ext </dev/null +@@ -1988,12 +1984,12 @@ + AC_MSG_CHECKING(size of $1) + AC_CACHE_VAL(AC_CV_NAME, + [AC_TRY_RUN([#include +-main() ++int main() + { + FILE *f=fopen("conftestval", "w"); +- if (!f) exit(1); ++ if (!f) return(1); + fprintf(f, "%d\n", sizeof($1)); +- exit(0); ++ return(0); + }], AC_CV_NAME=`cat conftestval`, AC_CV_NAME=0, ifelse([$2], , , AC_CV_NAME=$2))])dnl + AC_MSG_RESULT($AC_CV_NAME) + AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME) +@@ -2160,20 +2156,38 @@ + dnl AC_OUTPUT_MAKE_DEFS() + define(AC_OUTPUT_MAKE_DEFS, + [# Transform confdefs.h into DEFS. +-dnl Using a here document instead of a string reduces the quoting nightmare. + # Protect against shell expansion while executing Makefile rules. + # Protect against Makefile macro expansion. +-cat > conftest.defs <<\EOF ++# ++# If the first sed substitution is executed (which looks for macros that ++# take arguments), then we branch to the quote section. Otherwise, ++# look for a macro that doesn't take arguments. ++cat >confdef2opt.sed <<\_ACEOF + changequote(<<, >>)dnl +-s%<<#define>> \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g +-s%[ `~<<#>>$^&*(){}\\|;'"<>?]%\\&%g +-s%\[%\\&%g +-s%\]%\\&%g +-s%\$%$$%g ++t clear ++: clear ++s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g ++t quote ++s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g ++t quote ++d ++: quote ++s,[ `~#$^&*(){}\\|;'"<>?],\\&,g ++s,\[,\\&,g ++s,\],\\&,g ++s,\$,$$,g ++p + changequote([, ])dnl +-EOF +-DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` +-rm -f conftest.defs ++_ACEOF ++# We use echo to avoid assuming a particular line-breaking character. ++# The extra dot is to prevent the shell from consuming trailing ++# line-breaks from the sub-command output. A line-break within ++# single-quotes doesn't work because, if this script is created in a ++# platform that uses two characters for line-breaks (e.g., DOS), tr ++# would break. ++ac_LF_and_DOT=`echo; echo .` ++DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` ++rm -f confdef2opt.sed + ]) + + dnl Do the variable substitutions to create the Makefiles or whatever. +diff -Naur a/acspecific.m4 b/acspecific.m4 +--- a/acspecific.m4 1999-01-05 13:27:52.000000000 +0000 ++++ b/acspecific.m4 2016-06-11 00:18:17.533078644 +0100 +@@ -152,8 +152,41 @@ + CXXFLAGS= + fi + fi ++ ++AC_PROG_CXX_EXIT_DECLARATION + ]) + ++ ++# AC_PROG_CXX_EXIT_DECLARATION ++# ----------------------------- ++# Find a valid prototype for exit and declare it in confdefs.h. ++AC_DEFUN(AC_PROG_CXX_EXIT_DECLARATION, ++[for ac_declaration in \ ++ ''\ ++ '#include ' \ ++ 'extern "C" void std::exit (int) throw (); using std::exit;' \ ++ 'extern "C" void std::exit (int); using std::exit;' \ ++ 'extern "C" void exit (int) throw ();' \ ++ 'extern "C" void exit (int);' \ ++ 'void exit (int);' ++do ++ AC_TRY_COMPILE([#include ++$ac_declaration], ++ [exit (42);], ++ [], ++ [continue]) ++ AC_TRY_COMPILE([$ac_declaration], ++ [exit (42);], ++ [break]) ++done ++if test -n "$ac_declaration"; then ++ echo '#ifdef __cplusplus' >>confdefs.h ++ echo $ac_declaration >>confdefs.h ++ echo '#endif' >>confdefs.h ++fi ++])# AC_PROG_CXX_EXIT_DECLARATION ++ ++ + dnl Determine a Fortran 77 compiler to use. If `F77' is not already set + dnl in the environment, check for `g77', `f77' and `f2c', in that order. + dnl Set the output variable `F77' to the name of the compiler found. +@@ -1010,7 +1043,7 @@ + ]) + + AC_DEFUN(AC_FUNC_MMAP, +-[AC_CHECK_HEADERS(unistd.h) ++[AC_CHECK_HEADERS(stdlib.h unistd.h sys/stat.h sys/types.h) + AC_CHECK_FUNCS(getpagesize) + AC_CACHE_CHECK(for working mmap, ac_cv_func_mmap_fixed_mapped, + [AC_TRY_RUN([ +@@ -1039,11 +1072,24 @@ + #include + #include + ++#if HAVE_SYS_TYPES_H ++# include ++#endif ++ ++#if HAVE_STDLIB_H ++# include ++#endif ++ ++#if HAVE_SYS_STAT_H ++# include ++#endif ++ ++#if HAVE_UNISTD_H ++# include ++#endif ++ + /* This mess was copied from the GNU getpagesize.h. */ + #ifndef HAVE_GETPAGESIZE +-# ifdef HAVE_UNISTD_H +-# include +-# endif + + /* Assume that all systems that can run configure have sys/param.h. */ + # ifndef HAVE_SYS_PARAM_H +@@ -1373,6 +1419,8 @@ + r.ru_majflt = r.ru_minflt = 0; + switch (fork()) { + case 0: /* Child. */ ++ /* Unless we actually _do_ something, the kernel sometimes doesn't chalk up any system time to this process. */ ++ if(fork()) { i = 123; wait(NULL); } else { i = 234; exit(0); } + sleep(1); /* Give up the CPU. */ + _exit(0); + case -1: _exit(0); /* What can we do? */ +diff -Naur a/autoconf.sh b/autoconf.sh +--- a/autoconf.sh 1999-01-05 13:27:53.000000000 +0000 ++++ b/autoconf.sh 2016-06-11 00:22:17.351872133 +0100 +@@ -45,20 +45,20 @@ + esac + + : ${TMPDIR=/tmp} +-tmpout=${TMPDIR}/acout.$$ ++tmpout=`/usr/bin/mktemp ${TMPDIR}/acout.XXXXXX` + localdir= + show_version=no + + while test $# -gt 0 ; do + case "${1}" in + -h | --help | --h* ) +- echo "${usage}" 1>&2; exit 0 ;; ++ echo "${usage}" 1>&2; rm -f $tmpout ; exit 0 ;; + --localdir=* | --l*=* ) + localdir="`echo \"${1}\" | sed -e 's/^[^=]*=//'`" + shift ;; + -l | --localdir | --l*) + shift +- test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } ++ test $# -eq 0 && { echo "${usage}" 1>&2; rm -f $tmpout; exit 1; } + localdir="${1}" + shift ;; + --macrodir=* | --m*=* ) +@@ -66,7 +66,7 @@ + shift ;; + -m | --macrodir | --m* ) + shift +- test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } ++ test $# -eq 0 && { echo "${usage}" 1>&2; rm -f $tmpout; exit 1; } + AC_MACRODIR="${1}" + shift ;; + --version | --v* ) +@@ -76,7 +76,7 @@ + - ) # Use stdin as input. + break ;; + -* ) +- echo "${usage}" 1>&2; exit 1 ;; ++ echo "${usage}" 1>&2; rm -f $tmpout; exit 1 ;; + * ) + break ;; + esac +@@ -86,23 +86,25 @@ + version=`sed -n 's/define.AC_ACVERSION.[ ]*\([0-9.]*\).*/\1/p' \ + $AC_MACRODIR/acgeneral.m4` + echo "Autoconf version $version" ++ rm -f $tmpout + exit 0 + fi + + case $# in + 0) infile=configure.in ;; + 1) infile="$1" ;; +- *) echo "$usage" >&2; exit 1 ;; ++ *) echo "$usage" >&2; rm -f $tmpout; exit 1 ;; + esac + + trap 'rm -f $tmpin $tmpout; exit 1' 1 2 15 + +-tmpin=${TMPDIR}/acin.$$ # Always set this, to avoid bogus errors from some rm's. ++tmpin=`/usr/bin/mktemp ${TMPDIR}/acin.XXXXXX` ++# Always set this, to avoid bogus errors from some rm's. + if test z$infile = z-; then + infile=$tmpin +- cat > $infile + elif test ! -r "$infile"; then + echo "autoconf: ${infile}: No such file or directory" >&2 ++ rm -f $tmpin $tmpout + exit 1 + fi + +@@ -111,6 +113,8 @@ + else + use_localdir= + fi ++# Make sure we don't leave those around - they are annoying ++trap 'rm -f $tmpin $tmpout' 0 + + # Use the frozen version of Autoconf if available. + r= f= +@@ -118,7 +122,7 @@ + case `$M4 --help < /dev/null 2>&1` in + *reload-state*) test -r $AC_MACRODIR/autoconf.m4f && { r=--reload f=f; } ;; + *traditional*) ;; +-*) echo Autoconf requires GNU m4 1.1 or later >&2; rm -f $tmpin; exit 1 ;; ++*) echo Autoconf requires GNU m4 1.1 or later >&2; rm -f $tmpin $tmpout; exit 1 ;; + esac + + $M4 -I$AC_MACRODIR $use_localdir $r autoconf.m4$f $infile > $tmpout || +@@ -154,6 +158,6 @@ + /__oline__/s/^\([0-9][0-9]*\):\(.*\)__oline__/\2\1/ + ' >&4 + +-rm -f $tmpout ++rm -f $tmpout $tmpin + + exit $status +diff -Naur a/autoconf.texi b/autoconf.texi +--- a/autoconf.texi 1999-01-05 13:28:37.000000000 +0000 ++++ b/autoconf.texi 2016-06-11 00:18:46.360933604 +0100 +@@ -1,7 +1,7 @@ + \input texinfo @c -*-texinfo-*- + @c %**start of header +-@setfilename autoconf.info +-@settitle Autoconf ++@setfilename autoconf213.info ++@settitle Autoconf-2.13 + @c For double-sided printing, uncomment: + @c @setchapternewpage odd + @c %**end of header +@@ -17,7 +17,8 @@ + @ifinfo + @format + START-INFO-DIR-ENTRY +-* Autoconf: (autoconf). Create source code configuration scripts. ++* Autoconf213: (autoconf213). Create source code configuration scripts. ++ This is a legacy version of autoconf. + END-INFO-DIR-ENTRY + @end format + +diff -Naur a/autoheader.sh b/autoheader.sh +--- a/autoheader.sh 1999-01-05 13:28:39.000000000 +0000 ++++ b/autoheader.sh 2016-06-11 00:22:17.351872133 +0100 +@@ -194,9 +194,9 @@ + # Some fgrep's have limits on the number of lines that can be in the + # pattern on the command line, so use a temporary file containing the + # pattern. +- (fgrep_tmp=${TMPDIR-/tmp}/autoh$$ ++ (fgrep_tmp=`/usr/bin/mktemp ${TMPDIR-/tmp}/autoh$$.XXXXXX` + trap "rm -f $fgrep_tmp; exit 1" 1 2 15 +- cat > $fgrep_tmp <> $fgrep_tmp <&2; exit 0 ;; ++ echo "${usage}" 1>&2; rm -f $sedtmp; exit 0 ;; + --macrodir=* | --m*=* ) + AC_MACRODIR="`echo \"${1}\" | sed -e 's/^[^=]*=//'`" + shift ;; + -m | --macrodir | --m* ) + shift +- test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } ++ test $# -eq 0 && { echo "${usage}" 1>&2; rm -f $sedtmp; exit 1; } + AC_MACRODIR="${1}" + shift ;; + --version | --versio | --versi | --vers) +@@ -51,7 +51,7 @@ + - ) # Use stdin as input. + break ;; + -* ) +- echo "${usage}" 1>&2; exit 1 ;; ++ echo "${usage}" 1>&2; rm -f $sedtmp; exit 1 ;; + * ) + break ;; + esac +@@ -61,6 +61,7 @@ + version=`sed -n 's/define.AC_ACVERSION.[ ]*\([0-9.]*\).*/\1/p' \ + $AC_MACRODIR/acgeneral.m4` + echo "Autoconf version $version" ++ rm -f $sedtmp + exit 0 + fi + +@@ -68,6 +69,7 @@ + + tmpout=acupo.$$ + trap 'rm -f $sedtmp $tmpout; exit 1' 1 2 15 ++trap 'rm -f $sedtmp' 0 + case $# in + 0) infile=configure.in; out="> $tmpout" + # Make sure $infile can be read, and $tmpout has the same permissions. +diff -Naur a/configure b/configure +--- a/configure 1999-01-05 13:28:57.000000000 +0000 ++++ b/configure 2016-06-11 00:50:57.771231914 +0100 +@@ -43,8 +43,8 @@ + libdir='${exec_prefix}/lib' + includedir='${prefix}/include' + oldincludedir='/usr/include' +-infodir='${prefix}/info' +-mandir='${prefix}/man' ++infodir='${datadir}/info' ++mandir='${datadir}/man' + + # Initialize some other variables. + subdirs= +diff -Naur a/Makefile.in b/Makefile.in +--- a/Makefile.in 1999-01-05 13:27:16.000000000 +0000 ++++ b/Makefile.in 2016-06-11 00:29:34.005678107 +0100 +@@ -49,7 +49,7 @@ + + # Directory in which to install library files. + datadir = @datadir@ +-acdatadir = $(datadir)/autoconf ++acdatadir = $(datadir)/autoconf-2.13 + + # Directory in which to install documentation info files. + infodir = @infodir@ +@@ -68,8 +68,8 @@ + DISTFILES = AUTHORS COPYING ChangeLog ChangeLog.1 INSTALL \ + Makefile.in NEWS README TODO $(M4FILES) \ + acconfig.h acfunctions acheaders acidentifiers \ +- acmakevars acprograms autoconf.info* \ +- autoconf.sh autoconf.texi install.texi \ ++ acmakevars acprograms autoconf213.info* \ ++ autoconf.sh autoconf213.texi install.texi \ + autoheader.sh autoscan.pl autoreconf.sh autoupdate.sh ifnames.sh \ + config.guess config.sub configure configure.in \ + install-sh mkinstalldirs texinfo.tex \ +@@ -106,11 +106,11 @@ + autoconf.m4f: autoconf.m4 acgeneral.m4 acspecific.m4 acoldnames.m4 + autoheader.m4f: autoheader.m4 acgeneral.m4 acspecific.m4 acoldnames.m4 + +-info: autoconf.info @standards_info@ INSTALL ++info: autoconf213.info @standards_info@ INSTALL + + # Use --no-split to avoid creating filenames > 14 chars. +-autoconf.info: autoconf.texi install.texi +- $(MAKEINFO) -I$(srcdir) $(srcdir)/autoconf.texi --no-split --output=$@ ++autoconf213.info: autoconf213.texi install.texi ++ $(MAKEINFO) -I$(srcdir) $(srcdir)/autoconf213.texi --no-split --output=$@ + + INSTALL: install.texi + $(MAKEINFO) -I$(srcdir) $(srcdir)/install.texi --output=$@ \ +@@ -121,8 +121,8 @@ + + dvi: autoconf.dvi @standards_dvi@ + +-autoconf.dvi: autoconf.texi +- $(TEXI2DVI) $(srcdir)/autoconf.texi ++autoconf.dvi: autoconf213.texi ++ $(TEXI2DVI) $(srcdir)/autoconf213.texi + + standards.dvi: standards.texi make-stds.texi + $(TEXI2DVI) $(srcdir)/standards.texi +@@ -137,35 +137,35 @@ + cd testsuite && ${MAKE} AUTOCONF=${bindir}/autoconf $@ + + installdirs: +- $(SHELL) ${srcdir}/mkinstalldirs $(bindir) $(infodir) $(acdatadir) ++ $(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)/$(bindir) $(DESTDIR)/$(infodir) $(DESTDIR)/$(acdatadir) + +-install: all $(M4FILES) acconfig.h installdirs install-info ++install: all $(M4FILES) acconfig.h installdirs + for p in $(ASCRIPTS); do \ +- $(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed '$(transform)'`; \ ++ $(INSTALL_PROGRAM) $$p $(DESTDIR)/$(bindir)/`echo $$p|sed '$(transform)'`; \ + done + for i in $(M4FROZEN); do \ +- $(INSTALL_DATA) $$i $(acdatadir)/$$i; \ ++ $(INSTALL_DATA) $$i $(DESTDIR)/$(acdatadir)/$$i; \ + done + for i in $(M4FILES) acconfig.h; do \ +- $(INSTALL_DATA) $(srcdir)/$$i $(acdatadir)/$$i; \ ++ $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)/$(acdatadir)/$$i; \ + done + -if test -f autoscan; then \ +- $(INSTALL_PROGRAM) autoscan $(bindir)/`echo autoscan|sed '$(transform)'`; \ ++ $(INSTALL_PROGRAM) autoscan $(DESTDIR)/$(bindir)/`echo autoscan|sed '$(transform)'`; \ + for i in acfunctions acheaders acidentifiers acprograms \ + acmakevars; do \ +- $(INSTALL_DATA) $(srcdir)/$$i $(acdatadir)/$$i; \ ++ $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)/$(acdatadir)/$$i; \ + done; \ + else :; fi + + # Don't cd, to avoid breaking install-sh references. + install-info: info installdirs +- if test -f autoconf.info; then \ ++ if test -f autoconf213.info; then \ + for i in *.info*; do \ +- $(INSTALL_DATA) $$i $(infodir)/$$i; \ ++ $(INSTALL_DATA) $$i $(DESTDIR)/$(infodir)/$$i; \ + done; \ + else \ + for i in $(srcdir)/*.info*; do \ +- $(INSTALL_DATA) $$i $(infodir)/`echo $$i | sed 's|^$(srcdir)/||'`; \ ++ $(INSTALL_DATA) $$i $(DESTDIR)/$(infodir)/`echo $$i | sed 's|^$(srcdir)/||'`; \ + done; \ + fi + +@@ -174,7 +174,7 @@ + rm -f $(bindir)/`echo $$p|sed '$(transform)'`; \ + done + rm -fr $(acdatadir) +- cd $(infodir) && rm -f autoconf.info* ++ cd $(infodir) && rm -f autoconf213.info* + if test -f standards.info || test -f $(srcdir)/standards.info; \ + then cd $(infodir) && rm -f standards.info*; fi + +diff -Naur a/testsuite/autoconf.s/syntax.exp b/testsuite/autoconf.s/syntax.exp +--- a/testsuite/autoconf.s/syntax.exp 1999-01-05 13:29:54.000000000 +0000 ++++ b/testsuite/autoconf.s/syntax.exp 2016-06-11 00:18:51.996905247 +0100 +@@ -2,7 +2,7 @@ + + send_user "Checking for syntax errors in the specific tests...\n" + set script {s/^AC_DEFUN(\([^,]*\).*/\1/p} +-set macros [exec sed -n $script $srcdir/../acspecific.m4] ++set macros [exec sed -n $script $srcdir/../acspecific.m4 | grep -v -e AC_FUNC_GETLOADAVG -e F77] + + foreach mac $macros { + send_user "$mac\n" diff --git a/x86_64/extra/autoconf2.13/PKGBUILD b/x86_64/extra/autoconf2.13/PKGBUILD new file mode 100644 index 0000000..142035e --- /dev/null +++ b/x86_64/extra/autoconf2.13/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=autoconf2.13 +pkgver=2.13 +pkgrel=1 +pkgdesc="A GNU tool for automatically configuring source code (Legacy 2.1x version)" +arch=(x86_64) +url="https://www.gnu.org/software/autoconf/" +depends=('perl') +source=(https://ftp.gnu.org/gnu/autoconf/autoconf-${pkgver}.tar.gz) + +build() { + cd "${srcdir}/autoconf-${pkgver}" + + ./configure --prefix=/usr --infodir=/usr/share/info --program-suffix=-2.13 + + make +} + +package() { + cd "${srcdir}/autoconf-${pkgver}" + + make prefix="${pkgdir}/usr" infodir="${pkgdir}/usr/share/info" install + + mv "${pkgdir}"/usr/share/info/autoconf{,-2.13}.info + mv "${pkgdir}"/usr/share/info/standards{,-2.13}.info +} diff --git a/x86_64/extra/automake-1.15/PKGBUILD b/x86_64/extra/automake-1.15/PKGBUILD new file mode 100644 index 0000000..af4cc66 --- /dev/null +++ b/x86_64/extra/automake-1.15/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=automake-1.15 +pkgver=1.15.1 +pkgrel=2 +arch=('x86_64') +depends=(perl) +makedepends=(autoconf) +source=(https://ftp.gnu.org/gnu/automake/automake-$pkgver.tar.xz) + +build() { + cd automake-$pkgver + + ./configure --prefix=/usr --program-suffix=-1.15 + make +} + +package() { + cd automake-$pkgver + make DESTDIR=$pkgdir install + + rm -rf "$pkgdir"/usr/share/aclocal + rm -fv "$pkgdir"/usr/share/man/man1/{automake,aclocal}.1* + + rm -rf "$pkgdir"/usr/share/info + rm -rf "$pkgdir"/usr/share/doc +} diff --git a/x86_64/extra/automake/PKGBUILD b/x86_64/extra/automake/PKGBUILD new file mode 100644 index 0000000..43cd79a --- /dev/null +++ b/x86_64/extra/automake/PKGBUILD @@ -0,0 +1,17 @@ +pkgname=automake +pkgver=1.16.4 +pkgrel=1 +arch=('x86_64') +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/avahi/PKGBUILD b/x86_64/extra/avahi/PKGBUILD new file mode 100644 index 0000000..da93bc5 --- /dev/null +++ b/x86_64/extra/avahi/PKGBUILD @@ -0,0 +1,38 @@ +pkgname=avahi +pkgver=v0.8 +pkgrel=1 +arch=(x86_64) +depends=(libdaemon qt5 dbus expat gdbm glib2 libcap gtk3+ libevent nss gobject-introspection python3-gobject python3-dbus) +makedepends=(git m4) +commitid=b6ff6ab134736c0cdcd46f2cc70f21fc9db974c9 +source=(git+https://github.com/Drunk-Linux/avahi.git#commit=$commitid) + +prepare() { + cd $pkgname + + ./configure \ + --prefix=/usr \ + with_dbus_sys=/usr/share/dbus-1/system.d \ + --with-avahi-priv-access-group=network \ + --with-autoipd-user=avahi \ + --with-autoipd-group=avahi \ + --with-systemdsystemunitdir=/usr/lib/systemd/system \ + --with-distro=drunk \ + --disable-mono \ + --disable-manpages +} + +build() { + cd $pkgname + + make -j2 +} + +package() { + cd $pkgname + + make DESTDIR=$pkgdir install + + echo 'u avahi - "Avahi mDNS/DNS-SD daemon"' | + install -Dm644 /dev/stdin "$pkgdir/usr/lib/sysusers.d/$pkgname.conf" +} diff --git a/x86_64/extra/base-chroot/PKGBUILD b/x86_64/extra/base-chroot/PKGBUILD new file mode 100644 index 0000000..584f6fd --- /dev/null +++ b/x86_64/extra/base-chroot/PKGBUILD @@ -0,0 +1,14 @@ +pkgname=base-chroot +pkgver=2022.1 +pkgrel=1 +arch=('x86_64') +depends=(bash pacman glibc gcc) + + +build() { + echo "Nothing" +} + +package() { + echo "Nothing" +} diff --git a/x86_64/extra/base-devel/PKGBUILD b/x86_64/extra/base-devel/PKGBUILD new file mode 100644 index 0000000..e6b372a --- /dev/null +++ b/x86_64/extra/base-devel/PKGBUILD @@ -0,0 +1,15 @@ +pkgname=base-devel +pkgver=1.0 +pkgrel=3 +arch=('x86_64') +source=(tmpfile) +depends=('autoconf' 'automake' 'make' 'meson' 'ninja' 'perl' 'ruby3' 'git' 'patch' 'cmake' 'fakeroot') + +build() { + mkdir -p $pkgname-$pkgver + cd $pkgname-$pkgver +} + +package() { + cd $pkgname-$pkgver +} diff --git a/x86_64/extra/bash-completion/PKGBUILD b/x86_64/extra/bash-completion/PKGBUILD new file mode 100644 index 0000000..4846838 --- /dev/null +++ b/x86_64/extra/bash-completion/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=bash-completion +pkgver=2.11 +pkgrel=1 +arch=(x86_64) +depends=('bash') +source=(https://github.com/scop/bash-completion/releases/download/$pkgver/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --sysconfdir=/etc + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + rm $pkgdir/etc/profile.d/bash_completion.sh + rm $pkgdir/usr/share/bash-completion/completions/makepkg +} diff --git a/x86_64/extra/bc/PKGBUILD b/x86_64/extra/bc/PKGBUILD new file mode 100644 index 0000000..2a7833c --- /dev/null +++ b/x86_64/extra/bc/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=bc +pkgver=4.0.2 +pkgrel=2 +arch=('x86_64') +depends=(readline) +source=(https://github.com/gavinhoward/bc/archive/$pkgver/bc-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + PREFIX=/usr CC=gcc CFLAGS="-std=c99" ./configure.sh -G -O3 + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/benchmark/PKGBUILD b/x86_64/extra/benchmark/PKGBUILD new file mode 100644 index 0000000..b61e89f --- /dev/null +++ b/x86_64/extra/benchmark/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=benchmark +pkgver=1.6.1 +pkgrel=1 +arch=('x86_64') +depends=('gcc') +makedepends=('cmake') +source=("https://github.com/google/$pkgname/archive/v$pkgver/$pkgname-$pkgver.tar.gz") + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + + mkdir -p build +} + +build() { + cd "$srcdir/$pkgname-$pkgver/build" + + cmake \ + -D CMAKE_BUILD_TYPE=None \ + -D CMAKE_CXX_FLAGS="${CXXFLAGS} -DNDEBUG" \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_INSTALL_LIBDIR=lib \ + -D BUILD_SHARED_LIBS=ON \ + -D BENCHMARK_ENABLE_LTO=ON \ + -D BENCHMARK_ENABLE_GTEST_TESTS=OFF \ + .. + + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver/build" + + make DESTDIR="$pkgdir/" install +} diff --git a/x86_64/extra/bison/PKGBUILD b/x86_64/extra/bison/PKGBUILD new file mode 100644 index 0000000..c74b70a --- /dev/null +++ b/x86_64/extra/bison/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=bison +pkgver=3.7.6 +pkgrel=2 +arch=('x86_64') +depends=(glibc m4 gettext) +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make -j1 +} + +package() { + cd $pkgname-$pkgver + make -j1 DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/bluez/PKGBUILD b/x86_64/extra/bluez/PKGBUILD new file mode 100644 index 0000000..f4d2110 --- /dev/null +++ b/x86_64/extra/bluez/PKGBUILD @@ -0,0 +1,50 @@ +pkgname=bluez +pkgver=5.63 +pkgrel=1 +arch=('x86_64') +depends=(dbus libical systemd alsa-lib json-c ell) +makedepends=(python3-pip) +source=(https://www.kernel.org/pub/linux/bluetooth/${pkgname}-${pkgver}.tar.xz + bluetooth.modprobe) + +prepare() { + pip install docutils +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --with-dbusconfdir=/usr/share \ + --enable-btpclient \ + --enable-midi \ + --enable-sixaxis \ + --enable-mesh \ + --enable-hid2hci \ + --enable-deprecated \ + --enable-experimental \ + --disable-manpages + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + # Extra stuff + install -dm755 $pkgdir/usr/lib/modprobe.d + install -Dm644 $srcdir/bluetooth.modprobe $pkgdir/usr/lib/modprobe.d/bluetooth-usb.conf + + install -dm755 $pkgdir/etc/bluetooth + install -Dm644 $srcdir/"${pkgbase}"-${pkgver}/src/main.conf "${pkgdir}"/etc/bluetooth/main.conf + + install -dm755 $pkgdir/usr/lib/modules-load.d + echo "crypto_user" > $pkgdir/usr/lib/modules-load.d/bluez.conf + + ln -fs /usr/lib/systemd/user/obex.service $pkgdir/usr/lib/systemd/user/dbus-org.bluez.obex.service +} diff --git a/x86_64/extra/bluez/bluetooth.modprobe b/x86_64/extra/bluez/bluetooth.modprobe new file mode 100644 index 0000000..3072d78 --- /dev/null +++ b/x86_64/extra/bluez/bluetooth.modprobe @@ -0,0 +1,3 @@ +# use "reset=1" as default, since it should be safe for recent devices and +# solves all kind of problems. +options btusb reset=1 diff --git a/x86_64/extra/boost/PKGBUILD b/x86_64/extra/boost/PKGBUILD new file mode 100644 index 0000000..0af724b --- /dev/null +++ b/x86_64/extra/boost/PKGBUILD @@ -0,0 +1,33 @@ +pkgname=boost +pkgver=1.78.0 +pkgrel=3 +arch=('x86_64') +depends=(which icu) +source=(https://boostorg.jfrog.io/artifactory/main/release/$pkgver/source/boost_1_78_0.tar.bz2) + +build() { + echo 1 +} + +build1() { + cd boost_1_78_0 + + ./bootstrap.sh \ + --prefix=$srcdir/fkinstall \ + --with-python=python3 + + ./b2 stage \ + threading=multi \ + --debug-symbols=on \ + --runtime-link=shared \ + --link=shared,static +} + +package() { + cd boost_1_78_0 + + ./b2 install + + mkdir -p $pkgdir/usr + cp -rf $srcdir/fkinstall/* $pkgdir/usr/ +} diff --git a/x86_64/extra/brotli/PKGBUILD b/x86_64/extra/brotli/PKGBUILD new file mode 100644 index 0000000..b4e6aed --- /dev/null +++ b/x86_64/extra/brotli/PKGBUILD @@ -0,0 +1,34 @@ +pkgname=brotli +pkgver=1.0.9 +pkgrel=2 +pkgdesc='Brotli compression library' +arch=(x86_64) +url=https://github.com/google/brotli +makedepends=( + cmake git python3-pip +) +_tag=e61745a6b7add50d380cfd7d3883dd6c62fc2c71 +source=(git+https://github.com/google/brotli#tag=${_tag}) + +prepare() { + pip3 install setuptools +} + +build() { + cmake -S brotli -B build \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX=/usr + + cmake --build build +} + +package() { + cd $pkgname + + # Python3 module ( usable if python3 gets installed by dev/user ) + python3 setup.py install -O1 --root=$pkgdir + + cd .. + + DESTDIR="$pkgdir" cmake --install build +} diff --git a/x86_64/extra/bspwm/PKGBUILD b/x86_64/extra/bspwm/PKGBUILD new file mode 100644 index 0000000..742342d --- /dev/null +++ b/x86_64/extra/bspwm/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=bspwm +pkgver=0.9.10 +pkgrel=1 +arch=('x86_64') +depends=(xcb-util xcb-util-keysyms xcb-util-wm sxhkd xdo) +makedepends=(git) +source=(git+https://github.com/baskerville/bspwm#commit=2492695ad47c7ae8c630bdf22328334f57e41c1a) + +build() { + cd $pkgname + + CFLAGS+=" -fcommon" + + make PREFIX=/usr +} + +package() { + cd $pkgname + + make PREFIX=/usr DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/btrfs-progs/PKGBUILD b/x86_64/extra/btrfs-progs/PKGBUILD new file mode 100644 index 0000000..c38a566 --- /dev/null +++ b/x86_64/extra/btrfs-progs/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=btrfs-progs +pkgver=5.16 +pkgrel=1 +arch=('x86_64') +depends=(util-linux libgcrypt lzo zstd) +makedepends=(git asciidoc xmlto systemd python3 + python3-pip e2fsprogs reiserfsprogs) +source=(https://www.kernel.org/pub/linux/kernel/people/kdave/btrfs-progs/btrfs-progs-v$pkgver.tar.xz) + +build() { + cd $pkgname-v$pkgver + + ./configure \ + --prefix=/usr \ + --with-crypto=libgcrypt + + make +} + +package() { + cd $pkgname-v$pkgver + + make DESTDIR="$pkgdir" install install_python +} diff --git a/x86_64/extra/build_pkg.sh b/x86_64/extra/build_pkg.sh new file mode 100755 index 0000000..25c7bb2 --- /dev/null +++ b/x86_64/extra/build_pkg.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +folders=(xf86*) + +function build_extras_S() { + shopt -s globstar + for d in ${folders[@]} ; do + cd "$d" + $@ + rm -rf src/ + rm -rf pkg/ + cd .. + done +} + +build_extras_S "makepkg --skipint -C -c -f -s" + +#function build_extras() { +# shopt -s globstar +# for d in font* ; do +# cd "$d" +# $@ +# rm -rf src/ +# rm -rf pkg/ +# cd .. +# done +#} + +#build_extras "makepkg --skipint" diff --git a/x86_64/extra/byack/PKGBUILD b/x86_64/extra/byack/PKGBUILD new file mode 100644 index 0000000..1752ad1 --- /dev/null +++ b/x86_64/extra/byack/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=byacc +pkgver=20220128 +pkgrel=1 +arch=(x86_64) +depends=(glibc) +source=(http://ftp.invisible-island.net/archives/$pkgname/$pkgname-$pkgver.tgz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --program-transform=s,^,b, \ + --enable-btyacc + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/c-ares/PKGBUILD b/x86_64/extra/c-ares/PKGBUILD new file mode 100644 index 0000000..0d2def6 --- /dev/null +++ b/x86_64/extra/c-ares/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=c-ares +pkgver=1.18.1 +pkgrel=1 +pkgdesc="A C library for asynchronous DNS requests" +arch=('x86_64') +url="https://c-ares.haxx.se/" +depends=('glibc') +makedepends=('cmake') +source=("https://github.com/${pkgname}/${pkgname}/releases/download/${pkgname//-}-${pkgver//./_}/${pkgname}-${pkgver}.tar.gz"{,.asc}) + +build() { + cd "$pkgname-$pkgver" + cmake -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE='None' \ + -Wno-dev \ + -B build \ + -S . + + make VERBOSE=1 -C build +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="${pkgdir}" install -C build +} diff --git a/x86_64/extra/cabextract/PKGBUILD b/x86_64/extra/cabextract/PKGBUILD new file mode 100644 index 0000000..0eb5fd8 --- /dev/null +++ b/x86_64/extra/cabextract/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=cabextract +pkgver=1.9.1 +pkgrel=1 +pkgdesc="A program to extract Microsoft cabinet (.CAB) files" +arch=('x86_64') +source=("https://cabextract.org.uk/$pkgname-$pkgver.tar.gz") + +build() { + cd "$pkgname-$pkgver" + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + + make +} + +package() { + cd "$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install +} diff --git a/x86_64/extra/cairo/PKGBUILD b/x86_64/extra/cairo/PKGBUILD new file mode 100644 index 0000000..6a56cf5 --- /dev/null +++ b/x86_64/extra/cairo/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=cairo +pkgver=1.17.4 +pkgrel=1 +arch=('x86_64') +depends=(libpng pixman) +source=(https://cairographics.org/snapshots/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + -D spectre=disabled \ + -D tee=enabled \ + -D tests=disabled + + meson compile +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir meson install +} diff --git a/x86_64/extra/cairomm/PKGBUILD b/x86_64/extra/cairomm/PKGBUILD new file mode 100644 index 0000000..1fa0eae --- /dev/null +++ b/x86_64/extra/cairomm/PKGBUILD @@ -0,0 +1,32 @@ +pkgname=cairomm +pkgver=1.14.0 +pkgrel=1 +arch=('x86_64') +depends=(cairo libsigc++) +makedepends=(boost doxygen) +source=(https://www.cairographics.org/releases/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + meson \ + --prefix=/usr \ + --buildtype=release \ + -Dbuild-tests=false \ + -Dboost-shared=true \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/calamares/PKGBUILD b/x86_64/extra/calamares/PKGBUILD new file mode 100644 index 0000000..a7828b1 --- /dev/null +++ b/x86_64/extra/calamares/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=calamares +pkgver=3.2.56 +pkgrel=1 +arch=('x86_64') +depends=('kconfig' 'kcoreaddons' 'kiconthemes' 'ki18n' 'kio' 'solid' 'yaml' 'dracut' + 'boost' 'qt5' 'polkit-qt' 'plasma-framework' 'yaml-cpp' 'double-conversion' + 'squashfs-tools' 'libpwquality' 'appstream' 'kpmcore') +makedepends=('extra-cmake-modules' 'qt5' 'git') +commitid=1c49648fc5f9264fe4611e5cb17f287f508bfc60 # 3.2.56 +source=($pkgname::"git+https://git.it-kuny.ch/drunk/source-code/calamares.git#commit=$commitid") + +prepare() { + cd ${srcdir}/calamares + sed -i -e 's/"Install configuration files" OFF/"Install configuration files" ON/' CMakeLists.txt +} + +build() { + cd calamares + + mkdir -p build + cd build + + cmake .. \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_INSTALL_LIBDIR=lib \ + -D WITH_PYTHONQT:BOOL=ON \ + -D Boost_NO_BOOST_CMAKE=ON + + make +} + +package() { + cd calamares/build + + make DESTDIR="$pkgdir" install +} diff --git a/x86_64/extra/cantarell-fonts/PKGBUILD b/x86_64/extra/cantarell-fonts/PKGBUILD new file mode 100644 index 0000000..53f5fe9 --- /dev/null +++ b/x86_64/extra/cantarell-fonts/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=cantarell-fonts +pkgver=0.303.1 +pkgrel=1 +pkgdesc="Humanist sans serif font" +url="https://gitlab.gnome.org/GNOME/cantarell-fonts" +arch=(x86_64) +makedepends=(meson appstream git) +source=("https://download.gnome.org/sources/$pkgname/${pkgver:0:5}/$pkgname-$pkgver.tar.xz") + +build() { + meson $pkgname-$pkgver \ + build \ + --prefix=/usr \ + -D useprebuilt=true + + meson compile -C build +} + +package() { + meson install -C build --destdir "$pkgdir" +} diff --git a/x86_64/extra/cbindgen/PKGBUILD b/x86_64/extra/cbindgen/PKGBUILD new file mode 100644 index 0000000..29abc5e --- /dev/null +++ b/x86_64/extra/cbindgen/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=cbindgen +pkgver=0.24.3 +pkgrel=1 +arch=('x86_64') +depends=(rust) +source=(https://github.com/eqrion/$pkgname/archive/v$pkgver/$pkgname-$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + cargo fetch --locked --target x86_64-unknown-linux-gnu +} + +build() { + cd $pkgname-$pkgver + + cargo build --release --frozen +} + +package() { + cd $pkgname-$pkgver + + mkdir -p $pkgdir/usr/bin + install -Dm755 target/release/cbindgen $pkgdir/usr/bin/ +} diff --git a/x86_64/extra/cdrtools/PKGBUILD b/x86_64/extra/cdrtools/PKGBUILD new file mode 100644 index 0000000..d8deb07 --- /dev/null +++ b/x86_64/extra/cdrtools/PKGBUILD @@ -0,0 +1,32 @@ +pkgname=cdrtools +pkgver=3.02a09 +pkgrel=2 +arch=('x86_64') +depends=(alsa-lib acl libcap) +makedepends=(base-devel) +source=(https://downloads.sourceforge.net/cdrtools/cdrtools-$pkgver.tar.bz2) + +build() { + cd $pkgname-3.02 + + export GMAKE_NOWARN=true + make -j1 INS_BASE=/usr DEFINSUSR=root DEFINSGRP=root VERSION_OS="_Drunk-Linux" +} + +package() { + cd $pkgname-3.02 + + export GMAKE_NOWARN=true + make DESTDIR=$pkgdir INS_BASE=/usr MANSUFF_LIB=3cdr DEFINSUSR=root DEFINSGRP=root install + + # legacy compatibility + cd "$pkgdir"/usr/bin + ln -s mkisofs genisoimage + ln -s readcd readom + ln -s cdrecord wodim + ln -s cdda2wav icedax + + # autoload 'sg' module needed by cdrecord + install -d -m755 "$pkgdir"/usr/lib/modules-load.d/ + echo sg > "$pkgdir"/usr/lib/modules-load.d/cdrecord.conf +} diff --git a/x86_64/extra/ceph/PKGBUILD b/x86_64/extra/ceph/PKGBUILD new file mode 100644 index 0000000..fbc7097 --- /dev/null +++ b/x86_64/extra/ceph/PKGBUILD @@ -0,0 +1,85 @@ +pkgname=ceph +pkgver=17.2.0 +pkgrel=1 +arch=('x86_64') +depends=("zstd" 'bash' 'bc' 'boost' 'bzip2' 'c-ares' 'cmake' 'coreutils' + 'cpio' 'curl' 'expat' 'fontconfig' 'fuse2' 'gcc' 'git' 'glibc' 'gnutls' + 'gperf' 'inetutils' 'keyutils' 'libcap' 'snappy' 'benchmark' + 'libedit' 'libgudev' 'libnl' 'libtool' 'util-linux' + 'libuv' 'libxml2' 'libpciaccess' 'lz4' 'ncurses' 'python3-pip' + 'nss' 'numactl' 'openssl' 'parted' 'pcre' 'pcre2' 'pkgconf' 'libcap-ng' + 'procps-ng' 'sed' 'systemd' 'valgrind' 'yaml' 'yasm' 'zlib') +makedepends=(python3-pip) +options=('emptydirs') +source=(https://download.ceph.com/tarballs/${pkgname}-${pkgver}.tar.gz) + +prepare() { + cd "${pkgbase}-${pkgver}" + + # Install python3 needed modules ( may need more attention on cleaner dev env's ) + pip3 install doxypypy doxyqml requests + pip3 install Cython pyyaml + + # Configure pkg in prepare so build() only compiles the pkg + CPPFLAGS+=' -DBOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT' + export CFLAGS+=" ${CPPFLAGS} -w" + export CXXFLAGS+=" ${CPPFLAGS} -w" + export PYTHON_VERSION="$(python3 --version | awk '{print $2}')" + export PYTHON_INCLUDE_DIR="$(python3 -c "from sysconfig import get_path; print(get_path('include'))")" + export CMAKE_BUILD_TYPE='RelWithDebInfo' + export CMAKE_WARN_UNUSED_CLI=no + + cmake \ + -B build \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_INSTALL_SYSCONFDIR=/etc \ + -D CEPH_SYSTEMD_ENV_DIR=/etc/default \ + -D CMAKE_INSTALL_SYSTEMD_SERVICEDIR=/usr/lib/systemd/system \ + -D WITH_PYTHON2=OFF \ + -D WITH_PYTHON3="${PYTHON_VERSION}" \ + -D WITH_BABELTRACE=OFF \ + -D WITH_LTTNG=OFF \ + -D WITH_OPENLDAP=ON \ + -D WITH_RDMA=OFF \ + -D WITH_OCF=OFF \ + -D WITH_DPDK=OFF \ + -D WITH_SPDK=OFF \ + -D WITH_CEPHFS=ON \ + -D WITH_CEPHFS_JAVA=ON \ + -D WITH_CEPHFS_SHELL=ON \ + -D WITH_FUSE=ON \ + -D WITH_LEVELDB=OFF \ + -D WITH_LZ4=ON \ + -D WITH_XFS=ON \ + -D WITH_MGR=ON \ + -D WITH_MGR_DASHBOARD_FRONTEND=ON \ + -D DASHBOARD_FRONTEND_LANGS="ALL" \ + -D WITH_RADOSGW=OFF \ + -D WITH_RADOSGW_FCGI_FRONTEND=OFF \ + -D WITH_RADOSGW_BEAST_FRONTEND=OFF \ + -D WITH_RADOSGW_BEAST_OPENSSL=OFF \ + -D WITH_RADOSGW_AMQP_ENDPOINT=OFF \ + -D WITH_SYSTEMD=ON \ + -D WITH_SYSTEM_BOOST=ON \ + -D WITH_BOOST_CONTEXT=ON \ + -D WITH_SYSTEM_NPM=OFF \ + -D ENABLE_SHARED=ON \ + -D WITH_TESTS=OFF \ + -D WITH_MANPAGE=OFF \ + -D JAVA_AWT_LIBRARY=/opt/jdk-17/lib/ \ + -D JAVA_JVM_LIBRARY=/opt/jdk-17/lib/ \ + -D JAVA_INCLUDE_PATH=/opt/jdk-17/include/ \ + -Wno-dev +} + +build() { + cd "${pkgbase}-${pkgver}" + + cmake --build build -j4 +} + +package() { + cd "${pkgbase}-${pkgver}" + + make -C build DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/cfitsio/PKGBUILD b/x86_64/extra/cfitsio/PKGBUILD new file mode 100644 index 0000000..7158f29 --- /dev/null +++ b/x86_64/extra/cfitsio/PKGBUILD @@ -0,0 +1,32 @@ +pkgname=cfitsio +pkgver=4.1.0 +pkgrel=1 +arch=(x86_64) +depends=(glibc curl) +makedepends=(make m4) +source=(https://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/$pkgname-$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + autoreconf -fi +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-reentrant + + make shared utils +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + # Conflicts fix + rm -f $pkgdir/usr/bin/{cookbook,smem,testprog} +} diff --git a/x86_64/extra/check/PKGBUILD b/x86_64/extra/check/PKGBUILD new file mode 100644 index 0000000..0cd03dd --- /dev/null +++ b/x86_64/extra/check/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=check +pkgver=0.15.2 +pkgrel=1 +arch=('x86_64') +depends=('gawk') +source=(git+https://github.com/libcheck/check) + +build() { + CFLAGS+=" -Wno-format-extra-args" + + cmake -Hcheck -Bcmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=None \ + -D CHECK_ENABLE_TIMEOUT_TESTS=OFF \ + -D AWK_GSUB_DBL_BSLASH="\\\\" + + cmake --build cmake +} + +package() { + DESTDIR=$pkgdir cmake --build cmake --target install +} diff --git a/x86_64/extra/chrpath/PKGBUILD b/x86_64/extra/chrpath/PKGBUILD new file mode 100644 index 0000000..681655e --- /dev/null +++ b/x86_64/extra/chrpath/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=chrpath +pkgver=0.16 +pkgrel=1 +arch=('x86_64') +depends=('glibc') +source=("http://http.debian.net/debian/pool/main/c/chrpath/chrpath_$pkgver.orig.tar.gz") + +build() { + cd "${srcdir}"/$pkgname-$pkgver + + ./configure --prefix=/usr --mandir=/usr/share/man + + make +} + +package() { + cd "${srcdir}"/$pkgname-$pkgver + + make DESTDIR="${pkgdir}" docdir=/usr/share/doc/chrpath install +} diff --git a/x86_64/extra/clang/01.patch b/x86_64/extra/clang/01.patch new file mode 100644 index 0000000..70fc047 --- /dev/null +++ b/x86_64/extra/clang/01.patch @@ -0,0 +1,31 @@ +From c84755a046bbdcd0564693e30b2508034b06002b Mon Sep 17 00:00:00 2001 +From: serge-sans-paille +Date: Mon, 13 Sep 2021 10:25:45 +0200 +Subject: [PATCH] Fix scan-build-py executable lookup path + +Once installed, scan-build-py doesn't know anything about its auxiliary +executable and can't find them. +Use relative path wrt. scan-build-py script. + +Differential Revision: https://reviews.llvm.org/D109659 +--- + clang/tools/scan-build-py/lib/libscanbuild/analyze.py | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/clang/tools/scan-build-py/lib/libscanbuild/analyze.py b/clang/tools/scan-build-py/lib/libscanbuild/analyze.py +index 9a249a8e15cb..d83ff2aefab9 100644 +--- a/clang/tools/scan-build-py/lib/libscanbuild/analyze.py ++++ b/clang/tools/scan-build-py/lib/libscanbuild/analyze.py +@@ -39,8 +39,10 @@ from libscanbuild.shell import decode + + __all__ = ['scan_build', 'analyze_build', 'analyze_compiler_wrapper'] + +-COMPILER_WRAPPER_CC = 'analyze-cc' +-COMPILER_WRAPPER_CXX = 'analyze-c++' ++scanbuild_dir = os.path.dirname(__import__('sys').argv[0]) ++ ++COMPILER_WRAPPER_CC = os.path.join(scanbuild_dir, '..', 'libexec', 'analyze-cc') ++COMPILER_WRAPPER_CXX = os.path.join(scanbuild_dir, '..', 'libexec', 'analyze-c++') + + CTU_EXTDEF_MAP_FILENAME = 'externalDefMap.txt' + CTU_TEMP_DEFMAP_FOLDER = 'tmpExternalDefMaps' diff --git a/x86_64/extra/clang/02.patch b/x86_64/extra/clang/02.patch new file mode 100644 index 0000000..31241be --- /dev/null +++ b/x86_64/extra/clang/02.patch @@ -0,0 +1,374 @@ +From 683787b5c5c075f53a95f4d85f76302111c89914 Mon Sep 17 00:00:00 2001 +From: Evangelos Foutras +Date: Sat, 23 Oct 2021 05:08:48 +0300 +Subject: [PATCH] Enable SSP and PIE by default + +This is a minimal set of changes needed to make clang use SSP and PIE by +default on Arch Linux. Tests that were easy to adjust have been changed +accordingly; only test/Driver/linux-ld.c has been marked as "expected +failure" due to the number of changes it would require (mostly replacing +crtbegin.o with crtbeginS.o). + +Doing so is needed in order to align clang with the new default GCC +behavior in Arch which generates PIE executables by default and also +defaults to -fstack-protector-strong. It is not meant to be a long term +solution, but a simple temporary fix. + +Hopefully these changes will be obsoleted by the introduction upstream +of a compile-time option (https://bugs.llvm.org/show_bug.cgi?id=13410) +--- + clang/lib/Driver/ToolChains/Linux.cpp | 10 ++++++++-- + clang/lib/Driver/ToolChains/Linux.h | 5 +++++ + clang/test/Driver/cross-linux.c | 16 ++++++++-------- + clang/test/Driver/env.c | 2 +- + clang/test/Driver/fsanitize.c | 14 +++++++------- + clang/test/Driver/gcc-toolchain.cpp | 6 +++--- + clang/test/Driver/hexagon-toolchain-elf.c | 2 +- + clang/test/Driver/hip-fpie-option.hip | 4 ++-- + clang/test/Driver/linux-as.c | 4 ++-- + clang/test/Driver/linux-ld.c | 2 ++ + clang/test/Driver/ppc-abi.c | 18 +++++++++++------- + clang/test/Driver/riscv32-toolchain.c | 4 ++-- + clang/test/Driver/riscv64-toolchain.c | 4 ++-- + clang/test/Driver/stack-protector.c | 4 ++-- + 14 files changed, 56 insertions(+), 39 deletions(-) + +diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp +index c9360fc67165..2b60460e6604 100644 +--- a/clang/lib/Driver/ToolChains/Linux.cpp ++++ b/clang/lib/Driver/ToolChains/Linux.cpp +@@ -652,8 +652,14 @@ void Linux::AddIAMCUIncludeArgs(const ArgList &DriverArgs, + } + + bool Linux::isPIEDefault() const { +- return (getTriple().isAndroid() && !getTriple().isAndroidVersionLT(16)) || +- getTriple().isMusl() || getSanitizerArgs().requiresPIE(); ++ const bool IsMips = getTriple().isMIPS(); ++ const bool IsAndroid = getTriple().isAndroid(); ++ ++ if (IsMips || IsAndroid) ++ return (getTriple().isAndroid() && !getTriple().isAndroidVersionLT(16)) || ++ getTriple().isMusl() || getSanitizerArgs().requiresPIE(); ++ ++ return true; + } + + bool Linux::IsAArch64OutlineAtomicsDefault(const ArgList &Args) const { +diff --git a/clang/lib/Driver/ToolChains/Linux.h b/clang/lib/Driver/ToolChains/Linux.h +index 169a37c44072..a6458092462e 100644 +--- a/clang/lib/Driver/ToolChains/Linux.h ++++ b/clang/lib/Driver/ToolChains/Linux.h +@@ -10,6 +10,7 @@ + #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_LINUX_H + + #include "Gnu.h" ++#include "clang/Basic/LangOptions.h" + #include "clang/Driver/ToolChain.h" + + namespace clang { +@@ -46,6 +47,10 @@ public: + bool isPIEDefault() const override; + bool isNoExecStackDefault() const override; + bool IsMathErrnoDefault() const override; ++ LangOptions::StackProtectorMode ++ GetDefaultStackProtectorLevel(bool KernelOrKext) const override { ++ return LangOptions::SSPStrong; ++ } + SanitizerMask getSupportedSanitizers() const override; + void addProfileRTLibs(const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs) const override; +diff --git a/clang/test/Driver/cross-linux.c b/clang/test/Driver/cross-linux.c +index 59f5a97d2d9d..8d0e9e724aa0 100644 +--- a/clang/test/Driver/cross-linux.c ++++ b/clang/test/Driver/cross-linux.c +@@ -43,8 +43,8 @@ + // CHECK-MULTI32-I386: "{{.*}}/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/10.2.0/../../../../i386-unknown-linux/bin{{/|\\\\}}ld" + // CHECK-MULTI32-I386: "--sysroot=[[sysroot:.*/Inputs/basic_linux_tree]]" + // CHECK-MULTI32-I386: "-m" "elf_i386" +-// CHECK-MULTI32-I386: "crti.o" "[[gcc_install:.*/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/10.2.0]]{{/|\\\\}}crtbegin.o" +-// CHECK-MULTI32-I386: "-L[[gcc_install]]" ++// CHECK-MULTI32-I386: "crti.o" "crtbeginS.o" ++// CHECK-MULTI32-I386: "-L[[gcc_install:.*/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/10.2.0]]" + // CHECK-MULTI32-I386: "-L[[gcc_install]]/../../../../i386-unknown-linux/lib/../lib32" + // CHECK-MULTI32-I386: "-L[[gcc_install]]/../../../../i386-unknown-linux/lib" + // CHECK-MULTI32-I386: "-L[[sysroot]]/lib" +@@ -61,8 +61,8 @@ + // CHECK-MULTI32-X86-64: "{{.*}}/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/10.2.0/../../../../i386-unknown-linux/bin{{/|\\\\}}ld" + // CHECK-MULTI32-X86-64: "--sysroot=[[sysroot:.*/Inputs/basic_linux_tree]]" + // CHECK-MULTI32-X86-64: "-m" "elf_x86_64" +-// CHECK-MULTI32-X86-64: "crti.o" "[[gcc_install:.*/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/10.2.0]]/64{{/|\\\\}}crtbegin.o" +-// CHECK-MULTI32-X86-64: "-L[[gcc_install]]/64" ++// CHECK-MULTI32-X86-64: "crti.o" "crtbeginS.o" ++// CHECK-MULTI32-X86-64: "-L[[gcc_install:.*/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/10.2.0]]/64" + // CHECK-MULTI32-X86-64: "-L[[gcc_install]]/../../../../i386-unknown-linux/lib/../lib64" + // CHECK-MULTI32-X86-64: "-L[[gcc_install]]/../../../../i386-unknown-linux/lib" + // CHECK-MULTI32-X86-64: "-L[[sysroot]]/lib" +@@ -79,8 +79,8 @@ + // CHECK-MULTI64-I386: "{{.*}}/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/10.2.0/../../../../x86_64-unknown-linux/bin{{/|\\\\}}ld" + // CHECK-MULTI64-I386: "--sysroot=[[sysroot:.*/Inputs/basic_linux_tree]]" + // CHECK-MULTI64-I386: "-m" "elf_i386" +-// CHECK-MULTI64-I386: "crti.o" "[[gcc_install:.*/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/10.2.0]]/32{{/|\\\\}}crtbegin.o" +-// CHECK-MULTI64-I386: "-L[[gcc_install]]/32" ++// CHECK-MULTI64-I386: "crti.o" "crtbeginS.o" ++// CHECK-MULTI64-I386: "-L[[gcc_install:.*/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/10.2.0]]/32" + // CHECK-MULTI64-I386: "-L[[gcc_install]]/../../../../x86_64-unknown-linux/lib/../lib32" + // CHECK-MULTI64-I386: "-L[[gcc_install]]/../../../../x86_64-unknown-linux/lib" + // CHECK-MULTI64-I386: "-L[[sysroot]]/lib" +@@ -97,8 +97,8 @@ + // CHECK-MULTI64-X86-64: "{{.*}}/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/10.2.0/../../../../x86_64-unknown-linux/bin{{/|\\\\}}ld" + // CHECK-MULTI64-X86-64: "--sysroot=[[sysroot:.*/Inputs/basic_linux_tree]]" + // CHECK-MULTI64-X86-64: "-m" "elf_x86_64" +-// CHECK-MULTI64-X86-64: "crti.o" "[[gcc_install:.*/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/10.2.0]]{{/|\\\\}}crtbegin.o" +-// CHECK-MULTI64-X86-64: "-L[[gcc_install]]" ++// CHECK-MULTI64-X86-64: "crti.o" "crtbeginS.o" ++// CHECK-MULTI64-X86-64: "-L[[gcc_install:.*/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/10.2.0]]" + // CHECK-MULTI64-X86-64: "-L[[gcc_install]]/../../../../x86_64-unknown-linux/lib/../lib64" + // CHECK-MULTI64-X86-64: "-L[[gcc_install]]/../../../../x86_64-unknown-linux/lib" + // CHECK-MULTI64-X86-64: "-L[[sysroot]]/lib" +diff --git a/clang/test/Driver/env.c b/clang/test/Driver/env.c +index e9b86cbcf428..47f304c0420d 100644 +--- a/clang/test/Driver/env.c ++++ b/clang/test/Driver/env.c +@@ -22,7 +22,7 @@ + // + // CHECK-LD-32-NOT: warning: + // CHECK-LD-32: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" +-// CHECK-LD-32: "{{.*}}/usr/lib/gcc/i386-unknown-linux/10.2.0{{/|\\\\}}crtbegin.o" ++// CHECK-LD-32: "crtbeginS.o" + // CHECK-LD-32: "-L[[SYSROOT]]/usr/lib/gcc/i386-unknown-linux/10.2.0" + // CHECK-LD-32: "-L[[SYSROOT]]/usr/lib/gcc/i386-unknown-linux/10.2.0/../../../../i386-unknown-linux/lib" + // CHECK-LD-32: "-L[[SYSROOT]]/lib" +diff --git a/clang/test/Driver/fsanitize.c b/clang/test/Driver/fsanitize.c +index b7d61abe7ec5..461b69b0ac15 100644 +--- a/clang/test/Driver/fsanitize.c ++++ b/clang/test/Driver/fsanitize.c +@@ -344,15 +344,15 @@ + // RUN: %clang -target x86_64-linux-gnu -fsanitize=vptr -fno-sanitize=vptr -fsanitize=undefined,address %s -### 2>&1 + // OK + +-// RUN: %clang -target x86_64-linux-gnu -fsanitize=thread %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-PIE +-// RUN: %clang -target x86_64-linux-gnu -fsanitize=memory %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-PIE ++// RUN: %clang -target x86_64-linux-gnu -fsanitize=thread %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE ++// RUN: %clang -target x86_64-linux-gnu -fsanitize=memory %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE + // RUN: %clang -target x86_64-unknown-freebsd -fsanitize=memory %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE + // RUN: %clang -target aarch64-linux-gnu -fsanitize=memory %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE + // RUN: %clang -target arm-linux-androideabi -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIC-NO-PIE + // RUN: %clang -target arm-linux-androideabi24 -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE + // RUN: %clang -target aarch64-linux-android -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE +-// RUN: %clang -target x86_64-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-PIE +-// RUN: %clang -target i386-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-PIE ++// RUN: %clang -target x86_64-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE ++// RUN: %clang -target i386-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE + + // CHECK-NO-PIE-NOT: "-pie" + // CHECK-NO-PIE: "-mrelocation-model" "static" +@@ -687,12 +687,12 @@ + // RUN: %clang -fno-sanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NOSP + // NOSP-NOT: "-fsanitize=safe-stack" + +-// RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP ++// RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP + // RUN: %clang -target x86_64-linux-gnu -fsanitize=address,safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP-ASAN + // RUN: %clang -target x86_64-linux-gnu -fstack-protector -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP + // RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -fstack-protector-all -### %s 2>&1 | FileCheck %s -check-prefix=SP +-// RUN: %clang -target arm-linux-androideabi -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP +-// RUN: %clang -target aarch64-linux-android -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP ++// RUN: %clang -target arm-linux-androideabi -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP ++// RUN: %clang -target aarch64-linux-android -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP + // RUN: %clang -target i386-contiki-unknown -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP + // NO-SP-NOT: stack-protector + // NO-SP: "-fsanitize=safe-stack" +diff --git a/clang/test/Driver/gcc-toolchain.cpp b/clang/test/Driver/gcc-toolchain.cpp +index 7cdba0841b8c..655457d62bf8 100644 +--- a/clang/test/Driver/gcc-toolchain.cpp ++++ b/clang/test/Driver/gcc-toolchain.cpp +@@ -23,7 +23,7 @@ + // the same precise formatting of the path as the '-internal-system' flags + // above, so we just blanket wildcard match the 'crtbegin.o'. + // CHECK: "{{[^"]*}}ld{{(.exe)?}}" +-// CHECK-SAME: "{{[^"]*}}/usr/lib/gcc/x86_64-linux-gnu/4.8{{/|\\\\}}crtbegin.o" ++// CHECK-SAME: "crtbeginS.o" + // CHECK-SAME: "-L[[TOOLCHAIN]]/usr/lib/gcc/x86_64-linux-gnu/4.8" + /// On x86_64, there is an extra usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu but we should not test it. + +@@ -35,5 +35,5 @@ + // RUN: --target=aarch64-suse-linux -B%S/Inputs/opensuse_42.2_aarch64_tree/usr | \ + // RUN: FileCheck %s --check-prefix=NO_AARCH64 + +-// AARCH64: Inputs{{[^"]+}}aarch64-suse-linux/{{[^"]+}}crt1.o" +-// NO_AARCH64-NOT: Inputs{{[^"]+}}aarch64-suse-linux/{{[^"]+}}crt1.o" ++// AARCH64: Inputs{{[^"]+}}aarch64-suse-linux/{{[^"]+}}crti.o" ++// NO_AARCH64-NOT: Inputs{{[^"]+}}aarch64-suse-linux/{{[^"]+}}crti.o" +diff --git a/clang/test/Driver/hexagon-toolchain-elf.c b/clang/test/Driver/hexagon-toolchain-elf.c +index cc11f9fcba9e..1fe8b5db587b 100644 +--- a/clang/test/Driver/hexagon-toolchain-elf.c ++++ b/clang/test/Driver/hexagon-toolchain-elf.c +@@ -487,7 +487,7 @@ + // RUN: %s 2>&1 \ + // RUN: | FileCheck -check-prefix=CHECK042 %s + // CHECK042: "-cc1" +-// CHECK042: "-mrelocation-model" "static" ++// CHECK042: "-mrelocation-model" "pic" + // CHECK042: "-mllvm" "-hexagon-small-data-threshold=8" + // CHECK042-NEXT: llvm-mc + // CHECK042: "-gpsize=8" +diff --git a/clang/test/Driver/hip-fpie-option.hip b/clang/test/Driver/hip-fpie-option.hip +index 2e296a099dea..86915f1c8c25 100644 +--- a/clang/test/Driver/hip-fpie-option.hip ++++ b/clang/test/Driver/hip-fpie-option.hip +@@ -5,11 +5,11 @@ + + // RUN: %clang -### -target x86_64-unknown-linux-gnu \ + // RUN: --offload-arch=gfx906 %s -nogpulib -nogpuinc \ +-// RUN: 2>&1 | FileCheck -check-prefixes=DEV,HOST-STATIC %s ++// RUN: 2>&1 | FileCheck -check-prefixes=DEV,HOST-PIE %s + + // RUN: %clang -### -target x86_64-unknown-linux-gnu \ + // RUN: -fgpu-rdc --offload-arch=gfx906 %s -nogpulib -nogpuinc \ +-// RUN: 2>&1 | FileCheck -check-prefixes=DEV,HOST-STATIC %s ++// RUN: 2>&1 | FileCheck -check-prefixes=DEV,HOST-PIE %s + + // RUN: %clang -### -target x86_64-unknown-linux-gnu \ + // RUN: --offload-arch=gfx906 %s -nogpulib -nogpuinc \ +diff --git a/clang/test/Driver/linux-as.c b/clang/test/Driver/linux-as.c +index 0959bd7ba0a1..4056a672b6f9 100644 +--- a/clang/test/Driver/linux-as.c ++++ b/clang/test/Driver/linux-as.c +@@ -164,7 +164,7 @@ + // CHECK-PPC-NO-MCPU-NOT: as{{.*}} "-mcpu=invalid-cpu" + // + // RUN: %clang -target sparc64-linux -mcpu=invalid-cpu -### \ +-// RUN: -no-integrated-as -c %s 2>&1 \ ++// RUN: -no-integrated-as -fno-pic -c %s 2>&1 \ + // RUN: | FileCheck -check-prefix=CHECK-SPARCV9 %s + // CHECK-SPARCV9: as + // CHECK-SPARCV9: -64 +@@ -173,7 +173,7 @@ + // CHECK-SPARCV9: -o + // + // RUN: %clang -target sparc64-linux -mcpu=invalid-cpu -### \ +-// RUN: -no-integrated-as -fpic -c %s 2>&1 \ ++// RUN: -no-integrated-as -c %s 2>&1 \ + // RUN: | FileCheck -check-prefix=CHECK-SPARCV9PIC %s + // CHECK-SPARCV9PIC: as + // CHECK-SPARCV9PIC: -64 +diff --git a/clang/test/Driver/linux-ld.c b/clang/test/Driver/linux-ld.c +index cc505588331b..c7f81d2c5e49 100644 +--- a/clang/test/Driver/linux-ld.c ++++ b/clang/test/Driver/linux-ld.c +@@ -1,4 +1,6 @@ + // UNSUPPORTED: system-windows ++// XFAIL: linux ++ + // General tests that ld invocations on Linux targets sane. Note that we use + // sysroot to make these tests independent of the host system. + // +diff --git a/clang/test/Driver/ppc-abi.c b/clang/test/Driver/ppc-abi.c +index a74a19953ca2..0452661ba5a7 100644 +--- a/clang/test/Driver/ppc-abi.c ++++ b/clang/test/Driver/ppc-abi.c +@@ -1,20 +1,20 @@ + // Check passing PowerPC ABI options to the backend. + + // RUN: %clang -target powerpc64-unknown-linux-gnu %s -### -o %t.o 2>&1 \ +-// RUN: | FileCheck -check-prefix=CHECK-ELFv1 %s ++// RUN: | FileCheck -check-prefix=CHECK-ELFv1-PIE %s + // RUN: %clang -target powerpc64-unknown-linux-gnu %s -### -o %t.o 2>&1 \ +-// RUN: -mabi=elfv1 | FileCheck -check-prefix=CHECK-ELFv1 %s ++// RUN: -mabi=elfv1 | FileCheck -check-prefix=CHECK-ELFv1-PIE %s + // RUN: %clang -target powerpc64-unknown-linux-gnu %s -### -o %t.o 2>&1 \ +-// RUN: -mabi=elfv2 | FileCheck -check-prefix=CHECK-ELFv2-BE %s ++// RUN: -mabi=elfv2 | FileCheck -check-prefix=CHECK-ELFv2-BE-PIE %s + + // RUN: %clang -target powerpc64le-unknown-linux-gnu %s -### -o %t.o 2>&1 \ +-// RUN: | FileCheck -check-prefix=CHECK-ELFv2 %s ++// RUN: | FileCheck -check-prefix=CHECK-ELFv2-PIE %s + // RUN: %clang -target powerpc64le-unknown-linux-gnu %s -### -o %t.o 2>&1 \ + // RUN: -mabi=elfv1 | FileCheck -check-prefix=CHECK-ELFv1-LE %s + // RUN: %clang -target powerpc64le-unknown-linux-gnu %s -### -o %t.o 2>&1 \ +-// RUN: -mabi=elfv2 | FileCheck -check-prefix=CHECK-ELFv2 %s ++// RUN: -mabi=elfv2 | FileCheck -check-prefix=CHECK-ELFv2-PIE %s + // RUN: %clang -target powerpc64le-unknown-linux-gnu %s -### -o %t.o 2>&1 \ +-// RUN: -mabi=altivec | FileCheck -check-prefix=CHECK-ELFv2 %s ++// RUN: -mabi=altivec | FileCheck -check-prefix=CHECK-ELFv2-PIE %s + + // RUN: %clang -target powerpc64-unknown-freebsd11 %s -### 2>&1 | FileCheck --check-prefix=CHECK-ELFv1 %s + // RUN: %clang -target powerpc64-unknown-freebsd12 %s -### 2>&1 | FileCheck --check-prefix=CHECK-ELFv1 %s +@@ -26,10 +26,14 @@ + + // CHECK-ELFv1: "-mrelocation-model" "static" + // CHECK-ELFv1: "-target-abi" "elfv1" +-// CHECK-ELFv1-LE: "-mrelocation-model" "static" ++// CHECK-ELFv1-PIE: "-mrelocation-model" "pic" "-pic-level" "2" ++// CHECK-ELFv1-PIE: "-target-abi" "elfv1" ++// CHECK-ELFv1-LE: "-mrelocation-model" "pic" "-pic-level" "2" + // CHECK-ELFv1-LE: "-target-abi" "elfv1" + // CHECK-ELFv2: "-mrelocation-model" "static" + // CHECK-ELFv2: "-target-abi" "elfv2" ++// CHECK-ELFv2-PIE: "-mrelocation-model" "pic" "-pic-level" "2" ++// CHECK-ELFv2-PIE: "-target-abi" "elfv2" + // CHECK-ELFv2-BE: "-mrelocation-model" "static" + // CHECK-ELFv2-BE: "-target-abi" "elfv2" + // CHECK-ELFv2-BE-PIE: "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" +diff --git a/clang/test/Driver/riscv32-toolchain.c b/clang/test/Driver/riscv32-toolchain.c +index a5852f5f3997..233d9ef003cf 100644 +--- a/clang/test/Driver/riscv32-toolchain.c ++++ b/clang/test/Driver/riscv32-toolchain.c +@@ -84,7 +84,7 @@ + // C-RV32-LINUX-MULTI-ILP32: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot" + // C-RV32-LINUX-MULTI-ILP32: "-m" "elf32lriscv" + // C-RV32-LINUX-MULTI-ILP32: "-dynamic-linker" "/lib/ld-linux-riscv32-ilp32.so.1" +-// C-RV32-LINUX-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32{{/|\\\\}}crtbegin.o" ++// C-RV32-LINUX-MULTI-ILP32: "crtbeginS.o" + // C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32" + // C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib32/ilp32" + // C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib32/ilp32" +@@ -99,7 +99,7 @@ + // C-RV32-LINUX-MULTI-ILP32D: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot" + // C-RV32-LINUX-MULTI-ILP32D: "-m" "elf32lriscv" + // C-RV32-LINUX-MULTI-ILP32D: "-dynamic-linker" "/lib/ld-linux-riscv32-ilp32d.so.1" +-// C-RV32-LINUX-MULTI-ILP32D: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32d{{/|\\\\}}crtbegin.o" ++// C-RV32-LINUX-MULTI-ILP32D: "crtbeginS.o" + // C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32d" + // C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib32/ilp32d" + // C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib32/ilp32d" +diff --git a/clang/test/Driver/riscv64-toolchain.c b/clang/test/Driver/riscv64-toolchain.c +index e727f20bb601..a801e5eee462 100644 +--- a/clang/test/Driver/riscv64-toolchain.c ++++ b/clang/test/Driver/riscv64-toolchain.c +@@ -84,7 +84,7 @@ + // C-RV64-LINUX-MULTI-LP64: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot" + // C-RV64-LINUX-MULTI-LP64: "-m" "elf64lriscv" + // C-RV64-LINUX-MULTI-LP64: "-dynamic-linker" "/lib/ld-linux-riscv64-lp64.so.1" +-// C-RV64-LINUX-MULTI-LP64: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib64/lp64{{/|\\\\}}crtbegin.o" ++// C-RV64-LINUX-MULTI-LP64: "crtbeginS.o" + // C-RV64-LINUX-MULTI-LP64: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib64/lp64" + // C-RV64-LINUX-MULTI-LP64: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib64/lp64" + // C-RV64-LINUX-MULTI-LP64: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib64/lp64" +@@ -99,7 +99,7 @@ + // C-RV64-LINUX-MULTI-LP64D: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot" + // C-RV64-LINUX-MULTI-LP64D: "-m" "elf64lriscv" + // C-RV64-LINUX-MULTI-LP64D: "-dynamic-linker" "/lib/ld-linux-riscv64-lp64d.so.1" +-// C-RV64-LINUX-MULTI-LP64D: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib64/lp64d{{/|\\\\}}crtbegin.o" ++// C-RV64-LINUX-MULTI-LP64D: "crtbeginS.o" + // C-RV64-LINUX-MULTI-LP64D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib64/lp64d" + // C-RV64-LINUX-MULTI-LP64D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib64/lp64d" + // C-RV64-LINUX-MULTI-LP64D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib64/lp64d" +diff --git a/clang/test/Driver/stack-protector.c b/clang/test/Driver/stack-protector.c +index a3e40b50eed8..dfffe0d6cf85 100644 +--- a/clang/test/Driver/stack-protector.c ++++ b/clang/test/Driver/stack-protector.c +@@ -3,11 +3,11 @@ + // NOSSP-NOT: "-stack-protector-buffer-size" + + // RUN: %clang -target i386-unknown-linux -fstack-protector -### %s 2>&1 | FileCheck %s -check-prefix=SSP +-// SSP: "-stack-protector" "1" ++// SSP: "-stack-protector" "2" + // SSP-NOT: "-stack-protector-buffer-size" + + // RUN: %clang -target i386-unknown-linux -fstack-protector --param ssp-buffer-size=16 -### %s 2>&1 | FileCheck %s -check-prefix=SSP-BUF +-// SSP-BUF: "-stack-protector" "1" ++// SSP-BUF: "-stack-protector" "2" + // SSP-BUF: "-stack-protector-buffer-size" "16" + + // RUN: %clang -target i386-pc-openbsd -### %s 2>&1 | FileCheck %s -check-prefix=OPENBSD diff --git a/x86_64/extra/clang/03.patch b/x86_64/extra/clang/03.patch new file mode 100644 index 0000000..2de6ba6 --- /dev/null +++ b/x86_64/extra/clang/03.patch @@ -0,0 +1,59 @@ +From 0a14674f276b598d23353290635fc62f93e9ab30 Mon Sep 17 00:00:00 2001 +From: Peter Collingbourne +Date: Fri, 3 Dec 2021 14:48:57 -0500 +Subject: [PATCH] CodeGen: Strip exception specifications from function types + in CFI type names. + +With C++17 the exception specification has been made part of the +function type, and therefore part of mangled type names. + +However, it's valid to convert function pointers with an exception +specification to function pointers with the same argument and return +types but without an exception specification, which means that e.g. a +function of type "void () noexcept" can be called through a pointer +of type "void ()". We must therefore consider the two types to be +compatible for CFI purposes. + +We can do this by stripping the exception specification before mangling +the type name, which is what this patch does. + +Differential Revision: https://reviews.llvm.org/D115015 +--- + clang/lib/CodeGen/CodeGenModule.cpp | 5 +++++ + clang/test/CodeGenCXX/cfi-icall-noexcept.cpp | 11 +++++++++++ + 2 files changed, 16 insertions(+) + create mode 100644 clang/test/CodeGenCXX/cfi-icall-noexcept.cpp + +diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp +index 9ba1a5c25e81a..39044617d6774 100644 +--- a/clang/lib/CodeGen/CodeGenModule.cpp ++++ b/clang/lib/CodeGen/CodeGenModule.cpp +@@ -6398,6 +6398,11 @@ void CodeGenModule::EmitOMPThreadPrivateDecl(const OMPThreadPrivateDecl *D) { + llvm::Metadata * + CodeGenModule::CreateMetadataIdentifierImpl(QualType T, MetadataTypeMap &Map, + StringRef Suffix) { ++ if (auto *FnType = T->getAs()) ++ T = getContext().getFunctionType( ++ FnType->getReturnType(), FnType->getParamTypes(), ++ FnType->getExtProtoInfo().withExceptionSpec(EST_None)); ++ + llvm::Metadata *&InternalId = Map[T.getCanonicalType()]; + if (InternalId) + return InternalId; +diff --git a/clang/test/CodeGenCXX/cfi-icall-noexcept.cpp b/clang/test/CodeGenCXX/cfi-icall-noexcept.cpp +new file mode 100644 +index 0000000000000..eabc4862b4c52 +--- /dev/null ++++ b/clang/test/CodeGenCXX/cfi-icall-noexcept.cpp +@@ -0,0 +1,11 @@ ++// RUN: %clang_cc1 -triple x86_64-unknown-linux -fsanitize=cfi-icall -emit-llvm -std=c++17 -o - %s | FileCheck %s ++ ++// Tests that exception specifiers are stripped when forming the ++// mangled CFI type name. ++ ++void f() noexcept {} ++ ++// CHECK: define{{.*}} void @_Z1fv({{.*}} !type [[TS1:![0-9]+]] !type [[TS2:![0-9]+]] ++ ++// CHECK: [[TS1]] = !{i64 0, !"_ZTSFvvE"} ++// CHECK: [[TS2]] = !{i64 0, !"_ZTSFvvE.generalized"} diff --git a/x86_64/extra/clang/PKGBUILD b/x86_64/extra/clang/PKGBUILD new file mode 100644 index 0000000..1bc2b40 --- /dev/null +++ b/x86_64/extra/clang/PKGBUILD @@ -0,0 +1,67 @@ +pkgname=clang +pkgver=13.0.1 +pkgrel=1 +makedepends=('cmake' 'python3' 'llvm') +depends=('llvm' 'compiler-rt') +arch=('x86_64') +psource=https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver +source=($psource/$pkgname-$pkgver.src.tar.xz + $psource/clang-tools-extra-$pkgver.src.tar.xz + $psource/llvm-$pkgver.src.tar.xz + 01.patch + 02.patch + 03.patch) + +prepare() { + cd $pkgname-$pkgver.src + mkdir -p build + + mv $srcdir/clang-tools-extra-$pkgver.src tools/extra + + patch -Np2 -i ../01.patch + patch -Np2 -i ../02.patch + patch -Np2 -i ../03.patch + + 2to3 -wn --no-diffs \ + tools/extra/clang-include-fixer/find-all-symbols/tool/run-find-all-symbols.py +} + +build() { + cd $pkgname-$pkgver.src/build + + cmake .. -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCLANG_LINK_CLANG_DYLIB=ON \ + -DLLVM_LINK_LLVM_DYLIB=ON \ + -DLLVM_ENABLE_RTTI=ON \ + -DLLVM_EXTERNAL_LIB=/usr/bin/lit \ + -DLLVM_MAIN_SRC_DIR="$srcdir/llvm-$pkgver.src" + + ninja +} + +python_optimize() { + python3 -m compileall "$@" + python3 -O -m compileall "$@" + python -OO -m compileall "$@" +} + +package() { + cd $pkgname-$pkgver.src/build + + DESTDIR=$pkgdir ninja install + + local site_packages=$(python3 -c "import site; print(site.getsitepackages()[0])") + install -d "$pkgdir/$site_packages" + mv "$pkgdir"/usr/lib/{libear,libscanbuild} "$pkgdir/$site_packages" + cp -a ../bindings/python/clang "$pkgdir/$site_packages/" + + mv "$pkgdir"/usr/libexec/* "$pkgdir/usr/lib/clang" + rm -rf "$pkgdir/usr/libexec" + sed -i 's|libexec|lib/clang|' \ + "$pkgdir/usr/bin/scan-build" \ + "$pkgdir/$site_packages/libscanbuild/analyze.py" + + python_optimize "$pkgdir/usr/share" "$pkgdir/$site_packages" +} diff --git a/x86_64/extra/cmake/PKGBUILD b/x86_64/extra/cmake/PKGBUILD new file mode 100644 index 0000000..d0c895d --- /dev/null +++ b/x86_64/extra/cmake/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=cmake +pkgver=3.23.2 +pkgrel=1 +arch=('x86_64') +depends=('curl' 'hicolor-icon-theme' 'expat' 'nghttp2' 'jsoncpp' 'libuv' 'libarchive' 'gcc' 'zstd') +source=(https://cmake.org/files/v3.23/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + sed -i '/"lib64"/s/64//' Modules/GNUInstallDirs.cmake + + ./configure \ + --prefix=/usr \ + --system-libs \ + --system-zstd \ + --system-zlib \ + --system-jsoncpp \ + --system-curl \ + --system-nghttp2 \ + --no-qt-gui \ + --no-system-librhash + + make -j6 +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/cmocka/PKGBUILD b/x86_64/extra/cmocka/PKGBUILD new file mode 100644 index 0000000..7eeefe7 --- /dev/null +++ b/x86_64/extra/cmocka/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=cmocka +pkgver=1.1.5 +pkgrel=1 +arch=('x86_64') +depends=('glibc') +makedepends=('cmake') +source=(https://cmocka.org/files/1.1/cmocka-${pkgver}.tar.xz) + +prepare() { + cd ${pkgname}-${pkgver} + mkdir build +} + +build() { + cd ${pkgname}-${pkgver}/build + + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_BUILD_TYPE=Release \ + -DUNIT_TESTING=ON + + make +} + +package() { + cd ${pkgname}-${pkgver}/build + + make install DESTDIR="${pkgdir}" +} diff --git a/x86_64/extra/colord/PKGBUILD b/x86_64/extra/colord/PKGBUILD new file mode 100644 index 0000000..1a40123 --- /dev/null +++ b/x86_64/extra/colord/PKGBUILD @@ -0,0 +1,39 @@ +pkgname=colord +pkgver=master +pkgrel=1 +arch=('x86_64') +depends=(libgudev lcms sqlite3 libgusb) +source=(git+https://github.com/hughsie/colord) + +prepare() { + cd colord +} + +spick() { + local p="$1" f d; shift + for f; do + d="$srcdir/$p/${f#$pkgdir/}" + mkdir -p "$(dirname "$d")" + mv "$f" "$d" + rmdir -p --ignore-fail-on-non-empty "$(dirname "$f")" + done +} + +build() { + meson colord build \ + --prefix=/usr \ + -D libcolordcompat=true \ + -D sane=false \ + -D vapi=true \ + -D daemon_user=colord \ + -D docs=false + + meson compile -C build +} + +package() { + meson install -C build --destdir $pkgdir + + echo 'u colord - "Color managment daemon" /var/lib/colord' | + install -Dm644 /dev/stdin $pkgdir/usr/lib/sysusers.d/colord.conf +} diff --git a/x86_64/extra/compiler-rt/PKGBUILD b/x86_64/extra/compiler-rt/PKGBUILD new file mode 100644 index 0000000..01cf529 --- /dev/null +++ b/x86_64/extra/compiler-rt/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=compiler-rt +pkgver=13.0.1 +pkgrel=2 +makedepends=('cmake' 'python3' 'llvm') +arch=('x86_64') +psource=https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver +source=($psource/$pkgname-$pkgver.src.tar.xz) + +prepare() { + cd $pkgname-$pkgver.src + mkdir -p build +} + +build() { + cd $pkgname-$pkgver.src/build + + cmake .. -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr + + ninja +} + +package() { + cd $pkgname-$pkgver.src/build + + DESTDIR=$pkgdir ninja install + + cd $pkgdir/usr/lib + ln -sf linux wasi +} diff --git a/x86_64/extra/confuse/PKGBUILD b/x86_64/extra/confuse/PKGBUILD new file mode 100644 index 0000000..a794ee9 --- /dev/null +++ b/x86_64/extra/confuse/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=confuse +pkgver=3.3 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +source=(https://github.com/libconfuse/libconfuse/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-shared + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/consolekit/PKGBUILD b/x86_64/extra/consolekit/PKGBUILD new file mode 100644 index 0000000..a4145f6 --- /dev/null +++ b/x86_64/extra/consolekit/PKGBUILD @@ -0,0 +1,45 @@ +pkgname=consolekit +rpkgname=ConsoleKit2 +pkgver=1.2.1 +pkgrel=1 +pkgdesc="A framework for defining and tracking users, login sessions, and seats" +arch=(x86_64) +url="https://github.com/ConsoleKit2/ConsoleKit2" +makedepends=('acl' 'xmlto' 'docbook-xsl') +options=('libtool') +install=consolekit.install +depends=('dbus' 'glib2' 'libx11' 'libgudev' 'zlib') +source=("$url/releases/download/$pkgver/$rpkgname-$pkgver.tar.bz2" + 'consolekit.tmpfiles.conf') + +build(){ + cd $srcdir/$rpkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --sbindir=/usr/bin \ + --with-rundir=/run \ + --libexecdir=/usr/lib/ConsoleKit \ + --localstatedir=/var \ + --enable-polkit \ + --enable-pam-module \ + --enable-udev-acl \ + --enable-docbook-docs \ + --with-dbus-services=/usr/share/dbus-1/services \ + --with-xinitrc-dir=/etc/X11/xinit/xinitrc.d \ + --with-pam-module-dir=/usr/lib/security \ + --without-systemdsystemunitdir \ + --disable-cgroups + + make +} + +package() { + cd $srcdir/$rpkgname-$pkgver + make DESTDIR="$pkgdir" install + + install -Dm644 "$srcdir"/consolekit.tmpfiles.conf "$pkgdir"/usr/lib/tmpfiles.d/consolekit.conf + + rm -rf "${pkgdir}"/run +} diff --git a/x86_64/extra/consolekit/consolekit.install b/x86_64/extra/consolekit/consolekit.install new file mode 100644 index 0000000..b174e09 --- /dev/null +++ b/x86_64/extra/consolekit/consolekit.install @@ -0,0 +1,12 @@ +#!/bin/bash + +post_install() { + echo " You may add" + echo " -session optional pam_ck_connector.so nox11" + echo " to /etc/pam.d/system-login" + echo " to register tty sessions with ConsoleKit daemon." +} + +post_upgrade() { + post_install +} diff --git a/x86_64/extra/consolekit/consolekit.tmpfiles.conf b/x86_64/extra/consolekit/consolekit.tmpfiles.conf new file mode 100644 index 0000000..4ec1251 --- /dev/null +++ b/x86_64/extra/consolekit/consolekit.tmpfiles.conf @@ -0,0 +1 @@ +d /run/ConsoleKit 0755 - - - diff --git a/x86_64/extra/containerd/PKGBUILD b/x86_64/extra/containerd/PKGBUILD new file mode 100644 index 0000000..ac771e3 --- /dev/null +++ b/x86_64/extra/containerd/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=containerd +pkgver=1.5.9 +pkgrel=1 +arch=('x86_64') +depends=(runc) +makedepends=(go git libseccomp containers-common go-md2man btrfs-progs) +source=(git+https://github.com/containerd/containerd.git#tag=v${pkgver}) + +prepare() { + sed -i 's,/sbin,/usr/bin,;s,/usr/local,/usr,' $pkgname/containerd.service +} + +build() { + cd $pkgname + + export GOFLAGS="-trimpath -mod=readonly -modcacherw" + make VERSION=v$pkgver GO_BUILD_FLAGS="-trimpath -mod=readonly -modcacherw" GO_GCFLAGS="" EXTRA_LDFLAGS="-buildid=" + make VERSION=v$pkgver man +} + +package() { + cd $pkgname + + make DESTDIR=$pkgdir/usr install + + install -Dm644 containerd.service "$pkgdir"/usr/lib/systemd/system/containerd.service +} diff --git a/x86_64/extra/containers-common/PKGBUILD b/x86_64/extra/containers-common/PKGBUILD new file mode 100644 index 0000000..84f14a0 --- /dev/null +++ b/x86_64/extra/containers-common/PKGBUILD @@ -0,0 +1,103 @@ +pkgname=containers-common +pkgver=0.47.1 +pkgrel=1 +image_pkgver=5.19.0 +podman_pkgver=3.4.4 +skopeo_pkgver=1.5.2 +storage_pkgver=1.38.1 +arch=('x86_64') +makedepends=(go-md2man) +backup=(etc/containers/containers.conf + etc/containers/mounts.conf + etc/containers/policy.json + etc/containers/registries.conf + etc/containers/seccomp.json + etc/containers/storage.conf) +source=(common-${pkgver}.tar.gz::https://github.com/containers/common/archive/v${pkgver}.tar.gz + image-${image_pkgver}.tar.gz::https://github.com/containers/image/archive/v${image_pkgver}.tar.gz + podman-${podman_pkgver}.tar.gz::https://github.com/containers/podman/archive/v${podman_pkgver}.tar.gz + skopeo-${skopeo_pkgver}.tar.gz::https://github.com/containers/skopeo/archive/v${skopeo_pkgver}.tar.gz + storage-${storage_pkgver}.tar.gz::https://github.com/containers/storage/archive/v${storage_pkgver}.tar.gz + mounts.conf) + +prepare() { + sed -r 's/(GOMD2MAN = ).*/\1 go-md2man/' -i "storage-${storage_pkgver}/docs/Makefile" +} + +build() { + ( + cd "common-${pkgver}/docs" + for _man_page in *.md; do + go-md2man -in "$_man_page" -out "${_man_page//.md}" + done + ) + ( + cd "image-${image_pkgver}/docs" + mkdir -vp man5 + mv -v *.5.md man5/ + for _man_page in *.md; do + go-md2man -in "$_man_page" -out "${_man_page//.md}.1" + done + for _man_page in man5/*.md; do + go-md2man -in "$_man_page" -out "${_man_page//.md}" + done + ) + ( + cd "podman-${podman_pkgver}" + go-md2man -in pkg/hooks/docs/oci-hooks.5.md \ + -out oci-hooks.5 + ) + ( + cd "storage-${storage_pkgver}" + make -C docs + ) +} + +package() { + # directories + install -vdm 755 "${pkgdir}/etc/containers/oci/hooks.d/" + install -vdm 755 "${pkgdir}/etc/containers/registries.conf.d/" + install -vdm 755 "${pkgdir}/usr/share/containers/oci/hooks.d/" + install -vdm 755 "${pkgdir}/var/lib/containers/" + + # configs + install -vDm 644 mounts.conf -t "${pkgdir}/etc/containers/" + + ( + cd "common-${pkgver}" + # configs + install -vDm 644 pkg/config/containers.conf -t "${pkgdir}/etc/containers/" + install -vDm 644 pkg/config/containers.conf -t "${pkgdir}/usr/share/containers/" + install -vDm 644 pkg/seccomp/seccomp.json -t "${pkgdir}/etc/containers/" + install -vDm 644 pkg/seccomp/seccomp.json -t "${pkgdir}/usr/share/containers/" + # man pages + install -vDm 644 docs/*.5 -t "${pkgdir}/usr/share/man/man5/" + ) + ( + cd "image-${image_pkgver}" + # configs + install -vDm 644 registries.conf -t "${pkgdir}/etc/containers/" + # man pages + install -vDm 644 docs/*.1 -t "${pkgdir}/usr/share/man/man1/" + install -vDm 644 docs/man5/*.5 -t "${pkgdir}/usr/share/man/man5/" + ) + ( + cd "podman-${podman_pkgver}" + install -vDm 644 *.5 -t "${pkgdir}/usr/share/man/man5/" + ) + ( + cd "skopeo-${skopeo_pkgver}" + # configs + install -vDm 644 default-policy.json "${pkgdir}/etc/containers/policy.json" + install -vDm 644 default.yaml -t "${pkgdir}/etc/containers/registries.d/" + ) + ( + cd "storage-${storage_pkgver}" + # configs + install -vDm 644 storage.conf -t "${pkgdir}/etc/containers/" + install -vDm 644 storage.conf -t "${pkgdir}/usr/share/containers/" + # man pages + install -vDm 644 docs/*.1 -t "${pkgdir}/usr/share/man/man1/" + install -vDm 644 docs/*.5 -t "${pkgdir}/usr/share/man/man5/" + ) +} diff --git a/x86_64/extra/containers-common/mounts.conf b/x86_64/extra/containers-common/mounts.conf new file mode 100644 index 0000000..c3ae13c --- /dev/null +++ b/x86_64/extra/containers-common/mounts.conf @@ -0,0 +1,2 @@ +# Configuration file for default mounts in containers (see man 5 +# containers-mounts.conf for further information) diff --git a/x86_64/extra/cppunit/PKGBUILD b/x86_64/extra/cppunit/PKGBUILD new file mode 100644 index 0000000..42feba8 --- /dev/null +++ b/x86_64/extra/cppunit/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=cppunit +pkgver=1.15.1 +pkgrel=1 +arch=('x86_64') +depends=('gcc') +makedepends=('doxygen') +options=('!emptydirs') +source=(https://dev-www.libreoffice.org/src/${pkgname}-${pkgver}.tar.gz) +build() { + cd ${pkgname}-${pkgver} + + ./configure --prefix=/usr + + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install +} diff --git a/x86_64/extra/cracklib/PKGBUILD b/x86_64/extra/cracklib/PKGBUILD new file mode 100644 index 0000000..92d5280 --- /dev/null +++ b/x86_64/extra/cracklib/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=cracklib +pkgver=2.9.7 +pkgrel=1 +arch=('x86_64') +depends=('glibc' 'zlib' 'python3') +source=(https://github.com/cracklib/cracklib/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --sbindir=/usr/bin + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + + # symlink cracklib-small #34778 + mkdir -p "$pkgdir"/usr/share/dict + ln -sf /usr/share/cracklib/cracklib-small "$pkgdir"/usr/share/dict/cracklib-small + + sh ./util/cracklib-format dicts/cracklib-small \ + | sh ./util/cracklib-packer "$pkgdir"/usr/share/cracklib/pw_dict +} \ No newline at end of file diff --git a/x86_64/extra/criu/PKGBUILD b/x86_64/extra/criu/PKGBUILD new file mode 100644 index 0000000..9e862a0 --- /dev/null +++ b/x86_64/extra/criu/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=criu +pkgver=3.16.1 +pkgrel=1 +arch=('x86_64') +depends=(libbsd libnet libnl protobuf-c gnutls nftables) +makedepends=(xmlto asciidoc) +source=($pkgname-$pkgver.tar.gz::https://github.com/checkpoint-restore/criu/archive/v$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + make +} + +package() { + cd $pkgname-$pkgver + + make \ + DESTDIR=$pkgdir \ + PREFIX=/usr \ + LIBDIR=/usr/lib \ + LIBEXECDIR=/usr/libexec \ + install + + rm -r $pkgdir/usr/include/compel/common/asm +} diff --git a/x86_64/extra/cryptsetup/PKGBUILD b/x86_64/extra/cryptsetup/PKGBUILD new file mode 100644 index 0000000..610bc43 --- /dev/null +++ b/x86_64/extra/cryptsetup/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=cryptsetup +pkgver=2.4.3 +pkgrel=1 +arch=('x86_64') +depends=(popt lvm2 json-c) +makedepends=(gcc) +source=(https://www.kernel.org/pub/linux/utils/cryptsetup/v2.4/cryptsetup-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --disable-ssh-token + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/cups-filters/PKGBUILD b/x86_64/extra/cups-filters/PKGBUILD new file mode 100644 index 0000000..c3ca92a --- /dev/null +++ b/x86_64/extra/cups-filters/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=cups-filters +pkgver=1.28.15 +pkgrel=1 +arch=('x86_64') +depends=('lcms' 'poppler' 'cups' 'systemd' 'libpng' + 'libtiff' 'libjpeg' 'qpdf' 'avahi' 'ghostscript' 'mupdf') +makedepends=('python3') +backup=(etc/cups/cups-browsed.conf) +source=(https://www.openprinting.org/download/cups-filters/$pkgname-$pkgver.tar.xz) + +build() { + cd "$pkgname"-$pkgver + + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --sbindir=/usr/bin \ + --localstatedir=/var \ + --with-rcdir=no \ + --with-browseremoteprotocols=DNSSD,CUPS \ + --enable-auto-setup-driverless + + make +} + +package() { + cd "$pkgname"-$pkgver + make DESTDIR="$pkgdir/" install + + # add upstream systemd support file + install -Dm644 utils/cups-browsed.service "${pkgdir}"/usr/lib/systemd/system/cups-browsed.service + sed -i "s|/usr/sbin/cups-browsed|/usr/bin/cups-browsed|" "${pkgdir}"/usr/lib/systemd/system/cups-browsed.service + + # use cups group from cups pkg FS#56818 + chgrp -R 209 "${pkgdir}"/etc/cups +} diff --git a/x86_64/extra/cups-pk-helper/PKGBUILD b/x86_64/extra/cups-pk-helper/PKGBUILD new file mode 100644 index 0000000..1ed4916 --- /dev/null +++ b/x86_64/extra/cups-pk-helper/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=cups-pk-helper +pkgver=0.2.6 +pkgrel=2 +arch=(x86_64) +depends=(cups polkit) +makedepends=(intltool) +source=(https://www.freedesktop.org/software/$pkgname/releases/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --libexecdir=/usr/lib/$pkgname + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + # fix dbus policy location - --with-dbusdir doens't work + install -dm755 $pkgdir/usr/share/dbus-1/system.d + mv $pkgdir/etc/dbus-1/system.d/* $pkgdir/usr/share/dbus-1/system.d + rm -rf $pkgdir/etc/dbus-1 +} diff --git a/x86_64/extra/cups/PKGBUILD b/x86_64/extra/cups/PKGBUILD new file mode 100644 index 0000000..67beb95 --- /dev/null +++ b/x86_64/extra/cups/PKGBUILD @@ -0,0 +1,90 @@ +pkgname=cups +pkgver=2.4.2 +pkgrel=2 +arch=('x86_64') +depends=(libtiff cups-filters libpng acl linux-pam xdg-utils gnutls bc colord gzip + autoconf libusb dbus hicolor-icon-theme systemd samba avahi) +makedepends=(git) +source=(https://github.com/OpenPrinting/cups/releases/download/v$pkgver/cups-$pkgver-source.tar.gz + cups.logrotate + cups.pam + cups.sysusers + cups-2.4.0-statedir.patch + # bugfixes + cups-freebind.patch + guid.patch) + +prepare() { + cd $pkgname-$pkgver + + sed -e "s/format-truncation//" \ + -i configure \ + config-scripts/cups-compiler.m4 + + # Rebuild configure script + aclocal -I config-scripts + autoconf -I config-scripts +} + +build() { + cd $pkgname-$pkgver + + export DSOFLAGS=${LDFLAGS} + + ./configure \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --libdir=/usr/lib \ + --sbindir=/usr/sbin \ + --runstatedir=/run \ + --with-logdir=/var/log/cups \ + --with-docdir=/var/share/cups/etc \ + --with-exe-file-perm=0755 \ + --enable-dbus \ + --with-cups-user=209 \ + --with-cups-group=209 \ + --enable-pam=yes \ + --enable-raw-printing + + make +} + +package() { + cd $pkgname-$pkgver + + mkdir -p $pkgdir/etc/cups/ + echo "ServerName /run/cups/cups.sock" > $pkgdir/etc/cups/client.conf + + make BUILDROOT=$pkgdir install install-data install-exec install-headers install-libs + + install -m755 "${srcdir}"/"${pkgbase}"-${pkgver}/cups-config "${pkgdir}"/usr/bin/cups-config + + cp -rf $pkgdir/var/run $pkgdir/run + rm -rf $pkgdir/var/run + + # fix perms on /var/spool and /etc + chmod 755 "${pkgdir}"/var/spool + chmod 755 "${pkgdir}"/etc + + # kill the sysv stuff + rm -rf "${pkgdir}"/etc/rc*.d "${pkgdir}"/etc/init.d + install -D -m644 ../cups.logrotate "${pkgdir}"/etc/logrotate.d/cups + install -D -m644 ../cups.pam "${pkgdir}"/etc/pam.d/cups + + # use cups group + install -Dm644 "$srcdir"/cups.sysusers "${pkgdir}/usr/lib/sysusers.d/$pkgname.conf" + sed -i "s:#User 209:User 209:" "${pkgdir}"/etc/cups/cups-files.conf{,.default} + sed -i "s:#Group 209:Group 209:" "${pkgdir}"/etc/cups/cups-files.conf{,.default} + + # install some more configuration files that will get filled by cupsd + touch "${pkgdir}"/etc/cups/printers.conf + touch "${pkgdir}"/etc/cups/classes.conf + touch "${pkgdir}"/etc/cups/subscriptions.conf + chgrp -R 209 "${pkgdir}"/etc/cups + + # fix .desktop file + sed -i 's|^Exec=htmlview http://localhost:631/|Exec=xdg-open http://localhost:631/|g' "${pkgdir}"/usr/share/applications/cups.desktop + + # install ssl directory where to store the certs, solves some samba issues + install -dm700 -g 209 "${pkgdir}"/etc/cups/ssl +} diff --git a/x86_64/extra/cups/cups-2.4.0-statedir.patch b/x86_64/extra/cups/cups-2.4.0-statedir.patch new file mode 100644 index 0000000..c6d0303 --- /dev/null +++ b/x86_64/extra/cups/cups-2.4.0-statedir.patch @@ -0,0 +1,11 @@ +--- cups-2.4.0/config-scripts/cups-directories.m4 2021-11-29 16:12:17.094244942 +0100 ++++ cups-2.4.0/config-scripts/cups-directories.m4.new 2021-11-29 16:15:16.958747398 +0100 +@@ -268,7 +268,7 @@ + CUPS_STATEDIR="$CUPS_SERVERROOT" + ], [*], [ + # All others +- CUPS_STATEDIR="$localstatedir/run/cups" ++ CUPS_STATEDIR="/run/cups" + ]) + ]) + AC_DEFINE_UNQUOTED([CUPS_STATEDIR], ["$CUPS_STATEDIR"], [Location of transient state files.]) diff --git a/x86_64/extra/cups/cups-freebind.patch b/x86_64/extra/cups/cups-freebind.patch new file mode 100644 index 0000000..6d9ba43 --- /dev/null +++ b/x86_64/extra/cups/cups-freebind.patch @@ -0,0 +1,15 @@ +diff -up cups-2.0.2/cups/http-addr.c.freebind cups-2.0.2/cups/http-addr.c +--- cups-2.0.2/cups/http-addr.c.freebind 2015-02-10 14:46:33.000000000 +0100 ++++ cups-2.0.2/cups/http-addr.c 2015-02-10 14:50:35.074759141 +0100 +@@ -186,6 +186,10 @@ httpAddrListen(http_addr_t *addr, /* I - + val = 1; + setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, CUPS_SOCAST &val, sizeof(val)); + ++#ifdef __linux ++ setsockopt(fd, IPPROTO_IP, IP_FREEBIND, CUPS_SOCAST &val, sizeof(val)); ++#endif /* __linux */ ++ + #ifdef IPV6_V6ONLY + if (addr->addr.sa_family == AF_INET6) + setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, CUPS_SOCAST &val, sizeof(val)); +diff -up cups-2.0.2/scheduler/listen.c.freebind cups-2.0.2/scheduler/listen.c diff --git a/x86_64/extra/cups/cups.install b/x86_64/extra/cups/cups.install new file mode 100644 index 0000000..017cc4d --- /dev/null +++ b/x86_64/extra/cups/cups.install @@ -0,0 +1,28 @@ +post_install() { + echo ">> If you use an HTTPS connection to CUPS, the first time you access" + echo ">> the interface it may take a very long time before the site comes up." + echo ">> This is because the first request triggers the generation of the CUPS" + echo ">> SSL certificates which can be a very time-consuming job." +} + +post_upgrade() { + # FS#56818 - make sure we change the ownership to the new cups group + if [[ $(vercmp 2.2.6-3 $2) = 1 ]]; then + chgrp -R 209 /etc/cups + echo "Cups daemon is now running under \"cups\" user+group." + echo "Please make sure to enable the new user+group change in" + echo "/etc/cups/cups-files.conf or merge changes from" + echo "/etc/cups/cups-files.conf.default. After a service restart" + echo "make sure /etc/cups and all files within are owned by" + echo "cups group - run \"chgrp -R cups /etc/cups\"." + fi + + # upstream reverted back to common old naming scheme + if [[ $(vercmp 2.3.3+105+g59137acc1-1 $2) = 1 ]]; then + echo ">>> Cups systemd socket and service files have been" + echo ">>> renamed by upstream decision. Please make sure" + echo ">>> to disable/reenable the services to your need." + echo ">>> hint: \"pacman -Ql cups | grep systemd\" and" + echo ">>> \"ls -lR /etc/systemd/ | grep cups\" " + fi +} diff --git a/x86_64/extra/cups/cups.logrotate b/x86_64/extra/cups/cups.logrotate new file mode 100644 index 0000000..19e1210 --- /dev/null +++ b/x86_64/extra/cups/cups.logrotate @@ -0,0 +1,5 @@ +/var/log/cups/*_log { + missingok + notifempty + sharedscripts +} diff --git a/x86_64/extra/cups/cups.pam b/x86_64/extra/cups/cups.pam new file mode 100644 index 0000000..53724d1 --- /dev/null +++ b/x86_64/extra/cups/cups.pam @@ -0,0 +1,3 @@ +auth required pam_unix.so +account required pam_unix.so +session required pam_unix.so diff --git a/x86_64/extra/cups/cups.sysusers b/x86_64/extra/cups/cups.sysusers new file mode 100644 index 0000000..4ab9d59 --- /dev/null +++ b/x86_64/extra/cups/cups.sysusers @@ -0,0 +1,2 @@ +u cups 209 "cups helper user" +m cups lp diff --git a/x86_64/extra/cups/guid.patch b/x86_64/extra/cups/guid.patch new file mode 100644 index 0000000..b1bd192 --- /dev/null +++ b/x86_64/extra/cups/guid.patch @@ -0,0 +1,39 @@ +--- cups-2.4.0/scheduler/cups-exec.c 2021-11-29 16:19:34.235186064 +0100 ++++ cups-2.4.0/scheduler/cups-exec.c.new 2021-11-29 16:25:30.764049649 +0100 +@@ -134,9 +134,14 @@ main(int argc, /* I - Number of command-line args */ + # if CUPS_SNAP + if (setgroups(0, NULL)) + # else +- if (setgroups(1, &gid)) +-# endif /* CUPS_SNAP */ ++#include ++ struct passwd * pwd = getpwuid(uid); ++ if(initgroups(pwd->pw_name,pwd->pw_gid)) ++ { ++ fprintf(stderr, "DEBUG: initgroups failed\n"); + exit(errno + 100); ++ } ++# endif /* CUPS_SNAP */ + + if (uid && setuid(uid)) + exit(errno + 100); +--- cups-2.4.0/scheduler/util.c 2021-11-29 15:27:31.000000000 +0100 ++++ cups-2.4.0/scheduler/util.c.new 2021-11-29 16:29:58.810719066 +0100 +@@ -296,7 +296,16 @@ + */ + + if (!getuid() && user) +- setuid(user); /* Run as restricted user */ ++ { ++#include ++ struct passwd * pwd = getpwuid(user); ++ if(initgroups(pwd->pw_name,pwd->pw_gid)) ++ { ++ fprintf(stderr, "DEBUG: initgroups failed\n"); ++ exit(errno + 100); ++ } ++ setuid(user); /* Run as restricted user */ ++ } + + if ((fd = open("/dev/null", O_RDONLY)) > 0) + { diff --git a/x86_64/extra/db/PKGBUILD b/x86_64/extra/db/PKGBUILD new file mode 100644 index 0000000..a2fc7a6 --- /dev/null +++ b/x86_64/extra/db/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=db +pkgver=5.3.28 +pkgrel=1 +pkgdesc="The Berkeley DB embedded database system" +arch=('x86_64') +depends=('glibc' 'bash' 'gnutls') +source=(https://download.oracle.com/berkeley-db/db-${pkgver}.tar.gz + atomic.patch) + +prepare() { + cd $pkgname-$pkgver + + patch -p0 -i ../atomic.patch # Fix build +} + +build() { + cd "${srcdir}"/$pkgname-${pkgver}/build_unix + + ../dist/configure --prefix=/usr --enable-compat185 \ + --enable-shared --enable-static --enable-cxx --enable-dbm \ + --enable-stl + + make LIBSO_LIBS=-lpthread +} + +package() { + cd "${srcdir}"/$pkgname-${pkgver}/build_unix + + make DESTDIR="${pkgdir}" install + rm -r "${pkgdir}"/usr/docs +} diff --git a/x86_64/extra/db/atomic.patch b/x86_64/extra/db/atomic.patch new file mode 100644 index 0000000..398aa1d --- /dev/null +++ b/x86_64/extra/db/atomic.patch @@ -0,0 +1,20 @@ +--- src/dbinc/atomic.h 2013-03-12 14:07:22.000000000 -0400 ++++ src/dbinc/atomic.h.change 2013-03-12 14:06:35.000000000 -0400 +@@ -144,7 +144,7 @@ + #define atomic_inc(env, p) __atomic_inc(p) + #define atomic_dec(env, p) __atomic_dec(p) + #define atomic_compare_exchange(env, p, o, n) \ +- __atomic_compare_exchange((p), (o), (n)) ++ __atomic_compare_exchange_db((p), (o), (n)) + static inline int __atomic_inc(db_atomic_t *p) + { + int temp; +@@ -176,7 +176,7 @@ + * http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html + * which configure could be changed to use. + */ +-static inline int __atomic_compare_exchange( ++static inline int __atomic_compare_exchange_db( + db_atomic_t *p, atomic_value_t oldval, atomic_value_t newval) + { + atomic_value_t was; diff --git a/x86_64/extra/dbus-glib/PKGBUILD b/x86_64/extra/dbus-glib/PKGBUILD new file mode 100644 index 0000000..87c75ef --- /dev/null +++ b/x86_64/extra/dbus-glib/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=dbus-glib +pkgver=0.112 +pkgrel=1 +arch=('x86_64') +depends=('dbus' 'glib2') +source=(https://dbus.freedesktop.org/releases/$pkgname/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/dconf/PKGBUILD b/x86_64/extra/dconf/PKGBUILD new file mode 100644 index 0000000..758ac3b --- /dev/null +++ b/x86_64/extra/dconf/PKGBUILD @@ -0,0 +1,47 @@ +pkgname=dconf +epkgname=dconf-editor +pkgver=0.40.0 +epkgver=3.38.3 +gver=0.40 +pkgrel=1 +arch=('x86_64') +depends=('glib2' 'gobject-introspection' 'dbus' 'gtk+' 'libxml2' 'libxslt' 'vala' 'gtk-doc') +source=(https://download.gnome.org/sources/$pkgname/$gver/$pkgname-$pkgver.tar.xz + https://download.gnome.org/sources/$epkgname/3.38/$epkgname-$epkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + --buildtype=release \ + .. + + ninja + + # DConf Editor + cd $srcdir/$epkgname-$epkgver + + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + --buildtype=release \ + .. + + ninja +} + +package() { + # DConf + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install + + # DConf Editor + cd $srcdir/$epkgname-$epkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/desktop-file-utils/PKGBUILD b/x86_64/extra/desktop-file-utils/PKGBUILD new file mode 100644 index 0000000..921c05e --- /dev/null +++ b/x86_64/extra/desktop-file-utils/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=desktop-file-utils +pkgver=0.26 +pkgrel=1 +pkgdesc="Command line utilities for working with desktop entries" +arch=(x86_64) +url="https://www.freedesktop.org/wiki/Software/desktop-file-utils" +depends=(glib2) +makedepends=(git meson) +_commit=54cec012921e52eb66b6ee1a1f40f2e9c9849f7c # tags/0.26 +source=("git+https://gitlab.freedesktop.org/xdg/desktop-file-utils.git#commit=$_commit" + update-desktop-database.hook) + +prepare() { + cd $pkgname +} + +build() { + meson $pkgname build \ + --prefix=/usr + + meson compile -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + install -Dt "$pkgdir/usr/share/libalpm/hooks" -m644 *.hook +} \ No newline at end of file diff --git a/x86_64/extra/desktop-file-utils/update-desktop-database.hook b/x86_64/extra/desktop-file-utils/update-desktop-database.hook new file mode 100644 index 0000000..8dfbe24 --- /dev/null +++ b/x86_64/extra/desktop-file-utils/update-desktop-database.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/share/applications/*.desktop + +[Action] +Description = Updating the desktop file MIME type cache... +When = PostTransaction +Exec = /usr/bin/update-desktop-database --quiet \ No newline at end of file diff --git a/x86_64/extra/dialog/PKGBUILD b/x86_64/extra/dialog/PKGBUILD new file mode 100644 index 0000000..96ecb20 --- /dev/null +++ b/x86_64/extra/dialog/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=dialog +pkgver=1.3 +dver=20220526 +pkgrel=1 +arch=(x86_64) +depends=(ncurses) +makedepends=(gcc make) +source=(https://invisible-mirror.net/archives/$pkgname/$pkgname-$pkgver-$dver.tgz) + +build() { + cd $pkgname-$pkgver-$dver + + ./configure \ + --prefix=/usr \ + --enable-nls \ + --with-libtool \ + --with-ncursesw + + make -j4 +} + +package() { + cd $pkgname-$pkgver-$dver + + make DESTDIR="$pkgdir" install-full +} diff --git a/x86_64/extra/digidoc4-client/PKGBUILD b/x86_64/extra/digidoc4-client/PKGBUILD new file mode 100644 index 0000000..3889486 --- /dev/null +++ b/x86_64/extra/digidoc4-client/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=digidoc4-client +rname=DigiDoc4-Client +pkgver=4.2.12 +pkgrel=1 +arch=(x86_64) +depends=(qt5 libdigidocpp openldap pcsc-lite opensc double-conversion) +makedepends=(cmake make) + +prepare() { + rm -rf $rname + git clone --recursive https://github.com/open-eid/DigiDoc4-Client -b v$pkgver +} + +build() { + cd $rname + + cmake -B build -G Ninja \ + -D CMAKE_INSTALL_PREFIX=/usr +} + +package() { + cd $rname + + DESTDIR=$pkgdir ninja -C build install + + # FIX: could not find the program 'qdigidocclient' when right click sign doc is used + cd $pkgdir/usr/bin && ln -sf qdigidoc4 qdigidocclient +} diff --git a/x86_64/extra/directx-headers/PKGBUILD b/x86_64/extra/directx-headers/PKGBUILD new file mode 100644 index 0000000..cde68e0 --- /dev/null +++ b/x86_64/extra/directx-headers/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=directx-headers +pkgdesc="DirectX headers for using D3D12" +pkgver=1.602.0 +pkgrel=1 +arch=('x86_64') +makedepends=('meson') +source=(https://github.com/microsoft/DirectX-Headers/archive/refs/tags/v$pkgver.tar.gz) + +build() { + # LTO breaks mesa... + export CXXFLAGS="$CXXFLAGS -fno-lto" + + meson \ + --prefix=/usr \ + DirectX-Headers-$pkgver build \ + -Dbuild-test=false + + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build +} diff --git a/x86_64/extra/discount/PKGBUILD b/x86_64/extra/discount/PKGBUILD new file mode 100644 index 0000000..2398ec6 --- /dev/null +++ b/x86_64/extra/discount/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=discount +pkgver=2.2.7 +pkgrel=1 +arch=(x86_64) +source=($pkgname-$pkgver.tar.gz::"https://github.com/Orc/discount/archive/v$pkgver.tar.gz" + discount-ldflags.patch::"https://github.com/Orc/discount/commit/55cea9c5.patch") + +prepare() { + patch -d $pkgname-$pkgver -p1 -i ../discount-ldflags.patch # Honor system ldflags +} + +build() { + cd $pkgname-$pkgver + + ./configure.sh --prefix=/usr --enable-all-features --with-fenced-code --shared + + make -j1 +} + +package() { + cd $pkgname-$pkgver + + # fix ldconfig call + sed -e 's|/sbin/ldconfig|/sbin/ldconfig -n|' -i librarian.sh + + make DESTDIR="$pkgdir" install.everything + install -Dm644 COPYRIGHT "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} \ No newline at end of file diff --git a/x86_64/extra/discount/discount-ldflags.patch b/x86_64/extra/discount/discount-ldflags.patch new file mode 100644 index 0000000..79753b4 --- /dev/null +++ b/x86_64/extra/discount/discount-ldflags.patch @@ -0,0 +1,32 @@ +From 55cea9c59fb35999f186f44af40f512d7f23871b Mon Sep 17 00:00:00 2001 +From: Balint Reczey +Date: Sat, 10 Oct 2020 21:21:48 +0200 +Subject: [PATCH] Honor system's LDFLAGS in librarian.sh + +Fixes #228. +--- + configure.inc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/configure.inc b/configure.inc +index 97ff6b94..ac0f973f 100755 +--- a/configure.inc ++++ b/configure.inc +@@ -1428,7 +1428,7 @@ LIBNAME=\$LIBRARY.dylib + FULLNAME=\$LIBNAME + + case "\$ACTION" in +-make) FLAGS="$AC_CFLAGS -dynamiclib" ++make) FLAGS="$AC_CFLAGS $AC_LDFLAGS -dynamiclib" + VFLAGS="-current_version \$VERSION -compatibility_version \$MAJOR" + + rm -f \$LIBRARY +@@ -1483,7 +1483,7 @@ LIBNAME=\$LIBRARY.so + FULLNAME=\$LIBNAME.\$VERSION + + case "\$ACTION" in +-make) FLAGS="$AC_CFLAGS -shared" ++make) FLAGS="$AC_CFLAGS $AC_LDFLAGS -shared" + unset VFLAGS + test "$USE_SONAME" && VFLAGS="-Wl,-soname,\$LIBNAME.\$MAJOR" + diff --git a/x86_64/extra/djvulibre/PKGBUILD b/x86_64/extra/djvulibre/PKGBUILD new file mode 100644 index 0000000..44473e1 --- /dev/null +++ b/x86_64/extra/djvulibre/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=djvulibre +pkgver=3.5.28_19.08.22_snapshot +pkgrel=1 +arch=(x86_64) +depends=(hicolor-icon-theme libtiff librsvg jbigkit) +makedepends=(make) +commitid=6a1e5ba1c9ef81c205a4b270c3f121a1e106f4fc +source=(https://sourceforge.net/code-snapshots/git/d/dj/djvu/djvulibre-git.git/djvu-djvulibre-git-$commitid.zip) + +prepare() { + cd djvu-$pkgname-git-$commitid + + autoreconf -f -i -v --warnings=all +} + +build() { + cd djvu-$pkgname-git-$commitid + + ./configure \ + --prefix=/usr +} + +package() { + cd djvu-$pkgname-git-$commitid + + make DESTDIR=$pkgdir install + for s in 22 32 48 64; do + install -Dm644 desktopfiles/prebuilt-hi${s}-djvu.png "${pkgdir}/usr/share/icons/hicolor/${s}x${s}/mimetypes/image-vnd.djvu.mime.png" + done +} diff --git a/x86_64/extra/dkms/PKGBUILD b/x86_64/extra/dkms/PKGBUILD new file mode 100644 index 0000000..2880faf --- /dev/null +++ b/x86_64/extra/dkms/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=dkms +pkgver=3.0.3 +pkgrel=2 +arch=(x86_64) +depends=(gcc glibc coreutils gawk sed kmod make patch) +makedepends=(git gcc) +backup=(etc/dkms/framework.conf) +source=(git+https://github.com/dell/dkms.git#tag=v$pkgver + dkms.install + dkms.upgrade + dkms.remove + dkms.sh) + +package() { + cd $pkgname + + install -D -m 644 $srcdir/dkms.install "$pkgdir/usr/share/libalpm/hooks/70-dkms-install.hook" + install -D -m 644 $srcdir/dkms.upgrade "$pkgdir/usr/share/libalpm/hooks/70-dkms-upgrade.hook" + install -D -m 644 $srcdir/dkms.remove "$pkgdir/usr/share/libalpm/hooks/71-dkms-remove.hook" + install -D -m 755 $srcdir/dkms.sh "$pkgdir/usr/share/libalpm/scripts/dkms" + + make \ + DESTDIR=$pkgdir \ + BASHDIR=$pkgdir/usr/share/bash-completion/completions \ + KCONF=$srcdir/trash \ + LIBDIR=$srcdir/trash \ + install +} diff --git a/x86_64/extra/dkms/dkms.install b/x86_64/extra/dkms/dkms.install new file mode 100644 index 0000000..58d65d1 --- /dev/null +++ b/x86_64/extra/dkms/dkms.install @@ -0,0 +1,14 @@ +[Trigger] +Operation = Install +Operation = Upgrade +Type = Path +Target = usr/src/*/dkms.conf +Target = lib/modules/*/build/include/ +Target = lib/modules/*/modules.alias + +[Action] +Description = Install DKMS modules +Depends = dkms +When = PostTransaction +Exec = /usr/share/libalpm/scripts/dkms install +NeedsTargets diff --git a/x86_64/extra/dkms/dkms.remove b/x86_64/extra/dkms/dkms.remove new file mode 100644 index 0000000..9d07a9c --- /dev/null +++ b/x86_64/extra/dkms/dkms.remove @@ -0,0 +1,13 @@ +[Trigger] +Operation = Remove +Type = Path +Target = usr/src/*/dkms.conf +Target = lib/modules/*/build/include/ +Target = lib/modules/*/modules.alias + +[Action] +Description = Remove DKMS modules +Depends = dkms +When = PreTransaction +Exec = /usr/share/libalpm/scripts/dkms remove +NeedsTargets diff --git a/x86_64/extra/dkms/dkms.sh b/x86_64/extra/dkms/dkms.sh new file mode 100644 index 0000000..99659d4 --- /dev/null +++ b/x86_64/extra/dkms/dkms.sh @@ -0,0 +1,303 @@ +#!/bin/bash + +# +# Copyright © 2018-2021, Sébastien Luttringer +# +# 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. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# display what to run and run it quietly +run() { + echo "==> $*" + "$@" > /dev/null + local ret=$? + (( $ret )) && echo "==> WARNING: \`$*' exited $ret" + return $ret +} + +# check whether the dependencies of a module are installed +# $1: module name +# $2: module version +# $3: kernel version +check_dependency() { ( + source "$source_tree/$1-$2/dkms.conf" + local mod lines line + for mod in "${BUILD_DEPENDS[@]}"; do + mapfile lines < <(dkms status -m "$mod" -k "$3") + for line in "${lines[@]}"; do + [[ "$line" =~ "$mod/"[^,]+", $3, "[^:]+': installed' ]] && break 2 + done + exit 1 + done + exit 0 +) } + +# check whether the modules should be built with this kernel version +# $1: module name +# $2: module version +# $3: kernel version +check_buildexclusive() { + local BUILD_EXCLUSIVE_KERNEL=$(source "$source_tree/$1-$2/dkms.conf"; printf '%s\n' "$BUILD_EXCLUSIVE_KERNEL") + [[ "$3" =~ $BUILD_EXCLUSIVE_KERNEL ]] +} + +# list all kernel versions +all_kver() { + pushd "$install_tree" >/dev/null + local path + for path in */build/; do + echo "${path%%/*}" + done + popd >/dev/null +} + +# list all module name/version for a specific kernel version +# $1: kernel version +all_nv_from_kver() { + local path + for path in "$source_tree"/*-*/dkms.conf; do + if [[ -f "$path" && "$path" =~ ^$source_tree/([^/]+)-([^/]+)/dkms\.conf$ ]]; then + echo "${BASH_REMATCH[1]}/${BASH_REMATCH[2]}" + fi + done +} + +# list of modules/version for installed/built kernel version +# $1: kernel version +built_nv_from_kver() { + local line + dkms status -k "$1" | while read -r line; do + if [[ "$line" =~ ^([^/]+/[^,]+)", $1, "[^:]+": "(built|installed) ]]; then + echo "${BASH_REMATCH[1]}" + fi + done +} + +# list installed or built kernel version for a specific module version +# $1 : module name/module version +built_kver_from_nv() { + local line + dkms status "$1" | while read -r line; do + if [[ "$line" =~ ^"$1, "([^,]+)", "[^:]+": "(built|installed) ]]; then + echo "${BASH_REMATCH[1]}" + fi + done +} + +# install registered modules +dkms_install() { + # list of modules to build for a specific kernel + local -A tobuild=() + + # add new/updated modules for all kernels to the build list + local nv kver + for nv in "${!DKMS_MODULES[@]}"; do + for kver in $(all_kver); do + tobuild["$nv/$kver"]='' + done + done + # add modules for new/updated kernels to the build list + for kver in "${!KERNEL_VERSIONS[@]}"; do + for nv in $(all_nv_from_kver "$kver"); do + tobuild["$nv/$kver"]='' + done + done + + # list of kver which requires depmod refresh + local -A depmods=() + + # let's build and install + local nvk mod mver + local -i retry=1 + while (( $retry > 0 )); do + retry=0 + for nvk in "${!tobuild[@]}"; do + [[ "$nvk" =~ ([^/]+)/([^/]+)/(.+) ]] || continue + mod="${BASH_REMATCH[1]}" + mver="${BASH_REMATCH[2]}" + kver="${BASH_REMATCH[3]}" + # do not build excluded modules + if ! check_buildexclusive "$mod" "$mver" "$kver"; then + unset tobuild[$nvk] + continue + # skip modules with missing kernel headers + elif [[ ! -d "$install_tree/$kver/build/include" ]]; then + ERROR_MESSAGES+=("Missing $kver kernel headers for module $mod/$mver.") + unset tobuild[$nvk] + continue + # skip modules with missing kernel package + elif [[ ! -d "$install_tree/$kver/kernel" ]]; then + ERROR_MESSAGES+=("Missing $kver kernel modules tree for module $mod/$mver.") + unset tobuild[$nvk] + continue + # postpone modules with missing dependencies + elif ! check_dependency "$mod" "$mver" "$kver"; then + continue + fi + # give it a try dkms + run dkms install --no-depmod "$mod/$mver" -k "$kver" + if (( $? == 0 )); then + # register kernel version for later depmod + depmods[$kver]='' + fi + unset tobuild[$nvk] + # maybe this module was a dep of another, so we retry + retry=1 + done + done + # run depmod later for performance improvments + if (( $DKMS_DEPMOD )); then + for kver in "${!depmods[@]}"; do + run depmod "$kver" + done + fi + # add errors messages for missing dependencies modules + for nvk in "${!tobuild[@]}"; do + [[ "$nvk" =~ ([^/]+/[^/]+)/(.+) ]] || continue + nv="${BASH_REMATCH[1]}" + kver="${BASH_REMATCH[2]}" + ERROR_MESSAGES+=("Missing dependencies to install module $nv for kernel $kver.") + done +} + +# remove registered modules +# run depmod once per kernel for performance improvments +dkms_remove() { + local nv kver + local -A depmods=() + # remove full modules first + for nv in "${!DKMS_MODULES[@]}"; do + # try to remove modules one by one to keep the depmod optimization + for kver in $(built_kver_from_nv "$nv"); do + run dkms remove --no-depmod "$nv" -k "$kver" + if (( $? == 0 )); then + # register kernel version for later depmod + depmods[$kver]='' + else + ERROR_MESSAGES+=("Failed to remove module $nv for kernel $kver.") + fi + done + # ensure module removal (even if only added) + if [[ $(dkms status "$nv") ]]; then + run dkms remove "$nv" + (( $? == 0 )) || ERROR_MESSAGES+=("Failed to remove module $nv.") + fi + done + # remove modules for a specific kernel version + for kver in "${!KERNEL_VERSIONS[@]}"; do + for nv in $(built_nv_from_kver "$kver"); do + run dkms remove --no-depmod "$nv" -k "$kver" + if (( $? == 0 )); then + # register kernel version for later depmod + depmods[$kver]='' + else + ERROR_MESSAGES+=("Failed to remove module $nv for kernel $kver.") + fi + done + done + # run depmod later for performance improvments + if (( $DKMS_DEPMOD )); then + for kver in "${!depmods[@]}"; do + run depmod "$kver" + done + fi +} + +# display hook usage and exit $1 (default 1) +usage() { + cat << EOF >&2 +usage: ${0##*/} install|remove +options: -D Do not run depmod +EOF + exit ${1:-1} +} + +# emulated program entry point +main() { + [[ "$DKMS_ALPM_HOOK_DEBUG" ]] && set -x + + # prevent each dkms call from failing with authorization errors + if (( EUID )); then + echo 'You must be root to use this hook' >&2 + return 1 + fi + + # parse command line options + declare -i DKMS_DEPMOD=1 + local opt + while getopts 'hD' opt; do + case $opt in + D) DKMS_DEPMOD=0;; + *) usage;; + esac + done + shift $((OPTIND - 1)) + (( $# != 1 )) && usage + + # parse command action to early exit + case "$1" in + install|remove) declare -r DKMS_ACTION="$1";; + *) usage;; + esac + + # dkms path from framework config + # note: the alpm hooks which trigger this script use static path + source_tree='/usr/src' + install_tree='/lib/modules' + source /etc/dkms/framework.conf + + # check source_tree and install_tree exists + local path + for path in "$source_tree" "$install_tree"; do + if [[ ! -d "$path" ]]; then + echo "==> Missing mandatory directory: $path. Exiting!" >&2 + return 1 + fi + done + + # global storage for changed DKMS modules + # we use associate arrays to prevent duplication + # the key is // + declare -A DKMS_MODULES + + # global storage for changed linux kernels + # we use associate arrays to prevent duplication + declare -A KERNEL_VERSIONS + + # global storage for error messages + declare -a ERROR_MESSAGES + + # parse stdin paths to guess what we should install/remove + while read -r path; do + if [[ "/$path" =~ ^$source_tree/([^/]+)-([^/]+)/dkms\.conf$ ]]; then + # we match file updates on dkms modules sources + DKMS_MODULES["${BASH_REMATCH[1]}/${BASH_REMATCH[2]}"]='' + elif [[ "/$path" =~ ^$install_tree/([^/]+)/ ]]; then + # we match file updates on kernels install/removal + KERNEL_VERSIONS["${BASH_REMATCH[1]}"]='' + fi + done + + dkms_$DKMS_ACTION + + # display errors at the end, to maximize readers + local msg + for msg in "${ERROR_MESSAGES[@]}"; do + echo "==> ERROR: $msg" >&2 + done + + return 0 +} + +main "$@" diff --git a/x86_64/extra/dkms/dkms.upgrade b/x86_64/extra/dkms/dkms.upgrade new file mode 100644 index 0000000..ec0cff0 --- /dev/null +++ b/x86_64/extra/dkms/dkms.upgrade @@ -0,0 +1,13 @@ +[Trigger] +Operation = Upgrade +Type = Path +Target = usr/src/*/dkms.conf +Target = lib/modules/*/build/include/ +Target = lib/modules/*/modules.alias + +[Action] +Description = Remove upgraded DKMS modules +Depends = dkms +When = PreTransaction +Exec = /usr/share/libalpm/scripts/dkms -D remove +NeedsTargets diff --git a/x86_64/extra/dnsmasq/PKGBUILD b/x86_64/extra/dnsmasq/PKGBUILD new file mode 100644 index 0000000..59a6ba2 --- /dev/null +++ b/x86_64/extra/dnsmasq/PKGBUILD @@ -0,0 +1,56 @@ +pkgname=dnsmasq +pkgver=2.86 +pkgrel=1 +arch=('x86_64') +depends=('glibc' 'gmp' 'libidn2' 'dbus' + 'libnetfilter_conntrack' 'nettle') +backup=('etc/dnsmasq.conf') +source=("http://www.thekelleys.org.uk/$pkgname/$pkgname-$pkgver.tar.xz" + 'dnsmasq-sysusers.conf' + 'dnsmasq.service') + +_build_copts='-DHAVE_DNSSEC -DHAVE_DBUS -DHAVE_LIBIDN2 -DHAVE_CONNTRACK' + +build() { + cd "$pkgname-$pkgver" + + make \ + CFLAGS="$CPPFLAGS $CFLAGS" \ + LDFLAGS="$LDFLAGS" \ + COPTS="$_build_copts" \ + PREFIX=/usr \ + BINDIR=/usr/bin \ + all-i18n + + cd "contrib/lease-tools" + + make \ + CFLAGS="$CPPFLAGS $CFLAGS" \ + LDFLAGS="$LDFLAGS" \ + COPTS="$_build_copts" \ + all +} + +package() { + cd "$pkgname-$pkgver" + + # need to pass COPTS here to avoid rebuilding the binary. + make \ + COPTS="$_build_copts" \ + PREFIX=/usr \ + BINDIR=/usr/bin \ + DESTDIR="$pkgdir" \ + install install-i18n + + install -Dm0644 "dbus/dnsmasq.conf" "$pkgdir"/usr/share/dbus-1/system.d/dnsmasq.conf + install -Dm0644 "dnsmasq.conf.example" "$pkgdir"/etc/dnsmasq.conf + install -Dm0644 "$srcdir/dnsmasq.service" "$pkgdir"/usr/lib/systemd/system/dnsmasq.service + install -Dm0644 "$srcdir/dnsmasq-sysusers.conf" "$pkgdir"/usr/lib/sysusers.d/dnsmasq.conf + + # DNSSEC setup + sed -i 's,%%PREFIX%%,/usr,' "$pkgdir"/etc/dnsmasq.conf + install -Dm0644 "trust-anchors.conf" "$pkgdir"/usr/share/dnsmasq/trust-anchors.conf + + install -Dm0755 -t "$pkgdir"/usr/bin/ 'contrib/lease-tools/dhcp_'{release{,6},lease_time} + install -Dm0644 -t "$pkgdir"/usr/share/man/man1 'contrib/lease-tools/dhcp_'{release{,6},lease_time}.1 +} diff --git a/x86_64/extra/dnsmasq/dnsmasq-sysusers.conf b/x86_64/extra/dnsmasq/dnsmasq-sysusers.conf new file mode 100644 index 0000000..c47a0b3 --- /dev/null +++ b/x86_64/extra/dnsmasq/dnsmasq-sysusers.conf @@ -0,0 +1 @@ +u dnsmasq - "dnsmasq daemon" / diff --git a/x86_64/extra/dnsmasq/dnsmasq.service b/x86_64/extra/dnsmasq/dnsmasq.service new file mode 100644 index 0000000..c661947 --- /dev/null +++ b/x86_64/extra/dnsmasq/dnsmasq.service @@ -0,0 +1,19 @@ +[Unit] +Description=dnsmasq - A lightweight DHCP and caching DNS server +Documentation=man:dnsmasq(8) +After=network.target +Before=network-online.target nss-lookup.target +Wants=nss-lookup.target + +[Service] +Type=dbus +BusName=uk.org.thekelleys.dnsmasq +ExecStartPre=/usr/bin/dnsmasq --test +ExecStart=/usr/bin/dnsmasq -k --enable-dbus --user=dnsmasq --pid-file +ExecReload=/bin/kill -HUP $MAINPID +Restart=on-failure +PrivateDevices=true +ProtectSystem=full + +[Install] +WantedBy=multi-user.target diff --git a/x86_64/extra/docbook-xml/PKGBUILD b/x86_64/extra/docbook-xml/PKGBUILD new file mode 100644 index 0000000..bce9ab1 --- /dev/null +++ b/x86_64/extra/docbook-xml/PKGBUILD @@ -0,0 +1,98 @@ +# Contributor: dorphell +# Contributor: Judd Vinet + +_vers=(4.{2..5}) + +pkgname=docbook-xml +pkgver=${_vers[-1]} +pkgrel=10 +arch=(x86_64) +install=docbook-xml.install +source=(https://docbook.org/xml/4.1.2/docbkx412.zip) +noextract=(docbkx412.zip) + +for _ver in ${_vers[@]}; do + source+=("https://docbook.org/xml/$_ver/docbook-xml-$_ver.zip") + noextract+=("docbook-xml-$_ver.zip") +done + +package() { + local ver xml + + mkdir -p "$pkgdir/etc/xml" + xmlcatalog --noout --create "$pkgdir/etc/xml/docbook-xml" + + mkdir docbook-xml-4.1.2 + bsdtar -C docbook-xml-4.1.2 -xf docbkx412.zip + for ver in ${_vers[@]}; do + mkdir docbook-xml-$ver + bsdtar -C docbook-xml-$ver -xf docbook-xml-$ver.zip + done + + for ver in 4.1.2 ${_vers[@]}; do + pushd docbook-xml-$ver + mkdir -p "$pkgdir/usr/share/xml/docbook/xml-dtd-$ver" + cp -dr docbook.cat *.dtd ent/ *.mod \ + "$pkgdir/usr/share/xml/docbook/xml-dtd-$ver" + popd + + xml= + case $ver in + 4.1.2) xml=' XML' ;;& + *) + xmlcatalog --noout --add "public" \ + "-//OASIS//DTD DocBook XML V$ver//EN" \ + "http://www.oasis-open.org/docbook/xml/$ver/docbookx.dtd" \ + "$pkgdir/etc/xml/docbook-xml" + xmlcatalog --noout --add "public" \ + "-//OASIS//DTD DocBook$xml CALS Table Model V$ver//EN" \ + "http://www.oasis-open.org/docbook/xml/$ver/calstblx.dtd" \ + "$pkgdir/etc/xml/docbook-xml" + xmlcatalog --noout --add "public" \ + "-//OASIS//DTD XML Exchange Table Model 19990315//EN" \ + "http://www.oasis-open.org/docbook/xml/$ver/soextblx.dtd" \ + "$pkgdir/etc/xml/docbook-xml" + xmlcatalog --noout --add "public" \ + "-//OASIS//ELEMENTS DocBook$xml Information Pool V$ver//EN" \ + "http://www.oasis-open.org/docbook/xml/$ver/dbpoolx.mod" \ + "$pkgdir/etc/xml/docbook-xml" + xmlcatalog --noout --add "public" \ + "-//OASIS//ELEMENTS DocBook$xml Document Hierarchy V$ver//EN" \ + "http://www.oasis-open.org/docbook/xml/$ver/dbhierx.mod" \ + "$pkgdir/etc/xml/docbook-xml" + xmlcatalog --noout --add "public" \ + "-//OASIS//ENTITIES DocBook$xml Additional General Entities V$ver//EN" \ + "http://www.oasis-open.org/docbook/xml/$ver/dbgenent.mod" \ + "$pkgdir/etc/xml/docbook-xml" + xmlcatalog --noout --add "public" \ + "-//OASIS//ENTITIES DocBook$xml Notations V$ver//EN" \ + "http://www.oasis-open.org/docbook/xml/$ver/dbnotnx.mod" \ + "$pkgdir/etc/xml/docbook-xml" + xmlcatalog --noout --add "public" \ + "-//OASIS//ENTITIES DocBook$xml Character Entities V$ver//EN" \ + "http://www.oasis-open.org/docbook/xml/$ver/dbcentx.mod" \ + "$pkgdir/etc/xml/docbook-xml" + ;;& + 4.[45]) + xmlcatalog --noout --add "public" \ + "-//OASIS//ELEMENTS DocBook XML HTML Tables V$ver//EN" \ + "http://www.oasis-open.org/docbook/xml/$ver/htmltblx.mod" \ + "$pkgdir/etc/xml/docbook-xml" + ;;& + *) + xmlcatalog --noout --add "rewriteSystem" \ + "http://www.oasis-open.org/docbook/xml/$ver" \ + "/usr/share/xml/docbook/xml-dtd-$ver" \ + "$pkgdir/etc/xml/docbook-xml" + xmlcatalog --noout --add "rewriteURI" \ + "http://www.oasis-open.org/docbook/xml/$ver" \ + "/usr/share/xml/docbook/xml-dtd-$ver" \ + "$pkgdir/etc/xml/docbook-xml" + ;;& + esac + done + + # Fix permissions + find "$pkgdir" -type f -exec chmod -c a-x {} + + chmod -Rc u=rwX,go=rX "$pkgdir" +} diff --git a/x86_64/extra/docbook-xml/docbook-xml.install b/x86_64/extra/docbook-xml/docbook-xml.install new file mode 100644 index 0000000..97a6243 --- /dev/null +++ b/x86_64/extra/docbook-xml/docbook-xml.install @@ -0,0 +1,42 @@ +post_install() { + if [ -e etc/xml/catalog.preserve ]; then + mv etc/xml/catalog.preserve etc/xml/catalog + elif [ ! -e etc/xml/catalog ]; then + xmlcatalog --noout --create etc/xml/catalog + fi + xmlcatalog --noout --add "delegatePublic" \ + "-//OASIS//ENTITIES DocBook XML" \ + "file:///etc/xml/docbook-xml" \ + etc/xml/catalog + xmlcatalog --noout --add "delegatePublic" \ + "-//OASIS//DTD DocBook XML" \ + "file:///etc/xml/docbook-xml" \ + etc/xml/catalog + xmlcatalog --noout --add "delegateSystem" \ + "http://www.oasis-open.org/docbook/" \ + "file:///etc/xml/docbook-xml" \ + etc/xml/catalog + xmlcatalog --noout --add "delegateURI" \ + "http://www.oasis-open.org/docbook/" \ + "file:///etc/xml/docbook-xml" \ + etc/xml/catalog +} + +# arg 1: the new package version +# arg 2: the old package version +pre_upgrade() { + if [ $(vercmp $2 4.5) -lt 0 ]; then + xmlcatalog --del "file:///etc/xml/docbook" etc/xml/catalog > etc/xml/catalog.preserve + fi +} + +post_upgrade() { + if [ $(vercmp $2 4.5) -ge 0 ]; then + post_remove + fi + post_install +} + +post_remove() { + xmlcatalog --noout --del file:///etc/xml/docbook-xml etc/xml/catalog +} diff --git a/x86_64/extra/docbook-xsl/765567_non-recursive_string_subst.patch b/x86_64/extra/docbook-xsl/765567_non-recursive_string_subst.patch new file mode 100644 index 0000000..ae845ad --- /dev/null +++ b/x86_64/extra/docbook-xsl/765567_non-recursive_string_subst.patch @@ -0,0 +1,32 @@ +Description: use EXSLT "replace" function when available + A recursive implementation of string.subst is problematic, + long strings with many matches will cause stack overflows. +Author: Peter De Wachter +Bug-Debian: https://bugs.debian.org/750593 + +--- docbook-xsl-1.78.1+dfsg.orig/docbook-xsl/lib/lib.xsl ++++ docbook-xsl-1.78.1+dfsg/docbook-xsl/lib/lib.xsl +@@ -6,7 +6,11 @@ + + This module implements DTD-independent functions + +- ******************************************************************** --> ++ ******************************************************************** --> ++ + + + +@@ -52,6 +56,9 @@ + + + ++ ++ ++ + + + + diff --git a/x86_64/extra/docbook-xsl/PKGBUILD b/x86_64/extra/docbook-xsl/PKGBUILD new file mode 100644 index 0000000..79ac980 --- /dev/null +++ b/x86_64/extra/docbook-xsl/PKGBUILD @@ -0,0 +1,38 @@ +pkgname=docbook-xsl +pkgver=1.79.2 +pkgrel=10 +arch=(x86_64) +install=docbook-xsl.install +depends=(libxml2 libxslt docbook-xml) +source=(https://github.com/docbook/xslt10-stylesheets/releases/download/release%2F$pkgver/docbook-xsl{,-nons}-$pkgver.tar.gz + 765567_non-recursive_string_subst.patch) + +prepare() { + cd $pkgname-$pkgver + patch -Np2 -i ../765567_non-recursive_string_subst.patch + + cd ../$pkgname-nons-$pkgver + patch -Np2 -i ../765567_non-recursive_string_subst.patch +} + +package() { + local pkgroot ns dir + for ns in -nons ''; do + pkgroot="$pkgdir/usr/share/xml/docbook/xsl-stylesheets-$pkgver$ns" + dir=$pkgname$ns-$pkgver + + install -Dt "$pkgroot" -m644 $dir/VERSION{,.xsl} + + ( + shopt -s nullglob # ignore missing files + for fn in assembly common eclipse epub epub3 fo highlighting html \ + htmlhelp javahelp lib manpages params profiling roundtrip template \ + website xhtml xhtml-1_1 xhtml5 + do + install -Dt "$pkgroot/$fn" -m644 $dir/$fn/*.{xml,xsl,dtd,ent} + done + ) + done + + install -d "$pkgdir/etc/xml" +} diff --git a/x86_64/extra/docbook-xsl/docbook-xsl.install b/x86_64/extra/docbook-xsl/docbook-xsl.install new file mode 100644 index 0000000..49de788 --- /dev/null +++ b/x86_64/extra/docbook-xsl/docbook-xsl.install @@ -0,0 +1,38 @@ +_xmlcatalog() { + xmlcatalog --noout "$@" etc/xml/catalog +} + +post_install() { + [[ -f etc/xml/catalog ]] || _xmlcatalog --create + + local ver x new=${1%-*} + + for ver in $new current; do + for x in rewriteSystem rewriteURI; do + _xmlcatalog --add $x http://cdn.docbook.org/release/xsl/$ver \ + /usr/share/xml/docbook/xsl-stylesheets-$new + + _xmlcatalog --add $x http://cdn.docbook.org/release/xsl-nons/$ver \ + /usr/share/xml/docbook/xsl-stylesheets-$new-nons + + _xmlcatalog --add $x http://docbook.sourceforge.net/release/xsl-ns/$ver \ + /usr/share/xml/docbook/xsl-stylesheets-$new + + _xmlcatalog --add $x http://docbook.sourceforge.net/release/xsl/$ver \ + /usr/share/xml/docbook/xsl-stylesheets-$new-nons + done + done +} + +post_upgrade() { + post_remove $2 + post_install $1 +} + +post_remove() { + local old=${1%-*} + _xmlcatalog --del /usr/share/xml/docbook/xsl-stylesheets-$old + if (( $(vercmp $1 1.79.2-5) >= 0 )); then + _xmlcatalog --del /usr/share/xml/docbook/xsl-stylesheets-$old-nons + fi +} diff --git a/x86_64/extra/docker/PKGBUILD b/x86_64/extra/docker/PKGBUILD new file mode 100644 index 0000000..af0fd89 --- /dev/null +++ b/x86_64/extra/docker/PKGBUILD @@ -0,0 +1,114 @@ +pkgname=docker +pkgver=20.10.17 +pkgrel=1 +arch=('x86_64') +depends=(glibc sqlite3 systemd libseccomp libtool runc containerd iptables) +makedepends=(git go btrfs-progs cmake systemd go-md2man sed) +TINI_COMMIT=de40ad007797e0dcd8b7126f27bb87401d224240 +LIBNETWORK_COMMIT=f6ccccb1c082a432c2a5814aaedaca56af33d9ea +BUILDX_COMMIT=6224def4dd2c3d347eee19db595348c50d7cb491 +source=(git+https://github.com/docker/cli.git#tag=v$pkgver + git+https://github.com/moby/moby.git#tag=v$pkgver + git+https://github.com/docker/libnetwork.git#commit=$LIBNETWORK_COMMIT + git+https://github.com/krallin/tini.git#commit=$TINI_COMMIT + git+https://github.com/docker/buildx.git#commit=$BUILDX_COMMIT + docker.sysusers) + +# create a fake go path directory and pushd into it +# $1 real directory +# $2 gopath directory +gopath_pushd() { + mkdir -p "$GOPATH/src/${2%/*}" + rm -f "$GOPATH/src/$2" + ln -rsT "$1" "$GOPATH/src/$2" + pushd "$GOPATH/src/$2" >/dev/null +} + + +build() { + ### globals + export GOPATH="$srcdir" + export PATH="$GOPATH/bin:$PATH" + export CGO_CPPFLAGS="${CPPFLAGS}" + export CGO_CFLAGS="${CFLAGS}" + export CGO_CXXFLAGS="${CXXFLAGS}" + export CGO_LDFLAGS="${LDFLAGS}" + export LDFLAGS='' + export GOFLAGS='-buildmode=pie -trimpath -mod=readonly -modcacherw -ldflags=-linkmode=external' + export GO111MODULE=off + export DISABLE_WARN_OUTSIDE_CONTAINER=1 + + echo "[+]: Building CLI" + gopath_pushd cli github.com/docker/cli + make VERSION=$pkgver dynbinary + make manpages + popd &> /dev/null + + echo "[+]: Building daemon" + gopath_pushd moby github.com/docker/docker + DOCKER_GITCOMMIT=$(cd "$srcdir"/moby && git rev-parse --short HEAD) \ + DOCKER_BUILDTAGS='seccomp journald apparmor' \ + VERSION=$pkgver \ + hack/make.sh dynbinary + popd &> /dev/null + + echo "[+]: Building docker-proxy" + gopath_pushd libnetwork github.com/docker/libnetwork + go build github.com/docker/libnetwork/cmd/proxy + popd &> /dev/null + + echo "[+]: Building docker-init" + gopath_pushd tini github.com/krallin/tini + cmake . + make tini-static + popd &> /dev/null + + echo "[+]: Building buildx cli plugin" + buildx=github.com/docker/buildx + gopath_pushd buildx $buildx + GO111MODULE=on go build -mod=vendor -o docker-buildx -ldflags "-linkmode=external \ + -X $_buildx_r/version.Version=$(git describe --match 'v[0-9]*' --always --tags)-docker \ + -X $_buildx_r/version.Revision=$(git rev-parse HEAD) \ + -X $_buildx_r/version.Package=$buildx" \ + ./cmd/buildx + popd &> /dev/null +} + +package() { + ### proxy + install -Dm755 libnetwork/proxy "$pkgdir/usr/bin/docker-proxy" + + ### init + install -Dm755 tini/tini-static "$pkgdir/usr/bin/docker-init" + + ### dockerd + install -Dm755 moby/bundles/dynbinary-daemon/dockerd "$pkgdir"/usr/bin/dockerd + + ### systemd units + cd "$srcdir"/moby/contrib + install -Dm644 'init/systemd/docker.service' "$pkgdir/usr/lib/systemd/system/docker.service" + install -Dm644 'init/systemd/docker.socket' "$pkgdir/usr/lib/systemd/system/docker.socket" + + # systemd rules + install -Dm644 'udev/80-docker.rules' "$pkgdir/usr/lib/udev/rules.d/80-docker.rules" + install -Dm644 "$srcdir/$pkgname.sysusers" "$pkgdir/usr/lib/sysusers.d/$pkgname.conf" + + ### cli + cd "$srcdir"/cli + + # binary + install -Dm755 build/docker "$pkgdir/usr/bin/docker" + + # completion + install -Dm644 'contrib/completion/bash/docker' "$pkgdir/usr/share/bash-completion/completions/docker" + install -Dm644 'contrib/completion/zsh/_docker' "$pkgdir/usr/share/zsh/site-functions/_docker" + install -Dm644 'contrib/completion/fish/docker.fish' "$pkgdir/usr/share/fish/vendor_completions.d/docker.fish" + + # man + install -dm755 "$pkgdir/usr/share/man" + cp -r man/man* "$pkgdir/usr/share/man" + + # cli-plugins + cd "$srcdir"/src/github.com/docker + install -Dm755 buildx/docker-buildx "$pkgdir/usr/lib/docker/cli-plugins/docker-buildx" +} diff --git a/x86_64/extra/docker/docker.sysusers b/x86_64/extra/docker/docker.sysusers new file mode 100644 index 0000000..0f62654 --- /dev/null +++ b/x86_64/extra/docker/docker.sysusers @@ -0,0 +1 @@ +g docker - - diff --git a/x86_64/extra/double-conversion/PKGBUILD b/x86_64/extra/double-conversion/PKGBUILD new file mode 100644 index 0000000..db98dcd --- /dev/null +++ b/x86_64/extra/double-conversion/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=double-conversion +pkgver=3.1.7 +pkgrel=1 +arch=('x86_64') +makedepends=(cmake) +source=(https://github.com/google/$pkgname/archive/v$pkgver/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + mkdir -p build && cd build + + cmake -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=ON \ + -DBUILD_TESTING=ON \ + .. + make +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir make install +} diff --git a/x86_64/extra/doxygen/PKGBUILD b/x86_64/extra/doxygen/PKGBUILD new file mode 100644 index 0000000..c3309a1 --- /dev/null +++ b/x86_64/extra/doxygen/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=doxygen +pkgver=1.9.2 +pkgrel=1 +arch=('x86_64') +makedepends=(cmake git) +source=(https://doxygen.nl/files/doxygen-1.9.2.src.tar.gz) + +build() { + cd $pkgname-$pkgver + mkdir -p build + cd build + + cmake -G "Unix Makefiles" \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -Wno-dev .. + + make +} + +package() { + cd $pkgname-$pkgver/build + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/dpkg/PKGBUILD b/x86_64/extra/dpkg/PKGBUILD new file mode 100644 index 0000000..05b7c33 --- /dev/null +++ b/x86_64/extra/dpkg/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=dpkg +pkgver=1.21.8 +pkgrel=1 +pkgdesc='The Debian Package Manager tools' +arch=('x86_64') +options=('emptydirs') +depends=('xz' 'zlib' 'bzip2' 'perl') +makedepends=('perl-modules' 'git') +source=(https://salsa.debian.org/dpkg-team/dpkg/-/archive/$pkgver/dpkg-$pkgver.tar.bz2) + +prepare() { + cd dpkg-$pkgver + echo "$pkgver" > .dist-version + + ./autogen +} + +build() { + cd dpkg-$pkgver + + CFLAGS+=' -ffat-lto-objects' \ + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --disable-start-stop-daemon + + make +} + +package() { + cd dpkg-$pkgver + + make DESTDIR="$pkgdir" install + + install -d "$pkgdir/var/dpkg"/updates/ + touch "$pkgdir/var/lib/dpkg"/{status,available} +} diff --git a/x86_64/extra/drunk-drivers-xorg/PKGBUILD b/x86_64/extra/drunk-drivers-xorg/PKGBUILD new file mode 100644 index 0000000..cbc3407 --- /dev/null +++ b/x86_64/extra/drunk-drivers-xorg/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=drunk-drivers-xorg +pkgver=2022.3 +pkgrel=1 +arch=('x86_64') +depends=(xf86-video-amdgpu xf86-video-vesa xf86-video-fbdev xf86-video-intel xf86-video-ati xf86-video-vmware xf86-video-vboxvideo xf86-video-nouveau + xf86-input-libinput xf86-input-evdev xf86-input-synaptics xf86-input-wacom xf86-video-qxl) +makedepends=(base-drunk) + +prepare() { + echo "Nothing to do." +} + +build() { + echo "Nothing to do." +} + +package() { + echo "Nothing to do." +} diff --git a/x86_64/extra/drunk-fonts/PKGBUILD b/x86_64/extra/drunk-fonts/PKGBUILD new file mode 100644 index 0000000..4626d21 --- /dev/null +++ b/x86_64/extra/drunk-fonts/PKGBUILD @@ -0,0 +1,11 @@ +pkgname=drunk-fonts +pkgver=2022.3 +pkgrel=1 +arch=(x86_64) +depends=(ttf-bitstream-vera ttf-droid ttf-hack ttf-liberation + noto-fonts ttf-dejavu cantarell-fonts + font-util encodings font-alias font-adobe-utopia-type1 font-bh-ttf) + +package() { + echo "[!]: This is a metapackage" +} diff --git a/x86_64/extra/drunk-install-scripts/PKGBUILD b/x86_64/extra/drunk-install-scripts/PKGBUILD new file mode 100644 index 0000000..27f563b --- /dev/null +++ b/x86_64/extra/drunk-install-scripts/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=drunk-install-scripts +pkgver=25 +pkgrel=2 +arch=('x86_64') +commitid=d7e5454bee5be767f2800bdc565e9ddeac48ac85 +source=($pkgname.tar.gz::https://git.it-kuny.ch/drunk/source-code/$pkgname/-/archive/$commitid/$pkgname-$commitid.tar.gz) + +build() { + cd $pkgname-$commitid + + make +} + +package() { + cd $pkgname-$commitid + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/efibootmgr/PKGBUILD b/x86_64/extra/efibootmgr/PKGBUILD new file mode 100644 index 0000000..a488a4f --- /dev/null +++ b/x86_64/extra/efibootmgr/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=efibootmgr +pkgver=17 +pkgrel=1 +arch=('x86_64') +source=(https://github.com/rhboot/efibootmgr/archive/$pkgver/$pkgname-$pkgver.tar.gz + efivar.patch) + +build() { + cd $pkgname-$pkgver + + patch -Np1 -i $srcdir/efivar.patch + + EFIDIR=/boot/efi CFLAGS="-w" make +} + +package() { + cd $pkgname-$pkgver + + install -D src/efibootmgr $pkgdir/usr/sbin/efibootmgr + install -D src/efibootmgr.8 $pkgdir/usr/share/man/man8/efibootmgr.8 +} diff --git a/x86_64/extra/efibootmgr/efivar.patch b/x86_64/extra/efibootmgr/efivar.patch new file mode 100644 index 0000000..614195f --- /dev/null +++ b/x86_64/extra/efibootmgr/efivar.patch @@ -0,0 +1,14 @@ +diff --git a/src/efibootmgr.c b/src/efibootmgr.c +index de38f01..4e1a680 100644 +--- a/src/efibootmgr.c ++++ b/src/efibootmgr.c +@@ -1536,9 +1536,6 @@ parse_opts(int argc, char **argv) + "invalid numeric value %s\n", + optarg); + } +- /* XXX efivar-36 accidentally doesn't have a public +- * header for this */ +- extern int efi_set_verbose(int verbosity, FILE *errlog); + efi_set_verbose(opts.verbose - 2, stderr); + break; + case 'V': diff --git a/x86_64/extra/efibootmgr/update b/x86_64/extra/efibootmgr/update new file mode 100644 index 0000000..821adb8 --- /dev/null +++ b/x86_64/extra/efibootmgr/update @@ -0,0 +1,3 @@ +getver_efibootmgr() { + getver_github | grep -v branchpoint +} diff --git a/x86_64/extra/efivar/PKGBUILD b/x86_64/extra/efivar/PKGBUILD new file mode 100644 index 0000000..edb203d --- /dev/null +++ b/x86_64/extra/efivar/PKGBUILD @@ -0,0 +1,17 @@ +pkgname=efivar +pkgver=37 +pkgrel=1 +arch=('x86_64') +source=(https://github.com/rhboot/efivar/archive/refs/heads/main.tar.gz) + +build() { + ls + cd $pkgname-main + make +} + +package() { + cd $pkgname-main + + make libdir=/usr/lib DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/egl-wayland/10_nvidia_wayland.json b/x86_64/extra/egl-wayland/10_nvidia_wayland.json new file mode 100644 index 0000000..c08a641 --- /dev/null +++ b/x86_64/extra/egl-wayland/10_nvidia_wayland.json @@ -0,0 +1,6 @@ +{ + "file_format_version" : "1.0.0", + "ICD" : { + "library_path" : "libnvidia-egl-wayland.so.1" + } +} diff --git a/x86_64/extra/egl-wayland/PKGBUILD b/x86_64/extra/egl-wayland/PKGBUILD new file mode 100644 index 0000000..69f9c0c --- /dev/null +++ b/x86_64/extra/egl-wayland/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=egl-wayland +pkgver=1.1.9 +pkgrel=1 +arch=(x86_64) +depends=(wayland eglexternalplatform) +makedepends=(meson git wayland-protocols) +commitid=582b2d345abaa0e313cf16c902e602084ea59551 # master +source=("git+https://github.com/NVIDIA/egl-wayland.git#commit=$commitid" + 10_nvidia_wayland.json) + +build() { + meson $pkgname build --prefix=/usr + + meson compile -C build +} + +package() { + meson install -C build --destdir "$pkgdir" + + install -Dt "$pkgdir/usr/share/egl/egl_external_platform.d" -m644 10_nvidia_wayland.json +} diff --git a/x86_64/extra/eglexternalplatform/PKGBUILD b/x86_64/extra/eglexternalplatform/PKGBUILD new file mode 100644 index 0000000..e849ee9 --- /dev/null +++ b/x86_64/extra/eglexternalplatform/PKGBUILD @@ -0,0 +1,14 @@ +pkgname=eglexternalplatform +pkgver=1.1 +pkgrel=1 +arch=(x86_64) +makedepends=(git) +commitid=7c8f8e2218e46b1a4aa9538520919747f1184d86 # tags/1.1 +source=("git+https://github.com/NVIDIA/eglexternalplatform.git#commit=$commitid") + +package() { + cd $pkgname + + install -Dt "$pkgdir/usr/include/EGL" -m644 interface/* + install -Dt "$pkgdir/usr/share/pkgconfig" -m644 *.pc +} diff --git a/x86_64/extra/electron/PKGBUILD b/x86_64/extra/electron/PKGBUILD new file mode 100644 index 0000000..975c31b --- /dev/null +++ b/x86_64/extra/electron/PKGBUILD @@ -0,0 +1,192 @@ +pkgname=electron +pkgver=17.2.0 +pkgrel=1 +arch=(x86_64) +depends=(c-ares ffmpeg gtk3+ libevent libxslt gzip nss) +makedepends=(clang git gperf harfbuzz json-c libnotify + lld llvm ninja pciutils nodejs python2 python2-pip wget yarn) +commitid=9d5f7c16734fe1734193ce9f80b1976c9b76854c +commitid2=9d5f7c16734fe1734193ce9f80b1976c9b76854c +chromiumver=98.0.4758.109 +gcc_patchset=5 +source=(git+https://github.com/electron/electron.git#commit=$commitid + git+https://chromium.googlesource.com/chromium/tools/depot_tools.git#branch=main + https://github.com/stha09/chromium-patches/releases/download/chromium-${chromiumver%%.*}-patchset-${gcc_patchset}/chromium-${chromiumver%%.*}-patchset-${gcc_patchset}.tar.xz) + +# Other stuff +system_libs=('ffmpeg' + 'fontconfig' + 'freetype' + 'harfbuzz-ng' + 'icu' + 'libdrm' + 'libevent' + 'libjpeg' + 'libpng' + 'libwebp' + 'libxml' + 'libxslt' + 'opus' + 'zlib' + ) + +prepare() { + # Python2 hack + echo "[INFO]: Python V2 hack" + + mkdir -p python2-path + ln -sf /usr/bin/python2 "${srcdir}/python2-path/python" + + # Export PATH to use build tools instead local system ones if available + export PATH="${srcdir}/python2-path:${PATH}:${srcdir}/depot_tools" + + pip2 install --user setuptools + + pip2 install --user httplib2 six + + if [ -d src ]; then + echo "[IGNORING]: chromium src is already cloned" + + else + + # + # Fetch / Setup + # + + echo "[!]: Fetching chromium..." + git clone --branch=${chromiumver} --depth=1 \ + https://chromium.googlesource.com/chromium/src.git + fi + + echo "solutions = [ + { + \"name\": \"src/electron\", + \"url\": \"file://${srcdir}/electron@${commitid2}\", + \"deps_file\": \"DEPS\", + \"managed\": False, + \"custom_deps\": { + \"src\": None, + }, + \"custom_vars\": {}, + }, + ]" > .gclient + + python2 "${srcdir}/depot_tools/gclient.py" sync \ + --with_branch_heads \ + --with_tags \ + --nohooks + + sed -e "s/'am'/'apply'/" -i src/electron/script/lib/git.py + + # + # Hook part + # + + echo "[!]: Running hooks..." + python2 src/build/landmines.py + python2 src/build/util/lastchange.py -o src/build/util/LASTCHANGE + python2 src/build/util/lastchange.py -m GPU_LISTS_VERSION \ + --revision-id-only --header src/gpu/config/gpu_lists_version.h + python2 src/build/util/lastchange.py -m SKIA_COMMIT_HASH \ + -s src/third_party/skia --header src/skia/ext/skia_commit_hash.h + + # Create sysmlink to system clang-format + ln -sf /usr/bin/clang-format src/buildtools/linux64 + + # Create sysmlink to system Node.js + mkdir -p src/third_party/node/linux/node-linux-x64/bin + ln -sf /usr/bin/node src/third_party/node/linux/node-linux-x64/bin + cd src/third_party/node + npm ci + cd ../../.. + + vpython src/tools/download_optimization_profile.py \ + --newest_state=src/chrome/android/profiles/newest.txt \ + --local_state=src/chrome/android/profiles/local.txt \ + --output_name=src/chrome/android/profiles/afdo.prof \ + --gs_url_base=chromeos-prebuilt/afdo-job/llvm + + python2 src/electron/script/apply_all_patches.py \ + src/electron/patches/config.json + + cd src/electron + yarn install --frozen-lockfile + cd .. + + # + # Patching and etc + # + echo "[!]: Patching Chromium for using system libraries..." + + sed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \ + tools/generate_shim_headers/generate_shim_headers.py + + for lib in $(printf "%s\n" "${system_libs[@]}" | sed 's/^libjpeg$/&_turbo/'); do + third_party_dir="third_party/${lib}" + + if [ ! -d ${third_party_dir} ]; then + third_party_dir="base/${third_party_dir}" + fi + + find ${third_party_dir} -type f \ + \! -path "${third_party_dir}/chromium/*" \ + \! -path "${third_party_dir}/google/*" \ + \! -path 'third_party/harfbuzz-ng/utils/hb_scoped.h' \ + \! -regex '.*\.\(gn\|gni\|isolate\)' \ + -delete + done + + python2 build/linux/unbundle/replace_gn_files.py \ + --system-libraries \ + "${system_libs[@]}" +} + +build() { + export CC=clang + export CXX=clang++ + export AR=ar + export NM=nm + + # Do not warn about unknown warning options + CFLAGS+=' -Wno-unknown-warning-option' + CXXFLAGS+=' -Wno-unknown-warning-option' + + cd src + export CHROMIUM_BUILDTOOLS_PATH="${PWD}/buildtools" + + CONF_ARGS=' + blink_symbol_level = 0 + chrome_pgo_phase = 0 + clang_use_chrome_plugins = false + custom_toolchain = "//build/toolchain/linux/unbundle:default" + host_toolchain = "//build/toolchain/linux/unbundle:default" + icu_use_data_file = false + is_component_ffmpeg = false + link_pulseaudio = true + treat_warnings_as_errors = false + use_gnome_keyring = false + use_sysroot = false + ' + + gn gen out/Release \ + --args="import(\"//electron/build/args/release.gn\") ${CONF_ARGS}" + + strip -s out/Release/electron + ninja -C out/Release electron_dist_zip +} + +package() { + install -dm755 "${pkgdir}/usr/lib/${pkgname}" + bsdtar -xf src/out/Release/dist.zip -C "${pkgdir}/usr/lib/${pkgname}" + + chmod u+s "${pkgdir}/usr/lib/${pkgname}/chrome-sandbox" + + install -Dm755 "${srcdir}/electron-launcher.sh" \ + "${pkgdir}/usr/bin/${pkgname}" + + install -Dm644 "electron.desktop" \ + "${pkgdir}/usr/share/applications/${pkgname}.desktop" + + install -Dm644 src/electron/default_app/icon.png \ + "${pkgdir}/usr/share/pixmaps/${pkgname}.png" +} diff --git a/x86_64/extra/elfutils/PKGBUILD b/x86_64/extra/elfutils/PKGBUILD new file mode 100644 index 0000000..4e140f2 --- /dev/null +++ b/x86_64/extra/elfutils/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=elfutils +pkgver=0.186 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(bzip2 curl libarchive sqlite3 xz zlib zstd) +source=(https://sourceware.org/ftp/elfutils/$pkgver/elfutils-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --program-prefix="eu-" \ + --disable-debuginfod + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/elfutils/update b/x86_64/extra/elfutils/update new file mode 100644 index 0000000..3e5a3c9 --- /dev/null +++ b/x86_64/extra/elfutils/update @@ -0,0 +1,8 @@ +url=$(dirname $url) +url=$url/$(fetch \ +| grep folder \ +| sed 's,.*href=",,;s,\/.*,,' \ +| grep ^[[:digit:]] \ +| sort -V \ +| uniq \ +| tail -n1) diff --git a/x86_64/extra/ell/PKGBUILD b/x86_64/extra/ell/PKGBUILD new file mode 100644 index 0000000..50b3c6e --- /dev/null +++ b/x86_64/extra/ell/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=ell +pkgver=0.48 +pkgrel=1 +arch=('x86_64') +depends=(glibc dbus) +source=(https://mirrors.edge.kernel.org/pub/linux/libs/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/emacs/PKGBUILD b/x86_64/extra/emacs/PKGBUILD new file mode 100644 index 0000000..086252b --- /dev/null +++ b/x86_64/extra/emacs/PKGBUILD @@ -0,0 +1,46 @@ +pkgname=emacs +pkgver=27.2 +pkgrel=2 +pkgdesc="The extensible, customizable, self-documenting real-time display editor" +arch=('x86_64') +url="https://www.gnu.org/software/emacs/emacs.html" +license=('GPL3') +depends=('librsvg' 'gpm' 'libxpm' 'gtk+' 'hicolor-icon-theme' 'jansson' + 'alsa-lib' 'gnutls' 'cairo' 'harfbuzz' 'giflib' 'desktop-file-utils' + 'librsvg') +source=(https://ftp.gnu.org/gnu/emacs/$pkgname-$pkgver.tar.xz) + +build() { + cd "$srcdir"/$pkgname-$pkgver + + ac_cv_lib_gif_EGifPutExtensionLast=yes ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --libexecdir=/usr/lib \ + --localstatedir=/var \ + --with-gif=ifavailable \ + --with-x-toolkit=gtk3 \ + --with-xft \ + --with-wide-int \ + --with-modules \ + --with-cairo \ + --with-harfbuzz + + # Fix pwd location from bin to usr/bin + sed -i -e 's#bin/pwd#usr/bin/pwd#g' Makefile* + sed -i -e 's#bin/pwd#usr/bin/pwd#g' */Makefile* + + make +} + +package() { + cd "$srcdir"/$pkgname-$pkgver + make DESTDIR="$pkgdir" install + + # remove conflict with ctags package + mv "$pkgdir"/usr/bin/{ctags,ctags.emacs} + mv "$pkgdir"/usr/share/man/man1/{ctags.1.gz,ctags.emacs.1} + + # fix user/root permissions on usr/share files + find "$pkgdir"/usr/share/emacs/$pkgver -exec chown root:root {} \; +} diff --git a/x86_64/extra/encodings/PKGBUILD b/x86_64/extra/encodings/PKGBUILD new file mode 100644 index 0000000..28f1747 --- /dev/null +++ b/x86_64/extra/encodings/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=encodings +pkgver=1.0.5 +pkgrel=1 +arch=('x86_64') +depends=(libx11 xorgproto mkfontscale) +source=(https://x.org/pub/individual/font/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/erofs-utils/PKGBUILD b/x86_64/extra/erofs-utils/PKGBUILD new file mode 100644 index 0000000..cf4f12b --- /dev/null +++ b/x86_64/extra/erofs-utils/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=erofs-utils +pkgver=1.4 +pkgrel=1 +arch=(x86_64) +depends=(lz4 xz glibc) +makedepends=(gcc) +source=(https://github.com/hsiangkao/erofs-utils/archive/refs/tags/v1.4.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + ./autogen.sh +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/ethtool/PKGBUILD b/x86_64/extra/ethtool/PKGBUILD new file mode 100644 index 0000000..9d6983e --- /dev/null +++ b/x86_64/extra/ethtool/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=ethtool +pkgver=5.16 +pkgrel=1 +arch=('x86_64') +depends=('glibc' 'libmnl') +source=(https://www.kernel.org/pub/software/network/$pkgname/$pkgname-$pkgver.tar.xz) +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --mandir=/usr/share/man --sbindir=/usr/bin + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install +} diff --git a/x86_64/extra/exfat-utils/PKGBUILD b/x86_64/extra/exfat-utils/PKGBUILD new file mode 100644 index 0000000..c797f16 --- /dev/null +++ b/x86_64/extra/exfat-utils/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=exfat-utils +pkgver=1.3.0 +pkgrel=1 +arch=('x86_64') +depends=('glibc' 'fuse2') +source=(${pkgname}-${pkgver}.tar.gz::https://github.com/relan/exfat/archive/v${pkgver}.tar.gz) + +prepare() { + cd exfat-${pkgver} + + autoreconf -fiv +} + +build() { + cd exfat-${pkgver} + + ./configure \ + --prefix=/usr \ + --sbindir=/usr/bin + + make CCFLAGS="${CFLAGS} ${CPPFLAGS} -std=c99" LINKFLAGS="${LDFLAGS}" +} + +package() { + cd exfat-${pkgver} + + make DESTDIR="${pkgdir}" install + install -Dm 644 */*.8 -t "${pkgdir}/usr/share/man/man8" +} \ No newline at end of file diff --git a/x86_64/extra/exiv2/PKGBUILD b/x86_64/extra/exiv2/PKGBUILD new file mode 100644 index 0000000..a675330 --- /dev/null +++ b/x86_64/extra/exiv2/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=exiv2 +pkgver=0.27.5 +pkgrel=1 +arch=(x86_64) +depends=(expat gettext curl) +makedepends=(python3) +source=(https://github.com/Exiv2/exiv2/archive/v$pkgver/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + cmake -B build -G Ninja \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_SKIP_RPATH=ON \ + -D EXIV2_BUILD_SAMPLES=ON \ + -D EXIV2_BUILD_UNIT_TESTS=OFF \ + -D EXIV2_ENABLE_VIDEO=ON \ + -D EXIV2_ENABLE_NLS=ON \ + -D EXIV2_ENABLE_XMP=ON \ + -D EXIV2_ENABLE_CURL=ON \ + -D EXIV2_ENABLE_WEBREADY=ON \ + -D EXIV2_ENABLE_BMFF=ON + + ninja -C build +} + +package() { + cd $pkgname-$pkgver + + DESTDIR=$pkgdir ninja -C build install +} diff --git a/x86_64/extra/expect/PKGBUILD b/x86_64/extra/expect/PKGBUILD new file mode 100644 index 0000000..4714672 --- /dev/null +++ b/x86_64/extra/expect/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=expect +pkgver=5.45.4 +pkgrel=1 +pkgdesc='A tool for automating interactive applications' +arch=(x86_64) +depends=(tcl) +source=(https://downloads.sourceforge.net/project/expect/Expect/$pkgver/expect${pkgver}.tar.gz) + +build() { + cd expect${pkgver} + + ./configure --prefix=/usr --mandir=/usr/share/man + + make +} + +package() { + cd expect${pkgver} + + make DESTDIR="$pkgdir" install +} diff --git a/x86_64/extra/fakeroot/PKGBUILD b/x86_64/extra/fakeroot/PKGBUILD new file mode 100644 index 0000000..f39a957 --- /dev/null +++ b/x86_64/extra/fakeroot/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=fakeroot +pkgver=3.0.3 +pkgrel=1 +arch=('x86_64') +source=(git+https://salsa.debian.org/clint/fakeroot) + +prepare() { + cd $pkgname + ./bootstrap +} + +build() { + cd $pkgname + + ./configure \ + --prefix=/usr + make +} + +package() { + cd $pkgname + mkdir -p $pkgdir/usr/lib + make -C scripts DESTDIR=$pkgdir install + cp -rf .libs/*.so $pkgdir/usr/lib/ + cp -rf .libs/*.a $pkgdir/usr/lib/ + mkdir -p $pkgdir/usr/bin + cp faked $pkgdir/usr/bin +} diff --git a/x86_64/extra/fatresize/PKGBUILD b/x86_64/extra/fatresize/PKGBUILD new file mode 100644 index 0000000..56da06e --- /dev/null +++ b/x86_64/extra/fatresize/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=fatresize +pkgver=1.1.0 +pkgrel=1 +pkgdesc='A utility to resize FAT filesystems using libparted' +arch=(x86_64) +depends=(parted) +source=($pkgname-$pkgver.tar.gz::"https://github.com/ya-mouse/fatresize/archive/v$pkgver.tar.gz") + +prepare() { + cd $pkgname-$pkgver + + autoreconf -fisv +} + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --sbindir=/usr/bin + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install +} \ No newline at end of file diff --git a/x86_64/extra/fdk-aac/PKGBUILD b/x86_64/extra/fdk-aac/PKGBUILD new file mode 100644 index 0000000..0d83f4e --- /dev/null +++ b/x86_64/extra/fdk-aac/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=fdk-aac +pkgver=2.0.2 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(gcc) +source=(https://downloads.sourceforge.net/opencore-amr/fdk-aac-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/fdroidserver/PKGBUILD b/x86_64/extra/fdroidserver/PKGBUILD new file mode 100644 index 0000000..876325c --- /dev/null +++ b/x86_64/extra/fdroidserver/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=fdroidserver +pkgver=2.0.3 +pkgrel=1 +arch=(x86_64) +depends=(python3-pip) +install=fdroid.install +source=($pkgname-$pkgver.tar.gz::https://gitlab.com/fdroid/fdroidserver/-/archive/${pkgver}/fdroidserver-${pkgver}.tar.gz) + +build() { + cd $pkgname-$pkgver + + python setup.py compile_catalog + python setup.py bdist_egg +} + +package() { + cd $pkgname-$pkgver + + python setup.py install --root="$pkgdir/" --optimize=1 --install-data="/usr" + + mkdir -p "$pkgdir/usr/bin" + install "fdroid" "$pkgdir/usr/bin" + install -D gradlew-fdroid "$pkgdir/usr/lib/python$(python --version|cut -f2 -d" "|cut -f1,2 -d".")/site-packages/gradlew-fdroid" + + install -D completion/bash-completion "$pkgdir/usr/share/bash-completion/completions/fdroidserver" + mkdir -p "$pkgdir/opt/android-sdk/tools" +} diff --git a/x86_64/extra/fdroidserver/fdroid.install b/x86_64/extra/fdroidserver/fdroid.install new file mode 100644 index 0000000..4b38576 --- /dev/null +++ b/x86_64/extra/fdroidserver/fdroid.install @@ -0,0 +1,19 @@ +post_upgrade() { + echo + echo "[!]: installing setuptools" + pip3 install setuptools + + echo + echo "[!]: Installing fdroid deps" + pip3 install doxypypy doxyqml jinja2 pyyaml + + pip3 install pyasn1 requests ruamel-yaml pillow gitpython androguard paramiko qrcode + + pip3 install apache-libcloud clint defusedxml mwclient python-vagrant yamllint + + pip3 install pyasn1_modules +} + +post_install() { + post_upgrade +} diff --git a/x86_64/extra/ffmpeg/PKGBUILD b/x86_64/extra/ffmpeg/PKGBUILD new file mode 100644 index 0000000..0ef9fdf --- /dev/null +++ b/x86_64/extra/ffmpeg/PKGBUILD @@ -0,0 +1,52 @@ +pkgname=ffmpeg +pkgver=5.1 +pkgrel=3 +arch=('x86_64') +depends=(fdk-aac freetype2 lame libtheora + libvorbis libvpx opus libx264 libx265 + libass vdpau alsa-lib fribidi gmp gnutls + jack2 libdrm libglvnd pulseaudio libva + libxext sdl2 ocl-icd) +makedepends=(nasm yasm clang vulkan-headers opencl-headers) +source=(https://ffmpeg.org/releases/ffmpeg-$pkgver.tar.xz + chromium-av_stream_get_first_dts.patch) + +prepare() { + cd $pkgname-$pkgver + + sed -i 's/-lflite"/-lflite -lasound"/' configure + + patch -p0 -i ../chromium-av_stream_get_first_dts.patch +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-gpl \ + --enable-version3 \ + --enable-nonfree \ + --enable-shared \ + --disable-debug \ + --enable-libass \ + --enable-libfdk-aac \ + --enable-libfreetype \ + --enable-fontconfig \ + --enable-libmp3lame \ + --enable-libopus \ + --enable-libtheora \ + --enable-libvorbis \ + --enable-libvpx \ + --enable-libx264 \ + --enable-libx265 \ + --enable-openssl + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/ffmpeg/chromium-av_stream_get_first_dts.patch b/x86_64/extra/ffmpeg/chromium-av_stream_get_first_dts.patch new file mode 100644 index 0000000..0ad3e17 --- /dev/null +++ b/x86_64/extra/ffmpeg/chromium-av_stream_get_first_dts.patch @@ -0,0 +1,48 @@ +diff -Naur configure configure +--- configure 2022-08-27 20:00:25.604842735 +0300 ++++ configure 2022-08-27 19:44:26.462209482 +0300 +@@ -7170,7 +7170,6 @@ + check_cflags -Werror=format-security + check_cflags -Werror=implicit-function-declaration + check_cflags -Werror=missing-prototypes +- check_cflags -Werror=return-type + check_cflags -Werror=vla + check_cflags -Wformat + check_cflags -fdiagnostics-color=auto +@@ -7211,7 +7210,6 @@ + check_cflags -Qunused-arguments + check_cflags -Werror=implicit-function-declaration + check_cflags -Werror=missing-prototypes +- check_cflags -Werror=return-type + elif enabled cparser; then + add_cflags -Wno-missing-variable-declarations + add_cflags -Wno-empty-statement +diff -Naur libavformat/avformat.h libavformat/avformat.h +--- libavformat/avformat.h 2022-07-22 20:58:39.000000000 +0300 ++++ libavformat/avformat.h 2022-08-27 19:33:13.670391840 +0300 +@@ -1128,6 +1128,9 @@ + */ + int64_t av_stream_get_end_pts(const AVStream *st); + ++// Chromium: We use the internal field first_dts ++int64_t av_stream_get_first_dts(const AVStream *st); ++ + #define AV_PROGRAM_RUNNING 1 + + /** +diff -Naur libavformat/utils.c libavformat/utils.c +--- libavformat/utils.c 2022-07-22 20:58:39.000000000 +0300 ++++ libavformat/utils.c 2022-08-27 19:49:25.221651751 +0300 +@@ -354,6 +354,12 @@ + return av_get_frame_filename2(buf, buf_size, path, number, 0); + } + ++// Chromium: We use the internal field first_dts vvv ++int64_t av_stream_get_first_dts(const AVStream *st) ++{ ++ return cffstream(st)->first_dts; ++} ++ + void av_url_split(char *proto, int proto_size, + char *authorization, int authorization_size, + char *hostname, int hostname_size, diff --git a/x86_64/extra/file-roller/PKGBUILD b/x86_64/extra/file-roller/PKGBUILD new file mode 100644 index 0000000..e0a073b --- /dev/null +++ b/x86_64/extra/file-roller/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=file-roller +pkgver=3.40.0 +pkgrel=1 +pkgdesc="Create and modify archives" +url="https://wiki.gnome.org/Apps/FileRoller" +arch=(x86_64) +depends=(gtk+ dconf libarchive file json-glib libnotify zip unzip) +makedepends=(git meson) +optdepends=('p7zip: 7z, arj, exe and encrypted zip files support' + 'unrar: better RAR archive support' + 'unace: ACE archive support' + 'lrzip: lrzip archive support' + 'squashfs-tools: squashfs image support') +_commit=d5cfba5a4e86b2e8118113be410f39fc854b1df7 # tags/3.40.0^0 +source=("git+https://gitlab.gnome.org/GNOME/file-roller.git#commit=$_commit") + +prepare() { + cd $pkgname +} + +build() { + meson $pkgname build \ + --prefix=/usr + + meson compile -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build +} diff --git a/x86_64/extra/filezilla/PKGBUILD b/x86_64/extra/filezilla/PKGBUILD new file mode 100644 index 0000000..82a418b --- /dev/null +++ b/x86_64/extra/filezilla/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=filezilla +pkgver=3.60.1 +pkgrel=1 +arch=(x86_64) +depends=(glibc dbus xdg-utils libidn hicolor-icon-theme + sqlite3 gnutls libfilezilla ibus gtk3+ nettle wxwidgets) +makedepends=(make gcc) +source=(https://download.filezilla-project.org/client/FileZilla_${pkgver}_src.tar.bz2 + wxwidgets.patch) + +prepare() { + patch -Np0 -i wxwidgets.patch +} + +build() { + cd $pkgname-$pkgver + + CCPPFLAGS=" -I/usr/include/wx-3.1" \ + CXXFLAGS=" -I/usr/include/wx-3.1" + CFLAGS=" -I/usr/include/wx-3.1" + ./configure \ + --prefix=/usr \ + --disable-manualupdatecheck \ + --disable-autoupdatecheck \ + --with-pugixml=builtin \ + --with-wx-config=/usr/bin/wx-config + + make -j4 +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/filezilla/wxwidgets.patch b/x86_64/extra/filezilla/wxwidgets.patch new file mode 100644 index 0000000..c99ba74 --- /dev/null +++ b/x86_64/extra/filezilla/wxwidgets.patch @@ -0,0 +1,30 @@ +diff -Naur filezilla-3.60.1/configure filezilla-3.60.1/configure +--- filezilla-3.60.1/configure 2022-06-01 16:58:25.000000000 +0300 ++++ filezilla-3.60.1/configure 2022-07-07 13:16:19.166690310 +0300 +@@ -18976,11 +18976,6 @@ + equivalent variable and wxWidgets version is $MIN_WX_VERSION or above. + " "$LINENO" 5 + fi +- if test "${WX_VERSION_MAJOR}.${WX_VERSION_MINOR}" = "3.1"; then +- as_fn_error $? "You must use wxWidgets 3.0.x, development versions of wxWidgets are not supported." "$LINENO" 5 +- elif test "${WX_VERSION_MAJOR}.${WX_VERSION_MINOR}" != "3.0"; then +- as_fn_error $? "You must use wxWidgets 3.0.x, wxWidgets 3.2 or higher is not yet supported." "$LINENO" 5 +- fi + + if test "${WX_VERSION_MAJOR}.${WX_VERSION_MINOR}" = "3.0"; then + MAC_REQUIRES_AQUA="YES" +diff -Naur filezilla-3.60.1/configure.ac filezilla-3.60.1/configure.ac +--- filezilla-3.60.1/configure.ac 2022-06-01 16:57:20.000000000 +0300 ++++ filezilla-3.60.1/configure.ac 2022-07-07 13:16:11.630736033 +0300 +@@ -185,11 +185,6 @@ + equivalent variable and wxWidgets version is $MIN_WX_VERSION or above. + ]) + fi +- if test "${WX_VERSION_MAJOR}.${WX_VERSION_MINOR}" = "3.1"; then +- AC_MSG_ERROR([You must use wxWidgets 3.0.x, development versions of wxWidgets are not supported.]) +- elif test "${WX_VERSION_MAJOR}.${WX_VERSION_MINOR}" != "3.0"; then +- AC_MSG_ERROR([You must use wxWidgets 3.0.x, wxWidgets 3.2 or higher is not yet supported.]) +- fi + + if test "${WX_VERSION_MAJOR}.${WX_VERSION_MINOR}" = "3.0"; then + MAC_REQUIRES_AQUA="YES" diff --git a/x86_64/extra/firefox/PKGBUILD b/x86_64/extra/firefox/PKGBUILD new file mode 100644 index 0000000..0144cf7 --- /dev/null +++ b/x86_64/extra/firefox/PKGBUILD @@ -0,0 +1,96 @@ +pkgname=firefox +pkgver=104.0.0 +fver=104.0 +pkgrel=1 +arch=('x86_64') +depends=(dbus-glib gtk+ gtk2+ libnotify pulseaudio alsa-lib python3 sqlite3 unzip + zip startup-notification wireplumber icu libevent pixman libjpeg libpng xmessage double-conversion ffmpeg) +makedepends=(autoconf cbindgen nodejs nasm yasm lld wasi-compiler-rt wasi-libc wasi-libc++ nss + llvm mesa rust clang nodejs autoconf2.13 imake m4 python3 python2 python3-pip) +source=(https://archive.mozilla.org/pub/$pkgname/releases/$fver/source/$pkgname-$fver.source.tar.xz + mozconfig + firefox.desktop) + +prepare() { + mkdir -p mozbuild + + cd $pkgname-$fver + + echo "AIzaSyAss8ARlk1f9fNj8KbaBkhXBreclxG7JyY" > google-key + echo " " > mozilla-key + + pip install setuptools +} + +build() { + cd $pkgname-$fver + + export CC=gcc CXX=g++ + export MOZ_NOSPAM=1 + export MOZBUILD_STATE_PATH="$srcdir/mozbuild" + export MOZ_ENABLE_FULL_SYMBOLS=1 + export MACH_USE_SYSTEM_PYTHON=1 + + # LTO needs more open files + ulimit -n 4096 + + echo "Building instrumented browser..." + cp $srcdir/mozconfig .mozconfig + + ./mach configure + + # Make obj dir for make + mkdir -p $srcdir/$pkgname-$fver/obj + + ./mach build -j5 +} + +package() { + cd $pkgname-$fver + + DESTDIR=$pkgdir ./mach install + + local vendorjs="$pkgdir/usr/lib/$pkgname/browser/defaults/preferences/vendor.js" + install -Dvm644 /dev/stdin "$vendorjs" <" src/flexdef.h + + [ -d /tools ] && export HELP2MAN=/tools/bin/true + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + + ln -sv flex $pkgdir/usr/bin/lex +} diff --git a/x86_64/extra/fltk/PKGBUILD b/x86_64/extra/fltk/PKGBUILD new file mode 100644 index 0000000..e0a7158 --- /dev/null +++ b/x86_64/extra/fltk/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=fltk +pkgver=1.3.8 +pkgrel=1 +arch=('x86_64') +depends=(xorg-server alsa-lib hicolor-icon-theme libjpeg libpng mesa) +makedepends=(doxygen) +source=(https://fltk.org/pub/$pkgname/$pkgver/$pkgname-$pkgver-source.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + sed -i -e '/cat./d' documentation/Makefile +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-shared + + make + + make -C documentation html +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/font-adobe-utopia-type1/PKGBUILD b/x86_64/extra/font-adobe-utopia-type1/PKGBUILD new file mode 100644 index 0000000..b0f8944 --- /dev/null +++ b/x86_64/extra/font-adobe-utopia-type1/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=font-adobe-utopia-type1 +pkgver=1.0.4 +pkgrel=1 +arch=('x86_64') +depends=(libx11 xorgproto mkfontscale) +source=(https://x.org/pub/individual/font/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/font-alias/PKGBUILD b/x86_64/extra/font-alias/PKGBUILD new file mode 100644 index 0000000..4ab74b6 --- /dev/null +++ b/x86_64/extra/font-alias/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=font-alias +pkgver=1.0.4 +pkgrel=1 +arch=('x86_64') +depends=(libx11 xorgproto mkfontscale) +source=(https://x.org/pub/individual/font/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/font-bh-ttf/PKGBUILD b/x86_64/extra/font-bh-ttf/PKGBUILD new file mode 100644 index 0000000..dff37b2 --- /dev/null +++ b/x86_64/extra/font-bh-ttf/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=font-bh-ttf +pkgver=1.0.3 +pkgrel=1 +arch=('x86_64') +depends=(libx11 xorgproto mkfontscale) +source=(https://x.org/pub/individual/font/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/font-util/PKGBUILD b/x86_64/extra/font-util/PKGBUILD new file mode 100644 index 0000000..20d0553 --- /dev/null +++ b/x86_64/extra/font-util/PKGBUILD @@ -0,0 +1,17 @@ +pkgname=font-util +pkgver=1.3.2 +pkgrel=1 +arch=('x86_64') +source=(https://x.org/pub/individual/font/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/fontforge/PKGBUILD b/x86_64/extra/fontforge/PKGBUILD new file mode 100644 index 0000000..7107cbb --- /dev/null +++ b/x86_64/extra/fontforge/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=fontforge +pkgver=20220308 +pkgrel=2 +arch=(x86_64) +depends=('libtool' 'pango' 'giflib' 'libtiff' 'libxml2' 'python3' + 'woff2' 'gtk3+' 'libuninameslist' 'libspiro') +makedepends=('cmake') +source=(https://github.com/$pkgname/$pkgname/archive/refs/tags/$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + cmake -B build \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D ENABLE_MAINTAINER_TOOLS=TRUE \ + -D ENABLE_FONTFORGE_EXTRAS=TRUE \ + -D UNIX=TRUE + + make -j4 -C build +} + +package() { + cd $pkgname-$pkgver + + make -C build DESTDIR="${pkgdir}" install +} diff --git a/x86_64/extra/fontforge/fontforge-doc-no-warn-error.patch b/x86_64/extra/fontforge/fontforge-doc-no-warn-error.patch new file mode 100644 index 0000000..ed1526b --- /dev/null +++ b/x86_64/extra/fontforge/fontforge-doc-no-warn-error.patch @@ -0,0 +1,25 @@ +From e8164ed0fa747bfc8e7e80e6ff6b9a34b7c1a33f Mon Sep 17 00:00:00 2001 +From: Mike Gilbert +Date: Mon, 27 Apr 2020 20:00:54 -0400 +Subject: [PATCH] doc: do not treat warnings as errors + +--- + doc/CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt +index 6c4601a05..e5aeaed4f 100644 +--- a/doc/CMakeLists.txt ++++ b/doc/CMakeLists.txt +@@ -21,7 +21,7 @@ file(STRINGS manifest.txt _manifest) + configure_file(manifest.txt manifest.txt COPYONLY) + + add_custom_command(OUTPUT sphinx-docs +- COMMAND "${Sphinx_BUILD_BINARY}" -q -n -W -b html -d doctrees "${CMAKE_CURRENT_SOURCE_DIR}/sphinx" sphinx-docs ++ COMMAND "${Sphinx_BUILD_BINARY}" -q -n -b html -d doctrees "${CMAKE_CURRENT_SOURCE_DIR}/sphinx" sphinx-docs + DEPENDS ${_manifest} + ) + +-- +2.26.2 + diff --git a/x86_64/extra/freeglut/PKGBUILD b/x86_64/extra/freeglut/PKGBUILD new file mode 100644 index 0000000..98c9fe5 --- /dev/null +++ b/x86_64/extra/freeglut/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=freeglut +pkgver=3.2.2 +pkgrel=1 +pkgdesc="Provides functionality for small OpenGL programs" +arch=(x86_64) +url="http://freeglut.sourceforge.net/" +depends=(libxi libxrandr libglvnd) +makedepends=(mesa ninja glu libxxf86vm cmake) +source=(https://downloads.sourceforge.net/freeglut/${pkgname}-${pkgver}.tar.gz) + +build() { + CFLAGS+=' -fcommon' # https://wiki.gentoo.org/wiki/Gcc_10_porting_notes/fno_common + + cmake -H$pkgname-$pkgver -Bbuild \ + -D FREEGLUT_BUILD_STATIC_LIBS=ON \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_INSTALL_LIBDIR=lib \ + -D CMAKE_BUILD_TYPE=release + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --build build --target install + + ln -sr "$pkgdir"/usr/lib/pkgconfig/{glut,freeglut}.pc +} diff --git a/x86_64/extra/fribidi/PKGBUILD b/x86_64/extra/fribidi/PKGBUILD new file mode 100644 index 0000000..9b73188 --- /dev/null +++ b/x86_64/extra/fribidi/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=fribidi +pkgver=1.0.9 +pkgrel=1 +arch=('x86_64') +source=(https://github.com/$pkgname/$pkgname/releases/download/v$pkgver/$pkgname-$pkgver.tar.xz) + +prepare() { + mkdir -p $pkgname-$pkgver/build +} + +build() { + cd $pkgname-$pkgver/build + + meson \ + --prefix=/usr \ + --buildtype=release \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/gc/PKGBUILD b/x86_64/extra/gc/PKGBUILD new file mode 100644 index 0000000..cc38b41 --- /dev/null +++ b/x86_64/extra/gc/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=gc +pkgver=8.0.6 +pkgrel=1 +arch=('x86_64') +source=(https://www.hboehm.info/gc/gc_source/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr \ + --enable-shared + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/gdb/PKGBUILD b/x86_64/extra/gdb/PKGBUILD new file mode 100644 index 0000000..c3383f8 --- /dev/null +++ b/x86_64/extra/gdb/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=gdb +pkgver=11.1 +pkgrel=3 +arch=('x86_64') +depends=(expat xz) +source=(https://ftp.gnu.org/gnu/gdb/$pkgname-$pkgver.tar.xz) +backup=(etc/gdb/gdbinit) + +build() { + cd $pkgname-$pkgver + + mkdir -p build && cd build + + ../configure \ + --prefix=/usr \ + --disable-nls \ + --with-system-readline \ + --disable-source-highlight \ + --with-python=/usr/bin/python3 \ + --with-system-gdbinit=/etc/gb/gdbinit \ + + make +} + +package() { + cd $pkgname-$pkgver/build + + make -C gdb/data-directory DESTDIR=$pkgdir install + + make -C gdb DESTDIR=$pkgdir install + + make -C gdbserver DESTDIR=$pkgdir install + + install -dm 755 $pkgdir/etc/gdb + touch $pkgdir/etc/gdb/gdbinit +} diff --git a/x86_64/extra/gdbm/PKGBUILD b/x86_64/extra/gdbm/PKGBUILD new file mode 100644 index 0000000..684aae8 --- /dev/null +++ b/x86_64/extra/gdbm/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=gdbm +pkgver=1.22 +pkgrel=1 +arch=('x86_64') +depends=(glibc bash) +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr \ + --enable-libgdbm-compat + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/gdk-pixbuf/PKGBUILD b/x86_64/extra/gdk-pixbuf/PKGBUILD new file mode 100644 index 0000000..82f98c0 --- /dev/null +++ b/x86_64/extra/gdk-pixbuf/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=gdk-pixbuf +pkgver=2.42.6 +pkgrel=4 +arch=('x86_64') +depends=(glib2 libjpeg libwebp libpng shared-mime-info libtiff librsvg) +source=(https://download.gnome.org/sources/$pkgname/2.42/$pkgname-$pkgver.tar.xz + gdk-pixbuf-query-loaders.hook) +install=gdk-pixbuf2.install + +build() { + cd $pkgname-$pkgver + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + --buildtype=release \ + --wrap-mode=nofallback \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + DESTDIR=$pkgdir ninja install + + install -Dt "$pkgdir/usr/share/libalpm/hooks" -m644 $srcdir/*.hook +} diff --git a/x86_64/extra/gdk-pixbuf/gdk-pixbuf-query-loaders.hook b/x86_64/extra/gdk-pixbuf/gdk-pixbuf-query-loaders.hook new file mode 100644 index 0000000..f883577 --- /dev/null +++ b/x86_64/extra/gdk-pixbuf/gdk-pixbuf-query-loaders.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/lib/gdk-pixbuf-2.0/2.10.0/loaders/*.so + +[Action] +Description = Probing GDK-Pixbuf loader modules... +When = PostTransaction +Exec = /usr/bin/gdk-pixbuf-query-loaders --update-cache diff --git a/x86_64/extra/gdk-pixbuf/gdk-pixbuf2.install b/x86_64/extra/gdk-pixbuf/gdk-pixbuf2.install new file mode 100644 index 0000000..83fa07c --- /dev/null +++ b/x86_64/extra/gdk-pixbuf/gdk-pixbuf2.install @@ -0,0 +1,3 @@ +pre_remove() { + rm -f /usr/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache +} diff --git a/x86_64/extra/gdl/PKGBUILD b/x86_64/extra/gdl/PKGBUILD new file mode 100644 index 0000000..7e0c33a --- /dev/null +++ b/x86_64/extra/gdl/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=gdl +pkgver=3.40.0 +pkgrel=1 +arch=('x86_64') +depends=(gtk+) +source=(https://download.gnome.org/sources/$pkgname/3.40/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/gdm/0001-Xsession-Don-t-start-ssh-agent-by-default.patch b/x86_64/extra/gdm/0001-Xsession-Don-t-start-ssh-agent-by-default.patch new file mode 100644 index 0000000..3347d2c --- /dev/null +++ b/x86_64/extra/gdm/0001-Xsession-Don-t-start-ssh-agent-by-default.patch @@ -0,0 +1,28 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Sat, 20 Jun 2015 17:22:38 +0200 +Subject: [PATCH] Xsession: Don't start ssh-agent by default + +--- + data/Xsession.in | 8 -------- + 1 file changed, 8 deletions(-) + +diff --git a/data/Xsession.in b/data/Xsession.in +index 2e4de4fe384f..29ebc30ea0c5 100755 +--- a/data/Xsession.in ++++ b/data/Xsession.in +@@ -207,14 +207,6 @@ if [ "x$command" = "xdefault" ] ; then + fi + fi + +-# add ssh-agent if found +-sshagent="`gdmwhich ssh-agent`" +-if [ -n "$sshagent" ] && [ -x "$sshagent" ] && [ -z "$SSH_AUTH_SOCK" ]; then +- command="$sshagent -- $command" +-elif [ -z "$sshagent" ] ; then +- echo "$0: ssh-agent not found!" +-fi +- + echo "$0: Setup done, will execute: $command" + + eval exec $command \ No newline at end of file diff --git a/x86_64/extra/gdm/PKGBUILD b/x86_64/extra/gdm/PKGBUILD new file mode 100644 index 0000000..ecffe2a --- /dev/null +++ b/x86_64/extra/gdm/PKGBUILD @@ -0,0 +1,68 @@ +pkgname=gdm +pkgver=41.3 +pkgrel=1 +arch=('x86_64') +install=gdm.install +depends=(upower xrdb xorg-server libxdmcp systemd) +makedepends=(gobject-introspection git docbook-xsl meson) +commitid=7661ffceaa8e0e19d129d5376546438af56f7750 +source=(git+https://gitlab.gnome.org/GNOME/gdm.git#commit=$commitid + 0001-Xsession-Don-t-start-ssh-agent-by-default.patch) +options=(!strip) + +prepare() { + cd $pkgname + +# git apply -3 ../0001-Xsession-Don-t-start-ssh-agent-by-default.patch +} + +build() { + meson \ + gdm \ + _build \ + --prefix=/usr \ + -D dbus-sys="/usr/share/dbus-1/system.d" \ + -D default-path="/usr/local/bin:/usr/local/sbin:/usr/bin" \ + -D gdm-xsession=true \ + -D wayland-support=true \ + -D ipv6=true \ + -D plymouth=disabled \ + -D run-dir=/run/gdm \ + -D selinux=disabled + + meson compile -C _build +} + +package() { + meson install -C _build --destdir $pkgdir + + + cd $pkgdir + + install -d -o 0 -g 0 -m 0755 var + install -d -o 0 -g 0 -m 0755 var/lib + install -d -o 120 -g 120 -m 1770 var/lib/gdm + install -d -o 120 -g 120 -m 0700 var/lib/gdm/.config + install -d -o 120 -g 120 -m 0700 var/lib/gdm/.config/pulse + install -d -o 120 -g 120 -m 0700 var/lib/gdm/.local + install -d -o 120 -g 120 -m 0755 var/lib/gdm/.local/share + install -d -o 120 -g 120 -m 0755 var/lib/gdm/.local/share/applications + + install -o120 -g120 -m644 /dev/stdin $pkgdir/var/lib/gdm/.config/pulse/default.pa </dev/null + fi +} \ No newline at end of file diff --git a/x86_64/extra/geoip-database/PKGBUILD b/x86_64/extra/geoip-database/PKGBUILD new file mode 100644 index 0000000..5608e6e --- /dev/null +++ b/x86_64/extra/geoip-database/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=geoip-database +pkgver=20220910 +pkgrel=1 +arch=(x86_64) +makedepends=(util-linux) +url=https://mailfud.org/geoip-legacy/ +src_base=https://mailfud.org/geoip-legacy +# Latest update: 10 September 2022 +source=(GeoIP-$pkgver.dat.gz::$src_base/GeoIP.dat.gz + GeoIPv6-$pkgver.dat.gz::$src_base/GeoIPv6.dat.gz + GeoIPCity-$pkgver.dat.gz::$src_base/GeoIPCity.dat.gz + GeoIPCityv6-$pkgver.dat.gz::$src_base/GeoIPCityv6.dat.gz + GeoIPASNum-$pkgver.dat.gz::$src_base/GeoIPASNum.dat.gz + GeoIPASNumv6-$pkgver.dat.gz::$src_base/GeoIPASNumv6.dat.gz) + +prepare() { + rename -v -- "-$pkgver" '' *.dat +} + +package() { + install -d "$pkgdir/usr/share/GeoIP" + install -m644 -t "$pkgdir/usr/share/GeoIP" GeoIP{,v6}.dat + + install -m644 -t "$pkgdir/usr/share/GeoIP" GeoIPCity{,v6}.dat GeoIPASNum{,v6}.dat +} diff --git a/x86_64/extra/geoip/PKGBUILD b/x86_64/extra/geoip/PKGBUILD new file mode 100644 index 0000000..0343661 --- /dev/null +++ b/x86_64/extra/geoip/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=geoip +pkgver=1.6.12 +pkgrel=1 +arch=(x86_64) +depends=(geoip-database zlib) +makedepends=(autoconf libtool) +source=($pkgname-$pkgver.tar.gz::https://github.com/maxmind/${pkgname}-api-c/archive/v${pkgver}.tar.gz) + +prepare() { + cd geoip-api-c-$pkgver + + ./bootstrap +} + +build() { + cd geoip-api-c-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc/geoip + + make +} + +package() { + cd geoip-api-c-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/ghostscript/PKGBUILD b/x86_64/extra/ghostscript/PKGBUILD new file mode 100644 index 0000000..93eba9a --- /dev/null +++ b/x86_64/extra/ghostscript/PKGBUILD @@ -0,0 +1,47 @@ +pkgname=ghostscript +pkgver=9.56.1 +pkgrel=2 +arch=(x86_64) +depends=(libxt cups fontconfig zlib libpng libjpeg libtiff + lcms dbus libpaper openjpeg libidn jbig2dec) +makedepends=(gtk3+ gnutls glu freeglut) +source=(https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs${pkgver//./}/ghostpdl-$pkgver.tar.xz) + +prepare() { + cd ghostpdl-$pkgver + + # Force usage of system libs + rm -rf cups/libs expat ijs jbig2dec jpeg lcms2mt libpng openjpeg tiff zlib + rm -rf gpdl + + # https://bugs.ghostscript.com/show_bug.cgi?id=704405 + sed -i "s/gscms_transformm_color_const/gscms_transform_color_const/" base/gsicc_lcms2.c + + ./configure \ + --prefix=/usr \ + --enable-dynamic \ + --with-ijs \ + --with-jbig2dec \ + --with-x \ + --with-drivers=ALL \ + --with-fontpath=/usr/share/fonts/gsfonts \ + --without-versioned-path \ + --enable-fontconfig \ + --enable-freetype \ + --enable-openjpeg \ + --with-system-libtiff \ + --with-libpaper \ + --disable-compile-inits +} + +build() { + cd ghostpdl-$pkgver + + make -j4 +} + +package() { + cd ghostpdl-$pkgver + + make DESTDIR=$pkgdir install install-gs install-so-gs install-gxps install-so-gxps install-gpcl6 install-so-gpcl6 +} diff --git a/x86_64/extra/gi-docgen/PKGBUILD b/x86_64/extra/gi-docgen/PKGBUILD new file mode 100644 index 0000000..4d6a0fa --- /dev/null +++ b/x86_64/extra/gi-docgen/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=gi-docgen +pkgver=2022.1 +pkgrel=1 +arch=(x86_64) +depends=(python3) +makedepends=(git) +commitid=37b04455ff58cb2ec3f58917d0737c435344f2fb +source=(git+https://gitlab.gnome.org/GNOME/gi-docgen.git#commit=$commitid) + +prepare() { + pip3 install setuptools + + pip3 install jinja2 markdown markupsafe pygments toml typogrify +} + +build() { + cd $pkgname + + python setup.py build +} + +package() { + cd $pkgname + + python setup.py install --root="$pkgdir" --optimize=1 --skip-build +} diff --git a/x86_64/extra/giflib/PKGBUILD b/x86_64/extra/giflib/PKGBUILD new file mode 100644 index 0000000..7ed75f5 --- /dev/null +++ b/x86_64/extra/giflib/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=giflib +pkgver=5.2.1 +pkgrel=1 +pkgdesc='Library for reading and writing gif images' +url='http://giflib.sourceforge.net/' +arch=('x86_64') +depends=('glibc') +makedepends=('xmlto' 'docbook-xml' 'docbook-xsl') +source=(https://downloads.sourceforge.net/project/giflib/${pkgname}-${pkgver}.tar.gz + giflib-5.1.9-fix-missing-quantize-API-symbols.patch + giflib-5.1.9-make-flags.patch) + +prepare() { + cd ${pkgname}-${pkgver} + patch -Np1 < ../giflib-5.1.9-fix-missing-quantize-API-symbols.patch + patch -Np1 < ../giflib-5.1.9-make-flags.patch +} + +build() { + cd ${pkgname}-${pkgver} + make +} + +package() { + cd ${pkgname}-${pkgver} + make PREFIX=/usr DESTDIR="${pkgdir}" install + install -Dm 644 COPYING -t "${pkgdir}/usr/share/licenses/${pkgname}" +} \ No newline at end of file diff --git a/x86_64/extra/giflib/giflib-5.1.9-fix-missing-quantize-API-symbols.patch b/x86_64/extra/giflib/giflib-5.1.9-fix-missing-quantize-API-symbols.patch new file mode 100644 index 0000000..5948f45 --- /dev/null +++ b/x86_64/extra/giflib/giflib-5.1.9-fix-missing-quantize-API-symbols.patch @@ -0,0 +1,32 @@ +From ff8d9a59e79b79657e64430730c35835a84db619 Mon Sep 17 00:00:00 2001 +From: anthraxx +Date: Tue, 2 Apr 2019 11:46:18 +0200 +Subject: [PATCH] fix missing quantize API symbols + +GifQuantizeBuffer is required by many libs and applications +like mplayer, libgdiplus (mono) and others. +--- + Makefile | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Makefile b/Makefile +index e4ded69..17d0a5c 100644 +--- a/Makefile ++++ b/Makefile +@@ -29,11 +29,11 @@ LIBPOINT=0 + LIBVER=$(LIBMAJOR).$(LIBMINOR).$(LIBPOINT) + + SOURCES = dgif_lib.c egif_lib.c gifalloc.c gif_err.c gif_font.c \ +- gif_hash.c openbsd-reallocarray.c ++ gif_hash.c openbsd-reallocarray.c quantize.c + HEADERS = gif_hash.h gif_lib.h gif_lib_private.h + OBJECTS = $(SOURCES:.c=.o) + +-USOURCES = qprintf.c quantize.c getarg.c ++USOURCES = qprintf.c getarg.c + UHEADERS = getarg.h + UOBJECTS = $(USOURCES:.c=.o) + +-- +2.21.0 + diff --git a/x86_64/extra/giflib/giflib-5.1.9-make-flags.patch b/x86_64/extra/giflib/giflib-5.1.9-make-flags.patch new file mode 100644 index 0000000..f50d586 --- /dev/null +++ b/x86_64/extra/giflib/giflib-5.1.9-make-flags.patch @@ -0,0 +1,43 @@ +From 788a52c399f4731ac1fb27a49db48626f3e140e1 Mon Sep 17 00:00:00 2001 +From: anthraxx +Date: Tue, 2 Apr 2019 14:53:28 +0200 +Subject: [PATCH] respect existence of distro CFLAGS and CPPFLAGS + +- append CFLAGS instead of set to honor default distro CFLAGS +- add CPPFLAGS that are defined by distros +--- + Makefile | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/Makefile b/Makefile +index e4ded69..7fef84a 100644 +--- a/Makefile ++++ b/Makefile +@@ -8,7 +8,7 @@ + # + OFLAGS = -O0 -g + OFLAGS = -O2 +-CFLAGS = -std=gnu99 -fPIC -Wall -Wno-format-truncation $(OFLAGS) ++CFLAGS += -std=gnu99 -fPIC -Wall -Wno-format-truncation $(OFLAGS) + + SHELL = /bin/sh + TAR = tar +@@ -68,13 +68,13 @@ all: libgif.so libgif.a libutil.so libutil.a $(UTILS) + $(UTILS):: libgif.a libutil.a + + libgif.so: $(OBJECTS) $(HEADERS) +- $(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,libgif.so.$(LIBMAJOR) -o libgif.so $(OBJECTS) ++ $(CC) $(CFLAGS) $(CPPFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,libgif.so.$(LIBMAJOR) -o libgif.so $(OBJECTS) + + libgif.a: $(OBJECTS) $(HEADERS) + $(AR) rcs libgif.a $(OBJECTS) + + libutil.so: $(UOBJECTS) $(UHEADERS) +- $(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,libutil.so.$(LIBMAJOR) -o libutil.so $(UOBJECTS) ++ $(CC) $(CFLAGS) $(CPPFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,libutil.so.$(LIBMAJOR) -o libutil.so $(UOBJECTS) + + libutil.a: $(UOBJECTS) $(UHEADERS) + $(AR) rcs libutil.a $(UOBJECTS) +-- +2.21.0 + diff --git a/x86_64/extra/git/PKGBUILD b/x86_64/extra/git/PKGBUILD new file mode 100644 index 0000000..dbc25aa --- /dev/null +++ b/x86_64/extra/git/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=git +pkgver=2.34.1 +pkgrel=1 +arch=('x86_64') +source=(https://kernel.org/pub/software/scm/$pkgname/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --with-gitconfig=/etc/gitconfig \ + --with-python=python3 + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + +} diff --git a/x86_64/extra/glew-1.10/PKGBUILD b/x86_64/extra/glew-1.10/PKGBUILD new file mode 100644 index 0000000..a4fb17f --- /dev/null +++ b/x86_64/extra/glew-1.10/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=glew-1.10 +pkgver=1.10.0 +pkgrel=1 +arch=(x86_64) +depends=(libglvnd libx11 libxext libxi libxmu) +makedepends=(gcc make) +source=(https://downloads.sourceforge.net/glew/glew-$pkgver.tgz) + +prepare() { + cd glew-$pkgver + # Dont enforce lib64 on amd64 machine + sed -i 's|lib64|lib|' config/Makefile.linux +} + +build() { + cd glew-$pkgver + + make -j4 +} + +package() { + cd glew-$pkgver + + make GLEW_DEST=$pkgdir/usr install + rm -rf "${pkgdir}"/usr/{bin,include,lib/{libGLEW.{a,so},pkgconfig}} +} diff --git a/x86_64/extra/glib-networking/PKGBUILD b/x86_64/extra/glib-networking/PKGBUILD new file mode 100644 index 0000000..2e28e0e --- /dev/null +++ b/x86_64/extra/glib-networking/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=glib-networking +pkgver=2.70.1 +pkgrel=1 +arch=('x86_64') +depends=(glib2 gnutls) +source=(https://download.gnome.org/sources/$pkgname/2.70/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + --buildtype=release \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/glibmm/PKGBUILD b/x86_64/extra/glibmm/PKGBUILD new file mode 100644 index 0000000..90bf824 --- /dev/null +++ b/x86_64/extra/glibmm/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=glibmm +pkgver=2.66.2 +pkgrel=1 +arch=('x86_64') +depends=(glib2 libsigc++) +source=(https://download.gnome.org/sources/$pkgname/2.66/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + --buildtype=release \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/glslang/PKGBUILD b/x86_64/extra/glslang/PKGBUILD new file mode 100644 index 0000000..9fd687b --- /dev/null +++ b/x86_64/extra/glslang/PKGBUILD @@ -0,0 +1,53 @@ +pkgname=glslang +pkgver=11.9.0 +pkgrel=1 +pkgdesc='OpenGL and OpenGL ES shader front end and validator' +arch=('x86_64') +depends=('gcc' 'llvm') +makedepends=('cmake' 'ninja' 'git' 'python3') +# Get the commits from known_good.json for every release +source=(${pkgname}-${pkgver}.tar.gz::https://github.com/KhronosGroup/glslang/archive/${pkgver}.tar.gz + git+https://github.com/KhronosGroup/SPIRV-Tools#commit=eed5c76a57bb965f2e1b56d1dc40b50910b5ec1d + git+https://github.com/KhronosGroup/SPIRV-Headers#commit=4995a2f2723c401eb0ea3e10c81298906bf1422b) + +prepare() { + cp -r SPIRV-Tools ${pkgname}-${pkgver}/External/spirv-tools + cp -r SPIRV-Headers ${pkgname}-${pkgver}/External/spirv-tools/external/spirv-headers +} + +build() { + cd ${pkgname}-${pkgver} + export CXXFLAGS+=" -ffat-lto-objects" + + # SHARED + cmake \ + -Bbuild-shared \ + -GNinja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=ON + + ninja -Cbuild-shared + + # STATIC + cmake \ + -Bbuild-static \ + -GNinja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=OFF + + ninja -Cbuild-static +} + +package() { + cd ${pkgname}-${pkgver} + + DESTDIR="${pkgdir}" ninja -C build-shared install + DESTDIR="${pkgdir}" ninja -C build-static install + + cd "${pkgdir}"/usr/lib + for lib in *.so; do + ln -sf "${lib}" "${lib}.0" + done +} diff --git a/x86_64/extra/glu/PKGBUILD b/x86_64/extra/glu/PKGBUILD new file mode 100644 index 0000000..89ffb43 --- /dev/null +++ b/x86_64/extra/glu/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=glu +pkgver=9.0.2 +pkgrel=1 +pkgdesc="Mesa OpenGL Utility library" +arch=('x86_64') +url="https://cgit.freedesktop.org/mesa/glu/" +depends=('libglvnd') +makedepends=('meson') +source=(https://mesa.freedesktop.org/archive/$pkgname/$pkgname-$pkgver.tar.xz + 0001-pkgconfig-Depend-on-opengl-when-built-with-libglvnd.patch + 0002-pkgconfig-Drop-unneeded-lines-from-autotools-build.patch + 0003-pkgconfig-meson-build-should-match-autotools-require.patch) + +prepare() { + cd $pkgname-$pkgver + + # merged upstream + patch -Np1 -i ../0001-pkgconfig-Depend-on-opengl-when-built-with-libglvnd.patch + patch -Np1 -i ../0002-pkgconfig-Drop-unneeded-lines-from-autotools-build.patch + patch -Np1 -i ../0003-pkgconfig-meson-build-should-match-autotools-require.patch +} + +build() { + meson $pkgname-$pkgver build \ + --prefix=/usr \ + -D default_library=shared + + # Print config + meson configure build + + ninja -C build + meson compile -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build +} diff --git a/x86_64/extra/gmp/PKGBUILD b/x86_64/extra/gmp/PKGBUILD new file mode 100644 index 0000000..55ef727 --- /dev/null +++ b/x86_64/extra/gmp/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=gmp +pkgver=6.2.1 +pkgrel=2 +arch=('x86_64') +depends=(bash) +source=(https://ftp.gnu.org/gnu/gmp/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr \ + --enable-cxx \ + --build=x86_64-unknown-linux-gnu + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/gnome-common/PKGBUILD b/x86_64/extra/gnome-common/PKGBUILD new file mode 100644 index 0000000..5c7c88a --- /dev/null +++ b/x86_64/extra/gnome-common/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=gnome-common +pkgver=3.18.0 +pkgrel=1 +arch=(x86_64) +depends=(bash autoconf-archive intltool gtk-doc) +source=(https://download.gnome.org/sources/$pkgname/${pkgver:0:4}/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --with-autoconf-archive + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install +} diff --git a/x86_64/extra/gnome-icon-theme/PKGBUILD b/x86_64/extra/gnome-icon-theme/PKGBUILD new file mode 100644 index 0000000..ca94aad --- /dev/null +++ b/x86_64/extra/gnome-icon-theme/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=gnome-icon-theme +pkgver=3.12.0 +pkgrel=1 +arch=('x86_64') +depends=(gtk+ hicolor-icon-theme icon-naming-utils) +source=(https://download.gnome.org/sources/$pkgname/3.12/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --sysconfdir=/etc + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/gnome-online-accounts/PKGBUILD b/x86_64/extra/gnome-online-accounts/PKGBUILD new file mode 100644 index 0000000..d51b55f --- /dev/null +++ b/x86_64/extra/gnome-online-accounts/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=gnome-online-accounts +pkgver=3.40.1 +pkgrel=1 +arch=('x86_64') +depends=(gcr json-glib rest webkit2gtk gobject-introspection) +makedepends=(vala) +source=(https://download.gnome.org/sources/gnome-online-accounts/3.40/gnome-online-accounts-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/gnu-free-fonts/PKGBUILD b/x86_64/extra/gnu-free-fonts/PKGBUILD new file mode 100644 index 0000000..f86f8d1 --- /dev/null +++ b/x86_64/extra/gnu-free-fonts/PKGBUILD @@ -0,0 +1,10 @@ +pkgname=gnu-free-fonts +pkgver=20120503 +pkgrel=1 +arch=(x86_64) +url="https://www.gnu.org/software/freefont/" +source=(https://ftp.gnu.org/gnu/freefont/freefont-otf-${pkgver}.tar.gz) + +package() { + install -Dt "$pkgdir/usr/share/fonts/${pkgname%-fonts}" -m644 freefont-$pkgver/*.otf +} diff --git a/x86_64/extra/gnupg/PKGBUILD b/x86_64/extra/gnupg/PKGBUILD new file mode 100644 index 0000000..02fffcf --- /dev/null +++ b/x86_64/extra/gnupg/PKGBUILD @@ -0,0 +1,45 @@ +pkgname=gnupg +pkgver=2.2.32 +pkgrel=1 +pkgdesc='Complete and free implementation of the OpenPGP standard' +url='https://www.gnupg.org/' +license=('GPL') +arch=('x86_64') +depends=('npth' 'libgpg-error' 'libgcrypt' 'libksba' 'libassuan') +source=("https://gnupg.org/ftp/gcrypt/${pkgname}/${pkgname}-${pkgver}.tar.bz2" + 'drop-import-clean.patch' + 'avoid-beta-warning.patch') + +install=gnupg.install + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + patch -p1 -i ../avoid-beta-warning.patch + patch -p1 -i ../drop-import-clean.patch + + # improve reproducibility + rm doc/gnupg.info* + + ./autogen.sh +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --sbindir=/usr/bin \ + --libexecdir=/usr/lib/gnupg \ + --enable-maintainer-mode \ + + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install + ln -s gpg "${pkgdir}"/usr/bin/gpg2 + ln -s gpgv "${pkgdir}"/usr/bin/gpgv2 + + install -Dm 644 doc/examples/systemd-user/*.* -t "${pkgdir}/usr/lib/systemd/user" +} diff --git a/x86_64/extra/gnupg/avoid-beta-warning.patch b/x86_64/extra/gnupg/avoid-beta-warning.patch new file mode 100644 index 0000000..569fc09 --- /dev/null +++ b/x86_64/extra/gnupg/avoid-beta-warning.patch @@ -0,0 +1,56 @@ +From 114ab3037de3b0f9b35cf023b64c8a9b76070065 Mon Sep 17 00:00:00 2001 +From: Debian GnuPG Maintainers +Date: Tue, 14 Apr 2015 10:02:31 -0400 +Subject: [PATCH 6/7] avoid beta warning + +avoid self-describing as a beta + +Using autoreconf against the source as distributed in tarball form +invariably results in a package that thinks it's a "beta" package, +which produces the "THIS IS A DEVELOPMENT VERSION" warning string. + +since we use dh_autoreconf, i need this patch to avoid producing +builds that announce themselves as DEVELOPMENT VERSIONs. + +See discussion at: + + http://lists.gnupg.org/pipermail/gnupg-devel/2014-November/029065.html +--- + autogen.sh | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/autogen.sh b/autogen.sh +index b23855061..9b86d3ff9 100755 +--- a/autogen.sh ++++ b/autogen.sh +@@ -229,24 +229,24 @@ if [ "$myhost" = "find-version" ]; then + esac + + beta=no +- if [ -e .git ]; then ++ if false; then + ingit=yes + tmp=$(git describe --match "${matchstr1}" --long 2>/dev/null) + tmp=$(echo "$tmp" | sed s/^"$package"//) + if [ -n "$tmp" ]; then + tmp=$(echo "$tmp" | sed s/^"$package"// \ + | awk -F- '$3!=0 && $3 !~ /^beta/ {print"-beta"$3}') + else + tmp=$(git describe --match "${matchstr2}" --long 2>/dev/null \ + | awk -F- '$4!=0{print"-beta"$4}') + fi + [ -n "$tmp" ] && beta=yes + rev=$(git rev-parse --short HEAD | tr -d '\n\r') + rvd=$((0x$(echo ${rev} | dd bs=1 count=4 2>/dev/null))) + else + ingit=no +- beta=yes +- tmp="-unknown" ++ beta=no ++ tmp="" + rev="0000000" + rvd="0" + fi +-- +2.27.0 + diff --git a/x86_64/extra/gnupg/drop-import-clean.patch b/x86_64/extra/gnupg/drop-import-clean.patch new file mode 100644 index 0000000..0882c29 --- /dev/null +++ b/x86_64/extra/gnupg/drop-import-clean.patch @@ -0,0 +1,53 @@ +From 1690a464b28fa24ce82189a9bf5d7ce9b44804b8 Mon Sep 17 00:00:00 2001 +From: Daniel Kahn Gillmor +Date: Mon, 15 Jul 2019 16:24:35 -0400 +Subject: [PATCH 3/7] gpg: drop import-clean from default keyserver import + options + +* g10/gpg.c (main): drop IMPORT_CLEAN from the +default opt.keyserver_options.import_options +* doc/gpg.texi: reflect this change in the documentation + +Given that SELF_SIGS_ONLY is already set, it's not clear what +additional benefit IMPORT_CLEAN provides. Furthermore, IMPORT_CLEAN +means that receiving an OpenPGP certificate from a keyserver will +potentially delete data that is otherwise held in the local keyring, +which is surprising to users who expect retrieval from the keyservers +to be purely additive. + +GnuPG-Bug-Id: 4628 +Signed-off-by: Daniel Kahn Gillmor +--- + doc/gpg.texi | 2 +- + g10/gpg.c | 3 +-- + 2 files changed, 2 insertions(+), 3 deletions(-) + +diff --git a/doc/gpg.texi b/doc/gpg.texi +index 4870441d4..551459a74 100644 +--- a/doc/gpg.texi ++++ b/doc/gpg.texi +@@ -1963,7 +1963,7 @@ are available for all keyserver types, some common options are: + + @end table + +-The default list of options is: "self-sigs-only, import-clean, ++The default list of options is: "self-sigs-only, + repair-keys, repair-pks-subkey-bug, export-attributes, + honor-pka-record". + +diff --git a/g10/gpg.c b/g10/gpg.c +index 68cc22041..fa2bcfa5e 100644 +--- a/g10/gpg.c ++++ b/g10/gpg.c +@@ -2397,8 +2397,7 @@ main (int argc, char **argv) + opt.export_options = EXPORT_ATTRIBUTES; + opt.keyserver_options.import_options = (IMPORT_REPAIR_KEYS + | IMPORT_REPAIR_PKS_SUBKEY_BUG +- | IMPORT_SELF_SIGS_ONLY +- | IMPORT_CLEAN); ++ | IMPORT_SELF_SIGS_ONLY); + opt.keyserver_options.export_options = EXPORT_ATTRIBUTES; + opt.keyserver_options.options = KEYSERVER_HONOR_PKA_RECORD; + opt.verify_options = (LIST_SHOW_UID_VALIDITY +-- +2.27.0 diff --git a/x86_64/extra/gnupg/gnupg.install b/x86_64/extra/gnupg/gnupg.install new file mode 100644 index 0000000..1f19b99 --- /dev/null +++ b/x86_64/extra/gnupg/gnupg.install @@ -0,0 +1,31 @@ +_global_units() { + _units=(dirmngr.socket gpg-agent.socket gpg-agent-{browser,extra,ssh}.socket) + _dir=/etc/systemd/user/sockets.target.wants + + case $1 in + enable) + mkdir -p $_dir + for _u in "${_units[@]}"; do + ln -sf /usr/lib/systemd/user/$_u $_dir/$_u + done + ;; + disable) + for _u in "${_units[@]}"; do + rm -f $_dir/$_u + done + rmdir -p --ignore-fail-on-non-empty $_dir + ;; + esac +} + +post_install() { + # See FS#42798 and FS#47371 + dirmngr /dev/null + + # Let systemd supervise daemons by default + _global_units enable +} + +pre_remove() { + _global_units disable +} diff --git a/x86_64/extra/gnutls/PKGBUILD b/x86_64/extra/gnutls/PKGBUILD new file mode 100644 index 0000000..f5abc6e --- /dev/null +++ b/x86_64/extra/gnutls/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=gnutls +pkgver=3.7.2 +pkgrel=1 +arch=('x86_64') +depends=(nettle) +source=(https://gnupg.org/ftp/gcrypt/$pkgname/v3.7/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --with-included-unistring +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/go-md2man/PKGBUILD b/x86_64/extra/go-md2man/PKGBUILD new file mode 100644 index 0000000..c0ed405 --- /dev/null +++ b/x86_64/extra/go-md2man/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=go-md2man +pkgver=2.0.1 +pkgrel=1 +arch=('x86_64') +makedepends=(go) +source=($pkgname-$pkgver.tar.gz::"https://github.com/cpuguy83/go-md2man/archive/v$pkgver.tar.gz") + +build() { + cd $pkgname-$pkgver + + export GOFLAGS="-buildmode=pie -mod=vendor -trimpath" + export CGO_LDFLAGS="$LDFLAGS" + + go build -o go-md2man . + ./go-md2man -in=go-md2man.1.md -out=go-md2man.1 +} + +package() { + cd $pkgname-$pkgver + + install -Dm755 go-md2man "$pkgdir/usr/bin/go-md2man" + install -Dm755 go-md2man.1 "$pkgdir/usr/share/man/man1/go-md2man.1" +} diff --git a/x86_64/extra/go/PKGBUILD b/x86_64/extra/go/PKGBUILD new file mode 100644 index 0000000..cc9f9a4 --- /dev/null +++ b/x86_64/extra/go/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=go +pkgver=1.18.3 +pkgrel=1 +arch=('x86_64') +makedepends=(git perl go) +source=(https://go.dev/dl/go$pkgver.src.tar.gz) + +build() { + export GOARCH=amd64 + export GOAMD64=v1 # make sure we're building for the right x86-64 version + export GOROOT_FINAL=/usr/lib/go + export GOROOT_BOOTSTRAP=/usr/lib/go + + cd "$pkgname/src" + ./make.bash -v +} + +package() { + cd $pkgname + + install -d "$pkgdir/usr/bin" "$pkgdir/usr/lib/go" "$pkgdir/usr/share/doc/go" \ + "$pkgdir/usr/lib/go/pkg/linux_amd64_"{dynlink,race} + + cp -a bin pkg src lib misc api test "$pkgdir/usr/lib/go" + cp -r doc/* "$pkgdir/usr/share/doc/go" + + ln -sf /usr/lib/go/bin/go "$pkgdir/usr/bin/go" + ln -sf /usr/lib/go/bin/gofmt "$pkgdir/usr/bin/gofmt" + ln -sf /usr/share/doc/go "$pkgdir/usr/lib/go/doc" + + install -Dm644 VERSION "$pkgdir/usr/lib/go/VERSION" + + rm -rf "$pkgdir/usr/lib/go/pkg/bootstrap" "$pkgdir/usr/lib/go/pkg/tool/*/api" + + # TODO: Figure out if really needed + rm -rf "$pkgdir"/usr/lib/go/pkg/obj/go-build/* +} diff --git a/x86_64/extra/gobject-introspection/PKGBUILD b/x86_64/extra/gobject-introspection/PKGBUILD new file mode 100644 index 0000000..91b744c --- /dev/null +++ b/x86_64/extra/gobject-introspection/PKGBUILD @@ -0,0 +1,34 @@ +pkgname=gobject-introspection +pkgver=1.72.0+7+g5913e312 +gver=2.70.1 +pkgrel=1 +arch=('x86_64') +makedepends=(git meson glib2) +source=("git+https://gitlab.gnome.org/GNOME/gobject-introspection.git" + "git+https://gitlab.gnome.org/GNOME/glib.git#tag=$gver") + +pkgver() { + cd $pkgname + git describe --tags | sed 's/-/+/g' +} + +build() { + meson $pkgname build \ + -D gtk_doc=false \ + -D glib_src_dir="$srcdir/glib" \ + --prefix=/usr --libdir=/usr/lib + + meson compile -C build +} + +package() { + meson install -C build --destdir $pkgdir + + mkdir -p $pkgdir/usr/lib/pkgconfig + cp -f build/meson-private/gobject-introspection-1.0.pc $pkgdir/usr/lib/pkgconfig/ + + # Compile and optimize py scripts + python -m compileall -d /usr/lib/$pkgname usr/lib/$pkgname + python -O -m compileall -d /usr/lib/$pkgname usr/lib/$pkgname +} + diff --git a/x86_64/extra/gparted/PKGBUILD b/x86_64/extra/gparted/PKGBUILD new file mode 100644 index 0000000..c6e0ac3 --- /dev/null +++ b/x86_64/extra/gparted/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=gparted +pkgver=1.3.1 +pkgrel=1 +arch=('x86_64') +depends=(gtkmm parted) +source=(https://downloads.sourceforge.net/gparted/gparted-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --disable-doc + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/gperf/PKGBUILD b/x86_64/extra/gperf/PKGBUILD new file mode 100644 index 0000000..bfe5d24 --- /dev/null +++ b/x86_64/extra/gperf/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=gperf +pkgver=3.1 +pkgrel=2 +arch=('x86_64') +depends=(glibc) +source=(https://ftp.gnu.org/gnu/gperf/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/gperftools/PKGBUILD b/x86_64/extra/gperftools/PKGBUILD new file mode 100644 index 0000000..3759af2 --- /dev/null +++ b/x86_64/extra/gperftools/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=gperftools +pkgver=2.9.1 +pkgrel=1 +arch=('x86_64') +depends=('perl') +source=(https://github.com/gperftools/gperftools/releases/download/$pkgname-$pkgver/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --enable-frame-pointers + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install +} diff --git a/x86_64/extra/gpgme/PKGBUILD b/x86_64/extra/gpgme/PKGBUILD new file mode 100644 index 0000000..bb3136a --- /dev/null +++ b/x86_64/extra/gpgme/PKGBUILD @@ -0,0 +1,32 @@ +pkgname=gpgme +pkgver=1.16.0 +pkgrel=1 +pkgdesc="A C wrapper library for GnuPG" +arch=('x86_64') +url='https://www.gnupg.org/related_software/gpgme/' +makedepends=('libgpg-error' 'python3') +source=(https://www.gnupg.org/ftp/gcrypt/${pkgname}/${pkgname}-${pkgver}.tar.bz2 + python310.patch) + +prepare() { + cd ${pkgbase}-${pkgver} + + patch -Np1 -i ../python310.patch +} + +build() { + cd ${pkgbase}-${pkgver} + + ./configure \ + --prefix=/usr \ + --disable-fd-passing \ + --disable-gpgsm-test + + make +} + +package_gpgme() { + cd ${pkgbase}-${pkgver}/ + + make DESTDIR="${pkgdir}" install +} diff --git a/x86_64/extra/gpgme/python310.patch b/x86_64/extra/gpgme/python310.patch new file mode 100644 index 0000000..65b32de --- /dev/null +++ b/x86_64/extra/gpgme/python310.patch @@ -0,0 +1,331 @@ +diff -upr gpgme-1.16.0.orig/configure gpgme-1.16.0/configure +--- gpgme-1.16.0.orig/configure 2021-06-24 20:10:50.000000000 +0300 ++++ gpgme-1.16.0/configure 2021-12-01 00:12:24.383952330 +0200 +@@ -19625,7 +19625,7 @@ $as_echo_n "checking for $am_display_PYT + if ${am_cv_python_version+:} false; then : + $as_echo_n "(cached) " >&6 + else +- am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` ++ am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:4])"` + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 + $as_echo "$am_cv_python_version" >&6; } +@@ -19666,7 +19666,7 @@ else: + # + try: + from platform import python_implementation +- if python_implementation() == 'CPython' and sys.version[:3] == '2.7': ++ if python_implementation() == 'CPython' and sys.version[:4] == '2.7': + can_use_sysconfig = 0 + except ImportError: + pass" +@@ -19875,7 +19875,7 @@ variable to configure. See \`\`configure + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5 + $as_echo_n "checking for the distutils Python package... " >&6; } + ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` +- if test -z "$ac_distutils_result"; then ++ if test $? -eq 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + $as_echo "yes" >&6; } + else +@@ -19933,7 +19933,7 @@ EOD` + ac_python_version=$PYTHON_VERSION + else + ac_python_version=`$PYTHON -c "import sys; \ +- print (sys.version[:3])"` ++ print (sys.version[:4])"` + fi + fi + +@@ -20255,7 +20255,7 @@ $as_echo_n "checking for $am_display_PYT + if ${am_cv_python_version+:} false; then : + $as_echo_n "(cached) " >&6 + else +- am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` ++ am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:4])"` + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 + $as_echo "$am_cv_python_version" >&6; } +@@ -20296,7 +20296,7 @@ else: + # + try: + from platform import python_implementation +- if python_implementation() == 'CPython' and sys.version[:3] == '2.7': ++ if python_implementation() == 'CPython' and sys.version[:4] == '2.7': + can_use_sysconfig = 0 + except ImportError: + pass" +@@ -20505,7 +20505,7 @@ variable to configure. See \`\`configure + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5 + $as_echo_n "checking for the distutils Python package... " >&6; } + ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` +- if test -z "$ac_distutils_result"; then ++ if test $? -eq 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + $as_echo "yes" >&6; } + else +@@ -20563,7 +20563,7 @@ EOD` + ac_python_version=$PYTHON_VERSION + else + ac_python_version=`$PYTHON -c "import sys; \ +- print (sys.version[:3])"` ++ print (sys.version[:4])"` + fi + fi + +@@ -20885,7 +20885,7 @@ $as_echo_n "checking for $am_display_PYT + if ${am_cv_python_version+:} false; then : + $as_echo_n "(cached) " >&6 + else +- am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` ++ am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:4])"` + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 + $as_echo "$am_cv_python_version" >&6; } +@@ -20926,7 +20926,7 @@ else: + # + try: + from platform import python_implementation +- if python_implementation() == 'CPython' and sys.version[:3] == '2.7': ++ if python_implementation() == 'CPython' and sys.version[:4] == '2.7': + can_use_sysconfig = 0 + except ImportError: + pass" +@@ -21135,7 +21135,7 @@ variable to configure. See \`\`configure + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5 + $as_echo_n "checking for the distutils Python package... " >&6; } + ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` +- if test -z "$ac_distutils_result"; then ++ if test $? -eq 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + $as_echo "yes" >&6; } + else +@@ -21193,7 +21193,7 @@ EOD` + ac_python_version=$PYTHON_VERSION + else + ac_python_version=`$PYTHON -c "import sys; \ +- print (sys.version[:3])"` ++ print (sys.version[:4])"` + fi + fi + +@@ -21515,7 +21515,7 @@ $as_echo_n "checking for $am_display_PYT + if ${am_cv_python_version+:} false; then : + $as_echo_n "(cached) " >&6 + else +- am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` ++ am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:4])"` + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 + $as_echo "$am_cv_python_version" >&6; } +@@ -21556,7 +21556,7 @@ else: + # + try: + from platform import python_implementation +- if python_implementation() == 'CPython' and sys.version[:3] == '2.7': ++ if python_implementation() == 'CPython' and sys.version[:4] == '2.7': + can_use_sysconfig = 0 + except ImportError: + pass" +@@ -21765,7 +21765,7 @@ variable to configure. See \`\`configure + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5 + $as_echo_n "checking for the distutils Python package... " >&6; } + ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` +- if test -z "$ac_distutils_result"; then ++ if test $? -eq 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + $as_echo "yes" >&6; } + else +@@ -21823,7 +21823,7 @@ EOD` + ac_python_version=$PYTHON_VERSION + else + ac_python_version=`$PYTHON -c "import sys; \ +- print (sys.version[:3])"` ++ print (sys.version[:4])"` + fi + fi + +@@ -22145,7 +22145,7 @@ $as_echo_n "checking for $am_display_PYT + if ${am_cv_python_version+:} false; then : + $as_echo_n "(cached) " >&6 + else +- am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` ++ am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:4])"` + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 + $as_echo "$am_cv_python_version" >&6; } +@@ -22186,7 +22186,7 @@ else: + # + try: + from platform import python_implementation +- if python_implementation() == 'CPython' and sys.version[:3] == '2.7': ++ if python_implementation() == 'CPython' and sys.version[:4] == '2.7': + can_use_sysconfig = 0 + except ImportError: + pass" +@@ -22395,7 +22395,7 @@ variable to configure. See \`\`configure + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5 + $as_echo_n "checking for the distutils Python package... " >&6; } + ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` +- if test -z "$ac_distutils_result"; then ++ if test $? -eq 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + $as_echo "yes" >&6; } + else +@@ -22453,7 +22453,7 @@ EOD` + ac_python_version=$PYTHON_VERSION + else + ac_python_version=`$PYTHON -c "import sys; \ +- print (sys.version[:3])"` ++ print (sys.version[:4])"` + fi + fi + +@@ -22775,7 +22775,7 @@ $as_echo_n "checking for $am_display_PYT + if ${am_cv_python_version+:} false; then : + $as_echo_n "(cached) " >&6 + else +- am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` ++ am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:4])"` + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 + $as_echo "$am_cv_python_version" >&6; } +@@ -22816,7 +22816,7 @@ else: + # + try: + from platform import python_implementation +- if python_implementation() == 'CPython' and sys.version[:3] == '2.7': ++ if python_implementation() == 'CPython' and sys.version[:4] == '2.7': + can_use_sysconfig = 0 + except ImportError: + pass" +@@ -23025,7 +23025,7 @@ variable to configure. See \`\`configure + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5 + $as_echo_n "checking for the distutils Python package... " >&6; } + ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` +- if test -z "$ac_distutils_result"; then ++ if test $? -eq 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + $as_echo "yes" >&6; } + else +@@ -23083,7 +23083,7 @@ EOD` + ac_python_version=$PYTHON_VERSION + else + ac_python_version=`$PYTHON -c "import sys; \ +- print (sys.version[:3])"` ++ print (sys.version[:4])"` + fi + fi + +@@ -23291,13 +23291,13 @@ $as_echo "$as_me: WARNING: + + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version is >= 3.9" >&5 +-$as_echo_n "checking whether $PYTHON version is >= 3.9... " >&6; } ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version is >= 3.10" >&5 ++$as_echo_n "checking whether $PYTHON version is >= 3.10... " >&6; } + prog="import sys + # split strings by '.' and convert to numeric. Append some zeros + # because we need at least 4 digits for the hex conversion. + # map returns an iterator in Python 3.0 and a list in 2.x +-minver = list(map(int, '3.9'.split('.'))) + [0, 0, 0] ++minver = list(map(int, '3.10'.split('.'))) + [0, 0, 0] + minverhex = 0 + # xrange is not present in Python 3.0 and range returns an iterator + for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] +@@ -23318,19 +23318,19 @@ fi + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 3.9" >&5 +-$as_echo_n "checking for a Python interpreter with version >= 3.9... " >&6; } ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 3.10" >&5 ++$as_echo_n "checking for a Python interpreter with version >= 3.10... " >&6; } + if ${am_cv_pathless_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 + else + +- for am_cv_pathless_PYTHON in python3.9 none; do ++ for am_cv_pathless_PYTHON in python3.10 none; do + test "$am_cv_pathless_PYTHON" = none && break + prog="import sys + # split strings by '.' and convert to numeric. Append some zeros + # because we need at least 4 digits for the hex conversion. + # map returns an iterator in Python 3.0 and a list in 2.x +-minver = list(map(int, '3.9'.split('.'))) + [0, 0, 0] ++minver = list(map(int, '3.10'.split('.'))) + [0, 0, 0] + minverhex = 0 + # xrange is not present in Python 3.0 and range returns an iterator + for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] +@@ -23405,7 +23405,7 @@ $as_echo_n "checking for $am_display_PYT + if ${am_cv_python_version+:} false; then : + $as_echo_n "(cached) " >&6 + else +- am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` ++ am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:4])"` + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 + $as_echo "$am_cv_python_version" >&6; } +@@ -23446,7 +23446,7 @@ else: + # + try: + from platform import python_implementation +- if python_implementation() == 'CPython' and sys.version[:3] == '2.7': ++ if python_implementation() == 'CPython' and sys.version[:4] == '2.7': + can_use_sysconfig = 0 + except ImportError: + pass" +@@ -23655,7 +23655,7 @@ variable to configure. See \`\`configure + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5 + $as_echo_n "checking for the distutils Python package... " >&6; } + ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` +- if test -z "$ac_distutils_result"; then ++ if test $? -eq 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + $as_echo "yes" >&6; } + else +@@ -23713,7 +23713,7 @@ EOD` + ac_python_version=$PYTHON_VERSION + else + ac_python_version=`$PYTHON -c "import sys; \ +- print (sys.version[:3])"` ++ print (sys.version[:4])"` + fi + fi + +@@ -24035,7 +24035,7 @@ $as_echo_n "checking for $am_display_PYT + if ${am_cv_python_version+:} false; then : + $as_echo_n "(cached) " >&6 + else +- am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` ++ am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:4])"` + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 + $as_echo "$am_cv_python_version" >&6; } +@@ -24076,7 +24076,7 @@ else: + # + try: + from platform import python_implementation +- if python_implementation() == 'CPython' and sys.version[:3] == '2.7': ++ if python_implementation() == 'CPython' and sys.version[:4] == '2.7': + can_use_sysconfig = 0 + except ImportError: + pass" +@@ -24285,7 +24285,7 @@ variable to configure. See \`\`configure + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5 + $as_echo_n "checking for the distutils Python package... " >&6; } + ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` +- if test -z "$ac_distutils_result"; then ++ if test $? -eq 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + $as_echo "yes" >&6; } + else +@@ -24343,7 +24343,7 @@ EOD` + ac_python_version=$PYTHON_VERSION + else + ac_python_version=`$PYTHON -c "import sys; \ +- print (sys.version[:3])"` ++ print (sys.version[:4])"` + fi + fi \ No newline at end of file diff --git a/x86_64/extra/gpm/PKGBUILD b/x86_64/extra/gpm/PKGBUILD new file mode 100644 index 0000000..a9e8eba --- /dev/null +++ b/x86_64/extra/gpm/PKGBUILD @@ -0,0 +1,38 @@ +pkgname=gpm +pkgver=1.20.7 +pkgrel=2 +arch=('x86_64') +depends=(bash procps-ng) +source=(https://www.nico.schottelius.org/software/gpm/archives/$pkgname-$pkgver.tar.bz2 + gpm-1.20.7-consolidated-1.patch) + +build() { + cd $pkgname-$pkgver + + patch -Np1 -i ../gpm-1.20.7-consolidated-1.patch + + ./autogen.sh + ./configure --prefix=/usr --sysconfdir=/etc + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + + ln -sfv libgpm.so.2.1.0 $pkgdir/usr/lib/libgpm.so + install -v -m644 conf/gpm-root.conf $pkgdir/etc + mkdir -p $pkgdir/usr/lib/systemd/system/ + cp -f ../../gpm.service $pkgdir/usr/lib/systemd/system/gpm.service + + mkdir -p $pkgdir/etc/sysconfig + cat > $pkgdir/etc/sysconfig/mouse << "EOF" +# Begin /etc/sysconfig/mouse + +MDEVICE="/dev/input/mice" +PROTOCOL="imps2" +GPMOPTS="" + +# End /etc/sysconfig/mouse +EOF +} diff --git a/x86_64/extra/gpm/gpm-1.20.7-consolidated-1.patch b/x86_64/extra/gpm/gpm-1.20.7-consolidated-1.patch new file mode 100644 index 0000000..adf2dae --- /dev/null +++ b/x86_64/extra/gpm/gpm-1.20.7-consolidated-1.patch @@ -0,0 +1,116 @@ +Submitted by: Pierre Labastie +Date: 2020-05-10 +Initial Package Version: 1.20.7 +Origin: Upstream + PR's +Upstream Status: some fixes committed, others pending +Description: Fix several build failures + - some introduced by glibc-2.26 + - some introduced by gcc-10 + - also fix an ignored error when gpm.h is not already in + /usr/include +diff -Naur gpm-1.20.7.old/src/daemon/open_console.c gpm-1.20.7.new/src/daemon/open_console.c +--- gpm-1.20.7.old/src/daemon/open_console.c 2012-10-26 23:21:38.000000000 +0200 ++++ gpm-1.20.7.new/src/daemon/open_console.c 2020-05-10 15:48:59.752067421 +0200 +@@ -23,6 +23,10 @@ + #include /* stat() */ + #include /* ioctl */ + ++#ifdef HAVE_SYS_SYSMACROS_H ++#include /* major() w/newer glibc */ ++#endif ++ + /* Linux specific (to be outsourced in gpm2 */ + #include /* for serial console check */ + #include /* for serial console check */ +diff -Naur gpm-1.20.7.old/src/headers/daemon.h gpm-1.20.7.new/src/headers/daemon.h +--- gpm-1.20.7.old/src/headers/daemon.h 2012-10-26 23:21:38.000000000 +0200 ++++ gpm-1.20.7.new/src/headers/daemon.h 2020-05-10 15:48:52.719159555 +0200 +@@ -180,7 +180,7 @@ + extern Gpm_Type mice[]; + extern Gpm_Type *repeated_type; + +-time_t last_selection_time; ++extern time_t last_selection_time; + + + +diff -Naur gpm-1.20.7.old/src/prog/display-buttons.c gpm-1.20.7.new/src/prog/display-buttons.c +--- gpm-1.20.7.old/src/prog/display-buttons.c 2012-10-26 23:21:38.000000000 +0200 ++++ gpm-1.20.7.new/src/prog/display-buttons.c 2020-05-10 15:48:59.751067434 +0200 +@@ -36,7 +36,7 @@ + #include /* printf() */ + #include /* time() */ + #include /* errno */ +-#include /* gpm information */ ++#include "headers/gpm.h" /* gpm information */ + + /* display resulting data */ + int display_data(Gpm_Event *event, void *data) +diff -Naur gpm-1.20.7.old/src/prog/display-coords.c gpm-1.20.7.new/src/prog/display-coords.c +--- gpm-1.20.7.old/src/prog/display-coords.c 2012-10-26 23:21:38.000000000 +0200 ++++ gpm-1.20.7.new/src/prog/display-coords.c 2020-05-10 15:48:59.751067434 +0200 +@@ -37,7 +37,7 @@ + #include /* printf() */ + #include /* time() */ + #include /* errno */ +-#include /* gpm information */ ++#include "headers/gpm.h" /* gpm information */ + + /* display resulting data */ + int display_data(Gpm_Event *event, void *data) +diff -Naur gpm-1.20.7.old/src/prog/get-versions.c gpm-1.20.7.new/src/prog/get-versions.c +--- gpm-1.20.7.old/src/prog/get-versions.c 2012-10-26 23:21:38.000000000 +0200 ++++ gpm-1.20.7.new/src/prog/get-versions.c 2020-05-10 15:48:59.751067434 +0200 +@@ -22,7 +22,7 @@ + ********/ + + #include /* printf() */ +-#include /* gpm information */ ++#include "headers/gpm.h" /* gpm information */ + + int main() + { +diff -Naur gpm-1.20.7.old/src/prog/gpm-root.y gpm-1.20.7.new/src/prog/gpm-root.y +--- gpm-1.20.7.old/src/prog/gpm-root.y 2012-10-26 23:21:38.000000000 +0200 ++++ gpm-1.20.7.new/src/prog/gpm-root.y 2020-05-10 15:48:59.752067421 +0200 +@@ -443,6 +443,7 @@ + } + + /*---------------------------------------------------------------------*/ ++#if 0 + static int f_debug_one(FILE *f, Draw *draw) + { + DrawItem *ip; +@@ -465,6 +466,7 @@ + #undef LINE + return 0; + } ++#endif + + int f_debug(int mode, DrawItem *self, int uid) + { +@@ -960,10 +962,8 @@ + /*------------*/ + static inline void scr_restore(int fd, FILE *f, unsigned char *buffer, int vc) + { +- int x,y, dumpfd; ++ int dumpfd; + char dumpname[20]; +- +- x=buffer[2]; y=buffer[3]; + + /* WILL NOT WORK WITH DEVFS! FIXME! */ + sprintf(dumpname,"/dev/vcsa%i",vc); +@@ -1196,11 +1196,7 @@ + LOG_DAEMON : LOG_USER); + /* reap your zombies */ + childaction.sa_handler=reap_children; +-#if defined(__GLIBC__) +- __sigemptyset(&childaction.sa_mask); +-#else /* __GLIBC__ */ +- childaction.sa_mask=0; +-#endif /* __GLIBC__ */ ++ sigemptyset(&childaction.sa_mask); + childaction.sa_flags=SA_INTERRUPT; /* need to break the select() call */ + sigaction(SIGCHLD,&childaction,NULL); + diff --git a/x86_64/extra/gpm/gpm.service b/x86_64/extra/gpm/gpm.service new file mode 100644 index 0000000..59e837d --- /dev/null +++ b/x86_64/extra/gpm/gpm.service @@ -0,0 +1,9 @@ +[Unit] +Description=Virtual console mouse server + +[Service] +Type=forking +ExecStart=/usr/sbin/gpm -m /dev/input/mice -t imps2 + +[Install] +WantedBy=multi-user.target diff --git a/x86_64/extra/gpm/update b/x86_64/extra/gpm/update new file mode 100644 index 0000000..ab139f4 --- /dev/null +++ b/x86_64/extra/gpm/update @@ -0,0 +1,5 @@ +url=https://github.com/telmich/gpm/tags + +getver_gpm() { + getver_github | grep -Ev "1.99*" +} diff --git a/x86_64/extra/gptfdisk/PKGBUILD b/x86_64/extra/gptfdisk/PKGBUILD new file mode 100644 index 0000000..3bd373d --- /dev/null +++ b/x86_64/extra/gptfdisk/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=gptfdisk +pkgver=1.0.8 +pkgrel=1 +arch=(x86_64) +depends=(gcc popt ncurses util-linux) +source=(https://downloads.sourceforge.net/project/$pkgname/$pkgname/$pkgver/$pkgname-$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + sed -i '/^#include /s:ncursesw/::' gptcurses.cc +} + +build() { + cd $pkgname-$pkgver + + make +} + +package() { + cd $pkgname-$pkgver + + install -d "$pkgdir"/usr/{bin,share/{doc/gdisk,man/man8}} + install -t "$pkgdir/usr/bin" {,c,s}gdisk fixparts + install -m644 -t "$pkgdir/usr/share/man/man8" {{,c,s}gdisk,fixparts}.8 +} diff --git a/x86_64/extra/grantlee/PKGBUILD b/x86_64/extra/grantlee/PKGBUILD new file mode 100644 index 0000000..9105521 --- /dev/null +++ b/x86_64/extra/grantlee/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=grantlee +pkgver=5.2.0 +pkgrel=1 +arch=(x86_64) +depends=(qt5) +makedepends=(cmake doxygen) +source=(http://downloads.grantlee.org/grantlee-$pkgver.tar.gz) + +prepare() { + mkdir -p build +} + +build() { + cd build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_TESTING=OFF \ + -Wno-dev ../$pkgname-$pkgver + + make -j7 +} + +package() { + cd build + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/graphene/PKGBUILD b/x86_64/extra/graphene/PKGBUILD new file mode 100644 index 0000000..45d4eaa --- /dev/null +++ b/x86_64/extra/graphene/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=graphene +pkgver=1.10.8 +pkgrel=1 +arch=(x86_64) +depends=(glib2) +makedepends=(gobject-introspection python3-pip) +commitid=4e2578450809c2099400cf85caf18eafcd7100aa +source=(git+https://github.com/ebassi/graphene#commit=$commitid) + +prepare() { + pip3 install tappy +} + +build() { + meson \ + $pkgname build\ + --prefix=/usr \ + -D installed_tests=false + + meson compile -C build +} + +package() { + meson install -C build --destdir $pkgdir +} diff --git a/x86_64/extra/grep/PKGBUILD b/x86_64/extra/grep/PKGBUILD new file mode 100644 index 0000000..111ed73 --- /dev/null +++ b/x86_64/extra/grep/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=grep +pkgver=3.7 +pkgrel=1 +arch=('x86_64') +depends=(glibc pcre) +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --bindir=/bin + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/groff/PKGBUILD b/x86_64/extra/groff/PKGBUILD new file mode 100644 index 0000000..9c93fd1 --- /dev/null +++ b/x86_64/extra/groff/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=groff +pkgver=1.22.4 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + PAGE=A4 ./configure --prefix=/usr + make || make -j1 +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/gsl/PKGBUILD b/x86_64/extra/gsl/PKGBUILD new file mode 100644 index 0000000..cbe9bd7 --- /dev/null +++ b/x86_64/extra/gsl/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=gsl +pkgver=2.7.1 +pkgrel=1 +arch=('x86_64') +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/gst-plugins-base/PKGBUILD b/x86_64/extra/gst-plugins-base/PKGBUILD new file mode 100644 index 0000000..7d88784 --- /dev/null +++ b/x86_64/extra/gst-plugins-base/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=gst-plugins-base +pkgver=1.18.5 +pkgrel=1 +arch=('x86_64') +depends=(gstreamer alsa-lib gobject-introspection iso-codes + libgudev libjpeg libogg libpng libtheora libvorbis + mesa pango wayland-protocols xorg-server gtk3+ opus + qt5) +makedepends=(valgrind) +source=(https://gstreamer.freedesktop.org/src/$pkgname/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir build +} + +build() { + cd $pkgname-$pkgver/build + + meson \ + --prefix=/usr \ + --buildtype=release \ + --wrap-mode=nodownload \ + -D package-origin=http://drunk.epizy.com \ + -D package-name="[GStreamer]: $pkgver - DRUNK" + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/gst-plugins-good/PKGBUILD b/x86_64/extra/gst-plugins-good/PKGBUILD new file mode 100644 index 0000000..53ac49f --- /dev/null +++ b/x86_64/extra/gst-plugins-good/PKGBUILD @@ -0,0 +1,32 @@ +pkgname=gst-plugins-good +pkgver=1.18.5 +pkgrel=1 +arch=('x86_64') +depends=(gst-plugins-base cairo gdk-pixbuf lame libsoup libvpx nasm + gtk3+ pulseaudio qt5 valgrind wayland) +makedepends=(gcc) +source=(https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + meson \ + --prefix=/usr \ + --buildtype=release \ + --wrap-mode=nodownload \ + -D package-origin=http://drunk.epizy.com \ + -D package-name="[GStreamer]: $pkgver - DRUNK" + +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/gstreamer/PKGBUILD b/x86_64/extra/gstreamer/PKGBUILD new file mode 100644 index 0000000..d660583 --- /dev/null +++ b/x86_64/extra/gstreamer/PKGBUILD @@ -0,0 +1,32 @@ +pkgname=gstreamer +pkgver=1.18.5 +pkgrel=1 +arch=('x86_64') +depends=(glib2 gobject-introspection gtk3+) +makedepends=(valgrind) +source=(https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir build +} + +build() { + cd $pkgname-$pkgver/build + + meson \ + --prefix=/usr \ + --buildtype=release \ + -D gst_debug=false \ + -D package-origin=http://drunk.epizy.com \ + -D package-name="[GStreamer]: $pkgver - DRUNK" + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/gtk+/PKGBUILD b/x86_64/extra/gtk+/PKGBUILD new file mode 100644 index 0000000..7844c9c --- /dev/null +++ b/x86_64/extra/gtk+/PKGBUILD @@ -0,0 +1,10 @@ +pkgname=gtk+ +pkgver=3.24.32 +pkgrel=1 +pkgdesc="Just an metapackage for gtk3+" +arch=('x86_64') +depends=(gtk3+) + +package() { + echo "This is a metapackage!" +} diff --git a/x86_64/extra/gtk-doc/PKGBUILD b/x86_64/extra/gtk-doc/PKGBUILD new file mode 100644 index 0000000..f2669a3 --- /dev/null +++ b/x86_64/extra/gtk-doc/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=gtk-doc +pkgver=1.33.2 +pkgrel=3 +arch=('x86_64') +makedepends=(git meson docbook-xml docbook-xsl) +source=(https://download-fallback.gnome.org/sources/gtk-doc/1.33/gtk-doc-1.33.2.tar.xz) + +build() { + cd $pkgname-$pkgver + ./autogen.sh + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/gtk-pixbuf/PKGBUILD b/x86_64/extra/gtk-pixbuf/PKGBUILD new file mode 100644 index 0000000..ff8e935 --- /dev/null +++ b/x86_64/extra/gtk-pixbuf/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=gdk-pixbuf +pkgver=2.42.6 +pkgrel=1 +arch=('x86_64') +depends=('glib2' 'libjpeg' 'libpng' 'shared-mime-info' 'librsvg' 'libtiff') +makedepends=(gtk+) +source=(https://download.gnome.org/sources/$pkgname/2.42/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + meson \ + --prefix=/usr \ + --buildtype=release \ + --wrap-mode=nofallback \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/gtk2+/PKGBUILD b/x86_64/extra/gtk2+/PKGBUILD new file mode 100644 index 0000000..0265032 --- /dev/null +++ b/x86_64/extra/gtk2+/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=gtk2+ +pkgver=2.24.33 +pkgrel=2 +arch=('x86_64') +depends=(at-spi2-atk gdk-pixbuf libepoxy pango gtk-doc cairo libxkbcommon) +makedepends=(meson wayland wayland-protocols) +source=(https://download.gnome.org/sources/gtk+/2.24/gtk+-$pkgver.tar.xz) + +build() { + cd gtk+-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --enable-wayland-backend \ + --enable-x11-backend + + make +} + +package() { + cd gtk+-$pkgver + + make DESTDIR=$pkgdir install + mv $pkgdir/usr/bin/gtk-update-icon-cache $pkgdir/usr/bin/gtk2-update-icon-cache +} diff --git a/x86_64/extra/gtk3+/PKGBUILD b/x86_64/extra/gtk3+/PKGBUILD new file mode 100644 index 0000000..493f651 --- /dev/null +++ b/x86_64/extra/gtk3+/PKGBUILD @@ -0,0 +1,53 @@ +opkgname=gtk+ +pkgname=gtk3+ +pkgver=3.24.34 +pkgrel=2 +arch=('x86_64') +install=gtk3.install +depends=(atk cairo libxcursor libxinerama libxrandr libxi libepoxy gdk-pixbuf + dconf libxcomposite libxdamage pango shared-mime-info at-spi2-atk + wayland libxkbcommon adwaita-icon-theme json-glib librsvg + desktop-file-utils mesa cantarell-fonts colord rest cups + fribidi iso-codes ibus) +makedepends=(gobject-introspection gtk-doc git glib2 sassc meson + wayland-protocols python3-pygments) +source=(https://download.gnome.org/sources/$opkgname/3.24/$opkgname-$pkgver.tar.xz + gtk-query-immodules-3.0.hook) + +prepare() { + mkdir -p build +} + +build() { + cd build + + meson \ + --prefix=/usr \ + --sysconfdir=/etc \ + -D x11_backend=true \ + -D wayland_backend=true \ + -D quartz_backend=true \ + -D broadway_backend=true \ + -D tracker3=false \ + -D colord=yes \ + -D man=true \ + -D gtk_doc=true \ + ../$opkgname-$pkgver + + meson compile +} + +package() { + cd build + + meson install --destdir=$pkgdir + + install -Dm644 /dev/stdin "$pkgdir/usr/share/gtk-3.0/settings.ini" < +Date: Fri Aug 23 09:33:14 2019 +0100 + + Fix python 3.8 warnings + +diff --git a/pylib/gyp/input.py b/pylib/gyp/input.py +index 42c279cf..013231dc 100644 +--- a/pylib/gyp/input.py ++++ b/pylib/gyp/input.py +@@ -1181,7 +1181,7 @@ def LoadVariablesFromVariablesDict(variables, the_dict, the_dict_key): + if variable_name in variables: + # If the variable is already set, don't set it. + continue +- if the_dict_key is 'variables' and variable_name in the_dict: ++ if the_dict_key == 'variables' and variable_name in the_dict: + # If the variable is set without a % in the_dict, and the_dict is a + # variables dict (making |variables| a varaibles sub-dict of a + # variables dict), use the_dict's definition. +diff --git a/test/lib/TestCmd.py b/test/lib/TestCmd.py +index 1ec50933..457694c8 100644 +--- a/test/lib/TestCmd.py ++++ b/test/lib/TestCmd.py +@@ -283,7 +283,7 @@ if os.name in ('posix', 'nt'): + else: + tempfile.template = 'testcmd.' + +-re_space = re.compile('\s') ++re_space = re.compile(r'\s') + + _Cleanup = [] + +@@ -882,7 +882,7 @@ class TestCmd(object): + #self.diff_function = difflib.unified_diff + self._dirlist = [] + self._preserve = {'pass_test': 0, 'fail_test': 0, 'no_result': 0} +- if 'PRESERVE' in os.environ and os.environ['PRESERVE'] is not '': ++ if 'PRESERVE' in os.environ and os.environ['PRESERVE'] != '': + self._preserve['pass_test'] = os.environ['PRESERVE'] + self._preserve['fail_test'] = os.environ['PRESERVE'] + self._preserve['no_result'] = os.environ['PRESERVE'] +@@ -1103,7 +1103,7 @@ class TestCmd(object): + the temporary working directories to be preserved for all + conditions. + """ +- if conditions is (): ++ if len(conditions) == 0: + conditions = ('pass_test', 'fail_test', 'no_result') + for cond in conditions: + self._preserve[cond] = 1 +diff --git a/test/lib/TestGyp.py b/test/lib/TestGyp.py +index cba2d3cc..43865ee1 100644 +--- a/test/lib/TestGyp.py ++++ b/test/lib/TestGyp.py +@@ -742,7 +742,7 @@ def FindVisualStudioInstallation(): + build_tool = None + if not build_tool: + args1 = ['reg', 'query', +- 'HKLM\Software\Microsoft\VisualStudio\SxS\VS7', ++ r'HKLM\Software\Microsoft\VisualStudio\SxS\VS7', + '/v', '15.0', '/reg:32'] + build_tool = subprocess.check_output(args1).decode( + 'utf-8', 'ignore').strip().split(b'\r\n').pop().split(b' ').pop() diff --git a/x86_64/extra/gyp/gyp-python39.patch b/x86_64/extra/gyp/gyp-python39.patch new file mode 100644 index 0000000..cb5f2e1 --- /dev/null +++ b/x86_64/extra/gyp/gyp-python39.patch @@ -0,0 +1,55 @@ +diff --git a/pylib/gyp/common.py b/pylib/gyp/common.py +index b268d229..03c99cab 100644 +--- a/pylib/gyp/common.py ++++ b/pylib/gyp/common.py +@@ -4,7 +4,6 @@ + + from __future__ import with_statement + +-import collections + import errno + import filecmp + import os.path +@@ -12,6 +11,11 @@ import re + import tempfile + import sys + ++try: ++ from collections.abc import MutableSet ++except ImportError: ++ from collections import MutableSet ++ + + # A minimal memoizing decorator. It'll blow up if the args aren't immutable, + # among other "problems". +@@ -494,7 +498,7 @@ def uniquer(seq, idfun=None): + + + # Based on http://code.activestate.com/recipes/576694/. +-class OrderedSet(collections.MutableSet): ++class OrderedSet(MutableSet): + def __init__(self, iterable=None): + self.end = end = [] + end += [None, end, end] # sentinel node for doubly linked list +diff --git a/pylib/gyp/generator/msvs.py b/pylib/gyp/generator/msvs.py +index 843e7067..327fe8d2 100644 +--- a/pylib/gyp/generator/msvs.py ++++ b/pylib/gyp/generator/msvs.py +@@ -4,7 +4,7 @@ + + from __future__ import print_function + +-import collections ++from collections import OrderedDict + import copy + import ntpath + import os +@@ -195,7 +195,7 @@ def _ConvertSourcesToFilterHierarchy(sources, prefix=None, excluded=None, + if not prefix: prefix = [] + result = [] + excluded_result = [] +- folders = collections.OrderedDict() ++ folders = OrderedDict() + # Gather files into the final result, excluded, or folders. + for s in sources: + if len(s) == 1: diff --git a/x86_64/extra/harfbuzz/PKGBUILD b/x86_64/extra/harfbuzz/PKGBUILD new file mode 100644 index 0000000..ad5df9e --- /dev/null +++ b/x86_64/extra/harfbuzz/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=harfbuzz +pkgver=2.9.0 +pkgrel=2 +arch=('x86_64') +depends=(gobject-introspection glib2 icu freetype2) +source=(https://github.com/$pkgname/$pkgname/releases/download/$pkgver/$pkgname-$pkgver.tar.xz) + +prepare() { + mkdir -p $pkgname-$pkgver/build +} + +build() { + cd $pkgname-$pkgver/build + + meson \ + --prefix=/usr \ + --buildtype=release \ + -Dgraphite=disabled \ + -Dbenchmark=disabled \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/help2man/PKGBUILD b/x86_64/extra/help2man/PKGBUILD new file mode 100644 index 0000000..c9eb3e9 --- /dev/null +++ b/x86_64/extra/help2man/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=help2man +pkgver=1.49.2 +pkgrel=1 +arch=('x86_64') +source=("https://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.xz") + +build() { + cd ${pkgname}-${pkgver} + + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info \ + --libdir=/usr/lib + + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install +} diff --git a/x86_64/extra/hicolor-icon-theme/PKGBUILD b/x86_64/extra/hicolor-icon-theme/PKGBUILD new file mode 100644 index 0000000..3c56777 --- /dev/null +++ b/x86_64/extra/hicolor-icon-theme/PKGBUILD @@ -0,0 +1,17 @@ +pkgname=hicolor-icon-theme +pkgver=0.17 +pkgrel=1 +arch=('x86_64') +source=(https://icon-theme.freedesktop.org/releases/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/htop/PKGBUILD b/x86_64/extra/htop/PKGBUILD new file mode 100644 index 0000000..58bfcdf --- /dev/null +++ b/x86_64/extra/htop/PKGBUILD @@ -0,0 +1,34 @@ +pkgname=htop +pkgver=3.1.2 +pkgrel=1 +arch=('x86_64') +depends=(libcap libnl ncurses) +makedepends=(git lm-sensors) +source=(git+https://github.com/htop-dev/htop.git) + +prepare() { + cd $pkgname + + autoreconf -fi +} + +build() { + cd $pkgname + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --enable-cgroup \ + --enable-delayacct \ + --enable-openvz \ + --enable-unicode \ + --enable-vserver + + make +} + +package() { + cd $pkgname + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/httpup/PKGBUILD b/x86_64/extra/httpup/PKGBUILD new file mode 100644 index 0000000..d5e5f60 --- /dev/null +++ b/x86_64/extra/httpup/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=httpup +pkgver=0.5.0 +pkgrel=1 +arch=('x86_64') +source=(https://crux.nu/files/$pkgname-$pkgver.tar.xz + httpup) +depends=(glibc) + +build() { + cd $pkgname-$pkgver + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir prefix=/usr mandir=/usr/share/man install + + # driver + install -Dm755 ../../httpup $pkgdir/etc/ports/drivers/httpup +} diff --git a/x86_64/extra/httpup/httpup b/x86_64/extra/httpup/httpup new file mode 100644 index 0000000..5c8db84 --- /dev/null +++ b/x86_64/extra/httpup/httpup @@ -0,0 +1,27 @@ +#!/bin/sh +# +# /etc/ports/drivers/httpup: httpup driver script for ports(8) +# + +if [ $# -ne 1 ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +. $1 + +if [ -z "$ROOT_DIR" ]; then + echo "ROOT_DIR not set in '$1'" >&2 + exit 2 +fi +if [ -z "$URL" ]; then + echo "URL not set in '$1'" >&2 + exit 2 +fi + +for REPO in $URL; do + PORT=`echo $REPO | sed -n '/#.*$/s|^.*#||p'` + httpup sync $REPO $ROOT_DIR/$PORT +done + +# End of file. diff --git a/x86_64/extra/hyphen/PKGBUILD b/x86_64/extra/hyphen/PKGBUILD new file mode 100644 index 0000000..89a5d07 --- /dev/null +++ b/x86_64/extra/hyphen/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=hyphen +pkgver=2.8.8 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(perl) +source=(https://downloads.sourceforge.net/hunspell/${pkgname}-${pkgver}.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/i3-status/PKGBUILD b/x86_64/extra/i3-status/PKGBUILD new file mode 100644 index 0000000..ed8453f --- /dev/null +++ b/x86_64/extra/i3-status/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=i3-status +rname=i3status +pkgver=2.14 +pkgrel=1 +arch=('x86_64') +depends=(alsa-lib libnl pulseaudio yajl confuse) +makedepends=(asciidoc meson xmlto) +source=(https://i3wm.org/i3status/$rname-$pkgver.tar.xz) + +build() { + cd $rname-$pkgver/meson + + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + --buildtype=release \ + -D mans=false \ + ../.. + + meson compile +} + +package() { + cd $rname-$pkgver/meson + + meson install -C build --destdir=$pkgdir +} diff --git a/x86_64/extra/i3-wm/0001-Use-OVER-operator-for-drawing-text.patch b/x86_64/extra/i3-wm/0001-Use-OVER-operator-for-drawing-text.patch new file mode 100644 index 0000000..35f4922 --- /dev/null +++ b/x86_64/extra/i3-wm/0001-Use-OVER-operator-for-drawing-text.patch @@ -0,0 +1,35 @@ +From eea280b1f1d9d66c903014fd6703f401eb119a87 Mon Sep 17 00:00:00 2001 +Message-Id: +From: "Jan Alexander Steffens (heftig)" +Date: Sat, 9 Sep 2017 00:22:13 +0200 +Subject: [PATCH] Use OVER operator for drawing text + +For opaque text, SOURCE is not any different from OVER. However, when +drawing color glyphs (which consist of RGBA pixels instead of strokes) +SOURCE's handling of alpha is not what we want. + +I stumbled across this because cairo 1.15.8 seems to clear the surface +before drawing color emoji if the operator is SOURCE, deleting every- +thing drawn before. Arguably, the area outside the glyph bounds should +not be touched, but even if this is a cairo bug the problem of alpha +within the glyph remains. +--- + libi3/font.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libi3/font.c b/libi3/font.c +index 81091ea74a31da11..aef8427b5396c3d8 100644 +--- a/libi3/font.c ++++ b/libi3/font.c +@@ -105,7 +105,7 @@ static void draw_text_pango(const char *text, size_t text_len, + pango_layout_set_text(layout, text, text_len); + + /* Do the drawing */ +- cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); ++ cairo_set_operator(cr, CAIRO_OPERATOR_OVER); + cairo_set_source_rgb(cr, pango_font_red, pango_font_green, pango_font_blue); + pango_cairo_update_layout(cr, layout); + pango_layout_get_pixel_size(layout, NULL, &height); +-- +2.14.1 + diff --git a/x86_64/extra/i3-wm/PKGBUILD b/x86_64/extra/i3-wm/PKGBUILD new file mode 100644 index 0000000..04d3b87 --- /dev/null +++ b/x86_64/extra/i3-wm/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=i3-wm +pkgver=4.20.1 +pkgrel=1 +arch=('x86_64') +url=https://i3wm.org +license=('BSD') +groups=('i3') +depends=('libev' 'libxkbcommon' 'pango' 'startup-notification' + 'xcb-util-cursor' 'xcb-util-keysyms' 'xcb-util-wm' 'xcb-util-xrm' + 'yajl') +makedepends=('meson' 'xmlto') +backup=('etc/i3/config') +source=("https://i3wm.org/downloads/i3-$pkgver.tar.xz" + '0001-Use-OVER-operator-for-drawing-text.patch') + +prepare() { + cd i3-$pkgver + + # https://github.com/i3/i3/pull/2925 + patch -Np1 -i ../0001-Use-OVER-operator-for-drawing-text.patch +} + +build() { + cd i3-$pkgver + + meson build \ + --prefix=/usr \ + --buildtype=release + + ninja -C build +} + +package() { + cd i3-$pkgver + DESTDIR="$pkgdir" ninja -C build install + install -Dm644 -t "$pkgdir"/usr/share/licenses/$pkgname LICENSE +} diff --git a/x86_64/extra/ibus/PKGBUILD b/x86_64/extra/ibus/PKGBUILD new file mode 100644 index 0000000..b8a1bd1 --- /dev/null +++ b/x86_64/extra/ibus/PKGBUILD @@ -0,0 +1,47 @@ +pkgname=ibus +pkgver=1.5.25 +pkgrel=3 +arch=('x86_64') +license=('LGPL') +depends=('dconf' 'gtk3+' 'hicolor-icon-theme' 'libnotify' 'iso-codes' 'librsvg') +makedepends=('gobject-introspection' 'vala' 'intltool' 'gtk-doc' 'gtk2+' 'gnome-common' + 'qt5' 'git' 'unicode-character-database' 'unicode-cldr' 'unicode-emoji' 'iso-codes' 'python3-pygments') +options=('!emptydirs') +_commit=cfb263f04f82a83dd94f6eedcd5017d40a4a1a05 # 1.5.25 +source=("git+https://github.com/ibus/ibus#commit=$_commit") + +prepare() { + cd ibus + + sed -i 's|$(libibus) $(libibus_emoji_dialog)|$(libibus_emoji_dialog) $(libibus)|' ui/gtk3/Makefile.am + git cherry-pick -n 936a0e76df79d92a8bdc03e9205330fb84a2083e + + NOCONFIGURE=1 ./autogen.sh +} + +build() { + cd ibus + + ./configure \ + --prefix=/usr \ + --libexecdir=/usr/lib/ibus \ + --sysconfdir=/etc \ + --enable-dconf \ + --enable-wayland \ + --enable-gtk-doc \ + --disable-memconf \ + --enable-ui \ + --disable-python2 \ + --with-python=python3 + + make +} + +package_ibus() { + cd ibus + + make DESTDIR="$pkgdir" install + make -C src DESTDIR="$pkgdir" install + make -C bindings DESTDIR="$pkgdir" install + make DESTDIR="$pkgdir" install-pkgconfigDATA +} diff --git a/x86_64/extra/iceauth/PKGBUILD b/x86_64/extra/iceauth/PKGBUILD new file mode 100644 index 0000000..4ac165f --- /dev/null +++ b/x86_64/extra/iceauth/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=iceauth +pkgver=master +pkgrel=1 +arch=('x86_64') +depends=(libx11) +source=(git+https://gitlab.freedesktop.org/xorg/app/iceauth.git) + +build() { + cd $pkgname + + ./autogen.sh + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/icon-naming-utils/PKGBUILD b/x86_64/extra/icon-naming-utils/PKGBUILD new file mode 100644 index 0000000..dace6e5 --- /dev/null +++ b/x86_64/extra/icon-naming-utils/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=icon-naming-utils +pkgver=0.8.90 +pkgrel=1 +arch=('x86_64') +depends=(xml-simple) +source=(http://tango.freedesktop.org/releases/icon-naming-utils-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --sysconfdir=/etc + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/icu/PKGBUILD b/x86_64/extra/icu/PKGBUILD new file mode 100644 index 0000000..a1620de --- /dev/null +++ b/x86_64/extra/icu/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=icu +pkgver=69.1 +pkgrel=2 +arch=('x86_64') +makedepends=(llvm doxygen) +source=(https://github.com/unicode-org/icu/releases/download/release-69-1/icu4c-69_1-src.tgz) + +build() { + cd $pkgname + + cd source + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname/source + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/imake/PKGBUILD b/x86_64/extra/imake/PKGBUILD new file mode 100644 index 0000000..ed4997d --- /dev/null +++ b/x86_64/extra/imake/PKGBUILD @@ -0,0 +1,41 @@ +pkgname=imake +pkgver=1.0.8 +pkgrel=1 +pkgdesc="X.Org imake program and related utilities" +arch=('x86_64') +url="https://xorg.freedesktop.org/" +depends=('glibc') +makedepends=('pkgconf' 'xorgproto' 'perl' 'util-macros' 'font-util') +source=(https://xorg.freedesktop.org/releases/individual/util/imake-${pkgver}.tar.bz2 + https://xorg.freedesktop.org/releases/individual/util/gccmakedep-1.0.3.tar.bz2 + https://xorg.freedesktop.org/releases/individual/util/lndir-1.0.3.tar.bz2 + https://xorg.freedesktop.org/releases/individual/util/makedepend-1.0.6.tar.bz2 + https://xorg.freedesktop.org/releases/individual/util/xorg-cf-files-1.0.6.tar.bz2 + linuxconfig.patch) + +prepare() { + cd xorg-cf-files-1.0.6 + patch -p1 -i ../linuxconfig.patch +} + +build() { + for i in *; do + if [ -d "${i}" ]; then + pushd "${i}" + autoreconf -fi + ./configure --prefix=/usr --mandir=/usr/share/man + make + popd + fi + done +} + +package() { + for i in *; do + if [ -d "${i}" ]; then + pushd "${i}" + make DESTDIR="${pkgdir}" install + popd + fi + done +} diff --git a/x86_64/extra/imake/linuxconfig.patch b/x86_64/extra/imake/linuxconfig.patch new file mode 100644 index 0000000..e557922 --- /dev/null +++ b/x86_64/extra/imake/linuxconfig.patch @@ -0,0 +1,31 @@ +--- xorg-cf-files-1.0.1/linux.cf.orig 2006-03-04 18:40:43.000000000 +0000 ++++ xorg-cf-files-1.0.1/linux.cf 2006-03-04 18:41:48.000000000 +0000 +@@ -193,6 +193,13 @@ + #define FSUseSyslog YES + #endif + ++#define FSUseSyslog YES ++#define BuildRman NO ++#define BuildHtmlManPages NO ++#define ProjectRoot /usr ++#define ManPath /usr/share/man ++#define XappLoadDir /usr/share/X11/app-defaults ++ + #ifndef HasDevRandom + # define HasDevRandom YES + # ifndef RandomDeviceName +--- xorg-cf-files-1.0.2/X11.tmpl.orig 2006-07-15 10:45:23.000000000 +0000 ++++ xorg-cf-files-1.0.2/X11.tmpl 2006-07-15 10:46:19.000000000 +0000 +@@ -1502,10 +1502,10 @@ + #define DocPdfDir $(DOCDIR)/PDF + #endif + #ifndef FontDir +-#define FontDir $(LIBDIR)/fonts ++#define FontDir /usr/share/fonts + #endif + #ifndef FontEncDir +-#define FontEncDir $(LIBDIR)/fonts/encodings ++#define FontEncDir /usr/share/fonts/encodings + #endif + #ifndef AdmDir + #define AdmDir /usr/adm diff --git a/x86_64/extra/iniparser/PKGBUILD b/x86_64/extra/iniparser/PKGBUILD new file mode 100644 index 0000000..611a527 --- /dev/null +++ b/x86_64/extra/iniparser/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=iniparser +pkgver=4.1 +pkgrel=1 +arch=('x86_64') +depends=('glibc') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/ndevilla/iniparser/archive/v${pkgver}.tar.gz") + +build() { + cd "${pkgname}-${pkgver}" + + make +} + +package() { + cd "${pkgname}-${pkgver}" + + install -Dm0644 src/iniparser.h "${pkgdir}"/usr/include/iniparser.h + install -Dm0644 src/dictionary.h "${pkgdir}"/usr/include/dictionary.h + install -Dm0644 libiniparser.so.1 "$pkgdir"/usr/lib/libiniparser.so.1 + install -Dm0644 LICENSE "${pkgdir}"/usr/share/licenses/iniparser/LICENSE + ln -sf libiniparser.so.1 "${pkgdir}"/usr/lib/libiniparser.so +} diff --git a/x86_64/extra/inkscape/PKGBUILD b/x86_64/extra/inkscape/PKGBUILD new file mode 100644 index 0000000..ff01272 --- /dev/null +++ b/x86_64/extra/inkscape/PKGBUILD @@ -0,0 +1,33 @@ +pkgname=inkscape +pkgver=1.1.1 +pkgrel=1 +arch=('x86_64') +depends=(boost double-conversion gc gdl gsl gtkmm libsoup libxslt poppler popt wget potrace lcms) +source=(https://inkscape.org/gallery/item/29255/$pkgname-$pkgver.tar.xz + https://www.linuxfromscratch.org/patches/blfs/svn/$pkgname-$pkgver-poppler_21.11.0-1.patch) + +prepare() { + cd $pkgname-1.1.1_2021-09-20_3bf5ae0d25 + mkdir -p build + rm -rf build/* + + patch -Np1 -i ../inkscape-1.1.1-poppler_21.11.0-1.patch +} + +build() { + cd $pkgname-1.1.1_2021-09-20_3bf5ae0d25/build + + cmake \ + -D ENABLE_LCMS=OFF \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + .. + + make +} + +package() { + cd $pkgname-1.1.1_2021-09-20_3bf5ae0d25/build + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/inkscape/inkscape-1.1.1-poppler_21.11.0-1.patch b/x86_64/extra/inkscape/inkscape-1.1.1-poppler_21.11.0-1.patch new file mode 100644 index 0000000..8571d6a --- /dev/null +++ b/x86_64/extra/inkscape/inkscape-1.1.1-poppler_21.11.0-1.patch @@ -0,0 +1,33 @@ +Submitted By: Ken Moffat +Date: 2021-11-17 +Initial Package Version: 1.1.1 +Upstream Status: Unknown +Origin: Arch linux +Description: Fixes build with poppler-21.11.0 without breaking earlier poppler versions. + +From ff61b5e3df3351d4ab5437181fe6d34729f4cbbb Mon Sep 17 00:00:00 2001 +From: Evangelos Foutras +Date: Mon, 1 Nov 2021 21:45:38 +0200 +Subject: [PATCH] Fix build with poppler 21.11.0 + +GfxFont::tag is now of type std::string instead of GooString *. +--- + src/extension/internal/pdfinput/pdf-parser.cpp | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp +index e3d04d544b..feecefa043 100644 +--- a/src/extension/internal/pdfinput/pdf-parser.cpp ++++ b/src/extension/internal/pdfinput/pdf-parser.cpp +@@ -2169,7 +2169,11 @@ void PdfParser::opSetFont(Object args[], int /*numArgs*/) + } + if (printCommands) { + printf(" font: tag=%s name='%s' %g\n", ++#if POPPLER_CHECK_VERSION(21,11,0) ++ font->getTag().c_str(), ++#else + font->getTag()->getCString(), ++#endif + font->getName() ? font->getName()->getCString() : "???", + args[1].getNum()); + fflush(stdout); diff --git a/x86_64/extra/iptables/PKGBUILD b/x86_64/extra/iptables/PKGBUILD new file mode 100644 index 0000000..cd3b744 --- /dev/null +++ b/x86_64/extra/iptables/PKGBUILD @@ -0,0 +1,49 @@ +pkgname=iptables +pkgver=1.8.8 +pkgrel=1 +arch=(x86_64) +depends=(libnftnl libpcap libcap libnfnetlink bash) +backup=(etc/ethertypes etc/iptables/{ip,ip6}tables.rules) +source=(https://www.netfilter.org/projects/iptables/files/$pkgname-$pkgver.tar.bz2 + empty.rules simple_firewall.rules empty-{filter,mangle,nat,raw,security}.rules + {arp,eb,ip,ip6}tables.service iptables-{legacy,nft}-flush) + +prepare() { + mkdir -p build + cd $pkgname-$pkgver + + # use system one + rm include/linux/types.h + + ln -rs libiptc/linux_list.h include/libiptc +} + +build() { + cd build + + ../$pkgname-$pkgver/configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --libexecdir=/usr/lib \ + --enable-bpf-compiler \ + --enable-libipq \ + --enable-devel \ + --enable-shared + + make +} + +package() { + DESTDIR="$pkgdir" make -C build install + + install -Dt "$pkgdir/usr/lib/systemd/system" -m644 {ip,ip6}tables.service + install -D iptables-legacy-flush "$pkgdir/usr/lib/systemd/scripts/iptables-flush" + + install -Dm644 empty.rules "$pkgdir/etc/iptables/iptables.rules" + install -Dm644 empty.rules "$pkgdir/etc/iptables/ip6tables.rules" + install -Dt "$pkgdir/usr/share/iptables" -m644 *.rules + ln -srt "$pkgdir/etc/iptables" "$pkgdir"/usr/share/iptables/{empty,simple_firewall}.rules + + install -Dt "$pkgdir/usr/lib/systemd/system" -m644 {arp,eb}tables.service + touch "$pkgdir"/etc/{arp,eb}tables.conf +} diff --git a/x86_64/extra/iptables/arptables.service b/x86_64/extra/iptables/arptables.service new file mode 100644 index 0000000..0e78e81 --- /dev/null +++ b/x86_64/extra/iptables/arptables.service @@ -0,0 +1,14 @@ +[Unit] +Description=ARP table +Before=network-pre.target +Wants=network-pre.target + +[Service] +Type=oneshot +ExecStart=/bin/sh -c 'arptables-restore < /etc/arptables.conf' +ExecReload=/bin/sh -c 'arptables-restore < /etc/arptables.conf' +ExecStop=/bin/sh -c 'arptables-restore < /dev/null' +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/x86_64/extra/iptables/ebtables.service b/x86_64/extra/iptables/ebtables.service new file mode 100644 index 0000000..795675b --- /dev/null +++ b/x86_64/extra/iptables/ebtables.service @@ -0,0 +1,14 @@ +[Unit] +Description=Ethernet bridge table +Before=network-pre.target +Wants=network-pre.target + +[Service] +Type=oneshot +ExecStart=/bin/sh -c 'ebtables-restore < /etc/ebtables.conf' +ExecReload=/bin/sh -c 'ebtables-restore < /etc/ebtables.conf' +ExecStop=/bin/sh -c 'ebtables-restore < /dev/null' +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/x86_64/extra/iptables/empty-filter.rules b/x86_64/extra/iptables/empty-filter.rules new file mode 100644 index 0000000..5a4de48 --- /dev/null +++ b/x86_64/extra/iptables/empty-filter.rules @@ -0,0 +1,6 @@ +# Empty iptables filter table rule file +*filter +:INPUT ACCEPT [0:0] +:FORWARD ACCEPT [0:0] +:OUTPUT ACCEPT [0:0] +COMMIT diff --git a/x86_64/extra/iptables/empty-mangle.rules b/x86_64/extra/iptables/empty-mangle.rules new file mode 100644 index 0000000..49d493c --- /dev/null +++ b/x86_64/extra/iptables/empty-mangle.rules @@ -0,0 +1,8 @@ +# Empty iptables mangle table rules file +*mangle +:PREROUTING ACCEPT [0:0] +:INPUT ACCEPT [0:0] +:FORWARD ACCEPT [0:0] +:OUTPUT ACCEPT [0:0] +:POSTROUTING ACCEPT [0:0] +COMMIT diff --git a/x86_64/extra/iptables/empty-nat.rules b/x86_64/extra/iptables/empty-nat.rules new file mode 100644 index 0000000..437e964 --- /dev/null +++ b/x86_64/extra/iptables/empty-nat.rules @@ -0,0 +1,7 @@ +# Empty iptables nat table rules file +*nat +:PREROUTING ACCEPT [0:0] +:INPUT ACCEPT [0:0] +:OUTPUT ACCEPT [0:0] +:POSTROUTING ACCEPT [0:0] +COMMIT diff --git a/x86_64/extra/iptables/empty-raw.rules b/x86_64/extra/iptables/empty-raw.rules new file mode 100644 index 0000000..8dc50d2 --- /dev/null +++ b/x86_64/extra/iptables/empty-raw.rules @@ -0,0 +1,5 @@ +# Empty iptables raw table rules file +*raw +:PREROUTING ACCEPT [0:0] +:OUTPUT ACCEPT [0:0] +COMMIT diff --git a/x86_64/extra/iptables/empty-security.rules b/x86_64/extra/iptables/empty-security.rules new file mode 100644 index 0000000..4531fa1 --- /dev/null +++ b/x86_64/extra/iptables/empty-security.rules @@ -0,0 +1,6 @@ +# Empty iptables security table rules file +*security +:INPUT ACCEPT [0:0] +:FORWARD ACCEPT [0:0] +:OUTPUT ACCEPT [0:0] +COMMIT diff --git a/x86_64/extra/iptables/empty.rules b/x86_64/extra/iptables/empty.rules new file mode 100644 index 0000000..e24e1aa --- /dev/null +++ b/x86_64/extra/iptables/empty.rules @@ -0,0 +1,6 @@ +# Empty iptables rule file +*filter +:INPUT ACCEPT [0:0] +:FORWARD ACCEPT [0:0] +:OUTPUT ACCEPT [0:0] +COMMIT diff --git a/x86_64/extra/iptables/ip6tables.service b/x86_64/extra/iptables/ip6tables.service new file mode 100644 index 0000000..9dca615 --- /dev/null +++ b/x86_64/extra/iptables/ip6tables.service @@ -0,0 +1,15 @@ +[Unit] +Description=IPv6 Packet Filtering Framework +Before=network-pre.target +Wants=network-pre.target +After=iptables.service + +[Service] +Type=oneshot +ExecStart=/usr/bin/ip6tables-restore /etc/iptables/ip6tables.rules +ExecReload=/usr/bin/ip6tables-restore /etc/iptables/ip6tables.rules +ExecStop=/usr/lib/systemd/scripts/iptables-flush 6 +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/x86_64/extra/iptables/iptables-legacy-flush b/x86_64/extra/iptables/iptables-legacy-flush new file mode 100644 index 0000000..3d8ee89 --- /dev/null +++ b/x86_64/extra/iptables/iptables-legacy-flush @@ -0,0 +1,18 @@ +#!/bin/bash +# +# Usage: iptables-flush [6] +# + +iptables=ip$1tables +if ! type -p "$iptables" &>/dev/null; then + echo "error: invalid argument" + exit 1 +fi + +while read -r table; do + tables+=("/usr/share/iptables/empty-$table.rules") +done <"/proc/net/ip$1_tables_names" + +if (( ${#tables[*]} )); then + cat "${tables[@]}" | "$iptables-restore" +fi diff --git a/x86_64/extra/iptables/iptables-nft-flush b/x86_64/extra/iptables/iptables-nft-flush new file mode 100644 index 0000000..5038d32 --- /dev/null +++ b/x86_64/extra/iptables/iptables-nft-flush @@ -0,0 +1,18 @@ +#!/bin/bash +# +# Usage: iptables-flush [6] +# + +iptables=ip$1tables +if ! type -p "$iptables" &>/dev/null; then + echo "error: invalid argument" + exit 1 +fi + +while read -r table; do + tables+=("/usr/share/iptables/empty-$table.rules") +done < <(nft list tables | sed -n "s/table ip$1 //p") + +if (( ${#tables[*]} )); then + cat "${tables[@]}" | "$iptables-restore" +fi diff --git a/x86_64/extra/iptables/iptables.service b/x86_64/extra/iptables/iptables.service new file mode 100644 index 0000000..8a7a142 --- /dev/null +++ b/x86_64/extra/iptables/iptables.service @@ -0,0 +1,14 @@ +[Unit] +Description=IPv4 Packet Filtering Framework +Before=network-pre.target +Wants=network-pre.target + +[Service] +Type=oneshot +ExecStart=/usr/bin/iptables-restore /etc/iptables/iptables.rules +ExecReload=/usr/bin/iptables-restore /etc/iptables/iptables.rules +ExecStop=/usr/lib/systemd/scripts/iptables-flush +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/x86_64/extra/iptables/simple_firewall.rules b/x86_64/extra/iptables/simple_firewall.rules new file mode 100644 index 0000000..63426b0 --- /dev/null +++ b/x86_64/extra/iptables/simple_firewall.rules @@ -0,0 +1,11 @@ +*filter +:INPUT DROP [0:0] +:FORWARD DROP [0:0] +:OUTPUT ACCEPT [0:0] +-A INPUT -p icmp -j ACCEPT +-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +-A INPUT -i lo -j ACCEPT +-A INPUT -p tcp -j REJECT --reject-with tcp-reset +-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable +-A INPUT -j REJECT --reject-with icmp-proto-unreachable +COMMIT diff --git a/x86_64/extra/irrlicht/PKGBUILD b/x86_64/extra/irrlicht/PKGBUILD new file mode 100644 index 0000000..f4e98ca --- /dev/null +++ b/x86_64/extra/irrlicht/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=irrlicht +pkgver=1.9.0mt4 +pkgrel=2 +arch=(x86_64) +depends=(zlib libpng libjpeg libglvnd xorg-server) +makedepends=(make cmake ninja) +source=(https://github.com/minetest/irrlicht/archive/refs/tags/$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + mkdir -p build && cd build + cmake \ + -DCMAKE_PREFIX_PATH=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + .. + + make -j6 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/iso-codes/PKGBUILD b/x86_64/extra/iso-codes/PKGBUILD new file mode 100644 index 0000000..11c8c77 --- /dev/null +++ b/x86_64/extra/iso-codes/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=iso-codes +pkgver=4.8.0 +pkgrel=2 +arch=('x86_64') +source=(https://salsa.debian.org/iso-codes-team/iso-codes/-/archive/v$pkgver/iso-codes-v$pkgver.tar.gz) + +build() { + cd $pkgname-v$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-v$pkgver + + make DESTDIR=$pkgdir pkgconfdir=/usr/lib/pkgconfig install +} diff --git a/x86_64/extra/itstool/0001-Fix-the-crash-from-912099.patch b/x86_64/extra/itstool/0001-Fix-the-crash-from-912099.patch new file mode 100644 index 0000000..326b849 --- /dev/null +++ b/x86_64/extra/itstool/0001-Fix-the-crash-from-912099.patch @@ -0,0 +1,90 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Tanguy Ortolo +Date: Fri, 7 Dec 2018 00:00:00 +0000 +Subject: [PATCH] Fix the crash from #912099 + +ITS Tool 2.0.4 crashes when building some documentation, as reported in #912099. +This comes from translations with invalid XML markup, which ITS Tool fails to +merge (which is not abnormal), and to report these issues, needlessly encodes +the original msgstr from unicode to bytes, causing it to be recoded using the +default ascii codec, which fails when the msgstr contains anything out of ascii. + +This patch removes the useless decoding, avoiding the failing subsequent +recoding. It also explicitly encodes the output strings to be able to print them +in all cases, even when the output encoding cannot be detected. + +Bug: https://github.com/itstool/itstool/issues/25 +Bug-Debian: https://bugs.debian.org/912099 +Forwarded: https://github.com/itstool/itstool/issues/25 +--- + itstool.in | 21 +++++++++++++++++---- + 1 file changed, 17 insertions(+), 4 deletions(-) + +diff --git a/itstool.in b/itstool.in +index c21ad4bfeb86..f34673581c88 100755 +--- a/itstool.in ++++ b/itstool.in +@@ -44,9 +44,22 @@ if PY3: + else: + return str(s) + ustr_type = str ++ def pr_str(s): ++ """Return a string that can be safely print()ed""" ++ # Since print works on both bytes and unicode, just return the argument ++ return s + else: + string_types = basestring, + ustr = ustr_type = unicode ++ def pr_str(s): ++ """Return a string that can be safely print()ed""" ++ if isinstance(s, str): ++ # Since print works on str, just return the argument ++ return s ++ else: ++ # print may not work on unicode if the output encoding cannot be ++ # detected, so just encode with UTF-8 ++ return unicode.encode(s, 'utf-8') + + NS_ITS = 'http://www.w3.org/2005/11/its' + NS_ITST = 'http://itstool.org/extensions/' +@@ -1077,36 +1090,36 @@ class Document (object): + if strict: + raise + else: +- sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % ( ++ sys.stderr.write(pr_str('Warning: Could not merge %stranslation for msgid:\n%s\n' % ( + (lang + ' ') if lang is not None else '', +- msgstr.encode('utf-8'))) ++ msgstr))) + self._xml_err = '' + return node + def scan_node(node): + children = [child for child in xml_child_iter(node)] + for child in children: + if child.type != 'element': + continue + if child.ns() is not None and child.ns().content == NS_BLANK: + ph_node = msg.get_placeholder(child.name).node + if self.has_child_elements(ph_node): + self.merge_translations(translations, None, ph_node, strict=strict) + newnode = ph_node.copyNode(1) + newnode.setTreeDoc(self._doc) + child.replaceNode(newnode) + else: + repl = self.get_translated(ph_node, translations, strict=strict, lang=lang) + child.replaceNode(repl) + scan_node(child) + try: + scan_node(trnode) + except: + if strict: + raise + else: +- sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % ( ++ sys.stderr.write(pr_str('Warning: Could not merge %stranslation for msgid:\n%s\n' % ( + (lang + ' ') if lang is not None else '', +- msgstr.encode('utf-8'))) ++ msgstr))) + self._xml_err = '' + ctxt.doc().freeDoc() + return node diff --git a/x86_64/extra/itstool/PKGBUILD b/x86_64/extra/itstool/PKGBUILD new file mode 100644 index 0000000..613a0f5 --- /dev/null +++ b/x86_64/extra/itstool/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=itstool +pkgver=2.0.7 +pkgrel=1 +arch=('x86_64') +depends=(python3 libxml2 docbook-xml) +makedepends=(git) +_commit=f1c6544dcd83a73a5ccea9e0c48cf9a47e006190 # tags/2.0.7^0 +source=("git+https://github.com/itstool/itstool#commit=$_commit" + 0001-Fix-the-crash-from-912099.patch) + +prepare() { + cd $pkgname + + # https://src.fedoraproject.org/rpms/itstool/blob/rawhide/f/itstool-2.0.5-fix-crash-wrong-encoding.patch + git apply -3 ../0001-Fix-the-crash-from-912099.patch + + autoreconf -fvi +} + +build() { + cd $pkgname + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/iw/PKGBUILD b/x86_64/extra/iw/PKGBUILD new file mode 100644 index 0000000..41d3bb8 --- /dev/null +++ b/x86_64/extra/iw/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=iw +pkgver=5.16 +pkgrel=1 +arch=('x86_64') +depends=('libnl') +source=("https://www.kernel.org/pub/software/network/$pkgname/$pkgname-$pkgver.tar.xz") + +build() { + cd "$srcdir"/$pkgname-$pkgver + + make +} + +package() { + cd "$srcdir"/$pkgname-$pkgver + + make DESTDIR="$pkgdir" SBINDIR="/usr/bin" install +} diff --git a/x86_64/extra/jack2/PKGBUILD b/x86_64/extra/jack2/PKGBUILD new file mode 100644 index 0000000..097f5ee --- /dev/null +++ b/x86_64/extra/jack2/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=(jack2) +pkgdesc="The JACK low-latency audio server" +pkgver=1.9.19 +pkgrel=1 +arch=('x86_64') +source=("${pkgname}::git+https://github.com/jackaudio/${pkgname}.git#tag=v${pkgver}") +makedepends=(alsa-lib dbus expat libsndfile) + +build() { + cd $pkgname + export LINKFLAGS="$LDFLAGS" + export PYTHONPATH="${PWD}:${PYTHONPATH}" + + python2 ./waf configure --prefix=/usr \ + --htmldir="/usr/share/doc/${pkgname}/" \ + --autostart=none \ + --systemd-unit \ + --classic \ + --dbus + python2 ./waf build +} + +package() { + cd $pkgname + + export PYTHONPATH="${PWD}:${PYTHONPATH}" + python2 ./waf install --destdir="${pkgdir}" +} diff --git a/x86_64/extra/jansson/PKGBUILD b/x86_64/extra/jansson/PKGBUILD new file mode 100644 index 0000000..37102fa --- /dev/null +++ b/x86_64/extra/jansson/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=jansson +pkgver=2.14 +pkgrel=1 +pkgdesc='C library for encoding, decoding and manipulating JSON data' +arch=('x86_64') +url='https://www.digip.org/jansson/' +depends=('glibc') +license=('MIT') +options=('staticlibs') +source=(https://github.com/akheron/jansson/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz) + +build() { + cd "$srcdir/$pkgname-$pkgver" + ./configure --prefix=/usr + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install +} \ No newline at end of file diff --git a/x86_64/extra/jasper/PKGBUILD b/x86_64/extra/jasper/PKGBUILD new file mode 100644 index 0000000..a99ebce --- /dev/null +++ b/x86_64/extra/jasper/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=jasper +pkgver=3.0.5 +pkgrel=1 +arch=(x86_64) +depends=(freeglut glibc glu libjpeg) +makedepends=(libxmu) +source=(https://github.com/mdadams/jasper/archive/version-${pkgver}.tar.gz) + +build() { + cd $pkgname-version-$pkgver + + cmake -B builds \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D JAS_ENABLE_OPENGL=ON \ + -D JAS_ENABLE_LIBJPEG=ON \ + -D JAS_ENABLE_SHARED=ON + + make -C builds +} + +package() { + cd $pkgname-version-$pkgver + + make -C builds DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/jbig2dec/PKGBUILD b/x86_64/extra/jbig2dec/PKGBUILD new file mode 100644 index 0000000..3c8fd2f --- /dev/null +++ b/x86_64/extra/jbig2dec/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=jbig2dec +pkgver=0.19 +gs_ver=gs9533 +pkgrel=1 +arch=(x86_64) +depends=(libpng) +makedepends=(make) +source=(https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/$gs_ver/${pkgname}-${pkgver}.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + autoreconf -fi + + ./configure \ + --prefix=/usr +} + +build() { + cd $pkgname-$pkgver + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/jbigkit/PKGBUILD b/x86_64/extra/jbigkit/PKGBUILD new file mode 100644 index 0000000..35c7764 --- /dev/null +++ b/x86_64/extra/jbigkit/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=jbigkit +pkgver=2.1 +pkgrel=1 +arch=(x86_64) +depends=(glibc) +makedepends=(gcc) +source=(https://www.cl.cam.ac.uk/~mgk25/download/jbigkit-$pkgver.tar.gz) + +build() { + cd "$srcdir"/$pkgname-$pkgver + + unset CFLAGS CPPFLAGS LDFLAGS + [ "$CARCH" == "x86_64" ] && export CFLAGS="$CFLAGS -fPIC" + + make CFLAGS="$CFLAGS" +} + +package() { + cd $pkgname-$pkgver + + install -D -m644 libjbig/libjbig.a "$pkgdir"/usr/lib/libjbig.a + install -D -m644 libjbig/libjbig85.a "$pkgdir"/usr/lib/libjbig85.a + install -D -m644 libjbig/jbig.h "$pkgdir"/usr/include/jbig.h + install -D -m644 libjbig/jbig_ar.h "$pkgdir"/usr/include/jbig_ar.h + install -D -m644 libjbig/jbig85.h "$pkgdir"/usr/include/jbig85.h + + install -d -m755 "$pkgdir"/usr/share/man/man1 + install -m644 pbmtools/*.1* "$pkgdir"/usr/share/man/man1 + + install -D -m755 pbmtools/jbgtopbm "$pkgdir"/usr/bin/jbgtopbm + install -D -m755 pbmtools/pbmtojbg "$pkgdir"/usr/bin/pbmtojbg + install -D -m755 pbmtools/jbgtopbm85 "$pkgdir"/usr/bin/jbgtopbm85 + install -D -m755 pbmtools/pbmtojbg85 "$pkgdir"/usr/bin/pbmtojbg85 + + rm -rf $pkgdir/usr/share/man/man5/p{b,g}m.5* +} diff --git a/x86_64/extra/js78/0001-Fixes-for-LTO-PGO-support.patch b/x86_64/extra/js78/0001-Fixes-for-LTO-PGO-support.patch new file mode 100644 index 0000000..52086f2 --- /dev/null +++ b/x86_64/extra/js78/0001-Fixes-for-LTO-PGO-support.patch @@ -0,0 +1,103 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Tue, 17 Nov 2020 22:45:47 +0100 +Subject: [PATCH] Fixes for LTO+PGO support + +Cherry-picked from Firefox Nightly. +--- + build/moz.configure/lto-pgo.configure | 7 +++++-- + config/makefiles/rust.mk | 21 +++++++++++++++++---- + 2 files changed, 22 insertions(+), 6 deletions(-) + +diff --git a/build/moz.configure/lto-pgo.configure b/build/moz.configure/lto-pgo.configure +index 366c6691f7d1..e5342a037ee9 100644 +--- a/build/moz.configure/lto-pgo.configure ++++ b/build/moz.configure/lto-pgo.configure +@@ -229,7 +229,10 @@ def lto(value, c_compiler, ld64_known_good, target, instrumented_build): + # instruction sets. + else: + num_cores = multiprocessing.cpu_count() +- cflags.append("-flto") ++ if len(value) and value[0].lower() == 'full': ++ cflags.append("-flto") ++ else: ++ cflags.append("-flto=thin") + cflags.append("-flifetime-dse=1") + + ldflags.append("-flto=%s" % num_cores) +@@ -258,6 +261,6 @@ set_config('MOZ_LTO', lto.enabled) + set_define('MOZ_LTO', lto.enabled) + set_config('MOZ_LTO_CFLAGS', lto.cflags) + set_config('MOZ_LTO_LDFLAGS', lto.ldflags) +-set_config('MOZ_LTO_RUST', lto.rust_lto) ++set_config('MOZ_LTO_RUST_CROSS', lto.rust_lto) + add_old_configure_assignment('MOZ_LTO_CFLAGS', lto.cflags) + add_old_configure_assignment('MOZ_LTO_LDFLAGS', lto.ldflags) +diff --git a/config/makefiles/rust.mk b/config/makefiles/rust.mk +index f4475054f897..f19dfbc72fad 100644 +--- a/config/makefiles/rust.mk ++++ b/config/makefiles/rust.mk +@@ -59,17 +59,19 @@ cargo_rustc_flags = $(CARGO_RUSTCFLAGS) + ifndef DEVELOPER_OPTIONS + ifndef MOZ_DEBUG_RUST + # Enable link-time optimization for release builds, but not when linking +-# gkrust_gtest. ++# gkrust_gtest. And not when doing cross-language LTO. ++ifndef MOZ_LTO_RUST_CROSS + ifeq (,$(findstring gkrust_gtest,$(RUST_LIBRARY_FILE))) + cargo_rustc_flags += -Clto + endif + # Versions of rust >= 1.45 need -Cembed-bitcode=yes for all crates when + # using -Clto. + ifeq (,$(filter 1.38.% 1.39.% 1.40.% 1.41.% 1.42.% 1.43.% 1.44.%,$(RUSTC_VERSION))) + RUSTFLAGS += -Cembed-bitcode=yes + endif + endif + endif ++endif + + ifdef CARGO_INCREMENTAL + export CARGO_INCREMENTAL +@@ -195,10 +197,19 @@ target_rust_ltoable := force-cargo-library-build + target_rust_nonltoable := force-cargo-test-run force-cargo-library-check $(foreach b,build check,force-cargo-program-$(b)) + + ifdef MOZ_PGO_RUST +-rust_pgo_flags := $(if $(MOZ_PROFILE_GENERATE),-C profile-generate=$(topobjdir)) $(if $(MOZ_PROFILE_USE),-C profile-use=$(PGO_PROFILE_PATH)) ++ifdef MOZ_PROFILE_GENERATE ++rust_pgo_flags := -C profile-generate=$(topobjdir) ++# The C compiler may be passed extra llvm flags for PGO that we also want to pass to rust as well. ++# In PROFILE_GEN_CFLAGS, they look like "-mllvm foo", and we want "-C llvm-args=foo", so first turn ++# "-mllvm foo" into "-mllvm:foo" so that it becomes a unique argument, that we can then filter for, ++# excluding other flags, and then turn into the right string. ++rust_pgo_flags += $(patsubst -mllvm:%,-C llvm-args=%,$(filter -mllvm:%,$(subst -mllvm ,-mllvm:,$(PROFILE_GEN_CFLAGS)))) ++else # MOZ_PROFILE_USE ++rust_pgo_flags := -C profile-use=$(PGO_PROFILE_PATH) ++endif + endif + +-$(target_rust_ltoable): RUSTFLAGS:=$(rustflags_override) $(rustflags_sancov) $(RUSTFLAGS) $(if $(MOZ_LTO_RUST),-Clinker-plugin-lto) $(rust_pgo_flags) ++$(target_rust_ltoable): RUSTFLAGS:=$(rustflags_override) $(rustflags_sancov) $(RUSTFLAGS) $(if $(MOZ_LTO_RUST_CROSS),-Clinker-plugin-lto) $(rust_pgo_flags) + $(target_rust_nonltoable): RUSTFLAGS:=$(rustflags_override) $(rustflags_sancov) $(RUSTFLAGS) + + TARGET_RECIPES := $(target_rust_ltoable) $(target_rust_nonltoable) +@@ -312,17 +323,19 @@ $(RUST_LIBRARY_FILE): force-cargo-library-build + # When we are building in --enable-release mode; we add an additional check to confirm + # that we are not importing any networking-related functions in rust code. This reduces + # the chance of proxy bypasses originating from rust code. +-# The check only works when rust code is built with -Clto. ++# The check only works when rust code is built with -Clto but without MOZ_LTO_RUST_CROSS. + # Sanitizers and sancov also fail because compiler-rt hooks network functions. + ifndef MOZ_PROFILE_GENERATE + ifeq ($(OS_ARCH), Linux) + ifeq (,$(rustflags_sancov)$(MOZ_ASAN)$(MOZ_TSAN)$(MOZ_UBSAN)) ++ifndef MOZ_LTO_RUST_CROSS + ifneq (,$(filter -Clto,$(cargo_rustc_flags))) + $(call py_action,check_binary,--target --networking $@) + endif + endif + endif + endif ++endif + + force-cargo-library-check: + $(call CARGO_CHECK) --lib $(cargo_target_flag) $(rust_features_flag) diff --git a/x86_64/extra/js78/0002-Fixes-for-Python-3.10.patch b/x86_64/extra/js78/0002-Fixes-for-Python-3.10.patch new file mode 100644 index 0000000..7d54c12 --- /dev/null +++ b/x86_64/extra/js78/0002-Fixes-for-Python-3.10.patch @@ -0,0 +1,1013 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Tue, 11 Jan 2022 19:26:43 +0100 +Subject: [PATCH] Fixes for Python 3.10 + +Bug 1719144 cherry-picked from Firefox Nightly. +--- + python/mach/mach/config.py | 5 +- + python/mach/mach/decorators.py | 3 +- + python/mach/mach/main.py | 2 +- + .../mozbuild/backend/configenvironment.py | 3 +- + python/mozbuild/mozbuild/makeutil.py | 2 +- + python/mozbuild/mozbuild/util.py | 3 +- + taskcluster/taskgraph/util/schema.py | 3 +- + .../manifestparser/manifestparser/filters.py | 3 +- + third_party/python/gyp/pylib/gyp/common.py | 3 +- + third_party/python/requirements.in | 2 +- + third_party/python/requirements.txt | 6 +- + .../{ => voluptuous-0.12.1.dist-info}/COPYING | 0 + .../METADATA} | 114 +++++++--- + .../voluptuous-0.12.1.dist-info/RECORD | 11 + + .../voluptuous-0.12.1.dist-info/WHEEL | 11 + + .../top_level.txt | 0 + .../python/voluptuous/voluptuous/__init__.py | 2 +- + .../python/voluptuous/voluptuous/error.py | 4 +- + .../voluptuous/voluptuous/schema_builder.py | 25 ++- + .../python/voluptuous/voluptuous/util.py | 18 +- + .../voluptuous/voluptuous/validators.py | 198 ++++++++++++------ + 21 files changed, 300 insertions(+), 118 deletions(-) + copy third_party/python/voluptuous/{ => voluptuous-0.12.1.dist-info}/COPYING (100%) + rename third_party/python/voluptuous/{README.md => voluptuous-0.12.1.dist-info/METADATA} (83%) + create mode 100644 third_party/python/voluptuous/voluptuous-0.12.1.dist-info/RECORD + create mode 100644 third_party/python/voluptuous/voluptuous-0.12.1.dist-info/WHEEL + rename third_party/python/{psutil-cp27-none-win_amd64/psutil-5.7.0.dist-info => voluptuous/voluptuous-0.12.1.dist-info}/top_level.txt (100%) + +diff --git a/python/mach/mach/config.py b/python/mach/mach/config.py +index 7210eca82308..6605e381b310 100644 +--- a/python/mach/mach/config.py ++++ b/python/mach/mach/config.py +@@ -17,6 +17,7 @@ settings are available. + from __future__ import absolute_import, unicode_literals + + import collections ++import collections.abc + import os + import sys + import six +@@ -144,7 +145,7 @@ def reraise_attribute_error(func): + return _ + + +-class ConfigSettings(collections.Mapping): ++class ConfigSettings(collections.abc.Mapping): + """Interface for configuration settings. + + This is the main interface to the configuration. +@@ -190,7 +191,7 @@ class ConfigSettings(collections.Mapping): + will result in exceptions being raised. + """ + +- class ConfigSection(collections.MutableMapping, object): ++ class ConfigSection(collections.abc.MutableMapping, object): + """Represents an individual config section.""" + def __init__(self, config, name, settings): + object.__setattr__(self, '_config', config) +diff --git a/python/mach/mach/decorators.py b/python/mach/mach/decorators.py +index 27f7f34a6ddc..8b1a49c76dc2 100644 +--- a/python/mach/mach/decorators.py ++++ b/python/mach/mach/decorators.py +@@ -6,6 +6,7 @@ from __future__ import absolute_import, unicode_literals + + import argparse + import collections ++import collections.abc + + from .base import MachError + from .registrar import Registrar +@@ -140,7 +141,7 @@ def CommandProvider(cls): + 'Conditions argument must take a list ' + \ + 'of functions. Found %s instead.' + +- if not isinstance(command.conditions, collections.Iterable): ++ if not isinstance(command.conditions, collections.abc.Iterable): + msg = msg % (command.name, type(command.conditions)) + raise MachError(msg) + +diff --git a/python/mach/mach/main.py b/python/mach/mach/main.py +index a7311806d0a4..0f2c6a16d9d2 100644 +--- a/python/mach/mach/main.py ++++ b/python/mach/mach/main.py +@@ -16,7 +16,7 @@ import os + import sys + import traceback + import uuid +-from collections import Iterable ++from collections.abc import Iterable + + from six import string_types + +diff --git a/python/mozbuild/mozbuild/backend/configenvironment.py b/python/mozbuild/mozbuild/backend/configenvironment.py +index 20d1a9fa69da..898cabb73b0b 100644 +--- a/python/mozbuild/mozbuild/backend/configenvironment.py ++++ b/python/mozbuild/mozbuild/backend/configenvironment.py +@@ -9,7 +9,8 @@ import six + import sys + import json + +-from collections import Iterable, OrderedDict ++from collections.abc import Iterable ++from collections import OrderedDict + from types import ModuleType + + import mozpack.path as mozpath +diff --git a/python/mozbuild/mozbuild/makeutil.py b/python/mozbuild/mozbuild/makeutil.py +index 4da1a3b268e5..4ce56848cd6c 100644 +--- a/python/mozbuild/mozbuild/makeutil.py ++++ b/python/mozbuild/mozbuild/makeutil.py +@@ -7,7 +7,7 @@ from __future__ import absolute_import, print_function, unicode_literals + import os + import re + import six +-from collections import Iterable ++from collections.abc import Iterable + + + class Makefile(object): +diff --git a/python/mozbuild/mozbuild/util.py b/python/mozbuild/mozbuild/util.py +index 044cf645c1f1..ed30088c0059 100644 +--- a/python/mozbuild/mozbuild/util.py ++++ b/python/mozbuild/mozbuild/util.py +@@ -9,6 +9,7 @@ from __future__ import absolute_import, print_function, unicode_literals + + import argparse + import collections ++import collections.abc + import ctypes + import difflib + import errno +@@ -782,7 +783,7 @@ class HierarchicalStringList(object): + self._strings = StrictOrderingOnAppendList() + self._children = {} + +- class StringListAdaptor(collections.Sequence): ++ class StringListAdaptor(collections.abc.Sequence): + def __init__(self, hsl): + self._hsl = hsl + +diff --git a/taskcluster/taskgraph/util/schema.py b/taskcluster/taskgraph/util/schema.py +index 0b15d3d5fd6f..29e36793f336 100644 +--- a/taskcluster/taskgraph/util/schema.py ++++ b/taskcluster/taskgraph/util/schema.py +@@ -7,6 +7,7 @@ from __future__ import absolute_import, print_function, unicode_literals + import re + import pprint + import collections ++import collections.abc + import voluptuous + + from six import text_type, iteritems +@@ -160,7 +161,7 @@ def check_schema(schema): + 'Unexpected type in YAML schema: {} @ {}'.format( + type(k).__name__, path)) + +- if isinstance(sch, collections.Mapping): ++ if isinstance(sch, collections.abc.Mapping): + for k, v in iteritems(sch): + child = "{}[{!r}]".format(path, k) + check_identifier(child, k) +diff --git a/testing/mozbase/manifestparser/manifestparser/filters.py b/testing/mozbase/manifestparser/manifestparser/filters.py +index 287ee033b222..b1d6080031f6 100644 +--- a/testing/mozbase/manifestparser/manifestparser/filters.py ++++ b/testing/mozbase/manifestparser/manifestparser/filters.py +@@ -12,7 +12,8 @@ from __future__ import absolute_import + + import itertools + import os +-from collections import defaultdict, MutableSequence ++from collections import defaultdict ++from collections.abc import MutableSequence + + import six + from six import string_types +diff --git a/third_party/python/gyp/pylib/gyp/common.py b/third_party/python/gyp/pylib/gyp/common.py +index b268d229a483..2195e1e458e3 100644 +--- a/third_party/python/gyp/pylib/gyp/common.py ++++ b/third_party/python/gyp/pylib/gyp/common.py +@@ -5,6 +5,7 @@ + from __future__ import with_statement + + import collections ++import collections.abc + import errno + import filecmp + import os.path +@@ -494,7 +495,7 @@ def uniquer(seq, idfun=None): + + + # Based on http://code.activestate.com/recipes/576694/. +-class OrderedSet(collections.MutableSet): ++class OrderedSet(collections.abc.MutableSet): + def __init__(self, iterable=None): + self.end = end = [] + end += [None, end, end] # sentinel node for doubly linked list +diff --git a/third_party/python/requirements.in b/third_party/python/requirements.in +index b65c92e30c09..1127ab280c84 100644 +--- a/third_party/python/requirements.in ++++ b/third_party/python/requirements.in +@@ -42,4 +42,4 @@ requests==2.9.1 + responses==0.10.6 + sentry-sdk==0.14.3 + six==1.13.0 +-voluptuous==0.11.5 ++voluptuous==0.12.1 +diff --git a/third_party/python/requirements.txt b/third_party/python/requirements.txt +index fd0b6cb1a181..5742c9cdb771 100644 +--- a/third_party/python/requirements.txt ++++ b/third_party/python/requirements.txt +@@ -172,9 +172,9 @@ urllib3==1.25.9 \ + --hash=sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527 \ + --hash=sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115 \ + # via sentry-sdk +-voluptuous==0.11.5 \ +- --hash=sha256:303542b3fc07fb52ec3d7a1c614b329cdbee13a9d681935353d8ea56a7bfa9f1 \ +- --hash=sha256:567a56286ef82a9d7ae0628c5842f65f516abcb496e74f3f59f1d7b28df314ef \ ++voluptuous==0.12.1 \ ++ --hash=sha256:663572419281ddfaf4b4197fd4942d181630120fb39b333e3adad70aeb56444b \ ++ --hash=sha256:8ace33fcf9e6b1f59406bfaf6b8ec7bcc44266a9f29080b4deb4fe6ff2492386 + # via -r requirements-mach-vendor-python.in + + # WARNING: The following packages were not pinned, but pip requires them to be +diff --git a/third_party/python/voluptuous/COPYING b/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/COPYING +similarity index 100% +copy from third_party/python/voluptuous/COPYING +copy to third_party/python/voluptuous/voluptuous-0.12.1.dist-info/COPYING +diff --git a/third_party/python/voluptuous/README.md b/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/METADATA +similarity index 83% +rename from third_party/python/voluptuous/README.md +rename to third_party/python/voluptuous/voluptuous-0.12.1.dist-info/METADATA +index 46e2288f4bea..914a5761d63a 100644 +--- a/third_party/python/voluptuous/README.md ++++ b/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/METADATA +@@ -1,7 +1,67 @@ ++<<<<<<<< HEAD:third_party/python/voluptuous/README.md ++|||||||| parent of 8f49ebff11d78 (Bug 1719144 - Update voluptuous. r=firefox-build-system-reviewers,mhentges):third_party/python/voluptuous/voluptuous-0.11.5.dist-info/METADATA ++Metadata-Version: 2.1 ++Name: voluptuous ++Version: 0.11.5 ++Summary: # Voluptuous is a Python data validation library ++Home-page: https://github.com/alecthomas/voluptuous ++Author: Alec Thomas ++Author-email: alec@swapoff.org ++License: BSD ++Download-URL: https://pypi.python.org/pypi/voluptuous ++Platform: any ++Classifier: Development Status :: 5 - Production/Stable ++Classifier: Intended Audience :: Developers ++Classifier: License :: OSI Approved :: BSD License ++Classifier: Operating System :: OS Independent ++Classifier: Programming Language :: Python :: 2 ++Classifier: Programming Language :: Python :: 2.7 ++Classifier: Programming Language :: Python :: 3 ++Classifier: Programming Language :: Python :: 3.6 ++Classifier: Programming Language :: Python :: 3.7 ++Description-Content-Type: text/markdown ++ ++======== ++Metadata-Version: 2.1 ++Name: voluptuous ++Version: 0.12.1 ++Summary: UNKNOWN ++Home-page: https://github.com/alecthomas/voluptuous ++Author: Alec Thomas ++Author-email: alec@swapoff.org ++License: BSD ++Download-URL: https://pypi.python.org/pypi/voluptuous ++Platform: any ++Classifier: Development Status :: 5 - Production/Stable ++Classifier: Intended Audience :: Developers ++Classifier: License :: OSI Approved :: BSD License ++Classifier: Operating System :: OS Independent ++Classifier: Programming Language :: Python :: 2 ++Classifier: Programming Language :: Python :: 2.7 ++Classifier: Programming Language :: Python :: 3 ++Classifier: Programming Language :: Python :: 3.6 ++Classifier: Programming Language :: Python :: 3.7 ++Classifier: Programming Language :: Python :: 3.8 ++Classifier: Programming Language :: Python :: 3.9 ++Description-Content-Type: text/markdown ++ ++ ++# CONTRIBUTIONS ONLY ++ ++**What does this mean?** I do not have time to fix issues myself. The only way fixes or new features will be added is by people submitting PRs. ++ ++**Current status:** Voluptuous is largely feature stable. There hasn't been a need to add new features in a while, but there are some bugs that should be fixed. ++ ++**Why?** I no longer use Voluptuous personally (in fact I no longer regularly write Python code). Rather than leave the project in a limbo of people filing issues and wondering why they're not being worked on, I believe this notice will more clearly set expectations. ++ ++>>>>>>>> 8f49ebff11d78 (Bug 1719144 - Update voluptuous. r=firefox-build-system-reviewers,mhentges):third_party/python/voluptuous/voluptuous-0.12.1.dist-info/METADATA + # Voluptuous is a Python data validation library + +-[![Build Status](https://travis-ci.org/alecthomas/voluptuous.png)](https://travis-ci.org/alecthomas/voluptuous) +-[![Coverage Status](https://coveralls.io/repos/github/alecthomas/voluptuous/badge.svg?branch=master)](https://coveralls.io/github/alecthomas/voluptuous?branch=master) [![Gitter chat](https://badges.gitter.im/alecthomas.png)](https://gitter.im/alecthomas/Lobby) ++[![image](https://img.shields.io/pypi/v/voluptuous.svg)](https://python.org/pypi/voluptuous) ++[![image](https://img.shields.io/pypi/l/voluptuous.svg)](https://python.org/pypi/voluptuous) ++[![image](https://img.shields.io/pypi/pyversions/voluptuous.svg)](https://python.org/pypi/voluptuous) ++[![Build Status](https://travis-ci.org/alecthomas/voluptuous.svg)](https://travis-ci.org/alecthomas/voluptuous) ++[![Coverage Status](https://coveralls.io/repos/github/alecthomas/voluptuous/badge.svg?branch=master)](https://coveralls.io/github/alecthomas/voluptuous?branch=master) [![Gitter chat](https://badges.gitter.im/alecthomas.svg)](https://gitter.im/alecthomas/Lobby) + + Voluptuous, *despite* the name, is a Python data validation library. It + is primarily intended for validating data coming into Python as JSON, +@@ -32,6 +92,28 @@ The documentation is provided [here](http://alecthomas.github.io/voluptuous/). + + See [CHANGELOG.md](https://github.com/alecthomas/voluptuous/blob/master/CHANGELOG.md). + ++## Why use Voluptuous over another validation library? ++ ++**Validators are simple callables:** ++No need to subclass anything, just use a function. ++ ++**Errors are simple exceptions:** ++A validator can just `raise Invalid(msg)` and expect the user to get ++useful messages. ++ ++**Schemas are basic Python data structures:** ++Should your data be a dictionary of integer keys to strings? ++`{int: str}` does what you expect. List of integers, floats or ++strings? `[int, float, str]`. ++ ++**Designed from the ground up for validating more than just forms:** ++Nested data structures are treated in the same way as any other ++type. Need a list of dictionaries? `[{}]` ++ ++**Consistency:** ++Types in the schema are checked as types. Values are compared as ++values. Callables are called to validate. Simple. ++ + ## Show me an example + + Twitter's [user search API](https://dev.twitter.com/rest/reference/get/users/search) accepts +@@ -189,9 +271,9 @@ True + + ``` + +-### URL's ++### URLs + +-URL's in the schema are matched by using `urlparse` library. ++URLs in the schema are matched by using `urlparse` library. + + ```pycon + >>> from voluptuous import Url +@@ -679,35 +761,13 @@ cross-field validator will not run: + s({'password':'123', 'password_again': 1337}) + ``` + +-## Running tests. ++## Running tests + + Voluptuous is using nosetests: + + $ nosetests + + +-## Why use Voluptuous over another validation library? +- +-**Validators are simple callables** +-: No need to subclass anything, just use a function. +- +-**Errors are simple exceptions.** +-: A validator can just `raise Invalid(msg)` and expect the user to get +-useful messages. +- +-**Schemas are basic Python data structures.** +-: Should your data be a dictionary of integer keys to strings? +-`{int: str}` does what you expect. List of integers, floats or +-strings? `[int, float, str]`. +- +-**Designed from the ground up for validating more than just forms.** +-: Nested data structures are treated in the same way as any other +-type. Need a list of dictionaries? `[{}]` +- +-**Consistency.** +-: Types in the schema are checked as types. Values are compared as +-values. Callables are called to validate. Simple. +- + ## Other libraries and inspirations + + Voluptuous is heavily inspired by +diff --git a/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/RECORD b/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/RECORD +new file mode 100644 +index 000000000000..5f7fde6e52bc +--- /dev/null ++++ b/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/RECORD +@@ -0,0 +1,11 @@ ++voluptuous/__init__.py,sha256=tSYWPAIWee6YwcMK8hxmaiagG_swokUMeH8MluJLWZM,203 ++voluptuous/error.py,sha256=fLRmJwKp0bqRGgBM34ztg9MTxhEOf465sbQcvJlEtAk,4026 ++voluptuous/humanize.py,sha256=hZlhdN4aVeGDIXdtSTeyEbmku65SDPRuut3mOfuRQP0,1606 ++voluptuous/schema_builder.py,sha256=xVJpf3uJMyS1CKwzDw3rEK39ebqDiF_A2Kbq4VnZ3Aw,43677 ++voluptuous/util.py,sha256=RXLZ2b5y-A4az3teG6UpCx2UZcXpS11sIVCdORyKar8,3150 ++voluptuous/validators.py,sha256=xZgyKH-EVqUHCHral5gzViXq4HfEjJEsGdQy7z6llc0,32798 ++voluptuous-0.12.1.dist-info/COPYING,sha256=JHtJdren-k2J2Vh8qlCVVh60bcVFfyJ59ipitUUq3qk,1486 ++voluptuous-0.12.1.dist-info/METADATA,sha256=OdEydy5NydPFFzAhP8qj_YqJsQPQvoIt5ZT1t8B14Ok,20120 ++voluptuous-0.12.1.dist-info/WHEEL,sha256=S6zePDbUAjzMmpYOg2cHDxuYFWw7WiOXt6ogM6hIB5Q,92 ++voluptuous-0.12.1.dist-info/top_level.txt,sha256=TTdVb7M-vndb67UqTmAxuVjpAUakrlAWJYqvo3w4Iqc,11 ++voluptuous-0.12.1.dist-info/RECORD,, +diff --git a/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/WHEEL b/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/WHEEL +new file mode 100644 +index 000000000000..4c2552761e69 +--- /dev/null ++++ b/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/WHEEL +@@ -0,0 +1,11 @@ ++Wheel-Version: 1.0 ++<<<<<<<< HEAD:testing/web-platform/tests/tools/third_party/six/six-1.13.0.dist-info/WHEEL ++Generator: bdist_wheel (0.32.1) ++|||||||| parent of 8f49ebff11d78 (Bug 1719144 - Update voluptuous. r=firefox-build-system-reviewers,mhentges):third_party/python/voluptuous/voluptuous-0.11.5.dist-info/WHEEL ++Generator: bdist_wheel (0.31.1) ++======== ++Generator: bdist_wheel (0.36.1) ++>>>>>>>> 8f49ebff11d78 (Bug 1719144 - Update voluptuous. r=firefox-build-system-reviewers,mhentges):third_party/python/voluptuous/voluptuous-0.12.1.dist-info/WHEEL ++Root-Is-Purelib: true ++Tag: py3-none-any ++ +diff --git a/third_party/python/psutil-cp27-none-win_amd64/psutil-5.7.0.dist-info/top_level.txt b/third_party/python/voluptuous/voluptuous-0.12.1.dist-info/top_level.txt +similarity index 100% +rename from third_party/python/psutil-cp27-none-win_amd64/psutil-5.7.0.dist-info/top_level.txt +rename to third_party/python/voluptuous/voluptuous-0.12.1.dist-info/top_level.txt +diff --git a/third_party/python/voluptuous/voluptuous/__init__.py b/third_party/python/voluptuous/voluptuous/__init__.py +index 10236d5a6670..4d09fe670fd4 100644 +--- a/third_party/python/voluptuous/voluptuous/__init__.py ++++ b/third_party/python/voluptuous/voluptuous/__init__.py +@@ -5,5 +5,5 @@ from voluptuous.validators import * + from voluptuous.util import * + from voluptuous.error import * + +-__version__ = '0.11.5' ++__version__ = '0.12.1' + __author__ = 'alecthomas' +diff --git a/third_party/python/voluptuous/voluptuous/error.py b/third_party/python/voluptuous/voluptuous/error.py +index 86c4e0a35933..97f37d2c7c4b 100644 +--- a/third_party/python/voluptuous/voluptuous/error.py ++++ b/third_party/python/voluptuous/voluptuous/error.py +@@ -142,11 +142,11 @@ class BooleanInvalid(Invalid): + + + class UrlInvalid(Invalid): +- """The value is not a url.""" ++ """The value is not a URL.""" + + + class EmailInvalid(Invalid): +- """The value is not a email.""" ++ """The value is not an email address.""" + + + class FileInvalid(Invalid): +diff --git a/third_party/python/voluptuous/voluptuous/schema_builder.py b/third_party/python/voluptuous/voluptuous/schema_builder.py +index 8d7a81a3e3e5..df19c8da2ddf 100644 +--- a/third_party/python/voluptuous/voluptuous/schema_builder.py ++++ b/third_party/python/voluptuous/voluptuous/schema_builder.py +@@ -22,6 +22,11 @@ else: + def iteritems(d): + return d.iteritems() + ++if sys.version_info >= (3, 3): ++ _Mapping = collections.abc.Mapping ++else: ++ _Mapping = collections.Mapping ++ + """Schema validation for Python data structures. + + Given eg. a nested data structure like this: +@@ -280,7 +285,7 @@ class Schema(object): + return schema.__voluptuous_compile__(self) + if isinstance(schema, Object): + return self._compile_object(schema) +- if isinstance(schema, collections.Mapping): ++ if isinstance(schema, _Mapping): + return self._compile_dict(schema) + elif isinstance(schema, list): + return self._compile_list(schema) +@@ -610,11 +615,11 @@ class Schema(object): + if not isinstance(data, seq_type): + raise er.SequenceTypeInvalid('expected a %s' % seq_type_name, path) + +- # Empty seq schema, allow any data. ++ # Empty seq schema, reject any data. + if not schema: + if data: + raise er.MultipleInvalid([ +- er.ValueInvalid('not a valid value', [value]) for value in data ++ er.ValueInvalid('not a valid value', path if path else data) + ]) + return data + +@@ -735,7 +740,7 @@ class Schema(object): + + result = self.schema.copy() + +- # returns the key that may have been passed as arugment to Marker constructor ++ # returns the key that may have been passed as an argument to Marker constructor + def key_literal(key): + return (key.schema if isinstance(key, Marker) else key) + +@@ -771,9 +776,10 @@ class Schema(object): + result[key] = value + + # recompile and send old object ++ result_cls = type(self) + result_required = (required if required is not None else self.required) + result_extra = (extra if extra is not None else self.extra) +- return Schema(result, required=result_required, extra=result_extra) ++ return result_cls(result, required=result_required, extra=result_extra) + + + def _compile_scalar(schema): +@@ -809,7 +815,7 @@ def _compile_scalar(schema): + def validate_callable(path, data): + try: + return schema(data) +- except ValueError as e: ++ except ValueError: + raise er.ValueInvalid('not a valid value', path) + except er.Invalid as e: + e.prepend(path) +@@ -1121,8 +1127,11 @@ class Inclusive(Optional): + True + """ + +- def __init__(self, schema, group_of_inclusion, msg=None): +- super(Inclusive, self).__init__(schema, msg=msg) ++ def __init__(self, schema, group_of_inclusion, ++ msg=None, description=None, default=UNDEFINED): ++ super(Inclusive, self).__init__(schema, msg=msg, ++ default=default, ++ description=description) + self.group_of_inclusion = group_of_inclusion + + +diff --git a/third_party/python/voluptuous/voluptuous/util.py b/third_party/python/voluptuous/voluptuous/util.py +index 434c360c7e95..e0ff43f8500a 100644 +--- a/third_party/python/voluptuous/voluptuous/util.py ++++ b/third_party/python/voluptuous/voluptuous/util.py +@@ -7,54 +7,62 @@ from voluptuous import validators + __author__ = 'tusharmakkar08' + + ++def _fix_str(v): ++ if sys.version_info[0] == 2 and isinstance(v, unicode): ++ s = v ++ else: ++ s = str(v) ++ return s ++ ++ + def Lower(v): + """Transform a string to lower case. + + >>> s = Schema(Lower) + >>> s('HI') + 'hi' + """ +- return str(v).lower() ++ return _fix_str(v).lower() + + + def Upper(v): + """Transform a string to upper case. + + >>> s = Schema(Upper) + >>> s('hi') + 'HI' + """ +- return str(v).upper() ++ return _fix_str(v).upper() + + + def Capitalize(v): + """Capitalise a string. + + >>> s = Schema(Capitalize) + >>> s('hello world') + 'Hello world' + """ +- return str(v).capitalize() ++ return _fix_str(v).capitalize() + + + def Title(v): + """Title case a string. + + >>> s = Schema(Title) + >>> s('hello world') + 'Hello World' + """ +- return str(v).title() ++ return _fix_str(v).title() + + + def Strip(v): + """Strip whitespace from a string. + + >>> s = Schema(Strip) + >>> s(' hello world ') + 'hello world' + """ +- return str(v).strip() ++ return _fix_str(v).strip() + + + class DefaultTo(object): +diff --git a/third_party/python/voluptuous/voluptuous/validators.py b/third_party/python/voluptuous/voluptuous/validators.py +index d5e3ed598051..fac9cc7717c0 100644 +--- a/third_party/python/voluptuous/voluptuous/validators.py ++++ b/third_party/python/voluptuous/voluptuous/validators.py +@@ -192,33 +192,44 @@ class _WithSubValidators(object): + def __init__(self, *validators, **kwargs): + self.validators = validators + self.msg = kwargs.pop('msg', None) ++ self.required = kwargs.pop('required', False) ++ self.discriminant = kwargs.pop('discriminant', None) + + def __voluptuous_compile__(self, schema): +- self._compiled = [ +- schema._compile(v) +- for v in self.validators +- ] ++ self._compiled = [] ++ old_required = schema.required ++ self.schema = schema ++ for v in self.validators: ++ schema.required = self.required ++ self._compiled.append(schema._compile(v)) ++ schema.required = old_required + return self._run + + def _run(self, path, value): ++ if self.discriminant is not None: ++ self._compiled = [ ++ self.schema._compile(v) ++ for v in self.discriminant(value, self.validators) ++ ] ++ + return self._exec(self._compiled, value, path) + + def __call__(self, v): + return self._exec((Schema(val) for val in self.validators), v) + + def __repr__(self): + return '%s(%s, msg=%r)' % ( + self.__class__.__name__, + ", ".join(repr(v) for v in self.validators), + self.msg + ) + + + class Any(_WithSubValidators): + """Use the first validated value. + + :param msg: Message to deliver to user if validation fails. +- :param kwargs: All other keyword arguments are passed to the sub-Schema constructors. ++ :param kwargs: All other keyword arguments are passed to the sub-schema constructors. + :returns: Return value of the first validator that passes. + + >>> validate = Schema(Any('true', 'false', +@@ -262,13 +273,57 @@ class Any(_WithSubValidators): + Or = Any + + ++class Union(_WithSubValidators): ++ """Use the first validated value among those selected by discriminant. ++ ++ :param msg: Message to deliver to user if validation fails. ++ :param discriminant(value, validators): Returns the filtered list of validators based on the value. ++ :param kwargs: All other keyword arguments are passed to the sub-schema constructors. ++ :returns: Return value of the first validator that passes. ++ ++ >>> validate = Schema(Union({'type':'a', 'a_val':'1'},{'type':'b', 'b_val':'2'}, ++ ... discriminant=lambda val, alt: filter( ++ ... lambda v : v['type'] == val['type'] , alt))) ++ >>> validate({'type':'a', 'a_val':'1'}) == {'type':'a', 'a_val':'1'} ++ True ++ >>> with raises(MultipleInvalid, "not a valid value for dictionary value @ data['b_val']"): ++ ... validate({'type':'b', 'b_val':'5'}) ++ ++ ```discriminant({'type':'b', 'a_val':'5'}, [{'type':'a', 'a_val':'1'},{'type':'b', 'b_val':'2'}])``` is invoked ++ ++ Without the discriminant, the exception would be "extra keys not allowed @ data['b_val']" ++ """ ++ ++ def _exec(self, funcs, v, path=None): ++ error = None ++ for func in funcs: ++ try: ++ if path is None: ++ return func(v) ++ else: ++ return func(path, v) ++ except Invalid as e: ++ if error is None or len(e.path) > len(error.path): ++ error = e ++ else: ++ if error: ++ raise error if self.msg is None else AnyInvalid( ++ self.msg, path=path) ++ raise AnyInvalid(self.msg or 'no valid value found', ++ path=path) ++ ++ ++# Convenience alias ++Switch = Union ++ ++ + class All(_WithSubValidators): + """Value must pass all validators. + + The output of each validator is passed as input to the next. + + :param msg: Message to deliver to user if validation fails. +- :param kwargs: All other keyword arguments are passed to the sub-Schema constructors. ++ :param kwargs: All other keyword arguments are passed to the sub-schema constructors. + + >>> validate = Schema(All('10', Coerce(int))) + >>> validate('10') +@@ -303,7 +358,7 @@ class Match(object): + >>> with raises(MultipleInvalid, 'expected string or buffer'): + ... validate(123) + +- Pattern may also be a _compiled regular expression: ++ Pattern may also be a compiled regular expression: + + >>> validate = Schema(Match(re.compile(r'0x[A-F0-9]+', re.I))) + >>> validate('0x123ef4') +@@ -361,38 +416,38 @@ def _url_validation(v): + return parsed + + +-@message('expected an Email', cls=EmailInvalid) ++@message('expected an email address', cls=EmailInvalid) + def Email(v): +- """Verify that the value is an Email or not. ++ """Verify that the value is an email address or not. + + >>> s = Schema(Email()) +- >>> with raises(MultipleInvalid, 'expected an Email'): ++ >>> with raises(MultipleInvalid, 'expected an email address'): + ... s("a.com") +- >>> with raises(MultipleInvalid, 'expected an Email'): ++ >>> with raises(MultipleInvalid, 'expected an email address'): + ... s("a@.com") +- >>> with raises(MultipleInvalid, 'expected an Email'): ++ >>> with raises(MultipleInvalid, 'expected an email address'): + ... s("a@.com") + >>> s('t@x.com') + 't@x.com' + """ + try: + if not v or "@" not in v: +- raise EmailInvalid("Invalid Email") ++ raise EmailInvalid("Invalid email address") + user_part, domain_part = v.rsplit('@', 1) + + if not (USER_REGEX.match(user_part) and DOMAIN_REGEX.match(domain_part)): +- raise EmailInvalid("Invalid Email") ++ raise EmailInvalid("Invalid email address") + return v + except: + raise ValueError + + +-@message('expected a Fully qualified domain name URL', cls=UrlInvalid) ++@message('expected a fully qualified domain name URL', cls=UrlInvalid) + def FqdnUrl(v): +- """Verify that the value is a Fully qualified domain name URL. ++ """Verify that the value is a fully qualified domain name URL. + + >>> s = Schema(FqdnUrl()) +- >>> with raises(MultipleInvalid, 'expected a Fully qualified domain name URL'): ++ >>> with raises(MultipleInvalid, 'expected a fully qualified domain name URL'): + ... s("http://localhost/") + >>> s('http://w3.org') + 'http://w3.org' +@@ -423,29 +478,29 @@ def Url(v): + raise ValueError + + +-@message('not a file', cls=FileInvalid) ++@message('Not a file', cls=FileInvalid) + @truth + def IsFile(v): + """Verify the file exists. + + >>> os.path.basename(IsFile()(__file__)).startswith('validators.py') + True +- >>> with raises(FileInvalid, 'not a file'): ++ >>> with raises(FileInvalid, 'Not a file'): + ... IsFile()("random_filename_goes_here.py") + >>> with raises(FileInvalid, 'Not a file'): + ... IsFile()(None) + """ + try: + if v: + v = str(v) + return os.path.isfile(v) + else: + raise FileInvalid('Not a file') + except TypeError: + raise FileInvalid('Not a file') + + +-@message('not a directory', cls=DirInvalid) ++@message('Not a directory', cls=DirInvalid) + @truth + def IsDir(v): + """Verify the directory exists. +@@ -487,20 +542,20 @@ def PathExists(v): + raise PathInvalid("Not a Path") + + +-def Maybe(validator): ++def Maybe(validator, msg=None): + """Validate that the object matches given validator or is None. + +- :raises Invalid: if the value does not match the given validator and is not +- None ++ :raises Invalid: If the value does not match the given validator and is not ++ None. + + >>> s = Schema(Maybe(int)) + >>> s(10) + 10 + >>> with raises(Invalid): + ... s("string") + + """ +- return Any(None, validator) ++ return Any(validator, None, msg=msg) + + + class Range(object): +@@ -533,23 +588,30 @@ class Range(object): + self.msg = msg + + def __call__(self, v): +- if self.min_included: +- if self.min is not None and not v >= self.min: +- raise RangeInvalid( +- self.msg or 'value must be at least %s' % self.min) +- else: +- if self.min is not None and not v > self.min: +- raise RangeInvalid( +- self.msg or 'value must be higher than %s' % self.min) +- if self.max_included: +- if self.max is not None and not v <= self.max: +- raise RangeInvalid( +- self.msg or 'value must be at most %s' % self.max) +- else: +- if self.max is not None and not v < self.max: +- raise RangeInvalid( +- self.msg or 'value must be lower than %s' % self.max) +- return v ++ try: ++ if self.min_included: ++ if self.min is not None and not v >= self.min: ++ raise RangeInvalid( ++ self.msg or 'value must be at least %s' % self.min) ++ else: ++ if self.min is not None and not v > self.min: ++ raise RangeInvalid( ++ self.msg or 'value must be higher than %s' % self.min) ++ if self.max_included: ++ if self.max is not None and not v <= self.max: ++ raise RangeInvalid( ++ self.msg or 'value must be at most %s' % self.max) ++ else: ++ if self.max is not None and not v < self.max: ++ raise RangeInvalid( ++ self.msg or 'value must be lower than %s' % self.max) ++ ++ return v ++ ++ # Objects that lack a partial ordering, e.g. None or strings will raise TypeError ++ except TypeError: ++ raise RangeInvalid( ++ self.msg or 'invalid value or type (must have a partial ordering)') + + def __repr__(self): + return ('Range(min=%r, max=%r, min_included=%r,' +@@ -579,32 +641,44 @@ class Clamp(object): + self.msg = msg + + def __call__(self, v): +- if self.min is not None and v < self.min: +- v = self.min +- if self.max is not None and v > self.max: +- v = self.max +- return v ++ try: ++ if self.min is not None and v < self.min: ++ v = self.min ++ if self.max is not None and v > self.max: ++ v = self.max ++ return v ++ ++ # Objects that lack a partial ordering, e.g. None or strings will raise TypeError ++ except TypeError: ++ raise RangeInvalid( ++ self.msg or 'invalid value or type (must have a partial ordering)') + + def __repr__(self): + return 'Clamp(min=%s, max=%s)' % (self.min, self.max) + + + class Length(object): + """The length of a value must be in a certain range.""" + + def __init__(self, min=None, max=None, msg=None): + self.min = min + self.max = max + self.msg = msg + + def __call__(self, v): +- if self.min is not None and len(v) < self.min: +- raise LengthInvalid( +- self.msg or 'length of value must be at least %s' % self.min) +- if self.max is not None and len(v) > self.max: +- raise LengthInvalid( +- self.msg or 'length of value must be at most %s' % self.max) +- return v ++ try: ++ if self.min is not None and len(v) < self.min: ++ raise LengthInvalid( ++ self.msg or 'length of value must be at least %s' % self.min) ++ if self.max is not None and len(v) > self.max: ++ raise LengthInvalid( ++ self.msg or 'length of value must be at most %s' % self.max) ++ return v ++ ++ # Objects that havbe no length e.g. None or strings will raise TypeError ++ except TypeError: ++ raise RangeInvalid( ++ self.msg or 'invalid value or type') + + def __repr__(self): + return 'Length(min=%s, max=%s)' % (self.min, self.max) +@@ -663,27 +737,29 @@ class In(object): + except TypeError: + check = True + if check: +- raise InInvalid(self.msg or 'value is not allowed') ++ raise InInvalid(self.msg or ++ 'value must be one of {}'.format(sorted(self.container))) + return v + + def __repr__(self): + return 'In(%s)' % (self.container,) + + + class NotIn(object): + """Validate that a value is not in a collection.""" + + def __init__(self, container, msg=None): + self.container = container + self.msg = msg + + def __call__(self, v): + try: + check = v in self.container + except TypeError: + check = True + if check: +- raise NotInInvalid(self.msg or 'value is not allowed') ++ raise NotInInvalid(self.msg or ++ 'value must not be one of {}'.format(sorted(self.container))) + return v + + def __repr__(self): +@@ -722,7 +798,7 @@ class ExactSequence(object): + the validators. + + :param msg: Message to deliver to user if validation fails. +- :param kwargs: All other keyword arguments are passed to the sub-Schema ++ :param kwargs: All other keyword arguments are passed to the sub-schema + constructors. + + >>> from voluptuous import Schema, ExactSequence +@@ -887,7 +963,7 @@ class Unordered(object): + class Number(object): + """ + Verify the number of digits that are present in the number(Precision), +- and the decimal places(Scale) ++ and the decimal places(Scale). + + :raises Invalid: If the value does not match the provided Precision and Scale. + +@@ -951,13 +1027,13 @@ class SomeOf(_WithSubValidators): + The output of each validator is passed as input to the next. + + :param min_valid: Minimum number of valid schemas. +- :param validators: a list of schemas or validators to match input against ++ :param validators: List of schemas or validators to match input against. + :param max_valid: Maximum number of valid schemas. + :param msg: Message to deliver to user if validation fails. +- :param kwargs: All other keyword arguments are passed to the sub-Schema constructors. ++ :param kwargs: All other keyword arguments are passed to the sub-schema constructors. + +- :raises NotEnoughValid: if the minimum number of validations isn't met +- :raises TooManyValid: if the more validations than the given amount is met ++ :raises NotEnoughValid: If the minimum number of validations isn't met. ++ :raises TooManyValid: If the maximum number of validations is exceeded. + + >>> validate = Schema(SomeOf(min_valid=2, validators=[Range(1, 5), Any(float, int), 6.6])) + >>> validate(6.6) diff --git a/x86_64/extra/js78/0003-Fixes-for-Rust-1.56.patch b/x86_64/extra/js78/0003-Fixes-for-Rust-1.56.patch new file mode 100644 index 0000000..b984279 --- /dev/null +++ b/x86_64/extra/js78/0003-Fixes-for-Rust-1.56.patch @@ -0,0 +1,447 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Henri Sivonen +Date: Thu, 15 Jul 2021 08:42:08 +0000 +Subject: [PATCH] Fixes for Rust 1.56 + +packed_simd updates cherry-picked from Firefox Nightly. +--- + .cargo/config.in | 2 +- + Cargo.lock | 2 +- + Cargo.toml | 2 +- + .../rust/packed_simd/.cargo-checksum.json | 2 +- + third_party/rust/packed_simd/Cargo.toml | 6 +- + third_party/rust/packed_simd/build.rs | 28 ++++- + .../rust/packed_simd/src/api/shuffle.rs | 116 ------------------ + .../rust/packed_simd/src/codegen/llvm.rs | 62 ---------- + third_party/rust/packed_simd/src/lib.rs | 6 +- + 9 files changed, 35 insertions(+), 191 deletions(-) + +diff --git a/.cargo/config.in b/.cargo/config.in +index 37fac6a1008a..1597f123c65c 100644 +--- a/.cargo/config.in ++++ b/.cargo/config.in +@@ -50,7 +50,7 @@ tag = "v0.3.0" + [source."https://github.com/hsivonen/packed_simd"] + git = "https://github.com/hsivonen/packed_simd" + replace-with = "vendored-sources" +-rev = "07d285ba65d9a4e3b9d76eacbf4c6489e125127d" ++rev = "8b4bd7d8229660a749dbe419a57ea01df9de5453" + + [source."https://github.com/djg/cubeb-pulse-rs"] + git = "https://github.com/djg/cubeb-pulse-rs" +diff --git a/Cargo.lock b/Cargo.lock +index 990d6a4a582b..fae4794d9478 100644 +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -3426,7 +3426,7 @@ dependencies = [ + [[package]] + name = "packed_simd" + version = "0.3.4" +-source = "git+https://github.com/hsivonen/packed_simd?rev=07d285ba65d9a4e3b9d76eacbf4c6489e125127d#07d285ba65d9a4e3b9d76eacbf4c6489e125127d" ++source = "git+https://github.com/hsivonen/packed_simd?rev=8b4bd7d8229660a749dbe419a57ea01df9de5453#8b4bd7d8229660a749dbe419a57ea01df9de5453" + dependencies = [ + "cfg-if", + "rustc_version", +diff --git a/Cargo.toml b/Cargo.toml +index 897daad41bed..171de100291a 100644 +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -66,7 +66,7 @@ panic = "abort" + + [patch.crates-io] + libudev-sys = { path = "dom/webauthn/libudev-sys" } +-packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="07d285ba65d9a4e3b9d76eacbf4c6489e125127d" } ++packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="8b4bd7d8229660a749dbe419a57ea01df9de5453" } + rlbox_lucet_sandbox = { git = "https://github.com/PLSysSec/rlbox_lucet_sandbox/", rev="d510da5999a744c563b0acd18056069d1698273f" } + nix = { git = "https://github.com/shravanrn/nix/", rev="4af6c367603869a30fddb5ffb0aba2b9477ba92e" } + spirv_cross = { git = "https://github.com/kvark/spirv_cross", branch = "wgpu3" } +diff --git a/third_party/rust/packed_simd/.cargo-checksum.json b/third_party/rust/packed_simd/.cargo-checksum.json +index 5d5b8e066ecb..51a1cee537e3 100644 +--- a/third_party/rust/packed_simd/.cargo-checksum.json ++++ b/third_party/rust/packed_simd/.cargo-checksum.json +@@ -1 +1 @@ +-{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"d56de6531d3c4880e3aada85ac8e6d7388e5d781871e181cb8ade2a746d5d5f5","Cargo.toml":"c7124d80c769e792e6a39f523e72b845ed43d6e3a68dd37af4579fbf58b50828","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"49d01e49a33393af64fa6c813b6a724f68a4d1abfbedcb96413651ed105aa820","bors.toml":"dee881dc69b9b7834e4eba5d95c3ed5a416d4628815a167d6a22d4cb4fb064b8","build.rs":"d344fca66796a5ec1ee681edb1aec7ae3c999262a2f215c26f87e9b1ba00ac94","ci/all.sh":"2ae6b2445b4db83833e40b37efd0016c6b9879ee988b9b3ef94db5439a3e1606","ci/android-install-ndk.sh":"0f1746108cc30bf9b9ba45bcde7b19fc1a8bdf5b0258035b4eb8dc69b75efac4","ci/android-install-sdk.sh":"3490432022c5c8f5a115c084f7a9aca1626f96c0c87ffb62019228c4346b47e4","ci/android-sysimage.sh":"ebf4e5daa1f0fe1b2092b79f0f3f161c4c4275cb744e52352c4d81ab451e4c5a","ci/benchmark.sh":"b61d19ef6b90deba8fb79dee74c8b062d94844676293da346da87bb78a9a49a4","ci/deploy_and_run_on_ios_simulator.rs":"ec8ecf82d92072676aa47f0d1a3d021b60a7ae3531153ef12d2ff4541fc294dc","ci/docker/aarch64-linux-android/Dockerfile":"ace2e7d33c87bc0f6d3962a4a3408c04557646f7f51ab99cfbf574906796b016","ci/docker/aarch64-unknown-linux-gnu/Dockerfile":"da88c0d50f16dc08448c7fdf1fa5ed2cbe576acf9e7dd85b5b818621b2a8c702","ci/docker/arm-linux-androideabi/Dockerfile":"370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc2286","ci/docker/arm-unknown-linux-gnueabi/Dockerfile":"bb5f8ae890707c128652290ffc544447643bf12037ddd73c6ad6989f848cb380","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"1afaefcbc05b740859acd4e067bc92439be6bcbe8f2e9678474fb434bcd398d9","ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile":"8282ea707a94109beed47a57574755e2d58401735904a03f85fb64c578c53b4f","ci/docker/i586-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b97755d0196c63317f7abb","ci/docker/i686-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b97755d0196c63317f7abb","ci/docker/mips-unknown-linux-gnu/Dockerfile":"b2ebc25797612c4f8395fe9d407725156044955bfbcf442036b7f55b43a5f9da","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"b0c1692ac65bc56dd30494b1993d8e929c48cc9c4b92029b7c7592af6d4f9220","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"4e9249c179300138141d0b2b7401b11897f64aed69f541f078c1db4594df2827","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"3164c52b0dcbb01afa78292b15b5c43503ccf0491cf6eb801ec2bf22ae274e52","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"786f799d0b56eb54d7b6c4b00e1aed4ce81776e14e44767e083c89d014b72004","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"e8bc363837cd9c2d8b22402acb8c1c329efc11ba5d12170603d2fe2eae9da059","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"47998d45b781d797b9e6085ebe898d90de0c952b54537a8db4e8d7503eb032d9","ci/docker/s390x-unknown-linux-gnu/Dockerfile":"93fb44df3d7fd31ead158570667c97b5076a05c3d968af4a84bc13819a8f2db8","ci/docker/sparc64-unknown-linux-gnu/Dockerfile":"da1c39a3ff1fe22e41395fa7c8934e90b4c1788e551b9aec6e38bfd94effc437","ci/docker/thumbv7neon-linux-androideabi/Dockerfile":"c2decd5591bd7a09378901bef629cd944acf052eb55e4f35b79eb9cb4d62246a","ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile":"51955a8bf3c4d440f47382af6f5426ebff94ab01a04da36175babda9a057740f","ci/docker/wasm32-unknown-unknown/Dockerfile":"3e5f294bc1e004aa599086c2af49d6f3e7459fa250f5fbdd60cf67d53db78758","ci/docker/x86_64-linux-android/Dockerfile":"685040273cf350d5509e580ac451555efa19790c8723ca2af066adadc6880ad2","ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile":"44b6203d9290bfdc53d81219f0937e1110847a23dd982ec8c4de388354f01536","ci/docker/x86_64-unknown-linux-gnu/Dockerfile":"7f4e3ca5fa288ea70edb4d1f75309708cd30b192e2e4444e61c4d5b3b58f89cf","ci/dox.sh":"434e9611c52e389312d2b03564adf09429f10cc76fe66a8644adb104903b87b7","ci/linux-s390x.sh":"d6b732d7795b4ba131326aff893bca6228a7d2eb0e9402f135705413dbbe0dce","ci/linux-sparc64.sh":"c92966838b1ab7ad3b7a344833ee726aba6b647cf5952e56f0ad1ba420b13325","ci/lld-shim.rs":"3d7f71ec23a49e2b67f694a0168786f9a954dda15f5a138815d966643fd3fcc3","ci/max_line_width.sh":"0a1518bba4c9ecaa55694cb2e9930d0e19c265baabf73143f17f9cf285aaa5bb","ci/run-docker.sh":"92e036390ad9b0d16f109579df1b5ced2e72e9afea40c7d011400ebd3a2a90de","ci/run.sh":"41dd6a60efaaeae9661a01370cce98b631f78392859a0cf68c946c0a16edf5f7","ci/run_examples.sh":"d1a23c6c35374a0678ba5114b9b8fefd8be0a79e774872a8bf0898d1baca18d0","ci/runtest-android.rs":"145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c","ci/setup_benchmarks.sh":"fae3960023f6f3d1388cd2ad22fdbab4b075f1f29dd4292d7994a20783beb6cf","ci/test-runner-linux":"c8aa6025cff5306f4f31d0c61dc5f9d4dd5a1d189ab613ef8d4c367c694d9ccd","contributing.md":"2cc8c9c560ae17867e69b06d09b758dbf7bc39eb774ada50a743724b10acc0a2","perf-guide/.gitignore":"fe82c7da551079d832cf74200b0b359b4df9828cb4a0416fa7384f07a2ae6a13","perf-guide/book.toml":"115a98284126c6b180178b44713314cc494f08a71662ee2ce15cf67f17a51064","perf-guide/src/SUMMARY.md":"3e03bffc991fdc2050f3d51842d72d9d21ea6abab56a3baf3b2d5973a78b89e1","perf-guide/src/ascii.css":"29afb08833b2fe2250f0412e1fa1161a2432a0820a14953c87124407417c741a","perf-guide/src/bound_checks.md":"5e4991ff58a183ef0cd9fdc1feb4cd12d083b44bdf87393bbb0927808ef3ce7d","perf-guide/src/float-math/approx.md":"8c09032fa2d795a0c5db1775826c850d28eb2627846d0965c60ee72de63735ad","perf-guide/src/float-math/fma.md":"311076ba4b741d604a82e74b83a8d7e8c318fcbd7f64c4392d1cf5af95c60243","perf-guide/src/float-math/fp.md":"04153e775ab6e4f0d7837bcc515230d327b04edfa34c84ce9c9e10ebaeef2be8","perf-guide/src/float-math/svml.md":"0798873b8eedaeda5fed62dc91645b57c20775a02d3cd74d8bd06958f1516506","perf-guide/src/introduction.md":"9f5a19e9e6751f25d2daad39891a0cc600974527ec4c8305843f9618910671bd","perf-guide/src/prof/linux.md":"447731eb5de7d69166728fdbc5ecb0c0c9db678ea493b45a592d67dd002184c0","perf-guide/src/prof/mca.md":"f56d54f3d20e7aa4d32052186e8237b03d65971eb5d112802b442570ff11d344","perf-guide/src/prof/profiling.md":"8a650c0fd6ede0964789bb6577557eeef1d8226a896788602ce61528e260e43c","perf-guide/src/target-feature/attribute.md":"615f88dca0a707b6c416fa605435dd6e1fb5361cc639429cbf68cd87624bd78b","perf-guide/src/target-feature/features.md":"17077760ff24c006b606dd21889c53d87228f4311f3ba3a574f9afdeacd86165","perf-guide/src/target-feature/inlining.md":"7ed1d7068d8173a00d84c16cfe5871cd68b9f04f8d0cca2d01ebc84957ebf2f6","perf-guide/src/target-feature/practice.md":"c4b371842e0086df178488fec97f20def8f0c62ee588bcd25fd948b9b1fa227e","perf-guide/src/target-feature/runtime.md":"835425f5ee597fb3e51d36e725a81ebee29f4561231d19563cd4da81dbb1cfcb","perf-guide/src/target-feature/rustflags.md":"ab49712e9293a65d74d540ba4784fcb57ff1119ec05a575d895c071f1a620f64","perf-guide/src/vert-hor-ops.md":"c6211c0ee91e60552ec592d89d9d957eedc21dee3cbd89e1ad6765ea06a27471","rustfmt.toml":"de6101d0670bad65fb3b337d56957d2a024e017e5ab146ec784d77312daaf8ff","src/api.rs":"f6e92f056565e6fd93f98829a408aee9e790251e0cbd8a8bc30c8662b4d6fabb","src/api/bit_manip.rs":"c47a4d0f7451f7e35d07715e4f39a472e07457fd456fdb726864a4f6887252a3","src/api/bitmask.rs":"6d2beefd62ee5d9c8eb060bee6abc641616bf828c99f82abf97b21bf004e894b","src/api/cast.rs":"03b94a3d316ac7b7be7068810044911e965e889a0ace7bae762749ca74a92747","src/api/cast/macros.rs":"b0a14d0c83ad2ebb7a275180f6d9e3f2bc312ba57a7d3d6c39fad4e0f20f9408","src/api/cast/v128.rs":"2107ea6a426a0fe37a0aa6a03a579ff0bdeb5a1599ea76e2d81734a82f41276d","src/api/cast/v16.rs":"d785cf93b8e61200c9ae1c32b9f5e9d9518e87c261c56bcaf92f2e47b0009eb4","src/api/cast/v256.rs":"b81fcfd367a5de532d922dedf18579e53666facef7957c0e1bc827825e500ae6","src/api/cast/v32.rs":"2aac9ec0a67a97328ba908b13a1ff98da3dcd7781910d592d31f9207cbd9a7d2","src/api/cast/v512.rs":"33b33de818f8d4eccc982bc2f3951a8b3d03e9762ec02789b3df82e3f5ed3fc3","src/api/cast/v64.rs":"ec878917d52a8c952633251b3a938a2cbe0a63fee6d12c15840d9f1343d1f394","src/api/cmp.rs":"357c3a2a09c6d4611c32dd7fa95be2fae933d513e229026ec9b44451a77b884e","src/api/cmp/eq.rs":"60f70f355bae4cb5b17db53204cacc3890f70670611c17df638d4c04f7cc8075","src/api/cmp/ord.rs":"589f7234761c294fa5df8f525bc4acd5a47cdb602207d524a0d4e19804cd9695","src/api/cmp/partial_eq.rs":"3ed23d2a930b0f9750c3a5309da766b03dc4f9c4d375b42ad3c50fe732693d15","src/api/cmp/partial_ord.rs":"e16b11805c94048acd058c93994b5bc74bb187f8d7e3b86a87df60e1601467f9","src/api/cmp/vertical.rs":"de3d62f38eba817299aa16f1e1939954c9a447e316509397465c2830852ba053","src/api/default.rs":"67bf21c134127d12a7028c8b88a57f0ceee8ccbd74976da8ca74eb9f16a174d5","src/api/fmt.rs":"67fb804bb86b6cd77cf8cd492b5733ce437071b66fe3297278b8a6552c325dda","src/api/fmt/binary.rs":"35cb5c266197d6224d598fb3d286e5fe48ef0c01ed356c2ff6fe9ba946f96a92","src/api/fmt/debug.rs":"aa18eea443bf353fea3db8b1a025132bbcaf91e747ecfa43b8d9fce9af395a0c","src/api/fmt/lower_hex.rs":"69d5be366631af309f214e8031c8c20267fcc27a695eac6f45c6bc1df72a67e6","src/api/fmt/octal.rs":"9eb11ba3d990213f3c7f1ec25edba7ce997cb1320e16d308c83498ba6b9bfbd9","src/api/fmt/upper_hex.rs":"a4637d085b7bb20e759ce58e08435b510a563ba3dd468af2b03560fdc5511562","src/api/from.rs":"2e599d8329cb05eaf06224cc441355c4b7b51254fc19256619333be8c149d444","src/api/from/from_array.rs":"dd3fc64fb17d6184bb60343f8da26a05edf0e5f3c14caf55d49fa15e21d948dc","src/api/from/from_vector.rs":"9764371aa9e6005aace74dea14f59e5611a095b7cf42707940924749282c52f0","src/api/hash.rs":"5076ece87969592c876486f5b1ea8affbeaec379d1a14a30859e0aa5592019de","src/api/into_bits.rs":"82297f0697d67b5a015e904e7e6e7b2a7066ba825bc54b94b4ff3e22d7a1eefb","src/api/into_bits/arch_specific.rs":"4acab22af90112072a2608fafc66fccf18cbf2e641b72af28404d30833cfe5c6","src/api/into_bits/macros.rs":"d762406de25aedff88d460dec7a80dc8e825a2a419d53218ce007efa6a1d3e04","src/api/into_bits/v128.rs":"3c502b9ce85bfcc727d6f053d49030b0ba9f46bd8e9fa5aa109382a2033f9f87","src/api/into_bits/v16.rs":"f4f4f61ba88aa51b158ec56ca3dce234349aea0daf2b3029a14ab5125d1e41e5","src/api/into_bits/v256.rs":"c24c3676707a0feb868dabe00766d74deab176794f905f79056337198c7cf790","src/api/into_bits/v32.rs":"905ba683d342fa32f4202b80bb46530807bd0a5b588f6c2e8c9f475223c47775","src/api/into_bits/v512.rs":"7cd89005215a9326eed8a742125dcbf981cba1aca72a313478eabf3df71b1160","src/api/into_bits/v64.rs":"d6238022ccff7b92e55b3f6017fc269acb6f36330a6d7e8fb389853a0f1b6478","src/api/math.rs":"8b2a2fc651917a850539f993aa0b9e5bf4da67b11685285b8de8cdca311719ec","src/api/math/float.rs":"61d2794d68262a1090ae473bd30793b5f65cf732f32a6694a3af2ce5d9225616","src/api/math/float/abs.rs":"5b6b2701e2e11135b7ce58a05052ea8120e10e4702c95d046b9d21b827b26bf8","src/api/math/float/consts.rs":"78acba000d3fa527111300b6327c1932de9c4c1e02d4174e1a5615c01463d38c","src/api/math/float/cos.rs":"4c2dd7173728ef189314f1576c9486e03be21b7da98843b2f9011282a7979e31","src/api/math/float/exp.rs":"7c6d5f1e304f498a01cfa23b92380c815d7da0ad94eae3483783bc377d287eef","src/api/math/float/ln.rs":"54c7583f3df793b39ff57534fade27b41bb992439e5dc178252f5ca3190a3e54","src/api/math/float/mul_add.rs":"62cac77660d20159276d4c9ef066eb90c81cbddb808e8e157182c607625ad2eb","src/api/math/float/mul_adde.rs":"bae056ee9f3a70df39ec3c3b2f6437c65303888a7b843ef1a5bcf1f5aca0e602","src/api/math/float/powf.rs":"9ddb938984b36d39d82a82f862f80df8f7fb013f1d222d45698d41d88472f568","src/api/math/float/recpre.rs":"589225794ff1dbf31158dff660e6d4509ecc8befbb57c633900dea5ac0b840d6","src/api/math/float/rsqrte.rs":"a32abdcc318d7ccc8448231f54d75b884b7cbeb03a7d595713ab6243036f4dbf","src/api/math/float/sin.rs":"cbd3622b7df74f19691743001c8cf747a201f8977ad90542fee915f37dcd1e49","src/api/math/float/sqrt.rs":"0c66d5d63fb08e4d99c6b82a8828e41173aff1ac9fa1a2764a11fac217ccf2ac","src/api/math/float/sqrte.rs":"731e1c9f321b662accdd27dacb3aac2e8043b7aecb2f2161dde733bd9f025362","src/api/minimal.rs":"1f22bcc528555444e76de569ec0ae2029b9ae9d04805efeafa93369c8098036b","src/api/minimal/iuf.rs":"819cff26d3e196f807645bcc1d79eb27d9f175edb89910f2274d52a1e913cd11","src/api/minimal/mask.rs":"0cae10ae1fc65f5070e686c0c79bfba27b86b33d6c399367bd4848fb367dcec4","src/api/minimal/ptr.rs":"f65ebf21866a863485344432d9a7a9b7418f7fad5fdf841a4e2fa56ec0766ad0","src/api/ops.rs":"3e273b277a0f3019d42c3c59ca94a5afd4885d5ae6d2182e5089bbeec9de42ee","src/api/ops/scalar_arithmetic.rs":"d2d5ad897a59dd0787544f927e0e7ca4072c3e58b0f4a2324083312b0d5a21d7","src/api/ops/scalar_bitwise.rs":"482204e459ca6be79568e1c9f70adbe2d2151412ddf122fb2161be8ebb51c40c","src/api/ops/scalar_mask_bitwise.rs":"c250f52042e37b22d57256c80d4604104cfd2fbe2a2e127c676267270ca5d350","src/api/ops/scalar_shifts.rs":"987f8fdebeedc16e3d77c1b732e7826ef70633c541d16dfa290845d5c6289150","src/api/ops/vector_arithmetic.rs":"ddca15d09ddeef502c2ed66117a62300ca65d87e959e8b622d767bdf1c307910","src/api/ops/vector_bitwise.rs":"b3968f7005b649edcc22a54e2379b14d5ee19045f2e784029805781ae043b5ee","src/api/ops/vector_float_min_max.rs":"76bf8cb607e2c442923c1da1061a6b80d742d607408033c2a3761161114cf2a0","src/api/ops/vector_int_min_max.rs":"a378789c6ff9b32a51fbd0a97ffd36ed102cd1fe6a067d2b02017c1df342def6","src/api/ops/vector_mask_bitwise.rs":"5052d18517d765415d40327e6e8e55a312daaca0a5e2aec959bfa54b1675f9c8","src/api/ops/vector_neg.rs":"5c62f6b0221983cdbd23cd0a3af3672e6ba1255f0dfe8b19aae6fbd6503e231b","src/api/ops/vector_rotates.rs":"03cbe8a400fd7c688e4ee771a990a6754f2031b1a59b19ae81158b21471167e5","src/api/ops/vector_shifts.rs":"9bf69d0087268f61009e39aea52e03a90f378910206b6a28e8393178b6a5d0e0","src/api/ptr.rs":"8a793251bed6130dcfb2f1519ceaa18b751bbb15875928d0fb6deb5a5e07523a","src/api/ptr/gather_scatter.rs":"138b02b0fa1fdd785b95fc7048488be7e3ef277e0bc6ac5affb26af6a11d41a6","src/api/reductions.rs":"ae5baca81352ecd44526d6c30c0a1feeda475ec73ddd3c3ec6b14e944e5448ee","src/api/reductions/bitwise.rs":"8bf910ae226188bd15fc7e125f058cd2566b6186fcd0cd8fd020f352c39ce139","src/api/reductions/float_arithmetic.rs":"3997125f87c7bac07fffda3a1d814e0e6c77ca83099546a9e2fb8dc92231129f","src/api/reductions/integer_arithmetic.rs":"47471da1c5f859489680bb5d34ced3d3aa20081c16053a3af121a4496fcb57bf","src/api/reductions/mask.rs":"db83327a950e33a317f37fd33ca4e20c347fb415975ec024f3e23da8509425af","src/api/reductions/min_max.rs":"d40ccad10220ae5982785015bef92e4b0749583c2b060cad0aa4f92d99491c3b","src/api/select.rs":"a98e2ccf9fc6bdeed32d337c8675bc96c2fbe2cc34fbf149ad6047fb8e749774","src/api/shuffle.rs":"71da1f2d9ab082d70cb3ed98a43649f2e9306d69c51edc861b984b907cce018d","src/api/shuffle1_dyn.rs":"bfea5a91905b31444e9ef7ca6eddb7a9606b7e22d3f71bb842eb2795a0346620","src/api/slice.rs":"ee87484e8af329547b9a5d4f2a69e8bed6ea10bbd96270d706083843d4eea2ac","src/api/slice/from_slice.rs":"53691dc9958dec4180004a42d140552b405e8cd875caa282e89af378dd63c8bc","src/api/slice/write_to_slice.rs":"3dd2e511af43dc6fa911dd0b12f6f00323e0acd1202a01365db400557d52a89b","src/api/swap_bytes.rs":"4a6792a2e49a77475e1b237592b4b2804dbddb79c474331acd0dd71b36934259","src/codegen.rs":"a29d38fa0a85eaf787fb49989e625bf64effd5f39c126fbb2a24be206d2a3917","src/codegen/bit_manip.rs":"17ecebcff1f080e712fea5eb51602a73f4201ed56a198220342c8eb55bb92692","src/codegen/llvm.rs":"e05be80c33ed8c65a03abd5bd4a9b748c6903ca1583036968360e187f98d5868","src/codegen/math.rs":"35f96e37a78fcf0cdb02146b7f27a45108fe06a37fc2a54d8851ce131a326178","src/codegen/math/float.rs":"dd86c0449e576c83b719700962ac017c332987fac08d91f2b7a2b1b883598170","src/codegen/math/float/abs.rs":"f56e2b4b8055ea861c1f5cbc6b6e1d8e7e5af163b62c13574ddee4e09513bfbc","src/codegen/math/float/cos.rs":"ef3b511a24d23045b310315e80348a9b7fedb576fc2de52d74290616a0abeb2a","src/codegen/math/float/cos_pi.rs":"4e7631a5d73dac21531e09ef1802d1180f8997509c2c8fa9f67f322194263a97","src/codegen/math/float/exp.rs":"61b691598c41b5622f24e4320c1bdd08701e612a516438bdddcc728fc3405c8c","src/codegen/math/float/ln.rs":"46b718b1ba8c9d99e1ad40f53d20dfde08a3063ca7bd2a9fdd6698e060da687e","src/codegen/math/float/macros.rs":"dd42135fff13f9aca4fd3a1a4e14c7e6c31aadc6d817d63b0d2fb9e62e062744","src/codegen/math/float/mul_add.rs":"a37bf764345d4b1714f97e83897b7cf0855fc2811704bcbc0012db91825339e1","src/codegen/math/float/mul_adde.rs":"c75702bfcb361de45964a93caf959a695ef2376bd069227600b8c6872665c755","src/codegen/math/float/powf.rs":"642346e982bc4c39203de0864d2149c4179cd7b21cf67a2951687932b4675872","src/codegen/math/float/sin.rs":"9d68164c90cdca6a85155040cdac42e27342ebe0b925273ef1593df721af4258","src/codegen/math/float/sin_cos_pi.rs":"9be02ad48585a1e8d99129382fbffbaed47852f15459256a708850b6b7a75405","src/codegen/math/float/sin_pi.rs":"9890347905b4d4a3c7341c3eb06406e46e60582bcf6960688bd727e5dadc6c57","src/codegen/math/float/sqrt.rs":"e3c60dcfb0c6d2fc62adabcc931b2d4040b83cab294dea36443fb4b89eb79e34","src/codegen/math/float/sqrte.rs":"f0f4ef9eb475ae41bcc7ec6a95ad744ba6b36925faa8b2c2814004396d196b63","src/codegen/pointer_sized_int.rs":"a70697169c28218b56fd2e8d5353f2e00671d1150d0c8cef77d613bdfacd84cb","src/codegen/reductions.rs":"645e2514746d01387ddd07f0aa4ffd8430cc9ab428d4fb13773ea319fa25dd95","src/codegen/reductions/mask.rs":"8f1afe6aabf096a3278e1fc3a30f736e04aa8b9ce96373cee22162d18cfe2702","src/codegen/reductions/mask/aarch64.rs":"cba6e17603d39795dcfe8339b6b7d8714c3e162a1f0a635979f037aa24fe4206","src/codegen/reductions/mask/arm.rs":"9447904818aa2c7c25d0963eead452a639a11ca7dbd6d21eedbfcaade07a0f33","src/codegen/reductions/mask/fallback.rs":"7a0ef9f7fd03ae318b495b95e121350cd61caffc5cc6ee17fabf130d5d933453","src/codegen/reductions/mask/fallback_impl.rs":"76547f396e55ef403327c77c314cf8db8c7a5c9b9819bfb925abeacf130249e5","src/codegen/reductions/mask/x86.rs":"4c0457b6276f9809223590092a4c77e73812330326cdabd28df06820de10a310","src/codegen/reductions/mask/x86/avx.rs":"b4913d87844c522903641cbbf10db4551addb1ce5e9e78278e21612fa65c733b","src/codegen/reductions/mask/x86/avx2.rs":"677aed3f056285285daa3adff8bc65e739630b4424defa6d9665e160f027507e","src/codegen/reductions/mask/x86/sse.rs":"5a827c6f8e1074e324f6e4c778942badb6c09d747a7142de01cadec1240b3428","src/codegen/reductions/mask/x86/sse2.rs":"bc38e6c31cb4b3d62147eba6cac264e519e2a48e0f7ce9010cfa9ef0cf0ec9fd","src/codegen/shuffle.rs":"99a0b52c2470097b028af134221099baba383446a01c7dc3ae560209880bcdb7","src/codegen/shuffle1_dyn.rs":"abbc95305dad815ab2ded3e8357791bcff080414668b55a4d397558a1d202d01","src/codegen/swap_bytes.rs":"1d6cdc716eadddc92b4fd506b2445a821caa8dc00860447de09d7ebd69c2087f","src/codegen/v128.rs":"94226b31ec403d18d9d2fe06713f147c9c79e9b5f9105089088266313f843185","src/codegen/v16.rs":"ddec4ffb66b6f7aaffb9a1780c5ddba82557abd74f45073d335047e04cf74924","src/codegen/v256.rs":"6b63917f0444118d6b1595bff2045e59b97c4d24012bd575f69f1f0efc5a0241","src/codegen/v32.rs":"3477b3c5540aed86e61e2f5807dd31db947413cec9181c587d93ed6ec74f0eba","src/codegen/v512.rs":"5854f99d3aabc4cd42b28a20d9ce447756dc2ba024a409a69b6a8ae1f1842fc5","src/codegen/v64.rs":"e9e89caebfe63d10c0cbca61e4dfdba3b7e02ee0989170f80beed23237ddd950","src/codegen/vPtr.rs":"711c753a08d53a2879c4fb87a0762c46ce4e34c22f0ca88d2e4c557a0f679969","src/codegen/vSize.rs":"eeee9858749aa82142b27bc120d1989bb74a6b82e1e4efbbeaccc9634dc9acfc","src/lib.rs":"2924d414fe7d32bb5f0bb92596a5af654f934d92f81dc1fd9b1a6c580388e5bd","src/masks.rs":"be05e923ac58fe6eb61311561b5583cd306574f206dc09fe8e3c7de3dd0c1433","src/sealed.rs":"ae7fdeaf5d84cd7710ed730ca72ca7eaba93df6cb0acb183e5c0a7327acf197f","src/testing.rs":"1d3a7862ef625e235a5734ad7204e68d350f902c0695182b1f08a0552432416e","src/testing/macros.rs":"6378856d7a40ba5ec5c7c0dad6327d79f0c77266921c24296d10aed6c68e9b98","src/testing/utils.rs":"5ec6a47b836f364ec6dede19750a19eaac704162327d03041eb0f007d5f8d75c","src/v128.rs":"16cf9a8e7156b899ee9b9cd3f2dba9d13ec63289bea8c3ee9ae2e43ad9510288","src/v16.rs":"cb6465cf1e00bf530183af1819b9fe3d7eec978f8765d5e85d9b58a39a4b4045","src/v256.rs":"fe235017da18c7f3c361831c60e3173ad304d8ea1e95d64ebebc79da2d708511","src/v32.rs":"145d347855bac59b2de6508f9e594654e6c330423af9edc0e2ac8f4d1abdf45e","src/v512.rs":"f372f277f3e62eb5c945bb1c460333fdb17b6974fcc876633788ff53bded9599","src/v64.rs":"0b8079881b71575e3414be0b7f8f7eaba65281ba6732f2b2f61f73e95b6f48f7","src/vPtr.rs":"8b3e433d487180bb4304ff71245ecad90f0010f43e139a72027b672abe58facc","src/vSize.rs":"eda5aa020706cbf94d15bada41a0c2a35fc8f3f37cb7c2cd6f34d201399a495e","tests/endianness.rs":"7db22078f31fe1421fc2d21f2e6b9df5eb0bdc99c10f6985d3a74c0df8f205dc"},"package":null} +\ No newline at end of file ++{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"d56de6531d3c4880e3aada85ac8e6d7388e5d781871e181cb8ade2a746d5d5f5","Cargo.toml":"b6f063e65c1f8d71c51204444d4e93cd514cb310dedfd1e85b731c1acc63ab4a","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"49d01e49a33393af64fa6c813b6a724f68a4d1abfbedcb96413651ed105aa820","bors.toml":"dee881dc69b9b7834e4eba5d95c3ed5a416d4628815a167d6a22d4cb4fb064b8","build.rs":"9d7f69238f5dfefa3c49744159c2f484feb4c32c9aefe79696ebe97a89b2957f","ci/all.sh":"2ae6b2445b4db83833e40b37efd0016c6b9879ee988b9b3ef94db5439a3e1606","ci/android-install-ndk.sh":"0f1746108cc30bf9b9ba45bcde7b19fc1a8bdf5b0258035b4eb8dc69b75efac4","ci/android-install-sdk.sh":"3490432022c5c8f5a115c084f7a9aca1626f96c0c87ffb62019228c4346b47e4","ci/android-sysimage.sh":"ebf4e5daa1f0fe1b2092b79f0f3f161c4c4275cb744e52352c4d81ab451e4c5a","ci/benchmark.sh":"b61d19ef6b90deba8fb79dee74c8b062d94844676293da346da87bb78a9a49a4","ci/deploy_and_run_on_ios_simulator.rs":"ec8ecf82d92072676aa47f0d1a3d021b60a7ae3531153ef12d2ff4541fc294dc","ci/docker/aarch64-linux-android/Dockerfile":"ace2e7d33c87bc0f6d3962a4a3408c04557646f7f51ab99cfbf574906796b016","ci/docker/aarch64-unknown-linux-gnu/Dockerfile":"da88c0d50f16dc08448c7fdf1fa5ed2cbe576acf9e7dd85b5b818621b2a8c702","ci/docker/arm-linux-androideabi/Dockerfile":"370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc2286","ci/docker/arm-unknown-linux-gnueabi/Dockerfile":"bb5f8ae890707c128652290ffc544447643bf12037ddd73c6ad6989f848cb380","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"1afaefcbc05b740859acd4e067bc92439be6bcbe8f2e9678474fb434bcd398d9","ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile":"8282ea707a94109beed47a57574755e2d58401735904a03f85fb64c578c53b4f","ci/docker/i586-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b97755d0196c63317f7abb","ci/docker/i686-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b97755d0196c63317f7abb","ci/docker/mips-unknown-linux-gnu/Dockerfile":"b2ebc25797612c4f8395fe9d407725156044955bfbcf442036b7f55b43a5f9da","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"b0c1692ac65bc56dd30494b1993d8e929c48cc9c4b92029b7c7592af6d4f9220","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"4e9249c179300138141d0b2b7401b11897f64aed69f541f078c1db4594df2827","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"3164c52b0dcbb01afa78292b15b5c43503ccf0491cf6eb801ec2bf22ae274e52","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"786f799d0b56eb54d7b6c4b00e1aed4ce81776e14e44767e083c89d014b72004","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"e8bc363837cd9c2d8b22402acb8c1c329efc11ba5d12170603d2fe2eae9da059","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"47998d45b781d797b9e6085ebe898d90de0c952b54537a8db4e8d7503eb032d9","ci/docker/s390x-unknown-linux-gnu/Dockerfile":"93fb44df3d7fd31ead158570667c97b5076a05c3d968af4a84bc13819a8f2db8","ci/docker/sparc64-unknown-linux-gnu/Dockerfile":"da1c39a3ff1fe22e41395fa7c8934e90b4c1788e551b9aec6e38bfd94effc437","ci/docker/thumbv7neon-linux-androideabi/Dockerfile":"c2decd5591bd7a09378901bef629cd944acf052eb55e4f35b79eb9cb4d62246a","ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile":"51955a8bf3c4d440f47382af6f5426ebff94ab01a04da36175babda9a057740f","ci/docker/wasm32-unknown-unknown/Dockerfile":"3e5f294bc1e004aa599086c2af49d6f3e7459fa250f5fbdd60cf67d53db78758","ci/docker/x86_64-linux-android/Dockerfile":"685040273cf350d5509e580ac451555efa19790c8723ca2af066adadc6880ad2","ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile":"44b6203d9290bfdc53d81219f0937e1110847a23dd982ec8c4de388354f01536","ci/docker/x86_64-unknown-linux-gnu/Dockerfile":"7f4e3ca5fa288ea70edb4d1f75309708cd30b192e2e4444e61c4d5b3b58f89cf","ci/dox.sh":"434e9611c52e389312d2b03564adf09429f10cc76fe66a8644adb104903b87b7","ci/linux-s390x.sh":"d6b732d7795b4ba131326aff893bca6228a7d2eb0e9402f135705413dbbe0dce","ci/linux-sparc64.sh":"c92966838b1ab7ad3b7a344833ee726aba6b647cf5952e56f0ad1ba420b13325","ci/lld-shim.rs":"3d7f71ec23a49e2b67f694a0168786f9a954dda15f5a138815d966643fd3fcc3","ci/max_line_width.sh":"0a1518bba4c9ecaa55694cb2e9930d0e19c265baabf73143f17f9cf285aaa5bb","ci/run-docker.sh":"92e036390ad9b0d16f109579df1b5ced2e72e9afea40c7d011400ebd3a2a90de","ci/run.sh":"41dd6a60efaaeae9661a01370cce98b631f78392859a0cf68c946c0a16edf5f7","ci/run_examples.sh":"d1a23c6c35374a0678ba5114b9b8fefd8be0a79e774872a8bf0898d1baca18d0","ci/runtest-android.rs":"145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c","ci/setup_benchmarks.sh":"fae3960023f6f3d1388cd2ad22fdbab4b075f1f29dd4292d7994a20783beb6cf","ci/test-runner-linux":"c8aa6025cff5306f4f31d0c61dc5f9d4dd5a1d189ab613ef8d4c367c694d9ccd","contributing.md":"2cc8c9c560ae17867e69b06d09b758dbf7bc39eb774ada50a743724b10acc0a2","perf-guide/.gitignore":"fe82c7da551079d832cf74200b0b359b4df9828cb4a0416fa7384f07a2ae6a13","perf-guide/book.toml":"115a98284126c6b180178b44713314cc494f08a71662ee2ce15cf67f17a51064","perf-guide/src/SUMMARY.md":"3e03bffc991fdc2050f3d51842d72d9d21ea6abab56a3baf3b2d5973a78b89e1","perf-guide/src/ascii.css":"29afb08833b2fe2250f0412e1fa1161a2432a0820a14953c87124407417c741a","perf-guide/src/bound_checks.md":"5e4991ff58a183ef0cd9fdc1feb4cd12d083b44bdf87393bbb0927808ef3ce7d","perf-guide/src/float-math/approx.md":"8c09032fa2d795a0c5db1775826c850d28eb2627846d0965c60ee72de63735ad","perf-guide/src/float-math/fma.md":"311076ba4b741d604a82e74b83a8d7e8c318fcbd7f64c4392d1cf5af95c60243","perf-guide/src/float-math/fp.md":"04153e775ab6e4f0d7837bcc515230d327b04edfa34c84ce9c9e10ebaeef2be8","perf-guide/src/float-math/svml.md":"0798873b8eedaeda5fed62dc91645b57c20775a02d3cd74d8bd06958f1516506","perf-guide/src/introduction.md":"9f5a19e9e6751f25d2daad39891a0cc600974527ec4c8305843f9618910671bd","perf-guide/src/prof/linux.md":"447731eb5de7d69166728fdbc5ecb0c0c9db678ea493b45a592d67dd002184c0","perf-guide/src/prof/mca.md":"f56d54f3d20e7aa4d32052186e8237b03d65971eb5d112802b442570ff11d344","perf-guide/src/prof/profiling.md":"8a650c0fd6ede0964789bb6577557eeef1d8226a896788602ce61528e260e43c","perf-guide/src/target-feature/attribute.md":"615f88dca0a707b6c416fa605435dd6e1fb5361cc639429cbf68cd87624bd78b","perf-guide/src/target-feature/features.md":"17077760ff24c006b606dd21889c53d87228f4311f3ba3a574f9afdeacd86165","perf-guide/src/target-feature/inlining.md":"7ed1d7068d8173a00d84c16cfe5871cd68b9f04f8d0cca2d01ebc84957ebf2f6","perf-guide/src/target-feature/practice.md":"c4b371842e0086df178488fec97f20def8f0c62ee588bcd25fd948b9b1fa227e","perf-guide/src/target-feature/runtime.md":"835425f5ee597fb3e51d36e725a81ebee29f4561231d19563cd4da81dbb1cfcb","perf-guide/src/target-feature/rustflags.md":"ab49712e9293a65d74d540ba4784fcb57ff1119ec05a575d895c071f1a620f64","perf-guide/src/vert-hor-ops.md":"c6211c0ee91e60552ec592d89d9d957eedc21dee3cbd89e1ad6765ea06a27471","rustfmt.toml":"de6101d0670bad65fb3b337d56957d2a024e017e5ab146ec784d77312daaf8ff","src/api.rs":"f6e92f056565e6fd93f98829a408aee9e790251e0cbd8a8bc30c8662b4d6fabb","src/api/bit_manip.rs":"c47a4d0f7451f7e35d07715e4f39a472e07457fd456fdb726864a4f6887252a3","src/api/bitmask.rs":"6d2beefd62ee5d9c8eb060bee6abc641616bf828c99f82abf97b21bf004e894b","src/api/cast.rs":"03b94a3d316ac7b7be7068810044911e965e889a0ace7bae762749ca74a92747","src/api/cast/macros.rs":"b0a14d0c83ad2ebb7a275180f6d9e3f2bc312ba57a7d3d6c39fad4e0f20f9408","src/api/cast/v128.rs":"2107ea6a426a0fe37a0aa6a03a579ff0bdeb5a1599ea76e2d81734a82f41276d","src/api/cast/v16.rs":"d785cf93b8e61200c9ae1c32b9f5e9d9518e87c261c56bcaf92f2e47b0009eb4","src/api/cast/v256.rs":"b81fcfd367a5de532d922dedf18579e53666facef7957c0e1bc827825e500ae6","src/api/cast/v32.rs":"2aac9ec0a67a97328ba908b13a1ff98da3dcd7781910d592d31f9207cbd9a7d2","src/api/cast/v512.rs":"33b33de818f8d4eccc982bc2f3951a8b3d03e9762ec02789b3df82e3f5ed3fc3","src/api/cast/v64.rs":"ec878917d52a8c952633251b3a938a2cbe0a63fee6d12c15840d9f1343d1f394","src/api/cmp.rs":"357c3a2a09c6d4611c32dd7fa95be2fae933d513e229026ec9b44451a77b884e","src/api/cmp/eq.rs":"60f70f355bae4cb5b17db53204cacc3890f70670611c17df638d4c04f7cc8075","src/api/cmp/ord.rs":"589f7234761c294fa5df8f525bc4acd5a47cdb602207d524a0d4e19804cd9695","src/api/cmp/partial_eq.rs":"3ed23d2a930b0f9750c3a5309da766b03dc4f9c4d375b42ad3c50fe732693d15","src/api/cmp/partial_ord.rs":"e16b11805c94048acd058c93994b5bc74bb187f8d7e3b86a87df60e1601467f9","src/api/cmp/vertical.rs":"de3d62f38eba817299aa16f1e1939954c9a447e316509397465c2830852ba053","src/api/default.rs":"67bf21c134127d12a7028c8b88a57f0ceee8ccbd74976da8ca74eb9f16a174d5","src/api/fmt.rs":"67fb804bb86b6cd77cf8cd492b5733ce437071b66fe3297278b8a6552c325dda","src/api/fmt/binary.rs":"35cb5c266197d6224d598fb3d286e5fe48ef0c01ed356c2ff6fe9ba946f96a92","src/api/fmt/debug.rs":"aa18eea443bf353fea3db8b1a025132bbcaf91e747ecfa43b8d9fce9af395a0c","src/api/fmt/lower_hex.rs":"69d5be366631af309f214e8031c8c20267fcc27a695eac6f45c6bc1df72a67e6","src/api/fmt/octal.rs":"9eb11ba3d990213f3c7f1ec25edba7ce997cb1320e16d308c83498ba6b9bfbd9","src/api/fmt/upper_hex.rs":"a4637d085b7bb20e759ce58e08435b510a563ba3dd468af2b03560fdc5511562","src/api/from.rs":"2e599d8329cb05eaf06224cc441355c4b7b51254fc19256619333be8c149d444","src/api/from/from_array.rs":"dd3fc64fb17d6184bb60343f8da26a05edf0e5f3c14caf55d49fa15e21d948dc","src/api/from/from_vector.rs":"9764371aa9e6005aace74dea14f59e5611a095b7cf42707940924749282c52f0","src/api/hash.rs":"5076ece87969592c876486f5b1ea8affbeaec379d1a14a30859e0aa5592019de","src/api/into_bits.rs":"82297f0697d67b5a015e904e7e6e7b2a7066ba825bc54b94b4ff3e22d7a1eefb","src/api/into_bits/arch_specific.rs":"4acab22af90112072a2608fafc66fccf18cbf2e641b72af28404d30833cfe5c6","src/api/into_bits/macros.rs":"d762406de25aedff88d460dec7a80dc8e825a2a419d53218ce007efa6a1d3e04","src/api/into_bits/v128.rs":"3c502b9ce85bfcc727d6f053d49030b0ba9f46bd8e9fa5aa109382a2033f9f87","src/api/into_bits/v16.rs":"f4f4f61ba88aa51b158ec56ca3dce234349aea0daf2b3029a14ab5125d1e41e5","src/api/into_bits/v256.rs":"c24c3676707a0feb868dabe00766d74deab176794f905f79056337198c7cf790","src/api/into_bits/v32.rs":"905ba683d342fa32f4202b80bb46530807bd0a5b588f6c2e8c9f475223c47775","src/api/into_bits/v512.rs":"7cd89005215a9326eed8a742125dcbf981cba1aca72a313478eabf3df71b1160","src/api/into_bits/v64.rs":"d6238022ccff7b92e55b3f6017fc269acb6f36330a6d7e8fb389853a0f1b6478","src/api/math.rs":"8b2a2fc651917a850539f993aa0b9e5bf4da67b11685285b8de8cdca311719ec","src/api/math/float.rs":"61d2794d68262a1090ae473bd30793b5f65cf732f32a6694a3af2ce5d9225616","src/api/math/float/abs.rs":"5b6b2701e2e11135b7ce58a05052ea8120e10e4702c95d046b9d21b827b26bf8","src/api/math/float/consts.rs":"78acba000d3fa527111300b6327c1932de9c4c1e02d4174e1a5615c01463d38c","src/api/math/float/cos.rs":"4c2dd7173728ef189314f1576c9486e03be21b7da98843b2f9011282a7979e31","src/api/math/float/exp.rs":"7c6d5f1e304f498a01cfa23b92380c815d7da0ad94eae3483783bc377d287eef","src/api/math/float/ln.rs":"54c7583f3df793b39ff57534fade27b41bb992439e5dc178252f5ca3190a3e54","src/api/math/float/mul_add.rs":"62cac77660d20159276d4c9ef066eb90c81cbddb808e8e157182c607625ad2eb","src/api/math/float/mul_adde.rs":"bae056ee9f3a70df39ec3c3b2f6437c65303888a7b843ef1a5bcf1f5aca0e602","src/api/math/float/powf.rs":"9ddb938984b36d39d82a82f862f80df8f7fb013f1d222d45698d41d88472f568","src/api/math/float/recpre.rs":"589225794ff1dbf31158dff660e6d4509ecc8befbb57c633900dea5ac0b840d6","src/api/math/float/rsqrte.rs":"a32abdcc318d7ccc8448231f54d75b884b7cbeb03a7d595713ab6243036f4dbf","src/api/math/float/sin.rs":"cbd3622b7df74f19691743001c8cf747a201f8977ad90542fee915f37dcd1e49","src/api/math/float/sqrt.rs":"0c66d5d63fb08e4d99c6b82a8828e41173aff1ac9fa1a2764a11fac217ccf2ac","src/api/math/float/sqrte.rs":"731e1c9f321b662accdd27dacb3aac2e8043b7aecb2f2161dde733bd9f025362","src/api/minimal.rs":"1f22bcc528555444e76de569ec0ae2029b9ae9d04805efeafa93369c8098036b","src/api/minimal/iuf.rs":"819cff26d3e196f807645bcc1d79eb27d9f175edb89910f2274d52a1e913cd11","src/api/minimal/mask.rs":"0cae10ae1fc65f5070e686c0c79bfba27b86b33d6c399367bd4848fb367dcec4","src/api/minimal/ptr.rs":"f65ebf21866a863485344432d9a7a9b7418f7fad5fdf841a4e2fa56ec0766ad0","src/api/ops.rs":"3e273b277a0f3019d42c3c59ca94a5afd4885d5ae6d2182e5089bbeec9de42ee","src/api/ops/scalar_arithmetic.rs":"d2d5ad897a59dd0787544f927e0e7ca4072c3e58b0f4a2324083312b0d5a21d7","src/api/ops/scalar_bitwise.rs":"482204e459ca6be79568e1c9f70adbe2d2151412ddf122fb2161be8ebb51c40c","src/api/ops/scalar_mask_bitwise.rs":"c250f52042e37b22d57256c80d4604104cfd2fbe2a2e127c676267270ca5d350","src/api/ops/scalar_shifts.rs":"987f8fdebeedc16e3d77c1b732e7826ef70633c541d16dfa290845d5c6289150","src/api/ops/vector_arithmetic.rs":"ddca15d09ddeef502c2ed66117a62300ca65d87e959e8b622d767bdf1c307910","src/api/ops/vector_bitwise.rs":"b3968f7005b649edcc22a54e2379b14d5ee19045f2e784029805781ae043b5ee","src/api/ops/vector_float_min_max.rs":"76bf8cb607e2c442923c1da1061a6b80d742d607408033c2a3761161114cf2a0","src/api/ops/vector_int_min_max.rs":"a378789c6ff9b32a51fbd0a97ffd36ed102cd1fe6a067d2b02017c1df342def6","src/api/ops/vector_mask_bitwise.rs":"5052d18517d765415d40327e6e8e55a312daaca0a5e2aec959bfa54b1675f9c8","src/api/ops/vector_neg.rs":"5c62f6b0221983cdbd23cd0a3af3672e6ba1255f0dfe8b19aae6fbd6503e231b","src/api/ops/vector_rotates.rs":"03cbe8a400fd7c688e4ee771a990a6754f2031b1a59b19ae81158b21471167e5","src/api/ops/vector_shifts.rs":"9bf69d0087268f61009e39aea52e03a90f378910206b6a28e8393178b6a5d0e0","src/api/ptr.rs":"8a793251bed6130dcfb2f1519ceaa18b751bbb15875928d0fb6deb5a5e07523a","src/api/ptr/gather_scatter.rs":"138b02b0fa1fdd785b95fc7048488be7e3ef277e0bc6ac5affb26af6a11d41a6","src/api/reductions.rs":"ae5baca81352ecd44526d6c30c0a1feeda475ec73ddd3c3ec6b14e944e5448ee","src/api/reductions/bitwise.rs":"8bf910ae226188bd15fc7e125f058cd2566b6186fcd0cd8fd020f352c39ce139","src/api/reductions/float_arithmetic.rs":"3997125f87c7bac07fffda3a1d814e0e6c77ca83099546a9e2fb8dc92231129f","src/api/reductions/integer_arithmetic.rs":"47471da1c5f859489680bb5d34ced3d3aa20081c16053a3af121a4496fcb57bf","src/api/reductions/mask.rs":"db83327a950e33a317f37fd33ca4e20c347fb415975ec024f3e23da8509425af","src/api/reductions/min_max.rs":"d40ccad10220ae5982785015bef92e4b0749583c2b060cad0aa4f92d99491c3b","src/api/select.rs":"a98e2ccf9fc6bdeed32d337c8675bc96c2fbe2cc34fbf149ad6047fb8e749774","src/api/shuffle.rs":"6d1e5970b9fc8555a667c2924151070dd21584e81da8a9668d6bfe16f4a0db82","src/api/shuffle1_dyn.rs":"bfea5a91905b31444e9ef7ca6eddb7a9606b7e22d3f71bb842eb2795a0346620","src/api/slice.rs":"ee87484e8af329547b9a5d4f2a69e8bed6ea10bbd96270d706083843d4eea2ac","src/api/slice/from_slice.rs":"53691dc9958dec4180004a42d140552b405e8cd875caa282e89af378dd63c8bc","src/api/slice/write_to_slice.rs":"3dd2e511af43dc6fa911dd0b12f6f00323e0acd1202a01365db400557d52a89b","src/api/swap_bytes.rs":"4a6792a2e49a77475e1b237592b4b2804dbddb79c474331acd0dd71b36934259","src/codegen.rs":"a29d38fa0a85eaf787fb49989e625bf64effd5f39c126fbb2a24be206d2a3917","src/codegen/bit_manip.rs":"17ecebcff1f080e712fea5eb51602a73f4201ed56a198220342c8eb55bb92692","src/codegen/llvm.rs":"5bc6751293f9f184cf23d5df448c7d58b58b799e41c7a91f8ca41a5ba56e64ec","src/codegen/math.rs":"35f96e37a78fcf0cdb02146b7f27a45108fe06a37fc2a54d8851ce131a326178","src/codegen/math/float.rs":"dd86c0449e576c83b719700962ac017c332987fac08d91f2b7a2b1b883598170","src/codegen/math/float/abs.rs":"f56e2b4b8055ea861c1f5cbc6b6e1d8e7e5af163b62c13574ddee4e09513bfbc","src/codegen/math/float/cos.rs":"ef3b511a24d23045b310315e80348a9b7fedb576fc2de52d74290616a0abeb2a","src/codegen/math/float/cos_pi.rs":"4e7631a5d73dac21531e09ef1802d1180f8997509c2c8fa9f67f322194263a97","src/codegen/math/float/exp.rs":"61b691598c41b5622f24e4320c1bdd08701e612a516438bdddcc728fc3405c8c","src/codegen/math/float/ln.rs":"46b718b1ba8c9d99e1ad40f53d20dfde08a3063ca7bd2a9fdd6698e060da687e","src/codegen/math/float/macros.rs":"dd42135fff13f9aca4fd3a1a4e14c7e6c31aadc6d817d63b0d2fb9e62e062744","src/codegen/math/float/mul_add.rs":"a37bf764345d4b1714f97e83897b7cf0855fc2811704bcbc0012db91825339e1","src/codegen/math/float/mul_adde.rs":"c75702bfcb361de45964a93caf959a695ef2376bd069227600b8c6872665c755","src/codegen/math/float/powf.rs":"642346e982bc4c39203de0864d2149c4179cd7b21cf67a2951687932b4675872","src/codegen/math/float/sin.rs":"9d68164c90cdca6a85155040cdac42e27342ebe0b925273ef1593df721af4258","src/codegen/math/float/sin_cos_pi.rs":"9be02ad48585a1e8d99129382fbffbaed47852f15459256a708850b6b7a75405","src/codegen/math/float/sin_pi.rs":"9890347905b4d4a3c7341c3eb06406e46e60582bcf6960688bd727e5dadc6c57","src/codegen/math/float/sqrt.rs":"e3c60dcfb0c6d2fc62adabcc931b2d4040b83cab294dea36443fb4b89eb79e34","src/codegen/math/float/sqrte.rs":"f0f4ef9eb475ae41bcc7ec6a95ad744ba6b36925faa8b2c2814004396d196b63","src/codegen/pointer_sized_int.rs":"a70697169c28218b56fd2e8d5353f2e00671d1150d0c8cef77d613bdfacd84cb","src/codegen/reductions.rs":"645e2514746d01387ddd07f0aa4ffd8430cc9ab428d4fb13773ea319fa25dd95","src/codegen/reductions/mask.rs":"8f1afe6aabf096a3278e1fc3a30f736e04aa8b9ce96373cee22162d18cfe2702","src/codegen/reductions/mask/aarch64.rs":"cba6e17603d39795dcfe8339b6b7d8714c3e162a1f0a635979f037aa24fe4206","src/codegen/reductions/mask/arm.rs":"9447904818aa2c7c25d0963eead452a639a11ca7dbd6d21eedbfcaade07a0f33","src/codegen/reductions/mask/fallback.rs":"7a0ef9f7fd03ae318b495b95e121350cd61caffc5cc6ee17fabf130d5d933453","src/codegen/reductions/mask/fallback_impl.rs":"76547f396e55ef403327c77c314cf8db8c7a5c9b9819bfb925abeacf130249e5","src/codegen/reductions/mask/x86.rs":"4c0457b6276f9809223590092a4c77e73812330326cdabd28df06820de10a310","src/codegen/reductions/mask/x86/avx.rs":"b4913d87844c522903641cbbf10db4551addb1ce5e9e78278e21612fa65c733b","src/codegen/reductions/mask/x86/avx2.rs":"677aed3f056285285daa3adff8bc65e739630b4424defa6d9665e160f027507e","src/codegen/reductions/mask/x86/sse.rs":"5a827c6f8e1074e324f6e4c778942badb6c09d747a7142de01cadec1240b3428","src/codegen/reductions/mask/x86/sse2.rs":"bc38e6c31cb4b3d62147eba6cac264e519e2a48e0f7ce9010cfa9ef0cf0ec9fd","src/codegen/shuffle.rs":"99a0b52c2470097b028af134221099baba383446a01c7dc3ae560209880bcdb7","src/codegen/shuffle1_dyn.rs":"abbc95305dad815ab2ded3e8357791bcff080414668b55a4d397558a1d202d01","src/codegen/swap_bytes.rs":"1d6cdc716eadddc92b4fd506b2445a821caa8dc00860447de09d7ebd69c2087f","src/codegen/v128.rs":"94226b31ec403d18d9d2fe06713f147c9c79e9b5f9105089088266313f843185","src/codegen/v16.rs":"ddec4ffb66b6f7aaffb9a1780c5ddba82557abd74f45073d335047e04cf74924","src/codegen/v256.rs":"6b63917f0444118d6b1595bff2045e59b97c4d24012bd575f69f1f0efc5a0241","src/codegen/v32.rs":"3477b3c5540aed86e61e2f5807dd31db947413cec9181c587d93ed6ec74f0eba","src/codegen/v512.rs":"5854f99d3aabc4cd42b28a20d9ce447756dc2ba024a409a69b6a8ae1f1842fc5","src/codegen/v64.rs":"e9e89caebfe63d10c0cbca61e4dfdba3b7e02ee0989170f80beed23237ddd950","src/codegen/vPtr.rs":"711c753a08d53a2879c4fb87a0762c46ce4e34c22f0ca88d2e4c557a0f679969","src/codegen/vSize.rs":"eeee9858749aa82142b27bc120d1989bb74a6b82e1e4efbbeaccc9634dc9acfc","src/lib.rs":"41c2a5c5fb42225ce9c6a267653870fdb8af30f933b3b8534d57a15fb96ebb39","src/masks.rs":"be05e923ac58fe6eb61311561b5583cd306574f206dc09fe8e3c7de3dd0c1433","src/sealed.rs":"ae7fdeaf5d84cd7710ed730ca72ca7eaba93df6cb0acb183e5c0a7327acf197f","src/testing.rs":"1d3a7862ef625e235a5734ad7204e68d350f902c0695182b1f08a0552432416e","src/testing/macros.rs":"6378856d7a40ba5ec5c7c0dad6327d79f0c77266921c24296d10aed6c68e9b98","src/testing/utils.rs":"5ec6a47b836f364ec6dede19750a19eaac704162327d03041eb0f007d5f8d75c","src/v128.rs":"16cf9a8e7156b899ee9b9cd3f2dba9d13ec63289bea8c3ee9ae2e43ad9510288","src/v16.rs":"cb6465cf1e00bf530183af1819b9fe3d7eec978f8765d5e85d9b58a39a4b4045","src/v256.rs":"fe235017da18c7f3c361831c60e3173ad304d8ea1e95d64ebebc79da2d708511","src/v32.rs":"145d347855bac59b2de6508f9e594654e6c330423af9edc0e2ac8f4d1abdf45e","src/v512.rs":"f372f277f3e62eb5c945bb1c460333fdb17b6974fcc876633788ff53bded9599","src/v64.rs":"0b8079881b71575e3414be0b7f8f7eaba65281ba6732f2b2f61f73e95b6f48f7","src/vPtr.rs":"8b3e433d487180bb4304ff71245ecad90f0010f43e139a72027b672abe58facc","src/vSize.rs":"eda5aa020706cbf94d15bada41a0c2a35fc8f3f37cb7c2cd6f34d201399a495e","tests/endianness.rs":"7db22078f31fe1421fc2d21f2e6b9df5eb0bdc99c10f6985d3a74c0df8f205dc"},"package":null} +\ No newline at end of file +diff --git a/third_party/rust/packed_simd/Cargo.toml b/third_party/rust/packed_simd/Cargo.toml +index 08b11881d413..1e52297b7ec8 100644 +--- a/third_party/rust/packed_simd/Cargo.toml ++++ b/third_party/rust/packed_simd/Cargo.toml +@@ -29,13 +29,13 @@ default = [] + into_bits = [] + libcore_neon = [] + ++[build-dependencies] ++rustc_version = "0.2" ++ + [dev-dependencies] + paste = "^0.1.3" + arrayvec = { version = "^0.5", default-features = false } + +-[build-dependencies] +-rustc_version = "0.2" +- + [target.'cfg(target_arch = "x86_64")'.dependencies.sleef-sys] + version = "0.1.2" + optional = true +diff --git a/third_party/rust/packed_simd/build.rs b/third_party/rust/packed_simd/build.rs +index 4a1b33620085..571139204e8f 100644 +--- a/third_party/rust/packed_simd/build.rs ++++ b/third_party/rust/packed_simd/build.rs +@@ -1,14 +1,34 @@ +-use rustc_version::{version, Version}; ++use rustc_version::{version_meta, Channel, Version}; + + fn main() { + println!("cargo:rustc-env=RUSTC_BOOTSTRAP=1"); + let target = std::env::var("TARGET") + .expect("TARGET environment variable not defined"); + if target.contains("neon") { + println!("cargo:rustc-cfg=libcore_neon"); + } +- let ver = version().unwrap(); +- if ver >= Version::parse("1.54.0-alpha").unwrap() { +- println!("cargo:rustc-cfg=use_const_generics"); ++ let ver_meta = version_meta().unwrap(); ++ let old_const_generics = ++ if ver_meta.semver < Version::parse("1.56.0-alpha").unwrap() { ++ true ++ } else if ver_meta.semver >= Version::parse("1.57.0-alpha").unwrap() { ++ false ++ } else { ++ match ver_meta.channel { ++ Channel::Stable | Channel::Beta => false, ++ Channel::Nightly | Channel::Dev ++ if ver_meta ++ .commit_date ++ .as_deref() ++ .map(|d| d < "2021-08-31") ++ .unwrap_or(false) => ++ { ++ true ++ } ++ _ => false, ++ } ++ }; ++ if old_const_generics { ++ println!("cargo:rustc-cfg=const_generics"); + } + } +diff --git a/third_party/rust/packed_simd/src/api/shuffle.rs b/third_party/rust/packed_simd/src/api/shuffle.rs +index e8de49923c58..3fe1ad5f2701 100644 +--- a/third_party/rust/packed_simd/src/api/shuffle.rs ++++ b/third_party/rust/packed_simd/src/api/shuffle.rs +@@ -74,7 +74,6 @@ + /// // At most 2 * the number of lanes in the input vector. + /// # } + /// ``` +-#[cfg(use_const_generics)] + #[macro_export] + macro_rules! shuffle { + ($vec0:expr, $vec1:expr, [$l0:expr, $l1:expr]) => {{ +@@ -187,118 +186,3 @@ macro_rules! shuffle { + } + }; + } +-#[cfg(not(use_const_generics))] +-#[macro_export] +-macro_rules! shuffle { +- ($vec0:expr, $vec1:expr, [$l0:expr, $l1:expr]) => {{ +- #[allow(unused_unsafe)] +- unsafe { +- $crate::Simd($crate::__shuffle_vector2( +- $vec0.0, +- $vec1.0, +- [$l0, $l1], +- )) +- } +- }}; +- ($vec0:expr, $vec1:expr, [$l0:expr, $l1:expr, $l2:expr, $l3:expr]) => {{ +- #[allow(unused_unsafe)] +- unsafe { +- $crate::Simd($crate::__shuffle_vector4( +- $vec0.0, +- $vec1.0, +- [$l0, $l1, $l2, $l3], +- )) +- } +- }}; +- ($vec0:expr, $vec1:expr, +- [$l0:expr, $l1:expr, $l2:expr, $l3:expr, +- $l4:expr, $l5:expr, $l6:expr, $l7:expr]) => {{ +- #[allow(unused_unsafe)] +- unsafe { +- $crate::Simd($crate::__shuffle_vector8( +- $vec0.0, +- $vec1.0, +- [$l0, $l1, $l2, $l3, $l4, $l5, $l6, $l7], +- )) +- } +- }}; +- ($vec0:expr, $vec1:expr, +- [$l0:expr, $l1:expr, $l2:expr, $l3:expr, +- $l4:expr, $l5:expr, $l6:expr, $l7:expr, +- $l8:expr, $l9:expr, $l10:expr, $l11:expr, +- $l12:expr, $l13:expr, $l14:expr, $l15:expr]) => {{ +- #[allow(unused_unsafe)] +- unsafe { +- $crate::Simd($crate::__shuffle_vector16( +- $vec0.0, +- $vec1.0, +- [ +- $l0, $l1, $l2, $l3, $l4, $l5, $l6, $l7, $l8, $l9, $l10, +- $l11, $l12, $l13, $l14, $l15, +- ], +- )) +- } +- }}; +- ($vec0:expr, $vec1:expr, +- [$l0:expr, $l1:expr, $l2:expr, $l3:expr, +- $l4:expr, $l5:expr, $l6:expr, $l7:expr, +- $l8:expr, $l9:expr, $l10:expr, $l11:expr, +- $l12:expr, $l13:expr, $l14:expr, $l15:expr, +- $l16:expr, $l17:expr, $l18:expr, $l19:expr, +- $l20:expr, $l21:expr, $l22:expr, $l23:expr, +- $l24:expr, $l25:expr, $l26:expr, $l27:expr, +- $l28:expr, $l29:expr, $l30:expr, $l31:expr]) => {{ +- #[allow(unused_unsafe)] +- unsafe { +- $crate::Simd($crate::__shuffle_vector32( +- $vec0.0, +- $vec1.0, +- [ +- $l0, $l1, $l2, $l3, $l4, $l5, $l6, $l7, $l8, $l9, $l10, +- $l11, $l12, $l13, $l14, $l15, $l16, $l17, $l18, $l19, +- $l20, $l21, $l22, $l23, $l24, $l25, $l26, $l27, $l28, +- $l29, $l30, $l31, +- ], +- )) +- } +- }}; +- ($vec0:expr, $vec1:expr, +- [$l0:expr, $l1:expr, $l2:expr, $l3:expr, +- $l4:expr, $l5:expr, $l6:expr, $l7:expr, +- $l8:expr, $l9:expr, $l10:expr, $l11:expr, +- $l12:expr, $l13:expr, $l14:expr, $l15:expr, +- $l16:expr, $l17:expr, $l18:expr, $l19:expr, +- $l20:expr, $l21:expr, $l22:expr, $l23:expr, +- $l24:expr, $l25:expr, $l26:expr, $l27:expr, +- $l28:expr, $l29:expr, $l30:expr, $l31:expr, +- $l32:expr, $l33:expr, $l34:expr, $l35:expr, +- $l36:expr, $l37:expr, $l38:expr, $l39:expr, +- $l40:expr, $l41:expr, $l42:expr, $l43:expr, +- $l44:expr, $l45:expr, $l46:expr, $l47:expr, +- $l48:expr, $l49:expr, $l50:expr, $l51:expr, +- $l52:expr, $l53:expr, $l54:expr, $l55:expr, +- $l56:expr, $l57:expr, $l58:expr, $l59:expr, +- $l60:expr, $l61:expr, $l62:expr, $l63:expr]) => {{ +- #[allow(unused_unsafe)] +- unsafe { +- $crate::Simd($crate::__shuffle_vector64( +- $vec0.0, +- $vec1.0, +- [ +- $l0, $l1, $l2, $l3, $l4, $l5, $l6, $l7, $l8, $l9, $l10, +- $l11, $l12, $l13, $l14, $l15, $l16, $l17, $l18, $l19, +- $l20, $l21, $l22, $l23, $l24, $l25, $l26, $l27, $l28, +- $l29, $l30, $l31, $l32, $l33, $l34, $l35, $l36, $l37, +- $l38, $l39, $l40, $l41, $l42, $l43, $l44, $l45, $l46, +- $l47, $l48, $l49, $l50, $l51, $l52, $l53, $l54, $l55, +- $l56, $l57, $l58, $l59, $l60, $l61, $l62, $l63, +- ], +- )) +- } +- }}; +- ($vec:expr, [$($l:expr),*]) => { +- match $vec { +- v => shuffle!(v, v, [$($l),*]) +- } +- }; +-} +diff --git a/third_party/rust/packed_simd/src/codegen/llvm.rs b/third_party/rust/packed_simd/src/codegen/llvm.rs +index 141cf0d2bc01..52b11a95b917 100644 +--- a/third_party/rust/packed_simd/src/codegen/llvm.rs ++++ b/third_party/rust/packed_simd/src/codegen/llvm.rs +@@ -6,137 +6,75 @@ use crate::sealed::Shuffle; + use crate::sealed::Simd; + + // Shuffle intrinsics: expanded in users' crates, therefore public. +-#[cfg(use_const_generics)] + extern "platform-intrinsic" { + pub fn simd_shuffle2(x: T, y: T, idx: [u32; 2]) -> U; + pub fn simd_shuffle4(x: T, y: T, idx: [u32; 4]) -> U; + pub fn simd_shuffle8(x: T, y: T, idx: [u32; 8]) -> U; + pub fn simd_shuffle16(x: T, y: T, idx: [u32; 16]) -> U; + pub fn simd_shuffle32(x: T, y: T, idx: [u32; 32]) -> U; + pub fn simd_shuffle64(x: T, y: T, idx: [u32; 64]) -> U; + } + +-#[cfg(use_const_generics)] + #[allow(clippy::missing_safety_doc)] + #[inline] + pub unsafe fn __shuffle_vector2(x: T, y: T) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 2], Output = U>, + { + simd_shuffle2(x, y, IDX) + } + +-#[cfg(use_const_generics)] + #[allow(clippy::missing_safety_doc)] + #[inline] + pub unsafe fn __shuffle_vector4(x: T, y: T) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 4], Output = U>, + { + simd_shuffle4(x, y, IDX) + } + +-#[cfg(use_const_generics)] + #[allow(clippy::missing_safety_doc)] + #[inline] + pub unsafe fn __shuffle_vector8(x: T, y: T) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 8], Output = U>, + { + simd_shuffle8(x, y, IDX) + } + +-#[cfg(use_const_generics)] + #[allow(clippy::missing_safety_doc)] + #[inline] + pub unsafe fn __shuffle_vector16(x: T, y: T) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 16], Output = U>, + { + simd_shuffle16(x, y, IDX) + } + +-#[cfg(use_const_generics)] + #[allow(clippy::missing_safety_doc)] + #[inline] + pub unsafe fn __shuffle_vector32(x: T, y: T) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 32], Output = U>, + { + simd_shuffle32(x, y, IDX) + } + +-#[cfg(use_const_generics)] + #[allow(clippy::missing_safety_doc)] + #[inline] + pub unsafe fn __shuffle_vector64(x: T, y: T) -> U + where + T: Simd, + ::Element: Shuffle<[u32; 64], Output = U>, + { + simd_shuffle64(x, y, IDX) + } + +-#[cfg(not(use_const_generics))] +-extern "platform-intrinsic" { +- // FIXME: Passing this intrinsics an `idx` array with an index that is +- // out-of-bounds will produce a monomorphization-time error. +- // https://github.com/rust-lang-nursery/packed_simd/issues/21 +- #[rustc_args_required_const(2)] +- pub fn simd_shuffle2(x: T, y: T, idx: [u32; 2]) -> U +- where +- T: Simd, +- ::Element: Shuffle<[u32; 2], Output = U>; +- +- #[rustc_args_required_const(2)] +- pub fn simd_shuffle4(x: T, y: T, idx: [u32; 4]) -> U +- where +- T: Simd, +- ::Element: Shuffle<[u32; 4], Output = U>; +- +- #[rustc_args_required_const(2)] +- pub fn simd_shuffle8(x: T, y: T, idx: [u32; 8]) -> U +- where +- T: Simd, +- ::Element: Shuffle<[u32; 8], Output = U>; +- +- #[rustc_args_required_const(2)] +- pub fn simd_shuffle16(x: T, y: T, idx: [u32; 16]) -> U +- where +- T: Simd, +- ::Element: Shuffle<[u32; 16], Output = U>; +- +- #[rustc_args_required_const(2)] +- pub fn simd_shuffle32(x: T, y: T, idx: [u32; 32]) -> U +- where +- T: Simd, +- ::Element: Shuffle<[u32; 32], Output = U>; +- +- #[rustc_args_required_const(2)] +- pub fn simd_shuffle64(x: T, y: T, idx: [u32; 64]) -> U +- where +- T: Simd, +- ::Element: Shuffle<[u32; 64], Output = U>; +-} +- +-#[cfg(not(use_const_generics))] +-pub use self::simd_shuffle16 as __shuffle_vector16; +-#[cfg(not(use_const_generics))] +-pub use self::simd_shuffle2 as __shuffle_vector2; +-#[cfg(not(use_const_generics))] +-pub use self::simd_shuffle32 as __shuffle_vector32; +-#[cfg(not(use_const_generics))] +-pub use self::simd_shuffle4 as __shuffle_vector4; +-#[cfg(not(use_const_generics))] +-pub use self::simd_shuffle64 as __shuffle_vector64; +-#[cfg(not(use_const_generics))] +-pub use self::simd_shuffle8 as __shuffle_vector8; +- + extern "platform-intrinsic" { + crate fn simd_eq(x: T, y: T) -> U; + crate fn simd_ne(x: T, y: T) -> U; +diff --git a/third_party/rust/packed_simd/src/lib.rs b/third_party/rust/packed_simd/src/lib.rs +index dd6b8a1e8e38..e3a747025f43 100644 +--- a/third_party/rust/packed_simd/src/lib.rs ++++ b/third_party/rust/packed_simd/src/lib.rs +@@ -199,35 +199,37 @@ + //! Numeric casts are not very "precise": sometimes lossy, sometimes value + //! preserving, etc. + +-#![cfg_attr(use_const_generics, feature(const_generics))] +-#![cfg_attr(use_const_generics, allow(incomplete_features, clippy::from_over_into))] ++#![cfg_attr(const_generics, feature(const_generics))] ++#![cfg_attr(not(const_generics), feature(adt_const_params))] + #![feature( + repr_simd, + rustc_attrs, + platform_intrinsics, + stdsimd, + aarch64_target_feature, + arm_target_feature, + link_llvm_intrinsics, + core_intrinsics, + stmt_expr_attributes, + crate_visibility_modifier, + custom_inner_attributes + )] + #![allow(non_camel_case_types, non_snake_case, + // FIXME: these types are unsound in C FFI already + // See https://github.com/rust-lang/rust/issues/53346 + improper_ctypes_definitions, ++ incomplete_features, + clippy::cast_possible_truncation, + clippy::cast_lossless, + clippy::cast_possible_wrap, + clippy::cast_precision_loss, + // TODO: manually add the `#[must_use]` attribute where appropriate + clippy::must_use_candidate, + // This lint is currently broken for generic code + // See https://github.com/rust-lang/rust-clippy/issues/3410 + clippy::use_self, + clippy::wrong_self_convention, ++ clippy::from_over_into, + )] + #![cfg_attr(test, feature(hashmap_internals))] + #![deny(rust_2018_idioms, clippy::missing_inline_in_public_items)] diff --git a/x86_64/extra/js78/PKGBUILD b/x86_64/extra/js78/PKGBUILD new file mode 100644 index 0000000..c136374 --- /dev/null +++ b/x86_64/extra/js78/PKGBUILD @@ -0,0 +1,63 @@ +pkgname=js78 +pkgver=78.15.0esr +pkgrel=1 +arch=('x86_64') +depends=(autoconf icu which) +makedepends=(autoconf icu which llvm clang) +source=(https://archive.mozilla.org/pub/firefox/releases/$pkgver/source/firefox-$pkgver.source.tar.xz + 0001-Fixes-for-LTO-PGO-support.patch + 0002-Fixes-for-Python-3.10.patch + 0003-Fixes-for-Rust-1.56.patch) + +prepare() { + cd firefox-78.15.0 + + patch -Np1 -i ../0001-Fixes-for-LTO-PGO-support.patch + + patch -Np1 -i ../0002-Fixes-for-Python-3.10.patch + + patch -Np1 -i ../0003-Fixes-for-Rust-1.56.patch +} + +build() { + export CC=clang + export CXX=clang++ + + export AR=llvm-ar + export NM=llvm=nm + export RANLIB=llvm-ranlib + + + # Rust-simd is disabled as of errors + local conf_args=( + --prefix=/usr + --disable-debug + --disable-debug-symbols + --disable-jemalloc + --disable-strip + --disable-tests + --enable-readline + --enable-release + --enable-shared-js + --with-system-zlib + --with-system-icu + --disable-rust-simd + ) + mkdir -p firefox-78.15.0/obj + cd firefox-78.15.0/obj + + echo "[Building]: instrumented JS ..." + + CC=gcc CXX=g++ \ + bash ../js/src/configure "${conf_args[@]}" + + make +} + +package() { + cd firefox-78.15.0/obj + + make DESTDIR=$pkgdir install + rm $pkgdir/usr/lib/*.ajs + find $pkgdir/usr/{lib/pkgconfig,include} -type f -exec chmod -c a-x {} + +} diff --git a/x86_64/extra/json-c/PKGBUILD b/x86_64/extra/json-c/PKGBUILD new file mode 100644 index 0000000..5038f52 --- /dev/null +++ b/x86_64/extra/json-c/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=json-c +arch=(x86_64) +pkgver=0.15 +pkgrel=1 +makedepends=(cmake) +source=(https://s3.amazonaws.com/json-c_releases/releases/$pkgname-$pkgver.tar.gz) + + +build() { + mkdir build + cd build + + cmake \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_STATIC_LIBS=OFF \ + ../$pkgname-$pkgver + + make +} + +package() { + cd build + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/json-cpp/PKGBUILD b/x86_64/extra/json-cpp/PKGBUILD new file mode 100644 index 0000000..0335873 --- /dev/null +++ b/x86_64/extra/json-cpp/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=jsoncpp +pkgver=1.9.5 +pkgrel=1 +arch=(x86_64) +depends=(glibc gcc) +makedepends=(gcc) +source=(https://github.com/open-source-parsers/$pkgname/archive/$pkgver/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + echo $pkgver > version + + # Shared + meson \ + --prefix=/usr \ + --default-library shared \ + build-shared + + ninja -C build-shared + + # Static + meson \ + --prefix=/usr \ + --default-library static \ + build-static + + ninja -C build-static +} + +package() { + cd $pkgname-$pkgver + + DESTDIR=$pkgdir ninja -C build-static install + DESTDIR=$pkgdir ninja -C build-shared install +} diff --git a/x86_64/extra/json-glib/PKGBUILD b/x86_64/extra/json-glib/PKGBUILD new file mode 100644 index 0000000..6801dd1 --- /dev/null +++ b/x86_64/extra/json-glib/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=json-glib +pkgver=1.6.6 +pkgrel=1 +arch=('x86_64') +depends=(glib2) +source=(https://download.gnome.org/sources/$pkgname/1.6/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + mkdir -p build && cd build + + meson --prefix=/usr --buildtype=release .. + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/kbd/PKGBUILD b/x86_64/extra/kbd/PKGBUILD new file mode 100644 index 0000000..b966cb8 --- /dev/null +++ b/x86_64/extra/kbd/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=kbd +pkgver=2.4.0 +pkgrel=2 +arch=('x86_64') +depends=(glibc linux-pam) +source=(https://www.kernel.org/pub/linux/utils/$pkgname/$pkgname-$pkgver.tar.xz + http://www.linuxfromscratch.org/patches/lfs/development/kbd-$pkgver-backspace-1.patch) + +build() { + cd $pkgname-$pkgver + + patch -Np1 -i ../$pkgname-$pkgver-backspace-1.patch + + sed -i 's/\(RESIZECONS_PROGS=\)yes/\1no/g' configure + sed -i 's/resizecons.8 //' docs/man/man8/Makefile.in + + [ -d /tools/lib/pkgconfig ] && export PKG_CONFIG_PATH=/tools/lib/pkgconfig + ./configure --prefix=/usr --disable-vlock + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + + mkdir -p $pkgdir/bin + mv -v $pkgdir/usr/bin/{dumpkeys,kbd_mode,loadkeys,setfont} $pkgdir/bin +} diff --git a/x86_64/extra/kbd/kbd-2.4.0-backspace-1.patch b/x86_64/extra/kbd/kbd-2.4.0-backspace-1.patch new file mode 100644 index 0000000..8fec171 --- /dev/null +++ b/x86_64/extra/kbd/kbd-2.4.0-backspace-1.patch @@ -0,0 +1,250 @@ +Submitted By: Matt Burgess +Date: 2008-12-06 +Initial Package Version: 1.15 +Upstream Status: Not submitted, possibly incomplete +Description: Makes Backspace and Delete keys consistent in all i386 keymaps. +Makes the Backspace key send character code 127, and Delete send a well known +escape sequence. Obsoletes the /etc/kbd/bs-sends-del file for i386. + +Original patch for 1.12 by Alexander Patrakov. +Updated for 1.13 (drop ru.map, the change is upstream, and add ru_win.map, +ru-cp1251.map) by Ken Moffat . +Re-diffed against 1.15 by Matt Burgess . + +diff -Naur kbd-1.15.orig/data/keymaps/i386/dvorak/dvorak-l.map kbd-1.15/data/keymaps/i386/dvorak/dvorak-l.map +--- kbd-1.15.orig/data/keymaps/i386/dvorak/dvorak-l.map 2008-06-20 12:36:01.000000000 +0100 ++++ kbd-1.15/data/keymaps/i386/dvorak/dvorak-l.map 2008-12-03 22:27:55.000000000 +0000 +@@ -43,7 +43,7 @@ + keycode 11 = three numbersign + keycode 12 = two at + keycode 13 = one exclam +- keycode 14 = BackSpace Delete ++ keycode 14 = Delete Delete + ! -------------------------------------------------------------------------- + ! Row 3 + ! -------------------------------------------------------------------------- +diff -Naur kbd-1.15.orig/data/keymaps/i386/dvorak/dvorak-r.map kbd-1.15/data/keymaps/i386/dvorak/dvorak-r.map +--- kbd-1.15.orig/data/keymaps/i386/dvorak/dvorak-r.map 2008-06-20 12:36:01.000000000 +0100 ++++ kbd-1.15/data/keymaps/i386/dvorak/dvorak-r.map 2008-12-03 22:28:13.000000000 +0000 +@@ -43,7 +43,7 @@ + keycode 11 = slash question + keycode 12 = bracketleft braceleft + keycode 13 = bracketright braceright +- keycode 14 = BackSpace Delete ++ keycode 14 = Delete Delete + ! -------------------------------------------------------------------------- + ! Row 3 + ! -------------------------------------------------------------------------- +diff -Naur kbd-1.15.orig/data/keymaps/i386/fgGIod/tr_f-latin5.map kbd-1.15/data/keymaps/i386/fgGIod/tr_f-latin5.map +--- kbd-1.15.orig/data/keymaps/i386/fgGIod/tr_f-latin5.map 2008-10-23 20:03:58.000000000 +0100 ++++ kbd-1.15/data/keymaps/i386/fgGIod/tr_f-latin5.map 2008-12-03 22:40:32.000000000 +0000 +@@ -51,7 +51,7 @@ + alt keycode 12 = Meta_minus + keycode 13 = minus underscore + alt keycode 13 = Meta_equal +-keycode 14 = BackSpace Delete ++keycode 14 = Delete Delete + alt keycode 14 = Meta_Delete + keycode 15 = Tab Meta_Tab + alt keycode 15 = Meta_Tab +diff -Naur kbd-1.15.orig/data/keymaps/i386/qwerty/lt.l4.map kbd-1.15/data/keymaps/i386/qwerty/lt.l4.map +--- kbd-1.15.orig/data/keymaps/i386/qwerty/lt.l4.map 2008-10-23 20:03:59.000000000 +0100 ++++ kbd-1.15/data/keymaps/i386/qwerty/lt.l4.map 2008-12-03 22:42:14.000000000 +0000 +@@ -205,7 +205,7 @@ + # edit this if you want the key above to delete symbols above + # cursor, not before. + keycode 14 = \ +- BackSpace BackSpace BackSpace BackSpace \ ++ Delete Delete Delete Delete \ + Delete Delete Delete Delete \ + Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace \ + Meta_Delete Meta_Delete Meta_Delete Meta_Delete +@@ -506,7 +506,7 @@ + + # Edit this if you want strict VT100 emulation. + string F111 = "\033[3$" +-keycode 111 = Delete F111 Delete F111 \ ++keycode 111 = Remove F111 Remove F111 \ + Remove Remove Remove Remove \ + Meta_Delete Meta_Delete Meta_Delete Meta_Delete \ + Boot Boot Boot Boot +diff -Naur kbd-1.15.orig/data/keymaps/i386/qwerty/lt.map kbd-1.15/data/keymaps/i386/qwerty/lt.map +--- kbd-1.15.orig/data/keymaps/i386/qwerty/lt.map 2008-10-23 20:03:59.000000000 +0100 ++++ kbd-1.15/data/keymaps/i386/qwerty/lt.map 2008-12-03 22:42:58.000000000 +0000 +@@ -204,7 +204,7 @@ + # edit this if you want the key above to delete symbols above + # cursor, not before. + keycode 14 = \ +- BackSpace BackSpace BackSpace BackSpace \ ++ Delete Delete Delete Delete \ + Delete Delete Delete Delete \ + Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace \ + Meta_Delete Meta_Delete Meta_Delete Meta_Delete +@@ -505,7 +505,7 @@ + + # Edit this if you want strict VT100 emulation. + string F111 = "\033[3$" +-keycode 111 = Delete F111 Delete F111 \ ++keycode 111 = Remove F111 Remove F111 \ + Remove Remove Remove Remove \ + Meta_Delete Meta_Delete Meta_Delete Meta_Delete \ + Boot Boot Boot Boot +diff -Naur kbd-1.15.orig/data/keymaps/i386/qwerty/no-latin1.map kbd-1.15/data/keymaps/i386/qwerty/no-latin1.map +--- kbd-1.15.orig/data/keymaps/i386/qwerty/no-latin1.map 2008-06-20 12:36:00.000000000 +0100 ++++ kbd-1.15/data/keymaps/i386/qwerty/no-latin1.map 2008-12-03 22:44:25.000000000 +0000 +@@ -3,7 +3,7 @@ + # Send comments to Kjetil T. Homme + include "linux-with-alt-and-altgr" + plain keycode 83 = KP_Comma +- plain keycode 111 = Delete # "Remove" originally, weird... ++ plain keycode 111 = Remove + strings as usual + + keycode 1 = Escape +diff -Naur kbd-1.15.orig/data/keymaps/i386/qwerty/ru1.map kbd-1.15/data/keymaps/i386/qwerty/ru1.map +--- kbd-1.15.orig/data/keymaps/i386/qwerty/ru1.map 2008-10-23 20:03:59.000000000 +0100 ++++ kbd-1.15/data/keymaps/i386/qwerty/ru1.map 2008-12-03 22:45:32.000000000 +0000 +@@ -143,8 +143,8 @@ + + # The keycode "0xFF" is too dangerous for many programs (including emacs). + # So let it be bracket instead of Hard Sign. +-# altgr keycode 27 = +0xDF +-# altgr shift keycode 27 = +0xFF ++altgr keycode 27 = +0xDF ++altgr shift keycode 27 = +0xFF + control keycode 27 = Control_bracketright + altgr control keycode 27 = Control_bracketright + alt keycode 27 = Meta_bracketright +diff -Naur kbd-1.15.orig/data/keymaps/i386/qwerty/ru2.map kbd-1.15/data/keymaps/i386/qwerty/ru2.map +--- kbd-1.15.orig/data/keymaps/i386/qwerty/ru2.map 2008-10-23 20:03:59.000000000 +0100 ++++ kbd-1.15/data/keymaps/i386/qwerty/ru2.map 2008-12-03 22:46:15.000000000 +0000 +@@ -46,7 +46,7 @@ + alt keycode 12 = Meta_minus + keycode 13 = equal plus equal plus + alt keycode 13 = Meta_equal +- keycode 14 = BackSpace BackSpace BackSpace BackSpace ++ keycode 14 = Delete Delete Delete Delete + alt keycode 14 = Meta_Delete + keycode 15 = Tab Tab Tab Tab + alt keycode 15 = Meta_Tab +diff -Naur kbd-1.15.orig/data/keymaps/i386/qwerty/ru-cp1251.map kbd-1.15/data/keymaps/i386/qwerty/ru-cp1251.map +--- kbd-1.15.orig/data/keymaps/i386/qwerty/ru-cp1251.map 2008-10-23 20:03:59.000000000 +0100 ++++ kbd-1.15/data/keymaps/i386/qwerty/ru-cp1251.map 2008-12-03 22:47:12.000000000 +0000 +@@ -39,7 +39,7 @@ + alt keycode 12 = Meta_minus + keycode 13 = equal plus equal plus + alt keycode 13 = Meta_equal +- keycode 14 = BackSpace ++ keycode 14 = Delete + alt keycode 14 = Meta_Delete + keycode 15 = Tab + alt keycode 15 = Meta_Tab +diff -Naur kbd-1.15.orig/data/keymaps/i386/qwerty/ru-ms.map kbd-1.15/data/keymaps/i386/qwerty/ru-ms.map +--- kbd-1.15.orig/data/keymaps/i386/qwerty/ru-ms.map 2008-10-23 20:03:59.000000000 +0100 ++++ kbd-1.15/data/keymaps/i386/qwerty/ru-ms.map 2008-12-03 22:48:10.000000000 +0000 +@@ -89,8 +89,8 @@ + altgr alt keycode 13 = Meta_equal + shift alt keycode 13 = Meta_plus + altgr shift alt keycode 13 = Meta_plus +- keycode 14 = BackSpace BackSpace BackSpace BackSpace +-# keycode 14 = Delete Delete Delete Delete ++# keycode 14 = BackSpace BackSpace BackSpace BackSpace ++ keycode 14 = Delete Delete Delete Delete + alt keycode 14 = Meta_Delete + altgr alt keycode 14 = Meta_Delete + keycode 15 = Tab Tab Tab Tab +diff -Naur kbd-1.15.orig/data/keymaps/i386/qwerty/ru_win.map kbd-1.15/data/keymaps/i386/qwerty/ru_win.map +--- kbd-1.15.orig/data/keymaps/i386/qwerty/ru_win.map 2008-10-23 20:03:59.000000000 +0100 ++++ kbd-1.15/data/keymaps/i386/qwerty/ru_win.map 2008-12-03 22:49:17.000000000 +0000 +@@ -42,7 +42,7 @@ + alt keycode 12 = Meta_minus + keycode 13 = equal plus equal plus + alt keycode 13 = Meta_equal +- keycode 14 = BackSpace BackSpace BackSpace BackSpace ++ keycode 14 = Delete Delete Delete Delete + alt keycode 14 = Meta_Delete + keycode 15 = Tab Tab Tab Tab + alt keycode 15 = Meta_Tab +diff -Naur kbd-1.15.orig/data/keymaps/i386/qwerty/se-ir209.map kbd-1.15/data/keymaps/i386/qwerty/se-ir209.map +--- kbd-1.15.orig/data/keymaps/i386/qwerty/se-ir209.map 2008-10-23 20:03:59.000000000 +0100 ++++ kbd-1.15/data/keymaps/i386/qwerty/se-ir209.map 2008-12-03 22:50:18.000000000 +0000 +@@ -345,7 +345,7 @@ + keycode 109 = Next Scroll_Forward + keycode 110 = Insert + +- keycode 111 = Delete # "Remove" originally, weird... ++ keycode 111 = Remove + control alt keycode 111 = Boot + control altgr keycode 111 = Boot + +diff -Naur kbd-1.15.orig/data/keymaps/i386/qwerty/se-lat6.map kbd-1.15/data/keymaps/i386/qwerty/se-lat6.map +--- kbd-1.15.orig/data/keymaps/i386/qwerty/se-lat6.map 2008-10-23 20:03:59.000000000 +0100 ++++ kbd-1.15/data/keymaps/i386/qwerty/se-lat6.map 2008-12-03 22:50:44.000000000 +0000 +@@ -374,6 +374,6 @@ + keycode 109 = Next Scroll_Forward + keycode 110 = Insert + +- keycode 111 = Delete # "Remove" originally, weird... ++ keycode 111 = Remove + control alt keycode 111 = Boot + control altgr keycode 111 = Boot +diff -Naur kbd-1.15.orig/data/keymaps/i386/qwerty/tr_q-latin5.map kbd-1.15/data/keymaps/i386/qwerty/tr_q-latin5.map +--- kbd-1.15.orig/data/keymaps/i386/qwerty/tr_q-latin5.map 2008-10-23 20:03:59.000000000 +0100 ++++ kbd-1.15/data/keymaps/i386/qwerty/tr_q-latin5.map 2008-12-03 22:52:09.000000000 +0000 +@@ -49,7 +49,7 @@ + alt keycode 12 = Meta_minus + keycode 13 = minus underscore + alt keycode 13 = Meta_equal +-keycode 14 = BackSpace Delete ++keycode 14 = Delete Delete + alt keycode 14 = Meta_Delete + keycode 15 = Tab Meta_Tab + alt keycode 15 = Meta_Tab +diff -Naur kbd-1.15.orig/data/keymaps/i386/qwerty/ua.map kbd-1.15/data/keymaps/i386/qwerty/ua.map +--- kbd-1.15.orig/data/keymaps/i386/qwerty/ua.map 2008-10-23 20:03:59.000000000 +0100 ++++ kbd-1.15/data/keymaps/i386/qwerty/ua.map 2008-12-03 22:52:52.000000000 +0000 +@@ -249,7 +249,7 @@ + shift ctrll ctrlr keycode 13 = plus + alt ctrll ctrlr keycode 13 = Meta_equal + shift alt ctrll ctrlr keycode 13 = Meta_plus +-keycode 14 = BackSpace Delete ++keycode 14 = Delete Delete + control keycode 14 = BackSpace + alt keycode 14 = Meta_Delete + ctrlr keycode 14 = BackSpace +diff -Naur kbd-1.15.orig/data/keymaps/i386/qwerty/ua-utf.map kbd-1.15/data/keymaps/i386/qwerty/ua-utf.map +--- kbd-1.15.orig/data/keymaps/i386/qwerty/ua-utf.map 2008-10-23 20:03:59.000000000 +0100 ++++ kbd-1.15/data/keymaps/i386/qwerty/ua-utf.map 2008-12-03 22:53:36.000000000 +0000 +@@ -250,7 +250,7 @@ + shift ctrll ctrlr keycode 13 = plus + alt ctrll ctrlr keycode 13 = Meta_equal + shift alt ctrll ctrlr keycode 13 = Meta_plus +-keycode 14 = BackSpace Delete ++keycode 14 = Delete Delete + control keycode 14 = BackSpace + alt keycode 14 = Meta_Delete + ctrlr keycode 14 = BackSpace +diff -Naur kbd-1.15.orig/data/keymaps/i386/qwerty/ua-utf-ws.map kbd-1.15/data/keymaps/i386/qwerty/ua-utf-ws.map +--- kbd-1.15.orig/data/keymaps/i386/qwerty/ua-utf-ws.map 2008-10-23 20:03:59.000000000 +0100 ++++ kbd-1.15/data/keymaps/i386/qwerty/ua-utf-ws.map 2008-12-03 22:54:06.000000000 +0000 +@@ -260,7 +260,7 @@ + shift ctrll ctrlr keycode 13 = plus + alt ctrll ctrlr keycode 13 = Meta_equal + shift alt ctrll ctrlr keycode 13 = Meta_plus +-keycode 14 = BackSpace Delete ++keycode 14 = Delete Delete + control keycode 14 = BackSpace + alt keycode 14 = Meta_Delete + ctrlr keycode 14 = BackSpace +diff -Naur kbd-1.15.orig/data/keymaps/i386/qwerty/ua-ws.map kbd-1.15/data/keymaps/i386/qwerty/ua-ws.map +--- kbd-1.15.orig/data/keymaps/i386/qwerty/ua-ws.map 2008-10-23 20:03:59.000000000 +0100 ++++ kbd-1.15/data/keymaps/i386/qwerty/ua-ws.map 2008-12-03 22:54:23.000000000 +0000 +@@ -260,7 +260,7 @@ + shift ctrll ctrlr keycode 13 = plus + alt ctrll ctrlr keycode 13 = Meta_equal + shift alt ctrll ctrlr keycode 13 = Meta_plus +-keycode 14 = BackSpace Delete ++keycode 14 = Delete Delete + control keycode 14 = BackSpace + alt keycode 14 = Meta_Delete + ctrlr keycode 14 = BackSpace diff --git a/x86_64/extra/kcolorpicker/PKGBUILD b/x86_64/extra/kcolorpicker/PKGBUILD new file mode 100644 index 0000000..8f691d6 --- /dev/null +++ b/x86_64/extra/kcolorpicker/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=kcolorpicker +pkgver=0.1.6 +pkgrel=2 +arch=(x86_64) +makedepends=(cmake) +depends=(qt5) +source=(https://github.com/ksnip/kColorPicker/archive/v$pkgver/$pkgname-$pkgver.tar.gz) + +build() { + cmake -B build -S kColorPicker-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=ON + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/extra/kdsoap-ws-discovery-client/PKGBUILD b/x86_64/extra/kdsoap-ws-discovery-client/PKGBUILD new file mode 100644 index 0000000..ab3db61 --- /dev/null +++ b/x86_64/extra/kdsoap-ws-discovery-client/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=kdsoap-ws-discovery-client +pkgver=2.0.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(cmake extra-cmake-modules) +commitid=dcefb65c88e76f1f9eda8b0318006e93d15a0e1e +durl=https://gitlab.com/caspermeijn/$pkgname/-/archive +source=($durl/$commitid/$pkgname-$commitid.tar.gz) + +prepare() { + cd $pkgname-$commitid + + mkdir -p build +} + +build() { + cd $pkgname-$commitid/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=None \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$commitid/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/extra/kdsoap/PKGBUILD b/x86_64/extra/kdsoap/PKGBUILD new file mode 100644 index 0000000..176724d --- /dev/null +++ b/x86_64/extra/kdsoap/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kdsoap +pkgver=2.0.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(cmake extra-cmake-modules) +durl=https://github.com/KDAB/KDSoap/releases/download +source=($durl/$pkgname-$pkgver/$pkgname-$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=None \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/extra/keybinder/PKGBUILD b/x86_64/extra/keybinder/PKGBUILD new file mode 100644 index 0000000..8d85512 --- /dev/null +++ b/x86_64/extra/keybinder/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=keybinder +pkgver=3.0.0.3.2 +rver=3.0-0.3.2 +pkgrel=1 +arch=('x86_64') +depends=(gtk+ gobject-introspection) +makedepends=(gtk-doc) +source=(https://github.com/kupferlauncher/$pkgname/releases/download/$pkgname-3.0-v0.3.2/$pkgname-$rver.tar.gz) + +build() { + cd $pkgname-$rver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$rver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/keyutils/PKGBUILD b/x86_64/extra/keyutils/PKGBUILD new file mode 100644 index 0000000..5d009e5 --- /dev/null +++ b/x86_64/extra/keyutils/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=keyutils +_tag='5678a1aae8834b5c16b5ed7dc72ef8836a29e122' # git rev-parse v${pkgver} +pkgver=1.6.3 +pkgrel=1 +pkgdesc='Linux Key Management Utilities' +arch=('x86_64') +url='https://www.kernel.org/' +depends=('glibc') +makedepends=('git') +backup=('etc/request-key.conf') +source=("git+https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/keyutils.git#tag=${_tag}?signed" + 'request-key.conf.patch' 'reproducible.patch') + +prepare() { + cd ${pkgname} + # fix paths of binaries in /etc/request-key.conf + patch -Np0 -i ../request-key.conf.patch + + # make keyutils reproducible + patch -Np1 -i ../reproducible.patch +} + +build() { + cd ${pkgname} + make CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" SBINDIR='/usr/bin' BINDIR='/usr/bin' +} + +package() { + cd ${pkgname} + make DESTDIR="${pkgdir}" SBINDIR='/usr/bin' BINDIR='/usr/bin' LIBDIR='/usr/lib' USRLIBDIR='/usr/lib' install +} diff --git a/x86_64/extra/keyutils/reproducible.patch b/x86_64/extra/keyutils/reproducible.patch new file mode 100644 index 0000000..db5cfe8 --- /dev/null +++ b/x86_64/extra/keyutils/reproducible.patch @@ -0,0 +1,24 @@ +Adhere to the SOURCE_DATE_EPOCH standard and use it's date when set +otherwise fall back to the default behaviour. + +Signed-off-by: Jelle van der Waa +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index 33a451e..9066d5d 100644 +--- a/Makefile ++++ b/Makefile +@@ -108,7 +108,7 @@ all: keyctl request-key key.dns_resolver + ############################################################################### + #RPATH = -Wl,-rpath,$(LIBDIR) + +-VCPPFLAGS := -DPKGBUILD="\"$(shell date -u +%F)\"" ++VCPPFLAGS := -DPKGBUILD="\"$(date --utc --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%F)\"" + VCPPFLAGS += -DPKGVERSION="\"keyutils-$(VERSION)\"" + VCPPFLAGS += -DAPIVERSION="\"libkeyutils-$(APIVERSION)\"" + +-- +2.21.0 + diff --git a/x86_64/extra/keyutils/request-key.conf.patch b/x86_64/extra/keyutils/request-key.conf.patch new file mode 100644 index 0000000..9ab4796 --- /dev/null +++ b/x86_64/extra/keyutils/request-key.conf.patch @@ -0,0 +1,21 @@ +--- request-key.conf.old 2013-05-28 15:34:10.966001242 +0200 ++++ request-key.conf 2013-05-28 15:35:34.857969598 +0200 +@@ -31,11 +31,11 @@ + + #OP TYPE DESCRIPTION CALLOUT INFO PROGRAM ARG1 ARG2 ARG3 ... + #====== ======= =============== =============== =============================== +-create dns_resolver * * /sbin/key.dns_resolver %k +-create user debug:* negate /bin/keyctl negate %k 30 %S +-create user debug:* rejected /bin/keyctl reject %k 30 %c %S +-create user debug:* expired /bin/keyctl reject %k 30 %c %S +-create user debug:* revoked /bin/keyctl reject %k 30 %c %S +-create user debug:loop:* * |/bin/cat ++create dns_resolver * * /usr/bin/key.dns_resolver %k ++create user debug:* negate /usr/bin/keyctl negate %k 30 %S ++create user debug:* rejected /usr/bin/keyctl reject %k 30 %c %S ++create user debug:* expired /usr/bin/keyctl reject %k 30 %c %S ++create user debug:* revoked /usr/bin/keyctl reject %k 30 %c %S ++create user debug:loop:* * |/usr/bin/cat + create user debug:* * /usr/share/keyutils/request-key-debug.sh %k %d %c %S +-negate * * * /bin/keyctl negate %k 30 %S ++negate * * * /usr/bin/keyctl negate %k 30 %S diff --git a/x86_64/extra/kimageannotator/PKGBUILD b/x86_64/extra/kimageannotator/PKGBUILD new file mode 100644 index 0000000..ebbfb5b --- /dev/null +++ b/x86_64/extra/kimageannotator/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=kimageannotator +pkgver=0.5.3 +pkgrel=2 +arch=(x86_64) +depends=(qt5 kcolorpicker) +makedepends=(cmake qt5) +source=(https://github.com/ksnip/kImageAnnotator/archive/v$pkgver/$pkgname-$pkgver.tar.gz) + +build() { + cmake -B build -S kImageAnnotator-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=ON + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} diff --git a/x86_64/extra/kpmcore/PKGBUILD b/x86_64/extra/kpmcore/PKGBUILD new file mode 100644 index 0000000..be3b5d8 --- /dev/null +++ b/x86_64/extra/kpmcore/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=kpmcore +pkgver=22.04.0 +pkgrel=2 +arch=(x86_64) +depends=(kcoreaddons kwidgetsaddons ki18n polkit-qt qt5 smartmontools + # Required base fs support + e2fsprogs + dosfstools + fatresize + exfat-utils +) +makedepends=(extra-cmake-modules) +optdepends=('xfsprogs: XFS support' + 'jfsutils: JFS support' + 'reiserfsprogs: Reiser support' + 'ntfs-3g: NTFS support' + 'f2fs-tools: F2FS support' + 'nilfs-utils: nilfs support' + 'udftools: UDF support') +source=(https://download.kde.org/stable/release-service/$pkgver/src/$pkgname-$pkgver.tar.xz) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -D CMAKE_INSTALL_LIBEXECDIR=lib \ + -D BUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/extra/lame/PKGBUILD b/x86_64/extra/lame/PKGBUILD new file mode 100644 index 0000000..fec618f --- /dev/null +++ b/x86_64/extra/lame/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=lame +pkgver=3.100 +pkgrel=1 +arch=('x86_64') +depends=(libsndfile nasm) +makedepends=(gcc) +source=(https://downloads.sourceforge.net/lame/lame-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-mp3rtp + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/lcms/PKGBUILD b/x86_64/extra/lcms/PKGBUILD new file mode 100644 index 0000000..9b1c6ca --- /dev/null +++ b/x86_64/extra/lcms/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=lcms +pkgver=2.12 +pkgrel=1 +arch=('x86_64') +depends=(libjpeg libtiff) +source=(https://downloads.sourceforge.net/$pkgname/lcms2-$pkgver.tar.gz) + +build() { + cd lcms2-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd lcms2-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/ldb/PKGBUILD b/x86_64/extra/ldb/PKGBUILD new file mode 100644 index 0000000..e7fb068 --- /dev/null +++ b/x86_64/extra/ldb/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=ldb +pkgver=2.5.0 +pkgrel=1 +arch=(x86_64) +depends=(talloc tevent tdb popt lmdb) +makedepends=(python3 cmocka tevent docbook-xsl) +source=(https://samba.org/ftp/${pkgname}/${pkgname}-${pkgver}.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --bundled-libraries=NONE \ + --bundled-libraries=replace \ + --with-modulesdir=/usr/lib/ldb/modules \ + --with-privatelibdir=/usr/lib/ldb +} + +build() { + cd $pkgname-$pkgver + + make -j4 +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libaio/PKGBUILD b/x86_64/extra/libaio/PKGBUILD new file mode 100644 index 0000000..2687f9a --- /dev/null +++ b/x86_64/extra/libaio/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=libaio +pkgver=0.3.112 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +source=(https://ftp.debian.org/debian/pool/main/liba/libaio/libaio_$pkgver.orig.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + sed -i '/install.*libaio.a/s/^/#/' src/Makefile +} + +build() { + cd $pkgname-$pkgver + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libappindicator/PKGBUILD b/x86_64/extra/libappindicator/PKGBUILD new file mode 100644 index 0000000..42dcd00 --- /dev/null +++ b/x86_64/extra/libappindicator/PKGBUILD @@ -0,0 +1,44 @@ +pkgname=libappindicator +pkgver=12.10.0 +rev_ver=12.10 +pkgrel=1 +arch=(x86_64) +depends=(dbus-glib gnome-common gobject-introspection libdbusmenu libindicator) +source=(https://launchpad.net/${pkgname}/$rev_ver/${pkgver}/+download/${pkgname}-${pkgver}.tar.gz + no-python.patch) + +prepare() { + cd $pkgname-$pkgver + + patch -Np1 -i ../no-python.patch + sed -i 's/-Werror//' src/Makefile.am + autoreconf -fvi +} + +build() { + cd $pkgname-$pkgver + + mkdir -p build2 build3 + # GTK2 + cd build2 + ./../configure \ + --prefix=/usr \ + --localstatedir=/var \ + --sysconfdir=/etc \ + --with-gtk=2 + + # GTK3 + cd ../build3 + ./../configure \ + --prefix=/usr \ + --localstatedir=/var \ + --sysconfdir=/etc \ + --with-gtk=3 +} + +package() { + cd $pkgname-$pkgver + +# make -C build2 DESTDIR=$pkgdir install + make -C build3 DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libappindicator/no-python.patch b/x86_64/extra/libappindicator/no-python.patch new file mode 100644 index 0000000..ca0da3c --- /dev/null +++ b/x86_64/extra/libappindicator/no-python.patch @@ -0,0 +1,73 @@ +From: Simon McVittie +Date: Thu, 5 Jul 2018 23:51:25 +0100 +Subject: Disable legacy Python bindings + +Forwarded: not-needed, Debian-specific +--- + bindings/Makefile.am | 6 ------ + configure.ac | 29 ----------------------------- + 2 files changed, 35 deletions(-) + +diff --git a/bindings/Makefile.am b/bindings/Makefile.am +index d1f6d73..b4df7fe 100644 +--- a/bindings/Makefile.am ++++ b/bindings/Makefile.am +@@ -1,11 +1,5 @@ +-if USE_GTK3 + SUBDIRS = \ + vala +-else +-SUBDIRS = \ +- python \ +- vala +-endif + + if HAS_MONO + SUBDIRS += mono +diff --git a/configure.ac b/configure.ac +index 5a14c7f..4a7c964 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -181,33 +181,6 @@ AM_CONDITIONAL(BUILD_MONO_TEST, test x${have_nunit} = xyes) + with_localinstall="no" + AC_ARG_ENABLE(localinstall, AS_HELP_STRING([--enable-localinstall], [install all of the files localy instead of system directories (for distcheck)]), with_localinstall=$enableval, with_localinstall=no) + +-########################### +-# Python +-########################### +- +-PYGTK_REQUIRED=2.14.0 +-PYGOBJECT_REQUIRED=0.22 +- +-AM_PATH_PYTHON(2.3.5) +-AM_CHECK_PYTHON_HEADERS(,[AC_MSG_ERROR(could not find Python headers)]) +- +-PKG_CHECK_MODULES(APPINDICATOR_PYTHON, +- [ +- pygtk-2.0 >= $PYGTK_REQUIRED +- gtk+-2.0 >= $GTK_REQUIRED_VERSION +- pygobject-2.0 >= $PYGOBJECT_REQUIRED +- ]) +- +-AC_MSG_CHECKING(for pygtk defs) +-PYGTK_DEFSDIR=`$PKG_CONFIG --variable=defsdir pygtk-2.0` +-AC_SUBST(PYGTK_DEFSDIR) +-AC_MSG_RESULT($PYGTK_DEFSDIR) +- +-AC_MSG_CHECKING(for pygtk codegen) +-PYGTK_CODEGEN="$PYTHON `$PKG_CONFIG --variable=codegendir pygtk-2.0`/codegen.py" +-AC_SUBST(PYGTK_CODEGEN) +-AC_MSG_RESULT($PYGTK_CODEGEN) +- + ######################### + # Check if build tests + ######################### +@@ -226,8 +199,6 @@ src/Makefile + src/appindicator-0.1.pc + src/appindicator3-0.1.pc + bindings/Makefile +-bindings/python/Makefile +-bindings/python/appindicator.override + bindings/vala/Makefile + bindings/vala/examples/Makefile + tests/Makefile diff --git a/x86_64/extra/libass/PKGBUILD b/x86_64/extra/libass/PKGBUILD new file mode 100644 index 0000000..e61a206 --- /dev/null +++ b/x86_64/extra/libass/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=libass +pkgver=0.15.2 +pkgrel=1 +arch=('x86_64') +depends=(freetype2 fribidi fontconfig harfbuzz) +makedepends=(nasm) +source=(https://github.com/libass/libass/releases/download/$pkgver/libass-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libassuan/PKGBUILD b/x86_64/extra/libassuan/PKGBUILD new file mode 100644 index 0000000..35f6c47 --- /dev/null +++ b/x86_64/extra/libassuan/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=libassuan +pkgver=2.5.5 +pkgrel=1 +pkgdesc='IPC library used by some GnuPG related software' +url="https://www.gnupg.org/related_software/libassuan/" +arch=('x86_64') +depends=('glibc' 'libgpg-error') +source=(https://gnupg.org/ftp/gcrypt/${pkgname}/${pkgname}-${pkgver}.tar.bz2) + +build() { + cd "${pkgname}-${pkgver}" + ./configure --prefix=/usr + make +} + +check() { + cd "${pkgname}-${pkgver}" + make check +} + +package() { + cd "${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install +} \ No newline at end of file diff --git a/x86_64/extra/libatasmart/PKGBUILD b/x86_64/extra/libatasmart/PKGBUILD new file mode 100644 index 0000000..ca4e9fd --- /dev/null +++ b/x86_64/extra/libatasmart/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=libatasmart +pkgver=0.19 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(gcc) +source=(http://0pointer.de/public/libatasmart-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libatomic_ops/PKGBUILD b/x86_64/extra/libatomic_ops/PKGBUILD new file mode 100644 index 0000000..727a26f --- /dev/null +++ b/x86_64/extra/libatomic_ops/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=libatomic_ops +pkgver=7.6.12 +pkgrel=1 +arch=('x86_64') +source=(https://github.com/ivmai/$pkgname/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr \ + --enable-shared \ + --disable-static \ + --docdir=/usr/share/doc/libatomic_ops-7.6.12 + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libavtp/PKGBUILD b/x86_64/extra/libavtp/PKGBUILD new file mode 100644 index 0000000..716e829 --- /dev/null +++ b/x86_64/extra/libavtp/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=libavtp +pkgver=0.1.0 +pkgrel=1 +pkgdesc="Open source implementation of Audio Video Transport Protocol" +arch=('x86_64') +depends=('glibc') +makedepends=('meson' 'cmocka') +source=("$pkgname-$pkgver.tar.gz::https://github.com/Avnu/${pkgname}/archive/v${pkgver}.tar.gz") + +build() { + cd "$pkgname-$pkgver" + + meson \ + --prefix=/usr \ + build + + ninja -C build +} + +package() { + cd "$pkgname-$pkgver" + + DESTDIR="${pkgdir}" meson install -C build +} diff --git a/x86_64/extra/libblockdev/PKGBUILD b/x86_64/extra/libblockdev/PKGBUILD new file mode 100644 index 0000000..1b2c168 --- /dev/null +++ b/x86_64/extra/libblockdev/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=libblockdev +pkgver=2.26 +pkgrel=1 +pkgdesc="A library for manipulating block devices" +arch=('x86_64') +url="https://github.com/rhinstaller/libblockdev" +depends=('dosfstools' 'lvm2' 'parted' 'kmod' 'yaml' 'libbytesize' 'volume_key') +makedepends=('gobject-introspection' 'systemd' 'python3') +source=(https://github.com/storaged-project/libblockdev/releases/download/2.26-1/libblockdev-2.26.tar.gz) + +build() { + cd "$srcdir"/$pkgname-$pkgver + + ./configure --prefix=/usr --sysconfdir=/etc --without-lvm_dbus --without-dmraid + + make +} + +package() { + cd "$srcdir"/$pkgname-$pkgver + + make DESTDIR="$pkgdir" install +} diff --git a/x86_64/extra/libbsd/PKGBUILD b/x86_64/extra/libbsd/PKGBUILD new file mode 100644 index 0000000..b734598 --- /dev/null +++ b/x86_64/extra/libbsd/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=libbsd +pkgver=0.11.5 +pkgrel=1 +arch=('x86_64') +depends=(libmd) +makedepends=(gcc libmd) +source=(https://libbsd.freedesktop.org/releases/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libburn/PKGBUILD b/x86_64/extra/libburn/PKGBUILD new file mode 100644 index 0000000..0d278d9 --- /dev/null +++ b/x86_64/extra/libburn/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=libburn +pkgver=1.5.4 +pkgrel=1 +arch=('x86_64') +source=(https://dev.lovelyhq.com/libburnia/libburn/archive/release-$pkgver.tar.gz) + +build() { + cd $pkgname + + ./bootstrap + ./configure --prefix=/usr \ + --bindir=/bin \ + --sysconfdir=/etc \ + --docdir=/usr/share/doc/nano + make +} + +package() { + cd $pkgname + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libbytesize/PKGBUILD b/x86_64/extra/libbytesize/PKGBUILD new file mode 100644 index 0000000..4b249ca --- /dev/null +++ b/x86_64/extra/libbytesize/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=libbytesize +pkgver=2.6 +pkgrel=1 +arch=('x86_64') +depends=(pcre2) +makedepends=(gcc) +source=(https://github.com/storaged-project/libbytesize/releases/download/$pkgver/libbytesize-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libcacard/PKGBUILD b/x86_64/extra/libcacard/PKGBUILD new file mode 100644 index 0000000..95ef976 --- /dev/null +++ b/x86_64/extra/libcacard/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=libcacard +pkgver=2.7.0 +pkgrel=1 +arch=(x86_64) +depends=(nss glib2) +source=(https://www.spice-space.org/download/libcacard/libcacard-$pkgver.tar.xz) + + +build () { + cd libcacard-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd libcacard-$pkgver + + make DESTDIR="$pkgdir" install +} diff --git a/x86_64/extra/libcanberra/PKGBUILD b/x86_64/extra/libcanberra/PKGBUILD new file mode 100644 index 0000000..938f4d6 --- /dev/null +++ b/x86_64/extra/libcanberra/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=libcanberra +pkgver=0.30 +pkgrel=1 +arch=('x86_64') +depends=(libvorbis alsa-lib) +source=(http://0pointer.de/lennart/projects/$pkgname/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + wget https://linuxfromscratch.org/patches/blfs/svn/$pkgname-$pkgver-wayland-1.patch + patch -Np1 -i $pkgname-$pkgver-wayland-1.patch +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libcap-ng/PKGBUILD b/x86_64/extra/libcap-ng/PKGBUILD new file mode 100644 index 0000000..cfdb58a --- /dev/null +++ b/x86_64/extra/libcap-ng/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=libcap-ng +pkgver=0.8.3 +pkgrel=1 +arch=(x86_64) +depends=(glibc) +makedepends=(python3 swig) +source=(https://github.com/stevegrubb/libcap-ng/archive/v${pkgver}/${pkgname}-${pkgver}.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + autoreconf -fiv +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-static=no \ + --without-python \ + --with-python3 + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install +} diff --git a/x86_64/extra/libcddb/PKGBUILD b/x86_64/extra/libcddb/PKGBUILD new file mode 100644 index 0000000..9610aac --- /dev/null +++ b/x86_64/extra/libcddb/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=libcddb +pkgver=1.3.2 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(gcc) +source=(https://downloads.sourceforge.net/libcddb/libcddb-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libcdio/PKGBUILD b/x86_64/extra/libcdio/PKGBUILD new file mode 100644 index 0000000..6a6f1f7 --- /dev/null +++ b/x86_64/extra/libcdio/PKGBUILD @@ -0,0 +1,38 @@ +pkgname=libcdio +pkgver=2.1.0 +dpkgver=2.0.1 +pkgrel=1 +arch=('x86_64') +depends=(libcddb) +makedepends=(gcc) +source=(https://ftp.gnu.org/gnu/libcdio/libcdio-$pkgver.tar.bz2 + https://ftp.gnu.org/gnu/libcdio/libcdio-paranoia-10.2+$dpkgver.tar.bz2) + +build() { + # Main pkg + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make + + # Extra dep + cd $srcdir/libcdio-paranoia-10.2+$dpkgver + ./configure \ + --prefix=/usr + + make +} + +package() { + # Main pkg + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + # Extra dep + cd $srcdir/libcdio-paranoia-10.2+$dpkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libclc/PKGBUILD b/x86_64/extra/libclc/PKGBUILD new file mode 100644 index 0000000..640649f --- /dev/null +++ b/x86_64/extra/libclc/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=libclc +pkgver=13.0.1 +pkgrel=1 +arch=(x86_64) +makedepends=('clang' 'llvm' 'cmake' 'ninja' 'python3' 'spirv-llvm-translator') +source=(https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver/$pkgname-$pkgver.src.tar.xz) + +prepare() { + cd $pkgname-$pkgver.src + mkdir -p build +} +build() { + cd $pkgname-$pkgver.src/build + + cmake .. -G Ninja \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D LLVM_SPIRV=/usr/bin/llvm-spirv + + ninja +} + +package() { + cd $pkgname-$pkgver.src/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/libdaemon/PKGBUILD b/x86_64/extra/libdaemon/PKGBUILD new file mode 100644 index 0000000..c40866f --- /dev/null +++ b/x86_64/extra/libdaemon/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=libdaemon +pkgver=0.14 +pkgrel=1 +arch=(x86_64) +depends=(glibc) +makedepends=(git) +commitid=9fcc28e0e8f84968d1fb8b6d544a42efb13803ec +source=("git://git.0pointer.net/libdaemon.git#commit=${commitid}") + +build() { + cd "${srcdir}/${pkgname}" + ./bootstrap.sh + + ./configure --prefix=/usr --localstatedir=/var --disable-lynx + make +} + +package() { + cd "${srcdir}/${pkgname}" + + make DESTDIR="${pkgdir}" install +} diff --git a/x86_64/extra/libdbusmenu-qt/PKGBUILD b/x86_64/extra/libdbusmenu-qt/PKGBUILD new file mode 100644 index 0000000..5f86d7e --- /dev/null +++ b/x86_64/extra/libdbusmenu-qt/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=libdbusmenu-qt +pkgver=0.9.3 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(cmake) +source=(https://launchpad.net/ubuntu/+archive/primary/+files/libdbusmenu-qt_$pkgver+16.04.20160218.orig.tar.gz) + +prepare() { + cd $pkgname*/ + + mkdir -p build +} + +build() { + cd $pkgname*/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make +} + +package() { + cd $pkgname*/build + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libdbusmenu/PKGBUILD b/x86_64/extra/libdbusmenu/PKGBUILD new file mode 100644 index 0000000..660aca5 --- /dev/null +++ b/x86_64/extra/libdbusmenu/PKGBUILD @@ -0,0 +1,51 @@ +pkgname=libdbusmenu +pkgver=16.04.0 +pkgrel=1 +arch=('x86_64') +makedepends=('gnome-common' 'gobject-introspection' 'gtk2+' 'gtk3+' 'intltool' 'vala' 'valgrind') +options=('!emptydirs') +source=(https://launchpad.net/${pkgname}/${pkgver%.?}/${pkgver}/+download/${pkgname}-${pkgver}.tar.gz) + +prepare() { + cd ${pkgname}-${pkgver} + # don't treat warnings as errors + sed -i 's/-Werror//' libdbusmenu-*/Makefile.{am,in} + cd .. + + cp -ra ${pkgname}-${pkgver}{,-gtk2} +} + +build() { + export HAVE_VALGRIND_TRUE='#' + export HAVE_VALGRIND_FALSE='' + + msg2 "Building gtk3..." + (cd ${srcdir}/${pkgname}-${pkgver} + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --disable-{dumper,tests} \ + --with-gtk=3 + make + ) + + msg2 "Building gtk2..." + (cd ${srcdir}/${pkgname}-${pkgver}-gtk2 + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --disable-{dumper,tests} \ + --with-gtk=2 + make + ) +} + +package() { + cd ${srcdir}/${pkgname}-${pkgver}-gtk2 + make -j1 -C libdbusmenu-glib DESTDIR="${pkgdir}" install + make -j1 -C libdbusmenu-gtk DESTDIR="${pkgdir}" install + + cd ${srcdir}/${pkgname}-${pkgver} + make -j1 -C libdbusmenu-glib DESTDIR="${pkgdir}" install + make -j1 -C libdbusmenu-gtk DESTDIR="${pkgdir}" install +} diff --git a/x86_64/extra/libdecor/PKGBUILD b/x86_64/extra/libdecor/PKGBUILD new file mode 100644 index 0000000..23a0c11 --- /dev/null +++ b/x86_64/extra/libdecor/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=libdecor +pkgver=0.1.0 +pkgrel=1 +arch=('x86_64') +depends=('wayland' 'pango' 'dbus' 'egl-wayland' 'libxkbcommon') +makedepends=('cmake' 'ninja' 'meson' 'wayland-protocols') +source=(https://gitlab.gnome.org/jadahl/libdecor/uploads/81adf91d27620e20bcc5f6b9b312d768/${pkgname}-${pkgver}.tar.xz) + +build () { + rm -rf _build + + meson _build "${pkgname}-${pkgver}" --prefix=/usr + + meson compile -C _build +} + + +package () { + meson install -C _build --destdir "${pkgdir}" +} diff --git a/x86_64/extra/libdigidocpp/PKGBUILD b/x86_64/extra/libdigidocpp/PKGBUILD new file mode 100644 index 0000000..57e0ea1 --- /dev/null +++ b/x86_64/extra/libdigidocpp/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=libdigidocpp +pkgver=3.14.10 +pkgrel=1 +arch=(x86_64) +depends=(xmlsec xml-security-c openssl zlib xerces-c xalan-c xsd swig openjdk-17) +makedepends=(vim cmake make) +source=(https://github.com/open-eid/libdigidocpp/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + cmake -B build -G Ninja \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D JAVA_AWT_LIBRARY=/opt/jdk-17/lib/ \ + -D JAVA_JVM_LIBRARY=/opt/jdk-17/lib/ \ + -D JAVA_INCLUDE_PATH=/opt/jdk-17/include/ + + ninja -C build +} + +package() { + cd $pkgname-$pkgver + + DESTDIR=$pkgdir ninja -C build install +} diff --git a/x86_64/extra/libdrm/PKGBUILD b/x86_64/extra/libdrm/PKGBUILD new file mode 100644 index 0000000..42ff9e1 --- /dev/null +++ b/x86_64/extra/libdrm/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=libdrm +pkgver=2.4.112 +pkgrel=1 +arch=('x86_64') +depends=('libxcb' 'libxau' 'xorgproto' 'libpciaccess') +source=(https://dri.freedesktop.org/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + mkdir -p build && cd build + meson \ + --prefix=/usr \ + --buildtype=release \ + -D udev=true \ + -D valgrind=false + + ninja +} + +package() { + cd $pkgname-$pkgver + cd build + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/libedit/PKGBUILD b/x86_64/extra/libedit/PKGBUILD new file mode 100644 index 0000000..825380f --- /dev/null +++ b/x86_64/extra/libedit/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=libedit +pkgver=3.1 +pkgrel=1 +arch=('x86_64') +source=(https://thrysoee.dk/editline/$pkgname-20210910-$pkgver.tar.gz) + +build() { + cd $pkgname-20210910-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-20210910-$pkgver + + make DESTDIR=$pkgdir install + + # given already by readline + rm $pkgdir/usr/share/man/man3/history.* +} diff --git a/x86_64/extra/libepoxy/PKGBUILD b/x86_64/extra/libepoxy/PKGBUILD new file mode 100644 index 0000000..c5911da --- /dev/null +++ b/x86_64/extra/libepoxy/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=libepoxy +pkgver=1.5.9 +pkgrel=1 +arch=('x86_64') +depends=(mesa doxygen) +makedepends=(doxygen mesa) +source=(https://github.com/anholt/$pkgname/releases/download/$pkgver/$pkgname-$pkgver.tar.xz) + +prepare() { + mkdir -p $pkgname-$pkgver/build +} + +build() { + cd $pkgname-$pkgver/build + + meson \ + --prefix=/usr \ + --buildtype=release \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/libev/PKGBUILD b/x86_64/extra/libev/PKGBUILD new file mode 100644 index 0000000..fa11851 --- /dev/null +++ b/x86_64/extra/libev/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=libev +pkgver=4.33 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(gcc make) +source=(http://dist.schmorp.de/${pkgname}/${pkgname}-${pkgver}.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + rm -f $pkgdir/usr/include/event.h +} diff --git a/x86_64/extra/libevdev/PKGBUILD b/x86_64/extra/libevdev/PKGBUILD new file mode 100644 index 0000000..6d2f050 --- /dev/null +++ b/x86_64/extra/libevdev/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=libevdev +pkgver=1.12.0 +pkgrel=3 +arch=('x86_64') +makedepends=('python3' 'check' 'valgrind' 'meson') +source=(https://freedesktop.org/software/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + meson $pkgname-$pkgver build \ + -D documentation=disabled \ + --prefix=/usr + + meson compile -C build +} + +package() { + DESTDIR=$pkgdir meson install -C build +} diff --git a/x86_64/extra/libexif/PKGBUILD b/x86_64/extra/libexif/PKGBUILD new file mode 100644 index 0000000..02f3e0d --- /dev/null +++ b/x86_64/extra/libexif/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=libexif +pkgver=0.6.24 +pkgrel=1 +arch=('x86_64') +source=(https://github.com/$pkgname/$pkgname/releases/download/v$pkgver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libfilezilla/PKGBUILD b/x86_64/extra/libfilezilla/PKGBUILD new file mode 100644 index 0000000..0b97bc8 --- /dev/null +++ b/x86_64/extra/libfilezilla/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=libfilezilla +pkgver=0.38.0 +pkgrel=1 +arch=(x86_64) +depends=(glibc gcc nettle gnutls nettle) +makedepends=(make) +source=(https://download.filezilla-project.org/libfilezilla/libfilezilla-${pkgver}.tar.bz2 + aio-tuplefix.patch) + +prepare() { + patch -Np0 -i aio-tuplefix.patch +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libfilezilla/aio-tuplefix.patch b/x86_64/extra/libfilezilla/aio-tuplefix.patch new file mode 100644 index 0000000..ce3300a --- /dev/null +++ b/x86_64/extra/libfilezilla/aio-tuplefix.patch @@ -0,0 +1,11 @@ +diff -Naur libfilezilla-0.38.0/lib/aio/aio.cpp libfilezilla-0.38.0/lib/aio/aio.cpp +--- libfilezilla-0.38.0/lib/aio/aio.cpp 2022-07-08 16:18:43.000000000 +0300 ++++ libfilezilla-0.38.0/lib/aio/aio.cpp 2022-07-08 18:01:36.781260701 +0300 +@@ -10,6 +10,7 @@ + #include + #include + #include ++#include + #endif + + diff --git a/x86_64/extra/libfontenc/PKGBUILD b/x86_64/extra/libfontenc/PKGBUILD new file mode 100644 index 0000000..889f4e4 --- /dev/null +++ b/x86_64/extra/libfontenc/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=libfontenc +pkgver=1.1.3 +pkgrel=1 +arch=('x86_64') +depends=(freetype2 libxtrans xorgproto) +source=(https://xorg.freedesktop.org/archive/individual/lib/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libfs/PKGBUILD b/x86_64/extra/libfs/PKGBUILD new file mode 100644 index 0000000..0821ba7 --- /dev/null +++ b/x86_64/extra/libfs/PKGBUILD @@ -0,0 +1,17 @@ +pkgname=libfs +pkgver=1.0.8 +pkgrel=1 +arch=('x86_64') +makedepends=(libxtrans util-macros xorgproto) +source=(https://xorg.freedesktop.org/releases/individual/lib/libFS-$pkgver.tar.bz2) + +build() { + cd libFS-$pkgver + ./configure --prefix=/usr --libdir=/usr/lib --sysconfdir=/etc + make +} + +package() { + cd libFS-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libgcrypt/PKGBUILD b/x86_64/extra/libgcrypt/PKGBUILD new file mode 100644 index 0000000..803166f --- /dev/null +++ b/x86_64/extra/libgcrypt/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=libgcrypt +pkgver=1.9.4 +pkgrel=2 +arch=('x86_64') +depends=(libgpg-error) +source=(https://gnupg.org/ftp/gcrypt/$pkgname/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libgdata/PKGBUILD b/x86_64/extra/libgdata/PKGBUILD new file mode 100644 index 0000000..c453e10 --- /dev/null +++ b/x86_64/extra/libgdata/PKGBUILD @@ -0,0 +1,32 @@ +pkgname=libgdata +pkgver=0.18.1 +pkgrel=1 +arch=('x86_64') +depends=(libsoup gnome-online-accounts gtk3+ json-glib vala + gcr gobject-introspection liboauth) +makedepends=(git gtk-doc) +source=(https://download.gnome.org/sources/libgdata/0.18/libgdata-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + meson \ + --prefix=/usr \ + --buildtype=release \ + -D gtk_doc=true \ + -D always_build_tests=false .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/libglvnd/PKGBUILD b/x86_64/extra/libglvnd/PKGBUILD new file mode 100644 index 0000000..5eeffd1 --- /dev/null +++ b/x86_64/extra/libglvnd/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=libglvnd +pkgver=1.4.0 +pkgrel=1 +pkgdesc="The GL Vendor-Neutral Dispatch library" +arch=('x86_64') +url="https://github.com/NVIDIA/libglvnd" +license=('custom:BSD-like') +makedepends=('libxext' 'libx11' 'xorgproto' 'python3' 'meson') +source=("https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v$pkgver/libglvnd-v$pkgver.tar.gz") + +build() { + meson $pkgname-v$pkgver build \ + --prefix=/usr \ + --buildtype=release + + ninja -C build +} + +package() { + # libglvnd needs mesa for indirect rendering + depends=('libxext' 'mesa') + + DESTDIR="$pkgdir" ninja -C build install +} diff --git a/x86_64/extra/libgpg-error/PKGBUILD b/x86_64/extra/libgpg-error/PKGBUILD new file mode 100644 index 0000000..d4cacc0 --- /dev/null +++ b/x86_64/extra/libgpg-error/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=libgpg-error +pkgver=1.42 +pkgrel=1 +arch=('x86_64') +source=(https://gnupg.org/ftp/gcrypt/$pkgname/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libgphoto2/PKGBUILD b/x86_64/extra/libgphoto2/PKGBUILD new file mode 100644 index 0000000..29c85f2 --- /dev/null +++ b/x86_64/extra/libgphoto2/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=libgphoto2 +pkgver=2.5.29 +pkgrel=1 +arch=(x86_64) +depends=(libexif libjpeg libusb libxml2 curl) +makedepends=(autoconf-archive git) +commitid=1691f4705cc08b08c7569ae3e83001ba8c3f28c2 # libgphoto2-2_5_29-release +source=("git+https://github.com/gphoto/libgphoto2#commit=$commitid") + +prepare() { + cd $pkgname + + autoreconf -fvi +} + +build() { + cd $pkgname + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname + + make DESTDIR="$pkgdir" install +} diff --git a/x86_64/extra/libgusb/PKGBUILD b/x86_64/extra/libgusb/PKGBUILD new file mode 100644 index 0000000..d823ccf --- /dev/null +++ b/x86_64/extra/libgusb/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=libgusb +pkgver=master +pkgrel=1 +arch=('x86_64') +depends=(glib2 libusb) +makedepends=(git gobject-introspection meson vala) +source=(git+https://github.com/hughsie/libgusb.git) + +build() { + meson libgusb build \ + --prefix=/usr \ + --libdir=/usr/lib \ + -D docs=false + + ninja -C build +} + +package() { + DESTDIR=$pkgdir ninja -C build install +} diff --git a/x86_64/extra/libical/PKGBUILD b/x86_64/extra/libical/PKGBUILD new file mode 100644 index 0000000..a2b8b88 --- /dev/null +++ b/x86_64/extra/libical/PKGBUILD @@ -0,0 +1,33 @@ +pkgname=libical +pkgver=3.0.13 +pkgrel=1 +arch=('x86_64') +depends=(gobject-introspection vala) +makedepends=(cmake) +source=(https://github.com/libical/libical/releases/download/v$pkgver/libical-$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DICAL_BUILD_DOCS=false \ + -DGOBJECT_INTROSPECTION=true \ + -DICAL_GLIB_VAPI=true \ + .. + + make +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libice/PKGBUILD b/x86_64/extra/libice/PKGBUILD new file mode 100644 index 0000000..254e0cc --- /dev/null +++ b/x86_64/extra/libice/PKGBUILD @@ -0,0 +1,17 @@ +pkgname=libice +pkgver=1.0.10 +pkgrel=1 +arch=('x86_64') +makedepends=(libxtrans util-macros xorgproto) +source=(https://xorg.freedesktop.org/releases/individual/lib/libICE-$pkgver.tar.bz2) + +build() { + cd libICE-$pkgver + ./configure --prefix=/usr --libdir=/usr/lib --sysconfdir=/etc + make +} + +package() { + cd libICE-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libidn/PKGBUILD b/x86_64/extra/libidn/PKGBUILD new file mode 100644 index 0000000..7f7de27 --- /dev/null +++ b/x86_64/extra/libidn/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=libidn +pkgver=1.40 +pkgrel=1 +arch=(x86_64) +depends=(glibc) +makedepends=(make) +source=(https://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libidn2/PKGBUILD b/x86_64/extra/libidn2/PKGBUILD new file mode 100644 index 0000000..8db4c3a --- /dev/null +++ b/x86_64/extra/libidn2/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=libidn2 +pkgver=2.3.2 +pkgrel=1 +arch=('x86_64') +depends=('libunistring') +source=(https://ftp.gnu.org/gnu/libidn/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libindicator/PKGBUILD b/x86_64/extra/libindicator/PKGBUILD new file mode 100644 index 0000000..eae58d6 --- /dev/null +++ b/x86_64/extra/libindicator/PKGBUILD @@ -0,0 +1,50 @@ +pkgname=libindicator +pkgver=12.10.1 +rev_ver=12.10 +pkgrel=1 +arch=(x86_64) +depends=(gtk2+ gtk3+ python3) +source=(https://launchpad.net/${pkgname}/$rev_ver/${pkgver}/+download/${pkgname}-${pkgver}.tar.gz + no-werror.patch) + +prepare() { + cd $pkgname-$pkgver + #patch -p0 -i ../no-werror.patch + sed -i 's/-Werror//' {libindicator,tools}/Makefile.am + autoreconf -fvi +} + +build() { + cd $pkgname-$pkgver + mkdir -p build2 build3 + # GTK2 + cd build2 + ./../configure \ + --prefix=/usr \ + --localstatedir=/var \ + --libexecdir=/usr/lib/libindicator \ + --sysconfdir=/etc \ + --with-gtk=2 \ + --disable-tests + + make + + # GTK3 + cd ../build3 + ./../configure \ + --prefix=/usr \ + --localstatedir=/var \ + --libexecdir=/usr/lib/libindicator \ + --sysconfdir=/etc \ + --with-gtk=3 \ + --disable-tests + + make +} + +package() { + cd $pkgname-$pkgver + + make -C build2 DESTDIR=$pkgdir install + make -C build3 DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libindicator/no-werror.patch b/x86_64/extra/libindicator/no-werror.patch new file mode 100644 index 0000000..252506c --- /dev/null +++ b/x86_64/extra/libindicator/no-werror.patch @@ -0,0 +1,321 @@ +diff -Naur libindicator-0.3.22-o/libindicator/Makefile.am libindicator-0.3.22/libindicator/Makefile.am +--- libindicator-0.3.22-o/libindicator/Makefile.am 2011-02-16 23:37:42.000000000 +0200 ++++ libindicator-0.3.22/libindicator/Makefile.am 2022-07-07 12:14:02.295024259 +0300 +@@ -44,8 +44,7 @@ + + libindicator_la_CFLAGS = \ + $(LIBINDICATOR_CFLAGS) \ +- -DG_LOG_DOMAIN=\"libindicator\" \ +- -Wall -Werror ++ -DG_LOG_DOMAIN=\"libindicator\" + + libindicator_la_LIBADD = \ + $(LIBINDICATOR_LIBS) +diff -Naur libindicator-0.3.22-o/libindicator/Makefile.in libindicator-0.3.22/libindicator/Makefile.in +--- libindicator-0.3.22-o/libindicator/Makefile.in 2011-03-23 20:13:38.000000000 +0200 ++++ libindicator-0.3.22/libindicator/Makefile.in 2022-07-07 12:14:28.110494008 +0300 +@@ -331,8 +331,7 @@ + + libindicator_la_CFLAGS = \ + $(LIBINDICATOR_CFLAGS) \ +- -DG_LOG_DOMAIN=\"libindicator\" \ +- -Wall -Werror ++ -DG_LOG_DOMAIN=\"libindicator\" + + libindicator_la_LIBADD = \ + $(LIBINDICATOR_LIBS) +diff -Naur libindicator-0.3.22-o/tests/Makefile.am libindicator-0.3.22/tests/Makefile.am +--- libindicator-0.3.22-o/tests/Makefile.am 2011-02-16 22:46:22.000000000 +0200 ++++ libindicator-0.3.22/tests/Makefile.am 2022-07-07 12:22:13.438658434 +0300 +@@ -35,7 +35,6 @@ + test-loader.c + + test_loader_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) \ + -DBUILD_DIR="\"$(builddir)\"" + +@@ -54,7 +53,6 @@ + test-desktop-shortcuts.c + + test_desktop_shortcuts_CFLAGS = \ +- -Wall -Werror \ + -DSRCDIR="\"$(srcdir)\"" \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) \ + -DBUILD_DIR="\"$(abs_builddir)\"" +@@ -88,7 +86,6 @@ + dummy-indicator-blank.c + + libdummy_indicator_blank_la_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + libdummy_indicator_blank_la_LIBADD = \ +@@ -108,7 +105,6 @@ + dummy-indicator-null.c + + libdummy_indicator_null_la_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + libdummy_indicator_null_la_LIBADD = \ +@@ -128,7 +124,6 @@ + dummy-indicator-signaler.c + + libdummy_indicator_signaler_la_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + libdummy_indicator_signaler_la_LIBADD = \ +@@ -148,7 +143,6 @@ + dummy-indicator-simple.c + + libdummy_indicator_simple_la_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + libdummy_indicator_simple_la_LIBADD = \ +@@ -170,7 +164,6 @@ + service-shutdown-timeout.c + + service_shutdown_timeout_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_shutdown_timeout_LDADD = \ +@@ -196,7 +189,6 @@ + service-manager-no-connect.c + + service_manager_no_connect_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_manager_no_connect_LDADD = \ +@@ -228,7 +220,6 @@ + service-manager-connect.c + + service_manager_connect_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_manager_connect_LDADD = \ +@@ -242,7 +233,6 @@ + service-manager-connect-service.c + + service_manager_connect_service_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_manager_connect_service_LDADD = \ +@@ -275,7 +265,6 @@ + service-version-manager.c + + service_version_manager_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_manager_LDADD = \ +@@ -290,7 +279,6 @@ + service-version-bad-service.c + + service_version_bad_service_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_bad_service_LDADD = \ +@@ -305,7 +293,6 @@ + service-version-good-service.c + + service_version_good_service_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_good_service_LDADD = \ +@@ -332,7 +319,6 @@ + service-version-multiwatch-manager.c + + service_version_multiwatch_manager_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_multiwatch_manager_LDADD = \ +@@ -347,7 +333,6 @@ + service-version-multiwatch-manager-impolite.c + + service_version_multiwatch_manager_impolite_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_multiwatch_manager_impolite_LDADD = \ +@@ -362,7 +347,6 @@ + service-version-multiwatch-service.c + + service_version_multiwatch_service_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_multiwatch_service_LDADD = \ +@@ -388,7 +372,6 @@ + service-manager-nostart-connect.c + + service_manager_nostart_connect_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_manager_nostart_connect_LDADD = \ +diff -Naur libindicator-0.3.22-o/tests/Makefile.in libindicator-0.3.22/tests/Makefile.in +--- libindicator-0.3.22-o/tests/Makefile.in 2011-03-23 20:13:38.000000000 +0200 ++++ libindicator-0.3.22/tests/Makefile.in 2022-07-07 12:22:12.030641851 +0300 +@@ -460,7 +460,6 @@ + test-loader.c + + test_loader_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) \ + -DBUILD_DIR="\"$(builddir)\"" + +@@ -473,7 +472,6 @@ + test-desktop-shortcuts.c + + test_desktop_shortcuts_CFLAGS = \ +- -Wall -Werror \ + -DSRCDIR="\"$(srcdir)\"" \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) \ + -DBUILD_DIR="\"$(abs_builddir)\"" +@@ -493,7 +491,6 @@ + dummy-indicator-blank.c + + libdummy_indicator_blank_la_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + libdummy_indicator_blank_la_LIBADD = \ +@@ -513,7 +510,6 @@ + dummy-indicator-null.c + + libdummy_indicator_null_la_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + libdummy_indicator_null_la_LIBADD = \ +@@ -533,7 +529,6 @@ + dummy-indicator-signaler.c + + libdummy_indicator_signaler_la_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + libdummy_indicator_signaler_la_LIBADD = \ +@@ -553,7 +548,6 @@ + dummy-indicator-simple.c + + libdummy_indicator_simple_la_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + libdummy_indicator_simple_la_LIBADD = \ +@@ -569,7 +563,6 @@ + service-shutdown-timeout.c + + service_shutdown_timeout_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_shutdown_timeout_LDADD = \ +@@ -581,7 +574,6 @@ + service-manager-no-connect.c + + service_manager_no_connect_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_manager_no_connect_LDADD = \ +@@ -593,7 +585,6 @@ + service-manager-connect.c + + service_manager_connect_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_manager_connect_LDADD = \ +@@ -605,7 +596,6 @@ + service-manager-connect-service.c + + service_manager_connect_service_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_manager_connect_service_LDADD = \ +@@ -618,7 +608,6 @@ + service-version-multiwatch-manager.c + + service_version_manager_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_manager_LDADD = \ +@@ -631,7 +620,6 @@ + service-version-bad-service.c + + service_version_bad_service_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_bad_service_LDADD = \ +@@ -644,7 +632,6 @@ + service-version-good-service.c + + service_version_good_service_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_good_service_LDADD = \ +@@ -653,7 +640,6 @@ + $(INDICATOR_LIB) + + service_version_multiwatch_manager_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_multiwatch_manager_LDADD = \ +@@ -666,7 +652,6 @@ + service-version-multiwatch-manager-impolite.c + + service_version_multiwatch_manager_impolite_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_multiwatch_manager_impolite_LDADD = \ +@@ -679,7 +664,6 @@ + service-version-multiwatch-service.c + + service_version_multiwatch_service_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_multiwatch_service_LDADD = \ +@@ -691,7 +675,6 @@ + service-manager-nostart-connect.c + + service_manager_nostart_connect_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_manager_nostart_connect_LDADD = \ +diff -Naur libindicator-0.3.22-o/tools/.Makefile.am.kate-swp libindicator-0.3.22/tools/.Makefile.am.kate-swp +--- libindicator-0.3.22-o/tools/.Makefile.am.kate-swp 1970-01-01 03:00:00.000000000 +0300 ++++ libindicator-0.3.22/tools/.Makefile.am.kate-swp 2022-07-07 12:23:24.627385530 +0300 +@@ -0,0 +1 @@ ++Kate Swap File 2.0(}4%'BSRUE +\ No newline at end of file +diff -Naur libindicator-0.3.22-o/tools/Makefile.in libindicator-0.3.22/tools/Makefile.in +--- libindicator-0.3.22-o/tools/Makefile.in 2011-03-23 20:13:38.000000000 +0200 ++++ libindicator-0.3.22/tools/Makefile.in 2022-07-07 12:23:32.775455502 +0300 +@@ -261,7 +261,6 @@ + indicator-loader.c + + indicator_loader_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) \ + -DBUILD_DIR="\"$(builddir)\"" + diff --git a/x86_64/extra/libinput/PKGBUILD b/x86_64/extra/libinput/PKGBUILD new file mode 100644 index 0000000..d557be1 --- /dev/null +++ b/x86_64/extra/libinput/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=libinput +pkgver=1.19.2 +pkgrel=1 +arch=('x86_64') +depends=('mtdev' 'systemd' 'glib2' 'libevdev' 'libwacom') +makedepends=('wayland-protocols' 'gtk+' 'meson') +source=(https://freedesktop.org/software/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + meson build $pkgname-$pkgver \ + --prefix=/usr \ + -D udev-dir=/usr/lib/udev \ + -D tests=false \ + -D documentation=false + + meson compile -C build +} + +package() { + DESTDIR=$pkgdir meson install -C build +} diff --git a/x86_64/extra/libiscsi/PKGBUILD b/x86_64/extra/libiscsi/PKGBUILD new file mode 100644 index 0000000..23c5743 --- /dev/null +++ b/x86_64/extra/libiscsi/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=libiscsi +pkgver=1.19.0 +pkgrel=1 +depends=('glibc' 'popt' 'libgcrypt') +makedepends=('git') +arch=(x86_64) +source=(libiscsi::git+https://github.com/sahlberg/libiscsi.git#tag=${pkgver}) + +prepare() { + cd "${srcdir}/${pkgname}" + + ./autogen.sh +} + +build() { + cd "${srcdir}/${pkgname}" + # Disabled werror due to GCC 8 warnings: https://github.com/sahlberg/libiscsi/issues/266 + ./configure --prefix=/usr --disable-static --libdir=/usr/lib --disable-werror + + make +} +package () { + cd "${srcdir}/${pkgname}" + + make DESTDIR="${pkgdir}" install +} diff --git a/x86_64/extra/libisoburn/PKGBUILD b/x86_64/extra/libisoburn/PKGBUILD new file mode 100644 index 0000000..15fbc66 --- /dev/null +++ b/x86_64/extra/libisoburn/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=libisoburn +pkgver=1.5.4 +pkgrel=2 +arch=('x86_64') +depends=('libburn' 'libisofs') +source=(https://dev.lovelyhq.com/libburnia/libisoburn/archive/release-$pkgver.tar.gz + efi_size_change.patch) + +prepare() { + cd $pkgname + + patch -p0 -i ../efi_size_change.patch +} + +build() { + cd $pkgname + + ./bootstrap + ./configure --prefix=/usr \ + --bindir=/bin \ + --sysconfdir=/etc \ + --docdir=/usr/share/doc/nano + make +} + +package() { + cd $pkgname + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libisoburn/efi_size_change.patch b/x86_64/extra/libisoburn/efi_size_change.patch new file mode 100644 index 0000000..f059e84 --- /dev/null +++ b/x86_64/extra/libisoburn/efi_size_change.patch @@ -0,0 +1,23 @@ +--- xorriso/write_run.c 2021-01-30 16:29:28.000000000 +0200 ++++ xorriso/write_run.c 2022-07-02 14:03:05.732629809 +0300 +@@ -743,16 +743,16 @@ + {ret= 0; goto ex;} + } + el_torito_set_boot_platform_id(bootimg, (uint8_t) platform_id); +- if(load_size / 512 > 65535) { ++ if(load_size / 512 > 256000) { + sprintf(xorriso->info_text, +- "Boot image load size exceeds 65535 blocks of 512 bytes. "); ++ "Boot image load size exceeds 256000 blocks of 512 bytes. "); + if(platform_id == 0xef) { + strcat(xorriso->info_text, + "Will record 0 in El Torito to extend ESP to end-of-medium."); + load_size= 0; + } else { +- strcat(xorriso->info_text, "Will record 65535 in El Torito."); +- load_size= 65535 * 512; ++ strcat(xorriso->info_text, "Will record 256000 in El Torito."); ++ load_size= 256000 * 512; + } + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0); + } diff --git a/x86_64/extra/libisofs/PKGBUILD b/x86_64/extra/libisofs/PKGBUILD new file mode 100644 index 0000000..9a9518c --- /dev/null +++ b/x86_64/extra/libisofs/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=libisofs +pkgver=1.5.4 +pkgrel=2 +arch=('x86_64') +depends=(glibc) +source=(https://dev.lovelyhq.com/libburnia/libisofs/archive/release-$pkgver.tar.gz + efi_boot_size.patch) + +prepare() { + cd $pkgname + + patch -p0 -i ../efi_boot_size.patch +} + +build() { + cd $pkgname + + ./bootstrap + ./configure --prefix=/usr \ + --bindir=/bin \ + --sysconfdir=/etc \ + --docdir=/usr/share/doc/nano + make +} + +package() { + cd $pkgname + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libisofs/efi_boot_size.patch b/x86_64/extra/libisofs/efi_boot_size.patch new file mode 100644 index 0000000..780bdc8 --- /dev/null +++ b/x86_64/extra/libisofs/efi_boot_size.patch @@ -0,0 +1,11 @@ +--- libisofs/eltorito.h 2022-07-02 14:14:23.906213082 +0300 ++++ libisofs/eltorito.h 2022-07-02 14:14:46.158005529 +0300 +@@ -185,7 +185,7 @@ + el_torito_set_isolinux_options() for patching (boot info table, + GRUB2 boot info, maybe others). + */ +-#define Libisofs_elto_max_patchablE (32 * 1024 * 1024) ++#define Libisofs_elto_max_patchablE (32 * 1024 * 3072) + + + #endif /* LIBISO_ELTORITO_H */ diff --git a/x86_64/extra/libjpeg/PKGBUILD b/x86_64/extra/libjpeg/PKGBUILD new file mode 100644 index 0000000..15e09b2 --- /dev/null +++ b/x86_64/extra/libjpeg/PKGBUILD @@ -0,0 +1,38 @@ +pkgname=libjpeg +pkgver=2.1.3 +pkgrel=1 +arch=('x86_64') +depends=(glibc openjdk-17) +makedepends=(cmake nasm openjdk-17) +source=(https://sourceforge.net/projects/$pkgname-turbo/files/$pkgver/$pkgname-turbo-$pkgver.tar.gz) + +build() { + cd $pkgname-turbo-$pkgver + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_INSTALL_LIBDIR=/usr/lib \ + -D CMAKE_BUILD_TYPE=Release \ + -D WITH_JAVA=ON \ + -D JAVA_AWT_LIBRARY=/opt/jdk-17/lib \ + -D JAVA_JVM_LIBRARY=/opt/jdk-17/lib \ + -D JAVA_INCLUDE_PATH=/opt/jdk-17/include \ + -D JAVA_INCLUDE_PATH2=/opt/jdk-17/include/linux \ + -D JAVA_AWT_INCLUDE_PATH=/opt/jdk-17/include \ + -D WITH_JPEG8=ON \ + -W no-dev \ + -B build \ + -S . + + make -C build -j4 +} + +package() { + cd $pkgname-turbo-$pkgver + make DESTDIR=$pkgdir install -C build + + install -m 644 jpegint.h $pkgdir/usr/include/ + install -m 644 jinclude.h $pkgdir/usr/include/ + install -m 644 jmemsys.h $pkgdir/usr/include/ + install -m 644 build/jconfigint.h $pkgdir/usr/include/ +} diff --git a/x86_64/extra/libksba/PKGBUILD b/x86_64/extra/libksba/PKGBUILD new file mode 100644 index 0000000..dd73265 --- /dev/null +++ b/x86_64/extra/libksba/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=libksba +pkgver=1.6.0 +pkgrel=1 +arch=('x86_64') +depends=(libgpg-error) +makedepends=(valgrind) +source=(https://www.gnupg.org/ftp/gcrypt/libksba/libksba-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libmd/PKGBUILD b/x86_64/extra/libmd/PKGBUILD new file mode 100644 index 0000000..deaded2 --- /dev/null +++ b/x86_64/extra/libmd/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=libmd +pkgver=1.0.4 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(glibc gcc) +source=(https://libbsd.freedesktop.org/releases/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libminigbm/PKGBUILD b/x86_64/extra/libminigbm/PKGBUILD new file mode 100644 index 0000000..02f642f --- /dev/null +++ b/x86_64/extra/libminigbm/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=libminigbm-git +pkgver=r305.ee98f4ec +pkgrel=1 +pkgdesc="Generic Buffer Management (GBM) implementation used in Chromium OS" +arch=(x86_64) +url="https://chromium.googlesource.com/chromiumos/platform/minigbm/" +makedepends=(clang) +source=("git+https://chromium.googlesource.com/chromiumos/platform/minigbm") + +build() { + cd minigbm + make CC=clang +} + +package() { + cd minigbm + make DESTDIR="${pkgdir}" install + + rm -rf $pkgdir/usr/{/include/gbm.h,/lib/libgbm.so*,/lib/libminizip*,/lib/pkgconfig/gbm.pc} + + ln -sf libminigbm.so.1.0.0 $pkgdir/usr/lib/libminigbm.so +} diff --git a/x86_64/extra/libmnl/PKGBUILD b/x86_64/extra/libmnl/PKGBUILD new file mode 100644 index 0000000..e47b04f --- /dev/null +++ b/x86_64/extra/libmnl/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=libmnl +pkgver=1.0.4 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(gcc) +source=(https://www.netfilter.org/projects/$pkgname/files/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libmtp/PKGBUILD b/x86_64/extra/libmtp/PKGBUILD new file mode 100644 index 0000000..9dda7f1 --- /dev/null +++ b/x86_64/extra/libmtp/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=libmtp +pkgver=1.1.19 +pkgrel=1 +arch=(x86_64) +depends=(libusb) +source=(https://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz{,.asc}) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --with-udev=/usr/lib/udev + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install +} \ No newline at end of file diff --git a/x86_64/extra/libndp/PKGBUILD b/x86_64/extra/libndp/PKGBUILD new file mode 100644 index 0000000..40430bc --- /dev/null +++ b/x86_64/extra/libndp/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=libndp +pkgver=1.8 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +commit=009ce9cd9b950ffa1f4f94c9436027b936850d0c +makedepends=(gcc git) +source=(git+https://github.com/jpirko/libndp#commit=$commit) + +prepare() { + cd $pkgname + ./autogen.sh +} + +build() { + cd $pkgname + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --libexecdir=/usr/lib + + make + +} + +package() { + cd $pkgname + + make DESTDIR="$pkgdir" install +} diff --git a/x86_64/extra/libnet/PKGBUILD b/x86_64/extra/libnet/PKGBUILD new file mode 100644 index 0000000..ee2613b --- /dev/null +++ b/x86_64/extra/libnet/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=libnet +pkgver=1.1.6 +pkgrel=1 +arch=('x86_64') +depends=(glibc coreutils) +makedepends=(doxygen) +source=(https://github.com/libnet/libnet/releases/download/v${pkgver}/libnet-${pkgver}.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + CFLAGS=-w \ + CXXFLAGS=-w \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libnetfilter_conntrack/PKGBUILD b/x86_64/extra/libnetfilter_conntrack/PKGBUILD new file mode 100644 index 0000000..dd92616 --- /dev/null +++ b/x86_64/extra/libnetfilter_conntrack/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=libnetfilter_conntrack +pkgver=1.0.8 +pkgrel=1 +arch=('x86_64') +depends=(libnfnetlink libmnl) +source=(https://www.netfilter.org/projects/$pkgname/files/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libnfnetlink/PKGBUILD b/x86_64/extra/libnfnetlink/PKGBUILD new file mode 100644 index 0000000..7697dc0 --- /dev/null +++ b/x86_64/extra/libnfnetlink/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=libnfnetlink +pkgver=1.0.1 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +source=(https://www.netfilter.org/projects/$pkgname/files/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libnftnl/PKGBUILD b/x86_64/extra/libnftnl/PKGBUILD new file mode 100644 index 0000000..a507e00 --- /dev/null +++ b/x86_64/extra/libnftnl/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=libnftnl +pkgver=1.2.1 +pkgrel=1 +arch=('x86_64') +depends=(libmnl) +makedepends=(gcc) +source=(https://netfilter.org/projects/libnftnl/files/libnftnl-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libnma/PKGBUILD b/x86_64/extra/libnma/PKGBUILD new file mode 100644 index 0000000..6d69f21 --- /dev/null +++ b/x86_64/extra/libnma/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=libnma +pkgver=1.8.32 +pkgrel=1 +arch=('x86_64') +depends=(gcr gtk+ iso-codes networkmanager) +makedepends=(vala) +source=(https://download.gnome.org/sources/libnma/1.8/$pkgname-$pkgver.tar.xz) + +prepare() { + mkdir -p $pkgname-$pkgver/build +} + +build() { + cd $pkgname-$pkgver/build + + meson \ + --prefix=/usr \ + --buildtype=release \ + -D gtk_doc=false \ + -D mobile_broadband_provider_info=false .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/libnotify/PKGBUILD b/x86_64/extra/libnotify/PKGBUILD new file mode 100644 index 0000000..99fe979 --- /dev/null +++ b/x86_64/extra/libnotify/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=libnotify +pkgver=0.7.9 +pkgrel=1 +arch=('x86_64') +depends=(gtk+) +makedepends=(gobject-introspection gtk-doc notification-daemon) +source=(https://download.gnome.org/sources/$pkgname/0.7/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + --buildtype=release \ + -D gtk_doc=false \ + -D man=false \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir meson install +} diff --git a/x86_64/extra/libnsl/PKGBUILD b/x86_64/extra/libnsl/PKGBUILD new file mode 100644 index 0000000..243e10b --- /dev/null +++ b/x86_64/extra/libnsl/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=libnsl +pkgver=2.0.0 +pkgrel=1 +arch=(x86_64) +depends=(libtirpc) +source=(https://github.com/thkukuk/libnsl/archive/v$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + autoreconf -fiv +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install +} diff --git a/x86_64/extra/liboauth/PKGBUILD b/x86_64/extra/liboauth/PKGBUILD new file mode 100644 index 0000000..e0649c5 --- /dev/null +++ b/x86_64/extra/liboauth/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=liboauth +pkgver=1.0.3 +pkgrel=1 +arch=('x86_64') +depends=(curl nss) +makedepends=(doxygen) +source=(https://downloads.sourceforge.net/liboauth/liboauth-$pkgver.tar.gz + https://www.linuxfromscratch.org/patches/blfs/svn/liboauth-$pkgver-openssl-1.1.0-3.patch) + +prepare() { + cd $pkgname-$pkgver + + patch -Np1 -i ../liboauth-1.0.3-openssl-1.1.0-3.patch +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/liboauth/liboauth-1.0.3-openssl-1.1.0-3.patch b/x86_64/extra/liboauth/liboauth-1.0.3-openssl-1.1.0-3.patch new file mode 100644 index 0000000..a6ff453 --- /dev/null +++ b/x86_64/extra/liboauth/liboauth-1.0.3-openssl-1.1.0-3.patch @@ -0,0 +1,152 @@ +Submitted by: DJ Lucas (dj at linuxfromscratch dot org) +Date: 2017-05-27 +Initial Package Version: 1.0.3 +Update by: Bruce Dubbs +Date: 2017-06-14 +Update by (#2): Douglas R. Reno +Date: 2019-01-02 +Upstream Status: Submitted +Origin: https://github.com/x42/liboauth/issues/9 +Description: Fixes build issue with OpenSSL_1.1.0. +Update: Additional fix from upstream. Three lines changed. +Update #2: Rebased patch, and fixed one more missed reference to md_ctx. + +diff -Naurp liboauth-1.0.3.orig/src/hash.c liboauth-1.0.3/src/hash.c +--- liboauth-1.0.3.orig/src/hash.c 2013-10-04 08:02:50.000000000 -0500 ++++ liboauth-1.0.3/src/hash.c 2019-01-01 23:41:47.027037421 -0600 +@@ -362,6 +362,12 @@ looser: + #include "oauth.h" // base64 encode fn's. + #include + ++ ++#if OPENSSL_VERSION_NUMBER < 0x10100000 ++#define EVP_MD_CTX_new EVP_MD_CTX_create ++#define EVP_MD_CTX_free EVP_MD_CTX_destroy ++#endif ++ + char *oauth_sign_hmac_sha1 (const char *m, const char *k) { + return(oauth_sign_hmac_sha1_raw (m, strlen(m), k, strlen(k))); + } +@@ -386,7 +392,7 @@ char *oauth_sign_rsa_sha1 (const char *m + unsigned char *sig = NULL; + unsigned char *passphrase = NULL; + unsigned int len=0; +- EVP_MD_CTX md_ctx; ++ EVP_MD_CTX *md_ctx; + + EVP_PKEY *pkey; + BIO *in; +@@ -399,24 +405,31 @@ char *oauth_sign_rsa_sha1 (const char *m + return xstrdup("liboauth/OpenSSL: can not read private key"); + } + ++ md_ctx = EVP_MD_CTX_new(); ++ if (md_ctx == NULL) { ++ return xstrdup("liboauth/OpenSSL: failed to allocate EVP_MD_CTX"); ++ } ++ + len = EVP_PKEY_size(pkey); + sig = (unsigned char*)xmalloc((len+1)*sizeof(char)); + +- EVP_SignInit(&md_ctx, EVP_sha1()); +- EVP_SignUpdate(&md_ctx, m, strlen(m)); +- if (EVP_SignFinal (&md_ctx, sig, &len, pkey)) { ++ EVP_SignInit(md_ctx, EVP_sha1()); ++ EVP_SignUpdate(md_ctx, m, strlen(m)); ++ if (EVP_SignFinal (md_ctx, sig, &len, pkey)) { + char *tmp; + sig[len] = '\0'; + tmp = oauth_encode_base64(len,sig); + OPENSSL_free(sig); + EVP_PKEY_free(pkey); ++ EVP_MD_CTX_free(md_ctx); + return tmp; + } ++ EVP_MD_CTX_free(md_ctx); + return xstrdup("liboauth/OpenSSL: rsa-sha1 signing failed"); + } + + int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *s) { +- EVP_MD_CTX md_ctx; ++ EVP_MD_CTX *md_ctx; + EVP_PKEY *pkey; + BIO *in; + X509 *cert = NULL; +@@ -437,13 +450,19 @@ int oauth_verify_rsa_sha1 (const char *m + return -2; + } + ++ ++ md_ctx = EVP_MD_CTX_new(); ++ if (md_ctx == NULL) { ++ return -2; ++ } ++ + b64d= (unsigned char*) xmalloc(sizeof(char)*strlen(s)); + slen = oauth_decode_base64(b64d, s); + +- EVP_VerifyInit(&md_ctx, EVP_sha1()); +- EVP_VerifyUpdate(&md_ctx, m, strlen(m)); +- err = EVP_VerifyFinal(&md_ctx, b64d, slen, pkey); +- EVP_MD_CTX_cleanup(&md_ctx); ++ EVP_VerifyInit(md_ctx, EVP_sha1()); ++ EVP_VerifyUpdate(md_ctx, m, strlen(m)); ++ err = EVP_VerifyFinal(md_ctx, b64d, slen, pkey); ++ EVP_MD_CTX_free(md_ctx); + EVP_PKEY_free(pkey); + xfree(b64d); + return (err); +@@ -455,35 +474,41 @@ int oauth_verify_rsa_sha1 (const char *m + */ + char *oauth_body_hash_file(char *filename) { + unsigned char fb[BUFSIZ]; +- EVP_MD_CTX ctx; ++ EVP_MD_CTX *ctx; + size_t len=0; + unsigned char *md; + FILE *F= fopen(filename, "r"); + if (!F) return NULL; + +- EVP_MD_CTX_init(&ctx); +- EVP_DigestInit(&ctx,EVP_sha1()); ++ ctx = EVP_MD_CTX_new(); ++ if (ctx == NULL) { ++ return xstrdup("liboauth/OpenSSL: failed to allocate EVP_MD_CTX"); ++ } ++ EVP_DigestInit(ctx,EVP_sha1()); + while (!feof(F) && (len=fread(fb,sizeof(char),BUFSIZ, F))>0) { +- EVP_DigestUpdate(&ctx, fb, len); ++ EVP_DigestUpdate(ctx, fb, len); + } + fclose(F); + len=0; + md=(unsigned char*) xcalloc(EVP_MD_size(EVP_sha1()),sizeof(unsigned char)); +- EVP_DigestFinal(&ctx, md,(unsigned int*) &len); +- EVP_MD_CTX_cleanup(&ctx); ++ EVP_DigestFinal(ctx, md,(unsigned int*) &len); ++ EVP_MD_CTX_free(ctx); + return oauth_body_hash_encode(len, md); + } + + char *oauth_body_hash_data(size_t length, const char *data) { +- EVP_MD_CTX ctx; ++ EVP_MD_CTX *ctx; + size_t len=0; + unsigned char *md; + md=(unsigned char*) xcalloc(EVP_MD_size(EVP_sha1()),sizeof(unsigned char)); +- EVP_MD_CTX_init(&ctx); +- EVP_DigestInit(&ctx,EVP_sha1()); +- EVP_DigestUpdate(&ctx, data, length); +- EVP_DigestFinal(&ctx, md,(unsigned int*) &len); +- EVP_MD_CTX_cleanup(&ctx); ++ ctx = EVP_MD_CTX_new(); ++ if (ctx == NULL) { ++ return xstrdup("liboauth/OpenSSL: failed to allocate EVP_MD_CTX"); ++ } ++ EVP_DigestInit(ctx,EVP_sha1()); ++ EVP_DigestUpdate(ctx, data, length); ++ EVP_DigestFinal(ctx, md,(unsigned int*) &len); ++ EVP_MD_CTX_free(ctx); + return oauth_body_hash_encode(len, md); + } + diff --git a/x86_64/extra/libogg/PKGBUILD b/x86_64/extra/libogg/PKGBUILD new file mode 100644 index 0000000..2b939bd --- /dev/null +++ b/x86_64/extra/libogg/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=libogg +pkgver=1.3.5 +pkgrel=1 +arch=('x86_64') +source=(https://downloads.xiph.org/releases/ogg/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libomxil-bellagio/PKGBUILD b/x86_64/extra/libomxil-bellagio/PKGBUILD new file mode 100644 index 0000000..a257e7d --- /dev/null +++ b/x86_64/extra/libomxil-bellagio/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=libomxil-bellagio +pkgver=0.9.3 +pkgrel=1 +arch=('x86_64') +depends=('glibc') +source=("https://downloads.sourceforge.net/project/omxil/omxil/Bellagio%200.9.3/$pkgname-$pkgver.tar.gz" + fedora-fixes.patch) + +prepare() { + cd $pkgname-$pkgver + + patch -Np1 -i ../fedora-fixes.patch + sed -e 's/-Werror//' -i configure.ac + autoreconf -fiv +} + +build() { + cd $pkgname-$pkgver + + CFLAGS+=' -fcommon' + + ./configure --prefix=/usr --docdir=/usr/share/doc/$pkgname + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libomxil-bellagio/fedora-fixes.patch b/x86_64/extra/libomxil-bellagio/fedora-fixes.patch new file mode 100644 index 0000000..2ae3c3c --- /dev/null +++ b/x86_64/extra/libomxil-bellagio/fedora-fixes.patch @@ -0,0 +1,199 @@ +When libomxdynamicloader.so is loaded, it complains that RM_Deinit can't be resolved. +Link explicitly against omxil-bellagio so that ld.so can find the reference. + +Signed-off-by: Qais Yousef + +--- bellagio-0.9.3/src/dynamic_loader/Makefile.am.old 2012-03-23 15:07:47.379021034 +0000 ++++ bellagio-0.9.3/src/dynamic_loader/Makefile.am 2012-03-23 15:08:47.563034818 +0000 +@@ -3,7 +3,7 @@ + omxdynamicloader_LTLIBRARIES = libomxdynamicloader.la + libomxdynamicloader_la_SOURCES = ste_dynamic_component_loader.c ste_dynamic_component_loader.h + +-libomxdynamicloader_la_LDFLAGS = ++libomxdynamicloader_la_LDFLAGS = -L$(abs_top_srcdir)/src/.libs -lomxil-bellagio + libomxdynamicloader_la_CFLAGS = -I$(top_srcdir)/include \ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/src/base \ +Fix dependency issue to allow parallel build + +Signed-off-by: Qais Yousef + +Index: bellagio-0.9.3/src/Makefile.am +=================================================================== +--- bellagio-0.9.3.orig/src/Makefile.am ++++ bellagio-0.9.3/src/Makefile.am +@@ -8,6 +8,7 @@ omxregister_bellagio_SOURCES = omxregist + omxregister_bellagio_CFLAGS = -DOMXILCOMPONENTSPATH=\"$(plugindir)/\" \ + -I$(top_srcdir)/include + omxregister_bellagio_LDFLAGS = -lomxil-bellagio -L$(builddir) ++omxregister_bellagio_DEPENDENCIES = libomxil-bellagio.la + + lib_LTLIBRARIES = libomxil-bellagio.la + libomxil_bellagio_la_SOURCES = component_loader.h \ +We always access globalComponentList[] at indexComponent=-1 which causes a +segfault. Use i as the index instead. + +Signed-off-by: Qais Yousef + +--- bellagio-0.9.3/src/omx_reference_resource_manager.c.old 2012-03-13 10:15:25.743940980 +0000 ++++ bellagio-0.9.3/src/omx_reference_resource_manager.c 2012-03-13 10:18:02.201971009 +0000 +@@ -485,7 +485,6 @@ + OMX_ERRORTYPE RM_removeFromWaitForResource(OMX_COMPONENTTYPE *openmaxStandComp) { + omx_base_component_PrivateType* omx_base_component_Private; + int i = 0; +- int indexComponent = -1; + + DEBUG(DEB_LEV_FUNCTION_NAME, "In %s\n", __func__); + omx_base_component_Private = (omx_base_component_PrivateType*)openmaxStandComp->pComponentPrivate; +@@ -493,16 +492,13 @@ + while(listOfcomponentRegistered[i].component_name != NULL ) { + if (!strcmp(listOfcomponentRegistered[i].component_name, omx_base_component_Private->name)) { + // found component in the list of the resource manager +- removeElemFromList(&globalComponentList[indexComponent], openmaxStandComp); +- break; ++ removeElemFromList(&globalComponentList[i], openmaxStandComp); ++ DEBUG(DEB_LEV_FUNCTION_NAME, "Out of %s\n", __func__); ++ return OMX_ErrorNone; + } + i++; + } +- if (indexComponent <0) { +- // No resource to be handled +- DEBUG(DEB_LEV_ERR, "In %s No resource to be handled\n", __func__); +- return OMX_ErrorNone; +- } +- DEBUG(DEB_LEV_FUNCTION_NAME, "Out of %s\n", __func__); ++ // No resource to be handled ++ DEBUG(DEB_LEV_ERR, "In %s No resource to be handled\n", __func__); + return OMX_ErrorNone; + } + OMX_INDEXTYPE/OMX_INDEXVENDORTYPE in one switch + src/base/omx_base_component.c | 54 ++++++++++++++++++++++------------------- + 1 files changed, 29 insertions(+), 25 deletions(-) +--- a/src/base/omx_base_component.c ++++ a/src/base/omx_base_component.c +@@ -915,14 +915,6 @@ OSCL_EXPORT_REF OSCL_EXPORT_REF OMX_ERRORTYPE omx_base_component_GetParameter( + return OMX_ErrorBadParameter; + } + switch(nParamIndex) { +- case OMX_IndexParameterThreadsID: +- if ((err = checkHeader(ComponentParameterStructure, sizeof(OMX_PARAM_BELLAGIOTHREADS_ID))) != OMX_ErrorNone) { +- break; +- } +- threadID = (OMX_PARAM_BELLAGIOTHREADS_ID *)ComponentParameterStructure; +- threadID->nThreadBufferMngtID = omx_base_component_Private->bellagioThreads->nThreadBufferMngtID; +- threadID->nThreadMessageID = omx_base_component_Private->bellagioThreads->nThreadMessageID; +- break; + case OMX_IndexParamAudioInit: + case OMX_IndexParamVideoInit: + case OMX_IndexParamImageInit: +@@ -988,28 +980,40 @@ OSCL_EXPORT_REF OSCL_EXPORT_REF OMX_ERRORTYPE omx_base_component_GetParameter( + } + } + break; +- case OMX_IndexVendorCompPropTunnelFlags: +- pPropTunnelSetup = (OMX_VENDOR_PROP_TUNNELSETUPTYPE*)ComponentParameterStructure; ++ default: ++ /* additional switch statement for extended OMX_INDEXTYPE */ ++ switch((OMX_INDEXVENDORTYPE) nParamIndex) { ++ case OMX_IndexParameterThreadsID: ++ if ((err = checkHeader(ComponentParameterStructure, sizeof(OMX_PARAM_BELLAGIOTHREADS_ID))) != OMX_ErrorNone) { ++ break; ++ } ++ threadID = (OMX_PARAM_BELLAGIOTHREADS_ID *)ComponentParameterStructure; ++ threadID->nThreadBufferMngtID = omx_base_component_Private->bellagioThreads->nThreadBufferMngtID; ++ threadID->nThreadMessageID = omx_base_component_Private->bellagioThreads->nThreadMessageID; ++ break; ++ case OMX_IndexVendorCompPropTunnelFlags: ++ pPropTunnelSetup = (OMX_VENDOR_PROP_TUNNELSETUPTYPE*)ComponentParameterStructure; + +- if (pPropTunnelSetup->nPortIndex >= (omx_base_component_Private->sPortTypesParam[OMX_PortDomainAudio].nPorts + +- omx_base_component_Private->sPortTypesParam[OMX_PortDomainVideo].nPorts + +- omx_base_component_Private->sPortTypesParam[OMX_PortDomainImage].nPorts + +- omx_base_component_Private->sPortTypesParam[OMX_PortDomainOther].nPorts)) { ++ if (pPropTunnelSetup->nPortIndex >= (omx_base_component_Private->sPortTypesParam[OMX_PortDomainAudio].nPorts + ++ omx_base_component_Private->sPortTypesParam[OMX_PortDomainVideo].nPorts + ++ omx_base_component_Private->sPortTypesParam[OMX_PortDomainImage].nPorts + ++ omx_base_component_Private->sPortTypesParam[OMX_PortDomainOther].nPorts)) { + +- DEBUG(DEB_LEV_ERR,"In %s OMX_IndexVendorCompPropTunnelFlags nPortIndex=%d Line=%d \n", +- __func__,(int)pPropTunnelSetup->nPortIndex,__LINE__); ++ DEBUG(DEB_LEV_ERR,"In %s OMX_IndexVendorCompPropTunnelFlags nPortIndex=%d Line=%d \n", ++ __func__,(int)pPropTunnelSetup->nPortIndex,__LINE__); + +- return OMX_ErrorBadPortIndex; +- } ++ return OMX_ErrorBadPortIndex; ++ } + +- pPort = omx_base_component_Private->ports[pPropTunnelSetup->nPortIndex]; ++ pPort = omx_base_component_Private->ports[pPropTunnelSetup->nPortIndex]; + +- pPropTunnelSetup->nTunnelSetup.nTunnelFlags = pPort->nTunnelFlags; +- pPropTunnelSetup->nTunnelSetup.eSupplier = pPort->eBufferSupplier; +- break; +- default: +- err = OMX_ErrorUnsupportedIndex; +- break; ++ pPropTunnelSetup->nTunnelSetup.nTunnelFlags = pPort->nTunnelFlags; ++ pPropTunnelSetup->nTunnelSetup.eSupplier = pPort->eBufferSupplier; ++ break; ++ default: ++ err = OMX_ErrorUnsupportedIndex; ++ break; ++ } + } + DEBUG(DEB_LEV_FUNCTION_NAME, "Out of %s for component %p\n", __func__, hComponent); + return err; +diff -up libomxil-bellagio-0.9.3/Makefile.am.nodoc libomxil-bellagio-0.9.3/Makefile.am +--- libomxil-bellagio-0.9.3/Makefile.am.nodoc 2011-01-12 08:53:26.000000000 +0100 ++++ libomxil-bellagio-0.9.3/Makefile.am 2012-04-23 13:46:15.410823381 +0200 +@@ -7,7 +7,6 @@ EXTRA_DIST = libomxil-bellagio.spec + pkgconfigdir = $(libdir)/pkgconfig + pkgconfig_DATA = libomxil-bellagio.pc + +-docdir = $(DESTDIR)$(prefix)/share/doc/@PACKAGE@ + doc_DATA = README \ + ChangeLog \ + TODO +diff -up libomxil-bellagio-0.9.3/src/omxregister.c.unused libomxil-bellagio-0.9.3/src/omxregister.c +--- libomxil-bellagio-0.9.3/src/omxregister.c.unused 2011-01-12 08:53:26.000000000 +0100 ++++ libomxil-bellagio-0.9.3/src/omxregister.c 2012-12-10 22:02:28.621695659 +0100 +@@ -248,7 +248,15 @@ static int buildComponentsList(FILE* omx + } + fptr(stComponents); + err = fwrite(lib_absolute_path, 1, strlen(lib_absolute_path), omxregistryfp); +- err = fwrite("\n", 1, 1, omxregistryfp); ++ if (err != strlen(lib_absolute_path)) { ++ DEBUG(DEB_LEV_ERR, "Failed to write %zu bytes to fd %d\n", strlen(lib_absolute_path), fileno(omxregistryfp)); ++ continue; ++ } ++ err = fwrite("\n", 1, strlen(buffer), omxregistryfp); ++ if (err != strlen(buffer)) { ++ DEBUG(DEB_LEV_ERR, "Failed to write %zu bytes to fd %d\n", strlen(buffer), fileno(omxregistryfp)); ++ continue; ++ } + + + for (i = 0; i "$pkgdir"/etc/papersize + + # add libpaper.d directory other packages can use to store files + install -dm 755 "$pkgdir"/etc/libpaper.d + + # add localisation + pushd debian/po + for i in `ls *.po`; do + install -dm 755 "${pkgdir}"/usr/share/locale/${i%.po}/LC_MESSAGES/; + msgfmt $i -o "${pkgdir}"/usr/share/locale/${i%.po}/LC_MESSAGES/${pkgname}.mo; + done + popd +} diff --git a/x86_64/extra/libpcap/PKGBUILD b/x86_64/extra/libpcap/PKGBUILD new file mode 100644 index 0000000..923b485 --- /dev/null +++ b/x86_64/extra/libpcap/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=libpcap +pkgver=1.10.1 +pkgrel=1 +arch=(x86_64) +depends=(glibc libnl bash libusb) +makedepends=(bluez dbus) +source=("https://www.tcpdump.org/release/${pkgname}-${pkgver}.tar.gz") + +prepare() { + cd $pkgname-$pkgver + + autoreconf -fiv +} + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr \ + --enable-ipv6 \ + --enable-bluetooth \ + --enable-usb \ + --with-libnl + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install +} \ No newline at end of file diff --git a/x86_64/extra/libpciaccess/PKGBUILD b/x86_64/extra/libpciaccess/PKGBUILD new file mode 100644 index 0000000..11f915a --- /dev/null +++ b/x86_64/extra/libpciaccess/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=libpciaccess +pkgver=0.16 +pkgrel=1 +arch=('x86_64') +depends=('fontconfig' 'libxcb') +source=(https://x.org/releases/individual/lib/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libpipeline/PKGBUILD b/x86_64/extra/libpipeline/PKGBUILD new file mode 100644 index 0000000..8eea53e --- /dev/null +++ b/x86_64/extra/libpipeline/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=libpipeline +pkgver=1.5.3 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +source=(https://download.savannah.gnu.org/releases/$pkgname/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + [ -d /tools ] && export PKG_CONFIG_PATH=/tools/lib/pkgconfig + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libpng/PKGBUILD b/x86_64/extra/libpng/PKGBUILD new file mode 100644 index 0000000..4d36329 --- /dev/null +++ b/x86_64/extra/libpng/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=libpng +pkgver=1.6.37 +pkgrel=1 +arch=('x86_64') +depends=(zlib bash) +source=(https://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.xz + https://downloads.sourceforge.net/project/apng/libpng/libpng16/$pkgname-$pkgver-apng.patch.gz) + +build() { + cd $pkgname-$pkgver + + gzip -cd $SRC/$pkgname-$pkgver-apng.patch.gz | patch -p0 + + LIBS=-lpthread ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libpng/libpng-1.6.37-apng.patch b/x86_64/extra/libpng/libpng-1.6.37-apng.patch new file mode 100644 index 0000000..8aaa50b --- /dev/null +++ b/x86_64/extra/libpng/libpng-1.6.37-apng.patch @@ -0,0 +1,1728 @@ +diff -Naru libpng-1.6.37.org/png.h libpng-1.6.37/png.h +--- libpng-1.6.37.org/png.h 2019-04-19 07:21:37.398024800 +0900 ++++ libpng-1.6.37/png.h 2019-04-19 07:22:37.871245630 +0900 +@@ -330,6 +330,10 @@ + # include "pnglibconf.h" + #endif + ++#define PNG_APNG_SUPPORTED ++#define PNG_READ_APNG_SUPPORTED ++#define PNG_WRITE_APNG_SUPPORTED ++ + #ifndef PNG_VERSION_INFO_ONLY + /* Machine specific configuration. */ + # include "pngconf.h" +@@ -425,6 +429,17 @@ + * See pngconf.h for base types that vary by machine/system + */ + ++#ifdef PNG_APNG_SUPPORTED ++/* dispose_op flags from inside fcTL */ ++#define PNG_DISPOSE_OP_NONE 0x00U ++#define PNG_DISPOSE_OP_BACKGROUND 0x01U ++#define PNG_DISPOSE_OP_PREVIOUS 0x02U ++ ++/* blend_op flags from inside fcTL */ ++#define PNG_BLEND_OP_SOURCE 0x00U ++#define PNG_BLEND_OP_OVER 0x01U ++#endif /* PNG_APNG_SUPPORTED */ ++ + /* This triggers a compiler error in png.c, if png.c and png.h + * do not agree upon the version number. + */ +@@ -746,6 +761,10 @@ + #define PNG_INFO_sCAL 0x4000U /* ESR, 1.0.6 */ + #define PNG_INFO_IDAT 0x8000U /* ESR, 1.0.6 */ + #define PNG_INFO_eXIf 0x10000U /* GR-P, 1.6.31 */ ++#ifdef PNG_APNG_SUPPORTED ++#define PNG_INFO_acTL 0x20000U ++#define PNG_INFO_fcTL 0x40000U ++#endif + + /* This is used for the transformation routines, as some of them + * change these values for the row. It also should enable using +@@ -783,6 +802,10 @@ + #ifdef PNG_PROGRESSIVE_READ_SUPPORTED + typedef PNG_CALLBACK(void, *png_progressive_info_ptr, (png_structp, png_infop)); + typedef PNG_CALLBACK(void, *png_progressive_end_ptr, (png_structp, png_infop)); ++#ifdef PNG_APNG_SUPPORTED ++typedef PNG_CALLBACK(void, *png_progressive_frame_ptr, (png_structp, ++ png_uint_32)); ++#endif + + /* The following callback receives png_uint_32 row_number, int pass for the + * png_bytep data of the row. When transforming an interlaced image the +@@ -3226,6 +3249,74 @@ + /******************************************************************************* + * END OF HARDWARE AND SOFTWARE OPTIONS + ******************************************************************************/ ++#ifdef PNG_APNG_SUPPORTED ++PNG_EXPORT(250, png_uint_32, png_get_acTL, (png_structp png_ptr, ++ png_infop info_ptr, png_uint_32 *num_frames, png_uint_32 *num_plays)); ++ ++PNG_EXPORT(251, png_uint_32, png_set_acTL, (png_structp png_ptr, ++ png_infop info_ptr, png_uint_32 num_frames, png_uint_32 num_plays)); ++ ++PNG_EXPORT(252, png_uint_32, png_get_num_frames, (png_structp png_ptr, ++ png_infop info_ptr)); ++ ++PNG_EXPORT(253, png_uint_32, png_get_num_plays, (png_structp png_ptr, ++ png_infop info_ptr)); ++ ++PNG_EXPORT(254, png_uint_32, png_get_next_frame_fcTL, ++ (png_structp png_ptr, png_infop info_ptr, png_uint_32 *width, ++ png_uint_32 *height, png_uint_32 *x_offset, png_uint_32 *y_offset, ++ png_uint_16 *delay_num, png_uint_16 *delay_den, png_byte *dispose_op, ++ png_byte *blend_op)); ++ ++PNG_EXPORT(255, png_uint_32, png_set_next_frame_fcTL, ++ (png_structp png_ptr, png_infop info_ptr, png_uint_32 width, ++ png_uint_32 height, png_uint_32 x_offset, png_uint_32 y_offset, ++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op, ++ png_byte blend_op)); ++ ++PNG_EXPORT(256, png_uint_32, png_get_next_frame_width, ++ (png_structp png_ptr, png_infop info_ptr)); ++PNG_EXPORT(257, png_uint_32, png_get_next_frame_height, ++ (png_structp png_ptr, png_infop info_ptr)); ++PNG_EXPORT(258, png_uint_32, png_get_next_frame_x_offset, ++ (png_structp png_ptr, png_infop info_ptr)); ++PNG_EXPORT(259, png_uint_32, png_get_next_frame_y_offset, ++ (png_structp png_ptr, png_infop info_ptr)); ++PNG_EXPORT(260, png_uint_16, png_get_next_frame_delay_num, ++ (png_structp png_ptr, png_infop info_ptr)); ++PNG_EXPORT(261, png_uint_16, png_get_next_frame_delay_den, ++ (png_structp png_ptr, png_infop info_ptr)); ++PNG_EXPORT(262, png_byte, png_get_next_frame_dispose_op, ++ (png_structp png_ptr, png_infop info_ptr)); ++PNG_EXPORT(263, png_byte, png_get_next_frame_blend_op, ++ (png_structp png_ptr, png_infop info_ptr)); ++PNG_EXPORT(264, png_byte, png_get_first_frame_is_hidden, ++ (png_structp png_ptr, png_infop info_ptr)); ++PNG_EXPORT(265, png_uint_32, png_set_first_frame_is_hidden, ++ (png_structp png_ptr, png_infop info_ptr, png_byte is_hidden)); ++ ++#ifdef PNG_READ_APNG_SUPPORTED ++PNG_EXPORT(266, void, png_read_frame_head, (png_structp png_ptr, ++ png_infop info_ptr)); ++#ifdef PNG_PROGRESSIVE_READ_SUPPORTED ++PNG_EXPORT(267, void, png_set_progressive_frame_fn, (png_structp png_ptr, ++ png_progressive_frame_ptr frame_info_fn, ++ png_progressive_frame_ptr frame_end_fn)); ++#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ ++#endif /* PNG_READ_APNG_SUPPORTED */ ++ ++#ifdef PNG_WRITE_APNG_SUPPORTED ++PNG_EXPORT(268, void, png_write_frame_head, (png_structp png_ptr, ++ png_infop info_ptr, png_bytepp row_pointers, ++ png_uint_32 width, png_uint_32 height, ++ png_uint_32 x_offset, png_uint_32 y_offset, ++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op, ++ png_byte blend_op)); ++ ++PNG_EXPORT(269, void, png_write_frame_tail, (png_structp png_ptr, ++ png_infop info_ptr)); ++#endif /* PNG_WRITE_APNG_SUPPORTED */ ++#endif /* PNG_APNG_SUPPORTED */ + + /* Maintainer: Put new public prototypes here ^, in libpng.3, in project + * defs, and in scripts/symbols.def. +@@ -3235,7 +3326,11 @@ + * one to use is one more than this.) + */ + #ifdef PNG_EXPORT_LAST_ORDINAL ++#ifdef PNG_APNG_SUPPORTED ++ PNG_EXPORT_LAST_ORDINAL(269); ++#else + PNG_EXPORT_LAST_ORDINAL(249); ++#endif /* PNG_APNG_SUPPORTED */ + #endif + + #ifdef __cplusplus +diff -Naru libpng-1.6.37.org/pngget.c libpng-1.6.37/pngget.c +--- libpng-1.6.37.org/pngget.c 2019-04-19 07:21:37.399024787 +0900 ++++ libpng-1.6.37/pngget.c 2019-04-19 07:22:37.850245901 +0900 +@@ -1246,4 +1246,166 @@ + # endif + #endif + ++#ifdef PNG_APNG_SUPPORTED ++png_uint_32 PNGAPI ++png_get_acTL(png_structp png_ptr, png_infop info_ptr, ++ png_uint_32 *num_frames, png_uint_32 *num_plays) ++{ ++ png_debug1(1, "in %s retrieval function", "acTL"); ++ ++ if (png_ptr != NULL && info_ptr != NULL && ++ (info_ptr->valid & PNG_INFO_acTL) && ++ num_frames != NULL && num_plays != NULL) ++ { ++ *num_frames = info_ptr->num_frames; ++ *num_plays = info_ptr->num_plays; ++ return (1); ++ } ++ ++ return (0); ++} ++ ++png_uint_32 PNGAPI ++png_get_num_frames(png_structp png_ptr, png_infop info_ptr) ++{ ++ png_debug(1, "in png_get_num_frames()"); ++ ++ if (png_ptr != NULL && info_ptr != NULL) ++ return (info_ptr->num_frames); ++ return (0); ++} ++ ++png_uint_32 PNGAPI ++png_get_num_plays(png_structp png_ptr, png_infop info_ptr) ++{ ++ png_debug(1, "in png_get_num_plays()"); ++ ++ if (png_ptr != NULL && info_ptr != NULL) ++ return (info_ptr->num_plays); ++ return (0); ++} ++ ++png_uint_32 PNGAPI ++png_get_next_frame_fcTL(png_structp png_ptr, png_infop info_ptr, ++ png_uint_32 *width, png_uint_32 *height, ++ png_uint_32 *x_offset, png_uint_32 *y_offset, ++ png_uint_16 *delay_num, png_uint_16 *delay_den, ++ png_byte *dispose_op, png_byte *blend_op) ++{ ++ png_debug1(1, "in %s retrieval function", "fcTL"); ++ ++ if (png_ptr != NULL && info_ptr != NULL && ++ (info_ptr->valid & PNG_INFO_fcTL) && ++ width != NULL && height != NULL && ++ x_offset != NULL && y_offset != NULL && ++ delay_num != NULL && delay_den != NULL && ++ dispose_op != NULL && blend_op != NULL) ++ { ++ *width = info_ptr->next_frame_width; ++ *height = info_ptr->next_frame_height; ++ *x_offset = info_ptr->next_frame_x_offset; ++ *y_offset = info_ptr->next_frame_y_offset; ++ *delay_num = info_ptr->next_frame_delay_num; ++ *delay_den = info_ptr->next_frame_delay_den; ++ *dispose_op = info_ptr->next_frame_dispose_op; ++ *blend_op = info_ptr->next_frame_blend_op; ++ return (1); ++ } ++ ++ return (0); ++} ++ ++png_uint_32 PNGAPI ++png_get_next_frame_width(png_structp png_ptr, png_infop info_ptr) ++{ ++ png_debug(1, "in png_get_next_frame_width()"); ++ ++ if (png_ptr != NULL && info_ptr != NULL) ++ return (info_ptr->next_frame_width); ++ return (0); ++} ++ ++png_uint_32 PNGAPI ++png_get_next_frame_height(png_structp png_ptr, png_infop info_ptr) ++{ ++ png_debug(1, "in png_get_next_frame_height()"); ++ ++ if (png_ptr != NULL && info_ptr != NULL) ++ return (info_ptr->next_frame_height); ++ return (0); ++} ++ ++png_uint_32 PNGAPI ++png_get_next_frame_x_offset(png_structp png_ptr, png_infop info_ptr) ++{ ++ png_debug(1, "in png_get_next_frame_x_offset()"); ++ ++ if (png_ptr != NULL && info_ptr != NULL) ++ return (info_ptr->next_frame_x_offset); ++ return (0); ++} ++ ++png_uint_32 PNGAPI ++png_get_next_frame_y_offset(png_structp png_ptr, png_infop info_ptr) ++{ ++ png_debug(1, "in png_get_next_frame_y_offset()"); ++ ++ if (png_ptr != NULL && info_ptr != NULL) ++ return (info_ptr->next_frame_y_offset); ++ return (0); ++} ++ ++png_uint_16 PNGAPI ++png_get_next_frame_delay_num(png_structp png_ptr, png_infop info_ptr) ++{ ++ png_debug(1, "in png_get_next_frame_delay_num()"); ++ ++ if (png_ptr != NULL && info_ptr != NULL) ++ return (info_ptr->next_frame_delay_num); ++ return (0); ++} ++ ++png_uint_16 PNGAPI ++png_get_next_frame_delay_den(png_structp png_ptr, png_infop info_ptr) ++{ ++ png_debug(1, "in png_get_next_frame_delay_den()"); ++ ++ if (png_ptr != NULL && info_ptr != NULL) ++ return (info_ptr->next_frame_delay_den); ++ return (0); ++} ++ ++png_byte PNGAPI ++png_get_next_frame_dispose_op(png_structp png_ptr, png_infop info_ptr) ++{ ++ png_debug(1, "in png_get_next_frame_dispose_op()"); ++ ++ if (png_ptr != NULL && info_ptr != NULL) ++ return (info_ptr->next_frame_dispose_op); ++ return (0); ++} ++ ++png_byte PNGAPI ++png_get_next_frame_blend_op(png_structp png_ptr, png_infop info_ptr) ++{ ++ png_debug(1, "in png_get_next_frame_blend_op()"); ++ ++ if (png_ptr != NULL && info_ptr != NULL) ++ return (info_ptr->next_frame_blend_op); ++ return (0); ++} ++ ++png_byte PNGAPI ++png_get_first_frame_is_hidden(png_structp png_ptr, png_infop info_ptr) ++{ ++ png_debug(1, "in png_first_frame_is_hidden()"); ++ ++ if (png_ptr != NULL) ++ return (png_byte)(png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN); ++ ++ PNG_UNUSED(info_ptr) ++ ++ return 0; ++} ++#endif /* PNG_APNG_SUPPORTED */ + #endif /* READ || WRITE */ +diff -Naru libpng-1.6.37.org/pnginfo.h libpng-1.6.37/pnginfo.h +--- libpng-1.6.37.org/pnginfo.h 2019-04-19 07:21:37.399024787 +0900 ++++ libpng-1.6.37/pnginfo.h 2019-04-19 07:22:37.850245901 +0900 +@@ -263,5 +263,18 @@ + png_bytepp row_pointers; /* the image bits */ + #endif + ++#ifdef PNG_APNG_SUPPORTED ++ png_uint_32 num_frames; /* including default image */ ++ png_uint_32 num_plays; ++ png_uint_32 next_frame_width; ++ png_uint_32 next_frame_height; ++ png_uint_32 next_frame_x_offset; ++ png_uint_32 next_frame_y_offset; ++ png_uint_16 next_frame_delay_num; ++ png_uint_16 next_frame_delay_den; ++ png_byte next_frame_dispose_op; ++ png_byte next_frame_blend_op; ++#endif ++ + }; + #endif /* PNGINFO_H */ +diff -Naru libpng-1.6.37.org/pngpread.c libpng-1.6.37/pngpread.c +--- libpng-1.6.37.org/pngpread.c 2019-04-19 07:21:37.399024787 +0900 ++++ libpng-1.6.37/pngpread.c 2019-04-19 07:22:37.850245901 +0900 +@@ -195,6 +195,106 @@ + + chunk_name = png_ptr->chunk_name; + ++#ifdef PNG_READ_APNG_SUPPORTED ++ if (png_ptr->num_frames_read > 0 && ++ png_ptr->num_frames_read < info_ptr->num_frames) ++ { ++ if (chunk_name == png_IDAT) ++ { ++ /* Discard trailing IDATs for the first frame */ ++ if (png_ptr->mode & PNG_HAVE_fcTL || png_ptr->num_frames_read > 1) ++ png_error(png_ptr, "out of place IDAT"); ++ ++ if (png_ptr->push_length + 4 > png_ptr->buffer_size) ++ { ++ png_push_save_buffer(png_ptr); ++ return; ++ } ++ ++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER; ++ return; ++ } ++ else if (chunk_name == png_fdAT) ++ { ++ if (png_ptr->buffer_size < 4) ++ { ++ png_push_save_buffer(png_ptr); ++ return; ++ } ++ ++ png_ensure_sequence_number(png_ptr, 4); ++ ++ if (!(png_ptr->mode & PNG_HAVE_fcTL)) ++ { ++ /* Discard trailing fdATs for frames other than the first */ ++ if (png_ptr->num_frames_read < 2) ++ png_error(png_ptr, "out of place fdAT"); ++ ++ if (png_ptr->push_length + 4 > png_ptr->buffer_size) ++ { ++ png_push_save_buffer(png_ptr); ++ return; ++ } ++ ++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER; ++ return; ++ } ++ ++ else ++ { ++ /* frame data follows */ ++ png_ptr->idat_size = png_ptr->push_length - 4; ++ png_ptr->mode |= PNG_HAVE_IDAT; ++ png_ptr->process_mode = PNG_READ_IDAT_MODE; ++ ++ return; ++ } ++ } ++ ++ else if (chunk_name == png_fcTL) ++ { ++ if (png_ptr->push_length + 4 > png_ptr->buffer_size) ++ { ++ png_push_save_buffer(png_ptr); ++ return; ++ } ++ ++ png_read_reset(png_ptr); ++ png_ptr->mode &= ~PNG_HAVE_fcTL; ++ ++ png_handle_fcTL(png_ptr, info_ptr, png_ptr->push_length); ++ ++ if (!(png_ptr->mode & PNG_HAVE_fcTL)) ++ png_error(png_ptr, "missing required fcTL chunk"); ++ ++ png_read_reinit(png_ptr, info_ptr); ++ png_progressive_read_reset(png_ptr); ++ ++ if (png_ptr->frame_info_fn != NULL) ++ (*(png_ptr->frame_info_fn))(png_ptr, png_ptr->num_frames_read); ++ ++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER; ++ ++ return; ++ } ++ ++ else ++ { ++ if (png_ptr->push_length + 4 > png_ptr->buffer_size) ++ { ++ png_push_save_buffer(png_ptr); ++ return; ++ } ++ png_warning(png_ptr, "Skipped (ignored) a chunk " ++ "between APNG chunks"); ++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER; ++ return; ++ } ++ ++ return; ++ } ++#endif /* PNG_READ_APNG_SUPPORTED */ ++ + if (chunk_name == png_IDAT) + { + if ((png_ptr->mode & PNG_AFTER_IDAT) != 0) +@@ -261,6 +361,9 @@ + + else if (chunk_name == png_IDAT) + { ++#ifdef PNG_READ_APNG_SUPPORTED ++ png_have_info(png_ptr, info_ptr); ++#endif + png_ptr->idat_size = png_ptr->push_length; + png_ptr->process_mode = PNG_READ_IDAT_MODE; + png_push_have_info(png_ptr, info_ptr); +@@ -406,6 +509,30 @@ + png_handle_iTXt(png_ptr, info_ptr, png_ptr->push_length); + } + #endif ++#ifdef PNG_READ_APNG_SUPPORTED ++ else if (chunk_name == png_acTL) ++ { ++ if (png_ptr->push_length + 4 > png_ptr->buffer_size) ++ { ++ png_push_save_buffer(png_ptr); ++ return; ++ } ++ ++ png_handle_acTL(png_ptr, info_ptr, png_ptr->push_length); ++ } ++ ++ else if (chunk_name == png_fcTL) ++ { ++ if (png_ptr->push_length + 4 > png_ptr->buffer_size) ++ { ++ png_push_save_buffer(png_ptr); ++ return; ++ } ++ ++ png_handle_fcTL(png_ptr, info_ptr, png_ptr->push_length); ++ } ++ ++#endif /* PNG_READ_APNG_SUPPORTED */ + + else + { +@@ -539,7 +666,11 @@ + png_byte chunk_tag[4]; + + /* TODO: this code can be commoned up with the same code in push_read */ ++#ifdef PNG_READ_APNG_SUPPORTED ++ PNG_PUSH_SAVE_BUFFER_IF_LT(12) ++#else + PNG_PUSH_SAVE_BUFFER_IF_LT(8) ++#endif + png_push_fill_buffer(png_ptr, chunk_length, 4); + png_ptr->push_length = png_get_uint_31(png_ptr, chunk_length); + png_reset_crc(png_ptr); +@@ -547,17 +678,64 @@ + png_ptr->chunk_name = PNG_CHUNK_FROM_STRING(chunk_tag); + png_ptr->mode |= PNG_HAVE_CHUNK_HEADER; + ++#ifdef PNG_READ_APNG_SUPPORTED ++ if (png_ptr->chunk_name != png_fdAT && png_ptr->num_frames_read > 0) ++ { ++ if (png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED) ++ { ++ png_ptr->process_mode = PNG_READ_CHUNK_MODE; ++ if (png_ptr->frame_end_fn != NULL) ++ (*(png_ptr->frame_end_fn))(png_ptr, png_ptr->num_frames_read); ++ png_ptr->num_frames_read++; ++ return; ++ } ++ else ++ { ++ if (png_ptr->chunk_name == png_IEND) ++ png_error(png_ptr, "Not enough image data"); ++ if (png_ptr->push_length + 4 > png_ptr->buffer_size) ++ { ++ png_push_save_buffer(png_ptr); ++ return; ++ } ++ png_warning(png_ptr, "Skipping (ignoring) a chunk between " ++ "APNG chunks"); ++ png_crc_finish(png_ptr, png_ptr->push_length); ++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER; ++ return; ++ } ++ } ++ else ++#endif ++#ifdef PNG_READ_APNG_SUPPORTED ++ if (png_ptr->chunk_name != png_IDAT && png_ptr->num_frames_read == 0) ++#else + if (png_ptr->chunk_name != png_IDAT) ++#endif + { + png_ptr->process_mode = PNG_READ_CHUNK_MODE; + + if ((png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED) == 0) + png_error(png_ptr, "Not enough compressed data"); + ++#ifdef PNG_READ_APNG_SUPPORTED ++ if (png_ptr->frame_end_fn != NULL) ++ (*(png_ptr->frame_end_fn))(png_ptr, png_ptr->num_frames_read); ++ png_ptr->num_frames_read++; ++#endif ++ + return; + } + + png_ptr->idat_size = png_ptr->push_length; ++ ++#ifdef PNG_READ_APNG_SUPPORTED ++ if (png_ptr->num_frames_read > 0) ++ { ++ png_ensure_sequence_number(png_ptr, 4); ++ png_ptr->idat_size -= 4; ++ } ++#endif + } + + if (png_ptr->idat_size != 0 && png_ptr->save_buffer_size != 0) +@@ -631,6 +809,15 @@ + if (!(buffer_length > 0) || buffer == NULL) + png_error(png_ptr, "No IDAT data (internal error)"); + ++#ifdef PNG_READ_APNG_SUPPORTED ++ /* If the app is not APNG-aware, decode only the first frame */ ++ if (!(png_ptr->apng_flags & PNG_APNG_APP) && png_ptr->num_frames_read > 0) ++ { ++ png_ptr->flags |= PNG_FLAG_ZSTREAM_ENDED; ++ return; ++ } ++#endif ++ + /* This routine must process all the data it has been given + * before returning, calling the row callback as required to + * handle the uncompressed results. +@@ -1085,6 +1272,18 @@ + png_set_read_fn(png_ptr, progressive_ptr, png_push_fill_buffer); + } + ++#ifdef PNG_READ_APNG_SUPPORTED ++void PNGAPI ++png_set_progressive_frame_fn(png_structp png_ptr, ++ png_progressive_frame_ptr frame_info_fn, ++ png_progressive_frame_ptr frame_end_fn) ++{ ++ png_ptr->frame_info_fn = frame_info_fn; ++ png_ptr->frame_end_fn = frame_end_fn; ++ png_ptr->apng_flags |= PNG_APNG_APP; ++} ++#endif ++ + png_voidp PNGAPI + png_get_progressive_ptr(png_const_structrp png_ptr) + { +diff -Naru libpng-1.6.37.org/pngpriv.h libpng-1.6.37/pngpriv.h +--- libpng-1.6.37.org/pngpriv.h 2019-04-19 07:21:37.399024787 +0900 ++++ libpng-1.6.37/pngpriv.h 2019-04-19 07:22:37.850245901 +0900 +@@ -637,6 +637,10 @@ + #define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000U /* Have another chunk after IDAT */ + /* 0x4000U (unused) */ + #define PNG_IS_READ_STRUCT 0x8000U /* Else is a write struct */ ++#ifdef PNG_APNG_SUPPORTED ++#define PNG_HAVE_acTL 0x10000U ++#define PNG_HAVE_fcTL 0x20000U ++#endif + + /* Flags for the transformations the PNG library does on the image data */ + #define PNG_BGR 0x0001U +@@ -873,6 +877,16 @@ + #define png_tRNS PNG_U32(116, 82, 78, 83) + #define png_zTXt PNG_U32(122, 84, 88, 116) + ++#ifdef PNG_APNG_SUPPORTED ++#define png_acTL PNG_U32( 97, 99, 84, 76) ++#define png_fcTL PNG_U32(102, 99, 84, 76) ++#define png_fdAT PNG_U32(102, 100, 65, 84) ++ ++/* For png_struct.apng_flags: */ ++#define PNG_FIRST_FRAME_HIDDEN 0x0001U ++#define PNG_APNG_APP 0x0002U ++#endif ++ + /* The following will work on (signed char*) strings, whereas the get_uint_32 + * macro will fail on top-bit-set values because of the sign extension. + */ +@@ -1644,6 +1658,47 @@ + */ + #endif + ++#ifdef PNG_APNG_SUPPORTED ++PNG_INTERNAL_FUNCTION(void,png_ensure_fcTL_is_valid,(png_structp png_ptr, ++ png_uint_32 width, png_uint_32 height, ++ png_uint_32 x_offset, png_uint_32 y_offset, ++ png_uint_16 delay_num, png_uint_16 delay_den, ++ png_byte dispose_op, png_byte blend_op), PNG_EMPTY); ++ ++#ifdef PNG_READ_APNG_SUPPORTED ++PNG_INTERNAL_FUNCTION(void,png_handle_acTL,(png_structp png_ptr, png_infop info_ptr, ++ png_uint_32 length),PNG_EMPTY); ++PNG_INTERNAL_FUNCTION(void,png_handle_fcTL,(png_structp png_ptr, png_infop info_ptr, ++ png_uint_32 length),PNG_EMPTY); ++PNG_INTERNAL_FUNCTION(void,png_handle_fdAT,(png_structp png_ptr, png_infop info_ptr, ++ png_uint_32 length),PNG_EMPTY); ++PNG_INTERNAL_FUNCTION(void,png_have_info,(png_structp png_ptr, png_infop info_ptr),PNG_EMPTY); ++PNG_INTERNAL_FUNCTION(void,png_ensure_sequence_number,(png_structp png_ptr, ++ png_uint_32 length),PNG_EMPTY); ++PNG_INTERNAL_FUNCTION(void,png_read_reset,(png_structp png_ptr),PNG_EMPTY); ++PNG_INTERNAL_FUNCTION(void,png_read_reinit,(png_structp png_ptr, ++ png_infop info_ptr),PNG_EMPTY); ++#ifdef PNG_PROGRESSIVE_READ_SUPPORTED ++PNG_INTERNAL_FUNCTION(void,png_progressive_read_reset,(png_structp png_ptr),PNG_EMPTY); ++#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ ++#endif /* PNG_READ_APNG_SUPPORTED */ ++ ++#ifdef PNG_WRITE_APNG_SUPPORTED ++PNG_INTERNAL_FUNCTION(void,png_write_acTL,(png_structp png_ptr, ++ png_uint_32 num_frames, png_uint_32 num_plays),PNG_EMPTY); ++PNG_INTERNAL_FUNCTION(void,png_write_fcTL,(png_structp png_ptr, ++ png_uint_32 width, png_uint_32 height, ++ png_uint_32 x_offset, png_uint_32 y_offset, ++ png_uint_16 delay_num, png_uint_16 delay_den, ++ png_byte dispose_op, png_byte blend_op),PNG_EMPTY); ++PNG_INTERNAL_FUNCTION(void,png_write_fdAT,(png_structp png_ptr, ++ png_const_bytep data, png_size_t length),PNG_EMPTY); ++PNG_INTERNAL_FUNCTION(void,png_write_reset,(png_structp png_ptr),PNG_EMPTY); ++PNG_INTERNAL_FUNCTION(void,png_write_reinit,(png_structp png_ptr, ++ png_infop info_ptr, png_uint_32 width, png_uint_32 height),PNG_EMPTY); ++#endif /* PNG_WRITE_APNG_SUPPORTED */ ++#endif /* PNG_APNG_SUPPORTED */ ++ + /* Added at libpng version 1.4.0 */ + #ifdef PNG_COLORSPACE_SUPPORTED + /* These internal functions are for maintaining the colorspace structure within +diff -Naru libpng-1.6.37.org/pngread.c libpng-1.6.37/pngread.c +--- libpng-1.6.37.org/pngread.c 2019-04-19 07:21:37.400024774 +0900 ++++ libpng-1.6.37/pngread.c 2019-04-19 07:22:37.851245887 +0900 +@@ -161,6 +161,9 @@ + + else if (chunk_name == png_IDAT) + { ++#ifdef PNG_READ_APNG_SUPPORTED ++ png_have_info(png_ptr, info_ptr); ++#endif + png_ptr->idat_size = length; + break; + } +@@ -255,6 +258,17 @@ + png_handle_iTXt(png_ptr, info_ptr, length); + #endif + ++#ifdef PNG_READ_APNG_SUPPORTED ++ else if (chunk_name == png_acTL) ++ png_handle_acTL(png_ptr, info_ptr, length); ++ ++ else if (chunk_name == png_fcTL) ++ png_handle_fcTL(png_ptr, info_ptr, length); ++ ++ else if (chunk_name == png_fdAT) ++ png_handle_fdAT(png_ptr, info_ptr, length); ++#endif ++ + else + png_handle_unknown(png_ptr, info_ptr, length, + PNG_HANDLE_CHUNK_AS_DEFAULT); +@@ -262,6 +276,72 @@ + } + #endif /* SEQUENTIAL_READ */ + ++#ifdef PNG_READ_APNG_SUPPORTED ++void PNGAPI ++png_read_frame_head(png_structp png_ptr, png_infop info_ptr) ++{ ++ png_byte have_chunk_after_DAT; /* after IDAT or after fdAT */ ++ ++ png_debug(0, "Reading frame head"); ++ ++ if (!(png_ptr->mode & PNG_HAVE_acTL)) ++ png_error(png_ptr, "attempt to png_read_frame_head() but " ++ "no acTL present"); ++ ++ /* do nothing for the main IDAT */ ++ if (png_ptr->num_frames_read == 0) ++ return; ++ ++ png_read_reset(png_ptr); ++ png_ptr->flags &= ~PNG_FLAG_ROW_INIT; ++ png_ptr->mode &= ~PNG_HAVE_fcTL; ++ ++ have_chunk_after_DAT = 0; ++ for (;;) ++ { ++ png_uint_32 length = png_read_chunk_header(png_ptr); ++ ++ if (png_ptr->chunk_name == png_IDAT) ++ { ++ /* discard trailing IDATs for the first frame */ ++ if (have_chunk_after_DAT || png_ptr->num_frames_read > 1) ++ png_error(png_ptr, "png_read_frame_head(): out of place IDAT"); ++ png_crc_finish(png_ptr, length); ++ } ++ ++ else if (png_ptr->chunk_name == png_fcTL) ++ { ++ png_handle_fcTL(png_ptr, info_ptr, length); ++ have_chunk_after_DAT = 1; ++ } ++ ++ else if (png_ptr->chunk_name == png_fdAT) ++ { ++ png_ensure_sequence_number(png_ptr, length); ++ ++ /* discard trailing fdATs for frames other than the first */ ++ if (!have_chunk_after_DAT && png_ptr->num_frames_read > 1) ++ png_crc_finish(png_ptr, length - 4); ++ else if(png_ptr->mode & PNG_HAVE_fcTL) ++ { ++ png_ptr->idat_size = length - 4; ++ png_ptr->mode |= PNG_HAVE_IDAT; ++ ++ break; ++ } ++ else ++ png_error(png_ptr, "png_read_frame_head(): out of place fdAT"); ++ } ++ else ++ { ++ png_warning(png_ptr, "Skipped (ignored) a chunk " ++ "between APNG chunks"); ++ png_crc_finish(png_ptr, length); ++ } ++ } ++} ++#endif /* PNG_READ_APNG_SUPPORTED */ ++ + /* Optional call to update the users info_ptr structure */ + void PNGAPI + png_read_update_info(png_structrp png_ptr, png_inforp info_ptr) +diff -Naru libpng-1.6.37.org/pngrutil.c libpng-1.6.37/pngrutil.c +--- libpng-1.6.37.org/pngrutil.c 2019-04-19 07:21:37.401024761 +0900 ++++ libpng-1.6.37/pngrutil.c 2019-04-19 07:22:37.853245862 +0900 +@@ -865,6 +865,11 @@ + filter_type = buf[11]; + interlace_type = buf[12]; + ++#ifdef PNG_READ_APNG_SUPPORTED ++ png_ptr->first_frame_width = width; ++ png_ptr->first_frame_height = height; ++#endif ++ + /* Set internal variables */ + png_ptr->width = width; + png_ptr->height = height; +@@ -2857,6 +2862,179 @@ + } + #endif + ++#ifdef PNG_READ_APNG_SUPPORTED ++void /* PRIVATE */ ++png_handle_acTL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) ++{ ++ png_byte data[8]; ++ png_uint_32 num_frames; ++ png_uint_32 num_plays; ++ png_uint_32 didSet; ++ ++ png_debug(1, "in png_handle_acTL"); ++ ++ if (!(png_ptr->mode & PNG_HAVE_IHDR)) ++ { ++ png_error(png_ptr, "Missing IHDR before acTL"); ++ } ++ else if (png_ptr->mode & PNG_HAVE_IDAT) ++ { ++ png_warning(png_ptr, "Invalid acTL after IDAT skipped"); ++ png_crc_finish(png_ptr, length); ++ return; ++ } ++ else if (png_ptr->mode & PNG_HAVE_acTL) ++ { ++ png_warning(png_ptr, "Duplicate acTL skipped"); ++ png_crc_finish(png_ptr, length); ++ return; ++ } ++ else if (length != 8) ++ { ++ png_warning(png_ptr, "acTL with invalid length skipped"); ++ png_crc_finish(png_ptr, length); ++ return; ++ } ++ ++ png_crc_read(png_ptr, data, 8); ++ png_crc_finish(png_ptr, 0); ++ ++ num_frames = png_get_uint_31(png_ptr, data); ++ num_plays = png_get_uint_31(png_ptr, data + 4); ++ ++ /* the set function will do error checking on num_frames */ ++ didSet = png_set_acTL(png_ptr, info_ptr, num_frames, num_plays); ++ if(didSet) ++ png_ptr->mode |= PNG_HAVE_acTL; ++} ++ ++void /* PRIVATE */ ++png_handle_fcTL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) ++{ ++ png_byte data[22]; ++ png_uint_32 width; ++ png_uint_32 height; ++ png_uint_32 x_offset; ++ png_uint_32 y_offset; ++ png_uint_16 delay_num; ++ png_uint_16 delay_den; ++ png_byte dispose_op; ++ png_byte blend_op; ++ ++ png_debug(1, "in png_handle_fcTL"); ++ ++ png_ensure_sequence_number(png_ptr, length); ++ ++ if (!(png_ptr->mode & PNG_HAVE_IHDR)) ++ { ++ png_error(png_ptr, "Missing IHDR before fcTL"); ++ } ++ else if (png_ptr->mode & PNG_HAVE_IDAT) ++ { ++ /* for any frames other then the first this message may be misleading, ++ * but correct. PNG_HAVE_IDAT is unset before the frame head is read ++ * i can't think of a better message */ ++ png_warning(png_ptr, "Invalid fcTL after IDAT skipped"); ++ png_crc_finish(png_ptr, length-4); ++ return; ++ } ++ else if (png_ptr->mode & PNG_HAVE_fcTL) ++ { ++ png_warning(png_ptr, "Duplicate fcTL within one frame skipped"); ++ png_crc_finish(png_ptr, length-4); ++ return; ++ } ++ else if (length != 26) ++ { ++ png_warning(png_ptr, "fcTL with invalid length skipped"); ++ png_crc_finish(png_ptr, length-4); ++ return; ++ } ++ ++ png_crc_read(png_ptr, data, 22); ++ png_crc_finish(png_ptr, 0); ++ ++ width = png_get_uint_31(png_ptr, data); ++ height = png_get_uint_31(png_ptr, data + 4); ++ x_offset = png_get_uint_31(png_ptr, data + 8); ++ y_offset = png_get_uint_31(png_ptr, data + 12); ++ delay_num = png_get_uint_16(data + 16); ++ delay_den = png_get_uint_16(data + 18); ++ dispose_op = data[20]; ++ blend_op = data[21]; ++ ++ if (png_ptr->num_frames_read == 0 && (x_offset != 0 || y_offset != 0)) ++ { ++ png_warning(png_ptr, "fcTL for the first frame must have zero offset"); ++ return; ++ } ++ ++ if (info_ptr != NULL) ++ { ++ if (png_ptr->num_frames_read == 0 && ++ (width != info_ptr->width || height != info_ptr->height)) ++ { ++ png_warning(png_ptr, "size in first frame's fcTL must match " ++ "the size in IHDR"); ++ return; ++ } ++ ++ /* The set function will do more error checking */ ++ png_set_next_frame_fcTL(png_ptr, info_ptr, width, height, ++ x_offset, y_offset, delay_num, delay_den, ++ dispose_op, blend_op); ++ ++ png_read_reinit(png_ptr, info_ptr); ++ ++ png_ptr->mode |= PNG_HAVE_fcTL; ++ } ++} ++ ++void /* PRIVATE */ ++png_have_info(png_structp png_ptr, png_infop info_ptr) ++{ ++ if((info_ptr->valid & PNG_INFO_acTL) && !(info_ptr->valid & PNG_INFO_fcTL)) ++ { ++ png_ptr->apng_flags |= PNG_FIRST_FRAME_HIDDEN; ++ info_ptr->num_frames++; ++ } ++} ++ ++void /* PRIVATE */ ++png_handle_fdAT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) ++{ ++ png_ensure_sequence_number(png_ptr, length); ++ ++ /* This function is only called from png_read_end(), png_read_info(), ++ * and png_push_read_chunk() which means that: ++ * - the user doesn't want to read this frame ++ * - or this is an out-of-place fdAT ++ * in either case it is safe to ignore the chunk with a warning */ ++ png_warning(png_ptr, "ignoring fdAT chunk"); ++ png_crc_finish(png_ptr, length - 4); ++ PNG_UNUSED(info_ptr) ++} ++ ++void /* PRIVATE */ ++png_ensure_sequence_number(png_structp png_ptr, png_uint_32 length) ++{ ++ png_byte data[4]; ++ png_uint_32 sequence_number; ++ ++ if (length < 4) ++ png_error(png_ptr, "invalid fcTL or fdAT chunk found"); ++ ++ png_crc_read(png_ptr, data, 4); ++ sequence_number = png_get_uint_31(png_ptr, data); ++ ++ if (sequence_number != png_ptr->next_seq_num) ++ png_error(png_ptr, "fcTL or fdAT chunk with out-of-order sequence " ++ "number found"); ++ ++ png_ptr->next_seq_num++; ++} ++#endif /* PNG_READ_APNG_SUPPORTED */ ++ + #ifdef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED + /* Utility function for png_handle_unknown; set up png_ptr::unknown_chunk */ + static int +@@ -4165,7 +4343,38 @@ + { + uInt avail_in; + png_bytep buffer; ++#ifdef PNG_READ_APNG_SUPPORTED ++ png_uint_32 bytes_to_skip = 0; ++ ++ while (png_ptr->idat_size == 0 || bytes_to_skip != 0) ++ { ++ png_crc_finish(png_ptr, bytes_to_skip); ++ bytes_to_skip = 0; + ++ png_ptr->idat_size = png_read_chunk_header(png_ptr); ++ if (png_ptr->num_frames_read == 0) ++ { ++ if (png_ptr->chunk_name != png_IDAT) ++ png_error(png_ptr, "Not enough image data"); ++ } ++ else ++ { ++ if (png_ptr->chunk_name == png_IEND) ++ png_error(png_ptr, "Not enough image data"); ++ if (png_ptr->chunk_name != png_fdAT) ++ { ++ png_warning(png_ptr, "Skipped (ignored) a chunk " ++ "between APNG chunks"); ++ bytes_to_skip = png_ptr->idat_size; ++ continue; ++ } ++ ++ png_ensure_sequence_number(png_ptr, png_ptr->idat_size); ++ ++ png_ptr->idat_size -= 4; ++ } ++ } ++#else + while (png_ptr->idat_size == 0) + { + png_crc_finish(png_ptr, 0); +@@ -4177,7 +4386,7 @@ + if (png_ptr->chunk_name != png_IDAT) + png_error(png_ptr, "Not enough image data"); + } +- ++#endif /* PNG_READ_APNG_SUPPORTED */ + avail_in = png_ptr->IDAT_read_size; + + if (avail_in > png_ptr->idat_size) +@@ -4240,6 +4449,9 @@ + + png_ptr->mode |= PNG_AFTER_IDAT; + png_ptr->flags |= PNG_FLAG_ZSTREAM_ENDED; ++#ifdef PNG_READ_APNG_SUPPORTED ++ png_ptr->num_frames_read++; ++#endif + + if (png_ptr->zstream.avail_in > 0 || png_ptr->idat_size > 0) + png_chunk_benign_error(png_ptr, "Extra compressed data"); +@@ -4678,4 +4890,80 @@ + + png_ptr->flags |= PNG_FLAG_ROW_INIT; + } ++ ++#ifdef PNG_READ_APNG_SUPPORTED ++/* This function is to be called after the main IDAT set has been read and ++ * before a new IDAT is read. It resets some parts of png_ptr ++ * to make them usable by the read functions again */ ++void /* PRIVATE */ ++png_read_reset(png_structp png_ptr) ++{ ++ png_ptr->mode &= ~PNG_HAVE_IDAT; ++ png_ptr->mode &= ~PNG_AFTER_IDAT; ++ png_ptr->row_number = 0; ++ png_ptr->pass = 0; ++} ++ ++void /* PRIVATE */ ++png_read_reinit(png_structp png_ptr, png_infop info_ptr) ++{ ++ png_ptr->width = info_ptr->next_frame_width; ++ png_ptr->height = info_ptr->next_frame_height; ++ png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->width); ++ png_ptr->info_rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth, ++ png_ptr->width); ++ if (png_ptr->prev_row) ++ memset(png_ptr->prev_row, 0, png_ptr->rowbytes + 1); ++} ++ ++#ifdef PNG_PROGRESSIVE_READ_SUPPORTED ++/* same as png_read_reset() but for the progressive reader */ ++void /* PRIVATE */ ++png_progressive_read_reset(png_structp png_ptr) ++{ ++#ifdef PNG_READ_INTERLACING_SUPPORTED ++ /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */ ++ ++ /* Start of interlace block */ ++ const int png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; ++ ++ /* Offset to next interlace block */ ++ const int png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; ++ ++ /* Start of interlace block in the y direction */ ++ const int png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1}; ++ ++ /* Offset to next interlace block in the y direction */ ++ const int png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2}; ++ ++ if (png_ptr->interlaced) ++ { ++ if (!(png_ptr->transformations & PNG_INTERLACE)) ++ png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 - ++ png_pass_ystart[0]) / png_pass_yinc[0]; ++ else ++ png_ptr->num_rows = png_ptr->height; ++ ++ png_ptr->iwidth = (png_ptr->width + ++ png_pass_inc[png_ptr->pass] - 1 - ++ png_pass_start[png_ptr->pass]) / ++ png_pass_inc[png_ptr->pass]; ++ } ++ else ++#endif /* PNG_READ_INTERLACING_SUPPORTED */ ++ { ++ png_ptr->num_rows = png_ptr->height; ++ png_ptr->iwidth = png_ptr->width; ++ } ++ png_ptr->flags &= ~PNG_FLAG_ZSTREAM_ENDED; ++ if (inflateReset(&(png_ptr->zstream)) != Z_OK) ++ png_error(png_ptr, "inflateReset failed"); ++ png_ptr->zstream.avail_in = 0; ++ png_ptr->zstream.next_in = 0; ++ png_ptr->zstream.next_out = png_ptr->row_buf; ++ png_ptr->zstream.avail_out = (uInt)PNG_ROWBYTES(png_ptr->pixel_depth, ++ png_ptr->iwidth) + 1; ++} ++#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ ++#endif /* PNG_READ_APNG_SUPPORTED */ + #endif /* READ */ +diff -Naru libpng-1.6.37.org/pngset.c libpng-1.6.37/pngset.c +--- libpng-1.6.37.org/pngset.c 2019-04-19 07:21:37.401024761 +0900 ++++ libpng-1.6.37/pngset.c 2019-04-19 07:22:37.858245798 +0900 +@@ -288,6 +288,11 @@ + info_ptr->pixel_depth = (png_byte)(info_ptr->channels * info_ptr->bit_depth); + + info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth, width); ++ ++#ifdef PNG_APNG_SUPPORTED ++ /* for non-animated png. this may be overwritten from an acTL chunk later */ ++ info_ptr->num_frames = 1; ++#endif + } + + #ifdef PNG_oFFs_SUPPORTED +@@ -1158,6 +1163,147 @@ + } + #endif /* sPLT */ + ++#ifdef PNG_APNG_SUPPORTED ++png_uint_32 PNGAPI ++png_set_acTL(png_structp png_ptr, png_infop info_ptr, ++ png_uint_32 num_frames, png_uint_32 num_plays) ++{ ++ png_debug1(1, "in %s storage function", "acTL"); ++ ++ if (png_ptr == NULL || info_ptr == NULL) ++ { ++ png_warning(png_ptr, ++ "Call to png_set_acTL() with NULL png_ptr " ++ "or info_ptr ignored"); ++ return (0); ++ } ++ if (num_frames == 0) ++ { ++ png_warning(png_ptr, ++ "Ignoring attempt to set acTL with num_frames zero"); ++ return (0); ++ } ++ if (num_frames > PNG_UINT_31_MAX) ++ { ++ png_warning(png_ptr, ++ "Ignoring attempt to set acTL with num_frames > 2^31-1"); ++ return (0); ++ } ++ if (num_plays > PNG_UINT_31_MAX) ++ { ++ png_warning(png_ptr, ++ "Ignoring attempt to set acTL with num_plays " ++ "> 2^31-1"); ++ return (0); ++ } ++ ++ info_ptr->num_frames = num_frames; ++ info_ptr->num_plays = num_plays; ++ ++ info_ptr->valid |= PNG_INFO_acTL; ++ ++ return (1); ++} ++ ++/* delay_num and delay_den can hold any 16-bit values including zero */ ++png_uint_32 PNGAPI ++png_set_next_frame_fcTL(png_structp png_ptr, png_infop info_ptr, ++ png_uint_32 width, png_uint_32 height, ++ png_uint_32 x_offset, png_uint_32 y_offset, ++ png_uint_16 delay_num, png_uint_16 delay_den, ++ png_byte dispose_op, png_byte blend_op) ++{ ++ png_debug1(1, "in %s storage function", "fcTL"); ++ ++ if (png_ptr == NULL || info_ptr == NULL) ++ { ++ png_warning(png_ptr, ++ "Call to png_set_fcTL() with NULL png_ptr or info_ptr " ++ "ignored"); ++ return (0); ++ } ++ ++ png_ensure_fcTL_is_valid(png_ptr, width, height, x_offset, y_offset, ++ delay_num, delay_den, dispose_op, blend_op); ++ ++ if (blend_op == PNG_BLEND_OP_OVER) ++ { ++ if (!(png_ptr->color_type & PNG_COLOR_MASK_ALPHA) && ++ !(png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))) ++ { ++ png_warning(png_ptr, "PNG_BLEND_OP_OVER is meaningless " ++ "and wasteful for opaque images, ignored"); ++ blend_op = PNG_BLEND_OP_SOURCE; ++ } ++ } ++ ++ info_ptr->next_frame_width = width; ++ info_ptr->next_frame_height = height; ++ info_ptr->next_frame_x_offset = x_offset; ++ info_ptr->next_frame_y_offset = y_offset; ++ info_ptr->next_frame_delay_num = delay_num; ++ info_ptr->next_frame_delay_den = delay_den; ++ info_ptr->next_frame_dispose_op = dispose_op; ++ info_ptr->next_frame_blend_op = blend_op; ++ ++ info_ptr->valid |= PNG_INFO_fcTL; ++ ++ return (1); ++} ++ ++void /* PRIVATE */ ++png_ensure_fcTL_is_valid(png_structp png_ptr, ++ png_uint_32 width, png_uint_32 height, ++ png_uint_32 x_offset, png_uint_32 y_offset, ++ png_uint_16 delay_num, png_uint_16 delay_den, ++ png_byte dispose_op, png_byte blend_op) ++{ ++ if (width == 0 || width > PNG_UINT_31_MAX) ++ png_error(png_ptr, "invalid width in fcTL (> 2^31-1)"); ++ if (height == 0 || height > PNG_UINT_31_MAX) ++ png_error(png_ptr, "invalid height in fcTL (> 2^31-1)"); ++ if (x_offset > PNG_UINT_31_MAX) ++ png_error(png_ptr, "invalid x_offset in fcTL (> 2^31-1)"); ++ if (y_offset > PNG_UINT_31_MAX) ++ png_error(png_ptr, "invalid y_offset in fcTL (> 2^31-1)"); ++ if (width + x_offset > png_ptr->first_frame_width || ++ height + y_offset > png_ptr->first_frame_height) ++ png_error(png_ptr, "dimensions of a frame are greater than" ++ "the ones in IHDR"); ++ ++ if (dispose_op != PNG_DISPOSE_OP_NONE && ++ dispose_op != PNG_DISPOSE_OP_BACKGROUND && ++ dispose_op != PNG_DISPOSE_OP_PREVIOUS) ++ png_error(png_ptr, "invalid dispose_op in fcTL"); ++ ++ if (blend_op != PNG_BLEND_OP_SOURCE && ++ blend_op != PNG_BLEND_OP_OVER) ++ png_error(png_ptr, "invalid blend_op in fcTL"); ++ ++ PNG_UNUSED(delay_num) ++ PNG_UNUSED(delay_den) ++} ++ ++png_uint_32 PNGAPI ++png_set_first_frame_is_hidden(png_structp png_ptr, png_infop info_ptr, ++ png_byte is_hidden) ++{ ++ png_debug(1, "in png_first_frame_is_hidden()"); ++ ++ if (png_ptr == NULL) ++ return 0; ++ ++ if (is_hidden) ++ png_ptr->apng_flags |= PNG_FIRST_FRAME_HIDDEN; ++ else ++ png_ptr->apng_flags &= ~PNG_FIRST_FRAME_HIDDEN; ++ ++ PNG_UNUSED(info_ptr) ++ ++ return 1; ++} ++#endif /* PNG_APNG_SUPPORTED */ ++ + #ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED + static png_byte + check_location(png_const_structrp png_ptr, int location) +diff -Naru libpng-1.6.37.org/pngstruct.h libpng-1.6.37/pngstruct.h +--- libpng-1.6.37.org/pngstruct.h 2019-04-19 07:21:37.401024761 +0900 ++++ libpng-1.6.37/pngstruct.h 2019-04-19 07:22:37.854245849 +0900 +@@ -409,6 +409,27 @@ + png_byte filter_type; + #endif + ++#ifdef PNG_APNG_SUPPORTED ++ png_uint_32 apng_flags; ++ png_uint_32 next_seq_num; /* next fcTL/fdAT chunk sequence number */ ++ png_uint_32 first_frame_width; ++ png_uint_32 first_frame_height; ++ ++#ifdef PNG_READ_APNG_SUPPORTED ++ png_uint_32 num_frames_read; /* incremented after all image data of */ ++ /* a frame is read */ ++#ifdef PNG_PROGRESSIVE_READ_SUPPORTED ++ png_progressive_frame_ptr frame_info_fn; /* frame info read callback */ ++ png_progressive_frame_ptr frame_end_fn; /* frame data read callback */ ++#endif ++#endif ++ ++#ifdef PNG_WRITE_APNG_SUPPORTED ++ png_uint_32 num_frames_to_write; ++ png_uint_32 num_frames_written; ++#endif ++#endif /* PNG_APNG_SUPPORTED */ ++ + /* New members added in libpng-1.2.0 */ + + /* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */ +diff -Naru libpng-1.6.37.org/pngtest.c libpng-1.6.37/pngtest.c +--- libpng-1.6.37.org/pngtest.c 2019-04-19 07:21:37.401024761 +0900 ++++ libpng-1.6.37/pngtest.c 2019-04-19 07:22:37.854245849 +0900 +@@ -875,6 +875,10 @@ + volatile int num_passes; + int pass; + int bit_depth, color_type; ++#ifdef PNG_APNG_SUPPORTED ++ png_uint_32 num_frames; ++ png_uint_32 num_plays; ++#endif + + row_buf = NULL; + error_parameters.file_name = inname; +@@ -1383,6 +1387,22 @@ + } + } + #endif ++ ++#ifdef PNG_APNG_SUPPORTED ++ if (png_get_valid(read_ptr, read_info_ptr, PNG_INFO_acTL)) ++ { ++ if (png_get_acTL(read_ptr, read_info_ptr, &num_frames, &num_plays)) ++ { ++ png_byte is_hidden; ++ pngtest_debug2("Handling acTL chunks (frames %ld, plays %ld)", ++ num_frames, num_plays); ++ png_set_acTL(write_ptr, write_info_ptr, num_frames, num_plays); ++ is_hidden = png_get_first_frame_is_hidden(read_ptr, read_info_ptr); ++ png_set_first_frame_is_hidden(write_ptr, write_info_ptr, is_hidden); ++ } ++ } ++#endif ++ + #ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED + { + png_unknown_chunkp unknowns; +@@ -1463,6 +1483,110 @@ + t_misc += (t_stop - t_start); + t_start = t_stop; + #endif ++#ifdef PNG_APNG_SUPPORTED ++ if (png_get_valid(read_ptr, read_info_ptr, PNG_INFO_acTL)) ++ { ++ png_uint_32 frame; ++ for (frame = 0; frame < num_frames; frame++) ++ { ++ png_uint_32 frame_width; ++ png_uint_32 frame_height; ++ png_uint_32 x_offset; ++ png_uint_32 y_offset; ++ png_uint_16 delay_num; ++ png_uint_16 delay_den; ++ png_byte dispose_op; ++ png_byte blend_op; ++ png_read_frame_head(read_ptr, read_info_ptr); ++ if (png_get_valid(read_ptr, read_info_ptr, PNG_INFO_fcTL)) ++ { ++ png_get_next_frame_fcTL(read_ptr, read_info_ptr, ++ &frame_width, &frame_height, ++ &x_offset, &y_offset, ++ &delay_num, &delay_den, ++ &dispose_op, &blend_op); ++ } ++ else ++ { ++ frame_width = width; ++ frame_height = height; ++ x_offset = 0; ++ y_offset = 0; ++ delay_num = 1; ++ delay_den = 1; ++ dispose_op = PNG_DISPOSE_OP_NONE; ++ blend_op = PNG_BLEND_OP_SOURCE; ++ } ++#ifdef PNG_WRITE_APNG_SUPPORTED ++ png_write_frame_head(write_ptr, write_info_ptr, (png_bytepp)&row_buf, ++ frame_width, frame_height, ++ x_offset, y_offset, ++ delay_num, delay_den, ++ dispose_op, blend_op); ++#endif ++ for (pass = 0; pass < num_passes; pass++) ++ { ++# ifdef calc_pass_height ++ png_uint_32 pass_height; ++ ++ if (num_passes == 7) /* interlaced */ ++ { ++ if (PNG_PASS_COLS(frame_width, pass) > 0) ++ pass_height = PNG_PASS_ROWS(frame_height, pass); ++ ++ else ++ pass_height = 0; ++ } ++ ++ else /* not interlaced */ ++ pass_height = frame_height; ++# else ++# define pass_height frame_height ++# endif ++ ++ pngtest_debug1("Writing row data for pass %d", pass); ++ for (y = 0; y < pass_height; y++) ++ { ++#ifndef SINGLE_ROWBUF_ALLOC ++ pngtest_debug2("Allocating row buffer (pass %d, y = %u)...", pass, y); ++ ++ row_buf = (png_bytep)png_malloc(read_ptr, ++ png_get_rowbytes(read_ptr, read_info_ptr)); ++ ++ pngtest_debug2("\t0x%08lx (%lu bytes)", (unsigned long)row_buf, ++ (unsigned long)png_get_rowbytes(read_ptr, read_info_ptr)); ++ ++#endif /* !SINGLE_ROWBUF_ALLOC */ ++ png_read_rows(read_ptr, (png_bytepp)&row_buf, NULL, 1); ++ ++#ifdef PNG_WRITE_SUPPORTED ++#ifdef PNGTEST_TIMING ++ t_stop = (float)clock(); ++ t_decode += (t_stop - t_start); ++ t_start = t_stop; ++#endif ++ png_write_rows(write_ptr, (png_bytepp)&row_buf, 1); ++#ifdef PNGTEST_TIMING ++ t_stop = (float)clock(); ++ t_encode += (t_stop - t_start); ++ t_start = t_stop; ++#endif ++#endif /* PNG_WRITE_SUPPORTED */ ++ ++#ifndef SINGLE_ROWBUF_ALLOC ++ pngtest_debug2("Freeing row buffer (pass %d, y = %u)", pass, y); ++ png_free(read_ptr, row_buf); ++ row_buf = NULL; ++#endif /* !SINGLE_ROWBUF_ALLOC */ ++ } ++ } ++#ifdef PNG_WRITE_APNG_SUPPORTED ++ png_write_frame_tail(write_ptr, write_info_ptr); ++#endif ++ } ++ } ++ else ++#endif + for (pass = 0; pass < num_passes; pass++) + { + # ifdef calc_pass_height +diff -Naru libpng-1.6.37.org/pngwrite.c libpng-1.6.37/pngwrite.c +--- libpng-1.6.37.org/pngwrite.c 2019-04-19 07:21:37.402024748 +0900 ++++ libpng-1.6.37/pngwrite.c 2019-04-19 07:22:37.855245836 +0900 +@@ -128,6 +128,10 @@ + * the application continues writing the PNG. So check the 'invalid' + * flag here too. + */ ++#ifdef PNG_WRITE_APNG_SUPPORTED ++ if (info_ptr->valid & PNG_INFO_acTL) ++ png_write_acTL(png_ptr, info_ptr->num_frames, info_ptr->num_plays); ++#endif + #ifdef PNG_GAMMA_SUPPORTED + # ifdef PNG_WRITE_gAMA_SUPPORTED + if ((info_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) == 0 && +@@ -370,6 +374,11 @@ + png_benign_error(png_ptr, "Wrote palette index exceeding num_palette"); + #endif + ++#ifdef PNG_WRITE_APNG_SUPPORTED ++ if (png_ptr->num_frames_written != png_ptr->num_frames_to_write) ++ png_error(png_ptr, "Not enough frames written"); ++#endif ++ + /* See if user wants us to write information chunks */ + if (info_ptr != NULL) + { +@@ -1461,6 +1470,43 @@ + } + #endif + ++#ifdef PNG_WRITE_APNG_SUPPORTED ++void PNGAPI ++png_write_frame_head(png_structp png_ptr, png_infop info_ptr, ++ png_bytepp row_pointers, png_uint_32 width, png_uint_32 height, ++ png_uint_32 x_offset, png_uint_32 y_offset, ++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op, ++ png_byte blend_op) ++{ ++ png_debug(1, "in png_write_frame_head"); ++ ++ /* there is a chance this has been set after png_write_info was called, ++ * so it would be set but not written. is there a way to be sure? */ ++ if (!(info_ptr->valid & PNG_INFO_acTL)) ++ png_error(png_ptr, "png_write_frame_head(): acTL not set"); ++ ++ png_write_reset(png_ptr); ++ ++ png_write_reinit(png_ptr, info_ptr, width, height); ++ ++ if ( !(png_ptr->num_frames_written == 0 && ++ (png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN) ) ) ++ png_write_fcTL(png_ptr, width, height, x_offset, y_offset, ++ delay_num, delay_den, dispose_op, blend_op); ++ ++ PNG_UNUSED(row_pointers) ++} ++ ++void PNGAPI ++png_write_frame_tail(png_structp png_ptr, png_infop info_ptr) ++{ ++ png_debug(1, "in png_write_frame_tail"); ++ ++ png_ptr->num_frames_written++; ++ ++ PNG_UNUSED(info_ptr) ++} ++#endif /* PNG_WRITE_APNG_SUPPORTED */ + + #ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED + /* Initialize the write structure - general purpose utility. */ +diff -Naru libpng-1.6.37.org/pngwutil.c libpng-1.6.37/pngwutil.c +--- libpng-1.6.37.org/pngwutil.c 2019-04-19 07:21:37.402024748 +0900 ++++ libpng-1.6.37/pngwutil.c 2019-04-19 07:22:37.867245682 +0900 +@@ -821,6 +821,11 @@ + /* Write the chunk */ + png_write_complete_chunk(png_ptr, png_IHDR, buf, 13); + ++#ifdef PNG_WRITE_APNG_SUPPORTED ++ png_ptr->first_frame_width = width; ++ png_ptr->first_frame_height = height; ++#endif ++ + if ((png_ptr->do_filter) == PNG_NO_FILTERS) + { + if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE || +@@ -1002,8 +1007,17 @@ + optimize_cmf(data, png_image_size(png_ptr)); + #endif + +- if (size > 0) +- png_write_complete_chunk(png_ptr, png_IDAT, data, size); ++ if (size > 0) ++#ifdef PNG_WRITE_APNG_SUPPORTED ++ { ++ if (png_ptr->num_frames_written == 0) ++#endif ++ png_write_complete_chunk(png_ptr, png_IDAT, data, size); ++#ifdef PNG_WRITE_APNG_SUPPORTED ++ else ++ png_write_fdAT(png_ptr, data, size); ++ } ++#endif /* PNG_WRITE_APNG_SUPPORTED */ + png_ptr->mode |= PNG_HAVE_IDAT; + + png_ptr->zstream.next_out = data; +@@ -1050,7 +1064,17 @@ + #endif + + if (size > 0) ++#ifdef PNG_WRITE_APNG_SUPPORTED ++ { ++ if (png_ptr->num_frames_written == 0) ++#endif + png_write_complete_chunk(png_ptr, png_IDAT, data, size); ++#ifdef PNG_WRITE_APNG_SUPPORTED ++ else ++ png_write_fdAT(png_ptr, data, size); ++ } ++#endif /* PNG_WRITE_APNG_SUPPORTED */ ++ + png_ptr->zstream.avail_out = 0; + png_ptr->zstream.next_out = NULL; + png_ptr->mode |= PNG_HAVE_IDAT | PNG_AFTER_IDAT; +@@ -1885,6 +1909,82 @@ + } + #endif + ++#ifdef PNG_WRITE_APNG_SUPPORTED ++void /* PRIVATE */ ++png_write_acTL(png_structp png_ptr, ++ png_uint_32 num_frames, png_uint_32 num_plays) ++{ ++ png_byte buf[8]; ++ ++ png_debug(1, "in png_write_acTL"); ++ ++ png_ptr->num_frames_to_write = num_frames; ++ ++ if (png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN) ++ num_frames--; ++ ++ png_save_uint_32(buf, num_frames); ++ png_save_uint_32(buf + 4, num_plays); ++ ++ png_write_complete_chunk(png_ptr, png_acTL, buf, (png_size_t)8); ++} ++ ++void /* PRIVATE */ ++png_write_fcTL(png_structp png_ptr, png_uint_32 width, png_uint_32 height, ++ png_uint_32 x_offset, png_uint_32 y_offset, ++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op, ++ png_byte blend_op) ++{ ++ png_byte buf[26]; ++ ++ png_debug(1, "in png_write_fcTL"); ++ ++ if (png_ptr->num_frames_written == 0 && (x_offset != 0 || y_offset != 0)) ++ png_error(png_ptr, "x and/or y offset for the first frame aren't 0"); ++ if (png_ptr->num_frames_written == 0 && ++ (width != png_ptr->first_frame_width || ++ height != png_ptr->first_frame_height)) ++ png_error(png_ptr, "width and/or height in the first frame's fcTL " ++ "don't match the ones in IHDR"); ++ ++ /* more error checking */ ++ png_ensure_fcTL_is_valid(png_ptr, width, height, x_offset, y_offset, ++ delay_num, delay_den, dispose_op, blend_op); ++ ++ png_save_uint_32(buf, png_ptr->next_seq_num); ++ png_save_uint_32(buf + 4, width); ++ png_save_uint_32(buf + 8, height); ++ png_save_uint_32(buf + 12, x_offset); ++ png_save_uint_32(buf + 16, y_offset); ++ png_save_uint_16(buf + 20, delay_num); ++ png_save_uint_16(buf + 22, delay_den); ++ buf[24] = dispose_op; ++ buf[25] = blend_op; ++ ++ png_write_complete_chunk(png_ptr, png_fcTL, buf, (png_size_t)26); ++ ++ png_ptr->next_seq_num++; ++} ++ ++void /* PRIVATE */ ++png_write_fdAT(png_structp png_ptr, ++ png_const_bytep data, png_size_t length) ++{ ++ png_byte buf[4]; ++ ++ png_write_chunk_header(png_ptr, png_fdAT, (png_uint_32)(4 + length)); ++ ++ png_save_uint_32(buf, png_ptr->next_seq_num); ++ png_write_chunk_data(png_ptr, buf, 4); ++ ++ png_write_chunk_data(png_ptr, data, length); ++ ++ png_write_chunk_end(png_ptr); ++ ++ png_ptr->next_seq_num++; ++} ++#endif /* PNG_WRITE_APNG_SUPPORTED */ ++ + /* Initializes the row writing capability of libpng */ + void /* PRIVATE */ + png_write_start_row(png_structrp png_ptr) +@@ -2778,4 +2878,39 @@ + } + #endif /* WRITE_FLUSH */ + } ++ ++#ifdef PNG_WRITE_APNG_SUPPORTED ++void /* PRIVATE */ ++png_write_reset(png_structp png_ptr) ++{ ++ png_ptr->row_number = 0; ++ png_ptr->pass = 0; ++ png_ptr->mode &= ~PNG_HAVE_IDAT; ++} ++ ++void /* PRIVATE */ ++png_write_reinit(png_structp png_ptr, png_infop info_ptr, ++ png_uint_32 width, png_uint_32 height) ++{ ++ if (png_ptr->num_frames_written == 0 && ++ (width != png_ptr->first_frame_width || ++ height != png_ptr->first_frame_height)) ++ png_error(png_ptr, "width and/or height in the first frame's fcTL " ++ "don't match the ones in IHDR"); ++ if (width > png_ptr->first_frame_width || ++ height > png_ptr->first_frame_height) ++ png_error(png_ptr, "width and/or height for a frame greater than" ++ "the ones in IHDR"); ++ ++ png_set_IHDR(png_ptr, info_ptr, width, height, ++ info_ptr->bit_depth, info_ptr->color_type, ++ info_ptr->interlace_type, info_ptr->compression_type, ++ info_ptr->filter_type); ++ ++ png_ptr->width = width; ++ png_ptr->height = height; ++ png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, width); ++ png_ptr->usr_width = png_ptr->width; ++} ++#endif /* PNG_WRITE_APNG_SUPPORTED */ + #endif /* WRITE */ +diff -Naru libpng-1.6.37.org/scripts/symbols.def libpng-1.6.37/scripts/symbols.def +--- libpng-1.6.37.org/scripts/symbols.def 2019-04-19 07:21:37.405024710 +0900 ++++ libpng-1.6.37/scripts/symbols.def 2019-04-19 07:22:37.856245823 +0900 +@@ -253,3 +253,23 @@ + png_set_eXIf @247 + png_get_eXIf_1 @248 + png_set_eXIf_1 @249 ++ png_get_acTL @250 ++ png_set_acTL @251 ++ png_get_num_frames @252 ++ png_get_num_plays @253 ++ png_get_next_frame_fcTL @254 ++ png_set_next_frame_fcTL @255 ++ png_get_next_frame_width @256 ++ png_get_next_frame_height @257 ++ png_get_next_frame_x_offset @258 ++ png_get_next_frame_y_offset @259 ++ png_get_next_frame_delay_num @260 ++ png_get_next_frame_delay_den @261 ++ png_get_next_frame_dispose_op @262 ++ png_get_next_frame_blend_op @263 ++ png_get_first_frame_is_hidden @264 ++ png_set_first_frame_is_hidden @265 ++ png_read_frame_head @266 ++ png_set_progressive_frame_fn @267 ++ png_write_frame_head @268 ++ png_write_frame_tail @269 diff --git a/x86_64/extra/libpng/libpng-1.6.37-apng.patch.gz b/x86_64/extra/libpng/libpng-1.6.37-apng.patch.gz new file mode 100644 index 0000000..568de12 Binary files /dev/null and b/x86_64/extra/libpng/libpng-1.6.37-apng.patch.gz differ diff --git a/x86_64/extra/libpng12/PKGBUILD b/x86_64/extra/libpng12/PKGBUILD new file mode 100644 index 0000000..35dc330 --- /dev/null +++ b/x86_64/extra/libpng12/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=libpng12 +pkgver=1.2.59 +pkgrel=1 +pkgdesc='A collection of routines used to create PNG format graphics files' +arch=('x86_64') +depends=('glibc' 'zlib') +source=("https://sourceforge.net/projects/libpng/files/libpng-${pkgver}.tar.xz" + "https://sourceforge.net/projects/libpng-apng/files/libpng12/${pkgver}/libpng-${pkgver}-apng.patch.gz") + +prepare() { + cd libpng-${pkgver} + + patch -Np1 -i ../libpng-${pkgver}-apng.patch + + libtoolize --force --copy + aclocal + autoconf + automake --add-missing +} + +build() { + cd libpng-${pkgver} + + ./configure \ + --prefix='/usr' + + make +} + +package() { + cd libpng-${pkgver} + + make DESTDIR="${pkgdir}" install + rm -rf "${pkgdir}"/usr/{bin,include/*.h,lib/{libpng.{a,so,la},pkgconfig},share} +} diff --git a/x86_64/extra/libpng12/libpng-1.2.59-apng.patch.gz b/x86_64/extra/libpng12/libpng-1.2.59-apng.patch.gz new file mode 100644 index 0000000..0456d08 Binary files /dev/null and b/x86_64/extra/libpng12/libpng-1.2.59-apng.patch.gz differ diff --git a/x86_64/extra/libpsl/PKGBUILD b/x86_64/extra/libpsl/PKGBUILD new file mode 100644 index 0000000..545a244 --- /dev/null +++ b/x86_64/extra/libpsl/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=libpsl +pkgver=0.21.1 +pkgrel=1 +arch=('x86_64') +depends=(libidn2) +source=(https://github.com/rockdaboot/$pkgname/releases/download/$pkgver/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + sed -i 's/env python/&3/' src/psl-make-dafsa + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libpwquality/PKGBUILD b/x86_64/extra/libpwquality/PKGBUILD new file mode 100644 index 0000000..2ecf61d --- /dev/null +++ b/x86_64/extra/libpwquality/PKGBUILD @@ -0,0 +1,34 @@ +pkgname=libpwquality +pkgver=1.4.4 +pkgrel=1 +arch=('x86_64') +depends=('cracklib' 'linux-pam') +makedepends=(python3 git) +backup=('etc/security/pwquality.conf') +commitid=e3e46f16c651e74bdb105a2b832b67795c57c0a2 +source=("git+https://github.com/libpwquality/libpwquality.git#commit=$commitid") + +prepare() { + cd $pkgname + + NOCONFIGURE=1 ./autogen.sh + sed '/mr_IN/d' -i po/LINGUAS +} + +build() { + cd "$pkgname" + + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --with-python-binary=python3 + + make +} + +package() { + cd "$pkgname" + + make DESTDIR="$pkgdir" install + install -m755 -d "$pkgdir"/etc/security/pwquality.conf.d +} \ No newline at end of file diff --git a/x86_64/extra/libqalculate/PKGBUILD b/x86_64/extra/libqalculate/PKGBUILD new file mode 100644 index 0000000..af6e3f3 --- /dev/null +++ b/x86_64/extra/libqalculate/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=libqalculate +pkgver=4.1.1 +pkgrel=1 +arch=(x86_64) +depends=(gmp mpfr libxml2 curl icu gettext readline doxygen) +source=(https://github.com/Qalculate/$pkgname/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + NOCONFIGURE=1 ./autogen.sh +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libraw/PKGBUILD b/x86_64/extra/libraw/PKGBUILD new file mode 100644 index 0000000..c0c3f66 --- /dev/null +++ b/x86_64/extra/libraw/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=libraw +pkgver=0.20.2 +pkgrel=1 +arch=(x86_64) +depends=(jasper lcms) +makedepends=(make autoconf-archive automake-1.15) +source=(https://www.libraw.org/data/LibRaw-$pkgver.tar.gz) + +build() { + cd LibRaw-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd LibRaw-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/librsvg/PKGBUILD b/x86_64/extra/librsvg/PKGBUILD new file mode 100644 index 0000000..d6b54c1 --- /dev/null +++ b/x86_64/extra/librsvg/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=librsvg +pkgver=2.52.5 +pkgrel=1 +arch=('x86_64') +depends=('gdk-pixbuf' 'cairo' 'pango' 'vala') +makedepends=('rust') +source=(https://download.gnome.org/sources/$pkgname/2.52/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-vala + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libsass/PKGBUILD b/x86_64/extra/libsass/PKGBUILD new file mode 100644 index 0000000..a003465 --- /dev/null +++ b/x86_64/extra/libsass/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=libsass +pkgver=3.6.5 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(gcc) +source=(https://github.com/sass/libsass/archive/$pkgver/libsass-$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + autoreconf -i +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libsm/PKGBUILD b/x86_64/extra/libsm/PKGBUILD new file mode 100644 index 0000000..28febde --- /dev/null +++ b/x86_64/extra/libsm/PKGBUILD @@ -0,0 +1,17 @@ +pkgname=libsm +pkgver=1.2.3 +pkgrel=1 +arch=('x86_64') +makedepends=(libxtrans util-macros xorgproto) +source=(https://xorg.freedesktop.org/releases/individual/lib/libSM-$pkgver.tar.bz2) + +build() { + cd libSM-$pkgver + ./configure --prefix=/usr --libdir=/usr/lib --sysconfdir=/etc + make +} + +package() { + cd libSM-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libsndfile/PKGBUILD b/x86_64/extra/libsndfile/PKGBUILD new file mode 100644 index 0000000..fa38fc6 --- /dev/null +++ b/x86_64/extra/libsndfile/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=libsndfile +pkgver=1.0.31 +pkgrel=1 +arch=('x86_64') +depends=(alsa-lib sqlite3) +source=(https://github.com/$pkgname/$pkgname/releases/download/$pkgver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libsodium/PKGBUILD b/x86_64/extra/libsodium/PKGBUILD new file mode 100644 index 0000000..7ac025e --- /dev/null +++ b/x86_64/extra/libsodium/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=libsodium +pkgver=1.0.18 +pkgrel=1 +arch=('x86_64') +depends=('glibc') +source=("https://download.libsodium.org/libsodium/releases/libsodium-$pkgver.tar.gz") + +prepare() { + #minisign -Vm $pkgname-$pkgver.tar.gz -P $_validminisignkey + echo 1 +} + +build() { + cd "$pkgname-$pkgver" + + ./configure --prefix=/usr + make +} + +package() { + cd "$pkgname-$pkgver" + make DESTDIR="$pkgdir" install +} diff --git a/x86_64/extra/libsoup/PKGBUILD b/x86_64/extra/libsoup/PKGBUILD new file mode 100644 index 0000000..65a292f --- /dev/null +++ b/x86_64/extra/libsoup/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=libsoup +pkgver=2.74.2 +pkgrel=1 +arch=('x86_64') +depends=(glib-networking libpsl libxml2 sqlite3) +source=(https://download.gnome.org/sources/$pkgname/2.74/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + --buildtype=release \ + -D vapi=enabled \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/libspectre/PKGBUILD b/x86_64/extra/libspectre/PKGBUILD new file mode 100644 index 0000000..fcfc8c3 --- /dev/null +++ b/x86_64/extra/libspectre/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=libspectre +pkgver=0.2.10 +pkgrel=1 +arch=(x86_64) +depends=(ghostscript) +makedepends=(make) +source=(https://libspectre.freedesktop.org/releases/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libspiro/PKGBUILD b/x86_64/extra/libspiro/PKGBUILD new file mode 100644 index 0000000..48f5d13 --- /dev/null +++ b/x86_64/extra/libspiro/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=libspiro +# DD/MM/YY +pkgver=10042022 +pkgrel=1 +arch=(x86_64) +depends=(glibc) +makedepends=(git make) +commitid=8aa44b49ed45ae07ca3e20fbdce3ef470e8c29c2 +source=(git+https://github.com/fontforge/libspiro.git#commit=$commitid) + +prepare() { + cd $pkgname + + autoreconf -fi + + automake --foreign -Wall + + ./configure \ + --prefix=/usr +} + +build() { + cd $pkgname + + make -j4 +} + +package() { + cd $pkgname + + make DESTDIR=$pkgdir install + + # And install that pkgconf file ( Forgetting that is a hassle ) + install -Dm644 libspiro.pc $pkgdir/usr/lib/pkgconfig/libspiro.pc +} diff --git a/x86_64/extra/libssh/PKGBUILD b/x86_64/extra/libssh/PKGBUILD new file mode 100644 index 0000000..43399f1 --- /dev/null +++ b/x86_64/extra/libssh/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=libssh +pkgver=0.9.6 +pkgrel=1 +arch=('x86_64') +depends=('zlib' 'openssl') +makedepends=('cmake' 'cmocka' 'doxygen' 'python3' 'openssh') +source=("https://www.libssh.org/files/0.9/$pkgname-$pkgver.tar.xz") + +prepare() { + mkdir -p build +} + +build() { + cd build + + cmake ../$pkgname-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DWITH_GSSAPI=OFF \ + -DUNIT_TESTING=ON + + make +} + +package_libssh() { + cd build + + make DESTDIR="$pkgdir" install +} \ No newline at end of file diff --git a/x86_64/extra/libssh2/PKGBUILD b/x86_64/extra/libssh2/PKGBUILD new file mode 100644 index 0000000..73840ea --- /dev/null +++ b/x86_64/extra/libssh2/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=libssh2 +pkgver=1.10.0 +pkgrel=1 +arch=('x86_64') +depends=('openssl' 'zlib') +source=("https://www.libssh2.org/download/$pkgname-$pkgver.tar.gz") + +build() { + cd "$pkgname-$pkgver" + + ./configure --prefix=/usr + + make +} +package() { + cd "$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install +} \ No newline at end of file diff --git a/x86_64/extra/libtheora/PKGBUILD b/x86_64/extra/libtheora/PKGBUILD new file mode 100644 index 0000000..3be8326 --- /dev/null +++ b/x86_64/extra/libtheora/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=libtheora +pkgver=1.1.1 +pkgrel=1 +arch=('x86_64') +depends=(libogg libvorbis libpng) +makedepends=(doxygen valgrind) +source=(https://downloads.xiph.org/releases/theora/libtheora-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + sed -i 's/png_\(sizeof\)/\1/g' examples/png2theora.c +} + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libtiff/PKGBUILD b/x86_64/extra/libtiff/PKGBUILD new file mode 100644 index 0000000..fe7a963 --- /dev/null +++ b/x86_64/extra/libtiff/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=libtiff +pkgver=4.3.0 +pkgrel=2 +arch=('x86_64') +depends=(glibc libjpeg zlib xz zstd freeglut) +makedepends=(mesa glu jbigkit) +source=(https://download.osgeo.org/libtiff/tiff-$pkgver.tar.gz) + +build() { + cd tiff-$pkgver + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + + make +} + +package() { + cd tiff-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libtirpc/PKGBUILD b/x86_64/extra/libtirpc/PKGBUILD new file mode 100644 index 0000000..4f5262a --- /dev/null +++ b/x86_64/extra/libtirpc/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=libtirpc +pkgver=1.3.2 +pkgrel=1 +arch=('x86_64') +source=(https://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --localstatedir=/var \ + --disable-gssapi + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libuninameslist/PKGBUILD b/x86_64/extra/libuninameslist/PKGBUILD new file mode 100644 index 0000000..832d7ff --- /dev/null +++ b/x86_64/extra/libuninameslist/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=libuninameslist +pkgver=20211114 +pkgrel=1 +arch=('x86_64') +source=("https://github.com/fontforge/${pkgname}/releases/download/${pkgver}/${pkgname}-dist-${pkgver}.tar.gz") + +prepare() { + cd ${pkgname}-${pkgver} + + autoreconf -i + automake --foreign -Wall +} + +build() { + cd ${pkgname}-${pkgver} + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install +} diff --git a/x86_64/extra/libunistring/PKGBUILD b/x86_64/extra/libunistring/PKGBUILD new file mode 100644 index 0000000..773a52e --- /dev/null +++ b/x86_64/extra/libunistring/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=libunistring +pkgver=0.9.10 +pkgrel=1 +arch=('x86_64') +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libunwind/PKGBUILD b/x86_64/extra/libunwind/PKGBUILD new file mode 100644 index 0000000..4f220dd --- /dev/null +++ b/x86_64/extra/libunwind/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=libunwind +pkgver=1.6.2 +pkgrel=1 +arch=('x86_64') +depends=('xz' 'zlib') +source=(https://download.savannah.gnu.org/releases/$pkgname/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --localstatedir=/var + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/liburing/PKGBUILD b/x86_64/extra/liburing/PKGBUILD new file mode 100644 index 0000000..2f4cae0 --- /dev/null +++ b/x86_64/extra/liburing/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=liburing +pkgver=2.1 +pkgrel=1 +arch=(x86_64) +depends=(glibc) +makedepends=(git) +commitid=807c8169e153a3985f1a4deddc302846673ef979 # Merge branch 'fix/man-madvise' of https://github.com/topecongiro/liburing +source=(git+https://git.kernel.dk/liburing#tag=liburing-$pkgver) + +prepare() { + cd $pkgname + + ./configure \ + --prefix=/usr +} + +build() { + cd $pkgname + + make +} + +package() { + cd $pkgname + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libusb/PKGBUILD b/x86_64/extra/libusb/PKGBUILD new file mode 100644 index 0000000..a0714e7 --- /dev/null +++ b/x86_64/extra/libusb/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=libusb +pkgver=1.0.24 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(systemd) +source=(https://github.com/$pkgname/$pkgname/releases/download/v$pkgver/$pkgname-$pkgver.tar.bz2 + $pkgname-1.0.24-descriptor_parsing.patch) + +prepare() { + cd $pkgname-$pkgver + patch -Np1 -i ../$pkgname-1.0.24-descriptor_parsing.patch + autoreconf -vfi +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libusb/libusb-1.0.24-descriptor_parsing.patch b/x86_64/extra/libusb/libusb-1.0.24-descriptor_parsing.patch new file mode 100644 index 0000000..cdccbc2 --- /dev/null +++ b/x86_64/extra/libusb/libusb-1.0.24-descriptor_parsing.patch @@ -0,0 +1,37 @@ +diff --git a/libusb/os/linux_usbfs.c b/libusb/os/linux_usbfs.c +index fb2ed53a..4d2dc8d6 100644 +--- a/libusb/os/linux_usbfs.c ++++ b/libusb/os/linux_usbfs.c +@@ -641,7 +641,12 @@ static int seek_to_next_config(struct libusb_context *ctx, + uint8_t *buffer, size_t len) + { + struct usbi_descriptor_header *header; +- int offset = 0; ++ int offset; ++ ++ /* Start seeking past the config descriptor */ ++ offset = LIBUSB_DT_CONFIG_SIZE; ++ buffer += LIBUSB_DT_CONFIG_SIZE; ++ len -= LIBUSB_DT_CONFIG_SIZE; + + while (len > 0) { + if (len < 2) { +@@ -718,7 +723,7 @@ static int parse_config_descriptors(struct libusb_device *dev) + } + + if (priv->sysfs_dir) { +- /* ++ /* + * In sysfs wTotalLength is ignored, instead the kernel returns a + * config descriptor with verified bLength fields, with descriptors + * with an invalid bLength removed. +@@ -727,8 +732,7 @@ static int parse_config_descriptors(struct libusb_device *dev) + int offset; + + if (num_configs > 1 && idx < num_configs - 1) { +- offset = seek_to_next_config(ctx, buffer + LIBUSB_DT_CONFIG_SIZE, +- remaining - LIBUSB_DT_CONFIG_SIZE); ++ offset = seek_to_next_config(ctx, buffer, remaining); + if (offset < 0) + return offset; + sysfs_config_len = (uint16_t)offset; diff --git a/x86_64/extra/libuv/PKGBUILD b/x86_64/extra/libuv/PKGBUILD new file mode 100644 index 0000000..0ae5c7c --- /dev/null +++ b/x86_64/extra/libuv/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=libuv +pkgver=1.42.0 +pkgrel=1 +arch=('x86_64') +source=(https://dist.libuv.org/dist/v$pkgver/$pkgname-v$pkgver.tar.gz) + +build() { + cd $pkgname-v$pkgver + + ./autogen.sh + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-v$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libva/PKGBUILD b/x86_64/extra/libva/PKGBUILD new file mode 100644 index 0000000..97e3df2 --- /dev/null +++ b/x86_64/extra/libva/PKGBUILD @@ -0,0 +1,41 @@ +pkgname=libva +pkgver=2.13.0 +pkgrel=1 +pkgdesc='Video Acceleration (VA) API for Linux' +arch=(x86_64) +url=https://01.org/linuxmedia/vaapi +license=(MIT) +depends=( + libdrm + libx11 + libxext + libxfixes + wayland +) +makedepends=( + git + libglvnd + mesa + meson +) + +backup=(etc/libva.conf) +_tag=8d948cc076cb255b442afe4f0f4e04cbc80785bf +source=(git+https://github.com/intel/libva.git#tag=${_tag}) + +build() { + CFLAGS+=" -DENABLE_VA_MESSAGING" # Option missing + meson libva build \ + --prefix=/usr \ + --buildtype=release + + ninja -C build +} + +package() { + DESTDIR="${pkgdir}" meson install -C build + + install -Dm 644 /dev/stdin "${pkgdir}"/etc/libva.conf < "$pkgdir/usr/lib/sysusers.d/libvirt.conf" + echo "z /var/lib/libvirt/qemu 0751" > "$pkgdir/usr/lib/tmpfiles.d/libvirt.conf" + + chown 0:102 "$pkgdir/usr/share/polkit-1/rules.d" + chmod 0750 "$pkgdir/usr/share/polkit-1/rules.d" + chmod 600 "$pkgdir"/etc/libvirt/nwfilter/*.xml \ + "$pkgdir/etc/libvirt/qemu/networks/default.xml" + + rm -rf \ + "$pkgdir/run" \ + "$pkgdir/var/lib/libvirt/qemu" \ + "$pkgdir/var/cache/libvirt/qemu" \ + "$pkgdir/etc/logrotate.d/libvirtd.libxl" + + rm -f "$pkgdir/etc/libvirt/qemu/networks/autostart/default.xml" +} diff --git a/x86_64/extra/libvorbis/PKGBUILD b/x86_64/extra/libvorbis/PKGBUILD new file mode 100644 index 0000000..dee00f8 --- /dev/null +++ b/x86_64/extra/libvorbis/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=libvorbis +pkgver=1.3.7 +pkgrel=1 +arch=('x86_64') +depends=(libogg) +source=(https://downloads.xiph.org/releases/vorbis/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libvpx/PKGBUILD b/x86_64/extra/libvpx/PKGBUILD new file mode 100644 index 0000000..7e95d98 --- /dev/null +++ b/x86_64/extra/libvpx/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=libvpx +pkgver=1.11.0 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(yasm nasm which curl doxygen) +source=(https://github.com/webmproject/libvpx/archive/v$pkgver/libvpx-$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + sed -i 's/cp -p/cp/' build/make/Makefile + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + ../configure \ + --prefix=/usr \ + --enable-shared + + make +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libwacom/PKGBUILD b/x86_64/extra/libwacom/PKGBUILD new file mode 100644 index 0000000..5a9e500 --- /dev/null +++ b/x86_64/extra/libwacom/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=libwacom +pkgver=1.12 +pkgrel=1 +arch=('x86_64') +depends=('systemd' 'glib2') +source=(https://github.com/linuxwacom/libwacom/releases/download/$pkgname-$pkgver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + ./autogen.sh --prefix=/usr + + make +# cd .. +# meson build $pkgname-$pkgver \ +# --prefix=/usr + +# ninja -C build +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +# DESTDIR=$pkgdir ninja install -C build +} diff --git a/x86_64/extra/libwebp/PKGBUILD b/x86_64/extra/libwebp/PKGBUILD new file mode 100644 index 0000000..ceb95da --- /dev/null +++ b/x86_64/extra/libwebp/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=libwebp +pkgver=1.2.1 +pkgrel=1 +pkgdesc="WebP library and conversion tools" +arch=(x86_64) +url="https://developers.google.com/speed/webp/" +depends=(libpng libjpeg libtiff giflib) +makedepends=(freeglut mesa glu) +source=(https://storage.googleapis.com/downloads.webmproject.org/releases/webp/$pkgname-$pkgver.tar.gz{,.asc}) + +build() { + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --enable-swap-16bit-csp \ + --enable-libwebp{mux,demux,decoder,extras} + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install +} \ No newline at end of file diff --git a/x86_64/extra/libwnck/PKGBUILD b/x86_64/extra/libwnck/PKGBUILD new file mode 100644 index 0000000..4d4e8d2 --- /dev/null +++ b/x86_64/extra/libwnck/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=libwnck +pkgver=40.0 +pkgrel=1 +arch=('x86_64') +depends=(gtk+) +source=(https://download.gnome.org/sources/$pkgname/40/$pkgname-$pkgver.tar.xz) + +prepare() { + mkdir -p $pkgname-$pkgver/build +} + +build() { + cd $pkgname-$pkgver/build + + meson --prefix=/usr --buildtype=release .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/libwpe/PKGBUILD b/x86_64/extra/libwpe/PKGBUILD new file mode 100644 index 0000000..3734354 --- /dev/null +++ b/x86_64/extra/libwpe/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=libwpe +pkgver=1.12.0 +pkgrel=1 +arch=('x86_64') +depends=(libxkbcommon mesa) +source=(https://wpewebkit.org/releases/libwpe-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir build +} + +build() { + cd $pkgname-$pkgver/build + + meson \ + --prefix=/usr \ + --buildtype=release \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/libx264/PKGBUILD b/x86_64/extra/libx264/PKGBUILD new file mode 100644 index 0000000..f45f268 --- /dev/null +++ b/x86_64/extra/libx264/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=libx264 +pkgver=2022.01.26 +pkgrel=1 +arch=('x86_64') +makedepends=(nasm) +commitid=0bb85e8bbc85244d5c8fd300033ca32539b541b7 +source=(https://code.videolan.org/videolan/x264/-/archive/$commitid/x264-$commitid.tar.gz) + +build() { + cd x264-$commitid + + ./configure \ + --prefix=/usr \ + --enable-shared + + make +} + +package() { + cd x264-$commitid + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libx265/PKGBUILD b/x86_64/extra/libx265/PKGBUILD new file mode 100644 index 0000000..705ce69 --- /dev/null +++ b/x86_64/extra/libx265/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=libx265 +pkgver=3.2.1 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(nasm cmake) +source=(http://ftp.videolan.org/pub/videolan/x265/x265_$pkgver.tar.gz) + +prepare() { + cd x265_$pkgver + + mkdir -p bld +} + +build() { + cd x265_$pkgver/bld + + cmake -DCMAKE_INSTALL_PREFIX=/usr ../source + + make +} + +package() { + cd x265_$pkgver/bld + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxau/PKGBUILD b/x86_64/extra/libxau/PKGBUILD new file mode 100644 index 0000000..62d1a1a --- /dev/null +++ b/x86_64/extra/libxau/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=libxau +pkgver=1.0.9 +pkgrel=1 +arch=('x86_64') +depends=('xorgproto') +source=(https://x.org/pub/individual/lib/libXau-$pkgver.tar.bz2) + +build() { + cd libXau-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd libXau-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxaw/PKGBUILD b/x86_64/extra/libxaw/PKGBUILD new file mode 100644 index 0000000..d2724c1 --- /dev/null +++ b/x86_64/extra/libxaw/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=libxaw +pkgver=1.0.14 +pkgrel=2 +arch=('x86_64') +depends=('libxau' 'xcb-proto' 'libxpm' xorgproto libxext libxt libxmu libice libsm) +source=(https://gitlab.freedesktop.org/xorg/lib/libxaw/-/archive/libXaw-$pkgver/libXaw-$pkgver.tar.gz) + +build() { + cd libxaw* + + NOCONFIGURE=1 ./autogen.sh + + ./configure --prefix=/usr + make +} + +package() { + cd libxaw* + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxcb/PKGBUILD b/x86_64/extra/libxcb/PKGBUILD new file mode 100644 index 0000000..5092038 --- /dev/null +++ b/x86_64/extra/libxcb/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=libxcb +pkgver=1.14 +pkgrel=1 +arch=('x86_64') +depends=('libxau' 'xcb-proto') +source=(https://xorg.freedesktop.org/archive/individual/lib/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + PYTHON=python3 ./configure --prefix=/usr --without-doxygen + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxcomposite/PKGBUILD b/x86_64/extra/libxcomposite/PKGBUILD new file mode 100644 index 0000000..e675841 --- /dev/null +++ b/x86_64/extra/libxcomposite/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=libxcomposite +pkgver=0.4.5 +pkgrel=4 +arch=('x86_64') +depends=('libx11') +source=(https://x.org/releases/individual/lib/libXcomposite-$pkgver.tar.gz) + +build() { + cd libXcomposite-$pkgver + + ./configure --prefix=/usr --disable-xf86bigfont + make +} + +check() { + cd libXcomposite-$pkgver + make check +} + +package() { + cd libXcomposite-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxcursor/PKGBUILD b/x86_64/extra/libxcursor/PKGBUILD new file mode 100644 index 0000000..e6fec09 --- /dev/null +++ b/x86_64/extra/libxcursor/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=libxcursor +pkgver=1.2.0 +pkgrel=1 +arch=('x86_64') +depends=('libxfixes' 'libxrender') +source=(https://xorg.freedesktop.org/archive/individual/lib/libXcursor-$pkgver.tar.bz2) + +build() { + cd libXcursor-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd libXcursor-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxcvt/PKGBUILD b/x86_64/extra/libxcvt/PKGBUILD new file mode 100644 index 0000000..0d1c745 --- /dev/null +++ b/x86_64/extra/libxcvt/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=libxcvt +pkgver=0.1.1 +pkgrel=1 +arch=('x86_64') +makedepends=('meson') +source=(https://xorg.freedesktop.org/archive/individual/lib/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + mkdir -p build && cd build + + meson --prefix=/usr .. + meson compile +} + +package() { + cd $pkgname-$pkgver/build + DESTDIR=$pkgdir meson install +} diff --git a/x86_64/extra/libxdamage/PKGBUILD b/x86_64/extra/libxdamage/PKGBUILD new file mode 100644 index 0000000..6210e7d --- /dev/null +++ b/x86_64/extra/libxdamage/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=libxdamage +pkgver=1.1.5 +pkgrel=4 +arch=('x86_64') +depends=('libx11') +source=(https://x.org/releases/individual/lib/libXdamage-$pkgver.tar.gz) + +build() { + cd libXdamage-$pkgver + + ./configure --prefix=/usr + make +} + +check() { + cd libXdamage-$pkgver + make check +} + +package() { + cd libXdamage-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxdm/PKGBUILD b/x86_64/extra/libxdm/PKGBUILD new file mode 100644 index 0000000..df7a1d1 --- /dev/null +++ b/x86_64/extra/libxdm/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=libxdm +pkgver=1.1.12 +pkgrel=1 +arch=('x86_64') +depends=('libxau' 'xcb-proto' 'libxaw' 'libxdmcp') +source=(https://gitlab.freedesktop.org/xorg/app/xdm/-/archive/xdm-$pkgver/$pkgname-$pkgver.tar.gz) + +build() { + cd xdm* + + NOCONFIGURE=1 ./autogen.sh + + ./configure --prefix=/usr + make +} + +package() { + cd xdm* + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxdmcp/PKGBUILD b/x86_64/extra/libxdmcp/PKGBUILD new file mode 100644 index 0000000..d9e03d4 --- /dev/null +++ b/x86_64/extra/libxdmcp/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=libxdmcp +pkgver=1.1.3 +pkgrel=1 +arch=('x86_64') +depends=('libxau' 'xcb-proto' 'libxaw') +source=(https://gitlab.freedesktop.org/xorg/lib/libxdmcp/-/archive/libXdmcp-$pkgver/libXdmcp-$pkgver.tar.gz) + +build() { + cd libxdm* + + NOCONFIGURE=1 ./autogen.sh + + ./configure --prefix=/usr + make +} + +package() { + cd libxdm* + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxext/PKGBUILD b/x86_64/extra/libxext/PKGBUILD new file mode 100644 index 0000000..2df7e73 --- /dev/null +++ b/x86_64/extra/libxext/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=libxext +pkgver=1.3.4 +pkgrel=2 +arch=('x86_64') +depends=('libx11') +makedepends=('util-macros' 'xorgproto') +source=(https://xorg.freedesktop.org/releases/individual/lib/libXext-$pkgver.tar.bz2) + +build() { + cd libXext-$pkgver + + ./configure --prefix=/usr --sysconfdir=/etc +} + +package() { + cd libXext-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxfixes/PKGBUILD b/x86_64/extra/libxfixes/PKGBUILD new file mode 100644 index 0000000..2c10db2 --- /dev/null +++ b/x86_64/extra/libxfixes/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=libxfixes +pkgver=6.0.0 +pkgrel=1 +arch=('x86_64') +depends=('libx11') +makedepends=('util-macros' 'xorgproto' 'libx11') +source=(https://xorg.freedesktop.org/releases/individual/lib/libXfixes-$pkgver.tar.bz2) + +build() { + cd libXfixes-$pkgver + + ./configure --prefix=/usr --sysconfdir=/etc +} + +package() { + cd libXfixes-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxfont2/PKGBUILD b/x86_64/extra/libxfont2/PKGBUILD new file mode 100644 index 0000000..0fcb288 --- /dev/null +++ b/x86_64/extra/libxfont2/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=libxfont2 +pkgver=2.0.5 +pkgrel=1 +arch=('x86_64') +depends=(freetype2 libxtrans xorgproto libfontenc) +source=(https://xorg.freedesktop.org/archive/individual/lib/libXfont2-$pkgver.tar.bz2) + +build() { + cd libXfont2-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd libXfont2-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxft/PKGBUILD b/x86_64/extra/libxft/PKGBUILD new file mode 100644 index 0000000..35601d7 --- /dev/null +++ b/x86_64/extra/libxft/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=libxft +pkgver=2.3.4 +pkgrel=1 +arch=('x86_64') +depends=(fontconfig libxrender) +makedepends=(pkgconf) +source=(https://xorg.freedesktop.org/releases/individual/lib/libXft-${pkgver}.tar.bz2) + +build() { + cd libXft-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + + make +} + +package() { + cd libXft-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxi/PKGBUILD b/x86_64/extra/libxi/PKGBUILD new file mode 100644 index 0000000..8c65b58 --- /dev/null +++ b/x86_64/extra/libxi/PKGBUILD @@ -0,0 +1,17 @@ +pkgname=libxi +pkgver=1.7.10 +pkgrel=1 +arch=('x86_64') +makedepends=(libxtrans util-macros xorgproto) +source=(https://xorg.freedesktop.org/releases/individual/lib/libXi-$pkgver.tar.bz2) + +build() { + cd libXi-$pkgver + ./configure --prefix=/usr --libdir=/usr/lib --sysconfdir=/etc + make +} + +package() { + cd libXi-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxinerama/PKGBUILD b/x86_64/extra/libxinerama/PKGBUILD new file mode 100644 index 0000000..1a96eb2 --- /dev/null +++ b/x86_64/extra/libxinerama/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=libxinerama +pkgver=1.1.4 +pkgrel=1 +arch=('x86_64') +depends=(libxext) +source=(https://xorg.freedesktop.org/releases/individual/lib/libXinerama-$pkgver.tar.bz2) + +build() { + cd libXinerama-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc LIBS=-lX11 + + make +} + +package() { + cd libXinerama-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxkbcommon/PKGBUILD b/x86_64/extra/libxkbcommon/PKGBUILD new file mode 100644 index 0000000..67557fc --- /dev/null +++ b/x86_64/extra/libxkbcommon/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=libxkbcommon +pkgver=1.3.1 +pkgrel=2 +arch=('x86_64') +depends=(xkeyboard-config wayland wayland-protocols) +source=(https://xkbcommon.org/download/$pkgname-$pkgver.tar.xz) + +prepare() { + mkdir -p $pkgname-$pkgver/build +} + +build() { + cd $pkgname-$pkgver/build + + meson --prefix=/usr --buildtype=release -Denable-docs=false .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/libxkbfile/PKGBUILD b/x86_64/extra/libxkbfile/PKGBUILD new file mode 100644 index 0000000..1bbfe49 --- /dev/null +++ b/x86_64/extra/libxkbfile/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=libxkbfile +pkgver=1.1.0 +pkgrel=1 +arch=('x86_64') +depends=(libx11) +source=(https://x.org/pub/individual/lib/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr --sysconfdir=/etc + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxklavier/PKGBUILD b/x86_64/extra/libxklavier/PKGBUILD new file mode 100644 index 0000000..bee5901 --- /dev/null +++ b/x86_64/extra/libxklavier/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=libxklavier +pkgver=5.4 +pkgrel=1 +arch=('x86_64') +depends=(glib2 libxkbfile libxml2 xkeyboard-config libxi) +source=(git+https://anongit.freedesktop.org/git/$pkgname) + +build() { + cd $pkgname + ./autogen.sh --prefix=/usr --with-xkb-base=/usr/bin \ + --with-xkb-base=/usr/share/X11/xkb + + make +} + +package() { + cd $pkgname + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxmlb/PKGBUILD b/x86_64/extra/libxmlb/PKGBUILD new file mode 100644 index 0000000..2f2f791 --- /dev/null +++ b/x86_64/extra/libxmlb/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=libxmlb +pkgver=0.3.7 +pkgrel=1 +arch=(x86_64) +depends=(glib2 snowball xz) +makedepends=(meson gobject-introspection gtk-doc) +source=(https://people.freedesktop.org/~hughsient/releases/${pkgname}-${pkgver}.tar.xz) + +build() { + meson \ + $pkgname-$pkgver \ + build \ + --prefix=/usr \ + -D stemmer=true \ + -D gtkdoc=false + + ninja -C build +} + +package() { + DESTDIR="${pkgdir}" meson install -C build + + rm -rf "${pkgdir}"/usr/{lib,share}/installed-tests/ +} diff --git a/x86_64/extra/libxmu/PKGBUILD b/x86_64/extra/libxmu/PKGBUILD new file mode 100644 index 0000000..d79dfcc --- /dev/null +++ b/x86_64/extra/libxmu/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=libxmu +pkgver=master +pkgrel=2 +arch=('x86_64') +depends=(libxext xorgproto libxt) +source=(git+https://gitlab.freedesktop.org/xorg/lib/libxmu.git --depth=1) + +build() { + cd $pkgname + + NOCONFIGURE=1 ./autogen.sh + ./configure --prefix=/usr --libdir=/usr/lib + make +} + +package() { + cd $pkgname + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxpm/PKGBUILD b/x86_64/extra/libxpm/PKGBUILD new file mode 100644 index 0000000..85c6c44 --- /dev/null +++ b/x86_64/extra/libxpm/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=libxpm +pkgver=3.5.13 +pkgrel=1 +arch=('x86_64') +depends=('libxau' 'xcb-proto') +source=(https://gitlab.freedesktop.org/xorg/lib/libxpm/-/archive/libXpm-$pkgver/libXpm-$pkgver.tar.gz) + +build() { + cd libxpm* + + NOCONFIGURE=1 ./autogen.sh + + ./configure --prefix=/usr + make +} + +package() { + cd libxpm* + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxrandr/PKGBUILD b/x86_64/extra/libxrandr/PKGBUILD new file mode 100644 index 0000000..43ba622 --- /dev/null +++ b/x86_64/extra/libxrandr/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=libxrandr +pkgver=1.5.2 +pkgrel=1 +arch=('x86_64') +depends=('libx11' 'libxext' 'libxrender') +makedepends=('util-macros' 'xorgproto' 'libx11' 'libxrender') +source=(https://xorg.freedesktop.org/releases/individual/lib/libXrandr-$pkgver.tar.bz2) + +build() { + cd libXrandr-$pkgver + + ./configure --prefix=/usr --sysconfdir=/etc +} + +package() { + cd libXrandr-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxrender/PKGBUILD b/x86_64/extra/libxrender/PKGBUILD new file mode 100644 index 0000000..5e72ffd --- /dev/null +++ b/x86_64/extra/libxrender/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=libxrender +pkgver=0.9.10 +pkgrel=1 +arch=('x86_64') +depends=('libx11') +makedepends=('util-macros' 'xorgproto' 'libx11') +source=(https://xorg.freedesktop.org/releases/individual/lib/libXrender-$pkgver.tar.bz2) + +build() { + cd libXrender-$pkgver + + ./configure --prefix=/usr --sysconfdir=/etc +} + +package() { + cd libXrender-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxres/PKGBUILD b/x86_64/extra/libxres/PKGBUILD new file mode 100644 index 0000000..ab76908 --- /dev/null +++ b/x86_64/extra/libxres/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=libxres +pkgver=1.2.1 +pkgrel=1 +arch=('x86_64') +depends=(libxext) +makedepends=(util-macros xorgproto) +source=(https://xorg.freedesktop.org/releases/individual/lib/libXres-${pkgver}.tar.bz2) + +build() { + cd "libXres-${pkgver}" + + ./configure --prefix=/usr --sysconfdir=/etc + + make +} + +package() { + cd "libXres-${pkgver}" + + make DESTDIR="${pkgdir}" install +} diff --git a/x86_64/extra/libxshmfence/PKGBUILD b/x86_64/extra/libxshmfence/PKGBUILD new file mode 100644 index 0000000..67ce015 --- /dev/null +++ b/x86_64/extra/libxshmfence/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=libxshmfence +pkgver=1.3 +pkgrel=1 +arch=('x86_64') +depends=('libx11' 'glibc') +makedepends=('util-macros' 'xorgproto' 'libx11') +source=(https://xorg.freedesktop.org/releases/individual/lib/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --sysconfdir=/etc +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/libxslt/0001-Make-generate-id-deterministic.patch b/x86_64/extra/libxslt/0001-Make-generate-id-deterministic.patch new file mode 100644 index 0000000..3928c7b --- /dev/null +++ b/x86_64/extra/libxslt/0001-Make-generate-id-deterministic.patch @@ -0,0 +1,184 @@ +From a94626df19f62bc7ee5aa8e65dd1995bed1a8092 Mon Sep 17 00:00:00 2001 +From: Daniel Veillard +Date: Sun, 29 Oct 2017 01:04:54 +0200 +Subject: [PATCH 1/2] Make generate-id deterministic + +Origin: upstream, https://bugzilla.gnome.org/attachment.cgi?id=306475 +Bug: https://bugzilla.gnome.org/show_bug.cgi?id=751621 +Bug-Debian: https://bugs.debian.org/823857 +--- + libxslt/functions.c | 91 ++++++++++++++++++++++++++++++++++++++++- + libxslt/functions.h | 7 ++++ + libxslt/transform.c | 8 ++++ + libxslt/xsltInternals.h | 2 + + 4 files changed, 107 insertions(+), 1 deletion(-) + +diff --git a/libxslt/functions.c b/libxslt/functions.c +index b350545a..858a483a 100644 +--- a/libxslt/functions.c ++++ b/libxslt/functions.c +@@ -671,6 +671,63 @@ xsltFormatNumberFunction(xmlXPathParserContextPtr ctxt, int nargs) + xmlXPathFreeObject(decimalObj); + } + ++/** ++ * xsltCleanupIds: ++ * @ctxt: the transformation context ++ * @root: the root of the resulting document ++ * ++ * This clean up ids which may have been saved in Element contents ++ * by xsltGenerateIdFunction() to provide stable IDs on elements. ++ * ++ * Returns the number of items cleaned or -1 in case of error ++ */ ++int ++xsltCleanupIds(xsltTransformContextPtr ctxt, xmlNodePtr root) { ++ xmlNodePtr cur; ++ int count = 0; ++ ++ if ((ctxt == NULL) || (root == NULL)) ++ return(-1); ++ if (root->type != XML_ELEMENT_NODE) ++ return(-1); ++ ++ cur = root; ++ while (cur != NULL) { ++ if (cur->type == XML_ELEMENT_NODE) { ++ if (cur->content != NULL) { ++ cur->content = NULL; ++ count++; ++ } ++ if (cur->children != NULL) { ++ cur = cur->children; ++ continue; ++ } ++ } ++ if (cur->next != NULL) { ++ cur = cur->next; ++ continue; ++ } ++ do { ++ cur = cur->parent; ++ if (cur == NULL) ++ break; ++ if (cur == (xmlNodePtr) root) { ++ cur = NULL; ++ break; ++ } ++ if (cur->next != NULL) { ++ cur = cur->next; ++ break; ++ } ++ } while (cur != NULL); ++ } ++ ++fprintf(stderr, "Attributed %d IDs for element, cleaned up %d\n", ++ ctxt->nextid, count); ++ ++ return(count); ++} ++ + /** + * xsltGenerateIdFunction: + * @ctxt: the XPath Parser context +@@ -722,7 +779,39 @@ xsltGenerateIdFunction(xmlXPathParserContextPtr ctxt, int nargs){ + if (obj) + xmlXPathFreeObject(obj); + +- val = (long)((char *)cur - (char *)&base_address); ++ /* ++ * Try to provide stable ID for generated document: ++ * - usually ID are computed to be placed on elements via attributes ++ * so using the element as the node for the ID ++ * - the cur->content should be a correct placeholder for this, we use ++ * it to hold element node numbers in xmlXPathOrderDocElems to ++ * speed up XPath too ++ * - xsltCleanupIds() clean them up before handing the XSLT output ++ * to the API client. ++ * - other nodes types use the node address method but that should ++ * not end up in resulting document ID ++ * - we can enable this by default without risk of performance issues ++ * only the one pass xsltCleanupIds() is added ++ */ ++ if (cur->type == XML_ELEMENT_NODE) { ++ if (cur->content == NULL) { ++ xsltTransformContextPtr tctxt; ++ ++ tctxt = xsltXPathGetTransformContext(ctxt); ++ if (tctxt == NULL) { ++ val = (long)((char *)cur - (char *)&base_address); ++ } else { ++ tctxt->nextid++; ++ val = tctxt->nextid; ++ cur->content = (void *) (val); ++ } ++ } else { ++ val = (long) cur->content; ++ } ++ } else { ++ val = (long)((char *)cur - (char *)&base_address); ++ } ++ + if (val >= 0) { + snprintf((char *)str, sizeof(str), "idp%ld", val); + } else { +diff --git a/libxslt/functions.h b/libxslt/functions.h +index 5455b7f4..31163613 100644 +--- a/libxslt/functions.h ++++ b/libxslt/functions.h +@@ -63,6 +63,13 @@ XSLTPUBFUN void XSLTCALL + xsltFunctionAvailableFunction (xmlXPathParserContextPtr ctxt, + int nargs); + ++/* ++ * Cleanup for ID generation ++ */ ++XSLTPUBFUN int XSLTCALL ++ xsltCleanupIds (xsltTransformContextPtr ctxt, ++ xmlNodePtr root); ++ + /* + * And the registration + */ +diff --git a/libxslt/transform.c b/libxslt/transform.c +index d1c47932..3d1ee059 100644 +--- a/libxslt/transform.c ++++ b/libxslt/transform.c +@@ -706,6 +706,7 @@ xsltNewTransformContext(xsltStylesheetPtr style, xmlDocPtr doc) { + cur->traceCode = (unsigned long*) &xsltDefaultTrace; + cur->xinclude = xsltGetXIncludeDefault(); + cur->keyInitLevel = 0; ++ cur->nextid = 0; + + return(cur); + +@@ -6140,6 +6141,13 @@ xsltApplyStylesheetInternal(xsltStylesheetPtr style, xmlDocPtr doc, + if (root != NULL) { + const xmlChar *doctype = NULL; + ++ /* ++ * cleanup ids which may have been saved in Elements content ptrs ++ */ ++ if (ctxt->nextid != 0) { ++ xsltCleanupIds(ctxt, root); ++ } ++ + if ((root->ns != NULL) && (root->ns->prefix != NULL)) + doctype = xmlDictQLookup(ctxt->dict, root->ns->prefix, root->name); + if (doctype == NULL) +diff --git a/libxslt/xsltInternals.h b/libxslt/xsltInternals.h +index 14a971aa..a7d71b57 100644 +--- a/libxslt/xsltInternals.h ++++ b/libxslt/xsltInternals.h +@@ -1782,6 +1782,8 @@ struct _xsltTransformContext { + int maxTemplateVars; + unsigned long opLimit; + unsigned long opCount; ++ ++ unsigned long nextid;/* for generating stable ids */ + }; + + /** +-- +2.27.0 + diff --git a/x86_64/extra/libxslt/0002-Fix-manpage.patch b/x86_64/extra/libxslt/0002-Fix-manpage.patch new file mode 100644 index 0000000..fe7bfea --- /dev/null +++ b/x86_64/extra/libxslt/0002-Fix-manpage.patch @@ -0,0 +1,45 @@ +From ea42953d3d75278f4f89009dfeed115200e4d102 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Wed, 10 Jun 2020 17:13:43 +0000 +Subject: [PATCH 2/2] Fix manpage + +Use the right stylesheet for DocBook 4. This fixes the bad whitespace +processing. + +Use the just-built xsltproc to generate the manpage. +--- + doc/Makefile.am | 4 ++-- + doc/xsltproc.xml | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/doc/Makefile.am b/doc/Makefile.am +index 3d5364ca..6a7b9408 100644 +--- a/doc/Makefile.am ++++ b/doc/Makefile.am +@@ -239,9 +239,9 @@ libxslt-api.xml libxslt-refs.xml EXSLT/libexslt-api.xml \ + ($(XSLTPROC) -o ../libxslt/libxslt.syms $(srcdir)/syms.xsl $(srcdir)/symbols.xml) + + xsltproc.1: $(srcdir)/xsltproc.xml +- -@(if [ -x $(XSLTPROC) ] ; then \ ++ -@(if [ -x $(srcdir)/../xsltproc/xsltproc ] ; then \ + echo "Rebuilding the man pages from the xml" ; \ +- $(XSLTPROC) --nonet $(srcdir)/xsltproc.xml ; fi) ++ $(srcdir)/../xsltproc/xsltproc --nonet $(srcdir)/xsltproc.xml ; fi) + + # Note that in the following, xmllint output is piped to xsltproc + search.php: $(srcdir)/api.xsl $(srcdir)/site.xsl $(srcdir)/search.templ \ +diff --git a/doc/xsltproc.xml b/doc/xsltproc.xml +index 08fc3e97..6ca1b323 100644 +--- a/doc/xsltproc.xml ++++ b/doc/xsltproc.xml +@@ -1,6 +1,6 @@ + + ++ href="http://cdn.docbook.org/release/xsl-nons/current/manpages/docbook.xsl"?> + +Date: Thu, 8 Jul 2021 20:56:05 +0200 +Subject: [PATCH] Reapply [IR] Don't accept nullptr as GEP element type + +Reapply after fixing another occurrence in lldb that was relying +on this in the preceding commit. + +----- + +GetElementPtrInst::Create() (and IRBuilder methods based on it) +currently accept nullptr as the element type, and will fetch the +element type from the pointer in that case. Remove this fallback, +as it is incompatible with opaque pointers. I've removed a handful +of leftover calls using this behavior as a preliminary step. + +Out-of-tree code affected by this change should either pass a proper +type, or can temporarily explicitly call getPointerElementType(), +if the newly added assertion is encountered. + +Differential Revision: https://reviews.llvm.org/D105653 +--- + llvm/include/llvm/IR/Instructions.h | 20 ++++++-------------- + 1 file changed, 6 insertions(+), 14 deletions(-) + +diff --git a/llvm/include/llvm/IR/Instructions.h b/llvm/include/llvm/IR/Instructions.h +index a5cebf0a4626..0c43a56daa33 100644 +--- a/llvm/include/llvm/IR/Instructions.h ++++ b/llvm/include/llvm/IR/Instructions.h +@@ -956,13 +956,9 @@ public: + const Twine &NameStr = "", + Instruction *InsertBefore = nullptr) { + unsigned Values = 1 + unsigned(IdxList.size()); +- if (!PointeeType) { +- PointeeType = +- cast(Ptr->getType()->getScalarType())->getElementType(); +- } else { +- assert(cast(Ptr->getType()->getScalarType()) +- ->isOpaqueOrPointeeTypeMatches(PointeeType)); +- } ++ assert(PointeeType && "Must specify element type"); ++ assert(cast(Ptr->getType()->getScalarType()) ++ ->isOpaqueOrPointeeTypeMatches(PointeeType)); + return new (Values) GetElementPtrInst(PointeeType, Ptr, IdxList, Values, + NameStr, InsertBefore); + } +@@ -972,13 +968,9 @@ public: + const Twine &NameStr, + BasicBlock *InsertAtEnd) { + unsigned Values = 1 + unsigned(IdxList.size()); +- if (!PointeeType) { +- PointeeType = +- cast(Ptr->getType()->getScalarType())->getElementType(); +- } else { +- assert(cast(Ptr->getType()->getScalarType()) +- ->isOpaqueOrPointeeTypeMatches(PointeeType)); +- } ++ assert(PointeeType && "Must specify element type"); ++ assert(cast(Ptr->getType()->getScalarType()) ++ ->isOpaqueOrPointeeTypeMatches(PointeeType)); + return new (Values) GetElementPtrInst(PointeeType, Ptr, IdxList, Values, + NameStr, InsertAtEnd); + } diff --git a/x86_64/extra/llvm/02.patch b/x86_64/extra/llvm/02.patch new file mode 100644 index 0000000..c716886 --- /dev/null +++ b/x86_64/extra/llvm/02.patch @@ -0,0 +1,13 @@ +diff --git a/llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt b/llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt +index eb924282a75e..85929b54d6ce 100644 +--- a/llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt ++++ b/llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt +@@ -44,3 +44,8 @@ add_llvm_component_library(LLVMAsmPrinter + Support + Target + ) ++ ++# https://bugs.llvm.org/show_bug.cgi?id=50611#c3 ++if (CMAKE_COMPILER_IS_GNUCXX) ++ set_source_files_properties(DwarfCompileUnit.cpp PROPERTIES COMPILE_FLAGS -fno-strict-aliasing) ++endif() diff --git a/x86_64/extra/llvm/03.patch b/x86_64/extra/llvm/03.patch new file mode 100644 index 0000000..1138501 --- /dev/null +++ b/x86_64/extra/llvm/03.patch @@ -0,0 +1,50 @@ +# Based on https://github.com/ispc/ispc/blob/main/llvm_patches/12_0_disable-A-B-A-B-and-BSWAP-in-InstCombine.patch + +diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp +index d01a021bf3f4..bccce825a03d 100644 +--- a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp ++++ b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp +@@ -15,6 +15,7 @@ + #include "llvm/ADT/APInt.h" + #include "llvm/ADT/STLExtras.h" + #include "llvm/ADT/SmallVector.h" ++#include "llvm/ADT/Triple.h" + #include "llvm/Analysis/InstructionSimplify.h" + #include "llvm/Analysis/ValueTracking.h" + #include "llvm/IR/Constant.h" +@@ -1369,9 +1370,12 @@ Instruction *InstCombinerImpl::visitAdd(BinaryOperator &I) { + } + } + +- // A+B --> A|B iff A and B have no bits set in common. +- if (haveNoCommonBitsSet(LHS, RHS, DL, &AC, &I, &DT)) +- return BinaryOperator::CreateOr(LHS, RHS); ++ // Disable this transformation for ISPC SPIR-V ++ if (!Triple(I.getModule()->getTargetTriple()).isSPIR()) { ++ // A+B --> A|B iff A and B have no bits set in common. ++ if (haveNoCommonBitsSet(LHS, RHS, DL, &AC, &I, &DT)) ++ return BinaryOperator::CreateOr(LHS, RHS); ++ } + + // add (select X 0 (sub n A)) A --> select X A n + { +diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp +index 120852c44474..8de55311ce3e 100644 +--- a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp ++++ b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp +@@ -2671,9 +2671,12 @@ Instruction *InstCombinerImpl::visitOr(BinaryOperator &I) { + if (Instruction *FoldedLogic = foldBinOpIntoSelectOrPhi(I)) + return FoldedLogic; + +- if (Instruction *BitOp = matchBSwapOrBitReverse(I, /*MatchBSwaps*/ true, +- /*MatchBitReversals*/ true)) +- return BitOp; ++ // Disable this transformation for ISPC SPIR-V ++ if (!Triple(I.getModule()->getTargetTriple()).isSPIR()) { ++ if (Instruction *BitOp = matchBSwapOrBitReverse(I, /*MatchBSwaps*/ true, ++ /*MatchBitReversals*/ true)) ++ return BitOp; ++ } + + if (Instruction *Funnel = matchFunnelShift(I, *this)) + return Funnel; diff --git a/x86_64/extra/llvm/04.patch b/x86_64/extra/llvm/04.patch new file mode 100644 index 0000000..263020e --- /dev/null +++ b/x86_64/extra/llvm/04.patch @@ -0,0 +1,91 @@ +From e7c9a6cae09d99388d8384ca7c0fb5b24b353975 Mon Sep 17 00:00:00 2001 +From: Nikita Popov +Date: Mon, 17 Jan 2022 15:48:01 +0100 +Subject: [PATCH] [SDAG] Don't move DBG_VALUE instructions after insertion + point during scheduling (PR53243) + +EmitSchedule() shouldn't be touching instructions after the provided +insertion point. The change introduced in D83561 performs a scan to +the end of the block, and thus may move unrelated instructions. In +particular, this ends up moving instructions that have been produced +by FastISel and will later be deleted. Moving them means that more +instructions than intended are removed. + +Fix this by stopping the iteration when the insertion point is +reached. + +Fixes https://github.com/llvm/llvm-project/issues/53243. + +Differential Revision: https://reviews.llvm.org/D117489 +--- + .../SelectionDAG/ScheduleDAGSDNodes.cpp | 7 ++-- + .../CodeGen/X86/pr53243-tail-call-fastisel.ll | 39 +++++++++++++++++++ + 2 files changed, 43 insertions(+), 3 deletions(-) + create mode 100644 llvm/test/CodeGen/X86/pr53243-tail-call-fastisel.ll + +diff --git a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp b/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp +index bec240d6c4d4..403f34573899 100644 +--- a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp ++++ b/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp +@@ -1057,12 +1057,13 @@ EmitSchedule(MachineBasicBlock::iterator &InsertPos) { + "first terminator cannot be a debug value"); + for (MachineInstr &MI : make_early_inc_range( + make_range(std::next(FirstTerm), InsertBB->end()))) { ++ // Only scan up to insertion point. ++ if (&MI == InsertPos) ++ break; ++ + if (!MI.isDebugValue()) + continue; + +- if (&MI == InsertPos) +- InsertPos = std::prev(InsertPos->getIterator()); +- + // The DBG_VALUE was referencing a value produced by a terminator. By + // moving the DBG_VALUE, the referenced value also needs invalidating. + MI.getOperand(0).ChangeToRegister(0, false); +diff --git a/llvm/test/CodeGen/X86/pr53243-tail-call-fastisel.ll b/llvm/test/CodeGen/X86/pr53243-tail-call-fastisel.ll +new file mode 100644 +index 000000000000..333eff8fb008 +--- /dev/null ++++ b/llvm/test/CodeGen/X86/pr53243-tail-call-fastisel.ll +@@ -0,0 +1,39 @@ ++; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ++; RUN: llc -O0 -fast-isel -mtriple=x86_64-- < %s | FileCheck %s ++ ++define void @test() { ++; CHECK-LABEL: test: ++; CHECK: # %bb.0: ++; CHECK-NEXT: jmp set_state@PLT # TAILCALL ++ tail call void @set_state() ++ call void @llvm.dbg.value(metadata i64 0, metadata !10, metadata !DIExpression()), !dbg !16 ++ ret void ++} ++ ++declare void @set_state() ++ ++; Function Attrs: nofree nosync nounwind readnone speculatable willreturn ++declare void @llvm.dbg.value(metadata, metadata, metadata) #0 ++ ++attributes #0 = { nofree nosync nounwind readnone speculatable willreturn } ++ ++!llvm.module.flags = !{!0} ++!llvm.dbg.cu = !{!1} ++ ++!0 = !{i32 2, !"Debug Info Version", i32 3} ++!1 = distinct !DICompileUnit(language: DW_LANG_Rust, file: !2, producer: "clang LLVM (rustc version 1.60.0-nightly (ec4bcaac4 2022-01-15))", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !3) ++!2 = !DIFile(filename: "src/lib.rs/@/bug.63e521cd-cgu.0", directory: "/tmp/rust-bug") ++!3 = !{!4} ++!4 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "Option", file: !5, baseType: !6, size: 8, align: 8, flags: DIFlagEnumClass, elements: !7) ++!5 = !DIFile(filename: "", directory: "") ++!6 = !DIBasicType(name: "u8", size: 8, encoding: DW_ATE_unsigned) ++!7 = !{!8, !9} ++!8 = !DIEnumerator(name: "None", value: 0) ++!9 = !DIEnumerator(name: "Some", value: 1) ++!10 = !DILocalVariable(name: "msg", arg: 2, scope: !11, file: !12, line: 689, type: !6) ++!11 = distinct !DISubprogram(name: "expect<()>", linkageName: "_ZN4core6option15Option$LT$T$GT$6expect17h9a574c18f194c213E", scope: !4, file: !12, line: 689, type: !13, scopeLine: 689, flags: DIFlagPrototyped, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !1, templateParams: !15, retainedNodes: !15) ++!12 = !DIFile(filename: "/rustc/ec4bcaac450279b029f3480b8b8f1b82ab36a5eb/library/core/src/option.rs", directory: "", checksumkind: CSK_MD5, checksum: "4120c8557937a0772190a676ec193800") ++!13 = !DISubroutineType(types: !14) ++!14 = !{null, !4} ++!15 = !{} ++!16 = !DILocation(line: 0, scope: !11) diff --git a/x86_64/extra/llvm/PKGBUILD b/x86_64/extra/llvm/PKGBUILD new file mode 100644 index 0000000..6a9e6ff --- /dev/null +++ b/x86_64/extra/llvm/PKGBUILD @@ -0,0 +1,61 @@ +pkgname=llvm +pkgver=13.0.1 +pkgrel=1 +depends=(libffi libxml2 ncurses perl5 zlib libedit) +makedepends=('cmake' 'python3') +arch=('x86_64') +psource=https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver +source=($psource/$pkgname-$pkgver.src.tar.xz + 01.patch + 02.patch + 03.patch + 04.patch + llvm-config.h) + +prepare() { + cd $pkgname-$pkgver.src + mkdir -p build + + # https://github.com/intel/intel-graphics-compiler/issues/204 + echo "[PATCH]: 01 of 04" && patch -Rp2 -i ../01.patch + + # Work around intermittent 'clang -0 -g' crashes + echo "[PATCH]: 02 of 04" && patch -Np2 -i ../02.patch + + # Fix an ISPC build failure (https://github.com/ispc/ispc/issues/2189) + echo "[PATCH]: 03 of 04" && patch -Np2 -i ../03.patch + + # https://github.com/llvm/llvm-project/issues/53243 + https://github.com/rust-lang/rust/issues/92869 + echo "[PATCH]: 04 of 04" && patch -Np2 -i ../04.patch +} + +build() { + cd $pkgname-$pkgver.src/build + + cmake .. -G Ninja \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D LLVM_BUILD_LLVM_DYLIB=ON \ + -D LLVM_LINK_LLVM_DYLIB=ON \ + -D LLVM_INSTALL_UTILS=ON \ + -D LLVM_ENABLE_RTTI=ON \ + -D LLVM_ENABLE_FFI=ON \ + -D LLVM_BUILD_TESTS=OFF \ + -D LLVM_BUILD_DOCS=OFF \ + -D LLVM_BINUTILS_INCDIR=/usr/include + + ninja all +} + +package() { + cd $pkgname-$pkgver.src/build + + DESTDIR=$pkgdir ninja install + + pushd ../utils/lit + python3 setup.py install --root="$pkgdir" -O1 + popd + + install -d "$pkgdir/usr/lib/bfd-plugins" + ln -s ../LLVMgold.so "$pkgdir/usr/lib/bfd-plugins/LLVMgold.so" +} diff --git a/x86_64/extra/llvm/llvm-config.h b/x86_64/extra/llvm/llvm-config.h new file mode 100644 index 0000000..2fa08c9 --- /dev/null +++ b/x86_64/extra/llvm/llvm-config.h @@ -0,0 +1,9 @@ +#include + +#if __WORDSIZE == 32 +#include "llvm-config-32.h" +#elif __WORDSIZE == 64 +#include "llvm-config-64.h" +#else +#error "Unknown word size" +#endif diff --git a/x86_64/extra/lm-sensors/PKGBUILD b/x86_64/extra/lm-sensors/PKGBUILD new file mode 100644 index 0000000..b6a205a --- /dev/null +++ b/x86_64/extra/lm-sensors/PKGBUILD @@ -0,0 +1,46 @@ +pkgname=lm-sensors +pkgver=3.6.0.r41.g31d1f125 +_commit=31d1f125d8076f1c8c8f3224b31d240e6e6a1763 +pkgrel=1 +pkgdesc="Collection of user space tools for general SMBus access and hardware monitoring" +arch=('x86_64') +url="https://hwmon.wiki.kernel.org/lm_sensors" +license=('GPL' 'LGPL') +optdepends=('rrdtool: for logging with sensord' + 'perl: for sensor detection and configuration convert') +makedepends=('rrdtool' 'perl' 'git') +backup=('etc/sensors3.conf' 'etc/healthd.conf' 'etc/conf.d/sensord') +#source=(lm_sensors-${pkgver}.tar.gz::https://github.com/lm-sensors/lm-sensors/archive/V${_pkgver}.tar.gz +source=("git+https://github.com/groeck/lm-sensors.git#commit=${_commit}" + healthd healthd.conf healthd.service sensord.conf) + +pkgver() { + cd "${srcdir}"/lm-sensors* + + git describe --long --tags | sed 's/V//;s/\([^-]*-g\)/r\1/;s/-/./g' +} + +prepare() { + cd "${srcdir}"/lm-sensors* + sed -i 's|/etc/sysconfig|/etc/conf.d|' prog/{detect/sensors-detect,init/{sensord,lm_sensors}.service} + sed -i 's/EnvironmentFile=/EnvironmentFile=-/' prog/init/lm_sensors.service +} + +build() { + cd "${srcdir}"/lm-sensors* + make PREFIX=/usr +} + +package() { + cd "${srcdir}"/lm-sensors* + make PROG_EXTRA=sensord BUILD_STATIC_LIB=0 \ + PREFIX=/usr SBINDIR=/usr/bin MANDIR=/usr/share/man DESTDIR="${pkgdir}" install + + install -D -m755 "${srcdir}/healthd" "${pkgdir}/usr/bin/healthd" + + install -D -m644 "${srcdir}/healthd.conf" "${pkgdir}/etc/healthd.conf" + install -D -m644 "${srcdir}/sensord.conf" "${pkgdir}/etc/conf.d/sensord" + + install -D -m644 "${srcdir}/healthd.service" "${pkgdir}/usr/lib/systemd/system/healthd.service" + install -D -m644 prog/init/*.service "${pkgdir}/usr/lib/systemd/system/" +} diff --git a/x86_64/extra/lm-sensors/healthd b/x86_64/extra/lm-sensors/healthd new file mode 100644 index 0000000..b1e2fd6 --- /dev/null +++ b/x86_64/extra/lm-sensors/healthd @@ -0,0 +1,53 @@ +#!/bin/bash + +# +# /usr/bin/healthd +# + +. /etc/healthd.conf + +cmd="${ALARM_CMD}" +addr="${ADMIN_EMAIL}" +slp="${ALARM_SLEEP}" +sensors="/usr/bin/sensors" + + +while [ $# -gt 0 ] ; do + case "${1}" in + -c ) cmd="${2}" ; shift 2 ;; + -m ) addr="${2}" ; shift 2 ;; + -s ) slp="${2}" ; shift 2 ;; + * ) shift 1 ;; + esac +done + +case "${ALARM_RESET}" in + yes) /usr/bin/sensors > /dev/null + ;; + no) true + ;; +esac + +[ -n "${cmd}" ] && [ -n "$( which -- "${cmd%% *}" )" ] || \ + [ -n "${addr}" ] || exit 1 + +[ "${slp}" -ge 2 ] || slp=600 + +while true ; do + sleep 15 + message="$( $sensors )" + case "$message" in + '' ) message='Could not get any sensor values !' ;; + *ALARM* ) : ;; + * ) message='' ;; + esac + if [ -n "$message" ]; then + if [ -n "${addr}" ]; then + echo "$message" | mail -s \ + "Sensors ALARM detected at host: $( hostname )" \ + "${addr}" + fi + [ -z "${cmd}" ] || ${cmd} & + sleep ${slp} + fi +done & diff --git a/x86_64/extra/lm-sensors/healthd.conf b/x86_64/extra/lm-sensors/healthd.conf new file mode 100644 index 0000000..8df3e39 --- /dev/null +++ b/x86_64/extra/lm-sensors/healthd.conf @@ -0,0 +1,17 @@ +# +# /etc/healthd.conf +# + +# reset any pending alarms on startup +ALARM_RESET="yes" + +# where to sent mails on alarm +ADMIN_EMAIL="root" + +# Seconds to sleep when alarm detected before checking again +# If you want to fill up your mail inbox set this to 2. ;-) +ALARM_SLEEP=600 + +# command to run in background on each alarm +# N.B.: If you choose to use the beep command, you'll need to install it: pacman -S beep +ALARM_CMD="beep -f 800 -l 500 -d 500 -r 600" diff --git a/x86_64/extra/lm-sensors/healthd.service b/x86_64/extra/lm-sensors/healthd.service new file mode 100644 index 0000000..1933192 --- /dev/null +++ b/x86_64/extra/lm-sensors/healthd.service @@ -0,0 +1,9 @@ +[Unit] +Description=A daemon which can be used to alert you in the event of a hardware health monitoring alarm + +[Service] +Type=forking +ExecStart=/usr/bin/healthd + +[Install] +WantedBy=multi-user.target diff --git a/x86_64/extra/lm-sensors/sensord.conf b/x86_64/extra/lm-sensors/sensord.conf new file mode 100644 index 0000000..133783a --- /dev/null +++ b/x86_64/extra/lm-sensors/sensord.conf @@ -0,0 +1,9 @@ +# +# /etc/conf.d/sensord +# + +#Specify the interval between scanning for sensor alarms +INTERVAL=60s + +#Specify the interval between logging all sensor readings +LOG_INTERVAL=30m diff --git a/x86_64/extra/lmdb/PKGBUILD b/x86_64/extra/lmdb/PKGBUILD new file mode 100644 index 0000000..30fb9e2 --- /dev/null +++ b/x86_64/extra/lmdb/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=lmdb +pkgver=0.9.29 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +source=(https://github.com/LMDB/lmdb/archive/LMDB_$pkgver.tar.gz) + +build() { + cd lmdb-LMDB_$pkgver/libraries/liblmdb + + make +} + +package() { + cd lmdb-LMDB_$pkgver/libraries/liblmdb + + make prefix=$pkgdir/usr install +} diff --git a/x86_64/extra/lsof/PKGBUILD b/x86_64/extra/lsof/PKGBUILD new file mode 100644 index 0000000..78e3904 --- /dev/null +++ b/x86_64/extra/lsof/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=lsof +pkgver=4.94.0 +pkgrel=1 +arch=('x86_64') +depends=(glibc libtirpc) +source=(https://github.com/lsof-org/lsof/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + sed -i 's|/\* #define\tHASSECURITY\t1 \*/|#define\tHASSECURITY\t1|' dialects/linux/machine.h + sed -i "s|.so ./version|.ds VN ${pkgver}|" -i Lsof.8 +} + +build() { + cd $pkgname-$pkgver + + ./Configure -n linux + + make CC="cc ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}" +} + +package() { + cd $pkgname-$pkgver + + install -Dm 755 lsof -t "${pkgdir}"/usr/bin + install -Dm 644 Lsof.8 "${pkgdir}"/usr/share/man/man8/lsof.8 +} diff --git a/x86_64/extra/lua/PKGBUILD b/x86_64/extra/lua/PKGBUILD new file mode 100644 index 0000000..b94e0d1 --- /dev/null +++ b/x86_64/extra/lua/PKGBUILD @@ -0,0 +1,42 @@ +pkgname=lua +pkgver=5.4.4 +mver=5.4 +pkgrel=1 +arch=(x86_64) +depends=(readline) +makedepends=(gcc) +options=('!emptydirs') +source=(https://www.lua.org/ftp/lua-$pkgver.tar.gz + liblua.so.patch + lua.pc) + +prepare() { + cd $pkgname-$pkgver + + patch -p1 -i ../liblua.so.patch + + sed "s/%VER%/$mver/g;s/%REL%/$pkgver/g" ../lua.pc > lua.pc +} + +build() { + cd $pkgname-$pkgver + + make MYCFLAGS="$CFLAGS -fPIC" MYLDFLAGS="$LDFLAGS" linux-readline +} + +package() { + cd $pkgname-$pkgver + + make TO_LIB="liblua.a liblua.so liblua.so.$mver liblua.so.$pkgver" \ + INSTALL_DATA="cp -d" \ + INSTALL_TOP="$pkgdir/usr" \ + INSTALL_MAN="$pkgdir/usr/share/man/man1" \ + install + + # pkgconf related + install -Dm644 lua.pc "$pkgdir"/usr/lib/pkgconfig/lua.pc + + # docs + install -d "$pkgdir"/usr/share/doc/$pkgname + install -m644 doc/*.{gif,png,css,html} "$pkgdir"/usr/share/doc/$pkgname +} diff --git a/x86_64/extra/lua/liblua.so.patch b/x86_64/extra/lua/liblua.so.patch new file mode 100644 index 0000000..1978321 --- /dev/null +++ b/x86_64/extra/lua/liblua.so.patch @@ -0,0 +1,60 @@ +diff --git a/Makefile b/Makefile +index 416f444..eeaff03 100644 +--- a/Makefile ++++ b/Makefile +@@ -52,7 +52,7 @@ R= $V.0 + all: $(PLAT) + + $(PLATS) help test clean: +- @cd src && $(MAKE) $@ ++ @cd src && $(MAKE) $@ V=$(V) R=$(R) + + install: dummy + cd src && $(MKDIR) $(INSTALL_BIN) $(INSTALL_INC) $(INSTALL_LIB) $(INSTALL_MAN) $(INSTALL_LMOD) $(INSTALL_CMOD) +diff --git a/src/Makefile b/src/Makefile +index 514593d..372a6dc 100644 +--- a/src/Makefile ++++ b/src/Makefile +@@ -33,6 +33,7 @@ CMCFLAGS= -Os + PLATS= guess aix bsd c89 freebsd generic linux linux-readline macosx mingw posix solaris + + LUA_A= liblua.a ++LUA_SO= liblua.so + CORE_O= lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o + LIB_O= lauxlib.o lbaselib.o lcorolib.o ldblib.o liolib.o lmathlib.o loadlib.o loslib.o lstrlib.o ltablib.o lutf8lib.o linit.o + BASE_O= $(CORE_O) $(LIB_O) $(MYOBJS) +@@ -44,7 +45,7 @@ LUAC_T= luac + LUAC_O= luac.o + + ALL_O= $(BASE_O) $(LUA_O) $(LUAC_O) +-ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) ++ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO) + ALL_A= $(LUA_A) + + # Targets start here. +@@ -60,6 +61,12 @@ $(LUA_A): $(BASE_O) + $(AR) $@ $(BASE_O) + $(RANLIB) $@ + ++$(LUA_SO): $(CORE_O) $(LIB_O) ++ $(CC) -shared -ldl -Wl,-soname,$(LUA_SO).$(V) -o $@.$(R) $? -lm $(MYLDFLAGS) ++ ln -sf $(LUA_SO).$(R) $(LUA_SO).$(V) ++ ln -sf $(LUA_SO).$(R) $(LUA_SO) ++ ++ + $(LUA_T): $(LUA_O) $(LUA_A) + $(CC) -o $@ $(LDFLAGS) $(LUA_O) $(LUA_A) $(LIBS) + +diff --git a/src/luaconf.h b/src/luaconf.h +index bdf927e..7e15198 100644 +--- a/src/luaconf.h ++++ b/src/luaconf.h +@@ -227,7 +227,7 @@ + + #else /* }{ */ + +-#define LUA_ROOT "/usr/local/" ++#define LUA_ROOT "/usr/" + #define LUA_LDIR LUA_ROOT "share/lua/" LUA_VDIR "/" + #define LUA_CDIR LUA_ROOT "lib/lua/" LUA_VDIR "/" + diff --git a/x86_64/extra/lua/lua.pc b/x86_64/extra/lua/lua.pc new file mode 100644 index 0000000..bf7977b --- /dev/null +++ b/x86_64/extra/lua/lua.pc @@ -0,0 +1,20 @@ +V=%VER% +R=%REL% + +prefix=/usr +INSTALL_BIN=${prefix}/bin +INSTALL_INC=${prefix}/include +INSTALL_LIB=${prefix}/lib +INSTALL_MAN=${prefix}/man/man1 +INSTALL_LMOD=${prefix}/share/lua/${V} +INSTALL_CMOD=${prefix}/lib/lua/${V} +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: Lua +Description: An Extensible Extension Language +Version: ${R} +Requires: +Libs: -L${libdir} -llua -lm +Cflags: -I${includedir} diff --git a/x86_64/extra/luajit/PKGBUILD b/x86_64/extra/luajit/PKGBUILD new file mode 100644 index 0000000..b2ccb21 --- /dev/null +++ b/x86_64/extra/luajit/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=luajit +pkgver=2.1.0.beta3.r422 +pkgrel=1 +arch=(x86_64) +depends=(gcc) +makedepends=(make) +commitid=4c2441c16ce3c4e312aaefecc6d40c4fe21de97c +source=(https://repo.or.cz/luajit-2.0.git/snapshot/$commitid.tar.gz) + +build() { + cd $pkgname-2.0-${commitid::7} + + make amalg PREFIX=/usr BUILDMODE=dynamic TARGET_STRIP=" @:" +} + +package() { + cd $pkgname-2.0-${commitid::7} + + make DESTDIR=$pkgdir PREFIX=/usr install + + ln -sf luajit-2.1.0-beta3 "$pkgdir/usr/bin/luajit" +} diff --git a/x86_64/extra/lvm2/PKGBUILD b/x86_64/extra/lvm2/PKGBUILD new file mode 100644 index 0000000..9400c25 --- /dev/null +++ b/x86_64/extra/lvm2/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=lvm2 +pkgver=2.03.14 +pkgrel=1 +arch=('x86_64') +depends=(libaio) +source=(https://sourceware.org/ftp/lvm2/LVM2.$pkgver.tgz) + +build() { + cd LVM2.$pkgver + + export PATH+=:/usr/sbin + + ./configure \ + --prefix=/usr \ + --enable-cmdlib \ + --enable-pkgconfig \ + --enable-usev_sync + + make +} + +package() { + cd LVM2.$pkgver + + make DESTDIR=$pkgdir -C tools install_tools_dynamic + make DESTDIR=$pkgdir -C udev install + make DESTDIR=$pkgdir -C libdm install + make DESTDIR=$pkgdir install + make DESTDIR=$pkgdir install_systemd_units +} diff --git a/x86_64/extra/lxde-icon-theme/PKGBUILD b/x86_64/extra/lxde-icon-theme/PKGBUILD new file mode 100644 index 0000000..476deff --- /dev/null +++ b/x86_64/extra/lxde-icon-theme/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=lxde-icon-theme +pkgver=0.5.1 +pkgrel=1 +arch=('x86_64') +depends=(gtk+) +source=(https://downloads.sourceforge.net/lxde/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --sysconfdir=/etc + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/lynx/PKGBUILD b/x86_64/extra/lynx/PKGBUILD new file mode 100644 index 0000000..1ca4c0e --- /dev/null +++ b/x86_64/extra/lynx/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=lynx +pkgver=2.8.9 +rver=rel.1 +pkgrel=1 +arch=('x86_64') +depends=(gnutls zip unzip zlib bzip2 openssl ncurses glibc) +source=(https://invisible-mirror.net/archives/lynx/tarballs/$pkgname$pkgver$rver.tar.bz2 + lynx-2.8.9rel.1-security_fix-1.patch) + +prepare() { + cd $pkgname$pkgver$rver + + patch -Np1 -i ../lynx-2.8.9rel.1-security_fix-1.patch +} + +build() { + cd $pkgname$pkgver$rver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc/lynx \ + --with-zlib \ + --with-bzlib \ + --with-ssl \ + --with-screen=ncursesw \ + --enable-locale-charset + + make +} + +package() { + cd $pkgname$pkgver$rver + + make DESTDIR=$pkgdir install-full +} diff --git a/x86_64/extra/lynx/lynx-2.8.9rel.1-security_fix-1.patch b/x86_64/extra/lynx/lynx-2.8.9rel.1-security_fix-1.patch new file mode 100644 index 0000000..3365098 --- /dev/null +++ b/x86_64/extra/lynx/lynx-2.8.9rel.1-security_fix-1.patch @@ -0,0 +1,43 @@ +Submitted By: Douglas R. Reno +Date: 2021-12-18 +Initial Package Version: 2.8.9rel.1 +Upstream Status: Applied +Origin: Arch Linux (https://github.com/archlinux/svntogit-packages/blob/packages/lynx/trunk/CVE-2021-38165.diff) +Description: Fixes CVE-2021-38165 in Lynx, which allows for + usernames and passwords to be transmitted in cleartext + anytime an HTTPS connection is used. + +diff -Naurp lynx2.8.9rel.1.orig/WWW/Library/Implementation/HTTP.c lynx2.8.9rel.1/WWW/Library/Implementation/HTTP.c +--- lynx2.8.9rel.1.orig/WWW/Library/Implementation/HTTP.c 2018-05-04 15:07:43.000000000 -0500 ++++ lynx2.8.9rel.1/WWW/Library/Implementation/HTTP.c 2021-12-18 14:12:57.503796366 -0600 +@@ -761,6 +761,22 @@ static char *StripIpv6Brackets(char *hos + return host; + } + #endif ++/* ++ * Remove user/password, if any, from the given host-string. ++ */ ++#ifdef USE_SSL ++static char *StripUserAuthents(char *host) ++{ ++ char *p = strchr(host, '@'); ++ ++ if (p != NULL) { ++ char *q = host; ++ ++ while ((*q++ = *++p) != '\0') ; ++ } ++ return host; ++} ++#endif + + /* Load Document from HTTP Server HTLoadHTTP() + * ============================== +@@ -957,6 +973,7 @@ static int HTLoadHTTP(const char *arg, + /* get host we're connecting to */ + ssl_host = HTParse(url, "", PARSE_HOST); + ssl_host = StripIpv6Brackets(ssl_host); ++ ssl_host = StripUserAuthents(ssl_host); + #if defined(USE_GNUTLS_FUNCS) + ret = gnutls_server_name_set(handle->gnutls_state, + GNUTLS_NAME_DNS, diff --git a/x86_64/extra/lzip/PKGBUILD b/x86_64/extra/lzip/PKGBUILD new file mode 100644 index 0000000..630ba5c --- /dev/null +++ b/x86_64/extra/lzip/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=lrzip +pkgver=0.641 +pkgrel=1 +pkgdesc='Multi-threaded compression with rzip/lzma, lzo, and zpaq' +url='https://github.com/ckolivas/lrzip' +arch=('x86_64') +depends=('lzo') +makedepends=('git') +source=("git+https://github.com/ckolivas/lrzip#tag=v$pkgver") + +build() { + cd "$pkgname" + + CFLAGS="$CFLAGS -fomit-frame-pointer" + CXXFLAGS="$CXXFLAGS -fomit-frame-pointer" + + ./autogen.sh --prefix=/usr "$flags" + make +} + +package() { + make -C "$pkgname" DESTDIR="$pkgdir" install-strip +} \ No newline at end of file diff --git a/x86_64/extra/m4/PKGBUILD b/x86_64/extra/m4/PKGBUILD new file mode 100644 index 0000000..90c6dd0 --- /dev/null +++ b/x86_64/extra/m4/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=m4 +pkgver=1.4.19 +pkgrel=1 +arch=('x86_64') +depends=(glibc bash) +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + # fixes required by glibc-2.28 + sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c + echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/mailcap/PKGBUILD b/x86_64/extra/mailcap/PKGBUILD new file mode 100644 index 0000000..5b96fe2 --- /dev/null +++ b/x86_64/extra/mailcap/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=mailcap +pkgver=2.1.53 +pkgrel=1 +arch=(x86_64) +makedepends=(git) +commitid=4a12cc7caeb4a74626e8e6aedf38e7223b28e982 +source=(git+https://pagure.io/mailcap#commit=$commitid) +backup=( + etc/mailcap + etc/mime.types + etc/nginx/mime.types +) + +build() { + cd $pkgname + + make +} + +package() { + cd $pkgname + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/make/PKGBUILD b/x86_64/extra/make/PKGBUILD new file mode 100644 index 0000000..7a4bca4 --- /dev/null +++ b/x86_64/extra/make/PKGBUILD @@ -0,0 +1,17 @@ +pkgname=make +pkgver=4.3 +pkgrel=1 +arch=('x86_64') +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/man-db/PKGBUILD b/x86_64/extra/man-db/PKGBUILD new file mode 100644 index 0000000..2158a99 --- /dev/null +++ b/x86_64/extra/man-db/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=man-db +pkgver=2.9.4 +pkgrel=1 +arch=('x86_64') +source=(https://savannah.nongnu.org/download/man-db/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --disable-setuid \ + --enable-cache-owner=bin \ + --with-browser=/usr/bin/lynx \ + --with-vgrind=/usr/bin/vgrind \ + --with-grap=/usr/bin/grap \ + --with-systemdtmpfilesdir= \ + --with-systemdsystemunitdir= + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/man-pages/PKGBUILD b/x86_64/extra/man-pages/PKGBUILD new file mode 100644 index 0000000..2d6b13d --- /dev/null +++ b/x86_64/extra/man-pages/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=man-pages +pkgver=5.13 +pkgrel=1 +arch=('x86_64') +source=(https://www.kernel.org/pub/linux/docs/$pkgname/$pkgname-$pkgver.tar.xz) + +packages() { + cd $srcdir/$pkgname-$pkgver + + sed -i "s|prefix := /usr/local|prefix := /usr|g" Makefile + + # Included already by shadow + rm man5/passwd.5 + rm man3/getspnam.3 + + # Included already by tzdata + rm man5/tzfile.5 man8/{tzselect,zdump,zic}.8 + + # Included already by libxcrypt + rm man3/crypt*.3 +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/markupsafe/PKGBUILD b/x86_64/extra/markupsafe/PKGBUILD new file mode 100644 index 0000000..3e79825 --- /dev/null +++ b/x86_64/extra/markupsafe/PKGBUILD @@ -0,0 +1,17 @@ +pkgname=markupsafe +pkgver=2.0.1 +pkgrel=1 +arch=('x86_64') +depends=('python3') +source=(https://files.pythonhosted.org/packages/source/M/MarkupSafe/MarkupSafe-$pkgver.tar.gz) + +build() { + cd MarkupSafe-$pkgver + + python3 setup.py build +} + +package() { + cd MarkupSafe-$pkgver + python3 setup.py install --prefix=$pkgdir/usr --optimize=1 +} diff --git a/x86_64/extra/maven/PKGBUILD b/x86_64/extra/maven/PKGBUILD new file mode 100644 index 0000000..6f21fde --- /dev/null +++ b/x86_64/extra/maven/PKGBUILD @@ -0,0 +1,32 @@ +pkgname=maven +pkgver=3.8.5 +pkgrel=1 +pkgdesc='Java project management and project comprehension tool' +arch=('x86_64') +depends=('openjdk-17' 'bash' 'procps-ng') +makedepends=('maven' 'openjdk-17') +backup=('opt/maven/conf/settings.xml') +source=(https://downloads.apache.org/maven/maven-3/${pkgver}/source/apache-maven-${pkgver}-src.tar.gz) + +build() { + cd apache-maven-${pkgver} + + mvn package \ + -Dline.separator=$'\r\n' \ + -Dproject.build.sourceEncoding=UTF-8 -e \ + -Dmaven.repo.local="${srcdir}/repo" \ + -DskipTests +} + +package() { + cd apache-maven-${pkgver} + + install -d "${pkgdir}/opt/maven" + bsdtar xf apache-maven/target/apache-maven-${pkgver}-bin.tar.gz \ + --strip-components=1 \ + -C "${pkgdir}/opt/maven" + + install -d "${pkgdir}/usr/bin" + ln -s /opt/maven/bin/mvn "${pkgdir}/usr/bin/mvn" + ln -s /opt/maven/bin/mvnDebug "${pkgdir}/usr/bin/mvnDebug" +} diff --git a/x86_64/extra/mdadm/PKGBUILD b/x86_64/extra/mdadm/PKGBUILD new file mode 100644 index 0000000..3881955 --- /dev/null +++ b/x86_64/extra/mdadm/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=mdadm +pkgver=4.2 +pkgrel=1 +arch=('x86_64') +makedepends=(gcc) +source=(https://www.kernel.org/pub/linux/utils/raid/mdadm/mdadm-$pkgver.tar.xz + disable-werror.patch) + +prepare() { + cd $pkgname-$pkgver + patch -Np0 -i ${srcdir}/disable-werror.patch +} + +build() { + cd $pkgname-$pkgver + + make CXFLAGS="$CFLAGS" BINDIR=/usr/bin UDEVDIR=/usr/lib/udev +} + +package() { + cd $pkgname-$pkgver + + make INSTALL=/usr/bin/install BINDIR=/usr/bin DESTDIR="$pkgdir" UDEVDIR=/usr/lib/udev install + make SYSTEMD_DIR="$pkgdir"/usr/lib/systemd/system install-systemd + + mkdir -p $pkgdir/usr/lib/initcpio/install/mdadm + ln -s mdadm_udev "$pkgdir"/usr/lib/initcpio/install/mdadm +} diff --git a/x86_64/extra/mdadm/disable-werror.patch b/x86_64/extra/mdadm/disable-werror.patch new file mode 100644 index 0000000..2f29419 --- /dev/null +++ b/x86_64/extra/mdadm/disable-werror.patch @@ -0,0 +1,11 @@ +--- Makefile.old 2022-01-10 17:07:50.475985407 +0100 ++++ Makefile 2022-01-10 17:08:11.599433663 +0100 +@@ -50,7 +50,7 @@ + CC := $(CROSS_COMPILE)gcc + endif + CXFLAGS ?= -ggdb +-CWFLAGS = -Wall -Werror -Wstrict-prototypes -Wextra -Wno-unused-parameter ++CWFLAGS = -Wall -Wstrict-prototypes -Wextra -Wno-unused-parameter + ifdef WARN_UNUSED + CWFLAGS += -Wp,-D_FORTIFY_SOURCE=2 -O3 + endif diff --git a/x86_64/extra/mercurial/PKGBUILD b/x86_64/extra/mercurial/PKGBUILD new file mode 100644 index 0000000..e87ae86 --- /dev/null +++ b/x86_64/extra/mercurial/PKGBUILD @@ -0,0 +1,47 @@ +pkgname=mercurial +pkgver=6.2.2 +pkgrel=1 +arch=(x86_64) +depends=(python3 tk) +makedepends=(python3-pip) +source=(https://www.mercurial-scm.org/release/$pkgname-$pkgver.tar.gz + mercurial.profile) + +prepare() { + pip3 install docutils +} + +build() { + cd $pkgname-$pkgver + + python3 setup.py build + + make -C contrib/chg +} + +package() { + cd $pkgname-$pkgver + + python setup.py install --root="$pkgdir" --skip-build --optimize=1 + + make DESTDIR="${pkgdir}" PREFIX=/usr install + + install -m644 -D contrib/zsh_completion "$pkgdir/usr/share/zsh/site-functions/_hg" + install -m644 -D contrib/bash_completion "$pkgdir/usr/share/bash-completion/completions/hg" + + make -C contrib/chg DESTDIR="$pkgdir" PREFIX=/usr install + install -m755 contrib/hg-ssh "$pkgdir/usr/bin" + install -m755 contrib/hgk "$pkgdir/usr/bin" + + install -d "$pkgdir/usr/share/emacs/site-lisp" + install -m644 contrib/{mq.el,mercurial.el} "$pkgdir/usr/share/emacs/site-lisp" + + install -m755 -d "$pkgdir/etc/profile.d" + install -m644 "$srcdir/mercurial.profile" "$pkgdir/etc/profile.d/mercurial.sh" + + install -m755 -d "$pkgdir/etc/mercurial" + cat <<-EOF > "$pkgdir/etc/mercurial/hgrc" + [web] + cacerts = /etc/ssl/certs/ca-certificates.crt + EOF +} diff --git a/x86_64/extra/mercurial/mercurial.profile b/x86_64/extra/mercurial/mercurial.profile new file mode 100644 index 0000000..fc96182 --- /dev/null +++ b/x86_64/extra/mercurial/mercurial.profile @@ -0,0 +1 @@ +export HG=/usr/bin/hg diff --git a/x86_64/extra/mesa/PKGBUILD b/x86_64/extra/mesa/PKGBUILD new file mode 100644 index 0000000..07b83f5 --- /dev/null +++ b/x86_64/extra/mesa/PKGBUILD @@ -0,0 +1,66 @@ +pkgname=mesa +pkgver=22.1.7 +pkgrel=1 +arch=('x86_64') +depends=('libxcb' 'fontconfig' 'libdrm' 'libx11' 'libxext' 'libxfixes' 'libxshmfence' 'libxrender' + 'wayland' 'wayland-protocols' 'vulkan-icd-loader' 'libomxil-bellagio' 'libclc' 'libglvnd' + 'valgrind' 'libunwind' 'vulkan-icd-loader' 'libpciaccess' 'libxxf86vm' + 'vdpau' 'glslang' 'libva' 'llvm' 'libxvmc' 'lm-sensors') +makedepends=('directx-headers' 'vulkan-headers' 'python3-pip' 'clang' 'cmake' 'byacc' 'bison') +source=(https://mesa.freedesktop.org/archive/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + # TODO add our own python3-mako pkg so pip wont be used + echo "[!]: Installing mako with pip" + pip3 install mako + + sed '1s/python/&3/' -i bin/symbols-check.py + + rm -rf build +} + +build() { + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + --buildtype=release \ + -D b_lto=true \ + -D b_ndebug=true \ + -D platforms=x11,wayland \ + -D gallium-drivers=r300,r600,radeonsi,nouveau,virgl,svga,swrast,iris,crocus,zink,d3d12 \ + -D vulkan-drivers=amd,intel,swrast \ + -D vulkan-layers=device-select,intel-nullhw,overlay \ + -D dri3=enabled \ + -D egl=enabled \ + -D gallium-extra-hud=true \ + -D gallium-nine=true \ + -D gallium-omx=bellagio \ + -D gallium-opencl=icd \ + -D gallium-va=enabled \ + -D gallium-vdpau=enabled \ + -D gallium-xa=enabled \ + -D gallium-xvmc=enabled \ + -D gbm=enabled \ + -D gles1=disabled \ + -D gles2=enabled \ + -D glvnd=true \ + -D glx=dri \ + -D libunwind=enabled \ + -D llvm=enabled \ + -D lmsensors=enabled \ + -D osmesa=true \ + -D shared-glapi=enabled \ + -D microsoft-clc=disabled \ + -D valgrind=enabled \ + ../$pkgname-$pkgver/ + + ninja -j5 +} + +package() { + cd build + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/meson/PKGBUILD b/x86_64/extra/meson/PKGBUILD new file mode 100644 index 0000000..0174da5 --- /dev/null +++ b/x86_64/extra/meson/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=meson +pkgver=0.60.2 +pkgrel=3 +arch=('x86_64') +depends=('python3') +source=(https://github.com/mesonbuild/meson/releases/download/$pkgver/meson-$pkgver.tar.gz) +depends=('python3' 'ninja') + +build() { + cd $pkgname-$pkgver + + python3 -m ensurepip + + python3 setup.py build + +} + +package() { + cd $pkgname-$pkgver + + python3 setup.py install --root=dest + ls dest* + cp -rv dest/* $pkgdir + install -vDm644 data/shell-completions/bash/meson $pkgdir/usr/share/bash-completion/completions/meson + install -vDm644 data/shell-completions/zsh/_meson $pkgdir/usr/share/zsh/site-functions/_meson +} diff --git a/x86_64/extra/minizip/PKGBUILD b/x86_64/extra/minizip/PKGBUILD new file mode 100644 index 0000000..e846d49 --- /dev/null +++ b/x86_64/extra/minizip/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=(minizip) +pkgver=1.2.11 +pkgrel=1 +arch=('x86_64') +depends=('glibc' 'zlib') +source=("https://zlib.net/zlib-${pkgver}.tar.gz") + +build() { + cd "${srcdir}/zlib-$pkgver" + + cd contrib/minizip + cp Makefile Makefile.orig + cp ../README.contrib readme.txt + autoreconf --install + ./configure --prefix=/usr --enable-static=no + make +} + +package() { + cd "${srcdir}/zlib-$pkgver/contrib/minizip" + + make install DESTDIR="${pkgdir}" + + # https://github.com/madler/zlib/pull/229 + rm "${pkgdir}/usr/include/minizip/crypt.h" +} \ No newline at end of file diff --git a/x86_64/extra/mkfontscale/PKGBUILD b/x86_64/extra/mkfontscale/PKGBUILD new file mode 100644 index 0000000..72cf618 --- /dev/null +++ b/x86_64/extra/mkfontscale/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=mkfontscale +pkgver=1.2.1 +pkgrel=1 +arch=('x86_64') +depends=(freetype2 xorgproto util-macros) +source=(https://xorg.freedesktop.org/archive/individual/app/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/modemmanager/PKGBUILD b/x86_64/extra/modemmanager/PKGBUILD new file mode 100644 index 0000000..4e95c9f --- /dev/null +++ b/x86_64/extra/modemmanager/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=modemmanager +pkgver=1.18.4 +pkgrel=1 +pkgdesc="Mobile broadband modem management service" +arch=(x86_64) +url="https://www.freedesktop.org/wiki/Software/ModemManager/" +license=(GPL2 LGPL2.1) +depends=(systemd libgudev polkit) +makedepends=(gtk-doc gobject-introspection vala meson git bash-completion) +source=(https://www.freedesktop.org/software/ModemManager/ModemManager-$pkgver.tar.xz) + +build() { + cd ModemManager-$pkgver + + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --disable-maintainer-mode \ + --without-mbim \ + --without-qmi \ + --with-systemd-journal \ + --with-systemd-suspend-resume + + make +} + +package() { + cd ModemManager-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/mousepad/PKGBUILD b/x86_64/extra/mousepad/PKGBUILD new file mode 100644 index 0000000..327b25c --- /dev/null +++ b/x86_64/extra/mousepad/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=mousepad +pkgver=0.5.8 +xver=0.5 +pkgrel=2 +arch=('x86_64') +depends=(glib2 gtk+ gtksourceview) +source=(https://archive.xfce.org/src/apps/$pkgname/$xver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc LIBS=-lX11 + + export IN=/usr/include + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + # Premake plugins path + mkdir -p $pkgdir/usr/lib/mousepad/plugins +} diff --git a/x86_64/extra/mpc/PKGBUILD b/x86_64/extra/mpc/PKGBUILD new file mode 100644 index 0000000..27eb836 --- /dev/null +++ b/x86_64/extra/mpc/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=mpc +pkgver=1.2.1 +pkgrel=1 +arch=('x86_64') +depends=(mpfr) +source=(https://ftp.gnu.org/gnu/mpc/mpc-$pkgver.tar.gz) + +build() { + cd mpc-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/mpfr/PKGBUILD b/x86_64/extra/mpfr/PKGBUILD new file mode 100644 index 0000000..ccc63d3 --- /dev/null +++ b/x86_64/extra/mpfr/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=mpfr +pkgver=4.1.0 +pkgrel=1 +arch=('x86_64') +depends=(glibc gmp) +source=(https://www.mpfr.org/$pkgname-$pkgver/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr \ + --enable-thread-safe + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/mtdev/PKGBUILD b/x86_64/extra/mtdev/PKGBUILD new file mode 100644 index 0000000..417f053 --- /dev/null +++ b/x86_64/extra/mtdev/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=mtdev +pkgver=1.1.6 +pkgrel=1 +arch=('x86_64') +source=(https://bitmath.org/code/mtdev/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/mtools/PKGBUILD b/x86_64/extra/mtools/PKGBUILD new file mode 100644 index 0000000..6a7ce9f --- /dev/null +++ b/x86_64/extra/mtools/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=mtools +pkgver=4.0.37 +pkgrel=1 +arch=('x86_64') +depends=(glibc bash) +source=(ftp://ftp.gnu.org/gnu/mtools/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --disable-floppyd + + make + sed -i Makefile -e 's|install-scripts install-info|install-scripts|' +} + +package() { + cd $pkgname-$pkgver + make -j1 prefix=$pkgdir/usr install +} + diff --git a/x86_64/extra/mupdf/PKGBUILD b/x86_64/extra/mupdf/PKGBUILD new file mode 100644 index 0000000..bfc5c68 --- /dev/null +++ b/x86_64/extra/mupdf/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=mupdf +pkgver=1.20.0 +pkgrel=1 +arch=(x86_64) +depends=('desktop-file-utils' 'freeglut' 'glu' 'freetype2' 'harfbuzz' 'jbig2dec' + 'libjpeg' 'openjpeg' 'openssl' 'libxext' 'freetype2' 'lcms' 'gumbo-parser') +makedepends=(make) +source=(https://mupdf.com/downloads/archive/mupdf-${pkgver}-source.tar.zst + mupdf-x11.desktop + mupdf.xpm) + +prepare() { + cd $pkgname-$pkgver-source + + rm -rf thirdparty/{freeglut,freetype,harfbuzz,jbig2dec,libjpeg,openjpeg,zlib} +} + +build() { + cd $pkgname-$pkgver-source + + USE_SYSTEM_LIBS='yes' make build=release libs apps +} + +package() { + cd $pkgname-$pkgver-source + + USE_SYSTEM_LIBS='yes' make prefix=$pkgdir build=release install + + install -D -m0644 ../mupdf-x11.desktop "$pkgdir"/usr/share/applications/mupdf-x11.desktop + install -D -m0644 ../mupdf.xpm "$pkgdir"/usr/share/pixmaps/mupdf.xpm +} diff --git a/x86_64/extra/mupdf/mupdf-x11.desktop b/x86_64/extra/mupdf/mupdf-x11.desktop new file mode 100644 index 0000000..d8c70a1 --- /dev/null +++ b/x86_64/extra/mupdf/mupdf-x11.desktop @@ -0,0 +1,15 @@ +[Desktop Entry] +Name=MuPDF +GenericName=PDF file viewer +Exec=mupdf-x11 %f +TryExec=mupdf-x11 +Icon=mupdf +Terminal=false +Type=Application +MimeType=application/epub+zip;application/pdf;application/x-pdf;application/x-cbz;application/oxps;application/vnd.ms-xpsdocument;image/jpeg;image/pjpeg;image/png;image/tiff;image/x-tiff +Categories=Viewer;Graphics; +Actions=View +NoDisplay=true +[Desktop Action View] +Name=View with mupdf +Exec=mupdf-x11 %f diff --git a/x86_64/extra/mupdf/mupdf.xpm b/x86_64/extra/mupdf/mupdf.xpm new file mode 100644 index 0000000..2c042f4 --- /dev/null +++ b/x86_64/extra/mupdf/mupdf.xpm @@ -0,0 +1,497 @@ +/* XPM */ +static char *mupdf[] = { +/* width height ncolors chars_per_pixel */ +"48 48 442 2", +/* colors */ +" c #000000", +" . c #2E4558", +" X c #252121", +" o c #AFAFAF", +" O c #28313B", +" + c #231F1F", +" @ c #686666", +" # c #98BDD7", +" $ c #201B1C", +" % c #7CABCC", +" & c #4487B6", +" * c #DFDEDE", +" = c #4285B4", +" - c #615E5F", +" ; c #605E5E", +" : c #23262C", +" > c #D9D8D8", +" , c #F7FAFC", +" < c #D7D6D6", +" 1 c #BFD6E6", +" 2 c #6BA0C5", +" 3 c #232122", +" 4 c #555253", +" 5 c #CDCCCC", +" 6 c #E7EFF6", +" 7 c #4786B2", +" 8 c #CADDEA", +" 9 c #4085B5", +" 0 c #AECBDF", +" q c #CBCACA", +" w c #92B9D4", +" e c #365F7D", +" r c #5A95BE", +" t c #3E83B3", +" y c #304B60", +" u c #C7C6C6", +" i c #4D8EBB", +" p c #F1F6F9", +" a c #C1C0C0", +" s c #454243", +" d c #669CC3", +" f c #81AECD", +" g c #7A7777", +" h c #434041", +" j c #3E779F", +" k c #272E36", +" l c #413E3F", +" z c #3F3C3D", +" x c #5895BF", +" c c #3D3A3B", +" v c #C6DBE9", +" b c #B8B6B7", +" n c #4282B0", +" m c #FDFDFE", +" M c #B7B6B6", +" N c #8DB5D2", +" B c #242529", +" V c #B3B2B2", +" C c #222327", +" Z c #B0AEAF", +" A c #EDF4F8", +" S c #686565", +" D c #488AB9", +" F c #9ABED8", +" G c #7EACCD", +" H c #ECF2F7", +" J c #211C1C", +" K c #666363", +" L c #F1F1F2", +" P c #ABAAAA", +" I c #4588B6", +" U c #A9A8A8", +" Y c #2D2A2B", +" T c #A7A6A6", +" R c #615D5E", +" E c #2B2829", +" W c #8DB7D5", +" Q c #F9FBFD", +" ! c #DDE9F2", +" ~ c #F8FBFC", +" ^ c #DCE9F1", +" / c #A5C5DC", +" ( c #89B3D1", +" ) c #5C5959", +" _ c #A4C5DB", +" ` c #335A76", +" ' c #518FBB", +" ] c #E6E7E7", +" [ c #5A5757", +" { c #232021", +" } c #33536C", +" | c #98BED9", +". c #E0E1E1", +".. c #7CACCE", +".X c #4488B8", +".o c #2D3F4F", +".O c #999898", +".+ c #4388B7", +".@ c #5E98C1", +".# c #CDCDCB", +".$ c #524F4F", +".% c #B0CCE0", +".& c #979696", +".* c #78A8CA", +".= c #5C96BF", +".- c #969495", +".; c #4084B4", +".: c #252930", +".> c #949293", +"., c #929091", +".< c #417FAB", +".1 c #4F8FBC", +".2 c #F3F7FA", +".3 c #D3D3D4", +".4 c #D7E5EF", +".5 c #222023", +".6 c #9FC1D9", +".7 c #679DC3", +".8 c #37678A", +".9 c #4B8BB8", +".0 c #3E769E", +".q c #3C749C", +".w c #403D3D", +".e c #92BAD6", +".r c #C8DCEA", +".t c #FEFEFE", +".y c #3D393A", +".u c #3B3738", +".i c #355974", +".p c #353132", +".a c #7A7879", +".s c #498BB9", +".d c #9BBFD8", +".f c #4E8AB4", +".g c #787677", +".h c #F2F2F2", +".j c #F0F0F0", +".k c #2F2B2C", +".l c #EEEEEE", +".z c #727071", +".x c #26282D", +".c c #ECECEC", +".v c #2B2728", +".b c #FAFCFD", +".n c #EAEAEA", +".m c #DEEAF2", +".M c #E9EAE9", +".N c #C2D8E7", +".B c #6E6C6D", +".V c #5390BC", +".C c #E8E8E8", +".Z c #6EA2C6", +".A c #272324", +".S c #E7E6E7", +".D c #E6E6E6", +".F c #252122", +".G c #29333D", +".H c #E4E4E4", +".J c #3F7AA5", +".K c #231F20", +".L c #E2E2E2", +".P c #211D1E", +".I c #E0E0E0", +".U c #EAF1F7", +".Y c #6099C2", +".T c #1F1B1C", +".R c #E9F1F6", +".E c #CDDFEB", +".W c #4387B6", +".Q c #96BBD6", +".! c #B1CDE0", +".~ c #DEDEDE", +".^ c #79A9CA", +"./ c #4285B5", +".( c #272A31", +".) c #5D97BF", +"._ c #4185B4", +".` c #DCDCDC", +".' c #959393", +".] c #DADADA", +".[ c #314B5F", +".{ c #D8D8D8", +".} c #D7D8D7", +".| c #D6D6D6", +"X c #F5F8FB", +"X. c #D4D4D4", +"XX c #6AA0C5", +"Xo c #BDD4E5", +"XO c #3A6A8C", +"X+ c #232123", +"X@ c #D3D4D3", +"X# c #D2D2D2", +"X$ c #D0D0D0", +"X% c #CECECE", +"X& c #CCCCCC", +"X* c #CADDEB", +"X= c #37617F", +"X- c #242A31", +"X; c #CACACA", +"X: c #C8DBE9", +"X> c #90B7D3", +"X, c #817F7F", +"X< c #3F7EAB", +"X1 c #548FB9", +"X2 c #355873", +"X3 c #7D7B7B", +"X4 c #C2C2C2", +"X5 c #4B8CBA", +"X6 c #C0C0C0", +"X7 c #D4E4EE", +"X8 c #81AECE", +"X9 c #659CC3", +"X0 c #787576", +"Xq c #4788B6", +"Xw c #252C35", +"Xe c #757373", +"Xr c #BABABA", +"Xt c #FCFDFE", +"Xy c #B6B6B6", +"Xu c #C4D9E8", +"Xi c #706D6E", +"Xp c #8CB5D2", +"Xa c #70A3C7", +"Xs c #8BB5D1", +"Xd c #5491BC", +"Xf c #5391BB", +"Xg c #282424", +"Xh c #272223", +"Xj c #6C696A", +"Xk c #2F4659", +"Xl c #6B6969", +"Xz c #407BA5", +"Xx c #6A6768", +"Xc c #E4E3E3", +"Xv c #3E79A3", +"Xb c #231E1F", +"Xn c #221E1E", +"Xm c #E2E1E1", +"XM c #211C1D", +"XN c #EBF2F7", +"XB c #201C1C", +"XV c #CFE0EC", +"XC c #4588B7", +"XZ c #B3CEE1", +"XA c #366384", +"XS c #5F98C0", +"XD c #4386B5", +"XF c #DEDDDD", +"XG c #2B3D4B", +"XH c #615F5F", +"XJ c #5F5D5D", +"XK c #5E5B5C", +"XL c #DCE9F2", +"XP c #407DA8", +"XI c #86B1CF", +"XU c #D4D3D3", +"XY c #3A698B", +"XT c #3E7BA6", +"XR c #232022", +"XE c #545152", +"XW c #999899", +"XQ c #79AACC", +"X! c #524F50", +"X~ c #CCCDCB", +"X^ c #3D749B", +"X/ c #93BAD5", +"X( c #77A8CA", +"X) c #37607E", +"X_ c #5B96BF", +"X` c #3F84B4", +"X' c #CAC9C9", +"X] c #C6C5C5", +"X[ c #3F7DAA", +"X{ c #F2F7FA", +"X} c #C2C1C1", +"X| c #212023", +"o c #9EC1D9", +"o. c #444142", +"oX c #3F78A0", +"oo c #90B8D5", +"oO c #FEFEFF", +"o+ c #E2ECF4", +"o@ c #2B3A47", +"o# c #25262A", +"o$ c #B1AFB0", +"o% c #28313A", +"o& c #221D1D", +"o* c #262F38", +"o= c #629BC2", +"o- c #302D2E", +"o; c #6199C1", +"o: c #201B1B", +"o> c #4587B6", +"o, c #F0F0F1", +"o< c #2D3E4C", +"o1 c #2E2B2C", +"o2 c #4385B4", +"o3 c #A8A7A7", +"o4 c #A7A5A6", +"o5 c #3D7197", +"o6 c #4183B2", +"o7 c #4083B1", +"o8 c #A5A3A4", +"o9 c #3B6F95", +"o0 c #5290BC", +"oq c #A4C4DB", +"ow c #E9F1F7", +"oe c #4387B7", +"or c #E7EFF5", +"ot c #CBDDEA", +"oy c #4185B5", +"ou c #5B95BE", +"oi c #3F83B3", +"op c #939192", +"oa c #929191", +"os c #2B3743", +"od c #4C4849", +"of c #2A3742", +"og c #F4F8FB", +"oh c #D8E6F0", +"oj c #4C8CB9", +"ok c #211F22", +"ol c #CFD0D0", +"oz c #444041", +"ox c #262C34", +"oc c #413E3E", +"ov c #403C3D", +"ob c #3B739B", +"on c #858384", +"om c #FFFFFF", +"oM c #E3EDF4", +"oN c #5995BF", +"oB c #3E3A3B", +"oV c #C7DBE9", +"oC c #2F4B61", +"oZ c #5793BD", +"oA c #3C3839", +"oS c #2A3945", +"oD c #7E7D7D", +"oF c #345873", +"oG c #363233", +"oH c #7B797A", +"oJ c #EFF4F9", +"oK c #EEF4F8", +"oL c #F3F3F3", +"oP c #9ABED7", +"oI c #4788B7", +"oU c #629AC1", +"oY c #ACAAAA", +"oT c #F1F1F1", +"oR c #EFEFEF", +"oE c #737172", +"oW c #EDEDED", +"oQ c #A9C9DF", +"o! c #FBFDFE", +"o~ c #EBEBEB", +"o^ c #DFEBF3", +"o/ c #4581AB", +"o( c #6F6D6E", +"o) c #EAE9EA", +"o_ c #E9E9E9", +"o` c #C1D7E6", +"o' c #E7E7E7", +"o] c #E6E7E6", +"o[ c #E5E5E5", +"o{ c #3F7BA5", +"o} c #242021", +"o| c #E3E3E3", +"O c #3E79A4", +"O. c #221E1F", +"OX c #26303A", +"Oo c #9C9A9A", +"OO c #E1E1E1", +"O+ c #201C1D", +"O@ c #4488B7", +"O# c #DFDFDF", +"O$ c #7BAACC", +"O% c #356384", +"O& c #1E1A1B", +"O* c #4386B6", +"O= c #4286B5", +"O- c #95BAD5", +"O; c #DDDDDD", +"O: c #1C1819", +"O> c #DBDBDB", +"O, c #D9D9D9", +"O< c #D7D7D7", +"O1 c #417FAA", +"O2 c #DAE7F1", +"O3 c #F5F9FB", +"O4 c #D5D5D5", +"O5 c #242224", +"O6 c #D4D3D4", +"O7 c #85B1CF", +"O8 c #D3D3D3", +"O9 c #699FC4", +"O0 c #4D8DB9", +"Oq c #222022", +"Ow c #34556F", +"Oe c #D1D1D1", +"Or c #D0CFD0", +"Ot c #8A8888", +"Oy c #CFCFCF", +"Ou c #CDCDCD", +"Oi c #CCCDCC", +"Op c #CADEEB", +"Oa c #E5EEF5", +"Os c #C9DCEA", +"Od c #ADCADF", +"Of c #C8DCE9", +"Og c #91B8D4", +"Oh c #5994BE", +"Oj c #3D82B3", +"Ok c #5894BD", +"Ol c #3C82B2", +"Oz c #4181AD", +"Ox c #3B3737", +"Oc c #C5C5C5", +"Ov c #293643", +"Ob c #3E7DAA", +"On c #C1C1C1", +"Om c #353131", +"OM c #D4E3EE", +"ON c #B8D1E3", +"OB c #BFBFBF", +"OV c #9CBFD8", +"OC c #80ADCD", +"OZ c #649BC2", +"OA c #4889B7", +"OS c #BDBDBD", +"OD c #2E292A", +"OF c #4283B1", +"OG c #B7B7B7", +"OH c #4183B0", +"OJ c #5794BF", +"OK c #A7C6DC", +"OL c #365B77", +"OP c #8BB4D1", +"OI c #282324", +"OU c #272323", +"OY c #6C6A6A", +"OT c None", +/* pixels */ +" oToToToT L.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h LoToToToT ", +"o,.joToToToToToToToToToToToToToToToToToToToT.h.h.h.hoToToToToToToToToToToToToToToToToToToToT.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.joToLoLoR.D.~ > >.~.DoRoLoLoT.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +"oRoRoRoRoRoRoRoRoRoRoRoRoRoRoRoT.hXcOBoaXjX!oz c cozX!XjoaOBXc.hoToRoRoRoRoRoRoRoRoRoRoRoRoRoRoR", +".l.l.l.l.l.l.l.l.l.l.l.l.loR.j <.'X! Y.P.To: $ J J $o:.T.P YX!.' <.joR.l.l.l.l.l.l.l.l.l.l.l.l.l", +".l.l.l.l.l.l.l.l.l.l.l.l.jXm.&oz + $o& 3.x OoSXGXGoS O.x 3o& $ +oz.&Xm.j.l.l.l.l.l.l.l.l.l.l.l.l", +"oWoWoWoWoWoWoWoWoWoWoWoR uXK X $XRo% yXA.qo/.fX1X1.fo/.qXA yo%XR $ XXK uoRoWoWoWoWoWoWoWoWoWoWoW", +".c.c.c.c.c.c.c.c.c.coW Z z $ {os eXTo0..oQX*XLoMoMXLOpoQ..o0XT eos { $ z ZoW.c.c.c.c.c.c.c.c.c.c", +"o~o~o~o~o~o~o~o~o~.co3.p $.(X2X[OJ FOM !Of 0.d wOg.d 0Os.mOM FOJObX2.( $.po3.co~o~o~o~o~o~o~o~o~", +".n.n.n.n.n.n.n.noW VoGXMoso9XC G.N.!.^XfXD tOjOlOlOj tXDXd.^.% 1O$O@o9osXMoG VoW.n.n.n.n.n.n.n.n", +".n.n.n.n.n.n.n.c qo.XBo.$okX=oeXDo>O=XD./Xd.momomomomomomomomomomomomomom pX7.NOK 'oeX=ok.$O>.Co'o'o'o'o'", +" ]o'o'o'.So_ TXh.o nXDXDXDXDXD.; %.bomomomomomomomomomomomomoOo`O9ojo>XDXDXD n.oXh To_ ]o'o'o'.S", +".D.D.D.D.Do| SX|XY.+XDXDXDXDXDXDXZomomomomomomomomomomomomom.4Xd.;O=XDXDXDXD.+XYX| So|.D.D.D.D.D", +"o[o[o[o[.D 5OxOvOzO*XDXDXDXD =oZo+omomomomomomomomomomomomomoP.;XDXDXDXDXDXDO*OzOvOx 5o]o[o[o[o[", +".H.H.H.Ho' POU }oeXDXDXDXDXD.;X8o!omomomomomomomomomomomom.bX(.;XDXDXDXDXDXDXDoe }OU Po'.H.H.H.H", +"o|o|o|o|.DOt.5XO.+XDXDXDXDXD &ONomomomomomomomomomomomomom.2.7._XDXDXDXDXDXDXD.+XO.5Ot.Do|o|o|o|", +"o|o|o|o|o|Xi : j.WXDXDXDXD = rOaomomomomomomomomomomomomom AXS._XDXDXDXDXDXDXD.W j :Xio|o|o|o|o|", +".L.L.L.L.I RXwXP.WXDXDXDXD.;XI momomomomomomomomomomomomomXN.=._XDXDXDXDXDXDXD.WXPXw R.I.L.L.L.L", +"OOOOOOOOO; [OX.oromomomomomomom.UX_._XDXDXDXDXDXDXDoeo5 C gOOO#O#O#O#", +".~.~.~.~OO.- {X).XXDXD._o; HomomomomomohO9.Romomomomomomom.UX_._XDXDXDXDXDXDXD.XX) {.-OO.~.~.~.~", +"O;O;O;O;O#XyOD .o2XDXD.;Ogomomomomomom / r.Uomomomomomomom.UX_._XDXDXDXDXDXDXDo2 .ODXyO#O;O;O;O;", +".`.`.`.`O;Oeod.:oX.WXDOAoVomomomomomO3XaOk.Uomomomomomomom.UX_._XDXDXDXDXDXD.WoX.:odOeO;.`.`.`.`", +"O>O>O>O>O>O;X,.POw.W._ doJomomomomomOMoj r.Uomomomomomomom.UX_._XDXDXDXDXDXD.WOw.PX,O;O>O>O>O>O>", +"O>O>O>O>O>O;XrOmox.0 9X8Xtomomomomom.6X`ou.Uomomomomomomom.UX_._XDXDXDXDXDoe.0oxOmXrO;O>O>O>O>O>", +".].].].].].]O,.z JXkOH.VotomomomomX{ 2oiou.Uomomomomomomom.UX_._XDO= &O0 &OFXk J.zO,.].].].].].]", +"O,O,O,O,O,O,O>OS.yOq.i._OZ ^omomom.E.9._ou.Uomomomomomomom.UX_._._.9.ZXdO=.iOq.yOSO>O,O,O,O,O,O,", +".{.{.{.{.{.{.{.].,.A BX)oyXXO2omom.Q.;._ou.Uomomomomomomom.UOh._ dO-X9O=X) BOI.,.].{.{.{.{.{.{.{", +"Oo1O+.P.T.BOeX$X$X$X$X$X$X$OrOrX$X$X$X$X$X$X$X$X$X$", +"OyOyOyOyOyOyOyOyOyOyOyOyOyOyOyOyOyOyOyX#oHXEXFoBO&.TO:OYX$OyOyOyOyOyOyOyOyOyOyOyOyOyOyOyOyOyOyOy", +"X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%Oy POo.CX0 -Xx.g TOyX%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%", +"X%X%OuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuX% oo$.h boYo4.O UX%OuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuX%X%", +" Ou.#OuOuOiX&X&X&X&X&X&X&X&X&X&X&X&X&Oy.a 4 * h.K.KO&XlX%X&X&X&X&X&X&X&X&X&X&X&X&X&X&OuOuX~Ou " +}; diff --git a/x86_64/extra/nano/PKGBUILD b/x86_64/extra/nano/PKGBUILD new file mode 100644 index 0000000..a1bddff --- /dev/null +++ b/x86_64/extra/nano/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=nano +pkgver=6.2 +pkgrel=1 +arch=('x86_64') +source=(https://nano-editor.org/dist/v6/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr \ + --bindir=/bin \ + --sysconfdir=/etc \ + --docdir=/usr/share/doc/nano + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + install -v -m644 doc/{nano.html,sample.nanorc} $pkgdir/usr/share/doc/nano +} diff --git a/x86_64/extra/nasm/PKGBUILD b/x86_64/extra/nasm/PKGBUILD new file mode 100644 index 0000000..6a19c2c --- /dev/null +++ b/x86_64/extra/nasm/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=nasm +pkgver=2.15.05 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(perl fontconfig) +source=(https://nasm.us/pub/nasm/releasebuilds/$pkgver/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/ndctl/PKGBUILD b/x86_64/extra/ndctl/PKGBUILD new file mode 100644 index 0000000..a37cd89 --- /dev/null +++ b/x86_64/extra/ndctl/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=ndctl +pkgver=72.1 +pkgrel=1 +arch=('x86_64') +depends=('iniparser' 'json-c' 'keyutils' 'kmod') +makedepends=('asciidoctor' 'bash-completion' 'systemd' 'xmlto') +source=(https://github.com/pmem/ndctl/archive/refs/tags/v$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + ./autogen.sh +} + +build() { + cd $pkgname-$pkgver + + ./configure CFLAGS='-g -O2' --prefix=/usr --sysconfdir=/etc --libdir=/usr/lib + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/nettle/PKGBUILD b/x86_64/extra/nettle/PKGBUILD new file mode 100644 index 0000000..741e64a --- /dev/null +++ b/x86_64/extra/nettle/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=nettle +pkgver=3.7.3 +pkgrel=1 +arch=('x86_64') +depends=(gmp) +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/network-manager-applet/PKGBUILD b/x86_64/extra/network-manager-applet/PKGBUILD new file mode 100644 index 0000000..0eaf320 --- /dev/null +++ b/x86_64/extra/network-manager-applet/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=network-manager-applet +pkgver=1.24.0 +pkgrel=1 +arch=('x86_64') +depends=(gtk+ libnma libnotify libsecret gobject-introspection polkit networkmanager modemmanager) +source=(https://download.gnome.org/sources/network-manager-applet/1.24/$pkgname-$pkgver.tar.xz) + +prepare() { + mkdir -p $pkgname-$pkgver/build +} + +build() { + cd $pkgname-$pkgver/build + + meson \ + --prefix=/usr \ + --buildtype=release \ + -D appindicator=no \ + -D selinux=false \ + -D wwan=true \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/networkmanager/PKGBUILD b/x86_64/extra/networkmanager/PKGBUILD new file mode 100644 index 0000000..ec662a0 --- /dev/null +++ b/x86_64/extra/networkmanager/PKGBUILD @@ -0,0 +1,45 @@ +pkgname=networkmanager +pkgver=1.32.12 +pkgrel=2 +arch=('x86_64') +depends=(libndp jansson curl dhcpcd gobject-introspection nss polkit systemd upower vala wpa_supplicant modemmanager) +source=(https://download.gnome.org/sources/NetworkManager/1.32/NetworkManager-$pkgver.tar.xz + org.freedesktop.NetworkManager.policy) + +prepare() { + cd NetworkManager-$pkgver + + grep -rl '^#!.*python$' | xargs sed -i '1s/python/&3/' + mkdir -p build +} + +build() { + cd NetworkManager-$pkgver/build + + CXXFLAGS+="-O2 -fPIC" \ + meson \ + --prefix=/usr \ + --buildtype=release \ + -D libaudit=no \ + -D libpsl=false \ + -D nmtui=true \ + -D ovs=false \ + -D ppp=false \ + -D selinux=false \ + -D qt=false \ + -D session_tracking=systemd \ + -D modem_manager=false \ + -D nmtui=false \ + .. + + ninja +} + +package() { + cd NetworkManager-$pkgver/build + + DESTDIR=$pkgdir ninja install + + # Replcase polkit action with our modified one + cp -f $srcdir/org.freedesktop.NetworkManager.policy $pkgdir/usr/share/polkit-1/actions/org.freedesktop.NetworkManager.policy +} diff --git a/x86_64/extra/networkmanager/PKGBUILD.save b/x86_64/extra/networkmanager/PKGBUILD.save new file mode 100644 index 0000000..570525e --- /dev/null +++ b/x86_64/extra/networkmanager/PKGBUILD.save @@ -0,0 +1,5 @@ +pkgname=networkmanager +pkgver=1.32.12 +pkgrev=1 +pkgdesc="Network connection manager and user applications" +arch=(x86_64) diff --git a/x86_64/extra/networkmanager/org.freedesktop.NetworkManager.policy b/x86_64/extra/networkmanager/org.freedesktop.NetworkManager.policy new file mode 100644 index 0000000..ff23512 --- /dev/null +++ b/x86_64/extra/networkmanager/org.freedesktop.NetworkManager.policy @@ -0,0 +1,1222 @@ + + + + + NetworkManager + https://networkmanager.dev/ + nm-icon + + + Enable or disable system networking + চিস্টেম নেটৱাৰ্কিং সামৰ্থবান অথবা অসামৰ্থবান কৰক + Включване и изключване на мрежата на системно ниво + সিস্টেমের নেটওয়ার্ক ব্যবস্থা সক্রিয় অথবা নিষ্ক্রিয় করা যাবে + Habilita o inhabilita la xarxa del sistema + Povolit nebo zakázat systémovou síť + Aktivér eller deaktivér systemnetværk + System-Netzwerke aktivieren oder deaktivieren + Ενεργοποίηση ή απενεργοποίηση δικτύωσης συστήματος + Enable or disable system networking + Ŝalti aŭ malŝalti sistemretkonektadon + Activar o desactivar la red del sistema + Activer ou désactiver le réseau système + Activar ou desactivar a rede do sistema + સિસ્ટમ નેટવર્કીંગ ને સક્રિય અથવા નિષ્ક્રિય કરો + तंत्र संजालन सक्रिय या निष्क्रिय करें + Rendszer hálózatkezelésének be- és kikapcsolása + Aktifkan atau matikan jejaring sistem + Abilita o disabilita la rete di sistema + システムのネットワーキングを有効または無効にする + ವ್ಯವಸ್ಥೆಯ ಜಾಲಬಂಧವನ್ನು ಶಕ್ತಗೊಳಿಸಿ ಅಥವ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ + 시스템 네트워크 사용 여부 + Įjungti arba išjungti sistemos prieigą prie tinklo + സിസ്റ്റം നെറ്റ്‌വര്‍ക്കിങ് പ്രവര്‍ത്തന സജ്ജമാക്കുക അല്ലെങ്കില്‍ പ്രവര്‍ത്തന രഹിതമാക്കുക + प्रणाली नेटवर्किंग सुरू किंवा बंद करा + Activar o desactivar lo ret sistèma + ତନ୍ତ୍ର ନେଟୱର୍କିଙ୍ଗକୁ ସକ୍ରିୟ କିମ୍ବା ନିଷ୍କ୍ରିୟ କରନ୍ତୁ + ਸਿਸਟਮ ਨੈੱਟਵਰਕਿੰਗ ਚਾਲੂ ਜਾਂ ਬੰਦ + Włączenie lub wyłączenie sieci systemowej + Habilita ou desabilita o sistema de redes + Включение или выключение сетевой конфигурации системы + Omogoči ali onemogoči sistemske omrežne povezave + Омогући или онемогући умрежавање на систему + Omogući ili onemogući umrežavanje na sistemu + Aktivera eller inaktivera systemnätverk + கணினி நெட்வொர்க்கிங் வசதியை செயல்படுத்து அல்லது நீக்கு + సిస్టమ్ నెట్వర్కింగ్‌ను చేతనము లేదా అచేతనము చేయుము + Sistem ağını etkinleştir ya da etkisizleştir + Увімкнути або вимкнути системну роботу у мережі + 启用或禁用系统联网 + 啟用或停用系統網路 + System policy prevents enabling or disabling system networking + চিস্টেম নীতিয়ে চিস্টেম নেটৱাৰ্কিং সামৰ্থবান অথবা অসামৰ্থবান কৰাটো প্ৰতিৰোধ কৰে + Политиката на системата не позволява включване и изключване на мрежата на системно ниво + সিস্টেমে ব্যবহৃত নিয়ম-নীতির বিধিনিষেধের কারণে সিস্টেমের নেটওয়ার্ক ব্যবস্থা সক্রিয় অথবা নিষ্ক্রিয় করা সম্ভব নয় + La política del sistema impedeix habilitar o inhabilitar la xarxa del sistema + Systémová zásada zamezuje povolit nebo zakázat systémovou síť + Systempolitikken forhindrer aktivering eller deaktivering af systemnetværk + Die Systemrichtlinien verhindern die Aktivierung oder Deaktivierung von System-Netzwerken + Η πολιτική συστήματος δεν επιτρέπει ενεργοποίηση ή απενεργοποίηση της δικτύωσης του συστήματος + System policy prevents enabling or disabling system networking + Sistempolitiko preventas ŝalton aŭ malŝalton de sistema retkonektado + La política del sistema evita activar o desactivar la red del sistema + La politique du système empêche l'activation ou la désactivation du réseau du système + A normativa do sistema evita a activación ou desactivación da rede do sistema + સિસ્ટમ પોલિસી એ સિસ્ટમ નેટવર્કીંગને નિષ્ક્રિય અથવા સક્રિય કરવાનું અટકાવે છે + तंत्र संजालन के युक्ति के सक्रियण या निष्क्रियण को तंत्र नीति रोकता है + A rendszer házirendje megakadályozza a rendszer hálózatkezelésének be- vagy kikapcsolását + Kebijakan sistem mencegah mengaktifkan atau mematikan jejaring sistem + La politica di sistema impedisce di abilitare o disabilitare la rete di sistema + システムポリシーによりシステムのネットワーキングの有効化または無効化が阻止されます + ವ್ಯವಸ್ಥೆಯ ಜಾಲಬಂಧವನ್ನು ಶಕ್ತ ಅಥವ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸದಂತೆ ವ್ಯವಸ್ಥೆಯ ಪಾಲಿಸಿಯು ತಡೆಯುತ್ತಿದೆ + 시스템 정책이 시스템 네트워크의 사용 여부 설정을 금지합니다 + Sistemos politika neleidžia įjungti arba išjungti sistemos prieigos prie tinklo + സിസ്റ്റം നെറ്റ്​വര്‍ക്കിങ് പ്രവര്‍ത്തനസജ്ജമാക്കുന്നതും പ്രവര്‍ത്തനരഹിതമാക്കുന്നതും സിസ്റ്റം പോളിസി തടയുന്നു + प्रणाली करार प्रणाली नेटवर्किंगसा सुरू किंवा बंद होण्यापासून रोखते + La politica del sistèma empacha l'activacion o la desactivacion de la ret del sistèma + ତନ୍ତ୍ର ନିତୀ ତନ୍ତ୍ର ନେଟୱର୍କିଙ୍ଗକୁ ସକ୍ରିୟ କିମ୍ବା ନିଷ୍କ୍ରିୟ ହେବାରୁ ବାରଣ କରିଥାଏ + ਸਿਸਟਮ ਪਾਲਸੀ ਸਿਸਟਮ ਨੈੱਟਵਰਕਿੰਗ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ + Ustawienia systemu uniemożliwiają włączanie lub wyłączanie sieci systemowej + As políticas do sistema impedem habilitação ou desabilitação do sistema de redes + Системная политика препятствует включению или отключению сетевой конфигурации системы + Sistemska določila preprečujejo omogočanje ali onemogočanje omrežnih povezav. + Овлашћења система онемогућавају управљање мрежом на систему + Ovlašćenja sistema onemogućavaju upravljanje mrežom na sistemu + Systemets policy förhindrar aktivering eller inaktivering av systemnätverk + கணினி பிணையத்தை செயல்படுத்துவதை அல்லது நீக்குவதை கணினி பாலிசி தடுக்கிறது + సిస్టమ్ నెట్వర్కింగ్‌ను చేతనము చేయుటకు లేదా అచేతనము చేయుటకు సిస్టమ్ విధానము నిరోధించుచున్నది + Sistem kuralları, sistem ağını etkinleştirmeyi ya da etkisizleştirmeyi engelliyor + Правила системи забороняють вмикання або вимикання з'єднань з мережею на системному рівні + 系统策略阻止启用或禁用系统联网 + 系統政策防止啟用或停用系統網路作業 + + no + yes + + + + + Reload NetworkManager configuration + Znovu načíst konfiguraci NetworkManageru + NetworkManager-Konfiguration neu laden + Recargar la configuración de NetworkManager + Réinitialiser la configuration de NetworkManager + Muat ulang konfigurasi NetworkManager + Ricarica la configurazione di NetworkManager + NetworkManager 設定の再ロード + 네트워크 관리자 구성 다시 읽어들이기 + ਨੈੱਟਵਰਕ-ਮੈਨੇਜਰ ਸੰਰਚਨਾ ਮੁੜ-ਲੋਡ ਕਰੋ + Ponowne wczytanie konfiguracji usługi NetworkManager + Recarrega a configuração do NetworkManager + Перезагрузить конфигурацию NetworkManager + Läs om konfiguration för Nätverkshanteraren + Перезавантажити налаштування NetworkManager + 重新加载网络管理器配置 + 重新載入 NetworkManager 設定 + System policy prevents reloading NetworkManager + Systémová zásada zamezuje opětovnému načtení NetworkManageru + Die Systemrichtlinien verhindern das Neuladen von NetworkManager + La política del sistema impide recargar NetworkManager + La politique du système empêche le chargement à nouveau du NetworkManager + Kebijakan sistem mencegah pemuatan ulang NetworkManager + La politica di sistema impedisce di ricaricare la configurazione di NetworkManager + システムポリシーは NetworkManager の再ロードを阻止します + 시스템 정책으로 인해 네트워크 관리자를 다시 읽어들이지 않습니다 + ਸਿਸਟਮ ਪਾਲਸੀ ਨੈੱਟਵਰਕ-ਮੈਨੇਜਰ ਨੂੰ ਮੁੜ-ਲੋਡ ਹੋਣ ਤੋਂ ਰੋਕਦੀ ਹੈ + Ustawienia systemu uniemożliwiają ponowne wczytanie usługi NetworkManager + As políticas do sistema impedem recarregamento do NetworkManager + Системная политика препятствует перезапуску NetworkManager + Systemets policy förhindrar att läsa om Nätverkshanteraren + Правила системи запобігають перезавантаженню NetworkManager + 系统策略阻止重新加载网络管理器 + 系統政策防止重新載入 NetworkManager + + auth_admin_keep + auth_admin_keep + auth_admin_keep + + + + + Put NetworkManager to sleep or wake it up (should only be used by system power management) + NetworkManager ক নিদ্ৰা দিয়ক অথবা ইয়াক সাৰ পোৱাওক (কেৱল চিস্টেম শক্তি ব্যৱস্থাপনা দ্বাৰা ব্যৱহাৰ হব লাগিব) + Приспиване и събуждане на NetworkManager (за целите на модула за управление на захранването на системата) + NetworkManager-কে নিদ্রিত অথবা জাগ্রত অবস্থায় স্থাপন করা যাবে (শুধুমাত্র সিস্টেমের বিদ্যুৎ পরিচালন ব্যবস্থায় ব্যবহার করা উচিত) + Posa el NetworkManager a dormir o desperta'l (només l'hauria d'utilitzar el sistema de gestió d'energia) + Uspat Network Manager nebo jej probudit (mělo by být používáno pouze systémovou správou napájení) + Sæt NetworkManager i hvile eller væk den (bør kun bruges af systemets strømstyring) + NetworkManager in den Schlafzustand versetzen oder daraus aufwecken (Sollte nur von der System-Energieverwaltung verwendet werden) + Θέση της Διαχείρισης δικτύου σε αδράνεια ή ενεργοποίησή της (πρέπει να χρησιμοποιείται μόνο από τη διαχείριση ενέργειας του συστήματος) + Put NetworkManager to sleep or wake it up (should only be used by system power management) + Dormigi aŭ veki NetworkManager (estu uzata nur de sistema energimastumado) + Poner NetworkManager a dormir o despertarlo (sólo lo debería usar el gestor de energía del sistema) + Mettre NetworkManager en veille ou le réveiller (utile uniquement pour la gestion d'énergie du système) + Poñer o NetworkManager en suspensión e espertalo (só debe ser usado polo sistema de xestión de rede) + NetworkManager ને નિષ્ક્રિય સ્થિતિ અથવા સક્રિય સ્થિતિમાં મૂકો (સિસ્ટમ પાવર સંચાલન દ્દારા ફક્ત વાપરવુ જોઇએ) + NetworkManager को स्लीप स्थिति या वेकअप स्थिति में रखें (केवल सिस्टम पावर मैनेजमेंट के द्वारा प्रयोग किया जाएगा) + Hálózatkezelő elaltatása vagy felébresztése (csak a rendszer energiagazdálkodása által használandó) + Tidurkan NetworkManager atau bangunkan (mestinya hanya dipakai oleh manajemen daya sistem) + Sospende o riattiva NetworkManager (dovrebbe essere usato solo dalla gestione dell'alimentazione di sistema) + NetworkManager をスリープ状態にする、またはスリープ状態から解除します (使用はシステムの電源管理に限ってください) + NetworkManager ಅನ್ನು ನಿದ್ರಾಸ್ಥಿತಿಗೆ ಅಥವ ಎಚ್ಚರಸ್ಥಿತಿಗೆ ಕಳುಹಿಸಿ (ಇದನ್ನು ಕೇವಲ ವ್ಯವಸ್ಥೆಯ ವಿದ್ಯುಚ್ಛಕ್ತಿ ನಿರ್ವಹಣೆಯಿಂದ ಮಾತ್ರ ಬಳಸಬೇಕು) + 네트워크 관리 프로그램을 대기 상태로 놓거나 다시 시작합니다 (시스템 전원 관리에서만 사용) + Užmigdyti arba pažadinti NetworkManager (tai turėtų naudoti tik sistemos energijos valdymo posistemė) + NetworkManager നിശ്ചലമാക്കുക അല്ലെങ്കില്‍ പ്രവര്‍ത്തിപ്പിയ്ക്കുക (സിസ്റ്റം പവര്‍ മാനേജ്മെന്റായി മാത്രമേ ഉപയോഗിയ്ക്കുവാന്‍ പാടുള്ളൂ) + NetworkManager ला स्लीप किंवा वेकअप स्तरात न्या (फक्त प्रणाली पावर मॅनेजमेंटनेच याचा वापर करावा) + Metre NetworkManager en velha o lo desrevelhar (utile unicament per la gestion d'energia del sistèma) + NetworkManager କୁ ସୁପ୍ତ କିମ୍ବା ଜାଗ୍ରତ ରଖନ୍ତୁ (କେବଳ ତନ୍ତ୍ର ଶକ୍ତି ପରିଚାଳନା ଦ୍ୱାରା ବ୍ୟବହାର ହେବା ଉଚିତ) + ਨੈੱਟਵਰਕ-ਮੈਨਜੇਰ ਨੂੰ ਸਲੀਪ ਕਰੋ ਜਾਂ ਵੇਕ ਅੱਪ ਕਰੋ (ਕੇਵਲ ਸਿਸਟਮ ਪਾਵਰ ਮੈਨਜੇਮੈਂਟ ਰਾਹੀਂ ਵਰਤਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ) + Umieszczenie usługi NetworkManager w stanie uśpienia lub przebudzenie jej (powinno być używane tylko przez systemowe zarządzanie zasilaniem) + Põe o NetworkManager para dormir ou acordar (deve ser usado somente pelo sistema de gerenciamento de energia) + Перевести NetworkManager в режим сна или пробудить его (должно использоваться только системой управления питанием) + Postavi program NetworkManager v mirovanje ali iz njega (možnost je namenjena upravljanju napajanja) + Омогућава успављивање Управника мреже (користи се са Управником потрошње на систему) + Omogućava uspavljivanje Upravnika mreže (koristi se sa Upravnikom potrošnje na sistemu) + Försätt Nätverkshanterare i vänteläge eller återställ efter det (bör endast användas av systemets strömhantering) + NetworkManager ஐ தூங்க வை அல்லது எழுப்பு (கணினி மின் மேலாண்மையால் மட்டுமே பயன்படுத்தப்படும்) + నెట్వర్కుమేనేజర్‌ను స్లీప్‌నకు లేదా దానిని మెల్కొలుపుటకు వుంచండి (సిస్టమ్ పవర్ నిర్వహణ చేత మాత్రమే వుపయోగించబడాలి) + NetworkManager'i uykuda konumuna getir veya uyandır (yalnızca sistem güç yönetimi tarafından kullanılmalıdır) + Призупинити або поновити роботу NetworkManager (має використовуватися лише інструментами керування живленням системи) + 挂起或唤醒网络管理器(应仅用于系统电源管理) + 將 NetworkManager 導入睡眠模式或將它啟用(只應被系統電源管理所使用) + System policy prevents putting NetworkManager to sleep or waking it up + চিস্টেম নীতিয়ে NetworkManager ক নিদ্ৰা দিয়াত অথবা ইয়াক সাৰ পোৱাৰ পৰা প্ৰতিৰোধ কৰে + Политиката на системата не позволява приспиване и събуждане на NetworkManager + সিস্টেমের নিয়মনীতির কারণে NetworkManager-কে নিদ্রিত অথবা জাগ্রত অবস্থায় স্থাপন করা সম্ভব নয় + La política del sistema impedeix posar el NetworkManager a dormir o despertar-lo + Systémová zásada zamezuje NetworkManager uspat nebo probudit + Systempolitikken forhindrer at sætte NetworkManager i hvile eller at vække den + Die Systemrichtlinien verhindern das in den Schlaf versetzen oder Aufwecken von NetworkManager + Η πολιτική του συστήματος δεν επιτρέπει να τίθεται η διαχείριση δικτύου σε αδράνεια ή να ενεργοποιείται. + System policy prevents putting NetworkManager to sleep or waking it up + Sistempolitiko preventas dormigi aŭ veki NetworkManager + La política del sistema evita poner a NetworkManager a dormir o despertarlo + La politique du système empêche la mise en veille et le réveil de NetworkManager + A normativa do sistema evita poñer o NetworkManager en suspensión ou espertalo + સિસ્ટમ પોલિસી NetworkManager ને નિષ્ક્રિય સ્થિતિમાં મૂકલાનું અથવા સક્રિય સ્થિતિમાં રાખવાનું અટકાવે છે + NetworkManager को स्लीप या वेकअप स्थिति में लाने के लिए नेटवर्कमैनेजर रोकता है + A rendszer házirendje megakadályozza a Hálózatkezelő elaltatását vagy felébresztését + Kebijakan sistem mencegah menidurkan NetworkManager atau membangunkannya + La politica di sistema impedisce di sospendere e riattivare NetworkManager + システムポリシーにより NetworkManager のスリープ状態への移行、またはスリープ状態からの解除が阻止されます + NetworkManager ಅನ್ನು ನಿದ್ರಾಸ್ಥಿತಿಗೆ ಅಥವ ಎಚ್ಚರಸ್ಥಿತಿಗೆ ಕಳುಹಿಸುವುದನ್ನು ವ್ಯವಸ್ಥೆಯ ನಿಯಮವು ತಡೆಯುತ್ತಿದೆ + 시스템 정책이 네트워크 관리 프로그램의 대기 상태나 다시 시작을 금지합니다 + Sistemos politika neleidžia užmigdyti arba pažadinti NetworkManager + നെറ്റ്​വര്‍ക്ക് മാനേജറിനെ ഉറക്കുന്നതും ഉണര്‍ത്തുന്നതും സിസ്റ്റം പോളിസി തടയുന്നു + प्रणाली करार NetworkManager ला स्लीप किंवा वेकअप मध्ये जाण्यापासून रोखते + La politica del sistèma empacha la mesa en velha e lo revelh de NetworkManager + ତନ୍ତ୍ର ନିତୀ NetworkManager କୁ ସୁପ୍ତ କିମ୍ବା ଜାଗ୍ରତ ରହିବାରୁ ବାରଣ କରିଥାଏ + ਸਿਸਟਮ ਪਾਲਸੀ ਨੈੱਟਵਰਕ-ਮੈਨੇਜਰ ਨੂੰ ਸਲੀਪ ਜਾਂ ਵੇਕਅੱਪ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ + Ustawienia systemu uniemożliwiają umieszczenie usługi NetworkManager w stanie uśpienia lub przebudzenie jej + As políticas do sistema impedem que se coloque o NetworkManager para dormir ou acordar + Системная политика не разрешает переводить NetworkManager в режим сна или пробуждать его + Sistemska določila preprečujejo postavitev programa NetworkManager v mirovanje ali iz njega. + Овлашћења система онемогућавају успављивање Управника мрежом + Ovlašćenja sistema onemogućavaju uspavljivanje Upravnika mrežom + Systemets policy förhindrar att Nätverkshanterare försätts i vänteläge eller återställs efter det + NetworkManagerஐ தூங்கவைப்பது அல்லது எழுப்புவதை கணினி பாலிசி தடுக்கிறது + నెట్వర్కుమేనేజర్‌ను స్లీప్‌నకు లేదా దానిని మెల్కొలుపుటకు వుంచుటను సిస్టమ్ విధానము నిరోధించుచున్నది + Sistem kuralları, NetworkManager'ı uykuda konumuna getirmeyi veya uyandırmayı engelliyor + Правила системи забороняють присипляння та поновлення роботи NetworkManager + 系统策略阻止挂起或唤醒网络管理器 + 系統政策防止將 NetworkManager 導入睡眠模式或將其啟用 + + no + no + + + + + Enable or disable Wi-Fi devices + Wi-Fi ডিভাইচসমূহ সামৰ্থবান অথবা অসামৰ্থবান কৰক + Включване и изключване на устройства за безжични мрежи + ওয়াই-ফাই ডিভাইস সক্রিয় অথবা নিষ্ক্রিয় করা যাবে + Habilita o inhabilita els dispositius Wi-Fi + Povolit nebo zakázat zařízení Wi-Fi + Aktivér eller deaktivér wi-fi-enheder + WLAN-Geräte aktivieren oder deaktivieren + Ενεργοποίηση ή απενεργοποίηση συσκευών ασύρματης δικτύωσης (WiFi) + Enable or disable Wi-Fi devices + Ŝalti aŭ malŝalti vifiajn aparatojn + Activar o desactivar los dispositivos WiFi + Activer ou désactiver des périphériques Wi-Fi + Activar ou desactivar os dispositivos Wi-Fi + Wi-Fi ઉપકરણોને સક્રિય અથવા નિષ્ક્રિય કરો + Wi-Fi युक्तियाँ सक्रिय या निष्क्रिय करें + Omogućuje ili onemogućuje Wi-Fi uređaje + Wi-Fi eszközök be- és kikapcsolása + Aktifkan atau matikan perangkat Wi-Fi + Abilita o disabilita i dispositivi Wi-Fi + Wi-Fi デバイスを有効または無効にする + Wi-Fi ಸಾಧನಗಳನ್ನು ಶಕ್ತಗೊಳಿಸಿ ಅಥವ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ + Wi-Fi 장치 사용 여부 + Įjungti arba išjungti Wi-Fi įrenginius + Wi-Fi ഡിവൈസുകള്‍ പ്രവര്‍ത്തനസജ്ജമാക്കുകയോ പ്രവര്‍ത്തനരഹിതമാക്കുകയോ ചെയ്യുക + Wi-Fi साधने सुरू किंवा बंद करा + Wi-Fi ଉପକରଣଗୁଡ଼ିକୁ ସକ୍ରିୟ କିମ୍ବା ନିଷ୍କ୍ରିୟ କରନ୍ତୁ + ਵਾਈ-ਫਾਈ ਜੰਤਰ ਸਮਰੱਥ ਜਾਂ ਅਸਮਰੱਥ ਕਰੋ + Włączenie lub wyłączenie urządzeń Wi-Fi + Habilita ou desabilita dispositivos Wi-Fi + Включить или выключить устройства Wi-Fi + Omogoči ali onemogoči naprave Wi-Fi + Омогући или онемогући бежичне уређаје + Omogući ili onemogući bežične uređaje + Aktivera eller inaktivera trådlösa enheter + Wi-Fi சாதனங்களை செயல்படுத்து அல்லது நீக்கு + Wi-Fi పరికరములను చేతనము లేదా అచేతనము చేయుము + Wi-Fi aygıtlarını etkinleştir ya da etkisizleştir + Увімкнути або вимкнути пристрої Wi-Fi + 启用或禁用 Wi-Fi 设备 + 啟用或停用 Wi-Fi 裝置 + System policy prevents enabling or disabling Wi-Fi devices + চিস্টেম নীতিয়ে Wi-Fi ডিভাইচসমূহ সামৰ্থবান অথবা অসামৰ্থবান কৰাটো প্ৰতিৰোধ কৰে + Политиката на системата не позволява включване и изключване на устройства за безжични мрежи + সিস্টেমের নিয়মনীতির কারণে, ওয়াই-ফাই ডিভাইস সক্রিয় অথবা নিষ্ক্রিয় করা সম্ভব নয় + La política del sistema impedeix habilitar o inhabilitar els dispositius Wi-Fi + Systémová zásada zamezuje povolit nebo zakázat zařízení Wi-Fi + Systempolitikken forhindrer aktivering eller deaktivering af wi-fi-enheder + Die Systemrichtlinien verhindern die Aktivierung oder Deaktivierung von WLAN-Geräten + Η πολιτική συστήματος δεν επιτρέπει ενεργοποίηση ή απενεργοποίηση συσκευών ανοιχτού ασύρματου δικτύου (WiFi) + System policy prevents enabling or disabling Wi-Fi devices + Sistempolitiko preventas ŝalton aŭ malŝalton de vifiaj aparatoj + La política del sistema evita activar o desactivar los dispositivos WiFi + La politique du système empêche l'activation ou la désactivation de périphériques Wi-Fi + A normativa do sistema evita a activación e desactivación dos dispositivos Wi-Fi + સિસ્ટમ પોલિસી એ Wi-Fi ઉપકરણોને સક્રિય અથવા નિષ્ક્રિય કરવાનું અટકાવે છે + Wi-Fi युक्ति के सक्रियण या निष्क्रियण को तंत्र नीति रोकता है + A rendszer házirendje megakadályozza a Wi-Fi eszközök be- vagy kikapcsolását + Kebijakan sistem mencegah mengaktifkan atau mematikan perangkat Wi-Fi + La politica di sistema impedisce di abilitare o disabilitare i dispositivi Wi-Fi + システムポリシーにより Wi-Fi デバイスの有効化または無効化が阻止されます + Wi-Fi ಸಾಧನವನ್ನು ಶಕ್ತ ಅಥವ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸದಂತೆ ವ್ಯವಸ್ಥೆಯ ನಿಯಮಗಳು ತಡೆಯುತ್ತಿವೆ + 시스템 정책이 Wi-Fi 장치 사용 여부 설정을 금지합니다 + Sistemos politika neleidžia įjungti arba išjungti Wi-Fi įrenginių + Wi-Fi ഡിവൈസുകള്‍ പ്രവര്‍ത്തനസജ്ജമാക്കുകയോ പ്രവര്‍ത്തനരഹിതമാക്കുകയോ ചെയ്യുന്നത് സിസ്റ്റം പോളിസി തടയുന്നു + प्रणाली करार Wi-Fi साधनांना सुरू किंवा बंद होण्यापासून रोखते + ତନ୍ତ୍ର ନିତୀ Wi-Fi ଉପକରଣଗୁଡ଼ିକୁ ସକ୍ରିୟ କିମ୍ବା ନିଷ୍କ୍ରିୟ ହେବାରୁ ବାରଣ କରିଥାଏ + ਸਿਸਟਮ ਪਾਲਸੀ ਵਾਈ-ਫਾਈ ਜੰਤਰ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰਨੋਂ ਰੋਕਦੀ ਹੈ + Ustawienia systemu uniemożliwiają włączanie lub wyłączanie urządzeń Wi-Fi + As políticas do sistema impedem a habilitação ou desabilitação de dispositivos Wi-Fi + Системная политика запрещает включение и выключение Wi-Fi устройств + Sistemska določila preprečujejo omogočanja ali onemogočanje Wi-Fi naprav + Овлашћења система онемогућавају управљање бежичним уређајима + Ovlašćenja sistema onemogućavaju upravljanje bežičnim uređajima + Systemets policy förhindrar aktivering eller inaktivering av trådlösa enheter + Wi-Fi சாதனங்களை செயல்படுத்துவதை அல்லது நீக்குவதை கணினி பாலிசி தடுக்கிறது + Wi-Fi పరికరములను చేతనము చేయుటకు లేదా అచేతనము చేయుటకు సిస్టమ్ విధానము నిరోధించుచున్నది + Sistem kuralları, Wi-Fi aygıtlarını etkinleştirmeyi ya da etkisizleştirmeyi engelliyor + Правила системи забороняють вмикання або вимикання пристроїв Wi-Fi + 系统策略阻止启用或禁用 Wi-Fi 设备 + 系統政策防止啟用或停用 Wi-Fi 裝置 + + no + yes + + + + + Enable or disable mobile broadband devices + ম'বাইল ব্ৰডবেণ্ড ডিভাইচসমূহ সামৰ্থবান অথবা অসামৰ্থবান কৰক + Включване и изключване на устройства за достъп до мобилни мрежи + মোবাইল ব্রড-ব্যান্ড ডিভাইস সক্রিয় অথবা নিষ্ক্রিয় করা যাবে + Habilita o inhabilita els dispositius de banda ampla mòbil + Povolit nebo zakázat mobilní širokopásmová zařízení + Aktivér eller deaktivér mobile bredbåndsenheder + Mobile Breitbandgeräte aktivieren oder deaktivieren + Ενεργοποίηση ή απενεργοποίηση συσκευών ευρυζωνικότητας κινητής τηλεφωνίας + Enable or disable mobile broadband devices + Ŝalti aŭ malŝalti poŝtelefonajn larĝkapacitajn aparatojn + Activar o desactivar los dispositivos de banda ancha móvil + Activer ou désactiver des périphériques mobiles à large bande + Activar ou desactivar os dispositivos de banda ancha móbiles + મોબાઇલ બ્રોડબેન્ડ ઉપકરણોને સક્રિય અથવા નિષ્ક્રિય કરો + मोबाइल ब्राडबैंड युक्तियाँ सक्रिय या निष्क्रिय करें + Omogućuje ili onemogućuje mobilne širokopojasne uređaje + Mobil széles sávú eszközök be- és kikapcsolása + Aktifkan atau matikan perangkat broadband bergerak + Abilita o disabilita i dispositivi a banda larga mobile + モバイルブロードバンドのデバイスを有効または無効にする + ಮೊಬೈಲ್ ಬ್ರಾಡ್‌ಬ್ಯಾಂಡ್ ಸಾಧನಗಳನ್ನು ಶಕ್ತಗೊಳಿಸಿ ಅಥವ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ + 모바일 광대역 장치 사용 여부 + Įjungti arba išjungti mobiliojo plačiajuosčio ryšio įrenginius + മുബൈല്‍ ബ്രോഡ്ബാന്റ് ഡിവൈസുകള്‍ പ്രവര്‍ത്തനസജ്ജമാക്കുകയോ പ്രവര്‍ത്തനരഹിതമാക്കുകയോ ചെയ്യുക + मोबाईल ब्रॉडबँड साधने सुरू किंवा बंद करा + Activar o desactivar de periferics mobils de benda larga + ମୋବାଇଲ ବ୍ରୋଡବ୍ୟାଣ୍ଡ ଉପକରଣଗୁଡ଼ିକୁ ସକ୍ରିୟ କିମ୍ବା ନିଷ୍କ୍ରିୟ କରନ୍ତୁ + ਮੋਬਾਇਲ ਬਰਾਡਬੈਂਡ ਜੰਤਰ ਸਮਰੱਥ ਜਾਂ ਅਸਮਰੱਥ ਕਰੋ + Włączenie lub wyłączenie urządzeń komórkowych + Habilita ou desabilita dispositivos móveis de banda larga + Включить или выключить устройства широкополосных мобильных сетей + Omogoči ali onemogoči naprave mobilnih širokopasovnih storitev + Омогући или онемогући мобилне широкопојасне уређаје + Omogući ili onemogući mobilne širokopojasne uređaje + Aktivera eller inaktivera mobila bredbandsenheter + மொபல் ப்ராட்பேண்ட் சாதனங்களை செயல்படுத்து அல்லது நீக்கு + మొబైల్ బ్రాడ్‌బాండ్ పరికరములను చేతనము లేదా అచేతనము చేయుము + Mobil genişbant aygıtlarını etkinleştir ya da etkisizleştir + Увімкнути або вимкнути пристрої широкосмугових мобільних мереж + 启用或禁用移动宽带设备 + 啟用或停用行動寬頻裝置 + System policy prevents enabling or disabling mobile broadband devices + চিস্টেম নীতিয়ে ম'বাইল বৰ্ডবেণ্ড ডিভাইচসমূহ সামৰ্থবান অথবা অসামৰ্থবান কৰাটো প্ৰতিৰোধ কৰে + Политиката на системата не позволява включване и изключване на устройства за мобилни мрежи + সিস্টেমের নিয়মনীতির কারণে, মোবাইল ব্রড-ব্যান্ড ডিভাইস সক্রিয় অথবা নিষ্ক্রিয় করা সম্ভব নয় + La política del sistema impedeix habilitar o inhabilitar els dispositius de banda ampla mòbil + Systémová zásada zamezuje povolení nebo zakázání mobilních širokopásmových zařízení + Systempolitikken forhindrer aktivering eller deaktivering af mobile bredbåndsenheder + Die Systemrichtlinien verhindern die Aktivierung oder Deaktivierung mobiler Breitbandgeräte + Η πολιτική του συστήματος δεν επιτρέπει την ενεργοποίηση ή απενεργοποίηση συσκευών ευρυζωνικότητας κινητής τηλεφωνίας + System policy prevents enabling or disabling mobile broadband devices + Sistempolitiko preventas ŝalton aŭ malŝalton de poŝtelefonaj larĝkapacitaj aparatoj + La política del sistema evita activar o desactivar los dispositivos de banda ancha móvil + La politique du système empêche l'activation ou la désactivation de périphériques mobiles à large bande + A normativa do sistema evita a activación ou desactivación dos dispositivos de banda ancha. + સિસ્ટમ પોલિસી એ મોબાઇલ બ્રોડબેન્ડ ઉપકરણોને સક્રિય અથવા નિષ્ક્રિય કરવાનું અટકાવે છે + मोबाइल ब्रॉडबैंड युक्ति के सक्रियण या निष्क्रियण को तंत्र नीति रोकता है + A rendszer házirendje megakadályozza a mobil széles sávú eszközök be- vagy kikapcsolását + Kebijakan sistem mencegah mengaktifkan atau mematikan perangkat broadband bergerak + La politica di sistema impedisce di abilitare o disabilitare i dispositivi a banda larga mobile + システムポリシーによりモバイルブロードバンドのデバイスの有効化または無効化が阻止されています + ಮೊಬೈಲ್ ಬ್ರಾಡ್‌ಬ್ಯಾಂಡ್ ಸಾಧನಗಳನ್ನು ಶಕ್ತ ಅಥವ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸದಂತೆ ವ್ಯವಸ್ಥೆಯ ನಿಯಮಗಳು ತಡೆಯುತ್ತಿವೆ + 시스템 정책이 모바일 광대역 장치의 사용 여부 설정을 금지합니다 + Sistemos politika neleidžia įjungti arba išjungti mobiliojo plačiajuosčio ryšio įrenginių + മുബൈല്‍ ബ്രോഡ്ബാന്റ് ഡിവൈസുകള്‍ പ്രവര്‍ത്തനസജ്ജമാക്കുകയോ പ്രവര്‍ത്തനരഹിതമാക്കുകയോ ചെയ്യുന്നത് സിസ്റ്റം പോളിസി തടയുന്നു + प्रणाली करार मोबाईल ब्रॉडबँड साधनांना सुरू किंवा बंद होण्यापासून रोखते + La politica del sistèma empacha l'activacion o la desactivacion de periferics mobils de benda larga + ତନ୍ତ୍ର ନିତୀ ମୋବାଇଲ ବ୍ରୋଡବ୍ୟାଣ୍ଡ ଉପକରଣଗୁଡ଼ିକୁ ସକ୍ରିୟ କିମ୍ବା ନିଷ୍କ୍ରିୟ ହେବାରୁ ବାରଣ କରିଥାଏ + ਸਿਸਟਮ ਪਾਲਸੀ ਮੋਬਾਇਲ ਬਰਾਡਬੈਂਡ ਜੰਤਰ ਨੂੰ ਸਮਰੱਥ ਜਾਂ ਅਸਮਰੱਥ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ + Ustawienia systemu uniemożliwiają włączanie lub wyłączanie urządzeń komórkowych + As políticas do sistema impedem a habilitação ou desabilitação de dispositivos móveis de banda larga + Системная политика запрещает включение или выключение устройств широкополосной мобильной связи + Sistemska določila preprečuje omogočanja ali onemogočanje mobilne širokopasovne naprave + Овлашћења система онемогућавају управљање мобилним широкопојасним уређајима + Ovlašćenja sistema onemogućavaju upravljanje mobilnim širokopojasnim uređajima + Systemets policy förhindrar aktivering eller inaktivering av mobila bredbandsenheter + மொபைல் ப்ராட்பேண்ட் சாதனங்களை செயல்படுத்துவதை அல்லது நீக்குவதை கணினி பாலிசி தடுக்கிறது + మొబైల్ బ్రాడ్‌బాండ్ పరికరములను చేతనముచేయుటకు లేదా అచేతనముచేయుటకు సిస్టమ్ విధానము నిరోధించుచున్నది + Sistem kuralları, mobil genişbant aygıtlarını etkinleştirmeyi ya da etkisizleştirmeyi engelliyor + Правила системи забороняють вмикання або вимикання пристроїв широкосмугових мобільних мереж + 系统策略阻止启用或禁用移动宽带设备 + 系統政策防止啟用或停用行動寬頻裝置 + + no + yes + + + + + Enable or disable WiMAX mobile broadband devices + WiMAX ম'বাইল ব্ৰডবেণ্ড ডিভাইচসমূহ সামৰ্থবান অথবা অসামৰ্থবান কৰক + Включване и изключване на устройства за достъп до мобилни мрежи по WiMAX + WiMax মোবাইল ব্রড-ব্যান্ড ডিভাইস সক্রিয় অথবা নিষ্ক্রিয় করুন + Habilita o inhabilita els dispositius de banda ampla mòbil WiMAX + Povolit nebo zakázat mobilní širokopásmová zařízení WiMAX + Mobile WiMAX-Breitbandgeräte aktivieren oder deaktivieren + Ενεργοποίηση ή απενεργοποίηση WiMAX συσκευών ευρυζωνικότητας κινητής τηλεφωνίας + Enable or disable WiMAX mobile broadband devices + Ŝalti aŭ malŝalti WiMAX-larĝkapacitajn aparatojn + Activar o desactivar los dispositivos de banda ancha móvil WiMAX + Activer ou désactiver des périphériques WiMAX à large bande + Activar ou desactivar os dispositivos de banda larga móbil WIMAX + WiMAX મોબાઇલ બ્રોડબેન્ડ ઉપકરણોને સક્રિય અથવા નિષ્ક્રિય કરો + WiMAX मोबाइल ब्राडबैंड युक्तियाँ सक्रिय या निष्क्रिय करें + Omogućuje ili onemogućuje WiMAX mobilne širokopojasne uređaje + WiMAX mobil széles sávú eszközök be- és kikapcsolása + Aktifkan atau matikan perangkat broadband bergerak WiMAX + Abilita o disabilita i dispositivi WiMAX a banda larga mobile + WiMAX モバイルブロードバンドのデバイスを有効または無効にする + WiMAX ಮೊಬೈಲ್ ಬ್ರಾಡ್‌ಬ್ಯಾಂಡ್ ಸಾಧನಗಳನ್ನು ಶಕ್ತಗೊಳಿಸಿ ಅಥವ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ + WiMAX 모바일 광대역 장치 사용 여부 + Įjungti arba išjungti WiMAX mobiliojo plačiajuosčio ryšio įrenginius + WiMAX മുബൈല്‍ ബ്രോഡ്ബാന്റ് ഡിവൈസുകള്‍ പ്രവര്‍ത്തനസജ്ജമാക്കുകയോ പ്രവര്‍ത്തനരഹിതമാക്കുകയോ ചെയ്യുക + WiMAX मोबाईल ब्रॉडबँड साधने सुरू किंवा बंद करा + Activar o desactivar de periferics WiMAX de benda larga + WiMAX ମୋବାଇଲ ବ୍ରୋଡବ୍ୟାଣ୍ଡ ଉପକରଣଗୁଡ଼ିକୁ ସକ୍ରିୟ କିମ୍ବା ନିଷ୍କ୍ରିୟ କରନ୍ତୁ + ਵਾਈ-ਮੈਕਸ ਮੋਬਾਇਲ ਬਰਾਡਬੈਂਡ ਜੰਤਰ ਸਮਰੱਥ ਜਾਂ ਅਸਮਰੱਥ ਕਰੋ + Włączenie lub wyłączenie urządzeń komórkowych WiMAX + Habilita ou desabilita dispositivos móveis WiMAX + Включить или выключить устройства мобильных сетей WiMax + Omogoči ali onemogoči mobilne širokopasovne naprave WiMAX + Aktivera eller inaktivera mobila WiMAX-bredbandsenheter + WiMAX மொபைல் ப்ராட்பேண்ட் சாதனங்களை செயல்படுத்து அல்லது முடக்கு + WiMAX మొబైల్ బ్రాడ్‌బాండ్ పరికరాలను చేతనం లేదా అచేతనం చేయి + WiMAX mobil genişbant aygıtlarını etkinleştir ya da etkisizleştir + Увімкнути або вимкнути пристрої широкосмугових мобільних мереж WiMAX + 启用或禁用 WiMAX 移动宽带设备 + 啟用或停用 WiMAX 行動寬頻裝置 + System policy prevents enabling or disabling WiMAX mobile broadband devices + চিস্টেম নীতিয়ে WiMAX ম'বাইল বৰ্ডবেণ্ড ডিভাইচসমূহ সামৰ্থবান অথবা অসামৰ্থবান কৰাটো প্ৰতিৰোধ কৰে + Политиката на системата не позволява включване и изключване на устройства за мобилни мрежи по WiMAX + সিস্টেমের নিয়মনীতির কারণে, WiMAX ব্রড-ব্যান্ড ডিভাইস সক্রিয় অথবা নিষ্ক্রিয় করা সম্ভব নয় + La política del sistema impedeix habilitar o inhabilitar els dispositius de banda ampla mòbil WiMAX + Systémová zásada zamezuje povolení nebo zakázání mobilních širokopásmových zařízení WiMAX + Die Systemrichtlinien verhindern die Aktivierung oder Deaktivierung mobiler WiMAX-Breitbandgeräte + Η πολιτική του συστήματος δεν επιτρέπει την ενεργοποίηση ή απενεργοποίηση WiMAX συσκευών ευρυζωνικότητας κινητής τηλεφωνίας + System policy prevents enabling or disabling WiMAX mobile broadband devices + Sistempolitiko preventas ŝalton aŭ malŝalton de larĝkapacitaj WiMAX-aparatoj + La política del sistema evita activar o desactivar los dispositivos de banda ancha móvil WiMAX + La politique du système empêche l'activation ou la désactivation de périphériques WiMAX à large bande + A normativa do sistema evita activar ou desactivar os dispositivos de banda larga móbil WIMAX. + સિસ્ટમ પોલિસી એ WiMAX મોબાઇલ બ્રોડબેન્ડ ઉપકરણોને સક્રિય અથવા નિષ્ક્રિય કરવાનું અટકાવે છે + WiMAX मोबाइल ब्रॉडबैंड युक्ति के सक्रियण या निष्क्रियण को तंत्र नीति रोकता है + A rendszer házirendje megakadályozza a WiMAX mobil széles sávú eszközök be- vagy kikapcsolását + Kebijakan sistem mencegah mengaktifkan atau mematikan perangkat broadband bergerak WiMAX + La politica di sistema impedisce di abilitare o disabilitare i dispositivi WiMAX a banda larga mobile + システムポリシーにより WiMAX モバイルブロードバンドのデバイスの有効化または無効化が阻止されます + WiMAX ಮೊಬೈಲ್ ಬ್ರಾಡ್‌ಬ್ಯಾಂಡ್ ಸಾಧನಗಳನ್ನು ಶಕ್ತ ಅಥವ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸದಂತೆ ವ್ಯವಸ್ಥೆಯ ನಿಯಮಗಳು ತಡೆಯುತ್ತಿವೆ + 시스템 정책이 와이맥스 모바일 광대역 장치의 사용 여부 설정을 금지합니다 + Sistemos politika neleidžia įjungti arba išjungti WiMAX mobiliojo plačiajuosčio ryšio įrenginių + iMAX മുബൈല്‍ ബ്രോഡ്ബാന്റ് ഡിവൈസുകള്‍ പ്രവര്‍ത്തനസജ്ജമാക്കുകയോ പ്രവര്‍ത്തനരഹിതമാക്കുകയോ ചെയ്യുന്നത് സിസ്റ്റം പോളിസി തടയുന്നു + प्रणाली करार WiMAX मोबाईल ब्रॉडबँड साधनांना सुरू किंवा बंद होण्यापासून रोखते + La politica del sistèma empacha l'activacion o la desactivacion de periferics WiMAX de benda larga + ତନ୍ତ୍ର ନିତୀ WiMAX ମୋବାଇଲ ବ୍ରୋଡବ୍ୟାଣ୍ଡ ଉପକରଣଗୁଡ଼ିକୁ ସକ୍ରିୟ କିମ୍ବା ନିଷ୍କ୍ରିୟ ହେବାରୁ ବାରଣ କରିଥାଏ + ਸਿਸਟਮ ਪਾਲਸੀ ਵਾਈਮੈਕਸ ਮੋਬਾਇਲ ਬਰਾਡਬੈਂਡ ਜੰਤਰ ਨੂੰ ਸਮਰੱਥ ਜਾਂ ਅਸਮਰੱਥ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ + Ustawienia systemu uniemożliwiają włączanie lub wyłączanie urządzeń komórkowych WiMAX + As políticas do sistema impedem a habilitação ou desabilitação de dispositivos móveis de banda larga WiMAX + Системная политика запрещает включение или выключение устройств мобильной связи WiMAX + Sistemska določila preprečujejo omogočanje ali onemogočanje mobilnih širokopasovnih naprav WiMAX + Systemets policy förhindrar aktivering eller inaktivering av mobila WiMAX-bredbandsenheter + WiMAX மொபைல் ப்ராட்பேண்ட் சாதனங்களை செயல்படுத்துவதை அல்லது முடக்குவதை கணினி கொள்கை தடுக்கிறது + WIMAX మొబైల్ బ్రాడ్‌బాండ్ పరికరాలను చేతనం లేదా అచేతనం చేయుటను వ్యవస్థ విధానం నిరోధిస్తోంది + Sistem kuralları, WiMAX mobil genişbant aygıtlarını etkinleştirmeyi ya da etkisizleştirmeyi engelliyor + Правила системи забороняють вмикання або вимикання пристроїв широкосмугових мобільних мереж WiMAX + 系统策略阻止启用或禁用 WiMAX 移动宽带设备 + 系統政策防止啟用或停用 WiMAX 行動寬頻裝置 + + no + yes + + + + + Allow control of network connections + নেটৱৰ্ক সংযোগসমূহৰ নিয়ন্ত্ৰণৰ অনুমতি দিয়ক + Разрешаване на управлението на мрежовите връзки + নেটওয়ার্ক সংযোগ নিয়ন্ত্রণের অনুমতি প্রদান করা হবে + Permet el control de les connexions de xarxa + Povolit ovládání síťových připojení + Tillad kontrol af netværksforbindelser + Die Kontrolle von Netzwerkverbindungen erlauben + Να επιτρέπεται ο έλεγχος των συνδέσεων δικτύου + Allow control of network connections + Permesi kontrolon de retkonektoj + Permitir controlar las conexiones de red + Autoriser le contrôle des connexions réseau + Permitir o control das conexións de rede + નેટવર્ક જોડાણોનાં નિયંત્રણની પરવાનગી આપો + संजाल कनेक्शन के नियंत्रण स्वीकार करें + Dozvoli upravljanje mrežnim vezama + Hálózati kapcsolatok felügyeletének engedélyezése + Ijinkan pengendalian sambungan jaringan + Permette il controllo delle connessioni di rete + ネットワーク接続の制御を許可 + ಜಾಲಬಂಧ ಸಂಪರ್ಕಗಳನ್ನು ನಿಯಂತ್ರಿಸುವುದನ್ನು ಅನುಮತಿಸಿ + 네트워크 연결 제어 허용 + Leisti valdyti tinklo ryšius + നെറ്റ്​വര്‍ക്ക് കണക്ഷനുകളെ നിയന്ത്രിക്കുന്നത് അനുവദിക്കുക + नेटवर्क जोडणींचे नियंत्रण स्वीकारा + Autorizar lo contraròtle de las connexions ret + ନେଟୱର୍କ ସଂଯୋଗଗୁଡ଼ିକ ପାଇଁ ନିୟନ୍ତ୍ରଣକୁ ଅନୁମତି ଦିଅନ୍ତୁ + ਨੈੱਟਵਰਕ ਕਨੈਕਸ਼ਨਾਂ ਲਈ ਕੰਟਰੋਲ ਦੀ ਆਗਿਆ + Umożliwienie sterowania połączeniami sieciowymi + Permite o controle de conexões de rede + Разрешить управление сетевыми подключениями + Dovoli nadzor omrežnih povezav + Дозволи контролу мрежних веза + Dozvoli kontrolu mrežnih veza + Tillåt kontroll av nätverksanslutningar + பிணைய இணைப்புகளின் கட்டுப்பாட்டை அனுமதி + నెట్వర్కు అనుసంధానముల యొక్క నియంత్రణ అనుమతించుము + Ağ bağlantılarının denetimine izin ver + Дозволити керування з'єднаннями мережею + 允许控制网络连接 + 允許控制網路連線 + System policy prevents control of network connections + চিস্টেম নীতিয়ে নেটৱৰ্ক সংযোগসমূহৰ নিয়ন্ত্ৰণ প্ৰতিৰোধ কৰে + Политиката на системата не позволява управляване на мрежовите връзки + সিস্টেমে ব্যবহৃত নিয়ম-নীতির বিধিনিষেধের কারণে নেটওয়ার্ক সংযোগ নিয়ন্ত্রণ করা সম্ভব নয় + La política del sistema impedeix el control de les connexions de xarxa + Systémová zásada zamezuje ovládání síťových připojení + Systempolitikken forhindrer kontrol af netværksforbindelser + Die Systemrichtlinien verhindern die Kontrolle von Netzwerkverbindungen + Η πολιτική συστήματος δεν επιτρέπει τον έλεγχο των συνδέσεων δικτύου + System policy prevents control of network connections + Sistempolitiko preventas kontrolon de retkonektoj + La política de sistema evita el control de las conexiones de red + La politique du système empêche le contrôle des connexions réseau + A normativa do sistema evita o control das conexións de rede + સિસ્ટમ પોલિસી એ સિસ્ટમ સુયોજનોનાં નિયંત્રણને અટકાવે છે + सिस्टम कनेक्शन के नियंत्रण को सिस्टम नीति रोकता है + A rendszer házirendje megakadályozza a hálózati kapcsolatok felügyeletét + Kebijakan sistem mencegah pengendalian sambungan jaringan + La politica di sistema impedisce di controllare le connessioni di rete + システムポリシーによりネットワーク接続の制御が阻止されます + ಜಾಲಬಂಧ ಸಂಪರ್ಕಗಳನ್ನು ನಿಯಂತ್ರಿಸುವುದನ್ನು ವ್ಯವಸ್ಥೆಯ ನಿಯಮಗಳು ತಡೆಯುತ್ತಿವೆ + 시스템 정책이 네트워크 연결 조작을 금지합니다 + Sistemos politika neleidžia valdyti tinklo ryšių + നെറ്റ്​വര്‍ക്ക് കണക്ഷനുകളെ നിയന്ത്രിക്കുന്നത് സിസ്റ്റം പോളിസി തടയുന്നു + प्रणाली करार नेटवर्क जोडणीचे नियंत्रण रोखते + La politica del sistèma empacha lo contraròtle de las connexions ret + ତନ୍ତ୍ର ନିତୀ ନେଟୱର୍କ ସଂଯୋଗଗୁଡ଼ିକର ନିୟନ୍ତ୍ରଣକୁ ବାରଣ କରିଥାଏ + ਸਿਸਟਮ ਪਾਲਸੀ ਨੈੱਟਵਰਕ ਕਨੈਕਸ਼ਨ ਕੰਟਰੋਲ ਕਰਨ ਤੋਂ ਸੋਧ ਤੋਂ ਰੋਕਦੀ ਹੈ + Ustawienia systemu uniemożliwiają sterowanie połączeniami sieciowymi + As políticas do sistema impedem o controle de conexões de rede + Системная политика запрещает управление сетевыми подключениями. + Sistemska določila preprečujejo nadzor omrežnih povezav + Овлашћења система онемогућавају контролу мрежних веза + Ovlašćenja sistema onemogućavaju kontrolu mrežnih veza + Systemets policy förhindrar kontroll av nätverksanslutningar + கணினி பிணைய இணைப்புகளின் கட்டுப்பாட்டை கணினி பாலிசி தடுக்கிறது + నెట్వర్కు అనుసంధానముల నియంత్రణను సిస్టమ్ విధానము నిరోధించుచున్నది + Sistem kuralları, ağ bağlantılarını denetlemeyi engelliyor + Правила системи забороняють керування з'єднаннями + 系统策略阻止网络连接的控制 + 系統政策防止網路連線的控制 + + yes + yes + yes + + + + + Allow control of Wi-Fi scans + Autoriser le contrôle des connexions réseau + Izinkan pengendalian pemindaian Wi-Fi + Permette il controllo sull'analisi del Wi-Fi + Wi-Fi スキャンの制御を許可 + Wi-Fi 스캔 제어 허용 + Umożliwienie sterowania skanowaniem sieci Wi-Fi + Permite o controle de varreduras por Wi-Fi + Разрешить управлять сканированиями Wi-Fi + Дозволити керування скануваннями Wi-Fi + 允许控制 Wi-Fi 扫描 + 允許控制 Wi-Fi 掃描 + System policy prevents Wi-Fi scans + La politique du système empêche de scanner la Wi-Fi + Kebijakan sistem mencegah pemindaian Wi-Fi + La politica di sistema impedisce di eseguire un'analisi del Wi-Fi + システムポリシーにより Wi-Fi スキャンは阻止されます + 시스템 정책이 Wi-Fi 스캔을 금지합니다 + Ustawienia systemu uniemożliwiają skanowanie sieci Wi-Fi + As políticas do sistema impedem a varreduras por Wi-Fi + Системная политика запрещает выполнять сканирования Wi-Fi + Правила системи забороняють сканування Wi-Fi + 系统策略阻止 Wi-Fi 扫描 + 系統政策防止 Wi-Fi 掃描 + + yes + yes + yes + + + + + Connection sharing via a protected Wi-Fi network + এটা সুৰক্ষিত Wi-Fi নেটৱৰ্কৰে সংযোগ অংশীদাৰী + Споделяне на връзката през защитена безжична мрежа + নিরাপদ ওয়াই-ফাইল নেটওয়ার্কের মাধ্যমে সংযোগের যৌথ ব্যবহার + Connexió compartida mitjançant una xarxa Wi-Fi protegida + Sdílení připojení přes chráněnou síť Wi-Fi + Deling af forbindelse via et beskyttet wi-fi-netværk + Verbindungsfreigabe über ein geschütztes WLAN-Netzwerk + Κοινή χρήση σύνδεσης μέσω προστατευμένου ασύρματου δικτύου + Connection sharing via a protected Wi-Fi network + Kunhavigo de konektoj per protektita vifia reto + Compartir conexión a través de una red WiFi protegida + Konexio partekatua babestutako haririk gabeko sarearen bidez + Yhteyden jakaminen suojatun langattoman verkon kautta + Partage de connexion via un réseau Wi-Fi protégé + Conexión compartida a través dunha rede Wi-Fi protexida + સુરક્ષિત થયેલ Wi-Fi નેટવર્ક મારફતે જોડાણ વહેંચણી + किसी संरक्षित Wi-Fi संजाल के द्वारा कनेक्शन साझा + Dijeljenje veze korištenjem zaštićene Wi-Fi mreže + Kapcsolatmegosztás védett Wi-Fi hálózaton + Berbagi koneksi melalui jaringan Wi-Fi terlindung + Condivisione della connessione attraverso una rete Wi-Fi protetta + 保護された Wi-Fi ネットワーク経由の接続共有 + ಒಂದು ಸಂರಕ್ಷಿತವಾದ Wi-Fi ಜಾಲಬಂಧದ ಮೂಲಕ ಸಂಪರ್ಕ ಸಾಧಿಸುವಿಕೆ + 보호된 Wi-Fi 네트워크를 통한 연결 공유 + Dalijimasis ryšiu naudojant apsaugotą Wi-Fi tinklą + സുരക്ഷിതമായ ഒരു വൈഫൈ നെറ്റ്‌വര്‍ക്ക് വഴി കണക്ഷന്‍ പങ്കിടുക + सुरक्षीत Wi-Fi नेटवर्क द्वारे जोडणीचे शेअरींग करा + Partiment de connexion via una ret Wi-Fi protegida + ଗୋଟିଏ ସୁରକ୍ଷିତ Wi-Fi ନେଟୱର୍କରେ ସଂଯୋଗ ସହଭାଗ + ਸੁਰੱਖਿਅਤ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਕਨੈਕਸ਼ਨ ਸਾਂਝਾ ਕਰੋ + Udostępnianie połączenia przez chronioną sieć Wi-Fi + Compartilhamento de conexão via rede sem fio protegida + Совместное использование подключений в защищённой сети Wi-Fi + Souporaba povezave preko zaščitenega Wi-Fi omrežja + Веза се дели преко заштићене бежичне мреже + Veza se deli preko zaštićene bežične mreže + Anslutningsdelning via ett skyddat trådlöst nätverk + ஒரு பாதுகாக்கப்ப Wi-Fi நெட்வொர்க்கின் வழியாக இணைப்பு பகிரப்படுகிறது + రక్షిత Wi-Fi నెట్వర్కు ద్వారా అనుసంధానపు భాగస్వామ్యము. + Korumalı bir Wi-Fi ağı yoluyla bağlantı paylaşımı + Спільне використання з'єднання на основі захищеної мережі Wi-Fi + 通过受保护的 Wi-Fi 网络共享连接 + 透過受保護的 Wi-Fi 網路共享連線 + System policy prevents sharing connections via a protected Wi-Fi network + চিস্টেম নীতিয়ে এটা সুৰক্ষিত Wi-Fi নেটৱৰ্কৰে সংযোগসমূহৰ অংশীদাৰী প্ৰতিৰোধ কৰে + Политиката на системата не позволява споделяне на връзки през защитена безжична мрежа + সিস্টেমের নিয়মনীতির কারণে, নিরাপদ ওয়াই-ফাই নেটওয়ার্কের মাধ্যমে সংযোগের যৌথ ব্যবহার প্রতিরোধ করা হয়েছে + La política del sistema impedeix compartir connexions mitjançant una xarxa Wi-Fi protegida + Systémová zásada zabránila sdílení připojení přes chráněnou síť Wi-Fi + Systempolitikken forhindrer deling af forbindelser via et beskyttet wi-fi-netværk + Die Systemrichtlinien verhindern Verbindungsfreigaben über ein geschütztes WLAN-Netzwerk + Η πολιτική συστήματος δεν επιτρέπει κοινή χρήση συνδέσεων μέσω προστατευμένου ασύρματου δικτύου + System policy prevents sharing connections via a protected Wi-Fi network + Sistempolitiko preventas kunhavigon de konektoj per protektita vifia reto + La política del sistema evita compartir conexiones a través de una red WiFi protegida + Sistemako arauek babestutako haririk gabeko sareen bidez konexioak partekatzea saihesten dute + Tietoturvakäytäntö estää yhteyksien jakamisen suojatun langattoman verkon kautta + La politique du système empêche tout partage des connexions via un réseau Wi-Fi protégé + A política do sistema impide compartir conexións a través dunha rede Wi-Fi protexida + સિસ્ટમ પોલિસી એ સુરક્ષિત થયેલ Wi-Fi નેટવર્ક મારફતે વહેંચણી જોડાણોને રોકી રહ્યા છે + किसी संरक्षित Wi-Fi संजाल के द्वारा साझा कनेक्शन को सिस्टम नीति रोकता है + A rendszer házirendje megakadályozza a kapcsolatok megosztását védett Wi-Fi hálózaton + Kebijakan sistem mencegah berbagi sambungan melalui jaringan Wi-Fi terlindung + La politica di sistema impedisce di condividere connessioni attraverso una rete Wi-Fi protetta + システムポリシーにより、保護された Wi-Fi ネットワーク経由の接続共有が阻止されます。 + ಒಂದು ಸಂರಕ್ಷಿತವಾದ Wi-Fi ಜಾಲಬಂಧದ ಮೂಲಕ ಸಂಪರ್ಕ ಸಾಧಿಸದಂತೆ ವ್ಯವಸ್ಥೆಯ ನಿಯಮಗಳು ತಡೆಯುತ್ತವೆ + 시스템 정책이 보호된 Wi-Fi 네트워크를 통한 연결 공유를 금지합니다 + Sistemos politika nelaidžia dalytis ryšiais naudojant apsaugotą Wi-Fi tinklą + സുരക്ഷിതമായ ഒരു വൈഫൈ നെറ്റ്‌വര്‍ക്ക് വഴി കണക്ഷനുകള്‍ പങ്കിടുന്നതു് സിസ്റ്റം പോളിസി തടയുന്നു + प्रणाली करार सुरक्षीत Wi-Fi नेटवर्क द्वारे जोडणीचे शेअरींग रोखत आहे + La politica de seguretat del sistèma empacha lo partiment de las connexions via una ret Wi-Fi protegida + ତନ୍ତ୍ର ନିତୀ ଗୋଟିଏ ସୁରକ୍ଷିତ Wi-Fi ନେଟୱର୍କରେ ସଂଯୋଗ ସହଭାଗ କରିବାରେ ବାରଣ କରିଥାଏ + ਸਿਸਟਮ ਪਾਲਸੀ ਕਨੈਕਸ਼ਨ ਨੂੰ ਸੁਰੱਖਿਅਤ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਸਾਂਝਾ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ + Ustawienia systemu uniemożliwiają udostępnianie połączeń przez chronioną sieć Wi-Fi + As políticas do sistema impedem o compartilhamento de conexões através de uma rede sem fio protegida + Системная политика запрещает совместное использование подключений в защищённой сети Wi-Fi + Sistemska pravila preprečujejo souporabo povezav preko zaščitenega Wi-Fi omrežja + Овлашћења система не дозвољавају дељење везе преко заштићене бежичне мреже + Ovlašćenja sistema ne dozvoljavaju deljenje veze preko zaštićene bežične mreže + Systemets policy förhindrar delning av anslutningar via ett skyddat trådlöst nätverk + பாதுகாக்கப்பட்ட Wi-Fi நெட்வொர்க்கின் வழியாக இணைப்புகளை பகிருவதை கணினி பாலிசி தடுக்கிறது + రక్షిత Wi-Fi నెట్వర్కు ద్వారా అనుసంధానములను భాగస్వామ్యపరచుట సిస్టమ్ విధానము నిరోధించుచున్నది + Sistem kuralları, korumalı kablosuz ağ yoluyla bağlantı paylaşımını önlüyor + Правила системи забороняють спільне використання з'єднань за допомогою захищеної мережі Wi-Fi + 系统策略阻止使用受保护的 Wi-Fi 网络共享连接 + 系統政策讓您無法透過受保護的 Wi-Fi 網路共享連結 + + no + yes + + + + + Connection sharing via an open Wi-Fi network + এটা মুক্ত Wi-Fi নেটৱৰ্কৰে সংযোগৰ অংশীদাৰী + Споделяне на връзката през отворена безжична мрежа + উন্মুক্ত ওয়াই-ফাইল নেটওয়ার্কের মাধ্যমে সংযোগের যৌথ ব্যবহার + Connexió compartida mitjançant una xarxa Wi-Fi oberta + Sdílení připojení přes otevřenou síť Wi-Fi + Deling af forbindelse via et åbent wi-fi-netværk + Verbindungsfreigabe über ein offenes WLAN-Netzwerk + Κοινή χρήση σύνδεσης μέσω ανοιχτού ασύρματου δικτύου + Connection sharing via an open Wi-Fi network + Kunhavigo de konektoj per malferma vifia reto + Compartir conexión a través de una red WiFi abierta + Konexio partekatua irekitako haririk gabeko sarearen bidez + Yhteyden jakaminen avoimen langattoman verkon kautta + Partage de connexion via un réseau Wi-Fi ouvert + Conexión compartida a través dunha rede Wi-Fi aberta + ખુલ્લા Wi-Fi નેટવર્ક મારફતે જોડાણ વહેંચણી + किसी खुले Wi-Fi संजाल के द्वारा कनेक्शन साझा + Dijeljenje veze korištenjem otvorene Wi-Fi mreže + Kapcsolatmegosztás nyílt Wi-Fi hálózaton + Berbagi koneksi melalui jaringan Wi-Fi terbuka + Condivisione della connessione attraverso una rete Wi-Fi aperta + 保護されていない Wi-Fi ネットワーク経由の接続共有 + ಒಂದು ಮುಕ್ತವಾದ Wi-Fi ಜಾಲಬಂಧದ ಮೂಲಕ ಸಂಪರ್ಕ ಸಾಧಿಸುವಿಕೆ + 열린 Wi-Fi 네트워크를 통한 연결 공유 + Dalijimasis ryšiu naudojant atvirą Wi-Fi tinklą + ഒരു തുറന്ന വൈഫൈ നെറ്റ്‌വര്‍ക്ക് വഴി കണക്ഷന്‍ പങ്കിടുക + ओपन Wi-Fi नेटवर्क द्वारे कनेक्शन शेअरींग करा + Partiment de connexion via una ret Wi-Fi dobèrta + ଗୋଟିଏ ଖୋଲା Wi-Fi ନେଟୱର୍କରେ ସଂଯୋଗ ସହଭାଗ + ਓਪਨ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਕਨੈਕਸ਼ਨ ਸਾਂਝਾ ਕਰੋ + Udostępnianie połączenia przez otwartą sieć Wi-Fi + Compartilhamento de conexão via rede sem fio aberta + Совместное использование подключений в открытой сети Wi-Fi + Souporaba povezave preko odprtega Wi-Fi omrežja + Веза се дели преко отворене бежичне мреже + Veza se deli preko otvorene bežične mreže + Anslutningsdelning via ett öppet trådlöst nätverk + ஒரு திறந்த Wi-Fi நெட்வொர்க்கின் வழியாக இணைப்பு பகிரப்படுகிறது + ఓపెన్ Wi-Fi నెట్వర్కు ద్వారా అనుసంధానపు భాగస్వామ్యము + Açık bir Wfi ağı yoluyla bağlantı paylaşımı + Спільне використання з'єднання на основі відкритої мережі Wi-Fi + 通过开放 Wi-Fi 网络共享连接 + 透過開放的 Wi-Fi 網路共享連線 + System policy prevents sharing connections via an open Wi-Fi network + চিস্টেম নীতিয়ে এটা মুক্ত Wi-Fi নেটৱৰ্কৰে সংযোগসমূহৰ অংশীদাৰী প্ৰতিৰোধ কৰে + Политиката на системата не позволява споделяне на връзки през отворена безжична мрежа + সিস্টেমের নিয়মনীতির কারণে, উন্মুক্ত ওয়াই-ফাই নেটওয়ার্কের মাধ্যমে সংযোগের যৌথ ব্যবহার প্রতিরোধ করা হয়েছে + La política del sistema impedeix compartir connexions mitjançant una xarxa Wi-Fi oberta + Systémová zásada zabránila sdílení připojení přes otevřenou síť Wi-Fi + Systempolitikken forhindrer deling af forbindelser via et åbent wi-fi-netværk + Die Systemrichtlinien verhindern Verbindungsfreigaben über ein offenes WLAN-Netzwerk + Η πολιτική συστήματος δεν επιτρέπει κοινή χρήση συνδέσεων μέσω ανοιχτού ασύρματου δικτύου + System policy prevents sharing connections via an open Wi-Fi network + Sistempolitiko preventas kunhavigo de konektoj per malferma vifia reto + La política del sistema evita compartir conexiones a través de una red WiFi abierta + Sistemako arauek irakitako haririk gabeko sareen bidez konexioak partekatzea saihesten dute + Tietoturvakäytäntö estää yhteyksien jakamisen avoimen langattoman verkon kautta + La politique du système empêche tout partage des connexions via un réseau Wi-Fi ouvert + A política do sistema impide compartir conexións a través dunha rede Wi-Fi aberta + સિસ્ટમ પોલિસી એ ખુલ્લા Wi-Fi નેટવર્ક મારફતે વહેંચણી જોડાણોને રોકી રહ્યા છે + किसी खुले Wi-Fi संजाल के द्वारा साझा कनेक्शन को सिस्टम नीति रोकता है + A rendszer házirendje megakadályozza a kapcsolatok megosztását nyílt Wi-Fi hálózaton + Kebijakan sistem mencegah berbagi sambungan melalui jaringan Wi-Fi terbuka + La politica di sistema impedisce di condividere connessioni attraverso una rete Wi-Fi aperta + システムポリシーにより、保護されていない Wi-Fi ネットワーク経由の接続共有が阻止されます。 + ಒಂದು ಮುಕ್ತವಾದ Wi-Fi ಜಾಲಬಂಧದ ಮೂಲಕ ಸಂಪರ್ಕ ಸಾಧಿಸದಂತೆ ವ್ಯವಸ್ಥೆಯ ನಿಯಮಗಳು ತಡೆಯುತ್ತವೆ + 시스템 정책이 열린 Wi-Fi 네트워크를 통한 연결 공유를 금지합니다 + Sistemos politika neleidžia dalytis ryšiais naudojant atvirą Wi-Fi tinklą + ഒരു തുറന്ന വൈഫൈ നെറ്റ്‌വര്‍ക്ക് വഴി കണക്ഷനുകള്‍ പങ്കിടുന്നതു് സിസ്റ്റം പോളിസി തടയുന്നു + प्रणाली करार ओपन Wi-Fi नेटवर्क द्वारे जोडणीचे शेअरींग रोखत आहे + La politica de seguretat del sistèma empacha lo partiment de las connexions via una ret Wi-Fi dobèrta + ତନ୍ତ୍ର ନିତୀ ଗୋଟିଏ ଖୋଲା Wi-Fi ନେଟୱର୍କରେ ସଂଯୋଗ ସହଭାଗ କରିବାରେ ବାରଣ କରିଥାଏ + ਸਿਸਟਮ ਪਾਲਸੀ ਕਨੈਕਸ਼ਨ ਨੂੰ ਓਪਨ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਰਾਹੀਂ ਸਾਂਝਾ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ + Ustawienia systemu uniemożliwiają udostępnianie połączeń przez otwartą sieć Wi-Fi + As políticas do sistema impedem o compartilhamento de conexões através de uma rede sem fio aberta + Системная политика запрещает совместное использование подключений в открытой сети Wi-Fi + Sistemska pravila preprečujejo souporabo povezav preko odprtega Wi-Fi omrežja + Овлашћења система не дозвољавају дељење везе преко отворене бежичне мреже + Ovlašćenja sistema ne dozvoljavaju deljenje veze preko otvorene bežične mreže + Systemets policy förhindrar delning av anslutningar via ett öppet trådlöst nätverk + திறந்த Wi-Fi நெட்வொர்க்கின் வழியாக இணைப்புகளை பகிருவதை கணினி பாலிசி தடுக்கிறது + ఓపెన్ Wi-Fi నెట్వర్కు ద్వారా అనుసంధానములను భాగస్వామ్యపరచుట సిస్టమ్ విధానము నిరోధించుచున్నది + Sistem kuralları, korumasız kablosuz ağ yoluyla bağlantı paylaşımını önlüyor + Правила системи забороняють спільне використання з'єднань за допомогою відкритої мережі Wi-Fi + 系统策略阻止使用开放 Wi-Fi 网络共享连接 + 系統政策讓您無法透過開放的 Wi-Fi 網路共享連線 + + no + yes + + + + + Modify personal network connections + ব্যক্তিগত নেটৱৰ্ক সংযোগসমূহ পৰিবৰ্তন কৰক + ব্যক্তিগত নেটওয়ার্ক সংযোগ পরিবর্তন করা হবে + Modifica les connexions personals de xarxa + Měnit osobní síťová připojení + Eigene Netzwerkverbindungen bearbeiten + Τροποποίηση προσωπικών συνδέσεων δικτύου + Modify personal network connections + Modifi proprajn retkonektojn + Modificar las conexiones de red personales + Modifier les connexions du réseau personnel + Modificar as conexións de rede persoais + વ્યક્તિગત નેટવર્ક જોડાણો બદલો + निजी संजाल कनेक्शन संशोधित करें + Személyes hálózati kapcsolatok módosítása + Ubah koneksi jaringan personal + Modifica le connessioni personali + 個人のネットワーク接続を編集 + ವೈಯಕ್ತಿಕ ಜಾಲಬಂಧ ಸಂಪರ್ಕಗಳನ್ನು ಮಾರ್ಪಡಿಸಿ + 개인 네트워크 연결을 수정합니다 + Keisti asmeninius tinklo ryšius + സ്വന്തമായ നെറ്റ്​വര്‍ക്ക് കണക്ഷനുകളില്‍ മാറ്റം വരുത്തുക + वैयक्तिक नेटवर्क जोडणी संपादित करा + Modificar las connexions de la ret personala + ବ୍ୟକ୍ତିଗତ ନେଟୱର୍କ ସଂଯୋଗଗୁଡ଼ିକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ + ਨਿੱਜੀ ਨੈੱਟਵਰਕ ਕਨੈਕਸ਼ਨ ਸੋਧੋ + Modyfikacja osobistych połączeń sieciowych + Modificar conexões pessoais de rede + Редактировать личные сетевые подключения + Spremeni osebne omrežne povezave + Ändra personliga nätverksanslutningar + தனிப்பட்ட பிணைய இணைப்புகளை மாற்றியமை + వ్యక్తిగత నెట్వర్కు అనుసంధానాలను సవరించు + Kişisel ağ bağlantılarını düzenle + Змінити параметри особистих з'єднань з мережею + 更改个人网络连接 + 修改個人網路連線 + System policy prevents modification of personal network settings + চিস্টেম নীতিয়ে ব্যক্তিগত নেটৱৰ্ক সংহতিসমূহৰ পৰিবৰ্তন প্ৰতিৰোধ কৰে + সিস্টেমে ব্যবহৃত নিয়ম-নীতির বিধিনিষেধের কারণে ব্যক্তিগত নেটওয়ার্কের বৈশিষ্ট্য পরিবর্তন করা সম্ভব নয় + La política del sistema impedeix la modificació dels paràmetres personals de xarxa + Systémová zásada zabránila změně osobního síťového nastavení + Die Systemrichtlinien verhindern das Bearbeiten von eigenen Netzwerkeinstellungen + Η πολιτική συστήματος δεν επιτρέπει τροποποίηση των ρυθμίσεων δικτύου + System policy prevents modification of personal network settings + Sistempolitiko preventas modifadon de propraj retagordoj + La política del sistema evita la modificación de la configuración de red personal + La politique du système empêche toute modification des paramètres réseau personnels + A política do sistema impide a modificación da configuración persoal da rede + સિસ્ટમ પોલિસી એ વ્યક્તિગત નેટવર્ક સુયોજનોનાં બદલાવને અટકાવે છે + प्रणाली नीति व्यक्तिगत संजाल सेटिंग के संशोधन से बचाता है + A rendszer házirendje megakadályozza a személyes hálózati beállítások módosítását + Kebijakan sistem mencegah pengubahan tatanan jaringan pribadi + La politica di sistema impedisce di modificare le impostazioni di rete personali + システムポリシーにより個人のネットワーク設定の変更が阻止されます + ವೈಯಕ್ತಿಕ ಜಾಲಬಂಧದ ಸಿದ್ಧತೆಗಳನ್ನು ಮಾರ್ಪಡಿಸದಂತೆ ವ್ಯವಸ್ಥೆಯ ನಿಯಮಗಳು ತಡೆಯುತ್ತವೆ + 시스템 정책이 개인 네트워크 설정의 수정을 금지합니다 + Sistemos politika neleidžia keisti asmeninių tinklų nustatymų + സ്വന്തമായ നെറ്റ്​വര്‍ക്ക് സജ്ജീകരണങ്ങള്‍ മാറ്റം വരുത്തുന്നതു് സിസ്റ്റം പോളിസി തടയുന്നു + प्रणाली करार, व्यक्तिगत नेटवर्क सेटिंग्स् संपादीत करण्यापासून रोखते + La politica del sistèma empacha tota modificacion dels paramètres ret personals + ତନ୍ତ୍ର ନିତୀ ବ୍ୟକ୍ତିଗତ ନେଟୱର୍କ ସଂରଚନା ପରିବର୍ତ୍ତନକୁ ବାରଣ କରିଥାଏ + ਸਿਸਟਮ ਪਾਲਸੀ ਨਿੱਜੀ ਨੈੱਟਵਰਕ ਸੈਟਿੰਗ ਲਈ ਸੋਧ ਤੋਂ ਰੋਕਦੀ ਹੈ + Ustawienia systemu uniemożliwiają modyfikację osobistych ustawień systemowych + As políticas do sistema impedem a modificação das definições pessoais de redes + Системная политика запрещает изменение личных сетевых подключений + Sistemska določila preprečujejo spreminjanje osebnih omrežnih nastavitev + Systemets policy förhindrar ändring av personliga nätverksinställningar + தனிப்பட்ட பிணைய அமைவுகளின் மாற்றத்தை கணினி பாலிசி தடுக்கிறது + వ్యక్తిగత నెట్వర్కు అమరికల యొక్క సవరింపును వ్యవస్థ విధానం నిరోధించును + Sistem kuralları, kişisel ağ ayarlarının değiştirilmesine izin vermiyor + Правила системи забороняють внесення змін до особистих параметрів мережі + 系统策略阻止更改个人网络设置 + 系統政策防止修改個人網路設定 + + yes + yes + yes + + + + + Modify network connections for all users + সকলো ব্যৱহাৰকাৰীৰ বাবে নেটৱৰ্ক সংযোগসমূহ পৰিবৰ্তন কৰক + সকল ব্যবহারকারীর জন্য নেটওয়ার্ক সংযোগ পরিবর্তন করা হবে + Modifica les connexions de xarxa per a tots els usuaris + Měnit síťová připojení pro všechny uživatele + Netzwerkverbindungen für alle Benutzer bearbeiten + Τροποποίηση συνδέσεων δικτύου για όλους τους χρήστες + Modify network connections for all users + Modifi retkonektojn por ĉiuj uzantoj + Modificar las conexiones de red para todos los usuarios + Modifier les connexions réseau pour tous les utilisateurs + Modificar as conexións de rede para tódolos usuarios + બધા વપરાશકર્તાઓ માટે નેટવર્ક જોડાણો બદલો + सभी उपयोगकर्ताओं के लिए संजाल कनेक्शन संशोधित करें + Hálózati kapcsolatok módosítása minden felhasználó számára + Ubah koneksi jaringan bagi semua pengguna + Modifica le connessioni di sistema per tutti gli utenti + 全ユーザーのネットワーク接続を編集 + ಎಲ್ಲಾ ಬಳಕೆದಾರರಿಗಾಗಿ ಜಾಲಬಂಧ ಸಂಪರ್ಕಗಳನ್ನು ಮಾರ್ಪಡಿಸಿ + 모든 사용자의 네트워크 연결을 수정합니다 + Keisti visų naudotojų tinklo ryšius + എല്ലാ ഉപയോക്തള്‍ക്കുള്ള നെറ്റ്‌വര്‍ക്ക് കണക്ഷനുകളില്‍ മാറ്റം വരുത്തുക + सर्व वापरकर्त्यांकरीता नेटवर्क जोडणी संपादित करा + Modificar las connexions ret per totes los utilizaires + ସମସ୍ତ ବ୍ୟବହାରକାରୀଙ୍କ ପାଇଁ ନେଟୱର୍କ ସଂଯୋଗଗୁଡ଼ିକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ + ਸਭ ਵਰਤੋਂਕਾਰਾਂ ਲਈ ਨੈੱਟਵਰਕ ਕਨੈਕਸ਼ਨ ਸੋਧੋ + Modyfikacja połączeń sieciowych dla wszystkich użytkowników + Modificar conexões de rede para todos os usuários + Изменить подключения всех пользователей + Spremeni omrežne povezave za vse uporabnike + Ändra nätverksanslutningar för alla användare + எல்லாப் பயனர்களுக்குமான பிணைய இணைப்புகளை மாற்றியமைக்கவும் + వాడుకరులందరికి నెట్వర్కు అనుసంధానాలను సవరించు + Tüm kullanıcılar için ağ bağlantılarını düzenle + Внести зміни до мережевих з'єднань всіх користувачів + 修改所有用户的网络连接 + 修改所有使用者的網路連線 + System policy prevents modification of network settings for all users + চিস্টেম নীতিয়ে সকলো ব্যৱহাৰকাৰীৰ বাবে নেটৱৰ্ক সংহতিসমূহৰ পৰিবৰ্তন প্ৰতিৰোধ কৰে + সিস্টেমে ব্যবহৃত নিয়ম-নীতির বিধিনিষেধের কারণে সকল ব্যবহারকারীর জন্য নেটওয়ার্কের বৈশিষ্ট্য পরিবর্তন করা সম্ভব নয় + La política del sistema impedeix la modificació dels paràmetres de xarxa per a tots els usuaris + Systémová zásada zabránila změně síťového nastavení pro všechny uživatele + Die Systemrichtlinien verhindern das Bearbeiten von Netzwerkeinstellungen für alle Benutzer + Η πολιτική συστήματος δεν επιτρέπει τροποποίηση των ρυθμίσεων δικτύου για όλους τους χρήστες + System policy prevents modification of network settings for all users + Sistempolitiko preventas modifadon de retagordoj por ĉiuj uzantoj + La política del sistema evita la modificación de la configuración de la red para todos los usuarios + La politique du système empêche toute modification des paramètres réseau pour tous les utilisateurs + A política do sistema impide a modificación da configuración da rede para tódolos usuarios + સિસ્ટમ પોલિસી એ બધા વપરાશકર્તાઓ માટે નેટવર્ક સુયોજનોનાં બદલાવને અટકાવે છે + प्रणाली नीति सभी उपयोगकर्ताओं के लिए संजाल सेटिंग के संशोधन से बचाता है + A rendszer házirendje megakadályozza a hálózati beállítások módosítását minden felhasználó számára + Kebijakan sistem mencegah pengubahan tatanan sistem bagi semua pengguna + La politica di sistema impedisce di modificare le impostazioni di rete per tutti gli utenti + システムポリシーにより、全ユーザーでネットワーク設定を編集できません + ಎಲ್ಲಾ ಬಳಕೆದಾರರಿಗಾಗಿ ಜಾಲಬಂಧದ ಸಿದ್ಧತೆಗಳನ್ನು ಮಾರ್ಪಡಿಸದಂತೆ ವ್ಯವಸ್ಥೆಯ ನಿಯಮಗಳು ತಡೆಯುತ್ತವೆ + 시스템 정책이 모든 사용자에 대해 네트워크 설정의 수정을 금지합니다 + Sistemos politika neleidžia keisti tinklo nustatymų, skirtų visiems naudotojams + സിസ്റ്റത്തിന്റെ സജ്ജീകരണങ്ങളില്‍ മാറ്റം വരുത്തുന്നതു് സിസ്റ്റം പോളിസി തടയുന്നു + प्रणाली करार सर्व वापरकर्त्यांना नेटवर्क सेटिंग्स् संपादीत करण्यापासून रोखते + La politica del sistèma empacha tota modificacion dels paramètres ret per totes los utilizaires + ତନ୍ତ୍ର ନିତୀ ସମସ୍ତ ବ୍ୟବହାରକାରୀଙ୍କ ପାଇଁ ନେଟୱର୍କ ବିନ୍ୟାସ ପରିବର୍ତ୍ତନକୁ ବାରଣ କରିଥାଏ + ਸਿਸਟਮ ਪਾਲਸੀ ਸਭ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਨੈੱਟਵਰਕ ਸੈਟਿੰਗਾਂ ਲਈ ਸੋਧ ਤੋਂ ਰੋਕਦੀ ਹੈ + Ustawienia systemu uniemożliwiają modyfikację ustawień sieciowych dla wszystkich użytkowników + As políticas do sistema impedem a modificação das definições de rede para todos os usuários + Системная политика запрещает изменение сетевых параметров всех пользователей + Sistemska določila preprečujejo spreminjanje sistemskih nastavitev za vse uporabnike + Systemets policy förhindrar ändring av nätverksinställningar för alla användare + எல்லாப் பயனர்களுக்குமான பிணைய இணைப்புகளின் மாற்றத்தை கணினி பாலிசி தடுக்கிறது + వాడుకరులందరికి నెట్వర్కు అమరికల సవరింపును వ్యవస్థ విధానం నిరోధిస్తోంది + Sistem kuralları, tüm kullanıcılar için ağ ayarlarının değiştirilmesine izin vermiyor + Правила системи забороняють внесення змін до параметрів мережі для всіх користувачів + 系统策略阻止所有用户修改网络设置 + 系統政策防止修改所有使用者的網路設定 + + auth_admin_keep + auth_admin_keep + auth_admin_keep + + + + + Modify persistent system hostname + স্থায়ী চিস্টেম হস্টনাম পৰিবৰ্তন কৰক + Промяна на името на хоста + সিস্টেমের স্থায়ী হোস্ট-নেম পরিবর্তন করুন + Modifica el nom de l'ordinador de forma permanent + Měnit trvalý systémový název počítače + Ændr fast systemværtsnavn + Den ständigen Rechnernamen des Systems bearbeiten + Αλλαγή πάγιου ονόματος συστήματος + Modify persistent system hostname + Modifi permanentan sisteman gastigan nomon + Modificar el nombre de anfitrión persistente del sistema + Aldatu sistemako ostalari-izen iraunkorra + Muuta järjestelmän verkkonimeä + Modifier le nom d'hôte persistant du système + Modificar o nome persistente do anfitrión do sistema + નિરંતર સિસ્ટમ યજમાનનામને બદલો + स्थिर सिस्टम होस्टनेम को सुधारें + Állandó rendszergépnév módosítása + Ubah nama host sistem yang persisten + Modifica del nome host persistente del sistema + 永続的なシステムのホスト名を修正 + ಸ್ಥಿರ ವ್ಯವಸ್ಥೆಯ ಆತಿಥೇಯ ಹೆಸರನ್ನು ಮಾರ್ಪಡಿಸಿ + 지속적인 시스템 호스트 이름을 수정합니다 + Keisti pastovų sistemos vardą + സിസ്റ്റത്തിന്റെ ഹോസ്റ്റ്നാമത്തില്‍ മാറ്റം വരുത്തുക + पर्सिस्टंट प्रणाली यजमाननाव संपादीत करा + Modificacion permanenta del nom de l'ordenador + ସ୍ଥାୟୀ ତନ୍ତ୍ର ହୋଷ୍ଟନାମକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ + ਸਥਿਰ ਸਿਸਟਮ ਹੋਸਟ-ਨਾਂ ਸੋਧੋ + Modyfikacja trwałej systemowej nazwy komputera + Modificar máquina de sistema persistente + Изменить постоянное системное имя хоста + Zmenit perzistentné systémové meno hostiteľa + Spremeni trajno sistemsko ime gostitelja + Трајно измени име хоста + Trajno izmeni ime hosta + Ändra bestående värdnamn för systemet + நிலையான கணினி புரவலப்பெயரை மாற்றியமை + నిరంతర సిస్టమ్ హోస్టునామము మార్చుము + Direşken sistemin adını değiştir + Змінити постійну назву вузла у мережі + 修改系统固有主机名 + 修改永久系統的主機名稱 + System policy prevents modification of the persistent system hostname + চিস্টেম নীতিয়ে স্থায়ী চিস্টেম হস্টনামৰ পৰিবৰ্তন প্ৰতিৰোধ কৰে + Политиката на системата не позволява промяна на името на хоста + সিস্টেমে ব্যবহৃত নিয়ম-নীতির বিধিনিষেধের কারণে সিস্টেমের স্থায়ী হোস্ট-নেম পরিবর্তন করা সম্ভব নয় + La política del sistema impedeix la modificació del nom de l'ordinador de forma permanent + Systémová zásada zabránila změně trvalého systémového názvu počítače + Systempolitikken forhindrer ændring af det faste systemværtsnavn + Die Systemrichtlinien verhindern das Bearbeiten des ständigen Rechnernamens des Systems + Η πολιτική συστήματος δεν επιτρέπει τροποποίηση του πάγιου ονόματος συστήματος + System policy prevents modification of the persistent system hostname + Sistempolitiko preventas modifadon de la konstanta sistem-gastnomo + La política del sistema evita la modificación del nombre de anfitrión persistente del sistema + Sistemako arauek sistemako ostalari-izen iraunkorra aldatzea saihesten dute + Tietoturvakäytäntö estää tietokoneen nimen muuttamisen + La politique du système empêche toute modification du nom d'hôte persistant du système + A política do sistema impide a modificación do nome do anfitrión do sistema + સિસ્ટમ પોલિસી એ નિરંતર સિસ્ટમ યજમાનનામનાં બદલાવને અટકાવે છે + सिस्टम नीति स्थिर सिस्टम होस्टनेम के रूपांतरण को रोकता है. + A rendszer házirendje megakadályozza a rendszer állandó gépnevének módosítását + Kebijakan sistem mencegah pengubahan nama host yang persisten + La politica di sistema impedisce di modificare il nome host persistente del sistema + システムポリシーにより、永続的なシステムのホスト名が修正できません + ಸ್ಥಿರ ವ್ಯವಸ್ಥೆಯ ಆತಿಥೇಯ ಹೆಸರನ್ನು ಮಾರ್ಪಡಿಸದಂತೆ ವ್ಯವಸ್ಥೆಯ ನಿಯಮಗಳು ತಡೆಯುತ್ತವೆ + 시스템 정책이 시스템 호스트 이름의 변경을 금지합니다 + Sistemos politika neleidžia keisti įsiminto sistemos vardo + സിസ്റ്റത്തിന്റെ ഹോസ്റ്റ്നാമത്തില്‍ മാറ്റം വരുത്തുന്നതു് സിസ്റ്റം പോളിസി തടയുന്നു + प्रणाली करार पर्सिस्टंट प्रणाली यजमाननावाचे संपादन रोखत आहे + La politica de seguretat del sistèma empacha la modificacion permanenta del nom de l'ordenador + ତନ୍ତ୍ର ନିତୀ ସ୍ଥାୟୀ ତନ୍ତ୍ର ହୋଷ୍ଟନାମର ପରିବର୍ତ୍ତନକୁ ବାରଣ କରିଥାଏ + ਸਿਸਟਮ ਪਾਲਸੀ ਸਥਿਰ ਸਿਸਟਮ ਹੋਸਟ-ਨਾਂ ਲਈ ਸੋਧਾਂ ਤੋਂ ਰੋਕਦੀ ਹੈ + Ustawienia systemu uniemożliwiają modyfikację trwałej systemowej nazwy komputera + As políticas do sistema impedem a modificação da máquina do sistema persistente + Системная политика запрещает изменение постоянного системного имени хоста + Sistemska pravila preprečujejo spremembo imena gostitelja trajnega sistema + Овлашћења система не дозвољавају измену хоста + Ovlašćenja sistema ne dozvoljavaju izmenu hosta + Systemets policy förhindrar ändring av bestående värdnamn för systemet + நிலையான கணினி புரவலபெயர் மாற்றியமைப்பதை கணினி பாலிசி தடுக்கிறது + నిరంతర సిస్టమ్ హోస్టునామమును సవరించుటను సిస్టమ్ విధానము నిరోధించుచున్నది + Sistem kuralları, direşken sistemin adının değiştirilmesini önlüyor + Правила системи забороняють внесення змін до постійної назви вузла у мережі + 系统策略阻止修改系统固有主机名 + 系統政策讓您無法修改永久的系統主機名稱 + + auth_admin_keep + auth_admin_keep + auth_admin_keep + + + + + Modify persistent global DNS configuration + Modifica la configuració DNS global persistent + Die dauerhafte globale DNS-Konfiguration bearbeiten + Modificar la configuración de DNS global persistente + Modifier la configuration DNS globale persistante + Ubah konfigurasi DNS global yang persisten + Modifica la configurazione DNS globale persistente + 永続的なグローバル DNS 設定の変更 + 지속적인 전체 DNS 설정 수정 + Modyfikacja trwałej globalnej konfiguracji DNS + Modificar configuração de DNS persistente global + Изменить постоянную глобальную конфигурацию DNS + Zmeniť perzistentnú globálnu konfiguráciu DNS + Ändra bestående global DNS-konfiguration + Змінити постійні загальні налаштування DNS + 修改持久性全局 DNS 配置 + 修改持久性全局DNS配置 + System policy prevents modification of the persistent global DNS configuration + La política del sistema impedeix la modificació del DNS global persistent + Die Systemrichtlinien verhindern das Ändern der ständigen globalen DNS-Konfiguration + La política del sistema evita la modificación de la configuración de DNS global persistente + La politique du système empêche toute modification de la configuration DNS globale persistante + Kebijakan sistem mencegah pengubahan konfigurasi DNS global yang persisten + La politica di sistema impedisce di modificare la configurazione DNS globale + システムポリシーにより、永続的なグローバル DNS 設定を変更できません + 시스템 정책이 지속적인 전체 DNS 설정의 수정을 금지합니다. + Ustawienia systemu uniemożliwiają modyfikację trwałej globalnej konfiguracji DNS + As políticas do sistema impedem a modificação da configuração de DNS global persistente + Системная политика запрещает изменение постоянной глобальной конфигурации DNS + Systemets policy förhindrar ändring av bestående global DNS-konfiguration + Правила системи забороняють внесення змін до постійних загальних налаштувань DNS + 系统策略阻止修改持久性全局 DNS 配置 + 系統政策讓您無法修改永久的全域 DNS 設定 + + auth_admin_keep + auth_admin_keep + auth_admin_keep + + + + + Perform a checkpoint or rollback of interfaces configuration + Einen Kontrollpunkt oder ein Zurückfallen der Schnittstellen-Konfiguration durchführen + Realizar un punto de control o una reversión de la configuración de interfaces + Faire un point de contrôle ou un retour en arrière de la configuration des interfaces + Lakukan suatu checkpoint atau rollback konfigurasi antar muka + Crea punto di controllo o ripristina la configurazione delle interfacce + インターフェース設定のチェックポイントまたはロールバックを実行 + 인터페이스 구성의 체크 포인트 또는 롤백 수행 + Wykonanie punktu kontrolnego lub przywrócenie konfiguracji interfejsów + Realizar um ponto de verificação ou uma reversão da configuração de interfaces + Создание контрольной точки или выполнение отката конфигурации интерфейсов + Skapa en återställningspunkt eller rulla tillbaka gränssnittskonfiguration + Виконати перевірку або повернення до попередніх налаштувань інтерфейсу + 执行接口配置的检查点或回滚 + 執行接口配置的檢查點或回滾 + System policy prevents the creation of a checkpoint or its rollback + Die Systemrichtlinien verhindern das Erstellen eines Prüfpunktes oder den Rückfall + La política del sistema impide la creación de un punto de control o su reversión + La politique du système empêche la création d'un point de contrôle ou son annulation + Kebijakan sistem mencegah pembuatan suatu checkpoint atau rollbacknya + La politica di sistema impedisce di creare un punto di controllo o di ripristinare la configurazione + システムポリシーによりチェックポイントまたはそのロールバックの作成が回避されます + 시스템 정책으로 체크포인트 생성이나 롤백을 할 수 없습니다. + Ustawienia systemu uniemożliwiają utworzenie punktu kontrolnego lub jego przywrócenie + As políticas do sistema impedem a criação de um ponto de controle ou sua reversão + Системная политика предотвращает создание контрольной точки или её отката + Systemets policy förhindrar skapandet av en systemåterställningspunkt eller att återgå till en sådan + Правила системи забороняють створення точки перевірки або повернення до стану такої точки + 系统策略阻止检查点的创建或其回滚 + 系統策略可防止創建檢查點或其回滾 + + auth_admin_keep + auth_admin_keep + auth_admin_keep + + + + + Enable or disable device statistics + Povolit nebo zakázat statistiky zařízení + Gerätestatistiken aktivieren oder deaktivieren + Activar o desactivar estadísticas de dispositivo + Activer ou désactiver les statistiques système du périphérique + Aktifkan atau matikan statistik perangkat + Abilita o disabilita le statistiche del dispositivo + デバイスの統計値を有効または無効にする + 장치 통계 활성화 또는 비활성화 + ਜੰਤਰ ਅੰਕੜੇ ਸਮਰੱਥ ਜਾਂ ਅਸਮਰੱਥ ਕਰੋ + Włączenie lub wyłączenie statystyk urządzenia + Habilitar ou desabilitar estatísticas do dispositivo + Включение и отключение статистики устройств + Aktivera eller inaktivera enhetsstatistik + Увімкнути або вимкнути обчислення статистичних даних пристрою + 启用或禁用设备统计 + 啟用或禁用設備統計信息 + System policy prevents enabling or disabling device statistics + Systémová zásada zamezuje povolení nebo zakázání statistik zařízení + Die Systemrichtlinien verhindern die Aktivierung oder Deaktivierung von Gerätestatistiken + La política del sistema impide activar o desactivar las estadísticas del dispositivo + La politique du système empêche l'activation ou la désactivation des statistiques système du périphérique + Kebijakan sistem mencegah mengaktifkan atau mematikan statistik perangkat + La politica di sistema impedisce di abilitare o disabilitare le statistiche del dispositivo + システムポリシーにより、デバイス統計値を有効化または無効化できません + 시스템 정책으로 장치 통계 기능 사용 여부를 설정할 수 없습니다 + ਸਿਸਟਮ ਪਾਲਸੀ ਜੰਤਰ ਅੰਕੜੇ ਸਮਰੱਥ ਜਾਂ ਅਸਮਰੱਥ ਕਰਨੋਂ ਰੋਕਦੀ ਹੈ + Ustawienia systemu uniemożliwiają włączanie lub wyłączanie statystyk urządzenia + As políticas do sistema impedem habilitação e desabilitação de estatísticas do dispositivo + Системная политика предотвращает включение или отключение статистики устройства + Systemets policy förhindrar aktivering eller inaktivering av enhetsstatistik + Правила системи забороняють вмикання або вимикання збирання статистичних даних пристрою + 系统策略阻止启用或禁用设备统计 + 系統策略阻止啟用或禁用設備統計信息 + + no + yes + + + + + Enable or disable connectivity checking + Verbindungsprüfung aktivieren oder deaktivieren + Activar o desactivar la comprobación de conectividad + Activer ou désactiver le contrôle de connectivité + Mengaktifkan atau menonaktifkan pemeriksaan konektivitas + Abilita o disabilita il controllo della connettività + 接続確認を有効または無効にする + 연결 확인 사용 여부 + ਕਨੈਕਟਵਿਟੀ ਜਾਂਚ ਨੂੰ ਸਮਰੱਥ ਜਾਂ ਅਸਮਰੱਥ ਕਰੋ + Włączenie lub wyłączenie sprawdzania łączności + Habilite ou desabilitar a verificação da conectividade + Включение или отключение проверки возможности соединения + Aktivera eller inaktivera anslutningskontroll + Увімкнути або вимкнути перевірку придатності до з'єднання + 启用或禁用连接性检查 + 啟用或禁用連接檢查 + System policy prevents enabling or disabling connectivity checking + Die Systemrichtlinien verhindern die Aktivierung oder Deaktivierung der Verbindungsprüfung + La política del sistema impide activar o desactivar la comprobación de conectividad + La politique système empêche d'activer ou de désactiver le contrôle de connectivité + Kebijakan sistem mencegah mengaktifkan atau menonaktifkan pemeriksaan konektivitas + La politica di sistema impedisce di attivare o disattivare il controllo della connettività + システムポリシーにより、接続確認を有効化または無効化できません + 시스템 정책으로 연결 확인 사용 여부를 설정할 수 없습니다. + ਸਿਸਟਮ ਪਾਲਸੀ ਕਨੈਕਟਵਿਟੀ ਜਾਂਚ ਸਮਰੱਥ ਜਾਂ ਅਸਮਰੱਥ ਕਰਨ ਤੋਂ ਰੋਕਦੀ ਹੈ + Ustawienia systemu uniemożliwiają włączanie lub wyłączanie sprawdzania łączności + As políticas do sistema impedem a habilitação ou desabilitação de verificação de conectividade + Системная политика предотвращает включение или отключение проверки возможности соединения + Systemets policy förhindrar aktivering eller inaktivering av anslutningskontroll + Правила системи забороняють вмикання або вимикання перевірки придатності до з'єднання + 系统策略阻止启用或禁用连接性检查 + 系統策略阻止啟用或禁用連接檢查 + + no + yes + + + + diff --git a/x86_64/extra/nftables/PKGBUILD b/x86_64/extra/nftables/PKGBUILD new file mode 100644 index 0000000..e6dfc8f --- /dev/null +++ b/x86_64/extra/nftables/PKGBUILD @@ -0,0 +1,33 @@ +pkgname=nftables +pkgver=1.0.1 +pkgrel=1 +arch=('x86_64') +depends=(gmp jansson libnftnl ncurses readline python3) +makedepends=(asciidoc) +source=(https://www.netfilter.org/pub/nftables/nftables-$pkgver.tar.bz2 + nftables.conf + nftables.service) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --with-json \ + --with-cli=readline \ + --disable-debug + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + # basic safe firewall config + install -Dm644 ../nftables.conf $pkgdir/etc/nftables.conf + + # Systemd + install -Dm644 ../nftables.service $pkgdir/usr/lib/systemd/system/nftables.service +} diff --git a/x86_64/extra/nftables/nftables.conf b/x86_64/extra/nftables/nftables.conf new file mode 100644 index 0000000..fe835b3 --- /dev/null +++ b/x86_64/extra/nftables/nftables.conf @@ -0,0 +1,27 @@ +#!/usr/bin/nft -f +# vim:set ts=2 sw=2 et: + +# IPv4/IPv6 Simple & Safe firewall ruleset. +# More examples in /usr/share/nftables/ and /usr/share/doc/nftables/examples/. + +table inet filter +delete table inet filter +table inet filter { + chain input { + type filter hook input priority filter + policy drop + + ct state invalid drop comment "early drop of invalid connections" + ct state {established, related} accept comment "allow tracked connections" + iifname lo accept comment "allow from loopback" + ip protocol icmp accept comment "allow icmp" + meta l4proto ipv6-icmp accept comment "allow icmp v6" + tcp dport ssh accept comment "allow sshd" + pkttype host limit rate 5/second counter reject with icmpx type admin-prohibited + counter + } + chain forward { + type filter hook forward priority filter + policy drop + } +} diff --git a/x86_64/extra/nftables/nftables.service b/x86_64/extra/nftables/nftables.service new file mode 100644 index 0000000..464d8df --- /dev/null +++ b/x86_64/extra/nftables/nftables.service @@ -0,0 +1,12 @@ +[Unit] +Description=Netfilter Tables +Documentation=man:nft(8) +Wants=network-pre.target +Before=network-pre.target + +[Service] +Type=oneshot +ExecStart=/usr/bin/nft -f /etc/nftables.conf + +[Install] +WantedBy=multi-user.target diff --git a/x86_64/extra/ninja/PKGBUILD b/x86_64/extra/ninja/PKGBUILD new file mode 100644 index 0000000..81606e0 --- /dev/null +++ b/x86_64/extra/ninja/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=ninja +pkgver=1.10.2 +pkgrel=3 +arch=('x86_64') +depends=('python3') +source=(https://ftp.osuosl.org/pub/lfs/lfs-packages/11.0/ninja-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + sed -i '/int Guess/a \ + int j = 0;\ + char* jobs = getenv( "NINJAJOBS" );\ + if ( jobs != NULL ) j = atoi( jobs );\ + if ( j > 0 ) return j;\ + ' src/ninja.cc + + python3 configure.py --bootstrap + +} + +package() { + cd $pkgname-$pkgver + + mkdir -p $pkgdir/bin $pkgdir/share/bash-completion/completions $pkgdir/usr/share/zsh/site-functions + install -vm755 ninja $pkgdir/bin/ + install -vDm644 misc/bash-completion $pkgdir/usr/share/bash-completion/completions/ninja + install -vDm644 misc/zsh-completion $pkgdir/usr/share/zsh/site-functions/_ninja +} diff --git a/x86_64/extra/nodejs/PKGBUILD b/x86_64/extra/nodejs/PKGBUILD new file mode 100644 index 0000000..c394190 --- /dev/null +++ b/x86_64/extra/nodejs/PKGBUILD @@ -0,0 +1,39 @@ +pkgname=nodejs +pkgver=17.4.0 +pkgrel=1 +arch=('x86_64') +depends=(which icu libuv nghttp2 openssl c-ares) +source=(https://nodejs.org/dist/v$pkgver/node-v$pkgver.tar.xz + allow-py3.11.patch) + +prepare() { + cd node-v$pkgver + + # Patch nodejs to allow usage of python-3.11 +# patch -Np0 -i ../allow-py3.11.patch +} + +build() { + cd node-v$pkgver + + ./configure \ + --prefix=/usr \ + --experimental-http-parser \ + --shared-brotli \ + --shared-cares \ + --shared-libuv \ + --shared-openssl \ + --shared-nghttp2 \ + --shared-zlib \ + --with-intl=system-icu + + make -j6 +} + +package() { + cd node-v$pkgver + + make DESTDIR=$pkgdir install + + +} diff --git a/x86_64/extra/nodejs/allow-py3.11.patch b/x86_64/extra/nodejs/allow-py3.11.patch new file mode 100644 index 0000000..752f991 --- /dev/null +++ b/x86_64/extra/nodejs/allow-py3.11.patch @@ -0,0 +1,19 @@ +--- configure 2022-01-04 14:35:04.541047106 +0200 ++++ configure 2022-01-04 14:35:37.173748758 +0200 +@@ -4,6 +4,7 @@ + # Note that the mix of single and double quotes is intentional, + # as is the fact that the ] goes on a new line. + _=[ 'exec' '/bin/sh' '-c' ''' ++command -v python3.11 >/dev/null && exec python3.11 "$0" "$@" + command -v python3.10 >/dev/null && exec python3.10 "$0" "$@" + command -v python3.9 >/dev/null && exec python3.9 "$0" "$@" + command -v python3.8 >/dev/null && exec python3.8 "$0" "$@" +@@ -22,7 +23,7 @@ + from distutils.spawn import find_executable as which + + print('Node.js configure: Found Python {}.{}.{}...'.format(*sys.version_info)) +-acceptable_pythons = ((3, 10), (3, 9), (3, 8), (3, 7), (3, 6)) ++acceptable_pythons = ((3, 11)), ((3, 10), (3, 9), (3, 8), (3, 7), (3, 6)) + if sys.version_info[:2] in acceptable_pythons: + import configure + else: diff --git a/x86_64/extra/notification-daemon/PKGBUILD b/x86_64/extra/notification-daemon/PKGBUILD new file mode 100644 index 0000000..91fdc1c --- /dev/null +++ b/x86_64/extra/notification-daemon/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=notification-daemon +pkgver=3.20.0 +pkgrel=1 +arch=('x86_64') +depends=(gtk+ libcanberra) +source=(https://download.gnome.org/sources/$pkgname/3.20/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/noto-fonts/46-noto-mono.conf b/x86_64/extra/noto-fonts/46-noto-mono.conf new file mode 100644 index 0000000..6740c5f --- /dev/null +++ b/x86_64/extra/noto-fonts/46-noto-mono.conf @@ -0,0 +1,10 @@ + + + + + Noto Sans Mono + + monospace + + + diff --git a/x86_64/extra/noto-fonts/46-noto-sans.conf b/x86_64/extra/noto-fonts/46-noto-sans.conf new file mode 100644 index 0000000..fb2825f --- /dev/null +++ b/x86_64/extra/noto-fonts/46-noto-sans.conf @@ -0,0 +1,10 @@ + + + + + Noto Sans + + sans-serif + + + diff --git a/x86_64/extra/noto-fonts/46-noto-serif.conf b/x86_64/extra/noto-fonts/46-noto-serif.conf new file mode 100644 index 0000000..d06c02d --- /dev/null +++ b/x86_64/extra/noto-fonts/46-noto-serif.conf @@ -0,0 +1,10 @@ + + + + + Noto Serif + + serif + + + diff --git a/x86_64/extra/noto-fonts/66-noto-mono.conf b/x86_64/extra/noto-fonts/66-noto-mono.conf new file mode 100644 index 0000000..2561249 --- /dev/null +++ b/x86_64/extra/noto-fonts/66-noto-mono.conf @@ -0,0 +1,10 @@ + + + + + monospace + + Noto Sans Mono + + + diff --git a/x86_64/extra/noto-fonts/66-noto-sans.conf b/x86_64/extra/noto-fonts/66-noto-sans.conf new file mode 100644 index 0000000..6c86c4a --- /dev/null +++ b/x86_64/extra/noto-fonts/66-noto-sans.conf @@ -0,0 +1,10 @@ + + + + + sans-serif + + Noto Sans + + + diff --git a/x86_64/extra/noto-fonts/66-noto-serif.conf b/x86_64/extra/noto-fonts/66-noto-serif.conf new file mode 100644 index 0000000..a503043 --- /dev/null +++ b/x86_64/extra/noto-fonts/66-noto-serif.conf @@ -0,0 +1,10 @@ + + + + + serif + + Noto Serif + + + diff --git a/x86_64/extra/noto-fonts/PKGBUILD b/x86_64/extra/noto-fonts/PKGBUILD new file mode 100644 index 0000000..0d47174 --- /dev/null +++ b/x86_64/extra/noto-fonts/PKGBUILD @@ -0,0 +1,40 @@ +pkgname=noto-fonts +pkgver=20220518 +commitid=0288738a4eb56671e7abe246f44e22792be39845 +pkgrel=1 +arch=(x86_64) +makedepends=(python3-pip) +source=($pkgname-$commitid.tar.gz::https://github.com/googlefonts/noto-fonts/archive/$commitid.tar.gz + 66-noto-sans.conf 66-noto-serif.conf 66-noto-mono.conf + 46-noto-sans.conf 46-noto-serif.conf 46-noto-mono.conf) + +prepare() { + pip3 install fonttools +} + +build() { + echo "Nothing to make here" +} + +package() { + cd $pkgbase-*/ + + # Remove duplicated fonts + rm {un,}hinted/ttf/NotoSansTifinagh/NotoSansTifinagh[AGHRST]*.ttf + + install -Dm644 unhinted/ttf/Noto*/*.tt[fc] -t "$pkgdir"/usr/share/fonts/noto + install -Dm644 hinted/ttf/Noto*/*.tt[fc] -t "$pkgdir"/usr/share/fonts/noto + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/noto-fonts + + # Move to noto-fonts-extra + rm -f "$pkgdir"/usr/share/fonts/noto/Noto*{Condensed,SemiBold,Extra}*.ttf + + # Install fontconfig files + install -Dm644 "$srcdir"/*.conf -t "$pkgdir"/usr/share/fontconfig/conf.avail/ + install -d "$pkgdir"/usr/share/fontconfig/conf.default + ln -rs "$pkgdir"/usr/share/fontconfig/conf.avail/* "$pkgdir"/usr/share/fontconfig/conf.default + + cp hinted/ttf/Noto*/*{Condensed,SemiBold,Extra}*.tt[fc] "$pkgdir"/usr/share/fonts/noto + install -Dm644 hinted/ttf/{Arimo,Cousine,Tinos}/*.ttf -t "$pkgdir"/usr/share/fonts/croscore + +} diff --git a/x86_64/extra/npth/PKGBUILD b/x86_64/extra/npth/PKGBUILD new file mode 100644 index 0000000..c1d23de --- /dev/null +++ b/x86_64/extra/npth/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=npth +pkgver=1.6 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +source=(https://www.gnupg.org/ftp/gcrypt/npth/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/nspr/PKGBUILD b/x86_64/extra/nspr/PKGBUILD new file mode 100644 index 0000000..696bfc9 --- /dev/null +++ b/x86_64/extra/nspr/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=nspr +pkgver=4.33 +pkgrel=1 +pkgdesc="Netscape Portable Runtime" +url="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSPR" +arch=(x86_64) +makedepends=(zip) +source=("https://archive.mozilla.org/pub/$pkgname/releases/v$pkgver/src/$pkgname-$pkgver.tar.gz") + +prepare() { + mv $pkgname-$pkgver/$pkgname $pkgname +} + +build() { + cd nspr + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib \ + --includedir=/usr/include/nspr \ + --enable-optimize \ + --disable-debug \ + --enable-64bit + make ${SOURCE_DATE_EPOCH:+ + SH_NOW="${SOURCE_DATE_EPOCH}000000" + SH_DATE="$(date --utc --date="@$SOURCE_DATE_EPOCH" '+%Y-%m-%d %T')" + } +} + +package() { + cd nspr + make DESTDIR="$pkgdir" install + ln -s nspr.pc "$pkgdir/usr/lib/pkgconfig/mozilla-nspr.pc" + + rm -r "$pkgdir"/usr/include/nspr/md + rm "$pkgdir"/usr/bin/{compile-et.pl,prerr.properties} +} diff --git a/x86_64/extra/nspr/nspr#revision=5f753966dc01e1872eb4fee6e7b6d0a4fd3daad2 b/x86_64/extra/nspr/nspr#revision=5f753966dc01e1872eb4fee6e7b6d0a4fd3daad2 new file mode 100644 index 0000000..74fcd13 --- /dev/null +++ b/x86_64/extra/nspr/nspr#revision=5f753966dc01e1872eb4fee6e7b6d0a4fd3daad2 @@ -0,0 +1,520 @@ + + + + + + + + + + + + + + +nspr: Summary + + + + + + + + + + + + + + +
 
+ + + +
last changeFri, 17 Dec 2021 16:34:41 +0100
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
005070e9849523de6c647dd15dd8a709db0f3b7d
2021-12-17 16:34 +0100
+Kai Engert - set version number to 4.34 beta +default tip +
bfc07b2a6f342812226393c0fea38182f803588b
2021-12-17 16:31 +0100
+Kai Engert - create 4.33 branch +NSPR_4_33_BRANCH +
e5bf61f1bbf7d2ce59d3bbda3c9a755cd962f9b9
2021-12-17 16:30 +0100
+Kai Engert - Added tag NSPR_4_33_RTM for changeset 5f753966dc01 + +
5f753966dc01e1872eb4fee6e7b6d0a4fd3daad2
2021-12-17 16:29 +0100
+Kai Engert - Set version number to 4.33 final +NSPR_4_33_RTM +
a980bf6b8a23fddd9a1f6a945906a09ee2f23332
2021-12-03 10:41 +0100
+Kai Engert - Added tag NSPR_4_33_BETA1 for changeset 1938a740809a + +
1938a740809af91496443321b60ca0ab68c4b67b
2021-11-30 22:08 +0000
+Mike Hommey - Bug 1299823 - Rename PR_X* symbols, remove unused ones. r=kaie +NSPR_4_33_BETA1 +
ad483a8764daa3937b8e9af8f5cfddabcabb0f8a
2021-11-30 21:49 +0000
+Mike Hommey - Bug 1742269 - Remove ${srcdir} from AC_CONFIG_AUX_DIR. r=kaie + +
1f6ed953a3cb9241b1f5eab0b0b7142bf8841867
2021-06-30 23:48 +0200
+Kai Engert - set version number to 4.33 beta + +
88af362950b244ceefbd092917552a0a61814585
2021-06-30 23:44 +0200
+Kai Engert - create 4.32 branch +NSPR_4_32_BRANCH +
3d5a081cece03dcf30563e88efc95af0327de41e
2021-06-30 23:43 +0200
+Kai Engert - Added tag NSPR_4_32_RTM for changeset 40050f21eeed + +
40050f21eeeddfdc919f42f7552fcbf472f7b9e4
2021-06-30 23:43 +0200
+Kai Engert - set version number to 4.32 final +NSPR_4_32_RTM +
853873739c495abedfa2d786a357044bad4ef100
2021-06-10 11:01 +0200
+Kai Engert - Added tag NSPR_4_32_BETA1 for changeset 70665131062b + +
70665131062b4d420a9e9c1a6f2003eed551706e
2021-06-10 08:47 +0000
+Kai Engert - Bug 1643866 - Use a larger buffer for internal calls to PR_GetHostByName. r=glandium +NSPR_4_32_BETA1 +
095f3884815779bf330a6eb6ff0aacb9bdfa9b42
2021-06-09 16:21 +0000
+Dragana Damjanovic - Bug 1713681 - Add set/getsockopt for the don't-fragment option. r=kaie,bwc,valentin + +
222ed68c24b0eac4f4757516473c4179be05db10
2021-05-26 18:11 +0200
+Kai Engert - set version number to 4.32 beta + +
236b38fcb623bad132b2ecbe0036842b36fb7830
2021-05-26 18:08 +0200
+Kai Engert - create 4.31 branch +NSPR_4_31_BRANCH +
9c6263931b0165597be79931d67bd51c6a84f7a8
2021-05-26 18:07 +0200
+Kai Engert - Added tag NSPR_4_31_RTM for changeset 0d82c2ba909b + +
0d82c2ba909bc34ab7ecfce64097816ac217aa31
2021-05-26 18:06 +0200
+Kai Engert - Set version number to 4.31 final +NSPR_4_31_RTM +
afc10f9c13090d041f66bc6472af19375e723a6a
2021-04-28 01:35 +0200
+Kai Engert - Added tag NSPR_4_31_BETA1 for changeset 565813a2e07b + +
565813a2e07b8d442cae57645f9e497d8f64f216
2021-04-27 20:39 +0200
+Dana Keeler - Bug 1686138 - Lock access to PRCallOnceType members in PR_CallOnce* for thread safety. r=kaie +NSPR_4_31_BETA1 +
...
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Fri, 17 Dec 2021 16:29:39 +0100NSPR_4_33_RTM
Tue, 30 Nov 2021 22:08:11 +0000NSPR_4_33_BETA1
Wed, 30 Jun 2021 23:43:23 +0200NSPR_4_32_RTM
Thu, 10 Jun 2021 08:47:49 +0000NSPR_4_32_BETA1
Wed, 26 May 2021 18:06:44 +0200NSPR_4_31_RTM
Tue, 27 Apr 2021 20:39:04 +0200NSPR_4_31_BETA1
Tue, 16 Mar 2021 15:53:01 +0100NSPR_4_30_RTM
Wed, 24 Feb 2021 19:50:59 +0100NSPR_4_30_BETA1
Thu, 17 Sep 2020 17:06:03 +0200NSPR_4_30_BETA0
Thu, 17 Sep 2020 17:01:34 +0200NSPR_4_29_RTM
...
+ + + + + +
...
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Fri, 17 Dec 2021 16:34:41 +0100default
Fri, 17 Dec 2021 16:31:21 +0100NSPR_4_33_BRANCH
Wed, 30 Jun 2021 23:44:58 +0200NSPR_4_32_BRANCH
Wed, 26 May 2021 18:08:24 +0200NSPR_4_31_BRANCH
Tue, 16 Mar 2021 15:54:49 +0100NSPR_4_30_BRANCH
Thu, 17 Sep 2020 17:03:30 +0200NSPR_4_29_BRANCH
Fri, 21 Aug 2020 01:05:03 +0200NSPR_4_28_BRANCH
Thu, 23 Jul 2020 20:10:12 +0200NSPR_4_25_BRANCH
Thu, 23 Jul 2020 20:09:16 +0200NSPR_4_21_BRANCH
Thu, 23 Jul 2020 15:58:32 +0200NSPR_4_27_BRANCH
...
+ + + + diff --git a/x86_64/extra/nss-mdns/PKGBUILD b/x86_64/extra/nss-mdns/PKGBUILD new file mode 100644 index 0000000..6e04309 --- /dev/null +++ b/x86_64/extra/nss-mdns/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=nss-mdns +pkgver=0.15.1 +pkgrel=1 +arch=(x86_64) +depends=(glibc avahi) +makedepends=(make) +source=(https://github.com/lathiat/nss-mdns/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr +} + +build() { + cd $pkgname-$pkgver + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/nss/PKGBUILD b/x86_64/extra/nss/PKGBUILD new file mode 100644 index 0000000..46a57b2 --- /dev/null +++ b/x86_64/extra/nss/PKGBUILD @@ -0,0 +1,84 @@ +pkgname=nss +pkgver=3.82.0 +fver=3.82 +pkgrel=1 +pkgdesc="Network Security Services" +url="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS" +arch=(x86_64) +depends=(nspr sqlite3 zlib p11-kit gyp) +makedepends=(perl python3) +source=("https://archive.mozilla.org/pub/security/$pkgname/releases/NSS_3_82_RTM/src/$pkgname-$fver.tar.gz" + certdata2pem.py bundle.sh) + +prepare() { + mv $pkgname-$fver/$pkgname $pkgname + + mkdir -p certs + ln -srft certs nss/lib/ckfw/builtins/{certdata.txt,nssckbi.h} +} + +build() { + cd certs + ../certdata2pem.py + + cd .. + ./bundle.sh + + cd nss + ./build.sh \ + --target x64 \ + --opt \ + --system-sqlite \ + --enable-libpkix \ + --system-nspr \ + --disable-tests +} + +package_nss() { + local nsprver="$(pkg-config --modversion nspr)" + local libdir=/usr/lib + + sed nss/pkg/pkg-config/nss.pc.in \ + -e "s,%libdir%,$libdir,g" \ + -e "s,%prefix%,/usr,g" \ + -e "s,%exec_prefix%,/usr/bin,g" \ + -e "s,%includedir%,/usr/include/nss,g" \ + -e "s,%NSPR_VERSION%,$nsprver,g" \ + -e "s,%NSS_VERSION%,$pkgver,g" | + install -Dm644 /dev/stdin "$pkgdir$libdir/pkgconfig/nss.pc" + + ln -s nss.pc "$pkgdir$libdir/pkgconfig/mozilla-nss.pc" + + install -Dt "$pkgdir$libdir" dist/Release/lib/*.so + + local vmajor vminor vpatch + { read vmajor; read vminor; read vpatch; } \ + < <(awk '/#define.*NSS_V(MAJOR|MINOR|PATCH)/ {print $3}' nss/lib/nss/nss.h) + + sed nss/pkg/pkg-config/nss-config.in \ + -e "s,@libdir@,$libdir,g" \ + -e "s,@prefix@,/usr/bin,g" \ + -e "s,@exec_prefix@,/usr/bin,g" \ + -e "s,@includedir@,/usr/include/nss,g" \ + -e "s,@MOD_MAJOR_VERSION@,$vmajor,g" \ + -e "s,@MOD_MINOR_VERSION@,$vminor,g" \ + -e "s,@MOD_PATCH_VERSION@,$vpatch,g" | + install -D /dev/stdin "$pkgdir/usr/bin/nss-config" + + install -Dt "$pkgdir/usr/bin" \ + dist/Release/bin/{*util,shlibsign,signtool,signver,ssltap} + + install -Dt "$pkgdir/usr/include/nss" -m644 dist/public/nss/*.h + + install -Dt "$pkgdir/usr/share/man/man1" -m644 \ + nss/doc/nroff/{*util,signtool,signver,ssltap}.1 + + # Replace built-in trust with p11-kit connection + ln -s pkcs11/p11-kit-trust.so "$pkgdir$libdir/p11-kit-trust.so" + ln -sf p11-kit-trust.so "$pkgdir$libdir/libnssckbi.so" + + install -Dm644 ca-bundle.trust.p11-kit \ + "$pkgdir/usr/share/ca-certificates/trust-source/mozilla.trust.p11-kit" +} + +# vim:set sw=2 et: diff --git a/x86_64/extra/nss/bundle.sh b/x86_64/extra/nss/bundle.sh new file mode 100755 index 0000000..531a496 --- /dev/null +++ b/x86_64/extra/nss/bundle.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# From Fedora's ca-certificates.spec + +( + cat < ca-bundle.trust.p11-kit + +for p in certs/*.tmp-p11-kit; do + cat "$p" >> ca-bundle.trust.p11-kit +done diff --git a/x86_64/extra/nss/certdata2pem.py b/x86_64/extra/nss/certdata2pem.py new file mode 100755 index 0000000..a52ce9c --- /dev/null +++ b/x86_64/extra/nss/certdata2pem.py @@ -0,0 +1,413 @@ +#!/usr/bin/python +# vim:set et sw=4: +# +# certdata2pem.py - splits certdata.txt into multiple files +# +# Copyright (C) 2009 Philipp Kern +# Copyright (C) 2013 Kai Engert +# +# 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. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, +# USA. + +import base64 +import os.path +import re +import sys +import textwrap +import urllib.request, urllib.parse, urllib.error +import subprocess + +objects = [] + +def printable_serial(obj): + return ".".join([str(x) for x in obj['CKA_SERIAL_NUMBER']]) + +# Dirty file parser. +in_data, in_multiline, in_obj = False, False, False +field, ftype, value, binval, obj = None, None, None, bytearray(), dict() +for line in open('certdata.txt', 'r'): + # Ignore the file header. + if not in_data: + if line.startswith('BEGINDATA'): + in_data = True + continue + # Ignore comment lines. + if line.startswith('#'): + continue + # Empty lines are significant if we are inside an object. + if in_obj and len(line.strip()) == 0: + objects.append(obj) + obj = dict() + in_obj = False + continue + if len(line.strip()) == 0: + continue + if in_multiline: + if not line.startswith('END'): + if ftype == 'MULTILINE_OCTAL': + line = line.strip() + for i in re.finditer(r'\\([0-3][0-7][0-7])', line): + integ = int(i.group(1), 8) + binval.extend((integ).to_bytes(1, sys.byteorder)) + obj[field] = binval + else: + value += line + obj[field] = value + continue + in_multiline = False + continue + if line.startswith('CKA_CLASS'): + in_obj = True + line_parts = line.strip().split(' ', 2) + if len(line_parts) > 2: + field, ftype = line_parts[0:2] + value = ' '.join(line_parts[2:]) + elif len(line_parts) == 2: + field, ftype = line_parts + value = None + else: + raise NotImplementedError('line_parts < 2 not supported.\n' + line) + if ftype == 'MULTILINE_OCTAL': + in_multiline = True + value = "" + binval = bytearray() + continue + obj[field] = value +if len(list(obj.items())) > 0: + objects.append(obj) + +# Build up trust database. +trustmap = dict() +for obj in objects: + if obj['CKA_CLASS'] != 'CKO_NSS_TRUST': + continue + key = obj['CKA_LABEL'] + printable_serial(obj) + trustmap[key] = obj + print(" added trust", key) + +# Build up cert database. +certmap = dict() +for obj in objects: + if obj['CKA_CLASS'] != 'CKO_CERTIFICATE': + continue + key = obj['CKA_LABEL'] + printable_serial(obj) + certmap[key] = obj + print(" added cert", key) + +def obj_to_filename(obj): + label = obj['CKA_LABEL'][1:-1] + label = label.replace('/', '_')\ + .replace(' ', '_')\ + .replace('(', '=')\ + .replace(')', '=')\ + .replace(',', '_') + labelbytes = bytearray() + i = 0 + imax = len(label) + while i < imax: + if i < imax-3 and label[i] == '\\' and label[i+1] == 'x': + labelbytes.extend(bytes.fromhex(label[i+2:i+4])) + i += 4 + continue + labelbytes.extend(str.encode(label[i])) + i = i+1 + continue + label = labelbytes.decode('utf-8') + serial = printable_serial(obj) + return label + ":" + serial + +def write_cert_ext_to_file(f, oid, value, public_key): + f.write("[p11-kit-object-v1]\n") + f.write("label: "); + f.write(tobj['CKA_LABEL']) + f.write("\n") + f.write("class: x-certificate-extension\n"); + f.write("object-id: " + oid + "\n") + f.write("value: \"" + value + "\"\n") + f.write("modifiable: false\n"); + f.write(public_key) + +trust_types = { + "CKA_TRUST_DIGITAL_SIGNATURE": "digital-signature", + "CKA_TRUST_NON_REPUDIATION": "non-repudiation", + "CKA_TRUST_KEY_ENCIPHERMENT": "key-encipherment", + "CKA_TRUST_DATA_ENCIPHERMENT": "data-encipherment", + "CKA_TRUST_KEY_AGREEMENT": "key-agreement", + "CKA_TRUST_KEY_CERT_SIGN": "cert-sign", + "CKA_TRUST_CRL_SIGN": "crl-sign", + "CKA_TRUST_SERVER_AUTH": "server-auth", + "CKA_TRUST_CLIENT_AUTH": "client-auth", + "CKA_TRUST_CODE_SIGNING": "code-signing", + "CKA_TRUST_EMAIL_PROTECTION": "email-protection", + "CKA_TRUST_IPSEC_END_SYSTEM": "ipsec-end-system", + "CKA_TRUST_IPSEC_TUNNEL": "ipsec-tunnel", + "CKA_TRUST_IPSEC_USER": "ipsec-user", + "CKA_TRUST_TIME_STAMPING": "time-stamping", + "CKA_TRUST_STEP_UP_APPROVED": "step-up-approved", +} + +legacy_trust_types = { + "LEGACY_CKA_TRUST_SERVER_AUTH": "server-auth", + "LEGACY_CKA_TRUST_CODE_SIGNING": "code-signing", + "LEGACY_CKA_TRUST_EMAIL_PROTECTION": "email-protection", +} + +legacy_to_real_trust_types = { + "LEGACY_CKA_TRUST_SERVER_AUTH": "CKA_TRUST_SERVER_AUTH", + "LEGACY_CKA_TRUST_CODE_SIGNING": "CKA_TRUST_CODE_SIGNING", + "LEGACY_CKA_TRUST_EMAIL_PROTECTION": "CKA_TRUST_EMAIL_PROTECTION", +} + +openssl_trust = { + "CKA_TRUST_SERVER_AUTH": "serverAuth", + "CKA_TRUST_CLIENT_AUTH": "clientAuth", + "CKA_TRUST_CODE_SIGNING": "codeSigning", + "CKA_TRUST_EMAIL_PROTECTION": "emailProtection", +} + +cert_distrust_types = { + "CKA_NSS_SERVER_DISTRUST_AFTER": "nss-server-distrust-after", + "CKA_NSS_EMAIL_DISTRUST_AFTER": "nss-email-distrust-after", +} + +for tobj in objects: + if tobj['CKA_CLASS'] == 'CKO_NSS_TRUST': + key = tobj['CKA_LABEL'] + printable_serial(tobj) + print("producing trust for " + key) + trustbits = [] + distrustbits = [] + openssl_trustflags = [] + openssl_distrustflags = [] + legacy_trustbits = [] + legacy_openssl_trustflags = [] + for t in list(trust_types.keys()): + if t in tobj and tobj[t] == 'CKT_NSS_TRUSTED_DELEGATOR': + trustbits.append(t) + if t in openssl_trust: + openssl_trustflags.append(openssl_trust[t]) + if t in tobj and tobj[t] == 'CKT_NSS_NOT_TRUSTED': + distrustbits.append(t) + if t in openssl_trust: + openssl_distrustflags.append(openssl_trust[t]) + + for t in list(legacy_trust_types.keys()): + if t in tobj and tobj[t] == 'CKT_NSS_TRUSTED_DELEGATOR': + real_t = legacy_to_real_trust_types[t] + legacy_trustbits.append(real_t) + if real_t in openssl_trust: + legacy_openssl_trustflags.append(openssl_trust[real_t]) + if t in tobj and tobj[t] == 'CKT_NSS_NOT_TRUSTED': + raise NotImplementedError('legacy distrust not supported.\n' + line) + + fname = obj_to_filename(tobj) + try: + obj = certmap[key] + except: + obj = None + + # optional debug code, that dumps the parsed input to files + #fulldump = "dump-" + fname + #dumpf = open(fulldump, 'w') + #dumpf.write(str(obj)); + #dumpf.write(str(tobj)); + #dumpf.close(); + + is_legacy = 0 + if 'LEGACY_CKA_TRUST_SERVER_AUTH' in tobj or 'LEGACY_CKA_TRUST_EMAIL_PROTECTION' in tobj or 'LEGACY_CKA_TRUST_CODE_SIGNING' in tobj: + is_legacy = 1 + if obj == None: + raise NotImplementedError('found legacy trust without certificate.\n' + line) + + legacy_fname = "legacy-default/" + fname + ".crt" + f = open(legacy_fname, 'w') + f.write("# alias=%s\n"%tobj['CKA_LABEL']) + f.write("# trust=" + " ".join(legacy_trustbits) + "\n") + if legacy_openssl_trustflags: + f.write("# openssl-trust=" + " ".join(legacy_openssl_trustflags) + "\n") + f.write("-----BEGIN CERTIFICATE-----\n") + temp_encoded_b64 = base64.b64encode(obj['CKA_VALUE']) + temp_wrapped = textwrap.wrap(temp_encoded_b64.decode(), 64) + f.write("\n".join(temp_wrapped)) + f.write("\n-----END CERTIFICATE-----\n") + f.close() + + if 'CKA_TRUST_SERVER_AUTH' in tobj or 'CKA_TRUST_EMAIL_PROTECTION' in tobj or 'CKA_TRUST_CODE_SIGNING' in tobj: + legacy_fname = "legacy-disable/" + fname + ".crt" + f = open(legacy_fname, 'w') + f.write("# alias=%s\n"%tobj['CKA_LABEL']) + f.write("# trust=" + " ".join(trustbits) + "\n") + if openssl_trustflags: + f.write("# openssl-trust=" + " ".join(openssl_trustflags) + "\n") + f.write("-----BEGIN CERTIFICATE-----\n") + f.write("\n".join(textwrap.wrap(base64.b64encode(obj['CKA_VALUE']), 64))) + f.write("\n-----END CERTIFICATE-----\n") + f.close() + + # don't produce p11-kit output for legacy certificates + continue + + pk = '' + cert_comment = '' + if obj != None: + # must extract the public key from the cert, let's use openssl + cert_fname = "cert-" + fname + fc = open(cert_fname, 'w') + fc.write("-----BEGIN CERTIFICATE-----\n") + temp_encoded_b64 = base64.b64encode(obj['CKA_VALUE']) + temp_wrapped = textwrap.wrap(temp_encoded_b64.decode(), 64) + fc.write("\n".join(temp_wrapped)) + fc.write("\n-----END CERTIFICATE-----\n") + fc.close(); + pk_fname = "pubkey-" + fname + fpkout = open(pk_fname, "w") + dump_pk_command = ["openssl", "x509", "-in", cert_fname, "-noout", "-pubkey"] + subprocess.call(dump_pk_command, stdout=fpkout) + fpkout.close() + with open (pk_fname, "r") as myfile: + pk=myfile.read() + # obtain certificate information suitable as a comment + comment_fname = "comment-" + fname + fcout = open(comment_fname, "w") + comment_command = ["openssl", "x509", "-in", cert_fname, "-noout", "-text"] + subprocess.call(comment_command, stdout=fcout) + fcout.close() + sed_command = ["sed", "--in-place", "s/^/#/", comment_fname] + subprocess.call(sed_command) + with open (comment_fname, "r", errors = 'replace') as myfile: + cert_comment=myfile.read() + + fname += ".tmp-p11-kit" + f = open(fname, 'w') + + if obj != None: + is_distrusted = False + has_server_trust = False + has_email_trust = False + has_code_trust = False + + if 'CKA_TRUST_SERVER_AUTH' in tobj: + if tobj['CKA_TRUST_SERVER_AUTH'] == 'CKT_NSS_NOT_TRUSTED': + is_distrusted = True + elif tobj['CKA_TRUST_SERVER_AUTH'] == 'CKT_NSS_TRUSTED_DELEGATOR': + has_server_trust = True + + if 'CKA_TRUST_EMAIL_PROTECTION' in tobj: + if tobj['CKA_TRUST_EMAIL_PROTECTION'] == 'CKT_NSS_NOT_TRUSTED': + is_distrusted = True + elif tobj['CKA_TRUST_EMAIL_PROTECTION'] == 'CKT_NSS_TRUSTED_DELEGATOR': + has_email_trust = True + + if 'CKA_TRUST_CODE_SIGNING' in tobj: + if tobj['CKA_TRUST_CODE_SIGNING'] == 'CKT_NSS_NOT_TRUSTED': + is_distrusted = True + elif tobj['CKA_TRUST_CODE_SIGNING'] == 'CKT_NSS_TRUSTED_DELEGATOR': + has_code_trust = True + + if is_distrusted: + trust_ext_oid = "1.3.6.1.4.1.3319.6.10.1" + trust_ext_value = "0.%06%0a%2b%06%01%04%01%99w%06%0a%01%04 0%1e%06%08%2b%06%01%05%05%07%03%04%06%08%2b%06%01%05%05%07%03%01%06%08%2b%06%01%05%05%07%03%03" + write_cert_ext_to_file(f, trust_ext_oid, trust_ext_value, pk) + + trust_ext_oid = "2.5.29.37" + if has_server_trust: + if has_email_trust: + if has_code_trust: + # server + email + code + trust_ext_value = "0%2a%06%03U%1d%25%01%01%ff%04 0%1e%06%08%2b%06%01%05%05%07%03%04%06%08%2b%06%01%05%05%07%03%01%06%08%2b%06%01%05%05%07%03%03" + else: + # server + email + trust_ext_value = "0 %06%03U%1d%25%01%01%ff%04%160%14%06%08%2b%06%01%05%05%07%03%04%06%08%2b%06%01%05%05%07%03%01" + else: + if has_code_trust: + # server + code + trust_ext_value = "0 %06%03U%1d%25%01%01%ff%04%160%14%06%08%2b%06%01%05%05%07%03%01%06%08%2b%06%01%05%05%07%03%03" + else: + # server + trust_ext_value = "0%16%06%03U%1d%25%01%01%ff%04%0c0%0a%06%08%2b%06%01%05%05%07%03%01" + else: + if has_email_trust: + if has_code_trust: + # email + code + trust_ext_value = "0 %06%03U%1d%25%01%01%ff%04%160%14%06%08%2b%06%01%05%05%07%03%04%06%08%2b%06%01%05%05%07%03%03" + else: + # email + trust_ext_value = "0%16%06%03U%1d%25%01%01%ff%04%0c0%0a%06%08%2b%06%01%05%05%07%03%04" + else: + if has_code_trust: + # code + trust_ext_value = "0%16%06%03U%1d%25%01%01%ff%04%0c0%0a%06%08%2b%06%01%05%05%07%03%03" + else: + # none + trust_ext_value = "0%18%06%03U%1d%25%01%01%ff%04%0e0%0c%06%0a%2b%06%01%04%01%99w%06%0a%10" + + # no 2.5.29.37 for neutral certificates + if (is_distrusted or has_server_trust or has_email_trust or has_code_trust): + write_cert_ext_to_file(f, trust_ext_oid, trust_ext_value, pk) + + pk = '' + f.write("\n") + + f.write("[p11-kit-object-v1]\n") + f.write("label: "); + f.write(tobj['CKA_LABEL']) + f.write("\n") + if is_distrusted: + f.write("x-distrusted: true\n") + elif has_server_trust or has_email_trust or has_code_trust: + f.write("trusted: true\n") + else: + f.write("trusted: false\n") + + # requires p11-kit >= 0.23.4 + f.write("nss-mozilla-ca-policy: true\n") + f.write("modifiable: false\n"); + + # requires p11-kit >= 0.23.19 + for t in list(cert_distrust_types.keys()): + if t in obj: + value = obj[t] + if value == 'CK_FALSE': + value = bytearray(1) + f.write(cert_distrust_types[t] + ": \"") + f.write(urllib.parse.quote(value)); + f.write("\"\n") + + f.write("-----BEGIN CERTIFICATE-----\n") + temp_encoded_b64 = base64.b64encode(obj['CKA_VALUE']) + temp_wrapped = textwrap.wrap(temp_encoded_b64.decode(), 64) + f.write("\n".join(temp_wrapped)) + f.write("\n-----END CERTIFICATE-----\n") + f.write(cert_comment) + f.write("\n") + + else: + f.write("[p11-kit-object-v1]\n") + f.write("label: "); + f.write(tobj['CKA_LABEL']); + f.write("\n") + f.write("class: certificate\n") + f.write("certificate-type: x-509\n") + f.write("modifiable: false\n"); + f.write("issuer: \""); + f.write(urllib.parse.quote(tobj['CKA_ISSUER'])); + f.write("\"\n") + f.write("serial-number: \""); + f.write(urllib.parse.quote(tobj['CKA_SERIAL_NUMBER'])); + f.write("\"\n") + if (tobj['CKA_TRUST_SERVER_AUTH'] == 'CKT_NSS_NOT_TRUSTED') or (tobj['CKA_TRUST_EMAIL_PROTECTION'] == 'CKT_NSS_NOT_TRUSTED') or (tobj['CKA_TRUST_CODE_SIGNING'] == 'CKT_NSS_NOT_TRUSTED'): + f.write("x-distrusted: true\n") + f.write("\n\n") + f.close() + print(" -> written as '%s', trust = %s, openssl-trust = %s, distrust = %s, openssl-distrust = %s" % (fname, trustbits, openssl_trustflags, distrustbits, openssl_distrustflags)) diff --git a/x86_64/extra/ntfs-3g/PKGBUILD b/x86_64/extra/ntfs-3g/PKGBUILD new file mode 100644 index 0000000..1a3a2fe --- /dev/null +++ b/x86_64/extra/ntfs-3g/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=ntfs-3g +_pkgname=ntfs-3g_ntfsprogs +pkgver=2021.8.22 +pkgrel=1 +pkgdesc='NTFS filesystem driver and utilities' +arch=('x86_64') +depends=('util-linux' 'fuse2') +source=("https://tuxera.com/opensource/${_pkgname}-${pkgver}.tgz") + +prepare() { + cd ${_pkgname}-${pkgver} + sed 's|$(DESTDIR)/sbin|$(DESTDIR)/usr/bin|' -i {ntfsprogs,src}/Makefile.in +} + +build() { + cd ${_pkgname}-${pkgver} + + ./configure \ + --prefix=/usr \ + --mandir=/usr/share/man \ + --disable-ldconfig \ + --with-fuse=external \ + --enable-xattr-mappings \ + --enable-posix-acls \ + --enable-extras \ + --enable-crypto \ + + make +} + +package() { + cd ${_pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" rootbindir=/usr/bin rootsbindir=/usr/bin rootlibdir=/usr/lib install + rm "${pkgdir}"/usr/share/man/man8/ntfsfallocate.8 # uninstalled binary + ln -s /usr/bin/ntfs-3g "${pkgdir}/usr/bin/mount.ntfs" +} diff --git a/x86_64/extra/numactl/PKGBUILD b/x86_64/extra/numactl/PKGBUILD new file mode 100644 index 0000000..e5c6217 --- /dev/null +++ b/x86_64/extra/numactl/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=numactl +pkgver=2.0.14 +pkgrel=1 +arch=(x86_64) +depends=(glibc) +source=("https://github.com/numactl/numactl/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz") + +prepare(){ + cd "${pkgname}-${pkgver}" + + autoreconf -fiv +} + +build() { + cd "${pkgname}-${pkgver}" + + ./configure --prefix=/usr + + make +} + +package() { + make DESTDIR="$pkgdir" install -C $pkgname-$pkgver + + install -vDm 644 $pkgname-$pkgver/README.md -t "${pkgdir}/usr/share/doc/${pkgname}" + + # move_pages(2) is provided by man-pages and is more up-to-date there anyway + rm -rf "$pkgdir/usr/share/man/man2" +} diff --git a/x86_64/extra/ocaml/PKGBUILD b/x86_64/extra/ocaml/PKGBUILD new file mode 100644 index 0000000..985bc8a --- /dev/null +++ b/x86_64/extra/ocaml/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=('ocaml') +pkgver=4.13.1 +pkgrel=1 +pkgdesc="A functional language with OO extensions" +arch=('x86_64') +depends=('ncurses') +source=(https://caml.inria.fr/distrib/ocaml-${pkgver%.*}/${pkgname}-${pkgver}.tar.xz) +options=('!makeflags' '!emptydirs' 'staticlibs') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure --prefix /usr --mandir /usr/share/man --disable-force-safe-string + + make --debug=v world.opt +} + +package_ocaml() { + cd "${srcdir}/${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install +} diff --git a/x86_64/extra/ocl-icd/PKGBUILD b/x86_64/extra/ocl-icd/PKGBUILD new file mode 100644 index 0000000..ced8ba5 --- /dev/null +++ b/x86_64/extra/ocl-icd/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=ocl-icd +pkgver=2.3.1 +pkgrel=3 +arch=(x86_64) +depends=(glibc) +makedepends=(mesa xmlto asciidoc ruby3 opencl-headers) +source=(https://github.com/OCL-dev/$pkgname/archive/v$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + autoreconf -fi +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/open-vm-tools/PKGBUILD b/x86_64/extra/open-vm-tools/PKGBUILD new file mode 100644 index 0000000..8ebe6a0 --- /dev/null +++ b/x86_64/extra/open-vm-tools/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=open-vm-tools +pkgver=11.3.5 +pkgrel=1 +arch=('x86_64') +source=(https://github.com/vmware/open-vm-tools/releases/download/stable-$pkgver/open-vm-tools-$pkgver-18557794.tar.gz) + +build() { + ls + cd $pkgname-$pkgver-18557794 + + autoreconf -i + ./configure + make +} + +package() { + cd $pkgname-$pkgver-18557794 + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/openal/PKGBUILD b/x86_64/extra/openal/PKGBUILD new file mode 100644 index 0000000..1ff36eb --- /dev/null +++ b/x86_64/extra/openal/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=openal +pkgver=1.21.1 +pkgrel=1 +arch=(x86_64) +depends=(alsa-lib pulseaudio jack2 qt5 sdl2 + libsndfile ffmpeg) +makedepends=(git cmake ninja) +commitid=ae4eacf147e2c2340cc4e02a790df04c793ed0a9 # 1.21.1 +source=("git+https://github.com/kcat/openal-soft#commit=$commitid" + ffmpeg-5.0.diff) + +prepare() { + cd openal-soft + + # Missing include + git cherry-pick -n 302e88dbf0f10224a5b87be4ce43b3fdd9d20184 + + # https://bugs.archlinux.org/task/72729 + git cherry-pick -n b7ff1de48efda9ad54e6a3b4c1526722c371e832 + + # Fix build with FFmpeg 5.0 + git apply -3 ../ffmpeg-5.0.diff +} + +build() { + cmake -S openal-soft -B build -G Ninja \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=None \ + -D CMAKE_INSTALL_LIBDIR=lib + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} diff --git a/x86_64/extra/openal/ffmpeg-5.0.diff b/x86_64/extra/openal/ffmpeg-5.0.diff new file mode 100644 index 0000000..98764ec --- /dev/null +++ b/x86_64/extra/openal/ffmpeg-5.0.diff @@ -0,0 +1,13 @@ +diff --git i/examples/alffplay.cpp w/examples/alffplay.cpp +index b9739e7b..806ef10c 100644 +--- i/examples/alffplay.cpp ++++ w/examples/alffplay.cpp +@@ -1804,7 +1804,7 @@ int MovieState::streamComponentOpen(unsigned int stream_index) + if(avcodec_parameters_to_context(avctx.get(), mFormatCtx->streams[stream_index]->codecpar)) + return -1; + +- AVCodec *codec{avcodec_find_decoder(avctx->codec_id)}; ++ const AVCodec *codec{avcodec_find_decoder(avctx->codec_id)}; + if(!codec || avcodec_open2(avctx.get(), codec, nullptr) < 0) + { + std::cerr<< "Unsupported codec: "<codec_id) diff --git a/x86_64/extra/opencl-clhpp/PKGBUILD b/x86_64/extra/opencl-clhpp/PKGBUILD new file mode 100644 index 0000000..f78e0a8 --- /dev/null +++ b/x86_64/extra/opencl-clhpp/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=opencl-clhpp +pkgver=2.0.16 +pkgrel=1 +arch=('x86_64') +url='https://github.com/KhronosGroup/OpenCL-CLHPP' +makedepends=('cmake') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/KhronosGroup/OpenCL-CLHPP/archive/v${pkgver}.tar.gz") +depends=('opencl-headers') + +build() { + cd "${srcdir}"/OpenCL-CLHPP*/ + + cmake -B build ./ \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D BUILD_DOCS=Off \ + -D BUILD_EXAMPLES=Off \ + -D BUILD_TESTS=Off + + make -C build +} + +package() { + cd "${srcdir}"/OpenCL-CLHPP*/ + + DESTDIR="$pkgdir" make -C build install +} diff --git a/x86_64/extra/opencl-headers/PKGBUILD b/x86_64/extra/opencl-headers/PKGBUILD new file mode 100644 index 0000000..68147e8 --- /dev/null +++ b/x86_64/extra/opencl-headers/PKGBUILD @@ -0,0 +1,15 @@ +pkgname=opencl-headers +pkgver=2022.01.04 +pkgrel=1 +arch=('x86_64') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/KhronosGroup/OpenCL-Headers/archive/v${pkgver}.tar.gz") + +package() { + cd "${srcdir}"/OpenCL-Headers*/CL + + install -dm755 "${pkgdir}"/usr/include/CL + + for h in *.h; do + install -m 644 ${h} "${pkgdir}"/usr/include/CL/ + done +} \ No newline at end of file diff --git a/x86_64/extra/openjdk-17/0001-REVERT-8266851-Implement-JEP-403-Strongly-Encapsulat.patch b/x86_64/extra/openjdk-17/0001-REVERT-8266851-Implement-JEP-403-Strongly-Encapsulat.patch new file mode 100644 index 0000000..d0a256a --- /dev/null +++ b/x86_64/extra/openjdk-17/0001-REVERT-8266851-Implement-JEP-403-Strongly-Encapsulat.patch @@ -0,0 +1,3303 @@ +From 76288cc9dd93dc3dfcb0ab4c92b0e9305ed5ab60 Mon Sep 17 00:00:00 2001 +From: Martin Valba +Date: Tue, 10 May 2022 21:17:53 +0300 +Subject: [PATCH] [REVERT]: 8266851: Implement JEP 403: Strongly Encapsulate + JDK + +--- + src/hotspot/share/runtime/arguments.cpp | 11 +- + .../share/classes/java/lang/Module.java | 23 +- + .../java/lang/invoke/MethodHandles.java | 8 + + .../java/lang/reflect/AccessibleObject.java | 31 + + .../module/ExplodedSystemModules.java | 10 + + .../internal/module/IllegalAccessLogger.java | 407 +++++ + .../internal/module/IllegalAccessMaps.java | 130 ++ + .../jdk/internal/module/ModuleBootstrap.java | 125 +- + .../jdk/internal/module/SystemModules.java | 12 + + .../jdk/internal/module/jdk8_packages.dat | 1340 +++++++++++++++++ + .../launcher/resources/launcher.properties | 5 + + .../internal/plugins/SystemModulesPlugin.java | 14 + + .../lang/ModuleTests/BasicModuleTest.java | 2 +- + .../lang/instrument/RedefineModuleTest.java | 2 +- + .../lang/invoke/CallerSensitiveAccess.java | 2 +- + .../AccessibleObject/CanAccessTest.java | 2 +- + .../ModuleSetAccessibleTest.java | 2 +- + .../TrySetAccessibleTest.java | 2 +- + .../modules/cache/CacheTest.java | 2 + + test/jdk/jdk/modules/open/Basic.java | 2 +- + .../AddExportsAndOpensInManifest.java | 3 +- + .../illegalaccess/IllegalAccessTest.java | 452 +++++- + .../modules/illegalaccess/TryAccess.java | 188 +++ + .../illegalaccess/modules/m/module-info.java | 26 + + .../illegalaccess/modules/m/p/Type.java | 31 + + .../patchsrc/java.base/java/lang/Helper.java | 42 + + 26 files changed, 2811 insertions(+), 63 deletions(-) + create mode 100644 src/java.base/share/classes/jdk/internal/module/IllegalAccessLogger.java + create mode 100644 src/java.base/share/classes/jdk/internal/module/IllegalAccessMaps.java + create mode 100644 src/java.base/share/classes/jdk/internal/module/jdk8_packages.dat + create mode 100644 test/jdk/tools/launcher/modules/illegalaccess/TryAccess.java + create mode 100644 test/jdk/tools/launcher/modules/illegalaccess/modules/m/module-info.java + create mode 100644 test/jdk/tools/launcher/modules/illegalaccess/modules/m/p/Type.java + create mode 100644 test/jdk/tools/launcher/modules/illegalaccess/patchsrc/java.base/java/lang/Helper.java + +diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp +index 3587b08f309..9beae74a0a2 100644 +--- a/src/hotspot/share/runtime/arguments.cpp ++++ b/src/hotspot/share/runtime/arguments.cpp +@@ -1333,6 +1333,7 @@ bool Arguments::add_property(const char* prop, PropertyWriteable writeable, Prop + log_info(cds)("optimized module handling: disabled due to incompatible property: %s=%s", key, value); + } + if (strcmp(key, "jdk.module.showModuleResolution") == 0 || ++ strcmp(key, "jdk.module.illegalAccess") == 0 || + strcmp(key, "jdk.module.validation") == 0 || + strcmp(key, "java.system.class.loader") == 0) { + MetaspaceShared::disable_full_module_graph(); +@@ -2064,7 +2065,8 @@ bool Arguments::parse_uintx(const char* value, + } + + bool Arguments::create_module_property(const char* prop_name, const char* prop_value, PropertyInternal internal) { +- assert(is_internal_module_property(prop_name), "unknown module property: '%s'", prop_name); ++ assert(is_internal_module_property(prop_name) || ++ strcmp(prop_name, "jdk.module.illegalAccess") == 0, "unknown module property: '%s'", prop_name); + size_t prop_len = strlen(prop_name) + strlen(prop_value) + 2; + char* property = AllocateHeap(prop_len, mtArguments); + int ret = jio_snprintf(property, prop_len, "%s=%s", prop_name, prop_value); +@@ -2433,9 +2435,10 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, bool* patch_m + return res; + } + } else if (match_option(option, "--illegal-access=", &tail)) { +- char version[256]; +- JDK_Version::jdk(17).to_string(version, sizeof(version)); +- warning("Ignoring option %s; support was removed in %s", option->optionString, version); ++ warning("Option --illegal-access is deprecated and will be removed in a future release."); ++ if (!create_module_property("jdk.module.illegalAccess", tail, ExternalProperty)) { ++ return JNI_ENOMEM; ++ } + // -agentlib and -agentpath + } else if (match_option(option, "-agentlib:", &tail) || + (is_absolute_path = match_option(option, "-agentpath:", &tail))) { +diff --git a/src/java.base/share/classes/java/lang/Module.java b/src/java.base/share/classes/java/lang/Module.java +index ab7d2103850..b63d6e96126 100644 +--- a/src/java.base/share/classes/java/lang/Module.java ++++ b/src/java.base/share/classes/java/lang/Module.java +@@ -56,6 +56,8 @@ import jdk.internal.loader.BuiltinClassLoader; + import jdk.internal.loader.BootLoader; + import jdk.internal.loader.ClassLoaders; + import jdk.internal.misc.CDS; ++import jdk.internal.misc.VM; ++import jdk.internal.module.IllegalAccessLogger; + import jdk.internal.module.ModuleLoaderMap; + import jdk.internal.module.ServicesCatalog; + import jdk.internal.module.Resources; +@@ -932,8 +934,27 @@ public final class Module implements AnnotatedElement { + return; + + // check if the package is already exported/open to other +- if (implIsExportedOrOpen(pn, other, open)) ++ if (implIsExportedOrOpen(pn, other, open)) { ++ ++ // if the package is exported/open for illegal access then we need ++ // to record that it has also been exported/opened reflectively so ++ // that the IllegalAccessLogger doesn't emit a warning. ++ boolean needToAdd = false; ++ if (!other.isNamed()) { ++ IllegalAccessLogger l = IllegalAccessLogger.illegalAccessLogger(); ++ if (l != null) { ++ if (open) { ++ needToAdd = l.isOpenForIllegalAccess(this, pn); ++ } else { ++ needToAdd = l.isExportedForIllegalAccess(this, pn); ++ } ++ } ++ } ++ if (!needToAdd) { ++ // nothing to do + return; ++ } ++ } + + // can only export a package in the module + if (!descriptor.packages().contains(pn)) { +diff --git a/src/java.base/share/classes/java/lang/invoke/MethodHandles.java b/src/java.base/share/classes/java/lang/invoke/MethodHandles.java +index 9dcdef62dad..f71d40d7bfc 100644 +--- a/src/java.base/share/classes/java/lang/invoke/MethodHandles.java ++++ b/src/java.base/share/classes/java/lang/invoke/MethodHandles.java +@@ -28,6 +28,7 @@ package java.lang.invoke; + import jdk.internal.access.SharedSecrets; + import jdk.internal.misc.Unsafe; + import jdk.internal.misc.VM; ++import jdk.internal.module.IllegalAccessLogger; + import jdk.internal.org.objectweb.asm.ClassReader; + import jdk.internal.org.objectweb.asm.Opcodes; + import jdk.internal.org.objectweb.asm.Type; +@@ -262,6 +263,13 @@ public class MethodHandles { + // M2 != M1, set previous lookup class to M1 and drop MODULE access + newPreviousClass = callerClass; + newModes &= ~Lookup.MODULE; ++ ++ if (!callerModule.isNamed() && targetModule.isNamed()) { ++ IllegalAccessLogger logger = IllegalAccessLogger.illegalAccessLogger(); ++ if (logger != null) { ++ logger.logIfOpenedForIllegalAccess(caller, targetClass); ++ } ++ } + } + return Lookup.newLookup(targetClass, newPreviousClass, newModes); + } +diff --git a/src/java.base/share/classes/java/lang/reflect/AccessibleObject.java b/src/java.base/share/classes/java/lang/reflect/AccessibleObject.java +index 19dbce14b75..3813eddf3d7 100644 +--- a/src/java.base/share/classes/java/lang/reflect/AccessibleObject.java ++++ b/src/java.base/share/classes/java/lang/reflect/AccessibleObject.java +@@ -32,6 +32,7 @@ import java.security.AccessController; + + import jdk.internal.access.SharedSecrets; + import jdk.internal.misc.VM; ++import jdk.internal.module.IllegalAccessLogger; + import jdk.internal.reflect.CallerSensitive; + import jdk.internal.reflect.Reflection; + import jdk.internal.reflect.ReflectionFactory; +@@ -324,6 +325,7 @@ public class AccessibleObject implements AnnotatedElement { + if (isClassPublic && declaringModule.isExported(pn, callerModule)) { + // member is public + if (Modifier.isPublic(modifiers)) { ++ logIfExportedForIllegalAccess(caller, declaringClass); + return true; + } + +@@ -331,12 +333,14 @@ public class AccessibleObject implements AnnotatedElement { + if (Modifier.isProtected(modifiers) + && Modifier.isStatic(modifiers) + && isSubclassOf(caller, declaringClass)) { ++ logIfExportedForIllegalAccess(caller, declaringClass); + return true; + } + } + + // package is open to caller + if (declaringModule.isOpen(pn, callerModule)) { ++ logIfOpenedForIllegalAccess(caller, declaringClass); + return true; + } + +@@ -370,6 +374,30 @@ public class AccessibleObject implements AnnotatedElement { + return false; + } + ++ private void logIfOpenedForIllegalAccess(Class caller, Class declaringClass) { ++ Module callerModule = caller.getModule(); ++ Module targetModule = declaringClass.getModule(); ++ // callerModule is null during early startup ++ if (callerModule != null && !callerModule.isNamed() && targetModule.isNamed()) { ++ IllegalAccessLogger logger = IllegalAccessLogger.illegalAccessLogger(); ++ if (logger != null) { ++ logger.logIfOpenedForIllegalAccess(caller, declaringClass, this::toShortString); ++ } ++ } ++ } ++ ++ private void logIfExportedForIllegalAccess(Class caller, Class declaringClass) { ++ Module callerModule = caller.getModule(); ++ Module targetModule = declaringClass.getModule(); ++ // callerModule is null during early startup ++ if (callerModule != null && !callerModule.isNamed() && targetModule.isNamed()) { ++ IllegalAccessLogger logger = IllegalAccessLogger.illegalAccessLogger(); ++ if (logger != null) { ++ logger.logIfExportedForIllegalAccess(caller, declaringClass, this::toShortString); ++ } ++ } ++ } ++ + /** + * Returns a short descriptive string to describe this object in log messages. + */ +@@ -717,6 +745,9 @@ public class AccessibleObject implements AnnotatedElement { + return false; + } + ++ // access okay ++ logIfExportedForIllegalAccess(caller, memberClass); ++ + // Success: Update the cache. + Object cache = (targetClass != null + && Modifier.isProtected(modifiers) +diff --git a/src/java.base/share/classes/jdk/internal/module/ExplodedSystemModules.java b/src/java.base/share/classes/jdk/internal/module/ExplodedSystemModules.java +index c276647e3b1..e44a407dcb8 100644 +--- a/src/java.base/share/classes/jdk/internal/module/ExplodedSystemModules.java ++++ b/src/java.base/share/classes/jdk/internal/module/ExplodedSystemModules.java +@@ -68,4 +68,14 @@ class ExplodedSystemModules implements SystemModules { + public Map> moduleReads() { + throw new InternalError(); + } ++ ++ @Override ++ public Map> concealedPackagesToOpen() { ++ return Map.of(); ++ } ++ ++ @Override ++ public Map> exportedPackagesToOpen() { ++ return Map.of(); ++ } + } +diff --git a/src/java.base/share/classes/jdk/internal/module/IllegalAccessLogger.java b/src/java.base/share/classes/jdk/internal/module/IllegalAccessLogger.java +new file mode 100644 +index 00000000000..ebbcffd77d9 +--- /dev/null ++++ b/src/java.base/share/classes/jdk/internal/module/IllegalAccessLogger.java +@@ -0,0 +1,407 @@ ++/* ++ * Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. Oracle designates this ++ * particular file as subject to the "Classpath" exception as provided ++ * by Oracle in the LICENSE file that accompanied this code. ++ * ++ * This code 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 ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++package jdk.internal.module; ++ ++import java.io.PrintStream; ++import java.lang.invoke.MethodHandles; ++import java.net.URL; ++import java.security.AccessController; ++import java.security.CodeSource; ++import java.security.PrivilegedAction; ++import java.security.ProtectionDomain; ++import java.util.HashMap; ++import java.util.LinkedHashMap; ++import java.util.List; ++import java.util.Map; ++import java.util.Objects; ++import java.util.Set; ++import java.util.StringJoiner; ++import java.util.WeakHashMap; ++import java.util.function.Supplier; ++import static java.util.Collections.*; ++ ++import jdk.internal.access.JavaLangAccess; ++import jdk.internal.access.SharedSecrets; ++ ++/** ++ * Supports logging of access to members of exported and concealed packages ++ * that are opened to code in unnamed modules for illegal access. ++ */ ++ ++public final class IllegalAccessLogger { ++ ++ /** ++ * Logger modes ++ */ ++ public enum Mode { ++ /** ++ * Prints a warning when an illegal access succeeds and then ++ * discards the logger so that there is no further output. ++ */ ++ ONESHOT, ++ /** ++ * Print warnings when illegal access succeeds ++ */ ++ WARN, ++ /** ++ * Prints warnings and a stack trace when illegal access succeeds ++ */ ++ DEBUG, ++ } ++ ++ /** ++ * A builder for IllegalAccessLogger objects. ++ */ ++ public static class Builder { ++ private final Mode mode; ++ private final PrintStream warningStream; ++ private final Map> moduleToConcealedPackages; ++ private final Map> moduleToExportedPackages; ++ private boolean complete; ++ ++ private void ensureNotComplete() { ++ if (complete) throw new IllegalStateException(); ++ } ++ ++ /** ++ * Creates a builder. ++ */ ++ public Builder(Mode mode, PrintStream warningStream) { ++ this.mode = mode; ++ this.warningStream = warningStream; ++ this.moduleToConcealedPackages = new HashMap<>(); ++ this.moduleToExportedPackages = new HashMap<>(); ++ } ++ ++ /** ++ * Adding logging of reflective-access to any member of a type in ++ * otherwise concealed packages. ++ */ ++ public Builder logAccessToConcealedPackages(Module m, Set packages) { ++ ensureNotComplete(); ++ moduleToConcealedPackages.put(m, unmodifiableSet(packages)); ++ return this; ++ } ++ ++ /** ++ * Adding logging of reflective-access to non-public members/types in ++ * otherwise exported (not open) packages. ++ */ ++ public Builder logAccessToExportedPackages(Module m, Set packages) { ++ ensureNotComplete(); ++ moduleToExportedPackages.put(m, unmodifiableSet(packages)); ++ return this; ++ } ++ ++ /** ++ * Builds the IllegalAccessLogger and sets it as the system-wide logger. ++ */ ++ public void complete() { ++ Map> map1 = unmodifiableMap(moduleToConcealedPackages); ++ Map> map2 = unmodifiableMap(moduleToExportedPackages); ++ logger = new IllegalAccessLogger(mode, warningStream, map1, map2); ++ complete = true; ++ } ++ } ++ ++ // need access to java.lang.Module ++ private static final JavaLangAccess JLA = SharedSecrets.getJavaLangAccess(); ++ ++ // system-wide IllegalAccessLogger ++ private static volatile IllegalAccessLogger logger; ++ ++ // logger mode ++ private final Mode mode; ++ ++ // the print stream to send the warnings ++ private final PrintStream warningStream; ++ ++ // module -> packages open for illegal access ++ private final Map> moduleToConcealedPackages; ++ private final Map> moduleToExportedPackages; ++ ++ // caller -> usages ++ private final Map, Usages> callerToUsages = new WeakHashMap<>(); ++ ++ private IllegalAccessLogger(Mode mode, ++ PrintStream warningStream, ++ Map> moduleToConcealedPackages, ++ Map> moduleToExportedPackages) ++ { ++ this.mode = mode; ++ this.warningStream = warningStream; ++ this.moduleToConcealedPackages = moduleToConcealedPackages; ++ this.moduleToExportedPackages = moduleToExportedPackages; ++ } ++ ++ /** ++ * Returns the system-wide IllegalAccessLogger or {@code null} if there is ++ * no logger. ++ */ ++ public static IllegalAccessLogger illegalAccessLogger() { ++ return logger; ++ } ++ ++ /** ++ * Returns true if the module exports a concealed package for illegal ++ * access. ++ */ ++ public boolean isExportedForIllegalAccess(Module module, String pn) { ++ Set packages = moduleToConcealedPackages.get(module); ++ if (packages != null && packages.contains(pn)) ++ return true; ++ return false; ++ } ++ ++ /** ++ * Returns true if the module opens a concealed or exported package for ++ * illegal access. ++ */ ++ public boolean isOpenForIllegalAccess(Module module, String pn) { ++ if (isExportedForIllegalAccess(module, pn)) ++ return true; ++ Set packages = moduleToExportedPackages.get(module); ++ if (packages != null && packages.contains(pn)) ++ return true; ++ return false; ++ } ++ ++ /** ++ * Logs access to the member of a target class by a caller class if the class ++ * is in a package that is exported for illegal access. ++ * ++ * The {@code whatSupplier} supplies the message that describes the member. ++ */ ++ public void logIfExportedForIllegalAccess(Class caller, ++ Class target, ++ Supplier whatSupplier) { ++ Module targetModule = target.getModule(); ++ String targetPackage = target.getPackageName(); ++ if (isExportedForIllegalAccess(targetModule, targetPackage)) { ++ Module callerModule = caller.getModule(); ++ if (!JLA.isReflectivelyExported(targetModule, targetPackage, callerModule)) { ++ log(caller, whatSupplier.get()); ++ } ++ } ++ } ++ ++ /** ++ * Logs access to the member of a target class by a caller class if the class ++ * is in a package that is opened for illegal access. ++ * ++ * The {@code what} parameter supplies the message that describes the member. ++ */ ++ public void logIfOpenedForIllegalAccess(Class caller, ++ Class target, ++ Supplier whatSupplier) { ++ Module targetModule = target.getModule(); ++ String targetPackage = target.getPackageName(); ++ if (isOpenForIllegalAccess(targetModule, targetPackage)) { ++ Module callerModule = caller.getModule(); ++ if (!JLA.isReflectivelyOpened(targetModule, targetPackage, callerModule)) { ++ log(caller, whatSupplier.get()); ++ } ++ } ++ } ++ ++ /** ++ * Logs access by caller lookup if the target class is in a package that is ++ * opened for illegal access. ++ */ ++ public void logIfOpenedForIllegalAccess(MethodHandles.Lookup caller, Class target) { ++ Module targetModule = target.getModule(); ++ String targetPackage = target.getPackageName(); ++ if (isOpenForIllegalAccess(targetModule, targetPackage)) { ++ Class callerClass = caller.lookupClass(); ++ Module callerModule = callerClass.getModule(); ++ if (!JLA.isReflectivelyOpened(targetModule, targetPackage, callerModule)) { ++ URL url = codeSource(callerClass); ++ final String source; ++ if (url == null) { ++ source = callerClass.getName(); ++ } else { ++ source = callerClass.getName() + " (" + url + ")"; ++ } ++ log(callerClass, target.getName(), () -> ++ "WARNING: Illegal reflective access using Lookup on " + source ++ + " to " + target); ++ } ++ } ++ } ++ ++ /** ++ * Logs access by a caller class. The {@code what} parameter describes ++ * the member being accessed. ++ */ ++ private void log(Class caller, String what) { ++ log(caller, what, () -> { ++ URL url = codeSource(caller); ++ String source = caller.getName(); ++ if (url != null) ++ source += " (" + url + ")"; ++ return "WARNING: Illegal reflective access by " + source + " to " + what; ++ }); ++ } ++ ++ /** ++ * Log access by a caller. The {@code what} parameter describes the class or ++ * member that is being accessed. The {@code msgSupplier} supplies the log ++ * message. ++ * ++ * To reduce output, this method only logs the access if it hasn't been seen ++ * previously. "Seen previously" is implemented as a map of caller class -> Usage, ++ * where a Usage is the "what" and a hash of the stack trace. The map has weak ++ * keys so it can be expunged when the caller is GC'ed/unloaded. ++ */ ++ private void log(Class caller, String what, Supplier msgSupplier) { ++ if (mode == Mode.ONESHOT) { ++ synchronized (IllegalAccessLogger.class) { ++ // discard the system wide logger ++ if (logger == null) ++ return; ++ logger = null; ++ } ++ warningStream.println(loudWarning(caller, msgSupplier)); ++ return; ++ } ++ ++ // stack trace without the top-most frames in java.base ++ List stack = StackWalkerHolder.INSTANCE.walk(s -> ++ s.dropWhile(this::isJavaBase) ++ .limit(32) ++ .toList() ++ ); ++ ++ // record usage if this is the first (or not recently recorded) ++ Usage u = new Usage(what, hash(stack)); ++ boolean added; ++ synchronized (this) { ++ added = callerToUsages.computeIfAbsent(caller, k -> new Usages()).add(u); ++ } ++ ++ // print warning if this is the first (or not a recent) usage ++ if (added) { ++ String msg = msgSupplier.get(); ++ if (mode == Mode.DEBUG) { ++ StringBuilder sb = new StringBuilder(msg); ++ stack.forEach(f -> ++ sb.append(System.lineSeparator()).append("\tat " + f) ++ ); ++ msg = sb.toString(); ++ } ++ warningStream.println(msg); ++ } ++ } ++ ++ /** ++ * Returns the code source for the given class or null if there is no code source ++ */ ++ private URL codeSource(Class clazz) { ++ PrivilegedAction pa = clazz::getProtectionDomain; ++ CodeSource cs = AccessController.doPrivileged(pa).getCodeSource(); ++ return (cs != null) ? cs.getLocation() : null; ++ } ++ ++ private String loudWarning(Class caller, Supplier msgSupplier) { ++ StringJoiner sj = new StringJoiner(System.lineSeparator()); ++ sj.add("WARNING: An illegal reflective access operation has occurred"); ++ sj.add(msgSupplier.get()); ++ sj.add("WARNING: Please consider reporting this to the maintainers of " ++ + caller.getName()); ++ sj.add("WARNING: Use --illegal-access=warn to enable warnings of further" ++ + " illegal reflective access operations"); ++ sj.add("WARNING: All illegal access operations will be denied in a" ++ + " future release"); ++ return sj.toString(); ++ } ++ ++ private static class StackWalkerHolder { ++ static final StackWalker INSTANCE; ++ static { ++ PrivilegedAction pa = () -> ++ StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE); ++ INSTANCE = AccessController.doPrivileged(pa); ++ } ++ } ++ ++ /** ++ * Returns true if the stack frame is for a class in java.base. ++ */ ++ private boolean isJavaBase(StackWalker.StackFrame frame) { ++ Module caller = frame.getDeclaringClass().getModule(); ++ return "java.base".equals(caller.getName()); ++ } ++ ++ /** ++ * Computes a hash code for the give stack frames. The hash code is based ++ * on the class, method name, and BCI. ++ */ ++ private int hash(List stack) { ++ int hash = 0; ++ for (StackWalker.StackFrame frame : stack) { ++ hash = (31 * hash) + Objects.hash(frame.getDeclaringClass(), ++ frame.getMethodName(), ++ frame.getByteCodeIndex()); ++ } ++ return hash; ++ } ++ ++ private static class Usage { ++ private final String what; ++ private final int stack; ++ Usage(String what, int stack) { ++ this.what = what; ++ this.stack = stack; ++ } ++ @Override ++ public int hashCode() { ++ return what.hashCode() ^ stack; ++ } ++ @Override ++ public boolean equals(Object ob) { ++ if (ob instanceof Usage) { ++ Usage that = (Usage)ob; ++ return what.equals(that.what) && stack == (that.stack); ++ } else { ++ return false; ++ } ++ } ++ } ++ ++ @SuppressWarnings("serial") ++ private static class Usages extends LinkedHashMap { ++ Usages() { } ++ boolean add(Usage u) { ++ return (putIfAbsent(u, Boolean.TRUE) == null); ++ } ++ @Override ++ protected boolean removeEldestEntry(Map.Entry oldest) { ++ // prevent map growing too big, say where a utility class ++ // is used by generated code to do illegal access ++ return size() > 16; ++ } ++ } ++} +diff --git a/src/java.base/share/classes/jdk/internal/module/IllegalAccessMaps.java b/src/java.base/share/classes/jdk/internal/module/IllegalAccessMaps.java +new file mode 100644 +index 00000000000..bec2841af83 +--- /dev/null ++++ b/src/java.base/share/classes/jdk/internal/module/IllegalAccessMaps.java +@@ -0,0 +1,130 @@ ++/* ++ * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. Oracle designates this ++ * particular file as subject to the "Classpath" exception as provided ++ * by Oracle in the LICENSE file that accompanied this code. ++ * ++ * This code 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 ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++package jdk.internal.module; ++ ++import sun.nio.cs.UTF_8; ++ ++import java.io.BufferedReader; ++import java.io.IOException; ++import java.io.InputStream; ++import java.io.InputStreamReader; ++import java.io.UncheckedIOException; ++import java.lang.module.ModuleDescriptor; ++import java.lang.module.ModuleFinder; ++import java.lang.module.ModuleReference; ++import java.util.HashMap; ++import java.util.HashSet; ++import java.util.Map; ++import java.util.Set; ++ ++/** ++ * Generates the maps of concealed and exported packages to open at run-time. ++ * ++ * This is used at run-time for exploded builds, and at link-time to generate ++ * the maps for the system modules in the run-time image. ++ */ ++ ++public class IllegalAccessMaps { ++ private final Map> concealedPackagesToOpen; ++ private final Map> exportedPackagesToOpen; ++ ++ private IllegalAccessMaps(Map> map1, ++ Map> map2) { ++ this.concealedPackagesToOpen = map1; ++ this.exportedPackagesToOpen = map2; ++ } ++ ++ /** ++ * Returns the map of concealed packages to open. The map key is the ++ * module name, the value is the set of concealed packages to open. ++ */ ++ public Map> concealedPackagesToOpen() { ++ return concealedPackagesToOpen; ++ } ++ ++ /** ++ * Returns the map of exported packages to open. The map key is the ++ * module name, the value is the set of exported packages to open. ++ */ ++ public Map> exportedPackagesToOpen() { ++ return exportedPackagesToOpen; ++ } ++ ++ /** ++ * Generate the maps of module to concealed and exported packages for ++ * the system modules that are observable with the given module finder. ++ */ ++ public static IllegalAccessMaps generate(ModuleFinder finder) { ++ Map map = new HashMap<>(); ++ finder.findAll().stream() ++ .map(ModuleReference::descriptor) ++ .forEach(md -> md.packages().forEach(pn -> map.putIfAbsent(pn, md))); ++ ++ Map> concealedPackagesToOpen = new HashMap<>(); ++ Map> exportedPackagesToOpen = new HashMap<>(); ++ ++ String rn = "jdk8_packages.dat"; ++ InputStream in = IllegalAccessMaps.class.getResourceAsStream(rn); ++ if (in == null) { ++ throw new InternalError(rn + " not found"); ++ } ++ try (BufferedReader br = new BufferedReader( ++ new InputStreamReader(in, UTF_8.INSTANCE))) ++ { ++ br.lines() ++ .filter(line -> !line.isEmpty() && !line.startsWith("#")) ++ .forEach(pn -> { ++ ModuleDescriptor descriptor = map.get(pn); ++ if (descriptor != null && !isOpen(descriptor, pn)) { ++ String name = descriptor.name(); ++ if (isExported(descriptor, pn)) { ++ exportedPackagesToOpen.computeIfAbsent(name, ++ k -> new HashSet<>()).add(pn); ++ } else { ++ concealedPackagesToOpen.computeIfAbsent(name, ++ k -> new HashSet<>()).add(pn); ++ } ++ } ++ }); ++ ++ } catch (IOException ioe) { ++ throw new UncheckedIOException(ioe); ++ } ++ ++ return new IllegalAccessMaps(concealedPackagesToOpen, exportedPackagesToOpen); ++ } ++ ++ private static boolean isExported(ModuleDescriptor descriptor, String pn) { ++ return descriptor.exports() ++ .stream() ++ .anyMatch(e -> e.source().equals(pn) && !e.isQualified()); ++ } ++ ++ private static boolean isOpen(ModuleDescriptor descriptor, String pn) { ++ return descriptor.opens() ++ .stream() ++ .anyMatch(e -> e.source().equals(pn) && !e.isQualified()); ++ } ++} +diff --git a/src/java.base/share/classes/jdk/internal/module/ModuleBootstrap.java b/src/java.base/share/classes/jdk/internal/module/ModuleBootstrap.java +index 37abc9819a9..e42a93aa0c4 100644 +--- a/src/java.base/share/classes/jdk/internal/module/ModuleBootstrap.java ++++ b/src/java.base/share/classes/jdk/internal/module/ModuleBootstrap.java +@@ -148,6 +148,8 @@ public final class ModuleBootstrap { + getProperty("jdk.module.addreads.0") == null && // --add-reads + getProperty("jdk.module.addexports.0") == null && // --add-exports + getProperty("jdk.module.addopens.0") == null; // --add-opens ++ getProperty("jdk.module.addopens.0") == null && // --add-opens ++ getProperty("jdk.module.illegalAccess") == null; // --illegal-access + } + + /** +@@ -188,6 +190,7 @@ public final class ModuleBootstrap { + String mainModule = System.getProperty("jdk.module.main"); + Set addModules = addModules(); + Set limitModules = limitModules(); ++ String illegalAccess = getAndRemoveProperty("jdk.module.illegalAccess"); + + PrintStream traceOutput = null; + String trace = getAndRemoveProperty("jdk.module.showModuleResolution"); +@@ -219,7 +222,8 @@ public final class ModuleBootstrap { + && !haveModulePath + && addModules.isEmpty() + && limitModules.isEmpty() +- && !isPatched) { ++ && !isPatched ++ && illegalAccess == null) { + systemModuleFinder = archivedModuleGraph.finder(); + hasSplitPackages = archivedModuleGraph.hasSplitPackages(); + hasIncubatorModules = archivedModuleGraph.hasIncubatorModules(); +@@ -454,12 +458,18 @@ public final class ModuleBootstrap { + checkIncubatingStatus(cf); + } + +- // --add-reads, --add-exports/--add-opens ++ // --add-reads, --add-exports/--add-opens, and --illegal-access + addExtraReads(bootLayer); + boolean extraExportsOrOpens = addExtraExportsAndOpens(bootLayer); + +- // add enable native access +- addEnableNativeAccess(bootLayer); ++ if (illegalAccess != null) { ++ assert systemModules != null; ++ addIllegalAccess(illegalAccess, ++ systemModules, ++ upgradeModulePath, ++ bootLayer, ++ extraExportsOrOpens); ++ } + + Counters.add("jdk.module.boot.7.adjustModulesTime"); + +@@ -773,44 +783,93 @@ public final class ModuleBootstrap { + } + + /** +- * Process the --enable-native-access option to grant access to restricted methods to selected modules. ++ * Process the --illegal-access option to open packages of system modules ++ * in the boot layer to code in unnamed modules. + */ +- private static void addEnableNativeAccess(ModuleLayer layer) { +- for (String name : decodeEnableNativeAccess()) { +- if (name.equals("ALL-UNNAMED")) { +- JLA.addEnableNativeAccessAllUnnamed(); +- } else { +- Optional module = layer.findModule(name); +- if (module.isPresent()) { +- JLA.addEnableNativeAccess(module.get()); +- } else { +- warnUnknownModule(ENABLE_NATIVE_ACCESS, name); +- } ++ private static void addIllegalAccess(String illegalAccess, ++ SystemModules systemModules, ++ ModuleFinder upgradeModulePath, ++ ModuleLayer bootLayer, ++ boolean extraExportsOrOpens) { ++ ++ if (illegalAccess.equals("deny")) ++ return; // nothing to do ++ ++ IllegalAccessLogger.Mode mode = switch (illegalAccess) { ++ case "permit" -> IllegalAccessLogger.Mode.ONESHOT; ++ case "warn" -> IllegalAccessLogger.Mode.WARN; ++ case "debug" -> IllegalAccessLogger.Mode.DEBUG; ++ default -> { ++ fail("Value specified to --illegal-access not recognized:" ++ + " '" + illegalAccess + "'"); ++ yield null; + } +- } +- } ++ }; + + /** + * Returns the set of module names specified by --enable-native-access options. + */ +- private static Set decodeEnableNativeAccess() { +- String prefix = "jdk.module.enable.native.access."; +- int index = 0; +- // the system property is removed after decoding +- String value = getAndRemoveProperty(prefix + index); +- Set modules = new HashSet<>(); +- if (value == null) { +- return modules; ++ var builder = new IllegalAccessLogger.Builder(mode, System.err); ++ Map> concealedPackagesToOpen = systemModules.concealedPackagesToOpen(); ++ Map> exportedPackagesToOpen = systemModules.exportedPackagesToOpen(); ++ if (concealedPackagesToOpen.isEmpty() && exportedPackagesToOpen.isEmpty()) { ++ // need to generate (exploded build) ++ IllegalAccessMaps maps = IllegalAccessMaps.generate(limitedFinder()); ++ concealedPackagesToOpen = maps.concealedPackagesToOpen(); ++ exportedPackagesToOpen = maps.exportedPackagesToOpen(); + } +- while (value != null) { +- for (String s : value.split(",")) { +- if (!s.isEmpty()) +- modules.add(s); ++ ++ // open specific packages in the system modules ++ Set emptySet = Set.of(); ++ for (Module m : bootLayer.modules()) { ++ ModuleDescriptor descriptor = m.getDescriptor(); ++ String name = m.getName(); ++ ++ // skip open modules ++ if (descriptor.isOpen()) { ++ continue; ++ // skip modules loaded from the upgrade module path ++ if (upgradeModulePath != null ++ && upgradeModulePath.find(name).isPresent()) { ++ continue; + } +- index++; +- value = getAndRemoveProperty(prefix + index); ++ ++ Set concealedPackages = concealedPackagesToOpen.getOrDefault(name, emptySet); ++ Set exportedPackages = exportedPackagesToOpen.getOrDefault(name, emptySet); ++ ++ // refresh the set of concealed and exported packages if needed ++ if (extraExportsOrOpens) { ++ concealedPackages = new HashSet<>(concealedPackages); ++ exportedPackages = new HashSet<>(exportedPackages); ++ Iterator iterator = concealedPackages.iterator(); ++ while (iterator.hasNext()) { ++ String pn = iterator.next(); ++ if (m.isExported(pn, BootLoader.getUnnamedModule())) { ++ // concealed package is exported to ALL-UNNAMED ++ iterator.remove(); ++ exportedPackages.add(pn); ++ } ++ } ++ iterator = exportedPackages.iterator(); ++ while (iterator.hasNext()) { ++ String pn = iterator.next(); ++ if (m.isOpen(pn, BootLoader.getUnnamedModule())) { ++ // exported package is opened to ALL-UNNAMED ++ iterator.remove(); ++ } ++ } ++ } ++ ++ // log reflective access to all types in concealed packages ++ builder.logAccessToConcealedPackages(m, concealedPackages); ++ ++ // log reflective access to non-public members/types in exported packages ++ builder.logAccessToExportedPackages(m, exportedPackages); ++ ++ // open the packages to unnamed modules ++ JLA.addOpensToAllUnnamed(m, concealedPackages, exportedPackages); + } +- return modules; ++ builder.complete(); + } + + /** +diff --git a/src/java.base/share/classes/jdk/internal/module/SystemModules.java b/src/java.base/share/classes/jdk/internal/module/SystemModules.java +index 4c74068acc8..1d2ee0a45b4 100644 +--- a/src/java.base/share/classes/jdk/internal/module/SystemModules.java ++++ b/src/java.base/share/classes/jdk/internal/module/SystemModules.java +@@ -83,4 +83,16 @@ interface SystemModules { + * by this SystemModules object. + */ + Map> moduleReads(); ++ ++ /** ++ * Returns the map of module concealed packages to open. The map key is the ++ * module name, the value is the set of concealed packages to open. ++ */ ++ Map> concealedPackagesToOpen(); ++ ++ /** ++ * Returns the map of module exported packages to open. The map key is the ++ * module name, the value is the set of exported packages to open. ++ */ ++ Map> exportedPackagesToOpen(); + } +diff --git a/src/java.base/share/classes/jdk/internal/module/jdk8_packages.dat b/src/java.base/share/classes/jdk/internal/module/jdk8_packages.dat +new file mode 100644 +index 00000000000..2774f2bb492 +--- /dev/null ++++ b/src/java.base/share/classes/jdk/internal/module/jdk8_packages.dat +@@ -0,0 +1,1340 @@ ++# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. ++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++# ++# This code is free software; you can redistribute it and/or modify it ++# under the terms of the GNU General Public License version 2 only, as ++# published by the Free Software Foundation. Oracle designates this ++# particular file as subject to the "Classpath" exception as provided ++# by Oracle in the LICENSE file that accompanied this code. ++# ++# This code 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 ++# version 2 for more details (a copy is included in the LICENSE file that ++# accompanied this code). ++# ++# You should have received a copy of the GNU General Public License version ++# 2 along with this work; if not, write to the Free Software Foundation, ++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++# ++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++# or visit www.oracle.com if you need additional information or have any ++# questions. ++# ++apple.applescript ++apple.laf ++apple.launcher ++apple.security ++com.apple.concurrent ++com.apple.eawt ++com.apple.eawt.event ++com.apple.eio ++com.apple.laf ++com.apple.laf.resources ++com.oracle.jrockit.jfr ++com.oracle.jrockit.jfr.client ++com.oracle.jrockit.jfr.management ++com.oracle.security.ucrypto ++com.oracle.util ++com.oracle.webservices.internal.api ++com.oracle.webservices.internal.api.databinding ++com.oracle.webservices.internal.api.message ++com.oracle.webservices.internal.impl.encoding ++com.oracle.webservices.internal.impl.internalspi.encoding ++com.oracle.xmlns.internal.webservices.jaxws_databinding ++com.sun.accessibility.internal.resources ++com.sun.activation.registries ++com.sun.awt ++com.sun.beans ++com.sun.beans.decoder ++com.sun.beans.editors ++com.sun.beans.finder ++com.sun.beans.infos ++com.sun.beans.util ++com.sun.codemodel.internal ++com.sun.codemodel.internal.fmt ++com.sun.codemodel.internal.util ++com.sun.codemodel.internal.writer ++com.sun.corba.se.impl.activation ++com.sun.corba.se.impl.copyobject ++com.sun.corba.se.impl.corba ++com.sun.corba.se.impl.dynamicany ++com.sun.corba.se.impl.encoding ++com.sun.corba.se.impl.interceptors ++com.sun.corba.se.impl.io ++com.sun.corba.se.impl.ior ++com.sun.corba.se.impl.ior.iiop ++com.sun.corba.se.impl.javax.rmi ++com.sun.corba.se.impl.javax.rmi.CORBA ++com.sun.corba.se.impl.legacy.connection ++com.sun.corba.se.impl.logging ++com.sun.corba.se.impl.monitoring ++com.sun.corba.se.impl.naming.cosnaming ++com.sun.corba.se.impl.naming.namingutil ++com.sun.corba.se.impl.naming.pcosnaming ++com.sun.corba.se.impl.oa ++com.sun.corba.se.impl.oa.poa ++com.sun.corba.se.impl.oa.toa ++com.sun.corba.se.impl.orb ++com.sun.corba.se.impl.orbutil ++com.sun.corba.se.impl.orbutil.closure ++com.sun.corba.se.impl.orbutil.concurrent ++com.sun.corba.se.impl.orbutil.fsm ++com.sun.corba.se.impl.orbutil.graph ++com.sun.corba.se.impl.orbutil.threadpool ++com.sun.corba.se.impl.presentation.rmi ++com.sun.corba.se.impl.protocol ++com.sun.corba.se.impl.protocol.giopmsgheaders ++com.sun.corba.se.impl.resolver ++com.sun.corba.se.impl.transport ++com.sun.corba.se.impl.util ++com.sun.corba.se.internal.CosNaming ++com.sun.corba.se.internal.Interceptors ++com.sun.corba.se.internal.POA ++com.sun.corba.se.internal.corba ++com.sun.corba.se.internal.iiop ++com.sun.corba.se.org.omg.CORBA ++com.sun.corba.se.pept.broker ++com.sun.corba.se.pept.encoding ++com.sun.corba.se.pept.protocol ++com.sun.corba.se.pept.transport ++com.sun.corba.se.spi.activation ++com.sun.corba.se.spi.activation.InitialNameServicePackage ++com.sun.corba.se.spi.activation.LocatorPackage ++com.sun.corba.se.spi.activation.RepositoryPackage ++com.sun.corba.se.spi.copyobject ++com.sun.corba.se.spi.encoding ++com.sun.corba.se.spi.extension ++com.sun.corba.se.spi.ior ++com.sun.corba.se.spi.ior.iiop ++com.sun.corba.se.spi.legacy.connection ++com.sun.corba.se.spi.legacy.interceptor ++com.sun.corba.se.spi.logging ++com.sun.corba.se.spi.monitoring ++com.sun.corba.se.spi.oa ++com.sun.corba.se.spi.orb ++com.sun.corba.se.spi.orbutil.closure ++com.sun.corba.se.spi.orbutil.fsm ++com.sun.corba.se.spi.orbutil.proxy ++com.sun.corba.se.spi.orbutil.threadpool ++com.sun.corba.se.spi.presentation.rmi ++com.sun.corba.se.spi.protocol ++com.sun.corba.se.spi.resolver ++com.sun.corba.se.spi.servicecontext ++com.sun.corba.se.spi.transport ++com.sun.crypto.provider ++com.sun.demo.jvmti.hprof ++com.sun.deploy.uitoolkit.impl.fx ++com.sun.deploy.uitoolkit.impl.fx.ui ++com.sun.deploy.uitoolkit.impl.fx.ui.resources ++com.sun.glass.events ++com.sun.glass.events.mac ++com.sun.glass.ui ++com.sun.glass.ui.delegate ++com.sun.glass.ui.gtk ++com.sun.glass.ui.mac ++com.sun.glass.ui.win ++com.sun.glass.utils ++com.sun.image.codec.jpeg ++com.sun.imageio.plugins.bmp ++com.sun.imageio.plugins.common ++com.sun.imageio.plugins.gif ++com.sun.imageio.plugins.jpeg ++com.sun.imageio.plugins.png ++com.sun.imageio.plugins.wbmp ++com.sun.imageio.spi ++com.sun.imageio.stream ++com.sun.istack.internal ++com.sun.istack.internal.localization ++com.sun.istack.internal.logging ++com.sun.istack.internal.tools ++com.sun.jarsigner ++com.sun.java.accessibility ++com.sun.java.accessibility.util ++com.sun.java.accessibility.util.java.awt ++com.sun.java.browser.dom ++com.sun.java.browser.net ++com.sun.java.swing ++com.sun.java.swing.plaf.gtk ++com.sun.java.swing.plaf.gtk.resources ++com.sun.java.swing.plaf.motif ++com.sun.java.swing.plaf.motif.resources ++com.sun.java.swing.plaf.nimbus ++com.sun.java.swing.plaf.windows ++com.sun.java.swing.plaf.windows.resources ++com.sun.java.util.jar.pack ++com.sun.java_cup.internal.runtime ++com.sun.javadoc ++com.sun.javafx ++com.sun.javafx.animation ++com.sun.javafx.applet ++com.sun.javafx.application ++com.sun.javafx.beans ++com.sun.javafx.beans.event ++com.sun.javafx.binding ++com.sun.javafx.charts ++com.sun.javafx.collections ++com.sun.javafx.css ++com.sun.javafx.css.converters ++com.sun.javafx.css.parser ++com.sun.javafx.cursor ++com.sun.javafx.effect ++com.sun.javafx.embed ++com.sun.javafx.event ++com.sun.javafx.font ++com.sun.javafx.font.coretext ++com.sun.javafx.font.directwrite ++com.sun.javafx.font.freetype ++com.sun.javafx.font.t2k ++com.sun.javafx.fxml ++com.sun.javafx.fxml.builder ++com.sun.javafx.fxml.expression ++com.sun.javafx.geom ++com.sun.javafx.geom.transform ++com.sun.javafx.geometry ++com.sun.javafx.iio ++com.sun.javafx.iio.bmp ++com.sun.javafx.iio.common ++com.sun.javafx.iio.gif ++com.sun.javafx.iio.ios ++com.sun.javafx.iio.jpeg ++com.sun.javafx.iio.png ++com.sun.javafx.image ++com.sun.javafx.image.impl ++com.sun.javafx.jmx ++com.sun.javafx.logging ++com.sun.javafx.media ++com.sun.javafx.menu ++com.sun.javafx.perf ++com.sun.javafx.print ++com.sun.javafx.property ++com.sun.javafx.property.adapter ++com.sun.javafx.robot ++com.sun.javafx.robot.impl ++com.sun.javafx.runtime ++com.sun.javafx.runtime.async ++com.sun.javafx.runtime.eula ++com.sun.javafx.scene ++com.sun.javafx.scene.control ++com.sun.javafx.scene.control.behavior ++com.sun.javafx.scene.control.skin ++com.sun.javafx.scene.control.skin.resources ++com.sun.javafx.scene.input ++com.sun.javafx.scene.layout.region ++com.sun.javafx.scene.paint ++com.sun.javafx.scene.shape ++com.sun.javafx.scene.text ++com.sun.javafx.scene.transform ++com.sun.javafx.scene.traversal ++com.sun.javafx.scene.web ++com.sun.javafx.scene.web.behavior ++com.sun.javafx.scene.web.skin ++com.sun.javafx.sg.prism ++com.sun.javafx.sg.prism.web ++com.sun.javafx.stage ++com.sun.javafx.text ++com.sun.javafx.tk ++com.sun.javafx.tk.quantum ++com.sun.javafx.util ++com.sun.javafx.webkit ++com.sun.javafx.webkit.drt ++com.sun.javafx.webkit.prism ++com.sun.javafx.webkit.prism.theme ++com.sun.javafx.webkit.theme ++com.sun.jdi ++com.sun.jdi.connect ++com.sun.jdi.connect.spi ++com.sun.jdi.event ++com.sun.jdi.request ++com.sun.jmx.defaults ++com.sun.jmx.interceptor ++com.sun.jmx.mbeanserver ++com.sun.jmx.remote.internal ++com.sun.jmx.remote.protocol.iiop ++com.sun.jmx.remote.protocol.rmi ++com.sun.jmx.remote.security ++com.sun.jmx.remote.util ++com.sun.jmx.snmp ++com.sun.jmx.snmp.IPAcl ++com.sun.jmx.snmp.agent ++com.sun.jmx.snmp.daemon ++com.sun.jmx.snmp.defaults ++com.sun.jmx.snmp.internal ++com.sun.jmx.snmp.mpm ++com.sun.jmx.snmp.tasks ++com.sun.jndi.cosnaming ++com.sun.jndi.dns ++com.sun.jndi.ldap ++com.sun.jndi.ldap.ext ++com.sun.jndi.ldap.pool ++com.sun.jndi.ldap.sasl ++com.sun.jndi.rmi.registry ++com.sun.jndi.toolkit.corba ++com.sun.jndi.toolkit.ctx ++com.sun.jndi.toolkit.dir ++com.sun.jndi.toolkit.url ++com.sun.jndi.url.corbaname ++com.sun.jndi.url.dns ++com.sun.jndi.url.iiop ++com.sun.jndi.url.iiopname ++com.sun.jndi.url.ldap ++com.sun.jndi.url.ldaps ++com.sun.jndi.url.rmi ++com.sun.management ++com.sun.management.jmx ++com.sun.media.jfxmedia ++com.sun.media.jfxmedia.control ++com.sun.media.jfxmedia.effects ++com.sun.media.jfxmedia.events ++com.sun.media.jfxmedia.locator ++com.sun.media.jfxmedia.logging ++com.sun.media.jfxmedia.track ++com.sun.media.jfxmediaimpl ++com.sun.media.jfxmediaimpl.platform ++com.sun.media.jfxmediaimpl.platform.gstreamer ++com.sun.media.jfxmediaimpl.platform.ios ++com.sun.media.jfxmediaimpl.platform.java ++com.sun.media.jfxmediaimpl.platform.osx ++com.sun.media.sound ++com.sun.naming.internal ++com.sun.net.httpserver ++com.sun.net.httpserver.spi ++com.sun.net.ssl ++com.sun.net.ssl.internal.ssl ++com.sun.net.ssl.internal.www.protocol.https ++com.sun.nio.file ++com.sun.nio.sctp ++com.sun.nio.zipfs ++com.sun.openpisces ++com.sun.org.apache.bcel.internal ++com.sun.org.apache.bcel.internal.classfile ++com.sun.org.apache.bcel.internal.generic ++com.sun.org.apache.bcel.internal.util ++com.sun.org.apache.regexp.internal ++com.sun.org.apache.xalan.internal ++com.sun.org.apache.xalan.internal.extensions ++com.sun.org.apache.xalan.internal.lib ++com.sun.org.apache.xalan.internal.res ++com.sun.org.apache.xalan.internal.templates ++com.sun.org.apache.xalan.internal.utils ++com.sun.org.apache.xalan.internal.xslt ++com.sun.org.apache.xalan.internal.xsltc ++com.sun.org.apache.xalan.internal.xsltc.cmdline ++com.sun.org.apache.xalan.internal.xsltc.cmdline.getopt ++com.sun.org.apache.xalan.internal.xsltc.compiler ++com.sun.org.apache.xalan.internal.xsltc.compiler.util ++com.sun.org.apache.xalan.internal.xsltc.dom ++com.sun.org.apache.xalan.internal.xsltc.runtime ++com.sun.org.apache.xalan.internal.xsltc.runtime.output ++com.sun.org.apache.xalan.internal.xsltc.trax ++com.sun.org.apache.xalan.internal.xsltc.util ++com.sun.org.apache.xerces.internal.dom ++com.sun.org.apache.xerces.internal.dom.events ++com.sun.org.apache.xerces.internal.impl ++com.sun.org.apache.xerces.internal.impl.dtd ++com.sun.org.apache.xerces.internal.impl.dtd.models ++com.sun.org.apache.xerces.internal.impl.dv ++com.sun.org.apache.xerces.internal.impl.dv.dtd ++com.sun.org.apache.xerces.internal.impl.dv.util ++com.sun.org.apache.xerces.internal.impl.dv.xs ++com.sun.org.apache.xerces.internal.impl.io ++com.sun.org.apache.xerces.internal.impl.msg ++com.sun.org.apache.xerces.internal.impl.validation ++com.sun.org.apache.xerces.internal.impl.xpath ++com.sun.org.apache.xerces.internal.impl.xpath.regex ++com.sun.org.apache.xerces.internal.impl.xs ++com.sun.org.apache.xerces.internal.impl.xs.identity ++com.sun.org.apache.xerces.internal.impl.xs.models ++com.sun.org.apache.xerces.internal.impl.xs.opti ++com.sun.org.apache.xerces.internal.impl.xs.traversers ++com.sun.org.apache.xerces.internal.impl.xs.util ++com.sun.org.apache.xerces.internal.jaxp ++com.sun.org.apache.xerces.internal.jaxp.datatype ++com.sun.org.apache.xerces.internal.jaxp.validation ++com.sun.org.apache.xerces.internal.parsers ++com.sun.org.apache.xerces.internal.util ++com.sun.org.apache.xerces.internal.utils ++com.sun.org.apache.xerces.internal.xinclude ++com.sun.org.apache.xerces.internal.xni ++com.sun.org.apache.xerces.internal.xni.grammars ++com.sun.org.apache.xerces.internal.xni.parser ++com.sun.org.apache.xerces.internal.xpointer ++com.sun.org.apache.xerces.internal.xs ++com.sun.org.apache.xerces.internal.xs.datatypes ++com.sun.org.apache.xml.internal.dtm ++com.sun.org.apache.xml.internal.dtm.ref ++com.sun.org.apache.xml.internal.dtm.ref.dom2dtm ++com.sun.org.apache.xml.internal.dtm.ref.sax2dtm ++com.sun.org.apache.xml.internal.res ++com.sun.org.apache.xml.internal.resolver ++com.sun.org.apache.xml.internal.resolver.helpers ++com.sun.org.apache.xml.internal.resolver.readers ++com.sun.org.apache.xml.internal.resolver.tools ++com.sun.org.apache.xml.internal.security ++com.sun.org.apache.xml.internal.security.algorithms ++com.sun.org.apache.xml.internal.security.algorithms.implementations ++com.sun.org.apache.xml.internal.security.c14n ++com.sun.org.apache.xml.internal.security.c14n.helper ++com.sun.org.apache.xml.internal.security.c14n.implementations ++com.sun.org.apache.xml.internal.security.encryption ++com.sun.org.apache.xml.internal.security.exceptions ++com.sun.org.apache.xml.internal.security.keys ++com.sun.org.apache.xml.internal.security.keys.content ++com.sun.org.apache.xml.internal.security.keys.content.keyvalues ++com.sun.org.apache.xml.internal.security.keys.content.x509 ++com.sun.org.apache.xml.internal.security.keys.keyresolver ++com.sun.org.apache.xml.internal.security.keys.keyresolver.implementations ++com.sun.org.apache.xml.internal.security.keys.storage ++com.sun.org.apache.xml.internal.security.keys.storage.implementations ++com.sun.org.apache.xml.internal.security.signature ++com.sun.org.apache.xml.internal.security.signature.reference ++com.sun.org.apache.xml.internal.security.transforms ++com.sun.org.apache.xml.internal.security.transforms.implementations ++com.sun.org.apache.xml.internal.security.transforms.params ++com.sun.org.apache.xml.internal.security.utils ++com.sun.org.apache.xml.internal.security.utils.resolver ++com.sun.org.apache.xml.internal.security.utils.resolver.implementations ++com.sun.org.apache.xml.internal.serialize ++com.sun.org.apache.xml.internal.serializer ++com.sun.org.apache.xml.internal.serializer.utils ++com.sun.org.apache.xml.internal.utils ++com.sun.org.apache.xml.internal.utils.res ++com.sun.org.apache.xpath.internal ++com.sun.org.apache.xpath.internal.axes ++com.sun.org.apache.xpath.internal.compiler ++com.sun.org.apache.xpath.internal.domapi ++com.sun.org.apache.xpath.internal.functions ++com.sun.org.apache.xpath.internal.jaxp ++com.sun.org.apache.xpath.internal.objects ++com.sun.org.apache.xpath.internal.operations ++com.sun.org.apache.xpath.internal.patterns ++com.sun.org.apache.xpath.internal.res ++com.sun.org.glassfish.external.amx ++com.sun.org.glassfish.external.arc ++com.sun.org.glassfish.external.probe.provider ++com.sun.org.glassfish.external.probe.provider.annotations ++com.sun.org.glassfish.external.statistics ++com.sun.org.glassfish.external.statistics.annotations ++com.sun.org.glassfish.external.statistics.impl ++com.sun.org.glassfish.gmbal ++com.sun.org.glassfish.gmbal.util ++com.sun.org.omg.CORBA ++com.sun.org.omg.CORBA.ValueDefPackage ++com.sun.org.omg.CORBA.portable ++com.sun.org.omg.SendingContext ++com.sun.org.omg.SendingContext.CodeBasePackage ++com.sun.pisces ++com.sun.prism ++com.sun.prism.d3d ++com.sun.prism.es2 ++com.sun.prism.image ++com.sun.prism.impl ++com.sun.prism.impl.packrect ++com.sun.prism.impl.paint ++com.sun.prism.impl.ps ++com.sun.prism.impl.shape ++com.sun.prism.j2d ++com.sun.prism.j2d.paint ++com.sun.prism.j2d.print ++com.sun.prism.paint ++com.sun.prism.ps ++com.sun.prism.shader ++com.sun.prism.shape ++com.sun.prism.sw ++com.sun.rmi.rmid ++com.sun.rowset ++com.sun.rowset.internal ++com.sun.rowset.providers ++com.sun.scenario ++com.sun.scenario.animation ++com.sun.scenario.animation.shared ++com.sun.scenario.effect ++com.sun.scenario.effect.impl ++com.sun.scenario.effect.impl.es2 ++com.sun.scenario.effect.impl.hw ++com.sun.scenario.effect.impl.hw.d3d ++com.sun.scenario.effect.impl.prism ++com.sun.scenario.effect.impl.prism.ps ++com.sun.scenario.effect.impl.prism.sw ++com.sun.scenario.effect.impl.state ++com.sun.scenario.effect.impl.sw ++com.sun.scenario.effect.impl.sw.java ++com.sun.scenario.effect.impl.sw.sse ++com.sun.scenario.effect.light ++com.sun.security.auth ++com.sun.security.auth.callback ++com.sun.security.auth.login ++com.sun.security.auth.module ++com.sun.security.cert.internal.x509 ++com.sun.security.jgss ++com.sun.security.ntlm ++com.sun.security.sasl ++com.sun.security.sasl.digest ++com.sun.security.sasl.gsskerb ++com.sun.security.sasl.ntlm ++com.sun.security.sasl.util ++com.sun.source.doctree ++com.sun.source.tree ++com.sun.source.util ++com.sun.swing.internal.plaf.basic.resources ++com.sun.swing.internal.plaf.metal.resources ++com.sun.swing.internal.plaf.synth.resources ++com.sun.tools.attach ++com.sun.tools.attach.spi ++com.sun.tools.classfile ++com.sun.tools.corba.se.idl ++com.sun.tools.corba.se.idl.constExpr ++com.sun.tools.corba.se.idl.som.cff ++com.sun.tools.corba.se.idl.som.idlemit ++com.sun.tools.corba.se.idl.toJavaPortable ++com.sun.tools.doclets ++com.sun.tools.doclets.formats.html ++com.sun.tools.doclets.formats.html.markup ++com.sun.tools.doclets.formats.html.resources ++com.sun.tools.doclets.internal.toolkit ++com.sun.tools.doclets.internal.toolkit.builders ++com.sun.tools.doclets.internal.toolkit.resources ++com.sun.tools.doclets.internal.toolkit.taglets ++com.sun.tools.doclets.internal.toolkit.util ++com.sun.tools.doclets.internal.toolkit.util.links ++com.sun.tools.doclets.standard ++com.sun.tools.doclint ++com.sun.tools.doclint.resources ++com.sun.tools.example.debug.expr ++com.sun.tools.example.debug.tty ++com.sun.tools.extcheck ++com.sun.tools.hat ++com.sun.tools.hat.internal.model ++com.sun.tools.hat.internal.oql ++com.sun.tools.hat.internal.parser ++com.sun.tools.hat.internal.server ++com.sun.tools.hat.internal.util ++com.sun.tools.internal.jxc ++com.sun.tools.internal.jxc.ap ++com.sun.tools.internal.jxc.api ++com.sun.tools.internal.jxc.api.impl.j2s ++com.sun.tools.internal.jxc.gen.config ++com.sun.tools.internal.jxc.model.nav ++com.sun.tools.internal.ws ++com.sun.tools.internal.ws.api ++com.sun.tools.internal.ws.api.wsdl ++com.sun.tools.internal.ws.processor ++com.sun.tools.internal.ws.processor.generator ++com.sun.tools.internal.ws.processor.model ++com.sun.tools.internal.ws.processor.model.exporter ++com.sun.tools.internal.ws.processor.model.java ++com.sun.tools.internal.ws.processor.model.jaxb ++com.sun.tools.internal.ws.processor.modeler ++com.sun.tools.internal.ws.processor.modeler.annotation ++com.sun.tools.internal.ws.processor.modeler.wsdl ++com.sun.tools.internal.ws.processor.util ++com.sun.tools.internal.ws.resources ++com.sun.tools.internal.ws.spi ++com.sun.tools.internal.ws.util ++com.sun.tools.internal.ws.util.xml ++com.sun.tools.internal.ws.wscompile ++com.sun.tools.internal.ws.wscompile.plugin.at_generated ++com.sun.tools.internal.ws.wsdl.document ++com.sun.tools.internal.ws.wsdl.document.http ++com.sun.tools.internal.ws.wsdl.document.jaxws ++com.sun.tools.internal.ws.wsdl.document.mime ++com.sun.tools.internal.ws.wsdl.document.schema ++com.sun.tools.internal.ws.wsdl.document.soap ++com.sun.tools.internal.ws.wsdl.framework ++com.sun.tools.internal.ws.wsdl.parser ++com.sun.tools.internal.xjc ++com.sun.tools.internal.xjc.addon.accessors ++com.sun.tools.internal.xjc.addon.at_generated ++com.sun.tools.internal.xjc.addon.code_injector ++com.sun.tools.internal.xjc.addon.episode ++com.sun.tools.internal.xjc.addon.locator ++com.sun.tools.internal.xjc.addon.sync ++com.sun.tools.internal.xjc.api ++com.sun.tools.internal.xjc.api.impl.s2j ++com.sun.tools.internal.xjc.api.util ++com.sun.tools.internal.xjc.generator.annotation.spec ++com.sun.tools.internal.xjc.generator.bean ++com.sun.tools.internal.xjc.generator.bean.field ++com.sun.tools.internal.xjc.generator.util ++com.sun.tools.internal.xjc.model ++com.sun.tools.internal.xjc.model.nav ++com.sun.tools.internal.xjc.outline ++com.sun.tools.internal.xjc.reader ++com.sun.tools.internal.xjc.reader.dtd ++com.sun.tools.internal.xjc.reader.dtd.bindinfo ++com.sun.tools.internal.xjc.reader.gbind ++com.sun.tools.internal.xjc.reader.internalizer ++com.sun.tools.internal.xjc.reader.relaxng ++com.sun.tools.internal.xjc.reader.xmlschema ++com.sun.tools.internal.xjc.reader.xmlschema.bindinfo ++com.sun.tools.internal.xjc.reader.xmlschema.ct ++com.sun.tools.internal.xjc.reader.xmlschema.parser ++com.sun.tools.internal.xjc.runtime ++com.sun.tools.internal.xjc.util ++com.sun.tools.internal.xjc.writer ++com.sun.tools.javac ++com.sun.tools.javac.api ++com.sun.tools.javac.code ++com.sun.tools.javac.comp ++com.sun.tools.javac.file ++com.sun.tools.javac.jvm ++com.sun.tools.javac.main ++com.sun.tools.javac.model ++com.sun.tools.javac.nio ++com.sun.tools.javac.parser ++com.sun.tools.javac.processing ++com.sun.tools.javac.resources ++com.sun.tools.javac.sym ++com.sun.tools.javac.tree ++com.sun.tools.javac.util ++com.sun.tools.javadoc ++com.sun.tools.javadoc.api ++com.sun.tools.javadoc.resources ++com.sun.tools.javah ++com.sun.tools.javah.resources ++com.sun.tools.javap ++com.sun.tools.javap.resources ++com.sun.tools.jconsole ++com.sun.tools.jdeps ++com.sun.tools.jdeps.resources ++com.sun.tools.jdi ++com.sun.tools.jdi.resources ++com.sun.tools.script.shell ++com.sun.tracing ++com.sun.tracing.dtrace ++com.sun.webkit ++com.sun.webkit.dom ++com.sun.webkit.event ++com.sun.webkit.graphics ++com.sun.webkit.network ++com.sun.webkit.network.about ++com.sun.webkit.network.data ++com.sun.webkit.perf ++com.sun.webkit.plugin ++com.sun.webkit.text ++com.sun.xml.internal.bind ++com.sun.xml.internal.bind.annotation ++com.sun.xml.internal.bind.api ++com.sun.xml.internal.bind.api.impl ++com.sun.xml.internal.bind.marshaller ++com.sun.xml.internal.bind.unmarshaller ++com.sun.xml.internal.bind.util ++com.sun.xml.internal.bind.v2 ++com.sun.xml.internal.bind.v2.bytecode ++com.sun.xml.internal.bind.v2.model.annotation ++com.sun.xml.internal.bind.v2.model.core ++com.sun.xml.internal.bind.v2.model.impl ++com.sun.xml.internal.bind.v2.model.nav ++com.sun.xml.internal.bind.v2.model.runtime ++com.sun.xml.internal.bind.v2.model.util ++com.sun.xml.internal.bind.v2.runtime ++com.sun.xml.internal.bind.v2.runtime.output ++com.sun.xml.internal.bind.v2.runtime.property ++com.sun.xml.internal.bind.v2.runtime.reflect ++com.sun.xml.internal.bind.v2.runtime.reflect.opt ++com.sun.xml.internal.bind.v2.runtime.unmarshaller ++com.sun.xml.internal.bind.v2.schemagen ++com.sun.xml.internal.bind.v2.schemagen.episode ++com.sun.xml.internal.bind.v2.schemagen.xmlschema ++com.sun.xml.internal.bind.v2.util ++com.sun.xml.internal.dtdparser ++com.sun.xml.internal.fastinfoset ++com.sun.xml.internal.fastinfoset.algorithm ++com.sun.xml.internal.fastinfoset.alphabet ++com.sun.xml.internal.fastinfoset.dom ++com.sun.xml.internal.fastinfoset.org.apache.xerces.util ++com.sun.xml.internal.fastinfoset.sax ++com.sun.xml.internal.fastinfoset.stax ++com.sun.xml.internal.fastinfoset.stax.events ++com.sun.xml.internal.fastinfoset.stax.factory ++com.sun.xml.internal.fastinfoset.stax.util ++com.sun.xml.internal.fastinfoset.tools ++com.sun.xml.internal.fastinfoset.util ++com.sun.xml.internal.fastinfoset.vocab ++com.sun.xml.internal.messaging.saaj ++com.sun.xml.internal.messaging.saaj.client.p2p ++com.sun.xml.internal.messaging.saaj.packaging.mime ++com.sun.xml.internal.messaging.saaj.packaging.mime.internet ++com.sun.xml.internal.messaging.saaj.packaging.mime.util ++com.sun.xml.internal.messaging.saaj.soap ++com.sun.xml.internal.messaging.saaj.soap.dynamic ++com.sun.xml.internal.messaging.saaj.soap.impl ++com.sun.xml.internal.messaging.saaj.soap.name ++com.sun.xml.internal.messaging.saaj.soap.ver1_1 ++com.sun.xml.internal.messaging.saaj.soap.ver1_2 ++com.sun.xml.internal.messaging.saaj.util ++com.sun.xml.internal.messaging.saaj.util.transform ++com.sun.xml.internal.org.jvnet.fastinfoset ++com.sun.xml.internal.org.jvnet.fastinfoset.sax ++com.sun.xml.internal.org.jvnet.fastinfoset.sax.helpers ++com.sun.xml.internal.org.jvnet.fastinfoset.stax ++com.sun.xml.internal.org.jvnet.mimepull ++com.sun.xml.internal.org.jvnet.staxex ++com.sun.xml.internal.rngom.ast.builder ++com.sun.xml.internal.rngom.ast.om ++com.sun.xml.internal.rngom.ast.util ++com.sun.xml.internal.rngom.binary ++com.sun.xml.internal.rngom.binary.visitor ++com.sun.xml.internal.rngom.digested ++com.sun.xml.internal.rngom.dt ++com.sun.xml.internal.rngom.dt.builtin ++com.sun.xml.internal.rngom.nc ++com.sun.xml.internal.rngom.parse ++com.sun.xml.internal.rngom.parse.compact ++com.sun.xml.internal.rngom.parse.host ++com.sun.xml.internal.rngom.parse.xml ++com.sun.xml.internal.rngom.util ++com.sun.xml.internal.rngom.xml.sax ++com.sun.xml.internal.rngom.xml.util ++com.sun.xml.internal.stream ++com.sun.xml.internal.stream.buffer ++com.sun.xml.internal.stream.buffer.sax ++com.sun.xml.internal.stream.buffer.stax ++com.sun.xml.internal.stream.dtd ++com.sun.xml.internal.stream.dtd.nonvalidating ++com.sun.xml.internal.stream.events ++com.sun.xml.internal.stream.util ++com.sun.xml.internal.stream.writers ++com.sun.xml.internal.txw2 ++com.sun.xml.internal.txw2.annotation ++com.sun.xml.internal.txw2.output ++com.sun.xml.internal.ws ++com.sun.xml.internal.ws.addressing ++com.sun.xml.internal.ws.addressing.model ++com.sun.xml.internal.ws.addressing.policy ++com.sun.xml.internal.ws.addressing.v200408 ++com.sun.xml.internal.ws.api ++com.sun.xml.internal.ws.api.addressing ++com.sun.xml.internal.ws.api.client ++com.sun.xml.internal.ws.api.config.management ++com.sun.xml.internal.ws.api.config.management.policy ++com.sun.xml.internal.ws.api.databinding ++com.sun.xml.internal.ws.api.fastinfoset ++com.sun.xml.internal.ws.api.ha ++com.sun.xml.internal.ws.api.handler ++com.sun.xml.internal.ws.api.message ++com.sun.xml.internal.ws.api.message.saaj ++com.sun.xml.internal.ws.api.message.stream ++com.sun.xml.internal.ws.api.model ++com.sun.xml.internal.ws.api.model.soap ++com.sun.xml.internal.ws.api.model.wsdl ++com.sun.xml.internal.ws.api.model.wsdl.editable ++com.sun.xml.internal.ws.api.pipe ++com.sun.xml.internal.ws.api.pipe.helper ++com.sun.xml.internal.ws.api.policy ++com.sun.xml.internal.ws.api.policy.subject ++com.sun.xml.internal.ws.api.server ++com.sun.xml.internal.ws.api.streaming ++com.sun.xml.internal.ws.api.wsdl.parser ++com.sun.xml.internal.ws.api.wsdl.writer ++com.sun.xml.internal.ws.assembler ++com.sun.xml.internal.ws.assembler.dev ++com.sun.xml.internal.ws.assembler.jaxws ++com.sun.xml.internal.ws.binding ++com.sun.xml.internal.ws.client ++com.sun.xml.internal.ws.client.dispatch ++com.sun.xml.internal.ws.client.sei ++com.sun.xml.internal.ws.commons.xmlutil ++com.sun.xml.internal.ws.config.management.policy ++com.sun.xml.internal.ws.config.metro.dev ++com.sun.xml.internal.ws.config.metro.util ++com.sun.xml.internal.ws.db ++com.sun.xml.internal.ws.db.glassfish ++com.sun.xml.internal.ws.developer ++com.sun.xml.internal.ws.dump ++com.sun.xml.internal.ws.encoding ++com.sun.xml.internal.ws.encoding.fastinfoset ++com.sun.xml.internal.ws.encoding.policy ++com.sun.xml.internal.ws.encoding.soap ++com.sun.xml.internal.ws.encoding.soap.streaming ++com.sun.xml.internal.ws.encoding.xml ++com.sun.xml.internal.ws.fault ++com.sun.xml.internal.ws.handler ++com.sun.xml.internal.ws.message ++com.sun.xml.internal.ws.message.jaxb ++com.sun.xml.internal.ws.message.saaj ++com.sun.xml.internal.ws.message.source ++com.sun.xml.internal.ws.message.stream ++com.sun.xml.internal.ws.model ++com.sun.xml.internal.ws.model.soap ++com.sun.xml.internal.ws.model.wsdl ++com.sun.xml.internal.ws.org.objectweb.asm ++com.sun.xml.internal.ws.policy ++com.sun.xml.internal.ws.policy.jaxws ++com.sun.xml.internal.ws.policy.jaxws.spi ++com.sun.xml.internal.ws.policy.privateutil ++com.sun.xml.internal.ws.policy.sourcemodel ++com.sun.xml.internal.ws.policy.sourcemodel.attach ++com.sun.xml.internal.ws.policy.sourcemodel.wspolicy ++com.sun.xml.internal.ws.policy.spi ++com.sun.xml.internal.ws.policy.subject ++com.sun.xml.internal.ws.protocol.soap ++com.sun.xml.internal.ws.protocol.xml ++com.sun.xml.internal.ws.resources ++com.sun.xml.internal.ws.runtime.config ++com.sun.xml.internal.ws.server ++com.sun.xml.internal.ws.server.provider ++com.sun.xml.internal.ws.server.sei ++com.sun.xml.internal.ws.spi ++com.sun.xml.internal.ws.spi.db ++com.sun.xml.internal.ws.streaming ++com.sun.xml.internal.ws.transport ++com.sun.xml.internal.ws.transport.http ++com.sun.xml.internal.ws.transport.http.client ++com.sun.xml.internal.ws.transport.http.server ++com.sun.xml.internal.ws.util ++com.sun.xml.internal.ws.util.exception ++com.sun.xml.internal.ws.util.pipe ++com.sun.xml.internal.ws.util.xml ++com.sun.xml.internal.ws.wsdl ++com.sun.xml.internal.ws.wsdl.parser ++com.sun.xml.internal.ws.wsdl.writer ++com.sun.xml.internal.ws.wsdl.writer.document ++com.sun.xml.internal.ws.wsdl.writer.document.http ++com.sun.xml.internal.ws.wsdl.writer.document.soap ++com.sun.xml.internal.ws.wsdl.writer.document.soap12 ++com.sun.xml.internal.ws.wsdl.writer.document.xsd ++com.sun.xml.internal.xsom ++com.sun.xml.internal.xsom.impl ++com.sun.xml.internal.xsom.impl.parser ++com.sun.xml.internal.xsom.impl.parser.state ++com.sun.xml.internal.xsom.impl.scd ++com.sun.xml.internal.xsom.impl.util ++com.sun.xml.internal.xsom.parser ++com.sun.xml.internal.xsom.util ++com.sun.xml.internal.xsom.visitor ++java.applet ++java.awt ++java.awt.color ++java.awt.datatransfer ++java.awt.dnd ++java.awt.dnd.peer ++java.awt.event ++java.awt.font ++java.awt.geom ++java.awt.im ++java.awt.im.spi ++java.awt.image ++java.awt.image.renderable ++java.awt.peer ++java.awt.print ++java.beans ++java.beans.beancontext ++java.io ++java.lang ++java.lang.annotation ++java.lang.instrument ++java.lang.invoke ++java.lang.management ++java.lang.ref ++java.lang.reflect ++java.math ++java.net ++java.nio ++java.nio.channels ++java.nio.channels.spi ++java.nio.charset ++java.nio.charset.spi ++java.nio.file ++java.nio.file.attribute ++java.nio.file.spi ++java.rmi ++java.rmi.activation ++java.rmi.dgc ++java.rmi.registry ++java.rmi.server ++java.security ++java.security.acl ++java.security.cert ++java.security.interfaces ++java.security.spec ++java.sql ++java.text ++java.text.spi ++java.time ++java.time.chrono ++java.time.format ++java.time.temporal ++java.time.zone ++java.util ++java.util.concurrent ++java.util.concurrent.atomic ++java.util.concurrent.locks ++java.util.function ++java.util.jar ++java.util.logging ++java.util.prefs ++java.util.regex ++java.util.spi ++java.util.stream ++java.util.zip ++javafx.animation ++javafx.application ++javafx.beans ++javafx.beans.binding ++javafx.beans.property ++javafx.beans.property.adapter ++javafx.beans.value ++javafx.collections ++javafx.collections.transformation ++javafx.concurrent ++javafx.css ++javafx.embed.swing ++javafx.embed.swt ++javafx.event ++javafx.fxml ++javafx.geometry ++javafx.print ++javafx.scene ++javafx.scene.canvas ++javafx.scene.chart ++javafx.scene.control ++javafx.scene.control.cell ++javafx.scene.effect ++javafx.scene.image ++javafx.scene.input ++javafx.scene.layout ++javafx.scene.media ++javafx.scene.paint ++javafx.scene.shape ++javafx.scene.text ++javafx.scene.transform ++javafx.scene.web ++javafx.stage ++javafx.util ++javafx.util.converter ++javax.accessibility ++javax.activation ++javax.activity ++javax.annotation ++javax.annotation.processing ++javax.crypto ++javax.crypto.interfaces ++javax.crypto.spec ++javax.imageio ++javax.imageio.event ++javax.imageio.metadata ++javax.imageio.plugins.bmp ++javax.imageio.plugins.jpeg ++javax.imageio.spi ++javax.imageio.stream ++javax.jws ++javax.jws.soap ++javax.lang.model ++javax.lang.model.element ++javax.lang.model.type ++javax.lang.model.util ++javax.management ++javax.management.loading ++javax.management.modelmbean ++javax.management.monitor ++javax.management.openmbean ++javax.management.relation ++javax.management.remote ++javax.management.remote.rmi ++javax.management.timer ++javax.naming ++javax.naming.directory ++javax.naming.event ++javax.naming.ldap ++javax.naming.spi ++javax.net ++javax.net.ssl ++javax.print ++javax.print.attribute ++javax.print.attribute.standard ++javax.print.event ++javax.rmi ++javax.rmi.CORBA ++javax.rmi.ssl ++javax.script ++javax.security.auth ++javax.security.auth.callback ++javax.security.auth.kerberos ++javax.security.auth.login ++javax.security.auth.spi ++javax.security.auth.x500 ++javax.security.cert ++javax.security.sasl ++javax.smartcardio ++javax.sound.midi ++javax.sound.midi.spi ++javax.sound.sampled ++javax.sound.sampled.spi ++javax.sql ++javax.sql.rowset ++javax.sql.rowset.serial ++javax.sql.rowset.spi ++javax.swing ++javax.swing.border ++javax.swing.colorchooser ++javax.swing.event ++javax.swing.filechooser ++javax.swing.plaf ++javax.swing.plaf.basic ++javax.swing.plaf.metal ++javax.swing.plaf.multi ++javax.swing.plaf.nimbus ++javax.swing.plaf.synth ++javax.swing.table ++javax.swing.text ++javax.swing.text.html ++javax.swing.text.html.parser ++javax.swing.text.rtf ++javax.swing.tree ++javax.swing.undo ++javax.tools ++javax.transaction ++javax.transaction.xa ++javax.xml ++javax.xml.bind ++javax.xml.bind.annotation ++javax.xml.bind.annotation.adapters ++javax.xml.bind.attachment ++javax.xml.bind.helpers ++javax.xml.bind.util ++javax.xml.crypto ++javax.xml.crypto.dom ++javax.xml.crypto.dsig ++javax.xml.crypto.dsig.dom ++javax.xml.crypto.dsig.keyinfo ++javax.xml.crypto.dsig.spec ++javax.xml.datatype ++javax.xml.namespace ++javax.xml.parsers ++javax.xml.soap ++javax.xml.stream ++javax.xml.stream.events ++javax.xml.stream.util ++javax.xml.transform ++javax.xml.transform.dom ++javax.xml.transform.sax ++javax.xml.transform.stax ++javax.xml.transform.stream ++javax.xml.validation ++javax.xml.ws ++javax.xml.ws.handler ++javax.xml.ws.handler.soap ++javax.xml.ws.http ++javax.xml.ws.soap ++javax.xml.ws.spi ++javax.xml.ws.spi.http ++javax.xml.ws.wsaddressing ++javax.xml.xpath ++jdk ++jdk.internal.cmm ++jdk.internal.dynalink ++jdk.internal.dynalink.beans ++jdk.internal.dynalink.linker ++jdk.internal.dynalink.support ++jdk.internal.instrumentation ++jdk.internal.org.objectweb.asm ++jdk.internal.org.objectweb.asm.commons ++jdk.internal.org.objectweb.asm.signature ++jdk.internal.org.objectweb.asm.tree ++jdk.internal.org.objectweb.asm.tree.analysis ++jdk.internal.org.objectweb.asm.util ++jdk.internal.org.xml.sax ++jdk.internal.org.xml.sax.helpers ++jdk.internal.util.xml ++jdk.internal.util.xml.impl ++jdk.jfr.events ++jdk.management.cmm ++jdk.management.resource ++jdk.management.resource.internal ++jdk.management.resource.internal.inst ++jdk.nashorn.api.scripting ++jdk.nashorn.internal ++jdk.nashorn.internal.codegen ++jdk.nashorn.internal.codegen.types ++jdk.nashorn.internal.ir ++jdk.nashorn.internal.ir.annotations ++jdk.nashorn.internal.ir.debug ++jdk.nashorn.internal.ir.visitor ++jdk.nashorn.internal.lookup ++jdk.nashorn.internal.objects ++jdk.nashorn.internal.objects.annotations ++jdk.nashorn.internal.parser ++jdk.nashorn.internal.runtime ++jdk.nashorn.internal.runtime.arrays ++jdk.nashorn.internal.runtime.events ++jdk.nashorn.internal.runtime.linker ++jdk.nashorn.internal.runtime.logging ++jdk.nashorn.internal.runtime.options ++jdk.nashorn.internal.runtime.regexp ++jdk.nashorn.internal.runtime.regexp.joni ++jdk.nashorn.internal.runtime.regexp.joni.ast ++jdk.nashorn.internal.runtime.regexp.joni.constants ++jdk.nashorn.internal.runtime.regexp.joni.encoding ++jdk.nashorn.internal.runtime.regexp.joni.exception ++jdk.nashorn.internal.scripts ++jdk.nashorn.tools ++jdk.net ++netscape.javascript ++oracle.jrockit.jfr ++oracle.jrockit.jfr.events ++oracle.jrockit.jfr.jdkevents ++oracle.jrockit.jfr.jdkevents.throwabletransform ++oracle.jrockit.jfr.openmbean ++oracle.jrockit.jfr.parser ++oracle.jrockit.jfr.settings ++oracle.jrockit.jfr.tools ++org.ietf.jgss ++org.jcp.xml.dsig.internal ++org.jcp.xml.dsig.internal.dom ++org.omg.CORBA ++org.omg.CORBA.DynAnyPackage ++org.omg.CORBA.ORBPackage ++org.omg.CORBA.TypeCodePackage ++org.omg.CORBA.portable ++org.omg.CORBA_2_3 ++org.omg.CORBA_2_3.portable ++org.omg.CosNaming ++org.omg.CosNaming.NamingContextExtPackage ++org.omg.CosNaming.NamingContextPackage ++org.omg.Dynamic ++org.omg.DynamicAny ++org.omg.DynamicAny.DynAnyFactoryPackage ++org.omg.DynamicAny.DynAnyPackage ++org.omg.IOP ++org.omg.IOP.CodecFactoryPackage ++org.omg.IOP.CodecPackage ++org.omg.Messaging ++org.omg.PortableInterceptor ++org.omg.PortableInterceptor.ORBInitInfoPackage ++org.omg.PortableServer ++org.omg.PortableServer.CurrentPackage ++org.omg.PortableServer.POAManagerPackage ++org.omg.PortableServer.POAPackage ++org.omg.PortableServer.ServantLocatorPackage ++org.omg.PortableServer.portable ++org.omg.SendingContext ++org.omg.stub.java.rmi ++org.omg.stub.javax.management.remote.rmi ++org.relaxng.datatype ++org.relaxng.datatype.helpers ++org.w3c.dom ++org.w3c.dom.bootstrap ++org.w3c.dom.css ++org.w3c.dom.events ++org.w3c.dom.html ++org.w3c.dom.ls ++org.w3c.dom.ranges ++org.w3c.dom.stylesheets ++org.w3c.dom.traversal ++org.w3c.dom.views ++org.w3c.dom.xpath ++org.xml.sax ++org.xml.sax.ext ++org.xml.sax.helpers ++sun.applet ++sun.applet.resources ++sun.audio ++sun.awt ++sun.awt.X11 ++sun.awt.datatransfer ++sun.awt.dnd ++sun.awt.event ++sun.awt.geom ++sun.awt.im ++sun.awt.image ++sun.awt.image.codec ++sun.awt.motif ++sun.awt.resources ++sun.awt.shell ++sun.awt.util ++sun.awt.windows ++sun.corba ++sun.dc ++sun.dc.path ++sun.dc.pr ++sun.font ++sun.instrument ++sun.invoke ++sun.invoke.empty ++sun.invoke.util ++sun.io ++sun.java2d ++sun.java2d.cmm ++sun.java2d.cmm.kcms ++sun.java2d.cmm.lcms ++sun.java2d.d3d ++sun.java2d.jules ++sun.java2d.loops ++sun.java2d.opengl ++sun.java2d.pipe ++sun.java2d.pipe.hw ++sun.java2d.pisces ++sun.java2d.windows ++sun.java2d.x11 ++sun.java2d.xr ++sun.jvmstat.monitor ++sun.jvmstat.monitor.event ++sun.jvmstat.monitor.remote ++sun.jvmstat.perfdata.monitor ++sun.jvmstat.perfdata.monitor.protocol.file ++sun.jvmstat.perfdata.monitor.protocol.local ++sun.jvmstat.perfdata.monitor.protocol.rmi ++sun.jvmstat.perfdata.monitor.v1_0 ++sun.jvmstat.perfdata.monitor.v2_0 ++sun.launcher ++sun.launcher.resources ++sun.lwawt ++sun.lwawt.macosx ++sun.management ++sun.management.counter ++sun.management.counter.perf ++sun.management.jdp ++sun.management.jmxremote ++sun.management.resources ++sun.management.snmp ++sun.management.snmp.jvminstr ++sun.management.snmp.jvmmib ++sun.management.snmp.util ++sun.misc ++sun.misc.resources ++sun.net ++sun.net.dns ++sun.net.ftp ++sun.net.ftp.impl ++sun.net.httpserver ++sun.net.idn ++sun.net.sdp ++sun.net.smtp ++sun.net.spi ++sun.net.spi.nameservice ++sun.net.spi.nameservice.dns ++sun.net.util ++sun.net.www ++sun.net.www.content.audio ++sun.net.www.content.image ++sun.net.www.content.text ++sun.net.www.http ++sun.net.www.protocol.file ++sun.net.www.protocol.ftp ++sun.net.www.protocol.http ++sun.net.www.protocol.http.logging ++sun.net.www.protocol.http.ntlm ++sun.net.www.protocol.http.spnego ++sun.net.www.protocol.https ++sun.net.www.protocol.jar ++sun.net.www.protocol.mailto ++sun.net.www.protocol.netdoc ++sun.nio ++sun.nio.ch ++sun.nio.ch.sctp ++sun.nio.cs ++sun.nio.cs.ext ++sun.nio.fs ++sun.print ++sun.print.resources ++sun.reflect ++sun.reflect.annotation ++sun.reflect.generics.factory ++sun.reflect.generics.parser ++sun.reflect.generics.reflectiveObjects ++sun.reflect.generics.repository ++sun.reflect.generics.scope ++sun.reflect.generics.tree ++sun.reflect.generics.visitor ++sun.reflect.misc ++sun.rmi.log ++sun.rmi.registry ++sun.rmi.rmic ++sun.rmi.rmic.iiop ++sun.rmi.rmic.newrmic ++sun.rmi.rmic.newrmic.jrmp ++sun.rmi.runtime ++sun.rmi.server ++sun.rmi.transport ++sun.rmi.transport.proxy ++sun.rmi.transport.tcp ++sun.security.acl ++sun.security.action ++sun.security.ec ++sun.security.internal.interfaces ++sun.security.internal.spec ++sun.security.jca ++sun.security.jgss ++sun.security.jgss.krb5 ++sun.security.jgss.spi ++sun.security.jgss.spnego ++sun.security.jgss.wrapper ++sun.security.krb5 ++sun.security.krb5.internal ++sun.security.krb5.internal.ccache ++sun.security.krb5.internal.crypto ++sun.security.krb5.internal.crypto.dk ++sun.security.krb5.internal.ktab ++sun.security.krb5.internal.rcache ++sun.security.krb5.internal.tools ++sun.security.krb5.internal.util ++sun.security.mscapi ++sun.security.pkcs ++sun.security.pkcs10 ++sun.security.pkcs11 ++sun.security.pkcs11.wrapper ++sun.security.pkcs12 ++sun.security.provider ++sun.security.provider.certpath ++sun.security.provider.certpath.ldap ++sun.security.provider.certpath.ssl ++sun.security.rsa ++sun.security.smartcardio ++sun.security.ssl ++sun.security.ssl.krb5 ++sun.security.timestamp ++sun.security.tools ++sun.security.tools.jarsigner ++sun.security.tools.keytool ++sun.security.tools.policytool ++sun.security.util ++sun.security.validator ++sun.security.x509 ++sun.swing ++sun.swing.icon ++sun.swing.plaf ++sun.swing.plaf.synth ++sun.swing.plaf.windows ++sun.swing.table ++sun.swing.text ++sun.swing.text.html ++sun.text ++sun.text.bidi ++sun.text.normalizer ++sun.text.resources ++sun.text.resources.en ++sun.tools.asm ++sun.tools.attach ++sun.tools.jar ++sun.tools.jar.resources ++sun.tools.java ++sun.tools.javac ++sun.tools.jcmd ++sun.tools.jconsole ++sun.tools.jconsole.inspector ++sun.tools.jinfo ++sun.tools.jmap ++sun.tools.jps ++sun.tools.jstack ++sun.tools.jstat ++sun.tools.jstatd ++sun.tools.native2ascii ++sun.tools.native2ascii.resources ++sun.tools.serialver ++sun.tools.tree ++sun.tools.util ++sun.tracing ++sun.tracing.dtrace ++sun.usagetracker ++sun.util ++sun.util.calendar ++sun.util.cldr ++sun.util.locale ++sun.util.locale.provider ++sun.util.logging ++sun.util.logging.resources ++sun.util.resources ++sun.util.resources.en ++sun.util.spi ++sun.util.xml +diff --git a/src/java.base/share/classes/sun/launcher/resources/launcher.properties b/src/java.base/share/classes/sun/launcher/resources/launcher.properties +index efcc4d69969..7ca105d0a55 100644 +--- a/src/java.base/share/classes/sun/launcher/resources/launcher.properties ++++ b/src/java.base/share/classes/sun/launcher/resources/launcher.properties +@@ -188,6 +188,11 @@ java.launcher.X.usage=\n\ + \ --add-opens /=(,)*\n\ + \ updates to open to\n\ + \ , regardless of module declaration.\n\ ++\ --illegal-access=\n\ ++\ permit or deny access to members of types in named modules\n\ ++\ by code in unnamed modules.\n\ ++\ is one of "deny", "permit", "warn", or "debug"\n\ ++\ This option will be removed in a future release.\n\ + \ --limit-modules [,...]\n\ + \ limit the universe of observable modules\n\ + \ --patch-module =({0})*\n\ +diff --git a/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/SystemModulesPlugin.java b/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/SystemModulesPlugin.java +index 4d1129ac8dc..2770733a08f 100644 +--- a/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/SystemModulesPlugin.java ++++ b/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/SystemModulesPlugin.java +@@ -60,6 +60,7 @@ import java.util.stream.Collectors; + + import jdk.internal.module.Checks; + import jdk.internal.module.DefaultRoots; ++import jdk.internal.module.IllegalAccessMaps; + import jdk.internal.module.Modules; + import jdk.internal.module.ModuleHashes; + import jdk.internal.module.ModuleInfo.Attributes; +@@ -621,6 +622,9 @@ public final class SystemModulesPlugin extends AbstractPlugin { + // generate moduleReads + genModuleReads(cw, cf); + ++ // generate concealedPackagesToOpen and exportedPackagesToOpen ++ genXXXPackagesToOpenMethods(cw); ++ + return cw; + } + +@@ -851,6 +855,16 @@ public final class SystemModulesPlugin extends AbstractPlugin { + generate(cw, "moduleReads", map, true); + } + ++ /** ++ * Generate concealedPackagesToOpen and exportedPackagesToOpen methods. ++ */ ++ private void genXXXPackagesToOpenMethods(ClassWriter cw) { ++ ModuleFinder finder = finderOf(moduleInfos); ++ IllegalAccessMaps maps = IllegalAccessMaps.generate(finder); ++ generate(cw, "concealedPackagesToOpen", maps.concealedPackagesToOpen(), false); ++ generate(cw, "exportedPackagesToOpen", maps.exportedPackagesToOpen(), false); ++ } ++ + /** + * Generate method to return {@code Map>}. + * +diff --git a/test/jdk/java/lang/ModuleTests/BasicModuleTest.java b/test/jdk/java/lang/ModuleTests/BasicModuleTest.java +index 1a1f26f423e..6548379f4bb 100644 +--- a/test/jdk/java/lang/ModuleTests/BasicModuleTest.java ++++ b/test/jdk/java/lang/ModuleTests/BasicModuleTest.java +@@ -35,7 +35,7 @@ import static org.testng.Assert.*; + * @test + * @summary Basic test of java.lang.Module + * @modules java.desktop java.xml +- * @run testng/othervm BasicModuleTest ++ * @run testng/othervm --illegal-access=deny BasicModuleTest + */ + + public class BasicModuleTest { +diff --git a/test/jdk/java/lang/instrument/RedefineModuleTest.java b/test/jdk/java/lang/instrument/RedefineModuleTest.java +index b5b5b4fc31d..3434935349d 100644 +--- a/test/jdk/java/lang/instrument/RedefineModuleTest.java ++++ b/test/jdk/java/lang/instrument/RedefineModuleTest.java +@@ -29,7 +29,7 @@ + * java.base/jdk.internal.test.TestProviderImpl1 + * java.base/jdk.internal.test.TestProviderImpl2 + * @run shell MakeJAR3.sh RedefineModuleAgent +- * @run testng/othervm -javaagent:RedefineModuleAgent.jar RedefineModuleTest ++ * @run testng/othervm --illegal-access=deny -javaagent:RedefineModuleAgent.jar RedefineModuleTest + */ + + import java.lang.TestProvider; +diff --git a/test/jdk/java/lang/invoke/CallerSensitiveAccess.java b/test/jdk/java/lang/invoke/CallerSensitiveAccess.java +index 2e904879a82..5dc1a588624 100644 +--- a/test/jdk/java/lang/invoke/CallerSensitiveAccess.java ++++ b/test/jdk/java/lang/invoke/CallerSensitiveAccess.java +@@ -24,7 +24,7 @@ + /* @test + * @bug 8196830 8235351 + * @modules java.base/jdk.internal.reflect +- * @run testng/othervm CallerSensitiveAccess ++ * @run testng/othervm --illegal-access=deny CallerSensitiveAccess + * @summary Check Lookup findVirtual, findStatic and unreflect behavior with + * caller sensitive methods with focus on AccessibleObject.setAccessible + */ +diff --git a/test/jdk/java/lang/reflect/AccessibleObject/CanAccessTest.java b/test/jdk/java/lang/reflect/AccessibleObject/CanAccessTest.java +index 45e2502b601..cb2c982e91b 100644 +--- a/test/jdk/java/lang/reflect/AccessibleObject/CanAccessTest.java ++++ b/test/jdk/java/lang/reflect/AccessibleObject/CanAccessTest.java +@@ -25,7 +25,7 @@ + * @test + * @build CanAccessTest + * @modules java.base/jdk.internal.misc:+open +- * @run testng/othervm CanAccessTest ++ * @run testng/othervm --illegal-access=deny CanAccessTest + * @summary Test AccessibleObject::canAccess method + */ + +diff --git a/test/jdk/java/lang/reflect/AccessibleObject/ModuleSetAccessibleTest.java b/test/jdk/java/lang/reflect/AccessibleObject/ModuleSetAccessibleTest.java +index c7c57d2371c..0d744f26245 100644 +--- a/test/jdk/java/lang/reflect/AccessibleObject/ModuleSetAccessibleTest.java ++++ b/test/jdk/java/lang/reflect/AccessibleObject/ModuleSetAccessibleTest.java +@@ -26,7 +26,7 @@ + * @build ModuleSetAccessibleTest + * @modules java.base/java.lang:open + * java.base/jdk.internal.misc:+open +- * @run testng/othervm ModuleSetAccessibleTest ++ * @run testng/othervm --illegal-access=deny ModuleSetAccessibleTest + * @summary Test java.lang.reflect.AccessibleObject with modules + */ + +diff --git a/test/jdk/java/lang/reflect/AccessibleObject/TrySetAccessibleTest.java b/test/jdk/java/lang/reflect/AccessibleObject/TrySetAccessibleTest.java +index 22fcb2e01fa..d678ea667d1 100644 +--- a/test/jdk/java/lang/reflect/AccessibleObject/TrySetAccessibleTest.java ++++ b/test/jdk/java/lang/reflect/AccessibleObject/TrySetAccessibleTest.java +@@ -28,7 +28,7 @@ + * java.base/jdk.internal.module + * java.base/jdk.internal.perf + * java.base/jdk.internal.misc:+open +- * @run testng/othervm TrySetAccessibleTest ++ * @run testng/othervm --illegal-access=deny TrySetAccessibleTest + * @summary Test AccessibleObject::trySetAccessible method + */ + +diff --git a/test/jdk/java/util/ResourceBundle/modules/cache/CacheTest.java b/test/jdk/java/util/ResourceBundle/modules/cache/CacheTest.java +index 5655eb5de2d..95c1d5e34d5 100644 +--- a/test/jdk/java/util/ResourceBundle/modules/cache/CacheTest.java ++++ b/test/jdk/java/util/ResourceBundle/modules/cache/CacheTest.java +@@ -87,6 +87,7 @@ public class CacheTest { + assertTrue(executeTestJava("--class-path", MODS_DIR.resolve(TEST_MODULE).toString(), + "--module-path", MODS_DIR.resolve(MAIN_BUNDLES_MODULE).toString(), + "--add-modules", MAIN_BUNDLES_MODULE, ++ "--add-modules", MAIN_BUNDLES_MODULE, + MAIN_CLASS, "cache") + .outputTo(System.out) + .errorTo(System.out) +@@ -109,6 +110,7 @@ public class CacheTest { + assertTrue(executeTestJava("--class-path", MODS_DIR.resolve(TEST_MODULE).toString(), + "--module-path", MODS_DIR.resolve(MAIN_BUNDLES_MODULE).toString(), + "--add-modules", MAIN_BUNDLES_MODULE, ++ "--illegal-access=deny", + MAIN_CLASS) + .outputTo(System.out) + .errorTo(System.out) +diff --git a/test/jdk/jdk/modules/open/Basic.java b/test/jdk/jdk/modules/open/Basic.java +index 30101a34aa7..5ceb0c3ff49 100644 +--- a/test/jdk/jdk/modules/open/Basic.java ++++ b/test/jdk/jdk/modules/open/Basic.java +@@ -25,7 +25,7 @@ + * @test + * @library modules + * @build m1/* m2/* +- * @run testng/othervm --add-modules=m1,m2 Basic ++ * @run testng/othervm --add-modules=m1,m2 --illegal-access=deny Basic + * @summary Basic test of open modules and open packages + */ + +diff --git a/test/jdk/tools/launcher/modules/addexports/manifest/AddExportsAndOpensInManifest.java b/test/jdk/tools/launcher/modules/addexports/manifest/AddExportsAndOpensInManifest.java +index 71d6a5b7bf9..80ba100db7d 100644 +--- a/test/jdk/tools/launcher/modules/addexports/manifest/AddExportsAndOpensInManifest.java ++++ b/test/jdk/tools/launcher/modules/addexports/manifest/AddExportsAndOpensInManifest.java +@@ -88,7 +88,8 @@ public class AddExportsAndOpensInManifest { + Paths.get("Test1.class"), Paths.get("Test2.class")); + + // java -jar test.jar +- return ProcessTools.executeTestJava("-jar", jarfile.toString()) ++ return ProcessTools.executeTestJava("--illegal-access=deny", ++ "-jar", jarfile.toString()) + .outputTo(System.out) + .errorTo(System.out); + } +diff --git a/test/jdk/tools/launcher/modules/illegalaccess/IllegalAccessTest.java b/test/jdk/tools/launcher/modules/illegalaccess/IllegalAccessTest.java +index 94c77bd57df..a1f6939a541 100644 +--- a/test/jdk/tools/launcher/modules/illegalaccess/IllegalAccessTest.java ++++ b/test/jdk/tools/launcher/modules/illegalaccess/IllegalAccessTest.java +@@ -23,36 +23,454 @@ + + /** + * @test +- * @bug 8266851 +- * @library /test/lib +- * @build IllegalAccessTest +- * @run testng IllegalAccessTest +- * @summary Make sure that --illegal-access=$VALUE is obsolete. ++ * @requires vm.compMode != "Xcomp" ++ * @modules java.base/jdk.internal.misc ++ * java.base/sun.security.x509 ++ * @library /test/lib modules ++ * @build IllegalAccessTest TryAccess ++ * jdk.test.lib.compiler.CompilerUtils ++ * jdk.test.lib.util.JarUtils ++ * @build m/* ++ * @run testng/othervm/timeout=180 IllegalAccessTest ++ * @summary Basic test for java --illegal-access=$VALUE + */ + +-import jdk.test.lib.process.*; +-import org.testng.annotations.*; ++import java.nio.file.Files; ++import java.nio.file.Path; ++import java.nio.file.Paths; ++import java.util.ArrayList; ++import java.util.List; ++import java.util.jar.Attributes; ++import java.util.jar.Manifest; ++import java.util.stream.Stream; ++ ++import jdk.test.lib.compiler.CompilerUtils; ++import jdk.test.lib.process.ProcessTools; ++import jdk.test.lib.process.OutputAnalyzer; ++import jdk.test.lib.util.JarUtils; ++ ++import org.testng.annotations.DataProvider; ++import org.testng.annotations.Test; ++import static org.testng.Assert.*; + + /** +- * Make sure that --illegal-access=$VALUE is obsolete. ++ * Basic test of --illegal-access=value to deny or permit access to JDK internals. + */ + + @Test + public class IllegalAccessTest { + +- void run(String text, String... vmopts) ++ static final String TEST_SRC = System.getProperty("test.src"); ++ static final String TEST_CLASSES = System.getProperty("test.classes"); ++ static final String MODULE_PATH = System.getProperty("jdk.module.path"); ++ ++ /** ++ * Represents the expected result of a test. ++ */ ++ static final class Result { ++ private final boolean success; ++ private final List expectedOutput = new ArrayList<>(); ++ private final List notExpectedOutput = new ArrayList<>(); ++ ++ Result(boolean success) { ++ this.success = success; ++ } ++ ++ Result expect(String msg) { ++ expectedOutput.add(msg); ++ return this; ++ } ++ ++ Result doNotExpect(String msg) { ++ notExpectedOutput.add(msg); ++ return this; ++ } ++ ++ boolean shouldSucceed() { ++ return success; ++ } ++ ++ Stream expectedOutput() { ++ return expectedOutput.stream(); ++ } ++ ++ Stream notExpectedOutput() { ++ return notExpectedOutput.stream(); ++ } ++ ++ @Override ++ public String toString() { ++ String s = (success) ? "success" : "failure"; ++ for (String msg : expectedOutput) { ++ s += "/" + msg; ++ } ++ return s; ++ } ++ } ++ ++ static Result success() { ++ return new Result(true); ++ } ++ ++ static Result successNoWarning() { ++ return success().doNotExpect("WARNING"); ++ } ++ ++ static Result successWithWarning() { ++ return success().expect("WARNING"); ++ } ++ ++ static Result fail(String expectedOutput) { ++ return new Result(false).expect(expectedOutput).doNotExpect("WARNING"); ++ } ++ ++ @DataProvider(name = "denyCases") ++ public Object[][] denyCases() { ++ return new Object[][] { ++ { "accessPublicClassNonExportedPackage", fail("IllegalAccessError") }, ++ { "accessPublicClassJdk9NonExportedPackage", fail("IllegalAccessError") }, ++ ++ { "reflectPublicMemberExportedPackage", successNoWarning() }, ++ { "reflectNonPublicMemberExportedPackage", fail("IllegalAccessException") }, ++ { "reflectPublicMemberNonExportedPackage", fail("IllegalAccessException") }, ++ { "reflectNonPublicMemberNonExportedPackage", fail("IllegalAccessException") }, ++ { "reflectPublicMemberJdk9NonExportedPackage", fail("IllegalAccessException") }, ++ { "reflectPublicMemberApplicationModule", successNoWarning() }, ++ ++ { "setAccessiblePublicMemberExportedPackage", successNoWarning() }, ++ { "setAccessibleNonPublicMemberExportedPackage", fail("InaccessibleObjectException") }, ++ { "setAccessiblePublicMemberNonExportedPackage", fail("InaccessibleObjectException") }, ++ { "setAccessibleNonPublicMemberNonExportedPackage", fail("InaccessibleObjectException") }, ++ { "setAccessiblePublicMemberJdk9NonExportedPackage", fail("InaccessibleObjectException") }, ++ { "setAccessiblePublicMemberApplicationModule", successNoWarning() }, ++ { "setAccessibleNotPublicMemberApplicationModule", fail("InaccessibleObjectException") }, ++ ++ { "privateLookupPublicClassExportedPackage", fail("IllegalAccessException") }, ++ { "privateLookupNonPublicClassExportedPackage", fail("IllegalAccessException") }, ++ { "privateLookupPublicClassNonExportedPackage", fail("IllegalAccessException") }, ++ { "privateLookupNonPublicClassNonExportedPackage", fail("IllegalAccessException") }, ++ { "privateLookupPublicClassJdk9NonExportedPackage", fail("IllegalAccessException") }, ++ }; ++ } ++ ++ @DataProvider(name = "permitCases") ++ public Object[][] permitCases() { ++ return new Object[][] { ++ { "accessPublicClassNonExportedPackage", successNoWarning() }, ++ { "accessPublicClassJdk9NonExportedPackage", fail("IllegalAccessError") }, ++ ++ { "reflectPublicMemberExportedPackage", successNoWarning() }, ++ { "reflectNonPublicMemberExportedPackage", fail("IllegalAccessException") }, ++ { "reflectPublicMemberNonExportedPackage", successWithWarning() }, ++ { "reflectNonPublicMemberNonExportedPackage", fail("IllegalAccessException") }, ++ { "reflectPublicMemberJdk9NonExportedPackage", fail("IllegalAccessException") }, ++ ++ { "setAccessiblePublicMemberExportedPackage", successNoWarning()}, ++ { "setAccessibleNonPublicMemberExportedPackage", successWithWarning() }, ++ { "setAccessiblePublicMemberNonExportedPackage", successWithWarning() }, ++ { "setAccessibleNonPublicMemberNonExportedPackage", successWithWarning() }, ++ { "setAccessiblePublicMemberJdk9NonExportedPackage", fail("InaccessibleObjectException") }, ++ { "setAccessiblePublicMemberApplicationModule", successNoWarning() }, ++ { "setAccessibleNotPublicMemberApplicationModule", fail("InaccessibleObjectException") }, ++ ++ { "privateLookupPublicClassExportedPackage", successWithWarning() }, ++ { "privateLookupNonPublicClassExportedPackage", successWithWarning() }, ++ { "privateLookupPublicClassNonExportedPackage", successWithWarning() }, ++ { "privateLookupNonPublicClassNonExportedPackage", successWithWarning() }, ++ { "privateLookupPublicClassJdk9NonExportedPackage", fail("IllegalAccessException") }, ++ { "privateLookupPublicClassApplicationModule", fail("IllegalAccessException") }, ++ }; ++ } ++ ++ /** ++ * Checks an expected result with the output captured by the given ++ * OutputAnalyzer. ++ */ ++ void checkResult(Result expectedResult, OutputAnalyzer outputAnalyzer) { ++ expectedResult.expectedOutput().forEach(outputAnalyzer::shouldContain); ++ expectedResult.notExpectedOutput().forEach(outputAnalyzer::shouldNotContain); ++ int exitValue = outputAnalyzer.getExitValue(); ++ if (expectedResult.shouldSucceed()) { ++ assertTrue(exitValue == 0); ++ } else { ++ assertTrue(exitValue != 0); ++ } ++ } ++ ++ /** ++ * Runs the test to execute the given test action. The VM is run with the ++ * given VM options and the output checked to see that it matches the ++ * expected result. ++ */ ++ OutputAnalyzer run(String action, Result expectedResult, String... vmopts) ++ throws Exception ++ { ++ Stream s1 = Stream.of(vmopts); ++ Stream s2 = Stream.of("-p", MODULE_PATH, "--add-modules=m", ++ "-cp", TEST_CLASSES, "TryAccess", action); ++ String[] opts = Stream.concat(s1, s2).toArray(String[]::new); ++ OutputAnalyzer outputAnalyzer = ProcessTools ++ .executeTestJava(opts) ++ .outputTo(System.out) ++ .errorTo(System.out); ++ if (expectedResult != null) ++ checkResult(expectedResult, outputAnalyzer); ++ return outputAnalyzer; ++ } ++ ++ OutputAnalyzer run(String action, String... vmopts) throws Exception { ++ return run(action, null, vmopts); ++ } ++ ++ /** ++ * Runs an executable JAR to execute the given test action. The VM is run ++ * with the given VM options and the output checked to see that it matches ++ * the expected result. ++ */ ++ void run(Path jarFile, String action, Result expectedResult, String... vmopts) + throws Exception + { +- var outputAnalyzer = ProcessTools +- .executeTestJava(vmopts) +- .outputTo(System.out) +- .errorTo(System.out); +- outputAnalyzer.shouldContain(text); ++ Stream s1 = Stream.of(vmopts); ++ Stream s2 = Stream.of("-jar", jarFile.toString(), action); ++ String[] opts = Stream.concat(s1, s2).toArray(String[]::new); ++ checkResult(expectedResult, ProcessTools.executeTestJava(opts) ++ .outputTo(System.out) ++ .errorTo(System.out)); ++ } ++ ++ @Test(dataProvider = "denyCases") ++ public void testDefault(String action, Result expectedResult) throws Exception { ++ run(action, expectedResult); ++ } ++ ++ @Test(dataProvider = "denyCases") ++ public void testDeny(String action, Result expectedResult) throws Exception { ++ run(action, expectedResult, "--illegal-access=deny"); ++ } ++ ++ @Test(dataProvider = "permitCases") ++ public void testPermit(String action, Result expectedResult) throws Exception { ++ run(action, expectedResult, "--illegal-access=permit"); + } + +- public void testObsolete() throws Exception { +- run("Ignoring option --illegal-access", +- "--illegal-access=permit", "--version"); ++ @Test(dataProvider = "permitCases") ++ public void testWarn(String action, Result expectedResult) throws Exception { ++ run(action, expectedResult, "--illegal-access=warn"); + } + ++ @Test(dataProvider = "permitCases") ++ public void testDebug(String action, Result expectedResult) throws Exception { ++ // expect stack trace with WARNING ++ if (expectedResult.expectedOutput().anyMatch("WARNING"::equals)) { ++ expectedResult.expect("TryAccess.main"); ++ } ++ run(action, expectedResult, "--illegal-access=debug"); ++ } ++ ++ /** ++ * Specify --add-exports to export a package ++ */ ++ public void testWithAddExportsOption() throws Exception { ++ // not accessible ++ run("reflectPublicMemberNonExportedPackage", fail("IllegalAccessException")); ++ ++ // should succeed with --add-exports ++ run("reflectPublicMemberNonExportedPackage", successNoWarning(), ++ "--add-exports", "java.base/sun.security.x509=ALL-UNNAMED"); ++ ++ // not accessible ++ run("setAccessibleNonPublicMemberNonExportedPackage", fail("InaccessibleObjectException")); ++ ++ // should fail as --add-exports does not open package ++ run("setAccessibleNonPublicMemberNonExportedPackage", fail("InaccessibleObjectException"), ++ "--add-exports", "java.base/sun.nio.ch=ALL-UNNAMED"); ++ } ++ ++ /** ++ * Specify --add-open to open a package ++ */ ++ public void testWithAddOpensOption() throws Exception { ++ // not accessible ++ run("reflectPublicMemberNonExportedPackage", fail("IllegalAccessException")); ++ ++ // should succeed with --add-opens ++ run("reflectPublicMemberNonExportedPackage", successNoWarning(), ++ "--add-opens", "java.base/sun.security.x509=ALL-UNNAMED"); ++ ++ // not accessible ++ run("setAccessibleNonPublicMemberExportedPackage", fail("InaccessibleObjectException")); ++ ++ // should succeed with --add-opens ++ run("setAccessibleNonPublicMemberExportedPackage", successNoWarning(), ++ "--add-opens", "java.base/java.lang=ALL-UNNAMED"); ++ } ++ ++ /** ++ * Test reflective API to export a package ++ */ ++ public void testWithReflectiveExports() throws Exception { ++ // compile patch for java.base ++ Path src = Paths.get(TEST_SRC, "patchsrc", "java.base"); ++ Path patch = Files.createDirectories(Paths.get("patches", "java.base")); ++ assertTrue(CompilerUtils.compile(src, patch, ++ "--patch-module", "java.base=" + src)); ++ ++ // reflectively export, then access ++ run("exportNonExportedPackages,reflectPublicMemberNonExportedPackage", ++ successNoWarning(), ++ "--patch-module", "java.base=" + patch); ++ ++ // access, reflectively export, access again ++ List output = run("reflectPublicMemberNonExportedPackage," ++ + "exportNonExportedPackages," ++ + "reflectPublicMemberNonExportedPackage", ++ "--patch-module", "java.base="+patch, ++ "--illegal-access=warn").asLines(); ++ assertTrue(count(output, "WARNING") == 1); // one warning ++ } ++ ++ /** ++ * Test reflective API to open a package ++ */ ++ public void testWithReflectiveOpens() throws Exception { ++ // compile patch for java.base ++ Path src = Paths.get(TEST_SRC, "patchsrc", "java.base"); ++ Path patch = Files.createDirectories(Paths.get("patches", "java.base")); ++ assertTrue(CompilerUtils.compile(src, patch, ++ "--patch-module", "java.base=" + src)); ++ ++ // reflectively open exported package, then access ++ run("openExportedPackage,setAccessibleNonPublicMemberExportedPackage", ++ successNoWarning(), ++ "--patch-module", "java.base=" + patch); ++ ++ // access, reflectively open exported package, access again ++ List output1 = run("setAccessibleNonPublicMemberExportedPackage" ++ + ",openExportedPackage" ++ + ",setAccessibleNonPublicMemberExportedPackage", ++ "--patch-module", "java.base=" + patch, ++ "--illegal-access=warn").asLines(); ++ assertTrue(count(output1, "WARNING") == 1); // one warning ++ ++ // reflectively open non-exported packages, then access ++ run("openNonExportedPackages,setAccessibleNonPublicMemberNonExportedPackage", ++ successNoWarning(), ++ "--patch-module", "java.base=" + patch); ++ ++ // access, reflectively open non-exported package, access again ++ List output2 = run("setAccessibleNonPublicMemberNonExportedPackage" ++ + ",openNonExportedPackages" ++ + ",setAccessibleNonPublicMemberNonExportedPackage", ++ "--patch-module", "java.base=" + patch, ++ "--illegal-access=warn").asLines(); ++ assertTrue(count(output2, "WARNING") == 1); // one warning ++ } ++ ++ /** ++ * Specify Add-Exports in JAR file manifest ++ */ ++ public void testWithAddExportsInManifest() throws Exception { ++ Manifest man = new Manifest(); ++ Attributes attrs = man.getMainAttributes(); ++ attrs.put(Attributes.Name.MANIFEST_VERSION, "1.0"); ++ attrs.put(Attributes.Name.MAIN_CLASS, "TryAccess"); ++ attrs.put(new Attributes.Name("Add-Exports"), ++ "java.base/sun.security.x509 java.base/sun.nio.ch"); ++ Path jarfile = Paths.get("x.jar"); ++ Path classes = Paths.get(TEST_CLASSES); ++ JarUtils.createJarFile(jarfile, man, classes, Paths.get("TryAccess.class")); ++ ++ run(jarfile, "reflectPublicMemberNonExportedPackage", successNoWarning()); ++ ++ run(jarfile, "reflectPublicMemberNonExportedPackage", successNoWarning(), ++ "--illegal-access=permit"); ++ ++ // should fail as Add-Exports does not open package ++ run(jarfile, "setAccessibleNonPublicMemberNonExportedPackage", ++ fail("InaccessibleObjectException")); ++ } ++ ++ /** ++ * Specify Add-Opens in JAR file manifest ++ */ ++ public void testWithAddOpensInManifest() throws Exception { ++ Manifest man = new Manifest(); ++ Attributes attrs = man.getMainAttributes(); ++ attrs.put(Attributes.Name.MANIFEST_VERSION, "1.0"); ++ attrs.put(Attributes.Name.MAIN_CLASS, "TryAccess"); ++ attrs.put(new Attributes.Name("Add-Opens"), "java.base/java.lang"); ++ Path jarfile = Paths.get("x.jar"); ++ Path classes = Paths.get(TEST_CLASSES); ++ JarUtils.createJarFile(jarfile, man, classes, Paths.get("TryAccess.class")); ++ ++ run(jarfile, "setAccessibleNonPublicMemberExportedPackage", successNoWarning()); ++ ++ run(jarfile, "setAccessibleNonPublicMemberExportedPackage", successNoWarning(), ++ "--illegal-access=permit"); ++ } ++ ++ /** ++ * Test that --illegal-access=permit behavior is to print a warning on the ++ * first illegal access only. ++ */ ++ public void testWarnOnFirstIllegalAccess() throws Exception { ++ String action1 = "reflectPublicMemberNonExportedPackage"; ++ String action2 = "setAccessibleNonPublicMemberExportedPackage"; ++ int warningCount = count(run(action1, "--illegal-access=permit").asLines(), "WARNING"); ++ assertTrue(warningCount > 0); // multi line warning ++ ++ // same illegal access ++ List output1 = run(action1 + "," + action1, "--illegal-access=permit").asLines(); ++ assertTrue(count(output1, "WARNING") == warningCount); ++ ++ // different illegal access ++ List output2 = run(action1 + "," + action2, "--illegal-access=permit").asLines(); ++ assertTrue(count(output2, "WARNING") == warningCount); ++ } ++ ++ /** ++ * Test that --illegal-access=warn prints a one-line warning per each unique ++ * illegal access. ++ */ ++ public void testWarnPerIllegalAccess() throws Exception { ++ String action1 = "reflectPublicMemberNonExportedPackage"; ++ String action2 = "setAccessibleNonPublicMemberExportedPackage"; ++ ++ // same illegal access ++ String repeatedActions = action1 + "," + action1; ++ List output1 = run(repeatedActions, "--illegal-access=warn").asLines(); ++ assertTrue(count(output1, "WARNING") == 1); ++ ++ // different illegal access ++ String differentActions = action1 + "," + action2; ++ List output2 = run(differentActions, "--illegal-access=warn").asLines(); ++ assertTrue(count(output2, "WARNING") == 2); ++ } ++ ++ /** ++ * Specify --illegal-access more than once, last one wins ++ */ ++ public void testRepeatedOption() throws Exception { ++ run("accessPublicClassNonExportedPackage", successNoWarning(), ++ "--illegal-access=deny", "--illegal-access=permit"); ++ run("accessPublicClassNonExportedPackage", fail("IllegalAccessError"), ++ "--illegal-access=permit", "--illegal-access=deny"); ++ } ++ ++ /** ++ * Specify bad value to --illegal-access ++ */ ++ public void testBadValue() throws Exception { ++ run("accessPublicClassNonExportedPackage", ++ fail("Value specified to --illegal-access not recognized"), ++ "--illegal-access=BAD"); ++ } ++ ++ private int count(Iterable lines, CharSequence cs) { ++ int count = 0; ++ for (String line : lines) { ++ if (line.contains(cs)) count++; ++ } ++ return count; ++ } + } +diff --git a/test/jdk/tools/launcher/modules/illegalaccess/TryAccess.java b/test/jdk/tools/launcher/modules/illegalaccess/TryAccess.java +new file mode 100644 +index 00000000000..9f58c505215 +--- /dev/null ++++ b/test/jdk/tools/launcher/modules/illegalaccess/TryAccess.java +@@ -0,0 +1,188 @@ ++/* ++ * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code 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 ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++import java.lang.invoke.MethodHandles; ++import java.lang.reflect.Constructor; ++import java.lang.reflect.Field; ++import java.lang.reflect.Method; ++import java.nio.channels.SocketChannel; ++ ++/** ++ * Launched by IllegalAccessTest to attempt illegal access. ++ */ ++ ++public class TryAccess { ++ ++ public static void main(String[] args) throws Exception { ++ String[] methodNames = args[0].split(","); ++ for (String methodName : methodNames) { ++ Method m = TryAccess.class.getDeclaredMethod(methodName); ++ m.invoke(null); ++ } ++ } ++ ++ // -- static access -- ++ ++ static void accessPublicClassNonExportedPackage() throws Exception { ++ Object obj = new sun.security.x509.X500Name("CN=name"); ++ } ++ ++ static void accessPublicClassJdk9NonExportedPackage() { ++ Object obj = jdk.internal.misc.Unsafe.getUnsafe(); ++ } ++ ++ // -- reflective access -- ++ ++ static void reflectPublicMemberExportedPackage() throws Exception { ++ Constructor ctor = String.class.getConstructor(String.class); ++ Object name = ctor.newInstance("value"); ++ } ++ ++ static void reflectNonPublicMemberExportedPackage() throws Exception { ++ Field f = String.class.getDeclaredField("value"); ++ Object obj = f.get("foo"); ++ } ++ ++ static void reflectPublicMemberNonExportedPackage() throws Exception { ++ Class clazz = Class.forName("sun.security.x509.X500Name"); ++ Constructor ctor = clazz.getConstructor(String.class); ++ Object obj = ctor.newInstance("CN=user"); ++ } ++ ++ static void reflectNonPublicMemberNonExportedPackage() throws Exception { ++ SocketChannel sc = SocketChannel.open(); ++ Field f = sc.getClass().getDeclaredField("fd"); ++ Object obj = f.get(sc); ++ } ++ ++ static void reflectPublicMemberJdk9NonExportedPackage() throws Exception { ++ Class clazz = Class.forName("jdk.internal.misc.Unsafe"); ++ Method m = clazz.getMethod("getUnsafe"); ++ Object obj = m.invoke(null); ++ } ++ ++ static void reflectPublicMemberApplicationModule() throws Exception { ++ Class clazz = Class.forName("p.Type"); ++ Constructor ctor = clazz.getConstructor(int.class); ++ Object obj = ctor.newInstance(1); ++ } ++ ++ // -- setAccessible -- ++ ++ static void setAccessiblePublicMemberExportedPackage() throws Exception { ++ Constructor ctor = String.class.getConstructor(String.class); ++ ctor.setAccessible(true); ++ } ++ ++ static void setAccessibleNonPublicMemberExportedPackage() throws Exception { ++ Method method = ClassLoader.class.getDeclaredMethod("defineClass", ++ byte[].class, int.class, int.class); ++ method.setAccessible(true); ++ } ++ ++ static void setAccessiblePublicMemberNonExportedPackage() throws Exception { ++ Class clazz = Class.forName("sun.security.x509.X500Name"); ++ Constructor ctor = clazz.getConstructor(String.class); ++ ctor.setAccessible(true); ++ } ++ ++ static void setAccessibleNonPublicMemberNonExportedPackage() throws Exception { ++ SocketChannel sc = SocketChannel.open(); ++ Field f = sc.getClass().getDeclaredField("fd"); ++ f.setAccessible(true); ++ } ++ ++ static void setAccessiblePublicMemberJdk9NonExportedPackage() throws Exception { ++ Class clazz = Class.forName("jdk.internal.misc.Unsafe"); ++ Method m = clazz.getMethod("getUnsafe"); ++ m.setAccessible(true); ++ } ++ ++ static void setAccessiblePublicMemberApplicationModule() throws Exception { ++ Class clazz = Class.forName("p.Type"); ++ Constructor ctor = clazz.getConstructor(int.class); ++ ctor.setAccessible(true); ++ } ++ ++ ++ static void setAccessibleNotPublicMemberApplicationModule() throws Exception { ++ Class clazz = Class.forName("p.Type"); ++ Constructor ctor = clazz.getDeclaredConstructor(int.class, int.class); ++ ctor.setAccessible(true); ++ } ++ ++ ++ // -- privateLookupIn -- ++ ++ static void privateLookupPublicClassExportedPackage() throws Exception { ++ MethodHandles.privateLookupIn(String.class, MethodHandles.lookup()); ++ } ++ ++ static void privateLookupNonPublicClassExportedPackage() throws Exception { ++ Class clazz = Class.forName("java.lang.WeakPairMap"); ++ MethodHandles.privateLookupIn(clazz, MethodHandles.lookup()); ++ } ++ ++ static void privateLookupPublicClassNonExportedPackage() throws Exception { ++ Class clazz = Class.forName("sun.security.x509.X500Name"); ++ MethodHandles.privateLookupIn(clazz, MethodHandles.lookup()); ++ } ++ ++ static void privateLookupNonPublicClassNonExportedPackage() throws Exception { ++ Class clazz = Class.forName("sun.nio.ch.SocketChannelImpl"); ++ MethodHandles.privateLookupIn(clazz, MethodHandles.lookup()); ++ } ++ ++ static void privateLookupPublicClassJdk9NonExportedPackage() throws Exception { ++ Class clazz = Class.forName("jdk.internal.misc.Unsafe"); ++ MethodHandles.privateLookupIn(clazz, MethodHandles.lookup()); ++ } ++ ++ static void privateLookupPublicClassApplicationModule() throws Exception { ++ Class clazz = Class.forName("p.Type"); ++ MethodHandles.privateLookupIn(clazz, MethodHandles.lookup()); ++ } ++ ++ ++ // -- export/open packages to this unnamed module -- ++ ++ static void exportNonExportedPackages() throws Exception { ++ Class helper = Class.forName("java.lang.Helper"); ++ Method m = helper.getMethod("export", String.class, Module.class); ++ m.invoke(null, "sun.security.x509", TryAccess.class.getModule()); ++ m.invoke(null, "sun.nio.ch", TryAccess.class.getModule()); ++ } ++ ++ static void openExportedPackage() throws Exception { ++ Class helper = Class.forName("java.lang.Helper"); ++ Method m = helper.getMethod("open", String.class, Module.class); ++ m.invoke(null, "java.lang", TryAccess.class.getModule()); ++ } ++ ++ static void openNonExportedPackages() throws Exception { ++ Class helper = Class.forName("java.lang.Helper"); ++ Method m = helper.getMethod("open", String.class, Module.class); ++ m.invoke(null, "sun.security.x509", TryAccess.class.getModule()); ++ m.invoke(null, "sun.nio.ch", TryAccess.class.getModule()); ++ } ++} +diff --git a/test/jdk/tools/launcher/modules/illegalaccess/modules/m/module-info.java b/test/jdk/tools/launcher/modules/illegalaccess/modules/m/module-info.java +new file mode 100644 +index 00000000000..90248e83226 +--- /dev/null ++++ b/test/jdk/tools/launcher/modules/illegalaccess/modules/m/module-info.java +@@ -0,0 +1,26 @@ ++/* ++ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code 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 ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++module m { ++ exports p; ++} +diff --git a/test/jdk/tools/launcher/modules/illegalaccess/modules/m/p/Type.java b/test/jdk/tools/launcher/modules/illegalaccess/modules/m/p/Type.java +new file mode 100644 +index 00000000000..b83e70be94c +--- /dev/null ++++ b/test/jdk/tools/launcher/modules/illegalaccess/modules/m/p/Type.java +@@ -0,0 +1,31 @@ ++/* ++ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code 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 ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++package p; ++ ++public class Type { ++ ++ private Type(int x, int y) { } ++ ++ public Type(int x) { } ++} +diff --git a/test/jdk/tools/launcher/modules/illegalaccess/patchsrc/java.base/java/lang/Helper.java b/test/jdk/tools/launcher/modules/illegalaccess/patchsrc/java.base/java/lang/Helper.java +new file mode 100644 +index 00000000000..822a0a80520 +--- /dev/null ++++ b/test/jdk/tools/launcher/modules/illegalaccess/patchsrc/java.base/java/lang/Helper.java +@@ -0,0 +1,42 @@ ++/* ++ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code 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 ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++package java.lang; ++ ++public class Helper { ++ private Helper() { } ++ ++ /** ++ * Exports a package to a module. ++ */ ++ public static void export(String pn, Module other) { ++ Helper.class.getModule().addExports(pn, other); ++ } ++ ++ /** ++ * Opens a package to a module. ++ */ ++ public static void open(String pn, Module other) { ++ Helper.class.getModule().addOpens(pn, other); ++ } ++} +-- +2.34.1 + diff --git a/x86_64/extra/openjdk-17/0002-Revert-8256299-Implement-JEP-396-Strongly-Encapsulat.patch b/x86_64/extra/openjdk-17/0002-Revert-8256299-Implement-JEP-396-Strongly-Encapsulat.patch new file mode 100644 index 0000000..c49d8f8 --- /dev/null +++ b/x86_64/extra/openjdk-17/0002-Revert-8256299-Implement-JEP-396-Strongly-Encapsulat.patch @@ -0,0 +1,451 @@ +From 10b90662e5e81a2b065a159c025764b770e15233 Mon Sep 17 00:00:00 2001 +From: Martin Valba +Date: Tue, 10 May 2022 21:32:07 +0300 +Subject: [PATCH] Revert "8256299: Implement JEP 396: Strongly Encapsulate JDK + Internals by Default + +--- + src/hotspot/share/runtime/arguments.cpp | 1 - + .../internal/module/ArchivedBootLayer.java | 16 +++- + .../internal/module/ArchivedModuleGraph.java | 28 +++++- + .../jdk/internal/module/ModuleBootstrap.java | 88 ++++++++++++------- + .../illegalaccess/IllegalAccessTest.java | 75 ++++++++-------- + 5 files changed, 129 insertions(+), 79 deletions(-) + +diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp +index 9beae74a0a2..02dbe4ce315 100644 +--- a/src/hotspot/share/runtime/arguments.cpp ++++ b/src/hotspot/share/runtime/arguments.cpp +@@ -2435,7 +2435,6 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, bool* patch_m + return res; + } + } else if (match_option(option, "--illegal-access=", &tail)) { +- warning("Option --illegal-access is deprecated and will be removed in a future release."); + if (!create_module_property("jdk.module.illegalAccess", tail, ExternalProperty)) { + return JNI_ENOMEM; + } +diff --git a/src/java.base/share/classes/jdk/internal/module/ArchivedBootLayer.java b/src/java.base/share/classes/jdk/internal/module/ArchivedBootLayer.java +index 5c806f81dcd..decf27e8cb7 100644 +--- a/src/java.base/share/classes/jdk/internal/module/ArchivedBootLayer.java ++++ b/src/java.base/share/classes/jdk/internal/module/ArchivedBootLayer.java +@@ -27,27 +27,35 @@ package jdk.internal.module; + import jdk.internal.misc.CDS; + + /** +- * Used by ModuleBootstrap for archiving the boot layer. ++ * Used by ModuleBootstrap for archiving the boot layer and the builder needed to ++ * set the IllegalAccessLogger. + */ + class ArchivedBootLayer { + private static ArchivedBootLayer archivedBootLayer; + + private final ModuleLayer bootLayer; ++ private final IllegalAccessLogger.Builder builder; + +- private ArchivedBootLayer(ModuleLayer bootLayer) { ++ private ArchivedBootLayer(ModuleLayer bootLayer, ++ IllegalAccessLogger.Builder builder) { + this.bootLayer = bootLayer; ++ this.builder = builder; + } + + ModuleLayer bootLayer() { + return bootLayer; + } + ++ IllegalAccessLogger.Builder illegalAccessLoggerBuilder() { ++ return builder; ++ } ++ + static ArchivedBootLayer get() { + return archivedBootLayer; + } + +- static void archive(ModuleLayer layer) { +- archivedBootLayer = new ArchivedBootLayer(layer); ++ static void archive(ModuleLayer layer, IllegalAccessLogger.Builder builder) { ++ archivedBootLayer = new ArchivedBootLayer(layer, builder); + } + + static { +diff --git a/src/java.base/share/classes/jdk/internal/module/ArchivedModuleGraph.java b/src/java.base/share/classes/jdk/internal/module/ArchivedModuleGraph.java +index d3e5dff08c2..4d9f5eb7f62 100644 +--- a/src/java.base/share/classes/jdk/internal/module/ArchivedModuleGraph.java ++++ b/src/java.base/share/classes/jdk/internal/module/ArchivedModuleGraph.java +@@ -24,6 +24,8 @@ + */ + package jdk.internal.module; + ++import java.util.Map; ++import java.util.Set; + import java.util.function.Function; + import java.lang.module.Configuration; + import java.lang.module.ModuleFinder; +@@ -31,7 +33,7 @@ import jdk.internal.misc.CDS; + + /** + * Used by ModuleBootstrap for archiving the configuration for the boot layer, +- * and the system module finder. ++ * the system module finder, and the maps used to create the IllegalAccessLogger. + */ + class ArchivedModuleGraph { + private static ArchivedModuleGraph archivedModuleGraph; +@@ -41,17 +43,23 @@ class ArchivedModuleGraph { + private final ModuleFinder finder; + private final Configuration configuration; + private final Function classLoaderFunction; ++ private final Map> concealedPackagesToOpen; ++ private final Map> exportedPackagesToOpen; + + private ArchivedModuleGraph(boolean hasSplitPackages, + boolean hasIncubatorModules, + ModuleFinder finder, + Configuration configuration, +- Function classLoaderFunction) { ++ Function classLoaderFunction, ++ Map> concealedPackagesToOpen, ++ Map> exportedPackagesToOpen) { + this.hasSplitPackages = hasSplitPackages; + this.hasIncubatorModules = hasIncubatorModules; + this.finder = finder; + this.configuration = configuration; + this.classLoaderFunction = classLoaderFunction; ++ this.concealedPackagesToOpen = concealedPackagesToOpen; ++ this.exportedPackagesToOpen = exportedPackagesToOpen; + } + + ModuleFinder finder() { +@@ -66,6 +74,14 @@ class ArchivedModuleGraph { + return classLoaderFunction; + } + ++ Map> concealedPackagesToOpen() { ++ return concealedPackagesToOpen; ++ } ++ ++ Map> exportedPackagesToOpen() { ++ return exportedPackagesToOpen; ++ } ++ + boolean hasSplitPackages() { + return hasSplitPackages; + } +@@ -94,12 +110,16 @@ class ArchivedModuleGraph { + boolean hasIncubatorModules, + ModuleFinder finder, + Configuration configuration, +- Function classLoaderFunction) { ++ Function classLoaderFunction, ++ Map> concealedPackagesToOpen, ++ Map> exportedPackagesToOpen) { + archivedModuleGraph = new ArchivedModuleGraph(hasSplitPackages, + hasIncubatorModules, + finder, + configuration, +- classLoaderFunction); ++ classLoaderFunction, ++ concealedPackagesToOpen, ++ exportedPackagesToOpen); + } + + static { +diff --git a/src/java.base/share/classes/jdk/internal/module/ModuleBootstrap.java b/src/java.base/share/classes/jdk/internal/module/ModuleBootstrap.java +index e42a93aa0c4..8e1fbfe456c 100644 +--- a/src/java.base/share/classes/jdk/internal/module/ModuleBootstrap.java ++++ b/src/java.base/share/classes/jdk/internal/module/ModuleBootstrap.java +@@ -173,6 +173,12 @@ public final class ModuleBootstrap { + // assume boot layer has at least one module providing a service + // that is mapped to the application class loader. + JLA.bindToLoader(bootLayer, ClassLoaders.appClassLoader()); ++ ++ // IllegalAccessLogger needs to be set ++ var illegalAccessLoggerBuilder = archivedBootLayer.illegalAccessLoggerBuilder(); ++ if (illegalAccessLoggerBuilder != null) { ++ illegalAccessLoggerBuilder.complete(); ++ } + } else { + bootLayer = boot2(); + } +@@ -190,7 +196,6 @@ public final class ModuleBootstrap { + String mainModule = System.getProperty("jdk.module.main"); + Set addModules = addModules(); + Set limitModules = limitModules(); +- String illegalAccess = getAndRemoveProperty("jdk.module.illegalAccess"); + + PrintStream traceOutput = null; + String trace = getAndRemoveProperty("jdk.module.showModuleResolution"); +@@ -222,8 +227,7 @@ public final class ModuleBootstrap { + && !haveModulePath + && addModules.isEmpty() + && limitModules.isEmpty() +- && !isPatched +- && illegalAccess == null) { ++ && !isPatched { + systemModuleFinder = archivedModuleGraph.finder(); + hasSplitPackages = archivedModuleGraph.hasSplitPackages(); + hasIncubatorModules = archivedModuleGraph.hasIncubatorModules(); +@@ -462,14 +466,21 @@ public final class ModuleBootstrap { + addExtraReads(bootLayer); + boolean extraExportsOrOpens = addExtraExportsAndOpens(bootLayer); + +- if (illegalAccess != null) { +- assert systemModules != null; +- addIllegalAccess(illegalAccess, +- systemModules, +- upgradeModulePath, ++ Map> concealedPackagesToOpen; ++ Map> exportedPackagesToOpen; ++ if (archivedModuleGraph != null) { ++ concealedPackagesToOpen = archivedModuleGraph.concealedPackagesToOpen(); ++ exportedPackagesToOpen = archivedModuleGraph.exportedPackagesToOpen(); ++ } else { ++ concealedPackagesToOpen = systemModules.concealedPackagesToOpen(); ++ exportedPackagesToOpen = systemModules.exportedPackagesToOpen(); ++ } ++ IllegalAccessLogger.Builder builder = ++ addIllegalAccess(upgradeModulePath, ++ concealedPackagesToOpen, ++ exportedPackagesToOpen, + bootLayer, + extraExportsOrOpens); +- } + + Counters.add("jdk.module.boot.7.adjustModulesTime"); + +@@ -487,9 +498,11 @@ public final class ModuleBootstrap { + hasIncubatorModules, + systemModuleFinder, + cf, +- clf); ++ clf, ++ concealedPackagesToOpen, ++ exportedPackagesToOpen); + if (!hasSplitPackages && !hasIncubatorModules) { +- ArchivedBootLayer.archive(bootLayer); ++ ArchivedBootLayer.archive(bootLayer, builder); + } + } + +@@ -783,35 +796,41 @@ public final class ModuleBootstrap { + } + + /** +- * Process the --illegal-access option to open packages of system modules +- * in the boot layer to code in unnamed modules. ++ * Process the --illegal-access option to open packages of system modules (and its default) to open packages ++ * of system modules in the boot layer to code in unnamed modules. + */ +- private static void addIllegalAccess(String illegalAccess, +- SystemModules systemModules, +- ModuleFinder upgradeModulePath, +- ModuleLayer bootLayer, +- boolean extraExportsOrOpens) { +- +- if (illegalAccess.equals("deny")) +- return; // nothing to do +- +- IllegalAccessLogger.Mode mode = switch (illegalAccess) { +- case "permit" -> IllegalAccessLogger.Mode.ONESHOT; +- case "warn" -> IllegalAccessLogger.Mode.WARN; +- case "debug" -> IllegalAccessLogger.Mode.DEBUG; +- default -> { +- fail("Value specified to --illegal-access not recognized:" +- + " '" + illegalAccess + "'"); +- yield null; ++ private static IllegalAccessLogger.Builder ++ addIllegalAccess(ModuleFinder upgradeModulePath, ++ Map> concealedPackagesToOpen, ++ Map> exportedPackagesToOpen, ++ ModuleLayer bootLayer, ++ boolean extraExportsOrOpens) { ++ String value = getAndRemoveProperty("jdk.module.illegalAccess"); ++ IllegalAccessLogger.Mode mode = IllegalAccessLogger.Mode.ONESHOT; ++ if (value != null) { ++ switch (value) { ++ case "deny": ++ return null; ++ case "permit": ++ break; ++ case "warn": ++ mode = IllegalAccessLogger.Mode.WARN; ++ break; ++ case "debug": ++ mode = IllegalAccessLogger.Mode.DEBUG; ++ break; ++ default: ++ fail("Value specified to --illegal-access not recognized:" ++ + " '" + value + "'"); ++ return null; + } +- }; ++ } ++ IllegalAccessLogger.Builder builder ++ = new IllegalAccessLogger.Builder(mode, System.err); + + /** + * Returns the set of module names specified by --enable-native-access options. + */ +- var builder = new IllegalAccessLogger.Builder(mode, System.err); +- Map> concealedPackagesToOpen = systemModules.concealedPackagesToOpen(); +- Map> exportedPackagesToOpen = systemModules.exportedPackagesToOpen(); + if (concealedPackagesToOpen.isEmpty() && exportedPackagesToOpen.isEmpty()) { + // need to generate (exploded build) + IllegalAccessMaps maps = IllegalAccessMaps.generate(limitedFinder()); +@@ -870,6 +889,7 @@ public final class ModuleBootstrap { + JLA.addOpensToAllUnnamed(m, concealedPackages, exportedPackages); + } + builder.complete(); ++ return builder; + } + + /** +diff --git a/test/jdk/tools/launcher/modules/illegalaccess/IllegalAccessTest.java b/test/jdk/tools/launcher/modules/illegalaccess/IllegalAccessTest.java +index a1f6939a541..3fa8d1364ec 100644 +--- a/test/jdk/tools/launcher/modules/illegalaccess/IllegalAccessTest.java ++++ b/test/jdk/tools/launcher/modules/illegalaccess/IllegalAccessTest.java +@@ -238,16 +238,16 @@ public class IllegalAccessTest { + .errorTo(System.out)); + } + +- @Test(dataProvider = "denyCases") +- public void testDefault(String action, Result expectedResult) throws Exception { +- run(action, expectedResult); +- } +- + @Test(dataProvider = "denyCases") + public void testDeny(String action, Result expectedResult) throws Exception { + run(action, expectedResult, "--illegal-access=deny"); + } + ++ @Test(dataProvider = "permitCases") ++ public void testDefault(String action, Result expectedResult) throws Exception { ++ run(action, expectedResult); ++ } ++ + @Test(dataProvider = "permitCases") + public void testPermit(String action, Result expectedResult) throws Exception { + run(action, expectedResult, "--illegal-access=permit"); +@@ -271,38 +271,39 @@ public class IllegalAccessTest { + * Specify --add-exports to export a package + */ + public void testWithAddExportsOption() throws Exception { +- // not accessible +- run("reflectPublicMemberNonExportedPackage", fail("IllegalAccessException")); ++ // warning ++ run("reflectPublicMemberNonExportedPackage", successWithWarning()); + +- // should succeed with --add-exports ++ // no warning due to --add-exports --add-exports + run("reflectPublicMemberNonExportedPackage", successNoWarning(), + "--add-exports", "java.base/sun.security.x509=ALL-UNNAMED"); + +- // not accessible +- run("setAccessibleNonPublicMemberNonExportedPackage", fail("InaccessibleObjectException")); +- +- // should fail as --add-exports does not open package +- run("setAccessibleNonPublicMemberNonExportedPackage", fail("InaccessibleObjectException"), +- "--add-exports", "java.base/sun.nio.ch=ALL-UNNAMED"); ++ // attempt two illegal accesses, one allowed by --add-exports ++ run("reflectPublicMemberNonExportedPackage" ++ + ",setAccessibleNonPublicMemberExportedPackage", ++ successWithWarning(), ++ "--add-exports", "java.base/sun.security.x509=ALL-UNNAMED"); + } + + /** + * Specify --add-open to open a package + */ + public void testWithAddOpensOption() throws Exception { +- // not accessible +- run("reflectPublicMemberNonExportedPackage", fail("IllegalAccessException")); +- +- // should succeed with --add-opens +- run("reflectPublicMemberNonExportedPackage", successNoWarning(), +- "--add-opens", "java.base/sun.security.x509=ALL-UNNAMED"); ++ // warning ++ run("setAccessibleNonPublicMemberExportedPackage", successWithWarning()); + + // not accessible + run("setAccessibleNonPublicMemberExportedPackage", fail("InaccessibleObjectException")); + +- // should succeed with --add-opens ++ // no warning due to --add-opens + run("setAccessibleNonPublicMemberExportedPackage", successNoWarning(), + "--add-opens", "java.base/java.lang=ALL-UNNAMED"); ++ ++ // attempt two illegal accesses, one allowed by --add-opens ++ run("reflectPublicMemberNonExportedPackage" ++ + ",setAccessibleNonPublicMemberExportedPackage", ++ successWithWarning(), ++ "--add-opens", "java.base/java.lang=ALL-UNNAMED"); + } + + /** +@@ -374,20 +375,19 @@ public class IllegalAccessTest { + Attributes attrs = man.getMainAttributes(); + attrs.put(Attributes.Name.MANIFEST_VERSION, "1.0"); + attrs.put(Attributes.Name.MAIN_CLASS, "TryAccess"); +- attrs.put(new Attributes.Name("Add-Exports"), +- "java.base/sun.security.x509 java.base/sun.nio.ch"); ++ attrs.put(new Attributes.Name("Add-Exports"), "java.base/sun.security.x509"); + Path jarfile = Paths.get("x.jar"); + Path classes = Paths.get(TEST_CLASSES); + JarUtils.createJarFile(jarfile, man, classes, Paths.get("TryAccess.class")); + + run(jarfile, "reflectPublicMemberNonExportedPackage", successNoWarning()); + +- run(jarfile, "reflectPublicMemberNonExportedPackage", successNoWarning(), +- "--illegal-access=permit"); ++ run(jarfile, "setAccessibleNonPublicMemberExportedPackage", successWithWarning()); + +- // should fail as Add-Exports does not open package +- run(jarfile, "setAccessibleNonPublicMemberNonExportedPackage", +- fail("InaccessibleObjectException")); ++ // attempt two illegal accesses, one allowed by Add-Exports ++ run(jarfile, "reflectPublicMemberNonExportedPackage," ++ + "setAccessibleNonPublicMemberExportedPackage", ++ successWithWarning()); + } + + /** +@@ -405,26 +405,29 @@ public class IllegalAccessTest { + + run(jarfile, "setAccessibleNonPublicMemberExportedPackage", successNoWarning()); + +- run(jarfile, "setAccessibleNonPublicMemberExportedPackage", successNoWarning(), +- "--illegal-access=permit"); ++ run(jarfile, "reflectPublicMemberNonExportedPackage", successWithWarning()); ++ ++ // attempt two illegal accesses, one allowed by Add-Opens ++ run(jarfile, "reflectPublicMemberNonExportedPackage," ++ + "setAccessibleNonPublicMemberExportedPackage", ++ successWithWarning()); + } + + /** +- * Test that --illegal-access=permit behavior is to print a warning on the +- * first illegal access only. ++ * Test that default behavior is to print a warning on the first illegal ++ * access only. + */ + public void testWarnOnFirstIllegalAccess() throws Exception { + String action1 = "reflectPublicMemberNonExportedPackage"; + String action2 = "setAccessibleNonPublicMemberExportedPackage"; +- int warningCount = count(run(action1, "--illegal-access=permit").asLines(), "WARNING"); +- assertTrue(warningCount > 0); // multi line warning ++ int warningCount = count(run(action1).asLines(), "WARNING"); + + // same illegal access +- List output1 = run(action1 + "," + action1, "--illegal-access=permit").asLines(); ++ List output1 = run(action1 + "," + action1).asLines(); + assertTrue(count(output1, "WARNING") == warningCount); + + // different illegal access +- List output2 = run(action1 + "," + action2, "--illegal-access=permit").asLines(); ++ List output2 = run(action1 + "," + action2).asLines(); + assertTrue(count(output2, "WARNING") == warningCount); + } + +-- +2.34.1 + diff --git a/x86_64/extra/openjdk-17/PKGBUILD b/x86_64/extra/openjdk-17/PKGBUILD new file mode 100644 index 0000000..b9bfb25 --- /dev/null +++ b/x86_64/extra/openjdk-17/PKGBUILD @@ -0,0 +1,70 @@ +pkgname=openjdk-17 +pkgver=17.0.3 +pkgrel=1 +arch=('x86_64') +depends=('alsa-lib' 'cpio' 'cups' 'unzip' 'elfutils' 'libpng' 'harfbuzz' 'freetype2' 'libjpeg' 'which' 'zip' 'xorg-server') +makedepends=('git') +options=(!lto) +source=(https://github.com/openjdk/jdk17u/archive/jdk-$pkgver-ga.tar.gz + freedesktop-java.desktop + freedesktop-jconsole.desktop + freedesktop-jshell.desktop + 0001-REVERT-8266851-Implement-JEP-403-Strongly-Encapsulat.patch + 0002-Revert-8256299-Implement-JEP-396-Strongly-Encapsulat.patch) +install=install_jdk.sh + +prepare() { + cd jdk17u-jdk-$pkgver-ga + + patch -p1 -i ../0001-REVERT-8266851-Implement-JEP-403-Strongly-Encapsulat.patch + patch -p1 -i ../0002-Revert-8256299-Implement-JEP-396-Strongly-Encapsulat.patch +} + +build() { + cd jdk17u-jdk-$pkgver-ga + unset JAVA_HOME + + bash configure \ + --enable-unlimited-crypto \ + --with-stdc++lib=dynamic \ + --with-lcms=system \ + --with-libjpeg=system \ + --with-libpng=system \ + --with-zlib=system \ + --with-version-build="12" \ + --prefix=/usr + + make images +} + +package() { + cd jdk17u-jdk-$pkgver-ga + + install -vdm755 $pkgdir/opt/jdk-17 + cp -Rv build/*/images/jdk/* $pkgdir/opt/jdk-17 + + # Remove .debuginfo from bins + rm $pkgdir/opt/jdk-17/bin/*.debuginfo + + chown -R root:root $pkgdir/opt/jdk-17 + for s in 16 24 32 48; do + install -vDm644 src/java.desktop/unix/classes/sun/awt/X11/java-icon${s}.png \ + $pkgdir/usr/share/icons/hicolor/${s}x${s}/apps/java.png + done + + mkdir -pv $pkgdir/usr/share/applications + + # Icons + for s in 16 24 32 48; do + install -Dm 644 \ + "${srcdir}/jdk17u-jdk-$pkgver-ga/src/java.desktop/unix/classes/sun/awt/X11/java-icon${s}.png" \ + "${pkgdir}/usr/share/icons/hicolor/${s}x${s}/apps/${pkgbase}.png" + done + + # Desktop files + for f in jconsole java jshell; do + install -Dm 644 \ + "${srcdir}/freedesktop-${f}.desktop" \ + "${pkgdir}/usr/share/applications/${f}-${pkgbase}.desktop" + done +} diff --git a/x86_64/extra/openjdk-17/freedesktop-java.desktop b/x86_64/extra/openjdk-17/freedesktop-java.desktop new file mode 100644 index 0000000..1b3533d --- /dev/null +++ b/x86_64/extra/openjdk-17/freedesktop-java.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Name=OpenJDK Java 17 Runtime +Name[fi]=OpenJDK Java 17 - ajonaikainen ympäristö +Comment=OpenJDK Java 17 Runtime +Comment[fi]=OpenJDK Java 17 - ajonaikainen ympäristö +Keywords=java;runtime +Exec=/usr/bin/java -jar +Terminal=false +Type=Application +Icon=java17-openjdk +MimeType=application/x-java-archive;application/java-archive;application/x-jar; +NoDisplay=true diff --git a/x86_64/extra/openjdk-17/freedesktop-jconsole.desktop b/x86_64/extra/openjdk-17/freedesktop-jconsole.desktop new file mode 100644 index 0000000..8936f22 --- /dev/null +++ b/x86_64/extra/openjdk-17/freedesktop-jconsole.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=OpenJDK Java 17 Console +Name[fi]=OpenJDK Java 17 - konsoli +Comment=OpenJDK Java 17 Monitoring & Management Console +Comment[fi]=OpenJDK Java 17 - valvonta- ja hallintakonsoli +Keywords=java;console;monitoring +Exec=/usr/bin/jconsole +Terminal=false +Type=Application +Icon=java17-openjdk +Categories=Application;System; diff --git a/x86_64/extra/openjdk-17/freedesktop-jshell.desktop b/x86_64/extra/openjdk-17/freedesktop-jshell.desktop new file mode 100644 index 0000000..46a48ba --- /dev/null +++ b/x86_64/extra/openjdk-17/freedesktop-jshell.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=OpenJDK Java 17 Shell +Comment=OpenJDK Java 17 Shell +Keywords=java;shell +Exec=/usr/bin/jshell +Terminal=true +Type=Application +Icon=java17-openjdk +Categories=Application;System; diff --git a/x86_64/extra/openjdk-17/install_jdk.sh b/x86_64/extra/openjdk-17/install_jdk.sh new file mode 100644 index 0000000..3ef4772 --- /dev/null +++ b/x86_64/extra/openjdk-17/install_jdk.sh @@ -0,0 +1,27 @@ +# Feel free to improve everything here +# This is just quick and lazy way to install binaries right now + +post_install() { + if [ ! -f /usr/bin/java ]; then + echo "[+]: Linking java binaries from /opt/jdk-17/bin/ to /usr/bin/" + ln -sf /opt/jdk-17/bin/* /usr/bin/ + else + echo "[+]: Java binaries seem to be linked to /usr/bin/ already" + return + fi + + # Settting up the JRE Certificate Authority Certificates + # ln -sfv /etc/pki/tls/java/cacerts /opt/jdk/lib/security/cacerts +} + +pre_remove() { + cd /usr/bin + + # Remove all java blobs + rm -f jar javadoc jdb jhsdb jmap jrunscript jstatd jarsigner javap jdeprscan jimage \ + jmod jshell keytool java jcmd jdeps jinfo jpackage jstack rmiregistry javac \ + jconsole jfr jlink jps jstat serialver + + # Remove JRE Certs link + # rm /opt/jdk/lib/security/cacerts +} diff --git a/x86_64/extra/openjpeg/PKGBUILD b/x86_64/extra/openjpeg/PKGBUILD new file mode 100644 index 0000000..5bf282a --- /dev/null +++ b/x86_64/extra/openjpeg/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=openjpeg +pkgver=2.5.0 +pkgrel=1 +arch=('x86_64') +depends=(glibc lcms libpng libtiff) +makedepends=(cmake doxygen) +source=(https://github.com/uclouvain/openjpeg/archive/v$pkgver/openjpeg-$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D BUILD_STATIC_LIBS=ON \ + .. + + make +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/openldap/PKGBUILD b/x86_64/extra/openldap/PKGBUILD new file mode 100644 index 0000000..8d0c5d7 --- /dev/null +++ b/x86_64/extra/openldap/PKGBUILD @@ -0,0 +1,113 @@ +pkgname=(openldap) +pkgver=2.6.1 +pkgrel=1 +arch=('x86_64') +depends=('e2fsprogs' 'util-linux' 'chrpath' 'unixodbc' 'libsodium' 'systemd') +makedepends=('groff' 'libtool') +options=('!makeflags' 'emptydirs' '!lto') +backup=('etc/openldap/ldap.conf' + 'etc/openldap/slapd.conf' + 'etc/openldap/slapd.ldif') +source=( +https://www.openldap.org/software/download/OpenLDAP/openldap-release/${pkgname}-${pkgver}.tgz +openldap.tmpfiles +openldap.sysusers) + +# extra modules found in contrib/slapd-modules +_extra_modules=( +'nssov' +'autogroup' +'lastbind' +'passwd/sha2' +) + +prepare() { + cd ${pkgname}-${pkgver} + + # change perms from 0644 to 0755 + sed -i 's|-m 644 $(LIBRARY)|-m 755 $(LIBRARY)|' libraries/{liblber,libldap}/Makefile.in + + # change rundir to /run/openldap + sed -i 's|#define LDAPI_SOCK LDAP_RUNDIR LDAP_DIRSEP "run" LDAP_DIRSEP "ldapi"|#define LDAPI_SOCK LDAP_DIRSEP "run" LDAP_DIRSEP "openldap" LDAP_DIRSEP "ldapi"|' include/ldap_defaults.h + sed -i 's|%LOCALSTATEDIR%/run|/run/openldap|' servers/slapd/slapd.{conf,ldif} + sed -i 's|-$(MKDIR) $(DESTDIR)$(localstatedir)/run|-$(MKDIR) $(DESTDIR)/run/openldap|' servers/slapd/Makefile.in + + # modify upstream systemd service + sed -i -e "s|EnvironmentFile.*|EnvironmentFile=-/etc/conf.d/slapd|" -e "s/slapd -d 0/\0 -u ldap -g ldap/" servers/slapd/slapd.service + + autoconf +} + +build() { + cd ${pkgname}-${pkgver} + + ./configure \ + --prefix=/usr \ + --libexecdir=/usr/lib \ + --sysconfdir=/etc \ + --localstatedir=/var/lib/openldap \ + --sbindir=/usr/bin \ + --enable-dynamic \ + --enable-syslog \ + --enable-ipv6 \ + --enable-local \ + --enable-crypt \ + --disable-spasswd \ + --enable-modules \ + --enable-backends \ + --enable-argon2 \ + --with-argon2=libsodium \ + --disable-wt \ + --enable-overlays=mod \ + --without-cyrus-sasl \ + --with-threads + + make + + # build extra modules + for module in "${_extra_modules[@]}"; do + make -C "contrib/slapd-modules/$module" \ + OPT="$CFLAGS $CPPFLAGS" \ + prefix=/usr \ + libexecdir=/usr/lib \ + sysconfdir=/etc/openldap + done +} + +package() { + cd ${pkgname}-${pkgver} + + for dir in include libraries doc/man/man3 clients servers doc/man/man{1,5,8} ; do + pushd ${dir} + make DESTDIR="${pkgdir}" install + popd + done + + install -Dm644 -t "$pkgdir/usr/share/man/man5" doc/man/man5/ldap.conf.5 + + # remove duplicate conf files + rm "${pkgdir}"/etc/openldap/*.default + + # shared library versioning + ln -sf liblber.so "${pkgdir}"/usr/lib/liblber.so.2 + ln -sf libldap.so "${pkgdir}"/usr/lib/libldap.so.2 + + # install extra modules + for module in "${_extra_modules[@]}"; do + make -C "contrib/slapd-modules/$module" \ + prefix=/usr \ + libexecdir=/usr/lib \ + sysconfdir=/etc/openldap \ + DESTDIR="$pkgdir" install + + # passwd/sha2 has no man page, so skip it + if [ "$module" != "passwd/sha2" ]; then + install -m644 -t "$pkgdir/usr/share/man/man5" \ + "contrib/slapd-modules/$module/slapo-$module.5" + fi + done + + # systemd integration + install -Dm644 "${srcdir}"/openldap.tmpfiles "${pkgdir}"/usr/lib/tmpfiles.d/openldap.conf + install -Dm644 "${srcdir}"/openldap.sysusers "${pkgdir}"/usr/lib/sysusers.d/openldap.conf +} diff --git a/x86_64/extra/openldap/openldap.sysusers b/x86_64/extra/openldap/openldap.sysusers new file mode 100644 index 0000000..362d6c1 --- /dev/null +++ b/x86_64/extra/openldap/openldap.sysusers @@ -0,0 +1 @@ +u ldap 439 "LDAP Server" /var/lib/openldap diff --git a/x86_64/extra/openldap/openldap.tmpfiles b/x86_64/extra/openldap/openldap.tmpfiles new file mode 100644 index 0000000..9337fce --- /dev/null +++ b/x86_64/extra/openldap/openldap.tmpfiles @@ -0,0 +1,3 @@ +D /run/openldap 0755 ldap ldap - + +f /var/lib/openldap/.placeholder 0644 ldap ldap - "prevent pwcheck error; pacman should not remove ~ldap" diff --git a/x86_64/extra/opensc/0f7082ea46562b15221f428860b993e0519c6cbd.patch b/x86_64/extra/opensc/0f7082ea46562b15221f428860b993e0519c6cbd.patch new file mode 100644 index 0000000..d6d9aa1 --- /dev/null +++ b/x86_64/extra/opensc/0f7082ea46562b15221f428860b993e0519c6cbd.patch @@ -0,0 +1,30 @@ +From 0f7082ea46562b15221f428860b993e0519c6cbd Mon Sep 17 00:00:00 2001 +From: Veronika Hanulikova +Date: Wed, 16 Feb 2022 11:59:27 +0100 +Subject: [PATCH] Fix usage of pointer after realloc + +--- + src/sm/sm-iso.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/sm/sm-iso.c b/src/sm/sm-iso.c +index 5baded77c6..2c3f6bcabd 100644 +--- a/src/sm/sm-iso.c ++++ b/src/sm/sm-iso.c +@@ -181,13 +181,14 @@ static int format_le(size_t le, struct sc_asn1_entry *le_entry, + + static int prefix_buf(u8 prefix, u8 *buf, size_t buflen, u8 **cat) + { +- u8 *p; ++ u8 *p = NULL; ++ int ptr_same = *cat == buf; + + p = realloc(*cat, buflen + 1); + if (!p) + return SC_ERROR_OUT_OF_MEMORY; + +- if (*cat == buf) { ++ if (ptr_same) { + memmove(p + 1, p, buflen); + } else { + /* Flawfinder: ignore */ diff --git a/x86_64/extra/opensc/PKGBUILD b/x86_64/extra/opensc/PKGBUILD new file mode 100644 index 0000000..128ae0c --- /dev/null +++ b/x86_64/extra/opensc/PKGBUILD @@ -0,0 +1,46 @@ +pkgname=opensc +pkgver=0.22.0 +pkgrel=1 +arch=(x86_64) +depends=(readline glib2 pcsc-lite openssl) +makedepends=(docbook-xml docbook-xsl) +options=(!lto) +source=(https://github.com/OpenSC/OpenSC/releases/download/$pkgver/opensc-$pkgver.tar.gz + https://github.com/OpenSC/OpenSC/commit/0f7082ea46562b15221f428860b993e0519c6cbd.patch) + +prepare() { + cd $pkgname-$pkgver + + # Fix usage of pointer after realloc + patch -p1 -i ../0f7082ea46562b15221f428860b993e0519c6cbd.patch + + ./bootstrap +} + +build() { + cd $pkgname-$pkgver + + sheetdir=(/usr/share/xml/docbook/xsl-stylesheets-*-nons) + + ./configure \ + --prefix=/usr \ + --with-completiondir=/usr/share/bash-completion/completions \ + --enable-doc \ + --enable-man \ + --enable-readline \ + --enable-openssl \ + --enable-pcsc \ + --enable-zlib \ + --enable-sm \ + --with-xsl-stylesheetsdir="$sheetdir" + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + + install -D -m644 etc/opensc.conf $pkgdir/etc/opensc.conf +} diff --git a/x86_64/extra/openssh/PKGBUILD b/x86_64/extra/openssh/PKGBUILD new file mode 100644 index 0000000..1bbffd3 --- /dev/null +++ b/x86_64/extra/openssh/PKGBUILD @@ -0,0 +1,25 @@ +pkgname= +pkgver= +pkgrel=1 +arch=('x86_64') +depends=() +makedepends=() +source=() + +prepare() { + cd $pkgname-$pkgver + + +} + +build() { + cd $pkgname-$pkgver + + +} + +package() { + cd $pkgname-$pkgver + + +} diff --git a/x86_64/extra/openssh/glibc-2.31.patch b/x86_64/extra/openssh/glibc-2.31.patch new file mode 100644 index 0000000..1870428 --- /dev/null +++ b/x86_64/extra/openssh/glibc-2.31.patch @@ -0,0 +1,100 @@ +From beee0ef61866cb567b9abc23bd850f922e59e3f0 Mon Sep 17 00:00:00 2001 +From: Darren Tucker +Date: Wed, 13 Nov 2019 23:19:35 +1100 +Subject: [PATCH] seccomp: Allow clock_nanosleep() in sandbox. + +seccomp: Allow clock_nanosleep() to make OpenSSH working with latest +glibc. Patch from Jakub Jelen via bz #3093. +--- + sandbox-seccomp-filter.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/sandbox-seccomp-filter.c b/sandbox-seccomp-filter.c +index b5cda70bb..96ab141f7 100644 +--- a/sandbox-seccomp-filter.c ++++ b/sandbox-seccomp-filter.c +@@ -242,6 +242,12 @@ static const struct sock_filter preauth_insns[] = { + #ifdef __NR_nanosleep + SC_ALLOW(__NR_nanosleep), + #endif ++#ifdef __NR_clock_nanosleep ++ SC_ALLOW(__NR_clock_nanosleep), ++#endif ++#ifdef __NR_clock_nanosleep ++ SC_ALLOW(__NR_clock_nanosleep), ++#endif + #ifdef __NR__newselect + SC_ALLOW(__NR__newselect), + #endif +From 69298ebfc2c066acee5d187eac8ce9f38c796630 Mon Sep 17 00:00:00 2001 +From: Darren Tucker +Date: Wed, 13 Nov 2019 23:27:31 +1100 +Subject: [PATCH] Remove duplicate __NR_clock_nanosleep + +--- + sandbox-seccomp-filter.c | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/sandbox-seccomp-filter.c b/sandbox-seccomp-filter.c +index 96ab141f7..be2397671 100644 +--- a/sandbox-seccomp-filter.c ++++ b/sandbox-seccomp-filter.c +@@ -245,9 +245,6 @@ static const struct sock_filter preauth_insns[] = { + #ifdef __NR_clock_nanosleep + SC_ALLOW(__NR_clock_nanosleep), + #endif +-#ifdef __NR_clock_nanosleep +- SC_ALLOW(__NR_clock_nanosleep), +-#endif + #ifdef __NR__newselect + SC_ALLOW(__NR__newselect), + #endif +From 030b4c2b8029563bc8a9fd764288fde08fa2347c Mon Sep 17 00:00:00 2001 +From: Darren Tucker +Date: Mon, 16 Dec 2019 13:55:56 +1100 +Subject: [PATCH] Allow clock_nanosleep_time64 in seccomp sandbox. + +Needed on Linux ARM. bz#3100, patch from jjelen@redhat.com. +--- + sandbox-seccomp-filter.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/sandbox-seccomp-filter.c b/sandbox-seccomp-filter.c +index be2397671..3ef30c9d5 100644 +--- a/sandbox-seccomp-filter.c ++++ b/sandbox-seccomp-filter.c +@@ -245,6 +245,9 @@ static const struct sock_filter preauth_insns[] = { + #ifdef __NR_clock_nanosleep + SC_ALLOW(__NR_clock_nanosleep), + #endif ++#ifdef __NR_clock_nanosleep_time64 ++ SC_ALLOW(__NR_clock_nanosleep_time64), ++#endif + #ifdef __NR__newselect + SC_ALLOW(__NR__newselect), + #endif +From a991cc5ed5a7c455fefe909a30cf082011ef5dff Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Tue, 7 Jan 2020 16:26:45 -0800 +Subject: [PATCH] seccomp: Allow clock_gettime64() in sandbox. + +This helps sshd accept connections on mips platforms with +upcoming glibc ( 2.31 ) +--- + sandbox-seccomp-filter.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/sandbox-seccomp-filter.c b/sandbox-seccomp-filter.c +index 3ef30c9d5..999c46c9f 100644 +--- a/sandbox-seccomp-filter.c ++++ b/sandbox-seccomp-filter.c +@@ -248,6 +248,9 @@ static const struct sock_filter preauth_insns[] = { + #ifdef __NR_clock_nanosleep_time64 + SC_ALLOW(__NR_clock_nanosleep_time64), + #endif ++#ifdef __NR_clock_gettime64 ++ SC_ALLOW(__NR_clock_gettime64), ++#endif + #ifdef __NR__newselect + SC_ALLOW(__NR__newselect), + #endif diff --git a/x86_64/extra/openssh/sshd.conf b/x86_64/extra/openssh/sshd.conf new file mode 100644 index 0000000..ca2a393 --- /dev/null +++ b/x86_64/extra/openssh/sshd.conf @@ -0,0 +1 @@ +d /var/empty 0755 root root diff --git a/x86_64/extra/openssh/sshd.pam b/x86_64/extra/openssh/sshd.pam new file mode 100644 index 0000000..7ecef08 --- /dev/null +++ b/x86_64/extra/openssh/sshd.pam @@ -0,0 +1,6 @@ +#%PAM-1.0 +#auth required pam_securetty.so #disable remote root +auth include system-remote-login +account include system-remote-login +password include system-remote-login +session include system-remote-login diff --git a/x86_64/extra/openssh/sshd.service b/x86_64/extra/openssh/sshd.service new file mode 100644 index 0000000..a893724 --- /dev/null +++ b/x86_64/extra/openssh/sshd.service @@ -0,0 +1,14 @@ +[Unit] +Description=OpenSSH Daemon +Wants=sshdgenkeys.service +After=sshdgenkeys.service +After=network.target + +[Service] +ExecStart=/usr/bin/sshd -D +ExecReload=/bin/kill -HUP $MAINPID +KillMode=process +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/x86_64/extra/openssh/sshdgenkeys.service b/x86_64/extra/openssh/sshdgenkeys.service new file mode 100644 index 0000000..cfb9f6a --- /dev/null +++ b/x86_64/extra/openssh/sshdgenkeys.service @@ -0,0 +1,15 @@ +[Unit] +Description=SSH Key Generation +ConditionPathExists=|!/etc/ssh/ssh_host_dsa_key +ConditionPathExists=|!/etc/ssh/ssh_host_dsa_key.pub +ConditionPathExists=|!/etc/ssh/ssh_host_ecdsa_key +ConditionPathExists=|!/etc/ssh/ssh_host_ecdsa_key.pub +ConditionPathExists=|!/etc/ssh/ssh_host_ed25519_key +ConditionPathExists=|!/etc/ssh/ssh_host_ed25519_key.pub +ConditionPathExists=|!/etc/ssh/ssh_host_rsa_key +ConditionPathExists=|!/etc/ssh/ssh_host_rsa_key.pub + +[Service] +ExecStart=/usr/bin/ssh-keygen -A +Type=oneshot +RemainAfterExit=yes diff --git a/x86_64/extra/opus/PKGBUILD b/x86_64/extra/opus/PKGBUILD new file mode 100644 index 0000000..03669a5 --- /dev/null +++ b/x86_64/extra/opus/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=opus +pkgver=1.3.1 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(doxygen) +source=(https://archive.mozilla.org/pub/opus/opus-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/p7zip/PKGBUILD b/x86_64/extra/p7zip/PKGBUILD new file mode 100644 index 0000000..1a18135 --- /dev/null +++ b/x86_64/extra/p7zip/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=p7zip +pkgver=17.04 +pkgrel=2 +arch=('x86_64') +depends=(glibc xorg-server) +source=(https://github.com/jinfeihan57/p7zip/archive/v17.04/$pkgname-$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + sed '/^gzip/d' -i install.sh + + sed -i '160a if(_buffer == nullptr || _size == _pos) return E_FAIL;' CPP/7zip/Common/StreamObjects.cpp +} + +build() { + cd $pkgname-$pkgver + + make all3 +} + +package() { + cd $pkgname-$pkgver + + make \ + DEST_DIR="$pkgdir" \ + DEST_HOME=/usr \ + DEST_MAN=/usr/share/man \ + DEST_SHARE_DOC=/usr/share/doc/p7zip install +} diff --git a/x86_64/extra/packagekit-qt5/PKGBUILD b/x86_64/extra/packagekit-qt5/PKGBUILD new file mode 100644 index 0000000..e2e42ab --- /dev/null +++ b/x86_64/extra/packagekit-qt5/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=packagekit-qt5 +pkgver=1.0.2 +pkgrel=1 +arch=('x86_64') +depends=('packagekit' 'qt5') +makedepends=('cmake') +source=("https://github.com/hughsie/PackageKit-Qt/releases/download/v$pkgver/PackageKit-Qt-$pkgver.tar.xz") + +build() { + mkdir -p PackageKit-Qt-${pkgver}/build + cd PackageKit-Qt-${pkgver}/build + + cmake .. \ + -D CMAKE_INSTALL_PREFIX=/usr + + make +} + +package() { + cd PackageKit-Qt-${pkgver}/build + + make DESTDIR="${pkgdir}" install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/extra/packagekit/PKGBUILD b/x86_64/extra/packagekit/PKGBUILD new file mode 100644 index 0000000..780fc6c --- /dev/null +++ b/x86_64/extra/packagekit/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=packagekit +pkgver=1.2.5 +pkgrel=3 +arch=('x86_64') +makedepends=('polkit' 'sqlite3' 'gobject-introspection' 'intltool' + 'bash-completion' 'vala' 'meson') +options=('!emptydirs') +commitid=8abe2d65bdc6950a7627ad89609cbb3fe446bcbb # Finish TODO's +source=("git+https://git.it-kuny.ch/drunk/source-code/packagekit#commit=$commitid") +backup=('var/lib/PackageKit/transactions.db' + 'etc/PackageKit/alpm.d/bottle.conf' + 'etc/PackageKit/alpm.d/repos.list') + +build() { + meson "packagekit" build \ + --prefix=/usr \ + -D cron=false \ + -D dbus_sys=/usr/share/dbus-1/system.d \ + -D gstreamer_plugin=false \ + -D gtk_doc=false \ + -D gtk_module=false \ + -D packaging_backend=alpm \ + -D alpm_package_manager=bottle \ + -D systemd=true + + ninja -C build +} + +package_packagekit() { + # install directory with root owner, polkit group and + # correct permission + install -d -o root -g 102 -m 750 "${pkgdir}/usr/share/polkit-1/rules.d" + + DESTDIR="$pkgdir" meson install -C build +} diff --git a/x86_64/extra/pamtester/PKGBUILD b/x86_64/extra/pamtester/PKGBUILD new file mode 100644 index 0000000..546e54b --- /dev/null +++ b/x86_64/extra/pamtester/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=pamtester +pkgver=0.1.2 +pkgrel=1 +arch=(x86_64) +depends=(linux-pam) +source=("http://sourceforge.net/projects/pamtester/files/pamtester/$pkgver/pamtester-$pkgver.tar.gz") +prepare() { + cd "$pkgname-$pkgver" + + autoreconf -fi +} + +build() { + cd "$pkgname-$pkgver" + + ./configure --prefix=/usr --mandir=/usr/share/man + + make +} + +package() { + cd "$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install +} \ No newline at end of file diff --git a/x86_64/extra/pango/PKGBUILD b/x86_64/extra/pango/PKGBUILD new file mode 100644 index 0000000..967978a --- /dev/null +++ b/x86_64/extra/pango/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=pango +pkgver=1.50.7 +pkgrel=1 +arch=('x86_64') +depends=(fontconfig freetype2 libxft harfbuzz fribidi glib2 cairo) +makedepends=(gobject-introspection) +source=(https://download.gnome.org/sources/$pkgname/1.50/$pkgname-$pkgver.tar.xz) + +prepare() { + mkdir -p $pkgname-$pkgver/build +} + +build() { + cd $pkgname-$pkgver/build + + meson \ + --prefix=/usr \ + --buildtype=release \ + --wrap-mode=nofallback \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/pangomm/PKGBUILD b/x86_64/extra/pangomm/PKGBUILD new file mode 100644 index 0000000..54f9bcd --- /dev/null +++ b/x86_64/extra/pangomm/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=pangomm +pkgver=2.46.2 +pkgrel=1 +arch=('x86_64') +depends=(cairomm glibmm pango) +source=(https://download.gnome.org/sources/$pkgname/2.46/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + meson \ + --prefix=/usr \ + --buildtype=release \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/parted/PKGBUILD b/x86_64/extra/parted/PKGBUILD new file mode 100644 index 0000000..f149f11 --- /dev/null +++ b/x86_64/extra/parted/PKGBUILD @@ -0,0 +1,33 @@ +pkgname=parted +pkgver=3.4 +pkgrel=1 +arch=('x86_64') +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + sed -i '/utsname.h/a#include ' libparted/arch/linux.c + ./configure --prefix=/usr \ + --disable-static \ + --disable-device-mapper + make +# make -C doc html +# makeinfo --html -o doc/html doc/parted.texi +# makeinfo --plaintext -o doc/parted.txt doc/parted.texi + +# texi2pdf -o doc/parted.pdf doc/parted.texi +# texi2dvi -o doc/parted.dvi doc/parted.texi +# dvips -o doc/parted.ps doc/parted.dvi +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + +# install -v -m755 -d $pkgdir/usr/share/doc/parted-3.4/html +# install -v -m644 doc/html/* $pkgdir/usr/share/doc/parted-3.4/html +# install -v -m644 doc{FAT,API,parted,{txt,html}} $pkgdir/usr./share/doc/parted-3.4 + +# install -v -m644 doc/FAT doc/API doc/parted,{pdf,ps,dvi} $pkgdir/usr/share/doc/parted-3.4 +} diff --git a/x86_64/extra/patch/PKGBUILD b/x86_64/extra/patch/PKGBUILD new file mode 100644 index 0000000..600c019 --- /dev/null +++ b/x86_64/extra/patch/PKGBUILD @@ -0,0 +1,17 @@ +pkgname=patch +pkgver=2.7.6 +pkgrel=1 +arch=('x86_64') +source=(https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/patchelf/PKGBUILD b/x86_64/extra/patchelf/PKGBUILD new file mode 100644 index 0000000..b48d267 --- /dev/null +++ b/x86_64/extra/patchelf/PKGBUILD @@ -0,0 +1,19 @@ +pkgname= +pkgver= +pkgrel=1 +arch=('x86_64') +depends=() +makedepends=() +source=() + +prepare() { + +} + +build() { + +} + +package() { + +} diff --git a/x86_64/extra/pavucontrol/PKGBUILD b/x86_64/extra/pavucontrol/PKGBUILD new file mode 100644 index 0000000..f81f36a --- /dev/null +++ b/x86_64/extra/pavucontrol/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=pavucontrol +pkgver=5.0 +pkgrel=2 +arch=('x86_64') +depends=(gtkmm json-glib libcanberra libsigc++ pulseaudio) +source=(https://freedesktop.org/software/pulseaudio/$pkgname/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --enable-gtk3 + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/pcsc-lite/PKGBUILD b/x86_64/extra/pcsc-lite/PKGBUILD new file mode 100644 index 0000000..3056e1f --- /dev/null +++ b/x86_64/extra/pcsc-lite/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=pcsc-lite +pkgver=1.9.8 +pkgrel=1 +arch=(x86_64) +depends=(python3 systemd) +makedepends=(make) +source=(https://pcsclite.apdu.fr/files/$pkgname-${pkgver}.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-filter \ + --enable-ipcdir=/run/pcscd \ + --enable-libudev \ + --enable-usbdropdir=/usr/lib/pcsc/drivers \ + --with-systemdsystemunitdir=/usr/lib/systemd/system + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/perl/PKGBUILD b/x86_64/extra/perl/PKGBUILD new file mode 100644 index 0000000..be80ad4 --- /dev/null +++ b/x86_64/extra/perl/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=perl +pkgver=5.34.0 +pkgrel=2 +arch=('x86_64') +depends=(libxcrypt) +source=(https://www.cpan.org/src/5.0/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + export BUILD_ZLIB=False + export BUILD_BZIP2=0 + + sh Configure -des -Dprefix=/usr \ + -Dvendorprefix=/usr \ + -Dman1dir=/usr/share/man/man1 \ + -Dman3dir=/usr/share/man/man3 \ + -Dpager="/usr/bin/less -isR" \ + -Duseshrplib \ + -Dusethreads + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/pipewire/PKGBUILD b/x86_64/extra/pipewire/PKGBUILD new file mode 100644 index 0000000..8c56d31 --- /dev/null +++ b/x86_64/extra/pipewire/PKGBUILD @@ -0,0 +1,40 @@ +pkgname=pipewire +commitid=f274e53d25ee8f483ac6fce9e516bb1830abe88b # tags/0.3.56 +pkgver=0.3.56 +pkgrel=1 +arch=(x86_64) +makedepends=(git meson doxygen python3 valgrind pulseaudio + alsa-lib libusb gst-plugins-base dbus sdl2 ncurses + libcanberra libsndfile bluez webrtc-audio-processing libx11 libxfixes jack2) +source=("git+https://gitlab.freedesktop.org/pipewire/pipewire.git#commit=$commitid") +install=pipewire.install + +prepare() { + cd pipewire + + # remove export of LD_LIBRARY_PATH for pw-jack as it would add /usr/lib + sed -i '/LD_LIBRARY_PATH/d' pipewire-jack/src/pw-jack.in +} + +build() { + meson pipewire build \ + --prefix=/usr \ + -D docs=enabled \ + -D jack=enabled \ + -D jack-devel=true \ + -D libjack-path=/usr/lib \ + -D libcamera=disabled \ + -D udevrulesdir=/usr/lib/udev/rules.d \ + -D roc=disabled \ + -D session-managers=[] + + meson compile -C build +} + +package() { + meson install -C build --destdir "$pkgdir" + + rm -rf $pkgdir/usr/include/jack + rm -rf $pkgdir/usr/lib/libjack* + rm -rf $pkgdir/usr/lib/pkgconfig/jack.pc +} diff --git a/x86_64/extra/pipewire/pipewire.install b/x86_64/extra/pipewire/pipewire.install new file mode 100644 index 0000000..dbe4dad --- /dev/null +++ b/x86_64/extra/pipewire/pipewire.install @@ -0,0 +1,10 @@ +post_install() { + # Enable socket by default + systemctl --global enable pipewire.socket + systemctl --global enable pipewire-pulse.socket +} + +pre_remove() { + systemctl --global disable pipewire.socket + systemctl --global disable pipewire-pulse.socket +} diff --git a/x86_64/extra/pixman/PKGBUILD b/x86_64/extra/pixman/PKGBUILD new file mode 100644 index 0000000..7d1fa95 --- /dev/null +++ b/x86_64/extra/pixman/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=pixman +pkgver=0.40.0 +pkgrel=1 +arch=('x86_64') +depends=(libpng) +source=(https://cairographics.org/releases/$pkgname-$pkgver.tar.gz) + +prepare() { + mkdir -p $pkgname-$pkgver/build +} + +build() { + cd $pkgname-$pkgver/build + + meson --prefix=/usr --buildtype=release + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/pkcs11-helper/PKGBUILD b/x86_64/extra/pkcs11-helper/PKGBUILD new file mode 100644 index 0000000..a250106 --- /dev/null +++ b/x86_64/extra/pkcs11-helper/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=pkcs11-helper +pkgver=1.28.0 +pkgrel=1 +arch=(x86_64) +depends=(gnutls nss openssl) +source=(https://github.com/OpenSC/${pkgname}/releases/download/${pkgname}-${pkgver%.0}/${pkgname}-${pkgver}.tar.bz2) + +build() { + cd $pkgname-$pkgver + + libtoolize + aclocal + autoheader + automake --add-missing + autoreconf -v + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install +} diff --git a/x86_64/extra/plymouth/PKGBUILD b/x86_64/extra/plymouth/PKGBUILD new file mode 100644 index 0000000..dc69274 --- /dev/null +++ b/x86_64/extra/plymouth/PKGBUILD @@ -0,0 +1,57 @@ +pkgname=plymouth +pkgver=22.02.122 +pkgrel=1 +arch=('x86_64') +depends=(libdrm pango systemd ttf-dejavu xf86-video-fbdev cantarell-fonts gtk3+) +makedepends=(docbook-xml docbook-xsl) +backup=(etc/plymouth/plymouthd.conf) +commitid=(bfc3a2dd0fb73ac549c165cb2ff2f1c669888349) +source=(git+https://github.com/Drunk-Linux/plymouth.git#commit=$commitid + sddm-plymouth.service + lightdm-plymouth.service + plymouth-deactivate.service) + +prepare() { + cd $pkgname + + autoreconf --install --symlink -Wno-portability +} + +build() { + cd $pkgname + + LDFLAGS+=" -ludev" \ + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --with-runtimedir=/run \ + --enable-systemd-integration \ + --enable-drm \ + --enable-tracking \ + --enable-pango \ + --enable-gtk \ + --with-release-file=/etc/os-release \ + --without-rhgb-compat-link \ + --without-system-root-install + + make -j4 + +} + +package() { + cd $pkgname + + make DESTDIR=$pkgdir install + + # /var/run -> /run for us and conflicts when installed by pkg + mkdir -p $pkgdir/var $pkgdir/run + mv -f $pkgdir/var/run/* $pkgdir/run/ + rm -r $pkgdir/var/run + + # Some services that are from https://aur.archlinux.org/cgit/aur.git/tree/?h=plymouth + install -Dm644 $srcdir/sddm-plymouth.service $pkgdir/usr/lib/systemd/system/sddm-plymouth.service + install -Dm644 $srcdir/lightdm-plymouth.service $pkgdir/usr/lib/systemd/system/lightdm-plymouth.service + + install -Dm644 $srcdir/plymouth-deactivate.service $pkgdir/usr/lib/systemd/system/plymouth-deactivate.service +} diff --git a/x86_64/extra/plymouth/lightdm-plymouth.service b/x86_64/extra/plymouth/lightdm-plymouth.service new file mode 100644 index 0000000..0ce7ddc --- /dev/null +++ b/x86_64/extra/plymouth/lightdm-plymouth.service @@ -0,0 +1,13 @@ +[Unit] +Description=Light Display Manager +Conflicts=getty@tty1.service plymouth-quit.service +After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service + +[Service] +ExecStart=/usr/sbin/lightdm +Restart=always +IgnoreSIGPIPE=no +BusName=org.freedesktop.DisplayManager + +[Install] +Alias=display-manager.service diff --git a/x86_64/extra/plymouth/plymouth-deactivate.service b/x86_64/extra/plymouth/plymouth-deactivate.service new file mode 100644 index 0000000..6f1d87e --- /dev/null +++ b/x86_64/extra/plymouth/plymouth-deactivate.service @@ -0,0 +1,10 @@ +[Unit] +Description=Deactivate Plymouth Boot Screen +After=rc-local.service plymouth-start.service systemd-user-sessions.service +Before=getty@tty1.service + +[Service] +ExecStart=/usr/bin/plymouth deactivate +Type=oneshot +TimeoutSec=20 +RemainAfterExit=yes diff --git a/x86_64/extra/plymouth/sddm-plymouth.service b/x86_64/extra/plymouth/sddm-plymouth.service new file mode 100644 index 0000000..49fcf22 --- /dev/null +++ b/x86_64/extra/plymouth/sddm-plymouth.service @@ -0,0 +1,13 @@ +[Unit] +Description=Simple Desktop Display Manager +Documentation=man:sddm(1) man:sddm.conf(5) +Conflicts=getty@tty1.service +Wants=plymouth-deactivate.service +After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service systemd-logind.service plymouth-deactivate.service + +[Service] +ExecStart=/usr/bin/sddm +Restart=always + +[Install] +Alias=display-manager.service diff --git a/x86_64/extra/polkit-gnome/0001-Select-the-current-user-to-authenticate-with-by-defa.patch b/x86_64/extra/polkit-gnome/0001-Select-the-current-user-to-authenticate-with-by-defa.patch new file mode 100644 index 0000000..91f67bb --- /dev/null +++ b/x86_64/extra/polkit-gnome/0001-Select-the-current-user-to-authenticate-with-by-defa.patch @@ -0,0 +1,78 @@ +From: Utopia Maintenance Team + +Date: Mon, 30 Apr 2018 17:56:52 +0000 +Subject: Select the current user to authenticate with by default + +Bug: http://bugzilla.gnome.org/show_bug.cgi?id=596188 +Bug-Ubuntu: https://launchpad.net/bugs/435227 +--- + src/polkitgnomeauthenticationdialog.c | 23 ++++++++++++++--------- + 1 file changed, 14 insertions(+), 9 deletions(-) + +diff --git a/src/polkitgnomeauthenticationdialog.c b/src/polkitgnomeauthenticationdialog.c +index 743cc96..d307516 100644 +--- a/src/polkitgnomeauthenticationdialog.c ++++ b/src/polkitgnomeauthenticationdialog.c +@@ -138,7 +138,7 @@ user_combobox_changed (GtkComboBox *widget, + static void + create_user_combobox (PolkitGnomeAuthenticationDialog *dialog) + { +- int n; ++ int n, i, selected_index = 0; + GtkComboBox *combo; + GtkTreeIter iter; + GtkCellRenderer *renderer; +@@ -162,7 +162,7 @@ create_user_combobox (PolkitGnomeAuthenticationDialog *dialog) + + + /* For each user */ +- for (n = 0; dialog->priv->users[n] != NULL; n++) ++ for (i = 0, n = 0; dialog->priv->users[n] != NULL; n++) + { + gchar *gecos; + gchar *real_name; +@@ -224,6 +224,14 @@ create_user_combobox (PolkitGnomeAuthenticationDialog *dialog) + USERNAME_COL, dialog->priv->users[n], + -1); + ++ i++; ++ if (passwd->pw_uid == getuid ()) ++ { ++ selected_index = i; ++ g_free (dialog->priv->selected_user); ++ dialog->priv->selected_user = g_strdup (dialog->priv->users[n]); ++ } ++ + g_free (real_name); + g_object_unref (pixbuf); + } +@@ -252,8 +260,8 @@ create_user_combobox (PolkitGnomeAuthenticationDialog *dialog) + user_combobox_set_sensitive, + NULL, NULL); + +- /* Initially select the "Select user..." ... */ +- gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); ++ /* Select the default user */ ++ gtk_combo_box_set_active (GTK_COMBO_BOX (combo), selected_index); + + /* Listen when a new user is selected */ + g_signal_connect (GTK_WIDGET (combo), +@@ -719,16 +727,13 @@ polkit_gnome_authentication_dialog_constructed (GObject *object) + gtk_widget_set_tooltip_markup (label, s); + g_free (s); + +- if (have_user_combobox) ++ /* Disable password entry and authenticate until have a user selected */ ++ if (have_user_combobox && gtk_combo_box_get_active (GTK_COMBO_BOX (dialog->priv->user_combobox)) == 0) + { +- /* ... and make the password entry and "Authenticate" button insensitive */ + gtk_widget_set_sensitive (dialog->priv->prompt_label, FALSE); + gtk_widget_set_sensitive (dialog->priv->password_entry, FALSE); + gtk_widget_set_sensitive (dialog->priv->auth_button, FALSE); + } +- else +- { +- } + + gtk_widget_realize (GTK_WIDGET (dialog)); + diff --git a/x86_64/extra/polkit-gnome/0002-Auth-dialog-Make-the-label-wrap-at-70-chars.patch b/x86_64/extra/polkit-gnome/0002-Auth-dialog-Make-the-label-wrap-at-70-chars.patch new file mode 100644 index 0000000..76b96f4 --- /dev/null +++ b/x86_64/extra/polkit-gnome/0002-Auth-dialog-Make-the-label-wrap-at-70-chars.patch @@ -0,0 +1,32 @@ +From: Lars Uebernickel +Date: Fri, 17 Oct 2014 15:35:25 +0200 +Subject: Auth dialog: Make the label wrap at 70 chars + +Because GtkWindow doesn't have a default width anymore. + +Bug: https://bugzilla.gnome.org/show_bug.cgi?id=738688 +Bug-Ubuntu: https://launchpad.net/bugs/1382566 +--- + src/polkitgnomeauthenticationdialog.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/polkitgnomeauthenticationdialog.c b/src/polkitgnomeauthenticationdialog.c +index d307516..efd4185 100644 +--- a/src/polkitgnomeauthenticationdialog.c ++++ b/src/polkitgnomeauthenticationdialog.c +@@ -574,6 +574,7 @@ polkit_gnome_authentication_dialog_constructed (GObject *object) + g_free (s); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); ++ gtk_label_set_max_width_chars (GTK_LABEL (label), 70); + gtk_box_pack_start (GTK_BOX (main_vbox), label, FALSE, FALSE, 0); + + /* secondary message */ +@@ -601,6 +602,7 @@ polkit_gnome_authentication_dialog_constructed (GObject *object) + } + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); ++ gtk_label_set_max_width_chars (GTK_LABEL (label), 70); + gtk_box_pack_start (GTK_BOX (main_vbox), label, FALSE, FALSE, 0); + + /* user combobox */ diff --git a/x86_64/extra/polkit-gnome/0003-Get-user-icon-from-accountsservice-instead-of-lookin.patch b/x86_64/extra/polkit-gnome/0003-Get-user-icon-from-accountsservice-instead-of-lookin.patch new file mode 100644 index 0000000..4314939 --- /dev/null +++ b/x86_64/extra/polkit-gnome/0003-Get-user-icon-from-accountsservice-instead-of-lookin.patch @@ -0,0 +1,135 @@ +From: Marc Deslauriers +Date: Mon, 30 Apr 2018 18:03:22 +0000 +Subject: Get user icon from accountsservice instead of looking in ~/.face + +Bug: https://bugzilla.gnome.org/show_bug.cgi?id=669857 +Bug-Ubuntu: https://launchpad.net/bugs/928249 +--- + src/polkitgnomeauthenticationdialog.c | 107 ++++++++++++++++++++++++++++++---- + 1 file changed, 97 insertions(+), 10 deletions(-) + +diff --git a/src/polkitgnomeauthenticationdialog.c b/src/polkitgnomeauthenticationdialog.c +index efd4185..565da87 100644 +--- a/src/polkitgnomeauthenticationdialog.c ++++ b/src/polkitgnomeauthenticationdialog.c +@@ -135,6 +135,102 @@ user_combobox_changed (GtkComboBox *widget, + } + } + ++static GdkPixbuf * ++get_user_icon (char *username) ++{ ++ GError *error; ++ GDBusConnection *connection; ++ GVariant *find_user_result; ++ GVariant *get_icon_result; ++ GVariant *icon_result_variant; ++ const gchar *user_path; ++ const gchar *icon_filename; ++ GdkPixbuf *pixbuf; ++ ++ error = NULL; ++ connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error); ++ ++ if (connection == NULL) ++ { ++ g_warning ("Unable to connect to system bus: %s", error->message); ++ g_error_free (error); ++ return NULL; ++ } ++ ++ find_user_result = g_dbus_connection_call_sync (connection, ++ "org.freedesktop.Accounts", ++ "/org/freedesktop/Accounts", ++ "org.freedesktop.Accounts", ++ "FindUserByName", ++ g_variant_new ("(s)", ++ username), ++ G_VARIANT_TYPE ("(o)"), ++ G_DBUS_CALL_FLAGS_NONE, ++ -1, ++ NULL, ++ &error); ++ ++ if (find_user_result == NULL) ++ { ++ g_warning ("Accounts couldn't find user: %s", error->message); ++ g_error_free (error); ++ return NULL; ++ } ++ ++ user_path = g_variant_get_string (g_variant_get_child_value (find_user_result, 0), ++ NULL); ++ ++ get_icon_result = g_dbus_connection_call_sync (connection, ++ "org.freedesktop.Accounts", ++ user_path, ++ "org.freedesktop.DBus.Properties", ++ "Get", ++ g_variant_new ("(ss)", ++ "org.freedesktop.Accounts.User", ++ "IconFile"), ++ G_VARIANT_TYPE ("(v)"), ++ G_DBUS_CALL_FLAGS_NONE, ++ -1, ++ NULL, ++ &error); ++ ++ g_variant_unref (find_user_result); ++ ++ if (get_icon_result == NULL) ++ { ++ g_warning ("Accounts couldn't find user icon: %s", error->message); ++ g_error_free (error); ++ return NULL; ++ } ++ ++ g_variant_get_child (get_icon_result, 0, "v", &icon_result_variant); ++ icon_filename = g_variant_get_string (icon_result_variant, NULL); ++ ++ if (icon_filename == NULL) ++ { ++ g_warning ("Accounts didn't return a valid filename for user icon"); ++ pixbuf = NULL; ++ } ++ else ++ { ++ /* TODO: we probably shouldn't hard-code the size to 16x16 */ ++ pixbuf = gdk_pixbuf_new_from_file_at_size (icon_filename, ++ 16, ++ 16, ++ &error); ++ if (pixbuf == NULL) ++ { ++ g_warning ("Couldn't open user icon: %s", error->message); ++ g_error_free (error); ++ } ++ } ++ ++ g_variant_unref (icon_result_variant); ++ g_variant_unref (get_icon_result); ++ ++ return pixbuf; ++} ++ + static void + create_user_combobox (PolkitGnomeAuthenticationDialog *dialog) + { +@@ -197,16 +293,7 @@ create_user_combobox (PolkitGnomeAuthenticationDialog *dialog) + g_free (gecos); + + /* Load users face */ +- pixbuf = NULL; +- if (passwd->pw_dir != NULL) +- { +- gchar *path; +- path = g_strdup_printf ("%s/.face", passwd->pw_dir); +- /* TODO: we probably shouldn't hard-code the size to 16x16 */ +- pixbuf = gdk_pixbuf_new_from_file_at_scale (path, 16, 16, TRUE, NULL); +- g_free (path); +- } +- ++ pixbuf = get_user_icon (dialog->priv->users[n]); + /* fall back to avatar-default icon */ + if (pixbuf == NULL) + { diff --git a/x86_64/extra/polkit-gnome/0004-Use-fresh-X11-timestamps-when-displaying-authenticat.patch b/x86_64/extra/polkit-gnome/0004-Use-fresh-X11-timestamps-when-displaying-authenticat.patch new file mode 100644 index 0000000..83ad38d --- /dev/null +++ b/x86_64/extra/polkit-gnome/0004-Use-fresh-X11-timestamps-when-displaying-authenticat.patch @@ -0,0 +1,45 @@ +From: Jeffrey Knockel +Date: Mon, 30 Apr 2018 18:05:20 +0000 +Subject: Use fresh X11 timestamps when displaying authentication dialog + +This circumvents focus-stealing prevention. + +Bug: https://bugzilla.gnome.org/show_bug.cgi?id=676076 +Bug-Debian: https://bugs.debian.org/684300 +Bug-Ubuntu: https://launchpad.net/bugs/946171 +--- + src/polkitgnomeauthenticator.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/polkitgnomeauthenticator.c b/src/polkitgnomeauthenticator.c +index 23163b4..e57d76e 100644 +--- a/src/polkitgnomeauthenticator.c ++++ b/src/polkitgnomeauthenticator.c +@@ -26,6 +26,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -306,7 +307,17 @@ session_request (PolkitAgentSession *session, + } + + gtk_widget_show_all (GTK_WIDGET (authenticator->dialog)); +- gtk_window_present (GTK_WINDOW (authenticator->dialog)); ++ GdkWindow *window = gtk_widget_get_window (GTK_WIDGET (authenticator->dialog)); ++ ++ if (GDK_IS_X11_WINDOW (window)) ++ { ++ gtk_window_present_with_time (GTK_WINDOW (authenticator->dialog), gdk_x11_get_server_time (window)); ++ } ++ else ++ { ++ gtk_window_present (GTK_WINDOW (authenticator->dialog)); ++ } ++ + password = polkit_gnome_authentication_dialog_run_until_response_for_prompt (POLKIT_GNOME_AUTHENTICATION_DIALOG (authenticator->dialog), + modified_request, + echo_on, + diff --git a/x86_64/extra/polkit-gnome/PKGBUILD b/x86_64/extra/polkit-gnome/PKGBUILD new file mode 100644 index 0000000..26ff3a7 --- /dev/null +++ b/x86_64/extra/polkit-gnome/PKGBUILD @@ -0,0 +1,54 @@ +# Maintainer: Balló György +# Contributor: Jan de Groot +# Contributor: onestep_ua + +pkgname=polkit-gnome +pkgver=0.105 +pkgrel=2 +pkgdesc='Legacy polkit authentication agent for GNOME' +arch=('x86_64') +url='https://gitlab.gnome.org/Archive/policykit-gnome' +license=('LGPL') +depends=('gtk+' 'polkit') +makedepends=('intltool') +source=("https://download.gnome.org/sources/$pkgname/$pkgver/$pkgname-$pkgver.tar.xz" + 'polkit-gnome-authentication-agent-1.desktop' + '0001-Select-the-current-user-to-authenticate-with-by-defa.patch' + '0002-Auth-dialog-Make-the-label-wrap-at-70-chars.patch' + '0003-Get-user-icon-from-accountsservice-instead-of-lookin.patch' + '0004-Use-fresh-X11-timestamps-when-displaying-authenticat.patch') +sha256sums=('1784494963b8bf9a00eedc6cd3a2868fb123b8a5e516e66c5eda48df17ab9369' + '5074c723a4eab274830587d799ba781ff57f4fbe4ac99fbdc5aac5009c441ee7' + 'b989f1c7e30f2f9f9ef03f1a06db708d83c4945ee242ca573e7d66b64bf7037f' + '41afbd11bdf4633dc619675862078c23e4b200c888da1569d030c502999b25d8' + '4ee38d2dae6e592040c41ba07caa284135dc232feef5a30acb42c0e28340adce' + '8d278f773f1815cf6d384518749643404fed444bb764305ebba081965152fa9e') + +prepare() { + cd $pkgname-$pkgver + + # Select the current user to authenticate with by default + patch -Np1 -i ../0001-Select-the-current-user-to-authenticate-with-by-defa.patch + + # Auth dialog: Make the label wrap at 70 chars + patch -Np1 -i ../0002-Auth-dialog-Make-the-label-wrap-at-70-chars.patch + + # Get user icon from accountsservice instead of looking in ~/.face + patch -Np1 -i ../0003-Get-user-icon-from-accountsservice-instead-of-lookin.patch + + # Use fresh X11 timestamps when displaying authentication dialog + patch -Np1 -i ../0004-Use-fresh-X11-timestamps-when-displaying-authenticat.patch +} + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --libexecdir=/usr/lib/$pkgname + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR="$pkgdir" install + install -Dm644 "$srcdir/polkit-gnome-authentication-agent-1.desktop" \ + "$pkgdir/etc/xdg/autostart/polkit-gnome-authentication-agent-1.desktop" +} diff --git a/x86_64/extra/polkit-gnome/polkit-gnome-authentication-agent-1.desktop b/x86_64/extra/polkit-gnome/polkit-gnome-authentication-agent-1.desktop new file mode 100644 index 0000000..ea57f11 --- /dev/null +++ b/x86_64/extra/polkit-gnome/polkit-gnome-authentication-agent-1.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=PolicyKit Authentication Agent +Comment=PolicyKit Authentication Agent +Exec=/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 +Terminal=false +Type=Application +Categories= +NoDisplay=true +OnlyShowIn=GNOME;XFCE;Unity; +AutostartCondition=GNOME3 unless-session gnome diff --git a/x86_64/extra/poppler/PKGBUILD b/x86_64/extra/poppler/PKGBUILD new file mode 100644 index 0000000..d55efb5 --- /dev/null +++ b/x86_64/extra/poppler/PKGBUILD @@ -0,0 +1,40 @@ +pkgname=poppler +pkgver=22.08.0 +pkgrel=1 +arch=('x86_64') +depends=(fontconfig openjpeg) +makedepends=(cmake) +source=(https://poppler.freedesktop.org/$pkgname-$pkgver.tar.xz + https://poppler.freedesktop.org/$pkgname-data-0.4.11.tar.gz) + +prepare() { + # poppler + cd $pkgname-$pkgver + mkdir -p build + + # poppler-data + cd ../$pkgname-data-0.4.11 + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D TESTDATADIR=$PWD/testfiles \ + -D ENABLE_UNSTABLE_API_ABI_HEADERS=ON \ + .. + + make +} + +package() { + cd $pkgname-$pkgver/build + make DESTDIR=$pkgdir install + + # poppler-data + cd $srcdir/$pkgname-data-0.4.11 + make prefix=$pkgdir install +} diff --git a/x86_64/extra/ports/PKGBUILD b/x86_64/extra/ports/PKGBUILD new file mode 100644 index 0000000..16ca462 --- /dev/null +++ b/x86_64/extra/ports/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=ports +pkgver=1.6 +pkgrel=2 +arch=('x86_64') +depends=(glibc) +source=(http://crux.nu/files/tools/ports/$pkgname-$pkgver.tar.gz + core.httpup) + +build() { + cd $pkgname-$pkgver + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir MANDIR=/usr/share/man install + + install -m 0644 ../../core.httpup $pkgdir/etc/ports +} diff --git a/x86_64/extra/ports/core.httpup b/x86_64/extra/ports/core.httpup new file mode 100644 index 0000000..44d810b --- /dev/null +++ b/x86_64/extra/ports/core.httpup @@ -0,0 +1,8 @@ +# +# /etc/ports/core.httpup: core's port collection +# + +ROOT_DIR=/usr/ports/core +URL=https://raw.githubusercontent.com/emmett1/lfs-scripts/master/ports/core/ + +# End of file diff --git a/x86_64/extra/potrace/PKGBUILD b/x86_64/extra/potrace/PKGBUILD new file mode 100644 index 0000000..1a673f6 --- /dev/null +++ b/x86_64/extra/potrace/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=potrace +pkgver=1.16 +pkgrel=1 +arch=('x86_64') +depends=(clang) +source=(https://downloads.sourceforge.net/potrace/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-a4 \ + --enable-metric \ + --with-libpotrace + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/protobuf-c/PKGBUILD b/x86_64/extra/protobuf-c/PKGBUILD new file mode 100644 index 0000000..98dc430 --- /dev/null +++ b/x86_64/extra/protobuf-c/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=protobuf-c +pkgver=1.4.0 +pkgrel=1 +arch=('x86_64') +depends=(protobuf) +makedepends=(gcc) +source=(https://github.com/protobuf-c/protobuf-c/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/protobuf/PKGBUILD b/x86_64/extra/protobuf/PKGBUILD new file mode 100644 index 0000000..b918abe --- /dev/null +++ b/x86_64/extra/protobuf/PKGBUILD @@ -0,0 +1,40 @@ +pkgname=protobuf +pkgver=3.19.4 +pkgrel=1 +arch=('x86_64') +depends=(gcc glibc zlib) +makedepends=(python3-pip unzip) +source=(https://github.com/protocolbuffers/$pkgname/releases/download/v$pkgver/$pkgname-all-$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + pip install setuptools + + autoreconf -fi +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make + + cd python + python setup.py build --cpp_implementation +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + cd python + + python setup.py install --skip-build \ + --cpp_implementation \ + --optimize=1 \ + --root="$pkgdir" +} diff --git a/x86_64/extra/psmisc/PKGBUILD b/x86_64/extra/psmisc/PKGBUILD new file mode 100644 index 0000000..f0e79db --- /dev/null +++ b/x86_64/extra/psmisc/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=psmisc +pkgver=23.4 +pkgrel=2 +arch=('x86_64') +depends=(ncurses) +source=(https://sourceforge.net/projects/psmisc/files/psmisc/psmisc-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + + mkdir -p $pkgdir/bin + mv -v $pkgdir/usr/bin/fuser $pkgdir/bin + mv -v $pkgdir/usr/bin/killall $pkgdir/bin +} diff --git a/x86_64/extra/pulseaudio/PKGBUILD b/x86_64/extra/pulseaudio/PKGBUILD new file mode 100644 index 0000000..fe01fb0 --- /dev/null +++ b/x86_64/extra/pulseaudio/PKGBUILD @@ -0,0 +1,80 @@ +pkgname=pulseaudio +pkgver=15.0 +pkgrel=9 +pkgdesc="A featureful, general-purpose sound server" +arch=('x86_64') +depends=('libsndfile' 'openssl' 'jack2' 'alsa-lib' 'dbus' 'glib2' 'libcap' 'libx11' + 'libxcb' 'libice' 'check' 'libsm' 'libxtst' 'webrtc-audio-processing' 'gdbm' + 'libxfixes' 'libxi') +makedepends=('perl' 'perl-modules' 'python3') +source=(https://freedesktop.org/software/$pkgname/releases/$pkgname-$pkgver.tar.xz + client.conf + daemon.conf + default.pa + system.pa + webrtc-1.x.patch) + +prepare() { + cd $pkgname-$pkgver + + # Patch to use latest webrtc + patch -Np1 -i ../webrtc-1.x.patch +} + +build() { + cd $pkgname-$pkgver + + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + --buildtype=release \ + -D database=gdbm \ + -D systemd=enabled \ + -D gsettings=enabled \ + -D doxygen=true \ + -D webrtc-aec=enabled \ + -D pulsedsp-location='/usr/\$LIB/pulseaudio' \ + -D stream-restore-clear-old-devices=true \ + -D udevrulesdir=/usr/lib/udev/rules.d \ + -D bluez5=disabled \ + -D elogind=disabled \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install + + # Superseded by socket activation + sed -e '/autospawn/iautospawn = no' \ + -i $pkgdir/etc/pulse/client.conf + + # Disable cork-request module, can result in e.g. media players unpausing + # when there's a Skype call incoming + + sed -e 's|/usr/bin/pactl load-module module-x11-cork-request|#&|' \ + -i $pkgdir/usr/bin/start-pulseaudio-x11 + + # Required by qpaeq + sed -e '/Load several protocols/aload-module module-dbus-protocol' \ + -i $pkgdir/etc/pulse/default.pa + + rm -r $pkgdir/etc/dbus-1 + + # Remove systemd services as we run service via xsession at lightdm + rm -rf $pkgdir/usr/lib/systemd + + # Replcae out stock configs + cp -vf $srcdir/client.conf $pkgdir/etc/pulse/ + cp -vf $srcdir/daemon.conf $pkgdir/etc/pulse/ + cp -vf $srcdir/default.pa $pkgdir/etc/pulse/ + cp -vf $srcdir/system.pa $pkgdir/etc/pulse/ + + # Install gsettings rule for kde / plasma-pa + mkdir -p $pkgdir/usr/share/glib-2.0/schemas/ + cp -f ../src/modules/gsettings/org.freedesktop.pulseaudio.gschema.xml $pkgdir/usr/share/glib-2.0/schemas/ +} diff --git a/x86_64/extra/pulseaudio/client.conf b/x86_64/extra/pulseaudio/client.conf new file mode 100644 index 0000000..ae532a8 --- /dev/null +++ b/x86_64/extra/pulseaudio/client.conf @@ -0,0 +1,38 @@ +# This file is part of PulseAudio. +# +# PulseAudio is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# PulseAudio 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 Lesser General Public License +# along with PulseAudio; if not, see . + +## Configuration file for PulseAudio clients. See pulse-client.conf(5) for +## more information. Default values are commented out. Use either ; or # for +## commenting. + +; default-sink = +; default-source = +; default-server = +; default-dbus-server = + +default-server = unix:/tmp/pulse-server +enable-memfd = yes + +autospawn = yes +daemon-binary = /usr/bin/pulseaudio +extra-arguments = --log-target=syslog + +; cookie-file = + +; enable-shm = yes +; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB + +; auto-connect-localhost = no +; auto-connect-display = no diff --git a/x86_64/extra/pulseaudio/daemon.conf b/x86_64/extra/pulseaudio/daemon.conf new file mode 100644 index 0000000..41d5737 --- /dev/null +++ b/x86_64/extra/pulseaudio/daemon.conf @@ -0,0 +1,92 @@ +# This file is part of PulseAudio. +# +# PulseAudio is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# PulseAudio 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 Lesser General Public License +# along with PulseAudio; if not, see . + +## Configuration file for the PulseAudio daemon. See pulse-daemon.conf(5) for +## more information. Default values are commented out. Use either ; or # for +## commenting. + +; daemonize = no +; fail = yes +; allow-module-loading = yes +; allow-exit = yes +; use-pid-file = yes +; system-instance = no +; local-server-type = user +; enable-shm = yes +; enable-memfd = yes +; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB +; lock-memory = no +; cpu-limit = no + +; high-priority = yes +; nice-level = -11 + +; realtime-scheduling = yes +; realtime-priority = 5 + +; exit-idle-time = 20 +; scache-idle-time = 20 + +; dl-search-path = (depends on architecture) + +load-default-script-file = yes +default-script-file = /etc/pulse/default.pa + +; log-target = auto +; log-level = notice +; log-meta = no +; log-time = no +; log-backtrace = 0 + +; resample-method = speex-float-1 +; avoid-resampling = false +; enable-remixing = yes +; remixing-use-all-sink-channels = yes +; remixing-produce-lfe = no +; remixing-consume-lfe = no +; lfe-crossover-freq = 0 + +; flat-volumes = no + +; rescue-streams = yes + +; rlimit-fsize = -1 +; rlimit-data = -1 +; rlimit-stack = -1 +; rlimit-core = -1 +; rlimit-as = -1 +; rlimit-rss = -1 +; rlimit-nproc = -1 +; rlimit-nofile = 256 +; rlimit-memlock = -1 +; rlimit-locks = -1 +; rlimit-sigpending = -1 +; rlimit-msgqueue = -1 +; rlimit-nice = 31 +; rlimit-rtprio = 9 +; rlimit-rttime = 200000 + +; default-sample-format = s16le +; default-sample-rate = 44100 +; alternate-sample-rate = 48000 +; default-sample-channels = 2 +; default-channel-map = front-left,front-right + +; default-fragments = 4 +; default-fragment-size-msec = 25 + +; enable-deferred-volume = yes +; deferred-volume-safety-margin-usec = 8000 +; deferred-volume-extra-delay-usec = 0 diff --git a/x86_64/extra/pulseaudio/default.pa b/x86_64/extra/pulseaudio/default.pa new file mode 100644 index 0000000..20062d4 --- /dev/null +++ b/x86_64/extra/pulseaudio/default.pa @@ -0,0 +1,127 @@ +#!/usr/bin/pulseaudio -nF +# +# This file is part of PulseAudio. +# +# PulseAudio is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# PulseAudio 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 Lesser General Public License +# along with PulseAudio; if not, see . + +# This startup script is used only if PulseAudio is started per-user +# (i.e. not in system mode) + +.fail + +### Automatically restore the volume of streams and devices +load-module module-device-restore +load-module module-stream-restore +load-module module-card-restore + +### Automatically augment property information from .desktop files +### stored in /usr/share/application +load-module module-augment-properties + +### Should be after module-*-restore but before module-*-detect +load-module module-switch-on-port-available + +### Load audio drivers statically +### (it's probably better to not load these drivers manually, but instead +### use module-udev-detect -- see below -- for doing this automatically) +#load-module module-alsa-sink +#load-module module-alsa-source device=hw:1,0 +#load-module module-oss device="/dev/dsp" sink_name=output source_name=input +#load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input +#load-module module-null-sink +#load-module module-pipe-sink + +### Automatically load driver modules depending on the hardware available +.ifexists module-udev-detect.so +load-module module-udev-detect +.else +### Use the static hardware detection module (for systems that lack udev support) +load-module module-detect +.endif + +### Automatically connect sink and source if JACK server is present +.ifexists module-jackdbus-detect.so +.nofail +load-module module-jackdbus-detect channels=2 +.fail +.endif + + +### Load several protocols +load-module module-dbus-protocol +.ifexists module-esound-protocol-unix.so +load-module module-esound-protocol-unix +.endif +load-module module-native-protocol-unix + +load-module module-native-protocol-unix auth-group=audio socket=/tmp/pulse-server + +### Network access (may be configured with paprefs, so leave this commented +### here if you plan to use paprefs) +#load-module module-esound-protocol-tcp +#load-module module-native-protocol-tcp + +### Load the RTP receiver module (also configured via paprefs, see above) +#load-module module-rtp-recv + +### Load the RTP sender module (also configured via paprefs, see above) +#load-module module-null-sink sink_name=rtp format=s16be channels=2 rate=44100 sink_properties="device.description='RTP Multicast Sink'" +#load-module module-rtp-send source=rtp.monitor + + +### Automatically restore the default sink/source when changed by the user +### during runtime +### NOTE: This should be loaded as early as possible so that subsequent modules +### that look up the default sink/source get the right value +load-module module-default-device-restore + +### Make sure we always have a sink around, even if it is a null sink. +load-module module-always-sink + +### Honour intended role device property +load-module module-intended-roles + +### Automatically suspend sinks/sources that become idle for too long +load-module module-suspend-on-idle + +### If autoexit on idle is enabled we want to make sure we only quit +### when no local session needs us anymore. +.ifexists module-console-kit.so +load-module module-console-kit +.endif +.ifexists module-systemd-login.so +load-module module-systemd-login +.endif + +### Enable positioned event sounds +load-module module-position-event-sounds + +### Cork music/video streams when a phone stream is active +load-module module-role-cork + +### Modules to allow autoloading of filters (such as echo cancellation) +### on demand. module-filter-heuristics tries to determine what filters +### make sense, and module-filter-apply does the heavy-lifting of +### loading modules and rerouting streams. +load-module module-filter-heuristics +load-module module-filter-apply + +### Make some devices default +#set-default-sink output +#set-default-source input + +### Allow including a default.pa.d directory, which if present, can be used +### for additional configuration snippets. +.nofail +.include /etc/pulse/default.pa.d diff --git a/x86_64/extra/pulseaudio/system.pa b/x86_64/extra/pulseaudio/system.pa new file mode 100644 index 0000000..f8e0efd --- /dev/null +++ b/x86_64/extra/pulseaudio/system.pa @@ -0,0 +1,58 @@ +#!/usr/bin/pulseaudio -nF +# +# This file is part of PulseAudio. +# +# PulseAudio is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# PulseAudio 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 Lesser General Public License +# along with PulseAudio; if not, see . + +# This startup script is used only if PulseAudio is started in system +# mode. + +### Automatically restore the volume of streams and devices +load-module module-device-restore +load-module module-stream-restore +load-module module-card-restore + +### Automatically load driver modules depending on the hardware available +.ifexists module-udev-detect.so +load-module module-udev-detect +.else +### Use the static hardware detection module (for systems that lack udev/hal support) +load-module module-detect +.endif + +### Load several protocols +.ifexists module-esound-protocol-unix.so +load-module module-esound-protocol-unix +.endif +load-module module-native-protocol-unix + +### Automatically restore the default sink/source when changed by the user +### during runtime +### NOTE: This should be loaded as early as possible so that subsequent modules +### that look up the default sink/source get the right value +load-module module-default-device-restore + +### Make sure we always have a sink around, even if it is a null sink. +load-module module-always-sink + +### Automatically suspend sinks/sources that become idle for too long +load-module module-suspend-on-idle + +### Enable positioned event sounds +load-module module-position-event-sounds + +### Allow including a system.pa.d directory, which if present, can be used +### for additional configuration snippets. +.nofail +.include /etc/pulse/system.pa.d diff --git a/x86_64/extra/pulseaudio/webrtc-1.x.patch b/x86_64/extra/pulseaudio/webrtc-1.x.patch new file mode 100644 index 0000000..912cc52 --- /dev/null +++ b/x86_64/extra/pulseaudio/webrtc-1.x.patch @@ -0,0 +1,620 @@ +diff -Naur pulseaudio-15.0/meson.build pulseaudio-15.0/meson.build +--- pulseaudio-15.0/meson.build 2021-07-27 23:02:27.000000000 +0300 ++++ pulseaudio-15.0/meson.build 2022-01-28 14:15:30.000000000 +0200 +@@ -756,7 +756,7 @@ + cdata.set('HAVE_UDEV', 1) + endif + +-webrtc_dep = dependency('webrtc-audio-processing', version : '>= 0.2', required : get_option('webrtc-aec')) ++webrtc_dep = dependency('webrtc-audio-processing-1', version : '>= 1.0', required : get_option('webrtc-aec')) + if webrtc_dep.found() + cdata.set('HAVE_WEBRTC', 1) + endif +diff -Naur pulseaudio-15.0/src/modules/echo-cancel/module-echo-cancel.c pulseaudio-15.0/src/modules/echo-cancel/module-echo-cancel.c +--- pulseaudio-15.0/src/modules/echo-cancel/module-echo-cancel.c 2021-07-27 23:02:27.000000000 +0300 ++++ pulseaudio-15.0/src/modules/echo-cancel/module-echo-cancel.c 2022-01-28 14:02:48.000000000 +0200 +@@ -2358,8 +2358,6 @@ + } + + u.ec->done(u.ec); +- u.ec->msg->dead = true; +- pa_echo_canceller_msg_unref(u.ec->msg); + + out: + if (u.captured_file) +diff -Naur pulseaudio-15.0/src/modules/echo-cancel/webrtc.cc pulseaudio-15.0/src/modules/echo-cancel/webrtc.cc +--- pulseaudio-15.0/src/modules/echo-cancel/webrtc.cc 2021-07-27 23:02:27.000000000 +0300 ++++ pulseaudio-15.0/src/modules/echo-cancel/webrtc.cc 2022-01-28 14:14:43.000000000 +0200 +@@ -3,8 +3,8 @@ + + Copyright 2011 Collabora Ltd. + 2015 Aldebaran SoftBank Group +- +- Contributor: Arun Raghavan ++ 2020 Arun Raghavan ++ 2020 Eero Nurkkala + + PulseAudio is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published +@@ -34,80 +34,47 @@ + #include "echo-cancel.h" + PA_C_DECL_END + +-#include +-#include +-#include ++#define WEBRTC_APM_DEBUG_DUMP 0 ++ ++#include + + #define BLOCK_SIZE_US 10000 + + #define DEFAULT_HIGH_PASS_FILTER true + #define DEFAULT_NOISE_SUPPRESSION true ++#define DEFAULT_TRANSIENT_NOISE_SUPPRESSION true + #define DEFAULT_ANALOG_GAIN_CONTROL true + #define DEFAULT_DIGITAL_GAIN_CONTROL false + #define DEFAULT_MOBILE false +-#define DEFAULT_ROUTING_MODE "speakerphone" + #define DEFAULT_COMFORT_NOISE true + #define DEFAULT_DRIFT_COMPENSATION false +-#define DEFAULT_VAD true +-#define DEFAULT_EXTENDED_FILTER false +-#define DEFAULT_INTELLIGIBILITY_ENHANCER false +-#define DEFAULT_EXPERIMENTAL_AGC false ++#define DEFAULT_VAD false + #define DEFAULT_AGC_START_VOLUME 85 +-#define DEFAULT_BEAMFORMING false +-#define DEFAULT_TRACE false ++#define DEFAULT_POSTAMP_ENABLE false ++#define DEFAULT_POSTAMP_GAIN_DB 0 ++#define DEFAULT_PREAMP_ENABLE false ++#define DEFAULT_PREAMP_GAIN_DB 0 + + #define WEBRTC_AGC_MAX_VOLUME 255 ++#define WEBRTC_POSTAMP_GAIN_MAX_DB 90 ++#define WEBRTC_PREAMP_GAIN_MAX_DB 90 + + static const char* const valid_modargs[] = { +- "high_pass_filter", +- "noise_suppression", ++ "agc_start_volume", + "analog_gain_control", + "digital_gain_control", ++ "high_pass_filter", + "mobile", +- "routing_mode", +- "comfort_noise", +- "drift_compensation", ++ "noise_suppression", ++ "post_amplifier", ++ "post_amplifier_gain", ++ "pre_amplifier", ++ "pre_amplifier_gain", ++ "transient_noise_suppression", + "voice_detection", +- "extended_filter", +- "intelligibility_enhancer", +- "experimental_agc", +- "agc_start_volume", +- "beamforming", +- "mic_geometry", /* documented in parse_mic_geometry() */ +- "target_direction", /* documented in parse_mic_geometry() */ +- "trace", + NULL + }; + +-static int routing_mode_from_string(const char *rmode) { +- if (pa_streq(rmode, "quiet-earpiece-or-headset")) +- return webrtc::EchoControlMobile::kQuietEarpieceOrHeadset; +- else if (pa_streq(rmode, "earpiece")) +- return webrtc::EchoControlMobile::kEarpiece; +- else if (pa_streq(rmode, "loud-earpiece")) +- return webrtc::EchoControlMobile::kLoudEarpiece; +- else if (pa_streq(rmode, "speakerphone")) +- return webrtc::EchoControlMobile::kSpeakerphone; +- else if (pa_streq(rmode, "loud-speakerphone")) +- return webrtc::EchoControlMobile::kLoudSpeakerphone; +- else +- return -1; +-} +- +-class PaWebrtcTraceCallback : public webrtc::TraceCallback { +- void Print(webrtc::TraceLevel level, const char *message, int length) +- { +- if (level & webrtc::kTraceError || level & webrtc::kTraceCritical) +- pa_log("%s", message); +- else if (level & webrtc::kTraceWarning) +- pa_log_warn("%s", message); +- else if (level & webrtc::kTraceInfo) +- pa_log_info("%s", message); +- else +- pa_log_debug("%s", message); +- } +-}; +- + static int webrtc_volume_from_pa(pa_volume_t v) + { + return (v * WEBRTC_AGC_MAX_VOLUME) / PA_VOLUME_NORM; +@@ -120,8 +87,7 @@ + + static void webrtc_ec_fixate_spec(pa_sample_spec *rec_ss, pa_channel_map *rec_map, + pa_sample_spec *play_ss, pa_channel_map *play_map, +- pa_sample_spec *out_ss, pa_channel_map *out_map, +- bool beamforming) ++ pa_sample_spec *out_ss, pa_channel_map *out_map) + { + rec_ss->format = PA_SAMPLE_FLOAT32NE; + play_ss->format = PA_SAMPLE_FLOAT32NE; +@@ -139,110 +105,22 @@ + *out_ss = *rec_ss; + *out_map = *rec_map; + +- if (beamforming) { +- /* The beamformer gives us a single channel */ +- out_ss->channels = 1; +- pa_channel_map_init_mono(out_map); +- } +- + /* Playback stream rate needs to be the same as capture */ + play_ss->rate = rec_ss->rate; + } + +-static bool parse_point(const char **point, float (&f)[3]) { +- int ret, length; +- +- ret = sscanf(*point, "%g,%g,%g%n", &f[0], &f[1], &f[2], &length); +- if (ret != 3) +- return false; +- +- /* Consume the bytes we've read so far */ +- *point += length; +- +- return true; +-} +- +-static bool parse_mic_geometry(const char **mic_geometry, std::vector& geometry) { +- /* The microphone geometry is expressed as cartesian point form: +- * x1,y1,z1,x2,y2,z2,... +- * +- * Where x1,y1,z1 is the position of the first microphone with regards to +- * the array's "center", x2,y2,z2 the position of the second, and so on. +- * +- * 'x' is the horizontal coordinate, with positive values being to the +- * right from the mic array's perspective. +- * +- * 'y' is the depth coordinate, with positive values being in front of the +- * array. +- * +- * 'z' is the vertical coordinate, with positive values being above the +- * array. +- * +- * All distances are in meters. +- */ +- +- /* The target direction is expected to be in spherical point form: +- * a,e,r +- * +- * Where 'a' is the azimuth of the target point relative to the center of +- * the array, 'e' its elevation, and 'r' the radius. +- * +- * 0 radians azimuth is to the right of the array, and positive angles +- * move in a counter-clockwise direction. +- * +- * 0 radians elevation is horizontal w.r.t. the array, and positive +- * angles go upwards. +- * +- * radius is distance from the array center in meters. +- */ +- +- long unsigned int i; +- float f[3]; +- +- for (i = 0; i < geometry.size(); i++) { +- if (!parse_point(mic_geometry, f)) { +- pa_log("Failed to parse channel %lu in mic_geometry", i); +- return false; +- } +- +- /* Except for the last point, we should have a trailing comma */ +- if (i != geometry.size() - 1) { +- if (**mic_geometry != ',') { +- pa_log("Failed to parse channel %lu in mic_geometry", i); +- return false; +- } +- +- (*mic_geometry)++; +- } +- +- pa_log_debug("Got mic #%lu position: (%g, %g, %g)", i, f[0], f[1], f[2]); +- +- geometry[i].c[0] = f[0]; +- geometry[i].c[1] = f[1]; +- geometry[i].c[2] = f[2]; +- } +- +- if (**mic_geometry != '\0') { +- pa_log("Failed to parse mic_geometry value: more parameters than expected"); +- return false; +- } +- +- return true; +-} +- + bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec, + pa_sample_spec *rec_ss, pa_channel_map *rec_map, + pa_sample_spec *play_ss, pa_channel_map *play_map, + pa_sample_spec *out_ss, pa_channel_map *out_map, + uint32_t *nframes, const char *args) { +- webrtc::AudioProcessing *apm = NULL; ++ webrtc::AudioProcessing *apm = webrtc::AudioProcessingBuilder().Create(); + webrtc::ProcessingConfig pconfig; +- webrtc::Config config; +- bool hpf, ns, agc, dgc, mobile, cn, vad, ext_filter, intelligibility, experimental_agc, beamforming; +- int rm = -1, i; +- uint32_t agc_start_volume; ++ webrtc::AudioProcessing::Config config; ++ bool hpf, ns, tns, agc, dgc, mobile, pre_amp, vad, post_amp; ++ int i; ++ uint32_t agc_start_volume, pre_amp_gain, post_amp_gain; + pa_modargs *ma; +- bool trace = false; + + if (!(ma = pa_modargs_new(args, valid_modargs))) { + pa_log("Failed to parse submodule arguments."); +@@ -261,6 +139,12 @@ + goto fail; + } + ++ tns = DEFAULT_TRANSIENT_NOISE_SUPPRESSION; ++ if (pa_modargs_get_value_boolean(ma, "transient_noise_suppression", &tns) < 0) { ++ pa_log("Failed to parse transient_noise_suppression value"); ++ goto fail; ++ } ++ + agc = DEFAULT_ANALOG_GAIN_CONTROL; + if (pa_modargs_get_value_boolean(ma, "analog_gain_control", &agc) < 0) { + pa_log("Failed to parse analog_gain_control value"); +@@ -278,62 +162,47 @@ + goto fail; + } + +- mobile = DEFAULT_MOBILE; +- if (pa_modargs_get_value_boolean(ma, "mobile", &mobile) < 0) { +- pa_log("Failed to parse mobile value"); ++ pre_amp = DEFAULT_PREAMP_ENABLE; ++ if (pa_modargs_get_value_boolean(ma, "pre_amplifier", &pre_amp) < 0) { ++ pa_log("Failed to parse pre_amplifier value"); + goto fail; + } +- +- ec->params.drift_compensation = DEFAULT_DRIFT_COMPENSATION; +- if (pa_modargs_get_value_boolean(ma, "drift_compensation", &ec->params.drift_compensation) < 0) { +- pa_log("Failed to parse drift_compensation value"); ++ pre_amp_gain = DEFAULT_PREAMP_GAIN_DB; ++ if (pa_modargs_get_value_u32(ma, "pre_amplifier_gain", &pre_amp_gain) < 0) { ++ pa_log("Failed to parse pre_amplifier_gain value"); + goto fail; + } +- +- if (mobile) { +- if (ec->params.drift_compensation) { +- pa_log("Can't use drift_compensation in mobile mode"); +- goto fail; +- } +- +- if ((rm = routing_mode_from_string(pa_modargs_get_value(ma, "routing_mode", DEFAULT_ROUTING_MODE))) < 0) { +- pa_log("Failed to parse routing_mode value"); +- goto fail; +- } +- +- cn = DEFAULT_COMFORT_NOISE; +- if (pa_modargs_get_value_boolean(ma, "comfort_noise", &cn) < 0) { +- pa_log("Failed to parse cn value"); +- goto fail; +- } +- } else { +- if (pa_modargs_get_value(ma, "comfort_noise", NULL) || pa_modargs_get_value(ma, "routing_mode", NULL)) { +- pa_log("The routing_mode and comfort_noise options are only valid with mobile=true"); +- goto fail; +- } ++ if (pre_amp_gain > WEBRTC_PREAMP_GAIN_MAX_DB) { ++ pa_log("Preamp gain must not exceed %u", WEBRTC_PREAMP_GAIN_MAX_DB); ++ goto fail; + } + +- vad = DEFAULT_VAD; +- if (pa_modargs_get_value_boolean(ma, "voice_detection", &vad) < 0) { +- pa_log("Failed to parse voice_detection value"); ++ post_amp = DEFAULT_POSTAMP_ENABLE; ++ if (pa_modargs_get_value_boolean(ma, "post_amplifier", &post_amp) < 0) { ++ pa_log("Failed to parse post_amplifier value"); + goto fail; + } +- +- ext_filter = DEFAULT_EXTENDED_FILTER; +- if (pa_modargs_get_value_boolean(ma, "extended_filter", &ext_filter) < 0) { +- pa_log("Failed to parse extended_filter value"); ++ post_amp_gain = DEFAULT_POSTAMP_GAIN_DB; ++ if (pa_modargs_get_value_u32(ma, "post_amplifier_gain", &post_amp_gain) < 0) { ++ pa_log("Failed to parse post_amplifier_gain value"); ++ goto fail; ++ } ++ if (post_amp_gain > WEBRTC_POSTAMP_GAIN_MAX_DB) { ++ pa_log("Postamp gain must not exceed %u", WEBRTC_POSTAMP_GAIN_MAX_DB); + goto fail; + } + +- intelligibility = DEFAULT_INTELLIGIBILITY_ENHANCER; +- if (pa_modargs_get_value_boolean(ma, "intelligibility_enhancer", &intelligibility) < 0) { +- pa_log("Failed to parse intelligibility_enhancer value"); ++ mobile = DEFAULT_MOBILE; ++ if (pa_modargs_get_value_boolean(ma, "mobile", &mobile) < 0) { ++ pa_log("Failed to parse mobile value"); + goto fail; + } + +- experimental_agc = DEFAULT_EXPERIMENTAL_AGC; +- if (pa_modargs_get_value_boolean(ma, "experimental_agc", &experimental_agc) < 0) { +- pa_log("Failed to parse experimental_agc value"); ++ ec->params.drift_compensation = DEFAULT_DRIFT_COMPENSATION; ++ ++ vad = DEFAULT_VAD; ++ if (pa_modargs_get_value_boolean(ma, "voice_detection", &vad) < 0) { ++ pa_log("Failed to parse voice_detection value"); + goto fail; + } + +@@ -348,82 +217,7 @@ + } + ec->params.webrtc.agc_start_volume = agc_start_volume; + +- beamforming = DEFAULT_BEAMFORMING; +- if (pa_modargs_get_value_boolean(ma, "beamforming", &beamforming) < 0) { +- pa_log("Failed to parse beamforming value"); +- goto fail; +- } +- +- if (ext_filter) +- config.Set(new webrtc::ExtendedFilter(true)); +- if (intelligibility) +- pa_log_warn("The intelligibility enhancer is not currently supported"); +- if (experimental_agc) +- config.Set(new webrtc::ExperimentalAgc(true, ec->params.webrtc.agc_start_volume)); +- +- trace = DEFAULT_TRACE; +- if (pa_modargs_get_value_boolean(ma, "trace", &trace) < 0) { +- pa_log("Failed to parse trace value"); +- goto fail; +- } +- +- if (trace) { +- webrtc::Trace::CreateTrace(); +- webrtc::Trace::set_level_filter(webrtc::kTraceAll); +- ec->params.webrtc.trace_callback = new PaWebrtcTraceCallback(); +- webrtc::Trace::SetTraceCallback((PaWebrtcTraceCallback *) ec->params.webrtc.trace_callback); +- } +- +- webrtc_ec_fixate_spec(rec_ss, rec_map, play_ss, play_map, out_ss, out_map, beamforming); +- +- /* We do this after fixate because we need the capture channel count */ +- if (beamforming) { +- std::vector geometry(rec_ss->channels); +- webrtc::SphericalPointf direction(0.0f, 0.0f, 0.0f); +- const char *mic_geometry, *target_direction; +- +- if (!(mic_geometry = pa_modargs_get_value(ma, "mic_geometry", NULL))) { +- pa_log("mic_geometry must be set if beamforming is enabled"); +- goto fail; +- } +- +- if (!parse_mic_geometry(&mic_geometry, geometry)) { +- pa_log("Failed to parse mic_geometry value"); +- goto fail; +- } +- +- if ((target_direction = pa_modargs_get_value(ma, "target_direction", NULL))) { +- float f[3]; +- +- if (!parse_point(&target_direction, f)) { +- pa_log("Failed to parse target_direction value"); +- goto fail; +- } +- +- if (*target_direction != '\0') { +- pa_log("Failed to parse target_direction value: more parameters than expected"); +- goto fail; +- } +- +-#define IS_ZERO(f) ((f) < 0.000001 && (f) > -0.000001) +- +- if (!IS_ZERO(f[1]) || !IS_ZERO(f[2])) { +- pa_log("The beamformer currently only supports targeting along the azimuth"); +- goto fail; +- } +- +- direction.s[0] = f[0]; +- direction.s[1] = f[1]; +- direction.s[2] = f[2]; +- } +- +- if (!target_direction) +- config.Set(new webrtc::Beamforming(true, geometry)); +- else +- config.Set(new webrtc::Beamforming(true, geometry, direction)); +- } +- +- apm = webrtc::AudioProcessing::Create(config); ++ webrtc_ec_fixate_spec(rec_ss, rec_map, play_ss, play_map, out_ss, out_map); + + pconfig = { + webrtc::StreamConfig(rec_ss->rate, rec_ss->channels, false), /* input stream */ +@@ -436,46 +230,60 @@ + goto fail; + } + ++ if (pre_amp) { ++ config.pre_amplifier.enabled = true; ++ config.pre_amplifier.fixed_gain_factor = (float)pre_amp_gain; ++ } else ++ config.pre_amplifier.enabled = false; ++ + if (hpf) +- apm->high_pass_filter()->Enable(true); ++ config.high_pass_filter.enabled = true; ++ else ++ config.high_pass_filter.enabled = false; + +- if (!mobile) { +- apm->echo_cancellation()->enable_drift_compensation(ec->params.drift_compensation); +- apm->echo_cancellation()->Enable(true); +- } else { +- apm->echo_control_mobile()->set_routing_mode(static_cast(rm)); +- apm->echo_control_mobile()->enable_comfort_noise(cn); +- apm->echo_control_mobile()->Enable(true); +- } +- +- if (ns) { +- apm->noise_suppression()->set_level(webrtc::NoiseSuppression::kHigh); +- apm->noise_suppression()->Enable(true); +- } +- +- if (agc || dgc) { +- if (mobile && rm <= webrtc::EchoControlMobile::kEarpiece) { +- /* Maybe this should be a knob, but we've got a lot of knobs already */ +- apm->gain_control()->set_mode(webrtc::GainControl::kFixedDigital); +- ec->params.webrtc.agc = false; +- } else if (dgc) { +- apm->gain_control()->set_mode(webrtc::GainControl::kAdaptiveDigital); +- ec->params.webrtc.agc = false; +- } else { +- apm->gain_control()->set_mode(webrtc::GainControl::kAdaptiveAnalog); +- if (apm->gain_control()->set_analog_level_limits(0, WEBRTC_AGC_MAX_VOLUME) != +- webrtc::AudioProcessing::kNoError) { +- pa_log("Failed to initialise AGC"); +- goto fail; +- } +- ec->params.webrtc.agc = true; +- } ++ config.echo_canceller.enabled = true; ++ ++ if (!mobile) ++ config.echo_canceller.mobile_mode = false; ++ else ++ config.echo_canceller.mobile_mode = true; + +- apm->gain_control()->Enable(true); ++ if (ns) ++ config.noise_suppression.enabled = true; ++ else ++ config.noise_suppression.enabled = false; ++ ++ if (tns) ++ config.transient_suppression.enabled = true; ++ else ++ config.transient_suppression.enabled = false; ++ ++ if (dgc) { ++ ec->params.webrtc.agc = false; ++ config.gain_controller1.enabled = true; ++ if (mobile) ++ config.gain_controller1.mode = webrtc::AudioProcessing::Config::GainController1::kFixedDigital; ++ else ++ config.gain_controller1.mode = webrtc::AudioProcessing::Config::GainController1::kAdaptiveDigital; ++ } else if (agc) { ++ ec->params.webrtc.agc = true; ++ config.gain_controller1.enabled = true; ++ config.gain_controller1.mode = webrtc::AudioProcessing::Config::GainController1::kAdaptiveAnalog; ++ config.gain_controller1.analog_level_minimum = 0; ++ config.gain_controller1.analog_level_maximum = WEBRTC_AGC_MAX_VOLUME; + } + + if (vad) +- apm->voice_detection()->Enable(true); ++ config.voice_detection.enabled = true; ++ else ++ config.voice_detection.enabled = false; ++ ++ if (post_amp) { ++ config.gain_controller2.enabled = true; ++ config.gain_controller2.fixed_digital.gain_db = (float)post_amp_gain; ++ config.gain_controller2.adaptive_digital.enabled = false; ++ } else ++ config.gain_controller2.enabled = false; + + ec->params.webrtc.apm = apm; + ec->params.webrtc.rec_ss = *rec_ss; +@@ -485,6 +293,8 @@ + *nframes = ec->params.webrtc.blocksize; + ec->params.webrtc.first = true; + ++ apm->ApplyConfig(config); ++ + for (i = 0; i < rec_ss->channels; i++) + ec->params.webrtc.rec_buffer[i] = pa_xnew(float, *nframes); + for (i = 0; i < play_ss->channels; i++) +@@ -496,10 +306,7 @@ + fail: + if (ma) + pa_modargs_free(ma); +- if (ec->params.webrtc.trace_callback) { +- webrtc::Trace::ReturnTrace(); +- delete ((PaWebrtcTraceCallback *) ec->params.webrtc.trace_callback); +- } if (apm) ++ if (apm) + delete apm; + + return false; +@@ -515,12 +322,6 @@ + pa_deinterleave(play, (void **) buf, ss->channels, pa_sample_size(ss), n); + + pa_assert_se(apm->ProcessReverseStream(buf, config, config, buf) == webrtc::AudioProcessing::kNoError); +- +- /* FIXME: If ProcessReverseStream() makes any changes to the audio, such as +- * applying intelligibility enhancement, those changes don't have any +- * effect. This function is called at the source side, but the processing +- * would have to be done in the sink to be able to feed the processed audio +- * to speakers. */ + } + + void pa_webrtc_ec_record(pa_echo_canceller *ec, const uint8_t *rec, uint8_t *out) { +@@ -538,7 +339,7 @@ + if (ec->params.webrtc.agc) { + pa_volume_t v = pa_echo_canceller_get_capture_volume(ec); + old_volume = webrtc_volume_from_pa(v); +- apm->gain_control()->set_stream_analog_level(old_volume); ++ apm->set_stream_analog_level(old_volume); + } + + apm->set_stream_delay_ms(0); +@@ -553,7 +354,7 @@ + ec->params.webrtc.first = false; + new_volume = ec->params.webrtc.agc_start_volume; + } else { +- new_volume = apm->gain_control()->stream_analog_level(); ++ new_volume = apm->recommended_stream_analog_level(); + } + + if (old_volume != new_volume) +@@ -564,9 +365,6 @@ + } + + void pa_webrtc_ec_set_drift(pa_echo_canceller *ec, float drift) { +- webrtc::AudioProcessing *apm = (webrtc::AudioProcessing*)ec->params.webrtc.apm; +- +- apm->echo_cancellation()->set_stream_drift_samples(drift * ec->params.webrtc.blocksize); + } + + void pa_webrtc_ec_run(pa_echo_canceller *ec, const uint8_t *rec, const uint8_t *play, uint8_t *out) { +@@ -577,11 +375,6 @@ + void pa_webrtc_ec_done(pa_echo_canceller *ec) { + int i; + +- if (ec->params.webrtc.trace_callback) { +- webrtc::Trace::ReturnTrace(); +- delete ((PaWebrtcTraceCallback *) ec->params.webrtc.trace_callback); +- } +- + if (ec->params.webrtc.apm) { + delete (webrtc::AudioProcessing*)ec->params.webrtc.apm; + ec->params.webrtc.apm = NULL; diff --git a/x86_64/extra/python2/PKGBUILD b/x86_64/extra/python2/PKGBUILD new file mode 100644 index 0000000..4e2201e --- /dev/null +++ b/x86_64/extra/python2/PKGBUILD @@ -0,0 +1,44 @@ +pkgname=python2 +pkgver=2.7.18 +pkgrel=1 +arch=('x86_64') +depends=('sqlite3' 'expat' 'libffi') +source=(https://www.python.org/ftp/python/$pkgver/Python-${pkgver}${extraver}.tar.xz + Python-2.7.18-security_fixes-1.patch) + +prepare() { + cd Python-${pkgver}${extraver} + +# patch -Np1 -i ../Python-2.7.18-security_fixes-1.patch + + rm -rf Modules/expat + rm -rf Modules/_ctypes/{darwin,libffi} + rm -rf Modules/_decimal/libmpdec +} + +build() { + cd Python-${pkgver}${extraver} + + ./configure \ + --prefix=/usr \ + --enable-shared \ + --with-system-expat \ + --with-system-ffi \ + --with-system-expat \ + --with-system-libmpdec \ + --enable-loadable-sqlite-extensions \ + --without-ensurepip \ + --with-tzpath=/usr/shared/zoneinfo \ + + make +} + +package() { + cd Python-${pkgver}${extraver} + + sed -i 's/^all:.*$/all: build_all/' Makefile + + make DESTDIR=$pkgdir install + rm $pkgdir/usr/bin/2to3 + rm $pkgdir/usr/bin/python +} diff --git a/x86_64/extra/python2/Python-2.7.18-security_fixes-1.patch b/x86_64/extra/python2/Python-2.7.18-security_fixes-1.patch new file mode 100644 index 0000000..83c0016 --- /dev/null +++ b/x86_64/extra/python2/Python-2.7.18-security_fixes-1.patch @@ -0,0 +1,1217 @@ +Submitted By: Ken Moffat +Date: 2021-04-01 +Initial Package Version: 2.7.18 +Upstream Status: Applied to Python-3 +Origin: Found at Gentoo and Arch. +Description: Fixes various vulnerabilities - for Python3 some of these +are labelled as critical, but for Python2 in current BLFS (with its +limited use) these are more in the "plug holes to stop people chaining +vulnerabilities" camp. However, if anyone is still using python2 on a +much older BLFS system they might be vulnerable. Some of these +vulnerabilities were initially only reported against Python3, but they +do also apply to Python-2.7.18. + +The vulnerabilities are CVE-2019-20907 (infinite loop), CVE-2020-8492 +(DoS via regexp), CVE-2020-26116 (character injection in http.client), +CVE-2020-27619 CJK codec tests call eval() on content retrieved via +HTTP, CVE-2021-3177 buffer overflow may lead to remote code execution +in certain Python applications that accept floating-point numbers as +untrusted input, CVE-2021-23336 Web Cache Poisoning via urllib +functions when the attacker can separate query parameters using a +semicolon. + +The names of most of these are the filenames from the gentoo tarball. + +0001-bpo-39017-Avoid-infinite-loop-in-the-tarfile-module-.patch + +From 893e6e3aee483d262df70656a68f63f601720fcd Mon Sep 17 00:00:00 2001 +From: Rishi +Date: Wed, 15 Jul 2020 13:51:00 +0200 +Subject: [PATCH 01/24] bpo-39017: Avoid infinite loop in the tarfile module + (GH-21454) + +Avoid infinite loop when reading specially crafted TAR files using the tarfile module +(CVE-2019-20907). + +[stripped test to avoid binary patch] +--- + Lib/tarfile.py | 2 ++ + .../next/Library/2020-07-12-22-16-58.bpo-39017.x3Cg-9.rst | 1 + + 2 files changed, 3 insertions(+) + create mode 100644 Misc/NEWS.d/next/Library/2020-07-12-22-16-58.bpo-39017.x3Cg-9.rst + +diff --git a/Lib/tarfile.py b/Lib/tarfile.py +index adf91d5382..574a6bb279 100644 +--- a/Lib/tarfile.py ++++ b/Lib/tarfile.py +@@ -1400,6 +1400,8 @@ class TarInfo(object): + + length, keyword = match.groups() + length = int(length) ++ if length == 0: ++ raise InvalidHeaderError("invalid header") + value = buf[match.end(2) + 1:match.start(1) + length - 1] + + keyword = keyword.decode("utf8") +diff --git a/Misc/NEWS.d/next/Library/2020-07-12-22-16-58.bpo-39017.x3Cg-9.rst b/Misc/NEWS.d/next/Library/2020-07-12-22-16-58.bpo-39017.x3Cg-9.rst +new file mode 100644 +index 0000000000..ad26676f8b +--- /dev/null ++++ b/Misc/NEWS.d/next/Library/2020-07-12-22-16-58.bpo-39017.x3Cg-9.rst +@@ -0,0 +1 @@ ++Avoid infinite loop when reading specially crafted TAR files using the tarfile module (CVE-2019-20907). +-- +2.30.1 + +0002-bpo-39503-CVE-2020-8492-Fix-AbstractBasicAuthHandler.patch + +From 2273e65e11dd0234f2f51ebaef61fc6e848d4059 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= +Date: Thu, 10 Sep 2020 13:35:39 +0200 +Subject: [PATCH 02/24] bpo-39503: CVE-2020-8492: Fix AbstractBasicAuthHandler + (GH-18284) (GH-19304) + +The AbstractBasicAuthHandler class of the urllib.request module uses +an inefficient regular expression which can be exploited by an +attacker to cause a denial of service. Fix the regex to prevent the +catastrophic backtracking. Vulnerability reported by Ben Caller +and Matt Schwager. + +AbstractBasicAuthHandler of urllib.request now parses all +WWW-Authenticate HTTP headers and accepts multiple challenges per +header: use the realm of the first Basic challenge. + +Co-Authored-By: Serhiy Storchaka +(cherry picked from commit 0b297d4ff1c0e4480ad33acae793fbaf4bf015b4) + +[rebased for py2.7] +--- + Lib/test/test_urllib2.py | 81 ++++++++++++++++++++++++++-------------- + Lib/urllib2.py | 60 +++++++++++++++++++++++------ + 2 files changed, 101 insertions(+), 40 deletions(-) + +diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py +index 20a0f58143..0adbb13c43 100644 +--- a/Lib/test/test_urllib2.py ++++ b/Lib/test/test_urllib2.py +@@ -1128,42 +1128,67 @@ class HandlerTests(unittest.TestCase): + self.assertEqual(req.get_host(), "proxy.example.com:3128") + self.assertEqual(req.get_header("Proxy-authorization"),"FooBar") + +- def test_basic_auth(self, quote_char='"'): ++ def check_basic_auth(self, headers, realm): + opener = OpenerDirector() + password_manager = MockPasswordManager() + auth_handler = urllib2.HTTPBasicAuthHandler(password_manager) +- realm = "ACME Widget Store" +- http_handler = MockHTTPHandler( +- 401, 'WWW-Authenticate: Basic realm=%s%s%s\r\n\r\n' % +- (quote_char, realm, quote_char) ) ++ body = '\r\n'.join(headers) + '\r\n\r\n' ++ http_handler = MockHTTPHandler(401, body) + opener.add_handler(auth_handler) + opener.add_handler(http_handler) + self._test_basic_auth(opener, auth_handler, "Authorization", + realm, http_handler, password_manager, + "http://acme.example.com/protected", +- "http://acme.example.com/protected" +- ) +- +- def test_basic_auth_with_single_quoted_realm(self): +- self.test_basic_auth(quote_char="'") +- +- def test_basic_auth_with_unquoted_realm(self): +- opener = OpenerDirector() +- password_manager = MockPasswordManager() +- auth_handler = urllib2.HTTPBasicAuthHandler(password_manager) +- realm = "ACME Widget Store" +- http_handler = MockHTTPHandler( +- 401, 'WWW-Authenticate: Basic realm=%s\r\n\r\n' % realm) +- opener.add_handler(auth_handler) +- opener.add_handler(http_handler) +- msg = "Basic Auth Realm was unquoted" +- with test_support.check_warnings((msg, UserWarning)): +- self._test_basic_auth(opener, auth_handler, "Authorization", +- realm, http_handler, password_manager, +- "http://acme.example.com/protected", +- "http://acme.example.com/protected" +- ) +- ++ "http://acme.example.com/protected") ++ ++ def test_basic_auth(self): ++ realm = "realm2@example.com" ++ realm2 = "realm2@example.com" ++ basic = 'Basic realm="{realm}"'.format(realm=realm) ++ basic2 = 'Basic realm="{realm2}"'.format(realm2=realm2) ++ other_no_realm = 'Otherscheme xxx' ++ digest = ('Digest realm="{realm2}", ' ++ 'qop="auth, auth-int", ' ++ 'nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", ' ++ 'opaque="5ccc069c403ebaf9f0171e9517f40e41"' ++ .format(realm2=realm2)) ++ for realm_str in ( ++ # test "quote" and 'quote' ++ 'Basic realm="{realm}"'.format(realm=realm), ++ "Basic realm='{realm}'".format(realm=realm), ++ ++ # charset is ignored ++ 'Basic realm="{realm}", charset="UTF-8"'.format(realm=realm), ++ ++ # Multiple challenges per header ++ ', '.join((basic, basic2)), ++ ', '.join((basic, other_no_realm)), ++ ', '.join((other_no_realm, basic)), ++ ', '.join((basic, digest)), ++ ', '.join((digest, basic)), ++ ): ++ headers = ['WWW-Authenticate: {realm_str}' ++ .format(realm_str=realm_str)] ++ self.check_basic_auth(headers, realm) ++ ++ # no quote: expect a warning ++ with test_support.check_warnings(("Basic Auth Realm was unquoted", ++ UserWarning)): ++ headers = ['WWW-Authenticate: Basic realm={realm}' ++ .format(realm=realm)] ++ self.check_basic_auth(headers, realm) ++ ++ # Multiple headers: one challenge per header. ++ # Use the first Basic realm. ++ for challenges in ( ++ [basic, basic2], ++ [basic, digest], ++ [digest, basic], ++ ): ++ headers = ['WWW-Authenticate: {challenge}' ++ .format(challenge=challenge) ++ for challenge in challenges] ++ self.check_basic_auth(headers, realm) + + def test_proxy_basic_auth(self): + opener = OpenerDirector() +diff --git a/Lib/urllib2.py b/Lib/urllib2.py +index 8b634ada37..b2d1fad6f2 100644 +--- a/Lib/urllib2.py ++++ b/Lib/urllib2.py +@@ -856,8 +856,15 @@ class AbstractBasicAuthHandler: + + # allow for double- and single-quoted realm values + # (single quotes are a violation of the RFC, but appear in the wild) +- rx = re.compile('(?:.*,)*[ \t]*([^ \t]+)[ \t]+' +- 'realm=(["\']?)([^"\']*)\\2', re.I) ++ rx = re.compile('(?:^|,)' # start of the string or ',' ++ '[ \t]*' # optional whitespaces ++ '([^ \t]+)' # scheme like "Basic" ++ '[ \t]+' # mandatory whitespaces ++ # realm=xxx ++ # realm='xxx' ++ # realm="xxx" ++ 'realm=(["\']?)([^"\']*)\\2', ++ re.I) + + # XXX could pre-emptively send auth info already accepted (RFC 2617, + # end of section 2, and section 1.2 immediately after "credentials" +@@ -869,23 +876,52 @@ class AbstractBasicAuthHandler: + self.passwd = password_mgr + self.add_password = self.passwd.add_password + ++ def _parse_realm(self, header): ++ # parse WWW-Authenticate header: accept multiple challenges per header ++ found_challenge = False ++ for mo in AbstractBasicAuthHandler.rx.finditer(header): ++ scheme, quote, realm = mo.groups() ++ if quote not in ['"', "'"]: ++ warnings.warn("Basic Auth Realm was unquoted", ++ UserWarning, 3) ++ ++ yield (scheme, realm) ++ ++ found_challenge = True ++ ++ if not found_challenge: ++ if header: ++ scheme = header.split()[0] ++ else: ++ scheme = '' ++ yield (scheme, None) + + def http_error_auth_reqed(self, authreq, host, req, headers): + # host may be an authority (without userinfo) or a URL with an + # authority +- # XXX could be multiple headers +- authreq = headers.get(authreq, None) ++ headers = headers.getheaders(authreq) ++ if not headers: ++ # no header found ++ return + +- if authreq: +- mo = AbstractBasicAuthHandler.rx.search(authreq) +- if mo: +- scheme, quote, realm = mo.groups() +- if quote not in ['"', "'"]: +- warnings.warn("Basic Auth Realm was unquoted", +- UserWarning, 2) +- if scheme.lower() == 'basic': ++ unsupported = None ++ for header in headers: ++ for scheme, realm in self._parse_realm(header): ++ if scheme.lower() != 'basic': ++ unsupported = scheme ++ continue ++ ++ if realm is not None: ++ # Use the first matching Basic challenge. ++ # Ignore following challenges even if they use the Basic ++ # scheme. + return self.retry_http_basic_auth(host, req, realm) + ++ if unsupported is not None: ++ raise ValueError("AbstractBasicAuthHandler does not " ++ "support the following scheme: %r" ++ % (scheme,)) ++ + def retry_http_basic_auth(self, host, req, realm): + user, pw = self.passwd.find_user_password(realm, host) + if pw is not None: +-- +2.30.1 + +0003-bpo-39603-Prevent-header-injection-in-http-methods-G.patch + +From 138e2caeb4827ccfd1eaff2cf63afb79dfeeb3c4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= +Date: Thu, 10 Sep 2020 13:39:48 +0200 +Subject: [PATCH 03/24] bpo-39603: Prevent header injection in http methods + (GH-18485) (GH-21539) + +reject control chars in http method in http.client.putrequest to prevent http header injection +(cherry picked from commit 8ca8a2e8fb068863c1138f07e3098478ef8be12e) + +Co-authored-by: AMIR <31338382+amiremohamadi@users.noreply.github.com> + +[rebased for py2.7] +--- + Lib/httplib.py | 17 +++++++++++++++++ + Lib/test/test_httplib.py | 20 ++++++++++++++++++++ + 2 files changed, 37 insertions(+) + +diff --git a/Lib/httplib.py b/Lib/httplib.py +index fcc4152aaf..81a08d5d71 100644 +--- a/Lib/httplib.py ++++ b/Lib/httplib.py +@@ -257,6 +257,10 @@ _contains_disallowed_url_pchar_re = re.compile('[\x00-\x20\x7f-\xff]') + # _is_allowed_url_pchars_re = re.compile(r"^[/!$&'()*+,;=:@%a-zA-Z0-9._~-]+$") + # We are more lenient for assumed real world compatibility purposes. + ++# These characters are not allowed within HTTP method names ++# to prevent http header injection. ++_contains_disallowed_method_pchar_re = re.compile('[\x00-\x1f]') ++ + # We always set the Content-Length header for these methods because some + # servers will otherwise respond with a 411 + _METHODS_EXPECTING_BODY = {'PATCH', 'POST', 'PUT'} +@@ -935,6 +939,8 @@ class HTTPConnection: + else: + raise CannotSendRequest() + ++ self._validate_method(method) ++ + # Save the method for use later in the response phase + self._method = method + +@@ -1020,6 +1026,17 @@ class HTTPConnection: + # On Python 2, request is already encoded (default) + return request + ++ def _validate_method(self, method): ++ """Validate a method name for putrequest.""" ++ # prevent http header injection ++ match = _contains_disallowed_method_pchar_re.search(method) ++ if match: ++ msg = ( ++ "method can't contain control characters. {method!r} " ++ "(found at least {matched!r})" ++ ).format(matched=match.group(), method=method) ++ raise ValueError(msg) ++ + def _validate_path(self, url): + """Validate a url for putrequest.""" + # Prevent CVE-2019-9740. +diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py +index d8a57f7353..e20a0986dc 100644 +--- a/Lib/test/test_httplib.py ++++ b/Lib/test/test_httplib.py +@@ -384,6 +384,26 @@ class HeaderTests(TestCase): + with self.assertRaisesRegexp(ValueError, 'Invalid header'): + conn.putheader(name, value) + ++ def test_invalid_method_names(self): ++ methods = ( ++ 'GET\r', ++ 'POST\n', ++ 'PUT\n\r', ++ 'POST\nValue', ++ 'POST\nHOST:abc', ++ 'GET\nrHost:abc\n', ++ 'POST\rRemainder:\r', ++ 'GET\rHOST:\n', ++ '\nPUT' ++ ) ++ ++ for method in methods: ++ with self.assertRaisesRegexp( ++ ValueError, "method can't contain control characters"): ++ conn = httplib.HTTPConnection('example.com') ++ conn.sock = FakeSocket(None) ++ conn.request(method=method, url="/") ++ + + class BasicTest(TestCase): + def test_status_lines(self): +-- +2.30.1 + +0004-bpo-42051-Reject-XML-entity-declarations-in-plist-fi.patch + +From dd9ccc8454250bb4c2e2fe517edbbbbe7d759e12 Mon Sep 17 00:00:00 2001 +From: "Miss Skeleton (bot)" <31488909+miss-islington@users.noreply.github.com> +Date: Mon, 19 Oct 2020 21:38:30 -0700 +Subject: [PATCH 04/24] bpo-42051: Reject XML entity declarations in plist + files (GH-22760) (GH-22801) (GH-22804) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Ronald Oussoren +(cherry picked from commit e512bc799e3864fe3b1351757261762d63471efc) + +Co-authored-by: Ned Deily + +Rebased for Python 2.7 by Michał Górny +--- + Lib/plistlib.py | 7 +++++++ + Lib/test/test_plistlib.py | 18 ++++++++++++++++++ + .../2020-10-19-10-56-27.bpo-42051.EU_B7u.rst | 3 +++ + 3 files changed, 28 insertions(+) + create mode 100644 Misc/NEWS.d/next/Security/2020-10-19-10-56-27.bpo-42051.EU_B7u.rst + +diff --git a/Lib/plistlib.py b/Lib/plistlib.py +index 42897b8da8..2c2b7fb635 100644 +--- a/Lib/plistlib.py ++++ b/Lib/plistlib.py +@@ -403,9 +403,16 @@ class PlistParser: + parser.StartElementHandler = self.handleBeginElement + parser.EndElementHandler = self.handleEndElement + parser.CharacterDataHandler = self.handleData ++ parser.EntityDeclHandler = self.handleEntityDecl + parser.ParseFile(fileobj) + return self.root + ++ def handleEntityDecl(self, entity_name, is_parameter_entity, value, base, system_id, public_id, notation_name): ++ # Reject plist files with entity declarations to avoid XML vulnerabilies in expat. ++ # Regular plist files don't contain those declerations, and Apple's plutil tool does not ++ # accept them either. ++ raise ValueError("XML entity declarations are not supported in plist files") ++ + def handleBeginElement(self, element, attrs): + self.data = [] + handler = getattr(self, "begin_" + element, None) +diff --git a/Lib/test/test_plistlib.py b/Lib/test/test_plistlib.py +index 7859ad0572..612a1d2d6e 100644 +--- a/Lib/test/test_plistlib.py ++++ b/Lib/test/test_plistlib.py +@@ -86,6 +86,19 @@ TESTDATA = """ + + """.replace(" " * 8, "\t") # Apple as well as plistlib.py output hard tabs + ++XML_PLIST_WITH_ENTITY=b'''\ ++ ++ ++ ]> ++ ++ ++ A ++ &entity; ++ ++ ++''' ++ + + class TestPlistlib(unittest.TestCase): + +@@ -195,6 +208,11 @@ class TestPlistlib(unittest.TestCase): + self.assertEqual(test1, result1) + self.assertEqual(test2, result2) + ++ def test_xml_plist_with_entity_decl(self): ++ with self.assertRaisesRegexp(ValueError, ++ "XML entity declarations are not supported"): ++ plistlib.readPlistFromString(XML_PLIST_WITH_ENTITY) ++ + + def test_main(): + test_support.run_unittest(TestPlistlib) +diff --git a/Misc/NEWS.d/next/Security/2020-10-19-10-56-27.bpo-42051.EU_B7u.rst b/Misc/NEWS.d/next/Security/2020-10-19-10-56-27.bpo-42051.EU_B7u.rst +new file mode 100644 +index 0000000000..e865ed12a0 +--- /dev/null ++++ b/Misc/NEWS.d/next/Security/2020-10-19-10-56-27.bpo-42051.EU_B7u.rst +@@ -0,0 +1,3 @@ ++The :mod:`plistlib` module no longer accepts entity declarations in XML ++plist files to avoid XML vulnerabilities. This should not affect users as ++entity declarations are not used in regular plist files. +-- +2.30.1 + +0005-bpo-41944-No-longer-call-eval-on-content-received-vi.patch + +From 6a6c4240fa1e628dbcca09fdde39aea4d8eb6138 Mon Sep 17 00:00:00 2001 +From: "Miss Skeleton (bot)" <31488909+miss-islington@users.noreply.github.com> +Date: Mon, 19 Oct 2020 21:46:10 -0700 +Subject: [PATCH 05/24] bpo-41944: No longer call eval() on content received + via HTTP in the CJK codec tests (GH-22566) (GH-22579) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +(cherry picked from commit 2ef5caa58febc8968e670e39e3d37cf8eef3cab8) + +Co-authored-by: Serhiy Storchaka + +Rebased for Python 2.7 by Michał Górny +--- + Lib/test/multibytecodec_support.py | 23 +++++++------------ + .../2020-10-05-17-43-46.bpo-41944.rf1dYb.rst | 1 + + 2 files changed, 9 insertions(+), 15 deletions(-) + create mode 100644 Misc/NEWS.d/next/Tests/2020-10-05-17-43-46.bpo-41944.rf1dYb.rst + +diff --git a/Lib/test/multibytecodec_support.py b/Lib/test/multibytecodec_support.py +index 5b2329b6d8..b7d7a3aba7 100644 +--- a/Lib/test/multibytecodec_support.py ++++ b/Lib/test/multibytecodec_support.py +@@ -279,30 +279,23 @@ class TestBase_Mapping(unittest.TestCase): + self._test_mapping_file_plain() + + def _test_mapping_file_plain(self): +- _unichr = lambda c: eval("u'\\U%08x'" % int(c, 16)) +- unichrs = lambda s: u''.join(_unichr(c) for c in s.split('+')) ++ def unichrs(s): ++ return ''.join(chr(int(x, 16)) for x in s.split('+')) ++ + urt_wa = {} + + with self.open_mapping_file() as f: + for line in f: + if not line: + break +- data = line.split('#')[0].strip().split() ++ data = line.split('#')[0].split() + if len(data) != 2: + continue + +- csetval = eval(data[0]) +- if csetval <= 0x7F: +- csetch = chr(csetval & 0xff) +- elif csetval >= 0x1000000: +- csetch = chr(csetval >> 24) + chr((csetval >> 16) & 0xff) + \ +- chr((csetval >> 8) & 0xff) + chr(csetval & 0xff) +- elif csetval >= 0x10000: +- csetch = chr(csetval >> 16) + \ +- chr((csetval >> 8) & 0xff) + chr(csetval & 0xff) +- elif csetval >= 0x100: +- csetch = chr(csetval >> 8) + chr(csetval & 0xff) +- else: ++ if data[0][:2] != '0x': ++ self.fail("Invalid line: {line!r}".format(line=line)) ++ csetch = bytes.fromhex(data[0][2:]) ++ if len(csetch) == 1 and 0x80 <= csetch[0]: + continue + + unich = unichrs(data[1]) +diff --git a/Misc/NEWS.d/next/Tests/2020-10-05-17-43-46.bpo-41944.rf1dYb.rst b/Misc/NEWS.d/next/Tests/2020-10-05-17-43-46.bpo-41944.rf1dYb.rst +new file mode 100644 +index 0000000000..4f9782f1c8 +--- /dev/null ++++ b/Misc/NEWS.d/next/Tests/2020-10-05-17-43-46.bpo-41944.rf1dYb.rst +@@ -0,0 +1 @@ ++Tests for CJK codecs no longer call ``eval()`` on content received via HTTP. +-- +2.30.1 + +0006-bpo-40791-Make-compare_digest-more-constant-time.-GH.patch + + +From bfc498a6c971c7393d37c25bdcf5f892afb16ed2 Mon Sep 17 00:00:00 2001 +From: "Miss Islington (bot)" + <31488909+miss-islington@users.noreply.github.com> +Date: Sun, 22 Nov 2020 09:33:09 -0800 +Subject: [PATCH 06/24] bpo-40791: Make compare_digest more constant-time. + (GH-23438) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The existing volatile `left`/`right` pointers guarantee that the reads will all occur, but does not guarantee that they will be _used_. So a compiler can still short-circuit the loop, saving e.g. the overhead of doing the xors and especially the overhead of the data dependency between `result` and the reads. That would change performance depending on where the first unequal byte occurs. This change removes that optimization. + +(This is change GH-1 from https://bugs.python.org/issue40791 .) +(cherry picked from commit 31729366e2bc09632e78f3896dbce0ae64914f28) + +Co-authored-by: Devin Jeanpierre + +Rebased for Python 2.7 by Michał Górny +--- + .../next/Security/2020-05-28-06-06-47.bpo-40791.QGZClX.rst | 1 + + Modules/operator.c | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + create mode 100644 Misc/NEWS.d/next/Security/2020-05-28-06-06-47.bpo-40791.QGZClX.rst + +diff --git a/Misc/NEWS.d/next/Security/2020-05-28-06-06-47.bpo-40791.QGZClX.rst b/Misc/NEWS.d/next/Security/2020-05-28-06-06-47.bpo-40791.QGZClX.rst +new file mode 100644 +index 0000000000..69b9de1bea +--- /dev/null ++++ b/Misc/NEWS.d/next/Security/2020-05-28-06-06-47.bpo-40791.QGZClX.rst +@@ -0,0 +1 @@ ++Add ``volatile`` to the accumulator variable in ``hmac.compare_digest``, making constant-time-defeating optimizations less likely. +\ No newline at end of file +diff --git a/Modules/operator.c b/Modules/operator.c +index 7ddd123f40..67011a6a82 100644 +--- a/Modules/operator.c ++++ b/Modules/operator.c +@@ -259,7 +259,7 @@ _tscmp(const unsigned char *a, const unsigned char *b, + volatile const unsigned char *left; + volatile const unsigned char *right; + Py_ssize_t i; +- unsigned char result; ++ volatile unsigned char result; + + /* loop count depends on length of b */ + length = len_b; +-- +2.30.1 + +0007-3.6-closes-bpo-42938-Replace-snprintf-with-Python-un.patch + +From fab838b2ee7cfb9037c24f0f18dfe01aa379b3f7 Mon Sep 17 00:00:00 2001 +From: Benjamin Peterson +Date: Mon, 18 Jan 2021 15:11:46 -0600 +Subject: [PATCH 07/24] [3.6] closes bpo-42938: Replace snprintf with Python + unicode formatting in ctypes param reprs. (GH-24250) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +(cherry picked from commit 916610ef90a0d0761f08747f7b0905541f0977c7) + +Co-authored-by: Benjamin Peterson +Rebased for Python 2.7 by Michał Górny +--- + Lib/ctypes/test/test_parameters.py | 43 ++++++++++++++++ + .../2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst | 2 + + Modules/_ctypes/callproc.c | 49 +++++++++---------- + 3 files changed, 69 insertions(+), 25 deletions(-) + create mode 100644 Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst + +diff --git a/Lib/ctypes/test/test_parameters.py b/Lib/ctypes/test/test_parameters.py +index 23c1b6e225..3456882ccb 100644 +--- a/Lib/ctypes/test/test_parameters.py ++++ b/Lib/ctypes/test/test_parameters.py +@@ -206,6 +206,49 @@ class SimpleTypesTestCase(unittest.TestCase): + with self.assertRaises(ZeroDivisionError): + WorseStruct().__setstate__({}, b'foo') + ++ def test_parameter_repr(self): ++ from ctypes import ( ++ c_bool, ++ c_char, ++ c_wchar, ++ c_byte, ++ c_ubyte, ++ c_short, ++ c_ushort, ++ c_int, ++ c_uint, ++ c_long, ++ c_ulong, ++ c_longlong, ++ c_ulonglong, ++ c_float, ++ c_double, ++ c_longdouble, ++ c_char_p, ++ c_wchar_p, ++ c_void_p, ++ ) ++ self.assertRegexpMatches(repr(c_bool.from_param(True)), r"^$") ++ self.assertEqual(repr(c_char.from_param('a')), "") ++ self.assertRegexpMatches(repr(c_wchar.from_param('a')), r"^$") ++ self.assertEqual(repr(c_byte.from_param(98)), "") ++ self.assertEqual(repr(c_ubyte.from_param(98)), "") ++ self.assertEqual(repr(c_short.from_param(511)), "") ++ self.assertEqual(repr(c_ushort.from_param(511)), "") ++ self.assertRegexpMatches(repr(c_int.from_param(20000)), r"^$") ++ self.assertRegexpMatches(repr(c_uint.from_param(20000)), r"^$") ++ self.assertRegexpMatches(repr(c_long.from_param(20000)), r"^$") ++ self.assertRegexpMatches(repr(c_ulong.from_param(20000)), r"^$") ++ self.assertRegexpMatches(repr(c_longlong.from_param(20000)), r"^$") ++ self.assertRegexpMatches(repr(c_ulonglong.from_param(20000)), r"^$") ++ self.assertEqual(repr(c_float.from_param(1.5)), "") ++ self.assertEqual(repr(c_double.from_param(1.5)), "") ++ self.assertEqual(repr(c_double.from_param(1e300)), "") ++ self.assertRegexpMatches(repr(c_longdouble.from_param(1.5)), r"^$") ++ self.assertRegexpMatches(repr(c_char_p.from_param(b'hihi')), "^$") ++ self.assertRegexpMatches(repr(c_wchar_p.from_param('hihi')), "^$") ++ self.assertRegexpMatches(repr(c_void_p.from_param(0x12)), r"^$") ++ + ################################################################ + + if __name__ == '__main__': +diff --git a/Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst b/Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst +new file mode 100644 +index 0000000000..7df65a156f +--- /dev/null ++++ b/Misc/NEWS.d/next/Security/2021-01-18-09-27-31.bpo-42938.4Zn4Mp.rst +@@ -0,0 +1,2 @@ ++Avoid static buffers when computing the repr of :class:`ctypes.c_double` and ++:class:`ctypes.c_longdouble` values. +diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c +index 066fefc0cc..421addf353 100644 +--- a/Modules/_ctypes/callproc.c ++++ b/Modules/_ctypes/callproc.c +@@ -460,50 +460,51 @@ PyCArg_dealloc(PyCArgObject *self) + static PyObject * + PyCArg_repr(PyCArgObject *self) + { +- char buffer[256]; + switch(self->tag) { + case 'b': + case 'B': +- sprintf(buffer, "", ++ return PyString_FromFormat("", + self->tag, self->value.b); +- break; + case 'h': + case 'H': +- sprintf(buffer, "", ++ return PyString_FromFormat("", + self->tag, self->value.h); +- break; + case 'i': + case 'I': +- sprintf(buffer, "", ++ return PyString_FromFormat("", + self->tag, self->value.i); +- break; + case 'l': + case 'L': +- sprintf(buffer, "", ++ return PyString_FromFormat("", + self->tag, self->value.l); +- break; + + #ifdef HAVE_LONG_LONG + case 'q': + case 'Q': +- sprintf(buffer, ++ return PyString_FromFormat( + "", + self->tag, self->value.q); +- break; + #endif + case 'd': +- sprintf(buffer, "", +- self->tag, self->value.d); +- break; +- case 'f': +- sprintf(buffer, "", +- self->tag, self->value.f); +- break; +- ++ case 'f': { ++ PyObject *f = PyFloat_FromDouble((self->tag == 'f') ? self->value.f : self->value.d); ++ if (f == NULL) { ++ return NULL; ++ } ++ PyObject *r = PyObject_Repr(f); ++ if (r == NULL) { ++ Py_DECREF(f); ++ return NULL; ++ } ++ PyObject *result = PyString_FromFormat( ++ "", self->tag, PyString_AsString(r)); ++ Py_DECREF(r); ++ Py_DECREF(f); ++ return result; ++ } + case 'c': +- sprintf(buffer, "", ++ return PyString_FromFormat("", + self->tag, self->value.c); +- break; + + /* Hm, are these 'z' and 'Z' codes useful at all? + Shouldn't they be replaced by the functionality of c_string +@@ -512,16 +513,14 @@ PyCArg_repr(PyCArgObject *self) + case 'z': + case 'Z': + case 'P': +- sprintf(buffer, "", ++ return PyString_FromFormat("", + self->tag, self->value.p); + break; + + default: +- sprintf(buffer, "", ++ return PyString_FromFormat("", + self->tag, self); +- break; + } +- return PyString_FromString(buffer); + } + + static PyMemberDef PyCArgType_members[] = { +-- +2.30.1 + +0024-3.6-bpo-42967-only-use-as-a-query-string-separator-G.patch + +From e7b005c05dbdbce967a409abd71641281a8604bf Mon Sep 17 00:00:00 2001 +From: Senthil Kumaran +Date: Mon, 15 Feb 2021 11:16:43 -0800 +Subject: [PATCH 24/24] [3.6] bpo-42967: only use '&' as a query string + separator (GH-24297) (GH-24532) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +bpo-42967: [security] Address a web cache-poisoning issue reported in +urllib.parse.parse_qsl(). + +urllib.parse will only us "&" as query string separator by default +instead of both ";" and "&" as allowed in earlier versions. An optional +argument seperator with default value "&" is added to specify the +separator. + +Co-authored-by: Éric Araujo +Co-authored-by: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> +Co-authored-by: Adam Goldschmidt + +Rebased for Python 2.7 by Michał Górny +--- + Doc/library/cgi.rst | 7 +++- + Doc/library/urlparse.rst | 23 ++++++++++- + Lib/cgi.py | 20 +++++++--- + Lib/test/test_cgi.py | 29 +++++++++++--- + Lib/test/test_urlparse.py | 38 +++++++++---------- + Lib/urlparse.py | 22 ++++++++--- + .../2021-02-14-15-59-16.bpo-42967.YApqDS.rst | 1 + + 7 files changed, 100 insertions(+), 40 deletions(-) + create mode 100644 Misc/NEWS.d/next/Security/2021-02-14-15-59-16.bpo-42967.YApqDS.rst + +diff --git a/Doc/library/cgi.rst b/Doc/library/cgi.rst +index ecd62c8c01..b85cdd8b61 100644 +--- a/Doc/library/cgi.rst ++++ b/Doc/library/cgi.rst +@@ -285,10 +285,10 @@ These are useful if you want more control, or if you want to employ some of the + algorithms implemented in this module in other circumstances. + + +-.. function:: parse(fp[, environ[, keep_blank_values[, strict_parsing]]]) ++.. function:: parse(fp[, environ[, keep_blank_values[, strict_parsing]]], separator="&") + + Parse a query in the environment or from a file (the file defaults to +- ``sys.stdin`` and environment defaults to ``os.environ``). The *keep_blank_values* and *strict_parsing* parameters are ++ ``sys.stdin`` and environment defaults to ``os.environ``). The *keep_blank_values*, *strict_parsing* and *separator* parameters are + passed to :func:`urlparse.parse_qs` unchanged. + + +@@ -316,6 +316,9 @@ algorithms implemented in this module in other circumstances. + Note that this does not parse nested multipart parts --- use + :class:`FieldStorage` for that. + ++ .. versionchanged:: 3.6.13 ++ Added the *separator* parameter. ++ + + .. function:: parse_header(string) + +diff --git a/Doc/library/urlparse.rst b/Doc/library/urlparse.rst +index 0989c88c30..2f8e4c5a44 100644 +--- a/Doc/library/urlparse.rst ++++ b/Doc/library/urlparse.rst +@@ -136,7 +136,7 @@ The :mod:`urlparse` module defines the following functions: + now raise :exc:`ValueError`. + + +-.. function:: parse_qs(qs[, keep_blank_values[, strict_parsing[, max_num_fields]]]) ++.. function:: parse_qs(qs[, keep_blank_values[, strict_parsing[, max_num_fields]]], separator='&') + + Parse a query string given as a string argument (data of type + :mimetype:`application/x-www-form-urlencoded`). Data are returned as a +@@ -157,6 +157,9 @@ The :mod:`urlparse` module defines the following functions: + read. If set, then throws a :exc:`ValueError` if there are more than + *max_num_fields* fields read. + ++ The optional argument *separator* is the symbol to use for separating the ++ query arguments. It defaults to ``&``. ++ + Use the :func:`urllib.urlencode` function to convert such dictionaries into + query strings. + +@@ -166,7 +169,14 @@ The :mod:`urlparse` module defines the following functions: + .. versionchanged:: 2.7.16 + Added *max_num_fields* parameter. + +-.. function:: parse_qsl(qs[, keep_blank_values[, strict_parsing[, max_num_fields]]]) ++ .. versionchanged:: 2.7.18-gentoo ++ Added *separator* parameter with the default value of ``&``. Earlier ++ Python versions allowed using both ``;`` and ``&`` as query parameter ++ separator. This has been changed to allow only a single separator key, ++ with ``&`` as the default separator. ++ ++ ++.. function:: parse_qsl(qs[, keep_blank_values[, strict_parsing[, max_num_fields]]], separator='&') + + Parse a query string given as a string argument (data of type + :mimetype:`application/x-www-form-urlencoded`). Data are returned as a list of +@@ -186,6 +196,9 @@ The :mod:`urlparse` module defines the following functions: + read. If set, then throws a :exc:`ValueError` if there are more than + *max_num_fields* fields read. + ++ The optional argument *separator* is the symbol to use for separating the ++ query arguments. It defaults to ``&``. ++ + Use the :func:`urllib.urlencode` function to convert such lists of pairs into + query strings. + +@@ -195,6 +208,12 @@ The :mod:`urlparse` module defines the following functions: + .. versionchanged:: 2.7.16 + Added *max_num_fields* parameter. + ++ .. versionchanged:: 2.7.18-gentoo ++ Added *separator* parameter with the default value of ``&``. Earlier ++ Python versions allowed using both ``;`` and ``&`` as query parameter ++ separator. This has been changed to allow only a single separator key, ++ with ``&`` as the default separator. ++ + .. function:: urlunparse(parts) + + Construct a URL from a tuple as returned by ``urlparse()``. The *parts* argument +diff --git a/Lib/cgi.py b/Lib/cgi.py +index 5b903e0347..9d0848b6b1 100755 +--- a/Lib/cgi.py ++++ b/Lib/cgi.py +@@ -121,7 +121,8 @@ log = initlog # The current logging function + # 0 ==> unlimited input + maxlen = 0 + +-def parse(fp=None, environ=os.environ, keep_blank_values=0, strict_parsing=0): ++def parse(fp=None, environ=os.environ, keep_blank_values=0, ++ strict_parsing=0, separator='&'): + """Parse a query in the environment or from a file (default stdin) + + Arguments, all optional: +@@ -140,6 +141,9 @@ def parse(fp=None, environ=os.environ, keep_blank_values=0, strict_parsing=0): + strict_parsing: flag indicating what to do with parsing errors. + If false (the default), errors are silently ignored. + If true, errors raise a ValueError exception. ++ ++ separator: str. The symbol to use for separating the query arguments. ++ Defaults to &. + """ + if fp is None: + fp = sys.stdin +@@ -171,7 +175,8 @@ def parse(fp=None, environ=os.environ, keep_blank_values=0, strict_parsing=0): + else: + qs = "" + environ['QUERY_STRING'] = qs # XXX Shouldn't, really +- return urlparse.parse_qs(qs, keep_blank_values, strict_parsing) ++ return urlparse.parse_qs(qs, keep_blank_values, strict_parsing, ++ separator=separator) + + + # parse query string function called from urlparse, +@@ -395,7 +400,7 @@ class FieldStorage: + + def __init__(self, fp=None, headers=None, outerboundary="", + environ=os.environ, keep_blank_values=0, strict_parsing=0, +- max_num_fields=None): ++ max_num_fields=None, separator='&'): + """Constructor. Read multipart/* until last part. + + Arguments, all optional: +@@ -430,6 +435,7 @@ class FieldStorage: + self.keep_blank_values = keep_blank_values + self.strict_parsing = strict_parsing + self.max_num_fields = max_num_fields ++ self.separator = separator + if 'REQUEST_METHOD' in environ: + method = environ['REQUEST_METHOD'].upper() + self.qs_on_post = None +@@ -613,7 +619,8 @@ class FieldStorage: + if self.qs_on_post: + qs += '&' + self.qs_on_post + query = urlparse.parse_qsl(qs, self.keep_blank_values, +- self.strict_parsing, self.max_num_fields) ++ self.strict_parsing, self.max_num_fields, ++ separator=self.separator) + self.list = [MiniFieldStorage(key, value) for key, value in query] + self.skip_lines() + +@@ -629,7 +636,8 @@ class FieldStorage: + query = urlparse.parse_qsl(self.qs_on_post, + self.keep_blank_values, + self.strict_parsing, +- self.max_num_fields) ++ self.max_num_fields, ++ separator=self.separator) + self.list.extend(MiniFieldStorage(key, value) + for key, value in query) + FieldStorageClass = None +@@ -649,7 +657,7 @@ class FieldStorage: + headers = rfc822.Message(self.fp) + part = klass(self.fp, headers, ib, + environ, keep_blank_values, strict_parsing, +- max_num_fields) ++ max_num_fields, separator=self.separator) + + if max_num_fields is not None: + max_num_fields -= 1 +diff --git a/Lib/test/test_cgi.py b/Lib/test/test_cgi.py +index 743c2afbd4..f414faa23b 100644 +--- a/Lib/test/test_cgi.py ++++ b/Lib/test/test_cgi.py +@@ -61,12 +61,9 @@ parse_strict_test_cases = [ + ("", ValueError("bad query field: ''")), + ("&", ValueError("bad query field: ''")), + ("&&", ValueError("bad query field: ''")), +- (";", ValueError("bad query field: ''")), +- (";&;", ValueError("bad query field: ''")), + # Should the next few really be valid? + ("=", {}), + ("=&=", {}), +- ("=;=", {}), + # This rest seem to make sense + ("=a", {'': ['a']}), + ("&=a", ValueError("bad query field: ''")), +@@ -81,8 +78,6 @@ parse_strict_test_cases = [ + ("a=a+b&b=b+c", {'a': ['a b'], 'b': ['b c']}), + ("a=a+b&a=b+a", {'a': ['a b', 'b a']}), + ("x=1&y=2.0&z=2-3.%2b0", {'x': ['1'], 'y': ['2.0'], 'z': ['2-3.+0']}), +- ("x=1;y=2.0&z=2-3.%2b0", {'x': ['1'], 'y': ['2.0'], 'z': ['2-3.+0']}), +- ("x=1;y=2.0;z=2-3.%2b0", {'x': ['1'], 'y': ['2.0'], 'z': ['2-3.+0']}), + ("Hbc5161168c542333633315dee1182227:key_store_seqid=400006&cuyer=r&view=bustomer&order_id=0bb2e248638833d48cb7fed300000f1b&expire=964546263&lobale=en-US&kid=130003.300038&ss=env", + {'Hbc5161168c542333633315dee1182227:key_store_seqid': ['400006'], + 'cuyer': ['r'], +@@ -188,6 +183,30 @@ class CgiTests(unittest.TestCase): + self.assertEqual(expect[k], v) + self.assertItemsEqual(expect.values(), d.values()) + ++ def test_separator(self): ++ parse_semicolon = [ ++ ("x=1;y=2.0", {'x': ['1'], 'y': ['2.0']}), ++ ("x=1;y=2.0;z=2-3.%2b0", {'x': ['1'], 'y': ['2.0'], 'z': ['2-3.+0']}), ++ (";", ValueError("bad query field: ''")), ++ (";;", ValueError("bad query field: ''")), ++ ("=;a", ValueError("bad query field: 'a'")), ++ (";b=a", ValueError("bad query field: ''")), ++ ("b;=a", ValueError("bad query field: 'b'")), ++ ("a=a+b;b=b+c", {'a': ['a b'], 'b': ['b c']}), ++ ("a=a+b;a=b+a", {'a': ['a b', 'b a']}), ++ ] ++ for orig, expect in parse_semicolon: ++ env = {'QUERY_STRING': orig} ++ fs = cgi.FieldStorage(separator=';', environ=env) ++ if isinstance(expect, dict): ++ for key in expect.keys(): ++ expect_val = expect[key] ++ self.assertIn(key, fs) ++ if len(expect_val) > 1: ++ self.assertEqual(fs.getvalue(key), expect_val) ++ else: ++ self.assertEqual(fs.getvalue(key), expect_val[0]) ++ + def test_log(self): + cgi.log("Testing") + +diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py +index 86c4a0595c..0b2107339a 100644 +--- a/Lib/test/test_urlparse.py ++++ b/Lib/test/test_urlparse.py +@@ -24,16 +24,20 @@ parse_qsl_test_cases = [ + ("&a=b", [('a', 'b')]), + ("a=a+b&b=b+c", [('a', 'a b'), ('b', 'b c')]), + ("a=1&a=2", [('a', '1'), ('a', '2')]), +- (";", []), +- (";;", []), +- (";a=b", [('a', 'b')]), +- ("a=a+b;b=b+c", [('a', 'a b'), ('b', 'b c')]), +- ("a=1;a=2", [('a', '1'), ('a', '2')]), +- (b";", []), +- (b";;", []), +- (b";a=b", [(b'a', b'b')]), +- (b"a=a+b;b=b+c", [(b'a', b'a b'), (b'b', b'b c')]), +- (b"a=1;a=2", [(b'a', b'1'), (b'a', b'2')]), ++ (b"", []), ++ (b"&", []), ++ (b"&&", []), ++ (b"=", [(b'', b'')]), ++ (b"=a", [(b'', b'a')]), ++ (b"a", [(b'a', b'')]), ++ (b"a=", [(b'a', b'')]), ++ (b"&a=b", [(b'a', b'b')]), ++ (b"a=a+b&b=b+c", [(b'a', b'a b'), (b'b', b'b c')]), ++ (b"a=1&a=2", [(b'a', b'1'), (b'a', b'2')]), ++ (";a=b", [(';a', 'b')]), ++ ("a=a+b;b=b+c", [('a', 'a b;b=b c')]), ++ (b";a=b", [(b';a', b'b')]), ++ (b"a=a+b;b=b+c", [(b'a', b'a b;b=b c')]), + ] + + parse_qs_test_cases = [ +@@ -57,16 +61,10 @@ parse_qs_test_cases = [ + (b"&a=b", {b'a': [b'b']}), + (b"a=a+b&b=b+c", {b'a': [b'a b'], b'b': [b'b c']}), + (b"a=1&a=2", {b'a': [b'1', b'2']}), +- (";", {}), +- (";;", {}), +- (";a=b", {'a': ['b']}), +- ("a=a+b;b=b+c", {'a': ['a b'], 'b': ['b c']}), +- ("a=1;a=2", {'a': ['1', '2']}), +- (b";", {}), +- (b";;", {}), +- (b";a=b", {b'a': [b'b']}), +- (b"a=a+b;b=b+c", {b'a': [b'a b'], b'b': [b'b c']}), +- (b"a=1;a=2", {b'a': [b'1', b'2']}), ++ (";a=b", {';a': ['b']}), ++ ("a=a+b;b=b+c", {'a': ['a b;b=b c']}), ++ (b";a=b", {b';a': [b'b']}), ++ (b"a=a+b;b=b+c", {b'a':[ b'a b;b=b c']}), + ] + + class UrlParseTestCase(unittest.TestCase): +diff --git a/Lib/urlparse.py b/Lib/urlparse.py +index 798b467b60..6c32727fce 100644 +--- a/Lib/urlparse.py ++++ b/Lib/urlparse.py +@@ -382,7 +382,8 @@ def unquote(s): + append(item) + return ''.join(res) + +-def parse_qs(qs, keep_blank_values=0, strict_parsing=0, max_num_fields=None): ++def parse_qs(qs, keep_blank_values=0, strict_parsing=0, max_num_fields=None, ++ separator='&'): + """Parse a query given as a string argument. + + Arguments: +@@ -402,17 +403,22 @@ def parse_qs(qs, keep_blank_values=0, strict_parsing=0, max_num_fields=None): + + max_num_fields: int. If set, then throws a ValueError if there + are more than n fields read by parse_qsl(). ++ ++ separator: str. The symbol to use for separating the query arguments. ++ Defaults to &. ++ + """ + dict = {} + for name, value in parse_qsl(qs, keep_blank_values, strict_parsing, +- max_num_fields): ++ max_num_fields, separator=separator): + if name in dict: + dict[name].append(value) + else: + dict[name] = [value] + return dict + +-def parse_qsl(qs, keep_blank_values=0, strict_parsing=0, max_num_fields=None): ++def parse_qsl(qs, keep_blank_values=0, strict_parsing=0, max_num_fields=None, ++ separator='&'): + """Parse a query given as a string argument. + + Arguments: +@@ -432,17 +438,23 @@ def parse_qsl(qs, keep_blank_values=0, strict_parsing=0, max_num_fields=None): + max_num_fields: int. If set, then throws a ValueError if there + are more than n fields read by parse_qsl(). + ++ separator: str. The symbol to use for separating the query arguments. ++ Defaults to &. ++ + Returns a list, as G-d intended. + """ ++ if not separator or (not isinstance(separator, (str, bytes))): ++ raise ValueError("Separator must be of type string or bytes.") ++ + # If max_num_fields is defined then check that the number of fields + # is less than max_num_fields. This prevents a memory exhaustion DOS + # attack via post bodies with many fields. + if max_num_fields is not None: +- num_fields = 1 + qs.count('&') + qs.count(';') ++ num_fields = 1 + qs.count(separator) + if max_num_fields < num_fields: + raise ValueError('Max number of fields exceeded') + +- pairs = [s2 for s1 in qs.split('&') for s2 in s1.split(';')] ++ pairs = [s1 for s1 in qs.split(separator)] + r = [] + for name_value in pairs: + if not name_value and not strict_parsing: +diff --git a/Misc/NEWS.d/next/Security/2021-02-14-15-59-16.bpo-42967.YApqDS.rst b/Misc/NEWS.d/next/Security/2021-02-14-15-59-16.bpo-42967.YApqDS.rst +new file mode 100644 +index 0000000000..f08489b414 +--- /dev/null ++++ b/Misc/NEWS.d/next/Security/2021-02-14-15-59-16.bpo-42967.YApqDS.rst +@@ -0,0 +1 @@ ++Fix web cache poisoning vulnerability by defaulting the query args separator to ``&``, and allowing the user to choose a custom separator. +-- +2.30.1 + +Arch py2-ize-the-CJK-codec-test.patch which clearly originates from gentoo. + +From ed1aa2f4738efe948242f252bcb0aa0b4314d2a2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= +Date: Fri, 5 Mar 2021 10:34:50 +0100 +Subject: py2-ize the CJK codec test +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Michał Górny +--- + Lib/test/multibytecodec_support.py | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/Lib/test/multibytecodec_support.py b/Lib/test/multibytecodec_support.py +index b7d7a3aba7..661ef9ee37 100644 +--- a/Lib/test/multibytecodec_support.py ++++ b/Lib/test/multibytecodec_support.py +@@ -2,6 +2,7 @@ + # Common Unittest Routines for CJK codecs + # + ++import binascii + import codecs + import os + import re +@@ -280,7 +281,7 @@ class TestBase_Mapping(unittest.TestCase): + + def _test_mapping_file_plain(self): + def unichrs(s): +- return ''.join(chr(int(x, 16)) for x in s.split('+')) ++ return ''.join(unichr(int(x, 16)) for x in s.split('+')) + + urt_wa = {} + +@@ -294,7 +295,7 @@ class TestBase_Mapping(unittest.TestCase): + + if data[0][:2] != '0x': + self.fail("Invalid line: {line!r}".format(line=line)) +- csetch = bytes.fromhex(data[0][2:]) ++ csetch = binascii.a2b_hex(data[0][2:]) + if len(csetch) == 1 and 0x80 <= csetch[0]: + continue + +-- +cgit v1.2.3 + diff --git a/x86_64/extra/python2/update b/x86_64/extra/python2/update new file mode 100644 index 0000000..f0b31d8 --- /dev/null +++ b/x86_64/extra/python2/update @@ -0,0 +1,5 @@ +url=https://www.python.org/downloads/release + +getver_python3() { + getver | grep ^3 +} diff --git a/x86_64/extra/python3/PKGBUILD b/x86_64/extra/python3/PKGBUILD new file mode 100644 index 0000000..a96a5f0 --- /dev/null +++ b/x86_64/extra/python3/PKGBUILD @@ -0,0 +1,41 @@ +pkgname=python3 +pkgver=3.10.1 +pkgrel=3 +arch=('x86_64') +#extraver=a3 +depends=('sqlite3' 'expat' 'libffi') +source=(https://www.python.org/ftp/python/$pkgver/Python-${pkgver}${extraver}.tar.xz) + +prepare() { + cd Python-${pkgver}${extraver} + + rm -rf Modules/expat + rm -rf Modules/_ctypes/{darwin,libffi} + rm -rf Modules/_decimal/libmpdec +} + +build() { + cd Python-${pkgver}${extraver} + + ./configure \ + --prefix=/usr \ + --enable-shared \ + --with-system-expat \ + --with-system-ffi \ + --with-system-expat \ + --with-system-libmpdec \ + --enable-loadable-sqlite-extensions \ + --without-ensurepip \ + --with-tzpath=/usr/shared/zoneinfo \ + + make +} + +package() { + cd Python-${pkgver}${extraver} + + sed -i 's/^all:.*$/all: build_all/' Makefile + + make DESTDIR=$pkgdir install + ln -sf /usr/bin/python3 $pkgdir/usr/bin/python +} diff --git a/x86_64/extra/python3/update b/x86_64/extra/python3/update new file mode 100644 index 0000000..f0b31d8 --- /dev/null +++ b/x86_64/extra/python3/update @@ -0,0 +1,5 @@ +url=https://www.python.org/downloads/release + +getver_python3() { + getver | grep ^3 +} diff --git a/x86_64/extra/qemu/65-kvm.rules b/x86_64/extra/qemu/65-kvm.rules new file mode 100644 index 0000000..fbb0ebb --- /dev/null +++ b/x86_64/extra/qemu/65-kvm.rules @@ -0,0 +1 @@ +KERNEL=="vhost-net", GROUP="kvm", MODE="0660", TAG+="uaccess", OPTIONS+="static_node=vhost-net" diff --git a/x86_64/extra/qemu/PKGBUILD b/x86_64/extra/qemu/PKGBUILD new file mode 100644 index 0000000..a73d526 --- /dev/null +++ b/x86_64/extra/qemu/PKGBUILD @@ -0,0 +1,58 @@ +pkgname=qemu +pkgver=7.1.0 +pkgrel=1 +arch=(x86_64) +depends=(cairo cdrtools gdk-pixbuf glib2 + gnutls gtk3+ libaio libcacard libepoxy + libpng libseccomp libx11 libxkbcommon + meson ndctl numactl python3 + spice-protocol systemd zlib ceph sdl2 gtk3+ + pixman vte libtasn1 linux-pam ncurses curl + alsa-lib pulseaudio jack2 libcap-ng libusb mesa + libiscsi libssh lzo libglvnd + snappy bzip2 zstd spice spice-protocol) +makedepends=(curl) +options=(!strip !emptydirs) +source=(http://download.qemu-project.org/$pkgname-$pkgver.tar.xz + 65-kvm.rules + qemu-guest-agent.service + qemu-binfmt.conf) +install=qemu.install + +prepare() { + mkdir -p $pkgname-$pkgver/build + + cd $pkgname-$pkgver/build + ./../configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --enable-linux-user \ + --enable-modules \ + --disable-werror \ + --with-opengl \ + --audio-drv-list=alsa +} + +build() { + cd $pkgname-$pkgver/build + + make +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + install -vDm 644 $srcdir/qemu-guest-agent.service -t "$pkgdir/usr/lib/systemd/system/" + + # systemd stuff + install -Dm644 $srcdir/65-kvm.rules "$pkgdir/usr/lib/udev/rules.d/65-kvm.rules" + + # Binfmt support ( Non static ) + install -Dm644 $srcdir/qemu-binfmt.conf $pkgdir/usr/lib/binfmt.d/qemu-binfmt.conf + + # Strip qemu bin folder as its over 2gigs if not stripped + strip -d $pkgdir/usr/bin/* +} diff --git a/x86_64/extra/qemu/qemu-binfmt.conf b/x86_64/extra/qemu/qemu-binfmt.conf new file mode 100644 index 0000000..d1979a4 --- /dev/null +++ b/x86_64/extra/qemu/qemu-binfmt.conf @@ -0,0 +1,19 @@ +:qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-aarch64:CF +:qemu-alpha:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x26\x90:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-alpha:CF +:qemu-arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm:CF +:qemu-armeb:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-armeb:CF +:qemu-cris:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x4c\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-cris:CF +:qemu-m68k:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x04:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-m68k:CF +:qemu-microblaze:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xba\xab:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-microblaze:CF +:qemu-mips:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08:\xff\xff\xff\xff\xff\xff\xff\x00\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-mips:CF +:qemu-mipsel:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xfe\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-mipsel:CF +:qemu-ppc:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x14:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-ppc:CF +:qemu-ppc64:M::\x7fELF\x02\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x15:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-ppc64:CF +:qemu-s390x:M::\x7fELF\x02\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x16:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-s390x:CF +:qemu-sh4:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2a\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-sh4:CF +:qemu-sh4eb:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2a:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-sh4eb:CF +:qemu-sparc:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x02:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-sparc:CF +:qemu-sparc32plus:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x12:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-sparc32plus:CF +:qemu-sparc64:M::\x7fELF\x02\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2b:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-sparc64:CF +:qemu-riscv64:M::\x7f\x45\x4c\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xf3\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-riscv64:CF +:qemu-aarch64-static:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-aarch64-static:CF diff --git a/x86_64/extra/qemu/qemu-guest-agent.service b/x86_64/extra/qemu/qemu-guest-agent.service new file mode 100644 index 0000000..abbb6ab --- /dev/null +++ b/x86_64/extra/qemu/qemu-guest-agent.service @@ -0,0 +1,9 @@ +[Unit] +Description=QEMU Guest Agent +ConditionPathExists=/dev/virtio-ports/org.qemu.guest_agent.0 + +[Service] +ExecStart=/usr/bin/qemu-ga + +[Install] +WantedBy=multi-user.target diff --git a/x86_64/extra/qemu/qemu.install b/x86_64/extra/qemu/qemu.install new file mode 100644 index 0000000..172261a --- /dev/null +++ b/x86_64/extra/qemu/qemu.install @@ -0,0 +1,11 @@ +post_install() { + if systemctl is-enabled -q qemu-ga.service; then + systemctl disable qemu-ga.service + systemctl enable qemu-guest-agent.service + fi + + for _e in /sys/devices/virtual/misc/vhost-net; do + [[ -e "$_e" ]] && udevadm trigger "$_e" + done + : +} diff --git a/x86_64/extra/qpdf/PKGBUILD b/x86_64/extra/qpdf/PKGBUILD new file mode 100644 index 0000000..5061694 --- /dev/null +++ b/x86_64/extra/qpdf/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=qpdf +pkgver=10.6.3 +pkgrel=1 +arch=('x86_64') +makedepends=('libjpeg' 'zlib' 'gnutls' 'python3-pip') +source=(https://github.com/qpdf/qpdf/releases/download/release-${pkgname}-${pkgver}/${pkgname}-${pkgver}.tar.gz) + +prepare() { + pip3 install sphinx latex +} + +build() { + cd ${pkgname}-${pkgver} + ./configure --prefix=/usr \ + --disable-static \ + --enable-crypto-gnutls \ + --disable-crypto-openssl \ + --disable-implicit-crypto \ + --enable-show-failed-test-output \ + --disable-doc-maintenance \ + --disable-html-doc \ + --disable-pdf-doc \ + --disable-oss-fuzz + + make doc-dist DOC_DEST=doc all +} + +package_qpdf() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}/" install + + install -Dm644 completions/bash/qpdf "${pkgdir}/usr/share/bash-completion/completions/qpdf" + install -Dm644 completions/zsh/_qpdf "${pkgdir}/usr/share/zsh/site-functions/_qpdf" +} diff --git a/x86_64/extra/qrencode/PKGBUILD b/x86_64/extra/qrencode/PKGBUILD new file mode 100644 index 0000000..70f8a5a --- /dev/null +++ b/x86_64/extra/qrencode/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=qrencode +pkgver=4.1.1 +pkgrel=1 +arch=('x86_64') +depends=(libpng) +makedepends=(doxygen) +source=(https://fukuchi.org/works/qrencode/qrencode-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make + + # To make docs + doxygen +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/qt5-webengine/040-ffmpeg-add-av_stream_get_first_dts-for-chromium.patch b/x86_64/extra/qt5-webengine/040-ffmpeg-add-av_stream_get_first_dts-for-chromium.patch new file mode 100644 index 0000000..fb55898 --- /dev/null +++ b/x86_64/extra/qt5-webengine/040-ffmpeg-add-av_stream_get_first_dts-for-chromium.patch @@ -0,0 +1,44 @@ +From 95aab0fd83619408995720ce53d7a74790580220 Mon Sep 17 00:00:00 2001 +From: "liberato@chromium.org" +Date: Wed, 7 Jul 2021 19:01:22 -0700 +Subject: [PATCH] Add av_stream_get_first_dts for Chromium + +[foutrelis: adjust for new FFStream struct replacing AVStreamInternal] +--- + libavformat/avformat.h | 4 ++++ + libavformat/utils.c | 7 +++++++ + 2 files changed, 11 insertions(+) + +diff --git a/libavformat/avformat.h b/libavformat/avformat.h +index cd7b0d941c..b4a6dce885 100644 +--- a/libavformat/avformat.h ++++ b/libavformat/avformat.h +@@ -1010,6 +1010,10 @@ struct AVCodecParserContext *av_stream_get_parser(const AVStream *s); + */ + int64_t av_stream_get_end_pts(const AVStream *st); + ++// Chromium: We use the internal field first_dts vvv ++int64_t av_stream_get_first_dts(const AVStream *st); ++// Chromium: We use the internal field first_dts ^^^ ++ + #define AV_PROGRAM_RUNNING 1 + + /** +diff --git a/libavformat/utils.c b/libavformat/utils.c +index de7580c32d..0ef0fe530e 100644 +--- a/libavformat/utils.c ++++ b/libavformat/utils.c +@@ -121,6 +121,13 @@ int64_t av_stream_get_end_pts(const AVStream *st) + return AV_NOPTS_VALUE; + } + ++// Chromium: We use the internal field first_dts vvv ++int64_t av_stream_get_first_dts(const AVStream *st) ++{ ++ return cffstream(st)->first_dts; ++} ++// Chromium: We use the internal field first_dts ^^^ ++ + struct AVCodecParserContext *av_stream_get_parser(const AVStream *st) + { + return st->internal->parser; diff --git a/x86_64/extra/qt5-webengine/PKGBUILD b/x86_64/extra/qt5-webengine/PKGBUILD new file mode 100644 index 0000000..4a58025 --- /dev/null +++ b/x86_64/extra/qt5-webengine/PKGBUILD @@ -0,0 +1,66 @@ +pkgname=qt5-webengine +pkgver=5.15.4 +pkgrel=1 +arch=('x86_64') +depends=(qt5 nodejs nss pciutils llvm clang bison ffmpeg minizip double-conversion) +makedepends=(extra-cmake-modules python3-pip python2-pip python2-setuptools) +commitid_engine=0d4ca9cfb0d6e538172005e1c4b0b3a021b1c18c # 5.15.4 +commitid_engine_chromium=9353f70aaebce920bd5644e658bae594f2736ea1 # 5.14.2 + 83.0.4103.122 +commitid_chromium=7683bd0d07dd39ebcd2bdfab0948d86dc31caea1 # +url=https://invent.kde.org/qt/qt/ +source=( + # QT_webengine + git+https://code.qt.io/qt/qtwebengine.git#commit=$commitid_engine + + # Chromium_engine + git+https://code.qt.io/qt/qtwebengine-chromium.git#branch=87-based + + # Catapult with native python3 support + git+https://chromium.googlesource.com/catapult#commit=$commitid_chromium + + # Patches + #qt5-webengine-python3.patch + qt5-webengine-chromium-python3.patch + #qt5-webengine-ffmpeg5.patch + qt5-webengine-pipewire-0.3.patch + qt5-webengine-gcc12.patch) +prepare() { + cd qtwebengine + + mkdir -p build + + cp -rf $srcdir/qtwebengine-chromium/* $srcdir/qtwebengine/src/3rdparty/ + + cd $srcdir/qtwebengine + patch -p1 -i "$srcdir"/qt5-webengine-python3.patch # Fix build with Python 3 + patch -p1 -d src/3rdparty -i "$srcdir"/qt5-webengine-chromium-python3.patch + + #patch -p1 -d src/3rdparty -i "$srcdir"/qt5-webengine-ffmpeg5.patch # Fix build with ffmpeg 5 + patch -p1 -d src/3rdparty -i "$srcdir"/qt5-webengine-pipewire-0.3.patch # Port to pipewire 0.3 + patch -p1 -d src/3rdparty -i "$srcdir"/qt5-webengine-gcc12.patch # Fix build with GCC 12 + + rm -rf src/3rdparty/chromium/third_party/catapult + cp -rf $srcdir/catapult src/3rdparty/chromium/third_party +} + +build() { + mkdir -p qtwebengine/build + cd qtwebengine/build + + qmake ../ \ + CONFIG+=force_debug_info \ + EXTRA_GN="use_lld=true is_clang=true clang_use_chrome_plugins=false" -- \ + -proprietary-codecs \ + -system-ffmpeg \ + -webp \ + -spellchecker \ + -webengine-icu + + make +} + +package() { + cd qtwebengine/build + + make INSTALL_ROOT="$pkgdir" install +} diff --git a/x86_64/extra/qt5-webengine/qt5-chromium-qtversion.patch b/x86_64/extra/qt5-webengine/qt5-chromium-qtversion.patch new file mode 100644 index 0000000..3032e7e --- /dev/null +++ b/x86_64/extra/qt5-webengine/qt5-chromium-qtversion.patch @@ -0,0 +1,38 @@ +From f7391439057b3d8845a9af01b03848b3211ca986 Mon Sep 17 00:00:00 2001 +From: Michal Klocek +Date: Tue, 11 May 2021 10:24:35 +0200 +Subject: Add support for QT_GN_VERSION + +Change-Id: If5ac705f3a4292da915d1f36526ef1fbed3868e6 +Reviewed-by: Allan Sandfeld Jensen +--- + gn/src/gn/gn_main.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +(limited to 'gn/src/gn/gn_main.cc') + +diff --git a/gn/src/gn/gn_main.cc b/gn/src/gn/gn_main.cc +index 3d260a3c46f..ae54a2aecfd 100644 +--- a/gn/src/gn/gn_main.cc ++++ b/gn/src/gn/gn_main.cc +@@ -16,7 +16,7 @@ + #include "util/msg_loop.h" + #include "util/sys_info.h" + +-// #include "last_commit_position.h" ++#include "qt_version.h" + + namespace { + +@@ -49,7 +49,7 @@ int main(int argc, char** argv) { + command = commands::kHelp; + } else if (cmdline.HasSwitch(switches::kVersion)) { + // Make "--version" print the version and exit. +-// OutputString(std::string(LAST_COMMIT_POSITION) + "\n"); ++ OutputString(std::string(QT_GN_VERSION) +"\n"); + exit(0); + } else if (args.empty()) { + // No command, print error and exit. +-- +cgit v1.2.1 + diff --git a/x86_64/extra/qt5-webengine/qt5-webengine-chromium-python3.patch b/x86_64/extra/qt5-webengine/qt5-webengine-chromium-python3.patch new file mode 100644 index 0000000..c55225b --- /dev/null +++ b/x86_64/extra/qt5-webengine/qt5-webengine-chromium-python3.patch @@ -0,0 +1,1812 @@ +diff --git a/chromium/build/print_python_deps.py b/chromium/build/print_python_deps.py +index fd29c0972c9..69af247094b 100755 +--- a/chromium/build/print_python_deps.py ++++ b/chromium/build/print_python_deps.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python2.7 ++#!/usr/bin/python + # Copyright 2016 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +@@ -80,7 +80,7 @@ def _GetTargetPythonVersion(module): + if shebang.startswith('#!'): + # Examples: + # '#!/usr/bin/python' +- # '#!/usr/bin/python2.7' ++ # '#!/usr/bin/python' + # '#!/usr/bin/python3' + # '#!/usr/bin/env python3' + # '#!/usr/bin/env vpython' +@@ -152,7 +152,7 @@ def main(): + + # Trybots run with vpython as default Python, but with a different config + # from //.vpython. To make the is_vpython test work, and to match the behavior +- # of dev machines, the shebang line must be run with python2.7. ++ # of dev machines, the shebang line must be run with python. + # + # E.g. $HOME/.vpython-root/dd50d3/bin/python + # E.g. /b/s/w/ir/cache/vpython/ab5c79/bin/python +diff --git a/chromium/components/resources/protobufs/binary_proto_generator.py b/chromium/components/resources/protobufs/binary_proto_generator.py +index 7422ead9697..16365515f26 100755 +--- a/chromium/components/resources/protobufs/binary_proto_generator.py ++++ b/chromium/components/resources/protobufs/binary_proto_generator.py +@@ -7,7 +7,7 @@ + Converts a given ASCII proto into a binary resource. + + """ +- ++from __future__ import print_function + import abc + import imp + import optparse +@@ -196,12 +196,12 @@ class BinaryProtoGenerator: + self._ImportProtoModules(opts.path) + + if not self.VerifyArgs(opts): +- print "Wrong arguments" ++ print("Wrong arguments") + return 1 + + try: + self._GenerateBinaryProtos(opts) + except Exception as e: +- print "ERROR: Failed to render binary version of %s:\n %s\n%s" % ( +- opts.infile, str(e), traceback.format_exc()) ++ print("ERROR: Failed to render binary version of %s:\n %s\n%s" % ++ (opts.infile, str(e), traceback.format_exc())) + return 1 +diff --git a/chromium/content/browser/tracing/generate_trace_viewer_grd.py b/chromium/content/browser/tracing/generate_trace_viewer_grd.py +index 037f9497dc2..be393d21f90 100755 +--- a/chromium/content/browser/tracing/generate_trace_viewer_grd.py ++++ b/chromium/content/browser/tracing/generate_trace_viewer_grd.py +@@ -74,7 +74,7 @@ def main(argv): + for filename in parsed_args.source_files: + add_file_to_grd(doc, os.path.basename(filename)) + +- with open(parsed_args.output_filename, 'w') as output_file: ++ with open(parsed_args.output_filename, 'wb') as output_file: + output_file.write(doc.toxml(encoding='UTF-8')) + + +diff --git a/chromium/mojo/public/tools/bindings/BUILD.gn b/chromium/mojo/public/tools/bindings/BUILD.gn +index fc04b5dd0b1..708958e438b 100644 +--- a/chromium/mojo/public/tools/bindings/BUILD.gn ++++ b/chromium/mojo/public/tools/bindings/BUILD.gn +@@ -2,9 +2,11 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + ++import("//build/config/python.gni") + import("//mojo/public/tools/bindings/mojom.gni") + import("//third_party/jinja2/jinja2.gni") + ++# TODO(crbug.com/1194274): Investigate nondeterminism in Py3 builds. + action("precompile_templates") { + sources = mojom_generator_sources + sources += [ +diff --git a/chromium/mojo/public/tools/bindings/gen_data_files_list.py b/chromium/mojo/public/tools/bindings/gen_data_files_list.py +index 79c9e50efce..8b78d092418 100644 +--- a/chromium/mojo/public/tools/bindings/gen_data_files_list.py ++++ b/chromium/mojo/public/tools/bindings/gen_data_files_list.py +@@ -18,7 +18,6 @@ import os + import re + import sys + +-from cStringIO import StringIO + from optparse import OptionParser + + sys.path.insert( +@@ -41,12 +40,9 @@ def main(): + pattern = re.compile(options.pattern) + files = [f for f in os.listdir(options.directory) if pattern.match(f)] + +- stream = StringIO() +- for f in files: +- print(f, file=stream) ++ contents = '\n'.join(f for f in files) + '\n' ++ WriteFile(contents, options.output) + +- WriteFile(stream.getvalue(), options.output) +- stream.close() + + if __name__ == '__main__': + sys.exit(main()) +diff --git a/chromium/mojo/public/tools/bindings/generators/mojom_java_generator.py b/chromium/mojo/public/tools/bindings/generators/mojom_java_generator.py +index 96b2fdfae0c..00b9dccd00c 100644 +--- a/chromium/mojo/public/tools/bindings/generators/mojom_java_generator.py ++++ b/chromium/mojo/public/tools/bindings/generators/mojom_java_generator.py +@@ -25,6 +25,10 @@ sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, + 'build', 'android', 'gyp')) + from util import build_utils + ++# TODO(crbug.com/1174969): Remove this once Python2 is obsoleted. ++if sys.version_info.major != 2: ++ basestring = str ++ long = int + + GENERATOR_PREFIX = 'java' + +diff --git a/chromium/mojo/public/tools/mojom/mojom/generate/generator.py b/chromium/mojo/public/tools/mojom/mojom/generate/generator.py +index de62260a5c9..4a1c73fcf82 100644 +--- a/chromium/mojo/public/tools/mojom/mojom/generate/generator.py ++++ b/chromium/mojo/public/tools/mojom/mojom/generate/generator.py +@@ -136,9 +136,14 @@ class Stylizer(object): + + def WriteFile(contents, full_path): + # If |contents| is same with the file content, we skip updating. ++ if not isinstance(contents, bytes): ++ data = contents.encode('utf8') ++ else: ++ data = contents ++ + if os.path.isfile(full_path): + with open(full_path, 'rb') as destination_file: +- if destination_file.read() == contents: ++ if destination_file.read() == data: + return + + # Make sure the containing directory exists. +@@ -146,11 +151,8 @@ def WriteFile(contents, full_path): + fileutil.EnsureDirectoryExists(full_dir) + + # Dump the data to disk. +- with open(full_path, "wb") as f: +- if not isinstance(contents, bytes): +- f.write(contents.encode('utf-8')) +- else: +- f.write(contents) ++ with open(full_path, 'wb') as f: ++ f.write(data) + + + def AddComputedData(module): +diff --git a/chromium/mojo/public/tools/mojom/mojom/generate/module.py b/chromium/mojo/public/tools/mojom/mojom/generate/module.py +index ebbc9b322ea..3d026429bbc 100644 +--- a/chromium/mojo/public/tools/mojom/mojom/generate/module.py ++++ b/chromium/mojo/public/tools/mojom/mojom/generate/module.py +@@ -398,7 +398,8 @@ class Field(object): + + + class StructField(Field): +- pass ++ def __hash__(self): ++ return super(Field, self).__hash__() + + + class UnionField(Field): +diff --git a/chromium/mojo/public/tools/mojom/mojom/generate/template_expander.py b/chromium/mojo/public/tools/mojom/mojom/generate/template_expander.py +index 7a300560246..8d9e26fb7f6 100644 +--- a/chromium/mojo/public/tools/mojom/mojom/generate/template_expander.py ++++ b/chromium/mojo/public/tools/mojom/mojom/generate/template_expander.py +@@ -75,9 +75,9 @@ def PrecompileTemplates(generator_modules, output_dir): + os.path.dirname(module.__file__), generator.GetTemplatePrefix()) + ])) + jinja_env.filters.update(generator.GetFilters()) +- jinja_env.compile_templates( +- os.path.join(output_dir, "%s.zip" % generator.GetTemplatePrefix()), +- extensions=["tmpl"], +- zip="stored", +- py_compile=True, +- ignore_errors=False) ++ jinja_env.compile_templates(os.path.join( ++ output_dir, "%s.zip" % generator.GetTemplatePrefix()), ++ extensions=["tmpl"], ++ zip="stored", ++ py_compile=sys.version_info.major < 3, ++ ignore_errors=False) +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py +index 3225ecca6e4..fc078d31b55 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py +@@ -344,7 +344,7 @@ def make_default_value_expr(idl_type, default_value): + """ + assert default_value.is_type_compatible_with(idl_type) + +- class DefaultValueExpr: ++ class DefaultValueExpr(object): + _ALLOWED_SYMBOLS_IN_DEPS = ("isolate") + + def __init__(self, initializer_expr, initializer_deps, +@@ -502,7 +502,7 @@ def make_v8_to_blink_value(blink_var_name, + assert isinstance(blink_var_name, str) + assert isinstance(v8_value_expr, str) + assert isinstance(idl_type, web_idl.IdlType) +- assert (argument_index is None or isinstance(argument_index, (int, long))) ++ assert (argument_index is None or isinstance(argument_index, int)) + assert (default_value is None + or isinstance(default_value, web_idl.LiteralConstant)) + +@@ -622,7 +622,7 @@ def make_v8_to_blink_value_variadic(blink_var_name, v8_array, + """ + assert isinstance(blink_var_name, str) + assert isinstance(v8_array, str) +- assert isinstance(v8_array_start_index, (int, long)) ++ assert isinstance(v8_array_start_index, int) + assert isinstance(idl_type, web_idl.IdlType) + + pattern = ("auto&& ${{{_1}}} = " +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/callback_interface.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/callback_interface.py +index 4a6df513068..8b51f23a409 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/callback_interface.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/callback_interface.py +@@ -177,7 +177,7 @@ def generate_callback_interface(callback_interface_identifier): + prop_install_mode=PropInstallMode.UNCONDITIONAL, + trampoline_var_name=None, + attribute_entries=[], +- constant_entries=filter(is_unconditional, constant_entries), ++ constant_entries=list(filter(is_unconditional, constant_entries)), + exposed_construct_entries=[], + operation_entries=[]) + (install_interface_template_decl, install_interface_template_def, +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/code_node.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/code_node.py +index 52972fefe20..e5ae9d9629e 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/code_node.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/code_node.py +@@ -503,13 +503,13 @@ class CompositeNode(CodeNode): + gensym_kwargs = {} + template_vars = {} + for arg in args: +- assert isinstance(arg, (CodeNode, int, long, str)) ++ assert isinstance(arg, (CodeNode, int, str)) + gensym = CodeNode.gensym() + gensym_args.append("${{{}}}".format(gensym)) + template_vars[gensym] = arg + for key, value in kwargs.items(): +- assert isinstance(key, (int, long, str)) +- assert isinstance(value, (CodeNode, int, long, str)) ++ assert isinstance(key, (int, str)) ++ assert isinstance(value, (CodeNode, int, str)) + gensym = CodeNode.gensym() + gensym_kwargs[key] = "${{{}}}".format(gensym) + template_vars[gensym] = value +@@ -602,7 +602,7 @@ class ListNode(CodeNode): + def insert(self, index, node): + if node is None: + return +- assert isinstance(index, (int, long)) ++ assert isinstance(index, int) + assert isinstance(node, CodeNode) + assert node.outer is None and node.prev is None + +@@ -721,7 +721,7 @@ class SymbolScopeNode(SequenceNode): + if not scope_chains: + return counts + +- self_index = iter(scope_chains).next().index(self) ++ self_index = next(iter(scope_chains)).index(self) + scope_chains = map( + lambda scope_chain: scope_chain[self_index + 1:], scope_chains) + scope_to_likeliness = {} +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_expr.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_expr.py +index a229a6c71c9..5fa288dabf2 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_expr.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_expr.py +@@ -109,7 +109,7 @@ def expr_and(terms): + + if any(term.is_always_false for term in terms): + return _Expr(False) +- terms = filter(lambda x: not x.is_always_true, terms) ++ terms = list(filter(lambda x: not x.is_always_true, terms)) + if not terms: + return _Expr(True) + if len(terms) == 1: +@@ -124,7 +124,7 @@ def expr_or(terms): + + if any(term.is_always_true for term in terms): + return _Expr(True) +- terms = filter(lambda x: not x.is_always_false, terms) ++ terms = list(filter(lambda x: not x.is_always_false, terms)) + if not terms: + return _Expr(False) + if len(terms) == 1: +@@ -222,7 +222,7 @@ def expr_from_exposure(exposure, + elif exposure.only_in_secure_contexts is False: + secure_context_term = _Expr(True) + else: +- terms = map(ref_enabled, exposure.only_in_secure_contexts) ++ terms = list(map(ref_enabled, exposure.only_in_secure_contexts)) + secure_context_term = expr_or( + [_Expr("${is_in_secure_context}"), + expr_not(expr_and(terms))]) +@@ -275,10 +275,11 @@ def expr_from_exposure(exposure, + + # [ContextEnabled] + if exposure.context_enabled_features: +- terms = map( +- lambda feature: _Expr( +- "${{context_feature_settings}}->is{}Enabled()".format( +- feature)), exposure.context_enabled_features) ++ terms = list( ++ map( ++ lambda feature: _Expr( ++ "${{context_feature_settings}}->is{}Enabled()".format( ++ feature)), exposure.context_enabled_features)) + context_enabled_terms.append( + expr_and([_Expr("${context_feature_settings}"), + expr_or(terms)])) +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_format.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_format.py +index 87d26eec3ca..f3e9d38247e 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_format.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_format.py +@@ -23,7 +23,7 @@ class _TemplateFormatter(string.Formatter): + self._template_formatter_indexing_count_ = 0 + + def get_value(self, key, args, kwargs): +- if isinstance(key, (int, long)): ++ if isinstance(key, int): + return args[key] + assert isinstance(key, str) + if not key: +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py +index 2bcc4fed49a..e72282aa696 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py +@@ -116,4 +116,4 @@ def write_code_node_to_file(code_node, filepath): + # stderr=format_result.error_message)) + # + # web_idl.file_io.write_to_file_if_changed(filepath, format_result.contents) +- web_idl.file_io.write_to_file_if_changed(filepath, rendered_text) ++ web_idl.file_io.write_to_file_if_changed(filepath, rendered_text.encode('utf-8')) +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/dictionary.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/dictionary.py +index b39f0100410..4d68202296b 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/dictionary.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/dictionary.py +@@ -993,7 +993,7 @@ def make_dict_trace_func(cg_context): + _2 = _blink_member_name(member).value_var + return TextNode(_format(pattern, _1=_1, _2=_2)) + +- body.extend(map(make_trace_member_node, own_members)) ++ body.extend(list(map(make_trace_member_node, own_members))) + body.append(TextNode("BaseClass::Trace(visitor);")) + + return func_decl, func_def +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py +index 10ff30656ad..bfdf7128aac 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/interface.py +@@ -582,7 +582,7 @@ def _make_blink_api_call(code_node, + overriding_args=None): + assert isinstance(code_node, SymbolScopeNode) + assert isinstance(cg_context, CodeGenContext) +- assert num_of_args is None or isinstance(num_of_args, (int, long)) ++ assert num_of_args is None or isinstance(num_of_args, int) + assert (overriding_args is None + or (isinstance(overriding_args, (list, tuple)) + and all(isinstance(arg, str) for arg in overriding_args))) +@@ -1196,8 +1196,10 @@ def make_overload_dispatcher(cg_context): + did_use_break = did_use_break or can_fail + + conditional = expr_or( +- map(lambda item: expr_from_exposure(item.function_like.exposure), +- items)) ++ list( ++ map( ++ lambda item: expr_from_exposure(item.function_like.exposure ++ ), items))) + if not conditional.is_always_true: + node = CxxUnlikelyIfNode(cond=conditional, body=node) + +@@ -4642,7 +4644,7 @@ class _PropEntryConstructorGroup(_PropEntryBase): + def __init__(self, is_context_dependent, exposure_conditional, world, + constructor_group, ctor_callback_name, ctor_func_length): + assert isinstance(ctor_callback_name, str) +- assert isinstance(ctor_func_length, (int, long)) ++ assert isinstance(ctor_func_length, int) + + _PropEntryBase.__init__(self, is_context_dependent, + exposure_conditional, world, constructor_group) +@@ -4670,7 +4672,7 @@ class _PropEntryOperationGroup(_PropEntryBase): + op_func_length, + no_alloc_direct_callback_name=None): + assert isinstance(op_callback_name, str) +- assert isinstance(op_func_length, (int, long)) ++ assert isinstance(op_func_length, int) + + _PropEntryBase.__init__(self, is_context_dependent, + exposure_conditional, world, operation_group) +@@ -5175,9 +5177,9 @@ def make_install_interface_template(cg_context, function_name, class_name, api_c + ]) + + if class_like.identifier == "CSSStyleDeclaration": +- css_properties = filter( +- lambda attr: "CSSProperty" in attr.extended_attributes, +- class_like.attributes) ++ css_properties = list( ++ filter(lambda attr: "CSSProperty" in attr.extended_attributes, ++ class_like.attributes)) + if css_properties: + prop_name_list = "".join( + map(lambda attr: "\"{}\", ".format(attr.identifier), +@@ -5567,8 +5569,8 @@ ${instance_object} = ${v8_context}->Global()->GetPrototype().As();\ + "V8DOMConfiguration::InstallConstants(${isolate}, " + "${interface_template}, ${prototype_template}, " + "kConstantCallbackTable, base::size(kConstantCallbackTable));") +- constant_callback_entries = filter(lambda entry: entry.const_callback_name, +- constant_entries) ++ constant_callback_entries = list(filter(lambda entry: entry.const_callback_name, ++ constant_entries)) + install_properties(table_name, constant_callback_entries, + _make_constant_callback_registration_table, + installer_call_text) +@@ -5584,8 +5586,8 @@ ${instance_object} = ${v8_context}->Global()->GetPrototype().As();\ + "V8DOMConfiguration::InstallConstants(${isolate}, " + "${interface_template}, ${prototype_template}, " + "kConstantValueTable, base::size(kConstantValueTable));") +- constant_value_entries = filter( +- lambda entry: not entry.const_callback_name, constant_entries) ++ constant_value_entries = list(filter( ++ lambda entry: not entry.const_callback_name, constant_entries)) + install_properties(table_name, constant_value_entries, + _make_constant_value_registration_table, + installer_call_text) +@@ -6336,8 +6338,8 @@ def make_v8_context_snapshot_api(cg_context, component, attribute_entries, + assert isinstance(component, web_idl.Component) + + derived_interfaces = cg_context.interface.deriveds +- derived_names = map(lambda interface: interface.identifier, +- derived_interfaces) ++ derived_names = list( ++ map(lambda interface: interface.identifier, derived_interfaces)) + derived_names.append(cg_context.interface.identifier) + if not ("Window" in derived_names or "HTMLDocument" in derived_names): + return None, None +@@ -6411,9 +6413,11 @@ def _make_v8_context_snapshot_get_reference_table_function( + collect_callbacks(named_properties_object_callback_defs) + collect_callbacks(cross_origin_property_callback_defs) + +- entry_nodes = map( +- lambda name: TextNode("reinterpret_cast({}),".format(name)), +- filter(None, callback_names)) ++ entry_nodes = list( ++ map( ++ lambda name: TextNode("reinterpret_cast({}),".format(name ++ )), ++ filter(None, callback_names))) + table_node = ListNode([ + TextNode("using namespace ${class_name}Callbacks;"), + TextNode("static const intptr_t kReferenceTable[] = {"), +@@ -6451,10 +6455,11 @@ def _make_v8_context_snapshot_install_props_per_context_function( + class_name=None, + prop_install_mode=PropInstallMode.V8_CONTEXT_SNAPSHOT, + trampoline_var_name=None, +- attribute_entries=filter(selector, attribute_entries), +- constant_entries=filter(selector, constant_entries), +- exposed_construct_entries=filter(selector, exposed_construct_entries), +- operation_entries=filter(selector, operation_entries)) ++ attribute_entries=list(filter(selector, attribute_entries)), ++ constant_entries=list(filter(selector, constant_entries)), ++ exposed_construct_entries=list( ++ filter(selector, exposed_construct_entries)), ++ operation_entries=list(filter(selector, operation_entries))) + + return func_decl, func_def + +@@ -6810,11 +6815,11 @@ def generate_interface(interface_identifier): + class_name=impl_class_name, + prop_install_mode=PropInstallMode.UNCONDITIONAL, + trampoline_var_name=tp_install_unconditional_props, +- attribute_entries=filter(is_unconditional, attribute_entries), +- constant_entries=filter(is_unconditional, constant_entries), +- exposed_construct_entries=filter(is_unconditional, +- exposed_construct_entries), +- operation_entries=filter(is_unconditional, operation_entries)) ++ attribute_entries=list(filter(is_unconditional, attribute_entries)), ++ constant_entries=list(filter(is_unconditional, constant_entries)), ++ exposed_construct_entries=list( ++ filter(is_unconditional, exposed_construct_entries)), ++ operation_entries=list(filter(is_unconditional, operation_entries))) + (install_context_independent_props_decl, + install_context_independent_props_def, + install_context_independent_props_trampoline) = make_install_properties( +@@ -6823,11 +6828,14 @@ def generate_interface(interface_identifier): + class_name=impl_class_name, + prop_install_mode=PropInstallMode.CONTEXT_INDEPENDENT, + trampoline_var_name=tp_install_context_independent_props, +- attribute_entries=filter(is_context_independent, attribute_entries), +- constant_entries=filter(is_context_independent, constant_entries), +- exposed_construct_entries=filter(is_context_independent, +- exposed_construct_entries), +- operation_entries=filter(is_context_independent, operation_entries)) ++ attribute_entries=list( ++ filter(is_context_independent, attribute_entries)), ++ constant_entries=list(filter(is_context_independent, ++ constant_entries)), ++ exposed_construct_entries=list( ++ filter(is_context_independent, exposed_construct_entries)), ++ operation_entries=list( ++ filter(is_context_independent, operation_entries))) + (install_context_dependent_props_decl, install_context_dependent_props_def, + install_context_dependent_props_trampoline) = make_install_properties( + cg_context, +@@ -6835,11 +6843,13 @@ def generate_interface(interface_identifier): + class_name=impl_class_name, + prop_install_mode=PropInstallMode.CONTEXT_DEPENDENT, + trampoline_var_name=tp_install_context_dependent_props, +- attribute_entries=filter(is_context_dependent, attribute_entries), +- constant_entries=filter(is_context_dependent, constant_entries), +- exposed_construct_entries=filter(is_context_dependent, +- exposed_construct_entries), +- operation_entries=filter(is_context_dependent, operation_entries)) ++ attribute_entries=list(filter(is_context_dependent, ++ attribute_entries)), ++ constant_entries=list(filter(is_context_dependent, constant_entries)), ++ exposed_construct_entries=list( ++ filter(is_context_dependent, exposed_construct_entries)), ++ operation_entries=list(filter(is_context_dependent, ++ operation_entries))) + (install_interface_template_decl, install_interface_template_def, + install_interface_template_trampoline) = make_install_interface_template( + cg_context, +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/mako_renderer.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/mako_renderer.py +index b4c70553863..f3a2fcd772d 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/mako_renderer.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/mako_renderer.py +@@ -105,7 +105,7 @@ class MakoRenderer(object): + on_error = self._caller_stack_on_error + if (len(current) <= len(on_error) + and all(current[i] == on_error[i] +- for i in xrange(len(current)))): ++ for i in range(len(current)))): + pass # Error happened in a deeper caller. + else: + self._caller_stack_on_error = list(self._caller_stack) +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/style_format.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/style_format.py +index dc3493cc394..017d3d47bb3 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/style_format.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/style_format.py +@@ -70,8 +70,13 @@ def gn_format(contents, filename=None): + + + def _invoke_format_command(command_line, filename, contents): +- proc = subprocess.Popen( +- command_line, stdin=subprocess.PIPE, stdout=subprocess.PIPE) ++ kwargs = {} ++ if sys.version_info.major != 2: ++ kwargs['encoding'] = 'utf-8' ++ proc = subprocess.Popen(command_line, ++ stdin=subprocess.PIPE, ++ stdout=subprocess.PIPE, ++ **kwargs) + stdout_output, stderr_output = proc.communicate(input=contents) + exit_code = proc.wait() + +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/task_queue.py b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/task_queue.py +index 0d8f4c0f303..e666a9b668e 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/task_queue.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/bind_gen/task_queue.py +@@ -2,6 +2,7 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + ++import functools + import multiprocessing + + from .package_initializer import package_initializer +@@ -76,7 +77,7 @@ class TaskQueue(object): + if not report_progress: + return + +- done_count = reduce( ++ done_count = functools.reduce( + lambda count, worker_task: count + bool(worker_task.ready()), + self._worker_tasks, 0) + report_progress(len(self._worker_tasks), done_count) +@@ -85,4 +86,4 @@ class TaskQueue(object): + def _task_queue_run_tasks(tasks): + for task in tasks: + func, args, kwargs = task +- apply(func, args, kwargs) ++ func(*args, **kwargs) +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/code_generator.py b/chromium/third_party/blink/renderer/bindings/scripts/code_generator.py +index e8280be7213..e49e6eb965e 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/code_generator.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/code_generator.py +@@ -13,6 +13,7 @@ import re + import sys + + from idl_types import set_ancestors, IdlType ++from itertools import groupby + from v8_globals import includes + from v8_interface import constant_filters + from v8_types import set_component_dirs +@@ -43,6 +44,7 @@ TEMPLATES_DIR = os.path.normpath( + # after path[0] == invoking script dir + sys.path.insert(1, THIRD_PARTY_DIR) + import jinja2 ++from jinja2.filters import make_attrgetter, environmentfilter + + + def generate_indented_conditional(code, conditional): +@@ -88,6 +90,13 @@ def runtime_enabled_if(code, name): + return generate_indented_conditional(code, function) + + ++@environmentfilter ++def do_stringify_key_group_by(environment, value, attribute): ++ expr = make_attrgetter(environment, attribute) ++ key = lambda item: '' if expr(item) is None else str(expr(item)) ++ return groupby(sorted(value, key=key), expr) ++ ++ + def initialize_jinja_env(cache_dir): + jinja_env = jinja2.Environment( + loader=jinja2.FileSystemLoader(TEMPLATES_DIR), +@@ -117,6 +126,7 @@ def initialize_jinja_env(cache_dir): + }) + jinja_env.filters.update(constant_filters()) + jinja_env.filters.update(method_filters()) ++ jinja_env.filters["stringifykeygroupby"] = do_stringify_key_group_by + return jinja_env + + +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/generate_origin_trial_features.py b/chromium/third_party/blink/renderer/bindings/scripts/generate_origin_trial_features.py +index 130004eae83..04c0fabcef2 100755 +--- a/chromium/third_party/blink/renderer/bindings/scripts/generate_origin_trial_features.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/generate_origin_trial_features.py +@@ -80,7 +80,7 @@ def read_idl_file(reader, idl_filename): + assert len(interfaces) == 1, ( + "Expected one interface in file %r, found %d" % + (idl_filename, len(interfaces))) +- return (interfaces.values()[0], includes) ++ return (list(interfaces.values())[0], includes) + + + def interface_is_global(interface): +@@ -281,7 +281,7 @@ def main(): + + info_provider = create_component_info_provider( + os.path.normpath(options.info_dir), options.target_component) +- idl_filenames = map(str.strip, open(options.idl_files_list)) ++ idl_filenames = list(map(str.strip, open(options.idl_files_list))) + + generate_origin_trial_features(info_provider, options, idl_filenames) + return 0 +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/idl_definitions.py b/chromium/third_party/blink/renderer/bindings/scripts/idl_definitions.py +index 14e6e9d3f87..b027818aef2 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/idl_definitions.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/idl_definitions.py +@@ -394,7 +394,8 @@ class IdlInterface(object): + else: + raise ValueError('Unrecognized node class: %s' % child_class) + +- if len(filter(None, [self.iterable, self.maplike, self.setlike])) > 1: ++ if len(list(filter(None, ++ [self.iterable, self.maplike, self.setlike]))) > 1: + raise ValueError( + 'Interface can only have one of iterable<>, maplike<> and setlike<>.' + ) +@@ -512,6 +513,9 @@ class IdlAttribute(TypedObject): + def accept(self, visitor): + visitor.visit_attribute(self) + ++ def __lt__(self, other): ++ return self.name < other.name ++ + + ################################################################################ + # Constants +@@ -852,7 +856,7 @@ class IdlIncludes(object): + ################################################################################ + + +-class Exposure: ++class Exposure(object): + """An Exposure holds one Exposed or RuntimeEnabled condition. + Each exposure has two properties: exposed and runtime_enabled. + Exposure(e, r) corresponds to [Exposed(e r)]. Exposure(e) corresponds to +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/idl_reader.py b/chromium/third_party/blink/renderer/bindings/scripts/idl_reader.py +index 8d72865a6ca..b80eebdcd61 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/idl_reader.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/idl_reader.py +@@ -55,8 +55,8 @@ def validate_blink_idl_definitions(idl_filename, idl_file_basename, + definitions. There is no filename convention in this case. + - Otherwise, an IDL file is invalid. + """ +- targets = ( +- definitions.interfaces.values() + definitions.dictionaries.values()) ++ targets = (list(definitions.interfaces.values()) + ++ list(definitions.dictionaries.values())) + number_of_targets = len(targets) + if number_of_targets > 1: + raise Exception( +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/idl_types.py b/chromium/third_party/blink/renderer/bindings/scripts/idl_types.py +index cd4f0c3513b..ab95e9c0b08 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/idl_types.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/idl_types.py +@@ -349,7 +349,7 @@ class IdlUnionType(IdlTypeBase): + return True + + def single_matching_member_type(self, predicate): +- matching_types = filter(predicate, self.flattened_member_types) ++ matching_types = list(filter(predicate, self.flattened_member_types)) + if len(matching_types) > 1: + raise ValueError('%s is ambiguous.' % self.name) + return matching_types[0] if matching_types else None +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/utilities.py b/chromium/third_party/blink/renderer/bindings/scripts/utilities.py +index e1677ee7bd6..3c5006f064f 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/utilities.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/utilities.py +@@ -196,8 +196,9 @@ class ComponentInfoProviderModules(ComponentInfoProvider): + + @property + def callback_functions(self): +- return dict(self._component_info_core['callback_functions'].items() + +- self._component_info_modules['callback_functions'].items()) ++ return dict( ++ list(self._component_info_core['callback_functions'].items()) + ++ list(self._component_info_modules['callback_functions'].items())) + + @property + def specifier_for_export(self): +@@ -209,8 +210,8 @@ class ComponentInfoProviderModules(ComponentInfoProvider): + + + def load_interfaces_info_overall_pickle(info_dir): +- with open(os.path.join(info_dir, +- 'interfaces_info.pickle')) as interface_info_file: ++ with open(os.path.join(info_dir, 'interfaces_info.pickle'), ++ mode='rb') as interface_info_file: + return pickle.load(interface_info_file) + + +@@ -236,23 +237,20 @@ def merge_dict_recursively(target, diff): + + def create_component_info_provider_core(info_dir): + interfaces_info = load_interfaces_info_overall_pickle(info_dir) +- with open( +- os.path.join(info_dir, 'core', +- 'component_info_core.pickle')) as component_info_file: ++ with open(os.path.join(info_dir, 'core', 'component_info_core.pickle'), ++ mode='rb') as component_info_file: + component_info = pickle.load(component_info_file) + return ComponentInfoProviderCore(interfaces_info, component_info) + + + def create_component_info_provider_modules(info_dir): + interfaces_info = load_interfaces_info_overall_pickle(info_dir) +- with open( +- os.path.join(info_dir, 'core', +- 'component_info_core.pickle')) as component_info_file: ++ with open(os.path.join(info_dir, 'core', 'component_info_core.pickle'), ++ mode='rb') as component_info_file: + component_info_core = pickle.load(component_info_file) +- with open( +- os.path.join( +- info_dir, 'modules', +- 'component_info_modules.pickle')) as component_info_file: ++ with open(os.path.join(info_dir, 'modules', ++ 'component_info_modules.pickle'), ++ mode='rb') as component_info_file: + component_info_modules = pickle.load(component_info_file) + return ComponentInfoProviderModules(interfaces_info, component_info_core, + component_info_modules) +@@ -356,7 +354,7 @@ def write_pickle_file(pickle_filename, data): + pickle_filename = abs(pickle_filename) + # If |data| is same with the file content, we skip updating. + if os.path.isfile(pickle_filename): +- with open(pickle_filename) as pickle_file: ++ with open(pickle_filename, 'rb') as pickle_file: + try: + if pickle.load(pickle_file) == data: + return +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/v8_interface.py b/chromium/third_party/blink/renderer/bindings/scripts/v8_interface.py +index a43260414db..a85b03abe75 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/v8_interface.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/v8_interface.py +@@ -189,7 +189,7 @@ def context_enabled_features(attributes): + return sorted([ + member for member in members + if member.get(KEY) and not member.get('exposed_test') +- ]) ++ ], key=lambda item: item['name']) + + def member_filter_by_name(members, name): + return [member for member in members if member[KEY] == name] +@@ -612,7 +612,8 @@ def interface_context(interface, interfaces, component_info): + sorted( + origin_trial_features(interface, context['constants'], + context['attributes'], context['methods']) + +- context_enabled_features(context['attributes'])), ++ context_enabled_features(context['attributes']), ++ key=lambda item: item['name']), + }) + if context['optional_features']: + includes.add('platform/bindings/v8_per_context_data.h') +@@ -1356,9 +1357,9 @@ def resolution_tests_methods(effective_overloads): + + # Extract argument and IDL type to simplify accessing these in each loop. + arguments = [method['arguments'][index] for method in methods] +- arguments_methods = zip(arguments, methods) ++ arguments_methods = list(zip(arguments, methods)) + idl_types = [argument['idl_type_object'] for argument in arguments] +- idl_types_methods = zip(idl_types, methods) ++ idl_types_methods = list(zip(idl_types, methods)) + + # We can’t do a single loop through all methods or simply sort them, because + # a method may be listed in multiple steps of the resolution algorithm, and +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/v8_methods.py b/chromium/third_party/blink/renderer/bindings/scripts/v8_methods.py +index 5f1f89a3def..6ee8a407798 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/v8_methods.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/v8_methods.py +@@ -46,6 +46,10 @@ import v8_types + import v8_utilities + from v8_utilities import (has_extended_attribute_value, is_unforgeable) + ++# TODO: Remove this once Python2 is obsoleted. ++if sys.version_info.major != 2: ++ basestring = str ++ + + def method_is_visible(method, interface_is_partial): + if 'overloads' in method: +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/v8_utilities.py b/chromium/third_party/blink/renderer/bindings/scripts/v8_utilities.py +index 2ecd6923320..fcfc48371b1 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/v8_utilities.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/v8_utilities.py +@@ -271,7 +271,7 @@ EXPOSED_WORKERS = set([ + ]) + + +-class ExposureSet: ++class ExposureSet(object): + """An ExposureSet is a collection of Exposure instructions.""" + + def __init__(self, exposures=None): +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/callback_interface.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/callback_interface.py +index 13fb7c7068d..b73b7710687 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/callback_interface.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/callback_interface.py +@@ -91,11 +91,13 @@ class CallbackInterface(UserDefinedType, WithExtendedAttributes, + for operation_ir in ir.operations + ]) + self._operation_groups = tuple([ +- OperationGroup( +- operation_group_ir, +- filter(lambda x: x.identifier == operation_group_ir.identifier, +- self._operations), +- owner=self) for operation_group_ir in ir.operation_groups ++ OperationGroup(operation_group_ir, ++ list( ++ filter( ++ lambda x: x.identifier == operation_group_ir ++ .identifier, self._operations)), ++ owner=self) ++ for operation_group_ir in ir.operation_groups + ]) + + @property +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/database.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/database.py +index c92cf48eb2a..f5d59129449 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/database.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/database.py +@@ -156,4 +156,4 @@ class Database(object): + return self._view_by_kind(Database._Kind.UNION) + + def _view_by_kind(self, kind): +- return self._impl.find_by_kind(kind).values() ++ return list(self._impl.find_by_kind(kind).values()) +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/exposure.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/exposure.py +index abaeef39c30..e36cf7439ae 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/exposure.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/exposure.py +@@ -8,8 +8,11 @@ from .runtime_enabled_features import RuntimeEnabledFeatures + class _Feature(str): + """Represents a runtime-enabled feature.""" + ++ def __new__(cls, value): ++ return str.__new__(cls, value) ++ + def __init__(self, value): +- str.__init__(self, value) ++ str.__init__(self) + self._is_context_dependent = ( + RuntimeEnabledFeatures.is_context_dependent(self)) + +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/function_like.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/function_like.py +index 648c70d803d..1712f19c672 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/function_like.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/function_like.py +@@ -71,8 +71,9 @@ class FunctionLike(WithIdentifier): + def num_of_required_arguments(self): + """Returns the number of required arguments.""" + return len( +- filter(lambda arg: not (arg.is_optional or arg.is_variadic), +- self.arguments)) ++ list( ++ filter(lambda arg: not (arg.is_optional or arg.is_variadic), ++ self.arguments))) + + + class OverloadGroup(WithIdentifier): +@@ -171,8 +172,7 @@ class OverloadGroup(WithIdentifier): + Returns the effective overload set. + https://heycam.github.io/webidl/#compute-the-effective-overload-set + """ +- assert argument_count is None or isinstance(argument_count, +- (int, long)) ++ assert argument_count is None or isinstance(argument_count, int) + + N = argument_count + S = [] +@@ -188,21 +188,21 @@ class OverloadGroup(WithIdentifier): + + S.append( + OverloadGroup.EffectiveOverloadItem( +- X, map(lambda arg: arg.idl_type, X.arguments), +- map(lambda arg: arg.optionality, X.arguments))) ++ X, list(map(lambda arg: arg.idl_type, X.arguments)), ++ list(map(lambda arg: arg.optionality, X.arguments)))) + + if X.is_variadic: +- for i in xrange(n, max(maxarg, N)): +- t = map(lambda arg: arg.idl_type, X.arguments) +- o = map(lambda arg: arg.optionality, X.arguments) +- for _ in xrange(n, i + 1): ++ for i in range(n, max(maxarg, N)): ++ t = list(map(lambda arg: arg.idl_type, X.arguments)) ++ o = list(map(lambda arg: arg.optionality, X.arguments)) ++ for _ in range(n, i + 1): + t.append(X.arguments[-1].idl_type) + o.append(X.arguments[-1].optionality) + S.append(OverloadGroup.EffectiveOverloadItem(X, t, o)) + +- t = map(lambda arg: arg.idl_type, X.arguments) +- o = map(lambda arg: arg.optionality, X.arguments) +- for i in xrange(n - 1, -1, -1): ++ t = list(map(lambda arg: arg.idl_type, X.arguments)) ++ o = list(map(lambda arg: arg.optionality, X.arguments)) ++ for i in range(n - 1, -1, -1): + if X.arguments[i].optionality == IdlType.Optionality.REQUIRED: + break + S.append(OverloadGroup.EffectiveOverloadItem(X, t[:i], o[:i])) +@@ -222,7 +222,7 @@ class OverloadGroup(WithIdentifier): + for item in items) + assert len(items) > 1 + +- for index in xrange(len(items[0].type_list)): ++ for index in range(len(items[0].type_list)): + # Assume that the given items are valid, and we only need to test + # the two types. + if OverloadGroup.are_distinguishable_types( +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/idl_compiler.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/idl_compiler.py +index c5ee2bd8a3d..58315072480 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/idl_compiler.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/idl_compiler.py +@@ -149,8 +149,8 @@ class IdlCompiler(object): + for old_ir in old_irs: + new_ir = make_copy(old_ir) + self._ir_map.add(new_ir) +- new_ir.attributes = filter(not_disabled, new_ir.attributes) +- new_ir.operations = filter(not_disabled, new_ir.operations) ++ new_ir.attributes = list(filter(not_disabled, new_ir.attributes)) ++ new_ir.operations = list(filter(not_disabled, new_ir.operations)) + + def _record_defined_in_partial_and_mixin(self): + old_irs = self._ir_map.irs_of_kinds( +@@ -231,7 +231,7 @@ class IdlCompiler(object): + only_to_members_of_partial_or_mixin=False) + propagate_to_exposure(propagate) + +- map(process_member_like, ir.iter_all_members()) ++ list(map(process_member_like, ir.iter_all_members())) + + def process_member_like(ir): + propagate = functools.partial(propagate_extattr, ir=ir) +@@ -257,7 +257,7 @@ class IdlCompiler(object): + + self._ir_map.move_to_new_phase() + +- map(process_interface_like, old_irs) ++ list(map(process_interface_like, old_irs)) + + def _determine_blink_headers(self): + irs = self._ir_map.irs_of_kinds( +@@ -422,9 +422,9 @@ class IdlCompiler(object): + assert not new_interface.deriveds + derived_set = identifier_to_derived_set.get( + new_interface.identifier, set()) +- new_interface.deriveds = map( +- lambda id_: self._ref_to_idl_def_factory.create(id_), +- sorted(derived_set)) ++ new_interface.deriveds = list( ++ map(lambda id_: self._ref_to_idl_def_factory.create(id_), ++ sorted(derived_set))) + + def _supplement_missing_html_constructor_operation(self): + # Temporary mitigation of misuse of [HTMLConstructor] +@@ -553,7 +553,8 @@ class IdlCompiler(object): + self._ir_map.add(new_ir) + + for group in new_ir.iter_all_overload_groups(): +- exposures = map(lambda overload: overload.exposure, group) ++ exposures = list(map(lambda overload: overload.exposure, ++ group)) + + # [Exposed] + if any(not exposure.global_names_and_features +@@ -653,8 +654,8 @@ class IdlCompiler(object): + constructs = set() + for global_name in global_names: + constructs.update(exposed_map.get(global_name, [])) +- new_ir.exposed_constructs = map( +- self._ref_to_idl_def_factory.create, sorted(constructs)) ++ new_ir.exposed_constructs = list( ++ map(self._ref_to_idl_def_factory.create, sorted(constructs))) + + assert not new_ir.legacy_window_aliases + if new_ir.identifier != 'Window': +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/interface.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/interface.py +index 65d24e529d1..067ef2eb0b2 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/interface.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/interface.py +@@ -180,8 +180,9 @@ class Interface(UserDefinedType, WithExtendedAttributes, WithCodeGeneratorInfo, + self._constructor_groups = tuple([ + ConstructorGroup( + group_ir, +- filter(lambda x: x.identifier == group_ir.identifier, +- self._constructors), ++ list( ++ filter(lambda x: x.identifier == group_ir.identifier, ++ self._constructors)), + owner=self) for group_ir in ir.constructor_groups + ]) + assert len(self._constructor_groups) <= 1 +@@ -192,8 +193,9 @@ class Interface(UserDefinedType, WithExtendedAttributes, WithCodeGeneratorInfo, + self._named_constructor_groups = tuple([ + ConstructorGroup( + group_ir, +- filter(lambda x: x.identifier == group_ir.identifier, +- self._named_constructors), ++ list( ++ filter(lambda x: x.identifier == group_ir.identifier, ++ self._named_constructors)), + owner=self) for group_ir in ir.named_constructor_groups + ]) + self._operations = tuple([ +@@ -203,22 +205,23 @@ class Interface(UserDefinedType, WithExtendedAttributes, WithCodeGeneratorInfo, + self._operation_groups = tuple([ + OperationGroup( + group_ir, +- filter(lambda x: x.identifier == group_ir.identifier, +- self._operations), ++ list( ++ filter(lambda x: x.identifier == group_ir.identifier, ++ self._operations)), + owner=self) for group_ir in ir.operation_groups + ]) + self._exposed_constructs = tuple(ir.exposed_constructs) + self._legacy_window_aliases = tuple(ir.legacy_window_aliases) + self._indexed_and_named_properties = None +- indexed_and_named_property_operations = filter( +- lambda x: x.is_indexed_or_named_property_operation, +- self._operations) ++ indexed_and_named_property_operations = list( ++ filter(lambda x: x.is_indexed_or_named_property_operation, ++ self._operations)) + if indexed_and_named_property_operations: + self._indexed_and_named_properties = IndexedAndNamedProperties( + indexed_and_named_property_operations, owner=self) + self._stringifier = None +- stringifier_operation_irs = filter(lambda x: x.is_stringifier, +- ir.operations) ++ stringifier_operation_irs = list( ++ filter(lambda x: x.is_stringifier, ir.operations)) + if stringifier_operation_irs: + assert len(stringifier_operation_irs) == 1 + op_ir = make_copy(stringifier_operation_irs[0]) +@@ -231,8 +234,9 @@ class Interface(UserDefinedType, WithExtendedAttributes, WithCodeGeneratorInfo, + attribute = None + if operation.stringifier_attribute: + attr_id = operation.stringifier_attribute +- attributes = filter(lambda x: x.identifier == attr_id, +- self._attributes) ++ attributes = list( ++ filter(lambda x: x.identifier == attr_id, ++ self._attributes)) + assert len(attributes) == 1 + attribute = attributes[0] + self._stringifier = Stringifier(operation, attribute, owner=self) +@@ -578,8 +582,9 @@ class Iterable(WithDebugInfo): + self._operation_groups = tuple([ + OperationGroup( + group_ir, +- filter(lambda x: x.identifier == group_ir.identifier, +- self._operations), ++ list( ++ filter(lambda x: x.identifier == group_ir.identifier, ++ self._operations)), + owner=owner) for group_ir in ir.operation_groups + ]) + +@@ -666,8 +671,9 @@ class Maplike(WithDebugInfo): + self._operation_groups = tuple([ + OperationGroup( + group_ir, +- filter(lambda x: x.identifier == group_ir.identifier, +- self._operations), ++ list( ++ filter(lambda x: x.identifier == group_ir.identifier, ++ self._operations)), + owner=owner) for group_ir in ir.operation_groups + ]) + +@@ -755,8 +761,9 @@ class Setlike(WithDebugInfo): + self._operation_groups = tuple([ + OperationGroup( + group_ir, +- filter(lambda x: x.identifier == group_ir.identifier, +- self._operations), ++ list( ++ filter(lambda x: x.identifier == group_ir.identifier, ++ self._operations)), + owner=owner) for group_ir in ir.operation_groups + ]) + +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/ir_builder.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/ir_builder.py +index e9aeff4ab82..d80554d603e 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/ir_builder.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/ir_builder.py +@@ -2,6 +2,8 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + ++import sys ++ + from .argument import Argument + from .ast_group import AstGroup + from .attribute import Attribute +@@ -30,6 +32,11 @@ from .operation import Operation + from .typedef import Typedef + + ++# TODO: Remove this once Python2 is obsoleted. ++if sys.version_info.major != 2: ++ long = int ++ ++ + def load_and_register_idl_definitions(filepaths, register_ir, + create_ref_to_idl_def, idl_type_factory): + """ +@@ -160,7 +167,7 @@ class _IRBuilder(object): + child_nodes = list(node.GetChildren()) + extended_attributes = self._take_extended_attributes(child_nodes) + +- members = map(self._build_interface_member, child_nodes) ++ members = list(map(self._build_interface_member, child_nodes)) + attributes = [] + constants = [] + operations = [] +@@ -302,7 +309,7 @@ class _IRBuilder(object): + child_nodes = list(node.GetChildren()) + inherited = self._take_inheritance(child_nodes) + extended_attributes = self._take_extended_attributes(child_nodes) +- own_members = map(self._build_dictionary_member, child_nodes) ++ own_members = list(map(self._build_dictionary_member, child_nodes)) + + return Dictionary.IR( + identifier=Identifier(node.GetName()), +@@ -336,7 +343,7 @@ class _IRBuilder(object): + + child_nodes = list(node.GetChildren()) + extended_attributes = self._take_extended_attributes(child_nodes) +- members = map(self._build_interface_member, child_nodes) ++ members = list(map(self._build_interface_member, child_nodes)) + constants = [] + operations = [] + for member in members: +@@ -456,8 +463,8 @@ class _IRBuilder(object): + assert len(child_nodes) == 1 + child = child_nodes[0] + if child.GetClass() == 'Arguments': +- arguments = map(build_extattr_argument, +- child.GetChildren()) ++ arguments = list( ++ map(build_extattr_argument, child.GetChildren())) + elif child.GetClass() == 'Call': + assert len(child.GetChildren()) == 1 + grand_child = child.GetChildren()[0] +@@ -486,7 +493,9 @@ class _IRBuilder(object): + + assert node.GetClass() == 'ExtAttributes' + return ExtendedAttributes( +- filter(None, map(build_extended_attribute, node.GetChildren()))) ++ list( ++ filter(None, map(build_extended_attribute, ++ node.GetChildren())))) + + def _build_inheritance(self, node): + assert node.GetClass() == 'Inherit' +@@ -506,7 +515,7 @@ class _IRBuilder(object): + + def _build_iterable(self, node): + assert node.GetClass() == 'Iterable' +- types = map(self._build_type, node.GetChildren()) ++ types = list(map(self._build_type, node.GetChildren())) + assert len(types) == 1 or len(types) == 2 + if len(types) == 1: # value iterator + key_type, value_type = (None, types[0]) +@@ -584,7 +593,7 @@ class _IRBuilder(object): + def _build_maplike(self, node, interface_identifier): + assert node.GetClass() == 'Maplike' + assert isinstance(interface_identifier, Identifier) +- types = map(self._build_type, node.GetChildren()) ++ types = list(map(self._build_type, node.GetChildren())) + assert len(types) == 2 + key_type, value_type = types + is_readonly = bool(node.GetProperty('READONLY')) +@@ -676,7 +685,7 @@ class _IRBuilder(object): + def _build_setlike(self, node, interface_identifier): + assert node.GetClass() == 'Setlike' + assert isinstance(interface_identifier, Identifier) +- types = map(self._build_type, node.GetChildren()) ++ types = list(map(self._build_type, node.GetChildren())) + assert len(types) == 1 + value_type = types[0] + is_readonly = bool(node.GetProperty('READONLY')) +@@ -838,7 +847,7 @@ class _IRBuilder(object): + + def build_union_type(node, extended_attributes): + return self._idl_type_factory.union_type( +- member_types=map(self._build_type, node.GetChildren()), ++ member_types=list(map(self._build_type, node.GetChildren())), + is_optional=is_optional, + extended_attributes=extended_attributes, + debug_info=self._build_debug_info(node)) +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/make_copy.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/make_copy.py +index a7a2b11f3f0..2f6b61300ff 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/make_copy.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/make_copy.py +@@ -3,6 +3,13 @@ + # found in the LICENSE file. + + ++import sys ++ ++# TODO: Remove this once Python2 is obsoleted. ++if sys.version_info.major != 2: ++ long = int ++ basestring = str ++ + def make_copy(obj, memo=None): + """ + Creates a copy of the given object, which should be an IR or part of IR. +diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/namespace.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/namespace.py +index eeabef97cbe..bd7e98907f3 100644 +--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/namespace.py ++++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/namespace.py +@@ -107,11 +107,13 @@ class Namespace(UserDefinedType, WithExtendedAttributes, WithCodeGeneratorInfo, + for operation_ir in ir.operations + ]) + self._operation_groups = tuple([ +- OperationGroup( +- operation_group_ir, +- filter(lambda x: x.identifier == operation_group_ir.identifier, +- self._operations), +- owner=self) for operation_group_ir in ir.operation_groups ++ OperationGroup(operation_group_ir, ++ list( ++ filter( ++ lambda x: x.identifier == operation_group_ir ++ .identifier, self._operations)), ++ owner=self) ++ for operation_group_ir in ir.operation_groups + ]) + + @property +diff --git a/chromium/third_party/blink/renderer/bindings/templates/dictionary_v8.cc.tmpl b/chromium/third_party/blink/renderer/bindings/templates/dictionary_v8.cc.tmpl +index 0add9c45a38..dc910f6d227 100644 +--- a/chromium/third_party/blink/renderer/bindings/templates/dictionary_v8.cc.tmpl ++++ b/chromium/third_party/blink/renderer/bindings/templates/dictionary_v8.cc.tmpl +@@ -59,9 +59,9 @@ void {{v8_class}}::ToImpl(v8::Isolate* isolate, v8::Local v8_value, { + DCHECK(executionContext); + {% endif %}{# has_origin_trial_members #} + {% endif %}{# members #} +- {% for origin_trial_test, origin_trial_member_list in members | groupby('origin_trial_feature_name') %} ++ {% for origin_trial_test, origin_trial_member_list in members | stringifykeygroupby('origin_trial_feature_name') %} + {% filter origin_trial_enabled(origin_trial_test, "executionContext") %} +- {% for feature_name, member_list in origin_trial_member_list | groupby('runtime_enabled_feature_name') %} ++ {% for feature_name, member_list in origin_trial_member_list | stringifykeygroupby('runtime_enabled_feature_name') %} + {% filter runtime_enabled(feature_name) %} + {% for member in member_list %} + v8::Local {{member.v8_value}}; +@@ -147,9 +147,9 @@ bool toV8{{cpp_class}}(const {{cpp_class}}* impl, v8::Local dictiona + DCHECK(executionContext); + {% endif %}{# has_origin_trial_members #} + {% endif %}{# members #} +- {% for origin_trial_test, origin_trial_member_list in members | groupby('origin_trial_feature_name') %} ++ {% for origin_trial_test, origin_trial_member_list in members | stringifykeygroupby('origin_trial_feature_name') %} + {% filter origin_trial_enabled(origin_trial_test, "executionContext") %} +- {% for feature_name, member_list in origin_trial_member_list | groupby('runtime_enabled_feature_name') %} ++ {% for feature_name, member_list in origin_trial_member_list | stringifykeygroupby('runtime_enabled_feature_name') %} + {% filter runtime_enabled(feature_name) %} + {% for member in member_list %} + v8::Local {{member.v8_value}}; +diff --git a/chromium/third_party/blink/renderer/build/scripts/core/css/make_style_shorthands.py b/chromium/third_party/blink/renderer/build/scripts/core/css/make_style_shorthands.py +index 1799cd5a153..5f43ffabc26 100755 +--- a/chromium/third_party/blink/renderer/build/scripts/core/css/make_style_shorthands.py ++++ b/chromium/third_party/blink/renderer/build/scripts/core/css/make_style_shorthands.py +@@ -71,7 +71,7 @@ class Expansion(object): + def enabled_longhands(self): + include = lambda longhand: not longhand[ + 'runtime_flag'] or self.is_enabled(longhand['runtime_flag']) +- return filter(include, self._longhands) ++ return list(filter(include, self._longhands)) + + @property + def index(self): +@@ -87,8 +87,9 @@ class Expansion(object): + + def create_expansions(longhands): + flags = collect_runtime_flags(longhands) +- expansions = map(lambda mask: Expansion(longhands, flags, mask), +- range(1 << len(flags))) ++ expansions = list( ++ map(lambda mask: Expansion(longhands, flags, mask), ++ range(1 << len(flags)))) + assert len(expansions) > 0 + # We generate 2^N expansions for N flags, so enforce some limit. + assert len(flags) <= 4, 'Too many runtime flags for a single shorthand' +@@ -114,14 +115,14 @@ class StylePropertyShorthandWriter(json5_generator.Writer): + + self._longhand_dictionary = defaultdict(list) + for property_ in json5_properties.shorthands: +- property_['longhand_enum_keys'] = map(enum_key_for_css_property, +- property_['longhands']) +- property_['longhand_property_ids'] = map(id_for_css_property, +- property_['longhands']) +- +- longhands = map( +- lambda name: json5_properties.properties_by_name[name], +- property_['longhands']) ++ property_['longhand_enum_keys'] = list( ++ map(enum_key_for_css_property, property_['longhands'])) ++ property_['longhand_property_ids'] = list( ++ map(id_for_css_property, property_['longhands'])) ++ ++ longhands = list( ++ map(lambda name: json5_properties.properties_by_name[name], ++ property_['longhands'])) + property_['expansions'] = create_expansions(longhands) + for longhand_enum_key in property_['longhand_enum_keys']: + self._longhand_dictionary[longhand_enum_key].append(property_) +diff --git a/chromium/third_party/blink/renderer/build/scripts/core/css/properties/make_css_property_instances.py b/chromium/third_party/blink/renderer/build/scripts/core/css/properties/make_css_property_instances.py +index 75030ac577e..f72aadee17d 100755 +--- a/chromium/third_party/blink/renderer/build/scripts/core/css/properties/make_css_property_instances.py ++++ b/chromium/third_party/blink/renderer/build/scripts/core/css/properties/make_css_property_instances.py +@@ -42,8 +42,8 @@ class CSSPropertyInstancesWriter(json5_generator.Writer): + aliases = self._css_properties.aliases + + # Lists of PropertyClassData. +- self._property_classes_by_id = map(self.get_class, properties) +- self._alias_classes_by_id = map(self.get_class, aliases) ++ self._property_classes_by_id = list(map(self.get_class, properties)) ++ self._alias_classes_by_id = list(map(self.get_class, aliases)) + + # Sort by enum value. + self._property_classes_by_id.sort(key=lambda t: t.enum_value) +diff --git a/chromium/third_party/blink/renderer/build/scripts/gperf.py b/chromium/third_party/blink/renderer/build/scripts/gperf.py +index 5ee49056be4..db72660d471 100644 +--- a/chromium/third_party/blink/renderer/build/scripts/gperf.py ++++ b/chromium/third_party/blink/renderer/build/scripts/gperf.py +@@ -95,7 +95,7 @@ def main(): + + open(args.output_file, 'wb').write( + generate_gperf(gperf_path, +- open(infile).read(), gperf_args)) ++ open(infile).read(), gperf_args).encode('utf-8')) + + + if __name__ == '__main__': +diff --git a/chromium/third_party/blink/renderer/build/scripts/in_file.py b/chromium/third_party/blink/renderer/build/scripts/in_file.py +index 28adc050f1e..58113483e57 100644 +--- a/chromium/third_party/blink/renderer/build/scripts/in_file.py ++++ b/chromium/third_party/blink/renderer/build/scripts/in_file.py +@@ -66,7 +66,7 @@ class InFile(object): + self._defaults = defaults + self._valid_values = copy.deepcopy( + valid_values if valid_values else {}) +- self._parse(map(str.strip, lines)) ++ self._parse(list(map(str.strip, lines))) + + @classmethod + def load_from_files(self, file_paths, defaults, valid_values, +diff --git a/chromium/third_party/blink/renderer/build/scripts/in_generator.py b/chromium/third_party/blink/renderer/build/scripts/in_generator.py +index e46740a2e85..ab1981ad1e3 100644 +--- a/chromium/third_party/blink/renderer/build/scripts/in_generator.py ++++ b/chromium/third_party/blink/renderer/build/scripts/in_generator.py +@@ -32,10 +32,15 @@ import os + import os.path + import shlex + import shutil ++import sys + import optparse + + from in_file import InFile + ++# TODO: Remove this once Python2 is obsoleted. ++if sys.version_info.major != 2: ++ basestring = str ++ + + ######################################################### + # This is now deprecated - use json5_generator.py instead +diff --git a/chromium/third_party/blink/renderer/build/scripts/make_runtime_features.py b/chromium/third_party/blink/renderer/build/scripts/make_runtime_features.py +index cafe8d94a8e..6925a4fa580 100755 +--- a/chromium/third_party/blink/renderer/build/scripts/make_runtime_features.py ++++ b/chromium/third_party/blink/renderer/build/scripts/make_runtime_features.py +@@ -138,7 +138,7 @@ class RuntimeFeatureWriter(BaseRuntimeFeatureWriter): + except Exception: + # If trouble unpickling, overwrite + pass +- with open(os.path.abspath(file_name), 'w') as pickle_file: ++ with open(os.path.abspath(file_name), 'wb') as pickle_file: + pickle.dump(features_map, pickle_file) + + def _template_inputs(self): +diff --git a/chromium/third_party/blink/renderer/build/scripts/templates/element_factory.cc.tmpl b/chromium/third_party/blink/renderer/build/scripts/templates/element_factory.cc.tmpl +index dc3f44c5b10..3eefcf9f0ee 100644 +--- a/chromium/third_party/blink/renderer/build/scripts/templates/element_factory.cc.tmpl ++++ b/chromium/third_party/blink/renderer/build/scripts/templates/element_factory.cc.tmpl +@@ -26,7 +26,7 @@ using {{namespace}}FunctionMap = HashMapGetExecutionContext())) { +diff --git a/chromium/third_party/blink/renderer/build/scripts/templates/element_type_helpers.h.tmpl b/chromium/third_party/blink/renderer/build/scripts/templates/element_type_helpers.h.tmpl +index 1b5297d52dc..edecc81d9d4 100644 +--- a/chromium/third_party/blink/renderer/build/scripts/templates/element_type_helpers.h.tmpl ++++ b/chromium/third_party/blink/renderer/build/scripts/templates/element_type_helpers.h.tmpl +@@ -15,7 +15,7 @@ namespace blink { + class Document; + + // Type checking. +-{% for tag in tags|sort if not tag.multipleTagNames and not tag.noTypeHelpers %} ++{% for tag in tags|sort(attribute='name') if not tag.multipleTagNames and not tag.noTypeHelpers %} + class {{tag.interface}}; + template <> + inline bool IsElementOfType(const Node& node) { +diff --git a/chromium/third_party/blink/renderer/build/scripts/templates/macros.tmpl b/chromium/third_party/blink/renderer/build/scripts/templates/macros.tmpl +index 0244433af2e..dcdbb02a56c 100644 +--- a/chromium/third_party/blink/renderer/build/scripts/templates/macros.tmpl ++++ b/chromium/third_party/blink/renderer/build/scripts/templates/macros.tmpl +@@ -25,7 +25,7 @@ + + + {% macro trie_leaf(index, object, return_macro, lowercase_data) %} +-{% set name, value = object.items()[0] %} ++{% set name, value = (object.items()|list)[0] %} + {% if name|length %} + if ( + {%- for c in name -%} +@@ -45,7 +45,7 @@ return {{ return_macro(value) }}; + + + {% macro trie_switch(trie, index, return_macro, lowercase_data) %} +-{% if trie|length == 1 and trie.values()[0] is string %} ++{% if trie|length == 1 and (trie.values()|list)[0] is string %} + {{ trie_leaf(index, trie, return_macro, lowercase_data) -}} + {% else %} + {% if lowercase_data %} +diff --git a/chromium/third_party/blink/renderer/build/scripts/templates/make_qualified_names.h.tmpl b/chromium/third_party/blink/renderer/build/scripts/templates/make_qualified_names.h.tmpl +index cb05c6c4315..bd5566b03e7 100644 +--- a/chromium/third_party/blink/renderer/build/scripts/templates/make_qualified_names.h.tmpl ++++ b/chromium/third_party/blink/renderer/build/scripts/templates/make_qualified_names.h.tmpl +@@ -24,12 +24,12 @@ namespace {{cpp_namespace}} { + {{symbol_export}}extern const WTF::AtomicString& {{namespace_prefix}}NamespaceURI; + + // Tags +-{% for tag in tags|sort %} ++{% for tag in tags|sort(attribute='name') %} + {{symbol_export}}extern const blink::{{namespace}}QualifiedName& {{tag|symbol}}Tag; + {% endfor %} + + // Attributes +-{% for attr in attrs|sort %} ++{% for attr in attrs|sort(attribute='name') %} + {{symbol_export}}extern const blink::QualifiedName& {{attr|symbol}}Attr; + {% endfor %} + +diff --git a/chromium/third_party/dawn/generator/generator_lib.py b/chromium/third_party/dawn/generator/generator_lib.py +index 5e3734d7833..e3d46bd194f 100644 +--- a/chromium/third_party/dawn/generator/generator_lib.py ++++ b/chromium/third_party/dawn/generator/generator_lib.py +@@ -201,6 +201,10 @@ def _compute_python_dependencies(root_dir=None): + + paths = set() + for path in module_paths: ++ # Builtin/namespaced modules may return None for the file path. ++ if not path: ++ continue ++ + path = os.path.abspath(path) + + if not path.startswith(root_dir): +diff --git a/chromium/third_party/devtools-frontend/src/BUILD.gn b/chromium/third_party/devtools-frontend/src/BUILD.gn +index cd488e88b60..ea1dc3d9a79 100644 +--- a/chromium/third_party/devtools-frontend/src/BUILD.gn ++++ b/chromium/third_party/devtools-frontend/src/BUILD.gn +@@ -2,6 +2,8 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + ++import("//build/config/python.gni") ++ + import("//third_party/blink/public/public_features.gni") + import("./all_devtools_files.gni") + import("./all_devtools_modules.gni") +diff --git a/chromium/third_party/devtools-frontend/src/scripts/build/build_inspector_overlay.py b/chromium/third_party/devtools-frontend/src/scripts/build/build_inspector_overlay.py +index d6666e8b74f..0f7a661e632 100644 +--- a/chromium/third_party/devtools-frontend/src/scripts/build/build_inspector_overlay.py ++++ b/chromium/third_party/devtools-frontend/src/scripts/build/build_inspector_overlay.py +@@ -45,7 +45,8 @@ def rollup(input_path, output_path, filename, max_size, rollup_plugin): + ['--format', 'iife', '-n', 'InspectorOverlay'] + ['--input', target] + + ['--plugin', rollup_plugin], + stdout=subprocess.PIPE, +- stderr=subprocess.PIPE) ++ stderr=subprocess.PIPE, ++ text=True) + out, error = rollup_process.communicate() + if not out: + raise Exception("rollup failed: " + error) +diff --git a/chromium/third_party/devtools-frontend/src/scripts/build/build_release_applications.py b/chromium/third_party/devtools-frontend/src/scripts/build/build_release_applications.py +index fa8e73d34af..7d0b84b2171 100644 +--- a/chromium/third_party/devtools-frontend/src/scripts/build/build_release_applications.py ++++ b/chromium/third_party/devtools-frontend/src/scripts/build/build_release_applications.py +@@ -10,7 +10,7 @@ Builds applications in release mode: + and the application loader into a single script. + """ + +-from cStringIO import StringIO ++from io import StringIO + from os import path + from os.path import join + import copy +@@ -145,8 +145,7 @@ class ReleaseBuilder(object): + resource_content = read_file(path.join(self.application_dir, resource_name)) + if not (resource_name.endswith('.html') + or resource_name.endswith('md')): +- resource_content += resource_source_url(resource_name).encode( +- 'utf-8') ++ resource_content += resource_source_url(resource_name) + resource_content = resource_content.replace('\\', '\\\\') + resource_content = resource_content.replace('\n', '\\n') + resource_content = resource_content.replace('"', '\\"') +@@ -173,7 +172,9 @@ class ReleaseBuilder(object): + def _concatenate_application_script(self, output): + output.write('Root.allDescriptors.push(...%s);' % self._release_module_descriptors()) + if self.descriptors.extends: +- output.write('Root.applicationDescriptor.modules.push(...%s);' % json.dumps(self.descriptors.application.values())) ++ output.write( ++ 'Root.applicationDescriptor.modules.push(...%s);' % ++ json.dumps(list(self.descriptors.application.values()))) + else: + output.write('Root.applicationDescriptor = %s;' % self.descriptors.application_json()) + +diff --git a/chromium/third_party/devtools-frontend/src/scripts/build/generate_devtools_grd.py b/chromium/third_party/devtools-frontend/src/scripts/build/generate_devtools_grd.py +index be510c48d76..c6a59c90298 100644 +--- a/chromium/third_party/devtools-frontend/src/scripts/build/generate_devtools_grd.py ++++ b/chromium/third_party/devtools-frontend/src/scripts/build/generate_devtools_grd.py +@@ -123,7 +123,7 @@ def main(argv): + + try: + os.makedirs(path.join(output_directory, 'Images')) +- except OSError, e: ++ except OSError as e: + if e.errno != errno.EEXIST: + raise e + +@@ -147,7 +147,7 @@ def main(argv): + shutil.copy(path.join(dirname, filename), path.join(output_directory, 'Images')) + add_file_to_grd(doc, path.join('Images', filename)) + +- with open(parsed_args.output_filename, 'w') as output_file: ++ with open(parsed_args.output_filename, 'wb') as output_file: + output_file.write(doc.toxml(encoding='UTF-8')) + + +diff --git a/chromium/third_party/devtools-frontend/src/scripts/build/modular_build.py b/chromium/third_party/devtools-frontend/src/scripts/build/modular_build.py +index 0ba695d3810..bb1da2f9f8d 100644 +--- a/chromium/third_party/devtools-frontend/src/scripts/build/modular_build.py ++++ b/chromium/third_party/devtools-frontend/src/scripts/build/modular_build.py +@@ -7,6 +7,8 @@ + Utilities for the modular DevTools build. + """ + ++from __future__ import print_function ++ + import collections + from os import path + import os +@@ -40,7 +42,7 @@ def load_and_parse_json(filename): + try: + return json.loads(read_file(filename)) + except: +- print 'ERROR: Failed to parse %s' % filename ++ print('ERROR: Failed to parse %s' % filename) + raise + + class Descriptors: +@@ -57,7 +59,7 @@ class Descriptors: + + def application_json(self): + result = dict() +- result['modules'] = self.application.values() ++ result['modules'] = list(self.application.values()) + return json.dumps(result) + + def all_compiled_files(self): +diff --git a/chromium/third_party/jinja2/tests.py b/chromium/third_party/jinja2/tests.py +index 0adc3d4dbcb..b14f85ff148 100644 +--- a/chromium/third_party/jinja2/tests.py ++++ b/chromium/third_party/jinja2/tests.py +@@ -10,7 +10,7 @@ + """ + import operator + import re +-from collections import Mapping ++from collections.abc import Mapping + from jinja2.runtime import Undefined + from jinja2._compat import text_type, string_types, integer_types + import decimal +diff --git a/chromium/tools/metrics/ukm/gen_builders.py b/chromium/tools/metrics/ukm/gen_builders.py +index f9f61d90a56..44e46fae8cc 100755 +--- a/chromium/tools/metrics/ukm/gen_builders.py ++++ b/chromium/tools/metrics/ukm/gen_builders.py +@@ -48,9 +48,10 @@ def ReadFilteredData(path): + data = ukm_model.UKM_XML_TYPE.Parse(ukm_file.read()) + event_tag = ukm_model._EVENT_TYPE.tag + metric_tag = ukm_model._METRIC_TYPE.tag +- data[event_tag] = filter(ukm_model.IsNotObsolete, data[event_tag]) ++ data[event_tag] = list(filter(ukm_model.IsNotObsolete, data[event_tag])) + for event in data[event_tag]: +- event[metric_tag] = filter(ukm_model.IsNotObsolete, event[metric_tag]) ++ event[metric_tag] = list( ++ filter(ukm_model.IsNotObsolete, event[metric_tag])) + return data + + +diff --git a/chromium/ui/ozone/generate_constructor_list.py b/chromium/ui/ozone/generate_constructor_list.py +index 8d800636c97..04fa18e93df 100755 +--- a/chromium/ui/ozone/generate_constructor_list.py ++++ b/chromium/ui/ozone/generate_constructor_list.py +@@ -45,12 +45,15 @@ Example Output: ./ui/ozone/generate_constructor_list.py \ + } // namespace ui + """ + ++try: ++ from StringIO import StringIO # for Python 2 ++except ImportError: ++ from io import StringIO # for Python 3 + import optparse + import os + import collections + import re + import sys +-import string + + + def GetTypedefName(typename): +@@ -68,7 +71,7 @@ def GetConstructorName(typename, platform): + This is just "Create" + typename + platform. + """ + +- return 'Create' + typename + string.capitalize(platform) ++ return 'Create' + typename + platform.capitalize() + + + def GenerateConstructorList(out, namespace, export, typenames, platforms, +@@ -163,12 +166,14 @@ def main(argv): + sys.exit(1) + + # Write to standard output or file specified by --output_cc. +- out_cc = sys.stdout ++ out_cc = getattr(sys.stdout, 'buffer', sys.stdout) + if options.output_cc: + out_cc = open(options.output_cc, 'wb') + +- GenerateConstructorList(out_cc, options.namespace, options.export, ++ out_cc_str = StringIO() ++ GenerateConstructorList(out_cc_str, options.namespace, options.export, + typenames, platforms, includes, usings) ++ out_cc.write(out_cc_str.getvalue().encode('utf-8')) + + if options.output_cc: + out_cc.close() +diff --git a/chromium/ui/ozone/generate_ozone_platform_list.py b/chromium/ui/ozone/generate_ozone_platform_list.py +index d47c398259b..2702b68b9bd 100755 +--- a/chromium/ui/ozone/generate_ozone_platform_list.py ++++ b/chromium/ui/ozone/generate_ozone_platform_list.py +@@ -49,12 +49,15 @@ Example Output: ./generate_ozone_platform_list.py --default wayland dri wayland + + """ + ++try: ++ from StringIO import StringIO # for Python 2 ++except ImportError: ++ from io import StringIO # for Python 3 + import optparse + import os + import collections + import re + import sys +-import string + + + def GetConstantName(name): +@@ -63,7 +66,7 @@ def GetConstantName(name): + We just capitalize the platform name and prepend "CreateOzonePlatform". + """ + +- return 'kPlatform' + string.capitalize(name) ++ return 'kPlatform' + name.capitalize() + + + def GeneratePlatformListText(out, platforms): +@@ -149,9 +152,9 @@ def main(argv): + platforms.insert(0, options.default) + + # Write to standard output or file specified by --output_{cc,h}. +- out_cc = sys.stdout +- out_h = sys.stdout +- out_txt = sys.stdout ++ out_cc = getattr(sys.stdout, 'buffer', sys.stdout) ++ out_h = getattr(sys.stdout, 'buffer', sys.stdout) ++ out_txt = getattr(sys.stdout, 'buffer', sys.stdout) + if options.output_cc: + out_cc = open(options.output_cc, 'wb') + if options.output_h: +@@ -159,9 +162,16 @@ def main(argv): + if options.output_txt: + out_txt = open(options.output_txt, 'wb') + +- GeneratePlatformListText(out_txt, platforms) +- GeneratePlatformListHeader(out_h, platforms) +- GeneratePlatformListSource(out_cc, platforms) ++ out_txt_str = StringIO() ++ out_h_str = StringIO() ++ out_cc_str = StringIO() ++ ++ GeneratePlatformListText(out_txt_str, platforms) ++ out_txt.write(out_txt_str.getvalue().encode('utf-8')) ++ GeneratePlatformListHeader(out_h_str, platforms) ++ out_h.write(out_h_str.getvalue().encode('utf-8')) ++ GeneratePlatformListSource(out_cc_str, platforms) ++ out_cc.write(out_cc_str.getvalue().encode('utf-8')) + + if options.output_cc: + out_cc.close() diff --git a/x86_64/extra/qt5-webengine/qt5-webengine-ffmpeg5.patch b/x86_64/extra/qt5-webengine/qt5-webengine-ffmpeg5.patch new file mode 100644 index 0000000..58e51d0 --- /dev/null +++ b/x86_64/extra/qt5-webengine/qt5-webengine-ffmpeg5.patch @@ -0,0 +1,150 @@ +diff --git a/chromium/media/ffmpeg/ffmpeg_common.h b/chromium/media/ffmpeg/ffmpeg_common.h +index 2734a485cbd..70b1877a43c 100644 +--- a/chromium/media/ffmpeg/ffmpeg_common.h ++++ b/chromium/media/ffmpeg/ffmpeg_common.h +@@ -29,6 +29,7 @@ extern "C" { + #include + #include + #include ++#include + #include + #include + #include +diff --git a/chromium/media/filters/audio_file_reader.cc b/chromium/media/filters/audio_file_reader.cc +index cb81d920def..bd73908d0ca 100644 +--- a/chromium/media/filters/audio_file_reader.cc ++++ b/chromium/media/filters/audio_file_reader.cc +@@ -85,7 +85,7 @@ bool AudioFileReader::OpenDemuxer() { + } + + bool AudioFileReader::OpenDecoder() { +- AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id); ++ const AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id); + if (codec) { + // MP3 decodes to S16P which we don't support, tell it to use S16 instead. + if (codec_context_->sample_fmt == AV_SAMPLE_FMT_S16P) +diff --git a/chromium/media/filters/ffmpeg_audio_decoder.cc b/chromium/media/filters/ffmpeg_audio_decoder.cc +index 0d825ed791b..72fac6167ef 100644 +--- a/chromium/media/filters/ffmpeg_audio_decoder.cc ++++ b/chromium/media/filters/ffmpeg_audio_decoder.cc +@@ -329,7 +329,7 @@ bool FFmpegAudioDecoder::ConfigureDecoder(const AudioDecoderConfig& config) { + } + } + +- AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id); ++ const AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id); + if (!codec || + avcodec_open2(codec_context_.get(), codec, &codec_options) < 0) { + DLOG(ERROR) << "Could not initialize audio decoder: " +diff --git a/chromium/media/filters/ffmpeg_demuxer.cc b/chromium/media/filters/ffmpeg_demuxer.cc +index d34db63f3ef..427565b00c1 100644 +--- a/chromium/media/filters/ffmpeg_demuxer.cc ++++ b/chromium/media/filters/ffmpeg_demuxer.cc +@@ -98,12 +98,12 @@ static base::TimeDelta ExtractStartTime(AVStream* stream) { + + // Next try to use the first DTS value, for codecs where we know PTS == DTS + // (excludes all H26x codecs). The start time must be returned in PTS. +- if (stream->first_dts != kNoFFmpegTimestamp && ++ if (av_stream_get_first_dts(stream) != kNoFFmpegTimestamp && + stream->codecpar->codec_id != AV_CODEC_ID_HEVC && + stream->codecpar->codec_id != AV_CODEC_ID_H264 && + stream->codecpar->codec_id != AV_CODEC_ID_MPEG4) { + const base::TimeDelta first_pts = +- ConvertFromTimeBase(stream->time_base, stream->first_dts); ++ ConvertFromTimeBase(stream->time_base, av_stream_get_first_dts(stream)); + if (first_pts < start_time) + start_time = first_pts; + } +@@ -408,11 +408,11 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) { + scoped_refptr buffer; + + if (type() == DemuxerStream::TEXT) { +- int id_size = 0; ++ size_t id_size = 0; + uint8_t* id_data = av_packet_get_side_data( + packet.get(), AV_PKT_DATA_WEBVTT_IDENTIFIER, &id_size); + +- int settings_size = 0; ++ size_t settings_size = 0; + uint8_t* settings_data = av_packet_get_side_data( + packet.get(), AV_PKT_DATA_WEBVTT_SETTINGS, &settings_size); + +@@ -424,7 +424,7 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) { + buffer = DecoderBuffer::CopyFrom(packet->data, packet->size, + side_data.data(), side_data.size()); + } else { +- int side_data_size = 0; ++ size_t side_data_size = 0; + uint8_t* side_data = av_packet_get_side_data( + packet.get(), AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, &side_data_size); + +@@ -485,7 +485,7 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) { + packet->size - data_offset); + } + +- int skip_samples_size = 0; ++ size_t skip_samples_size = 0; + const uint32_t* skip_samples_ptr = + reinterpret_cast(av_packet_get_side_data( + packet.get(), AV_PKT_DATA_SKIP_SAMPLES, &skip_samples_size)); +diff --git a/chromium/media/filters/ffmpeg_glue.cc b/chromium/media/filters/ffmpeg_glue.cc +index 0ef3521473d..8483ecc348f 100644 +--- a/chromium/media/filters/ffmpeg_glue.cc ++++ b/chromium/media/filters/ffmpeg_glue.cc +@@ -59,7 +59,6 @@ static int64_t AVIOSeekOperation(void* opaque, int64_t offset, int whence) { + } + + void FFmpegGlue::InitializeFFmpeg() { +- av_register_all(); + } + + static void LogContainer(bool is_local_file, +@@ -95,9 +94,6 @@ FFmpegGlue::FFmpegGlue(FFmpegURLProtocol* protocol) { + // Enable fast, but inaccurate seeks for MP3. + format_context_->flags |= AVFMT_FLAG_FAST_SEEK; + +- // Ensures we can read out various metadata bits like vp8 alpha. +- format_context_->flags |= AVFMT_FLAG_KEEP_SIDE_DATA; +- + // Ensures format parsing errors will bail out. From an audit on 11/2017, all + // instances were real failures. Solves bugs like http://crbug.com/710791. + format_context_->error_recognition |= AV_EF_EXPLODE; +diff --git a/chromium/media/filters/ffmpeg_video_decoder.cc b/chromium/media/filters/ffmpeg_video_decoder.cc +index ef12477ee89..7996606f5f9 100644 +--- a/chromium/media/filters/ffmpeg_video_decoder.cc ++++ b/chromium/media/filters/ffmpeg_video_decoder.cc +@@ -391,7 +391,7 @@ bool FFmpegVideoDecoder::ConfigureDecoder(const VideoDecoderConfig& config, + if (decode_nalus_) + codec_context_->flags2 |= AV_CODEC_FLAG2_CHUNKS; + +- AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id); ++ const AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id); + if (!codec || avcodec_open2(codec_context_.get(), codec, NULL) < 0) { + ReleaseFFmpegResources(); + return false; +diff --git a/chromium/media/filters/media_file_checker.cc b/chromium/media/filters/media_file_checker.cc +index 59c2a2fc618..1a9872c7acb 100644 +--- a/chromium/media/filters/media_file_checker.cc ++++ b/chromium/media/filters/media_file_checker.cc +@@ -68,7 +68,7 @@ bool MediaFileChecker::Start(base::TimeDelta check_time) { + auto context = AVStreamToAVCodecContext(format_context->streams[i]); + if (!context) + continue; +- AVCodec* codec = avcodec_find_decoder(cp->codec_id); ++ const AVCodec* codec = avcodec_find_decoder(cp->codec_id); + if (codec && avcodec_open2(context.get(), codec, nullptr) >= 0) { + auto loop = std::make_unique(context.get()); + stream_contexts[i] = {std::move(context), std::move(loop)}; +diff --git a/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.cc b/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.cc +index 9002b874611..d12fade8b63 100644 +--- a/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.cc ++++ b/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_decoder_impl.cc +@@ -203,7 +203,7 @@ int32_t H264DecoderImpl::InitDecode(const VideoCodec* codec_settings, + // a pointer |this|. + av_context_->opaque = this; + +- AVCodec* codec = avcodec_find_decoder(av_context_->codec_id); ++ const AVCodec* codec = avcodec_find_decoder(av_context_->codec_id); + if (!codec) { + // This is an indication that FFmpeg has not been initialized or it has not + // been compiled/initialized with the correct set of codecs. diff --git a/x86_64/extra/qt5-webengine/qt5-webengine-gcc12.patch b/x86_64/extra/qt5-webengine/qt5-webengine-gcc12.patch new file mode 100644 index 0000000..46f2dbf --- /dev/null +++ b/x86_64/extra/qt5-webengine/qt5-webengine-gcc12.patch @@ -0,0 +1,13 @@ +diff --git a/chromium/third_party/skia/src/utils/SkParseColor.cpp b/chromium/third_party/skia/src/utils/SkParseColor.cpp +index 7260365b2c6..b5a6aae3596 100644 +--- a/chromium/third_party/skia/src/utils/SkParseColor.cpp ++++ b/chromium/third_party/skia/src/utils/SkParseColor.cpp +@@ -8,6 +8,8 @@ + + #include "include/utils/SkParse.h" + ++#include ++ + static constexpr const char* gColorNames[] = { + "aliceblue", + "antiquewhite", diff --git a/x86_64/extra/qt5-webengine/qt5-webengine-pipewire-0.3.patch b/x86_64/extra/qt5-webengine/qt5-webengine-pipewire-0.3.patch new file mode 100644 index 0000000..f8047e0 --- /dev/null +++ b/x86_64/extra/qt5-webengine/qt5-webengine-pipewire-0.3.patch @@ -0,0 +1,1819 @@ +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/BUILD.gn b/chromium/third_party/webrtc/modules/desktop_capture/BUILD.gn +index 5235512735d..8259442f811 100644 +--- a/chromium/third_party/webrtc/modules/desktop_capture/BUILD.gn ++++ b/chromium/third_party/webrtc/modules/desktop_capture/BUILD.gn +@@ -11,6 +11,11 @@ import("//build/config/ui.gni") + import("//tools/generate_stubs/rules.gni") + import("../../webrtc.gni") + ++if (rtc_use_pipewire) { ++ assert(rtc_pipewire_version == "0.2" || rtc_pipewire_version == "0.3", ++ "Unsupported PipeWire version") ++} ++ + use_desktop_capture_differ_sse2 = current_cpu == "x86" || current_cpu == "x64" + + config("x11_config") { +@@ -200,22 +205,41 @@ if (is_linux || is_chromeos) { + ] + } + +- if (rtc_link_pipewire) { ++ if (rtc_pipewire_version == "0.3") { + pkg_config("pipewire") { +- packages = [ "libpipewire-0.2" ] ++ packages = [ "libpipewire-0.3" ] ++ if (!rtc_link_pipewire) { ++ ignore_libs = true ++ } + } + } else { ++ pkg_config("pipewire") { ++ packages = [ "libpipewire-0.2" ] ++ if (!rtc_link_pipewire) { ++ ignore_libs = true ++ } ++ } ++ } ++ ++ if (!rtc_link_pipewire) { + # When libpipewire is not directly linked, use stubs to allow for dlopening of + # the binary. + generate_stubs("pipewire_stubs") { +- configs = [ "../../:common_config" ] ++ configs = [ ++ "../../:common_config", ++ ":pipewire", ++ ] + deps = [ "../../rtc_base" ] + extra_header = "linux/pipewire_stub_header.fragment" + logging_function = "RTC_LOG(LS_VERBOSE)" + logging_include = "rtc_base/logging.h" + output_name = "linux/pipewire_stubs" + path_from_source = "modules/desktop_capture/linux" +- sigs = [ "linux/pipewire.sigs" ] ++ if (rtc_pipewire_version == "0.3") { ++ sigs = [ "linux/pipewire03.sigs" ] ++ } else { ++ sigs = [ "linux/pipewire02.sigs" ] ++ } + } + } + +@@ -506,6 +530,7 @@ rtc_library("desktop_capture_generic") { + absl_deps = [ + "//third_party/abseil-cpp/absl/memory", + "//third_party/abseil-cpp/absl/strings", ++ "//third_party/abseil-cpp/absl/types:optional", + ] + + if (rtc_use_x11_extensions) { +@@ -526,20 +551,15 @@ rtc_library("desktop_capture_generic") { + sources += [ + "linux/base_capturer_pipewire.cc", + "linux/base_capturer_pipewire.h", +- "linux/screen_capturer_pipewire.cc", +- "linux/screen_capturer_pipewire.h", +- "linux/window_capturer_pipewire.cc", +- "linux/window_capturer_pipewire.h", + ] + + configs += [ + ":pipewire_config", + ":gio", ++ ":pipewire", + ] + +- if (rtc_link_pipewire) { +- configs += [ ":pipewire" ] +- } else { ++ if (!rtc_link_pipewire) { + deps += [ ":pipewire_stubs" ] + } + } +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc b/chromium/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc +index 2640e93aa98..c302a086ead 100644 +--- a/chromium/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc ++++ b/chromium/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc +@@ -14,8 +14,14 @@ + #include + #include + #include ++#if !PW_CHECK_VERSION(0, 3, 0) + #include + #include ++#endif ++ ++#include ++#include ++#include + + #include + #include +@@ -30,7 +36,11 @@ + #include "modules/desktop_capture/linux/pipewire_stubs.h" + + using modules_desktop_capture_linux::InitializeStubs; +-using modules_desktop_capture_linux::kModulePipewire; ++#if PW_CHECK_VERSION(0, 3, 0) ++using modules_desktop_capture_linux::kModulePipewire03; ++#else ++using modules_desktop_capture_linux::kModulePipewire02; ++#endif + using modules_desktop_capture_linux::StubPathMap; + #endif // defined(WEBRTC_DLOPEN_PIPEWIRE) + +@@ -47,9 +57,156 @@ const char kScreenCastInterfaceName[] = "org.freedesktop.portal.ScreenCast"; + const int kBytesPerPixel = 4; + + #if defined(WEBRTC_DLOPEN_PIPEWIRE) ++#if PW_CHECK_VERSION(0, 3, 0) ++const char kPipeWireLib[] = "libpipewire-0.3.so.0"; ++#else + const char kPipeWireLib[] = "libpipewire-0.2.so.1"; + #endif ++#endif + ++// static ++struct dma_buf_sync { ++ uint64_t flags; ++}; ++#define DMA_BUF_SYNC_READ (1 << 0) ++#define DMA_BUF_SYNC_START (0 << 2) ++#define DMA_BUF_SYNC_END (1 << 2) ++#define DMA_BUF_BASE 'b' ++#define DMA_BUF_IOCTL_SYNC _IOW(DMA_BUF_BASE, 0, struct dma_buf_sync) ++ ++static void SyncDmaBuf(int fd, uint64_t start_or_end) { ++ struct dma_buf_sync sync = {0}; ++ ++ sync.flags = start_or_end | DMA_BUF_SYNC_READ; ++ ++ while (true) { ++ int ret; ++ ret = ioctl(fd, DMA_BUF_IOCTL_SYNC, &sync); ++ if (ret == -1 && errno == EINTR) { ++ continue; ++ } else if (ret == -1) { ++ RTC_LOG(LS_ERROR) << "Failed to synchronize DMA buffer: " ++ << g_strerror(errno); ++ break; ++ } else { ++ break; ++ } ++ } ++} ++ ++class ScopedBuf { ++ public: ++ ScopedBuf() {} ++ ScopedBuf(unsigned char* map, int map_size, bool is_dma_buf, int fd) ++ : map_(map), map_size_(map_size), is_dma_buf_(is_dma_buf), fd_(fd) {} ++ ~ScopedBuf() { ++ if (map_ != MAP_FAILED) { ++ if (is_dma_buf_) { ++ SyncDmaBuf(fd_, DMA_BUF_SYNC_END); ++ } ++ munmap(map_, map_size_); ++ } ++ } ++ ++ operator bool() { return map_ != MAP_FAILED; } ++ ++ void initialize(unsigned char* map, int map_size, bool is_dma_buf, int fd) { ++ map_ = map; ++ map_size_ = map_size; ++ is_dma_buf_ = is_dma_buf; ++ fd_ = fd; ++ } ++ ++ unsigned char* get() { return map_; } ++ ++ protected: ++ unsigned char* map_ = nullptr; ++ int map_size_; ++ bool is_dma_buf_; ++ int fd_; ++}; ++ ++template ++class Scoped { ++ public: ++ Scoped() {} ++ explicit Scoped(T* val) { ptr_ = val; } ++ ~Scoped() { RTC_NOTREACHED(); } ++ ++ T* operator->() { return ptr_; } ++ ++ bool operator!() { return ptr_ == nullptr; } ++ ++ T* get() { return ptr_; } ++ ++ T** receive() { ++ RTC_CHECK(!ptr_); ++ return &ptr_; ++ } ++ ++ Scoped& operator=(T* val) { ++ ptr_ = val; ++ return *this; ++ } ++ ++ protected: ++ T* ptr_ = nullptr; ++}; ++ ++template <> ++Scoped::~Scoped() { ++ if (ptr_) { ++ g_error_free(ptr_); ++ } ++} ++ ++template <> ++Scoped::~Scoped() { ++ if (ptr_) { ++ g_free(ptr_); ++ } ++} ++ ++template <> ++Scoped::~Scoped() { ++ if (ptr_) { ++ g_variant_unref(ptr_); ++ } ++} ++ ++template <> ++Scoped::~Scoped() { ++ if (ptr_) { ++ g_variant_iter_free(ptr_); ++ } ++} ++ ++template <> ++Scoped::~Scoped() { ++ if (ptr_) { ++ g_object_unref(ptr_); ++ } ++} ++ ++template <> ++Scoped::~Scoped() { ++ if (ptr_) { ++ g_object_unref(ptr_); ++ } ++} ++ ++#if PW_CHECK_VERSION(0, 3, 0) ++void BaseCapturerPipeWire::OnCoreError(void* data, ++ uint32_t id, ++ int seq, ++ int res, ++ const char* message) { ++ BaseCapturerPipeWire* that = static_cast(data); ++ RTC_DCHECK(that); ++ ++ RTC_LOG(LS_ERROR) << "PipeWire remote error: " << message; ++} ++#else + // static + void BaseCapturerPipeWire::OnStateChanged(void* data, + pw_remote_state old_state, +@@ -64,7 +221,7 @@ void BaseCapturerPipeWire::OnStateChanged(void* data, + break; + case PW_REMOTE_STATE_CONNECTED: + RTC_LOG(LS_INFO) << "PipeWire remote state: connected."; +- that->CreateReceivingStream(); ++ that->pw_stream_ = that->CreateReceivingStream(); + break; + case PW_REMOTE_STATE_CONNECTING: + RTC_LOG(LS_INFO) << "PipeWire remote state: connecting."; +@@ -74,6 +231,7 @@ void BaseCapturerPipeWire::OnStateChanged(void* data, + break; + } + } ++#endif + + // static + void BaseCapturerPipeWire::OnStreamStateChanged(void* data, +@@ -83,6 +241,18 @@ void BaseCapturerPipeWire::OnStreamStateChanged(void* data, + BaseCapturerPipeWire* that = static_cast(data); + RTC_DCHECK(that); + ++#if PW_CHECK_VERSION(0, 3, 0) ++ switch (state) { ++ case PW_STREAM_STATE_ERROR: ++ RTC_LOG(LS_ERROR) << "PipeWire stream state error: " << error_message; ++ break; ++ case PW_STREAM_STATE_PAUSED: ++ case PW_STREAM_STATE_STREAMING: ++ case PW_STREAM_STATE_UNCONNECTED: ++ case PW_STREAM_STATE_CONNECTING: ++ break; ++ } ++#else + switch (state) { + case PW_STREAM_STATE_ERROR: + RTC_LOG(LS_ERROR) << "PipeWire stream state error: " << error_message; +@@ -97,36 +267,74 @@ void BaseCapturerPipeWire::OnStreamStateChanged(void* data, + case PW_STREAM_STATE_STREAMING: + break; + } ++#endif + } + + // static ++#if PW_CHECK_VERSION(0, 3, 0) ++void BaseCapturerPipeWire::OnStreamParamChanged(void* data, ++ uint32_t id, ++ const struct spa_pod* format) { ++#else + void BaseCapturerPipeWire::OnStreamFormatChanged(void* data, + const struct spa_pod* format) { ++#endif + BaseCapturerPipeWire* that = static_cast(data); + RTC_DCHECK(that); + + RTC_LOG(LS_INFO) << "PipeWire stream format changed."; + ++#if PW_CHECK_VERSION(0, 3, 0) ++ if (!format || id != SPA_PARAM_Format) { ++#else + if (!format) { + pw_stream_finish_format(that->pw_stream_, /*res=*/0, /*params=*/nullptr, + /*n_params=*/0); ++#endif + return; + } + ++#if PW_CHECK_VERSION(0, 3, 0) ++ spa_format_video_raw_parse(format, &that->spa_video_format_); ++#else + that->spa_video_format_ = new spa_video_info_raw(); + spa_format_video_raw_parse(format, that->spa_video_format_, + &that->pw_type_->format_video); ++#endif + ++#if PW_CHECK_VERSION(0, 3, 0) ++ auto width = that->spa_video_format_.size.width; ++ auto height = that->spa_video_format_.size.height; ++#else + auto width = that->spa_video_format_->size.width; + auto height = that->spa_video_format_->size.height; ++#endif + auto stride = SPA_ROUND_UP_N(width * kBytesPerPixel, 4); + auto size = height * stride; + ++ that->desktop_size_ = DesktopSize(width, height); ++ + uint8_t buffer[1024] = {}; + auto builder = spa_pod_builder{buffer, sizeof(buffer)}; + + // Setup buffers and meta header for new format. +- const struct spa_pod* params[2]; ++ const struct spa_pod* params[3]; ++#if PW_CHECK_VERSION(0, 3, 0) ++ params[0] = reinterpret_cast(spa_pod_builder_add_object( ++ &builder, SPA_TYPE_OBJECT_ParamBuffers, SPA_PARAM_Buffers, ++ SPA_PARAM_BUFFERS_size, SPA_POD_Int(size), SPA_PARAM_BUFFERS_stride, ++ SPA_POD_Int(stride), SPA_PARAM_BUFFERS_buffers, ++ SPA_POD_CHOICE_RANGE_Int(8, 1, 32))); ++ params[1] = reinterpret_cast(spa_pod_builder_add_object( ++ &builder, SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, SPA_PARAM_META_type, ++ SPA_POD_Id(SPA_META_Header), SPA_PARAM_META_size, ++ SPA_POD_Int(sizeof(struct spa_meta_header)))); ++ params[2] = reinterpret_cast(spa_pod_builder_add_object( ++ &builder, SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, SPA_PARAM_META_type, ++ SPA_POD_Id(SPA_META_VideoCrop), SPA_PARAM_META_size, ++ SPA_POD_Int(sizeof(struct spa_meta_region)))); ++ pw_stream_update_params(that->pw_stream_, params, 3); ++#else + params[0] = reinterpret_cast(spa_pod_builder_object( + &builder, + // id to enumerate buffer requirements +@@ -155,8 +363,18 @@ void BaseCapturerPipeWire::OnStreamFormatChanged(void* data, + // Size: size of the metadata, specified as integer (i) + ":", that->pw_core_type_->param_meta.size, "i", + sizeof(struct spa_meta_header))); +- +- pw_stream_finish_format(that->pw_stream_, /*res=*/0, params, /*n_params=*/2); ++ params[2] = reinterpret_cast(spa_pod_builder_object( ++ &builder, ++ // id to enumerate supported metadata ++ that->pw_core_type_->param.idMeta, that->pw_core_type_->param_meta.Meta, ++ // Type: specified as id or enum (I) ++ ":", that->pw_core_type_->param_meta.type, "I", ++ that->pw_core_type_->meta.VideoCrop, ++ // Size: size of the metadata, specified as integer (i) ++ ":", that->pw_core_type_->param_meta.size, "i", ++ sizeof(struct spa_meta_video_crop))); ++ pw_stream_finish_format(that->pw_stream_, /*res=*/0, params, /*n_params=*/3); ++#endif + } + + // static +@@ -164,15 +382,26 @@ void BaseCapturerPipeWire::OnStreamProcess(void* data) { + BaseCapturerPipeWire* that = static_cast(data); + RTC_DCHECK(that); + +- pw_buffer* buf = nullptr; ++ struct pw_buffer* next_buffer; ++ struct pw_buffer* buffer = nullptr; ++ ++ next_buffer = pw_stream_dequeue_buffer(that->pw_stream_); ++ while (next_buffer) { ++ buffer = next_buffer; ++ next_buffer = pw_stream_dequeue_buffer(that->pw_stream_); + +- if (!(buf = pw_stream_dequeue_buffer(that->pw_stream_))) { ++ if (next_buffer) { ++ pw_stream_queue_buffer(that->pw_stream_, buffer); ++ } ++ } ++ ++ if (!buffer) { + return; + } + +- that->HandleBuffer(buf); ++ that->HandleBuffer(buffer); + +- pw_stream_queue_buffer(that->pw_stream_, buf); ++ pw_stream_queue_buffer(that->pw_stream_, buffer); + } + + BaseCapturerPipeWire::BaseCapturerPipeWire(CaptureSourceType source_type) +@@ -183,6 +412,7 @@ BaseCapturerPipeWire::~BaseCapturerPipeWire() { + pw_thread_loop_stop(pw_main_loop_); + } + ++#if !PW_CHECK_VERSION(0, 3, 0) + if (pw_type_) { + delete pw_type_; + } +@@ -190,30 +420,41 @@ BaseCapturerPipeWire::~BaseCapturerPipeWire() { + if (spa_video_format_) { + delete spa_video_format_; + } ++#endif + + if (pw_stream_) { + pw_stream_destroy(pw_stream_); + } + ++#if !PW_CHECK_VERSION(0, 3, 0) + if (pw_remote_) { + pw_remote_destroy(pw_remote_); + } ++#endif + ++#if PW_CHECK_VERSION(0, 3, 0) ++ if (pw_core_) { ++ pw_core_disconnect(pw_core_); ++ } ++ ++ if (pw_context_) { ++ pw_context_destroy(pw_context_); ++ } ++#else + if (pw_core_) { + pw_core_destroy(pw_core_); + } ++#endif + + if (pw_main_loop_) { + pw_thread_loop_destroy(pw_main_loop_); + } + ++#if !PW_CHECK_VERSION(0, 3, 0) + if (pw_loop_) { + pw_loop_destroy(pw_loop_); + } +- +- if (current_frame_) { +- free(current_frame_); +- } ++#endif + + if (start_request_signal_id_) { + g_dbus_connection_signal_unsubscribe(connection_, start_request_signal_id_); +@@ -228,18 +469,16 @@ BaseCapturerPipeWire::~BaseCapturerPipeWire() { + } + + if (session_handle_) { +- GDBusMessage* message = g_dbus_message_new_method_call( +- kDesktopBusName, session_handle_, kSessionInterfaceName, "Close"); +- if (message) { +- GError* error = nullptr; +- g_dbus_connection_send_message(connection_, message, ++ Scoped message(g_dbus_message_new_method_call( ++ kDesktopBusName, session_handle_, kSessionInterfaceName, "Close")); ++ if (message.get()) { ++ Scoped error; ++ g_dbus_connection_send_message(connection_, message.get(), + G_DBUS_SEND_MESSAGE_FLAGS_NONE, +- /*out_serial=*/nullptr, &error); +- if (error) { ++ /*out_serial=*/nullptr, error.receive()); ++ if (error.get()) { + RTC_LOG(LS_ERROR) << "Failed to close the session: " << error->message; +- g_error_free(error); + } +- g_object_unref(message); + } + } + +@@ -274,7 +513,11 @@ void BaseCapturerPipeWire::InitPipeWire() { + StubPathMap paths; + + // Check if the PipeWire library is available. +- paths[kModulePipewire].push_back(kPipeWireLib); ++#if PW_CHECK_VERSION(0, 3, 0) ++ paths[kModulePipewire03].push_back(kPipeWireLib); ++#else ++ paths[kModulePipewire02].push_back(kPipeWireLib); ++#endif + if (!InitializeStubs(paths)) { + RTC_LOG(LS_ERROR) << "Failed to load the PipeWire library and symbols."; + portal_init_failed_ = true; +@@ -284,16 +527,46 @@ void BaseCapturerPipeWire::InitPipeWire() { + + pw_init(/*argc=*/nullptr, /*argc=*/nullptr); + ++#if PW_CHECK_VERSION(0, 3, 0) ++ pw_main_loop_ = pw_thread_loop_new("pipewire-main-loop", nullptr); ++ ++ pw_thread_loop_lock(pw_main_loop_); ++ ++ pw_context_ = ++ pw_context_new(pw_thread_loop_get_loop(pw_main_loop_), nullptr, 0); ++ if (!pw_context_) { ++ RTC_LOG(LS_ERROR) << "Failed to create PipeWire context"; ++ return; ++ } ++ ++ pw_core_ = pw_context_connect(pw_context_, nullptr, 0); ++ if (!pw_core_) { ++ RTC_LOG(LS_ERROR) << "Failed to connect PipeWire context"; ++ return; ++ } ++#else + pw_loop_ = pw_loop_new(/*properties=*/nullptr); + pw_main_loop_ = pw_thread_loop_new(pw_loop_, "pipewire-main-loop"); + ++ pw_thread_loop_lock(pw_main_loop_); ++ + pw_core_ = pw_core_new(pw_loop_, /*properties=*/nullptr); + pw_core_type_ = pw_core_get_type(pw_core_); + pw_remote_ = pw_remote_new(pw_core_, nullptr, /*user_data_size=*/0); + + InitPipeWireTypes(); ++#endif + + // Initialize event handlers, remote end and stream-related. ++#if PW_CHECK_VERSION(0, 3, 0) ++ pw_core_events_.version = PW_VERSION_CORE_EVENTS; ++ pw_core_events_.error = &OnCoreError; ++ ++ pw_stream_events_.version = PW_VERSION_STREAM_EVENTS; ++ pw_stream_events_.state_changed = &OnStreamStateChanged; ++ pw_stream_events_.param_changed = &OnStreamParamChanged; ++ pw_stream_events_.process = &OnStreamProcess; ++#else + pw_remote_events_.version = PW_VERSION_REMOTE_EVENTS; + pw_remote_events_.state_changed = &OnStateChanged; + +@@ -301,19 +574,33 @@ void BaseCapturerPipeWire::InitPipeWire() { + pw_stream_events_.state_changed = &OnStreamStateChanged; + pw_stream_events_.format_changed = &OnStreamFormatChanged; + pw_stream_events_.process = &OnStreamProcess; ++#endif + ++#if PW_CHECK_VERSION(0, 3, 0) ++ pw_core_add_listener(pw_core_, &spa_core_listener_, &pw_core_events_, this); ++ ++ pw_stream_ = CreateReceivingStream(); ++ if (!pw_stream_) { ++ RTC_LOG(LS_ERROR) << "Failed to create PipeWire stream"; ++ return; ++ } ++#else + pw_remote_add_listener(pw_remote_, &spa_remote_listener_, &pw_remote_events_, + this); + pw_remote_connect_fd(pw_remote_, pw_fd_); ++#endif + + if (pw_thread_loop_start(pw_main_loop_) < 0) { + RTC_LOG(LS_ERROR) << "Failed to start main PipeWire loop"; + portal_init_failed_ = true; + } + ++ pw_thread_loop_unlock(pw_main_loop_); ++ + RTC_LOG(LS_INFO) << "PipeWire remote opened."; + } + ++#if !PW_CHECK_VERSION(0, 3, 0) + void BaseCapturerPipeWire::InitPipeWireTypes() { + spa_type_map* map = pw_core_type_->map; + pw_type_ = new PipeWireType(); +@@ -323,23 +610,44 @@ void BaseCapturerPipeWire::InitPipeWireTypes() { + spa_type_format_video_map(map, &pw_type_->format_video); + spa_type_video_format_map(map, &pw_type_->video_format); + } ++#endif + +-void BaseCapturerPipeWire::CreateReceivingStream() { ++pw_stream* BaseCapturerPipeWire::CreateReceivingStream() { ++#if !PW_CHECK_VERSION(0, 3, 0) ++ if (pw_remote_get_state(pw_remote_, nullptr) != PW_REMOTE_STATE_CONNECTED) { ++ RTC_LOG(LS_ERROR) << "Cannot create pipewire stream"; ++ return nullptr; ++ } ++#endif + spa_rectangle pwMinScreenBounds = spa_rectangle{1, 1}; +- spa_rectangle pwScreenBounds = +- spa_rectangle{static_cast(desktop_size_.width()), +- static_cast(desktop_size_.height())}; +- +- spa_fraction pwFrameRateMin = spa_fraction{0, 1}; +- spa_fraction pwFrameRateMax = spa_fraction{60, 1}; ++ spa_rectangle pwMaxScreenBounds = spa_rectangle{UINT32_MAX, UINT32_MAX}; + + pw_properties* reuseProps = + pw_properties_new_string("pipewire.client.reuse=1"); +- pw_stream_ = pw_stream_new(pw_remote_, "webrtc-consume-stream", reuseProps); ++#if PW_CHECK_VERSION(0, 3, 0) ++ auto stream = pw_stream_new(pw_core_, "webrtc-consume-stream", reuseProps); ++#else ++ auto stream = pw_stream_new(pw_remote_, "webrtc-consume-stream", reuseProps); ++#endif + + uint8_t buffer[1024] = {}; + const spa_pod* params[1]; + spa_pod_builder builder = spa_pod_builder{buffer, sizeof(buffer)}; ++ ++#if PW_CHECK_VERSION(0, 3, 0) ++ params[0] = reinterpret_cast(spa_pod_builder_add_object( ++ &builder, SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat, ++ SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_video), ++ SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw), ++ SPA_FORMAT_VIDEO_format, ++ SPA_POD_CHOICE_ENUM_Id(5, SPA_VIDEO_FORMAT_BGRx, SPA_VIDEO_FORMAT_RGBx, ++ SPA_VIDEO_FORMAT_RGBA, SPA_VIDEO_FORMAT_BGRx, ++ SPA_VIDEO_FORMAT_BGRA), ++ SPA_FORMAT_VIDEO_size, ++ SPA_POD_CHOICE_RANGE_Rectangle(&pwMinScreenBounds, &pwMinScreenBounds, ++ &pwMaxScreenBounds), ++ 0)); ++#else + params[0] = reinterpret_cast(spa_pod_builder_object( + &builder, + // id to enumerate formats +@@ -349,69 +657,218 @@ void BaseCapturerPipeWire::CreateReceivingStream() { + // then allowed formats are enumerated (e) and the format is undecided (u) + // to allow negotiation + ":", pw_type_->format_video.format, "Ieu", pw_type_->video_format.BGRx, +- SPA_POD_PROP_ENUM(2, pw_type_->video_format.RGBx, +- pw_type_->video_format.BGRx), ++ SPA_POD_PROP_ENUM( ++ 4, pw_type_->video_format.RGBx, pw_type_->video_format.BGRx, ++ pw_type_->video_format.RGBA, pw_type_->video_format.BGRA), + // Video size: specified as rectangle (R), preferred size is specified as + // first parameter, then allowed size is defined as range (r) from min and + // max values and the format is undecided (u) to allow negotiation +- ":", pw_type_->format_video.size, "Rru", &pwScreenBounds, 2, +- &pwMinScreenBounds, &pwScreenBounds, +- // Frame rate: specified as fraction (F) and set to minimum frame rate +- // value +- ":", pw_type_->format_video.framerate, "F", &pwFrameRateMin, +- // Max frame rate: specified as fraction (F), preferred frame rate is set +- // to maximum value, then allowed frame rate is defined as range (r) from +- // min and max values and it is undecided (u) to allow negotiation +- ":", pw_type_->format_video.max_framerate, "Fru", &pwFrameRateMax, 2, +- &pwFrameRateMin, &pwFrameRateMax)); +- +- pw_stream_add_listener(pw_stream_, &spa_stream_listener_, &pw_stream_events_, ++ ":", pw_type_->format_video.size, "Rru", &pwMinScreenBounds, ++ SPA_POD_PROP_MIN_MAX(&pwMinScreenBounds, &pwMaxScreenBounds))); ++#endif ++ ++ pw_stream_add_listener(stream, &spa_stream_listener_, &pw_stream_events_, + this); ++#if PW_CHECK_VERSION(0, 3, 0) ++ if (pw_stream_connect(stream, PW_DIRECTION_INPUT, pw_stream_node_id_, ++ PW_STREAM_FLAG_AUTOCONNECT, params, 1) != 0) { ++#else + pw_stream_flags flags = static_cast( +- PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_INACTIVE | +- PW_STREAM_FLAG_MAP_BUFFERS); +- if (pw_stream_connect(pw_stream_, PW_DIRECTION_INPUT, /*port_path=*/nullptr, ++ PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_INACTIVE); ++ if (pw_stream_connect(stream, PW_DIRECTION_INPUT, /*port_path=*/nullptr, + flags, params, + /*n_params=*/1) != 0) { ++#endif + RTC_LOG(LS_ERROR) << "Could not connect receiving stream."; + portal_init_failed_ = true; +- return; ++ return nullptr; + } ++ ++ return stream; + } + + void BaseCapturerPipeWire::HandleBuffer(pw_buffer* buffer) { + spa_buffer* spaBuffer = buffer->buffer; +- void* src = nullptr; ++ ScopedBuf map; ++ uint8_t* src = nullptr; ++ ++ if (spaBuffer->datas[0].chunk->size == 0) { ++ RTC_LOG(LS_ERROR) << "Failed to get video stream: Zero size."; ++ return; ++ } ++ ++#if PW_CHECK_VERSION(0, 3, 0) ++ if (spaBuffer->datas[0].type == SPA_DATA_MemFd || ++ spaBuffer->datas[0].type == SPA_DATA_DmaBuf) { ++#else ++ if (spaBuffer->datas[0].type == pw_core_type_->data.MemFd || ++ spaBuffer->datas[0].type == pw_core_type_->data.DmaBuf) { ++#endif ++ map.initialize( ++ static_cast( ++ mmap(nullptr, ++ spaBuffer->datas[0].maxsize + spaBuffer->datas[0].mapoffset, ++ PROT_READ, MAP_PRIVATE, spaBuffer->datas[0].fd, 0)), ++ spaBuffer->datas[0].maxsize + spaBuffer->datas[0].mapoffset, ++#if PW_CHECK_VERSION(0, 3, 0) ++ spaBuffer->datas[0].type == SPA_DATA_DmaBuf, ++#else ++ spaBuffer->datas[0].type == pw_core_type_->data.DmaBuf, ++#endif ++ spaBuffer->datas[0].fd); ++ ++ if (!map) { ++ RTC_LOG(LS_ERROR) << "Failed to mmap the memory: " ++ << std::strerror(errno); ++ return; ++ } ++ ++#if PW_CHECK_VERSION(0, 3, 0) ++ if (spaBuffer->datas[0].type == SPA_DATA_DmaBuf) { ++#else ++ if (spaBuffer->datas[0].type == pw_core_type_->data.DmaBuf) { ++#endif ++ SyncDmaBuf(spaBuffer->datas[0].fd, DMA_BUF_SYNC_START); ++ } ++ ++ src = SPA_MEMBER(map.get(), spaBuffer->datas[0].mapoffset, uint8_t); ++#if PW_CHECK_VERSION(0, 3, 0) ++ } else if (spaBuffer->datas[0].type == SPA_DATA_MemPtr) { ++#else ++ } else if (spaBuffer->datas[0].type == pw_core_type_->data.MemPtr) { ++#endif ++ src = static_cast(spaBuffer->datas[0].data); ++ } + +- if (!(src = spaBuffer->datas[0].data)) { ++ if (!src) { ++ return; ++ } ++ ++#if PW_CHECK_VERSION(0, 3, 0) ++ struct spa_meta_region* video_metadata = ++ static_cast(spa_buffer_find_meta_data( ++ spaBuffer, SPA_META_VideoCrop, sizeof(*video_metadata))); ++#else ++ struct spa_meta_video_crop* video_metadata = ++ static_cast( ++ spa_buffer_find_meta(spaBuffer, pw_core_type_->meta.VideoCrop)); ++#endif ++ ++ // Video size from metadata is bigger than an actual video stream size. ++ // The metadata are wrong or we should up-scale the video...in both cases ++ // just quit now. ++#if PW_CHECK_VERSION(0, 3, 0) ++ if (video_metadata && (video_metadata->region.size.width > ++ static_cast(desktop_size_.width()) || ++ video_metadata->region.size.height > ++ static_cast(desktop_size_.height()))) { ++#else ++ if (video_metadata && (video_metadata->width > desktop_size_.width() || ++ video_metadata->height > desktop_size_.height())) { ++#endif ++ RTC_LOG(LS_ERROR) << "Stream metadata sizes are wrong!"; + return; + } + +- uint32_t maxSize = spaBuffer->datas[0].maxsize; +- int32_t srcStride = spaBuffer->datas[0].chunk->stride; +- if (srcStride != (desktop_size_.width() * kBytesPerPixel)) { ++ // Use video metadata when video size from metadata is set and smaller than ++ // video stream size, so we need to adjust it. ++ bool video_is_full_width = true; ++ bool video_is_full_height = true; ++#if PW_CHECK_VERSION(0, 3, 0) ++ if (video_metadata && video_metadata->region.size.width != 0 && ++ video_metadata->region.size.height != 0) { ++ if (video_metadata->region.size.width < ++ static_cast(desktop_size_.width())) { ++ video_is_full_width = false; ++ } else if (video_metadata->region.size.height < ++ static_cast(desktop_size_.height())) { ++ video_is_full_height = false; ++ } ++ } ++#else ++ if (video_metadata && video_metadata->width != 0 && ++ video_metadata->height != 0) { ++ if (video_metadata->width < desktop_size_.width()) { ++ } else if (video_metadata->height < desktop_size_.height()) { ++ video_is_full_height = false; ++ } ++ } ++#endif ++ ++ DesktopSize video_size_prev = video_size_; ++ if (!video_is_full_height || !video_is_full_width) { ++#if PW_CHECK_VERSION(0, 3, 0) ++ video_size_ = DesktopSize(video_metadata->region.size.width, ++ video_metadata->region.size.height); ++#else ++ video_size_ = DesktopSize(video_metadata->width, video_metadata->height); ++#endif ++ } else { ++ video_size_ = desktop_size_; ++ } ++ ++ webrtc::MutexLock lock(¤t_frame_lock_); ++ if (!current_frame_ || !video_size_.equals(video_size_prev)) { ++ current_frame_ = std::make_unique( ++ video_size_.width() * video_size_.height() * kBytesPerPixel); ++ } ++ ++ const int32_t dst_stride = video_size_.width() * kBytesPerPixel; ++ const int32_t src_stride = spaBuffer->datas[0].chunk->stride; ++ ++ if (src_stride != (desktop_size_.width() * kBytesPerPixel)) { + RTC_LOG(LS_ERROR) << "Got buffer with stride different from screen stride: " +- << srcStride ++ << src_stride + << " != " << (desktop_size_.width() * kBytesPerPixel); + portal_init_failed_ = true; ++ + return; + } + +- if (!current_frame_) { +- current_frame_ = static_cast(malloc(maxSize)); +- } +- RTC_DCHECK(current_frame_ != nullptr); +- +- // If both sides decided to go with the RGBx format we need to convert it to +- // BGRx to match color format expected by WebRTC. +- if (spa_video_format_->format == pw_type_->video_format.RGBx) { +- uint8_t* tempFrame = static_cast(malloc(maxSize)); +- std::memcpy(tempFrame, src, maxSize); +- ConvertRGBxToBGRx(tempFrame, maxSize); +- std::memcpy(current_frame_, tempFrame, maxSize); +- free(tempFrame); +- } else { +- std::memcpy(current_frame_, src, maxSize); ++ // Adjust source content based on metadata video position ++#if PW_CHECK_VERSION(0, 3, 0) ++ if (!video_is_full_height && ++ (video_metadata->region.position.y + video_size_.height() <= ++ desktop_size_.height())) { ++ src += src_stride * video_metadata->region.position.y; ++ } ++ const int x_offset = ++ !video_is_full_width && ++ (video_metadata->region.position.x + video_size_.width() <= ++ desktop_size_.width()) ++ ? video_metadata->region.position.x * kBytesPerPixel ++ : 0; ++#else ++ if (!video_is_full_height && ++ (video_metadata->y + video_size_.height() <= desktop_size_.height())) { ++ src += src_stride * video_metadata->y; ++ } ++ ++ const int x_offset = ++ !video_is_full_width && ++ (video_metadata->x + video_size_.width() <= desktop_size_.width()) ++ ? video_metadata->x * kBytesPerPixel ++ : 0; ++#endif ++ ++ uint8_t* dst = current_frame_.get(); ++ for (int i = 0; i < video_size_.height(); ++i) { ++ // Adjust source content based on crop video position if needed ++ src += x_offset; ++ std::memcpy(dst, src, dst_stride); ++ // If both sides decided to go with the RGBx format we need to convert it to ++ // BGRx to match color format expected by WebRTC. ++#if PW_CHECK_VERSION(0, 3, 0) ++ if (spa_video_format_.format == SPA_VIDEO_FORMAT_RGBx || ++ spa_video_format_.format == SPA_VIDEO_FORMAT_RGBA) { ++#else ++ if (spa_video_format_->format == pw_type_->video_format.RGBx || ++ spa_video_format_->format == pw_type_->video_format.RGBA) { ++#endif ++ ConvertRGBxToBGRx(dst, dst_stride); ++ } ++ src += src_stride - x_offset; ++ dst += dst_stride; + } + } + +@@ -441,14 +898,13 @@ void BaseCapturerPipeWire::OnProxyRequested(GObject* /*object*/, + BaseCapturerPipeWire* that = static_cast(user_data); + RTC_DCHECK(that); + +- GError* error = nullptr; +- GDBusProxy *proxy = g_dbus_proxy_new_finish(result, &error); ++ Scoped error; ++ GDBusProxy* proxy = g_dbus_proxy_new_finish(result, error.receive()); + if (!proxy) { +- if (g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ if (g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED)) + return; + RTC_LOG(LS_ERROR) << "Failed to create a proxy for the screen cast portal: " + << error->message; +- g_error_free(error); + that->portal_init_failed_ = true; + return; + } +@@ -462,38 +918,36 @@ void BaseCapturerPipeWire::OnProxyRequested(GObject* /*object*/, + // static + gchar* BaseCapturerPipeWire::PrepareSignalHandle(GDBusConnection* connection, + const gchar* token) { +- gchar* sender = g_strdup(g_dbus_connection_get_unique_name(connection) + 1); +- for (int i = 0; sender[i]; i++) { +- if (sender[i] == '.') { +- sender[i] = '_'; ++ Scoped sender( ++ g_strdup(g_dbus_connection_get_unique_name(connection) + 1)); ++ for (int i = 0; sender.get()[i]; i++) { ++ if (sender.get()[i] == '.') { ++ sender.get()[i] = '_'; + } + } + +- gchar* handle = g_strconcat(kDesktopRequestObjectPath, "/", sender, "/", ++ gchar* handle = g_strconcat(kDesktopRequestObjectPath, "/", sender.get(), "/", + token, /*end of varargs*/ nullptr); +- g_free(sender); + + return handle; + } + + void BaseCapturerPipeWire::SessionRequest() { + GVariantBuilder builder; +- gchar* variant_string; ++ Scoped variant_string; + + g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT); + variant_string = + g_strdup_printf("webrtc_session%d", g_random_int_range(0, G_MAXINT)); + g_variant_builder_add(&builder, "{sv}", "session_handle_token", +- g_variant_new_string(variant_string)); +- g_free(variant_string); ++ g_variant_new_string(variant_string.get())); + variant_string = g_strdup_printf("webrtc%d", g_random_int_range(0, G_MAXINT)); + g_variant_builder_add(&builder, "{sv}", "handle_token", +- g_variant_new_string(variant_string)); ++ g_variant_new_string(variant_string.get())); + +- portal_handle_ = PrepareSignalHandle(connection_, variant_string); ++ portal_handle_ = PrepareSignalHandle(connection_, variant_string.get()); + session_request_signal_id_ = SetupRequestResponseSignal( + portal_handle_, OnSessionRequestResponseSignal); +- g_free(variant_string); + + RTC_LOG(LS_INFO) << "Screen cast session requested."; + g_dbus_proxy_call( +@@ -509,22 +963,21 @@ void BaseCapturerPipeWire::OnSessionRequested(GDBusProxy *proxy, + BaseCapturerPipeWire* that = static_cast(user_data); + RTC_DCHECK(that); + +- GError* error = nullptr; +- GVariant* variant = g_dbus_proxy_call_finish(proxy, result, &error); ++ Scoped error; ++ Scoped variant( ++ g_dbus_proxy_call_finish(proxy, result, error.receive())); + if (!variant) { +- if (g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ if (g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED)) + return; + RTC_LOG(LS_ERROR) << "Failed to create a screen cast session: " + << error->message; +- g_error_free(error); + that->portal_init_failed_ = true; + return; + } + RTC_LOG(LS_INFO) << "Initializing the screen cast session."; + +- gchar* handle = nullptr; +- g_variant_get_child(variant, 0, "o", &handle); +- g_variant_unref(variant); ++ Scoped handle; ++ g_variant_get_child(variant.get(), 0, "o", &handle); + if (!handle) { + RTC_LOG(LS_ERROR) << "Failed to initialize the screen cast session."; + if (that->session_request_signal_id_) { +@@ -536,8 +989,6 @@ void BaseCapturerPipeWire::OnSessionRequested(GDBusProxy *proxy, + return; + } + +- g_free(handle); +- + RTC_LOG(LS_INFO) << "Subscribing to the screen cast session."; + } + +@@ -557,11 +1008,11 @@ void BaseCapturerPipeWire::OnSessionRequestResponseSignal( + << "Received response for the screen cast session subscription."; + + guint32 portal_response; +- GVariant* response_data; +- g_variant_get(parameters, "(u@a{sv})", &portal_response, &response_data); +- g_variant_lookup(response_data, "session_handle", "s", ++ Scoped response_data; ++ g_variant_get(parameters, "(u@a{sv})", &portal_response, ++ response_data.receive()); ++ g_variant_lookup(response_data.get(), "session_handle", "s", + &that->session_handle_); +- g_variant_unref(response_data); + + if (!that->session_handle_ || portal_response) { + RTC_LOG(LS_ERROR) +@@ -575,23 +1026,23 @@ void BaseCapturerPipeWire::OnSessionRequestResponseSignal( + + void BaseCapturerPipeWire::SourcesRequest() { + GVariantBuilder builder; +- gchar* variant_string; ++ Scoped variant_string; + + g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT); + // We want to record monitor content. +- g_variant_builder_add(&builder, "{sv}", "types", +- g_variant_new_uint32(capture_source_type_)); ++ g_variant_builder_add( ++ &builder, "{sv}", "types", ++ g_variant_new_uint32(static_cast(capture_source_type_))); + // We don't want to allow selection of multiple sources. + g_variant_builder_add(&builder, "{sv}", "multiple", + g_variant_new_boolean(false)); + variant_string = g_strdup_printf("webrtc%d", g_random_int_range(0, G_MAXINT)); + g_variant_builder_add(&builder, "{sv}", "handle_token", +- g_variant_new_string(variant_string)); ++ g_variant_new_string(variant_string.get())); + +- sources_handle_ = PrepareSignalHandle(connection_, variant_string); ++ sources_handle_ = PrepareSignalHandle(connection_, variant_string.get()); + sources_request_signal_id_ = SetupRequestResponseSignal( + sources_handle_, OnSourcesRequestResponseSignal); +- g_free(variant_string); + + RTC_LOG(LS_INFO) << "Requesting sources from the screen cast session."; + g_dbus_proxy_call( +@@ -608,22 +1059,21 @@ void BaseCapturerPipeWire::OnSourcesRequested(GDBusProxy *proxy, + BaseCapturerPipeWire* that = static_cast(user_data); + RTC_DCHECK(that); + +- GError* error = nullptr; +- GVariant* variant = g_dbus_proxy_call_finish(proxy, result, &error); ++ Scoped error; ++ Scoped variant( ++ g_dbus_proxy_call_finish(proxy, result, error.receive())); + if (!variant) { +- if (g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ if (g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED)) + return; + RTC_LOG(LS_ERROR) << "Failed to request the sources: " << error->message; +- g_error_free(error); + that->portal_init_failed_ = true; + return; + } + + RTC_LOG(LS_INFO) << "Sources requested from the screen cast session."; + +- gchar* handle = nullptr; +- g_variant_get_child(variant, 0, "o", &handle); +- g_variant_unref(variant); ++ Scoped handle; ++ g_variant_get_child(variant.get(), 0, "o", handle.receive()); + if (!handle) { + RTC_LOG(LS_ERROR) << "Failed to initialize the screen cast session."; + if (that->sources_request_signal_id_) { +@@ -635,8 +1085,6 @@ void BaseCapturerPipeWire::OnSourcesRequested(GDBusProxy *proxy, + return; + } + +- g_free(handle); +- + RTC_LOG(LS_INFO) << "Subscribed to sources signal."; + } + +@@ -668,17 +1116,16 @@ void BaseCapturerPipeWire::OnSourcesRequestResponseSignal( + + void BaseCapturerPipeWire::StartRequest() { + GVariantBuilder builder; +- gchar* variant_string; ++ Scoped variant_string; + + g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT); + variant_string = g_strdup_printf("webrtc%d", g_random_int_range(0, G_MAXINT)); + g_variant_builder_add(&builder, "{sv}", "handle_token", +- g_variant_new_string(variant_string)); ++ g_variant_new_string(variant_string.get())); + +- start_handle_ = PrepareSignalHandle(connection_, variant_string); ++ start_handle_ = PrepareSignalHandle(connection_, variant_string.get()); + start_request_signal_id_ = + SetupRequestResponseSignal(start_handle_, OnStartRequestResponseSignal); +- g_free(variant_string); + + // "Identifier for the application window", this is Wayland, so not "x11:...". + const gchar parent_window[] = ""; +@@ -698,23 +1145,22 @@ void BaseCapturerPipeWire::OnStartRequested(GDBusProxy *proxy, + BaseCapturerPipeWire* that = static_cast(user_data); + RTC_DCHECK(that); + +- GError* error = nullptr; +- GVariant* variant = g_dbus_proxy_call_finish(proxy, result, &error); ++ Scoped error; ++ Scoped variant( ++ g_dbus_proxy_call_finish(proxy, result, error.receive())); + if (!variant) { +- if (g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ if (g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED)) + return; + RTC_LOG(LS_ERROR) << "Failed to start the screen cast session: " + << error->message; +- g_error_free(error); + that->portal_init_failed_ = true; + return; + } + + RTC_LOG(LS_INFO) << "Initializing the start of the screen cast session."; + +- gchar* handle = nullptr; +- g_variant_get_child(variant, 0, "o", &handle); +- g_variant_unref(variant); ++ Scoped handle; ++ g_variant_get_child(variant.get(), 0, "o", handle.receive()); + if (!handle) { + RTC_LOG(LS_ERROR) + << "Failed to initialize the start of the screen cast session."; +@@ -727,8 +1173,6 @@ void BaseCapturerPipeWire::OnStartRequested(GDBusProxy *proxy, + return; + } + +- g_free(handle); +- + RTC_LOG(LS_INFO) << "Subscribed to the start signal."; + } + +@@ -746,9 +1190,10 @@ void BaseCapturerPipeWire::OnStartRequestResponseSignal( + + RTC_LOG(LS_INFO) << "Start signal received."; + guint32 portal_response; +- GVariant* response_data; +- GVariantIter* iter = nullptr; +- g_variant_get(parameters, "(u@a{sv})", &portal_response, &response_data); ++ Scoped response_data; ++ Scoped iter; ++ g_variant_get(parameters, "(u@a{sv})", &portal_response, ++ response_data.receive()); + if (portal_response || !response_data) { + RTC_LOG(LS_ERROR) << "Failed to start the screen cast session."; + that->portal_init_failed_ = true; +@@ -758,28 +1203,28 @@ void BaseCapturerPipeWire::OnStartRequestResponseSignal( + // Array of PipeWire streams. See + // https://github.com/flatpak/xdg-desktop-portal/blob/master/data/org.freedesktop.portal.ScreenCast.xml + // documentation for . +- if (g_variant_lookup(response_data, "streams", "a(ua{sv})", &iter)) { +- GVariant* variant; ++ if (g_variant_lookup(response_data.get(), "streams", "a(ua{sv})", ++ iter.receive())) { ++ Scoped variant; + +- while (g_variant_iter_next(iter, "@(ua{sv})", &variant)) { ++ while (g_variant_iter_next(iter.get(), "@(ua{sv})", variant.receive())) { + guint32 stream_id; +- gint32 width; +- gint32 height; +- GVariant* options; ++ guint32 type; ++ Scoped options; + +- g_variant_get(variant, "(u@a{sv})", &stream_id, &options); +- RTC_DCHECK(options != nullptr); ++ g_variant_get(variant.get(), "(u@a{sv})", &stream_id, options.receive()); ++ RTC_DCHECK(options.get()); + +- g_variant_lookup(options, "size", "(ii)", &width, &height); ++ if (g_variant_lookup(options.get(), "source_type", "u", &type)) { ++ that->capture_source_type_ = ++ static_cast(type); ++ } + +- that->desktop_size_.set(width, height); ++ that->pw_stream_node_id_ = stream_id; + +- g_variant_unref(options); +- g_variant_unref(variant); ++ break; + } + } +- g_variant_iter_free(iter); +- g_variant_unref(response_data); + + that->OpenPipeWireRemote(); + } +@@ -807,35 +1252,30 @@ void BaseCapturerPipeWire::OnOpenPipeWireRemoteRequested( + BaseCapturerPipeWire* that = static_cast(user_data); + RTC_DCHECK(that); + +- GError* error = nullptr; +- GUnixFDList* outlist = nullptr; +- GVariant* variant = g_dbus_proxy_call_with_unix_fd_list_finish( +- proxy, &outlist, result, &error); ++ Scoped error; ++ Scoped outlist; ++ Scoped variant(g_dbus_proxy_call_with_unix_fd_list_finish( ++ proxy, outlist.receive(), result, error.receive())); + if (!variant) { +- if (g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ if (g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED)) + return; + RTC_LOG(LS_ERROR) << "Failed to open the PipeWire remote: " + << error->message; +- g_error_free(error); + that->portal_init_failed_ = true; + return; + } + + gint32 index; +- g_variant_get(variant, "(h)", &index); ++ g_variant_get(variant.get(), "(h)", &index); + +- if ((that->pw_fd_ = g_unix_fd_list_get(outlist, index, &error)) == -1) { ++ if ((that->pw_fd_ = ++ g_unix_fd_list_get(outlist.get(), index, error.receive())) == -1) { + RTC_LOG(LS_ERROR) << "Failed to get file descriptor from the list: " + << error->message; +- g_error_free(error); +- g_variant_unref(variant); + that->portal_init_failed_ = true; + return; + } + +- g_variant_unref(variant); +- g_object_unref(outlist); +- + that->InitPipeWire(); + } + +@@ -854,15 +1294,18 @@ void BaseCapturerPipeWire::CaptureFrame() { + return; + } + ++ webrtc::MutexLock lock(¤t_frame_lock_); + if (!current_frame_) { + callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr); + return; + } + +- std::unique_ptr result(new BasicDesktopFrame(desktop_size_)); ++ DesktopSize frame_size = video_size_; ++ ++ std::unique_ptr result(new BasicDesktopFrame(frame_size)); + result->CopyPixelsFrom( +- current_frame_, (desktop_size_.width() * kBytesPerPixel), +- DesktopRect::MakeWH(desktop_size_.width(), desktop_size_.height())); ++ current_frame_.get(), (frame_size.width() * kBytesPerPixel), ++ DesktopRect::MakeWH(frame_size.width(), frame_size.height())); + if (!result) { + callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr); + return; +@@ -887,4 +1330,11 @@ bool BaseCapturerPipeWire::SelectSource(SourceId id) { + return true; + } + ++// static ++std::unique_ptr BaseCapturerPipeWire::CreateRawCapturer( ++ const DesktopCaptureOptions& options) { ++ return std::make_unique( ++ BaseCapturerPipeWire::CaptureSourceType::kAny); ++} ++ + } // namespace webrtc +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h b/chromium/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h +index f28d7a558bc..75d20dbf1db 100644 +--- a/chromium/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h ++++ b/chromium/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h +@@ -10,18 +10,23 @@ + + #ifndef MODULES_DESKTOP_CAPTURE_LINUX_BASE_CAPTURER_PIPEWIRE_H_ + #define MODULES_DESKTOP_CAPTURE_LINUX_BASE_CAPTURER_PIPEWIRE_H_ +- + #include + #define typeof __typeof__ + #include + #include ++#if PW_CHECK_VERSION(0, 3, 0) ++#include ++#endif + ++#include "absl/types/optional.h" + #include "modules/desktop_capture/desktop_capture_options.h" + #include "modules/desktop_capture/desktop_capturer.h" + #include "rtc_base/constructor_magic.h" ++#include "rtc_base/synchronization/mutex.h" + + namespace webrtc { + ++#if !PW_CHECK_VERSION(0, 3, 0) + class PipeWireType { + public: + spa_type_media_type media_type; +@@ -29,14 +34,25 @@ class PipeWireType { + spa_type_format_video format_video; + spa_type_video_format video_format; + }; ++#endif + + class BaseCapturerPipeWire : public DesktopCapturer { + public: +- enum CaptureSourceType { Screen = 1, Window }; ++ // Values are set based on source type property in ++ // xdg-desktop-portal/screencast ++ // https://github.com/flatpak/xdg-desktop-portal/blob/master/data/org.freedesktop.portal.ScreenCast.xml ++ enum class CaptureSourceType : uint32_t { ++ kScreen = 0b01, ++ kWindow = 0b10, ++ kAny = 0b11 ++ }; + + explicit BaseCapturerPipeWire(CaptureSourceType source_type); + ~BaseCapturerPipeWire() override; + ++ static std::unique_ptr CreateRawCapturer( ++ const DesktopCaptureOptions& options); ++ + // DesktopCapturer interface. + void Start(Callback* delegate) override; + void CaptureFrame() override; +@@ -45,6 +61,21 @@ class BaseCapturerPipeWire : public DesktopCapturer { + + private: + // PipeWire types --> ++#if PW_CHECK_VERSION(0, 3, 0) ++ struct pw_context* pw_context_ = nullptr; ++ struct pw_core* pw_core_ = nullptr; ++ struct pw_stream* pw_stream_ = nullptr; ++ struct pw_thread_loop* pw_main_loop_ = nullptr; ++ ++ spa_hook spa_core_listener_; ++ spa_hook spa_stream_listener_; ++ ++ // event handlers ++ pw_core_events pw_core_events_ = {}; ++ pw_stream_events pw_stream_events_ = {}; ++ ++ struct spa_video_info_raw spa_video_format_; ++#else + pw_core* pw_core_ = nullptr; + pw_type* pw_core_type_ = nullptr; + pw_stream* pw_stream_ = nullptr; +@@ -60,11 +91,13 @@ class BaseCapturerPipeWire : public DesktopCapturer { + pw_remote_events pw_remote_events_ = {}; + + spa_video_info_raw* spa_video_format_ = nullptr; ++#endif + ++ guint32 pw_stream_node_id_ = 0; + gint32 pw_fd_ = -1; + + CaptureSourceType capture_source_type_ = +- BaseCapturerPipeWire::CaptureSourceType::Screen; ++ BaseCapturerPipeWire::CaptureSourceType::kScreen; + + // <-- end of PipeWire types + +@@ -79,10 +112,12 @@ class BaseCapturerPipeWire : public DesktopCapturer { + guint sources_request_signal_id_ = 0; + guint start_request_signal_id_ = 0; + ++ DesktopSize video_size_; + DesktopSize desktop_size_ = {}; + DesktopCaptureOptions options_ = {}; + +- uint8_t* current_frame_ = nullptr; ++ webrtc::Mutex current_frame_lock_; ++ std::unique_ptr current_frame_; + Callback* callback_ = nullptr; + + bool portal_init_failed_ = false; +@@ -91,21 +126,32 @@ class BaseCapturerPipeWire : public DesktopCapturer { + void InitPipeWire(); + void InitPipeWireTypes(); + +- void CreateReceivingStream(); ++ pw_stream* CreateReceivingStream(); + void HandleBuffer(pw_buffer* buffer); + + void ConvertRGBxToBGRx(uint8_t* frame, uint32_t size); + ++#if PW_CHECK_VERSION(0, 3, 0) ++ static void OnCoreError(void* data, ++ uint32_t id, ++ int seq, ++ int res, ++ const char* message); ++ static void OnStreamParamChanged(void* data, ++ uint32_t id, ++ const struct spa_pod* format); ++#else + static void OnStateChanged(void* data, + pw_remote_state old_state, + pw_remote_state state, + const char* error); ++ static void OnStreamFormatChanged(void* data, const struct spa_pod* format); ++#endif + static void OnStreamStateChanged(void* data, + pw_stream_state old_state, + pw_stream_state state, + const char* error_message); + +- static void OnStreamFormatChanged(void* data, const struct spa_pod* format); + static void OnStreamProcess(void* data); + static void OnNewBuffer(void* data, uint32_t id); + +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/linux/pipewire.sigs b/chromium/third_party/webrtc/modules/desktop_capture/linux/pipewire.sigs +deleted file mode 100644 +index 3e21e9dc07c..00000000000 +--- a/chromium/third_party/webrtc/modules/desktop_capture/linux/pipewire.sigs ++++ /dev/null +@@ -1,44 +0,0 @@ +-// Copyright 2018 The WebRTC project authors. All rights reserved. +-// Use of this source code is governed by a BSD-style license that can be +-// found in the LICENSE file. +- +-//------------------------------------------------ +-// Functions from PipeWire used in capturer code. +-//------------------------------------------------ +- +-// core.h +-void pw_core_destroy(pw_core *core); +-pw_type *pw_core_get_type(pw_core *core); +-pw_core * pw_core_new(pw_loop *main_loop, pw_properties *props); +- +-// loop.h +-void pw_loop_destroy(pw_loop *loop); +-pw_loop * pw_loop_new(pw_properties *properties); +- +-// pipewire.h +-void pw_init(int *argc, char **argv[]); +- +-// properties.h +-pw_properties * pw_properties_new_string(const char *args); +- +-// remote.h +-void pw_remote_add_listener(pw_remote *remote, spa_hook *listener, const pw_remote_events *events, void *data); +-int pw_remote_connect_fd(pw_remote *remote, int fd); +-void pw_remote_destroy(pw_remote *remote); +-pw_remote * pw_remote_new(pw_core *core, pw_properties *properties, size_t user_data_size); +- +-// stream.h +-void pw_stream_add_listener(pw_stream *stream, spa_hook *listener, const pw_stream_events *events, void *data); +-int pw_stream_connect(pw_stream *stream, enum pw_direction direction, const char *port_path, enum pw_stream_flags flags, const spa_pod **params, uint32_t n_params); +-pw_buffer *pw_stream_dequeue_buffer(pw_stream *stream); +-void pw_stream_destroy(pw_stream *stream); +-void pw_stream_finish_format(pw_stream *stream, int res, const spa_pod **params, uint32_t n_params); +-pw_stream * pw_stream_new(pw_remote *remote, const char *name, pw_properties *props); +-int pw_stream_queue_buffer(pw_stream *stream, pw_buffer *buffer); +-int pw_stream_set_active(pw_stream *stream, bool active); +- +-// thread-loop.h +-void pw_thread_loop_destroy(pw_thread_loop *loop); +-pw_thread_loop * pw_thread_loop_new(pw_loop *loop, const char *name); +-int pw_thread_loop_start(pw_thread_loop *loop); +-void pw_thread_loop_stop(pw_thread_loop *loop); +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc b/chromium/third_party/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc +deleted file mode 100644 +index fe672140cca..00000000000 +--- a/chromium/third_party/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc ++++ /dev/null +@@ -1,29 +0,0 @@ +-/* +- * Copyright 2018 The WebRTC project authors. All Rights Reserved. +- * +- * Use of this source code is governed by a BSD-style license +- * that can be found in the LICENSE file in the root of the source +- * tree. An additional intellectual property rights grant can be found +- * in the file PATENTS. All contributing project authors may +- * be found in the AUTHORS file in the root of the source tree. +- */ +- +-#include "modules/desktop_capture/linux/screen_capturer_pipewire.h" +- +-#include +- +- +-namespace webrtc { +- +-ScreenCapturerPipeWire::ScreenCapturerPipeWire() +- : BaseCapturerPipeWire(BaseCapturerPipeWire::CaptureSourceType::Screen) {} +-ScreenCapturerPipeWire::~ScreenCapturerPipeWire() {} +- +-// static +-std::unique_ptr +-ScreenCapturerPipeWire::CreateRawScreenCapturer( +- const DesktopCaptureOptions& options) { +- return std::make_unique(); +-} +- +-} // namespace webrtc +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.h b/chromium/third_party/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.h +deleted file mode 100644 +index 66dcd680e06..00000000000 +--- a/chromium/third_party/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.h ++++ /dev/null +@@ -1,33 +0,0 @@ +-/* +- * Copyright 2018 The WebRTC project authors. All Rights Reserved. +- * +- * Use of this source code is governed by a BSD-style license +- * that can be found in the LICENSE file in the root of the source +- * tree. An additional intellectual property rights grant can be found +- * in the file PATENTS. All contributing project authors may +- * be found in the AUTHORS file in the root of the source tree. +- */ +- +-#ifndef MODULES_DESKTOP_CAPTURE_LINUX_SCREEN_CAPTURER_PIPEWIRE_H_ +-#define MODULES_DESKTOP_CAPTURE_LINUX_SCREEN_CAPTURER_PIPEWIRE_H_ +- +-#include +- +-#include "modules/desktop_capture/linux/base_capturer_pipewire.h" +- +-namespace webrtc { +- +-class ScreenCapturerPipeWire : public BaseCapturerPipeWire { +- public: +- ScreenCapturerPipeWire(); +- ~ScreenCapturerPipeWire() override; +- +- static std::unique_ptr CreateRawScreenCapturer( +- const DesktopCaptureOptions& options); +- +- RTC_DISALLOW_COPY_AND_ASSIGN(ScreenCapturerPipeWire); +-}; +- +-} // namespace webrtc +- +-#endif // MODULES_DESKTOP_CAPTURE_LINUX_SCREEN_CAPTURER_PIPEWIRE_H_ +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc b/chromium/third_party/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc +deleted file mode 100644 +index b4559156dce..00000000000 +--- a/chromium/third_party/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc ++++ /dev/null +@@ -1,29 +0,0 @@ +-/* +- * Copyright 2018 The WebRTC project authors. All Rights Reserved. +- * +- * Use of this source code is governed by a BSD-style license +- * that can be found in the LICENSE file in the root of the source +- * tree. An additional intellectual property rights grant can be found +- * in the file PATENTS. All contributing project authors may +- * be found in the AUTHORS file in the root of the source tree. +- */ +- +-#include "modules/desktop_capture/linux/window_capturer_pipewire.h" +- +-#include +- +- +-namespace webrtc { +- +-WindowCapturerPipeWire::WindowCapturerPipeWire() +- : BaseCapturerPipeWire(BaseCapturerPipeWire::CaptureSourceType::Window) {} +-WindowCapturerPipeWire::~WindowCapturerPipeWire() {} +- +-// static +-std::unique_ptr +-WindowCapturerPipeWire::CreateRawWindowCapturer( +- const DesktopCaptureOptions& options) { +- return std::make_unique(); +-} +- +-} // namespace webrtc +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.h b/chromium/third_party/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.h +deleted file mode 100644 +index 7f184ef2999..00000000000 +--- a/chromium/third_party/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.h ++++ /dev/null +@@ -1,33 +0,0 @@ +-/* +- * Copyright 2018 The WebRTC project authors. All Rights Reserved. +- * +- * Use of this source code is governed by a BSD-style license +- * that can be found in the LICENSE file in the root of the source +- * tree. An additional intellectual property rights grant can be found +- * in the file PATENTS. All contributing project authors may +- * be found in the AUTHORS file in the root of the source tree. +- */ +- +-#ifndef MODULES_DESKTOP_CAPTURE_LINUX_WINDOW_CAPTURER_PIPEWIRE_H_ +-#define MODULES_DESKTOP_CAPTURE_LINUX_WINDOW_CAPTURER_PIPEWIRE_H_ +- +-#include +- +-#include "modules/desktop_capture/linux/base_capturer_pipewire.h" +- +-namespace webrtc { +- +-class WindowCapturerPipeWire : public BaseCapturerPipeWire { +- public: +- WindowCapturerPipeWire(); +- ~WindowCapturerPipeWire() override; +- +- static std::unique_ptr CreateRawWindowCapturer( +- const DesktopCaptureOptions& options); +- +- RTC_DISALLOW_COPY_AND_ASSIGN(WindowCapturerPipeWire); +-}; +- +-} // namespace webrtc +- +-#endif // MODULES_DESKTOP_CAPTURE_LINUX_WINDOW_CAPTURER_PIPEWIRE_H_ +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/screen_capturer_linux.cc b/chromium/third_party/webrtc/modules/desktop_capture/screen_capturer_linux.cc +index 82dbae48137..ed48b7d6d59 100644 +--- a/chromium/third_party/webrtc/modules/desktop_capture/screen_capturer_linux.cc ++++ b/chromium/third_party/webrtc/modules/desktop_capture/screen_capturer_linux.cc +@@ -14,7 +14,7 @@ + #include "modules/desktop_capture/desktop_capturer.h" + + #if defined(WEBRTC_USE_PIPEWIRE) +-#include "modules/desktop_capture/linux/screen_capturer_pipewire.h" ++#include "modules/desktop_capture/linux/base_capturer_pipewire.h" + #endif // defined(WEBRTC_USE_PIPEWIRE) + + #if defined(WEBRTC_USE_X11) +@@ -28,7 +28,7 @@ std::unique_ptr DesktopCapturer::CreateRawScreenCapturer( + const DesktopCaptureOptions& options) { + #if defined(WEBRTC_USE_PIPEWIRE) + if (options.allow_pipewire() && DesktopCapturer::IsRunningUnderWayland()) { +- return ScreenCapturerPipeWire::CreateRawScreenCapturer(options); ++ return BaseCapturerPipeWire::CreateRawCapturer(options); + } + #endif // defined(WEBRTC_USE_PIPEWIRE) + +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/window_capturer_linux.cc b/chromium/third_party/webrtc/modules/desktop_capture/window_capturer_linux.cc +index 41dbf836b03..2b142ae3b92 100644 +--- a/chromium/third_party/webrtc/modules/desktop_capture/window_capturer_linux.cc ++++ b/chromium/third_party/webrtc/modules/desktop_capture/window_capturer_linux.cc +@@ -14,7 +14,7 @@ + #include "modules/desktop_capture/desktop_capturer.h" + + #if defined(WEBRTC_USE_PIPEWIRE) +-#include "modules/desktop_capture/linux/window_capturer_pipewire.h" ++#include "modules/desktop_capture/linux/base_capturer_pipewire.h" + #endif // defined(WEBRTC_USE_PIPEWIRE) + + #if defined(WEBRTC_USE_X11) +@@ -28,7 +28,7 @@ std::unique_ptr DesktopCapturer::CreateRawWindowCapturer( + const DesktopCaptureOptions& options) { + #if defined(WEBRTC_USE_PIPEWIRE) + if (options.allow_pipewire() && DesktopCapturer::IsRunningUnderWayland()) { +- return WindowCapturerPipeWire::CreateRawWindowCapturer(options); ++ return BaseCapturerPipeWire::CreateRawCapturer(options); + } + #endif // defined(WEBRTC_USE_PIPEWIRE) + +diff --git a/chromium/third_party/webrtc/webrtc.gni b/chromium/third_party/webrtc/webrtc.gni +index ca8acdbf259..505c975cece 100644 +--- a/chromium/third_party/webrtc/webrtc.gni ++++ b/chromium/third_party/webrtc/webrtc.gni +@@ -117,6 +117,10 @@ declare_args() { + # Set this to link PipeWire directly instead of using the dlopen. + rtc_link_pipewire = false + ++ # Set this to use certain PipeWire version ++ # Currently we support PipeWire 0.2 (default) and PipeWire 0.3 ++ rtc_pipewire_version = "0.3" ++ + # Enable to use the Mozilla internal settings. + build_with_mozilla = false + +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/linux/pipewire02.sigs b/chromium/third_party/webrtc/modules/desktop_capture/linux/pipewire02.sigs +new file mode 100644 +index 00000000000..5ac3d1d22b8 +--- /dev/null ++++ b/chromium/third_party/webrtc/modules/desktop_capture/linux/pipewire02.sigs +@@ -0,0 +1,47 @@ ++// Copyright 2018 The WebRTC project authors. All rights reserved. ++// Use of this source code is governed by a BSD-style license that can be ++// found in the LICENSE file. ++ ++//------------------------------------------------ ++// Functions from PipeWire used in capturer code. ++//------------------------------------------------ ++ ++// core.h ++void pw_core_destroy(pw_core *core); ++pw_type *pw_core_get_type(pw_core *core); ++pw_core * pw_core_new(pw_loop *main_loop, pw_properties *props); ++ ++// loop.h ++void pw_loop_destroy(pw_loop *loop); ++pw_loop * pw_loop_new(pw_properties *properties); ++ ++// pipewire.h ++void pw_init(int *argc, char **argv[]); ++ ++// properties.h ++pw_properties * pw_properties_new_string(const char *args); ++ ++// remote.h ++void pw_remote_add_listener(pw_remote *remote, spa_hook *listener, const pw_remote_events *events, void *data); ++int pw_remote_connect_fd(pw_remote *remote, int fd); ++void pw_remote_destroy(pw_remote *remote); ++pw_remote * pw_remote_new(pw_core *core, pw_properties *properties, size_t user_data_size); ++enum pw_remote_state pw_remote_get_state(pw_remote *remote, const char **error); ++ ++// stream.h ++void pw_stream_add_listener(pw_stream *stream, spa_hook *listener, const pw_stream_events *events, void *data); ++int pw_stream_connect(pw_stream *stream, enum pw_direction direction, const char *port_path, enum pw_stream_flags flags, const spa_pod **params, uint32_t n_params); ++pw_buffer *pw_stream_dequeue_buffer(pw_stream *stream); ++void pw_stream_destroy(pw_stream *stream); ++void pw_stream_finish_format(pw_stream *stream, int res, const spa_pod **params, uint32_t n_params); ++pw_stream * pw_stream_new(pw_remote *remote, const char *name, pw_properties *props); ++int pw_stream_queue_buffer(pw_stream *stream, pw_buffer *buffer); ++int pw_stream_set_active(pw_stream *stream, bool active); ++ ++// thread-loop.h ++void pw_thread_loop_destroy(pw_thread_loop *loop); ++pw_thread_loop * pw_thread_loop_new(pw_loop *loop, const char *name); ++int pw_thread_loop_start(pw_thread_loop *loop); ++void pw_thread_loop_stop(pw_thread_loop *loop); ++void pw_thread_loop_lock(struct pw_thread_loop *loop); ++void pw_thread_loop_unlock(struct pw_thread_loop *loop); +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/linux/pipewire03.sigs b/chromium/third_party/webrtc/modules/desktop_capture/linux/pipewire03.sigs +new file mode 100644 +index 00000000000..78d241f40c6 +--- /dev/null ++++ b/chromium/third_party/webrtc/modules/desktop_capture/linux/pipewire03.sigs +@@ -0,0 +1,46 @@ ++// Copyright 2018 The WebRTC project authors. All rights reserved. ++// Use of this source code is governed by a BSD-style license that can be ++// found in the LICENSE file. ++ ++//------------------------------------------------ ++// Functions from PipeWire used in capturer code. ++//------------------------------------------------ ++ ++// core.h ++int pw_core_disconnect(pw_core *core); ++ ++// loop.h ++void pw_loop_destroy(pw_loop *loop); ++pw_loop * pw_loop_new(const spa_dict *props); ++ ++ ++// pipewire.h ++void pw_init(int *argc, char **argv[]); ++ ++// properties.h ++pw_properties * pw_properties_new_string(const char *args); ++ ++// stream.h ++void pw_stream_add_listener(pw_stream *stream, spa_hook *listener, const pw_stream_events *events, void *data); ++int pw_stream_connect(pw_stream *stream, enum pw_direction direction, uint32_t target_id, enum pw_stream_flags flags, const spa_pod **params, uint32_t n_params); ++pw_buffer *pw_stream_dequeue_buffer(pw_stream *stream); ++void pw_stream_destroy(pw_stream *stream); ++pw_stream * pw_stream_new(pw_core *core, const char *name, pw_properties *props); ++int pw_stream_queue_buffer(pw_stream *stream, pw_buffer *buffer); ++int pw_stream_set_active(pw_stream *stream, bool active); ++int pw_stream_update_params(pw_stream *stream, const spa_pod **params, uint32_t n_params); ++ ++// thread-loop.h ++void pw_thread_loop_destroy(pw_thread_loop *loop); ++pw_thread_loop * pw_thread_loop_new(const char *name, const spa_dict *props); ++int pw_thread_loop_start(pw_thread_loop *loop); ++void pw_thread_loop_stop(pw_thread_loop *loop); ++void pw_thread_loop_lock(pw_thread_loop *loop); ++void pw_thread_loop_unlock(pw_thread_loop *loop); ++pw_loop * pw_thread_loop_get_loop(pw_thread_loop *loop); ++ ++ ++// context.h ++void pw_context_destroy(pw_context *context); ++pw_context *pw_context_new(pw_loop *main_loop, pw_properties *props, size_t user_data_size); ++pw_core * pw_context_connect(pw_context *context, pw_properties *properties, size_t user_data_size); diff --git a/x86_64/extra/qt5-webengine/qt5-webengine-python3.patch b/x86_64/extra/qt5-webengine/qt5-webengine-python3.patch new file mode 100644 index 0000000..0b75727 --- /dev/null +++ b/x86_64/extra/qt5-webengine/qt5-webengine-python3.patch @@ -0,0 +1,161 @@ +diff --git a/configure.pri b/configure.pri +index 8705ad93..6723bffe 100644 +--- a/configure.pri ++++ b/configure.pri +@@ -7,20 +7,7 @@ QTWEBENGINE_SOURCE_TREE = $$PWD + equals(QMAKE_HOST.os, Windows): EXE_SUFFIX = .exe + + defineTest(isPythonVersionSupported) { +- python = $$system_quote($$system_path($$1)) +- python_version = $$system('$$python -c "import sys; print(sys.version_info[0:3])"') +- python_version ~= s/[()]//g +- python_version = $$split(python_version, ',') +- python_major_version = $$first(python_version) +- greaterThan(python_major_version, 2) { +- qtLog("Python version 3 is not supported by Chromium.") +- return(false) +- } +- python_minor_version = $$member(python_version, 1) +- python_patch_version = $$member(python_version, 2) +- greaterThan(python_major_version, 1): greaterThan(python_minor_version, 6): greaterThan(python_patch_version, 4): return(true) +- qtLog("Unsupported python version: $${python_major_version}.$${python_minor_version}.$${python_patch_version}.") +- return(false) ++ return(true) + } + + defineTest(qtConfTest_detectJumboBuild) { +@@ -52,10 +48,10 @@ defineTest(qtConfReport_jumboBuild) { + qtConfReportPadded($${1}, $$mergeLimit) + } + +-defineTest(qtConfTest_detectPython2) { +- python = $$qtConfFindInPath("python2$$EXE_SUFFIX") ++defineTest(qtConfTest_detectPython) { ++ python = $$qtConfFindInPath("python$$EXE_SUFFIX") + isEmpty(python) { +- qtLog("'python2$$EXE_SUFFIX' not found in PATH. Checking for 'python$$EXE_SUFFIX'.") ++ qtLog("'python$$EXE_SUFFIX' not found in PATH. Checking for 'python$$EXE_SUFFIX'.") + python = $$qtConfFindInPath("python$$EXE_SUFFIX") + } + isEmpty(python) { +@@ -63,11 +59,11 @@ defineTest(qtConfTest_detectPython2) { + return(false) + } + !isPythonVersionSupported($$python) { +- qtLog("A suitable Python 2 executable could not be located.") ++ qtLog("A suitable Python executable could not be located.") + return(false) + } + +- # Make tests.python2.location available in configure.json. ++ # Make tests.python.location available in configure.json. + $${1}.location = $$clean_path($$python) + export($${1}.location) + $${1}.cache += location +diff --git a/mkspecs/features/functions.prf b/mkspecs/features/functions.prf +index 2750d707..9fda13d0 100644 +--- a/mkspecs/features/functions.prf ++++ b/mkspecs/features/functions.prf +@@ -39,11 +39,11 @@ defineReplace(which) { + + # Returns the unquoted path to the python executable. + defineReplace(pythonPath) { +- isEmpty(QMAKE_PYTHON2) { ++ isEmpty(QMAKE_PYTHON) { + # Fallback for building QtWebEngine with Qt < 5.8 +- QMAKE_PYTHON2 = python ++ QMAKE_PYTHON = python + } +- return($$QMAKE_PYTHON2) ++ return($$QMAKE_PYTHON) + } + + # Returns the python executable for use with shell / make targets. +diff --git a/src/buildtools/config/support.pri b/src/buildtools/config/support.pri +index e7f869a1..1bf2c5d7 100644 +--- a/src/buildtools/config/support.pri ++++ b/src/buildtools/config/support.pri +@@ -21,7 +21,7 @@ defineReplace(qtwebengine_checkWebEngineCoreError) { + !qtwebengine_checkForGperf(QtWebEngine):return(false) + !qtwebengine_checkForBison(QtWebEngine):return(false) + !qtwebengine_checkForFlex(QtWebEngine):return(false) +- !qtwebengine_checkForPython2(QtWebEngine):return(false) ++ !qtwebengine_checkForPython(QtWebEngine):return(false) + !qtwebengine_checkForNodejs(QtWebEngine):return(false) + !qtwebengine_checkForSanitizer(QtWebEngine):return(false) + linux:!qtwebengine_checkForPkgCfg(QtWebEngine):return(false) +@@ -51,7 +51,7 @@ defineReplace(qtwebengine_checkPdfError) { + !qtwebengine_checkForGperf(QtPdf):return(false) + !qtwebengine_checkForBison(QtPdf):return(false) + !qtwebengine_checkForFlex(QtPdf):return(false) +- !qtwebengine_checkForPython2(QtPdf):return(false) ++ !qtwebengine_checkForPython(QtPdf):return(false) + !qtwebengine_checkForSanitizer(QtPdf):return(false) + linux:!qtwebengine_checkForPkgCfg(QtPdf):return(false) + linux:!qtwebengine_checkForHostPkgCfg(QtPdf):return(false) +@@ -143,10 +143,10 @@ defineTest(qtwebengine_checkForFlex) { + return(true) + } + +-defineTest(qtwebengine_checkForPython2) { ++defineTest(qtwebengine_checkForPython) { + module = $$1 +- !qtConfig(webengine-python2) { +- qtwebengine_skipBuild("Python version 2 (2.7.5 or later) is required to build $${module}.") ++ !qtConfig(webengine-python) { ++ qtwebengine_skipBuild("Python is required to build $${module}.") + return(false) + } + return(true) +diff --git a/src/buildtools/configure.json b/src/buildtools/configure.json +index 88d1790c..032aa665 100644 +--- a/src/buildtools/configure.json ++++ b/src/buildtools/configure.json +@@ -295,9 +295,9 @@ + "label": "system ninja", + "type": "detectNinja" + }, +- "webengine-python2": { +- "label": "python2", +- "type": "detectPython2", ++ "webengine-python": { ++ "label": "python", ++ "type": "detectPython", + "log": "location" + }, + "webengine-winversion": { +@@ -374,7 +374,7 @@ + && features.webengine-gperf + && features.webengine-bison + && features.webengine-flex +- && features.webengine-python2 ++ && features.webengine-python + && features.webengine-nodejs + && (!config.sanitizer || features.webengine-sanitizer) + && (!config.linux || features.pkg-config) +@@ -400,7 +400,7 @@ + && features.webengine-gperf + && features.webengine-bison + && features.webengine-flex +- && features.webengine-python2 ++ && features.webengine-python + && (!config.sanitizer || features.webengine-sanitizer) + && (!config.linux || features.pkg-config) + && (!config.linux || features.webengine-host-pkg-config) +@@ -423,12 +423,12 @@ + "autoDetect": "features.private_tests", + "output": [ "privateFeature" ] + }, +- "webengine-python2": { +- "label": "python2", +- "condition": "tests.webengine-python2", ++ "webengine-python": { ++ "label": "python", ++ "condition": "tests.webengine-python", + "output": [ + "privateFeature", +- { "type": "varAssign", "name": "QMAKE_PYTHON2", "value": "tests.webengine-python2.location" } ++ { "type": "varAssign", "name": "QMAKE_PYTHON", "value": "tests.webengine-python.location" } + ] + }, + "webengine-gperf": { diff --git a/x86_64/extra/qt5-webkit/PKGBUILD b/x86_64/extra/qt5-webkit/PKGBUILD new file mode 100644 index 0000000..c64f28d --- /dev/null +++ b/x86_64/extra/qt5-webkit/PKGBUILD @@ -0,0 +1,44 @@ +pkgname=qt5-webkit +rname=qtwebkit +pkgver=5.212.0 +rver=$pkgver-alpha4 +pkgrel=2 +arch=('x86_64') +depends=(qt5 libwebp libxslt libxcomposite gst-plugins-base woff2 hyphen) +makedepends=(cmake ruby3 gperf python3 qt5) +source=(https://github.com/qtwebkit/qtwebkit/releases/download/qtwebkit-$rver/qtwebkit-$rver.tar.xz + icu68.patch + glib-2.68.patch + qt5-webkit-python-3.9.patch::"https://github.com/qtwebkit/qtwebkit/commit/78360c01.patch" + qt5-webkit-bison-3.7.patch::"https://github.com/qtwebkit/qtwebkit/commit/d92b11fe.patch") + +prepare() { + cd $rname-$rver + + patch -p0 -i ../icu68.patch # Fix build with ICU 68.x + patch -p1 -i ../glib-2.68.patch # https://github.com/qtwebkit/qtwebkit/issues/1057 + patch -p1 -i ../qt5-webkit-python-3.9.patch # Fix build with python 3.9 + patch -p1 -i ../qt5-webkit-bison-3.7.patch # Fix build with bison 3.7 +} + +build() { + cmake \ + -B build \ + -S $rname-$rver \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D PORT=Qt \ + -D ENABLE_TOOLS=OFF \ + -D CMAKE_CXX_FLAGS="-w" \ + -Wno-dev + + cmake --build build +} + +package() { + DESTDIR=$pkgdir cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/extra/qt5-webkit/glib-2.68.patch b/x86_64/extra/qt5-webkit/glib-2.68.patch new file mode 100644 index 0000000..3df6078 --- /dev/null +++ b/x86_64/extra/qt5-webkit/glib-2.68.patch @@ -0,0 +1,26 @@ +From 5b698ba3faffd4e198a45be9fe74f53307395e4b Mon Sep 17 00:00:00 2001 +From: Fabian Vogt +Date: Wed, 7 Apr 2021 13:38:09 +0200 +Subject: [PATCH] Remove invalid g_object declarations to fix build with glib + >= 2.68 + +g_object_ref_sink is defined as a macro meanwhile and so the build fails. +Just remove the declarations, glib.h is included anyway. +--- + Source/WTF/wtf/glib/GRefPtr.h | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/Source/WTF/wtf/glib/GRefPtr.h b/Source/WTF/wtf/glib/GRefPtr.h +index 06133d82cb35..d9a1d2f145f5 100644 +--- a/Source/WTF/wtf/glib/GRefPtr.h ++++ b/Source/WTF/wtf/glib/GRefPtr.h +@@ -29,9 +29,6 @@ + #include + #include + +-extern "C" void g_object_unref(gpointer); +-extern "C" gpointer g_object_ref_sink(gpointer); +- + namespace WTF { + + enum GRefPtrAdoptType { GRefPtrAdopt }; diff --git a/x86_64/extra/qt5-webkit/icu68.patch b/x86_64/extra/qt5-webkit/icu68.patch new file mode 100644 index 0000000..25f094d --- /dev/null +++ b/x86_64/extra/qt5-webkit/icu68.patch @@ -0,0 +1,170 @@ +Regressed by https://github.com/unicode-org/icu/commit/c3fe7e09d844 + +In file included from Source/WebCore/platform/text/TextAllInOne.cpp:31: +Source/WebCore/platform/text/TextCodecICU.cpp:311:42: error: use of undeclared identifier 'TRUE' + ucnv_setFallback(m_converterICU, TRUE); + ^ +In file included from Source/WebCore/platform/text/TextAllInOne.cpp:40: +In file included from Source/WebCore/platform/text/icu/UTextProvider.cpp:27: +Source/WebCore/platform/text/icu/UTextProvider.h:83:28: error: use of undeclared identifier 'TRUE' + isAccessible = TRUE; + ^ +Source/WebCore/platform/text/icu/UTextProvider.h:88:28: error: use of undeclared identifier 'FALSE' + isAccessible = FALSE; + ^ +Source/WebCore/platform/text/icu/UTextProvider.h:97:28: error: use of undeclared identifier 'TRUE' + isAccessible = TRUE; + ^ +Source/WebCore/platform/text/icu/UTextProvider.h:102:28: error: use of undeclared identifier 'FALSE' + isAccessible = FALSE; + ^ +In file included from Source/WebCore/platform/text/TextAllInOne.cpp:41: +Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp:103:20: error: use of undeclared identifier 'TRUE' + return TRUE; + ^ +Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp:108:20: error: use of undeclared identifier 'FALSE' + return FALSE; + ^ +Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp:114:20: error: use of undeclared identifier 'TRUE' + return TRUE; + ^ +Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp:119:20: error: use of undeclared identifier 'FALSE' + return FALSE; + ^ +Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp:147:12: error: use of undeclared identifier 'TRUE' + return TRUE; + ^ +Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp:339:16: error: use of undeclared identifier 'FALSE' + return FALSE; + ^ +Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp:359:12: error: use of undeclared identifier 'TRUE' + return TRUE; + ^ +In file included from Source/WebCore/platform/text/TextAllInOne.cpp:42: +Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp:128:16: error: use of undeclared identifier 'FALSE' + return FALSE; + ^ +Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp:148:12: error: use of undeclared identifier 'TRUE' + return TRUE; + ^ + +--- Source/WebCore/platform/text/TextCodecICU.cpp.orig 2020-03-04 17:16:37 UTC ++++ Source/WebCore/platform/text/TextCodecICU.cpp +@@ -308,7 +308,7 @@ void TextCodecICU::createICUConverter() const + m_converterICU = ucnv_open(m_canonicalConverterName, &err); + ASSERT(U_SUCCESS(err)); + if (m_converterICU) +- ucnv_setFallback(m_converterICU, TRUE); ++ ucnv_setFallback(m_converterICU, true); + } + + int TextCodecICU::decodeToBuffer(UChar* target, UChar* targetLimit, const char*& source, const char* sourceLimit, int32_t* offsets, bool flush, UErrorCode& err) +--- Source/WebCore/platform/text/icu/UTextProvider.h.orig 2020-03-04 17:16:37 UTC ++++ Source/WebCore/platform/text/icu/UTextProvider.h +@@ -80,12 +80,12 @@ inline bool uTextAccessInChunkOrOutOfRange(UText* text + // Ensure chunk offset is well formed if computed offset exceeds int32_t range. + ASSERT(offset < std::numeric_limits::max()); + text->chunkOffset = offset < std::numeric_limits::max() ? static_cast(offset) : 0; +- isAccessible = TRUE; ++ isAccessible = true; + return true; + } + if (nativeIndex >= nativeLength && text->chunkNativeLimit == nativeLength) { + text->chunkOffset = text->chunkLength; +- isAccessible = FALSE; ++ isAccessible = false; + return true; + } + } else { +@@ -94,12 +94,12 @@ inline bool uTextAccessInChunkOrOutOfRange(UText* text + // Ensure chunk offset is well formed if computed offset exceeds int32_t range. + ASSERT(offset < std::numeric_limits::max()); + text->chunkOffset = offset < std::numeric_limits::max() ? static_cast(offset) : 0; +- isAccessible = TRUE; ++ isAccessible = true; + return true; + } + if (nativeIndex <= 0 && !text->chunkNativeStart) { + text->chunkOffset = 0; +- isAccessible = FALSE; ++ isAccessible = false; + return true; + } + } +--- Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp.orig 2020-03-04 17:16:37 UTC ++++ Source/WebCore/platform/text/icu/UTextProviderLatin1.cpp +@@ -100,23 +100,23 @@ static UBool uTextLatin1Access(UText* uText, int64_t i + if (index < uText->chunkNativeLimit && index >= uText->chunkNativeStart) { + // Already inside the buffer. Set the new offset. + uText->chunkOffset = static_cast(index - uText->chunkNativeStart); +- return TRUE; ++ return true; + } + if (index >= length && uText->chunkNativeLimit == length) { + // Off the end of the buffer, but we can't get it. + uText->chunkOffset = static_cast(index - uText->chunkNativeStart); +- return FALSE; ++ return false; + } + } else { + if (index <= uText->chunkNativeLimit && index > uText->chunkNativeStart) { + // Already inside the buffer. Set the new offset. + uText->chunkOffset = static_cast(index - uText->chunkNativeStart); +- return TRUE; ++ return true; + } + if (!index && !uText->chunkNativeStart) { + // Already at the beginning; can't go any farther. + uText->chunkOffset = 0; +- return FALSE; ++ return false; + } + } + +@@ -144,7 +144,7 @@ static UBool uTextLatin1Access(UText* uText, int64_t i + + uText->nativeIndexingLimit = uText->chunkLength; + +- return TRUE; ++ return true; + } + + static int32_t uTextLatin1Extract(UText* uText, int64_t start, int64_t limit, UChar* dest, int32_t destCapacity, UErrorCode* status) +@@ -336,7 +336,7 @@ static int64_t uTextLatin1ContextAwareNativeLength(UTe + static UBool uTextLatin1ContextAwareAccess(UText* text, int64_t nativeIndex, UBool forward) + { + if (!text->context) +- return FALSE; ++ return false; + int64_t nativeLength = uTextLatin1ContextAwareNativeLength(text); + UBool isAccessible; + if (uTextAccessInChunkOrOutOfRange(text, nativeIndex, nativeLength, forward, isAccessible)) +@@ -356,7 +356,7 @@ static UBool uTextLatin1ContextAwareAccess(UText* text + ASSERT(newContext == UTextProviderContext::PriorContext); + textLatin1ContextAwareSwitchToPriorContext(text, nativeIndex, nativeLength, forward); + } +- return TRUE; ++ return true; + } + + static int32_t uTextLatin1ContextAwareExtract(UText*, int64_t, int64_t, UChar*, int32_t, UErrorCode* errorCode) +--- Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp.orig 2020-03-04 17:16:37 UTC ++++ Source/WebCore/platform/text/icu/UTextProviderUTF16.cpp +@@ -125,7 +125,7 @@ static inline int64_t uTextUTF16ContextAwareNativeLeng + static UBool uTextUTF16ContextAwareAccess(UText* text, int64_t nativeIndex, UBool forward) + { + if (!text->context) +- return FALSE; ++ return false; + int64_t nativeLength = uTextUTF16ContextAwareNativeLength(text); + UBool isAccessible; + if (uTextAccessInChunkOrOutOfRange(text, nativeIndex, nativeLength, forward, isAccessible)) +@@ -145,7 +145,7 @@ static UBool uTextUTF16ContextAwareAccess(UText* text, + ASSERT(newContext == UTextProviderContext::PriorContext); + textUTF16ContextAwareSwitchToPriorContext(text, nativeIndex, nativeLength, forward); + } +- return TRUE; ++ return true; + } + + static int32_t uTextUTF16ContextAwareExtract(UText*, int64_t, int64_t, UChar*, int32_t, UErrorCode* errorCode) diff --git a/x86_64/extra/qt5-webkit/qt5-webkit-bison-3.7.patch b/x86_64/extra/qt5-webkit/qt5-webkit-bison-3.7.patch new file mode 100644 index 0000000..13dd681 --- /dev/null +++ b/x86_64/extra/qt5-webkit/qt5-webkit-bison-3.7.patch @@ -0,0 +1,46 @@ +From d92b11fea65364fefa700249bd3340e0cd4c5b31 Mon Sep 17 00:00:00 2001 +From: Dmitry Shachnev +Date: Tue, 4 Aug 2020 21:04:06 +0300 +Subject: [PATCH] Let Bison generate the header directly, to fix build with + Bison 3.7 + +Starting with Bison 3.7, the generated C++ file #include's the header +by default, instead of duplicating it. So we should not delete it. + +Remove the code to add #ifdef guards to the header, since Bison adds +them itself since version 2.6.3. +--- + Source/WebCore/css/makegrammar.pl | 21 +-------------------- + 1 file changed, 1 insertion(+), 20 deletions(-) + +diff --git a/Source/WebCore/css/makegrammar.pl b/Source/WebCore/css/makegrammar.pl +index 5d63b08102eb5..9435701c70612 100644 +--- a/Source/WebCore/css/makegrammar.pl ++++ b/Source/WebCore/css/makegrammar.pl +@@ -73,25 +73,6 @@ + } + + my $fileBase = File::Spec->join($outputDir, $filename); +-my @bisonCommand = ($bison, "-d", "-p", $symbolsPrefix, $grammarFilePath, "-o", "$fileBase.cpp"); ++my @bisonCommand = ($bison, "--defines=$fileBase.h", "-p", $symbolsPrefix, $grammarFilePath, "-o", "$fileBase.cpp"); + push @bisonCommand, "--no-lines" if $^O eq "MSWin32"; # Work around bug in bison >= 3.0 on Windows where it puts backslashes into #line directives. + system(@bisonCommand) == 0 or die; +- +-open HEADER, ">$fileBase.h" or die; +-print HEADER << "EOF"; +-#ifndef CSSGRAMMAR_H +-#define CSSGRAMMAR_H +-EOF +- +-open HPP, "<$fileBase.cpp.h" or open HPP, "<$fileBase.hpp" or die; +-while () { +- print HEADER; +-} +-close HPP; +- +-print HEADER "#endif\n"; +-close HEADER; +- +-unlink("$fileBase.cpp.h"); +-unlink("$fileBase.hpp"); +- diff --git a/x86_64/extra/qt5-webkit/qt5-webkit-python-3.9.patch b/x86_64/extra/qt5-webkit/qt5-webkit-python-3.9.patch new file mode 100644 index 0000000..bad26ef --- /dev/null +++ b/x86_64/extra/qt5-webkit/qt5-webkit-python-3.9.patch @@ -0,0 +1,27 @@ +From 78360c01c796b6260bf828bc9c8a0ef73c5132fd Mon Sep 17 00:00:00 2001 +From: Konstantin Tokarev +Date: Wed, 3 Jun 2020 15:01:42 +0300 +Subject: [PATCH] Fix compilation with Python 3.9: avoid passing encoding to + json.load() + +In Python 2.7 UTF-8 is assumed by default, while in Python 3 this argument +is not supported. + +Change-Id: Ic459d60a6b20bc1838d8771bc36ac41614fe61a9 +--- + Source/JavaScriptCore/generate-bytecode-files | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Source/JavaScriptCore/generate-bytecode-files b/Source/JavaScriptCore/generate-bytecode-files +index c5dab429c7b0f..af3431275ecf9 100644 +--- a/Source/JavaScriptCore/generate-bytecode-files ++++ b/Source/JavaScriptCore/generate-bytecode-files +@@ -163,7 +163,7 @@ if __name__ == "__main__": + initBytecodesFile = openOrExit(initASMFileName, "w") + + try: +- bytecodeSections = json.load(bytecodeFile, encoding = "utf-8") ++ bytecodeSections = json.load(bytecodeFile) + except: + print("Unexpected error parsing {0}: {1}".format(bytecodeJSONFile, sys.exc_info())) + diff --git a/x86_64/extra/qt5/PKGBUILD b/x86_64/extra/qt5/PKGBUILD new file mode 100644 index 0000000..88f2e80 --- /dev/null +++ b/x86_64/extra/qt5/PKGBUILD @@ -0,0 +1,103 @@ +pkgname=qt5 +pkgver=5.15.4 +pkgrel=3 +arch=('x86_64') +depends=(xorg-server xwayland alsa-lib cups glib2 harfbuzz icu libjpeg libpng + libtiff libwebp libxkbcommon mesa pcre2 sqlite3 wayland xcb-util-image xcb-util-keysyms + xcb-util-renderutil xcb-util-wm libinput pciutils pulseaudio bluez libglvnd fontconfig double-conversion) +makedepends=(extra-cmake-modules perl llvm clang) +commitid=77f657b6d467adde157b1e271279eaba82b9d3c1 +#commitid=b93d8fbb3c68811437660abde73fbdf6071be2a0 # STABLE +url=https://invent.kde.org/qt/qt/qt5.git +source=( + # Base src + git+$url#commit=$commitid + + # Final desktop entries + assistant-qt5.desktop + designer-qt5.desktop + linguist-qt5.desktop + qdbusviewer-qt5.desktop) + +prepare() { + cd qt5 + + # Fix git config ( Lets remove un-needed modules for less download size + git submodule deinit qtwebengine + git rm --cached qtwebengine + rm -rf .git/modules/qtwebengine qtwebengine + + echo " " + echo "[GIT FIX]: Done" + echo " " + + # Fix .git after our clone and sync/update submodules + git remote remove origin + git remote add origin $url + + git submodule update --init --recursive + + # Reset all submodules to original changes + git submodule foreach --recursive git reset --hard + + # Lets run configure only in prepare so it wont get reconfigured later on + # qtdocgallery is disabled as of its errors when compiled + ./configure \ + -platform linux-clang \ + -prefix /usr \ + -headerdir /usr/include/qt \ + -archdatadir /usr/lib/qt \ + -datadir /usr/share/qt \ + -sysconfdir /etc/xdg \ + -confirm-license \ + -dbus-linked \ + -openssl-linked \ + -system-harfbuzz \ + -opensource \ + -system-sqlite \ + -nomake examples \ + -nomake tests \ + -skip qtdocgallery \ + -no-rpath \ + -no-strip \ + -skip qtwebengine \ + -journald +} + +build() { + cd qt5 + + make -j6 +} + +package() { + cd qt5 + + mkdir -p $pkgdir/usr + make INSTALL_ROOT=$pkgdir install + + # Remove references to the build directory from installed library dependency (prl) + find $pkgdir/usr/ -name \*.prl \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # Install private headers + install -d -m755 "$pkgdir"/usr/include/qtxcb-private + cp -r qtbase/src/plugins/platforms/xcb/*.h "$pkgdir"/usr/include/qtxcb-private/ + + # Install images and create the menu entries for installed applications. + install -v -dm755 $pkgdir/usr/share/pixmaps/ + install -v -Dm644 qttools/src/assistant/assistant/images/assistant-128.png \ + $pkgdir/usr/share/pixmaps/assistant-qt5.png + install -v -Dm644 qttools/src/designer/src/designer/images/designer.png \ + $pkgdir/usr/share/pixmaps/designer-qt5.png + install -v -Dm644 qttools/src/linguist/linguist/images/icons/linguist-128-32.png \ + $pkgdir/usr/share/pixmaps/linguist-qt5.png + install -v -Dm644 qttools/src/qdbus/qdbusviewer/images/qdbusviewer-128.png \ + $pkgdir/usr/share/pixmaps/qdbusviewer-qt5.png + install -dm755 $pkgdir/usr/share/applications + + cp $srcdir/assistant-qt5.desktop $pkgdir/usr/share/applications/ + cp $srcdir/designer-qt5.desktop $pkgdir/usr/share/applications/ + cp $srcdir/linguist-qt5.desktop $pkgdir/usr/share/applications/ + cp $srcdir/qdbusviewer-qt5.desktop $pkgdir/usr/share/applications/ +} diff --git a/x86_64/extra/qt5/assistant-qt5.desktop b/x86_64/extra/qt5/assistant-qt5.desktop new file mode 100644 index 0000000..f1bf9a7 --- /dev/null +++ b/x86_64/extra/qt5/assistant-qt5.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Qt5 Assistant +Comment=Shows Qt5 documentation and examples +Exec=/usr/bin/assistant +Icon=assistant-qt5.png +Terminal=false +Encoding=UTF-8 +Type=Application +Categories=Qt;Development;Documentation; diff --git a/x86_64/extra/qt5/config b/x86_64/extra/qt5/config new file mode 100644 index 0000000..58d88df --- /dev/null +++ b/x86_64/extra/qt5/config @@ -0,0 +1,152 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true +[submodule "qt3d"] + active = true + url = https://invent.kde.org/qt/qt/qt3d.git +[submodule "qtactiveqt"] + active = true + url = https://invent.kde.org/qt/qt/qtactiveqt.git +[submodule "qtandroidextras"] + active = true + url = https://invent.kde.org/qt/qt/qtandroidextras.git +[submodule "qtbase"] + active = true + url = https://invent.kde.org/qt/qt/qtbase.git +[submodule "qtcanvas3d"] + active = true + url = https://invent.kde.org/qt/qt/qtcanvas3d.git +[submodule "qtcharts"] + active = true + url = https://invent.kde.org/qt/qt/qtcharts.git +[submodule "qtconnectivity"] + active = true + url = https://invent.kde.org/qt/qt/qtconnectivity.git +[submodule "qtdatavis3d"] + active = true + url = https://invent.kde.org/qt/qt/qtdatavis3d.git +[submodule "qtdeclarative"] + active = true + url = https://invent.kde.org/qt/qt/qtdeclarative.git +[submodule "qtdoc"] + active = true + url = https://invent.kde.org/qt/qt/qtdoc.git +[submodule "qtdocgallery"] + active = true + url = https://invent.kde.org/qt/qt/qtdocgallery.git +[submodule "qtfeedback"] + active = true + url = https://invent.kde.org/qt/qt/qtfeedback.git +[submodule "qtgamepad"] + active = true + url = https://invent.kde.org/qt/qt/qtgamepad.git +[submodule "qtgraphicaleffects"] + active = true + url = https://invent.kde.org/qt/qt/qtgraphicaleffects.git +[submodule "qtimageformats"] + active = true + url = https://invent.kde.org/qt/qt/qtimageformats.git +[submodule "qtlocation"] + active = true + url = https://invent.kde.org/qt/qt/qtlocation.git +[submodule "qtlottie"] + active = true + url = https://invent.kde.org/qt/qt/qtlottie.git +[submodule "qtmacextras"] + active = true + url = https://invent.kde.org/qt/qt/qtmacextras.git +[submodule "qtmultimedia"] + active = true + url = https://invent.kde.org/qt/qt/qtmultimedia.git +[submodule "qtnetworkauth"] + active = true + url = https://invent.kde.org/qt/qt/qtnetworkauth.git +[submodule "qtpim"] + active = true + url = https://invent.kde.org/qt/qt/qtpim.git +[submodule "qtpurchasing"] + active = true + url = https://invent.kde.org/qt/qt/qtpurchasing.git +[submodule "qtqa"] + active = true + url = https://invent.kde.org/qt/qt/qtqa.git +[submodule "qtquick3d"] + active = true + url = https://invent.kde.org/qt/qt/qtquick3d.git +[submodule "qtquickcontrols"] + active = true + url = https://invent.kde.org/qt/qt/qtquickcontrols.git +[submodule "qtquickcontrols2"] + active = true + url = https://invent.kde.org/qt/qt/qtquickcontrols2.git +[submodule "qtquicktimeline"] + active = true + url = https://invent.kde.org/qt/qt/qtquicktimeline +[submodule "qtremoteobjects"] + active = true + url = https://invent.kde.org/qt/qt/qtremoteobjects.git +[submodule "qtrepotools"] + active = true + url = https://invent.kde.org/qt/qt/qtrepotools.git +[submodule "qtscript"] + active = true + url = https://invent.kde.org/qt/qt/qtscript.git +[submodule "qtscxml"] + active = true + url = https://invent.kde.org/qt/qt/qtscxml.git +[submodule "qtsensors"] + active = true + url = https://invent.kde.org/qt/qt/qtsensors.git +[submodule "qtserialbus"] + active = true + url = https://invent.kde.org/qt/qt/qtserialbus.git +[submodule "qtserialport"] + active = true + url = https://invent.kde.org/qt/qt/qtserialport.git +[submodule "qtspeech"] + active = true + url = https://invent.kde.org/qt/qt/qtspeech.git +[submodule "qtsvg"] + active = true + url = https://invent.kde.org/qt/qt/qtsvg.git +[submodule "qtsystems"] + active = true + url = https://invent.kde.org/qt/qt/qtsystems.git +[submodule "qttools"] + active = true + url = https://invent.kde.org/qt/qt/qttools.git +[submodule "qttranslations"] + active = true + url = https://invent.kde.org/qt/qt/qttranslations.git +[submodule "qtvirtualkeyboard"] + active = true + url = https://invent.kde.org/qt/qt/qtvirtualkeyboard.git +[submodule "qtwayland"] + active = true + url = https://invent.kde.org/qt/qt/qtwayland.git +[submodule "qtwebchannel"] + active = true + url = https://invent.kde.org/qt/qt/qtwebchannel.git +[submodule "qtwebglplugin"] + active = true + url = https://invent.kde.org/qt/qt/qtwebglplugin.git +[submodule "qtwebsockets"] + active = true + url = https://invent.kde.org/qt/qt/qtwebsockets.git +[submodule "qtwebview"] + active = true + url = https://invent.kde.org/qt/qt/qtwebview.git +[submodule "qtwinextras"] + active = true + url = https://invent.kde.org/qt/qt/qtwinextras.git +[submodule "qtx11extras"] + active = true + url = https://invent.kde.org/qt/qt/qtx11extras.git +[submodule "qtxmlpatterns"] + active = true + url = https://invent.kde.org/qt/qt/qtxmlpatterns.git +[remote "origin"] + url = https://invent.kde.org/qt/qt/qt5.git + fetch = +refs/heads/*:refs/remotes/origin/* diff --git a/x86_64/extra/qt5/gitmodules b/x86_64/extra/qt5/gitmodules new file mode 100644 index 0000000..7bda79e --- /dev/null +++ b/x86_64/extra/qt5/gitmodules @@ -0,0 +1,317 @@ +[submodule "qtbase"] + path = qtbase + url = ../qtbase.git + branch = 5.15 + status = essential +[submodule "qtsvg"] + depends = qtbase + path = qtsvg + url = ../qtsvg.git + branch = 5.15 + status = addon +[submodule "qtdeclarative"] + depends = qtbase + recommends = qtsvg + path = qtdeclarative + url = ../qtdeclarative.git + branch = 5.15 + status = essential +[submodule "qtactiveqt"] + depends = qtbase + path = qtactiveqt + url = ../qtactiveqt.git + branch = 5.15 + status = addon +[submodule "qtscript"] + depends = qtbase + recommends = qttools + path = qtscript + url = ../qtscript.git + branch = 5.15 + status = deprecated +[submodule "qtmultimedia"] + depends = qtbase + recommends = qtdeclarative + path = qtmultimedia + url = ../qtmultimedia.git + branch = 5.15 + status = essential +[submodule "qttools"] + depends = qtbase + recommends = qtdeclarative qtactiveqt + path = qttools + url = ../qttools.git + branch = 5.15 + status = essential +[submodule "qtxmlpatterns"] + depends = qtbase + recommends = qtdeclarative + path = qtxmlpatterns + url = ../qtxmlpatterns.git + branch = 5.15 + status = deprecated +[submodule "qttranslations"] + depends = qttools + path = qttranslations + url = ../qttranslations.git + branch = 5.15 + status = essential + priority = 30 +[submodule "qtdoc"] + depends = qtdeclarative qttools + recommends = qtmultimedia qtquickcontrols qtquickcontrols2 + path = qtdoc + url = ../qtdoc.git + branch = 5.15 + status = essential + priority = 40 +[submodule "qtrepotools"] + path = qtrepotools + url = ../qtrepotools.git + branch = master + status = essential + project = - +[submodule "qtqa"] + depends = qtbase + path = qtqa + url = ../qtqa.git + branch = master + status = essential + priority = 50 +[submodule "qtlocation"] + depends = qtbase + recommends = qtdeclarative qtquickcontrols qtquickcontrols2 qtserialport + path = qtlocation + url = ../qtlocation.git + branch = 5.15 + status = addon +[submodule "qtsensors"] + depends = qtbase + recommends = qtdeclarative + path = qtsensors + url = ../qtsensors.git + branch = 5.15 + status = addon +[submodule "qtsystems"] + depends = qtbase + recommends = qtdeclarative + path = qtsystems + url = ../qtsystems.git + branch = dev + status = ignore +[submodule "qtfeedback"] + depends = qtdeclarative + recommends = qtmultimedia + path = qtfeedback + url = ../qtfeedback.git + branch = master + status = ignore +[submodule "qtdocgallery"] + depends = qtdeclarative + path = qtdocgallery + url = ../qtdocgallery.git + branch = master + status = ignore +[submodule "qtpim"] + depends = qtdeclarative + path = qtpim + url = ../qtpim.git + branch = dev + status = ignore +[submodule "qtconnectivity"] + depends = qtbase + recommends = qtdeclarative qtandroidextras + path = qtconnectivity + url = ../qtconnectivity.git + branch = 5.15 + status = addon +[submodule "qtwayland"] + depends = qtbase + recommends = qtdeclarative + path = qtwayland + url = ../qtwayland.git + branch = 5.15 + status = addon +[submodule "qt3d"] + depends = qtbase + recommends = qtdeclarative qtimageformats qtgamepad + path = qt3d + url = ../qt3d.git + branch = 5.15 + status = addon +[submodule "qtimageformats"] + depends = qtbase + path = qtimageformats + url = ../qtimageformats.git + branch = 5.15 + status = addon +[submodule "qtgraphicaleffects"] + depends = qtdeclarative + path = qtgraphicaleffects + url = ../qtgraphicaleffects.git + branch = 5.15 + status = essential +[submodule "qtquickcontrols"] + depends = qtdeclarative + recommends = qtgraphicaleffects + path = qtquickcontrols + url = ../qtquickcontrols.git + branch = 5.15 + status = addon +[submodule "qtserialbus"] + depends = qtbase + recommends = qtserialport + path = qtserialbus + url = ../qtserialbus.git + branch = 5.15 + status = addon +[submodule "qtserialport"] + depends = qtbase + path = qtserialport + url = ../qtserialport.git + branch = 5.15 + status = addon +[submodule "qtx11extras"] + depends = qtbase + path = qtx11extras + url = ../qtx11extras.git + branch = 5.15 + status = addon +[submodule "qtmacextras"] + depends = qtbase + path = qtmacextras + url = ../qtmacextras.git + branch = 5.15 + status = addon +[submodule "qtwinextras"] + depends = qtbase + recommends = qtdeclarative qtmultimedia + path = qtwinextras + url = ../qtwinextras.git + branch = 5.15 + status = addon +[submodule "qtandroidextras"] + depends = qtbase + path = qtandroidextras + url = ../qtandroidextras.git + branch = 5.15 + status = addon +[submodule "qtwebsockets"] + depends = qtbase + recommends = qtdeclarative + path = qtwebsockets + url = ../qtwebsockets.git + branch = 5.15 + status = addon +[submodule "qtwebchannel"] + depends = qtbase + recommends = qtdeclarative qtwebsockets + path = qtwebchannel + url = ../qtwebchannel.git + branch = 5.15 + status = addon +[submodule "qtcanvas3d"] + depends = qtdeclarative + path = qtcanvas3d + url = ../qtcanvas3d.git + branch = dev + status = ignore +[submodule "qtwebview"] + depends = qtdeclarative + path = qtwebview + url = ../qtwebview.git + branch = 5.15 + status = addon +[submodule "qtquickcontrols2"] + depends = qtgraphicaleffects + recommends = qtimageformats + path = qtquickcontrols2 + url = ../qtquickcontrols2.git + branch = 5.15 + status = essential +[submodule "qtpurchasing"] + depends = qtbase + recommends = qtdeclarative qtandroidextras + path = qtpurchasing + url = ../qtpurchasing.git + branch = 5.15 + status = addon +[submodule "qtcharts"] + depends = qtbase + recommends = qtdeclarative qtmultimedia + path = qtcharts + url = ../qtcharts.git + branch = 5.15 + status = addon +[submodule "qtdatavis3d"] + depends = qtbase + recommends = qtdeclarative qtmultimedia + path = qtdatavis3d + url = ../qtdatavis3d.git + branch = 5.15 + status = addon +[submodule "qtvirtualkeyboard"] + depends = qtbase qtdeclarative qtsvg + recommends = qtmultimedia qtquickcontrols + path = qtvirtualkeyboard + url = ../qtvirtualkeyboard.git + branch = 5.15 + status = addon +[submodule "qtgamepad"] + depends = qtbase + recommends = qtdeclarative + path = qtgamepad + url = ../qtgamepad.git + branch = 5.15 + status = addon +[submodule "qtscxml"] + depends = qtbase qtdeclarative + path = qtscxml + url = ../qtscxml.git + branch = 5.15 + status = addon +[submodule "qtspeech"] + depends = qtbase + recommends = qtdeclarative qtmultimedia + path = qtspeech + url = ../qtspeech.git + branch = 5.15 + status = addon +[submodule "qtnetworkauth"] + depends = qtbase + path = qtnetworkauth + url = ../qtnetworkauth.git + branch = 5.15 + status = addon +[submodule "qtremoteobjects"] + depends = qtbase + recommends = qtdeclarative + path = qtremoteobjects + url = ../qtremoteobjects.git + branch = 5.15 + status = addon +[submodule "qtwebglplugin"] + depends = qtbase qtwebsockets + recommends = qtdeclarative + path = qtwebglplugin + url = ../qtwebglplugin.git + branch = 5.15 + status = addon +[submodule "qtlottie"] + depends = qtbase qtdeclarative + path = qtlottie + url = ../qtlottie.git + branch = 5.15 + status = addon +[submodule "qtquicktimeline"] + depends = qtbase qtdeclarative + path = qtquicktimeline + url = ../qtquicktimeline + branch = 5.15 + status = addon +[submodule "qtquick3d"] + depends = qtbase qtdeclarative + path = qtquick3d + url = ../qtquick3d.git + branch = 5.15 + status = addon diff --git a/x86_64/extra/qt5/linguist-qt5.desktop b/x86_64/extra/qt5/linguist-qt5.desktop new file mode 100644 index 0000000..3c885d6 --- /dev/null +++ b/x86_64/extra/qt5/linguist-qt5.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Qt5 Linguist +Comment=Add translations to Qt5 applications +Exec=/usr/bin/linguist +Icon=linguist-qt5.png +MimeType=text/vnd.trolltech.linguist;application/x-linguist; +Terminal=false +Encoding=UTF-8 +Type=Application +Categories=Qt;Development; diff --git a/x86_64/extra/qt5/qdbusviewer-qt5.desktop b/x86_64/extra/qt5/qdbusviewer-qt5.desktop new file mode 100644 index 0000000..eb3ff35 --- /dev/null +++ b/x86_64/extra/qt5/qdbusviewer-qt5.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Qt5 QDbusViewer +GenericName=D-Bus Debugger +Comment=Debug D-Bus applications +Exec=/usr/bin/qdbusviewer +Icon=qdbusviewer-qt5.png +Terminal=false +Encoding=UTF-8 +Type=Application +Categories=Qt;Development;Debugger; diff --git a/x86_64/extra/qt5/qmake-cflags.patch b/x86_64/extra/qt5/qmake-cflags.patch new file mode 100644 index 0000000..3325016 --- /dev/null +++ b/x86_64/extra/qt5/qmake-cflags.patch @@ -0,0 +1,46 @@ +diff --git a/mkspecs/common/g++-unix.conf b/mkspecs/common/g++-unix.conf +index a493cd5984..41342f5020 100644 +--- a/mkspecs/common/g++-unix.conf ++++ b/mkspecs/common/g++-unix.conf +@@ -10,5 +10,6 @@ + + include(g++-base.conf) + +-QMAKE_LFLAGS_RELEASE += -Wl,-O1 ++SYSTEM_LDFLAGS = $$(LDFLAGS) ++!isEmpty(SYSTEM_LDFLAGS) { eval(QMAKE_LFLAGS_RELEASE += $$(LDFLAGS)) } else { QMAKE_LFLAGS_RELEASE += -Wl,-O1 } + QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined +diff --git a/mkspecs/common/gcc-base.conf b/mkspecs/common/gcc-base.conf +index 1f919d270a..7ef6046326 100644 +--- a/mkspecs/common/gcc-base.conf ++++ b/mkspecs/common/gcc-base.conf +@@ -40,9 +40,11 @@ QMAKE_CFLAGS_OPTIMIZE_SIZE = -Os + QMAKE_CFLAGS_DEPS += -M + QMAKE_CFLAGS_WARN_ON += -Wall -Wextra + QMAKE_CFLAGS_WARN_OFF += -w +-QMAKE_CFLAGS_RELEASE += $$QMAKE_CFLAGS_OPTIMIZE +-QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -g +-QMAKE_CFLAGS_DEBUG += -g ++SYSTEM_CFLAGS = $$(CFLAGS) ++SYSTEM_DEBUG_CFLAGS = $$(DEBUG_CFLAGS) ++!isEmpty(SYSTEM_CFLAGS) { eval(QMAKE_CFLAGS_RELEASE += $$(CFLAGS)) } else { QMAKE_CFLAGS_RELEASE += $$QMAKE_CFLAGS_OPTIMIZE } ++!isEmpty(SYSTEM_CFLAGS) { eval(QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -g $$(CFLAGS)) } else { QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -g } ++!isEmpty(SYSTEM_DEBUG_CFLAGS) { eval(QMAKE_CFLAGS_DEBUG += $$(DEBUG_CFLAGS)) } else { QMAKE_CFLAGS_DEBUG += -g } + QMAKE_CFLAGS_SHLIB += $$QMAKE_CFLAGS_PIC + QMAKE_CFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_PIC + QMAKE_CFLAGS_APP += $$QMAKE_CFLAGS_PIC +@@ -59,9 +61,11 @@ QMAKE_CXXFLAGS += $$QMAKE_CFLAGS + QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS + QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON + QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF +-QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE +-QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO +-QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG ++SYSTEM_CXXFLAGS = $$(CXXFLAGS) ++SYSTEM_DEBUG_CXXFLAGS = $$(DEBUG_CXXFLAGS) ++!isEmpty(SYSTEM_CXXFLAGS) { eval(QMAKE_CXXFLAGS_RELEASE += $$(CXXFLAGS)) } else { QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_OPTIMIZE } ++!isEmpty(SYSTEM_CXXFLAGS) { eval(QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += -g $$(CXXFLAGS)) } else { QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -g } ++!isEmpty(SYSTEM_DEBUG_CXXFLAGS) { eval(QMAKE_CXXFLAGS_DEBUG += $$(DEBUG_CXXFLAGS)) } else { QMAKE_CXXFLAGS_DEBUG += -g } + QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB + QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB + QMAKE_CXXFLAGS_APP += $$QMAKE_CFLAGS_APP diff --git a/x86_64/extra/qt5/qmake-config.patch b/x86_64/extra/qt5/qmake-config.patch new file mode 100644 index 0000000..77d9694 --- /dev/null +++ b/x86_64/extra/qt5/qmake-config.patch @@ -0,0 +1,13 @@ +diff --git a/mkspecs/common/gcc-base.conf b/mkspecs/common/gcc-base.conf +index 99d77156fd..fc840fe9f6 100644 +--- a/mkspecs/common/gcc-base.conf ++++ b/mkspecs/common/gcc-base.conf +@@ -31,6 +31,8 @@ + # you can use the manual test in tests/manual/mkspecs. + # + ++CONFIG += nostrip ltcg ++ + QMAKE_CFLAGS_OPTIMIZE = -O2 + QMAKE_CFLAGS_OPTIMIZE_FULL = -O3 + QMAKE_CFLAGS_OPTIMIZE_DEBUG = -Og diff --git a/x86_64/extra/qt6/PKGBUILD b/x86_64/extra/qt6/PKGBUILD new file mode 100644 index 0000000..55c4446 --- /dev/null +++ b/x86_64/extra/qt6/PKGBUILD @@ -0,0 +1,85 @@ +pkgname=qt6 +pkgver=6.3.1 +rver=6.3 +pkgrel=1 +arch=('x86_64') +depends=(xorg-server xwayland alsa-lib cups glib2 harfbuzz icu libjpeg libpng + libtiff libwebp libxkbcommon mesa pcre2 sqlite3 wayland xcb-util-image xcb-util-keysyms + xcb-util-renderutil xcb-util-wm libinput pciutils pulseaudio bluez libglvnd fontconfig) +makedepends=(extra-cmake-modules perl xinput) +source=( + # Main single tarball + https://download.qt.io/official_releases/qt/6.3/6.3.1/single/qt-everywhere-src-6.3.1.tar.xz + # Src is cloned by prepare so things keep origin url and etc + # Final desktop entries + assistant-qt6.desktop + designer-qt6.desktop + linguist-qt6.desktop + qdbusviewer-qt6.desktop) + +prepare() { + cd qt-everywhere-src-$pkgver + + # Lets run configure only in prepare so it wont get reconfigured later on + # qtdocgallery is disabled as of its errors when compiled + cmake -B build -G Ninja \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -D INSTALL_BINDIR=libexec/qt6/bin \ + -D INSTALL_PUBLICBINDIR=usr/bin \ + -D INSTALL_LIBEXECDIR=lib/qt6 \ + -D INSTALL_DOCDIR=share/doc/qt6 \ + -D INSTALL_ARCHDATADIR=lib/qt6 \ + -D INSTALL_DATADIR=share/qt6 \ + -D INSTALL_INCLUDEDIR=include/qt6 \ + -D INSTALL_MKSPECSDIR=lib/qt6/mkspecs \ + -D INSTALL_EXAMPLESDIR=share/doc/qt6/examples \ + -D QT_FEATURE_journald=ON \ + -D QT_FEATURE_openssl_linked=ON \ + -D QT_FEATURE_system_sqlite=ON \ + -D QT_FEATURE_system_xcb_xinput=ON \ + -D QT_NO_MAKE_EXAMPLES=ON \ + -D BUILD_qtwebengine=OFF \ + -D BUILD_qtpositioning=ON \ + -D BUILD_qtlocation=ON \ + -D CMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ + -D QT_AVOID_CMAKE_ARCHIVING_API=ON +} + +build() { + cd qt-everywhere-src-$pkgver + + ninja -C build +} + +package() { + cd qt-everywhere-src-$pkgver + + mkdir -p $pkgdir/usr + DESTDIR=$pkgdir INSTALL_ROOT=$pkgdir ninja -C build install + + # Remove references to the build directory from installed library dependency (prl) + find $pkgdir/usr/ -name \*.prl \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # Install private headers + install -d -m755 "$pkgdir"/usr/include/qt6/qtxcb-private + cp -r qtbase/src/plugins/platforms/xcb/*.h "$pkgdir"/usr/include/qt6/qtxcb-private/ + + # Install images and create the menu entries for installed applications. + install -v -dm755 $pkgdir/usr/share/pixmaps/ + install -v -Dm644 qttools/src/assistant/assistant/images/assistant-128.png \ + $pkgdir/usr/share/pixmaps/assistant-qt6.png + install -v -Dm644 qttools/src/designer/src/designer/images/designer.png \ + $pkgdir/usr/share/pixmaps/designer-qt6.png + install -v -Dm644 qttools/src/linguist/linguist/images/icons/linguist-128-32.png \ + $pkgdir/usr/share/pixmaps/linguist-qt6.png + install -v -Dm644 qttools/src/qdbus/qdbusviewer/images/qdbusviewer-128.png \ + $pkgdir/usr/share/pixmaps/qdbusviewer-qt6.png + install -dm755 $pkgdir/usr/share/applications + + cp $srcdir/assistant-qt6.desktop $pkgdir/usr/share/applications/ + cp $srcdir/designer-qt6.desktop $pkgdir/usr/share/applications/ + cp $srcdir/linguist-qt6.desktop $pkgdir/usr/share/applications/ + cp $srcdir/qdbusviewer-qt6.desktop $pkgdir/usr/share/applications/ +} diff --git a/x86_64/extra/qt6/PKGBUILD_STABLE b/x86_64/extra/qt6/PKGBUILD_STABLE new file mode 100644 index 0000000..4f4c6d6 --- /dev/null +++ b/x86_64/extra/qt6/PKGBUILD_STABLE @@ -0,0 +1,103 @@ +pkgname=qt6 +pkgver=6.4.0 +rver=6.4 +pkgrel=1 +arch=('x86_64') +depends=(xorg-server xwayland alsa-lib cups glib2 harfbuzz icu libjpeg libpng + libtiff libwebp libxkbcommon mesa pcre2 sqlite3 wayland xcb-util-image xcb-util-keysyms + xcb-util-renderutil xcb-util-wm libinput pciutils pulseaudio bluez libglvnd fontconfig) +makedepends=(extra-cmake-modules perl xinput) +commitid=dc320860843ce496fdc7f298d86c70462a85a2a7 +#OLD_STABLE:65a882504ddb3e4575e53ffb60eb3e38b2b50837 +url=https://code.qt.io/qt/qt5.git +source=( + # Src is cloned by prepare so things keep origin url and etc + # Final desktop entries + assistant-qt6.desktop + designer-qt6.desktop + linguist-qt6.desktop + qdbusviewer-qt6.desktop) + +prepare() { + # Clone src here + if [ -d qt5 ]; then + echo "src already seems to be cloned, skipping" + + cd qt5 + else + git clone $url -b $rver --depth=100 + + cd qt5 + + git checkout $commitid + fi + + if [ -d qtbase/src ]; then + echo "repo init already done, skipping" + else + ./init-repository + fi + + # Lets run configure only in prepare so it wont get reconfigured later on + # qtdocgallery is disabled as of its errors when compiled + cmake -B build -G Ninja \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=RelWithDebInfo \ + -D INSTALL_BINDIR=libexec/qt6/bin \ + -D INSTALL_PUBLICBINDIR=usr/bin \ + -D INSTALL_LIBEXECDIR=lib/qt6 \ + -D INSTALL_DOCDIR=share/doc/qt6 \ + -D INSTALL_ARCHDATADIR=lib/qt6 \ + -D INSTALL_DATADIR=share/qt6 \ + -D INSTALL_INCLUDEDIR=include/qt6 \ + -D INSTALL_MKSPECSDIR=lib/qt6/mkspecs \ + -D INSTALL_EXAMPLESDIR=share/doc/qt6/examples \ + -D QT_FEATURE_journald=ON \ + -D QT_FEATURE_openssl_linked=ON \ + -D QT_FEATURE_system_sqlite=ON \ + -D QT_FEATURE_system_xcb_xinput=ON \ + -D QT_NO_MAKE_EXAMPLES=ON \ + -D BUILD_qtwebengine=OFF \ + -D BUILD_qtpositioning=OFF \ + -D BUILD_qtlocation=OFF \ + -D CMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ + -D QT_AVOID_CMAKE_ARCHIVING_API=ON +} + +build() { + cd qt5 + + ninja -C build +} + +package() { + cd qt5 + + mkdir -p $pkgdir/usr + DESTDIR=$pkgdir INSTALL_ROOT=$pkgdir ninja -C build install + + # Remove references to the build directory from installed library dependency (prl) + find $pkgdir/usr/ -name \*.prl \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + # Install private headers + install -d -m755 "$pkgdir"/usr/include/qt6/qtxcb-private + cp -r qtbase/src/plugins/platforms/xcb/*.h "$pkgdir"/usr/include/qt6/qtxcb-private/ + + # Install images and create the menu entries for installed applications. + install -v -dm755 $pkgdir/usr/share/pixmaps/ + install -v -Dm644 qttools/src/assistant/assistant/images/assistant-128.png \ + $pkgdir/usr/share/pixmaps/assistant-qt6.png + install -v -Dm644 qttools/src/designer/src/designer/images/designer.png \ + $pkgdir/usr/share/pixmaps/designer-qt6.png + install -v -Dm644 qttools/src/linguist/linguist/images/icons/linguist-128-32.png \ + $pkgdir/usr/share/pixmaps/linguist-qt6.png + install -v -Dm644 qttools/src/qdbus/qdbusviewer/images/qdbusviewer-128.png \ + $pkgdir/usr/share/pixmaps/qdbusviewer-qt6.png + install -dm755 $pkgdir/usr/share/applications + + cp $srcdir/assistant-qt6.desktop $pkgdir/usr/share/applications/ + cp $srcdir/designer-qt6.desktop $pkgdir/usr/share/applications/ + cp $srcdir/linguist-qt6.desktop $pkgdir/usr/share/applications/ + cp $srcdir/qdbusviewer-qt6.desktop $pkgdir/usr/share/applications/ +} diff --git a/x86_64/extra/qt6/assistant-qt6.desktop b/x86_64/extra/qt6/assistant-qt6.desktop new file mode 100644 index 0000000..9c3d533 --- /dev/null +++ b/x86_64/extra/qt6/assistant-qt6.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Qt6 Assistant +Comment=Shows Qt6 documentation and examples +Exec=/usr/libexec/qt6/bin/assistant +Icon=assistant-qt6.png +Terminal=false +Encoding=UTF-8 +Type=Application +Categories=Qt;Development;Documentation; diff --git a/x86_64/extra/qt6/linguist-qt6.desktop b/x86_64/extra/qt6/linguist-qt6.desktop new file mode 100644 index 0000000..04b4e46 --- /dev/null +++ b/x86_64/extra/qt6/linguist-qt6.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Qt6 Linguist +Comment=Add translations to Qt6 applications +Exec=/usr/libexec/qt6/bin/linguist +Icon=linguist-qt6.png +MimeType=text/vnd.trolltech.linguist;application/x-linguist; +Terminal=false +Encoding=UTF-8 +Type=Application +Categories=Qt;Development; diff --git a/x86_64/extra/qt6/qdbusviewer-qt6.desktop b/x86_64/extra/qt6/qdbusviewer-qt6.desktop new file mode 100644 index 0000000..f041611 --- /dev/null +++ b/x86_64/extra/qt6/qdbusviewer-qt6.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Qt6 QDbusViewer +GenericName=D-Bus Debugger +Comment=Debug D-Bus applications +Exec=/usr/libexec/qt6/bin/qdbusviewer +Icon=qdbusviewer-qt6.png +Terminal=false +Encoding=UTF-8 +Type=Application +Categories=Qt;Development;Debugger; diff --git a/x86_64/extra/reiserfsprogs/PKGBUILD b/x86_64/extra/reiserfsprogs/PKGBUILD new file mode 100644 index 0000000..35759c7 --- /dev/null +++ b/x86_64/extra/reiserfsprogs/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=reiserfsprogs +pkgver=3.6.27 +pkgrel=1 +arch=('x86_64') +depends=(util-linux) +makedepends=(gcc) +source=(https://www.kernel.org/pub/linux/kernel/people/jeffm/reiserfsprogs/v${pkgver}/${pkgname}-${pkgver}.tar.xz + reiserfsprogs-3.6.27-loff_t.patch) + +prepare() { + cd $pkgname-$pkgver + + patch -Np1 -i ../reiserfsprogs-3.6.27-loff_t.patch + + autoreconf -fi +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/reiserfsprogs/reiserfsprogs-3.6.27-loff_t.patch b/x86_64/extra/reiserfsprogs/reiserfsprogs-3.6.27-loff_t.patch new file mode 100644 index 0000000..521d644 --- /dev/null +++ b/x86_64/extra/reiserfsprogs/reiserfsprogs-3.6.27-loff_t.patch @@ -0,0 +1,15 @@ +glibc-2.28 did hide loff_t indef system-specific macros: + https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=663e7d784977f6b15c0cab73f754f9f39c9c0c2c + +This caused build failure: + ../include/reiserfs_lib.h:300:55: error: unknown type name 'loff_t'; did you mean 'off_t'? + +Re-enable extensions to pull loff_t back. + +https://bugs.gentoo.org/663930 +--- a/configure.ac ++++ b/configure.ac +@@ -23,2 +23,4 @@ AC_PROG_MAKE_SET + AC_PROG_LIBTOOL ++dnl pull in loff_t from glibc ++AC_USE_SYSTEM_EXTENSIONS diff --git a/x86_64/extra/repo/PKGBUILD b/x86_64/extra/repo/PKGBUILD new file mode 100644 index 0000000..15e5e43 --- /dev/null +++ b/x86_64/extra/repo/PKGBUILD @@ -0,0 +1,14 @@ +pkgname=repo +pkgver=2.31 +pkgrel=1 +arch=(x86_64) +depends=(python3 openssh) +makedepends=(wget) +source=(https://storage.googleapis.com/git-repo-downloads/repo) + +package() { + mkdir -p $pkgdir/usr/bin + + cp repo $pkgdir/usr/bin/ + chmod +x $pkgdir/usr/bin/repo +} diff --git a/x86_64/extra/repo/repo b/x86_64/extra/repo/repo new file mode 100644 index 0000000..c084b65 --- /dev/null +++ b/x86_64/extra/repo/repo @@ -0,0 +1,1349 @@ +#!/usr/bin/env python +# -*- coding:utf-8 -*- +# +# Copyright (C) 2008 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Repo launcher. + +This is a standalone tool that people may copy to anywhere in their system. +It is used to get an initial repo client checkout, and after that it runs the +copy of repo in the checkout. +""" + +from __future__ import print_function + +import datetime +import os +import platform +import shlex +import subprocess +import sys + + +# These should never be newer than the main.py version since this needs to be a +# bit more flexible with older systems. See that file for more details on the +# versions we select. +MIN_PYTHON_VERSION_SOFT = (3, 6) +MIN_PYTHON_VERSION_HARD = (3, 5) + + +# Keep basic logic in sync with repo_trace.py. +class Trace(object): + """Trace helper logic.""" + + REPO_TRACE = 'REPO_TRACE' + + def __init__(self): + self.set(os.environ.get(self.REPO_TRACE) == '1') + + def set(self, value): + self.enabled = bool(value) + + def print(self, *args, **kwargs): + if self.enabled: + print(*args, **kwargs) + + +trace = Trace() + + +def exec_command(cmd): + """Execute |cmd| or return None on failure.""" + trace.print(':', ' '.join(cmd)) + try: + if platform.system() == 'Windows': + ret = subprocess.call(cmd) + sys.exit(ret) + else: + os.execvp(cmd[0], cmd) + except Exception: + pass + + +def check_python_version(): + """Make sure the active Python version is recent enough.""" + def reexec(prog): + exec_command([prog] + sys.argv) + + ver = sys.version_info + major = ver.major + minor = ver.minor + + # Abort on very old Python 2 versions. + if (major, minor) < (2, 7): + print('repo: error: Your Python version is too old. ' + 'Please use Python {}.{} or newer instead.'.format( + *MIN_PYTHON_VERSION_SOFT), file=sys.stderr) + sys.exit(1) + + # Try to re-exec the version specific Python 3 if needed. + if (major, minor) < MIN_PYTHON_VERSION_SOFT: + # Python makes releases ~once a year, so try our min version +10 to help + # bridge the gap. This is the fallback anyways so perf isn't critical. + min_major, min_minor = MIN_PYTHON_VERSION_SOFT + for inc in range(0, 10): + reexec('python{}.{}'.format(min_major, min_minor + inc)) + + # Fallback to older versions if possible. + for inc in range(MIN_PYTHON_VERSION_SOFT[1] - MIN_PYTHON_VERSION_HARD[1], 0, -1): + # Don't downgrade, and don't reexec ourselves (which would infinite loop). + if (min_major, min_minor - inc) <= (major, minor): + break + reexec('python{}.{}'.format(min_major, min_minor - inc)) + + # Try the generic Python 3 wrapper, but only if it's new enough. If it + # isn't, we want to just give up below and make the user resolve things. + try: + proc = subprocess.Popen( + ['python3', '-c', 'import sys; ' + 'print(sys.version_info.major, sys.version_info.minor)'], + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + (output, _) = proc.communicate() + python3_ver = tuple(int(x) for x in output.decode('utf-8').split()) + except (OSError, subprocess.CalledProcessError): + python3_ver = None + + # If the python3 version looks like it's new enough, give it a try. + if (python3_ver and python3_ver >= MIN_PYTHON_VERSION_HARD + and python3_ver != (major, minor)): + reexec('python3') + + # We're still here, so diagnose things for the user. + if major < 3: + print('repo: error: Python 2 is no longer supported; ' + 'Please upgrade to Python {}.{}+.'.format(*MIN_PYTHON_VERSION_HARD), + file=sys.stderr) + sys.exit(1) + elif (major, minor) < MIN_PYTHON_VERSION_HARD: + print('repo: error: Python 3 version is too old; ' + 'Please use Python {}.{} or newer.'.format(*MIN_PYTHON_VERSION_HARD), + file=sys.stderr) + sys.exit(1) + + +if __name__ == '__main__': + check_python_version() + + +# repo default configuration +# +REPO_URL = os.environ.get('REPO_URL', None) +if not REPO_URL: + REPO_URL = 'https://gerrit.googlesource.com/git-repo' +REPO_REV = os.environ.get('REPO_REV') +if not REPO_REV: + REPO_REV = 'stable' +# URL to file bug reports for repo tool issues. +BUG_URL = 'https://bugs.chromium.org/p/gerrit/issues/entry?template=Repo+tool+issue' + +# increment this whenever we make important changes to this script +VERSION = (2, 21) + +# increment this if the MAINTAINER_KEYS block is modified +KEYRING_VERSION = (2, 3) + +# Each individual key entry is created by using: +# gpg --armor --export keyid +MAINTAINER_KEYS = """ + + Repo Maintainer +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQGiBEj3ugERBACrLJh/ZPyVSKeClMuznFIrsQ+hpNnmJGw1a9GXKYKk8qHPhAZf +WKtrBqAVMNRLhL85oSlekRz98u41H5si5zcuv+IXJDF5MJYcB8f22wAy15lUqPWi +VCkk1l8qqLiuW0fo+ZkPY5qOgrvc0HW1SmdH649uNwqCbcKb6CxaTxzhOwCgj3AP +xI1WfzLqdJjsm1Nq98L0cLcD/iNsILCuw44PRds3J75YP0pze7YF/6WFMB6QSFGu +aUX1FsTTztKNXGms8i5b2l1B8JaLRWq/jOnZzyl1zrUJhkc0JgyZW5oNLGyWGhKD +Fxp5YpHuIuMImopWEMFIRQNrvlg+YVK8t3FpdI1RY0LYqha8pPzANhEYgSfoVzOb +fbfbA/4ioOrxy8ifSoga7ITyZMA+XbW8bx33WXutO9N7SPKS/AK2JpasSEVLZcON +ae5hvAEGVXKxVPDjJBmIc2cOe7kOKSi3OxLzBqrjS2rnjiP4o0ekhZIe4+ocwVOg +e0PLlH5avCqihGRhpoqDRsmpzSHzJIxtoeb+GgGEX8KkUsVAhbQpUmVwbyBNYWlu +dGFpbmVyIDxyZXBvQGFuZHJvaWQua2VybmVsLm9yZz6IYAQTEQIAIAUCSPe6AQIb +AwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEBZTDV6SD1xl1GEAn0x/OKQpy7qI +6G73NJviU0IUMtftAKCFMUhGb/0bZvQ8Rm3QCUpWHyEIu7kEDQRI97ogEBAA2wI6 +5fs9y/rMwD6dkD/vK9v4C9mOn1IL5JCPYMJBVSci+9ED4ChzYvfq7wOcj9qIvaE0 +GwCt2ar7Q56me5J+byhSb32Rqsw/r3Vo5cZMH80N4cjesGuSXOGyEWTe4HYoxnHv +gF4EKI2LK7xfTUcxMtlyn52sUpkfKsCpUhFvdmbAiJE+jCkQZr1Z8u2KphV79Ou+ +P1N5IXY/XWOlq48Qf4MWCYlJFrB07xjUjLKMPDNDnm58L5byDrP/eHysKexpbakL +xCmYyfT6DV1SWLblpd2hie0sL3YejdtuBMYMS2rI7Yxb8kGuqkz+9l1qhwJtei94 +5MaretDy/d/JH/pRYkRf7L+ke7dpzrP+aJmcz9P1e6gq4NJsWejaALVASBiioqNf +QmtqSVzF1wkR5avZkFHuYvj6V/t1RrOZTXxkSk18KFMJRBZrdHFCWbc5qrVxUB6e +N5pja0NFIUCigLBV1c6I2DwiuboMNh18VtJJh+nwWeez/RueN4ig59gRTtkcc0PR +35tX2DR8+xCCFVW/NcJ4PSePYzCuuLvp1vEDHnj41R52Fz51hgddT4rBsp0nL+5I +socSOIIezw8T9vVzMY4ArCKFAVu2IVyBcahTfBS8q5EM63mONU6UVJEozfGljiMw +xuQ7JwKcw0AUEKTKG7aBgBaTAgT8TOevpvlw91cAAwUP/jRkyVi/0WAb0qlEaq/S +ouWxX1faR+vU3b+Y2/DGjtXQMzG0qpetaTHC/AxxHpgt/dCkWI6ljYDnxgPLwG0a +Oasm94BjZc6vZwf1opFZUKsjOAAxRxNZyjUJKe4UZVuMTk6zo27Nt3LMnc0FO47v +FcOjRyquvgNOS818irVHUf12waDx8gszKxQTTtFxU5/ePB2jZmhP6oXSe4K/LG5T ++WBRPDrHiGPhCzJRzm9BP0lTnGCAj3o9W90STZa65RK7IaYpC8TB35JTBEbrrNCp +w6lzd74LnNEp5eMlKDnXzUAgAH0yzCQeMl7t33QCdYx2hRs2wtTQSjGfAiNmj/WW +Vl5Jn+2jCDnRLenKHwVRFsBX2e0BiRWt/i9Y8fjorLCXVj4z+7yW6DawdLkJorEo +p3v5ILwfC7hVx4jHSnOgZ65L9s8EQdVr1ckN9243yta7rNgwfcqb60ILMFF1BRk/ +0V7wCL+68UwwiQDvyMOQuqkysKLSDCLb7BFcyA7j6KG+5hpsREstFX2wK1yKeraz +5xGrFy8tfAaeBMIQ17gvFSp/suc9DYO0ICK2BISzq+F+ZiAKsjMYOBNdH/h0zobQ +HTHs37+/QLMomGEGKZMWi0dShU2J5mNRQu3Hhxl3hHDVbt5CeJBb26aQcQrFz69W +zE3GNvmJosh6leayjtI9P2A6iEkEGBECAAkFAkj3uiACGwwACgkQFlMNXpIPXGWp +TACbBS+Up3RpfYVfd63c1cDdlru13pQAn3NQy/SN858MkxN+zym86UBgOad2uQIN +BF5FqOoBEAC8aRtWEtXzeuoQhdFrLTqYs2dy6kl9y+j3DMQYAMs8je582qzUigIO +ZZxq7T/3WQgghsdw9yPvdzlw9tKdet2TJkR1mtBfSjZQrkKwR0pQP4AD7t/90Whu +R8Wlu8ysapE2hLxMH5Y2znRQX2LkUYmk0K2ik9AgZEh3AFEg3YLl2pGnSjeSp3ch +cLX2n/rVZf5LXluZGRG+iov1Ka+8m+UqzohMA1DYNECJW6KPgXsNX++i8/iwZVic +PWzhRJSQC+QiAZNsKT6HNNKs97YCUVzhjBLnRSxRBPkr0hS/VMWY2V4pbASljWyd +GYmlDcxheLne0yjes0bJAdvig5rB42FOV0FCM4bDYOVwKfZ7SpzGCYXxtlwe0XNG +tLW9WA6tICVqNZ/JNiRTBLrsGSkyrEhDPKnIHlHRI5Zux6IHwMVB0lQKHjSop+t6 +oyubqWcPCGGYdz2QGQHNz7huC/Zn0wS4hsoiSwPv6HCq3jNyUkOJ7wZ3ouv60p2I +kPurgviVaRaPSKTYdKfkcJOtFeqOh1na5IHkXsD9rNctB7tSgfsm0G6qJIVe3ZmJ +7QAyHBfuLrAWCq5xS8EHDlvxPdAD8EEsa9T32YxcHKIkxr1eSwrUrKb8cPhWq1pp +Jiylw6G1fZ02VKixqmPC4oFMyg1PO8L2tcQTrnVmZvfFGiaekHKdhQARAQABiQKW +BBgRAgAgFiEEi7mteT6OYVOvD5pEFlMNXpIPXGUFAl5FqOoCGwICQAkQFlMNXpIP +XGXBdCAEGQEKAB0WIQSjShO+jna/9GoMAi2i51qCSquWJAUCXkWo6gAKCRCi51qC +SquWJLzgD/0YEZYS7yKxhP+kk94TcTYMBMSZpU5KFClB77yu4SI1LeXq4ocBT4sp +EPaOsQiIx//j59J67b7CBe4UeRA6D2n0pw+bCKuc731DFi5X9C1zq3a7E67SQ2yd +FbYE2fnpVnMqb62g4sTh7JmdxEtXCWBUWL0OEoWouBW1PkFDHx2kYLC7YpZt3+4t +VtNhSfV8NS6PF8ep3JXHVd2wsC3DQtggeId5GM44o8N0SkwQHNjK8ZD+VZ74ZnhZ +HeyHskomiOC61LrZWQvxD6VqtfnBQ5GvONO8QuhkiFwMMOnpPVj2k7ngSkd5o27K +6c53ZESOlR4bAfl0i3RZYC9B5KerGkBE3dTgTzmGjOaahl2eLz4LDPdTwMtS+sAU +1hPPvZTQeYDdV62bOWUyteMoJu354GgZPQ9eItWYixpNCyOGNcJXl6xk3/OuoP6f +MciFV8aMxs/7mUR8q1Ei3X9MKu+bbODYj2rC1tMkLj1OaAJkfvRuYrKsQpoUsn4q +VT9+aciNpU/I7M30watlWo7RfUFI3zaGdMDcMFju1cWt2Un8E3gtscGufzbz1Z5Z +Gak+tCOWUyuYNWX3noit7Dk6+3JGHGaQettldNu2PLM9SbIXd2EaqK/eEv9BS3dd +ItkZwzyZXSaQ9UqAceY1AHskJJ5KVXIRLuhP5jBWWo3fnRMyMYt2nwNBAJ9B9TA8 +VlBniwIl5EzCvOFOTGrtewCdHOvr3N3ieypGz1BzyCN9tJMO3G24MwReRal9Fgkr +BgEEAdpHDwEBB0BhPE/je6OuKgWzJ1mnrUmHhn4IMOHp+58+T5kHU3Oy6YjXBBgR +AgAgFiEEi7mteT6OYVOvD5pEFlMNXpIPXGUFAl5FqX0CGwIAgQkQFlMNXpIPXGV2 +IAQZFggAHRYhBOH5BA16P22vrIl809O5XaJD5Io5BQJeRal9AAoJENO5XaJD5Io5 +MEkA/3uLmiwANOcgE0zB9zga0T/KkYhYOWFx7zRyDhrTf9spAPwIfSBOAGtwxjLO +DCce5OaQJl/YuGHvXq2yx5h7T8pdAZ+PAJ4qfIk2LLSidsplTDXOKhOQAuOqUQCf +cZ7aFsJF4PtcDrfdejyAxbtsSHI= +=82Tj +-----END PGP PUBLIC KEY BLOCK----- +""" + +GIT = 'git' # our git command +# NB: The version of git that the repo launcher requires may be much older than +# the version of git that the main repo source tree requires. Keeping this at +# an older version also makes it easier for users to upgrade/rollback as needed. +# +# git-1.7 is in (EOL) Ubuntu Precise. +MIN_GIT_VERSION = (1, 7, 2) # minimum supported git version +repodir = '.repo' # name of repo's private directory +S_repo = 'repo' # special repo repository +S_manifests = 'manifests' # special manifest repository +REPO_MAIN = S_repo + '/main.py' # main script +GITC_CONFIG_FILE = '/gitc/.config' +GITC_FS_ROOT_DIR = '/gitc/manifest-rw/' + + +import collections +import errno +import json +import optparse +import re +import shutil +import stat + +if sys.version_info[0] == 3: + import urllib.request + import urllib.error +else: + import imp + import urllib2 + urllib = imp.new_module('urllib') + urllib.request = urllib2 + urllib.error = urllib2 + + +home_dot_repo = os.path.expanduser('~/.repoconfig') +gpg_dir = os.path.join(home_dot_repo, 'gnupg') + + +def GetParser(gitc_init=False): + """Setup the CLI parser.""" + if gitc_init: + usage = 'repo gitc-init -c client [options] [-u] url' + else: + usage = 'repo init [options] [-u] url' + + parser = optparse.OptionParser(usage=usage) + InitParser(parser, gitc_init=gitc_init) + return parser + + +def InitParser(parser, gitc_init=False): + """Setup the CLI parser.""" + # NB: Keep in sync with command.py:_CommonOptions(). + + # Logging. + group = parser.add_option_group('Logging options') + group.add_option('-v', '--verbose', + dest='output_mode', action='store_true', + help='show all output') + group.add_option('-q', '--quiet', + dest='output_mode', action='store_false', + help='only show errors') + + # Manifest. + group = parser.add_option_group('Manifest options') + group.add_option('-u', '--manifest-url', + help='manifest repository location', metavar='URL') + group.add_option('-b', '--manifest-branch', metavar='REVISION', + help='manifest branch or revision (use HEAD for default)') + group.add_option('-m', '--manifest-name', default='default.xml', + help='initial manifest file', metavar='NAME.xml') + group.add_option('-g', '--groups', default='default', + help='restrict manifest projects to ones with specified ' + 'group(s) [default|all|G1,G2,G3|G4,-G5,-G6]', + metavar='GROUP') + group.add_option('-p', '--platform', default='auto', + help='restrict manifest projects to ones with a specified ' + 'platform group [auto|all|none|linux|darwin|...]', + metavar='PLATFORM') + group.add_option('--submodules', action='store_true', + help='sync any submodules associated with the manifest repo') + group.add_option('--standalone-manifest', action='store_true', + help='download the manifest as a static file ' + 'rather then create a git checkout of ' + 'the manifest repo') + + # Options that only affect manifest project, and not any of the projects + # specified in the manifest itself. + group = parser.add_option_group('Manifest (only) checkout options') + cbr_opts = ['--current-branch'] + # The gitc-init subcommand allocates -c itself, but a lot of init users + # want -c, so try to satisfy both as best we can. + if not gitc_init: + cbr_opts += ['-c'] + group.add_option(*cbr_opts, + dest='current_branch_only', action='store_true', + help='fetch only current manifest branch from server') + group.add_option('--no-current-branch', + dest='current_branch_only', action='store_false', + help='fetch all manifest branches from server') + group.add_option('--tags', + action='store_true', + help='fetch tags in the manifest') + group.add_option('--no-tags', + dest='tags', action='store_false', + help="don't fetch tags in the manifest") + + # These are fundamentally different ways of structuring the checkout. + group = parser.add_option_group('Checkout modes') + group.add_option('--mirror', action='store_true', + help='create a replica of the remote repositories ' + 'rather than a client working directory') + group.add_option('--archive', action='store_true', + help='checkout an archive instead of a git repository for ' + 'each project. See git archive.') + group.add_option('--worktree', action='store_true', + help='use git-worktree to manage projects') + + # These are fundamentally different ways of structuring the checkout. + group = parser.add_option_group('Project checkout optimizations') + group.add_option('--reference', + help='location of mirror directory', metavar='DIR') + group.add_option('--dissociate', action='store_true', + help='dissociate from reference mirrors after clone') + group.add_option('--depth', type='int', default=None, + help='create a shallow clone with given depth; ' + 'see git clone') + group.add_option('--partial-clone', action='store_true', + help='perform partial clone (https://git-scm.com/' + 'docs/gitrepository-layout#_code_partialclone_code)') + group.add_option('--no-partial-clone', action='store_false', + help='disable use of partial clone (https://git-scm.com/' + 'docs/gitrepository-layout#_code_partialclone_code)') + group.add_option('--partial-clone-exclude', action='store', + help='exclude the specified projects (a comma-delimited ' + 'project names) from partial clone (https://git-scm.com' + '/docs/gitrepository-layout#_code_partialclone_code)') + group.add_option('--clone-filter', action='store', default='blob:none', + help='filter for use with --partial-clone ' + '[default: %default]') + group.add_option('--use-superproject', action='store_true', default=None, + help='use the manifest superproject to sync projects; implies -c') + group.add_option('--no-use-superproject', action='store_false', + dest='use_superproject', + help='disable use of manifest superprojects') + group.add_option('--clone-bundle', action='store_true', + help='enable use of /clone.bundle on HTTP/HTTPS ' + '(default if not --partial-clone)') + group.add_option('--no-clone-bundle', + dest='clone_bundle', action='store_false', + help='disable use of /clone.bundle on HTTP/HTTPS (default if --partial-clone)') + group.add_option('--git-lfs', action='store_true', + help='enable Git LFS support') + group.add_option('--no-git-lfs', + dest='git_lfs', action='store_false', + help='disable Git LFS support') + + # Tool. + group = parser.add_option_group('repo Version options') + group.add_option('--repo-url', metavar='URL', + help='repo repository location ($REPO_URL)') + group.add_option('--repo-rev', metavar='REV', + help='repo branch or revision ($REPO_REV)') + group.add_option('--repo-branch', dest='repo_rev', + help=optparse.SUPPRESS_HELP) + group.add_option('--no-repo-verify', + dest='repo_verify', default=True, action='store_false', + help='do not verify repo source code') + + # Other. + group = parser.add_option_group('Other options') + group.add_option('--config-name', + action='store_true', default=False, + help='Always prompt for name/e-mail') + + # gitc-init specific settings. + if gitc_init: + group = parser.add_option_group('GITC options') + group.add_option('-f', '--manifest-file', + help='Optional manifest file to use for this GITC client.') + group.add_option('-c', '--gitc-client', + help='Name of the gitc_client instance to create or modify.') + + return parser + + +# This is a poor replacement for subprocess.run until we require Python 3.6+. +RunResult = collections.namedtuple( + 'RunResult', ('returncode', 'stdout', 'stderr')) + + +class RunError(Exception): + """Error when running a command failed.""" + + +def run_command(cmd, **kwargs): + """Run |cmd| and return its output.""" + check = kwargs.pop('check', False) + if kwargs.pop('capture_output', False): + kwargs.setdefault('stdout', subprocess.PIPE) + kwargs.setdefault('stderr', subprocess.PIPE) + cmd_input = kwargs.pop('input', None) + + def decode(output): + """Decode |output| to text.""" + if output is None: + return output + try: + return output.decode('utf-8') + except UnicodeError: + print('repo: warning: Invalid UTF-8 output:\ncmd: %r\n%r' % (cmd, output), + file=sys.stderr) + # TODO(vapier): Once we require Python 3, use 'backslashreplace'. + return output.decode('utf-8', 'replace') + + # Run & package the results. + proc = subprocess.Popen(cmd, **kwargs) + (stdout, stderr) = proc.communicate(input=cmd_input) + dbg = ': ' + ' '.join(cmd) + if cmd_input is not None: + dbg += ' 0<|' + if stdout == subprocess.PIPE: + dbg += ' 1>|' + if stderr == subprocess.PIPE: + dbg += ' 2>|' + elif stderr == subprocess.STDOUT: + dbg += ' 2>&1' + trace.print(dbg) + ret = RunResult(proc.returncode, decode(stdout), decode(stderr)) + + # If things failed, print useful debugging output. + if check and ret.returncode: + print('repo: error: "%s" failed with exit status %s' % + (cmd[0], ret.returncode), file=sys.stderr) + print(' cwd: %s\n cmd: %r' % + (kwargs.get('cwd', os.getcwd()), cmd), file=sys.stderr) + + def _print_output(name, output): + if output: + print(' %s:\n >> %s' % (name, '\n >> '.join(output.splitlines())), + file=sys.stderr) + + _print_output('stdout', ret.stdout) + _print_output('stderr', ret.stderr) + raise RunError(ret) + + return ret + + +_gitc_manifest_dir = None + + +def get_gitc_manifest_dir(): + global _gitc_manifest_dir + if _gitc_manifest_dir is None: + _gitc_manifest_dir = '' + try: + with open(GITC_CONFIG_FILE, 'r') as gitc_config: + for line in gitc_config: + match = re.match('gitc_dir=(?P.*)', line) + if match: + _gitc_manifest_dir = match.group('gitc_manifest_dir') + except IOError: + pass + return _gitc_manifest_dir + + +def gitc_parse_clientdir(gitc_fs_path): + """Parse a path in the GITC FS and return its client name. + + Args: + gitc_fs_path: A subdirectory path within the GITC_FS_ROOT_DIR. + + Returns: + The GITC client name. + """ + if gitc_fs_path == GITC_FS_ROOT_DIR: + return None + if not gitc_fs_path.startswith(GITC_FS_ROOT_DIR): + manifest_dir = get_gitc_manifest_dir() + if manifest_dir == '': + return None + if manifest_dir[-1] != '/': + manifest_dir += '/' + if gitc_fs_path == manifest_dir: + return None + if not gitc_fs_path.startswith(manifest_dir): + return None + return gitc_fs_path.split(manifest_dir)[1].split('/')[0] + return gitc_fs_path.split(GITC_FS_ROOT_DIR)[1].split('/')[0] + + +class CloneFailure(Exception): + + """Indicate the remote clone of repo itself failed. + """ + + +def check_repo_verify(repo_verify, quiet=False): + """Check the --repo-verify state.""" + if not repo_verify: + print('repo: warning: verification of repo code has been disabled;\n' + 'repo will not be able to verify the integrity of itself.\n', + file=sys.stderr) + return False + + if NeedSetupGnuPG(): + return SetupGnuPG(quiet) + + return True + + +def check_repo_rev(dst, rev, repo_verify=True, quiet=False): + """Check that |rev| is valid.""" + do_verify = check_repo_verify(repo_verify, quiet=quiet) + remote_ref, local_rev = resolve_repo_rev(dst, rev) + if not quiet and not remote_ref.startswith('refs/heads/'): + print('warning: repo is not tracking a remote branch, so it will not ' + 'receive updates', file=sys.stderr) + if do_verify: + rev = verify_rev(dst, remote_ref, local_rev, quiet) + else: + rev = local_rev + return (remote_ref, rev) + + +def _Init(args, gitc_init=False): + """Installs repo by cloning it over the network. + """ + parser = GetParser(gitc_init=gitc_init) + opt, args = parser.parse_args(args) + if args: + if not opt.manifest_url: + opt.manifest_url = args.pop(0) + if args: + parser.print_usage() + sys.exit(1) + opt.quiet = opt.output_mode is False + opt.verbose = opt.output_mode is True + + if opt.clone_bundle is None: + opt.clone_bundle = False if opt.partial_clone else True + + url = opt.repo_url or REPO_URL + rev = opt.repo_rev or REPO_REV + + try: + if gitc_init: + gitc_manifest_dir = get_gitc_manifest_dir() + if not gitc_manifest_dir: + print('fatal: GITC filesystem is not available. Exiting...', + file=sys.stderr) + sys.exit(1) + gitc_client = opt.gitc_client + if not gitc_client: + gitc_client = gitc_parse_clientdir(os.getcwd()) + if not gitc_client: + print('fatal: GITC client (-c) is required.', file=sys.stderr) + sys.exit(1) + client_dir = os.path.join(gitc_manifest_dir, gitc_client) + if not os.path.exists(client_dir): + os.makedirs(client_dir) + os.chdir(client_dir) + if os.path.exists(repodir): + # This GITC Client has already initialized repo so continue. + return + + os.mkdir(repodir) + except OSError as e: + if e.errno != errno.EEXIST: + print('fatal: cannot make %s directory: %s' + % (repodir, e.strerror), file=sys.stderr) + # Don't raise CloneFailure; that would delete the + # name. Instead exit immediately. + # + sys.exit(1) + + _CheckGitVersion() + try: + if not opt.quiet: + print('Downloading Repo source from', url) + dst = os.path.abspath(os.path.join(repodir, S_repo)) + _Clone(url, dst, opt.clone_bundle, opt.quiet, opt.verbose) + + remote_ref, rev = check_repo_rev(dst, rev, opt.repo_verify, quiet=opt.quiet) + _Checkout(dst, remote_ref, rev, opt.quiet) + + if not os.path.isfile(os.path.join(dst, 'repo')): + print("warning: '%s' does not look like a git-repo repository, is " + "REPO_URL set correctly?" % url, file=sys.stderr) + + except CloneFailure: + print('fatal: double check your --repo-rev setting.', file=sys.stderr) + if opt.quiet: + print('fatal: repo init failed; run without --quiet to see why', + file=sys.stderr) + raise + + +def run_git(*args, **kwargs): + """Run git and return execution details.""" + kwargs.setdefault('capture_output', True) + kwargs.setdefault('check', True) + try: + return run_command([GIT] + list(args), **kwargs) + except OSError as e: + print(file=sys.stderr) + print('repo: error: "%s" is not available' % GIT, file=sys.stderr) + print('repo: error: %s' % e, file=sys.stderr) + print(file=sys.stderr) + print('Please make sure %s is installed and in your path.' % GIT, + file=sys.stderr) + sys.exit(1) + except RunError: + raise CloneFailure() + + +# The git version info broken down into components for easy analysis. +# Similar to Python's sys.version_info. +GitVersion = collections.namedtuple( + 'GitVersion', ('major', 'minor', 'micro', 'full')) + + +def ParseGitVersion(ver_str=None): + if ver_str is None: + # Load the version ourselves. + ver_str = run_git('--version').stdout + + if not ver_str.startswith('git version '): + return None + + full_version = ver_str[len('git version '):].strip() + num_ver_str = full_version.split('-')[0] + to_tuple = [] + for num_str in num_ver_str.split('.')[:3]: + if num_str.isdigit(): + to_tuple.append(int(num_str)) + else: + to_tuple.append(0) + to_tuple.append(full_version) + return GitVersion(*to_tuple) + + +def _CheckGitVersion(): + ver_act = ParseGitVersion() + if ver_act is None: + print('fatal: unable to detect git version', file=sys.stderr) + raise CloneFailure() + + if ver_act < MIN_GIT_VERSION: + need = '.'.join(map(str, MIN_GIT_VERSION)) + print('fatal: git %s or later required; found %s' % (need, ver_act.full), + file=sys.stderr) + raise CloneFailure() + + +def SetGitTrace2ParentSid(env=None): + """Set up GIT_TRACE2_PARENT_SID for git tracing.""" + # We roughly follow the format git itself uses in trace2/tr2_sid.c. + # (1) Be unique (2) be valid filename (3) be fixed length. + # + # Since we always export this variable, we try to avoid more expensive calls. + # e.g. We don't attempt hostname lookups or hashing the results. + if env is None: + env = os.environ + + KEY = 'GIT_TRACE2_PARENT_SID' + + now = datetime.datetime.utcnow() + value = 'repo-%s-P%08x' % (now.strftime('%Y%m%dT%H%M%SZ'), os.getpid()) + + # If it's already set, then append ourselves. + if KEY in env: + value = env[KEY] + '/' + value + + _setenv(KEY, value, env=env) + + +def _setenv(key, value, env=None): + """Set |key| in the OS environment |env| to |value|.""" + if env is None: + env = os.environ + # Environment handling across systems is messy. + try: + env[key] = value + except UnicodeEncodeError: + env[key] = value.encode() + + +def NeedSetupGnuPG(): + if not os.path.isdir(home_dot_repo): + return True + + kv = os.path.join(home_dot_repo, 'keyring-version') + if not os.path.exists(kv): + return True + + kv = open(kv).read() + if not kv: + return True + + kv = tuple(map(int, kv.split('.'))) + if kv < KEYRING_VERSION: + return True + return False + + +def SetupGnuPG(quiet): + try: + os.mkdir(home_dot_repo) + except OSError as e: + if e.errno != errno.EEXIST: + print('fatal: cannot make %s directory: %s' + % (home_dot_repo, e.strerror), file=sys.stderr) + sys.exit(1) + + try: + os.mkdir(gpg_dir, stat.S_IRWXU) + except OSError as e: + if e.errno != errno.EEXIST: + print('fatal: cannot make %s directory: %s' % (gpg_dir, e.strerror), + file=sys.stderr) + sys.exit(1) + + if not quiet: + print('repo: Updating release signing keys to keyset ver %s' % + ('.'.join(str(x) for x in KEYRING_VERSION),)) + # NB: We use --homedir (and cwd below) because some environments (Windows) do + # not correctly handle full native paths. We avoid the issue by changing to + # the right dir with cwd=gpg_dir before executing gpg, and then telling gpg to + # use the cwd (.) as its homedir which leaves the path resolution logic to it. + cmd = ['gpg', '--homedir', '.', '--import'] + try: + # gpg can be pretty chatty. Always capture the output and if something goes + # wrong, the builtin check failure will dump stdout & stderr for debugging. + run_command(cmd, stdin=subprocess.PIPE, capture_output=True, + cwd=gpg_dir, check=True, + input=MAINTAINER_KEYS.encode('utf-8')) + except OSError: + if not quiet: + print('warning: gpg (GnuPG) is not available.', file=sys.stderr) + print('warning: Installing it is strongly encouraged.', file=sys.stderr) + print(file=sys.stderr) + return False + + with open(os.path.join(home_dot_repo, 'keyring-version'), 'w') as fd: + fd.write('.'.join(map(str, KEYRING_VERSION)) + '\n') + return True + + +def _SetConfig(cwd, name, value): + """Set a git configuration option to the specified value. + """ + run_git('config', name, value, cwd=cwd) + + +def _GetRepoConfig(name): + """Read a repo configuration option.""" + config = os.path.join(home_dot_repo, 'config') + if not os.path.exists(config): + return None + + cmd = ['config', '--file', config, '--get', name] + ret = run_git(*cmd, check=False) + if ret.returncode == 0: + return ret.stdout + elif ret.returncode == 1: + return None + else: + print('repo: error: git %s failed:\n%s' % (' '.join(cmd), ret.stderr), + file=sys.stderr) + raise RunError() + + +def _InitHttp(): + handlers = [] + + mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm() + try: + import netrc + n = netrc.netrc() + for host in n.hosts: + p = n.hosts[host] + mgr.add_password(p[1], 'http://%s/' % host, p[0], p[2]) + mgr.add_password(p[1], 'https://%s/' % host, p[0], p[2]) + except Exception: + pass + handlers.append(urllib.request.HTTPBasicAuthHandler(mgr)) + handlers.append(urllib.request.HTTPDigestAuthHandler(mgr)) + + if 'http_proxy' in os.environ: + url = os.environ['http_proxy'] + handlers.append(urllib.request.ProxyHandler({'http': url, 'https': url})) + if 'REPO_CURL_VERBOSE' in os.environ: + handlers.append(urllib.request.HTTPHandler(debuglevel=1)) + handlers.append(urllib.request.HTTPSHandler(debuglevel=1)) + urllib.request.install_opener(urllib.request.build_opener(*handlers)) + + +def _Fetch(url, cwd, src, quiet, verbose): + cmd = ['fetch'] + if not verbose: + cmd.append('--quiet') + err = None + if not quiet and sys.stdout.isatty(): + cmd.append('--progress') + elif not verbose: + err = subprocess.PIPE + cmd.append(src) + cmd.append('+refs/heads/*:refs/remotes/origin/*') + cmd.append('+refs/tags/*:refs/tags/*') + run_git(*cmd, stderr=err, capture_output=False, cwd=cwd) + + +def _DownloadBundle(url, cwd, quiet, verbose): + if not url.endswith('/'): + url += '/' + url += 'clone.bundle' + + ret = run_git('config', '--get-regexp', 'url.*.insteadof', cwd=cwd, + check=False) + for line in ret.stdout.splitlines(): + m = re.compile(r'^url\.(.*)\.insteadof (.*)$').match(line) + if m: + new_url = m.group(1) + old_url = m.group(2) + if url.startswith(old_url): + url = new_url + url[len(old_url):] + break + + if not url.startswith('http:') and not url.startswith('https:'): + return False + + dest = open(os.path.join(cwd, '.git', 'clone.bundle'), 'w+b') + try: + try: + r = urllib.request.urlopen(url) + except urllib.error.HTTPError as e: + if e.code not in [400, 401, 403, 404, 501]: + print('warning: Cannot get %s' % url, file=sys.stderr) + print('warning: HTTP error %s' % e.code, file=sys.stderr) + return False + except urllib.error.URLError as e: + print('fatal: Cannot get %s' % url, file=sys.stderr) + print('fatal: error %s' % e.reason, file=sys.stderr) + raise CloneFailure() + try: + if verbose: + print('Downloading clone bundle %s' % url, file=sys.stderr) + while True: + buf = r.read(8192) + if not buf: + return True + dest.write(buf) + finally: + r.close() + finally: + dest.close() + + +def _ImportBundle(cwd): + path = os.path.join(cwd, '.git', 'clone.bundle') + try: + _Fetch(cwd, cwd, path, True, False) + finally: + os.remove(path) + + +def _Clone(url, cwd, clone_bundle, quiet, verbose): + """Clones a git repository to a new subdirectory of repodir + """ + if verbose: + print('Cloning git repository', url) + + try: + os.mkdir(cwd) + except OSError as e: + print('fatal: cannot make %s directory: %s' % (cwd, e.strerror), + file=sys.stderr) + raise CloneFailure() + + run_git('init', '--quiet', cwd=cwd) + + _InitHttp() + _SetConfig(cwd, 'remote.origin.url', url) + _SetConfig(cwd, + 'remote.origin.fetch', + '+refs/heads/*:refs/remotes/origin/*') + if clone_bundle and _DownloadBundle(url, cwd, quiet, verbose): + _ImportBundle(cwd) + _Fetch(url, cwd, 'origin', quiet, verbose) + + +def resolve_repo_rev(cwd, committish): + """Figure out what REPO_REV represents. + + We support: + * refs/heads/xxx: Branch. + * refs/tags/xxx: Tag. + * xxx: Branch or tag or commit. + + Args: + cwd: The git checkout to run in. + committish: The REPO_REV argument to resolve. + + Returns: + A tuple of (remote ref, commit) as makes sense for the committish. + For branches, this will look like ('refs/heads/stable', ). + For tags, this will look like ('refs/tags/v1.0', ). + For commits, this will be (, ). + """ + def resolve(committish): + ret = run_git('rev-parse', '--verify', '%s^{commit}' % (committish,), + cwd=cwd, check=False) + return None if ret.returncode else ret.stdout.strip() + + # An explicit branch. + if committish.startswith('refs/heads/'): + remote_ref = committish + committish = committish[len('refs/heads/'):] + rev = resolve('refs/remotes/origin/%s' % committish) + if rev is None: + print('repo: error: unknown branch "%s"' % (committish,), + file=sys.stderr) + raise CloneFailure() + return (remote_ref, rev) + + # An explicit tag. + if committish.startswith('refs/tags/'): + remote_ref = committish + committish = committish[len('refs/tags/'):] + rev = resolve(remote_ref) + if rev is None: + print('repo: error: unknown tag "%s"' % (committish,), + file=sys.stderr) + raise CloneFailure() + return (remote_ref, rev) + + # See if it's a short branch name. + rev = resolve('refs/remotes/origin/%s' % committish) + if rev: + return ('refs/heads/%s' % (committish,), rev) + + # See if it's a tag. + rev = resolve('refs/tags/%s' % committish) + if rev: + return ('refs/tags/%s' % (committish,), rev) + + # See if it's a commit. + rev = resolve(committish) + if rev and rev.lower().startswith(committish.lower()): + return (rev, rev) + + # Give up! + print('repo: error: unable to resolve "%s"' % (committish,), file=sys.stderr) + raise CloneFailure() + + +def verify_rev(cwd, remote_ref, rev, quiet): + """Verify the commit has been signed by a tag.""" + ret = run_git('describe', rev, cwd=cwd) + cur = ret.stdout.strip() + + m = re.compile(r'^(.*)-[0-9]{1,}-g[0-9a-f]{1,}$').match(cur) + if m: + cur = m.group(1) + if not quiet: + print(file=sys.stderr) + print("warning: '%s' is not signed; falling back to signed release '%s'" + % (remote_ref, cur), file=sys.stderr) + print(file=sys.stderr) + + env = os.environ.copy() + _setenv('GNUPGHOME', gpg_dir, env) + run_git('tag', '-v', cur, cwd=cwd, env=env) + return '%s^0' % cur + + +def _Checkout(cwd, remote_ref, rev, quiet): + """Checkout an upstream branch into the repository and track it. + """ + run_git('update-ref', 'refs/heads/default', rev, cwd=cwd) + + _SetConfig(cwd, 'branch.default.remote', 'origin') + _SetConfig(cwd, 'branch.default.merge', remote_ref) + + run_git('symbolic-ref', 'HEAD', 'refs/heads/default', cwd=cwd) + + cmd = ['read-tree', '--reset', '-u'] + if not quiet: + cmd.append('-v') + cmd.append('HEAD') + run_git(*cmd, cwd=cwd) + + +def _FindRepo(): + """Look for a repo installation, starting at the current directory. + """ + curdir = os.getcwd() + repo = None + + olddir = None + while curdir != olddir and not repo: + repo = os.path.join(curdir, repodir, REPO_MAIN) + if not os.path.isfile(repo): + repo = None + olddir = curdir + curdir = os.path.dirname(curdir) + return (repo, os.path.join(curdir, repodir)) + + +class _Options(object): + help = False + version = False + + +def _ExpandAlias(name): + """Look up user registered aliases.""" + # We don't resolve aliases for existing subcommands. This matches git. + if name in {'gitc-init', 'help', 'init'}: + return name, [] + + alias = _GetRepoConfig('alias.%s' % (name,)) + if alias is None: + return name, [] + + args = alias.strip().split(' ', 1) + name = args[0] + if len(args) == 2: + args = shlex.split(args[1]) + else: + args = [] + return name, args + + +def _ParseArguments(args): + cmd = None + opt = _Options() + arg = [] + + for i in range(len(args)): + a = args[i] + if a == '-h' or a == '--help': + opt.help = True + elif a == '--version': + opt.version = True + elif a == '--trace': + trace.set(True) + elif not a.startswith('-'): + cmd = a + arg = args[i + 1:] + break + return cmd, opt, arg + + +class Requirements(object): + """Helper for checking repo's system requirements.""" + + REQUIREMENTS_NAME = 'requirements.json' + + def __init__(self, requirements): + """Initialize. + + Args: + requirements: A dictionary of settings. + """ + self.requirements = requirements + + @classmethod + def from_dir(cls, path): + return cls.from_file(os.path.join(path, cls.REQUIREMENTS_NAME)) + + @classmethod + def from_file(cls, path): + try: + with open(path, 'rb') as f: + data = f.read() + except EnvironmentError: + # NB: EnvironmentError is used for Python 2 & 3 compatibility. + # If we couldn't open the file, assume it's an old source tree. + return None + + return cls.from_data(data) + + @classmethod + def from_data(cls, data): + comment_line = re.compile(br'^ *#') + strip_data = b''.join(x for x in data.splitlines() if not comment_line.match(x)) + try: + json_data = json.loads(strip_data) + except Exception: # pylint: disable=broad-except + # If we couldn't parse it, assume it's incompatible. + return None + + return cls(json_data) + + def _get_soft_ver(self, pkg): + """Return the soft version for |pkg| if it exists.""" + return self.requirements.get(pkg, {}).get('soft', ()) + + def _get_hard_ver(self, pkg): + """Return the hard version for |pkg| if it exists.""" + return self.requirements.get(pkg, {}).get('hard', ()) + + @staticmethod + def _format_ver(ver): + """Return a dotted version from |ver|.""" + return '.'.join(str(x) for x in ver) + + def assert_ver(self, pkg, curr_ver): + """Verify |pkg|'s |curr_ver| is new enough.""" + curr_ver = tuple(curr_ver) + soft_ver = tuple(self._get_soft_ver(pkg)) + hard_ver = tuple(self._get_hard_ver(pkg)) + if curr_ver < hard_ver: + print('repo: error: Your version of "%s" (%s) is unsupported; ' + 'Please upgrade to at least version %s to continue.' % + (pkg, self._format_ver(curr_ver), self._format_ver(soft_ver)), + file=sys.stderr) + sys.exit(1) + + if curr_ver < soft_ver: + print('repo: warning: Your version of "%s" (%s) is no longer supported; ' + 'Please upgrade to at least version %s to avoid breakage.' % + (pkg, self._format_ver(curr_ver), self._format_ver(soft_ver)), + file=sys.stderr) + + def assert_all(self): + """Assert all of the requirements are satisified.""" + # See if we need a repo launcher upgrade first. + self.assert_ver('repo', VERSION) + + # Check python before we try to import the repo code. + self.assert_ver('python', sys.version_info) + + # Check git while we're at it. + self.assert_ver('git', ParseGitVersion()) + + +def _Usage(): + gitc_usage = "" + if get_gitc_manifest_dir(): + gitc_usage = " gitc-init Initialize a GITC Client.\n" + + print( + """usage: repo COMMAND [ARGS] + +repo is not yet installed. Use "repo init" to install it here. + +The most commonly used repo commands are: + + init Install repo in the current working directory +""" + gitc_usage + + """ help Display detailed help on a command + +For access to the full online help, install repo ("repo init"). +""") + print('Bug reports:', BUG_URL) + sys.exit(0) + + +def _Help(args): + if args: + if args[0] in {'init', 'gitc-init'}: + parser = GetParser(gitc_init=args[0] == 'gitc-init') + parser.print_help() + sys.exit(0) + else: + print("error: '%s' is not a bootstrap command.\n" + ' For access to online help, install repo ("repo init").' + % args[0], file=sys.stderr) + else: + _Usage() + sys.exit(1) + + +def _Version(): + """Show version information.""" + print('') + print('repo launcher version %s' % ('.'.join(str(x) for x in VERSION),)) + print(' (from %s)' % (__file__,)) + print('git %s' % (ParseGitVersion().full,)) + print('Python %s' % sys.version) + uname = platform.uname() + if sys.version_info.major < 3: + # Python 3 returns a named tuple, but Python 2 is simpler. + print(uname) + else: + print('OS %s %s (%s)' % (uname.system, uname.release, uname.version)) + print('CPU %s (%s)' % + (uname.machine, uname.processor if uname.processor else 'unknown')) + print('Bug reports:', BUG_URL) + sys.exit(0) + + +def _NotInstalled(): + print('error: repo is not installed. Use "repo init" to install it here.', + file=sys.stderr) + sys.exit(1) + + +def _NoCommands(cmd): + print("""error: command '%s' requires repo to be installed first. + Use "repo init" to install it here.""" % cmd, file=sys.stderr) + sys.exit(1) + + +def _RunSelf(wrapper_path): + my_dir = os.path.dirname(wrapper_path) + my_main = os.path.join(my_dir, 'main.py') + my_git = os.path.join(my_dir, '.git') + + if os.path.isfile(my_main) and os.path.isdir(my_git): + for name in ['git_config.py', + 'project.py', + 'subcmds']: + if not os.path.exists(os.path.join(my_dir, name)): + return None, None + return my_main, my_git + return None, None + + +def _SetDefaultsTo(gitdir): + global REPO_URL + global REPO_REV + + REPO_URL = gitdir + ret = run_git('--git-dir=%s' % gitdir, 'symbolic-ref', 'HEAD', check=False) + if ret.returncode: + # If we're not tracking a branch (bisect/etc...), then fall back to commit. + print('repo: warning: %s has no current branch; using HEAD' % gitdir, + file=sys.stderr) + try: + ret = run_git('rev-parse', 'HEAD', cwd=gitdir) + except CloneFailure: + print('fatal: %s has invalid HEAD' % gitdir, file=sys.stderr) + sys.exit(1) + + REPO_REV = ret.stdout.strip() + + +def main(orig_args): + cmd, opt, args = _ParseArguments(orig_args) + + # We run this early as we run some git commands ourselves. + SetGitTrace2ParentSid() + + repo_main, rel_repo_dir = None, None + # Don't use the local repo copy, make sure to switch to the gitc client first. + if cmd != 'gitc-init': + repo_main, rel_repo_dir = _FindRepo() + + wrapper_path = os.path.abspath(__file__) + my_main, my_git = _RunSelf(wrapper_path) + + cwd = os.getcwd() + if get_gitc_manifest_dir() and cwd.startswith(get_gitc_manifest_dir()): + print('error: repo cannot be used in the GITC local manifest directory.' + '\nIf you want to work on this GITC client please rerun this ' + 'command from the corresponding client under /gitc/', + file=sys.stderr) + sys.exit(1) + if not repo_main: + # Only expand aliases here since we'll be parsing the CLI ourselves. + # If we had repo_main, alias expansion would happen in main.py. + cmd, alias_args = _ExpandAlias(cmd) + args = alias_args + args + + if opt.help: + _Usage() + if cmd == 'help': + _Help(args) + if opt.version or cmd == 'version': + _Version() + if not cmd: + _NotInstalled() + if cmd == 'init' or cmd == 'gitc-init': + if my_git: + _SetDefaultsTo(my_git) + try: + _Init(args, gitc_init=(cmd == 'gitc-init')) + except CloneFailure: + path = os.path.join(repodir, S_repo) + print("fatal: cloning the git-repo repository failed, will remove " + "'%s' " % path, file=sys.stderr) + shutil.rmtree(path, ignore_errors=True) + sys.exit(1) + repo_main, rel_repo_dir = _FindRepo() + else: + _NoCommands(cmd) + + if my_main: + repo_main = my_main + + if not repo_main: + print("fatal: unable to find repo entry point", file=sys.stderr) + sys.exit(1) + + reqs = Requirements.from_dir(os.path.dirname(repo_main)) + if reqs: + reqs.assert_all() + + ver_str = '.'.join(map(str, VERSION)) + me = [sys.executable, repo_main, + '--repo-dir=%s' % rel_repo_dir, + '--wrapper-version=%s' % ver_str, + '--wrapper-path=%s' % wrapper_path, + '--'] + me.extend(orig_args) + exec_command(me) + print("fatal: unable to start %s" % repo_main, file=sys.stderr) + sys.exit(148) + + +if __name__ == '__main__': + main(sys.argv[1:]) diff --git a/x86_64/extra/reprepro/PKGBUILD b/x86_64/extra/reprepro/PKGBUILD new file mode 100644 index 0000000..ca42a32 --- /dev/null +++ b/x86_64/extra/reprepro/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=reprepro +pkgver=5.3.0 +pkgrel=1 +pkgdesc='Debian package repository producer' +arch=('x86_64') +depends=('db' 'gpgme' 'zlib' 'bzip2' 'xz' 'libarchive' 'libgpg-error') +source=("http://ftp.debian.org/debian/pool/main/r/${pkgname}/${pkgname}_${pkgver}.orig.tar.gz") + +build() { + cd "${pkgname}-${pkgver}" + + ./configure \ + --prefix=/usr + + make +} + + +package() { + cd "${pkgname}-${pkgver}" + + make DESTDIR="${pkgdir}" install +} diff --git a/x86_64/extra/ristretto/PKGBUILD b/x86_64/extra/ristretto/PKGBUILD new file mode 100644 index 0000000..8a132f4 --- /dev/null +++ b/x86_64/extra/ristretto/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=ristretto +pkgver=0.12.1 +xver=0.12 +pkgrel=1 +arch=('x86_64') +depends=(libexif libxfce4ui) +source=(https://archive.xfce.org/src/apps/$pkgname/$xver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/rnnoise/2.patch b/x86_64/extra/rnnoise/2.patch new file mode 100644 index 0000000..ba11107 --- /dev/null +++ b/x86_64/extra/rnnoise/2.patch @@ -0,0 +1,1293 @@ +From aa3d1e09b8dc3ccb74018646f3e4fe04f177de9b Mon Sep 17 00:00:00 2001 +From: Casey Primozic +Date: Sun, 18 Jul 2021 15:43:06 -0700 +Subject: [PATCH 01/10] Optimize + +--- + src/rnn.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++------ + 1 file changed, 53 insertions(+), 6 deletions(-) + +diff --git a/src/rnn.c b/src/rnn.c +index c54958e..9f6816d 100644 +--- a/src/rnn.c ++++ b/src/rnn.c +@@ -106,6 +106,49 @@ void compute_dense(const DenseLayer *layer, float *output, const float *input) + } + } + ++typedef struct { ++ const GRULayer *layer_ptr; ++ float *converted_input_weights; ++ float *converted_recurrent_weights; ++} CachedConvertedWeights; ++ ++CachedConvertedWeights cached_weights[16]; ++ ++CachedConvertedWeights* get_or_initialize_weights(const GRULayer *layer) { ++ // Check to see if an entry already exists in the cache array ++ int empty_ix = 16; ++ for (int i = 0; i < 16; i++) { ++ const GRULayer* layer_ptr = (&cached_weights[i])->layer_ptr; ++ if (layer_ptr == 0) { ++ empty_ix = i; ++ break; ++ } ++ if (layer_ptr == layer) { ++ return &cached_weights[i]; ++ } ++ } ++ ++ if (empty_ix >= 15) { ++ return 0; // should never hit, and we'll def. find out quickly if it does ++ } ++ ++ // Convert + cache weights ++ cached_weights[empty_ix].layer_ptr = layer; ++ int weights_count = 3 * layer->nb_inputs * layer->nb_neurons; ++ cached_weights[empty_ix].converted_input_weights = malloc(weights_count * sizeof(float)); ++ for (int i = 0; i < weights_count; i++) { ++ cached_weights[empty_ix].converted_input_weights[i] = layer->input_weights[i]; ++ } ++ ++ int recurrent_weights_count = layer->nb_neurons * layer->nb_neurons * 3; ++ cached_weights[empty_ix].converted_recurrent_weights = malloc(recurrent_weights_count * sizeof(float)); ++ for (int i = 0; i < recurrent_weights_count; i++) { ++ cached_weights[empty_ix].converted_recurrent_weights[i] = layer->recurrent_weights[i]; ++ } ++ ++ return &cached_weights[empty_ix]; ++} ++ + void compute_gru(const GRULayer *gru, float *state, const float *input) + { + int i, j; +@@ -117,14 +160,18 @@ void compute_gru(const GRULayer *gru, float *state, const float *input) + M = gru->nb_inputs; + N = gru->nb_neurons; + stride = 3*N; ++ ++ // Convert input and recurrent weights into a vector of floats instead of a vector of signed characters. ++ CachedConvertedWeights* converted_weights = get_or_initialize_weights(gru); ++ + for (i=0;ibias[i]; + for (j=0;jinput_weights[j*stride + i]*input[j]; ++ sum += converted_weights->converted_input_weights[j*stride + i]*input[j]; + for (j=0;jrecurrent_weights[j*stride + i]*state[j]; ++ sum += converted_weights->converted_recurrent_weights[j*stride + i]*state[j]; + z[i] = sigmoid_approx(WEIGHTS_SCALE*sum); + } + for (i=0;ibias[N + i]; + for (j=0;jinput_weights[N + j*stride + i]*input[j]; ++ sum += converted_weights->converted_input_weights[N + j*stride + i]*input[j]; + for (j=0;jrecurrent_weights[N + j*stride + i]*state[j]; ++ sum += converted_weights->converted_recurrent_weights[N + j*stride + i]*state[j]; + r[i] = sigmoid_approx(WEIGHTS_SCALE*sum); + } + for (i=0;ibias[2*N + i]; + for (j=0;jinput_weights[2*N + j*stride + i]*input[j]; ++ sum += converted_weights->converted_input_weights[2*N + j*stride + i]*input[j]; + for (j=0;jrecurrent_weights[2*N + j*stride + i]*state[j]*r[j]; ++ sum += converted_weights->converted_recurrent_weights[2*N + j*stride + i]*state[j]*r[j]; + if (gru->activation == ACTIVATION_SIGMOID) sum = sigmoid_approx(WEIGHTS_SCALE*sum); + else if (gru->activation == ACTIVATION_TANH) sum = tansig_approx(WEIGHTS_SCALE*sum); + else if (gru->activation == ACTIVATION_RELU) sum = relu(WEIGHTS_SCALE*sum); +-- +GitLab + + +From 5611925a8b479f137d70644fa00a0c14ebb224ed Mon Sep 17 00:00:00 2001 +From: Casey Primozic +Date: Sun, 18 Jul 2021 16:14:29 -0700 +Subject: [PATCH 02/10] Optimize + +--- + src/rnn.c | 59 +++++++++++++++++++++++++++---------------------------- + 1 file changed, 29 insertions(+), 30 deletions(-) + +diff --git a/src/rnn.c b/src/rnn.c +index 9f6816d..849aca7 100644 +--- a/src/rnn.c ++++ b/src/rnn.c +@@ -166,38 +166,37 @@ void compute_gru(const GRULayer *gru, float *state, const float *input) + + for (i=0;ibias[i]; +- for (j=0;jconverted_input_weights[j*stride + i]*input[j]; +- for (j=0;jconverted_recurrent_weights[j*stride + i]*state[j]; +- z[i] = sigmoid_approx(WEIGHTS_SCALE*sum); +- } +- for (i=0;ibias[N + i]; +- for (j=0;jconverted_input_weights[N + j*stride + i]*input[j]; +- for (j=0;jconverted_recurrent_weights[N + j*stride + i]*state[j]; +- r[i] = sigmoid_approx(WEIGHTS_SCALE*sum); +- } +- for (i=0;ibias[2*N + i]; +- for (j=0;jconverted_input_weights[2*N + j*stride + i]*input[j]; +- for (j=0;jconverted_recurrent_weights[2*N + j*stride + i]*state[j]*r[j]; +- if (gru->activation == ACTIVATION_SIGMOID) sum = sigmoid_approx(WEIGHTS_SCALE*sum); +- else if (gru->activation == ACTIVATION_TANH) sum = tansig_approx(WEIGHTS_SCALE*sum); +- else if (gru->activation == ACTIVATION_RELU) sum = relu(WEIGHTS_SCALE*sum); ++ float z_sum = gru->bias[i]; ++ float r_sum = gru->bias[N + i]; ++ float h_sum = gru->bias[2*N + i]; ++ ++ for (j=0;jconverted_input_weights[j*stride + i]*input[j]; ++ /* Compute reset gate. */ ++ r_sum += converted_weights->converted_input_weights[N + j*stride + i]*input[j]; ++ /* Compute output. */ ++ h_sum += converted_weights->converted_input_weights[2*N + j*stride + i]*input[j]; ++ } ++ for (j=0;jconverted_recurrent_weights[j*stride + i]*state[j]; ++ /* Compute reset gate. */ ++ r_sum += converted_weights->converted_recurrent_weights[N + j*stride + i]*state[j]; ++ /* Compute output. */ ++ h_sum += converted_weights->converted_recurrent_weights[2*N + j*stride + i]*state[j]*r[j]; ++ } ++ ++ z[i] = sigmoid_approx(WEIGHTS_SCALE*z_sum); ++ r[i] = sigmoid_approx(WEIGHTS_SCALE*r_sum); ++ ++ if (gru->activation == ACTIVATION_SIGMOID) h_sum = sigmoid_approx(WEIGHTS_SCALE*h_sum); ++ else if (gru->activation == ACTIVATION_TANH) h_sum = tansig_approx(WEIGHTS_SCALE*h_sum); ++ else if (gru->activation == ACTIVATION_RELU) h_sum = relu(WEIGHTS_SCALE*h_sum); + else *(int*)0=0; +- h[i] = z[i]*state[i] + (1-z[i])*sum; ++ h[i] = z[i]*state[i] + (1-z[i])*h_sum; + } ++ + for (i=0;i +Date: Sun, 18 Jul 2021 18:12:04 -0700 +Subject: [PATCH 03/10] Working SIMD-accelerated `compute_gru` + +--- + src/rnn.c | 193 +++++++++++++++++++++++++++++++++++++++++++++++++----- + 1 file changed, 176 insertions(+), 17 deletions(-) + +diff --git a/src/rnn.c b/src/rnn.c +index 849aca7..093b68e 100644 +--- a/src/rnn.c ++++ b/src/rnn.c +@@ -37,6 +37,7 @@ + #include "rnn.h" + #include "rnn_data.h" + #include ++#include + + static OPUS_INLINE float tansig_approx(float x) + { +@@ -149,7 +150,7 @@ CachedConvertedWeights* get_or_initialize_weights(const GRULayer *layer) { + return &cached_weights[empty_ix]; + } + +-void compute_gru(const GRULayer *gru, float *state, const float *input) ++void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + { + int i, j; + int N, M; +@@ -161,42 +162,200 @@ void compute_gru(const GRULayer *gru, float *state, const float *input) + N = gru->nb_neurons; + stride = 3*N; + +- // Convert input and recurrent weights into a vector of floats instead of a vector of signed characters. +- CachedConvertedWeights* converted_weights = get_or_initialize_weights(gru); ++ int chunk_size = 8; ++ int n_remainder = N % chunk_size; ++ int n_chunk_count = (N - n_remainder) / chunk_size; ++ ++ for (int i_chunk = 0; i_chunk < n_chunk_count; i_chunk++) { ++ // Load i8s ++ __m128i i8_z_sum = _mm_loadu_si128(&gru->bias[i_chunk * chunk_size]); ++ __m128i i8_r_sum = _mm_loadu_si128(&gru->bias[N + (i_chunk * chunk_size)]); ++ // Sign-extend to i32s ++ __m256i i32_z_sum = _mm256_cvtepi8_epi32(i8_z_sum); ++ __m256i i32_r_sum = _mm256_cvtepi8_epi32(i8_r_sum); ++ // Convert to f32s ++ __m256 z_sum = _mm256_cvtepi32_ps(i32_z_sum); ++ __m256 r_sum = _mm256_cvtepi32_ps(i32_r_sum); ++ ++ for (j=0;jinput_weights[j*stride + (i_chunk * chunk_size)]); ++ __m128i r_input_weights_i8 = _mm_loadu_si128(&gru->input_weights[N + j*stride + (i_chunk * chunk_size)]); ++ // Sign-extend to i32s ++ __m256i z_input_weights_i32 = _mm256_cvtepi8_epi32(z_input_weights_i8); ++ __m256i r_input_weights_i32 = _mm256_cvtepi8_epi32(r_input_weights_i8); ++ // Convert to f32s ++ __m256 z_input_weights = _mm256_cvtepi32_ps(z_input_weights_i32); ++ __m256 r_input_weights = _mm256_cvtepi32_ps(r_input_weights_i32); ++ ++ __m256 input_v = _mm256_broadcast_ss(&input[j]); ++ ++ z_sum = _mm256_fmadd_ps(z_input_weights, input_v, z_sum); ++ r_sum = _mm256_fmadd_ps(r_input_weights, input_v, r_sum); ++ } ++ for (j=0;jrecurrent_weights[j*stride + (i_chunk * chunk_size)]); ++ __m128i r_recurrent_weights_i8 = _mm_loadu_si128(&gru->recurrent_weights[N + j*stride + (i_chunk * chunk_size)]); ++ // Sign-extend to i32s ++ __m256i z_recurrent_weights_i32 = _mm256_cvtepi8_epi32(z_recurrent_weights_i8); ++ __m256i r_recurrent_weights_i32 = _mm256_cvtepi8_epi32(r_recurrent_weights_i8); ++ // Convert to f32s ++ __m256 z_recurrent_weights = _mm256_cvtepi32_ps(z_recurrent_weights_i32); ++ __m256 r_recurrent_weights = _mm256_cvtepi32_ps(r_recurrent_weights_i32); ++ ++ __m256 state_v = _mm256_broadcast_ss(&state[j]); ++ ++ z_sum = _mm256_fmadd_ps(z_recurrent_weights, state_v, z_sum); ++ r_sum = _mm256_fmadd_ps(r_recurrent_weights, state_v, r_sum); ++ } ++ ++ // Store sums ++ _mm256_storeu_ps(&z[i_chunk * chunk_size], z_sum); ++ _mm256_storeu_ps(&r[i_chunk * chunk_size], r_sum); ++ } ++ // Remainders ++ for (int i=n_chunk_count*chunk_size; ibias[i]; ++ float r_sum = gru->bias[N + i]; ++ ++ for (j=0;jinput_weights[j*stride + i]*input[j]; ++ /* Compute reset gate. */ ++ r_sum += gru->input_weights[N + j*stride + i]*input[j]; ++ } ++ for (j=0;jrecurrent_weights[j*stride + i]*state[j]; ++ /* Compute reset gate. */ ++ r_sum += gru->recurrent_weights[N + j*stride + i]*state[j]; ++ } ++ ++ z[i] = z_sum; ++ r[i] = r_sum; ++ } ++ // Apply sigmoid to sums ++ for (i=0;ibias[2*N + (i_chunk * chunk_size)]); ++ // Sign-extend to i32s ++ __m256i i32_sum = _mm256_cvtepi8_epi32(i8_sum); ++ // Convert to f32s ++ __m256 sum = _mm256_cvtepi32_ps(i32_sum); ++ ++ for (j=0;jinput_weights[2*N + j*stride + (i_chunk * chunk_size)]); ++ // Sign-extend to i32s ++ __m256i input_weights_i32 = _mm256_cvtepi8_epi32(input_weights_i8); ++ // Convert to f32s ++ __m256 input_weights = _mm256_cvtepi32_ps(input_weights_i32); ++ ++ __m256 input_v = _mm256_broadcast_ss(&input[j]); ++ ++ sum = _mm256_fmadd_ps(input_weights, input_v, sum) ; ++ } ++ ++ for (j=0;jrecurrent_weights[2*N + j*stride + (i_chunk * chunk_size)]); ++ // Sign-extend to i32s ++ __m256i recurrent_weights_i32 = _mm256_cvtepi8_epi32(recurrent_weights_i8); ++ // Convert to f32s ++ __m256 recurrent_weights = _mm256_cvtepi32_ps(recurrent_weights_i32); ++ ++ float state_times_r = state[j] * r[j]; ++ __m256 state_times_r_v = _mm256_broadcast_ss(&state_times_r); ++ ++ sum = _mm256_fmadd_ps(recurrent_weights, state_times_r_v, sum); ++ } + ++ // Store sums ++ _mm256_storeu_ps(&h[i_chunk * chunk_size], sum); ++ } ++ // Remainders ++ for (int i=n_chunk_count*chunk_size; ibias[2*N + i]; ++ for (j=0;jinput_weights[2*N + j*stride + i]*input[j]; ++ for (j=0;jrecurrent_weights[2*N + j*stride + i]*state[j]*r[j]; ++ ++ h[i] = sum; ++ } ++ ++ for (i=0;iactivation == ACTIVATION_SIGMOID) sum = sigmoid_approx(WEIGHTS_SCALE*sum); ++ else if (gru->activation == ACTIVATION_TANH) sum = tansig_approx(WEIGHTS_SCALE*sum); ++ else if (gru->activation == ACTIVATION_RELU) sum = relu(WEIGHTS_SCALE*sum); ++ else *(int*)0=0; ++ h[i] = z[i]*state[i] + (1-z[i])*sum; ++ } ++ for (i=0;inb_inputs; ++ N = gru->nb_neurons; ++ stride = 3*N; + for (i=0;ibias[i]; + float r_sum = gru->bias[N + i]; +- float h_sum = gru->bias[2*N + i]; + + for (j=0;jconverted_input_weights[j*stride + i]*input[j]; ++ z_sum += gru->input_weights[j*stride + i]*input[j]; + /* Compute reset gate. */ +- r_sum += converted_weights->converted_input_weights[N + j*stride + i]*input[j]; +- /* Compute output. */ +- h_sum += converted_weights->converted_input_weights[2*N + j*stride + i]*input[j]; ++ r_sum += gru->input_weights[N + j*stride + i]*input[j]; + } + for (j=0;jconverted_recurrent_weights[j*stride + i]*state[j]; ++ z_sum += gru->recurrent_weights[j*stride + i]*state[j]; + /* Compute reset gate. */ +- r_sum += converted_weights->converted_recurrent_weights[N + j*stride + i]*state[j]; +- /* Compute output. */ +- h_sum += converted_weights->converted_recurrent_weights[2*N + j*stride + i]*state[j]*r[j]; ++ r_sum += gru->recurrent_weights[N + j*stride + i]*state[j]; + } + + z[i] = sigmoid_approx(WEIGHTS_SCALE*z_sum); + r[i] = sigmoid_approx(WEIGHTS_SCALE*r_sum); ++ } + +- if (gru->activation == ACTIVATION_SIGMOID) h_sum = sigmoid_approx(WEIGHTS_SCALE*h_sum); +- else if (gru->activation == ACTIVATION_TANH) h_sum = tansig_approx(WEIGHTS_SCALE*h_sum); +- else if (gru->activation == ACTIVATION_RELU) h_sum = relu(WEIGHTS_SCALE*h_sum); ++ /* Compute output. */ ++ for (i=0;ibias[2*N + i]; ++ for (j=0;jinput_weights[2*N + j*stride + i]*input[j]; ++ for (j=0;jrecurrent_weights[2*N + j*stride + i]*state[j]*r[j]; ++ if (gru->activation == ACTIVATION_SIGMOID) sum = sigmoid_approx(WEIGHTS_SCALE*sum); ++ else if (gru->activation == ACTIVATION_TANH) sum = tansig_approx(WEIGHTS_SCALE*sum); ++ else if (gru->activation == ACTIVATION_RELU) sum = relu(WEIGHTS_SCALE*sum); + else *(int*)0=0; +- h[i] = z[i]*state[i] + (1-z[i])*h_sum; ++ h[i] = z[i]*state[i] + (1-z[i])*sum; + } +- + for (i=0;i +Date: Sun, 18 Jul 2021 20:27:21 -0700 +Subject: [PATCH 04/10] Add compiler flags to build config + optimize biquad + filter + + * Add `-O3 -march=native` to the compiler flags in the autoconf/automake/autoetc. stuff + * Optimize biquad filter implementation +--- + configure.ac | 2 +- + src/compile.sh | 2 +- + src/denoise.c | 12 +++----- + src/rnn.c | 83 +++++++++++++++++++++++++++----------------------- + 4 files changed, 52 insertions(+), 47 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 5ffc7c2..95c2d79 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -47,7 +47,7 @@ AC_SUBST(OP_LT_REVISION) + AC_SUBST(OP_LT_AGE) + + CC_CHECK_CFLAGS_APPEND( +- [-pedantic -Wall -Wextra -Wno-sign-compare -Wno-parentheses -Wno-long-long]) ++ [-O3 -march=native -pedantic -Wall -Wextra -Wno-sign-compare -Wno-parentheses -Wno-long-long]) + + # Platform-specific tweaks + case $host in +diff --git a/src/compile.sh b/src/compile.sh +index 4b2ea53..f9c7cfc 100755 +--- a/src/compile.sh ++++ b/src/compile.sh +@@ -1,3 +1,3 @@ + #!/bin/sh + +-gcc -DTRAINING=1 -Wall -W -O3 -g -I../include denoise.c kiss_fft.c pitch.c celt_lpc.c rnn.c rnn_data.c -o denoise_training -lm ++gcc -DTRAINING=1 -march=native -Wall -W -O3 -g -I../include denoise.c kiss_fft.c pitch.c celt_lpc.c rnn.c rnn_data.c -o denoise_training -lm +diff --git a/src/denoise.c b/src/denoise.c +index 5a62844..a9328ff 100644 +--- a/src/denoise.c ++++ b/src/denoise.c +@@ -408,13 +408,11 @@ static void frame_synthesis(DenoiseState *st, float *out, const kiss_fft_cpx *y) + } + + static void biquad(float *y, float mem[2], const float *x, const float *b, const float *a, int N) { +- int i; +- for (i=0;i +-#include + + static OPUS_INLINE float tansig_approx(float x) + { +@@ -85,22 +84,22 @@ void compute_dense(const DenseLayer *layer, float *output, const float *input) + M = layer->nb_inputs; + N = layer->nb_neurons; + stride = N; +- for (i=0;ibias[i]; +- for (j=0;jinput_weights[j*stride + i]*input[j]; + output[i] = WEIGHTS_SCALE*sum; + } + if (layer->activation == ACTIVATION_SIGMOID) { +- for (i=0;iactivation == ACTIVATION_TANH) { +- for (i=0;iactivation == ACTIVATION_RELU) { +- for (i=0;i ++ + void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + { + int i, j; +@@ -160,7 +166,7 @@ void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + float h[MAX_NEURONS]; + M = gru->nb_inputs; + N = gru->nb_neurons; +- stride = 3*N; ++ stride = 3 * N; + + int chunk_size = 8; + int n_remainder = N % chunk_size; +@@ -177,7 +183,7 @@ void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + __m256 z_sum = _mm256_cvtepi32_ps(i32_z_sum); + __m256 r_sum = _mm256_cvtepi32_ps(i32_r_sum); + +- for (j=0;jinput_weights[j*stride + (i_chunk * chunk_size)]); + __m128i r_input_weights_i8 = _mm_loadu_si128(&gru->input_weights[N + j*stride + (i_chunk * chunk_size)]); +@@ -193,7 +199,7 @@ void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + z_sum = _mm256_fmadd_ps(z_input_weights, input_v, z_sum); + r_sum = _mm256_fmadd_ps(r_input_weights, input_v, r_sum); + } +- for (j=0;jrecurrent_weights[j*stride + (i_chunk * chunk_size)]); + __m128i r_recurrent_weights_i8 = _mm_loadu_si128(&gru->recurrent_weights[N + j*stride + (i_chunk * chunk_size)]); +@@ -215,17 +221,17 @@ void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + _mm256_storeu_ps(&r[i_chunk * chunk_size], r_sum); + } + // Remainders +- for (int i=n_chunk_count*chunk_size; ibias[i]; + float r_sum = gru->bias[N + i]; + +- for (j=0;jinput_weights[j*stride + i]*input[j]; + /* Compute reset gate. */ + r_sum += gru->input_weights[N + j*stride + i]*input[j]; + } +- for (j=0;jrecurrent_weights[j*stride + i]*state[j]; + /* Compute reset gate. */ +@@ -236,7 +242,7 @@ void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + r[i] = r_sum; + } + // Apply sigmoid to sums +- for (i=0;iinput_weights[2*N + j*stride + (i_chunk * chunk_size)]); + // Sign-extend to i32s +@@ -263,7 +269,7 @@ void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + sum = _mm256_fmadd_ps(input_weights, input_v, sum) ; + } + +- for (j=0;jrecurrent_weights[2*N + j*stride + (i_chunk * chunk_size)]); + // Sign-extend to i32s +@@ -281,36 +287,37 @@ void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + _mm256_storeu_ps(&h[i_chunk * chunk_size], sum); + } + // Remainders +- for (int i=n_chunk_count*chunk_size; ibias[2*N + i]; +- for (j=0;jinput_weights[2*N + j*stride + i]*input[j]; +- for (j=0;jrecurrent_weights[2*N + j*stride + i]*state[j]*r[j]; ++ for (j = 0; j < M; j++) ++ sum += gru->input_weights[2*N + j*stride + i] * input[j]; ++ for (j = 0; j < N; j++) ++ sum += gru->recurrent_weights[2*N + j*stride + i] * state[j] * r[j]; + + h[i] = sum; + } + +- for (i=0;iactivation == ACTIVATION_SIGMOID) sum = sigmoid_approx(WEIGHTS_SCALE*sum); + else if (gru->activation == ACTIVATION_TANH) sum = tansig_approx(WEIGHTS_SCALE*sum); + else if (gru->activation == ACTIVATION_RELU) sum = relu(WEIGHTS_SCALE*sum); + else *(int*)0=0; +- h[i] = z[i]*state[i] + (1-z[i])*sum; ++ state[i] = z[i]*state[i] + (1-z[i])*sum; + } +- for (i=0;inb_inputs; + N = gru->nb_neurons; + stride = 3*N; +- for (i=0;ibias[i]; + float r_sum = gru->bias[N + i]; + +- for (j=0;jinput_weights[j*stride + i]*input[j]; + /* Compute reset gate. */ + r_sum += gru->input_weights[N + j*stride + i]*input[j]; + } +- for (j=0;jrecurrent_weights[j*stride + i]*state[j]; + /* Compute reset gate. */ +@@ -344,11 +351,11 @@ void compute_gru(const GRULayer *gru, float *state, const float *input) + } + + /* Compute output. */ +- for (i=0;ibias[2*N + i]; +- for (j=0;jinput_weights[2*N + j*stride + i]*input[j]; +- for (j=0;jrecurrent_weights[2*N + j*stride + i]*state[j]*r[j]; + if (gru->activation == ACTIVATION_SIGMOID) sum = sigmoid_approx(WEIGHTS_SCALE*sum); + else if (gru->activation == ACTIVATION_TANH) sum = tansig_approx(WEIGHTS_SCALE*sum); +@@ -356,8 +363,8 @@ void compute_gru(const GRULayer *gru, float *state, const float *input) + else *(int*)0=0; + h[i] = z[i]*state[i] + (1-z[i])*sum; + } +- for (i=0;imodel->input_dense, dense_out, input); + compute_gru(rnn->model->vad_gru, rnn->vad_gru_state, dense_out); + compute_dense(rnn->model->vad_output, vad, rnn->vad_gru_state); +- for (i=0;imodel->input_dense_size;i++) noise_input[i] = dense_out[i]; +- for (i=0;imodel->vad_gru_size;i++) noise_input[i+rnn->model->input_dense_size] = rnn->vad_gru_state[i]; +- for (i=0;imodel->input_dense_size+rnn->model->vad_gru_size] = input[i]; ++ for (i = 0;imodel->input_dense_size;i++) noise_input[i] = dense_out[i]; ++ for (i = 0;imodel->vad_gru_size;i++) noise_input[i+rnn->model->input_dense_size] = rnn->vad_gru_state[i]; ++ for (i = 0;imodel->input_dense_size+rnn->model->vad_gru_size] = input[i]; + compute_gru(rnn->model->noise_gru, rnn->noise_gru_state, noise_input); + +- for (i=0;imodel->vad_gru_size;i++) denoise_input[i] = rnn->vad_gru_state[i]; +- for (i=0;imodel->noise_gru_size;i++) denoise_input[i+rnn->model->vad_gru_size] = rnn->noise_gru_state[i]; +- for (i=0;imodel->vad_gru_size+rnn->model->noise_gru_size] = input[i]; ++ for (i = 0;imodel->vad_gru_size;i++) denoise_input[i] = rnn->vad_gru_state[i]; ++ for (i = 0;imodel->noise_gru_size;i++) denoise_input[i+rnn->model->vad_gru_size] = rnn->noise_gru_state[i]; ++ for (i = 0;imodel->vad_gru_size+rnn->model->noise_gru_size] = input[i]; + compute_gru(rnn->model->denoise_gru, rnn->denoise_gru_state, denoise_input); + compute_dense(rnn->model->denoise_output, gains, rnn->denoise_gru_state); + } +-- +GitLab + + +From 184f5524da7b2f611758edd14f78451fc3f52fbb Mon Sep 17 00:00:00 2001 +From: Casey Primozic +Date: Sun, 18 Jul 2021 20:31:12 -0700 +Subject: [PATCH 05/10] Fix warnings + +--- + src/rnn.c | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +diff --git a/src/rnn.c b/src/rnn.c +index 64e3355..49d867c 100644 +--- a/src/rnn.c ++++ b/src/rnn.c +@@ -174,8 +174,8 @@ void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + + for (int i_chunk = 0; i_chunk < n_chunk_count; i_chunk++) { + // Load i8s +- __m128i i8_z_sum = _mm_loadu_si128(&gru->bias[i_chunk * chunk_size]); +- __m128i i8_r_sum = _mm_loadu_si128(&gru->bias[N + (i_chunk * chunk_size)]); ++ __m128i i8_z_sum = _mm_loadu_si128((__m128i*) &gru->bias[i_chunk * chunk_size]); ++ __m128i i8_r_sum = _mm_loadu_si128((__m128i*) &gru->bias[N + (i_chunk * chunk_size)]); + // Sign-extend to i32s + __m256i i32_z_sum = _mm256_cvtepi8_epi32(i8_z_sum); + __m256i i32_r_sum = _mm256_cvtepi8_epi32(i8_r_sum); +@@ -185,8 +185,8 @@ void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + + for (j = 0; jinput_weights[j*stride + (i_chunk * chunk_size)]); +- __m128i r_input_weights_i8 = _mm_loadu_si128(&gru->input_weights[N + j*stride + (i_chunk * chunk_size)]); ++ __m128i z_input_weights_i8 = _mm_loadu_si128((__m128i*) &gru->input_weights[j*stride + (i_chunk * chunk_size)]); ++ __m128i r_input_weights_i8 = _mm_loadu_si128((__m128i*) &gru->input_weights[N + j*stride + (i_chunk * chunk_size)]); + // Sign-extend to i32s + __m256i z_input_weights_i32 = _mm256_cvtepi8_epi32(z_input_weights_i8); + __m256i r_input_weights_i32 = _mm256_cvtepi8_epi32(r_input_weights_i8); +@@ -201,8 +201,8 @@ void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + } + for (j = 0; jrecurrent_weights[j*stride + (i_chunk * chunk_size)]); +- __m128i r_recurrent_weights_i8 = _mm_loadu_si128(&gru->recurrent_weights[N + j*stride + (i_chunk * chunk_size)]); ++ __m128i z_recurrent_weights_i8 = _mm_loadu_si128((__m128i*) &gru->recurrent_weights[j*stride + (i_chunk * chunk_size)]); ++ __m128i r_recurrent_weights_i8 = _mm_loadu_si128((__m128i*) &gru->recurrent_weights[N + j*stride + (i_chunk * chunk_size)]); + // Sign-extend to i32s + __m256i z_recurrent_weights_i32 = _mm256_cvtepi8_epi32(z_recurrent_weights_i8); + __m256i r_recurrent_weights_i32 = _mm256_cvtepi8_epi32(r_recurrent_weights_i8); +@@ -250,7 +250,7 @@ void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + /* Compute output. */ + for (int i_chunk = 0; i_chunk < n_chunk_count; i_chunk++) { + // Load i8s +- __m128i i8_sum = _mm_loadu_si128(&gru->bias[2*N + (i_chunk * chunk_size)]); ++ __m128i i8_sum = _mm_loadu_si128((__m128i*) &gru->bias[2*N + (i_chunk * chunk_size)]); + // Sign-extend to i32s + __m256i i32_sum = _mm256_cvtepi8_epi32(i8_sum); + // Convert to f32s +@@ -258,7 +258,7 @@ void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + + for (j = 0; j < M; j++) { + // Load i8s +- __m128i input_weights_i8 = _mm_loadu_si128(&gru->input_weights[2*N + j*stride + (i_chunk * chunk_size)]); ++ __m128i input_weights_i8 = _mm_loadu_si128((__m128i*) &gru->input_weights[2*N + j*stride + (i_chunk * chunk_size)]); + // Sign-extend to i32s + __m256i input_weights_i32 = _mm256_cvtepi8_epi32(input_weights_i8); + // Convert to f32s +@@ -271,7 +271,7 @@ void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + + for (j = 0; j < N; j++) { + // Load i8s +- __m128i recurrent_weights_i8 = _mm_loadu_si128(&gru->recurrent_weights[2*N + j*stride + (i_chunk * chunk_size)]); ++ __m128i recurrent_weights_i8 = _mm_loadu_si128((__m128i*) &gru->recurrent_weights[2*N + j*stride + (i_chunk * chunk_size)]); + // Sign-extend to i32s + __m256i recurrent_weights_i32 = _mm256_cvtepi8_epi32(recurrent_weights_i8); + // Convert to f32s +-- +GitLab + + +From 59418c05caee84a7ca3b14a44102160cb06c0703 Mon Sep 17 00:00:00 2001 +From: Casey Primozic +Date: Sun, 18 Jul 2021 20:35:00 -0700 +Subject: [PATCH 06/10] Remove dead code + +--- + src/rnn.c | 44 +------------------------------------------- + 1 file changed, 1 insertion(+), 43 deletions(-) + +diff --git a/src/rnn.c b/src/rnn.c +index 49d867c..7fba773 100644 +--- a/src/rnn.c ++++ b/src/rnn.c +@@ -106,49 +106,7 @@ void compute_dense(const DenseLayer *layer, float *output, const float *input) + } + } + +-typedef struct { +- const GRULayer *layer_ptr; +- float *converted_input_weights; +- float *converted_recurrent_weights; +-} CachedConvertedWeights; +- +-CachedConvertedWeights cached_weights[16]; +- +-CachedConvertedWeights* get_or_initialize_weights(const GRULayer *layer) { +- // Check to see if an entry already exists in the cache array +- int empty_ix = 16; +- for (int i = 0; i < 16; i++) { +- const GRULayer* layer_ptr = (&cached_weights[i])->layer_ptr; +- if (layer_ptr == 0) { +- empty_ix = i; +- break; +- } +- if (layer_ptr == layer) { +- return &cached_weights[i]; +- } +- } +- +- if (empty_ix >= 15) { +- return 0; // should never hit, and we'll def. find out quickly if it does +- } +- +- // Convert + cache weights +- cached_weights[empty_ix].layer_ptr = layer; +- int weights_count = 3 * layer->nb_inputs * layer->nb_neurons; +- cached_weights[empty_ix].converted_input_weights = malloc(weights_count * sizeof(float)); +- for (int i = 0; i < weights_count; i++) { +- cached_weights[empty_ix].converted_input_weights[i] = layer->input_weights[i]; +- } +- +- int recurrent_weights_count = layer->nb_neurons * layer->nb_neurons * 3; +- cached_weights[empty_ix].converted_recurrent_weights = malloc(recurrent_weights_count * sizeof(float)); +- for (int i = 0; i < recurrent_weights_count; i++) { +- cached_weights[empty_ix].converted_recurrent_weights[i] = layer->recurrent_weights[i]; +- } +- +- return &cached_weights[empty_ix]; +-} +- ++// FMA is always available if AVX2 is available + #if !defined(__FMA__) && defined(__AVX2__) + #define __FMA__ 1 + #endif +-- +GitLab + + +From 4c4f961a9f3decd509515af1d0c5f6668f4e6d4e Mon Sep 17 00:00:00 2001 +From: Casey Primozic +Date: Tue, 20 Jul 2021 14:20:26 -0700 +Subject: [PATCH 07/10] Add fallback for if FMA isn't available + +--- + src/rnn.c | 37 ++++++++++++++++++++++--------------- + 1 file changed, 22 insertions(+), 15 deletions(-) + +diff --git a/src/rnn.c b/src/rnn.c +index 7fba773..d84e6f0 100644 +--- a/src/rnn.c ++++ b/src/rnn.c +@@ -106,14 +106,21 @@ void compute_dense(const DenseLayer *layer, float *output, const float *input) + } + } + +-// FMA is always available if AVX2 is available +-#if !defined(__FMA__) && defined(__AVX2__) +- #define __FMA__ 1 +-#endif +- +-#if defined(__AVX2__) && defined(__FMA__) ++#if defined(__AVX2__) + #include + ++// Use native FMA if available, otherwise fall back to multiply + add ++#ifdef __FMA__ ++#define _MM256_FMADD_PS(a, b, c) _mm256_fmadd_ps(a, b, c) ++#else ++static OPUS_INLINE __m256 _mm256_fmadd_ps_fallback(__m256 a, __m256 b, __m256 c) { ++ __m256 multiplied = _mm256_mul_ps(a, b); ++ return _mm256_add_ps(c, multiplied); ++} ++ ++#define _MM256_FMADD_PS(a, b, c) _mm256_fmadd_ps_fallback(a, b, c) ++#endif ++ + void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + { + int i, j; +@@ -154,8 +161,8 @@ void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + + __m256 input_v = _mm256_broadcast_ss(&input[j]); + +- z_sum = _mm256_fmadd_ps(z_input_weights, input_v, z_sum); +- r_sum = _mm256_fmadd_ps(r_input_weights, input_v, r_sum); ++ z_sum = _MM256_FMADD_PS(z_input_weights, input_v, z_sum); ++ r_sum = _MM256_FMADD_PS(r_input_weights, input_v, r_sum); + } + for (j = 0; j +Date: Tue, 20 Jul 2021 14:27:06 -0700 +Subject: [PATCH 08/10] Use memcpy instead of explicit element-by-element copy + +--- + src/rnn.c | 15 +++++++-------- + 1 file changed, 7 insertions(+), 8 deletions(-) + +diff --git a/src/rnn.c b/src/rnn.c +index d84e6f0..b28869c 100644 +--- a/src/rnn.c ++++ b/src/rnn.c +@@ -293,7 +293,7 @@ void compute_gru(const GRULayer *gru, float *state, const float *input) + M = gru->nb_inputs; + N = gru->nb_neurons; + stride = 3*N; +- for (i = 0;i < N;i++) ++ for (i = 0; i < N; i++) + { + float z_sum = gru->bias[i]; + float r_sum = gru->bias[N + i]; +@@ -304,7 +304,7 @@ void compute_gru(const GRULayer *gru, float *state, const float *input) + /* Compute reset gate. */ + r_sum += gru->input_weights[N + j*stride + i]*input[j]; + } +- for (j = 0; jrecurrent_weights[j*stride + i]*state[j]; + /* Compute reset gate. */ +@@ -316,20 +316,19 @@ void compute_gru(const GRULayer *gru, float *state, const float *input) + } + + /* Compute output. */ +- for (i = 0;i < N;i++) { ++ for (i = 0; i < N; i++) { + float sum = gru->bias[2*N + i]; +- for (j = 0; jinput_weights[2*N + j*stride + i]*input[j]; +- for (j = 0; jrecurrent_weights[2*N + j*stride + i]*state[j]*r[j]; + if (gru->activation == ACTIVATION_SIGMOID) sum = sigmoid_approx(WEIGHTS_SCALE*sum); + else if (gru->activation == ACTIVATION_TANH) sum = tansig_approx(WEIGHTS_SCALE*sum); + else if (gru->activation == ACTIVATION_RELU) sum = relu(WEIGHTS_SCALE*sum); + else *(int*)0=0; +- h[i] = z[i]*state[i] + (1-z[i])*sum; ++ h[i] = z[i] * state[i] + (1 - z[i]) * sum; + } +- for (i = 0;i < N;i++) +- state[i] = h[i ]; ++ memcpy((void*) &state, (void*) &h, N * sizeof(float)); + } + + #define INPUT_SIZE 42 +-- +GitLab + + +From 3f1e06f29e0ead8933c80318385080265055fce5 Mon Sep 17 00:00:00 2001 +From: Casey Primozic +Date: Tue, 20 Jul 2021 17:09:20 -0700 +Subject: [PATCH 09/10] Use `_m256_set1_ps` instead of `_m256_broadcast_ss` + + * We already have the value in a register, so avoid spilling to stack and reading back +--- + src/rnn.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/rnn.c b/src/rnn.c +index b28869c..4f84cfe 100644 +--- a/src/rnn.c ++++ b/src/rnn.c +@@ -243,7 +243,7 @@ void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + __m256 recurrent_weights = _mm256_cvtepi32_ps(recurrent_weights_i32); + + float state_times_r = state[j] * r[j]; +- __m256 state_times_r_v = _mm256_broadcast_ss(&state_times_r); ++ __m256 state_times_r_v = _mm256_set1_ps(state_times_r); + + sum = _MM256_FMADD_PS(recurrent_weights, state_times_r_v, sum); + } +-- +GitLab + + +From 866f88037d45147dd674999978ebcef7aecb43cd Mon Sep 17 00:00:00 2001 +From: Antoine Rose +Date: Wed, 21 Jul 2021 17:18:53 +0200 +Subject: [PATCH 10/10] Fix AVX,AVX2,FMA detection and check compatibility only + once + +Update FMA check +--- + src/denoise.c | 8 ++++ + src/rnn.c | 104 +++++++++++++++++++++++++++++++++++++++++++------ + src/rnn.h | 6 +++ + src/rnn_data.h | 1 + + 4 files changed, 108 insertions(+), 11 deletions(-) + +diff --git a/src/denoise.c b/src/denoise.c +index a9328ff..0a54914 100644 +--- a/src/denoise.c ++++ b/src/denoise.c +@@ -270,6 +270,14 @@ int rnnoise_init(DenoiseState *st, RNNModel *model) { + st->rnn.vad_gru_state = calloc(sizeof(float), st->rnn.model->vad_gru_size); + st->rnn.noise_gru_state = calloc(sizeof(float), st->rnn.model->noise_gru_size); + st->rnn.denoise_gru_state = calloc(sizeof(float), st->rnn.model->denoise_gru_size); ++ st->rnn.compute_gru_fct = &compute_gru; ++ ++#if defined(__AVX2__) ++ if(is_avx2_supported() == 1) { ++ st->rnn.compute_gru_fct = &compute_gru_avx2; ++ } ++#endif ++ + return 0; + } + +diff --git a/src/rnn.c b/src/rnn.c +index 4f84cfe..984fa2a 100644 +--- a/src/rnn.c ++++ b/src/rnn.c +@@ -38,6 +38,96 @@ + #include "rnn_data.h" + #include + ++// SIMD ++#include ++#include ++#include ++ ++ ++/************************************** ++ * GCC ++ *************************************/ ++ ++int is_avx2_supported() { ++#if defined(__AVX2__) ++ int cpuInfo[4]; ++ int max_function_id; ++ int os_enables_XSAVE_XRSTORE = 0; ++ int os_enables_avx = 0; ++ int os_enables_avx2 = 0; ++#ifdef __FMA__ ++ int os_enables_fma = 0; ++#endif ++ ++ // Check for GCC or WIN32, other compilers not supported ++#if !defined(__GNUC__) && !defined(_WIN32) ++ return 0; ++#endif ++ ++ // WIN32 must support CPUID ++#if defined(_WIN32) && !defined(HAS_CPUID) ++ return 0; ++#endif ++ ++ ++ // Check CPU support ++ // See: https://github.com/gcc-mirror/gcc/blob/master/gcc/config/i386/cpuid.h ++ ++#if defined(__GNUC__) ++ __cpuid_count(0, 0, cpuInfo[0], cpuInfo[1], cpuInfo[2], cpuInfo[3]); ++#else // _WIN32 ++ __cpuid(cpuInfo, 0); ++#endif ++ max_function_id = cpuInfo[0]; ++ if (max_function_id < 1) { ++ return 0; ++ } ++ ++#if defined(__GNUC__) ++ __cpuid_count(1, 0, cpuInfo[0], cpuInfo[1], cpuInfo[2], cpuInfo[3]); ++#else // _WIN32 ++ __cpuid(cpuInfo, 1); ++#endif ++ os_enables_XSAVE_XRSTORE = cpuInfo[2] & 0x08000000; ++ if(!os_enables_XSAVE_XRSTORE) { ++ return 0; ++ } ++ ++#ifdef __FMA__ ++ os_enables_fma = cpuInfo[2] & 0x00001000; ++#endif ++ os_enables_avx = cpuInfo[2] & 0x10000000; ++ ++ if (max_function_id >= 7) { ++#if defined(__GNUC__) ++ __cpuid_count(7, 0, cpuInfo[0], cpuInfo[1], cpuInfo[2], cpuInfo[3]); ++#else // _WIN32 ++ __cpuid(cpuInfo, 7); ++#endif ++ os_enables_avx2 = cpuInfo[1] & 0x00000020; ++ } ++ ++ ++ // Check OS support ++ // See: https://stackoverflow.com/a/22521619/2750093 ++ // AVX2 and FMA: no check available, checking AVX only is your best bet ++ if(os_enables_avx) { ++ unsigned long long xcrFeatureMask = _xgetbv(0); // _XCR_XFEATURE_ENABLED_MASK ++ os_enables_avx = (xcrFeatureMask & 0x6) == 0x6; ++ } ++ ++#ifdef __FMA__ ++ return os_enables_avx && os_enables_avx2 && os_enables_fma; ++#else ++ return os_enables_avx && os_enables_avx2; ++#endif ++ ++#else ++ return 0; ++#endif ++} ++ ++ + static OPUS_INLINE float tansig_approx(float x) + { + int i; +@@ -276,14 +366,6 @@ void compute_gru_avx2(const GRULayer *gru, float *state, const float *input) + + void compute_gru(const GRULayer *gru, float *state, const float *input) + { +- // Check if we support AVX2 support and use the SIMD-accelerated function if so +- #if defined(__AVX2__) +- if (__builtin_cpu_supports("avx2")) { +- compute_gru_avx2(gru, state, input); +- return; +- } +- #endif +- + int i, j; + int N, M; + int stride; +@@ -339,16 +421,16 @@ void compute_rnn(RNNState *rnn, float *gains, float *vad, const float *input) { + float noise_input[MAX_NEURONS*3]; + float denoise_input[MAX_NEURONS*3]; + compute_dense(rnn->model->input_dense, dense_out, input); +- compute_gru(rnn->model->vad_gru, rnn->vad_gru_state, dense_out); ++ rnn->compute_gru_fct(rnn->model->vad_gru, rnn->vad_gru_state, dense_out); + compute_dense(rnn->model->vad_output, vad, rnn->vad_gru_state); + for (i = 0;imodel->input_dense_size;i++) noise_input[i] = dense_out[i]; + for (i = 0;imodel->vad_gru_size;i++) noise_input[i+rnn->model->input_dense_size] = rnn->vad_gru_state[i]; + for (i = 0;imodel->input_dense_size+rnn->model->vad_gru_size] = input[i]; +- compute_gru(rnn->model->noise_gru, rnn->noise_gru_state, noise_input); ++ rnn->compute_gru_fct(rnn->model->noise_gru, rnn->noise_gru_state, noise_input); + + for (i = 0;imodel->vad_gru_size;i++) denoise_input[i] = rnn->vad_gru_state[i]; + for (i = 0;imodel->noise_gru_size;i++) denoise_input[i+rnn->model->vad_gru_size] = rnn->noise_gru_state[i]; + for (i = 0;imodel->vad_gru_size+rnn->model->noise_gru_size] = input[i]; +- compute_gru(rnn->model->denoise_gru, rnn->denoise_gru_state, denoise_input); ++ rnn->compute_gru_fct(rnn->model->denoise_gru, rnn->denoise_gru_state, denoise_input); + compute_dense(rnn->model->denoise_output, gains, rnn->denoise_gru_state); + } +diff --git a/src/rnn.h b/src/rnn.h +index 31b962f..8c711f8 100644 +--- a/src/rnn.h ++++ b/src/rnn.h +@@ -60,10 +60,16 @@ typedef struct { + + typedef struct RNNState RNNState; + ++int is_avx2_supported(); ++ + void compute_dense(const DenseLayer *layer, float *output, const float *input); + + void compute_gru(const GRULayer *gru, float *state, const float *input); + ++#if defined(__AVX2__) ++void compute_gru_avx2(const GRULayer *gru, float *state, const float *input); ++#endif ++ + void compute_rnn(RNNState *rnn, float *gains, float *vad, const float *input); + + #endif /* RNN_H_ */ +diff --git a/src/rnn_data.h b/src/rnn_data.h +index f2186fe..b74798a 100644 +--- a/src/rnn_data.h ++++ b/src/rnn_data.h +@@ -28,6 +28,7 @@ struct RNNState { + float *vad_gru_state; + float *noise_gru_state; + float *denoise_gru_state; ++ void (*compute_gru_fct)(const GRULayer *gru, float *state, const float *input); + }; + + +-- +GitLab + diff --git a/x86_64/extra/rnnoise/PKGBUILD b/x86_64/extra/rnnoise/PKGBUILD new file mode 100644 index 0000000..8263f22 --- /dev/null +++ b/x86_64/extra/rnnoise/PKGBUILD @@ -0,0 +1,34 @@ +pkgname=rnnoise +pkgver=0.4.1 +pkgrel=1 +arch=(x86_64) +depends=(glibc gcc) +makedepends=(gcc) +commitid=(7f449bf8bd3b933891d12c30112268c4090e4d59) +source=(https://gitlab.xiph.org/xiph/rnnoise/-/archive/$commitid/rnnoise-$commitid.tar.gz + + # Create SIMD-accelerated version of `compute_gru` function + https://gitlab.xiph.org/xiph/rnnoise/-/merge_requests/2.patch) + +prepare() { + cd $pkgname-$commitid + + patch -p1 -i ../2.patch + + ./autogen.sh + + ./configure \ + --prefix=/usr +} + +build() { + cd $pkgname-$commitid + + make +} + +package() { + cd $pkgname-$commitid + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/rpcsvc-proto/PKGBUILD b/x86_64/extra/rpcsvc-proto/PKGBUILD new file mode 100644 index 0000000..8249339 --- /dev/null +++ b/x86_64/extra/rpcsvc-proto/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=rpcsvc-proto +pkgver=1.4.3 +pkgrel=1 +arch=(x86_64) +depends=(glibc) +source=(https://github.com/thkukuk/rpcsvc-proto/archive/v$pkgver/$pkgname-$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + autoreconf -fi +} + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install +} diff --git a/x86_64/extra/rrdtool/PKGBUILD b/x86_64/extra/rrdtool/PKGBUILD new file mode 100644 index 0000000..2e6f5fb --- /dev/null +++ b/x86_64/extra/rrdtool/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=rrdtool +pkgver=1.7.2 +pkgrel=1 +arch=(x86_64) +depends=(pango libxml2) +makedepends=(intltool ruby3 tcl systemd python3) +options=('!emptydirs' '!makeflags') +source=(https://oss.oetiker.ch/rrdtool/pub/rrdtool-${pkgver}.tar.gz) + +prepare() { + cd ${pkgname}-${pkgver} + + # fix FS#28521 make ruby install to vendor_ruby instead of site_ruby + sed -e 's/$(RUBY) ${abs_srcdir}\/ruby\/extconf.rb/& --vendor/' -i bindings/Makefile.am + + # https://github.com/oetiker/rrdtool-1.x/issues/1135 + autoreconf -vi +} + +build() { + cd ${pkgname}-${pkgver} + + ./configure --prefix=/usr --localstatedir=/var --disable-rpath \ + --enable-perl --enable-perl-site-install --with-perl-options='INSTALLDIRS=vendor' \ + --enable-ruby --enable-ruby-site-install --enable-python \ + --enable-tcl --disable-libwrap + + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" includedir=/usr/include install +} diff --git a/x86_64/extra/rsync/PKGBUILD b/x86_64/extra/rsync/PKGBUILD new file mode 100644 index 0000000..f5c372b --- /dev/null +++ b/x86_64/extra/rsync/PKGBUILD @@ -0,0 +1,53 @@ +pkgname=rsync +pkgver=3.2.3 +pkgrel=1 +pkgdesc='A fast and versatile file copying tool for remote and local files' +arch=('x86_64') +depends=('acl' 'lz4' 'openssl' 'perl' 'popt' 'zlib' 'zstd') +makedepends=('git') +backup=(etc/rsyncd.conf + etc/xinetd.d/rsync) +_tag='1a2d16c0bd161481cbf0acc06dceb1ce788f0d09' # git rev-parse v${pkgver} +source=("git+https://github.com/WayneD/rsync#tag=${_tag}" + rsyncd.conf) +prepare() { + cd "$srcdir/rsync" + + # rsync-ssl: Verify the hostname in the certificate when using openssl. + git cherry-pick -n c3f7414c450faaf6a8281cc4a4403529aeb7d859 + + # Force HAVE_LCHMOD off for Linux (for now). + # Work around glibc's lchmod() issue a better way. + git cherry-pick -n \ + 85b8dc8abaca96fc3ea7421e09101b6ac41b6718 \ + 9dd62525f3b98d692e031f22c02be8f775966503 + + # Add test and fix regression for --delay-updates (#192) (#204) + git cherry-pick -n efc81c93a9fca45ba08119145a2d282f477f01b4 +} + +build() { + cd "$srcdir/rsync" + + ./configure \ + --prefix=/usr \ + --disable-debug \ + --with-included-popt=no \ + --with-included-zlib=no \ + --disable-md2man \ + --disable-xxhash + + make +} + +package() { + cd "$srcdir/rsync" + + make DESTDIR="$pkgdir" install + install -Dm0644 ../rsyncd.conf "$pkgdir/etc/rsyncd.conf" + install -Dm0644 packaging/lsb/rsync.xinetd "$pkgdir/etc/xinetd.d/rsync" + install -Dm0644 packaging/systemd/rsync.service "$pkgdir/usr/lib/systemd/system/rsyncd.service" + install -Dm0644 packaging/systemd/rsync.socket "$pkgdir/usr/lib/systemd/system/rsyncd.socket" + install -Dm0644 packaging/systemd/rsync@.service "$pkgdir/usr/lib/systemd/system/rsyncd@.service" + install -Dm0755 support/rrsync "$pkgdir/usr/lib/rsync/rrsync" +} diff --git a/x86_64/extra/rsync/rsyncd.conf b/x86_64/extra/rsync/rsyncd.conf new file mode 100644 index 0000000..04a0caa --- /dev/null +++ b/x86_64/extra/rsync/rsyncd.conf @@ -0,0 +1,10 @@ +uid = nobody +gid = nobody +use chroot = no +max connections = 4 +syslog facility = local5 +pid file = /run/rsyncd.pid + +[ftp] + path = /srv/ftp +comment = ftp area diff --git a/x86_64/extra/ruby3/PKGBUILD b/x86_64/extra/ruby3/PKGBUILD new file mode 100644 index 0000000..6a2392c --- /dev/null +++ b/x86_64/extra/ruby3/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=ruby3 +pkgver=3.0.3 +pkgrel=1 +arch=('x86_64') +source=(https://cache.ruby-lang.org/pub/ruby/3.0/ruby-$pkgver.tar.gz) + +build() { + cd ruby-$pkgver + + ./configure --prefix=/usr \ + --enable-shared \ + --docdir=/usr/shared/doc/ruby3 + make +} + +package() { + cd ruby-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/run-parts/PKGBUILD b/x86_64/extra/run-parts/PKGBUILD new file mode 100644 index 0000000..bbd7a59 --- /dev/null +++ b/x86_64/extra/run-parts/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=run-parts +pkgver=5.5 +pkgrel=1 +arch=(x86_64) +depends=(glibc) +makedepends=(make) +source=(https://clint.pages.debian.net/debianutils-tarballs/artifacts/debianutils-${pkgver}.tar.gz) + +build() { + cd "$srcdir/debianutils-${pkgver}" + + ./configure --prefix=/usr + + make run-parts +} + +package() { + cd "$srcdir/debianutils-${pkgver}" + + install -D -m755 run-parts "$pkgdir/usr/bin/run-parts" + install -D -m644 run-parts.8 "$pkgdir/usr/share/man/man8/run-parts.8" + for l in po4a/*/run-parts.8; do + install -D -m644 "${l}" "$pkgdir/usr/share/man/${l:5:2}/man8/run-parts.8" + done +} diff --git a/x86_64/extra/runc/PKGBUILD b/x86_64/extra/runc/PKGBUILD new file mode 100644 index 0000000..f8fb26f --- /dev/null +++ b/x86_64/extra/runc/PKGBUILD @@ -0,0 +1,33 @@ +pkgname=runc +pkgver=1.1.0 +pkgrel=1 +arch=('x86_64') +depends=(libseccomp criu) +makedepends=(git go go-md2man) +commitid=067aaf8548d78269dcb2c13b856775e27c410f9c +source=(git+https://github.com/opencontainers/runc.git#commit=$commitid) + +prepare() { + mkdir -p src/github.com/opencontainers + cp -r runc src/github.com/opencontainers/ +} + +build() { + cd src/github.com/opencontainers/runc + export GOPATH="$srcdir" + export BUILDTAGS='seccomp apparmor' + export CGO_CPPFLAGS="${CPPFLAGS}" + export CGO_CFLAGS="${CFLAGS}" + export CGO_CXXFLAGS="${CXXFLAGS}" + export CGO_LDFLAGS="${LDFLAGS}" + export GOFLAGS="-trimpath -mod=readonly -modcacherw" + make runc +} + +package() { + cd src/github.com/opencontainers/runc + + install -Dm755 runc "$pkgdir/usr/bin/runc" + install -Dm644 contrib/completions/bash/runc \ + "$pkgdir/usr/share/bash-completion/completions/runc" +} diff --git a/x86_64/extra/rust-nightly/0001-bootstrap-Change-libexec-dir.patch b/x86_64/extra/rust-nightly/0001-bootstrap-Change-libexec-dir.patch new file mode 100644 index 0000000..27dbc39 --- /dev/null +++ b/x86_64/extra/rust-nightly/0001-bootstrap-Change-libexec-dir.patch @@ -0,0 +1,22 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Thu, 6 May 2021 20:14:58 +0200 +Subject: [PATCH] bootstrap: Change libexec dir + +--- + src/bootstrap/dist.rs | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs +index d4875cfe1b06..798c45506373 100644 +--- a/src/bootstrap/dist.rs ++++ b/src/bootstrap/dist.rs +@@ -1004,7 +1004,7 @@ fn run(self, builder: &Builder<'_>) -> Option { + for dirent in fs::read_dir(cargo.parent().unwrap()).expect("read_dir") { + let dirent = dirent.expect("read dir entry"); + if dirent.file_name().to_str().expect("utf8").starts_with("cargo-credential-") { +- tarball.add_file(&dirent.path(), "libexec", 0o755); ++ tarball.add_file(&dirent.path(), "lib", 0o755); + } + } + diff --git a/x86_64/extra/rust-nightly/0001-cargo-Change-libexec-dir.patch b/x86_64/extra/rust-nightly/0001-cargo-Change-libexec-dir.patch new file mode 100644 index 0000000..aa60e44 --- /dev/null +++ b/x86_64/extra/rust-nightly/0001-cargo-Change-libexec-dir.patch @@ -0,0 +1,22 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Thu, 6 May 2021 20:13:31 +0200 +Subject: [PATCH] cargo: Change libexec dir + +--- + src/cargo/ops/registry/auth.rs | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/cargo/ops/registry/auth.rs b/src/cargo/ops/registry/auth.rs +index d10b1988e920..b58e05857233 100644 +--- a/src/cargo/ops/registry/auth.rs ++++ b/src/cargo/ops/registry/auth.rs +@@ -223,7 +223,7 @@ fn sysroot_credential( + .parent() + .and_then(|p| p.parent()) + .ok_or_else(|| format_err!("expected cargo path {}", cargo.display()))?; +- let exe = root.join("libexec").join(format!( ++ let exe = root.join("lib").join(format!( + "cargo-credential-{}{}", + cred_name, + std::env::consts::EXE_SUFFIX diff --git a/x86_64/extra/rust-nightly/0002-compiler-Change-LLVM-targets.patch b/x86_64/extra/rust-nightly/0002-compiler-Change-LLVM-targets.patch new file mode 100644 index 0000000..53bdb53 --- /dev/null +++ b/x86_64/extra/rust-nightly/0002-compiler-Change-LLVM-targets.patch @@ -0,0 +1,84 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Fri, 12 Mar 2021 17:31:56 +0100 +Subject: [PATCH] compiler: Change LLVM targets + + - Change x86_64-unknown-linux-gnu to use x86_64-pc-linux-gnu + - Change i686-unknown-linux-gnu to use i686-pc-linux-gnu + +Reintroduce the aliasing that was removed in 1.52.0 and alias the -pc- +triples to the -unknown- triples. This avoids defining proper -pc- +targets, as things break when this is done: + + - The crate ecosystem expects the -unknown- targets. Making -pc- + rustc's host triple (and thus default target) would break various + crates. + - Firefox's build breaks when the host triple (from + `rustc --version --verbose`) is different from the target triple + (from `rustc --print target-list`) that best matches autoconf. +--- + compiler/rustc_session/src/config.rs | 2 +- + compiler/rustc_target/src/spec/i686_unknown_linux_gnu.rs | 2 +- + compiler/rustc_target/src/spec/mod.rs | 9 +++++++++ + .../rustc_target/src/spec/x86_64_unknown_linux_gnu.rs | 2 +- + 4 files changed, 12 insertions(+), 3 deletions(-) + +diff --git a/compiler/rustc_session/src/config.rs b/compiler/rustc_session/src/config.rs +index fdedb7e6a4af..c12568e77d83 100644 +--- a/compiler/rustc_session/src/config.rs ++++ b/compiler/rustc_session/src/config.rs +@@ -1512,7 +1512,7 @@ pub fn parse_target_triple( + early_error(error_format, &format!("target file {:?} does not exist", path)) + }) + } +- Some(target) => TargetTriple::TargetTriple(target), ++ Some(target) => TargetTriple::from_alias(target), + _ => TargetTriple::from_triple(host_triple()), + } + } +diff --git a/compiler/rustc_target/src/spec/i686_unknown_linux_gnu.rs b/compiler/rustc_target/src/spec/i686_unknown_linux_gnu.rs +index 165505ee7313..00a7f5c2f8c1 100644 +--- a/compiler/rustc_target/src/spec/i686_unknown_linux_gnu.rs ++++ b/compiler/rustc_target/src/spec/i686_unknown_linux_gnu.rs +@@ -9,7 +9,7 @@ pub fn target() -> Target { + base.stack_probes = StackProbeType::Call; + + Target { +- llvm_target: "i686-unknown-linux-gnu".to_string(), ++ llvm_target: "i686-pc-linux-gnu".to_string(), + pointer_width: 32, + data_layout: "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-\ + f64:32:64-f80:32-n8:16:32-S128" +diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs +index 273221360b8b..4bbfad8441f3 100644 +--- a/compiler/rustc_target/src/spec/mod.rs ++++ b/compiler/rustc_target/src/spec/mod.rs +@@ -2296,6 +2296,15 @@ pub fn from_path(path: &Path) -> Result { + Ok(TargetTriple::TargetPath(canonicalized_path)) + } + ++ /// Creates a target triple from its alias ++ pub fn from_alias(triple: String) -> Self { ++ match triple.as_str() { ++ "x86_64-pc-linux-gnu" => TargetTriple::from_triple("x86_64-unknown-linux-gnu"), ++ "i686-pc-linux-gnu" => TargetTriple::from_triple("i686-unknown-linux-gnu"), ++ _ => TargetTriple::TargetTriple(triple), ++ } ++ } ++ + /// Returns a string triple for this target. + /// + /// If this target is a path, the file name (without extension) is returned. +diff --git a/compiler/rustc_target/src/spec/x86_64_unknown_linux_gnu.rs b/compiler/rustc_target/src/spec/x86_64_unknown_linux_gnu.rs +index 085079e06e57..2dfa6a040b10 100644 +--- a/compiler/rustc_target/src/spec/x86_64_unknown_linux_gnu.rs ++++ b/compiler/rustc_target/src/spec/x86_64_unknown_linux_gnu.rs +@@ -11,7 +11,7 @@ pub fn target() -> Target { + SanitizerSet::ADDRESS | SanitizerSet::LEAK | SanitizerSet::MEMORY | SanitizerSet::THREAD; + + Target { +- llvm_target: "x86_64-unknown-linux-gnu".to_string(), ++ llvm_target: "x86_64-pc-linux-gnu".to_string(), + pointer_width: 64, + data_layout: "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" + .to_string(), diff --git a/x86_64/extra/rust-nightly/0003-compiler-Use-wasm-ld-for-wasm-targets.patch b/x86_64/extra/rust-nightly/0003-compiler-Use-wasm-ld-for-wasm-targets.patch new file mode 100644 index 0000000..7c433fa --- /dev/null +++ b/x86_64/extra/rust-nightly/0003-compiler-Use-wasm-ld-for-wasm-targets.patch @@ -0,0 +1,24 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Sat, 6 Nov 2021 22:42:06 +0100 +Subject: [PATCH] compiler: Use wasm-ld for wasm targets + +We don't ship rust-lld. +--- + compiler/rustc_target/src/spec/wasm_base.rs | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/compiler/rustc_target/src/spec/wasm_base.rs b/compiler/rustc_target/src/spec/wasm_base.rs +index 4c954a1e567c..f1d5fbf83748 100644 +--- a/compiler/rustc_target/src/spec/wasm_base.rs ++++ b/compiler/rustc_target/src/spec/wasm_base.rs +@@ -99,8 +99,7 @@ pub fn options() -> TargetOptions { + // arguments just yet + limit_rdylib_exports: false, + +- // we use the LLD shipped with the Rust toolchain by default +- linker: Some("rust-lld".to_owned()), ++ linker: Some("wasm-ld".to_owned()), + lld_flavor: LldFlavor::Wasm, + linker_is_gnu: false, + diff --git a/x86_64/extra/rust-nightly/PKGBUILD b/x86_64/extra/rust-nightly/PKGBUILD new file mode 100644 index 0000000..4dc54e0 --- /dev/null +++ b/x86_64/extra/rust-nightly/PKGBUILD @@ -0,0 +1,119 @@ +# Maintainer: Johannes Löthberg +# Maintainer: Jan Alexander Steffens (heftig) +# Contributor: Alexander F Rødseth +# Contributor: Daniel Micay +# Contributor: userwithuid + +pkgname=rust-nightly +epoch=1 +pkgver=2021.12.07 +pkgrel=1 +conflicts=rust +pkgdesc="Systems programming language focused on safety, speed and concurrency" +url=https://www.rust-lang.org/ +arch=(x86_64) +license=(MIT Apache) +options=(!emptydirs !strip) +_llvm_ver=13.0.0 +depends=(gcc llvm curl gcc) +source=( + "https://static.rust-lang.org/dist/2021-12-07/rustc-nightly-src.tar.xz" + "https://github.com/llvm/llvm-project/releases/download/llvmorg-$_llvm_ver/compiler-rt-$_llvm_ver.src.tar.xz" + 0001-cargo-Change-libexec-dir.patch + 0001-bootstrap-Change-libexec-dir.patch + 0002-compiler-Change-LLVM-targets.patch + 0003-compiler-Use-wasm-ld-for-wasm-targets.patch +) + +prepare() { + cd rustc-$pkgver-src + + # Patch bootstrap and cargo so credential helpers + # are in /usr/lib instead of /usr/libexec + patch -d src/tools/cargo -Np1 < ../0001-cargo-Change-libexec-dir.patch + patch -Np1 -i ../0001-bootstrap-Change-libexec-dir.patch + + # Use our *-pc-linux-gnu targets, making LTO with clang simpler + patch -Np1 -i ../0002-compiler-Change-LLVM-targets.patch + + # Use our wasm-ld + patch -Np1 -i ../0003-compiler-Use-wasm-ld-for-wasm-targets.patch +} + +build() { + cd rustc-$pkgver-src + + rm config.toml + cat >config.toml < +Date: Thu, 6 May 2021 20:14:58 +0200 +Subject: [PATCH] bootstrap: Change libexec dir + +--- + src/bootstrap/dist.rs | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs +index b1fae356d893..a9783708d7a7 100644 +--- a/src/bootstrap/dist.rs ++++ b/src/bootstrap/dist.rs +@@ -950,7 +950,7 @@ fn run(self, builder: &Builder<'_>) -> Option { + for dirent in fs::read_dir(cargo.parent().unwrap()).expect("read_dir") { + let dirent = dirent.expect("read dir entry"); + if dirent.file_name().to_str().expect("utf8").starts_with("cargo-credential-") { +- tarball.add_file(&dirent.path(), "libexec", 0o755); ++ tarball.add_file(&dirent.path(), "lib", 0o755); + } + } + diff --git a/x86_64/extra/rust/0001-cargo-Change-libexec-dir.patch b/x86_64/extra/rust/0001-cargo-Change-libexec-dir.patch new file mode 100644 index 0000000..06bc493 --- /dev/null +++ b/x86_64/extra/rust/0001-cargo-Change-libexec-dir.patch @@ -0,0 +1,22 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Thu, 6 May 2021 20:13:31 +0200 +Subject: [PATCH] cargo: Change libexec dir + +--- + src/cargo/ops/registry/auth.rs | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/cargo/ops/registry/auth.rs b/src/cargo/ops/registry/auth.rs +index 648e051e6dc2..a7b24e07e552 100644 +--- a/src/cargo/ops/registry/auth.rs ++++ b/src/cargo/ops/registry/auth.rs +@@ -224,7 +224,7 @@ fn sysroot_credential( + .parent() + .and_then(|p| p.parent()) + .ok_or_else(|| format_err!("expected cargo path {}", cargo.display()))?; +- let exe = root.join("libexec").join(format!( ++ let exe = root.join("lib").join(format!( + "cargo-credential-{}{}", + cred_name, + std::env::consts::EXE_SUFFIX diff --git a/x86_64/extra/rust/0002-compiler-Change-LLVM-targets.patch b/x86_64/extra/rust/0002-compiler-Change-LLVM-targets.patch new file mode 100644 index 0000000..a6e58b9 --- /dev/null +++ b/x86_64/extra/rust/0002-compiler-Change-LLVM-targets.patch @@ -0,0 +1,84 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Fri, 12 Mar 2021 17:31:56 +0100 +Subject: [PATCH] compiler: Change LLVM targets + + - Change x86_64-unknown-linux-gnu to use x86_64-pc-linux-gnu + - Change i686-unknown-linux-gnu to use i686-pc-linux-gnu + +Reintroduce the aliasing that was removed in 1.52.0 and alias the -pc- +triples to the -unknown- triples. This avoids defining proper -pc- +targets, as things break when this is done: + + - The crate ecosystem expects the -unknown- targets. Making -pc- + rustc's host triple (and thus default target) would break various + crates. + - Firefox's build breaks when the host triple (from + `rustc --version --verbose`) is different from the target triple + (from `rustc --print target-list`) that best matches autoconf. +--- + compiler/rustc_session/src/config.rs | 2 +- + compiler/rustc_target/src/spec/i686_unknown_linux_gnu.rs | 2 +- + compiler/rustc_target/src/spec/mod.rs | 9 +++++++++ + .../rustc_target/src/spec/x86_64_unknown_linux_gnu.rs | 2 +- + 4 files changed, 12 insertions(+), 3 deletions(-) + +diff --git a/compiler/rustc_session/src/config.rs b/compiler/rustc_session/src/config.rs +index 14ad1a42a7d8..efd47c47293b 100644 +--- a/compiler/rustc_session/src/config.rs ++++ b/compiler/rustc_session/src/config.rs +@@ -1867,7 +1867,7 @@ pub fn parse_target_triple( + early_error(error_format, &format!("target file {path:?} does not exist")) + }) + } +- Some(target) => TargetTriple::TargetTriple(target), ++ Some(target) => TargetTriple::from_alias(target), + _ => TargetTriple::from_triple(host_triple()), + } + } +diff --git a/compiler/rustc_target/src/spec/i686_unknown_linux_gnu.rs b/compiler/rustc_target/src/spec/i686_unknown_linux_gnu.rs +index 0998c618f31a..91c79c7e4ff0 100644 +--- a/compiler/rustc_target/src/spec/i686_unknown_linux_gnu.rs ++++ b/compiler/rustc_target/src/spec/i686_unknown_linux_gnu.rs +@@ -9,7 +9,7 @@ pub fn target() -> Target { + base.stack_probes = StackProbeType::Call; + + Target { +- llvm_target: "i686-unknown-linux-gnu".into(), ++ llvm_target: "i686-pc-linux-gnu".into(), + pointer_width: 32, + data_layout: "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-\ + f64:32:64-f80:32-n8:16:32-S128" +diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs +index da0589cdd209..dc9865bdf64a 100644 +--- a/compiler/rustc_target/src/spec/mod.rs ++++ b/compiler/rustc_target/src/spec/mod.rs +@@ -2506,6 +2506,15 @@ pub fn from_path(path: &Path) -> Result { + Ok(TargetTriple::TargetJson { path_for_rustdoc: canonicalized_path, triple, contents }) + } + ++ /// Creates a target triple from its alias ++ pub fn from_alias(triple: String) -> Self { ++ match triple.as_str() { ++ "x86_64-pc-linux-gnu" => TargetTriple::from_triple("x86_64-unknown-linux-gnu"), ++ "i686-pc-linux-gnu" => TargetTriple::from_triple("i686-unknown-linux-gnu"), ++ _ => TargetTriple::TargetTriple(triple), ++ } ++ } ++ + /// Returns a string triple for this target. + /// + /// If this target is a path, the file name (without extension) is returned. +diff --git a/compiler/rustc_target/src/spec/x86_64_unknown_linux_gnu.rs b/compiler/rustc_target/src/spec/x86_64_unknown_linux_gnu.rs +index e525cfdde14f..2dfe25f4f238 100644 +--- a/compiler/rustc_target/src/spec/x86_64_unknown_linux_gnu.rs ++++ b/compiler/rustc_target/src/spec/x86_64_unknown_linux_gnu.rs +@@ -15,7 +15,7 @@ pub fn target() -> Target { + | SanitizerSet::THREAD; + + Target { +- llvm_target: "x86_64-unknown-linux-gnu".into(), ++ llvm_target: "x86_64-pc-linux-gnu".into(), + pointer_width: 64, + data_layout: "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" + .into(), diff --git a/x86_64/extra/rust/0003-compiler-Use-wasm-ld-for-wasm-targets.patch b/x86_64/extra/rust/0003-compiler-Use-wasm-ld-for-wasm-targets.patch new file mode 100644 index 0000000..c2002ae --- /dev/null +++ b/x86_64/extra/rust/0003-compiler-Use-wasm-ld-for-wasm-targets.patch @@ -0,0 +1,24 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Sat, 6 Nov 2021 22:42:06 +0100 +Subject: [PATCH] compiler: Use wasm-ld for wasm targets + +We don't ship rust-lld. +--- + compiler/rustc_target/src/spec/wasm_base.rs | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/compiler/rustc_target/src/spec/wasm_base.rs b/compiler/rustc_target/src/spec/wasm_base.rs +index de7b7374af31..9ea181ab8d8f 100644 +--- a/compiler/rustc_target/src/spec/wasm_base.rs ++++ b/compiler/rustc_target/src/spec/wasm_base.rs +@@ -99,8 +99,7 @@ pub fn options() -> TargetOptions { + // arguments just yet + limit_rdylib_exports: false, + +- // we use the LLD shipped with the Rust toolchain by default +- linker: Some("rust-lld".into()), ++ linker: Some("wasm-ld".into()), + lld_flavor: LldFlavor::Wasm, + linker_is_gnu: false, + diff --git a/x86_64/extra/rust/0004-remove-include-linux-fs.h.patch b/x86_64/extra/rust/0004-remove-include-linux-fs.h.patch new file mode 100644 index 0000000..bbf0d0e --- /dev/null +++ b/x86_64/extra/rust/0004-remove-include-linux-fs.h.patch @@ -0,0 +1,59 @@ +From 9cf13067cb5088626ba7ee1ec4c42ec59c7995a0 Mon Sep 17 00:00:00 2001 +From: Fangrui Song +Date: Mon, 11 Jul 2022 12:53:34 -0700 +Subject: [PATCH] [sanitizer] Remove #include to resolve + fsconfig_command/mount_attr conflict with glibc 2.36 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +It is generally not a good idea to mix usage of glibc headers and Linux UAPI +headers (https://sourceware.org/glibc/wiki/Synchronizing_Headers). In glibc +since 7eae6a91e9b1670330c9f15730082c91c0b1d570 (milestone: 2.36), sys/mount.h +defines `fsconfig_command` which conflicts with linux/mount.h: + + .../usr/include/linux/mount.h:95:6: error: redeclaration of ‘enum fsconfig_command’ + +Remove #include which pulls in linux/mount.h. Expand its 4 macros manually. +Android sys/mount.h doesn't define BLKBSZGET and it still needs linux/fs.h. +In the long term we should move Linux specific definitions to sanitizer_platform_limits_linux.cpp +but this commit is easy to cherry pick into older compiler-rt releases. + +Fix https://github.com/llvm/llvm-project/issues/56421 + +Reviewed By: #sanitizers, vitalybuka, zatrazz + +Differential Revision: https://reviews.llvm.org/D129471 +--- + .../sanitizer_platform_limits_posix.cpp | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp +index 4bd425435d56..3a94b260686f 100644 +--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp ++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp +@@ -73,7 +73,9 @@ + #include + #include + #include ++#if SANITIZER_ANDROID + #include ++#endif + #include + #include + #include +@@ -876,10 +878,10 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); + unsigned IOCTL_EVIOCGPROP = IOCTL_NOT_PRESENT; + unsigned IOCTL_EVIOCSKEYCODE_V2 = IOCTL_NOT_PRESENT; + #endif +- unsigned IOCTL_FS_IOC_GETFLAGS = FS_IOC_GETFLAGS; +- unsigned IOCTL_FS_IOC_GETVERSION = FS_IOC_GETVERSION; +- unsigned IOCTL_FS_IOC_SETFLAGS = FS_IOC_SETFLAGS; +- unsigned IOCTL_FS_IOC_SETVERSION = FS_IOC_SETVERSION; ++ unsigned IOCTL_FS_IOC_GETFLAGS = _IOR('f', 1, long); ++ unsigned IOCTL_FS_IOC_GETVERSION = _IOR('v', 1, long); ++ unsigned IOCTL_FS_IOC_SETFLAGS = _IOW('f', 2, long); ++ unsigned IOCTL_FS_IOC_SETVERSION = _IOW('v', 2, long); + unsigned IOCTL_GIO_CMAP = GIO_CMAP; + unsigned IOCTL_GIO_FONT = GIO_FONT; + unsigned IOCTL_GIO_UNIMAP = GIO_UNIMAP; diff --git a/x86_64/extra/rust/PKGBUILD b/x86_64/extra/rust/PKGBUILD new file mode 100644 index 0000000..eb1d58d --- /dev/null +++ b/x86_64/extra/rust/PKGBUILD @@ -0,0 +1,72 @@ +pkgname=rust +pkgver=1.63.0 +pkgrel=1 +conflicts=(rust-nightly) +pkgdesc="Systems programming language focused on safety, speed and concurrency" +url=https://www.rust-lang.org/ +arch=(x86_64) +license=(MIT Apache) +options=(!emptydirs !strip) +llvm_ver=13.0.1 +depends=(gcc llvm curl gcc) +makedepends=(clang rust) +source=( + "https://static.rust-lang.org/dist/rustc-$pkgver-src.tar.xz" + "https://github.com/llvm/llvm-project/releases/download/llvmorg-$llvm_ver/compiler-rt-$llvm_ver.src.tar.xz" + 0001-cargo-Change-libexec-dir.patch + 0001-bootstrap-Change-libexec-dir.patch + 0002-compiler-Change-LLVM-targets.patch + 0003-compiler-Use-wasm-ld-for-wasm-targets.patch + 0004-remove-include-linux-fs.h.patch + config-drunk.toml +) + +prepare() { + cd rustc-$pkgver-src + + # Patch bootstrap and cargo so credential helpers + # are in /usr/lib instead of /usr/libexec + patch -d src/tools/cargo -Np1 < $srcdir/0001-cargo-Change-libexec-dir.patch + patch -Np1 -i $srcdir/0001-bootstrap-Change-libexec-dir.patch + + # Use our *-pc-linux-gnu targets, making LTO with clang simpler + patch -Np1 -i $srcdir/0002-compiler-Change-LLVM-targets.patch + + # Use our wasm-ld + patch -Np1 -i $srcdir/0003-compiler-Use-wasm-ld-for-wasm-targets.patch + + # https://github.com/llvm/llvm-project/issues/56421 + patch -Np1 -d src/llvm-project < $srcdir/0004-remove-include-linux-fs.h.patch +} + +build() { + cd rustc-$pkgver-src + + cp -f $srcdir/config-drunk.toml config.toml + + export RUST_BACKTRACE=1 + export RUST_COMPILER_RT_ROOT="$srcdir/compiler-rt-$llvm_ver.src" + [[ -d $RUST_COMPILER_RT_ROOT ]] + + DESTDIR="$srcdir/dest-rust" python ./x.py install -j "$(nproc)" + + cd ../dest-rust + + # delete unnecessary files, e.g. files only used for the uninstall script + rm usr/lib/rustlib/{components,install.log,rust-installer-version,uninstall.sh} + rm usr/lib/rustlib/manifest-* + + # rustbuild always installs copies of the shared libraries to /usr/lib, + # overwrite them with symlinks to the per-architecture versions + ln -srft usr/lib usr/lib/rustlib/x86_64-unknown-linux-gnu/lib/*.so + + mkdir -p usr/share/bash-completion + mv etc/bash_completion.d usr/share/bash-completion/completions + + mkdir -p usr/share/licenses/rust + mv -t usr/share/licenses/rust usr/share/doc/rust/{COPYRIGHT,LICENSE*} +} + +package() { + cp -a dest-rust/* $pkgdir +} diff --git a/x86_64/extra/rust/config-drunk.toml b/x86_64/extra/rust/config-drunk.toml new file mode 100644 index 0000000..8f85332 --- /dev/null +++ b/x86_64/extra/rust/config-drunk.toml @@ -0,0 +1,45 @@ +changelog-seen = 2 +profile = "user" + +[target.x86_64-unknown-linux-gnu] +llvm-config = "/usr/bin/llvm-config" + +[llvm] +link-shared = true + +[build] +target = [ + "x86_64-unknown-linux-gnu", +] +locked-deps = true +vendor = true +tools = ["cargo", "rls", "clippy", "rustfmt", "analysis", "src", "rust-demangler"] +sanitizers = true +profiler = true + +# Generating docs fails with the wasm32-* targets +docs = false + +[install] +prefix = "/usr" +libdir = "/usr/lib" +bindir = "/usr/bin" + +[rust] +debuginfo-level-std = 2 +channel = "stable" +description = "Drunk Linux $pkgver-$pkgrel" +rpath = false +backtrace-on-ice = true +remap-debuginfo = true +jemalloc = true +incremental = true + +# LLVM crashes when passing an object through ThinLTO twice. This is triggered +# when using rust code in cross-language LTO if libstd was built using ThinLTO. +# http://blog.llvm.org/2019/09/closing-gap-cross-language-lto-between.html +# https://github.com/rust-lang/rust/issues/54872 +codegen-units-std = 1 + +[dist] +compression-formats = ["xz"] diff --git a/x86_64/extra/sane/66-saned.rules b/x86_64/extra/sane/66-saned.rules new file mode 100644 index 0000000..3c9ec85 --- /dev/null +++ b/x86_64/extra/sane/66-saned.rules @@ -0,0 +1,2 @@ +# udev rule for saned (SANE scanning daemon) to be able to write on usb port +ENV{libsane_matched}=="yes", ENV{DEVNAME}!="", RUN+="/usr/bin/setfacl -m g:saned:rw $env{DEVNAME}" diff --git a/x86_64/extra/sane/PKGBUILD b/x86_64/extra/sane/PKGBUILD new file mode 100644 index 0000000..9bdf202 --- /dev/null +++ b/x86_64/extra/sane/PKGBUILD @@ -0,0 +1,67 @@ +pkgname=sane +pkgver=1.1.1 +pkgrel=1 +arch=(x86_64) +depends=(cairo glibc libgphoto2 libnl libpng libxml2 openssl) +makedepends=(autoconf-archive curl glib2 libjpeg libtiff libusb) +source=("https://gitlab.com/sane-project/backends/-/archive/${pkgver}/backends-${pkgver}.tar.gz" + "66-${pkgname}d.rules" + "${pkgname}.sysusers" + "${pkgname}d.service" + "${pkgname}d.socket") + +prepare() { + cd backends-$pkgver + + echo "${pkgver}" > .tarball-version + echo "${pkgver}" > .version + + autoreconf -fvi +} + +build() { + cd backends-$pkgver + + ./configure --prefix=/usr \ + --disable-locking \ + --disable-rpath \ + --enable-pthread \ + --localstatedir=/var \ + --sbindir=/usr/bin \ + --sysconfdir=/etc \ + --with-libcurl \ + --with-pic \ + --with-systemd \ + --with-usb + + make +} + +package() { + cd backends-$pkgver + + make DESTDIR="${pkgdir}" install + + # generate udev udev+hwdb + install -vdm 755 "${pkgdir}/usr/lib/udev/rules.d/" + tools/sane-desc -m udev+hwdb -s doc/descriptions/ > "${pkgdir}/usr/lib/udev/rules.d/65-${pkgname}.rules" + tools/sane-desc -m udev+hwdb -s doc/descriptions-external/ >> "${pkgdir}/usr/lib/udev/rules.d/65-${pkgname}.rules" + + # generate udev hwdb + install -vdm 755 "${pkgdir}/usr/lib/udev/hwdb.d/" + tools/sane-desc -m hwdb -s doc/descriptions/ > "${pkgdir}/usr/lib/udev/hwdb.d/20-${pkgname}.hwdb" + + # NOTE: an empty new line is required between the two .desc collections + printf "\n" >> "${pkgdir}/usr/lib/udev/hwdb.d/20-${pkgname}.hwdb" + tools/sane-desc -m hwdb -s doc/descriptions-external/ >> "${pkgdir}/usr/lib/udev/hwdb.d/20-${pkgname}.hwdb" + + # systemd integration + install -vDm 644 "../${pkgname}d.socket" \ + -t "${pkgdir}/usr/lib/systemd/system/" + install -vDm 644 "../${pkgname}d.service" \ + "${pkgdir}/usr/lib/systemd/system/${pkgname}d@.service" + install -vDm 644 "../66-${pkgname}d.rules" "${pkgdir}/usr/lib/udev/rules.d/" + + # sysusers.d + install -vDm 644 "../${pkgname}.sysusers" "${pkgdir}/usr/lib/sysusers.d/${pkgname}.conf" +} diff --git a/x86_64/extra/sane/sane.sysusers b/x86_64/extra/sane/sane.sysusers new file mode 100644 index 0000000..4cbe094 --- /dev/null +++ b/x86_64/extra/sane/sane.sysusers @@ -0,0 +1 @@ +u saned - "SANE daemon user" - - diff --git a/x86_64/extra/sane/saned.service b/x86_64/extra/sane/saned.service new file mode 100644 index 0000000..679ff03 --- /dev/null +++ b/x86_64/extra/sane/saned.service @@ -0,0 +1,18 @@ +[Unit] +Description=Scanner Service +Requires=saned.socket + +[Service] +User=saned +Group=saned +ExecStart=/usr/bin/saned +StandardInput=null +StandardOutput=journal +StandardError=journal +Environment=SANE_CONFIG_DIR=/etc/sane.d +# If you need to debug your configuration uncomment the next line and +# change it as appropriate to set the desired debug options +# Environment=SANE_DEBUG_DLL=255 SANE_DEBUG_NET=255 + +[Install] +Also=saned.socket diff --git a/x86_64/extra/sane/saned.socket b/x86_64/extra/sane/saned.socket new file mode 100644 index 0000000..1aa19e7 --- /dev/null +++ b/x86_64/extra/sane/saned.socket @@ -0,0 +1,10 @@ +[Unit] +Description=saned incoming socket + +[Socket] +ListenStream=6566 +Accept=yes +MaxConnections=1 + +[Install] +WantedBy=sockets.target diff --git a/x86_64/extra/sasl2/PKGBUILD b/x86_64/extra/sasl2/PKGBUILD new file mode 100644 index 0000000..cd649d4 --- /dev/null +++ b/x86_64/extra/sasl2/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=sasl2 +rname=cyrus-sasl +pkgver=2.1.28 +pkgrel=1 +arch=(x86_64) +depends=(openssl gdbm openldap sqlite3 linux-pam) +source=(https://github.com/cyrusimap/$rname/releases/download/$rname-$pkgver/$rname-$pkgver.tar.gz) + +prepare() { + cd $rname-$pkgver + + autoreconf -fiv +} + +build() { + cd $rname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --with-devrandom=/dev/urandom + + make +} + +package() { + cd $rname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/sassc/PKGBUILD b/x86_64/extra/sassc/PKGBUILD new file mode 100644 index 0000000..7579397 --- /dev/null +++ b/x86_64/extra/sassc/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=sassc +pkgver=3.6.2 +pkgrel=1 +arch=('x86_64') +depends=(libsass) +makedepends=(base-devel) +source=(https://github.com/sass/sassc/archive/$pkgver/sassc-$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + autoreconf -fi +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/schroot/PKGBUILD b/x86_64/extra/schroot/PKGBUILD new file mode 100644 index 0000000..b15f403 --- /dev/null +++ b/x86_64/extra/schroot/PKGBUILD @@ -0,0 +1,66 @@ +pkgname=schroot +pkgver=1.6.10 +pkgrel=1 +depends=('linux-pam' 'boost' 'e2fsprogs') +makedepends=('boost' 'cppunit') +arch=('x86_64') +backup=('etc/schroot/schroot.conf' + 'etc/schroot/arch32/config' + 'etc/schroot/arch32/copyfiles' + 'etc/schroot/arch32/mount' + 'etc/schroot/arch32/nssdatabases') +source=("http://http.debian.net/debian/pool/main/s/$pkgname/${pkgname}_${pkgver}.orig.tar.xz" + "http://http.debian.net/debian/pool/main/s/schroot/schroot_$pkgver-3+deb9u1.debian.tar.xz" + "https://src.fedoraproject.org/rpms/schroot/raw/rawhide/f/schroot-gcc8-assert-fix.patch" + 'arch32-example' + 'arch32-config' + 'arch32-copyfiles' + 'arch32-mount' + 'arch32-nssdatabases' + 'pam.d.schroot.patch' + 'schroot-cppunit.patch') + +prepare() { + cd ${pkgname}-${pkgver} + + cat "$srcdir"/debian/patches/series | while read p; do + patch -p1 -i "$srcdir"/debian/patches/$p + done + + # fix configure with cppunit 1.4 + patch -p1 -i ../schroot-cppunit.patch + # https://bugs.archlinux.org/task/73481 + patch -p1 -i ../schroot-gcc8-assert-fix.patch + ./bootstrap +} + +build() { + cd ${pkgname}-${pkgver} + + export CFLAGS="$CFLAGS -ffat-lto-objects" + export CXXFLAGS="$CXXFLAGS -ffat-lto-objects" + export LDFLAGS="${LDFLAGS//-Wl,--as-needed}" + + ./configure \ + --prefix=/usr \ + --libexecdir=/usr/lib \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --enable-dchroot \ + --with-bash-completion-dir=/usr/share/bash-completion/completions/ + + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="$pkgdir" install + + install -dm 755 "$pkgdir"/etc/schroot/arch32 + install -m 644 "$srcdir"/arch32-{config,mount,copyfiles,nssdatabases} "$pkgdir"/etc/schroot/arch32 + rename 'arch32-' '' "$pkgdir"/etc/schroot/arch32/* + install -m 644 "$srcdir"/arch32-example "$pkgdir"/etc/schroot/chroot.d/arch32.conf.example + + patch -i "$srcdir"/pam.d.schroot.patch "$pkgdir"/etc/pam.d/schroot +} diff --git a/x86_64/extra/schroot/arch32-config b/x86_64/extra/schroot/arch32-config new file mode 100644 index 0000000..0ee72d5 --- /dev/null +++ b/x86_64/extra/schroot/arch32-config @@ -0,0 +1,11 @@ +# Default settings for chroot setup and exec scripts. +# See schroot-script-config(5) for further details. + +# Filesystems to mount inside the chroot. +FSTAB="/etc/schroot/arch32/mount" + +# Files to copy from the host system into the chroot. +COPYFILES="/etc/schroot/arch32/copyfiles" + +# System databases to copy into the chroot +NSSDATABASES="/etc/schroot/arch32/nssdatabases" diff --git a/x86_64/extra/schroot/arch32-copyfiles b/x86_64/extra/schroot/arch32-copyfiles new file mode 100644 index 0000000..f39ee48 --- /dev/null +++ b/x86_64/extra/schroot/arch32-copyfiles @@ -0,0 +1,6 @@ +/etc/group +/etc/hosts +/etc/passwd +/etc/resolv.conf +/etc/localtime +/etc/locale.gen diff --git a/x86_64/extra/schroot/arch32-example b/x86_64/extra/schroot/arch32-example new file mode 100644 index 0000000..4781914 --- /dev/null +++ b/x86_64/extra/schroot/arch32-example @@ -0,0 +1,10 @@ +[arch32] +description=Arch32 +type=directory +directory=/opt/arch32 +#users=username +groups=users +root-groups=root +profile=arch32 +personality=linux32 +#aliases=32,i686 diff --git a/x86_64/extra/schroot/arch32-mount b/x86_64/extra/schroot/arch32-mount new file mode 100644 index 0000000..075d6e4 --- /dev/null +++ b/x86_64/extra/schroot/arch32-mount @@ -0,0 +1,12 @@ +# mount.defaults: static file system information for chroots. +# Note that the mount point will be prefixed by the chroot path +# (CHROOT_PATH) +# +# +proc /proc proc defaults 0 0 +/dev /dev none rw,bind 0 0 +#/dev/pts /dev/pts none rw,bind 0 0 +tmpfs /dev/shm tmpfs defaults 0 0 +/sys /sys none rw,bind 0 0 +/tmp /tmp none rw,bind 0 0 +/home /home none rw,bind 0 0 diff --git a/x86_64/extra/schroot/arch32-nssdatabases b/x86_64/extra/schroot/arch32-nssdatabases new file mode 100644 index 0000000..815ddce --- /dev/null +++ b/x86_64/extra/schroot/arch32-nssdatabases @@ -0,0 +1,6 @@ +# System databases to copy into the chroot from the host system. +# +# +passwd +shadow +group diff --git a/x86_64/extra/schroot/pam.d.schroot.patch b/x86_64/extra/schroot/pam.d.schroot.patch new file mode 100644 index 0000000..f4e5667 --- /dev/null +++ b/x86_64/extra/schroot/pam.d.schroot.patch @@ -0,0 +1,18 @@ +@@ -23,13 +23,9 @@ + # time restrainst on schroot usage. + # account requisite pam_time.so + +-# The standard Unix authentication modules, used with +-# NIS (man nsswitch) as well as normal /etc/passwd and +-# /etc/shadow entries. +-@include common-auth +-@include common-account +-@include common-session +- ++account required pam_unix.so ++session required pam_unix.so ++ + # Sets up user limits, please uncomment and read /etc/security/limits.conf + # to enable this functionality. + # session required pam_limits.so + diff --git a/x86_64/extra/schroot/schroot-cppunit.patch b/x86_64/extra/schroot/schroot-cppunit.patch new file mode 100644 index 0000000..f51320b --- /dev/null +++ b/x86_64/extra/schroot/schroot-cppunit.patch @@ -0,0 +1,11 @@ +--- schroot-1.6.10/configure.ac.orig 2017-05-20 09:50:30.146864516 +0000 ++++ schroot-1.6.10/configure.ac 2017-05-20 09:51:26.216792794 +0000 +@@ -336,7 +336,7 @@ + [HAVE_UUID=yes], + [HAVE_UUID=no]) + +-AM_PATH_CPPUNIT([1.10.0], [HAVE_CPPUNIT=yes]) ++PKG_CHECK_MODULES([CPPUNIT], [cppunit], [HAVE_CPPUNIT=yes], [HAVE_CPPUNIT=no]) + AM_CONDITIONAL([USE_UNIT_TESTS], [test -n "$HAVE_CPPUNIT"]) + + SCHROOT_CFLAGS="$UUID_CFLAGS" diff --git a/x86_64/extra/schroot/schroot-gcc8-assert-fix.patch b/x86_64/extra/schroot/schroot-gcc8-assert-fix.patch new file mode 100644 index 0000000..fcef652 --- /dev/null +++ b/x86_64/extra/schroot/schroot-gcc8-assert-fix.patch @@ -0,0 +1,38 @@ +--- ./sbuild/sbuild-util.cc.orig 2018-05-05 12:39:09.706894741 -0400 ++++ ./sbuild/sbuild-util.cc 2018-05-05 12:41:46.963886076 -0400 +@@ -631,7 +631,7 @@ sbuild::passwd::query_uid (uid_t uid) + ::passwd *pwd_result; + + while ((error = getpwuid_r(uid, this, +- &buffer[0], buffer.capacity(), ++ buffer.data(), buffer.capacity(), + &pwd_result))) + { + size <<= 1; +@@ -654,7 +654,7 @@ sbuild::passwd::query_name (const char * + ::passwd *pwd_result; + + while ((error = getpwnam_r(name, this, +- &buffer[0], buffer.capacity(), ++ buffer.data(), buffer.capacity(), + &pwd_result))) + { + size <<= 1; +@@ -740,7 +740,7 @@ sbuild::group::query_gid (gid_t gid) + ::group *grp_result; + + while ((error = getgrgid_r(gid, this, +- &buffer[0], buffer.capacity(), ++ buffer.data(), buffer.capacity(), + &grp_result))) + { + size <<= 1; +@@ -763,7 +763,7 @@ sbuild::group::query_name (const char *n + ::group *grp_result; + + while ((error = getgrnam_r(name, this, +- &buffer[0], buffer.capacity(), ++ buffer.data(), buffer.capacity(), + &grp_result))) + { + size <<= 1; diff --git a/x86_64/extra/scim/PKGBUILD b/x86_64/extra/scim/PKGBUILD new file mode 100644 index 0000000..bb0bb14 --- /dev/null +++ b/x86_64/extra/scim/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=scim +pkgver=1.4.18 +pkgrel=1 +arch=('x86_64') +depends=(gtk2+ gtk3+) +makedepends=(intltool gtk3+) +source=($pkgname-$pkgver.tar.gz::https://github.com/scim-im/scim/archive/$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + ./bootstrap +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --with-gtk-version=2 + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="${pkgdir}" install +} diff --git a/x86_64/extra/sddm/PKGBUILD b/x86_64/extra/sddm/PKGBUILD new file mode 100644 index 0000000..0191fc8 --- /dev/null +++ b/x86_64/extra/sddm/PKGBUILD @@ -0,0 +1,67 @@ +pkgname=sddm +pkgver=0.19.0 +pkgrel=8 +arch=(x86_64) +depends=(xauth qt5 xorg-server drunk-fonts double-conversion drunk-drivers-xorg) +makedepends=(extra-cmake-modules python3 qt5) +backup=('usr/share/sddm/scripts/wayland-session' + 'usr/share/sddm/scripts/Xsetup' + 'usr/share/sddm/scripts/Xstop' + 'etc/pam.d/sddm' + 'etc/pam.d/sddm-autologin' + 'etc/pam.d/sddm-greeter') +source=($pkgname-$pkgver.tar.gz::"https://github.com/$pkgname/$pkgname/archive/v$pkgver.tar.gz" + sddm.sysusers + sddm.tmpfiles + tty.conf + + pam-faillock.patch + sddm-fix-race-pre.patch + sddm-fix-race.patch + sddm-desktop-session.patch + sddm-fix-build.patch) +options=(!strip) + +prepare() { + patch -d $pkgname-$pkgver -p1 < pam-faillock.patch # Port away from deprecated pam_tally2 + patch -d $pkgname-$pkgver -p1 < sddm-fix-race-pre.patch # Make next patch apply + patch -d $pkgname-$pkgver -p1 < sddm-fix-race.patch # Fix race at startup + patch -d $pkgname-$pkgver -p1 < sddm-desktop-session.patch # Fix desktop session name + patch -d $pkgname-$pkgver -p1 < sddm-fix-build.patch # Fix build with Qt post 5.15.2 +} + + +build() { + cmake -B build -S $pkgname-$pkgver \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_INSTALL_LIBEXECDIR=/usr/lib/sddm \ + -D DBUS_CONFIG_DIR=/usr/share/dbus-1/system.d \ + -D DBUS_CONFIG_FILENAME=sddm_org.freedesktop.DisplayManager.conf \ + -D BUILD_MAN_PAGES=OFF \ + -D UID_MAX=60513 + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + install -Dm644 sddm.sysusers "$pkgdir"/usr/lib/sysusers.d/sddm.conf + install -Dm644 sddm.tmpfiles "$pkgdir"/usr/lib/tmpfiles.d/sddm.conf + + # Include modified tty.conf + install -Dm644 tty.conf "$pkgdir"/etc/sddm.conf.d/tty.conf + + # Double chmod scripts to be executable!!! + # Forgetting that will make sessions unusable + chmod +x "$pkgdir"/usr/share/sddm/scripts/* + + install -d "$pkgdir"/usr/lib/sddm/sddm.conf.d + "$pkgdir"/usr/bin/sddm --example-config > "$pkgdir"/usr/lib/sddm/sddm.conf.d/default.conf + + # Don't set PATH in sddm.conf + sed -r 's|DefaultPath=.*|DefaultPath=/usr/sbin:/usr/bin:/bin:/sbin|g' -i "$pkgdir"/usr/lib/sddm/sddm.conf.d/default.conf + + # Unset InputMethod https://github.com/sddm/sddm/issues/952 + sed -e "/^InputMethod/s/qtvirtualkeyboard//" -i "$pkgdir"/usr/lib/sddm/sddm.conf.d/default.conf +} diff --git a/x86_64/extra/sddm/pam-faillock.patch b/x86_64/extra/sddm/pam-faillock.patch new file mode 100644 index 0000000..91c44bb --- /dev/null +++ b/x86_64/extra/sddm/pam-faillock.patch @@ -0,0 +1,12 @@ +diff --git a/services/sddm-autologin.pam b/services/sddm-autologin.pam +index 4c82048..b42991e 100755 +--- a/services/sddm-autologin.pam ++++ b/services/sddm-autologin.pam +@@ -1,6 +1,6 @@ + #%PAM-1.0 + auth required pam_env.so +-auth required pam_tally2.so file=/var/log/tallylog onerr=succeed ++auth required pam_faillock.so preauth + auth required pam_shells.so + auth required pam_nologin.so + auth required pam_permit.so diff --git a/x86_64/extra/sddm/sddm-desktop-session.patch b/x86_64/extra/sddm/sddm-desktop-session.patch new file mode 100644 index 0000000..ada64d7 --- /dev/null +++ b/x86_64/extra/sddm/sddm-desktop-session.patch @@ -0,0 +1,25 @@ +From 5fd5ed271a0e5b8c8857cc4f5f2084d43fd228f1 Mon Sep 17 00:00:00 2001 +From: Fabian Vogt +Date: Mon, 9 Nov 2020 11:22:15 +0100 +Subject: [PATCH] Only use the base name for $DESKTOP_SESSION + +Other DMs don't use the path. + +Fixes #852 +--- + src/common/Session.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/common/Session.cpp b/src/common/Session.cpp +index 2d7b04f1..3de28ef1 100644 +--- a/src/common/Session.cpp ++++ b/src/common/Session.cpp +@@ -89,7 +89,7 @@ namespace SDDM { + + QString Session::desktopSession() const + { +- return fileName().replace(s_entryExtention, QString()); ++ return QFileInfo(m_fileName).completeBaseName(); + } + + QString Session::desktopNames() const diff --git a/x86_64/extra/sddm/sddm-fix-build.patch b/x86_64/extra/sddm/sddm-fix-build.patch new file mode 100644 index 0000000..8e6cde8 --- /dev/null +++ b/x86_64/extra/sddm/sddm-fix-build.patch @@ -0,0 +1,13 @@ +diff --git a/src/daemon/XorgDisplayServer.cpp b/src/daemon/XorgDisplayServer.cpp +index 5f93a1b..d5f29a9 100644 +--- a/src/daemon/XorgDisplayServer.cpp ++++ b/src/daemon/XorgDisplayServer.cpp +@@ -65,7 +65,7 @@ namespace SDDM { + // create a random hexadecimal number + const char *digits = "0123456789abcdef"; + for (int i = 0; i < 32; ++i) +- m_cookie[i] = digits[dis(gen)]; ++ m_cookie[i] = QLatin1Char(digits[dis(gen)]); + } + + XorgDisplayServer::~XorgDisplayServer() { diff --git a/x86_64/extra/sddm/sddm-fix-race-pre.patch b/x86_64/extra/sddm/sddm-fix-race-pre.patch new file mode 100644 index 0000000..c2e35d3 --- /dev/null +++ b/x86_64/extra/sddm/sddm-fix-race-pre.patch @@ -0,0 +1,171 @@ +From 68cc9e31d1a4c4609f42114782fc485cb07353a4 Mon Sep 17 00:00:00 2001 +From: Fabian Vogt +Date: Fri, 9 Oct 2020 21:06:01 +0200 +Subject: [PATCH] Merge normal and testing paths in XorgDisplayServer::start + +They have much in common and this means that Xephyr can also make use use +of -displayfd now. +--- + src/daemon/XorgDisplayServer.cpp | 132 ++++++++++++++----------------- + 1 file changed, 60 insertions(+), 72 deletions(-) + +diff --git a/src/daemon/XorgDisplayServer.cpp b/src/daemon/XorgDisplayServer.cpp +index d5f29a94..e60c0221 100644 +--- a/src/daemon/XorgDisplayServer.cpp ++++ b/src/daemon/XorgDisplayServer.cpp +@@ -136,95 +136,83 @@ namespace SDDM { + return false; + } + +- if (daemonApp->testing()) { +- QStringList args; +- QDir x11socketDir(QStringLiteral("/tmp/.X11-unix")); +- int display = 100; +- while (x11socketDir.exists(QStringLiteral("X%1").arg(display))) { +- ++display; +- } +- m_display = QStringLiteral(":%1").arg(display); +- args << m_display << QStringLiteral("-auth") << m_authPath << QStringLiteral("-br") << QStringLiteral("-noreset") << QStringLiteral("-screen") << QStringLiteral("800x600"); +- process->start(mainConfig.X11.XephyrPath.get(), args); +- +- +- // wait for display server to start +- if (!process->waitForStarted()) { +- // log message +- qCritical() << "Failed to start display server process."; ++ // set process environment ++ QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); ++ env.insert(QStringLiteral("XCURSOR_THEME"), mainConfig.Theme.CursorTheme.get()); ++ process->setProcessEnvironment(env); + +- // return fail +- return false; +- } +- emit started(); +- } else { +- // set process environment +- QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); +- env.insert(QStringLiteral("XCURSOR_THEME"), mainConfig.Theme.CursorTheme.get()); +- process->setProcessEnvironment(env); +- +- //create pipe for communicating with X server +- //0 == read from X, 1== write to from X +- int pipeFds[2]; +- if (pipe(pipeFds) != 0) { +- qCritical("Could not create pipe to start X server"); +- } ++ //create pipe for communicating with X server ++ //0 == read from X, 1== write to from X ++ int pipeFds[2]; ++ if (pipe(pipeFds) != 0) { ++ qCritical("Could not create pipe to start X server"); ++ } + +- // start display server +- QStringList args = mainConfig.X11.ServerArguments.get().split(QLatin1Char(' '), QString::SkipEmptyParts); +- args << QStringLiteral("-auth") << m_authPath ++ // start display server ++ QStringList args; ++ if (!daemonApp->testing()) { ++ process->setProgram(mainConfig.X11.ServerPath.get()); ++ args << mainConfig.X11.ServerArguments.get().split(QLatin1Char(' '), QString::SkipEmptyParts) + << QStringLiteral("-background") << QStringLiteral("none") +- << QStringLiteral("-noreset") +- << QStringLiteral("-displayfd") << QString::number(pipeFds[1]) + << QStringLiteral("-seat") << displayPtr()->seat()->name(); + + if (displayPtr()->seat()->name() == QLatin1String("seat0")) { + args << QStringLiteral("vt%1").arg(displayPtr()->terminalId()); + } +- qDebug() << "Running:" +- << qPrintable(mainConfig.X11.ServerPath.get()) +- << qPrintable(args.join(QLatin1Char(' '))); +- process->start(mainConfig.X11.ServerPath.get(), args); +- +- // wait for display server to start +- if (!process->waitForStarted()) { +- // log message +- qCritical() << "Failed to start display server process."; +- +- // return fail +- close(pipeFds[0]); +- return false; +- } ++ } else { ++ process->setProgram(mainConfig.X11.XephyrPath.get()); ++ args << QStringLiteral("-br") ++ << QStringLiteral("-screen") << QStringLiteral("800x600"); ++ } + +- // close the other side of pipe in our process, otherwise reading +- // from it may stuck even X server exit. +- close(pipeFds[1]); ++ args << QStringLiteral("-auth") << m_authPath ++ << QStringLiteral("-noreset") ++ << QStringLiteral("-displayfd") << QString::number(pipeFds[1]); + +- QFile readPipe; ++ process->setArguments(args); ++ qDebug() << "Running:" ++ << qPrintable(process->program()) ++ << qPrintable(process->arguments().join(QLatin1Char(' '))); ++ process->start(); + +- if (!readPipe.open(pipeFds[0], QIODevice::ReadOnly)) { +- qCritical("Failed to open pipe to start X Server"); ++ // wait for display server to start ++ if (!process->waitForStarted()) { ++ // log message ++ qCritical() << "Failed to start display server process."; + +- close(pipeFds[0]); +- return false; +- } +- QByteArray displayNumber = readPipe.readLine(); +- if (displayNumber.size() < 2) { +- // X server gave nothing (or a whitespace). +- qCritical("Failed to read display number from pipe"); ++ // return fail ++ close(pipeFds[0]); ++ return false; ++ } + +- close(pipeFds[0]); +- return false; +- } +- displayNumber.prepend(QByteArray(":")); +- displayNumber.remove(displayNumber.size() -1, 1); // trim trailing whitespace +- m_display = QString::fromLocal8Bit(displayNumber); ++ // close the other side of pipe in our process, otherwise reading ++ // from it may stuck even X server exit. ++ close(pipeFds[1]); ++ ++ QFile readPipe; ++ ++ if (!readPipe.open(pipeFds[0], QIODevice::ReadOnly)) { ++ qCritical("Failed to open pipe to start X Server"); + +- // close our pipe + close(pipeFds[0]); ++ return false; ++ } ++ QByteArray displayNumber = readPipe.readLine(); ++ if (displayNumber.size() < 2) { ++ // X server gave nothing (or a whitespace). ++ qCritical("Failed to read display number from pipe"); + +- emit started(); ++ close(pipeFds[0]); ++ return false; + } ++ displayNumber.prepend(QByteArray(":")); ++ displayNumber.remove(displayNumber.size() -1, 1); // trim trailing whitespace ++ m_display = QString::fromLocal8Bit(displayNumber); ++ ++ // close our pipe ++ close(pipeFds[0]); ++ ++ emit started(); + + // The file is also used by the greeter, which does care about the + // display number. Write the proper entry, if it's different. diff --git a/x86_64/extra/sddm/sddm-fix-race.patch b/x86_64/extra/sddm/sddm-fix-race.patch new file mode 100644 index 0000000..704bee4 --- /dev/null +++ b/x86_64/extra/sddm/sddm-fix-race.patch @@ -0,0 +1,212 @@ +From adfaa222fdfa6115ea2b320b0bbc2126db9270a5 Mon Sep 17 00:00:00 2001 +From: Fabian Vogt +Date: Thu, 12 Nov 2020 20:30:55 +0100 +Subject: [PATCH 1/3] Retry starting the display server + +Even if the CanGraphical property of a Seat is true, it's possible that it's +still too early for X to start, as it might need some driver or device which +isn't present yet. + +Fixes #1316 +--- + src/daemon/Seat.cpp | 23 ++++++++++++++++++----- + src/daemon/Seat.h | 4 +++- + src/daemon/XorgDisplayServer.cpp | 10 ++++++---- + 3 files changed, 27 insertions(+), 10 deletions(-) + +diff --git a/src/daemon/Seat.cpp b/src/daemon/Seat.cpp +index eef26da4..838c2221 100644 +--- a/src/daemon/Seat.cpp ++++ b/src/daemon/Seat.cpp +@@ -28,6 +28,7 @@ + + #include + #include ++#include + + #include + +@@ -52,7 +53,7 @@ namespace SDDM { + return m_name; + } + +- bool Seat::createDisplay(int terminalId) { ++ void Seat::createDisplay(int terminalId) { + //reload config if needed + mainConfig.load(); + +@@ -84,12 +85,24 @@ namespace SDDM { + m_displays << display; + + // start the display +- if (!display->start()) { +- qCritical() << "Could not start Display server on vt" << terminalId; +- return false; ++ startDisplay(display); ++ } ++ ++ void Seat::startDisplay(Display *display, int tryNr) { ++ if (display->start()) ++ return; ++ ++ // It's possible that the system isn't ready yet (driver not loaded, ++ // device not enumerated, ...). It's not possible to tell when that changes, ++ // so try a few times with a delay in between. ++ qWarning() << "Attempt" << tryNr << "starting the Display server on vt" << display->terminalId() << "failed"; ++ ++ if(tryNr >= 3) { ++ qCritical() << "Could not start Display server on vt" << display->terminalId(); ++ return; + } + +- return true; ++ QTimer::singleShot(2000, display, [=] { startDisplay(display, tryNr + 1); }); + } + + void Seat::removeDisplay(Display* display) { +diff --git a/src/daemon/Seat.h b/src/daemon/Seat.h +index bf22566b..f9fe7331 100644 +--- a/src/daemon/Seat.h ++++ b/src/daemon/Seat.h +@@ -35,13 +35,15 @@ namespace SDDM { + const QString &name() const; + + public slots: +- bool createDisplay(int terminalId = -1); ++ void createDisplay(int terminalId = -1); + void removeDisplay(SDDM::Display* display); + + private slots: + void displayStopped(); + + private: ++ void startDisplay(SDDM::Display *display, int tryNr = 1); ++ + QString m_name; + + QVector m_displays; +diff --git a/src/daemon/XorgDisplayServer.cpp b/src/daemon/XorgDisplayServer.cpp +index e60c0221..5f40fe8c 100644 +--- a/src/daemon/XorgDisplayServer.cpp ++++ b/src/daemon/XorgDisplayServer.cpp +@@ -248,6 +248,12 @@ namespace SDDM { + } + + void XorgDisplayServer::finished() { ++ // clean up ++ if (process) { ++ process->deleteLater(); ++ process = nullptr; ++ } ++ + // check flag + if (!m_started) + return; +@@ -283,10 +289,6 @@ namespace SDDM { + displayStopScript->deleteLater(); + displayStopScript = nullptr; + +- // clean up +- process->deleteLater(); +- process = nullptr; +- + // remove authority file + QFile::remove(m_authPath); + + +From d11e1e987b440fa1aaa741719b92472eeee79b17 Mon Sep 17 00:00:00 2001 +From: Fabian Vogt +Date: Wed, 9 Dec 2020 19:28:41 +0100 +Subject: [PATCH 2/3] Explicitly stop Xorg when starting fails + +When Xorg starts but there is an error, stop it explicitly instead of assuming +that X exits itself. This avoids a possibly lingering Xorg process in the +XorgDisplayServer instance. Add a check and warning message if Xorg is +restarted too early (shouldn't happen). +--- + src/daemon/XorgDisplayServer.cpp | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/src/daemon/XorgDisplayServer.cpp b/src/daemon/XorgDisplayServer.cpp +index 5f40fe8c..3a7bee0d 100644 +--- a/src/daemon/XorgDisplayServer.cpp ++++ b/src/daemon/XorgDisplayServer.cpp +@@ -118,6 +118,11 @@ namespace SDDM { + if (m_started) + return false; + ++ if (process) { ++ qCritical() << "Tried to start Xorg before previous instance exited"; ++ return false; ++ } ++ + // create process + process = new QProcess(this); + +@@ -195,6 +200,7 @@ namespace SDDM { + qCritical("Failed to open pipe to start X Server"); + + close(pipeFds[0]); ++ stop(); + return false; + } + QByteArray displayNumber = readPipe.readLine(); +@@ -203,6 +209,7 @@ namespace SDDM { + qCritical("Failed to read display number from pipe"); + + close(pipeFds[0]); ++ stop(); + return false; + } + displayNumber.prepend(QByteArray(":")); +@@ -219,6 +226,7 @@ namespace SDDM { + if(m_display != QStringLiteral(":0")) { + if(!addCookie(m_authPath)) { + qCritical() << "Failed to write xauth file"; ++ stop(); + return false; + } + } +@@ -232,8 +240,7 @@ namespace SDDM { + } + + void XorgDisplayServer::stop() { +- // check flag +- if (!m_started) ++ if (!process) + return; + + // log message + +From 78048b22e3988d3daec9c271883fa114abc114dc Mon Sep 17 00:00:00 2001 +From: Fabian Vogt +Date: Wed, 9 Dec 2020 19:33:08 +0100 +Subject: [PATCH 3/3] Emit XorgDisplayServer::started only when the auth file + is ready + +--- + src/daemon/XorgDisplayServer.cpp | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/daemon/XorgDisplayServer.cpp b/src/daemon/XorgDisplayServer.cpp +index 3a7bee0d..331adcda 100644 +--- a/src/daemon/XorgDisplayServer.cpp ++++ b/src/daemon/XorgDisplayServer.cpp +@@ -219,8 +219,6 @@ namespace SDDM { + // close our pipe + close(pipeFds[0]); + +- emit started(); +- + // The file is also used by the greeter, which does care about the + // display number. Write the proper entry, if it's different. + if(m_display != QStringLiteral(":0")) { +@@ -232,6 +230,8 @@ namespace SDDM { + } + changeOwner(m_authPath); + ++ emit started(); ++ + // set flag + m_started = true; + diff --git a/x86_64/extra/sddm/sddm.sysusers b/x86_64/extra/sddm/sddm.sysusers new file mode 100644 index 0000000..e56e07d --- /dev/null +++ b/x86_64/extra/sddm/sddm.sysusers @@ -0,0 +1,2 @@ +u sddm - "Simple Desktop Display Manager" /var/lib/sddm +m sddm video diff --git a/x86_64/extra/sddm/sddm.tmpfiles b/x86_64/extra/sddm/sddm.tmpfiles new file mode 100644 index 0000000..300d646 --- /dev/null +++ b/x86_64/extra/sddm/sddm.tmpfiles @@ -0,0 +1 @@ +d /var/lib/sddm 0755 sddm sddm diff --git a/x86_64/extra/sddm/tty.conf b/x86_64/extra/sddm/tty.conf new file mode 100644 index 0000000..5f80756 --- /dev/null +++ b/x86_64/extra/sddm/tty.conf @@ -0,0 +1,2 @@ +[X11] +MinimumVT=7 diff --git a/x86_64/extra/sdl12-compat/PKGBUILD b/x86_64/extra/sdl12-compat/PKGBUILD new file mode 100644 index 0000000..203626b --- /dev/null +++ b/x86_64/extra/sdl12-compat/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=sdl12-compat +pkgver=1.2.52 +pkgrel=1 +arch=(x86_64) +depends=(sdl2 glu) +makedepends=(cmake) +source=(https://github.com/libsdl-org/sdl12-compat/archive/refs/tags/release-$pkgver.tar.gz) + +build() { + cd $pkgname-release-$pkgver + + mkdir -p build && cd build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + .. + + make +} + +package() { + cd $pkgname-release-$pkgver/build + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/sdl2-image/PKGBUILD b/x86_64/extra/sdl2-image/PKGBUILD new file mode 100644 index 0000000..5d05d16 --- /dev/null +++ b/x86_64/extra/sdl2-image/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=sdl2-image +pkgver=2.0.5 +pkgrel=1 +arch=('x86_64') +depends=('sdl2' 'libpng' 'libtiff' 'libjpeg' 'libwebp') +makedepends=('cmake') +source=("https://www.libsdl.org/projects/SDL_image/release/SDL2_image-${pkgver}.tar.gz") + +build() { + cd "${srcdir}/SDL2_image-${pkgver}/" + ./configure --disable-static --prefix=/usr \ + --disable-jpg-shared \ + --disable-png-shared \ + --disable-tif-shared \ + --disable-webp-shared + + make +} + +package() { + cd "${srcdir}/SDL2_image-${pkgver}/" + + make DESTDIR="${pkgdir}/" install +} diff --git a/x86_64/extra/sdl2/PKGBUILD b/x86_64/extra/sdl2/PKGBUILD new file mode 100644 index 0000000..a319bab --- /dev/null +++ b/x86_64/extra/sdl2/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=sdl2 +pkgver=2.0.20 +pkgrel=1 +arch=('x86_64') +depends=('glibc' 'libxext' 'libxrender' 'libx11' 'libglvnd' 'libxcursor' 'ibus' 'libusb') +makedepends=('alsa-lib' 'mesa' 'pulseaudio' 'libxrandr' 'libxinerama' 'wayland' 'libxkbcommon' + 'wayland-protocols' 'ibus' 'libxss' 'cmake' 'jack2' 'ninja' 'libdecor') +source=("https://www.libsdl.org/release/SDL2-${pkgver}.tar.gz") + +build() { + CFLAGS+=" -ffat-lto-objects" + cmake -S SDL2-${pkgver} -B build -G Ninja \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D SDL_STATIC=OFF \ + -D SDL_DLOPEN=ON \ + -D SDL_RPATH=OFF + + cmake --build build +} + +package() { + DESTDIR="${pkgdir}" cmake --install build + + # For some reason, this isn't named correctly and we have to fix it to reflect the actual staticlib name. + sed -i "s/libSDL2\.a/libSDL2main.a/g" "$pkgdir"/usr/lib/cmake/SDL2/SDL2Targets-noconfig.cmake +} diff --git a/x86_64/extra/seamonkey/PKGBUILD b/x86_64/extra/seamonkey/PKGBUILD new file mode 100644 index 0000000..056f8a4 --- /dev/null +++ b/x86_64/extra/seamonkey/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Kyle Keen + +pkgname=seamonkey +pkgver=2.53.10.2 +pkgrel=2 +pkgdesc="SeaMonkey internet suite" +arch=('x86_64') +license=('MPL') +depends=('dbus-glib' 'gtk+' 'gtk2+' 'icu' 'python3' 'rust' 'yasm' 'zip' 'unzip' + 'libevent' 'libxt' 'sqlite3' 'alsa-lib' 'doxygen' 'valgrind' 'nasm' 'libxcomposite' 'libxcursor') +makedepends=('base-devel' 'clang' 'mesa') +url="https://www.seamonkey-project.org/" +source=("https://archive.mozilla.org/pub/seamonkey/releases/$pkgver/source/seamonkey-$pkgver.source.tar.xz" + "mozconfig") +install="$pkgname.install" +options=(!lto) + +# Google API keys (see http://www.chromium.org/developers/how-tos/api-keys) +_google_api_key= + +# Mozilla API keys (see https://location.services.mozilla.com/api) +_mozilla_api_key= + +prepare() { + cd "$pkgname-$pkgver" + cp ../mozconfig .mozconfig + + echo -n "$_google_api_key" > google-api-key + echo -n "$_mozilla_api_key" > mozilla-api-key + + cat >> .mozconfig < +Date: Mon, 8 Nov 2021 18:22:47 -0500 +Subject: [PATCH] migrate from custom itstool to builtin msgfmt for creating + translated XML + +gettext upstream has supported this for a very long time (since 0.19.7 +via commit b3c2a5a242c36fbbaa0c5b17f975d6c638598a23, released in 2015), +and itstool is (mostly) a legacy of the time before gettext had proper +support for these sorts of use cases. + +This is similar to the state of intltool, which is described at +https://wiki.gnome.org/MigratingFromIntltoolToGettext + +During the port from autotools to meson, the legacy use of itstool was +faithfully translated to meson in the only way possible: by jumping +through hoops to run ninja inside ninja in order to generate the .mo +files for itstool, because meson's i18n module used a flawed design and +there was no "real" target to create those files, only a .PHONY +run_target which other rules cannot depend on. + +Although meson 0.60.0 added support for real targets for the built .mo +files, this changed the rules for output filenames, breaking the script. + +But msgfmt does not care, and anyways comes with builtin meson functions +for convenient use with XML files. So let's take this opportunity to +drop legacy dependencies and use the modern, builtin tooling, which +fixes this bug as a side effect. + +Fixes #170 +--- + .gitlab-ci.yml | 2 -- + README.md | 2 +- + data/freedesktop_generate.sh | 12 ------------ + data/meson.build | 16 +++++----------- + meson.build | 1 - + 5 files changed, 6 insertions(+), 27 deletions(-) + delete mode 100755 data/freedesktop_generate.sh + +diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml +index 985dfe9..345e1ce 100644 +--- a/.gitlab-ci.yml ++++ b/.gitlab-ci.yml +@@ -9,7 +9,6 @@ variables: + glib2-devel + gettext + git +- itstool + xmlto + findutils + gettext-devel +@@ -34,4 +33,3 @@ build:meson: + paths: + - _build/meson-logs/*.txt + - _build/meson-dist/*.* +- +diff --git a/README.md b/README.md +index c23d9d5..b2fb0ac 100644 +--- a/README.md ++++ b/README.md +@@ -19,7 +19,7 @@ $ ninja -v -C _build install + ``` + + It requires the glib development package to be installed as well as +-gettext and itstool. ++gettext. + This database is translated at Transifex. + + +diff --git a/data/freedesktop_generate.sh b/data/freedesktop_generate.sh +deleted file mode 100755 +index 62ccffa..0000000 +--- a/data/freedesktop_generate.sh ++++ /dev/null +@@ -1,12 +0,0 @@ +-#!/bin/sh -e +- +-src_root="$1" +-build_root="$2" +- +-${NINJA:-ninja} -C "${build_root}" shared-mime-info-gmo +- +-itstool \ +- --its "${src_root}/data/its/shared-mime-info.its" \ +- --join "${src_root}/data/freedesktop.org.xml.in" \ +- -o "${build_root}/data/freedesktop.org.xml" \ +- "${build_root}/po/"*".gmo" +diff --git a/data/meson.build b/data/meson.build +index 24361c9..09ed7a9 100644 +--- a/data/meson.build ++++ b/data/meson.build +@@ -1,18 +1,12 @@ + + install_man('update-mime-database.1') + +-freedesktop_org_xml = custom_target('freedesktop.org.xml', +- input : files( +- 'freedesktop.org.xml.in', +- 'its/shared-mime-info.its', +- 'its/shared-mime-info.loc', +- ), ++freedesktop_org_xml = i18n.merge_file( ++ input: 'freedesktop.org.xml.in', + output: 'freedesktop.org.xml', +- command: [ +- find_program('freedesktop_generate.sh'), +- meson.source_root(), +- meson.build_root() +- ], ++ data_dirs: '.', ++ po_dir: '../po', ++ type: 'xml', + install: true, + install_dir: get_option('datadir') / 'mime' / 'packages', + ) +diff --git a/meson.build b/meson.build +index 0d08c8a..60f17ae 100644 +--- a/meson.build ++++ b/meson.build +@@ -20,7 +20,6 @@ config.set_quoted('VERSION', meson.project_version()) + ############################################################################### + # Find tools + +-itstool = find_program('itstool') + xmllint = find_program('xmllint') + xmlto = find_program('xmlto', required: false) + +-- +GitLab + diff --git a/x86_64/extra/shared-mime-info/PKGBUILD b/x86_64/extra/shared-mime-info/PKGBUILD new file mode 100644 index 0000000..3e0c5ac --- /dev/null +++ b/x86_64/extra/shared-mime-info/PKGBUILD @@ -0,0 +1,71 @@ +# Maintainer: AndyRTR +# Maintainer: Jan de Groot + +pkgname=shared-mime-info +_commit=d74a913cdf2ee17c469c470012e47cf6f48afcbe # master 2021-10-11 +pkgver=2.0+115+gd74a913 +pkgrel=1 +pkgdesc="Freedesktop.org Shared MIME Info" +arch=('x86_64') +license=('GPL2') +depends=('libxml2' 'glib2') +#makedepends=('itstool' 'gettext') +#makedepends=('itstool' 'gettext' 'xmlto' 'docbook-xsl' 'git' 'meson') +makedepends=('gettext' 'xmlto' 'docbook-xsl' 'git' 'meson') +install=shared-mime-info.install +# https://gitlab.freedesktop.org/xdg/shared-mime-info +url="https://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec/" +#source=(https://gitlab.freedesktop.org/xdg/shared-mime-info/uploads/b27eb88e4155d8fccb8bb3cd12025d5b/$pkgname-$pkgver.tar.xz +source=("git+https://gitlab.freedesktop.org/xdg/shared-mime-info.git#commit=$_commit" + # tu run the testsuite + "git+https://gitlab.freedesktop.org/xdg/xdgmime.git#commit=de283fc430460b9b3a7e61432a6d273cd64cb102" # master 2020-12-30 + MR_162.patch + update-mime-database.hook) +sha256sums=('SKIP' + 'SKIP' + 'cd69a48c3e074a99e7705db04ce29956b4f6480a9b261369b60052af4edc8796' + 'f08efbcbac9d2bd18a805b8dcf3ed06d7763b97eca5935aa64d65593774b6501') +options=(!makeflags) + +pkgver() { + cd $pkgname + git describe --long | sed 's/^Release.//;s/\([^-]*-g\)/\1/;s/-/+/g;' +} + +prepare() { + # build xdgmime from source to run the testsuite - check HACKING.md + CFLAGS= make -C xdgmime + + # fix a build failure with meson 0.60.x and later + # https://gitlab.freedesktop.org/xdg/shared-mime-info/-/merge_requests/162 + cd $pkgname + patch -Np1 -i ../MR_162.patch +} + +build() { + # https://bugs.archlinux.org/task/38836 + # https://bugs.freedesktop.org/show_bug.cgi?id=70366 + # https://bugs.archlinux.org/task/66687 + #export ac_cv_func_fdatasync=no -> for now moved into aplm hook + + meson ${pkgname} build \ + --prefix=/usr \ + --bindir=/usr/bin \ + -D update-mimedb=false \ + -D xdgmime-path=${srcdir}/xdgmime + + # Print config + meson configure build + # compile it + ninja -C build +} + +check() { + meson test -C build --print-errorlogs +} + +package() { + DESTDIR="$pkgdir" meson install -C build + # use a prefix to run it early enough - other hooks may depend on it - FS#72858 + install -Dm644 "$srcdir"/update-mime-database.hook "$pkgdir"/usr/share/libalpm/hooks/30-update-mime-database.hook +} diff --git a/x86_64/extra/shared-mime-info/shared-mime-info.install b/x86_64/extra/shared-mime-info/shared-mime-info.install new file mode 100644 index 0000000..a620547 --- /dev/null +++ b/x86_64/extra/shared-mime-info/shared-mime-info.install @@ -0,0 +1,7 @@ +post_remove() { + if [ -d usr/share/mime ]; then + rm -f usr/share/mime/{globs,globs2,icons,treemagic,generic-icons,types,magic,XMLnamespaces,subclasses,aliases,mime.cache} + rm -rf usr/share/mime/{application,audio,image,inode,message,model,multipart,text,video,x-content,x-epoc} + rmdir --ignore-fail-on-non-empty usr/share/mime + fi +} diff --git a/x86_64/extra/shared-mime-info/update-mime-database.hook b/x86_64/extra/shared-mime-info/update-mime-database.hook new file mode 100644 index 0000000..9abe538 --- /dev/null +++ b/x86_64/extra/shared-mime-info/update-mime-database.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/share/mime/packages/*.xml + +[Action] +Description = Updating the MIME type database... +When = PostTransaction +Exec = /usr/bin/env PKGSYSTEM_ENABLE_FSYNC=0 /usr/bin/update-mime-database /usr/share/mime diff --git a/x86_64/extra/smartmontools/PKGBUILD b/x86_64/extra/smartmontools/PKGBUILD new file mode 100644 index 0000000..39433b3 --- /dev/null +++ b/x86_64/extra/smartmontools/PKGBUILD @@ -0,0 +1,53 @@ +pkgname=smartmontools +pkgver=7.3 +pkgrel=1 +arch=('x86_64') +depends=('libcap-ng' 'bash' 'systemd') +makedepends=('systemd') +backup=('etc/smartd.conf' + 'etc/conf.d/smartd') +source=("https://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.gz" + 'smartd.conf') + +prepare() { + cd "${srcdir}/${pkgname}-${pkgver}" + + # make sure to use `uname -n` instead of `hostname` + sed -i "/^os_hostname/c os_hostname=\"'uname -n'\"" configure.ac + + # smartd.service.in: Remove obsolete 'StandardOutput=syslog' + # https://github.com/smartmontools/smartmontools/commit/f73303bc2d40adfc71e8bfaae043275e88cf9275 + sed -i '/^StandardOutput=/d' smartd.service.in + + autoreconf -fi +} + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + ./configure \ + --prefix=/usr \ + --sbindir=/usr/bin \ + --sysconfdir=/etc \ + --with-drivedbdir \ + --with-libcap-ng=yes \ + --with-libsystemd=yes \ + --with-systemdsystemunitdir=/usr/lib/systemd/system \ + --with-systemdenvfile=/etc/conf.d/smartd \ + --with-smartdscriptdir=/usr/share/smartmontools \ + --with-smartdplugindir=/usr/share/smartmontools/smartd_warning.d + + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + + sed -i -e "s:sysconfig/smartmontools:conf.d/smartd:g" smartd.service + sed -i -e "s:smartd_opts:SMARTD_ARGS:g" smartd.service + + make DESTDIR="${pkgdir}" install + + rm -rf "${pkgdir}"/etc/rc.d + install -D -m0644 "${srcdir}"/smartd.conf "${pkgdir}/etc/conf.d/smartd" +} \ No newline at end of file diff --git a/x86_64/extra/smartmontools/smartd.conf b/x86_64/extra/smartmontools/smartd.conf new file mode 100644 index 0000000..80e010a --- /dev/null +++ b/x86_64/extra/smartmontools/smartd.conf @@ -0,0 +1,5 @@ +# +# smartmontools +# + +SMARTD_ARGS="" diff --git a/x86_64/extra/snappy/PKGBUILD b/x86_64/extra/snappy/PKGBUILD new file mode 100644 index 0000000..6abf472 --- /dev/null +++ b/x86_64/extra/snappy/PKGBUILD @@ -0,0 +1,42 @@ +pkgname=snappy +pkgver=1.1.9 +pkgrel=1 +arch=('x86_64') +depends=('glibc' 'gcc') +makedepends=('cmake' 'clang') +source=("https://github.com/google/snappy/archive/$pkgver/$pkgname-$pkgver.tar.gz" + cmake_add_pkgconfig.patch + fix_inline.patch::https://github.com/google/snappy/pull/128/commits/0c716d435abe65250100c2caea0e5126ac4e14bd.patch + snappy.pc.in) + +prepare() { + cd "$pkgname-$pkgver" + + patch -p1 < ../cmake_add_pkgconfig.patch + patch -p1 < ../fix_inline.patch + + cp ../snappy.pc.in . +} + +build() { + cd "$pkgname-$pkgver" + + # compile without assertions + CXXFLAGS+=\ -DNDEBUG + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_INSTALL_LIBDIR=/usr/lib \ + -D SNAPPY_BUILD_TESTS=OFF \ + -D BUILD_SHARED_LIBS=yes \ + -D SNAPPY_BUILD_BENCHMARKS=OFF \ + . + + make +} + +package() { + cd "$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install +} diff --git a/x86_64/extra/snappy/fix_inline.patch b/x86_64/extra/snappy/fix_inline.patch new file mode 100644 index 0000000..3fd3815 --- /dev/null +++ b/x86_64/extra/snappy/fix_inline.patch @@ -0,0 +1,67 @@ +From 0c716d435abe65250100c2caea0e5126ac4e14bd Mon Sep 17 00:00:00 2001 +From: "Georgi D. Sotirov" +Date: Wed, 5 May 2021 14:16:46 +0300 +Subject: [PATCH] Add inline with SNAPPY_ATTRIBUTE_ALWAYS_INLINE + +Add inline with SNAPPY_ATTRIBUTE_ALWAYS_INLINE on AdvanceToNextTag to +fix the following compilation errors and a warning with GCC: + +[ 2%] Building CXX object CMakeFiles/snappy.dir/snappy.cc.o +/usr/bin/c++ -DHAVE_CONFIG_H -Dsnappy_EXPORTS +-I/tmp/snappy-1.1.9/build -I/tmp/snappy-1.1.9 -O3 +-march=i586 -mtune=i686 -Wall -Wextra -fno-exceptions -fno-rtti -O3 +-DNDEBUG -fPIC -std=c++11 -o CMakeFiles/snappy.dir/snappy.cc.o -c +/tmp/snappy-1.1.9/snappy.cc +/tmp/snappy-1.1.9/snappy.cc:1017:8: warning: always_inline +function might not be inlinable [-Wattributes] + size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) { + ^ +/tmp/snappy-1.1.9/snappy.cc: In function 'std::pair snappy::DecompressBranchless(const uint8_t*, const +uint8_t*, ptrdiff_t, T, ptrdiff_t) [with T = char*; uint8_t = unsigned +char; ptrdiff_t = int]': +/tmp/snappy-1.1.9/snappy.cc:1017:8: error: inlining failed in +call to always_inline 'size_t snappy::AdvanceToNextTag(const uint8_t**, +size_t*)': function body can be overwritten at link time +/tmp/snappy-1.1.9/snappy.cc:1097:53: error: called from here + size_t tag_type = AdvanceToNextTag(&ip, &tag); + ^ +/tmp/snappy-1.1.9/snappy.cc:1017:8: error: inlining failed in +call to always_inline 'size_t snappy::AdvanceToNextTag(const uint8_t**, +size_t*)': function body can be overwritten at link time + size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) { + ^ +/tmp/snappy-1.1.9/snappy.cc:1097:53: error: called from here + size_t tag_type = AdvanceToNextTag(&ip, &tag); + ^ +/tmp/snappy-1.1.9/snappy.cc:1017:8: error: inlining failed in +call to always_inline 'size_t snappy::AdvanceToNextTag(const uint8_t**, +size_t*)': function body can be overwritten at link time + size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) { + ^ +/tmp/snappy-1.1.9/snappy.cc:1097:53: error: called from here + size_t tag_type = AdvanceToNextTag(&ip, &tag); + ^ +CMakeFiles/snappy.dir/build.make:137: recipe for target +'CMakeFiles/snappy.dir/snappy.cc.o' failed + +Just like with other functions using SNAPPY_ATTRIBUTE_ALWAYS_INLINE +macro (i.e. __attribute__((always_inline)) ) it is necessary to use C++ +inline specifier. +--- + snappy.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/snappy.cc b/snappy.cc +index 79dc0e8d..51157be2 100644 +--- a/snappy.cc ++++ b/snappy.cc +@@ -1014,7 +1014,7 @@ void MemMove(ptrdiff_t dst, const void* src, size_t size) { + } + + SNAPPY_ATTRIBUTE_ALWAYS_INLINE +-size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) { ++inline size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) { + const uint8_t*& ip = *ip_p; + // This section is crucial for the throughput of the decompression loop. + // The latency of an iteration is fundamentally constrained by the diff --git a/x86_64/extra/snappy/snappy.pc.in b/x86_64/extra/snappy/snappy.pc.in new file mode 100644 index 0000000..9c1a347 --- /dev/null +++ b/x86_64/extra/snappy/snappy.pc.in @@ -0,0 +1,10 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${prefix}/lib +includedir=${prefix}/include + +Name: snappy +Description: Fast compressor/decompressor library. +Version: @PROJECT_VERSION@ +Libs: -L${libdir} -lsnappy +Cflags: -I${includedir} diff --git a/x86_64/extra/snowball/PKGBUILD b/x86_64/extra/snowball/PKGBUILD new file mode 100644 index 0000000..866a090 --- /dev/null +++ b/x86_64/extra/snowball/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=snowball +pkgver=2.2.0 +pkgrel=1 +arch=(x86_64) +depends=(glibc) +makedepends=(git) +commit=(3f8581bf8ac7163dfa42211e878dbd80044eaae8) +source=(git+https://github.com/snowballstem/snowball#commit=$commit + dynamiclib.patch) + +prepare() { + cd $pkgname + + git apply -3 ../dynamiclib.patch +} + +build() { + cd $pkgname + + make +} + +package() { + cd $pkgname + + install -Dt "$pkgdir/usr/bin" snowball stemwords + install -Dt "$pkgdir/usr/lib" libstemmer.so.0.0.0 + ln -s libstemmer.so.0.0.0 "$pkgdir/usr/lib/libstemmer.so.0" + ln -s libstemmer.so.0 "$pkgdir/usr/lib/libstemmer.so" + install -Dt "$pkgdir/usr/include" -m644 include/libstemmer.h +} diff --git a/x86_64/extra/snowball/dynamiclib.patch b/x86_64/extra/snowball/dynamiclib.patch new file mode 100644 index 0000000..392c073 --- /dev/null +++ b/x86_64/extra/snowball/dynamiclib.patch @@ -0,0 +1,41 @@ +diff --git a/GNUmakefile b/GNUmakefile +index 98eb1fa..40ebc38 100644 +--- a/GNUmakefile ++++ b/GNUmakefile +@@ -170,12 +170,11 @@ C_OTHER_OBJECTS = $(C_OTHER_SOURCES:.c=.o) + JAVA_CLASSES = $(JAVA_SOURCES:.java=.class) + JAVA_RUNTIME_CLASSES=$(JAVARUNTIME_SOURCES:.java=.class) + +-CFLAGS=-O2 -W -Wall -Wmissing-prototypes -Wmissing-declarations +-CPPFLAGS= ++CFLAGS+=-fPIC -W -Wall -Wmissing-prototypes -Wmissing-declarations + + INCLUDES=-Iinclude + +-all: snowball$(EXEEXT) libstemmer.a stemwords$(EXEEXT) $(C_OTHER_SOURCES) $(C_OTHER_HEADERS) $(C_OTHER_OBJECTS) ++all: snowball$(EXEEXT) libstemmer.a libstemmer.so stemwords$(EXEEXT) $(C_OTHER_SOURCES) $(C_OTHER_HEADERS) $(C_OTHER_OBJECTS) + + algorithms.mk: libstemmer/mkalgorithms.pl libstemmer/modules.txt + libstemmer/mkalgorithms.pl algorithms.mk libstemmer/modules.txt +@@ -212,6 +212,9 @@ libstemmer/libstemmer.o: libstemmer/modules.h $(C_LIB_HEADERS) + libstemmer.a: libstemmer/libstemmer.o $(RUNTIME_OBJECTS) $(C_LIB_OBJECTS) + $(AR) -cru $@ $^ + ++libstemmer.so: libstemmer/libstemmer.o $(RUNTIME_OBJECTS) $(C_LIB_OBJECTS) ++ $(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname,libstemmer.so.0,-version-script,libstemmer/symbol.map -o $@.0.0.0 $^ ++ + examples/%.o: examples/%.c + $(CC) $(CFLAGS) $(INCLUDES) $(CPPFLAGS) -c -o $@ $< + +diff --git a/libstemmer/symbol.map b/libstemmer/symbol.map +new file mode 100644 +index 0000000..7a3d423 +--- /dev/null ++++ i/libstemmer/symbol.map +@@ -0,0 +1,6 @@ ++SB_STEMMER_0 { ++ global: ++ sb_stemmer_*; ++ local: ++ *; ++}; diff --git a/x86_64/extra/spice-gtk/PKGBUILD b/x86_64/extra/spice-gtk/PKGBUILD new file mode 100644 index 0000000..6c59429 --- /dev/null +++ b/x86_64/extra/spice-gtk/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=spice-gtk +pkgver=0.40 +pkgrel=1 +arch=(x86_64) +depends=(gst-plugins-base gst-plugins-good gtk3+ gobject-introspection polkit) +makedepends=(meson spice-protocol usbutils vala wayland-protocols) +source=(https://www.spice-space.org/download/gtk/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + meson build \ + --prefix=/usr + + ninja -C build +} + +package() { + cd $pkgname-$pkgver + + DESTDIR=$pkgdir meson install -C build +} diff --git a/x86_64/extra/spice-protocol/PKGBUILD b/x86_64/extra/spice-protocol/PKGBUILD new file mode 100644 index 0000000..970454d --- /dev/null +++ b/x86_64/extra/spice-protocol/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=spice-protocol +pkgver=0.14.4 +pkgrel=1 +arch=(x86_64) +makedepends=('meson') +source=(https://gitlab.freedesktop.org/spice/spice-protocol/-/archive/v$pkgver/spice-protocol-v$pkgver.tar.gz) + +build() { + mkdir -p build + cd "$srcdir/$pkgname-v$pkgver" + + meson ../build --prefix=/usr + + ninja -v -C ../build +} + +package() { + cd "$srcdir/$pkgname-v$pkgver" + + DESTDIR="$pkgdir/" ninja -C ../build install +} diff --git a/x86_64/extra/spice/PKGBUILD b/x86_64/extra/spice/PKGBUILD new file mode 100644 index 0000000..1cceaa8 --- /dev/null +++ b/x86_64/extra/spice/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=spice +pkgver=0.15.0 +pkgrel=1 +arch=(x86_64) +depends=(pixman opus libjpeg glib2 lz4 gstreamer sasl2) +makedepends=(meson spice-protocol libcacard gdk-pixbuf glib-networking python3-pip) +source=(https://www.spice-space.org/download/releases/spice-server/$pkgname-$pkgver.tar.bz2 + python-module.diff) + +prepare() { + pip3 install pyparsing six + + cd $pkgname-$pkgver/subprojects/spice-common/ + patch -p1 -i $srcdir/python-module.diff + + sed -i "/doxygen.sh/d" $srcdir/$pkgname-$pkgver/meson.build +} + +build() { + meson $pkgname-$pkgver build \ + --prefix=/usr \ + -D tests=false \ + -D gstreamer=no + + ninja -C build +} + +package() { + DESTDIR=$pkgdir ninja -C build install +} diff --git a/x86_64/extra/spice/python-module.diff b/x86_64/extra/spice/python-module.diff new file mode 100644 index 0000000..81e3166 --- /dev/null +++ b/x86_64/extra/spice/python-module.diff @@ -0,0 +1,13 @@ +diff --git a/meson.build b/meson.build +index aff62438f1c0d27de0defd42625db06f13519ac9..eeccecd5270055611550dc50cc8c69cda8e9a8c4 100644 +--- a/meson.build ++++ b/meson.build +@@ -132,7 +132,7 @@ if spice_common_generate_client_code or spice_common_generate_server_code + if get_option('python-checks') + foreach module : ['six', 'pyparsing'] + message('Checking for python module @0@'.format(module)) +- cmd = run_command(python, '-m', module) ++ cmd = run_command(python, '-c', 'import @0@'.format(module)) + if cmd.returncode() != 0 + error('Python module @0@ not found'.format(module)) + endif diff --git a/x86_64/extra/spirv-llvm-translator/PKGBUILD b/x86_64/extra/spirv-llvm-translator/PKGBUILD new file mode 100644 index 0000000..6864c4a --- /dev/null +++ b/x86_64/extra/spirv-llvm-translator/PKGBUILD @@ -0,0 +1,38 @@ +pkgname=spirv-llvm-translator +pkgver=13.0.1 +pkgrel=1 +arch=('x86_64') +depends=(llvm) +makedepends=('cmake' 'glslang' 'python3' 'git' 'ninja') +source=('https://github.com/KhronosGroup/SPIRV-LLVM-Translator/archive/llvm_release_130.zip') + +prepare() { + cd SPIRV-LLVM-Translator-llvm_release_130 + + rm -rf build && mkdir -p build +} + +build() { + cd SPIRV-LLVM-Translator-llvm_release_130/build + + cmake .. \ + -GNinja \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_INSTALL_LIBDIR=/usr/lib \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_SHARED_LIBS=ON \ + -D CMAKE_SKIP_RPATH=ON \ + -D LLVM_INCLUDE_TESTS=OFF \ + -D LLVM_EXTERNAL_LIT=/usr/lib/lit + + ninja + ninja llvm-spirv +} + +package() { + cd SPIRV-LLVM-Translator-llvm_release_130/build + mkdir -p $pkgdir/usr/bin + + DESTDIR=$pkgdir ninja install + install -Dm755 tools/llvm-spirv/llvm-spirv $pkgdir/usr/bin/llvm-spirv +} diff --git a/x86_64/extra/sqlite3/PKGBUILD b/x86_64/extra/sqlite3/PKGBUILD new file mode 100644 index 0000000..da6a641 --- /dev/null +++ b/x86_64/extra/sqlite3/PKGBUILD @@ -0,0 +1,42 @@ +pkgname=sqlite3 +pkgver=3.37.0 +sver=3370000 +pkgrel=1 +arch=('x86_64') +makedepends=(readline zlib tcl) +source=(https://sqlite.org/2021/sqlite-src-$sver.zip) + +build() { + export CPPFLAGS="$CPPFLAGS \ + -DSQLITE_ENABLE_COLUMN_METADATA=1 \ + -DSQLITE_ENABLE_UNLOCK_NOTIFY=1 \ + -DSQLITE_ENABLE_DBSTAT_VTAB=1 \ + -DSQLITE_ENABLE_FTS3_TOKENIZER=1 \ + -DSQLITE_SECURE_DELETE \ + -DSQLITE_ENABLE_STMTVTAB \ + -DSQLITE_MAX_VARIABLE_NUMBER=250000 \ + -DSQLITE_MAX_EXPR_DEPTH=10000 \ + -DSQLITE_ENABLE_MATH_FUNCTIONS" + + cd sqlite-src-$sver + ./configure \ + --prefix=/usr \ + --disable-amalgamation \ + --enable-fts3 \ + --enable-fts4 \ + --enable-fts5 \ + --enable-rtree \ + --enable-json1 \ + TCLLIBDIR=/usr/lib/sqlite$pkgver + + make + make showdb showjournal showstat4 showwal sqldiff sqlite3_analyzer +} + +package() { + cd sqlite-src-$sver + + make DESTDIR=$pkgdir install + + install -m755 showdb showjournal showstat4 showwal sqldiff $pkgdir/usr/bin/ +} diff --git a/x86_64/extra/startup-notification/PKGBUILD b/x86_64/extra/startup-notification/PKGBUILD new file mode 100644 index 0000000..c1d9442 --- /dev/null +++ b/x86_64/extra/startup-notification/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=startup-notification +pkgver=0.12 +pkgrel=1 +arch=('x86_64') +depends=(xorg-server xcb-util) +source=( https://www.freedesktop.org/software/$pkgname/releases/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/strace/PKGBUILD b/x86_64/extra/strace/PKGBUILD new file mode 100644 index 0000000..4a3c21e --- /dev/null +++ b/x86_64/extra/strace/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=strace +pkgver=5.14 +pkgrel=2 +arch=('x86_64') +depends=('libunwind') +source=(https://github.com/$pkgname/$pkgname/releases/download/v$pkgver/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --with-libunwind --enable-mpers=no + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/subversion/PKGBUILD b/x86_64/extra/subversion/PKGBUILD new file mode 100644 index 0000000..2ba2eab --- /dev/null +++ b/x86_64/extra/subversion/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=subversion +pkgver=1.14.2 +pkgrel=1 +arch=(x86_64) +depends=(file sqlite3 systemd python3 ruby3 kwallet) +makedepends=(python3-pip perl swig openjdk-17 kwallet swig kdelibs4support) +source=(https://www.apache.org/dist/subversion/subversion-${pkgver}.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-javahl \ + --with-kwallet + + # Make base + make LT_LDFLAGS="-L$Fdestdir/usr/lib" -j2 + + # Make extras + make swig-py swig-pl javahl swig-rb +} + +package() { + cd $pkgname-$pkgver + + +} diff --git a/x86_64/extra/sudo/PKGBUILD b/x86_64/extra/sudo/PKGBUILD new file mode 100644 index 0000000..e15e190 --- /dev/null +++ b/x86_64/extra/sudo/PKGBUILD @@ -0,0 +1,43 @@ +pkgname=sudo +pkgver=1.9.9 +pkgrel=1 +arch=('x86_64') +depends=(glibx openssl linux-pam libldap zlib) +backup=('etc/pam.d/sudo' + 'etc/sudo.conf' + 'etc/sudo_logsrvd.conf' + 'etc/sudoers') +source=(https://github.com/sudo-project/sudo/archive/refs/tags/SUDO_1_9_8p2.tar.gz + sudo_logsrvd.service) + +build() { + cd sudo-SUDO_1_9_9 + + ./configure --prefix=/usr \ + --bindir=/bin \ + --with-rundir=/run/sudo \ + --with-vardir=/var/db/sudo \ + --disable-static \ + --with-logfac=auth \ + --libexecdir=/usr/lib \ + --with-secure-path \ + --with-all-insults \ + --with-env-editor \ + --enable-tmpfiles.d \ + --docdir=/usr/share/doc/sudo \ + --with-passprompt="[sudo]: password for %p: " + make +} + +package() { + cd sudo-SUDO_1_9_9 + + mkdir -p $pkgdir/usr/share/doc/sudo + make DESTDIR=$pkgdir install + + install -Dm644 -t $pkgdir/usr/lib/systemd/system ../sudo_logsrvd.service + rm $pkgdir/etc/sudoers.dist + + rm -rf $pkgdir/run/sudo + rm -rf $pkgdir/run +} diff --git a/x86_64/extra/sudo/sudo_logsrvd.service b/x86_64/extra/sudo/sudo_logsrvd.service new file mode 100644 index 0000000..51ba11b --- /dev/null +++ b/x86_64/extra/sudo/sudo_logsrvd.service @@ -0,0 +1,11 @@ +[Unit] +Description=Suod central log server +After=syslog.target network.target auditd.service + +[Service] +ExecStart=/usr/sbin/sudo_logsrvd -n +KillMode=process +Type=exec + +[Install] +WantedBy=multi-user.target diff --git a/x86_64/extra/swig/PKGBUILD b/x86_64/extra/swig/PKGBUILD new file mode 100644 index 0000000..5c0da25 --- /dev/null +++ b/x86_64/extra/swig/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=swig +pkgver=4.0.2 +pkgrel=1 +arch=('x86_64') +depends=('pcre' 'gcc') +source=(https://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.gz + jdk17.patch + python310.patch) + +prepare() { + cd ${pkgname}-${pkgver} + patch -Np1 -i ../jdk17.patch + + # https://github.com/swig/swig/issues/2044 + patch -Np1 -i ../python310.patch +} + +build() { + cd ${pkgname}-${pkgver} + + ./configure --prefix=/usr + + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install +} \ No newline at end of file diff --git a/x86_64/extra/swig/jdk17.patch b/x86_64/extra/swig/jdk17.patch new file mode 100644 index 0000000..0270c20 --- /dev/null +++ b/x86_64/extra/swig/jdk17.patch @@ -0,0 +1,28 @@ +From 34e663a61af13eec62050d2b105ace418929e289 Mon Sep 17 00:00:00 2001 +From: William S Fulton +Date: Sat, 20 Mar 2021 09:49:30 +0000 +Subject: [PATCH] Test a different C# keyword rename + +Worked around warning in java jdk-15: + warning: 'sealed' may become a restricted type name in a future release + and may be unusable for type declarations or as the element type of an array + +Adding sealed to the list of automatically renamed keywords in Java does +not seem prudent. +--- + Examples/test-suite/keyword_rename.i | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Examples/test-suite/keyword_rename.i b/Examples/test-suite/keyword_rename.i +index 23c01087dc4..645f0266112 100644 +--- a/Examples/test-suite/keyword_rename.i ++++ b/Examples/test-suite/keyword_rename.i +@@ -27,7 +27,7 @@ KW(synchronized, final) + + /* C# Keywords */ + KW(string, out) +-struct sealed {int i;}; ++struct stackalloc {int i;}; + + /* Go Keywords */ + KW(go, defer) diff --git a/x86_64/extra/swig/python310.patch b/x86_64/extra/swig/python310.patch new file mode 100644 index 0000000..a3c8cff --- /dev/null +++ b/x86_64/extra/swig/python310.patch @@ -0,0 +1,23 @@ +From a2850397ba3eec5d4c58304cf8277ca535919760 Mon Sep 17 00:00:00 2001 +From: Julien Schueller +Date: Thu, 5 Aug 2021 14:05:10 +0200 +Subject: [PATCH] [Python] Fix overload_simple_cast test with 3.10 + +Closes #2044 +--- + Examples/test-suite/python/python_overload_simple_cast_runme.py | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/Examples/test-suite/python/python_overload_simple_cast_runme.py b/Examples/test-suite/python/python_overload_simple_cast_runme.py +index fc398ab29b9..7a0174af8a2 100644 +--- a/Examples/test-suite/python/python_overload_simple_cast_runme.py ++++ b/Examples/test-suite/python/python_overload_simple_cast_runme.py +@@ -9,6 +9,8 @@ def __init__(self, x): + def __int__(self): + return self.x + ++ def __index__(self): ++ return self.x + + class Ad: + diff --git a/x86_64/extra/sxhkd/PKGBUILD b/x86_64/extra/sxhkd/PKGBUILD new file mode 100644 index 0000000..a10738a --- /dev/null +++ b/x86_64/extra/sxhkd/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=sxhkd +pkgver=0.6.2 +pkgrel=1 +arch=('x86_64') +depends=(xcb-util-keysyms) +makedepends=(git xcb-util) +source=(git+https://github.com/baskerville/sxhkd#commit=fe241b0d2d70c9c483b23cf3cd14f1383f0953a2) + +build() { + cd $pkgname + + CFLAGS+=" -fcommon" + make PREFIX=/usr +} + +package() { + cd $pkgname + + make PREFIX=/usr DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/sysklogd/PKGBUILD b/x86_64/extra/sysklogd/PKGBUILD new file mode 100644 index 0000000..0afb9e0 --- /dev/null +++ b/x86_64/extra/sysklogd/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=sysklogd +pkgver=1.5.1 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +source=(http://www.infodrom.org/projects/$pkgname/download/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + sed -i '/Error loading kernel symbols/{n;n;d}' ksym_mod.c + sed -i 's/union wait/int/' syslogd.c + + make +} + +package() { + cd $pkgname-$pkgver + mkdir -p $pkgdir/{sbin,etc,usr/share/man/man{5,8}} + make BINDIR=$pkgdir/sbin MANDIR=$pkgdir/usr/share/man install + + cat > $pkgdir/etc/syslog.conf << "EOF" +# Begin /etc/syslog.conf + +auth,authpriv.* -/var/log/auth.log +*.*;auth,authpriv.none -/var/log/sys.log +daemon.* -/var/log/daemon.log +kern.* -/var/log/kern.log +mail.* -/var/log/mail.log +user.* -/var/log/user.log +*.emerg * + +# End /etc/syslog.conf +EOF +} diff --git a/x86_64/extra/system-config-printer/PKGBUILD b/x86_64/extra/system-config-printer/PKGBUILD new file mode 100644 index 0000000..e2b055a --- /dev/null +++ b/x86_64/extra/system-config-printer/PKGBUILD @@ -0,0 +1,50 @@ +pkgname=system-config-printer +pkgver=1.5.16 +pkgrel=4 +arch=(x86_64) +depends=(libnotify gtk3+ cairo cups cups-pk-helper + python3-pysmbc python3-gobject python3-cairo + python3-pycups python3-pycurl) +makedepends=(xmlto docbook-xsl desktop-file-utils libsecret) +source=(https://github.com/OpenPrinting/system-config-printer/releases/download/v${pkgver}/system-config-printer-${pkgver}.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + ./bootstrap +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --with-systemdsystemunitdir=/usr/lib/systemd/system \ + --with-udevdir=/usr/lib/udev \ + --with-udev-rules + + make + + python setup.py build +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + + rm -rf $pkgdir/usr/lib/python3.10 + + # Install cupshelpers manually + python setup.py install --root=${pkgdir} + + # Compile all py files + find "$pkgdir" -name '*.py' -exec python -mpy_compile {} + + find "$pkgdir" -name '*.py' -exec python -O -mpy_compile {} + + + # fix dbus policy location + install -dm755 "$pkgdir"/usr/share/dbus-1/system.d + mv "$pkgdir"/etc/dbus-1/system.d/* "$pkgdir"/usr/share/dbus-1/system.d + rm -rf "$pkgdir"/etc/dbus-1 +} diff --git a/x86_64/extra/talloc/PKGBUILD b/x86_64/extra/talloc/PKGBUILD new file mode 100644 index 0000000..d5b25d3 --- /dev/null +++ b/x86_64/extra/talloc/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=talloc +pkgver=2.3.3 +pkgrel=1 +pkgdesc="Hierarchical pool based memory allocator with destructors" +arch=(x86_64) +depends=(glibc) +makedepends=(python3-pip) +source=(https://www.samba.org/ftp/talloc/talloc-$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --bundled-libraries=NONE \ + --builtin-libraries=replace \ + --enable-talloc-compat1 +} + +build() { + cd $pkgname-$pkgver + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/tcl/PKGBUILD b/x86_64/extra/tcl/PKGBUILD new file mode 100644 index 0000000..131d2b4 --- /dev/null +++ b/x86_64/extra/tcl/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=tcl +pkgver=8.6.12 +pkgrel=1 +arch=('x86_64') +depends=(zlib) +source=(https://downloads.sourceforge.net/sourceforge/tcl/tcl$pkgver-src.tar.gz) + +prepare() { + cd tcl$pkgver + + rm -rf pkgs/sqlite3* +} + +build() { + cd tcl$pkgver/unix + ./configure --prefix=/usr --enable-threads --enable-64bit +} + +package() { + cd tcl$pkgver/unix + make INSTALL_ROOT=$pkgdir install install-private-headers + + ln -sf tclsh${pkgver%.*} $pkgdir/usr/bin/tclsh + ln -sf libtcl${pkgver%.*}.so $pkgdir/usr/lib/libtcl.so + + install -Dm644 tcl.m4 -t $pkgdir/usr/share/aclocal/ +} diff --git a/x86_64/extra/tdb/PKGBUILD b/x86_64/extra/tdb/PKGBUILD new file mode 100644 index 0000000..9f58386 --- /dev/null +++ b/x86_64/extra/tdb/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=tdb +pkgver=1.4.5 +pkgrel=1 +pkgdesc='Trivial Database similar to GDBM but allows simultaneous commits' +arch=(x86_64) +depends=('glibc') +makedepends=('python3' 'libxslt' 'docbook-xsl') +source=(https://samba.org/ftp/${pkgname}/${pkgname}-${pkgver}.tar.gz) + +build() { + cd ${pkgname}-${pkgver} + + ./configure --prefix=/usr \ + --localstatedir=/var \ + --sysconfdir=/etc/samba + + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="$pkgdir" install +} diff --git a/x86_64/extra/tdesktop/CMakeLists.txt b/x86_64/extra/tdesktop/CMakeLists.txt new file mode 100644 index 0000000..d84a403 --- /dev/null +++ b/x86_64/extra/tdesktop/CMakeLists.txt @@ -0,0 +1,317 @@ +# This file is part of Desktop App Toolkit, +# a set of libraries for developing nice desktop applications. +# +# For license and copyright information please follow this link: +# https://github.com/desktop-app/legal/blob/master/LEGAL + +add_library(lib_base STATIC) +add_library(desktop-app::lib_base ALIAS lib_base) +init_target(lib_base) + +add_library(lib_base_crash_report_writer STATIC) +add_library(desktop-app::lib_base_crash_report_writer ALIAS lib_base_crash_report_writer) +init_target(lib_base_crash_report_writer) + +get_filename_component(src_loc . REALPATH) + +target_precompile_headers(lib_base PRIVATE $<$:${src_loc}/base/base_pch.h>) +nice_target_sources(lib_base ${src_loc} +PRIVATE + base/platform/linux/base_file_utilities_linux.cpp + base/platform/linux/base_file_utilities_linux.h + base/platform/linux/base_global_shortcuts_linux.cpp + base/platform/linux/base_global_shortcuts_linux.h + base/platform/linux/base_info_linux.cpp + base/platform/linux/base_info_linux.h + base/platform/linux/base_last_input_linux.cpp + base/platform/linux/base_last_input_linux.h + base/platform/linux/base_layout_switch_linux.cpp + base/platform/linux/base_layout_switch_linux.h + base/platform/linux/base_linux_allocation_tracer.cpp + base/platform/linux/base_linux_allocation_tracer.h + base/platform/linux/base_linux_dbus_utilities.cpp + base/platform/linux/base_linux_dbus_utilities.h + base/platform/linux/base_linux_glibmm_helper.h + base/platform/linux/base_linux_library.cpp + base/platform/linux/base_linux_library.h + base/platform/linux/base_linux_wayland_integration.cpp + base/platform/linux/base_linux_wayland_integration_dummy.cpp + base/platform/linux/base_linux_wayland_integration.h + base/platform/linux/base_linux_xcb_utilities.cpp + base/platform/linux/base_linux_xcb_utilities.h + base/platform/linux/base_linux_xdp_utilities.cpp + base/platform/linux/base_linux_xdp_utilities.h + base/platform/linux/base_linux_xsettings.cpp + base/platform/linux/base_linux_xsettings.h + base/platform/linux/base_network_reachability_linux.cpp + base/platform/linux/base_power_save_blocker_linux.cpp + base/platform/linux/base_power_save_blocker_linux.h + base/platform/linux/base_process_linux.cpp + base/platform/linux/base_process_linux.h + base/platform/linux/base_system_media_controls_linux_dummy.cpp + base/platform/linux/base_system_media_controls_linux.cpp + base/platform/linux/base_url_scheme_linux.cpp + base/platform/linux/base_url_scheme_linux.h + base/platform/mac/base_confirm_quit.h + base/platform/mac/base_confirm_quit.mm + base/platform/mac/base_custom_app_icon_mac.h + base/platform/mac/base_custom_app_icon_mac.mm + base/platform/mac/base_file_utilities_mac.h + base/platform/mac/base_file_utilities_mac.mm + base/platform/mac/base_global_shortcuts_mac.mm + base/platform/mac/base_global_shortcuts_mac.h + base/platform/mac/base_info_mac.h + base/platform/mac/base_info_mac.mm + base/platform/mac/base_last_input_mac.h + base/platform/mac/base_last_input_mac.mm + base/platform/mac/base_layout_switch_mac.h + base/platform/mac/base_layout_switch_mac.mm + base/platform/mac/base_network_reachability_mac.mm + base/platform/mac/base_power_save_blocker_mac.h + base/platform/mac/base_power_save_blocker_mac.mm + base/platform/mac/base_process_mac.h + base/platform/mac/base_process_mac.mm + base/platform/mac/base_system_media_controls_mac.mm + base/platform/mac/base_url_scheme_mac.h + base/platform/mac/base_url_scheme_mac.mm + base/platform/mac/base_utilities_mac.h + base/platform/mac/base_utilities_mac.mm + base/platform/win/base_file_utilities_win.cpp + base/platform/win/base_file_utilities_win.h + base/platform/win/base_global_shortcuts_win.cpp + base/platform/win/base_global_shortcuts_win.h + base/platform/win/base_info_win.cpp + base/platform/win/base_info_win.h + base/platform/win/base_last_input_win.cpp + base/platform/win/base_last_input_win.h + base/platform/win/base_layout_switch_win.cpp + base/platform/win/base_layout_switch_win.h + base/platform/win/base_network_reachability_win.cpp + base/platform/win/base_power_save_blocker_win.cpp + base/platform/win/base_power_save_blocker_win.h + base/platform/win/base_process_win.cpp + base/platform/win/base_process_win.h + base/platform/win/base_system_media_controls_win.cpp + base/platform/win/base_url_scheme_win.cpp + base/platform/win/base_url_scheme_win.h + base/platform/win/base_windows_co_task_mem.h + base/platform/win/base_windows_h.h + base/platform/win/base_windows_safe_library.cpp + base/platform/win/base_windows_safe_library.h + base/platform/win/base_windows_winrt.cpp + base/platform/win/base_windows_winrt.h + base/platform/win/base_windows_wrl.cpp + base/platform/win/base_windows_wrl.h + base/platform/win/wrl/wrl_implements_h.h + base/platform/win/wrl/wrl_module_h.h + base/platform/base_platform_custom_app_icon.h + base/platform/base_platform_global_shortcuts.h + base/platform/base_platform_info.h + base/platform/base_platform_last_input.h + base/platform/base_platform_layout_switch.h + base/platform/base_platform_network_reachability.cpp + base/platform/base_platform_network_reachability.h + base/platform/base_platform_file_utilities.h + base/platform/base_platform_power_save_blocker.h + base/platform/base_platform_process.h + base/platform/base_platform_url_scheme.h + base/platform/base_platform_system_media_controls.h + base/algorithm.cpp + base/algorithm.h + base/assertion.cpp + base/assertion.h + base/base_file_utilities.cpp + base/base_file_utilities.h + base/basic_types.h + base/binary_guard.h + base/build_config.h + base/bytes.cpp + base/bytes.h + base/call_delayed.cpp + base/call_delayed.h + base/crc32hash.cpp + base/crc32hash.h + base/concurrent_timer.cpp + base/concurrent_timer.h + base/const_string.h + base/custom_app_icon.h + base/debug_log.cpp + base/debug_log.h + base/enum_mask.h + base/event_filter.cpp + base/event_filter.h + base/expected.h + base/file_lock.h + base/file_lock_win.cpp + base/file_lock_posix.cpp + base/flags.h + base/flat_map.h + base/flat_set.h + base/functors.h + base/global_shortcuts.h + base/global_shortcuts_generic.cpp + base/global_shortcuts_generic.h + base/index_based_iterator.h + base/integration.cpp + base/integration.h + base/invoke_queued.h + base/last_used_cache.h + base/last_user_input.cpp + base/last_user_input.h + base/match_method.h + base/network_reachability.cpp + base/network_reachability.h + base/object_ptr.h + base/observer.cpp + base/observer.h + base/ordered_set.h + base/openssl_help.h + base/optional.h + base/options.cpp + base/options.h + base/overload.h + base/parse_helper.cpp + base/parse_helper.h + base/power_save_blocker.cpp + base/power_save_blocker.h + base/qthelp_regex.h + base/qthelp_url.cpp + base/qthelp_url.h + base/qt_connection.h + base/qt_signal_producer.h + base/random.cpp + base/random.h + base/required.h + base/runtime_composer.cpp + base/runtime_composer.h + base/single_instance.cpp + base/single_instance.h + base/thread_safe_wrap.h + base/timer.cpp + base/timer.h + base/timer_rpl.h + base/type_traits.h + base/unique_any.h + base/unique_function.h + base/unique_qptr.h + base/unixtime.cpp + base/unixtime.h + base/value_ordering.h + base/variant.h + base/virtual_method.h + base/weak_ptr.h + base/zlib_help.h + + base/base_pch.h +) + +if (DESKTOP_APP_DISABLE_DBUS_INTEGRATION) + remove_target_sources(lib_base ${src_loc} + base/platform/linux/base_linux_dbus_utilities.cpp + base/platform/linux/base_linux_dbus_utilities.h + base/platform/linux/base_linux_glibmm_helper.h + base/platform/linux/base_linux_xdp_utilities.cpp + base/platform/linux/base_linux_xdp_utilities.h + base/platform/linux/base_system_media_controls_linux.cpp + ) +else() + remove_target_sources(lib_base ${src_loc} + base/platform/linux/base_system_media_controls_linux_dummy.cpp + ) +endif() + +if (DESKTOP_APP_DISABLE_X11_INTEGRATION) + remove_target_sources(lib_base ${src_loc} + base/platform/linux/base_linux_xcb_utilities.cpp + base/platform/linux/base_linux_xcb_utilities.h + base/platform/linux/base_linux_xsettings.cpp + base/platform/linux/base_linux_xsettings.h + ) +endif() + +if (DESKTOP_APP_DISABLE_WAYLAND_INTEGRATION) + remove_target_sources(lib_base ${src_loc} + base/platform/linux/base_linux_wayland_integration.cpp + ) +else() + remove_target_sources(lib_base ${src_loc} + base/platform/linux/base_linux_wayland_integration_dummy.cpp + ) +endif() + +target_include_directories(lib_base +PUBLIC + ${src_loc} +) + +target_link_libraries(lib_base +PUBLIC + desktop-app::lib_rpl + desktop-app::lib_crl + desktop-app::external_qt + desktop-app::external_openssl + desktop-app::external_crash_reports + desktop-app::external_ranges + desktop-app::external_gsl + desktop-app::external_expected +PRIVATE + desktop-app::external_xxhash +) + +if (WIN32) + nuget_add_winrt(lib_base) +elseif (LINUX) + if (DESKTOP_APP_QT6) + qt6_generate_wayland_protocol_client_sources(lib_base + FILES + ${third_party_loc}/wayland-protocols/unstable/xdg-foreign/xdg-foreign-unstable-v2.xml + ${third_party_loc}/wayland-protocols/unstable/idle-inhibit/idle-inhibit-unstable-v1.xml + ) + else() + message(FATAL_ERROR "This piece of cmake code is not ported to Qt 5") + endif() + + if (NOT DESKTOP_APP_DISABLE_DBUS_INTEGRATION) + target_link_libraries(lib_base + PUBLIC + desktop-app::external_glibmm + desktop-app::external_glib + ) + endif() + + if (NOT DESKTOP_APP_DISABLE_X11_INTEGRATION) + target_link_libraries(lib_base + PUBLIC + desktop-app::external_xcb_keysyms + desktop-app::external_xcb_record + desktop-app::external_xcb_screensaver + desktop-app::external_xcb + ) + endif() + + if (NOT DESKTOP_APP_DISABLE_WAYLAND_INTEGRATION) + target_link_libraries(lib_base + PUBLIC + desktop-app::external_wayland_client + ) + endif() +endif() + +if (DESKTOP_APP_USE_ALLOCATION_TRACER) + target_compile_definitions(lib_base + PRIVATE + DESKTOP_APP_USE_ALLOCATION_TRACER + ) +endif() + +#target_precompile_headers(lib_base_crash_report_writer REUSE_FROM lib_base) +target_precompile_headers(lib_base_crash_report_writer PRIVATE ${src_loc}/base/base_pch.h) +nice_target_sources(lib_base_crash_report_writer ${src_loc} +PRIVATE + base/crash_report_header.cpp + base/crash_report_header.h + base/crash_report_writer.cpp + base/crash_report_writer.h +) + +target_link_libraries(lib_base_crash_report_writer PUBLIC desktop-app::lib_base) diff --git a/x86_64/extra/tdesktop/CMakeLists.txt-mod b/x86_64/extra/tdesktop/CMakeLists.txt-mod new file mode 100644 index 0000000..90fd189 --- /dev/null +++ b/x86_64/extra/tdesktop/CMakeLists.txt-mod @@ -0,0 +1,328 @@ +# This file is part of Desktop App Toolkit, +# a set of libraries for developing nice desktop applications. +# +# For license and copyright information please follow this link: +# https://github.com/desktop-app/legal/blob/master/LEGAL + +add_library(lib_base STATIC) +add_library(desktop-app::lib_base ALIAS lib_base) +init_target(lib_base) + +add_library(lib_base_crash_report_writer STATIC) +add_library(desktop-app::lib_base_crash_report_writer ALIAS lib_base_crash_report_writer) +init_target(lib_base_crash_report_writer) + +get_filename_component(src_loc . REALPATH) + +target_precompile_headers(lib_base PRIVATE $<$:${src_loc}/base/base_pch.h>) +nice_target_sources(lib_base ${src_loc} +PRIVATE + base/platform/linux/base_file_utilities_linux.cpp + base/platform/linux/base_file_utilities_linux.h + base/platform/linux/base_global_shortcuts_linux.cpp + base/platform/linux/base_global_shortcuts_linux.h + base/platform/linux/base_info_linux.cpp + base/platform/linux/base_info_linux.h + base/platform/linux/base_last_input_linux.cpp + base/platform/linux/base_last_input_linux.h + base/platform/linux/base_layout_switch_linux.cpp + base/platform/linux/base_layout_switch_linux.h + base/platform/linux/base_linux_allocation_tracer.cpp + base/platform/linux/base_linux_allocation_tracer.h + base/platform/linux/base_linux_dbus_utilities.cpp + base/platform/linux/base_linux_dbus_utilities.h + base/platform/linux/base_linux_glibmm_helper.h + base/platform/linux/base_linux_library.cpp + base/platform/linux/base_linux_library.h + base/platform/linux/base_linux_wayland_integration.cpp + base/platform/linux/base_linux_wayland_integration_dummy.cpp + base/platform/linux/base_linux_wayland_integration.h + base/platform/linux/base_linux_xcb_utilities.cpp + base/platform/linux/base_linux_xcb_utilities.h + base/platform/linux/base_linux_xdp_utilities.cpp + base/platform/linux/base_linux_xdp_utilities.h + base/platform/linux/base_linux_xsettings.cpp + base/platform/linux/base_linux_xsettings.h + base/platform/linux/base_network_reachability_linux.cpp + base/platform/linux/base_power_save_blocker_linux.cpp + base/platform/linux/base_power_save_blocker_linux.h + base/platform/linux/base_process_linux.cpp + base/platform/linux/base_process_linux.h + base/platform/linux/base_system_media_controls_linux_dummy.cpp + base/platform/linux/base_system_media_controls_linux.cpp + base/platform/linux/base_url_scheme_linux.cpp + base/platform/linux/base_url_scheme_linux.h + base/platform/mac/base_confirm_quit.h + base/platform/mac/base_confirm_quit.mm + base/platform/mac/base_custom_app_icon_mac.h + base/platform/mac/base_custom_app_icon_mac.mm + base/platform/mac/base_file_utilities_mac.h + base/platform/mac/base_file_utilities_mac.mm + base/platform/mac/base_global_shortcuts_mac.mm + base/platform/mac/base_global_shortcuts_mac.h + base/platform/mac/base_info_mac.h + base/platform/mac/base_info_mac.mm + base/platform/mac/base_last_input_mac.h + base/platform/mac/base_last_input_mac.mm + base/platform/mac/base_layout_switch_mac.h + base/platform/mac/base_layout_switch_mac.mm + base/platform/mac/base_network_reachability_mac.mm + base/platform/mac/base_power_save_blocker_mac.h + base/platform/mac/base_power_save_blocker_mac.mm + base/platform/mac/base_process_mac.h + base/platform/mac/base_process_mac.mm + base/platform/mac/base_system_media_controls_mac.mm + base/platform/mac/base_url_scheme_mac.h + base/platform/mac/base_url_scheme_mac.mm + base/platform/mac/base_utilities_mac.h + base/platform/mac/base_utilities_mac.mm + base/platform/win/base_file_utilities_win.cpp + base/platform/win/base_file_utilities_win.h + base/platform/win/base_global_shortcuts_win.cpp + base/platform/win/base_global_shortcuts_win.h + base/platform/win/base_info_win.cpp + base/platform/win/base_info_win.h + base/platform/win/base_last_input_win.cpp + base/platform/win/base_last_input_win.h + base/platform/win/base_layout_switch_win.cpp + base/platform/win/base_layout_switch_win.h + base/platform/win/base_network_reachability_win.cpp + base/platform/win/base_power_save_blocker_win.cpp + base/platform/win/base_power_save_blocker_win.h + base/platform/win/base_process_win.cpp + base/platform/win/base_process_win.h + base/platform/win/base_system_media_controls_win.cpp + base/platform/win/base_url_scheme_win.cpp + base/platform/win/base_url_scheme_win.h + base/platform/win/base_windows_co_task_mem.h + base/platform/win/base_windows_h.h + base/platform/win/base_windows_safe_library.cpp + base/platform/win/base_windows_safe_library.h + base/platform/win/base_windows_winrt.cpp + base/platform/win/base_windows_winrt.h + base/platform/win/base_windows_wrl.cpp + base/platform/win/base_windows_wrl.h + base/platform/win/wrl/wrl_implements_h.h + base/platform/win/wrl/wrl_module_h.h + base/platform/base_platform_custom_app_icon.h + base/platform/base_platform_global_shortcuts.h + base/platform/base_platform_info.h + base/platform/base_platform_last_input.h + base/platform/base_platform_layout_switch.h + base/platform/base_platform_network_reachability.cpp + base/platform/base_platform_network_reachability.h + base/platform/base_platform_file_utilities.h + base/platform/base_platform_power_save_blocker.h + base/platform/base_platform_process.h + base/platform/base_platform_url_scheme.h + base/platform/base_platform_system_media_controls.h + base/algorithm.cpp + base/algorithm.h + base/assertion.cpp + base/assertion.h + base/base_file_utilities.cpp + base/base_file_utilities.h + base/basic_types.h + base/binary_guard.h + base/build_config.h + base/bytes.cpp + base/bytes.h + base/call_delayed.cpp + base/call_delayed.h + base/crc32hash.cpp + base/crc32hash.h + base/concurrent_timer.cpp + base/concurrent_timer.h + base/const_string.h + base/custom_app_icon.h + base/debug_log.cpp + base/debug_log.h + base/enum_mask.h + base/event_filter.cpp + base/event_filter.h + base/expected.h + base/file_lock.h + base/file_lock_win.cpp + base/file_lock_posix.cpp + base/flags.h + base/flat_map.h + base/flat_set.h + base/functors.h + base/global_shortcuts.h + base/global_shortcuts_generic.cpp + base/global_shortcuts_generic.h + base/index_based_iterator.h + base/integration.cpp + base/integration.h + base/invoke_queued.h + base/last_used_cache.h + base/last_user_input.cpp + base/last_user_input.h + base/match_method.h + base/network_reachability.cpp + base/network_reachability.h + base/object_ptr.h + base/observer.cpp + base/observer.h + base/ordered_set.h + base/openssl_help.h + base/optional.h + base/options.cpp + base/options.h + base/overload.h + base/parse_helper.cpp + base/parse_helper.h + base/power_save_blocker.cpp + base/power_save_blocker.h + base/qthelp_regex.h + base/qthelp_url.cpp + base/qthelp_url.h + base/qt_connection.h + base/qt_signal_producer.h + base/random.cpp + base/random.h + base/required.h + base/runtime_composer.cpp + base/runtime_composer.h + base/single_instance.cpp + base/single_instance.h + base/thread_safe_wrap.h + base/timer.cpp + base/timer.h + base/timer_rpl.h + base/type_traits.h + base/unique_any.h + base/unique_function.h + base/unique_qptr.h + base/unixtime.cpp + base/unixtime.h + base/value_ordering.h + base/variant.h + base/virtual_method.h + base/weak_ptr.h + base/zlib_help.h + + base/base_pch.h +) + +if (DESKTOP_APP_DISABLE_DBUS_INTEGRATION) + remove_target_sources(lib_base ${src_loc} + base/platform/linux/base_linux_dbus_utilities.cpp + base/platform/linux/base_linux_dbus_utilities.h + base/platform/linux/base_linux_glibmm_helper.h + base/platform/linux/base_linux_xdp_utilities.cpp + base/platform/linux/base_linux_xdp_utilities.h + base/platform/linux/base_system_media_controls_linux.cpp + ) +else() + remove_target_sources(lib_base ${src_loc} + base/platform/linux/base_system_media_controls_linux_dummy.cpp + ) +endif() + +if (DESKTOP_APP_DISABLE_X11_INTEGRATION) + remove_target_sources(lib_base ${src_loc} + base/platform/linux/base_linux_xcb_utilities.cpp + base/platform/linux/base_linux_xcb_utilities.h + base/platform/linux/base_linux_xsettings.cpp + base/platform/linux/base_linux_xsettings.h + ) +endif() + +if (DESKTOP_APP_DISABLE_WAYLAND_INTEGRATION) + remove_target_sources(lib_base ${src_loc} + base/platform/linux/base_linux_wayland_integration.cpp + ) +else() + remove_target_sources(lib_base ${src_loc} + base/platform/linux/base_linux_wayland_integration_dummy.cpp + ) +endif() + +target_include_directories(lib_base +PUBLIC + ${src_loc} +) + +target_link_libraries(lib_base +PUBLIC + desktop-app::lib_rpl + desktop-app::lib_crl + desktop-app::external_qt + desktop-app::external_openssl + desktop-app::external_crash_reports + desktop-app::external_ranges + desktop-app::external_gsl + desktop-app::external_expected +PRIVATE + desktop-app::external_xxhash +) + +if (WIN32) + nuget_add_winrt(lib_base) +elseif (LINUX) + if (DESKTOP_APP_QT6) + include(/usr/lib/cmake/Qt6WaylandScannerTools/Qt6WaylandScannerToolsConfig.cmake) + include(/usr/lib/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules/FindWaylandScanner.cmake) + include(/usr/lib/cmake/Qt6WaylandClient/Qt6WaylandClientMacros.cmake) + qt6_generate_wayland_protocol_client_sources(lib_base + FILES + ${third_party_loc}/wayland-protocols/unstable/xdg-foreign/xdg-foreign-unstable-v2.xml + ${third_party_loc}/wayland-protocols/unstable/idle-inhibit/idle-inhibit-unstable-v1.xml + ) + else() + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/extra-cmake-modules/find-modules") + find_package(WaylandScanner) + include(cmake/QtWaylandClientMacros.cmake) + qt5_generate_wayland_protocol_client_sources(lib_base + FILES + ${third_party_loc}/wayland-protocols/unstable/xdg-foreign/xdg-foreign-unstable-v2.xml + ${third_party_loc}/wayland-protocols/unstable/idle-inhibit/idle-inhibit-unstable-v1.xml + ) + message(WARNING "This piece of cmake code is not officially ported to Qt 5") + endif() + + if (NOT DESKTOP_APP_DISABLE_DBUS_INTEGRATION) + target_link_libraries(lib_base + PUBLIC + desktop-app::external_glibmm + desktop-app::external_glib + ) + endif() + + if (NOT DESKTOP_APP_DISABLE_X11_INTEGRATION) + target_link_libraries(lib_base + PUBLIC + desktop-app::external_xcb_keysyms + desktop-app::external_xcb_record + desktop-app::external_xcb_screensaver + desktop-app::external_xcb + ) + endif() + + if (NOT DESKTOP_APP_DISABLE_WAYLAND_INTEGRATION) + target_link_libraries(lib_base + PUBLIC + desktop-app::external_wayland_client + ) + endif() +endif() + +if (DESKTOP_APP_USE_ALLOCATION_TRACER) + target_compile_definitions(lib_base + PRIVATE + DESKTOP_APP_USE_ALLOCATION_TRACER + ) +endif() + +#target_precompile_headers(lib_base_crash_report_writer REUSE_FROM lib_base) +target_precompile_headers(lib_base_crash_report_writer PRIVATE ${src_loc}/base/base_pch.h) +nice_target_sources(lib_base_crash_report_writer ${src_loc} +PRIVATE + base/crash_report_header.cpp + base/crash_report_header.h + base/crash_report_writer.cpp + base/crash_report_writer.h +) + +target_link_libraries(lib_base_crash_report_writer PUBLIC desktop-app::lib_base) diff --git a/x86_64/extra/tdesktop/PKGBUILD b/x86_64/extra/tdesktop/PKGBUILD new file mode 100644 index 0000000..4b6a207 --- /dev/null +++ b/x86_64/extra/tdesktop/PKGBUILD @@ -0,0 +1,68 @@ +pkgname=tdesktop +pkgver=3.7.6 +pkgrel=6 +pkgdesc='Official Telegram Desktop client' +arch=('x86_64') +url="https://github.com/telegramdesktop/tdesktop" +commitid=7a9273eca9d6ce639b5ad5ceb3a0159dfb451334 +depends=('ffmpeg' 'hicolor-icon-theme' 'lz4' 'minizip' 'openal' + 'qt6' 'glibmm' 'rnnoise' 'pipewire' 'libxtst' 'libxrandr' + 'abseil-cpp' 'tg_owt' 'webkit2gtk' 'double-conversion') +makedepends=('cmake' 'git' 'ninja' 'python3' 'meson' + 'extra-cmake-modules' 'wayland-protocols' 'plasma-wayland-protocols' 'llvm' 'clang') +source=("git+https://github.com/telegramdesktop/tdesktop.git" + "lib_ui-animations-header-fix.patch" + "qt5-wayland-generator.patch" + "fix-tgcalls-cstdint.patch") + +prepare() { + cd $pkgname + + git checkout $commitid + + # Fix .git after our clone and sync/update submodules + git remote remove origin + git remote add origin $url + + git submodule update --init --recursive + + # Reset all submodules to original changes + git submodule foreach --recursive git reset --hard + + # Patches + patch -p0 -i $srcdir/fix-tgcalls-cstdint.patch + patch -p0 -i $srcdir/lib_ui-animations-header-fix.patch + patch -p1 -i $srcdir/qt5-wayland-generator.patch -d Telegram/lib_base + + ## + # API ID/HASH is only and only allowed to be used by DrunkOS developers + # Killing or using our trust for something else will mean hidden api keys in the future!!! + ## +} + +build() { + cd $pkgname + + export CXXFLAGS+=" -Wp,-U_GLIBCXX_ASSERTIONS" + cmake \ + -B build \ + -G Ninja \ + -D CMAKE_INSTALL_PREFIX="/usr" \ + -D CMAKE_MODULE_PATH=/usr/lib/cmake/Qt6WaylandClient \ + -D DESKTOP_APP_DISABLE_WAYLAND_INTEGRATION:BOOL=ON \ + -D DESKTOP_APP_USE_PACKAGED:BOOL=ON \ + -D DESKTOP_APP_USE_PACKAGED_FONTS:BOOL=ON \ + -D DESKTOP_APP_QT6:BOOL=ON \ + -D DESKTOP_APP_DISABLE_X11_INTEGRATION:BOOL=ON \ + -D CMAKE_BUILD_TYPE=Release \ + -D TDESKTOP_API_ID=12851169 \ + -D TDESKTOP_API_HASH=bc117a073c479e6d4f19c141cc9ac75f + + ninja -C build +} + +package() { + cd $pkgname + + DESTDIR=$pkgdir ninja -C build install +} diff --git a/x86_64/extra/tdesktop/fix-tgcalls-cstdint.patch b/x86_64/extra/tdesktop/fix-tgcalls-cstdint.patch new file mode 100644 index 0000000..88612eb --- /dev/null +++ b/x86_64/extra/tdesktop/fix-tgcalls-cstdint.patch @@ -0,0 +1,12 @@ +diff --git a/tgcalls/utils/gzip.h b/tgcalls/utils/gzip.h +index a3f3ea2..7ae5cc5 100644 +--- a/tgcalls/utils/gzip.h ++++ b/tgcalls/utils/gzip.h +@@ -3,6 +3,7 @@ + + #include + #include ++#include + + namespace tgcalls { + diff --git a/x86_64/extra/tdesktop/lib_ui-animations-header-fix.patch b/x86_64/extra/tdesktop/lib_ui-animations-header-fix.patch new file mode 100644 index 0000000..ca343a5 --- /dev/null +++ b/x86_64/extra/tdesktop/lib_ui-animations-header-fix.patch @@ -0,0 +1,10 @@ +--- Telegram/lib_ui/ui/effects/animations.h 2022-06-15 21:57:58.162973648 +0300 ++++ Telegram/lib_ui/ui/effects/animations.h 2022-06-16 18:09:00.796674760 +0300 +@@ -10,6 +10,7 @@ + + #include + #include ++#include + + namespace Ui { + namespace Animations { diff --git a/x86_64/extra/tdesktop/qt5-wayland-generator.patch b/x86_64/extra/tdesktop/qt5-wayland-generator.patch new file mode 100644 index 0000000..539cf35 --- /dev/null +++ b/x86_64/extra/tdesktop/qt5-wayland-generator.patch @@ -0,0 +1,1806 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 8674c38..363c504 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -262,13 +262,24 @@ elseif (LINUX) + nuget_add_winrt(lib_base) + elseif (LINUX) + if (DESKTOP_APP_QT6) ++ include(/usr/lib/cmake/Qt6WaylandScannerTools/Qt6WaylandScannerToolsConfig.cmake) ++ include(/usr/lib/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules/FindWaylandScanner.cmake) ++ include(/usr/lib/cmake/Qt6WaylandClient/Qt6WaylandClientMacros.cmake) + qt6_generate_wayland_protocol_client_sources(lib_base + FILES + ${third_party_loc}/wayland-protocols/unstable/xdg-foreign/xdg-foreign-unstable-v2.xml + ${third_party_loc}/wayland-protocols/unstable/idle-inhibit/idle-inhibit-unstable-v1.xml + ) + else() +- message(FATAL_ERROR "This piece of cmake code is not ported to Qt 5") ++ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/extra-cmake-modules/find-modules") ++ find_package(WaylandScanner) ++ include(cmake/QtWaylandClientMacros.cmake) ++ qt5_generate_wayland_protocol_client_sources(lib_base ++ FILES ++ ${third_party_loc}/wayland-protocols/unstable/xdg-foreign/xdg-foreign-unstable-v2.xml ++ ${third_party_loc}/wayland-protocols/unstable/idle-inhibit/idle-inhibit-unstable-v1.xml ++ ) ++ message(WARNING "This piece of cmake code is not officially ported to Qt 5") + endif() + + if (NOT DESKTOP_APP_DISABLE_DBUS_INTEGRATION) +diff --git a/cmake/QtWaylandClientMacros.cmake b/cmake/QtWaylandClientMacros.cmake +new file mode 100644 +index 0000000..2c99ec7 +--- /dev/null ++++ b/cmake/QtWaylandClientMacros.cmake +@@ -0,0 +1,81 @@ ++include(cmake/QtWaylandScannerToolsTargets.cmake) ++function(qt5_generate_wayland_protocol_client_sources target) ++ cmake_parse_arguments(arg "" "__QT_INTERNAL_WAYLAND_INCLUDE_DIR" "FILES" ${ARGN}) ++ if(DEFINED arg_UNPARSED_ARGUMENTS) ++ message(FATAL_ERROR "Unknown arguments were passed to qt6_generate_wayland_protocol_client_sources: (${arg_UNPARSED_ARGUMENTS}).") ++ endif() ++ ++ get_target_property(target_binary_dir ${target} BINARY_DIR) ++ ++ if(NOT TARGET Wayland::Scanner) ++ message(FATAL_ERROR "Wayland::Scanner target not found. You might be missing the WaylandScanner CMake package.") ++ endif() ++ ++ if(NOT TARGET Qt::qtwaylandscanner) ++ message(FATAL_ERROR "qtwaylandscanner executable not found. Most likely there is an issue with your Qt installation.") ++ endif() ++ ++ foreach(protocol_file IN LISTS arg_FILES) ++ get_filename_component(protocol_name "${protocol_file}" NAME_WLE) ++ ++ set(waylandscanner_header_output "${target_binary_dir}/wayland-${protocol_name}-client-protocol.h") ++ set(waylandscanner_code_output "${target_binary_dir}/wayland-${protocol_name}-protocol.c") ++ set(qtwaylandscanner_header_output "${target_binary_dir}/qwayland-${protocol_name}.h") ++ set(qtwaylandscanner_code_output "${target_binary_dir}/qwayland-${protocol_name}.cpp") ++ ++ add_custom_command( ++ OUTPUT "${waylandscanner_header_output}" ++ #TODO: Maybe put the files in ${CMAKE_CURRENT_BINARY_DIR/wayland_generated instead? ++ COMMAND Wayland::Scanner --strict --include-core-only client-header < "${protocol_file}" > "${waylandscanner_header_output}" ++ ) ++ ++ add_custom_command( ++ OUTPUT "${waylandscanner_code_output}" ++ COMMAND Wayland::Scanner --strict --include-core-only public-code < "${protocol_file}" > "${waylandscanner_code_output}" ++ ) ++ ++ set(wayland_include_dir "") ++ if(arg___QT_INTERNAL_WAYLAND_INCLUDE_DIR) ++ set(wayland_include_dir "${arg___QT_INTERNAL_WAYLAND_INCLUDE_DIR}") ++ else() ++ get_target_property(qt_module ${target} _qt_module_interface_name) ++ get_target_property(is_for_module "${target}" _qt_module_has_headers) ++ if (qt_module) ++ set(wayland_include_dir "Qt${qt_module}/private") ++ elseif (is_for_module) ++ set(wayland_include_dir "QtWaylandClient/private") ++ endif() ++ endif() ++ ++ add_custom_command( ++ OUTPUT "${qtwaylandscanner_header_output}" ++ COMMAND Qt::qtwaylandscanner client-header "${protocol_file}" "${wayland_include_dir}" > "${qtwaylandscanner_header_output}" ++ DEPENDS ${protocol_file} Qt::qtwaylandscanner ++ ) ++ ++ set(qtwaylandscanner_code_include "") ++ if (is_for_module) ++ set(qtwaylandscanner_code_include "") ++ endif() ++ ++ add_custom_command( ++ OUTPUT "${qtwaylandscanner_code_output}" ++ COMMAND Qt::qtwaylandscanner client-code "${protocol_file}" --header-path='${wayland_include_dir}' --add-include='${qtwaylandscanner_code_include}' > "${qtwaylandscanner_code_output}" ++ DEPENDS ${protocol_file} Qt::qtwaylandscanner ++ ) ++ ++ target_sources(${target} PRIVATE ++ "${waylandscanner_header_output}" ++ "${waylandscanner_code_output}" ++ "${qtwaylandscanner_header_output}" ++ "${qtwaylandscanner_code_output}" ++ ) ++ endforeach() ++ target_include_directories(${target} PRIVATE ${target_binary_dir}) ++endfunction() ++ ++if(NOT QT_NO_CREATE_VERSIONLESS_FUNCTIONS) ++ function(qt_generate_wayland_protocol_client_sources) ++ qt5_generate_wayland_protocol_client_sources(${ARGV}) ++ endfunction() ++endif() +diff --git a/cmake/QtWaylandScannerToolsTargets-relwithdebinfo.cmake b/cmake/QtWaylandScannerToolsTargets-relwithdebinfo.cmake +new file mode 100644 +index 0000000..91aae89 +--- /dev/null ++++ b/cmake/QtWaylandScannerToolsTargets-relwithdebinfo.cmake +@@ -0,0 +1,18 @@ ++#---------------------------------------------------------------- ++# Generated CMake target import file for configuration "RelWithDebInfo". ++#---------------------------------------------------------------- ++ ++# Commands may need to know the format version. ++set(CMAKE_IMPORT_FILE_VERSION 1) ++ ++# Import target "Qt6::qtwaylandscanner" for configuration "RelWithDebInfo" ++set_property(TARGET Qt::qtwaylandscanner APPEND PROPERTY IMPORTED_CONFIGURATIONS RELWITHDEBINFO) ++set_target_properties(Qt::qtwaylandscanner PROPERTIES ++ IMPORTED_LOCATION_RELWITHDEBINFO "${_IMPORT_PREFIX}/bin/qtwaylandscanner" ++ ) ++ ++list(APPEND _IMPORT_CHECK_TARGETS Qt::qtwaylandscanner ) ++list(APPEND _IMPORT_CHECK_FILES_FOR_Qt::qtwaylandscanner "${_IMPORT_PREFIX}/bin/qtwaylandscanner" ) ++ ++# Commands beyond this point should not need to know the version. ++set(CMAKE_IMPORT_FILE_VERSION) +diff --git a/cmake/QtWaylandScannerToolsTargets.cmake b/cmake/QtWaylandScannerToolsTargets.cmake +new file mode 100644 +index 0000000..105b526 +--- /dev/null ++++ b/cmake/QtWaylandScannerToolsTargets.cmake +@@ -0,0 +1,106 @@ ++# Generated by CMake ++ ++if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.6) ++ message(FATAL_ERROR "CMake >= 2.6.0 required") ++endif() ++cmake_policy(PUSH) ++cmake_policy(VERSION 2.6...3.21) ++#---------------------------------------------------------------- ++# Generated CMake target import file. ++#---------------------------------------------------------------- ++ ++# Commands may need to know the format version. ++set(CMAKE_IMPORT_FILE_VERSION 1) ++ ++# Protect against multiple inclusion, which would fail when already imported targets are added once more. ++set(_targetsDefined) ++set(_targetsNotDefined) ++set(_expectedTargets) ++foreach(_expectedTarget Qt::qtwaylandscanner) ++ list(APPEND _expectedTargets ${_expectedTarget}) ++ if(NOT TARGET ${_expectedTarget}) ++ list(APPEND _targetsNotDefined ${_expectedTarget}) ++ endif() ++ if(TARGET ${_expectedTarget}) ++ list(APPEND _targetsDefined ${_expectedTarget}) ++ endif() ++endforeach() ++if("${_targetsDefined}" STREQUAL "${_expectedTargets}") ++ unset(_targetsDefined) ++ unset(_targetsNotDefined) ++ unset(_expectedTargets) ++ set(CMAKE_IMPORT_FILE_VERSION) ++ cmake_policy(POP) ++ return() ++endif() ++if(NOT "${_targetsDefined}" STREQUAL "") ++ message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") ++endif() ++unset(_targetsDefined) ++unset(_targetsNotDefined) ++unset(_expectedTargets) ++ ++ ++# Compute the installation prefix relative to this file. ++get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) ++# Use original install prefix when loaded through a ++# cross-prefix symbolic link such as /lib -> /usr/lib. ++get_filename_component(_realCurr "${_IMPORT_PREFIX}" REALPATH) ++get_filename_component(_realOrig "/usr/lib/cmake/Qt6WaylandScannerTools" REALPATH) ++# TODO fix hack ++#if(_realCurr STREQUAL _realOrig) ++ set(_IMPORT_PREFIX "/usr/lib/cmake/Qt6WaylandScannerTools") ++#endif() ++unset(_realOrig) ++unset(_realCurr) ++get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) ++get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) ++get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) ++if(_IMPORT_PREFIX STREQUAL "/") ++ set(_IMPORT_PREFIX "") ++endif() ++ ++# Create imported target Qt::qtwaylandscanner ++add_executable(Qt::qtwaylandscanner IMPORTED) ++ ++set_target_properties(Qt::qtwaylandscanner PROPERTIES ++ COMPATIBLE_INTERFACE_STRING "QT_MAJOR_VERSION" ++ INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include/qt" ++ INTERFACE_QT_MAJOR_VERSION "5" ++) ++ ++# Load information for each installed configuration. ++get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) ++file(GLOB CONFIG_FILES "${_DIR}/QtWaylandScannerToolsTargets-*.cmake") ++foreach(f ${CONFIG_FILES}) ++ include(${f}) ++endforeach() ++ ++# Cleanup temporary variables. ++set(_IMPORT_PREFIX) ++ ++# Loop over all imported files and verify that they actually exist ++foreach(target ${_IMPORT_CHECK_TARGETS} ) ++ foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) ++ if(NOT EXISTS "${file}" ) ++ message(FATAL_ERROR "The imported target \"${target}\" references the file ++ \"${file}\" ++but this file does not exist. Possible reasons include: ++* The file was deleted, renamed, or moved to another location. ++* An install or uninstall procedure did not complete successfully. ++* The installation package was faulty and contained ++ \"${CMAKE_CURRENT_LIST_FILE}\" ++but not all the files it references. ++") ++ endif() ++ endforeach() ++ unset(_IMPORT_CHECK_FILES_FOR_${target}) ++endforeach() ++unset(_IMPORT_CHECK_TARGETS) ++ ++# This file does not depend on other imported targets which have ++# been exported from the same project but in a separate export set. ++ ++# Commands beyond this point should not need to know the version. ++set(CMAKE_IMPORT_FILE_VERSION) ++cmake_policy(POP) +diff --git a/cmake/extra-cmake-modules/COPYING-CMAKE-SCRIPTS b/cmake/extra-cmake-modules/COPYING-CMAKE-SCRIPTS +new file mode 100644 +index 0000000..4b41776 +--- /dev/null ++++ b/cmake/extra-cmake-modules/COPYING-CMAKE-SCRIPTS +@@ -0,0 +1,22 @@ ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions ++are met: ++ ++1. Redistributions of source code must retain the copyright ++ notice, this list of conditions and the following disclaimer. ++2. Redistributions in binary form must reproduce the copyright ++ notice, this list of conditions and the following disclaimer in the ++ documentation and/or other materials provided with the distribution. ++3. The name of the author may not be used to endorse or promote products ++ derived from this software without specific prior written permission. ++ ++THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR ++IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ++IN NO EVENT SHALL THE AUTHOR 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. +diff --git a/cmake/extra-cmake-modules/find-modules/ECMFindModuleHelpersStub.cmake b/cmake/extra-cmake-modules/find-modules/ECMFindModuleHelpersStub.cmake +new file mode 100644 +index 0000000..bb8c9a6 +--- /dev/null ++++ b/cmake/extra-cmake-modules/find-modules/ECMFindModuleHelpersStub.cmake +@@ -0,0 +1 @@ ++include(${CMAKE_CURRENT_LIST_DIR}/../modules/ECMFindModuleHelpers.cmake) +diff --git a/cmake/extra-cmake-modules/find-modules/FindEGL.cmake b/cmake/extra-cmake-modules/find-modules/FindEGL.cmake +new file mode 100644 +index 0000000..a3573ba +--- /dev/null ++++ b/cmake/extra-cmake-modules/find-modules/FindEGL.cmake +@@ -0,0 +1,173 @@ ++#.rst: ++# FindEGL ++# ------- ++# ++# Try to find EGL. ++# ++# This will define the following variables: ++# ++# ``EGL_FOUND`` ++# True if (the requested version of) EGL is available ++# ``EGL_VERSION`` ++# The version of EGL; note that this is the API version defined in the ++# headers, rather than the version of the implementation (eg: Mesa) ++# ``EGL_LIBRARIES`` ++# This can be passed to target_link_libraries() instead of the ``EGL::EGL`` ++# target ++# ``EGL_INCLUDE_DIRS`` ++# This should be passed to target_include_directories() if the target is not ++# used for linking ++# ``EGL_DEFINITIONS`` ++# This should be passed to target_compile_options() if the target is not ++# used for linking ++# ++# If ``EGL_FOUND`` is TRUE, it will also define the following imported target: ++# ++# ``EGL::EGL`` ++# The EGL library ++# ++# In general we recommend using the imported target, as it is easier to use. ++# Bear in mind, however, that if the target is in the link interface of an ++# exported library, it must be made available by the package config file. ++# ++# Since pre-1.0.0. ++ ++#============================================================================= ++# Copyright 2014 Alex Merry ++# Copyright 2014 Martin Gräßlin ++# ++# Redistribution and use in source and binary forms, with or without ++# modification, are permitted provided that the following conditions ++# are met: ++# ++# 1. Redistributions of source code must retain the copyright ++# notice, this list of conditions and the following disclaimer. ++# 2. Redistributions in binary form must reproduce the copyright ++# notice, this list of conditions and the following disclaimer in the ++# documentation and/or other materials provided with the distribution. ++# 3. The name of the author may not be used to endorse or promote products ++# derived from this software without specific prior written permission. ++# ++# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR ++# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ++# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, ++# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT ++# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ++# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ++# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF ++# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++#============================================================================= ++ ++include(${CMAKE_CURRENT_LIST_DIR}/ECMFindModuleHelpersStub.cmake) ++include(CheckCXXSourceCompiles) ++include(CMakePushCheckState) ++ ++ecm_find_package_version_check(EGL) ++ ++# Use pkg-config to get the directories and then use these values ++# in the FIND_PATH() and FIND_LIBRARY() calls ++find_package(PkgConfig QUIET) ++pkg_check_modules(PKG_EGL QUIET egl) ++ ++set(EGL_DEFINITIONS ${PKG_EGL_CFLAGS_OTHER}) ++ ++find_path(EGL_INCLUDE_DIR ++ NAMES ++ EGL/egl.h ++ HINTS ++ ${PKG_EGL_INCLUDE_DIRS} ++) ++find_library(EGL_LIBRARY ++ NAMES ++ EGL ++ HINTS ++ ${PKG_EGL_LIBRARY_DIRS} ++) ++ ++# NB: We do *not* use the version information from pkg-config, as that ++# is the implementation version (eg: the Mesa version) ++if(EGL_INCLUDE_DIR) ++ # egl.h has defines of the form EGL_VERSION_x_y for each supported ++ # version; so the header for EGL 1.1 will define EGL_VERSION_1_0 and ++ # EGL_VERSION_1_1. Finding the highest supported version involves ++ # finding all these defines and selecting the highest numbered. ++ file(READ "${EGL_INCLUDE_DIR}/EGL/egl.h" _EGL_header_contents) ++ string(REGEX MATCHALL ++ "[ \t]EGL_VERSION_[0-9_]+" ++ _EGL_version_lines ++ "${_EGL_header_contents}" ++ ) ++ unset(_EGL_header_contents) ++ foreach(_EGL_version_line ${_EGL_version_lines}) ++ string(REGEX REPLACE ++ "[ \t]EGL_VERSION_([0-9_]+)" ++ "\\1" ++ _version_candidate ++ "${_EGL_version_line}" ++ ) ++ string(REPLACE "_" "." _version_candidate "${_version_candidate}") ++ if(NOT DEFINED EGL_VERSION OR EGL_VERSION VERSION_LESS _version_candidate) ++ set(EGL_VERSION "${_version_candidate}") ++ endif() ++ endforeach() ++ unset(_EGL_version_lines) ++endif() ++ ++cmake_push_check_state(RESET) ++list(APPEND CMAKE_REQUIRED_LIBRARIES "${EGL_LIBRARY}") ++list(APPEND CMAKE_REQUIRED_INCLUDES "${EGL_INCLUDE_DIR}") ++list(APPEND CMAKE_REQUIRED_DEFINITIONS "${EGL_DEFINITIONS}") ++ ++check_cxx_source_compiles(" ++#include ++ ++int main(int, char **) { ++ EGLint x = 0; EGLDisplay dpy = 0; EGLContext ctx = 0; ++ eglDestroyContext(dpy, ctx); ++}" HAVE_EGL) ++ ++cmake_pop_check_state() ++ ++set(required_vars EGL_INCLUDE_DIR HAVE_EGL) ++if(NOT EMSCRIPTEN) ++ list(APPEND required_vars EGL_LIBRARY) ++endif() ++ ++include(FindPackageHandleStandardArgs) ++find_package_handle_standard_args(EGL ++ FOUND_VAR ++ EGL_FOUND ++ REQUIRED_VARS ++ ${required_vars} ++ VERSION_VAR ++ EGL_VERSION ++) ++ ++if(EGL_FOUND AND NOT TARGET EGL::EGL) ++ if (EMSCRIPTEN) ++ add_library(EGL::EGL INTERFACE IMPORTED) ++ # Nothing further to be done, system include paths have headers and linkage is implicit. ++ else() ++ add_library(EGL::EGL UNKNOWN IMPORTED) ++ set_target_properties(EGL::EGL PROPERTIES ++ IMPORTED_LOCATION "${EGL_LIBRARY}" ++ INTERFACE_COMPILE_OPTIONS "${EGL_DEFINITIONS}" ++ INTERFACE_INCLUDE_DIRECTORIES "${EGL_INCLUDE_DIR}" ++ ) ++ endif() ++endif() ++ ++mark_as_advanced(EGL_LIBRARY EGL_INCLUDE_DIR HAVE_EGL) ++ ++# compatibility variables ++set(EGL_LIBRARIES ${EGL_LIBRARY}) ++set(EGL_INCLUDE_DIRS ${EGL_INCLUDE_DIR}) ++set(EGL_VERSION_STRING ${EGL_VERSION}) ++ ++include(FeatureSummary) ++set_package_properties(EGL PROPERTIES ++ URL "https://www.khronos.org/egl/" ++ DESCRIPTION "A platform-agnostic mechanism for creating rendering surfaces for use with other graphics libraries, such as OpenGL|ES and OpenVG." ++) +diff --git a/cmake/extra-cmake-modules/find-modules/FindGLIB2.cmake b/cmake/extra-cmake-modules/find-modules/FindGLIB2.cmake +new file mode 100644 +index 0000000..24a194c +--- /dev/null ++++ b/cmake/extra-cmake-modules/find-modules/FindGLIB2.cmake +@@ -0,0 +1,167 @@ ++#.rst: ++# FindGLIB2 ++# --------- ++# ++# Try to locate the GLib2 library. ++# If found, this will define the following variables: ++# ++# ``GLIB2_FOUND`` ++# True if the GLib2 library is available ++# ``GLIB2_INCLUDE_DIRS`` ++# The GLib2 include directories ++# ``GLIB2_LIBRARIES`` ++# The GLib2 libraries for linking ++# ``GLIB2_INCLUDE_DIR`` ++# Deprecated, use ``GLIB2_INCLUDE_DIRS`` ++# ``GLIB2_LIBRARY`` ++# Deprecated, use ``GLIB2_LIBRARIES`` ++# ++# If ``GLIB2_FOUND`` is TRUE, it will also define the following ++# imported target: ++# ++# ``GLIB2::GLIB2`` ++# The GLIB2 library ++# ++# Since 5.41.0. ++ ++#============================================================================= ++# Copyright (c) 2008 Laurent Montel, ++# ++# Redistribution and use in source and binary forms, with or without ++# modification, are permitted provided that the following conditions ++# are met: ++# ++# 1. Redistributions of source code must retain the copyright ++# notice, this list of conditions and the following disclaimer. ++# 2. Redistributions in binary form must reproduce the copyright ++# notice, this list of conditions and the following disclaimer in the ++# documentation and/or other materials provided with the distribution. ++# 3. The name of the author may not be used to endorse or promote products ++# derived from this software without specific prior written permission. ++# ++# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR ++# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ++# IN NO EVENT SHALL THE AUTHOR 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. ++#============================================================================= ++ ++find_package(PkgConfig QUIET) ++pkg_check_modules(PC_GLIB2 QUIET glib-2.0) ++ ++find_path(GLIB2_INCLUDE_DIRS ++ NAMES glib.h ++ HINTS ${PC_GLIB2_INCLUDEDIR} ++ PATH_SUFFIXES glib-2.0) ++ ++find_library(GLIB2_LIBRARIES ++ NAMES glib-2.0 ++ HINTS ${PC_GLIB2_LIBDIR} ++) ++ ++pkg_check_modules(PC_GTHREAD2 QUIET gthread-2.0) ++ ++find_library(GTHREAD2_LIBRARIES ++ NAMES gthread-2.0 ++ HINTS ${PC_GTHREAD2_LIBDIR} ++) ++ ++pkg_check_modules(PC_GOBJECT QUIET gobject-2.0) ++ ++find_path(GLIB2_GOBJECT_INCLUDE_DIRS ++ NAMES glib-object.h ++ HINTS ${PC_GOBJECT_INCLUDEDIR} ++ PATH_SUFFIXES glib-2.0) ++ ++find_library(GLIB2_GOBJECT_LIBRARIES ++ NAMES gobject-2.0 ++ HINTS ${PC_GOBJECT_LIBDIR} ++) ++ ++pkg_check_modules(PC_GIO QUIET gio-2.0) ++ ++find_path(GLIB2_GIO_INCLUDE_DIRS ++ NAMES gio/gio.h ++ HINTS ${PC_GIO_INCLUDEDIR} ++ PATH_SUFFIXES glib-2.0) ++ ++find_library(GLIB2_GIO_LIBRARIES ++ NAMES gio-2.0 ++ HINTS ${PC_GIO_LIBDIR} ++) ++ ++# search the glibconfig.h include dir under the same root where the library is found ++get_filename_component(glib2LibDir "${GLIB2_LIBRARIES}" PATH) ++ ++find_path(GLIB2_INTERNAL_INCLUDE_DIR glibconfig.h ++ PATH_SUFFIXES glib-2.0/include ++ HINTS ${PC_GLIB2_INCLUDEDIR} "${glib2LibDir}" ${CMAKE_SYSTEM_LIBRARY_PATH}) ++ ++# not sure if this include dir is optional or required ++# for now it is optional ++if(GLIB2_INTERNAL_INCLUDE_DIR) ++ list(APPEND GLIB2_INCLUDE_DIRS "${GLIB2_INTERNAL_INCLUDE_DIR}") ++ list(APPEND GLIB2_GOBJECT_INCLUDE_DIRS "${GLIB2_INTERNAL_INCLUDE_DIR}") ++ list(APPEND GLIB2_GIO_INCLUDE_DIRS "${GLIB2_INTERNAL_INCLUDE_DIR}") ++endif() ++ ++# Deprecated synonyms ++set(GLIB2_INCLUDE_DIR "${GLIB2_INCLUDE_DIRS}") ++set(GLIB2_LIBRARY "${GLIB2_LIBRARIES}") ++set(GLIB2_GOBJECT_INCLUDE_DIR "${GLIB2_GOBJECT_INCLUDE_DIRS}") ++set(GLIB2_GOBJECT_LIBRARY "${GLIB2_GOBJECT_LIBRARIES}") ++set(GLIB2_GIO_INCLUDE_DIR "${GLIB2_GIO_INCLUDE_DIRS}") ++set(GLIB2_GIO_LIBRARY "${GLIB2_GIO_LIBRARIES}") ++ ++if(GLIB2_GOBJECT_LIBRARIES AND GLIB2_GOBJECT_INCLUDE_DIRS) ++ set(GLIB2_GOBJECT_FOUND TRUE) ++endif() ++ ++if(GLIB2_GIO_LIBRARIES AND GLIB2_GIO_INCLUDE_DIRS) ++ set(GLIB2_GIO_FOUND TRUE) ++endif() ++ ++include(FindPackageHandleStandardArgs) ++find_package_handle_standard_args(GLIB2 ++ REQUIRED_VARS GLIB2_LIBRARIES GTHREAD2_LIBRARIES GLIB2_INCLUDE_DIRS ++ HANDLE_COMPONENTS) ++ ++if(GLIB2_FOUND AND NOT TARGET GLIB2::GLIB2) ++ add_library(GLIB2::GLIB2 UNKNOWN IMPORTED) ++ set_target_properties(GLIB2::GLIB2 PROPERTIES ++ IMPORTED_LOCATION "${GLIB2_LIBRARIES}" ++ INTERFACE_LINK_LIBRARIES "${GTHREAD2_LIBRARIES}" ++ INTERFACE_INCLUDE_DIRECTORIES "${GLIB2_INCLUDE_DIRS}") ++endif() ++ ++if(GLIB2_GOBJECT_FOUND AND NOT TARGET GLIB2::GOBJECT) ++ add_library(GLIB2::GOBJECT UNKNOWN IMPORTED) ++ set_target_properties(GLIB2::GOBJECT PROPERTIES ++ IMPORTED_LOCATION "${GLIB2_GOBJECT_LIBRARIES}" ++ INTERFACE_INCLUDE_DIRECTORIES "${GLIB2_GOBJECT_INCLUDE_DIRS}") ++endif() ++ ++if(GLIB2_GIO_FOUND AND NOT TARGET GLIB2::GIO) ++ add_library(GLIB2::GIO UNKNOWN IMPORTED) ++ set_target_properties(GLIB2::GIO PROPERTIES ++ IMPORTED_LOCATION "${GLIB2_GIO_LIBRARIES}" ++ INTERFACE_INCLUDE_DIRECTORIES "${GLIB2_GIO_INCLUDE_DIRS}") ++endif() ++ ++mark_as_advanced(GLIB2_INCLUDE_DIRS GLIB2_INCLUDE_DIR ++ GLIB2_LIBRARIES GLIB2_LIBRARY ++ GLIB2_GOBJECT_INCLUDE_DIRS GLIB2_GOBJECT_INCLUDE_DIR ++ GLIB2_GOBJECT_LIBRARIES GLIB2_GOBJECT_LIBRARY ++ GLIB2_GIO_INCLUDE_DIRS GLIB2_GIO_INCLUDE_DIR ++ GLIB2_GIO_LIBRARIES GLIB2_GIO_LIBRARY) ++ ++include(FeatureSummary) ++set_package_properties(GLIB2 PROPERTIES ++ URL "https://wiki.gnome.org/Projects/GLib" ++ DESCRIPTION "Event loop and utility library") ++ +diff --git a/cmake/extra-cmake-modules/find-modules/FindWayland.cmake b/cmake/extra-cmake-modules/find-modules/FindWayland.cmake +new file mode 100644 +index 0000000..233cc88 +--- /dev/null ++++ b/cmake/extra-cmake-modules/find-modules/FindWayland.cmake +@@ -0,0 +1,143 @@ ++#.rst: ++# FindWayland ++# ----------- ++# ++# Try to find Wayland. ++# ++# This is a component-based find module, which makes use of the COMPONENTS ++# and OPTIONAL_COMPONENTS arguments to find_module. The following components ++# are available:: ++# ++# Client Server Cursor Egl ++# ++# If no components are specified, this module will act as though all components ++# were passed to OPTIONAL_COMPONENTS. ++# ++# This module will define the following variables, independently of the ++# components searched for or found: ++# ++# ``Wayland_FOUND`` ++# TRUE if (the requested version of) Wayland is available ++# ``Wayland_VERSION`` ++# Found Wayland version ++# ``Wayland_TARGETS`` ++# A list of all targets imported by this module (note that there may be more ++# than the components that were requested) ++# ``Wayland_LIBRARIES`` ++# This can be passed to target_link_libraries() instead of the imported ++# targets ++# ``Wayland_INCLUDE_DIRS`` ++# This should be passed to target_include_directories() if the targets are ++# not used for linking ++# ``Wayland_DEFINITIONS`` ++# This should be passed to target_compile_options() if the targets are not ++# used for linking ++# ++# For each searched-for components, ``Wayland__FOUND`` will be set to ++# TRUE if the corresponding Wayland library was found, and FALSE otherwise. If ++# ``Wayland__FOUND`` is TRUE, the imported target ++# ``Wayland::`` will be defined. This module will also attempt to ++# determine ``Wayland_*_VERSION`` variables for each imported target, although ++# ``Wayland_VERSION`` should normally be sufficient. ++# ++# In general we recommend using the imported targets, as they are easier to use ++# and provide more control. Bear in mind, however, that if any target is in the ++# link interface of an exported library, it must be made available by the ++# package config file. ++# ++# Since pre-1.0.0. ++ ++#============================================================================= ++# Copyright 2014 Alex Merry ++# Copyright 2014 Martin Gräßlin ++# ++# Redistribution and use in source and binary forms, with or without ++# modification, are permitted provided that the following conditions ++# are met: ++# ++# 1. Redistributions of source code must retain the copyright ++# notice, this list of conditions and the following disclaimer. ++# 2. Redistributions in binary form must reproduce the copyright ++# notice, this list of conditions and the following disclaimer in the ++# documentation and/or other materials provided with the distribution. ++# 3. The name of the author may not be used to endorse or promote products ++# derived from this software without specific prior written permission. ++# ++# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR ++# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ++# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, ++# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT ++# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ++# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ++# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF ++# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++#============================================================================= ++ ++include(${CMAKE_CURRENT_LIST_DIR}/ECMFindModuleHelpersStub.cmake) ++ ++ecm_find_package_version_check(Wayland) ++ ++set(Wayland_known_components ++ Client ++ Server ++ Cursor ++ Egl ++) ++foreach(_comp ${Wayland_known_components}) ++ string(TOLOWER "${_comp}" _lc_comp) ++ set(Wayland_${_comp}_component_deps) ++ set(Wayland_${_comp}_pkg_config "wayland-${_lc_comp}") ++ set(Wayland_${_comp}_lib "wayland-${_lc_comp}") ++ set(Wayland_${_comp}_header "wayland-${_lc_comp}.h") ++endforeach() ++set(Wayland_Egl_component_deps Client) ++ ++ecm_find_package_parse_components(Wayland ++ RESULT_VAR Wayland_components ++ KNOWN_COMPONENTS ${Wayland_known_components} ++) ++ecm_find_package_handle_library_components(Wayland ++ COMPONENTS ${Wayland_components} ++) ++ ++# If pkg-config didn't provide us with version information, ++# try to extract it from wayland-version.h ++# (Note that the version from wayland-egl.pc will probably be ++# the Mesa version, rather than the Wayland version, but that ++# version will be ignored as we always find wayland-client.pc ++# first). ++if(NOT Wayland_VERSION) ++ find_file(Wayland_VERSION_HEADER ++ NAMES wayland-version.h ++ HINTS ${Wayland_INCLUDE_DIRS} ++ ) ++ mark_as_advanced(Wayland_VERSION_HEADER) ++ if(Wayland_VERSION_HEADER) ++ file(READ ${Wayland_VERSION_HEADER} _wayland_version_header_contents) ++ string(REGEX REPLACE ++ "^.*[ \t]+WAYLAND_VERSION[ \t]+\"([0-9.]*)\".*$" ++ "\\1" ++ Wayland_VERSION ++ "${_wayland_version_header_contents}" ++ ) ++ unset(_wayland_version_header_contents) ++ endif() ++endif() ++ ++find_package_handle_standard_args(Wayland ++ FOUND_VAR ++ Wayland_FOUND ++ REQUIRED_VARS ++ Wayland_LIBRARIES ++ VERSION_VAR ++ Wayland_VERSION ++ HANDLE_COMPONENTS ++) ++ ++include(FeatureSummary) ++set_package_properties(Wayland PROPERTIES ++ URL "http://wayland.freedesktop.org" ++ DESCRIPTION "C library implementation of the Wayland protocol: a protocol for a compositor to talk to its clients" ++) +diff --git a/cmake/extra-cmake-modules/find-modules/FindWaylandScanner.cmake b/cmake/extra-cmake-modules/find-modules/FindWaylandScanner.cmake +new file mode 100644 +index 0000000..13291af +--- /dev/null ++++ b/cmake/extra-cmake-modules/find-modules/FindWaylandScanner.cmake +@@ -0,0 +1,173 @@ ++#.rst: ++# FindWaylandScanner ++# ------------------ ++# ++# Try to find wayland-scanner. ++# ++# If the wayland-scanner executable is not in your PATH, you can provide ++# an alternative name or full path location with the ``WaylandScanner_EXECUTABLE`` ++# variable. ++# ++# This will define the following variables: ++# ++# ``WaylandScanner_FOUND`` ++# True if wayland-scanner is available. ++# ++# ``WaylandScanner_EXECUTABLE`` ++# The wayland-scanner executable. ++# ++# If ``WaylandScanner_FOUND`` is TRUE, it will also define the following imported ++# target: ++# ++# ``Wayland::Scanner`` ++# The wayland-scanner executable. ++# ++# This module provides the following functions to generate C protocol ++# implementations: ++# ++# - ``ecm_add_wayland_client_protocol`` ++# - ``ecm_add_wayland_server_protocol`` ++# ++# :: ++# ++# ecm_add_wayland_client_protocol( ++# PROTOCOL ++# BASENAME ) ++# ++# Generate Wayland client protocol files from ```` XML ++# definition for the ```` interface and append those files ++# to ````. ++# ++# :: ++# ++# ecm_add_wayland_server_protocol( ++# PROTOCOL ++# BASENAME ) ++# ++# Generate Wayland server protocol files from ```` XML ++# definition for the ```` interface and append those files ++# to ````. ++# ++# Since 1.4.0. ++ ++#============================================================================= ++# Copyright 2012-2014 Pier Luigi Fiorini ++# ++# Redistribution and use in source and binary forms, with or without ++# modification, are permitted provided that the following conditions ++# are met: ++# ++# 1. Redistributions of source code must retain the copyright ++# notice, this list of conditions and the following disclaimer. ++# 2. Redistributions in binary form must reproduce the copyright ++# notice, this list of conditions and the following disclaimer in the ++# documentation and/or other materials provided with the distribution. ++# 3. The name of the author may not be used to endorse or promote products ++# derived from this software without specific prior written permission. ++# ++# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR ++# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ++# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, ++# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT ++# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ++# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ++# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF ++# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++#============================================================================= ++ ++include(${CMAKE_CURRENT_LIST_DIR}/ECMFindModuleHelpersStub.cmake) ++ ++ecm_find_package_version_check(WaylandScanner) ++ ++# Find wayland-scanner ++find_program(WaylandScanner_EXECUTABLE NAMES wayland-scanner) ++ ++include(FindPackageHandleStandardArgs) ++find_package_handle_standard_args(WaylandScanner ++ FOUND_VAR ++ WaylandScanner_FOUND ++ REQUIRED_VARS ++ WaylandScanner_EXECUTABLE ++) ++ ++mark_as_advanced(WaylandScanner_EXECUTABLE) ++ ++if(NOT TARGET Wayland::Scanner AND WaylandScanner_FOUND) ++ add_executable(Wayland::Scanner IMPORTED) ++ set_target_properties(Wayland::Scanner PROPERTIES ++ IMPORTED_LOCATION "${WaylandScanner_EXECUTABLE}" ++ ) ++endif() ++ ++include(FeatureSummary) ++set_package_properties(WaylandScanner PROPERTIES ++ URL "https://wayland.freedesktop.org/" ++ DESCRIPTION "Executable that converts XML protocol files to C code" ++) ++ ++ ++include(CMakeParseArguments) ++ ++function(ecm_add_wayland_client_protocol out_var) ++ # Parse arguments ++ set(oneValueArgs PROTOCOL BASENAME) ++ cmake_parse_arguments(ARGS "" "${oneValueArgs}" "" ${ARGN}) ++ ++ if(ARGS_UNPARSED_ARGUMENTS) ++ message(FATAL_ERROR "Unknown keywords given to ecm_add_wayland_client_protocol(): \"${ARGS_UNPARSED_ARGUMENTS}\"") ++ endif() ++ ++ get_filename_component(_infile ${ARGS_PROTOCOL} ABSOLUTE) ++ set(_client_header "${CMAKE_CURRENT_BINARY_DIR}/wayland-${ARGS_BASENAME}-client-protocol.h") ++ set(_code "${CMAKE_CURRENT_BINARY_DIR}/wayland-${ARGS_BASENAME}-protocol.c") ++ ++ set_source_files_properties(${_client_header} GENERATED) ++ set_source_files_properties(${_code} GENERATED) ++ set_property(SOURCE ${_client_header} PROPERTY SKIP_AUTOMOC ON) ++ ++ add_custom_command(OUTPUT "${_client_header}" ++ COMMAND ${WaylandScanner_EXECUTABLE} client-header ${_infile} ${_client_header} ++ DEPENDS ${WaylandScanner_EXECUTABLE} ${_infile} ++ VERBATIM ++ ) ++ ++ add_custom_command(OUTPUT "${_code}" ++ COMMAND ${WaylandScanner_EXECUTABLE} code ${_infile} ${_code} ++ DEPENDS ${WaylandScanner_EXECUTABLE} ${_infile} ${_client_header} ++ VERBATIM ++ ) ++ ++ list(APPEND ${out_var} "${_client_header}" "${_code}") ++ set(${out_var} ${${out_var}} PARENT_SCOPE) ++endfunction() ++ ++ ++function(ecm_add_wayland_server_protocol out_var) ++ # Parse arguments ++ set(oneValueArgs PROTOCOL BASENAME) ++ cmake_parse_arguments(ARGS "" "${oneValueArgs}" "" ${ARGN}) ++ ++ if(ARGS_UNPARSED_ARGUMENTS) ++ message(FATAL_ERROR "Unknown keywords given to ecm_add_wayland_server_protocol(): \"${ARGS_UNPARSED_ARGUMENTS}\"") ++ endif() ++ ++ ecm_add_wayland_client_protocol(${out_var} ++ PROTOCOL ${ARGS_PROTOCOL} ++ BASENAME ${ARGS_BASENAME}) ++ ++ get_filename_component(_infile ${ARGS_PROTOCOL} ABSOLUTE) ++ set(_server_header "${CMAKE_CURRENT_BINARY_DIR}/wayland-${ARGS_BASENAME}-server-protocol.h") ++ set_property(SOURCE ${_server_header} PROPERTY SKIP_AUTOMOC ON) ++ set_source_files_properties(${_server_header} GENERATED) ++ ++ add_custom_command(OUTPUT "${_server_header}" ++ COMMAND ${WaylandScanner_EXECUTABLE} server-header ${_infile} ${_server_header} ++ DEPENDS ${WaylandScanner_EXECUTABLE} ${_infile} ++ VERBATIM ++ ) ++ ++ list(APPEND ${out_var} "${_server_header}") ++ set(${out_var} ${${out_var}} PARENT_SCOPE) ++endfunction() +diff --git a/cmake/extra-cmake-modules/find-modules/FindX11_XCB.cmake b/cmake/extra-cmake-modules/find-modules/FindX11_XCB.cmake +new file mode 100644 +index 0000000..8547175 +--- /dev/null ++++ b/cmake/extra-cmake-modules/find-modules/FindX11_XCB.cmake +@@ -0,0 +1,118 @@ ++#.rst: ++# FindX11_XCB ++# ----------- ++# ++# Try to find the X11 XCB compatibility library. ++# ++# This will define the following variables: ++# ++# ``X11_XCB_FOUND`` ++# True if (the requested version of) libX11-xcb is available ++# ``X11_XCB_VERSION`` ++# The version of libX11-xcb (this is not guaranteed to be set even when ++# X11_XCB_FOUND is true) ++# ``X11_XCB_LIBRARIES`` ++# This can be passed to target_link_libraries() instead of the ``EGL::EGL`` ++# target ++# ``X11_XCB_INCLUDE_DIR`` ++# This should be passed to target_include_directories() if the target is not ++# used for linking ++# ``X11_XCB_DEFINITIONS`` ++# This should be passed to target_compile_options() if the target is not ++# used for linking ++# ++# If ``X11_XCB_FOUND`` is TRUE, it will also define the following imported ++# target: ++# ++# ``X11::XCB`` ++# The X11 XCB compatibility library ++# ++# In general we recommend using the imported target, as it is easier to use. ++# Bear in mind, however, that if the target is in the link interface of an ++# exported library, it must be made available by the package config file. ++# ++# Since pre-1.0.0. ++ ++#============================================================================= ++# Copyright 2014 Alex Merry ++# Copyright 2011 Fredrik Höglund ++# Copyright 2008 Helio Chissini de Castro ++# Copyright 2007 Matthias Kretz ++# ++# Redistribution and use in source and binary forms, with or without ++# modification, are permitted provided that the following conditions ++# are met: ++# ++# 1. Redistributions of source code must retain the copyright ++# notice, this list of conditions and the following disclaimer. ++# 2. Redistributions in binary form must reproduce the copyright ++# notice, this list of conditions and the following disclaimer in the ++# documentation and/or other materials provided with the distribution. ++# 3. The name of the author may not be used to endorse or promote products ++# derived from this software without specific prior written permission. ++# ++# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR ++# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ++# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, ++# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT ++# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ++# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ++# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF ++# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++#============================================================================= ++ ++include(${CMAKE_CURRENT_LIST_DIR}/ECMFindModuleHelpersStub.cmake) ++ ++ecm_find_package_version_check(X11_XCB) ++ ++# use pkg-config to get the directories and then use these values ++# in the FIND_PATH() and FIND_LIBRARY() calls ++find_package(PkgConfig QUIET) ++pkg_check_modules(PKG_X11_XCB QUIET x11-xcb) ++ ++set(X11_XCB_DEFINITIONS ${PKG_X11_XCB_CFLAGS_OTHER}) ++set(X11_XCB_VERSION ${PKG_X11_XCB_VERSION}) ++ ++find_path(X11_XCB_INCLUDE_DIR ++ NAMES X11/Xlib-xcb.h ++ HINTS ${PKG_X11_XCB_INCLUDE_DIRS} ++) ++find_library(X11_XCB_LIBRARY ++ NAMES X11-xcb ++ HINTS ${PKG_X11_XCB_LIBRARY_DIRS} ++) ++ ++include(FindPackageHandleStandardArgs) ++find_package_handle_standard_args(X11_XCB ++ FOUND_VAR ++ X11_XCB_FOUND ++ REQUIRED_VARS ++ X11_XCB_LIBRARY ++ X11_XCB_INCLUDE_DIR ++ VERSION_VAR ++ X11_XCB_VERSION ++) ++ ++if(X11_XCB_FOUND AND NOT TARGET X11::XCB) ++ add_library(X11::XCB UNKNOWN IMPORTED) ++ set_target_properties(X11::XCB PROPERTIES ++ IMPORTED_LOCATION "${X11_XCB_LIBRARY}" ++ INTERFACE_COMPILE_OPTIONS "${X11_XCB_DEFINITIONS}" ++ INTERFACE_INCLUDE_DIRECTORIES "${X11_XCB_INCLUDE_DIR}" ++ ) ++endif() ++ ++mark_as_advanced(X11_XCB_INCLUDE_DIR X11_XCB_LIBRARY) ++ ++# compatibility variables ++set(X11_XCB_LIBRARIES ${X11_XCB_LIBRARY}) ++set(X11_XCB_INCLUDE_DIRS ${X11_XCB_INCLUDE_DIR}) ++set(X11_XCB_VERSION_STRING ${X11_XCB_VERSION}) ++ ++include(FeatureSummary) ++set_package_properties(X11_XCB PROPERTIES ++ URL "http://xorg.freedesktop.org/" ++ DESCRIPTION "A compatibility library for code that translates Xlib API calls into XCB calls" ++) +diff --git a/cmake/extra-cmake-modules/find-modules/FindXCB.cmake b/cmake/extra-cmake-modules/find-modules/FindXCB.cmake +new file mode 100644 +index 0000000..d530d2d +--- /dev/null ++++ b/cmake/extra-cmake-modules/find-modules/FindXCB.cmake +@@ -0,0 +1,201 @@ ++#.rst: ++# FindXCB ++# ------- ++# ++# Try to find XCB. ++# ++# This is a component-based find module, which makes use of the COMPONENTS and ++# OPTIONAL_COMPONENTS arguments to find_module. The following components are ++# available:: ++# ++# XCB ++# ATOM AUX COMPOSITE CURSOR DAMAGE ++# DPMS DRI2 DRI3 EVENT EWMH ++# GLX ICCCM IMAGE KEYSYMS PRESENT ++# RANDR RECORD RENDER RENDERUTIL RES ++# SCREENSAVER SHAPE SHM SYNC UTIL ++# XEVIE XF86DRI XFIXES XINERAMA XINPUT ++# XKB XPRINT XTEST XV XVMC ++# ++# If no components are specified, this module will act as though all components ++# except XINPUT (which is considered unstable) were passed to ++# OPTIONAL_COMPONENTS. ++# ++# This module will define the following variables, independently of the ++# components searched for or found: ++# ++# ``XCB_FOUND`` ++# True if (the requestion version of) xcb is available ++# ``XCB_VERSION`` ++# Found xcb version ++# ``XCB_TARGETS`` ++# A list of all targets imported by this module (note that there may be more ++# than the components that were requested) ++# ``XCB_LIBRARIES`` ++# This can be passed to target_link_libraries() instead of the imported ++# targets ++# ``XCB_INCLUDE_DIRS`` ++# This should be passed to target_include_directories() if the targets are ++# not used for linking ++# ``XCB_DEFINITIONS`` ++# This should be passed to target_compile_options() if the targets are not ++# used for linking ++# ++# For each searched-for components, ``XCB__FOUND`` will be set to ++# true if the corresponding xcb library was found, and false otherwise. If ++# ``XCB__FOUND`` is true, the imported target ``XCB::`` ++# will be defined. This module will also attempt to determine ++# ``XCB_*_VERSION`` variables for each imported target, although ++# ``XCB_VERSION`` should normally be sufficient. ++# ++# In general we recommend using the imported targets, as they are easier to use ++# and provide more control. Bear in mind, however, that if any target is in the ++# link interface of an exported library, it must be made available by the ++# package config file. ++# ++# Since pre-1.0.0. ++ ++#============================================================================= ++# Copyright 2011 Fredrik Höglund ++# Copyright 2013 Martin Gräßlin ++# Copyright 2014-2015 Alex Merry ++# ++# Redistribution and use in source and binary forms, with or without ++# modification, are permitted provided that the following conditions ++# are met: ++# ++# 1. Redistributions of source code must retain the copyright ++# notice, this list of conditions and the following disclaimer. ++# 2. Redistributions in binary form must reproduce the copyright ++# notice, this list of conditions and the following disclaimer in the ++# documentation and/or other materials provided with the distribution. ++# 3. The name of the author may not be used to endorse or promote products ++# derived from this software without specific prior written permission. ++# ++# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR ++# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ++# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, ++# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT ++# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ++# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ++# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF ++# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++#============================================================================= ++ ++include(${CMAKE_CURRENT_LIST_DIR}/ECMFindModuleHelpersStub.cmake) ++ ++ecm_find_package_version_check(XCB) ++ ++# Note that this list needs to be ordered such that any component ++# appears after its dependencies ++set(XCB_known_components ++ XCB ++ RENDER ++ SHAPE ++ XFIXES ++ SHM ++ ATOM ++ AUX ++ COMPOSITE ++ CURSOR ++ DAMAGE ++ DPMS ++ DRI2 ++ DRI3 ++ EVENT ++ EWMH ++ GLX ++ ICCCM ++ IMAGE ++ KEYSYMS ++ PRESENT ++ RANDR ++ RECORD ++ RENDERUTIL ++ RES ++ SCREENSAVER ++ SYNC ++ UTIL ++ XEVIE ++ XF86DRI ++ XINERAMA ++ XINPUT ++ XKB ++ XPRINT ++ XTEST ++ XV ++ XVMC ++) ++ ++# XINPUT is unstable; do not include it by default ++set(XCB_default_components ${XCB_known_components}) ++list(REMOVE_ITEM XCB_default_components "XINPUT") ++ ++# default component info: xcb components have fairly predictable ++# header files, library names and pkg-config names ++foreach(_comp ${XCB_known_components}) ++ string(TOLOWER "${_comp}" _lc_comp) ++ set(XCB_${_comp}_component_deps XCB) ++ set(XCB_${_comp}_pkg_config "xcb-${_lc_comp}") ++ set(XCB_${_comp}_lib "xcb-${_lc_comp}") ++ set(XCB_${_comp}_header "xcb/${_lc_comp}.h") ++endforeach() ++# exceptions ++set(XCB_XCB_component_deps) ++set(XCB_COMPOSITE_component_deps XCB XFIXES) ++set(XCB_DAMAGE_component_deps XCB XFIXES) ++set(XCB_IMAGE_component_deps XCB SHM) ++set(XCB_RENDERUTIL_component_deps XCB RENDER) ++set(XCB_XFIXES_component_deps XCB RENDER SHAPE) ++set(XCB_XVMC_component_deps XCB XV) ++set(XCB_XV_component_deps XCB SHM) ++set(XCB_XCB_pkg_config "xcb") ++set(XCB_XCB_lib "xcb") ++set(XCB_ATOM_header "xcb/xcb_atom.h") ++set(XCB_ATOM_lib "xcb-util") ++set(XCB_AUX_header "xcb/xcb_aux.h") ++set(XCB_AUX_lib "xcb-util") ++set(XCB_CURSOR_header "xcb/xcb_cursor.h") ++set(XCB_EVENT_header "xcb/xcb_event.h") ++set(XCB_EVENT_lib "xcb-util") ++set(XCB_EWMH_header "xcb/xcb_ewmh.h") ++set(XCB_ICCCM_header "xcb/xcb_icccm.h") ++set(XCB_IMAGE_header "xcb/xcb_image.h") ++set(XCB_KEYSYMS_header "xcb/xcb_keysyms.h") ++set(XCB_PIXEL_header "xcb/xcb_pixel.h") ++set(XCB_RENDERUTIL_header "xcb/xcb_renderutil.h") ++set(XCB_RENDERUTIL_lib "xcb-render-util") ++set(XCB_UTIL_header "xcb/xcb_util.h") ++ ++ecm_find_package_parse_components(XCB ++ RESULT_VAR XCB_components ++ KNOWN_COMPONENTS ${XCB_known_components} ++ DEFAULT_COMPONENTS ${XCB_default_components} ++) ++ ++list(FIND XCB_components "XINPUT" _XCB_XINPUT_index) ++if (NOT _XCB_XINPUT_index EQUAL -1) ++ message(AUTHOR_WARNING "XINPUT from XCB was requested: this is EXPERIMENTAL and is likely to unavailable on many systems!") ++endif() ++ ++ecm_find_package_handle_library_components(XCB ++ COMPONENTS ${XCB_components} ++) ++ ++find_package_handle_standard_args(XCB ++ FOUND_VAR ++ XCB_FOUND ++ REQUIRED_VARS ++ XCB_LIBRARIES ++ VERSION_VAR ++ XCB_VERSION ++ HANDLE_COMPONENTS ++) ++ ++include(FeatureSummary) ++set_package_properties(XCB PROPERTIES ++ URL "http://xcb.freedesktop.org" ++ DESCRIPTION "X protocol C-language Binding" ++) +diff --git a/cmake/extra-cmake-modules/modules/ECMEnableSanitizers.cmake b/cmake/extra-cmake-modules/modules/ECMEnableSanitizers.cmake +new file mode 100644 +index 0000000..dcdb862 +--- /dev/null ++++ b/cmake/extra-cmake-modules/modules/ECMEnableSanitizers.cmake +@@ -0,0 +1,172 @@ ++# SPDX-FileCopyrightText: 2014 Mathieu Tarral ++# ++# SPDX-License-Identifier: BSD-3-Clause ++ ++#[=======================================================================[.rst: ++ECMEnableSanitizers ++------------------- ++ ++Enable compiler sanitizer flags. ++ ++The following sanitizers are supported: ++ ++- Address Sanitizer ++- Memory Sanitizer ++- Thread Sanitizer ++- Leak Sanitizer ++- Undefined Behaviour Sanitizer ++ ++All of them are implemented in Clang, depending on your version, and ++there is an work in progress in GCC, where some of them are currently ++implemented. ++ ++This module will check your current compiler version to see if it ++supports the sanitizers that you want to enable ++ ++Usage ++===== ++ ++Simply add:: ++ ++ include(ECMEnableSanitizers) ++ ++to your ``CMakeLists.txt``. Note that this module is included in ++KDECompilerSettings, so projects using that module do not need to also ++include this one. ++ ++The sanitizers are not enabled by default. Instead, you must set ++``ECM_ENABLE_SANITIZERS`` (either in your ``CMakeLists.txt`` or on the ++command line) to a semicolon-separated list of sanitizers you wish to enable. ++The options are: ++ ++- address ++- memory ++- thread ++- leak ++- undefined ++- fuzzer-no-link ++- fuzzer ++ ++The sanitizers "address", "memory" and "thread" are mutually exclusive. You ++cannot enable two of them in the same build. ++ ++"leak" requires the "address" sanitizer. ++ ++.. note:: ++ ++ To reduce the overhead induced by the instrumentation of the sanitizers, it ++ is advised to enable compiler optimizations (``-O1`` or higher). ++ ++Example ++======= ++ ++This is an example of usage:: ++ ++ mkdir build ++ cd build ++ cmake -DECM_ENABLE_SANITIZERS='address;leak;undefined' .. ++ ++.. note:: ++ ++ Most of the sanitizers will require Clang. To enable it, use:: ++ ++ -DCMAKE_CXX_COMPILER=clang++ ++ ++Since 1.3.0. ++#]=======================================================================] ++ ++# MACRO check_compiler_version ++#----------------------------- ++macro (check_compiler_version gcc_required_version clang_required_version msvc_required_version) ++ if ( ++ ( ++ CMAKE_CXX_COMPILER_ID MATCHES "GNU" ++ AND ++ CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${gcc_required_version} ++ ) ++ OR ++ ( ++ CMAKE_CXX_COMPILER_ID MATCHES "Clang" ++ AND ++ CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${clang_required_version} ++ ) ++ OR ++ ( ++ CMAKE_CXX_COMPILER_ID MATCHES "MSVC" ++ AND ++ CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${msvc_required_version} ++ ) ++ ) ++ # error ! ++ message(FATAL_ERROR "You ask to enable the sanitizer ${CUR_SANITIZER}, ++ but your compiler ${CMAKE_CXX_COMPILER_ID} version ${CMAKE_CXX_COMPILER_VERSION} ++ does not support it ! ++ You should use at least GCC ${gcc_required_version}, Clang ${clang_required_version} ++ or MSVC ${msvc_required_version} ++ (99.99 means not implemented yet)") ++ endif () ++endmacro () ++ ++# MACRO check_compiler_support ++#------------------------------ ++macro (enable_sanitizer_flags sanitize_option) ++ if (${sanitize_option} MATCHES "address") ++ check_compiler_version("4.8" "3.1" "19.28") ++ if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") ++ set(XSAN_COMPILE_FLAGS "-fsanitize=address") ++ else() ++ set(XSAN_COMPILE_FLAGS "-fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls") ++ set(XSAN_LINKER_FLAGS "asan") ++ endif() ++ elseif (${sanitize_option} MATCHES "thread") ++ check_compiler_version("4.8" "3.1" "99.99") ++ set(XSAN_COMPILE_FLAGS "-fsanitize=thread") ++ set(XSAN_LINKER_FLAGS "tsan") ++ elseif (${sanitize_option} MATCHES "memory") ++ check_compiler_version("99.99" "3.1" "99.99") ++ set(XSAN_COMPILE_FLAGS "-fsanitize=memory") ++ elseif (${sanitize_option} MATCHES "leak") ++ check_compiler_version("4.9" "3.4" "99.99") ++ set(XSAN_COMPILE_FLAGS "-fsanitize=leak") ++ set(XSAN_LINKER_FLAGS "lsan") ++ elseif (${sanitize_option} MATCHES "undefined") ++ check_compiler_version("4.9" "3.1" "99.99") ++ set(XSAN_COMPILE_FLAGS "-fsanitize=undefined -fsanitize=float-divide-by-zero -fno-omit-frame-pointer -fno-optimize-sibling-calls") ++ elseif (${sanitize_option} MATCHES "fuzzer-no-link") ++ check_compiler_version("99.99" "6.0" "99.99") ++ set(XSAN_COMPILE_FLAGS "-fsanitize=fuzzer-no-link") ++ set(XSAN_LINKER_FLAGS "-fsanitize=fuzzer-no-link") ++ elseif (${sanitize_option} MATCHES "fuzzer") ++ check_compiler_version("99.99" "6.0" "99.99") ++ set(XSAN_COMPILE_FLAGS "-fsanitize=fuzzer") ++ else () ++ message(FATAL_ERROR "Compiler sanitizer option \"${sanitize_option}\" not supported.") ++ endif () ++endmacro () ++ ++if (ECM_ENABLE_SANITIZERS) ++ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "MSVC") ++ # for each element of the ECM_ENABLE_SANITIZERS list ++ foreach ( CUR_SANITIZER ${ECM_ENABLE_SANITIZERS} ) ++ # lowercase filter ++ string(TOLOWER ${CUR_SANITIZER} CUR_SANITIZER) ++ # check option and enable appropriate flags ++ enable_sanitizer_flags ( ${CUR_SANITIZER} ) ++ # TODO: GCC will not link pthread library if enabled ASan ++ if(CMAKE_C_COMPILER_ID MATCHES "Clang") ++ set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${XSAN_COMPILE_FLAGS}" ) ++ endif() ++ set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${XSAN_COMPILE_FLAGS}" ) ++ if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") ++ link_libraries(${XSAN_LINKER_FLAGS}) ++ endif() ++ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") ++ string(REPLACE "-Wl,--no-undefined" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") ++ string(REPLACE "-Wl,--no-undefined" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") ++ endif () ++ endforeach() ++ else() ++ message(STATUS "Tried to enable sanitizers (-DECM_ENABLE_SANITIZERS=${ECM_ENABLE_SANITIZERS}), \ ++but compiler (${CMAKE_CXX_COMPILER_ID}) does not have sanitizer support") ++ endif() ++endif() +diff --git a/cmake/extra-cmake-modules/modules/ECMFindModuleHelpers.cmake b/cmake/extra-cmake-modules/modules/ECMFindModuleHelpers.cmake +new file mode 100644 +index 0000000..c1df19d +--- /dev/null ++++ b/cmake/extra-cmake-modules/modules/ECMFindModuleHelpers.cmake +@@ -0,0 +1,302 @@ ++#.rst: ++# ECMFindModuleHelpers ++# -------------------- ++# ++# Helper macros for find modules: ecm_find_package_version_check(), ++# ecm_find_package_parse_components() and ++# ecm_find_package_handle_library_components(). ++# ++# :: ++# ++# ecm_find_package_version_check() ++# ++# Prints warnings if the CMake version or the project's required CMake version ++# is older than that required by extra-cmake-modules. ++# ++# :: ++# ++# ecm_find_package_parse_components( ++# RESULT_VAR ++# KNOWN_COMPONENTS [ [...]] ++# [SKIP_DEPENDENCY_HANDLING]) ++# ++# This macro will populate with a list of components found in ++# _FIND_COMPONENTS, after checking that all those components are in the ++# list of KNOWN_COMPONENTS; if there are any unknown components, it will print ++# an error or warning (depending on the value of _FIND_REQUIRED) and call ++# return(). ++# ++# The order of components in is guaranteed to match the order they ++# are listed in the KNOWN_COMPONENTS argument. ++# ++# If SKIP_DEPENDENCY_HANDLING is not set, for each component the variable ++# __component_deps will be checked for dependent components. ++# If is listed in _FIND_COMPONENTS, then all its (transitive) ++# dependencies will also be added to . ++# ++# :: ++# ++# ecm_find_package_handle_library_components( ++# COMPONENTS [ [...]] ++# [SKIP_DEPENDENCY_HANDLING]) ++# [SKIP_PKG_CONFIG]) ++# ++# Creates an imported library target for each component. The operation of this ++# macro depends on the presence of a number of CMake variables. ++# ++# The __lib variable should contain the name of this library, ++# and __header variable should contain the name of a header ++# file associated with it (whatever relative path is normally passed to ++# '#include'). __header_subdir variable can be used to specify ++# which subdirectory of the include path the headers will be found in. ++# ecm_find_package_components() will then search for the library ++# and include directory (creating appropriate cache variables) and create an ++# imported library target named ::. ++# ++# Additional variables can be used to provide additional information: ++# ++# If SKIP_PKG_CONFIG, the __pkg_config variable is set, and ++# pkg-config is found, the pkg-config module given by ++# __pkg_config will be searched for and used to help locate the ++# library and header file. It will also be used to set ++# __VERSION. ++# ++# Note that if version information is found via pkg-config, ++# __FIND_VERSION can be set to require a particular version ++# for each component. ++# ++# If SKIP_DEPENDENCY_HANDLING is not set, the INTERFACE_LINK_LIBRARIES property ++# of the imported target for will be set to contain the imported ++# targets for the components listed in __component_deps. ++# _FOUND will also be set to false if any of the compoments in ++# __component_deps are not found. This requires the components ++# in __component_deps to be listed before in the ++# COMPONENTS argument. ++# ++# The following variables will be set: ++# ++# ``_TARGETS`` ++# the imported targets ++# ``_LIBRARIES`` ++# the found libraries ++# ``_INCLUDE_DIRS`` ++# the combined required include directories for the components ++# ``_DEFINITIONS`` ++# the "other" CFLAGS provided by pkg-config, if any ++# ``_VERSION`` ++# the value of ``__VERSION`` for the first component that ++# has this variable set (note that components are searched for in the order ++# they are passed to the macro), although if it is already set, it will not ++# be altered ++# ++# Note that these variables are never cleared, so if ++# ecm_find_package_handle_library_components() is called multiple times with ++# different components (typically because of multiple find_package() calls) then ++# ``_TARGETS``, for example, will contain all the targets found in any ++# call (although no duplicates). ++# ++# Since pre-1.0.0. ++ ++#============================================================================= ++# Copyright 2014 Alex Merry ++# ++# Redistribution and use in source and binary forms, with or without ++# modification, are permitted provided that the following conditions ++# are met: ++# ++# 1. Redistributions of source code must retain the copyright ++# notice, this list of conditions and the following disclaimer. ++# 2. Redistributions in binary form must reproduce the copyright ++# notice, this list of conditions and the following disclaimer in the ++# documentation and/or other materials provided with the distribution. ++# 3. The name of the author may not be used to endorse or promote products ++# derived from this software without specific prior written permission. ++# ++# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR ++# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ++# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, ++# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT ++# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ++# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ++# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF ++# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ ++include(CMakeParseArguments) ++ ++macro(ecm_find_package_version_check module_name) ++ if(CMAKE_VERSION VERSION_LESS 2.8.12) ++ message(FATAL_ERROR "CMake 2.8.12 is required by Find${module_name}.cmake") ++ endif() ++ if(CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 2.8.12) ++ message(AUTHOR_WARNING "Your project should require at least CMake 2.8.12 to use Find${module_name}.cmake") ++ endif() ++endmacro() ++ ++macro(ecm_find_package_parse_components module_name) ++ set(ecm_fppc_options SKIP_DEPENDENCY_HANDLING) ++ set(ecm_fppc_oneValueArgs RESULT_VAR) ++ set(ecm_fppc_multiValueArgs KNOWN_COMPONENTS DEFAULT_COMPONENTS) ++ cmake_parse_arguments(ECM_FPPC "${ecm_fppc_options}" "${ecm_fppc_oneValueArgs}" "${ecm_fppc_multiValueArgs}" ${ARGN}) ++ ++ if(ECM_FPPC_UNPARSED_ARGUMENTS) ++ message(FATAL_ERROR "Unexpected arguments to ecm_find_package_parse_components: ${ECM_FPPC_UNPARSED_ARGUMENTS}") ++ endif() ++ if(NOT ECM_FPPC_RESULT_VAR) ++ message(FATAL_ERROR "Missing RESULT_VAR argument to ecm_find_package_parse_components") ++ endif() ++ if(NOT ECM_FPPC_KNOWN_COMPONENTS) ++ message(FATAL_ERROR "Missing KNOWN_COMPONENTS argument to ecm_find_package_parse_components") ++ endif() ++ if(NOT ECM_FPPC_DEFAULT_COMPONENTS) ++ set(ECM_FPPC_DEFAULT_COMPONENTS ${ECM_FPPC_KNOWN_COMPONENTS}) ++ endif() ++ ++ if(${module_name}_FIND_COMPONENTS) ++ set(ecm_fppc_requestedComps ${${module_name}_FIND_COMPONENTS}) ++ ++ if(NOT ECM_FPPC_SKIP_DEPENDENCY_HANDLING) ++ # Make sure deps are included ++ foreach(ecm_fppc_comp ${ecm_fppc_requestedComps}) ++ foreach(ecm_fppc_dep_comp ${${module_name}_${ecm_fppc_comp}_component_deps}) ++ list(FIND ecm_fppc_requestedComps "${ecm_fppc_dep_comp}" ecm_fppc_index) ++ if("${ecm_fppc_index}" STREQUAL "-1") ++ if(NOT ${module_name}_FIND_QUIETLY) ++ message(STATUS "${module_name}: ${ecm_fppc_comp} requires ${${module_name}_${ecm_fppc_comp}_component_deps}") ++ endif() ++ list(APPEND ecm_fppc_requestedComps "${ecm_fppc_dep_comp}") ++ endif() ++ endforeach() ++ endforeach() ++ else() ++ message(STATUS "Skipping dependency handling for ${module_name}") ++ endif() ++ list(REMOVE_DUPLICATES ecm_fppc_requestedComps) ++ ++ # This makes sure components are listed in the same order as ++ # KNOWN_COMPONENTS (potentially important for inter-dependencies) ++ set(${ECM_FPPC_RESULT_VAR}) ++ foreach(ecm_fppc_comp ${ECM_FPPC_KNOWN_COMPONENTS}) ++ list(FIND ecm_fppc_requestedComps "${ecm_fppc_comp}" ecm_fppc_index) ++ if(NOT "${ecm_fppc_index}" STREQUAL "-1") ++ list(APPEND ${ECM_FPPC_RESULT_VAR} "${ecm_fppc_comp}") ++ list(REMOVE_AT ecm_fppc_requestedComps ${ecm_fppc_index}) ++ endif() ++ endforeach() ++ # if there are any left, they are unknown components ++ if(ecm_fppc_requestedComps) ++ set(ecm_fppc_msgType STATUS) ++ if(${module_name}_FIND_REQUIRED) ++ set(ecm_fppc_msgType FATAL_ERROR) ++ endif() ++ if(NOT ${module_name}_FIND_QUIETLY) ++ message(${ecm_fppc_msgType} "${module_name}: requested unknown components ${ecm_fppc_requestedComps}") ++ endif() ++ return() ++ endif() ++ else() ++ set(${ECM_FPPC_RESULT_VAR} ${ECM_FPPC_DEFAULT_COMPONENTS}) ++ endif() ++endmacro() ++ ++macro(ecm_find_package_handle_library_components module_name) ++ set(ecm_fpwc_options SKIP_PKG_CONFIG SKIP_DEPENDENCY_HANDLING) ++ set(ecm_fpwc_oneValueArgs) ++ set(ecm_fpwc_multiValueArgs COMPONENTS) ++ cmake_parse_arguments(ECM_FPWC "${ecm_fpwc_options}" "${ecm_fpwc_oneValueArgs}" "${ecm_fpwc_multiValueArgs}" ${ARGN}) ++ ++ if(ECM_FPWC_UNPARSED_ARGUMENTS) ++ message(FATAL_ERROR "Unexpected arguments to ecm_find_package_handle_components: ${ECM_FPWC_UNPARSED_ARGUMENTS}") ++ endif() ++ if(NOT ECM_FPWC_COMPONENTS) ++ message(FATAL_ERROR "Missing COMPONENTS argument to ecm_find_package_handle_components") ++ endif() ++ ++ include(FindPackageHandleStandardArgs) ++ find_package(PkgConfig QUIET) ++ foreach(ecm_fpwc_comp ${ECM_FPWC_COMPONENTS}) ++ set(ecm_fpwc_dep_vars) ++ set(ecm_fpwc_dep_targets) ++ if(NOT SKIP_DEPENDENCY_HANDLING) ++ foreach(ecm_fpwc_dep ${${module_name}_${ecm_fpwc_comp}_component_deps}) ++ list(APPEND ecm_fpwc_dep_vars "${module_name}_${ecm_fpwc_dep}_FOUND") ++ list(APPEND ecm_fpwc_dep_targets "${module_name}::${ecm_fpwc_dep}") ++ endforeach() ++ endif() ++ ++ if(NOT ECM_FPWC_SKIP_PKG_CONFIG AND ${module_name}_${ecm_fpwc_comp}_pkg_config) ++ pkg_check_modules(PKG_${module_name}_${ecm_fpwc_comp} QUIET ++ ${${module_name}_${ecm_fpwc_comp}_pkg_config}) ++ endif() ++ ++ find_path(${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR ++ NAMES ${${module_name}_${ecm_fpwc_comp}_header} ++ HINTS ${PKG_${module_name}_${ecm_fpwc_comp}_INCLUDE_DIRS} ++ PATH_SUFFIXES ${${module_name}_${ecm_fpwc_comp}_header_subdir} ++ ) ++ find_library(${module_name}_${ecm_fpwc_comp}_LIBRARY ++ NAMES ${${module_name}_${ecm_fpwc_comp}_lib} ++ HINTS ${PKG_${module_name}_${ecm_fpwc_comp}_LIBRARY_DIRS} ++ ) ++ ++ set(${module_name}_${ecm_fpwc_comp}_VERSION "${PKG_${module_name}_${ecm_fpwc_comp}_VERSION}") ++ if(NOT ${module_name}_VERSION) ++ set(${module_name}_VERSION ${${module_name}_${ecm_fpwc_comp}_VERSION}) ++ endif() ++ ++ set(_name_mismatched_arg) ++ if(NOT CMAKE_VERSION VERSION_LESS 3.17) ++ set(_name_mismatched_arg NAME_MISMATCHED) ++ endif() ++ find_package_handle_standard_args(${module_name}_${ecm_fpwc_comp} ++ FOUND_VAR ++ ${module_name}_${ecm_fpwc_comp}_FOUND ++ REQUIRED_VARS ++ ${module_name}_${ecm_fpwc_comp}_LIBRARY ++ ${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR ++ ${ecm_fpwc_dep_vars} ++ VERSION_VAR ++ ${module_name}_${ecm_fpwc_comp}_VERSION ++ ${_name_mismatched_arg} ++ ) ++ ++ mark_as_advanced( ++ ${module_name}_${ecm_fpwc_comp}_LIBRARY ++ ${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR ++ ) ++ ++ if(${module_name}_${ecm_fpwc_comp}_FOUND) ++ list(APPEND ${module_name}_LIBRARIES ++ "${${module_name}_${ecm_fpwc_comp}_LIBRARY}") ++ list(APPEND ${module_name}_INCLUDE_DIRS ++ "${${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR}") ++ set(${module_name}_DEFINITIONS ++ ${${module_name}_DEFINITIONS} ++ ${PKG_${module_name}_${ecm_fpwc_comp}_DEFINITIONS}) ++ if(NOT TARGET ${module_name}::${ecm_fpwc_comp}) ++ add_library(${module_name}::${ecm_fpwc_comp} UNKNOWN IMPORTED) ++ set_target_properties(${module_name}::${ecm_fpwc_comp} PROPERTIES ++ IMPORTED_LOCATION "${${module_name}_${ecm_fpwc_comp}_LIBRARY}" ++ INTERFACE_COMPILE_OPTIONS "${PKG_${module_name}_${ecm_fpwc_comp}_DEFINITIONS}" ++ INTERFACE_INCLUDE_DIRECTORIES "${${module_name}_${ecm_fpwc_comp}_INCLUDE_DIR}" ++ INTERFACE_LINK_LIBRARIES "${ecm_fpwc_dep_targets}" ++ ) ++ endif() ++ list(APPEND ${module_name}_TARGETS ++ "${module_name}::${ecm_fpwc_comp}") ++ endif() ++ endforeach() ++ if(${module_name}_LIBRARIES) ++ list(REMOVE_DUPLICATES ${module_name}_LIBRARIES) ++ endif() ++ if(${module_name}_INCLUDE_DIRS) ++ list(REMOVE_DUPLICATES ${module_name}_INCLUDE_DIRS) ++ endif() ++ if(${module_name}_DEFINITIONS) ++ list(REMOVE_DUPLICATES ${module_name}_DEFINITIONS) ++ endif() ++ if(${module_name}_TARGETS) ++ list(REMOVE_DUPLICATES ${module_name}_TARGETS) ++ endif() ++endmacro() +diff --git a/cmake/extra-cmake-modules/qt_attribution.json b/cmake/extra-cmake-modules/qt_attribution.json +new file mode 100644 +index 0000000..941fb9e +--- /dev/null ++++ b/cmake/extra-cmake-modules/qt_attribution.json +@@ -0,0 +1,15 @@ ++{ ++ "Id": "extra-cmake-modules", ++ "Name": "extra-cmake-modules", ++ "QDocModule": "qtcore", ++ "QtUsage": "Used as part of the build system.", ++ ++ "Description": "Additional CMake modules.", ++ "Homepage": "https://api.kde.org/ecm/", ++ "Version": "5.84.0", ++ ++ "License": "BSD-3-Clause", ++ "LicenseId": "BSD 3-Clause License", ++ "LicenseFile": "COPYING-CMAKE-SCRIPTS", ++ "Copyright": "Copyright © 2011-2018 The KDE community" ++} diff --git a/x86_64/extra/tevent/PKGBUILD b/x86_64/extra/tevent/PKGBUILD new file mode 100644 index 0000000..45d08bc --- /dev/null +++ b/x86_64/extra/tevent/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=tevent +pkgver=0.11.0 +pkgrel=1 +arch=(x86_64) +depends=(talloc python3) +makedepends=(cmocka) +source=(https://samba.org/ftp/tevent/${pkgname}-${pkgver}.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --bundled-libraries=NONE \ + --builtin-libraries=replace +} + +build() { + cd $pkgname-$pkgver + + make -j4 +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/texlive/PKGBUILD b/x86_64/extra/texlive/PKGBUILD new file mode 100644 index 0000000..8271ca8 --- /dev/null +++ b/x86_64/extra/texlive/PKGBUILD @@ -0,0 +1,47 @@ +pkgname=texlive +pkgver=2022.05.07 +pkgrel=1 +arch=(x86_64) +depends=(gcc) +makedepends=('git' 'cairo' 'pixman' 'libpng' 'libjpeg' 'freetype2' 'icu' 'harfbuzz' 'gmp' 'mpfr' 'perl') +commitid=c0d229e75885d8e30eb22c39aa8812651b14ccf6 # freetype 2.12.1 (trial) +source=(git+https://github.com/Tex-Live/texlive-source.git#commit=$commitid) + +prepare() { + # Make build dir where configure will be runned in + mkdir -p build + cd build + + echo "[ * ]: Running configure" + + ../$pkgname-source/configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --disable-native-texlive-build \ + --with-banner-add="[ DRUNK LINUX ]" \ + --enable-shared \ + --with-system-zlib \ + --with-system-pnglib \ + --with-system-ncurses \ + --with-system-freetype2 \ + --with-system-pixman \ + --with-system-cairo \ + --with-system-harfbuzz \ + --with-system-icu \ + --with-system-gmp \ + --with-system-mpfr +} + +build() { + cd build + + echo "[ * ]: Starting make..." + make +} + +package() { + cd build + + echo "[ * ]: Starting destdir installation" + make DESTDIR=$pkgdit install +} diff --git a/x86_64/extra/tg_owt/101.patch b/x86_64/extra/tg_owt/101.patch new file mode 100644 index 0000000..9dee9cf --- /dev/null +++ b/x86_64/extra/tg_owt/101.patch @@ -0,0 +1,21 @@ +From 86d2bcd7afb8706663d29e30f65863de5a626142 Mon Sep 17 00:00:00 2001 +From: Xiretza +Date: Sun, 15 May 2022 12:47:41 +0200 +Subject: [PATCH] fix(h265_pps_parser): fix missing cstdint include + +--- + src/common_video/h265/h265_pps_parser.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/common_video/h265/h265_pps_parser.h b/src/common_video/h265/h265_pps_parser.h +index 28c95ea9..c180b1b9 100644 +--- a/src/common_video/h265/h265_pps_parser.h ++++ b/src/common_video/h265/h265_pps_parser.h +@@ -12,6 +12,7 @@ + #define COMMON_VIDEO_H265_PPS_PARSER_H_ + + #include "absl/types/optional.h" ++#include + + namespace rtc { + class BitBuffer; diff --git a/x86_64/extra/tg_owt/PKGBUILD b/x86_64/extra/tg_owt/PKGBUILD new file mode 100644 index 0000000..d3cc3b7 --- /dev/null +++ b/x86_64/extra/tg_owt/PKGBUILD @@ -0,0 +1,47 @@ +pkgname=tg_owt +pkgver=2022.05.08 +pkgrel=2 +pkgdesc='WebRTC library' +arch=(x86_64) +depends=(libdrm) +commitid=(a5fbc9123e056e611e69acf0ceb4252ddd838adb) +depends=('unzip' 'protobuf' 'libxrandr' 'libxcomposite' 'openssl' 'glibc' + 'ffmpeg' 'libva' 'opus' 'yasm' 'libjpeg' 'pipewire' 'libxtst' 'abseil-cpp' 'libepoxy') +makedepends=('git' 'ninja' 'cmake') +source=("git+https://github.com/desktop-app/tg_owt.git#commit=${commitid}" + "git+https://chromium.googlesource.com/webm/libvpx.git" + "git+https://chromium.googlesource.com/libyuv/libyuv.git" + https://patch-diff.githubusercontent.com/raw/desktop-app/tg_owt/pull/101.patch) + +prepare() { + cd $pkgname + + git submodule init + + git config submodule.src/third_party/libvpx/source/libvpx.url $srcdir/libvpx + git config submodule.src/third_party/libyuv.url $srcdir/libyuv + git config submodule.src/third_party/pipewire.url $srcdir/pipewire + + git submodule sync + git submodule update + + patch -Np1 -i "$srcdir"/101.patch +} + +build() { + cd $pkgname + + cmake \ + -B build -G Ninja \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_SHARED_LIBS=ON + + ninja -C build +} + +package() { + cd $pkgname + + DESTDIR=${pkgdir} ninja -C build install +} diff --git a/x86_64/extra/tinyxml/PKGBUILD b/x86_64/extra/tinyxml/PKGBUILD new file mode 100644 index 0000000..4a52c10 --- /dev/null +++ b/x86_64/extra/tinyxml/PKGBUILD @@ -0,0 +1,45 @@ +pkgname=tinyxml +pkgver=2.6.2 +pkgrel=1 +arch=(x86_64) +makedepends=(setconf) +source=("https://downloads.sourceforge.net/$pkgname/${pkgname}_${pkgver//./_}.tar.gz" + entity.patch + $pkgname-2.5.3-stl.patch + $pkgname.pc) + +prepare() { + cd $pkgname + + # Fix entity encoding + patch -p0 -i "$srcdir/entity.patch" + + # Make TINYXML_USE_STL permanently defined in tinyxml.h + patch -p1 -i "$srcdir/$pkgname-2.5.3-stl.patch" + + # Fix Makefile + setconf Makefile TINYXML_USE_STL YES + setconf Makefile RELEASE_CFLAGS "$CXXFLAGS -fPIC" +} + +build() { + cd $pkgname + + make + + g++ -fPIC $CXXFLAGS $LDFLAGS -shared -o "lib$pkgname.so.0.$pkgver" \ + -Wl,-soname,"lib$pkgname.so.0" $(ls *.o | grep -v xmltest) +} + +package() { + cd $pkgname + + install -d -m 0755 "$pkgdir"/usr/{lib,include} + install -m 0755 "lib$pkgname.so.0.$pkgver" "$pkgdir"/usr/lib/ + install -m 0644 $pkgname.h tinystr.h "$pkgdir"/usr/include + install -Dm644 "$srcdir/$pkgname.pc" "$pkgdir/usr/lib/pkgconfig/$pkgname.pc" + + cd "$pkgdir/usr/lib" + ln -s "lib${pkgname}.so.0.$pkgver" lib$pkgname.so.0 + ln -s "lib${pkgname}.so.0.$pkgver" lib$pkgname.so +} diff --git a/x86_64/extra/tinyxml/entity.patch b/x86_64/extra/tinyxml/entity.patch new file mode 100644 index 0000000..66d89a6 --- /dev/null +++ b/x86_64/extra/tinyxml/entity.patch @@ -0,0 +1,64 @@ +? entity.patch +Index: tinyxml.cpp +=================================================================== +RCS file: /cvsroot/tinyxml/tinyxml/tinyxml.cpp,v +retrieving revision 1.105 +diff -u -r1.105 tinyxml.cpp +--- tinyxml.cpp 5 Jun 2010 19:06:57 -0000 1.105 ++++ tinyxml.cpp 19 Jul 2010 21:24:16 -0000 +@@ -57,30 +57,7 @@ + { + unsigned char c = (unsigned char) str[i]; + +- if ( c == '&' +- && i < ( (int)str.length() - 2 ) +- && str[i+1] == '#' +- && str[i+2] == 'x' ) +- { +- // Hexadecimal character reference. +- // Pass through unchanged. +- // © -- copyright symbol, for example. +- // +- // The -1 is a bug fix from Rob Laveaux. It keeps +- // an overflow from happening if there is no ';'. +- // There are actually 2 ways to exit this loop - +- // while fails (error case) and break (semicolon found). +- // However, there is no mechanism (currently) for +- // this function to return an error. +- while ( i<(int)str.length()-1 ) +- { +- outString->append( str.c_str() + i, 1 ); +- ++i; +- if ( str[i] == ';' ) +- break; +- } +- } +- else if ( c == '&' ) ++ if ( c == '&' ) + { + outString->append( entity[0].str, entity[0].strLength ); + ++i; +Index: xmltest.cpp +=================================================================== +RCS file: /cvsroot/tinyxml/tinyxml/xmltest.cpp,v +retrieving revision 1.89 +diff -u -r1.89 xmltest.cpp +--- xmltest.cpp 5 Jun 2010 17:41:52 -0000 1.89 ++++ xmltest.cpp 19 Jul 2010 21:24:16 -0000 +@@ -1340,6 +1340,16 @@ + }*/ + } + ++ #ifdef TIXML_USE_STL ++ { ++ TiXmlDocument xml; ++ xml.Parse("foo&#xa+bar"); ++ std::string str; ++ str << xml; ++ XmlTest( "Entity escaping", "foo&#xa+bar", str.c_str() ); ++ } ++ #endif ++ + /* 1417717 experiment + { + TiXmlDocument xml; diff --git a/x86_64/extra/tinyxml/tinyxml-2.5.3-stl.patch b/x86_64/extra/tinyxml/tinyxml-2.5.3-stl.patch new file mode 100644 index 0000000..7bcde59 --- /dev/null +++ b/x86_64/extra/tinyxml/tinyxml-2.5.3-stl.patch @@ -0,0 +1,12 @@ +diff -up tinyxml/tinyxml.h~ tinyxml/tinyxml.h +--- tinyxml/tinyxml.h~ 2007-11-30 22:39:36.000000000 +0100 ++++ tinyxml/tinyxml.h 2007-11-30 22:39:36.000000000 +0100 +@@ -26,6 +26,8 @@ distribution. + #ifndef TINYXML_INCLUDED + #define TINYXML_INCLUDED + ++#define TIXML_USE_STL 1 ++ + #ifdef _MSC_VER + #pragma warning( push ) + #pragma warning( disable : 4530 ) diff --git a/x86_64/extra/tinyxml/tinyxml.pc b/x86_64/extra/tinyxml/tinyxml.pc new file mode 100644 index 0000000..684b090 --- /dev/null +++ b/x86_64/extra/tinyxml/tinyxml.pc @@ -0,0 +1,10 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: TinyXml +Description: simple, small, C++ XML parser +Version: 2.6.2 +Libs: -L${libdir} -ltinyxml +Cflags: -I${includedir} diff --git a/x86_64/extra/tk/PKGBUILD b/x86_64/extra/tk/PKGBUILD new file mode 100644 index 0000000..5935243 --- /dev/null +++ b/x86_64/extra/tk/PKGBUILD @@ -0,0 +1,41 @@ +pkgname=tk +pkgver=8.6.12 +pkgrel=1 +arch=(x86_64) +depends=(tcl libxss libxft) +makedepends=(make gcc) +source=(https://downloads.sourceforge.net/sourceforge/tcl/tk$pkgver-src.tar.gz) + +build() { + cd $pkgname$pkgver/unix + + ./configure \ + --prefix=/usr \ + --enable-threads \ + --enable-64bit + + make +} + +package() { + cd $pkgname$pkgver/unix + + make DESTDIR=$pkgdir install + + # Linking + ln -sf wish${pkgver%.*} "${pkgdir}/usr/bin/wish" + ln -sf libtk${pkgver%.*}.so "${pkgdir}/usr/lib/libtk.so" + + # Install headers + cd .. + + for dir in compat generic generic/ttk unix; do + install -dm755 "${pkgdir}"/usr/include/tk-private/$dir + install -m644 -t "${pkgdir}"/usr/include/tk-private/$dir $dir/*.h + done + + # remove buildroot traces + sed -e "s#${srcdir}/tk${pkgver}/unix#/usr/lib#" \ + -e "s#${srcdir}/tk${pkgver}#/usr/include#" \ + -i "${pkgdir}/usr/lib/tkConfig.sh" +} diff --git a/x86_64/extra/ttf-bitstream-vera/PKGBUILD b/x86_64/extra/ttf-bitstream-vera/PKGBUILD new file mode 100644 index 0000000..868bfa8 --- /dev/null +++ b/x86_64/extra/ttf-bitstream-vera/PKGBUILD @@ -0,0 +1,12 @@ +pkgname=ttf-bitstream-vera +pkgver=1.10 +pkgrel=1 +arch=(x86_64) +source=(https://ftp.gnome.org/pub/GNOME/sources/${pkgname}/1.10/${pkgname}-${pkgver}.tar.gz) + +package() { + cd $pkgname-$pkgver + + install -d "${pkgdir}"/usr/share/fonts/TTF + install -m644 *.ttf "${pkgdir}"/usr/share/fonts/TTF/ +} diff --git a/x86_64/extra/ttf-droid/65-droid-kufi.conf b/x86_64/extra/ttf-droid/65-droid-kufi.conf new file mode 100644 index 0000000..4d368eb --- /dev/null +++ b/x86_64/extra/ttf-droid/65-droid-kufi.conf @@ -0,0 +1,16 @@ + + + + + fantasy + + Droid Arabic Kufi + + + + Droid Arabic Kufi + + Droid Sans + + + diff --git a/x86_64/extra/ttf-droid/65-droid-sans-mono.conf b/x86_64/extra/ttf-droid/65-droid-sans-mono.conf new file mode 100644 index 0000000..1cf8bbc --- /dev/null +++ b/x86_64/extra/ttf-droid/65-droid-sans-mono.conf @@ -0,0 +1,16 @@ + + + + + monospace + + Droid Sans Mono + + + + Droid Sans Mono + + monospace + + + diff --git a/x86_64/extra/ttf-droid/65-droid-sans.conf b/x86_64/extra/ttf-droid/65-droid-sans.conf new file mode 100644 index 0000000..dc9845c --- /dev/null +++ b/x86_64/extra/ttf-droid/65-droid-sans.conf @@ -0,0 +1,310 @@ + + + + + + Droid Sans + + + 12 + + + + + Droid Sans Hebrew + + + Droid Sans + + + Droid Sans + + + 11 + + + + + Droid Sans Hebrew Bold + + + Droid Sans + + + Droid Sans Bold + + + 11 + + + + + Droid Sans Armenian + + + Droid Sans + + + Droid Sans + + + 10 + + + + + Droid Sans Georgian + + + Droid Sans + + + Droid Sans + + + 9 + + + + + Droid Sans Ethiopic + + + Droid Sans + + + Droid Sans + + + 8 + + + + + Droid Sans Ethiopic Bold + + + Droid Sans + + + Droid Sans Bold + + + 8 + + + + + Droid Sans Arabic + + + Droid Sans + + + Droid Sans + + + 7 + + + + + Droid Sans Devanagari + + + Droid Sans + + + Droid Sans + + + 6 + + + + + Droid Sans Tamil + + + Droid Sans + + + Droid Sans + + + 5 + + + + + Droid Sans Tamil Bold + + + Droid Sans + + + Droid Sans Bold + + + 5 + + + + + Droid Sans Thai + + + Droid Sans + + + Droid Sans + + + 4 + + + + + zh-cn + + + zh-sg + + + zh-hk + + + zh-tw + + + zh + + + Droid Sans Japanese + + + Droid Sans + + + Droid Sans + + + 3 + + + + + Droid Sans Fallback + + + Droid Sans + + + Droid Sans + + + 2 + + + + + zh-cn + + + zh-sg + + + zh-hk + + + zh-tw + + + zh + + + Droid Sans Japanese + + + Droid Sans + + + Droid Sans + + + 1 + + + + Droid Sans Arabic + + Droid Sans + + + + Droid Sans Armenian + + Droid Sans + + + + Droid Sans Devanagari + + Droid Sans + + + + Droid Sans Ethiopic + + Droid Sans + + + + Droid Sans Fallback + + Droid Sans + + + + Droid Sans Georgian + + Droid Sans + + + + Droid Sans Hebrew + + Droid Sans + + + + Droid Sans Japanese + + Droid Sans + + + + Droid Sans Tamil + + Droid Sans + + + + Droid Sans Thai + + Droid Sans + + + + sans-serif + + Droid Sans + + + + Droid Sans + + sans-serif + + + diff --git a/x86_64/extra/ttf-droid/65-droid-serif.conf b/x86_64/extra/ttf-droid/65-droid-serif.conf new file mode 100644 index 0000000..368f361 --- /dev/null +++ b/x86_64/extra/ttf-droid/65-droid-serif.conf @@ -0,0 +1,64 @@ + + + + + + Droid Serif + + + 2 + + + + + Droid Arabic Naskh + + + Droid Serif + + + Droid Serif + + + 1 + + + + + Droid Arabic Naskh Bold + + + Droid Serif + + + Droid Serif Bold + + + 1 + + + + Droid Arabic Naskh + + Droid Serif + + + + Droid Naskh Shift Alt + + Droid Serif + + + + serif + + Droid Serif + + + + Droid Serif + + serif + + + diff --git a/x86_64/extra/ttf-droid/PKGBUILD b/x86_64/extra/ttf-droid/PKGBUILD new file mode 100644 index 0000000..49d908b --- /dev/null +++ b/x86_64/extra/ttf-droid/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=ttf-droid +pkgver=20121017 +pkgrel=1 +arch=(x86_64) +source=(https://sources.archlinux.org/other/community/$pkgname/$pkgname-$pkgver.tar.xz + 65-droid-kufi.conf + 65-droid-sans.conf + 65-droid-sans-mono.conf + 65-droid-serif.conf) + +package() { + install -Dt "$pkgdir/usr/share/fonts/${pkgname#ttf-}" -m644 \ + google-droid-fonts-$pkgver/*.ttf + + local fcdir="$pkgdir/usr/share/fontconfig" + install -Dt "$fcdir/conf.avail" -m644 *.conf + mkdir -p "$fcdir/conf.default" + ln -srt "$fcdir/conf.default" "$fcdir"/conf.avail/* +} diff --git a/x86_64/extra/ttf-hack/PKGBUILD b/x86_64/extra/ttf-hack/PKGBUILD new file mode 100644 index 0000000..2f8208f --- /dev/null +++ b/x86_64/extra/ttf-hack/PKGBUILD @@ -0,0 +1,9 @@ +pkgname=ttf-hack +pkgver=3.003 +pkgrel=1 +arch=('x86_64') +source=("https://github.com/source-foundry/Hack/releases/download/v${pkgver}/Hack-v${pkgver}-ttf.tar.xz") + +package() { + install -Dm644 -t "$pkgdir/usr/share/fonts/TTF" "$srcdir"/Hack-*.ttf +} diff --git a/x86_64/extra/ttf-liberation/PKGBUILD b/x86_64/extra/ttf-liberation/PKGBUILD new file mode 100644 index 0000000..48debbb --- /dev/null +++ b/x86_64/extra/ttf-liberation/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=ttf-liberation +rname=liberation-fonts +pkgver=2.1.5 +pkgrel=1 +arch=(x86_64) +url=https://github.com/liberationfonts/liberation-fonts +makedepends=(fontforge python3-fonttools) +source=($url/archive/$pkgver/liberation-fonts-$pkgver.tar.gz) + +build() { + cd $rname-$pkgver + + make build +} + +package() { + cd $rname-$pkgver + + install -Dm644 -t "$pkgdir/usr/share/fonts/${pkgname#ttf-}" \ + liberation-fonts-ttf-$pkgver/*.ttf +} diff --git a/x86_64/extra/ucl/PKGBUILD b/x86_64/extra/ucl/PKGBUILD new file mode 100644 index 0000000..24eaf1a --- /dev/null +++ b/x86_64/extra/ucl/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=ucl +pkgver=1.03 +pkgrel=1 +arch=('x86_64') +depends=('glibc') +source=("https://www.oberhumer.com/opensource/$pkgname/download/$pkgname-$pkgver.tar.gz") + +build() { + cd "$pkgname-$pkgver" + export CFLAGS+=" -std=gnu90 -fPIC" + + ./configure --prefix=/usr --enable-shared --disable-static + + make +} + +package() { + cd "$pkgname-$pkgver" + + make DESTDIR="$pkgdir" install +} diff --git a/x86_64/extra/udisks2/PKGBUILD b/x86_64/extra/udisks2/PKGBUILD new file mode 100644 index 0000000..904295f --- /dev/null +++ b/x86_64/extra/udisks2/PKGBUILD @@ -0,0 +1,47 @@ +pkgname=udisks2 +pkgver=2.9.4 +pkgrel=3 +pkgdesc="Disk Management Service, version 2" +arch=('x86_64') +url="https://www.freedesktop.org/wiki/Software/udisks" +depends=(libatasmart libblockdev libgudev libxslt polkit lvm2 + mdadm systemd gobject-introspection ntfs-3g dosfstools gptfdisk) +makedepends=('docbook-xsl' 'parted' 'gtk-doc') +backup=('etc/udisks2/udisks2.conf' + 'etc/udisks2mount_options.conf') +source=("https://github.com/storaged-project/udisks/archive/udisks-$pkgver.tar.gz" + "mount_options.conf") + +prepare() { + cd udisks-udisks-$pkgver + + NOCONFIGURE=1 ./autogen.sh +} + +build() { + cd udisks-udisks-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --sbindir=/usr/bin \ + --libexecdir=/usr/lib \ + --with-systemdsystemunitdir=/usr/lib/systemd/system \ + --localstatedir=/var \ + enable_available_modules=yes \ + --disable-man \ + --disable-gtk-doc \ + --disable-gtk-doc-pdf \ + --disable-gtk-doc-html + + make +} + +package() { + cd udisks-udisks-$pkgver + + make DESTDIR="$pkgdir" install + + mkdir -p $pkgdir/etc/udisks2 + cp ../mount_options.conf $pkgdir/etc/udisks2/mount_options.conf +} diff --git a/x86_64/extra/udisks2/mount_options.conf b/x86_64/extra/udisks2/mount_options.conf new file mode 100644 index 0000000..0e16ff7 --- /dev/null +++ b/x86_64/extra/udisks2/mount_options.conf @@ -0,0 +1,3 @@ +[defaults] +ntfs_defaults=uid=$UID,gid=$GID +ntfs_allow=uid=$UID,gid=$GID,umask,dmask,fmask,locale,norecover,ignore_case,compression,nocompression,big_writes,nls,nohidden,sys_immutable,sparse,showmeta,prealloc diff --git a/x86_64/extra/unicode-character-database/PKGBUILD b/x86_64/extra/unicode-character-database/PKGBUILD new file mode 100644 index 0000000..aab8712 --- /dev/null +++ b/x86_64/extra/unicode-character-database/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=unicode-character-database +pkgver=14.0.0 +pkgrel=1 +arch=(x86_64) +makedepends=(lynx) +source=("UCD-$pkgver.zip::https://www.unicode.org/Public/zipped/$pkgver/UCD.zip" + "Unihan-$pkgver.zip::https://www.unicode.org/Public/zipped/$pkgver/Unihan.zip" + "unicode-license.html::https://www.unicode.org/license.html") +noextract=({UCD,Unihan}-$pkgver.zip) + +build() { + lynx -dump -display_charset=utf-8 unicode-license.html > LICENSE +} + +package() { + for _f in UCD Unihan; do + install -Dm644 $_f-$pkgver.zip "$pkgdir/usr/share/unicode/$_f.zip" + bsdtar -C "$pkgdir/usr/share/unicode" -x --no-same-owner --no-same-permissions -f $_f-$pkgver.zip + done + + ln -s . "$pkgdir/usr/share/unicode/ucd" + for _f in $pkgname unicode-data unidata; do + ln -s unicode "$pkgdir/usr/share/$_f" + done +} diff --git a/x86_64/extra/unicode-character-database/unicode-license.html b/x86_64/extra/unicode-character-database/unicode-license.html new file mode 100644 index 0000000..85d0d58 --- /dev/null +++ b/x86_64/extra/unicode-character-database/unicode-license.html @@ -0,0 +1,46 @@ +UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE + +See Terms of Use +for definitions of Unicode Inc.’s Data Files and Software. + +NOTICE TO USER: Carefully read the following legal agreement. +BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S +DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), +YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +TERMS AND CONDITIONS OF THIS AGREEMENT. +IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE +THE DATA FILES OR SOFTWARE. + +COPYRIGHT AND PERMISSION NOTICE + +Copyright © 1991-2022 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in https://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. diff --git a/x86_64/extra/unicode-cldr/PKGBUILD b/x86_64/extra/unicode-cldr/PKGBUILD new file mode 100644 index 0000000..be27cdd --- /dev/null +++ b/x86_64/extra/unicode-cldr/PKGBUILD @@ -0,0 +1,16 @@ +pkgname=unicode-cldr +pkgver=38.0 +pkgrel=1 +arch=('x86_64') +source=("https://unicode.org/Public/cldr/${pkgver%.*}/cldr-common-$pkgver.zip") + +shopt -s extglob + +package() { + cd common + install -dm755 "$pkgdir"/usr/share/unicode/cldr/common + cp -r annotations "$pkgdir"/usr/share/unicode/cldr/common/ + cp -r !(annotations) "$pkgdir"/usr/share/unicode/cldr/common/ + + install -Dm644 ../unicode-license.txt -t "$pkgdir"/usr/share/licenses/$pkgname/ +} diff --git a/x86_64/extra/unicode-emoji/PKGBUILD b/x86_64/extra/unicode-emoji/PKGBUILD new file mode 100644 index 0000000..9f7ec20 --- /dev/null +++ b/x86_64/extra/unicode-emoji/PKGBUILD @@ -0,0 +1,14 @@ +pkgname=unicode-emoji +pkgver=14.0 +pkgrel=1 +arch=(x86_64) +depends=('unicode-character-database') +source=("emoji-sequences-$pkgver.txt::http://www.unicode.org/Public/emoji/$pkgver/emoji-sequences.txt" + "emoji-test-$pkgver.txt::http://www.unicode.org/Public/emoji/$pkgver/emoji-test.txt" + "emoji-zwj-sequences-$pkgver.txt::http://www.unicode.org/Public/emoji/$pkgver/emoji-zwj-sequences.txt") + +package() { + for _f in sequences test zwj-sequences; do + install -Dm644 emoji-$_f-$pkgver.txt "$pkgdir/usr/share/unicode/emoji/emoji-$_f.txt" + done +} diff --git a/x86_64/extra/unicode-emoji/emoji-sequences-14.0.txt b/x86_64/extra/unicode-emoji/emoji-sequences-14.0.txt new file mode 100644 index 0000000..e8aa0fc --- /dev/null +++ b/x86_64/extra/unicode-emoji/emoji-sequences-14.0.txt @@ -0,0 +1,1469 @@ +# emoji-sequences.txt +# Date: 2021-08-26, 17:22:22 GMT +# © 2021 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Emoji Sequence Data for UTS #51 +# Version: 14.0 +# +# For documentation and usage, see http://www.unicode.org/reports/tr51 +# +# Format: +# code_point(s) ; type_field ; description # comments +# Fields: +# code_point(s): one or more code points in hex format, separated by spaces +# type_field, one of the following: +# Basic_Emoji +# Emoji_Keycap_Sequence +# RGI_Emoji_Flag_Sequence +# RGI_Emoji_Tag_Sequence +# RGI_Emoji_Modifier_Sequence +# The type_field is a convenience for parsing the emoji sequence files, and is not intended to be maintained as a property. +# short name: CLDR short name of sequence; characters may be escaped with \x{hex}. +# +# For the purpose of regular expressions, each of the type fields defines the name of +# a binary property of strings. The short name of each property is the same as the long name. +# +# For the purpose of regular expressions, the property RGI_Emoji is defined as +# a binary property of strings corresponding to ED-27 in UTS #51 Unicode Emoji. +# That is, it is the union of the above properties plus RGI_Emoji_ZWJ_Sequence, +# whose data is in emoji-zwj-sequences.txt. +# The short name of RGI_Emoji is the same as the long name. +# +# Characters and sequences are listed in code point order. Users should be shown a more natural order. +# See the CLDR collation order for Emoji. + +# ================================================ + +# Basic_Emoji + +231A..231B ; Basic_Emoji ; watch # E0.6 [2] (⌚..⌛) +23E9..23EC ; Basic_Emoji ; fast-forward button # E0.6 [4] (⏩..⏬) +23F0 ; Basic_Emoji ; alarm clock # E0.6 [1] (⏰) +23F3 ; Basic_Emoji ; hourglass not done # E0.6 [1] (⏳) +25FD..25FE ; Basic_Emoji ; white medium-small square # E0.6 [2] (◽..◾) +2614..2615 ; Basic_Emoji ; umbrella with rain drops # E0.6 [2] (☔..☕) +2648..2653 ; Basic_Emoji ; Aries # E0.6 [12] (♈..♓) +267F ; Basic_Emoji ; wheelchair symbol # E0.6 [1] (♿) +2693 ; Basic_Emoji ; anchor # E0.6 [1] (⚓) +26A1 ; Basic_Emoji ; high voltage # E0.6 [1] (⚡) +26AA..26AB ; Basic_Emoji ; white circle # E0.6 [2] (⚪..⚫) +26BD..26BE ; Basic_Emoji ; soccer ball # E0.6 [2] (⚽..⚾) +26C4..26C5 ; Basic_Emoji ; snowman without snow # E0.6 [2] (⛄..⛅) +26CE ; Basic_Emoji ; Ophiuchus # E0.6 [1] (⛎) +26D4 ; Basic_Emoji ; no entry # E0.6 [1] (⛔) +26EA ; Basic_Emoji ; church # E0.6 [1] (⛪) +26F2..26F3 ; Basic_Emoji ; fountain # E0.6 [2] (⛲..⛳) +26F5 ; Basic_Emoji ; sailboat # E0.6 [1] (⛵) +26FA ; Basic_Emoji ; tent # E0.6 [1] (⛺) +26FD ; Basic_Emoji ; fuel pump # E0.6 [1] (⛽) +2705 ; Basic_Emoji ; check mark button # E0.6 [1] (✅) +270A..270B ; Basic_Emoji ; raised fist # E0.6 [2] (✊..✋) +2728 ; Basic_Emoji ; sparkles # E0.6 [1] (✨) +274C ; Basic_Emoji ; cross mark # E0.6 [1] (❌) +274E ; Basic_Emoji ; cross mark button # E0.6 [1] (❎) +2753..2755 ; Basic_Emoji ; red question mark # E0.6 [3] (❓..❕) +2757 ; Basic_Emoji ; red exclamation mark # E0.6 [1] (❗) +2795..2797 ; Basic_Emoji ; plus # E0.6 [3] (➕..➗) +27B0 ; Basic_Emoji ; curly loop # E0.6 [1] (➰) +27BF ; Basic_Emoji ; double curly loop # E1.0 [1] (➿) +2B1B..2B1C ; Basic_Emoji ; black large square # E0.6 [2] (⬛..⬜) +2B50 ; Basic_Emoji ; star # E0.6 [1] (⭐) +2B55 ; Basic_Emoji ; hollow red circle # E0.6 [1] (⭕) +1F004 ; Basic_Emoji ; mahjong red dragon # E0.6 [1] (🀄) +1F0CF ; Basic_Emoji ; joker # E0.6 [1] (🃏) +1F18E ; Basic_Emoji ; AB button (blood type) # E0.6 [1] (🆎) +1F191..1F19A ; Basic_Emoji ; CL button # E0.6 [10] (🆑..🆚) +1F201 ; Basic_Emoji ; Japanese “here” button # E0.6 [1] (🈁) +1F21A ; Basic_Emoji ; Japanese “free of charge” button # E0.6 [1] (🈚) +1F22F ; Basic_Emoji ; Japanese “reserved” button # E0.6 [1] (🈯) +1F232..1F236 ; Basic_Emoji ; Japanese “prohibited” button # E0.6 [5] (🈲..🈶) +1F238..1F23A ; Basic_Emoji ; Japanese “application” button # E0.6 [3] (🈸..🈺) +1F250..1F251 ; Basic_Emoji ; Japanese “bargain” button # E0.6 [2] (🉐..🉑) +1F300..1F30C ; Basic_Emoji ; cyclone # E0.6 [13] (🌀..🌌) +1F30D..1F30E ; Basic_Emoji ; globe showing Europe-Africa # E0.7 [2] (🌍..🌎) +1F30F ; Basic_Emoji ; globe showing Asia-Australia # E0.6 [1] (🌏) +1F310 ; Basic_Emoji ; globe with meridians # E1.0 [1] (🌐) +1F311 ; Basic_Emoji ; new moon # E0.6 [1] (🌑) +1F312 ; Basic_Emoji ; waxing crescent moon # E1.0 [1] (🌒) +1F313..1F315 ; Basic_Emoji ; first quarter moon # E0.6 [3] (🌓..🌕) +1F316..1F318 ; Basic_Emoji ; waning gibbous moon # E1.0 [3] (🌖..🌘) +1F319 ; Basic_Emoji ; crescent moon # E0.6 [1] (🌙) +1F31A ; Basic_Emoji ; new moon face # E1.0 [1] (🌚) +1F31B ; Basic_Emoji ; first quarter moon face # E0.6 [1] (🌛) +1F31C ; Basic_Emoji ; last quarter moon face # E0.7 [1] (🌜) +1F31D..1F31E ; Basic_Emoji ; full moon face # E1.0 [2] (🌝..🌞) +1F31F..1F320 ; Basic_Emoji ; glowing star # E0.6 [2] (🌟..🌠) +1F32D..1F32F ; Basic_Emoji ; hot dog # E1.0 [3] (🌭..🌯) +1F330..1F331 ; Basic_Emoji ; chestnut # E0.6 [2] (🌰..🌱) +1F332..1F333 ; Basic_Emoji ; evergreen tree # E1.0 [2] (🌲..🌳) +1F334..1F335 ; Basic_Emoji ; palm tree # E0.6 [2] (🌴..🌵) +1F337..1F34A ; Basic_Emoji ; tulip # E0.6 [20] (🌷..🍊) +1F34B ; Basic_Emoji ; lemon # E1.0 [1] (🍋) +1F34C..1F34F ; Basic_Emoji ; banana # E0.6 [4] (🍌..🍏) +1F350 ; Basic_Emoji ; pear # E1.0 [1] (🍐) +1F351..1F37B ; Basic_Emoji ; peach # E0.6 [43] (🍑..🍻) +1F37C ; Basic_Emoji ; baby bottle # E1.0 [1] (🍼) +1F37E..1F37F ; Basic_Emoji ; bottle with popping cork # E1.0 [2] (🍾..🍿) +1F380..1F393 ; Basic_Emoji ; ribbon # E0.6 [20] (🎀..🎓) +1F3A0..1F3C4 ; Basic_Emoji ; carousel horse # E0.6 [37] (🎠..🏄) +1F3C5 ; Basic_Emoji ; sports medal # E1.0 [1] (🏅) +1F3C6 ; Basic_Emoji ; trophy # E0.6 [1] (🏆) +1F3C7 ; Basic_Emoji ; horse racing # E1.0 [1] (🏇) +1F3C8 ; Basic_Emoji ; american football # E0.6 [1] (🏈) +1F3C9 ; Basic_Emoji ; rugby football # E1.0 [1] (🏉) +1F3CA ; Basic_Emoji ; person swimming # E0.6 [1] (🏊) +1F3CF..1F3D3 ; Basic_Emoji ; cricket game # E1.0 [5] (🏏..🏓) +1F3E0..1F3E3 ; Basic_Emoji ; house # E0.6 [4] (🏠..🏣) +1F3E4 ; Basic_Emoji ; post office # E1.0 [1] (🏤) +1F3E5..1F3F0 ; Basic_Emoji ; hospital # E0.6 [12] (🏥..🏰) +1F3F4 ; Basic_Emoji ; black flag # E1.0 [1] (🏴) +1F3F8..1F407 ; Basic_Emoji ; badminton # E1.0 [16] (🏸..🐇) +1F408 ; Basic_Emoji ; cat # E0.7 [1] (🐈) +1F409..1F40B ; Basic_Emoji ; dragon # E1.0 [3] (🐉..🐋) +1F40C..1F40E ; Basic_Emoji ; snail # E0.6 [3] (🐌..🐎) +1F40F..1F410 ; Basic_Emoji ; ram # E1.0 [2] (🐏..🐐) +1F411..1F412 ; Basic_Emoji ; ewe # E0.6 [2] (🐑..🐒) +1F413 ; Basic_Emoji ; rooster # E1.0 [1] (🐓) +1F414 ; Basic_Emoji ; chicken # E0.6 [1] (🐔) +1F415 ; Basic_Emoji ; dog # E0.7 [1] (🐕) +1F416 ; Basic_Emoji ; pig # E1.0 [1] (🐖) +1F417..1F429 ; Basic_Emoji ; boar # E0.6 [19] (🐗..🐩) +1F42A ; Basic_Emoji ; camel # E1.0 [1] (🐪) +1F42B..1F43E ; Basic_Emoji ; two-hump camel # E0.6 [20] (🐫..🐾) +1F440 ; Basic_Emoji ; eyes # E0.6 [1] (👀) +1F442..1F464 ; Basic_Emoji ; ear # E0.6 [35] (👂..👤) +1F465 ; Basic_Emoji ; busts in silhouette # E1.0 [1] (👥) +1F466..1F46B ; Basic_Emoji ; boy # E0.6 [6] (👦..👫) +1F46C..1F46D ; Basic_Emoji ; men holding hands # E1.0 [2] (👬..👭) +1F46E..1F4AC ; Basic_Emoji ; police officer # E0.6 [63] (👮..💬) +1F4AD ; Basic_Emoji ; thought balloon # E1.0 [1] (💭) +1F4AE..1F4B5 ; Basic_Emoji ; white flower # E0.6 [8] (💮..💵) +1F4B6..1F4B7 ; Basic_Emoji ; euro banknote # E1.0 [2] (💶..💷) +1F4B8..1F4EB ; Basic_Emoji ; money with wings # E0.6 [52] (💸..📫) +1F4EC..1F4ED ; Basic_Emoji ; open mailbox with raised flag # E0.7 [2] (📬..📭) +1F4EE ; Basic_Emoji ; postbox # E0.6 [1] (📮) +1F4EF ; Basic_Emoji ; postal horn # E1.0 [1] (📯) +1F4F0..1F4F4 ; Basic_Emoji ; newspaper # E0.6 [5] (📰..📴) +1F4F5 ; Basic_Emoji ; no mobile phones # E1.0 [1] (📵) +1F4F6..1F4F7 ; Basic_Emoji ; antenna bars # E0.6 [2] (📶..📷) +1F4F8 ; Basic_Emoji ; camera with flash # E1.0 [1] (📸) +1F4F9..1F4FC ; Basic_Emoji ; video camera # E0.6 [4] (📹..📼) +1F4FF..1F502 ; Basic_Emoji ; prayer beads # E1.0 [4] (📿..🔂) +1F503 ; Basic_Emoji ; clockwise vertical arrows # E0.6 [1] (🔃) +1F504..1F507 ; Basic_Emoji ; counterclockwise arrows button # E1.0 [4] (🔄..🔇) +1F508 ; Basic_Emoji ; speaker low volume # E0.7 [1] (🔈) +1F509 ; Basic_Emoji ; speaker medium volume # E1.0 [1] (🔉) +1F50A..1F514 ; Basic_Emoji ; speaker high volume # E0.6 [11] (🔊..🔔) +1F515 ; Basic_Emoji ; bell with slash # E1.0 [1] (🔕) +1F516..1F52B ; Basic_Emoji ; bookmark # E0.6 [22] (🔖..🔫) +1F52C..1F52D ; Basic_Emoji ; microscope # E1.0 [2] (🔬..🔭) +1F52E..1F53D ; Basic_Emoji ; crystal ball # E0.6 [16] (🔮..🔽) +1F54B..1F54E ; Basic_Emoji ; kaaba # E1.0 [4] (🕋..🕎) +1F550..1F55B ; Basic_Emoji ; one o’clock # E0.6 [12] (🕐..🕛) +1F55C..1F567 ; Basic_Emoji ; one-thirty # E0.7 [12] (🕜..🕧) +1F57A ; Basic_Emoji ; man dancing # E3.0 [1] (🕺) +1F595..1F596 ; Basic_Emoji ; middle finger # E1.0 [2] (🖕..🖖) +1F5A4 ; Basic_Emoji ; black heart # E3.0 [1] (🖤) +1F5FB..1F5FF ; Basic_Emoji ; mount fuji # E0.6 [5] (🗻..🗿) +1F600 ; Basic_Emoji ; grinning face # E1.0 [1] (😀) +1F601..1F606 ; Basic_Emoji ; beaming face with smiling eyes # E0.6 [6] (😁..😆) +1F607..1F608 ; Basic_Emoji ; smiling face with halo # E1.0 [2] (😇..😈) +1F609..1F60D ; Basic_Emoji ; winking face # E0.6 [5] (😉..😍) +1F60E ; Basic_Emoji ; smiling face with sunglasses # E1.0 [1] (😎) +1F60F ; Basic_Emoji ; smirking face # E0.6 [1] (😏) +1F610 ; Basic_Emoji ; neutral face # E0.7 [1] (😐) +1F611 ; Basic_Emoji ; expressionless face # E1.0 [1] (😑) +1F612..1F614 ; Basic_Emoji ; unamused face # E0.6 [3] (😒..😔) +1F615 ; Basic_Emoji ; confused face # E1.0 [1] (😕) +1F616 ; Basic_Emoji ; confounded face # E0.6 [1] (😖) +1F617 ; Basic_Emoji ; kissing face # E1.0 [1] (😗) +1F618 ; Basic_Emoji ; face blowing a kiss # E0.6 [1] (😘) +1F619 ; Basic_Emoji ; kissing face with smiling eyes # E1.0 [1] (😙) +1F61A ; Basic_Emoji ; kissing face with closed eyes # E0.6 [1] (😚) +1F61B ; Basic_Emoji ; face with tongue # E1.0 [1] (😛) +1F61C..1F61E ; Basic_Emoji ; winking face with tongue # E0.6 [3] (😜..😞) +1F61F ; Basic_Emoji ; worried face # E1.0 [1] (😟) +1F620..1F625 ; Basic_Emoji ; angry face # E0.6 [6] (😠..😥) +1F626..1F627 ; Basic_Emoji ; frowning face with open mouth # E1.0 [2] (😦..😧) +1F628..1F62B ; Basic_Emoji ; fearful face # E0.6 [4] (😨..😫) +1F62C ; Basic_Emoji ; grimacing face # E1.0 [1] (😬) +1F62D ; Basic_Emoji ; loudly crying face # E0.6 [1] (😭) +1F62E..1F62F ; Basic_Emoji ; face with open mouth # E1.0 [2] (😮..😯) +1F630..1F633 ; Basic_Emoji ; anxious face with sweat # E0.6 [4] (😰..😳) +1F634 ; Basic_Emoji ; sleeping face # E1.0 [1] (😴) +1F635 ; Basic_Emoji ; face with crossed-out eyes # E0.6 [1] (😵) +1F636 ; Basic_Emoji ; face without mouth # E1.0 [1] (😶) +1F637..1F640 ; Basic_Emoji ; face with medical mask # E0.6 [10] (😷..🙀) +1F641..1F644 ; Basic_Emoji ; slightly frowning face # E1.0 [4] (🙁..🙄) +1F645..1F64F ; Basic_Emoji ; person gesturing NO # E0.6 [11] (🙅..🙏) +1F680 ; Basic_Emoji ; rocket # E0.6 [1] (🚀) +1F681..1F682 ; Basic_Emoji ; helicopter # E1.0 [2] (🚁..🚂) +1F683..1F685 ; Basic_Emoji ; railway car # E0.6 [3] (🚃..🚅) +1F686 ; Basic_Emoji ; train # E1.0 [1] (🚆) +1F687 ; Basic_Emoji ; metro # E0.6 [1] (🚇) +1F688 ; Basic_Emoji ; light rail # E1.0 [1] (🚈) +1F689 ; Basic_Emoji ; station # E0.6 [1] (🚉) +1F68A..1F68B ; Basic_Emoji ; tram # E1.0 [2] (🚊..🚋) +1F68C ; Basic_Emoji ; bus # E0.6 [1] (🚌) +1F68D ; Basic_Emoji ; oncoming bus # E0.7 [1] (🚍) +1F68E ; Basic_Emoji ; trolleybus # E1.0 [1] (🚎) +1F68F ; Basic_Emoji ; bus stop # E0.6 [1] (🚏) +1F690 ; Basic_Emoji ; minibus # E1.0 [1] (🚐) +1F691..1F693 ; Basic_Emoji ; ambulance # E0.6 [3] (🚑..🚓) +1F694 ; Basic_Emoji ; oncoming police car # E0.7 [1] (🚔) +1F695 ; Basic_Emoji ; taxi # E0.6 [1] (🚕) +1F696 ; Basic_Emoji ; oncoming taxi # E1.0 [1] (🚖) +1F697 ; Basic_Emoji ; automobile # E0.6 [1] (🚗) +1F698 ; Basic_Emoji ; oncoming automobile # E0.7 [1] (🚘) +1F699..1F69A ; Basic_Emoji ; sport utility vehicle # E0.6 [2] (🚙..🚚) +1F69B..1F6A1 ; Basic_Emoji ; articulated lorry # E1.0 [7] (🚛..🚡) +1F6A2 ; Basic_Emoji ; ship # E0.6 [1] (🚢) +1F6A3 ; Basic_Emoji ; person rowing boat # E1.0 [1] (🚣) +1F6A4..1F6A5 ; Basic_Emoji ; speedboat # E0.6 [2] (🚤..🚥) +1F6A6 ; Basic_Emoji ; vertical traffic light # E1.0 [1] (🚦) +1F6A7..1F6AD ; Basic_Emoji ; construction # E0.6 [7] (🚧..🚭) +1F6AE..1F6B1 ; Basic_Emoji ; litter in bin sign # E1.0 [4] (🚮..🚱) +1F6B2 ; Basic_Emoji ; bicycle # E0.6 [1] (🚲) +1F6B3..1F6B5 ; Basic_Emoji ; no bicycles # E1.0 [3] (🚳..🚵) +1F6B6 ; Basic_Emoji ; person walking # E0.6 [1] (🚶) +1F6B7..1F6B8 ; Basic_Emoji ; no pedestrians # E1.0 [2] (🚷..🚸) +1F6B9..1F6BE ; Basic_Emoji ; men’s room # E0.6 [6] (🚹..🚾) +1F6BF ; Basic_Emoji ; shower # E1.0 [1] (🚿) +1F6C0 ; Basic_Emoji ; person taking bath # E0.6 [1] (🛀) +1F6C1..1F6C5 ; Basic_Emoji ; bathtub # E1.0 [5] (🛁..🛅) +1F6CC ; Basic_Emoji ; person in bed # E1.0 [1] (🛌) +1F6D0 ; Basic_Emoji ; place of worship # E1.0 [1] (🛐) +1F6D1..1F6D2 ; Basic_Emoji ; stop sign # E3.0 [2] (🛑..🛒) +1F6D5 ; Basic_Emoji ; hindu temple # E12.0 [1] (🛕) +1F6D6..1F6D7 ; Basic_Emoji ; hut # E13.0 [2] (🛖..🛗) +1F6DD..1F6DF ; Basic_Emoji ; playground slide # E14.0 [3] (🛝..🛟) +1F6EB..1F6EC ; Basic_Emoji ; airplane departure # E1.0 [2] (🛫..🛬) +1F6F4..1F6F6 ; Basic_Emoji ; kick scooter # E3.0 [3] (🛴..🛶) +1F6F7..1F6F8 ; Basic_Emoji ; sled # E5.0 [2] (🛷..🛸) +1F6F9 ; Basic_Emoji ; skateboard # E11.0 [1] (🛹) +1F6FA ; Basic_Emoji ; auto rickshaw # E12.0 [1] (🛺) +1F6FB..1F6FC ; Basic_Emoji ; pickup truck # E13.0 [2] (🛻..🛼) +1F7E0..1F7EB ; Basic_Emoji ; orange circle # E12.0 [12] (🟠..🟫) +1F7F0 ; Basic_Emoji ; heavy equals sign # E14.0 [1] (🟰) +1F90C ; Basic_Emoji ; pinched fingers # E13.0 [1] (🤌) +1F90D..1F90F ; Basic_Emoji ; white heart # E12.0 [3] (🤍..🤏) +1F910..1F918 ; Basic_Emoji ; zipper-mouth face # E1.0 [9] (🤐..🤘) +1F919..1F91E ; Basic_Emoji ; call me hand # E3.0 [6] (🤙..🤞) +1F91F ; Basic_Emoji ; love-you gesture # E5.0 [1] (🤟) +1F920..1F927 ; Basic_Emoji ; cowboy hat face # E3.0 [8] (🤠..🤧) +1F928..1F92F ; Basic_Emoji ; face with raised eyebrow # E5.0 [8] (🤨..🤯) +1F930 ; Basic_Emoji ; pregnant woman # E3.0 [1] (🤰) +1F931..1F932 ; Basic_Emoji ; breast-feeding # E5.0 [2] (🤱..🤲) +1F933..1F93A ; Basic_Emoji ; selfie # E3.0 [8] (🤳..🤺) +1F93C..1F93E ; Basic_Emoji ; people wrestling # E3.0 [3] (🤼..🤾) +1F93F ; Basic_Emoji ; diving mask # E12.0 [1] (🤿) +1F940..1F945 ; Basic_Emoji ; wilted flower # E3.0 [6] (🥀..🥅) +1F947..1F94B ; Basic_Emoji ; 1st place medal # E3.0 [5] (🥇..🥋) +1F94C ; Basic_Emoji ; curling stone # E5.0 [1] (🥌) +1F94D..1F94F ; Basic_Emoji ; lacrosse # E11.0 [3] (🥍..🥏) +1F950..1F95E ; Basic_Emoji ; croissant # E3.0 [15] (🥐..🥞) +1F95F..1F96B ; Basic_Emoji ; dumpling # E5.0 [13] (🥟..🥫) +1F96C..1F970 ; Basic_Emoji ; leafy green # E11.0 [5] (🥬..🥰) +1F971 ; Basic_Emoji ; yawning face # E12.0 [1] (🥱) +1F972 ; Basic_Emoji ; smiling face with tear # E13.0 [1] (🥲) +1F973..1F976 ; Basic_Emoji ; partying face # E11.0 [4] (🥳..🥶) +1F977..1F978 ; Basic_Emoji ; ninja # E13.0 [2] (🥷..🥸) +1F979 ; Basic_Emoji ; face holding back tears # E14.0 [1] (🥹) +1F97A ; Basic_Emoji ; pleading face # E11.0 [1] (🥺) +1F97B ; Basic_Emoji ; sari # E12.0 [1] (🥻) +1F97C..1F97F ; Basic_Emoji ; lab coat # E11.0 [4] (🥼..🥿) +1F980..1F984 ; Basic_Emoji ; crab # E1.0 [5] (🦀..🦄) +1F985..1F991 ; Basic_Emoji ; eagle # E3.0 [13] (🦅..🦑) +1F992..1F997 ; Basic_Emoji ; giraffe # E5.0 [6] (🦒..🦗) +1F998..1F9A2 ; Basic_Emoji ; kangaroo # E11.0 [11] (🦘..🦢) +1F9A3..1F9A4 ; Basic_Emoji ; mammoth # E13.0 [2] (🦣..🦤) +1F9A5..1F9AA ; Basic_Emoji ; sloth # E12.0 [6] (🦥..🦪) +1F9AB..1F9AD ; Basic_Emoji ; beaver # E13.0 [3] (🦫..🦭) +1F9AE..1F9AF ; Basic_Emoji ; guide dog # E12.0 [2] (🦮..🦯) +1F9B0..1F9B9 ; Basic_Emoji ; red hair # E11.0 [10] (🦰..🦹) +1F9BA..1F9BF ; Basic_Emoji ; safety vest # E12.0 [6] (🦺..🦿) +1F9C0 ; Basic_Emoji ; cheese wedge # E1.0 [1] (🧀) +1F9C1..1F9C2 ; Basic_Emoji ; cupcake # E11.0 [2] (🧁..🧂) +1F9C3..1F9CA ; Basic_Emoji ; beverage box # E12.0 [8] (🧃..🧊) +1F9CB ; Basic_Emoji ; bubble tea # E13.0 [1] (🧋) +1F9CC ; Basic_Emoji ; troll # E14.0 [1] (🧌) +1F9CD..1F9CF ; Basic_Emoji ; person standing # E12.0 [3] (🧍..🧏) +1F9D0..1F9E6 ; Basic_Emoji ; face with monocle # E5.0 [23] (🧐..🧦) +1F9E7..1F9FF ; Basic_Emoji ; red envelope # E11.0 [25] (🧧..🧿) +1FA70..1FA73 ; Basic_Emoji ; ballet shoes # E12.0 [4] (🩰..🩳) +1FA74 ; Basic_Emoji ; thong sandal # E13.0 [1] (🩴) +1FA78..1FA7A ; Basic_Emoji ; drop of blood # E12.0 [3] (🩸..🩺) +1FA7B..1FA7C ; Basic_Emoji ; x-ray # E14.0 [2] (🩻..🩼) +1FA80..1FA82 ; Basic_Emoji ; yo-yo # E12.0 [3] (🪀..🪂) +1FA83..1FA86 ; Basic_Emoji ; boomerang # E13.0 [4] (🪃..🪆) +1FA90..1FA95 ; Basic_Emoji ; ringed planet # E12.0 [6] (🪐..🪕) +1FA96..1FAA8 ; Basic_Emoji ; military helmet # E13.0 [19] (🪖..🪨) +1FAA9..1FAAC ; Basic_Emoji ; mirror ball # E14.0 [4] (🪩..🪬) +1FAB0..1FAB6 ; Basic_Emoji ; fly # E13.0 [7] (🪰..🪶) +1FAB7..1FABA ; Basic_Emoji ; lotus # E14.0 [4] (🪷..🪺) +1FAC0..1FAC2 ; Basic_Emoji ; anatomical heart # E13.0 [3] (🫀..🫂) +1FAC3..1FAC5 ; Basic_Emoji ; pregnant man # E14.0 [3] (🫃..🫅) +1FAD0..1FAD6 ; Basic_Emoji ; blueberries # E13.0 [7] (🫐..🫖) +1FAD7..1FAD9 ; Basic_Emoji ; pouring liquid # E14.0 [3] (🫗..🫙) +1FAE0..1FAE7 ; Basic_Emoji ; melting face # E14.0 [8] (🫠..🫧) +1FAF0..1FAF6 ; Basic_Emoji ; hand with index finger and thumb crossed # E14.0 [7] (🫰..🫶) +00A9 FE0F ; Basic_Emoji ; copyright # E0.6 [1] (©️) +00AE FE0F ; Basic_Emoji ; registered # E0.6 [1] (®️) +203C FE0F ; Basic_Emoji ; double exclamation mark # E0.6 [1] (‼️) +2049 FE0F ; Basic_Emoji ; exclamation question mark # E0.6 [1] (⁉️) +2122 FE0F ; Basic_Emoji ; trade mark # E0.6 [1] (™️) +2139 FE0F ; Basic_Emoji ; information # E0.6 [1] (ℹ️) +2194 FE0F ; Basic_Emoji ; left-right arrow # E0.6 [1] (↔️) +2195 FE0F ; Basic_Emoji ; up-down arrow # E0.6 [1] (↕️) +2196 FE0F ; Basic_Emoji ; up-left arrow # E0.6 [1] (↖️) +2197 FE0F ; Basic_Emoji ; up-right arrow # E0.6 [1] (↗️) +2198 FE0F ; Basic_Emoji ; down-right arrow # E0.6 [1] (↘️) +2199 FE0F ; Basic_Emoji ; down-left arrow # E0.6 [1] (↙️) +21A9 FE0F ; Basic_Emoji ; right arrow curving left # E0.6 [1] (↩️) +21AA FE0F ; Basic_Emoji ; left arrow curving right # E0.6 [1] (↪️) +2328 FE0F ; Basic_Emoji ; keyboard # E1.0 [1] (⌨️) +23CF FE0F ; Basic_Emoji ; eject button # E1.0 [1] (⏏️) +23ED FE0F ; Basic_Emoji ; next track button # E0.7 [1] (⏭️) +23EE FE0F ; Basic_Emoji ; last track button # E0.7 [1] (⏮️) +23EF FE0F ; Basic_Emoji ; play or pause button # E1.0 [1] (⏯️) +23F1 FE0F ; Basic_Emoji ; stopwatch # E1.0 [1] (⏱️) +23F2 FE0F ; Basic_Emoji ; timer clock # E1.0 [1] (⏲️) +23F8 FE0F ; Basic_Emoji ; pause button # E0.7 [1] (⏸️) +23F9 FE0F ; Basic_Emoji ; stop button # E0.7 [1] (⏹️) +23FA FE0F ; Basic_Emoji ; record button # E0.7 [1] (⏺️) +24C2 FE0F ; Basic_Emoji ; circled M # E0.6 [1] (Ⓜ️) +25AA FE0F ; Basic_Emoji ; black small square # E0.6 [1] (▪️) +25AB FE0F ; Basic_Emoji ; white small square # E0.6 [1] (▫️) +25B6 FE0F ; Basic_Emoji ; play button # E0.6 [1] (▶️) +25C0 FE0F ; Basic_Emoji ; reverse button # E0.6 [1] (◀️) +25FB FE0F ; Basic_Emoji ; white medium square # E0.6 [1] (◻️) +25FC FE0F ; Basic_Emoji ; black medium square # E0.6 [1] (◼️) +2600 FE0F ; Basic_Emoji ; sun # E0.6 [1] (☀️) +2601 FE0F ; Basic_Emoji ; cloud # E0.6 [1] (☁️) +2602 FE0F ; Basic_Emoji ; umbrella # E0.7 [1] (☂️) +2603 FE0F ; Basic_Emoji ; snowman # E0.7 [1] (☃️) +2604 FE0F ; Basic_Emoji ; comet # E1.0 [1] (☄️) +260E FE0F ; Basic_Emoji ; telephone # E0.6 [1] (☎️) +2611 FE0F ; Basic_Emoji ; check box with check # E0.6 [1] (☑️) +2618 FE0F ; Basic_Emoji ; shamrock # E1.0 [1] (☘️) +261D FE0F ; Basic_Emoji ; index pointing up # E0.6 [1] (☝️) +2620 FE0F ; Basic_Emoji ; skull and crossbones # E1.0 [1] (☠️) +2622 FE0F ; Basic_Emoji ; radioactive # E1.0 [1] (☢️) +2623 FE0F ; Basic_Emoji ; biohazard # E1.0 [1] (☣️) +2626 FE0F ; Basic_Emoji ; orthodox cross # E1.0 [1] (☦️) +262A FE0F ; Basic_Emoji ; star and crescent # E0.7 [1] (☪️) +262E FE0F ; Basic_Emoji ; peace symbol # E1.0 [1] (☮️) +262F FE0F ; Basic_Emoji ; yin yang # E0.7 [1] (☯️) +2638 FE0F ; Basic_Emoji ; wheel of dharma # E0.7 [1] (☸️) +2639 FE0F ; Basic_Emoji ; frowning face # E0.7 [1] (☹️) +263A FE0F ; Basic_Emoji ; smiling face # E0.6 [1] (☺️) +2640 FE0F ; Basic_Emoji ; female sign # E4.0 [1] (♀️) +2642 FE0F ; Basic_Emoji ; male sign # E4.0 [1] (♂️) +265F FE0F ; Basic_Emoji ; chess pawn # E11.0 [1] (♟️) +2660 FE0F ; Basic_Emoji ; spade suit # E0.6 [1] (♠️) +2663 FE0F ; Basic_Emoji ; club suit # E0.6 [1] (♣️) +2665 FE0F ; Basic_Emoji ; heart suit # E0.6 [1] (♥️) +2666 FE0F ; Basic_Emoji ; diamond suit # E0.6 [1] (♦️) +2668 FE0F ; Basic_Emoji ; hot springs # E0.6 [1] (♨️) +267B FE0F ; Basic_Emoji ; recycling symbol # E0.6 [1] (♻️) +267E FE0F ; Basic_Emoji ; infinity # E11.0 [1] (♾️) +2692 FE0F ; Basic_Emoji ; hammer and pick # E1.0 [1] (⚒️) +2694 FE0F ; Basic_Emoji ; crossed swords # E1.0 [1] (⚔️) +2695 FE0F ; Basic_Emoji ; medical symbol # E4.0 [1] (⚕️) +2696 FE0F ; Basic_Emoji ; balance scale # E1.0 [1] (⚖️) +2697 FE0F ; Basic_Emoji ; alembic # E1.0 [1] (⚗️) +2699 FE0F ; Basic_Emoji ; gear # E1.0 [1] (⚙️) +269B FE0F ; Basic_Emoji ; atom symbol # E1.0 [1] (⚛️) +269C FE0F ; Basic_Emoji ; fleur-de-lis # E1.0 [1] (⚜️) +26A0 FE0F ; Basic_Emoji ; warning # E0.6 [1] (⚠️) +26A7 FE0F ; Basic_Emoji ; transgender symbol # E13.0 [1] (⚧️) +26B0 FE0F ; Basic_Emoji ; coffin # E1.0 [1] (⚰️) +26B1 FE0F ; Basic_Emoji ; funeral urn # E1.0 [1] (⚱️) +26C8 FE0F ; Basic_Emoji ; cloud with lightning and rain # E0.7 [1] (⛈️) +26CF FE0F ; Basic_Emoji ; pick # E0.7 [1] (⛏️) +26D1 FE0F ; Basic_Emoji ; rescue worker’s helmet # E0.7 [1] (⛑️) +26D3 FE0F ; Basic_Emoji ; chains # E0.7 [1] (⛓️) +26E9 FE0F ; Basic_Emoji ; shinto shrine # E0.7 [1] (⛩️) +26F0 FE0F ; Basic_Emoji ; mountain # E0.7 [1] (⛰️) +26F1 FE0F ; Basic_Emoji ; umbrella on ground # E0.7 [1] (⛱️) +26F4 FE0F ; Basic_Emoji ; ferry # E0.7 [1] (⛴️) +26F7 FE0F ; Basic_Emoji ; skier # E0.7 [1] (⛷️) +26F8 FE0F ; Basic_Emoji ; ice skate # E0.7 [1] (⛸️) +26F9 FE0F ; Basic_Emoji ; person bouncing ball # E0.7 [1] (⛹️) +2702 FE0F ; Basic_Emoji ; scissors # E0.6 [1] (✂️) +2708 FE0F ; Basic_Emoji ; airplane # E0.6 [1] (✈️) +2709 FE0F ; Basic_Emoji ; envelope # E0.6 [1] (✉️) +270C FE0F ; Basic_Emoji ; victory hand # E0.6 [1] (✌️) +270D FE0F ; Basic_Emoji ; writing hand # E0.7 [1] (✍️) +270F FE0F ; Basic_Emoji ; pencil # E0.6 [1] (✏️) +2712 FE0F ; Basic_Emoji ; black nib # E0.6 [1] (✒️) +2714 FE0F ; Basic_Emoji ; check mark # E0.6 [1] (✔️) +2716 FE0F ; Basic_Emoji ; multiply # E0.6 [1] (✖️) +271D FE0F ; Basic_Emoji ; latin cross # E0.7 [1] (✝️) +2721 FE0F ; Basic_Emoji ; star of David # E0.7 [1] (✡️) +2733 FE0F ; Basic_Emoji ; eight-spoked asterisk # E0.6 [1] (✳️) +2734 FE0F ; Basic_Emoji ; eight-pointed star # E0.6 [1] (✴️) +2744 FE0F ; Basic_Emoji ; snowflake # E0.6 [1] (❄️) +2747 FE0F ; Basic_Emoji ; sparkle # E0.6 [1] (❇️) +2763 FE0F ; Basic_Emoji ; heart exclamation # E1.0 [1] (❣️) +2764 FE0F ; Basic_Emoji ; red heart # E0.6 [1] (❤️) +27A1 FE0F ; Basic_Emoji ; right arrow # E0.6 [1] (➡️) +2934 FE0F ; Basic_Emoji ; right arrow curving up # E0.6 [1] (⤴️) +2935 FE0F ; Basic_Emoji ; right arrow curving down # E0.6 [1] (⤵️) +2B05 FE0F ; Basic_Emoji ; left arrow # E0.6 [1] (⬅️) +2B06 FE0F ; Basic_Emoji ; up arrow # E0.6 [1] (⬆️) +2B07 FE0F ; Basic_Emoji ; down arrow # E0.6 [1] (⬇️) +3030 FE0F ; Basic_Emoji ; wavy dash # E0.6 [1] (〰️) +303D FE0F ; Basic_Emoji ; part alternation mark # E0.6 [1] (〽️) +3297 FE0F ; Basic_Emoji ; Japanese “congratulations” button # E0.6 [1] (㊗️) +3299 FE0F ; Basic_Emoji ; Japanese “secret” button # E0.6 [1] (㊙️) +1F170 FE0F ; Basic_Emoji ; A button (blood type) # E0.6 [1] (🅰️) +1F171 FE0F ; Basic_Emoji ; B button (blood type) # E0.6 [1] (🅱️) +1F17E FE0F ; Basic_Emoji ; O button (blood type) # E0.6 [1] (🅾️) +1F17F FE0F ; Basic_Emoji ; P button # E0.6 [1] (🅿️) +1F202 FE0F ; Basic_Emoji ; Japanese “service charge” button # E0.6 [1] (🈂️) +1F237 FE0F ; Basic_Emoji ; Japanese “monthly amount” button # E0.6 [1] (🈷️) +1F321 FE0F ; Basic_Emoji ; thermometer # E0.7 [1] (🌡️) +1F324 FE0F ; Basic_Emoji ; sun behind small cloud # E0.7 [1] (🌤️) +1F325 FE0F ; Basic_Emoji ; sun behind large cloud # E0.7 [1] (🌥️) +1F326 FE0F ; Basic_Emoji ; sun behind rain cloud # E0.7 [1] (🌦️) +1F327 FE0F ; Basic_Emoji ; cloud with rain # E0.7 [1] (🌧️) +1F328 FE0F ; Basic_Emoji ; cloud with snow # E0.7 [1] (🌨️) +1F329 FE0F ; Basic_Emoji ; cloud with lightning # E0.7 [1] (🌩️) +1F32A FE0F ; Basic_Emoji ; tornado # E0.7 [1] (🌪️) +1F32B FE0F ; Basic_Emoji ; fog # E0.7 [1] (🌫️) +1F32C FE0F ; Basic_Emoji ; wind face # E0.7 [1] (🌬️) +1F336 FE0F ; Basic_Emoji ; hot pepper # E0.7 [1] (🌶️) +1F37D FE0F ; Basic_Emoji ; fork and knife with plate # E0.7 [1] (🍽️) +1F396 FE0F ; Basic_Emoji ; military medal # E0.7 [1] (🎖️) +1F397 FE0F ; Basic_Emoji ; reminder ribbon # E0.7 [1] (🎗️) +1F399 FE0F ; Basic_Emoji ; studio microphone # E0.7 [1] (🎙️) +1F39A FE0F ; Basic_Emoji ; level slider # E0.7 [1] (🎚️) +1F39B FE0F ; Basic_Emoji ; control knobs # E0.7 [1] (🎛️) +1F39E FE0F ; Basic_Emoji ; film frames # E0.7 [1] (🎞️) +1F39F FE0F ; Basic_Emoji ; admission tickets # E0.7 [1] (🎟️) +1F3CB FE0F ; Basic_Emoji ; person lifting weights # E0.7 [1] (🏋️) +1F3CC FE0F ; Basic_Emoji ; person golfing # E0.7 [1] (🏌️) +1F3CD FE0F ; Basic_Emoji ; motorcycle # E0.7 [1] (🏍️) +1F3CE FE0F ; Basic_Emoji ; racing car # E0.7 [1] (🏎️) +1F3D4 FE0F ; Basic_Emoji ; snow-capped mountain # E0.7 [1] (🏔️) +1F3D5 FE0F ; Basic_Emoji ; camping # E0.7 [1] (🏕️) +1F3D6 FE0F ; Basic_Emoji ; beach with umbrella # E0.7 [1] (🏖️) +1F3D7 FE0F ; Basic_Emoji ; building construction # E0.7 [1] (🏗️) +1F3D8 FE0F ; Basic_Emoji ; houses # E0.7 [1] (🏘️) +1F3D9 FE0F ; Basic_Emoji ; cityscape # E0.7 [1] (🏙️) +1F3DA FE0F ; Basic_Emoji ; derelict house # E0.7 [1] (🏚️) +1F3DB FE0F ; Basic_Emoji ; classical building # E0.7 [1] (🏛️) +1F3DC FE0F ; Basic_Emoji ; desert # E0.7 [1] (🏜️) +1F3DD FE0F ; Basic_Emoji ; desert island # E0.7 [1] (🏝️) +1F3DE FE0F ; Basic_Emoji ; national park # E0.7 [1] (🏞️) +1F3DF FE0F ; Basic_Emoji ; stadium # E0.7 [1] (🏟️) +1F3F3 FE0F ; Basic_Emoji ; white flag # E0.7 [1] (🏳️) +1F3F5 FE0F ; Basic_Emoji ; rosette # E0.7 [1] (🏵️) +1F3F7 FE0F ; Basic_Emoji ; label # E0.7 [1] (🏷️) +1F43F FE0F ; Basic_Emoji ; chipmunk # E0.7 [1] (🐿️) +1F441 FE0F ; Basic_Emoji ; eye # E0.7 [1] (👁️) +1F4FD FE0F ; Basic_Emoji ; film projector # E0.7 [1] (📽️) +1F549 FE0F ; Basic_Emoji ; om # E0.7 [1] (🕉️) +1F54A FE0F ; Basic_Emoji ; dove # E0.7 [1] (🕊️) +1F56F FE0F ; Basic_Emoji ; candle # E0.7 [1] (🕯️) +1F570 FE0F ; Basic_Emoji ; mantelpiece clock # E0.7 [1] (🕰️) +1F573 FE0F ; Basic_Emoji ; hole # E0.7 [1] (🕳️) +1F574 FE0F ; Basic_Emoji ; person in suit levitating # E0.7 [1] (🕴️) +1F575 FE0F ; Basic_Emoji ; detective # E0.7 [1] (🕵️) +1F576 FE0F ; Basic_Emoji ; sunglasses # E0.7 [1] (🕶️) +1F577 FE0F ; Basic_Emoji ; spider # E0.7 [1] (🕷️) +1F578 FE0F ; Basic_Emoji ; spider web # E0.7 [1] (🕸️) +1F579 FE0F ; Basic_Emoji ; joystick # E0.7 [1] (🕹️) +1F587 FE0F ; Basic_Emoji ; linked paperclips # E0.7 [1] (🖇️) +1F58A FE0F ; Basic_Emoji ; pen # E0.7 [1] (🖊️) +1F58B FE0F ; Basic_Emoji ; fountain pen # E0.7 [1] (🖋️) +1F58C FE0F ; Basic_Emoji ; paintbrush # E0.7 [1] (🖌️) +1F58D FE0F ; Basic_Emoji ; crayon # E0.7 [1] (🖍️) +1F590 FE0F ; Basic_Emoji ; hand with fingers splayed # E0.7 [1] (🖐️) +1F5A5 FE0F ; Basic_Emoji ; desktop computer # E0.7 [1] (🖥️) +1F5A8 FE0F ; Basic_Emoji ; printer # E0.7 [1] (🖨️) +1F5B1 FE0F ; Basic_Emoji ; computer mouse # E0.7 [1] (🖱️) +1F5B2 FE0F ; Basic_Emoji ; trackball # E0.7 [1] (🖲️) +1F5BC FE0F ; Basic_Emoji ; framed picture # E0.7 [1] (🖼️) +1F5C2 FE0F ; Basic_Emoji ; card index dividers # E0.7 [1] (🗂️) +1F5C3 FE0F ; Basic_Emoji ; card file box # E0.7 [1] (🗃️) +1F5C4 FE0F ; Basic_Emoji ; file cabinet # E0.7 [1] (🗄️) +1F5D1 FE0F ; Basic_Emoji ; wastebasket # E0.7 [1] (🗑️) +1F5D2 FE0F ; Basic_Emoji ; spiral notepad # E0.7 [1] (🗒️) +1F5D3 FE0F ; Basic_Emoji ; spiral calendar # E0.7 [1] (🗓️) +1F5DC FE0F ; Basic_Emoji ; clamp # E0.7 [1] (🗜️) +1F5DD FE0F ; Basic_Emoji ; old key # E0.7 [1] (🗝️) +1F5DE FE0F ; Basic_Emoji ; rolled-up newspaper # E0.7 [1] (🗞️) +1F5E1 FE0F ; Basic_Emoji ; dagger # E0.7 [1] (🗡️) +1F5E3 FE0F ; Basic_Emoji ; speaking head # E0.7 [1] (🗣️) +1F5E8 FE0F ; Basic_Emoji ; left speech bubble # E2.0 [1] (🗨️) +1F5EF FE0F ; Basic_Emoji ; right anger bubble # E0.7 [1] (🗯️) +1F5F3 FE0F ; Basic_Emoji ; ballot box with ballot # E0.7 [1] (🗳️) +1F5FA FE0F ; Basic_Emoji ; world map # E0.7 [1] (🗺️) +1F6CB FE0F ; Basic_Emoji ; couch and lamp # E0.7 [1] (🛋️) +1F6CD FE0F ; Basic_Emoji ; shopping bags # E0.7 [1] (🛍️) +1F6CE FE0F ; Basic_Emoji ; bellhop bell # E0.7 [1] (🛎️) +1F6CF FE0F ; Basic_Emoji ; bed # E0.7 [1] (🛏️) +1F6E0 FE0F ; Basic_Emoji ; hammer and wrench # E0.7 [1] (🛠️) +1F6E1 FE0F ; Basic_Emoji ; shield # E0.7 [1] (🛡️) +1F6E2 FE0F ; Basic_Emoji ; oil drum # E0.7 [1] (🛢️) +1F6E3 FE0F ; Basic_Emoji ; motorway # E0.7 [1] (🛣️) +1F6E4 FE0F ; Basic_Emoji ; railway track # E0.7 [1] (🛤️) +1F6E5 FE0F ; Basic_Emoji ; motor boat # E0.7 [1] (🛥️) +1F6E9 FE0F ; Basic_Emoji ; small airplane # E0.7 [1] (🛩️) +1F6F0 FE0F ; Basic_Emoji ; satellite # E0.7 [1] (🛰️) +1F6F3 FE0F ; Basic_Emoji ; passenger ship # E0.7 [1] (🛳️) + +# Total elements: 1366 + +# ================================================ + +# Emoji_Keycap_Sequence + +0023 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: \x{23} # E0.6 [1] (#️⃣) +002A FE0F 20E3; Emoji_Keycap_Sequence ; keycap: * # E2.0 [1] (*️⃣) +0030 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 0 # E0.6 [1] (0️⃣) +0031 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 1 # E0.6 [1] (1️⃣) +0032 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 2 # E0.6 [1] (2️⃣) +0033 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 3 # E0.6 [1] (3️⃣) +0034 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 4 # E0.6 [1] (4️⃣) +0035 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 5 # E0.6 [1] (5️⃣) +0036 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 6 # E0.6 [1] (6️⃣) +0037 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 7 # E0.6 [1] (7️⃣) +0038 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 8 # E0.6 [1] (8️⃣) +0039 FE0F 20E3; Emoji_Keycap_Sequence ; keycap: 9 # E0.6 [1] (9️⃣) + +# Total elements: 12 + +# ================================================ + +# RGI_Emoji_Flag_Sequence: This list does not include deprecated or macroregion flags, except for UN and EU. +# See Annex B of TR51 for more information. + +1F1E6 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: Ascension Island # E2.0 [1] (🇦🇨) +1F1E6 1F1E9 ; RGI_Emoji_Flag_Sequence ; flag: Andorra # E2.0 [1] (🇦🇩) +1F1E6 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: United Arab Emirates # E2.0 [1] (🇦🇪) +1F1E6 1F1EB ; RGI_Emoji_Flag_Sequence ; flag: Afghanistan # E2.0 [1] (🇦🇫) +1F1E6 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Antigua & Barbuda # E2.0 [1] (🇦🇬) +1F1E6 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: Anguilla # E2.0 [1] (🇦🇮) +1F1E6 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: Albania # E2.0 [1] (🇦🇱) +1F1E6 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Armenia # E2.0 [1] (🇦🇲) +1F1E6 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Angola # E2.0 [1] (🇦🇴) +1F1E6 1F1F6 ; RGI_Emoji_Flag_Sequence ; flag: Antarctica # E2.0 [1] (🇦🇶) +1F1E6 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Argentina # E2.0 [1] (🇦🇷) +1F1E6 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: American Samoa # E2.0 [1] (🇦🇸) +1F1E6 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Austria # E2.0 [1] (🇦🇹) +1F1E6 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: Australia # E2.0 [1] (🇦🇺) +1F1E6 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Aruba # E2.0 [1] (🇦🇼) +1F1E6 1F1FD ; RGI_Emoji_Flag_Sequence ; flag: Åland Islands # E2.0 [1] (🇦🇽) +1F1E6 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: Azerbaijan # E2.0 [1] (🇦🇿) +1F1E7 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Bosnia & Herzegovina # E2.0 [1] (🇧🇦) +1F1E7 1F1E7 ; RGI_Emoji_Flag_Sequence ; flag: Barbados # E2.0 [1] (🇧🇧) +1F1E7 1F1E9 ; RGI_Emoji_Flag_Sequence ; flag: Bangladesh # E2.0 [1] (🇧🇩) +1F1E7 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Belgium # E2.0 [1] (🇧🇪) +1F1E7 1F1EB ; RGI_Emoji_Flag_Sequence ; flag: Burkina Faso # E2.0 [1] (🇧🇫) +1F1E7 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Bulgaria # E2.0 [1] (🇧🇬) +1F1E7 1F1ED ; RGI_Emoji_Flag_Sequence ; flag: Bahrain # E2.0 [1] (🇧🇭) +1F1E7 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: Burundi # E2.0 [1] (🇧🇮) +1F1E7 1F1EF ; RGI_Emoji_Flag_Sequence ; flag: Benin # E2.0 [1] (🇧🇯) +1F1E7 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: St. Barthélemy # E2.0 [1] (🇧🇱) +1F1E7 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Bermuda # E2.0 [1] (🇧🇲) +1F1E7 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: Brunei # E2.0 [1] (🇧🇳) +1F1E7 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Bolivia # E2.0 [1] (🇧🇴) +1F1E7 1F1F6 ; RGI_Emoji_Flag_Sequence ; flag: Caribbean Netherlands # E2.0 [1] (🇧🇶) +1F1E7 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Brazil # E2.0 [1] (🇧🇷) +1F1E7 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: Bahamas # E2.0 [1] (🇧🇸) +1F1E7 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Bhutan # E2.0 [1] (🇧🇹) +1F1E7 1F1FB ; RGI_Emoji_Flag_Sequence ; flag: Bouvet Island # E2.0 [1] (🇧🇻) +1F1E7 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Botswana # E2.0 [1] (🇧🇼) +1F1E7 1F1FE ; RGI_Emoji_Flag_Sequence ; flag: Belarus # E2.0 [1] (🇧🇾) +1F1E7 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: Belize # E2.0 [1] (🇧🇿) +1F1E8 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Canada # E2.0 [1] (🇨🇦) +1F1E8 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: Cocos (Keeling) Islands # E2.0 [1] (🇨🇨) +1F1E8 1F1E9 ; RGI_Emoji_Flag_Sequence ; flag: Congo - Kinshasa # E2.0 [1] (🇨🇩) +1F1E8 1F1EB ; RGI_Emoji_Flag_Sequence ; flag: Central African Republic # E2.0 [1] (🇨🇫) +1F1E8 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Congo - Brazzaville # E2.0 [1] (🇨🇬) +1F1E8 1F1ED ; RGI_Emoji_Flag_Sequence ; flag: Switzerland # E2.0 [1] (🇨🇭) +1F1E8 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: Côte d’Ivoire # E2.0 [1] (🇨🇮) +1F1E8 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: Cook Islands # E2.0 [1] (🇨🇰) +1F1E8 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: Chile # E2.0 [1] (🇨🇱) +1F1E8 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Cameroon # E2.0 [1] (🇨🇲) +1F1E8 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: China # E0.6 [1] (🇨🇳) +1F1E8 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Colombia # E2.0 [1] (🇨🇴) +1F1E8 1F1F5 ; RGI_Emoji_Flag_Sequence ; flag: Clipperton Island # E2.0 [1] (🇨🇵) +1F1E8 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Costa Rica # E2.0 [1] (🇨🇷) +1F1E8 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: Cuba # E2.0 [1] (🇨🇺) +1F1E8 1F1FB ; RGI_Emoji_Flag_Sequence ; flag: Cape Verde # E2.0 [1] (🇨🇻) +1F1E8 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Curaçao # E2.0 [1] (🇨🇼) +1F1E8 1F1FD ; RGI_Emoji_Flag_Sequence ; flag: Christmas Island # E2.0 [1] (🇨🇽) +1F1E8 1F1FE ; RGI_Emoji_Flag_Sequence ; flag: Cyprus # E2.0 [1] (🇨🇾) +1F1E8 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: Czechia # E2.0 [1] (🇨🇿) +1F1E9 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Germany # E0.6 [1] (🇩🇪) +1F1E9 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Diego Garcia # E2.0 [1] (🇩🇬) +1F1E9 1F1EF ; RGI_Emoji_Flag_Sequence ; flag: Djibouti # E2.0 [1] (🇩🇯) +1F1E9 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: Denmark # E2.0 [1] (🇩🇰) +1F1E9 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Dominica # E2.0 [1] (🇩🇲) +1F1E9 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Dominican Republic # E2.0 [1] (🇩🇴) +1F1E9 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: Algeria # E2.0 [1] (🇩🇿) +1F1EA 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Ceuta & Melilla # E2.0 [1] (🇪🇦) +1F1EA 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: Ecuador # E2.0 [1] (🇪🇨) +1F1EA 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Estonia # E2.0 [1] (🇪🇪) +1F1EA 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Egypt # E2.0 [1] (🇪🇬) +1F1EA 1F1ED ; RGI_Emoji_Flag_Sequence ; flag: Western Sahara # E2.0 [1] (🇪🇭) +1F1EA 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Eritrea # E2.0 [1] (🇪🇷) +1F1EA 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: Spain # E0.6 [1] (🇪🇸) +1F1EA 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Ethiopia # E2.0 [1] (🇪🇹) +1F1EA 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: European Union # E2.0 [1] (🇪🇺) +1F1EB 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: Finland # E2.0 [1] (🇫🇮) +1F1EB 1F1EF ; RGI_Emoji_Flag_Sequence ; flag: Fiji # E2.0 [1] (🇫🇯) +1F1EB 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: Falkland Islands # E2.0 [1] (🇫🇰) +1F1EB 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Micronesia # E2.0 [1] (🇫🇲) +1F1EB 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Faroe Islands # E2.0 [1] (🇫🇴) +1F1EB 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: France # E0.6 [1] (🇫🇷) +1F1EC 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Gabon # E2.0 [1] (🇬🇦) +1F1EC 1F1E7 ; RGI_Emoji_Flag_Sequence ; flag: United Kingdom # E0.6 [1] (🇬🇧) +1F1EC 1F1E9 ; RGI_Emoji_Flag_Sequence ; flag: Grenada # E2.0 [1] (🇬🇩) +1F1EC 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Georgia # E2.0 [1] (🇬🇪) +1F1EC 1F1EB ; RGI_Emoji_Flag_Sequence ; flag: French Guiana # E2.0 [1] (🇬🇫) +1F1EC 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Guernsey # E2.0 [1] (🇬🇬) +1F1EC 1F1ED ; RGI_Emoji_Flag_Sequence ; flag: Ghana # E2.0 [1] (🇬🇭) +1F1EC 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: Gibraltar # E2.0 [1] (🇬🇮) +1F1EC 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: Greenland # E2.0 [1] (🇬🇱) +1F1EC 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Gambia # E2.0 [1] (🇬🇲) +1F1EC 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: Guinea # E2.0 [1] (🇬🇳) +1F1EC 1F1F5 ; RGI_Emoji_Flag_Sequence ; flag: Guadeloupe # E2.0 [1] (🇬🇵) +1F1EC 1F1F6 ; RGI_Emoji_Flag_Sequence ; flag: Equatorial Guinea # E2.0 [1] (🇬🇶) +1F1EC 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Greece # E2.0 [1] (🇬🇷) +1F1EC 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: South Georgia & South Sandwich Islands # E2.0 [1] (🇬🇸) +1F1EC 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Guatemala # E2.0 [1] (🇬🇹) +1F1EC 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: Guam # E2.0 [1] (🇬🇺) +1F1EC 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Guinea-Bissau # E2.0 [1] (🇬🇼) +1F1EC 1F1FE ; RGI_Emoji_Flag_Sequence ; flag: Guyana # E2.0 [1] (🇬🇾) +1F1ED 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: Hong Kong SAR China # E2.0 [1] (🇭🇰) +1F1ED 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Heard & McDonald Islands # E2.0 [1] (🇭🇲) +1F1ED 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: Honduras # E2.0 [1] (🇭🇳) +1F1ED 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Croatia # E2.0 [1] (🇭🇷) +1F1ED 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Haiti # E2.0 [1] (🇭🇹) +1F1ED 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: Hungary # E2.0 [1] (🇭🇺) +1F1EE 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: Canary Islands # E2.0 [1] (🇮🇨) +1F1EE 1F1E9 ; RGI_Emoji_Flag_Sequence ; flag: Indonesia # E2.0 [1] (🇮🇩) +1F1EE 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Ireland # E2.0 [1] (🇮🇪) +1F1EE 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: Israel # E2.0 [1] (🇮🇱) +1F1EE 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Isle of Man # E2.0 [1] (🇮🇲) +1F1EE 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: India # E2.0 [1] (🇮🇳) +1F1EE 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: British Indian Ocean Territory # E2.0 [1] (🇮🇴) +1F1EE 1F1F6 ; RGI_Emoji_Flag_Sequence ; flag: Iraq # E2.0 [1] (🇮🇶) +1F1EE 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Iran # E2.0 [1] (🇮🇷) +1F1EE 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: Iceland # E2.0 [1] (🇮🇸) +1F1EE 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Italy # E0.6 [1] (🇮🇹) +1F1EF 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Jersey # E2.0 [1] (🇯🇪) +1F1EF 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Jamaica # E2.0 [1] (🇯🇲) +1F1EF 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Jordan # E2.0 [1] (🇯🇴) +1F1EF 1F1F5 ; RGI_Emoji_Flag_Sequence ; flag: Japan # E0.6 [1] (🇯🇵) +1F1F0 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Kenya # E2.0 [1] (🇰🇪) +1F1F0 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Kyrgyzstan # E2.0 [1] (🇰🇬) +1F1F0 1F1ED ; RGI_Emoji_Flag_Sequence ; flag: Cambodia # E2.0 [1] (🇰🇭) +1F1F0 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: Kiribati # E2.0 [1] (🇰🇮) +1F1F0 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Comoros # E2.0 [1] (🇰🇲) +1F1F0 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: St. Kitts & Nevis # E2.0 [1] (🇰🇳) +1F1F0 1F1F5 ; RGI_Emoji_Flag_Sequence ; flag: North Korea # E2.0 [1] (🇰🇵) +1F1F0 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: South Korea # E0.6 [1] (🇰🇷) +1F1F0 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Kuwait # E2.0 [1] (🇰🇼) +1F1F0 1F1FE ; RGI_Emoji_Flag_Sequence ; flag: Cayman Islands # E2.0 [1] (🇰🇾) +1F1F0 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: Kazakhstan # E2.0 [1] (🇰🇿) +1F1F1 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Laos # E2.0 [1] (🇱🇦) +1F1F1 1F1E7 ; RGI_Emoji_Flag_Sequence ; flag: Lebanon # E2.0 [1] (🇱🇧) +1F1F1 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: St. Lucia # E2.0 [1] (🇱🇨) +1F1F1 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: Liechtenstein # E2.0 [1] (🇱🇮) +1F1F1 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: Sri Lanka # E2.0 [1] (🇱🇰) +1F1F1 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Liberia # E2.0 [1] (🇱🇷) +1F1F1 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: Lesotho # E2.0 [1] (🇱🇸) +1F1F1 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Lithuania # E2.0 [1] (🇱🇹) +1F1F1 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: Luxembourg # E2.0 [1] (🇱🇺) +1F1F1 1F1FB ; RGI_Emoji_Flag_Sequence ; flag: Latvia # E2.0 [1] (🇱🇻) +1F1F1 1F1FE ; RGI_Emoji_Flag_Sequence ; flag: Libya # E2.0 [1] (🇱🇾) +1F1F2 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Morocco # E2.0 [1] (🇲🇦) +1F1F2 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: Monaco # E2.0 [1] (🇲🇨) +1F1F2 1F1E9 ; RGI_Emoji_Flag_Sequence ; flag: Moldova # E2.0 [1] (🇲🇩) +1F1F2 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Montenegro # E2.0 [1] (🇲🇪) +1F1F2 1F1EB ; RGI_Emoji_Flag_Sequence ; flag: St. Martin # E2.0 [1] (🇲🇫) +1F1F2 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Madagascar # E2.0 [1] (🇲🇬) +1F1F2 1F1ED ; RGI_Emoji_Flag_Sequence ; flag: Marshall Islands # E2.0 [1] (🇲🇭) +1F1F2 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: North Macedonia # E2.0 [1] (🇲🇰) +1F1F2 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: Mali # E2.0 [1] (🇲🇱) +1F1F2 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Myanmar (Burma) # E2.0 [1] (🇲🇲) +1F1F2 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: Mongolia # E2.0 [1] (🇲🇳) +1F1F2 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Macao SAR China # E2.0 [1] (🇲🇴) +1F1F2 1F1F5 ; RGI_Emoji_Flag_Sequence ; flag: Northern Mariana Islands # E2.0 [1] (🇲🇵) +1F1F2 1F1F6 ; RGI_Emoji_Flag_Sequence ; flag: Martinique # E2.0 [1] (🇲🇶) +1F1F2 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Mauritania # E2.0 [1] (🇲🇷) +1F1F2 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: Montserrat # E2.0 [1] (🇲🇸) +1F1F2 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Malta # E2.0 [1] (🇲🇹) +1F1F2 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: Mauritius # E2.0 [1] (🇲🇺) +1F1F2 1F1FB ; RGI_Emoji_Flag_Sequence ; flag: Maldives # E2.0 [1] (🇲🇻) +1F1F2 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Malawi # E2.0 [1] (🇲🇼) +1F1F2 1F1FD ; RGI_Emoji_Flag_Sequence ; flag: Mexico # E2.0 [1] (🇲🇽) +1F1F2 1F1FE ; RGI_Emoji_Flag_Sequence ; flag: Malaysia # E2.0 [1] (🇲🇾) +1F1F2 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: Mozambique # E2.0 [1] (🇲🇿) +1F1F3 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Namibia # E2.0 [1] (🇳🇦) +1F1F3 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: New Caledonia # E2.0 [1] (🇳🇨) +1F1F3 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Niger # E2.0 [1] (🇳🇪) +1F1F3 1F1EB ; RGI_Emoji_Flag_Sequence ; flag: Norfolk Island # E2.0 [1] (🇳🇫) +1F1F3 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Nigeria # E2.0 [1] (🇳🇬) +1F1F3 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: Nicaragua # E2.0 [1] (🇳🇮) +1F1F3 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: Netherlands # E2.0 [1] (🇳🇱) +1F1F3 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Norway # E2.0 [1] (🇳🇴) +1F1F3 1F1F5 ; RGI_Emoji_Flag_Sequence ; flag: Nepal # E2.0 [1] (🇳🇵) +1F1F3 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Nauru # E2.0 [1] (🇳🇷) +1F1F3 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: Niue # E2.0 [1] (🇳🇺) +1F1F3 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: New Zealand # E2.0 [1] (🇳🇿) +1F1F4 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Oman # E2.0 [1] (🇴🇲) +1F1F5 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Panama # E2.0 [1] (🇵🇦) +1F1F5 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Peru # E2.0 [1] (🇵🇪) +1F1F5 1F1EB ; RGI_Emoji_Flag_Sequence ; flag: French Polynesia # E2.0 [1] (🇵🇫) +1F1F5 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Papua New Guinea # E2.0 [1] (🇵🇬) +1F1F5 1F1ED ; RGI_Emoji_Flag_Sequence ; flag: Philippines # E2.0 [1] (🇵🇭) +1F1F5 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: Pakistan # E2.0 [1] (🇵🇰) +1F1F5 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: Poland # E2.0 [1] (🇵🇱) +1F1F5 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: St. Pierre & Miquelon # E2.0 [1] (🇵🇲) +1F1F5 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: Pitcairn Islands # E2.0 [1] (🇵🇳) +1F1F5 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Puerto Rico # E2.0 [1] (🇵🇷) +1F1F5 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: Palestinian Territories # E2.0 [1] (🇵🇸) +1F1F5 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Portugal # E2.0 [1] (🇵🇹) +1F1F5 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Palau # E2.0 [1] (🇵🇼) +1F1F5 1F1FE ; RGI_Emoji_Flag_Sequence ; flag: Paraguay # E2.0 [1] (🇵🇾) +1F1F6 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Qatar # E2.0 [1] (🇶🇦) +1F1F7 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Réunion # E2.0 [1] (🇷🇪) +1F1F7 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Romania # E2.0 [1] (🇷🇴) +1F1F7 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: Serbia # E2.0 [1] (🇷🇸) +1F1F7 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: Russia # E0.6 [1] (🇷🇺) +1F1F7 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Rwanda # E2.0 [1] (🇷🇼) +1F1F8 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Saudi Arabia # E2.0 [1] (🇸🇦) +1F1F8 1F1E7 ; RGI_Emoji_Flag_Sequence ; flag: Solomon Islands # E2.0 [1] (🇸🇧) +1F1F8 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: Seychelles # E2.0 [1] (🇸🇨) +1F1F8 1F1E9 ; RGI_Emoji_Flag_Sequence ; flag: Sudan # E2.0 [1] (🇸🇩) +1F1F8 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Sweden # E2.0 [1] (🇸🇪) +1F1F8 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Singapore # E2.0 [1] (🇸🇬) +1F1F8 1F1ED ; RGI_Emoji_Flag_Sequence ; flag: St. Helena # E2.0 [1] (🇸🇭) +1F1F8 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: Slovenia # E2.0 [1] (🇸🇮) +1F1F8 1F1EF ; RGI_Emoji_Flag_Sequence ; flag: Svalbard & Jan Mayen # E2.0 [1] (🇸🇯) +1F1F8 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: Slovakia # E2.0 [1] (🇸🇰) +1F1F8 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: Sierra Leone # E2.0 [1] (🇸🇱) +1F1F8 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: San Marino # E2.0 [1] (🇸🇲) +1F1F8 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: Senegal # E2.0 [1] (🇸🇳) +1F1F8 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Somalia # E2.0 [1] (🇸🇴) +1F1F8 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Suriname # E2.0 [1] (🇸🇷) +1F1F8 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: South Sudan # E2.0 [1] (🇸🇸) +1F1F8 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: São Tomé & Príncipe # E2.0 [1] (🇸🇹) +1F1F8 1F1FB ; RGI_Emoji_Flag_Sequence ; flag: El Salvador # E2.0 [1] (🇸🇻) +1F1F8 1F1FD ; RGI_Emoji_Flag_Sequence ; flag: Sint Maarten # E2.0 [1] (🇸🇽) +1F1F8 1F1FE ; RGI_Emoji_Flag_Sequence ; flag: Syria # E2.0 [1] (🇸🇾) +1F1F8 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: Eswatini # E2.0 [1] (🇸🇿) +1F1F9 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Tristan da Cunha # E2.0 [1] (🇹🇦) +1F1F9 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: Turks & Caicos Islands # E2.0 [1] (🇹🇨) +1F1F9 1F1E9 ; RGI_Emoji_Flag_Sequence ; flag: Chad # E2.0 [1] (🇹🇩) +1F1F9 1F1EB ; RGI_Emoji_Flag_Sequence ; flag: French Southern Territories # E2.0 [1] (🇹🇫) +1F1F9 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Togo # E2.0 [1] (🇹🇬) +1F1F9 1F1ED ; RGI_Emoji_Flag_Sequence ; flag: Thailand # E2.0 [1] (🇹🇭) +1F1F9 1F1EF ; RGI_Emoji_Flag_Sequence ; flag: Tajikistan # E2.0 [1] (🇹🇯) +1F1F9 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: Tokelau # E2.0 [1] (🇹🇰) +1F1F9 1F1F1 ; RGI_Emoji_Flag_Sequence ; flag: Timor-Leste # E2.0 [1] (🇹🇱) +1F1F9 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Turkmenistan # E2.0 [1] (🇹🇲) +1F1F9 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: Tunisia # E2.0 [1] (🇹🇳) +1F1F9 1F1F4 ; RGI_Emoji_Flag_Sequence ; flag: Tonga # E2.0 [1] (🇹🇴) +1F1F9 1F1F7 ; RGI_Emoji_Flag_Sequence ; flag: Turkey # E2.0 [1] (🇹🇷) +1F1F9 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Trinidad & Tobago # E2.0 [1] (🇹🇹) +1F1F9 1F1FB ; RGI_Emoji_Flag_Sequence ; flag: Tuvalu # E2.0 [1] (🇹🇻) +1F1F9 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Taiwan # E2.0 [1] (🇹🇼) +1F1F9 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: Tanzania # E2.0 [1] (🇹🇿) +1F1FA 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Ukraine # E2.0 [1] (🇺🇦) +1F1FA 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: Uganda # E2.0 [1] (🇺🇬) +1F1FA 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: U.S. Outlying Islands # E2.0 [1] (🇺🇲) +1F1FA 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: United Nations # E4.0 [1] (🇺🇳) +1F1FA 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: United States # E0.6 [1] (🇺🇸) +1F1FA 1F1FE ; RGI_Emoji_Flag_Sequence ; flag: Uruguay # E2.0 [1] (🇺🇾) +1F1FA 1F1FF ; RGI_Emoji_Flag_Sequence ; flag: Uzbekistan # E2.0 [1] (🇺🇿) +1F1FB 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: Vatican City # E2.0 [1] (🇻🇦) +1F1FB 1F1E8 ; RGI_Emoji_Flag_Sequence ; flag: St. Vincent & Grenadines # E2.0 [1] (🇻🇨) +1F1FB 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Venezuela # E2.0 [1] (🇻🇪) +1F1FB 1F1EC ; RGI_Emoji_Flag_Sequence ; flag: British Virgin Islands # E2.0 [1] (🇻🇬) +1F1FB 1F1EE ; RGI_Emoji_Flag_Sequence ; flag: U.S. Virgin Islands # E2.0 [1] (🇻🇮) +1F1FB 1F1F3 ; RGI_Emoji_Flag_Sequence ; flag: Vietnam # E2.0 [1] (🇻🇳) +1F1FB 1F1FA ; RGI_Emoji_Flag_Sequence ; flag: Vanuatu # E2.0 [1] (🇻🇺) +1F1FC 1F1EB ; RGI_Emoji_Flag_Sequence ; flag: Wallis & Futuna # E2.0 [1] (🇼🇫) +1F1FC 1F1F8 ; RGI_Emoji_Flag_Sequence ; flag: Samoa # E2.0 [1] (🇼🇸) +1F1FD 1F1F0 ; RGI_Emoji_Flag_Sequence ; flag: Kosovo # E2.0 [1] (🇽🇰) +1F1FE 1F1EA ; RGI_Emoji_Flag_Sequence ; flag: Yemen # E2.0 [1] (🇾🇪) +1F1FE 1F1F9 ; RGI_Emoji_Flag_Sequence ; flag: Mayotte # E2.0 [1] (🇾🇹) +1F1FF 1F1E6 ; RGI_Emoji_Flag_Sequence ; flag: South Africa # E2.0 [1] (🇿🇦) +1F1FF 1F1F2 ; RGI_Emoji_Flag_Sequence ; flag: Zambia # E2.0 [1] (🇿🇲) +1F1FF 1F1FC ; RGI_Emoji_Flag_Sequence ; flag: Zimbabwe # E2.0 [1] (🇿🇼) + +# Total elements: 258 + +# ================================================ + +# RGI_Emoji_Tag_Sequence: See Annex C of TR51 for more information. + +1F3F4 E0067 E0062 E0065 E006E E0067 E007F; RGI_Emoji_Tag_Sequence; flag: England # E5.0 [1] (🏴󠁧󠁢󠁥󠁮󠁧󠁿) +1F3F4 E0067 E0062 E0073 E0063 E0074 E007F; RGI_Emoji_Tag_Sequence; flag: Scotland # E5.0 [1] (🏴󠁧󠁢󠁳󠁣󠁴󠁿) +1F3F4 E0067 E0062 E0077 E006C E0073 E007F; RGI_Emoji_Tag_Sequence; flag: Wales # E5.0 [1] (🏴󠁧󠁢󠁷󠁬󠁳󠁿) + +# Total elements: 3 + +# ================================================ + +# RGI_Emoji_Modifier_Sequence + +261D 1F3FB ; RGI_Emoji_Modifier_Sequence ; index pointing up: light skin tone # E1.0 [1] (☝🏻) +261D 1F3FC ; RGI_Emoji_Modifier_Sequence ; index pointing up: medium-light skin tone # E1.0 [1] (☝🏼) +261D 1F3FD ; RGI_Emoji_Modifier_Sequence ; index pointing up: medium skin tone # E1.0 [1] (☝🏽) +261D 1F3FE ; RGI_Emoji_Modifier_Sequence ; index pointing up: medium-dark skin tone # E1.0 [1] (☝🏾) +261D 1F3FF ; RGI_Emoji_Modifier_Sequence ; index pointing up: dark skin tone # E1.0 [1] (☝🏿) +26F9 1F3FB ; RGI_Emoji_Modifier_Sequence ; person bouncing ball: light skin tone # E2.0 [1] (⛹🏻) +26F9 1F3FC ; RGI_Emoji_Modifier_Sequence ; person bouncing ball: medium-light skin tone # E2.0 [1] (⛹🏼) +26F9 1F3FD ; RGI_Emoji_Modifier_Sequence ; person bouncing ball: medium skin tone # E2.0 [1] (⛹🏽) +26F9 1F3FE ; RGI_Emoji_Modifier_Sequence ; person bouncing ball: medium-dark skin tone # E2.0 [1] (⛹🏾) +26F9 1F3FF ; RGI_Emoji_Modifier_Sequence ; person bouncing ball: dark skin tone # E2.0 [1] (⛹🏿) +270A 1F3FB ; RGI_Emoji_Modifier_Sequence ; raised fist: light skin tone # E1.0 [1] (✊🏻) +270A 1F3FC ; RGI_Emoji_Modifier_Sequence ; raised fist: medium-light skin tone # E1.0 [1] (✊🏼) +270A 1F3FD ; RGI_Emoji_Modifier_Sequence ; raised fist: medium skin tone # E1.0 [1] (✊🏽) +270A 1F3FE ; RGI_Emoji_Modifier_Sequence ; raised fist: medium-dark skin tone # E1.0 [1] (✊🏾) +270A 1F3FF ; RGI_Emoji_Modifier_Sequence ; raised fist: dark skin tone # E1.0 [1] (✊🏿) +270B 1F3FB ; RGI_Emoji_Modifier_Sequence ; raised hand: light skin tone # E1.0 [1] (✋🏻) +270B 1F3FC ; RGI_Emoji_Modifier_Sequence ; raised hand: medium-light skin tone # E1.0 [1] (✋🏼) +270B 1F3FD ; RGI_Emoji_Modifier_Sequence ; raised hand: medium skin tone # E1.0 [1] (✋🏽) +270B 1F3FE ; RGI_Emoji_Modifier_Sequence ; raised hand: medium-dark skin tone # E1.0 [1] (✋🏾) +270B 1F3FF ; RGI_Emoji_Modifier_Sequence ; raised hand: dark skin tone # E1.0 [1] (✋🏿) +270C 1F3FB ; RGI_Emoji_Modifier_Sequence ; victory hand: light skin tone # E1.0 [1] (✌🏻) +270C 1F3FC ; RGI_Emoji_Modifier_Sequence ; victory hand: medium-light skin tone # E1.0 [1] (✌🏼) +270C 1F3FD ; RGI_Emoji_Modifier_Sequence ; victory hand: medium skin tone # E1.0 [1] (✌🏽) +270C 1F3FE ; RGI_Emoji_Modifier_Sequence ; victory hand: medium-dark skin tone # E1.0 [1] (✌🏾) +270C 1F3FF ; RGI_Emoji_Modifier_Sequence ; victory hand: dark skin tone # E1.0 [1] (✌🏿) +270D 1F3FB ; RGI_Emoji_Modifier_Sequence ; writing hand: light skin tone # E1.0 [1] (✍🏻) +270D 1F3FC ; RGI_Emoji_Modifier_Sequence ; writing hand: medium-light skin tone # E1.0 [1] (✍🏼) +270D 1F3FD ; RGI_Emoji_Modifier_Sequence ; writing hand: medium skin tone # E1.0 [1] (✍🏽) +270D 1F3FE ; RGI_Emoji_Modifier_Sequence ; writing hand: medium-dark skin tone # E1.0 [1] (✍🏾) +270D 1F3FF ; RGI_Emoji_Modifier_Sequence ; writing hand: dark skin tone # E1.0 [1] (✍🏿) +1F385 1F3FB ; RGI_Emoji_Modifier_Sequence ; Santa Claus: light skin tone # E1.0 [1] (🎅🏻) +1F385 1F3FC ; RGI_Emoji_Modifier_Sequence ; Santa Claus: medium-light skin tone # E1.0 [1] (🎅🏼) +1F385 1F3FD ; RGI_Emoji_Modifier_Sequence ; Santa Claus: medium skin tone # E1.0 [1] (🎅🏽) +1F385 1F3FE ; RGI_Emoji_Modifier_Sequence ; Santa Claus: medium-dark skin tone # E1.0 [1] (🎅🏾) +1F385 1F3FF ; RGI_Emoji_Modifier_Sequence ; Santa Claus: dark skin tone # E1.0 [1] (🎅🏿) +1F3C2 1F3FB ; RGI_Emoji_Modifier_Sequence ; snowboarder: light skin tone # E1.0 [1] (🏂🏻) +1F3C2 1F3FC ; RGI_Emoji_Modifier_Sequence ; snowboarder: medium-light skin tone # E1.0 [1] (🏂🏼) +1F3C2 1F3FD ; RGI_Emoji_Modifier_Sequence ; snowboarder: medium skin tone # E1.0 [1] (🏂🏽) +1F3C2 1F3FE ; RGI_Emoji_Modifier_Sequence ; snowboarder: medium-dark skin tone # E1.0 [1] (🏂🏾) +1F3C2 1F3FF ; RGI_Emoji_Modifier_Sequence ; snowboarder: dark skin tone # E1.0 [1] (🏂🏿) +1F3C3 1F3FB ; RGI_Emoji_Modifier_Sequence ; person running: light skin tone # E1.0 [1] (🏃🏻) +1F3C3 1F3FC ; RGI_Emoji_Modifier_Sequence ; person running: medium-light skin tone # E1.0 [1] (🏃🏼) +1F3C3 1F3FD ; RGI_Emoji_Modifier_Sequence ; person running: medium skin tone # E1.0 [1] (🏃🏽) +1F3C3 1F3FE ; RGI_Emoji_Modifier_Sequence ; person running: medium-dark skin tone # E1.0 [1] (🏃🏾) +1F3C3 1F3FF ; RGI_Emoji_Modifier_Sequence ; person running: dark skin tone # E1.0 [1] (🏃🏿) +1F3C4 1F3FB ; RGI_Emoji_Modifier_Sequence ; person surfing: light skin tone # E1.0 [1] (🏄🏻) +1F3C4 1F3FC ; RGI_Emoji_Modifier_Sequence ; person surfing: medium-light skin tone # E1.0 [1] (🏄🏼) +1F3C4 1F3FD ; RGI_Emoji_Modifier_Sequence ; person surfing: medium skin tone # E1.0 [1] (🏄🏽) +1F3C4 1F3FE ; RGI_Emoji_Modifier_Sequence ; person surfing: medium-dark skin tone # E1.0 [1] (🏄🏾) +1F3C4 1F3FF ; RGI_Emoji_Modifier_Sequence ; person surfing: dark skin tone # E1.0 [1] (🏄🏿) +1F3C7 1F3FB ; RGI_Emoji_Modifier_Sequence ; horse racing: light skin tone # E1.0 [1] (🏇🏻) +1F3C7 1F3FC ; RGI_Emoji_Modifier_Sequence ; horse racing: medium-light skin tone # E1.0 [1] (🏇🏼) +1F3C7 1F3FD ; RGI_Emoji_Modifier_Sequence ; horse racing: medium skin tone # E1.0 [1] (🏇🏽) +1F3C7 1F3FE ; RGI_Emoji_Modifier_Sequence ; horse racing: medium-dark skin tone # E1.0 [1] (🏇🏾) +1F3C7 1F3FF ; RGI_Emoji_Modifier_Sequence ; horse racing: dark skin tone # E1.0 [1] (🏇🏿) +1F3CA 1F3FB ; RGI_Emoji_Modifier_Sequence ; person swimming: light skin tone # E1.0 [1] (🏊🏻) +1F3CA 1F3FC ; RGI_Emoji_Modifier_Sequence ; person swimming: medium-light skin tone # E1.0 [1] (🏊🏼) +1F3CA 1F3FD ; RGI_Emoji_Modifier_Sequence ; person swimming: medium skin tone # E1.0 [1] (🏊🏽) +1F3CA 1F3FE ; RGI_Emoji_Modifier_Sequence ; person swimming: medium-dark skin tone # E1.0 [1] (🏊🏾) +1F3CA 1F3FF ; RGI_Emoji_Modifier_Sequence ; person swimming: dark skin tone # E1.0 [1] (🏊🏿) +1F3CB 1F3FB ; RGI_Emoji_Modifier_Sequence ; person lifting weights: light skin tone # E2.0 [1] (🏋🏻) +1F3CB 1F3FC ; RGI_Emoji_Modifier_Sequence ; person lifting weights: medium-light skin tone # E2.0 [1] (🏋🏼) +1F3CB 1F3FD ; RGI_Emoji_Modifier_Sequence ; person lifting weights: medium skin tone # E2.0 [1] (🏋🏽) +1F3CB 1F3FE ; RGI_Emoji_Modifier_Sequence ; person lifting weights: medium-dark skin tone # E2.0 [1] (🏋🏾) +1F3CB 1F3FF ; RGI_Emoji_Modifier_Sequence ; person lifting weights: dark skin tone # E2.0 [1] (🏋🏿) +1F3CC 1F3FB ; RGI_Emoji_Modifier_Sequence ; person golfing: light skin tone # E4.0 [1] (🏌🏻) +1F3CC 1F3FC ; RGI_Emoji_Modifier_Sequence ; person golfing: medium-light skin tone # E4.0 [1] (🏌🏼) +1F3CC 1F3FD ; RGI_Emoji_Modifier_Sequence ; person golfing: medium skin tone # E4.0 [1] (🏌🏽) +1F3CC 1F3FE ; RGI_Emoji_Modifier_Sequence ; person golfing: medium-dark skin tone # E4.0 [1] (🏌🏾) +1F3CC 1F3FF ; RGI_Emoji_Modifier_Sequence ; person golfing: dark skin tone # E4.0 [1] (🏌🏿) +1F442 1F3FB ; RGI_Emoji_Modifier_Sequence ; ear: light skin tone # E1.0 [1] (👂🏻) +1F442 1F3FC ; RGI_Emoji_Modifier_Sequence ; ear: medium-light skin tone # E1.0 [1] (👂🏼) +1F442 1F3FD ; RGI_Emoji_Modifier_Sequence ; ear: medium skin tone # E1.0 [1] (👂🏽) +1F442 1F3FE ; RGI_Emoji_Modifier_Sequence ; ear: medium-dark skin tone # E1.0 [1] (👂🏾) +1F442 1F3FF ; RGI_Emoji_Modifier_Sequence ; ear: dark skin tone # E1.0 [1] (👂🏿) +1F443 1F3FB ; RGI_Emoji_Modifier_Sequence ; nose: light skin tone # E1.0 [1] (👃🏻) +1F443 1F3FC ; RGI_Emoji_Modifier_Sequence ; nose: medium-light skin tone # E1.0 [1] (👃🏼) +1F443 1F3FD ; RGI_Emoji_Modifier_Sequence ; nose: medium skin tone # E1.0 [1] (👃🏽) +1F443 1F3FE ; RGI_Emoji_Modifier_Sequence ; nose: medium-dark skin tone # E1.0 [1] (👃🏾) +1F443 1F3FF ; RGI_Emoji_Modifier_Sequence ; nose: dark skin tone # E1.0 [1] (👃🏿) +1F446 1F3FB ; RGI_Emoji_Modifier_Sequence ; backhand index pointing up: light skin tone # E1.0 [1] (👆🏻) +1F446 1F3FC ; RGI_Emoji_Modifier_Sequence ; backhand index pointing up: medium-light skin tone # E1.0 [1] (👆🏼) +1F446 1F3FD ; RGI_Emoji_Modifier_Sequence ; backhand index pointing up: medium skin tone # E1.0 [1] (👆🏽) +1F446 1F3FE ; RGI_Emoji_Modifier_Sequence ; backhand index pointing up: medium-dark skin tone # E1.0 [1] (👆🏾) +1F446 1F3FF ; RGI_Emoji_Modifier_Sequence ; backhand index pointing up: dark skin tone # E1.0 [1] (👆🏿) +1F447 1F3FB ; RGI_Emoji_Modifier_Sequence ; backhand index pointing down: light skin tone # E1.0 [1] (👇🏻) +1F447 1F3FC ; RGI_Emoji_Modifier_Sequence ; backhand index pointing down: medium-light skin tone # E1.0 [1] (👇🏼) +1F447 1F3FD ; RGI_Emoji_Modifier_Sequence ; backhand index pointing down: medium skin tone # E1.0 [1] (👇🏽) +1F447 1F3FE ; RGI_Emoji_Modifier_Sequence ; backhand index pointing down: medium-dark skin tone # E1.0 [1] (👇🏾) +1F447 1F3FF ; RGI_Emoji_Modifier_Sequence ; backhand index pointing down: dark skin tone # E1.0 [1] (👇🏿) +1F448 1F3FB ; RGI_Emoji_Modifier_Sequence ; backhand index pointing left: light skin tone # E1.0 [1] (👈🏻) +1F448 1F3FC ; RGI_Emoji_Modifier_Sequence ; backhand index pointing left: medium-light skin tone # E1.0 [1] (👈🏼) +1F448 1F3FD ; RGI_Emoji_Modifier_Sequence ; backhand index pointing left: medium skin tone # E1.0 [1] (👈🏽) +1F448 1F3FE ; RGI_Emoji_Modifier_Sequence ; backhand index pointing left: medium-dark skin tone # E1.0 [1] (👈🏾) +1F448 1F3FF ; RGI_Emoji_Modifier_Sequence ; backhand index pointing left: dark skin tone # E1.0 [1] (👈🏿) +1F449 1F3FB ; RGI_Emoji_Modifier_Sequence ; backhand index pointing right: light skin tone # E1.0 [1] (👉🏻) +1F449 1F3FC ; RGI_Emoji_Modifier_Sequence ; backhand index pointing right: medium-light skin tone # E1.0 [1] (👉🏼) +1F449 1F3FD ; RGI_Emoji_Modifier_Sequence ; backhand index pointing right: medium skin tone # E1.0 [1] (👉🏽) +1F449 1F3FE ; RGI_Emoji_Modifier_Sequence ; backhand index pointing right: medium-dark skin tone # E1.0 [1] (👉🏾) +1F449 1F3FF ; RGI_Emoji_Modifier_Sequence ; backhand index pointing right: dark skin tone # E1.0 [1] (👉🏿) +1F44A 1F3FB ; RGI_Emoji_Modifier_Sequence ; oncoming fist: light skin tone # E1.0 [1] (👊🏻) +1F44A 1F3FC ; RGI_Emoji_Modifier_Sequence ; oncoming fist: medium-light skin tone # E1.0 [1] (👊🏼) +1F44A 1F3FD ; RGI_Emoji_Modifier_Sequence ; oncoming fist: medium skin tone # E1.0 [1] (👊🏽) +1F44A 1F3FE ; RGI_Emoji_Modifier_Sequence ; oncoming fist: medium-dark skin tone # E1.0 [1] (👊🏾) +1F44A 1F3FF ; RGI_Emoji_Modifier_Sequence ; oncoming fist: dark skin tone # E1.0 [1] (👊🏿) +1F44B 1F3FB ; RGI_Emoji_Modifier_Sequence ; waving hand: light skin tone # E1.0 [1] (👋🏻) +1F44B 1F3FC ; RGI_Emoji_Modifier_Sequence ; waving hand: medium-light skin tone # E1.0 [1] (👋🏼) +1F44B 1F3FD ; RGI_Emoji_Modifier_Sequence ; waving hand: medium skin tone # E1.0 [1] (👋🏽) +1F44B 1F3FE ; RGI_Emoji_Modifier_Sequence ; waving hand: medium-dark skin tone # E1.0 [1] (👋🏾) +1F44B 1F3FF ; RGI_Emoji_Modifier_Sequence ; waving hand: dark skin tone # E1.0 [1] (👋🏿) +1F44C 1F3FB ; RGI_Emoji_Modifier_Sequence ; OK hand: light skin tone # E1.0 [1] (👌🏻) +1F44C 1F3FC ; RGI_Emoji_Modifier_Sequence ; OK hand: medium-light skin tone # E1.0 [1] (👌🏼) +1F44C 1F3FD ; RGI_Emoji_Modifier_Sequence ; OK hand: medium skin tone # E1.0 [1] (👌🏽) +1F44C 1F3FE ; RGI_Emoji_Modifier_Sequence ; OK hand: medium-dark skin tone # E1.0 [1] (👌🏾) +1F44C 1F3FF ; RGI_Emoji_Modifier_Sequence ; OK hand: dark skin tone # E1.0 [1] (👌🏿) +1F44D 1F3FB ; RGI_Emoji_Modifier_Sequence ; thumbs up: light skin tone # E1.0 [1] (👍🏻) +1F44D 1F3FC ; RGI_Emoji_Modifier_Sequence ; thumbs up: medium-light skin tone # E1.0 [1] (👍🏼) +1F44D 1F3FD ; RGI_Emoji_Modifier_Sequence ; thumbs up: medium skin tone # E1.0 [1] (👍🏽) +1F44D 1F3FE ; RGI_Emoji_Modifier_Sequence ; thumbs up: medium-dark skin tone # E1.0 [1] (👍🏾) +1F44D 1F3FF ; RGI_Emoji_Modifier_Sequence ; thumbs up: dark skin tone # E1.0 [1] (👍🏿) +1F44E 1F3FB ; RGI_Emoji_Modifier_Sequence ; thumbs down: light skin tone # E1.0 [1] (👎🏻) +1F44E 1F3FC ; RGI_Emoji_Modifier_Sequence ; thumbs down: medium-light skin tone # E1.0 [1] (👎🏼) +1F44E 1F3FD ; RGI_Emoji_Modifier_Sequence ; thumbs down: medium skin tone # E1.0 [1] (👎🏽) +1F44E 1F3FE ; RGI_Emoji_Modifier_Sequence ; thumbs down: medium-dark skin tone # E1.0 [1] (👎🏾) +1F44E 1F3FF ; RGI_Emoji_Modifier_Sequence ; thumbs down: dark skin tone # E1.0 [1] (👎🏿) +1F44F 1F3FB ; RGI_Emoji_Modifier_Sequence ; clapping hands: light skin tone # E1.0 [1] (👏🏻) +1F44F 1F3FC ; RGI_Emoji_Modifier_Sequence ; clapping hands: medium-light skin tone # E1.0 [1] (👏🏼) +1F44F 1F3FD ; RGI_Emoji_Modifier_Sequence ; clapping hands: medium skin tone # E1.0 [1] (👏🏽) +1F44F 1F3FE ; RGI_Emoji_Modifier_Sequence ; clapping hands: medium-dark skin tone # E1.0 [1] (👏🏾) +1F44F 1F3FF ; RGI_Emoji_Modifier_Sequence ; clapping hands: dark skin tone # E1.0 [1] (👏🏿) +1F450 1F3FB ; RGI_Emoji_Modifier_Sequence ; open hands: light skin tone # E1.0 [1] (👐🏻) +1F450 1F3FC ; RGI_Emoji_Modifier_Sequence ; open hands: medium-light skin tone # E1.0 [1] (👐🏼) +1F450 1F3FD ; RGI_Emoji_Modifier_Sequence ; open hands: medium skin tone # E1.0 [1] (👐🏽) +1F450 1F3FE ; RGI_Emoji_Modifier_Sequence ; open hands: medium-dark skin tone # E1.0 [1] (👐🏾) +1F450 1F3FF ; RGI_Emoji_Modifier_Sequence ; open hands: dark skin tone # E1.0 [1] (👐🏿) +1F466 1F3FB ; RGI_Emoji_Modifier_Sequence ; boy: light skin tone # E1.0 [1] (👦🏻) +1F466 1F3FC ; RGI_Emoji_Modifier_Sequence ; boy: medium-light skin tone # E1.0 [1] (👦🏼) +1F466 1F3FD ; RGI_Emoji_Modifier_Sequence ; boy: medium skin tone # E1.0 [1] (👦🏽) +1F466 1F3FE ; RGI_Emoji_Modifier_Sequence ; boy: medium-dark skin tone # E1.0 [1] (👦🏾) +1F466 1F3FF ; RGI_Emoji_Modifier_Sequence ; boy: dark skin tone # E1.0 [1] (👦🏿) +1F467 1F3FB ; RGI_Emoji_Modifier_Sequence ; girl: light skin tone # E1.0 [1] (👧🏻) +1F467 1F3FC ; RGI_Emoji_Modifier_Sequence ; girl: medium-light skin tone # E1.0 [1] (👧🏼) +1F467 1F3FD ; RGI_Emoji_Modifier_Sequence ; girl: medium skin tone # E1.0 [1] (👧🏽) +1F467 1F3FE ; RGI_Emoji_Modifier_Sequence ; girl: medium-dark skin tone # E1.0 [1] (👧🏾) +1F467 1F3FF ; RGI_Emoji_Modifier_Sequence ; girl: dark skin tone # E1.0 [1] (👧🏿) +1F468 1F3FB ; RGI_Emoji_Modifier_Sequence ; man: light skin tone # E1.0 [1] (👨🏻) +1F468 1F3FC ; RGI_Emoji_Modifier_Sequence ; man: medium-light skin tone # E1.0 [1] (👨🏼) +1F468 1F3FD ; RGI_Emoji_Modifier_Sequence ; man: medium skin tone # E1.0 [1] (👨🏽) +1F468 1F3FE ; RGI_Emoji_Modifier_Sequence ; man: medium-dark skin tone # E1.0 [1] (👨🏾) +1F468 1F3FF ; RGI_Emoji_Modifier_Sequence ; man: dark skin tone # E1.0 [1] (👨🏿) +1F469 1F3FB ; RGI_Emoji_Modifier_Sequence ; woman: light skin tone # E1.0 [1] (👩🏻) +1F469 1F3FC ; RGI_Emoji_Modifier_Sequence ; woman: medium-light skin tone # E1.0 [1] (👩🏼) +1F469 1F3FD ; RGI_Emoji_Modifier_Sequence ; woman: medium skin tone # E1.0 [1] (👩🏽) +1F469 1F3FE ; RGI_Emoji_Modifier_Sequence ; woman: medium-dark skin tone # E1.0 [1] (👩🏾) +1F469 1F3FF ; RGI_Emoji_Modifier_Sequence ; woman: dark skin tone # E1.0 [1] (👩🏿) +1F46B 1F3FB ; RGI_Emoji_Modifier_Sequence ; woman and man holding hands: light skin tone # E12.0 [1] (👫🏻) +1F46B 1F3FC ; RGI_Emoji_Modifier_Sequence ; woman and man holding hands: medium-light skin tone # E12.0 [1] (👫🏼) +1F46B 1F3FD ; RGI_Emoji_Modifier_Sequence ; woman and man holding hands: medium skin tone # E12.0 [1] (👫🏽) +1F46B 1F3FE ; RGI_Emoji_Modifier_Sequence ; woman and man holding hands: medium-dark skin tone # E12.0 [1] (👫🏾) +1F46B 1F3FF ; RGI_Emoji_Modifier_Sequence ; woman and man holding hands: dark skin tone # E12.0 [1] (👫🏿) +1F46C 1F3FB ; RGI_Emoji_Modifier_Sequence ; men holding hands: light skin tone # E12.0 [1] (👬🏻) +1F46C 1F3FC ; RGI_Emoji_Modifier_Sequence ; men holding hands: medium-light skin tone # E12.0 [1] (👬🏼) +1F46C 1F3FD ; RGI_Emoji_Modifier_Sequence ; men holding hands: medium skin tone # E12.0 [1] (👬🏽) +1F46C 1F3FE ; RGI_Emoji_Modifier_Sequence ; men holding hands: medium-dark skin tone # E12.0 [1] (👬🏾) +1F46C 1F3FF ; RGI_Emoji_Modifier_Sequence ; men holding hands: dark skin tone # E12.0 [1] (👬🏿) +1F46D 1F3FB ; RGI_Emoji_Modifier_Sequence ; women holding hands: light skin tone # E12.0 [1] (👭🏻) +1F46D 1F3FC ; RGI_Emoji_Modifier_Sequence ; women holding hands: medium-light skin tone # E12.0 [1] (👭🏼) +1F46D 1F3FD ; RGI_Emoji_Modifier_Sequence ; women holding hands: medium skin tone # E12.0 [1] (👭🏽) +1F46D 1F3FE ; RGI_Emoji_Modifier_Sequence ; women holding hands: medium-dark skin tone # E12.0 [1] (👭🏾) +1F46D 1F3FF ; RGI_Emoji_Modifier_Sequence ; women holding hands: dark skin tone # E12.0 [1] (👭🏿) +1F46E 1F3FB ; RGI_Emoji_Modifier_Sequence ; police officer: light skin tone # E1.0 [1] (👮🏻) +1F46E 1F3FC ; RGI_Emoji_Modifier_Sequence ; police officer: medium-light skin tone # E1.0 [1] (👮🏼) +1F46E 1F3FD ; RGI_Emoji_Modifier_Sequence ; police officer: medium skin tone # E1.0 [1] (👮🏽) +1F46E 1F3FE ; RGI_Emoji_Modifier_Sequence ; police officer: medium-dark skin tone # E1.0 [1] (👮🏾) +1F46E 1F3FF ; RGI_Emoji_Modifier_Sequence ; police officer: dark skin tone # E1.0 [1] (👮🏿) +1F470 1F3FB ; RGI_Emoji_Modifier_Sequence ; person with veil: light skin tone # E1.0 [1] (👰🏻) +1F470 1F3FC ; RGI_Emoji_Modifier_Sequence ; person with veil: medium-light skin tone # E1.0 [1] (👰🏼) +1F470 1F3FD ; RGI_Emoji_Modifier_Sequence ; person with veil: medium skin tone # E1.0 [1] (👰🏽) +1F470 1F3FE ; RGI_Emoji_Modifier_Sequence ; person with veil: medium-dark skin tone # E1.0 [1] (👰🏾) +1F470 1F3FF ; RGI_Emoji_Modifier_Sequence ; person with veil: dark skin tone # E1.0 [1] (👰🏿) +1F471 1F3FB ; RGI_Emoji_Modifier_Sequence ; person: light skin tone, blond hair # E1.0 [1] (👱🏻) +1F471 1F3FC ; RGI_Emoji_Modifier_Sequence ; person: medium-light skin tone, blond hair # E1.0 [1] (👱🏼) +1F471 1F3FD ; RGI_Emoji_Modifier_Sequence ; person: medium skin tone, blond hair # E1.0 [1] (👱🏽) +1F471 1F3FE ; RGI_Emoji_Modifier_Sequence ; person: medium-dark skin tone, blond hair # E1.0 [1] (👱🏾) +1F471 1F3FF ; RGI_Emoji_Modifier_Sequence ; person: dark skin tone, blond hair # E1.0 [1] (👱🏿) +1F472 1F3FB ; RGI_Emoji_Modifier_Sequence ; person with skullcap: light skin tone # E1.0 [1] (👲🏻) +1F472 1F3FC ; RGI_Emoji_Modifier_Sequence ; person with skullcap: medium-light skin tone # E1.0 [1] (👲🏼) +1F472 1F3FD ; RGI_Emoji_Modifier_Sequence ; person with skullcap: medium skin tone # E1.0 [1] (👲🏽) +1F472 1F3FE ; RGI_Emoji_Modifier_Sequence ; person with skullcap: medium-dark skin tone # E1.0 [1] (👲🏾) +1F472 1F3FF ; RGI_Emoji_Modifier_Sequence ; person with skullcap: dark skin tone # E1.0 [1] (👲🏿) +1F473 1F3FB ; RGI_Emoji_Modifier_Sequence ; person wearing turban: light skin tone # E1.0 [1] (👳🏻) +1F473 1F3FC ; RGI_Emoji_Modifier_Sequence ; person wearing turban: medium-light skin tone # E1.0 [1] (👳🏼) +1F473 1F3FD ; RGI_Emoji_Modifier_Sequence ; person wearing turban: medium skin tone # E1.0 [1] (👳🏽) +1F473 1F3FE ; RGI_Emoji_Modifier_Sequence ; person wearing turban: medium-dark skin tone # E1.0 [1] (👳🏾) +1F473 1F3FF ; RGI_Emoji_Modifier_Sequence ; person wearing turban: dark skin tone # E1.0 [1] (👳🏿) +1F474 1F3FB ; RGI_Emoji_Modifier_Sequence ; old man: light skin tone # E1.0 [1] (👴🏻) +1F474 1F3FC ; RGI_Emoji_Modifier_Sequence ; old man: medium-light skin tone # E1.0 [1] (👴🏼) +1F474 1F3FD ; RGI_Emoji_Modifier_Sequence ; old man: medium skin tone # E1.0 [1] (👴🏽) +1F474 1F3FE ; RGI_Emoji_Modifier_Sequence ; old man: medium-dark skin tone # E1.0 [1] (👴🏾) +1F474 1F3FF ; RGI_Emoji_Modifier_Sequence ; old man: dark skin tone # E1.0 [1] (👴🏿) +1F475 1F3FB ; RGI_Emoji_Modifier_Sequence ; old woman: light skin tone # E1.0 [1] (👵🏻) +1F475 1F3FC ; RGI_Emoji_Modifier_Sequence ; old woman: medium-light skin tone # E1.0 [1] (👵🏼) +1F475 1F3FD ; RGI_Emoji_Modifier_Sequence ; old woman: medium skin tone # E1.0 [1] (👵🏽) +1F475 1F3FE ; RGI_Emoji_Modifier_Sequence ; old woman: medium-dark skin tone # E1.0 [1] (👵🏾) +1F475 1F3FF ; RGI_Emoji_Modifier_Sequence ; old woman: dark skin tone # E1.0 [1] (👵🏿) +1F476 1F3FB ; RGI_Emoji_Modifier_Sequence ; baby: light skin tone # E1.0 [1] (👶🏻) +1F476 1F3FC ; RGI_Emoji_Modifier_Sequence ; baby: medium-light skin tone # E1.0 [1] (👶🏼) +1F476 1F3FD ; RGI_Emoji_Modifier_Sequence ; baby: medium skin tone # E1.0 [1] (👶🏽) +1F476 1F3FE ; RGI_Emoji_Modifier_Sequence ; baby: medium-dark skin tone # E1.0 [1] (👶🏾) +1F476 1F3FF ; RGI_Emoji_Modifier_Sequence ; baby: dark skin tone # E1.0 [1] (👶🏿) +1F477 1F3FB ; RGI_Emoji_Modifier_Sequence ; construction worker: light skin tone # E1.0 [1] (👷🏻) +1F477 1F3FC ; RGI_Emoji_Modifier_Sequence ; construction worker: medium-light skin tone # E1.0 [1] (👷🏼) +1F477 1F3FD ; RGI_Emoji_Modifier_Sequence ; construction worker: medium skin tone # E1.0 [1] (👷🏽) +1F477 1F3FE ; RGI_Emoji_Modifier_Sequence ; construction worker: medium-dark skin tone # E1.0 [1] (👷🏾) +1F477 1F3FF ; RGI_Emoji_Modifier_Sequence ; construction worker: dark skin tone # E1.0 [1] (👷🏿) +1F478 1F3FB ; RGI_Emoji_Modifier_Sequence ; princess: light skin tone # E1.0 [1] (👸🏻) +1F478 1F3FC ; RGI_Emoji_Modifier_Sequence ; princess: medium-light skin tone # E1.0 [1] (👸🏼) +1F478 1F3FD ; RGI_Emoji_Modifier_Sequence ; princess: medium skin tone # E1.0 [1] (👸🏽) +1F478 1F3FE ; RGI_Emoji_Modifier_Sequence ; princess: medium-dark skin tone # E1.0 [1] (👸🏾) +1F478 1F3FF ; RGI_Emoji_Modifier_Sequence ; princess: dark skin tone # E1.0 [1] (👸🏿) +1F47C 1F3FB ; RGI_Emoji_Modifier_Sequence ; baby angel: light skin tone # E1.0 [1] (👼🏻) +1F47C 1F3FC ; RGI_Emoji_Modifier_Sequence ; baby angel: medium-light skin tone # E1.0 [1] (👼🏼) +1F47C 1F3FD ; RGI_Emoji_Modifier_Sequence ; baby angel: medium skin tone # E1.0 [1] (👼🏽) +1F47C 1F3FE ; RGI_Emoji_Modifier_Sequence ; baby angel: medium-dark skin tone # E1.0 [1] (👼🏾) +1F47C 1F3FF ; RGI_Emoji_Modifier_Sequence ; baby angel: dark skin tone # E1.0 [1] (👼🏿) +1F481 1F3FB ; RGI_Emoji_Modifier_Sequence ; person tipping hand: light skin tone # E1.0 [1] (💁🏻) +1F481 1F3FC ; RGI_Emoji_Modifier_Sequence ; person tipping hand: medium-light skin tone # E1.0 [1] (💁🏼) +1F481 1F3FD ; RGI_Emoji_Modifier_Sequence ; person tipping hand: medium skin tone # E1.0 [1] (💁🏽) +1F481 1F3FE ; RGI_Emoji_Modifier_Sequence ; person tipping hand: medium-dark skin tone # E1.0 [1] (💁🏾) +1F481 1F3FF ; RGI_Emoji_Modifier_Sequence ; person tipping hand: dark skin tone # E1.0 [1] (💁🏿) +1F482 1F3FB ; RGI_Emoji_Modifier_Sequence ; guard: light skin tone # E1.0 [1] (💂🏻) +1F482 1F3FC ; RGI_Emoji_Modifier_Sequence ; guard: medium-light skin tone # E1.0 [1] (💂🏼) +1F482 1F3FD ; RGI_Emoji_Modifier_Sequence ; guard: medium skin tone # E1.0 [1] (💂🏽) +1F482 1F3FE ; RGI_Emoji_Modifier_Sequence ; guard: medium-dark skin tone # E1.0 [1] (💂🏾) +1F482 1F3FF ; RGI_Emoji_Modifier_Sequence ; guard: dark skin tone # E1.0 [1] (💂🏿) +1F483 1F3FB ; RGI_Emoji_Modifier_Sequence ; woman dancing: light skin tone # E1.0 [1] (💃🏻) +1F483 1F3FC ; RGI_Emoji_Modifier_Sequence ; woman dancing: medium-light skin tone # E1.0 [1] (💃🏼) +1F483 1F3FD ; RGI_Emoji_Modifier_Sequence ; woman dancing: medium skin tone # E1.0 [1] (💃🏽) +1F483 1F3FE ; RGI_Emoji_Modifier_Sequence ; woman dancing: medium-dark skin tone # E1.0 [1] (💃🏾) +1F483 1F3FF ; RGI_Emoji_Modifier_Sequence ; woman dancing: dark skin tone # E1.0 [1] (💃🏿) +1F485 1F3FB ; RGI_Emoji_Modifier_Sequence ; nail polish: light skin tone # E1.0 [1] (💅🏻) +1F485 1F3FC ; RGI_Emoji_Modifier_Sequence ; nail polish: medium-light skin tone # E1.0 [1] (💅🏼) +1F485 1F3FD ; RGI_Emoji_Modifier_Sequence ; nail polish: medium skin tone # E1.0 [1] (💅🏽) +1F485 1F3FE ; RGI_Emoji_Modifier_Sequence ; nail polish: medium-dark skin tone # E1.0 [1] (💅🏾) +1F485 1F3FF ; RGI_Emoji_Modifier_Sequence ; nail polish: dark skin tone # E1.0 [1] (💅🏿) +1F486 1F3FB ; RGI_Emoji_Modifier_Sequence ; person getting massage: light skin tone # E1.0 [1] (💆🏻) +1F486 1F3FC ; RGI_Emoji_Modifier_Sequence ; person getting massage: medium-light skin tone # E1.0 [1] (💆🏼) +1F486 1F3FD ; RGI_Emoji_Modifier_Sequence ; person getting massage: medium skin tone # E1.0 [1] (💆🏽) +1F486 1F3FE ; RGI_Emoji_Modifier_Sequence ; person getting massage: medium-dark skin tone # E1.0 [1] (💆🏾) +1F486 1F3FF ; RGI_Emoji_Modifier_Sequence ; person getting massage: dark skin tone # E1.0 [1] (💆🏿) +1F487 1F3FB ; RGI_Emoji_Modifier_Sequence ; person getting haircut: light skin tone # E1.0 [1] (💇🏻) +1F487 1F3FC ; RGI_Emoji_Modifier_Sequence ; person getting haircut: medium-light skin tone # E1.0 [1] (💇🏼) +1F487 1F3FD ; RGI_Emoji_Modifier_Sequence ; person getting haircut: medium skin tone # E1.0 [1] (💇🏽) +1F487 1F3FE ; RGI_Emoji_Modifier_Sequence ; person getting haircut: medium-dark skin tone # E1.0 [1] (💇🏾) +1F487 1F3FF ; RGI_Emoji_Modifier_Sequence ; person getting haircut: dark skin tone # E1.0 [1] (💇🏿) +1F48F 1F3FB ; RGI_Emoji_Modifier_Sequence ; kiss: light skin tone # E13.1 [1] (💏🏻) +1F48F 1F3FC ; RGI_Emoji_Modifier_Sequence ; kiss: medium-light skin tone # E13.1 [1] (💏🏼) +1F48F 1F3FD ; RGI_Emoji_Modifier_Sequence ; kiss: medium skin tone # E13.1 [1] (💏🏽) +1F48F 1F3FE ; RGI_Emoji_Modifier_Sequence ; kiss: medium-dark skin tone # E13.1 [1] (💏🏾) +1F48F 1F3FF ; RGI_Emoji_Modifier_Sequence ; kiss: dark skin tone # E13.1 [1] (💏🏿) +1F491 1F3FB ; RGI_Emoji_Modifier_Sequence ; couple with heart: light skin tone # E13.1 [1] (💑🏻) +1F491 1F3FC ; RGI_Emoji_Modifier_Sequence ; couple with heart: medium-light skin tone # E13.1 [1] (💑🏼) +1F491 1F3FD ; RGI_Emoji_Modifier_Sequence ; couple with heart: medium skin tone # E13.1 [1] (💑🏽) +1F491 1F3FE ; RGI_Emoji_Modifier_Sequence ; couple with heart: medium-dark skin tone # E13.1 [1] (💑🏾) +1F491 1F3FF ; RGI_Emoji_Modifier_Sequence ; couple with heart: dark skin tone # E13.1 [1] (💑🏿) +1F4AA 1F3FB ; RGI_Emoji_Modifier_Sequence ; flexed biceps: light skin tone # E1.0 [1] (💪🏻) +1F4AA 1F3FC ; RGI_Emoji_Modifier_Sequence ; flexed biceps: medium-light skin tone # E1.0 [1] (💪🏼) +1F4AA 1F3FD ; RGI_Emoji_Modifier_Sequence ; flexed biceps: medium skin tone # E1.0 [1] (💪🏽) +1F4AA 1F3FE ; RGI_Emoji_Modifier_Sequence ; flexed biceps: medium-dark skin tone # E1.0 [1] (💪🏾) +1F4AA 1F3FF ; RGI_Emoji_Modifier_Sequence ; flexed biceps: dark skin tone # E1.0 [1] (💪🏿) +1F574 1F3FB ; RGI_Emoji_Modifier_Sequence ; person in suit levitating: light skin tone # E4.0 [1] (🕴🏻) +1F574 1F3FC ; RGI_Emoji_Modifier_Sequence ; person in suit levitating: medium-light skin tone # E4.0 [1] (🕴🏼) +1F574 1F3FD ; RGI_Emoji_Modifier_Sequence ; person in suit levitating: medium skin tone # E4.0 [1] (🕴🏽) +1F574 1F3FE ; RGI_Emoji_Modifier_Sequence ; person in suit levitating: medium-dark skin tone # E4.0 [1] (🕴🏾) +1F574 1F3FF ; RGI_Emoji_Modifier_Sequence ; person in suit levitating: dark skin tone # E4.0 [1] (🕴🏿) +1F575 1F3FB ; RGI_Emoji_Modifier_Sequence ; detective: light skin tone # E2.0 [1] (🕵🏻) +1F575 1F3FC ; RGI_Emoji_Modifier_Sequence ; detective: medium-light skin tone # E2.0 [1] (🕵🏼) +1F575 1F3FD ; RGI_Emoji_Modifier_Sequence ; detective: medium skin tone # E2.0 [1] (🕵🏽) +1F575 1F3FE ; RGI_Emoji_Modifier_Sequence ; detective: medium-dark skin tone # E2.0 [1] (🕵🏾) +1F575 1F3FF ; RGI_Emoji_Modifier_Sequence ; detective: dark skin tone # E2.0 [1] (🕵🏿) +1F57A 1F3FB ; RGI_Emoji_Modifier_Sequence ; man dancing: light skin tone # E3.0 [1] (🕺🏻) +1F57A 1F3FC ; RGI_Emoji_Modifier_Sequence ; man dancing: medium-light skin tone # E3.0 [1] (🕺🏼) +1F57A 1F3FD ; RGI_Emoji_Modifier_Sequence ; man dancing: medium skin tone # E3.0 [1] (🕺🏽) +1F57A 1F3FE ; RGI_Emoji_Modifier_Sequence ; man dancing: medium-dark skin tone # E3.0 [1] (🕺🏾) +1F57A 1F3FF ; RGI_Emoji_Modifier_Sequence ; man dancing: dark skin tone # E3.0 [1] (🕺🏿) +1F590 1F3FB ; RGI_Emoji_Modifier_Sequence ; hand with fingers splayed: light skin tone # E1.0 [1] (🖐🏻) +1F590 1F3FC ; RGI_Emoji_Modifier_Sequence ; hand with fingers splayed: medium-light skin tone # E1.0 [1] (🖐🏼) +1F590 1F3FD ; RGI_Emoji_Modifier_Sequence ; hand with fingers splayed: medium skin tone # E1.0 [1] (🖐🏽) +1F590 1F3FE ; RGI_Emoji_Modifier_Sequence ; hand with fingers splayed: medium-dark skin tone # E1.0 [1] (🖐🏾) +1F590 1F3FF ; RGI_Emoji_Modifier_Sequence ; hand with fingers splayed: dark skin tone # E1.0 [1] (🖐🏿) +1F595 1F3FB ; RGI_Emoji_Modifier_Sequence ; middle finger: light skin tone # E1.0 [1] (🖕🏻) +1F595 1F3FC ; RGI_Emoji_Modifier_Sequence ; middle finger: medium-light skin tone # E1.0 [1] (🖕🏼) +1F595 1F3FD ; RGI_Emoji_Modifier_Sequence ; middle finger: medium skin tone # E1.0 [1] (🖕🏽) +1F595 1F3FE ; RGI_Emoji_Modifier_Sequence ; middle finger: medium-dark skin tone # E1.0 [1] (🖕🏾) +1F595 1F3FF ; RGI_Emoji_Modifier_Sequence ; middle finger: dark skin tone # E1.0 [1] (🖕🏿) +1F596 1F3FB ; RGI_Emoji_Modifier_Sequence ; vulcan salute: light skin tone # E1.0 [1] (🖖🏻) +1F596 1F3FC ; RGI_Emoji_Modifier_Sequence ; vulcan salute: medium-light skin tone # E1.0 [1] (🖖🏼) +1F596 1F3FD ; RGI_Emoji_Modifier_Sequence ; vulcan salute: medium skin tone # E1.0 [1] (🖖🏽) +1F596 1F3FE ; RGI_Emoji_Modifier_Sequence ; vulcan salute: medium-dark skin tone # E1.0 [1] (🖖🏾) +1F596 1F3FF ; RGI_Emoji_Modifier_Sequence ; vulcan salute: dark skin tone # E1.0 [1] (🖖🏿) +1F645 1F3FB ; RGI_Emoji_Modifier_Sequence ; person gesturing NO: light skin tone # E1.0 [1] (🙅🏻) +1F645 1F3FC ; RGI_Emoji_Modifier_Sequence ; person gesturing NO: medium-light skin tone # E1.0 [1] (🙅🏼) +1F645 1F3FD ; RGI_Emoji_Modifier_Sequence ; person gesturing NO: medium skin tone # E1.0 [1] (🙅🏽) +1F645 1F3FE ; RGI_Emoji_Modifier_Sequence ; person gesturing NO: medium-dark skin tone # E1.0 [1] (🙅🏾) +1F645 1F3FF ; RGI_Emoji_Modifier_Sequence ; person gesturing NO: dark skin tone # E1.0 [1] (🙅🏿) +1F646 1F3FB ; RGI_Emoji_Modifier_Sequence ; person gesturing OK: light skin tone # E1.0 [1] (🙆🏻) +1F646 1F3FC ; RGI_Emoji_Modifier_Sequence ; person gesturing OK: medium-light skin tone # E1.0 [1] (🙆🏼) +1F646 1F3FD ; RGI_Emoji_Modifier_Sequence ; person gesturing OK: medium skin tone # E1.0 [1] (🙆🏽) +1F646 1F3FE ; RGI_Emoji_Modifier_Sequence ; person gesturing OK: medium-dark skin tone # E1.0 [1] (🙆🏾) +1F646 1F3FF ; RGI_Emoji_Modifier_Sequence ; person gesturing OK: dark skin tone # E1.0 [1] (🙆🏿) +1F647 1F3FB ; RGI_Emoji_Modifier_Sequence ; person bowing: light skin tone # E1.0 [1] (🙇🏻) +1F647 1F3FC ; RGI_Emoji_Modifier_Sequence ; person bowing: medium-light skin tone # E1.0 [1] (🙇🏼) +1F647 1F3FD ; RGI_Emoji_Modifier_Sequence ; person bowing: medium skin tone # E1.0 [1] (🙇🏽) +1F647 1F3FE ; RGI_Emoji_Modifier_Sequence ; person bowing: medium-dark skin tone # E1.0 [1] (🙇🏾) +1F647 1F3FF ; RGI_Emoji_Modifier_Sequence ; person bowing: dark skin tone # E1.0 [1] (🙇🏿) +1F64B 1F3FB ; RGI_Emoji_Modifier_Sequence ; person raising hand: light skin tone # E1.0 [1] (🙋🏻) +1F64B 1F3FC ; RGI_Emoji_Modifier_Sequence ; person raising hand: medium-light skin tone # E1.0 [1] (🙋🏼) +1F64B 1F3FD ; RGI_Emoji_Modifier_Sequence ; person raising hand: medium skin tone # E1.0 [1] (🙋🏽) +1F64B 1F3FE ; RGI_Emoji_Modifier_Sequence ; person raising hand: medium-dark skin tone # E1.0 [1] (🙋🏾) +1F64B 1F3FF ; RGI_Emoji_Modifier_Sequence ; person raising hand: dark skin tone # E1.0 [1] (🙋🏿) +1F64C 1F3FB ; RGI_Emoji_Modifier_Sequence ; raising hands: light skin tone # E1.0 [1] (🙌🏻) +1F64C 1F3FC ; RGI_Emoji_Modifier_Sequence ; raising hands: medium-light skin tone # E1.0 [1] (🙌🏼) +1F64C 1F3FD ; RGI_Emoji_Modifier_Sequence ; raising hands: medium skin tone # E1.0 [1] (🙌🏽) +1F64C 1F3FE ; RGI_Emoji_Modifier_Sequence ; raising hands: medium-dark skin tone # E1.0 [1] (🙌🏾) +1F64C 1F3FF ; RGI_Emoji_Modifier_Sequence ; raising hands: dark skin tone # E1.0 [1] (🙌🏿) +1F64D 1F3FB ; RGI_Emoji_Modifier_Sequence ; person frowning: light skin tone # E1.0 [1] (🙍🏻) +1F64D 1F3FC ; RGI_Emoji_Modifier_Sequence ; person frowning: medium-light skin tone # E1.0 [1] (🙍🏼) +1F64D 1F3FD ; RGI_Emoji_Modifier_Sequence ; person frowning: medium skin tone # E1.0 [1] (🙍🏽) +1F64D 1F3FE ; RGI_Emoji_Modifier_Sequence ; person frowning: medium-dark skin tone # E1.0 [1] (🙍🏾) +1F64D 1F3FF ; RGI_Emoji_Modifier_Sequence ; person frowning: dark skin tone # E1.0 [1] (🙍🏿) +1F64E 1F3FB ; RGI_Emoji_Modifier_Sequence ; person pouting: light skin tone # E1.0 [1] (🙎🏻) +1F64E 1F3FC ; RGI_Emoji_Modifier_Sequence ; person pouting: medium-light skin tone # E1.0 [1] (🙎🏼) +1F64E 1F3FD ; RGI_Emoji_Modifier_Sequence ; person pouting: medium skin tone # E1.0 [1] (🙎🏽) +1F64E 1F3FE ; RGI_Emoji_Modifier_Sequence ; person pouting: medium-dark skin tone # E1.0 [1] (🙎🏾) +1F64E 1F3FF ; RGI_Emoji_Modifier_Sequence ; person pouting: dark skin tone # E1.0 [1] (🙎🏿) +1F64F 1F3FB ; RGI_Emoji_Modifier_Sequence ; folded hands: light skin tone # E1.0 [1] (🙏🏻) +1F64F 1F3FC ; RGI_Emoji_Modifier_Sequence ; folded hands: medium-light skin tone # E1.0 [1] (🙏🏼) +1F64F 1F3FD ; RGI_Emoji_Modifier_Sequence ; folded hands: medium skin tone # E1.0 [1] (🙏🏽) +1F64F 1F3FE ; RGI_Emoji_Modifier_Sequence ; folded hands: medium-dark skin tone # E1.0 [1] (🙏🏾) +1F64F 1F3FF ; RGI_Emoji_Modifier_Sequence ; folded hands: dark skin tone # E1.0 [1] (🙏🏿) +1F6A3 1F3FB ; RGI_Emoji_Modifier_Sequence ; person rowing boat: light skin tone # E1.0 [1] (🚣🏻) +1F6A3 1F3FC ; RGI_Emoji_Modifier_Sequence ; person rowing boat: medium-light skin tone # E1.0 [1] (🚣🏼) +1F6A3 1F3FD ; RGI_Emoji_Modifier_Sequence ; person rowing boat: medium skin tone # E1.0 [1] (🚣🏽) +1F6A3 1F3FE ; RGI_Emoji_Modifier_Sequence ; person rowing boat: medium-dark skin tone # E1.0 [1] (🚣🏾) +1F6A3 1F3FF ; RGI_Emoji_Modifier_Sequence ; person rowing boat: dark skin tone # E1.0 [1] (🚣🏿) +1F6B4 1F3FB ; RGI_Emoji_Modifier_Sequence ; person biking: light skin tone # E1.0 [1] (🚴🏻) +1F6B4 1F3FC ; RGI_Emoji_Modifier_Sequence ; person biking: medium-light skin tone # E1.0 [1] (🚴🏼) +1F6B4 1F3FD ; RGI_Emoji_Modifier_Sequence ; person biking: medium skin tone # E1.0 [1] (🚴🏽) +1F6B4 1F3FE ; RGI_Emoji_Modifier_Sequence ; person biking: medium-dark skin tone # E1.0 [1] (🚴🏾) +1F6B4 1F3FF ; RGI_Emoji_Modifier_Sequence ; person biking: dark skin tone # E1.0 [1] (🚴🏿) +1F6B5 1F3FB ; RGI_Emoji_Modifier_Sequence ; person mountain biking: light skin tone # E1.0 [1] (🚵🏻) +1F6B5 1F3FC ; RGI_Emoji_Modifier_Sequence ; person mountain biking: medium-light skin tone # E1.0 [1] (🚵🏼) +1F6B5 1F3FD ; RGI_Emoji_Modifier_Sequence ; person mountain biking: medium skin tone # E1.0 [1] (🚵🏽) +1F6B5 1F3FE ; RGI_Emoji_Modifier_Sequence ; person mountain biking: medium-dark skin tone # E1.0 [1] (🚵🏾) +1F6B5 1F3FF ; RGI_Emoji_Modifier_Sequence ; person mountain biking: dark skin tone # E1.0 [1] (🚵🏿) +1F6B6 1F3FB ; RGI_Emoji_Modifier_Sequence ; person walking: light skin tone # E1.0 [1] (🚶🏻) +1F6B6 1F3FC ; RGI_Emoji_Modifier_Sequence ; person walking: medium-light skin tone # E1.0 [1] (🚶🏼) +1F6B6 1F3FD ; RGI_Emoji_Modifier_Sequence ; person walking: medium skin tone # E1.0 [1] (🚶🏽) +1F6B6 1F3FE ; RGI_Emoji_Modifier_Sequence ; person walking: medium-dark skin tone # E1.0 [1] (🚶🏾) +1F6B6 1F3FF ; RGI_Emoji_Modifier_Sequence ; person walking: dark skin tone # E1.0 [1] (🚶🏿) +1F6C0 1F3FB ; RGI_Emoji_Modifier_Sequence ; person taking bath: light skin tone # E1.0 [1] (🛀🏻) +1F6C0 1F3FC ; RGI_Emoji_Modifier_Sequence ; person taking bath: medium-light skin tone # E1.0 [1] (🛀🏼) +1F6C0 1F3FD ; RGI_Emoji_Modifier_Sequence ; person taking bath: medium skin tone # E1.0 [1] (🛀🏽) +1F6C0 1F3FE ; RGI_Emoji_Modifier_Sequence ; person taking bath: medium-dark skin tone # E1.0 [1] (🛀🏾) +1F6C0 1F3FF ; RGI_Emoji_Modifier_Sequence ; person taking bath: dark skin tone # E1.0 [1] (🛀🏿) +1F6CC 1F3FB ; RGI_Emoji_Modifier_Sequence ; person in bed: light skin tone # E4.0 [1] (🛌🏻) +1F6CC 1F3FC ; RGI_Emoji_Modifier_Sequence ; person in bed: medium-light skin tone # E4.0 [1] (🛌🏼) +1F6CC 1F3FD ; RGI_Emoji_Modifier_Sequence ; person in bed: medium skin tone # E4.0 [1] (🛌🏽) +1F6CC 1F3FE ; RGI_Emoji_Modifier_Sequence ; person in bed: medium-dark skin tone # E4.0 [1] (🛌🏾) +1F6CC 1F3FF ; RGI_Emoji_Modifier_Sequence ; person in bed: dark skin tone # E4.0 [1] (🛌🏿) +1F90C 1F3FB ; RGI_Emoji_Modifier_Sequence ; pinched fingers: light skin tone # E13.0 [1] (🤌🏻) +1F90C 1F3FC ; RGI_Emoji_Modifier_Sequence ; pinched fingers: medium-light skin tone # E13.0 [1] (🤌🏼) +1F90C 1F3FD ; RGI_Emoji_Modifier_Sequence ; pinched fingers: medium skin tone # E13.0 [1] (🤌🏽) +1F90C 1F3FE ; RGI_Emoji_Modifier_Sequence ; pinched fingers: medium-dark skin tone # E13.0 [1] (🤌🏾) +1F90C 1F3FF ; RGI_Emoji_Modifier_Sequence ; pinched fingers: dark skin tone # E13.0 [1] (🤌🏿) +1F90F 1F3FB ; RGI_Emoji_Modifier_Sequence ; pinching hand: light skin tone # E12.0 [1] (🤏🏻) +1F90F 1F3FC ; RGI_Emoji_Modifier_Sequence ; pinching hand: medium-light skin tone # E12.0 [1] (🤏🏼) +1F90F 1F3FD ; RGI_Emoji_Modifier_Sequence ; pinching hand: medium skin tone # E12.0 [1] (🤏🏽) +1F90F 1F3FE ; RGI_Emoji_Modifier_Sequence ; pinching hand: medium-dark skin tone # E12.0 [1] (🤏🏾) +1F90F 1F3FF ; RGI_Emoji_Modifier_Sequence ; pinching hand: dark skin tone # E12.0 [1] (🤏🏿) +1F918 1F3FB ; RGI_Emoji_Modifier_Sequence ; sign of the horns: light skin tone # E1.0 [1] (🤘🏻) +1F918 1F3FC ; RGI_Emoji_Modifier_Sequence ; sign of the horns: medium-light skin tone # E1.0 [1] (🤘🏼) +1F918 1F3FD ; RGI_Emoji_Modifier_Sequence ; sign of the horns: medium skin tone # E1.0 [1] (🤘🏽) +1F918 1F3FE ; RGI_Emoji_Modifier_Sequence ; sign of the horns: medium-dark skin tone # E1.0 [1] (🤘🏾) +1F918 1F3FF ; RGI_Emoji_Modifier_Sequence ; sign of the horns: dark skin tone # E1.0 [1] (🤘🏿) +1F919 1F3FB ; RGI_Emoji_Modifier_Sequence ; call me hand: light skin tone # E3.0 [1] (🤙🏻) +1F919 1F3FC ; RGI_Emoji_Modifier_Sequence ; call me hand: medium-light skin tone # E3.0 [1] (🤙🏼) +1F919 1F3FD ; RGI_Emoji_Modifier_Sequence ; call me hand: medium skin tone # E3.0 [1] (🤙🏽) +1F919 1F3FE ; RGI_Emoji_Modifier_Sequence ; call me hand: medium-dark skin tone # E3.0 [1] (🤙🏾) +1F919 1F3FF ; RGI_Emoji_Modifier_Sequence ; call me hand: dark skin tone # E3.0 [1] (🤙🏿) +1F91A 1F3FB ; RGI_Emoji_Modifier_Sequence ; raised back of hand: light skin tone # E3.0 [1] (🤚🏻) +1F91A 1F3FC ; RGI_Emoji_Modifier_Sequence ; raised back of hand: medium-light skin tone # E3.0 [1] (🤚🏼) +1F91A 1F3FD ; RGI_Emoji_Modifier_Sequence ; raised back of hand: medium skin tone # E3.0 [1] (🤚🏽) +1F91A 1F3FE ; RGI_Emoji_Modifier_Sequence ; raised back of hand: medium-dark skin tone # E3.0 [1] (🤚🏾) +1F91A 1F3FF ; RGI_Emoji_Modifier_Sequence ; raised back of hand: dark skin tone # E3.0 [1] (🤚🏿) +1F91B 1F3FB ; RGI_Emoji_Modifier_Sequence ; left-facing fist: light skin tone # E3.0 [1] (🤛🏻) +1F91B 1F3FC ; RGI_Emoji_Modifier_Sequence ; left-facing fist: medium-light skin tone # E3.0 [1] (🤛🏼) +1F91B 1F3FD ; RGI_Emoji_Modifier_Sequence ; left-facing fist: medium skin tone # E3.0 [1] (🤛🏽) +1F91B 1F3FE ; RGI_Emoji_Modifier_Sequence ; left-facing fist: medium-dark skin tone # E3.0 [1] (🤛🏾) +1F91B 1F3FF ; RGI_Emoji_Modifier_Sequence ; left-facing fist: dark skin tone # E3.0 [1] (🤛🏿) +1F91C 1F3FB ; RGI_Emoji_Modifier_Sequence ; right-facing fist: light skin tone # E3.0 [1] (🤜🏻) +1F91C 1F3FC ; RGI_Emoji_Modifier_Sequence ; right-facing fist: medium-light skin tone # E3.0 [1] (🤜🏼) +1F91C 1F3FD ; RGI_Emoji_Modifier_Sequence ; right-facing fist: medium skin tone # E3.0 [1] (🤜🏽) +1F91C 1F3FE ; RGI_Emoji_Modifier_Sequence ; right-facing fist: medium-dark skin tone # E3.0 [1] (🤜🏾) +1F91C 1F3FF ; RGI_Emoji_Modifier_Sequence ; right-facing fist: dark skin tone # E3.0 [1] (🤜🏿) +1F91D 1F3FB ; RGI_Emoji_Modifier_Sequence ; handshake: light skin tone # E3.0 [1] (🤝🏻) +1F91D 1F3FC ; RGI_Emoji_Modifier_Sequence ; handshake: medium-light skin tone # E3.0 [1] (🤝🏼) +1F91D 1F3FD ; RGI_Emoji_Modifier_Sequence ; handshake: medium skin tone # E3.0 [1] (🤝🏽) +1F91D 1F3FE ; RGI_Emoji_Modifier_Sequence ; handshake: medium-dark skin tone # E3.0 [1] (🤝🏾) +1F91D 1F3FF ; RGI_Emoji_Modifier_Sequence ; handshake: dark skin tone # E3.0 [1] (🤝🏿) +1F91E 1F3FB ; RGI_Emoji_Modifier_Sequence ; crossed fingers: light skin tone # E3.0 [1] (🤞🏻) +1F91E 1F3FC ; RGI_Emoji_Modifier_Sequence ; crossed fingers: medium-light skin tone # E3.0 [1] (🤞🏼) +1F91E 1F3FD ; RGI_Emoji_Modifier_Sequence ; crossed fingers: medium skin tone # E3.0 [1] (🤞🏽) +1F91E 1F3FE ; RGI_Emoji_Modifier_Sequence ; crossed fingers: medium-dark skin tone # E3.0 [1] (🤞🏾) +1F91E 1F3FF ; RGI_Emoji_Modifier_Sequence ; crossed fingers: dark skin tone # E3.0 [1] (🤞🏿) +1F91F 1F3FB ; RGI_Emoji_Modifier_Sequence ; love-you gesture: light skin tone # E5.0 [1] (🤟🏻) +1F91F 1F3FC ; RGI_Emoji_Modifier_Sequence ; love-you gesture: medium-light skin tone # E5.0 [1] (🤟🏼) +1F91F 1F3FD ; RGI_Emoji_Modifier_Sequence ; love-you gesture: medium skin tone # E5.0 [1] (🤟🏽) +1F91F 1F3FE ; RGI_Emoji_Modifier_Sequence ; love-you gesture: medium-dark skin tone # E5.0 [1] (🤟🏾) +1F91F 1F3FF ; RGI_Emoji_Modifier_Sequence ; love-you gesture: dark skin tone # E5.0 [1] (🤟🏿) +1F926 1F3FB ; RGI_Emoji_Modifier_Sequence ; person facepalming: light skin tone # E3.0 [1] (🤦🏻) +1F926 1F3FC ; RGI_Emoji_Modifier_Sequence ; person facepalming: medium-light skin tone # E3.0 [1] (🤦🏼) +1F926 1F3FD ; RGI_Emoji_Modifier_Sequence ; person facepalming: medium skin tone # E3.0 [1] (🤦🏽) +1F926 1F3FE ; RGI_Emoji_Modifier_Sequence ; person facepalming: medium-dark skin tone # E3.0 [1] (🤦🏾) +1F926 1F3FF ; RGI_Emoji_Modifier_Sequence ; person facepalming: dark skin tone # E3.0 [1] (🤦🏿) +1F930 1F3FB ; RGI_Emoji_Modifier_Sequence ; pregnant woman: light skin tone # E3.0 [1] (🤰🏻) +1F930 1F3FC ; RGI_Emoji_Modifier_Sequence ; pregnant woman: medium-light skin tone # E3.0 [1] (🤰🏼) +1F930 1F3FD ; RGI_Emoji_Modifier_Sequence ; pregnant woman: medium skin tone # E3.0 [1] (🤰🏽) +1F930 1F3FE ; RGI_Emoji_Modifier_Sequence ; pregnant woman: medium-dark skin tone # E3.0 [1] (🤰🏾) +1F930 1F3FF ; RGI_Emoji_Modifier_Sequence ; pregnant woman: dark skin tone # E3.0 [1] (🤰🏿) +1F931 1F3FB ; RGI_Emoji_Modifier_Sequence ; breast-feeding: light skin tone # E5.0 [1] (🤱🏻) +1F931 1F3FC ; RGI_Emoji_Modifier_Sequence ; breast-feeding: medium-light skin tone # E5.0 [1] (🤱🏼) +1F931 1F3FD ; RGI_Emoji_Modifier_Sequence ; breast-feeding: medium skin tone # E5.0 [1] (🤱🏽) +1F931 1F3FE ; RGI_Emoji_Modifier_Sequence ; breast-feeding: medium-dark skin tone # E5.0 [1] (🤱🏾) +1F931 1F3FF ; RGI_Emoji_Modifier_Sequence ; breast-feeding: dark skin tone # E5.0 [1] (🤱🏿) +1F932 1F3FB ; RGI_Emoji_Modifier_Sequence ; palms up together: light skin tone # E5.0 [1] (🤲🏻) +1F932 1F3FC ; RGI_Emoji_Modifier_Sequence ; palms up together: medium-light skin tone # E5.0 [1] (🤲🏼) +1F932 1F3FD ; RGI_Emoji_Modifier_Sequence ; palms up together: medium skin tone # E5.0 [1] (🤲🏽) +1F932 1F3FE ; RGI_Emoji_Modifier_Sequence ; palms up together: medium-dark skin tone # E5.0 [1] (🤲🏾) +1F932 1F3FF ; RGI_Emoji_Modifier_Sequence ; palms up together: dark skin tone # E5.0 [1] (🤲🏿) +1F933 1F3FB ; RGI_Emoji_Modifier_Sequence ; selfie: light skin tone # E3.0 [1] (🤳🏻) +1F933 1F3FC ; RGI_Emoji_Modifier_Sequence ; selfie: medium-light skin tone # E3.0 [1] (🤳🏼) +1F933 1F3FD ; RGI_Emoji_Modifier_Sequence ; selfie: medium skin tone # E3.0 [1] (🤳🏽) +1F933 1F3FE ; RGI_Emoji_Modifier_Sequence ; selfie: medium-dark skin tone # E3.0 [1] (🤳🏾) +1F933 1F3FF ; RGI_Emoji_Modifier_Sequence ; selfie: dark skin tone # E3.0 [1] (🤳🏿) +1F934 1F3FB ; RGI_Emoji_Modifier_Sequence ; prince: light skin tone # E3.0 [1] (🤴🏻) +1F934 1F3FC ; RGI_Emoji_Modifier_Sequence ; prince: medium-light skin tone # E3.0 [1] (🤴🏼) +1F934 1F3FD ; RGI_Emoji_Modifier_Sequence ; prince: medium skin tone # E3.0 [1] (🤴🏽) +1F934 1F3FE ; RGI_Emoji_Modifier_Sequence ; prince: medium-dark skin tone # E3.0 [1] (🤴🏾) +1F934 1F3FF ; RGI_Emoji_Modifier_Sequence ; prince: dark skin tone # E3.0 [1] (🤴🏿) +1F935 1F3FB ; RGI_Emoji_Modifier_Sequence ; person in tuxedo: light skin tone # E3.0 [1] (🤵🏻) +1F935 1F3FC ; RGI_Emoji_Modifier_Sequence ; person in tuxedo: medium-light skin tone # E3.0 [1] (🤵🏼) +1F935 1F3FD ; RGI_Emoji_Modifier_Sequence ; person in tuxedo: medium skin tone # E3.0 [1] (🤵🏽) +1F935 1F3FE ; RGI_Emoji_Modifier_Sequence ; person in tuxedo: medium-dark skin tone # E3.0 [1] (🤵🏾) +1F935 1F3FF ; RGI_Emoji_Modifier_Sequence ; person in tuxedo: dark skin tone # E3.0 [1] (🤵🏿) +1F936 1F3FB ; RGI_Emoji_Modifier_Sequence ; Mrs. Claus: light skin tone # E3.0 [1] (🤶🏻) +1F936 1F3FC ; RGI_Emoji_Modifier_Sequence ; Mrs. Claus: medium-light skin tone # E3.0 [1] (🤶🏼) +1F936 1F3FD ; RGI_Emoji_Modifier_Sequence ; Mrs. Claus: medium skin tone # E3.0 [1] (🤶🏽) +1F936 1F3FE ; RGI_Emoji_Modifier_Sequence ; Mrs. Claus: medium-dark skin tone # E3.0 [1] (🤶🏾) +1F936 1F3FF ; RGI_Emoji_Modifier_Sequence ; Mrs. Claus: dark skin tone # E3.0 [1] (🤶🏿) +1F937 1F3FB ; RGI_Emoji_Modifier_Sequence ; person shrugging: light skin tone # E3.0 [1] (🤷🏻) +1F937 1F3FC ; RGI_Emoji_Modifier_Sequence ; person shrugging: medium-light skin tone # E3.0 [1] (🤷🏼) +1F937 1F3FD ; RGI_Emoji_Modifier_Sequence ; person shrugging: medium skin tone # E3.0 [1] (🤷🏽) +1F937 1F3FE ; RGI_Emoji_Modifier_Sequence ; person shrugging: medium-dark skin tone # E3.0 [1] (🤷🏾) +1F937 1F3FF ; RGI_Emoji_Modifier_Sequence ; person shrugging: dark skin tone # E3.0 [1] (🤷🏿) +1F938 1F3FB ; RGI_Emoji_Modifier_Sequence ; person cartwheeling: light skin tone # E3.0 [1] (🤸🏻) +1F938 1F3FC ; RGI_Emoji_Modifier_Sequence ; person cartwheeling: medium-light skin tone # E3.0 [1] (🤸🏼) +1F938 1F3FD ; RGI_Emoji_Modifier_Sequence ; person cartwheeling: medium skin tone # E3.0 [1] (🤸🏽) +1F938 1F3FE ; RGI_Emoji_Modifier_Sequence ; person cartwheeling: medium-dark skin tone # E3.0 [1] (🤸🏾) +1F938 1F3FF ; RGI_Emoji_Modifier_Sequence ; person cartwheeling: dark skin tone # E3.0 [1] (🤸🏿) +1F939 1F3FB ; RGI_Emoji_Modifier_Sequence ; person juggling: light skin tone # E3.0 [1] (🤹🏻) +1F939 1F3FC ; RGI_Emoji_Modifier_Sequence ; person juggling: medium-light skin tone # E3.0 [1] (🤹🏼) +1F939 1F3FD ; RGI_Emoji_Modifier_Sequence ; person juggling: medium skin tone # E3.0 [1] (🤹🏽) +1F939 1F3FE ; RGI_Emoji_Modifier_Sequence ; person juggling: medium-dark skin tone # E3.0 [1] (🤹🏾) +1F939 1F3FF ; RGI_Emoji_Modifier_Sequence ; person juggling: dark skin tone # E3.0 [1] (🤹🏿) +1F93D 1F3FB ; RGI_Emoji_Modifier_Sequence ; person playing water polo: light skin tone # E3.0 [1] (🤽🏻) +1F93D 1F3FC ; RGI_Emoji_Modifier_Sequence ; person playing water polo: medium-light skin tone # E3.0 [1] (🤽🏼) +1F93D 1F3FD ; RGI_Emoji_Modifier_Sequence ; person playing water polo: medium skin tone # E3.0 [1] (🤽🏽) +1F93D 1F3FE ; RGI_Emoji_Modifier_Sequence ; person playing water polo: medium-dark skin tone # E3.0 [1] (🤽🏾) +1F93D 1F3FF ; RGI_Emoji_Modifier_Sequence ; person playing water polo: dark skin tone # E3.0 [1] (🤽🏿) +1F93E 1F3FB ; RGI_Emoji_Modifier_Sequence ; person playing handball: light skin tone # E3.0 [1] (🤾🏻) +1F93E 1F3FC ; RGI_Emoji_Modifier_Sequence ; person playing handball: medium-light skin tone # E3.0 [1] (🤾🏼) +1F93E 1F3FD ; RGI_Emoji_Modifier_Sequence ; person playing handball: medium skin tone # E3.0 [1] (🤾🏽) +1F93E 1F3FE ; RGI_Emoji_Modifier_Sequence ; person playing handball: medium-dark skin tone # E3.0 [1] (🤾🏾) +1F93E 1F3FF ; RGI_Emoji_Modifier_Sequence ; person playing handball: dark skin tone # E3.0 [1] (🤾🏿) +1F977 1F3FB ; RGI_Emoji_Modifier_Sequence ; ninja: light skin tone # E13.0 [1] (🥷🏻) +1F977 1F3FC ; RGI_Emoji_Modifier_Sequence ; ninja: medium-light skin tone # E13.0 [1] (🥷🏼) +1F977 1F3FD ; RGI_Emoji_Modifier_Sequence ; ninja: medium skin tone # E13.0 [1] (🥷🏽) +1F977 1F3FE ; RGI_Emoji_Modifier_Sequence ; ninja: medium-dark skin tone # E13.0 [1] (🥷🏾) +1F977 1F3FF ; RGI_Emoji_Modifier_Sequence ; ninja: dark skin tone # E13.0 [1] (🥷🏿) +1F9B5 1F3FB ; RGI_Emoji_Modifier_Sequence ; leg: light skin tone # E11.0 [1] (🦵🏻) +1F9B5 1F3FC ; RGI_Emoji_Modifier_Sequence ; leg: medium-light skin tone # E11.0 [1] (🦵🏼) +1F9B5 1F3FD ; RGI_Emoji_Modifier_Sequence ; leg: medium skin tone # E11.0 [1] (🦵🏽) +1F9B5 1F3FE ; RGI_Emoji_Modifier_Sequence ; leg: medium-dark skin tone # E11.0 [1] (🦵🏾) +1F9B5 1F3FF ; RGI_Emoji_Modifier_Sequence ; leg: dark skin tone # E11.0 [1] (🦵🏿) +1F9B6 1F3FB ; RGI_Emoji_Modifier_Sequence ; foot: light skin tone # E11.0 [1] (🦶🏻) +1F9B6 1F3FC ; RGI_Emoji_Modifier_Sequence ; foot: medium-light skin tone # E11.0 [1] (🦶🏼) +1F9B6 1F3FD ; RGI_Emoji_Modifier_Sequence ; foot: medium skin tone # E11.0 [1] (🦶🏽) +1F9B6 1F3FE ; RGI_Emoji_Modifier_Sequence ; foot: medium-dark skin tone # E11.0 [1] (🦶🏾) +1F9B6 1F3FF ; RGI_Emoji_Modifier_Sequence ; foot: dark skin tone # E11.0 [1] (🦶🏿) +1F9B8 1F3FB ; RGI_Emoji_Modifier_Sequence ; superhero: light skin tone # E11.0 [1] (🦸🏻) +1F9B8 1F3FC ; RGI_Emoji_Modifier_Sequence ; superhero: medium-light skin tone # E11.0 [1] (🦸🏼) +1F9B8 1F3FD ; RGI_Emoji_Modifier_Sequence ; superhero: medium skin tone # E11.0 [1] (🦸🏽) +1F9B8 1F3FE ; RGI_Emoji_Modifier_Sequence ; superhero: medium-dark skin tone # E11.0 [1] (🦸🏾) +1F9B8 1F3FF ; RGI_Emoji_Modifier_Sequence ; superhero: dark skin tone # E11.0 [1] (🦸🏿) +1F9B9 1F3FB ; RGI_Emoji_Modifier_Sequence ; supervillain: light skin tone # E11.0 [1] (🦹🏻) +1F9B9 1F3FC ; RGI_Emoji_Modifier_Sequence ; supervillain: medium-light skin tone # E11.0 [1] (🦹🏼) +1F9B9 1F3FD ; RGI_Emoji_Modifier_Sequence ; supervillain: medium skin tone # E11.0 [1] (🦹🏽) +1F9B9 1F3FE ; RGI_Emoji_Modifier_Sequence ; supervillain: medium-dark skin tone # E11.0 [1] (🦹🏾) +1F9B9 1F3FF ; RGI_Emoji_Modifier_Sequence ; supervillain: dark skin tone # E11.0 [1] (🦹🏿) +1F9BB 1F3FB ; RGI_Emoji_Modifier_Sequence ; ear with hearing aid: light skin tone # E12.0 [1] (🦻🏻) +1F9BB 1F3FC ; RGI_Emoji_Modifier_Sequence ; ear with hearing aid: medium-light skin tone # E12.0 [1] (🦻🏼) +1F9BB 1F3FD ; RGI_Emoji_Modifier_Sequence ; ear with hearing aid: medium skin tone # E12.0 [1] (🦻🏽) +1F9BB 1F3FE ; RGI_Emoji_Modifier_Sequence ; ear with hearing aid: medium-dark skin tone # E12.0 [1] (🦻🏾) +1F9BB 1F3FF ; RGI_Emoji_Modifier_Sequence ; ear with hearing aid: dark skin tone # E12.0 [1] (🦻🏿) +1F9CD 1F3FB ; RGI_Emoji_Modifier_Sequence ; person standing: light skin tone # E12.0 [1] (🧍🏻) +1F9CD 1F3FC ; RGI_Emoji_Modifier_Sequence ; person standing: medium-light skin tone # E12.0 [1] (🧍🏼) +1F9CD 1F3FD ; RGI_Emoji_Modifier_Sequence ; person standing: medium skin tone # E12.0 [1] (🧍🏽) +1F9CD 1F3FE ; RGI_Emoji_Modifier_Sequence ; person standing: medium-dark skin tone # E12.0 [1] (🧍🏾) +1F9CD 1F3FF ; RGI_Emoji_Modifier_Sequence ; person standing: dark skin tone # E12.0 [1] (🧍🏿) +1F9CE 1F3FB ; RGI_Emoji_Modifier_Sequence ; person kneeling: light skin tone # E12.0 [1] (🧎🏻) +1F9CE 1F3FC ; RGI_Emoji_Modifier_Sequence ; person kneeling: medium-light skin tone # E12.0 [1] (🧎🏼) +1F9CE 1F3FD ; RGI_Emoji_Modifier_Sequence ; person kneeling: medium skin tone # E12.0 [1] (🧎🏽) +1F9CE 1F3FE ; RGI_Emoji_Modifier_Sequence ; person kneeling: medium-dark skin tone # E12.0 [1] (🧎🏾) +1F9CE 1F3FF ; RGI_Emoji_Modifier_Sequence ; person kneeling: dark skin tone # E12.0 [1] (🧎🏿) +1F9CF 1F3FB ; RGI_Emoji_Modifier_Sequence ; deaf person: light skin tone # E12.0 [1] (🧏🏻) +1F9CF 1F3FC ; RGI_Emoji_Modifier_Sequence ; deaf person: medium-light skin tone # E12.0 [1] (🧏🏼) +1F9CF 1F3FD ; RGI_Emoji_Modifier_Sequence ; deaf person: medium skin tone # E12.0 [1] (🧏🏽) +1F9CF 1F3FE ; RGI_Emoji_Modifier_Sequence ; deaf person: medium-dark skin tone # E12.0 [1] (🧏🏾) +1F9CF 1F3FF ; RGI_Emoji_Modifier_Sequence ; deaf person: dark skin tone # E12.0 [1] (🧏🏿) +1F9D1 1F3FB ; RGI_Emoji_Modifier_Sequence ; person: light skin tone # E5.0 [1] (🧑🏻) +1F9D1 1F3FC ; RGI_Emoji_Modifier_Sequence ; person: medium-light skin tone # E5.0 [1] (🧑🏼) +1F9D1 1F3FD ; RGI_Emoji_Modifier_Sequence ; person: medium skin tone # E5.0 [1] (🧑🏽) +1F9D1 1F3FE ; RGI_Emoji_Modifier_Sequence ; person: medium-dark skin tone # E5.0 [1] (🧑🏾) +1F9D1 1F3FF ; RGI_Emoji_Modifier_Sequence ; person: dark skin tone # E5.0 [1] (🧑🏿) +1F9D2 1F3FB ; RGI_Emoji_Modifier_Sequence ; child: light skin tone # E5.0 [1] (🧒🏻) +1F9D2 1F3FC ; RGI_Emoji_Modifier_Sequence ; child: medium-light skin tone # E5.0 [1] (🧒🏼) +1F9D2 1F3FD ; RGI_Emoji_Modifier_Sequence ; child: medium skin tone # E5.0 [1] (🧒🏽) +1F9D2 1F3FE ; RGI_Emoji_Modifier_Sequence ; child: medium-dark skin tone # E5.0 [1] (🧒🏾) +1F9D2 1F3FF ; RGI_Emoji_Modifier_Sequence ; child: dark skin tone # E5.0 [1] (🧒🏿) +1F9D3 1F3FB ; RGI_Emoji_Modifier_Sequence ; older person: light skin tone # E5.0 [1] (🧓🏻) +1F9D3 1F3FC ; RGI_Emoji_Modifier_Sequence ; older person: medium-light skin tone # E5.0 [1] (🧓🏼) +1F9D3 1F3FD ; RGI_Emoji_Modifier_Sequence ; older person: medium skin tone # E5.0 [1] (🧓🏽) +1F9D3 1F3FE ; RGI_Emoji_Modifier_Sequence ; older person: medium-dark skin tone # E5.0 [1] (🧓🏾) +1F9D3 1F3FF ; RGI_Emoji_Modifier_Sequence ; older person: dark skin tone # E5.0 [1] (🧓🏿) +1F9D4 1F3FB ; RGI_Emoji_Modifier_Sequence ; person: light skin tone, beard # E5.0 [1] (🧔🏻) +1F9D4 1F3FC ; RGI_Emoji_Modifier_Sequence ; person: medium-light skin tone, beard # E5.0 [1] (🧔🏼) +1F9D4 1F3FD ; RGI_Emoji_Modifier_Sequence ; person: medium skin tone, beard # E5.0 [1] (🧔🏽) +1F9D4 1F3FE ; RGI_Emoji_Modifier_Sequence ; person: medium-dark skin tone, beard # E5.0 [1] (🧔🏾) +1F9D4 1F3FF ; RGI_Emoji_Modifier_Sequence ; person: dark skin tone, beard # E5.0 [1] (🧔🏿) +1F9D5 1F3FB ; RGI_Emoji_Modifier_Sequence ; woman with headscarf: light skin tone # E5.0 [1] (🧕🏻) +1F9D5 1F3FC ; RGI_Emoji_Modifier_Sequence ; woman with headscarf: medium-light skin tone # E5.0 [1] (🧕🏼) +1F9D5 1F3FD ; RGI_Emoji_Modifier_Sequence ; woman with headscarf: medium skin tone # E5.0 [1] (🧕🏽) +1F9D5 1F3FE ; RGI_Emoji_Modifier_Sequence ; woman with headscarf: medium-dark skin tone # E5.0 [1] (🧕🏾) +1F9D5 1F3FF ; RGI_Emoji_Modifier_Sequence ; woman with headscarf: dark skin tone # E5.0 [1] (🧕🏿) +1F9D6 1F3FB ; RGI_Emoji_Modifier_Sequence ; person in steamy room: light skin tone # E5.0 [1] (🧖🏻) +1F9D6 1F3FC ; RGI_Emoji_Modifier_Sequence ; person in steamy room: medium-light skin tone # E5.0 [1] (🧖🏼) +1F9D6 1F3FD ; RGI_Emoji_Modifier_Sequence ; person in steamy room: medium skin tone # E5.0 [1] (🧖🏽) +1F9D6 1F3FE ; RGI_Emoji_Modifier_Sequence ; person in steamy room: medium-dark skin tone # E5.0 [1] (🧖🏾) +1F9D6 1F3FF ; RGI_Emoji_Modifier_Sequence ; person in steamy room: dark skin tone # E5.0 [1] (🧖🏿) +1F9D7 1F3FB ; RGI_Emoji_Modifier_Sequence ; person climbing: light skin tone # E5.0 [1] (🧗🏻) +1F9D7 1F3FC ; RGI_Emoji_Modifier_Sequence ; person climbing: medium-light skin tone # E5.0 [1] (🧗🏼) +1F9D7 1F3FD ; RGI_Emoji_Modifier_Sequence ; person climbing: medium skin tone # E5.0 [1] (🧗🏽) +1F9D7 1F3FE ; RGI_Emoji_Modifier_Sequence ; person climbing: medium-dark skin tone # E5.0 [1] (🧗🏾) +1F9D7 1F3FF ; RGI_Emoji_Modifier_Sequence ; person climbing: dark skin tone # E5.0 [1] (🧗🏿) +1F9D8 1F3FB ; RGI_Emoji_Modifier_Sequence ; person in lotus position: light skin tone # E5.0 [1] (🧘🏻) +1F9D8 1F3FC ; RGI_Emoji_Modifier_Sequence ; person in lotus position: medium-light skin tone # E5.0 [1] (🧘🏼) +1F9D8 1F3FD ; RGI_Emoji_Modifier_Sequence ; person in lotus position: medium skin tone # E5.0 [1] (🧘🏽) +1F9D8 1F3FE ; RGI_Emoji_Modifier_Sequence ; person in lotus position: medium-dark skin tone # E5.0 [1] (🧘🏾) +1F9D8 1F3FF ; RGI_Emoji_Modifier_Sequence ; person in lotus position: dark skin tone # E5.0 [1] (🧘🏿) +1F9D9 1F3FB ; RGI_Emoji_Modifier_Sequence ; mage: light skin tone # E5.0 [1] (🧙🏻) +1F9D9 1F3FC ; RGI_Emoji_Modifier_Sequence ; mage: medium-light skin tone # E5.0 [1] (🧙🏼) +1F9D9 1F3FD ; RGI_Emoji_Modifier_Sequence ; mage: medium skin tone # E5.0 [1] (🧙🏽) +1F9D9 1F3FE ; RGI_Emoji_Modifier_Sequence ; mage: medium-dark skin tone # E5.0 [1] (🧙🏾) +1F9D9 1F3FF ; RGI_Emoji_Modifier_Sequence ; mage: dark skin tone # E5.0 [1] (🧙🏿) +1F9DA 1F3FB ; RGI_Emoji_Modifier_Sequence ; fairy: light skin tone # E5.0 [1] (🧚🏻) +1F9DA 1F3FC ; RGI_Emoji_Modifier_Sequence ; fairy: medium-light skin tone # E5.0 [1] (🧚🏼) +1F9DA 1F3FD ; RGI_Emoji_Modifier_Sequence ; fairy: medium skin tone # E5.0 [1] (🧚🏽) +1F9DA 1F3FE ; RGI_Emoji_Modifier_Sequence ; fairy: medium-dark skin tone # E5.0 [1] (🧚🏾) +1F9DA 1F3FF ; RGI_Emoji_Modifier_Sequence ; fairy: dark skin tone # E5.0 [1] (🧚🏿) +1F9DB 1F3FB ; RGI_Emoji_Modifier_Sequence ; vampire: light skin tone # E5.0 [1] (🧛🏻) +1F9DB 1F3FC ; RGI_Emoji_Modifier_Sequence ; vampire: medium-light skin tone # E5.0 [1] (🧛🏼) +1F9DB 1F3FD ; RGI_Emoji_Modifier_Sequence ; vampire: medium skin tone # E5.0 [1] (🧛🏽) +1F9DB 1F3FE ; RGI_Emoji_Modifier_Sequence ; vampire: medium-dark skin tone # E5.0 [1] (🧛🏾) +1F9DB 1F3FF ; RGI_Emoji_Modifier_Sequence ; vampire: dark skin tone # E5.0 [1] (🧛🏿) +1F9DC 1F3FB ; RGI_Emoji_Modifier_Sequence ; merperson: light skin tone # E5.0 [1] (🧜🏻) +1F9DC 1F3FC ; RGI_Emoji_Modifier_Sequence ; merperson: medium-light skin tone # E5.0 [1] (🧜🏼) +1F9DC 1F3FD ; RGI_Emoji_Modifier_Sequence ; merperson: medium skin tone # E5.0 [1] (🧜🏽) +1F9DC 1F3FE ; RGI_Emoji_Modifier_Sequence ; merperson: medium-dark skin tone # E5.0 [1] (🧜🏾) +1F9DC 1F3FF ; RGI_Emoji_Modifier_Sequence ; merperson: dark skin tone # E5.0 [1] (🧜🏿) +1F9DD 1F3FB ; RGI_Emoji_Modifier_Sequence ; elf: light skin tone # E5.0 [1] (🧝🏻) +1F9DD 1F3FC ; RGI_Emoji_Modifier_Sequence ; elf: medium-light skin tone # E5.0 [1] (🧝🏼) +1F9DD 1F3FD ; RGI_Emoji_Modifier_Sequence ; elf: medium skin tone # E5.0 [1] (🧝🏽) +1F9DD 1F3FE ; RGI_Emoji_Modifier_Sequence ; elf: medium-dark skin tone # E5.0 [1] (🧝🏾) +1F9DD 1F3FF ; RGI_Emoji_Modifier_Sequence ; elf: dark skin tone # E5.0 [1] (🧝🏿) +1FAC3 1F3FB ; RGI_Emoji_Modifier_Sequence ; pregnant man: light skin tone # E14.0 [1] (🫃🏻) +1FAC3 1F3FC ; RGI_Emoji_Modifier_Sequence ; pregnant man: medium-light skin tone # E14.0 [1] (🫃🏼) +1FAC3 1F3FD ; RGI_Emoji_Modifier_Sequence ; pregnant man: medium skin tone # E14.0 [1] (🫃🏽) +1FAC3 1F3FE ; RGI_Emoji_Modifier_Sequence ; pregnant man: medium-dark skin tone # E14.0 [1] (🫃🏾) +1FAC3 1F3FF ; RGI_Emoji_Modifier_Sequence ; pregnant man: dark skin tone # E14.0 [1] (🫃🏿) +1FAC4 1F3FB ; RGI_Emoji_Modifier_Sequence ; pregnant person: light skin tone # E14.0 [1] (🫄🏻) +1FAC4 1F3FC ; RGI_Emoji_Modifier_Sequence ; pregnant person: medium-light skin tone # E14.0 [1] (🫄🏼) +1FAC4 1F3FD ; RGI_Emoji_Modifier_Sequence ; pregnant person: medium skin tone # E14.0 [1] (🫄🏽) +1FAC4 1F3FE ; RGI_Emoji_Modifier_Sequence ; pregnant person: medium-dark skin tone # E14.0 [1] (🫄🏾) +1FAC4 1F3FF ; RGI_Emoji_Modifier_Sequence ; pregnant person: dark skin tone # E14.0 [1] (🫄🏿) +1FAC5 1F3FB ; RGI_Emoji_Modifier_Sequence ; person with crown: light skin tone # E14.0 [1] (🫅🏻) +1FAC5 1F3FC ; RGI_Emoji_Modifier_Sequence ; person with crown: medium-light skin tone # E14.0 [1] (🫅🏼) +1FAC5 1F3FD ; RGI_Emoji_Modifier_Sequence ; person with crown: medium skin tone # E14.0 [1] (🫅🏽) +1FAC5 1F3FE ; RGI_Emoji_Modifier_Sequence ; person with crown: medium-dark skin tone # E14.0 [1] (🫅🏾) +1FAC5 1F3FF ; RGI_Emoji_Modifier_Sequence ; person with crown: dark skin tone # E14.0 [1] (🫅🏿) +1FAF0 1F3FB ; RGI_Emoji_Modifier_Sequence ; hand with index finger and thumb crossed: light skin tone # E14.0 [1] (🫰🏻) +1FAF0 1F3FC ; RGI_Emoji_Modifier_Sequence ; hand with index finger and thumb crossed: medium-light skin tone #E14.0 [1] (🫰🏼) +1FAF0 1F3FD ; RGI_Emoji_Modifier_Sequence ; hand with index finger and thumb crossed: medium skin tone # E14.0 [1] (🫰🏽) +1FAF0 1F3FE ; RGI_Emoji_Modifier_Sequence ; hand with index finger and thumb crossed: medium-dark skin tone #E14.0 [1] (🫰🏾) +1FAF0 1F3FF ; RGI_Emoji_Modifier_Sequence ; hand with index finger and thumb crossed: dark skin tone # E14.0 [1] (🫰🏿) +1FAF1 1F3FB ; RGI_Emoji_Modifier_Sequence ; rightwards hand: light skin tone # E14.0 [1] (🫱🏻) +1FAF1 1F3FC ; RGI_Emoji_Modifier_Sequence ; rightwards hand: medium-light skin tone # E14.0 [1] (🫱🏼) +1FAF1 1F3FD ; RGI_Emoji_Modifier_Sequence ; rightwards hand: medium skin tone # E14.0 [1] (🫱🏽) +1FAF1 1F3FE ; RGI_Emoji_Modifier_Sequence ; rightwards hand: medium-dark skin tone # E14.0 [1] (🫱🏾) +1FAF1 1F3FF ; RGI_Emoji_Modifier_Sequence ; rightwards hand: dark skin tone # E14.0 [1] (🫱🏿) +1FAF2 1F3FB ; RGI_Emoji_Modifier_Sequence ; leftwards hand: light skin tone # E14.0 [1] (🫲🏻) +1FAF2 1F3FC ; RGI_Emoji_Modifier_Sequence ; leftwards hand: medium-light skin tone # E14.0 [1] (🫲🏼) +1FAF2 1F3FD ; RGI_Emoji_Modifier_Sequence ; leftwards hand: medium skin tone # E14.0 [1] (🫲🏽) +1FAF2 1F3FE ; RGI_Emoji_Modifier_Sequence ; leftwards hand: medium-dark skin tone # E14.0 [1] (🫲🏾) +1FAF2 1F3FF ; RGI_Emoji_Modifier_Sequence ; leftwards hand: dark skin tone # E14.0 [1] (🫲🏿) +1FAF3 1F3FB ; RGI_Emoji_Modifier_Sequence ; palm down hand: light skin tone # E14.0 [1] (🫳🏻) +1FAF3 1F3FC ; RGI_Emoji_Modifier_Sequence ; palm down hand: medium-light skin tone # E14.0 [1] (🫳🏼) +1FAF3 1F3FD ; RGI_Emoji_Modifier_Sequence ; palm down hand: medium skin tone # E14.0 [1] (🫳🏽) +1FAF3 1F3FE ; RGI_Emoji_Modifier_Sequence ; palm down hand: medium-dark skin tone # E14.0 [1] (🫳🏾) +1FAF3 1F3FF ; RGI_Emoji_Modifier_Sequence ; palm down hand: dark skin tone # E14.0 [1] (🫳🏿) +1FAF4 1F3FB ; RGI_Emoji_Modifier_Sequence ; palm up hand: light skin tone # E14.0 [1] (🫴🏻) +1FAF4 1F3FC ; RGI_Emoji_Modifier_Sequence ; palm up hand: medium-light skin tone # E14.0 [1] (🫴🏼) +1FAF4 1F3FD ; RGI_Emoji_Modifier_Sequence ; palm up hand: medium skin tone # E14.0 [1] (🫴🏽) +1FAF4 1F3FE ; RGI_Emoji_Modifier_Sequence ; palm up hand: medium-dark skin tone # E14.0 [1] (🫴🏾) +1FAF4 1F3FF ; RGI_Emoji_Modifier_Sequence ; palm up hand: dark skin tone # E14.0 [1] (🫴🏿) +1FAF5 1F3FB ; RGI_Emoji_Modifier_Sequence ; index pointing at the viewer: light skin tone # E14.0 [1] (🫵🏻) +1FAF5 1F3FC ; RGI_Emoji_Modifier_Sequence ; index pointing at the viewer: medium-light skin tone # E14.0 [1] (🫵🏼) +1FAF5 1F3FD ; RGI_Emoji_Modifier_Sequence ; index pointing at the viewer: medium skin tone # E14.0 [1] (🫵🏽) +1FAF5 1F3FE ; RGI_Emoji_Modifier_Sequence ; index pointing at the viewer: medium-dark skin tone # E14.0 [1] (🫵🏾) +1FAF5 1F3FF ; RGI_Emoji_Modifier_Sequence ; index pointing at the viewer: dark skin tone # E14.0 [1] (🫵🏿) +1FAF6 1F3FB ; RGI_Emoji_Modifier_Sequence ; heart hands: light skin tone # E14.0 [1] (🫶🏻) +1FAF6 1F3FC ; RGI_Emoji_Modifier_Sequence ; heart hands: medium-light skin tone # E14.0 [1] (🫶🏼) +1FAF6 1F3FD ; RGI_Emoji_Modifier_Sequence ; heart hands: medium skin tone # E14.0 [1] (🫶🏽) +1FAF6 1F3FE ; RGI_Emoji_Modifier_Sequence ; heart hands: medium-dark skin tone # E14.0 [1] (🫶🏾) +1FAF6 1F3FF ; RGI_Emoji_Modifier_Sequence ; heart hands: dark skin tone # E14.0 [1] (🫶🏿) + +# Total elements: 645 + +#EOF diff --git a/x86_64/extra/unicode-emoji/emoji-test-14.0.txt b/x86_64/extra/unicode-emoji/emoji-test-14.0.txt new file mode 100644 index 0000000..dd54933 --- /dev/null +++ b/x86_64/extra/unicode-emoji/emoji-test-14.0.txt @@ -0,0 +1,4991 @@ +# emoji-test.txt +# Date: 2021-08-26, 17:22:23 GMT +# © 2021 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Emoji Keyboard/Display Test Data for UTS #51 +# Version: 14.0 +# +# For documentation and usage, see http://www.unicode.org/reports/tr51 +# +# This file provides data for testing which emoji forms should be in keyboards and which should also be displayed/processed. +# Format: code points; status # emoji name +# Code points — list of one or more hex code points, separated by spaces +# Status +# component — an Emoji_Component, +# excluding Regional_Indicators, ASCII, and non-Emoji. +# fully-qualified — a fully-qualified emoji (see ED-18 in UTS #51), +# excluding Emoji_Component +# minimally-qualified — a minimally-qualified emoji (see ED-18a in UTS #51) +# unqualified — a unqualified emoji (See ED-19 in UTS #51) +# Notes: +# • This includes the emoji components that need emoji presentation (skin tone and hair) +# when isolated, but omits the components that need not have an emoji +# presentation when isolated. +# • The RGI set is covered by the listed fully-qualified emoji. +# • The listed minimally-qualified and unqualified cover all cases where an +# element of the RGI set is missing one or more emoji presentation selectors. +# • The file is in CLDR order, not codepoint order. This is recommended (but not required!) for keyboard palettes. +# • The groups and subgroups are illustrative. See the Emoji Order chart for more information. + + +# group: Smileys & Emotion + +# subgroup: face-smiling +1F600 ; fully-qualified # 😀 E1.0 grinning face +1F603 ; fully-qualified # 😃 E0.6 grinning face with big eyes +1F604 ; fully-qualified # 😄 E0.6 grinning face with smiling eyes +1F601 ; fully-qualified # 😁 E0.6 beaming face with smiling eyes +1F606 ; fully-qualified # 😆 E0.6 grinning squinting face +1F605 ; fully-qualified # 😅 E0.6 grinning face with sweat +1F923 ; fully-qualified # 🤣 E3.0 rolling on the floor laughing +1F602 ; fully-qualified # 😂 E0.6 face with tears of joy +1F642 ; fully-qualified # 🙂 E1.0 slightly smiling face +1F643 ; fully-qualified # 🙃 E1.0 upside-down face +1FAE0 ; fully-qualified # 🫠 E14.0 melting face +1F609 ; fully-qualified # 😉 E0.6 winking face +1F60A ; fully-qualified # 😊 E0.6 smiling face with smiling eyes +1F607 ; fully-qualified # 😇 E1.0 smiling face with halo + +# subgroup: face-affection +1F970 ; fully-qualified # 🥰 E11.0 smiling face with hearts +1F60D ; fully-qualified # 😍 E0.6 smiling face with heart-eyes +1F929 ; fully-qualified # 🤩 E5.0 star-struck +1F618 ; fully-qualified # 😘 E0.6 face blowing a kiss +1F617 ; fully-qualified # 😗 E1.0 kissing face +263A FE0F ; fully-qualified # ☺️ E0.6 smiling face +263A ; unqualified # ☺ E0.6 smiling face +1F61A ; fully-qualified # 😚 E0.6 kissing face with closed eyes +1F619 ; fully-qualified # 😙 E1.0 kissing face with smiling eyes +1F972 ; fully-qualified # 🥲 E13.0 smiling face with tear + +# subgroup: face-tongue +1F60B ; fully-qualified # 😋 E0.6 face savoring food +1F61B ; fully-qualified # 😛 E1.0 face with tongue +1F61C ; fully-qualified # 😜 E0.6 winking face with tongue +1F92A ; fully-qualified # 🤪 E5.0 zany face +1F61D ; fully-qualified # 😝 E0.6 squinting face with tongue +1F911 ; fully-qualified # 🤑 E1.0 money-mouth face + +# subgroup: face-hand +1F917 ; fully-qualified # 🤗 E1.0 smiling face with open hands +1F92D ; fully-qualified # 🤭 E5.0 face with hand over mouth +1FAE2 ; fully-qualified # 🫢 E14.0 face with open eyes and hand over mouth +1FAE3 ; fully-qualified # 🫣 E14.0 face with peeking eye +1F92B ; fully-qualified # 🤫 E5.0 shushing face +1F914 ; fully-qualified # 🤔 E1.0 thinking face +1FAE1 ; fully-qualified # 🫡 E14.0 saluting face + +# subgroup: face-neutral-skeptical +1F910 ; fully-qualified # 🤐 E1.0 zipper-mouth face +1F928 ; fully-qualified # 🤨 E5.0 face with raised eyebrow +1F610 ; fully-qualified # 😐 E0.7 neutral face +1F611 ; fully-qualified # 😑 E1.0 expressionless face +1F636 ; fully-qualified # 😶 E1.0 face without mouth +1FAE5 ; fully-qualified # 🫥 E14.0 dotted line face +1F636 200D 1F32B FE0F ; fully-qualified # 😶‍🌫️ E13.1 face in clouds +1F636 200D 1F32B ; minimally-qualified # 😶‍🌫 E13.1 face in clouds +1F60F ; fully-qualified # 😏 E0.6 smirking face +1F612 ; fully-qualified # 😒 E0.6 unamused face +1F644 ; fully-qualified # 🙄 E1.0 face with rolling eyes +1F62C ; fully-qualified # 😬 E1.0 grimacing face +1F62E 200D 1F4A8 ; fully-qualified # 😮‍💨 E13.1 face exhaling +1F925 ; fully-qualified # 🤥 E3.0 lying face + +# subgroup: face-sleepy +1F60C ; fully-qualified # 😌 E0.6 relieved face +1F614 ; fully-qualified # 😔 E0.6 pensive face +1F62A ; fully-qualified # 😪 E0.6 sleepy face +1F924 ; fully-qualified # 🤤 E3.0 drooling face +1F634 ; fully-qualified # 😴 E1.0 sleeping face + +# subgroup: face-unwell +1F637 ; fully-qualified # 😷 E0.6 face with medical mask +1F912 ; fully-qualified # 🤒 E1.0 face with thermometer +1F915 ; fully-qualified # 🤕 E1.0 face with head-bandage +1F922 ; fully-qualified # 🤢 E3.0 nauseated face +1F92E ; fully-qualified # 🤮 E5.0 face vomiting +1F927 ; fully-qualified # 🤧 E3.0 sneezing face +1F975 ; fully-qualified # 🥵 E11.0 hot face +1F976 ; fully-qualified # 🥶 E11.0 cold face +1F974 ; fully-qualified # 🥴 E11.0 woozy face +1F635 ; fully-qualified # 😵 E0.6 face with crossed-out eyes +1F635 200D 1F4AB ; fully-qualified # 😵‍💫 E13.1 face with spiral eyes +1F92F ; fully-qualified # 🤯 E5.0 exploding head + +# subgroup: face-hat +1F920 ; fully-qualified # 🤠 E3.0 cowboy hat face +1F973 ; fully-qualified # 🥳 E11.0 partying face +1F978 ; fully-qualified # 🥸 E13.0 disguised face + +# subgroup: face-glasses +1F60E ; fully-qualified # 😎 E1.0 smiling face with sunglasses +1F913 ; fully-qualified # 🤓 E1.0 nerd face +1F9D0 ; fully-qualified # 🧐 E5.0 face with monocle + +# subgroup: face-concerned +1F615 ; fully-qualified # 😕 E1.0 confused face +1FAE4 ; fully-qualified # 🫤 E14.0 face with diagonal mouth +1F61F ; fully-qualified # 😟 E1.0 worried face +1F641 ; fully-qualified # 🙁 E1.0 slightly frowning face +2639 FE0F ; fully-qualified # ☹️ E0.7 frowning face +2639 ; unqualified # ☹ E0.7 frowning face +1F62E ; fully-qualified # 😮 E1.0 face with open mouth +1F62F ; fully-qualified # 😯 E1.0 hushed face +1F632 ; fully-qualified # 😲 E0.6 astonished face +1F633 ; fully-qualified # 😳 E0.6 flushed face +1F97A ; fully-qualified # 🥺 E11.0 pleading face +1F979 ; fully-qualified # 🥹 E14.0 face holding back tears +1F626 ; fully-qualified # 😦 E1.0 frowning face with open mouth +1F627 ; fully-qualified # 😧 E1.0 anguished face +1F628 ; fully-qualified # 😨 E0.6 fearful face +1F630 ; fully-qualified # 😰 E0.6 anxious face with sweat +1F625 ; fully-qualified # 😥 E0.6 sad but relieved face +1F622 ; fully-qualified # 😢 E0.6 crying face +1F62D ; fully-qualified # 😭 E0.6 loudly crying face +1F631 ; fully-qualified # 😱 E0.6 face screaming in fear +1F616 ; fully-qualified # 😖 E0.6 confounded face +1F623 ; fully-qualified # 😣 E0.6 persevering face +1F61E ; fully-qualified # 😞 E0.6 disappointed face +1F613 ; fully-qualified # 😓 E0.6 downcast face with sweat +1F629 ; fully-qualified # 😩 E0.6 weary face +1F62B ; fully-qualified # 😫 E0.6 tired face +1F971 ; fully-qualified # 🥱 E12.0 yawning face + +# subgroup: face-negative +1F624 ; fully-qualified # 😤 E0.6 face with steam from nose +1F621 ; fully-qualified # 😡 E0.6 pouting face +1F620 ; fully-qualified # 😠 E0.6 angry face +1F92C ; fully-qualified # 🤬 E5.0 face with symbols on mouth +1F608 ; fully-qualified # 😈 E1.0 smiling face with horns +1F47F ; fully-qualified # 👿 E0.6 angry face with horns +1F480 ; fully-qualified # 💀 E0.6 skull +2620 FE0F ; fully-qualified # ☠️ E1.0 skull and crossbones +2620 ; unqualified # ☠ E1.0 skull and crossbones + +# subgroup: face-costume +1F4A9 ; fully-qualified # 💩 E0.6 pile of poo +1F921 ; fully-qualified # 🤡 E3.0 clown face +1F479 ; fully-qualified # 👹 E0.6 ogre +1F47A ; fully-qualified # 👺 E0.6 goblin +1F47B ; fully-qualified # 👻 E0.6 ghost +1F47D ; fully-qualified # 👽 E0.6 alien +1F47E ; fully-qualified # 👾 E0.6 alien monster +1F916 ; fully-qualified # 🤖 E1.0 robot + +# subgroup: cat-face +1F63A ; fully-qualified # 😺 E0.6 grinning cat +1F638 ; fully-qualified # 😸 E0.6 grinning cat with smiling eyes +1F639 ; fully-qualified # 😹 E0.6 cat with tears of joy +1F63B ; fully-qualified # 😻 E0.6 smiling cat with heart-eyes +1F63C ; fully-qualified # 😼 E0.6 cat with wry smile +1F63D ; fully-qualified # 😽 E0.6 kissing cat +1F640 ; fully-qualified # 🙀 E0.6 weary cat +1F63F ; fully-qualified # 😿 E0.6 crying cat +1F63E ; fully-qualified # 😾 E0.6 pouting cat + +# subgroup: monkey-face +1F648 ; fully-qualified # 🙈 E0.6 see-no-evil monkey +1F649 ; fully-qualified # 🙉 E0.6 hear-no-evil monkey +1F64A ; fully-qualified # 🙊 E0.6 speak-no-evil monkey + +# subgroup: emotion +1F48B ; fully-qualified # 💋 E0.6 kiss mark +1F48C ; fully-qualified # 💌 E0.6 love letter +1F498 ; fully-qualified # 💘 E0.6 heart with arrow +1F49D ; fully-qualified # 💝 E0.6 heart with ribbon +1F496 ; fully-qualified # 💖 E0.6 sparkling heart +1F497 ; fully-qualified # 💗 E0.6 growing heart +1F493 ; fully-qualified # 💓 E0.6 beating heart +1F49E ; fully-qualified # 💞 E0.6 revolving hearts +1F495 ; fully-qualified # 💕 E0.6 two hearts +1F49F ; fully-qualified # 💟 E0.6 heart decoration +2763 FE0F ; fully-qualified # ❣️ E1.0 heart exclamation +2763 ; unqualified # ❣ E1.0 heart exclamation +1F494 ; fully-qualified # 💔 E0.6 broken heart +2764 FE0F 200D 1F525 ; fully-qualified # ❤️‍🔥 E13.1 heart on fire +2764 200D 1F525 ; unqualified # ❤‍🔥 E13.1 heart on fire +2764 FE0F 200D 1FA79 ; fully-qualified # ❤️‍🩹 E13.1 mending heart +2764 200D 1FA79 ; unqualified # ❤‍🩹 E13.1 mending heart +2764 FE0F ; fully-qualified # ❤️ E0.6 red heart +2764 ; unqualified # ❤ E0.6 red heart +1F9E1 ; fully-qualified # 🧡 E5.0 orange heart +1F49B ; fully-qualified # 💛 E0.6 yellow heart +1F49A ; fully-qualified # 💚 E0.6 green heart +1F499 ; fully-qualified # 💙 E0.6 blue heart +1F49C ; fully-qualified # 💜 E0.6 purple heart +1F90E ; fully-qualified # 🤎 E12.0 brown heart +1F5A4 ; fully-qualified # 🖤 E3.0 black heart +1F90D ; fully-qualified # 🤍 E12.0 white heart +1F4AF ; fully-qualified # 💯 E0.6 hundred points +1F4A2 ; fully-qualified # 💢 E0.6 anger symbol +1F4A5 ; fully-qualified # 💥 E0.6 collision +1F4AB ; fully-qualified # 💫 E0.6 dizzy +1F4A6 ; fully-qualified # 💦 E0.6 sweat droplets +1F4A8 ; fully-qualified # 💨 E0.6 dashing away +1F573 FE0F ; fully-qualified # 🕳️ E0.7 hole +1F573 ; unqualified # 🕳 E0.7 hole +1F4A3 ; fully-qualified # 💣 E0.6 bomb +1F4AC ; fully-qualified # 💬 E0.6 speech balloon +1F441 FE0F 200D 1F5E8 FE0F ; fully-qualified # 👁️‍🗨️ E2.0 eye in speech bubble +1F441 200D 1F5E8 FE0F ; unqualified # 👁‍🗨️ E2.0 eye in speech bubble +1F441 FE0F 200D 1F5E8 ; unqualified # 👁️‍🗨 E2.0 eye in speech bubble +1F441 200D 1F5E8 ; unqualified # 👁‍🗨 E2.0 eye in speech bubble +1F5E8 FE0F ; fully-qualified # 🗨️ E2.0 left speech bubble +1F5E8 ; unqualified # 🗨 E2.0 left speech bubble +1F5EF FE0F ; fully-qualified # 🗯️ E0.7 right anger bubble +1F5EF ; unqualified # 🗯 E0.7 right anger bubble +1F4AD ; fully-qualified # 💭 E1.0 thought balloon +1F4A4 ; fully-qualified # 💤 E0.6 zzz + +# Smileys & Emotion subtotal: 177 +# Smileys & Emotion subtotal: 177 w/o modifiers + +# group: People & Body + +# subgroup: hand-fingers-open +1F44B ; fully-qualified # 👋 E0.6 waving hand +1F44B 1F3FB ; fully-qualified # 👋🏻 E1.0 waving hand: light skin tone +1F44B 1F3FC ; fully-qualified # 👋🏼 E1.0 waving hand: medium-light skin tone +1F44B 1F3FD ; fully-qualified # 👋🏽 E1.0 waving hand: medium skin tone +1F44B 1F3FE ; fully-qualified # 👋🏾 E1.0 waving hand: medium-dark skin tone +1F44B 1F3FF ; fully-qualified # 👋🏿 E1.0 waving hand: dark skin tone +1F91A ; fully-qualified # 🤚 E3.0 raised back of hand +1F91A 1F3FB ; fully-qualified # 🤚🏻 E3.0 raised back of hand: light skin tone +1F91A 1F3FC ; fully-qualified # 🤚🏼 E3.0 raised back of hand: medium-light skin tone +1F91A 1F3FD ; fully-qualified # 🤚🏽 E3.0 raised back of hand: medium skin tone +1F91A 1F3FE ; fully-qualified # 🤚🏾 E3.0 raised back of hand: medium-dark skin tone +1F91A 1F3FF ; fully-qualified # 🤚🏿 E3.0 raised back of hand: dark skin tone +1F590 FE0F ; fully-qualified # 🖐️ E0.7 hand with fingers splayed +1F590 ; unqualified # 🖐 E0.7 hand with fingers splayed +1F590 1F3FB ; fully-qualified # 🖐🏻 E1.0 hand with fingers splayed: light skin tone +1F590 1F3FC ; fully-qualified # 🖐🏼 E1.0 hand with fingers splayed: medium-light skin tone +1F590 1F3FD ; fully-qualified # 🖐🏽 E1.0 hand with fingers splayed: medium skin tone +1F590 1F3FE ; fully-qualified # 🖐🏾 E1.0 hand with fingers splayed: medium-dark skin tone +1F590 1F3FF ; fully-qualified # 🖐🏿 E1.0 hand with fingers splayed: dark skin tone +270B ; fully-qualified # ✋ E0.6 raised hand +270B 1F3FB ; fully-qualified # ✋🏻 E1.0 raised hand: light skin tone +270B 1F3FC ; fully-qualified # ✋🏼 E1.0 raised hand: medium-light skin tone +270B 1F3FD ; fully-qualified # ✋🏽 E1.0 raised hand: medium skin tone +270B 1F3FE ; fully-qualified # ✋🏾 E1.0 raised hand: medium-dark skin tone +270B 1F3FF ; fully-qualified # ✋🏿 E1.0 raised hand: dark skin tone +1F596 ; fully-qualified # 🖖 E1.0 vulcan salute +1F596 1F3FB ; fully-qualified # 🖖🏻 E1.0 vulcan salute: light skin tone +1F596 1F3FC ; fully-qualified # 🖖🏼 E1.0 vulcan salute: medium-light skin tone +1F596 1F3FD ; fully-qualified # 🖖🏽 E1.0 vulcan salute: medium skin tone +1F596 1F3FE ; fully-qualified # 🖖🏾 E1.0 vulcan salute: medium-dark skin tone +1F596 1F3FF ; fully-qualified # 🖖🏿 E1.0 vulcan salute: dark skin tone +1FAF1 ; fully-qualified # 🫱 E14.0 rightwards hand +1FAF1 1F3FB ; fully-qualified # 🫱🏻 E14.0 rightwards hand: light skin tone +1FAF1 1F3FC ; fully-qualified # 🫱🏼 E14.0 rightwards hand: medium-light skin tone +1FAF1 1F3FD ; fully-qualified # 🫱🏽 E14.0 rightwards hand: medium skin tone +1FAF1 1F3FE ; fully-qualified # 🫱🏾 E14.0 rightwards hand: medium-dark skin tone +1FAF1 1F3FF ; fully-qualified # 🫱🏿 E14.0 rightwards hand: dark skin tone +1FAF2 ; fully-qualified # 🫲 E14.0 leftwards hand +1FAF2 1F3FB ; fully-qualified # 🫲🏻 E14.0 leftwards hand: light skin tone +1FAF2 1F3FC ; fully-qualified # 🫲🏼 E14.0 leftwards hand: medium-light skin tone +1FAF2 1F3FD ; fully-qualified # 🫲🏽 E14.0 leftwards hand: medium skin tone +1FAF2 1F3FE ; fully-qualified # 🫲🏾 E14.0 leftwards hand: medium-dark skin tone +1FAF2 1F3FF ; fully-qualified # 🫲🏿 E14.0 leftwards hand: dark skin tone +1FAF3 ; fully-qualified # 🫳 E14.0 palm down hand +1FAF3 1F3FB ; fully-qualified # 🫳🏻 E14.0 palm down hand: light skin tone +1FAF3 1F3FC ; fully-qualified # 🫳🏼 E14.0 palm down hand: medium-light skin tone +1FAF3 1F3FD ; fully-qualified # 🫳🏽 E14.0 palm down hand: medium skin tone +1FAF3 1F3FE ; fully-qualified # 🫳🏾 E14.0 palm down hand: medium-dark skin tone +1FAF3 1F3FF ; fully-qualified # 🫳🏿 E14.0 palm down hand: dark skin tone +1FAF4 ; fully-qualified # 🫴 E14.0 palm up hand +1FAF4 1F3FB ; fully-qualified # 🫴🏻 E14.0 palm up hand: light skin tone +1FAF4 1F3FC ; fully-qualified # 🫴🏼 E14.0 palm up hand: medium-light skin tone +1FAF4 1F3FD ; fully-qualified # 🫴🏽 E14.0 palm up hand: medium skin tone +1FAF4 1F3FE ; fully-qualified # 🫴🏾 E14.0 palm up hand: medium-dark skin tone +1FAF4 1F3FF ; fully-qualified # 🫴🏿 E14.0 palm up hand: dark skin tone + +# subgroup: hand-fingers-partial +1F44C ; fully-qualified # 👌 E0.6 OK hand +1F44C 1F3FB ; fully-qualified # 👌🏻 E1.0 OK hand: light skin tone +1F44C 1F3FC ; fully-qualified # 👌🏼 E1.0 OK hand: medium-light skin tone +1F44C 1F3FD ; fully-qualified # 👌🏽 E1.0 OK hand: medium skin tone +1F44C 1F3FE ; fully-qualified # 👌🏾 E1.0 OK hand: medium-dark skin tone +1F44C 1F3FF ; fully-qualified # 👌🏿 E1.0 OK hand: dark skin tone +1F90C ; fully-qualified # 🤌 E13.0 pinched fingers +1F90C 1F3FB ; fully-qualified # 🤌🏻 E13.0 pinched fingers: light skin tone +1F90C 1F3FC ; fully-qualified # 🤌🏼 E13.0 pinched fingers: medium-light skin tone +1F90C 1F3FD ; fully-qualified # 🤌🏽 E13.0 pinched fingers: medium skin tone +1F90C 1F3FE ; fully-qualified # 🤌🏾 E13.0 pinched fingers: medium-dark skin tone +1F90C 1F3FF ; fully-qualified # 🤌🏿 E13.0 pinched fingers: dark skin tone +1F90F ; fully-qualified # 🤏 E12.0 pinching hand +1F90F 1F3FB ; fully-qualified # 🤏🏻 E12.0 pinching hand: light skin tone +1F90F 1F3FC ; fully-qualified # 🤏🏼 E12.0 pinching hand: medium-light skin tone +1F90F 1F3FD ; fully-qualified # 🤏🏽 E12.0 pinching hand: medium skin tone +1F90F 1F3FE ; fully-qualified # 🤏🏾 E12.0 pinching hand: medium-dark skin tone +1F90F 1F3FF ; fully-qualified # 🤏🏿 E12.0 pinching hand: dark skin tone +270C FE0F ; fully-qualified # ✌️ E0.6 victory hand +270C ; unqualified # ✌ E0.6 victory hand +270C 1F3FB ; fully-qualified # ✌🏻 E1.0 victory hand: light skin tone +270C 1F3FC ; fully-qualified # ✌🏼 E1.0 victory hand: medium-light skin tone +270C 1F3FD ; fully-qualified # ✌🏽 E1.0 victory hand: medium skin tone +270C 1F3FE ; fully-qualified # ✌🏾 E1.0 victory hand: medium-dark skin tone +270C 1F3FF ; fully-qualified # ✌🏿 E1.0 victory hand: dark skin tone +1F91E ; fully-qualified # 🤞 E3.0 crossed fingers +1F91E 1F3FB ; fully-qualified # 🤞🏻 E3.0 crossed fingers: light skin tone +1F91E 1F3FC ; fully-qualified # 🤞🏼 E3.0 crossed fingers: medium-light skin tone +1F91E 1F3FD ; fully-qualified # 🤞🏽 E3.0 crossed fingers: medium skin tone +1F91E 1F3FE ; fully-qualified # 🤞🏾 E3.0 crossed fingers: medium-dark skin tone +1F91E 1F3FF ; fully-qualified # 🤞🏿 E3.0 crossed fingers: dark skin tone +1FAF0 ; fully-qualified # 🫰 E14.0 hand with index finger and thumb crossed +1FAF0 1F3FB ; fully-qualified # 🫰🏻 E14.0 hand with index finger and thumb crossed: light skin tone +1FAF0 1F3FC ; fully-qualified # 🫰🏼 E14.0 hand with index finger and thumb crossed: medium-light skin tone +1FAF0 1F3FD ; fully-qualified # 🫰🏽 E14.0 hand with index finger and thumb crossed: medium skin tone +1FAF0 1F3FE ; fully-qualified # 🫰🏾 E14.0 hand with index finger and thumb crossed: medium-dark skin tone +1FAF0 1F3FF ; fully-qualified # 🫰🏿 E14.0 hand with index finger and thumb crossed: dark skin tone +1F91F ; fully-qualified # 🤟 E5.0 love-you gesture +1F91F 1F3FB ; fully-qualified # 🤟🏻 E5.0 love-you gesture: light skin tone +1F91F 1F3FC ; fully-qualified # 🤟🏼 E5.0 love-you gesture: medium-light skin tone +1F91F 1F3FD ; fully-qualified # 🤟🏽 E5.0 love-you gesture: medium skin tone +1F91F 1F3FE ; fully-qualified # 🤟🏾 E5.0 love-you gesture: medium-dark skin tone +1F91F 1F3FF ; fully-qualified # 🤟🏿 E5.0 love-you gesture: dark skin tone +1F918 ; fully-qualified # 🤘 E1.0 sign of the horns +1F918 1F3FB ; fully-qualified # 🤘🏻 E1.0 sign of the horns: light skin tone +1F918 1F3FC ; fully-qualified # 🤘🏼 E1.0 sign of the horns: medium-light skin tone +1F918 1F3FD ; fully-qualified # 🤘🏽 E1.0 sign of the horns: medium skin tone +1F918 1F3FE ; fully-qualified # 🤘🏾 E1.0 sign of the horns: medium-dark skin tone +1F918 1F3FF ; fully-qualified # 🤘🏿 E1.0 sign of the horns: dark skin tone +1F919 ; fully-qualified # 🤙 E3.0 call me hand +1F919 1F3FB ; fully-qualified # 🤙🏻 E3.0 call me hand: light skin tone +1F919 1F3FC ; fully-qualified # 🤙🏼 E3.0 call me hand: medium-light skin tone +1F919 1F3FD ; fully-qualified # 🤙🏽 E3.0 call me hand: medium skin tone +1F919 1F3FE ; fully-qualified # 🤙🏾 E3.0 call me hand: medium-dark skin tone +1F919 1F3FF ; fully-qualified # 🤙🏿 E3.0 call me hand: dark skin tone + +# subgroup: hand-single-finger +1F448 ; fully-qualified # 👈 E0.6 backhand index pointing left +1F448 1F3FB ; fully-qualified # 👈🏻 E1.0 backhand index pointing left: light skin tone +1F448 1F3FC ; fully-qualified # 👈🏼 E1.0 backhand index pointing left: medium-light skin tone +1F448 1F3FD ; fully-qualified # 👈🏽 E1.0 backhand index pointing left: medium skin tone +1F448 1F3FE ; fully-qualified # 👈🏾 E1.0 backhand index pointing left: medium-dark skin tone +1F448 1F3FF ; fully-qualified # 👈🏿 E1.0 backhand index pointing left: dark skin tone +1F449 ; fully-qualified # 👉 E0.6 backhand index pointing right +1F449 1F3FB ; fully-qualified # 👉🏻 E1.0 backhand index pointing right: light skin tone +1F449 1F3FC ; fully-qualified # 👉🏼 E1.0 backhand index pointing right: medium-light skin tone +1F449 1F3FD ; fully-qualified # 👉🏽 E1.0 backhand index pointing right: medium skin tone +1F449 1F3FE ; fully-qualified # 👉🏾 E1.0 backhand index pointing right: medium-dark skin tone +1F449 1F3FF ; fully-qualified # 👉🏿 E1.0 backhand index pointing right: dark skin tone +1F446 ; fully-qualified # 👆 E0.6 backhand index pointing up +1F446 1F3FB ; fully-qualified # 👆🏻 E1.0 backhand index pointing up: light skin tone +1F446 1F3FC ; fully-qualified # 👆🏼 E1.0 backhand index pointing up: medium-light skin tone +1F446 1F3FD ; fully-qualified # 👆🏽 E1.0 backhand index pointing up: medium skin tone +1F446 1F3FE ; fully-qualified # 👆🏾 E1.0 backhand index pointing up: medium-dark skin tone +1F446 1F3FF ; fully-qualified # 👆🏿 E1.0 backhand index pointing up: dark skin tone +1F595 ; fully-qualified # 🖕 E1.0 middle finger +1F595 1F3FB ; fully-qualified # 🖕🏻 E1.0 middle finger: light skin tone +1F595 1F3FC ; fully-qualified # 🖕🏼 E1.0 middle finger: medium-light skin tone +1F595 1F3FD ; fully-qualified # 🖕🏽 E1.0 middle finger: medium skin tone +1F595 1F3FE ; fully-qualified # 🖕🏾 E1.0 middle finger: medium-dark skin tone +1F595 1F3FF ; fully-qualified # 🖕🏿 E1.0 middle finger: dark skin tone +1F447 ; fully-qualified # 👇 E0.6 backhand index pointing down +1F447 1F3FB ; fully-qualified # 👇🏻 E1.0 backhand index pointing down: light skin tone +1F447 1F3FC ; fully-qualified # 👇🏼 E1.0 backhand index pointing down: medium-light skin tone +1F447 1F3FD ; fully-qualified # 👇🏽 E1.0 backhand index pointing down: medium skin tone +1F447 1F3FE ; fully-qualified # 👇🏾 E1.0 backhand index pointing down: medium-dark skin tone +1F447 1F3FF ; fully-qualified # 👇🏿 E1.0 backhand index pointing down: dark skin tone +261D FE0F ; fully-qualified # ☝️ E0.6 index pointing up +261D ; unqualified # ☝ E0.6 index pointing up +261D 1F3FB ; fully-qualified # ☝🏻 E1.0 index pointing up: light skin tone +261D 1F3FC ; fully-qualified # ☝🏼 E1.0 index pointing up: medium-light skin tone +261D 1F3FD ; fully-qualified # ☝🏽 E1.0 index pointing up: medium skin tone +261D 1F3FE ; fully-qualified # ☝🏾 E1.0 index pointing up: medium-dark skin tone +261D 1F3FF ; fully-qualified # ☝🏿 E1.0 index pointing up: dark skin tone +1FAF5 ; fully-qualified # 🫵 E14.0 index pointing at the viewer +1FAF5 1F3FB ; fully-qualified # 🫵🏻 E14.0 index pointing at the viewer: light skin tone +1FAF5 1F3FC ; fully-qualified # 🫵🏼 E14.0 index pointing at the viewer: medium-light skin tone +1FAF5 1F3FD ; fully-qualified # 🫵🏽 E14.0 index pointing at the viewer: medium skin tone +1FAF5 1F3FE ; fully-qualified # 🫵🏾 E14.0 index pointing at the viewer: medium-dark skin tone +1FAF5 1F3FF ; fully-qualified # 🫵🏿 E14.0 index pointing at the viewer: dark skin tone + +# subgroup: hand-fingers-closed +1F44D ; fully-qualified # 👍 E0.6 thumbs up +1F44D 1F3FB ; fully-qualified # 👍🏻 E1.0 thumbs up: light skin tone +1F44D 1F3FC ; fully-qualified # 👍🏼 E1.0 thumbs up: medium-light skin tone +1F44D 1F3FD ; fully-qualified # 👍🏽 E1.0 thumbs up: medium skin tone +1F44D 1F3FE ; fully-qualified # 👍🏾 E1.0 thumbs up: medium-dark skin tone +1F44D 1F3FF ; fully-qualified # 👍🏿 E1.0 thumbs up: dark skin tone +1F44E ; fully-qualified # 👎 E0.6 thumbs down +1F44E 1F3FB ; fully-qualified # 👎🏻 E1.0 thumbs down: light skin tone +1F44E 1F3FC ; fully-qualified # 👎🏼 E1.0 thumbs down: medium-light skin tone +1F44E 1F3FD ; fully-qualified # 👎🏽 E1.0 thumbs down: medium skin tone +1F44E 1F3FE ; fully-qualified # 👎🏾 E1.0 thumbs down: medium-dark skin tone +1F44E 1F3FF ; fully-qualified # 👎🏿 E1.0 thumbs down: dark skin tone +270A ; fully-qualified # ✊ E0.6 raised fist +270A 1F3FB ; fully-qualified # ✊🏻 E1.0 raised fist: light skin tone +270A 1F3FC ; fully-qualified # ✊🏼 E1.0 raised fist: medium-light skin tone +270A 1F3FD ; fully-qualified # ✊🏽 E1.0 raised fist: medium skin tone +270A 1F3FE ; fully-qualified # ✊🏾 E1.0 raised fist: medium-dark skin tone +270A 1F3FF ; fully-qualified # ✊🏿 E1.0 raised fist: dark skin tone +1F44A ; fully-qualified # 👊 E0.6 oncoming fist +1F44A 1F3FB ; fully-qualified # 👊🏻 E1.0 oncoming fist: light skin tone +1F44A 1F3FC ; fully-qualified # 👊🏼 E1.0 oncoming fist: medium-light skin tone +1F44A 1F3FD ; fully-qualified # 👊🏽 E1.0 oncoming fist: medium skin tone +1F44A 1F3FE ; fully-qualified # 👊🏾 E1.0 oncoming fist: medium-dark skin tone +1F44A 1F3FF ; fully-qualified # 👊🏿 E1.0 oncoming fist: dark skin tone +1F91B ; fully-qualified # 🤛 E3.0 left-facing fist +1F91B 1F3FB ; fully-qualified # 🤛🏻 E3.0 left-facing fist: light skin tone +1F91B 1F3FC ; fully-qualified # 🤛🏼 E3.0 left-facing fist: medium-light skin tone +1F91B 1F3FD ; fully-qualified # 🤛🏽 E3.0 left-facing fist: medium skin tone +1F91B 1F3FE ; fully-qualified # 🤛🏾 E3.0 left-facing fist: medium-dark skin tone +1F91B 1F3FF ; fully-qualified # 🤛🏿 E3.0 left-facing fist: dark skin tone +1F91C ; fully-qualified # 🤜 E3.0 right-facing fist +1F91C 1F3FB ; fully-qualified # 🤜🏻 E3.0 right-facing fist: light skin tone +1F91C 1F3FC ; fully-qualified # 🤜🏼 E3.0 right-facing fist: medium-light skin tone +1F91C 1F3FD ; fully-qualified # 🤜🏽 E3.0 right-facing fist: medium skin tone +1F91C 1F3FE ; fully-qualified # 🤜🏾 E3.0 right-facing fist: medium-dark skin tone +1F91C 1F3FF ; fully-qualified # 🤜🏿 E3.0 right-facing fist: dark skin tone + +# subgroup: hands +1F44F ; fully-qualified # 👏 E0.6 clapping hands +1F44F 1F3FB ; fully-qualified # 👏🏻 E1.0 clapping hands: light skin tone +1F44F 1F3FC ; fully-qualified # 👏🏼 E1.0 clapping hands: medium-light skin tone +1F44F 1F3FD ; fully-qualified # 👏🏽 E1.0 clapping hands: medium skin tone +1F44F 1F3FE ; fully-qualified # 👏🏾 E1.0 clapping hands: medium-dark skin tone +1F44F 1F3FF ; fully-qualified # 👏🏿 E1.0 clapping hands: dark skin tone +1F64C ; fully-qualified # 🙌 E0.6 raising hands +1F64C 1F3FB ; fully-qualified # 🙌🏻 E1.0 raising hands: light skin tone +1F64C 1F3FC ; fully-qualified # 🙌🏼 E1.0 raising hands: medium-light skin tone +1F64C 1F3FD ; fully-qualified # 🙌🏽 E1.0 raising hands: medium skin tone +1F64C 1F3FE ; fully-qualified # 🙌🏾 E1.0 raising hands: medium-dark skin tone +1F64C 1F3FF ; fully-qualified # 🙌🏿 E1.0 raising hands: dark skin tone +1FAF6 ; fully-qualified # 🫶 E14.0 heart hands +1FAF6 1F3FB ; fully-qualified # 🫶🏻 E14.0 heart hands: light skin tone +1FAF6 1F3FC ; fully-qualified # 🫶🏼 E14.0 heart hands: medium-light skin tone +1FAF6 1F3FD ; fully-qualified # 🫶🏽 E14.0 heart hands: medium skin tone +1FAF6 1F3FE ; fully-qualified # 🫶🏾 E14.0 heart hands: medium-dark skin tone +1FAF6 1F3FF ; fully-qualified # 🫶🏿 E14.0 heart hands: dark skin tone +1F450 ; fully-qualified # 👐 E0.6 open hands +1F450 1F3FB ; fully-qualified # 👐🏻 E1.0 open hands: light skin tone +1F450 1F3FC ; fully-qualified # 👐🏼 E1.0 open hands: medium-light skin tone +1F450 1F3FD ; fully-qualified # 👐🏽 E1.0 open hands: medium skin tone +1F450 1F3FE ; fully-qualified # 👐🏾 E1.0 open hands: medium-dark skin tone +1F450 1F3FF ; fully-qualified # 👐🏿 E1.0 open hands: dark skin tone +1F932 ; fully-qualified # 🤲 E5.0 palms up together +1F932 1F3FB ; fully-qualified # 🤲🏻 E5.0 palms up together: light skin tone +1F932 1F3FC ; fully-qualified # 🤲🏼 E5.0 palms up together: medium-light skin tone +1F932 1F3FD ; fully-qualified # 🤲🏽 E5.0 palms up together: medium skin tone +1F932 1F3FE ; fully-qualified # 🤲🏾 E5.0 palms up together: medium-dark skin tone +1F932 1F3FF ; fully-qualified # 🤲🏿 E5.0 palms up together: dark skin tone +1F91D ; fully-qualified # 🤝 E3.0 handshake +1F91D 1F3FB ; fully-qualified # 🤝🏻 E3.0 handshake: light skin tone +1F91D 1F3FC ; fully-qualified # 🤝🏼 E3.0 handshake: medium-light skin tone +1F91D 1F3FD ; fully-qualified # 🤝🏽 E3.0 handshake: medium skin tone +1F91D 1F3FE ; fully-qualified # 🤝🏾 E3.0 handshake: medium-dark skin tone +1F91D 1F3FF ; fully-qualified # 🤝🏿 E3.0 handshake: dark skin tone +1FAF1 1F3FB 200D 1FAF2 1F3FC ; fully-qualified # 🫱🏻‍🫲🏼 E14.0 handshake: light skin tone, medium-light skin tone +1FAF1 1F3FB 200D 1FAF2 1F3FD ; fully-qualified # 🫱🏻‍🫲🏽 E14.0 handshake: light skin tone, medium skin tone +1FAF1 1F3FB 200D 1FAF2 1F3FE ; fully-qualified # 🫱🏻‍🫲🏾 E14.0 handshake: light skin tone, medium-dark skin tone +1FAF1 1F3FB 200D 1FAF2 1F3FF ; fully-qualified # 🫱🏻‍🫲🏿 E14.0 handshake: light skin tone, dark skin tone +1FAF1 1F3FC 200D 1FAF2 1F3FB ; fully-qualified # 🫱🏼‍🫲🏻 E14.0 handshake: medium-light skin tone, light skin tone +1FAF1 1F3FC 200D 1FAF2 1F3FD ; fully-qualified # 🫱🏼‍🫲🏽 E14.0 handshake: medium-light skin tone, medium skin tone +1FAF1 1F3FC 200D 1FAF2 1F3FE ; fully-qualified # 🫱🏼‍🫲🏾 E14.0 handshake: medium-light skin tone, medium-dark skin tone +1FAF1 1F3FC 200D 1FAF2 1F3FF ; fully-qualified # 🫱🏼‍🫲🏿 E14.0 handshake: medium-light skin tone, dark skin tone +1FAF1 1F3FD 200D 1FAF2 1F3FB ; fully-qualified # 🫱🏽‍🫲🏻 E14.0 handshake: medium skin tone, light skin tone +1FAF1 1F3FD 200D 1FAF2 1F3FC ; fully-qualified # 🫱🏽‍🫲🏼 E14.0 handshake: medium skin tone, medium-light skin tone +1FAF1 1F3FD 200D 1FAF2 1F3FE ; fully-qualified # 🫱🏽‍🫲🏾 E14.0 handshake: medium skin tone, medium-dark skin tone +1FAF1 1F3FD 200D 1FAF2 1F3FF ; fully-qualified # 🫱🏽‍🫲🏿 E14.0 handshake: medium skin tone, dark skin tone +1FAF1 1F3FE 200D 1FAF2 1F3FB ; fully-qualified # 🫱🏾‍🫲🏻 E14.0 handshake: medium-dark skin tone, light skin tone +1FAF1 1F3FE 200D 1FAF2 1F3FC ; fully-qualified # 🫱🏾‍🫲🏼 E14.0 handshake: medium-dark skin tone, medium-light skin tone +1FAF1 1F3FE 200D 1FAF2 1F3FD ; fully-qualified # 🫱🏾‍🫲🏽 E14.0 handshake: medium-dark skin tone, medium skin tone +1FAF1 1F3FE 200D 1FAF2 1F3FF ; fully-qualified # 🫱🏾‍🫲🏿 E14.0 handshake: medium-dark skin tone, dark skin tone +1FAF1 1F3FF 200D 1FAF2 1F3FB ; fully-qualified # 🫱🏿‍🫲🏻 E14.0 handshake: dark skin tone, light skin tone +1FAF1 1F3FF 200D 1FAF2 1F3FC ; fully-qualified # 🫱🏿‍🫲🏼 E14.0 handshake: dark skin tone, medium-light skin tone +1FAF1 1F3FF 200D 1FAF2 1F3FD ; fully-qualified # 🫱🏿‍🫲🏽 E14.0 handshake: dark skin tone, medium skin tone +1FAF1 1F3FF 200D 1FAF2 1F3FE ; fully-qualified # 🫱🏿‍🫲🏾 E14.0 handshake: dark skin tone, medium-dark skin tone +1F64F ; fully-qualified # 🙏 E0.6 folded hands +1F64F 1F3FB ; fully-qualified # 🙏🏻 E1.0 folded hands: light skin tone +1F64F 1F3FC ; fully-qualified # 🙏🏼 E1.0 folded hands: medium-light skin tone +1F64F 1F3FD ; fully-qualified # 🙏🏽 E1.0 folded hands: medium skin tone +1F64F 1F3FE ; fully-qualified # 🙏🏾 E1.0 folded hands: medium-dark skin tone +1F64F 1F3FF ; fully-qualified # 🙏🏿 E1.0 folded hands: dark skin tone + +# subgroup: hand-prop +270D FE0F ; fully-qualified # ✍️ E0.7 writing hand +270D ; unqualified # ✍ E0.7 writing hand +270D 1F3FB ; fully-qualified # ✍🏻 E1.0 writing hand: light skin tone +270D 1F3FC ; fully-qualified # ✍🏼 E1.0 writing hand: medium-light skin tone +270D 1F3FD ; fully-qualified # ✍🏽 E1.0 writing hand: medium skin tone +270D 1F3FE ; fully-qualified # ✍🏾 E1.0 writing hand: medium-dark skin tone +270D 1F3FF ; fully-qualified # ✍🏿 E1.0 writing hand: dark skin tone +1F485 ; fully-qualified # 💅 E0.6 nail polish +1F485 1F3FB ; fully-qualified # 💅🏻 E1.0 nail polish: light skin tone +1F485 1F3FC ; fully-qualified # 💅🏼 E1.0 nail polish: medium-light skin tone +1F485 1F3FD ; fully-qualified # 💅🏽 E1.0 nail polish: medium skin tone +1F485 1F3FE ; fully-qualified # 💅🏾 E1.0 nail polish: medium-dark skin tone +1F485 1F3FF ; fully-qualified # 💅🏿 E1.0 nail polish: dark skin tone +1F933 ; fully-qualified # 🤳 E3.0 selfie +1F933 1F3FB ; fully-qualified # 🤳🏻 E3.0 selfie: light skin tone +1F933 1F3FC ; fully-qualified # 🤳🏼 E3.0 selfie: medium-light skin tone +1F933 1F3FD ; fully-qualified # 🤳🏽 E3.0 selfie: medium skin tone +1F933 1F3FE ; fully-qualified # 🤳🏾 E3.0 selfie: medium-dark skin tone +1F933 1F3FF ; fully-qualified # 🤳🏿 E3.0 selfie: dark skin tone + +# subgroup: body-parts +1F4AA ; fully-qualified # 💪 E0.6 flexed biceps +1F4AA 1F3FB ; fully-qualified # 💪🏻 E1.0 flexed biceps: light skin tone +1F4AA 1F3FC ; fully-qualified # 💪🏼 E1.0 flexed biceps: medium-light skin tone +1F4AA 1F3FD ; fully-qualified # 💪🏽 E1.0 flexed biceps: medium skin tone +1F4AA 1F3FE ; fully-qualified # 💪🏾 E1.0 flexed biceps: medium-dark skin tone +1F4AA 1F3FF ; fully-qualified # 💪🏿 E1.0 flexed biceps: dark skin tone +1F9BE ; fully-qualified # 🦾 E12.0 mechanical arm +1F9BF ; fully-qualified # 🦿 E12.0 mechanical leg +1F9B5 ; fully-qualified # 🦵 E11.0 leg +1F9B5 1F3FB ; fully-qualified # 🦵🏻 E11.0 leg: light skin tone +1F9B5 1F3FC ; fully-qualified # 🦵🏼 E11.0 leg: medium-light skin tone +1F9B5 1F3FD ; fully-qualified # 🦵🏽 E11.0 leg: medium skin tone +1F9B5 1F3FE ; fully-qualified # 🦵🏾 E11.0 leg: medium-dark skin tone +1F9B5 1F3FF ; fully-qualified # 🦵🏿 E11.0 leg: dark skin tone +1F9B6 ; fully-qualified # 🦶 E11.0 foot +1F9B6 1F3FB ; fully-qualified # 🦶🏻 E11.0 foot: light skin tone +1F9B6 1F3FC ; fully-qualified # 🦶🏼 E11.0 foot: medium-light skin tone +1F9B6 1F3FD ; fully-qualified # 🦶🏽 E11.0 foot: medium skin tone +1F9B6 1F3FE ; fully-qualified # 🦶🏾 E11.0 foot: medium-dark skin tone +1F9B6 1F3FF ; fully-qualified # 🦶🏿 E11.0 foot: dark skin tone +1F442 ; fully-qualified # 👂 E0.6 ear +1F442 1F3FB ; fully-qualified # 👂🏻 E1.0 ear: light skin tone +1F442 1F3FC ; fully-qualified # 👂🏼 E1.0 ear: medium-light skin tone +1F442 1F3FD ; fully-qualified # 👂🏽 E1.0 ear: medium skin tone +1F442 1F3FE ; fully-qualified # 👂🏾 E1.0 ear: medium-dark skin tone +1F442 1F3FF ; fully-qualified # 👂🏿 E1.0 ear: dark skin tone +1F9BB ; fully-qualified # 🦻 E12.0 ear with hearing aid +1F9BB 1F3FB ; fully-qualified # 🦻🏻 E12.0 ear with hearing aid: light skin tone +1F9BB 1F3FC ; fully-qualified # 🦻🏼 E12.0 ear with hearing aid: medium-light skin tone +1F9BB 1F3FD ; fully-qualified # 🦻🏽 E12.0 ear with hearing aid: medium skin tone +1F9BB 1F3FE ; fully-qualified # 🦻🏾 E12.0 ear with hearing aid: medium-dark skin tone +1F9BB 1F3FF ; fully-qualified # 🦻🏿 E12.0 ear with hearing aid: dark skin tone +1F443 ; fully-qualified # 👃 E0.6 nose +1F443 1F3FB ; fully-qualified # 👃🏻 E1.0 nose: light skin tone +1F443 1F3FC ; fully-qualified # 👃🏼 E1.0 nose: medium-light skin tone +1F443 1F3FD ; fully-qualified # 👃🏽 E1.0 nose: medium skin tone +1F443 1F3FE ; fully-qualified # 👃🏾 E1.0 nose: medium-dark skin tone +1F443 1F3FF ; fully-qualified # 👃🏿 E1.0 nose: dark skin tone +1F9E0 ; fully-qualified # 🧠 E5.0 brain +1FAC0 ; fully-qualified # 🫀 E13.0 anatomical heart +1FAC1 ; fully-qualified # 🫁 E13.0 lungs +1F9B7 ; fully-qualified # 🦷 E11.0 tooth +1F9B4 ; fully-qualified # 🦴 E11.0 bone +1F440 ; fully-qualified # 👀 E0.6 eyes +1F441 FE0F ; fully-qualified # 👁️ E0.7 eye +1F441 ; unqualified # 👁 E0.7 eye +1F445 ; fully-qualified # 👅 E0.6 tongue +1F444 ; fully-qualified # 👄 E0.6 mouth +1FAE6 ; fully-qualified # 🫦 E14.0 biting lip + +# subgroup: person +1F476 ; fully-qualified # 👶 E0.6 baby +1F476 1F3FB ; fully-qualified # 👶🏻 E1.0 baby: light skin tone +1F476 1F3FC ; fully-qualified # 👶🏼 E1.0 baby: medium-light skin tone +1F476 1F3FD ; fully-qualified # 👶🏽 E1.0 baby: medium skin tone +1F476 1F3FE ; fully-qualified # 👶🏾 E1.0 baby: medium-dark skin tone +1F476 1F3FF ; fully-qualified # 👶🏿 E1.0 baby: dark skin tone +1F9D2 ; fully-qualified # 🧒 E5.0 child +1F9D2 1F3FB ; fully-qualified # 🧒🏻 E5.0 child: light skin tone +1F9D2 1F3FC ; fully-qualified # 🧒🏼 E5.0 child: medium-light skin tone +1F9D2 1F3FD ; fully-qualified # 🧒🏽 E5.0 child: medium skin tone +1F9D2 1F3FE ; fully-qualified # 🧒🏾 E5.0 child: medium-dark skin tone +1F9D2 1F3FF ; fully-qualified # 🧒🏿 E5.0 child: dark skin tone +1F466 ; fully-qualified # 👦 E0.6 boy +1F466 1F3FB ; fully-qualified # 👦🏻 E1.0 boy: light skin tone +1F466 1F3FC ; fully-qualified # 👦🏼 E1.0 boy: medium-light skin tone +1F466 1F3FD ; fully-qualified # 👦🏽 E1.0 boy: medium skin tone +1F466 1F3FE ; fully-qualified # 👦🏾 E1.0 boy: medium-dark skin tone +1F466 1F3FF ; fully-qualified # 👦🏿 E1.0 boy: dark skin tone +1F467 ; fully-qualified # 👧 E0.6 girl +1F467 1F3FB ; fully-qualified # 👧🏻 E1.0 girl: light skin tone +1F467 1F3FC ; fully-qualified # 👧🏼 E1.0 girl: medium-light skin tone +1F467 1F3FD ; fully-qualified # 👧🏽 E1.0 girl: medium skin tone +1F467 1F3FE ; fully-qualified # 👧🏾 E1.0 girl: medium-dark skin tone +1F467 1F3FF ; fully-qualified # 👧🏿 E1.0 girl: dark skin tone +1F9D1 ; fully-qualified # 🧑 E5.0 person +1F9D1 1F3FB ; fully-qualified # 🧑🏻 E5.0 person: light skin tone +1F9D1 1F3FC ; fully-qualified # 🧑🏼 E5.0 person: medium-light skin tone +1F9D1 1F3FD ; fully-qualified # 🧑🏽 E5.0 person: medium skin tone +1F9D1 1F3FE ; fully-qualified # 🧑🏾 E5.0 person: medium-dark skin tone +1F9D1 1F3FF ; fully-qualified # 🧑🏿 E5.0 person: dark skin tone +1F471 ; fully-qualified # 👱 E0.6 person: blond hair +1F471 1F3FB ; fully-qualified # 👱🏻 E1.0 person: light skin tone, blond hair +1F471 1F3FC ; fully-qualified # 👱🏼 E1.0 person: medium-light skin tone, blond hair +1F471 1F3FD ; fully-qualified # 👱🏽 E1.0 person: medium skin tone, blond hair +1F471 1F3FE ; fully-qualified # 👱🏾 E1.0 person: medium-dark skin tone, blond hair +1F471 1F3FF ; fully-qualified # 👱🏿 E1.0 person: dark skin tone, blond hair +1F468 ; fully-qualified # 👨 E0.6 man +1F468 1F3FB ; fully-qualified # 👨🏻 E1.0 man: light skin tone +1F468 1F3FC ; fully-qualified # 👨🏼 E1.0 man: medium-light skin tone +1F468 1F3FD ; fully-qualified # 👨🏽 E1.0 man: medium skin tone +1F468 1F3FE ; fully-qualified # 👨🏾 E1.0 man: medium-dark skin tone +1F468 1F3FF ; fully-qualified # 👨🏿 E1.0 man: dark skin tone +1F9D4 ; fully-qualified # 🧔 E5.0 person: beard +1F9D4 1F3FB ; fully-qualified # 🧔🏻 E5.0 person: light skin tone, beard +1F9D4 1F3FC ; fully-qualified # 🧔🏼 E5.0 person: medium-light skin tone, beard +1F9D4 1F3FD ; fully-qualified # 🧔🏽 E5.0 person: medium skin tone, beard +1F9D4 1F3FE ; fully-qualified # 🧔🏾 E5.0 person: medium-dark skin tone, beard +1F9D4 1F3FF ; fully-qualified # 🧔🏿 E5.0 person: dark skin tone, beard +1F9D4 200D 2642 FE0F ; fully-qualified # 🧔‍♂️ E13.1 man: beard +1F9D4 200D 2642 ; minimally-qualified # 🧔‍♂ E13.1 man: beard +1F9D4 1F3FB 200D 2642 FE0F ; fully-qualified # 🧔🏻‍♂️ E13.1 man: light skin tone, beard +1F9D4 1F3FB 200D 2642 ; minimally-qualified # 🧔🏻‍♂ E13.1 man: light skin tone, beard +1F9D4 1F3FC 200D 2642 FE0F ; fully-qualified # 🧔🏼‍♂️ E13.1 man: medium-light skin tone, beard +1F9D4 1F3FC 200D 2642 ; minimally-qualified # 🧔🏼‍♂ E13.1 man: medium-light skin tone, beard +1F9D4 1F3FD 200D 2642 FE0F ; fully-qualified # 🧔🏽‍♂️ E13.1 man: medium skin tone, beard +1F9D4 1F3FD 200D 2642 ; minimally-qualified # 🧔🏽‍♂ E13.1 man: medium skin tone, beard +1F9D4 1F3FE 200D 2642 FE0F ; fully-qualified # 🧔🏾‍♂️ E13.1 man: medium-dark skin tone, beard +1F9D4 1F3FE 200D 2642 ; minimally-qualified # 🧔🏾‍♂ E13.1 man: medium-dark skin tone, beard +1F9D4 1F3FF 200D 2642 FE0F ; fully-qualified # 🧔🏿‍♂️ E13.1 man: dark skin tone, beard +1F9D4 1F3FF 200D 2642 ; minimally-qualified # 🧔🏿‍♂ E13.1 man: dark skin tone, beard +1F9D4 200D 2640 FE0F ; fully-qualified # 🧔‍♀️ E13.1 woman: beard +1F9D4 200D 2640 ; minimally-qualified # 🧔‍♀ E13.1 woman: beard +1F9D4 1F3FB 200D 2640 FE0F ; fully-qualified # 🧔🏻‍♀️ E13.1 woman: light skin tone, beard +1F9D4 1F3FB 200D 2640 ; minimally-qualified # 🧔🏻‍♀ E13.1 woman: light skin tone, beard +1F9D4 1F3FC 200D 2640 FE0F ; fully-qualified # 🧔🏼‍♀️ E13.1 woman: medium-light skin tone, beard +1F9D4 1F3FC 200D 2640 ; minimally-qualified # 🧔🏼‍♀ E13.1 woman: medium-light skin tone, beard +1F9D4 1F3FD 200D 2640 FE0F ; fully-qualified # 🧔🏽‍♀️ E13.1 woman: medium skin tone, beard +1F9D4 1F3FD 200D 2640 ; minimally-qualified # 🧔🏽‍♀ E13.1 woman: medium skin tone, beard +1F9D4 1F3FE 200D 2640 FE0F ; fully-qualified # 🧔🏾‍♀️ E13.1 woman: medium-dark skin tone, beard +1F9D4 1F3FE 200D 2640 ; minimally-qualified # 🧔🏾‍♀ E13.1 woman: medium-dark skin tone, beard +1F9D4 1F3FF 200D 2640 FE0F ; fully-qualified # 🧔🏿‍♀️ E13.1 woman: dark skin tone, beard +1F9D4 1F3FF 200D 2640 ; minimally-qualified # 🧔🏿‍♀ E13.1 woman: dark skin tone, beard +1F468 200D 1F9B0 ; fully-qualified # 👨‍🦰 E11.0 man: red hair +1F468 1F3FB 200D 1F9B0 ; fully-qualified # 👨🏻‍🦰 E11.0 man: light skin tone, red hair +1F468 1F3FC 200D 1F9B0 ; fully-qualified # 👨🏼‍🦰 E11.0 man: medium-light skin tone, red hair +1F468 1F3FD 200D 1F9B0 ; fully-qualified # 👨🏽‍🦰 E11.0 man: medium skin tone, red hair +1F468 1F3FE 200D 1F9B0 ; fully-qualified # 👨🏾‍🦰 E11.0 man: medium-dark skin tone, red hair +1F468 1F3FF 200D 1F9B0 ; fully-qualified # 👨🏿‍🦰 E11.0 man: dark skin tone, red hair +1F468 200D 1F9B1 ; fully-qualified # 👨‍🦱 E11.0 man: curly hair +1F468 1F3FB 200D 1F9B1 ; fully-qualified # 👨🏻‍🦱 E11.0 man: light skin tone, curly hair +1F468 1F3FC 200D 1F9B1 ; fully-qualified # 👨🏼‍🦱 E11.0 man: medium-light skin tone, curly hair +1F468 1F3FD 200D 1F9B1 ; fully-qualified # 👨🏽‍🦱 E11.0 man: medium skin tone, curly hair +1F468 1F3FE 200D 1F9B1 ; fully-qualified # 👨🏾‍🦱 E11.0 man: medium-dark skin tone, curly hair +1F468 1F3FF 200D 1F9B1 ; fully-qualified # 👨🏿‍🦱 E11.0 man: dark skin tone, curly hair +1F468 200D 1F9B3 ; fully-qualified # 👨‍🦳 E11.0 man: white hair +1F468 1F3FB 200D 1F9B3 ; fully-qualified # 👨🏻‍🦳 E11.0 man: light skin tone, white hair +1F468 1F3FC 200D 1F9B3 ; fully-qualified # 👨🏼‍🦳 E11.0 man: medium-light skin tone, white hair +1F468 1F3FD 200D 1F9B3 ; fully-qualified # 👨🏽‍🦳 E11.0 man: medium skin tone, white hair +1F468 1F3FE 200D 1F9B3 ; fully-qualified # 👨🏾‍🦳 E11.0 man: medium-dark skin tone, white hair +1F468 1F3FF 200D 1F9B3 ; fully-qualified # 👨🏿‍🦳 E11.0 man: dark skin tone, white hair +1F468 200D 1F9B2 ; fully-qualified # 👨‍🦲 E11.0 man: bald +1F468 1F3FB 200D 1F9B2 ; fully-qualified # 👨🏻‍🦲 E11.0 man: light skin tone, bald +1F468 1F3FC 200D 1F9B2 ; fully-qualified # 👨🏼‍🦲 E11.0 man: medium-light skin tone, bald +1F468 1F3FD 200D 1F9B2 ; fully-qualified # 👨🏽‍🦲 E11.0 man: medium skin tone, bald +1F468 1F3FE 200D 1F9B2 ; fully-qualified # 👨🏾‍🦲 E11.0 man: medium-dark skin tone, bald +1F468 1F3FF 200D 1F9B2 ; fully-qualified # 👨🏿‍🦲 E11.0 man: dark skin tone, bald +1F469 ; fully-qualified # 👩 E0.6 woman +1F469 1F3FB ; fully-qualified # 👩🏻 E1.0 woman: light skin tone +1F469 1F3FC ; fully-qualified # 👩🏼 E1.0 woman: medium-light skin tone +1F469 1F3FD ; fully-qualified # 👩🏽 E1.0 woman: medium skin tone +1F469 1F3FE ; fully-qualified # 👩🏾 E1.0 woman: medium-dark skin tone +1F469 1F3FF ; fully-qualified # 👩🏿 E1.0 woman: dark skin tone +1F469 200D 1F9B0 ; fully-qualified # 👩‍🦰 E11.0 woman: red hair +1F469 1F3FB 200D 1F9B0 ; fully-qualified # 👩🏻‍🦰 E11.0 woman: light skin tone, red hair +1F469 1F3FC 200D 1F9B0 ; fully-qualified # 👩🏼‍🦰 E11.0 woman: medium-light skin tone, red hair +1F469 1F3FD 200D 1F9B0 ; fully-qualified # 👩🏽‍🦰 E11.0 woman: medium skin tone, red hair +1F469 1F3FE 200D 1F9B0 ; fully-qualified # 👩🏾‍🦰 E11.0 woman: medium-dark skin tone, red hair +1F469 1F3FF 200D 1F9B0 ; fully-qualified # 👩🏿‍🦰 E11.0 woman: dark skin tone, red hair +1F9D1 200D 1F9B0 ; fully-qualified # 🧑‍🦰 E12.1 person: red hair +1F9D1 1F3FB 200D 1F9B0 ; fully-qualified # 🧑🏻‍🦰 E12.1 person: light skin tone, red hair +1F9D1 1F3FC 200D 1F9B0 ; fully-qualified # 🧑🏼‍🦰 E12.1 person: medium-light skin tone, red hair +1F9D1 1F3FD 200D 1F9B0 ; fully-qualified # 🧑🏽‍🦰 E12.1 person: medium skin tone, red hair +1F9D1 1F3FE 200D 1F9B0 ; fully-qualified # 🧑🏾‍🦰 E12.1 person: medium-dark skin tone, red hair +1F9D1 1F3FF 200D 1F9B0 ; fully-qualified # 🧑🏿‍🦰 E12.1 person: dark skin tone, red hair +1F469 200D 1F9B1 ; fully-qualified # 👩‍🦱 E11.0 woman: curly hair +1F469 1F3FB 200D 1F9B1 ; fully-qualified # 👩🏻‍🦱 E11.0 woman: light skin tone, curly hair +1F469 1F3FC 200D 1F9B1 ; fully-qualified # 👩🏼‍🦱 E11.0 woman: medium-light skin tone, curly hair +1F469 1F3FD 200D 1F9B1 ; fully-qualified # 👩🏽‍🦱 E11.0 woman: medium skin tone, curly hair +1F469 1F3FE 200D 1F9B1 ; fully-qualified # 👩🏾‍🦱 E11.0 woman: medium-dark skin tone, curly hair +1F469 1F3FF 200D 1F9B1 ; fully-qualified # 👩🏿‍🦱 E11.0 woman: dark skin tone, curly hair +1F9D1 200D 1F9B1 ; fully-qualified # 🧑‍🦱 E12.1 person: curly hair +1F9D1 1F3FB 200D 1F9B1 ; fully-qualified # 🧑🏻‍🦱 E12.1 person: light skin tone, curly hair +1F9D1 1F3FC 200D 1F9B1 ; fully-qualified # 🧑🏼‍🦱 E12.1 person: medium-light skin tone, curly hair +1F9D1 1F3FD 200D 1F9B1 ; fully-qualified # 🧑🏽‍🦱 E12.1 person: medium skin tone, curly hair +1F9D1 1F3FE 200D 1F9B1 ; fully-qualified # 🧑🏾‍🦱 E12.1 person: medium-dark skin tone, curly hair +1F9D1 1F3FF 200D 1F9B1 ; fully-qualified # 🧑🏿‍🦱 E12.1 person: dark skin tone, curly hair +1F469 200D 1F9B3 ; fully-qualified # 👩‍🦳 E11.0 woman: white hair +1F469 1F3FB 200D 1F9B3 ; fully-qualified # 👩🏻‍🦳 E11.0 woman: light skin tone, white hair +1F469 1F3FC 200D 1F9B3 ; fully-qualified # 👩🏼‍🦳 E11.0 woman: medium-light skin tone, white hair +1F469 1F3FD 200D 1F9B3 ; fully-qualified # 👩🏽‍🦳 E11.0 woman: medium skin tone, white hair +1F469 1F3FE 200D 1F9B3 ; fully-qualified # 👩🏾‍🦳 E11.0 woman: medium-dark skin tone, white hair +1F469 1F3FF 200D 1F9B3 ; fully-qualified # 👩🏿‍🦳 E11.0 woman: dark skin tone, white hair +1F9D1 200D 1F9B3 ; fully-qualified # 🧑‍🦳 E12.1 person: white hair +1F9D1 1F3FB 200D 1F9B3 ; fully-qualified # 🧑🏻‍🦳 E12.1 person: light skin tone, white hair +1F9D1 1F3FC 200D 1F9B3 ; fully-qualified # 🧑🏼‍🦳 E12.1 person: medium-light skin tone, white hair +1F9D1 1F3FD 200D 1F9B3 ; fully-qualified # 🧑🏽‍🦳 E12.1 person: medium skin tone, white hair +1F9D1 1F3FE 200D 1F9B3 ; fully-qualified # 🧑🏾‍🦳 E12.1 person: medium-dark skin tone, white hair +1F9D1 1F3FF 200D 1F9B3 ; fully-qualified # 🧑🏿‍🦳 E12.1 person: dark skin tone, white hair +1F469 200D 1F9B2 ; fully-qualified # 👩‍🦲 E11.0 woman: bald +1F469 1F3FB 200D 1F9B2 ; fully-qualified # 👩🏻‍🦲 E11.0 woman: light skin tone, bald +1F469 1F3FC 200D 1F9B2 ; fully-qualified # 👩🏼‍🦲 E11.0 woman: medium-light skin tone, bald +1F469 1F3FD 200D 1F9B2 ; fully-qualified # 👩🏽‍🦲 E11.0 woman: medium skin tone, bald +1F469 1F3FE 200D 1F9B2 ; fully-qualified # 👩🏾‍🦲 E11.0 woman: medium-dark skin tone, bald +1F469 1F3FF 200D 1F9B2 ; fully-qualified # 👩🏿‍🦲 E11.0 woman: dark skin tone, bald +1F9D1 200D 1F9B2 ; fully-qualified # 🧑‍🦲 E12.1 person: bald +1F9D1 1F3FB 200D 1F9B2 ; fully-qualified # 🧑🏻‍🦲 E12.1 person: light skin tone, bald +1F9D1 1F3FC 200D 1F9B2 ; fully-qualified # 🧑🏼‍🦲 E12.1 person: medium-light skin tone, bald +1F9D1 1F3FD 200D 1F9B2 ; fully-qualified # 🧑🏽‍🦲 E12.1 person: medium skin tone, bald +1F9D1 1F3FE 200D 1F9B2 ; fully-qualified # 🧑🏾‍🦲 E12.1 person: medium-dark skin tone, bald +1F9D1 1F3FF 200D 1F9B2 ; fully-qualified # 🧑🏿‍🦲 E12.1 person: dark skin tone, bald +1F471 200D 2640 FE0F ; fully-qualified # 👱‍♀️ E4.0 woman: blond hair +1F471 200D 2640 ; minimally-qualified # 👱‍♀ E4.0 woman: blond hair +1F471 1F3FB 200D 2640 FE0F ; fully-qualified # 👱🏻‍♀️ E4.0 woman: light skin tone, blond hair +1F471 1F3FB 200D 2640 ; minimally-qualified # 👱🏻‍♀ E4.0 woman: light skin tone, blond hair +1F471 1F3FC 200D 2640 FE0F ; fully-qualified # 👱🏼‍♀️ E4.0 woman: medium-light skin tone, blond hair +1F471 1F3FC 200D 2640 ; minimally-qualified # 👱🏼‍♀ E4.0 woman: medium-light skin tone, blond hair +1F471 1F3FD 200D 2640 FE0F ; fully-qualified # 👱🏽‍♀️ E4.0 woman: medium skin tone, blond hair +1F471 1F3FD 200D 2640 ; minimally-qualified # 👱🏽‍♀ E4.0 woman: medium skin tone, blond hair +1F471 1F3FE 200D 2640 FE0F ; fully-qualified # 👱🏾‍♀️ E4.0 woman: medium-dark skin tone, blond hair +1F471 1F3FE 200D 2640 ; minimally-qualified # 👱🏾‍♀ E4.0 woman: medium-dark skin tone, blond hair +1F471 1F3FF 200D 2640 FE0F ; fully-qualified # 👱🏿‍♀️ E4.0 woman: dark skin tone, blond hair +1F471 1F3FF 200D 2640 ; minimally-qualified # 👱🏿‍♀ E4.0 woman: dark skin tone, blond hair +1F471 200D 2642 FE0F ; fully-qualified # 👱‍♂️ E4.0 man: blond hair +1F471 200D 2642 ; minimally-qualified # 👱‍♂ E4.0 man: blond hair +1F471 1F3FB 200D 2642 FE0F ; fully-qualified # 👱🏻‍♂️ E4.0 man: light skin tone, blond hair +1F471 1F3FB 200D 2642 ; minimally-qualified # 👱🏻‍♂ E4.0 man: light skin tone, blond hair +1F471 1F3FC 200D 2642 FE0F ; fully-qualified # 👱🏼‍♂️ E4.0 man: medium-light skin tone, blond hair +1F471 1F3FC 200D 2642 ; minimally-qualified # 👱🏼‍♂ E4.0 man: medium-light skin tone, blond hair +1F471 1F3FD 200D 2642 FE0F ; fully-qualified # 👱🏽‍♂️ E4.0 man: medium skin tone, blond hair +1F471 1F3FD 200D 2642 ; minimally-qualified # 👱🏽‍♂ E4.0 man: medium skin tone, blond hair +1F471 1F3FE 200D 2642 FE0F ; fully-qualified # 👱🏾‍♂️ E4.0 man: medium-dark skin tone, blond hair +1F471 1F3FE 200D 2642 ; minimally-qualified # 👱🏾‍♂ E4.0 man: medium-dark skin tone, blond hair +1F471 1F3FF 200D 2642 FE0F ; fully-qualified # 👱🏿‍♂️ E4.0 man: dark skin tone, blond hair +1F471 1F3FF 200D 2642 ; minimally-qualified # 👱🏿‍♂ E4.0 man: dark skin tone, blond hair +1F9D3 ; fully-qualified # 🧓 E5.0 older person +1F9D3 1F3FB ; fully-qualified # 🧓🏻 E5.0 older person: light skin tone +1F9D3 1F3FC ; fully-qualified # 🧓🏼 E5.0 older person: medium-light skin tone +1F9D3 1F3FD ; fully-qualified # 🧓🏽 E5.0 older person: medium skin tone +1F9D3 1F3FE ; fully-qualified # 🧓🏾 E5.0 older person: medium-dark skin tone +1F9D3 1F3FF ; fully-qualified # 🧓🏿 E5.0 older person: dark skin tone +1F474 ; fully-qualified # 👴 E0.6 old man +1F474 1F3FB ; fully-qualified # 👴🏻 E1.0 old man: light skin tone +1F474 1F3FC ; fully-qualified # 👴🏼 E1.0 old man: medium-light skin tone +1F474 1F3FD ; fully-qualified # 👴🏽 E1.0 old man: medium skin tone +1F474 1F3FE ; fully-qualified # 👴🏾 E1.0 old man: medium-dark skin tone +1F474 1F3FF ; fully-qualified # 👴🏿 E1.0 old man: dark skin tone +1F475 ; fully-qualified # 👵 E0.6 old woman +1F475 1F3FB ; fully-qualified # 👵🏻 E1.0 old woman: light skin tone +1F475 1F3FC ; fully-qualified # 👵🏼 E1.0 old woman: medium-light skin tone +1F475 1F3FD ; fully-qualified # 👵🏽 E1.0 old woman: medium skin tone +1F475 1F3FE ; fully-qualified # 👵🏾 E1.0 old woman: medium-dark skin tone +1F475 1F3FF ; fully-qualified # 👵🏿 E1.0 old woman: dark skin tone + +# subgroup: person-gesture +1F64D ; fully-qualified # 🙍 E0.6 person frowning +1F64D 1F3FB ; fully-qualified # 🙍🏻 E1.0 person frowning: light skin tone +1F64D 1F3FC ; fully-qualified # 🙍🏼 E1.0 person frowning: medium-light skin tone +1F64D 1F3FD ; fully-qualified # 🙍🏽 E1.0 person frowning: medium skin tone +1F64D 1F3FE ; fully-qualified # 🙍🏾 E1.0 person frowning: medium-dark skin tone +1F64D 1F3FF ; fully-qualified # 🙍🏿 E1.0 person frowning: dark skin tone +1F64D 200D 2642 FE0F ; fully-qualified # 🙍‍♂️ E4.0 man frowning +1F64D 200D 2642 ; minimally-qualified # 🙍‍♂ E4.0 man frowning +1F64D 1F3FB 200D 2642 FE0F ; fully-qualified # 🙍🏻‍♂️ E4.0 man frowning: light skin tone +1F64D 1F3FB 200D 2642 ; minimally-qualified # 🙍🏻‍♂ E4.0 man frowning: light skin tone +1F64D 1F3FC 200D 2642 FE0F ; fully-qualified # 🙍🏼‍♂️ E4.0 man frowning: medium-light skin tone +1F64D 1F3FC 200D 2642 ; minimally-qualified # 🙍🏼‍♂ E4.0 man frowning: medium-light skin tone +1F64D 1F3FD 200D 2642 FE0F ; fully-qualified # 🙍🏽‍♂️ E4.0 man frowning: medium skin tone +1F64D 1F3FD 200D 2642 ; minimally-qualified # 🙍🏽‍♂ E4.0 man frowning: medium skin tone +1F64D 1F3FE 200D 2642 FE0F ; fully-qualified # 🙍🏾‍♂️ E4.0 man frowning: medium-dark skin tone +1F64D 1F3FE 200D 2642 ; minimally-qualified # 🙍🏾‍♂ E4.0 man frowning: medium-dark skin tone +1F64D 1F3FF 200D 2642 FE0F ; fully-qualified # 🙍🏿‍♂️ E4.0 man frowning: dark skin tone +1F64D 1F3FF 200D 2642 ; minimally-qualified # 🙍🏿‍♂ E4.0 man frowning: dark skin tone +1F64D 200D 2640 FE0F ; fully-qualified # 🙍‍♀️ E4.0 woman frowning +1F64D 200D 2640 ; minimally-qualified # 🙍‍♀ E4.0 woman frowning +1F64D 1F3FB 200D 2640 FE0F ; fully-qualified # 🙍🏻‍♀️ E4.0 woman frowning: light skin tone +1F64D 1F3FB 200D 2640 ; minimally-qualified # 🙍🏻‍♀ E4.0 woman frowning: light skin tone +1F64D 1F3FC 200D 2640 FE0F ; fully-qualified # 🙍🏼‍♀️ E4.0 woman frowning: medium-light skin tone +1F64D 1F3FC 200D 2640 ; minimally-qualified # 🙍🏼‍♀ E4.0 woman frowning: medium-light skin tone +1F64D 1F3FD 200D 2640 FE0F ; fully-qualified # 🙍🏽‍♀️ E4.0 woman frowning: medium skin tone +1F64D 1F3FD 200D 2640 ; minimally-qualified # 🙍🏽‍♀ E4.0 woman frowning: medium skin tone +1F64D 1F3FE 200D 2640 FE0F ; fully-qualified # 🙍🏾‍♀️ E4.0 woman frowning: medium-dark skin tone +1F64D 1F3FE 200D 2640 ; minimally-qualified # 🙍🏾‍♀ E4.0 woman frowning: medium-dark skin tone +1F64D 1F3FF 200D 2640 FE0F ; fully-qualified # 🙍🏿‍♀️ E4.0 woman frowning: dark skin tone +1F64D 1F3FF 200D 2640 ; minimally-qualified # 🙍🏿‍♀ E4.0 woman frowning: dark skin tone +1F64E ; fully-qualified # 🙎 E0.6 person pouting +1F64E 1F3FB ; fully-qualified # 🙎🏻 E1.0 person pouting: light skin tone +1F64E 1F3FC ; fully-qualified # 🙎🏼 E1.0 person pouting: medium-light skin tone +1F64E 1F3FD ; fully-qualified # 🙎🏽 E1.0 person pouting: medium skin tone +1F64E 1F3FE ; fully-qualified # 🙎🏾 E1.0 person pouting: medium-dark skin tone +1F64E 1F3FF ; fully-qualified # 🙎🏿 E1.0 person pouting: dark skin tone +1F64E 200D 2642 FE0F ; fully-qualified # 🙎‍♂️ E4.0 man pouting +1F64E 200D 2642 ; minimally-qualified # 🙎‍♂ E4.0 man pouting +1F64E 1F3FB 200D 2642 FE0F ; fully-qualified # 🙎🏻‍♂️ E4.0 man pouting: light skin tone +1F64E 1F3FB 200D 2642 ; minimally-qualified # 🙎🏻‍♂ E4.0 man pouting: light skin tone +1F64E 1F3FC 200D 2642 FE0F ; fully-qualified # 🙎🏼‍♂️ E4.0 man pouting: medium-light skin tone +1F64E 1F3FC 200D 2642 ; minimally-qualified # 🙎🏼‍♂ E4.0 man pouting: medium-light skin tone +1F64E 1F3FD 200D 2642 FE0F ; fully-qualified # 🙎🏽‍♂️ E4.0 man pouting: medium skin tone +1F64E 1F3FD 200D 2642 ; minimally-qualified # 🙎🏽‍♂ E4.0 man pouting: medium skin tone +1F64E 1F3FE 200D 2642 FE0F ; fully-qualified # 🙎🏾‍♂️ E4.0 man pouting: medium-dark skin tone +1F64E 1F3FE 200D 2642 ; minimally-qualified # 🙎🏾‍♂ E4.0 man pouting: medium-dark skin tone +1F64E 1F3FF 200D 2642 FE0F ; fully-qualified # 🙎🏿‍♂️ E4.0 man pouting: dark skin tone +1F64E 1F3FF 200D 2642 ; minimally-qualified # 🙎🏿‍♂ E4.0 man pouting: dark skin tone +1F64E 200D 2640 FE0F ; fully-qualified # 🙎‍♀️ E4.0 woman pouting +1F64E 200D 2640 ; minimally-qualified # 🙎‍♀ E4.0 woman pouting +1F64E 1F3FB 200D 2640 FE0F ; fully-qualified # 🙎🏻‍♀️ E4.0 woman pouting: light skin tone +1F64E 1F3FB 200D 2640 ; minimally-qualified # 🙎🏻‍♀ E4.0 woman pouting: light skin tone +1F64E 1F3FC 200D 2640 FE0F ; fully-qualified # 🙎🏼‍♀️ E4.0 woman pouting: medium-light skin tone +1F64E 1F3FC 200D 2640 ; minimally-qualified # 🙎🏼‍♀ E4.0 woman pouting: medium-light skin tone +1F64E 1F3FD 200D 2640 FE0F ; fully-qualified # 🙎🏽‍♀️ E4.0 woman pouting: medium skin tone +1F64E 1F3FD 200D 2640 ; minimally-qualified # 🙎🏽‍♀ E4.0 woman pouting: medium skin tone +1F64E 1F3FE 200D 2640 FE0F ; fully-qualified # 🙎🏾‍♀️ E4.0 woman pouting: medium-dark skin tone +1F64E 1F3FE 200D 2640 ; minimally-qualified # 🙎🏾‍♀ E4.0 woman pouting: medium-dark skin tone +1F64E 1F3FF 200D 2640 FE0F ; fully-qualified # 🙎🏿‍♀️ E4.0 woman pouting: dark skin tone +1F64E 1F3FF 200D 2640 ; minimally-qualified # 🙎🏿‍♀ E4.0 woman pouting: dark skin tone +1F645 ; fully-qualified # 🙅 E0.6 person gesturing NO +1F645 1F3FB ; fully-qualified # 🙅🏻 E1.0 person gesturing NO: light skin tone +1F645 1F3FC ; fully-qualified # 🙅🏼 E1.0 person gesturing NO: medium-light skin tone +1F645 1F3FD ; fully-qualified # 🙅🏽 E1.0 person gesturing NO: medium skin tone +1F645 1F3FE ; fully-qualified # 🙅🏾 E1.0 person gesturing NO: medium-dark skin tone +1F645 1F3FF ; fully-qualified # 🙅🏿 E1.0 person gesturing NO: dark skin tone +1F645 200D 2642 FE0F ; fully-qualified # 🙅‍♂️ E4.0 man gesturing NO +1F645 200D 2642 ; minimally-qualified # 🙅‍♂ E4.0 man gesturing NO +1F645 1F3FB 200D 2642 FE0F ; fully-qualified # 🙅🏻‍♂️ E4.0 man gesturing NO: light skin tone +1F645 1F3FB 200D 2642 ; minimally-qualified # 🙅🏻‍♂ E4.0 man gesturing NO: light skin tone +1F645 1F3FC 200D 2642 FE0F ; fully-qualified # 🙅🏼‍♂️ E4.0 man gesturing NO: medium-light skin tone +1F645 1F3FC 200D 2642 ; minimally-qualified # 🙅🏼‍♂ E4.0 man gesturing NO: medium-light skin tone +1F645 1F3FD 200D 2642 FE0F ; fully-qualified # 🙅🏽‍♂️ E4.0 man gesturing NO: medium skin tone +1F645 1F3FD 200D 2642 ; minimally-qualified # 🙅🏽‍♂ E4.0 man gesturing NO: medium skin tone +1F645 1F3FE 200D 2642 FE0F ; fully-qualified # 🙅🏾‍♂️ E4.0 man gesturing NO: medium-dark skin tone +1F645 1F3FE 200D 2642 ; minimally-qualified # 🙅🏾‍♂ E4.0 man gesturing NO: medium-dark skin tone +1F645 1F3FF 200D 2642 FE0F ; fully-qualified # 🙅🏿‍♂️ E4.0 man gesturing NO: dark skin tone +1F645 1F3FF 200D 2642 ; minimally-qualified # 🙅🏿‍♂ E4.0 man gesturing NO: dark skin tone +1F645 200D 2640 FE0F ; fully-qualified # 🙅‍♀️ E4.0 woman gesturing NO +1F645 200D 2640 ; minimally-qualified # 🙅‍♀ E4.0 woman gesturing NO +1F645 1F3FB 200D 2640 FE0F ; fully-qualified # 🙅🏻‍♀️ E4.0 woman gesturing NO: light skin tone +1F645 1F3FB 200D 2640 ; minimally-qualified # 🙅🏻‍♀ E4.0 woman gesturing NO: light skin tone +1F645 1F3FC 200D 2640 FE0F ; fully-qualified # 🙅🏼‍♀️ E4.0 woman gesturing NO: medium-light skin tone +1F645 1F3FC 200D 2640 ; minimally-qualified # 🙅🏼‍♀ E4.0 woman gesturing NO: medium-light skin tone +1F645 1F3FD 200D 2640 FE0F ; fully-qualified # 🙅🏽‍♀️ E4.0 woman gesturing NO: medium skin tone +1F645 1F3FD 200D 2640 ; minimally-qualified # 🙅🏽‍♀ E4.0 woman gesturing NO: medium skin tone +1F645 1F3FE 200D 2640 FE0F ; fully-qualified # 🙅🏾‍♀️ E4.0 woman gesturing NO: medium-dark skin tone +1F645 1F3FE 200D 2640 ; minimally-qualified # 🙅🏾‍♀ E4.0 woman gesturing NO: medium-dark skin tone +1F645 1F3FF 200D 2640 FE0F ; fully-qualified # 🙅🏿‍♀️ E4.0 woman gesturing NO: dark skin tone +1F645 1F3FF 200D 2640 ; minimally-qualified # 🙅🏿‍♀ E4.0 woman gesturing NO: dark skin tone +1F646 ; fully-qualified # 🙆 E0.6 person gesturing OK +1F646 1F3FB ; fully-qualified # 🙆🏻 E1.0 person gesturing OK: light skin tone +1F646 1F3FC ; fully-qualified # 🙆🏼 E1.0 person gesturing OK: medium-light skin tone +1F646 1F3FD ; fully-qualified # 🙆🏽 E1.0 person gesturing OK: medium skin tone +1F646 1F3FE ; fully-qualified # 🙆🏾 E1.0 person gesturing OK: medium-dark skin tone +1F646 1F3FF ; fully-qualified # 🙆🏿 E1.0 person gesturing OK: dark skin tone +1F646 200D 2642 FE0F ; fully-qualified # 🙆‍♂️ E4.0 man gesturing OK +1F646 200D 2642 ; minimally-qualified # 🙆‍♂ E4.0 man gesturing OK +1F646 1F3FB 200D 2642 FE0F ; fully-qualified # 🙆🏻‍♂️ E4.0 man gesturing OK: light skin tone +1F646 1F3FB 200D 2642 ; minimally-qualified # 🙆🏻‍♂ E4.0 man gesturing OK: light skin tone +1F646 1F3FC 200D 2642 FE0F ; fully-qualified # 🙆🏼‍♂️ E4.0 man gesturing OK: medium-light skin tone +1F646 1F3FC 200D 2642 ; minimally-qualified # 🙆🏼‍♂ E4.0 man gesturing OK: medium-light skin tone +1F646 1F3FD 200D 2642 FE0F ; fully-qualified # 🙆🏽‍♂️ E4.0 man gesturing OK: medium skin tone +1F646 1F3FD 200D 2642 ; minimally-qualified # 🙆🏽‍♂ E4.0 man gesturing OK: medium skin tone +1F646 1F3FE 200D 2642 FE0F ; fully-qualified # 🙆🏾‍♂️ E4.0 man gesturing OK: medium-dark skin tone +1F646 1F3FE 200D 2642 ; minimally-qualified # 🙆🏾‍♂ E4.0 man gesturing OK: medium-dark skin tone +1F646 1F3FF 200D 2642 FE0F ; fully-qualified # 🙆🏿‍♂️ E4.0 man gesturing OK: dark skin tone +1F646 1F3FF 200D 2642 ; minimally-qualified # 🙆🏿‍♂ E4.0 man gesturing OK: dark skin tone +1F646 200D 2640 FE0F ; fully-qualified # 🙆‍♀️ E4.0 woman gesturing OK +1F646 200D 2640 ; minimally-qualified # 🙆‍♀ E4.0 woman gesturing OK +1F646 1F3FB 200D 2640 FE0F ; fully-qualified # 🙆🏻‍♀️ E4.0 woman gesturing OK: light skin tone +1F646 1F3FB 200D 2640 ; minimally-qualified # 🙆🏻‍♀ E4.0 woman gesturing OK: light skin tone +1F646 1F3FC 200D 2640 FE0F ; fully-qualified # 🙆🏼‍♀️ E4.0 woman gesturing OK: medium-light skin tone +1F646 1F3FC 200D 2640 ; minimally-qualified # 🙆🏼‍♀ E4.0 woman gesturing OK: medium-light skin tone +1F646 1F3FD 200D 2640 FE0F ; fully-qualified # 🙆🏽‍♀️ E4.0 woman gesturing OK: medium skin tone +1F646 1F3FD 200D 2640 ; minimally-qualified # 🙆🏽‍♀ E4.0 woman gesturing OK: medium skin tone +1F646 1F3FE 200D 2640 FE0F ; fully-qualified # 🙆🏾‍♀️ E4.0 woman gesturing OK: medium-dark skin tone +1F646 1F3FE 200D 2640 ; minimally-qualified # 🙆🏾‍♀ E4.0 woman gesturing OK: medium-dark skin tone +1F646 1F3FF 200D 2640 FE0F ; fully-qualified # 🙆🏿‍♀️ E4.0 woman gesturing OK: dark skin tone +1F646 1F3FF 200D 2640 ; minimally-qualified # 🙆🏿‍♀ E4.0 woman gesturing OK: dark skin tone +1F481 ; fully-qualified # 💁 E0.6 person tipping hand +1F481 1F3FB ; fully-qualified # 💁🏻 E1.0 person tipping hand: light skin tone +1F481 1F3FC ; fully-qualified # 💁🏼 E1.0 person tipping hand: medium-light skin tone +1F481 1F3FD ; fully-qualified # 💁🏽 E1.0 person tipping hand: medium skin tone +1F481 1F3FE ; fully-qualified # 💁🏾 E1.0 person tipping hand: medium-dark skin tone +1F481 1F3FF ; fully-qualified # 💁🏿 E1.0 person tipping hand: dark skin tone +1F481 200D 2642 FE0F ; fully-qualified # 💁‍♂️ E4.0 man tipping hand +1F481 200D 2642 ; minimally-qualified # 💁‍♂ E4.0 man tipping hand +1F481 1F3FB 200D 2642 FE0F ; fully-qualified # 💁🏻‍♂️ E4.0 man tipping hand: light skin tone +1F481 1F3FB 200D 2642 ; minimally-qualified # 💁🏻‍♂ E4.0 man tipping hand: light skin tone +1F481 1F3FC 200D 2642 FE0F ; fully-qualified # 💁🏼‍♂️ E4.0 man tipping hand: medium-light skin tone +1F481 1F3FC 200D 2642 ; minimally-qualified # 💁🏼‍♂ E4.0 man tipping hand: medium-light skin tone +1F481 1F3FD 200D 2642 FE0F ; fully-qualified # 💁🏽‍♂️ E4.0 man tipping hand: medium skin tone +1F481 1F3FD 200D 2642 ; minimally-qualified # 💁🏽‍♂ E4.0 man tipping hand: medium skin tone +1F481 1F3FE 200D 2642 FE0F ; fully-qualified # 💁🏾‍♂️ E4.0 man tipping hand: medium-dark skin tone +1F481 1F3FE 200D 2642 ; minimally-qualified # 💁🏾‍♂ E4.0 man tipping hand: medium-dark skin tone +1F481 1F3FF 200D 2642 FE0F ; fully-qualified # 💁🏿‍♂️ E4.0 man tipping hand: dark skin tone +1F481 1F3FF 200D 2642 ; minimally-qualified # 💁🏿‍♂ E4.0 man tipping hand: dark skin tone +1F481 200D 2640 FE0F ; fully-qualified # 💁‍♀️ E4.0 woman tipping hand +1F481 200D 2640 ; minimally-qualified # 💁‍♀ E4.0 woman tipping hand +1F481 1F3FB 200D 2640 FE0F ; fully-qualified # 💁🏻‍♀️ E4.0 woman tipping hand: light skin tone +1F481 1F3FB 200D 2640 ; minimally-qualified # 💁🏻‍♀ E4.0 woman tipping hand: light skin tone +1F481 1F3FC 200D 2640 FE0F ; fully-qualified # 💁🏼‍♀️ E4.0 woman tipping hand: medium-light skin tone +1F481 1F3FC 200D 2640 ; minimally-qualified # 💁🏼‍♀ E4.0 woman tipping hand: medium-light skin tone +1F481 1F3FD 200D 2640 FE0F ; fully-qualified # 💁🏽‍♀️ E4.0 woman tipping hand: medium skin tone +1F481 1F3FD 200D 2640 ; minimally-qualified # 💁🏽‍♀ E4.0 woman tipping hand: medium skin tone +1F481 1F3FE 200D 2640 FE0F ; fully-qualified # 💁🏾‍♀️ E4.0 woman tipping hand: medium-dark skin tone +1F481 1F3FE 200D 2640 ; minimally-qualified # 💁🏾‍♀ E4.0 woman tipping hand: medium-dark skin tone +1F481 1F3FF 200D 2640 FE0F ; fully-qualified # 💁🏿‍♀️ E4.0 woman tipping hand: dark skin tone +1F481 1F3FF 200D 2640 ; minimally-qualified # 💁🏿‍♀ E4.0 woman tipping hand: dark skin tone +1F64B ; fully-qualified # 🙋 E0.6 person raising hand +1F64B 1F3FB ; fully-qualified # 🙋🏻 E1.0 person raising hand: light skin tone +1F64B 1F3FC ; fully-qualified # 🙋🏼 E1.0 person raising hand: medium-light skin tone +1F64B 1F3FD ; fully-qualified # 🙋🏽 E1.0 person raising hand: medium skin tone +1F64B 1F3FE ; fully-qualified # 🙋🏾 E1.0 person raising hand: medium-dark skin tone +1F64B 1F3FF ; fully-qualified # 🙋🏿 E1.0 person raising hand: dark skin tone +1F64B 200D 2642 FE0F ; fully-qualified # 🙋‍♂️ E4.0 man raising hand +1F64B 200D 2642 ; minimally-qualified # 🙋‍♂ E4.0 man raising hand +1F64B 1F3FB 200D 2642 FE0F ; fully-qualified # 🙋🏻‍♂️ E4.0 man raising hand: light skin tone +1F64B 1F3FB 200D 2642 ; minimally-qualified # 🙋🏻‍♂ E4.0 man raising hand: light skin tone +1F64B 1F3FC 200D 2642 FE0F ; fully-qualified # 🙋🏼‍♂️ E4.0 man raising hand: medium-light skin tone +1F64B 1F3FC 200D 2642 ; minimally-qualified # 🙋🏼‍♂ E4.0 man raising hand: medium-light skin tone +1F64B 1F3FD 200D 2642 FE0F ; fully-qualified # 🙋🏽‍♂️ E4.0 man raising hand: medium skin tone +1F64B 1F3FD 200D 2642 ; minimally-qualified # 🙋🏽‍♂ E4.0 man raising hand: medium skin tone +1F64B 1F3FE 200D 2642 FE0F ; fully-qualified # 🙋🏾‍♂️ E4.0 man raising hand: medium-dark skin tone +1F64B 1F3FE 200D 2642 ; minimally-qualified # 🙋🏾‍♂ E4.0 man raising hand: medium-dark skin tone +1F64B 1F3FF 200D 2642 FE0F ; fully-qualified # 🙋🏿‍♂️ E4.0 man raising hand: dark skin tone +1F64B 1F3FF 200D 2642 ; minimally-qualified # 🙋🏿‍♂ E4.0 man raising hand: dark skin tone +1F64B 200D 2640 FE0F ; fully-qualified # 🙋‍♀️ E4.0 woman raising hand +1F64B 200D 2640 ; minimally-qualified # 🙋‍♀ E4.0 woman raising hand +1F64B 1F3FB 200D 2640 FE0F ; fully-qualified # 🙋🏻‍♀️ E4.0 woman raising hand: light skin tone +1F64B 1F3FB 200D 2640 ; minimally-qualified # 🙋🏻‍♀ E4.0 woman raising hand: light skin tone +1F64B 1F3FC 200D 2640 FE0F ; fully-qualified # 🙋🏼‍♀️ E4.0 woman raising hand: medium-light skin tone +1F64B 1F3FC 200D 2640 ; minimally-qualified # 🙋🏼‍♀ E4.0 woman raising hand: medium-light skin tone +1F64B 1F3FD 200D 2640 FE0F ; fully-qualified # 🙋🏽‍♀️ E4.0 woman raising hand: medium skin tone +1F64B 1F3FD 200D 2640 ; minimally-qualified # 🙋🏽‍♀ E4.0 woman raising hand: medium skin tone +1F64B 1F3FE 200D 2640 FE0F ; fully-qualified # 🙋🏾‍♀️ E4.0 woman raising hand: medium-dark skin tone +1F64B 1F3FE 200D 2640 ; minimally-qualified # 🙋🏾‍♀ E4.0 woman raising hand: medium-dark skin tone +1F64B 1F3FF 200D 2640 FE0F ; fully-qualified # 🙋🏿‍♀️ E4.0 woman raising hand: dark skin tone +1F64B 1F3FF 200D 2640 ; minimally-qualified # 🙋🏿‍♀ E4.0 woman raising hand: dark skin tone +1F9CF ; fully-qualified # 🧏 E12.0 deaf person +1F9CF 1F3FB ; fully-qualified # 🧏🏻 E12.0 deaf person: light skin tone +1F9CF 1F3FC ; fully-qualified # 🧏🏼 E12.0 deaf person: medium-light skin tone +1F9CF 1F3FD ; fully-qualified # 🧏🏽 E12.0 deaf person: medium skin tone +1F9CF 1F3FE ; fully-qualified # 🧏🏾 E12.0 deaf person: medium-dark skin tone +1F9CF 1F3FF ; fully-qualified # 🧏🏿 E12.0 deaf person: dark skin tone +1F9CF 200D 2642 FE0F ; fully-qualified # 🧏‍♂️ E12.0 deaf man +1F9CF 200D 2642 ; minimally-qualified # 🧏‍♂ E12.0 deaf man +1F9CF 1F3FB 200D 2642 FE0F ; fully-qualified # 🧏🏻‍♂️ E12.0 deaf man: light skin tone +1F9CF 1F3FB 200D 2642 ; minimally-qualified # 🧏🏻‍♂ E12.0 deaf man: light skin tone +1F9CF 1F3FC 200D 2642 FE0F ; fully-qualified # 🧏🏼‍♂️ E12.0 deaf man: medium-light skin tone +1F9CF 1F3FC 200D 2642 ; minimally-qualified # 🧏🏼‍♂ E12.0 deaf man: medium-light skin tone +1F9CF 1F3FD 200D 2642 FE0F ; fully-qualified # 🧏🏽‍♂️ E12.0 deaf man: medium skin tone +1F9CF 1F3FD 200D 2642 ; minimally-qualified # 🧏🏽‍♂ E12.0 deaf man: medium skin tone +1F9CF 1F3FE 200D 2642 FE0F ; fully-qualified # 🧏🏾‍♂️ E12.0 deaf man: medium-dark skin tone +1F9CF 1F3FE 200D 2642 ; minimally-qualified # 🧏🏾‍♂ E12.0 deaf man: medium-dark skin tone +1F9CF 1F3FF 200D 2642 FE0F ; fully-qualified # 🧏🏿‍♂️ E12.0 deaf man: dark skin tone +1F9CF 1F3FF 200D 2642 ; minimally-qualified # 🧏🏿‍♂ E12.0 deaf man: dark skin tone +1F9CF 200D 2640 FE0F ; fully-qualified # 🧏‍♀️ E12.0 deaf woman +1F9CF 200D 2640 ; minimally-qualified # 🧏‍♀ E12.0 deaf woman +1F9CF 1F3FB 200D 2640 FE0F ; fully-qualified # 🧏🏻‍♀️ E12.0 deaf woman: light skin tone +1F9CF 1F3FB 200D 2640 ; minimally-qualified # 🧏🏻‍♀ E12.0 deaf woman: light skin tone +1F9CF 1F3FC 200D 2640 FE0F ; fully-qualified # 🧏🏼‍♀️ E12.0 deaf woman: medium-light skin tone +1F9CF 1F3FC 200D 2640 ; minimally-qualified # 🧏🏼‍♀ E12.0 deaf woman: medium-light skin tone +1F9CF 1F3FD 200D 2640 FE0F ; fully-qualified # 🧏🏽‍♀️ E12.0 deaf woman: medium skin tone +1F9CF 1F3FD 200D 2640 ; minimally-qualified # 🧏🏽‍♀ E12.0 deaf woman: medium skin tone +1F9CF 1F3FE 200D 2640 FE0F ; fully-qualified # 🧏🏾‍♀️ E12.0 deaf woman: medium-dark skin tone +1F9CF 1F3FE 200D 2640 ; minimally-qualified # 🧏🏾‍♀ E12.0 deaf woman: medium-dark skin tone +1F9CF 1F3FF 200D 2640 FE0F ; fully-qualified # 🧏🏿‍♀️ E12.0 deaf woman: dark skin tone +1F9CF 1F3FF 200D 2640 ; minimally-qualified # 🧏🏿‍♀ E12.0 deaf woman: dark skin tone +1F647 ; fully-qualified # 🙇 E0.6 person bowing +1F647 1F3FB ; fully-qualified # 🙇🏻 E1.0 person bowing: light skin tone +1F647 1F3FC ; fully-qualified # 🙇🏼 E1.0 person bowing: medium-light skin tone +1F647 1F3FD ; fully-qualified # 🙇🏽 E1.0 person bowing: medium skin tone +1F647 1F3FE ; fully-qualified # 🙇🏾 E1.0 person bowing: medium-dark skin tone +1F647 1F3FF ; fully-qualified # 🙇🏿 E1.0 person bowing: dark skin tone +1F647 200D 2642 FE0F ; fully-qualified # 🙇‍♂️ E4.0 man bowing +1F647 200D 2642 ; minimally-qualified # 🙇‍♂ E4.0 man bowing +1F647 1F3FB 200D 2642 FE0F ; fully-qualified # 🙇🏻‍♂️ E4.0 man bowing: light skin tone +1F647 1F3FB 200D 2642 ; minimally-qualified # 🙇🏻‍♂ E4.0 man bowing: light skin tone +1F647 1F3FC 200D 2642 FE0F ; fully-qualified # 🙇🏼‍♂️ E4.0 man bowing: medium-light skin tone +1F647 1F3FC 200D 2642 ; minimally-qualified # 🙇🏼‍♂ E4.0 man bowing: medium-light skin tone +1F647 1F3FD 200D 2642 FE0F ; fully-qualified # 🙇🏽‍♂️ E4.0 man bowing: medium skin tone +1F647 1F3FD 200D 2642 ; minimally-qualified # 🙇🏽‍♂ E4.0 man bowing: medium skin tone +1F647 1F3FE 200D 2642 FE0F ; fully-qualified # 🙇🏾‍♂️ E4.0 man bowing: medium-dark skin tone +1F647 1F3FE 200D 2642 ; minimally-qualified # 🙇🏾‍♂ E4.0 man bowing: medium-dark skin tone +1F647 1F3FF 200D 2642 FE0F ; fully-qualified # 🙇🏿‍♂️ E4.0 man bowing: dark skin tone +1F647 1F3FF 200D 2642 ; minimally-qualified # 🙇🏿‍♂ E4.0 man bowing: dark skin tone +1F647 200D 2640 FE0F ; fully-qualified # 🙇‍♀️ E4.0 woman bowing +1F647 200D 2640 ; minimally-qualified # 🙇‍♀ E4.0 woman bowing +1F647 1F3FB 200D 2640 FE0F ; fully-qualified # 🙇🏻‍♀️ E4.0 woman bowing: light skin tone +1F647 1F3FB 200D 2640 ; minimally-qualified # 🙇🏻‍♀ E4.0 woman bowing: light skin tone +1F647 1F3FC 200D 2640 FE0F ; fully-qualified # 🙇🏼‍♀️ E4.0 woman bowing: medium-light skin tone +1F647 1F3FC 200D 2640 ; minimally-qualified # 🙇🏼‍♀ E4.0 woman bowing: medium-light skin tone +1F647 1F3FD 200D 2640 FE0F ; fully-qualified # 🙇🏽‍♀️ E4.0 woman bowing: medium skin tone +1F647 1F3FD 200D 2640 ; minimally-qualified # 🙇🏽‍♀ E4.0 woman bowing: medium skin tone +1F647 1F3FE 200D 2640 FE0F ; fully-qualified # 🙇🏾‍♀️ E4.0 woman bowing: medium-dark skin tone +1F647 1F3FE 200D 2640 ; minimally-qualified # 🙇🏾‍♀ E4.0 woman bowing: medium-dark skin tone +1F647 1F3FF 200D 2640 FE0F ; fully-qualified # 🙇🏿‍♀️ E4.0 woman bowing: dark skin tone +1F647 1F3FF 200D 2640 ; minimally-qualified # 🙇🏿‍♀ E4.0 woman bowing: dark skin tone +1F926 ; fully-qualified # 🤦 E3.0 person facepalming +1F926 1F3FB ; fully-qualified # 🤦🏻 E3.0 person facepalming: light skin tone +1F926 1F3FC ; fully-qualified # 🤦🏼 E3.0 person facepalming: medium-light skin tone +1F926 1F3FD ; fully-qualified # 🤦🏽 E3.0 person facepalming: medium skin tone +1F926 1F3FE ; fully-qualified # 🤦🏾 E3.0 person facepalming: medium-dark skin tone +1F926 1F3FF ; fully-qualified # 🤦🏿 E3.0 person facepalming: dark skin tone +1F926 200D 2642 FE0F ; fully-qualified # 🤦‍♂️ E4.0 man facepalming +1F926 200D 2642 ; minimally-qualified # 🤦‍♂ E4.0 man facepalming +1F926 1F3FB 200D 2642 FE0F ; fully-qualified # 🤦🏻‍♂️ E4.0 man facepalming: light skin tone +1F926 1F3FB 200D 2642 ; minimally-qualified # 🤦🏻‍♂ E4.0 man facepalming: light skin tone +1F926 1F3FC 200D 2642 FE0F ; fully-qualified # 🤦🏼‍♂️ E4.0 man facepalming: medium-light skin tone +1F926 1F3FC 200D 2642 ; minimally-qualified # 🤦🏼‍♂ E4.0 man facepalming: medium-light skin tone +1F926 1F3FD 200D 2642 FE0F ; fully-qualified # 🤦🏽‍♂️ E4.0 man facepalming: medium skin tone +1F926 1F3FD 200D 2642 ; minimally-qualified # 🤦🏽‍♂ E4.0 man facepalming: medium skin tone +1F926 1F3FE 200D 2642 FE0F ; fully-qualified # 🤦🏾‍♂️ E4.0 man facepalming: medium-dark skin tone +1F926 1F3FE 200D 2642 ; minimally-qualified # 🤦🏾‍♂ E4.0 man facepalming: medium-dark skin tone +1F926 1F3FF 200D 2642 FE0F ; fully-qualified # 🤦🏿‍♂️ E4.0 man facepalming: dark skin tone +1F926 1F3FF 200D 2642 ; minimally-qualified # 🤦🏿‍♂ E4.0 man facepalming: dark skin tone +1F926 200D 2640 FE0F ; fully-qualified # 🤦‍♀️ E4.0 woman facepalming +1F926 200D 2640 ; minimally-qualified # 🤦‍♀ E4.0 woman facepalming +1F926 1F3FB 200D 2640 FE0F ; fully-qualified # 🤦🏻‍♀️ E4.0 woman facepalming: light skin tone +1F926 1F3FB 200D 2640 ; minimally-qualified # 🤦🏻‍♀ E4.0 woman facepalming: light skin tone +1F926 1F3FC 200D 2640 FE0F ; fully-qualified # 🤦🏼‍♀️ E4.0 woman facepalming: medium-light skin tone +1F926 1F3FC 200D 2640 ; minimally-qualified # 🤦🏼‍♀ E4.0 woman facepalming: medium-light skin tone +1F926 1F3FD 200D 2640 FE0F ; fully-qualified # 🤦🏽‍♀️ E4.0 woman facepalming: medium skin tone +1F926 1F3FD 200D 2640 ; minimally-qualified # 🤦🏽‍♀ E4.0 woman facepalming: medium skin tone +1F926 1F3FE 200D 2640 FE0F ; fully-qualified # 🤦🏾‍♀️ E4.0 woman facepalming: medium-dark skin tone +1F926 1F3FE 200D 2640 ; minimally-qualified # 🤦🏾‍♀ E4.0 woman facepalming: medium-dark skin tone +1F926 1F3FF 200D 2640 FE0F ; fully-qualified # 🤦🏿‍♀️ E4.0 woman facepalming: dark skin tone +1F926 1F3FF 200D 2640 ; minimally-qualified # 🤦🏿‍♀ E4.0 woman facepalming: dark skin tone +1F937 ; fully-qualified # 🤷 E3.0 person shrugging +1F937 1F3FB ; fully-qualified # 🤷🏻 E3.0 person shrugging: light skin tone +1F937 1F3FC ; fully-qualified # 🤷🏼 E3.0 person shrugging: medium-light skin tone +1F937 1F3FD ; fully-qualified # 🤷🏽 E3.0 person shrugging: medium skin tone +1F937 1F3FE ; fully-qualified # 🤷🏾 E3.0 person shrugging: medium-dark skin tone +1F937 1F3FF ; fully-qualified # 🤷🏿 E3.0 person shrugging: dark skin tone +1F937 200D 2642 FE0F ; fully-qualified # 🤷‍♂️ E4.0 man shrugging +1F937 200D 2642 ; minimally-qualified # 🤷‍♂ E4.0 man shrugging +1F937 1F3FB 200D 2642 FE0F ; fully-qualified # 🤷🏻‍♂️ E4.0 man shrugging: light skin tone +1F937 1F3FB 200D 2642 ; minimally-qualified # 🤷🏻‍♂ E4.0 man shrugging: light skin tone +1F937 1F3FC 200D 2642 FE0F ; fully-qualified # 🤷🏼‍♂️ E4.0 man shrugging: medium-light skin tone +1F937 1F3FC 200D 2642 ; minimally-qualified # 🤷🏼‍♂ E4.0 man shrugging: medium-light skin tone +1F937 1F3FD 200D 2642 FE0F ; fully-qualified # 🤷🏽‍♂️ E4.0 man shrugging: medium skin tone +1F937 1F3FD 200D 2642 ; minimally-qualified # 🤷🏽‍♂ E4.0 man shrugging: medium skin tone +1F937 1F3FE 200D 2642 FE0F ; fully-qualified # 🤷🏾‍♂️ E4.0 man shrugging: medium-dark skin tone +1F937 1F3FE 200D 2642 ; minimally-qualified # 🤷🏾‍♂ E4.0 man shrugging: medium-dark skin tone +1F937 1F3FF 200D 2642 FE0F ; fully-qualified # 🤷🏿‍♂️ E4.0 man shrugging: dark skin tone +1F937 1F3FF 200D 2642 ; minimally-qualified # 🤷🏿‍♂ E4.0 man shrugging: dark skin tone +1F937 200D 2640 FE0F ; fully-qualified # 🤷‍♀️ E4.0 woman shrugging +1F937 200D 2640 ; minimally-qualified # 🤷‍♀ E4.0 woman shrugging +1F937 1F3FB 200D 2640 FE0F ; fully-qualified # 🤷🏻‍♀️ E4.0 woman shrugging: light skin tone +1F937 1F3FB 200D 2640 ; minimally-qualified # 🤷🏻‍♀ E4.0 woman shrugging: light skin tone +1F937 1F3FC 200D 2640 FE0F ; fully-qualified # 🤷🏼‍♀️ E4.0 woman shrugging: medium-light skin tone +1F937 1F3FC 200D 2640 ; minimally-qualified # 🤷🏼‍♀ E4.0 woman shrugging: medium-light skin tone +1F937 1F3FD 200D 2640 FE0F ; fully-qualified # 🤷🏽‍♀️ E4.0 woman shrugging: medium skin tone +1F937 1F3FD 200D 2640 ; minimally-qualified # 🤷🏽‍♀ E4.0 woman shrugging: medium skin tone +1F937 1F3FE 200D 2640 FE0F ; fully-qualified # 🤷🏾‍♀️ E4.0 woman shrugging: medium-dark skin tone +1F937 1F3FE 200D 2640 ; minimally-qualified # 🤷🏾‍♀ E4.0 woman shrugging: medium-dark skin tone +1F937 1F3FF 200D 2640 FE0F ; fully-qualified # 🤷🏿‍♀️ E4.0 woman shrugging: dark skin tone +1F937 1F3FF 200D 2640 ; minimally-qualified # 🤷🏿‍♀ E4.0 woman shrugging: dark skin tone + +# subgroup: person-role +1F9D1 200D 2695 FE0F ; fully-qualified # 🧑‍⚕️ E12.1 health worker +1F9D1 200D 2695 ; minimally-qualified # 🧑‍⚕ E12.1 health worker +1F9D1 1F3FB 200D 2695 FE0F ; fully-qualified # 🧑🏻‍⚕️ E12.1 health worker: light skin tone +1F9D1 1F3FB 200D 2695 ; minimally-qualified # 🧑🏻‍⚕ E12.1 health worker: light skin tone +1F9D1 1F3FC 200D 2695 FE0F ; fully-qualified # 🧑🏼‍⚕️ E12.1 health worker: medium-light skin tone +1F9D1 1F3FC 200D 2695 ; minimally-qualified # 🧑🏼‍⚕ E12.1 health worker: medium-light skin tone +1F9D1 1F3FD 200D 2695 FE0F ; fully-qualified # 🧑🏽‍⚕️ E12.1 health worker: medium skin tone +1F9D1 1F3FD 200D 2695 ; minimally-qualified # 🧑🏽‍⚕ E12.1 health worker: medium skin tone +1F9D1 1F3FE 200D 2695 FE0F ; fully-qualified # 🧑🏾‍⚕️ E12.1 health worker: medium-dark skin tone +1F9D1 1F3FE 200D 2695 ; minimally-qualified # 🧑🏾‍⚕ E12.1 health worker: medium-dark skin tone +1F9D1 1F3FF 200D 2695 FE0F ; fully-qualified # 🧑🏿‍⚕️ E12.1 health worker: dark skin tone +1F9D1 1F3FF 200D 2695 ; minimally-qualified # 🧑🏿‍⚕ E12.1 health worker: dark skin tone +1F468 200D 2695 FE0F ; fully-qualified # 👨‍⚕️ E4.0 man health worker +1F468 200D 2695 ; minimally-qualified # 👨‍⚕ E4.0 man health worker +1F468 1F3FB 200D 2695 FE0F ; fully-qualified # 👨🏻‍⚕️ E4.0 man health worker: light skin tone +1F468 1F3FB 200D 2695 ; minimally-qualified # 👨🏻‍⚕ E4.0 man health worker: light skin tone +1F468 1F3FC 200D 2695 FE0F ; fully-qualified # 👨🏼‍⚕️ E4.0 man health worker: medium-light skin tone +1F468 1F3FC 200D 2695 ; minimally-qualified # 👨🏼‍⚕ E4.0 man health worker: medium-light skin tone +1F468 1F3FD 200D 2695 FE0F ; fully-qualified # 👨🏽‍⚕️ E4.0 man health worker: medium skin tone +1F468 1F3FD 200D 2695 ; minimally-qualified # 👨🏽‍⚕ E4.0 man health worker: medium skin tone +1F468 1F3FE 200D 2695 FE0F ; fully-qualified # 👨🏾‍⚕️ E4.0 man health worker: medium-dark skin tone +1F468 1F3FE 200D 2695 ; minimally-qualified # 👨🏾‍⚕ E4.0 man health worker: medium-dark skin tone +1F468 1F3FF 200D 2695 FE0F ; fully-qualified # 👨🏿‍⚕️ E4.0 man health worker: dark skin tone +1F468 1F3FF 200D 2695 ; minimally-qualified # 👨🏿‍⚕ E4.0 man health worker: dark skin tone +1F469 200D 2695 FE0F ; fully-qualified # 👩‍⚕️ E4.0 woman health worker +1F469 200D 2695 ; minimally-qualified # 👩‍⚕ E4.0 woman health worker +1F469 1F3FB 200D 2695 FE0F ; fully-qualified # 👩🏻‍⚕️ E4.0 woman health worker: light skin tone +1F469 1F3FB 200D 2695 ; minimally-qualified # 👩🏻‍⚕ E4.0 woman health worker: light skin tone +1F469 1F3FC 200D 2695 FE0F ; fully-qualified # 👩🏼‍⚕️ E4.0 woman health worker: medium-light skin tone +1F469 1F3FC 200D 2695 ; minimally-qualified # 👩🏼‍⚕ E4.0 woman health worker: medium-light skin tone +1F469 1F3FD 200D 2695 FE0F ; fully-qualified # 👩🏽‍⚕️ E4.0 woman health worker: medium skin tone +1F469 1F3FD 200D 2695 ; minimally-qualified # 👩🏽‍⚕ E4.0 woman health worker: medium skin tone +1F469 1F3FE 200D 2695 FE0F ; fully-qualified # 👩🏾‍⚕️ E4.0 woman health worker: medium-dark skin tone +1F469 1F3FE 200D 2695 ; minimally-qualified # 👩🏾‍⚕ E4.0 woman health worker: medium-dark skin tone +1F469 1F3FF 200D 2695 FE0F ; fully-qualified # 👩🏿‍⚕️ E4.0 woman health worker: dark skin tone +1F469 1F3FF 200D 2695 ; minimally-qualified # 👩🏿‍⚕ E4.0 woman health worker: dark skin tone +1F9D1 200D 1F393 ; fully-qualified # 🧑‍🎓 E12.1 student +1F9D1 1F3FB 200D 1F393 ; fully-qualified # 🧑🏻‍🎓 E12.1 student: light skin tone +1F9D1 1F3FC 200D 1F393 ; fully-qualified # 🧑🏼‍🎓 E12.1 student: medium-light skin tone +1F9D1 1F3FD 200D 1F393 ; fully-qualified # 🧑🏽‍🎓 E12.1 student: medium skin tone +1F9D1 1F3FE 200D 1F393 ; fully-qualified # 🧑🏾‍🎓 E12.1 student: medium-dark skin tone +1F9D1 1F3FF 200D 1F393 ; fully-qualified # 🧑🏿‍🎓 E12.1 student: dark skin tone +1F468 200D 1F393 ; fully-qualified # 👨‍🎓 E4.0 man student +1F468 1F3FB 200D 1F393 ; fully-qualified # 👨🏻‍🎓 E4.0 man student: light skin tone +1F468 1F3FC 200D 1F393 ; fully-qualified # 👨🏼‍🎓 E4.0 man student: medium-light skin tone +1F468 1F3FD 200D 1F393 ; fully-qualified # 👨🏽‍🎓 E4.0 man student: medium skin tone +1F468 1F3FE 200D 1F393 ; fully-qualified # 👨🏾‍🎓 E4.0 man student: medium-dark skin tone +1F468 1F3FF 200D 1F393 ; fully-qualified # 👨🏿‍🎓 E4.0 man student: dark skin tone +1F469 200D 1F393 ; fully-qualified # 👩‍🎓 E4.0 woman student +1F469 1F3FB 200D 1F393 ; fully-qualified # 👩🏻‍🎓 E4.0 woman student: light skin tone +1F469 1F3FC 200D 1F393 ; fully-qualified # 👩🏼‍🎓 E4.0 woman student: medium-light skin tone +1F469 1F3FD 200D 1F393 ; fully-qualified # 👩🏽‍🎓 E4.0 woman student: medium skin tone +1F469 1F3FE 200D 1F393 ; fully-qualified # 👩🏾‍🎓 E4.0 woman student: medium-dark skin tone +1F469 1F3FF 200D 1F393 ; fully-qualified # 👩🏿‍🎓 E4.0 woman student: dark skin tone +1F9D1 200D 1F3EB ; fully-qualified # 🧑‍🏫 E12.1 teacher +1F9D1 1F3FB 200D 1F3EB ; fully-qualified # 🧑🏻‍🏫 E12.1 teacher: light skin tone +1F9D1 1F3FC 200D 1F3EB ; fully-qualified # 🧑🏼‍🏫 E12.1 teacher: medium-light skin tone +1F9D1 1F3FD 200D 1F3EB ; fully-qualified # 🧑🏽‍🏫 E12.1 teacher: medium skin tone +1F9D1 1F3FE 200D 1F3EB ; fully-qualified # 🧑🏾‍🏫 E12.1 teacher: medium-dark skin tone +1F9D1 1F3FF 200D 1F3EB ; fully-qualified # 🧑🏿‍🏫 E12.1 teacher: dark skin tone +1F468 200D 1F3EB ; fully-qualified # 👨‍🏫 E4.0 man teacher +1F468 1F3FB 200D 1F3EB ; fully-qualified # 👨🏻‍🏫 E4.0 man teacher: light skin tone +1F468 1F3FC 200D 1F3EB ; fully-qualified # 👨🏼‍🏫 E4.0 man teacher: medium-light skin tone +1F468 1F3FD 200D 1F3EB ; fully-qualified # 👨🏽‍🏫 E4.0 man teacher: medium skin tone +1F468 1F3FE 200D 1F3EB ; fully-qualified # 👨🏾‍🏫 E4.0 man teacher: medium-dark skin tone +1F468 1F3FF 200D 1F3EB ; fully-qualified # 👨🏿‍🏫 E4.0 man teacher: dark skin tone +1F469 200D 1F3EB ; fully-qualified # 👩‍🏫 E4.0 woman teacher +1F469 1F3FB 200D 1F3EB ; fully-qualified # 👩🏻‍🏫 E4.0 woman teacher: light skin tone +1F469 1F3FC 200D 1F3EB ; fully-qualified # 👩🏼‍🏫 E4.0 woman teacher: medium-light skin tone +1F469 1F3FD 200D 1F3EB ; fully-qualified # 👩🏽‍🏫 E4.0 woman teacher: medium skin tone +1F469 1F3FE 200D 1F3EB ; fully-qualified # 👩🏾‍🏫 E4.0 woman teacher: medium-dark skin tone +1F469 1F3FF 200D 1F3EB ; fully-qualified # 👩🏿‍🏫 E4.0 woman teacher: dark skin tone +1F9D1 200D 2696 FE0F ; fully-qualified # 🧑‍⚖️ E12.1 judge +1F9D1 200D 2696 ; minimally-qualified # 🧑‍⚖ E12.1 judge +1F9D1 1F3FB 200D 2696 FE0F ; fully-qualified # 🧑🏻‍⚖️ E12.1 judge: light skin tone +1F9D1 1F3FB 200D 2696 ; minimally-qualified # 🧑🏻‍⚖ E12.1 judge: light skin tone +1F9D1 1F3FC 200D 2696 FE0F ; fully-qualified # 🧑🏼‍⚖️ E12.1 judge: medium-light skin tone +1F9D1 1F3FC 200D 2696 ; minimally-qualified # 🧑🏼‍⚖ E12.1 judge: medium-light skin tone +1F9D1 1F3FD 200D 2696 FE0F ; fully-qualified # 🧑🏽‍⚖️ E12.1 judge: medium skin tone +1F9D1 1F3FD 200D 2696 ; minimally-qualified # 🧑🏽‍⚖ E12.1 judge: medium skin tone +1F9D1 1F3FE 200D 2696 FE0F ; fully-qualified # 🧑🏾‍⚖️ E12.1 judge: medium-dark skin tone +1F9D1 1F3FE 200D 2696 ; minimally-qualified # 🧑🏾‍⚖ E12.1 judge: medium-dark skin tone +1F9D1 1F3FF 200D 2696 FE0F ; fully-qualified # 🧑🏿‍⚖️ E12.1 judge: dark skin tone +1F9D1 1F3FF 200D 2696 ; minimally-qualified # 🧑🏿‍⚖ E12.1 judge: dark skin tone +1F468 200D 2696 FE0F ; fully-qualified # 👨‍⚖️ E4.0 man judge +1F468 200D 2696 ; minimally-qualified # 👨‍⚖ E4.0 man judge +1F468 1F3FB 200D 2696 FE0F ; fully-qualified # 👨🏻‍⚖️ E4.0 man judge: light skin tone +1F468 1F3FB 200D 2696 ; minimally-qualified # 👨🏻‍⚖ E4.0 man judge: light skin tone +1F468 1F3FC 200D 2696 FE0F ; fully-qualified # 👨🏼‍⚖️ E4.0 man judge: medium-light skin tone +1F468 1F3FC 200D 2696 ; minimally-qualified # 👨🏼‍⚖ E4.0 man judge: medium-light skin tone +1F468 1F3FD 200D 2696 FE0F ; fully-qualified # 👨🏽‍⚖️ E4.0 man judge: medium skin tone +1F468 1F3FD 200D 2696 ; minimally-qualified # 👨🏽‍⚖ E4.0 man judge: medium skin tone +1F468 1F3FE 200D 2696 FE0F ; fully-qualified # 👨🏾‍⚖️ E4.0 man judge: medium-dark skin tone +1F468 1F3FE 200D 2696 ; minimally-qualified # 👨🏾‍⚖ E4.0 man judge: medium-dark skin tone +1F468 1F3FF 200D 2696 FE0F ; fully-qualified # 👨🏿‍⚖️ E4.0 man judge: dark skin tone +1F468 1F3FF 200D 2696 ; minimally-qualified # 👨🏿‍⚖ E4.0 man judge: dark skin tone +1F469 200D 2696 FE0F ; fully-qualified # 👩‍⚖️ E4.0 woman judge +1F469 200D 2696 ; minimally-qualified # 👩‍⚖ E4.0 woman judge +1F469 1F3FB 200D 2696 FE0F ; fully-qualified # 👩🏻‍⚖️ E4.0 woman judge: light skin tone +1F469 1F3FB 200D 2696 ; minimally-qualified # 👩🏻‍⚖ E4.0 woman judge: light skin tone +1F469 1F3FC 200D 2696 FE0F ; fully-qualified # 👩🏼‍⚖️ E4.0 woman judge: medium-light skin tone +1F469 1F3FC 200D 2696 ; minimally-qualified # 👩🏼‍⚖ E4.0 woman judge: medium-light skin tone +1F469 1F3FD 200D 2696 FE0F ; fully-qualified # 👩🏽‍⚖️ E4.0 woman judge: medium skin tone +1F469 1F3FD 200D 2696 ; minimally-qualified # 👩🏽‍⚖ E4.0 woman judge: medium skin tone +1F469 1F3FE 200D 2696 FE0F ; fully-qualified # 👩🏾‍⚖️ E4.0 woman judge: medium-dark skin tone +1F469 1F3FE 200D 2696 ; minimally-qualified # 👩🏾‍⚖ E4.0 woman judge: medium-dark skin tone +1F469 1F3FF 200D 2696 FE0F ; fully-qualified # 👩🏿‍⚖️ E4.0 woman judge: dark skin tone +1F469 1F3FF 200D 2696 ; minimally-qualified # 👩🏿‍⚖ E4.0 woman judge: dark skin tone +1F9D1 200D 1F33E ; fully-qualified # 🧑‍🌾 E12.1 farmer +1F9D1 1F3FB 200D 1F33E ; fully-qualified # 🧑🏻‍🌾 E12.1 farmer: light skin tone +1F9D1 1F3FC 200D 1F33E ; fully-qualified # 🧑🏼‍🌾 E12.1 farmer: medium-light skin tone +1F9D1 1F3FD 200D 1F33E ; fully-qualified # 🧑🏽‍🌾 E12.1 farmer: medium skin tone +1F9D1 1F3FE 200D 1F33E ; fully-qualified # 🧑🏾‍🌾 E12.1 farmer: medium-dark skin tone +1F9D1 1F3FF 200D 1F33E ; fully-qualified # 🧑🏿‍🌾 E12.1 farmer: dark skin tone +1F468 200D 1F33E ; fully-qualified # 👨‍🌾 E4.0 man farmer +1F468 1F3FB 200D 1F33E ; fully-qualified # 👨🏻‍🌾 E4.0 man farmer: light skin tone +1F468 1F3FC 200D 1F33E ; fully-qualified # 👨🏼‍🌾 E4.0 man farmer: medium-light skin tone +1F468 1F3FD 200D 1F33E ; fully-qualified # 👨🏽‍🌾 E4.0 man farmer: medium skin tone +1F468 1F3FE 200D 1F33E ; fully-qualified # 👨🏾‍🌾 E4.0 man farmer: medium-dark skin tone +1F468 1F3FF 200D 1F33E ; fully-qualified # 👨🏿‍🌾 E4.0 man farmer: dark skin tone +1F469 200D 1F33E ; fully-qualified # 👩‍🌾 E4.0 woman farmer +1F469 1F3FB 200D 1F33E ; fully-qualified # 👩🏻‍🌾 E4.0 woman farmer: light skin tone +1F469 1F3FC 200D 1F33E ; fully-qualified # 👩🏼‍🌾 E4.0 woman farmer: medium-light skin tone +1F469 1F3FD 200D 1F33E ; fully-qualified # 👩🏽‍🌾 E4.0 woman farmer: medium skin tone +1F469 1F3FE 200D 1F33E ; fully-qualified # 👩🏾‍🌾 E4.0 woman farmer: medium-dark skin tone +1F469 1F3FF 200D 1F33E ; fully-qualified # 👩🏿‍🌾 E4.0 woman farmer: dark skin tone +1F9D1 200D 1F373 ; fully-qualified # 🧑‍🍳 E12.1 cook +1F9D1 1F3FB 200D 1F373 ; fully-qualified # 🧑🏻‍🍳 E12.1 cook: light skin tone +1F9D1 1F3FC 200D 1F373 ; fully-qualified # 🧑🏼‍🍳 E12.1 cook: medium-light skin tone +1F9D1 1F3FD 200D 1F373 ; fully-qualified # 🧑🏽‍🍳 E12.1 cook: medium skin tone +1F9D1 1F3FE 200D 1F373 ; fully-qualified # 🧑🏾‍🍳 E12.1 cook: medium-dark skin tone +1F9D1 1F3FF 200D 1F373 ; fully-qualified # 🧑🏿‍🍳 E12.1 cook: dark skin tone +1F468 200D 1F373 ; fully-qualified # 👨‍🍳 E4.0 man cook +1F468 1F3FB 200D 1F373 ; fully-qualified # 👨🏻‍🍳 E4.0 man cook: light skin tone +1F468 1F3FC 200D 1F373 ; fully-qualified # 👨🏼‍🍳 E4.0 man cook: medium-light skin tone +1F468 1F3FD 200D 1F373 ; fully-qualified # 👨🏽‍🍳 E4.0 man cook: medium skin tone +1F468 1F3FE 200D 1F373 ; fully-qualified # 👨🏾‍🍳 E4.0 man cook: medium-dark skin tone +1F468 1F3FF 200D 1F373 ; fully-qualified # 👨🏿‍🍳 E4.0 man cook: dark skin tone +1F469 200D 1F373 ; fully-qualified # 👩‍🍳 E4.0 woman cook +1F469 1F3FB 200D 1F373 ; fully-qualified # 👩🏻‍🍳 E4.0 woman cook: light skin tone +1F469 1F3FC 200D 1F373 ; fully-qualified # 👩🏼‍🍳 E4.0 woman cook: medium-light skin tone +1F469 1F3FD 200D 1F373 ; fully-qualified # 👩🏽‍🍳 E4.0 woman cook: medium skin tone +1F469 1F3FE 200D 1F373 ; fully-qualified # 👩🏾‍🍳 E4.0 woman cook: medium-dark skin tone +1F469 1F3FF 200D 1F373 ; fully-qualified # 👩🏿‍🍳 E4.0 woman cook: dark skin tone +1F9D1 200D 1F527 ; fully-qualified # 🧑‍🔧 E12.1 mechanic +1F9D1 1F3FB 200D 1F527 ; fully-qualified # 🧑🏻‍🔧 E12.1 mechanic: light skin tone +1F9D1 1F3FC 200D 1F527 ; fully-qualified # 🧑🏼‍🔧 E12.1 mechanic: medium-light skin tone +1F9D1 1F3FD 200D 1F527 ; fully-qualified # 🧑🏽‍🔧 E12.1 mechanic: medium skin tone +1F9D1 1F3FE 200D 1F527 ; fully-qualified # 🧑🏾‍🔧 E12.1 mechanic: medium-dark skin tone +1F9D1 1F3FF 200D 1F527 ; fully-qualified # 🧑🏿‍🔧 E12.1 mechanic: dark skin tone +1F468 200D 1F527 ; fully-qualified # 👨‍🔧 E4.0 man mechanic +1F468 1F3FB 200D 1F527 ; fully-qualified # 👨🏻‍🔧 E4.0 man mechanic: light skin tone +1F468 1F3FC 200D 1F527 ; fully-qualified # 👨🏼‍🔧 E4.0 man mechanic: medium-light skin tone +1F468 1F3FD 200D 1F527 ; fully-qualified # 👨🏽‍🔧 E4.0 man mechanic: medium skin tone +1F468 1F3FE 200D 1F527 ; fully-qualified # 👨🏾‍🔧 E4.0 man mechanic: medium-dark skin tone +1F468 1F3FF 200D 1F527 ; fully-qualified # 👨🏿‍🔧 E4.0 man mechanic: dark skin tone +1F469 200D 1F527 ; fully-qualified # 👩‍🔧 E4.0 woman mechanic +1F469 1F3FB 200D 1F527 ; fully-qualified # 👩🏻‍🔧 E4.0 woman mechanic: light skin tone +1F469 1F3FC 200D 1F527 ; fully-qualified # 👩🏼‍🔧 E4.0 woman mechanic: medium-light skin tone +1F469 1F3FD 200D 1F527 ; fully-qualified # 👩🏽‍🔧 E4.0 woman mechanic: medium skin tone +1F469 1F3FE 200D 1F527 ; fully-qualified # 👩🏾‍🔧 E4.0 woman mechanic: medium-dark skin tone +1F469 1F3FF 200D 1F527 ; fully-qualified # 👩🏿‍🔧 E4.0 woman mechanic: dark skin tone +1F9D1 200D 1F3ED ; fully-qualified # 🧑‍🏭 E12.1 factory worker +1F9D1 1F3FB 200D 1F3ED ; fully-qualified # 🧑🏻‍🏭 E12.1 factory worker: light skin tone +1F9D1 1F3FC 200D 1F3ED ; fully-qualified # 🧑🏼‍🏭 E12.1 factory worker: medium-light skin tone +1F9D1 1F3FD 200D 1F3ED ; fully-qualified # 🧑🏽‍🏭 E12.1 factory worker: medium skin tone +1F9D1 1F3FE 200D 1F3ED ; fully-qualified # 🧑🏾‍🏭 E12.1 factory worker: medium-dark skin tone +1F9D1 1F3FF 200D 1F3ED ; fully-qualified # 🧑🏿‍🏭 E12.1 factory worker: dark skin tone +1F468 200D 1F3ED ; fully-qualified # 👨‍🏭 E4.0 man factory worker +1F468 1F3FB 200D 1F3ED ; fully-qualified # 👨🏻‍🏭 E4.0 man factory worker: light skin tone +1F468 1F3FC 200D 1F3ED ; fully-qualified # 👨🏼‍🏭 E4.0 man factory worker: medium-light skin tone +1F468 1F3FD 200D 1F3ED ; fully-qualified # 👨🏽‍🏭 E4.0 man factory worker: medium skin tone +1F468 1F3FE 200D 1F3ED ; fully-qualified # 👨🏾‍🏭 E4.0 man factory worker: medium-dark skin tone +1F468 1F3FF 200D 1F3ED ; fully-qualified # 👨🏿‍🏭 E4.0 man factory worker: dark skin tone +1F469 200D 1F3ED ; fully-qualified # 👩‍🏭 E4.0 woman factory worker +1F469 1F3FB 200D 1F3ED ; fully-qualified # 👩🏻‍🏭 E4.0 woman factory worker: light skin tone +1F469 1F3FC 200D 1F3ED ; fully-qualified # 👩🏼‍🏭 E4.0 woman factory worker: medium-light skin tone +1F469 1F3FD 200D 1F3ED ; fully-qualified # 👩🏽‍🏭 E4.0 woman factory worker: medium skin tone +1F469 1F3FE 200D 1F3ED ; fully-qualified # 👩🏾‍🏭 E4.0 woman factory worker: medium-dark skin tone +1F469 1F3FF 200D 1F3ED ; fully-qualified # 👩🏿‍🏭 E4.0 woman factory worker: dark skin tone +1F9D1 200D 1F4BC ; fully-qualified # 🧑‍💼 E12.1 office worker +1F9D1 1F3FB 200D 1F4BC ; fully-qualified # 🧑🏻‍💼 E12.1 office worker: light skin tone +1F9D1 1F3FC 200D 1F4BC ; fully-qualified # 🧑🏼‍💼 E12.1 office worker: medium-light skin tone +1F9D1 1F3FD 200D 1F4BC ; fully-qualified # 🧑🏽‍💼 E12.1 office worker: medium skin tone +1F9D1 1F3FE 200D 1F4BC ; fully-qualified # 🧑🏾‍💼 E12.1 office worker: medium-dark skin tone +1F9D1 1F3FF 200D 1F4BC ; fully-qualified # 🧑🏿‍💼 E12.1 office worker: dark skin tone +1F468 200D 1F4BC ; fully-qualified # 👨‍💼 E4.0 man office worker +1F468 1F3FB 200D 1F4BC ; fully-qualified # 👨🏻‍💼 E4.0 man office worker: light skin tone +1F468 1F3FC 200D 1F4BC ; fully-qualified # 👨🏼‍💼 E4.0 man office worker: medium-light skin tone +1F468 1F3FD 200D 1F4BC ; fully-qualified # 👨🏽‍💼 E4.0 man office worker: medium skin tone +1F468 1F3FE 200D 1F4BC ; fully-qualified # 👨🏾‍💼 E4.0 man office worker: medium-dark skin tone +1F468 1F3FF 200D 1F4BC ; fully-qualified # 👨🏿‍💼 E4.0 man office worker: dark skin tone +1F469 200D 1F4BC ; fully-qualified # 👩‍💼 E4.0 woman office worker +1F469 1F3FB 200D 1F4BC ; fully-qualified # 👩🏻‍💼 E4.0 woman office worker: light skin tone +1F469 1F3FC 200D 1F4BC ; fully-qualified # 👩🏼‍💼 E4.0 woman office worker: medium-light skin tone +1F469 1F3FD 200D 1F4BC ; fully-qualified # 👩🏽‍💼 E4.0 woman office worker: medium skin tone +1F469 1F3FE 200D 1F4BC ; fully-qualified # 👩🏾‍💼 E4.0 woman office worker: medium-dark skin tone +1F469 1F3FF 200D 1F4BC ; fully-qualified # 👩🏿‍💼 E4.0 woman office worker: dark skin tone +1F9D1 200D 1F52C ; fully-qualified # 🧑‍🔬 E12.1 scientist +1F9D1 1F3FB 200D 1F52C ; fully-qualified # 🧑🏻‍🔬 E12.1 scientist: light skin tone +1F9D1 1F3FC 200D 1F52C ; fully-qualified # 🧑🏼‍🔬 E12.1 scientist: medium-light skin tone +1F9D1 1F3FD 200D 1F52C ; fully-qualified # 🧑🏽‍🔬 E12.1 scientist: medium skin tone +1F9D1 1F3FE 200D 1F52C ; fully-qualified # 🧑🏾‍🔬 E12.1 scientist: medium-dark skin tone +1F9D1 1F3FF 200D 1F52C ; fully-qualified # 🧑🏿‍🔬 E12.1 scientist: dark skin tone +1F468 200D 1F52C ; fully-qualified # 👨‍🔬 E4.0 man scientist +1F468 1F3FB 200D 1F52C ; fully-qualified # 👨🏻‍🔬 E4.0 man scientist: light skin tone +1F468 1F3FC 200D 1F52C ; fully-qualified # 👨🏼‍🔬 E4.0 man scientist: medium-light skin tone +1F468 1F3FD 200D 1F52C ; fully-qualified # 👨🏽‍🔬 E4.0 man scientist: medium skin tone +1F468 1F3FE 200D 1F52C ; fully-qualified # 👨🏾‍🔬 E4.0 man scientist: medium-dark skin tone +1F468 1F3FF 200D 1F52C ; fully-qualified # 👨🏿‍🔬 E4.0 man scientist: dark skin tone +1F469 200D 1F52C ; fully-qualified # 👩‍🔬 E4.0 woman scientist +1F469 1F3FB 200D 1F52C ; fully-qualified # 👩🏻‍🔬 E4.0 woman scientist: light skin tone +1F469 1F3FC 200D 1F52C ; fully-qualified # 👩🏼‍🔬 E4.0 woman scientist: medium-light skin tone +1F469 1F3FD 200D 1F52C ; fully-qualified # 👩🏽‍🔬 E4.0 woman scientist: medium skin tone +1F469 1F3FE 200D 1F52C ; fully-qualified # 👩🏾‍🔬 E4.0 woman scientist: medium-dark skin tone +1F469 1F3FF 200D 1F52C ; fully-qualified # 👩🏿‍🔬 E4.0 woman scientist: dark skin tone +1F9D1 200D 1F4BB ; fully-qualified # 🧑‍💻 E12.1 technologist +1F9D1 1F3FB 200D 1F4BB ; fully-qualified # 🧑🏻‍💻 E12.1 technologist: light skin tone +1F9D1 1F3FC 200D 1F4BB ; fully-qualified # 🧑🏼‍💻 E12.1 technologist: medium-light skin tone +1F9D1 1F3FD 200D 1F4BB ; fully-qualified # 🧑🏽‍💻 E12.1 technologist: medium skin tone +1F9D1 1F3FE 200D 1F4BB ; fully-qualified # 🧑🏾‍💻 E12.1 technologist: medium-dark skin tone +1F9D1 1F3FF 200D 1F4BB ; fully-qualified # 🧑🏿‍💻 E12.1 technologist: dark skin tone +1F468 200D 1F4BB ; fully-qualified # 👨‍💻 E4.0 man technologist +1F468 1F3FB 200D 1F4BB ; fully-qualified # 👨🏻‍💻 E4.0 man technologist: light skin tone +1F468 1F3FC 200D 1F4BB ; fully-qualified # 👨🏼‍💻 E4.0 man technologist: medium-light skin tone +1F468 1F3FD 200D 1F4BB ; fully-qualified # 👨🏽‍💻 E4.0 man technologist: medium skin tone +1F468 1F3FE 200D 1F4BB ; fully-qualified # 👨🏾‍💻 E4.0 man technologist: medium-dark skin tone +1F468 1F3FF 200D 1F4BB ; fully-qualified # 👨🏿‍💻 E4.0 man technologist: dark skin tone +1F469 200D 1F4BB ; fully-qualified # 👩‍💻 E4.0 woman technologist +1F469 1F3FB 200D 1F4BB ; fully-qualified # 👩🏻‍💻 E4.0 woman technologist: light skin tone +1F469 1F3FC 200D 1F4BB ; fully-qualified # 👩🏼‍💻 E4.0 woman technologist: medium-light skin tone +1F469 1F3FD 200D 1F4BB ; fully-qualified # 👩🏽‍💻 E4.0 woman technologist: medium skin tone +1F469 1F3FE 200D 1F4BB ; fully-qualified # 👩🏾‍💻 E4.0 woman technologist: medium-dark skin tone +1F469 1F3FF 200D 1F4BB ; fully-qualified # 👩🏿‍💻 E4.0 woman technologist: dark skin tone +1F9D1 200D 1F3A4 ; fully-qualified # 🧑‍🎤 E12.1 singer +1F9D1 1F3FB 200D 1F3A4 ; fully-qualified # 🧑🏻‍🎤 E12.1 singer: light skin tone +1F9D1 1F3FC 200D 1F3A4 ; fully-qualified # 🧑🏼‍🎤 E12.1 singer: medium-light skin tone +1F9D1 1F3FD 200D 1F3A4 ; fully-qualified # 🧑🏽‍🎤 E12.1 singer: medium skin tone +1F9D1 1F3FE 200D 1F3A4 ; fully-qualified # 🧑🏾‍🎤 E12.1 singer: medium-dark skin tone +1F9D1 1F3FF 200D 1F3A4 ; fully-qualified # 🧑🏿‍🎤 E12.1 singer: dark skin tone +1F468 200D 1F3A4 ; fully-qualified # 👨‍🎤 E4.0 man singer +1F468 1F3FB 200D 1F3A4 ; fully-qualified # 👨🏻‍🎤 E4.0 man singer: light skin tone +1F468 1F3FC 200D 1F3A4 ; fully-qualified # 👨🏼‍🎤 E4.0 man singer: medium-light skin tone +1F468 1F3FD 200D 1F3A4 ; fully-qualified # 👨🏽‍🎤 E4.0 man singer: medium skin tone +1F468 1F3FE 200D 1F3A4 ; fully-qualified # 👨🏾‍🎤 E4.0 man singer: medium-dark skin tone +1F468 1F3FF 200D 1F3A4 ; fully-qualified # 👨🏿‍🎤 E4.0 man singer: dark skin tone +1F469 200D 1F3A4 ; fully-qualified # 👩‍🎤 E4.0 woman singer +1F469 1F3FB 200D 1F3A4 ; fully-qualified # 👩🏻‍🎤 E4.0 woman singer: light skin tone +1F469 1F3FC 200D 1F3A4 ; fully-qualified # 👩🏼‍🎤 E4.0 woman singer: medium-light skin tone +1F469 1F3FD 200D 1F3A4 ; fully-qualified # 👩🏽‍🎤 E4.0 woman singer: medium skin tone +1F469 1F3FE 200D 1F3A4 ; fully-qualified # 👩🏾‍🎤 E4.0 woman singer: medium-dark skin tone +1F469 1F3FF 200D 1F3A4 ; fully-qualified # 👩🏿‍🎤 E4.0 woman singer: dark skin tone +1F9D1 200D 1F3A8 ; fully-qualified # 🧑‍🎨 E12.1 artist +1F9D1 1F3FB 200D 1F3A8 ; fully-qualified # 🧑🏻‍🎨 E12.1 artist: light skin tone +1F9D1 1F3FC 200D 1F3A8 ; fully-qualified # 🧑🏼‍🎨 E12.1 artist: medium-light skin tone +1F9D1 1F3FD 200D 1F3A8 ; fully-qualified # 🧑🏽‍🎨 E12.1 artist: medium skin tone +1F9D1 1F3FE 200D 1F3A8 ; fully-qualified # 🧑🏾‍🎨 E12.1 artist: medium-dark skin tone +1F9D1 1F3FF 200D 1F3A8 ; fully-qualified # 🧑🏿‍🎨 E12.1 artist: dark skin tone +1F468 200D 1F3A8 ; fully-qualified # 👨‍🎨 E4.0 man artist +1F468 1F3FB 200D 1F3A8 ; fully-qualified # 👨🏻‍🎨 E4.0 man artist: light skin tone +1F468 1F3FC 200D 1F3A8 ; fully-qualified # 👨🏼‍🎨 E4.0 man artist: medium-light skin tone +1F468 1F3FD 200D 1F3A8 ; fully-qualified # 👨🏽‍🎨 E4.0 man artist: medium skin tone +1F468 1F3FE 200D 1F3A8 ; fully-qualified # 👨🏾‍🎨 E4.0 man artist: medium-dark skin tone +1F468 1F3FF 200D 1F3A8 ; fully-qualified # 👨🏿‍🎨 E4.0 man artist: dark skin tone +1F469 200D 1F3A8 ; fully-qualified # 👩‍🎨 E4.0 woman artist +1F469 1F3FB 200D 1F3A8 ; fully-qualified # 👩🏻‍🎨 E4.0 woman artist: light skin tone +1F469 1F3FC 200D 1F3A8 ; fully-qualified # 👩🏼‍🎨 E4.0 woman artist: medium-light skin tone +1F469 1F3FD 200D 1F3A8 ; fully-qualified # 👩🏽‍🎨 E4.0 woman artist: medium skin tone +1F469 1F3FE 200D 1F3A8 ; fully-qualified # 👩🏾‍🎨 E4.0 woman artist: medium-dark skin tone +1F469 1F3FF 200D 1F3A8 ; fully-qualified # 👩🏿‍🎨 E4.0 woman artist: dark skin tone +1F9D1 200D 2708 FE0F ; fully-qualified # 🧑‍✈️ E12.1 pilot +1F9D1 200D 2708 ; minimally-qualified # 🧑‍✈ E12.1 pilot +1F9D1 1F3FB 200D 2708 FE0F ; fully-qualified # 🧑🏻‍✈️ E12.1 pilot: light skin tone +1F9D1 1F3FB 200D 2708 ; minimally-qualified # 🧑🏻‍✈ E12.1 pilot: light skin tone +1F9D1 1F3FC 200D 2708 FE0F ; fully-qualified # 🧑🏼‍✈️ E12.1 pilot: medium-light skin tone +1F9D1 1F3FC 200D 2708 ; minimally-qualified # 🧑🏼‍✈ E12.1 pilot: medium-light skin tone +1F9D1 1F3FD 200D 2708 FE0F ; fully-qualified # 🧑🏽‍✈️ E12.1 pilot: medium skin tone +1F9D1 1F3FD 200D 2708 ; minimally-qualified # 🧑🏽‍✈ E12.1 pilot: medium skin tone +1F9D1 1F3FE 200D 2708 FE0F ; fully-qualified # 🧑🏾‍✈️ E12.1 pilot: medium-dark skin tone +1F9D1 1F3FE 200D 2708 ; minimally-qualified # 🧑🏾‍✈ E12.1 pilot: medium-dark skin tone +1F9D1 1F3FF 200D 2708 FE0F ; fully-qualified # 🧑🏿‍✈️ E12.1 pilot: dark skin tone +1F9D1 1F3FF 200D 2708 ; minimally-qualified # 🧑🏿‍✈ E12.1 pilot: dark skin tone +1F468 200D 2708 FE0F ; fully-qualified # 👨‍✈️ E4.0 man pilot +1F468 200D 2708 ; minimally-qualified # 👨‍✈ E4.0 man pilot +1F468 1F3FB 200D 2708 FE0F ; fully-qualified # 👨🏻‍✈️ E4.0 man pilot: light skin tone +1F468 1F3FB 200D 2708 ; minimally-qualified # 👨🏻‍✈ E4.0 man pilot: light skin tone +1F468 1F3FC 200D 2708 FE0F ; fully-qualified # 👨🏼‍✈️ E4.0 man pilot: medium-light skin tone +1F468 1F3FC 200D 2708 ; minimally-qualified # 👨🏼‍✈ E4.0 man pilot: medium-light skin tone +1F468 1F3FD 200D 2708 FE0F ; fully-qualified # 👨🏽‍✈️ E4.0 man pilot: medium skin tone +1F468 1F3FD 200D 2708 ; minimally-qualified # 👨🏽‍✈ E4.0 man pilot: medium skin tone +1F468 1F3FE 200D 2708 FE0F ; fully-qualified # 👨🏾‍✈️ E4.0 man pilot: medium-dark skin tone +1F468 1F3FE 200D 2708 ; minimally-qualified # 👨🏾‍✈ E4.0 man pilot: medium-dark skin tone +1F468 1F3FF 200D 2708 FE0F ; fully-qualified # 👨🏿‍✈️ E4.0 man pilot: dark skin tone +1F468 1F3FF 200D 2708 ; minimally-qualified # 👨🏿‍✈ E4.0 man pilot: dark skin tone +1F469 200D 2708 FE0F ; fully-qualified # 👩‍✈️ E4.0 woman pilot +1F469 200D 2708 ; minimally-qualified # 👩‍✈ E4.0 woman pilot +1F469 1F3FB 200D 2708 FE0F ; fully-qualified # 👩🏻‍✈️ E4.0 woman pilot: light skin tone +1F469 1F3FB 200D 2708 ; minimally-qualified # 👩🏻‍✈ E4.0 woman pilot: light skin tone +1F469 1F3FC 200D 2708 FE0F ; fully-qualified # 👩🏼‍✈️ E4.0 woman pilot: medium-light skin tone +1F469 1F3FC 200D 2708 ; minimally-qualified # 👩🏼‍✈ E4.0 woman pilot: medium-light skin tone +1F469 1F3FD 200D 2708 FE0F ; fully-qualified # 👩🏽‍✈️ E4.0 woman pilot: medium skin tone +1F469 1F3FD 200D 2708 ; minimally-qualified # 👩🏽‍✈ E4.0 woman pilot: medium skin tone +1F469 1F3FE 200D 2708 FE0F ; fully-qualified # 👩🏾‍✈️ E4.0 woman pilot: medium-dark skin tone +1F469 1F3FE 200D 2708 ; minimally-qualified # 👩🏾‍✈ E4.0 woman pilot: medium-dark skin tone +1F469 1F3FF 200D 2708 FE0F ; fully-qualified # 👩🏿‍✈️ E4.0 woman pilot: dark skin tone +1F469 1F3FF 200D 2708 ; minimally-qualified # 👩🏿‍✈ E4.0 woman pilot: dark skin tone +1F9D1 200D 1F680 ; fully-qualified # 🧑‍🚀 E12.1 astronaut +1F9D1 1F3FB 200D 1F680 ; fully-qualified # 🧑🏻‍🚀 E12.1 astronaut: light skin tone +1F9D1 1F3FC 200D 1F680 ; fully-qualified # 🧑🏼‍🚀 E12.1 astronaut: medium-light skin tone +1F9D1 1F3FD 200D 1F680 ; fully-qualified # 🧑🏽‍🚀 E12.1 astronaut: medium skin tone +1F9D1 1F3FE 200D 1F680 ; fully-qualified # 🧑🏾‍🚀 E12.1 astronaut: medium-dark skin tone +1F9D1 1F3FF 200D 1F680 ; fully-qualified # 🧑🏿‍🚀 E12.1 astronaut: dark skin tone +1F468 200D 1F680 ; fully-qualified # 👨‍🚀 E4.0 man astronaut +1F468 1F3FB 200D 1F680 ; fully-qualified # 👨🏻‍🚀 E4.0 man astronaut: light skin tone +1F468 1F3FC 200D 1F680 ; fully-qualified # 👨🏼‍🚀 E4.0 man astronaut: medium-light skin tone +1F468 1F3FD 200D 1F680 ; fully-qualified # 👨🏽‍🚀 E4.0 man astronaut: medium skin tone +1F468 1F3FE 200D 1F680 ; fully-qualified # 👨🏾‍🚀 E4.0 man astronaut: medium-dark skin tone +1F468 1F3FF 200D 1F680 ; fully-qualified # 👨🏿‍🚀 E4.0 man astronaut: dark skin tone +1F469 200D 1F680 ; fully-qualified # 👩‍🚀 E4.0 woman astronaut +1F469 1F3FB 200D 1F680 ; fully-qualified # 👩🏻‍🚀 E4.0 woman astronaut: light skin tone +1F469 1F3FC 200D 1F680 ; fully-qualified # 👩🏼‍🚀 E4.0 woman astronaut: medium-light skin tone +1F469 1F3FD 200D 1F680 ; fully-qualified # 👩🏽‍🚀 E4.0 woman astronaut: medium skin tone +1F469 1F3FE 200D 1F680 ; fully-qualified # 👩🏾‍🚀 E4.0 woman astronaut: medium-dark skin tone +1F469 1F3FF 200D 1F680 ; fully-qualified # 👩🏿‍🚀 E4.0 woman astronaut: dark skin tone +1F9D1 200D 1F692 ; fully-qualified # 🧑‍🚒 E12.1 firefighter +1F9D1 1F3FB 200D 1F692 ; fully-qualified # 🧑🏻‍🚒 E12.1 firefighter: light skin tone +1F9D1 1F3FC 200D 1F692 ; fully-qualified # 🧑🏼‍🚒 E12.1 firefighter: medium-light skin tone +1F9D1 1F3FD 200D 1F692 ; fully-qualified # 🧑🏽‍🚒 E12.1 firefighter: medium skin tone +1F9D1 1F3FE 200D 1F692 ; fully-qualified # 🧑🏾‍🚒 E12.1 firefighter: medium-dark skin tone +1F9D1 1F3FF 200D 1F692 ; fully-qualified # 🧑🏿‍🚒 E12.1 firefighter: dark skin tone +1F468 200D 1F692 ; fully-qualified # 👨‍🚒 E4.0 man firefighter +1F468 1F3FB 200D 1F692 ; fully-qualified # 👨🏻‍🚒 E4.0 man firefighter: light skin tone +1F468 1F3FC 200D 1F692 ; fully-qualified # 👨🏼‍🚒 E4.0 man firefighter: medium-light skin tone +1F468 1F3FD 200D 1F692 ; fully-qualified # 👨🏽‍🚒 E4.0 man firefighter: medium skin tone +1F468 1F3FE 200D 1F692 ; fully-qualified # 👨🏾‍🚒 E4.0 man firefighter: medium-dark skin tone +1F468 1F3FF 200D 1F692 ; fully-qualified # 👨🏿‍🚒 E4.0 man firefighter: dark skin tone +1F469 200D 1F692 ; fully-qualified # 👩‍🚒 E4.0 woman firefighter +1F469 1F3FB 200D 1F692 ; fully-qualified # 👩🏻‍🚒 E4.0 woman firefighter: light skin tone +1F469 1F3FC 200D 1F692 ; fully-qualified # 👩🏼‍🚒 E4.0 woman firefighter: medium-light skin tone +1F469 1F3FD 200D 1F692 ; fully-qualified # 👩🏽‍🚒 E4.0 woman firefighter: medium skin tone +1F469 1F3FE 200D 1F692 ; fully-qualified # 👩🏾‍🚒 E4.0 woman firefighter: medium-dark skin tone +1F469 1F3FF 200D 1F692 ; fully-qualified # 👩🏿‍🚒 E4.0 woman firefighter: dark skin tone +1F46E ; fully-qualified # 👮 E0.6 police officer +1F46E 1F3FB ; fully-qualified # 👮🏻 E1.0 police officer: light skin tone +1F46E 1F3FC ; fully-qualified # 👮🏼 E1.0 police officer: medium-light skin tone +1F46E 1F3FD ; fully-qualified # 👮🏽 E1.0 police officer: medium skin tone +1F46E 1F3FE ; fully-qualified # 👮🏾 E1.0 police officer: medium-dark skin tone +1F46E 1F3FF ; fully-qualified # 👮🏿 E1.0 police officer: dark skin tone +1F46E 200D 2642 FE0F ; fully-qualified # 👮‍♂️ E4.0 man police officer +1F46E 200D 2642 ; minimally-qualified # 👮‍♂ E4.0 man police officer +1F46E 1F3FB 200D 2642 FE0F ; fully-qualified # 👮🏻‍♂️ E4.0 man police officer: light skin tone +1F46E 1F3FB 200D 2642 ; minimally-qualified # 👮🏻‍♂ E4.0 man police officer: light skin tone +1F46E 1F3FC 200D 2642 FE0F ; fully-qualified # 👮🏼‍♂️ E4.0 man police officer: medium-light skin tone +1F46E 1F3FC 200D 2642 ; minimally-qualified # 👮🏼‍♂ E4.0 man police officer: medium-light skin tone +1F46E 1F3FD 200D 2642 FE0F ; fully-qualified # 👮🏽‍♂️ E4.0 man police officer: medium skin tone +1F46E 1F3FD 200D 2642 ; minimally-qualified # 👮🏽‍♂ E4.0 man police officer: medium skin tone +1F46E 1F3FE 200D 2642 FE0F ; fully-qualified # 👮🏾‍♂️ E4.0 man police officer: medium-dark skin tone +1F46E 1F3FE 200D 2642 ; minimally-qualified # 👮🏾‍♂ E4.0 man police officer: medium-dark skin tone +1F46E 1F3FF 200D 2642 FE0F ; fully-qualified # 👮🏿‍♂️ E4.0 man police officer: dark skin tone +1F46E 1F3FF 200D 2642 ; minimally-qualified # 👮🏿‍♂ E4.0 man police officer: dark skin tone +1F46E 200D 2640 FE0F ; fully-qualified # 👮‍♀️ E4.0 woman police officer +1F46E 200D 2640 ; minimally-qualified # 👮‍♀ E4.0 woman police officer +1F46E 1F3FB 200D 2640 FE0F ; fully-qualified # 👮🏻‍♀️ E4.0 woman police officer: light skin tone +1F46E 1F3FB 200D 2640 ; minimally-qualified # 👮🏻‍♀ E4.0 woman police officer: light skin tone +1F46E 1F3FC 200D 2640 FE0F ; fully-qualified # 👮🏼‍♀️ E4.0 woman police officer: medium-light skin tone +1F46E 1F3FC 200D 2640 ; minimally-qualified # 👮🏼‍♀ E4.0 woman police officer: medium-light skin tone +1F46E 1F3FD 200D 2640 FE0F ; fully-qualified # 👮🏽‍♀️ E4.0 woman police officer: medium skin tone +1F46E 1F3FD 200D 2640 ; minimally-qualified # 👮🏽‍♀ E4.0 woman police officer: medium skin tone +1F46E 1F3FE 200D 2640 FE0F ; fully-qualified # 👮🏾‍♀️ E4.0 woman police officer: medium-dark skin tone +1F46E 1F3FE 200D 2640 ; minimally-qualified # 👮🏾‍♀ E4.0 woman police officer: medium-dark skin tone +1F46E 1F3FF 200D 2640 FE0F ; fully-qualified # 👮🏿‍♀️ E4.0 woman police officer: dark skin tone +1F46E 1F3FF 200D 2640 ; minimally-qualified # 👮🏿‍♀ E4.0 woman police officer: dark skin tone +1F575 FE0F ; fully-qualified # 🕵️ E0.7 detective +1F575 ; unqualified # 🕵 E0.7 detective +1F575 1F3FB ; fully-qualified # 🕵🏻 E2.0 detective: light skin tone +1F575 1F3FC ; fully-qualified # 🕵🏼 E2.0 detective: medium-light skin tone +1F575 1F3FD ; fully-qualified # 🕵🏽 E2.0 detective: medium skin tone +1F575 1F3FE ; fully-qualified # 🕵🏾 E2.0 detective: medium-dark skin tone +1F575 1F3FF ; fully-qualified # 🕵🏿 E2.0 detective: dark skin tone +1F575 FE0F 200D 2642 FE0F ; fully-qualified # 🕵️‍♂️ E4.0 man detective +1F575 200D 2642 FE0F ; unqualified # 🕵‍♂️ E4.0 man detective +1F575 FE0F 200D 2642 ; unqualified # 🕵️‍♂ E4.0 man detective +1F575 200D 2642 ; unqualified # 🕵‍♂ E4.0 man detective +1F575 1F3FB 200D 2642 FE0F ; fully-qualified # 🕵🏻‍♂️ E4.0 man detective: light skin tone +1F575 1F3FB 200D 2642 ; minimally-qualified # 🕵🏻‍♂ E4.0 man detective: light skin tone +1F575 1F3FC 200D 2642 FE0F ; fully-qualified # 🕵🏼‍♂️ E4.0 man detective: medium-light skin tone +1F575 1F3FC 200D 2642 ; minimally-qualified # 🕵🏼‍♂ E4.0 man detective: medium-light skin tone +1F575 1F3FD 200D 2642 FE0F ; fully-qualified # 🕵🏽‍♂️ E4.0 man detective: medium skin tone +1F575 1F3FD 200D 2642 ; minimally-qualified # 🕵🏽‍♂ E4.0 man detective: medium skin tone +1F575 1F3FE 200D 2642 FE0F ; fully-qualified # 🕵🏾‍♂️ E4.0 man detective: medium-dark skin tone +1F575 1F3FE 200D 2642 ; minimally-qualified # 🕵🏾‍♂ E4.0 man detective: medium-dark skin tone +1F575 1F3FF 200D 2642 FE0F ; fully-qualified # 🕵🏿‍♂️ E4.0 man detective: dark skin tone +1F575 1F3FF 200D 2642 ; minimally-qualified # 🕵🏿‍♂ E4.0 man detective: dark skin tone +1F575 FE0F 200D 2640 FE0F ; fully-qualified # 🕵️‍♀️ E4.0 woman detective +1F575 200D 2640 FE0F ; unqualified # 🕵‍♀️ E4.0 woman detective +1F575 FE0F 200D 2640 ; unqualified # 🕵️‍♀ E4.0 woman detective +1F575 200D 2640 ; unqualified # 🕵‍♀ E4.0 woman detective +1F575 1F3FB 200D 2640 FE0F ; fully-qualified # 🕵🏻‍♀️ E4.0 woman detective: light skin tone +1F575 1F3FB 200D 2640 ; minimally-qualified # 🕵🏻‍♀ E4.0 woman detective: light skin tone +1F575 1F3FC 200D 2640 FE0F ; fully-qualified # 🕵🏼‍♀️ E4.0 woman detective: medium-light skin tone +1F575 1F3FC 200D 2640 ; minimally-qualified # 🕵🏼‍♀ E4.0 woman detective: medium-light skin tone +1F575 1F3FD 200D 2640 FE0F ; fully-qualified # 🕵🏽‍♀️ E4.0 woman detective: medium skin tone +1F575 1F3FD 200D 2640 ; minimally-qualified # 🕵🏽‍♀ E4.0 woman detective: medium skin tone +1F575 1F3FE 200D 2640 FE0F ; fully-qualified # 🕵🏾‍♀️ E4.0 woman detective: medium-dark skin tone +1F575 1F3FE 200D 2640 ; minimally-qualified # 🕵🏾‍♀ E4.0 woman detective: medium-dark skin tone +1F575 1F3FF 200D 2640 FE0F ; fully-qualified # 🕵🏿‍♀️ E4.0 woman detective: dark skin tone +1F575 1F3FF 200D 2640 ; minimally-qualified # 🕵🏿‍♀ E4.0 woman detective: dark skin tone +1F482 ; fully-qualified # 💂 E0.6 guard +1F482 1F3FB ; fully-qualified # 💂🏻 E1.0 guard: light skin tone +1F482 1F3FC ; fully-qualified # 💂🏼 E1.0 guard: medium-light skin tone +1F482 1F3FD ; fully-qualified # 💂🏽 E1.0 guard: medium skin tone +1F482 1F3FE ; fully-qualified # 💂🏾 E1.0 guard: medium-dark skin tone +1F482 1F3FF ; fully-qualified # 💂🏿 E1.0 guard: dark skin tone +1F482 200D 2642 FE0F ; fully-qualified # 💂‍♂️ E4.0 man guard +1F482 200D 2642 ; minimally-qualified # 💂‍♂ E4.0 man guard +1F482 1F3FB 200D 2642 FE0F ; fully-qualified # 💂🏻‍♂️ E4.0 man guard: light skin tone +1F482 1F3FB 200D 2642 ; minimally-qualified # 💂🏻‍♂ E4.0 man guard: light skin tone +1F482 1F3FC 200D 2642 FE0F ; fully-qualified # 💂🏼‍♂️ E4.0 man guard: medium-light skin tone +1F482 1F3FC 200D 2642 ; minimally-qualified # 💂🏼‍♂ E4.0 man guard: medium-light skin tone +1F482 1F3FD 200D 2642 FE0F ; fully-qualified # 💂🏽‍♂️ E4.0 man guard: medium skin tone +1F482 1F3FD 200D 2642 ; minimally-qualified # 💂🏽‍♂ E4.0 man guard: medium skin tone +1F482 1F3FE 200D 2642 FE0F ; fully-qualified # 💂🏾‍♂️ E4.0 man guard: medium-dark skin tone +1F482 1F3FE 200D 2642 ; minimally-qualified # 💂🏾‍♂ E4.0 man guard: medium-dark skin tone +1F482 1F3FF 200D 2642 FE0F ; fully-qualified # 💂🏿‍♂️ E4.0 man guard: dark skin tone +1F482 1F3FF 200D 2642 ; minimally-qualified # 💂🏿‍♂ E4.0 man guard: dark skin tone +1F482 200D 2640 FE0F ; fully-qualified # 💂‍♀️ E4.0 woman guard +1F482 200D 2640 ; minimally-qualified # 💂‍♀ E4.0 woman guard +1F482 1F3FB 200D 2640 FE0F ; fully-qualified # 💂🏻‍♀️ E4.0 woman guard: light skin tone +1F482 1F3FB 200D 2640 ; minimally-qualified # 💂🏻‍♀ E4.0 woman guard: light skin tone +1F482 1F3FC 200D 2640 FE0F ; fully-qualified # 💂🏼‍♀️ E4.0 woman guard: medium-light skin tone +1F482 1F3FC 200D 2640 ; minimally-qualified # 💂🏼‍♀ E4.0 woman guard: medium-light skin tone +1F482 1F3FD 200D 2640 FE0F ; fully-qualified # 💂🏽‍♀️ E4.0 woman guard: medium skin tone +1F482 1F3FD 200D 2640 ; minimally-qualified # 💂🏽‍♀ E4.0 woman guard: medium skin tone +1F482 1F3FE 200D 2640 FE0F ; fully-qualified # 💂🏾‍♀️ E4.0 woman guard: medium-dark skin tone +1F482 1F3FE 200D 2640 ; minimally-qualified # 💂🏾‍♀ E4.0 woman guard: medium-dark skin tone +1F482 1F3FF 200D 2640 FE0F ; fully-qualified # 💂🏿‍♀️ E4.0 woman guard: dark skin tone +1F482 1F3FF 200D 2640 ; minimally-qualified # 💂🏿‍♀ E4.0 woman guard: dark skin tone +1F977 ; fully-qualified # 🥷 E13.0 ninja +1F977 1F3FB ; fully-qualified # 🥷🏻 E13.0 ninja: light skin tone +1F977 1F3FC ; fully-qualified # 🥷🏼 E13.0 ninja: medium-light skin tone +1F977 1F3FD ; fully-qualified # 🥷🏽 E13.0 ninja: medium skin tone +1F977 1F3FE ; fully-qualified # 🥷🏾 E13.0 ninja: medium-dark skin tone +1F977 1F3FF ; fully-qualified # 🥷🏿 E13.0 ninja: dark skin tone +1F477 ; fully-qualified # 👷 E0.6 construction worker +1F477 1F3FB ; fully-qualified # 👷🏻 E1.0 construction worker: light skin tone +1F477 1F3FC ; fully-qualified # 👷🏼 E1.0 construction worker: medium-light skin tone +1F477 1F3FD ; fully-qualified # 👷🏽 E1.0 construction worker: medium skin tone +1F477 1F3FE ; fully-qualified # 👷🏾 E1.0 construction worker: medium-dark skin tone +1F477 1F3FF ; fully-qualified # 👷🏿 E1.0 construction worker: dark skin tone +1F477 200D 2642 FE0F ; fully-qualified # 👷‍♂️ E4.0 man construction worker +1F477 200D 2642 ; minimally-qualified # 👷‍♂ E4.0 man construction worker +1F477 1F3FB 200D 2642 FE0F ; fully-qualified # 👷🏻‍♂️ E4.0 man construction worker: light skin tone +1F477 1F3FB 200D 2642 ; minimally-qualified # 👷🏻‍♂ E4.0 man construction worker: light skin tone +1F477 1F3FC 200D 2642 FE0F ; fully-qualified # 👷🏼‍♂️ E4.0 man construction worker: medium-light skin tone +1F477 1F3FC 200D 2642 ; minimally-qualified # 👷🏼‍♂ E4.0 man construction worker: medium-light skin tone +1F477 1F3FD 200D 2642 FE0F ; fully-qualified # 👷🏽‍♂️ E4.0 man construction worker: medium skin tone +1F477 1F3FD 200D 2642 ; minimally-qualified # 👷🏽‍♂ E4.0 man construction worker: medium skin tone +1F477 1F3FE 200D 2642 FE0F ; fully-qualified # 👷🏾‍♂️ E4.0 man construction worker: medium-dark skin tone +1F477 1F3FE 200D 2642 ; minimally-qualified # 👷🏾‍♂ E4.0 man construction worker: medium-dark skin tone +1F477 1F3FF 200D 2642 FE0F ; fully-qualified # 👷🏿‍♂️ E4.0 man construction worker: dark skin tone +1F477 1F3FF 200D 2642 ; minimally-qualified # 👷🏿‍♂ E4.0 man construction worker: dark skin tone +1F477 200D 2640 FE0F ; fully-qualified # 👷‍♀️ E4.0 woman construction worker +1F477 200D 2640 ; minimally-qualified # 👷‍♀ E4.0 woman construction worker +1F477 1F3FB 200D 2640 FE0F ; fully-qualified # 👷🏻‍♀️ E4.0 woman construction worker: light skin tone +1F477 1F3FB 200D 2640 ; minimally-qualified # 👷🏻‍♀ E4.0 woman construction worker: light skin tone +1F477 1F3FC 200D 2640 FE0F ; fully-qualified # 👷🏼‍♀️ E4.0 woman construction worker: medium-light skin tone +1F477 1F3FC 200D 2640 ; minimally-qualified # 👷🏼‍♀ E4.0 woman construction worker: medium-light skin tone +1F477 1F3FD 200D 2640 FE0F ; fully-qualified # 👷🏽‍♀️ E4.0 woman construction worker: medium skin tone +1F477 1F3FD 200D 2640 ; minimally-qualified # 👷🏽‍♀ E4.0 woman construction worker: medium skin tone +1F477 1F3FE 200D 2640 FE0F ; fully-qualified # 👷🏾‍♀️ E4.0 woman construction worker: medium-dark skin tone +1F477 1F3FE 200D 2640 ; minimally-qualified # 👷🏾‍♀ E4.0 woman construction worker: medium-dark skin tone +1F477 1F3FF 200D 2640 FE0F ; fully-qualified # 👷🏿‍♀️ E4.0 woman construction worker: dark skin tone +1F477 1F3FF 200D 2640 ; minimally-qualified # 👷🏿‍♀ E4.0 woman construction worker: dark skin tone +1FAC5 ; fully-qualified # 🫅 E14.0 person with crown +1FAC5 1F3FB ; fully-qualified # 🫅🏻 E14.0 person with crown: light skin tone +1FAC5 1F3FC ; fully-qualified # 🫅🏼 E14.0 person with crown: medium-light skin tone +1FAC5 1F3FD ; fully-qualified # 🫅🏽 E14.0 person with crown: medium skin tone +1FAC5 1F3FE ; fully-qualified # 🫅🏾 E14.0 person with crown: medium-dark skin tone +1FAC5 1F3FF ; fully-qualified # 🫅🏿 E14.0 person with crown: dark skin tone +1F934 ; fully-qualified # 🤴 E3.0 prince +1F934 1F3FB ; fully-qualified # 🤴🏻 E3.0 prince: light skin tone +1F934 1F3FC ; fully-qualified # 🤴🏼 E3.0 prince: medium-light skin tone +1F934 1F3FD ; fully-qualified # 🤴🏽 E3.0 prince: medium skin tone +1F934 1F3FE ; fully-qualified # 🤴🏾 E3.0 prince: medium-dark skin tone +1F934 1F3FF ; fully-qualified # 🤴🏿 E3.0 prince: dark skin tone +1F478 ; fully-qualified # 👸 E0.6 princess +1F478 1F3FB ; fully-qualified # 👸🏻 E1.0 princess: light skin tone +1F478 1F3FC ; fully-qualified # 👸🏼 E1.0 princess: medium-light skin tone +1F478 1F3FD ; fully-qualified # 👸🏽 E1.0 princess: medium skin tone +1F478 1F3FE ; fully-qualified # 👸🏾 E1.0 princess: medium-dark skin tone +1F478 1F3FF ; fully-qualified # 👸🏿 E1.0 princess: dark skin tone +1F473 ; fully-qualified # 👳 E0.6 person wearing turban +1F473 1F3FB ; fully-qualified # 👳🏻 E1.0 person wearing turban: light skin tone +1F473 1F3FC ; fully-qualified # 👳🏼 E1.0 person wearing turban: medium-light skin tone +1F473 1F3FD ; fully-qualified # 👳🏽 E1.0 person wearing turban: medium skin tone +1F473 1F3FE ; fully-qualified # 👳🏾 E1.0 person wearing turban: medium-dark skin tone +1F473 1F3FF ; fully-qualified # 👳🏿 E1.0 person wearing turban: dark skin tone +1F473 200D 2642 FE0F ; fully-qualified # 👳‍♂️ E4.0 man wearing turban +1F473 200D 2642 ; minimally-qualified # 👳‍♂ E4.0 man wearing turban +1F473 1F3FB 200D 2642 FE0F ; fully-qualified # 👳🏻‍♂️ E4.0 man wearing turban: light skin tone +1F473 1F3FB 200D 2642 ; minimally-qualified # 👳🏻‍♂ E4.0 man wearing turban: light skin tone +1F473 1F3FC 200D 2642 FE0F ; fully-qualified # 👳🏼‍♂️ E4.0 man wearing turban: medium-light skin tone +1F473 1F3FC 200D 2642 ; minimally-qualified # 👳🏼‍♂ E4.0 man wearing turban: medium-light skin tone +1F473 1F3FD 200D 2642 FE0F ; fully-qualified # 👳🏽‍♂️ E4.0 man wearing turban: medium skin tone +1F473 1F3FD 200D 2642 ; minimally-qualified # 👳🏽‍♂ E4.0 man wearing turban: medium skin tone +1F473 1F3FE 200D 2642 FE0F ; fully-qualified # 👳🏾‍♂️ E4.0 man wearing turban: medium-dark skin tone +1F473 1F3FE 200D 2642 ; minimally-qualified # 👳🏾‍♂ E4.0 man wearing turban: medium-dark skin tone +1F473 1F3FF 200D 2642 FE0F ; fully-qualified # 👳🏿‍♂️ E4.0 man wearing turban: dark skin tone +1F473 1F3FF 200D 2642 ; minimally-qualified # 👳🏿‍♂ E4.0 man wearing turban: dark skin tone +1F473 200D 2640 FE0F ; fully-qualified # 👳‍♀️ E4.0 woman wearing turban +1F473 200D 2640 ; minimally-qualified # 👳‍♀ E4.0 woman wearing turban +1F473 1F3FB 200D 2640 FE0F ; fully-qualified # 👳🏻‍♀️ E4.0 woman wearing turban: light skin tone +1F473 1F3FB 200D 2640 ; minimally-qualified # 👳🏻‍♀ E4.0 woman wearing turban: light skin tone +1F473 1F3FC 200D 2640 FE0F ; fully-qualified # 👳🏼‍♀️ E4.0 woman wearing turban: medium-light skin tone +1F473 1F3FC 200D 2640 ; minimally-qualified # 👳🏼‍♀ E4.0 woman wearing turban: medium-light skin tone +1F473 1F3FD 200D 2640 FE0F ; fully-qualified # 👳🏽‍♀️ E4.0 woman wearing turban: medium skin tone +1F473 1F3FD 200D 2640 ; minimally-qualified # 👳🏽‍♀ E4.0 woman wearing turban: medium skin tone +1F473 1F3FE 200D 2640 FE0F ; fully-qualified # 👳🏾‍♀️ E4.0 woman wearing turban: medium-dark skin tone +1F473 1F3FE 200D 2640 ; minimally-qualified # 👳🏾‍♀ E4.0 woman wearing turban: medium-dark skin tone +1F473 1F3FF 200D 2640 FE0F ; fully-qualified # 👳🏿‍♀️ E4.0 woman wearing turban: dark skin tone +1F473 1F3FF 200D 2640 ; minimally-qualified # 👳🏿‍♀ E4.0 woman wearing turban: dark skin tone +1F472 ; fully-qualified # 👲 E0.6 person with skullcap +1F472 1F3FB ; fully-qualified # 👲🏻 E1.0 person with skullcap: light skin tone +1F472 1F3FC ; fully-qualified # 👲🏼 E1.0 person with skullcap: medium-light skin tone +1F472 1F3FD ; fully-qualified # 👲🏽 E1.0 person with skullcap: medium skin tone +1F472 1F3FE ; fully-qualified # 👲🏾 E1.0 person with skullcap: medium-dark skin tone +1F472 1F3FF ; fully-qualified # 👲🏿 E1.0 person with skullcap: dark skin tone +1F9D5 ; fully-qualified # 🧕 E5.0 woman with headscarf +1F9D5 1F3FB ; fully-qualified # 🧕🏻 E5.0 woman with headscarf: light skin tone +1F9D5 1F3FC ; fully-qualified # 🧕🏼 E5.0 woman with headscarf: medium-light skin tone +1F9D5 1F3FD ; fully-qualified # 🧕🏽 E5.0 woman with headscarf: medium skin tone +1F9D5 1F3FE ; fully-qualified # 🧕🏾 E5.0 woman with headscarf: medium-dark skin tone +1F9D5 1F3FF ; fully-qualified # 🧕🏿 E5.0 woman with headscarf: dark skin tone +1F935 ; fully-qualified # 🤵 E3.0 person in tuxedo +1F935 1F3FB ; fully-qualified # 🤵🏻 E3.0 person in tuxedo: light skin tone +1F935 1F3FC ; fully-qualified # 🤵🏼 E3.0 person in tuxedo: medium-light skin tone +1F935 1F3FD ; fully-qualified # 🤵🏽 E3.0 person in tuxedo: medium skin tone +1F935 1F3FE ; fully-qualified # 🤵🏾 E3.0 person in tuxedo: medium-dark skin tone +1F935 1F3FF ; fully-qualified # 🤵🏿 E3.0 person in tuxedo: dark skin tone +1F935 200D 2642 FE0F ; fully-qualified # 🤵‍♂️ E13.0 man in tuxedo +1F935 200D 2642 ; minimally-qualified # 🤵‍♂ E13.0 man in tuxedo +1F935 1F3FB 200D 2642 FE0F ; fully-qualified # 🤵🏻‍♂️ E13.0 man in tuxedo: light skin tone +1F935 1F3FB 200D 2642 ; minimally-qualified # 🤵🏻‍♂ E13.0 man in tuxedo: light skin tone +1F935 1F3FC 200D 2642 FE0F ; fully-qualified # 🤵🏼‍♂️ E13.0 man in tuxedo: medium-light skin tone +1F935 1F3FC 200D 2642 ; minimally-qualified # 🤵🏼‍♂ E13.0 man in tuxedo: medium-light skin tone +1F935 1F3FD 200D 2642 FE0F ; fully-qualified # 🤵🏽‍♂️ E13.0 man in tuxedo: medium skin tone +1F935 1F3FD 200D 2642 ; minimally-qualified # 🤵🏽‍♂ E13.0 man in tuxedo: medium skin tone +1F935 1F3FE 200D 2642 FE0F ; fully-qualified # 🤵🏾‍♂️ E13.0 man in tuxedo: medium-dark skin tone +1F935 1F3FE 200D 2642 ; minimally-qualified # 🤵🏾‍♂ E13.0 man in tuxedo: medium-dark skin tone +1F935 1F3FF 200D 2642 FE0F ; fully-qualified # 🤵🏿‍♂️ E13.0 man in tuxedo: dark skin tone +1F935 1F3FF 200D 2642 ; minimally-qualified # 🤵🏿‍♂ E13.0 man in tuxedo: dark skin tone +1F935 200D 2640 FE0F ; fully-qualified # 🤵‍♀️ E13.0 woman in tuxedo +1F935 200D 2640 ; minimally-qualified # 🤵‍♀ E13.0 woman in tuxedo +1F935 1F3FB 200D 2640 FE0F ; fully-qualified # 🤵🏻‍♀️ E13.0 woman in tuxedo: light skin tone +1F935 1F3FB 200D 2640 ; minimally-qualified # 🤵🏻‍♀ E13.0 woman in tuxedo: light skin tone +1F935 1F3FC 200D 2640 FE0F ; fully-qualified # 🤵🏼‍♀️ E13.0 woman in tuxedo: medium-light skin tone +1F935 1F3FC 200D 2640 ; minimally-qualified # 🤵🏼‍♀ E13.0 woman in tuxedo: medium-light skin tone +1F935 1F3FD 200D 2640 FE0F ; fully-qualified # 🤵🏽‍♀️ E13.0 woman in tuxedo: medium skin tone +1F935 1F3FD 200D 2640 ; minimally-qualified # 🤵🏽‍♀ E13.0 woman in tuxedo: medium skin tone +1F935 1F3FE 200D 2640 FE0F ; fully-qualified # 🤵🏾‍♀️ E13.0 woman in tuxedo: medium-dark skin tone +1F935 1F3FE 200D 2640 ; minimally-qualified # 🤵🏾‍♀ E13.0 woman in tuxedo: medium-dark skin tone +1F935 1F3FF 200D 2640 FE0F ; fully-qualified # 🤵🏿‍♀️ E13.0 woman in tuxedo: dark skin tone +1F935 1F3FF 200D 2640 ; minimally-qualified # 🤵🏿‍♀ E13.0 woman in tuxedo: dark skin tone +1F470 ; fully-qualified # 👰 E0.6 person with veil +1F470 1F3FB ; fully-qualified # 👰🏻 E1.0 person with veil: light skin tone +1F470 1F3FC ; fully-qualified # 👰🏼 E1.0 person with veil: medium-light skin tone +1F470 1F3FD ; fully-qualified # 👰🏽 E1.0 person with veil: medium skin tone +1F470 1F3FE ; fully-qualified # 👰🏾 E1.0 person with veil: medium-dark skin tone +1F470 1F3FF ; fully-qualified # 👰🏿 E1.0 person with veil: dark skin tone +1F470 200D 2642 FE0F ; fully-qualified # 👰‍♂️ E13.0 man with veil +1F470 200D 2642 ; minimally-qualified # 👰‍♂ E13.0 man with veil +1F470 1F3FB 200D 2642 FE0F ; fully-qualified # 👰🏻‍♂️ E13.0 man with veil: light skin tone +1F470 1F3FB 200D 2642 ; minimally-qualified # 👰🏻‍♂ E13.0 man with veil: light skin tone +1F470 1F3FC 200D 2642 FE0F ; fully-qualified # 👰🏼‍♂️ E13.0 man with veil: medium-light skin tone +1F470 1F3FC 200D 2642 ; minimally-qualified # 👰🏼‍♂ E13.0 man with veil: medium-light skin tone +1F470 1F3FD 200D 2642 FE0F ; fully-qualified # 👰🏽‍♂️ E13.0 man with veil: medium skin tone +1F470 1F3FD 200D 2642 ; minimally-qualified # 👰🏽‍♂ E13.0 man with veil: medium skin tone +1F470 1F3FE 200D 2642 FE0F ; fully-qualified # 👰🏾‍♂️ E13.0 man with veil: medium-dark skin tone +1F470 1F3FE 200D 2642 ; minimally-qualified # 👰🏾‍♂ E13.0 man with veil: medium-dark skin tone +1F470 1F3FF 200D 2642 FE0F ; fully-qualified # 👰🏿‍♂️ E13.0 man with veil: dark skin tone +1F470 1F3FF 200D 2642 ; minimally-qualified # 👰🏿‍♂ E13.0 man with veil: dark skin tone +1F470 200D 2640 FE0F ; fully-qualified # 👰‍♀️ E13.0 woman with veil +1F470 200D 2640 ; minimally-qualified # 👰‍♀ E13.0 woman with veil +1F470 1F3FB 200D 2640 FE0F ; fully-qualified # 👰🏻‍♀️ E13.0 woman with veil: light skin tone +1F470 1F3FB 200D 2640 ; minimally-qualified # 👰🏻‍♀ E13.0 woman with veil: light skin tone +1F470 1F3FC 200D 2640 FE0F ; fully-qualified # 👰🏼‍♀️ E13.0 woman with veil: medium-light skin tone +1F470 1F3FC 200D 2640 ; minimally-qualified # 👰🏼‍♀ E13.0 woman with veil: medium-light skin tone +1F470 1F3FD 200D 2640 FE0F ; fully-qualified # 👰🏽‍♀️ E13.0 woman with veil: medium skin tone +1F470 1F3FD 200D 2640 ; minimally-qualified # 👰🏽‍♀ E13.0 woman with veil: medium skin tone +1F470 1F3FE 200D 2640 FE0F ; fully-qualified # 👰🏾‍♀️ E13.0 woman with veil: medium-dark skin tone +1F470 1F3FE 200D 2640 ; minimally-qualified # 👰🏾‍♀ E13.0 woman with veil: medium-dark skin tone +1F470 1F3FF 200D 2640 FE0F ; fully-qualified # 👰🏿‍♀️ E13.0 woman with veil: dark skin tone +1F470 1F3FF 200D 2640 ; minimally-qualified # 👰🏿‍♀ E13.0 woman with veil: dark skin tone +1F930 ; fully-qualified # 🤰 E3.0 pregnant woman +1F930 1F3FB ; fully-qualified # 🤰🏻 E3.0 pregnant woman: light skin tone +1F930 1F3FC ; fully-qualified # 🤰🏼 E3.0 pregnant woman: medium-light skin tone +1F930 1F3FD ; fully-qualified # 🤰🏽 E3.0 pregnant woman: medium skin tone +1F930 1F3FE ; fully-qualified # 🤰🏾 E3.0 pregnant woman: medium-dark skin tone +1F930 1F3FF ; fully-qualified # 🤰🏿 E3.0 pregnant woman: dark skin tone +1FAC3 ; fully-qualified # 🫃 E14.0 pregnant man +1FAC3 1F3FB ; fully-qualified # 🫃🏻 E14.0 pregnant man: light skin tone +1FAC3 1F3FC ; fully-qualified # 🫃🏼 E14.0 pregnant man: medium-light skin tone +1FAC3 1F3FD ; fully-qualified # 🫃🏽 E14.0 pregnant man: medium skin tone +1FAC3 1F3FE ; fully-qualified # 🫃🏾 E14.0 pregnant man: medium-dark skin tone +1FAC3 1F3FF ; fully-qualified # 🫃🏿 E14.0 pregnant man: dark skin tone +1FAC4 ; fully-qualified # 🫄 E14.0 pregnant person +1FAC4 1F3FB ; fully-qualified # 🫄🏻 E14.0 pregnant person: light skin tone +1FAC4 1F3FC ; fully-qualified # 🫄🏼 E14.0 pregnant person: medium-light skin tone +1FAC4 1F3FD ; fully-qualified # 🫄🏽 E14.0 pregnant person: medium skin tone +1FAC4 1F3FE ; fully-qualified # 🫄🏾 E14.0 pregnant person: medium-dark skin tone +1FAC4 1F3FF ; fully-qualified # 🫄🏿 E14.0 pregnant person: dark skin tone +1F931 ; fully-qualified # 🤱 E5.0 breast-feeding +1F931 1F3FB ; fully-qualified # 🤱🏻 E5.0 breast-feeding: light skin tone +1F931 1F3FC ; fully-qualified # 🤱🏼 E5.0 breast-feeding: medium-light skin tone +1F931 1F3FD ; fully-qualified # 🤱🏽 E5.0 breast-feeding: medium skin tone +1F931 1F3FE ; fully-qualified # 🤱🏾 E5.0 breast-feeding: medium-dark skin tone +1F931 1F3FF ; fully-qualified # 🤱🏿 E5.0 breast-feeding: dark skin tone +1F469 200D 1F37C ; fully-qualified # 👩‍🍼 E13.0 woman feeding baby +1F469 1F3FB 200D 1F37C ; fully-qualified # 👩🏻‍🍼 E13.0 woman feeding baby: light skin tone +1F469 1F3FC 200D 1F37C ; fully-qualified # 👩🏼‍🍼 E13.0 woman feeding baby: medium-light skin tone +1F469 1F3FD 200D 1F37C ; fully-qualified # 👩🏽‍🍼 E13.0 woman feeding baby: medium skin tone +1F469 1F3FE 200D 1F37C ; fully-qualified # 👩🏾‍🍼 E13.0 woman feeding baby: medium-dark skin tone +1F469 1F3FF 200D 1F37C ; fully-qualified # 👩🏿‍🍼 E13.0 woman feeding baby: dark skin tone +1F468 200D 1F37C ; fully-qualified # 👨‍🍼 E13.0 man feeding baby +1F468 1F3FB 200D 1F37C ; fully-qualified # 👨🏻‍🍼 E13.0 man feeding baby: light skin tone +1F468 1F3FC 200D 1F37C ; fully-qualified # 👨🏼‍🍼 E13.0 man feeding baby: medium-light skin tone +1F468 1F3FD 200D 1F37C ; fully-qualified # 👨🏽‍🍼 E13.0 man feeding baby: medium skin tone +1F468 1F3FE 200D 1F37C ; fully-qualified # 👨🏾‍🍼 E13.0 man feeding baby: medium-dark skin tone +1F468 1F3FF 200D 1F37C ; fully-qualified # 👨🏿‍🍼 E13.0 man feeding baby: dark skin tone +1F9D1 200D 1F37C ; fully-qualified # 🧑‍🍼 E13.0 person feeding baby +1F9D1 1F3FB 200D 1F37C ; fully-qualified # 🧑🏻‍🍼 E13.0 person feeding baby: light skin tone +1F9D1 1F3FC 200D 1F37C ; fully-qualified # 🧑🏼‍🍼 E13.0 person feeding baby: medium-light skin tone +1F9D1 1F3FD 200D 1F37C ; fully-qualified # 🧑🏽‍🍼 E13.0 person feeding baby: medium skin tone +1F9D1 1F3FE 200D 1F37C ; fully-qualified # 🧑🏾‍🍼 E13.0 person feeding baby: medium-dark skin tone +1F9D1 1F3FF 200D 1F37C ; fully-qualified # 🧑🏿‍🍼 E13.0 person feeding baby: dark skin tone + +# subgroup: person-fantasy +1F47C ; fully-qualified # 👼 E0.6 baby angel +1F47C 1F3FB ; fully-qualified # 👼🏻 E1.0 baby angel: light skin tone +1F47C 1F3FC ; fully-qualified # 👼🏼 E1.0 baby angel: medium-light skin tone +1F47C 1F3FD ; fully-qualified # 👼🏽 E1.0 baby angel: medium skin tone +1F47C 1F3FE ; fully-qualified # 👼🏾 E1.0 baby angel: medium-dark skin tone +1F47C 1F3FF ; fully-qualified # 👼🏿 E1.0 baby angel: dark skin tone +1F385 ; fully-qualified # 🎅 E0.6 Santa Claus +1F385 1F3FB ; fully-qualified # 🎅🏻 E1.0 Santa Claus: light skin tone +1F385 1F3FC ; fully-qualified # 🎅🏼 E1.0 Santa Claus: medium-light skin tone +1F385 1F3FD ; fully-qualified # 🎅🏽 E1.0 Santa Claus: medium skin tone +1F385 1F3FE ; fully-qualified # 🎅🏾 E1.0 Santa Claus: medium-dark skin tone +1F385 1F3FF ; fully-qualified # 🎅🏿 E1.0 Santa Claus: dark skin tone +1F936 ; fully-qualified # 🤶 E3.0 Mrs. Claus +1F936 1F3FB ; fully-qualified # 🤶🏻 E3.0 Mrs. Claus: light skin tone +1F936 1F3FC ; fully-qualified # 🤶🏼 E3.0 Mrs. Claus: medium-light skin tone +1F936 1F3FD ; fully-qualified # 🤶🏽 E3.0 Mrs. Claus: medium skin tone +1F936 1F3FE ; fully-qualified # 🤶🏾 E3.0 Mrs. Claus: medium-dark skin tone +1F936 1F3FF ; fully-qualified # 🤶🏿 E3.0 Mrs. Claus: dark skin tone +1F9D1 200D 1F384 ; fully-qualified # 🧑‍🎄 E13.0 mx claus +1F9D1 1F3FB 200D 1F384 ; fully-qualified # 🧑🏻‍🎄 E13.0 mx claus: light skin tone +1F9D1 1F3FC 200D 1F384 ; fully-qualified # 🧑🏼‍🎄 E13.0 mx claus: medium-light skin tone +1F9D1 1F3FD 200D 1F384 ; fully-qualified # 🧑🏽‍🎄 E13.0 mx claus: medium skin tone +1F9D1 1F3FE 200D 1F384 ; fully-qualified # 🧑🏾‍🎄 E13.0 mx claus: medium-dark skin tone +1F9D1 1F3FF 200D 1F384 ; fully-qualified # 🧑🏿‍🎄 E13.0 mx claus: dark skin tone +1F9B8 ; fully-qualified # 🦸 E11.0 superhero +1F9B8 1F3FB ; fully-qualified # 🦸🏻 E11.0 superhero: light skin tone +1F9B8 1F3FC ; fully-qualified # 🦸🏼 E11.0 superhero: medium-light skin tone +1F9B8 1F3FD ; fully-qualified # 🦸🏽 E11.0 superhero: medium skin tone +1F9B8 1F3FE ; fully-qualified # 🦸🏾 E11.0 superhero: medium-dark skin tone +1F9B8 1F3FF ; fully-qualified # 🦸🏿 E11.0 superhero: dark skin tone +1F9B8 200D 2642 FE0F ; fully-qualified # 🦸‍♂️ E11.0 man superhero +1F9B8 200D 2642 ; minimally-qualified # 🦸‍♂ E11.0 man superhero +1F9B8 1F3FB 200D 2642 FE0F ; fully-qualified # 🦸🏻‍♂️ E11.0 man superhero: light skin tone +1F9B8 1F3FB 200D 2642 ; minimally-qualified # 🦸🏻‍♂ E11.0 man superhero: light skin tone +1F9B8 1F3FC 200D 2642 FE0F ; fully-qualified # 🦸🏼‍♂️ E11.0 man superhero: medium-light skin tone +1F9B8 1F3FC 200D 2642 ; minimally-qualified # 🦸🏼‍♂ E11.0 man superhero: medium-light skin tone +1F9B8 1F3FD 200D 2642 FE0F ; fully-qualified # 🦸🏽‍♂️ E11.0 man superhero: medium skin tone +1F9B8 1F3FD 200D 2642 ; minimally-qualified # 🦸🏽‍♂ E11.0 man superhero: medium skin tone +1F9B8 1F3FE 200D 2642 FE0F ; fully-qualified # 🦸🏾‍♂️ E11.0 man superhero: medium-dark skin tone +1F9B8 1F3FE 200D 2642 ; minimally-qualified # 🦸🏾‍♂ E11.0 man superhero: medium-dark skin tone +1F9B8 1F3FF 200D 2642 FE0F ; fully-qualified # 🦸🏿‍♂️ E11.0 man superhero: dark skin tone +1F9B8 1F3FF 200D 2642 ; minimally-qualified # 🦸🏿‍♂ E11.0 man superhero: dark skin tone +1F9B8 200D 2640 FE0F ; fully-qualified # 🦸‍♀️ E11.0 woman superhero +1F9B8 200D 2640 ; minimally-qualified # 🦸‍♀ E11.0 woman superhero +1F9B8 1F3FB 200D 2640 FE0F ; fully-qualified # 🦸🏻‍♀️ E11.0 woman superhero: light skin tone +1F9B8 1F3FB 200D 2640 ; minimally-qualified # 🦸🏻‍♀ E11.0 woman superhero: light skin tone +1F9B8 1F3FC 200D 2640 FE0F ; fully-qualified # 🦸🏼‍♀️ E11.0 woman superhero: medium-light skin tone +1F9B8 1F3FC 200D 2640 ; minimally-qualified # 🦸🏼‍♀ E11.0 woman superhero: medium-light skin tone +1F9B8 1F3FD 200D 2640 FE0F ; fully-qualified # 🦸🏽‍♀️ E11.0 woman superhero: medium skin tone +1F9B8 1F3FD 200D 2640 ; minimally-qualified # 🦸🏽‍♀ E11.0 woman superhero: medium skin tone +1F9B8 1F3FE 200D 2640 FE0F ; fully-qualified # 🦸🏾‍♀️ E11.0 woman superhero: medium-dark skin tone +1F9B8 1F3FE 200D 2640 ; minimally-qualified # 🦸🏾‍♀ E11.0 woman superhero: medium-dark skin tone +1F9B8 1F3FF 200D 2640 FE0F ; fully-qualified # 🦸🏿‍♀️ E11.0 woman superhero: dark skin tone +1F9B8 1F3FF 200D 2640 ; minimally-qualified # 🦸🏿‍♀ E11.0 woman superhero: dark skin tone +1F9B9 ; fully-qualified # 🦹 E11.0 supervillain +1F9B9 1F3FB ; fully-qualified # 🦹🏻 E11.0 supervillain: light skin tone +1F9B9 1F3FC ; fully-qualified # 🦹🏼 E11.0 supervillain: medium-light skin tone +1F9B9 1F3FD ; fully-qualified # 🦹🏽 E11.0 supervillain: medium skin tone +1F9B9 1F3FE ; fully-qualified # 🦹🏾 E11.0 supervillain: medium-dark skin tone +1F9B9 1F3FF ; fully-qualified # 🦹🏿 E11.0 supervillain: dark skin tone +1F9B9 200D 2642 FE0F ; fully-qualified # 🦹‍♂️ E11.0 man supervillain +1F9B9 200D 2642 ; minimally-qualified # 🦹‍♂ E11.0 man supervillain +1F9B9 1F3FB 200D 2642 FE0F ; fully-qualified # 🦹🏻‍♂️ E11.0 man supervillain: light skin tone +1F9B9 1F3FB 200D 2642 ; minimally-qualified # 🦹🏻‍♂ E11.0 man supervillain: light skin tone +1F9B9 1F3FC 200D 2642 FE0F ; fully-qualified # 🦹🏼‍♂️ E11.0 man supervillain: medium-light skin tone +1F9B9 1F3FC 200D 2642 ; minimally-qualified # 🦹🏼‍♂ E11.0 man supervillain: medium-light skin tone +1F9B9 1F3FD 200D 2642 FE0F ; fully-qualified # 🦹🏽‍♂️ E11.0 man supervillain: medium skin tone +1F9B9 1F3FD 200D 2642 ; minimally-qualified # 🦹🏽‍♂ E11.0 man supervillain: medium skin tone +1F9B9 1F3FE 200D 2642 FE0F ; fully-qualified # 🦹🏾‍♂️ E11.0 man supervillain: medium-dark skin tone +1F9B9 1F3FE 200D 2642 ; minimally-qualified # 🦹🏾‍♂ E11.0 man supervillain: medium-dark skin tone +1F9B9 1F3FF 200D 2642 FE0F ; fully-qualified # 🦹🏿‍♂️ E11.0 man supervillain: dark skin tone +1F9B9 1F3FF 200D 2642 ; minimally-qualified # 🦹🏿‍♂ E11.0 man supervillain: dark skin tone +1F9B9 200D 2640 FE0F ; fully-qualified # 🦹‍♀️ E11.0 woman supervillain +1F9B9 200D 2640 ; minimally-qualified # 🦹‍♀ E11.0 woman supervillain +1F9B9 1F3FB 200D 2640 FE0F ; fully-qualified # 🦹🏻‍♀️ E11.0 woman supervillain: light skin tone +1F9B9 1F3FB 200D 2640 ; minimally-qualified # 🦹🏻‍♀ E11.0 woman supervillain: light skin tone +1F9B9 1F3FC 200D 2640 FE0F ; fully-qualified # 🦹🏼‍♀️ E11.0 woman supervillain: medium-light skin tone +1F9B9 1F3FC 200D 2640 ; minimally-qualified # 🦹🏼‍♀ E11.0 woman supervillain: medium-light skin tone +1F9B9 1F3FD 200D 2640 FE0F ; fully-qualified # 🦹🏽‍♀️ E11.0 woman supervillain: medium skin tone +1F9B9 1F3FD 200D 2640 ; minimally-qualified # 🦹🏽‍♀ E11.0 woman supervillain: medium skin tone +1F9B9 1F3FE 200D 2640 FE0F ; fully-qualified # 🦹🏾‍♀️ E11.0 woman supervillain: medium-dark skin tone +1F9B9 1F3FE 200D 2640 ; minimally-qualified # 🦹🏾‍♀ E11.0 woman supervillain: medium-dark skin tone +1F9B9 1F3FF 200D 2640 FE0F ; fully-qualified # 🦹🏿‍♀️ E11.0 woman supervillain: dark skin tone +1F9B9 1F3FF 200D 2640 ; minimally-qualified # 🦹🏿‍♀ E11.0 woman supervillain: dark skin tone +1F9D9 ; fully-qualified # 🧙 E5.0 mage +1F9D9 1F3FB ; fully-qualified # 🧙🏻 E5.0 mage: light skin tone +1F9D9 1F3FC ; fully-qualified # 🧙🏼 E5.0 mage: medium-light skin tone +1F9D9 1F3FD ; fully-qualified # 🧙🏽 E5.0 mage: medium skin tone +1F9D9 1F3FE ; fully-qualified # 🧙🏾 E5.0 mage: medium-dark skin tone +1F9D9 1F3FF ; fully-qualified # 🧙🏿 E5.0 mage: dark skin tone +1F9D9 200D 2642 FE0F ; fully-qualified # 🧙‍♂️ E5.0 man mage +1F9D9 200D 2642 ; minimally-qualified # 🧙‍♂ E5.0 man mage +1F9D9 1F3FB 200D 2642 FE0F ; fully-qualified # 🧙🏻‍♂️ E5.0 man mage: light skin tone +1F9D9 1F3FB 200D 2642 ; minimally-qualified # 🧙🏻‍♂ E5.0 man mage: light skin tone +1F9D9 1F3FC 200D 2642 FE0F ; fully-qualified # 🧙🏼‍♂️ E5.0 man mage: medium-light skin tone +1F9D9 1F3FC 200D 2642 ; minimally-qualified # 🧙🏼‍♂ E5.0 man mage: medium-light skin tone +1F9D9 1F3FD 200D 2642 FE0F ; fully-qualified # 🧙🏽‍♂️ E5.0 man mage: medium skin tone +1F9D9 1F3FD 200D 2642 ; minimally-qualified # 🧙🏽‍♂ E5.0 man mage: medium skin tone +1F9D9 1F3FE 200D 2642 FE0F ; fully-qualified # 🧙🏾‍♂️ E5.0 man mage: medium-dark skin tone +1F9D9 1F3FE 200D 2642 ; minimally-qualified # 🧙🏾‍♂ E5.0 man mage: medium-dark skin tone +1F9D9 1F3FF 200D 2642 FE0F ; fully-qualified # 🧙🏿‍♂️ E5.0 man mage: dark skin tone +1F9D9 1F3FF 200D 2642 ; minimally-qualified # 🧙🏿‍♂ E5.0 man mage: dark skin tone +1F9D9 200D 2640 FE0F ; fully-qualified # 🧙‍♀️ E5.0 woman mage +1F9D9 200D 2640 ; minimally-qualified # 🧙‍♀ E5.0 woman mage +1F9D9 1F3FB 200D 2640 FE0F ; fully-qualified # 🧙🏻‍♀️ E5.0 woman mage: light skin tone +1F9D9 1F3FB 200D 2640 ; minimally-qualified # 🧙🏻‍♀ E5.0 woman mage: light skin tone +1F9D9 1F3FC 200D 2640 FE0F ; fully-qualified # 🧙🏼‍♀️ E5.0 woman mage: medium-light skin tone +1F9D9 1F3FC 200D 2640 ; minimally-qualified # 🧙🏼‍♀ E5.0 woman mage: medium-light skin tone +1F9D9 1F3FD 200D 2640 FE0F ; fully-qualified # 🧙🏽‍♀️ E5.0 woman mage: medium skin tone +1F9D9 1F3FD 200D 2640 ; minimally-qualified # 🧙🏽‍♀ E5.0 woman mage: medium skin tone +1F9D9 1F3FE 200D 2640 FE0F ; fully-qualified # 🧙🏾‍♀️ E5.0 woman mage: medium-dark skin tone +1F9D9 1F3FE 200D 2640 ; minimally-qualified # 🧙🏾‍♀ E5.0 woman mage: medium-dark skin tone +1F9D9 1F3FF 200D 2640 FE0F ; fully-qualified # 🧙🏿‍♀️ E5.0 woman mage: dark skin tone +1F9D9 1F3FF 200D 2640 ; minimally-qualified # 🧙🏿‍♀ E5.0 woman mage: dark skin tone +1F9DA ; fully-qualified # 🧚 E5.0 fairy +1F9DA 1F3FB ; fully-qualified # 🧚🏻 E5.0 fairy: light skin tone +1F9DA 1F3FC ; fully-qualified # 🧚🏼 E5.0 fairy: medium-light skin tone +1F9DA 1F3FD ; fully-qualified # 🧚🏽 E5.0 fairy: medium skin tone +1F9DA 1F3FE ; fully-qualified # 🧚🏾 E5.0 fairy: medium-dark skin tone +1F9DA 1F3FF ; fully-qualified # 🧚🏿 E5.0 fairy: dark skin tone +1F9DA 200D 2642 FE0F ; fully-qualified # 🧚‍♂️ E5.0 man fairy +1F9DA 200D 2642 ; minimally-qualified # 🧚‍♂ E5.0 man fairy +1F9DA 1F3FB 200D 2642 FE0F ; fully-qualified # 🧚🏻‍♂️ E5.0 man fairy: light skin tone +1F9DA 1F3FB 200D 2642 ; minimally-qualified # 🧚🏻‍♂ E5.0 man fairy: light skin tone +1F9DA 1F3FC 200D 2642 FE0F ; fully-qualified # 🧚🏼‍♂️ E5.0 man fairy: medium-light skin tone +1F9DA 1F3FC 200D 2642 ; minimally-qualified # 🧚🏼‍♂ E5.0 man fairy: medium-light skin tone +1F9DA 1F3FD 200D 2642 FE0F ; fully-qualified # 🧚🏽‍♂️ E5.0 man fairy: medium skin tone +1F9DA 1F3FD 200D 2642 ; minimally-qualified # 🧚🏽‍♂ E5.0 man fairy: medium skin tone +1F9DA 1F3FE 200D 2642 FE0F ; fully-qualified # 🧚🏾‍♂️ E5.0 man fairy: medium-dark skin tone +1F9DA 1F3FE 200D 2642 ; minimally-qualified # 🧚🏾‍♂ E5.0 man fairy: medium-dark skin tone +1F9DA 1F3FF 200D 2642 FE0F ; fully-qualified # 🧚🏿‍♂️ E5.0 man fairy: dark skin tone +1F9DA 1F3FF 200D 2642 ; minimally-qualified # 🧚🏿‍♂ E5.0 man fairy: dark skin tone +1F9DA 200D 2640 FE0F ; fully-qualified # 🧚‍♀️ E5.0 woman fairy +1F9DA 200D 2640 ; minimally-qualified # 🧚‍♀ E5.0 woman fairy +1F9DA 1F3FB 200D 2640 FE0F ; fully-qualified # 🧚🏻‍♀️ E5.0 woman fairy: light skin tone +1F9DA 1F3FB 200D 2640 ; minimally-qualified # 🧚🏻‍♀ E5.0 woman fairy: light skin tone +1F9DA 1F3FC 200D 2640 FE0F ; fully-qualified # 🧚🏼‍♀️ E5.0 woman fairy: medium-light skin tone +1F9DA 1F3FC 200D 2640 ; minimally-qualified # 🧚🏼‍♀ E5.0 woman fairy: medium-light skin tone +1F9DA 1F3FD 200D 2640 FE0F ; fully-qualified # 🧚🏽‍♀️ E5.0 woman fairy: medium skin tone +1F9DA 1F3FD 200D 2640 ; minimally-qualified # 🧚🏽‍♀ E5.0 woman fairy: medium skin tone +1F9DA 1F3FE 200D 2640 FE0F ; fully-qualified # 🧚🏾‍♀️ E5.0 woman fairy: medium-dark skin tone +1F9DA 1F3FE 200D 2640 ; minimally-qualified # 🧚🏾‍♀ E5.0 woman fairy: medium-dark skin tone +1F9DA 1F3FF 200D 2640 FE0F ; fully-qualified # 🧚🏿‍♀️ E5.0 woman fairy: dark skin tone +1F9DA 1F3FF 200D 2640 ; minimally-qualified # 🧚🏿‍♀ E5.0 woman fairy: dark skin tone +1F9DB ; fully-qualified # 🧛 E5.0 vampire +1F9DB 1F3FB ; fully-qualified # 🧛🏻 E5.0 vampire: light skin tone +1F9DB 1F3FC ; fully-qualified # 🧛🏼 E5.0 vampire: medium-light skin tone +1F9DB 1F3FD ; fully-qualified # 🧛🏽 E5.0 vampire: medium skin tone +1F9DB 1F3FE ; fully-qualified # 🧛🏾 E5.0 vampire: medium-dark skin tone +1F9DB 1F3FF ; fully-qualified # 🧛🏿 E5.0 vampire: dark skin tone +1F9DB 200D 2642 FE0F ; fully-qualified # 🧛‍♂️ E5.0 man vampire +1F9DB 200D 2642 ; minimally-qualified # 🧛‍♂ E5.0 man vampire +1F9DB 1F3FB 200D 2642 FE0F ; fully-qualified # 🧛🏻‍♂️ E5.0 man vampire: light skin tone +1F9DB 1F3FB 200D 2642 ; minimally-qualified # 🧛🏻‍♂ E5.0 man vampire: light skin tone +1F9DB 1F3FC 200D 2642 FE0F ; fully-qualified # 🧛🏼‍♂️ E5.0 man vampire: medium-light skin tone +1F9DB 1F3FC 200D 2642 ; minimally-qualified # 🧛🏼‍♂ E5.0 man vampire: medium-light skin tone +1F9DB 1F3FD 200D 2642 FE0F ; fully-qualified # 🧛🏽‍♂️ E5.0 man vampire: medium skin tone +1F9DB 1F3FD 200D 2642 ; minimally-qualified # 🧛🏽‍♂ E5.0 man vampire: medium skin tone +1F9DB 1F3FE 200D 2642 FE0F ; fully-qualified # 🧛🏾‍♂️ E5.0 man vampire: medium-dark skin tone +1F9DB 1F3FE 200D 2642 ; minimally-qualified # 🧛🏾‍♂ E5.0 man vampire: medium-dark skin tone +1F9DB 1F3FF 200D 2642 FE0F ; fully-qualified # 🧛🏿‍♂️ E5.0 man vampire: dark skin tone +1F9DB 1F3FF 200D 2642 ; minimally-qualified # 🧛🏿‍♂ E5.0 man vampire: dark skin tone +1F9DB 200D 2640 FE0F ; fully-qualified # 🧛‍♀️ E5.0 woman vampire +1F9DB 200D 2640 ; minimally-qualified # 🧛‍♀ E5.0 woman vampire +1F9DB 1F3FB 200D 2640 FE0F ; fully-qualified # 🧛🏻‍♀️ E5.0 woman vampire: light skin tone +1F9DB 1F3FB 200D 2640 ; minimally-qualified # 🧛🏻‍♀ E5.0 woman vampire: light skin tone +1F9DB 1F3FC 200D 2640 FE0F ; fully-qualified # 🧛🏼‍♀️ E5.0 woman vampire: medium-light skin tone +1F9DB 1F3FC 200D 2640 ; minimally-qualified # 🧛🏼‍♀ E5.0 woman vampire: medium-light skin tone +1F9DB 1F3FD 200D 2640 FE0F ; fully-qualified # 🧛🏽‍♀️ E5.0 woman vampire: medium skin tone +1F9DB 1F3FD 200D 2640 ; minimally-qualified # 🧛🏽‍♀ E5.0 woman vampire: medium skin tone +1F9DB 1F3FE 200D 2640 FE0F ; fully-qualified # 🧛🏾‍♀️ E5.0 woman vampire: medium-dark skin tone +1F9DB 1F3FE 200D 2640 ; minimally-qualified # 🧛🏾‍♀ E5.0 woman vampire: medium-dark skin tone +1F9DB 1F3FF 200D 2640 FE0F ; fully-qualified # 🧛🏿‍♀️ E5.0 woman vampire: dark skin tone +1F9DB 1F3FF 200D 2640 ; minimally-qualified # 🧛🏿‍♀ E5.0 woman vampire: dark skin tone +1F9DC ; fully-qualified # 🧜 E5.0 merperson +1F9DC 1F3FB ; fully-qualified # 🧜🏻 E5.0 merperson: light skin tone +1F9DC 1F3FC ; fully-qualified # 🧜🏼 E5.0 merperson: medium-light skin tone +1F9DC 1F3FD ; fully-qualified # 🧜🏽 E5.0 merperson: medium skin tone +1F9DC 1F3FE ; fully-qualified # 🧜🏾 E5.0 merperson: medium-dark skin tone +1F9DC 1F3FF ; fully-qualified # 🧜🏿 E5.0 merperson: dark skin tone +1F9DC 200D 2642 FE0F ; fully-qualified # 🧜‍♂️ E5.0 merman +1F9DC 200D 2642 ; minimally-qualified # 🧜‍♂ E5.0 merman +1F9DC 1F3FB 200D 2642 FE0F ; fully-qualified # 🧜🏻‍♂️ E5.0 merman: light skin tone +1F9DC 1F3FB 200D 2642 ; minimally-qualified # 🧜🏻‍♂ E5.0 merman: light skin tone +1F9DC 1F3FC 200D 2642 FE0F ; fully-qualified # 🧜🏼‍♂️ E5.0 merman: medium-light skin tone +1F9DC 1F3FC 200D 2642 ; minimally-qualified # 🧜🏼‍♂ E5.0 merman: medium-light skin tone +1F9DC 1F3FD 200D 2642 FE0F ; fully-qualified # 🧜🏽‍♂️ E5.0 merman: medium skin tone +1F9DC 1F3FD 200D 2642 ; minimally-qualified # 🧜🏽‍♂ E5.0 merman: medium skin tone +1F9DC 1F3FE 200D 2642 FE0F ; fully-qualified # 🧜🏾‍♂️ E5.0 merman: medium-dark skin tone +1F9DC 1F3FE 200D 2642 ; minimally-qualified # 🧜🏾‍♂ E5.0 merman: medium-dark skin tone +1F9DC 1F3FF 200D 2642 FE0F ; fully-qualified # 🧜🏿‍♂️ E5.0 merman: dark skin tone +1F9DC 1F3FF 200D 2642 ; minimally-qualified # 🧜🏿‍♂ E5.0 merman: dark skin tone +1F9DC 200D 2640 FE0F ; fully-qualified # 🧜‍♀️ E5.0 mermaid +1F9DC 200D 2640 ; minimally-qualified # 🧜‍♀ E5.0 mermaid +1F9DC 1F3FB 200D 2640 FE0F ; fully-qualified # 🧜🏻‍♀️ E5.0 mermaid: light skin tone +1F9DC 1F3FB 200D 2640 ; minimally-qualified # 🧜🏻‍♀ E5.0 mermaid: light skin tone +1F9DC 1F3FC 200D 2640 FE0F ; fully-qualified # 🧜🏼‍♀️ E5.0 mermaid: medium-light skin tone +1F9DC 1F3FC 200D 2640 ; minimally-qualified # 🧜🏼‍♀ E5.0 mermaid: medium-light skin tone +1F9DC 1F3FD 200D 2640 FE0F ; fully-qualified # 🧜🏽‍♀️ E5.0 mermaid: medium skin tone +1F9DC 1F3FD 200D 2640 ; minimally-qualified # 🧜🏽‍♀ E5.0 mermaid: medium skin tone +1F9DC 1F3FE 200D 2640 FE0F ; fully-qualified # 🧜🏾‍♀️ E5.0 mermaid: medium-dark skin tone +1F9DC 1F3FE 200D 2640 ; minimally-qualified # 🧜🏾‍♀ E5.0 mermaid: medium-dark skin tone +1F9DC 1F3FF 200D 2640 FE0F ; fully-qualified # 🧜🏿‍♀️ E5.0 mermaid: dark skin tone +1F9DC 1F3FF 200D 2640 ; minimally-qualified # 🧜🏿‍♀ E5.0 mermaid: dark skin tone +1F9DD ; fully-qualified # 🧝 E5.0 elf +1F9DD 1F3FB ; fully-qualified # 🧝🏻 E5.0 elf: light skin tone +1F9DD 1F3FC ; fully-qualified # 🧝🏼 E5.0 elf: medium-light skin tone +1F9DD 1F3FD ; fully-qualified # 🧝🏽 E5.0 elf: medium skin tone +1F9DD 1F3FE ; fully-qualified # 🧝🏾 E5.0 elf: medium-dark skin tone +1F9DD 1F3FF ; fully-qualified # 🧝🏿 E5.0 elf: dark skin tone +1F9DD 200D 2642 FE0F ; fully-qualified # 🧝‍♂️ E5.0 man elf +1F9DD 200D 2642 ; minimally-qualified # 🧝‍♂ E5.0 man elf +1F9DD 1F3FB 200D 2642 FE0F ; fully-qualified # 🧝🏻‍♂️ E5.0 man elf: light skin tone +1F9DD 1F3FB 200D 2642 ; minimally-qualified # 🧝🏻‍♂ E5.0 man elf: light skin tone +1F9DD 1F3FC 200D 2642 FE0F ; fully-qualified # 🧝🏼‍♂️ E5.0 man elf: medium-light skin tone +1F9DD 1F3FC 200D 2642 ; minimally-qualified # 🧝🏼‍♂ E5.0 man elf: medium-light skin tone +1F9DD 1F3FD 200D 2642 FE0F ; fully-qualified # 🧝🏽‍♂️ E5.0 man elf: medium skin tone +1F9DD 1F3FD 200D 2642 ; minimally-qualified # 🧝🏽‍♂ E5.0 man elf: medium skin tone +1F9DD 1F3FE 200D 2642 FE0F ; fully-qualified # 🧝🏾‍♂️ E5.0 man elf: medium-dark skin tone +1F9DD 1F3FE 200D 2642 ; minimally-qualified # 🧝🏾‍♂ E5.0 man elf: medium-dark skin tone +1F9DD 1F3FF 200D 2642 FE0F ; fully-qualified # 🧝🏿‍♂️ E5.0 man elf: dark skin tone +1F9DD 1F3FF 200D 2642 ; minimally-qualified # 🧝🏿‍♂ E5.0 man elf: dark skin tone +1F9DD 200D 2640 FE0F ; fully-qualified # 🧝‍♀️ E5.0 woman elf +1F9DD 200D 2640 ; minimally-qualified # 🧝‍♀ E5.0 woman elf +1F9DD 1F3FB 200D 2640 FE0F ; fully-qualified # 🧝🏻‍♀️ E5.0 woman elf: light skin tone +1F9DD 1F3FB 200D 2640 ; minimally-qualified # 🧝🏻‍♀ E5.0 woman elf: light skin tone +1F9DD 1F3FC 200D 2640 FE0F ; fully-qualified # 🧝🏼‍♀️ E5.0 woman elf: medium-light skin tone +1F9DD 1F3FC 200D 2640 ; minimally-qualified # 🧝🏼‍♀ E5.0 woman elf: medium-light skin tone +1F9DD 1F3FD 200D 2640 FE0F ; fully-qualified # 🧝🏽‍♀️ E5.0 woman elf: medium skin tone +1F9DD 1F3FD 200D 2640 ; minimally-qualified # 🧝🏽‍♀ E5.0 woman elf: medium skin tone +1F9DD 1F3FE 200D 2640 FE0F ; fully-qualified # 🧝🏾‍♀️ E5.0 woman elf: medium-dark skin tone +1F9DD 1F3FE 200D 2640 ; minimally-qualified # 🧝🏾‍♀ E5.0 woman elf: medium-dark skin tone +1F9DD 1F3FF 200D 2640 FE0F ; fully-qualified # 🧝🏿‍♀️ E5.0 woman elf: dark skin tone +1F9DD 1F3FF 200D 2640 ; minimally-qualified # 🧝🏿‍♀ E5.0 woman elf: dark skin tone +1F9DE ; fully-qualified # 🧞 E5.0 genie +1F9DE 200D 2642 FE0F ; fully-qualified # 🧞‍♂️ E5.0 man genie +1F9DE 200D 2642 ; minimally-qualified # 🧞‍♂ E5.0 man genie +1F9DE 200D 2640 FE0F ; fully-qualified # 🧞‍♀️ E5.0 woman genie +1F9DE 200D 2640 ; minimally-qualified # 🧞‍♀ E5.0 woman genie +1F9DF ; fully-qualified # 🧟 E5.0 zombie +1F9DF 200D 2642 FE0F ; fully-qualified # 🧟‍♂️ E5.0 man zombie +1F9DF 200D 2642 ; minimally-qualified # 🧟‍♂ E5.0 man zombie +1F9DF 200D 2640 FE0F ; fully-qualified # 🧟‍♀️ E5.0 woman zombie +1F9DF 200D 2640 ; minimally-qualified # 🧟‍♀ E5.0 woman zombie +1F9CC ; fully-qualified # 🧌 E14.0 troll + +# subgroup: person-activity +1F486 ; fully-qualified # 💆 E0.6 person getting massage +1F486 1F3FB ; fully-qualified # 💆🏻 E1.0 person getting massage: light skin tone +1F486 1F3FC ; fully-qualified # 💆🏼 E1.0 person getting massage: medium-light skin tone +1F486 1F3FD ; fully-qualified # 💆🏽 E1.0 person getting massage: medium skin tone +1F486 1F3FE ; fully-qualified # 💆🏾 E1.0 person getting massage: medium-dark skin tone +1F486 1F3FF ; fully-qualified # 💆🏿 E1.0 person getting massage: dark skin tone +1F486 200D 2642 FE0F ; fully-qualified # 💆‍♂️ E4.0 man getting massage +1F486 200D 2642 ; minimally-qualified # 💆‍♂ E4.0 man getting massage +1F486 1F3FB 200D 2642 FE0F ; fully-qualified # 💆🏻‍♂️ E4.0 man getting massage: light skin tone +1F486 1F3FB 200D 2642 ; minimally-qualified # 💆🏻‍♂ E4.0 man getting massage: light skin tone +1F486 1F3FC 200D 2642 FE0F ; fully-qualified # 💆🏼‍♂️ E4.0 man getting massage: medium-light skin tone +1F486 1F3FC 200D 2642 ; minimally-qualified # 💆🏼‍♂ E4.0 man getting massage: medium-light skin tone +1F486 1F3FD 200D 2642 FE0F ; fully-qualified # 💆🏽‍♂️ E4.0 man getting massage: medium skin tone +1F486 1F3FD 200D 2642 ; minimally-qualified # 💆🏽‍♂ E4.0 man getting massage: medium skin tone +1F486 1F3FE 200D 2642 FE0F ; fully-qualified # 💆🏾‍♂️ E4.0 man getting massage: medium-dark skin tone +1F486 1F3FE 200D 2642 ; minimally-qualified # 💆🏾‍♂ E4.0 man getting massage: medium-dark skin tone +1F486 1F3FF 200D 2642 FE0F ; fully-qualified # 💆🏿‍♂️ E4.0 man getting massage: dark skin tone +1F486 1F3FF 200D 2642 ; minimally-qualified # 💆🏿‍♂ E4.0 man getting massage: dark skin tone +1F486 200D 2640 FE0F ; fully-qualified # 💆‍♀️ E4.0 woman getting massage +1F486 200D 2640 ; minimally-qualified # 💆‍♀ E4.0 woman getting massage +1F486 1F3FB 200D 2640 FE0F ; fully-qualified # 💆🏻‍♀️ E4.0 woman getting massage: light skin tone +1F486 1F3FB 200D 2640 ; minimally-qualified # 💆🏻‍♀ E4.0 woman getting massage: light skin tone +1F486 1F3FC 200D 2640 FE0F ; fully-qualified # 💆🏼‍♀️ E4.0 woman getting massage: medium-light skin tone +1F486 1F3FC 200D 2640 ; minimally-qualified # 💆🏼‍♀ E4.0 woman getting massage: medium-light skin tone +1F486 1F3FD 200D 2640 FE0F ; fully-qualified # 💆🏽‍♀️ E4.0 woman getting massage: medium skin tone +1F486 1F3FD 200D 2640 ; minimally-qualified # 💆🏽‍♀ E4.0 woman getting massage: medium skin tone +1F486 1F3FE 200D 2640 FE0F ; fully-qualified # 💆🏾‍♀️ E4.0 woman getting massage: medium-dark skin tone +1F486 1F3FE 200D 2640 ; minimally-qualified # 💆🏾‍♀ E4.0 woman getting massage: medium-dark skin tone +1F486 1F3FF 200D 2640 FE0F ; fully-qualified # 💆🏿‍♀️ E4.0 woman getting massage: dark skin tone +1F486 1F3FF 200D 2640 ; minimally-qualified # 💆🏿‍♀ E4.0 woman getting massage: dark skin tone +1F487 ; fully-qualified # 💇 E0.6 person getting haircut +1F487 1F3FB ; fully-qualified # 💇🏻 E1.0 person getting haircut: light skin tone +1F487 1F3FC ; fully-qualified # 💇🏼 E1.0 person getting haircut: medium-light skin tone +1F487 1F3FD ; fully-qualified # 💇🏽 E1.0 person getting haircut: medium skin tone +1F487 1F3FE ; fully-qualified # 💇🏾 E1.0 person getting haircut: medium-dark skin tone +1F487 1F3FF ; fully-qualified # 💇🏿 E1.0 person getting haircut: dark skin tone +1F487 200D 2642 FE0F ; fully-qualified # 💇‍♂️ E4.0 man getting haircut +1F487 200D 2642 ; minimally-qualified # 💇‍♂ E4.0 man getting haircut +1F487 1F3FB 200D 2642 FE0F ; fully-qualified # 💇🏻‍♂️ E4.0 man getting haircut: light skin tone +1F487 1F3FB 200D 2642 ; minimally-qualified # 💇🏻‍♂ E4.0 man getting haircut: light skin tone +1F487 1F3FC 200D 2642 FE0F ; fully-qualified # 💇🏼‍♂️ E4.0 man getting haircut: medium-light skin tone +1F487 1F3FC 200D 2642 ; minimally-qualified # 💇🏼‍♂ E4.0 man getting haircut: medium-light skin tone +1F487 1F3FD 200D 2642 FE0F ; fully-qualified # 💇🏽‍♂️ E4.0 man getting haircut: medium skin tone +1F487 1F3FD 200D 2642 ; minimally-qualified # 💇🏽‍♂ E4.0 man getting haircut: medium skin tone +1F487 1F3FE 200D 2642 FE0F ; fully-qualified # 💇🏾‍♂️ E4.0 man getting haircut: medium-dark skin tone +1F487 1F3FE 200D 2642 ; minimally-qualified # 💇🏾‍♂ E4.0 man getting haircut: medium-dark skin tone +1F487 1F3FF 200D 2642 FE0F ; fully-qualified # 💇🏿‍♂️ E4.0 man getting haircut: dark skin tone +1F487 1F3FF 200D 2642 ; minimally-qualified # 💇🏿‍♂ E4.0 man getting haircut: dark skin tone +1F487 200D 2640 FE0F ; fully-qualified # 💇‍♀️ E4.0 woman getting haircut +1F487 200D 2640 ; minimally-qualified # 💇‍♀ E4.0 woman getting haircut +1F487 1F3FB 200D 2640 FE0F ; fully-qualified # 💇🏻‍♀️ E4.0 woman getting haircut: light skin tone +1F487 1F3FB 200D 2640 ; minimally-qualified # 💇🏻‍♀ E4.0 woman getting haircut: light skin tone +1F487 1F3FC 200D 2640 FE0F ; fully-qualified # 💇🏼‍♀️ E4.0 woman getting haircut: medium-light skin tone +1F487 1F3FC 200D 2640 ; minimally-qualified # 💇🏼‍♀ E4.0 woman getting haircut: medium-light skin tone +1F487 1F3FD 200D 2640 FE0F ; fully-qualified # 💇🏽‍♀️ E4.0 woman getting haircut: medium skin tone +1F487 1F3FD 200D 2640 ; minimally-qualified # 💇🏽‍♀ E4.0 woman getting haircut: medium skin tone +1F487 1F3FE 200D 2640 FE0F ; fully-qualified # 💇🏾‍♀️ E4.0 woman getting haircut: medium-dark skin tone +1F487 1F3FE 200D 2640 ; minimally-qualified # 💇🏾‍♀ E4.0 woman getting haircut: medium-dark skin tone +1F487 1F3FF 200D 2640 FE0F ; fully-qualified # 💇🏿‍♀️ E4.0 woman getting haircut: dark skin tone +1F487 1F3FF 200D 2640 ; minimally-qualified # 💇🏿‍♀ E4.0 woman getting haircut: dark skin tone +1F6B6 ; fully-qualified # 🚶 E0.6 person walking +1F6B6 1F3FB ; fully-qualified # 🚶🏻 E1.0 person walking: light skin tone +1F6B6 1F3FC ; fully-qualified # 🚶🏼 E1.0 person walking: medium-light skin tone +1F6B6 1F3FD ; fully-qualified # 🚶🏽 E1.0 person walking: medium skin tone +1F6B6 1F3FE ; fully-qualified # 🚶🏾 E1.0 person walking: medium-dark skin tone +1F6B6 1F3FF ; fully-qualified # 🚶🏿 E1.0 person walking: dark skin tone +1F6B6 200D 2642 FE0F ; fully-qualified # 🚶‍♂️ E4.0 man walking +1F6B6 200D 2642 ; minimally-qualified # 🚶‍♂ E4.0 man walking +1F6B6 1F3FB 200D 2642 FE0F ; fully-qualified # 🚶🏻‍♂️ E4.0 man walking: light skin tone +1F6B6 1F3FB 200D 2642 ; minimally-qualified # 🚶🏻‍♂ E4.0 man walking: light skin tone +1F6B6 1F3FC 200D 2642 FE0F ; fully-qualified # 🚶🏼‍♂️ E4.0 man walking: medium-light skin tone +1F6B6 1F3FC 200D 2642 ; minimally-qualified # 🚶🏼‍♂ E4.0 man walking: medium-light skin tone +1F6B6 1F3FD 200D 2642 FE0F ; fully-qualified # 🚶🏽‍♂️ E4.0 man walking: medium skin tone +1F6B6 1F3FD 200D 2642 ; minimally-qualified # 🚶🏽‍♂ E4.0 man walking: medium skin tone +1F6B6 1F3FE 200D 2642 FE0F ; fully-qualified # 🚶🏾‍♂️ E4.0 man walking: medium-dark skin tone +1F6B6 1F3FE 200D 2642 ; minimally-qualified # 🚶🏾‍♂ E4.0 man walking: medium-dark skin tone +1F6B6 1F3FF 200D 2642 FE0F ; fully-qualified # 🚶🏿‍♂️ E4.0 man walking: dark skin tone +1F6B6 1F3FF 200D 2642 ; minimally-qualified # 🚶🏿‍♂ E4.0 man walking: dark skin tone +1F6B6 200D 2640 FE0F ; fully-qualified # 🚶‍♀️ E4.0 woman walking +1F6B6 200D 2640 ; minimally-qualified # 🚶‍♀ E4.0 woman walking +1F6B6 1F3FB 200D 2640 FE0F ; fully-qualified # 🚶🏻‍♀️ E4.0 woman walking: light skin tone +1F6B6 1F3FB 200D 2640 ; minimally-qualified # 🚶🏻‍♀ E4.0 woman walking: light skin tone +1F6B6 1F3FC 200D 2640 FE0F ; fully-qualified # 🚶🏼‍♀️ E4.0 woman walking: medium-light skin tone +1F6B6 1F3FC 200D 2640 ; minimally-qualified # 🚶🏼‍♀ E4.0 woman walking: medium-light skin tone +1F6B6 1F3FD 200D 2640 FE0F ; fully-qualified # 🚶🏽‍♀️ E4.0 woman walking: medium skin tone +1F6B6 1F3FD 200D 2640 ; minimally-qualified # 🚶🏽‍♀ E4.0 woman walking: medium skin tone +1F6B6 1F3FE 200D 2640 FE0F ; fully-qualified # 🚶🏾‍♀️ E4.0 woman walking: medium-dark skin tone +1F6B6 1F3FE 200D 2640 ; minimally-qualified # 🚶🏾‍♀ E4.0 woman walking: medium-dark skin tone +1F6B6 1F3FF 200D 2640 FE0F ; fully-qualified # 🚶🏿‍♀️ E4.0 woman walking: dark skin tone +1F6B6 1F3FF 200D 2640 ; minimally-qualified # 🚶🏿‍♀ E4.0 woman walking: dark skin tone +1F9CD ; fully-qualified # 🧍 E12.0 person standing +1F9CD 1F3FB ; fully-qualified # 🧍🏻 E12.0 person standing: light skin tone +1F9CD 1F3FC ; fully-qualified # 🧍🏼 E12.0 person standing: medium-light skin tone +1F9CD 1F3FD ; fully-qualified # 🧍🏽 E12.0 person standing: medium skin tone +1F9CD 1F3FE ; fully-qualified # 🧍🏾 E12.0 person standing: medium-dark skin tone +1F9CD 1F3FF ; fully-qualified # 🧍🏿 E12.0 person standing: dark skin tone +1F9CD 200D 2642 FE0F ; fully-qualified # 🧍‍♂️ E12.0 man standing +1F9CD 200D 2642 ; minimally-qualified # 🧍‍♂ E12.0 man standing +1F9CD 1F3FB 200D 2642 FE0F ; fully-qualified # 🧍🏻‍♂️ E12.0 man standing: light skin tone +1F9CD 1F3FB 200D 2642 ; minimally-qualified # 🧍🏻‍♂ E12.0 man standing: light skin tone +1F9CD 1F3FC 200D 2642 FE0F ; fully-qualified # 🧍🏼‍♂️ E12.0 man standing: medium-light skin tone +1F9CD 1F3FC 200D 2642 ; minimally-qualified # 🧍🏼‍♂ E12.0 man standing: medium-light skin tone +1F9CD 1F3FD 200D 2642 FE0F ; fully-qualified # 🧍🏽‍♂️ E12.0 man standing: medium skin tone +1F9CD 1F3FD 200D 2642 ; minimally-qualified # 🧍🏽‍♂ E12.0 man standing: medium skin tone +1F9CD 1F3FE 200D 2642 FE0F ; fully-qualified # 🧍🏾‍♂️ E12.0 man standing: medium-dark skin tone +1F9CD 1F3FE 200D 2642 ; minimally-qualified # 🧍🏾‍♂ E12.0 man standing: medium-dark skin tone +1F9CD 1F3FF 200D 2642 FE0F ; fully-qualified # 🧍🏿‍♂️ E12.0 man standing: dark skin tone +1F9CD 1F3FF 200D 2642 ; minimally-qualified # 🧍🏿‍♂ E12.0 man standing: dark skin tone +1F9CD 200D 2640 FE0F ; fully-qualified # 🧍‍♀️ E12.0 woman standing +1F9CD 200D 2640 ; minimally-qualified # 🧍‍♀ E12.0 woman standing +1F9CD 1F3FB 200D 2640 FE0F ; fully-qualified # 🧍🏻‍♀️ E12.0 woman standing: light skin tone +1F9CD 1F3FB 200D 2640 ; minimally-qualified # 🧍🏻‍♀ E12.0 woman standing: light skin tone +1F9CD 1F3FC 200D 2640 FE0F ; fully-qualified # 🧍🏼‍♀️ E12.0 woman standing: medium-light skin tone +1F9CD 1F3FC 200D 2640 ; minimally-qualified # 🧍🏼‍♀ E12.0 woman standing: medium-light skin tone +1F9CD 1F3FD 200D 2640 FE0F ; fully-qualified # 🧍🏽‍♀️ E12.0 woman standing: medium skin tone +1F9CD 1F3FD 200D 2640 ; minimally-qualified # 🧍🏽‍♀ E12.0 woman standing: medium skin tone +1F9CD 1F3FE 200D 2640 FE0F ; fully-qualified # 🧍🏾‍♀️ E12.0 woman standing: medium-dark skin tone +1F9CD 1F3FE 200D 2640 ; minimally-qualified # 🧍🏾‍♀ E12.0 woman standing: medium-dark skin tone +1F9CD 1F3FF 200D 2640 FE0F ; fully-qualified # 🧍🏿‍♀️ E12.0 woman standing: dark skin tone +1F9CD 1F3FF 200D 2640 ; minimally-qualified # 🧍🏿‍♀ E12.0 woman standing: dark skin tone +1F9CE ; fully-qualified # 🧎 E12.0 person kneeling +1F9CE 1F3FB ; fully-qualified # 🧎🏻 E12.0 person kneeling: light skin tone +1F9CE 1F3FC ; fully-qualified # 🧎🏼 E12.0 person kneeling: medium-light skin tone +1F9CE 1F3FD ; fully-qualified # 🧎🏽 E12.0 person kneeling: medium skin tone +1F9CE 1F3FE ; fully-qualified # 🧎🏾 E12.0 person kneeling: medium-dark skin tone +1F9CE 1F3FF ; fully-qualified # 🧎🏿 E12.0 person kneeling: dark skin tone +1F9CE 200D 2642 FE0F ; fully-qualified # 🧎‍♂️ E12.0 man kneeling +1F9CE 200D 2642 ; minimally-qualified # 🧎‍♂ E12.0 man kneeling +1F9CE 1F3FB 200D 2642 FE0F ; fully-qualified # 🧎🏻‍♂️ E12.0 man kneeling: light skin tone +1F9CE 1F3FB 200D 2642 ; minimally-qualified # 🧎🏻‍♂ E12.0 man kneeling: light skin tone +1F9CE 1F3FC 200D 2642 FE0F ; fully-qualified # 🧎🏼‍♂️ E12.0 man kneeling: medium-light skin tone +1F9CE 1F3FC 200D 2642 ; minimally-qualified # 🧎🏼‍♂ E12.0 man kneeling: medium-light skin tone +1F9CE 1F3FD 200D 2642 FE0F ; fully-qualified # 🧎🏽‍♂️ E12.0 man kneeling: medium skin tone +1F9CE 1F3FD 200D 2642 ; minimally-qualified # 🧎🏽‍♂ E12.0 man kneeling: medium skin tone +1F9CE 1F3FE 200D 2642 FE0F ; fully-qualified # 🧎🏾‍♂️ E12.0 man kneeling: medium-dark skin tone +1F9CE 1F3FE 200D 2642 ; minimally-qualified # 🧎🏾‍♂ E12.0 man kneeling: medium-dark skin tone +1F9CE 1F3FF 200D 2642 FE0F ; fully-qualified # 🧎🏿‍♂️ E12.0 man kneeling: dark skin tone +1F9CE 1F3FF 200D 2642 ; minimally-qualified # 🧎🏿‍♂ E12.0 man kneeling: dark skin tone +1F9CE 200D 2640 FE0F ; fully-qualified # 🧎‍♀️ E12.0 woman kneeling +1F9CE 200D 2640 ; minimally-qualified # 🧎‍♀ E12.0 woman kneeling +1F9CE 1F3FB 200D 2640 FE0F ; fully-qualified # 🧎🏻‍♀️ E12.0 woman kneeling: light skin tone +1F9CE 1F3FB 200D 2640 ; minimally-qualified # 🧎🏻‍♀ E12.0 woman kneeling: light skin tone +1F9CE 1F3FC 200D 2640 FE0F ; fully-qualified # 🧎🏼‍♀️ E12.0 woman kneeling: medium-light skin tone +1F9CE 1F3FC 200D 2640 ; minimally-qualified # 🧎🏼‍♀ E12.0 woman kneeling: medium-light skin tone +1F9CE 1F3FD 200D 2640 FE0F ; fully-qualified # 🧎🏽‍♀️ E12.0 woman kneeling: medium skin tone +1F9CE 1F3FD 200D 2640 ; minimally-qualified # 🧎🏽‍♀ E12.0 woman kneeling: medium skin tone +1F9CE 1F3FE 200D 2640 FE0F ; fully-qualified # 🧎🏾‍♀️ E12.0 woman kneeling: medium-dark skin tone +1F9CE 1F3FE 200D 2640 ; minimally-qualified # 🧎🏾‍♀ E12.0 woman kneeling: medium-dark skin tone +1F9CE 1F3FF 200D 2640 FE0F ; fully-qualified # 🧎🏿‍♀️ E12.0 woman kneeling: dark skin tone +1F9CE 1F3FF 200D 2640 ; minimally-qualified # 🧎🏿‍♀ E12.0 woman kneeling: dark skin tone +1F9D1 200D 1F9AF ; fully-qualified # 🧑‍🦯 E12.1 person with white cane +1F9D1 1F3FB 200D 1F9AF ; fully-qualified # 🧑🏻‍🦯 E12.1 person with white cane: light skin tone +1F9D1 1F3FC 200D 1F9AF ; fully-qualified # 🧑🏼‍🦯 E12.1 person with white cane: medium-light skin tone +1F9D1 1F3FD 200D 1F9AF ; fully-qualified # 🧑🏽‍🦯 E12.1 person with white cane: medium skin tone +1F9D1 1F3FE 200D 1F9AF ; fully-qualified # 🧑🏾‍🦯 E12.1 person with white cane: medium-dark skin tone +1F9D1 1F3FF 200D 1F9AF ; fully-qualified # 🧑🏿‍🦯 E12.1 person with white cane: dark skin tone +1F468 200D 1F9AF ; fully-qualified # 👨‍🦯 E12.0 man with white cane +1F468 1F3FB 200D 1F9AF ; fully-qualified # 👨🏻‍🦯 E12.0 man with white cane: light skin tone +1F468 1F3FC 200D 1F9AF ; fully-qualified # 👨🏼‍🦯 E12.0 man with white cane: medium-light skin tone +1F468 1F3FD 200D 1F9AF ; fully-qualified # 👨🏽‍🦯 E12.0 man with white cane: medium skin tone +1F468 1F3FE 200D 1F9AF ; fully-qualified # 👨🏾‍🦯 E12.0 man with white cane: medium-dark skin tone +1F468 1F3FF 200D 1F9AF ; fully-qualified # 👨🏿‍🦯 E12.0 man with white cane: dark skin tone +1F469 200D 1F9AF ; fully-qualified # 👩‍🦯 E12.0 woman with white cane +1F469 1F3FB 200D 1F9AF ; fully-qualified # 👩🏻‍🦯 E12.0 woman with white cane: light skin tone +1F469 1F3FC 200D 1F9AF ; fully-qualified # 👩🏼‍🦯 E12.0 woman with white cane: medium-light skin tone +1F469 1F3FD 200D 1F9AF ; fully-qualified # 👩🏽‍🦯 E12.0 woman with white cane: medium skin tone +1F469 1F3FE 200D 1F9AF ; fully-qualified # 👩🏾‍🦯 E12.0 woman with white cane: medium-dark skin tone +1F469 1F3FF 200D 1F9AF ; fully-qualified # 👩🏿‍🦯 E12.0 woman with white cane: dark skin tone +1F9D1 200D 1F9BC ; fully-qualified # 🧑‍🦼 E12.1 person in motorized wheelchair +1F9D1 1F3FB 200D 1F9BC ; fully-qualified # 🧑🏻‍🦼 E12.1 person in motorized wheelchair: light skin tone +1F9D1 1F3FC 200D 1F9BC ; fully-qualified # 🧑🏼‍🦼 E12.1 person in motorized wheelchair: medium-light skin tone +1F9D1 1F3FD 200D 1F9BC ; fully-qualified # 🧑🏽‍🦼 E12.1 person in motorized wheelchair: medium skin tone +1F9D1 1F3FE 200D 1F9BC ; fully-qualified # 🧑🏾‍🦼 E12.1 person in motorized wheelchair: medium-dark skin tone +1F9D1 1F3FF 200D 1F9BC ; fully-qualified # 🧑🏿‍🦼 E12.1 person in motorized wheelchair: dark skin tone +1F468 200D 1F9BC ; fully-qualified # 👨‍🦼 E12.0 man in motorized wheelchair +1F468 1F3FB 200D 1F9BC ; fully-qualified # 👨🏻‍🦼 E12.0 man in motorized wheelchair: light skin tone +1F468 1F3FC 200D 1F9BC ; fully-qualified # 👨🏼‍🦼 E12.0 man in motorized wheelchair: medium-light skin tone +1F468 1F3FD 200D 1F9BC ; fully-qualified # 👨🏽‍🦼 E12.0 man in motorized wheelchair: medium skin tone +1F468 1F3FE 200D 1F9BC ; fully-qualified # 👨🏾‍🦼 E12.0 man in motorized wheelchair: medium-dark skin tone +1F468 1F3FF 200D 1F9BC ; fully-qualified # 👨🏿‍🦼 E12.0 man in motorized wheelchair: dark skin tone +1F469 200D 1F9BC ; fully-qualified # 👩‍🦼 E12.0 woman in motorized wheelchair +1F469 1F3FB 200D 1F9BC ; fully-qualified # 👩🏻‍🦼 E12.0 woman in motorized wheelchair: light skin tone +1F469 1F3FC 200D 1F9BC ; fully-qualified # 👩🏼‍🦼 E12.0 woman in motorized wheelchair: medium-light skin tone +1F469 1F3FD 200D 1F9BC ; fully-qualified # 👩🏽‍🦼 E12.0 woman in motorized wheelchair: medium skin tone +1F469 1F3FE 200D 1F9BC ; fully-qualified # 👩🏾‍🦼 E12.0 woman in motorized wheelchair: medium-dark skin tone +1F469 1F3FF 200D 1F9BC ; fully-qualified # 👩🏿‍🦼 E12.0 woman in motorized wheelchair: dark skin tone +1F9D1 200D 1F9BD ; fully-qualified # 🧑‍🦽 E12.1 person in manual wheelchair +1F9D1 1F3FB 200D 1F9BD ; fully-qualified # 🧑🏻‍🦽 E12.1 person in manual wheelchair: light skin tone +1F9D1 1F3FC 200D 1F9BD ; fully-qualified # 🧑🏼‍🦽 E12.1 person in manual wheelchair: medium-light skin tone +1F9D1 1F3FD 200D 1F9BD ; fully-qualified # 🧑🏽‍🦽 E12.1 person in manual wheelchair: medium skin tone +1F9D1 1F3FE 200D 1F9BD ; fully-qualified # 🧑🏾‍🦽 E12.1 person in manual wheelchair: medium-dark skin tone +1F9D1 1F3FF 200D 1F9BD ; fully-qualified # 🧑🏿‍🦽 E12.1 person in manual wheelchair: dark skin tone +1F468 200D 1F9BD ; fully-qualified # 👨‍🦽 E12.0 man in manual wheelchair +1F468 1F3FB 200D 1F9BD ; fully-qualified # 👨🏻‍🦽 E12.0 man in manual wheelchair: light skin tone +1F468 1F3FC 200D 1F9BD ; fully-qualified # 👨🏼‍🦽 E12.0 man in manual wheelchair: medium-light skin tone +1F468 1F3FD 200D 1F9BD ; fully-qualified # 👨🏽‍🦽 E12.0 man in manual wheelchair: medium skin tone +1F468 1F3FE 200D 1F9BD ; fully-qualified # 👨🏾‍🦽 E12.0 man in manual wheelchair: medium-dark skin tone +1F468 1F3FF 200D 1F9BD ; fully-qualified # 👨🏿‍🦽 E12.0 man in manual wheelchair: dark skin tone +1F469 200D 1F9BD ; fully-qualified # 👩‍🦽 E12.0 woman in manual wheelchair +1F469 1F3FB 200D 1F9BD ; fully-qualified # 👩🏻‍🦽 E12.0 woman in manual wheelchair: light skin tone +1F469 1F3FC 200D 1F9BD ; fully-qualified # 👩🏼‍🦽 E12.0 woman in manual wheelchair: medium-light skin tone +1F469 1F3FD 200D 1F9BD ; fully-qualified # 👩🏽‍🦽 E12.0 woman in manual wheelchair: medium skin tone +1F469 1F3FE 200D 1F9BD ; fully-qualified # 👩🏾‍🦽 E12.0 woman in manual wheelchair: medium-dark skin tone +1F469 1F3FF 200D 1F9BD ; fully-qualified # 👩🏿‍🦽 E12.0 woman in manual wheelchair: dark skin tone +1F3C3 ; fully-qualified # 🏃 E0.6 person running +1F3C3 1F3FB ; fully-qualified # 🏃🏻 E1.0 person running: light skin tone +1F3C3 1F3FC ; fully-qualified # 🏃🏼 E1.0 person running: medium-light skin tone +1F3C3 1F3FD ; fully-qualified # 🏃🏽 E1.0 person running: medium skin tone +1F3C3 1F3FE ; fully-qualified # 🏃🏾 E1.0 person running: medium-dark skin tone +1F3C3 1F3FF ; fully-qualified # 🏃🏿 E1.0 person running: dark skin tone +1F3C3 200D 2642 FE0F ; fully-qualified # 🏃‍♂️ E4.0 man running +1F3C3 200D 2642 ; minimally-qualified # 🏃‍♂ E4.0 man running +1F3C3 1F3FB 200D 2642 FE0F ; fully-qualified # 🏃🏻‍♂️ E4.0 man running: light skin tone +1F3C3 1F3FB 200D 2642 ; minimally-qualified # 🏃🏻‍♂ E4.0 man running: light skin tone +1F3C3 1F3FC 200D 2642 FE0F ; fully-qualified # 🏃🏼‍♂️ E4.0 man running: medium-light skin tone +1F3C3 1F3FC 200D 2642 ; minimally-qualified # 🏃🏼‍♂ E4.0 man running: medium-light skin tone +1F3C3 1F3FD 200D 2642 FE0F ; fully-qualified # 🏃🏽‍♂️ E4.0 man running: medium skin tone +1F3C3 1F3FD 200D 2642 ; minimally-qualified # 🏃🏽‍♂ E4.0 man running: medium skin tone +1F3C3 1F3FE 200D 2642 FE0F ; fully-qualified # 🏃🏾‍♂️ E4.0 man running: medium-dark skin tone +1F3C3 1F3FE 200D 2642 ; minimally-qualified # 🏃🏾‍♂ E4.0 man running: medium-dark skin tone +1F3C3 1F3FF 200D 2642 FE0F ; fully-qualified # 🏃🏿‍♂️ E4.0 man running: dark skin tone +1F3C3 1F3FF 200D 2642 ; minimally-qualified # 🏃🏿‍♂ E4.0 man running: dark skin tone +1F3C3 200D 2640 FE0F ; fully-qualified # 🏃‍♀️ E4.0 woman running +1F3C3 200D 2640 ; minimally-qualified # 🏃‍♀ E4.0 woman running +1F3C3 1F3FB 200D 2640 FE0F ; fully-qualified # 🏃🏻‍♀️ E4.0 woman running: light skin tone +1F3C3 1F3FB 200D 2640 ; minimally-qualified # 🏃🏻‍♀ E4.0 woman running: light skin tone +1F3C3 1F3FC 200D 2640 FE0F ; fully-qualified # 🏃🏼‍♀️ E4.0 woman running: medium-light skin tone +1F3C3 1F3FC 200D 2640 ; minimally-qualified # 🏃🏼‍♀ E4.0 woman running: medium-light skin tone +1F3C3 1F3FD 200D 2640 FE0F ; fully-qualified # 🏃🏽‍♀️ E4.0 woman running: medium skin tone +1F3C3 1F3FD 200D 2640 ; minimally-qualified # 🏃🏽‍♀ E4.0 woman running: medium skin tone +1F3C3 1F3FE 200D 2640 FE0F ; fully-qualified # 🏃🏾‍♀️ E4.0 woman running: medium-dark skin tone +1F3C3 1F3FE 200D 2640 ; minimally-qualified # 🏃🏾‍♀ E4.0 woman running: medium-dark skin tone +1F3C3 1F3FF 200D 2640 FE0F ; fully-qualified # 🏃🏿‍♀️ E4.0 woman running: dark skin tone +1F3C3 1F3FF 200D 2640 ; minimally-qualified # 🏃🏿‍♀ E4.0 woman running: dark skin tone +1F483 ; fully-qualified # 💃 E0.6 woman dancing +1F483 1F3FB ; fully-qualified # 💃🏻 E1.0 woman dancing: light skin tone +1F483 1F3FC ; fully-qualified # 💃🏼 E1.0 woman dancing: medium-light skin tone +1F483 1F3FD ; fully-qualified # 💃🏽 E1.0 woman dancing: medium skin tone +1F483 1F3FE ; fully-qualified # 💃🏾 E1.0 woman dancing: medium-dark skin tone +1F483 1F3FF ; fully-qualified # 💃🏿 E1.0 woman dancing: dark skin tone +1F57A ; fully-qualified # 🕺 E3.0 man dancing +1F57A 1F3FB ; fully-qualified # 🕺🏻 E3.0 man dancing: light skin tone +1F57A 1F3FC ; fully-qualified # 🕺🏼 E3.0 man dancing: medium-light skin tone +1F57A 1F3FD ; fully-qualified # 🕺🏽 E3.0 man dancing: medium skin tone +1F57A 1F3FE ; fully-qualified # 🕺🏾 E3.0 man dancing: medium-dark skin tone +1F57A 1F3FF ; fully-qualified # 🕺🏿 E3.0 man dancing: dark skin tone +1F574 FE0F ; fully-qualified # 🕴️ E0.7 person in suit levitating +1F574 ; unqualified # 🕴 E0.7 person in suit levitating +1F574 1F3FB ; fully-qualified # 🕴🏻 E4.0 person in suit levitating: light skin tone +1F574 1F3FC ; fully-qualified # 🕴🏼 E4.0 person in suit levitating: medium-light skin tone +1F574 1F3FD ; fully-qualified # 🕴🏽 E4.0 person in suit levitating: medium skin tone +1F574 1F3FE ; fully-qualified # 🕴🏾 E4.0 person in suit levitating: medium-dark skin tone +1F574 1F3FF ; fully-qualified # 🕴🏿 E4.0 person in suit levitating: dark skin tone +1F46F ; fully-qualified # 👯 E0.6 people with bunny ears +1F46F 200D 2642 FE0F ; fully-qualified # 👯‍♂️ E4.0 men with bunny ears +1F46F 200D 2642 ; minimally-qualified # 👯‍♂ E4.0 men with bunny ears +1F46F 200D 2640 FE0F ; fully-qualified # 👯‍♀️ E4.0 women with bunny ears +1F46F 200D 2640 ; minimally-qualified # 👯‍♀ E4.0 women with bunny ears +1F9D6 ; fully-qualified # 🧖 E5.0 person in steamy room +1F9D6 1F3FB ; fully-qualified # 🧖🏻 E5.0 person in steamy room: light skin tone +1F9D6 1F3FC ; fully-qualified # 🧖🏼 E5.0 person in steamy room: medium-light skin tone +1F9D6 1F3FD ; fully-qualified # 🧖🏽 E5.0 person in steamy room: medium skin tone +1F9D6 1F3FE ; fully-qualified # 🧖🏾 E5.0 person in steamy room: medium-dark skin tone +1F9D6 1F3FF ; fully-qualified # 🧖🏿 E5.0 person in steamy room: dark skin tone +1F9D6 200D 2642 FE0F ; fully-qualified # 🧖‍♂️ E5.0 man in steamy room +1F9D6 200D 2642 ; minimally-qualified # 🧖‍♂ E5.0 man in steamy room +1F9D6 1F3FB 200D 2642 FE0F ; fully-qualified # 🧖🏻‍♂️ E5.0 man in steamy room: light skin tone +1F9D6 1F3FB 200D 2642 ; minimally-qualified # 🧖🏻‍♂ E5.0 man in steamy room: light skin tone +1F9D6 1F3FC 200D 2642 FE0F ; fully-qualified # 🧖🏼‍♂️ E5.0 man in steamy room: medium-light skin tone +1F9D6 1F3FC 200D 2642 ; minimally-qualified # 🧖🏼‍♂ E5.0 man in steamy room: medium-light skin tone +1F9D6 1F3FD 200D 2642 FE0F ; fully-qualified # 🧖🏽‍♂️ E5.0 man in steamy room: medium skin tone +1F9D6 1F3FD 200D 2642 ; minimally-qualified # 🧖🏽‍♂ E5.0 man in steamy room: medium skin tone +1F9D6 1F3FE 200D 2642 FE0F ; fully-qualified # 🧖🏾‍♂️ E5.0 man in steamy room: medium-dark skin tone +1F9D6 1F3FE 200D 2642 ; minimally-qualified # 🧖🏾‍♂ E5.0 man in steamy room: medium-dark skin tone +1F9D6 1F3FF 200D 2642 FE0F ; fully-qualified # 🧖🏿‍♂️ E5.0 man in steamy room: dark skin tone +1F9D6 1F3FF 200D 2642 ; minimally-qualified # 🧖🏿‍♂ E5.0 man in steamy room: dark skin tone +1F9D6 200D 2640 FE0F ; fully-qualified # 🧖‍♀️ E5.0 woman in steamy room +1F9D6 200D 2640 ; minimally-qualified # 🧖‍♀ E5.0 woman in steamy room +1F9D6 1F3FB 200D 2640 FE0F ; fully-qualified # 🧖🏻‍♀️ E5.0 woman in steamy room: light skin tone +1F9D6 1F3FB 200D 2640 ; minimally-qualified # 🧖🏻‍♀ E5.0 woman in steamy room: light skin tone +1F9D6 1F3FC 200D 2640 FE0F ; fully-qualified # 🧖🏼‍♀️ E5.0 woman in steamy room: medium-light skin tone +1F9D6 1F3FC 200D 2640 ; minimally-qualified # 🧖🏼‍♀ E5.0 woman in steamy room: medium-light skin tone +1F9D6 1F3FD 200D 2640 FE0F ; fully-qualified # 🧖🏽‍♀️ E5.0 woman in steamy room: medium skin tone +1F9D6 1F3FD 200D 2640 ; minimally-qualified # 🧖🏽‍♀ E5.0 woman in steamy room: medium skin tone +1F9D6 1F3FE 200D 2640 FE0F ; fully-qualified # 🧖🏾‍♀️ E5.0 woman in steamy room: medium-dark skin tone +1F9D6 1F3FE 200D 2640 ; minimally-qualified # 🧖🏾‍♀ E5.0 woman in steamy room: medium-dark skin tone +1F9D6 1F3FF 200D 2640 FE0F ; fully-qualified # 🧖🏿‍♀️ E5.0 woman in steamy room: dark skin tone +1F9D6 1F3FF 200D 2640 ; minimally-qualified # 🧖🏿‍♀ E5.0 woman in steamy room: dark skin tone +1F9D7 ; fully-qualified # 🧗 E5.0 person climbing +1F9D7 1F3FB ; fully-qualified # 🧗🏻 E5.0 person climbing: light skin tone +1F9D7 1F3FC ; fully-qualified # 🧗🏼 E5.0 person climbing: medium-light skin tone +1F9D7 1F3FD ; fully-qualified # 🧗🏽 E5.0 person climbing: medium skin tone +1F9D7 1F3FE ; fully-qualified # 🧗🏾 E5.0 person climbing: medium-dark skin tone +1F9D7 1F3FF ; fully-qualified # 🧗🏿 E5.0 person climbing: dark skin tone +1F9D7 200D 2642 FE0F ; fully-qualified # 🧗‍♂️ E5.0 man climbing +1F9D7 200D 2642 ; minimally-qualified # 🧗‍♂ E5.0 man climbing +1F9D7 1F3FB 200D 2642 FE0F ; fully-qualified # 🧗🏻‍♂️ E5.0 man climbing: light skin tone +1F9D7 1F3FB 200D 2642 ; minimally-qualified # 🧗🏻‍♂ E5.0 man climbing: light skin tone +1F9D7 1F3FC 200D 2642 FE0F ; fully-qualified # 🧗🏼‍♂️ E5.0 man climbing: medium-light skin tone +1F9D7 1F3FC 200D 2642 ; minimally-qualified # 🧗🏼‍♂ E5.0 man climbing: medium-light skin tone +1F9D7 1F3FD 200D 2642 FE0F ; fully-qualified # 🧗🏽‍♂️ E5.0 man climbing: medium skin tone +1F9D7 1F3FD 200D 2642 ; minimally-qualified # 🧗🏽‍♂ E5.0 man climbing: medium skin tone +1F9D7 1F3FE 200D 2642 FE0F ; fully-qualified # 🧗🏾‍♂️ E5.0 man climbing: medium-dark skin tone +1F9D7 1F3FE 200D 2642 ; minimally-qualified # 🧗🏾‍♂ E5.0 man climbing: medium-dark skin tone +1F9D7 1F3FF 200D 2642 FE0F ; fully-qualified # 🧗🏿‍♂️ E5.0 man climbing: dark skin tone +1F9D7 1F3FF 200D 2642 ; minimally-qualified # 🧗🏿‍♂ E5.0 man climbing: dark skin tone +1F9D7 200D 2640 FE0F ; fully-qualified # 🧗‍♀️ E5.0 woman climbing +1F9D7 200D 2640 ; minimally-qualified # 🧗‍♀ E5.0 woman climbing +1F9D7 1F3FB 200D 2640 FE0F ; fully-qualified # 🧗🏻‍♀️ E5.0 woman climbing: light skin tone +1F9D7 1F3FB 200D 2640 ; minimally-qualified # 🧗🏻‍♀ E5.0 woman climbing: light skin tone +1F9D7 1F3FC 200D 2640 FE0F ; fully-qualified # 🧗🏼‍♀️ E5.0 woman climbing: medium-light skin tone +1F9D7 1F3FC 200D 2640 ; minimally-qualified # 🧗🏼‍♀ E5.0 woman climbing: medium-light skin tone +1F9D7 1F3FD 200D 2640 FE0F ; fully-qualified # 🧗🏽‍♀️ E5.0 woman climbing: medium skin tone +1F9D7 1F3FD 200D 2640 ; minimally-qualified # 🧗🏽‍♀ E5.0 woman climbing: medium skin tone +1F9D7 1F3FE 200D 2640 FE0F ; fully-qualified # 🧗🏾‍♀️ E5.0 woman climbing: medium-dark skin tone +1F9D7 1F3FE 200D 2640 ; minimally-qualified # 🧗🏾‍♀ E5.0 woman climbing: medium-dark skin tone +1F9D7 1F3FF 200D 2640 FE0F ; fully-qualified # 🧗🏿‍♀️ E5.0 woman climbing: dark skin tone +1F9D7 1F3FF 200D 2640 ; minimally-qualified # 🧗🏿‍♀ E5.0 woman climbing: dark skin tone + +# subgroup: person-sport +1F93A ; fully-qualified # 🤺 E3.0 person fencing +1F3C7 ; fully-qualified # 🏇 E1.0 horse racing +1F3C7 1F3FB ; fully-qualified # 🏇🏻 E1.0 horse racing: light skin tone +1F3C7 1F3FC ; fully-qualified # 🏇🏼 E1.0 horse racing: medium-light skin tone +1F3C7 1F3FD ; fully-qualified # 🏇🏽 E1.0 horse racing: medium skin tone +1F3C7 1F3FE ; fully-qualified # 🏇🏾 E1.0 horse racing: medium-dark skin tone +1F3C7 1F3FF ; fully-qualified # 🏇🏿 E1.0 horse racing: dark skin tone +26F7 FE0F ; fully-qualified # ⛷️ E0.7 skier +26F7 ; unqualified # ⛷ E0.7 skier +1F3C2 ; fully-qualified # 🏂 E0.6 snowboarder +1F3C2 1F3FB ; fully-qualified # 🏂🏻 E1.0 snowboarder: light skin tone +1F3C2 1F3FC ; fully-qualified # 🏂🏼 E1.0 snowboarder: medium-light skin tone +1F3C2 1F3FD ; fully-qualified # 🏂🏽 E1.0 snowboarder: medium skin tone +1F3C2 1F3FE ; fully-qualified # 🏂🏾 E1.0 snowboarder: medium-dark skin tone +1F3C2 1F3FF ; fully-qualified # 🏂🏿 E1.0 snowboarder: dark skin tone +1F3CC FE0F ; fully-qualified # 🏌️ E0.7 person golfing +1F3CC ; unqualified # 🏌 E0.7 person golfing +1F3CC 1F3FB ; fully-qualified # 🏌🏻 E4.0 person golfing: light skin tone +1F3CC 1F3FC ; fully-qualified # 🏌🏼 E4.0 person golfing: medium-light skin tone +1F3CC 1F3FD ; fully-qualified # 🏌🏽 E4.0 person golfing: medium skin tone +1F3CC 1F3FE ; fully-qualified # 🏌🏾 E4.0 person golfing: medium-dark skin tone +1F3CC 1F3FF ; fully-qualified # 🏌🏿 E4.0 person golfing: dark skin tone +1F3CC FE0F 200D 2642 FE0F ; fully-qualified # 🏌️‍♂️ E4.0 man golfing +1F3CC 200D 2642 FE0F ; unqualified # 🏌‍♂️ E4.0 man golfing +1F3CC FE0F 200D 2642 ; unqualified # 🏌️‍♂ E4.0 man golfing +1F3CC 200D 2642 ; unqualified # 🏌‍♂ E4.0 man golfing +1F3CC 1F3FB 200D 2642 FE0F ; fully-qualified # 🏌🏻‍♂️ E4.0 man golfing: light skin tone +1F3CC 1F3FB 200D 2642 ; minimally-qualified # 🏌🏻‍♂ E4.0 man golfing: light skin tone +1F3CC 1F3FC 200D 2642 FE0F ; fully-qualified # 🏌🏼‍♂️ E4.0 man golfing: medium-light skin tone +1F3CC 1F3FC 200D 2642 ; minimally-qualified # 🏌🏼‍♂ E4.0 man golfing: medium-light skin tone +1F3CC 1F3FD 200D 2642 FE0F ; fully-qualified # 🏌🏽‍♂️ E4.0 man golfing: medium skin tone +1F3CC 1F3FD 200D 2642 ; minimally-qualified # 🏌🏽‍♂ E4.0 man golfing: medium skin tone +1F3CC 1F3FE 200D 2642 FE0F ; fully-qualified # 🏌🏾‍♂️ E4.0 man golfing: medium-dark skin tone +1F3CC 1F3FE 200D 2642 ; minimally-qualified # 🏌🏾‍♂ E4.0 man golfing: medium-dark skin tone +1F3CC 1F3FF 200D 2642 FE0F ; fully-qualified # 🏌🏿‍♂️ E4.0 man golfing: dark skin tone +1F3CC 1F3FF 200D 2642 ; minimally-qualified # 🏌🏿‍♂ E4.0 man golfing: dark skin tone +1F3CC FE0F 200D 2640 FE0F ; fully-qualified # 🏌️‍♀️ E4.0 woman golfing +1F3CC 200D 2640 FE0F ; unqualified # 🏌‍♀️ E4.0 woman golfing +1F3CC FE0F 200D 2640 ; unqualified # 🏌️‍♀ E4.0 woman golfing +1F3CC 200D 2640 ; unqualified # 🏌‍♀ E4.0 woman golfing +1F3CC 1F3FB 200D 2640 FE0F ; fully-qualified # 🏌🏻‍♀️ E4.0 woman golfing: light skin tone +1F3CC 1F3FB 200D 2640 ; minimally-qualified # 🏌🏻‍♀ E4.0 woman golfing: light skin tone +1F3CC 1F3FC 200D 2640 FE0F ; fully-qualified # 🏌🏼‍♀️ E4.0 woman golfing: medium-light skin tone +1F3CC 1F3FC 200D 2640 ; minimally-qualified # 🏌🏼‍♀ E4.0 woman golfing: medium-light skin tone +1F3CC 1F3FD 200D 2640 FE0F ; fully-qualified # 🏌🏽‍♀️ E4.0 woman golfing: medium skin tone +1F3CC 1F3FD 200D 2640 ; minimally-qualified # 🏌🏽‍♀ E4.0 woman golfing: medium skin tone +1F3CC 1F3FE 200D 2640 FE0F ; fully-qualified # 🏌🏾‍♀️ E4.0 woman golfing: medium-dark skin tone +1F3CC 1F3FE 200D 2640 ; minimally-qualified # 🏌🏾‍♀ E4.0 woman golfing: medium-dark skin tone +1F3CC 1F3FF 200D 2640 FE0F ; fully-qualified # 🏌🏿‍♀️ E4.0 woman golfing: dark skin tone +1F3CC 1F3FF 200D 2640 ; minimally-qualified # 🏌🏿‍♀ E4.0 woman golfing: dark skin tone +1F3C4 ; fully-qualified # 🏄 E0.6 person surfing +1F3C4 1F3FB ; fully-qualified # 🏄🏻 E1.0 person surfing: light skin tone +1F3C4 1F3FC ; fully-qualified # 🏄🏼 E1.0 person surfing: medium-light skin tone +1F3C4 1F3FD ; fully-qualified # 🏄🏽 E1.0 person surfing: medium skin tone +1F3C4 1F3FE ; fully-qualified # 🏄🏾 E1.0 person surfing: medium-dark skin tone +1F3C4 1F3FF ; fully-qualified # 🏄🏿 E1.0 person surfing: dark skin tone +1F3C4 200D 2642 FE0F ; fully-qualified # 🏄‍♂️ E4.0 man surfing +1F3C4 200D 2642 ; minimally-qualified # 🏄‍♂ E4.0 man surfing +1F3C4 1F3FB 200D 2642 FE0F ; fully-qualified # 🏄🏻‍♂️ E4.0 man surfing: light skin tone +1F3C4 1F3FB 200D 2642 ; minimally-qualified # 🏄🏻‍♂ E4.0 man surfing: light skin tone +1F3C4 1F3FC 200D 2642 FE0F ; fully-qualified # 🏄🏼‍♂️ E4.0 man surfing: medium-light skin tone +1F3C4 1F3FC 200D 2642 ; minimally-qualified # 🏄🏼‍♂ E4.0 man surfing: medium-light skin tone +1F3C4 1F3FD 200D 2642 FE0F ; fully-qualified # 🏄🏽‍♂️ E4.0 man surfing: medium skin tone +1F3C4 1F3FD 200D 2642 ; minimally-qualified # 🏄🏽‍♂ E4.0 man surfing: medium skin tone +1F3C4 1F3FE 200D 2642 FE0F ; fully-qualified # 🏄🏾‍♂️ E4.0 man surfing: medium-dark skin tone +1F3C4 1F3FE 200D 2642 ; minimally-qualified # 🏄🏾‍♂ E4.0 man surfing: medium-dark skin tone +1F3C4 1F3FF 200D 2642 FE0F ; fully-qualified # 🏄🏿‍♂️ E4.0 man surfing: dark skin tone +1F3C4 1F3FF 200D 2642 ; minimally-qualified # 🏄🏿‍♂ E4.0 man surfing: dark skin tone +1F3C4 200D 2640 FE0F ; fully-qualified # 🏄‍♀️ E4.0 woman surfing +1F3C4 200D 2640 ; minimally-qualified # 🏄‍♀ E4.0 woman surfing +1F3C4 1F3FB 200D 2640 FE0F ; fully-qualified # 🏄🏻‍♀️ E4.0 woman surfing: light skin tone +1F3C4 1F3FB 200D 2640 ; minimally-qualified # 🏄🏻‍♀ E4.0 woman surfing: light skin tone +1F3C4 1F3FC 200D 2640 FE0F ; fully-qualified # 🏄🏼‍♀️ E4.0 woman surfing: medium-light skin tone +1F3C4 1F3FC 200D 2640 ; minimally-qualified # 🏄🏼‍♀ E4.0 woman surfing: medium-light skin tone +1F3C4 1F3FD 200D 2640 FE0F ; fully-qualified # 🏄🏽‍♀️ E4.0 woman surfing: medium skin tone +1F3C4 1F3FD 200D 2640 ; minimally-qualified # 🏄🏽‍♀ E4.0 woman surfing: medium skin tone +1F3C4 1F3FE 200D 2640 FE0F ; fully-qualified # 🏄🏾‍♀️ E4.0 woman surfing: medium-dark skin tone +1F3C4 1F3FE 200D 2640 ; minimally-qualified # 🏄🏾‍♀ E4.0 woman surfing: medium-dark skin tone +1F3C4 1F3FF 200D 2640 FE0F ; fully-qualified # 🏄🏿‍♀️ E4.0 woman surfing: dark skin tone +1F3C4 1F3FF 200D 2640 ; minimally-qualified # 🏄🏿‍♀ E4.0 woman surfing: dark skin tone +1F6A3 ; fully-qualified # 🚣 E1.0 person rowing boat +1F6A3 1F3FB ; fully-qualified # 🚣🏻 E1.0 person rowing boat: light skin tone +1F6A3 1F3FC ; fully-qualified # 🚣🏼 E1.0 person rowing boat: medium-light skin tone +1F6A3 1F3FD ; fully-qualified # 🚣🏽 E1.0 person rowing boat: medium skin tone +1F6A3 1F3FE ; fully-qualified # 🚣🏾 E1.0 person rowing boat: medium-dark skin tone +1F6A3 1F3FF ; fully-qualified # 🚣🏿 E1.0 person rowing boat: dark skin tone +1F6A3 200D 2642 FE0F ; fully-qualified # 🚣‍♂️ E4.0 man rowing boat +1F6A3 200D 2642 ; minimally-qualified # 🚣‍♂ E4.0 man rowing boat +1F6A3 1F3FB 200D 2642 FE0F ; fully-qualified # 🚣🏻‍♂️ E4.0 man rowing boat: light skin tone +1F6A3 1F3FB 200D 2642 ; minimally-qualified # 🚣🏻‍♂ E4.0 man rowing boat: light skin tone +1F6A3 1F3FC 200D 2642 FE0F ; fully-qualified # 🚣🏼‍♂️ E4.0 man rowing boat: medium-light skin tone +1F6A3 1F3FC 200D 2642 ; minimally-qualified # 🚣🏼‍♂ E4.0 man rowing boat: medium-light skin tone +1F6A3 1F3FD 200D 2642 FE0F ; fully-qualified # 🚣🏽‍♂️ E4.0 man rowing boat: medium skin tone +1F6A3 1F3FD 200D 2642 ; minimally-qualified # 🚣🏽‍♂ E4.0 man rowing boat: medium skin tone +1F6A3 1F3FE 200D 2642 FE0F ; fully-qualified # 🚣🏾‍♂️ E4.0 man rowing boat: medium-dark skin tone +1F6A3 1F3FE 200D 2642 ; minimally-qualified # 🚣🏾‍♂ E4.0 man rowing boat: medium-dark skin tone +1F6A3 1F3FF 200D 2642 FE0F ; fully-qualified # 🚣🏿‍♂️ E4.0 man rowing boat: dark skin tone +1F6A3 1F3FF 200D 2642 ; minimally-qualified # 🚣🏿‍♂ E4.0 man rowing boat: dark skin tone +1F6A3 200D 2640 FE0F ; fully-qualified # 🚣‍♀️ E4.0 woman rowing boat +1F6A3 200D 2640 ; minimally-qualified # 🚣‍♀ E4.0 woman rowing boat +1F6A3 1F3FB 200D 2640 FE0F ; fully-qualified # 🚣🏻‍♀️ E4.0 woman rowing boat: light skin tone +1F6A3 1F3FB 200D 2640 ; minimally-qualified # 🚣🏻‍♀ E4.0 woman rowing boat: light skin tone +1F6A3 1F3FC 200D 2640 FE0F ; fully-qualified # 🚣🏼‍♀️ E4.0 woman rowing boat: medium-light skin tone +1F6A3 1F3FC 200D 2640 ; minimally-qualified # 🚣🏼‍♀ E4.0 woman rowing boat: medium-light skin tone +1F6A3 1F3FD 200D 2640 FE0F ; fully-qualified # 🚣🏽‍♀️ E4.0 woman rowing boat: medium skin tone +1F6A3 1F3FD 200D 2640 ; minimally-qualified # 🚣🏽‍♀ E4.0 woman rowing boat: medium skin tone +1F6A3 1F3FE 200D 2640 FE0F ; fully-qualified # 🚣🏾‍♀️ E4.0 woman rowing boat: medium-dark skin tone +1F6A3 1F3FE 200D 2640 ; minimally-qualified # 🚣🏾‍♀ E4.0 woman rowing boat: medium-dark skin tone +1F6A3 1F3FF 200D 2640 FE0F ; fully-qualified # 🚣🏿‍♀️ E4.0 woman rowing boat: dark skin tone +1F6A3 1F3FF 200D 2640 ; minimally-qualified # 🚣🏿‍♀ E4.0 woman rowing boat: dark skin tone +1F3CA ; fully-qualified # 🏊 E0.6 person swimming +1F3CA 1F3FB ; fully-qualified # 🏊🏻 E1.0 person swimming: light skin tone +1F3CA 1F3FC ; fully-qualified # 🏊🏼 E1.0 person swimming: medium-light skin tone +1F3CA 1F3FD ; fully-qualified # 🏊🏽 E1.0 person swimming: medium skin tone +1F3CA 1F3FE ; fully-qualified # 🏊🏾 E1.0 person swimming: medium-dark skin tone +1F3CA 1F3FF ; fully-qualified # 🏊🏿 E1.0 person swimming: dark skin tone +1F3CA 200D 2642 FE0F ; fully-qualified # 🏊‍♂️ E4.0 man swimming +1F3CA 200D 2642 ; minimally-qualified # 🏊‍♂ E4.0 man swimming +1F3CA 1F3FB 200D 2642 FE0F ; fully-qualified # 🏊🏻‍♂️ E4.0 man swimming: light skin tone +1F3CA 1F3FB 200D 2642 ; minimally-qualified # 🏊🏻‍♂ E4.0 man swimming: light skin tone +1F3CA 1F3FC 200D 2642 FE0F ; fully-qualified # 🏊🏼‍♂️ E4.0 man swimming: medium-light skin tone +1F3CA 1F3FC 200D 2642 ; minimally-qualified # 🏊🏼‍♂ E4.0 man swimming: medium-light skin tone +1F3CA 1F3FD 200D 2642 FE0F ; fully-qualified # 🏊🏽‍♂️ E4.0 man swimming: medium skin tone +1F3CA 1F3FD 200D 2642 ; minimally-qualified # 🏊🏽‍♂ E4.0 man swimming: medium skin tone +1F3CA 1F3FE 200D 2642 FE0F ; fully-qualified # 🏊🏾‍♂️ E4.0 man swimming: medium-dark skin tone +1F3CA 1F3FE 200D 2642 ; minimally-qualified # 🏊🏾‍♂ E4.0 man swimming: medium-dark skin tone +1F3CA 1F3FF 200D 2642 FE0F ; fully-qualified # 🏊🏿‍♂️ E4.0 man swimming: dark skin tone +1F3CA 1F3FF 200D 2642 ; minimally-qualified # 🏊🏿‍♂ E4.0 man swimming: dark skin tone +1F3CA 200D 2640 FE0F ; fully-qualified # 🏊‍♀️ E4.0 woman swimming +1F3CA 200D 2640 ; minimally-qualified # 🏊‍♀ E4.0 woman swimming +1F3CA 1F3FB 200D 2640 FE0F ; fully-qualified # 🏊🏻‍♀️ E4.0 woman swimming: light skin tone +1F3CA 1F3FB 200D 2640 ; minimally-qualified # 🏊🏻‍♀ E4.0 woman swimming: light skin tone +1F3CA 1F3FC 200D 2640 FE0F ; fully-qualified # 🏊🏼‍♀️ E4.0 woman swimming: medium-light skin tone +1F3CA 1F3FC 200D 2640 ; minimally-qualified # 🏊🏼‍♀ E4.0 woman swimming: medium-light skin tone +1F3CA 1F3FD 200D 2640 FE0F ; fully-qualified # 🏊🏽‍♀️ E4.0 woman swimming: medium skin tone +1F3CA 1F3FD 200D 2640 ; minimally-qualified # 🏊🏽‍♀ E4.0 woman swimming: medium skin tone +1F3CA 1F3FE 200D 2640 FE0F ; fully-qualified # 🏊🏾‍♀️ E4.0 woman swimming: medium-dark skin tone +1F3CA 1F3FE 200D 2640 ; minimally-qualified # 🏊🏾‍♀ E4.0 woman swimming: medium-dark skin tone +1F3CA 1F3FF 200D 2640 FE0F ; fully-qualified # 🏊🏿‍♀️ E4.0 woman swimming: dark skin tone +1F3CA 1F3FF 200D 2640 ; minimally-qualified # 🏊🏿‍♀ E4.0 woman swimming: dark skin tone +26F9 FE0F ; fully-qualified # ⛹️ E0.7 person bouncing ball +26F9 ; unqualified # ⛹ E0.7 person bouncing ball +26F9 1F3FB ; fully-qualified # ⛹🏻 E2.0 person bouncing ball: light skin tone +26F9 1F3FC ; fully-qualified # ⛹🏼 E2.0 person bouncing ball: medium-light skin tone +26F9 1F3FD ; fully-qualified # ⛹🏽 E2.0 person bouncing ball: medium skin tone +26F9 1F3FE ; fully-qualified # ⛹🏾 E2.0 person bouncing ball: medium-dark skin tone +26F9 1F3FF ; fully-qualified # ⛹🏿 E2.0 person bouncing ball: dark skin tone +26F9 FE0F 200D 2642 FE0F ; fully-qualified # ⛹️‍♂️ E4.0 man bouncing ball +26F9 200D 2642 FE0F ; unqualified # ⛹‍♂️ E4.0 man bouncing ball +26F9 FE0F 200D 2642 ; unqualified # ⛹️‍♂ E4.0 man bouncing ball +26F9 200D 2642 ; unqualified # ⛹‍♂ E4.0 man bouncing ball +26F9 1F3FB 200D 2642 FE0F ; fully-qualified # ⛹🏻‍♂️ E4.0 man bouncing ball: light skin tone +26F9 1F3FB 200D 2642 ; minimally-qualified # ⛹🏻‍♂ E4.0 man bouncing ball: light skin tone +26F9 1F3FC 200D 2642 FE0F ; fully-qualified # ⛹🏼‍♂️ E4.0 man bouncing ball: medium-light skin tone +26F9 1F3FC 200D 2642 ; minimally-qualified # ⛹🏼‍♂ E4.0 man bouncing ball: medium-light skin tone +26F9 1F3FD 200D 2642 FE0F ; fully-qualified # ⛹🏽‍♂️ E4.0 man bouncing ball: medium skin tone +26F9 1F3FD 200D 2642 ; minimally-qualified # ⛹🏽‍♂ E4.0 man bouncing ball: medium skin tone +26F9 1F3FE 200D 2642 FE0F ; fully-qualified # ⛹🏾‍♂️ E4.0 man bouncing ball: medium-dark skin tone +26F9 1F3FE 200D 2642 ; minimally-qualified # ⛹🏾‍♂ E4.0 man bouncing ball: medium-dark skin tone +26F9 1F3FF 200D 2642 FE0F ; fully-qualified # ⛹🏿‍♂️ E4.0 man bouncing ball: dark skin tone +26F9 1F3FF 200D 2642 ; minimally-qualified # ⛹🏿‍♂ E4.0 man bouncing ball: dark skin tone +26F9 FE0F 200D 2640 FE0F ; fully-qualified # ⛹️‍♀️ E4.0 woman bouncing ball +26F9 200D 2640 FE0F ; unqualified # ⛹‍♀️ E4.0 woman bouncing ball +26F9 FE0F 200D 2640 ; unqualified # ⛹️‍♀ E4.0 woman bouncing ball +26F9 200D 2640 ; unqualified # ⛹‍♀ E4.0 woman bouncing ball +26F9 1F3FB 200D 2640 FE0F ; fully-qualified # ⛹🏻‍♀️ E4.0 woman bouncing ball: light skin tone +26F9 1F3FB 200D 2640 ; minimally-qualified # ⛹🏻‍♀ E4.0 woman bouncing ball: light skin tone +26F9 1F3FC 200D 2640 FE0F ; fully-qualified # ⛹🏼‍♀️ E4.0 woman bouncing ball: medium-light skin tone +26F9 1F3FC 200D 2640 ; minimally-qualified # ⛹🏼‍♀ E4.0 woman bouncing ball: medium-light skin tone +26F9 1F3FD 200D 2640 FE0F ; fully-qualified # ⛹🏽‍♀️ E4.0 woman bouncing ball: medium skin tone +26F9 1F3FD 200D 2640 ; minimally-qualified # ⛹🏽‍♀ E4.0 woman bouncing ball: medium skin tone +26F9 1F3FE 200D 2640 FE0F ; fully-qualified # ⛹🏾‍♀️ E4.0 woman bouncing ball: medium-dark skin tone +26F9 1F3FE 200D 2640 ; minimally-qualified # ⛹🏾‍♀ E4.0 woman bouncing ball: medium-dark skin tone +26F9 1F3FF 200D 2640 FE0F ; fully-qualified # ⛹🏿‍♀️ E4.0 woman bouncing ball: dark skin tone +26F9 1F3FF 200D 2640 ; minimally-qualified # ⛹🏿‍♀ E4.0 woman bouncing ball: dark skin tone +1F3CB FE0F ; fully-qualified # 🏋️ E0.7 person lifting weights +1F3CB ; unqualified # 🏋 E0.7 person lifting weights +1F3CB 1F3FB ; fully-qualified # 🏋🏻 E2.0 person lifting weights: light skin tone +1F3CB 1F3FC ; fully-qualified # 🏋🏼 E2.0 person lifting weights: medium-light skin tone +1F3CB 1F3FD ; fully-qualified # 🏋🏽 E2.0 person lifting weights: medium skin tone +1F3CB 1F3FE ; fully-qualified # 🏋🏾 E2.0 person lifting weights: medium-dark skin tone +1F3CB 1F3FF ; fully-qualified # 🏋🏿 E2.0 person lifting weights: dark skin tone +1F3CB FE0F 200D 2642 FE0F ; fully-qualified # 🏋️‍♂️ E4.0 man lifting weights +1F3CB 200D 2642 FE0F ; unqualified # 🏋‍♂️ E4.0 man lifting weights +1F3CB FE0F 200D 2642 ; unqualified # 🏋️‍♂ E4.0 man lifting weights +1F3CB 200D 2642 ; unqualified # 🏋‍♂ E4.0 man lifting weights +1F3CB 1F3FB 200D 2642 FE0F ; fully-qualified # 🏋🏻‍♂️ E4.0 man lifting weights: light skin tone +1F3CB 1F3FB 200D 2642 ; minimally-qualified # 🏋🏻‍♂ E4.0 man lifting weights: light skin tone +1F3CB 1F3FC 200D 2642 FE0F ; fully-qualified # 🏋🏼‍♂️ E4.0 man lifting weights: medium-light skin tone +1F3CB 1F3FC 200D 2642 ; minimally-qualified # 🏋🏼‍♂ E4.0 man lifting weights: medium-light skin tone +1F3CB 1F3FD 200D 2642 FE0F ; fully-qualified # 🏋🏽‍♂️ E4.0 man lifting weights: medium skin tone +1F3CB 1F3FD 200D 2642 ; minimally-qualified # 🏋🏽‍♂ E4.0 man lifting weights: medium skin tone +1F3CB 1F3FE 200D 2642 FE0F ; fully-qualified # 🏋🏾‍♂️ E4.0 man lifting weights: medium-dark skin tone +1F3CB 1F3FE 200D 2642 ; minimally-qualified # 🏋🏾‍♂ E4.0 man lifting weights: medium-dark skin tone +1F3CB 1F3FF 200D 2642 FE0F ; fully-qualified # 🏋🏿‍♂️ E4.0 man lifting weights: dark skin tone +1F3CB 1F3FF 200D 2642 ; minimally-qualified # 🏋🏿‍♂ E4.0 man lifting weights: dark skin tone +1F3CB FE0F 200D 2640 FE0F ; fully-qualified # 🏋️‍♀️ E4.0 woman lifting weights +1F3CB 200D 2640 FE0F ; unqualified # 🏋‍♀️ E4.0 woman lifting weights +1F3CB FE0F 200D 2640 ; unqualified # 🏋️‍♀ E4.0 woman lifting weights +1F3CB 200D 2640 ; unqualified # 🏋‍♀ E4.0 woman lifting weights +1F3CB 1F3FB 200D 2640 FE0F ; fully-qualified # 🏋🏻‍♀️ E4.0 woman lifting weights: light skin tone +1F3CB 1F3FB 200D 2640 ; minimally-qualified # 🏋🏻‍♀ E4.0 woman lifting weights: light skin tone +1F3CB 1F3FC 200D 2640 FE0F ; fully-qualified # 🏋🏼‍♀️ E4.0 woman lifting weights: medium-light skin tone +1F3CB 1F3FC 200D 2640 ; minimally-qualified # 🏋🏼‍♀ E4.0 woman lifting weights: medium-light skin tone +1F3CB 1F3FD 200D 2640 FE0F ; fully-qualified # 🏋🏽‍♀️ E4.0 woman lifting weights: medium skin tone +1F3CB 1F3FD 200D 2640 ; minimally-qualified # 🏋🏽‍♀ E4.0 woman lifting weights: medium skin tone +1F3CB 1F3FE 200D 2640 FE0F ; fully-qualified # 🏋🏾‍♀️ E4.0 woman lifting weights: medium-dark skin tone +1F3CB 1F3FE 200D 2640 ; minimally-qualified # 🏋🏾‍♀ E4.0 woman lifting weights: medium-dark skin tone +1F3CB 1F3FF 200D 2640 FE0F ; fully-qualified # 🏋🏿‍♀️ E4.0 woman lifting weights: dark skin tone +1F3CB 1F3FF 200D 2640 ; minimally-qualified # 🏋🏿‍♀ E4.0 woman lifting weights: dark skin tone +1F6B4 ; fully-qualified # 🚴 E1.0 person biking +1F6B4 1F3FB ; fully-qualified # 🚴🏻 E1.0 person biking: light skin tone +1F6B4 1F3FC ; fully-qualified # 🚴🏼 E1.0 person biking: medium-light skin tone +1F6B4 1F3FD ; fully-qualified # 🚴🏽 E1.0 person biking: medium skin tone +1F6B4 1F3FE ; fully-qualified # 🚴🏾 E1.0 person biking: medium-dark skin tone +1F6B4 1F3FF ; fully-qualified # 🚴🏿 E1.0 person biking: dark skin tone +1F6B4 200D 2642 FE0F ; fully-qualified # 🚴‍♂️ E4.0 man biking +1F6B4 200D 2642 ; minimally-qualified # 🚴‍♂ E4.0 man biking +1F6B4 1F3FB 200D 2642 FE0F ; fully-qualified # 🚴🏻‍♂️ E4.0 man biking: light skin tone +1F6B4 1F3FB 200D 2642 ; minimally-qualified # 🚴🏻‍♂ E4.0 man biking: light skin tone +1F6B4 1F3FC 200D 2642 FE0F ; fully-qualified # 🚴🏼‍♂️ E4.0 man biking: medium-light skin tone +1F6B4 1F3FC 200D 2642 ; minimally-qualified # 🚴🏼‍♂ E4.0 man biking: medium-light skin tone +1F6B4 1F3FD 200D 2642 FE0F ; fully-qualified # 🚴🏽‍♂️ E4.0 man biking: medium skin tone +1F6B4 1F3FD 200D 2642 ; minimally-qualified # 🚴🏽‍♂ E4.0 man biking: medium skin tone +1F6B4 1F3FE 200D 2642 FE0F ; fully-qualified # 🚴🏾‍♂️ E4.0 man biking: medium-dark skin tone +1F6B4 1F3FE 200D 2642 ; minimally-qualified # 🚴🏾‍♂ E4.0 man biking: medium-dark skin tone +1F6B4 1F3FF 200D 2642 FE0F ; fully-qualified # 🚴🏿‍♂️ E4.0 man biking: dark skin tone +1F6B4 1F3FF 200D 2642 ; minimally-qualified # 🚴🏿‍♂ E4.0 man biking: dark skin tone +1F6B4 200D 2640 FE0F ; fully-qualified # 🚴‍♀️ E4.0 woman biking +1F6B4 200D 2640 ; minimally-qualified # 🚴‍♀ E4.0 woman biking +1F6B4 1F3FB 200D 2640 FE0F ; fully-qualified # 🚴🏻‍♀️ E4.0 woman biking: light skin tone +1F6B4 1F3FB 200D 2640 ; minimally-qualified # 🚴🏻‍♀ E4.0 woman biking: light skin tone +1F6B4 1F3FC 200D 2640 FE0F ; fully-qualified # 🚴🏼‍♀️ E4.0 woman biking: medium-light skin tone +1F6B4 1F3FC 200D 2640 ; minimally-qualified # 🚴🏼‍♀ E4.0 woman biking: medium-light skin tone +1F6B4 1F3FD 200D 2640 FE0F ; fully-qualified # 🚴🏽‍♀️ E4.0 woman biking: medium skin tone +1F6B4 1F3FD 200D 2640 ; minimally-qualified # 🚴🏽‍♀ E4.0 woman biking: medium skin tone +1F6B4 1F3FE 200D 2640 FE0F ; fully-qualified # 🚴🏾‍♀️ E4.0 woman biking: medium-dark skin tone +1F6B4 1F3FE 200D 2640 ; minimally-qualified # 🚴🏾‍♀ E4.0 woman biking: medium-dark skin tone +1F6B4 1F3FF 200D 2640 FE0F ; fully-qualified # 🚴🏿‍♀️ E4.0 woman biking: dark skin tone +1F6B4 1F3FF 200D 2640 ; minimally-qualified # 🚴🏿‍♀ E4.0 woman biking: dark skin tone +1F6B5 ; fully-qualified # 🚵 E1.0 person mountain biking +1F6B5 1F3FB ; fully-qualified # 🚵🏻 E1.0 person mountain biking: light skin tone +1F6B5 1F3FC ; fully-qualified # 🚵🏼 E1.0 person mountain biking: medium-light skin tone +1F6B5 1F3FD ; fully-qualified # 🚵🏽 E1.0 person mountain biking: medium skin tone +1F6B5 1F3FE ; fully-qualified # 🚵🏾 E1.0 person mountain biking: medium-dark skin tone +1F6B5 1F3FF ; fully-qualified # 🚵🏿 E1.0 person mountain biking: dark skin tone +1F6B5 200D 2642 FE0F ; fully-qualified # 🚵‍♂️ E4.0 man mountain biking +1F6B5 200D 2642 ; minimally-qualified # 🚵‍♂ E4.0 man mountain biking +1F6B5 1F3FB 200D 2642 FE0F ; fully-qualified # 🚵🏻‍♂️ E4.0 man mountain biking: light skin tone +1F6B5 1F3FB 200D 2642 ; minimally-qualified # 🚵🏻‍♂ E4.0 man mountain biking: light skin tone +1F6B5 1F3FC 200D 2642 FE0F ; fully-qualified # 🚵🏼‍♂️ E4.0 man mountain biking: medium-light skin tone +1F6B5 1F3FC 200D 2642 ; minimally-qualified # 🚵🏼‍♂ E4.0 man mountain biking: medium-light skin tone +1F6B5 1F3FD 200D 2642 FE0F ; fully-qualified # 🚵🏽‍♂️ E4.0 man mountain biking: medium skin tone +1F6B5 1F3FD 200D 2642 ; minimally-qualified # 🚵🏽‍♂ E4.0 man mountain biking: medium skin tone +1F6B5 1F3FE 200D 2642 FE0F ; fully-qualified # 🚵🏾‍♂️ E4.0 man mountain biking: medium-dark skin tone +1F6B5 1F3FE 200D 2642 ; minimally-qualified # 🚵🏾‍♂ E4.0 man mountain biking: medium-dark skin tone +1F6B5 1F3FF 200D 2642 FE0F ; fully-qualified # 🚵🏿‍♂️ E4.0 man mountain biking: dark skin tone +1F6B5 1F3FF 200D 2642 ; minimally-qualified # 🚵🏿‍♂ E4.0 man mountain biking: dark skin tone +1F6B5 200D 2640 FE0F ; fully-qualified # 🚵‍♀️ E4.0 woman mountain biking +1F6B5 200D 2640 ; minimally-qualified # 🚵‍♀ E4.0 woman mountain biking +1F6B5 1F3FB 200D 2640 FE0F ; fully-qualified # 🚵🏻‍♀️ E4.0 woman mountain biking: light skin tone +1F6B5 1F3FB 200D 2640 ; minimally-qualified # 🚵🏻‍♀ E4.0 woman mountain biking: light skin tone +1F6B5 1F3FC 200D 2640 FE0F ; fully-qualified # 🚵🏼‍♀️ E4.0 woman mountain biking: medium-light skin tone +1F6B5 1F3FC 200D 2640 ; minimally-qualified # 🚵🏼‍♀ E4.0 woman mountain biking: medium-light skin tone +1F6B5 1F3FD 200D 2640 FE0F ; fully-qualified # 🚵🏽‍♀️ E4.0 woman mountain biking: medium skin tone +1F6B5 1F3FD 200D 2640 ; minimally-qualified # 🚵🏽‍♀ E4.0 woman mountain biking: medium skin tone +1F6B5 1F3FE 200D 2640 FE0F ; fully-qualified # 🚵🏾‍♀️ E4.0 woman mountain biking: medium-dark skin tone +1F6B5 1F3FE 200D 2640 ; minimally-qualified # 🚵🏾‍♀ E4.0 woman mountain biking: medium-dark skin tone +1F6B5 1F3FF 200D 2640 FE0F ; fully-qualified # 🚵🏿‍♀️ E4.0 woman mountain biking: dark skin tone +1F6B5 1F3FF 200D 2640 ; minimally-qualified # 🚵🏿‍♀ E4.0 woman mountain biking: dark skin tone +1F938 ; fully-qualified # 🤸 E3.0 person cartwheeling +1F938 1F3FB ; fully-qualified # 🤸🏻 E3.0 person cartwheeling: light skin tone +1F938 1F3FC ; fully-qualified # 🤸🏼 E3.0 person cartwheeling: medium-light skin tone +1F938 1F3FD ; fully-qualified # 🤸🏽 E3.0 person cartwheeling: medium skin tone +1F938 1F3FE ; fully-qualified # 🤸🏾 E3.0 person cartwheeling: medium-dark skin tone +1F938 1F3FF ; fully-qualified # 🤸🏿 E3.0 person cartwheeling: dark skin tone +1F938 200D 2642 FE0F ; fully-qualified # 🤸‍♂️ E4.0 man cartwheeling +1F938 200D 2642 ; minimally-qualified # 🤸‍♂ E4.0 man cartwheeling +1F938 1F3FB 200D 2642 FE0F ; fully-qualified # 🤸🏻‍♂️ E4.0 man cartwheeling: light skin tone +1F938 1F3FB 200D 2642 ; minimally-qualified # 🤸🏻‍♂ E4.0 man cartwheeling: light skin tone +1F938 1F3FC 200D 2642 FE0F ; fully-qualified # 🤸🏼‍♂️ E4.0 man cartwheeling: medium-light skin tone +1F938 1F3FC 200D 2642 ; minimally-qualified # 🤸🏼‍♂ E4.0 man cartwheeling: medium-light skin tone +1F938 1F3FD 200D 2642 FE0F ; fully-qualified # 🤸🏽‍♂️ E4.0 man cartwheeling: medium skin tone +1F938 1F3FD 200D 2642 ; minimally-qualified # 🤸🏽‍♂ E4.0 man cartwheeling: medium skin tone +1F938 1F3FE 200D 2642 FE0F ; fully-qualified # 🤸🏾‍♂️ E4.0 man cartwheeling: medium-dark skin tone +1F938 1F3FE 200D 2642 ; minimally-qualified # 🤸🏾‍♂ E4.0 man cartwheeling: medium-dark skin tone +1F938 1F3FF 200D 2642 FE0F ; fully-qualified # 🤸🏿‍♂️ E4.0 man cartwheeling: dark skin tone +1F938 1F3FF 200D 2642 ; minimally-qualified # 🤸🏿‍♂ E4.0 man cartwheeling: dark skin tone +1F938 200D 2640 FE0F ; fully-qualified # 🤸‍♀️ E4.0 woman cartwheeling +1F938 200D 2640 ; minimally-qualified # 🤸‍♀ E4.0 woman cartwheeling +1F938 1F3FB 200D 2640 FE0F ; fully-qualified # 🤸🏻‍♀️ E4.0 woman cartwheeling: light skin tone +1F938 1F3FB 200D 2640 ; minimally-qualified # 🤸🏻‍♀ E4.0 woman cartwheeling: light skin tone +1F938 1F3FC 200D 2640 FE0F ; fully-qualified # 🤸🏼‍♀️ E4.0 woman cartwheeling: medium-light skin tone +1F938 1F3FC 200D 2640 ; minimally-qualified # 🤸🏼‍♀ E4.0 woman cartwheeling: medium-light skin tone +1F938 1F3FD 200D 2640 FE0F ; fully-qualified # 🤸🏽‍♀️ E4.0 woman cartwheeling: medium skin tone +1F938 1F3FD 200D 2640 ; minimally-qualified # 🤸🏽‍♀ E4.0 woman cartwheeling: medium skin tone +1F938 1F3FE 200D 2640 FE0F ; fully-qualified # 🤸🏾‍♀️ E4.0 woman cartwheeling: medium-dark skin tone +1F938 1F3FE 200D 2640 ; minimally-qualified # 🤸🏾‍♀ E4.0 woman cartwheeling: medium-dark skin tone +1F938 1F3FF 200D 2640 FE0F ; fully-qualified # 🤸🏿‍♀️ E4.0 woman cartwheeling: dark skin tone +1F938 1F3FF 200D 2640 ; minimally-qualified # 🤸🏿‍♀ E4.0 woman cartwheeling: dark skin tone +1F93C ; fully-qualified # 🤼 E3.0 people wrestling +1F93C 200D 2642 FE0F ; fully-qualified # 🤼‍♂️ E4.0 men wrestling +1F93C 200D 2642 ; minimally-qualified # 🤼‍♂ E4.0 men wrestling +1F93C 200D 2640 FE0F ; fully-qualified # 🤼‍♀️ E4.0 women wrestling +1F93C 200D 2640 ; minimally-qualified # 🤼‍♀ E4.0 women wrestling +1F93D ; fully-qualified # 🤽 E3.0 person playing water polo +1F93D 1F3FB ; fully-qualified # 🤽🏻 E3.0 person playing water polo: light skin tone +1F93D 1F3FC ; fully-qualified # 🤽🏼 E3.0 person playing water polo: medium-light skin tone +1F93D 1F3FD ; fully-qualified # 🤽🏽 E3.0 person playing water polo: medium skin tone +1F93D 1F3FE ; fully-qualified # 🤽🏾 E3.0 person playing water polo: medium-dark skin tone +1F93D 1F3FF ; fully-qualified # 🤽🏿 E3.0 person playing water polo: dark skin tone +1F93D 200D 2642 FE0F ; fully-qualified # 🤽‍♂️ E4.0 man playing water polo +1F93D 200D 2642 ; minimally-qualified # 🤽‍♂ E4.0 man playing water polo +1F93D 1F3FB 200D 2642 FE0F ; fully-qualified # 🤽🏻‍♂️ E4.0 man playing water polo: light skin tone +1F93D 1F3FB 200D 2642 ; minimally-qualified # 🤽🏻‍♂ E4.0 man playing water polo: light skin tone +1F93D 1F3FC 200D 2642 FE0F ; fully-qualified # 🤽🏼‍♂️ E4.0 man playing water polo: medium-light skin tone +1F93D 1F3FC 200D 2642 ; minimally-qualified # 🤽🏼‍♂ E4.0 man playing water polo: medium-light skin tone +1F93D 1F3FD 200D 2642 FE0F ; fully-qualified # 🤽🏽‍♂️ E4.0 man playing water polo: medium skin tone +1F93D 1F3FD 200D 2642 ; minimally-qualified # 🤽🏽‍♂ E4.0 man playing water polo: medium skin tone +1F93D 1F3FE 200D 2642 FE0F ; fully-qualified # 🤽🏾‍♂️ E4.0 man playing water polo: medium-dark skin tone +1F93D 1F3FE 200D 2642 ; minimally-qualified # 🤽🏾‍♂ E4.0 man playing water polo: medium-dark skin tone +1F93D 1F3FF 200D 2642 FE0F ; fully-qualified # 🤽🏿‍♂️ E4.0 man playing water polo: dark skin tone +1F93D 1F3FF 200D 2642 ; minimally-qualified # 🤽🏿‍♂ E4.0 man playing water polo: dark skin tone +1F93D 200D 2640 FE0F ; fully-qualified # 🤽‍♀️ E4.0 woman playing water polo +1F93D 200D 2640 ; minimally-qualified # 🤽‍♀ E4.0 woman playing water polo +1F93D 1F3FB 200D 2640 FE0F ; fully-qualified # 🤽🏻‍♀️ E4.0 woman playing water polo: light skin tone +1F93D 1F3FB 200D 2640 ; minimally-qualified # 🤽🏻‍♀ E4.0 woman playing water polo: light skin tone +1F93D 1F3FC 200D 2640 FE0F ; fully-qualified # 🤽🏼‍♀️ E4.0 woman playing water polo: medium-light skin tone +1F93D 1F3FC 200D 2640 ; minimally-qualified # 🤽🏼‍♀ E4.0 woman playing water polo: medium-light skin tone +1F93D 1F3FD 200D 2640 FE0F ; fully-qualified # 🤽🏽‍♀️ E4.0 woman playing water polo: medium skin tone +1F93D 1F3FD 200D 2640 ; minimally-qualified # 🤽🏽‍♀ E4.0 woman playing water polo: medium skin tone +1F93D 1F3FE 200D 2640 FE0F ; fully-qualified # 🤽🏾‍♀️ E4.0 woman playing water polo: medium-dark skin tone +1F93D 1F3FE 200D 2640 ; minimally-qualified # 🤽🏾‍♀ E4.0 woman playing water polo: medium-dark skin tone +1F93D 1F3FF 200D 2640 FE0F ; fully-qualified # 🤽🏿‍♀️ E4.0 woman playing water polo: dark skin tone +1F93D 1F3FF 200D 2640 ; minimally-qualified # 🤽🏿‍♀ E4.0 woman playing water polo: dark skin tone +1F93E ; fully-qualified # 🤾 E3.0 person playing handball +1F93E 1F3FB ; fully-qualified # 🤾🏻 E3.0 person playing handball: light skin tone +1F93E 1F3FC ; fully-qualified # 🤾🏼 E3.0 person playing handball: medium-light skin tone +1F93E 1F3FD ; fully-qualified # 🤾🏽 E3.0 person playing handball: medium skin tone +1F93E 1F3FE ; fully-qualified # 🤾🏾 E3.0 person playing handball: medium-dark skin tone +1F93E 1F3FF ; fully-qualified # 🤾🏿 E3.0 person playing handball: dark skin tone +1F93E 200D 2642 FE0F ; fully-qualified # 🤾‍♂️ E4.0 man playing handball +1F93E 200D 2642 ; minimally-qualified # 🤾‍♂ E4.0 man playing handball +1F93E 1F3FB 200D 2642 FE0F ; fully-qualified # 🤾🏻‍♂️ E4.0 man playing handball: light skin tone +1F93E 1F3FB 200D 2642 ; minimally-qualified # 🤾🏻‍♂ E4.0 man playing handball: light skin tone +1F93E 1F3FC 200D 2642 FE0F ; fully-qualified # 🤾🏼‍♂️ E4.0 man playing handball: medium-light skin tone +1F93E 1F3FC 200D 2642 ; minimally-qualified # 🤾🏼‍♂ E4.0 man playing handball: medium-light skin tone +1F93E 1F3FD 200D 2642 FE0F ; fully-qualified # 🤾🏽‍♂️ E4.0 man playing handball: medium skin tone +1F93E 1F3FD 200D 2642 ; minimally-qualified # 🤾🏽‍♂ E4.0 man playing handball: medium skin tone +1F93E 1F3FE 200D 2642 FE0F ; fully-qualified # 🤾🏾‍♂️ E4.0 man playing handball: medium-dark skin tone +1F93E 1F3FE 200D 2642 ; minimally-qualified # 🤾🏾‍♂ E4.0 man playing handball: medium-dark skin tone +1F93E 1F3FF 200D 2642 FE0F ; fully-qualified # 🤾🏿‍♂️ E4.0 man playing handball: dark skin tone +1F93E 1F3FF 200D 2642 ; minimally-qualified # 🤾🏿‍♂ E4.0 man playing handball: dark skin tone +1F93E 200D 2640 FE0F ; fully-qualified # 🤾‍♀️ E4.0 woman playing handball +1F93E 200D 2640 ; minimally-qualified # 🤾‍♀ E4.0 woman playing handball +1F93E 1F3FB 200D 2640 FE0F ; fully-qualified # 🤾🏻‍♀️ E4.0 woman playing handball: light skin tone +1F93E 1F3FB 200D 2640 ; minimally-qualified # 🤾🏻‍♀ E4.0 woman playing handball: light skin tone +1F93E 1F3FC 200D 2640 FE0F ; fully-qualified # 🤾🏼‍♀️ E4.0 woman playing handball: medium-light skin tone +1F93E 1F3FC 200D 2640 ; minimally-qualified # 🤾🏼‍♀ E4.0 woman playing handball: medium-light skin tone +1F93E 1F3FD 200D 2640 FE0F ; fully-qualified # 🤾🏽‍♀️ E4.0 woman playing handball: medium skin tone +1F93E 1F3FD 200D 2640 ; minimally-qualified # 🤾🏽‍♀ E4.0 woman playing handball: medium skin tone +1F93E 1F3FE 200D 2640 FE0F ; fully-qualified # 🤾🏾‍♀️ E4.0 woman playing handball: medium-dark skin tone +1F93E 1F3FE 200D 2640 ; minimally-qualified # 🤾🏾‍♀ E4.0 woman playing handball: medium-dark skin tone +1F93E 1F3FF 200D 2640 FE0F ; fully-qualified # 🤾🏿‍♀️ E4.0 woman playing handball: dark skin tone +1F93E 1F3FF 200D 2640 ; minimally-qualified # 🤾🏿‍♀ E4.0 woman playing handball: dark skin tone +1F939 ; fully-qualified # 🤹 E3.0 person juggling +1F939 1F3FB ; fully-qualified # 🤹🏻 E3.0 person juggling: light skin tone +1F939 1F3FC ; fully-qualified # 🤹🏼 E3.0 person juggling: medium-light skin tone +1F939 1F3FD ; fully-qualified # 🤹🏽 E3.0 person juggling: medium skin tone +1F939 1F3FE ; fully-qualified # 🤹🏾 E3.0 person juggling: medium-dark skin tone +1F939 1F3FF ; fully-qualified # 🤹🏿 E3.0 person juggling: dark skin tone +1F939 200D 2642 FE0F ; fully-qualified # 🤹‍♂️ E4.0 man juggling +1F939 200D 2642 ; minimally-qualified # 🤹‍♂ E4.0 man juggling +1F939 1F3FB 200D 2642 FE0F ; fully-qualified # 🤹🏻‍♂️ E4.0 man juggling: light skin tone +1F939 1F3FB 200D 2642 ; minimally-qualified # 🤹🏻‍♂ E4.0 man juggling: light skin tone +1F939 1F3FC 200D 2642 FE0F ; fully-qualified # 🤹🏼‍♂️ E4.0 man juggling: medium-light skin tone +1F939 1F3FC 200D 2642 ; minimally-qualified # 🤹🏼‍♂ E4.0 man juggling: medium-light skin tone +1F939 1F3FD 200D 2642 FE0F ; fully-qualified # 🤹🏽‍♂️ E4.0 man juggling: medium skin tone +1F939 1F3FD 200D 2642 ; minimally-qualified # 🤹🏽‍♂ E4.0 man juggling: medium skin tone +1F939 1F3FE 200D 2642 FE0F ; fully-qualified # 🤹🏾‍♂️ E4.0 man juggling: medium-dark skin tone +1F939 1F3FE 200D 2642 ; minimally-qualified # 🤹🏾‍♂ E4.0 man juggling: medium-dark skin tone +1F939 1F3FF 200D 2642 FE0F ; fully-qualified # 🤹🏿‍♂️ E4.0 man juggling: dark skin tone +1F939 1F3FF 200D 2642 ; minimally-qualified # 🤹🏿‍♂ E4.0 man juggling: dark skin tone +1F939 200D 2640 FE0F ; fully-qualified # 🤹‍♀️ E4.0 woman juggling +1F939 200D 2640 ; minimally-qualified # 🤹‍♀ E4.0 woman juggling +1F939 1F3FB 200D 2640 FE0F ; fully-qualified # 🤹🏻‍♀️ E4.0 woman juggling: light skin tone +1F939 1F3FB 200D 2640 ; minimally-qualified # 🤹🏻‍♀ E4.0 woman juggling: light skin tone +1F939 1F3FC 200D 2640 FE0F ; fully-qualified # 🤹🏼‍♀️ E4.0 woman juggling: medium-light skin tone +1F939 1F3FC 200D 2640 ; minimally-qualified # 🤹🏼‍♀ E4.0 woman juggling: medium-light skin tone +1F939 1F3FD 200D 2640 FE0F ; fully-qualified # 🤹🏽‍♀️ E4.0 woman juggling: medium skin tone +1F939 1F3FD 200D 2640 ; minimally-qualified # 🤹🏽‍♀ E4.0 woman juggling: medium skin tone +1F939 1F3FE 200D 2640 FE0F ; fully-qualified # 🤹🏾‍♀️ E4.0 woman juggling: medium-dark skin tone +1F939 1F3FE 200D 2640 ; minimally-qualified # 🤹🏾‍♀ E4.0 woman juggling: medium-dark skin tone +1F939 1F3FF 200D 2640 FE0F ; fully-qualified # 🤹🏿‍♀️ E4.0 woman juggling: dark skin tone +1F939 1F3FF 200D 2640 ; minimally-qualified # 🤹🏿‍♀ E4.0 woman juggling: dark skin tone + +# subgroup: person-resting +1F9D8 ; fully-qualified # 🧘 E5.0 person in lotus position +1F9D8 1F3FB ; fully-qualified # 🧘🏻 E5.0 person in lotus position: light skin tone +1F9D8 1F3FC ; fully-qualified # 🧘🏼 E5.0 person in lotus position: medium-light skin tone +1F9D8 1F3FD ; fully-qualified # 🧘🏽 E5.0 person in lotus position: medium skin tone +1F9D8 1F3FE ; fully-qualified # 🧘🏾 E5.0 person in lotus position: medium-dark skin tone +1F9D8 1F3FF ; fully-qualified # 🧘🏿 E5.0 person in lotus position: dark skin tone +1F9D8 200D 2642 FE0F ; fully-qualified # 🧘‍♂️ E5.0 man in lotus position +1F9D8 200D 2642 ; minimally-qualified # 🧘‍♂ E5.0 man in lotus position +1F9D8 1F3FB 200D 2642 FE0F ; fully-qualified # 🧘🏻‍♂️ E5.0 man in lotus position: light skin tone +1F9D8 1F3FB 200D 2642 ; minimally-qualified # 🧘🏻‍♂ E5.0 man in lotus position: light skin tone +1F9D8 1F3FC 200D 2642 FE0F ; fully-qualified # 🧘🏼‍♂️ E5.0 man in lotus position: medium-light skin tone +1F9D8 1F3FC 200D 2642 ; minimally-qualified # 🧘🏼‍♂ E5.0 man in lotus position: medium-light skin tone +1F9D8 1F3FD 200D 2642 FE0F ; fully-qualified # 🧘🏽‍♂️ E5.0 man in lotus position: medium skin tone +1F9D8 1F3FD 200D 2642 ; minimally-qualified # 🧘🏽‍♂ E5.0 man in lotus position: medium skin tone +1F9D8 1F3FE 200D 2642 FE0F ; fully-qualified # 🧘🏾‍♂️ E5.0 man in lotus position: medium-dark skin tone +1F9D8 1F3FE 200D 2642 ; minimally-qualified # 🧘🏾‍♂ E5.0 man in lotus position: medium-dark skin tone +1F9D8 1F3FF 200D 2642 FE0F ; fully-qualified # 🧘🏿‍♂️ E5.0 man in lotus position: dark skin tone +1F9D8 1F3FF 200D 2642 ; minimally-qualified # 🧘🏿‍♂ E5.0 man in lotus position: dark skin tone +1F9D8 200D 2640 FE0F ; fully-qualified # 🧘‍♀️ E5.0 woman in lotus position +1F9D8 200D 2640 ; minimally-qualified # 🧘‍♀ E5.0 woman in lotus position +1F9D8 1F3FB 200D 2640 FE0F ; fully-qualified # 🧘🏻‍♀️ E5.0 woman in lotus position: light skin tone +1F9D8 1F3FB 200D 2640 ; minimally-qualified # 🧘🏻‍♀ E5.0 woman in lotus position: light skin tone +1F9D8 1F3FC 200D 2640 FE0F ; fully-qualified # 🧘🏼‍♀️ E5.0 woman in lotus position: medium-light skin tone +1F9D8 1F3FC 200D 2640 ; minimally-qualified # 🧘🏼‍♀ E5.0 woman in lotus position: medium-light skin tone +1F9D8 1F3FD 200D 2640 FE0F ; fully-qualified # 🧘🏽‍♀️ E5.0 woman in lotus position: medium skin tone +1F9D8 1F3FD 200D 2640 ; minimally-qualified # 🧘🏽‍♀ E5.0 woman in lotus position: medium skin tone +1F9D8 1F3FE 200D 2640 FE0F ; fully-qualified # 🧘🏾‍♀️ E5.0 woman in lotus position: medium-dark skin tone +1F9D8 1F3FE 200D 2640 ; minimally-qualified # 🧘🏾‍♀ E5.0 woman in lotus position: medium-dark skin tone +1F9D8 1F3FF 200D 2640 FE0F ; fully-qualified # 🧘🏿‍♀️ E5.0 woman in lotus position: dark skin tone +1F9D8 1F3FF 200D 2640 ; minimally-qualified # 🧘🏿‍♀ E5.0 woman in lotus position: dark skin tone +1F6C0 ; fully-qualified # 🛀 E0.6 person taking bath +1F6C0 1F3FB ; fully-qualified # 🛀🏻 E1.0 person taking bath: light skin tone +1F6C0 1F3FC ; fully-qualified # 🛀🏼 E1.0 person taking bath: medium-light skin tone +1F6C0 1F3FD ; fully-qualified # 🛀🏽 E1.0 person taking bath: medium skin tone +1F6C0 1F3FE ; fully-qualified # 🛀🏾 E1.0 person taking bath: medium-dark skin tone +1F6C0 1F3FF ; fully-qualified # 🛀🏿 E1.0 person taking bath: dark skin tone +1F6CC ; fully-qualified # 🛌 E1.0 person in bed +1F6CC 1F3FB ; fully-qualified # 🛌🏻 E4.0 person in bed: light skin tone +1F6CC 1F3FC ; fully-qualified # 🛌🏼 E4.0 person in bed: medium-light skin tone +1F6CC 1F3FD ; fully-qualified # 🛌🏽 E4.0 person in bed: medium skin tone +1F6CC 1F3FE ; fully-qualified # 🛌🏾 E4.0 person in bed: medium-dark skin tone +1F6CC 1F3FF ; fully-qualified # 🛌🏿 E4.0 person in bed: dark skin tone + +# subgroup: family +1F9D1 200D 1F91D 200D 1F9D1 ; fully-qualified # 🧑‍🤝‍🧑 E12.0 people holding hands +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏻‍🤝‍🧑🏻 E12.0 people holding hands: light skin tone +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏻‍🤝‍🧑🏼 E12.1 people holding hands: light skin tone, medium-light skin tone +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏻‍🤝‍🧑🏽 E12.1 people holding hands: light skin tone, medium skin tone +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏻‍🤝‍🧑🏾 E12.1 people holding hands: light skin tone, medium-dark skin tone +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏻‍🤝‍🧑🏿 E12.1 people holding hands: light skin tone, dark skin tone +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏼‍🤝‍🧑🏻 E12.0 people holding hands: medium-light skin tone, light skin tone +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏼‍🤝‍🧑🏼 E12.0 people holding hands: medium-light skin tone +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏼‍🤝‍🧑🏽 E12.1 people holding hands: medium-light skin tone, medium skin tone +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏼‍🤝‍🧑🏾 E12.1 people holding hands: medium-light skin tone, medium-dark skin tone +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏼‍🤝‍🧑🏿 E12.1 people holding hands: medium-light skin tone, dark skin tone +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏽‍🤝‍🧑🏻 E12.0 people holding hands: medium skin tone, light skin tone +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏽‍🤝‍🧑🏼 E12.0 people holding hands: medium skin tone, medium-light skin tone +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏽‍🤝‍🧑🏽 E12.0 people holding hands: medium skin tone +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏽‍🤝‍🧑🏾 E12.1 people holding hands: medium skin tone, medium-dark skin tone +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏽‍🤝‍🧑🏿 E12.1 people holding hands: medium skin tone, dark skin tone +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏾‍🤝‍🧑🏻 E12.0 people holding hands: medium-dark skin tone, light skin tone +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏾‍🤝‍🧑🏼 E12.0 people holding hands: medium-dark skin tone, medium-light skin tone +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏾‍🤝‍🧑🏽 E12.0 people holding hands: medium-dark skin tone, medium skin tone +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏾‍🤝‍🧑🏾 E12.0 people holding hands: medium-dark skin tone +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏾‍🤝‍🧑🏿 E12.1 people holding hands: medium-dark skin tone, dark skin tone +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏿‍🤝‍🧑🏻 E12.0 people holding hands: dark skin tone, light skin tone +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏿‍🤝‍🧑🏼 E12.0 people holding hands: dark skin tone, medium-light skin tone +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏿‍🤝‍🧑🏽 E12.0 people holding hands: dark skin tone, medium skin tone +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏿‍🤝‍🧑🏾 E12.0 people holding hands: dark skin tone, medium-dark skin tone +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏿‍🤝‍🧑🏿 E12.0 people holding hands: dark skin tone +1F46D ; fully-qualified # 👭 E1.0 women holding hands +1F46D 1F3FB ; fully-qualified # 👭🏻 E12.0 women holding hands: light skin tone +1F469 1F3FB 200D 1F91D 200D 1F469 1F3FC ; fully-qualified # 👩🏻‍🤝‍👩🏼 E12.1 women holding hands: light skin tone, medium-light skin tone +1F469 1F3FB 200D 1F91D 200D 1F469 1F3FD ; fully-qualified # 👩🏻‍🤝‍👩🏽 E12.1 women holding hands: light skin tone, medium skin tone +1F469 1F3FB 200D 1F91D 200D 1F469 1F3FE ; fully-qualified # 👩🏻‍🤝‍👩🏾 E12.1 women holding hands: light skin tone, medium-dark skin tone +1F469 1F3FB 200D 1F91D 200D 1F469 1F3FF ; fully-qualified # 👩🏻‍🤝‍👩🏿 E12.1 women holding hands: light skin tone, dark skin tone +1F469 1F3FC 200D 1F91D 200D 1F469 1F3FB ; fully-qualified # 👩🏼‍🤝‍👩🏻 E12.0 women holding hands: medium-light skin tone, light skin tone +1F46D 1F3FC ; fully-qualified # 👭🏼 E12.0 women holding hands: medium-light skin tone +1F469 1F3FC 200D 1F91D 200D 1F469 1F3FD ; fully-qualified # 👩🏼‍🤝‍👩🏽 E12.1 women holding hands: medium-light skin tone, medium skin tone +1F469 1F3FC 200D 1F91D 200D 1F469 1F3FE ; fully-qualified # 👩🏼‍🤝‍👩🏾 E12.1 women holding hands: medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 1F91D 200D 1F469 1F3FF ; fully-qualified # 👩🏼‍🤝‍👩🏿 E12.1 women holding hands: medium-light skin tone, dark skin tone +1F469 1F3FD 200D 1F91D 200D 1F469 1F3FB ; fully-qualified # 👩🏽‍🤝‍👩🏻 E12.0 women holding hands: medium skin tone, light skin tone +1F469 1F3FD 200D 1F91D 200D 1F469 1F3FC ; fully-qualified # 👩🏽‍🤝‍👩🏼 E12.0 women holding hands: medium skin tone, medium-light skin tone +1F46D 1F3FD ; fully-qualified # 👭🏽 E12.0 women holding hands: medium skin tone +1F469 1F3FD 200D 1F91D 200D 1F469 1F3FE ; fully-qualified # 👩🏽‍🤝‍👩🏾 E12.1 women holding hands: medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 1F91D 200D 1F469 1F3FF ; fully-qualified # 👩🏽‍🤝‍👩🏿 E12.1 women holding hands: medium skin tone, dark skin tone +1F469 1F3FE 200D 1F91D 200D 1F469 1F3FB ; fully-qualified # 👩🏾‍🤝‍👩🏻 E12.0 women holding hands: medium-dark skin tone, light skin tone +1F469 1F3FE 200D 1F91D 200D 1F469 1F3FC ; fully-qualified # 👩🏾‍🤝‍👩🏼 E12.0 women holding hands: medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 1F91D 200D 1F469 1F3FD ; fully-qualified # 👩🏾‍🤝‍👩🏽 E12.0 women holding hands: medium-dark skin tone, medium skin tone +1F46D 1F3FE ; fully-qualified # 👭🏾 E12.0 women holding hands: medium-dark skin tone +1F469 1F3FE 200D 1F91D 200D 1F469 1F3FF ; fully-qualified # 👩🏾‍🤝‍👩🏿 E12.1 women holding hands: medium-dark skin tone, dark skin tone +1F469 1F3FF 200D 1F91D 200D 1F469 1F3FB ; fully-qualified # 👩🏿‍🤝‍👩🏻 E12.0 women holding hands: dark skin tone, light skin tone +1F469 1F3FF 200D 1F91D 200D 1F469 1F3FC ; fully-qualified # 👩🏿‍🤝‍👩🏼 E12.0 women holding hands: dark skin tone, medium-light skin tone +1F469 1F3FF 200D 1F91D 200D 1F469 1F3FD ; fully-qualified # 👩🏿‍🤝‍👩🏽 E12.0 women holding hands: dark skin tone, medium skin tone +1F469 1F3FF 200D 1F91D 200D 1F469 1F3FE ; fully-qualified # 👩🏿‍🤝‍👩🏾 E12.0 women holding hands: dark skin tone, medium-dark skin tone +1F46D 1F3FF ; fully-qualified # 👭🏿 E12.0 women holding hands: dark skin tone +1F46B ; fully-qualified # 👫 E0.6 woman and man holding hands +1F46B 1F3FB ; fully-qualified # 👫🏻 E12.0 woman and man holding hands: light skin tone +1F469 1F3FB 200D 1F91D 200D 1F468 1F3FC ; fully-qualified # 👩🏻‍🤝‍👨🏼 E12.0 woman and man holding hands: light skin tone, medium-light skin tone +1F469 1F3FB 200D 1F91D 200D 1F468 1F3FD ; fully-qualified # 👩🏻‍🤝‍👨🏽 E12.0 woman and man holding hands: light skin tone, medium skin tone +1F469 1F3FB 200D 1F91D 200D 1F468 1F3FE ; fully-qualified # 👩🏻‍🤝‍👨🏾 E12.0 woman and man holding hands: light skin tone, medium-dark skin tone +1F469 1F3FB 200D 1F91D 200D 1F468 1F3FF ; fully-qualified # 👩🏻‍🤝‍👨🏿 E12.0 woman and man holding hands: light skin tone, dark skin tone +1F469 1F3FC 200D 1F91D 200D 1F468 1F3FB ; fully-qualified # 👩🏼‍🤝‍👨🏻 E12.0 woman and man holding hands: medium-light skin tone, light skin tone +1F46B 1F3FC ; fully-qualified # 👫🏼 E12.0 woman and man holding hands: medium-light skin tone +1F469 1F3FC 200D 1F91D 200D 1F468 1F3FD ; fully-qualified # 👩🏼‍🤝‍👨🏽 E12.0 woman and man holding hands: medium-light skin tone, medium skin tone +1F469 1F3FC 200D 1F91D 200D 1F468 1F3FE ; fully-qualified # 👩🏼‍🤝‍👨🏾 E12.0 woman and man holding hands: medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 1F91D 200D 1F468 1F3FF ; fully-qualified # 👩🏼‍🤝‍👨🏿 E12.0 woman and man holding hands: medium-light skin tone, dark skin tone +1F469 1F3FD 200D 1F91D 200D 1F468 1F3FB ; fully-qualified # 👩🏽‍🤝‍👨🏻 E12.0 woman and man holding hands: medium skin tone, light skin tone +1F469 1F3FD 200D 1F91D 200D 1F468 1F3FC ; fully-qualified # 👩🏽‍🤝‍👨🏼 E12.0 woman and man holding hands: medium skin tone, medium-light skin tone +1F46B 1F3FD ; fully-qualified # 👫🏽 E12.0 woman and man holding hands: medium skin tone +1F469 1F3FD 200D 1F91D 200D 1F468 1F3FE ; fully-qualified # 👩🏽‍🤝‍👨🏾 E12.0 woman and man holding hands: medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 1F91D 200D 1F468 1F3FF ; fully-qualified # 👩🏽‍🤝‍👨🏿 E12.0 woman and man holding hands: medium skin tone, dark skin tone +1F469 1F3FE 200D 1F91D 200D 1F468 1F3FB ; fully-qualified # 👩🏾‍🤝‍👨🏻 E12.0 woman and man holding hands: medium-dark skin tone, light skin tone +1F469 1F3FE 200D 1F91D 200D 1F468 1F3FC ; fully-qualified # 👩🏾‍🤝‍👨🏼 E12.0 woman and man holding hands: medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 1F91D 200D 1F468 1F3FD ; fully-qualified # 👩🏾‍🤝‍👨🏽 E12.0 woman and man holding hands: medium-dark skin tone, medium skin tone +1F46B 1F3FE ; fully-qualified # 👫🏾 E12.0 woman and man holding hands: medium-dark skin tone +1F469 1F3FE 200D 1F91D 200D 1F468 1F3FF ; fully-qualified # 👩🏾‍🤝‍👨🏿 E12.0 woman and man holding hands: medium-dark skin tone, dark skin tone +1F469 1F3FF 200D 1F91D 200D 1F468 1F3FB ; fully-qualified # 👩🏿‍🤝‍👨🏻 E12.0 woman and man holding hands: dark skin tone, light skin tone +1F469 1F3FF 200D 1F91D 200D 1F468 1F3FC ; fully-qualified # 👩🏿‍🤝‍👨🏼 E12.0 woman and man holding hands: dark skin tone, medium-light skin tone +1F469 1F3FF 200D 1F91D 200D 1F468 1F3FD ; fully-qualified # 👩🏿‍🤝‍👨🏽 E12.0 woman and man holding hands: dark skin tone, medium skin tone +1F469 1F3FF 200D 1F91D 200D 1F468 1F3FE ; fully-qualified # 👩🏿‍🤝‍👨🏾 E12.0 woman and man holding hands: dark skin tone, medium-dark skin tone +1F46B 1F3FF ; fully-qualified # 👫🏿 E12.0 woman and man holding hands: dark skin tone +1F46C ; fully-qualified # 👬 E1.0 men holding hands +1F46C 1F3FB ; fully-qualified # 👬🏻 E12.0 men holding hands: light skin tone +1F468 1F3FB 200D 1F91D 200D 1F468 1F3FC ; fully-qualified # 👨🏻‍🤝‍👨🏼 E12.1 men holding hands: light skin tone, medium-light skin tone +1F468 1F3FB 200D 1F91D 200D 1F468 1F3FD ; fully-qualified # 👨🏻‍🤝‍👨🏽 E12.1 men holding hands: light skin tone, medium skin tone +1F468 1F3FB 200D 1F91D 200D 1F468 1F3FE ; fully-qualified # 👨🏻‍🤝‍👨🏾 E12.1 men holding hands: light skin tone, medium-dark skin tone +1F468 1F3FB 200D 1F91D 200D 1F468 1F3FF ; fully-qualified # 👨🏻‍🤝‍👨🏿 E12.1 men holding hands: light skin tone, dark skin tone +1F468 1F3FC 200D 1F91D 200D 1F468 1F3FB ; fully-qualified # 👨🏼‍🤝‍👨🏻 E12.0 men holding hands: medium-light skin tone, light skin tone +1F46C 1F3FC ; fully-qualified # 👬🏼 E12.0 men holding hands: medium-light skin tone +1F468 1F3FC 200D 1F91D 200D 1F468 1F3FD ; fully-qualified # 👨🏼‍🤝‍👨🏽 E12.1 men holding hands: medium-light skin tone, medium skin tone +1F468 1F3FC 200D 1F91D 200D 1F468 1F3FE ; fully-qualified # 👨🏼‍🤝‍👨🏾 E12.1 men holding hands: medium-light skin tone, medium-dark skin tone +1F468 1F3FC 200D 1F91D 200D 1F468 1F3FF ; fully-qualified # 👨🏼‍🤝‍👨🏿 E12.1 men holding hands: medium-light skin tone, dark skin tone +1F468 1F3FD 200D 1F91D 200D 1F468 1F3FB ; fully-qualified # 👨🏽‍🤝‍👨🏻 E12.0 men holding hands: medium skin tone, light skin tone +1F468 1F3FD 200D 1F91D 200D 1F468 1F3FC ; fully-qualified # 👨🏽‍🤝‍👨🏼 E12.0 men holding hands: medium skin tone, medium-light skin tone +1F46C 1F3FD ; fully-qualified # 👬🏽 E12.0 men holding hands: medium skin tone +1F468 1F3FD 200D 1F91D 200D 1F468 1F3FE ; fully-qualified # 👨🏽‍🤝‍👨🏾 E12.1 men holding hands: medium skin tone, medium-dark skin tone +1F468 1F3FD 200D 1F91D 200D 1F468 1F3FF ; fully-qualified # 👨🏽‍🤝‍👨🏿 E12.1 men holding hands: medium skin tone, dark skin tone +1F468 1F3FE 200D 1F91D 200D 1F468 1F3FB ; fully-qualified # 👨🏾‍🤝‍👨🏻 E12.0 men holding hands: medium-dark skin tone, light skin tone +1F468 1F3FE 200D 1F91D 200D 1F468 1F3FC ; fully-qualified # 👨🏾‍🤝‍👨🏼 E12.0 men holding hands: medium-dark skin tone, medium-light skin tone +1F468 1F3FE 200D 1F91D 200D 1F468 1F3FD ; fully-qualified # 👨🏾‍🤝‍👨🏽 E12.0 men holding hands: medium-dark skin tone, medium skin tone +1F46C 1F3FE ; fully-qualified # 👬🏾 E12.0 men holding hands: medium-dark skin tone +1F468 1F3FE 200D 1F91D 200D 1F468 1F3FF ; fully-qualified # 👨🏾‍🤝‍👨🏿 E12.1 men holding hands: medium-dark skin tone, dark skin tone +1F468 1F3FF 200D 1F91D 200D 1F468 1F3FB ; fully-qualified # 👨🏿‍🤝‍👨🏻 E12.0 men holding hands: dark skin tone, light skin tone +1F468 1F3FF 200D 1F91D 200D 1F468 1F3FC ; fully-qualified # 👨🏿‍🤝‍👨🏼 E12.0 men holding hands: dark skin tone, medium-light skin tone +1F468 1F3FF 200D 1F91D 200D 1F468 1F3FD ; fully-qualified # 👨🏿‍🤝‍👨🏽 E12.0 men holding hands: dark skin tone, medium skin tone +1F468 1F3FF 200D 1F91D 200D 1F468 1F3FE ; fully-qualified # 👨🏿‍🤝‍👨🏾 E12.0 men holding hands: dark skin tone, medium-dark skin tone +1F46C 1F3FF ; fully-qualified # 👬🏿 E12.0 men holding hands: dark skin tone +1F48F ; fully-qualified # 💏 E0.6 kiss +1F48F 1F3FB ; fully-qualified # 💏🏻 E13.1 kiss: light skin tone +1F48F 1F3FC ; fully-qualified # 💏🏼 E13.1 kiss: medium-light skin tone +1F48F 1F3FD ; fully-qualified # 💏🏽 E13.1 kiss: medium skin tone +1F48F 1F3FE ; fully-qualified # 💏🏾 E13.1 kiss: medium-dark skin tone +1F48F 1F3FF ; fully-qualified # 💏🏿 E13.1 kiss: dark skin tone +1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏻‍❤️‍💋‍🧑🏼 E13.1 kiss: person, person, light skin tone, medium-light skin tone +1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FC ; minimally-qualified # 🧑🏻‍❤‍💋‍🧑🏼 E13.1 kiss: person, person, light skin tone, medium-light skin tone +1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏻‍❤️‍💋‍🧑🏽 E13.1 kiss: person, person, light skin tone, medium skin tone +1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FD ; minimally-qualified # 🧑🏻‍❤‍💋‍🧑🏽 E13.1 kiss: person, person, light skin tone, medium skin tone +1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏻‍❤️‍💋‍🧑🏾 E13.1 kiss: person, person, light skin tone, medium-dark skin tone +1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FE ; minimally-qualified # 🧑🏻‍❤‍💋‍🧑🏾 E13.1 kiss: person, person, light skin tone, medium-dark skin tone +1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏻‍❤️‍💋‍🧑🏿 E13.1 kiss: person, person, light skin tone, dark skin tone +1F9D1 1F3FB 200D 2764 200D 1F48B 200D 1F9D1 1F3FF ; minimally-qualified # 🧑🏻‍❤‍💋‍🧑🏿 E13.1 kiss: person, person, light skin tone, dark skin tone +1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏼‍❤️‍💋‍🧑🏻 E13.1 kiss: person, person, medium-light skin tone, light skin tone +1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FB ; minimally-qualified # 🧑🏼‍❤‍💋‍🧑🏻 E13.1 kiss: person, person, medium-light skin tone, light skin tone +1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏼‍❤️‍💋‍🧑🏽 E13.1 kiss: person, person, medium-light skin tone, medium skin tone +1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FD ; minimally-qualified # 🧑🏼‍❤‍💋‍🧑🏽 E13.1 kiss: person, person, medium-light skin tone, medium skin tone +1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏼‍❤️‍💋‍🧑🏾 E13.1 kiss: person, person, medium-light skin tone, medium-dark skin tone +1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FE ; minimally-qualified # 🧑🏼‍❤‍💋‍🧑🏾 E13.1 kiss: person, person, medium-light skin tone, medium-dark skin tone +1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏼‍❤️‍💋‍🧑🏿 E13.1 kiss: person, person, medium-light skin tone, dark skin tone +1F9D1 1F3FC 200D 2764 200D 1F48B 200D 1F9D1 1F3FF ; minimally-qualified # 🧑🏼‍❤‍💋‍🧑🏿 E13.1 kiss: person, person, medium-light skin tone, dark skin tone +1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏽‍❤️‍💋‍🧑🏻 E13.1 kiss: person, person, medium skin tone, light skin tone +1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FB ; minimally-qualified # 🧑🏽‍❤‍💋‍🧑🏻 E13.1 kiss: person, person, medium skin tone, light skin tone +1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏽‍❤️‍💋‍🧑🏼 E13.1 kiss: person, person, medium skin tone, medium-light skin tone +1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FC ; minimally-qualified # 🧑🏽‍❤‍💋‍🧑🏼 E13.1 kiss: person, person, medium skin tone, medium-light skin tone +1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏽‍❤️‍💋‍🧑🏾 E13.1 kiss: person, person, medium skin tone, medium-dark skin tone +1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FE ; minimally-qualified # 🧑🏽‍❤‍💋‍🧑🏾 E13.1 kiss: person, person, medium skin tone, medium-dark skin tone +1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏽‍❤️‍💋‍🧑🏿 E13.1 kiss: person, person, medium skin tone, dark skin tone +1F9D1 1F3FD 200D 2764 200D 1F48B 200D 1F9D1 1F3FF ; minimally-qualified # 🧑🏽‍❤‍💋‍🧑🏿 E13.1 kiss: person, person, medium skin tone, dark skin tone +1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏾‍❤️‍💋‍🧑🏻 E13.1 kiss: person, person, medium-dark skin tone, light skin tone +1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FB ; minimally-qualified # 🧑🏾‍❤‍💋‍🧑🏻 E13.1 kiss: person, person, medium-dark skin tone, light skin tone +1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏾‍❤️‍💋‍🧑🏼 E13.1 kiss: person, person, medium-dark skin tone, medium-light skin tone +1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FC ; minimally-qualified # 🧑🏾‍❤‍💋‍🧑🏼 E13.1 kiss: person, person, medium-dark skin tone, medium-light skin tone +1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏾‍❤️‍💋‍🧑🏽 E13.1 kiss: person, person, medium-dark skin tone, medium skin tone +1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FD ; minimally-qualified # 🧑🏾‍❤‍💋‍🧑🏽 E13.1 kiss: person, person, medium-dark skin tone, medium skin tone +1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏾‍❤️‍💋‍🧑🏿 E13.1 kiss: person, person, medium-dark skin tone, dark skin tone +1F9D1 1F3FE 200D 2764 200D 1F48B 200D 1F9D1 1F3FF ; minimally-qualified # 🧑🏾‍❤‍💋‍🧑🏿 E13.1 kiss: person, person, medium-dark skin tone, dark skin tone +1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏿‍❤️‍💋‍🧑🏻 E13.1 kiss: person, person, dark skin tone, light skin tone +1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FB ; minimally-qualified # 🧑🏿‍❤‍💋‍🧑🏻 E13.1 kiss: person, person, dark skin tone, light skin tone +1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏿‍❤️‍💋‍🧑🏼 E13.1 kiss: person, person, dark skin tone, medium-light skin tone +1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FC ; minimally-qualified # 🧑🏿‍❤‍💋‍🧑🏼 E13.1 kiss: person, person, dark skin tone, medium-light skin tone +1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏿‍❤️‍💋‍🧑🏽 E13.1 kiss: person, person, dark skin tone, medium skin tone +1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FD ; minimally-qualified # 🧑🏿‍❤‍💋‍🧑🏽 E13.1 kiss: person, person, dark skin tone, medium skin tone +1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏿‍❤️‍💋‍🧑🏾 E13.1 kiss: person, person, dark skin tone, medium-dark skin tone +1F9D1 1F3FF 200D 2764 200D 1F48B 200D 1F9D1 1F3FE ; minimally-qualified # 🧑🏿‍❤‍💋‍🧑🏾 E13.1 kiss: person, person, dark skin tone, medium-dark skin tone +1F469 200D 2764 FE0F 200D 1F48B 200D 1F468 ; fully-qualified # 👩‍❤️‍💋‍👨 E2.0 kiss: woman, man +1F469 200D 2764 200D 1F48B 200D 1F468 ; minimally-qualified # 👩‍❤‍💋‍👨 E2.0 kiss: woman, man +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👩🏻‍❤️‍💋‍👨🏻 E13.1 kiss: woman, man, light skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👩🏻‍❤‍💋‍👨🏻 E13.1 kiss: woman, man, light skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👩🏻‍❤️‍💋‍👨🏼 E13.1 kiss: woman, man, light skin tone, medium-light skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👩🏻‍❤‍💋‍👨🏼 E13.1 kiss: woman, man, light skin tone, medium-light skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👩🏻‍❤️‍💋‍👨🏽 E13.1 kiss: woman, man, light skin tone, medium skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👩🏻‍❤‍💋‍👨🏽 E13.1 kiss: woman, man, light skin tone, medium skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👩🏻‍❤️‍💋‍👨🏾 E13.1 kiss: woman, man, light skin tone, medium-dark skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👩🏻‍❤‍💋‍👨🏾 E13.1 kiss: woman, man, light skin tone, medium-dark skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👩🏻‍❤️‍💋‍👨🏿 E13.1 kiss: woman, man, light skin tone, dark skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👩🏻‍❤‍💋‍👨🏿 E13.1 kiss: woman, man, light skin tone, dark skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👩🏼‍❤️‍💋‍👨🏻 E13.1 kiss: woman, man, medium-light skin tone, light skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👩🏼‍❤‍💋‍👨🏻 E13.1 kiss: woman, man, medium-light skin tone, light skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👩🏼‍❤️‍💋‍👨🏼 E13.1 kiss: woman, man, medium-light skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👩🏼‍❤‍💋‍👨🏼 E13.1 kiss: woman, man, medium-light skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👩🏼‍❤️‍💋‍👨🏽 E13.1 kiss: woman, man, medium-light skin tone, medium skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👩🏼‍❤‍💋‍👨🏽 E13.1 kiss: woman, man, medium-light skin tone, medium skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👩🏼‍❤️‍💋‍👨🏾 E13.1 kiss: woman, man, medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👩🏼‍❤‍💋‍👨🏾 E13.1 kiss: woman, man, medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👩🏼‍❤️‍💋‍👨🏿 E13.1 kiss: woman, man, medium-light skin tone, dark skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👩🏼‍❤‍💋‍👨🏿 E13.1 kiss: woman, man, medium-light skin tone, dark skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👩🏽‍❤️‍💋‍👨🏻 E13.1 kiss: woman, man, medium skin tone, light skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👩🏽‍❤‍💋‍👨🏻 E13.1 kiss: woman, man, medium skin tone, light skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👩🏽‍❤️‍💋‍👨🏼 E13.1 kiss: woman, man, medium skin tone, medium-light skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👩🏽‍❤‍💋‍👨🏼 E13.1 kiss: woman, man, medium skin tone, medium-light skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👩🏽‍❤️‍💋‍👨🏽 E13.1 kiss: woman, man, medium skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👩🏽‍❤‍💋‍👨🏽 E13.1 kiss: woman, man, medium skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👩🏽‍❤️‍💋‍👨🏾 E13.1 kiss: woman, man, medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👩🏽‍❤‍💋‍👨🏾 E13.1 kiss: woman, man, medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👩🏽‍❤️‍💋‍👨🏿 E13.1 kiss: woman, man, medium skin tone, dark skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👩🏽‍❤‍💋‍👨🏿 E13.1 kiss: woman, man, medium skin tone, dark skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👩🏾‍❤️‍💋‍👨🏻 E13.1 kiss: woman, man, medium-dark skin tone, light skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👩🏾‍❤‍💋‍👨🏻 E13.1 kiss: woman, man, medium-dark skin tone, light skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👩🏾‍❤️‍💋‍👨🏼 E13.1 kiss: woman, man, medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👩🏾‍❤‍💋‍👨🏼 E13.1 kiss: woman, man, medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👩🏾‍❤️‍💋‍👨🏽 E13.1 kiss: woman, man, medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👩🏾‍❤‍💋‍👨🏽 E13.1 kiss: woman, man, medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👩🏾‍❤️‍💋‍👨🏾 E13.1 kiss: woman, man, medium-dark skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👩🏾‍❤‍💋‍👨🏾 E13.1 kiss: woman, man, medium-dark skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👩🏾‍❤️‍💋‍👨🏿 E13.1 kiss: woman, man, medium-dark skin tone, dark skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👩🏾‍❤‍💋‍👨🏿 E13.1 kiss: woman, man, medium-dark skin tone, dark skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👩🏿‍❤️‍💋‍👨🏻 E13.1 kiss: woman, man, dark skin tone, light skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👩🏿‍❤‍💋‍👨🏻 E13.1 kiss: woman, man, dark skin tone, light skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👩🏿‍❤️‍💋‍👨🏼 E13.1 kiss: woman, man, dark skin tone, medium-light skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👩🏿‍❤‍💋‍👨🏼 E13.1 kiss: woman, man, dark skin tone, medium-light skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👩🏿‍❤️‍💋‍👨🏽 E13.1 kiss: woman, man, dark skin tone, medium skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👩🏿‍❤‍💋‍👨🏽 E13.1 kiss: woman, man, dark skin tone, medium skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👩🏿‍❤️‍💋‍👨🏾 E13.1 kiss: woman, man, dark skin tone, medium-dark skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👩🏿‍❤‍💋‍👨🏾 E13.1 kiss: woman, man, dark skin tone, medium-dark skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👩🏿‍❤️‍💋‍👨🏿 E13.1 kiss: woman, man, dark skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👩🏿‍❤‍💋‍👨🏿 E13.1 kiss: woman, man, dark skin tone +1F468 200D 2764 FE0F 200D 1F48B 200D 1F468 ; fully-qualified # 👨‍❤️‍💋‍👨 E2.0 kiss: man, man +1F468 200D 2764 200D 1F48B 200D 1F468 ; minimally-qualified # 👨‍❤‍💋‍👨 E2.0 kiss: man, man +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👨🏻‍❤️‍💋‍👨🏻 E13.1 kiss: man, man, light skin tone +1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👨🏻‍❤‍💋‍👨🏻 E13.1 kiss: man, man, light skin tone +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👨🏻‍❤️‍💋‍👨🏼 E13.1 kiss: man, man, light skin tone, medium-light skin tone +1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👨🏻‍❤‍💋‍👨🏼 E13.1 kiss: man, man, light skin tone, medium-light skin tone +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👨🏻‍❤️‍💋‍👨🏽 E13.1 kiss: man, man, light skin tone, medium skin tone +1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👨🏻‍❤‍💋‍👨🏽 E13.1 kiss: man, man, light skin tone, medium skin tone +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👨🏻‍❤️‍💋‍👨🏾 E13.1 kiss: man, man, light skin tone, medium-dark skin tone +1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👨🏻‍❤‍💋‍👨🏾 E13.1 kiss: man, man, light skin tone, medium-dark skin tone +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👨🏻‍❤️‍💋‍👨🏿 E13.1 kiss: man, man, light skin tone, dark skin tone +1F468 1F3FB 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👨🏻‍❤‍💋‍👨🏿 E13.1 kiss: man, man, light skin tone, dark skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👨🏼‍❤️‍💋‍👨🏻 E13.1 kiss: man, man, medium-light skin tone, light skin tone +1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👨🏼‍❤‍💋‍👨🏻 E13.1 kiss: man, man, medium-light skin tone, light skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👨🏼‍❤️‍💋‍👨🏼 E13.1 kiss: man, man, medium-light skin tone +1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👨🏼‍❤‍💋‍👨🏼 E13.1 kiss: man, man, medium-light skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👨🏼‍❤️‍💋‍👨🏽 E13.1 kiss: man, man, medium-light skin tone, medium skin tone +1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👨🏼‍❤‍💋‍👨🏽 E13.1 kiss: man, man, medium-light skin tone, medium skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👨🏼‍❤️‍💋‍👨🏾 E13.1 kiss: man, man, medium-light skin tone, medium-dark skin tone +1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👨🏼‍❤‍💋‍👨🏾 E13.1 kiss: man, man, medium-light skin tone, medium-dark skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👨🏼‍❤️‍💋‍👨🏿 E13.1 kiss: man, man, medium-light skin tone, dark skin tone +1F468 1F3FC 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👨🏼‍❤‍💋‍👨🏿 E13.1 kiss: man, man, medium-light skin tone, dark skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👨🏽‍❤️‍💋‍👨🏻 E13.1 kiss: man, man, medium skin tone, light skin tone +1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👨🏽‍❤‍💋‍👨🏻 E13.1 kiss: man, man, medium skin tone, light skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👨🏽‍❤️‍💋‍👨🏼 E13.1 kiss: man, man, medium skin tone, medium-light skin tone +1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👨🏽‍❤‍💋‍👨🏼 E13.1 kiss: man, man, medium skin tone, medium-light skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👨🏽‍❤️‍💋‍👨🏽 E13.1 kiss: man, man, medium skin tone +1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👨🏽‍❤‍💋‍👨🏽 E13.1 kiss: man, man, medium skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👨🏽‍❤️‍💋‍👨🏾 E13.1 kiss: man, man, medium skin tone, medium-dark skin tone +1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👨🏽‍❤‍💋‍👨🏾 E13.1 kiss: man, man, medium skin tone, medium-dark skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👨🏽‍❤️‍💋‍👨🏿 E13.1 kiss: man, man, medium skin tone, dark skin tone +1F468 1F3FD 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👨🏽‍❤‍💋‍👨🏿 E13.1 kiss: man, man, medium skin tone, dark skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👨🏾‍❤️‍💋‍👨🏻 E13.1 kiss: man, man, medium-dark skin tone, light skin tone +1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👨🏾‍❤‍💋‍👨🏻 E13.1 kiss: man, man, medium-dark skin tone, light skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👨🏾‍❤️‍💋‍👨🏼 E13.1 kiss: man, man, medium-dark skin tone, medium-light skin tone +1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👨🏾‍❤‍💋‍👨🏼 E13.1 kiss: man, man, medium-dark skin tone, medium-light skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👨🏾‍❤️‍💋‍👨🏽 E13.1 kiss: man, man, medium-dark skin tone, medium skin tone +1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👨🏾‍❤‍💋‍👨🏽 E13.1 kiss: man, man, medium-dark skin tone, medium skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👨🏾‍❤️‍💋‍👨🏾 E13.1 kiss: man, man, medium-dark skin tone +1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👨🏾‍❤‍💋‍👨🏾 E13.1 kiss: man, man, medium-dark skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👨🏾‍❤️‍💋‍👨🏿 E13.1 kiss: man, man, medium-dark skin tone, dark skin tone +1F468 1F3FE 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👨🏾‍❤‍💋‍👨🏿 E13.1 kiss: man, man, medium-dark skin tone, dark skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB ; fully-qualified # 👨🏿‍❤️‍💋‍👨🏻 E13.1 kiss: man, man, dark skin tone, light skin tone +1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FB ; minimally-qualified # 👨🏿‍❤‍💋‍👨🏻 E13.1 kiss: man, man, dark skin tone, light skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC ; fully-qualified # 👨🏿‍❤️‍💋‍👨🏼 E13.1 kiss: man, man, dark skin tone, medium-light skin tone +1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FC ; minimally-qualified # 👨🏿‍❤‍💋‍👨🏼 E13.1 kiss: man, man, dark skin tone, medium-light skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD ; fully-qualified # 👨🏿‍❤️‍💋‍👨🏽 E13.1 kiss: man, man, dark skin tone, medium skin tone +1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FD ; minimally-qualified # 👨🏿‍❤‍💋‍👨🏽 E13.1 kiss: man, man, dark skin tone, medium skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE ; fully-qualified # 👨🏿‍❤️‍💋‍👨🏾 E13.1 kiss: man, man, dark skin tone, medium-dark skin tone +1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FE ; minimally-qualified # 👨🏿‍❤‍💋‍👨🏾 E13.1 kiss: man, man, dark skin tone, medium-dark skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF ; fully-qualified # 👨🏿‍❤️‍💋‍👨🏿 E13.1 kiss: man, man, dark skin tone +1F468 1F3FF 200D 2764 200D 1F48B 200D 1F468 1F3FF ; minimally-qualified # 👨🏿‍❤‍💋‍👨🏿 E13.1 kiss: man, man, dark skin tone +1F469 200D 2764 FE0F 200D 1F48B 200D 1F469 ; fully-qualified # 👩‍❤️‍💋‍👩 E2.0 kiss: woman, woman +1F469 200D 2764 200D 1F48B 200D 1F469 ; minimally-qualified # 👩‍❤‍💋‍👩 E2.0 kiss: woman, woman +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB ; fully-qualified # 👩🏻‍❤️‍💋‍👩🏻 E13.1 kiss: woman, woman, light skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FB ; minimally-qualified # 👩🏻‍❤‍💋‍👩🏻 E13.1 kiss: woman, woman, light skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC ; fully-qualified # 👩🏻‍❤️‍💋‍👩🏼 E13.1 kiss: woman, woman, light skin tone, medium-light skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FC ; minimally-qualified # 👩🏻‍❤‍💋‍👩🏼 E13.1 kiss: woman, woman, light skin tone, medium-light skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD ; fully-qualified # 👩🏻‍❤️‍💋‍👩🏽 E13.1 kiss: woman, woman, light skin tone, medium skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FD ; minimally-qualified # 👩🏻‍❤‍💋‍👩🏽 E13.1 kiss: woman, woman, light skin tone, medium skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE ; fully-qualified # 👩🏻‍❤️‍💋‍👩🏾 E13.1 kiss: woman, woman, light skin tone, medium-dark skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FE ; minimally-qualified # 👩🏻‍❤‍💋‍👩🏾 E13.1 kiss: woman, woman, light skin tone, medium-dark skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF ; fully-qualified # 👩🏻‍❤️‍💋‍👩🏿 E13.1 kiss: woman, woman, light skin tone, dark skin tone +1F469 1F3FB 200D 2764 200D 1F48B 200D 1F469 1F3FF ; minimally-qualified # 👩🏻‍❤‍💋‍👩🏿 E13.1 kiss: woman, woman, light skin tone, dark skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB ; fully-qualified # 👩🏼‍❤️‍💋‍👩🏻 E13.1 kiss: woman, woman, medium-light skin tone, light skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FB ; minimally-qualified # 👩🏼‍❤‍💋‍👩🏻 E13.1 kiss: woman, woman, medium-light skin tone, light skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC ; fully-qualified # 👩🏼‍❤️‍💋‍👩🏼 E13.1 kiss: woman, woman, medium-light skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FC ; minimally-qualified # 👩🏼‍❤‍💋‍👩🏼 E13.1 kiss: woman, woman, medium-light skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD ; fully-qualified # 👩🏼‍❤️‍💋‍👩🏽 E13.1 kiss: woman, woman, medium-light skin tone, medium skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FD ; minimally-qualified # 👩🏼‍❤‍💋‍👩🏽 E13.1 kiss: woman, woman, medium-light skin tone, medium skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE ; fully-qualified # 👩🏼‍❤️‍💋‍👩🏾 E13.1 kiss: woman, woman, medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FE ; minimally-qualified # 👩🏼‍❤‍💋‍👩🏾 E13.1 kiss: woman, woman, medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF ; fully-qualified # 👩🏼‍❤️‍💋‍👩🏿 E13.1 kiss: woman, woman, medium-light skin tone, dark skin tone +1F469 1F3FC 200D 2764 200D 1F48B 200D 1F469 1F3FF ; minimally-qualified # 👩🏼‍❤‍💋‍👩🏿 E13.1 kiss: woman, woman, medium-light skin tone, dark skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB ; fully-qualified # 👩🏽‍❤️‍💋‍👩🏻 E13.1 kiss: woman, woman, medium skin tone, light skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FB ; minimally-qualified # 👩🏽‍❤‍💋‍👩🏻 E13.1 kiss: woman, woman, medium skin tone, light skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC ; fully-qualified # 👩🏽‍❤️‍💋‍👩🏼 E13.1 kiss: woman, woman, medium skin tone, medium-light skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FC ; minimally-qualified # 👩🏽‍❤‍💋‍👩🏼 E13.1 kiss: woman, woman, medium skin tone, medium-light skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD ; fully-qualified # 👩🏽‍❤️‍💋‍👩🏽 E13.1 kiss: woman, woman, medium skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FD ; minimally-qualified # 👩🏽‍❤‍💋‍👩🏽 E13.1 kiss: woman, woman, medium skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE ; fully-qualified # 👩🏽‍❤️‍💋‍👩🏾 E13.1 kiss: woman, woman, medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FE ; minimally-qualified # 👩🏽‍❤‍💋‍👩🏾 E13.1 kiss: woman, woman, medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF ; fully-qualified # 👩🏽‍❤️‍💋‍👩🏿 E13.1 kiss: woman, woman, medium skin tone, dark skin tone +1F469 1F3FD 200D 2764 200D 1F48B 200D 1F469 1F3FF ; minimally-qualified # 👩🏽‍❤‍💋‍👩🏿 E13.1 kiss: woman, woman, medium skin tone, dark skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB ; fully-qualified # 👩🏾‍❤️‍💋‍👩🏻 E13.1 kiss: woman, woman, medium-dark skin tone, light skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FB ; minimally-qualified # 👩🏾‍❤‍💋‍👩🏻 E13.1 kiss: woman, woman, medium-dark skin tone, light skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC ; fully-qualified # 👩🏾‍❤️‍💋‍👩🏼 E13.1 kiss: woman, woman, medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FC ; minimally-qualified # 👩🏾‍❤‍💋‍👩🏼 E13.1 kiss: woman, woman, medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD ; fully-qualified # 👩🏾‍❤️‍💋‍👩🏽 E13.1 kiss: woman, woman, medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FD ; minimally-qualified # 👩🏾‍❤‍💋‍👩🏽 E13.1 kiss: woman, woman, medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE ; fully-qualified # 👩🏾‍❤️‍💋‍👩🏾 E13.1 kiss: woman, woman, medium-dark skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FE ; minimally-qualified # 👩🏾‍❤‍💋‍👩🏾 E13.1 kiss: woman, woman, medium-dark skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF ; fully-qualified # 👩🏾‍❤️‍💋‍👩🏿 E13.1 kiss: woman, woman, medium-dark skin tone, dark skin tone +1F469 1F3FE 200D 2764 200D 1F48B 200D 1F469 1F3FF ; minimally-qualified # 👩🏾‍❤‍💋‍👩🏿 E13.1 kiss: woman, woman, medium-dark skin tone, dark skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB ; fully-qualified # 👩🏿‍❤️‍💋‍👩🏻 E13.1 kiss: woman, woman, dark skin tone, light skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FB ; minimally-qualified # 👩🏿‍❤‍💋‍👩🏻 E13.1 kiss: woman, woman, dark skin tone, light skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC ; fully-qualified # 👩🏿‍❤️‍💋‍👩🏼 E13.1 kiss: woman, woman, dark skin tone, medium-light skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FC ; minimally-qualified # 👩🏿‍❤‍💋‍👩🏼 E13.1 kiss: woman, woman, dark skin tone, medium-light skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD ; fully-qualified # 👩🏿‍❤️‍💋‍👩🏽 E13.1 kiss: woman, woman, dark skin tone, medium skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FD ; minimally-qualified # 👩🏿‍❤‍💋‍👩🏽 E13.1 kiss: woman, woman, dark skin tone, medium skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE ; fully-qualified # 👩🏿‍❤️‍💋‍👩🏾 E13.1 kiss: woman, woman, dark skin tone, medium-dark skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FE ; minimally-qualified # 👩🏿‍❤‍💋‍👩🏾 E13.1 kiss: woman, woman, dark skin tone, medium-dark skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF ; fully-qualified # 👩🏿‍❤️‍💋‍👩🏿 E13.1 kiss: woman, woman, dark skin tone +1F469 1F3FF 200D 2764 200D 1F48B 200D 1F469 1F3FF ; minimally-qualified # 👩🏿‍❤‍💋‍👩🏿 E13.1 kiss: woman, woman, dark skin tone +1F491 ; fully-qualified # 💑 E0.6 couple with heart +1F491 1F3FB ; fully-qualified # 💑🏻 E13.1 couple with heart: light skin tone +1F491 1F3FC ; fully-qualified # 💑🏼 E13.1 couple with heart: medium-light skin tone +1F491 1F3FD ; fully-qualified # 💑🏽 E13.1 couple with heart: medium skin tone +1F491 1F3FE ; fully-qualified # 💑🏾 E13.1 couple with heart: medium-dark skin tone +1F491 1F3FF ; fully-qualified # 💑🏿 E13.1 couple with heart: dark skin tone +1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏻‍❤️‍🧑🏼 E13.1 couple with heart: person, person, light skin tone, medium-light skin tone +1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FC ; minimally-qualified # 🧑🏻‍❤‍🧑🏼 E13.1 couple with heart: person, person, light skin tone, medium-light skin tone +1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏻‍❤️‍🧑🏽 E13.1 couple with heart: person, person, light skin tone, medium skin tone +1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FD ; minimally-qualified # 🧑🏻‍❤‍🧑🏽 E13.1 couple with heart: person, person, light skin tone, medium skin tone +1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏻‍❤️‍🧑🏾 E13.1 couple with heart: person, person, light skin tone, medium-dark skin tone +1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FE ; minimally-qualified # 🧑🏻‍❤‍🧑🏾 E13.1 couple with heart: person, person, light skin tone, medium-dark skin tone +1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏻‍❤️‍🧑🏿 E13.1 couple with heart: person, person, light skin tone, dark skin tone +1F9D1 1F3FB 200D 2764 200D 1F9D1 1F3FF ; minimally-qualified # 🧑🏻‍❤‍🧑🏿 E13.1 couple with heart: person, person, light skin tone, dark skin tone +1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏼‍❤️‍🧑🏻 E13.1 couple with heart: person, person, medium-light skin tone, light skin tone +1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FB ; minimally-qualified # 🧑🏼‍❤‍🧑🏻 E13.1 couple with heart: person, person, medium-light skin tone, light skin tone +1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏼‍❤️‍🧑🏽 E13.1 couple with heart: person, person, medium-light skin tone, medium skin tone +1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FD ; minimally-qualified # 🧑🏼‍❤‍🧑🏽 E13.1 couple with heart: person, person, medium-light skin tone, medium skin tone +1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏼‍❤️‍🧑🏾 E13.1 couple with heart: person, person, medium-light skin tone, medium-dark skin tone +1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FE ; minimally-qualified # 🧑🏼‍❤‍🧑🏾 E13.1 couple with heart: person, person, medium-light skin tone, medium-dark skin tone +1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏼‍❤️‍🧑🏿 E13.1 couple with heart: person, person, medium-light skin tone, dark skin tone +1F9D1 1F3FC 200D 2764 200D 1F9D1 1F3FF ; minimally-qualified # 🧑🏼‍❤‍🧑🏿 E13.1 couple with heart: person, person, medium-light skin tone, dark skin tone +1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏽‍❤️‍🧑🏻 E13.1 couple with heart: person, person, medium skin tone, light skin tone +1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FB ; minimally-qualified # 🧑🏽‍❤‍🧑🏻 E13.1 couple with heart: person, person, medium skin tone, light skin tone +1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏽‍❤️‍🧑🏼 E13.1 couple with heart: person, person, medium skin tone, medium-light skin tone +1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FC ; minimally-qualified # 🧑🏽‍❤‍🧑🏼 E13.1 couple with heart: person, person, medium skin tone, medium-light skin tone +1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏽‍❤️‍🧑🏾 E13.1 couple with heart: person, person, medium skin tone, medium-dark skin tone +1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FE ; minimally-qualified # 🧑🏽‍❤‍🧑🏾 E13.1 couple with heart: person, person, medium skin tone, medium-dark skin tone +1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏽‍❤️‍🧑🏿 E13.1 couple with heart: person, person, medium skin tone, dark skin tone +1F9D1 1F3FD 200D 2764 200D 1F9D1 1F3FF ; minimally-qualified # 🧑🏽‍❤‍🧑🏿 E13.1 couple with heart: person, person, medium skin tone, dark skin tone +1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏾‍❤️‍🧑🏻 E13.1 couple with heart: person, person, medium-dark skin tone, light skin tone +1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FB ; minimally-qualified # 🧑🏾‍❤‍🧑🏻 E13.1 couple with heart: person, person, medium-dark skin tone, light skin tone +1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏾‍❤️‍🧑🏼 E13.1 couple with heart: person, person, medium-dark skin tone, medium-light skin tone +1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FC ; minimally-qualified # 🧑🏾‍❤‍🧑🏼 E13.1 couple with heart: person, person, medium-dark skin tone, medium-light skin tone +1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏾‍❤️‍🧑🏽 E13.1 couple with heart: person, person, medium-dark skin tone, medium skin tone +1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FD ; minimally-qualified # 🧑🏾‍❤‍🧑🏽 E13.1 couple with heart: person, person, medium-dark skin tone, medium skin tone +1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FF ; fully-qualified # 🧑🏾‍❤️‍🧑🏿 E13.1 couple with heart: person, person, medium-dark skin tone, dark skin tone +1F9D1 1F3FE 200D 2764 200D 1F9D1 1F3FF ; minimally-qualified # 🧑🏾‍❤‍🧑🏿 E13.1 couple with heart: person, person, medium-dark skin tone, dark skin tone +1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FB ; fully-qualified # 🧑🏿‍❤️‍🧑🏻 E13.1 couple with heart: person, person, dark skin tone, light skin tone +1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FB ; minimally-qualified # 🧑🏿‍❤‍🧑🏻 E13.1 couple with heart: person, person, dark skin tone, light skin tone +1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FC ; fully-qualified # 🧑🏿‍❤️‍🧑🏼 E13.1 couple with heart: person, person, dark skin tone, medium-light skin tone +1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FC ; minimally-qualified # 🧑🏿‍❤‍🧑🏼 E13.1 couple with heart: person, person, dark skin tone, medium-light skin tone +1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FD ; fully-qualified # 🧑🏿‍❤️‍🧑🏽 E13.1 couple with heart: person, person, dark skin tone, medium skin tone +1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FD ; minimally-qualified # 🧑🏿‍❤‍🧑🏽 E13.1 couple with heart: person, person, dark skin tone, medium skin tone +1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FE ; fully-qualified # 🧑🏿‍❤️‍🧑🏾 E13.1 couple with heart: person, person, dark skin tone, medium-dark skin tone +1F9D1 1F3FF 200D 2764 200D 1F9D1 1F3FE ; minimally-qualified # 🧑🏿‍❤‍🧑🏾 E13.1 couple with heart: person, person, dark skin tone, medium-dark skin tone +1F469 200D 2764 FE0F 200D 1F468 ; fully-qualified # 👩‍❤️‍👨 E2.0 couple with heart: woman, man +1F469 200D 2764 200D 1F468 ; minimally-qualified # 👩‍❤‍👨 E2.0 couple with heart: woman, man +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👩🏻‍❤️‍👨🏻 E13.1 couple with heart: woman, man, light skin tone +1F469 1F3FB 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👩🏻‍❤‍👨🏻 E13.1 couple with heart: woman, man, light skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👩🏻‍❤️‍👨🏼 E13.1 couple with heart: woman, man, light skin tone, medium-light skin tone +1F469 1F3FB 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👩🏻‍❤‍👨🏼 E13.1 couple with heart: woman, man, light skin tone, medium-light skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👩🏻‍❤️‍👨🏽 E13.1 couple with heart: woman, man, light skin tone, medium skin tone +1F469 1F3FB 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👩🏻‍❤‍👨🏽 E13.1 couple with heart: woman, man, light skin tone, medium skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👩🏻‍❤️‍👨🏾 E13.1 couple with heart: woman, man, light skin tone, medium-dark skin tone +1F469 1F3FB 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👩🏻‍❤‍👨🏾 E13.1 couple with heart: woman, man, light skin tone, medium-dark skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👩🏻‍❤️‍👨🏿 E13.1 couple with heart: woman, man, light skin tone, dark skin tone +1F469 1F3FB 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👩🏻‍❤‍👨🏿 E13.1 couple with heart: woman, man, light skin tone, dark skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👩🏼‍❤️‍👨🏻 E13.1 couple with heart: woman, man, medium-light skin tone, light skin tone +1F469 1F3FC 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👩🏼‍❤‍👨🏻 E13.1 couple with heart: woman, man, medium-light skin tone, light skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👩🏼‍❤️‍👨🏼 E13.1 couple with heart: woman, man, medium-light skin tone +1F469 1F3FC 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👩🏼‍❤‍👨🏼 E13.1 couple with heart: woman, man, medium-light skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👩🏼‍❤️‍👨🏽 E13.1 couple with heart: woman, man, medium-light skin tone, medium skin tone +1F469 1F3FC 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👩🏼‍❤‍👨🏽 E13.1 couple with heart: woman, man, medium-light skin tone, medium skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👩🏼‍❤️‍👨🏾 E13.1 couple with heart: woman, man, medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👩🏼‍❤‍👨🏾 E13.1 couple with heart: woman, man, medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👩🏼‍❤️‍👨🏿 E13.1 couple with heart: woman, man, medium-light skin tone, dark skin tone +1F469 1F3FC 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👩🏼‍❤‍👨🏿 E13.1 couple with heart: woman, man, medium-light skin tone, dark skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👩🏽‍❤️‍👨🏻 E13.1 couple with heart: woman, man, medium skin tone, light skin tone +1F469 1F3FD 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👩🏽‍❤‍👨🏻 E13.1 couple with heart: woman, man, medium skin tone, light skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👩🏽‍❤️‍👨🏼 E13.1 couple with heart: woman, man, medium skin tone, medium-light skin tone +1F469 1F3FD 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👩🏽‍❤‍👨🏼 E13.1 couple with heart: woman, man, medium skin tone, medium-light skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👩🏽‍❤️‍👨🏽 E13.1 couple with heart: woman, man, medium skin tone +1F469 1F3FD 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👩🏽‍❤‍👨🏽 E13.1 couple with heart: woman, man, medium skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👩🏽‍❤️‍👨🏾 E13.1 couple with heart: woman, man, medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👩🏽‍❤‍👨🏾 E13.1 couple with heart: woman, man, medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👩🏽‍❤️‍👨🏿 E13.1 couple with heart: woman, man, medium skin tone, dark skin tone +1F469 1F3FD 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👩🏽‍❤‍👨🏿 E13.1 couple with heart: woman, man, medium skin tone, dark skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👩🏾‍❤️‍👨🏻 E13.1 couple with heart: woman, man, medium-dark skin tone, light skin tone +1F469 1F3FE 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👩🏾‍❤‍👨🏻 E13.1 couple with heart: woman, man, medium-dark skin tone, light skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👩🏾‍❤️‍👨🏼 E13.1 couple with heart: woman, man, medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👩🏾‍❤‍👨🏼 E13.1 couple with heart: woman, man, medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👩🏾‍❤️‍👨🏽 E13.1 couple with heart: woman, man, medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👩🏾‍❤‍👨🏽 E13.1 couple with heart: woman, man, medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👩🏾‍❤️‍👨🏾 E13.1 couple with heart: woman, man, medium-dark skin tone +1F469 1F3FE 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👩🏾‍❤‍👨🏾 E13.1 couple with heart: woman, man, medium-dark skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👩🏾‍❤️‍👨🏿 E13.1 couple with heart: woman, man, medium-dark skin tone, dark skin tone +1F469 1F3FE 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👩🏾‍❤‍👨🏿 E13.1 couple with heart: woman, man, medium-dark skin tone, dark skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👩🏿‍❤️‍👨🏻 E13.1 couple with heart: woman, man, dark skin tone, light skin tone +1F469 1F3FF 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👩🏿‍❤‍👨🏻 E13.1 couple with heart: woman, man, dark skin tone, light skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👩🏿‍❤️‍👨🏼 E13.1 couple with heart: woman, man, dark skin tone, medium-light skin tone +1F469 1F3FF 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👩🏿‍❤‍👨🏼 E13.1 couple with heart: woman, man, dark skin tone, medium-light skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👩🏿‍❤️‍👨🏽 E13.1 couple with heart: woman, man, dark skin tone, medium skin tone +1F469 1F3FF 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👩🏿‍❤‍👨🏽 E13.1 couple with heart: woman, man, dark skin tone, medium skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👩🏿‍❤️‍👨🏾 E13.1 couple with heart: woman, man, dark skin tone, medium-dark skin tone +1F469 1F3FF 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👩🏿‍❤‍👨🏾 E13.1 couple with heart: woman, man, dark skin tone, medium-dark skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👩🏿‍❤️‍👨🏿 E13.1 couple with heart: woman, man, dark skin tone +1F469 1F3FF 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👩🏿‍❤‍👨🏿 E13.1 couple with heart: woman, man, dark skin tone +1F468 200D 2764 FE0F 200D 1F468 ; fully-qualified # 👨‍❤️‍👨 E2.0 couple with heart: man, man +1F468 200D 2764 200D 1F468 ; minimally-qualified # 👨‍❤‍👨 E2.0 couple with heart: man, man +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👨🏻‍❤️‍👨🏻 E13.1 couple with heart: man, man, light skin tone +1F468 1F3FB 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👨🏻‍❤‍👨🏻 E13.1 couple with heart: man, man, light skin tone +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👨🏻‍❤️‍👨🏼 E13.1 couple with heart: man, man, light skin tone, medium-light skin tone +1F468 1F3FB 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👨🏻‍❤‍👨🏼 E13.1 couple with heart: man, man, light skin tone, medium-light skin tone +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👨🏻‍❤️‍👨🏽 E13.1 couple with heart: man, man, light skin tone, medium skin tone +1F468 1F3FB 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👨🏻‍❤‍👨🏽 E13.1 couple with heart: man, man, light skin tone, medium skin tone +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👨🏻‍❤️‍👨🏾 E13.1 couple with heart: man, man, light skin tone, medium-dark skin tone +1F468 1F3FB 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👨🏻‍❤‍👨🏾 E13.1 couple with heart: man, man, light skin tone, medium-dark skin tone +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👨🏻‍❤️‍👨🏿 E13.1 couple with heart: man, man, light skin tone, dark skin tone +1F468 1F3FB 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👨🏻‍❤‍👨🏿 E13.1 couple with heart: man, man, light skin tone, dark skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👨🏼‍❤️‍👨🏻 E13.1 couple with heart: man, man, medium-light skin tone, light skin tone +1F468 1F3FC 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👨🏼‍❤‍👨🏻 E13.1 couple with heart: man, man, medium-light skin tone, light skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👨🏼‍❤️‍👨🏼 E13.1 couple with heart: man, man, medium-light skin tone +1F468 1F3FC 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👨🏼‍❤‍👨🏼 E13.1 couple with heart: man, man, medium-light skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👨🏼‍❤️‍👨🏽 E13.1 couple with heart: man, man, medium-light skin tone, medium skin tone +1F468 1F3FC 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👨🏼‍❤‍👨🏽 E13.1 couple with heart: man, man, medium-light skin tone, medium skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👨🏼‍❤️‍👨🏾 E13.1 couple with heart: man, man, medium-light skin tone, medium-dark skin tone +1F468 1F3FC 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👨🏼‍❤‍👨🏾 E13.1 couple with heart: man, man, medium-light skin tone, medium-dark skin tone +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👨🏼‍❤️‍👨🏿 E13.1 couple with heart: man, man, medium-light skin tone, dark skin tone +1F468 1F3FC 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👨🏼‍❤‍👨🏿 E13.1 couple with heart: man, man, medium-light skin tone, dark skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👨🏽‍❤️‍👨🏻 E13.1 couple with heart: man, man, medium skin tone, light skin tone +1F468 1F3FD 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👨🏽‍❤‍👨🏻 E13.1 couple with heart: man, man, medium skin tone, light skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👨🏽‍❤️‍👨🏼 E13.1 couple with heart: man, man, medium skin tone, medium-light skin tone +1F468 1F3FD 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👨🏽‍❤‍👨🏼 E13.1 couple with heart: man, man, medium skin tone, medium-light skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👨🏽‍❤️‍👨🏽 E13.1 couple with heart: man, man, medium skin tone +1F468 1F3FD 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👨🏽‍❤‍👨🏽 E13.1 couple with heart: man, man, medium skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👨🏽‍❤️‍👨🏾 E13.1 couple with heart: man, man, medium skin tone, medium-dark skin tone +1F468 1F3FD 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👨🏽‍❤‍👨🏾 E13.1 couple with heart: man, man, medium skin tone, medium-dark skin tone +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👨🏽‍❤️‍👨🏿 E13.1 couple with heart: man, man, medium skin tone, dark skin tone +1F468 1F3FD 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👨🏽‍❤‍👨🏿 E13.1 couple with heart: man, man, medium skin tone, dark skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👨🏾‍❤️‍👨🏻 E13.1 couple with heart: man, man, medium-dark skin tone, light skin tone +1F468 1F3FE 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👨🏾‍❤‍👨🏻 E13.1 couple with heart: man, man, medium-dark skin tone, light skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👨🏾‍❤️‍👨🏼 E13.1 couple with heart: man, man, medium-dark skin tone, medium-light skin tone +1F468 1F3FE 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👨🏾‍❤‍👨🏼 E13.1 couple with heart: man, man, medium-dark skin tone, medium-light skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👨🏾‍❤️‍👨🏽 E13.1 couple with heart: man, man, medium-dark skin tone, medium skin tone +1F468 1F3FE 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👨🏾‍❤‍👨🏽 E13.1 couple with heart: man, man, medium-dark skin tone, medium skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👨🏾‍❤️‍👨🏾 E13.1 couple with heart: man, man, medium-dark skin tone +1F468 1F3FE 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👨🏾‍❤‍👨🏾 E13.1 couple with heart: man, man, medium-dark skin tone +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👨🏾‍❤️‍👨🏿 E13.1 couple with heart: man, man, medium-dark skin tone, dark skin tone +1F468 1F3FE 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👨🏾‍❤‍👨🏿 E13.1 couple with heart: man, man, medium-dark skin tone, dark skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB ; fully-qualified # 👨🏿‍❤️‍👨🏻 E13.1 couple with heart: man, man, dark skin tone, light skin tone +1F468 1F3FF 200D 2764 200D 1F468 1F3FB ; minimally-qualified # 👨🏿‍❤‍👨🏻 E13.1 couple with heart: man, man, dark skin tone, light skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC ; fully-qualified # 👨🏿‍❤️‍👨🏼 E13.1 couple with heart: man, man, dark skin tone, medium-light skin tone +1F468 1F3FF 200D 2764 200D 1F468 1F3FC ; minimally-qualified # 👨🏿‍❤‍👨🏼 E13.1 couple with heart: man, man, dark skin tone, medium-light skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD ; fully-qualified # 👨🏿‍❤️‍👨🏽 E13.1 couple with heart: man, man, dark skin tone, medium skin tone +1F468 1F3FF 200D 2764 200D 1F468 1F3FD ; minimally-qualified # 👨🏿‍❤‍👨🏽 E13.1 couple with heart: man, man, dark skin tone, medium skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FE ; fully-qualified # 👨🏿‍❤️‍👨🏾 E13.1 couple with heart: man, man, dark skin tone, medium-dark skin tone +1F468 1F3FF 200D 2764 200D 1F468 1F3FE ; minimally-qualified # 👨🏿‍❤‍👨🏾 E13.1 couple with heart: man, man, dark skin tone, medium-dark skin tone +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FF ; fully-qualified # 👨🏿‍❤️‍👨🏿 E13.1 couple with heart: man, man, dark skin tone +1F468 1F3FF 200D 2764 200D 1F468 1F3FF ; minimally-qualified # 👨🏿‍❤‍👨🏿 E13.1 couple with heart: man, man, dark skin tone +1F469 200D 2764 FE0F 200D 1F469 ; fully-qualified # 👩‍❤️‍👩 E2.0 couple with heart: woman, woman +1F469 200D 2764 200D 1F469 ; minimally-qualified # 👩‍❤‍👩 E2.0 couple with heart: woman, woman +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FB ; fully-qualified # 👩🏻‍❤️‍👩🏻 E13.1 couple with heart: woman, woman, light skin tone +1F469 1F3FB 200D 2764 200D 1F469 1F3FB ; minimally-qualified # 👩🏻‍❤‍👩🏻 E13.1 couple with heart: woman, woman, light skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FC ; fully-qualified # 👩🏻‍❤️‍👩🏼 E13.1 couple with heart: woman, woman, light skin tone, medium-light skin tone +1F469 1F3FB 200D 2764 200D 1F469 1F3FC ; minimally-qualified # 👩🏻‍❤‍👩🏼 E13.1 couple with heart: woman, woman, light skin tone, medium-light skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FD ; fully-qualified # 👩🏻‍❤️‍👩🏽 E13.1 couple with heart: woman, woman, light skin tone, medium skin tone +1F469 1F3FB 200D 2764 200D 1F469 1F3FD ; minimally-qualified # 👩🏻‍❤‍👩🏽 E13.1 couple with heart: woman, woman, light skin tone, medium skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FE ; fully-qualified # 👩🏻‍❤️‍👩🏾 E13.1 couple with heart: woman, woman, light skin tone, medium-dark skin tone +1F469 1F3FB 200D 2764 200D 1F469 1F3FE ; minimally-qualified # 👩🏻‍❤‍👩🏾 E13.1 couple with heart: woman, woman, light skin tone, medium-dark skin tone +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FF ; fully-qualified # 👩🏻‍❤️‍👩🏿 E13.1 couple with heart: woman, woman, light skin tone, dark skin tone +1F469 1F3FB 200D 2764 200D 1F469 1F3FF ; minimally-qualified # 👩🏻‍❤‍👩🏿 E13.1 couple with heart: woman, woman, light skin tone, dark skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FB ; fully-qualified # 👩🏼‍❤️‍👩🏻 E13.1 couple with heart: woman, woman, medium-light skin tone, light skin tone +1F469 1F3FC 200D 2764 200D 1F469 1F3FB ; minimally-qualified # 👩🏼‍❤‍👩🏻 E13.1 couple with heart: woman, woman, medium-light skin tone, light skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FC ; fully-qualified # 👩🏼‍❤️‍👩🏼 E13.1 couple with heart: woman, woman, medium-light skin tone +1F469 1F3FC 200D 2764 200D 1F469 1F3FC ; minimally-qualified # 👩🏼‍❤‍👩🏼 E13.1 couple with heart: woman, woman, medium-light skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FD ; fully-qualified # 👩🏼‍❤️‍👩🏽 E13.1 couple with heart: woman, woman, medium-light skin tone, medium skin tone +1F469 1F3FC 200D 2764 200D 1F469 1F3FD ; minimally-qualified # 👩🏼‍❤‍👩🏽 E13.1 couple with heart: woman, woman, medium-light skin tone, medium skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FE ; fully-qualified # 👩🏼‍❤️‍👩🏾 E13.1 couple with heart: woman, woman, medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 2764 200D 1F469 1F3FE ; minimally-qualified # 👩🏼‍❤‍👩🏾 E13.1 couple with heart: woman, woman, medium-light skin tone, medium-dark skin tone +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FF ; fully-qualified # 👩🏼‍❤️‍👩🏿 E13.1 couple with heart: woman, woman, medium-light skin tone, dark skin tone +1F469 1F3FC 200D 2764 200D 1F469 1F3FF ; minimally-qualified # 👩🏼‍❤‍👩🏿 E13.1 couple with heart: woman, woman, medium-light skin tone, dark skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FB ; fully-qualified # 👩🏽‍❤️‍👩🏻 E13.1 couple with heart: woman, woman, medium skin tone, light skin tone +1F469 1F3FD 200D 2764 200D 1F469 1F3FB ; minimally-qualified # 👩🏽‍❤‍👩🏻 E13.1 couple with heart: woman, woman, medium skin tone, light skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FC ; fully-qualified # 👩🏽‍❤️‍👩🏼 E13.1 couple with heart: woman, woman, medium skin tone, medium-light skin tone +1F469 1F3FD 200D 2764 200D 1F469 1F3FC ; minimally-qualified # 👩🏽‍❤‍👩🏼 E13.1 couple with heart: woman, woman, medium skin tone, medium-light skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FD ; fully-qualified # 👩🏽‍❤️‍👩🏽 E13.1 couple with heart: woman, woman, medium skin tone +1F469 1F3FD 200D 2764 200D 1F469 1F3FD ; minimally-qualified # 👩🏽‍❤‍👩🏽 E13.1 couple with heart: woman, woman, medium skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FE ; fully-qualified # 👩🏽‍❤️‍👩🏾 E13.1 couple with heart: woman, woman, medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 2764 200D 1F469 1F3FE ; minimally-qualified # 👩🏽‍❤‍👩🏾 E13.1 couple with heart: woman, woman, medium skin tone, medium-dark skin tone +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FF ; fully-qualified # 👩🏽‍❤️‍👩🏿 E13.1 couple with heart: woman, woman, medium skin tone, dark skin tone +1F469 1F3FD 200D 2764 200D 1F469 1F3FF ; minimally-qualified # 👩🏽‍❤‍👩🏿 E13.1 couple with heart: woman, woman, medium skin tone, dark skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FB ; fully-qualified # 👩🏾‍❤️‍👩🏻 E13.1 couple with heart: woman, woman, medium-dark skin tone, light skin tone +1F469 1F3FE 200D 2764 200D 1F469 1F3FB ; minimally-qualified # 👩🏾‍❤‍👩🏻 E13.1 couple with heart: woman, woman, medium-dark skin tone, light skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FC ; fully-qualified # 👩🏾‍❤️‍👩🏼 E13.1 couple with heart: woman, woman, medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 2764 200D 1F469 1F3FC ; minimally-qualified # 👩🏾‍❤‍👩🏼 E13.1 couple with heart: woman, woman, medium-dark skin tone, medium-light skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FD ; fully-qualified # 👩🏾‍❤️‍👩🏽 E13.1 couple with heart: woman, woman, medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 2764 200D 1F469 1F3FD ; minimally-qualified # 👩🏾‍❤‍👩🏽 E13.1 couple with heart: woman, woman, medium-dark skin tone, medium skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FE ; fully-qualified # 👩🏾‍❤️‍👩🏾 E13.1 couple with heart: woman, woman, medium-dark skin tone +1F469 1F3FE 200D 2764 200D 1F469 1F3FE ; minimally-qualified # 👩🏾‍❤‍👩🏾 E13.1 couple with heart: woman, woman, medium-dark skin tone +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FF ; fully-qualified # 👩🏾‍❤️‍👩🏿 E13.1 couple with heart: woman, woman, medium-dark skin tone, dark skin tone +1F469 1F3FE 200D 2764 200D 1F469 1F3FF ; minimally-qualified # 👩🏾‍❤‍👩🏿 E13.1 couple with heart: woman, woman, medium-dark skin tone, dark skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FB ; fully-qualified # 👩🏿‍❤️‍👩🏻 E13.1 couple with heart: woman, woman, dark skin tone, light skin tone +1F469 1F3FF 200D 2764 200D 1F469 1F3FB ; minimally-qualified # 👩🏿‍❤‍👩🏻 E13.1 couple with heart: woman, woman, dark skin tone, light skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FC ; fully-qualified # 👩🏿‍❤️‍👩🏼 E13.1 couple with heart: woman, woman, dark skin tone, medium-light skin tone +1F469 1F3FF 200D 2764 200D 1F469 1F3FC ; minimally-qualified # 👩🏿‍❤‍👩🏼 E13.1 couple with heart: woman, woman, dark skin tone, medium-light skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FD ; fully-qualified # 👩🏿‍❤️‍👩🏽 E13.1 couple with heart: woman, woman, dark skin tone, medium skin tone +1F469 1F3FF 200D 2764 200D 1F469 1F3FD ; minimally-qualified # 👩🏿‍❤‍👩🏽 E13.1 couple with heart: woman, woman, dark skin tone, medium skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FE ; fully-qualified # 👩🏿‍❤️‍👩🏾 E13.1 couple with heart: woman, woman, dark skin tone, medium-dark skin tone +1F469 1F3FF 200D 2764 200D 1F469 1F3FE ; minimally-qualified # 👩🏿‍❤‍👩🏾 E13.1 couple with heart: woman, woman, dark skin tone, medium-dark skin tone +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FF ; fully-qualified # 👩🏿‍❤️‍👩🏿 E13.1 couple with heart: woman, woman, dark skin tone +1F469 1F3FF 200D 2764 200D 1F469 1F3FF ; minimally-qualified # 👩🏿‍❤‍👩🏿 E13.1 couple with heart: woman, woman, dark skin tone +1F46A ; fully-qualified # 👪 E0.6 family +1F468 200D 1F469 200D 1F466 ; fully-qualified # 👨‍👩‍👦 E2.0 family: man, woman, boy +1F468 200D 1F469 200D 1F467 ; fully-qualified # 👨‍👩‍👧 E2.0 family: man, woman, girl +1F468 200D 1F469 200D 1F467 200D 1F466 ; fully-qualified # 👨‍👩‍👧‍👦 E2.0 family: man, woman, girl, boy +1F468 200D 1F469 200D 1F466 200D 1F466 ; fully-qualified # 👨‍👩‍👦‍👦 E2.0 family: man, woman, boy, boy +1F468 200D 1F469 200D 1F467 200D 1F467 ; fully-qualified # 👨‍👩‍👧‍👧 E2.0 family: man, woman, girl, girl +1F468 200D 1F468 200D 1F466 ; fully-qualified # 👨‍👨‍👦 E2.0 family: man, man, boy +1F468 200D 1F468 200D 1F467 ; fully-qualified # 👨‍👨‍👧 E2.0 family: man, man, girl +1F468 200D 1F468 200D 1F467 200D 1F466 ; fully-qualified # 👨‍👨‍👧‍👦 E2.0 family: man, man, girl, boy +1F468 200D 1F468 200D 1F466 200D 1F466 ; fully-qualified # 👨‍👨‍👦‍👦 E2.0 family: man, man, boy, boy +1F468 200D 1F468 200D 1F467 200D 1F467 ; fully-qualified # 👨‍👨‍👧‍👧 E2.0 family: man, man, girl, girl +1F469 200D 1F469 200D 1F466 ; fully-qualified # 👩‍👩‍👦 E2.0 family: woman, woman, boy +1F469 200D 1F469 200D 1F467 ; fully-qualified # 👩‍👩‍👧 E2.0 family: woman, woman, girl +1F469 200D 1F469 200D 1F467 200D 1F466 ; fully-qualified # 👩‍👩‍👧‍👦 E2.0 family: woman, woman, girl, boy +1F469 200D 1F469 200D 1F466 200D 1F466 ; fully-qualified # 👩‍👩‍👦‍👦 E2.0 family: woman, woman, boy, boy +1F469 200D 1F469 200D 1F467 200D 1F467 ; fully-qualified # 👩‍👩‍👧‍👧 E2.0 family: woman, woman, girl, girl +1F468 200D 1F466 ; fully-qualified # 👨‍👦 E4.0 family: man, boy +1F468 200D 1F466 200D 1F466 ; fully-qualified # 👨‍👦‍👦 E4.0 family: man, boy, boy +1F468 200D 1F467 ; fully-qualified # 👨‍👧 E4.0 family: man, girl +1F468 200D 1F467 200D 1F466 ; fully-qualified # 👨‍👧‍👦 E4.0 family: man, girl, boy +1F468 200D 1F467 200D 1F467 ; fully-qualified # 👨‍👧‍👧 E4.0 family: man, girl, girl +1F469 200D 1F466 ; fully-qualified # 👩‍👦 E4.0 family: woman, boy +1F469 200D 1F466 200D 1F466 ; fully-qualified # 👩‍👦‍👦 E4.0 family: woman, boy, boy +1F469 200D 1F467 ; fully-qualified # 👩‍👧 E4.0 family: woman, girl +1F469 200D 1F467 200D 1F466 ; fully-qualified # 👩‍👧‍👦 E4.0 family: woman, girl, boy +1F469 200D 1F467 200D 1F467 ; fully-qualified # 👩‍👧‍👧 E4.0 family: woman, girl, girl + +# subgroup: person-symbol +1F5E3 FE0F ; fully-qualified # 🗣️ E0.7 speaking head +1F5E3 ; unqualified # 🗣 E0.7 speaking head +1F464 ; fully-qualified # 👤 E0.6 bust in silhouette +1F465 ; fully-qualified # 👥 E1.0 busts in silhouette +1FAC2 ; fully-qualified # 🫂 E13.0 people hugging +1F463 ; fully-qualified # 👣 E0.6 footprints + +# People & Body subtotal: 2986 +# People & Body subtotal: 506 w/o modifiers + +# group: Component + +# subgroup: skin-tone +1F3FB ; component # 🏻 E1.0 light skin tone +1F3FC ; component # 🏼 E1.0 medium-light skin tone +1F3FD ; component # 🏽 E1.0 medium skin tone +1F3FE ; component # 🏾 E1.0 medium-dark skin tone +1F3FF ; component # 🏿 E1.0 dark skin tone + +# subgroup: hair-style +1F9B0 ; component # 🦰 E11.0 red hair +1F9B1 ; component # 🦱 E11.0 curly hair +1F9B3 ; component # 🦳 E11.0 white hair +1F9B2 ; component # 🦲 E11.0 bald + +# Component subtotal: 9 +# Component subtotal: 4 w/o modifiers + +# group: Animals & Nature + +# subgroup: animal-mammal +1F435 ; fully-qualified # 🐵 E0.6 monkey face +1F412 ; fully-qualified # 🐒 E0.6 monkey +1F98D ; fully-qualified # 🦍 E3.0 gorilla +1F9A7 ; fully-qualified # 🦧 E12.0 orangutan +1F436 ; fully-qualified # 🐶 E0.6 dog face +1F415 ; fully-qualified # 🐕 E0.7 dog +1F9AE ; fully-qualified # 🦮 E12.0 guide dog +1F415 200D 1F9BA ; fully-qualified # 🐕‍🦺 E12.0 service dog +1F429 ; fully-qualified # 🐩 E0.6 poodle +1F43A ; fully-qualified # 🐺 E0.6 wolf +1F98A ; fully-qualified # 🦊 E3.0 fox +1F99D ; fully-qualified # 🦝 E11.0 raccoon +1F431 ; fully-qualified # 🐱 E0.6 cat face +1F408 ; fully-qualified # 🐈 E0.7 cat +1F408 200D 2B1B ; fully-qualified # 🐈‍⬛ E13.0 black cat +1F981 ; fully-qualified # 🦁 E1.0 lion +1F42F ; fully-qualified # 🐯 E0.6 tiger face +1F405 ; fully-qualified # 🐅 E1.0 tiger +1F406 ; fully-qualified # 🐆 E1.0 leopard +1F434 ; fully-qualified # 🐴 E0.6 horse face +1F40E ; fully-qualified # 🐎 E0.6 horse +1F984 ; fully-qualified # 🦄 E1.0 unicorn +1F993 ; fully-qualified # 🦓 E5.0 zebra +1F98C ; fully-qualified # 🦌 E3.0 deer +1F9AC ; fully-qualified # 🦬 E13.0 bison +1F42E ; fully-qualified # 🐮 E0.6 cow face +1F402 ; fully-qualified # 🐂 E1.0 ox +1F403 ; fully-qualified # 🐃 E1.0 water buffalo +1F404 ; fully-qualified # 🐄 E1.0 cow +1F437 ; fully-qualified # 🐷 E0.6 pig face +1F416 ; fully-qualified # 🐖 E1.0 pig +1F417 ; fully-qualified # 🐗 E0.6 boar +1F43D ; fully-qualified # 🐽 E0.6 pig nose +1F40F ; fully-qualified # 🐏 E1.0 ram +1F411 ; fully-qualified # 🐑 E0.6 ewe +1F410 ; fully-qualified # 🐐 E1.0 goat +1F42A ; fully-qualified # 🐪 E1.0 camel +1F42B ; fully-qualified # 🐫 E0.6 two-hump camel +1F999 ; fully-qualified # 🦙 E11.0 llama +1F992 ; fully-qualified # 🦒 E5.0 giraffe +1F418 ; fully-qualified # 🐘 E0.6 elephant +1F9A3 ; fully-qualified # 🦣 E13.0 mammoth +1F98F ; fully-qualified # 🦏 E3.0 rhinoceros +1F99B ; fully-qualified # 🦛 E11.0 hippopotamus +1F42D ; fully-qualified # 🐭 E0.6 mouse face +1F401 ; fully-qualified # 🐁 E1.0 mouse +1F400 ; fully-qualified # 🐀 E1.0 rat +1F439 ; fully-qualified # 🐹 E0.6 hamster +1F430 ; fully-qualified # 🐰 E0.6 rabbit face +1F407 ; fully-qualified # 🐇 E1.0 rabbit +1F43F FE0F ; fully-qualified # 🐿️ E0.7 chipmunk +1F43F ; unqualified # 🐿 E0.7 chipmunk +1F9AB ; fully-qualified # 🦫 E13.0 beaver +1F994 ; fully-qualified # 🦔 E5.0 hedgehog +1F987 ; fully-qualified # 🦇 E3.0 bat +1F43B ; fully-qualified # 🐻 E0.6 bear +1F43B 200D 2744 FE0F ; fully-qualified # 🐻‍❄️ E13.0 polar bear +1F43B 200D 2744 ; minimally-qualified # 🐻‍❄ E13.0 polar bear +1F428 ; fully-qualified # 🐨 E0.6 koala +1F43C ; fully-qualified # 🐼 E0.6 panda +1F9A5 ; fully-qualified # 🦥 E12.0 sloth +1F9A6 ; fully-qualified # 🦦 E12.0 otter +1F9A8 ; fully-qualified # 🦨 E12.0 skunk +1F998 ; fully-qualified # 🦘 E11.0 kangaroo +1F9A1 ; fully-qualified # 🦡 E11.0 badger +1F43E ; fully-qualified # 🐾 E0.6 paw prints + +# subgroup: animal-bird +1F983 ; fully-qualified # 🦃 E1.0 turkey +1F414 ; fully-qualified # 🐔 E0.6 chicken +1F413 ; fully-qualified # 🐓 E1.0 rooster +1F423 ; fully-qualified # 🐣 E0.6 hatching chick +1F424 ; fully-qualified # 🐤 E0.6 baby chick +1F425 ; fully-qualified # 🐥 E0.6 front-facing baby chick +1F426 ; fully-qualified # 🐦 E0.6 bird +1F427 ; fully-qualified # 🐧 E0.6 penguin +1F54A FE0F ; fully-qualified # 🕊️ E0.7 dove +1F54A ; unqualified # 🕊 E0.7 dove +1F985 ; fully-qualified # 🦅 E3.0 eagle +1F986 ; fully-qualified # 🦆 E3.0 duck +1F9A2 ; fully-qualified # 🦢 E11.0 swan +1F989 ; fully-qualified # 🦉 E3.0 owl +1F9A4 ; fully-qualified # 🦤 E13.0 dodo +1FAB6 ; fully-qualified # 🪶 E13.0 feather +1F9A9 ; fully-qualified # 🦩 E12.0 flamingo +1F99A ; fully-qualified # 🦚 E11.0 peacock +1F99C ; fully-qualified # 🦜 E11.0 parrot + +# subgroup: animal-amphibian +1F438 ; fully-qualified # 🐸 E0.6 frog + +# subgroup: animal-reptile +1F40A ; fully-qualified # 🐊 E1.0 crocodile +1F422 ; fully-qualified # 🐢 E0.6 turtle +1F98E ; fully-qualified # 🦎 E3.0 lizard +1F40D ; fully-qualified # 🐍 E0.6 snake +1F432 ; fully-qualified # 🐲 E0.6 dragon face +1F409 ; fully-qualified # 🐉 E1.0 dragon +1F995 ; fully-qualified # 🦕 E5.0 sauropod +1F996 ; fully-qualified # 🦖 E5.0 T-Rex + +# subgroup: animal-marine +1F433 ; fully-qualified # 🐳 E0.6 spouting whale +1F40B ; fully-qualified # 🐋 E1.0 whale +1F42C ; fully-qualified # 🐬 E0.6 dolphin +1F9AD ; fully-qualified # 🦭 E13.0 seal +1F41F ; fully-qualified # 🐟 E0.6 fish +1F420 ; fully-qualified # 🐠 E0.6 tropical fish +1F421 ; fully-qualified # 🐡 E0.6 blowfish +1F988 ; fully-qualified # 🦈 E3.0 shark +1F419 ; fully-qualified # 🐙 E0.6 octopus +1F41A ; fully-qualified # 🐚 E0.6 spiral shell +1FAB8 ; fully-qualified # 🪸 E14.0 coral + +# subgroup: animal-bug +1F40C ; fully-qualified # 🐌 E0.6 snail +1F98B ; fully-qualified # 🦋 E3.0 butterfly +1F41B ; fully-qualified # 🐛 E0.6 bug +1F41C ; fully-qualified # 🐜 E0.6 ant +1F41D ; fully-qualified # 🐝 E0.6 honeybee +1FAB2 ; fully-qualified # 🪲 E13.0 beetle +1F41E ; fully-qualified # 🐞 E0.6 lady beetle +1F997 ; fully-qualified # 🦗 E5.0 cricket +1FAB3 ; fully-qualified # 🪳 E13.0 cockroach +1F577 FE0F ; fully-qualified # 🕷️ E0.7 spider +1F577 ; unqualified # 🕷 E0.7 spider +1F578 FE0F ; fully-qualified # 🕸️ E0.7 spider web +1F578 ; unqualified # 🕸 E0.7 spider web +1F982 ; fully-qualified # 🦂 E1.0 scorpion +1F99F ; fully-qualified # 🦟 E11.0 mosquito +1FAB0 ; fully-qualified # 🪰 E13.0 fly +1FAB1 ; fully-qualified # 🪱 E13.0 worm +1F9A0 ; fully-qualified # 🦠 E11.0 microbe + +# subgroup: plant-flower +1F490 ; fully-qualified # 💐 E0.6 bouquet +1F338 ; fully-qualified # 🌸 E0.6 cherry blossom +1F4AE ; fully-qualified # 💮 E0.6 white flower +1FAB7 ; fully-qualified # 🪷 E14.0 lotus +1F3F5 FE0F ; fully-qualified # 🏵️ E0.7 rosette +1F3F5 ; unqualified # 🏵 E0.7 rosette +1F339 ; fully-qualified # 🌹 E0.6 rose +1F940 ; fully-qualified # 🥀 E3.0 wilted flower +1F33A ; fully-qualified # 🌺 E0.6 hibiscus +1F33B ; fully-qualified # 🌻 E0.6 sunflower +1F33C ; fully-qualified # 🌼 E0.6 blossom +1F337 ; fully-qualified # 🌷 E0.6 tulip + +# subgroup: plant-other +1F331 ; fully-qualified # 🌱 E0.6 seedling +1FAB4 ; fully-qualified # 🪴 E13.0 potted plant +1F332 ; fully-qualified # 🌲 E1.0 evergreen tree +1F333 ; fully-qualified # 🌳 E1.0 deciduous tree +1F334 ; fully-qualified # 🌴 E0.6 palm tree +1F335 ; fully-qualified # 🌵 E0.6 cactus +1F33E ; fully-qualified # 🌾 E0.6 sheaf of rice +1F33F ; fully-qualified # 🌿 E0.6 herb +2618 FE0F ; fully-qualified # ☘️ E1.0 shamrock +2618 ; unqualified # ☘ E1.0 shamrock +1F340 ; fully-qualified # 🍀 E0.6 four leaf clover +1F341 ; fully-qualified # 🍁 E0.6 maple leaf +1F342 ; fully-qualified # 🍂 E0.6 fallen leaf +1F343 ; fully-qualified # 🍃 E0.6 leaf fluttering in wind +1FAB9 ; fully-qualified # 🪹 E14.0 empty nest +1FABA ; fully-qualified # 🪺 E14.0 nest with eggs + +# Animals & Nature subtotal: 151 +# Animals & Nature subtotal: 151 w/o modifiers + +# group: Food & Drink + +# subgroup: food-fruit +1F347 ; fully-qualified # 🍇 E0.6 grapes +1F348 ; fully-qualified # 🍈 E0.6 melon +1F349 ; fully-qualified # 🍉 E0.6 watermelon +1F34A ; fully-qualified # 🍊 E0.6 tangerine +1F34B ; fully-qualified # 🍋 E1.0 lemon +1F34C ; fully-qualified # 🍌 E0.6 banana +1F34D ; fully-qualified # 🍍 E0.6 pineapple +1F96D ; fully-qualified # 🥭 E11.0 mango +1F34E ; fully-qualified # 🍎 E0.6 red apple +1F34F ; fully-qualified # 🍏 E0.6 green apple +1F350 ; fully-qualified # 🍐 E1.0 pear +1F351 ; fully-qualified # 🍑 E0.6 peach +1F352 ; fully-qualified # 🍒 E0.6 cherries +1F353 ; fully-qualified # 🍓 E0.6 strawberry +1FAD0 ; fully-qualified # 🫐 E13.0 blueberries +1F95D ; fully-qualified # 🥝 E3.0 kiwi fruit +1F345 ; fully-qualified # 🍅 E0.6 tomato +1FAD2 ; fully-qualified # 🫒 E13.0 olive +1F965 ; fully-qualified # 🥥 E5.0 coconut + +# subgroup: food-vegetable +1F951 ; fully-qualified # 🥑 E3.0 avocado +1F346 ; fully-qualified # 🍆 E0.6 eggplant +1F954 ; fully-qualified # 🥔 E3.0 potato +1F955 ; fully-qualified # 🥕 E3.0 carrot +1F33D ; fully-qualified # 🌽 E0.6 ear of corn +1F336 FE0F ; fully-qualified # 🌶️ E0.7 hot pepper +1F336 ; unqualified # 🌶 E0.7 hot pepper +1FAD1 ; fully-qualified # 🫑 E13.0 bell pepper +1F952 ; fully-qualified # 🥒 E3.0 cucumber +1F96C ; fully-qualified # 🥬 E11.0 leafy green +1F966 ; fully-qualified # 🥦 E5.0 broccoli +1F9C4 ; fully-qualified # 🧄 E12.0 garlic +1F9C5 ; fully-qualified # 🧅 E12.0 onion +1F344 ; fully-qualified # 🍄 E0.6 mushroom +1F95C ; fully-qualified # 🥜 E3.0 peanuts +1FAD8 ; fully-qualified # 🫘 E14.0 beans +1F330 ; fully-qualified # 🌰 E0.6 chestnut + +# subgroup: food-prepared +1F35E ; fully-qualified # 🍞 E0.6 bread +1F950 ; fully-qualified # 🥐 E3.0 croissant +1F956 ; fully-qualified # 🥖 E3.0 baguette bread +1FAD3 ; fully-qualified # 🫓 E13.0 flatbread +1F968 ; fully-qualified # 🥨 E5.0 pretzel +1F96F ; fully-qualified # 🥯 E11.0 bagel +1F95E ; fully-qualified # 🥞 E3.0 pancakes +1F9C7 ; fully-qualified # 🧇 E12.0 waffle +1F9C0 ; fully-qualified # 🧀 E1.0 cheese wedge +1F356 ; fully-qualified # 🍖 E0.6 meat on bone +1F357 ; fully-qualified # 🍗 E0.6 poultry leg +1F969 ; fully-qualified # 🥩 E5.0 cut of meat +1F953 ; fully-qualified # 🥓 E3.0 bacon +1F354 ; fully-qualified # 🍔 E0.6 hamburger +1F35F ; fully-qualified # 🍟 E0.6 french fries +1F355 ; fully-qualified # 🍕 E0.6 pizza +1F32D ; fully-qualified # 🌭 E1.0 hot dog +1F96A ; fully-qualified # 🥪 E5.0 sandwich +1F32E ; fully-qualified # 🌮 E1.0 taco +1F32F ; fully-qualified # 🌯 E1.0 burrito +1FAD4 ; fully-qualified # 🫔 E13.0 tamale +1F959 ; fully-qualified # 🥙 E3.0 stuffed flatbread +1F9C6 ; fully-qualified # 🧆 E12.0 falafel +1F95A ; fully-qualified # 🥚 E3.0 egg +1F373 ; fully-qualified # 🍳 E0.6 cooking +1F958 ; fully-qualified # 🥘 E3.0 shallow pan of food +1F372 ; fully-qualified # 🍲 E0.6 pot of food +1FAD5 ; fully-qualified # 🫕 E13.0 fondue +1F963 ; fully-qualified # 🥣 E5.0 bowl with spoon +1F957 ; fully-qualified # 🥗 E3.0 green salad +1F37F ; fully-qualified # 🍿 E1.0 popcorn +1F9C8 ; fully-qualified # 🧈 E12.0 butter +1F9C2 ; fully-qualified # 🧂 E11.0 salt +1F96B ; fully-qualified # 🥫 E5.0 canned food + +# subgroup: food-asian +1F371 ; fully-qualified # 🍱 E0.6 bento box +1F358 ; fully-qualified # 🍘 E0.6 rice cracker +1F359 ; fully-qualified # 🍙 E0.6 rice ball +1F35A ; fully-qualified # 🍚 E0.6 cooked rice +1F35B ; fully-qualified # 🍛 E0.6 curry rice +1F35C ; fully-qualified # 🍜 E0.6 steaming bowl +1F35D ; fully-qualified # 🍝 E0.6 spaghetti +1F360 ; fully-qualified # 🍠 E0.6 roasted sweet potato +1F362 ; fully-qualified # 🍢 E0.6 oden +1F363 ; fully-qualified # 🍣 E0.6 sushi +1F364 ; fully-qualified # 🍤 E0.6 fried shrimp +1F365 ; fully-qualified # 🍥 E0.6 fish cake with swirl +1F96E ; fully-qualified # 🥮 E11.0 moon cake +1F361 ; fully-qualified # 🍡 E0.6 dango +1F95F ; fully-qualified # 🥟 E5.0 dumpling +1F960 ; fully-qualified # 🥠 E5.0 fortune cookie +1F961 ; fully-qualified # 🥡 E5.0 takeout box + +# subgroup: food-marine +1F980 ; fully-qualified # 🦀 E1.0 crab +1F99E ; fully-qualified # 🦞 E11.0 lobster +1F990 ; fully-qualified # 🦐 E3.0 shrimp +1F991 ; fully-qualified # 🦑 E3.0 squid +1F9AA ; fully-qualified # 🦪 E12.0 oyster + +# subgroup: food-sweet +1F366 ; fully-qualified # 🍦 E0.6 soft ice cream +1F367 ; fully-qualified # 🍧 E0.6 shaved ice +1F368 ; fully-qualified # 🍨 E0.6 ice cream +1F369 ; fully-qualified # 🍩 E0.6 doughnut +1F36A ; fully-qualified # 🍪 E0.6 cookie +1F382 ; fully-qualified # 🎂 E0.6 birthday cake +1F370 ; fully-qualified # 🍰 E0.6 shortcake +1F9C1 ; fully-qualified # 🧁 E11.0 cupcake +1F967 ; fully-qualified # 🥧 E5.0 pie +1F36B ; fully-qualified # 🍫 E0.6 chocolate bar +1F36C ; fully-qualified # 🍬 E0.6 candy +1F36D ; fully-qualified # 🍭 E0.6 lollipop +1F36E ; fully-qualified # 🍮 E0.6 custard +1F36F ; fully-qualified # 🍯 E0.6 honey pot + +# subgroup: drink +1F37C ; fully-qualified # 🍼 E1.0 baby bottle +1F95B ; fully-qualified # 🥛 E3.0 glass of milk +2615 ; fully-qualified # ☕ E0.6 hot beverage +1FAD6 ; fully-qualified # 🫖 E13.0 teapot +1F375 ; fully-qualified # 🍵 E0.6 teacup without handle +1F376 ; fully-qualified # 🍶 E0.6 sake +1F37E ; fully-qualified # 🍾 E1.0 bottle with popping cork +1F377 ; fully-qualified # 🍷 E0.6 wine glass +1F378 ; fully-qualified # 🍸 E0.6 cocktail glass +1F379 ; fully-qualified # 🍹 E0.6 tropical drink +1F37A ; fully-qualified # 🍺 E0.6 beer mug +1F37B ; fully-qualified # 🍻 E0.6 clinking beer mugs +1F942 ; fully-qualified # 🥂 E3.0 clinking glasses +1F943 ; fully-qualified # 🥃 E3.0 tumbler glass +1FAD7 ; fully-qualified # 🫗 E14.0 pouring liquid +1F964 ; fully-qualified # 🥤 E5.0 cup with straw +1F9CB ; fully-qualified # 🧋 E13.0 bubble tea +1F9C3 ; fully-qualified # 🧃 E12.0 beverage box +1F9C9 ; fully-qualified # 🧉 E12.0 mate +1F9CA ; fully-qualified # 🧊 E12.0 ice + +# subgroup: dishware +1F962 ; fully-qualified # 🥢 E5.0 chopsticks +1F37D FE0F ; fully-qualified # 🍽️ E0.7 fork and knife with plate +1F37D ; unqualified # 🍽 E0.7 fork and knife with plate +1F374 ; fully-qualified # 🍴 E0.6 fork and knife +1F944 ; fully-qualified # 🥄 E3.0 spoon +1F52A ; fully-qualified # 🔪 E0.6 kitchen knife +1FAD9 ; fully-qualified # 🫙 E14.0 jar +1F3FA ; fully-qualified # 🏺 E1.0 amphora + +# Food & Drink subtotal: 134 +# Food & Drink subtotal: 134 w/o modifiers + +# group: Travel & Places + +# subgroup: place-map +1F30D ; fully-qualified # 🌍 E0.7 globe showing Europe-Africa +1F30E ; fully-qualified # 🌎 E0.7 globe showing Americas +1F30F ; fully-qualified # 🌏 E0.6 globe showing Asia-Australia +1F310 ; fully-qualified # 🌐 E1.0 globe with meridians +1F5FA FE0F ; fully-qualified # 🗺️ E0.7 world map +1F5FA ; unqualified # 🗺 E0.7 world map +1F5FE ; fully-qualified # 🗾 E0.6 map of Japan +1F9ED ; fully-qualified # 🧭 E11.0 compass + +# subgroup: place-geographic +1F3D4 FE0F ; fully-qualified # 🏔️ E0.7 snow-capped mountain +1F3D4 ; unqualified # 🏔 E0.7 snow-capped mountain +26F0 FE0F ; fully-qualified # ⛰️ E0.7 mountain +26F0 ; unqualified # ⛰ E0.7 mountain +1F30B ; fully-qualified # 🌋 E0.6 volcano +1F5FB ; fully-qualified # 🗻 E0.6 mount fuji +1F3D5 FE0F ; fully-qualified # 🏕️ E0.7 camping +1F3D5 ; unqualified # 🏕 E0.7 camping +1F3D6 FE0F ; fully-qualified # 🏖️ E0.7 beach with umbrella +1F3D6 ; unqualified # 🏖 E0.7 beach with umbrella +1F3DC FE0F ; fully-qualified # 🏜️ E0.7 desert +1F3DC ; unqualified # 🏜 E0.7 desert +1F3DD FE0F ; fully-qualified # 🏝️ E0.7 desert island +1F3DD ; unqualified # 🏝 E0.7 desert island +1F3DE FE0F ; fully-qualified # 🏞️ E0.7 national park +1F3DE ; unqualified # 🏞 E0.7 national park + +# subgroup: place-building +1F3DF FE0F ; fully-qualified # 🏟️ E0.7 stadium +1F3DF ; unqualified # 🏟 E0.7 stadium +1F3DB FE0F ; fully-qualified # 🏛️ E0.7 classical building +1F3DB ; unqualified # 🏛 E0.7 classical building +1F3D7 FE0F ; fully-qualified # 🏗️ E0.7 building construction +1F3D7 ; unqualified # 🏗 E0.7 building construction +1F9F1 ; fully-qualified # 🧱 E11.0 brick +1FAA8 ; fully-qualified # 🪨 E13.0 rock +1FAB5 ; fully-qualified # 🪵 E13.0 wood +1F6D6 ; fully-qualified # 🛖 E13.0 hut +1F3D8 FE0F ; fully-qualified # 🏘️ E0.7 houses +1F3D8 ; unqualified # 🏘 E0.7 houses +1F3DA FE0F ; fully-qualified # 🏚️ E0.7 derelict house +1F3DA ; unqualified # 🏚 E0.7 derelict house +1F3E0 ; fully-qualified # 🏠 E0.6 house +1F3E1 ; fully-qualified # 🏡 E0.6 house with garden +1F3E2 ; fully-qualified # 🏢 E0.6 office building +1F3E3 ; fully-qualified # 🏣 E0.6 Japanese post office +1F3E4 ; fully-qualified # 🏤 E1.0 post office +1F3E5 ; fully-qualified # 🏥 E0.6 hospital +1F3E6 ; fully-qualified # 🏦 E0.6 bank +1F3E8 ; fully-qualified # 🏨 E0.6 hotel +1F3E9 ; fully-qualified # 🏩 E0.6 love hotel +1F3EA ; fully-qualified # 🏪 E0.6 convenience store +1F3EB ; fully-qualified # 🏫 E0.6 school +1F3EC ; fully-qualified # 🏬 E0.6 department store +1F3ED ; fully-qualified # 🏭 E0.6 factory +1F3EF ; fully-qualified # 🏯 E0.6 Japanese castle +1F3F0 ; fully-qualified # 🏰 E0.6 castle +1F492 ; fully-qualified # 💒 E0.6 wedding +1F5FC ; fully-qualified # 🗼 E0.6 Tokyo tower +1F5FD ; fully-qualified # 🗽 E0.6 Statue of Liberty + +# subgroup: place-religious +26EA ; fully-qualified # ⛪ E0.6 church +1F54C ; fully-qualified # 🕌 E1.0 mosque +1F6D5 ; fully-qualified # 🛕 E12.0 hindu temple +1F54D ; fully-qualified # 🕍 E1.0 synagogue +26E9 FE0F ; fully-qualified # ⛩️ E0.7 shinto shrine +26E9 ; unqualified # ⛩ E0.7 shinto shrine +1F54B ; fully-qualified # 🕋 E1.0 kaaba + +# subgroup: place-other +26F2 ; fully-qualified # ⛲ E0.6 fountain +26FA ; fully-qualified # ⛺ E0.6 tent +1F301 ; fully-qualified # 🌁 E0.6 foggy +1F303 ; fully-qualified # 🌃 E0.6 night with stars +1F3D9 FE0F ; fully-qualified # 🏙️ E0.7 cityscape +1F3D9 ; unqualified # 🏙 E0.7 cityscape +1F304 ; fully-qualified # 🌄 E0.6 sunrise over mountains +1F305 ; fully-qualified # 🌅 E0.6 sunrise +1F306 ; fully-qualified # 🌆 E0.6 cityscape at dusk +1F307 ; fully-qualified # 🌇 E0.6 sunset +1F309 ; fully-qualified # 🌉 E0.6 bridge at night +2668 FE0F ; fully-qualified # ♨️ E0.6 hot springs +2668 ; unqualified # ♨ E0.6 hot springs +1F3A0 ; fully-qualified # 🎠 E0.6 carousel horse +1F6DD ; fully-qualified # 🛝 E14.0 playground slide +1F3A1 ; fully-qualified # 🎡 E0.6 ferris wheel +1F3A2 ; fully-qualified # 🎢 E0.6 roller coaster +1F488 ; fully-qualified # 💈 E0.6 barber pole +1F3AA ; fully-qualified # 🎪 E0.6 circus tent + +# subgroup: transport-ground +1F682 ; fully-qualified # 🚂 E1.0 locomotive +1F683 ; fully-qualified # 🚃 E0.6 railway car +1F684 ; fully-qualified # 🚄 E0.6 high-speed train +1F685 ; fully-qualified # 🚅 E0.6 bullet train +1F686 ; fully-qualified # 🚆 E1.0 train +1F687 ; fully-qualified # 🚇 E0.6 metro +1F688 ; fully-qualified # 🚈 E1.0 light rail +1F689 ; fully-qualified # 🚉 E0.6 station +1F68A ; fully-qualified # 🚊 E1.0 tram +1F69D ; fully-qualified # 🚝 E1.0 monorail +1F69E ; fully-qualified # 🚞 E1.0 mountain railway +1F68B ; fully-qualified # 🚋 E1.0 tram car +1F68C ; fully-qualified # 🚌 E0.6 bus +1F68D ; fully-qualified # 🚍 E0.7 oncoming bus +1F68E ; fully-qualified # 🚎 E1.0 trolleybus +1F690 ; fully-qualified # 🚐 E1.0 minibus +1F691 ; fully-qualified # 🚑 E0.6 ambulance +1F692 ; fully-qualified # 🚒 E0.6 fire engine +1F693 ; fully-qualified # 🚓 E0.6 police car +1F694 ; fully-qualified # 🚔 E0.7 oncoming police car +1F695 ; fully-qualified # 🚕 E0.6 taxi +1F696 ; fully-qualified # 🚖 E1.0 oncoming taxi +1F697 ; fully-qualified # 🚗 E0.6 automobile +1F698 ; fully-qualified # 🚘 E0.7 oncoming automobile +1F699 ; fully-qualified # 🚙 E0.6 sport utility vehicle +1F6FB ; fully-qualified # 🛻 E13.0 pickup truck +1F69A ; fully-qualified # 🚚 E0.6 delivery truck +1F69B ; fully-qualified # 🚛 E1.0 articulated lorry +1F69C ; fully-qualified # 🚜 E1.0 tractor +1F3CE FE0F ; fully-qualified # 🏎️ E0.7 racing car +1F3CE ; unqualified # 🏎 E0.7 racing car +1F3CD FE0F ; fully-qualified # 🏍️ E0.7 motorcycle +1F3CD ; unqualified # 🏍 E0.7 motorcycle +1F6F5 ; fully-qualified # 🛵 E3.0 motor scooter +1F9BD ; fully-qualified # 🦽 E12.0 manual wheelchair +1F9BC ; fully-qualified # 🦼 E12.0 motorized wheelchair +1F6FA ; fully-qualified # 🛺 E12.0 auto rickshaw +1F6B2 ; fully-qualified # 🚲 E0.6 bicycle +1F6F4 ; fully-qualified # 🛴 E3.0 kick scooter +1F6F9 ; fully-qualified # 🛹 E11.0 skateboard +1F6FC ; fully-qualified # 🛼 E13.0 roller skate +1F68F ; fully-qualified # 🚏 E0.6 bus stop +1F6E3 FE0F ; fully-qualified # 🛣️ E0.7 motorway +1F6E3 ; unqualified # 🛣 E0.7 motorway +1F6E4 FE0F ; fully-qualified # 🛤️ E0.7 railway track +1F6E4 ; unqualified # 🛤 E0.7 railway track +1F6E2 FE0F ; fully-qualified # 🛢️ E0.7 oil drum +1F6E2 ; unqualified # 🛢 E0.7 oil drum +26FD ; fully-qualified # ⛽ E0.6 fuel pump +1F6DE ; fully-qualified # 🛞 E14.0 wheel +1F6A8 ; fully-qualified # 🚨 E0.6 police car light +1F6A5 ; fully-qualified # 🚥 E0.6 horizontal traffic light +1F6A6 ; fully-qualified # 🚦 E1.0 vertical traffic light +1F6D1 ; fully-qualified # 🛑 E3.0 stop sign +1F6A7 ; fully-qualified # 🚧 E0.6 construction + +# subgroup: transport-water +2693 ; fully-qualified # ⚓ E0.6 anchor +1F6DF ; fully-qualified # 🛟 E14.0 ring buoy +26F5 ; fully-qualified # ⛵ E0.6 sailboat +1F6F6 ; fully-qualified # 🛶 E3.0 canoe +1F6A4 ; fully-qualified # 🚤 E0.6 speedboat +1F6F3 FE0F ; fully-qualified # 🛳️ E0.7 passenger ship +1F6F3 ; unqualified # 🛳 E0.7 passenger ship +26F4 FE0F ; fully-qualified # ⛴️ E0.7 ferry +26F4 ; unqualified # ⛴ E0.7 ferry +1F6E5 FE0F ; fully-qualified # 🛥️ E0.7 motor boat +1F6E5 ; unqualified # 🛥 E0.7 motor boat +1F6A2 ; fully-qualified # 🚢 E0.6 ship + +# subgroup: transport-air +2708 FE0F ; fully-qualified # ✈️ E0.6 airplane +2708 ; unqualified # ✈ E0.6 airplane +1F6E9 FE0F ; fully-qualified # 🛩️ E0.7 small airplane +1F6E9 ; unqualified # 🛩 E0.7 small airplane +1F6EB ; fully-qualified # 🛫 E1.0 airplane departure +1F6EC ; fully-qualified # 🛬 E1.0 airplane arrival +1FA82 ; fully-qualified # 🪂 E12.0 parachute +1F4BA ; fully-qualified # 💺 E0.6 seat +1F681 ; fully-qualified # 🚁 E1.0 helicopter +1F69F ; fully-qualified # 🚟 E1.0 suspension railway +1F6A0 ; fully-qualified # 🚠 E1.0 mountain cableway +1F6A1 ; fully-qualified # 🚡 E1.0 aerial tramway +1F6F0 FE0F ; fully-qualified # 🛰️ E0.7 satellite +1F6F0 ; unqualified # 🛰 E0.7 satellite +1F680 ; fully-qualified # 🚀 E0.6 rocket +1F6F8 ; fully-qualified # 🛸 E5.0 flying saucer + +# subgroup: hotel +1F6CE FE0F ; fully-qualified # 🛎️ E0.7 bellhop bell +1F6CE ; unqualified # 🛎 E0.7 bellhop bell +1F9F3 ; fully-qualified # 🧳 E11.0 luggage + +# subgroup: time +231B ; fully-qualified # ⌛ E0.6 hourglass done +23F3 ; fully-qualified # ⏳ E0.6 hourglass not done +231A ; fully-qualified # ⌚ E0.6 watch +23F0 ; fully-qualified # ⏰ E0.6 alarm clock +23F1 FE0F ; fully-qualified # ⏱️ E1.0 stopwatch +23F1 ; unqualified # ⏱ E1.0 stopwatch +23F2 FE0F ; fully-qualified # ⏲️ E1.0 timer clock +23F2 ; unqualified # ⏲ E1.0 timer clock +1F570 FE0F ; fully-qualified # 🕰️ E0.7 mantelpiece clock +1F570 ; unqualified # 🕰 E0.7 mantelpiece clock +1F55B ; fully-qualified # 🕛 E0.6 twelve o’clock +1F567 ; fully-qualified # 🕧 E0.7 twelve-thirty +1F550 ; fully-qualified # 🕐 E0.6 one o’clock +1F55C ; fully-qualified # 🕜 E0.7 one-thirty +1F551 ; fully-qualified # 🕑 E0.6 two o’clock +1F55D ; fully-qualified # 🕝 E0.7 two-thirty +1F552 ; fully-qualified # 🕒 E0.6 three o’clock +1F55E ; fully-qualified # 🕞 E0.7 three-thirty +1F553 ; fully-qualified # 🕓 E0.6 four o’clock +1F55F ; fully-qualified # 🕟 E0.7 four-thirty +1F554 ; fully-qualified # 🕔 E0.6 five o’clock +1F560 ; fully-qualified # 🕠 E0.7 five-thirty +1F555 ; fully-qualified # 🕕 E0.6 six o’clock +1F561 ; fully-qualified # 🕡 E0.7 six-thirty +1F556 ; fully-qualified # 🕖 E0.6 seven o’clock +1F562 ; fully-qualified # 🕢 E0.7 seven-thirty +1F557 ; fully-qualified # 🕗 E0.6 eight o’clock +1F563 ; fully-qualified # 🕣 E0.7 eight-thirty +1F558 ; fully-qualified # 🕘 E0.6 nine o’clock +1F564 ; fully-qualified # 🕤 E0.7 nine-thirty +1F559 ; fully-qualified # 🕙 E0.6 ten o’clock +1F565 ; fully-qualified # 🕥 E0.7 ten-thirty +1F55A ; fully-qualified # 🕚 E0.6 eleven o’clock +1F566 ; fully-qualified # 🕦 E0.7 eleven-thirty + +# subgroup: sky & weather +1F311 ; fully-qualified # 🌑 E0.6 new moon +1F312 ; fully-qualified # 🌒 E1.0 waxing crescent moon +1F313 ; fully-qualified # 🌓 E0.6 first quarter moon +1F314 ; fully-qualified # 🌔 E0.6 waxing gibbous moon +1F315 ; fully-qualified # 🌕 E0.6 full moon +1F316 ; fully-qualified # 🌖 E1.0 waning gibbous moon +1F317 ; fully-qualified # 🌗 E1.0 last quarter moon +1F318 ; fully-qualified # 🌘 E1.0 waning crescent moon +1F319 ; fully-qualified # 🌙 E0.6 crescent moon +1F31A ; fully-qualified # 🌚 E1.0 new moon face +1F31B ; fully-qualified # 🌛 E0.6 first quarter moon face +1F31C ; fully-qualified # 🌜 E0.7 last quarter moon face +1F321 FE0F ; fully-qualified # 🌡️ E0.7 thermometer +1F321 ; unqualified # 🌡 E0.7 thermometer +2600 FE0F ; fully-qualified # ☀️ E0.6 sun +2600 ; unqualified # ☀ E0.6 sun +1F31D ; fully-qualified # 🌝 E1.0 full moon face +1F31E ; fully-qualified # 🌞 E1.0 sun with face +1FA90 ; fully-qualified # 🪐 E12.0 ringed planet +2B50 ; fully-qualified # ⭐ E0.6 star +1F31F ; fully-qualified # 🌟 E0.6 glowing star +1F320 ; fully-qualified # 🌠 E0.6 shooting star +1F30C ; fully-qualified # 🌌 E0.6 milky way +2601 FE0F ; fully-qualified # ☁️ E0.6 cloud +2601 ; unqualified # ☁ E0.6 cloud +26C5 ; fully-qualified # ⛅ E0.6 sun behind cloud +26C8 FE0F ; fully-qualified # ⛈️ E0.7 cloud with lightning and rain +26C8 ; unqualified # ⛈ E0.7 cloud with lightning and rain +1F324 FE0F ; fully-qualified # 🌤️ E0.7 sun behind small cloud +1F324 ; unqualified # 🌤 E0.7 sun behind small cloud +1F325 FE0F ; fully-qualified # 🌥️ E0.7 sun behind large cloud +1F325 ; unqualified # 🌥 E0.7 sun behind large cloud +1F326 FE0F ; fully-qualified # 🌦️ E0.7 sun behind rain cloud +1F326 ; unqualified # 🌦 E0.7 sun behind rain cloud +1F327 FE0F ; fully-qualified # 🌧️ E0.7 cloud with rain +1F327 ; unqualified # 🌧 E0.7 cloud with rain +1F328 FE0F ; fully-qualified # 🌨️ E0.7 cloud with snow +1F328 ; unqualified # 🌨 E0.7 cloud with snow +1F329 FE0F ; fully-qualified # 🌩️ E0.7 cloud with lightning +1F329 ; unqualified # 🌩 E0.7 cloud with lightning +1F32A FE0F ; fully-qualified # 🌪️ E0.7 tornado +1F32A ; unqualified # 🌪 E0.7 tornado +1F32B FE0F ; fully-qualified # 🌫️ E0.7 fog +1F32B ; unqualified # 🌫 E0.7 fog +1F32C FE0F ; fully-qualified # 🌬️ E0.7 wind face +1F32C ; unqualified # 🌬 E0.7 wind face +1F300 ; fully-qualified # 🌀 E0.6 cyclone +1F308 ; fully-qualified # 🌈 E0.6 rainbow +1F302 ; fully-qualified # 🌂 E0.6 closed umbrella +2602 FE0F ; fully-qualified # ☂️ E0.7 umbrella +2602 ; unqualified # ☂ E0.7 umbrella +2614 ; fully-qualified # ☔ E0.6 umbrella with rain drops +26F1 FE0F ; fully-qualified # ⛱️ E0.7 umbrella on ground +26F1 ; unqualified # ⛱ E0.7 umbrella on ground +26A1 ; fully-qualified # ⚡ E0.6 high voltage +2744 FE0F ; fully-qualified # ❄️ E0.6 snowflake +2744 ; unqualified # ❄ E0.6 snowflake +2603 FE0F ; fully-qualified # ☃️ E0.7 snowman +2603 ; unqualified # ☃ E0.7 snowman +26C4 ; fully-qualified # ⛄ E0.6 snowman without snow +2604 FE0F ; fully-qualified # ☄️ E1.0 comet +2604 ; unqualified # ☄ E1.0 comet +1F525 ; fully-qualified # 🔥 E0.6 fire +1F4A7 ; fully-qualified # 💧 E0.6 droplet +1F30A ; fully-qualified # 🌊 E0.6 water wave + +# Travel & Places subtotal: 267 +# Travel & Places subtotal: 267 w/o modifiers + +# group: Activities + +# subgroup: event +1F383 ; fully-qualified # 🎃 E0.6 jack-o-lantern +1F384 ; fully-qualified # 🎄 E0.6 Christmas tree +1F386 ; fully-qualified # 🎆 E0.6 fireworks +1F387 ; fully-qualified # 🎇 E0.6 sparkler +1F9E8 ; fully-qualified # 🧨 E11.0 firecracker +2728 ; fully-qualified # ✨ E0.6 sparkles +1F388 ; fully-qualified # 🎈 E0.6 balloon +1F389 ; fully-qualified # 🎉 E0.6 party popper +1F38A ; fully-qualified # 🎊 E0.6 confetti ball +1F38B ; fully-qualified # 🎋 E0.6 tanabata tree +1F38D ; fully-qualified # 🎍 E0.6 pine decoration +1F38E ; fully-qualified # 🎎 E0.6 Japanese dolls +1F38F ; fully-qualified # 🎏 E0.6 carp streamer +1F390 ; fully-qualified # 🎐 E0.6 wind chime +1F391 ; fully-qualified # 🎑 E0.6 moon viewing ceremony +1F9E7 ; fully-qualified # 🧧 E11.0 red envelope +1F380 ; fully-qualified # 🎀 E0.6 ribbon +1F381 ; fully-qualified # 🎁 E0.6 wrapped gift +1F397 FE0F ; fully-qualified # 🎗️ E0.7 reminder ribbon +1F397 ; unqualified # 🎗 E0.7 reminder ribbon +1F39F FE0F ; fully-qualified # 🎟️ E0.7 admission tickets +1F39F ; unqualified # 🎟 E0.7 admission tickets +1F3AB ; fully-qualified # 🎫 E0.6 ticket + +# subgroup: award-medal +1F396 FE0F ; fully-qualified # 🎖️ E0.7 military medal +1F396 ; unqualified # 🎖 E0.7 military medal +1F3C6 ; fully-qualified # 🏆 E0.6 trophy +1F3C5 ; fully-qualified # 🏅 E1.0 sports medal +1F947 ; fully-qualified # 🥇 E3.0 1st place medal +1F948 ; fully-qualified # 🥈 E3.0 2nd place medal +1F949 ; fully-qualified # 🥉 E3.0 3rd place medal + +# subgroup: sport +26BD ; fully-qualified # ⚽ E0.6 soccer ball +26BE ; fully-qualified # ⚾ E0.6 baseball +1F94E ; fully-qualified # 🥎 E11.0 softball +1F3C0 ; fully-qualified # 🏀 E0.6 basketball +1F3D0 ; fully-qualified # 🏐 E1.0 volleyball +1F3C8 ; fully-qualified # 🏈 E0.6 american football +1F3C9 ; fully-qualified # 🏉 E1.0 rugby football +1F3BE ; fully-qualified # 🎾 E0.6 tennis +1F94F ; fully-qualified # 🥏 E11.0 flying disc +1F3B3 ; fully-qualified # 🎳 E0.6 bowling +1F3CF ; fully-qualified # 🏏 E1.0 cricket game +1F3D1 ; fully-qualified # 🏑 E1.0 field hockey +1F3D2 ; fully-qualified # 🏒 E1.0 ice hockey +1F94D ; fully-qualified # 🥍 E11.0 lacrosse +1F3D3 ; fully-qualified # 🏓 E1.0 ping pong +1F3F8 ; fully-qualified # 🏸 E1.0 badminton +1F94A ; fully-qualified # 🥊 E3.0 boxing glove +1F94B ; fully-qualified # 🥋 E3.0 martial arts uniform +1F945 ; fully-qualified # 🥅 E3.0 goal net +26F3 ; fully-qualified # ⛳ E0.6 flag in hole +26F8 FE0F ; fully-qualified # ⛸️ E0.7 ice skate +26F8 ; unqualified # ⛸ E0.7 ice skate +1F3A3 ; fully-qualified # 🎣 E0.6 fishing pole +1F93F ; fully-qualified # 🤿 E12.0 diving mask +1F3BD ; fully-qualified # 🎽 E0.6 running shirt +1F3BF ; fully-qualified # 🎿 E0.6 skis +1F6F7 ; fully-qualified # 🛷 E5.0 sled +1F94C ; fully-qualified # 🥌 E5.0 curling stone + +# subgroup: game +1F3AF ; fully-qualified # 🎯 E0.6 bullseye +1FA80 ; fully-qualified # 🪀 E12.0 yo-yo +1FA81 ; fully-qualified # 🪁 E12.0 kite +1F3B1 ; fully-qualified # 🎱 E0.6 pool 8 ball +1F52E ; fully-qualified # 🔮 E0.6 crystal ball +1FA84 ; fully-qualified # 🪄 E13.0 magic wand +1F9FF ; fully-qualified # 🧿 E11.0 nazar amulet +1FAAC ; fully-qualified # 🪬 E14.0 hamsa +1F3AE ; fully-qualified # 🎮 E0.6 video game +1F579 FE0F ; fully-qualified # 🕹️ E0.7 joystick +1F579 ; unqualified # 🕹 E0.7 joystick +1F3B0 ; fully-qualified # 🎰 E0.6 slot machine +1F3B2 ; fully-qualified # 🎲 E0.6 game die +1F9E9 ; fully-qualified # 🧩 E11.0 puzzle piece +1F9F8 ; fully-qualified # 🧸 E11.0 teddy bear +1FA85 ; fully-qualified # 🪅 E13.0 piñata +1FAA9 ; fully-qualified # 🪩 E14.0 mirror ball +1FA86 ; fully-qualified # 🪆 E13.0 nesting dolls +2660 FE0F ; fully-qualified # ♠️ E0.6 spade suit +2660 ; unqualified # ♠ E0.6 spade suit +2665 FE0F ; fully-qualified # ♥️ E0.6 heart suit +2665 ; unqualified # ♥ E0.6 heart suit +2666 FE0F ; fully-qualified # ♦️ E0.6 diamond suit +2666 ; unqualified # ♦ E0.6 diamond suit +2663 FE0F ; fully-qualified # ♣️ E0.6 club suit +2663 ; unqualified # ♣ E0.6 club suit +265F FE0F ; fully-qualified # ♟️ E11.0 chess pawn +265F ; unqualified # ♟ E11.0 chess pawn +1F0CF ; fully-qualified # 🃏 E0.6 joker +1F004 ; fully-qualified # 🀄 E0.6 mahjong red dragon +1F3B4 ; fully-qualified # 🎴 E0.6 flower playing cards + +# subgroup: arts & crafts +1F3AD ; fully-qualified # 🎭 E0.6 performing arts +1F5BC FE0F ; fully-qualified # 🖼️ E0.7 framed picture +1F5BC ; unqualified # 🖼 E0.7 framed picture +1F3A8 ; fully-qualified # 🎨 E0.6 artist palette +1F9F5 ; fully-qualified # 🧵 E11.0 thread +1FAA1 ; fully-qualified # 🪡 E13.0 sewing needle +1F9F6 ; fully-qualified # 🧶 E11.0 yarn +1FAA2 ; fully-qualified # 🪢 E13.0 knot + +# Activities subtotal: 97 +# Activities subtotal: 97 w/o modifiers + +# group: Objects + +# subgroup: clothing +1F453 ; fully-qualified # 👓 E0.6 glasses +1F576 FE0F ; fully-qualified # 🕶️ E0.7 sunglasses +1F576 ; unqualified # 🕶 E0.7 sunglasses +1F97D ; fully-qualified # 🥽 E11.0 goggles +1F97C ; fully-qualified # 🥼 E11.0 lab coat +1F9BA ; fully-qualified # 🦺 E12.0 safety vest +1F454 ; fully-qualified # 👔 E0.6 necktie +1F455 ; fully-qualified # 👕 E0.6 t-shirt +1F456 ; fully-qualified # 👖 E0.6 jeans +1F9E3 ; fully-qualified # 🧣 E5.0 scarf +1F9E4 ; fully-qualified # 🧤 E5.0 gloves +1F9E5 ; fully-qualified # 🧥 E5.0 coat +1F9E6 ; fully-qualified # 🧦 E5.0 socks +1F457 ; fully-qualified # 👗 E0.6 dress +1F458 ; fully-qualified # 👘 E0.6 kimono +1F97B ; fully-qualified # 🥻 E12.0 sari +1FA71 ; fully-qualified # 🩱 E12.0 one-piece swimsuit +1FA72 ; fully-qualified # 🩲 E12.0 briefs +1FA73 ; fully-qualified # 🩳 E12.0 shorts +1F459 ; fully-qualified # 👙 E0.6 bikini +1F45A ; fully-qualified # 👚 E0.6 woman’s clothes +1F45B ; fully-qualified # 👛 E0.6 purse +1F45C ; fully-qualified # 👜 E0.6 handbag +1F45D ; fully-qualified # 👝 E0.6 clutch bag +1F6CD FE0F ; fully-qualified # 🛍️ E0.7 shopping bags +1F6CD ; unqualified # 🛍 E0.7 shopping bags +1F392 ; fully-qualified # 🎒 E0.6 backpack +1FA74 ; fully-qualified # 🩴 E13.0 thong sandal +1F45E ; fully-qualified # 👞 E0.6 man’s shoe +1F45F ; fully-qualified # 👟 E0.6 running shoe +1F97E ; fully-qualified # 🥾 E11.0 hiking boot +1F97F ; fully-qualified # 🥿 E11.0 flat shoe +1F460 ; fully-qualified # 👠 E0.6 high-heeled shoe +1F461 ; fully-qualified # 👡 E0.6 woman’s sandal +1FA70 ; fully-qualified # 🩰 E12.0 ballet shoes +1F462 ; fully-qualified # 👢 E0.6 woman’s boot +1F451 ; fully-qualified # 👑 E0.6 crown +1F452 ; fully-qualified # 👒 E0.6 woman’s hat +1F3A9 ; fully-qualified # 🎩 E0.6 top hat +1F393 ; fully-qualified # 🎓 E0.6 graduation cap +1F9E2 ; fully-qualified # 🧢 E5.0 billed cap +1FA96 ; fully-qualified # 🪖 E13.0 military helmet +26D1 FE0F ; fully-qualified # ⛑️ E0.7 rescue worker’s helmet +26D1 ; unqualified # ⛑ E0.7 rescue worker’s helmet +1F4FF ; fully-qualified # 📿 E1.0 prayer beads +1F484 ; fully-qualified # 💄 E0.6 lipstick +1F48D ; fully-qualified # 💍 E0.6 ring +1F48E ; fully-qualified # 💎 E0.6 gem stone + +# subgroup: sound +1F507 ; fully-qualified # 🔇 E1.0 muted speaker +1F508 ; fully-qualified # 🔈 E0.7 speaker low volume +1F509 ; fully-qualified # 🔉 E1.0 speaker medium volume +1F50A ; fully-qualified # 🔊 E0.6 speaker high volume +1F4E2 ; fully-qualified # 📢 E0.6 loudspeaker +1F4E3 ; fully-qualified # 📣 E0.6 megaphone +1F4EF ; fully-qualified # 📯 E1.0 postal horn +1F514 ; fully-qualified # 🔔 E0.6 bell +1F515 ; fully-qualified # 🔕 E1.0 bell with slash + +# subgroup: music +1F3BC ; fully-qualified # 🎼 E0.6 musical score +1F3B5 ; fully-qualified # 🎵 E0.6 musical note +1F3B6 ; fully-qualified # 🎶 E0.6 musical notes +1F399 FE0F ; fully-qualified # 🎙️ E0.7 studio microphone +1F399 ; unqualified # 🎙 E0.7 studio microphone +1F39A FE0F ; fully-qualified # 🎚️ E0.7 level slider +1F39A ; unqualified # 🎚 E0.7 level slider +1F39B FE0F ; fully-qualified # 🎛️ E0.7 control knobs +1F39B ; unqualified # 🎛 E0.7 control knobs +1F3A4 ; fully-qualified # 🎤 E0.6 microphone +1F3A7 ; fully-qualified # 🎧 E0.6 headphone +1F4FB ; fully-qualified # 📻 E0.6 radio + +# subgroup: musical-instrument +1F3B7 ; fully-qualified # 🎷 E0.6 saxophone +1FA97 ; fully-qualified # 🪗 E13.0 accordion +1F3B8 ; fully-qualified # 🎸 E0.6 guitar +1F3B9 ; fully-qualified # 🎹 E0.6 musical keyboard +1F3BA ; fully-qualified # 🎺 E0.6 trumpet +1F3BB ; fully-qualified # 🎻 E0.6 violin +1FA95 ; fully-qualified # 🪕 E12.0 banjo +1F941 ; fully-qualified # 🥁 E3.0 drum +1FA98 ; fully-qualified # 🪘 E13.0 long drum + +# subgroup: phone +1F4F1 ; fully-qualified # 📱 E0.6 mobile phone +1F4F2 ; fully-qualified # 📲 E0.6 mobile phone with arrow +260E FE0F ; fully-qualified # ☎️ E0.6 telephone +260E ; unqualified # ☎ E0.6 telephone +1F4DE ; fully-qualified # 📞 E0.6 telephone receiver +1F4DF ; fully-qualified # 📟 E0.6 pager +1F4E0 ; fully-qualified # 📠 E0.6 fax machine + +# subgroup: computer +1F50B ; fully-qualified # 🔋 E0.6 battery +1FAAB ; fully-qualified # 🪫 E14.0 low battery +1F50C ; fully-qualified # 🔌 E0.6 electric plug +1F4BB ; fully-qualified # 💻 E0.6 laptop +1F5A5 FE0F ; fully-qualified # 🖥️ E0.7 desktop computer +1F5A5 ; unqualified # 🖥 E0.7 desktop computer +1F5A8 FE0F ; fully-qualified # 🖨️ E0.7 printer +1F5A8 ; unqualified # 🖨 E0.7 printer +2328 FE0F ; fully-qualified # ⌨️ E1.0 keyboard +2328 ; unqualified # ⌨ E1.0 keyboard +1F5B1 FE0F ; fully-qualified # 🖱️ E0.7 computer mouse +1F5B1 ; unqualified # 🖱 E0.7 computer mouse +1F5B2 FE0F ; fully-qualified # 🖲️ E0.7 trackball +1F5B2 ; unqualified # 🖲 E0.7 trackball +1F4BD ; fully-qualified # 💽 E0.6 computer disk +1F4BE ; fully-qualified # 💾 E0.6 floppy disk +1F4BF ; fully-qualified # 💿 E0.6 optical disk +1F4C0 ; fully-qualified # 📀 E0.6 dvd +1F9EE ; fully-qualified # 🧮 E11.0 abacus + +# subgroup: light & video +1F3A5 ; fully-qualified # 🎥 E0.6 movie camera +1F39E FE0F ; fully-qualified # 🎞️ E0.7 film frames +1F39E ; unqualified # 🎞 E0.7 film frames +1F4FD FE0F ; fully-qualified # 📽️ E0.7 film projector +1F4FD ; unqualified # 📽 E0.7 film projector +1F3AC ; fully-qualified # 🎬 E0.6 clapper board +1F4FA ; fully-qualified # 📺 E0.6 television +1F4F7 ; fully-qualified # 📷 E0.6 camera +1F4F8 ; fully-qualified # 📸 E1.0 camera with flash +1F4F9 ; fully-qualified # 📹 E0.6 video camera +1F4FC ; fully-qualified # 📼 E0.6 videocassette +1F50D ; fully-qualified # 🔍 E0.6 magnifying glass tilted left +1F50E ; fully-qualified # 🔎 E0.6 magnifying glass tilted right +1F56F FE0F ; fully-qualified # 🕯️ E0.7 candle +1F56F ; unqualified # 🕯 E0.7 candle +1F4A1 ; fully-qualified # 💡 E0.6 light bulb +1F526 ; fully-qualified # 🔦 E0.6 flashlight +1F3EE ; fully-qualified # 🏮 E0.6 red paper lantern +1FA94 ; fully-qualified # 🪔 E12.0 diya lamp + +# subgroup: book-paper +1F4D4 ; fully-qualified # 📔 E0.6 notebook with decorative cover +1F4D5 ; fully-qualified # 📕 E0.6 closed book +1F4D6 ; fully-qualified # 📖 E0.6 open book +1F4D7 ; fully-qualified # 📗 E0.6 green book +1F4D8 ; fully-qualified # 📘 E0.6 blue book +1F4D9 ; fully-qualified # 📙 E0.6 orange book +1F4DA ; fully-qualified # 📚 E0.6 books +1F4D3 ; fully-qualified # 📓 E0.6 notebook +1F4D2 ; fully-qualified # 📒 E0.6 ledger +1F4C3 ; fully-qualified # 📃 E0.6 page with curl +1F4DC ; fully-qualified # 📜 E0.6 scroll +1F4C4 ; fully-qualified # 📄 E0.6 page facing up +1F4F0 ; fully-qualified # 📰 E0.6 newspaper +1F5DE FE0F ; fully-qualified # 🗞️ E0.7 rolled-up newspaper +1F5DE ; unqualified # 🗞 E0.7 rolled-up newspaper +1F4D1 ; fully-qualified # 📑 E0.6 bookmark tabs +1F516 ; fully-qualified # 🔖 E0.6 bookmark +1F3F7 FE0F ; fully-qualified # 🏷️ E0.7 label +1F3F7 ; unqualified # 🏷 E0.7 label + +# subgroup: money +1F4B0 ; fully-qualified # 💰 E0.6 money bag +1FA99 ; fully-qualified # 🪙 E13.0 coin +1F4B4 ; fully-qualified # 💴 E0.6 yen banknote +1F4B5 ; fully-qualified # 💵 E0.6 dollar banknote +1F4B6 ; fully-qualified # 💶 E1.0 euro banknote +1F4B7 ; fully-qualified # 💷 E1.0 pound banknote +1F4B8 ; fully-qualified # 💸 E0.6 money with wings +1F4B3 ; fully-qualified # 💳 E0.6 credit card +1F9FE ; fully-qualified # 🧾 E11.0 receipt +1F4B9 ; fully-qualified # 💹 E0.6 chart increasing with yen + +# subgroup: mail +2709 FE0F ; fully-qualified # ✉️ E0.6 envelope +2709 ; unqualified # ✉ E0.6 envelope +1F4E7 ; fully-qualified # 📧 E0.6 e-mail +1F4E8 ; fully-qualified # 📨 E0.6 incoming envelope +1F4E9 ; fully-qualified # 📩 E0.6 envelope with arrow +1F4E4 ; fully-qualified # 📤 E0.6 outbox tray +1F4E5 ; fully-qualified # 📥 E0.6 inbox tray +1F4E6 ; fully-qualified # 📦 E0.6 package +1F4EB ; fully-qualified # 📫 E0.6 closed mailbox with raised flag +1F4EA ; fully-qualified # 📪 E0.6 closed mailbox with lowered flag +1F4EC ; fully-qualified # 📬 E0.7 open mailbox with raised flag +1F4ED ; fully-qualified # 📭 E0.7 open mailbox with lowered flag +1F4EE ; fully-qualified # 📮 E0.6 postbox +1F5F3 FE0F ; fully-qualified # 🗳️ E0.7 ballot box with ballot +1F5F3 ; unqualified # 🗳 E0.7 ballot box with ballot + +# subgroup: writing +270F FE0F ; fully-qualified # ✏️ E0.6 pencil +270F ; unqualified # ✏ E0.6 pencil +2712 FE0F ; fully-qualified # ✒️ E0.6 black nib +2712 ; unqualified # ✒ E0.6 black nib +1F58B FE0F ; fully-qualified # 🖋️ E0.7 fountain pen +1F58B ; unqualified # 🖋 E0.7 fountain pen +1F58A FE0F ; fully-qualified # 🖊️ E0.7 pen +1F58A ; unqualified # 🖊 E0.7 pen +1F58C FE0F ; fully-qualified # 🖌️ E0.7 paintbrush +1F58C ; unqualified # 🖌 E0.7 paintbrush +1F58D FE0F ; fully-qualified # 🖍️ E0.7 crayon +1F58D ; unqualified # 🖍 E0.7 crayon +1F4DD ; fully-qualified # 📝 E0.6 memo + +# subgroup: office +1F4BC ; fully-qualified # 💼 E0.6 briefcase +1F4C1 ; fully-qualified # 📁 E0.6 file folder +1F4C2 ; fully-qualified # 📂 E0.6 open file folder +1F5C2 FE0F ; fully-qualified # 🗂️ E0.7 card index dividers +1F5C2 ; unqualified # 🗂 E0.7 card index dividers +1F4C5 ; fully-qualified # 📅 E0.6 calendar +1F4C6 ; fully-qualified # 📆 E0.6 tear-off calendar +1F5D2 FE0F ; fully-qualified # 🗒️ E0.7 spiral notepad +1F5D2 ; unqualified # 🗒 E0.7 spiral notepad +1F5D3 FE0F ; fully-qualified # 🗓️ E0.7 spiral calendar +1F5D3 ; unqualified # 🗓 E0.7 spiral calendar +1F4C7 ; fully-qualified # 📇 E0.6 card index +1F4C8 ; fully-qualified # 📈 E0.6 chart increasing +1F4C9 ; fully-qualified # 📉 E0.6 chart decreasing +1F4CA ; fully-qualified # 📊 E0.6 bar chart +1F4CB ; fully-qualified # 📋 E0.6 clipboard +1F4CC ; fully-qualified # 📌 E0.6 pushpin +1F4CD ; fully-qualified # 📍 E0.6 round pushpin +1F4CE ; fully-qualified # 📎 E0.6 paperclip +1F587 FE0F ; fully-qualified # 🖇️ E0.7 linked paperclips +1F587 ; unqualified # 🖇 E0.7 linked paperclips +1F4CF ; fully-qualified # 📏 E0.6 straight ruler +1F4D0 ; fully-qualified # 📐 E0.6 triangular ruler +2702 FE0F ; fully-qualified # ✂️ E0.6 scissors +2702 ; unqualified # ✂ E0.6 scissors +1F5C3 FE0F ; fully-qualified # 🗃️ E0.7 card file box +1F5C3 ; unqualified # 🗃 E0.7 card file box +1F5C4 FE0F ; fully-qualified # 🗄️ E0.7 file cabinet +1F5C4 ; unqualified # 🗄 E0.7 file cabinet +1F5D1 FE0F ; fully-qualified # 🗑️ E0.7 wastebasket +1F5D1 ; unqualified # 🗑 E0.7 wastebasket + +# subgroup: lock +1F512 ; fully-qualified # 🔒 E0.6 locked +1F513 ; fully-qualified # 🔓 E0.6 unlocked +1F50F ; fully-qualified # 🔏 E0.6 locked with pen +1F510 ; fully-qualified # 🔐 E0.6 locked with key +1F511 ; fully-qualified # 🔑 E0.6 key +1F5DD FE0F ; fully-qualified # 🗝️ E0.7 old key +1F5DD ; unqualified # 🗝 E0.7 old key + +# subgroup: tool +1F528 ; fully-qualified # 🔨 E0.6 hammer +1FA93 ; fully-qualified # 🪓 E12.0 axe +26CF FE0F ; fully-qualified # ⛏️ E0.7 pick +26CF ; unqualified # ⛏ E0.7 pick +2692 FE0F ; fully-qualified # ⚒️ E1.0 hammer and pick +2692 ; unqualified # ⚒ E1.0 hammer and pick +1F6E0 FE0F ; fully-qualified # 🛠️ E0.7 hammer and wrench +1F6E0 ; unqualified # 🛠 E0.7 hammer and wrench +1F5E1 FE0F ; fully-qualified # 🗡️ E0.7 dagger +1F5E1 ; unqualified # 🗡 E0.7 dagger +2694 FE0F ; fully-qualified # ⚔️ E1.0 crossed swords +2694 ; unqualified # ⚔ E1.0 crossed swords +1F52B ; fully-qualified # 🔫 E0.6 water pistol +1FA83 ; fully-qualified # 🪃 E13.0 boomerang +1F3F9 ; fully-qualified # 🏹 E1.0 bow and arrow +1F6E1 FE0F ; fully-qualified # 🛡️ E0.7 shield +1F6E1 ; unqualified # 🛡 E0.7 shield +1FA9A ; fully-qualified # 🪚 E13.0 carpentry saw +1F527 ; fully-qualified # 🔧 E0.6 wrench +1FA9B ; fully-qualified # 🪛 E13.0 screwdriver +1F529 ; fully-qualified # 🔩 E0.6 nut and bolt +2699 FE0F ; fully-qualified # ⚙️ E1.0 gear +2699 ; unqualified # ⚙ E1.0 gear +1F5DC FE0F ; fully-qualified # 🗜️ E0.7 clamp +1F5DC ; unqualified # 🗜 E0.7 clamp +2696 FE0F ; fully-qualified # ⚖️ E1.0 balance scale +2696 ; unqualified # ⚖ E1.0 balance scale +1F9AF ; fully-qualified # 🦯 E12.0 white cane +1F517 ; fully-qualified # 🔗 E0.6 link +26D3 FE0F ; fully-qualified # ⛓️ E0.7 chains +26D3 ; unqualified # ⛓ E0.7 chains +1FA9D ; fully-qualified # 🪝 E13.0 hook +1F9F0 ; fully-qualified # 🧰 E11.0 toolbox +1F9F2 ; fully-qualified # 🧲 E11.0 magnet +1FA9C ; fully-qualified # 🪜 E13.0 ladder + +# subgroup: science +2697 FE0F ; fully-qualified # ⚗️ E1.0 alembic +2697 ; unqualified # ⚗ E1.0 alembic +1F9EA ; fully-qualified # 🧪 E11.0 test tube +1F9EB ; fully-qualified # 🧫 E11.0 petri dish +1F9EC ; fully-qualified # 🧬 E11.0 dna +1F52C ; fully-qualified # 🔬 E1.0 microscope +1F52D ; fully-qualified # 🔭 E1.0 telescope +1F4E1 ; fully-qualified # 📡 E0.6 satellite antenna + +# subgroup: medical +1F489 ; fully-qualified # 💉 E0.6 syringe +1FA78 ; fully-qualified # 🩸 E12.0 drop of blood +1F48A ; fully-qualified # 💊 E0.6 pill +1FA79 ; fully-qualified # 🩹 E12.0 adhesive bandage +1FA7C ; fully-qualified # 🩼 E14.0 crutch +1FA7A ; fully-qualified # 🩺 E12.0 stethoscope +1FA7B ; fully-qualified # 🩻 E14.0 x-ray + +# subgroup: household +1F6AA ; fully-qualified # 🚪 E0.6 door +1F6D7 ; fully-qualified # 🛗 E13.0 elevator +1FA9E ; fully-qualified # 🪞 E13.0 mirror +1FA9F ; fully-qualified # 🪟 E13.0 window +1F6CF FE0F ; fully-qualified # 🛏️ E0.7 bed +1F6CF ; unqualified # 🛏 E0.7 bed +1F6CB FE0F ; fully-qualified # 🛋️ E0.7 couch and lamp +1F6CB ; unqualified # 🛋 E0.7 couch and lamp +1FA91 ; fully-qualified # 🪑 E12.0 chair +1F6BD ; fully-qualified # 🚽 E0.6 toilet +1FAA0 ; fully-qualified # 🪠 E13.0 plunger +1F6BF ; fully-qualified # 🚿 E1.0 shower +1F6C1 ; fully-qualified # 🛁 E1.0 bathtub +1FAA4 ; fully-qualified # 🪤 E13.0 mouse trap +1FA92 ; fully-qualified # 🪒 E12.0 razor +1F9F4 ; fully-qualified # 🧴 E11.0 lotion bottle +1F9F7 ; fully-qualified # 🧷 E11.0 safety pin +1F9F9 ; fully-qualified # 🧹 E11.0 broom +1F9FA ; fully-qualified # 🧺 E11.0 basket +1F9FB ; fully-qualified # 🧻 E11.0 roll of paper +1FAA3 ; fully-qualified # 🪣 E13.0 bucket +1F9FC ; fully-qualified # 🧼 E11.0 soap +1FAE7 ; fully-qualified # 🫧 E14.0 bubbles +1FAA5 ; fully-qualified # 🪥 E13.0 toothbrush +1F9FD ; fully-qualified # 🧽 E11.0 sponge +1F9EF ; fully-qualified # 🧯 E11.0 fire extinguisher +1F6D2 ; fully-qualified # 🛒 E3.0 shopping cart + +# subgroup: other-object +1F6AC ; fully-qualified # 🚬 E0.6 cigarette +26B0 FE0F ; fully-qualified # ⚰️ E1.0 coffin +26B0 ; unqualified # ⚰ E1.0 coffin +1FAA6 ; fully-qualified # 🪦 E13.0 headstone +26B1 FE0F ; fully-qualified # ⚱️ E1.0 funeral urn +26B1 ; unqualified # ⚱ E1.0 funeral urn +1F5FF ; fully-qualified # 🗿 E0.6 moai +1FAA7 ; fully-qualified # 🪧 E13.0 placard +1FAAA ; fully-qualified # 🪪 E14.0 identification card + +# Objects subtotal: 304 +# Objects subtotal: 304 w/o modifiers + +# group: Symbols + +# subgroup: transport-sign +1F3E7 ; fully-qualified # 🏧 E0.6 ATM sign +1F6AE ; fully-qualified # 🚮 E1.0 litter in bin sign +1F6B0 ; fully-qualified # 🚰 E1.0 potable water +267F ; fully-qualified # ♿ E0.6 wheelchair symbol +1F6B9 ; fully-qualified # 🚹 E0.6 men’s room +1F6BA ; fully-qualified # 🚺 E0.6 women’s room +1F6BB ; fully-qualified # 🚻 E0.6 restroom +1F6BC ; fully-qualified # 🚼 E0.6 baby symbol +1F6BE ; fully-qualified # 🚾 E0.6 water closet +1F6C2 ; fully-qualified # 🛂 E1.0 passport control +1F6C3 ; fully-qualified # 🛃 E1.0 customs +1F6C4 ; fully-qualified # 🛄 E1.0 baggage claim +1F6C5 ; fully-qualified # 🛅 E1.0 left luggage + +# subgroup: warning +26A0 FE0F ; fully-qualified # ⚠️ E0.6 warning +26A0 ; unqualified # ⚠ E0.6 warning +1F6B8 ; fully-qualified # 🚸 E1.0 children crossing +26D4 ; fully-qualified # ⛔ E0.6 no entry +1F6AB ; fully-qualified # 🚫 E0.6 prohibited +1F6B3 ; fully-qualified # 🚳 E1.0 no bicycles +1F6AD ; fully-qualified # 🚭 E0.6 no smoking +1F6AF ; fully-qualified # 🚯 E1.0 no littering +1F6B1 ; fully-qualified # 🚱 E1.0 non-potable water +1F6B7 ; fully-qualified # 🚷 E1.0 no pedestrians +1F4F5 ; fully-qualified # 📵 E1.0 no mobile phones +1F51E ; fully-qualified # 🔞 E0.6 no one under eighteen +2622 FE0F ; fully-qualified # ☢️ E1.0 radioactive +2622 ; unqualified # ☢ E1.0 radioactive +2623 FE0F ; fully-qualified # ☣️ E1.0 biohazard +2623 ; unqualified # ☣ E1.0 biohazard + +# subgroup: arrow +2B06 FE0F ; fully-qualified # ⬆️ E0.6 up arrow +2B06 ; unqualified # ⬆ E0.6 up arrow +2197 FE0F ; fully-qualified # ↗️ E0.6 up-right arrow +2197 ; unqualified # ↗ E0.6 up-right arrow +27A1 FE0F ; fully-qualified # ➡️ E0.6 right arrow +27A1 ; unqualified # ➡ E0.6 right arrow +2198 FE0F ; fully-qualified # ↘️ E0.6 down-right arrow +2198 ; unqualified # ↘ E0.6 down-right arrow +2B07 FE0F ; fully-qualified # ⬇️ E0.6 down arrow +2B07 ; unqualified # ⬇ E0.6 down arrow +2199 FE0F ; fully-qualified # ↙️ E0.6 down-left arrow +2199 ; unqualified # ↙ E0.6 down-left arrow +2B05 FE0F ; fully-qualified # ⬅️ E0.6 left arrow +2B05 ; unqualified # ⬅ E0.6 left arrow +2196 FE0F ; fully-qualified # ↖️ E0.6 up-left arrow +2196 ; unqualified # ↖ E0.6 up-left arrow +2195 FE0F ; fully-qualified # ↕️ E0.6 up-down arrow +2195 ; unqualified # ↕ E0.6 up-down arrow +2194 FE0F ; fully-qualified # ↔️ E0.6 left-right arrow +2194 ; unqualified # ↔ E0.6 left-right arrow +21A9 FE0F ; fully-qualified # ↩️ E0.6 right arrow curving left +21A9 ; unqualified # ↩ E0.6 right arrow curving left +21AA FE0F ; fully-qualified # ↪️ E0.6 left arrow curving right +21AA ; unqualified # ↪ E0.6 left arrow curving right +2934 FE0F ; fully-qualified # ⤴️ E0.6 right arrow curving up +2934 ; unqualified # ⤴ E0.6 right arrow curving up +2935 FE0F ; fully-qualified # ⤵️ E0.6 right arrow curving down +2935 ; unqualified # ⤵ E0.6 right arrow curving down +1F503 ; fully-qualified # 🔃 E0.6 clockwise vertical arrows +1F504 ; fully-qualified # 🔄 E1.0 counterclockwise arrows button +1F519 ; fully-qualified # 🔙 E0.6 BACK arrow +1F51A ; fully-qualified # 🔚 E0.6 END arrow +1F51B ; fully-qualified # 🔛 E0.6 ON! arrow +1F51C ; fully-qualified # 🔜 E0.6 SOON arrow +1F51D ; fully-qualified # 🔝 E0.6 TOP arrow + +# subgroup: religion +1F6D0 ; fully-qualified # 🛐 E1.0 place of worship +269B FE0F ; fully-qualified # ⚛️ E1.0 atom symbol +269B ; unqualified # ⚛ E1.0 atom symbol +1F549 FE0F ; fully-qualified # 🕉️ E0.7 om +1F549 ; unqualified # 🕉 E0.7 om +2721 FE0F ; fully-qualified # ✡️ E0.7 star of David +2721 ; unqualified # ✡ E0.7 star of David +2638 FE0F ; fully-qualified # ☸️ E0.7 wheel of dharma +2638 ; unqualified # ☸ E0.7 wheel of dharma +262F FE0F ; fully-qualified # ☯️ E0.7 yin yang +262F ; unqualified # ☯ E0.7 yin yang +271D FE0F ; fully-qualified # ✝️ E0.7 latin cross +271D ; unqualified # ✝ E0.7 latin cross +2626 FE0F ; fully-qualified # ☦️ E1.0 orthodox cross +2626 ; unqualified # ☦ E1.0 orthodox cross +262A FE0F ; fully-qualified # ☪️ E0.7 star and crescent +262A ; unqualified # ☪ E0.7 star and crescent +262E FE0F ; fully-qualified # ☮️ E1.0 peace symbol +262E ; unqualified # ☮ E1.0 peace symbol +1F54E ; fully-qualified # 🕎 E1.0 menorah +1F52F ; fully-qualified # 🔯 E0.6 dotted six-pointed star + +# subgroup: zodiac +2648 ; fully-qualified # ♈ E0.6 Aries +2649 ; fully-qualified # ♉ E0.6 Taurus +264A ; fully-qualified # ♊ E0.6 Gemini +264B ; fully-qualified # ♋ E0.6 Cancer +264C ; fully-qualified # ♌ E0.6 Leo +264D ; fully-qualified # ♍ E0.6 Virgo +264E ; fully-qualified # ♎ E0.6 Libra +264F ; fully-qualified # ♏ E0.6 Scorpio +2650 ; fully-qualified # ♐ E0.6 Sagittarius +2651 ; fully-qualified # ♑ E0.6 Capricorn +2652 ; fully-qualified # ♒ E0.6 Aquarius +2653 ; fully-qualified # ♓ E0.6 Pisces +26CE ; fully-qualified # ⛎ E0.6 Ophiuchus + +# subgroup: av-symbol +1F500 ; fully-qualified # 🔀 E1.0 shuffle tracks button +1F501 ; fully-qualified # 🔁 E1.0 repeat button +1F502 ; fully-qualified # 🔂 E1.0 repeat single button +25B6 FE0F ; fully-qualified # ▶️ E0.6 play button +25B6 ; unqualified # ▶ E0.6 play button +23E9 ; fully-qualified # ⏩ E0.6 fast-forward button +23ED FE0F ; fully-qualified # ⏭️ E0.7 next track button +23ED ; unqualified # ⏭ E0.7 next track button +23EF FE0F ; fully-qualified # ⏯️ E1.0 play or pause button +23EF ; unqualified # ⏯ E1.0 play or pause button +25C0 FE0F ; fully-qualified # ◀️ E0.6 reverse button +25C0 ; unqualified # ◀ E0.6 reverse button +23EA ; fully-qualified # ⏪ E0.6 fast reverse button +23EE FE0F ; fully-qualified # ⏮️ E0.7 last track button +23EE ; unqualified # ⏮ E0.7 last track button +1F53C ; fully-qualified # 🔼 E0.6 upwards button +23EB ; fully-qualified # ⏫ E0.6 fast up button +1F53D ; fully-qualified # 🔽 E0.6 downwards button +23EC ; fully-qualified # ⏬ E0.6 fast down button +23F8 FE0F ; fully-qualified # ⏸️ E0.7 pause button +23F8 ; unqualified # ⏸ E0.7 pause button +23F9 FE0F ; fully-qualified # ⏹️ E0.7 stop button +23F9 ; unqualified # ⏹ E0.7 stop button +23FA FE0F ; fully-qualified # ⏺️ E0.7 record button +23FA ; unqualified # ⏺ E0.7 record button +23CF FE0F ; fully-qualified # ⏏️ E1.0 eject button +23CF ; unqualified # ⏏ E1.0 eject button +1F3A6 ; fully-qualified # 🎦 E0.6 cinema +1F505 ; fully-qualified # 🔅 E1.0 dim button +1F506 ; fully-qualified # 🔆 E1.0 bright button +1F4F6 ; fully-qualified # 📶 E0.6 antenna bars +1F4F3 ; fully-qualified # 📳 E0.6 vibration mode +1F4F4 ; fully-qualified # 📴 E0.6 mobile phone off + +# subgroup: gender +2640 FE0F ; fully-qualified # ♀️ E4.0 female sign +2640 ; unqualified # ♀ E4.0 female sign +2642 FE0F ; fully-qualified # ♂️ E4.0 male sign +2642 ; unqualified # ♂ E4.0 male sign +26A7 FE0F ; fully-qualified # ⚧️ E13.0 transgender symbol +26A7 ; unqualified # ⚧ E13.0 transgender symbol + +# subgroup: math +2716 FE0F ; fully-qualified # ✖️ E0.6 multiply +2716 ; unqualified # ✖ E0.6 multiply +2795 ; fully-qualified # ➕ E0.6 plus +2796 ; fully-qualified # ➖ E0.6 minus +2797 ; fully-qualified # ➗ E0.6 divide +1F7F0 ; fully-qualified # 🟰 E14.0 heavy equals sign +267E FE0F ; fully-qualified # ♾️ E11.0 infinity +267E ; unqualified # ♾ E11.0 infinity + +# subgroup: punctuation +203C FE0F ; fully-qualified # ‼️ E0.6 double exclamation mark +203C ; unqualified # ‼ E0.6 double exclamation mark +2049 FE0F ; fully-qualified # ⁉️ E0.6 exclamation question mark +2049 ; unqualified # ⁉ E0.6 exclamation question mark +2753 ; fully-qualified # ❓ E0.6 red question mark +2754 ; fully-qualified # ❔ E0.6 white question mark +2755 ; fully-qualified # ❕ E0.6 white exclamation mark +2757 ; fully-qualified # ❗ E0.6 red exclamation mark +3030 FE0F ; fully-qualified # 〰️ E0.6 wavy dash +3030 ; unqualified # 〰 E0.6 wavy dash + +# subgroup: currency +1F4B1 ; fully-qualified # 💱 E0.6 currency exchange +1F4B2 ; fully-qualified # 💲 E0.6 heavy dollar sign + +# subgroup: other-symbol +2695 FE0F ; fully-qualified # ⚕️ E4.0 medical symbol +2695 ; unqualified # ⚕ E4.0 medical symbol +267B FE0F ; fully-qualified # ♻️ E0.6 recycling symbol +267B ; unqualified # ♻ E0.6 recycling symbol +269C FE0F ; fully-qualified # ⚜️ E1.0 fleur-de-lis +269C ; unqualified # ⚜ E1.0 fleur-de-lis +1F531 ; fully-qualified # 🔱 E0.6 trident emblem +1F4DB ; fully-qualified # 📛 E0.6 name badge +1F530 ; fully-qualified # 🔰 E0.6 Japanese symbol for beginner +2B55 ; fully-qualified # ⭕ E0.6 hollow red circle +2705 ; fully-qualified # ✅ E0.6 check mark button +2611 FE0F ; fully-qualified # ☑️ E0.6 check box with check +2611 ; unqualified # ☑ E0.6 check box with check +2714 FE0F ; fully-qualified # ✔️ E0.6 check mark +2714 ; unqualified # ✔ E0.6 check mark +274C ; fully-qualified # ❌ E0.6 cross mark +274E ; fully-qualified # ❎ E0.6 cross mark button +27B0 ; fully-qualified # ➰ E0.6 curly loop +27BF ; fully-qualified # ➿ E1.0 double curly loop +303D FE0F ; fully-qualified # 〽️ E0.6 part alternation mark +303D ; unqualified # 〽 E0.6 part alternation mark +2733 FE0F ; fully-qualified # ✳️ E0.6 eight-spoked asterisk +2733 ; unqualified # ✳ E0.6 eight-spoked asterisk +2734 FE0F ; fully-qualified # ✴️ E0.6 eight-pointed star +2734 ; unqualified # ✴ E0.6 eight-pointed star +2747 FE0F ; fully-qualified # ❇️ E0.6 sparkle +2747 ; unqualified # ❇ E0.6 sparkle +00A9 FE0F ; fully-qualified # ©️ E0.6 copyright +00A9 ; unqualified # © E0.6 copyright +00AE FE0F ; fully-qualified # ®️ E0.6 registered +00AE ; unqualified # ® E0.6 registered +2122 FE0F ; fully-qualified # ™️ E0.6 trade mark +2122 ; unqualified # ™ E0.6 trade mark + +# subgroup: keycap +0023 FE0F 20E3 ; fully-qualified # #️⃣ E0.6 keycap: # +0023 20E3 ; unqualified # #⃣ E0.6 keycap: # +002A FE0F 20E3 ; fully-qualified # *️⃣ E2.0 keycap: * +002A 20E3 ; unqualified # *⃣ E2.0 keycap: * +0030 FE0F 20E3 ; fully-qualified # 0️⃣ E0.6 keycap: 0 +0030 20E3 ; unqualified # 0⃣ E0.6 keycap: 0 +0031 FE0F 20E3 ; fully-qualified # 1️⃣ E0.6 keycap: 1 +0031 20E3 ; unqualified # 1⃣ E0.6 keycap: 1 +0032 FE0F 20E3 ; fully-qualified # 2️⃣ E0.6 keycap: 2 +0032 20E3 ; unqualified # 2⃣ E0.6 keycap: 2 +0033 FE0F 20E3 ; fully-qualified # 3️⃣ E0.6 keycap: 3 +0033 20E3 ; unqualified # 3⃣ E0.6 keycap: 3 +0034 FE0F 20E3 ; fully-qualified # 4️⃣ E0.6 keycap: 4 +0034 20E3 ; unqualified # 4⃣ E0.6 keycap: 4 +0035 FE0F 20E3 ; fully-qualified # 5️⃣ E0.6 keycap: 5 +0035 20E3 ; unqualified # 5⃣ E0.6 keycap: 5 +0036 FE0F 20E3 ; fully-qualified # 6️⃣ E0.6 keycap: 6 +0036 20E3 ; unqualified # 6⃣ E0.6 keycap: 6 +0037 FE0F 20E3 ; fully-qualified # 7️⃣ E0.6 keycap: 7 +0037 20E3 ; unqualified # 7⃣ E0.6 keycap: 7 +0038 FE0F 20E3 ; fully-qualified # 8️⃣ E0.6 keycap: 8 +0038 20E3 ; unqualified # 8⃣ E0.6 keycap: 8 +0039 FE0F 20E3 ; fully-qualified # 9️⃣ E0.6 keycap: 9 +0039 20E3 ; unqualified # 9⃣ E0.6 keycap: 9 +1F51F ; fully-qualified # 🔟 E0.6 keycap: 10 + +# subgroup: alphanum +1F520 ; fully-qualified # 🔠 E0.6 input latin uppercase +1F521 ; fully-qualified # 🔡 E0.6 input latin lowercase +1F522 ; fully-qualified # 🔢 E0.6 input numbers +1F523 ; fully-qualified # 🔣 E0.6 input symbols +1F524 ; fully-qualified # 🔤 E0.6 input latin letters +1F170 FE0F ; fully-qualified # 🅰️ E0.6 A button (blood type) +1F170 ; unqualified # 🅰 E0.6 A button (blood type) +1F18E ; fully-qualified # 🆎 E0.6 AB button (blood type) +1F171 FE0F ; fully-qualified # 🅱️ E0.6 B button (blood type) +1F171 ; unqualified # 🅱 E0.6 B button (blood type) +1F191 ; fully-qualified # 🆑 E0.6 CL button +1F192 ; fully-qualified # 🆒 E0.6 COOL button +1F193 ; fully-qualified # 🆓 E0.6 FREE button +2139 FE0F ; fully-qualified # ℹ️ E0.6 information +2139 ; unqualified # ℹ E0.6 information +1F194 ; fully-qualified # 🆔 E0.6 ID button +24C2 FE0F ; fully-qualified # Ⓜ️ E0.6 circled M +24C2 ; unqualified # Ⓜ E0.6 circled M +1F195 ; fully-qualified # 🆕 E0.6 NEW button +1F196 ; fully-qualified # 🆖 E0.6 NG button +1F17E FE0F ; fully-qualified # 🅾️ E0.6 O button (blood type) +1F17E ; unqualified # 🅾 E0.6 O button (blood type) +1F197 ; fully-qualified # 🆗 E0.6 OK button +1F17F FE0F ; fully-qualified # 🅿️ E0.6 P button +1F17F ; unqualified # 🅿 E0.6 P button +1F198 ; fully-qualified # 🆘 E0.6 SOS button +1F199 ; fully-qualified # 🆙 E0.6 UP! button +1F19A ; fully-qualified # 🆚 E0.6 VS button +1F201 ; fully-qualified # 🈁 E0.6 Japanese “here” button +1F202 FE0F ; fully-qualified # 🈂️ E0.6 Japanese “service charge” button +1F202 ; unqualified # 🈂 E0.6 Japanese “service charge” button +1F237 FE0F ; fully-qualified # 🈷️ E0.6 Japanese “monthly amount” button +1F237 ; unqualified # 🈷 E0.6 Japanese “monthly amount” button +1F236 ; fully-qualified # 🈶 E0.6 Japanese “not free of charge” button +1F22F ; fully-qualified # 🈯 E0.6 Japanese “reserved” button +1F250 ; fully-qualified # 🉐 E0.6 Japanese “bargain” button +1F239 ; fully-qualified # 🈹 E0.6 Japanese “discount” button +1F21A ; fully-qualified # 🈚 E0.6 Japanese “free of charge” button +1F232 ; fully-qualified # 🈲 E0.6 Japanese “prohibited” button +1F251 ; fully-qualified # 🉑 E0.6 Japanese “acceptable” button +1F238 ; fully-qualified # 🈸 E0.6 Japanese “application” button +1F234 ; fully-qualified # 🈴 E0.6 Japanese “passing grade” button +1F233 ; fully-qualified # 🈳 E0.6 Japanese “vacancy” button +3297 FE0F ; fully-qualified # ㊗️ E0.6 Japanese “congratulations” button +3297 ; unqualified # ㊗ E0.6 Japanese “congratulations” button +3299 FE0F ; fully-qualified # ㊙️ E0.6 Japanese “secret” button +3299 ; unqualified # ㊙ E0.6 Japanese “secret” button +1F23A ; fully-qualified # 🈺 E0.6 Japanese “open for business” button +1F235 ; fully-qualified # 🈵 E0.6 Japanese “no vacancy” button + +# subgroup: geometric +1F534 ; fully-qualified # 🔴 E0.6 red circle +1F7E0 ; fully-qualified # 🟠 E12.0 orange circle +1F7E1 ; fully-qualified # 🟡 E12.0 yellow circle +1F7E2 ; fully-qualified # 🟢 E12.0 green circle +1F535 ; fully-qualified # 🔵 E0.6 blue circle +1F7E3 ; fully-qualified # 🟣 E12.0 purple circle +1F7E4 ; fully-qualified # 🟤 E12.0 brown circle +26AB ; fully-qualified # ⚫ E0.6 black circle +26AA ; fully-qualified # ⚪ E0.6 white circle +1F7E5 ; fully-qualified # 🟥 E12.0 red square +1F7E7 ; fully-qualified # 🟧 E12.0 orange square +1F7E8 ; fully-qualified # 🟨 E12.0 yellow square +1F7E9 ; fully-qualified # 🟩 E12.0 green square +1F7E6 ; fully-qualified # 🟦 E12.0 blue square +1F7EA ; fully-qualified # 🟪 E12.0 purple square +1F7EB ; fully-qualified # 🟫 E12.0 brown square +2B1B ; fully-qualified # ⬛ E0.6 black large square +2B1C ; fully-qualified # ⬜ E0.6 white large square +25FC FE0F ; fully-qualified # ◼️ E0.6 black medium square +25FC ; unqualified # ◼ E0.6 black medium square +25FB FE0F ; fully-qualified # ◻️ E0.6 white medium square +25FB ; unqualified # ◻ E0.6 white medium square +25FE ; fully-qualified # ◾ E0.6 black medium-small square +25FD ; fully-qualified # ◽ E0.6 white medium-small square +25AA FE0F ; fully-qualified # ▪️ E0.6 black small square +25AA ; unqualified # ▪ E0.6 black small square +25AB FE0F ; fully-qualified # ▫️ E0.6 white small square +25AB ; unqualified # ▫ E0.6 white small square +1F536 ; fully-qualified # 🔶 E0.6 large orange diamond +1F537 ; fully-qualified # 🔷 E0.6 large blue diamond +1F538 ; fully-qualified # 🔸 E0.6 small orange diamond +1F539 ; fully-qualified # 🔹 E0.6 small blue diamond +1F53A ; fully-qualified # 🔺 E0.6 red triangle pointed up +1F53B ; fully-qualified # 🔻 E0.6 red triangle pointed down +1F4A0 ; fully-qualified # 💠 E0.6 diamond with a dot +1F518 ; fully-qualified # 🔘 E0.6 radio button +1F533 ; fully-qualified # 🔳 E0.6 white square button +1F532 ; fully-qualified # 🔲 E0.6 black square button + +# Symbols subtotal: 302 +# Symbols subtotal: 302 w/o modifiers + +# group: Flags + +# subgroup: flag +1F3C1 ; fully-qualified # 🏁 E0.6 chequered flag +1F6A9 ; fully-qualified # 🚩 E0.6 triangular flag +1F38C ; fully-qualified # 🎌 E0.6 crossed flags +1F3F4 ; fully-qualified # 🏴 E1.0 black flag +1F3F3 FE0F ; fully-qualified # 🏳️ E0.7 white flag +1F3F3 ; unqualified # 🏳 E0.7 white flag +1F3F3 FE0F 200D 1F308 ; fully-qualified # 🏳️‍🌈 E4.0 rainbow flag +1F3F3 200D 1F308 ; unqualified # 🏳‍🌈 E4.0 rainbow flag +1F3F3 FE0F 200D 26A7 FE0F ; fully-qualified # 🏳️‍⚧️ E13.0 transgender flag +1F3F3 200D 26A7 FE0F ; unqualified # 🏳‍⚧️ E13.0 transgender flag +1F3F3 FE0F 200D 26A7 ; unqualified # 🏳️‍⚧ E13.0 transgender flag +1F3F3 200D 26A7 ; unqualified # 🏳‍⚧ E13.0 transgender flag +1F3F4 200D 2620 FE0F ; fully-qualified # 🏴‍☠️ E11.0 pirate flag +1F3F4 200D 2620 ; minimally-qualified # 🏴‍☠ E11.0 pirate flag + +# subgroup: country-flag +1F1E6 1F1E8 ; fully-qualified # 🇦🇨 E2.0 flag: Ascension Island +1F1E6 1F1E9 ; fully-qualified # 🇦🇩 E2.0 flag: Andorra +1F1E6 1F1EA ; fully-qualified # 🇦🇪 E2.0 flag: United Arab Emirates +1F1E6 1F1EB ; fully-qualified # 🇦🇫 E2.0 flag: Afghanistan +1F1E6 1F1EC ; fully-qualified # 🇦🇬 E2.0 flag: Antigua & Barbuda +1F1E6 1F1EE ; fully-qualified # 🇦🇮 E2.0 flag: Anguilla +1F1E6 1F1F1 ; fully-qualified # 🇦🇱 E2.0 flag: Albania +1F1E6 1F1F2 ; fully-qualified # 🇦🇲 E2.0 flag: Armenia +1F1E6 1F1F4 ; fully-qualified # 🇦🇴 E2.0 flag: Angola +1F1E6 1F1F6 ; fully-qualified # 🇦🇶 E2.0 flag: Antarctica +1F1E6 1F1F7 ; fully-qualified # 🇦🇷 E2.0 flag: Argentina +1F1E6 1F1F8 ; fully-qualified # 🇦🇸 E2.0 flag: American Samoa +1F1E6 1F1F9 ; fully-qualified # 🇦🇹 E2.0 flag: Austria +1F1E6 1F1FA ; fully-qualified # 🇦🇺 E2.0 flag: Australia +1F1E6 1F1FC ; fully-qualified # 🇦🇼 E2.0 flag: Aruba +1F1E6 1F1FD ; fully-qualified # 🇦🇽 E2.0 flag: Åland Islands +1F1E6 1F1FF ; fully-qualified # 🇦🇿 E2.0 flag: Azerbaijan +1F1E7 1F1E6 ; fully-qualified # 🇧🇦 E2.0 flag: Bosnia & Herzegovina +1F1E7 1F1E7 ; fully-qualified # 🇧🇧 E2.0 flag: Barbados +1F1E7 1F1E9 ; fully-qualified # 🇧🇩 E2.0 flag: Bangladesh +1F1E7 1F1EA ; fully-qualified # 🇧🇪 E2.0 flag: Belgium +1F1E7 1F1EB ; fully-qualified # 🇧🇫 E2.0 flag: Burkina Faso +1F1E7 1F1EC ; fully-qualified # 🇧🇬 E2.0 flag: Bulgaria +1F1E7 1F1ED ; fully-qualified # 🇧🇭 E2.0 flag: Bahrain +1F1E7 1F1EE ; fully-qualified # 🇧🇮 E2.0 flag: Burundi +1F1E7 1F1EF ; fully-qualified # 🇧🇯 E2.0 flag: Benin +1F1E7 1F1F1 ; fully-qualified # 🇧🇱 E2.0 flag: St. Barthélemy +1F1E7 1F1F2 ; fully-qualified # 🇧🇲 E2.0 flag: Bermuda +1F1E7 1F1F3 ; fully-qualified # 🇧🇳 E2.0 flag: Brunei +1F1E7 1F1F4 ; fully-qualified # 🇧🇴 E2.0 flag: Bolivia +1F1E7 1F1F6 ; fully-qualified # 🇧🇶 E2.0 flag: Caribbean Netherlands +1F1E7 1F1F7 ; fully-qualified # 🇧🇷 E2.0 flag: Brazil +1F1E7 1F1F8 ; fully-qualified # 🇧🇸 E2.0 flag: Bahamas +1F1E7 1F1F9 ; fully-qualified # 🇧🇹 E2.0 flag: Bhutan +1F1E7 1F1FB ; fully-qualified # 🇧🇻 E2.0 flag: Bouvet Island +1F1E7 1F1FC ; fully-qualified # 🇧🇼 E2.0 flag: Botswana +1F1E7 1F1FE ; fully-qualified # 🇧🇾 E2.0 flag: Belarus +1F1E7 1F1FF ; fully-qualified # 🇧🇿 E2.0 flag: Belize +1F1E8 1F1E6 ; fully-qualified # 🇨🇦 E2.0 flag: Canada +1F1E8 1F1E8 ; fully-qualified # 🇨🇨 E2.0 flag: Cocos (Keeling) Islands +1F1E8 1F1E9 ; fully-qualified # 🇨🇩 E2.0 flag: Congo - Kinshasa +1F1E8 1F1EB ; fully-qualified # 🇨🇫 E2.0 flag: Central African Republic +1F1E8 1F1EC ; fully-qualified # 🇨🇬 E2.0 flag: Congo - Brazzaville +1F1E8 1F1ED ; fully-qualified # 🇨🇭 E2.0 flag: Switzerland +1F1E8 1F1EE ; fully-qualified # 🇨🇮 E2.0 flag: Côte d’Ivoire +1F1E8 1F1F0 ; fully-qualified # 🇨🇰 E2.0 flag: Cook Islands +1F1E8 1F1F1 ; fully-qualified # 🇨🇱 E2.0 flag: Chile +1F1E8 1F1F2 ; fully-qualified # 🇨🇲 E2.0 flag: Cameroon +1F1E8 1F1F3 ; fully-qualified # 🇨🇳 E0.6 flag: China +1F1E8 1F1F4 ; fully-qualified # 🇨🇴 E2.0 flag: Colombia +1F1E8 1F1F5 ; fully-qualified # 🇨🇵 E2.0 flag: Clipperton Island +1F1E8 1F1F7 ; fully-qualified # 🇨🇷 E2.0 flag: Costa Rica +1F1E8 1F1FA ; fully-qualified # 🇨🇺 E2.0 flag: Cuba +1F1E8 1F1FB ; fully-qualified # 🇨🇻 E2.0 flag: Cape Verde +1F1E8 1F1FC ; fully-qualified # 🇨🇼 E2.0 flag: Curaçao +1F1E8 1F1FD ; fully-qualified # 🇨🇽 E2.0 flag: Christmas Island +1F1E8 1F1FE ; fully-qualified # 🇨🇾 E2.0 flag: Cyprus +1F1E8 1F1FF ; fully-qualified # 🇨🇿 E2.0 flag: Czechia +1F1E9 1F1EA ; fully-qualified # 🇩🇪 E0.6 flag: Germany +1F1E9 1F1EC ; fully-qualified # 🇩🇬 E2.0 flag: Diego Garcia +1F1E9 1F1EF ; fully-qualified # 🇩🇯 E2.0 flag: Djibouti +1F1E9 1F1F0 ; fully-qualified # 🇩🇰 E2.0 flag: Denmark +1F1E9 1F1F2 ; fully-qualified # 🇩🇲 E2.0 flag: Dominica +1F1E9 1F1F4 ; fully-qualified # 🇩🇴 E2.0 flag: Dominican Republic +1F1E9 1F1FF ; fully-qualified # 🇩🇿 E2.0 flag: Algeria +1F1EA 1F1E6 ; fully-qualified # 🇪🇦 E2.0 flag: Ceuta & Melilla +1F1EA 1F1E8 ; fully-qualified # 🇪🇨 E2.0 flag: Ecuador +1F1EA 1F1EA ; fully-qualified # 🇪🇪 E2.0 flag: Estonia +1F1EA 1F1EC ; fully-qualified # 🇪🇬 E2.0 flag: Egypt +1F1EA 1F1ED ; fully-qualified # 🇪🇭 E2.0 flag: Western Sahara +1F1EA 1F1F7 ; fully-qualified # 🇪🇷 E2.0 flag: Eritrea +1F1EA 1F1F8 ; fully-qualified # 🇪🇸 E0.6 flag: Spain +1F1EA 1F1F9 ; fully-qualified # 🇪🇹 E2.0 flag: Ethiopia +1F1EA 1F1FA ; fully-qualified # 🇪🇺 E2.0 flag: European Union +1F1EB 1F1EE ; fully-qualified # 🇫🇮 E2.0 flag: Finland +1F1EB 1F1EF ; fully-qualified # 🇫🇯 E2.0 flag: Fiji +1F1EB 1F1F0 ; fully-qualified # 🇫🇰 E2.0 flag: Falkland Islands +1F1EB 1F1F2 ; fully-qualified # 🇫🇲 E2.0 flag: Micronesia +1F1EB 1F1F4 ; fully-qualified # 🇫🇴 E2.0 flag: Faroe Islands +1F1EB 1F1F7 ; fully-qualified # 🇫🇷 E0.6 flag: France +1F1EC 1F1E6 ; fully-qualified # 🇬🇦 E2.0 flag: Gabon +1F1EC 1F1E7 ; fully-qualified # 🇬🇧 E0.6 flag: United Kingdom +1F1EC 1F1E9 ; fully-qualified # 🇬🇩 E2.0 flag: Grenada +1F1EC 1F1EA ; fully-qualified # 🇬🇪 E2.0 flag: Georgia +1F1EC 1F1EB ; fully-qualified # 🇬🇫 E2.0 flag: French Guiana +1F1EC 1F1EC ; fully-qualified # 🇬🇬 E2.0 flag: Guernsey +1F1EC 1F1ED ; fully-qualified # 🇬🇭 E2.0 flag: Ghana +1F1EC 1F1EE ; fully-qualified # 🇬🇮 E2.0 flag: Gibraltar +1F1EC 1F1F1 ; fully-qualified # 🇬🇱 E2.0 flag: Greenland +1F1EC 1F1F2 ; fully-qualified # 🇬🇲 E2.0 flag: Gambia +1F1EC 1F1F3 ; fully-qualified # 🇬🇳 E2.0 flag: Guinea +1F1EC 1F1F5 ; fully-qualified # 🇬🇵 E2.0 flag: Guadeloupe +1F1EC 1F1F6 ; fully-qualified # 🇬🇶 E2.0 flag: Equatorial Guinea +1F1EC 1F1F7 ; fully-qualified # 🇬🇷 E2.0 flag: Greece +1F1EC 1F1F8 ; fully-qualified # 🇬🇸 E2.0 flag: South Georgia & South Sandwich Islands +1F1EC 1F1F9 ; fully-qualified # 🇬🇹 E2.0 flag: Guatemala +1F1EC 1F1FA ; fully-qualified # 🇬🇺 E2.0 flag: Guam +1F1EC 1F1FC ; fully-qualified # 🇬🇼 E2.0 flag: Guinea-Bissau +1F1EC 1F1FE ; fully-qualified # 🇬🇾 E2.0 flag: Guyana +1F1ED 1F1F0 ; fully-qualified # 🇭🇰 E2.0 flag: Hong Kong SAR China +1F1ED 1F1F2 ; fully-qualified # 🇭🇲 E2.0 flag: Heard & McDonald Islands +1F1ED 1F1F3 ; fully-qualified # 🇭🇳 E2.0 flag: Honduras +1F1ED 1F1F7 ; fully-qualified # 🇭🇷 E2.0 flag: Croatia +1F1ED 1F1F9 ; fully-qualified # 🇭🇹 E2.0 flag: Haiti +1F1ED 1F1FA ; fully-qualified # 🇭🇺 E2.0 flag: Hungary +1F1EE 1F1E8 ; fully-qualified # 🇮🇨 E2.0 flag: Canary Islands +1F1EE 1F1E9 ; fully-qualified # 🇮🇩 E2.0 flag: Indonesia +1F1EE 1F1EA ; fully-qualified # 🇮🇪 E2.0 flag: Ireland +1F1EE 1F1F1 ; fully-qualified # 🇮🇱 E2.0 flag: Israel +1F1EE 1F1F2 ; fully-qualified # 🇮🇲 E2.0 flag: Isle of Man +1F1EE 1F1F3 ; fully-qualified # 🇮🇳 E2.0 flag: India +1F1EE 1F1F4 ; fully-qualified # 🇮🇴 E2.0 flag: British Indian Ocean Territory +1F1EE 1F1F6 ; fully-qualified # 🇮🇶 E2.0 flag: Iraq +1F1EE 1F1F7 ; fully-qualified # 🇮🇷 E2.0 flag: Iran +1F1EE 1F1F8 ; fully-qualified # 🇮🇸 E2.0 flag: Iceland +1F1EE 1F1F9 ; fully-qualified # 🇮🇹 E0.6 flag: Italy +1F1EF 1F1EA ; fully-qualified # 🇯🇪 E2.0 flag: Jersey +1F1EF 1F1F2 ; fully-qualified # 🇯🇲 E2.0 flag: Jamaica +1F1EF 1F1F4 ; fully-qualified # 🇯🇴 E2.0 flag: Jordan +1F1EF 1F1F5 ; fully-qualified # 🇯🇵 E0.6 flag: Japan +1F1F0 1F1EA ; fully-qualified # 🇰🇪 E2.0 flag: Kenya +1F1F0 1F1EC ; fully-qualified # 🇰🇬 E2.0 flag: Kyrgyzstan +1F1F0 1F1ED ; fully-qualified # 🇰🇭 E2.0 flag: Cambodia +1F1F0 1F1EE ; fully-qualified # 🇰🇮 E2.0 flag: Kiribati +1F1F0 1F1F2 ; fully-qualified # 🇰🇲 E2.0 flag: Comoros +1F1F0 1F1F3 ; fully-qualified # 🇰🇳 E2.0 flag: St. Kitts & Nevis +1F1F0 1F1F5 ; fully-qualified # 🇰🇵 E2.0 flag: North Korea +1F1F0 1F1F7 ; fully-qualified # 🇰🇷 E0.6 flag: South Korea +1F1F0 1F1FC ; fully-qualified # 🇰🇼 E2.0 flag: Kuwait +1F1F0 1F1FE ; fully-qualified # 🇰🇾 E2.0 flag: Cayman Islands +1F1F0 1F1FF ; fully-qualified # 🇰🇿 E2.0 flag: Kazakhstan +1F1F1 1F1E6 ; fully-qualified # 🇱🇦 E2.0 flag: Laos +1F1F1 1F1E7 ; fully-qualified # 🇱🇧 E2.0 flag: Lebanon +1F1F1 1F1E8 ; fully-qualified # 🇱🇨 E2.0 flag: St. Lucia +1F1F1 1F1EE ; fully-qualified # 🇱🇮 E2.0 flag: Liechtenstein +1F1F1 1F1F0 ; fully-qualified # 🇱🇰 E2.0 flag: Sri Lanka +1F1F1 1F1F7 ; fully-qualified # 🇱🇷 E2.0 flag: Liberia +1F1F1 1F1F8 ; fully-qualified # 🇱🇸 E2.0 flag: Lesotho +1F1F1 1F1F9 ; fully-qualified # 🇱🇹 E2.0 flag: Lithuania +1F1F1 1F1FA ; fully-qualified # 🇱🇺 E2.0 flag: Luxembourg +1F1F1 1F1FB ; fully-qualified # 🇱🇻 E2.0 flag: Latvia +1F1F1 1F1FE ; fully-qualified # 🇱🇾 E2.0 flag: Libya +1F1F2 1F1E6 ; fully-qualified # 🇲🇦 E2.0 flag: Morocco +1F1F2 1F1E8 ; fully-qualified # 🇲🇨 E2.0 flag: Monaco +1F1F2 1F1E9 ; fully-qualified # 🇲🇩 E2.0 flag: Moldova +1F1F2 1F1EA ; fully-qualified # 🇲🇪 E2.0 flag: Montenegro +1F1F2 1F1EB ; fully-qualified # 🇲🇫 E2.0 flag: St. Martin +1F1F2 1F1EC ; fully-qualified # 🇲🇬 E2.0 flag: Madagascar +1F1F2 1F1ED ; fully-qualified # 🇲🇭 E2.0 flag: Marshall Islands +1F1F2 1F1F0 ; fully-qualified # 🇲🇰 E2.0 flag: North Macedonia +1F1F2 1F1F1 ; fully-qualified # 🇲🇱 E2.0 flag: Mali +1F1F2 1F1F2 ; fully-qualified # 🇲🇲 E2.0 flag: Myanmar (Burma) +1F1F2 1F1F3 ; fully-qualified # 🇲🇳 E2.0 flag: Mongolia +1F1F2 1F1F4 ; fully-qualified # 🇲🇴 E2.0 flag: Macao SAR China +1F1F2 1F1F5 ; fully-qualified # 🇲🇵 E2.0 flag: Northern Mariana Islands +1F1F2 1F1F6 ; fully-qualified # 🇲🇶 E2.0 flag: Martinique +1F1F2 1F1F7 ; fully-qualified # 🇲🇷 E2.0 flag: Mauritania +1F1F2 1F1F8 ; fully-qualified # 🇲🇸 E2.0 flag: Montserrat +1F1F2 1F1F9 ; fully-qualified # 🇲🇹 E2.0 flag: Malta +1F1F2 1F1FA ; fully-qualified # 🇲🇺 E2.0 flag: Mauritius +1F1F2 1F1FB ; fully-qualified # 🇲🇻 E2.0 flag: Maldives +1F1F2 1F1FC ; fully-qualified # 🇲🇼 E2.0 flag: Malawi +1F1F2 1F1FD ; fully-qualified # 🇲🇽 E2.0 flag: Mexico +1F1F2 1F1FE ; fully-qualified # 🇲🇾 E2.0 flag: Malaysia +1F1F2 1F1FF ; fully-qualified # 🇲🇿 E2.0 flag: Mozambique +1F1F3 1F1E6 ; fully-qualified # 🇳🇦 E2.0 flag: Namibia +1F1F3 1F1E8 ; fully-qualified # 🇳🇨 E2.0 flag: New Caledonia +1F1F3 1F1EA ; fully-qualified # 🇳🇪 E2.0 flag: Niger +1F1F3 1F1EB ; fully-qualified # 🇳🇫 E2.0 flag: Norfolk Island +1F1F3 1F1EC ; fully-qualified # 🇳🇬 E2.0 flag: Nigeria +1F1F3 1F1EE ; fully-qualified # 🇳🇮 E2.0 flag: Nicaragua +1F1F3 1F1F1 ; fully-qualified # 🇳🇱 E2.0 flag: Netherlands +1F1F3 1F1F4 ; fully-qualified # 🇳🇴 E2.0 flag: Norway +1F1F3 1F1F5 ; fully-qualified # 🇳🇵 E2.0 flag: Nepal +1F1F3 1F1F7 ; fully-qualified # 🇳🇷 E2.0 flag: Nauru +1F1F3 1F1FA ; fully-qualified # 🇳🇺 E2.0 flag: Niue +1F1F3 1F1FF ; fully-qualified # 🇳🇿 E2.0 flag: New Zealand +1F1F4 1F1F2 ; fully-qualified # 🇴🇲 E2.0 flag: Oman +1F1F5 1F1E6 ; fully-qualified # 🇵🇦 E2.0 flag: Panama +1F1F5 1F1EA ; fully-qualified # 🇵🇪 E2.0 flag: Peru +1F1F5 1F1EB ; fully-qualified # 🇵🇫 E2.0 flag: French Polynesia +1F1F5 1F1EC ; fully-qualified # 🇵🇬 E2.0 flag: Papua New Guinea +1F1F5 1F1ED ; fully-qualified # 🇵🇭 E2.0 flag: Philippines +1F1F5 1F1F0 ; fully-qualified # 🇵🇰 E2.0 flag: Pakistan +1F1F5 1F1F1 ; fully-qualified # 🇵🇱 E2.0 flag: Poland +1F1F5 1F1F2 ; fully-qualified # 🇵🇲 E2.0 flag: St. Pierre & Miquelon +1F1F5 1F1F3 ; fully-qualified # 🇵🇳 E2.0 flag: Pitcairn Islands +1F1F5 1F1F7 ; fully-qualified # 🇵🇷 E2.0 flag: Puerto Rico +1F1F5 1F1F8 ; fully-qualified # 🇵🇸 E2.0 flag: Palestinian Territories +1F1F5 1F1F9 ; fully-qualified # 🇵🇹 E2.0 flag: Portugal +1F1F5 1F1FC ; fully-qualified # 🇵🇼 E2.0 flag: Palau +1F1F5 1F1FE ; fully-qualified # 🇵🇾 E2.0 flag: Paraguay +1F1F6 1F1E6 ; fully-qualified # 🇶🇦 E2.0 flag: Qatar +1F1F7 1F1EA ; fully-qualified # 🇷🇪 E2.0 flag: Réunion +1F1F7 1F1F4 ; fully-qualified # 🇷🇴 E2.0 flag: Romania +1F1F7 1F1F8 ; fully-qualified # 🇷🇸 E2.0 flag: Serbia +1F1F7 1F1FA ; fully-qualified # 🇷🇺 E0.6 flag: Russia +1F1F7 1F1FC ; fully-qualified # 🇷🇼 E2.0 flag: Rwanda +1F1F8 1F1E6 ; fully-qualified # 🇸🇦 E2.0 flag: Saudi Arabia +1F1F8 1F1E7 ; fully-qualified # 🇸🇧 E2.0 flag: Solomon Islands +1F1F8 1F1E8 ; fully-qualified # 🇸🇨 E2.0 flag: Seychelles +1F1F8 1F1E9 ; fully-qualified # 🇸🇩 E2.0 flag: Sudan +1F1F8 1F1EA ; fully-qualified # 🇸🇪 E2.0 flag: Sweden +1F1F8 1F1EC ; fully-qualified # 🇸🇬 E2.0 flag: Singapore +1F1F8 1F1ED ; fully-qualified # 🇸🇭 E2.0 flag: St. Helena +1F1F8 1F1EE ; fully-qualified # 🇸🇮 E2.0 flag: Slovenia +1F1F8 1F1EF ; fully-qualified # 🇸🇯 E2.0 flag: Svalbard & Jan Mayen +1F1F8 1F1F0 ; fully-qualified # 🇸🇰 E2.0 flag: Slovakia +1F1F8 1F1F1 ; fully-qualified # 🇸🇱 E2.0 flag: Sierra Leone +1F1F8 1F1F2 ; fully-qualified # 🇸🇲 E2.0 flag: San Marino +1F1F8 1F1F3 ; fully-qualified # 🇸🇳 E2.0 flag: Senegal +1F1F8 1F1F4 ; fully-qualified # 🇸🇴 E2.0 flag: Somalia +1F1F8 1F1F7 ; fully-qualified # 🇸🇷 E2.0 flag: Suriname +1F1F8 1F1F8 ; fully-qualified # 🇸🇸 E2.0 flag: South Sudan +1F1F8 1F1F9 ; fully-qualified # 🇸🇹 E2.0 flag: São Tomé & Príncipe +1F1F8 1F1FB ; fully-qualified # 🇸🇻 E2.0 flag: El Salvador +1F1F8 1F1FD ; fully-qualified # 🇸🇽 E2.0 flag: Sint Maarten +1F1F8 1F1FE ; fully-qualified # 🇸🇾 E2.0 flag: Syria +1F1F8 1F1FF ; fully-qualified # 🇸🇿 E2.0 flag: Eswatini +1F1F9 1F1E6 ; fully-qualified # 🇹🇦 E2.0 flag: Tristan da Cunha +1F1F9 1F1E8 ; fully-qualified # 🇹🇨 E2.0 flag: Turks & Caicos Islands +1F1F9 1F1E9 ; fully-qualified # 🇹🇩 E2.0 flag: Chad +1F1F9 1F1EB ; fully-qualified # 🇹🇫 E2.0 flag: French Southern Territories +1F1F9 1F1EC ; fully-qualified # 🇹🇬 E2.0 flag: Togo +1F1F9 1F1ED ; fully-qualified # 🇹🇭 E2.0 flag: Thailand +1F1F9 1F1EF ; fully-qualified # 🇹🇯 E2.0 flag: Tajikistan +1F1F9 1F1F0 ; fully-qualified # 🇹🇰 E2.0 flag: Tokelau +1F1F9 1F1F1 ; fully-qualified # 🇹🇱 E2.0 flag: Timor-Leste +1F1F9 1F1F2 ; fully-qualified # 🇹🇲 E2.0 flag: Turkmenistan +1F1F9 1F1F3 ; fully-qualified # 🇹🇳 E2.0 flag: Tunisia +1F1F9 1F1F4 ; fully-qualified # 🇹🇴 E2.0 flag: Tonga +1F1F9 1F1F7 ; fully-qualified # 🇹🇷 E2.0 flag: Turkey +1F1F9 1F1F9 ; fully-qualified # 🇹🇹 E2.0 flag: Trinidad & Tobago +1F1F9 1F1FB ; fully-qualified # 🇹🇻 E2.0 flag: Tuvalu +1F1F9 1F1FC ; fully-qualified # 🇹🇼 E2.0 flag: Taiwan +1F1F9 1F1FF ; fully-qualified # 🇹🇿 E2.0 flag: Tanzania +1F1FA 1F1E6 ; fully-qualified # 🇺🇦 E2.0 flag: Ukraine +1F1FA 1F1EC ; fully-qualified # 🇺🇬 E2.0 flag: Uganda +1F1FA 1F1F2 ; fully-qualified # 🇺🇲 E2.0 flag: U.S. Outlying Islands +1F1FA 1F1F3 ; fully-qualified # 🇺🇳 E4.0 flag: United Nations +1F1FA 1F1F8 ; fully-qualified # 🇺🇸 E0.6 flag: United States +1F1FA 1F1FE ; fully-qualified # 🇺🇾 E2.0 flag: Uruguay +1F1FA 1F1FF ; fully-qualified # 🇺🇿 E2.0 flag: Uzbekistan +1F1FB 1F1E6 ; fully-qualified # 🇻🇦 E2.0 flag: Vatican City +1F1FB 1F1E8 ; fully-qualified # 🇻🇨 E2.0 flag: St. Vincent & Grenadines +1F1FB 1F1EA ; fully-qualified # 🇻🇪 E2.0 flag: Venezuela +1F1FB 1F1EC ; fully-qualified # 🇻🇬 E2.0 flag: British Virgin Islands +1F1FB 1F1EE ; fully-qualified # 🇻🇮 E2.0 flag: U.S. Virgin Islands +1F1FB 1F1F3 ; fully-qualified # 🇻🇳 E2.0 flag: Vietnam +1F1FB 1F1FA ; fully-qualified # 🇻🇺 E2.0 flag: Vanuatu +1F1FC 1F1EB ; fully-qualified # 🇼🇫 E2.0 flag: Wallis & Futuna +1F1FC 1F1F8 ; fully-qualified # 🇼🇸 E2.0 flag: Samoa +1F1FD 1F1F0 ; fully-qualified # 🇽🇰 E2.0 flag: Kosovo +1F1FE 1F1EA ; fully-qualified # 🇾🇪 E2.0 flag: Yemen +1F1FE 1F1F9 ; fully-qualified # 🇾🇹 E2.0 flag: Mayotte +1F1FF 1F1E6 ; fully-qualified # 🇿🇦 E2.0 flag: South Africa +1F1FF 1F1F2 ; fully-qualified # 🇿🇲 E2.0 flag: Zambia +1F1FF 1F1FC ; fully-qualified # 🇿🇼 E2.0 flag: Zimbabwe + +# subgroup: subdivision-flag +1F3F4 E0067 E0062 E0065 E006E E0067 E007F ; fully-qualified # 🏴󠁧󠁢󠁥󠁮󠁧󠁿 E5.0 flag: England +1F3F4 E0067 E0062 E0073 E0063 E0074 E007F ; fully-qualified # 🏴󠁧󠁢󠁳󠁣󠁴󠁿 E5.0 flag: Scotland +1F3F4 E0067 E0062 E0077 E006C E0073 E007F ; fully-qualified # 🏴󠁧󠁢󠁷󠁬󠁳󠁿 E5.0 flag: Wales + +# Flags subtotal: 275 +# Flags subtotal: 275 w/o modifiers + +# Status Counts +# fully-qualified : 3624 +# minimally-qualified : 817 +# unqualified : 252 +# component : 9 + +#EOF diff --git a/x86_64/extra/unicode-emoji/emoji-zwj-sequences-14.0.txt b/x86_64/extra/unicode-emoji/emoji-zwj-sequences-14.0.txt new file mode 100644 index 0000000..1d64edc --- /dev/null +++ b/x86_64/extra/unicode-emoji/emoji-zwj-sequences-14.0.txt @@ -0,0 +1,1410 @@ +# emoji-zwj-sequences.txt +# Date: 2021-06-08, 05:19:16 GMT +# © 2021 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# Emoji ZWJ Sequences for UTS #51 +# Version: 14.0 +# +# For documentation and usage, see http://www.unicode.org/reports/tr51 +# +# Format: +# code_point(s) ; type_field ; description # comments +# Fields: +# code_point(s): one or more code points in hex format, separated by spaces +# type_field :RGI_Emoji_ZWJ_Sequence +# The type_field is a convenience for parsing the emoji sequence files, and is not intended to be maintained as a property. +# short name: CLDR short name of sequence; characters may be escaped with \x{hex}. +# +# For the purpose of regular expressions, the above type field defines the name of +# a binary property of strings. The short name of the property is the same as the long name. +# +# Characters and sequences are listed in code point order. Users should be shown a more natural order. +# See the CLDR collation order for Emoji. + +# ================================================ + +# RGI_Emoji_ZWJ_Sequence: Family + +1F468 200D 2764 FE0F 200D 1F468 ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man # E2.0 [1] (👨‍❤️‍👨) +1F468 200D 2764 FE0F 200D 1F48B 200D 1F468 ; RGI_Emoji_ZWJ_Sequence ; kiss: man, man # E2.0 [1] (👨‍❤️‍💋‍👨) +1F468 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: man, boy # E4.0 [1] (👨‍👦) +1F468 200D 1F466 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: man, boy, boy # E4.0 [1] (👨‍👦‍👦) +1F468 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: man, girl # E4.0 [1] (👨‍👧) +1F468 200D 1F467 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: man, girl, boy # E4.0 [1] (👨‍👧‍👦) +1F468 200D 1F467 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: man, girl, girl # E4.0 [1] (👨‍👧‍👧) +1F468 200D 1F468 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: man, man, boy # E2.0 [1] (👨‍👨‍👦) +1F468 200D 1F468 200D 1F466 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: man, man, boy, boy # E2.0 [1] (👨‍👨‍👦‍👦) +1F468 200D 1F468 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: man, man, girl # E2.0 [1] (👨‍👨‍👧) +1F468 200D 1F468 200D 1F467 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: man, man, girl, boy # E2.0 [1] (👨‍👨‍👧‍👦) +1F468 200D 1F468 200D 1F467 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: man, man, girl, girl # E2.0 [1] (👨‍👨‍👧‍👧) +1F468 200D 1F469 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: man, woman, boy # E2.0 [1] (👨‍👩‍👦) +1F468 200D 1F469 200D 1F466 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: man, woman, boy, boy # E2.0 [1] (👨‍👩‍👦‍👦) +1F468 200D 1F469 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: man, woman, girl # E2.0 [1] (👨‍👩‍👧) +1F468 200D 1F469 200D 1F467 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: man, woman, girl, boy # E2.0 [1] (👨‍👩‍👧‍👦) +1F468 200D 1F469 200D 1F467 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: man, woman, girl, girl # E2.0 [1] (👨‍👩‍👧‍👧) +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, light skin tone # E13.1 [1] (👨🏻‍❤️‍👨🏻) +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, light skin tone, medium-light skin tone #E13.1[1] (👨🏻‍❤️‍👨🏼) +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, light skin tone, medium skin tone # E13.1 [1] (👨🏻‍❤️‍👨🏽) +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, light skin tone, medium-dark skin tone #E13.1[1] (👨🏻‍❤️‍👨🏾) +1F468 1F3FB 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, light skin tone, dark skin tone # E13.1 [1] (👨🏻‍❤️‍👨🏿) +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: man, man, light skin tone # E13.1 [1] (👨🏻‍❤️‍💋‍👨🏻) +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: man, man, light skin tone, medium-light skin tone #E13.1 [1] (👨🏻‍❤️‍💋‍👨🏼) +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: man, man, light skin tone, medium skin tone # E13.1 [1] (👨🏻‍❤️‍💋‍👨🏽) +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: man, man, light skin tone, medium-dark skin tone # E13.1 [1] (👨🏻‍❤️‍💋‍👨🏾) +1F468 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: man, man, light skin tone, dark skin tone # E13.1 [1] (👨🏻‍❤️‍💋‍👨🏿) +1F468 1F3FB 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men holding hands: light skin tone, medium-light skin tone # E12.1 [1] (👨🏻‍🤝‍👨🏼) +1F468 1F3FB 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men holding hands: light skin tone, medium skin tone # E12.1 [1] (👨🏻‍🤝‍👨🏽) +1F468 1F3FB 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men holding hands: light skin tone, medium-dark skin tone # E12.1 [1] (👨🏻‍🤝‍👨🏾) +1F468 1F3FB 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men holding hands: light skin tone, dark skin tone # E12.1 [1] (👨🏻‍🤝‍👨🏿) +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-light skin tone, light skin tone #E13.1[1] (👨🏼‍❤️‍👨🏻) +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-light skin tone # E13.1 [1] (👨🏼‍❤️‍👨🏼) +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-light skin tone, medium skin tone #E13.1[1] (👨🏼‍❤️‍👨🏽) +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-light skin tone, medium-dark skin tone #E13.1[1] (👨🏼‍❤️‍👨🏾) +1F468 1F3FC 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-light skin tone, dark skin tone #E13.1[1] (👨🏼‍❤️‍👨🏿) +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-light skin tone, light skin tone #E13.1 [1] (👨🏼‍❤️‍💋‍👨🏻) +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-light skin tone # E13.1 [1] (👨🏼‍❤️‍💋‍👨🏼) +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-light skin tone, medium skin tone #E13.1 [1] (👨🏼‍❤️‍💋‍👨🏽) +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-light skin tone, medium-dark skin tone #E13.1[1] (👨🏼‍❤️‍💋‍👨🏾) +1F468 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-light skin tone, dark skin tone # E13.1 [1] (👨🏼‍❤️‍💋‍👨🏿) +1F468 1F3FC 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-light skin tone, light skin tone # E12.0 [1] (👨🏼‍🤝‍👨🏻) +1F468 1F3FC 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-light skin tone, medium skin tone # E12.1 [1] (👨🏼‍🤝‍👨🏽) +1F468 1F3FC 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-light skin tone, medium-dark skin tone #E12.1 [1] (👨🏼‍🤝‍👨🏾) +1F468 1F3FC 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-light skin tone, dark skin tone # E12.1 [1] (👨🏼‍🤝‍👨🏿) +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium skin tone, light skin tone # E13.1 [1] (👨🏽‍❤️‍👨🏻) +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium skin tone, medium-light skin tone #E13.1[1] (👨🏽‍❤️‍👨🏼) +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium skin tone # E13.1 [1] (👨🏽‍❤️‍👨🏽) +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium skin tone, medium-dark skin tone #E13.1[1] (👨🏽‍❤️‍👨🏾) +1F468 1F3FD 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium skin tone, dark skin tone # E13.1 [1] (👨🏽‍❤️‍👨🏿) +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium skin tone, light skin tone # E13.1 [1] (👨🏽‍❤️‍💋‍👨🏻) +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium skin tone, medium-light skin tone #E13.1 [1] (👨🏽‍❤️‍💋‍👨🏼) +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium skin tone # E13.1 [1] (👨🏽‍❤️‍💋‍👨🏽) +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium skin tone, medium-dark skin tone #E13.1 [1] (👨🏽‍❤️‍💋‍👨🏾) +1F468 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium skin tone, dark skin tone # E13.1 [1] (👨🏽‍❤️‍💋‍👨🏿) +1F468 1F3FD 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium skin tone, light skin tone # E12.0 [1] (👨🏽‍🤝‍👨🏻) +1F468 1F3FD 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium skin tone, medium-light skin tone # E12.0 [1] (👨🏽‍🤝‍👨🏼) +1F468 1F3FD 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium skin tone, medium-dark skin tone # E12.1 [1] (👨🏽‍🤝‍👨🏾) +1F468 1F3FD 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium skin tone, dark skin tone # E12.1 [1] (👨🏽‍🤝‍👨🏿) +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-dark skin tone, light skin tone #E13.1[1] (👨🏾‍❤️‍👨🏻) +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-dark skin tone, medium-light skin tone #E13.1[1] (👨🏾‍❤️‍👨🏼) +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-dark skin tone, medium skin tone #E13.1[1] (👨🏾‍❤️‍👨🏽) +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-dark skin tone # E13.1 [1] (👨🏾‍❤️‍👨🏾) +1F468 1F3FE 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, medium-dark skin tone, dark skin tone #E13.1[1] (👨🏾‍❤️‍👨🏿) +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-dark skin tone, light skin tone # E13.1 [1] (👨🏾‍❤️‍💋‍👨🏻) +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-dark skin tone, medium-light skin tone #E13.1[1] (👨🏾‍❤️‍💋‍👨🏼) +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-dark skin tone, medium skin tone #E13.1 [1] (👨🏾‍❤️‍💋‍👨🏽) +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-dark skin tone # E13.1 [1] (👨🏾‍❤️‍💋‍👨🏾) +1F468 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: man, man, medium-dark skin tone, dark skin tone # E13.1 [1] (👨🏾‍❤️‍💋‍👨🏿) +1F468 1F3FE 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-dark skin tone, light skin tone # E12.0 [1] (👨🏾‍🤝‍👨🏻) +1F468 1F3FE 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-dark skin tone, medium-light skin tone #E12.0 [1] (👨🏾‍🤝‍👨🏼) +1F468 1F3FE 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-dark skin tone, medium skin tone # E12.0 [1] (👨🏾‍🤝‍👨🏽) +1F468 1F3FE 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; men holding hands: medium-dark skin tone, dark skin tone # E12.1 [1] (👨🏾‍🤝‍👨🏿) +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, dark skin tone, light skin tone # E13.1 [1] (👨🏿‍❤️‍👨🏻) +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, dark skin tone, medium-light skin tone #E13.1[1] (👨🏿‍❤️‍👨🏼) +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, dark skin tone, medium skin tone # E13.1 [1] (👨🏿‍❤️‍👨🏽) +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, dark skin tone, medium-dark skin tone #E13.1[1] (👨🏿‍❤️‍👨🏾) +1F468 1F3FF 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: man, man, dark skin tone # E13.1 [1] (👨🏿‍❤️‍👨🏿) +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: man, man, dark skin tone, light skin tone # E13.1 [1] (👨🏿‍❤️‍💋‍👨🏻) +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: man, man, dark skin tone, medium-light skin tone # E13.1 [1] (👨🏿‍❤️‍💋‍👨🏼) +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: man, man, dark skin tone, medium skin tone # E13.1 [1] (👨🏿‍❤️‍💋‍👨🏽) +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: man, man, dark skin tone, medium-dark skin tone # E13.1 [1] (👨🏿‍❤️‍💋‍👨🏾) +1F468 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: man, man, dark skin tone # E13.1 [1] (👨🏿‍❤️‍💋‍👨🏿) +1F468 1F3FF 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; men holding hands: dark skin tone, light skin tone # E12.0 [1] (👨🏿‍🤝‍👨🏻) +1F468 1F3FF 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; men holding hands: dark skin tone, medium-light skin tone # E12.0 [1] (👨🏿‍🤝‍👨🏼) +1F468 1F3FF 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; men holding hands: dark skin tone, medium skin tone # E12.0 [1] (👨🏿‍🤝‍👨🏽) +1F468 1F3FF 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; men holding hands: dark skin tone, medium-dark skin tone # E12.0 [1] (👨🏿‍🤝‍👨🏾) +1F469 200D 2764 FE0F 200D 1F468 ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man # E2.0 [1] (👩‍❤️‍👨) +1F469 200D 2764 FE0F 200D 1F469 ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman # E2.0 [1] (👩‍❤️‍👩) +1F469 200D 2764 FE0F 200D 1F48B 200D 1F468 ; RGI_Emoji_ZWJ_Sequence ; kiss: woman, man # E2.0 [1] (👩‍❤️‍💋‍👨) +1F469 200D 2764 FE0F 200D 1F48B 200D 1F469 ; RGI_Emoji_ZWJ_Sequence ; kiss: woman, woman # E2.0 [1] (👩‍❤️‍💋‍👩) +1F469 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: woman, boy # E4.0 [1] (👩‍👦) +1F469 200D 1F466 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: woman, boy, boy # E4.0 [1] (👩‍👦‍👦) +1F469 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: woman, girl # E4.0 [1] (👩‍👧) +1F469 200D 1F467 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: woman, girl, boy # E4.0 [1] (👩‍👧‍👦) +1F469 200D 1F467 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: woman, girl, girl # E4.0 [1] (👩‍👧‍👧) +1F469 200D 1F469 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: woman, woman, boy # E2.0 [1] (👩‍👩‍👦) +1F469 200D 1F469 200D 1F466 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: woman, woman, boy, boy # E2.0 [1] (👩‍👩‍👦‍👦) +1F469 200D 1F469 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: woman, woman, girl # E2.0 [1] (👩‍👩‍👧) +1F469 200D 1F469 200D 1F467 200D 1F466 ; RGI_Emoji_ZWJ_Sequence ; family: woman, woman, girl, boy # E2.0 [1] (👩‍👩‍👧‍👦) +1F469 200D 1F469 200D 1F467 200D 1F467 ; RGI_Emoji_ZWJ_Sequence ; family: woman, woman, girl, girl # E2.0 [1] (👩‍👩‍👧‍👧) +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, light skin tone # E13.1 [1] (👩🏻‍❤️‍👨🏻) +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, light skin tone, medium-light skin tone #E13.1[1] (👩🏻‍❤️‍👨🏼) +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, light skin tone, medium skin tone #E13.1 [1] (👩🏻‍❤️‍👨🏽) +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, light skin tone, medium-dark skin tone #E13.1[1] (👩🏻‍❤️‍👨🏾) +1F469 1F3FB 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, light skin tone, dark skin tone # E13.1 [1] (👩🏻‍❤️‍👨🏿) +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, light skin tone # E13.1 [1] (👩🏻‍❤️‍👩🏻) +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, light skin tone, medium-light skin tone #E13.1[1] (👩🏻‍❤️‍👩🏼) +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, light skin tone, medium skin tone #E13.1[1] (👩🏻‍❤️‍👩🏽) +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, light skin tone, medium-dark skin tone #E13.1[1] (👩🏻‍❤️‍👩🏾) +1F469 1F3FB 200D 2764 FE0F 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, light skin tone, dark skin tone #E13.1 [1] (👩🏻‍❤️‍👩🏿) +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, light skin tone # E13.1 [1] (👩🏻‍❤️‍💋‍👨🏻) +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, light skin tone, medium-light skin tone #E13.1[1] (👩🏻‍❤️‍💋‍👨🏼) +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, light skin tone, medium skin tone # E13.1 [1] (👩🏻‍❤️‍💋‍👨🏽) +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, light skin tone, medium-dark skin tone #E13.1 [1] (👩🏻‍❤️‍💋‍👨🏾) +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, light skin tone, dark skin tone # E13.1 [1] (👩🏻‍❤️‍💋‍👨🏿) +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, light skin tone # E13.1 [1] (👩🏻‍❤️‍💋‍👩🏻) +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, light skin tone, medium-light skin tone #E13.1[1] (👩🏻‍❤️‍💋‍👩🏼) +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, light skin tone, medium skin tone # E13.1 [1] (👩🏻‍❤️‍💋‍👩🏽) +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, light skin tone, medium-dark skin tone #E13.1[1] (👩🏻‍❤️‍💋‍👩🏾) +1F469 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, light skin tone, dark skin tone # E13.1 [1] (👩🏻‍❤️‍💋‍👩🏿) +1F469 1F3FB 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: light skin tone, medium-light skin tone #E12.0[1] (👩🏻‍🤝‍👨🏼) +1F469 1F3FB 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: light skin tone, medium skin tone # E12.0 [1] (👩🏻‍🤝‍👨🏽) +1F469 1F3FB 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: light skin tone, medium-dark skin tone #E12.0[1] (👩🏻‍🤝‍👨🏾) +1F469 1F3FB 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: light skin tone, dark skin tone # E12.0 [1] (👩🏻‍🤝‍👨🏿) +1F469 1F3FB 200D 1F91D 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women holding hands: light skin tone, medium-light skin tone # E12.1 [1] (👩🏻‍🤝‍👩🏼) +1F469 1F3FB 200D 1F91D 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women holding hands: light skin tone, medium skin tone # E12.1 [1] (👩🏻‍🤝‍👩🏽) +1F469 1F3FB 200D 1F91D 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women holding hands: light skin tone, medium-dark skin tone # E12.1 [1] (👩🏻‍🤝‍👩🏾) +1F469 1F3FB 200D 1F91D 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women holding hands: light skin tone, dark skin tone # E12.1 [1] (👩🏻‍🤝‍👩🏿) +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-light skin tone, light skin tone #E13.1[1] (👩🏼‍❤️‍👨🏻) +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-light skin tone # E13.1 [1] (👩🏼‍❤️‍👨🏼) +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-light skin tone, medium skin tone #E13.1[1] (👩🏼‍❤️‍👨🏽) +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-light skin tone, medium-dark skin tone #E13.1[1] (👩🏼‍❤️‍👨🏾) +1F469 1F3FC 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-light skin tone, dark skin tone #E13.1[1] (👩🏼‍❤️‍👨🏿) +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-light skin tone, light skin tone #E13.1[1] (👩🏼‍❤️‍👩🏻) +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-light skin tone # E13.1 [1] (👩🏼‍❤️‍👩🏼) +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-light skin tone, medium skin tone #E13.1[1] (👩🏼‍❤️‍👩🏽) +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-light skin tone, medium-dark skin tone #E13.1[1] (👩🏼‍❤️‍👩🏾) +1F469 1F3FC 200D 2764 FE0F 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-light skin tone, dark skin tone #E13.1[1] (👩🏼‍❤️‍👩🏿) +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-light skin tone, light skin tone #E13.1[1] (👩🏼‍❤️‍💋‍👨🏻) +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-light skin tone # E13.1 [1] (👩🏼‍❤️‍💋‍👨🏼) +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-light skin tone, medium skin tone #E13.1[1] (👩🏼‍❤️‍💋‍👨🏽) +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-light skin tone, medium-dark skin tone #E13.1[1] (👩🏼‍❤️‍💋‍👨🏾) +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-light skin tone, dark skin tone #E13.1 [1] (👩🏼‍❤️‍💋‍👨🏿) +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-light skin tone, light skin tone #E13.1[1] (👩🏼‍❤️‍💋‍👩🏻) +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-light skin tone # E13.1 [1] (👩🏼‍❤️‍💋‍👩🏼) +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-light skin tone, medium skin tone #E13.1[1] (👩🏼‍❤️‍💋‍👩🏽) +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-light skin tone, medium-dark skin tone #E13.1[1] (👩🏼‍❤️‍💋‍👩🏾) +1F469 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-light skin tone, dark skin tone #E13.1[1] (👩🏼‍❤️‍💋‍👩🏿) +1F469 1F3FC 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-light skin tone, light skin tone #E12.0[1] (👩🏼‍🤝‍👨🏻) +1F469 1F3FC 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-light skin tone, medium skin tone #E12.0[1] (👩🏼‍🤝‍👨🏽) +1F469 1F3FC 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-light skin tone, medium-dark skin tone #E12.0[1] (👩🏼‍🤝‍👨🏾) +1F469 1F3FC 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-light skin tone, dark skin tone #E12.0[1] (👩🏼‍🤝‍👨🏿) +1F469 1F3FC 200D 1F91D 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-light skin tone, light skin tone # E12.0 [1] (👩🏼‍🤝‍👩🏻) +1F469 1F3FC 200D 1F91D 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-light skin tone, medium skin tone # E12.1 [1] (👩🏼‍🤝‍👩🏽) +1F469 1F3FC 200D 1F91D 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-light skin tone, medium-dark skin tone #E12.1[1] (👩🏼‍🤝‍👩🏾) +1F469 1F3FC 200D 1F91D 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-light skin tone, dark skin tone # E12.1 [1] (👩🏼‍🤝‍👩🏿) +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium skin tone, light skin tone #E13.1 [1] (👩🏽‍❤️‍👨🏻) +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium skin tone, medium-light skin tone #E13.1[1] (👩🏽‍❤️‍👨🏼) +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium skin tone # E13.1 [1] (👩🏽‍❤️‍👨🏽) +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium skin tone, medium-dark skin tone #E13.1[1] (👩🏽‍❤️‍👨🏾) +1F469 1F3FD 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium skin tone, dark skin tone #E13.1 [1] (👩🏽‍❤️‍👨🏿) +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium skin tone, light skin tone #E13.1[1] (👩🏽‍❤️‍👩🏻) +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium skin tone, medium-light skin tone #E13.1[1] (👩🏽‍❤️‍👩🏼) +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium skin tone # E13.1 [1] (👩🏽‍❤️‍👩🏽) +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium skin tone, medium-dark skin tone #E13.1[1] (👩🏽‍❤️‍👩🏾) +1F469 1F3FD 200D 2764 FE0F 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium skin tone, dark skin tone #E13.1[1] (👩🏽‍❤️‍👩🏿) +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium skin tone, light skin tone # E13.1 [1] (👩🏽‍❤️‍💋‍👨🏻) +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium skin tone, medium-light skin tone #E13.1[1] (👩🏽‍❤️‍💋‍👨🏼) +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium skin tone # E13.1 [1] (👩🏽‍❤️‍💋‍👨🏽) +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium skin tone, medium-dark skin tone #E13.1[1] (👩🏽‍❤️‍💋‍👨🏾) +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium skin tone, dark skin tone # E13.1 [1] (👩🏽‍❤️‍💋‍👨🏿) +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium skin tone, light skin tone # E13.1 [1] (👩🏽‍❤️‍💋‍👩🏻) +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium skin tone, medium-light skin tone #E13.1[1] (👩🏽‍❤️‍💋‍👩🏼) +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium skin tone # E13.1 [1] (👩🏽‍❤️‍💋‍👩🏽) +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium skin tone, medium-dark skin tone #E13.1[1] (👩🏽‍❤️‍💋‍👩🏾) +1F469 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium skin tone, dark skin tone # E13.1 [1] (👩🏽‍❤️‍💋‍👩🏿) +1F469 1F3FD 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium skin tone, light skin tone # E12.0 [1] (👩🏽‍🤝‍👨🏻) +1F469 1F3FD 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium skin tone, medium-light skin tone #E12.0[1] (👩🏽‍🤝‍👨🏼) +1F469 1F3FD 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium skin tone, medium-dark skin tone #E12.0[1] (👩🏽‍🤝‍👨🏾) +1F469 1F3FD 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium skin tone, dark skin tone # E12.0 [1] (👩🏽‍🤝‍👨🏿) +1F469 1F3FD 200D 1F91D 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium skin tone, light skin tone # E12.0 [1] (👩🏽‍🤝‍👩🏻) +1F469 1F3FD 200D 1F91D 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium skin tone, medium-light skin tone # E12.0 [1] (👩🏽‍🤝‍👩🏼) +1F469 1F3FD 200D 1F91D 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium skin tone, medium-dark skin tone # E12.1 [1] (👩🏽‍🤝‍👩🏾) +1F469 1F3FD 200D 1F91D 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium skin tone, dark skin tone # E12.1 [1] (👩🏽‍🤝‍👩🏿) +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-dark skin tone, light skin tone #E13.1[1] (👩🏾‍❤️‍👨🏻) +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-dark skin tone, medium-light skin tone #E13.1[1] (👩🏾‍❤️‍👨🏼) +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-dark skin tone, medium skin tone #E13.1[1] (👩🏾‍❤️‍👨🏽) +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-dark skin tone # E13.1 [1] (👩🏾‍❤️‍👨🏾) +1F469 1F3FE 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, medium-dark skin tone, dark skin tone #E13.1[1] (👩🏾‍❤️‍👨🏿) +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-dark skin tone, light skin tone #E13.1[1] (👩🏾‍❤️‍👩🏻) +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-dark skin tone, medium-light skin tone #E13.1[1] (👩🏾‍❤️‍👩🏼) +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-dark skin tone, medium skin tone #E13.1[1] (👩🏾‍❤️‍👩🏽) +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-dark skin tone # E13.1 [1] (👩🏾‍❤️‍👩🏾) +1F469 1F3FE 200D 2764 FE0F 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, medium-dark skin tone, dark skin tone #E13.1[1] (👩🏾‍❤️‍👩🏿) +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-dark skin tone, light skin tone #E13.1 [1] (👩🏾‍❤️‍💋‍👨🏻) +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-dark skin tone, medium-light skin tone #E13.1[1] (👩🏾‍❤️‍💋‍👨🏼) +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-dark skin tone, medium skin tone #E13.1[1] (👩🏾‍❤️‍💋‍👨🏽) +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-dark skin tone # E13.1 [1] (👩🏾‍❤️‍💋‍👨🏾) +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, medium-dark skin tone, dark skin tone #E13.1 [1] (👩🏾‍❤️‍💋‍👨🏿) +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-dark skin tone, light skin tone #E13.1[1] (👩🏾‍❤️‍💋‍👩🏻) +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-dark skin tone, medium-light skin tone #E13.1[1] (👩🏾‍❤️‍💋‍👩🏼) +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-dark skin tone, medium skin tone #E13.1[1] (👩🏾‍❤️‍💋‍👩🏽) +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-dark skin tone # E13.1 [1] (👩🏾‍❤️‍💋‍👩🏾) +1F469 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, medium-dark skin tone, dark skin tone #E13.1[1] (👩🏾‍❤️‍💋‍👩🏿) +1F469 1F3FE 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-dark skin tone, light skin tone #E12.0[1] (👩🏾‍🤝‍👨🏻) +1F469 1F3FE 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-dark skin tone, medium-light skin tone #E12.0[1] (👩🏾‍🤝‍👨🏼) +1F469 1F3FE 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-dark skin tone, medium skin tone #E12.0[1] (👩🏾‍🤝‍👨🏽) +1F469 1F3FE 200D 1F91D 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: medium-dark skin tone, dark skin tone #E12.0[1] (👩🏾‍🤝‍👨🏿) +1F469 1F3FE 200D 1F91D 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-dark skin tone, light skin tone # E12.0 [1] (👩🏾‍🤝‍👩🏻) +1F469 1F3FE 200D 1F91D 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-dark skin tone, medium-light skin tone #E12.0[1] (👩🏾‍🤝‍👩🏼) +1F469 1F3FE 200D 1F91D 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-dark skin tone, medium skin tone # E12.0 [1] (👩🏾‍🤝‍👩🏽) +1F469 1F3FE 200D 1F91D 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; women holding hands: medium-dark skin tone, dark skin tone # E12.1 [1] (👩🏾‍🤝‍👩🏿) +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, dark skin tone, light skin tone # E13.1 [1] (👩🏿‍❤️‍👨🏻) +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, dark skin tone, medium-light skin tone #E13.1[1] (👩🏿‍❤️‍👨🏼) +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, dark skin tone, medium skin tone #E13.1 [1] (👩🏿‍❤️‍👨🏽) +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, dark skin tone, medium-dark skin tone #E13.1[1] (👩🏿‍❤️‍👨🏾) +1F469 1F3FF 200D 2764 FE0F 200D 1F468 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, man, dark skin tone # E13.1 [1] (👩🏿‍❤️‍👨🏿) +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, dark skin tone, light skin tone #E13.1 [1] (👩🏿‍❤️‍👩🏻) +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, dark skin tone, medium-light skin tone #E13.1[1] (👩🏿‍❤️‍👩🏼) +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, dark skin tone, medium skin tone #E13.1[1] (👩🏿‍❤️‍👩🏽) +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, dark skin tone, medium-dark skin tone #E13.1[1] (👩🏿‍❤️‍👩🏾) +1F469 1F3FF 200D 2764 FE0F 200D 1F469 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: woman, woman, dark skin tone # E13.1 [1] (👩🏿‍❤️‍👩🏿) +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, dark skin tone, light skin tone # E13.1 [1] (👩🏿‍❤️‍💋‍👨🏻) +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, dark skin tone, medium-light skin tone #E13.1 [1] (👩🏿‍❤️‍💋‍👨🏼) +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, dark skin tone, medium skin tone # E13.1 [1] (👩🏿‍❤️‍💋‍👨🏽) +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, dark skin tone, medium-dark skin tone #E13.1 [1] (👩🏿‍❤️‍💋‍👨🏾) +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F468 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, man, dark skin tone # E13.1 [1] (👩🏿‍❤️‍💋‍👨🏿) +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, dark skin tone, light skin tone # E13.1 [1] (👩🏿‍❤️‍💋‍👩🏻) +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, dark skin tone, medium-light skin tone #E13.1[1] (👩🏿‍❤️‍💋‍👩🏼) +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, dark skin tone, medium skin tone # E13.1 [1] (👩🏿‍❤️‍💋‍👩🏽) +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, dark skin tone, medium-dark skin tone #E13.1[1] (👩🏿‍❤️‍💋‍👩🏾) +1F469 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F469 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: woman, woman, dark skin tone # E13.1 [1] (👩🏿‍❤️‍💋‍👩🏿) +1F469 1F3FF 200D 1F91D 200D 1F468 1F3FB ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: dark skin tone, light skin tone # E12.0 [1] (👩🏿‍🤝‍👨🏻) +1F469 1F3FF 200D 1F91D 200D 1F468 1F3FC ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: dark skin tone, medium-light skin tone #E12.0[1] (👩🏿‍🤝‍👨🏼) +1F469 1F3FF 200D 1F91D 200D 1F468 1F3FD ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: dark skin tone, medium skin tone # E12.0 [1] (👩🏿‍🤝‍👨🏽) +1F469 1F3FF 200D 1F91D 200D 1F468 1F3FE ; RGI_Emoji_ZWJ_Sequence ; woman and man holding hands: dark skin tone, medium-dark skin tone #E12.0[1] (👩🏿‍🤝‍👨🏾) +1F469 1F3FF 200D 1F91D 200D 1F469 1F3FB ; RGI_Emoji_ZWJ_Sequence ; women holding hands: dark skin tone, light skin tone # E12.0 [1] (👩🏿‍🤝‍👩🏻) +1F469 1F3FF 200D 1F91D 200D 1F469 1F3FC ; RGI_Emoji_ZWJ_Sequence ; women holding hands: dark skin tone, medium-light skin tone # E12.0 [1] (👩🏿‍🤝‍👩🏼) +1F469 1F3FF 200D 1F91D 200D 1F469 1F3FD ; RGI_Emoji_ZWJ_Sequence ; women holding hands: dark skin tone, medium skin tone # E12.0 [1] (👩🏿‍🤝‍👩🏽) +1F469 1F3FF 200D 1F91D 200D 1F469 1F3FE ; RGI_Emoji_ZWJ_Sequence ; women holding hands: dark skin tone, medium-dark skin tone # E12.0 [1] (👩🏿‍🤝‍👩🏾) +1F9D1 200D 1F91D 200D 1F9D1 ; RGI_Emoji_ZWJ_Sequence ; people holding hands # E12.0 [1] (🧑‍🤝‍🧑) +1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: person, person, light skin tone, medium-light skin tone #E13.1[1] (🧑🏻‍❤️‍💋‍🧑🏼) +1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: person, person, light skin tone, medium skin tone #E13.1 [1] (🧑🏻‍❤️‍💋‍🧑🏽) +1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: person, person, light skin tone, medium-dark skin tone #E13.1[1] (🧑🏻‍❤️‍💋‍🧑🏾) +1F9D1 1F3FB 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: person, person, light skin tone, dark skin tone # E13.1 [1] (🧑🏻‍❤️‍💋‍🧑🏿) +1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, light skin tone, medium-light skin tone #E13.1[1] (🧑🏻‍❤️‍🧑🏼) +1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, light skin tone, medium skin tone #E13.1[1] (🧑🏻‍❤️‍🧑🏽) +1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, light skin tone, medium-dark skin tone #E13.1[1] (🧑🏻‍❤️‍🧑🏾) +1F9D1 1F3FB 200D 2764 FE0F 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, light skin tone, dark skin tone #E13.1[1] (🧑🏻‍❤️‍🧑🏿) +1F9D1 1F3FB 200D 1F384 ; RGI_Emoji_ZWJ_Sequence ; mx claus: light skin tone # E13.0 [1] (🧑🏻‍🎄) +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; people holding hands: light skin tone # E12.0 [1] (🧑🏻‍🤝‍🧑🏻) +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; people holding hands: light skin tone, medium-light skin tone # E12.1 [1] (🧑🏻‍🤝‍🧑🏼) +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; people holding hands: light skin tone, medium skin tone # E12.1 [1] (🧑🏻‍🤝‍🧑🏽) +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; people holding hands: light skin tone, medium-dark skin tone # E12.1 [1] (🧑🏻‍🤝‍🧑🏾) +1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; people holding hands: light skin tone, dark skin tone # E12.1 [1] (🧑🏻‍🤝‍🧑🏿) +1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium-light skin tone, light skin tone #E13.1[1] (🧑🏼‍❤️‍💋‍🧑🏻) +1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium-light skin tone, medium skin tone #E13.1[1] (🧑🏼‍❤️‍💋‍🧑🏽) +1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium-light skin tone, medium-dark skin tone #E13.1[1] (🧑🏼‍❤️‍💋‍🧑🏾) +1F9D1 1F3FC 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium-light skin tone, dark skin tone #E13.1[1] (🧑🏼‍❤️‍💋‍🧑🏿) +1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium-light skin tone, light skin tone #E13.1[1] (🧑🏼‍❤️‍🧑🏻) +1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium-light skin tone, medium skin tone #E13.1[1] (🧑🏼‍❤️‍🧑🏽) +1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium-light skin tone, medium-dark skin tone #E13.1[1] (🧑🏼‍❤️‍🧑🏾) +1F9D1 1F3FC 200D 2764 FE0F 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium-light skin tone, dark skin tone #E13.1[1] (🧑🏼‍❤️‍🧑🏿) +1F9D1 1F3FC 200D 1F384 ; RGI_Emoji_ZWJ_Sequence ; mx claus: medium-light skin tone # E13.0 [1] (🧑🏼‍🎄) +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-light skin tone, light skin tone # E12.0 [1] (🧑🏼‍🤝‍🧑🏻) +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-light skin tone # E12.0 [1] (🧑🏼‍🤝‍🧑🏼) +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-light skin tone, medium skin tone # E12.1 [1] (🧑🏼‍🤝‍🧑🏽) +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-light skin tone, medium-dark skin tone #E12.1[1] (🧑🏼‍🤝‍🧑🏾) +1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-light skin tone, dark skin tone # E12.1 [1] (🧑🏼‍🤝‍🧑🏿) +1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium skin tone, light skin tone #E13.1 [1] (🧑🏽‍❤️‍💋‍🧑🏻) +1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium skin tone, medium-light skin tone #E13.1[1] (🧑🏽‍❤️‍💋‍🧑🏼) +1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium skin tone, medium-dark skin tone #E13.1[1] (🧑🏽‍❤️‍💋‍🧑🏾) +1F9D1 1F3FD 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium skin tone, dark skin tone # E13.1 [1] (🧑🏽‍❤️‍💋‍🧑🏿) +1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium skin tone, light skin tone #E13.1[1] (🧑🏽‍❤️‍🧑🏻) +1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium skin tone, medium-light skin tone #E13.1[1] (🧑🏽‍❤️‍🧑🏼) +1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium skin tone, medium-dark skin tone #E13.1[1] (🧑🏽‍❤️‍🧑🏾) +1F9D1 1F3FD 200D 2764 FE0F 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium skin tone, dark skin tone #E13.1[1] (🧑🏽‍❤️‍🧑🏿) +1F9D1 1F3FD 200D 1F384 ; RGI_Emoji_ZWJ_Sequence ; mx claus: medium skin tone # E13.0 [1] (🧑🏽‍🎄) +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium skin tone, light skin tone # E12.0 [1] (🧑🏽‍🤝‍🧑🏻) +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium skin tone, medium-light skin tone # E12.0 [1] (🧑🏽‍🤝‍🧑🏼) +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium skin tone # E12.0 [1] (🧑🏽‍🤝‍🧑🏽) +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium skin tone, medium-dark skin tone # E12.1 [1] (🧑🏽‍🤝‍🧑🏾) +1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium skin tone, dark skin tone # E12.1 [1] (🧑🏽‍🤝‍🧑🏿) +1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium-dark skin tone, light skin tone #E13.1[1] (🧑🏾‍❤️‍💋‍🧑🏻) +1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium-dark skin tone, medium-light skin tone #E13.1[1] (🧑🏾‍❤️‍💋‍🧑🏼) +1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium-dark skin tone, medium skin tone #E13.1[1] (🧑🏾‍❤️‍💋‍🧑🏽) +1F9D1 1F3FE 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FF; RGI_Emoji_ZWJ_Sequence; kiss: person, person, medium-dark skin tone, dark skin tone #E13.1[1] (🧑🏾‍❤️‍💋‍🧑🏿) +1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium-dark skin tone, light skin tone #E13.1[1] (🧑🏾‍❤️‍🧑🏻) +1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium-dark skin tone, medium-light skin tone #E13.1[1] (🧑🏾‍❤️‍🧑🏼) +1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium-dark skin tone, medium skin tone #E13.1[1] (🧑🏾‍❤️‍🧑🏽) +1F9D1 1F3FE 200D 2764 FE0F 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, medium-dark skin tone, dark skin tone #E13.1[1] (🧑🏾‍❤️‍🧑🏿) +1F9D1 1F3FE 200D 1F384 ; RGI_Emoji_ZWJ_Sequence ; mx claus: medium-dark skin tone # E13.0 [1] (🧑🏾‍🎄) +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-dark skin tone, light skin tone # E12.0 [1] (🧑🏾‍🤝‍🧑🏻) +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-dark skin tone, medium-light skin tone #E12.0[1] (🧑🏾‍🤝‍🧑🏼) +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-dark skin tone, medium skin tone # E12.0 [1] (🧑🏾‍🤝‍🧑🏽) +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-dark skin tone # E12.0 [1] (🧑🏾‍🤝‍🧑🏾) +1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; people holding hands: medium-dark skin tone, dark skin tone # E12.1 [1] (🧑🏾‍🤝‍🧑🏿) +1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FB; RGI_Emoji_ZWJ_Sequence; kiss: person, person, dark skin tone, light skin tone # E13.1 [1] (🧑🏿‍❤️‍💋‍🧑🏻) +1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FC; RGI_Emoji_ZWJ_Sequence; kiss: person, person, dark skin tone, medium-light skin tone #E13.1[1] (🧑🏿‍❤️‍💋‍🧑🏼) +1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FD; RGI_Emoji_ZWJ_Sequence; kiss: person, person, dark skin tone, medium skin tone # E13.1 [1] (🧑🏿‍❤️‍💋‍🧑🏽) +1F9D1 1F3FF 200D 2764 FE0F 200D 1F48B 200D 1F9D1 1F3FE; RGI_Emoji_ZWJ_Sequence; kiss: person, person, dark skin tone, medium-dark skin tone #E13.1[1] (🧑🏿‍❤️‍💋‍🧑🏾) +1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, dark skin tone, light skin tone #E13.1[1] (🧑🏿‍❤️‍🧑🏻) +1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, dark skin tone, medium-light skin tone #E13.1[1] (🧑🏿‍❤️‍🧑🏼) +1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, dark skin tone, medium skin tone #E13.1[1] (🧑🏿‍❤️‍🧑🏽) +1F9D1 1F3FF 200D 2764 FE0F 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; couple with heart: person, person, dark skin tone, medium-dark skin tone #E13.1[1] (🧑🏿‍❤️‍🧑🏾) +1F9D1 1F3FF 200D 1F384 ; RGI_Emoji_ZWJ_Sequence ; mx claus: dark skin tone # E13.0 [1] (🧑🏿‍🎄) +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FB ; RGI_Emoji_ZWJ_Sequence ; people holding hands: dark skin tone, light skin tone # E12.0 [1] (🧑🏿‍🤝‍🧑🏻) +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FC ; RGI_Emoji_ZWJ_Sequence ; people holding hands: dark skin tone, medium-light skin tone # E12.0 [1] (🧑🏿‍🤝‍🧑🏼) +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FD ; RGI_Emoji_ZWJ_Sequence ; people holding hands: dark skin tone, medium skin tone # E12.0 [1] (🧑🏿‍🤝‍🧑🏽) +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FE ; RGI_Emoji_ZWJ_Sequence ; people holding hands: dark skin tone, medium-dark skin tone # E12.0 [1] (🧑🏿‍🤝‍🧑🏾) +1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FF ; RGI_Emoji_ZWJ_Sequence ; people holding hands: dark skin tone # E12.0 [1] (🧑🏿‍🤝‍🧑🏿) +1FAF1 1F3FB 200D 1FAF2 1F3FC ; RGI_Emoji_ZWJ_Sequence ; handshake: light skin tone, medium-light skin tone # E14.0 [1] (🫱🏻‍🫲🏼) +1FAF1 1F3FB 200D 1FAF2 1F3FD ; RGI_Emoji_ZWJ_Sequence ; handshake: light skin tone, medium skin tone # E14.0 [1] (🫱🏻‍🫲🏽) +1FAF1 1F3FB 200D 1FAF2 1F3FE ; RGI_Emoji_ZWJ_Sequence ; handshake: light skin tone, medium-dark skin tone # E14.0 [1] (🫱🏻‍🫲🏾) +1FAF1 1F3FB 200D 1FAF2 1F3FF ; RGI_Emoji_ZWJ_Sequence ; handshake: light skin tone, dark skin tone # E14.0 [1] (🫱🏻‍🫲🏿) +1FAF1 1F3FC 200D 1FAF2 1F3FB ; RGI_Emoji_ZWJ_Sequence ; handshake: medium-light skin tone, light skin tone # E14.0 [1] (🫱🏼‍🫲🏻) +1FAF1 1F3FC 200D 1FAF2 1F3FD ; RGI_Emoji_ZWJ_Sequence ; handshake: medium-light skin tone, medium skin tone # E14.0 [1] (🫱🏼‍🫲🏽) +1FAF1 1F3FC 200D 1FAF2 1F3FE ; RGI_Emoji_ZWJ_Sequence ; handshake: medium-light skin tone, medium-dark skin tone # E14.0 [1] (🫱🏼‍🫲🏾) +1FAF1 1F3FC 200D 1FAF2 1F3FF ; RGI_Emoji_ZWJ_Sequence ; handshake: medium-light skin tone, dark skin tone # E14.0 [1] (🫱🏼‍🫲🏿) +1FAF1 1F3FD 200D 1FAF2 1F3FB ; RGI_Emoji_ZWJ_Sequence ; handshake: medium skin tone, light skin tone # E14.0 [1] (🫱🏽‍🫲🏻) +1FAF1 1F3FD 200D 1FAF2 1F3FC ; RGI_Emoji_ZWJ_Sequence ; handshake: medium skin tone, medium-light skin tone # E14.0 [1] (🫱🏽‍🫲🏼) +1FAF1 1F3FD 200D 1FAF2 1F3FE ; RGI_Emoji_ZWJ_Sequence ; handshake: medium skin tone, medium-dark skin tone # E14.0 [1] (🫱🏽‍🫲🏾) +1FAF1 1F3FD 200D 1FAF2 1F3FF ; RGI_Emoji_ZWJ_Sequence ; handshake: medium skin tone, dark skin tone # E14.0 [1] (🫱🏽‍🫲🏿) +1FAF1 1F3FE 200D 1FAF2 1F3FB ; RGI_Emoji_ZWJ_Sequence ; handshake: medium-dark skin tone, light skin tone # E14.0 [1] (🫱🏾‍🫲🏻) +1FAF1 1F3FE 200D 1FAF2 1F3FC ; RGI_Emoji_ZWJ_Sequence ; handshake: medium-dark skin tone, medium-light skin tone # E14.0 [1] (🫱🏾‍🫲🏼) +1FAF1 1F3FE 200D 1FAF2 1F3FD ; RGI_Emoji_ZWJ_Sequence ; handshake: medium-dark skin tone, medium skin tone # E14.0 [1] (🫱🏾‍🫲🏽) +1FAF1 1F3FE 200D 1FAF2 1F3FF ; RGI_Emoji_ZWJ_Sequence ; handshake: medium-dark skin tone, dark skin tone # E14.0 [1] (🫱🏾‍🫲🏿) +1FAF1 1F3FF 200D 1FAF2 1F3FB ; RGI_Emoji_ZWJ_Sequence ; handshake: dark skin tone, light skin tone # E14.0 [1] (🫱🏿‍🫲🏻) +1FAF1 1F3FF 200D 1FAF2 1F3FC ; RGI_Emoji_ZWJ_Sequence ; handshake: dark skin tone, medium-light skin tone # E14.0 [1] (🫱🏿‍🫲🏼) +1FAF1 1F3FF 200D 1FAF2 1F3FD ; RGI_Emoji_ZWJ_Sequence ; handshake: dark skin tone, medium skin tone # E14.0 [1] (🫱🏿‍🫲🏽) +1FAF1 1F3FF 200D 1FAF2 1F3FE ; RGI_Emoji_ZWJ_Sequence ; handshake: dark skin tone, medium-dark skin tone # E14.0 [1] (🫱🏿‍🫲🏾) + +# Total elements: 332 + +# ================================================ + +# RGI_Emoji_ZWJ_Sequence: Role + +1F468 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; man health worker # E4.0 [1] (👨‍⚕️) +1F468 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; man judge # E4.0 [1] (👨‍⚖️) +1F468 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pilot # E4.0 [1] (👨‍✈️) +1F468 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; man farmer # E4.0 [1] (👨‍🌾) +1F468 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; man cook # E4.0 [1] (👨‍🍳) +1F468 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; man feeding baby # E13.0 [1] (👨‍🍼) +1F468 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; man student # E4.0 [1] (👨‍🎓) +1F468 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; man singer # E4.0 [1] (👨‍🎤) +1F468 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; man artist # E4.0 [1] (👨‍🎨) +1F468 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; man teacher # E4.0 [1] (👨‍🏫) +1F468 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; man factory worker # E4.0 [1] (👨‍🏭) +1F468 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; man technologist # E4.0 [1] (👨‍💻) +1F468 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; man office worker # E4.0 [1] (👨‍💼) +1F468 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; man mechanic # E4.0 [1] (👨‍🔧) +1F468 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; man scientist # E4.0 [1] (👨‍🔬) +1F468 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; man astronaut # E4.0 [1] (👨‍🚀) +1F468 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; man firefighter # E4.0 [1] (👨‍🚒) +1F468 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; man with white cane # E12.0 [1] (👨‍🦯) +1F468 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; man in motorized wheelchair # E12.0 [1] (👨‍🦼) +1F468 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; man in manual wheelchair # E12.0 [1] (👨‍🦽) +1F468 1F3FB 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; man health worker: light skin tone # E4.0 [1] (👨🏻‍⚕️) +1F468 1F3FB 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; man judge: light skin tone # E4.0 [1] (👨🏻‍⚖️) +1F468 1F3FB 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pilot: light skin tone # E4.0 [1] (👨🏻‍✈️) +1F468 1F3FB 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; man farmer: light skin tone # E4.0 [1] (👨🏻‍🌾) +1F468 1F3FB 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; man cook: light skin tone # E4.0 [1] (👨🏻‍🍳) +1F468 1F3FB 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; man feeding baby: light skin tone # E13.0 [1] (👨🏻‍🍼) +1F468 1F3FB 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; man student: light skin tone # E4.0 [1] (👨🏻‍🎓) +1F468 1F3FB 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; man singer: light skin tone # E4.0 [1] (👨🏻‍🎤) +1F468 1F3FB 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; man artist: light skin tone # E4.0 [1] (👨🏻‍🎨) +1F468 1F3FB 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; man teacher: light skin tone # E4.0 [1] (👨🏻‍🏫) +1F468 1F3FB 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; man factory worker: light skin tone # E4.0 [1] (👨🏻‍🏭) +1F468 1F3FB 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; man technologist: light skin tone # E4.0 [1] (👨🏻‍💻) +1F468 1F3FB 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; man office worker: light skin tone # E4.0 [1] (👨🏻‍💼) +1F468 1F3FB 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; man mechanic: light skin tone # E4.0 [1] (👨🏻‍🔧) +1F468 1F3FB 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; man scientist: light skin tone # E4.0 [1] (👨🏻‍🔬) +1F468 1F3FB 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; man astronaut: light skin tone # E4.0 [1] (👨🏻‍🚀) +1F468 1F3FB 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; man firefighter: light skin tone # E4.0 [1] (👨🏻‍🚒) +1F468 1F3FB 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; man with white cane: light skin tone # E12.0 [1] (👨🏻‍🦯) +1F468 1F3FB 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; man in motorized wheelchair: light skin tone # E12.0 [1] (👨🏻‍🦼) +1F468 1F3FB 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; man in manual wheelchair: light skin tone # E12.0 [1] (👨🏻‍🦽) +1F468 1F3FC 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; man health worker: medium-light skin tone # E4.0 [1] (👨🏼‍⚕️) +1F468 1F3FC 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; man judge: medium-light skin tone # E4.0 [1] (👨🏼‍⚖️) +1F468 1F3FC 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pilot: medium-light skin tone # E4.0 [1] (👨🏼‍✈️) +1F468 1F3FC 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; man farmer: medium-light skin tone # E4.0 [1] (👨🏼‍🌾) +1F468 1F3FC 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; man cook: medium-light skin tone # E4.0 [1] (👨🏼‍🍳) +1F468 1F3FC 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; man feeding baby: medium-light skin tone # E13.0 [1] (👨🏼‍🍼) +1F468 1F3FC 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; man student: medium-light skin tone # E4.0 [1] (👨🏼‍🎓) +1F468 1F3FC 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; man singer: medium-light skin tone # E4.0 [1] (👨🏼‍🎤) +1F468 1F3FC 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; man artist: medium-light skin tone # E4.0 [1] (👨🏼‍🎨) +1F468 1F3FC 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; man teacher: medium-light skin tone # E4.0 [1] (👨🏼‍🏫) +1F468 1F3FC 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; man factory worker: medium-light skin tone # E4.0 [1] (👨🏼‍🏭) +1F468 1F3FC 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; man technologist: medium-light skin tone # E4.0 [1] (👨🏼‍💻) +1F468 1F3FC 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; man office worker: medium-light skin tone # E4.0 [1] (👨🏼‍💼) +1F468 1F3FC 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; man mechanic: medium-light skin tone # E4.0 [1] (👨🏼‍🔧) +1F468 1F3FC 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; man scientist: medium-light skin tone # E4.0 [1] (👨🏼‍🔬) +1F468 1F3FC 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; man astronaut: medium-light skin tone # E4.0 [1] (👨🏼‍🚀) +1F468 1F3FC 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; man firefighter: medium-light skin tone # E4.0 [1] (👨🏼‍🚒) +1F468 1F3FC 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; man with white cane: medium-light skin tone # E12.0 [1] (👨🏼‍🦯) +1F468 1F3FC 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; man in motorized wheelchair: medium-light skin tone # E12.0 [1] (👨🏼‍🦼) +1F468 1F3FC 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; man in manual wheelchair: medium-light skin tone # E12.0 [1] (👨🏼‍🦽) +1F468 1F3FD 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; man health worker: medium skin tone # E4.0 [1] (👨🏽‍⚕️) +1F468 1F3FD 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; man judge: medium skin tone # E4.0 [1] (👨🏽‍⚖️) +1F468 1F3FD 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pilot: medium skin tone # E4.0 [1] (👨🏽‍✈️) +1F468 1F3FD 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; man farmer: medium skin tone # E4.0 [1] (👨🏽‍🌾) +1F468 1F3FD 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; man cook: medium skin tone # E4.0 [1] (👨🏽‍🍳) +1F468 1F3FD 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; man feeding baby: medium skin tone # E13.0 [1] (👨🏽‍🍼) +1F468 1F3FD 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; man student: medium skin tone # E4.0 [1] (👨🏽‍🎓) +1F468 1F3FD 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; man singer: medium skin tone # E4.0 [1] (👨🏽‍🎤) +1F468 1F3FD 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; man artist: medium skin tone # E4.0 [1] (👨🏽‍🎨) +1F468 1F3FD 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; man teacher: medium skin tone # E4.0 [1] (👨🏽‍🏫) +1F468 1F3FD 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; man factory worker: medium skin tone # E4.0 [1] (👨🏽‍🏭) +1F468 1F3FD 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; man technologist: medium skin tone # E4.0 [1] (👨🏽‍💻) +1F468 1F3FD 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; man office worker: medium skin tone # E4.0 [1] (👨🏽‍💼) +1F468 1F3FD 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; man mechanic: medium skin tone # E4.0 [1] (👨🏽‍🔧) +1F468 1F3FD 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; man scientist: medium skin tone # E4.0 [1] (👨🏽‍🔬) +1F468 1F3FD 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; man astronaut: medium skin tone # E4.0 [1] (👨🏽‍🚀) +1F468 1F3FD 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; man firefighter: medium skin tone # E4.0 [1] (👨🏽‍🚒) +1F468 1F3FD 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; man with white cane: medium skin tone # E12.0 [1] (👨🏽‍🦯) +1F468 1F3FD 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; man in motorized wheelchair: medium skin tone # E12.0 [1] (👨🏽‍🦼) +1F468 1F3FD 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; man in manual wheelchair: medium skin tone # E12.0 [1] (👨🏽‍🦽) +1F468 1F3FE 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; man health worker: medium-dark skin tone # E4.0 [1] (👨🏾‍⚕️) +1F468 1F3FE 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; man judge: medium-dark skin tone # E4.0 [1] (👨🏾‍⚖️) +1F468 1F3FE 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pilot: medium-dark skin tone # E4.0 [1] (👨🏾‍✈️) +1F468 1F3FE 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; man farmer: medium-dark skin tone # E4.0 [1] (👨🏾‍🌾) +1F468 1F3FE 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; man cook: medium-dark skin tone # E4.0 [1] (👨🏾‍🍳) +1F468 1F3FE 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; man feeding baby: medium-dark skin tone # E13.0 [1] (👨🏾‍🍼) +1F468 1F3FE 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; man student: medium-dark skin tone # E4.0 [1] (👨🏾‍🎓) +1F468 1F3FE 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; man singer: medium-dark skin tone # E4.0 [1] (👨🏾‍🎤) +1F468 1F3FE 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; man artist: medium-dark skin tone # E4.0 [1] (👨🏾‍🎨) +1F468 1F3FE 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; man teacher: medium-dark skin tone # E4.0 [1] (👨🏾‍🏫) +1F468 1F3FE 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; man factory worker: medium-dark skin tone # E4.0 [1] (👨🏾‍🏭) +1F468 1F3FE 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; man technologist: medium-dark skin tone # E4.0 [1] (👨🏾‍💻) +1F468 1F3FE 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; man office worker: medium-dark skin tone # E4.0 [1] (👨🏾‍💼) +1F468 1F3FE 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; man mechanic: medium-dark skin tone # E4.0 [1] (👨🏾‍🔧) +1F468 1F3FE 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; man scientist: medium-dark skin tone # E4.0 [1] (👨🏾‍🔬) +1F468 1F3FE 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; man astronaut: medium-dark skin tone # E4.0 [1] (👨🏾‍🚀) +1F468 1F3FE 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; man firefighter: medium-dark skin tone # E4.0 [1] (👨🏾‍🚒) +1F468 1F3FE 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; man with white cane: medium-dark skin tone # E12.0 [1] (👨🏾‍🦯) +1F468 1F3FE 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; man in motorized wheelchair: medium-dark skin tone # E12.0 [1] (👨🏾‍🦼) +1F468 1F3FE 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; man in manual wheelchair: medium-dark skin tone # E12.0 [1] (👨🏾‍🦽) +1F468 1F3FF 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; man health worker: dark skin tone # E4.0 [1] (👨🏿‍⚕️) +1F468 1F3FF 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; man judge: dark skin tone # E4.0 [1] (👨🏿‍⚖️) +1F468 1F3FF 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pilot: dark skin tone # E4.0 [1] (👨🏿‍✈️) +1F468 1F3FF 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; man farmer: dark skin tone # E4.0 [1] (👨🏿‍🌾) +1F468 1F3FF 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; man cook: dark skin tone # E4.0 [1] (👨🏿‍🍳) +1F468 1F3FF 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; man feeding baby: dark skin tone # E13.0 [1] (👨🏿‍🍼) +1F468 1F3FF 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; man student: dark skin tone # E4.0 [1] (👨🏿‍🎓) +1F468 1F3FF 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; man singer: dark skin tone # E4.0 [1] (👨🏿‍🎤) +1F468 1F3FF 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; man artist: dark skin tone # E4.0 [1] (👨🏿‍🎨) +1F468 1F3FF 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; man teacher: dark skin tone # E4.0 [1] (👨🏿‍🏫) +1F468 1F3FF 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; man factory worker: dark skin tone # E4.0 [1] (👨🏿‍🏭) +1F468 1F3FF 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; man technologist: dark skin tone # E4.0 [1] (👨🏿‍💻) +1F468 1F3FF 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; man office worker: dark skin tone # E4.0 [1] (👨🏿‍💼) +1F468 1F3FF 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; man mechanic: dark skin tone # E4.0 [1] (👨🏿‍🔧) +1F468 1F3FF 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; man scientist: dark skin tone # E4.0 [1] (👨🏿‍🔬) +1F468 1F3FF 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; man astronaut: dark skin tone # E4.0 [1] (👨🏿‍🚀) +1F468 1F3FF 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; man firefighter: dark skin tone # E4.0 [1] (👨🏿‍🚒) +1F468 1F3FF 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; man with white cane: dark skin tone # E12.0 [1] (👨🏿‍🦯) +1F468 1F3FF 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; man in motorized wheelchair: dark skin tone # E12.0 [1] (👨🏿‍🦼) +1F468 1F3FF 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; man in manual wheelchair: dark skin tone # E12.0 [1] (👨🏿‍🦽) +1F469 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman health worker # E4.0 [1] (👩‍⚕️) +1F469 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman judge # E4.0 [1] (👩‍⚖️) +1F469 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pilot # E4.0 [1] (👩‍✈️) +1F469 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; woman farmer # E4.0 [1] (👩‍🌾) +1F469 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; woman cook # E4.0 [1] (👩‍🍳) +1F469 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; woman feeding baby # E13.0 [1] (👩‍🍼) +1F469 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; woman student # E4.0 [1] (👩‍🎓) +1F469 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; woman singer # E4.0 [1] (👩‍🎤) +1F469 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; woman artist # E4.0 [1] (👩‍🎨) +1F469 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; woman teacher # E4.0 [1] (👩‍🏫) +1F469 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; woman factory worker # E4.0 [1] (👩‍🏭) +1F469 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; woman technologist # E4.0 [1] (👩‍💻) +1F469 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; woman office worker # E4.0 [1] (👩‍💼) +1F469 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; woman mechanic # E4.0 [1] (👩‍🔧) +1F469 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; woman scientist # E4.0 [1] (👩‍🔬) +1F469 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; woman astronaut # E4.0 [1] (👩‍🚀) +1F469 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; woman firefighter # E4.0 [1] (👩‍🚒) +1F469 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; woman with white cane # E12.0 [1] (👩‍🦯) +1F469 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; woman in motorized wheelchair # E12.0 [1] (👩‍🦼) +1F469 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; woman in manual wheelchair # E12.0 [1] (👩‍🦽) +1F469 1F3FB 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman health worker: light skin tone # E4.0 [1] (👩🏻‍⚕️) +1F469 1F3FB 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman judge: light skin tone # E4.0 [1] (👩🏻‍⚖️) +1F469 1F3FB 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pilot: light skin tone # E4.0 [1] (👩🏻‍✈️) +1F469 1F3FB 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; woman farmer: light skin tone # E4.0 [1] (👩🏻‍🌾) +1F469 1F3FB 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; woman cook: light skin tone # E4.0 [1] (👩🏻‍🍳) +1F469 1F3FB 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; woman feeding baby: light skin tone # E13.0 [1] (👩🏻‍🍼) +1F469 1F3FB 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; woman student: light skin tone # E4.0 [1] (👩🏻‍🎓) +1F469 1F3FB 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; woman singer: light skin tone # E4.0 [1] (👩🏻‍🎤) +1F469 1F3FB 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; woman artist: light skin tone # E4.0 [1] (👩🏻‍🎨) +1F469 1F3FB 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; woman teacher: light skin tone # E4.0 [1] (👩🏻‍🏫) +1F469 1F3FB 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; woman factory worker: light skin tone # E4.0 [1] (👩🏻‍🏭) +1F469 1F3FB 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; woman technologist: light skin tone # E4.0 [1] (👩🏻‍💻) +1F469 1F3FB 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; woman office worker: light skin tone # E4.0 [1] (👩🏻‍💼) +1F469 1F3FB 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; woman mechanic: light skin tone # E4.0 [1] (👩🏻‍🔧) +1F469 1F3FB 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; woman scientist: light skin tone # E4.0 [1] (👩🏻‍🔬) +1F469 1F3FB 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; woman astronaut: light skin tone # E4.0 [1] (👩🏻‍🚀) +1F469 1F3FB 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; woman firefighter: light skin tone # E4.0 [1] (👩🏻‍🚒) +1F469 1F3FB 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; woman with white cane: light skin tone # E12.0 [1] (👩🏻‍🦯) +1F469 1F3FB 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; woman in motorized wheelchair: light skin tone # E12.0 [1] (👩🏻‍🦼) +1F469 1F3FB 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; woman in manual wheelchair: light skin tone # E12.0 [1] (👩🏻‍🦽) +1F469 1F3FC 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman health worker: medium-light skin tone # E4.0 [1] (👩🏼‍⚕️) +1F469 1F3FC 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman judge: medium-light skin tone # E4.0 [1] (👩🏼‍⚖️) +1F469 1F3FC 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pilot: medium-light skin tone # E4.0 [1] (👩🏼‍✈️) +1F469 1F3FC 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; woman farmer: medium-light skin tone # E4.0 [1] (👩🏼‍🌾) +1F469 1F3FC 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; woman cook: medium-light skin tone # E4.0 [1] (👩🏼‍🍳) +1F469 1F3FC 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; woman feeding baby: medium-light skin tone # E13.0 [1] (👩🏼‍🍼) +1F469 1F3FC 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; woman student: medium-light skin tone # E4.0 [1] (👩🏼‍🎓) +1F469 1F3FC 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; woman singer: medium-light skin tone # E4.0 [1] (👩🏼‍🎤) +1F469 1F3FC 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; woman artist: medium-light skin tone # E4.0 [1] (👩🏼‍🎨) +1F469 1F3FC 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; woman teacher: medium-light skin tone # E4.0 [1] (👩🏼‍🏫) +1F469 1F3FC 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; woman factory worker: medium-light skin tone # E4.0 [1] (👩🏼‍🏭) +1F469 1F3FC 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; woman technologist: medium-light skin tone # E4.0 [1] (👩🏼‍💻) +1F469 1F3FC 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; woman office worker: medium-light skin tone # E4.0 [1] (👩🏼‍💼) +1F469 1F3FC 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; woman mechanic: medium-light skin tone # E4.0 [1] (👩🏼‍🔧) +1F469 1F3FC 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; woman scientist: medium-light skin tone # E4.0 [1] (👩🏼‍🔬) +1F469 1F3FC 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; woman astronaut: medium-light skin tone # E4.0 [1] (👩🏼‍🚀) +1F469 1F3FC 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; woman firefighter: medium-light skin tone # E4.0 [1] (👩🏼‍🚒) +1F469 1F3FC 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; woman with white cane: medium-light skin tone # E12.0 [1] (👩🏼‍🦯) +1F469 1F3FC 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; woman in motorized wheelchair: medium-light skin tone # E12.0 [1] (👩🏼‍🦼) +1F469 1F3FC 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; woman in manual wheelchair: medium-light skin tone # E12.0 [1] (👩🏼‍🦽) +1F469 1F3FD 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman health worker: medium skin tone # E4.0 [1] (👩🏽‍⚕️) +1F469 1F3FD 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman judge: medium skin tone # E4.0 [1] (👩🏽‍⚖️) +1F469 1F3FD 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pilot: medium skin tone # E4.0 [1] (👩🏽‍✈️) +1F469 1F3FD 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; woman farmer: medium skin tone # E4.0 [1] (👩🏽‍🌾) +1F469 1F3FD 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; woman cook: medium skin tone # E4.0 [1] (👩🏽‍🍳) +1F469 1F3FD 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; woman feeding baby: medium skin tone # E13.0 [1] (👩🏽‍🍼) +1F469 1F3FD 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; woman student: medium skin tone # E4.0 [1] (👩🏽‍🎓) +1F469 1F3FD 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; woman singer: medium skin tone # E4.0 [1] (👩🏽‍🎤) +1F469 1F3FD 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; woman artist: medium skin tone # E4.0 [1] (👩🏽‍🎨) +1F469 1F3FD 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; woman teacher: medium skin tone # E4.0 [1] (👩🏽‍🏫) +1F469 1F3FD 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; woman factory worker: medium skin tone # E4.0 [1] (👩🏽‍🏭) +1F469 1F3FD 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; woman technologist: medium skin tone # E4.0 [1] (👩🏽‍💻) +1F469 1F3FD 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; woman office worker: medium skin tone # E4.0 [1] (👩🏽‍💼) +1F469 1F3FD 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; woman mechanic: medium skin tone # E4.0 [1] (👩🏽‍🔧) +1F469 1F3FD 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; woman scientist: medium skin tone # E4.0 [1] (👩🏽‍🔬) +1F469 1F3FD 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; woman astronaut: medium skin tone # E4.0 [1] (👩🏽‍🚀) +1F469 1F3FD 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; woman firefighter: medium skin tone # E4.0 [1] (👩🏽‍🚒) +1F469 1F3FD 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; woman with white cane: medium skin tone # E12.0 [1] (👩🏽‍🦯) +1F469 1F3FD 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; woman in motorized wheelchair: medium skin tone # E12.0 [1] (👩🏽‍🦼) +1F469 1F3FD 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; woman in manual wheelchair: medium skin tone # E12.0 [1] (👩🏽‍🦽) +1F469 1F3FE 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman health worker: medium-dark skin tone # E4.0 [1] (👩🏾‍⚕️) +1F469 1F3FE 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman judge: medium-dark skin tone # E4.0 [1] (👩🏾‍⚖️) +1F469 1F3FE 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pilot: medium-dark skin tone # E4.0 [1] (👩🏾‍✈️) +1F469 1F3FE 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; woman farmer: medium-dark skin tone # E4.0 [1] (👩🏾‍🌾) +1F469 1F3FE 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; woman cook: medium-dark skin tone # E4.0 [1] (👩🏾‍🍳) +1F469 1F3FE 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; woman feeding baby: medium-dark skin tone # E13.0 [1] (👩🏾‍🍼) +1F469 1F3FE 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; woman student: medium-dark skin tone # E4.0 [1] (👩🏾‍🎓) +1F469 1F3FE 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; woman singer: medium-dark skin tone # E4.0 [1] (👩🏾‍🎤) +1F469 1F3FE 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; woman artist: medium-dark skin tone # E4.0 [1] (👩🏾‍🎨) +1F469 1F3FE 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; woman teacher: medium-dark skin tone # E4.0 [1] (👩🏾‍🏫) +1F469 1F3FE 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; woman factory worker: medium-dark skin tone # E4.0 [1] (👩🏾‍🏭) +1F469 1F3FE 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; woman technologist: medium-dark skin tone # E4.0 [1] (👩🏾‍💻) +1F469 1F3FE 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; woman office worker: medium-dark skin tone # E4.0 [1] (👩🏾‍💼) +1F469 1F3FE 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; woman mechanic: medium-dark skin tone # E4.0 [1] (👩🏾‍🔧) +1F469 1F3FE 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; woman scientist: medium-dark skin tone # E4.0 [1] (👩🏾‍🔬) +1F469 1F3FE 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; woman astronaut: medium-dark skin tone # E4.0 [1] (👩🏾‍🚀) +1F469 1F3FE 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; woman firefighter: medium-dark skin tone # E4.0 [1] (👩🏾‍🚒) +1F469 1F3FE 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; woman with white cane: medium-dark skin tone # E12.0 [1] (👩🏾‍🦯) +1F469 1F3FE 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; woman in motorized wheelchair: medium-dark skin tone # E12.0 [1] (👩🏾‍🦼) +1F469 1F3FE 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; woman in manual wheelchair: medium-dark skin tone # E12.0 [1] (👩🏾‍🦽) +1F469 1F3FF 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman health worker: dark skin tone # E4.0 [1] (👩🏿‍⚕️) +1F469 1F3FF 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman judge: dark skin tone # E4.0 [1] (👩🏿‍⚖️) +1F469 1F3FF 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pilot: dark skin tone # E4.0 [1] (👩🏿‍✈️) +1F469 1F3FF 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; woman farmer: dark skin tone # E4.0 [1] (👩🏿‍🌾) +1F469 1F3FF 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; woman cook: dark skin tone # E4.0 [1] (👩🏿‍🍳) +1F469 1F3FF 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; woman feeding baby: dark skin tone # E13.0 [1] (👩🏿‍🍼) +1F469 1F3FF 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; woman student: dark skin tone # E4.0 [1] (👩🏿‍🎓) +1F469 1F3FF 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; woman singer: dark skin tone # E4.0 [1] (👩🏿‍🎤) +1F469 1F3FF 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; woman artist: dark skin tone # E4.0 [1] (👩🏿‍🎨) +1F469 1F3FF 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; woman teacher: dark skin tone # E4.0 [1] (👩🏿‍🏫) +1F469 1F3FF 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; woman factory worker: dark skin tone # E4.0 [1] (👩🏿‍🏭) +1F469 1F3FF 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; woman technologist: dark skin tone # E4.0 [1] (👩🏿‍💻) +1F469 1F3FF 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; woman office worker: dark skin tone # E4.0 [1] (👩🏿‍💼) +1F469 1F3FF 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; woman mechanic: dark skin tone # E4.0 [1] (👩🏿‍🔧) +1F469 1F3FF 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; woman scientist: dark skin tone # E4.0 [1] (👩🏿‍🔬) +1F469 1F3FF 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; woman astronaut: dark skin tone # E4.0 [1] (👩🏿‍🚀) +1F469 1F3FF 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; woman firefighter: dark skin tone # E4.0 [1] (👩🏿‍🚒) +1F469 1F3FF 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; woman with white cane: dark skin tone # E12.0 [1] (👩🏿‍🦯) +1F469 1F3FF 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; woman in motorized wheelchair: dark skin tone # E12.0 [1] (👩🏿‍🦼) +1F469 1F3FF 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; woman in manual wheelchair: dark skin tone # E12.0 [1] (👩🏿‍🦽) +1F9D1 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; health worker # E12.1 [1] (🧑‍⚕️) +1F9D1 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; judge # E12.1 [1] (🧑‍⚖️) +1F9D1 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; pilot # E12.1 [1] (🧑‍✈️) +1F9D1 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; farmer # E12.1 [1] (🧑‍🌾) +1F9D1 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; cook # E12.1 [1] (🧑‍🍳) +1F9D1 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; person feeding baby # E13.0 [1] (🧑‍🍼) +1F9D1 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; student # E12.1 [1] (🧑‍🎓) +1F9D1 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; singer # E12.1 [1] (🧑‍🎤) +1F9D1 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; artist # E12.1 [1] (🧑‍🎨) +1F9D1 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; teacher # E12.1 [1] (🧑‍🏫) +1F9D1 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; factory worker # E12.1 [1] (🧑‍🏭) +1F9D1 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; technologist # E12.1 [1] (🧑‍💻) +1F9D1 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; office worker # E12.1 [1] (🧑‍💼) +1F9D1 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; mechanic # E12.1 [1] (🧑‍🔧) +1F9D1 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; scientist # E12.1 [1] (🧑‍🔬) +1F9D1 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; astronaut # E12.1 [1] (🧑‍🚀) +1F9D1 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; firefighter # E12.1 [1] (🧑‍🚒) +1F9D1 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; person with white cane # E12.1 [1] (🧑‍🦯) +1F9D1 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; person in motorized wheelchair # E12.1 [1] (🧑‍🦼) +1F9D1 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; person in manual wheelchair # E12.1 [1] (🧑‍🦽) +1F9D1 1F3FB 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; health worker: light skin tone # E12.1 [1] (🧑🏻‍⚕️) +1F9D1 1F3FB 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; judge: light skin tone # E12.1 [1] (🧑🏻‍⚖️) +1F9D1 1F3FB 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; pilot: light skin tone # E12.1 [1] (🧑🏻‍✈️) +1F9D1 1F3FB 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; farmer: light skin tone # E12.1 [1] (🧑🏻‍🌾) +1F9D1 1F3FB 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; cook: light skin tone # E12.1 [1] (🧑🏻‍🍳) +1F9D1 1F3FB 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; person feeding baby: light skin tone # E13.0 [1] (🧑🏻‍🍼) +1F9D1 1F3FB 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; student: light skin tone # E12.1 [1] (🧑🏻‍🎓) +1F9D1 1F3FB 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; singer: light skin tone # E12.1 [1] (🧑🏻‍🎤) +1F9D1 1F3FB 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; artist: light skin tone # E12.1 [1] (🧑🏻‍🎨) +1F9D1 1F3FB 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; teacher: light skin tone # E12.1 [1] (🧑🏻‍🏫) +1F9D1 1F3FB 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; factory worker: light skin tone # E12.1 [1] (🧑🏻‍🏭) +1F9D1 1F3FB 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; technologist: light skin tone # E12.1 [1] (🧑🏻‍💻) +1F9D1 1F3FB 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; office worker: light skin tone # E12.1 [1] (🧑🏻‍💼) +1F9D1 1F3FB 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; mechanic: light skin tone # E12.1 [1] (🧑🏻‍🔧) +1F9D1 1F3FB 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; scientist: light skin tone # E12.1 [1] (🧑🏻‍🔬) +1F9D1 1F3FB 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; astronaut: light skin tone # E12.1 [1] (🧑🏻‍🚀) +1F9D1 1F3FB 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; firefighter: light skin tone # E12.1 [1] (🧑🏻‍🚒) +1F9D1 1F3FB 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; person with white cane: light skin tone # E12.1 [1] (🧑🏻‍🦯) +1F9D1 1F3FB 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; person in motorized wheelchair: light skin tone # E12.1 [1] (🧑🏻‍🦼) +1F9D1 1F3FB 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; person in manual wheelchair: light skin tone # E12.1 [1] (🧑🏻‍🦽) +1F9D1 1F3FC 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; health worker: medium-light skin tone # E12.1 [1] (🧑🏼‍⚕️) +1F9D1 1F3FC 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; judge: medium-light skin tone # E12.1 [1] (🧑🏼‍⚖️) +1F9D1 1F3FC 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; pilot: medium-light skin tone # E12.1 [1] (🧑🏼‍✈️) +1F9D1 1F3FC 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; farmer: medium-light skin tone # E12.1 [1] (🧑🏼‍🌾) +1F9D1 1F3FC 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; cook: medium-light skin tone # E12.1 [1] (🧑🏼‍🍳) +1F9D1 1F3FC 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; person feeding baby: medium-light skin tone # E13.0 [1] (🧑🏼‍🍼) +1F9D1 1F3FC 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; student: medium-light skin tone # E12.1 [1] (🧑🏼‍🎓) +1F9D1 1F3FC 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; singer: medium-light skin tone # E12.1 [1] (🧑🏼‍🎤) +1F9D1 1F3FC 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; artist: medium-light skin tone # E12.1 [1] (🧑🏼‍🎨) +1F9D1 1F3FC 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; teacher: medium-light skin tone # E12.1 [1] (🧑🏼‍🏫) +1F9D1 1F3FC 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; factory worker: medium-light skin tone # E12.1 [1] (🧑🏼‍🏭) +1F9D1 1F3FC 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; technologist: medium-light skin tone # E12.1 [1] (🧑🏼‍💻) +1F9D1 1F3FC 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; office worker: medium-light skin tone # E12.1 [1] (🧑🏼‍💼) +1F9D1 1F3FC 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; mechanic: medium-light skin tone # E12.1 [1] (🧑🏼‍🔧) +1F9D1 1F3FC 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; scientist: medium-light skin tone # E12.1 [1] (🧑🏼‍🔬) +1F9D1 1F3FC 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; astronaut: medium-light skin tone # E12.1 [1] (🧑🏼‍🚀) +1F9D1 1F3FC 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; firefighter: medium-light skin tone # E12.1 [1] (🧑🏼‍🚒) +1F9D1 1F3FC 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; person with white cane: medium-light skin tone # E12.1 [1] (🧑🏼‍🦯) +1F9D1 1F3FC 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; person in motorized wheelchair: medium-light skin tone # E12.1 [1] (🧑🏼‍🦼) +1F9D1 1F3FC 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; person in manual wheelchair: medium-light skin tone # E12.1 [1] (🧑🏼‍🦽) +1F9D1 1F3FD 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; health worker: medium skin tone # E12.1 [1] (🧑🏽‍⚕️) +1F9D1 1F3FD 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; judge: medium skin tone # E12.1 [1] (🧑🏽‍⚖️) +1F9D1 1F3FD 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; pilot: medium skin tone # E12.1 [1] (🧑🏽‍✈️) +1F9D1 1F3FD 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; farmer: medium skin tone # E12.1 [1] (🧑🏽‍🌾) +1F9D1 1F3FD 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; cook: medium skin tone # E12.1 [1] (🧑🏽‍🍳) +1F9D1 1F3FD 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; person feeding baby: medium skin tone # E13.0 [1] (🧑🏽‍🍼) +1F9D1 1F3FD 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; student: medium skin tone # E12.1 [1] (🧑🏽‍🎓) +1F9D1 1F3FD 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; singer: medium skin tone # E12.1 [1] (🧑🏽‍🎤) +1F9D1 1F3FD 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; artist: medium skin tone # E12.1 [1] (🧑🏽‍🎨) +1F9D1 1F3FD 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; teacher: medium skin tone # E12.1 [1] (🧑🏽‍🏫) +1F9D1 1F3FD 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; factory worker: medium skin tone # E12.1 [1] (🧑🏽‍🏭) +1F9D1 1F3FD 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; technologist: medium skin tone # E12.1 [1] (🧑🏽‍💻) +1F9D1 1F3FD 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; office worker: medium skin tone # E12.1 [1] (🧑🏽‍💼) +1F9D1 1F3FD 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; mechanic: medium skin tone # E12.1 [1] (🧑🏽‍🔧) +1F9D1 1F3FD 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; scientist: medium skin tone # E12.1 [1] (🧑🏽‍🔬) +1F9D1 1F3FD 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; astronaut: medium skin tone # E12.1 [1] (🧑🏽‍🚀) +1F9D1 1F3FD 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; firefighter: medium skin tone # E12.1 [1] (🧑🏽‍🚒) +1F9D1 1F3FD 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; person with white cane: medium skin tone # E12.1 [1] (🧑🏽‍🦯) +1F9D1 1F3FD 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; person in motorized wheelchair: medium skin tone # E12.1 [1] (🧑🏽‍🦼) +1F9D1 1F3FD 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; person in manual wheelchair: medium skin tone # E12.1 [1] (🧑🏽‍🦽) +1F9D1 1F3FE 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; health worker: medium-dark skin tone # E12.1 [1] (🧑🏾‍⚕️) +1F9D1 1F3FE 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; judge: medium-dark skin tone # E12.1 [1] (🧑🏾‍⚖️) +1F9D1 1F3FE 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; pilot: medium-dark skin tone # E12.1 [1] (🧑🏾‍✈️) +1F9D1 1F3FE 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; farmer: medium-dark skin tone # E12.1 [1] (🧑🏾‍🌾) +1F9D1 1F3FE 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; cook: medium-dark skin tone # E12.1 [1] (🧑🏾‍🍳) +1F9D1 1F3FE 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; person feeding baby: medium-dark skin tone # E13.0 [1] (🧑🏾‍🍼) +1F9D1 1F3FE 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; student: medium-dark skin tone # E12.1 [1] (🧑🏾‍🎓) +1F9D1 1F3FE 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; singer: medium-dark skin tone # E12.1 [1] (🧑🏾‍🎤) +1F9D1 1F3FE 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; artist: medium-dark skin tone # E12.1 [1] (🧑🏾‍🎨) +1F9D1 1F3FE 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; teacher: medium-dark skin tone # E12.1 [1] (🧑🏾‍🏫) +1F9D1 1F3FE 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; factory worker: medium-dark skin tone # E12.1 [1] (🧑🏾‍🏭) +1F9D1 1F3FE 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; technologist: medium-dark skin tone # E12.1 [1] (🧑🏾‍💻) +1F9D1 1F3FE 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; office worker: medium-dark skin tone # E12.1 [1] (🧑🏾‍💼) +1F9D1 1F3FE 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; mechanic: medium-dark skin tone # E12.1 [1] (🧑🏾‍🔧) +1F9D1 1F3FE 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; scientist: medium-dark skin tone # E12.1 [1] (🧑🏾‍🔬) +1F9D1 1F3FE 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; astronaut: medium-dark skin tone # E12.1 [1] (🧑🏾‍🚀) +1F9D1 1F3FE 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; firefighter: medium-dark skin tone # E12.1 [1] (🧑🏾‍🚒) +1F9D1 1F3FE 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; person with white cane: medium-dark skin tone # E12.1 [1] (🧑🏾‍🦯) +1F9D1 1F3FE 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; person in motorized wheelchair: medium-dark skin tone # E12.1 [1] (🧑🏾‍🦼) +1F9D1 1F3FE 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; person in manual wheelchair: medium-dark skin tone # E12.1 [1] (🧑🏾‍🦽) +1F9D1 1F3FF 200D 2695 FE0F ; RGI_Emoji_ZWJ_Sequence ; health worker: dark skin tone # E12.1 [1] (🧑🏿‍⚕️) +1F9D1 1F3FF 200D 2696 FE0F ; RGI_Emoji_ZWJ_Sequence ; judge: dark skin tone # E12.1 [1] (🧑🏿‍⚖️) +1F9D1 1F3FF 200D 2708 FE0F ; RGI_Emoji_ZWJ_Sequence ; pilot: dark skin tone # E12.1 [1] (🧑🏿‍✈️) +1F9D1 1F3FF 200D 1F33E ; RGI_Emoji_ZWJ_Sequence ; farmer: dark skin tone # E12.1 [1] (🧑🏿‍🌾) +1F9D1 1F3FF 200D 1F373 ; RGI_Emoji_ZWJ_Sequence ; cook: dark skin tone # E12.1 [1] (🧑🏿‍🍳) +1F9D1 1F3FF 200D 1F37C ; RGI_Emoji_ZWJ_Sequence ; person feeding baby: dark skin tone # E13.0 [1] (🧑🏿‍🍼) +1F9D1 1F3FF 200D 1F393 ; RGI_Emoji_ZWJ_Sequence ; student: dark skin tone # E12.1 [1] (🧑🏿‍🎓) +1F9D1 1F3FF 200D 1F3A4 ; RGI_Emoji_ZWJ_Sequence ; singer: dark skin tone # E12.1 [1] (🧑🏿‍🎤) +1F9D1 1F3FF 200D 1F3A8 ; RGI_Emoji_ZWJ_Sequence ; artist: dark skin tone # E12.1 [1] (🧑🏿‍🎨) +1F9D1 1F3FF 200D 1F3EB ; RGI_Emoji_ZWJ_Sequence ; teacher: dark skin tone # E12.1 [1] (🧑🏿‍🏫) +1F9D1 1F3FF 200D 1F3ED ; RGI_Emoji_ZWJ_Sequence ; factory worker: dark skin tone # E12.1 [1] (🧑🏿‍🏭) +1F9D1 1F3FF 200D 1F4BB ; RGI_Emoji_ZWJ_Sequence ; technologist: dark skin tone # E12.1 [1] (🧑🏿‍💻) +1F9D1 1F3FF 200D 1F4BC ; RGI_Emoji_ZWJ_Sequence ; office worker: dark skin tone # E12.1 [1] (🧑🏿‍💼) +1F9D1 1F3FF 200D 1F527 ; RGI_Emoji_ZWJ_Sequence ; mechanic: dark skin tone # E12.1 [1] (🧑🏿‍🔧) +1F9D1 1F3FF 200D 1F52C ; RGI_Emoji_ZWJ_Sequence ; scientist: dark skin tone # E12.1 [1] (🧑🏿‍🔬) +1F9D1 1F3FF 200D 1F680 ; RGI_Emoji_ZWJ_Sequence ; astronaut: dark skin tone # E12.1 [1] (🧑🏿‍🚀) +1F9D1 1F3FF 200D 1F692 ; RGI_Emoji_ZWJ_Sequence ; firefighter: dark skin tone # E12.1 [1] (🧑🏿‍🚒) +1F9D1 1F3FF 200D 1F9AF ; RGI_Emoji_ZWJ_Sequence ; person with white cane: dark skin tone # E12.1 [1] (🧑🏿‍🦯) +1F9D1 1F3FF 200D 1F9BC ; RGI_Emoji_ZWJ_Sequence ; person in motorized wheelchair: dark skin tone # E12.1 [1] (🧑🏿‍🦼) +1F9D1 1F3FF 200D 1F9BD ; RGI_Emoji_ZWJ_Sequence ; person in manual wheelchair: dark skin tone # E12.1 [1] (🧑🏿‍🦽) + +# Total elements: 360 + +# ================================================ + +# RGI_Emoji_ZWJ_Sequence: Gendered + +26F9 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bouncing ball: light skin tone # E4.0 [1] (⛹🏻‍♀️) +26F9 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bouncing ball: light skin tone # E4.0 [1] (⛹🏻‍♂️) +26F9 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bouncing ball: medium-light skin tone # E4.0 [1] (⛹🏼‍♀️) +26F9 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bouncing ball: medium-light skin tone # E4.0 [1] (⛹🏼‍♂️) +26F9 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bouncing ball: medium skin tone # E4.0 [1] (⛹🏽‍♀️) +26F9 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bouncing ball: medium skin tone # E4.0 [1] (⛹🏽‍♂️) +26F9 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bouncing ball: medium-dark skin tone # E4.0 [1] (⛹🏾‍♀️) +26F9 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bouncing ball: medium-dark skin tone # E4.0 [1] (⛹🏾‍♂️) +26F9 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bouncing ball: dark skin tone # E4.0 [1] (⛹🏿‍♀️) +26F9 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bouncing ball: dark skin tone # E4.0 [1] (⛹🏿‍♂️) +26F9 FE0F 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bouncing ball # E4.0 [1] (⛹️‍♀️) +26F9 FE0F 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bouncing ball # E4.0 [1] (⛹️‍♂️) +1F3C3 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman running # E4.0 [1] (🏃‍♀️) +1F3C3 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man running # E4.0 [1] (🏃‍♂️) +1F3C3 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman running: light skin tone # E4.0 [1] (🏃🏻‍♀️) +1F3C3 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man running: light skin tone # E4.0 [1] (🏃🏻‍♂️) +1F3C3 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman running: medium-light skin tone # E4.0 [1] (🏃🏼‍♀️) +1F3C3 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man running: medium-light skin tone # E4.0 [1] (🏃🏼‍♂️) +1F3C3 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman running: medium skin tone # E4.0 [1] (🏃🏽‍♀️) +1F3C3 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man running: medium skin tone # E4.0 [1] (🏃🏽‍♂️) +1F3C3 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman running: medium-dark skin tone # E4.0 [1] (🏃🏾‍♀️) +1F3C3 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man running: medium-dark skin tone # E4.0 [1] (🏃🏾‍♂️) +1F3C3 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman running: dark skin tone # E4.0 [1] (🏃🏿‍♀️) +1F3C3 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man running: dark skin tone # E4.0 [1] (🏃🏿‍♂️) +1F3C4 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman surfing # E4.0 [1] (🏄‍♀️) +1F3C4 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man surfing # E4.0 [1] (🏄‍♂️) +1F3C4 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman surfing: light skin tone # E4.0 [1] (🏄🏻‍♀️) +1F3C4 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man surfing: light skin tone # E4.0 [1] (🏄🏻‍♂️) +1F3C4 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman surfing: medium-light skin tone # E4.0 [1] (🏄🏼‍♀️) +1F3C4 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man surfing: medium-light skin tone # E4.0 [1] (🏄🏼‍♂️) +1F3C4 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman surfing: medium skin tone # E4.0 [1] (🏄🏽‍♀️) +1F3C4 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man surfing: medium skin tone # E4.0 [1] (🏄🏽‍♂️) +1F3C4 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman surfing: medium-dark skin tone # E4.0 [1] (🏄🏾‍♀️) +1F3C4 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man surfing: medium-dark skin tone # E4.0 [1] (🏄🏾‍♂️) +1F3C4 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman surfing: dark skin tone # E4.0 [1] (🏄🏿‍♀️) +1F3C4 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man surfing: dark skin tone # E4.0 [1] (🏄🏿‍♂️) +1F3CA 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman swimming # E4.0 [1] (🏊‍♀️) +1F3CA 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man swimming # E4.0 [1] (🏊‍♂️) +1F3CA 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman swimming: light skin tone # E4.0 [1] (🏊🏻‍♀️) +1F3CA 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man swimming: light skin tone # E4.0 [1] (🏊🏻‍♂️) +1F3CA 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman swimming: medium-light skin tone # E4.0 [1] (🏊🏼‍♀️) +1F3CA 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man swimming: medium-light skin tone # E4.0 [1] (🏊🏼‍♂️) +1F3CA 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman swimming: medium skin tone # E4.0 [1] (🏊🏽‍♀️) +1F3CA 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man swimming: medium skin tone # E4.0 [1] (🏊🏽‍♂️) +1F3CA 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman swimming: medium-dark skin tone # E4.0 [1] (🏊🏾‍♀️) +1F3CA 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man swimming: medium-dark skin tone # E4.0 [1] (🏊🏾‍♂️) +1F3CA 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman swimming: dark skin tone # E4.0 [1] (🏊🏿‍♀️) +1F3CA 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man swimming: dark skin tone # E4.0 [1] (🏊🏿‍♂️) +1F3CB 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman lifting weights: light skin tone # E4.0 [1] (🏋🏻‍♀️) +1F3CB 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man lifting weights: light skin tone # E4.0 [1] (🏋🏻‍♂️) +1F3CB 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman lifting weights: medium-light skin tone # E4.0 [1] (🏋🏼‍♀️) +1F3CB 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man lifting weights: medium-light skin tone # E4.0 [1] (🏋🏼‍♂️) +1F3CB 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman lifting weights: medium skin tone # E4.0 [1] (🏋🏽‍♀️) +1F3CB 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man lifting weights: medium skin tone # E4.0 [1] (🏋🏽‍♂️) +1F3CB 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman lifting weights: medium-dark skin tone # E4.0 [1] (🏋🏾‍♀️) +1F3CB 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man lifting weights: medium-dark skin tone # E4.0 [1] (🏋🏾‍♂️) +1F3CB 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman lifting weights: dark skin tone # E4.0 [1] (🏋🏿‍♀️) +1F3CB 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man lifting weights: dark skin tone # E4.0 [1] (🏋🏿‍♂️) +1F3CB FE0F 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman lifting weights # E4.0 [1] (🏋️‍♀️) +1F3CB FE0F 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man lifting weights # E4.0 [1] (🏋️‍♂️) +1F3CC 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman golfing: light skin tone # E4.0 [1] (🏌🏻‍♀️) +1F3CC 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man golfing: light skin tone # E4.0 [1] (🏌🏻‍♂️) +1F3CC 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman golfing: medium-light skin tone # E4.0 [1] (🏌🏼‍♀️) +1F3CC 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man golfing: medium-light skin tone # E4.0 [1] (🏌🏼‍♂️) +1F3CC 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman golfing: medium skin tone # E4.0 [1] (🏌🏽‍♀️) +1F3CC 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man golfing: medium skin tone # E4.0 [1] (🏌🏽‍♂️) +1F3CC 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman golfing: medium-dark skin tone # E4.0 [1] (🏌🏾‍♀️) +1F3CC 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man golfing: medium-dark skin tone # E4.0 [1] (🏌🏾‍♂️) +1F3CC 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman golfing: dark skin tone # E4.0 [1] (🏌🏿‍♀️) +1F3CC 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man golfing: dark skin tone # E4.0 [1] (🏌🏿‍♂️) +1F3CC FE0F 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman golfing # E4.0 [1] (🏌️‍♀️) +1F3CC FE0F 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man golfing # E4.0 [1] (🏌️‍♂️) +1F46E 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman police officer # E4.0 [1] (👮‍♀️) +1F46E 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man police officer # E4.0 [1] (👮‍♂️) +1F46E 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman police officer: light skin tone # E4.0 [1] (👮🏻‍♀️) +1F46E 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man police officer: light skin tone # E4.0 [1] (👮🏻‍♂️) +1F46E 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman police officer: medium-light skin tone # E4.0 [1] (👮🏼‍♀️) +1F46E 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man police officer: medium-light skin tone # E4.0 [1] (👮🏼‍♂️) +1F46E 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman police officer: medium skin tone # E4.0 [1] (👮🏽‍♀️) +1F46E 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man police officer: medium skin tone # E4.0 [1] (👮🏽‍♂️) +1F46E 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman police officer: medium-dark skin tone # E4.0 [1] (👮🏾‍♀️) +1F46E 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man police officer: medium-dark skin tone # E4.0 [1] (👮🏾‍♂️) +1F46E 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman police officer: dark skin tone # E4.0 [1] (👮🏿‍♀️) +1F46E 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man police officer: dark skin tone # E4.0 [1] (👮🏿‍♂️) +1F46F 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; women with bunny ears # E4.0 [1] (👯‍♀️) +1F46F 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; men with bunny ears # E4.0 [1] (👯‍♂️) +1F470 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman with veil # E13.0 [1] (👰‍♀️) +1F470 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man with veil # E13.0 [1] (👰‍♂️) +1F470 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman with veil: light skin tone # E13.0 [1] (👰🏻‍♀️) +1F470 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man with veil: light skin tone # E13.0 [1] (👰🏻‍♂️) +1F470 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman with veil: medium-light skin tone # E13.0 [1] (👰🏼‍♀️) +1F470 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man with veil: medium-light skin tone # E13.0 [1] (👰🏼‍♂️) +1F470 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman with veil: medium skin tone # E13.0 [1] (👰🏽‍♀️) +1F470 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man with veil: medium skin tone # E13.0 [1] (👰🏽‍♂️) +1F470 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman with veil: medium-dark skin tone # E13.0 [1] (👰🏾‍♀️) +1F470 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man with veil: medium-dark skin tone # E13.0 [1] (👰🏾‍♂️) +1F470 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman with veil: dark skin tone # E13.0 [1] (👰🏿‍♀️) +1F470 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man with veil: dark skin tone # E13.0 [1] (👰🏿‍♂️) +1F471 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: blond hair # E4.0 [1] (👱‍♀️) +1F471 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: blond hair # E4.0 [1] (👱‍♂️) +1F471 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: light skin tone, blond hair # E4.0 [1] (👱🏻‍♀️) +1F471 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: light skin tone, blond hair # E4.0 [1] (👱🏻‍♂️) +1F471 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: medium-light skin tone, blond hair # E4.0 [1] (👱🏼‍♀️) +1F471 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: medium-light skin tone, blond hair # E4.0 [1] (👱🏼‍♂️) +1F471 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: medium skin tone, blond hair # E4.0 [1] (👱🏽‍♀️) +1F471 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: medium skin tone, blond hair # E4.0 [1] (👱🏽‍♂️) +1F471 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: medium-dark skin tone, blond hair # E4.0 [1] (👱🏾‍♀️) +1F471 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: medium-dark skin tone, blond hair # E4.0 [1] (👱🏾‍♂️) +1F471 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: dark skin tone, blond hair # E4.0 [1] (👱🏿‍♀️) +1F471 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: dark skin tone, blond hair # E4.0 [1] (👱🏿‍♂️) +1F473 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman wearing turban # E4.0 [1] (👳‍♀️) +1F473 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man wearing turban # E4.0 [1] (👳‍♂️) +1F473 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman wearing turban: light skin tone # E4.0 [1] (👳🏻‍♀️) +1F473 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man wearing turban: light skin tone # E4.0 [1] (👳🏻‍♂️) +1F473 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman wearing turban: medium-light skin tone # E4.0 [1] (👳🏼‍♀️) +1F473 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man wearing turban: medium-light skin tone # E4.0 [1] (👳🏼‍♂️) +1F473 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman wearing turban: medium skin tone # E4.0 [1] (👳🏽‍♀️) +1F473 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man wearing turban: medium skin tone # E4.0 [1] (👳🏽‍♂️) +1F473 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman wearing turban: medium-dark skin tone # E4.0 [1] (👳🏾‍♀️) +1F473 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man wearing turban: medium-dark skin tone # E4.0 [1] (👳🏾‍♂️) +1F473 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman wearing turban: dark skin tone # E4.0 [1] (👳🏿‍♀️) +1F473 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man wearing turban: dark skin tone # E4.0 [1] (👳🏿‍♂️) +1F477 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman construction worker # E4.0 [1] (👷‍♀️) +1F477 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man construction worker # E4.0 [1] (👷‍♂️) +1F477 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman construction worker: light skin tone # E4.0 [1] (👷🏻‍♀️) +1F477 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man construction worker: light skin tone # E4.0 [1] (👷🏻‍♂️) +1F477 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman construction worker: medium-light skin tone # E4.0 [1] (👷🏼‍♀️) +1F477 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man construction worker: medium-light skin tone # E4.0 [1] (👷🏼‍♂️) +1F477 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman construction worker: medium skin tone # E4.0 [1] (👷🏽‍♀️) +1F477 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man construction worker: medium skin tone # E4.0 [1] (👷🏽‍♂️) +1F477 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman construction worker: medium-dark skin tone # E4.0 [1] (👷🏾‍♀️) +1F477 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man construction worker: medium-dark skin tone # E4.0 [1] (👷🏾‍♂️) +1F477 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman construction worker: dark skin tone # E4.0 [1] (👷🏿‍♀️) +1F477 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man construction worker: dark skin tone # E4.0 [1] (👷🏿‍♂️) +1F481 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman tipping hand # E4.0 [1] (💁‍♀️) +1F481 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man tipping hand # E4.0 [1] (💁‍♂️) +1F481 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman tipping hand: light skin tone # E4.0 [1] (💁🏻‍♀️) +1F481 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man tipping hand: light skin tone # E4.0 [1] (💁🏻‍♂️) +1F481 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman tipping hand: medium-light skin tone # E4.0 [1] (💁🏼‍♀️) +1F481 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man tipping hand: medium-light skin tone # E4.0 [1] (💁🏼‍♂️) +1F481 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman tipping hand: medium skin tone # E4.0 [1] (💁🏽‍♀️) +1F481 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man tipping hand: medium skin tone # E4.0 [1] (💁🏽‍♂️) +1F481 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman tipping hand: medium-dark skin tone # E4.0 [1] (💁🏾‍♀️) +1F481 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man tipping hand: medium-dark skin tone # E4.0 [1] (💁🏾‍♂️) +1F481 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman tipping hand: dark skin tone # E4.0 [1] (💁🏿‍♀️) +1F481 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man tipping hand: dark skin tone # E4.0 [1] (💁🏿‍♂️) +1F482 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman guard # E4.0 [1] (💂‍♀️) +1F482 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man guard # E4.0 [1] (💂‍♂️) +1F482 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman guard: light skin tone # E4.0 [1] (💂🏻‍♀️) +1F482 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man guard: light skin tone # E4.0 [1] (💂🏻‍♂️) +1F482 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman guard: medium-light skin tone # E4.0 [1] (💂🏼‍♀️) +1F482 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man guard: medium-light skin tone # E4.0 [1] (💂🏼‍♂️) +1F482 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman guard: medium skin tone # E4.0 [1] (💂🏽‍♀️) +1F482 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man guard: medium skin tone # E4.0 [1] (💂🏽‍♂️) +1F482 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman guard: medium-dark skin tone # E4.0 [1] (💂🏾‍♀️) +1F482 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man guard: medium-dark skin tone # E4.0 [1] (💂🏾‍♂️) +1F482 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman guard: dark skin tone # E4.0 [1] (💂🏿‍♀️) +1F482 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man guard: dark skin tone # E4.0 [1] (💂🏿‍♂️) +1F486 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting massage # E4.0 [1] (💆‍♀️) +1F486 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting massage # E4.0 [1] (💆‍♂️) +1F486 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting massage: light skin tone # E4.0 [1] (💆🏻‍♀️) +1F486 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting massage: light skin tone # E4.0 [1] (💆🏻‍♂️) +1F486 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting massage: medium-light skin tone # E4.0 [1] (💆🏼‍♀️) +1F486 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting massage: medium-light skin tone # E4.0 [1] (💆🏼‍♂️) +1F486 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting massage: medium skin tone # E4.0 [1] (💆🏽‍♀️) +1F486 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting massage: medium skin tone # E4.0 [1] (💆🏽‍♂️) +1F486 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting massage: medium-dark skin tone # E4.0 [1] (💆🏾‍♀️) +1F486 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting massage: medium-dark skin tone # E4.0 [1] (💆🏾‍♂️) +1F486 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting massage: dark skin tone # E4.0 [1] (💆🏿‍♀️) +1F486 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting massage: dark skin tone # E4.0 [1] (💆🏿‍♂️) +1F487 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting haircut # E4.0 [1] (💇‍♀️) +1F487 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting haircut # E4.0 [1] (💇‍♂️) +1F487 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting haircut: light skin tone # E4.0 [1] (💇🏻‍♀️) +1F487 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting haircut: light skin tone # E4.0 [1] (💇🏻‍♂️) +1F487 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting haircut: medium-light skin tone # E4.0 [1] (💇🏼‍♀️) +1F487 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting haircut: medium-light skin tone # E4.0 [1] (💇🏼‍♂️) +1F487 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting haircut: medium skin tone # E4.0 [1] (💇🏽‍♀️) +1F487 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting haircut: medium skin tone # E4.0 [1] (💇🏽‍♂️) +1F487 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting haircut: medium-dark skin tone # E4.0 [1] (💇🏾‍♀️) +1F487 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting haircut: medium-dark skin tone # E4.0 [1] (💇🏾‍♂️) +1F487 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman getting haircut: dark skin tone # E4.0 [1] (💇🏿‍♀️) +1F487 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man getting haircut: dark skin tone # E4.0 [1] (💇🏿‍♂️) +1F575 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman detective: light skin tone # E4.0 [1] (🕵🏻‍♀️) +1F575 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man detective: light skin tone # E4.0 [1] (🕵🏻‍♂️) +1F575 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman detective: medium-light skin tone # E4.0 [1] (🕵🏼‍♀️) +1F575 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man detective: medium-light skin tone # E4.0 [1] (🕵🏼‍♂️) +1F575 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman detective: medium skin tone # E4.0 [1] (🕵🏽‍♀️) +1F575 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man detective: medium skin tone # E4.0 [1] (🕵🏽‍♂️) +1F575 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman detective: medium-dark skin tone # E4.0 [1] (🕵🏾‍♀️) +1F575 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man detective: medium-dark skin tone # E4.0 [1] (🕵🏾‍♂️) +1F575 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman detective: dark skin tone # E4.0 [1] (🕵🏿‍♀️) +1F575 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man detective: dark skin tone # E4.0 [1] (🕵🏿‍♂️) +1F575 FE0F 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman detective # E4.0 [1] (🕵️‍♀️) +1F575 FE0F 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man detective # E4.0 [1] (🕵️‍♂️) +1F645 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing NO # E4.0 [1] (🙅‍♀️) +1F645 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing NO # E4.0 [1] (🙅‍♂️) +1F645 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing NO: light skin tone # E4.0 [1] (🙅🏻‍♀️) +1F645 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing NO: light skin tone # E4.0 [1] (🙅🏻‍♂️) +1F645 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing NO: medium-light skin tone # E4.0 [1] (🙅🏼‍♀️) +1F645 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing NO: medium-light skin tone # E4.0 [1] (🙅🏼‍♂️) +1F645 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing NO: medium skin tone # E4.0 [1] (🙅🏽‍♀️) +1F645 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing NO: medium skin tone # E4.0 [1] (🙅🏽‍♂️) +1F645 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing NO: medium-dark skin tone # E4.0 [1] (🙅🏾‍♀️) +1F645 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing NO: medium-dark skin tone # E4.0 [1] (🙅🏾‍♂️) +1F645 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing NO: dark skin tone # E4.0 [1] (🙅🏿‍♀️) +1F645 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing NO: dark skin tone # E4.0 [1] (🙅🏿‍♂️) +1F646 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing OK # E4.0 [1] (🙆‍♀️) +1F646 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing OK # E4.0 [1] (🙆‍♂️) +1F646 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing OK: light skin tone # E4.0 [1] (🙆🏻‍♀️) +1F646 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing OK: light skin tone # E4.0 [1] (🙆🏻‍♂️) +1F646 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing OK: medium-light skin tone # E4.0 [1] (🙆🏼‍♀️) +1F646 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing OK: medium-light skin tone # E4.0 [1] (🙆🏼‍♂️) +1F646 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing OK: medium skin tone # E4.0 [1] (🙆🏽‍♀️) +1F646 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing OK: medium skin tone # E4.0 [1] (🙆🏽‍♂️) +1F646 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing OK: medium-dark skin tone # E4.0 [1] (🙆🏾‍♀️) +1F646 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing OK: medium-dark skin tone # E4.0 [1] (🙆🏾‍♂️) +1F646 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman gesturing OK: dark skin tone # E4.0 [1] (🙆🏿‍♀️) +1F646 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man gesturing OK: dark skin tone # E4.0 [1] (🙆🏿‍♂️) +1F647 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bowing # E4.0 [1] (🙇‍♀️) +1F647 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bowing # E4.0 [1] (🙇‍♂️) +1F647 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bowing: light skin tone # E4.0 [1] (🙇🏻‍♀️) +1F647 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bowing: light skin tone # E4.0 [1] (🙇🏻‍♂️) +1F647 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bowing: medium-light skin tone # E4.0 [1] (🙇🏼‍♀️) +1F647 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bowing: medium-light skin tone # E4.0 [1] (🙇🏼‍♂️) +1F647 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bowing: medium skin tone # E4.0 [1] (🙇🏽‍♀️) +1F647 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bowing: medium skin tone # E4.0 [1] (🙇🏽‍♂️) +1F647 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bowing: medium-dark skin tone # E4.0 [1] (🙇🏾‍♀️) +1F647 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bowing: medium-dark skin tone # E4.0 [1] (🙇🏾‍♂️) +1F647 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman bowing: dark skin tone # E4.0 [1] (🙇🏿‍♀️) +1F647 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man bowing: dark skin tone # E4.0 [1] (🙇🏿‍♂️) +1F64B 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman raising hand # E4.0 [1] (🙋‍♀️) +1F64B 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man raising hand # E4.0 [1] (🙋‍♂️) +1F64B 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman raising hand: light skin tone # E4.0 [1] (🙋🏻‍♀️) +1F64B 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man raising hand: light skin tone # E4.0 [1] (🙋🏻‍♂️) +1F64B 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman raising hand: medium-light skin tone # E4.0 [1] (🙋🏼‍♀️) +1F64B 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man raising hand: medium-light skin tone # E4.0 [1] (🙋🏼‍♂️) +1F64B 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman raising hand: medium skin tone # E4.0 [1] (🙋🏽‍♀️) +1F64B 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man raising hand: medium skin tone # E4.0 [1] (🙋🏽‍♂️) +1F64B 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman raising hand: medium-dark skin tone # E4.0 [1] (🙋🏾‍♀️) +1F64B 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man raising hand: medium-dark skin tone # E4.0 [1] (🙋🏾‍♂️) +1F64B 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman raising hand: dark skin tone # E4.0 [1] (🙋🏿‍♀️) +1F64B 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man raising hand: dark skin tone # E4.0 [1] (🙋🏿‍♂️) +1F64D 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman frowning # E4.0 [1] (🙍‍♀️) +1F64D 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man frowning # E4.0 [1] (🙍‍♂️) +1F64D 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman frowning: light skin tone # E4.0 [1] (🙍🏻‍♀️) +1F64D 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man frowning: light skin tone # E4.0 [1] (🙍🏻‍♂️) +1F64D 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman frowning: medium-light skin tone # E4.0 [1] (🙍🏼‍♀️) +1F64D 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man frowning: medium-light skin tone # E4.0 [1] (🙍🏼‍♂️) +1F64D 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman frowning: medium skin tone # E4.0 [1] (🙍🏽‍♀️) +1F64D 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man frowning: medium skin tone # E4.0 [1] (🙍🏽‍♂️) +1F64D 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman frowning: medium-dark skin tone # E4.0 [1] (🙍🏾‍♀️) +1F64D 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man frowning: medium-dark skin tone # E4.0 [1] (🙍🏾‍♂️) +1F64D 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman frowning: dark skin tone # E4.0 [1] (🙍🏿‍♀️) +1F64D 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man frowning: dark skin tone # E4.0 [1] (🙍🏿‍♂️) +1F64E 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pouting # E4.0 [1] (🙎‍♀️) +1F64E 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pouting # E4.0 [1] (🙎‍♂️) +1F64E 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pouting: light skin tone # E4.0 [1] (🙎🏻‍♀️) +1F64E 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pouting: light skin tone # E4.0 [1] (🙎🏻‍♂️) +1F64E 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pouting: medium-light skin tone # E4.0 [1] (🙎🏼‍♀️) +1F64E 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pouting: medium-light skin tone # E4.0 [1] (🙎🏼‍♂️) +1F64E 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pouting: medium skin tone # E4.0 [1] (🙎🏽‍♀️) +1F64E 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pouting: medium skin tone # E4.0 [1] (🙎🏽‍♂️) +1F64E 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pouting: medium-dark skin tone # E4.0 [1] (🙎🏾‍♀️) +1F64E 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pouting: medium-dark skin tone # E4.0 [1] (🙎🏾‍♂️) +1F64E 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman pouting: dark skin tone # E4.0 [1] (🙎🏿‍♀️) +1F64E 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man pouting: dark skin tone # E4.0 [1] (🙎🏿‍♂️) +1F6A3 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman rowing boat # E4.0 [1] (🚣‍♀️) +1F6A3 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man rowing boat # E4.0 [1] (🚣‍♂️) +1F6A3 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman rowing boat: light skin tone # E4.0 [1] (🚣🏻‍♀️) +1F6A3 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man rowing boat: light skin tone # E4.0 [1] (🚣🏻‍♂️) +1F6A3 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman rowing boat: medium-light skin tone # E4.0 [1] (🚣🏼‍♀️) +1F6A3 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man rowing boat: medium-light skin tone # E4.0 [1] (🚣🏼‍♂️) +1F6A3 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman rowing boat: medium skin tone # E4.0 [1] (🚣🏽‍♀️) +1F6A3 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man rowing boat: medium skin tone # E4.0 [1] (🚣🏽‍♂️) +1F6A3 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman rowing boat: medium-dark skin tone # E4.0 [1] (🚣🏾‍♀️) +1F6A3 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man rowing boat: medium-dark skin tone # E4.0 [1] (🚣🏾‍♂️) +1F6A3 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman rowing boat: dark skin tone # E4.0 [1] (🚣🏿‍♀️) +1F6A3 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man rowing boat: dark skin tone # E4.0 [1] (🚣🏿‍♂️) +1F6B4 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman biking # E4.0 [1] (🚴‍♀️) +1F6B4 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man biking # E4.0 [1] (🚴‍♂️) +1F6B4 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman biking: light skin tone # E4.0 [1] (🚴🏻‍♀️) +1F6B4 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man biking: light skin tone # E4.0 [1] (🚴🏻‍♂️) +1F6B4 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman biking: medium-light skin tone # E4.0 [1] (🚴🏼‍♀️) +1F6B4 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man biking: medium-light skin tone # E4.0 [1] (🚴🏼‍♂️) +1F6B4 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman biking: medium skin tone # E4.0 [1] (🚴🏽‍♀️) +1F6B4 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man biking: medium skin tone # E4.0 [1] (🚴🏽‍♂️) +1F6B4 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman biking: medium-dark skin tone # E4.0 [1] (🚴🏾‍♀️) +1F6B4 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man biking: medium-dark skin tone # E4.0 [1] (🚴🏾‍♂️) +1F6B4 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman biking: dark skin tone # E4.0 [1] (🚴🏿‍♀️) +1F6B4 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man biking: dark skin tone # E4.0 [1] (🚴🏿‍♂️) +1F6B5 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mountain biking # E4.0 [1] (🚵‍♀️) +1F6B5 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mountain biking # E4.0 [1] (🚵‍♂️) +1F6B5 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mountain biking: light skin tone # E4.0 [1] (🚵🏻‍♀️) +1F6B5 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mountain biking: light skin tone # E4.0 [1] (🚵🏻‍♂️) +1F6B5 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mountain biking: medium-light skin tone # E4.0 [1] (🚵🏼‍♀️) +1F6B5 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mountain biking: medium-light skin tone # E4.0 [1] (🚵🏼‍♂️) +1F6B5 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mountain biking: medium skin tone # E4.0 [1] (🚵🏽‍♀️) +1F6B5 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mountain biking: medium skin tone # E4.0 [1] (🚵🏽‍♂️) +1F6B5 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mountain biking: medium-dark skin tone # E4.0 [1] (🚵🏾‍♀️) +1F6B5 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mountain biking: medium-dark skin tone # E4.0 [1] (🚵🏾‍♂️) +1F6B5 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mountain biking: dark skin tone # E4.0 [1] (🚵🏿‍♀️) +1F6B5 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mountain biking: dark skin tone # E4.0 [1] (🚵🏿‍♂️) +1F6B6 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman walking # E4.0 [1] (🚶‍♀️) +1F6B6 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man walking # E4.0 [1] (🚶‍♂️) +1F6B6 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman walking: light skin tone # E4.0 [1] (🚶🏻‍♀️) +1F6B6 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man walking: light skin tone # E4.0 [1] (🚶🏻‍♂️) +1F6B6 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman walking: medium-light skin tone # E4.0 [1] (🚶🏼‍♀️) +1F6B6 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man walking: medium-light skin tone # E4.0 [1] (🚶🏼‍♂️) +1F6B6 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman walking: medium skin tone # E4.0 [1] (🚶🏽‍♀️) +1F6B6 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man walking: medium skin tone # E4.0 [1] (🚶🏽‍♂️) +1F6B6 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman walking: medium-dark skin tone # E4.0 [1] (🚶🏾‍♀️) +1F6B6 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man walking: medium-dark skin tone # E4.0 [1] (🚶🏾‍♂️) +1F6B6 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman walking: dark skin tone # E4.0 [1] (🚶🏿‍♀️) +1F6B6 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man walking: dark skin tone # E4.0 [1] (🚶🏿‍♂️) +1F926 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman facepalming # E4.0 [1] (🤦‍♀️) +1F926 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man facepalming # E4.0 [1] (🤦‍♂️) +1F926 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman facepalming: light skin tone # E4.0 [1] (🤦🏻‍♀️) +1F926 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man facepalming: light skin tone # E4.0 [1] (🤦🏻‍♂️) +1F926 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman facepalming: medium-light skin tone # E4.0 [1] (🤦🏼‍♀️) +1F926 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man facepalming: medium-light skin tone # E4.0 [1] (🤦🏼‍♂️) +1F926 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman facepalming: medium skin tone # E4.0 [1] (🤦🏽‍♀️) +1F926 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man facepalming: medium skin tone # E4.0 [1] (🤦🏽‍♂️) +1F926 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman facepalming: medium-dark skin tone # E4.0 [1] (🤦🏾‍♀️) +1F926 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man facepalming: medium-dark skin tone # E4.0 [1] (🤦🏾‍♂️) +1F926 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman facepalming: dark skin tone # E4.0 [1] (🤦🏿‍♀️) +1F926 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man facepalming: dark skin tone # E4.0 [1] (🤦🏿‍♂️) +1F935 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in tuxedo # E13.0 [1] (🤵‍♀️) +1F935 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in tuxedo # E13.0 [1] (🤵‍♂️) +1F935 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in tuxedo: light skin tone # E13.0 [1] (🤵🏻‍♀️) +1F935 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in tuxedo: light skin tone # E13.0 [1] (🤵🏻‍♂️) +1F935 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in tuxedo: medium-light skin tone # E13.0 [1] (🤵🏼‍♀️) +1F935 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in tuxedo: medium-light skin tone # E13.0 [1] (🤵🏼‍♂️) +1F935 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in tuxedo: medium skin tone # E13.0 [1] (🤵🏽‍♀️) +1F935 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in tuxedo: medium skin tone # E13.0 [1] (🤵🏽‍♂️) +1F935 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in tuxedo: medium-dark skin tone # E13.0 [1] (🤵🏾‍♀️) +1F935 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in tuxedo: medium-dark skin tone # E13.0 [1] (🤵🏾‍♂️) +1F935 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in tuxedo: dark skin tone # E13.0 [1] (🤵🏿‍♀️) +1F935 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in tuxedo: dark skin tone # E13.0 [1] (🤵🏿‍♂️) +1F937 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman shrugging # E4.0 [1] (🤷‍♀️) +1F937 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man shrugging # E4.0 [1] (🤷‍♂️) +1F937 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman shrugging: light skin tone # E4.0 [1] (🤷🏻‍♀️) +1F937 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man shrugging: light skin tone # E4.0 [1] (🤷🏻‍♂️) +1F937 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman shrugging: medium-light skin tone # E4.0 [1] (🤷🏼‍♀️) +1F937 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man shrugging: medium-light skin tone # E4.0 [1] (🤷🏼‍♂️) +1F937 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman shrugging: medium skin tone # E4.0 [1] (🤷🏽‍♀️) +1F937 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man shrugging: medium skin tone # E4.0 [1] (🤷🏽‍♂️) +1F937 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman shrugging: medium-dark skin tone # E4.0 [1] (🤷🏾‍♀️) +1F937 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man shrugging: medium-dark skin tone # E4.0 [1] (🤷🏾‍♂️) +1F937 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman shrugging: dark skin tone # E4.0 [1] (🤷🏿‍♀️) +1F937 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man shrugging: dark skin tone # E4.0 [1] (🤷🏿‍♂️) +1F938 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman cartwheeling # E4.0 [1] (🤸‍♀️) +1F938 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man cartwheeling # E4.0 [1] (🤸‍♂️) +1F938 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman cartwheeling: light skin tone # E4.0 [1] (🤸🏻‍♀️) +1F938 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man cartwheeling: light skin tone # E4.0 [1] (🤸🏻‍♂️) +1F938 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman cartwheeling: medium-light skin tone # E4.0 [1] (🤸🏼‍♀️) +1F938 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man cartwheeling: medium-light skin tone # E4.0 [1] (🤸🏼‍♂️) +1F938 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman cartwheeling: medium skin tone # E4.0 [1] (🤸🏽‍♀️) +1F938 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man cartwheeling: medium skin tone # E4.0 [1] (🤸🏽‍♂️) +1F938 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman cartwheeling: medium-dark skin tone # E4.0 [1] (🤸🏾‍♀️) +1F938 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man cartwheeling: medium-dark skin tone # E4.0 [1] (🤸🏾‍♂️) +1F938 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman cartwheeling: dark skin tone # E4.0 [1] (🤸🏿‍♀️) +1F938 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man cartwheeling: dark skin tone # E4.0 [1] (🤸🏿‍♂️) +1F939 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman juggling # E4.0 [1] (🤹‍♀️) +1F939 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man juggling # E4.0 [1] (🤹‍♂️) +1F939 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman juggling: light skin tone # E4.0 [1] (🤹🏻‍♀️) +1F939 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man juggling: light skin tone # E4.0 [1] (🤹🏻‍♂️) +1F939 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman juggling: medium-light skin tone # E4.0 [1] (🤹🏼‍♀️) +1F939 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man juggling: medium-light skin tone # E4.0 [1] (🤹🏼‍♂️) +1F939 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman juggling: medium skin tone # E4.0 [1] (🤹🏽‍♀️) +1F939 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man juggling: medium skin tone # E4.0 [1] (🤹🏽‍♂️) +1F939 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman juggling: medium-dark skin tone # E4.0 [1] (🤹🏾‍♀️) +1F939 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man juggling: medium-dark skin tone # E4.0 [1] (🤹🏾‍♂️) +1F939 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman juggling: dark skin tone # E4.0 [1] (🤹🏿‍♀️) +1F939 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man juggling: dark skin tone # E4.0 [1] (🤹🏿‍♂️) +1F93C 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; women wrestling # E4.0 [1] (🤼‍♀️) +1F93C 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; men wrestling # E4.0 [1] (🤼‍♂️) +1F93D 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing water polo # E4.0 [1] (🤽‍♀️) +1F93D 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing water polo # E4.0 [1] (🤽‍♂️) +1F93D 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing water polo: light skin tone # E4.0 [1] (🤽🏻‍♀️) +1F93D 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing water polo: light skin tone # E4.0 [1] (🤽🏻‍♂️) +1F93D 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing water polo: medium-light skin tone # E4.0 [1] (🤽🏼‍♀️) +1F93D 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing water polo: medium-light skin tone # E4.0 [1] (🤽🏼‍♂️) +1F93D 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing water polo: medium skin tone # E4.0 [1] (🤽🏽‍♀️) +1F93D 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing water polo: medium skin tone # E4.0 [1] (🤽🏽‍♂️) +1F93D 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing water polo: medium-dark skin tone # E4.0 [1] (🤽🏾‍♀️) +1F93D 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing water polo: medium-dark skin tone # E4.0 [1] (🤽🏾‍♂️) +1F93D 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing water polo: dark skin tone # E4.0 [1] (🤽🏿‍♀️) +1F93D 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing water polo: dark skin tone # E4.0 [1] (🤽🏿‍♂️) +1F93E 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing handball # E4.0 [1] (🤾‍♀️) +1F93E 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing handball # E4.0 [1] (🤾‍♂️) +1F93E 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing handball: light skin tone # E4.0 [1] (🤾🏻‍♀️) +1F93E 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing handball: light skin tone # E4.0 [1] (🤾🏻‍♂️) +1F93E 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing handball: medium-light skin tone # E4.0 [1] (🤾🏼‍♀️) +1F93E 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing handball: medium-light skin tone # E4.0 [1] (🤾🏼‍♂️) +1F93E 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing handball: medium skin tone # E4.0 [1] (🤾🏽‍♀️) +1F93E 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing handball: medium skin tone # E4.0 [1] (🤾🏽‍♂️) +1F93E 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing handball: medium-dark skin tone # E4.0 [1] (🤾🏾‍♀️) +1F93E 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing handball: medium-dark skin tone # E4.0 [1] (🤾🏾‍♂️) +1F93E 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman playing handball: dark skin tone # E4.0 [1] (🤾🏿‍♀️) +1F93E 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man playing handball: dark skin tone # E4.0 [1] (🤾🏿‍♂️) +1F9B8 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman superhero # E11.0 [1] (🦸‍♀️) +1F9B8 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man superhero # E11.0 [1] (🦸‍♂️) +1F9B8 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman superhero: light skin tone # E11.0 [1] (🦸🏻‍♀️) +1F9B8 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man superhero: light skin tone # E11.0 [1] (🦸🏻‍♂️) +1F9B8 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman superhero: medium-light skin tone # E11.0 [1] (🦸🏼‍♀️) +1F9B8 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man superhero: medium-light skin tone # E11.0 [1] (🦸🏼‍♂️) +1F9B8 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman superhero: medium skin tone # E11.0 [1] (🦸🏽‍♀️) +1F9B8 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man superhero: medium skin tone # E11.0 [1] (🦸🏽‍♂️) +1F9B8 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman superhero: medium-dark skin tone # E11.0 [1] (🦸🏾‍♀️) +1F9B8 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man superhero: medium-dark skin tone # E11.0 [1] (🦸🏾‍♂️) +1F9B8 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman superhero: dark skin tone # E11.0 [1] (🦸🏿‍♀️) +1F9B8 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man superhero: dark skin tone # E11.0 [1] (🦸🏿‍♂️) +1F9B9 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman supervillain # E11.0 [1] (🦹‍♀️) +1F9B9 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man supervillain # E11.0 [1] (🦹‍♂️) +1F9B9 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman supervillain: light skin tone # E11.0 [1] (🦹🏻‍♀️) +1F9B9 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man supervillain: light skin tone # E11.0 [1] (🦹🏻‍♂️) +1F9B9 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman supervillain: medium-light skin tone # E11.0 [1] (🦹🏼‍♀️) +1F9B9 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man supervillain: medium-light skin tone # E11.0 [1] (🦹🏼‍♂️) +1F9B9 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman supervillain: medium skin tone # E11.0 [1] (🦹🏽‍♀️) +1F9B9 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man supervillain: medium skin tone # E11.0 [1] (🦹🏽‍♂️) +1F9B9 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman supervillain: medium-dark skin tone # E11.0 [1] (🦹🏾‍♀️) +1F9B9 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man supervillain: medium-dark skin tone # E11.0 [1] (🦹🏾‍♂️) +1F9B9 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman supervillain: dark skin tone # E11.0 [1] (🦹🏿‍♀️) +1F9B9 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man supervillain: dark skin tone # E11.0 [1] (🦹🏿‍♂️) +1F9CD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman standing # E12.0 [1] (🧍‍♀️) +1F9CD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man standing # E12.0 [1] (🧍‍♂️) +1F9CD 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman standing: light skin tone # E12.0 [1] (🧍🏻‍♀️) +1F9CD 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man standing: light skin tone # E12.0 [1] (🧍🏻‍♂️) +1F9CD 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman standing: medium-light skin tone # E12.0 [1] (🧍🏼‍♀️) +1F9CD 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man standing: medium-light skin tone # E12.0 [1] (🧍🏼‍♂️) +1F9CD 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman standing: medium skin tone # E12.0 [1] (🧍🏽‍♀️) +1F9CD 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man standing: medium skin tone # E12.0 [1] (🧍🏽‍♂️) +1F9CD 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman standing: medium-dark skin tone # E12.0 [1] (🧍🏾‍♀️) +1F9CD 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man standing: medium-dark skin tone # E12.0 [1] (🧍🏾‍♂️) +1F9CD 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman standing: dark skin tone # E12.0 [1] (🧍🏿‍♀️) +1F9CD 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man standing: dark skin tone # E12.0 [1] (🧍🏿‍♂️) +1F9CE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman kneeling # E12.0 [1] (🧎‍♀️) +1F9CE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man kneeling # E12.0 [1] (🧎‍♂️) +1F9CE 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman kneeling: light skin tone # E12.0 [1] (🧎🏻‍♀️) +1F9CE 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man kneeling: light skin tone # E12.0 [1] (🧎🏻‍♂️) +1F9CE 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman kneeling: medium-light skin tone # E12.0 [1] (🧎🏼‍♀️) +1F9CE 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man kneeling: medium-light skin tone # E12.0 [1] (🧎🏼‍♂️) +1F9CE 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman kneeling: medium skin tone # E12.0 [1] (🧎🏽‍♀️) +1F9CE 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man kneeling: medium skin tone # E12.0 [1] (🧎🏽‍♂️) +1F9CE 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman kneeling: medium-dark skin tone # E12.0 [1] (🧎🏾‍♀️) +1F9CE 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man kneeling: medium-dark skin tone # E12.0 [1] (🧎🏾‍♂️) +1F9CE 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman kneeling: dark skin tone # E12.0 [1] (🧎🏿‍♀️) +1F9CE 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man kneeling: dark skin tone # E12.0 [1] (🧎🏿‍♂️) +1F9CF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf woman # E12.0 [1] (🧏‍♀️) +1F9CF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf man # E12.0 [1] (🧏‍♂️) +1F9CF 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf woman: light skin tone # E12.0 [1] (🧏🏻‍♀️) +1F9CF 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf man: light skin tone # E12.0 [1] (🧏🏻‍♂️) +1F9CF 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf woman: medium-light skin tone # E12.0 [1] (🧏🏼‍♀️) +1F9CF 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf man: medium-light skin tone # E12.0 [1] (🧏🏼‍♂️) +1F9CF 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf woman: medium skin tone # E12.0 [1] (🧏🏽‍♀️) +1F9CF 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf man: medium skin tone # E12.0 [1] (🧏🏽‍♂️) +1F9CF 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf woman: medium-dark skin tone # E12.0 [1] (🧏🏾‍♀️) +1F9CF 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf man: medium-dark skin tone # E12.0 [1] (🧏🏾‍♂️) +1F9CF 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf woman: dark skin tone # E12.0 [1] (🧏🏿‍♀️) +1F9CF 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; deaf man: dark skin tone # E12.0 [1] (🧏🏿‍♂️) +1F9D4 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: beard # E13.1 [1] (🧔‍♀️) +1F9D4 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: beard # E13.1 [1] (🧔‍♂️) +1F9D4 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: light skin tone, beard # E13.1 [1] (🧔🏻‍♀️) +1F9D4 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: light skin tone, beard # E13.1 [1] (🧔🏻‍♂️) +1F9D4 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: medium-light skin tone, beard # E13.1 [1] (🧔🏼‍♀️) +1F9D4 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: medium-light skin tone, beard # E13.1 [1] (🧔🏼‍♂️) +1F9D4 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: medium skin tone, beard # E13.1 [1] (🧔🏽‍♀️) +1F9D4 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: medium skin tone, beard # E13.1 [1] (🧔🏽‍♂️) +1F9D4 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: medium-dark skin tone, beard # E13.1 [1] (🧔🏾‍♀️) +1F9D4 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: medium-dark skin tone, beard # E13.1 [1] (🧔🏾‍♂️) +1F9D4 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman: dark skin tone, beard # E13.1 [1] (🧔🏿‍♀️) +1F9D4 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man: dark skin tone, beard # E13.1 [1] (🧔🏿‍♂️) +1F9D6 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in steamy room # E5.0 [1] (🧖‍♀️) +1F9D6 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in steamy room # E5.0 [1] (🧖‍♂️) +1F9D6 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in steamy room: light skin tone # E5.0 [1] (🧖🏻‍♀️) +1F9D6 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in steamy room: light skin tone # E5.0 [1] (🧖🏻‍♂️) +1F9D6 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in steamy room: medium-light skin tone # E5.0 [1] (🧖🏼‍♀️) +1F9D6 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in steamy room: medium-light skin tone # E5.0 [1] (🧖🏼‍♂️) +1F9D6 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in steamy room: medium skin tone # E5.0 [1] (🧖🏽‍♀️) +1F9D6 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in steamy room: medium skin tone # E5.0 [1] (🧖🏽‍♂️) +1F9D6 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in steamy room: medium-dark skin tone # E5.0 [1] (🧖🏾‍♀️) +1F9D6 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in steamy room: medium-dark skin tone # E5.0 [1] (🧖🏾‍♂️) +1F9D6 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in steamy room: dark skin tone # E5.0 [1] (🧖🏿‍♀️) +1F9D6 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in steamy room: dark skin tone # E5.0 [1] (🧖🏿‍♂️) +1F9D7 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman climbing # E5.0 [1] (🧗‍♀️) +1F9D7 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man climbing # E5.0 [1] (🧗‍♂️) +1F9D7 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman climbing: light skin tone # E5.0 [1] (🧗🏻‍♀️) +1F9D7 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man climbing: light skin tone # E5.0 [1] (🧗🏻‍♂️) +1F9D7 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman climbing: medium-light skin tone # E5.0 [1] (🧗🏼‍♀️) +1F9D7 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man climbing: medium-light skin tone # E5.0 [1] (🧗🏼‍♂️) +1F9D7 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman climbing: medium skin tone # E5.0 [1] (🧗🏽‍♀️) +1F9D7 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man climbing: medium skin tone # E5.0 [1] (🧗🏽‍♂️) +1F9D7 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman climbing: medium-dark skin tone # E5.0 [1] (🧗🏾‍♀️) +1F9D7 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man climbing: medium-dark skin tone # E5.0 [1] (🧗🏾‍♂️) +1F9D7 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman climbing: dark skin tone # E5.0 [1] (🧗🏿‍♀️) +1F9D7 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man climbing: dark skin tone # E5.0 [1] (🧗🏿‍♂️) +1F9D8 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in lotus position # E5.0 [1] (🧘‍♀️) +1F9D8 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in lotus position # E5.0 [1] (🧘‍♂️) +1F9D8 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in lotus position: light skin tone # E5.0 [1] (🧘🏻‍♀️) +1F9D8 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in lotus position: light skin tone # E5.0 [1] (🧘🏻‍♂️) +1F9D8 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in lotus position: medium-light skin tone # E5.0 [1] (🧘🏼‍♀️) +1F9D8 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in lotus position: medium-light skin tone # E5.0 [1] (🧘🏼‍♂️) +1F9D8 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in lotus position: medium skin tone # E5.0 [1] (🧘🏽‍♀️) +1F9D8 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in lotus position: medium skin tone # E5.0 [1] (🧘🏽‍♂️) +1F9D8 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in lotus position: medium-dark skin tone # E5.0 [1] (🧘🏾‍♀️) +1F9D8 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in lotus position: medium-dark skin tone # E5.0 [1] (🧘🏾‍♂️) +1F9D8 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman in lotus position: dark skin tone # E5.0 [1] (🧘🏿‍♀️) +1F9D8 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man in lotus position: dark skin tone # E5.0 [1] (🧘🏿‍♂️) +1F9D9 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mage # E5.0 [1] (🧙‍♀️) +1F9D9 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mage # E5.0 [1] (🧙‍♂️) +1F9D9 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mage: light skin tone # E5.0 [1] (🧙🏻‍♀️) +1F9D9 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mage: light skin tone # E5.0 [1] (🧙🏻‍♂️) +1F9D9 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mage: medium-light skin tone # E5.0 [1] (🧙🏼‍♀️) +1F9D9 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mage: medium-light skin tone # E5.0 [1] (🧙🏼‍♂️) +1F9D9 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mage: medium skin tone # E5.0 [1] (🧙🏽‍♀️) +1F9D9 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mage: medium skin tone # E5.0 [1] (🧙🏽‍♂️) +1F9D9 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mage: medium-dark skin tone # E5.0 [1] (🧙🏾‍♀️) +1F9D9 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mage: medium-dark skin tone # E5.0 [1] (🧙🏾‍♂️) +1F9D9 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman mage: dark skin tone # E5.0 [1] (🧙🏿‍♀️) +1F9D9 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man mage: dark skin tone # E5.0 [1] (🧙🏿‍♂️) +1F9DA 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman fairy # E5.0 [1] (🧚‍♀️) +1F9DA 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man fairy # E5.0 [1] (🧚‍♂️) +1F9DA 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman fairy: light skin tone # E5.0 [1] (🧚🏻‍♀️) +1F9DA 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man fairy: light skin tone # E5.0 [1] (🧚🏻‍♂️) +1F9DA 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman fairy: medium-light skin tone # E5.0 [1] (🧚🏼‍♀️) +1F9DA 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man fairy: medium-light skin tone # E5.0 [1] (🧚🏼‍♂️) +1F9DA 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman fairy: medium skin tone # E5.0 [1] (🧚🏽‍♀️) +1F9DA 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man fairy: medium skin tone # E5.0 [1] (🧚🏽‍♂️) +1F9DA 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman fairy: medium-dark skin tone # E5.0 [1] (🧚🏾‍♀️) +1F9DA 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man fairy: medium-dark skin tone # E5.0 [1] (🧚🏾‍♂️) +1F9DA 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman fairy: dark skin tone # E5.0 [1] (🧚🏿‍♀️) +1F9DA 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man fairy: dark skin tone # E5.0 [1] (🧚🏿‍♂️) +1F9DB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman vampire # E5.0 [1] (🧛‍♀️) +1F9DB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man vampire # E5.0 [1] (🧛‍♂️) +1F9DB 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman vampire: light skin tone # E5.0 [1] (🧛🏻‍♀️) +1F9DB 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man vampire: light skin tone # E5.0 [1] (🧛🏻‍♂️) +1F9DB 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman vampire: medium-light skin tone # E5.0 [1] (🧛🏼‍♀️) +1F9DB 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man vampire: medium-light skin tone # E5.0 [1] (🧛🏼‍♂️) +1F9DB 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman vampire: medium skin tone # E5.0 [1] (🧛🏽‍♀️) +1F9DB 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man vampire: medium skin tone # E5.0 [1] (🧛🏽‍♂️) +1F9DB 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman vampire: medium-dark skin tone # E5.0 [1] (🧛🏾‍♀️) +1F9DB 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man vampire: medium-dark skin tone # E5.0 [1] (🧛🏾‍♂️) +1F9DB 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman vampire: dark skin tone # E5.0 [1] (🧛🏿‍♀️) +1F9DB 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man vampire: dark skin tone # E5.0 [1] (🧛🏿‍♂️) +1F9DC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; mermaid # E5.0 [1] (🧜‍♀️) +1F9DC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; merman # E5.0 [1] (🧜‍♂️) +1F9DC 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; mermaid: light skin tone # E5.0 [1] (🧜🏻‍♀️) +1F9DC 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; merman: light skin tone # E5.0 [1] (🧜🏻‍♂️) +1F9DC 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; mermaid: medium-light skin tone # E5.0 [1] (🧜🏼‍♀️) +1F9DC 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; merman: medium-light skin tone # E5.0 [1] (🧜🏼‍♂️) +1F9DC 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; mermaid: medium skin tone # E5.0 [1] (🧜🏽‍♀️) +1F9DC 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; merman: medium skin tone # E5.0 [1] (🧜🏽‍♂️) +1F9DC 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; mermaid: medium-dark skin tone # E5.0 [1] (🧜🏾‍♀️) +1F9DC 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; merman: medium-dark skin tone # E5.0 [1] (🧜🏾‍♂️) +1F9DC 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; mermaid: dark skin tone # E5.0 [1] (🧜🏿‍♀️) +1F9DC 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; merman: dark skin tone # E5.0 [1] (🧜🏿‍♂️) +1F9DD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman elf # E5.0 [1] (🧝‍♀️) +1F9DD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man elf # E5.0 [1] (🧝‍♂️) +1F9DD 1F3FB 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman elf: light skin tone # E5.0 [1] (🧝🏻‍♀️) +1F9DD 1F3FB 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man elf: light skin tone # E5.0 [1] (🧝🏻‍♂️) +1F9DD 1F3FC 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman elf: medium-light skin tone # E5.0 [1] (🧝🏼‍♀️) +1F9DD 1F3FC 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man elf: medium-light skin tone # E5.0 [1] (🧝🏼‍♂️) +1F9DD 1F3FD 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman elf: medium skin tone # E5.0 [1] (🧝🏽‍♀️) +1F9DD 1F3FD 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man elf: medium skin tone # E5.0 [1] (🧝🏽‍♂️) +1F9DD 1F3FE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman elf: medium-dark skin tone # E5.0 [1] (🧝🏾‍♀️) +1F9DD 1F3FE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man elf: medium-dark skin tone # E5.0 [1] (🧝🏾‍♂️) +1F9DD 1F3FF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman elf: dark skin tone # E5.0 [1] (🧝🏿‍♀️) +1F9DD 1F3FF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man elf: dark skin tone # E5.0 [1] (🧝🏿‍♂️) +1F9DE 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman genie # E5.0 [1] (🧞‍♀️) +1F9DE 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man genie # E5.0 [1] (🧞‍♂️) +1F9DF 200D 2640 FE0F ; RGI_Emoji_ZWJ_Sequence ; woman zombie # E5.0 [1] (🧟‍♀️) +1F9DF 200D 2642 FE0F ; RGI_Emoji_ZWJ_Sequence ; man zombie # E5.0 [1] (🧟‍♂️) + +# Total elements: 572 + +# ================================================ + +# RGI_Emoji_ZWJ_Sequence: Hair + +1F468 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; man: red hair # E11.0 [1] (👨‍🦰) +1F468 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; man: curly hair # E11.0 [1] (👨‍🦱) +1F468 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; man: bald # E11.0 [1] (👨‍🦲) +1F468 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; man: white hair # E11.0 [1] (👨‍🦳) +1F468 1F3FB 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; man: light skin tone, red hair # E11.0 [1] (👨🏻‍🦰) +1F468 1F3FB 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; man: light skin tone, curly hair # E11.0 [1] (👨🏻‍🦱) +1F468 1F3FB 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; man: light skin tone, bald # E11.0 [1] (👨🏻‍🦲) +1F468 1F3FB 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; man: light skin tone, white hair # E11.0 [1] (👨🏻‍🦳) +1F468 1F3FC 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; man: medium-light skin tone, red hair # E11.0 [1] (👨🏼‍🦰) +1F468 1F3FC 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; man: medium-light skin tone, curly hair # E11.0 [1] (👨🏼‍🦱) +1F468 1F3FC 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; man: medium-light skin tone, bald # E11.0 [1] (👨🏼‍🦲) +1F468 1F3FC 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; man: medium-light skin tone, white hair # E11.0 [1] (👨🏼‍🦳) +1F468 1F3FD 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; man: medium skin tone, red hair # E11.0 [1] (👨🏽‍🦰) +1F468 1F3FD 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; man: medium skin tone, curly hair # E11.0 [1] (👨🏽‍🦱) +1F468 1F3FD 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; man: medium skin tone, bald # E11.0 [1] (👨🏽‍🦲) +1F468 1F3FD 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; man: medium skin tone, white hair # E11.0 [1] (👨🏽‍🦳) +1F468 1F3FE 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; man: medium-dark skin tone, red hair # E11.0 [1] (👨🏾‍🦰) +1F468 1F3FE 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; man: medium-dark skin tone, curly hair # E11.0 [1] (👨🏾‍🦱) +1F468 1F3FE 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; man: medium-dark skin tone, bald # E11.0 [1] (👨🏾‍🦲) +1F468 1F3FE 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; man: medium-dark skin tone, white hair # E11.0 [1] (👨🏾‍🦳) +1F468 1F3FF 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; man: dark skin tone, red hair # E11.0 [1] (👨🏿‍🦰) +1F468 1F3FF 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; man: dark skin tone, curly hair # E11.0 [1] (👨🏿‍🦱) +1F468 1F3FF 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; man: dark skin tone, bald # E11.0 [1] (👨🏿‍🦲) +1F468 1F3FF 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; man: dark skin tone, white hair # E11.0 [1] (👨🏿‍🦳) +1F469 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; woman: red hair # E11.0 [1] (👩‍🦰) +1F469 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; woman: curly hair # E11.0 [1] (👩‍🦱) +1F469 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; woman: bald # E11.0 [1] (👩‍🦲) +1F469 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; woman: white hair # E11.0 [1] (👩‍🦳) +1F469 1F3FB 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; woman: light skin tone, red hair # E11.0 [1] (👩🏻‍🦰) +1F469 1F3FB 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; woman: light skin tone, curly hair # E11.0 [1] (👩🏻‍🦱) +1F469 1F3FB 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; woman: light skin tone, bald # E11.0 [1] (👩🏻‍🦲) +1F469 1F3FB 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; woman: light skin tone, white hair # E11.0 [1] (👩🏻‍🦳) +1F469 1F3FC 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; woman: medium-light skin tone, red hair # E11.0 [1] (👩🏼‍🦰) +1F469 1F3FC 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; woman: medium-light skin tone, curly hair # E11.0 [1] (👩🏼‍🦱) +1F469 1F3FC 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; woman: medium-light skin tone, bald # E11.0 [1] (👩🏼‍🦲) +1F469 1F3FC 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; woman: medium-light skin tone, white hair # E11.0 [1] (👩🏼‍🦳) +1F469 1F3FD 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; woman: medium skin tone, red hair # E11.0 [1] (👩🏽‍🦰) +1F469 1F3FD 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; woman: medium skin tone, curly hair # E11.0 [1] (👩🏽‍🦱) +1F469 1F3FD 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; woman: medium skin tone, bald # E11.0 [1] (👩🏽‍🦲) +1F469 1F3FD 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; woman: medium skin tone, white hair # E11.0 [1] (👩🏽‍🦳) +1F469 1F3FE 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; woman: medium-dark skin tone, red hair # E11.0 [1] (👩🏾‍🦰) +1F469 1F3FE 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; woman: medium-dark skin tone, curly hair # E11.0 [1] (👩🏾‍🦱) +1F469 1F3FE 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; woman: medium-dark skin tone, bald # E11.0 [1] (👩🏾‍🦲) +1F469 1F3FE 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; woman: medium-dark skin tone, white hair # E11.0 [1] (👩🏾‍🦳) +1F469 1F3FF 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; woman: dark skin tone, red hair # E11.0 [1] (👩🏿‍🦰) +1F469 1F3FF 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; woman: dark skin tone, curly hair # E11.0 [1] (👩🏿‍🦱) +1F469 1F3FF 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; woman: dark skin tone, bald # E11.0 [1] (👩🏿‍🦲) +1F469 1F3FF 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; woman: dark skin tone, white hair # E11.0 [1] (👩🏿‍🦳) +1F9D1 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; person: red hair # E12.1 [1] (🧑‍🦰) +1F9D1 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; person: curly hair # E12.1 [1] (🧑‍🦱) +1F9D1 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; person: bald # E12.1 [1] (🧑‍🦲) +1F9D1 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; person: white hair # E12.1 [1] (🧑‍🦳) +1F9D1 1F3FB 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; person: light skin tone, red hair # E12.1 [1] (🧑🏻‍🦰) +1F9D1 1F3FB 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; person: light skin tone, curly hair # E12.1 [1] (🧑🏻‍🦱) +1F9D1 1F3FB 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; person: light skin tone, bald # E12.1 [1] (🧑🏻‍🦲) +1F9D1 1F3FB 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; person: light skin tone, white hair # E12.1 [1] (🧑🏻‍🦳) +1F9D1 1F3FC 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; person: medium-light skin tone, red hair # E12.1 [1] (🧑🏼‍🦰) +1F9D1 1F3FC 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; person: medium-light skin tone, curly hair # E12.1 [1] (🧑🏼‍🦱) +1F9D1 1F3FC 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; person: medium-light skin tone, bald # E12.1 [1] (🧑🏼‍🦲) +1F9D1 1F3FC 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; person: medium-light skin tone, white hair # E12.1 [1] (🧑🏼‍🦳) +1F9D1 1F3FD 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; person: medium skin tone, red hair # E12.1 [1] (🧑🏽‍🦰) +1F9D1 1F3FD 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; person: medium skin tone, curly hair # E12.1 [1] (🧑🏽‍🦱) +1F9D1 1F3FD 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; person: medium skin tone, bald # E12.1 [1] (🧑🏽‍🦲) +1F9D1 1F3FD 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; person: medium skin tone, white hair # E12.1 [1] (🧑🏽‍🦳) +1F9D1 1F3FE 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; person: medium-dark skin tone, red hair # E12.1 [1] (🧑🏾‍🦰) +1F9D1 1F3FE 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; person: medium-dark skin tone, curly hair # E12.1 [1] (🧑🏾‍🦱) +1F9D1 1F3FE 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; person: medium-dark skin tone, bald # E12.1 [1] (🧑🏾‍🦲) +1F9D1 1F3FE 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; person: medium-dark skin tone, white hair # E12.1 [1] (🧑🏾‍🦳) +1F9D1 1F3FF 200D 1F9B0 ; RGI_Emoji_ZWJ_Sequence ; person: dark skin tone, red hair # E12.1 [1] (🧑🏿‍🦰) +1F9D1 1F3FF 200D 1F9B1 ; RGI_Emoji_ZWJ_Sequence ; person: dark skin tone, curly hair # E12.1 [1] (🧑🏿‍🦱) +1F9D1 1F3FF 200D 1F9B2 ; RGI_Emoji_ZWJ_Sequence ; person: dark skin tone, bald # E12.1 [1] (🧑🏿‍🦲) +1F9D1 1F3FF 200D 1F9B3 ; RGI_Emoji_ZWJ_Sequence ; person: dark skin tone, white hair # E12.1 [1] (🧑🏿‍🦳) + +# Total elements: 72 + +# ================================================ + +# RGI_Emoji_ZWJ_Sequence: Other + +2764 FE0F 200D 1F525 ; RGI_Emoji_ZWJ_Sequence ; heart on fire # E13.1 [1] (❤️‍🔥) +2764 FE0F 200D 1FA79 ; RGI_Emoji_ZWJ_Sequence ; mending heart # E13.1 [1] (❤️‍🩹) +1F3F3 FE0F 200D 26A7 FE0F ; RGI_Emoji_ZWJ_Sequence ; transgender flag # E13.0 [1] (🏳️‍⚧️) +1F3F3 FE0F 200D 1F308 ; RGI_Emoji_ZWJ_Sequence ; rainbow flag # E4.0 [1] (🏳️‍🌈) +1F3F4 200D 2620 FE0F ; RGI_Emoji_ZWJ_Sequence ; pirate flag # E11.0 [1] (🏴‍☠️) +1F408 200D 2B1B ; RGI_Emoji_ZWJ_Sequence ; black cat # E13.0 [1] (🐈‍⬛) +1F415 200D 1F9BA ; RGI_Emoji_ZWJ_Sequence ; service dog # E12.0 [1] (🐕‍🦺) +1F43B 200D 2744 FE0F ; RGI_Emoji_ZWJ_Sequence ; polar bear # E13.0 [1] (🐻‍❄️) +1F441 FE0F 200D 1F5E8 FE0F ; RGI_Emoji_ZWJ_Sequence ; eye in speech bubble # E2.0 [1] (👁️‍🗨️) +1F62E 200D 1F4A8 ; RGI_Emoji_ZWJ_Sequence ; face exhaling # E13.1 [1] (😮‍💨) +1F635 200D 1F4AB ; RGI_Emoji_ZWJ_Sequence ; face with spiral eyes # E13.1 [1] (😵‍💫) +1F636 200D 1F32B FE0F ; RGI_Emoji_ZWJ_Sequence ; face in clouds # E13.1 [1] (😶‍🌫️) +1F9D1 200D 1F384 ; RGI_Emoji_ZWJ_Sequence ; mx claus # E13.0 [1] (🧑‍🎄) + +# Total elements: 13 + +#EOF diff --git a/x86_64/extra/unixodbc/PKGBUILD b/x86_64/extra/unixodbc/PKGBUILD new file mode 100644 index 0000000..1f74ffe --- /dev/null +++ b/x86_64/extra/unixodbc/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=unixodbc +pkgver=2.3.9 +pkgrel=1 +arch=('x86_64') +backup=('etc/odbc.ini' 'etc/odbcinst.ini') +depends=('readline' 'libtool') +source=(ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-$pkgver.tar.gz) + +build() { + cd unixODBC-${pkgver} + + ./configure --prefix=/usr --sysconfdir=/etc + + make +} + +package() { + cd unixODBC-${pkgver} + make DESTDIR="${pkgdir}" install + touch "$pkgdir"/etc/{odbc,odbcinst}.ini +} diff --git a/x86_64/extra/unrar/PKGBUILD b/x86_64/extra/unrar/PKGBUILD new file mode 100644 index 0000000..ede5be0 --- /dev/null +++ b/x86_64/extra/unrar/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=unrar +pkgver=6.1.3 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(gcc make) +source=(https://www.rarlab.com/rar/unrarsrc-$pkgver.tar.gz) + +build() { + cd $pkgname + + make -f makefile +} + +package() { + cd $pkgname + + mkdir -p $pkgdir/usr/bin + install -v -m755 unrar $pkgdir/usr/bin +} diff --git a/x86_64/extra/unzip/PKGBUILD b/x86_64/extra/unzip/PKGBUILD new file mode 100644 index 0000000..47ccafb --- /dev/null +++ b/x86_64/extra/unzip/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=unzip +pkgver=60 +pkgrel=1 +arch=('x86_64') +source=(https://downloads.sourceforge.net/infozip/$pkgname$pkgver.tar.gz) + +prepare() { + cd $pkgname$pkgver + wget https://linuxfromscratch.org/patches/blfs/svn/$pkgname-6.0-consolidated_fixes-1.patch + patch -Np1 -i $pkgname-6.0-consolidated_fixes-1.patch +} + +build() { + cd $pkgname$pkgver + + make -f unix/Makefile generic +} + +package() { + cd $pkgname$pkgver + + make prefix=$pkgdir/usr MANDIR=$pkgdir/usr/share/man/man1 -f unix/Makefile install +} diff --git a/x86_64/extra/upower/PKGBUILD b/x86_64/extra/upower/PKGBUILD new file mode 100644 index 0000000..6e0d0ca --- /dev/null +++ b/x86_64/extra/upower/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=upower +pkgver=0.99.13 +pkgrel=1 +arch=('x86_64') +depends=(libgudev libusb polkit) +commitid=(177df5b9f9b76f25a2ad9da41aa0c1fa) +source=(https://gitlab.freedesktop.org/$pkgname/$pkgname/uploads/$commitid/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --localstatedir=/var \ + --enable-deprecated \ + --disable-docs + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/upx/PKGBUILD b/x86_64/extra/upx/PKGBUILD new file mode 100644 index 0000000..c3e1c36 --- /dev/null +++ b/x86_64/extra/upx/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=upx +pkgver=3.96 +pkgrel=1 +arch=(x86_64) +depends=(ucl) +makedepends=(git perl) +source=("git+https://github.com/upx/upx#commit=d7ba31cab8ce8d95d2c10e88d2ec787ac52005ef") # v3.96 + +prepare() { + cd $pkgname + git submodule update --init --recursive + + # Disable a warning. upx believes this is not a release version if the git revision is set. + sed -i 's/bool warn = true/bool warn = false/' src/main.cpp + + find . -type f -exec sed -i 's+-Werror++g' {} + +} + +build() { + make -C $pkgname \ + CHECK_WHITESPACE=/bin/true \ + UPX_LZMADIR="$srcdir" \ + all +} + +package() { + cd $pkgname + + install -Dm755 src/upx.out "$pkgdir/usr/bin/upx" +} diff --git a/x86_64/extra/usbutils/PKGBUILD b/x86_64/extra/usbutils/PKGBUILD new file mode 100644 index 0000000..778ba77 --- /dev/null +++ b/x86_64/extra/usbutils/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=usbutils +pkgver=014 +pkgrel=1 +arch=('x86_64') +depends=(libusb) +makedepends=(glibc wget) +source=(https://www.kernel.org/pub/linux/utils/usb/usbutils/usbutils-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --datadir=/usr/share/hwdata + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + install -dm755 $pkgdir/usr/share/hwdata/ + wget http://www.linux-usb.org/usb.ids -O $pkgdir/usr/share/hwdata/usb.ids +} diff --git a/x86_64/extra/util-macros/PKGBUILD b/x86_64/extra/util-macros/PKGBUILD new file mode 100644 index 0000000..a80b73e --- /dev/null +++ b/x86_64/extra/util-macros/PKGBUILD @@ -0,0 +1,17 @@ +pkgname=util-macros +pkgver=1.19.3 +pkgrel=1 +arch=('x86_64') +source=(https://x.org/pub/individual/util/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/vala/PKGBUILD b/x86_64/extra/vala/PKGBUILD new file mode 100644 index 0000000..f507afd --- /dev/null +++ b/x86_64/extra/vala/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=vala +pkgver=0.54 +pkgrel=1 +arch=('x86_64') +depends=(glib2 gcc) +makedepends=(git) +source=(https://download-fallback.gnome.org/sources/vala/$pkgver/vala-$pkgver.4.tar.xz) + +build() { + cd $pkgname-$pkgver.4 + ./configure --prefix=/usr --enable-vapigen --disable-valadoc + make CFLAGS=-w LDFLAGS=-w CXXFLAGS=-w +} + +package() { + cd $pkgname-$pkgver.4 + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/valgrind/PKGBUILD b/x86_64/extra/valgrind/PKGBUILD new file mode 100644 index 0000000..8e51452 --- /dev/null +++ b/x86_64/extra/valgrind/PKGBUILD @@ -0,0 +1,40 @@ +pkgname=valgrind +pkgver=3.17.0 +pkgrel=1 +arch=('x86_64') +depends=('glibc' 'perl') +source=(https://sourceware.org/pub/valgrind/valgrind-$pkgver.tar.bz2 + valgrind-3.7.0-respect-flags.patch) + +prepare() { + cd $pkgname-$pkgver + + patch -Np1 < ../valgrind-3.7.0-respect-flags.patch + autoreconf -ifv +} + +build() { + CPPFLAGS=${CPPFLAGS/-D_FORTIFY_SOURCE=2/} + CFLAGS=${CFLAGS/-fno-plt/} + CXXFLAGS=${CXXFLAGS/-fno-plt/} + + cd $pkgname-$pkgver + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --libexecdir=/usr/lib \ + --mandir=/usr/share/man + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + if check_option 'debug' n; then + find $pkgdir/usr/bin -type f -executable -exec strip $STRIP_BINARIES {} + || : + fi +} diff --git a/x86_64/extra/valgrind/valgrind-3.7.0-respect-flags.patch b/x86_64/extra/valgrind/valgrind-3.7.0-respect-flags.patch new file mode 100644 index 0000000..b5fc44d --- /dev/null +++ b/x86_64/extra/valgrind/valgrind-3.7.0-respect-flags.patch @@ -0,0 +1,13 @@ +diff -Naur valgrind-3.7.0.orig//mpi/Makefile.am valgrind-3.7.0/mpi/Makefile.am +--- valgrind-3.7.0.orig/mpi/Makefile.am 2011-10-26 17:24:23.000000000 -0400 ++++ valgrind-3.7.0/mpi/Makefile.am 2011-11-10 16:03:14.000000000 -0500 +@@ -7,9 +7,6 @@ + CC = $(MPI_CC) + DEFS = + DEFAULT_INCLUDES = +-CPPFLAGS = +-CFLAGS = +-LDFLAGS = + + EXTRA_DIST = \ + mpiwrap_type_test.c diff --git a/x86_64/extra/vdpau/PKGBUILD b/x86_64/extra/vdpau/PKGBUILD new file mode 100644 index 0000000..8057cae --- /dev/null +++ b/x86_64/extra/vdpau/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=vdpau +pkgver=1.5 +pkgrel=1 +pkgdesc="Nvidia VDPAU library" +arch=(x86_64) +url='https://www.freedesktop.org/wiki/Software/VDPAU/' +depends=('libxext') +source=("https://gitlab.freedesktop.org/vdpau/libvdpau/-/archive/$pkgver/libvdpau-$pkgver.tar.gz") +makedepends=('xorgproto' 'git' 'meson') + +build() { + meson lib$pkgname-$pkgver build \ + --prefix=/usr \ + --buildtype=release + + ninja -C build +} + +package() { + DESTDIR="${pkgdir}" ninja -C build install +} diff --git a/x86_64/extra/vim/PKGBUILD b/x86_64/extra/vim/PKGBUILD new file mode 100644 index 0000000..d8fe506 --- /dev/null +++ b/x86_64/extra/vim/PKGBUILD @@ -0,0 +1,48 @@ +pkgname=vim +pkgver=8.2.4106 +pkgrel=1 +arch=('x86_64') +source=(https://github.com/vim/vim/archive/v$pkgver.tar.gz) + +build() { + cd vim-$pkgver + + echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h + + ./configure --prefix=/usr --enable-multibyte --disable-gui + make +} + +package() { + cd vim-$pkgver + + make DESTDIR=$pkgdir install + + mv $pkgdir/usr/share/man/man1 ../../man1 + rm -r $pkgdir/usr/share/man/* + mv ../../man1 $pkgdir/usr/share/man/man1 + + # no desktop files and icons + rm -r $pkgdir/usr/share/{applications,icons} + + ln -sv vim $pkgdir/usr/bin/vi + + mkdir -pv $pkgdir/etc +cat > $pkgdir/etc/vimrc << "EOF" +" Begin /etc/vimrc + +" Ensure defaults are set before customizing settings, not after +source $VIMRUNTIME/defaults.vim +let skip_defaults_vim=1 + +set nocompatible +set backspace=2 +set mouse= +syntax on +if (&term == "xterm") || (&term == "putty") + set background=dark +endif + +" End /etc/vimrc +EOF +} diff --git a/x86_64/extra/virt-manager/PKGBUILD b/x86_64/extra/virt-manager/PKGBUILD new file mode 100644 index 0000000..5d82606 --- /dev/null +++ b/x86_64/extra/virt-manager/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=virt-manager +pkgver=4.0.0 +pkgrel=1 +arch=(x86_64) +depends=(python3-cairo vte libvirt-glib python3-libvirt cpio + libisoburn libosinfo spice-gtk python3-requests) +makedepends=(python3-pip) +source=(https://virt-manager.org/download/sources/virt-manager/virt-manager-${pkgver}.tar.gz + python-setup.patch) + +prepare() { + cd $pkgname-$pkgver + + patch -p0 -i ../python-setup.patch +} + +build() { + cd $pkgname-$pkgver + + python3 setup.py configure --default-hvs qemu + + python3 setup.py build +} + +package() { + cd $pkgname-$pkgver + + python setup.py --no-update-icon-cache --no-compile-schemas install --root $pkgdir + python -m compileall $pkgdir/usr/share/virt-manager + python -O -m compileall $pkgdir/usr/share/virt-manager +} diff --git a/x86_64/extra/virt-manager/python-setup.patch b/x86_64/extra/virt-manager/python-setup.patch new file mode 100644 index 0000000..34454a2 --- /dev/null +++ b/x86_64/extra/virt-manager/python-setup.patch @@ -0,0 +1,10 @@ +--- setup.py 2022-02-12 18:13:59.000000000 +0200 ++++ setup.py1 2022-07-02 16:33:30.523581000 +0300 +@@ -491,6 +491,7 @@ + author_email="virt-tools-list@redhat.com", + url="http://virt-manager.org", + license="GPLv2+", ++ py_modules=[], + + # These wrappers are generated in our custom build command + scripts=([ diff --git a/x86_64/extra/vlc/PKGBUILD b/x86_64/extra/vlc/PKGBUILD new file mode 100644 index 0000000..eba31d0 --- /dev/null +++ b/x86_64/extra/vlc/PKGBUILD @@ -0,0 +1,61 @@ +pkgname=vlc +pkgver=3.0.17.4 +pkgrel=1 +arch=(x86_64) +depends=('libxpm' 'lua' 'libidn' + 'ffmpeg' 'xcb-util-keysyms' 'tar' 'libxinerama' + 'libsecret' 'libarchive' 'qt5' 'attr' + 'freetype2' 'fribidi' 'harfbuzz' 'vdpau' + 'fontconfig' 'libxml2' 'gnutls' 'wayland-protocols' 'double-conversion') +makedepends=('gst-plugins-base' 'libnotify' + 'gtk3+' 'librsvg' 'avahi' 'systemd' + 'libmtp' 'samba' 'libssh2' 'mesa' 'protobuf' + 'libogg' 'libvpx' 'libvorbis' 'opus' 'libtheora' + 'libpng' 'libjpeg' 'libass' 'bison' + 'pulseaudio' 'alsa-lib' 'jack2') +source=(https://github.com/videolan/vlc/archive/refs/tags/$pkgver.tar.gz + update-vlc-plugin-cache.hook) + +prepare() { + cd $pkgname-$pkgver + + sed -e 's:truetype/ttf-dejavu:TTF:g' -i modules/visualization/projectm.cpp + + autoreconf -vfi + + sed -e 's|-Werror-implicit-function-declaration||g' -i configure + + export BUILDCC=gcc + export CXXFLAGS+=" -std=c++11" + export CPPFLAGS+=" -I/usr/include/samba-4.0" + export CFLAGS+=" -I/usr/include/samba-4.0 -ffat-lto-objects" + + # NOTICE: This is very minimal build of vlc as of missing deps for extra vlc plugins!!! + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --with-kde-solid=/usr/share/solid/actions/ \ + --enable-nls \ + --disable-a52 \ + --enable-vdpau +} + +build() { + cd $pkgname-$pkgver + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="${pkgdir}" install + + for res in 16 32 48 128 256; do + install -Dm 644 "$srcdir/vlc-$pkgver/share/icons/${res}x${res}/vlc.png" \ + "${pkgdir}/usr/share/icons/hicolor/${res}x${res}/apps/vlc.png" + done + + install -Dm 644 "$srcdir/update-vlc-plugin-cache.hook" -t "$pkgdir/usr/share/libalpm/hooks" +} diff --git a/x86_64/extra/vlc/update-vlc-plugin-cache.hook b/x86_64/extra/vlc/update-vlc-plugin-cache.hook new file mode 100644 index 0000000..d651e4e --- /dev/null +++ b/x86_64/extra/vlc/update-vlc-plugin-cache.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/lib/vlc/plugins/* + +[Action] +Description = Updating the vlc plugin cache... +When = PostTransaction +Exec = /usr/lib/vlc/vlc-cache-gen /usr/lib/vlc/plugins diff --git a/x86_64/extra/volume_key/PKGBUILD b/x86_64/extra/volume_key/PKGBUILD new file mode 100644 index 0000000..7c6bce5 --- /dev/null +++ b/x86_64/extra/volume_key/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=volume_key +pkgver=0.3.12 +pkgrel=1 +arch=('x86_64') +depends=(cryptsetup glib2 gpgme nss) +makedepends=(gcc python3) +source=(https://github.com/felixonmars/volume_key/archive/volume_key-$pkgver.tar.gz) + +prepare() { + cd $pkgname*-$pkgver + + autoreconf -fiv +} + +build() { + cd $pkgname*-$pkgver + + ./configure \ + --prefix=/usr \ + --without-python \ + --without-python3 \ + --without-swig + + make +} + +package() { + cd $pkgname*-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/vscode/PKGBUILD b/x86_64/extra/vscode/PKGBUILD new file mode 100644 index 0000000..53960fb --- /dev/null +++ b/x86_64/extra/vscode/PKGBUILD @@ -0,0 +1,105 @@ +pkgname=vscode +pkgver=1.64.2 +pkgrel=1 +arch=('x86_64') +depends=('libsecret' 'libx11' 'libxkbfile') +makedepends=('git' 'gulp' 'nodejs' 'python3' 'yarn') +source=("$pkgname::git+https://github.com/microsoft/vscode.git#tag=$pkgver" + 'vscode.js' + 'vscode.sh' + 'product_json.diff') + +# Even though we don't officially support other archs, let's +# allow the user to use this PKGBUILD to compile the package +# for his architecture +case "$CARCH" in +i686) + _vscode_arch=ia32 + ;; +x86_64) + _vscode_arch=x64 + ;; +armv7h) + _vscode_arch=arm + ;; +*) + # Needed for mksrcinfo + _vscode_arch=DUMMY + ;; +esac + +prepare() { + cd $pkgname + + # This patch no longer contains proprietary modifications. + # See https://github.com/Microsoft/vscode/issues/31168 for details. + patch -p0 < ../product_json.diff + + # Set the commit and build date + local commitid=$(git rev-parse HEAD) + local datestamp=$(date -u -Is | sed 's/\+00:00/Z/') + sed -e "s/@COMMIT@/$commitid/" -e "s/@DATE@/$datestamp/" -i product.json + + # Patch appdata and desktop file + sed -i 's|/usr/share/@@NAME@@/@@NAME@@|@@NAME@@|g + s|@@NAME_SHORT@@|Code|g + s|@@NAME_LONG@@|Code - OSS|g + s|@@NAME@@|code-oss|g + s|@@ICON@@|com.visualstudio.code.oss|g + s|@@EXEC@@|/usr/bin/code-oss|g + s|@@LICENSE@@|MIT|g + s|@@URLPROTOCOL@@|vscode|g + s|inode/directory;||' resources/linux/code{.appdata.xml,.desktop,-url-handler.desktop} + + sed -i 's|MimeType=.*|MimeType=x-scheme-handler/code-oss;|' resources/linux/code-url-handler.desktop + + # Add completitions for code-oss + cp resources/completions/bash/code resources/completions/bash/code-oss + cp resources/completions/zsh/_code resources/completions/zsh/_code-oss + + # Patch completitions with correct names + sed -i 's|@@APPNAME@@|code|g' resources/completions/{bash/code,zsh/_code} + sed -i 's|@@APPNAME@@|code-oss|g' resources/completions/{bash/code-oss,zsh/_code-oss} + + # Fix bin path + sed -i "s|return path.join(path.dirname(execPath), 'bin', \`\${product.applicationName}\`);|return '/usr/bin/code';|g + s|return path.join(appRoot, 'scripts', 'code-cli.sh');|return '/usr/bin/code';|g" \ + src/vs/platform/environment/node/environmentService.ts +} + +build() { + cd $pkgname + + yarn install --arch=$_vscode_arch + + gulp compile-build + gulp compile-extension-media + gulp compile-extensions-build + gulp vscode-linux-$_vscode_arch-min +} + +package() { + # Install resource files + install -dm 755 "$pkgdir"/usr/lib/$pkgname + cp -r --no-preserve=ownership --preserve=mode VSCode-linux-$_vscode_arch/resources/app/* "$pkgdir"/usr/lib/$pkgname/ + + # Replace statically included binary with system copy + ln -sf /usr/bin/rg "$pkgdir"/usr/lib/code/node_modules.asar.unpacked/@vscode/ripgrep/bin/rg + + # Install binary + install -Dm 755 code.sh "$pkgdir"/usr/bin/code-oss + install -Dm 755 code.js "$pkgdir"/usr/lib/$pkgname/code.js + ln -sf /usr/bin/code-oss "$pkgdir"/usr/bin/code + + # Install appdata and desktop file + install -Dm 644 $pkgname/resources/linux/code.appdata.xml "$pkgdir"/usr/share/metainfo/code-oss.appdata.xml + install -Dm 644 $pkgname/resources/linux/code.desktop "$pkgdir"/usr/share/applications/code-oss.desktop + install -Dm 644 $pkgname/resources/linux/code-url-handler.desktop "$pkgdir"/usr/share/applications/code-oss-url-handler.desktop + install -Dm 644 VSCode-linux-$_vscode_arch/resources/app/resources/linux/code.png "$pkgdir"/usr/share/pixmaps/com.visualstudio.code.oss.png + + # Install bash and zsh completions + install -Dm 644 $pkgname/resources/completions/bash/code "$pkgdir"/usr/share/bash-completion/completions/code + install -Dm 644 $pkgname/resources/completions/bash/code-oss "$pkgdir"/usr/share/bash-completion/completions/code-oss + install -Dm 644 $pkgname/resources/completions/zsh/_code "$pkgdir"/usr/share/zsh/site-functions/_code + install -Dm 644 $pkgname/resources/completions/zsh/_code-oss "$pkgdir"/usr/share/zsh/site-functions/_code-oss +} diff --git a/x86_64/extra/vscode/product_json.diff b/x86_64/extra/vscode/product_json.diff new file mode 100644 index 0000000..00ddbae --- /dev/null +++ b/x86_64/extra/vscode/product_json.diff @@ -0,0 +1,22 @@ +--- product.json 2019-04-06 13:26:49.879655883 +0100 ++++ product.json 2019-04-06 13:26:37.399656243 +0100 +@@ -1,4 +1,19 @@ + { ++ "quality": "stable", ++ "extensionsGallery": { ++ "serviceUrl": "https://open-vsx.org/vscode/gallery", ++ "itemUrl": "https://open-vsx.org/vscode/item" ++ }, ++ "linkProtectionTrustedDomains": [ ++ "https://open-vsx.org" ++ ], ++ "documentationUrl": "https://code.visualstudio.com/docs", ++ "requestFeatureUrl": "https://github.com/Microsoft/vscode/issues", ++ "introductoryVideosUrl": "https://go.microsoft.com/fwlink/?linkid=832146", ++ "tipsAndTricksUrl": "https://go.microsoft.com/fwlink/?linkid=852118", ++ "keyboardShortcutsUrlLinux": "https://go.microsoft.com/fwlink/?linkid=832144", ++ "commit": "@COMMIT@", ++ "date": "@DATE@", + "nameShort": "Code - OSS", + "nameLong": "Code - OSS", + "applicationName": "code-oss", diff --git a/x86_64/extra/vscode/vscode.js b/x86_64/extra/vscode/vscode.js new file mode 100644 index 0000000..e06d0a0 --- /dev/null +++ b/x86_64/extra/vscode/vscode.js @@ -0,0 +1,30 @@ +#!/usr/bin/electron +// don't edit the electron binary name here! simply change the variable in the PKGBUILD and we will sed it into the correct one :) + +const name = 'code-oss'; + +const app = require('electron').app; +const path = require('path'); +const fs = require("fs"); + +// Change command name. +const fd = fs.openSync("/proc/self/comm", fs.constants.O_WRONLY); +fs.writeSync(fd, name); +fs.closeSync(fd); + +// Remove first command line argument (/usr/lib/code/code.js). - We call the CLI file first +process.argv.splice(0, 1); + +// Set application paths. +const appPath = __dirname; +const packageJson = require(path.join(appPath, 'package.json')); +app.setAppPath(appPath); +app.setDesktopName(name + '.desktop'); +app.setName(name); +app.setPath('userCache', path.join(app.getPath('cache'), name)); +app.setPath('userData', path.join(app.getPath('appData'), name)); +app.setVersion(packageJson.version); + +// Run the application. +require('module')._load(appPath, module, true); + diff --git a/x86_64/extra/vscode/vscode.sh b/x86_64/extra/vscode/vscode.sh new file mode 100644 index 0000000..191529f --- /dev/null +++ b/x86_64/extra/vscode/vscode.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +# don't edit the electron binary name here! simply change the variable in the PKGBUILD and we will sed it into the correct one :) +ELECTRON_RUN_AS_NODE=1 exec electron /usr/lib/code/out/cli.js /usr/lib/code/code.js "$@" diff --git a/x86_64/extra/vulkan-headers/PKGBUILD b/x86_64/extra/vulkan-headers/PKGBUILD new file mode 100644 index 0000000..d753ea4 --- /dev/null +++ b/x86_64/extra/vulkan-headers/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=vulkan-headers +pkgver=1.3.220 +pkgrel=1 +arch=('x86_64') +makedepends=('cmake' 'git') +source=(https://github.com/KhronosGroup/Vulkan-Headers/archive/v${pkgver}.tar.gz) + +build() { + cd Vulkan-Headers-$pkgver + + rm -rf build && mkdir -p build && cd build + + cmake \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + .. + + make +} + +package() { + cd Vulkan-Headers-$pkgver/build + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/vulkan-icd-loader/0001-Dont-call-ToolProps-on-drivers-without-support.patch b/x86_64/extra/vulkan-icd-loader/0001-Dont-call-ToolProps-on-drivers-without-support.patch new file mode 100644 index 0000000..c91e0c8 --- /dev/null +++ b/x86_64/extra/vulkan-icd-loader/0001-Dont-call-ToolProps-on-drivers-without-support.patch @@ -0,0 +1,126 @@ +From 22e9c7c538a2d2cfe2a81cb4fee6a710798b8f11 Mon Sep 17 00:00:00 2001 +From: Charles Giessen +Date: Wed, 17 Nov 2021 14:44:11 -0700 +Subject: [PATCH] Dont call ToolProps on drivers without support + +The loader recently added support for calling into drivers in +vkGetPhysicalDeviceToolPropertieesEXT. However, it only used the value of +the function pointer to determine if it was safe. It was found that Mesa +drivers will return a non-null function pointer, even though they do not +support the extension, and so the loader called this function pointer which +would then segfault. + +The loader prevents this by first checking if the extension is supported by +the physical device. This necessitates calling +vkEnumerateDeviceExtensionProperties and allocating some memory on each call +but since the number of times this function is called should be low, it is +not an undue performance burden. In the future, the loader should cache the +list of extensions when calling vkEnumeratePhysicalDevices so that checking if +a extension function is supported is fast and easy. + +Signed-off-by: Laurent Carlier +--- + loader/extension_manual.c | 46 ++++++++++++++++++++++++++++--- + tests/loader_regression_tests.cpp | 21 ++++++++++++-- + 2 files changed, 61 insertions(+), 6 deletions(-) + +diff --git a/loader/extension_manual.c b/loader/extension_manual.c +index 415b64b74..65c573d91 100644 +--- a/loader/extension_manual.c ++++ b/loader/extension_manual.c +@@ -305,11 +305,49 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceToolPropertiesEXT(VkP + struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice; + struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; + +- if (icd_term->dispatch.GetPhysicalDeviceToolPropertiesEXT) { +- return icd_term->dispatch.GetPhysicalDeviceToolPropertiesEXT(phys_dev_term->phys_dev, pToolCount, pToolProperties); ++ bool tooling_info_supported = false; ++ uint32_t ext_count = 0; ++ VkExtensionProperties *ext_props = NULL; ++ VkResult res = VK_SUCCESS; ++ VkResult enumerate_res = VK_SUCCESS; ++ ++ enumerate_res = icd_term->dispatch.EnumerateDeviceExtensionProperties(phys_dev_term->phys_dev, NULL, &ext_count, NULL); ++ if (enumerate_res != VK_SUCCESS) { ++ goto out; + } + ++ ext_props = loader_instance_heap_alloc(icd_term->this_instance, sizeof(VkExtensionProperties) * ext_count, ++ VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); ++ if (!ext_props) { ++ res = VK_ERROR_OUT_OF_HOST_MEMORY; ++ goto out; ++ } ++ ++ enumerate_res = icd_term->dispatch.EnumerateDeviceExtensionProperties(phys_dev_term->phys_dev, NULL, &ext_count, ext_props); ++ if (enumerate_res != VK_SUCCESS) { ++ goto out; ++ } ++ ++ for (uint32_t i = 0; i < ext_count; i++) { ++ if (strncmp(ext_props[i].extensionName, VK_EXT_TOOLING_INFO_EXTENSION_NAME, VK_MAX_EXTENSION_NAME_SIZE) == 0) { ++ tooling_info_supported = true; ++ break; ++ } ++ } ++ ++ if (tooling_info_supported && icd_term->dispatch.GetPhysicalDeviceToolPropertiesEXT) { ++ res = icd_term->dispatch.GetPhysicalDeviceToolPropertiesEXT(phys_dev_term->phys_dev, pToolCount, pToolProperties); ++ } ++ ++out: + // In the case the driver didn't support the extension, make sure that the first layer doesn't find the count uninitialized +- *pToolCount = 0; +- return VK_SUCCESS; ++ if (!tooling_info_supported || !icd_term->dispatch.GetPhysicalDeviceToolPropertiesEXT) { ++ *pToolCount = 0; ++ } ++ ++ if (ext_props) { ++ loader_instance_heap_free(icd_term->this_instance, ext_props); ++ } ++ ++ return res; + } +diff --git a/tests/loader_regression_tests.cpp b/tests/loader_regression_tests.cpp +index d1687a4f5..469aa8925 100644 +--- a/tests/loader_regression_tests.cpp ++++ b/tests/loader_regression_tests.cpp +@@ -849,7 +849,24 @@ TEST(ExtensionManual, ToolingProperties) { + VK_TOOL_PURPOSE_VALIDATION_BIT_EXT, + "This tool does not exist", + "No-Layer"}; +- { // extension ++ { // No support in driver ++ SingleICDShim env{TestICDDetails{TEST_ICD_PATH_VERSION_6}}; ++ env.get_test_icd().physical_devices.push_back({}); ++ ++ InstWrapper inst{env.vulkan_functions}; ++ inst.CheckCreate(); ++ ++ auto phys_dev = inst.GetPhysDev(); ++ ++ auto getToolProperties = reinterpret_cast( ++ inst.functions->vkGetInstanceProcAddr(inst, "vkGetPhysicalDeviceToolPropertiesEXT")); ++ handle_assert_has_value(getToolProperties); ++ ++ uint32_t tool_count = 0; ++ ASSERT_EQ(VK_SUCCESS, getToolProperties(phys_dev, &tool_count, nullptr)); ++ ASSERT_EQ(tool_count, 0); ++ } ++ { // extension is supported in driver + SingleICDShim env{TestICDDetails{TEST_ICD_PATH_VERSION_6}}; + env.get_test_icd().physical_devices.push_back({}); + env.get_test_icd().supports_tooling_info_ext = true; +@@ -864,7 +881,7 @@ TEST(ExtensionManual, ToolingProperties) { + auto getToolProperties = reinterpret_cast( + inst.functions->vkGetInstanceProcAddr(inst, "vkGetPhysicalDeviceToolPropertiesEXT")); + handle_assert_has_value(getToolProperties); +- uint32_t tool_count = 1; ++ uint32_t tool_count = 0; + ASSERT_EQ(VK_SUCCESS, getToolProperties(phys_dev, &tool_count, nullptr)); + ASSERT_EQ(tool_count, 1); + VkPhysicalDeviceToolPropertiesEXT props{}; +-- +2.34.1 + diff --git a/x86_64/extra/vulkan-icd-loader/PKGBUILD b/x86_64/extra/vulkan-icd-loader/PKGBUILD new file mode 100644 index 0000000..097f127 --- /dev/null +++ b/x86_64/extra/vulkan-icd-loader/PKGBUILD @@ -0,0 +1,44 @@ +pkgname=vulkan-icd-loader +pkgver=1.2.219 +pkgrel=1 +arch=(x86_64) +makedepends=('cmake' 'libx11' 'libxrandr' 'wayland' 'vulkan-headers') +depends=('glibc') +source=(https://github.com/KhronosGroup/Vulkan-Loader/archive/v$pkgver.tar.gz + 0001-Dont-call-ToolProps-on-drivers-without-support.patch) + +prepare() { + cd Vulkan-Loader* + + # Fix segfault with mesa drivers + patch -Np1 -i ../0001-Dont-call-ToolProps-on-drivers-without-support.patch +} + +build() { + cd Vulkan-Loader* + + rm -rf build; mkdir -p build; cd build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D VULKAN_HEADERS_INSTALL_DIR=/usr \ + -D CMAKE_INSTALL_LIBDIR=/lib \ + -D CMAKE_INSTALL_SYSCONFDIR=/etc \ + -D CMALE_INSTALL_DATADIR=/share \ + -D CMAKE_SKIP_RPATH=True \ + -D BUILD_TESTS=Off \ + -D BUILD_WSI_XCB_SUPPORT=On \ + -D BUILD_WSI_XLIB_SUPPORT=On \ + -D BUILD_WSI_WAYLAND_SUPPORT=On \ + -D BUILD_WSI_DIRECTFB_SUPPORT=On \ + -D CMAKE_BUILD_TYPE=Release \ + .. + + make +} + +package() { + cd Vulkan-Loader*/build + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/vulkan-tools/PKGBUILD b/x86_64/extra/vulkan-tools/PKGBUILD new file mode 100644 index 0000000..9621f23 --- /dev/null +++ b/x86_64/extra/vulkan-tools/PKGBUILD @@ -0,0 +1,40 @@ +pkgname=vulkan-tools +pkgver=1.2.203 +pkgrel=1 +arch=(x86_64) +depends=('libx11' 'wayland' 'mesa') +makedepends=('cmake' 'python3' 'vulkan-headers' 'vulkan-icd-loader' 'glslang') +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/KhronosGroup/Vulkan-Tools/archive/v${pkgver}.tar.gz") + +prepare() { + cd "${srcdir}"/Vulkan-Tools* + + rm -rf build && mkdir -p build +} + +build() { + cd "${srcdir}"/Vulkan-Tools*/build + + cmake \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_SYSCONFDIR=/etc \ + -DCMAKE_INSTALL_DATADIR=/usr/share \ + -DCMAKE_SKIP_RPATH=True \ + -DBUILD_WSI_XCB_SUPPORT=On \ + -DBUILD_WSI_XLIB_SUPPORT=On \ + -DBUILD_WSI_WAYLAND_SUPPORT=On \ + -DBUILD_CUBE=ON \ + -DBUILD_VULKANINFO=ON \ + -DBUILD_ICD=OFF \ + -DGLSLANG_INSTALL_DIR=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + .. + + make +} + +package() { + cd "${srcdir}"/Vulkan-Tools*/build + + make DESTDIR="${pkgdir}" install +} diff --git a/x86_64/extra/wasi-compiler-rt/PKGBUILD b/x86_64/extra/wasi-compiler-rt/PKGBUILD new file mode 100644 index 0000000..d5325aa --- /dev/null +++ b/x86_64/extra/wasi-compiler-rt/PKGBUILD @@ -0,0 +1,45 @@ +pkgname=wasi-compiler-rt +pkgver=13.0.1 +pkgrel=1 +pkgdesc='WASI LLVM compiler runtime' +arch=('x86_64') +url='https://compiler-rt.llvm.org/' +depends=('wasi-libc') +makedepends=('cmake' 'ninja' 'llvm' 'clang' 'lld') +source=("https://github.com/llvm/llvm-project/releases/download/llvmorg-${pkgver}/compiler-rt-${pkgver}.src.tar.xz" + WASI.cmake + wasi-toolchain.cmake) +options=('staticlibs') +prepare() { + # Platform files have been copied from here https://github.com/WebAssembly/wasi-sdk + mkdir -p cmake/Platform + cp WASI.cmake cmake/Platform +} + +build() { + # Build options are derived from here https://github.com/WebAssembly/wasi-sdk/blob/main/Makefile + + # Currently, wasi-sdk requires C++ code be compiled with -fno-exceptions. libc++abi is compiled, however is is currently compiled with exception-handling support disabled. + # https://github.com/WebAssembly/wasi-sdk/issues/52#issuecomment-530619365 + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_COMPILER_WORKS=ON \ + -DCMAKE_CXX_COMPILER_WORKS=ON \ + -DCMAKE_MODULE_PATH="${srcdir}"/make \ + -DCMAKE_TOOLCHAIN_FILE="${srcdir}"/wasi-toolchain.cmake \ + -DCOMPILER_RT_BAREMETAL_BUILD=On \ + -DCOMPILER_RT_INCLUDE_TESTS=OFF \ + -DCOMPILER_RT_HAS_FPIC_FLAG=OFF \ + -DCOMPILER_RT_DEFAULT_TARGET_ONLY=On \ + -DCOMPILER_RT_OS_DIR=wasi \ + -DWASI_SDK_PREFIX=/usr \ + -DCMAKE_C_FLAGS="-fno-exceptions --sysroot=/usr/share/wasi-sysroot" \ + -DCMAKE_INSTALL_PREFIX=/usr/lib/clang/${pkgver}/ \ + compiler-rt-${pkgver}.src/lib/builtins + + cmake --build build -v +} + +package() { + DESTDIR="${pkgdir}" cmake --install build +} diff --git a/x86_64/extra/wasi-compiler-rt/WASI.cmake b/x86_64/extra/wasi-compiler-rt/WASI.cmake new file mode 100644 index 0000000..b49713f --- /dev/null +++ b/x86_64/extra/wasi-compiler-rt/WASI.cmake @@ -0,0 +1 @@ +set(WASI 1) diff --git a/x86_64/extra/wasi-compiler-rt/wasi-toolchain.cmake b/x86_64/extra/wasi-compiler-rt/wasi-toolchain.cmake new file mode 100644 index 0000000..0920f76 --- /dev/null +++ b/x86_64/extra/wasi-compiler-rt/wasi-toolchain.cmake @@ -0,0 +1,29 @@ +# Cmake toolchain description file for the Makefile + +# This is arbitrary, AFAIK, for now. +cmake_minimum_required(VERSION 3.4.0) + +set(CMAKE_SYSTEM_NAME WASI) +set(CMAKE_SYSTEM_VERSION 1) +set(CMAKE_SYSTEM_PROCESSOR wasm32) +set(triple wasm32-wasi) + +if(WIN32) + set(WASI_HOST_EXE_SUFFIX ".exe") +else() + set(WASI_HOST_EXE_SUFFIX "") +endif() + +set(CMAKE_C_COMPILER ${WASI_SDK_PREFIX}/bin/clang${WASI_HOST_EXE_SUFFIX}) +set(CMAKE_CXX_COMPILER ${WASI_SDK_PREFIX}/bin/clang++${WASI_HOST_EXE_SUFFIX}) +set(CMAKE_AR ${WASI_SDK_PREFIX}/bin/llvm-ar${WASI_HOST_EXE_SUFFIX}) +set(CMAKE_RANLIB ${WASI_SDK_PREFIX}/bin/llvm-ranlib${WASI_HOST_EXE_SUFFIX}) +set(CMAKE_C_COMPILER_TARGET ${triple}) +set(CMAKE_CXX_COMPILER_TARGET ${triple}) + +# Don't look in the sysroot for executables to run during the build +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +# Only look in the sysroot (not in the host paths) for the rest +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) diff --git a/x86_64/extra/wasi-libc++/PKGBUILD b/x86_64/extra/wasi-libc++/PKGBUILD new file mode 100644 index 0000000..73a0e25 --- /dev/null +++ b/x86_64/extra/wasi-libc++/PKGBUILD @@ -0,0 +1,93 @@ +pkgname=wasi-libc++ +pkgver=13.0.0 +pkgrel=1 +arch=('x86_64') +url='https://libcxx.llvm.org/' +makedepends=('cmake' 'ninja' 'python3' 'llvm' 'clang' 'wasi-libc' 'wasi-compiler-rt') +source=("https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver/llvm-$pkgver.src.tar.xz" + "https://github.com/llvm/llvm-project/releases/download/llvmorg-${pkgver}/libcxx-${pkgver}.src.tar.xz" + "https://github.com/llvm/llvm-project/releases/download/llvmorg-${pkgver}/libcxxabi-${pkgver}.src.tar.xz" + WASI.cmake + wasi-toolchain.cmake) +options=('staticlibs') + +prepare() { + # Platform files have been copied from here https://github.com/WebAssembly/wasi-sdk + mkdir -p cmake/Platform + cp WASI.cmake cmake/Platform + + mv libcxx-${pkgver}.src libcxx + mv libcxxabi-${pkgver}.src libcxxabi + mv llvm-${pkgver}.src llvm + + sed -i 's/CREDITS.TXT/CREDITS/' libcxx/LICENSE.TXT libcxxabi/LICENSE.TXT +} + +build() { + # Build options are derived from here https://github.com/WebAssembly/wasi-sdk/blob/main/Makefile + + # Currently, wasi-sdk requires C++ code be compiled with -fno-exceptions. libc++abi is compiled, however is is currently compiled with exception-handling support disabled. + # https://github.com/WebAssembly/wasi-sdk/issues/52#issuecomment-530619365 + cmake -B build-libcxx -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_COMPILER_WORKS=ON \ + -DCMAKE_CXX_COMPILER_WORKS=ON \ + -DCMAKE_MODULE_PATH="${srcdir}"/cmake \ + -DCMAKE_TOOLCHAIN_FILE="${srcdir}"/wasi-toolchain.cmake \ + -DCMAKE_STAGING_PREFIX=/usr/share/wasi-sysroot \ + -DLIBCXX_ENABLE_EXCEPTIONS:BOOL=OFF \ + -DLIBCXX_ENABLE_SHARED:BOOL=OFF \ + -DLIBCXX_ENABLE_THREADS:BOOL=OFF \ + -DLIBCXX_HAS_PTHREAD_API:BOOL=OFF \ + -DLIBCXX_HAS_EXTERNAL_THREAD_API:BOOL=OFF \ + -DLIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \ + -DLIBCXX_HAS_WIN32_THREAD_API:BOOL=OFF \ + -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY:BOOL=OFF \ + -DLIBCXX_ENABLE_FILESYSTEM:BOOL=OFF \ + -DLIBCXX_CXX_ABI=libcxxabi \ + -DLIBCXX_CXX_ABI_INCLUDE_PATHS=libcxxabi/include \ + -DLIBCXX_HAS_MUSL_LIBC:BOOL=ON \ + -DLIBCXX_ABI_VERSION=2 \ + -DWASI_SDK_PREFIX=/usr \ + -DCMAKE_C_FLAGS="-fno-exceptions --sysroot=/usr/share/wasi-sysroot" \ + -DCMAKE_CXX_FLAGS="-fno-exceptions --sysroot=/usr/share/wasi-sysroot" \ + -DLIBCXX_LIBDIR_SUFFIX=/wasm32-wasi \ + libcxx + + cmake --build build-libcxx + + cmake -B build-libcxxabi -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_COMPILER_WORKS=ON \ + -DCMAKE_CXX_COMPILER_WORKS=ON \ + -DCMAKE_MODULE_PATH="${srcdir}"/cmake \ + -DCMAKE_TOOLCHAIN_FILE="${srcdir}"/wasi-toolchain.cmake \ + -DCMAKE_STAGING_PREFIX=/usr/share/wasi-sysroot \ + -DLIBCXXABI_ENABLE_EXCEPTIONS:BOOL=OFF \ + -DLIBCXXABI_ENABLE_SHARED:BOOL=OFF \ + -DLIBCXXABI_ENABLE_THREADS:BOOL=OFF \ + -DLIBCXXABI_HAS_PTHREAD_API:BOOL=OFF \ + -DLIBCXXABI_HAS_EXTERNAL_THREAD_API:BOOL=OFF \ + -DLIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \ + -DLIBCXXABI_HAS_WIN32_THREAD_API:BOOL=OFF \ + -DLIBCXXABI_SILENT_TERMINATE:BOOL=ON \ + -DLIBCXXABI_ENABLE_PIC:BOOL=OFF \ + -DUNIX:BOOL=ON \ + -DCXX_SUPPORTS_CXX11=ON \ + -DLIBCXXABI_LIBCXX_PATH=libcxx \ + -DLIBCXXABI_LIBCXX_INCLUDES="${srcdir}"/build-libcxx/include/c++/v1 \ + -DWASI_SDK_PREFIX=/usr \ + -DCMAKE_C_FLAGS="-fno-exceptions --sysroot=/usr/share/wasi-sysroot" \ + -DCMAKE_CXX_FLAGS="-fno-exceptions --sysroot=/usr/share/wasi-sysroot" \ + -DLIBCXXABI_LIBDIR_SUFFIX=/wasm32-wasi \ + libcxxabi + + cmake --build build-libcxxabi -v +} + +package() { + + DESTDIR="${pkgdir}" cmake --install build-libcxx + + DESTDIR="${pkgdir}" cmake --install build-libcxxabi +} diff --git a/x86_64/extra/wasi-libc++/WASI.cmake b/x86_64/extra/wasi-libc++/WASI.cmake new file mode 100644 index 0000000..b49713f --- /dev/null +++ b/x86_64/extra/wasi-libc++/WASI.cmake @@ -0,0 +1 @@ +set(WASI 1) diff --git a/x86_64/extra/wasi-libc++/wasi-toolchain.cmake b/x86_64/extra/wasi-libc++/wasi-toolchain.cmake new file mode 100644 index 0000000..0920f76 --- /dev/null +++ b/x86_64/extra/wasi-libc++/wasi-toolchain.cmake @@ -0,0 +1,29 @@ +# Cmake toolchain description file for the Makefile + +# This is arbitrary, AFAIK, for now. +cmake_minimum_required(VERSION 3.4.0) + +set(CMAKE_SYSTEM_NAME WASI) +set(CMAKE_SYSTEM_VERSION 1) +set(CMAKE_SYSTEM_PROCESSOR wasm32) +set(triple wasm32-wasi) + +if(WIN32) + set(WASI_HOST_EXE_SUFFIX ".exe") +else() + set(WASI_HOST_EXE_SUFFIX "") +endif() + +set(CMAKE_C_COMPILER ${WASI_SDK_PREFIX}/bin/clang${WASI_HOST_EXE_SUFFIX}) +set(CMAKE_CXX_COMPILER ${WASI_SDK_PREFIX}/bin/clang++${WASI_HOST_EXE_SUFFIX}) +set(CMAKE_AR ${WASI_SDK_PREFIX}/bin/llvm-ar${WASI_HOST_EXE_SUFFIX}) +set(CMAKE_RANLIB ${WASI_SDK_PREFIX}/bin/llvm-ranlib${WASI_HOST_EXE_SUFFIX}) +set(CMAKE_C_COMPILER_TARGET ${triple}) +set(CMAKE_CXX_COMPILER_TARGET ${triple}) + +# Don't look in the sysroot for executables to run during the build +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +# Only look in the sysroot (not in the host paths) for the rest +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) diff --git a/x86_64/extra/wasi-libc/PKGBUILD b/x86_64/extra/wasi-libc/PKGBUILD new file mode 100644 index 0000000..dd9ae4d --- /dev/null +++ b/x86_64/extra/wasi-libc/PKGBUILD @@ -0,0 +1,33 @@ +pkgname=wasi-libc +pkgver=0+222+ad51334 +pkgrel=2 +_commit=ad5133410f66b93a2381db5b542aad5e0964db96 # Adjust the Makefile for LLVM 13 +pkgdesc='WASI libc implementation for WebAssembly' +arch=('x86_64') +url='https://github.com/WebAssembly/wasi-libc' +makedepends=('git' 'llvm' 'clang') +source=("git+https://github.com/WebAssembly/wasi-libc.git#commit=${_commit}") +options=('staticlibs') + +pkgver() { + cd ${pkgname} + + printf "0+%s+%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" +} + +build() { + cd ${pkgname} + + make \ + WASM_CC=/usr/bin/clang \ + WASM_AR=/usr/bin/llvm-ar \ + WASM_NM=/usr/bin/llvm-nm +} + +package() { + cd ${pkgname} + + install -dm755 "${pkgdir}"/usr/share + + cp -dr --preserve=mode,timestamp sysroot "${pkgdir}"/usr/share/wasi-sysroot +} diff --git a/x86_64/extra/wayland-protocols/PKGBUILD b/x86_64/extra/wayland-protocols/PKGBUILD new file mode 100644 index 0000000..7c75b62 --- /dev/null +++ b/x86_64/extra/wayland-protocols/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=wayland-protocols +pkgver=1.26 +pkgrel=1 +arch=('x86_64') +depends=('wayland') +source=(https://wayland.freedesktop.org/releases/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + --buildtype=release + + ninja +} + +package() { + cd $pkgname-$pkgver + cd build + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/wayland/PKGBUILD b/x86_64/extra/wayland/PKGBUILD new file mode 100644 index 0000000..0daeae9 --- /dev/null +++ b/x86_64/extra/wayland/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=wayland +pkgver=1.21.0 +pkgrel=1 +arch=('x86_64') +depends=('expat' 'glibc' 'libffi' 'libxml2') +makedepends=('docbook-xsl' 'docbook-xml' 'libxslt' 'meson' 'xmlto' 'wayland-protocols') +source=(https://gitlab.freedesktop.org/wayland/wayland/-/releases/$pkgver/downloads/$pkgname-$pkgver.tar.xz) +options=(!strip) + +build() { + cd $pkgname-$pkgver + + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + --buildtype=release \ + -D documentation=false \ + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/webkit2gtk/PKGBUILD b/x86_64/extra/webkit2gtk/PKGBUILD new file mode 100644 index 0000000..3d18e8a --- /dev/null +++ b/x86_64/extra/webkit2gtk/PKGBUILD @@ -0,0 +1,43 @@ +pkgname=webkit2gtk +pkgver=2.36.4 +pkgrel=1 +arch=('x86_64') +depends=(cairo gtk3+ icu libgudev libsecret libsoup libtasn1 libwebp mesa + openjpeg ruby3 sqlite3 which wpebackend-fdo gobject-introspection + hicolor-icon-theme libnotify gtk-doc harfbuzz wayland) +makedepends=(cmake) +source=(https://webkitgtk.org/releases/webkitgtk-$pkgver.tar.xz) + +prepare() { + mkdir -p build +} + +build() { + cd build + + cmake \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_SKIP_RPATH=ON \ + -D PORT=GTK \ + -D LIB_INSTALL_DIR=/usr/lib \ + -D USE_LIBHYPHEN=OFF \ + -D ENABLE_GLES2=ON \ + -D ENABLE_GAMEPAD=OFF \ + -D ENABLE_SPELLCHECK=OFF \ + -D ENABLE_MINIBROWSER=ON \ + -D GSTREAMER_ENABLE=ON \ + -D USE_WOFF2=OFF \ + -D USE_SOUP2=ON \ + -D USE_WPE_RENDERER=ON \ + -D ENABLE_BUBBLEWRAP_SANDBOX=OFF \ + -Wno-dev -G Ninja ../webkitgtk-$pkgver + + ninja +} + +package() { + cd build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/webrtc-audio-processing/PKGBUILD b/x86_64/extra/webrtc-audio-processing/PKGBUILD new file mode 100644 index 0000000..8d758b3 --- /dev/null +++ b/x86_64/extra/webrtc-audio-processing/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=webrtc-audio-processing +pkgver=1.1 +pkgrel=1 +arch=('x86_64') +depends=(gcc abseil-cpp) +makedepends=(git meson) +commitid=e31340c243f034e26e1e876f3f32fc842f5e5b5b +source=(https://gitlab.freedesktop.org/pulseaudio/webrtc-audio-processing/-/archive/$commitid/webrtc-audio-processing-$commitid.tar.gz) + +# Old one, FAILS +#source=(http://freedesktop.org/software/pulseaudio/webrtc-audio-processing/webrtc-audio-processing-$pkgver.tar.gz) + +prepare() { + cd $pkgname-$commitid + + mkdir -p build + +# sed -i 's!absl_flags_registry!absl_flags_reflection!g' meson.build +} + +build() { + cd $pkgname-$commitid + + meson \ + --prefix=/usr \ + -D cpp_std=c++17 \ + . \ + build + + ninja -C build +} + +package() { + cd $pkgname-$commitid + + DESTDIR=$pkgdir ninja -C build install +} diff --git a/x86_64/extra/weston/PKGBUILD b/x86_64/extra/weston/PKGBUILD new file mode 100644 index 0000000..1735365 --- /dev/null +++ b/x86_64/extra/weston/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=weston +pkgver=10.0.0 +pkgrel=1 +arch=('x86_64') +depends=(wayland libdrm cairo libpng pango glib2 mesa systemd dbus lcms libxcb libx11 libxcursor) +source=(https://wayland.freedesktop.org/releases/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + --buildtype=release \ + -D image-webp=false \ + -D backend-drm-screencast-vaapi=false \ + -D backend-rdp=false \ + -D color-management-colord=false \ + -D remoting=false \ + -D pipewire=false \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/wireless-tools/PKGBUILD b/x86_64/extra/wireless-tools/PKGBUILD new file mode 100644 index 0000000..03af3d0 --- /dev/null +++ b/x86_64/extra/wireless-tools/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=wireless-tools +rname=wireless_tools +pkgver=29 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +source=(https://hewlettpackard.github.io/wireless-tools/wireless_tools.$pkgver.tar.gz + wireless_tools-29-fix_iwlist_scanning-1.patch) + +prepare() { + cd $rname.$pkgver + + patch -Np1 -i ../wireless_tools-29-fix_iwlist_scanning-1.patch +} + +build() { + cd $rname.$pkgver + + make +} + +package() { + cd $rname.$pkgver + + make PREFIX=$pkgdir/usr INSTALL_MAN=$pkgdir/usr/share/man install +} diff --git a/x86_64/extra/wireless-tools/wireless_tools-29-fix_iwlist_scanning-1.patch b/x86_64/extra/wireless-tools/wireless_tools-29-fix_iwlist_scanning-1.patch new file mode 100644 index 0000000..474781e --- /dev/null +++ b/x86_64/extra/wireless-tools/wireless_tools-29-fix_iwlist_scanning-1.patch @@ -0,0 +1,32 @@ +Submitted By: Munir Contractor +Date: 2016-09-03 +Initial Package Version: 29 +Upstream Status: From Upstream +Origin: Arch Linux https://bugs.archlinux.org/task/15363 +Description: This patch fixes an issue where iwlist scan is not able to print the + wireless network names if there are too many networks due to buffer + allocation exceeding 65536. + + +diff -Naur wireless_tools.29.orig/iwlist.c wireless_tools.29/iwlist.c +--- wireless_tools.29.orig/iwlist.c 2007-06-30 01:11:09.000000000 +0000 ++++ wireless_tools.29/iwlist.c 2016-09-03 17:51:56.703353035 +0000 +@@ -799,7 +799,7 @@ + if(iw_get_ext(skfd, ifname, SIOCGIWSCAN, &wrq) < 0) + { + /* Check if buffer was too small (WE-17 only) */ +- if((errno == E2BIG) && (range.we_version_compiled > 16)) ++ if((errno == E2BIG) && (range.we_version_compiled > 16) && (buflen < 65535)) + { + /* Some driver may return very large scan results, either + * because there are many cells, or because they have many +@@ -815,6 +815,9 @@ + else + buflen *= 2; + ++ if(buflen > 65535) ++ buflen = 65535; ++ + /* Try again */ + goto realloc; + } diff --git a/x86_64/extra/wireplumber/PKGBUILD b/x86_64/extra/wireplumber/PKGBUILD new file mode 100644 index 0000000..b5e28ef --- /dev/null +++ b/x86_64/extra/wireplumber/PKGBUILD @@ -0,0 +1,33 @@ +pkgname=wireplumber +pkgver=0.4.11_master +pkgrel=1 +arch=(x86_64) +depends=(doxygen pipewire systemd glib2 lua gobject-introspection) +makedepends=(git meson python3-pip python3-sphinx) +install=wireplumber.install +commitid=b1b5bf2f5f001078daf058488ed7d02101cddcf9 +source=(git+https://gitlab.freedesktop.org/pipewire/$pkgname.git#commit=$commitid) + +prepare() { + mkdir -p build + cd build + + # Lets configure wireplumber here + meson ../$pkgname/ \ + --prefix=/usr \ + -D elogind=disabled \ + -D system-lua=true \ + -D doc=disabled +} + +build() { + cd build + + ninja +} + +package() { + cd build + + meson install --destdir $pkgdir +} diff --git a/x86_64/extra/wireplumber/wireplumber.install b/x86_64/extra/wireplumber/wireplumber.install new file mode 100644 index 0000000..f3ef4e5 --- /dev/null +++ b/x86_64/extra/wireplumber/wireplumber.install @@ -0,0 +1,7 @@ +post_install() { + systemctl --global enable wireplumber.service +} + +pre_remove() { + systemctl --global disable wireplumber.service +} diff --git a/x86_64/extra/woff2/PKGBUILD b/x86_64/extra/woff2/PKGBUILD new file mode 100644 index 0000000..137e6be --- /dev/null +++ b/x86_64/extra/woff2/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=woff2 +pkgver=1.0.2 +pkgrel=1 +arch=(x86_64) +depends=(brotli) +makedepends=(git cmake) +commitid=1bccf208bca986e53a647dfe4811322adb06ecf8 # v1.0.2 +source=("git+https://github.com/google/woff2#commit=$commitid") + +prepare() { + cd $pkgname + + # Install binaries + sed -i 's/NOT BUILD_SHARED_LIBS/TRUE/' CMakeLists.txt +} + +build() { + cmake -H$pkgname -Bbuild \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --build build --target install +} diff --git a/x86_64/extra/wpebackend-fdo/PKGBUILD b/x86_64/extra/wpebackend-fdo/PKGBUILD new file mode 100644 index 0000000..9923f54 --- /dev/null +++ b/x86_64/extra/wpebackend-fdo/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=wpebackend-fdo +pkgver=1.12.0 +pkgrel=1 +arch=('x86_64') +depends=(libepoxy libwpe wayland-protocols) +source=(https://wpewebkit.org/releases/wpebackend-fdo-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + meson \ + --prefix=/usr \ + --buildtype=release \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/extra/wxwidgets/PKGBUILD b/x86_64/extra/wxwidgets/PKGBUILD new file mode 100644 index 0000000..92aa90f --- /dev/null +++ b/x86_64/extra/wxwidgets/PKGBUILD @@ -0,0 +1,97 @@ +pkgname=wxwidgets +rname=wxWidgets # Typical upper case namings :/ +pkgver=3.0.5 +pkgrel=1 +arch=(x86_64) +depends=(gst-plugins-base glu webkit2gtk libnotify gtk2+ expat + libsm libxxf86vm libnotify libglvnd gtk3+ libtiff libpng libjpeg + libxpm sdl2 qt5 egl-wayland clang) +makedepends=() +source=(https://github.com/wxWidgets/wxWidgets/releases/download/v$pkgver/wxWidgets-$pkgver.tar.bz2) + +prepare() { + cp -rf $rname-$pkgver $rname-$pkgver-gtk2 + cp -rf $rname-$pkgver $rname-$pkgver-qt5 +} + +build() { + # GTK2 + cd $srcdir/$rname-$pkgver-gtk2 + echo "GTK2" + ./configure \ + --prefix=/usr \ + --with-gtk=2 \ + --with-opengl \ + --enable-unicode \ + --enable-graphics_ctx \ + --enable-mediactrl \ + --with-regex=builtin \ + --with-libpng=sys \ + --with-libxpm=sys \ + --with-libjpeg=sys \ + --enable-webview \ + --with-libtiff=sys \ + --disable-precomp-headers + + make -j6 + + # GTK3 + echo " " + echo "GTK3" + cd $srcdir/$rname-$pkgver + + ./configure \ + --prefix=/usr \ + --with-gtk=3 \ + --with-opengl \ + --enable-unicode \ + --enable-graphics_ctx \ + --enable-mediactrl \ + --with-regex=builtin \ + --with-libpng=sys \ + --with-libxpm=sys \ + --with-libjpeg=sys \ + --with-libtiff=sys \ + --with-sdl=sys \ + --with-libtiff=sys \ + --disable-precomp-headers + + make -j6 + + # QT5 + echo " " + echo "QT5" + cd $srcdir/$rname-$pkgver-qt5 + + ./configure \ + --prefix=/usr \ + --with-qt \ + --with-opengl \ + --enable-unicode \ + --enable-graphics_ctx \ + --enable-mediactrl \ + --with-regex=builtin \ + --with-libpng=sys \ + --with-libxpm=sys \ + --with-libjpeg=sys \ + --with-libtiff=sys \ + --with-sdl=sys \ + --with-libtiff=sys \ + --disable-precomp-headers + + make -j6 +} + +package() { + # GTK2 + cd $srcdir/$rname-$pkgver-gtk2 + make DESTDIR=$pkgdir install + + # QT5 + cd $srcdir/$rname-$pkgver-qt5 + make DESTDIR=$pkgdir install + + # GTK3 + cd $srcdir/$rname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xalan-c/PKGBUILD b/x86_64/extra/xalan-c/PKGBUILD new file mode 100644 index 0000000..3d3147f --- /dev/null +++ b/x86_64/extra/xalan-c/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=xalan-c +pkgver=1.12 +pkgrel=1 +arch=(x86_64) +depends=(xerces-c) +source=(https://downloads.apache.org/xalan/xalan-c/sources/xalan_c-$pkgver.tar.gz) + +build() { + mkdir -p xalan_c-$pkgver/build + + cd xalan_c-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + .. + + make +} + +package() { + cd xalan_c-$pkgver/build + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xarchiver/PKGBUILD b/x86_64/extra/xarchiver/PKGBUILD new file mode 100644 index 0000000..187beee --- /dev/null +++ b/x86_64/extra/xarchiver/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=xarchiver +pkgver=0.5.4.17 +pkgrel=2 +arch=('x86_64') +depends=(gtk+ cpio lzo p7zip unrar unzip zip xorg-server) +makedepends=(base-devel) +source=(https://github.com/ib/xarchiver/archive/$pkgver/$pkgname-$pkgver.tar.gz + xarchiver.appdata.xml) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --libexecdir=/usr/lib/xfce4 + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + install -Dm644 ../$pkgname.appdata.xml "$pkgdir/usr/share/metainfo/$pkgname.appdata.xml" +} diff --git a/x86_64/extra/xarchiver/xarchiver.appdata.xml b/x86_64/extra/xarchiver/xarchiver.appdata.xml new file mode 100644 index 0000000..4a398f9 --- /dev/null +++ b/x86_64/extra/xarchiver/xarchiver.appdata.xml @@ -0,0 +1,19 @@ + + + com.github.xarchiver + xarchiver.desktop + Xarchiver + A GTK+ only archive manager + CC0-1.0 + GPL-2.0 + +

Xarchiver is a lightweight desktop independent GTK+ frontend for manipulating xz, 7z, lzma, arj, bzip2, gzip, rar, tar, zip, rpm, lz4, compress, zstd, lzip, lrzip, lzop, lha and deb files. It allows you to create archives and add, extract, and delete files from them. Password protected archives in the arj, 7z, rar, zip and lrzip formats are supported.

+
+ + + http://xarchiver.sourceforge.net/screenshots/main_window.png + + + https://github.com/ib/xarchiver/issues + https://github.com/ib/xarchiver +
\ No newline at end of file diff --git a/x86_64/extra/xauth/PKGBUILD b/x86_64/extra/xauth/PKGBUILD new file mode 100644 index 0000000..6eb9f81 --- /dev/null +++ b/x86_64/extra/xauth/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=xauth +pkgver=1.1.1 +pkgrel=1 +arch=('x86_64') +depends=(libxmu) +source=(https://xorg.freedesktop.org/archive/individual/app/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xbacklight/PKGBUILD b/x86_64/extra/xbacklight/PKGBUILD new file mode 100644 index 0000000..9f74566 --- /dev/null +++ b/x86_64/extra/xbacklight/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=xbacklight +pkgver=1.2.3 +pkgrel=1 +arch=('x86_64') +depends=(xcb-util) +source=(https://xorg.freedesktop.org/archive/individual/app/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xcb-proto/PKGBUILD b/x86_64/extra/xcb-proto/PKGBUILD new file mode 100644 index 0000000..db0dc46 --- /dev/null +++ b/x86_64/extra/xcb-proto/PKGBUILD @@ -0,0 +1,16 @@ +pkgname=xcb-proto +pkgver=1.14.1 +pkgrel=1 +arch=('x86_64') +source=(https://xorg.freedesktop.org/archive/individual/proto/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + PYTHON=python3 ./configure --prefix=/usr +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xcb-util-cursor/PKGBUILD b/x86_64/extra/xcb-util-cursor/PKGBUILD new file mode 100644 index 0000000..7f713fe --- /dev/null +++ b/x86_64/extra/xcb-util-cursor/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=xcb-util-cursor +pkgver=0.1.3 +pkgrel=1 +arch=('x86_64') +depends=(libxcb xcb-util-image xcb-util-renderutil) +makedepends=(xorgproto) +source=(https://xcb.freedesktop.org/dist/${pkgname}-${pkgver}.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xcb-util-image/PKGBUILD b/x86_64/extra/xcb-util-image/PKGBUILD new file mode 100644 index 0000000..60b3f65 --- /dev/null +++ b/x86_64/extra/xcb-util-image/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=xcb-util-image +pkgver=0.4.0 +pkgrel=1 +arch=('x86_64') +depends=(libxcb xcb-util) +makedepends=(util-macros xorgproto) +source=(https://xcb.freedesktop.org/dist/${pkgname}-${pkgver}.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xcb-util-keysyms/PKGBUILD b/x86_64/extra/xcb-util-keysyms/PKGBUILD new file mode 100644 index 0000000..414b4e7 --- /dev/null +++ b/x86_64/extra/xcb-util-keysyms/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=xcb-util-keysyms +pkgver=0.4.0 +pkgrel=1 +arch=('x86_64') +depends=(libxcb) +makedepends=(util-macros xorgproto) +source=(https://xcb.freedesktop.org/dist/${pkgname}-${pkgver}.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xcb-util-renderutil/PKGBUILD b/x86_64/extra/xcb-util-renderutil/PKGBUILD new file mode 100644 index 0000000..5c81b57 --- /dev/null +++ b/x86_64/extra/xcb-util-renderutil/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=xcb-util-renderutil +pkgver=0.3.9 +pkgrel=1 +arch=('x86_64') +depends=(libxcb) +makedepends=(util-macros xorgproto) +source=(https://xcb.freedesktop.org/dist/${pkgname}-${pkgver}.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xcb-util-wm/PKGBUILD b/x86_64/extra/xcb-util-wm/PKGBUILD new file mode 100644 index 0000000..9394e6c --- /dev/null +++ b/x86_64/extra/xcb-util-wm/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=xcb-util-wm +pkgver=0.4.1 +pkgrel=1 +arch=('x86_64') +depends=(libxcb) +makedepends=(util-macros xorgproto) +source=(https://xcb.freedesktop.org/dist/${pkgname}-${pkgver}.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xcb-util-xrm/PKGBUILD b/x86_64/extra/xcb-util-xrm/PKGBUILD new file mode 100644 index 0000000..24d8660 --- /dev/null +++ b/x86_64/extra/xcb-util-xrm/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=xcb-util-xrm +pkgver=1.3 +pkgrel=1 +arch=('x86_64') +depends=(xcb-util) +makedepends=(util-macros libx11) +source=(https://github.com/Airblader/xcb-util-xrm/releases/download/v${pkgver}/xcb-util-xrm-${pkgver}.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xcb-util/PKGBUILD b/x86_64/extra/xcb-util/PKGBUILD new file mode 100644 index 0000000..da9f62b --- /dev/null +++ b/x86_64/extra/xcb-util/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=xcb-util +pkgver=0.4.0 +pkgrel=1 +arch=('x86_64') +depends=(libxcb) +makedepends=(doxygen) +source=(https://xcb.freedesktop.org/dist/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xdg-user-dirs/PKGBUILD b/x86_64/extra/xdg-user-dirs/PKGBUILD new file mode 100644 index 0000000..08fb47a --- /dev/null +++ b/x86_64/extra/xdg-user-dirs/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=xdg-user-dirs +pkgver=0.17 +pkgrel=1 +arch=('x86_64') +depends=(bash systemd) +makedepends=(docbook-xsl git) +commitid=(5defafb5702eb6edc247f52a67e58f0c4f598b42) +source=(git+https://gitlab.freedesktop.org/xdg/xdg-user-dirs.git#commit=$commitid) + +prepare() { + cd $pkgname + + NOCONFIGURE=1 ./autogen.sh +} + +build() { + cd $pkgname + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + + make +} + +package() { + cd $pkgname + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xdg-utils/PKGBUILD b/x86_64/extra/xdg-utils/PKGBUILD new file mode 100644 index 0000000..ba3e71e --- /dev/null +++ b/x86_64/extra/xdg-utils/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=xdg-utils +pkgver=1.1.3 +pkgrel=1 +arch=('x86_64') +depends=(xmlto dbus lynx links xorg-server) +source=(https://portland.freedesktop.org/download/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xdo/PKGBUILD b/x86_64/extra/xdo/PKGBUILD new file mode 100644 index 0000000..acfbd3e --- /dev/null +++ b/x86_64/extra/xdo/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=xdo +pkgver=0.5.7 +pkgrel=1 +arch=('x86_64') +depends=(libxcb xcb-util xcb-util-wm) +source=(https://github.com/baskerville/${pkgname}/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz) + +build() { + cd $pkgname-$pkgver + + make PREFIX=/usr +} + +package() { + cd $pkgname-$pkgver + + make PREFIX=/usr DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xerces-c/PKGBUILD b/x86_64/extra/xerces-c/PKGBUILD new file mode 100644 index 0000000..fc07e00 --- /dev/null +++ b/x86_64/extra/xerces-c/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=xerces-c +pkgver=3.2.3 +pkgrel=1 +arch=(x86_64) +depends=(curl libnsl) +source=(https://apache.osuosl.org/xerces/c/3/sources/${pkgname}-${pkgver}.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xf86-input-evdev/PKGBUILD b/x86_64/extra/xf86-input-evdev/PKGBUILD new file mode 100644 index 0000000..8e41ca6 --- /dev/null +++ b/x86_64/extra/xf86-input-evdev/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=xf86-input-evdev +pkgver=2.10.6 +pkgrel=4 +arch=('x86_64') +depends=(libevdev mtdev xorg-server) +source=(https://x.org/pub/individual/driver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + mkdir -p $pkgdir/etc/X11/xorg.conf.d +} diff --git a/x86_64/extra/xf86-input-libinput/PKGBUILD b/x86_64/extra/xf86-input-libinput/PKGBUILD new file mode 100644 index 0000000..1349742 --- /dev/null +++ b/x86_64/extra/xf86-input-libinput/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=xf86-input-libinput +pkgver=1.1.0 +pkgrel=5 +arch=('x86_64') +depends=(libevdev mtdev xorg-server libinput) +source=(https://x.org/pub/individual/driver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + mkdir -p $pkgdir/etc/X11/xorg.conf.d +} diff --git a/x86_64/extra/xf86-input-synaptics/PKGBUILD b/x86_64/extra/xf86-input-synaptics/PKGBUILD new file mode 100644 index 0000000..6ea3a0d --- /dev/null +++ b/x86_64/extra/xf86-input-synaptics/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=xf86-input-synaptics +pkgver=1.9.1 +pkgrel=4 +arch=('x86_64') +depends=(libevdev xorg-server) +source=(https://x.org/pub/individual/driver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + mkdir -p $pkgdir/etc/X11/xorg.conf.d +} diff --git a/x86_64/extra/xf86-input-wacom/PKGBUILD b/x86_64/extra/xf86-input-wacom/PKGBUILD new file mode 100644 index 0000000..5af0f82 --- /dev/null +++ b/x86_64/extra/xf86-input-wacom/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=xf86-input-wacom +pkgver=0.40.0 +pkgrel=4 +arch=('x86_64') +depends=(libevdev mtdev xorg-server libxinerama) +source=(https://github.com/linuxwacom/$pkgname/releases/download/$pkgname-$pkgver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + mkdir -p $pkgdir/etc/X11/xorg.conf.d +} diff --git a/x86_64/extra/xf86-video-amdgpu/PKGBUILD b/x86_64/extra/xf86-video-amdgpu/PKGBUILD new file mode 100644 index 0000000..37268a3 --- /dev/null +++ b/x86_64/extra/xf86-video-amdgpu/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=xf86-video-amdgpu +pkgver=21.0.0 +pkgrel=4 +arch=('x86_64') +depends=(xorg-server) +source=(https://x.org/pub/individual/driver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + mkdir -p $pkgdir/etc/X11/xorg.conf.d +} diff --git a/x86_64/extra/xf86-video-ati/PKGBUILD b/x86_64/extra/xf86-video-ati/PKGBUILD new file mode 100644 index 0000000..db30096 --- /dev/null +++ b/x86_64/extra/xf86-video-ati/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=xf86-video-ati +pkgver=19.1.0 +pkgrel=4 +arch=('x86_64') +depends=(xorg-server) +source=(https://x.org/pub/individual/driver/$pkgname-$pkgver.tar.bz2 + https://linuxfromscratch.org/patches/blfs/11.0/xf86-video-ati-19.1.0-upstream_fixes-1.patch) + +build() { + cd $pkgname-$pkgver + + patch -Np1 -i ../$pkgname-$pkgver-upstream_fixes-1.patch + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + mkdir -p $pkgdir/etc/X11/xorg.conf.d +} diff --git a/x86_64/extra/xf86-video-ati/xf86-video-ati-19.1.0-upstream_fixes-1.patch b/x86_64/extra/xf86-video-ati/xf86-video-ati-19.1.0-upstream_fixes-1.patch new file mode 100644 index 0000000..551b817 --- /dev/null +++ b/x86_64/extra/xf86-video-ati/xf86-video-ati-19.1.0-upstream_fixes-1.patch @@ -0,0 +1,464 @@ +Submitted By: Douglas R. Reno +Date: 2021-08-11 +Initial Package Version: 19.1.0 +Upstream Status: Applied +Origin: Upstream commits after 19.1.0 release. +Description: Fixes several performance regressions on some ATI + graphics cards. Also rolls the fix for compiling + with GCC-10 into the source tree, and adapts the + driver to build with the next minor version of + Xorg-Server (anything that uses master/slave terms + will fail to build). On a SysV machine with an ATI + card, this nets a 4x speed improvement, and the + capability of running GNOME and KDE Plasma without + problems. + +diff -Naurp xf86-video-ati-19.1.0.orig/man/radeon.man xf86-video-ati-19.1.0/man/radeon.man +--- xf86-video-ati-19.1.0.orig/man/radeon.man 2019-10-15 11:16:29.000000000 -0500 ++++ xf86-video-ati-19.1.0/man/radeon.man 2021-07-29 16:27:10.685285445 -0500 +@@ -290,7 +290,7 @@ on. If this option is set, the default v + accordingly. If this option isn't set, the default value of the property is + .B auto, + which means that TearFree is on for rotated outputs, outputs with RandR +-transforms applied and for RandR 1.4 slave outputs, otherwise off. ++transforms applied and for RandR 1.4 secondary outputs, otherwise off. + .TP + .BI "Option \*qAccelMethod\*q \*q" "string" \*q + Chooses between available acceleration architectures. Valid values are +diff -Naurp xf86-video-ati-19.1.0.orig/src/compat-api.h xf86-video-ati-19.1.0/src/compat-api.h +--- xf86-video-ati-19.1.0.orig/src/compat-api.h 2019-10-15 11:16:29.000000000 -0500 ++++ xf86-video-ati-19.1.0/src/compat-api.h 2021-07-29 16:27:49.721971221 -0500 +@@ -34,4 +34,10 @@ + #define BLOCKHANDLER_ARGS pScreen, pTimeout, pReadmask + #endif + ++#if ABI_VIDEODRV_VERSION < SET_ABI_VERSION(25, 2) ++#define current_primary current_master ++#define primary_pixmap master_pixmap ++#define secondary_dst slave_dst ++#endif ++ + #endif +diff -Naurp xf86-video-ati-19.1.0.orig/src/drmmode_display.c xf86-video-ati-19.1.0/src/drmmode_display.c +--- xf86-video-ati-19.1.0.orig/src/drmmode_display.c 2019-10-15 11:16:29.000000000 -0500 ++++ xf86-video-ati-19.1.0/src/drmmode_display.c 2021-07-29 16:40:03.226063398 -0500 +@@ -45,7 +45,9 @@ + #include "radeon_glamor.h" + #include "radeon_reg.h" + ++#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1,19,99,1,0) + #include ++#endif + + #include "drmmode_display.h" + +@@ -720,7 +722,7 @@ drmmode_crtc_prime_scanout_update(xf86Cr + xorg_list_for_each_entry(dirty, &screen->pixmap_dirty_list, + ent) { + if (radeon_dirty_src_equals(dirty, drmmode_crtc->prime_scanout_pixmap)) { +- dirty->slave_dst = ++ dirty->secondary_dst = + drmmode_crtc->scanout[scanout_id].pixmap; + break; + } +@@ -1275,7 +1277,7 @@ drmmode_show_cursor (xf86CrtcPtr crtc) + arg.hot_y = yhot; + + ret = drmIoctl(pRADEONEnt->fd, DRM_IOCTL_MODE_CURSOR2, &arg); +- if (ret == -EINVAL) ++ if (ret == -1 && errno == EINVAL) + use_set_cursor2 = FALSE; + else + return; +@@ -1356,7 +1358,7 @@ drmmode_set_scanout_pixmap(xf86CrtcPtr c + + xorg_list_for_each_entry(dirty, &screen->pixmap_dirty_list, ent) { + if (radeon_dirty_src_equals(dirty, drmmode_crtc->prime_scanout_pixmap)) { +- PixmapStopDirtyTracking(dirty->src, dirty->slave_dst); ++ PixmapStopDirtyTracking(dirty->src, dirty->secondary_dst); + break; + } + } +diff -Naurp xf86-video-ati-19.1.0.orig/src/drmmode_display.h xf86-video-ati-19.1.0/src/drmmode_display.h +--- xf86-video-ati-19.1.0.orig/src/drmmode_display.h 2019-10-15 11:16:29.000000000 -0500 ++++ xf86-video-ati-19.1.0/src/drmmode_display.h 2021-07-29 16:24:44.570461234 -0500 +@@ -262,7 +262,7 @@ Bool drmmode_wait_vblank(xf86CrtcPtr crt + uint64_t *ust, uint32_t *result_seq); + + +-miPointerSpriteFuncRec drmmode_sprite_funcs; ++extern miPointerSpriteFuncRec drmmode_sprite_funcs; + + + #endif +diff -Naurp xf86-video-ati-19.1.0.orig/src/evergreen_state.h xf86-video-ati-19.1.0/src/evergreen_state.h +--- xf86-video-ati-19.1.0.orig/src/evergreen_state.h 2019-10-15 11:16:29.000000000 -0500 ++++ xf86-video-ati-19.1.0/src/evergreen_state.h 2021-07-29 16:29:19.799246069 -0500 +@@ -350,7 +350,7 @@ extern void *RADEONEXACreatePixmap2(Scre + int *new_pitch); + extern void RADEONEXADestroyPixmap(ScreenPtr pScreen, void *driverPriv); + extern Bool RADEONEXAPixmapIsOffscreen(PixmapPtr pPix); +-extern Bool RADEONEXASharePixmapBacking(PixmapPtr ppix, ScreenPtr slave, void **handle_p); ++extern Bool RADEONEXASharePixmapBacking(PixmapPtr ppix, ScreenPtr secondary, void **handle_p); + extern Bool RADEONEXASetSharedPixmapBacking(PixmapPtr ppix, void *handle); + + #endif +diff -Naurp xf86-video-ati-19.1.0.orig/src/r600_state.h xf86-video-ati-19.1.0/src/r600_state.h +--- xf86-video-ati-19.1.0.orig/src/r600_state.h 2019-10-15 11:16:29.000000000 -0500 ++++ xf86-video-ati-19.1.0/src/r600_state.h 2021-07-29 16:29:36.132114565 -0500 +@@ -321,6 +321,6 @@ extern void *RADEONEXACreatePixmap2(Scre + int *new_pitch); + extern void RADEONEXADestroyPixmap(ScreenPtr pScreen, void *driverPriv); + extern Bool RADEONEXAPixmapIsOffscreen(PixmapPtr pPix); +-extern Bool RADEONEXASharePixmapBacking(PixmapPtr ppix, ScreenPtr slave, void **handle_p); ++extern Bool RADEONEXASharePixmapBacking(PixmapPtr ppix, ScreenPtr secondary, void **handle_p); + extern Bool RADEONEXASetSharedPixmapBacking(PixmapPtr ppix, void *handle); + #endif +diff -Naurp xf86-video-ati-19.1.0.orig/src/radeon_dri2.c xf86-video-ati-19.1.0/src/radeon_dri2.c +--- xf86-video-ati-19.1.0.orig/src/radeon_dri2.c 2019-10-15 11:16:29.000000000 -0500 ++++ xf86-video-ati-19.1.0/src/radeon_dri2.c 2021-07-29 16:45:41.467337925 -0500 +@@ -729,7 +729,9 @@ radeon_dri2_exchange_buffers(DrawablePtr + struct dri2_buffer_priv *front_priv = front->driverPrivate; + struct dri2_buffer_priv *back_priv = back->driverPrivate; + ScreenPtr screen = draw->pScreen; ++#ifdef USE_GLAMOR + RADEONInfoPtr info = RADEONPTR(xf86ScreenToScrn(screen)); ++#endif + RegionRec region; + int tmp; + +diff -Naurp xf86-video-ati-19.1.0.orig/src/radeon_exa.c xf86-video-ati-19.1.0/src/radeon_exa.c +--- xf86-video-ati-19.1.0.orig/src/radeon_exa.c 2019-10-15 11:16:29.000000000 -0500 ++++ xf86-video-ati-19.1.0/src/radeon_exa.c 2021-07-29 16:30:48.280533631 -0500 +@@ -282,7 +282,7 @@ void RADEONEXADestroyPixmap(ScreenPtr pS + free(driverPriv); + } + +-Bool RADEONEXASharePixmapBacking(PixmapPtr ppix, ScreenPtr slave, void **fd_handle) ++Bool RADEONEXASharePixmapBacking(PixmapPtr ppix, ScreenPtr secondary, void **fd_handle) + { + struct radeon_exa_pixmap_priv *driver_priv = exaGetPixmapDriverPrivate(ppix); + +diff -Naurp xf86-video-ati-19.1.0.orig/src/radeon_glamor.c xf86-video-ati-19.1.0/src/radeon_glamor.c +--- xf86-video-ati-19.1.0.orig/src/radeon_glamor.c 2019-10-15 11:16:29.000000000 -0500 ++++ xf86-video-ati-19.1.0/src/radeon_glamor.c 2021-07-29 16:31:05.112398098 -0500 +@@ -366,7 +366,7 @@ radeon_glamor_set_pixmap_bo(DrawablePtr + + + static Bool +-radeon_glamor_share_pixmap_backing(PixmapPtr pixmap, ScreenPtr slave, ++radeon_glamor_share_pixmap_backing(PixmapPtr pixmap, ScreenPtr secondary, + void **handle_p) + { + ScreenPtr screen = pixmap->drawable.pScreen; +diff -Naurp xf86-video-ati-19.1.0.orig/src/radeon.h xf86-video-ati-19.1.0/src/radeon.h +--- xf86-video-ati-19.1.0.orig/src/radeon.h 2019-10-15 11:16:29.000000000 -0500 ++++ xf86-video-ati-19.1.0/src/radeon.h 2021-07-29 16:30:34.626643574 -0500 +@@ -182,18 +182,18 @@ typedef enum { + + + static inline ScreenPtr +-radeon_master_screen(ScreenPtr screen) ++radeon_primary_screen(ScreenPtr screen) + { +- if (screen->current_master) +- return screen->current_master; ++ if (screen->current_primary) ++ return screen->current_primary; + + return screen; + } + + static inline ScreenPtr +-radeon_dirty_master(PixmapDirtyUpdatePtr dirty) ++radeon_dirty_primary(PixmapDirtyUpdatePtr dirty) + { +- return radeon_master_screen(dirty->slave_dst->drawable.pScreen); ++ return radeon_primary_screen(dirty->secondary_dst->drawable.pScreen); + } + + static inline DrawablePtr +@@ -790,19 +790,18 @@ static inline Bool radeon_set_pixmap_bo( + + static inline struct radeon_buffer *radeon_get_pixmap_bo(PixmapPtr pPix) + { +-#ifdef USE_GLAMOR + RADEONInfoPtr info = RADEONPTR(xf86ScreenToScrn(pPix->drawable.pScreen)); +- ++#ifdef USE_GLAMOR + if (info->use_glamor) { + struct radeon_pixmap *priv; + priv = radeon_get_pixmap_private(pPix); + return priv ? priv->bo : NULL; + } else + #endif +- { +- struct radeon_exa_pixmap_priv *driver_priv; +- driver_priv = exaGetPixmapDriverPrivate(pPix); +- return driver_priv ? driver_priv->bo : NULL; ++ if (info->accelOn) { ++ struct radeon_exa_pixmap_priv *driver_priv; ++ driver_priv = exaGetPixmapDriverPrivate(pPix); ++ return driver_priv ? driver_priv->bo : NULL; + } + + return NULL; +@@ -896,7 +895,7 @@ radeon_pixmap_get_fb(PixmapPtr pix) + handle); + } + +- return *fb_ptr; ++ return fb_ptr ? *fb_ptr : NULL; + } + + +diff -Naurp xf86-video-ati-19.1.0.orig/src/radeon_kms.c xf86-video-ati-19.1.0/src/radeon_kms.c +--- xf86-video-ati-19.1.0.orig/src/radeon_kms.c 2019-10-15 11:16:29.000000000 -0500 ++++ xf86-video-ati-19.1.0/src/radeon_kms.c 2021-07-29 16:37:14.531422523 -0500 +@@ -559,8 +559,8 @@ dirty_region(PixmapDirtyUpdatePtr dirty) + if (dirty->rotation != RR_Rotate_0) { + dstregion = transform_region(damageregion, + &dirty->f_inverse, +- dirty->slave_dst->drawable.width, +- dirty->slave_dst->drawable.height); ++ dirty->secondary_dst->drawable.width, ++ dirty->secondary_dst->drawable.height); + } else + #endif + { +@@ -568,7 +568,7 @@ dirty_region(PixmapDirtyUpdatePtr dirty) + + dstregion = RegionDuplicate(damageregion); + RegionTranslate(dstregion, -dirty->x, -dirty->y); +- PixmapRegionInit(&pixregion, dirty->slave_dst); ++ PixmapRegionInit(&pixregion, dirty->secondary_dst); + RegionIntersect(dstregion, dstregion, &pixregion); + RegionUninit(&pixregion); + } +@@ -585,8 +585,8 @@ redisplay_dirty(PixmapDirtyUpdatePtr dir + if (RegionNil(region)) + goto out; + +- if (dirty->slave_dst->master_pixmap) +- DamageRegionAppend(&dirty->slave_dst->drawable, region); ++ if (dirty->secondary_dst->primary_pixmap) ++ DamageRegionAppend(&dirty->secondary_dst->drawable, region); + + #ifdef HAS_DIRTYTRACKING_ROTATION + PixmapSyncDirtyHelper(dirty); +@@ -595,8 +595,8 @@ redisplay_dirty(PixmapDirtyUpdatePtr dir + #endif + + radeon_cs_flush_indirect(src_scrn); +- if (dirty->slave_dst->master_pixmap) +- DamageRegionProcessPending(&dirty->slave_dst->drawable); ++ if (dirty->secondary_dst->primary_pixmap) ++ DamageRegionProcessPending(&dirty->secondary_dst->drawable); + + out: + DamageEmpty(dirty->damage); +@@ -613,12 +613,12 @@ radeon_prime_scanout_update_abort(xf86Cr + void + radeon_sync_shared_pixmap(PixmapDirtyUpdatePtr dirty) + { +- ScreenPtr master_screen = radeon_dirty_master(dirty); ++ ScreenPtr primary_screen = radeon_dirty_primary(dirty); + PixmapDirtyUpdatePtr ent; + RegionPtr region; + +- xorg_list_for_each_entry(ent, &master_screen->pixmap_dirty_list, ent) { +- if (!radeon_dirty_src_equals(dirty, ent->slave_dst)) ++ xorg_list_for_each_entry(ent, &primary_screen->pixmap_dirty_list, ent) { ++ if (!radeon_dirty_src_equals(dirty, ent->secondary_dst)) + continue; + + region = dirty_region(ent); +@@ -631,45 +631,45 @@ radeon_sync_shared_pixmap(PixmapDirtyUpd + #if HAS_SYNC_SHARED_PIXMAP + + static Bool +-master_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty) ++primary_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty) + { +- ScreenPtr master_screen = radeon_dirty_master(dirty); ++ ScreenPtr primary_screen = radeon_dirty_primary(dirty); + +- return !!master_screen->SyncSharedPixmap; ++ return !!primary_screen->SyncSharedPixmap; + } + + static Bool +-slave_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty) ++secondary_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty) + { +- ScreenPtr slave_screen = dirty->slave_dst->drawable.pScreen; ++ ScreenPtr secondary_screen = dirty->secondary_dst->drawable.pScreen; + +- return !!slave_screen->SyncSharedPixmap; ++ return !!secondary_screen->SyncSharedPixmap; + } + + static void + call_sync_shared_pixmap(PixmapDirtyUpdatePtr dirty) + { +- ScreenPtr master_screen = radeon_dirty_master(dirty); ++ ScreenPtr primary_screen = radeon_dirty_primary(dirty); + +- master_screen->SyncSharedPixmap(dirty); ++ primary_screen->SyncSharedPixmap(dirty); + } + + #else /* !HAS_SYNC_SHARED_PIXMAP */ + + static Bool +-master_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty) ++primary_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty) + { +- ScrnInfoPtr master_scrn = xf86ScreenToScrn(radeon_dirty_master(dirty)); ++ ScrnInfoPtr primary_scrn = xf86ScreenToScrn(radeon_dirty_primary(dirty)); + +- return master_scrn->driverName == scrn->driverName; ++ return primary_scrn->driverName == scrn->driverName; + } + + static Bool +-slave_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty) ++secondary_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty) + { +- ScrnInfoPtr slave_scrn = xf86ScreenToScrn(dirty->slave_dst->drawable.pScreen); ++ ScrnInfoPtr secondary_scrn = xf86ScreenToScrn(dirty->secondary_dst->drawable.pScreen); + +- return slave_scrn->driverName == scrn->driverName; ++ return secondary_scrn->driverName == scrn->driverName; + } + + static void +@@ -684,12 +684,12 @@ call_sync_shared_pixmap(PixmapDirtyUpdat + static xf86CrtcPtr + radeon_prime_dirty_to_crtc(PixmapDirtyUpdatePtr dirty) + { +- ScreenPtr screen = dirty->slave_dst->drawable.pScreen; ++ ScreenPtr screen = dirty->secondary_dst->drawable.pScreen; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); + int c; + +- /* Find the CRTC which is scanning out from this slave pixmap */ ++ /* Find the CRTC which is scanning out from this secondary pixmap */ + for (c = 0; c < xf86_config->num_crtc; c++) { + xf86CrtcPtr xf86_crtc = xf86_config->crtc[c]; + drmmode_crtc_private_ptr drmmode_crtc = xf86_crtc->driver_private; +@@ -714,7 +714,7 @@ radeon_prime_scanout_do_update(xf86CrtcP + if (radeon_dirty_src_equals(dirty, drmmode_crtc->prime_scanout_pixmap)) { + RegionPtr region; + +- if (master_has_sync_shared_pixmap(scrn, dirty)) ++ if (primary_has_sync_shared_pixmap(scrn, dirty)) + call_sync_shared_pixmap(dirty); + + region = dirty_region(dirty); +@@ -727,7 +727,7 @@ radeon_prime_scanout_do_update(xf86CrtcP + radeon_cs_flush_indirect(scrn); + RegionCopy(&drmmode_crtc->scanout_last_region, region); + RegionTranslate(region, -crtc->x, -crtc->y); +- dirty->slave_dst = drmmode_crtc->scanout[scanout_id].pixmap; ++ dirty->secondary_dst = drmmode_crtc->scanout[scanout_id].pixmap; + } + + redisplay_dirty(dirty, region); +@@ -754,7 +754,7 @@ radeon_prime_scanout_update_handler(xf86 + static void + radeon_prime_scanout_update(PixmapDirtyUpdatePtr dirty) + { +- ScreenPtr screen = dirty->slave_dst->drawable.pScreen; ++ ScreenPtr screen = dirty->secondary_dst->drawable.pScreen; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn); + xf86CrtcPtr xf86_crtc = radeon_prime_dirty_to_crtc(dirty); +@@ -818,7 +818,7 @@ radeon_prime_scanout_update(PixmapDirtyU + static void + radeon_prime_scanout_flip(PixmapDirtyUpdatePtr ent) + { +- ScreenPtr screen = ent->slave_dst->drawable.pScreen; ++ ScreenPtr screen = ent->secondary_dst->drawable.pScreen; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn); + xf86CrtcPtr crtc = radeon_prime_dirty_to_crtc(ent); +@@ -893,11 +893,11 @@ radeon_dirty_update(ScrnInfoPtr scrn) + if (screen->isGPU) { + PixmapDirtyUpdatePtr region_ent = ent; + +- if (master_has_sync_shared_pixmap(scrn, ent)) { +- ScreenPtr master_screen = radeon_dirty_master(ent); ++ if (primary_has_sync_shared_pixmap(scrn, ent)) { ++ ScreenPtr primary_screen = radeon_dirty_primary(ent); + +- xorg_list_for_each_entry(region_ent, &master_screen->pixmap_dirty_list, ent) { +- if (radeon_dirty_src_equals(ent, region_ent->slave_dst)) ++ xorg_list_for_each_entry(region_ent, &primary_screen->pixmap_dirty_list, ent) { ++ if (radeon_dirty_src_equals(ent, region_ent->secondary_dst)) + break; + } + } +@@ -921,7 +921,7 @@ radeon_dirty_update(ScrnInfoPtr scrn) + + RegionDestroy(region); + } else { +- if (slave_has_sync_shared_pixmap(scrn, ent)) ++ if (secondary_has_sync_shared_pixmap(scrn, ent)) + continue; + + region = dirty_region(ent); +@@ -1216,7 +1216,7 @@ static void RADEONBlockHandler_KMS(BLOCK + (*pScreen->BlockHandler) (BLOCKHANDLER_ARGS); + pScreen->BlockHandler = RADEONBlockHandler_KMS; + +- if (!xf86ScreenToScrn(radeon_master_screen(pScreen))->vtSema) ++ if (!xf86ScreenToScrn(radeon_primary_screen(pScreen))->vtSema) + return; + + if (!pScreen->isGPU) +@@ -2584,7 +2584,7 @@ CARD32 cleanup_black_fb(OsTimerPtr timer + xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); + int c; + +- if (xf86ScreenToScrn(radeon_master_screen(screen))->vtSema) ++ if (xf86ScreenToScrn(radeon_primary_screen(screen))->vtSema) + return 0; + + /* Unreference the all-black FB created by RADEONLeaveVT_KMS. After +diff -Naurp xf86-video-ati-19.1.0.orig/src/radeon_present.c xf86-video-ati-19.1.0/src/radeon_present.c +--- xf86-video-ati-19.1.0.orig/src/radeon_present.c 2019-10-15 11:16:29.000000000 -0500 ++++ xf86-video-ati-19.1.0/src/radeon_present.c 2021-07-29 16:38:30.019814341 -0500 +@@ -254,7 +254,9 @@ radeon_present_check_flip(RRCrtcPtr crtc + xf86CrtcPtr xf86_crtc = crtc->devPrivate; + ScreenPtr screen = window->drawable.pScreen; + ScrnInfoPtr scrn = xf86_crtc->scrn; ++#ifdef USE_GLAMOR + struct radeon_pixmap *priv = radeon_get_pixmap_private(pixmap); ++#endif + xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn); + RADEONInfoPtr info = RADEONPTR(scrn); + PixmapPtr screen_pixmap = screen->GetScreenPixmap(screen); +@@ -278,10 +280,13 @@ radeon_present_check_flip(RRCrtcPtr crtc + return FALSE; + #endif + ++#ifdef USE_GLAMOR + if (priv && priv->fb_failed) + return FALSE; ++#endif + + if (!radeon_pixmap_get_fb(pixmap)) { ++#ifdef USE_GLAMOR + if (!priv) + priv = radeon_get_pixmap_private(pixmap); + +@@ -291,6 +296,7 @@ radeon_present_check_flip(RRCrtcPtr crtc + "normal if using PRIME render offloading)\n"); + priv->fb_failed = TRUE; + } ++#endif + + return FALSE; + } diff --git a/x86_64/extra/xf86-video-fbdev/PKGBUILD b/x86_64/extra/xf86-video-fbdev/PKGBUILD new file mode 100644 index 0000000..cacde8f --- /dev/null +++ b/x86_64/extra/xf86-video-fbdev/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=xf86-video-fbdev +pkgver=0.5.0 +pkgrel=4 +arch=('x86_64') +depends=(xorg-server libxxf86vm) +makedepends=(clang) +source=(https://x.org/pub/individual/driver/$pkgname-$pkgver.tar.bz2 + gcc8.diff) + +prepare() { + cd $pkgname-$pkgver + + patch -Np0 -i ../gcc8.diff +} + +build() { + cd $pkgname-$pkgver + + CC=clang CXX=clang+ ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + mkdir -p $pkgdir/etc/X11/xorg.conf.d +} diff --git a/x86_64/extra/xf86-video-fbdev/gcc8.diff b/x86_64/extra/xf86-video-fbdev/gcc8.diff new file mode 100644 index 0000000..87b592a --- /dev/null +++ b/x86_64/extra/xf86-video-fbdev/gcc8.diff @@ -0,0 +1,11 @@ +--- src/fbdev.c 2018-05-11 21:15:36.650039778 +0200 ++++ src/fbdev.c.new 2018-05-11 21:17:27.063021717 +0200 +@@ -1008,7 +1008,7 @@ + fPtr->CloseScreen = pScreen->CloseScreen; + pScreen->CloseScreen = FBDevCloseScreen; + +-#if XV ++#ifdef XV + { + XF86VideoAdaptorPtr *ptr; + diff --git a/x86_64/extra/xf86-video-intel/PKGBUILD b/x86_64/extra/xf86-video-intel/PKGBUILD new file mode 100644 index 0000000..3cb9ba1 --- /dev/null +++ b/x86_64/extra/xf86-video-intel/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=xf86-video-intel +pkgver=master +pkgrel=4 +arch=('x86_64') +depends=(xorg-server xcb-util libxinerama) +source=(git+https://anongit.freedesktop.org/git/xorg/driver/xf86-video-intel.git) + +build() { + cd $pkgname + + ./autogen.sh + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname + make DESTDIR=$pkgdir install + mkdir -p $pkgdir/etc/X11/xorg.conf.d +} diff --git a/x86_64/extra/xf86-video-nouveau/PKGBUILD b/x86_64/extra/xf86-video-nouveau/PKGBUILD new file mode 100644 index 0000000..c179f9e --- /dev/null +++ b/x86_64/extra/xf86-video-nouveau/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=xf86-video-nouveau +pkgver=1.0.17 +pkgrel=4 +arch=('x86_64') +depends=(xorg-server mesa) +source=(https://x.org/pub/individual/driver/$pkgname-$pkgver.tar.bz2 + xorg-server-21.1.diff) + +prepare() { + cd $pkgname-$pkgver + + patch -Np1 -i ../xorg-server-21.1.diff +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install + mkdir -p $pkgdir/etc/X11/xorg.conf.d +} diff --git a/x86_64/extra/xf86-video-nouveau/xorg-server-21.1.diff b/x86_64/extra/xf86-video-nouveau/xorg-server-21.1.diff new file mode 100644 index 0000000..03d0b80 --- /dev/null +++ b/x86_64/extra/xf86-video-nouveau/xorg-server-21.1.diff @@ -0,0 +1,50 @@ +diff --git a/src/compat-api.h b/src/compat-api.h +index fde2f4b1cfde75875c07bfe13524dc6ba2661382..8a1fcf9be1c5d1ceb48a50f2ed533d93ec7ff4c7 100644 +--- a/src/compat-api.h ++++ b/src/compat-api.h +@@ -102,4 +102,8 @@ + + #endif + ++#if ABI_VIDEODRV_VERSION < SET_ABI_VERSION(25, 2) ++#define secondary_dst slave_dst ++#endif ++ + #endif +diff --git a/src/nouveau_exa.c b/src/nouveau_exa.c +index 55df6f8f11c9e14b1891e5c841faef10c17f0a35..db3b112a2db70f8e902e54aa3af99e51e7d0c6f7 100644 +--- a/src/nouveau_exa.c ++++ b/src/nouveau_exa.c +@@ -157,7 +157,7 @@ nouveau_exa_destroy_pixmap(ScreenPtr pScreen, void *priv) + + #ifdef NOUVEAU_PIXMAP_SHARING + static Bool +-nouveau_exa_share_pixmap_backing(PixmapPtr ppix, ScreenPtr slave, void **handle_p) ++nouveau_exa_share_pixmap_backing(PixmapPtr ppix, ScreenPtr secondary, void **handle_p) + { + struct nouveau_bo *bo = nouveau_pixmap_bo(ppix); + struct nouveau_pixmap *nvpix = nouveau_pixmap(ppix); +diff --git a/src/nv_driver.c b/src/nv_driver.c +index e72a6b65a81119f12f3608295a4547762a866ad7..f9ab4af19361d99d74f580d1ff3f28d49843e8b0 100644 +--- a/src/nv_driver.c ++++ b/src/nv_driver.c +@@ -559,16 +559,16 @@ redisplay_dirty(ScreenPtr screen, PixmapDirtyUpdatePtr dirty) + { + RegionRec pixregion; + +- PixmapRegionInit(&pixregion, dirty->slave_dst); ++ PixmapRegionInit(&pixregion, dirty->secondary_dst); + +- DamageRegionAppend(&dirty->slave_dst->drawable, &pixregion); ++ DamageRegionAppend(&dirty->secondary_dst->drawable, &pixregion); + #ifdef HAS_DIRTYTRACKING_ROTATION + PixmapSyncDirtyHelper(dirty); + #else + PixmapSyncDirtyHelper(dirty, &pixregion); + #endif + +- DamageRegionProcessPending(&dirty->slave_dst->drawable); ++ DamageRegionProcessPending(&dirty->secondary_dst->drawable); + RegionUninit(&pixregion); + } + diff --git a/x86_64/extra/xf86-video-qxl/PKGBUILD b/x86_64/extra/xf86-video-qxl/PKGBUILD new file mode 100644 index 0000000..1d301a0 --- /dev/null +++ b/x86_64/extra/xf86-video-qxl/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=xf86-video-qxl +pkgver=0.1.5 +pkgrel=1 +arch=('x86_64') +depends=(xorg-server libxfont2 systemd) +makedepends=(spice-protocol xorgproto libcacard git) +commitid=52e975263fe88105d151297768c7ac675ed94122 +source=(git+https://gitlab.freedesktop.org/xorg/driver/xf86-video-qxl.git#commit=$commitid) + +prepare() { + cd $pkgname + + autoreconf -fvi +} + +build() { + cd $pkgname + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xf86-video-vboxvideo/PKGBUILD b/x86_64/extra/xf86-video-vboxvideo/PKGBUILD new file mode 100644 index 0000000..69361e9 --- /dev/null +++ b/x86_64/extra/xf86-video-vboxvideo/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=xf86-video-vboxvideo +pkgver=1.0.0 +pkgrel=4 +arch=('x86_64') +depends=(xorg-server) +source=(https://x.org/pub/individual/driver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xf86-video-vesa/PKGBUILD b/x86_64/extra/xf86-video-vesa/PKGBUILD new file mode 100644 index 0000000..a98fe41 --- /dev/null +++ b/x86_64/extra/xf86-video-vesa/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=xf86-video-vesa +pkgver=2.5.0 +pkgrel=4 +arch=('x86_64') +depends=(xorg-server) +source=(https://x.org/pub/individual/driver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xf86-video-vmware/PKGBUILD b/x86_64/extra/xf86-video-vmware/PKGBUILD new file mode 100644 index 0000000..08288ea --- /dev/null +++ b/x86_64/extra/xf86-video-vmware/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=xf86-video-vmware +pkgver=13.3.0 +pkgrel=4 +arch=('x86_64') +depends=(xorg-server) +source=(https://x.org/pub/individual/driver/$pkgname-$pkgver.tar.bz2 + gcc8.diff) + +prepare() { + cd $pkgname-$pkgver + + patch -Np0 -i ../gcc8.diff +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-vmwarectrl-client + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xf86-video-vmware/gcc8.diff b/x86_64/extra/xf86-video-vmware/gcc8.diff new file mode 100644 index 0000000..f9ee9b0 --- /dev/null +++ b/x86_64/extra/xf86-video-vmware/gcc8.diff @@ -0,0 +1,157 @@ +--- src/vmware.h 2018-05-11 17:43:24.776710047 +0200 ++++ src/vmware.h.new 2018-05-11 17:45:16.599821536 +0200 +@@ -83,7 +83,7 @@ + + typedef struct { + EntityInfoPtr pEnt; +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + struct pci_device *PciInfo; + #else + pciVideoPtr PciInfo; +@@ -207,7 +207,7 @@ + /* Undefine this to kill all acceleration */ + #define ACCELERATE_OPS + +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + #define VENDOR_ID(p) (p)->vendor_id + #define DEVICE_ID(p) (p)->device_id + #define SUBVENDOR_ID(p) (p)->subvendor_id +--- src/vmware.c 2018-05-11 17:28:30.612158774 +0200 ++++ src/vmware.c.new 2018-05-11 17:38:40.108785284 +0200 +@@ -341,7 +341,7 @@ + SVGA_LEGACY_BASE_PORT + SVGA_VALUE_PORT*sizeof(uint32); + } else { + /* Note: This setting of valueReg causes unaligned I/O */ +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + pVMWARE->portIOBase = pVMWARE->PciInfo->regions[0].base_addr; + #else + pVMWARE->portIOBase = pVMWARE->PciInfo->ioBase[0]; +@@ -383,7 +383,7 @@ + } + pVMWARE->suspensionSavedRegId = id; + +-#if !XSERVER_LIBPCIACCESS ++#ifndef XSERVER_LIBPCIACCESS + pVMWARE->PciTag = pciTag(pVMWARE->PciInfo->bus, pVMWARE->PciInfo->device, + pVMWARE->PciInfo->func); + #endif +@@ -727,13 +727,13 @@ + VMWAREMapMem(ScrnInfoPtr pScrn) + { + VMWAREPtr pVMWARE = VMWAREPTR(pScrn); +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + int err; + struct pci_device *const device = pVMWARE->PciInfo; + void *fbBase; + #endif + +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + err = pci_device_map_range(device, + pVMWARE->memPhysBase, + pVMWARE->videoRam, +@@ -770,7 +770,7 @@ + + VmwareLog(("Unmapped: %p/%u\n", pVMWARE->FbBase, pVMWARE->videoRam)); + +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + pci_device_unmap_range(pVMWARE->PciInfo, pVMWARE->FbBase, pVMWARE->videoRam); + #else + xf86UnMapVidMem(pScrn->scrnIndex, pVMWARE->FbBase, pVMWARE->videoRam); +@@ -1045,7 +1045,7 @@ + VMWAREInitFIFO(ScrnInfoPtr pScrn) + { + VMWAREPtr pVMWARE = VMWAREPTR(pScrn); +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + struct pci_device *const device = pVMWARE->PciInfo; + int err; + void *mmioVirtBase; +@@ -1058,7 +1058,7 @@ + + pVMWARE->mmioPhysBase = vmwareReadReg(pVMWARE, SVGA_REG_MEM_START); + pVMWARE->mmioSize = vmwareReadReg(pVMWARE, SVGA_REG_MEM_SIZE) & ~3; +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + err = pci_device_map_range(device, pVMWARE->mmioPhysBase, + pVMWARE->mmioSize, + PCI_DEV_MAP_FLAG_WRITABLE, +@@ -1099,7 +1099,7 @@ + TRACEPOINT + + vmwareWriteReg(pVMWARE, SVGA_REG_CONFIG_DONE, 0); +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + pci_device_unmap_range(pVMWARE->PciInfo, pVMWARE->mmioVirtBase, pVMWARE->mmioSize); + #else + xf86UnMapVidMem(pScrn->scrnIndex, pVMWARE->mmioVirtBase, pVMWARE->mmioSize); +--- src/vmware_bootstrap.c 2018-05-11 20:59:15.003530525 +0200 ++++ src/vmware_bootstrap.c.new 2018-05-11 21:02:11.228289137 +0200 +@@ -91,7 +91,7 @@ + VMW_STRING(PACKAGE_VERSION_MAJOR) "." VMW_STRING(PACKAGE_VERSION_MINOR) \ + "." VMW_STRING(PACKAGE_VERSION_PATCHLEVEL) + +-#if !XSERVER_LIBPCIACCESS ++#ifndef XSERVER_LIBPCIACCESS + static const char VMWAREBuildStr[] = "VMware Guest X Server " + VMWARE_DRIVER_VERSION_STRING " - build=$Name$\n"; + #else +@@ -127,7 +127,7 @@ + #define vmwareLegacyRes NULL + #endif + +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + #define VENDOR_ID(p) (p)->vendor_id + #define DEVICE_ID(p) (p)->device_id + #define SUBVENDOR_ID(p) (p)->subvendor_id +@@ -141,7 +141,7 @@ + #define CHIP_REVISION(p) (p)->chipRev + #endif + +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + + #define VMWARE_DEVICE_MATCH(d, i) \ + {PCI_VENDOR_ID_VMWARE, (d), PCI_MATCH_ANY, PCI_MATCH_ANY, 0, 0, (i) } +@@ -220,7 +220,7 @@ + static Bool + VMwarePreinitStub(ScrnInfoPtr pScrn, int flags) + { +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + struct pci_device *pciInfo; + #else + pciVideoPtr pciInfo; +@@ -270,7 +270,7 @@ + return (*pScrn->PreInit)(pScrn, flags); + }; + +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + static Bool + VMwarePciProbe (DriverPtr drv, + int entity_num, +@@ -520,7 +520,7 @@ + VMWARE_DRIVER_VERSION, + vmware_driver_name, + VMWAREIdentify, +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + NULL, + #else + VMWAREProbe, +@@ -532,7 +532,7 @@ + VMWareDriverFunc, + #endif + #if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) >= 4 +-#if XSERVER_LIBPCIACCESS ++#ifdef XSERVER_LIBPCIACCESS + VMwareDeviceMatch, + VMwarePciProbe, + #else diff --git a/x86_64/extra/xinit/PKGBUILD b/x86_64/extra/xinit/PKGBUILD new file mode 100644 index 0000000..1a12f97 --- /dev/null +++ b/x86_64/extra/xinit/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=xinit +pkgver=1.4.1 +pkgrel=2 +arch=('x86_64') +depends=('libxau' 'xcb-proto' 'libxtrans' 'xorgproto') +source=(https://x.org/releases/individual/app/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xinput/PKGBUILD b/x86_64/extra/xinput/PKGBUILD new file mode 100644 index 0000000..4e5ee88 --- /dev/null +++ b/x86_64/extra/xinput/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=xinput +pkgver=1.6.3 +pkgrel=1 +arch=(x86_64) +depends=(libx11 libxi xrandr libxinerama) +makedepends=(util-macros xorgproto libxfixes) +source=(https://xorg.freedesktop.org/archive/individual/app/$pkgname-$pkgver.tar.bz2) + +prepare() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr +} + +build() { + cd $pkgname-$pkgver + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xkeyboard-config/PKGBUILD b/x86_64/extra/xkeyboard-config/PKGBUILD new file mode 100644 index 0000000..2742262 --- /dev/null +++ b/x86_64/extra/xkeyboard-config/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=xkeyboard-config +pkgver=2.33 +pkgrel=1 +arch=('x86_64') +depends=(fontconfig libxcb) +source=(https://x.org/pub/individual/data/$pkgname/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --with-xkb-rules-symlink=xorg + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xmessage/PKGBUILD b/x86_64/extra/xmessage/PKGBUILD new file mode 100644 index 0000000..77d1616 --- /dev/null +++ b/x86_64/extra/xmessage/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=xmessage +pkgver=1.0.5 +pkgrel=1 +arch=('x86_64') +depends=(libxaw) +makedepends=(util-macros) +source=(https://xorg.freedesktop.org/archive/individual/app/xmessage-${pkgver}.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xml-security-c/PKGBUILD b/x86_64/extra/xml-security-c/PKGBUILD new file mode 100644 index 0000000..7736dcd --- /dev/null +++ b/x86_64/extra/xml-security-c/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=xml-security-c +pkgver=2.0.4 +pkgrel=1 +arch=('x86_64') +depends=('libxslt' 'openssl' 'gnutls' 'nss' 'libtool') +source=(https://dlcdn.apache.org/santuario/c-library/${pkgname}-${pkgver}.tar.gz) + +build() { + cd ${pkgname}-${pkgver} + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd ${pkgname}-${pkgver} + + make DESTDIR="${pkgdir}" install +} diff --git a/x86_64/extra/xml-simple/PKGBUILD b/x86_64/extra/xml-simple/PKGBUILD new file mode 100644 index 0000000..ad61e12 --- /dev/null +++ b/x86_64/extra/xml-simple/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=xml-simple +pkgver=2.25 +pkgrel=1 +arch=('x86_64') +source=(https://cpan.org/authors/id/G/GR/GRANTM/XML-Simple-$pkgver.tar.gz) + +build() { + cd XML-Simple-$pkgver + + perl Makefile.PL + + make +} + +package() { + cd XML-Simple-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xmlsec/PKGBUILD b/x86_64/extra/xmlsec/PKGBUILD new file mode 100644 index 0000000..40645a8 --- /dev/null +++ b/x86_64/extra/xmlsec/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=xmlsec +pkgver=1.2.34 +pkgrel=1 +arch=('x86_64') +depends=('libxslt' 'openssl' 'gnutls' 'nss' 'libtool') +source=(https://www.aleksey.com/xmlsec/download/${pkgname}1-${pkgver}.tar.gz) + +build() { + cd ${pkgname}1-${pkgver} + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd ${pkgname}1-${pkgver} + + make DESTDIR="${pkgdir}" install +} diff --git a/x86_64/extra/xmlto/PKGBUILD b/x86_64/extra/xmlto/PKGBUILD new file mode 100644 index 0000000..bb76073 --- /dev/null +++ b/x86_64/extra/xmlto/PKGBUILD @@ -0,0 +1,17 @@ +pkgname=xmlto +pkgver=0.0.28 +pkgrel=1 +arch=('x86_64') +depends=(docbook-xml docbook-xsl libxslt) +source=(https://releases.pagure.org/$pkgname/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + ./configure --prefix=/usr --libdir=/usr/lib + make +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xorg-server/764.diff b/x86_64/extra/xorg-server/764.diff new file mode 100644 index 0000000..a5e92ec --- /dev/null +++ b/x86_64/extra/xorg-server/764.diff @@ -0,0 +1,49 @@ +diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c +index 05fa2bb902896390eadd5578329495e741e54830..53ddae432a33442f6c6cab5003d13f425f547f97 100644 +--- a/hw/xfree86/common/xf86Events.c ++++ b/hw/xfree86/common/xf86Events.c +@@ -485,6 +485,7 @@ xf86VTEnter(void) + xf86UpdateHasVTProperty(TRUE); + + input_unlock(); ++ XkbPushLockedStateToAll(); + } + + /* +diff --git a/include/xkbsrv.h b/include/xkbsrv.h +index fbb5427e1ca20f73a7cfe2a32ef06671d503a5dd..69c9580ef703ce91e5aad51e0666efcbb248724c 100644 +--- a/include/xkbsrv.h ++++ b/include/xkbsrv.h +@@ -655,6 +655,9 @@ extern void XkbPushLockedStateToSlaves(DeviceIntPtr /* master */, + int /* evtype */, + int /* key */); + ++extern void XkbPushLockedStateToAll(void ++ ); ++ + extern _X_EXPORT Bool XkbEnableDisableControls(XkbSrvInfoPtr /* xkbi */ , + unsigned long /* change */ , + unsigned long /* newValues */ , +diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c +index db29091e7e4abd563cac045dc953d9c99652fb04..c0a9464abd06da37809eb0182e65cc7a8f6303f6 100644 +--- a/xkb/xkbActions.c ++++ b/xkb/xkbActions.c +@@ -1239,6 +1239,18 @@ XkbPushLockedStateToSlaves(DeviceIntPtr master, int evtype, int key) + } + } + ++void ++XkbPushLockedStateToAll(void) ++{ ++ DeviceIntPtr dev; ++ Bool genStateNotify; ++ ++ nt_list_for_each_entry(dev, inputInfo.devices, next) { ++ if (dev->kbdfeed) ++ (*dev->kbdfeed->CtrlProc) (dev, &dev->kbdfeed->ctrl); ++ } ++} ++ + static void + XkbActionGetFilter(DeviceIntPtr dev, DeviceEvent *event, KeyCode key, + XkbAction *act, int *sendEvent) diff --git a/x86_64/extra/xorg-server/786.diff b/x86_64/extra/xorg-server/786.diff new file mode 100644 index 0000000..61981c9 --- /dev/null +++ b/x86_64/extra/xorg-server/786.diff @@ -0,0 +1,26 @@ +diff --git a/randr/rrpointer.c b/randr/rrpointer.c +index b301d050dcf3a7dfba99de5f86900f3d64c3ae7b..ba31af4f55fb8b2b67143899f064084a39760024 100644 +--- a/randr/rrpointer.c ++++ b/randr/rrpointer.c +@@ -60,6 +60,7 @@ RRPointerToNearestCrtc(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y, + RRCrtcPtr nearest = NULL; + int best = 0; + int best_dx = 0, best_dy = 0; ++ int best_crtc_width = 0, best_crtc_height = 0; + + for (c = 0; c < pScrPriv->numCrtcs; c++) { + RRCrtcPtr crtc = pScrPriv->crtcs[c]; +@@ -93,10 +94,12 @@ RRPointerToNearestCrtc(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y, + best_dx = dx; + best_dy = dy; + best = dist; ++ best_crtc_width = scan_width; ++ best_crtc_height = scan_height; + } + } + if (best_dx || best_dy) +- (*pScreen->SetCursorPosition) (pDev, pScreen, x + best_dx, y + best_dy, ++ (*pScreen->SetCursorPosition) (pDev, pScreen, best_crtc_width / 2, best_crtc_height / 2, + TRUE); + pScrPriv->pointerCrtc = nearest; + } diff --git a/x86_64/extra/xorg-server/789.diff b/x86_64/extra/xorg-server/789.diff new file mode 100644 index 0000000..77ee478 --- /dev/null +++ b/x86_64/extra/xorg-server/789.diff @@ -0,0 +1,22 @@ +diff --git a/include/meson.build b/include/meson.build +index 6f52a7aead3556f79307f5d3f6f3f8d47bba8e2b..2f3f3ba0da6aea375c41e67fcd34a177a27bf5d3 100644 +--- a/include/meson.build ++++ b/include/meson.build +@@ -129,17 +129,12 @@ conf_data.set('SECURE_RPC', get_option('secure-rpc') ? '1' : false) + + conf_data.set('HAVE_DLFCN_H', cc.has_header('dlfcn.h') ? '1' : false) + conf_data.set('HAVE_EXECINFO_H', cc.has_header('execinfo.h') ? '1' : false) +-conf_data.set('HAVE_FCNTL_H', cc.has_header('fcntl.h') ? '1' : false) + conf_data.set('HAVE_FNMATCH_H', cc.has_header('fnmatch.h') ? '1' : false) + conf_data.set('HAVE_LINUX_AGPGART_H', cc.has_header('linux/agpgart.h') ? '1' : false) +-conf_data.set('HAVE_STDLIB_H', cc.has_header('stdlib.h') ? '1' : false) +-conf_data.set('HAVE_STRING_H', cc.has_header('string.h') ? '1' : false) + conf_data.set('HAVE_STRINGS_H', cc.has_header('strings.h') ? '1' : false) + conf_data.set('HAVE_SYS_AGPGART_H', cc.has_header('sys/agpgart.h') ? '1' : false) +-conf_data.set('HAVE_SYS_AGPIO_H', cc.has_header('sys/agpio.h') ? '1' : false) + conf_data.set('HAVE_SYS_UTSNAME_H', cc.has_header('sys/utsname.h') ? '1' : false) + conf_data.set('HAVE_SYS_SYSMACROS_H', cc.has_header('sys/sysmacros.h') ? '1' : false) +-conf_data.set('HAVE_UNISTD_H', cc.has_header('unistd.h') ? '1' : false) + + conf_data.set('HAVE_ARC4RANDOM_BUF', cc.has_function('arc4random_buf', dependencies: libbsd_dep) ? '1' : false) + conf_data.set('HAVE_BACKTRACE', cc.has_function('backtrace') ? '1' : false) diff --git a/x86_64/extra/xorg-server/836.diff b/x86_64/extra/xorg-server/836.diff new file mode 100644 index 0000000..22a89dc --- /dev/null +++ b/x86_64/extra/xorg-server/836.diff @@ -0,0 +1,81 @@ +diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c +index 0389945a7cf0e18545cbe101639b62cd01f1e276..505b43814e9c298787f30bb243f021549415e5c1 100644 +--- a/hw/xfree86/common/xf86Helper.c ++++ b/hw/xfree86/common/xf86Helper.c +@@ -1154,12 +1154,12 @@ xf86LogInit(void) + if (xf86LogFileFrom == X_DEFAULT) { + /* When not running as root, we won't be able to write to /var/log */ + if (geteuid() != 0) { +- if ((env = getenv("XDG_DATA_HOME"))) ++ if ((env = getenv("XDG_STATE_HOME"))) + snprintf(buf, sizeof(buf), "%s/%s", env, +- DEFAULT_XDG_DATA_HOME_LOGDIR); ++ DEFAULT_XDG_STATE_HOME_LOGDIR); + else if ((env = getenv("HOME"))) + snprintf(buf, sizeof(buf), "%s/%s/%s", env, +- DEFAULT_XDG_DATA_HOME, DEFAULT_XDG_DATA_HOME_LOGDIR); ++ DEFAULT_XDG_STATE_HOME, DEFAULT_XDG_STATE_HOME_LOGDIR); + + if (env) { + xf86_mkdir_p(buf); +diff --git a/hw/xfree86/man/Xorg.man b/hw/xfree86/man/Xorg.man +index 3ec6e2c25d16628d0648734ea8957c2b5c158285..d9fbd161a6259deeaeb17a6bc0ac1a69e1c4d7c5 100644 +--- a/hw/xfree86/man/Xorg.man ++++ b/hw/xfree86/man/Xorg.man +@@ -251,7 +251,7 @@ as the + server log file. The default log file when running as root is + .BI @logdir@/Xorg. n .log + and for non root it is +-.BI $XDG_DATA_HOME/xorg/Xorg. n .log ++.BI $XDG_STATE_HOME/xorg/Xorg. n .log + where + .I n + is the display number of the +diff --git a/hw/xfree86/man/xorg.conf.man b/hw/xfree86/man/xorg.conf.man +index ac88d7e7acab4e74ec9383ad080a5e6331e3b14a..c68d02765d76ffbbdf6a69a3568e1f53daf81bd1 100644 +--- a/hw/xfree86/man/xorg.conf.man ++++ b/hw/xfree86/man/xorg.conf.man +@@ -450,7 +450,7 @@ The default log file name when running as root is + .RE + and for non root it is + .RS 11 +-.RI $XDG_DATA_HOME/xorg/Xorg. .log ++.RI $XDG_STATE_HOME/xorg/Xorg. .log + .RE + .PP + .RS 7 +diff --git a/include/meson.build b/include/meson.build +index 309a5d5b0848ad14ddb580c82e6b13d1c46ae808..5f9cd640a992cf5ce97e07968efc97b51b4b2412 100644 +--- a/include/meson.build ++++ b/include/meson.build +@@ -362,8 +362,8 @@ xorg_data.set('XORG_VERSION_CURRENT', release) + xorg_data.set_quoted('XF86CONFIGFILE', 'xorg.conf') + xorg_data.set_quoted('XCONFIGFILE', 'xorg.conf') + xorg_data.set_quoted('XCONFIGDIR', 'xorg.conf.d') +-xorg_data.set_quoted('DEFAULT_XDG_DATA_HOME', '.local/share') +-xorg_data.set_quoted('DEFAULT_XDG_DATA_HOME_LOGDIR', 'xorg') ++xorg_data.set_quoted('DEFAULT_XDG_STATE_HOME', '.local/state') ++xorg_data.set_quoted('DEFAULT_XDG_STATE_HOME_LOGDIR', 'xorg') + xorg_data.set_quoted('DEFAULT_LOGDIR', log_dir) + xorg_data.set_quoted('DEFAULT_LOGPREFIX', 'Xorg.') + xorg_data.set_quoted('DEFAULT_MODULE_PATH', join_paths(get_option('prefix'), module_dir)) +diff --git a/include/xorg-config.h.meson.in b/include/xorg-config.h.meson.in +index 59f1c2a8d29991d13cb6670697236f1069d88e4f..3347eaf583129a281315bd26cdb0d8cdd47a7ccd 100644 +--- a/include/xorg-config.h.meson.in ++++ b/include/xorg-config.h.meson.in +@@ -51,11 +51,11 @@ + /* Default logfile prefix */ + #mesondefine DEFAULT_LOGPREFIX + +-/* Default XDG_DATA dir under HOME */ +-#mesondefine DEFAULT_XDG_DATA_HOME ++/* Default XDG_STATE dir under HOME */ ++#mesondefine DEFAULT_XDG_STATE_HOME + +-/* Default log dir under XDG_DATA_HOME */ +-#mesondefine DEFAULT_XDG_DATA_HOME_LOGDIR ++/* Default log dir under XDG_STATE_HOME */ ++#mesondefine DEFAULT_XDG_STATE_HOME_LOGDIR + + /* Building DRI-capable DDX. */ + #mesondefine XF86DRI diff --git a/x86_64/extra/xorg-server/839.diff b/x86_64/extra/xorg-server/839.diff new file mode 100644 index 0000000..f2487cb --- /dev/null +++ b/x86_64/extra/xorg-server/839.diff @@ -0,0 +1,46 @@ +diff --git a/hw/kdrive/ephyr/ephyrinit.c b/hw/kdrive/ephyr/ephyrinit.c +index 020461db238ea1991ba06a05942a7023f6e9ab62..09cd28cb34f1d5bfe3e7d602acffb3068be4c253 100644 +--- a/hw/kdrive/ephyr/ephyrinit.c ++++ b/hw/kdrive/ephyr/ephyrinit.c +@@ -70,25 +70,23 @@ InitInput(int argc, char **argv) + KdKeyboardInfo *ki; + KdPointerInfo *pi; + +- if (!SeatId) { +- KdAddKeyboardDriver(&EphyrKeyboardDriver); +- KdAddPointerDriver(&EphyrMouseDriver); +- +- if (!kdHasKbd) { +- ki = KdNewKeyboard(); +- if (!ki) +- FatalError("Couldn't create Xephyr keyboard\n"); +- ki->driver = &EphyrKeyboardDriver; +- KdAddKeyboard(ki); +- } ++ KdAddKeyboardDriver(&EphyrKeyboardDriver); ++ KdAddPointerDriver(&EphyrMouseDriver); ++ ++ if (!kdHasKbd) { ++ ki = KdNewKeyboard(); ++ if (!ki) ++ FatalError("Couldn't create Xephyr keyboard\n"); ++ ki->driver = &EphyrKeyboardDriver; ++ KdAddKeyboard(ki); ++ } + +- if (!kdHasPointer) { +- pi = KdNewPointer(); +- if (!pi) +- FatalError("Couldn't create Xephyr pointer\n"); +- pi->driver = &EphyrMouseDriver; +- KdAddPointer(pi); +- } ++ if (!kdHasPointer) { ++ pi = KdNewPointer(); ++ if (!pi) ++ FatalError("Couldn't create Xephyr pointer\n"); ++ pi->driver = &EphyrMouseDriver; ++ KdAddPointer(pi); + } + + KdInitInput(); diff --git a/x86_64/extra/xorg-server/PKGBUILD b/x86_64/extra/xorg-server/PKGBUILD new file mode 100644 index 0000000..39cdeaf --- /dev/null +++ b/x86_64/extra/xorg-server/PKGBUILD @@ -0,0 +1,81 @@ +pkgname=xorg-server +pkgver=21.1.3 +pkgrel=6 +arch=('x86_64') +depends=(libmd pixman libx11 mesa libxtrans libxkbfile + libxfont2 libpciaccess libxv libxcvt libxmu libxrender + libxi libxaw libxtst libxres xorg-xkbcomp util-macros xmessage + font-util libepoxy xcb-util xcb-util-image xcb-util-renderutil + xcb-util-wm xcb-util-keysyms libxshmfence libunwind systemd libbsd) +makedepends=(xorgproto pixman libx11 mesa libxtrans libxkbfile + libxfont2 libpciaccess libxv libxcvt libxmu libxrender + libxi libxaw libxtst libxres xorg-xkbcomp util-macros + font-util libepoxy xcb-util xcb-util-image xcb-util-renderutil + xcb-util-wm xcb-util-keysyms libxshmfence libunwind systemd meson git) +source=(https://x.org/archive/individual/xserver/$pkgname-$pkgver.tar.xz + xvfb-run + 764.diff + 786.diff + 789.diff + 836.diff + 839.diff + render-gcc12.patch) + +prepare() { + cd $pkgname-$pkgver + + # Patch all diff's that havce been chosen from MR + + echo "[!]: Pathing 764" + patch -Np1 -i ../764.diff + + echo "[!]: Pathing 786" + patch -Np1 -i ../786.diff + + echo "[!]: Pathing 789" + patch -Np1 -i ../789.diff + + echo "[!]: Pathing 836" + patch -Np1 -i ../836.diff + + echo "[!]: Pathing 839" + patch -Np1 -i ../839.diff + + echo "[!]: Patching render-gcc12.patch" + patch -Np1 -i ../render-gcc12.patch +} + +build() { + cd $pkgname-$pkgver + + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + -D ipv6=true \ + -D xvfb=true \ + -D xnest=true \ + -D xcsecurity=true \ + -D xorg=true \ + -D xephyr=true \ + -D glamor=true \ + -D udev=true \ + -D dtrace=false \ + -D systemd_logind=true \ + -D suid_wrapper=true \ + -D xkb_dir=/usr/share/X11/xkb \ + -D xkb_output_dir=/var/lib/xkb \ + .. + + meson configure . > configuration + + ninja +} + +package() { + cd $pkgname-$pkgver/build + DESTDIR=$pkgdir ninja install + mkdir -p $pkgdir/etc/X11/xorg.conf.d + + install -m755 "${srcdir}/xvfb-run" "${pkgdir}/usr/bin/" +} diff --git a/x86_64/extra/xorg-server/render-gcc12.patch b/x86_64/extra/xorg-server/render-gcc12.patch new file mode 100644 index 0000000..9af1e79 --- /dev/null +++ b/x86_64/extra/xorg-server/render-gcc12.patch @@ -0,0 +1,40 @@ +diff --git a/render/picture.c b/render/picture.c +index afa0d258fa2014c144dc99107a762cf012916d65..2be4b1954f7fc6647c1e2819a9421ddc87c7d562 100644 +--- a/render/picture.c ++++ b/render/picture.c +@@ -865,7 +865,7 @@ CreateSolidPicture(Picture pid, xRenderColor * color, int *error) + } + + pPicture->id = pid; +- pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(PictSolidFill)); ++ pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(SourcePict)); + if (!pPicture->pSourcePict) { + *error = BadAlloc; + free(pPicture); +@@ -896,7 +896,7 @@ CreateLinearGradientPicture(Picture pid, xPointFixed * p1, xPointFixed * p2, + } + + pPicture->id = pid; +- pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(PictLinearGradient)); ++ pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(SourcePict)); + if (!pPicture->pSourcePict) { + *error = BadAlloc; + free(pPicture); +@@ -936,7 +936,7 @@ CreateRadialGradientPicture(Picture pid, xPointFixed * inner, + } + + pPicture->id = pid; +- pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(PictRadialGradient)); ++ pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(SourcePict)); + if (!pPicture->pSourcePict) { + *error = BadAlloc; + free(pPicture); +@@ -979,7 +979,7 @@ CreateConicalGradientPicture(Picture pid, xPointFixed * center, xFixed angle, + } + + pPicture->id = pid; +- pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(PictConicalGradient)); ++ pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(SourcePict)); + if (!pPicture->pSourcePict) { + *error = BadAlloc; + free(pPicture); diff --git a/x86_64/extra/xorg-server/xvfb-run b/x86_64/extra/xorg-server/xvfb-run new file mode 100644 index 0000000..1aa6c2d --- /dev/null +++ b/x86_64/extra/xorg-server/xvfb-run @@ -0,0 +1,198 @@ +#!/bin/sh +# --- T2-COPYRIGHT-NOTE-BEGIN --- +# This copyright note is auto-generated by ./scripts/Create-CopyPatch. +# +# T2 SDE: package/.../xorg-server/xvfb-run.sh +# Copyright (C) 2005 The T2 SDE Project +# Copyright (C) XXXX - 2005 Debian +# +# More information can be found in the files COPYING and README. +# +# 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; version 2 of the License. A copy of the +# GNU General Public License can be found in the file COPYING. +# --- T2-COPYRIGHT-NOTE-END --- + +# $Id$ +# from: http://necrotic.deadbeast.net/xsf/XFree86/trunk/debian/local/xvfb-run + +# This script starts an instance of Xvfb, the "fake" X server, runs a command +# with that server available, and kills the X server when done. The return +# value of the command becomes the return value of this script. +# +# If anyone is using this to build a Debian package, make sure the package +# Build-Depends on xvfb, xbase-clients, and xfonts-base. + +set -e + +PROGNAME=xvfb-run +SERVERNUM=99 +AUTHFILE= +ERRORFILE=/dev/null +STARTWAIT=3 +XVFBARGS="-screen 0 640x480x24" +LISTENTCP="-nolisten tcp" +XAUTHPROTO=. + +# Query the terminal to establish a default number of columns to use for +# displaying messages to the user. This is used only as a fallback in the event +# the COLUMNS variable is not set. ($COLUMNS can react to SIGWINCH while the +# script is running, and this cannot, only being calculated once.) +DEFCOLUMNS=$(stty size 2>/dev/null | awk '{print $2}') || true +if ! expr "$DEFCOLUMNS" : "[[:digit:]]\+$" >/dev/null 2>&1; then + DEFCOLUMNS=80 +fi + +# Display a message, wrapping lines at the terminal width. +message () { + echo "$PROGNAME: $*" | fmt -t -w ${COLUMNS:-$DEFCOLUMNS} +} + +# Display an error message. +error () { + message "error: $*" >&2 +} + +# Display a usage message. +usage () { + if [ -n "$*" ]; then + message "usage error: $*" + fi + cat <&2 + exit 2 +fi + +if ! type xauth >/dev/null; then + error "xauth command not found" + exit 3 +fi + +# Set up the temp dir for the pid and X authorization file +XVFB_RUN_TMPDIR="$(mktemp --directory --tmpdir $PROGNAME.XXXXXX)" +# If the user did not specify an X authorization file to use, set up a temporary +# directory to house one. +if [ -z "$AUTHFILE" ]; then + AUTHFILE=$(mktemp -p "$XVFB_RUN_TMPDIR" Xauthority.XXXXXX) +fi + +# Start Xvfb. +MCOOKIE=$(mcookie) + +if [ -z "$AUTO_DISPLAY" ]; then + # Old style using a pre-computed SERVERNUM + XAUTHORITY=$AUTHFILE Xvfb ":$SERVERNUM" $XVFBARGS $LISTENTCP >>"$ERRORFILE" \ + 2>&1 & + XVFBPID=$! +else + # New style using Xvfb to provide a free display + PIDFILE=$(mktemp -p "$XVFB_RUN_TMPDIR" pid.XXXXXX) + SERVERNUM=$(XAUTHORITY=$AUTHFILE Xvfb -displayfd 1 $XVFBARGS $LISTENTCP \ + 2>"$ERRORFILE" & echo $! > $PIDFILE) + XVFBPID=$(cat $PIDFILE) +fi +sleep "$STARTWAIT" + +XAUTHORITY=$AUTHFILE xauth source - << EOF >>"$ERRORFILE" 2>&1 +add :$SERVERNUM $XAUTHPROTO $MCOOKIE +EOF + +# Start the command and save its exit status. +set +e +DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" +RETVAL=$? +set -e + +# Kill Xvfb now that the command has exited. +kill $XVFBPID + +# Clean up. +XAUTHORITY=$AUTHFILE xauth remove ":$SERVERNUM" >"$ERRORFILE" 2>&1 +if [ -n "$XVFB_RUN_TMPDIR" ]; then + if ! rm -r "$XVFB_RUN_TMPDIR"; then + error "problem while cleaning up temporary directory" + exit 5 + fi +fi + +# Return the executed command's exit status. +exit $RETVAL diff --git a/x86_64/extra/xorg-xdpyinfo/PKGBUILD b/x86_64/extra/xorg-xdpyinfo/PKGBUILD new file mode 100644 index 0000000..f27af69 --- /dev/null +++ b/x86_64/extra/xorg-xdpyinfo/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=xorg-xdpyinfo +pkgver=1.3.2 +pkgrel=1 +arch=(x86_64) +depends=('libx11' 'libxext' 'libxtst' 'libxxf86vm' 'libxrender' 'libxcomposite' 'libxinerama') +makedepends=('util-macros' 'xorgproto') +source=(https://xorg.freedesktop.org/archive/individual/app/xdpyinfo-${pkgver}.tar.bz2) + +build() { + cd xdpyinfo-${pkgver} + + ./configure --prefix=/usr + + make +} + +package() { + cd xdpyinfo-${pkgver} + + make DESTDIR="${pkgdir}" install +} diff --git a/x86_64/extra/xorg-xkbcomp/PKGBUILD b/x86_64/extra/xorg-xkbcomp/PKGBUILD new file mode 100644 index 0000000..15abf2f --- /dev/null +++ b/x86_64/extra/xorg-xkbcomp/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=xorg-xkbcomp +pkgver=1.4.5 +pkgrel=2 +arch=('x86_64') +depends=(fontconfig libxcb libxkbfile) +source=(https://xorg.freedesktop.org/archive/individual/app/xkbcomp-$pkgver.tar.bz2) + +build() { + cd xkbcomp-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd xkbcomp-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xorgproto/PKGBUILD b/x86_64/extra/xorgproto/PKGBUILD new file mode 100644 index 0000000..d6249b2 --- /dev/null +++ b/x86_64/extra/xorgproto/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=xorgproto +pkgver=2021.5 +pkgrel=4 +arch=('x86_64') +makedepends=('util-macros' 'meson') +source=(https://xorg.freedesktop.org/archive/individual/proto/$pkgname-$pkgver.tar.bz2) + +prepare() { + cd $pkgname-$pkgver + mkdir -p build +} + +build() { + cd $pkgname-$pkgver + cd build + + meson --prefix=/usr .. + ninja +} + +package() { + cd $pkgname-$pkgver/build + DESTDIR=$pkgdir ninja install + + rm -f $pkgdir/usr/include/X11/extensions/XKBgeom.h + rm -f $pkgdir/usr/include/X11/extensions/apple* + rm -f $pkgdir/usr/share/licenses/$pkgname/COPYING-{apple,windows}wmproto + rm -f $pkgdir/usr/share/pkgconfig/applewmproto.pc +} diff --git a/x86_64/extra/xrandr/PKGBUILD b/x86_64/extra/xrandr/PKGBUILD new file mode 100644 index 0000000..372f18d --- /dev/null +++ b/x86_64/extra/xrandr/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=xrandr +pkgver=1.5.1 +pkgrel=1 +arch=('x86_64') +depends=('libxrandr' 'libx11') +makedepends=('util-macros' 'xorg-server') +source=(https://xorg.freedesktop.org/releases/individual/app/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --sysconfdir=/etc +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xrdb/PKGBUILD b/x86_64/extra/xrdb/PKGBUILD new file mode 100644 index 0000000..4a2760e --- /dev/null +++ b/x86_64/extra/xrdb/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=xrdb +pkgver=master +pkgrel=1 +arch=('x86_64') +depends=(libx11) +source=(git+https://gitlab.freedesktop.org/xorg/app/$pkgname.git) + +build() { + cd $pkgname + + ./autogen.sh + + ./configure --prefix=/usr + make +} + +package() { + cd $pkgname + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/xrdb/t.save b/x86_64/extra/xrdb/t.save new file mode 100644 index 0000000..5aec45c --- /dev/null +++ b/x86_64/extra/xrdb/t.save @@ -0,0 +1,17 @@ + -> ksystemstats + -> libqalculate + -> kde-cli-tools + -> appstream-qt + -> xorg-xrdb + -> xorg-xsetroot + -> kactivitymanagerd + -> xorg-xmessage + -> milou + -> kwin + -> plasma-integration + -> libkscreen + -> kuserfeedback + -> kio-extras + -> kio-fuse + +gpsd diff --git a/x86_64/extra/xsd/PKGBUILD b/x86_64/extra/xsd/PKGBUILD new file mode 100644 index 0000000..a03b3d1 --- /dev/null +++ b/x86_64/extra/xsd/PKGBUILD @@ -0,0 +1,32 @@ +pkgname=xsd +pkgver=4.0.0 +_pkgver=4.0.0+dep +pkgrel=1 +arch=('x86_64') +depends=('xerces-c') +source=("https://www.codesynthesis.com/download/${pkgname}/4.0/${pkgname}-${_pkgver}.tar.bz2" + "xsdcxx.patch" + "elements.patch") + +prepare() { + cd ${pkgname}-${_pkgver} + + patch -p1 -i "${srcdir}/xsdcxx.patch" + patch -p0 -i "${srcdir}/elements.patch" +} + +build() { + cd ${pkgname}-${_pkgver} + + make CXXFLAGS=" -w -std=c++11 ${CXXFLAGS}" +} + +package() { + cd ${pkgname}-${_pkgver} + + make install_prefix="${pkgdir}/usr" install + + # Fix conflicts with mono + mv "${pkgdir}"/usr/bin/xsd{,cxx} + mv "${pkgdir}"/usr/share/man/man1/xsd{,cxx}.1 +} diff --git a/x86_64/extra/xsd/elements.patch b/x86_64/extra/xsd/elements.patch new file mode 100644 index 0000000..7bbe99a --- /dev/null +++ b/x86_64/extra/xsd/elements.patch @@ -0,0 +1,10 @@ +--- libxsd-frontend/xsd-frontend/semantic-graph/elements.cxx 2014-07-16 11:14:03.000000000 +0300 ++++ libxsd-frontend/xsd-frontend/semantic-graph/elements.cxx.new 2022-05-15 22:29:50.918917946 +0300 +@@ -3,6 +3,7 @@ + // license : GNU GPL v2 + exceptions; see accompanying LICENSE file + + #include ++#include + + #include + diff --git a/x86_64/extra/xsd/xsdcxx.patch b/x86_64/extra/xsd/xsdcxx.patch new file mode 100644 index 0000000..88a893c --- /dev/null +++ b/x86_64/extra/xsd/xsdcxx.patch @@ -0,0 +1,126 @@ +--- xsd-4.0.0+dep/xsd/doc/xsd.1~ 2014-09-14 12:25:36.862267587 +0000 ++++ xsd-4.0.0+dep/xsd/doc/xsd.1 2014-09-14 12:28:25.728229892 +0000 +@@ -1,16 +1,16 @@ + .\" Process this file with +-.\" groff -man -Tascii xsd.1 ++.\" groff -man -Tascii xsdcxx.1 + .\" + .TH XSD 1 "July 2014" "XSD 4.0.0" + .SH NAME +-xsd \- W3C XML Schema to C++ Compiler ++xsdcxx \- W3C XML Schema to C++ Compiler + .\" + .\" + .\" + .\"-------------------------------------------------------------------- + .SH SYNOPSIS + .\"-------------------------------------------------------------------- +-.B xsd ++.B xsdcxx + .I command + .B [ + .I options +@@ -20,19 +20,19 @@ + .I file + .B ...] + .in +-.B xsd help ++.B xsdcxx help + .B [ + .I command + .B ] + .in +-.B xsd version ++.B xsdcxx version + .\" + .\" + .\" + .\"-------------------------------------------------------------------- + .SH DESCRIPTION + .\"-------------------------------------------------------------------- +-.B xsd ++.B xsdcxx + generates vocabulary-specific, statically-typed C++ mapping from W3C XML + Schema definitions. Particular mapping to produce is selected by a + .IR command . +@@ -96,7 +96,7 @@ + .PP + .RS + .RS 3 +-.B xsd help ++.B xsdcxx help + .I command + .RE + .PP +@@ -206,7 +206,7 @@ + \fIfilename\fP \fInamespace\fP + + For example, if you have file \fBhello\.xsd\fP with namespace +-\fBhttp://example\.com/hello\fP and you run \fBxsd\fP on this file, then the ++\fBhttp://example\.com/hello\fP and you run \fBxsdcxx\fP on this file, then the + string in question will be: + + \fBhello\.xsd\. http://example\.com/hello\fP +@@ -1632,7 +1632,7 @@ + .\" + .SH DIAGNOSTICS + If the input file is not a valid W3C XML Schema definition, +-.B xsd ++.B xsdcxx + will issue diagnostic messages to + .B STDERR + and exit with non-zero exit code. +--- xsd-4.0.0+dep/xsd/doc/xsd.xhtml~ 2014-09-14 12:28:37.731513138 +0000 ++++ xsd-4.0.0+dep/xsd/doc/xsd.xhtml 2014-09-14 12:30:11.277789610 +0000 +@@ -50,19 +50,19 @@ + +

NAME

+ +-

xsd - W3C XML Schema to C++ Compiler

++

xsdcxx - W3C XML Schema to C++ Compiler

+ +

SYNOPSIS

+ +
+-
xsd command [options] file [file ...]
+-
xsd help [command]
+-
xsd version
++
xsdcxx command [options] file [file ...]
++
xsdcxx help [command]
++
xsdcxx version
+
+ +

DESCRIPTION

+ +-

xsd generates vocabulary-specific, statically-typed ++

xsdcxx generates vocabulary-specific, statically-typed + C++ mapping from W3C XML Schema definitions. Particular mapping to + produce is selected by a command. Each mapping has + a number of mapping-specific options that should +@@ -104,7 +104,7 @@ + +

help
+
Print usage information and exit. Use +-

xsd help command

++

xsdcxx help command

+ for command-specific help. +
+ +@@ -219,7 +219,7 @@ + +

For example, if you have file hello.xsd with + namespace http://example.com/hello and you run +- xsd on this file, then the string in question will ++ xsdcxx on this file, then the string in question will + be:

+ +

hello.xsd. http://example.com/hello

+@@ -1530,7 +1530,7 @@ +

DIAGNOSTICS

+ +

If the input file is not a valid W3C XML Schema definition, +- xsd will issue diagnostic messages to STDERR ++ xsdcxx will issue diagnostic messages to STDERR + and exit with non-zero exit code.

+ +

BUGS

diff --git a/x86_64/extra/xwayland/850.diff b/x86_64/extra/xwayland/850.diff new file mode 100644 index 0000000..6e5b80a --- /dev/null +++ b/x86_64/extra/xwayland/850.diff @@ -0,0 +1,47 @@ +diff --git a/hw/xwayland/xwayland-glamor-gbm.c b/hw/xwayland/xwayland-glamor-gbm.c +index 60c63ba990d90ec030a648f2fca2094d051fa94b..2ba800ebf951c54de67585d0e81d720eccf50101 100644 +--- a/hw/xwayland/xwayland-glamor-gbm.c ++++ b/hw/xwayland/xwayland-glamor-gbm.c +@@ -909,30 +909,6 @@ xwl_glamor_try_big_gl_api(struct xwl_screen *xwl_screen) + return TRUE; + } + +-static Bool +-xwl_glamor_try_gles_api(struct xwl_screen *xwl_screen) +-{ +- const EGLint gles_attribs[] = { +- EGL_CONTEXT_CLIENT_VERSION, +- 2, +- EGL_NONE, +- }; +- +- eglBindAPI(EGL_OPENGL_ES_API); +- +- xwl_screen->egl_context = eglCreateContext(xwl_screen->egl_display, +- EGL_NO_CONFIG_KHR, +- EGL_NO_CONTEXT, gles_attribs); +- +- if (!xwl_glamor_try_to_make_context_current(xwl_screen)) { +- ErrorF("Failed to make EGL context current with GLES2\n"); +- xwl_glamor_maybe_destroy_context(xwl_screen); +- return FALSE; +- } +- +- return TRUE; +-} +- + static Bool + xwl_glamor_gbm_init_egl(struct xwl_screen *xwl_screen) + { +@@ -964,9 +940,8 @@ xwl_glamor_gbm_init_egl(struct xwl_screen *xwl_screen) + goto error; + } + +- if (!xwl_glamor_try_big_gl_api(xwl_screen) && +- !xwl_glamor_try_gles_api(xwl_screen)) { +- ErrorF("Cannot use neither GL nor GLES2\n"); ++ if (!xwl_glamor_try_big_gl_api(xwl_screen)) { ++ ErrorF("Cannot use GL\n"); + goto error; + } + diff --git a/x86_64/extra/xwayland/886.diff b/x86_64/extra/xwayland/886.diff new file mode 100644 index 0000000..495bd16 --- /dev/null +++ b/x86_64/extra/xwayland/886.diff @@ -0,0 +1,89 @@ +diff --git a/hw/xwayland/xwayland-present.c b/hw/xwayland/xwayland-present.c +index 1a99228a1b475652a72798c14027f8e5c1817588..7ae13e649f0097e71bd145277e50ee5c5fa54ec8 100644 +--- a/hw/xwayland/xwayland-present.c ++++ b/hw/xwayland/xwayland-present.c +@@ -98,14 +98,16 @@ xwl_present_has_pending_events(struct xwl_present_window *xwl_present_window) + !xorg_list_is_empty(&xwl_present_window->wait_list); + } + +-static void ++void + xwl_present_reset_timer(struct xwl_present_window *xwl_present_window) + { + if (xwl_present_has_pending_events(xwl_present_window)) { ++ struct xwl_window *xwl_window = xwl_window_from_window(xwl_present_window->window); + CARD32 now = GetTimeInMillis(); + CARD32 timeout; + +- if (!xorg_list_is_empty(&xwl_present_window->frame_callback_list)) ++ if (xwl_window && xwl_window->frame_callback && ++ !xorg_list_is_empty(&xwl_present_window->frame_callback_list)) + timeout = TIMER_LEN_FLIP; + else + timeout = TIMER_LEN_COPY; +@@ -359,8 +361,8 @@ xwl_present_queue_vblank(WindowPtr present_window, + + xorg_list_append(&event->list, &xwl_present_window->wait_list); + +- /* If there's a pending frame callback, use that */ +- if (xwl_window && xwl_window->frame_callback && ++ /* Hook up to frame callback */ ++ if (xwl_window && + xorg_list_is_empty(&xwl_present_window->frame_callback_list)) { + xorg_list_add(&xwl_present_window->frame_callback_list, + &xwl_window->frame_callback_list); +@@ -495,9 +497,6 @@ xwl_present_flip(WindowPtr present_window, + /* We can flip directly to the main surface (full screen window without clips) */ + wl_surface_attach(xwl_window->surface, buffer, 0, 0); + +- if (!xwl_window->frame_callback) +- xwl_window_create_frame_callback(xwl_window); +- + if (xorg_list_is_empty(&xwl_present_window->frame_callback_list)) { + xorg_list_add(&xwl_present_window->frame_callback_list, + &xwl_window->frame_callback_list); +@@ -506,6 +505,9 @@ xwl_present_flip(WindowPtr present_window, + /* Realign timer */ + xwl_present_reset_timer(xwl_present_window); + ++ if (!xwl_window->frame_callback) ++ xwl_window_create_frame_callback(xwl_window); ++ + xwl_surface_damage(xwl_window->xwl_screen, xwl_window->surface, + damage_box->x1 - present_window->drawable.x, + damage_box->y1 - present_window->drawable.y, +diff --git a/hw/xwayland/xwayland-present.h b/hw/xwayland/xwayland-present.h +index 40bd7945988f11f32d1675a7f3623f4119390887..ce91f557bc6b1b3accde64d470d2efe3e920cb6a 100644 +--- a/hw/xwayland/xwayland-present.h ++++ b/hw/xwayland/xwayland-present.h +@@ -64,6 +64,7 @@ struct xwl_present_event { + struct xorg_list list; + }; + ++void xwl_present_reset_timer(struct xwl_present_window *xwl_present_window); + void xwl_present_frame_callback(struct xwl_present_window *xwl_present_window); + Bool xwl_present_init(ScreenPtr screen); + void xwl_present_cleanup(WindowPtr window); +diff --git a/hw/xwayland/xwayland-window.c b/hw/xwayland/xwayland-window.c +index 92bcae326e071f6bd0bb81e79cae9b551b033353..41061e3448f038416015c30cb206a5003f2edeeb 100644 +--- a/hw/xwayland/xwayland-window.c ++++ b/hw/xwayland/xwayland-window.c +@@ -765,6 +765,18 @@ xwl_window_create_frame_callback(struct xwl_window *xwl_window) + xwl_window->frame_callback = wl_surface_frame(xwl_window->surface); + wl_callback_add_listener(xwl_window->frame_callback, &frame_listener, + xwl_window); ++ ++#ifdef GLAMOR_HAS_GBM ++ if (xwl_window->xwl_screen->present) { ++ struct xwl_present_window *xwl_present_window, *tmp; ++ ++ xorg_list_for_each_entry_safe(xwl_present_window, tmp, ++ &xwl_window->frame_callback_list, ++ frame_callback_list) { ++ xwl_present_reset_timer(xwl_present_window); ++ } ++ } ++#endif + } + + Bool diff --git a/x86_64/extra/xwayland/934.diff b/x86_64/extra/xwayland/934.diff new file mode 100644 index 0000000..40cb688 --- /dev/null +++ b/x86_64/extra/xwayland/934.diff @@ -0,0 +1,67 @@ +diff --git a/hw/xwayland/xwayland-glamor-gbm.c b/hw/xwayland/xwayland-glamor-gbm.c +index 60c63ba990d90ec030a648f2fca2094d051fa94b..e87bfb46dcce4192125aac54b8ccb5dca419e162 100644 +--- a/hw/xwayland/xwayland-glamor-gbm.c ++++ b/hw/xwayland/xwayland-glamor-gbm.c +@@ -81,12 +81,14 @@ xwl_gbm_get(struct xwl_screen *xwl_screen) + } + + static uint32_t +-gbm_format_for_depth(int depth) ++gbm_format_for_depth(int depth, int gles) + { + switch (depth) { + case 16: + return GBM_FORMAT_RGB565; + case 24: ++ if (gles) ++ return GBM_FORMAT_ARGB8888; + return GBM_FORMAT_XRGB8888; + case 30: + return GBM_FORMAT_ARGB2101010; +@@ -284,7 +286,7 @@ xwl_glamor_gbm_create_pixmap(ScreenPtr screen, + (hint == CREATE_PIXMAP_USAGE_BACKING_PIXMAP || + hint == CREATE_PIXMAP_USAGE_SHARED || + (xwl_screen->rootless && hint == 0))) { +- uint32_t format = gbm_format_for_depth(depth); ++ uint32_t format = gbm_format_for_depth(depth, xwl_screen->glamor_gles); + + #ifdef GBM_BO_WITH_MODIFIERS + if (xwl_gbm->dmabuf_capable) { +@@ -564,7 +566,7 @@ glamor_pixmap_from_fds(ScreenPtr screen, CARD8 num_fds, const int *fds, + data.width = width; + data.height = height; + data.num_fds = num_fds; +- data.format = gbm_format_for_depth(depth); ++ data.format = gbm_format_for_depth(depth, xwl_screen->glamor_gles); + data.modifier = modifier; + for (i = 0; i < num_fds; i++) { + data.fds[i] = fds[i]; +@@ -581,7 +583,7 @@ glamor_pixmap_from_fds(ScreenPtr screen, CARD8 num_fds, const int *fds, + data.width = width; + data.height = height; + data.stride = strides[0]; +- data.format = gbm_format_for_depth(depth); ++ data.format = gbm_format_for_depth(depth, xwl_screen->glamor_gles); + bo = gbm_bo_import(xwl_gbm->gbm, GBM_BO_IMPORT_FD, &data, + GBM_BO_USE_RENDERING); + } else { +@@ -995,6 +997,7 @@ xwl_glamor_gbm_init_egl(struct xwl_screen *xwl_screen) + /* Mesa uses "drm" as backend name, in that case, just do nothing */ + if (gbm_backend_name && strcmp(gbm_backend_name, "drm") != 0) + xwl_screen->glvnd_vendor = gbm_backend_name; ++ xwl_screen->glamor_gles = !epoxy_is_desktop_gl(); + + return TRUE; + error: +diff --git a/hw/xwayland/xwayland-screen.h b/hw/xwayland/xwayland-screen.h +index fd201cdf5f540563a57d849cf12f69f58d9089af..cc34618a4448164bb480d6952e53333500f7c259 100644 +--- a/hw/xwayland/xwayland-screen.h ++++ b/hw/xwayland/xwayland-screen.h +@@ -60,6 +60,7 @@ struct xwl_screen { + + int rootless; + int glamor; ++ int glamor_gles; + int present; + int force_xrandr_emulation; + int fullscreen; diff --git a/x86_64/extra/xwayland/PKGBUILD b/x86_64/extra/xwayland/PKGBUILD new file mode 100644 index 0000000..41661fd --- /dev/null +++ b/x86_64/extra/xwayland/PKGBUILD @@ -0,0 +1,53 @@ +pkgname=xwayland +pkgver=21.1.2 +pkgrel=1 +arch=('x86_64') +depends=('nettle' 'libepoxy' 'systemd' 'libxfont2' + 'pixman' 'xorg-server' 'libxcvt' 'egl-wayland') +makedepends=('meson' 'xorgproto' 'libxtrans' 'libxkbfile' 'dbus' + 'font-util' 'wayland' 'wayland-protocols' + 'libdrm' 'mesa' 'systemd' +) +source=(https://x.org/pub/individual/xserver/$pkgname-$pkgver.tar.xz + render-gcc12.patch) + +prepare() { + cd $pkgname-$pkgver + + echo "[!]: Patching render-gcc12.patch" + patch -Np1 -i ../render-gcc12.patch +} + +build() { + cd $pkgname-$pkgver + + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + --localstatedir=/var \ + -D ipv6=true \ + -D xvfb=false \ + -D xdmcp=false \ + -D xcsecurity=true \ + -D dri3=true \ + -D xwayland_eglstream=true \ + -D glamor=true \ + -D xkb_dir=/usr/share/X11/xkb \ + -D xkb_output_dir=/var/lib/xkb \ + .. + + meson configure . > configuration + + ninja +} + +package() { + cd $pkgname-$pkgver/build + DESTDIR=$pkgdir ninja install + install -m644 -Dt "${pkgdir}"/usr/lib/pkgconfig hw/xwayland/xwayland.pc + + # Already owned by xorg-server + rm -f $pkgdir/usr/lib/xorg/protocol.txt + rm -f $pkgdir/usr/share/man/man1/Xserver.* +} diff --git a/x86_64/extra/xwayland/render-gcc12.patch b/x86_64/extra/xwayland/render-gcc12.patch new file mode 100644 index 0000000..9af1e79 --- /dev/null +++ b/x86_64/extra/xwayland/render-gcc12.patch @@ -0,0 +1,40 @@ +diff --git a/render/picture.c b/render/picture.c +index afa0d258fa2014c144dc99107a762cf012916d65..2be4b1954f7fc6647c1e2819a9421ddc87c7d562 100644 +--- a/render/picture.c ++++ b/render/picture.c +@@ -865,7 +865,7 @@ CreateSolidPicture(Picture pid, xRenderColor * color, int *error) + } + + pPicture->id = pid; +- pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(PictSolidFill)); ++ pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(SourcePict)); + if (!pPicture->pSourcePict) { + *error = BadAlloc; + free(pPicture); +@@ -896,7 +896,7 @@ CreateLinearGradientPicture(Picture pid, xPointFixed * p1, xPointFixed * p2, + } + + pPicture->id = pid; +- pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(PictLinearGradient)); ++ pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(SourcePict)); + if (!pPicture->pSourcePict) { + *error = BadAlloc; + free(pPicture); +@@ -936,7 +936,7 @@ CreateRadialGradientPicture(Picture pid, xPointFixed * inner, + } + + pPicture->id = pid; +- pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(PictRadialGradient)); ++ pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(SourcePict)); + if (!pPicture->pSourcePict) { + *error = BadAlloc; + free(pPicture); +@@ -979,7 +979,7 @@ CreateConicalGradientPicture(Picture pid, xPointFixed * center, xFixed angle, + } + + pPicture->id = pid; +- pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(PictConicalGradient)); ++ pPicture->pSourcePict = (SourcePictPtr) malloc(sizeof(SourcePict)); + if (!pPicture->pSourcePict) { + *error = BadAlloc; + free(pPicture); diff --git a/x86_64/extra/yajl/PKGBUILD b/x86_64/extra/yajl/PKGBUILD new file mode 100644 index 0000000..adb9787 --- /dev/null +++ b/x86_64/extra/yajl/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=yajl +pkgver=2.1.0 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(cmake) +source=($pkgname-$pkgver.tar.gz::https://github.com/lloyd/$pkgname/archive/$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE="None" \ + -Wno-dev \ + -B build \ + -S . + + make -C build +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install -C build +} diff --git a/x86_64/extra/yaml-cpp/1037.patch b/x86_64/extra/yaml-cpp/1037.patch new file mode 100644 index 0000000..2d37d64 --- /dev/null +++ b/x86_64/extra/yaml-cpp/1037.patch @@ -0,0 +1,27 @@ +From 4f48727b365962e31451cd91027bd797bc7d2ee7 Mon Sep 17 00:00:00 2001 +From: Artturin +Date: Tue, 28 Sep 2021 00:11:04 +0300 +Subject: [PATCH] yaml-cpp-config.cmake.in: apply patch to fix #774 + +From https://github.com/jbeder/yaml-cpp/issues/774#issuecomment-909274732 +--- + yaml-cpp-config.cmake.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/yaml-cpp-config.cmake.in b/yaml-cpp-config.cmake.in +index 7b41e3f30..de0981df9 100644 +--- a/yaml-cpp-config.cmake.in ++++ b/yaml-cpp-config.cmake.in +@@ -5,10 +5,10 @@ + + # Compute paths + get_filename_component(YAML_CPP_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +-set(YAML_CPP_INCLUDE_DIR "@CONFIG_INCLUDE_DIRS@") + + # Our library dependencies (contains definitions for IMPORTED targets) + include("${YAML_CPP_CMAKE_DIR}/yaml-cpp-targets.cmake") + + # These are IMPORTED targets created by yaml-cpp-targets.cmake +-set(YAML_CPP_LIBRARIES "@EXPORT_TARGETS@") ++get_target_property(YAML_CPP_INCLUDE_DIR yaml-cpp INTERFACE_INCLUDE_DIRECTORIES) ++get_target_property(YAML_CPP_LIBRARIES yaml-cpp IMPORTED_LOCATION_RELEASE) diff --git a/x86_64/extra/yaml-cpp/PKGBUILD b/x86_64/extra/yaml-cpp/PKGBUILD new file mode 100644 index 0000000..1bf4fd5 --- /dev/null +++ b/x86_64/extra/yaml-cpp/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=yaml-cpp +pkgver=0.7.0 +pkgrel=1 +arch=('x86_64') +depends=('gcc' 'glibc') +makedepends=('cmake' 'ninja') +source=("https://github.com/jbeder/yaml-cpp/archive/yaml-cpp-${pkgver}.tar.gz" + https://patch-diff.githubusercontent.com/raw/jbeder/yaml-cpp/pull/1037.patch) + +prepare() { + cd "${pkgname}-${pkgname}-${pkgver}" + + patch -Np1 -i "${srcdir}"/1037.patch +} + +build() { + cd "${pkgname}-${pkgname}-${pkgver}" + + cmake -GNinja \ + -Bbuild \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=ON \ + -DYAML_BUILD_SHARED_LIBS=ON \ + -DCMAKE_BUILD_TYPE=Release + + ninja -C build +} + +package() { + cd "${pkgname}-${pkgname}-${pkgver}" + DESTDIR="$pkgdir" ninja -C build install + + rm -rf "${pkgdir}"/usr/{lib,lib/pkgconfig,include}/*{gtest,gmock}* + rm -rf "${pkgdir}"/usr/lib/cmake/GTest +} \ No newline at end of file diff --git a/x86_64/extra/yaml/PKGBUILD b/x86_64/extra/yaml/PKGBUILD new file mode 100644 index 0000000..3f86ee5 --- /dev/null +++ b/x86_64/extra/yaml/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=yaml +pkgver=0.2.5 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(doxygen) +source=(https://github.com/yaml/libyaml/releases/download/$pkgver/yaml-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/yarn/PKGBUILD b/x86_64/extra/yarn/PKGBUILD new file mode 100644 index 0000000..2c594d6 --- /dev/null +++ b/x86_64/extra/yarn/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=yarn +pkgver=1.22.17 +pkgrel=1 +arch=(x86_64) +depends=(nodejs) +source=(https://github.com/yarnpkg/yarn/releases/download/v$pkgver/yarn-v$pkgver.tar.gz) + +package() { + cd yarn-v${pkgver} + + install -dm755 "$pkgdir"/usr/lib/node_modules/yarn + cp -R * "$pkgdir"/usr/lib/node_modules/yarn + + install -dm755 "$pkgdir"/usr/bin + + ln -s /usr/lib/node_modules/yarn/bin/yarn.js "$pkgdir"/usr/bin/yarn + ln -s /usr/lib/node_modules/yarn/bin/yarn.js "$pkgdir"/usr/bin/yarnpkg +} diff --git a/x86_64/extra/yasm/PKGBUILD b/x86_64/extra/yasm/PKGBUILD new file mode 100644 index 0000000..a9b3119 --- /dev/null +++ b/x86_64/extra/yasm/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=yasm +pkgver=1.3.0 +pkgrel=1 +arch=('x86_64') +depends=(python3) +source=(https://tortall.net/projects/$pkgname/releases/$pkgname-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + + sed -i 's#) ytasm.*#)#' Makefile.in + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/extra/zenity/PKGBUILD b/x86_64/extra/zenity/PKGBUILD new file mode 100644 index 0000000..b8e3370 --- /dev/null +++ b/x86_64/extra/zenity/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=zenity +pkgver=3.42.0 +pkgrel=1 +arch=(x86_64) +depends=(webkit2gtk libnotify) +makedepends=(meson git) +_commit=383c8c13899f2e6beb5d71c43d7a181d67008c9f # tags/3.42.0^0 +source=("git+https://gitlab.gnome.org/GNOME/zenity.git#commit=$_commit") + +build() { + meson zenity build \ + --prefix=/usr \ + -D libnotify=true \ + -D webkitgtk=true + + meson compile -C build +} + +package() { + meson install -C build --destdir "$pkgdir" +} diff --git a/x86_64/extra/zip/PKGBUILD b/x86_64/extra/zip/PKGBUILD new file mode 100644 index 0000000..687ecf1 --- /dev/null +++ b/x86_64/extra/zip/PKGBUILD @@ -0,0 +1,17 @@ +pkgname=zip +pkgver=30 +pkgrel=1 +arch=('x86_64') +source=(https://downloads.sourceforge.net/infozip/$pkgname$pkgver.tar.gz) + +build() { + cd $pkgname$pkgver + + make -f unix/Makefile generic +} + +package() { + cd $pkgname$pkgver + + make prefix=$pkgdir/usr MANDIR=$pkgdir/usr/share/man/man1 -f unix/Makefile install +} diff --git a/x86_64/extra/zstd/PKGBUILD b/x86_64/extra/zstd/PKGBUILD new file mode 100644 index 0000000..72e3f3f --- /dev/null +++ b/x86_64/extra/zstd/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=zstd +pkgver=1.5.0 +pkgrel=1 +arch=('x86_64') +depends=(glibc gcc zlib xz lz4) +makedepends=() +source=(https://github.com/facebook/zstd/releases/download/v$pkgver/zstd-$pkgver.tar.gz) + +build() { + cd $pkgname-$pkgver + make + make -C contrib/pzstd +} + +package() { + cd $pkgname-$pkgver + make PREFIX=/usr DESTDIR=$pkgdir install + ln -sf /usr/bin/zstd $pkgdir/usr/bin/zstdmt + install -Dm 755 contrib/pzstd/pzstd -t $pkgdir/usr/bin/ +} diff --git a/x86_64/extra32/PKGBUILD b/x86_64/extra32/PKGBUILD new file mode 100644 index 0000000..68ee1c8 --- /dev/null +++ b/x86_64/extra32/PKGBUILD @@ -0,0 +1,29 @@ +pkgname= +pkgver= +pkgrel=1 +arch=('x86_64') +depends=() +makedepends=() +source=() + +prepare() { + cd -$pkgver + + +} + +build() { + cd -$pkgver + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + +} + +package() { + cd -$pkgver + + +} diff --git a/x86_64/extra32/build_pkg.sh b/x86_64/extra32/build_pkg.sh new file mode 100755 index 0000000..fea83de --- /dev/null +++ b/x86_64/extra32/build_pkg.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +folders=(lib32-*) + +function build_extras_S() { + shopt -s globstar + for d in ${folders[@]} ; do + cd "$d" + $@ + rm -rf src/ + rm -rf pkg/ + cd .. + done +} + +build_extras_S "makepkg --skipint -C -c -s" + +#function build_extras() { +# shopt -s globstar +# for d in font* ; do +# cd "$d" +# $@ +# rm -rf src/ +# rm -rf pkg/ +# cd .. +# done +#} + +#build_extras "makepkg --skipint" diff --git a/x86_64/extra32/lib32-acl/PKGBUILD b/x86_64/extra32/lib32-acl/PKGBUILD new file mode 100644 index 0000000..f6cb270 --- /dev/null +++ b/x86_64/extra32/lib32-acl/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=lib32-acl +pkgver=2.3.1 +pkgrel=1 +pkgdesc='Access control list libraries (32-bit)' +arch=('x86_64') +url='https://savannah.nongnu.org/projects/acl' +depends=('lib32-attr' 'acl') +source=("https://download.savannah.gnu.org/releases/acl/acl-${pkgver}.tar.gz") + +build() { + cd "${srcdir}"/acl-${pkgver} + + export CC="gcc -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --libexecdir=/usr/lib32 + + make +} + +package() { + cd "${srcdir}"/acl-${pkgver} + + make DESTDIR="${pkgdir}" install + + rm -rf "${pkgdir}"/usr/{bin,include,share} +} diff --git a/x86_64/extra32/lib32-alsa-lib/PKGBUILD b/x86_64/extra32/lib32-alsa-lib/PKGBUILD new file mode 100644 index 0000000..1a02ec2 --- /dev/null +++ b/x86_64/extra32/lib32-alsa-lib/PKGBUILD @@ -0,0 +1,33 @@ +_name=alsa-lib +pkgname=lib32-alsa-lib +pkgver=1.2.6.1 +pkgrel=1 +arch=(x86_64) +depends=("alsa-lib=${pkgver}") +source=("https://www.alsa-project.org/files/pub/lib/${_name}-${pkgver}.tar.bz2") + +prepare() { + cd "${_name}-$pkgver" + autoreconf -fiv +} + +build() { + cd "${_name}-$pkgver" + + export CC='gcc -m32' + export PKG_CONFIG=i686-pc-linux-gnu-pkg-config + + ./configure --prefix=/usr \ + --libdir=/usr/lib32 \ + --without-debug \ + --disable-python + + make +} + +package() { + cd "${_name}-$pkgver" + + make DESTDIR="$pkgdir" install + rm -r "$pkgdir"/usr/{bin,include,share} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-alsa-plugins/PKGBUILD b/x86_64/extra32/lib32-alsa-plugins/PKGBUILD new file mode 100644 index 0000000..d894f62 --- /dev/null +++ b/x86_64/extra32/lib32-alsa-plugins/PKGBUILD @@ -0,0 +1,40 @@ +pkgname=lib32-alsa-plugins +iname=alsa-plugins +pkgver=1.2.6 +pkgrel=1 +arch=('x86_64') +depends=(lib32-alsa-lib) +makedepends=(lib32-dbus lib32-pulseaudio) +source=(https://www.alsa-project.org/files/pub/plugins/${iname}-$pkgver.tar.bz2) + +prepare() { + cd $iname-$pkgver + + autoreconf -fi +} + +build() { + cd $iname-$pkgver + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + ./configure \ + --prefix=/usr \ + --disable-jack \ + --disable-arcamav \ + --disable-samplerate \ + --libdir=/usr/lib32 \ + --enable-maemo-plugin + + make +} + +package() { + cd $iname-$pkgver + + make DESTDIR=$pkgdir install + + rm -rfv "$pkgdir"/{etc,usr/share} +} diff --git a/x86_64/extra32/lib32-amdvlk/PKGBUILD b/x86_64/extra32/lib32-amdvlk/PKGBUILD new file mode 100644 index 0000000..b318fd7 --- /dev/null +++ b/x86_64/extra32/lib32-amdvlk/PKGBUILD @@ -0,0 +1,58 @@ +pkgname=lib32-amdvlk +pkgver=2022.Q2.3 +pkgrel=1 +arch=(x86_64) +makedepends=('python3' 'lib32-wayland' 'lib32-libxrandr' 'xorg-server' 'cmake' 'ninja' 'git') +makedepends+=('llvm' 'clang' 'lld' 'perl-modules' 'python2' 'repo') +options=('!lto') + +prepare() { + mkdir -p amdvlk && cd amdvlk + + repo init -u https://github.com/GPUOpen-Drivers/AMDVLK.git -b refs/tags/v-$pkgver --depth=1 + + repo sync --force-sync --no-clone-bundle --no-tags +} + +build() { + cd $srcdir/amdvlk/drivers/spvgen/external + python2 fetch_external_sources.py + + cd $srcdir/amdvlk/drivers + + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + # use lld and clang to fix linking error + # https://github.com/GPUOpen-Drivers/llpc/issues/1645 + cd ${srcdir}/xgl + cmake -H. -B builds/Release -S xgl \ + -D CMAKE_C_COMPILER=clang \ + -D CMAKE_CXX_COMPILER=clang++ \ + -D LLVM_USE_LINKER=lld \ + -D CMAKE_EXE_LINKER_FLAGS='-fuse-ld=lld' \ + -D CMAKE_SHARED_LINKER_FLAGS='-fuse-ld=lld' \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_C_FLAGS=-m32 \ + -D CMAKE_CXX_FLAGS=-m32 \ + -D LLVM_TARGET_ARCH:STRING=i686 \ + -D LLVM_DEFAULT_TARGET_TRIPLE="i686-pc-linux-gnu" \ + -D BUILD_WAYLAND_SUPPORT=On \ + -G Ninja + + ninja -C builds/Release +} + +package() { + install -m755 -d "${pkgdir}"/usr/lib32 + install -m755 -d "${pkgdir}"/usr/share/vulkan/icd.d + install -m755 -d "${pkgdir}"/usr/share/vulkan/implicit_layer.d + install -m755 -d "${pkgdir}"/usr/share/licenses/${pkgname} + + install xgl/builds/Release/icd/amdvlk32.so "${pkgdir}"/usr/lib32/ + install xgl/builds/Release/icd/amd_icd32.json "${pkgdir}"/usr/share/vulkan/icd.d/ + install xgl/builds/Release/icd/amd_icd32.json "${pkgdir}"/usr/share/vulkan/implicit_layer.d/ + install AMDVLK/LICENSE.txt "${pkgdir}"/usr/share/licenses/${pkgname}/ + + sed -i "s/\/lib/\/lib32/g" "${pkgdir}"/usr/share/vulkan/icd.d/amd_icd32.json + sed -i "s/\/lib/\/lib32/g" "${pkgdir}"/usr/share/vulkan/implicit_layer.d/amd_icd32.json +} diff --git a/x86_64/extra32/lib32-at-spi2-atk/PKGBUILD b/x86_64/extra32/lib32-at-spi2-atk/PKGBUILD new file mode 100644 index 0000000..d9b6ac7 --- /dev/null +++ b/x86_64/extra32/lib32-at-spi2-atk/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=lib32-at-spi2-atk +pkgver=2.38.0 +pkgrel=1 +arch=(x86_64) +depends=( + at-spi2-atk lib32-at-spi2-core lib32-atk lib32-libx11 lib32-libxml2 +) +makedepends=( + meson +) +ltag=b91a111f040a09e804428a81e6de214e4962247b +source=(git+https://gitlab.gnome.org/GNOME/at-spi2-atk.git#tag=${ltag}) + +build() { + export CC='gcc -m32' + export PKG_CONFIG_PATH=/usr/lib32/pkgconfig + + meson at-spi2-atk build \ + --prefix=/usr \ + --libdir=/usr/lib32 + + ninja -C build +} + +package() { + DESTDIR="${pkgdir}" ninja -C build install + + rm -r "${pkgdir}"/usr/{include,lib32/gnome-settings-daemon-3.0} +} diff --git a/x86_64/extra32/lib32-at-spi2-core/PKGBUILD b/x86_64/extra32/lib32-at-spi2-core/PKGBUILD new file mode 100644 index 0000000..e2e9a60 --- /dev/null +++ b/x86_64/extra32/lib32-at-spi2-core/PKGBUILD @@ -0,0 +1,32 @@ +pkgname=lib32-at-spi2-core +pkgver=2.42.0 +pkgrel=1 +pkgdesc='Protocol definitions and daemon for D-Bus at-spi' +arch=(x86_64) +depends=( + at-spi2-core lib32-dbus lib32-glib2 lib32-libxtst +) +makedepends=( + git gtk-doc intltool meson +) +_tag=b22b7dcfcb34f01218de0f6aa0d10b4d34fb07aa +source=(git+https://gitlab.gnome.org/GNOME/at-spi2-core.git#tag=${_tag}) + +build() { + export CC='gcc -m32' + export PKG_CONFIG_PATH=/usr/lib32/pkgconfig + + meson at-spi2-core build \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + -D docs=false \ + -D introspection=no + + ninja -C build +} + +package() { + DESTDIR="${pkgdir}" ninja -C build install + + rm -r "${pkgdir}"/{etc,usr/{include,lib,libexec,share}} +} diff --git a/x86_64/extra32/lib32-atk/PKGBUILD b/x86_64/extra32/lib32-atk/PKGBUILD new file mode 100644 index 0000000..92f0d11 --- /dev/null +++ b/x86_64/extra32/lib32-atk/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=lib32-atk +pkgver=2.36.0 +pkgrel=1 +arch=(x86_64) +depends=(lib32-glib2 atk) +makedepends=(git gtk-doc meson) +_commit=dbe95f6170ae1f4bb76c755506b4e3dd3990d5aa # tags/ATK_2_36_0^0 +source=("git+https://git.gnome.org/browse/atk#commit=$_commit") + +pkgver() { + cd atk + + git describe --tags | sed 's/^ATK_//;s/_/./g;s/-/+/g' +} +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH=/usr/lib32/pkgconfig + + meson atk build \ + -D introspection=false \ + --libdir=/usr/lib32 \ + --prefix=/usr + + ninja -C build +} +package() { + DESTDIR="$pkgdir" ninja -C build install + + rm -r "${pkgdir}"/usr/{include,share} +} diff --git a/x86_64/extra32/lib32-attr/PKGBUILD b/x86_64/extra32/lib32-attr/PKGBUILD new file mode 100644 index 0000000..e60ee29 --- /dev/null +++ b/x86_64/extra32/lib32-attr/PKGBUILD @@ -0,0 +1,33 @@ +_pkgbasename=attr +pkgname=lib32-$_pkgbasename +pkgver=2.5.1 +pkgrel=1 +pkgdesc='Extended attribute support library for ACL support (32-bit)' +arch=(x86_64) +url='https://savannah.nongnu.org/projects/attr' +depends=($_pkgbasename) +makedepends=('gettext') +source=("https://download.savannah.gnu.org/releases/attr/attr-${pkgver}.tar.xz") + +build() { + cd "${srcdir}"/attr-${pkgver} + + export CC="gcc -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --libexecdir=/usr/lib32 \ + --sysconfdir=/etc + + make +} + +package() { + cd "${srcdir}"/attr-${pkgver} + + make DESTDIR="${pkgdir}" install + + rm -rf "${pkgdir}"/{etc,usr/{bin,include,share}} +} diff --git a/x86_64/extra32/lib32-brotli/PKGBUILD b/x86_64/extra32/lib32-brotli/PKGBUILD new file mode 100644 index 0000000..5d6a695 --- /dev/null +++ b/x86_64/extra32/lib32-brotli/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=lib32-brotli +pkgver=1.0.9 +pkgrel=1 +pkgdesc='Brotli compression library' +arch=(x86_64) +url=https://github.com/google/brotli +depends=( + brotli +) +makedepends=( + cmake git +) +_tag=e61745a6b7add50d380cfd7d3883dd6c62fc2c71 +source=(git+https://github.com/google/brotli#tag=${_tag}) + +build() { + export CC='gcc -m32' + export PKG_CONFIG_PATH=/usr/lib32/pkgconfig + + cmake -S brotli -B build \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_INSTALL_LIBDIR=/usr/lib32 + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + rm -rf "${pkgdir}"/usr/{bin,include} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-bzip2/PKGBUILD b/x86_64/extra32/lib32-bzip2/PKGBUILD new file mode 100644 index 0000000..59ab160 --- /dev/null +++ b/x86_64/extra32/lib32-bzip2/PKGBUILD @@ -0,0 +1,27 @@ +_pkgbasename=bzip2 +pkgname=lib32-bzip2 +pkgver=1.0.8 +pkgrel=1 +pkgdesc="A high-quality data compression program (32-bit)" +arch=('x86_64') +url="https://sourceware.org/bzip2/" +depends=($_pkgbasename) +source=(https://sourceware.org/pub/bzip2/$_pkgbasename-$pkgver.tar.gz{,.sig}) + +build() { + cd ${_pkgbasename}-${pkgver} + + make -f Makefile-libbz2_so CC="gcc -m32 $CFLAGS $LDFLAGS" + make libbz2.a CC="gcc -m32 $CFLAGS $LDFLAGS" +} + +package(){ + cd ${_pkgbasename}-${pkgver} + + install -dm755 "$pkgdir"/usr/lib32 + cp -a libbz2.so* "$pkgdir"/usr/lib32 + ln -s libbz2.so.$pkgver "$pkgdir"/usr/lib32/libbz2.so + ln -s libbz2.so.$pkgver "$pkgdir"/usr/lib32/libbz2.so.1 # For compatibility with some other distros + + install -Dm644 libbz2.a "$pkgdir"/usr/lib32/libbz2.a +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-cairo/PKGBUILD b/x86_64/extra32/lib32-cairo/PKGBUILD new file mode 100644 index 0000000..96fbdaa --- /dev/null +++ b/x86_64/extra32/lib32-cairo/PKGBUILD @@ -0,0 +1,53 @@ +pkgname=lib32-cairo +rname=cairo +pkgver=1.17.4 +pkgrel=3 +arch=('x86_64') +depends=(lib32-libxrender lib32-freetype2 lib32-libpng lib32-libxcb lib32-expat lib32-fontconfig lib32-pixman) +_commit=156cd3eaaebfd8635517c2baf61fcf3627ff7ec2 # tags/1.17.4^0 +source=("git+https://gitlab.freedesktop.org/cairo/cairo.git#commit=$_commit") + +prepare() { + cd $rname + + # Fix library versioning + # https://bugs.archlinux.org/task/69012 + git cherry-pick -n e9ccb1d8d095482e4139da658e679d5aad56b184 + + # https://bugs.archlinux.org/task/70017 (CVE-2020-35492) + git cherry-pick -n 03a820b173ed1fdef6ff14b4468f5dbc02ff59be + + # https://gitlab.freedesktop.org/cairo/cairo/-/issues/449 + git cherry-pick -n a3b69a0215fdface0fd5730872a4b3242d979dca + + # Disable XCB backend for Xlib surfaces + # https://bugs.archlinux.org/task/68839 + git cherry-pick -n 3468c67fe91f0c37e0ec5d335082653a6fa609b6 +} + +build() { + cd $rname + mkdir -p build && cd build + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + meson \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + -D spectre=disabled \ + -D tee=enabled \ + -D tests=disabled + + meson compile +} + +package() { + cd $rname/build + + DESTDIR=$pkgdir meson install + + rm -rf $pkgdir/usr/include + rm -rf $pkgdir/usr/bin +} diff --git a/x86_64/extra32/lib32-clang/01.patch b/x86_64/extra32/lib32-clang/01.patch new file mode 100644 index 0000000..70fc047 --- /dev/null +++ b/x86_64/extra32/lib32-clang/01.patch @@ -0,0 +1,31 @@ +From c84755a046bbdcd0564693e30b2508034b06002b Mon Sep 17 00:00:00 2001 +From: serge-sans-paille +Date: Mon, 13 Sep 2021 10:25:45 +0200 +Subject: [PATCH] Fix scan-build-py executable lookup path + +Once installed, scan-build-py doesn't know anything about its auxiliary +executable and can't find them. +Use relative path wrt. scan-build-py script. + +Differential Revision: https://reviews.llvm.org/D109659 +--- + clang/tools/scan-build-py/lib/libscanbuild/analyze.py | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/clang/tools/scan-build-py/lib/libscanbuild/analyze.py b/clang/tools/scan-build-py/lib/libscanbuild/analyze.py +index 9a249a8e15cb..d83ff2aefab9 100644 +--- a/clang/tools/scan-build-py/lib/libscanbuild/analyze.py ++++ b/clang/tools/scan-build-py/lib/libscanbuild/analyze.py +@@ -39,8 +39,10 @@ from libscanbuild.shell import decode + + __all__ = ['scan_build', 'analyze_build', 'analyze_compiler_wrapper'] + +-COMPILER_WRAPPER_CC = 'analyze-cc' +-COMPILER_WRAPPER_CXX = 'analyze-c++' ++scanbuild_dir = os.path.dirname(__import__('sys').argv[0]) ++ ++COMPILER_WRAPPER_CC = os.path.join(scanbuild_dir, '..', 'libexec', 'analyze-cc') ++COMPILER_WRAPPER_CXX = os.path.join(scanbuild_dir, '..', 'libexec', 'analyze-c++') + + CTU_EXTDEF_MAP_FILENAME = 'externalDefMap.txt' + CTU_TEMP_DEFMAP_FOLDER = 'tmpExternalDefMaps' diff --git a/x86_64/extra32/lib32-clang/02.patch b/x86_64/extra32/lib32-clang/02.patch new file mode 100644 index 0000000..31241be --- /dev/null +++ b/x86_64/extra32/lib32-clang/02.patch @@ -0,0 +1,374 @@ +From 683787b5c5c075f53a95f4d85f76302111c89914 Mon Sep 17 00:00:00 2001 +From: Evangelos Foutras +Date: Sat, 23 Oct 2021 05:08:48 +0300 +Subject: [PATCH] Enable SSP and PIE by default + +This is a minimal set of changes needed to make clang use SSP and PIE by +default on Arch Linux. Tests that were easy to adjust have been changed +accordingly; only test/Driver/linux-ld.c has been marked as "expected +failure" due to the number of changes it would require (mostly replacing +crtbegin.o with crtbeginS.o). + +Doing so is needed in order to align clang with the new default GCC +behavior in Arch which generates PIE executables by default and also +defaults to -fstack-protector-strong. It is not meant to be a long term +solution, but a simple temporary fix. + +Hopefully these changes will be obsoleted by the introduction upstream +of a compile-time option (https://bugs.llvm.org/show_bug.cgi?id=13410) +--- + clang/lib/Driver/ToolChains/Linux.cpp | 10 ++++++++-- + clang/lib/Driver/ToolChains/Linux.h | 5 +++++ + clang/test/Driver/cross-linux.c | 16 ++++++++-------- + clang/test/Driver/env.c | 2 +- + clang/test/Driver/fsanitize.c | 14 +++++++------- + clang/test/Driver/gcc-toolchain.cpp | 6 +++--- + clang/test/Driver/hexagon-toolchain-elf.c | 2 +- + clang/test/Driver/hip-fpie-option.hip | 4 ++-- + clang/test/Driver/linux-as.c | 4 ++-- + clang/test/Driver/linux-ld.c | 2 ++ + clang/test/Driver/ppc-abi.c | 18 +++++++++++------- + clang/test/Driver/riscv32-toolchain.c | 4 ++-- + clang/test/Driver/riscv64-toolchain.c | 4 ++-- + clang/test/Driver/stack-protector.c | 4 ++-- + 14 files changed, 56 insertions(+), 39 deletions(-) + +diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp +index c9360fc67165..2b60460e6604 100644 +--- a/clang/lib/Driver/ToolChains/Linux.cpp ++++ b/clang/lib/Driver/ToolChains/Linux.cpp +@@ -652,8 +652,14 @@ void Linux::AddIAMCUIncludeArgs(const ArgList &DriverArgs, + } + + bool Linux::isPIEDefault() const { +- return (getTriple().isAndroid() && !getTriple().isAndroidVersionLT(16)) || +- getTriple().isMusl() || getSanitizerArgs().requiresPIE(); ++ const bool IsMips = getTriple().isMIPS(); ++ const bool IsAndroid = getTriple().isAndroid(); ++ ++ if (IsMips || IsAndroid) ++ return (getTriple().isAndroid() && !getTriple().isAndroidVersionLT(16)) || ++ getTriple().isMusl() || getSanitizerArgs().requiresPIE(); ++ ++ return true; + } + + bool Linux::IsAArch64OutlineAtomicsDefault(const ArgList &Args) const { +diff --git a/clang/lib/Driver/ToolChains/Linux.h b/clang/lib/Driver/ToolChains/Linux.h +index 169a37c44072..a6458092462e 100644 +--- a/clang/lib/Driver/ToolChains/Linux.h ++++ b/clang/lib/Driver/ToolChains/Linux.h +@@ -10,6 +10,7 @@ + #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_LINUX_H + + #include "Gnu.h" ++#include "clang/Basic/LangOptions.h" + #include "clang/Driver/ToolChain.h" + + namespace clang { +@@ -46,6 +47,10 @@ public: + bool isPIEDefault() const override; + bool isNoExecStackDefault() const override; + bool IsMathErrnoDefault() const override; ++ LangOptions::StackProtectorMode ++ GetDefaultStackProtectorLevel(bool KernelOrKext) const override { ++ return LangOptions::SSPStrong; ++ } + SanitizerMask getSupportedSanitizers() const override; + void addProfileRTLibs(const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs) const override; +diff --git a/clang/test/Driver/cross-linux.c b/clang/test/Driver/cross-linux.c +index 59f5a97d2d9d..8d0e9e724aa0 100644 +--- a/clang/test/Driver/cross-linux.c ++++ b/clang/test/Driver/cross-linux.c +@@ -43,8 +43,8 @@ + // CHECK-MULTI32-I386: "{{.*}}/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/10.2.0/../../../../i386-unknown-linux/bin{{/|\\\\}}ld" + // CHECK-MULTI32-I386: "--sysroot=[[sysroot:.*/Inputs/basic_linux_tree]]" + // CHECK-MULTI32-I386: "-m" "elf_i386" +-// CHECK-MULTI32-I386: "crti.o" "[[gcc_install:.*/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/10.2.0]]{{/|\\\\}}crtbegin.o" +-// CHECK-MULTI32-I386: "-L[[gcc_install]]" ++// CHECK-MULTI32-I386: "crti.o" "crtbeginS.o" ++// CHECK-MULTI32-I386: "-L[[gcc_install:.*/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/10.2.0]]" + // CHECK-MULTI32-I386: "-L[[gcc_install]]/../../../../i386-unknown-linux/lib/../lib32" + // CHECK-MULTI32-I386: "-L[[gcc_install]]/../../../../i386-unknown-linux/lib" + // CHECK-MULTI32-I386: "-L[[sysroot]]/lib" +@@ -61,8 +61,8 @@ + // CHECK-MULTI32-X86-64: "{{.*}}/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/10.2.0/../../../../i386-unknown-linux/bin{{/|\\\\}}ld" + // CHECK-MULTI32-X86-64: "--sysroot=[[sysroot:.*/Inputs/basic_linux_tree]]" + // CHECK-MULTI32-X86-64: "-m" "elf_x86_64" +-// CHECK-MULTI32-X86-64: "crti.o" "[[gcc_install:.*/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/10.2.0]]/64{{/|\\\\}}crtbegin.o" +-// CHECK-MULTI32-X86-64: "-L[[gcc_install]]/64" ++// CHECK-MULTI32-X86-64: "crti.o" "crtbeginS.o" ++// CHECK-MULTI32-X86-64: "-L[[gcc_install:.*/Inputs/multilib_32bit_linux_tree/usr/lib/gcc/i386-unknown-linux/10.2.0]]/64" + // CHECK-MULTI32-X86-64: "-L[[gcc_install]]/../../../../i386-unknown-linux/lib/../lib64" + // CHECK-MULTI32-X86-64: "-L[[gcc_install]]/../../../../i386-unknown-linux/lib" + // CHECK-MULTI32-X86-64: "-L[[sysroot]]/lib" +@@ -79,8 +79,8 @@ + // CHECK-MULTI64-I386: "{{.*}}/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/10.2.0/../../../../x86_64-unknown-linux/bin{{/|\\\\}}ld" + // CHECK-MULTI64-I386: "--sysroot=[[sysroot:.*/Inputs/basic_linux_tree]]" + // CHECK-MULTI64-I386: "-m" "elf_i386" +-// CHECK-MULTI64-I386: "crti.o" "[[gcc_install:.*/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/10.2.0]]/32{{/|\\\\}}crtbegin.o" +-// CHECK-MULTI64-I386: "-L[[gcc_install]]/32" ++// CHECK-MULTI64-I386: "crti.o" "crtbeginS.o" ++// CHECK-MULTI64-I386: "-L[[gcc_install:.*/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/10.2.0]]/32" + // CHECK-MULTI64-I386: "-L[[gcc_install]]/../../../../x86_64-unknown-linux/lib/../lib32" + // CHECK-MULTI64-I386: "-L[[gcc_install]]/../../../../x86_64-unknown-linux/lib" + // CHECK-MULTI64-I386: "-L[[sysroot]]/lib" +@@ -97,8 +97,8 @@ + // CHECK-MULTI64-X86-64: "{{.*}}/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/10.2.0/../../../../x86_64-unknown-linux/bin{{/|\\\\}}ld" + // CHECK-MULTI64-X86-64: "--sysroot=[[sysroot:.*/Inputs/basic_linux_tree]]" + // CHECK-MULTI64-X86-64: "-m" "elf_x86_64" +-// CHECK-MULTI64-X86-64: "crti.o" "[[gcc_install:.*/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/10.2.0]]{{/|\\\\}}crtbegin.o" +-// CHECK-MULTI64-X86-64: "-L[[gcc_install]]" ++// CHECK-MULTI64-X86-64: "crti.o" "crtbeginS.o" ++// CHECK-MULTI64-X86-64: "-L[[gcc_install:.*/Inputs/multilib_64bit_linux_tree/usr/lib/gcc/x86_64-unknown-linux/10.2.0]]" + // CHECK-MULTI64-X86-64: "-L[[gcc_install]]/../../../../x86_64-unknown-linux/lib/../lib64" + // CHECK-MULTI64-X86-64: "-L[[gcc_install]]/../../../../x86_64-unknown-linux/lib" + // CHECK-MULTI64-X86-64: "-L[[sysroot]]/lib" +diff --git a/clang/test/Driver/env.c b/clang/test/Driver/env.c +index e9b86cbcf428..47f304c0420d 100644 +--- a/clang/test/Driver/env.c ++++ b/clang/test/Driver/env.c +@@ -22,7 +22,7 @@ + // + // CHECK-LD-32-NOT: warning: + // CHECK-LD-32: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" +-// CHECK-LD-32: "{{.*}}/usr/lib/gcc/i386-unknown-linux/10.2.0{{/|\\\\}}crtbegin.o" ++// CHECK-LD-32: "crtbeginS.o" + // CHECK-LD-32: "-L[[SYSROOT]]/usr/lib/gcc/i386-unknown-linux/10.2.0" + // CHECK-LD-32: "-L[[SYSROOT]]/usr/lib/gcc/i386-unknown-linux/10.2.0/../../../../i386-unknown-linux/lib" + // CHECK-LD-32: "-L[[SYSROOT]]/lib" +diff --git a/clang/test/Driver/fsanitize.c b/clang/test/Driver/fsanitize.c +index b7d61abe7ec5..461b69b0ac15 100644 +--- a/clang/test/Driver/fsanitize.c ++++ b/clang/test/Driver/fsanitize.c +@@ -344,15 +344,15 @@ + // RUN: %clang -target x86_64-linux-gnu -fsanitize=vptr -fno-sanitize=vptr -fsanitize=undefined,address %s -### 2>&1 + // OK + +-// RUN: %clang -target x86_64-linux-gnu -fsanitize=thread %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-PIE +-// RUN: %clang -target x86_64-linux-gnu -fsanitize=memory %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-PIE ++// RUN: %clang -target x86_64-linux-gnu -fsanitize=thread %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE ++// RUN: %clang -target x86_64-linux-gnu -fsanitize=memory %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE + // RUN: %clang -target x86_64-unknown-freebsd -fsanitize=memory %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE + // RUN: %clang -target aarch64-linux-gnu -fsanitize=memory %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE + // RUN: %clang -target arm-linux-androideabi -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIC-NO-PIE + // RUN: %clang -target arm-linux-androideabi24 -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE + // RUN: %clang -target aarch64-linux-android -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE +-// RUN: %clang -target x86_64-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-PIE +-// RUN: %clang -target i386-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-PIE ++// RUN: %clang -target x86_64-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE ++// RUN: %clang -target i386-linux-gnu -fsanitize=address %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-PIE + + // CHECK-NO-PIE-NOT: "-pie" + // CHECK-NO-PIE: "-mrelocation-model" "static" +@@ -687,12 +687,12 @@ + // RUN: %clang -fno-sanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NOSP + // NOSP-NOT: "-fsanitize=safe-stack" + +-// RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP ++// RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP + // RUN: %clang -target x86_64-linux-gnu -fsanitize=address,safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP-ASAN + // RUN: %clang -target x86_64-linux-gnu -fstack-protector -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP + // RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -fstack-protector-all -### %s 2>&1 | FileCheck %s -check-prefix=SP +-// RUN: %clang -target arm-linux-androideabi -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP +-// RUN: %clang -target aarch64-linux-android -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP ++// RUN: %clang -target arm-linux-androideabi -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP ++// RUN: %clang -target aarch64-linux-android -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP + // RUN: %clang -target i386-contiki-unknown -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP + // NO-SP-NOT: stack-protector + // NO-SP: "-fsanitize=safe-stack" +diff --git a/clang/test/Driver/gcc-toolchain.cpp b/clang/test/Driver/gcc-toolchain.cpp +index 7cdba0841b8c..655457d62bf8 100644 +--- a/clang/test/Driver/gcc-toolchain.cpp ++++ b/clang/test/Driver/gcc-toolchain.cpp +@@ -23,7 +23,7 @@ + // the same precise formatting of the path as the '-internal-system' flags + // above, so we just blanket wildcard match the 'crtbegin.o'. + // CHECK: "{{[^"]*}}ld{{(.exe)?}}" +-// CHECK-SAME: "{{[^"]*}}/usr/lib/gcc/x86_64-linux-gnu/4.8{{/|\\\\}}crtbegin.o" ++// CHECK-SAME: "crtbeginS.o" + // CHECK-SAME: "-L[[TOOLCHAIN]]/usr/lib/gcc/x86_64-linux-gnu/4.8" + /// On x86_64, there is an extra usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu but we should not test it. + +@@ -35,5 +35,5 @@ + // RUN: --target=aarch64-suse-linux -B%S/Inputs/opensuse_42.2_aarch64_tree/usr | \ + // RUN: FileCheck %s --check-prefix=NO_AARCH64 + +-// AARCH64: Inputs{{[^"]+}}aarch64-suse-linux/{{[^"]+}}crt1.o" +-// NO_AARCH64-NOT: Inputs{{[^"]+}}aarch64-suse-linux/{{[^"]+}}crt1.o" ++// AARCH64: Inputs{{[^"]+}}aarch64-suse-linux/{{[^"]+}}crti.o" ++// NO_AARCH64-NOT: Inputs{{[^"]+}}aarch64-suse-linux/{{[^"]+}}crti.o" +diff --git a/clang/test/Driver/hexagon-toolchain-elf.c b/clang/test/Driver/hexagon-toolchain-elf.c +index cc11f9fcba9e..1fe8b5db587b 100644 +--- a/clang/test/Driver/hexagon-toolchain-elf.c ++++ b/clang/test/Driver/hexagon-toolchain-elf.c +@@ -487,7 +487,7 @@ + // RUN: %s 2>&1 \ + // RUN: | FileCheck -check-prefix=CHECK042 %s + // CHECK042: "-cc1" +-// CHECK042: "-mrelocation-model" "static" ++// CHECK042: "-mrelocation-model" "pic" + // CHECK042: "-mllvm" "-hexagon-small-data-threshold=8" + // CHECK042-NEXT: llvm-mc + // CHECK042: "-gpsize=8" +diff --git a/clang/test/Driver/hip-fpie-option.hip b/clang/test/Driver/hip-fpie-option.hip +index 2e296a099dea..86915f1c8c25 100644 +--- a/clang/test/Driver/hip-fpie-option.hip ++++ b/clang/test/Driver/hip-fpie-option.hip +@@ -5,11 +5,11 @@ + + // RUN: %clang -### -target x86_64-unknown-linux-gnu \ + // RUN: --offload-arch=gfx906 %s -nogpulib -nogpuinc \ +-// RUN: 2>&1 | FileCheck -check-prefixes=DEV,HOST-STATIC %s ++// RUN: 2>&1 | FileCheck -check-prefixes=DEV,HOST-PIE %s + + // RUN: %clang -### -target x86_64-unknown-linux-gnu \ + // RUN: -fgpu-rdc --offload-arch=gfx906 %s -nogpulib -nogpuinc \ +-// RUN: 2>&1 | FileCheck -check-prefixes=DEV,HOST-STATIC %s ++// RUN: 2>&1 | FileCheck -check-prefixes=DEV,HOST-PIE %s + + // RUN: %clang -### -target x86_64-unknown-linux-gnu \ + // RUN: --offload-arch=gfx906 %s -nogpulib -nogpuinc \ +diff --git a/clang/test/Driver/linux-as.c b/clang/test/Driver/linux-as.c +index 0959bd7ba0a1..4056a672b6f9 100644 +--- a/clang/test/Driver/linux-as.c ++++ b/clang/test/Driver/linux-as.c +@@ -164,7 +164,7 @@ + // CHECK-PPC-NO-MCPU-NOT: as{{.*}} "-mcpu=invalid-cpu" + // + // RUN: %clang -target sparc64-linux -mcpu=invalid-cpu -### \ +-// RUN: -no-integrated-as -c %s 2>&1 \ ++// RUN: -no-integrated-as -fno-pic -c %s 2>&1 \ + // RUN: | FileCheck -check-prefix=CHECK-SPARCV9 %s + // CHECK-SPARCV9: as + // CHECK-SPARCV9: -64 +@@ -173,7 +173,7 @@ + // CHECK-SPARCV9: -o + // + // RUN: %clang -target sparc64-linux -mcpu=invalid-cpu -### \ +-// RUN: -no-integrated-as -fpic -c %s 2>&1 \ ++// RUN: -no-integrated-as -c %s 2>&1 \ + // RUN: | FileCheck -check-prefix=CHECK-SPARCV9PIC %s + // CHECK-SPARCV9PIC: as + // CHECK-SPARCV9PIC: -64 +diff --git a/clang/test/Driver/linux-ld.c b/clang/test/Driver/linux-ld.c +index cc505588331b..c7f81d2c5e49 100644 +--- a/clang/test/Driver/linux-ld.c ++++ b/clang/test/Driver/linux-ld.c +@@ -1,4 +1,6 @@ + // UNSUPPORTED: system-windows ++// XFAIL: linux ++ + // General tests that ld invocations on Linux targets sane. Note that we use + // sysroot to make these tests independent of the host system. + // +diff --git a/clang/test/Driver/ppc-abi.c b/clang/test/Driver/ppc-abi.c +index a74a19953ca2..0452661ba5a7 100644 +--- a/clang/test/Driver/ppc-abi.c ++++ b/clang/test/Driver/ppc-abi.c +@@ -1,20 +1,20 @@ + // Check passing PowerPC ABI options to the backend. + + // RUN: %clang -target powerpc64-unknown-linux-gnu %s -### -o %t.o 2>&1 \ +-// RUN: | FileCheck -check-prefix=CHECK-ELFv1 %s ++// RUN: | FileCheck -check-prefix=CHECK-ELFv1-PIE %s + // RUN: %clang -target powerpc64-unknown-linux-gnu %s -### -o %t.o 2>&1 \ +-// RUN: -mabi=elfv1 | FileCheck -check-prefix=CHECK-ELFv1 %s ++// RUN: -mabi=elfv1 | FileCheck -check-prefix=CHECK-ELFv1-PIE %s + // RUN: %clang -target powerpc64-unknown-linux-gnu %s -### -o %t.o 2>&1 \ +-// RUN: -mabi=elfv2 | FileCheck -check-prefix=CHECK-ELFv2-BE %s ++// RUN: -mabi=elfv2 | FileCheck -check-prefix=CHECK-ELFv2-BE-PIE %s + + // RUN: %clang -target powerpc64le-unknown-linux-gnu %s -### -o %t.o 2>&1 \ +-// RUN: | FileCheck -check-prefix=CHECK-ELFv2 %s ++// RUN: | FileCheck -check-prefix=CHECK-ELFv2-PIE %s + // RUN: %clang -target powerpc64le-unknown-linux-gnu %s -### -o %t.o 2>&1 \ + // RUN: -mabi=elfv1 | FileCheck -check-prefix=CHECK-ELFv1-LE %s + // RUN: %clang -target powerpc64le-unknown-linux-gnu %s -### -o %t.o 2>&1 \ +-// RUN: -mabi=elfv2 | FileCheck -check-prefix=CHECK-ELFv2 %s ++// RUN: -mabi=elfv2 | FileCheck -check-prefix=CHECK-ELFv2-PIE %s + // RUN: %clang -target powerpc64le-unknown-linux-gnu %s -### -o %t.o 2>&1 \ +-// RUN: -mabi=altivec | FileCheck -check-prefix=CHECK-ELFv2 %s ++// RUN: -mabi=altivec | FileCheck -check-prefix=CHECK-ELFv2-PIE %s + + // RUN: %clang -target powerpc64-unknown-freebsd11 %s -### 2>&1 | FileCheck --check-prefix=CHECK-ELFv1 %s + // RUN: %clang -target powerpc64-unknown-freebsd12 %s -### 2>&1 | FileCheck --check-prefix=CHECK-ELFv1 %s +@@ -26,10 +26,14 @@ + + // CHECK-ELFv1: "-mrelocation-model" "static" + // CHECK-ELFv1: "-target-abi" "elfv1" +-// CHECK-ELFv1-LE: "-mrelocation-model" "static" ++// CHECK-ELFv1-PIE: "-mrelocation-model" "pic" "-pic-level" "2" ++// CHECK-ELFv1-PIE: "-target-abi" "elfv1" ++// CHECK-ELFv1-LE: "-mrelocation-model" "pic" "-pic-level" "2" + // CHECK-ELFv1-LE: "-target-abi" "elfv1" + // CHECK-ELFv2: "-mrelocation-model" "static" + // CHECK-ELFv2: "-target-abi" "elfv2" ++// CHECK-ELFv2-PIE: "-mrelocation-model" "pic" "-pic-level" "2" ++// CHECK-ELFv2-PIE: "-target-abi" "elfv2" + // CHECK-ELFv2-BE: "-mrelocation-model" "static" + // CHECK-ELFv2-BE: "-target-abi" "elfv2" + // CHECK-ELFv2-BE-PIE: "-mrelocation-model" "pic" "-pic-level" "2" "-pic-is-pie" +diff --git a/clang/test/Driver/riscv32-toolchain.c b/clang/test/Driver/riscv32-toolchain.c +index a5852f5f3997..233d9ef003cf 100644 +--- a/clang/test/Driver/riscv32-toolchain.c ++++ b/clang/test/Driver/riscv32-toolchain.c +@@ -84,7 +84,7 @@ + // C-RV32-LINUX-MULTI-ILP32: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot" + // C-RV32-LINUX-MULTI-ILP32: "-m" "elf32lriscv" + // C-RV32-LINUX-MULTI-ILP32: "-dynamic-linker" "/lib/ld-linux-riscv32-ilp32.so.1" +-// C-RV32-LINUX-MULTI-ILP32: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32{{/|\\\\}}crtbegin.o" ++// C-RV32-LINUX-MULTI-ILP32: "crtbeginS.o" + // C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32" + // C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib32/ilp32" + // C-RV32-LINUX-MULTI-ILP32: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib32/ilp32" +@@ -99,7 +99,7 @@ + // C-RV32-LINUX-MULTI-ILP32D: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot" + // C-RV32-LINUX-MULTI-ILP32D: "-m" "elf32lriscv" + // C-RV32-LINUX-MULTI-ILP32D: "-dynamic-linker" "/lib/ld-linux-riscv32-ilp32d.so.1" +-// C-RV32-LINUX-MULTI-ILP32D: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32d{{/|\\\\}}crtbegin.o" ++// C-RV32-LINUX-MULTI-ILP32D: "crtbeginS.o" + // C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib32/ilp32d" + // C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib32/ilp32d" + // C-RV32-LINUX-MULTI-ILP32D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib32/ilp32d" +diff --git a/clang/test/Driver/riscv64-toolchain.c b/clang/test/Driver/riscv64-toolchain.c +index e727f20bb601..a801e5eee462 100644 +--- a/clang/test/Driver/riscv64-toolchain.c ++++ b/clang/test/Driver/riscv64-toolchain.c +@@ -84,7 +84,7 @@ + // C-RV64-LINUX-MULTI-LP64: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot" + // C-RV64-LINUX-MULTI-LP64: "-m" "elf64lriscv" + // C-RV64-LINUX-MULTI-LP64: "-dynamic-linker" "/lib/ld-linux-riscv64-lp64.so.1" +-// C-RV64-LINUX-MULTI-LP64: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib64/lp64{{/|\\\\}}crtbegin.o" ++// C-RV64-LINUX-MULTI-LP64: "crtbeginS.o" + // C-RV64-LINUX-MULTI-LP64: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib64/lp64" + // C-RV64-LINUX-MULTI-LP64: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib64/lp64" + // C-RV64-LINUX-MULTI-LP64: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib64/lp64" +@@ -99,7 +99,7 @@ + // C-RV64-LINUX-MULTI-LP64D: "--sysroot={{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot" + // C-RV64-LINUX-MULTI-LP64D: "-m" "elf64lriscv" + // C-RV64-LINUX-MULTI-LP64D: "-dynamic-linker" "/lib/ld-linux-riscv64-lp64d.so.1" +-// C-RV64-LINUX-MULTI-LP64D: "{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib64/lp64d{{/|\\\\}}crtbegin.o" ++// C-RV64-LINUX-MULTI-LP64D: "crtbeginS.o" + // C-RV64-LINUX-MULTI-LP64D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/lib/gcc/riscv64-unknown-linux-gnu/7.2.0/lib64/lp64d" + // C-RV64-LINUX-MULTI-LP64D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/lib64/lp64d" + // C-RV64-LINUX-MULTI-LP64D: "-L{{.*}}/Inputs/multilib_riscv_linux_sdk/sysroot/usr/lib64/lp64d" +diff --git a/clang/test/Driver/stack-protector.c b/clang/test/Driver/stack-protector.c +index a3e40b50eed8..dfffe0d6cf85 100644 +--- a/clang/test/Driver/stack-protector.c ++++ b/clang/test/Driver/stack-protector.c +@@ -3,11 +3,11 @@ + // NOSSP-NOT: "-stack-protector-buffer-size" + + // RUN: %clang -target i386-unknown-linux -fstack-protector -### %s 2>&1 | FileCheck %s -check-prefix=SSP +-// SSP: "-stack-protector" "1" ++// SSP: "-stack-protector" "2" + // SSP-NOT: "-stack-protector-buffer-size" + + // RUN: %clang -target i386-unknown-linux -fstack-protector --param ssp-buffer-size=16 -### %s 2>&1 | FileCheck %s -check-prefix=SSP-BUF +-// SSP-BUF: "-stack-protector" "1" ++// SSP-BUF: "-stack-protector" "2" + // SSP-BUF: "-stack-protector-buffer-size" "16" + + // RUN: %clang -target i386-pc-openbsd -### %s 2>&1 | FileCheck %s -check-prefix=OPENBSD diff --git a/x86_64/extra32/lib32-clang/03.patch b/x86_64/extra32/lib32-clang/03.patch new file mode 100644 index 0000000..2de6ba6 --- /dev/null +++ b/x86_64/extra32/lib32-clang/03.patch @@ -0,0 +1,59 @@ +From 0a14674f276b598d23353290635fc62f93e9ab30 Mon Sep 17 00:00:00 2001 +From: Peter Collingbourne +Date: Fri, 3 Dec 2021 14:48:57 -0500 +Subject: [PATCH] CodeGen: Strip exception specifications from function types + in CFI type names. + +With C++17 the exception specification has been made part of the +function type, and therefore part of mangled type names. + +However, it's valid to convert function pointers with an exception +specification to function pointers with the same argument and return +types but without an exception specification, which means that e.g. a +function of type "void () noexcept" can be called through a pointer +of type "void ()". We must therefore consider the two types to be +compatible for CFI purposes. + +We can do this by stripping the exception specification before mangling +the type name, which is what this patch does. + +Differential Revision: https://reviews.llvm.org/D115015 +--- + clang/lib/CodeGen/CodeGenModule.cpp | 5 +++++ + clang/test/CodeGenCXX/cfi-icall-noexcept.cpp | 11 +++++++++++ + 2 files changed, 16 insertions(+) + create mode 100644 clang/test/CodeGenCXX/cfi-icall-noexcept.cpp + +diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp +index 9ba1a5c25e81a..39044617d6774 100644 +--- a/clang/lib/CodeGen/CodeGenModule.cpp ++++ b/clang/lib/CodeGen/CodeGenModule.cpp +@@ -6398,6 +6398,11 @@ void CodeGenModule::EmitOMPThreadPrivateDecl(const OMPThreadPrivateDecl *D) { + llvm::Metadata * + CodeGenModule::CreateMetadataIdentifierImpl(QualType T, MetadataTypeMap &Map, + StringRef Suffix) { ++ if (auto *FnType = T->getAs()) ++ T = getContext().getFunctionType( ++ FnType->getReturnType(), FnType->getParamTypes(), ++ FnType->getExtProtoInfo().withExceptionSpec(EST_None)); ++ + llvm::Metadata *&InternalId = Map[T.getCanonicalType()]; + if (InternalId) + return InternalId; +diff --git a/clang/test/CodeGenCXX/cfi-icall-noexcept.cpp b/clang/test/CodeGenCXX/cfi-icall-noexcept.cpp +new file mode 100644 +index 0000000000000..eabc4862b4c52 +--- /dev/null ++++ b/clang/test/CodeGenCXX/cfi-icall-noexcept.cpp +@@ -0,0 +1,11 @@ ++// RUN: %clang_cc1 -triple x86_64-unknown-linux -fsanitize=cfi-icall -emit-llvm -std=c++17 -o - %s | FileCheck %s ++ ++// Tests that exception specifiers are stripped when forming the ++// mangled CFI type name. ++ ++void f() noexcept {} ++ ++// CHECK: define{{.*}} void @_Z1fv({{.*}} !type [[TS1:![0-9]+]] !type [[TS2:![0-9]+]] ++ ++// CHECK: [[TS1]] = !{i64 0, !"_ZTSFvvE"} ++// CHECK: [[TS2]] = !{i64 0, !"_ZTSFvvE.generalized"} diff --git a/x86_64/extra32/lib32-clang/PKGBUILD b/x86_64/extra32/lib32-clang/PKGBUILD new file mode 100644 index 0000000..baf8c48 --- /dev/null +++ b/x86_64/extra32/lib32-clang/PKGBUILD @@ -0,0 +1,61 @@ +pkgname=lib32-clang +rname=clang +pkgver=13.0.1 +pkgrel=1 +pkgdesc="C language family frontend for LLVM (32-bit)" +arch=('x86_64') +url="https://clang.llvm.org/" +depends=('lib32-llvm') +makedepends=('lib32-llvm' 'cmake' 'ninja' 'python3') +psource=https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver +source=($psource/$rname-$pkgver.src.tar.xz + $psource/$rname-tools-extra-$pkgver.src.tar.xz + $psource/llvm-$pkgver.src.tar.xz + 01.patch + 02.patch + 03.patch) + +prepare() { + cd "$srcdir/clang-$pkgver.src" + mkdir -p build + + mv $srcdir/clang-tools-extra-$pkgver.src tools/extra + + patch -Np2 -i ../01.patch + patch -Np2 -i ../02.patch + patch -Np2 -i ../03.patch + + 2to3 -wn --no-diffs \ + tools/extra/clang-include-fixer/find-all-symbols/tool/run-find-all-symbols.py +} + +build() { + cd "$srcdir/clang-$pkgver.src/build" + + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cmake \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLLVM_LIBDIR_SUFFIX=32 \ + -DCMAKE_C_FLAGS:STRING=-m32 \ + -DCMAKE_CXX_FLAGS:STRING=-m32 \ + -DLLVM_CONFIG="/usr/bin/llvm-config32" \ + -DLLVM_LINK_LLVM_DYLIB=ON \ + -DCLANG_LINK_CLANG_DYLIB=ON \ + -DLLVM_ENABLE_RTTI=ON \ + -DLLVM_BUILD_TESTS=OFF \ + -DLLVM_INCLUDE_DOCS=OFF \ + -DLLVM_MAIN_SRC_DIR="$srcdir/llvm-$pkgver.src" \ + .. + + ninja +} + +package() { + cd "$srcdir/clang-$pkgver.src/build" + + DESTDIR="$pkgdir" ninja install + rm -rf "$pkgdir"/usr/{bin,include,libexec,share} +} diff --git a/x86_64/extra32/lib32-cmocka/PKGBUILD b/x86_64/extra32/lib32-cmocka/PKGBUILD new file mode 100644 index 0000000..ef91f80 --- /dev/null +++ b/x86_64/extra32/lib32-cmocka/PKGBUILD @@ -0,0 +1,34 @@ +_name=cmocka +pkgname=lib32-cmocka +pkgver=1.1.5 +pkgrel=1 +arch=('x86_64') +depends=('cmocka') +makedepends=('cmake') +source=("https://cmocka.org/files/1.1/${_name}-${pkgver}.tar.xz") + +prepare() { + mv -v "${_name}-${pkgver}" "${pkgname}-${pkgver}" +} + +build() { + cd "${pkgname}-${pkgver}" + + export CC='gcc -m32' + export PKG_CONFIG_PATH='/usr/lib32/pkgconfig' + cmake -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib32 \ + -DCMAKE_BUILD_TYPE=Release \ + -DUNIT_TESTING=ON \ + -B build \ + -S . + + make VERBOSE=1 -C build +} + +package() { + cd "${pkgname}-${pkgver}" + + make install DESTDIR="${pkgdir}" -C build + rm -rvf "${pkgdir}/usr/include" +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-colord/PKGBUILD b/x86_64/extra32/lib32-colord/PKGBUILD new file mode 100644 index 0000000..2d8d775 --- /dev/null +++ b/x86_64/extra32/lib32-colord/PKGBUILD @@ -0,0 +1,53 @@ +pkgname=lib32-colord +pkgver=1.4.5 +pkgrel=1 +arch=(x86_64) +depends=( + colord lib32-glib2 lib32-systemd lib32-lcms +) +makedepends=( + gobject-introspection intltool lib32-dbus lib32-dconf lib32-libgudev + lib32-libgusb lib32-polkit lib32-sqlite3 +) +options=(!emptydirs) +source=( + git+https://github.com/hughsie/colord#tag=${pkgver} +) + +prepare() { + cd colord + + # Allow turning off introspection + git cherry-pick -n e73723cabe4d5a2e2b281d2f1ea751b2d75bccc6 +} + +build() { + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG=i686-pc-linux-gnu-pkg-config + + meson colord build \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + -D docs=false \ + -D man=false \ + -D tests=false \ + -D libcolordcompat=true \ + -D sane=false \ + -D introspection=false \ + -D vapi=false \ + -D print_profiles=false \ + -D daemon_user=colord + + meson compile -C build +} + +package() { + DESTDIR="${pkgdir}" meson install -C build + + rm -fr "${pkgdir}"/usr/{bin,include,lib,share,libexec/colord,libexec/colord-session} + rm -fr "${pkgdir}"/usr/lib32/{colord-plugins,colord-sensors} + rm -f "${pkgdir}"/usr/lib32/libcolor{dprivate,hug}* + rm -f "${pkgdir}"/usr/lib32/pkgconfig/colorhug.pc + rm -fr "${pkgdir}"/lib +} diff --git a/x86_64/extra32/lib32-cups/PKGBUILD b/x86_64/extra32/lib32-cups/PKGBUILD new file mode 100644 index 0000000..b9b03ef --- /dev/null +++ b/x86_64/extra32/lib32-cups/PKGBUILD @@ -0,0 +1,35 @@ +_pkgbasename=cups +pkgname=lib32-$_pkgbasename +pkgver=2.4.1 +pkgrel=1 +arch=('x86_64') +depends=(lib32-libtiff lib32-libpng lib32-gnutls cups) +source=(https://github.com/OpenPrinting/cups/releases/download/v${pkgver}/cups-${pkgver}-source.tar.gz{,.sig} + cups-freebind.patch + guid.patch +) + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cd cups-${pkgver} + + aclocal -I config-scripts + autoconf -I config-scripts + + ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \ + --disable-ldap --enable-raw-printing --disable-gssapi --disable-dbus \ + --enable-ssl=yes--enable-threads --enable-libusb=no \ + --with-dnssd=no \ + --with-optim="$CFLAGS" --libdir=/usr/lib32 + + make libs +} + +package() { + cd cups-${pkgver} + make BUILDROOT="${pkgdir}" install-libs + rm -rf "$pkgdir/usr/lib" +} diff --git a/x86_64/extra32/lib32-cups/cups-freebind.patch b/x86_64/extra32/lib32-cups/cups-freebind.patch new file mode 100644 index 0000000..6d9ba43 --- /dev/null +++ b/x86_64/extra32/lib32-cups/cups-freebind.patch @@ -0,0 +1,15 @@ +diff -up cups-2.0.2/cups/http-addr.c.freebind cups-2.0.2/cups/http-addr.c +--- cups-2.0.2/cups/http-addr.c.freebind 2015-02-10 14:46:33.000000000 +0100 ++++ cups-2.0.2/cups/http-addr.c 2015-02-10 14:50:35.074759141 +0100 +@@ -186,6 +186,10 @@ httpAddrListen(http_addr_t *addr, /* I - + val = 1; + setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, CUPS_SOCAST &val, sizeof(val)); + ++#ifdef __linux ++ setsockopt(fd, IPPROTO_IP, IP_FREEBIND, CUPS_SOCAST &val, sizeof(val)); ++#endif /* __linux */ ++ + #ifdef IPV6_V6ONLY + if (addr->addr.sa_family == AF_INET6) + setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, CUPS_SOCAST &val, sizeof(val)); +diff -up cups-2.0.2/scheduler/listen.c.freebind cups-2.0.2/scheduler/listen.c diff --git a/x86_64/extra32/lib32-cups/guid.patch b/x86_64/extra32/lib32-cups/guid.patch new file mode 100644 index 0000000..b1bd192 --- /dev/null +++ b/x86_64/extra32/lib32-cups/guid.patch @@ -0,0 +1,39 @@ +--- cups-2.4.0/scheduler/cups-exec.c 2021-11-29 16:19:34.235186064 +0100 ++++ cups-2.4.0/scheduler/cups-exec.c.new 2021-11-29 16:25:30.764049649 +0100 +@@ -134,9 +134,14 @@ main(int argc, /* I - Number of command-line args */ + # if CUPS_SNAP + if (setgroups(0, NULL)) + # else +- if (setgroups(1, &gid)) +-# endif /* CUPS_SNAP */ ++#include ++ struct passwd * pwd = getpwuid(uid); ++ if(initgroups(pwd->pw_name,pwd->pw_gid)) ++ { ++ fprintf(stderr, "DEBUG: initgroups failed\n"); + exit(errno + 100); ++ } ++# endif /* CUPS_SNAP */ + + if (uid && setuid(uid)) + exit(errno + 100); +--- cups-2.4.0/scheduler/util.c 2021-11-29 15:27:31.000000000 +0100 ++++ cups-2.4.0/scheduler/util.c.new 2021-11-29 16:29:58.810719066 +0100 +@@ -296,7 +296,16 @@ + */ + + if (!getuid() && user) +- setuid(user); /* Run as restricted user */ ++ { ++#include ++ struct passwd * pwd = getpwuid(user); ++ if(initgroups(pwd->pw_name,pwd->pw_gid)) ++ { ++ fprintf(stderr, "DEBUG: initgroups failed\n"); ++ exit(errno + 100); ++ } ++ setuid(user); /* Run as restricted user */ ++ } + + if ((fd = open("/dev/null", O_RDONLY)) > 0) + { diff --git a/x86_64/extra32/lib32-curl/PKGBUILD b/x86_64/extra32/lib32-curl/PKGBUILD new file mode 100644 index 0000000..bd8a95a --- /dev/null +++ b/x86_64/extra32/lib32-curl/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=lib32-curl +pkgver=7.81.0 +pkgrel=1 +pkgdesc='An URL retrieval utility and library (32-bit)' +arch=('x86_64') +url='https://curl.haxx.se' +depends=('curl' 'lib32-brotli' 'lib32-libidn2' 'lib32-zlib' 'lib32-zstd' 'lib32-openssl') +source=("https://curl.haxx.se/download/curl-${pkgver}.tar.gz") + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + mkdir -p build && cd build + + ../curl-${pkgver}/configure \ + --prefix='/usr' \ + --enable-threaded-resolver \ + --with-gssapi \ + --with-openssl \ + --with-random='/dev/urandom' \ + --with-ca-bundle='/etc/ssl/certs/ca-certificates.crt' \ + --libdir='/usr/lib32' + + make +} + +package() { + cd build + + make DESTDIR="${pkgdir}" install + + rm -rf $pkgdir/usr/{bin,include,share} +} diff --git a/x86_64/extra32/lib32-dbus/PKGBUILD b/x86_64/extra32/lib32-dbus/PKGBUILD new file mode 100644 index 0000000..c834e80 --- /dev/null +++ b/x86_64/extra32/lib32-dbus/PKGBUILD @@ -0,0 +1,56 @@ +pkgname=lib32-dbus +pkgver=1.12.20 +pkgrel=1 +arch=('x86_64') +depends=(systemd) +makedepends=(lib32-glib2 lib32-expat git autoconf-archive) +source=(https://dbus.freedesktop.org/releases/dbus/dbus-$pkgver.tar.gz + no-fatal-warnings.diff) + +prepare() { + cd dbus-$pkgver + + patch -Np1 -i ../no-fatal-warnings.diff + + NOCONFIGURE=1 ./autogen.sh +} + +build() { + cd dbus-$pkgver + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + #export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --libexecdir=/usr/lib/dbus-1.0 \ + runstatedir=/var/run \ + --with-console-auth-dir=/var/run/console \ + --with-dbus-user=dbus \ + --with-system-pid-file=/var/run/dbus/pid \ + --with-system-socket=/var/run/dbus/system_bus_socket \ + --with-systemdsystemunitdir=/usr/lib/systemd/system \ + --enable-systemd \ + --enable-user-session \ + --with-x + + make +} + +package() { + cd dbus-$pkgver + + DESTDIR="$pkgdir" make -C dbus install + + mkdir -p $pkgdir/usr/lib32/pkgconfig + cp -f dbus-1-uninstalled.pc $pkgdir/usr/lib32/pkgconfig/ + cp -f dbus-1.pc $pkgdir/usr/lib32/pkgconfig/ + + rm -rf "$pkgdir"/{etc,var} + rm -rf "$pkgdir"/usr/{bin,include,lib,share} +} diff --git a/x86_64/extra32/lib32-dbus/dbus-1-uninstalled.pc b/x86_64/extra32/lib32-dbus/dbus-1-uninstalled.pc new file mode 100644 index 0000000..c62a4f1 --- /dev/null +++ b/x86_64/extra32/lib32-dbus/dbus-1-uninstalled.pc @@ -0,0 +1,20 @@ +abs_top_builddir=/home/drunk/Drunk-PKGBUILD/x86_64/extra32/lib32-dbus/src/dbus-1.12.20 +abs_top_srcdir=/home/drunk/Drunk-PKGBUILD/x86_64/extra32/lib32-dbus/src/dbus-1.12.20 +prefix= +exec_prefix= +bindir=${exec_prefix}/bin +system_bus_default_address=unix:path=/var/run/dbus/system_bus_socket +datarootdir=${prefix}/share +datadir=${datarootdir} +sysconfdir=/etc +session_bus_services_dir=${datadir}/dbus-1/services +system_bus_services_dir=${datadir}/dbus-1/system-services +interfaces_dir=${datadir}/dbus-1/interfaces +daemondir=${bindir} + +Name: dbus +Description: Free desktop message bus (uninstalled copy) +Version: 1.12.20 +Libs: ${abs_top_builddir}/dbus/libdbus-1.la +Libs.private: -lpthread -L/lib32 -lsystemd +Cflags: -I${abs_top_srcdir} diff --git a/x86_64/extra32/lib32-dbus/dbus-1.pc b/x86_64/extra32/lib32-dbus/dbus-1.pc new file mode 100644 index 0000000..175e6a1 --- /dev/null +++ b/x86_64/extra32/lib32-dbus/dbus-1.pc @@ -0,0 +1,21 @@ +original_prefix=/usr +prefix=${original_prefix} +exec_prefix=${prefix} +bindir=${exec_prefix}/bin +libdir=/usr/lib32 +includedir=${prefix}/include +system_bus_default_address=unix:path=/var/run/dbus/system_bus_socket +datarootdir=${prefix}/share +datadir=${datarootdir} +sysconfdir=/etc +session_bus_services_dir=${datadir}/dbus-1/services +system_bus_services_dir=${datadir}/dbus-1/system-services +interfaces_dir=${datadir}/dbus-1/interfaces +daemondir=${bindir} + +Name: dbus +Description: Free desktop message bus +Version: 1.12.20 +Libs: -L${libdir} -ldbus-1 +Libs.private: -lpthread -L/lib32 -lsystemd +Cflags: -I${includedir}/dbus-1.0 -I${libdir}/dbus-1.0/include diff --git a/x86_64/extra32/lib32-dbus/no-fatal-warnings.diff b/x86_64/extra32/lib32-dbus/no-fatal-warnings.diff new file mode 100644 index 0000000..459da90 --- /dev/null +++ b/x86_64/extra32/lib32-dbus/no-fatal-warnings.diff @@ -0,0 +1,13 @@ +diff --git i/dbus/dbus-internals.c w/dbus/dbus-internals.c +index 267aef97..b1064e85 100644 +--- i/dbus/dbus-internals.c ++++ w/dbus/dbus-internals.c +@@ -185,7 +185,7 @@ const char *_dbus_no_memory_message = "Not enough memory"; + + static dbus_bool_t warn_initted = FALSE; + static dbus_bool_t fatal_warnings = FALSE; +-static dbus_bool_t fatal_warnings_on_check_failed = TRUE; ++static dbus_bool_t fatal_warnings_on_check_failed = FALSE; + + static void + init_warnings(void) diff --git a/x86_64/extra32/lib32-dconf/PKGBUILD b/x86_64/extra32/lib32-dconf/PKGBUILD new file mode 100644 index 0000000..e1f3039 --- /dev/null +++ b/x86_64/extra32/lib32-dconf/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=lib32-dconf +pkgver=0.40.0 +pkgrel=1 +arch=(x86_64) +depends=( + dconf lib32-glib2 +) +makedepends=( + bash-completion docbook-xsl git intltool meson python3 vala +) +ltag=4c0a26052efafae923eba42d14c5cb88da745de2 +source=(git+https://gitlab.gnome.org/GNOME/dconf.git#tag=${ltag}) + +build() { + export CC='gcc -m32' + export PKG_CONFIG_PATH=/usr/lib32/pkgconfig + + meson dconf build \ + --prefix=/usr \ + --libdir=/usr/lib32 + + ninja -C build +} + +package() { + DESTDIR="${pkgdir}" ninja -C build install + + rm -rf "${pkgdir}"/usr/{bin,include,lib,share,libexec/dconf-service} +} diff --git a/x86_64/extra32/lib32-directx-headers/PKGBUILD b/x86_64/extra32/lib32-directx-headers/PKGBUILD new file mode 100644 index 0000000..513ec73 --- /dev/null +++ b/x86_64/extra32/lib32-directx-headers/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=lib32-directx-headers +pkgdesc="DirectX headers for using D3D12" +pkgver=1.602.0 +pkgrel=1 +arch=('x86_64') +makedepends=('meson') +source=(https://github.com/microsoft/DirectX-Headers/archive/refs/tags/v$pkgver.tar.gz) + +build() { + # LTO breaks mesa... + export CXXFLAGS="$CXXFLAGS -fno-lto" + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + meson \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + DirectX-Headers-$pkgver build \ + -Dbuild-test=false + + ninja -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + + rm -rf "${pkgdir}"/usr/{include,share,bin} +} diff --git a/x86_64/extra32/lib32-duktape/PKGBUILD b/x86_64/extra32/lib32-duktape/PKGBUILD new file mode 100644 index 0000000..e1f25a0 --- /dev/null +++ b/x86_64/extra32/lib32-duktape/PKGBUILD @@ -0,0 +1,33 @@ +pkgname=lib32-duktape +pkgver=2.6.0 +pkgrel=1 +arch=('x86_64') +makedepends=(setconf) +depends=(glibc) +source=(https://duktape.org/duktape-$pkgver.tar.xz + duktape.pc) + +prepare() { + cd duktape-$pkgver + + mv Makefile.sharedlibrary Makefile + sed 's/-Wall -Wextra/$(CFLAGS)/g' -i Makefile + setconf Makefile INSTALL_PREFIX "$pkgdir/usr" + setconf "$srcdir/duktape.pc" Version "$pkgver" +} + +build() { + CFLAGS="$CFLAGS -m32 -D DUK_USE_FASTINT -w" make -C duktape-$pkgver +} + +package() { + install -d "$pkgdir/usr/include" + install -Dm644 duktape.pc "$pkgdir/usr/lib32/pkgconfig/duktape.pc" + + cd duktape-$pkgver + make DESTDIR=$pkgdir install + + mv $pkgdir/usr/lib/* $pkgdir/usr/lib32/ + + rm -fr "$pkgdir"/{etc,usr/{bin,include,lib,share}} +} diff --git a/x86_64/extra32/lib32-duktape/duktape.pc b/x86_64/extra32/lib32-duktape/duktape.pc new file mode 100644 index 0000000..b548cf9 --- /dev/null +++ b/x86_64/extra32/lib32-duktape/duktape.pc @@ -0,0 +1,10 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib32 +includedir=${prefix}/include + +Name: duktape +Description: Embeddable Javascript engine +Version: 2.6.0 +Libs: -L${libdir} -lduktape +Cflags: -I${includedir} diff --git a/x86_64/extra32/lib32-e2fsprogs/PKGBUILD b/x86_64/extra32/lib32-e2fsprogs/PKGBUILD new file mode 100644 index 0000000..501e59e --- /dev/null +++ b/x86_64/extra32/lib32-e2fsprogs/PKGBUILD @@ -0,0 +1,33 @@ +pkgname=lib32-e2fsprogs +pkgver=1.46.5 +pkgrel=1 +pkgdesc='Ext2/3/4 filesystem libraries (32-bit)' +arch=('x86_64') +url='http://e2fsprogs.sourceforge.net' +depends=('e2fsprogs') +makedepends=('bc' 'lib32-util-linux') +source=("https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v${pkgver}/e2fsprogs-${pkgver}.tar.xz") + +build() { + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG_PATH='/usr/lib32/pkgconfig' + + cd "${srcdir}/e2fsprogs-${pkgver}" + + ./configure --prefix=/usr \ + --libdir=/usr/lib32 \ + --with-root-prefix='' \ + --enable-elf-shlibs \ + --disable-{debugfs,imager,resizer,fsck,uuidd,libuuid,libblkid} + + make +} + +package() { + cd "${srcdir}/e2fsprogs-${pkgver}" + + make DESTDIR="${pkgdir}" install-libs + + rm -rf "${pkgdir}"/usr/{bin,include,share} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-elfutils/PKGBUILD b/x86_64/extra32/lib32-elfutils/PKGBUILD new file mode 100644 index 0000000..74b4ad5 --- /dev/null +++ b/x86_64/extra32/lib32-elfutils/PKGBUILD @@ -0,0 +1,57 @@ +_name=elfutils +pkgname=lib32-elfutils +pkgver=0.186 +pkgrel=3 +pkgdesc="Handle ELF object files and DWARF debugging information (libraries) (32-bit)" +arch=(x86_64) +url="https://sourceware.org/elfutils/" +license=(LGPL3 GPL3) +depends=(lib32-xz lib32-curl lib32-zlib elfutils) +# NOTE: the shared objects can not be added to provides as they are not versioned +source=("https://sourceware.org/elfutils/ftp/${pkgver}/elfutils-${pkgver}.tar.bz2") + +prepare() { + ( + cd "${_name}-${pkgver}" + autoreconf -fiv + ) + + cp -av "${_name}-${pkgver}" "${_name}-test-${pkgver}" +} + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + ( + # fat-lto-objects is required for non-mangled .a files in libelf + CFLAGS+=" -ffat-lto-objects" + cd "${_name}-${pkgver}" + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --libdir=/usr/lib32 \ + --disable-debuginfod + make + ) + ( + # debugging information is required for test-suite + CFLAGS+=" -g" + # fat-lto-objects is required for non-mangled .a files in libelf + CFLAGS+=" -ffat-lto-objects" + cd "${_name}-test-${pkgver}" + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --libdir=/usr/lib32 \ + --disable-debuginfod + make + ) +} + +package() { + cd "${_name}-${pkgver}" + + make DESTDIR="${pkgdir}" install + # remove anything that would conflict with elfutils and debuginfod + rm -rf "${pkgdir}/"{etc,usr/{bin,include,share}} +} diff --git a/x86_64/extra32/lib32-expat/PKGBUILD b/x86_64/extra32/lib32-expat/PKGBUILD new file mode 100644 index 0000000..f3bc608 --- /dev/null +++ b/x86_64/extra32/lib32-expat/PKGBUILD @@ -0,0 +1,39 @@ +_name=expat +pkgname=lib32-expat +pkgver=2.4.2 +pkgrel=1 +pkgdesc='An XML Parser library' +arch=(x86_64) +url=https://libexpat.github.io/ +license=(MIT) +depends=( + "expat" +) +makedepends=(cmake) +source=("https://github.com/libexpat/libexpat/releases/download/R_${pkgver//./_}/${_name}-${pkgver}.tar.bz2") + +prepare() { + mv -v "${_name}-$pkgver" "$pkgname-$pkgver" +} + +build() { + cd "$pkgname-$pkgver" + export CC='gcc -m32' + export CXX='c++ -m32' + export PKG_CONFIG_PATH=/usr/lib32/pkgconfig + cmake -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib32 \ + -DCMAKE_BUILD_TYPE='None' \ + -W no-dev \ + -B build \ + -S . + + make VERBOSE=1 -C build +} + +package() { + cd "$pkgname-$pkgver" + make VERBOSE=1 DESTDIR="$pkgdir" -C build install + ln -sf libexpat.so.1.8.2 $pkgdir/usr/lib32/libexpat.so + rm -rf "${pkgdir}"/usr/{bin,include,share/man,share/doc} +} diff --git a/x86_64/extra32/lib32-ffmpeg/PKGBUILD b/x86_64/extra32/lib32-ffmpeg/PKGBUILD new file mode 100644 index 0000000..f1b63d9 --- /dev/null +++ b/x86_64/extra32/lib32-ffmpeg/PKGBUILD @@ -0,0 +1,59 @@ +pkgname=lib32-ffmpeg +pkgver=4.4.1 +pkgrel=1 +arch=('x86_64') +depends=(lib32-freetype2 lib32-libvorbis lib32-pulseaudio) +makedepends=(nasm yasm) +source=(https://ffmpeg.org/releases/ffmpeg-$pkgver.tar.xz) + +prepare() { + cd ffmpeg-$pkgver + + sed -i 's/-lflite"/-lflite -lasound"/' configure +} + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cd ffmpeg-$pkgver + + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --cc="gcc -m32" \ + --shlibdir=/usr/lib32 \ + --disable-gpl \ + --disable-version3 \ + --enable-nonfree \ + --enable-shared \ + --disable-debug \ + --disable-avresample \ + --disable-libass \ + --disable-libfdk-aac \ + --enable-libfreetype \ + --disable-libmp3lame \ + --disable-libopus \ + --disable-libtheora \ + --enable-libvorbis \ + --disable-libvpx \ + --disable-libx264 \ + --disable-libx265 \ + --enable-openssl + + make +} + +package() { + cd ffmpeg-$pkgver + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + make DESTDIR=$pkgdir install + + rm -rf $pkgdir/usr/{bin,etc,include,lib,share} +} diff --git a/x86_64/extra32/lib32-flex/PKGBUILD b/x86_64/extra32/lib32-flex/PKGBUILD new file mode 100644 index 0000000..671fa15 --- /dev/null +++ b/x86_64/extra32/lib32-flex/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=lib32-flex +pkgver=2.6.4 +pkgrel=1 +pkgdesc='A tool for generating text-scanning programs' +arch=('x86_64') +url='http://flex.sourceforge.net' +depends=('flex') +source=("https://github.com/westes/flex/releases/download/v${pkgver}/flex-${pkgver}.tar.gz") + +build() { + cd flex-${pkgver} + + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG_PATH='/usr/lib32/pkgconfig' + + ./configure \ + --prefix='/usr' \ + --libdir='/usr/lib32' + + make +} + +package() { + cd flex-${pkgver} + + make DESTDIR="${pkgdir}" install + rm -rf "${pkgdir}"/usr/{include,share,bin} +} diff --git a/x86_64/extra32/lib32-fontconfig/PKGBUILD b/x86_64/extra32/lib32-fontconfig/PKGBUILD new file mode 100644 index 0000000..e5331d2 --- /dev/null +++ b/x86_64/extra32/lib32-fontconfig/PKGBUILD @@ -0,0 +1,45 @@ +pkgname=lib32-fontconfig +rname=fontconfig +pkgver=2.14.0 +pkgrel=1 +pkgdesc='Library for configuring and customizing font access' +url=https://www.freedesktop.org/wiki/Software/fontconfig/ +arch=(x86_64) +depends=(fontconfig lib32-expat lib32-freetype2) +makedepends=(git meson gperf lib32-freetype2) +install=fontconfig-32.install +source=( + https://freedesktop.org/software/$rname/release/$rname-$pkgver.tar.gz + fontconfig-32.hook +) + +build() { + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG=i686-pc-linux-gnu-pkg-config + + meson $rname-$pkgver build \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --sysconfdir=/etc \ + --localstatedir=/var \ + -D doc-txt=disabled \ + -D doc-pdf=disabled \ + -D doc-html=disabled + + meson compile -C build +} + +package() { + cd build + + export FONTCONFIG_PATH=/etc/fonts + meson install --destdir "$pkgdir" + + cd .. + + rm -r "${pkgdir}"/{etc,usr/{include,share}} + mv "${pkgdir}"/usr/bin/fc-cache{,-32} + find "${pkgdir}"/usr/bin -type f -not -name '*-32' -delete + install -Dm 644 *.hook -t "${pkgdir}"/usr/share/libalpm/hooks/ +} diff --git a/x86_64/extra32/lib32-fontconfig/fontconfig-32.hook b/x86_64/extra32/lib32-fontconfig/fontconfig-32.hook new file mode 100644 index 0000000..a982ea7 --- /dev/null +++ b/x86_64/extra32/lib32-fontconfig/fontconfig-32.hook @@ -0,0 +1,14 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = etc/fonts/conf.d/* +Target = usr/share/fonts/* +Target = usr/share/fontconfig/conf.avail/* +Target = usr/share/fontconfig/conf.default/* + +[Action] +Description = Updating 32-bit fontconfig cache... +When = PostTransaction +Exec = /usr/bin/fc-cache-32 -s diff --git a/x86_64/extra32/lib32-fontconfig/fontconfig-32.install b/x86_64/extra32/lib32-fontconfig/fontconfig-32.install new file mode 100644 index 0000000..0f0b385 --- /dev/null +++ b/x86_64/extra32/lib32-fontconfig/fontconfig-32.install @@ -0,0 +1,9 @@ +post_upgrade() { + # a full forced directory scan is required here + echo "Rebuilding 32-bit fontconfig cache..." + /usr/bin/fc-cache-32 -rs +} + +post_install() { + post_upgrade $1 0 +} diff --git a/x86_64/extra32/lib32-freetype2/0001-Enable-table-validation-modules.patch b/x86_64/extra32/lib32-freetype2/0001-Enable-table-validation-modules.patch new file mode 100644 index 0000000..5adeb21 --- /dev/null +++ b/x86_64/extra32/lib32-freetype2/0001-Enable-table-validation-modules.patch @@ -0,0 +1,42 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Tue, 23 Jun 2015 08:40:29 +0200 +Subject: [PATCH] Enable table validation modules + +--- + modules.cfg | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/modules.cfg b/modules.cfg +index 30f7fac45abd..a9a4703989b9 100644 +--- a/modules.cfg ++++ b/modules.cfg +@@ -114,26 +114,26 @@ AUX_MODULES += cache + + # TrueType GX/AAT table validation. Needs `ftgxval.c' below. + # +-# AUX_MODULES += gxvalid ++AUX_MODULES += gxvalid + + # Support for streams compressed with gzip (files with suffix .gz). + # + # See include/freetype/ftgzip.h for the API. + AUX_MODULES += gzip + + # Support for streams compressed with LZW (files with suffix .Z). + # + # See include/freetype/ftlzw.h for the API. + AUX_MODULES += lzw + + # Support for streams compressed with bzip2 (files with suffix .bz2). + # + # See include/freetype/ftbzip2.h for the API. + AUX_MODULES += bzip2 + + # OpenType table validation. Needs `ftotval.c' below. + # +-# AUX_MODULES += otvalid ++AUX_MODULES += otvalid + + # Auxiliary PostScript driver component to share common code. + # diff --git a/x86_64/extra32/lib32-freetype2/0002-Enable-subpixel-rendering.patch b/x86_64/extra32/lib32-freetype2/0002-Enable-subpixel-rendering.patch new file mode 100644 index 0000000..03f911a --- /dev/null +++ b/x86_64/extra32/lib32-freetype2/0002-Enable-subpixel-rendering.patch @@ -0,0 +1,22 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Tue, 23 Jun 2015 08:43:07 +0200 +Subject: [PATCH] Enable subpixel rendering + +--- + include/freetype/config/ftoption.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/include/freetype/config/ftoption.h b/include/freetype/config/ftoption.h +index 4227fd376e41..32da3fa03903 100644 +--- a/include/freetype/config/ftoption.h ++++ b/include/freetype/config/ftoption.h +@@ -123,7 +123,7 @@ FT_BEGIN_HEADER + * When this macro is not defined, FreeType offers alternative LCD + * rendering technology that produces excellent output. + */ +-/* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ ++#define FT_CONFIG_OPTION_SUBPIXEL_RENDERING + + + /************************************************************************** diff --git a/x86_64/extra32/lib32-freetype2/0003-Enable-infinality-subpixel-hinting.patch b/x86_64/extra32/lib32-freetype2/0003-Enable-infinality-subpixel-hinting.patch new file mode 100644 index 0000000..dc0adb2 --- /dev/null +++ b/x86_64/extra32/lib32-freetype2/0003-Enable-infinality-subpixel-hinting.patch @@ -0,0 +1,24 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Mon, 29 Aug 2016 08:43:10 +0200 +Subject: [PATCH] Enable infinality subpixel hinting + +--- + include/freetype/config/ftoption.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/include/freetype/config/ftoption.h b/include/freetype/config/ftoption.h +index 32da3fa03903..0dd4021e2433 100644 +--- a/include/freetype/config/ftoption.h ++++ b/include/freetype/config/ftoption.h +@@ -688,8 +688,8 @@ FT_BEGIN_HEADER + * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx + */ + /* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 1 */ +-#define TT_CONFIG_OPTION_SUBPIXEL_HINTING 2 +-/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING ( 1 | 2 ) */ ++/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 2 */ ++#define TT_CONFIG_OPTION_SUBPIXEL_HINTING ( 1 | 2 ) + + + /************************************************************************** diff --git a/x86_64/extra32/lib32-freetype2/0004-Enable-long-PCF-family-names.patch b/x86_64/extra32/lib32-freetype2/0004-Enable-long-PCF-family-names.patch new file mode 100644 index 0000000..2c93295 --- /dev/null +++ b/x86_64/extra32/lib32-freetype2/0004-Enable-long-PCF-family-names.patch @@ -0,0 +1,22 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" +Date: Sun, 14 May 2017 18:09:31 +0200 +Subject: [PATCH] Enable long PCF family names + +--- + include/freetype/config/ftoption.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/include/freetype/config/ftoption.h b/include/freetype/config/ftoption.h +index 0dd4021e2433..8da3073b6d71 100644 +--- a/include/freetype/config/ftoption.h ++++ b/include/freetype/config/ftoption.h +@@ -877,7 +877,7 @@ FT_BEGIN_HEADER + * If this option is activated, it can be controlled with the + * `no-long-family-names` property of the 'pcf' driver module. + */ +-/* #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */ ++#define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES + + + /*************************************************************************/ diff --git a/x86_64/extra32/lib32-freetype2/PKGBUILD b/x86_64/extra32/lib32-freetype2/PKGBUILD new file mode 100644 index 0000000..fdededa --- /dev/null +++ b/x86_64/extra32/lib32-freetype2/PKGBUILD @@ -0,0 +1,40 @@ +pkgname=lib32-freetype2 +pkgver=2.11.1 +pkgrel=1 +pkgdesc="Font rasterization library (32-bit)" +url="https://www.freetype.org/" +arch=(x86_64) +depends=(lib32-zlib lib32-bzip2 lib32-libpng lib32-brotli freetype2) +makedepends=(meson) +source=(https://download-mirror.savannah.gnu.org/releases/freetype/freetype-$pkgver.tar.xz{,.sig} + 0001-Enable-table-validation-modules.patch + 0002-Enable-subpixel-rendering.patch + 0003-Enable-infinality-subpixel-hinting.patch + 0004-Enable-long-PCF-family-names.patch) + +prepare() { + cd freetype-$pkgver + patch -Np1 -i ../0001-Enable-table-validation-modules.patch + patch -Np1 -i ../0002-Enable-subpixel-rendering.patch + patch -Np1 -i ../0003-Enable-infinality-subpixel-hinting.patch + patch -Np1 -i ../0004-Enable-long-PCF-family-names.patch +} + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + meson freetype-$pkgver build \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + -D default_library=shared + + meson compile -C build +} + +package() { + meson install -C build --destdir="$pkgdir" + + rm -r "$pkgdir"/usr/include +} diff --git a/x86_64/extra32/lib32-fribidi/PKGBUILD b/x86_64/extra32/lib32-fribidi/PKGBUILD new file mode 100644 index 0000000..cfb530a --- /dev/null +++ b/x86_64/extra32/lib32-fribidi/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=lib32-fribidi +pkgver=1.0.11 +pkgrel=1 +arch=(x86_64) +depends=(fribidi) +makedepends=(git meson) +_commit=247fddc3599e3fe7b1b5cc21020c9eb51e662637 # tags/v1.0.11^0 +source=("git+https://github.com/fribidi/fribidi#commit=$_commit") + + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + meson fribidi build \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + -D docs=false + + meson compile -C build +} + + +package() { + meson install -C build --destdir "$pkgdir" + + rm -rf "$pkgdir"/usr/{include,share,bin} +} diff --git a/x86_64/extra32/lib32-gdk-pixbuf/PKGBUILD b/x86_64/extra32/lib32-gdk-pixbuf/PKGBUILD new file mode 100644 index 0000000..78a4015 --- /dev/null +++ b/x86_64/extra32/lib32-gdk-pixbuf/PKGBUILD @@ -0,0 +1,39 @@ +pkgname=lib32-gdk-pixbuf +pkgver=2.42.8 +pkgrel=1 +arch=(x86_64) +depends=(lib32-glib2 lib32-libpng lib32-libtiff lib32-libjpeg gdk-pixbuf) +makedepends=(git meson) +commitid=bca00032ad68d0b0aa2c1f7558db931e52bd9cd2 # 2.42.8 +source=("git+https://gitlab.gnome.org/GNOME/gdk-pixbuf.git#commit=$commitid" + gdk-pixbuf-query-loaders-32.hook +) + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + meson gdk-pixbuf build \ + --prefix=/usr \ + --libdir /usr/lib32 \ + --wrap-mode=nofallback \ + -D builtin_loaders=all \ + -D introspection=disabled \ + -D installed_tests=false \ + -D gtk_doc=false \ + -D docs=false \ + -D man=false + + meson compile -C build +} + +package() { + meson install -C build --destdir "$pkgdir" + + rm -rf "$pkgdir"/usr/{include,lib,share} + find "$pkgdir/usr/bin" -type f -not -name gdk-pixbuf-query-loaders -delete + mv "$pkgdir"/usr/bin/gdk-pixbuf-query-loaders{,-32} + + install -Dt "$pkgdir/usr/share/libalpm/hooks" -m644 *.hook +} diff --git a/x86_64/extra32/lib32-gdk-pixbuf/gdk-pixbuf-query-loaders-32.hook b/x86_64/extra32/lib32-gdk-pixbuf/gdk-pixbuf-query-loaders-32.hook new file mode 100644 index 0000000..363e9c9 --- /dev/null +++ b/x86_64/extra32/lib32-gdk-pixbuf/gdk-pixbuf-query-loaders-32.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/lib32/gdk-pixbuf-2.0/2.10.0/loaders/*.so + +[Action] +Description = Probing 32-bit GDK-Pixbuf loader modules... +When = PostTransaction +Exec = /usr/bin/gdk-pixbuf-query-loaders-32 --update-cache diff --git a/x86_64/extra32/lib32-gdk-pixbuf/lib32-gdk-pixbuf2.install b/x86_64/extra32/lib32-gdk-pixbuf/lib32-gdk-pixbuf2.install new file mode 100644 index 0000000..4a90ff2 --- /dev/null +++ b/x86_64/extra32/lib32-gdk-pixbuf/lib32-gdk-pixbuf2.install @@ -0,0 +1,3 @@ +pre_remove() { + rm -f usr/lib32/gdk-pixbuf-2.0/2.10.0/loaders/loaders.cache +} diff --git a/x86_64/extra32/lib32-gettext/PKGBUILD b/x86_64/extra32/lib32-gettext/PKGBUILD new file mode 100644 index 0000000..f133481 --- /dev/null +++ b/x86_64/extra32/lib32-gettext/PKGBUILD @@ -0,0 +1,27 @@ +_pkgbasename=gettext +pkgname=lib32-$_pkgbasename +pkgver=0.21 +pkgrel=1 +pkgdesc="GNU internationalization library (32-bit)" +arch=('x86_64') +url="https://www.gnu.org/software/gettext/" +depends=(lib32-acl $_pkgbasename) +source=(https://ftp.gnu.org/pub/gnu/gettext/${_pkgbasename}-${pkgver}.tar.gz{,.sig}) + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cd "${srcdir}/${_pkgbasename}-${pkgver}" + + ./configure --prefix=/usr --libdir=/usr/lib32 + + make +} + +package() { + cd "${srcdir}/${_pkgbasename}-${pkgver}" + make DESTDIR="${pkgdir}" install + rm -rf "${pkgdir}"/usr/{bin,include,share} +} diff --git a/x86_64/extra32/lib32-giflib/PKGBUILD b/x86_64/extra32/lib32-giflib/PKGBUILD new file mode 100644 index 0000000..094d07f --- /dev/null +++ b/x86_64/extra32/lib32-giflib/PKGBUILD @@ -0,0 +1,30 @@ +_pkgbasename=giflib +pkgname=lib32-$_pkgbasename +pkgver=5.2.1 +pkgrel=1 +arch=('x86_64') +depends=($_pkgbasename) +makedepends=('xmlto' 'docbook-xsl' 'docbook-xml') +source=(https://downloads.sourceforge.net/project/giflib/${_pkgbasename}-${pkgver}.tar.gz + giflib-5.1.9-fix-missing-quantize-API-symbols.patch + giflib-5.1.9-make-flags.patch) + +prepare() { + cd ${_pkgbasename}-${pkgver} + + patch -Np1 < ../giflib-5.1.9-fix-missing-quantize-API-symbols.patch + patch -Np1 < ../giflib-5.1.9-make-flags.patch +} + +build() { + cd ${_pkgbasename}-${pkgver} + + make CC="gcc -m32" +} + +package() { + cd ${_pkgbasename}-${pkgver} + make PREFIX=/usr LIBDIR=/usr/lib32 DESTDIR="${pkgdir}" install + + rm -rf "${pkgdir}"/usr/{include,share,bin} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-giflib/giflib-5.1.9-fix-missing-quantize-API-symbols.patch b/x86_64/extra32/lib32-giflib/giflib-5.1.9-fix-missing-quantize-API-symbols.patch new file mode 100644 index 0000000..5948f45 --- /dev/null +++ b/x86_64/extra32/lib32-giflib/giflib-5.1.9-fix-missing-quantize-API-symbols.patch @@ -0,0 +1,32 @@ +From ff8d9a59e79b79657e64430730c35835a84db619 Mon Sep 17 00:00:00 2001 +From: anthraxx +Date: Tue, 2 Apr 2019 11:46:18 +0200 +Subject: [PATCH] fix missing quantize API symbols + +GifQuantizeBuffer is required by many libs and applications +like mplayer, libgdiplus (mono) and others. +--- + Makefile | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Makefile b/Makefile +index e4ded69..17d0a5c 100644 +--- a/Makefile ++++ b/Makefile +@@ -29,11 +29,11 @@ LIBPOINT=0 + LIBVER=$(LIBMAJOR).$(LIBMINOR).$(LIBPOINT) + + SOURCES = dgif_lib.c egif_lib.c gifalloc.c gif_err.c gif_font.c \ +- gif_hash.c openbsd-reallocarray.c ++ gif_hash.c openbsd-reallocarray.c quantize.c + HEADERS = gif_hash.h gif_lib.h gif_lib_private.h + OBJECTS = $(SOURCES:.c=.o) + +-USOURCES = qprintf.c quantize.c getarg.c ++USOURCES = qprintf.c getarg.c + UHEADERS = getarg.h + UOBJECTS = $(USOURCES:.c=.o) + +-- +2.21.0 + diff --git a/x86_64/extra32/lib32-giflib/giflib-5.1.9-make-flags.patch b/x86_64/extra32/lib32-giflib/giflib-5.1.9-make-flags.patch new file mode 100644 index 0000000..f50d586 --- /dev/null +++ b/x86_64/extra32/lib32-giflib/giflib-5.1.9-make-flags.patch @@ -0,0 +1,43 @@ +From 788a52c399f4731ac1fb27a49db48626f3e140e1 Mon Sep 17 00:00:00 2001 +From: anthraxx +Date: Tue, 2 Apr 2019 14:53:28 +0200 +Subject: [PATCH] respect existence of distro CFLAGS and CPPFLAGS + +- append CFLAGS instead of set to honor default distro CFLAGS +- add CPPFLAGS that are defined by distros +--- + Makefile | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/Makefile b/Makefile +index e4ded69..7fef84a 100644 +--- a/Makefile ++++ b/Makefile +@@ -8,7 +8,7 @@ + # + OFLAGS = -O0 -g + OFLAGS = -O2 +-CFLAGS = -std=gnu99 -fPIC -Wall -Wno-format-truncation $(OFLAGS) ++CFLAGS += -std=gnu99 -fPIC -Wall -Wno-format-truncation $(OFLAGS) + + SHELL = /bin/sh + TAR = tar +@@ -68,13 +68,13 @@ all: libgif.so libgif.a libutil.so libutil.a $(UTILS) + $(UTILS):: libgif.a libutil.a + + libgif.so: $(OBJECTS) $(HEADERS) +- $(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,libgif.so.$(LIBMAJOR) -o libgif.so $(OBJECTS) ++ $(CC) $(CFLAGS) $(CPPFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,libgif.so.$(LIBMAJOR) -o libgif.so $(OBJECTS) + + libgif.a: $(OBJECTS) $(HEADERS) + $(AR) rcs libgif.a $(OBJECTS) + + libutil.so: $(UOBJECTS) $(UHEADERS) +- $(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,libutil.so.$(LIBMAJOR) -o libutil.so $(UOBJECTS) ++ $(CC) $(CFLAGS) $(CPPFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,libutil.so.$(LIBMAJOR) -o libutil.so $(UOBJECTS) + + libutil.a: $(UOBJECTS) $(UHEADERS) + $(AR) rcs libutil.a $(UOBJECTS) +-- +2.21.0 + diff --git a/x86_64/extra32/lib32-glew-1.10/PKGBUILD b/x86_64/extra32/lib32-glew-1.10/PKGBUILD new file mode 100644 index 0000000..81dd2dd --- /dev/null +++ b/x86_64/extra32/lib32-glew-1.10/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=lib32-glew-1.10 +rname=glew-1.10 +pkgver=1.10.0 +pkgrel=1 +arch=(x86_64) +depends=(lib32-libglvnd lib32-libx11 lib32-libxext lib32-libxi lib32-libxmu $rname) +makedepends=(gcc make) +source=(https://downloads.sourceforge.net/glew/glew-$pkgver.tgz) + +prepare() { + cd glew-$pkgver + sed -i 's|CC = cc|CC = gcc -m32|' config/Makefile.linux + sed -i 's|LD = cc|LD = gcc -m32|' config/Makefile.linux + sed -i 's|lib64|lib32|' config/Makefile.linux +} + +build() { + cd glew-$pkgver + + make -j4 +} + +package() { + cd glew-$pkgver + + make GLEW_DEST=$pkgdir/usr install + rm -rf "${pkgdir}"/usr/{bin,include,lib32/{libGLEW.{a,so},pkgconfig}} +} diff --git a/x86_64/extra32/lib32-glib-networking/PKGBUILD b/x86_64/extra32/lib32-glib-networking/PKGBUILD new file mode 100644 index 0000000..14aefc1 --- /dev/null +++ b/x86_64/extra32/lib32-glib-networking/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=lib32-glib-networking +pkgver=2.72.0 +pkgrel=1 +arch=(x86_64) +depends=(glib-networking glib2 lib32-gnutls) +makedepends=(git meson) +_tag=e572a436031129bf3d376978d3e8b1f6f934a328 +source=(git+https://gitlab.gnome.org/GNOME/glib-networking.git#tag=${_tag}) + +build() { + export CC='gcc -m32' + export PKG_CONFIG=i686-pc-linux-gnu-pkg-config + + meson glib-networking build \ + --prefix=/usr \ + --libdir=/usr/lib32 + + meson compile -C build +} + +package() { + meson install -C build --destdir "${pkgdir}" + rm -rf "${pkgdir}"/usr/{lib,share} +} diff --git a/x86_64/extra32/lib32-glib2/PKGBUILD b/x86_64/extra32/lib32-glib2/PKGBUILD new file mode 100644 index 0000000..305b598 --- /dev/null +++ b/x86_64/extra32/lib32-glib2/PKGBUILD @@ -0,0 +1,45 @@ +pkgname=lib32-glib2 +pkgver=2.70.2 +pkgrel=2 +pkgdesc="Low level core library (32-bit)" +url="https://wiki.gnome.org/Projects/GLib" +license=(LGPL) +arch=(x86_64) +depends=(lib32-pcre lib32-libffi lib32-util-linux lib32-zlib glib2) +makedepends=(gettext gtk-doc shared-mime-info python3 git util-linux + meson) +source=("git+https://gitlab.gnome.org/GNOME/glib.git?signed#tag=$pkgver" + multilib.diff + gio-querymodules-32.{hook,script}) + +prepare() { + cd glib + + # Test suite workaround + git apply -3 ../multilib.diff +} + +build() { + export CC="gcc -m32 -mstackrealign" + export CXX="g++ -m32 -mstackrealign" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + CFLAGS+=" -DG_DISABLE_CAST_CHECKS" + meson glib build \ + --prefix=/usr \ + -D glib_debug=disabled \ + -D selinux=disabled \ + --libdir=/usr/lib32 + meson compile -C build +} + +package() { +meson install -C build --destdir "$pkgdir" + + rm -r "$pkgdir"/usr/{share,include} + find "$pkgdir/usr/bin" -type f -not -name gio-querymodules -printf 'Removing %P\n' -delete + mv "$pkgdir"/usr/bin/gio-querymodules{,-32} + + install -Dt "$pkgdir/usr/share/libalpm/hooks" -m644 *.hook + install -D gio-querymodules-32.script "$pkgdir/usr/share/libalpm/scripts/gio-querymodules-32" +} diff --git a/x86_64/extra32/lib32-glib2/gio-querymodules-32.hook b/x86_64/extra32/lib32-glib2/gio-querymodules-32.hook new file mode 100644 index 0000000..f0b1332 --- /dev/null +++ b/x86_64/extra32/lib32-glib2/gio-querymodules-32.hook @@ -0,0 +1,12 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/lib32/gio/modules/ + +[Action] +Description = Updating 32-bit GIO module cache... +When = PostTransaction +Exec = /usr/share/libalpm/scripts/gio-querymodules-32 +NeedsTargets diff --git a/x86_64/extra32/lib32-glib2/gio-querymodules-32.script b/x86_64/extra32/lib32-glib2/gio-querymodules-32.script new file mode 100644 index 0000000..224873b --- /dev/null +++ b/x86_64/extra32/lib32-glib2/gio-querymodules-32.script @@ -0,0 +1,7 @@ +#!/bin/bash + +while read -r d; do + [[ -d $d ]] || continue + gio-querymodules-32 "$d" + rmdir --ignore-fail-on-non-empty "$d" +done diff --git a/x86_64/extra32/lib32-glib2/multilib.diff b/x86_64/extra32/lib32-glib2/multilib.diff new file mode 100644 index 0000000..2e9b474 --- /dev/null +++ b/x86_64/extra32/lib32-glib2/multilib.diff @@ -0,0 +1,27 @@ +diff --git i/gio/tests/meson.build w/gio/tests/meson.build +index 5dbfb8e60..6224460ce 100644 +--- i/gio/tests/meson.build ++++ w/gio/tests/meson.build +@@ -721,6 +721,7 @@ if not meson.is_cross_build() or meson.has_exe_wrapper() + '-r', + '-b','binary', + '@INPUT@', ++ '--oformat', 'elf32-i386', + '-o','@OUTPUT@']) + + # Rename symbol to match the one in the C file +diff --git i/glib/tests/meson.build w/glib/tests/meson.build +index c77ccdd14..fedbb5286 100644 +--- i/glib/tests/meson.build ++++ w/glib/tests/meson.build +@@ -102,7 +102,9 @@ glib_tests = { + 'thread' : {}, + 'thread-pool' : {}, + 'timeout' : {}, +- 'timer' : {}, ++ 'timer' : { ++ 'suite' : ['flaky'], ++ }, + 'tree' : {}, + 'utf8-performance' : {}, + 'utf8-pointer' : {}, diff --git a/x86_64/extra32/lib32-glu/PKGBUILD b/x86_64/extra32/lib32-glu/PKGBUILD new file mode 100644 index 0000000..d9096b2 --- /dev/null +++ b/x86_64/extra32/lib32-glu/PKGBUILD @@ -0,0 +1,39 @@ +pkgname=lib32-glu +pkgver=9.0.2 +pkgrel=1 +arch=('x86_64') +depends=('lib32-libglvnd' 'glu') +makedepends=('gcc' 'lib32-libglvnd' 'meson') +source=(ftp://ftp.freedesktop.org/pub/mesa/glu/glu-$pkgver.tar.xz{,.sig} + 0001-pkgconfig-Depend-on-opengl-when-built-with-libglvnd.patch + 0002-pkgconfig-Drop-unneeded-lines-from-autotools-build.patch + 0003-pkgconfig-meson-build-should-match-autotools-require.patch) + +prepare() { + cd glu-$pkgver + + # merged upstream + patch -Np1 -i ../0001-pkgconfig-Depend-on-opengl-when-built-with-libglvnd.patch + patch -Np1 -i ../0002-pkgconfig-Drop-unneeded-lines-from-autotools-build.patch + patch -Np1 -i ../0003-pkgconfig-meson-build-should-match-autotools-require.patch +} + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + meson glu-$pkgver build \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + -D default_library=shared + + ninja -C build + meson compile -C build +} + +package() { + DESTDIR="$pkgdir" meson install -C build + + rm -rf "${pkgdir}"/usr/include +} diff --git a/x86_64/extra32/lib32-gmp/PKGBUILD b/x86_64/extra32/lib32-gmp/PKGBUILD new file mode 100644 index 0000000..dcad5a4 --- /dev/null +++ b/x86_64/extra32/lib32-gmp/PKGBUILD @@ -0,0 +1,36 @@ +_pkgbasename=gmp +pkgname=lib32-$_pkgbasename +pkgver=6.2.1 +pkgrel=1 +pkgdesc="A free library for arbitrary precision arithmetic (32-bit)" +arch=('x86_64') +url="https://gmplib.org/" +depends=($_pkgbasename) +source=(https://gmplib.org/download/gmp/gmp-${pkgver}.tar.xz) + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cd "${_pkgbasename}-${pkgver}" + + export ABI=32 + + ./configure \ + --prefix=/usr --infodir=/usr/share/info \ + --enable-fat --enable-cxx --libdir=/usr/lib32 \ + --includedir=/usr/lib32/gmp + + #Put gmp.h in the same folder as gmpxx.h + sed -i 's/$(exec_prefix)\/include/$\(includedir\)/' Makefile + + make +} + +package() { + cd "${_pkgbasename}-${pkgver}" + make DESTDIR="${pkgdir}" install + + rm -rf "${pkgdir}"/usr/{include,share,bin} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-gnutls/PKGBUILD b/x86_64/extra32/lib32-gnutls/PKGBUILD new file mode 100644 index 0000000..b554f53 --- /dev/null +++ b/x86_64/extra32/lib32-gnutls/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=lib32-gnutls +pkgver=3.7.2 +pkgrel=1 +pkgdesc="A library which provides a secure layer over a reliable transport layer (32-bit)" +arch=('x86_64') +url="https://gnutls.org/" +depends=('lib32-nettle' 'lib32-p11-kit' 'lib32-libtasn1' 'lib32-libidn2' 'gnutls') +source=(https://www.gnupg.org/ftp/gcrypt/gnutls/v${pkgver%.*}/gnutls-${pkgver}.tar.xz) + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cd gnutls-${pkgver} + + # disable libidn for security reasons: + # http://lists.gnupg.org/pipermail/gnutls-devel/2015-May/007582.html + + ./configure --prefix=/usr --libdir=/usr/lib32 --build=i686-pc-linux-gnu \ + --with-zlib \ + --with-included-unistring \ + --disable-static \ + --disable-guile \ + --disable-valgrind-tests + + make +} + +package() { + cd gnutls-${pkgver} + make DESTDIR="${pkgdir}" install + + rm -rf "${pkgdir}"/usr/{bin,include,share} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-gobject-introspection/PKGBUILD b/x86_64/extra32/lib32-gobject-introspection/PKGBUILD new file mode 100644 index 0000000..f10d638 --- /dev/null +++ b/x86_64/extra32/lib32-gobject-introspection/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=gobject-introspection +pkgver=1.71.0+5+gc887488a +gver=2.70.1 +pkgrel=1 +arch=('x86_64') +makedepends=(git meson lib32-glib2) +source=("git+https://gitlab.gnome.org/GNOME/gobject-introspection.git" + "git+https://gitlab.gnome.org/GNOME/glib.git#tag=$gver") + +pkgver() { + cd $pkgname + git describe --tags | sed 's/-/+/g' +} + +build() { + export CC="gcc -m32 -mstackrealign" + export CXX="g++ -m32 -mstackrealign" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + meson $pkgname build \ + -D gtk_doc=false \ + -D glib_src_dir="$srcdir/glib" \ + --prefix=/usr \ + --libdir=/usr/lib32 + + meson compile -C build +} + +package() { + meson install -C build --destdir $pkgdir + + mkdir -p $pkgdir/usr/lib32/pkgconfig + cp -f build/meson-private/gobject-introspection-1.0.pc $pkgdir/usr/lib32/pkgconfig/ + rm -r "$pkgdir"/usr/{share,include} +} diff --git a/x86_64/extra32/lib32-gtk+/PKGBUILD b/x86_64/extra32/lib32-gtk+/PKGBUILD new file mode 100644 index 0000000..73acd1d --- /dev/null +++ b/x86_64/extra32/lib32-gtk+/PKGBUILD @@ -0,0 +1,57 @@ +pkgname=lib32-gtk+ +pkgver=3.24.31 +pkgrel=1 +pkgdesc='GObject-based multi-platform GUI toolkit' +arch=(x86_64) +license=(LGPL) +url=https://www.gtk.org/ +depends=( + gtk+ + lib32-at-spi2-atk + lib32-dbus + lib32-mesa + lib32-json-glib + lib32-libepoxy + lib32-libxcomposite + lib32-libxcursor + lib32-libxinerama + lib32-libxkbcommon + lib32-libxrandr + lib32-pango + lib32-wayland + lib32-libxdamage +) +makedepends=( + gtk-doc git meson ninja wayland-protocols +) +install=lib32-gtk+.install +_tag=ab45bde94c7bbd140b12fa0dd6203f7b98d1a715 +source=( + git+https://gitlab.gnome.org/GNOME/gtk.git#tag=${_tag} + gtk-query-immodules-3.0-32.hook +) + +build() { + export CC='gcc -m32' + export CXX=/bin/false + export PKG_CONFIG=i686-pc-linux-gnu-pkg-config + + meson gtk build \ + --libdir=/usr/lib32 \ + -Dbroadway_backend=true \ + -Dcloudproviders=false \ + -Dcolord=yes \ + -Dgtk_doc=false \ + -Dintrospection=false \ + -Dman=false + meson compile -C build +} + +package() { + DESTDIR="${pkgdir}" meson install -C build + + rm -r "${pkgdir}"/{etc,usr/{include,share}} + find "${pkgdir}"/usr/bin -type f -not -name gtk-query-immodules-3.0 -delete + mv "${pkgdir}"/usr/bin/gtk-query-immodules-3.0{,-32} + install -Dm 644 gtk-query-immodules-3.0-32.hook -t "${pkgdir}"/usr/share/libalpm/hooks/ +} diff --git a/x86_64/extra32/lib32-gtk+/gtk-query-immodules-3.0-32.hook b/x86_64/extra32/lib32-gtk+/gtk-query-immodules-3.0-32.hook new file mode 100644 index 0000000..6c9775a --- /dev/null +++ b/x86_64/extra32/lib32-gtk+/gtk-query-immodules-3.0-32.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/lib32/gtk-3.0/3.0.0/immodules/*.so + +[Action] +Description = Probing 32-bit GTK3 input method modules... +When = PostTransaction +Exec = /usr/bin/gtk-query-immodules-3.0-32 --update-cache diff --git a/x86_64/extra32/lib32-gtk+/lib32-gtk+.install b/x86_64/extra32/lib32-gtk+/lib32-gtk+.install new file mode 100644 index 0000000..16393e8 --- /dev/null +++ b/x86_64/extra32/lib32-gtk+/lib32-gtk+.install @@ -0,0 +1,3 @@ +pre_remove() { + rm -f /usr/lib32/gtk-3.0/3.0.0/immodules.cache +} diff --git a/x86_64/extra32/lib32-gtk2+/PKGBUILD b/x86_64/extra32/lib32-gtk2+/PKGBUILD new file mode 100644 index 0000000..cc92bc8 --- /dev/null +++ b/x86_64/extra32/lib32-gtk2+/PKGBUILD @@ -0,0 +1,47 @@ +_pkgbasename=gtk2 +pkgname=lib32-${_pkgbasename}+ +pkgver=2.24.33 +pkgrel=1 +pkgdesc="GObject-based multi-platform GUI toolkit (legacy) (32-bit)" +arch=('x86_64') +url="https://www.gtk.org/" +install=gtk2+.install +depends=(lib32-{'atk>','pango','cairo','gdk-pixbuf'} + lib32-lib{xcursor,'xrandr','xi',xinerama,xcomposite,xdamage} + gtk2+ lib32-cups) +makedepends=('python3') +source=(https://download.gnome.org/sources/gtk+/2.24/gtk+-${pkgver}.tar.xz + xid-collision-debug.patch) + +prepare() { + cd "${srcdir}/gtk+-${pkgver}" + + patch -Np1 -i "${srcdir}/xid-collision-debug.patch" +} + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cd "${srcdir}/gtk+-${pkgver}" + + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --libdir=/usr/lib32 \ + --with-xinput=yes + + make +} + +package() { + cd "${srcdir}/gtk+-${pkgver}" + make DESTDIR="${pkgdir}" install + rm -rf "${pkgdir}"/etc + rm -rf "${pkgdir}"/usr/{include,share} + + cd "${pkgdir}"/usr/bin + mv gtk-query-immodules-2.0 gtk-query-immodules-2.0-32 + rm -f gtk-builder-convert gtk-demo gtk-update-icon-cache +} diff --git a/x86_64/extra32/lib32-gtk2+/gtk2+.install b/x86_64/extra32/lib32-gtk2+/gtk2+.install new file mode 100644 index 0000000..6315484 --- /dev/null +++ b/x86_64/extra32/lib32-gtk2+/gtk2+.install @@ -0,0 +1,17 @@ +post_install() { + GTK_PATH=/usr/lib32/gtk-2.0 usr/bin/gtk-query-immodules-2.0-32 --update-cache +} + +pre_upgrade() { +if (( $(vercmp $2 2.24.20) < 0 )); then + rm -f /etc/gtk-2.0/gtk.immodules-32 +fi +} + +post_upgrade() { + post_install +} + +pre_remove() { + rm -f /usr/lib32/gtk-2.0/2.10.0/immodules.cache +} diff --git a/x86_64/extra32/lib32-gtk2+/xid-collision-debug.patch b/x86_64/extra32/lib32-gtk2+/xid-collision-debug.patch new file mode 100644 index 0000000..a205e42 --- /dev/null +++ b/x86_64/extra32/lib32-gtk2+/xid-collision-debug.patch @@ -0,0 +1,14 @@ +--- gtk+-2.18.3/gdk/x11/gdkxid.c 2009-06-19 04:59:18.000000000 +0200 ++++ gtk+-2.18.3/gdk/x11/gdkxid.c.new 2009-07-22 11:30:12.000000000 +0200 +@@ -56,10 +56,10 @@ + if (!display_x11->xid_ht) + display_x11->xid_ht = g_hash_table_new ((GHashFunc) gdk_xid_hash, + (GEqualFunc) gdk_xid_equal); +- ++/* + if (g_hash_table_lookup (display_x11->xid_ht, xid)) + g_warning ("XID collision, trouble ahead"); +- ++*/ + g_hash_table_insert (display_x11->xid_ht, xid, data); + } diff --git a/x86_64/extra32/lib32-gtk3+/PKGBUILD b/x86_64/extra32/lib32-gtk3+/PKGBUILD new file mode 100644 index 0000000..532dabf --- /dev/null +++ b/x86_64/extra32/lib32-gtk3+/PKGBUILD @@ -0,0 +1,47 @@ +pkgname=lib32-gtk3+ +pkgver=3.24.31 +pkgrel=1 +arch=(x86_64) +depends=( + gtk3+ lib32-at-spi2-atk lib32-colord lib32-dbus lib32-mesa lib32-gdk-pixbuf lib32-json-glib + lib32-cups lib32-libepoxy lib32-libxcomposite lib32-libxcursor lib32-libxinerama + lib32-libxkbcommon lib32-libxrandr lib32-pango lib32-rest lib32-libcanberra + lib32-wayland lib32-libxdamage +) +makedepends=( + gtk-doc git glib2 meson ninja sassc wayland-protocols +) +install=lib32-gtk3+.install +ltag=ab45bde94c7bbd140b12fa0dd6203f7b98d1a715 + +source=( + git+https://gitlab.gnome.org/GNOME/gtk.git#tag=${ltag} + gtk-query-immodules-3.0-32.hook +) + +build() { + export CC='gcc -m32' + export CXX=/bin/false + export PKG_CONFIG=i686-pc-linux-gnu-pkg-config + + meson gtk build \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + -Dbroadway_backend=true \ + -Dcloudproviders=false \ + -Dcolord=yes \ + -Dgtk_doc=false \ + -Dintrospection=false \ + -Dman=false + + meson compile -C build +} + +package() { + DESTDIR="${pkgdir}" meson install -C build + + rm -r "${pkgdir}"/{etc,usr/{include,share}} + find "${pkgdir}"/usr/bin -type f -not -name gtk-query-immodules-3.0 -delete + mv "${pkgdir}"/usr/bin/gtk-query-immodules-3.0{,-32} + install -Dm 644 gtk-query-immodules-3.0-32.hook -t "${pkgdir}"/usr/share/libalpm/hooks/ +} diff --git a/x86_64/extra32/lib32-gtk3+/gtk-query-immodules-3.0-32.hook b/x86_64/extra32/lib32-gtk3+/gtk-query-immodules-3.0-32.hook new file mode 100644 index 0000000..6c9775a --- /dev/null +++ b/x86_64/extra32/lib32-gtk3+/gtk-query-immodules-3.0-32.hook @@ -0,0 +1,11 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Operation = Remove +Target = usr/lib32/gtk-3.0/3.0.0/immodules/*.so + +[Action] +Description = Probing 32-bit GTK3 input method modules... +When = PostTransaction +Exec = /usr/bin/gtk-query-immodules-3.0-32 --update-cache diff --git a/x86_64/extra32/lib32-gtk3+/lib32-gtk3+.install b/x86_64/extra32/lib32-gtk3+/lib32-gtk3+.install new file mode 100644 index 0000000..16393e8 --- /dev/null +++ b/x86_64/extra32/lib32-gtk3+/lib32-gtk3+.install @@ -0,0 +1,3 @@ +pre_remove() { + rm -f /usr/lib32/gtk-3.0/3.0.0/immodules.cache +} diff --git a/x86_64/extra32/lib32-harfbuzz/PKGBUILD b/x86_64/extra32/lib32-harfbuzz/PKGBUILD new file mode 100644 index 0000000..c90a2b1 --- /dev/null +++ b/x86_64/extra32/lib32-harfbuzz/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=lib32-harfbuzz +pkgver=3.4.0 +pkgrel=1 +arch=(x86_64) +makedepends=(lib32-glib2 lib32-freetype2 lib32-icu git python3 meson + harfbuzz) +_commit=0a129961341da370ec82bfccdd11ec9b1094b5a2 # tags/3.4.0^0 +source=("git+https://github.com/harfbuzz/harfbuzz#commit=$_commit") + + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + # Harfbuzz wants no exceptions + CFLAGS="${CFLAGS/-fexceptions/}" + CXXFLAGS="${CXXFLAGS/-fexceptions/}" + + meson harfbuzz build \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + -D cairo=disabled \ + -D chafa=disabled \ + -D introspection=disabled \ + -D docs=disabled + + meson compile -C build +} + +package() { + meson install -C build --destdir "$pkgdir" + + rm -rf $pkgdir/usr/{bin,include} +} diff --git a/x86_64/extra32/lib32-icu/PKGBUILD b/x86_64/extra32/lib32-icu/PKGBUILD new file mode 100644 index 0000000..bd91097 --- /dev/null +++ b/x86_64/extra32/lib32-icu/PKGBUILD @@ -0,0 +1,34 @@ +pkgname=lib32-icu +pkgver=70.1 +pkgrel=1 +pkgdesc="International Components for Unicode library (32 bit)" +arch=('x86_64') +depends=('icu') +provides=(libicu{data,i18n,io,test,tu,uc}.so) +source=(https://github.com/unicode-org/icu/releases/download/release-${pkgver//./-}/icu4c-${pkgver//./_}-src.tgz) + +build() { + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + cd icu/source + + ./configure --prefix=/usr --sysconfdir=/etc --libdir=/usr/lib32 + + make +} + +package() { + cd icu/source + + make -j1 DESTDIR="${pkgdir}" install + rm -rf "${pkgdir}/usr"/{include,sbin,share} + + # keep icu-config-32 + find "${pkgdir}/usr/bin" -type f -not -name icu-config -delete + mv "${pkgdir}/usr/bin"/icu-config{,-32} + + install -d m644 "${pkgdir}/usr/share/licenses" + ln -s icu "${pkgdir}/usr/share/licenses/${pkgname}" +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-jansson/PKGBUILD b/x86_64/extra32/lib32-jansson/PKGBUILD new file mode 100644 index 0000000..6da691f --- /dev/null +++ b/x86_64/extra32/lib32-jansson/PKGBUILD @@ -0,0 +1,33 @@ +pkgname=lib32-jansson +pkgver=2.14 +pkgrel=1 +pkgdesc='C library for encoding, decoding and manipulating JSON data' +arch=(x86_64) +depends=(jansson) +makedepends=(git) +_tag=684e18c927e89615c2d501737e90018f4930d6c5 +source=(git+https://github.com/akheron/jansson.git#tag=${_tag}) + +prepare() { + cd jansson + + autoreconf -fiv +} + +build() { + cd jansson + + export CC='gcc -m32' + export PKG_CONFIG_PATH='/usr/lib32/pkgconfig' + + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib32 + + make +} + +package() { + make DESTDIR="${pkgdir}" -C jansson install + rm -rf "${pkgdir}"/usr/{share,include} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-json-glib/PKGBUILD b/x86_64/extra32/lib32-json-glib/PKGBUILD new file mode 100644 index 0000000..930c76a --- /dev/null +++ b/x86_64/extra32/lib32-json-glib/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=lib32-json-glib +pkgver=1.6.6 +pkgrel=1 +arch=(x86_64) +depends=(json-glib lib32-glib2) +makedepends=(git meson) +_tag=7ef38457e12810b1f01da236cf04d4bdc1f551fa +source=(git+https://gitlab.gnome.org/GNOME/json-glib.git#tag=${_tag}) + +build() { + export CC='gcc -m32' + export PKG_CONFIG=i686-pc-linux-gnu-pkg-config + + meson json-glib build \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + -D gtk_doc=disabled \ + -D introspection=disabled + + meson compile -C build +} + +package() { + meson install -C build --destdir "${pkgdir}" + + rm -rf "${pkgdir}"/usr/{bin,include,lib,share,libexec/installed-tests} +} diff --git a/x86_64/extra32/lib32-keyutils/PKGBUILD b/x86_64/extra32/lib32-keyutils/PKGBUILD new file mode 100644 index 0000000..193d0c6 --- /dev/null +++ b/x86_64/extra32/lib32-keyutils/PKGBUILD @@ -0,0 +1,29 @@ +_pkgbasename=keyutils +pkgname=lib32-$_pkgbasename +_tag='5678a1aae8834b5c16b5ed7dc72ef8836a29e122' # git rev-parse v${pkgver} +pkgver=1.6.3 +pkgrel=1 +pkgdesc='Linux Key Management Utilities (32-bit)' +arch=('x86_64') +url='https://www.kernel.org/' +depends=("${_pkgbasename}") +makedepends=('git') +source=("git+https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/keyutils.git#tag=${_tag}?signed") + +build() { + cd "${_pkgbasename}" + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + sed -i -e 's/^\(USR\)\?LIBDIR\s*:=.*$/\1LIBDIR=\/usr\/lib32/' Makefile + make CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" +} + +package() { + cd "${_pkgbasename}" + make DESTDIR="$pkgdir" install + + rm -rf "${pkgdir}"/{usr/{include,share,bin,sbin},etc,{s,}bin} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-lcms/PKGBUILD b/x86_64/extra32/lib32-lcms/PKGBUILD new file mode 100644 index 0000000..04f3569 --- /dev/null +++ b/x86_64/extra32/lib32-lcms/PKGBUILD @@ -0,0 +1,28 @@ +_pkgbasename=lcms2 +pkgname=lib32-lcms +pkgver=2.12 +pkgrel=1 +pkgdesc="Small-footprint color management engine, version 2 (32-bit)" +arch=('x86_64') +depends=('lib32-libtiff' lcms) +source=("https://github.com/mm2/Little-CMS/archive/${pkgver}/${_pkgbasename}-${pkgver}.tar.gz") + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cd Little-CMS-${pkgver} + + ./configure --prefix=/usr --libdir=/usr/lib32 + + make +} + +package() { + cd Little-CMS-${pkgver} + + make DESTDIR="${pkgdir}" install + + rm -rf "${pkgdir}"/usr/{include,share,bin} +} diff --git a/x86_64/extra32/lib32-libappindicator/PKGBUILD b/x86_64/extra32/lib32-libappindicator/PKGBUILD new file mode 100644 index 0000000..53c6676 --- /dev/null +++ b/x86_64/extra32/lib32-libappindicator/PKGBUILD @@ -0,0 +1,56 @@ +pkgname=lib32-libappindicator +rname=libappindicator +pkgver=12.10.0 +rev_ver=12.10 +pkgrel=1 +arch=(x86_64) +depends=(dbus-glib lib32-libdbusmenu lib32-libindicator) +source=(https://launchpad.net/${rname}/$rev_ver/${pkgver}/+download/${rname}-${pkgver}.tar.gz + no-python.patch) + +prepare() { + cd $rname-$pkgver + + patch -Np1 -i ../no-python.patch + sed -i 's/-Werror//' src/Makefile.am + autoreconf -fvi +} + +build() { + cd $rname-$pkgver + + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG_PATH='/usr/lib32/pkgconfig' + export CFLAGS="${CFLAGS} -Wno-deprecated-declarations" + + mkdir -p build2 build3 + # GTK2 + cd build2 + ./../configure \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --localstatedir=/var \ + --sysconfdir=/etc \ + --with-gtk=2 + make -j4 + + # GTK3 + cd ../build3 + ./../configure \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --localstatedir=/var \ + --sysconfdir=/etc \ + --with-gtk=3 + make -j4 +} + +package() { + cd $rname-$pkgver + + make -C build2 DESTDIR=$pkgdir install + make -C build3 DESTDIR=$pkgdir install + + rm -rf "${pkgdir}"/usr/{include,share} +} diff --git a/x86_64/extra32/lib32-libappindicator/PKGBUILD.save b/x86_64/extra32/lib32-libappindicator/PKGBUILD.save new file mode 100644 index 0000000..6e328b0 --- /dev/null +++ b/x86_64/extra32/lib32-libappindicator/PKGBUILD.save @@ -0,0 +1,50 @@ +pkgname=lib32-libappindicator +rname=libappindicator +pkgver=12.10.0 +rev_ver=12.10 +pkgrel=1 +arch=(x86_64) +depends=(dbus-glib gnome-common gobject-introspection libdbusmenu libindicator) +source=(https://launchpad.net/${pkgname}/$rev_ver/${pkgver}/+download/${pkgname}-${pkgver}.tar.gz + no-python.patch) + +prepare() { + cd $pkgname-$pkgver + + patch -Np1 -i ../no-python.patch + sed -i 's/-Werror//' src/Makefile.am + autoreconf -fvi +} + +build() { + cd $pkgname-$pkgver + + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG_PATH='/usr/lib32/pkgconfig' + export CFLAGS="${CFLAGS} -Wno-deprecated-declarations" + + mkdir -p build2 build3 + # GTK2 + cd build2 + ./../configure \ + --prefix=/usr \ + --localstatedir=/var \ + --sysconfdir=/etc \ + --with-gtk=2 + + # GTK3 + cd ../build3 + ./../configure \ + --prefix=/usr \ + --localstatedir=/var \ + --sysconfdir=/etc \ + --with-gtk=3 +} + +package() { + cd $pkgname-$pkgver + +# make -C build2 DESTDIR=$pkgdir install + make -C build3 DESTDIR=$pkgdir install +} diff --git a/x86_64/extra32/lib32-libappindicator/no-python.patch b/x86_64/extra32/lib32-libappindicator/no-python.patch new file mode 100644 index 0000000..ca0da3c --- /dev/null +++ b/x86_64/extra32/lib32-libappindicator/no-python.patch @@ -0,0 +1,73 @@ +From: Simon McVittie +Date: Thu, 5 Jul 2018 23:51:25 +0100 +Subject: Disable legacy Python bindings + +Forwarded: not-needed, Debian-specific +--- + bindings/Makefile.am | 6 ------ + configure.ac | 29 ----------------------------- + 2 files changed, 35 deletions(-) + +diff --git a/bindings/Makefile.am b/bindings/Makefile.am +index d1f6d73..b4df7fe 100644 +--- a/bindings/Makefile.am ++++ b/bindings/Makefile.am +@@ -1,11 +1,5 @@ +-if USE_GTK3 + SUBDIRS = \ + vala +-else +-SUBDIRS = \ +- python \ +- vala +-endif + + if HAS_MONO + SUBDIRS += mono +diff --git a/configure.ac b/configure.ac +index 5a14c7f..4a7c964 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -181,33 +181,6 @@ AM_CONDITIONAL(BUILD_MONO_TEST, test x${have_nunit} = xyes) + with_localinstall="no" + AC_ARG_ENABLE(localinstall, AS_HELP_STRING([--enable-localinstall], [install all of the files localy instead of system directories (for distcheck)]), with_localinstall=$enableval, with_localinstall=no) + +-########################### +-# Python +-########################### +- +-PYGTK_REQUIRED=2.14.0 +-PYGOBJECT_REQUIRED=0.22 +- +-AM_PATH_PYTHON(2.3.5) +-AM_CHECK_PYTHON_HEADERS(,[AC_MSG_ERROR(could not find Python headers)]) +- +-PKG_CHECK_MODULES(APPINDICATOR_PYTHON, +- [ +- pygtk-2.0 >= $PYGTK_REQUIRED +- gtk+-2.0 >= $GTK_REQUIRED_VERSION +- pygobject-2.0 >= $PYGOBJECT_REQUIRED +- ]) +- +-AC_MSG_CHECKING(for pygtk defs) +-PYGTK_DEFSDIR=`$PKG_CONFIG --variable=defsdir pygtk-2.0` +-AC_SUBST(PYGTK_DEFSDIR) +-AC_MSG_RESULT($PYGTK_DEFSDIR) +- +-AC_MSG_CHECKING(for pygtk codegen) +-PYGTK_CODEGEN="$PYTHON `$PKG_CONFIG --variable=codegendir pygtk-2.0`/codegen.py" +-AC_SUBST(PYGTK_CODEGEN) +-AC_MSG_RESULT($PYGTK_CODEGEN) +- + ######################### + # Check if build tests + ######################### +@@ -226,8 +199,6 @@ src/Makefile + src/appindicator-0.1.pc + src/appindicator3-0.1.pc + bindings/Makefile +-bindings/python/Makefile +-bindings/python/appindicator.override + bindings/vala/Makefile + bindings/vala/examples/Makefile + tests/Makefile diff --git a/x86_64/extra32/lib32-libavtp/PKGBUILD b/x86_64/extra32/lib32-libavtp/PKGBUILD new file mode 100644 index 0000000..7b880dc --- /dev/null +++ b/x86_64/extra32/lib32-libavtp/PKGBUILD @@ -0,0 +1,34 @@ +_name=libavtp +pkgname=lib32-libavtp +pkgver=0.1.0 +pkgrel=1 +pkgdesc="Open source implementation of Audio Video Transport Protocol" +arch=('x86_64') +depends=('libavtp') +makedepends=('lib32-cmocka' 'meson') +source=("$pkgname-$pkgver.tar.gz::https://github.com/Avnu/${_name}/archive/v${pkgver}.tar.gz") + +prepare() { + mv -v "${_name}-$pkgver" "$pkgname-$pkgver" +} + +build() { + cd "$pkgname-$pkgver" + export CC='gcc -m32' + export PKG_CONFIG_PATH='/usr/lib32/pkgconfig' + + meson \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + build + + ninja -C build +} + +package() { + cd "$pkgname-$pkgver" + + DESTDIR="${pkgdir}" meson install -C build + + rm -rvf "${pkgdir}/usr/include" +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-libcanberra/PKGBUILD b/x86_64/extra32/lib32-libcanberra/PKGBUILD new file mode 100644 index 0000000..1e3daef --- /dev/null +++ b/x86_64/extra32/lib32-libcanberra/PKGBUILD @@ -0,0 +1,46 @@ +pkgname=lib32-libcanberra +pkgver=0.30 +pkgrel=1 +arch=(x86_64) +depends=(lib32-libvorbis lib32-alsa-lib lib32-pulseaudio libcanberra lib32-libltdl) +makedepends=(git) +_commit=c0620e432650e81062c1967cc669829dbd29b310 # master +source=("git+http://git.0pointer.net/clone/libcanberra.git#commit=$_commit" + libcanberra-multi-backend.patch) + +prepare() { + cd libcanberra + + # https://bugs.archlinux.org/task/71341 + # https://bugs.freedesktop.org/show_bug.cgi?id=51662 + git apply -3 ../libcanberra-multi-backend.patch + + ./autogen.sh +} + +build() { + cd libcanberra + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG=i686-pc-linux-gnu-pkg-config + + ./configure --sysconfdir=/etc --prefix=/usr --localstatedir=/var \ + --libdir=/usr/lib32 \ + --with-builtin=dso --enable-null --disable-oss \ + --enable-alsa --enable-pulse \ + --with-systemdsystemunitdir=/usr/lib/systemd/system --disable-gtk-doc + + make +} + +package() { + cd libcanberra + + make -j1 DESTDIR="$pkgdir" install + + rm -f "$pkgdir"/usr/lib32/*.la + rm -f "$pkgdir"/usr/lib32/gtk-{2,3}.0/modules/*.la + + rm -fr "$pkgdir"/usr/{include,share,bin,lib,lib32/gnome-settings-daemon-3.0} +} diff --git a/x86_64/extra32/lib32-libcanberra/libcanberra-multi-backend.patch b/x86_64/extra32/lib32-libcanberra/libcanberra-multi-backend.patch new file mode 100644 index 0000000..c546240 --- /dev/null +++ b/x86_64/extra32/lib32-libcanberra/libcanberra-multi-backend.patch @@ -0,0 +1,26 @@ +Index: libcanberra-0.29/src/driver-order.c +=================================================================== +--- libcanberra-0.29.orig/src/driver-order.c ++++ libcanberra-0.29/src/driver-order.c +@@ -30,6 +30,7 @@ + #include "driver-order.h" + + const char* const ca_driver_order[] = { ++ "multi", + #ifdef HAVE_PULSE + "pulse", + #endif +Index: libcanberra-0.29/src/multi.c +=================================================================== +--- libcanberra-0.29.orig/src/multi.c ++++ libcanberra-0.29/src/multi.c +@@ -107,8 +107,7 @@ int driver_open(ca_context *c) { + int ret = CA_SUCCESS; + + ca_return_val_if_fail(c, CA_ERROR_INVALID); +- ca_return_val_if_fail(c->driver, CA_ERROR_NODRIVER); +- ca_return_val_if_fail(!strncmp(c->driver, "multi", 5), CA_ERROR_NODRIVER); ++ ca_return_val_if_fail(!c->driver || strncmp(c->driver, "multi", 5) == 0, CA_ERROR_NODRIVER); + ca_return_val_if_fail(!PRIVATE(c), CA_ERROR_STATE); + + if (!(c->private = p = ca_new0(struct private, 1))) diff --git a/x86_64/extra32/lib32-libcap/PKGBUILD b/x86_64/extra32/lib32-libcap/PKGBUILD new file mode 100644 index 0000000..c5bc8b2 --- /dev/null +++ b/x86_64/extra32/lib32-libcap/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=lib32-libcap +pkgver=2.50 +pkgrel=1 +arch=('x86_64') +depends=(libcap lib32-linux-pam) +source=(https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-$pkgver.tar.xz) + +build() { + cd libcap-$pkgver + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + sed -i '/install.*STALIBNAME/d' libcap/Makefile + + make DYNAMIC=yes KERNEL_HEADERS='/usr/include' CC="gcc -m32" lib='lib32' prefix='/usr' sbindir='bin' +} + +package() { + cd libcap-$pkgver + + make DESTDIR="$pkgdir" RAISE_SETFCAP='no' lib='lib32' prefix='/usr' sbindir='bin' install + + rm -rf "${pkgdir}/usr/"{include,share/man,bin,sbin} +} diff --git a/x86_64/extra32/lib32-libdbusmenu/PKGBUILD b/x86_64/extra32/lib32-libdbusmenu/PKGBUILD new file mode 100644 index 0000000..7905fa8 --- /dev/null +++ b/x86_64/extra32/lib32-libdbusmenu/PKGBUILD @@ -0,0 +1,60 @@ +pkgname=lib32-libdbusmenu +pkgname_orig=libdbusmenu +pkgver=16.04.0 +pkgrel=2 +arch=('x86_64') +makedepends=('gnome-common' 'gobject-introspection' 'lib32-gtk2+' 'lib32-gtk3+' 'libdbusmenu' 'intltool' 'vala' 'valgrind') +options=('!emptydirs') +source=(https://launchpad.net/${pkgname_orig}/${pkgver%.?}/${pkgver}/+download/${pkgname_orig}-${pkgver}.tar.gz) + +prepare() { + cd ${pkgname_orig}-${pkgver} + # don't treat warnings as errors + sed -i 's/-Werror//' libdbusmenu-*/Makefile.{am,in} + cd .. + + cp -ra ${pkgname_orig}-${pkgver}{,-gtk2} +} + +build() { + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG_PATH='/usr/lib32/pkgconfig' + + export HAVE_VALGRIND_TRUE='#' + export HAVE_VALGRIND_FALSE='' + + msg2 "Building gtk3..." + (cd ${srcdir}/${pkgname_orig}-${pkgver} + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --libdir=/usr/lib32 \ + --disable-{dumper,tests} \ + --with-gtk=3 + make + ) + + msg2 "Building gtk2..." + (cd ${srcdir}/${pkgname_orig}-${pkgver}-gtk2 + ./configure --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --libdir=/usr/lib32 \ + --disable-{dumper,tests} \ + --with-gtk=2 + make + ) +} + +package() { + cd ${srcdir}/${pkgname_orig}-${pkgver}-gtk2 + make -j1 -C libdbusmenu-glib DESTDIR="${pkgdir}" install + make -j1 -C libdbusmenu-gtk DESTDIR="${pkgdir}" install + + cd ${srcdir}/${pkgname_orig}-${pkgver} + make -j1 -C libdbusmenu-glib DESTDIR="${pkgdir}" install + make -j1 -C libdbusmenu-gtk DESTDIR="${pkgdir}" install + + rm -rf "${pkgdir}"/usr/{include,share,lib,bin} +} diff --git a/x86_64/extra32/lib32-libdrm/PKGBUILD b/x86_64/extra32/lib32-libdrm/PKGBUILD new file mode 100644 index 0000000..4f60a3d --- /dev/null +++ b/x86_64/extra32/lib32-libdrm/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=lib32-libdrm +rname=libdrm +pkgver=2.4.112 +pkgrel=1 +arch=('x86_64') +depends=('libxcb' 'libxau' 'xorgproto' 'lib32-libpciaccess') +source=(https://dri.freedesktop.org/$rname/$rname-$pkgver.tar.xz) + +build() { + cd $rname-$pkgver + mkdir -p build && cd build + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + export CFLAGS="$CFLAGS -Wno-format-truncation" + + meson \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --buildtype=release \ + -Dudev=true \ + -Dvalgrind=false + + ninja +} + +package() { + cd $rname-$pkgver + cd build + DESTDIR=$pkgdir ninja install + + rm -rf $pkgdir/usr/include + rm -rf $pkgdir/usr/share +} diff --git a/x86_64/extra32/lib32-libepoxy/PKGBUILD b/x86_64/extra32/lib32-libepoxy/PKGBUILD new file mode 100644 index 0000000..2ff9d74 --- /dev/null +++ b/x86_64/extra32/lib32-libepoxy/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=lib32-libepoxy +pkgver=1.5.10 +pkgrel=1 +arch=(x86_64) +depends=(glibc) +makedepends=(git meson lib32-mesa lib32-systemd) +commitid=c84bc9459357a40e46e2fec0408d04fbdde2c973 # 1.5.10 +source=("git+https://github.com/anholt/libepoxy#commit=$commitid") + +build() { + export CC='gcc -m32' + export PKG_CONFIG=i686-pc-linux-gnu-pkg-config + + meson libepoxy build \ + --prefix=/usr \ + --libdir=/usr/lib32 + + meson compile -C build +} + +package() { + meson install -C build --destdir "$pkgdir" + + rm -r "$pkgdir/usr/include" +} diff --git a/x86_64/extra32/lib32-libffi/PKGBUILD b/x86_64/extra32/lib32-libffi/PKGBUILD new file mode 100644 index 0000000..b3d678d --- /dev/null +++ b/x86_64/extra32/lib32-libffi/PKGBUILD @@ -0,0 +1,38 @@ +pkgname=lib32-libffi +rpkgname=libffi +pkgver=3.3 +pkgrel=3 +depends=(libffi) +arch=('x86_64') +source=(ftp://sourceware.org/pub/$rpkgname/$rpkgname-$pkgver.tar.gz) + +build() { + cd $rpkgname-$pkgver + + sed -e '/^includesdir/ s/$(libdir).*$/$(includedir)/' \ + -i include/Makefile.in + + sed -e '/^includedir/ s/=.*$/=@includedir@/' \ + -e 's/^Cflags: -I${includedir}/Cflags:/' \ + -i libffi.pc.in + + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + ./configure \ + --build=i686-pc-linux-gnu \ + --prefix=/usr \ + --libdir=/usr/lib32 + + make +} + +package() { + cd $rpkgname-$pkgver + make DESTDIR=$pkgdir install + + rm -r "$pkgdir"/usr/{include,share} + install -Dm 644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname +} diff --git a/x86_64/extra32/lib32-libgcrypt/PKGBUILD b/x86_64/extra32/lib32-libgcrypt/PKGBUILD new file mode 100644 index 0000000..0fa9d73 --- /dev/null +++ b/x86_64/extra32/lib32-libgcrypt/PKGBUILD @@ -0,0 +1,37 @@ +_pkgbasename=libgcrypt +pkgname=lib32-$_pkgbasename +pkgver=1.9.4 +pkgrel=1 +arch=(x86_64) +depends=('lib32-libgpg-error' $_pkgbasename) +source=(https://gnupg.org/ftp/gcrypt/${_pkgbasename}/${_pkgbasename}-${pkgver}.tar.bz2) + +prepare() { + cd ${_pkgbasename}-${pkgver} + + # Use 32-bit assembler + sed 's:i586\*-\*-\*:x86_64-*-*:' -i mpi/config.links + sed 's:x86_64-\*-\*:ignore:;s:i?86-\*-\*:x86_64-*-*:' -i configure.ac + + autoreconf -i +} + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cd ${_pkgbasename}-${pkgver} + + ./configure --prefix=/usr --disable-padlock-support \ + --libdir=/usr/lib32 --enable-shared + + make +} + +package() { + cd ${_pkgbasename}-${pkgver} + + make DESTDIR="${pkgdir}" install + rm -rf "${pkgdir}"/usr/{include,share,bin,sbin} +} diff --git a/x86_64/extra32/lib32-libglvnd/PKGBUILD b/x86_64/extra32/lib32-libglvnd/PKGBUILD new file mode 100644 index 0000000..87e0d3c --- /dev/null +++ b/x86_64/extra32/lib32-libglvnd/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=lib32-libglvnd +pkgver=1.4.0 +pkgrel=3 +pkgdesc="The GL Vendor-Neutral Dispatch library" +arch=('x86_64') +url="https://github.com/NVIDIA/libglvnd" +license=('custom:BSD-like') +depends=('libglvnd') +makedepends=('lib32-libx11' 'lib32-libxext' 'xorgproto' 'python3' 'meson') +source=("$pkgname-$pkgver.tar.gz::https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v${pkgver}/libglvnd-v${pkgver}.tar.gz") + + +build() { + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG_PATH='/usr/lib32/pkgconfig' + + meson libglvnd-v$pkgver build \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + -D headers=false + + ninja -C build +} + +package() { + DESTDIR="$pkgdir" ninja -C build install + + rm -r "$pkgdir"/usr/include +} diff --git a/x86_64/extra32/lib32-libgpg-error/PKGBUILD b/x86_64/extra32/lib32-libgpg-error/PKGBUILD new file mode 100644 index 0000000..22b3d80 --- /dev/null +++ b/x86_64/extra32/lib32-libgpg-error/PKGBUILD @@ -0,0 +1,33 @@ +_pkgbasename=libgpg-error +pkgname=lib32-libgpg-error +pkgver=1.43 +pkgrel=1 +arch=('x86_64') +depends=(libgpg-error) +source=(https://www.gnupg.org/ftp/gcrypt/libgpg-error/${_pkgbasename}-${pkgver}.tar.bz2) + +prepare() { + cd $_pkgbasename-$pkgver + + sed -e 's|/var/example-target||' -i src/gpg-error-config-test.sh.in +} + +build() { + cd $_pkgbasename-$pkgver + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + ./configure --prefix=/usr --libdir=/usr/lib32 + + make +} + +package() { + cd $_pkgbasename-$pkgver + + make DESTDIR="${pkgdir}/" install + + rm -rf "${pkgdir}"/usr/{include,share,bin} +} diff --git a/x86_64/extra32/lib32-libgudev/PKGBUILD b/x86_64/extra32/lib32-libgudev/PKGBUILD new file mode 100644 index 0000000..16349bd --- /dev/null +++ b/x86_64/extra32/lib32-libgudev/PKGBUILD @@ -0,0 +1,34 @@ +pkgname=lib32-libgudev +pkgver=237 +pkgrel=1 +arch=(x86_64) +depends=( + lib32-glib2 lib32-systemd libgudev +) +makedepends=( + git meson python3 +) +ltag=dff7a794e55d6ad7a10e8edacd73aa047593e74c +source=(git+https://gitlab.gnome.org/GNOME/libgudev.git#tag=${ltag}) + +build() { + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG=i686-pc-linux-gnu-pkg-config + + meson libgudev build \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + -Dintrospection=disabled \ + -Dgtk_doc=false \ + -Dtests=disabled \ + -Dvapi=disabled + + meson compile -C build +} + +package() { + DESTDIR="${pkgdir}" meson install -C build + + rm -rf "${pkgdir}"/usr/{include,share} +} diff --git a/x86_64/extra32/lib32-libgusb/PKGBUILD b/x86_64/extra32/lib32-libgusb/PKGBUILD new file mode 100644 index 0000000..6018f3d --- /dev/null +++ b/x86_64/extra32/lib32-libgusb/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=lib32-libgusb +pkgver=0.3.10 +pkgrel=1 +arch=(x86_64) +depends=( + lib32-glib2 + lib32-libusb + libgusb +) +makedepends=( + git meson +) +ltag=332d5b987ffecb824426e88518e05547faf2b520 +source=(git+https://github.com/hughsie/libgusb.git#tag=${ltag}) + +build() { + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG_PATH=/usr/lib32/pkgconfig + + meson libgusb build \ + --prefix=/usr \ + --libdir='/usr/lib32' \ + -Ddocs=false \ + -Dintrospection=false \ + -Dvapi=false + + ninja -C build +} + +package() { + DESTDIR="${pkgdir}" ninja -C build install + + rm -rf "${pkgdir}"/usr/{bin,include,share} +} diff --git a/x86_64/extra32/lib32-libice/PKGBUILD b/x86_64/extra32/lib32-libice/PKGBUILD new file mode 100644 index 0000000..de43164 --- /dev/null +++ b/x86_64/extra32/lib32-libice/PKGBUILD @@ -0,0 +1,28 @@ +_pkgbasename=libice +pkgname=lib32-$_pkgbasename +pkgver=1.0.10 +pkgrel=1 +pkgdesc="X11 Inter-Client Exchange library (32-bit)" +arch=(x86_64) +url="https://xorg.freedesktop.org/" +depends=($_pkgbasename) +makedepends=('libxtrans' 'util-macros') +source=(${url}/releases/individual/lib/libICE-${pkgver}.tar.bz2) + +build() { + cd "${srcdir}/libICE-${pkgver}" + + export CC="gcc -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + ./configure --prefix=/usr --sysconfdir=/etc --libdir=/usr/lib32 + + make +} + +package() { + cd "${srcdir}/libICE-${pkgver}" + make DESTDIR="${pkgdir}" install + + rm -rf "${pkgdir}"/usr/{include,share} +} diff --git a/x86_64/extra32/lib32-libidn2/PKGBUILD b/x86_64/extra32/lib32-libidn2/PKGBUILD new file mode 100644 index 0000000..f6e4078 --- /dev/null +++ b/x86_64/extra32/lib32-libidn2/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=lib32-libidn2 +pkgver=2.3.2 +pkgrel=1 +pkgdesc='Free software implementation of IDNA2008, Punycode and TR46' +url='https://www.gnu.org/software/libidn/#libidn2' +arch=('x86_64') +license=('GPL2' 'LGPL3') +depends=('libidn2' 'lib32-libunistring') +source=(https://ftp.gnu.org/gnu/libidn/libidn2-${pkgver}.tar.gz) + +prepare() { + cd libidn2-${pkgver} + autoreconf -fvi +} + +build() { + cd libidn2-${pkgver} + + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG_PATH='/usr/lib32/pkgconfig' + + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib32 + + make +} + +package() { + cd libidn2-${pkgver} + + make DESTDIR="${pkgdir}" install + rm -rf "${pkgdir}"/usr/{bin,include,share} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-libindicator/PKGBUILD b/x86_64/extra32/lib32-libindicator/PKGBUILD new file mode 100644 index 0000000..e13e618 --- /dev/null +++ b/x86_64/extra32/lib32-libindicator/PKGBUILD @@ -0,0 +1,58 @@ +pkgname=lib32-libindicator +rname=libindicator +pkgver=12.10.1 +rev_ver=12.10 +pkgrel=1 +arch=(x86_64) +depends=(lib32-gtk2+ lib32-gtk3+ libindicator python3) +source=(https://launchpad.net/${rname}/$rev_ver/${pkgver}/+download/${rname}-${pkgver}.tar.gz + no-werror.patch) + +prepare() { + cd $rname-$pkgver + sed -i 's/-Werror//' {libindicator,tools}/Makefile.am + autoreconf -fvi +} + +build() { + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG_PATH='/usr/lib32/pkgconfig' + + cd $rname-$pkgver + mkdir -p build2 build3 + # GTK2 + cd build2 + ./../configure \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --localstatedir=/var \ + --libexecdir=/usr/lib32/libindicator \ + --sysconfdir=/etc \ + --with-gtk=2 \ + --disable-tests + + make + + # GTK3 + cd ../build3 + ./../configure \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --localstatedir=/var \ + --libexecdir=/usr/lib32/libindicator \ + --sysconfdir=/etc \ + --with-gtk=3 \ + --disable-tests + + make +} + +package() { + cd $rname-$pkgver + + make -C build2 DESTDIR=$pkgdir install + make -C build3 DESTDIR=$pkgdir install + + rm -rf "${pkgdir}"/usr/{include,share,bin} +} diff --git a/x86_64/extra32/lib32-libindicator/no-werror.patch b/x86_64/extra32/lib32-libindicator/no-werror.patch new file mode 100644 index 0000000..252506c --- /dev/null +++ b/x86_64/extra32/lib32-libindicator/no-werror.patch @@ -0,0 +1,321 @@ +diff -Naur libindicator-0.3.22-o/libindicator/Makefile.am libindicator-0.3.22/libindicator/Makefile.am +--- libindicator-0.3.22-o/libindicator/Makefile.am 2011-02-16 23:37:42.000000000 +0200 ++++ libindicator-0.3.22/libindicator/Makefile.am 2022-07-07 12:14:02.295024259 +0300 +@@ -44,8 +44,7 @@ + + libindicator_la_CFLAGS = \ + $(LIBINDICATOR_CFLAGS) \ +- -DG_LOG_DOMAIN=\"libindicator\" \ +- -Wall -Werror ++ -DG_LOG_DOMAIN=\"libindicator\" + + libindicator_la_LIBADD = \ + $(LIBINDICATOR_LIBS) +diff -Naur libindicator-0.3.22-o/libindicator/Makefile.in libindicator-0.3.22/libindicator/Makefile.in +--- libindicator-0.3.22-o/libindicator/Makefile.in 2011-03-23 20:13:38.000000000 +0200 ++++ libindicator-0.3.22/libindicator/Makefile.in 2022-07-07 12:14:28.110494008 +0300 +@@ -331,8 +331,7 @@ + + libindicator_la_CFLAGS = \ + $(LIBINDICATOR_CFLAGS) \ +- -DG_LOG_DOMAIN=\"libindicator\" \ +- -Wall -Werror ++ -DG_LOG_DOMAIN=\"libindicator\" + + libindicator_la_LIBADD = \ + $(LIBINDICATOR_LIBS) +diff -Naur libindicator-0.3.22-o/tests/Makefile.am libindicator-0.3.22/tests/Makefile.am +--- libindicator-0.3.22-o/tests/Makefile.am 2011-02-16 22:46:22.000000000 +0200 ++++ libindicator-0.3.22/tests/Makefile.am 2022-07-07 12:22:13.438658434 +0300 +@@ -35,7 +35,6 @@ + test-loader.c + + test_loader_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) \ + -DBUILD_DIR="\"$(builddir)\"" + +@@ -54,7 +53,6 @@ + test-desktop-shortcuts.c + + test_desktop_shortcuts_CFLAGS = \ +- -Wall -Werror \ + -DSRCDIR="\"$(srcdir)\"" \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) \ + -DBUILD_DIR="\"$(abs_builddir)\"" +@@ -88,7 +86,6 @@ + dummy-indicator-blank.c + + libdummy_indicator_blank_la_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + libdummy_indicator_blank_la_LIBADD = \ +@@ -108,7 +105,6 @@ + dummy-indicator-null.c + + libdummy_indicator_null_la_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + libdummy_indicator_null_la_LIBADD = \ +@@ -128,7 +124,6 @@ + dummy-indicator-signaler.c + + libdummy_indicator_signaler_la_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + libdummy_indicator_signaler_la_LIBADD = \ +@@ -148,7 +143,6 @@ + dummy-indicator-simple.c + + libdummy_indicator_simple_la_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + libdummy_indicator_simple_la_LIBADD = \ +@@ -170,7 +164,6 @@ + service-shutdown-timeout.c + + service_shutdown_timeout_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_shutdown_timeout_LDADD = \ +@@ -196,7 +189,6 @@ + service-manager-no-connect.c + + service_manager_no_connect_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_manager_no_connect_LDADD = \ +@@ -228,7 +220,6 @@ + service-manager-connect.c + + service_manager_connect_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_manager_connect_LDADD = \ +@@ -242,7 +233,6 @@ + service-manager-connect-service.c + + service_manager_connect_service_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_manager_connect_service_LDADD = \ +@@ -275,7 +265,6 @@ + service-version-manager.c + + service_version_manager_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_manager_LDADD = \ +@@ -290,7 +279,6 @@ + service-version-bad-service.c + + service_version_bad_service_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_bad_service_LDADD = \ +@@ -305,7 +293,6 @@ + service-version-good-service.c + + service_version_good_service_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_good_service_LDADD = \ +@@ -332,7 +319,6 @@ + service-version-multiwatch-manager.c + + service_version_multiwatch_manager_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_multiwatch_manager_LDADD = \ +@@ -347,7 +333,6 @@ + service-version-multiwatch-manager-impolite.c + + service_version_multiwatch_manager_impolite_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_multiwatch_manager_impolite_LDADD = \ +@@ -362,7 +347,6 @@ + service-version-multiwatch-service.c + + service_version_multiwatch_service_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_multiwatch_service_LDADD = \ +@@ -388,7 +372,6 @@ + service-manager-nostart-connect.c + + service_manager_nostart_connect_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_manager_nostart_connect_LDADD = \ +diff -Naur libindicator-0.3.22-o/tests/Makefile.in libindicator-0.3.22/tests/Makefile.in +--- libindicator-0.3.22-o/tests/Makefile.in 2011-03-23 20:13:38.000000000 +0200 ++++ libindicator-0.3.22/tests/Makefile.in 2022-07-07 12:22:12.030641851 +0300 +@@ -460,7 +460,6 @@ + test-loader.c + + test_loader_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) \ + -DBUILD_DIR="\"$(builddir)\"" + +@@ -473,7 +472,6 @@ + test-desktop-shortcuts.c + + test_desktop_shortcuts_CFLAGS = \ +- -Wall -Werror \ + -DSRCDIR="\"$(srcdir)\"" \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) \ + -DBUILD_DIR="\"$(abs_builddir)\"" +@@ -493,7 +491,6 @@ + dummy-indicator-blank.c + + libdummy_indicator_blank_la_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + libdummy_indicator_blank_la_LIBADD = \ +@@ -513,7 +510,6 @@ + dummy-indicator-null.c + + libdummy_indicator_null_la_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + libdummy_indicator_null_la_LIBADD = \ +@@ -533,7 +529,6 @@ + dummy-indicator-signaler.c + + libdummy_indicator_signaler_la_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + libdummy_indicator_signaler_la_LIBADD = \ +@@ -553,7 +548,6 @@ + dummy-indicator-simple.c + + libdummy_indicator_simple_la_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + libdummy_indicator_simple_la_LIBADD = \ +@@ -569,7 +563,6 @@ + service-shutdown-timeout.c + + service_shutdown_timeout_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_shutdown_timeout_LDADD = \ +@@ -581,7 +574,6 @@ + service-manager-no-connect.c + + service_manager_no_connect_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_manager_no_connect_LDADD = \ +@@ -593,7 +585,6 @@ + service-manager-connect.c + + service_manager_connect_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_manager_connect_LDADD = \ +@@ -605,7 +596,6 @@ + service-manager-connect-service.c + + service_manager_connect_service_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_manager_connect_service_LDADD = \ +@@ -618,7 +608,6 @@ + service-version-multiwatch-manager.c + + service_version_manager_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_manager_LDADD = \ +@@ -631,7 +620,6 @@ + service-version-bad-service.c + + service_version_bad_service_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_bad_service_LDADD = \ +@@ -644,7 +632,6 @@ + service-version-good-service.c + + service_version_good_service_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_good_service_LDADD = \ +@@ -653,7 +640,6 @@ + $(INDICATOR_LIB) + + service_version_multiwatch_manager_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_multiwatch_manager_LDADD = \ +@@ -666,7 +652,6 @@ + service-version-multiwatch-manager-impolite.c + + service_version_multiwatch_manager_impolite_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_multiwatch_manager_impolite_LDADD = \ +@@ -679,7 +664,6 @@ + service-version-multiwatch-service.c + + service_version_multiwatch_service_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_version_multiwatch_service_LDADD = \ +@@ -691,7 +675,6 @@ + service-manager-nostart-connect.c + + service_manager_nostart_connect_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) + + service_manager_nostart_connect_LDADD = \ +diff -Naur libindicator-0.3.22-o/tools/.Makefile.am.kate-swp libindicator-0.3.22/tools/.Makefile.am.kate-swp +--- libindicator-0.3.22-o/tools/.Makefile.am.kate-swp 1970-01-01 03:00:00.000000000 +0300 ++++ libindicator-0.3.22/tools/.Makefile.am.kate-swp 2022-07-07 12:23:24.627385530 +0300 +@@ -0,0 +1 @@ ++Kate Swap File 2.0(}4%'BSRUE +\ No newline at end of file +diff -Naur libindicator-0.3.22-o/tools/Makefile.in libindicator-0.3.22/tools/Makefile.in +--- libindicator-0.3.22-o/tools/Makefile.in 2011-03-23 20:13:38.000000000 +0200 ++++ libindicator-0.3.22/tools/Makefile.in 2022-07-07 12:23:32.775455502 +0300 +@@ -261,7 +261,6 @@ + indicator-loader.c + + indicator_loader_CFLAGS = \ +- -Wall -Werror \ + $(LIBINDICATOR_CFLAGS) -I$(top_srcdir) \ + -DBUILD_DIR="\"$(builddir)\"" + diff --git a/x86_64/extra32/lib32-libjpeg/PKGBUILD b/x86_64/extra32/lib32-libjpeg/PKGBUILD new file mode 100644 index 0000000..1a5fca5 --- /dev/null +++ b/x86_64/extra32/lib32-libjpeg/PKGBUILD @@ -0,0 +1,42 @@ +_name=libjpeg-turbo +pkgname=lib32-libjpeg +pkgver=2.1.2 +pkgrel=1 +pkgdesc='JPEG image codec with accelerated baseline compression and decompression' +arch=(x86_64) +url="https://libjpeg-turbo.org/" +depends=(libjpeg) +makedepends=(nasm cmake) +source=("https://sourceforge.net/projects/${_name}/files/${pkgver}/${_name}-${pkgver}.tar.gz") + +build() { + cd "${_name}-$pkgver" + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cmake \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib32 \ + -DCMAKE_BUILD_TYPE=None \ + -DWITH_JPEG8=ON \ + -W no-dev \ + -B build \ + -S . + + make VERBOSE=1 -C build +} + +package() { + cd "${_name}-$pkgver" + + make \ + VERBOSE=1 DESTDIR="${pkgdir}" \ + docdir="/usr/share/doc/${_name}" \ + exampledir="/usr/share/doc/${_name}" \ + install -C build + + # remove everything that is provided by libjpeg-turbo + rm -rf "${pkgdir}"/usr/{include,share,bin} +} diff --git a/x86_64/extra32/lib32-libltdl/PKGBUILD b/x86_64/extra32/lib32-libltdl/PKGBUILD new file mode 100644 index 0000000..aa2aaa8 --- /dev/null +++ b/x86_64/extra32/lib32-libltdl/PKGBUILD @@ -0,0 +1,39 @@ +pkgname=lib32-libltdl +pkgver=2.4.7 +pkgrel=1 +_gccver=11.2.0 +arch=(x86_64) +depends=(tar glibc libtool) +makedepends=("gcc>=$_gccver" help2man git) +_commit=6d7ce133ce54898cf28abd89d167cccfbc3c9b2b +source=(git+https://git.savannah.gnu.org/git/libtool.git#commit=$_commit + git+https://git.savannah.gnu.org/git/gnulib.git + gnulib-bootstrap::git+https://github.com/gnulib-modules/bootstrap.git + no_hostname.patch) + +prepare() { + cd libtool + + patch -Np1 -i ${srcdir}/no_hostname.patch + + git submodule init + git config --local submodule.gnulib.url "$srcdir/gnulib" + git config --local submodule.gl-mod/bootstrap.url "$srcdir/gnulib-bootstrap" + git submodule update + + ./bootstrap +} + +build() { + export CC="gcc -m32" CXX="g++ -m32" + + cd libtool + ./configure --prefix=/usr lt_cv_sys_lib_dlsearch_path_spec="/usr/lib /usr/lib32" --libdir=/usr/lib32 + make +} + +package() { + cd libtool + + make DESTDIR="$pkgdir" install-libLTLIBRARIES +} diff --git a/x86_64/extra32/lib32-libltdl/no_hostname.patch b/x86_64/extra32/lib32-libltdl/no_hostname.patch new file mode 100644 index 0000000..4fa900c --- /dev/null +++ b/x86_64/extra32/lib32-libltdl/no_hostname.patch @@ -0,0 +1,12 @@ +Index: libtool-2.4.6/m4/libtool.m4 +=================================================================== +--- libtool-2.4.6.orig/m4/libtool.m4 ++++ libtool-2.4.6/m4/libtool.m4 +@@ -728,7 +728,6 @@ _LT_CONFIG_SAVE_COMMANDS([ + cat <<_LT_EOF >> "$cfgfile" + #! $SHELL + # Generated automatically by $as_me ($PACKAGE) $VERSION +-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + # NOTE: Changes made to this file will be lost: look at ltmain.sh. + + # Provide generalized library-building support services. diff --git a/x86_64/extra32/lib32-libndp/PKGBUILD b/x86_64/extra32/lib32-libndp/PKGBUILD new file mode 100644 index 0000000..dbb8e51 --- /dev/null +++ b/x86_64/extra32/lib32-libndp/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=lib32-libndp +pkgver=1.8 +pkgrel=1 +pkgdesc='Library for Neighbor Discovery Protocol' +arch=('x86_64') +depends=('libndp') +makedepends=('git') +source=("git+https://github.com/jpirko/libndp#tag=v${pkgver}") + +prepare() { + cd libndp + + ./autogen.sh +} + +build() { + cd libndp + + export CC='gcc -m32' + export PKG_CONFIG_PATH='/usr/lib32/pkgconfig' + + ./configure \ + --prefix='/usr' \ + --libdir='/usr/lib32' \ + --libexecdir='/usr/lib32' \ + --localstatedir='/var' \ + --sysconfdir='/etc' + + make +} + +package() { + make DESTDIR="${pkgdir}" -C libndp install + + rm -rf "${pkgdir}"/usr/{bin,include,share} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-libnl/PKGBUILD b/x86_64/extra32/lib32-libnl/PKGBUILD new file mode 100644 index 0000000..2c2aa6f --- /dev/null +++ b/x86_64/extra32/lib32-libnl/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=lib32-libnl +pkgver=3.5.0 +pkgrel=1 +arch=('x86_64') +depends=('glibc' "libnl") +makedepends=('gcc') +source=("https://github.com/thom311/libnl/releases/download/libnl${pkgver//./_}/libnl-${pkgver}.tar.gz") + +build() { + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG_PATH='/usr/lib32/pkgconfig' + + cd libnl-${pkgver} + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --sbindir=/usr/bin \ + --libdir=/usr/lib32 + + make +} + +package() { + cd libnl-${pkgver} + + make DESTDIR="${pkgdir}" install + rm -rf "${pkgdir}"/{etc,usr/{bin,include,share}} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-libnm/PKGBUILD b/x86_64/extra32/lib32-libnm/PKGBUILD new file mode 100644 index 0000000..cdef6fe --- /dev/null +++ b/x86_64/extra32/lib32-libnm/PKGBUILD @@ -0,0 +1,70 @@ +pkgname=lib32-libnm +pkgver=1.36.2 +pkgrel=1 +pkgdesc="NetworkManager client library (32-bit)" +url="https://networkmanager.dev/" +arch=(x86_64) +depends=(gcc lib32-glib2 lib32-nspr lib32-nss lib32-systemd lib32-util-linux) +makedepends=(git intltool lib32-dbus lib32-jansson lib32-libndp lib32-libpsl + lib32-polkit libxslt meson) +_tag=799487f531998821b0961ca3a57276ab7882d9c0 +source=(git+https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git#tag=${_tag}) + +build() { + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG=i686-pc-linux-gnu-pkg-config + + local meson_options=( + # system paths + --prefix=/usr + --libdir=/usr/lib32 + -D dbus_conf_dir=/usr/share/dbus-1/system.d + + # platform + -D dist_version="${pkgver}-${pkgrel}" + -D libaudit=no + -D session_tracking_consolekit=false + -D suspend_resume=systemd + -D modify_system=true + -D selinux=false + + # features + -D bluez5_dun=false + -D concheck=false + -D ebpf=false + -D iwd=false + -D modem_manager=false + -D nm_cloud_setup=false + -D nmcli=false + -D nmtui=false + -D ovs=false + -D ppp=false + -D teamdctl=false + + # configuration plugins + -D config_plugins_default=keyfile + + # handlers for resolv.conf + -D netconfig=no + -D config_dns_rc_manager_default=symlink + + # miscellaneous + -D vapi=false + -D docs=false + -D introspection=false + -D tests=no + -D more_asserts=no + -D more_logging=false + -D qt=false + ) + + meson NetworkManager build "${meson_options[@]}" + meson compile -C build +} + +package() { + meson install -C build --destdir "${pkgdir}" + + rm -rf "${pkgdir}"/{etc,usr/{bin,include,lib,lib32/NetworkManager,share,libexec/nm*,sbin},var,lib} +} diff --git a/x86_64/extra32/lib32-libogg/PKGBUILD b/x86_64/extra32/lib32-libogg/PKGBUILD new file mode 100644 index 0000000..dd53105 --- /dev/null +++ b/x86_64/extra32/lib32-libogg/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=lib32-libogg +pkgver=1.3.5 +pkgrel=1 +arch=(x86_64) +depends=(libogg) +makedepends=( + cmake git ninja) +provides=(libogg.so) +source=(git+https://github.com/xiph/ogg.git?signed#tag=65b355cc20171010ecabf245e7b339aeab8ddbb9) + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG=i686-pc-linux-gnu-pkg-config + + cmake -S ogg -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=/usr/lib32 \ + -DINSTALL_DOCS=OFF \ + -DBUILD_SHARED_LIBS=ON + + cmake --build build +} + +package() { + DESTDIR="${pkgdir}" cmake --install build + rm -r "$pkgdir"/usr/include +} diff --git a/x86_64/extra32/lib32-libomxil-bellagio/PKGBUILD b/x86_64/extra32/lib32-libomxil-bellagio/PKGBUILD new file mode 100644 index 0000000..9e5b1a2 --- /dev/null +++ b/x86_64/extra32/lib32-libomxil-bellagio/PKGBUILD @@ -0,0 +1,36 @@ +rname=libomxil-bellagio +pkgname=lib32-libomxil-bellagio +pkgver=0.9.3 +pkgrel=1 +arch=('x86_64') +depends=('glibc') +source=("https://downloads.sourceforge.net/project/omxil/omxil/Bellagio%200.9.3/$rname-$pkgver.tar.gz" + fedora-fixes.patch) + +prepare() { + cd $rname-$pkgver + + patch -Np1 -i ../fedora-fixes.patch + sed -e 's/-Werror//' -i configure.ac + autoreconf -fiv +} + +build() { + cd $rname-$pkgver + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + CFLAGS+=' -fcommon' + + ./configure --prefix=/usr --libdir=/usr/lib32 --docdir=/usr/share/doc/$pkgname + make +} + +package() { + cd $rname-$pkgver + make DESTDIR=$pkgdir install + + rm -rf $pkgdir/usr/{share,bin,sbin,include} +} diff --git a/x86_64/extra32/lib32-libomxil-bellagio/fedora-fixes.patch b/x86_64/extra32/lib32-libomxil-bellagio/fedora-fixes.patch new file mode 100644 index 0000000..2ae3c3c --- /dev/null +++ b/x86_64/extra32/lib32-libomxil-bellagio/fedora-fixes.patch @@ -0,0 +1,199 @@ +When libomxdynamicloader.so is loaded, it complains that RM_Deinit can't be resolved. +Link explicitly against omxil-bellagio so that ld.so can find the reference. + +Signed-off-by: Qais Yousef + +--- bellagio-0.9.3/src/dynamic_loader/Makefile.am.old 2012-03-23 15:07:47.379021034 +0000 ++++ bellagio-0.9.3/src/dynamic_loader/Makefile.am 2012-03-23 15:08:47.563034818 +0000 +@@ -3,7 +3,7 @@ + omxdynamicloader_LTLIBRARIES = libomxdynamicloader.la + libomxdynamicloader_la_SOURCES = ste_dynamic_component_loader.c ste_dynamic_component_loader.h + +-libomxdynamicloader_la_LDFLAGS = ++libomxdynamicloader_la_LDFLAGS = -L$(abs_top_srcdir)/src/.libs -lomxil-bellagio + libomxdynamicloader_la_CFLAGS = -I$(top_srcdir)/include \ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/src/base \ +Fix dependency issue to allow parallel build + +Signed-off-by: Qais Yousef + +Index: bellagio-0.9.3/src/Makefile.am +=================================================================== +--- bellagio-0.9.3.orig/src/Makefile.am ++++ bellagio-0.9.3/src/Makefile.am +@@ -8,6 +8,7 @@ omxregister_bellagio_SOURCES = omxregist + omxregister_bellagio_CFLAGS = -DOMXILCOMPONENTSPATH=\"$(plugindir)/\" \ + -I$(top_srcdir)/include + omxregister_bellagio_LDFLAGS = -lomxil-bellagio -L$(builddir) ++omxregister_bellagio_DEPENDENCIES = libomxil-bellagio.la + + lib_LTLIBRARIES = libomxil-bellagio.la + libomxil_bellagio_la_SOURCES = component_loader.h \ +We always access globalComponentList[] at indexComponent=-1 which causes a +segfault. Use i as the index instead. + +Signed-off-by: Qais Yousef + +--- bellagio-0.9.3/src/omx_reference_resource_manager.c.old 2012-03-13 10:15:25.743940980 +0000 ++++ bellagio-0.9.3/src/omx_reference_resource_manager.c 2012-03-13 10:18:02.201971009 +0000 +@@ -485,7 +485,6 @@ + OMX_ERRORTYPE RM_removeFromWaitForResource(OMX_COMPONENTTYPE *openmaxStandComp) { + omx_base_component_PrivateType* omx_base_component_Private; + int i = 0; +- int indexComponent = -1; + + DEBUG(DEB_LEV_FUNCTION_NAME, "In %s\n", __func__); + omx_base_component_Private = (omx_base_component_PrivateType*)openmaxStandComp->pComponentPrivate; +@@ -493,16 +492,13 @@ + while(listOfcomponentRegistered[i].component_name != NULL ) { + if (!strcmp(listOfcomponentRegistered[i].component_name, omx_base_component_Private->name)) { + // found component in the list of the resource manager +- removeElemFromList(&globalComponentList[indexComponent], openmaxStandComp); +- break; ++ removeElemFromList(&globalComponentList[i], openmaxStandComp); ++ DEBUG(DEB_LEV_FUNCTION_NAME, "Out of %s\n", __func__); ++ return OMX_ErrorNone; + } + i++; + } +- if (indexComponent <0) { +- // No resource to be handled +- DEBUG(DEB_LEV_ERR, "In %s No resource to be handled\n", __func__); +- return OMX_ErrorNone; +- } +- DEBUG(DEB_LEV_FUNCTION_NAME, "Out of %s\n", __func__); ++ // No resource to be handled ++ DEBUG(DEB_LEV_ERR, "In %s No resource to be handled\n", __func__); + return OMX_ErrorNone; + } + OMX_INDEXTYPE/OMX_INDEXVENDORTYPE in one switch + src/base/omx_base_component.c | 54 ++++++++++++++++++++++------------------- + 1 files changed, 29 insertions(+), 25 deletions(-) +--- a/src/base/omx_base_component.c ++++ a/src/base/omx_base_component.c +@@ -915,14 +915,6 @@ OSCL_EXPORT_REF OSCL_EXPORT_REF OMX_ERRORTYPE omx_base_component_GetParameter( + return OMX_ErrorBadParameter; + } + switch(nParamIndex) { +- case OMX_IndexParameterThreadsID: +- if ((err = checkHeader(ComponentParameterStructure, sizeof(OMX_PARAM_BELLAGIOTHREADS_ID))) != OMX_ErrorNone) { +- break; +- } +- threadID = (OMX_PARAM_BELLAGIOTHREADS_ID *)ComponentParameterStructure; +- threadID->nThreadBufferMngtID = omx_base_component_Private->bellagioThreads->nThreadBufferMngtID; +- threadID->nThreadMessageID = omx_base_component_Private->bellagioThreads->nThreadMessageID; +- break; + case OMX_IndexParamAudioInit: + case OMX_IndexParamVideoInit: + case OMX_IndexParamImageInit: +@@ -988,28 +980,40 @@ OSCL_EXPORT_REF OSCL_EXPORT_REF OMX_ERRORTYPE omx_base_component_GetParameter( + } + } + break; +- case OMX_IndexVendorCompPropTunnelFlags: +- pPropTunnelSetup = (OMX_VENDOR_PROP_TUNNELSETUPTYPE*)ComponentParameterStructure; ++ default: ++ /* additional switch statement for extended OMX_INDEXTYPE */ ++ switch((OMX_INDEXVENDORTYPE) nParamIndex) { ++ case OMX_IndexParameterThreadsID: ++ if ((err = checkHeader(ComponentParameterStructure, sizeof(OMX_PARAM_BELLAGIOTHREADS_ID))) != OMX_ErrorNone) { ++ break; ++ } ++ threadID = (OMX_PARAM_BELLAGIOTHREADS_ID *)ComponentParameterStructure; ++ threadID->nThreadBufferMngtID = omx_base_component_Private->bellagioThreads->nThreadBufferMngtID; ++ threadID->nThreadMessageID = omx_base_component_Private->bellagioThreads->nThreadMessageID; ++ break; ++ case OMX_IndexVendorCompPropTunnelFlags: ++ pPropTunnelSetup = (OMX_VENDOR_PROP_TUNNELSETUPTYPE*)ComponentParameterStructure; + +- if (pPropTunnelSetup->nPortIndex >= (omx_base_component_Private->sPortTypesParam[OMX_PortDomainAudio].nPorts + +- omx_base_component_Private->sPortTypesParam[OMX_PortDomainVideo].nPorts + +- omx_base_component_Private->sPortTypesParam[OMX_PortDomainImage].nPorts + +- omx_base_component_Private->sPortTypesParam[OMX_PortDomainOther].nPorts)) { ++ if (pPropTunnelSetup->nPortIndex >= (omx_base_component_Private->sPortTypesParam[OMX_PortDomainAudio].nPorts + ++ omx_base_component_Private->sPortTypesParam[OMX_PortDomainVideo].nPorts + ++ omx_base_component_Private->sPortTypesParam[OMX_PortDomainImage].nPorts + ++ omx_base_component_Private->sPortTypesParam[OMX_PortDomainOther].nPorts)) { + +- DEBUG(DEB_LEV_ERR,"In %s OMX_IndexVendorCompPropTunnelFlags nPortIndex=%d Line=%d \n", +- __func__,(int)pPropTunnelSetup->nPortIndex,__LINE__); ++ DEBUG(DEB_LEV_ERR,"In %s OMX_IndexVendorCompPropTunnelFlags nPortIndex=%d Line=%d \n", ++ __func__,(int)pPropTunnelSetup->nPortIndex,__LINE__); + +- return OMX_ErrorBadPortIndex; +- } ++ return OMX_ErrorBadPortIndex; ++ } + +- pPort = omx_base_component_Private->ports[pPropTunnelSetup->nPortIndex]; ++ pPort = omx_base_component_Private->ports[pPropTunnelSetup->nPortIndex]; + +- pPropTunnelSetup->nTunnelSetup.nTunnelFlags = pPort->nTunnelFlags; +- pPropTunnelSetup->nTunnelSetup.eSupplier = pPort->eBufferSupplier; +- break; +- default: +- err = OMX_ErrorUnsupportedIndex; +- break; ++ pPropTunnelSetup->nTunnelSetup.nTunnelFlags = pPort->nTunnelFlags; ++ pPropTunnelSetup->nTunnelSetup.eSupplier = pPort->eBufferSupplier; ++ break; ++ default: ++ err = OMX_ErrorUnsupportedIndex; ++ break; ++ } + } + DEBUG(DEB_LEV_FUNCTION_NAME, "Out of %s for component %p\n", __func__, hComponent); + return err; +diff -up libomxil-bellagio-0.9.3/Makefile.am.nodoc libomxil-bellagio-0.9.3/Makefile.am +--- libomxil-bellagio-0.9.3/Makefile.am.nodoc 2011-01-12 08:53:26.000000000 +0100 ++++ libomxil-bellagio-0.9.3/Makefile.am 2012-04-23 13:46:15.410823381 +0200 +@@ -7,7 +7,6 @@ EXTRA_DIST = libomxil-bellagio.spec + pkgconfigdir = $(libdir)/pkgconfig + pkgconfig_DATA = libomxil-bellagio.pc + +-docdir = $(DESTDIR)$(prefix)/share/doc/@PACKAGE@ + doc_DATA = README \ + ChangeLog \ + TODO +diff -up libomxil-bellagio-0.9.3/src/omxregister.c.unused libomxil-bellagio-0.9.3/src/omxregister.c +--- libomxil-bellagio-0.9.3/src/omxregister.c.unused 2011-01-12 08:53:26.000000000 +0100 ++++ libomxil-bellagio-0.9.3/src/omxregister.c 2012-12-10 22:02:28.621695659 +0100 +@@ -248,7 +248,15 @@ static int buildComponentsList(FILE* omx + } + fptr(stComponents); + err = fwrite(lib_absolute_path, 1, strlen(lib_absolute_path), omxregistryfp); +- err = fwrite("\n", 1, 1, omxregistryfp); ++ if (err != strlen(lib_absolute_path)) { ++ DEBUG(DEB_LEV_ERR, "Failed to write %zu bytes to fd %d\n", strlen(lib_absolute_path), fileno(omxregistryfp)); ++ continue; ++ } ++ err = fwrite("\n", 1, strlen(buffer), omxregistryfp); ++ if (err != strlen(buffer)) { ++ DEBUG(DEB_LEV_ERR, "Failed to write %zu bytes to fd %d\n", strlen(buffer), fileno(omxregistryfp)); ++ continue; ++ } + + + for (i = 0; i +Date: Thu, 8 Jul 2021 20:56:05 +0200 +Subject: [PATCH] Reapply [IR] Don't accept nullptr as GEP element type + +Reapply after fixing another occurrence in lldb that was relying +on this in the preceding commit. + +----- + +GetElementPtrInst::Create() (and IRBuilder methods based on it) +currently accept nullptr as the element type, and will fetch the +element type from the pointer in that case. Remove this fallback, +as it is incompatible with opaque pointers. I've removed a handful +of leftover calls using this behavior as a preliminary step. + +Out-of-tree code affected by this change should either pass a proper +type, or can temporarily explicitly call getPointerElementType(), +if the newly added assertion is encountered. + +Differential Revision: https://reviews.llvm.org/D105653 +--- + llvm/include/llvm/IR/Instructions.h | 20 ++++++-------------- + 1 file changed, 6 insertions(+), 14 deletions(-) + +diff --git a/llvm/include/llvm/IR/Instructions.h b/llvm/include/llvm/IR/Instructions.h +index a5cebf0a4626..0c43a56daa33 100644 +--- a/llvm/include/llvm/IR/Instructions.h ++++ b/llvm/include/llvm/IR/Instructions.h +@@ -956,13 +956,9 @@ public: + const Twine &NameStr = "", + Instruction *InsertBefore = nullptr) { + unsigned Values = 1 + unsigned(IdxList.size()); +- if (!PointeeType) { +- PointeeType = +- cast(Ptr->getType()->getScalarType())->getElementType(); +- } else { +- assert(cast(Ptr->getType()->getScalarType()) +- ->isOpaqueOrPointeeTypeMatches(PointeeType)); +- } ++ assert(PointeeType && "Must specify element type"); ++ assert(cast(Ptr->getType()->getScalarType()) ++ ->isOpaqueOrPointeeTypeMatches(PointeeType)); + return new (Values) GetElementPtrInst(PointeeType, Ptr, IdxList, Values, + NameStr, InsertBefore); + } +@@ -972,13 +968,9 @@ public: + const Twine &NameStr, + BasicBlock *InsertAtEnd) { + unsigned Values = 1 + unsigned(IdxList.size()); +- if (!PointeeType) { +- PointeeType = +- cast(Ptr->getType()->getScalarType())->getElementType(); +- } else { +- assert(cast(Ptr->getType()->getScalarType()) +- ->isOpaqueOrPointeeTypeMatches(PointeeType)); +- } ++ assert(PointeeType && "Must specify element type"); ++ assert(cast(Ptr->getType()->getScalarType()) ++ ->isOpaqueOrPointeeTypeMatches(PointeeType)); + return new (Values) GetElementPtrInst(PointeeType, Ptr, IdxList, Values, + NameStr, InsertAtEnd); + } diff --git a/x86_64/extra32/lib32-llvm/02.patch b/x86_64/extra32/lib32-llvm/02.patch new file mode 100644 index 0000000..c716886 --- /dev/null +++ b/x86_64/extra32/lib32-llvm/02.patch @@ -0,0 +1,13 @@ +diff --git a/llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt b/llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt +index eb924282a75e..85929b54d6ce 100644 +--- a/llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt ++++ b/llvm/lib/CodeGen/AsmPrinter/CMakeLists.txt +@@ -44,3 +44,8 @@ add_llvm_component_library(LLVMAsmPrinter + Support + Target + ) ++ ++# https://bugs.llvm.org/show_bug.cgi?id=50611#c3 ++if (CMAKE_COMPILER_IS_GNUCXX) ++ set_source_files_properties(DwarfCompileUnit.cpp PROPERTIES COMPILE_FLAGS -fno-strict-aliasing) ++endif() diff --git a/x86_64/extra32/lib32-llvm/03.patch b/x86_64/extra32/lib32-llvm/03.patch new file mode 100644 index 0000000..1138501 --- /dev/null +++ b/x86_64/extra32/lib32-llvm/03.patch @@ -0,0 +1,50 @@ +# Based on https://github.com/ispc/ispc/blob/main/llvm_patches/12_0_disable-A-B-A-B-and-BSWAP-in-InstCombine.patch + +diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp +index d01a021bf3f4..bccce825a03d 100644 +--- a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp ++++ b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp +@@ -15,6 +15,7 @@ + #include "llvm/ADT/APInt.h" + #include "llvm/ADT/STLExtras.h" + #include "llvm/ADT/SmallVector.h" ++#include "llvm/ADT/Triple.h" + #include "llvm/Analysis/InstructionSimplify.h" + #include "llvm/Analysis/ValueTracking.h" + #include "llvm/IR/Constant.h" +@@ -1369,9 +1370,12 @@ Instruction *InstCombinerImpl::visitAdd(BinaryOperator &I) { + } + } + +- // A+B --> A|B iff A and B have no bits set in common. +- if (haveNoCommonBitsSet(LHS, RHS, DL, &AC, &I, &DT)) +- return BinaryOperator::CreateOr(LHS, RHS); ++ // Disable this transformation for ISPC SPIR-V ++ if (!Triple(I.getModule()->getTargetTriple()).isSPIR()) { ++ // A+B --> A|B iff A and B have no bits set in common. ++ if (haveNoCommonBitsSet(LHS, RHS, DL, &AC, &I, &DT)) ++ return BinaryOperator::CreateOr(LHS, RHS); ++ } + + // add (select X 0 (sub n A)) A --> select X A n + { +diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp +index 120852c44474..8de55311ce3e 100644 +--- a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp ++++ b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp +@@ -2671,9 +2671,12 @@ Instruction *InstCombinerImpl::visitOr(BinaryOperator &I) { + if (Instruction *FoldedLogic = foldBinOpIntoSelectOrPhi(I)) + return FoldedLogic; + +- if (Instruction *BitOp = matchBSwapOrBitReverse(I, /*MatchBSwaps*/ true, +- /*MatchBitReversals*/ true)) +- return BitOp; ++ // Disable this transformation for ISPC SPIR-V ++ if (!Triple(I.getModule()->getTargetTriple()).isSPIR()) { ++ if (Instruction *BitOp = matchBSwapOrBitReverse(I, /*MatchBSwaps*/ true, ++ /*MatchBitReversals*/ true)) ++ return BitOp; ++ } + + if (Instruction *Funnel = matchFunnelShift(I, *this)) + return Funnel; diff --git a/x86_64/extra32/lib32-llvm/04.patch b/x86_64/extra32/lib32-llvm/04.patch new file mode 100644 index 0000000..263020e --- /dev/null +++ b/x86_64/extra32/lib32-llvm/04.patch @@ -0,0 +1,91 @@ +From e7c9a6cae09d99388d8384ca7c0fb5b24b353975 Mon Sep 17 00:00:00 2001 +From: Nikita Popov +Date: Mon, 17 Jan 2022 15:48:01 +0100 +Subject: [PATCH] [SDAG] Don't move DBG_VALUE instructions after insertion + point during scheduling (PR53243) + +EmitSchedule() shouldn't be touching instructions after the provided +insertion point. The change introduced in D83561 performs a scan to +the end of the block, and thus may move unrelated instructions. In +particular, this ends up moving instructions that have been produced +by FastISel and will later be deleted. Moving them means that more +instructions than intended are removed. + +Fix this by stopping the iteration when the insertion point is +reached. + +Fixes https://github.com/llvm/llvm-project/issues/53243. + +Differential Revision: https://reviews.llvm.org/D117489 +--- + .../SelectionDAG/ScheduleDAGSDNodes.cpp | 7 ++-- + .../CodeGen/X86/pr53243-tail-call-fastisel.ll | 39 +++++++++++++++++++ + 2 files changed, 43 insertions(+), 3 deletions(-) + create mode 100644 llvm/test/CodeGen/X86/pr53243-tail-call-fastisel.ll + +diff --git a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp b/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp +index bec240d6c4d4..403f34573899 100644 +--- a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp ++++ b/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp +@@ -1057,12 +1057,13 @@ EmitSchedule(MachineBasicBlock::iterator &InsertPos) { + "first terminator cannot be a debug value"); + for (MachineInstr &MI : make_early_inc_range( + make_range(std::next(FirstTerm), InsertBB->end()))) { ++ // Only scan up to insertion point. ++ if (&MI == InsertPos) ++ break; ++ + if (!MI.isDebugValue()) + continue; + +- if (&MI == InsertPos) +- InsertPos = std::prev(InsertPos->getIterator()); +- + // The DBG_VALUE was referencing a value produced by a terminator. By + // moving the DBG_VALUE, the referenced value also needs invalidating. + MI.getOperand(0).ChangeToRegister(0, false); +diff --git a/llvm/test/CodeGen/X86/pr53243-tail-call-fastisel.ll b/llvm/test/CodeGen/X86/pr53243-tail-call-fastisel.ll +new file mode 100644 +index 000000000000..333eff8fb008 +--- /dev/null ++++ b/llvm/test/CodeGen/X86/pr53243-tail-call-fastisel.ll +@@ -0,0 +1,39 @@ ++; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ++; RUN: llc -O0 -fast-isel -mtriple=x86_64-- < %s | FileCheck %s ++ ++define void @test() { ++; CHECK-LABEL: test: ++; CHECK: # %bb.0: ++; CHECK-NEXT: jmp set_state@PLT # TAILCALL ++ tail call void @set_state() ++ call void @llvm.dbg.value(metadata i64 0, metadata !10, metadata !DIExpression()), !dbg !16 ++ ret void ++} ++ ++declare void @set_state() ++ ++; Function Attrs: nofree nosync nounwind readnone speculatable willreturn ++declare void @llvm.dbg.value(metadata, metadata, metadata) #0 ++ ++attributes #0 = { nofree nosync nounwind readnone speculatable willreturn } ++ ++!llvm.module.flags = !{!0} ++!llvm.dbg.cu = !{!1} ++ ++!0 = !{i32 2, !"Debug Info Version", i32 3} ++!1 = distinct !DICompileUnit(language: DW_LANG_Rust, file: !2, producer: "clang LLVM (rustc version 1.60.0-nightly (ec4bcaac4 2022-01-15))", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !3) ++!2 = !DIFile(filename: "src/lib.rs/@/bug.63e521cd-cgu.0", directory: "/tmp/rust-bug") ++!3 = !{!4} ++!4 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "Option", file: !5, baseType: !6, size: 8, align: 8, flags: DIFlagEnumClass, elements: !7) ++!5 = !DIFile(filename: "", directory: "") ++!6 = !DIBasicType(name: "u8", size: 8, encoding: DW_ATE_unsigned) ++!7 = !{!8, !9} ++!8 = !DIEnumerator(name: "None", value: 0) ++!9 = !DIEnumerator(name: "Some", value: 1) ++!10 = !DILocalVariable(name: "msg", arg: 2, scope: !11, file: !12, line: 689, type: !6) ++!11 = distinct !DISubprogram(name: "expect<()>", linkageName: "_ZN4core6option15Option$LT$T$GT$6expect17h9a574c18f194c213E", scope: !4, file: !12, line: 689, type: !13, scopeLine: 689, flags: DIFlagPrototyped, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !1, templateParams: !15, retainedNodes: !15) ++!12 = !DIFile(filename: "/rustc/ec4bcaac450279b029f3480b8b8f1b82ab36a5eb/library/core/src/option.rs", directory: "", checksumkind: CSK_MD5, checksum: "4120c8557937a0772190a676ec193800") ++!13 = !DISubroutineType(types: !14) ++!14 = !{null, !4} ++!15 = !{} ++!16 = !DILocation(line: 0, scope: !11) diff --git a/x86_64/extra32/lib32-llvm/PKGBUILD b/x86_64/extra32/lib32-llvm/PKGBUILD new file mode 100644 index 0000000..6c71a96 --- /dev/null +++ b/x86_64/extra32/lib32-llvm/PKGBUILD @@ -0,0 +1,85 @@ +pkgname=lib32-llvm +rname=llvm +pkgver=13.0.1 +pkgrel=1 +arch=('x86_64') +url="https://llvm.org/" +license=('custom:Apache 2.0 with LLVM Exception') +depends=('lib32-libffi' 'lib32-zlib' 'lib32-polly' 'lib32-libxml2' 'llvm') +makedepends=('cmake' 'ninja' 'python3') +options=('!lto') # extra/llvm has many test failures with LTO +dlink=https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver +source=($dlink/llvm-$pkgver.src.tar.xz + 01.patch + 02.patch + 03.patch + 04.patch) + +prepare() { + cd $rname-$pkgver.src + mkdir -p build + + # https://github.com/intel/intel-graphics-compiler/issues/204 + echo "[PATCH]: 01 of 04" && patch -Rp2 -i ../01.patch + + # Work around intermittent 'clang -0 -g' crashes + echo "[PATCH]: 02 of 04" && patch -Np2 -i ../02.patch + + # Fix an ISPC build failure (https://github.com/ispc/ispc/issues/2189) + echo "[PATCH]: 03 of 04" && patch -Np2 -i ../03.patch + + # https://github.com/llvm/llvm-project/issues/53243 + https://github.com/rust-lang/rust/issues/92869 + echo "[PATCH]: 04 of 04" && patch -Np2 -i ../04.patch +} + + +build() { + cd "$srcdir/$rname-$pkgver.src/build" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cmake .. -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLLVM_LIBDIR_SUFFIX=32 \ + -DCMAKE_C_FLAGS:STRING=-m32 \ + -DCMAKE_CXX_FLAGS:STRING=-m32 \ + -DLLVM_TARGET_ARCH:STRING=i686 \ + -DLLVM_HOST_TRIPLE=$CHOST \ + -DLLVM_DEFAULT_TARGETS_TRIPLE="i686-pc-linux-gnu" \ + -DLLVM_BUILD_LLVM_DYLIB=ON \ + -DLLVM_LINK_LLVM_DYLIB=ON \ + -DLLVM_ENABLE_RTTI=ON \ + -DLLVM_ENABLE_FFI=ON \ + -DLLVM_BUILD_DOCS=OFF \ + -DLLVM_ENABLE_SPHINX=OFF \ + -DLLVM_ENABLE_DOXYGEN=OFF \ + -DLLVM_BINUTILS_INCDIR=/usr/include + + ninja all +} + +package() { + cd "$srcdir/$rname-$pkgver.src/build" + + DESTDIR="$pkgdir" ninja install + + # Fix permissions of static libs + chmod -x "$pkgdir"/usr/lib32/*.a + + mv "$pkgdir/usr/bin/llvm-config" "$pkgdir/usr/lib32/llvm-config" + mv "$pkgdir/usr/include/llvm/Config/llvm-config.h" \ + "$pkgdir/usr/lib32/llvm-config-32.h" + + rm -rf "$pkgdir"/usr/{bin,include,share/{doc,man,llvm,opt-viewer}} + + # Header stub is taken from Fedora + install -d "$pkgdir/usr/include/llvm/Config" + mv "$pkgdir/usr/lib32/llvm-config-32.h" "$pkgdir/usr/include/llvm/Config/" + + mkdir "$pkgdir"/usr/bin + mv "$pkgdir/usr/lib32/llvm-config" "$pkgdir/usr/bin/llvm-config32" + + # Symlink LLVMgold.so from /usr/lib/bfd-plugins + install -d "$pkgdir/usr/lib32/bfd-plugins" + ln -s ../LLVMgold.so "$pkgdir/usr/lib32/bfd-plugins/LLVMgold.so" +} diff --git a/x86_64/extra32/lib32-lm-sensors/PKGBUILD b/x86_64/extra32/lib32-lm-sensors/PKGBUILD new file mode 100644 index 0000000..8fd1da8 --- /dev/null +++ b/x86_64/extra32/lib32-lm-sensors/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=lib32-lm-sensors +pkgver=3.6.0.r41.g31d1f125 +_commit=31d1f125d8076f1c8c8f3224b31d240e6e6a1763 +pkgrel=1 +pkgdesc="Collection of user space tools for general SMBus access and hardware monitoring (32-bit)" +arch=('x86_64') +url="http://www.lm-sensors.org/" +makedepends=('git') +depends=('lm-sensors') +source=("git+https://github.com/groeck/lm-sensors.git#commit=${_commit}") + +prepare() { + cd "${srcdir}"/lm-sensors* + + sed -i 's/CC := gcc/CC := gcc -m32/' Makefile +} + +build() { + cd "${srcdir}"/lm-sensors* + + make PREFIX=/usr +} + +package() { + cd "${srcdir}"/lm-sensors* + + make PREFIX=/usr LIBDIR=/usr/lib32 BUILD_STATIC_LIB=0 DESTDIR="${pkgdir}" install + + rm -rf "${pkgdir}"/etc/ + rm -rf "${pkgdir}"/usr/{bin,sbin,include,man} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-mesa/PKGBUILD b/x86_64/extra32/lib32-mesa/PKGBUILD new file mode 100644 index 0000000..94d583e --- /dev/null +++ b/x86_64/extra32/lib32-mesa/PKGBUILD @@ -0,0 +1,81 @@ +pkgname=lib32-mesa +rpkgname=mesa +pkgver=22.1.3 +pkgrel=3 +arch=('x86_64') +depends=('glibc' 'lib32-libdrm' 'lib32-llvm' 'lib32-libglvnd' 'lib32-libx11' 'lib32-wayland' + 'lib32-libxml2' 'lib32-libva' 'lib32-expat' 'lib32-cairo' 'lib32-elfutils' 'lib32-libxshmfence' + 'lib32-libxxf86vm' 'lib32-vdpau' 'lib32-vulkan-icd-loader' 'lib32-lm-sensors' 'lib32-clang' + 'lib32-libomxil-bellagio' 'lib32-polly' 'lib32-libxrandr' 'lib32-libunwind' 'libclc') +source=(https://mesa.freedesktop.org/archive/mesa-$pkgver.tar.xz) +makedepends=('directx-headers' 'vulkan-headers' 'python3-pip' 'clang' 'cmake' 'byacc' 'bison' 'glslang' 'lib32-directx-headers' 'lib32-polly') + +prepare() { + cd mesa-$pkgver + + pip install setuptools + echo "[!]: Installing mako with pip" + pip install mako + sed '1s/python/&3/' -i bin/symbols-check.py + + rm -rf build +} + +build() { + cd mesa-$pkgver + + mkdir -p build && cd build + + export CC="clang -m32" + export CXX="clang++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + cat >crossfile.ini < "${pkgdir}/usr/lib32/lib${lib}.so" + ln -sv ${lib}w.pc "${pkgdir}/usr/lib32/pkgconfig/${lib}.pc" + done + + # some packages look for -lcurses during build + printf 'INPUT(-lncursesw)\n' > "$pkgdir/usr/lib32/libcursesw.so" + ln -sv libncurses.so "$pkgdir/usr/lib32/libcurses.so" + + for lib in tic tinfo; do + printf "INPUT(libncursesw.so.%s)\n" "${pkgver:0:1}" > "${pkgdir}/usr/lib32/lib${lib}.so" + ln -sv libncursesw.so.${pkgver:0:1} "${pkgdir}/usr/lib32/lib${lib}.so.${pkgver:0:1}" + ln -fsv ncursesw.pc "$pkgdir/usr/lib32/pkgconfig/${lib}.pc" + done + + rm -frv "${pkgdir}/usr/"{bin,include} +} diff --git a/x86_64/extra32/lib32-nettle/PKGBUILD b/x86_64/extra32/lib32-nettle/PKGBUILD new file mode 100644 index 0000000..22f2f71 --- /dev/null +++ b/x86_64/extra32/lib32-nettle/PKGBUILD @@ -0,0 +1,31 @@ +_pkgbasename=nettle +pkgname=lib32-$_pkgbasename +pkgver=3.7.3 +pkgrel=1 +pkgdesc="A low-level cryptographic library (32-bit)" +arch=('x86_64') +url="https://www.lysator.liu.se/~nisse/nettle/" +depends=('lib32-gmp' $_pkgbasename) +source=(https://ftp.gnu.org/gnu/nettle/$_pkgbasename-$pkgver.tar.gz) + +build() { + cd $_pkgbasename-$pkgver + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --enable-shared \ + --with-include-path=/usr/lib32/gmp + + make +} + +package() { + cd $_pkgbasename-$pkgver + make DESTDIR="$pkgdir/" install + rm -rf "${pkgdir}"/usr/{include,share,bin} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-nspr/PKGBUILD b/x86_64/extra32/lib32-nspr/PKGBUILD new file mode 100644 index 0000000..97b275d --- /dev/null +++ b/x86_64/extra32/lib32-nspr/PKGBUILD @@ -0,0 +1,32 @@ +pkgname=lib32-nspr +pkgver=4.33 +pkgrel=1 +arch=(x86_64) +depends=(nspr) +makedepends=(zip) +source=(https://archive.mozilla.org/pub/nspr/releases/v$pkgver/src/nspr-$pkgver.tar.gz) + +build() { + cd nspr-$pkgver/nspr + + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --includedir=/usr/include/nspr \ + --enable-optimize \ + --disable-debug \ + --disable-64bit + make ${SOURCE_DATE_EPOCH:+ + SH_NOW="${SOURCE_DATE_EPOCH}000000" + SH_DATE="$(date --utc --date="@$SOURCE_DATE_EPOCH" '+%Y-%m-%d %T')" + } +} + +package() { + cd nspr-$pkgver/nspr + + make DESTDIR="$pkgdir" install + ln -s nspr.pc "$pkgdir/usr/lib32/pkgconfig/mozilla-nspr.pc" + + rm -r "$pkgdir"/usr/{bin,share,include} +} diff --git a/x86_64/extra32/lib32-nss/PKGBUILD b/x86_64/extra32/lib32-nss/PKGBUILD new file mode 100644 index 0000000..fb8efa9 --- /dev/null +++ b/x86_64/extra32/lib32-nss/PKGBUILD @@ -0,0 +1,44 @@ +pkgname=lib32-nss +rname=nss +pkgver=3.73.1 +pkgrel=1 +pkgdesc="Network Security Services" +url="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS" +arch=(x86_64) +depends=(lib32-nspr lib32-sqlite3 lib32-zlib lib32-p11-kit) +makedepends=(perl python3) +source=("https://archive.mozilla.org/pub/security/$rname/releases/NSS_3_73_1_RTM/src/$rname-$pkgver.tar.gz") + +build() { + cd nss-$pkgver/nss + + ./build.sh \ + --target ia32 \ + --opt \ + --system-sqlite \ + --system-nspr \ + --enable-libpkix \ + --disable-tests +} + +package() { + local nsprver="$(i686-pc-linux-gnu-pkg-config --modversion nspr)" + local libdir=/usr/lib32 + + sed nss-$pkgver/nss/pkg/pkg-config/nss.pc.in \ + -e "s,%libdir%,$libdir,g" \ + -e "s,%prefix%,/usr,g" \ + -e "s,%exec_prefix%,/usr/bin,g" \ + -e "s,%includedir%,/usr/include/nss,g" \ + -e "s,%NSPR_VERSION%,$nsprver,g" \ + -e "s,%NSS_VERSION%,$pkgver,g" | + install -Dm644 /dev/stdin "$pkgdir$libdir/pkgconfig/nss.pc" + + ln -s nss.pc "$pkgdir$libdir/pkgconfig/mozilla-nss.pc" + + install -Dt "$pkgdir$libdir" nss-$pkgver/dist/Release/lib/*.so + + # Replace built-in trust with p11-kit connection + ln -s pkcs11/p11-kit-trust.so "$pkgdir$libdir/p11-kit-trust.so" + ln -sf p11-kit-trust.so "$pkgdir$libdir/libnssckbi.so" +} diff --git a/x86_64/extra32/lib32-ocl-icd/PKGBUILD b/x86_64/extra32/lib32-ocl-icd/PKGBUILD new file mode 100644 index 0000000..e87c664 --- /dev/null +++ b/x86_64/extra32/lib32-ocl-icd/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=lib32-ocl-icd +rname=ocl-icd +pkgver=2.3.1 +pkgrel=1 +arch=(x86_64) +depends=(glibc) +makedepends=(lib32-mesa xmlto asciidoc ruby3 opencl-headers) +source=(https://github.com/OCL-dev/$rname/archive/v$pkgver.tar.gz) + +prepare() { + cd $rname-$pkgver + + autoreconf -fi +} + +build() { + cd $rname-$pkgver + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib32 + + make +} + +package() { + cd $rname-$pkgver + + make DESTDIR=$pkgdir install + + rm -rf "$pkgdir"/usr/{share,include} +} diff --git a/x86_64/extra32/lib32-ocl-icd/PKGBUILD_NEW b/x86_64/extra32/lib32-ocl-icd/PKGBUILD_NEW new file mode 100644 index 0000000..fb3f9ca --- /dev/null +++ b/x86_64/extra32/lib32-ocl-icd/PKGBUILD_NEW @@ -0,0 +1,36 @@ +pkgname=lib32-ocl-icd +rname=ocl-icd +pkgver=2.3.1 +pkgrel=2 +arch=(x86_64) +depends=(glibc) +makedepends=(lib32-mesa xmlto asciidoc ruby3 opencl-headers) +source=(https://github.com/OCL-dev/$rname/archive/v$pkgver.tar.gz) + +prepare() { + cd $rname-$pkgver + + autoreconf -fi +} + +build() { + cd $rname-$pkgver + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib32 + + make +} + +package() { + cd $rname-$pkgver + + make DESTDIR=$pkgdir install + + rm -rf "$pkgdir"/usr/{share,include} +} diff --git a/x86_64/extra32/lib32-openal/PKGBUILD b/x86_64/extra32/lib32-openal/PKGBUILD new file mode 100644 index 0000000..0f43d93 --- /dev/null +++ b/x86_64/extra32/lib32-openal/PKGBUILD @@ -0,0 +1,41 @@ +pkgname=lib32-openal +pkgver=1.21.1 +pkgrel=1 +arch=(x86_64) +# lib32-pipewire seems to have taken care of jack2 ( for some reason ) +depends=(lib32-alsa-lib lib32-pulseaudio lib32-pipewire gcc openal lib32-ffmpeg) +makedepends=(git cmake ninja) +commitid=ae4eacf147e2c2340cc4e02a790df04c793ed0a9 # 1.21.1 +source=("git+https://github.com/kcat/openal-soft#commit=$commitid") + +prepare() { + cd openal-soft + + # Missing include + git cherry-pick -n 302e88dbf0f10224a5b87be4ce43b3fdd9d20184 + + # https://bugs.archlinux.org/task/72729 + git cherry-pick -n b7ff1de48efda9ad54e6a3b4c1526722c371e832 +} + +build() { + export CC="gcc -m32 -mstackrealign" + export CXX="g++ -m32 -mstackrealign" + export PKG_CONFIG=i686-pc-linux-gnu-pkg-config + + cmake -S openal-soft -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=None \ + -DALSOFT_NO_CONFIG_UTIL=OFF \ + -DALSOFT_UTILS=OFF \ + -DALSOFT_INSTALL_UTILS=OFF \ + -DCMAKE_INSTALL_LIBDIR=lib32 + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + rm -rv "$pkgdir"/usr/{include,share,bin} +} diff --git a/x86_64/extra32/lib32-openldap/PKGBUILD b/x86_64/extra32/lib32-openldap/PKGBUILD new file mode 100644 index 0000000..7b12bd3 --- /dev/null +++ b/x86_64/extra32/lib32-openldap/PKGBUILD @@ -0,0 +1,41 @@ +pkgname=lib32-openldap +pkgver=2.6.1 +pkgrel=1 +arch=('x86_64') +depends=('lib32-openssl' 'lib32-libxcrypt' openldap) +makedepends=(gcc) +source=(https://www.openldap.org/software/download/OpenLDAP/openldap-release/openldap-${pkgver}.tgz) + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cd openldap-${pkgver} + + ./configure --prefix=/usr \ + --libexecdir=/usr/sbin \ + --sysconfdir=/etc \ + --mandir=/usr/share/man \ + --localstatedir=/var/lib/openldap \ + --enable-crypt --enable-dynamic \ + --with-threads --disable-wrappers \ + --disable-spasswd --without-cyrus-sasl \ + --disable-bdb --disable-hdb --libdir=/usr/lib32 + + cd include + make + + cd ../libraries + make depend + make +} + +package() { + cd openldap-${pkgver} + + cd libraries + make DESTDIR="${pkgdir}" install + + rm -rf "${pkgdir}"/usr/{include,share,bin} "$pkgdir/etc" +} diff --git a/x86_64/extra32/lib32-openssl/PKGBUILD b/x86_64/extra32/lib32-openssl/PKGBUILD new file mode 100644 index 0000000..4b67f03 --- /dev/null +++ b/x86_64/extra32/lib32-openssl/PKGBUILD @@ -0,0 +1,36 @@ +_pkgbasename=openssl +pkgname=lib32-$_pkgbasename +_ver=1.1.1m +# use a pacman compatible version scheme +pkgver=${_ver/[a-z]/.${_ver//[0-9.]/}} +pkgrel=1 +pkgdesc='The Open Source toolkit for Secure Sockets Layer and Transport Layer Security (32-bit)' +arch=('x86_64') +url='https://www.openssl.org' +depends=("${_pkgbasename}" "glibc" "lib32-libxcrypt") +optdepends=('ca-certificates') +source=("https://www.openssl.org/source/${_pkgbasename}-${_ver}.tar.gz" + 'ca-dir.patch') + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cd "$srcdir"/$_pkgbasename-$_ver + + # mark stack as non-executable: http://bugs.archlinux.org/task/12434 + ./Configure --prefix=/usr --openssldir=/etc/ssl --libdir=lib32 \ + shared no-ssl3-method linux-elf \ + "-Wa,--noexecstack ${CPPFLAGS} ${CFLAGS} ${LDFLAGS}" + + make MAKEDEPPROG="${CC}" depend + make +} + +package() { + cd "$srcdir"/$_pkgbasename-$_ver + make DESTDIR="$pkgdir" install + + rm -rf ${pkgdir}/{usr/{include,bin},etc} +} diff --git a/x86_64/extra32/lib32-openssl/ca-dir.patch b/x86_64/extra32/lib32-openssl/ca-dir.patch new file mode 100644 index 0000000..b8c17a0 --- /dev/null +++ b/x86_64/extra32/lib32-openssl/ca-dir.patch @@ -0,0 +1,31 @@ +--- apps/CA.pl.in 2018-09-11 14:48:19.000000000 +0200 ++++ apps/CA.pl.in 2018-09-11 16:16:32.125629435 +0200 +@@ -33,7 +33,7 @@ + my $PKCS12 = "$openssl pkcs12"; + + # default openssl.cnf file has setup as per the following +-my $CATOP = "./demoCA"; ++my $CATOP = "/etc/ssl"; + my $CAKEY = "cakey.pem"; + my $CAREQ = "careq.pem"; + my $CACERT = "cacert.pem"; +--- apps/openssl.cnf 2018-09-11 14:48:20.000000000 +0200 ++++ apps/openssl.cnf 2018-09-11 16:16:32.125629435 +0200 +@@ -43,7 +43,7 @@ + #################################################################### + [ CA_default ] + +-dir = ./demoCA # Where everything is kept ++dir = /etc/ssl # Where everything is kept + certs = $dir/certs # Where the issued certs are kept + crl_dir = $dir/crl # Where the issued crl are kept + database = $dir/index.txt # database index file. +@@ -327,7 +327,7 @@ + [ tsa_config1 ] + + # These are used by the TSA reply generation only. +-dir = ./demoCA # TSA root directory ++dir = /etc/ssl # TSA root directory + serial = $dir/tsaserial # The current serial number (mandatory) + crypto_device = builtin # OpenSSL engine to use for signing + signer_cert = $dir/tsacert.pem # The TSA signing certificate \ No newline at end of file diff --git a/x86_64/extra32/lib32-opus/PKGBUILD b/x86_64/extra32/lib32-opus/PKGBUILD new file mode 100644 index 0000000..0e1a567 --- /dev/null +++ b/x86_64/extra32/lib32-opus/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=lib32-opus +pkgver=1.3.1 +pkgrel=1 +arch=(x86_64) +depends=(opus) +source=(https://archive.mozilla.org/pub/opus/opus-$pkgver.tar.gz) + +build() { + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG_PATH='/usr/lib32/pkgconfig' + + cd opus-$pkgver + ./configure --prefix=/usr --libdir=/usr/lib32 --enable-custom-modes + make +} + +package() { + cd opus-$pkgver + + make DESTDIR="$pkgdir" install + rm -r "$pkgdir"/usr/{include,share} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-p11-kit/PKGBUILD b/x86_64/extra32/lib32-p11-kit/PKGBUILD new file mode 100644 index 0000000..ba04560 --- /dev/null +++ b/x86_64/extra32/lib32-p11-kit/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=lib32-p11-kit +pkgver=0.24.0 +pkgrel=2 +pkgdesc="Loads and enumerates PKCS#11 modules (32-bit library)" +url="https://p11-glue.freedesktop.org" +arch=(x86_64) +depends=(lib32-libtasn1 lib32-libffi p11-kit) +makedepends=(meson) +source=(https://github.com/p11-glue/p11-kit/releases/download/$pkgver/p11-kit-$pkgver.tar.xz) + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + meson p11-kit-$pkgver build \ + --prefix=/usr \ + --buildtype debugoptimized \ + --libdir /usr/lib32 \ + -D bash_completion=disabled \ + -D trust_paths=/etc/ca-certificates/trust-source:/usr/share/ca-certificates/trust-source + + meson compile -C build +} + +package() { + meson install -C build --destdir "$pkgdir" + + rm -rf "$pkgdir"/etc "$pkgdir"/usr/{bin,include,lib,libexec,share} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-pango/PKGBUILD b/x86_64/extra32/lib32-pango/PKGBUILD new file mode 100644 index 0000000..a0aba50 --- /dev/null +++ b/x86_64/extra32/lib32-pango/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=lib32-pango +pkgver=1.50.4 +pkgrel=1 +arch=(x86_64) +depends=(lib32-cairo lib32-libxft lib32-harfbuzz lib32-fribidi pango) +makedepends=(git meson) +_commit=bcf61fc3a0c30da173c8629d1458fe3440288878 # tags/1.50.4^0 +source=("git+https://gitlab.gnome.org/GNOME/pango.git#commit=$_commit") + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + meson pango build \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + -D introspection=disabled + + meson compile -C build +} + +package() { + meson install -C build --destdir "$pkgdir" + + rm -r "$pkgdir"/usr/{bin,include} +} diff --git a/x86_64/extra32/lib32-pcre/PKGBUILD b/x86_64/extra32/lib32-pcre/PKGBUILD new file mode 100644 index 0000000..61f022c --- /dev/null +++ b/x86_64/extra32/lib32-pcre/PKGBUILD @@ -0,0 +1,52 @@ +_pkgbasename=pcre +pkgname=lib32-$_pkgbasename +pkgver=8.45 +pkgrel=2 +pkgdesc="A library that implements Perl 5-style regular expressions (32-bit)" +arch=('x86_64') +url="https://www.pcre.org" +license=('custom') +depends=($_pkgbasename) +source=("https://ftp.exim.org/pub/pcre/$_pkgbasename-$pkgver.tar.bz2") + +prepare() { + cd "${srcdir}"/${_pkgbasename}-${pkgver} + # apply patch from the source array (should be a pacman feature) + local filename + for filename in "${source[@]}"; do + if [[ "$filename" =~ \.patch$ ]]; then + msg2 "Applying patch ${filename##*/}" + patch -p1 -N -i "$srcdir/${filename##*/}" + fi + done + : +} + +build() { + cd "${srcdir}"/${_pkgbasename}-${pkgver} + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --enable-unicode-properties \ + --enable-pcre16 \ + --enable-pcre32 \ + --enable-jit + make +} + +check() { + cd "${srcdir}"/${_pkgbasename}-${pkgver} + + make -j1 check +} + +package() { + cd "${srcdir}/${_pkgbasename}-${pkgver}" + make DESTDIR="${pkgdir}" install + + rm -rf "${pkgdir}"/usr/{include,share,bin} +} diff --git a/x86_64/extra32/lib32-pcre2/PKGBUILD b/x86_64/extra32/lib32-pcre2/PKGBUILD new file mode 100644 index 0000000..8cd6bb4 --- /dev/null +++ b/x86_64/extra32/lib32-pcre2/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=lib32-pcre2 +_pkgname=pcre2 +pkgver=10.39 +pkgrel=1 +pkgdesc='A library that implements Perl 5-style regular expressions. 2nd version (32-bit)' +arch=('x86_64') +url='https://www.pcre.org/' +license=('BSD') +depends=('lib32-readline' 'lib32-zlib' 'lib32-bzip2' 'bash') +source=("https://github.com/PhilipHazel/pcre2/releases/download/$_pkgname-$pkgver/$_pkgname-$pkgver.tar.bz2") + +build() { + cd $_pkgname-$pkgver + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --enable-pcre2-16 \ + --enable-pcre2-32 \ + --enable-jit \ + --enable-pcre2grep-libz \ + --enable-pcre2grep-libbz2 \ + --enable-pcre2test-libreadline + + make +} + +package() { + cd $_pkgname-$pkgver + + make DESTDIR="$pkgdir" install + rm -rf "${pkgdir}"/usr/{share,bin,include} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-pipewire/PKGBUILD b/x86_64/extra32/lib32-pipewire/PKGBUILD new file mode 100644 index 0000000..0214099 --- /dev/null +++ b/x86_64/extra32/lib32-pipewire/PKGBUILD @@ -0,0 +1,55 @@ +pkgname=lib32-pipewire +commitid=64cf5e80e6240284e6b757907b900507fe56f1b5 # tags/0.3.50 +pkgver=0.3.50 +pkgrel=1 +arch=(x86_64) +depends=(pipewire lib32-systemd lib32-pulseaudio) +makedepends=(git meson lib32-alsa-lib lib32-systemd lib32-dbus) +source=(git+https://gitlab.freedesktop.org/pipewire/pipewire.git#commit=$commitid) + +build() { + local meson_options=( + --prefix=/usr + --libdir /usr/lib32 + -D examples=disabled + -D man=disabled + -D tests=disabled + -D gstreamer=disabled + -D gstreamer-device-provider=disabled + -D systemd-user-service=disabled + -D bluez5=disabled + -D jack=disabled + -D jack-devel=true + -D libjack-path=/usr/lib32 + -D v4l2=disabled + -D libcamera=disabled + -D libcanberra=disabled + -D x11=disabled + -D x11-xfixes=disabled + -D pw-cat=disabled + -D udevrulesdir=/usr/lib/udev/rules.d + -D sdl2=disabled + -D sndfile=disabled + -D libpulse=disabled + -D roc=disabled + -D avahi=disabled + -D echo-cancel-webrtc=disabled + -D libusb=disabled + -D session-managers=[] + -D raop=disabled + -D lv2=disabled + ) + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + meson pipewire build "${meson_options[@]}" + meson compile -C build +} + +package() { + meson install -C build --destdir "$pkgdir" + + rm -rf $pkgdir/usr/{bin,include,lib,share} +} diff --git a/x86_64/extra32/lib32-pixman/PKGBUILD b/x86_64/extra32/lib32-pixman/PKGBUILD new file mode 100644 index 0000000..24e23e1 --- /dev/null +++ b/x86_64/extra32/lib32-pixman/PKGBUILD @@ -0,0 +1,26 @@ +_pkgbasename=pixman +pkgname=lib32-$_pkgbasename +pkgver=0.40.0 +pkgrel=1 +pkgdesc="Pixman library (32-bit)" +arch=('x86_64') +url="https://xorg.freedesktop.org" +depends=($_pkgbasename) +source=(https://xorg.freedesktop.org/releases/individual/lib/${_pkgbasename}-${pkgver}.tar.xz) + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cd "${srcdir}/${_pkgbasename}-${pkgver}" + ./configure --prefix=/usr --libdir=/usr/lib32 + + make +} + +package() { + cd "${srcdir}/${_pkgbasename}-${pkgver}" + make DESTDIR="${pkgdir}" install + rm -rf "${pkgdir}"/usr/include +} diff --git a/x86_64/extra32/lib32-polkit/PKGBUILD b/x86_64/extra32/lib32-polkit/PKGBUILD new file mode 100644 index 0000000..b6496e8 --- /dev/null +++ b/x86_64/extra32/lib32-polkit/PKGBUILD @@ -0,0 +1,33 @@ +pkgname=lib32-polkit +pkgver=0.120 +pkgrel=1 +arch=(x86_64) +depends=( + lib32-duktape lib32-expat lib32-glib2 lib32-linux-pam lib32-systemd polkit +) +ltag=a6bedfd09b7bba753de7a107dc471da0db801858 +source=( + git+https://gitlab.freedesktop.org/polkit/polkit.git#commit=${ltag} +) + +build() { + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG='i686-pc-linux-gnu-pkg-config' + + meson polkit build \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + -D session_tracking=libsystemd-login \ + -D os_type=redhat \ + -D tests=false \ + -D introspection=false + + meson compile -C build +} + +package() { + meson install -C build --destdir "${pkgdir}" + rm -r "$pkgdir"/{etc,usr/{bin,include,lib,share}}\ + rm -f $pkgdir/lib/systemd/system/polkit.service +} diff --git a/x86_64/extra32/lib32-polly/PKGBUILD b/x86_64/extra32/lib32-polly/PKGBUILD new file mode 100644 index 0000000..50f794f --- /dev/null +++ b/x86_64/extra32/lib32-polly/PKGBUILD @@ -0,0 +1,57 @@ +pkgname=lib32-polly +rname=polly +pkgver=13.0.0 +pkgrel=1 +pkgdesc="High-level loop and data-locality optimizer and optimization infrastructure for LLVM" +arch=('x86_64') +url="https://polly.llvm.org/" +makedepends=('llvm' 'cmake' 'ninja' 'lib32-llvm' 'lib32-clang') +_source_base=https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver +source=($_source_base/$rname-$pkgver.src.tar.xz + add-missing-loadPolly.patch + $_source_base/llvm-$pkgver.src.tar.xz) + +prepare() { + cd "$srcdir/$rname-$pkgver.src" + mkdir build + + patch -Np2 -i ../add-missing-loadPolly.patch +} + +build() { + cd "$srcdir/$rname-$pkgver.src/build" + + CFLAGS+=' -ffat-lto-objects' + CXXFLAGS+=' -ffat-lto-objects' + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + cmake .. -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DLLVM_LIBDIR_SUFFIX=32 \ + -DCMAKE_C_FLAGS:STRING=-m32 \ + -DCMAKE_CXX_FLAGS:STRING=-m32 \ + -DLLVM_TARGET_ARCH:STRING=i686 \ + -DLLVM_HOST_TRIPLE=$CHOST \ + -DLLVM_DEFAULT_TARGETS_TRIPLE="i686-pc-linux-gnu" \ + -DLLVM_LINK_LLVM_DYLIB=ON \ + -DLLVM_BUILD_TESTS=OFF \ + -DLLVM_BUILD_DOCS=OFF \ + -DLLVM_ENABLE_SPHINX=OFF \ + -DSPHINX_WARNINGS_AS_ERRORS=OFF \ + -DLLVM_EXTERNAL_LIT=/usr/bin/lit \ + -DLLVM_BUILD_MAIN_SRC_DIR="$srcdir/llvm-$pkgver.src" + + ninja +} + +package() { + cd "$srcdir/$rname-$pkgver.src/build" + + DESTDIR="$pkgdir" ninja install + + rm -rf $pkgdir/usr/{bin.sbin,include,share} +} diff --git a/x86_64/extra32/lib32-polly/add-missing-loadPolly.patch b/x86_64/extra32/lib32-polly/add-missing-loadPolly.patch new file mode 100644 index 0000000..29a463e --- /dev/null +++ b/x86_64/extra32/lib32-polly/add-missing-loadPolly.patch @@ -0,0 +1,21 @@ +From 15375631049acbf9c5729754ad5623a2670120a3 Mon Sep 17 00:00:00 2001 +From: Michael Kruse +Date: Tue, 24 Aug 2021 13:44:48 -0500 +Subject: [PATCH] [Polly][test] Add missing %loadPolly. + +This fixes check-polly when using the -load mechanism, +i.e. LLVM_POLLY_LINK_INTO_TOOLS=OFF. +--- + polly/test/Isl/CodeGen/OpenMP/scev-rewriting.ll | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/polly/test/Isl/CodeGen/OpenMP/scev-rewriting.ll b/polly/test/Isl/CodeGen/OpenMP/scev-rewriting.ll +index 13fffa3d9486d..0f6ca904e2592 100644 +--- a/polly/test/Isl/CodeGen/OpenMP/scev-rewriting.ll ++++ b/polly/test/Isl/CodeGen/OpenMP/scev-rewriting.ll +@@ -1,4 +1,4 @@ +-; RUN: opt < %s -polly-vectorizer=polly -polly-parallel -polly-parallel-force -polly-process-unprofitable -polly-codegen -S | FileCheck %s ++; RUN: opt %loadPolly < %s -polly-vectorizer=polly -polly-parallel -polly-parallel-force -polly-process-unprofitable -polly-codegen -S | FileCheck %s + ; CHECK: define internal void @DoStringSort_polly_subfn + target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" + target triple = "aarch64-unknown-linux-gnueabi" \ No newline at end of file diff --git a/x86_64/extra32/lib32-pulseaudio/PKGBUILD b/x86_64/extra32/lib32-pulseaudio/PKGBUILD new file mode 100644 index 0000000..a08771d --- /dev/null +++ b/x86_64/extra32/lib32-pulseaudio/PKGBUILD @@ -0,0 +1,75 @@ +_pkgbasename=pulseaudio +pkgname=lib32-$_pkgbasename +pkgdesc="A featureful, general-purpose sound server (32-bit client libraries)" +pkgver=15.0 +pkgrel=1 +arch=(x86_64) +depends=(lib32-{dbus,libcap,libxtst,libsm,systemd,tdb,libsndfile}) +makedepends=(lib32-glib2 git meson valgrind) +_commit=6329a2498eb038f8a9537888280a62b00a93f68e # tags/v15.0^0 +source=("git+https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git#commit=$_commit") + +pkgver() { + cd pulseaudio + git describe --tags | sed 's/^v//;s/-/+/g' +} + +prepare() { + cd pulseaudio + + # Freeze version before patching + ./git-version-gen doesnt-exist >.tarball-version +} + +build() { + local meson_options=( + --prefix=/usr + --libdir /usr/lib32 + -D daemon=false + -D doxygen=false + -D man=false + -D tests=false + -D stream-restore-clear-old-devices=true + -D pulsedsp-location='/usr/\$LIB/pulseaudio' + -D udevrulesdir=/usr/lib/udev/rules.d + -D bashcompletiondir=no + -D zshcompletiondir=no + -D avahi=disabled + -D bluez5=disabled + -D bluez5-gstreamer=disabled + -D elogind=disabled + -D fftw=disabled + -D jack=disabled + -D lirc=disabled + -D orc=disabled + -D soxr=disabled + -D tcpwrap=disabled + -D webrtc-aec=disabled + ) + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + meson pulseaudio build "${meson_options[@]}" + meson compile -C build +} + +_pick() { + local f d + for f; do + d="$pkgdir/${f#$srcdir/install/}" + mkdir -p "$(dirname "$d")" + mv "$f" "$d" + rmdir -p --ignore-fail-on-non-empty "$(dirname "$f")" + done +} + +package() { + meson install -C build --destdir "$srcdir/install" + + cd install + _pick usr/lib32/libpulse{,-simple,-mainloop-glib}.so* + _pick usr/lib32/{cmake,pkgconfig} + _pick usr/lib32/pulseaudio/libpulse{dsp,common-*}.so +} diff --git a/x86_64/extra32/lib32-readline/PKGBUILD b/x86_64/extra32/lib32-readline/PKGBUILD new file mode 100644 index 0000000..685ac98 --- /dev/null +++ b/x86_64/extra32/lib32-readline/PKGBUILD @@ -0,0 +1,43 @@ +pkgname=lib32-readline +rpkgname=readline +pkgver=8.1 +pkgrel=2 +depends=(glibc lib32-ncurses) +arch=('x86_64') +source=(https://ftp.gnu.org/gnu/$rpkgname/$rpkgname-$pkgver.tar.gz) + +build() { + cd $rpkgname-$pkgver + + sed -i '/MV.*old/d' Makefile.in + sed -i '/{OLDSUFF}/c:' support/shlib-install + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + ./configure \ + --prefix=/usr \ + --without-icu \ + --with-threads \ + --with-history \ + --libdir=/usr/lib32 +} + +package() { + cd $rpkgname-$pkgver + if [ -d /tools ]; then + make SHLIB_LIBS="-L/tools/lib -lncursesw" + make SHLIB_LIBS="-L/tools/lib -lncurses" DESTDIR=$pkgdir install + else + make SHLIB_LIBS="-lncursesw" + make SHLIB_LIBS="-lncurses" DESTDIR=$pkgdir install + fi + + mkdir -p $pkgdir/lib32 + mv -v $pkgdir/usr/lib32/lib{readline,history}.so.* $pkgdir/lib32/ + chmod -v u+w $pkgdir/lib32/lib{readline,history}.so.* + ln -sfv ../../lib32/$(readlink $pkgdir/usr/lib32/libreadline.so) $pkgdir/usr/lib32/libreadline.so + ln -sfv ../../lib32/$(readlink $pkgdir/usr/lib32/libhistory.so ) $pkgdir/usr/lib32/libhistory.so + rm -rf "${pkgdir}"/usr/{include,share,bin} "$pkgdir/usr/lib32/xml2Conf.sh" +} diff --git a/x86_64/extra32/lib32-rest/PKGBUILD b/x86_64/extra32/lib32-rest/PKGBUILD new file mode 100644 index 0000000..c92c7ee --- /dev/null +++ b/x86_64/extra32/lib32-rest/PKGBUILD @@ -0,0 +1,34 @@ +pkgname=lib32-rest +pkgver=0.8.1 +pkgrel=1 +arch=(x86_64) +depends=(rest lib32-libsoup) +makedepends=(git) +_tag=2971b3b92701f70fc368ad64bd25cefaea043f87 +source=(git+https://gitlab.gnome.org/GNOME/librest.git#tag=${_tag}) + +prepare() { + cd librest + NOCONFIGURE=1 ./autogen.sh +} + +build() { + cd librest + + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG_PATH='/usr/lib32/pkgconfig' + + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --disable-introspection \ + --without-gnome \ + --disable-gtk-doc + make +} + +package() { + make DESTDIR="${pkgdir}" -C librest install + rm -rf "${pkgdir}"/usr/{include,share} +} diff --git a/x86_64/extra32/lib32-sdl2/PKGBUILD b/x86_64/extra32/lib32-sdl2/PKGBUILD new file mode 100644 index 0000000..315287c --- /dev/null +++ b/x86_64/extra32/lib32-sdl2/PKGBUILD @@ -0,0 +1,33 @@ +pkgname=lib32-sdl2 +pkgver=2.0.22 +pkgrel=1 +arch=(x86_64) +depends=(lib32-libxext lib32-libxrender lib32-libx11 lib32-libglvnd + lib32-libxcursor lib32-alsa-lib lib32-pulseaudio + lib32-libxinerama lib32-libxkbcommon lib32-libxrandr lib32-libxss + lib32-mesa lib32-wayland sdl2) +makedepends=(cmake git jack2 ninja wayland-protocols) +source=(https://www.libsdl.org/release/SDL2-$pkgver.tar.gz) + +build() { + export CC='gcc -m32' + export CXX='g++ -m32' + export CFLAGS+=" -ffat-lto-objects" + export PKG_CONFIG=i686-pc-linux-gnu-pkg-config + + cmake -S SDL2-$pkgver -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib32 \ + -DSDL_PIPEWIRE=OFF \ + -DSDL_DLOPEN=ON \ + -DSDL_RPATH=OFF \ + -DSDL_STATIC=ON + + cmake --build build +} + +package() { + DESTDIR="${pkgdir}" cmake --install build + rm -rf "${pkgdir}"/usr/{bin,include,share} + sed -i "s/libSDL2\.a/libSDL2main.a/g" "$pkgdir"/usr/lib32/cmake/SDL2/SDL2Targets-noconfig.cmake +} diff --git a/x86_64/extra32/lib32-sdl2/cmake-include-paths.patch b/x86_64/extra32/lib32-sdl2/cmake-include-paths.patch new file mode 100644 index 0000000..952c6a6 --- /dev/null +++ b/x86_64/extra32/lib32-sdl2/cmake-include-paths.patch @@ -0,0 +1,45 @@ +# HG changeset patch +# User Bastien Bouclet +# Date 1523420183 -7200 +# Wed Apr 11 06:16:23 2018 +0200 +# Branch cmake-include-path +# Node ID 52f0351c30b25ec2bb5b0bced247ba858991bec2 +# Parent fbfacc66c65c3b38ca065ecee1f69fcbc643c14a +Fix the include path in the installed CMake target import file + +Previously the include path was {INSTALL_PREFIX}/include, +it is now {INSTALL_PREFIX}/include/SDL2 to be consistent with +the other build and package configuration systems. + +Fixes #4128. + +diff -r fbfacc66c65c -r 52f0351c30b2 CMakeLists.txt +--- a/CMakeLists.txt Mon Mar 26 12:38:29 2018 -0700 ++++ b/CMakeLists.txt Wed Apr 11 06:16:23 2018 +0200 +@@ -1695,7 +1695,7 @@ + + # Always build SDLmain + add_library(SDL2main STATIC ${SDLMAIN_SOURCES}) +-target_include_directories(SDL2main PUBLIC $) ++target_include_directories(SDL2main PUBLIC $) + set(_INSTALL_LIBS "SDL2main") + if (NOT ANDROID) + set_target_properties(SDL2main PROPERTIES DEBUG_POSTFIX ${SDL_CMAKE_DEBUG_POSTFIX}) +@@ -1724,7 +1724,7 @@ + endif() + set(_INSTALL_LIBS "SDL2" ${_INSTALL_LIBS}) + target_link_libraries(SDL2 ${EXTRA_LIBS} ${EXTRA_LDFLAGS}) +- target_include_directories(SDL2 PUBLIC $) ++ target_include_directories(SDL2 PUBLIC $) + if (NOT ANDROID) + set_target_properties(SDL2 PROPERTIES DEBUG_POSTFIX ${SDL_CMAKE_DEBUG_POSTFIX}) + endif() +@@ -1750,7 +1750,7 @@ + # libraries - do we need to consider this? + set(_INSTALL_LIBS "SDL2-static" ${_INSTALL_LIBS}) + target_link_libraries(SDL2-static ${EXTRA_LIBS} ${EXTRA_LDFLAGS}) +- target_include_directories(SDL2-static PUBLIC $) ++ target_include_directories(SDL2-static PUBLIC $) + if (NOT ANDROID) + set_target_properties(SDL2-static PROPERTIES DEBUG_POSTFIX ${SDL_CMAKE_DEBUG_POSTFIX}) + endif() diff --git a/x86_64/extra32/lib32-sdl2/dynapi.patch b/x86_64/extra32/lib32-sdl2/dynapi.patch new file mode 100644 index 0000000..f8aac36 --- /dev/null +++ b/x86_64/extra32/lib32-sdl2/dynapi.patch @@ -0,0 +1,84 @@ + +# HG changeset patch +# User Ryan C. Gordon +# Date 1526575846 14400 +# Node ID 7babfecee045fac18d95e5936fede534ca54ed24 +# Parent 9e46f3dd75fd2e85e0e3ebb8a77329bc74a16e70 +dynapi: don't let system loader resolve the initializer to the wrong version. + +Fixes problems launching Firewatch on Linux (which statically links SDL but +also dynamically loads a system-wide copy from a plugin shared library) with +a newer SDL build. + +diff -r 9e46f3dd75fd -r 7babfecee045 src/dynapi/SDL_dynapi.c +--- a/src/dynapi/SDL_dynapi.c Fri May 11 09:37:00 2018 +0300 ++++ b/src/dynapi/SDL_dynapi.c Thu May 17 12:50:46 2018 -0400 +@@ -167,15 +167,10 @@ + #error Write me. + #endif + +- +- +-/* Here's the exported entry point that fills in the jump table. */ +-/* Use specific types when an "int" might suffice to keep this sane. */ +-typedef Sint32 (SDLCALL *SDL_DYNAPI_ENTRYFN)(Uint32 apiver, void *table, Uint32 tablesize); +-extern DECLSPEC Sint32 SDLCALL SDL_DYNAPI_entry(Uint32, void *, Uint32); +- +-Sint32 +-SDL_DYNAPI_entry(Uint32 apiver, void *table, Uint32 tablesize) ++/* we make this a static function so we can call the correct one without the ++ system's dynamic linker resolving to the wrong version of this. */ ++static Sint32 ++initialize_jumptable(Uint32 apiver, void *table, Uint32 tablesize) + { + SDL_DYNAPI_jump_table *output_jump_table = (SDL_DYNAPI_jump_table *) table; + +@@ -202,6 +197,18 @@ + } + + ++/* Here's the exported entry point that fills in the jump table. */ ++/* Use specific types when an "int" might suffice to keep this sane. */ ++typedef Sint32 (SDLCALL *SDL_DYNAPI_ENTRYFN)(Uint32 apiver, void *table, Uint32 tablesize); ++extern DECLSPEC Sint32 SDLCALL SDL_DYNAPI_entry(Uint32, void *, Uint32); ++ ++Sint32 ++SDL_DYNAPI_entry(Uint32 apiver, void *table, Uint32 tablesize) ++{ ++ return initialize_jumptable(apiver, table, tablesize); ++} ++ ++ + /* Obviously we can't use SDL_LoadObject() to load SDL. :) */ + /* Also obviously, we never close the loaded library. */ + #if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) +@@ -260,7 +267,7 @@ + SDL_InitDynamicAPILocked(void) + { + const char *libname = SDL_getenv_REAL("SDL_DYNAMIC_API"); +- SDL_DYNAPI_ENTRYFN entry = SDL_DYNAPI_entry; /* funcs from here by default. */ ++ SDL_DYNAPI_ENTRYFN entry = NULL; /* funcs from here by default. */ + + if (libname) { + entry = (SDL_DYNAPI_ENTRYFN) get_sdlapi_entry(libname, "SDL_DYNAPI_entry"); +@@ -268,16 +275,15 @@ + /* !!! FIXME: fail to startup here instead? */ + /* !!! FIXME: definitely warn user. */ + /* Just fill in the function pointers from this library. */ +- entry = SDL_DYNAPI_entry; + } + } + +- if (entry(SDL_DYNAPI_VERSION, &jump_table, sizeof (jump_table)) < 0) { ++ if (!entry || (entry(SDL_DYNAPI_VERSION, &jump_table, sizeof (jump_table)) < 0)) { + /* !!! FIXME: fail to startup here instead? */ + /* !!! FIXME: definitely warn user. */ + /* Just fill in the function pointers from this library. */ +- if (entry != SDL_DYNAPI_entry) { +- if (!SDL_DYNAPI_entry(SDL_DYNAPI_VERSION, &jump_table, sizeof (jump_table))) { ++ if (!entry) { ++ if (!initialize_jumptable(SDL_DYNAPI_VERSION, &jump_table, sizeof (jump_table))) { + /* !!! FIXME: now we're screwed. Should definitely abort now. */ + } + } + diff --git a/x86_64/extra32/lib32-sqlite/PKGBUILD b/x86_64/extra32/lib32-sqlite/PKGBUILD new file mode 100644 index 0000000..0bd0687 --- /dev/null +++ b/x86_64/extra32/lib32-sqlite/PKGBUILD @@ -0,0 +1,51 @@ +pkgname=lib32-sqlite3 +pkgver=3.37.2 +srcver=3370200 +pkgrel=1 +arch=('x86_64') +depends=(sqlite3) +makedepends=(lib32-readline) +source=(https://www.sqlite.org/2022/sqlite-src-${srcver}.zip + sqlite3-amalgamation_configure.patch) + +prepare() { + cd sqlite-src-$srcver + + patch -Np1 -i ../sqlite3-amalgamation_configure.patch + + autoreconf -vfi +} + +build() { + cd sqlite-src-$srcver + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + export LTLINK_EXTRAS="-ldl" + export CFLAGS="$CFLAGS -DSQLITE_ENABLE_FTS3=1 \ + -DSQLITE_ENABLE_COLUMN_METADATA=1 \ + -DSQLITE_ENABLE_UNLOCK_NOTIFY \ + -DSQLITE_ENABLE_DBSTAT_VTAB=1 \ + -DSQLITE_ENABLE_FTS3_TOKENIZER=1 \ + -DSQLITE_ENABLE_RTREE=1 \ + -DSQLITE_SECURE_DELETE \ + -DSQLITE_MAX_VARIABLE_NUMBER=250000 \ + -DSQLITE_MAX_EXPR_DEPTH=10000" + + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --disable-tcl + + make +} + +package() { + cd sqlite-src-$srcver + + make DESTDIR=$pkgdir install + + rm -rf "${pkgdir}"/usr/{include,share,bin} +} diff --git a/x86_64/extra32/lib32-sqlite/sqlite3-amalgamation_configure.patch b/x86_64/extra32/lib32-sqlite/sqlite3-amalgamation_configure.patch new file mode 100644 index 0000000..6b035b6 --- /dev/null +++ b/x86_64/extra32/lib32-sqlite/sqlite3-amalgamation_configure.patch @@ -0,0 +1,37 @@ +--- sqlite-src-3370000/configure.ac.orig 2021-11-27 16:05:17.000000000 +0100 ++++ sqlite-src-3370000/configure.ac 2021-12-03 21:21:47.506868981 +0100 +@@ -116,6 +116,13 @@ + USE_AMALGAMATION=1 + + ######### ++# By default, amalgamation sqlite3.c will have #line directives. ++# This is a build option not shown by ./configure --help ++# To control it, use configure option: amalgamation_line_macros=? ++# where ? is no to suppress #line directives or yes to create them. ++AMALGAMATION_LINE_MACROS=--linemacros=0 ++ ++######### + # See whether we can run specific tclsh versions known to work well; + # if not, then we fall back to plain tclsh. + # TODO: try other versions before falling back? +@@ -574,6 +581,20 @@ + fi + AC_SUBST(USE_AMALGAMATION) + ++######## ++# See whether --disable ++if test "${amalgamation_line_macros+set}" = set; then : ++ enableval=$amalgamation_line_macros; ++fi ++ ++if test "${amalgamation_line_macros}" = "yes" ; then ++ AMALGAMATION_LINE_MACROS=--linemacros=1 ++fi ++if test "${amalgamation_line_macros}" = "no" ; then ++ AMALGAMATION_LINE_MACROS=--linemacros=0 ++fi ++AC_SUBST(AMALGAMATION_LINE_MACROS) ++ + ######### + # Look for zlib. Only needed by extensions and by the sqlite3.exe shell + AC_CHECK_HEADERS(zlib.h) diff --git a/x86_64/extra32/lib32-systemd/PKGBUILD b/x86_64/extra32/lib32-systemd/PKGBUILD new file mode 100644 index 0000000..6c99356 --- /dev/null +++ b/x86_64/extra32/lib32-systemd/PKGBUILD @@ -0,0 +1,123 @@ +pkgname=lib32-systemd +rname=systemd +pkgver=250.2 +pkgrel=1 +arch=('x86_64') +depends=('lib32-libcap' 'lib32-libgcrypt' + 'lib32-xz' 'lib32-zstd' 'systemd') +makedepends=('git' 'gperf' 'intltool' 'lib32-acl' 'lib32-bzip2' + 'lib32-curl' 'lib32-dbus' 'lib32-glib2' + 'lib32-gnutls' 'lib32-elfutils' 'lib32-libidn2' 'lib32-pcre2' + 'libxslt' 'meson' 'python3-pip') +source=("https://github.com/systemd/systemd-stable/archive/refs/tags/v${pkgver}.tar.gz") + +prepare() { + pip install setuptools + + pip install jinja2 + + cd $rname-stable-$pkgver + + sed -i -e 's/GROUP="render"/GROUP="video"/' \ + -e 's/GROUP="sgx", //' rules.d/50-udev-default.rules.in + + sed -i 's/+ want_libfuzzer.*$/and want_libfuzzer/' meson.build +} + +build() { + cd $rname-stable-$pkgver + mkdir -p build + cd build + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + export PATH=/bin:/sbin:/usr/bin:/usr/sbin:$PATH + LANG=en_US.UTF-8 \ + meson \ + --prefix=/usr \ + --libexecdir=/usr/lib32 \ + --libdir=/usr/lib32 \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --buildtype=release \ + -D audit=false \ + -D blkid=false \ + -D gnu-efi=false \ + -D ima=false \ + -D kmod=false \ + -D libcryptsetup=false \ + -D libidn2=true \ + -D libiptc=false \ + -D lz4=false \ + -D microhttpd=false \ + -D pam=false \ + -D seccomp=false \ + -D utmp=false \ + -D hibernate=false \ + -D ldconfig=false \ + -D resolve=true \ + -D efi=false \ + -D tpm=false \ + -D environment-d=false \ + -D binfmt=false \ + -D repart=false \ + -D coredump=false \ + -D pstore=false \ + -D oomd=false \ + -D logind=false \ + -D hostnamed=false \ + -D localed=false \ + -D machined=true \ + -D portabled=false \ + -D sysext=false \ + -D userdb=false \ + -D homed=false \ + -D networkd=false \ + -D timedated=false \ + -D timesyncd=false \ + -D remote=false \ + -D create-log-dirs=false \ + -D nss-myhostname=true \ + -D nss-mymachines=true \ + -D nss-resolve=true \ + -D nss-systemd=true \ + -D firstboot=false \ + -D randomseed=false \ + -D backlight=false \ + -D vconsole=false \ + -D quotacheck=false \ + -D sysusers=false \ + -D tmpfiles=false \ + -D importd=false \ + -D hwdb=false \ + -D rfkill=false \ + -D xdg-autostart=false \ + -D man=false \ + -D html=false \ + -D translations=false \ + -D rpmmacrosdir=no \ + -D install-tests=false \ + -D docdir=/usr/share/doc/systemd-249 \ + -D dbuspolicydir=/usr/share/dbus-1/system.d \ + -D sbat-distro='drunk' \ + -D sbat-distro-summary='Drunk Linux' \ + -D sbat-distro-pkgname="${pkgname}" \ + -D sbat-distro-version="${pkgver}" \ + -D sbat-distro-url="http://drunk.epizy.com/" \ + .. + + ninja +} + +package() { + cd $rname-stable-$pkgver/build + + LANG=en_US.UTF-8 ninja + LANG=en_US.UTF-8 DESTDIR=$pkgdir PREFIX=$pkgdir ninja install + + rm -rf "${pkgdir}"/{etc,var} + rm -rf "${pkgdir}"/usr/{bin,include,lib,share} + rm -rf $pkgdir/{sbin,lib/udev,lib/systemd,lib/modprobe.d,bin} +} diff --git a/x86_64/extra32/lib32-tdb/PKGBUILD b/x86_64/extra32/lib32-tdb/PKGBUILD new file mode 100644 index 0000000..74383b5 --- /dev/null +++ b/x86_64/extra32/lib32-tdb/PKGBUILD @@ -0,0 +1,32 @@ +_pkgbasename=tdb +pkgname=lib32-$_pkgbasename +pkgver=1.4.5 +pkgrel=1 +pkgdesc="A Trivial Database similar to GDBM but allows simultaneous commits (32-bit)" +arch=(x86_64) +depends=($_pkgbasename) +makedepends=(libxslt python3) +source=(https://www.samba.org/ftp/${_pkgbasename}/${_pkgbasename}-${pkgver}.tar.{gz,asc}) + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cd ${_pkgbasename}-${pkgver} + + ./configure --prefix=/usr \ + --localstatedir=/var \ + --sysconfdir=/etc/samba \ + --libdir=/usr/lib32 \ + --disable-python + + make +} + +package() { + cd ${_pkgbasename}-${pkgver} + + make -j1 DESTDIR="$pkgdir" install + rm -rf "${pkgdir}"/usr/{include,share,bin} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-util-linux/PKGBUILD b/x86_64/extra32/lib32-util-linux/PKGBUILD new file mode 100644 index 0000000..343e596 --- /dev/null +++ b/x86_64/extra32/lib32-util-linux/PKGBUILD @@ -0,0 +1,32 @@ +_pkgbasename=util-linux +pkgname=lib32-${_pkgbasename} +_pkgmajor=2.37 +_realver=${_pkgmajor}.2 +pkgver=${_realver/-/} +pkgrel=2 +pkgdesc='Miscellaneous system utilities for Linux (32-bit)' +url='https://github.com/karelzak/util-linux' +arch=('x86_64') +depends=("${_pkgbasename}") +license=('GPL2') +options=('!emptydirs') +source=("https://www.kernel.org/pub/linux/utils/util-linux/v${_pkgmajor}/${_pkgbasename}-${_realver}.tar."{xz,sign}) +build() { + cd "${_pkgbasename}-${_realver}" + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + ./configure \ + --libdir=/usr/lib32 + + make lib{uuid,blkid,fdisk,mount,smartcols}.la +} + +package() { + make -C "${_pkgbasename}-${_realver}" \ + DESTDIR="${pkgdir}" \ + install-usrlib_execLTLIBRARIES \ + install-pkgconfigDATA +} diff --git a/x86_64/extra32/lib32-vdpau/PKGBUILD b/x86_64/extra32/lib32-vdpau/PKGBUILD new file mode 100644 index 0000000..8971fb5 --- /dev/null +++ b/x86_64/extra32/lib32-vdpau/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=lib32-vdpau +pkgver=1.4 +pkgrel=2 +pkgdesc='Nvidia VDPAU library' +arch=(x86_64) +url=https://gitlab.freedesktop.org/vdpau/libvdpau +depends=(lib32-libxext vdpau) +makedepends=(xorgproto git meson) +source=(git+https://gitlab.freedesktop.org/vdpau/libvdpau.git#tag=c3d1a9dbafdfe6144ff474d0d523dc01b068750f) + +build() { + export CC='gcc -m32' + export CXX='g++ -m32' + export PKG_CONFIG_PATH=/usr/lib32/pkgconfig + + meson libvdpau build \ + --prefix=/usr \ + --libdir=/usr/lib32 + + ninja -C build +} + +package() { + DESTDIR="${pkgdir}" ninja -C build install + rm -rf "${pkgdir}"/{etc,usr/include} +} diff --git a/x86_64/extra32/lib32-vulkan-icd-loader/PKGBUILD b/x86_64/extra32/lib32-vulkan-icd-loader/PKGBUILD new file mode 100644 index 0000000..ef46939 --- /dev/null +++ b/x86_64/extra32/lib32-vulkan-icd-loader/PKGBUILD @@ -0,0 +1,39 @@ +pkgname=lib32-vulkan-icd-loader +pkgver=1.2.202 +pkgrel=2 +arch=(x86_64) +pkgdesc="Vulkan Installable Client Driver (ICD) Loader (32-bit)" +url="https://www.khronos.org/vulkan/" +makedepends=('cmake' 'python3' 'lib32-libx11' 'lib32-libxrandr' 'lib32-wayland' 'vulkan-headers') +source=("vulkan-icd-loader-${pkgver}.tar.gz::https://github.com/KhronosGroup/Vulkan-Loader/archive/v${pkgver}.tar.gz") + +build() { + export ASFLAGS=--32 + export CFLAGS=-m32 + export CXXFLAGS=-m32 + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cd "${srcdir}"/Vulkan-Loader* + + rm -rf build ; mkdir build ; cd build + cmake -DCMAKE_INSTALL_PREFIX=/usr \ + -D VULKAN_HEADERS_INSTALL_DIR=/usr \ + -D CMAKE_INSTALL_SYSCONFDIR=/etc \ + -D CMAKE_INSTALL_LIBDIR=lib32 \ + -D CMAKE_INSTALL_DATADIR=/share \ + -D CMAKE_SKIP_RPATH=True \ + -D BUILD_TESTS=Off \ + -D BUILD_WSI_XCB_SUPPORT=On \ + -D BUILD_WSI_XLIB_SUPPORT=On \ + -D BUILD_WSI_WAYLAND_SUPPORT=On \ + -D CMAKE_BUILD_TYPE=Release \ + .. + + make +} + +package() { + cd "${srcdir}"/Vulkan-Loader*/build + + make DESTDIR="${pkgdir}" install +} diff --git a/x86_64/extra32/lib32-wayland/PKGBUILD b/x86_64/extra32/lib32-wayland/PKGBUILD new file mode 100644 index 0000000..83e0421 --- /dev/null +++ b/x86_64/extra32/lib32-wayland/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=lib32-wayland +pkgver=1.20.0 +pkgrel=1 +pkgdesc='A computer display server protocol' +arch=(x86_64) +url=https://wayland.freedesktop.org +license=(MIT) +depends=( + lib32-libffi + lib32-expat + lib32-libxml2 + wayland +) +makedepends=(meson) +source=("https://wayland.freedesktop.org/releases/wayland-$pkgver.tar.xz") + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + meson build wayland-$pkgver \ + --buildtype=release \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + -D documentation=false + + ninja -C build +} + +package() { + DESTDIR="$pkgdir" ninja -C build install + rm -rf "${pkgdir}"/usr/{bin,include,share} +} diff --git a/x86_64/extra32/lib32-xrandr/PKGBUILD b/x86_64/extra32/lib32-xrandr/PKGBUILD new file mode 100644 index 0000000..33032ff --- /dev/null +++ b/x86_64/extra32/lib32-xrandr/PKGBUILD @@ -0,0 +1,32 @@ +_pkgbasename=libxrandr +pkgname=lib32-$_pkgbasename +pkgver=1.5.2 +pkgrel=1 +pkgdesc="X11 RandR extension library (32-bit)" +arch=('x86_64') +depends=('lib32-libxext' 'lib32-libxrender' $_pkgbasename) +makedepends=('util-macros') +source=(https://xorg.freedesktop.org/releases/individual/lib/libXrandr-${pkgver}.tar.bz2) + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cd "${srcdir}/libXrandr-${pkgver}" + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --libdir=/usr/lib32 + + make +} + +package() { + cd "${srcdir}/libXrandr-${pkgver}" + + make DESTDIR="${pkgdir}" install + + rm -rf "${pkgdir}"/usr/{include,share,bin} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-xrender/PKGBUILD b/x86_64/extra32/lib32-xrender/PKGBUILD new file mode 100644 index 0000000..21b907c --- /dev/null +++ b/x86_64/extra32/lib32-xrender/PKGBUILD @@ -0,0 +1,27 @@ +_pkgbasename=libxrender +pkgname=lib32-$_pkgbasename +pkgver=0.9.10 +pkgrel=1 +pkgdesc="X Rendering Extension client library (32-bit)" +arch=('x86_64') +url="https://xorg.freedesktop.org/" +depends=('lib32-libx11' $_pkgbasename) +makedepends=('pkgconf' 'xorgproto') +source=(${url}/releases/individual/lib/libXrender-${pkgver}.tar.bz2) + +build() { + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + + cd "${srcdir}/libXrender-${pkgver}" + ./configure --prefix=/usr --disable-static --libdir=/usr/lib32 + make +} + +package() { + cd "${srcdir}/libXrender-${pkgver}" + + make DESTDIR="${pkgdir}" install + rm -rf "${pkgdir}"/usr/{include,share,bin} +} \ No newline at end of file diff --git a/x86_64/extra32/lib32-zlib/PKGBUILD b/x86_64/extra32/lib32-zlib/PKGBUILD new file mode 100644 index 0000000..7db3ce4 --- /dev/null +++ b/x86_64/extra32/lib32-zlib/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=lib32-zlib +rpkgname=zlib +pkgver=1.2.11 +pkgrel=2 +arch=('x86_64') +source=(https://zlib.net/$rpkgname-$pkgver.tar.xz) + +build() { + cd $rpkgname-$pkgver + + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG="i686-pc-linux-gnu-pkg-config" + + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib32 + + make +} + +package() { + cd $rpkgname-$pkgver + make DESTDIR=$pkgdir install + + rm -rf "${pkgdir}"/usr/{include,share,bin} +} diff --git a/x86_64/extra32/lib32-zstd/PKGBUILD b/x86_64/extra32/lib32-zstd/PKGBUILD new file mode 100644 index 0000000..a12ce0c --- /dev/null +++ b/x86_64/extra32/lib32-zstd/PKGBUILD @@ -0,0 +1,32 @@ +_pkgname=zstd +pkgname=lib32-zstd +pkgver=1.5.0 +pkgrel=2 +pkgdesc='Zstandard - Fast real-time compression algorithm (32-bit)' +url='https://facebook.github.io/zstd/' +arch=('x86_64') +depends=('zstd') +source=(https://github.com/facebook/zstd/releases/download/v${pkgver}/zstd-${pkgver}.tar.zst) + +build() { + cd ${_pkgname}-${pkgver} + export CC="gcc -m32" + export CXX="g++ -m32" + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + make + make zstdmt + make -C contrib/pzstd +} + +package() { + cd ${_pkgname}-${pkgver} + + make \ + PREFIX=/usr \ + LIBDIR=/usr/lib32 \ + PKGCONFIGDIR=/usr/lib32/pkgconfig \ + DESTDIR="${pkgdir}" \ + install + + rm -rf "${pkgdir}"/usr/{share,include,bin} +} diff --git a/x86_64/games/PKGBUILD b/x86_64/games/PKGBUILD new file mode 100644 index 0000000..b48d267 --- /dev/null +++ b/x86_64/games/PKGBUILD @@ -0,0 +1,19 @@ +pkgname= +pkgver= +pkgrel=1 +arch=('x86_64') +depends=() +makedepends=() +source=() + +prepare() { + +} + +build() { + +} + +package() { + +} diff --git a/x86_64/games/minetest/PKGBUILD b/x86_64/games/minetest/PKGBUILD new file mode 100644 index 0000000..49c62e8 --- /dev/null +++ b/x86_64/games/minetest/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=minetest +pkgver=5.5.1 +pkgrel=1 +arch=(x86_64) +depends=(irrlicht gcc freetype2 sqlite3 zstd luajit gmp jsoncpp) +makedepends=(make cmake ninja) +source=(https://github.com/$pkgname/$pkgname/archive/refs/tags/$pkgver.tar.gz) + +prepare() { + cd $pkgname-$pkgver + + git clone https://github.com/minetest/irrlicht.git lib/irrlichtmt -b 1.9.0mt4 --depth=1 +} + +build() { + cd $pkgname-$pkgver + + mkdir -p build && cd build + cmake -G Ninja \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D BUILD_CLIENT=1 \ + -D ENABLE_GETTEXT=1 \ + -D ENABLE_LEVELDB=0 \ + -D ENABLE_POSTGRESQL=1 \ + -D ENABLE_SPATIAL=1 \ + -D ENABLE_REDIS=0 \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/games/nsnake/PKGBUILD b/x86_64/games/nsnake/PKGBUILD new file mode 100644 index 0000000..ad9a289 --- /dev/null +++ b/x86_64/games/nsnake/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=nsnake +pkgver=3.0.0 +pkgrel=1 +arch=('x86_64') +depends=(ncurses bash) +makedepends=(gcc) +source=(https://github.com/alexdantas/nSnake/archive/refs/tags/v3.0.0.tar.gz) + +build() { + cd nSnake-$pkgver + + make +} + +package() { + cd nSnake-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/gnome/PKGBUILD b/x86_64/gnome/PKGBUILD new file mode 100644 index 0000000..0cf16c8 --- /dev/null +++ b/x86_64/gnome/PKGBUILD @@ -0,0 +1,19 @@ +pkgname= +pkgver= +pkgrel=1 +arch=(x86_64) +depends=() +makedepends=() +source=() + +build() { + cd $pkgname-$pkgver + + +} + +package() { + cd $pkgname-$pkgver + + +} diff --git a/x86_64/gnome/evolution-data-server/PKGBUILD b/x86_64/gnome/evolution-data-server/PKGBUILD new file mode 100644 index 0000000..1c50ab9 --- /dev/null +++ b/x86_64/gnome/evolution-data-server/PKGBUILD @@ -0,0 +1,40 @@ +pkgname=evolution-data-server +pkgver=3.42.4 +pkgrel=1 +arch=(x86_64) +depends=(gcr libical libsecret nss sqlite3 + gobject-introspection gtk3+ icu libcanberra + openldap) +makedepends=(gcc) +source=(https://download.gnome.org/sources/$pkgname/3.42/$pkgname-$pkgver.tar.xz) + +prepare() { + mkdir -p $pkgname-$pkgver/build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D MAKE_INSTALL_PREFIX=/usr \ + -D SYSCONF_INSTALL_DIR=/etc \ + -D ENABLE_VALA_BINDINGS=ON \ + -D ENABLE_INSTALLED_TESTS=OFF \ + -D ENABLE_GOOGLE=OFF \ + -D WITH_OPENLDAP=ON \ + -D WITH_KRB5=OFF \ + -D ENABLE_INTROSPECTION=ON \ + -D ENABLE_GTK_DOC=OFF \ + -D WITH_LIBDB=OFF \ + -D ENABLE_WEATHER=OFF \ + -D ENABLE_GOA=OFF \ + .. + + make +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/gnome/gcr/PKGBUILD b/x86_64/gnome/gcr/PKGBUILD new file mode 100644 index 0000000..40cebeb --- /dev/null +++ b/x86_64/gnome/gcr/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=gcr +pkgver=3.40.0 +pkgrel=1 +arch=('x86_64') +depends=(glib2 libgcrypt p11-kit gtk+ gobject-introspection gnupg) +makedepends=(gtk-doc valgrind libxslt) +source=(https://download.gnome.org/sources/gcr/3.40/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + sed -i 's:"/desktop:"/org:' schema/*.xml + + sed -e '208 s/@BASENAME@/gcr-viewer.desktop/' \ + -e '231 s/@BASENAME@/gcr-prompter.desktop/' \ + -i ui/meson.build + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + meson \ + --prefix=/usr \ + --buildtype=release \ + -D gtk_doc=false \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/gnome/gjs/PKGBUILD b/x86_64/gnome/gjs/PKGBUILD new file mode 100644 index 0000000..f5d2970 --- /dev/null +++ b/x86_64/gnome/gjs/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=gjs +pkgver=1.70.1 +pkgrel=1 +arch=(x86_64) +depends=(cairo dbus gobject-introspection js78 gtk3+) +makedepends=() +source=() + +build() { + cd $pkgname-$pkgver + + +} + +package() { + cd $pkgname-$pkgver + + +} diff --git a/x86_64/gnome/gsettings-desktop-schemas/PKGBUILD b/x86_64/gnome/gsettings-desktop-schemas/PKGBUILD new file mode 100644 index 0000000..d401142 --- /dev/null +++ b/x86_64/gnome/gsettings-desktop-schemas/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=gsettings-desktop-schemas +pkgver=41.0 +gver=41 +pkgrel=1 +arch=('x86_64') +depends=(glib2 gobject-introspection) +source=(https://download.gnome.org/sources/$pkgname/$gver/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + sed -i -r 's:"(/system):"/org/gnome\1:g' schemas/*.in + + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + --buildtype=release \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/gnome/libsecret/PKGBUILD b/x86_64/gnome/libsecret/PKGBUILD new file mode 100644 index 0000000..db6f13a --- /dev/null +++ b/x86_64/gnome/libsecret/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=libsecret +pkgver=0.20.5 +pkgrel=1 +arch=('x86_64') +depends=(glib2 gobject-introspection libgcrypt libxslt) +makedepends=(python3-pip) +source=(https://download.gnome.org/sources/$pkgname/0.20/$pkgname-$pkgver.tar.xz) + +prepare() { + pip install setuptools + pip install pygments markdown toml typogrify +} + +build() { + cd $pkgname-$pkgver + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + --buildtype=release \ + .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/gnome/rest/PKGBUILD b/x86_64/gnome/rest/PKGBUILD new file mode 100644 index 0000000..666d927 --- /dev/null +++ b/x86_64/gnome/rest/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=rest +pkgver=0.8.1 +pkgrel=1 +arch=('x86_64') +depends=(libsoup gobject-introspection) +makedepends=(gtk-doc) +source=(https://download.gnome.org/sources/rest/0.8/rest-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + autoreconf -i +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --with-ca-certificates=/etc/ca-certificates/extracted/ + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/gnome/totem-pl-parser/PKGBUILD b/x86_64/gnome/totem-pl-parser/PKGBUILD new file mode 100644 index 0000000..28c9588 --- /dev/null +++ b/x86_64/gnome/totem-pl-parser/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=totem-pl-parser +pkgver=3.26.6 +pkgrel=1 +arch=(x86_64) +depends=(libsoup gobject-introspection libarchive libgcrypt) +makedepends=(cmake gtk-doc) +source=(https://download.gnome.org/sources/$pkgname/3.26/$pkgname-$pkgver.tar.xz) + +prepare() { + mkdir -p $pkgname-$pkgver/build +} + +build() { + cd $pkgname-$pkgver/build + + meson --prefix=/usr --buildtype=release .. + + ninja +} + +package() { + cd $pkgname-$pkgver/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/gnome/vte/PKGBUILD b/x86_64/gnome/vte/PKGBUILD new file mode 100644 index 0000000..8ff4761 --- /dev/null +++ b/x86_64/gnome/vte/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=vte +pkgver=0.66.2 +pkgrel=1 +arch=('x86_64') +depends=(gtk+ libxml2 pcre2 icu vala gobject-introspection gnutls fribidi) +source=(https://gitlab.gnome.org/GNOME/$pkgname/-/archive/$pkgver/$pkgver-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver* + + mkdir -p build && cd build + + meson \ + --prefix=/usr \ + --buildtype=release \ + -D fribidi=false \ + -D gnutls=true + + ninja +} + +package() { + cd $pkgname-$pkgver*/build + + DESTDIR=$pkgdir ninja install +} diff --git a/x86_64/gnome/yelp-xsl/PKGBUILD b/x86_64/gnome/yelp-xsl/PKGBUILD new file mode 100644 index 0000000..4600ffd --- /dev/null +++ b/x86_64/gnome/yelp-xsl/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=yelp-xsl +pkgver=41.1 +pkgrel=1 +arch=(x86_64) +depends=(libxslt itstool) +makedepends=(gcc) +source=(https://download.gnome.org/sources/$pkgname/41/$pkgname-$pkgver.tar.xz) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/kde/KDE-PKGBUILD b/x86_64/kde/KDE-PKGBUILD new file mode 100644 index 0000000..4d0d26c --- /dev/null +++ b/x86_64/kde/KDE-PKGBUILD @@ -0,0 +1,36 @@ +pkgname= +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=() +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.93 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/KDE-PORT-PKGBUILD b/x86_64/kde/KDE-PORT-PKGBUILD new file mode 100644 index 0000000..40d8654 --- /dev/null +++ b/x86_64/kde/KDE-PORT-PKGBUILD @@ -0,0 +1,38 @@ +pkgname= +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(boost giflib libepoxy libgcrypt libical libjpeg libpng + libxslt lmdb qrencode phonon plasma-wayland-protocols shared-mime-info + libdbusmenu-qt networkmanager polkit-qt modemmanager noto-fonts) +makedepends=(cmake extra-cmake-modules docbook-xml docbook-xsl) +durl=https://download.kde.org/stable/frameworks/5.93/portingAids +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/PKGBUILD b/x86_64/kde/PKGBUILD new file mode 100644 index 0000000..ee9134a --- /dev/null +++ b/x86_64/kde/PKGBUILD @@ -0,0 +1,31 @@ +pkgname= +pkgver= +pkgrel=1 +arch=('x86_64') +depends=() +makedepends=() +source=() + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make + +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/kde/apper/PKGBUILD b/x86_64/kde/apper/PKGBUILD new file mode 100644 index 0000000..824646a --- /dev/null +++ b/x86_64/kde/apper/PKGBUILD @@ -0,0 +1,48 @@ +pkgname=apper +pkgver=1.0.0 +pkgrel=1 +arch=('x86_64') +depends=(packagekit-qt5 kcmutils appstream qt5) +makedepends=(cmake extra-cmake-modules) +source=(https://download.kde.org/stable/$pkgname/$pkgver/$pkgname-$pkgver.tar.xz + apper-rpath.patch + apper-qt5.11.patch::https://invent.kde.org/system/apper/-/commit/d8960ea9.patch + apper-qt5.14.patch::https://invent.kde.org/system/apper/-/commit/1815d19f.patch + kdebug-401461.patch::https://invent.kde.org/system/apper/-/commit/d486706f.patch + apper-qt5.15.patch::https://invent.kde.org/system/apper/-/commit/f2fb923e.patch) + +prepare() { + mkdir -p $pkgname-$pkgver/build + + patch -d $pkgname-$pkgver -p1 < apper-rpath.patch # Fix RPATH of apper binary + patch -d $pkgname-$pkgver -p1 < apper-qt5.11.patch # Fix build with Qt 5.11 + patch -d $pkgname-$pkgver -p1 < apper-qt5.14.patch # Fix build with Qt 5.14 + patch -d $pkgname-$pkgver -p1 < kdebug-401461.patch # Fix crash + patch -d $pkgname-$pkgver -p1 < apper-qt5.15.patch # Fix build with Qt 5.15 +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -D APPSTREAM=ON \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore + + # fix conflicts with gnome-software + mv "$pkgdir"/usr/share/dbus-1/services/{,kde_}org.freedesktop.PackageKit.service +} diff --git a/x86_64/kde/apper/apper-qt5.11.patch b/x86_64/kde/apper/apper-qt5.11.patch new file mode 100644 index 0000000..5b4e1ba --- /dev/null +++ b/x86_64/kde/apper/apper-qt5.11.patch @@ -0,0 +1,37 @@ +From d8960ea9097e5a324acd04ce3f03f2d8bfe88df6 Mon Sep 17 00:00:00 2001 +From: Rex Dieter +Date: Tue, 31 Jul 2018 09:45:37 -0500 +Subject: [PATCH] Fix build against Qt 5.11+ + +--- + Apper/Settings/Settings.cpp | 1 + + libapper/Requirements.h | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/Apper/Settings/Settings.cpp b/Apper/Settings/Settings.cpp +index e077b8ee..615d86d2 100644 +--- a/Apper/Settings/Settings.cpp ++++ b/Apper/Settings/Settings.cpp +@@ -27,6 +27,7 @@ + #include + #include + ++#include + #include + #include + +diff --git a/libapper/Requirements.h b/libapper/Requirements.h +index 730644be..83253269 100644 +--- a/libapper/Requirements.h ++++ b/libapper/Requirements.h +@@ -23,6 +23,7 @@ + + #include + ++#include + #include + + namespace Ui { +-- +GitLab + diff --git a/x86_64/kde/apper/apper-qt5.14.patch b/x86_64/kde/apper/apper-qt5.14.patch new file mode 100644 index 0000000..bbd3bcb --- /dev/null +++ b/x86_64/kde/apper/apper-qt5.14.patch @@ -0,0 +1,24 @@ +From 1815d19f01861827bac9a862d77d098215a39ab9 Mon Sep 17 00:00:00 2001 +From: Laurent Montel +Date: Mon, 2 Dec 2019 13:30:18 +0100 +Subject: [PATCH] Make it compile with last qt5.14 + +--- + Apper/ApperKCM.cpp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/Apper/ApperKCM.cpp b/Apper/ApperKCM.cpp +index bb3ac391..3571b913 100644 +--- a/Apper/ApperKCM.cpp ++++ b/Apper/ApperKCM.cpp +@@ -35,6 +35,7 @@ + #include + #include + #include ++#include + + #include + #include +-- +GitLab + diff --git a/x86_64/kde/apper/apper-qt5.15.patch b/x86_64/kde/apper/apper-qt5.15.patch new file mode 100644 index 0000000..89713cb --- /dev/null +++ b/x86_64/kde/apper/apper-qt5.15.patch @@ -0,0 +1,63 @@ +From f2fb923e6920f567033e0954195e5c59e38aa164 Mon Sep 17 00:00:00 2001 +From: Jan Przybylak +Date: Sun, 16 Dec 2018 14:29:34 -0500 +Subject: [PATCH] Removed background gradient + +Summary: +Removed a background gradient that's impossible to render properly on most screens. +Basically the same as D16998 + +Reviewers: #vdg, dantti, ndavis + +Reviewed By: #vdg, ndavis + +Subscribers: ndavis, dantti + +Differential Revision: https://phabricator.kde.org/D17341 +--- + libapper/CategoryDrawer.cpp | 29 ----------------------------- + 1 file changed, 29 deletions(-) + +diff --git a/libapper/CategoryDrawer.cpp b/libapper/CategoryDrawer.cpp +index 5e0a9390..d12f2650 100644 +--- a/libapper/CategoryDrawer.cpp ++++ b/libapper/CategoryDrawer.cpp +@@ -49,35 +49,6 @@ void CategoryDrawer::drawCategory(const QModelIndex &index, + const QFontMetrics fontMetrics = QFontMetrics(font); + const int height = categoryHeight(index, option); + +- //BEGIN: decoration gradient +- { +- QPainterPath path(optRect.bottomLeft()); +- path.lineTo(QPoint(optRect.topLeft().x(), optRect.topLeft().y() - 3)); +- const QPointF topLeft(optRect.topLeft()); +- QRectF arc(topLeft, QSizeF(4, 4)); +- path.arcTo(arc, 180, -90); +- path.lineTo(optRect.topRight()); +- path.lineTo(optRect.bottomRight()); +- path.lineTo(optRect.bottomLeft()); +- +- QColor window(option.palette.window().color()); +- const QColor base(option.palette.base().color()); +- +- window.setAlphaF(0.4); +- +- QLinearGradient decoGradient1(optRect.topLeft(), optRect.bottomLeft()); +- decoGradient1.setColorAt(0, window); +- decoGradient1.setColorAt(1, Qt::transparent); +- +- QLinearGradient decoGradient2(optRect.topLeft(), optRect.topRight()); +- decoGradient2.setColorAt(0, Qt::transparent); +- decoGradient2.setColorAt(1, base); +- +- painter->fillPath(path, decoGradient1); +- painter->fillPath(path, decoGradient2); +- } +- //END: decoration gradient +- + { + QRect newOptRect(optRect); + newOptRect.setLeft(newOptRect.left() + 1); +-- +GitLab + diff --git a/x86_64/kde/apper/apper-rpath.patch b/x86_64/kde/apper/apper-rpath.patch new file mode 100644 index 0000000..9bcf2c4 --- /dev/null +++ b/x86_64/kde/apper/apper-rpath.patch @@ -0,0 +1,13 @@ +diff --git a/Apper/CMakeLists.txt b/Apper/CMakeLists.txt +index 2b71603..8c24305 100644 +--- a/Apper/CMakeLists.txt ++++ b/Apper/CMakeLists.txt +@@ -49,7 +49,7 @@ target_link_libraries(apper + + set_target_properties(apper PROPERTIES INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR}/apper) + +-install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/apper DESTINATION ${CMAKE_INSTALL_BINDIR}) ++install(TARGETS apper DESTINATION ${CMAKE_INSTALL_BINDIR}) + install(FILES org.kde.apper.desktop DESTINATION ${CMAKE_INSTALL_APPDIR}) + install(FILES org.kde.apper_installer.desktop DESTINATION ${CMAKE_INSTALL_APPDIR}) + install(FILES org.kde.apper_settings.desktop DESTINATION ${CMAKE_INSTALL_APPDIR}) diff --git a/x86_64/kde/apper/kdebug-401461.patch b/x86_64/kde/apper/kdebug-401461.patch new file mode 100644 index 0000000..291e25f --- /dev/null +++ b/x86_64/kde/apper/kdebug-401461.patch @@ -0,0 +1,40 @@ +From d486706f3e9f7eefa4d44cd5ace34eeaf7ba2ceb Mon Sep 17 00:00:00 2001 +From: Alexander Kernozhitsky +Date: Thu, 21 Mar 2019 23:10:54 +0100 +Subject: [PATCH] Prevent crashing Apper on + PackageModel::clearSelectedNotPresent() + +Summary: +m_checkedPackages.erase() is called, but the iterator is not increased, therefore on the next iteration we use an invalid iterator + +BUG: 405433 +BUG: 401461 +BUG: 402170 + +Test Plan: I just rebuilt Apper, ran it and installed the updates with it. The bug does not appear. + +Reviewers: dantti, apol + +Reviewed By: dantti + +Differential Revision: https://phabricator.kde.org/D19951 +--- + libapper/PackageModel.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libapper/PackageModel.cpp b/libapper/PackageModel.cpp +index 1ff2a04e..ac058585 100644 +--- a/libapper/PackageModel.cpp ++++ b/libapper/PackageModel.cpp +@@ -491,7 +491,7 @@ void PackageModel::clearSelectedNotPresent() + + if (notFound) { + // Uncheck the package If it's not in the model +- m_checkedPackages.erase(it); ++ it = m_checkedPackages.erase(it); + uncheckPackageLogic(package.packageID); + } else { + ++it; +-- +GitLab + diff --git a/x86_64/kde/ark/PKGBUILD b/x86_64/kde/ark/PKGBUILD new file mode 100644 index 0000000..df7c62b --- /dev/null +++ b/x86_64/kde/ark/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=ark +pkgver=22.04.3 +pkgrel=1 +arch=(x86_64) +depends=(kparts kpty libarchive zip kitemmodels hicolor-icon-theme) +makedepends=(extra-cmake-modules kdoctools) +source=(https://download.kde.org/stable/release-service/$pkgver/src/$pkgname-$pkgver.tar.xz) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/attica/PKGBUILD b/x86_64/kde/attica/PKGBUILD new file mode 100644 index 0000000..87933d6 --- /dev/null +++ b/x86_64/kde/attica/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=attica +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(cmake extra-cmake-modules docbook-xml docbook-xsl) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j4 + +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/baloo/PKGBUILD b/x86_64/kde/baloo/PKGBUILD new file mode 100644 index 0000000..bfd9548 --- /dev/null +++ b/x86_64/kde/baloo/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=baloo +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kfilemetadata kidletime kio lmdb) +makedepends=(cmake extra-cmake-modules kdoctools) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/bluez-qt/PKGBUILD b/x86_64/kde/bluez-qt/PKGBUILD new file mode 100644 index 0000000..7b96d1c --- /dev/null +++ b/x86_64/kde/bluez-qt/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=bluez-qt +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5 bluez) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/breeze-gtk/PKGBUILD b/x86_64/kde/breeze-gtk/PKGBUILD new file mode 100644 index 0000000..3417c34 --- /dev/null +++ b/x86_64/kde/breeze-gtk/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=breeze-gtk +pkgver=5.24.5 +pkgrel=1 +arch=(x86_64) +makedepends=(extra-cmake-modules sassc cairo breeze python3-pip) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) + +prepare() { + pip install pycairo +} + +build(){ + cmake -B build -S $pkgname-$pkgver + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/breeze-icons/PKGBUILD b/x86_64/kde/breeze-icons/PKGBUILD new file mode 100644 index 0000000..ad87e66 --- /dev/null +++ b/x86_64/kde/breeze-icons/PKGBUILD @@ -0,0 +1,38 @@ +pkgname=breeze-icons +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +makedepends=(qt5 cmake extra-cmake-modules python3-pip) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build + + # CMake dep here + pip3 install lxml +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/breeze/PKGBUILD b/x86_64/kde/breeze/PKGBUILD new file mode 100644 index 0000000..427df7c --- /dev/null +++ b/x86_64/kde/breeze/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=breeze +pkgver=5.24.5 +pkgrel=1 +arch=(x86_64) +depends=(frameworkintegration kcmutils kdecoration breeze-icons kwayland hicolor-icon-theme breeze-gtk) +makedepends=(extra-cmake-modules kcmutils) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) + +build() { + CFLAGS+="-w " + CXXFLAGS+="-w " + + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/build-all.sh b/x86_64/kde/build-all.sh new file mode 100755 index 0000000..d863831 --- /dev/null +++ b/x86_64/kde/build-all.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +function build_core() { + shopt -s globstar + for d in ./*/ ; do + cd "$d" + $@ + rm -rf src/ + rm -rf pkg/ + cd .. + done +} + +build_core "makepkg --skipint" diff --git a/x86_64/kde/build_pkg.sh b/x86_64/kde/build_pkg.sh new file mode 100755 index 0000000..f9edc1f --- /dev/null +++ b/x86_64/kde/build_pkg.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +folders=(kcoreaddons kdbusaddons kconfig kdnssd kguiaddons ki18n kidletime kimageformats kitemmodels kitemviews kplotting kwidgetsaddons kwindowsystem networkmanager-qt solid sonnet threadweaver kauth kcompletion kcrash kdoctools kpty kunitconversion kconfigwidgets kservice kglobalaccel kpackage kdesu kemoticons kiconthemes kjobwidgets knotifications ktextwidgets kxmlgui kbookmarks kwallet kded kio kdeclarative kcmutils kirigami2 syndication knewstuff frameworkintegration kinit kparts kactivities kdewebkit syntax-highlighting ktexteditor kdesignerplugin kwayland plasma-framework modemmanager-qt kpeople kxmlrpcclient bluez-qt kfilemetadata baloo breeze-icons oxygen-icons5 kactivities-stats krunner prison qqc2-desktop-style kjs kdelibs4support khtml kjsembed kmediaplayer kross kholidays purpose kcalendarcore kcontacts kquickcharts knotifyconfig kdav) + +function build_extras_S() { + shopt -s globstar + for d in ${folders[@]} ; do + mkdir -p "$d" + cd "$d" + $@ + sudo pacman -U *x86_64*tar.gz --noconfirm + cd .. + done +} + +build_extras_S "makepkg --skipint" + +function build_extras_S() { + shopt -s globstar + for d in ${folders[@]} ; do + rm -rf "$d" + done +} + +#build_extras_S "makepkg --skipint -C -f" diff --git a/x86_64/kde/build_pkg_aids.sh b/x86_64/kde/build_pkg_aids.sh new file mode 100755 index 0000000..23f2c1b --- /dev/null +++ b/x86_64/kde/build_pkg_aids.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +folders=(kdewebkit kdesignerplugin kxmlrpcclient kjs kdelibs4support khtml kjsembed kmediaplayer kross) + +function build_extras_S() { + shopt -s globstar + for d in ${folders[@]} ; do + mkdir -p "$d" + cd "$d" + $@ + cd .. + done +} + +build_extras_S "makepkg --skipint" + +function build_extras_S() { + shopt -s globstar + for d in ${folders[@]} ; do + rm -rf "$d" + done +} + +#build_extras_S "makepkg --skipint -C -f" diff --git a/x86_64/kde/discover/PKGBUILD b/x86_64/kde/discover/PKGBUILD new file mode 100644 index 0000000..28844e8 --- /dev/null +++ b/x86_64/kde/discover/PKGBUILD @@ -0,0 +1,32 @@ +pkgname=discover +pkgver=5.24.5 +pkgrel=1 +arch=(x86_64) +depends=(knewstuff kitemmodels kcmutils kidletime hicolor-icon-theme kirigami2 discount) +makedepends=(extra-cmake-modules plasma-framework) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz + bottle-changes.patch) + +prepare() { + cd $pkgname-$pkgver + + patch -p0 -i ../bottle-changes.patch +} + +build() { + cmake -B build -S $pkgname-$pkgver \ + -D CMAKE_INSTALL_LIBEXECDIR=lib \ + -D BUILD_TESTING=OFF \ + -D WITH_KCM=ON + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/discover/bottle-changes.patch b/x86_64/kde/discover/bottle-changes.patch new file mode 100644 index 0000000..4927801 --- /dev/null +++ b/x86_64/kde/discover/bottle-changes.patch @@ -0,0 +1,11 @@ +--- discover/qml/UpdatesPage.qml 2022-05-03 13:02:17.000000000 +0300 ++++ discover/qml/UpdatesPage.qml 2022-05-20 22:45:13.398365153 +0300 +@@ -156,7 +156,7 @@ + ReadFile { + id: log + filter: ".*ALPM-SCRIPTLET\\] .*" +- path: "/var/log/pacman.log" ++ path: "/var/log/bottle.log" + } + } + } diff --git a/x86_64/kde/dolphin/PKGBUILD b/x86_64/kde/dolphin/PKGBUILD new file mode 100644 index 0000000..043b461 --- /dev/null +++ b/x86_64/kde/dolphin/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=dolphin +pkgver=22.04.3 +pkgrel=1 +arch=('x86_64') +depends=(knewstuff kio-extras kcmutils kparts kactivities) +makedepends=(cmake kdoctools extra-cmake-modules) +source=(https://download.kde.org/stable/release-service/${pkgver}/src/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/drunk-desktop-plasma-clean/PKGBUILD b/x86_64/kde/drunk-desktop-plasma-clean/PKGBUILD new file mode 100644 index 0000000..8e03b9a --- /dev/null +++ b/x86_64/kde/drunk-desktop-plasma-clean/PKGBUILD @@ -0,0 +1,34 @@ +pkgname=drunk-desktop-plasma-clean +pkgver=2022.3 +pkgrel=3 +arch=('x86_64') +depends=( + # Login ( suggest sddm as wayland can be launched here + theming ) + sddm + + # Framework + desktop + extra-cmake-modules kconfig kdesu kidletime knotifications kservice kxmlrpcclient plasma-workspace-wallpapers + frameworkintegration kconfigwidgets kdewebkit kimageformats knotifyconfig ksysguard layer-shell-qt polkit-kde-agent + kactivities kcontacts kdnssd kinit ksystemstats libkscreen polkit-qt attica kactivities-stats kcoreaddons kdoctools + kio kpackage ktexteditor libksysguard prison baloo kactivitymanagerd kcrash kemoticons kirigami2 kparts ktextwidgets modemmanager-qt + purpose bluez-qt kapidox kdav kfilemetadata kitemmodels kpeople kunitconversion networkmanager-qt qqc2-desktop-style breeze karchive kdbusaddons + kglobalaccel kitemviews kplotting kwallet oxygen-icons5 sddm-kcm breeze-icons kauth kguiaddons kjobwidgets kpty kwayland + phonon kbookmarks kdeclarative kholidays kjs kquickcharts kwayland-server phonon-backend-gstreamer sonnet kcalendarcore + kdecoration khotkeys kjsembed kross kwidgetsaddons plasma-desktop syndication kcmutils kded khtml krunner kwin plasma-framework syntax-highlighting + discover kcodecs kdelibs4support ki18n kmenuedit kscreen kwindowsystem plasma-wayland-protocols systemsettings + kcompletion kdesignerplugin kiconthemes knewstuff kscreenlocker kxmlgui plasma-workspace threadweaver + kwayland-integration double-conversion + + # Applications + konsole spectacle + + # Other + powerdevil plasma-pa plasma-nm wireplumber) + +build() { + echo "[*]: Its a metapackage" +} + +package() { + echo "[*]: Its a metapackage" +} diff --git a/x86_64/kde/drunk-desktop-plasma/PKGBUILD b/x86_64/kde/drunk-desktop-plasma/PKGBUILD new file mode 100644 index 0000000..d85f629 --- /dev/null +++ b/x86_64/kde/drunk-desktop-plasma/PKGBUILD @@ -0,0 +1,41 @@ +pkgname=drunk-desktop-plasma +pkgver=2022.3 +pkgrel=4 +arch=('x86_64') +install=plasma.install +depends=( + # Login ( suggest sddm as wayland can be launched here + theming ) + sddm + + # Framework + desktop + ark kauth kdav kdesu ki18n kjobwidgets kparts ksystemstats kxmlrpcclient plasma-desktop + purpose attica kbookmarks kdbusaddons kdewebkit kiconthemes kjs kpeople ktexteditor + layer-shell-qt plasma-framework qca-qt5 baloo kcalendarcore kdeclarative kdnssd kidletime kjsembed kplotting + ktextwidgets libkipi plasma-integration qqc2-desktop-style bluez-qt extra-cmake-modules kcmutils + kdecoration kdoctools kimageformats kpty kunitconversion libkscreen sddm-kcm + breeze frameworkintegration kcodecs kded kemoticons kinfocenter kmenuedit kquickcharts kwallet + libksysguard plasma-wayland-protocols solid breeze-gtk kactivities kcompletion kfilemetadata + kinit kross kwayland modemmanager-qt plasma-workspace sonnet breeze-icons kactivities-stats + kconfig kdelibs4support kglobalaccel kio knewstuff krunner kwayland-server networkmanager-qt + plasma-workspace-wallpapers kactivitymanagerd kconfigwidgets kguiaddons kio-extras + knotifications kscreen kwidgetsaddons oxygen-icons5 polkit-kde-agent syndication kapidox kcontacts + kdeplasma-addons kholidays kirigami2 knotifyconfig kscreenlocker kwin phonon polkit-qt syntax-highlighting + karchive kcoreaddons khotkeys kitemmodels kservice kwindowsystem phonon-backend-gstreamer + systemsettings discover kcrash kdesignerplugin khtml kitemviews kpackage ksysguard kxmlgui prison threadweaver + kwayland-integration double-conversion + + # Applications + konsole spectacle dolphin kate firefox gwenview okular + elisa + + # Other + powerdevil plasma-pa plasma-nm plymouth + avahi print-manager wireplumber) + +build() { + echo "[*]: It's a metapackage" +} + +package() { + echo "[*]: It's a metapackage" +} diff --git a/x86_64/kde/drunk-desktop-plasma/plasma.install b/x86_64/kde/drunk-desktop-plasma/plasma.install new file mode 100644 index 0000000..2cfaaf4 --- /dev/null +++ b/x86_64/kde/drunk-desktop-plasma/plasma.install @@ -0,0 +1,8 @@ +post_upgrade() { + echo "PLYMOUTH is now enabled by default with sddm" + systemctl enable sddm-plymouth +} + +post_install() { + post_upgrade +} diff --git a/x86_64/kde/elisa/PKGBUILD b/x86_64/kde/elisa/PKGBUILD new file mode 100644 index 0000000..2a4fd31 --- /dev/null +++ b/x86_64/kde/elisa/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=elisa +pkgver=22.08.1 +pkgrel=1 +arch=('x86_64') +depends=(baloo kirigami2 kdeclarative vlc) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/release-service/$pkgver/src +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/extra-cmake-modules/ECM-no-init.py.patch b/x86_64/kde/extra-cmake-modules/ECM-no-init.py.patch new file mode 100644 index 0000000..9acc733 --- /dev/null +++ b/x86_64/kde/extra-cmake-modules/ECM-no-init.py.patch @@ -0,0 +1,10 @@ +diff --git a/find-modules/GeneratePythonBindingUmbrellaModule.cmake b/find-modules/GeneratePythonBindingUmbrellaModule.cmake +index de79393..144fab4 100644 +--- a/find-modules/GeneratePythonBindingUmbrellaModule.cmake ++++ b/find-modules/GeneratePythonBindingUmbrellaModule.cmake +@@ -4,4 +4,4 @@ get_filename_component(PYTHON_UMBRELLA_MODULE_DIR ${PYTHON_UMBRELLA_MODULE_FILE} + + file(MAKE_DIRECTORY "${PYTHON_UMBRELLA_MODULE_DIR}") + +-execute_process(COMMAND "${CMAKE_COMMAND}" -E touch "${PYTHON_UMBRELLA_MODULE_FILE}") ++#execute_process(COMMAND "${CMAKE_COMMAND}" -E touch "${PYTHON_UMBRELLA_MODULE_FILE}") diff --git a/x86_64/kde/extra-cmake-modules/PKGBUILD b/x86_64/kde/extra-cmake-modules/PKGBUILD new file mode 100644 index 0000000..a0cc3f4 --- /dev/null +++ b/x86_64/kde/extra-cmake-modules/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=extra-cmake-modules +pkgver=5.94.0 +pkgrel=2 +arch=('x86_64') +commitid=997bd09f326e065cff6fa58c081f14c1d7aee6e5 +source=("https://github.com/KDE/extra-cmake-modules/archive/$commitid.zip" + "ECM-no-init.py.patch") + +prepare() { + patch -d $pkgname-$commitid -p1 < ECM-no-init.py.patch +} + +build() { + cmake \ + -B build \ + -S $pkgname-$commitid \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D BUILD_HTML_DOCS=OFF \ + -D BUILD_QTHELP_DOCS=OFF \ + -D QT_MAJOR_VERSION=6 + + cmake --build build +} + +package() { + DESTDIR=$pkgdir cmake --install build +} diff --git a/x86_64/kde/frameworkintegration/PKGBUILD b/x86_64/kde/frameworkintegration/PKGBUILD new file mode 100644 index 0000000..215bd62 --- /dev/null +++ b/x86_64/kde/frameworkintegration/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=frameworkintegration +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(knewstuff) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/gwenview/PKGBUILD b/x86_64/kde/gwenview/PKGBUILD new file mode 100644 index 0000000..2e31948 --- /dev/null +++ b/x86_64/kde/gwenview/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=gwenview +pkgver=22.04.3 +pkgrel=1 +arch=('x86_64') +depends=(kactivities baloo libkdcraw kparts kitemmodels cfitsio phonon purpose perl exiv2) +makedepends=(cmake extra-cmake-modules kdoctools) +durl=https://download.kde.org/stable/release-service/$pkgver/src +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D GWENVIEW_SEMANTICINFO_BACKEND="Baloo" \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kactivities-stats/PKGBUILD b/x86_64/kde/kactivities-stats/PKGBUILD new file mode 100644 index 0000000..b8a66d7 --- /dev/null +++ b/x86_64/kde/kactivities-stats/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kactivities-stats +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kactivities) +makedepends=(cmake boost qt5 extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kactivities/PKGBUILD b/x86_64/kde/kactivities/PKGBUILD new file mode 100644 index 0000000..7890d22 --- /dev/null +++ b/x86_64/kde/kactivities/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kactivities +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kcoreaddons kconfig kwindowsystem) +makedepends=(cmake extra-cmake-modules boost) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kactivitymanagerd/PKGBUILD b/x86_64/kde/kactivitymanagerd/PKGBUILD new file mode 100644 index 0000000..e3ea2bb --- /dev/null +++ b/x86_64/kde/kactivitymanagerd/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=kactivitymanagerd +pkgver=5.24.5 +pkgrel=1 +arch=(x86_64) +depends=(kio) +makedepends=(extra-cmake-modules boost) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kapidox/PKGBUILD b/x86_64/kde/kapidox/PKGBUILD new file mode 100644 index 0000000..3e13d69 --- /dev/null +++ b/x86_64/kde/kapidox/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=kapidox +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +makedepends=(cmake qt5 extra-cmake-modules docbook-xml docbook-xsl) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + pip3 install build installer wheel setuptools jinja2 +} + +build() { + cd $pkgname-$pkgver + + python -m build --wheel --no-isolation +} + +package() { + cd $pkgname-$pkgver + + python -m installer --destdir="$pkgdir" dist/*.whl +} diff --git a/x86_64/kde/karchive/PKGBUILD b/x86_64/kde/karchive/PKGBUILD new file mode 100644 index 0000000..08bc0b4 --- /dev/null +++ b/x86_64/kde/karchive/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=karchive +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(cmake extra-cmake-modules docbook-xml docbook-xsl) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + mv $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kate/PKGBUILD b/x86_64/kde/kate/PKGBUILD new file mode 100644 index 0000000..59b79d7 --- /dev/null +++ b/x86_64/kde/kate/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=kate +pkgver=22.04.1 +pkgrel=1 +arch=('x86_64') +depends=(plasma-framework knewstuff kitemmodels ktexteditor kactivities) +makedepends=(cmake extra-cmake-modules) +source=(https://download.kde.org/stable/release-service/$pkgver/src/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kauth/PKGBUILD b/x86_64/kde/kauth/PKGBUILD new file mode 100644 index 0000000..e4a6bb3 --- /dev/null +++ b/x86_64/kde/kauth/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kauth +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kcoreaddons polkit-qt) +makedepends=(cmake extra-cmake-modules clang) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kbookmarks/PKGBUILD b/x86_64/kde/kbookmarks/PKGBUILD new file mode 100644 index 0000000..24b191d --- /dev/null +++ b/x86_64/kde/kbookmarks/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kbookmarks +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kxmlgui kcodecs kconfigwidgets kxmlgui) +makedepends=(cmake qt5 extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kcalendarcore/PKGBUILD b/x86_64/kde/kcalendarcore/PKGBUILD new file mode 100644 index 0000000..cdba785 --- /dev/null +++ b/x86_64/kde/kcalendarcore/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kcalendarcore +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(libical qt5) +makedepends=(cmake qt5 extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kcmutils/PKGBUILD b/x86_64/kde/kcmutils/PKGBUILD new file mode 100644 index 0000000..ceba85d --- /dev/null +++ b/x86_64/kde/kcmutils/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kcmutils +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kdeclarative) +makedepends=(cmake qt5 extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kcodecs/PKGBUILD b/x86_64/kde/kcodecs/PKGBUILD new file mode 100644 index 0000000..9f9121d --- /dev/null +++ b/x86_64/kde/kcodecs/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=kcodecs +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(cmake clang gperf extra-cmake-modules docbook-xml docbook-xsl) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make + +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kcompletion/PKGBUILD b/x86_64/kde/kcompletion/PKGBUILD new file mode 100644 index 0000000..b07ebff --- /dev/null +++ b/x86_64/kde/kcompletion/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kcompletion +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kwidgetsaddons kconfig) +makedepends=(cmake clang qt5 extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kconfig/PKGBUILD b/x86_64/kde/kconfig/PKGBUILD new file mode 100644 index 0000000..e09a2bc --- /dev/null +++ b/x86_64/kde/kconfig/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kconfig +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(cmake clang extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kconfigwidgets/PKGBUILD b/x86_64/kde/kconfigwidgets/PKGBUILD new file mode 100644 index 0000000..2ed518d --- /dev/null +++ b/x86_64/kde/kconfigwidgets/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kconfigwidgets +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kauth kcodecs kconfig kguiaddons ki18n kwidgetsaddons) +makedepends=(cmake extra-cmake-modules clang qt5 kdoctools) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kcontacts/PKGBUILD b/x86_64/kde/kcontacts/PKGBUILD new file mode 100644 index 0000000..cafcd9f --- /dev/null +++ b/x86_64/kde/kcontacts/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kcontacts +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kcoreaddons kconfig ki18n kcodecs iso-codes) +makedepends=(cmake extra-cmake-modules qt5) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kcoreaddons/PKGBUILD b/x86_64/kde/kcoreaddons/PKGBUILD new file mode 100644 index 0000000..bd1491b --- /dev/null +++ b/x86_64/kde/kcoreaddons/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kcoreaddons +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(clang cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kcrash/PKGBUILD b/x86_64/kde/kcrash/PKGBUILD new file mode 100644 index 0000000..dbac647 --- /dev/null +++ b/x86_64/kde/kcrash/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kcrash +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kcoreaddons kwindowsystem) +makedepends=(cmake extra-cmake-modules qt5) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kdav/PKGBUILD b/x86_64/kde/kdav/PKGBUILD new file mode 100644 index 0000000..1a04b04 --- /dev/null +++ b/x86_64/kde/kdav/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kdav +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kio qt5) +makedepends=(cmake qt5 extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kdbusaddons/PKGBUILD b/x86_64/kde/kdbusaddons/PKGBUILD new file mode 100644 index 0000000..441ba38 --- /dev/null +++ b/x86_64/kde/kdbusaddons/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kdbusaddons +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(cmake clang qt5 extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kde-cli-tools/PKGBUILD b/x86_64/kde/kde-cli-tools/PKGBUILD new file mode 100644 index 0000000..439dfb8 --- /dev/null +++ b/x86_64/kde/kde-cli-tools/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kde-cli-tools +pkgver=5.24.5 +pkgrel=1 +arch=('x86_64') +depends=(kcmutils kactivities kdesu) +makedepends=(cmake qt5 extra-cmake-modules) +durl=https://download.kde.org/stable/plasma +source=($durl/$pkgver/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kdeclarative/PKGBUILD b/x86_64/kde/kdeclarative/PKGBUILD new file mode 100644 index 0000000..8f65386 --- /dev/null +++ b/x86_64/kde/kdeclarative/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kdeclarative +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kdecoration/PKGBUILD b/x86_64/kde/kdecoration/PKGBUILD new file mode 100644 index 0000000..821d4a8 --- /dev/null +++ b/x86_64/kde/kdecoration/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=kdecoration +pkgver=5.24.5 +pkgrel=1 +arch=(x86_64) +depends=(ki18n) +makedepends=(extra-cmake-modules) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kded/PKGBUILD b/x86_64/kde/kded/PKGBUILD new file mode 100644 index 0000000..67833f3 --- /dev/null +++ b/x86_64/kde/kded/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kded +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kservice kcrash) +makedepends=(cmake kdoctools extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kdelibs4support/PKGBUILD b/x86_64/kde/kdelibs4support/PKGBUILD new file mode 100644 index 0000000..5ca2df2 --- /dev/null +++ b/x86_64/kde/kdelibs4support/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=kdelibs4support +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kunitconversion kitemmodels kemoticons kparts perl) +makedepends=(cmake extra-cmake-modules docbook-xml docbook-xsl + perl-modules networkmanager kdesignerplugin kdoctools) +durl=https://download.kde.org/stable/frameworks/5.94/portingAids +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kdeplasma-addons/PKGBUILD b/x86_64/kde/kdeplasma-addons/PKGBUILD new file mode 100644 index 0000000..4001248 --- /dev/null +++ b/x86_64/kde/kdeplasma-addons/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=kdeplasma-addons +pkgver=5.24.5 +pkgrel=1 +arch=('x86_64') +depends=(plasma-workspace kunitconversion) +makedepends=(extra-cmake-modules qt5-webengine) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kdesu/PKGBUILD b/x86_64/kde/kdesu/PKGBUILD new file mode 100644 index 0000000..fb4ca82 --- /dev/null +++ b/x86_64/kde/kdesu/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kdesu +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kservice kpty) +makedepends=(cmake qt5 extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kdevelop-pg-qt/PKGBUILD b/x86_64/kde/kdevelop-pg-qt/PKGBUILD new file mode 100644 index 0000000..1e55e03 --- /dev/null +++ b/x86_64/kde/kdevelop-pg-qt/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=kdevelop-pg-qt +pkgver=2.2.1 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(cmake extra-cmake-modules) +source=(https://download.kde.org/stable/$pkgname/$pkgver/src/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kdevelop/PKGBUILD b/x86_64/kde/kdevelop/PKGBUILD new file mode 100644 index 0000000..4bbf38e --- /dev/null +++ b/x86_64/kde/kdevelop/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kdevelop +pkgver=22.04.0 +pkgrel=1 +arch=('x86_64') +depends=(clang libksysguard kitemmodels knotifyconfig ktexteditor kcmutils threadweaver grantlee) +makedepends=(extra-cmake-modules kdoctools kdevelop-pg-qt llvm qt5 plasma-framework krunner boost purpose) +source=(https://download.kde.org/stable/release-service/$pkgver/src/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_TESTING=OFF \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kdewebkit/PKGBUILD b/x86_64/kde/kdewebkit/PKGBUILD new file mode 100644 index 0000000..a6b3802 --- /dev/null +++ b/x86_64/kde/kdewebkit/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kdewebkit +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kparts qt5-webkit) +makedepends=(cmake extra-cmake-modules docbook-xml docbook-xsl) +durl=https://download.kde.org/stable/frameworks/5.94/portingAids +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kdnssd/PKGBUILD b/x86_64/kde/kdnssd/PKGBUILD new file mode 100644 index 0000000..a75d7d3 --- /dev/null +++ b/x86_64/kde/kdnssd/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kdnssd +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kdoctools/PKGBUILD b/x86_64/kde/kdoctools/PKGBUILD new file mode 100644 index 0000000..6aa7b1c --- /dev/null +++ b/x86_64/kde/kdoctools/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kdoctools +pkgver=5.94.0 +pkgrel=2 +arch=('x86_64') +depends=(karchive docbook-xsl double-conversion) +makedepends=(cmake perl-modules ki18n qt5 extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/keditbookmarks/PKGBUILD b/x86_64/kde/keditbookmarks/PKGBUILD new file mode 100644 index 0000000..5c4c722 --- /dev/null +++ b/x86_64/kde/keditbookmarks/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=keditbookmarks +pkgver=22.04.2 +pkgrel=1 +arch=('x86_64') +depends=(kparts) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/release-service/$pkgver/src +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kemoticons/PKGBUILD b/x86_64/kde/kemoticons/PKGBUILD new file mode 100644 index 0000000..417b862 --- /dev/null +++ b/x86_64/kde/kemoticons/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kemoticons +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(karchive kservice qt5) +makedepends=(cmake qt5 extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kfilemetadata/PKGBUILD b/x86_64/kde/kfilemetadata/PKGBUILD new file mode 100644 index 0000000..91301bc --- /dev/null +++ b/x86_64/kde/kfilemetadata/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kfilemetadata +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(ki18n karchive kconfig kcoreaddons ffmpeg) +makedepends=(cmake extra-cmake-modules qt5) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kglobalaccel/PKGBUILD b/x86_64/kde/kglobalaccel/PKGBUILD new file mode 100644 index 0000000..974c1bc --- /dev/null +++ b/x86_64/kde/kglobalaccel/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kglobalaccel +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kdbusaddons kconfig kcrash) +makedepends=(cmake qt5 extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kguiaddons/PKGBUILD b/x86_64/kde/kguiaddons/PKGBUILD new file mode 100644 index 0000000..e677fca --- /dev/null +++ b/x86_64/kde/kguiaddons/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kguiaddons +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(clang cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kholidays/PKGBUILD b/x86_64/kde/kholidays/PKGBUILD new file mode 100644 index 0000000..cabe364 --- /dev/null +++ b/x86_64/kde/kholidays/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kholidays +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/khotkeys/PKGBUILD b/x86_64/kde/khotkeys/PKGBUILD new file mode 100644 index 0000000..55febf8 --- /dev/null +++ b/x86_64/kde/khotkeys/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=khotkeys +pkgver=5.24.5 +pkgrel=1 +arch=(x86_64) +depends=(plasma-workspace kdelibs4support) +makedepends=(extra-cmake-modules kdoctools kdesignerplugin kinit) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/khtml/PKGBUILD b/x86_64/kde/khtml/PKGBUILD new file mode 100644 index 0000000..c468d03 --- /dev/null +++ b/x86_64/kde/khtml/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=khtml +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(giflib kparts kjs phonon) +makedepends=(cmake extra-cmake-modules gperf docbook-xml docbook-xsl) +durl=https://download.kde.org/stable/frameworks/5.94/portingAids +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/ki18n/PKGBUILD b/x86_64/kde/ki18n/PKGBUILD new file mode 100644 index 0000000..68bd864 --- /dev/null +++ b/x86_64/kde/ki18n/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=ki18n +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5 iso-codes) +makedepends=(cmake extra-cmake-modules clang qt5) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kiconthemes/PKGBUILD b/x86_64/kde/kiconthemes/PKGBUILD new file mode 100644 index 0000000..453f32a --- /dev/null +++ b/x86_64/kde/kiconthemes/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kiconthemes +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kconfigwidgets kitemviews karchive) +makedepends=(cmake extra-cmake-modules qt5) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kidletime/PKGBUILD b/x86_64/kde/kidletime/PKGBUILD new file mode 100644 index 0000000..a8050b9 --- /dev/null +++ b/x86_64/kde/kidletime/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kidletime +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(libxss qt5) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kimageformats/PKGBUILD b/x86_64/kde/kimageformats/PKGBUILD new file mode 100644 index 0000000..b248ce7 --- /dev/null +++ b/x86_64/kde/kimageformats/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kimageformats +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5 karchive) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kinfocenter/PKGBUILD b/x86_64/kde/kinfocenter/PKGBUILD new file mode 100644 index 0000000..782a016 --- /dev/null +++ b/x86_64/kde/kinfocenter/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=kinfocenter +pkgver=5.24.5 +pkgrel=1 +arch=(x86_64) +depends=(systemsettings glu vulkan-tools wayland xorg-xdpyinfo mesa) +makedepends=(extra-cmake-modules plasma-framework kdoctools) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_TESTING=OFF + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kinit/PKGBUILD b/x86_64/kde/kinit/PKGBUILD new file mode 100644 index 0000000..25c4902 --- /dev/null +++ b/x86_64/kde/kinit/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kinit +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kio) +makedepends=(kdoctools cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kio-extras/PKGBUILD b/x86_64/kde/kio-extras/PKGBUILD new file mode 100644 index 0000000..a797fd5 --- /dev/null +++ b/x86_64/kde/kio-extras/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=kio-extras +pkgver=22.04.0 +pkgrel=3 +arch=('x86_64') +depends=(kio libmtp phonon syntax-highlighting libxcursor samba + kdsoap-ws-discovery-client) +makedepends=(extra-cmake-modules kdoctools gperf kactivities-stats) +source=(https://download.kde.org/stable/release-service/$pkgver/src/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -D LIBAPPIMAGE_LIBRARIES=libappimage.so \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kio/PKGBUILD b/x86_64/kde/kio/PKGBUILD new file mode 100644 index 0000000..e687d4c --- /dev/null +++ b/x86_64/kde/kio/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kio +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kjobwidgets kbookmarks libxslt kwallet ktextwidgets kded solid) +makedepends=(cmake extra-cmake-modules kdoctools qt5) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kirigami2/PKGBUILD b/x86_64/kde/kirigami2/PKGBUILD new file mode 100644 index 0000000..0e26a44 --- /dev/null +++ b/x86_64/kde/kirigami2/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=kirigami2 +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(kpackage cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_QCH=ON \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kitemmodels/PKGBUILD b/x86_64/kde/kitemmodels/PKGBUILD new file mode 100644 index 0000000..9e39c7e --- /dev/null +++ b/x86_64/kde/kitemmodels/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kitemmodels +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(clang cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kitemviews/PKGBUILD b/x86_64/kde/kitemviews/PKGBUILD new file mode 100644 index 0000000..d1ca9a0 --- /dev/null +++ b/x86_64/kde/kitemviews/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kitemviews +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(clang cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kjobwidgets/PKGBUILD b/x86_64/kde/kjobwidgets/PKGBUILD new file mode 100644 index 0000000..983fd5a --- /dev/null +++ b/x86_64/kde/kjobwidgets/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kjobwidgets +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kcoreaddons kwidgetsaddons) +makedepends=(cmake extra-cmake-modules clang qt5) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kjs/PKGBUILD b/x86_64/kde/kjs/PKGBUILD new file mode 100644 index 0000000..f703b02 --- /dev/null +++ b/x86_64/kde/kjs/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kjs +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(kdoctools cmake extra-cmake-modules docbook-xml docbook-xsl) +durl=https://download.kde.org/stable/frameworks/5.94/portingAids +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kjsembed/PKGBUILD b/x86_64/kde/kjsembed/PKGBUILD new file mode 100644 index 0000000..ebd0588 --- /dev/null +++ b/x86_64/kde/kjsembed/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kjsembed +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5 ki18n kjs) +makedepends=(cmake kdoctools extra-cmake-modules docbook-xml docbook-xsl) +durl=https://download.kde.org/stable/frameworks/5.94/portingAids +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kmenuedit/PKGBUILD b/x86_64/kde/kmenuedit/PKGBUILD new file mode 100644 index 0000000..c5d834c --- /dev/null +++ b/x86_64/kde/kmenuedit/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kmenuedit +pkgver=5.24.5 +pkgrel=1 +arch=('x86_64') +depends=(kio hicolor-icon-theme) +makedepends=(cmake extra-cmake-modules kdoctools) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make + +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kmix/PKGBUILD b/x86_64/kde/kmix/PKGBUILD new file mode 100644 index 0000000..a0780a2 --- /dev/null +++ b/x86_64/kde/kmix/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=kmix +pkgver=22.04.0 +pkgrel=1 +arch=(x86_64) +depends=(knotifications kxmlgui solid kcompletion hicolor-icon-theme pulseaudio) +makedepends=(extra-cmake-modules kdoctools) +source=(https://download.kde.org/stable/release-service/$pkgver/src/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/knewstuff/PKGBUILD b/x86_64/kde/knewstuff/PKGBUILD new file mode 100644 index 0000000..cf811ee --- /dev/null +++ b/x86_64/kde/knewstuff/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=knewstuff +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kio kpackage attica syndication appstream) +makedepends=(cmake extra-cmake-modules qt5) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_QCH=ON \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/knotifications/PKGBUILD b/x86_64/kde/knotifications/PKGBUILD new file mode 100644 index 0000000..f1cb3da --- /dev/null +++ b/x86_64/kde/knotifications/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=knotifications +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(libcanberra libdbusmenu-qt kwindowsystem kconfig kcoreaddons qt5 libxtst) +makedepends=(cmake extra-cmake-modules qt5) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/knotifyconfig/PKGBUILD b/x86_64/kde/knotifyconfig/PKGBUILD new file mode 100644 index 0000000..e1e8458 --- /dev/null +++ b/x86_64/kde/knotifyconfig/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=knotifyconfig +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kio) +makedepends=(qt5 cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/konqueror/PKGBUILD b/x86_64/kde/konqueror/PKGBUILD new file mode 100644 index 0000000..333a5e8 --- /dev/null +++ b/x86_64/kde/konqueror/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=konqueror +pkgver=22.04.2 +pkgrel=1 +arch=('x86_64') +depends=(dolphin keditbookmarks qt5-webengine kinit) +makedepends=(cmake extra-cmake-modules kdoctools kdesu) +durl=https://download.kde.org/stable/release-service/$pkgver/src +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/konsole/PKGBUILD b/x86_64/kde/konsole/PKGBUILD new file mode 100644 index 0000000..b65c348 --- /dev/null +++ b/x86_64/kde/konsole/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=konsole +pkgver=22.04.1 +pkgrel=1 +arch=(x86_64) +depends=(knotifyconfig kpty kparts knewstuff) +makedepends=(extra-cmake-modules kdoctools) +source=(https://download.kde.org/stable/release-service/$pkgver/src/$pkgname-$pkgver.tar.xz) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kpackage/PKGBUILD b/x86_64/kde/kpackage/PKGBUILD new file mode 100644 index 0000000..9f6d962 --- /dev/null +++ b/x86_64/kde/kpackage/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kpackage +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(karchive ki18n kcoreaddons) +makedepends=(cmake extra-cmake-modules qt5) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kparts/PKGBUILD b/x86_64/kde/kparts/PKGBUILD new file mode 100644 index 0000000..7cc223b --- /dev/null +++ b/x86_64/kde/kparts/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kparts +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kio) +makedepends=(qt5 cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kpeople/PKGBUILD b/x86_64/kde/kpeople/PKGBUILD new file mode 100644 index 0000000..06f7ed3 --- /dev/null +++ b/x86_64/kde/kpeople/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kpeople +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kcoreaddons ki18n kwidgetsaddons kitemviews) +makedepends=(cmake extra-cmake-modules qt5) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kplotting/PKGBUILD b/x86_64/kde/kplotting/PKGBUILD new file mode 100644 index 0000000..96a5f8f --- /dev/null +++ b/x86_64/kde/kplotting/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kplotting +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kpty/PKGBUILD b/x86_64/kde/kpty/PKGBUILD new file mode 100644 index 0000000..c64c3d4 --- /dev/null +++ b/x86_64/kde/kpty/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kpty +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kcoreaddons ki18n) +makedepends=(cmake extra-cmake-modules qt5) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kquickcharts/PKGBUILD b/x86_64/kde/kquickcharts/PKGBUILD new file mode 100644 index 0000000..d56a715 --- /dev/null +++ b/x86_64/kde/kquickcharts/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=kquickcharts +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kross/PKGBUILD b/x86_64/kde/kross/PKGBUILD new file mode 100644 index 0000000..bd5d051 --- /dev/null +++ b/x86_64/kde/kross/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kross +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kparts) +makedepends=(qt5 kdoctools cmake extra-cmake-modules docbook-xml docbook-xsl) +durl=https://download.kde.org/stable/frameworks/5.94/portingAids +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/krunner/PKGBUILD b/x86_64/kde/krunner/PKGBUILD new file mode 100644 index 0000000..5d7c99f --- /dev/null +++ b/x86_64/kde/krunner/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=krunner +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(threadweaver) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kscreen/PKGBUILD b/x86_64/kde/kscreen/PKGBUILD new file mode 100644 index 0000000..3dfdf3a --- /dev/null +++ b/x86_64/kde/kscreen/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=kscreen +pkgver=5.24.5 +pkgrel=2 +arch=(x86_64) +depends=(libkscreen plasma-framework qt5 kdbusaddons kdeclarative kglobalaccel + ki18n kiconthemes kcmutils kxmlgui plasma-framework kservice kpackage double-conversion) +makedepends=(extra-cmake-modules kcmutils) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Another weird hack + ln -sf kcms/kcm_kscreen.so $pkgdir/usr/lib/qt/plugins/kcm_kscreen.so + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kscreenlocker/PKGBUILD b/x86_64/kde/kscreenlocker/PKGBUILD new file mode 100644 index 0000000..4997ccc --- /dev/null +++ b/x86_64/kde/kscreenlocker/PKGBUILD @@ -0,0 +1,29 @@ +pkgname=kscreenlocker +pkgver=5.24.5 +pkgrel=1 +arch=(x86_64) +depends=(kidletime kwayland kdeclarative perl layer-shell-qt) +makedepends=(extra-cmake-modules kdoctools kcmutils libxcursor) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz + kde.pam) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -D CMAKE_INSTALL_LIBEXECDIR=/usr/lib \ + -D PAM_REQUIRED=ON \ + -D BUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + mkdir -p $pkgdir/etc/pam.d/ + cp -f kde.pam $pkgdir/etc/pam.d/kde + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kscreenlocker/kde.pam b/x86_64/kde/kscreenlocker/kde.pam new file mode 100644 index 0000000..8af1b73 --- /dev/null +++ b/x86_64/kde/kscreenlocker/kde.pam @@ -0,0 +1,7 @@ +#%PAM-1.0 + +auth sufficient pam_systemd.so +auth include system-login +account include system-login +password include system-login +session include system-login diff --git a/x86_64/kde/kservice/PKGBUILD b/x86_64/kde/kservice/PKGBUILD new file mode 100644 index 0000000..037508b --- /dev/null +++ b/x86_64/kde/kservice/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kservice +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(ki18n kconfig kdbusaddons kconfig kcoreaddons) +makedepends=(cmake extra-cmake-modules qt5) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/ksysguard/PKGBUILD b/x86_64/kde/ksysguard/PKGBUILD new file mode 100644 index 0000000..41043a5 --- /dev/null +++ b/x86_64/kde/ksysguard/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=ksysguard +pkgver=5.22.0 +pkgrel=1 +arch=(x86_64) +depends=(ksystemstats) +makedepends=(extra-cmake-modules kdoctools) +source=(https://download.kde.org/stable/$pkgname/$pkgver/$pkgname-$pkgver.tar.xz) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/ksystemstats/PKGBUILD b/x86_64/kde/ksystemstats/PKGBUILD new file mode 100644 index 0000000..5649b8d --- /dev/null +++ b/x86_64/kde/ksystemstats/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=ksystemstats +pkgver=5.24.5 +pkgrel=1 +arch=(x86_64) +depends=(libksysguard networkmanager-qt) +makedepends=(extra-cmake-modules networkmanager-qt) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/ktexteditor/PKGBUILD b/x86_64/kde/ktexteditor/PKGBUILD new file mode 100644 index 0000000..56fa089 --- /dev/null +++ b/x86_64/kde/ktexteditor/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=ktexteditor +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kparts) +makedepends=(qt5 cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/ktextwidgets/PKGBUILD b/x86_64/kde/ktextwidgets/PKGBUILD new file mode 100644 index 0000000..1ccea08 --- /dev/null +++ b/x86_64/kde/ktextwidgets/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=ktextwidgets +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kcompletion kconfigwidgets sonnet) +makedepends=(cmake extra-cmake-modules qt5) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kunitconversion/PKGBUILD b/x86_64/kde/kunitconversion/PKGBUILD new file mode 100644 index 0000000..e970053 --- /dev/null +++ b/x86_64/kde/kunitconversion/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kunitconversion +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(ki18n) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kwallet/PKGBUILD b/x86_64/kde/kwallet/PKGBUILD new file mode 100644 index 0000000..2647527 --- /dev/null +++ b/x86_64/kde/kwallet/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kwallet +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(knotifications kiconthemes kservice gpgme libassuan) +makedepends=(cmake extra-cmake-modules boost kdoctools) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kwayland-integration/PKGBUILD b/x86_64/kde/kwayland-integration/PKGBUILD new file mode 100644 index 0000000..402bab1 --- /dev/null +++ b/x86_64/kde/kwayland-integration/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kwayland-integration +pkgver=5.24.5 +pkgrel=1 +arch=('x86_64') +depends=(kwindowsystem kidletime kwayland kguiaddons) +makedepends=(cmake extra-cmake-modules wayland-protocols) +durl=https://download.kde.org/stable/plasma/$pkgver +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kwayland-server/PKGBUILD b/x86_64/kde/kwayland-server/PKGBUILD new file mode 100644 index 0000000..981ff7a --- /dev/null +++ b/x86_64/kde/kwayland-server/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=kwayland-server +pkgver=5.24.5 +pkgrel=2 +arch=(x86_64) +depends=(qt5 qt6) +makedepends=(extra-cmake-modules plasma-wayland-protocols wayland-protocols kwayland doxygen qt5) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -D BUILD_TESTING=OFF \ + -D BUILD_QCH=ON \ + -D QT_MAJOR_VERSION=6 \ + -D BUILD_WITH_QT6=ON + + cmake --build build -j4 +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kwayland/PKGBUILD b/x86_64/kde/kwayland/PKGBUILD new file mode 100644 index 0000000..7808bfc --- /dev/null +++ b/x86_64/kde/kwayland/PKGBUILD @@ -0,0 +1,39 @@ +pkgname=kwayland +pkgver=5.94.0 +pkgrel=2 +arch=('x86_64') +depends=(qt5 qt6) +makedepends=(wayland-protocols plasma-wayland-protocols cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver + + cmake -B build\ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_WITH_QT6=ON \ + -D EXCLUDE_DEPRECATED_BEFORE_AND_AT=5.94.0 \ + -D QT_MAJOR_VERSION=6 \ + -Wno-dev .. + + make -j7 -C build +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir -C build install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kwidgetsaddons/PKGBUILD b/x86_64/kde/kwidgetsaddons/PKGBUILD new file mode 100644 index 0000000..1977bce --- /dev/null +++ b/x86_64/kde/kwidgetsaddons/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kwidgetsaddons +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(clang cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kwin/PKGBUILD b/x86_64/kde/kwin/PKGBUILD new file mode 100644 index 0000000..70a265b --- /dev/null +++ b/x86_64/kde/kwin/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=kwin +pkgver=5.24.5 +pkgrel=1 +arch=(x86_64) +depends=(xcb-util-cursor plasma-framework kcmutils kwayland-server + lcms kdecoration kscreenlocker) +makedepends=(extra-cmake-modules qt5 kdoctools krunner) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) +install=$pkgname.install + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DCMAKE_INSTALL_LIBEXECDIR=lib \ + -DBUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kwin/kwin.install b/x86_64/kde/kwin/kwin.install new file mode 100644 index 0000000..e8d07c1 --- /dev/null +++ b/x86_64/kde/kwin/kwin.install @@ -0,0 +1,9 @@ + +post_install() { + # this is executed by make install, but doesn't work since setcap can only be run as root + setcap CAP_SYS_NICE=+ep /usr/bin/kwin_wayland +} + +post_upgrade() { + post_install +} diff --git a/x86_64/kde/kwindowsystem/PKGBUILD b/x86_64/kde/kwindowsystem/PKGBUILD new file mode 100644 index 0000000..280c5b5 --- /dev/null +++ b/x86_64/kde/kwindowsystem/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kwindowsystem +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kxmlgui/PKGBUILD b/x86_64/kde/kxmlgui/PKGBUILD new file mode 100644 index 0000000..f7e63cb --- /dev/null +++ b/x86_64/kde/kxmlgui/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kxmlgui +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kglobalaccel kiconthemes) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/kxmlrpcclient/PKGBUILD b/x86_64/kde/kxmlrpcclient/PKGBUILD new file mode 100644 index 0000000..945d746 --- /dev/null +++ b/x86_64/kde/kxmlrpcclient/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=kxmlrpcclient +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kio) +makedepends=(qt5 cmake extra-cmake-modules docbook-xml docbook-xsl) +durl=https://download.kde.org/stable/frameworks/5.94/portingAids +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/layer-shell-qt/PKGBUILD b/x86_64/kde/layer-shell-qt/PKGBUILD new file mode 100644 index 0000000..f6df603 --- /dev/null +++ b/x86_64/kde/layer-shell-qt/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=layer-shell-qt +pkgver=5.24.5 +pkgrel=1 +arch=(x86_64) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) +depends=(qt5) +makedepends=(extra-cmake-modules wayland-protocols) + +build() { + cmake -B build -S $pkgname-$pkgver + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/libkdcraw/PKGBUILD b/x86_64/kde/libkdcraw/PKGBUILD new file mode 100644 index 0000000..738ae3a --- /dev/null +++ b/x86_64/kde/libkdcraw/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=libkdcraw +pkgver=22.04.3 +pkgrel=1 +arch=('x86_64') +depends=(qt5 libraw double-conversion) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/release-service/$pkgver/src +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/libkexiv2/PKGBUILD b/x86_64/kde/libkexiv2/PKGBUILD new file mode 100644 index 0000000..532b9aa --- /dev/null +++ b/x86_64/kde/libkexiv2/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=libkexiv2 +pkgver=22.08.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5 exiv2) +makedepends=(cmake extra-cmake-modules double-conversion) +durl=https://download.kde.org/stable/release-service/$pkgver/src +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/libkipi/PKGBUILD b/x86_64/kde/libkipi/PKGBUILD new file mode 100644 index 0000000..7574685 --- /dev/null +++ b/x86_64/kde/libkipi/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=libkipi +pkgver=22.04.1 +pkgrel=1 +arch=(x86_64) +depends=(kxmlgui kservice hicolor-icon-theme) +makedepends=(extra-cmake-modules) +source=(https://download.kde.org/stable/release-service/$pkgver/src/$pkgname-$pkgver.tar.xz) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/libkomparediff2/PKGBUILD b/x86_64/kde/libkomparediff2/PKGBUILD new file mode 100644 index 0000000..e3ff9f0 --- /dev/null +++ b/x86_64/kde/libkomparediff2/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=libkomparediff2 +pkgver=22.04.0 +pkgrel=1 +arch=('x86_64') +depends=(kio) +makedepends=(cmake extra-cmake-modules) +source=(https://download.kde.org/stable/release-service/$pkgver/src/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/libksane/PKGBUILD b/x86_64/kde/libksane/PKGBUILD new file mode 100644 index 0000000..d627eb9 --- /dev/null +++ b/x86_64/kde/libksane/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=libksane +pkgver=22.04.0 +pkgrel=1 +arch=('x86_64') +depends=(ktextwidgets kwallet sane) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/release-service/$pkgver/src +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_TESTING=OFF \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/libkscreen/PKGBUILD b/x86_64/kde/libkscreen/PKGBUILD new file mode 100644 index 0000000..33eeb3f --- /dev/null +++ b/x86_64/kde/libkscreen/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=libkscreen +pkgver=5.24.5 +pkgrel=1 +arch=(x86_64) +depends=(qt5 libxrandr kwayland) +makedepends=(extra-cmake-modules doxygen qt5 plasma-wayland-protocols) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DCMAKE_INSTALL_LIBEXECDIR=lib \ + -DBUILD_TESTING=OFF \ + -DBUILD_QCH=ON + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/libksysguard/PKGBUILD b/x86_64/kde/libksysguard/PKGBUILD new file mode 100644 index 0000000..5e5d375 --- /dev/null +++ b/x86_64/kde/libksysguard/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=libksysguard +pkgver=5.24.5 +pkgrel=1 +arch=(x86_64) +depends=(libxres qt5-webengine kdeclarative knewstuff) +makedepends=(extra-cmake-modules kdoctools qt5) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) +install=libksysguard.install + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DCMAKE_INSTALL_LIBEXECDIR=lib + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/libksysguard/libksysguard.install b/x86_64/kde/libksysguard/libksysguard.install new file mode 100644 index 0000000..bbc150a --- /dev/null +++ b/x86_64/kde/libksysguard/libksysguard.install @@ -0,0 +1,8 @@ +post_install() { + # this is executed by make install, but doesn't work since setcap can only be run as root + setcap CAP_NET_RAW=+ep /usr/lib/ksysguard/ksgrd_network_helper +} + +post_upgrade() { + post_install +} diff --git a/x86_64/kde/modemmanager-qt/PKGBUILD b/x86_64/kde/modemmanager-qt/PKGBUILD new file mode 100644 index 0000000..291e03b --- /dev/null +++ b/x86_64/kde/modemmanager-qt/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=modemmanager-qt +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(modemmanager qt5) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/networkmanager-qt/PKGBUILD b/x86_64/kde/networkmanager-qt/PKGBUILD new file mode 100644 index 0000000..2fd0032 --- /dev/null +++ b/x86_64/kde/networkmanager-qt/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=networkmanager-qt +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(networkmanager qt5) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/okular/PKGBUILD b/x86_64/kde/okular/PKGBUILD new file mode 100644 index 0000000..6c07989 --- /dev/null +++ b/x86_64/kde/okular/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=okular +pkgver=22.08.0 +pkgrel=1 +arch=('x86_64') +depends=(djvulibre libspectre libkexiv2 zip poppler kpty kactivities threadweaver kjs kparts purpose discount phonon djvulibre libkexiv2 libspectre) +makedepends=(cmake extra-cmake-modules kdoctools khtml) +durl=https://download.kde.org/stable/release-service +source=($durl/$pkgver/src/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -D FORCE_NOT_REQUIRED_DEPENDENCIES="QMobipocket;Poppler;CHM;LibZip;EPub;" \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/oxygen-icons5/PKGBUILD b/x86_64/kde/oxygen-icons5/PKGBUILD new file mode 100644 index 0000000..347e1a3 --- /dev/null +++ b/x86_64/kde/oxygen-icons5/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=oxygen-icons5 +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +makedepends=(qt5 cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/oxygen-sounds/PKGBUILD b/x86_64/kde/oxygen-sounds/PKGBUILD new file mode 100644 index 0000000..473aecc --- /dev/null +++ b/x86_64/kde/oxygen-sounds/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=oxygen-sounds +pkgver=5.25.4 +pkgrel=1 +arch=('x86_64') +depends=() +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/plasma/$pkgver +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/phonon-backend-gstreamer/PKGBUILD b/x86_64/kde/phonon-backend-gstreamer/PKGBUILD new file mode 100644 index 0000000..c1d8389 --- /dev/null +++ b/x86_64/kde/phonon-backend-gstreamer/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=phonon-backend-gstreamer +pkgver=4.10.0 +pkgrel=1 +arch=('x86_64') +depends=(gstreamer libxml2 phonon + gst-plugins-base gst-plugins-good) +makedepends=(gcc) +source=(https://download.kde.org/stable/phonon/phonon-backend-gstreamer/$pkgver/phonon-backend-gstreamer-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + .. + + make +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/kde/phonon/PKGBUILD b/x86_64/kde/phonon/PKGBUILD new file mode 100644 index 0000000..1df370a --- /dev/null +++ b/x86_64/kde/phonon/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=phonon +pkgver=4.11.1 +pkgrel=2 +arch=('x86_64') +depends=(glib2 qt5 pulseaudio phonon-backend-gstreamer) +makedepends=(cmake extra-cmake-modules) +source=(https://download.kde.org/stable/phonon/$pkgver/phonon-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + .. + + make +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/plasma-browser-integration/PKGBUILD b/x86_64/kde/plasma-browser-integration/PKGBUILD new file mode 100644 index 0000000..fffdda9 --- /dev/null +++ b/x86_64/kde/plasma-browser-integration/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=plasma-browser-integration +pkgver=5.24.5 +pkgrel=1 +arch=('x86_64') +depends=(purpose kfilemetadata plasma-workspace) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/plasma/$pkgver +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/plasma-desktop/PKGBUILD b/x86_64/kde/plasma-desktop/PKGBUILD new file mode 100644 index 0000000..5a58674 --- /dev/null +++ b/x86_64/kde/plasma-desktop/PKGBUILD @@ -0,0 +1,44 @@ +pkgname=plasma-desktop +pkgver=5.24.5 +pkgrel=1 +arch=('x86_64') +depends=(gawk kdelibs4support polkit-kde-agent kmenuedit systemsettings baloo accountsservice xdg-user-dirs ibus libevdev) +makedepends=(extra-cmake-modules kdoctools xf86-input-evdev xf86-input-synaptics xf86-input-libinput + scim kdesignerplugin intltool qt5 kinit) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz + https://invent.kde.org/plasma/plasma-workspace/-/commit/efddc639.patch + dumb_fix_for_configure.patch) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build + + cd kcms/tablet + + # Dumb fix to fix cmake configure + #patch -i $srcdir/dumb_fix_for_configure.patch +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 + +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/plasma-desktop/dumb_fix_for_configure.patch b/x86_64/kde/plasma-desktop/dumb_fix_for_configure.patch new file mode 100644 index 0000000..396fc7f --- /dev/null +++ b/x86_64/kde/plasma-desktop/dumb_fix_for_configure.patch @@ -0,0 +1,11 @@ +--- CMakeLists.txt 2022-05-01 20:12:26.805929958 +0300 ++++ CMakeLists.txt 2022-05-01 20:12:48.217641313 +0300 +@@ -19,7 +19,7 @@ + EXPORT kcm_tablet + DESTINATION "${KDE_INSTALL_LOGGINGCATEGORIESDIR}" + ) +-qt_add_dbus_interface(common_SRCS "${KWIN_INPUTDEVICE_INTERFACE}" InputDevice_interface) ++#qt_add_dbus_interface(common_SRCS "${KWIN_INPUTDEVICE_INTERFACE}" InputDevice_interface) + + kcoreaddons_add_plugin(kcm_tablet INSTALL_NAMESPACE "plasma/kcms/systemsettings") + target_sources(kcm_tablet PRIVATE diff --git a/x86_64/kde/plasma-desktop/efddc639.patch b/x86_64/kde/plasma-desktop/efddc639.patch new file mode 100644 index 0000000..02b93d1 --- /dev/null +++ b/x86_64/kde/plasma-desktop/efddc639.patch @@ -0,0 +1,74 @@ +From efddc639b7f1443e643787e841893a5700f07742 Mon Sep 17 00:00:00 2001 +From: Jan Blackquill +Date: Thu, 3 Feb 2022 14:59:38 -0500 +Subject: [PATCH] kcms/users: set interactive auth flag + +The accounts service requires this now. + +BUG: 449385 +--- + kcms/users/src/user.cpp | 25 ++++++++++++++++++------- + 1 file changed, 18 insertions(+), 7 deletions(-) + +diff --git a/kcms/users/src/user.cpp b/kcms/users/src/user.cpp +index a096fdc7a..11d284053 100644 +--- a/kcms/users/src/user.cpp ++++ b/kcms/users/src/user.cpp +@@ -275,6 +275,15 @@ UserApplyJob::UserApplyJob(QPointer dbusIfa + { + } + ++// Work around QTBUG-100458 ++inline auto asyncCall(OrgFreedesktopAccountsUserInterface* ptr, const QString& method, const QVariantList& arguments) ++{ ++ auto mc = QDBusMessage::createMethodCall(ptr->service(), ptr->path(), ptr->interface(), method); ++ mc.setArguments(arguments); ++ mc.setInteractiveAuthorizationAllowed(true); ++ return QDBusConnection::systemBus().asyncCall(mc); ++} ++ + void UserApplyJob::start() + { + // With our UI the user expects the as a single transaction, but the accountsservice API does not provide that +@@ -283,7 +292,8 @@ void UserApplyJob::start() + // Therefore make a blocking call to SetAccountType first to trigger the auth dialog. If the user declines don't attempt to write anything else + // This avoids settings any data when the user thinks they aborted the transaction, see https://bugs.kde.org/show_bug.cgi?id=425036 + // Subsequent calls do not trigger the auth dialog again +- auto setAccount = m_dbusIface->SetAccountType(m_type); ++ ++ auto setAccount = asyncCall(m_dbusIface, "SetAccountType", {m_type}); + setAccount.waitForFinished(); + if (setAccount.isError()) { + setError(setAccount.error()); +@@ -292,13 +302,14 @@ void UserApplyJob::start() + return; + } + +- const std::multimap (OrgFreedesktopAccountsUserInterface::*)(const QString &)> set = { +- {m_name, &OrgFreedesktopAccountsUserInterface::SetUserName}, +- {m_email, &OrgFreedesktopAccountsUserInterface::SetEmail}, +- {m_realname, &OrgFreedesktopAccountsUserInterface::SetRealName}, ++ ++ const std::multimap set = { ++ {m_name, "SetUserName"}, ++ {m_email, "SetEmail"}, ++ {m_realname, "SetRealName"}, + }; + for (auto const &x : set) { +- auto resp = (m_dbusIface->*(x.second))(x.first); ++ auto resp = asyncCall(m_dbusIface, x.second, {x.first}); + resp.waitForFinished(); + if (resp.isError()) { + setError(resp.error()); +@@ -333,7 +344,7 @@ void UserApplyJob::start() + + file.close(); + +- auto resp = m_dbusIface->SetIconFile(file.fileName()); ++ auto resp = asyncCall(m_dbusIface, "SetIconFile", {file.fileName()}); + + resp.waitForFinished(); + if (resp.isError()) { +-- +GitLab + diff --git a/x86_64/kde/plasma-framework/PKGBUILD b/x86_64/kde/plasma-framework/PKGBUILD new file mode 100644 index 0000000..a025e49 --- /dev/null +++ b/x86_64/kde/plasma-framework/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=plasma-framework +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kactivities kdeclarative kwayland kirigami2) +makedepends=(cmake extra-cmake-modules kdoctools) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/plasma-integration/PKGBUILD b/x86_64/kde/plasma-integration/PKGBUILD new file mode 100644 index 0000000..8b92aed --- /dev/null +++ b/x86_64/kde/plasma-integration/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=plasma-integration +pkgver=5.24.5 +pkgrel=1 +arch=('x86_64') +depends=(kio kwayland libxcursor noto-fonts ttf-hack qqc2-desktop-style perl) +makedepends=(cmake extra-cmake-modules breeze) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/plasma-nm/PKGBUILD b/x86_64/kde/plasma-nm/PKGBUILD new file mode 100644 index 0000000..46f60ad --- /dev/null +++ b/x86_64/kde/plasma-nm/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=plasma-nm +pkgver=5.24.5 +pkgrel=1 +arch=(x86_64) +depends=(plasma-workspace modemmanager-qt networkmanager-qt qca-qt5) +makedepends=(extra-cmake-modules) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/plasma-pa/PKGBUILD b/x86_64/kde/plasma-pa/PKGBUILD new file mode 100644 index 0000000..1600d69 --- /dev/null +++ b/x86_64/kde/plasma-pa/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=plasma-pa +pkgver=5.24.5 +pkgrel=1 +arch=(x86_64) +depends=(plasma-workspace pulseaudio perl) +makedepends=(extra-cmake-modules) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + ln -sf kcms/kcm_pulseaudio.so $pkgdir/usr/lib/qt/plugins/kcm_pulseaudio.so +} diff --git a/x86_64/kde/plasma-wayland-protocols/PKGBUILD b/x86_64/kde/plasma-wayland-protocols/PKGBUILD new file mode 100644 index 0000000..e2fae43 --- /dev/null +++ b/x86_64/kde/plasma-wayland-protocols/PKGBUILD @@ -0,0 +1,35 @@ +pkgname=plasma-wayland-protocols +pkgver=1.7.0 +pkgrel=1 +arch=('x86_64') +makedepends=(extra-cmake-modules qt5) +source=(https://download.kde.org/stable/plasma-wayland-protocols/plasma-wayland-protocols-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make + +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/plasma-workspace-wallpapers/PKGBUILD b/x86_64/kde/plasma-workspace-wallpapers/PKGBUILD new file mode 100644 index 0000000..e874d8c --- /dev/null +++ b/x86_64/kde/plasma-workspace-wallpapers/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=plasma-workspace-wallpapers +pkgver=5.24.5 +pkgrel=1 +arch=(x86_64) +makedepends=(extra-cmake-modules qt5) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz{,.sig}) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/plasma-workspace/PKGBUILD b/x86_64/kde/plasma-workspace/PKGBUILD new file mode 100644 index 0000000..8d9ca3e --- /dev/null +++ b/x86_64/kde/plasma-workspace/PKGBUILD @@ -0,0 +1,39 @@ +pkgname=plasma-workspace +pkgver=5.24.5 +pkgrel=1 +arch=('x86_64') +depends=(knotifyconfig ktexteditor xrdb kholidays xmessage prison libqalculate + kpeople kactivities-stats kquickcharts ksysguard kwin kscreen libxft sddm) +makedepends=(extra-cmake-modules kdoctools baloo networkmanager-qt plasma-wayland-protocols + kunitconversion kinit sddm) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -D INSTALL_SDDM_WAYLAND_SESSION=ON \ + -Wno-dev .. + + make + +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/polkit-kde-agent/PKGBUILD b/x86_64/kde/polkit-kde-agent/PKGBUILD new file mode 100644 index 0000000..7737156 --- /dev/null +++ b/x86_64/kde/polkit-kde-agent/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=polkit-kde-agent +pkgver=5.24.5 +pkgrel=1 +arch=('x86_64') +depends=(kiconthemes kdbusaddons kcrash) +makedepends=(cmake extra-cmake-modules kdoctools) +durl=https://download.kde.org/stable/plasma/$pkgver +source=($durl/$pkgname-1-$pkgver.tar.xz) + +prepare() { + cd $pkgname-1-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-1-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-1-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/polkit-qt/PKGBUILD b/x86_64/kde/polkit-qt/PKGBUILD new file mode 100644 index 0000000..f53ec82 --- /dev/null +++ b/x86_64/kde/polkit-qt/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=polkit-qt +pkgver=0.114.0 +pkgrel=1 +arch=('x86_64') +depends=(polkit qt5) +makedepends=(cmake) +source=(https://download.kde.org/stable/polkit-qt-1/polkit-qt-1-$pkgver.tar.xz) + +prepare() { + cd $pkgname-1-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-1-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make +} + +package() { + cd $pkgname-1-$pkgver/build + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/kde/powerdevil/PKGBUILD b/x86_64/kde/powerdevil/PKGBUILD new file mode 100644 index 0000000..7dd9002 --- /dev/null +++ b/x86_64/kde/powerdevil/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=powerdevil +pkgver=5.24.5 +pkgrel=1 +arch=(x86_64) +depends=(plasma-workspace bluez-qt networkmanager-qt) +makedepends=(extra-cmake-modules kdoctools) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz{,.sig}) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DCMAKE_INSTALL_LIBEXECDIR=lib \ + -DBUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/print-manager/PKGBUILD b/x86_64/kde/print-manager/PKGBUILD new file mode 100644 index 0000000..c9df822 --- /dev/null +++ b/x86_64/kde/print-manager/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=print-manager +pkgver=22.04.2 +pkgrel=1 +arch=('x86_64') +depends=(kcmutils kirigami2 system-config-printer) +makedepends=(cmake extra-cmake-modules kdoctools plasma-framework) +durl=https://download.kde.org/stable/release-service/$pkgver/src +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/prison/PKGBUILD b/x86_64/kde/prison/PKGBUILD new file mode 100644 index 0000000..8b742ae --- /dev/null +++ b/x86_64/kde/prison/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=prison +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5 qrencode) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/purpose/PKGBUILD b/x86_64/kde/purpose/PKGBUILD new file mode 100644 index 0000000..538f7c8 --- /dev/null +++ b/x86_64/kde/purpose/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=purpose +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kirigami2) +makedepends=(cmake extra-cmake-modules intltool) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/qca-qt5/PKGBUILD b/x86_64/kde/qca-qt5/PKGBUILD new file mode 100644 index 0000000..9f8746a --- /dev/null +++ b/x86_64/kde/qca-qt5/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=qca-qt5 +pkgver=2.3.4 +pkgrel=1 +arch=(x86_64) +depends=(qt5 nss) +makedepends=(cmake doxygen pkcs11-helper qt5) +source=(https://download.kde.org/stable/qca/$pkgver/qca-$pkgver.tar.xz) + +build() { + cmake -B build-qt5 -S qca-$pkgver \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_TESTS=OFF \ + -DQCA_INSTALL_IN_QT_PREFIX=ON \ + -DQCA_MAN_INSTALL_DIR=/usr/share/man + + cmake --build build-qt5 +} + +package() { + DESTDIR="$pkgdir" cmake --install build-qt5 + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/qqc2-desktop-style/PKGBUILD b/x86_64/kde/qqc2-desktop-style/PKGBUILD new file mode 100644 index 0000000..ba2f449 --- /dev/null +++ b/x86_64/kde/qqc2-desktop-style/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=qqc2-desktop-style +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kirigami2 kiconthemes sonnet) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/sddm-kcm/PKGBUILD b/x86_64/kde/sddm-kcm/PKGBUILD new file mode 100644 index 0000000..b033fac --- /dev/null +++ b/x86_64/kde/sddm-kcm/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=sddm-kcm +pkgver=5.24.5 +pkgrel=1 +arch=(x86_64) +depends=(sddm knewstuff systemsettings double-conversion) +makedepends=(extra-cmake-modules kdoctools) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -D BUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/skanlite/PKGBUILD b/x86_64/kde/skanlite/PKGBUILD new file mode 100644 index 0000000..2ce3c17 --- /dev/null +++ b/x86_64/kde/skanlite/PKGBUILD @@ -0,0 +1,37 @@ +pkgname=skanlite +pkgver=22.04.0 +pkgrel=1 +arch=('x86_64') +depends=(kio libksane) +makedepends=(cmake extra-cmake-modules kdoctools qt5) +durl=https://download.kde.org/stable/release-service/$pkgver/src +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_TESTING=OFF \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/solid/PKGBUILD b/x86_64/kde/solid/PKGBUILD new file mode 100644 index 0000000..c38b5a3 --- /dev/null +++ b/x86_64/kde/solid/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=solid +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(upower udisks2 qt5) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/sonnet/PKGBUILD b/x86_64/kde/sonnet/PKGBUILD new file mode 100644 index 0000000..5d60aab --- /dev/null +++ b/x86_64/kde/sonnet/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=sonnet +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/spectacle/PKGBUILD b/x86_64/kde/spectacle/PKGBUILD new file mode 100644 index 0000000..ff6b1a7 --- /dev/null +++ b/x86_64/kde/spectacle/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=spectacle +pkgver=22.04.1 +pkgrel=1 +arch=(x86_64) +depends=(xcb-util-cursor libkipi purpose knewstuff kwayland qt5 kimageannotator) +makedepends=(extra-cmake-modules kdoctools) +source=(https://download.kde.org/stable/release-service/$pkgver/src/$pkgname-$pkgver.tar.xz) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -DBUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/syndication/PKGBUILD b/x86_64/kde/syndication/PKGBUILD new file mode 100644 index 0000000..b6b23a4 --- /dev/null +++ b/x86_64/kde/syndication/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=syndication +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(kcodecs) +makedepends=(cmake qt5 extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/syntax-highlighting/PKGBUILD b/x86_64/kde/syntax-highlighting/PKGBUILD new file mode 100644 index 0000000..b19278f --- /dev/null +++ b/x86_64/kde/syntax-highlighting/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=syntax-highlighting +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(syntax-highlighting cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/systemsettings/PKGBUILD b/x86_64/kde/systemsettings/PKGBUILD new file mode 100644 index 0000000..76ceb11 --- /dev/null +++ b/x86_64/kde/systemsettings/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=systemsettings +pkgver=5.24.5 +pkgrel=2 +arch=(x86_64) +depends=(plasma-workspace) +makedepends=(extra-cmake-modules kdoctools) +source=(https://download.kde.org/stable/plasma/$pkgver/$pkgname-$pkgver.tar.xz) + +build() { + cmake -B build -S $pkgname-$pkgver \ + -D BUILD_TESTING=OFF + + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/kde/threadweaver/PKGBUILD b/x86_64/kde/threadweaver/PKGBUILD new file mode 100644 index 0000000..f9e09b1 --- /dev/null +++ b/x86_64/kde/threadweaver/PKGBUILD @@ -0,0 +1,36 @@ +pkgname=threadweaver +pkgver=5.94.0 +pkgrel=1 +arch=('x86_64') +depends=(qt5) +makedepends=(cmake extra-cmake-modules) +durl=https://download.kde.org/stable/frameworks/5.94 +source=($durl/$pkgname-$pkgver.tar.xz) + +prepare() { + cd $pkgname-$pkgver + + mkdir -p build +} + +build() { + cd $pkgname-$pkgver/build + + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + -D CMAKE_BUILD_TYPE=Release \ + -Wno-dev .. + + make -j7 +} + +package() { + cd $pkgname-$pkgver/build + + make DESTDIR=$pkgdir install + + # Hacky way but its how i deal with it for now + mkdir -p $pkgdir/usr/lib64 && mkdir -p $pkgdir/usr/lib && touch $pkgdir/usr/lib64/ignore + cp -rf $pkgdir/usr/lib64/* $pkgdir/usr/lib/ + rm -rf $pkgdir/usr/lib64 $pkgdir/usr/lib/ignore +} diff --git a/x86_64/layers/darling/PKGBUILD b/x86_64/layers/darling/PKGBUILD new file mode 100644 index 0000000..7e4cca1 --- /dev/null +++ b/x86_64/layers/darling/PKGBUILD @@ -0,0 +1,96 @@ +pkgname=darling +# Versioning will be in date ( tarcked by when commit was made ) +pkgver=2022.04.23 +pkgrel=1 +arch=(x86_64) +# Date: Sat, 23 Apr 2022 14:13:03 -0700 +# Subject: [PATCH 1/3] Remove `libnotify` From Main Repo +commitid=26e55e11175da4846511764e650062fb29f3e3f7 +source=(dkms.conf) +install=darling.install +# Darling lkm kernel module is built as module in linux pkg itself ( unified ) +depends=( + cmake clang flex bison icu gcc + fontconfig cairo libtiff python2 mesa llvm libbsd libxkbfile + libxcursor libxext libxkbcommon libxrandr ffmpeg + xz fuse2 libxml2 icu openssl bzip2 zlib systemd + wget curl ruby3 sed libarchive file python3 gawk libunwind + + # Kernel module + dkms + + # lib32 + lib32-clang lib32-bzip2 lib32-systemd lib32-libxslt libpng cairo libtiff glu libbsd python2) +makedepends=( + git pkgconf +) + +prepare() { + # Delete old darling if present somehow + #rm -rf darling + + # Clone darling separately so modules and etc can be worked easily + #git clone --recursive https://github.com/darlinghq/darling.git + + cd darling + + # Checkout specific commit ( chosen to be built ) + git checkout $commitid + + # make build dir + mkdir -p build + + # update and init submodules + git submodule init + + git submodule update + + # Change erroring part of lkm out with newer + sed -i 's/do_exit/make_task_dead/g' src/external/lkm/osfmk/duct/duct_kern_thread_act.c +} + +build() { + cd darling/build + + echo "Running cmake." + cmake \ + -D CMAKE_INSTALL_PREFIX=/usr \ + .. + + echo "Running make." + make -j7 + + echo "Running lkm_generate" + make lkm_generate +} + +package() { + cd darling/build + + # + # Darling itself + # + + # Destdir install darling + make DESTDIR="$pkgdir" install + + # + # Darling module + # + + darling_srcdest="$pkgdir/usr/src/darling-mach-$pkgver" + darling_installdest="/usr/src/darling-mach-$pkgver" + + echo "Installing darling module sources for DKMS." + install -dm755 $(dirname "$darling_srcdest") + cp -r "$srcdir/$pkgname/src/external/lkm" "$darling_srcdest" + cp -r "$srcdir/$pkgname/build/src/external/lkm" "$darling_srcdest/migdir" + + # Copy missing header rtsig.h + cp "$srcdir/$pkgname/build/src/startup/rtsig.h" "$darling_srcdest/include" + + echo "Set configuration for DKMS..." + install -Dm644 "$srcdir/dkms.conf" "$darling_srcdest" + sed -i "s|@PKGVER@|$pkgver|g" "$darling_srcdest/dkms.conf" + sed -i "s|@SRCDEST@|$darling_installdest|g" "$darling_srcdest/dkms.conf" +} diff --git a/x86_64/layers/darling/darling.install b/x86_64/layers/darling/darling.install new file mode 100644 index 0000000..18f7d95 --- /dev/null +++ b/x86_64/layers/darling/darling.install @@ -0,0 +1,25 @@ +DARLING_PATH="/usr/libexec/darling" + +setup_ld() { + cd "$DARLING_PATH" + echo "Running darling-setup=ld-so" + /usr/bin/darling-setup-ld-so +} + +clean_ld() { + cd "$DARLING_PATH/etc" + rm -f ld.so.conf ld.so.cache + rm -rf ld.so.conf.d +} + +post_install() { + setup_ld +} + +post_upgrade() { + setup_ld +} + +pre_remove() { + clean_ld +} diff --git a/x86_64/layers/darling/dkms.conf b/x86_64/layers/darling/dkms.conf new file mode 100644 index 0000000..ce87014 --- /dev/null +++ b/x86_64/layers/darling/dkms.conf @@ -0,0 +1,8 @@ +PACKAGE_NAME="darling-mach-dkms" +PACKAGE_VERSION="@PKGVER@" +AUTOINSTALL="yes" +MAKE="CPATH=@SRCDEST@/include MIGDIR=@SRCDEST@/migdir MIGDIR_REL=migdir make" +CLEAN="CPATH=@SRCDEST@/include MIGDIR=@SRCDEST@/migdir MIGDIR_REL=migdir make clean" + +BUILT_MODULE_NAME[0]="darling-mach" +DEST_MODULE_LOCATION[0]="/kernel/misc" diff --git a/x86_64/layers/wine/30-win32-aliases.conf b/x86_64/layers/wine/30-win32-aliases.conf new file mode 100644 index 0000000..99ae1f7 --- /dev/null +++ b/x86_64/layers/wine/30-win32-aliases.conf @@ -0,0 +1,20 @@ + + + + + MS Shell Dlg + Microsoft Sans Serif + sans-serif + + + MS Shell Dlg 2 + Tahoma + sans-serif + + + + MS Sans Serif + Microsoft Sans Serif + sans-serif + + diff --git a/x86_64/layers/wine/PKGBUILD b/x86_64/layers/wine/PKGBUILD new file mode 100644 index 0000000..e702d90 --- /dev/null +++ b/x86_64/layers/wine/PKGBUILD @@ -0,0 +1,170 @@ +pkgname=wine +# Versioning YY/MM/DD/HH YEAR/MONTH/DAY/HOUR ( HOUR = 24H FORMAT ) FROM PATCH FILE +pkgver=2022.07.4.15 +pkgrel=1 +commitid=cc2253f09c7353cef5156a536ed20b75bad0e589 +source=(https://github.com/ValveSoftware/wine/archive/$commitid.zip + 30-win32-aliases.conf + wine-binfmt.conf + wine-reset + + # patches go here + futex_compile.patch + openldap.patch + amstream_compile_fix.patch + amstream_compile_fix_2.patch + compile_error_fix.patch) +pkgdesc="A compatibility layer for running Windows programs" +url="https://github.com/ValveSoftware/wine" +arch=(x86_64) +options=(staticlibs !lto) +depends=( + fontconfig lib32-fontconfig + lcms lib32-lcms + libxml2 lib32-libxml2 + libxcursor lib32-libxcursor + libxrandr lib32-libxrandr + libxdamage lib32-libxdamage + libxi lib32-libxi + gettext lib32-gettext + freetype2 lib32-freetype2 + glu lib32-glu + libsm lib32-libsm + gcc + libpcap lib32-libpcap +# faudio lib32-faudio + desktop-file-utils +) + +makedepends=( + autoconf + bison + perl + fontforge + flex + giflib lib32-giflib + libpng lib32-libpng + gnutls lib32-gnutls + libxinerama lib32-libxinerama + libxcomposite lib32-libxcomposite + libxmu lib32-libxmu + libxxf86vm lib32-libxxf86vm + openldap lib32-openldap +# mpg123 lib32-mpg123 + openal lib32-openal +# v4l-utils lib32-v4l-utils + pulseaudio lib32-pulseaudio + alsa-lib lib32-alsa-lib + libxcomposite lib32-libxcomposite + mesa lib32-mesa + ocl-icd lib32-ocl-icd + libxslt lib32-libxslt + gst-plugins-base #lib32-gst-plugins-base + vulkan-icd-loader lib32-vulkan-icd-loader +# vkd3d lib32-vkd3d + sdl2 lib32-sdl2 + cups #lib32-cups + libgphoto2 + sane +# gsm + vulkan-headers + samba + opencl-headers +) + +install=wine.install + +prepare() { + + # START PATCHES + cd wine-$commitid + patch -Np1 -i ../futex_compile.patch + patch -Np1 -i ../openldap.patch + patch -Np1 -i ../amstream_compile_fix.patch + patch -Np1 -i ../amstream_compile_fix_2.patch + patch -Np0 -i ../compile_error_fix.patch + cd $srcdir + # END OF PATCHES + + # clean if rebuild + rm -rf wine + + # Rename wine folder + mv wine-$commitid wine + + sed 's|OpenCL/opencl.h|CL/opencl.h|g' -i $pkgname/configure* + + # Fix openldap 2.5+ detection + sed 's/-lldap_r/-lldap/' -i $pkgname/configure + + # Get rid of old build dirs + rm -rf $pkgname-{32,64}-build + mkdir -p $pkgname-32-build $pkgname-64-build + + # Run post req + cd wine + + tools/make_requests + dlls/winevulkan/make_vulkan -x /usr/share/vulkan/registry/vk.xml + + # Configure pkg here + # AMD64 + cd "$srcdir/$pkgname-64-build" + ../$pkgname/configure \ + --prefix=/usr \ + --libdir=/usr/lib \ + --with-x \ + --with-gstreamer \ + --enable-win64 \ + --disable-tests + + # I686 + export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" + cd "$srcdir/$pkgname-32-build" + ../$pkgname/configure \ + --prefix=/usr \ + --libdir=/usr/lib32 \ + --with-wine64="$srcdir/$pkgname-64-build" \ + --with-x \ + --without-gstreamer \ + --disable-tests +} + +build() { + cd "$srcdir" + + # AMD64 + echo "Building Wine-64..." + cd "$srcdir/$pkgname-64-build" + make -j4 + + # I686 + echo "Building Wine-32..." + cd "$srcdir/$pkgname-32-build" + make -j4 +} + +package() { + echo "Packaging Wine-32..." + cd "$srcdir/$pkgname-32-build" + + make prefix="$pkgdir/usr" \ + libdir="$pkgdir/usr/lib32" \ + dlldir="$pkgdir/usr/lib32/wine" install + + echo "Packaging Wine-64..." + cd "$srcdir/$pkgname-64-build" + make prefix="$pkgdir/usr" \ + libdir="$pkgdir/usr/lib" \ + dlldir="$pkgdir/usr/lib/wine" install + + # Font aliasing settings for Win32 applications + install -d "$pkgdir"/usr/share/fontconfig/conf.{avail,default} + install -m644 "$srcdir/30-win32-aliases.conf" "$pkgdir/usr/share/fontconfig/conf.avail" + ln -s ../conf.avail/30-win32-aliases.conf "$pkgdir/usr/share/fontconfig/conf.default/30-win32-aliases.conf" + install -Dm 644 "$srcdir/wine-binfmt.conf" "$pkgdir/usr/lib/binfmt.d/wine.conf" + + # Install wine-reset + cp $srcdir/wine-reset $pkgdir/usr/bin/wine-reset + chmod +x $pkgdir/usr/bin/wine-reset +} diff --git a/x86_64/layers/wine/amstream_compile_fix.patch b/x86_64/layers/wine/amstream_compile_fix.patch new file mode 100644 index 0000000..bdff92e --- /dev/null +++ b/x86_64/layers/wine/amstream_compile_fix.patch @@ -0,0 +1,80 @@ +From 2552a4843646e8a842bbbf728389862a6b2027c5 Mon Sep 17 00:00:00 2001 +From: Zebediah Figura +Date: Sun, 6 Feb 2022 20:59:40 -0600 +Subject: [PATCH] amstream/tests: Use IMemAllocator::GetBuffer() directly. + +BaseOutputPinImpl_GetDeliveryBuffer() is doing nothing helpful here. + +Signed-off-by: Zebediah Figura +Signed-off-by: Alexandre Julliard +--- + dlls/amstream/tests/amstream.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/dlls/amstream/tests/amstream.c b/dlls/amstream/tests/amstream.c +index d27bf8014825..5b3e78e05833 100644 +--- a/dlls/amstream/tests/amstream.c ++++ b/dlls/amstream/tests/amstream.c +@@ -4256,7 +4256,7 @@ static void test_audiostream_begin_flush_end_flush(void) + hr = IAMMultiMediaStream_SetState(mmstream, STREAMSTATE_RUN); + ok(hr == S_OK, "Got hr %#x.\n", hr); + +- hr = BaseOutputPinImpl_GetDeliveryBuffer(&source.source, &media_sample, NULL, NULL, 0); ++ hr = IMemAllocator_GetBuffer(source.source.pAllocator, &media_sample, NULL, NULL, 0); + ok(hr == S_OK, "Got hr %#x.\n", hr); + hr = IMemInputPin_Receive(source.source.pMemInputPin, media_sample); + ok(hr == S_OK, "Got hr %#x.\n", hr); +@@ -4272,7 +4272,7 @@ static void test_audiostream_begin_flush_end_flush(void) + ref = IMediaSample_Release(media_sample); + ok(!ref, "Got outstanding refcount %d.\n", ref); + +- hr = BaseOutputPinImpl_GetDeliveryBuffer(&source.source, &media_sample, NULL, NULL, 0); ++ hr = IMemAllocator_GetBuffer(source.source.pAllocator, &media_sample, NULL, NULL, 0); + ok(hr == S_OK, "Got hr %#x.\n", hr); + hr = IMemInputPin_Receive(source.source.pMemInputPin, media_sample); + ok(hr == S_FALSE, "Got hr %#x.\n", hr); +@@ -4289,7 +4289,7 @@ static void test_audiostream_begin_flush_end_flush(void) + hr = IPin_EndFlush(pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + +- hr = BaseOutputPinImpl_GetDeliveryBuffer(&source.source, &media_sample, NULL, NULL, 0); ++ hr = IMemAllocator_GetBuffer(source.source.pAllocator, &media_sample, NULL, NULL, 0); + ok(hr == S_OK, "Got hr %#x.\n", hr); + hr = IMemInputPin_Receive(source.source.pMemInputPin, media_sample); + ok(hr == S_OK, "Got hr %#x.\n", hr); +@@ -4408,7 +4408,7 @@ static IMediaSample *ammediastream_allocate_sample(struct testfilter *source, co + BYTE *sample_data; + HRESULT hr; + +- hr = BaseOutputPinImpl_GetDeliveryBuffer(&source->source, &sample, NULL, NULL, 0); ++ hr = IMemAllocator_GetBuffer(source->source.pAllocator, &sample, NULL, NULL, 0); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IMediaSample_GetPointer(sample, &sample_data); +@@ -5848,7 +5848,7 @@ static void test_ddrawstream_begin_flush_end_flush(void) + hr = IAMMultiMediaStream_SetState(mmstream, STREAMSTATE_RUN); + ok(hr == S_OK, "Got hr %#x.\n", hr); + +- hr = BaseOutputPinImpl_GetDeliveryBuffer(&source.source, &media_sample, NULL, NULL, 0); ++ hr = IMemAllocator_GetBuffer(source.source.pAllocator, &media_sample, NULL, NULL, 0); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ammediastream_mem_input_pin = source.source.pMemInputPin; +@@ -5866,7 +5866,7 @@ static void test_ddrawstream_begin_flush_end_flush(void) + ref = IMediaSample_Release(media_sample); + ok(!ref, "Got outstanding refcount %d.\n", ref); + +- hr = BaseOutputPinImpl_GetDeliveryBuffer(&source.source, &media_sample, NULL, NULL, 0); ++ hr = IMemAllocator_GetBuffer(source.source.pAllocator, &media_sample, NULL, NULL, 0); + ok(hr == S_OK, "Got hr %#x.\n", hr); + hr = IMemInputPin_Receive(source.source.pMemInputPin, media_sample); + ok(hr == S_FALSE, "Got hr %#x.\n", hr); +@@ -5883,7 +5883,7 @@ static void test_ddrawstream_begin_flush_end_flush(void) + hr = IPin_EndFlush(pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + +- hr = BaseOutputPinImpl_GetDeliveryBuffer(&source.source, &media_sample, NULL, NULL, 0); ++ hr = IMemAllocator_GetBuffer(source.source.pAllocator, &media_sample, NULL, NULL, 0); + ok(hr == S_OK, "Got hr %#x.\n", hr); + hr = IMemInputPin_Receive(source.source.pMemInputPin, media_sample); + ok(hr == S_OK, "Got hr %#x.\n", hr); diff --git a/x86_64/layers/wine/amstream_compile_fix_2.patch b/x86_64/layers/wine/amstream_compile_fix_2.patch new file mode 100644 index 0000000..61d83ad --- /dev/null +++ b/x86_64/layers/wine/amstream_compile_fix_2.patch @@ -0,0 +1,26 @@ +From 4e610a078a00d962b3a313ba1dc5c861f3888790 Mon Sep 17 00:00:00 2001 +From: Zebediah Figura +Date: Mon, 7 Feb 2022 23:22:45 -0600 +Subject: [PATCH] amstream/tests: Use CoCreateInstance() directly instead of + BaseOutputPinImpl_InitAllocator(). + +Signed-off-by: Zebediah Figura +Signed-off-by: Alexandre Julliard +--- + dlls/amstream/tests/amstream.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/dlls/amstream/tests/amstream.c b/dlls/amstream/tests/amstream.c +index 5b3e78e05833..6b17ba6d430b 100644 +--- a/dlls/amstream/tests/amstream.c ++++ b/dlls/amstream/tests/amstream.c +@@ -1140,7 +1140,8 @@ static HRESULT WINAPI testsource_DecideAllocator(struct strmbase_source *iface, + * when it is able to do so it's behavior changes slightly + * (e.g. it uses dynamic format change instead of reconnecting in SetFormat). + * We don't yet implement the custom allocator so force the standard one for now. */ +- hr = BaseOutputPinImpl_InitAllocator(iface, alloc); ++ hr = CoCreateInstance(&CLSID_MemoryAllocator, NULL, CLSCTX_INPROC_SERVER, ++ &IID_IMemAllocator, (void **)alloc); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + IMemInputPin_GetAllocatorRequirements(pin, &props); diff --git a/x86_64/layers/wine/compile_error_fix.patch b/x86_64/layers/wine/compile_error_fix.patch new file mode 100644 index 0000000..50c78d7 --- /dev/null +++ b/x86_64/layers/wine/compile_error_fix.patch @@ -0,0 +1,41 @@ +diff -Naur wine/dlls/server/esync.c wine/dlls/server/esync.c +--- wine/dlls/server/esync.c 2022-07-06 20:07:08.000000000 +0300 ++++ wine/dlls/server/esync.c 2022-07-10 20:22:20.830809959 +0300 +@@ -43,6 +43,7 @@ + #include "file.h" + #include "esync.h" + #include "fsync.h" ++#include + + int do_esync(void) + { +diff -Naur wine/dlls/winevulkan/vulkan.c wine/dlls/winevulkan/vulkan.c +--- wine/dlls/winevulkan/vulkan.c 2022-07-10 19:08:55.065279093 +0300 ++++ wine/dlls/winevulkan/vulkan.c 2022-07-10 19:00:24.790129994 +0300 +@@ -37,6 +37,8 @@ + #include "vulkan_private.h" + #include "winreg.h" + #include "ntuser.h" ++#include ++#include + + WINE_DEFAULT_DEBUG_CHANNEL(vulkan); + +@@ -3407,7 +3409,7 @@ + return res; + } + +-static void fixup_pipeline_feedback(VkPipelineCreationFeedback *feedback, uint32_t count) ++static void fixup_pipeline_feedback(VkPipelineCreationFeedbackEXT *feedback, uint32_t count) + { + #if defined(USE_STRUCT_CONVERSION) + struct host_pipeline_feedback +@@ -3429,7 +3431,7 @@ + + static void fixup_pipeline_feedback_info(const void *pipeline_info) + { +- VkPipelineCreationFeedbackCreateInfo *feedback; ++ VkPipelineCreationFeedbackCreateInfoEXT *feedback; + + feedback = wine_vk_find_struct(pipeline_info, PIPELINE_CREATION_FEEDBACK_CREATE_INFO); + diff --git a/x86_64/layers/wine/futex_compile.patch b/x86_64/layers/wine/futex_compile.patch new file mode 100644 index 0000000..0febbc7 --- /dev/null +++ b/x86_64/layers/wine/futex_compile.patch @@ -0,0 +1,10 @@ +diff --color -rupN a/dlls/ntdll/unix/fsync.c b/dlls/ntdll/unix/fsync.c +--- a/dlls/ntdll/unix/fsync.c 2022-02-16 13:39:18.748009255 +0100 ++++ b/dlls/ntdll/unix/fsync.c 2022-02-16 13:39:14.004819301 +0100 +@@ -51,6 +51,7 @@ + + #include "unix_private.h" + #include "fsync.h" ++#include + + WINE_DEFAULT_DEBUG_CHANNEL(fsync); diff --git a/x86_64/layers/wine/openldap.patch b/x86_64/layers/wine/openldap.patch new file mode 100644 index 0000000..1cc770e --- /dev/null +++ b/x86_64/layers/wine/openldap.patch @@ -0,0 +1,70 @@ +From 25946b48148784e8275c1685f6498ab88f553ca3 Mon Sep 17 00:00:00 2001 +From: Eric Pouech +Date: Fri, 4 Feb 2022 09:34:49 +0100 +Subject: [PATCH] wldap32: Fix compilation in 32-bit. + +32-bit compilation has been broken by 8db1662d749991a77b8945c752ab024d2d6b1244. + +Signed-off-by: Eric Pouech +Signed-off-by: Hans Leidekker +Signed-off-by: Alexandre Julliard +--- + dlls/wldap32/libldap.c | 18 ++++++++++++++---- + 1 file changed, 14 insertions(+), 4 deletions(-) + +diff --git a/dlls/wldap32/libldap.c b/dlls/wldap32/libldap.c +index 8872421dabc..592e526ecdc 100644 +--- a/dlls/wldap32/libldap.c ++++ b/dlls/wldap32/libldap.c +@@ -53,7 +53,14 @@ C_ASSERT( sizeof(LDAPSortKeyU) == sizeof(LDAPSortKey) ); + C_ASSERT( sizeof(LDAPVLVInfoU) == sizeof(LDAPVLVInfo) ); + C_ASSERT( sizeof(LDAPAPIInfoU) == sizeof(LDAPAPIInfo) ); + C_ASSERT( sizeof(LDAPAPIFeatureInfoU) == sizeof(LDAPAPIFeatureInfo) ); +-C_ASSERT( sizeof(struct timevalU) == sizeof(struct timeval) ); ++ ++static struct timeval *convert_timeval(const struct timevalU *tvu, struct timeval *tv) ++{ ++ if (!tvu) return NULL; ++ tv->tv_sec = tvu->tv_sec; ++ tv->tv_usec = tvu->tv_usec; ++ return tv; ++} + + #define WLDAP32_LBER_ERROR (~0l) + +@@ -488,8 +495,9 @@ static NTSTATUS wrap_ldap_rename_s( void *args ) + static NTSTATUS wrap_ldap_result( void *args ) + { + struct ldap_result_params *params = args; ++ struct timeval tv; + return ldap_result( params->ld, params->msgid, params->all, +- (struct timeval *)params->timeout, (LDAPMessage **)params->result ); ++ convert_timeval(params->timeout, &tv), (LDAPMessage **)params->result ); + } + + static NTSTATUS wrap_ldap_sasl_bind( void *args ) +@@ -555,18 +563,20 @@ static NTSTATUS wrap_ldap_sasl_interactive_bind_s( void *args ) + static NTSTATUS wrap_ldap_search_ext( void *args ) + { + struct ldap_search_ext_params *params = args; ++ struct timeval tv; + return ldap_search_ext( params->ld, params->base, params->scope, params->filter, params->attrs, + params->attrsonly, (LDAPControl **)params->serverctrls, +- (LDAPControl **)params->clientctrls, (struct timeval *)params->timeout, ++ (LDAPControl **)params->clientctrls, convert_timeval(params->timeout, &tv), + params->sizelimit, (int *)params->msg ); + } + + static NTSTATUS wrap_ldap_search_ext_s( void *args ) + { + struct ldap_search_ext_s_params *params = args; ++ struct timeval tv; + return ldap_search_ext_s( params->ld, params->base, params->scope, params->filter, params->attrs, + params->attrsonly, (LDAPControl **)params->serverctrls, +- (LDAPControl **)params->clientctrls, (struct timeval *)params->timeout, ++ (LDAPControl **)params->clientctrls, convert_timeval(params->timeout, &tv), + params->sizelimit, (LDAPMessage **)params->result ); + } + +-- +2.20.1 diff --git a/x86_64/layers/wine/wine-binfmt.conf b/x86_64/layers/wine/wine-binfmt.conf new file mode 100644 index 0000000..4d43073 --- /dev/null +++ b/x86_64/layers/wine/wine-binfmt.conf @@ -0,0 +1,2 @@ +# Start WINE on Windows executables +:DOSWin:M::MZ::/usr/bin/wine: diff --git a/x86_64/layers/wine/wine-reset b/x86_64/layers/wine/wine-reset new file mode 100755 index 0000000..a169310 --- /dev/null +++ b/x86_64/layers/wine/wine-reset @@ -0,0 +1,42 @@ +#!/bin/bash + +clean_wine() { + # Here we will manually rm -f some wine related things + # https://wiki.winehq.org/FAQ ( 4.3 + 4.4 ) + cd ~ + + echo "[ * ]: Killing wineserver ( if running )" + # Kill wineserver ( if running ) + if pgrep wineserver; then pkill wineserver; fi + + echo "[ * ]: Removing wine made files in ~/.local" + # The usual + rm -f ~/.local/share/mime/packages/x-wine* + rm -f ~/.local/share/applications/wine-extension* + rm -f ~/.local/share/icons/hicolor/*/*/application-x-wine-extension* + rm -f ~/.local/share/mime/application/x-wine-extension* + + # Clean leftovers + rm -f ~/.config/menus/applications-merged/wine* + rm -rf ~/.local/share/applications/wine + rm -f ~/.local/share/desktop-directories/wine* + rm -f ~/.local/share/icons/????_*.{xpm,png} + rm -f ~/.local/share/icons/*-x-wine-*.{xpm,png} }}} + + echo "[ * ]: Removing existing wine prefix" + # Now wine prefix itself + rm -rf ~/.wine +} + +echo "[ !!! ]: Make sure not to use root/sudo rights as you may break youre system with it" +echo "[ !! ]: This will remove all wine related things in users home folder" +echo "[ !! ]: So are you sure that you wanna do it?" + +while true; do + read -p "[ Y/N ]: Do you wish to install this program?" yn + case $yn in + [Yy]* ) clean_wine; break;; + [Nn]* ) echo "Exiting..."; exit;; + * ) echo "Please answer yes or no.";; + esac +done diff --git a/x86_64/layers/wine/wine.install b/x86_64/layers/wine/wine.install new file mode 100644 index 0000000..cbe10cc --- /dev/null +++ b/x86_64/layers/wine/wine.install @@ -0,0 +1,7 @@ +post_install() { + echo "Run 'systemctl restart systemd-binfmt' in order to make the wine binfmt available on your system." +} + +post_remove() { + echo "binfmt binary formats will be updated at reboot" +} diff --git a/x86_64/pentest/PKGBUILD b/x86_64/pentest/PKGBUILD new file mode 100644 index 0000000..0cf16c8 --- /dev/null +++ b/x86_64/pentest/PKGBUILD @@ -0,0 +1,19 @@ +pkgname= +pkgver= +pkgrel=1 +arch=(x86_64) +depends=() +makedepends=() +source=() + +build() { + cd $pkgname-$pkgver + + +} + +package() { + cd $pkgname-$pkgver + + +} diff --git a/x86_64/pentest/aircrack-ng/PKGBUILD b/x86_64/pentest/aircrack-ng/PKGBUILD new file mode 100644 index 0000000..8e62e98 --- /dev/null +++ b/x86_64/pentest/aircrack-ng/PKGBUILD @@ -0,0 +1,31 @@ +pkgname=aircrack-ng +pkgver=1.6 +pkgrel=1 +arch=(x86_64) +depends=(openssl sqlite3 pcre iw ethtool + libpcap python3 zlib libnl libusb) +commitid=f94a3fe3f1c74938169317a6395b7f72452499c4 +source=(git+https://github.com/aircrack-ng/aircrack-ng.git#commit=$commitid) + +prepare() { + cd $pkgname + + autoreconf -fiv +} + +build() { + cd $pkgname + + ./configure \ + --prefix=/usr \ + --with-ext-scripts \ + --with-experimental + + make +} + +package() { + cd $pkgname + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/perl/PKGBUILD b/x86_64/perl/PKGBUILD new file mode 100644 index 0000000..99ccdff --- /dev/null +++ b/x86_64/perl/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=perl5- +rname= +pkgver= +pkgrel=1 +arch=('x86_64') +depends=(perl) +makedepends=(make gcc) +source=() + +prepare() { + cd $rname-$pkgver + + perl Makefile.PL +} + +build() { + cd $rname-$pkgver + + make +} + +package() { + cd $rname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/perl/perl-modules/PKGBUILD b/x86_64/perl/perl-modules/PKGBUILD new file mode 100644 index 0000000..4006f6d --- /dev/null +++ b/x86_64/perl/perl-modules/PKGBUILD @@ -0,0 +1,82 @@ +pkgname=perl-modules +pkgver=1.0.0 +pkgrel=4 +arch=('x86_64') +depends=(perl) +makedepends=(gcc make) +source=(https://www.cpan.org/authors/id/P/PH/PHRED/Archive-Zip-1.68.tar.gz + https://www.cpan.org/authors/id/V/VP/VPIT/autovivification-0.18.tar.gz + https://www.cpan.org/authors/id/B/BD/BDFOY/Business-ISBN-3.007.tar.gz + https://www.cpan.org/authors/id/B/BD/BDFOY/Business-ISMN-1.202.tar.gz + https://www.cpan.org/authors/id/B/BD/BDFOY/Business-ISSN-1.004.tar.gz + https://www.cpan.org/authors/id/K/KA/KASEI/Class-Accessor-0.51.tar.gz + https://www.cpan.org/authors/id/D/DC/DCANTRELL/Data-Compare-1.27.tar.gz + https://www.cpan.org/authors/id/G/GA/GARU/Data-Dump-1.25.tar.gz + https://www.cpan.org/authors/id/M/MW/MWX/Data-Uniqid-0.12.tar.gz + https://www.cpan.org/authors/id/W/WY/WYANT/DateTime-Calendar-Julian-0.106.tar.gz + https://www.cpan.org/authors/id/D/DR/DROLSKY/DateTime-Format-Builder-0.83.tar.gz + https://www.cpan.org/authors/id/L/LE/LEONT/File-Slurper-0.013.tar.gz + https://www.cpan.org/authors/id/P/PL/PLICEASE/File-Which-1.27.tar.gz + https://www.cpan.org/authors/id/O/OA/OALDERS/HTML-Parser-3.76.tar.gz + https://www.cpan.org/authors/id/O/OA/OALDERS/HTTP-Daemon-6.12.tar.gz + https://www.cpan.org/authors/id/R/RJ/RJBS/IPC-Run3-0.048.tar.gz + https://www.cpan.org/authors/id/A/AL/ALINKE/Lingua-Translit-0.28.tar.gz + https://www.cpan.org/authors/id/E/ET/ETJ/Log-Log4perl-1.55.tar.gz + https://cpan.metacpan.org/authors/id/L/LE/LEONT/Module-Build-0.4231.tar.gz + https://www.cpan.org/authors/id/N/NL/NLNETLABS/Net-DNS-1.33.tar.gz + https://www.cpan.org/authors/id/J/JT/JTBRAUN/Parse-RecDescent-1.967015.tar.gz + https://www.cpan.org/authors/id/W/WB/WBRASWELL/Parse-Yapp-1.21.tar.gz + https://www.cpan.org/authors/id/A/AB/ABIGAIL/Regexp-Common-2017060201.tar.gz + https://www.cpan.org/authors/id/S/SA/SALVA/Sort-Key-1.33.tar.gz + https://www.cpan.org/authors/id/D/DA/DANBOO/Test-Command-0.11.tar.gz + https://www.cpan.org/authors/id/S/SY/SYP/Text-Roman-3.5.tar.gz + https://www.cpan.org/authors/id/O/OA/OALDERS/URI-5.10.tar.gz + https://www.cpan.org/authors/id/J/JO/JOSEPHW/XML-Writer-0.900.tar.gz + https://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Encode-Locale-1.05.tar.gz + https://www.cpan.org/authors/id/A/AT/ATOOMIC/TimeDate-2.33.tar.gz + https://search.cpan.org/CPAN/authors/id/O/OA/OALDERS/HTTP-Date-6.05.tar.gz + https://search.cpan.org/CPAN/authors/id/P/PL/PLICEASE/File-Listing-6.14.tar.gz + https://search.cpan.org/CPAN/authors/id/A/AT/ATOOMIC/Clone-0.45.tar.gz + https://search.cpan.org/CPAN/authors/id/C/CJ/CJM/IO-HTML-1.004.tar.gz + https://search.cpan.org/CPAN/authors/id/O/OA/OALDERS/LWP-MediaTypes-6.04.tar.gz + https://search.cpan.org/CPAN/authors/id/E/ET/ETHER/Try-Tiny-0.31.tar.gz + https://search.cpan.org/CPAN/authors/id/O/OA/OALDERS/HTTP-Message-6.36.tar.gz + https://search.cpan.org/CPAN/authors/id/O/OA/OALDERS/HTTP-Cookies-6.10.tar.gz + https://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTTP-Negotiate-6.01.tar.gz + https://cpan.metacpan.org/authors/id/O/OA/OALDERS/Net-HTTP-6.22.tar.gz + https://search.cpan.org/CPAN/authors/id/G/GA/GAAS/WWW-RobotRules-6.02.tar.gz + https://search.cpan.org/CPAN/authors/id/T/TO/TODDR/XML-Parser-2.46.tar.gz + https://cpan.metacpan.org/authors/id/M/MA/MANWAR/XML-XPath-1.44.tar.gz + https://search.cpan.org/CPAN/authors/id/I/IS/ISHIGAKI/JSON-4.06.tar.gz) +options=('!emptydirs') + +function build_modules() { + shopt -s globstar + for d in */ ; do + cd "$d" + echo + echo "[!]: building $d" + perl Makefile.PL + make + cd .. + done +} + +function install_modules() { + shopt -s globstar + for d in */ ; do + cd "$d" + echo + echo "[!]: Installing $d" + make DESTDIR=$pkgdir install + cd .. + done +} + +build() { + build_modules +} + +package() { + install_modules +} diff --git a/x86_64/perl/perl5-font-ttf/PKGBUILD b/x86_64/perl/perl5-font-ttf/PKGBUILD new file mode 100644 index 0000000..045df04 --- /dev/null +++ b/x86_64/perl/perl5-font-ttf/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=perl5-font-ttf +rname=Font-TTF +pkgver=1.06 +pkgrel=1 +arch=('x86_64') +depends=(perl perl5-io-string) +makedepends=(make gcc) +source=(https://cpan.metacpan.org/authors/id/B/BH/BHALLISSY/$rname-$pkgver.tar.gz) + +prepare() { + cd $rname-$pkgver + + perl Makefile.PL +} + +build() { + cd $rname-$pkgver + + make +} + +package() { + cd $rname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/perl/perl5-io-string/PKGBUILD b/x86_64/perl/perl5-io-string/PKGBUILD new file mode 100644 index 0000000..4e652d4 --- /dev/null +++ b/x86_64/perl/perl5-io-string/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=perl5-io-string +rname=IO-String +pkgver=1.08 +pkgrel=1 +arch=('x86_64') +depends=(perl) +makedepends=(make gcc) +source=(https://www.cpan.org/authors/id/G/GA/GAAS/$rname-$pkgver.tar.gz) + +prepare() { + cd $rname-$pkgver + + perl Makefile.PL +} + +build() { + cd $rname-$pkgver + + make +} + +package() { + cd $rname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/proprietary/PKGBUILD b/x86_64/proprietary/PKGBUILD new file mode 100644 index 0000000..1bbffd3 --- /dev/null +++ b/x86_64/proprietary/PKGBUILD @@ -0,0 +1,25 @@ +pkgname= +pkgver= +pkgrel=1 +arch=('x86_64') +depends=() +makedepends=() +source=() + +prepare() { + cd $pkgname-$pkgver + + +} + +build() { + cd $pkgname-$pkgver + + +} + +package() { + cd $pkgname-$pkgver + + +} diff --git a/x86_64/proprietary/figma/PKGBUILD b/x86_64/proprietary/figma/PKGBUILD new file mode 100644 index 0000000..f6081f5 --- /dev/null +++ b/x86_64/proprietary/figma/PKGBUILD @@ -0,0 +1,14 @@ +pkgname=figma +pkgver=0.10.0 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +makedepends=(unzip) +source=(https://github.com/Figma-Linux/figma-linux/releases/download/v${pkgver}/figma-linux_${pkgver}_linux_amd64.zip) + +package() { + mkdir -p $pkgdir/opt/$pkgname $pkgdir/usr/bin + cp -rf ./* $pkgdir/opt/$pkgname/ + + ln -s "/opt/${pkgname}/figma-linux" "${pkgdir}/usr/bin/figma" +} diff --git a/x86_64/proprietary/freeoffice/PKGBUILD b/x86_64/proprietary/freeoffice/PKGBUILD new file mode 100644 index 0000000..4ae0d0e --- /dev/null +++ b/x86_64/proprietary/freeoffice/PKGBUILD @@ -0,0 +1,66 @@ +pkgname=freeoffice +pkgver=1046 +pkgrel=1 +pkgdesc="A complete, reliable, lightning-fast and Microsoft Office-compatible office suite with a word processor, spreadsheet, and presentation graphics software." +arch=('x86_64') +url="http://www.freeoffice.com/" +depends=('libxrandr' 'libglvnd' 'xdg-utils' 'gtk3+' + 'desktop-file-utils' 'curl') +makedepends=('chrpath') +source=("http://www.softmaker.net/down/softmaker-${pkgname}-2021-${pkgver}-amd64.tgz" + "${pkgname}-textmaker" + "${pkgname}-planmaker" + "${pkgname}-presentations" + "${pkgname}-textmaker.desktop" + "${pkgname}-planmaker.desktop" + "${pkgname}-presentations.desktop") + +prepare() { + xz -d "freeoffice2021.tar.lzma" +} + +build() { + mkdir -p "${pkgname}" + tar x -f "freeoffice2021.tar" -C "${pkgname}" + + cd "${pkgname}" + chrpath --delete "textmaker" + chrpath --delete "planmaker" + chrpath --delete "presentations" +} + +package() { + # Install package files + install -d "${pkgdir}/usr/lib" + cp -r "${srcdir}/${pkgname}" "${pkgdir}/usr/lib" + + # Install program executables + install -d "${pkgdir}/usr/bin" + install -m 755 -t "${pkgdir}/usr/bin" "${srcdir}/${pkgname}-planmaker" + install -m 755 -t "${pkgdir}/usr/bin" "${srcdir}/${pkgname}-textmaker" + install -m 755 -t "${pkgdir}/usr/bin" "${srcdir}/${pkgname}-presentations" + + # Installing icons + for size in 16 32 48 + do + install -d "${pkgdir}/usr/share/icons/hicolor/${size}x${size}/apps" + ln -s "/usr/lib/${pkgname}/icons/pml_${size}.png" "${pkgdir}/usr/share/icons/hicolor/${size}x${size}/apps/${pkgname}-planmaker.png" + ln -s "/usr/lib/${pkgname}/icons/prl_${size}.png" "${pkgdir}/usr/share/icons/hicolor/${size}x${size}/apps/${pkgname}-presentations.png" + ln -s "/usr/lib/${pkgname}/icons/tml_${size}.png" "${pkgdir}/usr/share/icons/hicolor/${size}x${size}/apps/${pkgname}-textmaker.png" + + install -d "${pkgdir}/usr/share/icons/hicolor/${size}x${size}/mimetypes" + ln -s "/usr/lib/${pkgname}/icons/pmd_${size}.png" "${pkgdir}/usr/share/icons/hicolor/${size}x${size}/mimetypes/application-x-pmd.png" + ln -s "/usr/lib/${pkgname}/icons/prd_${size}.png" "${pkgdir}/usr/share/icons/hicolor/${size}x${size}/mimetypes/application-x-prd.png" + ln -s "/usr/lib/${pkgname}/icons/tmd_${size}.png" "${pkgdir}/usr/share/icons/hicolor/${size}x${size}/mimetypes/application-x-tmd.png" + done + + # Install desktop files + install -d "${pkgdir}/usr/share/applications" + install -m 755 -t "${pkgdir}/usr/share/applications" "${pkgname}-textmaker.desktop" + install -m 755 -t "${pkgdir}/usr/share/applications" "${pkgname}-planmaker.desktop" + install -m 755 -t "${pkgdir}/usr/share/applications" "${pkgname}-presentations.desktop" + + # Installing mime file + install -d "${pkgdir}/usr/share/mime/packages" + install -m 644 -t "${pkgdir}/usr/share/mime/packages" "${srcdir}/${pkgname}/mime/softmaker-freeoffice21.xml" +} diff --git a/x86_64/proprietary/freeoffice/freeoffice-planmaker b/x86_64/proprietary/freeoffice/freeoffice-planmaker new file mode 100644 index 0000000..bf19b72 --- /dev/null +++ b/x86_64/proprietary/freeoffice/freeoffice-planmaker @@ -0,0 +1,3 @@ +#!/bin/sh +# A script to run PlanMaker. +/usr/lib/freeoffice/planmaker "$@" diff --git a/x86_64/proprietary/freeoffice/freeoffice-planmaker.desktop b/x86_64/proprietary/freeoffice/freeoffice-planmaker.desktop new file mode 100644 index 0000000..ca017ea --- /dev/null +++ b/x86_64/proprietary/freeoffice/freeoffice-planmaker.desktop @@ -0,0 +1,80 @@ +[Desktop Entry] +Version=1.0 +Encoding=UTF-8 +Type=Application +GenericName=Spreadsheet +GenericName[am]=ሠንጠረዥ አስሊ +GenericName[ar]=جدول +GenericName[az]=Hesab Cədvəli +GenericName[bg]=Електронна таблица +GenericName[bn]=স্প্রেডশিট +GenericName[bs]=Spreadsheet +GenericName[ca]=Full de càlcul +GenericName[cs]=Tabulkový kalkulátor +GenericName[da]=Regneark +GenericName[de]=Tabellenkalkulation +GenericName[dz]=ཤོག་ཁྲམ། +GenericName[el]=Λογιστικό φύλλο +GenericName[en_CA]=Spreadsheet +GenericName[en_GB]=Spreadsheet +GenericName[en_ZA]=Spreadsheet +GenericName[es]=Hoja de cálculo +GenericName[et]=Arvutustabel +GenericName[eu]=Kalkulu-orria +GenericName[fi]=Taulukkolaskenta +GenericName[fil]=Spreadsheet +GenericName[fr]=Tableur +GenericName[ga]=Scarbhileog +GenericName[gl]=Folla de cálculo +GenericName[gu]=સ્પ્રેડશીટ +GenericName[he]=גיליון עבודה +GenericName[hr]=Proračunska tablica +GenericName[hu]=Táblázatkezelő +GenericName[is]=Töflureiknir +GenericName[it]=Foglio di calcolo +GenericName[ja]=スプレッドシート +GenericName[ka]=ელცხრილი +GenericName[ko]=스프레드시트 +GenericName[ku]=Tabloya Hesêb +GenericName[mk]=Табели +GenericName[ms]=Hamparan +GenericName[nb]=Regneark +GenericName[ne]=स्प्रेडसिट +GenericName[nl]=Rekenblad +GenericName[nr]=Spredtjhiti +GenericName[nso]=Letlakala la go ala tsebišo +GenericName[oc]=Fuelha de calcul +GenericName[pa]=ਸਾਰਣੀ +GenericName[pl]=Arkusz kalkulacyjny +GenericName[pt]=Folha de Cálculo +GenericName[pt_BR]=Planilha Eletrônica +GenericName[ru]=Электронная таблица +GenericName[rw]=Urupapurorusesuye +GenericName[sk]=Tabuľka +GenericName[sq]=Fleta elektronike +GenericName[sr]=Табеле +GenericName[sr@Latn]=Tabele +GenericName[st]=Leqephe la ho ala boitsebiso +GenericName[sv]=Kalkylark +GenericName[th]=ตารางคำนวน +GenericName[tl]=Spreadsheet +GenericName[tr]=Hesap Çizelgesi +GenericName[ts]=Xipredxiti +GenericName[uk]=Електронні таблиці +GenericName[vi]=Bảng tính +GenericName[wa]=Tåvleu +GenericName[xh]=Icwecwe leeseli +GenericName[zh_CN]=电子表格 +GenericName[zh_TW]=試算表 +GenericName[zu]=Ispredshit +Comment=PlanMaker lets you create all kinds of spreadsheets -- from simple ones to the most complex ones. Includes a high-caliber charting module. +Comment[de]=Mit PlanMaker können Sie alle Arten von Arbeitsblättern erstellen -- von ganz einfachen bis zu den komplexesten. Inklusive eines leistungsstarken Diagrammmoduls. +Terminal=false +Categories=Application;Office;Spreadsheet +MimeType=application/x-pmd;application/x-pmv;application/excel;application/x-excel;application/x-ms-excel;application/x-msexcel;application/x-sylk;application/x-xls;application/xls;application/vnd.ms-excel;application/vnd.stardivision.calc;application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;application/vnd.ms-excel.sheet.macroenabled.12;application/vnd.openxmlformats-officedocument.spreadsheetml.template;application/vnd.ms-excel.template.macroenabled.12; +Name=FreeOffice PlanMaker +Icon=freeoffice-planmaker +TryExec=freeoffice-planmaker +Exec=freeoffice-planmaker %F +StartupWMClass=pm + diff --git a/x86_64/proprietary/freeoffice/freeoffice-presentations b/x86_64/proprietary/freeoffice/freeoffice-presentations new file mode 100644 index 0000000..da587d3 --- /dev/null +++ b/x86_64/proprietary/freeoffice/freeoffice-presentations @@ -0,0 +1,3 @@ +#!/bin/sh +# A script to run SoftMaker Presentations. +/usr/lib/freeoffice/presentations "$@" diff --git a/x86_64/proprietary/freeoffice/freeoffice-presentations.desktop b/x86_64/proprietary/freeoffice/freeoffice-presentations.desktop new file mode 100644 index 0000000..b96b7a6 --- /dev/null +++ b/x86_64/proprietary/freeoffice/freeoffice-presentations.desktop @@ -0,0 +1,79 @@ +[Desktop Entry] +Version=1.0 +Encoding=UTF-8 +Type=Application +GenericName=Presentation +GenericName[am]=ትዕይንት +GenericName[az]=Təqdimat +GenericName[bg]=Презентация +GenericName[bn]=প্রেজেন্টেশন +GenericName[bs]=Prezentacija +GenericName[ca]=Presentació +GenericName[cs]=Prezentace +GenericName[da]=Præsentation +GenericName[de]=Präsentation +GenericName[dz]=གསལ་སྟོན། +GenericName[el]=Παρουσίαση +GenericName[en_CA]=Presentation +GenericName[en_GB]=Presentation +GenericName[en_ZA]=Presentation +GenericName[es]=Presentación +GenericName[et]=Esitlus +GenericName[eu]=Aurkezpena +GenericName[fi]=Esitys +GenericName[fil]=Pagtatanghal +GenericName[fr]=Présentation +GenericName[ga]=Toirbeathas +GenericName[gl]=Presentación +GenericName[gu]=રજૂઆત +GenericName[he]=מצגות +GenericName[hr]=Prezentacija +GenericName[hu]=Bemutatókészítő +GenericName[is]=Impress framsetning +GenericName[it]=Presentazione +GenericName[ja]=プレゼンテーション +GenericName[ka]=პრეზენტაცია +GenericName[ko]=프리젠테이션 +GenericName[ku]=Pêşkêşî +GenericName[mk]=Презентација +GenericName[ms]=Persembahan +GenericName[nb]=Presentasjon +GenericName[ne]=प्रस्तुति +GenericName[nl]=Presentatie +GenericName[nr]=Phrizentheyitjhini +GenericName[nso]=Tlhagišo +GenericName[oc]=Presentacion +GenericName[pa]=ਪੇਸ਼ਕਾਰੀ +GenericName[pl]=Prezentacja +GenericName[pt]=Apresentação +GenericName[pt_BR]=Apresentação +GenericName[ru]=Презентация +GenericName[rw]=Iyerekana +GenericName[sk]=Prezentácia +GenericName[sq]=Prezantime +GenericName[sr]=Презентација +GenericName[sr@Latn]=Prezentacija +GenericName[st]=Nehelano +GenericName[sv]=Presentation +GenericName[th]=งานนำเสนอ +GenericName[tl]=Pagtatanghal +GenericName[tr]=Sunum +GenericName[ts]=Nkombiso +GenericName[uk]=Презентації +GenericName[vi]=Trình diễn +GenericName[wa]=Prezintåcion +GenericName[xh]=Umboniso wenkcazelo +GenericName[zh_CN]=演示文稿 +GenericName[zh_TW]=簡報 +GenericName[zu]=Iprezenteyshin +Comment=The SoftMaker Presentations software lets you design any kind of presentation - even including special effects, animations, and transitions. +Comment[de]=SoftMaker Presentations lässt Sie beliebige Präsentationen gestalten - mit Effekten, Animationen und Transitionen. +Terminal=false +Categories=Application;Office;Presentation +MimeType=application/x-prd;application/x-prv;application/x-prs;application/ppt;application/mspowerpoint;application/vnd.ms-powerpoint;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/vnd.ms-powerpoint.presentation.macroenabled.12;application/vnd.openxmlformats-officedocument.presentationml.template;application/vnd.ms-powerpoint.template.macroenabled.12;application/vnd.ms-powerpoint.slideshow.macroEnabled.12;application/vnd.openxmlformats-officedocument.presentationml.slideshow; +Name=FreeOffice Presentations +Icon=freeoffice-presentations +TryExec=freeoffice-presentations +Exec=freeoffice-presentations %F +StartupWMClass=pr + diff --git a/x86_64/proprietary/freeoffice/freeoffice-textmaker b/x86_64/proprietary/freeoffice/freeoffice-textmaker new file mode 100644 index 0000000..0a0a61f --- /dev/null +++ b/x86_64/proprietary/freeoffice/freeoffice-textmaker @@ -0,0 +1,3 @@ +#!/bin/sh +# A script to run TextMaker. +/usr/lib/freeoffice/textmaker "$@" diff --git a/x86_64/proprietary/freeoffice/freeoffice-textmaker.desktop b/x86_64/proprietary/freeoffice/freeoffice-textmaker.desktop new file mode 100644 index 0000000..a125863 --- /dev/null +++ b/x86_64/proprietary/freeoffice/freeoffice-textmaker.desktop @@ -0,0 +1,78 @@ +[Desktop Entry] +Version=1.0 +Encoding=UTF-8 +Type=Application +GenericName=Word Processor +GenericName[am]=ጽሁፍ አቀናጅ +GenericName[ar]=معالج نصوص +GenericName[az]=Kəlmə İşlədici +GenericName[bg]=Текстообработка +GenericName[bn]=ওয়ার্ড প্রসেসর +GenericName[bs]=Word Processor +GenericName[ca]=Processador de textos +GenericName[cs]=Textový procesor +GenericName[da]=Tekstbehandler +GenericName[de]=Textverarbeitung +GenericName[dz]=ཡིག་སྦྱོར་པ། +GenericName[el]=Επεξεργαστής κειμένου +GenericName[en_CA]=Word Processor +GenericName[en_GB]=Word Processor +GenericName[en_ZA]=Word Processor +GenericName[es]=Procesador de textos +GenericName[et]=Kirjutaja +GenericName[eu]=Testu-prozesadorea +GenericName[fi]=Tekstinkäsittely +GenericName[fil]=Tagaproseso ng Salita +GenericName[fr]=Traitement de texte +GenericName[ga]=Próiseálaithe Focal +GenericName[gl]=Procesador de textos +GenericName[gu]=વર્ડ પ્રોસેસર +GenericName[he]=מעבד תמלילים +GenericName[hr]=Obrada teksta +GenericName[hu]=Szövegszerkesztő +GenericName[is]=Ritvinnsla +GenericName[it]=Word processor +GenericName[ja]=ワープロ +GenericName[ka]=ტექსტის რედაქტორი +GenericName[ko]=워드 프로세서 +GenericName[ku]=Bernameya nivîsandinê +GenericName[mk]=Процесор за текст +GenericName[ms]=Pemproses Perkataan +GenericName[nb]=Tekstbehandling +GenericName[ne]=शब्द प्रशोधक +GenericName[nl]=Tekstverwerker +GenericName[nr]=Isenzi Mitlolo +GenericName[nso]=Sehlami sa Lentšu +GenericName[oc]=Tractament de tèxt +GenericName[pa]=ਸ਼ਬਦਕਾਰ +GenericName[pl]=Edytor tekstu +GenericName[pt]=Processador de Texto +GenericName[pt_BR]=Editor de texto +GenericName[ru]=Редактор текстов +GenericName[sk]=Textový editor +GenericName[sq]=Procesues teksti +GenericName[sr]=Обрада текста +GenericName[sr@Latn]=Obrada teksta +GenericName[st]=Word Processor +GenericName[sv]=Ordbehandlare +GenericName[th]=พิมพ์งาน +GenericName[tl]=Tagaproseso ng Salita +GenericName[tr]=Kelime İşlemci +GenericName[ts]=Xitirhisi xa marito +GenericName[uk]=Текстовий процесор +GenericName[vi]=Bộ xử lý từ +GenericName[wa]=Aspougneu d' tecse +GenericName[xh]=Inkqubo Yokuqhuba Amagama +GenericName[zh_CN]=文字处理 +GenericName[zh_TW]=文書處理器 +GenericName[zu]=Umshini Ohlela Amagama +Comment=The TextMaker word processor lets you work on any type of document. +Comment[de]=Die Textverarbeitung TextMaker ermöglicht es Ihnen, beliebige Arten von Dokumenten zu erstellen und zu bearbeiten. +Terminal=false +Categories=Application;Office;WordProcessor +MimeType=application/x-tmd;application/x-tmv;application/msword;application/vnd.ms-word;application/x-doc;text/rtf;application/rtf;application/rtf;application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocument.text-template;application/vnd.stardivision.writer;application/vnd.sun.xml.writer;application/vnd.sun.xml.writer.template;application/vnd.openxmlformats-officedocument.wordprocessingml.document;application/vnd.ms-word.document.macroenabled.12;application/vnd.openxmlformats-officedocument.wordprocessingml.template;application/vnd.ms-word.template.macroenabled.12;application/x-pocket-word; +Name=FreeOffice TextMaker +Icon=freeoffice-textmaker +TryExec=freeoffice-textmaker +Exec=freeoffice-textmaker %F +StartupWMClass=tm diff --git a/x86_64/proprietary/steam/PKGBUILD b/x86_64/proprietary/steam/PKGBUILD new file mode 100644 index 0000000..f50f1e2 --- /dev/null +++ b/x86_64/proprietary/steam/PKGBUILD @@ -0,0 +1,89 @@ +pkgname=steam +pkgver=1.0.0.74 +pkgrel=4 +arch=('x86_64') +depends=( + # LIB64 + 'bash' 'alsa-lib' 'alsa-plugins' 'atk' 'cairo' 'curl' 'dbus-glib' 'fontconfig' + 'freetype2' 'freeglut' 'gdk-pixbuf' 'glew1.10' 'glib2' 'glu' 'gtk2+' + 'libcurl-compat' 'libcurl-gnutls' 'dbus' 'libdrm' 'libgcrypt15' 'libice' + 'libidn11' 'libjpeg6' 'libnm' 'libpng12' 'pulseaudio' 'librsvg' 'librtmp0' + 'libsm' 'libtheora' 'libtiff4' 'libudev0-shim' 'libusb' 'libva' 'vdpau' + 'libvorbis' 'libvpx1.3' 'libwrap' 'libxcomposite' 'libxcursor' 'libxft' + 'libxi' 'libxinerama' 'libxmu' 'libxrandr' 'libxrender' 'libxtst' + 'libxxf86vm' 'nspr' 'openal' 'openssl-1.0' 'pango' 'sdl' 'sdl2' + 'sdl2_image' 'sdl2_mixer' 'sdl2_ttf' 'sdl_image' 'sdl_mixer' 'sdl_ttf' + 'vulkan-icd-loader' 'glew-1.10' + + # LIB32 + 'lib32-alsa-lib' 'lib32-alsa-plugins' 'lib32-atk' 'lib32-cairo' 'lib32-curl' + 'lib32-dbus-glib' 'lib32-fontconfig' 'lib32-freetype2' 'lib32-freeglut' + 'lib32-gdk-pixbuf' 'lib32-glew1.10' 'lib32-glib2' 'lib32-glu' 'lib32-gtk2+' + 'lib32-libcaca' 'lib32-libcanberra' + 'lib32-cups' 'lib32-libcurl-compat' 'lib32-libcurl-gnutls' 'lib32-dbus' + 'lib32-libdrm' 'lib32-libgcrypt15' 'lib32-libice' 'lib32-libidn11' + 'lib32-libjpeg6' 'lib32-libnm' 'lib32-pipewire' 'lib32-libpng12' 'lib32-pulseaudio' + 'lib32-librtmp0' 'lib32-libsm' 'lib32-libtheora' 'lib32-libtiff4' + 'lib32-libudev0-shim' 'lib32-libusb' 'lib32-libva' 'lib32-vdpau' + 'lib32-libvorbis' 'lib32-libvpx1.3' 'lib32-libwrap' 'lib32-libxcomposite' + 'lib32-libxcursor' 'lib32-libxft' 'lib32-libxi' 'lib32-libxinerama' + 'lib32-libxmu' 'lib32-libxrandr' 'lib32-libxrender' 'lib32-libxtst' + 'lib32-libxxf86vm' 'lib32-nspr' 'lib32-openal' + 'lib32-openssl-1.0' 'lib32-pango' 'lib32-sdl' 'lib32-sdl2' 'lib32-sdl2_image' + 'lib32-sdl2_mixer' 'lib32-sdl2_ttf' 'lib32-sdl_image' 'lib32-sdl_mixer' + 'lib32-sdl_ttf' 'libcaca' 'libcanberra' 'cups' + 'lib32-vulkan-icd-loader' + 'lib32-libappindicator' 'lib32-libdbusmenu' 'lib32-glew-1.10') +source=(https://repo.steampowered.com/${pkgname}/pool/${pkgname}/s/${pkgname}/${pkgname}_${pkgver}.tar.gz + steam-wayland.sh + steam-wayland.desktop + steam-x11.sh + steam-x11.desktop) + +prepare() { + cd ${pkgname}-launcher + + # apply roundups for udev rules + sed -r 's|("0666")|"0660", TAG+="uaccess"|g' -i subprojects/steam-devices/60-steam-input.rules + sed -r 's|("misc")|\1, OPTIONS+="static_node=uinput"|g' -i subprojects/steam-devices/60-steam-input.rules + sed -r 's|(, TAG\+="uaccess")|, MODE="0660"\1|g' -i subprojects/steam-devices/60-steam-vr.rules +} + +package() { + cd ${pkgname}-launcher + + make DESTDIR="${pkgdir}" install + + install -Dm 755 "${srcdir}/steam-x11.sh" "${pkgdir}/usr/bin/steam-runtime" + install -d "${pkgdir}/usr/lib/steam" + mv "${pkgdir}/usr/bin/steam" "${pkgdir}/usr/lib/steam/steam" + ln -sf /usr/bin/steam-runtime "${pkgdir}/usr/bin/steam" + + install -Dm 644 COPYING steam_subscriber_agreement.txt -t "${pkgdir}/usr/share/licenses/${pkgname}" + install -Dm 644 debian/changelog -t "${pkgdir}/usr/share/doc/${pkgname}" + + # blank steamdeps because apt-get + ln -sf /usr/bin/true "${pkgdir}/usr/bin/steamdeps" + + install -Dm 644 subprojects/steam-devices/60-steam-input.rules \ + "${pkgdir}/usr/lib/udev/rules.d/70-steam-input.rules" + install -Dm 644 subprojects/steam-devices/60-steam-vr.rules \ + "${pkgdir}/usr/lib/udev/rules.d/70-steam-vr.rules" + + install -Dm 644 $srcdir/steam-wayland.desktop -t "${pkgdir}/usr/share/applications" + install -Dm 755 $srcdir/steam-wayland.sh "${pkgdir}/usr/bin/steam-wayland" + + install -Dm 644 $srcdir/steam-x11.desktop -t "${pkgdir}/usr/share/applications" + install -Dm 755 $srcdir/steam-x11.sh "${pkgdir}/usr/bin/steam-x11" + + install -d "${pkgdir}/usr/lib/steam" + ln -sf /usr/lib/libcurl.so.3 "${pkgdir}/usr/lib/steam/libcurl.so.3" + ln -sf /usr/lib/libcurl.so.4.2.0 "${pkgdir}/usr/lib/steam/libcurl.so.4" + ln -sf /usr/lib/libcurl.so.4.2.0 "${pkgdir}/usr/lib/steam/libcurl.so.4.2.0" + if [ "${CARCH}" == "x86_64" ]; then + install -d "${pkgdir}/usr/lib32/steam" + ln -sf /usr/lib32/libcurl.so.3 "${pkgdir}/usr/lib32/steam/libcurl.so.3" + ln -sf /usr/lib32/libcurl.so.4.2.0 "${pkgdir}/usr/lib32/steam/libcurl.so.4" + ln -sf /usr/lib32/libcurl.so.4.2.0 "${pkgdir}/usr/lib32/steam/libcurl.so.4.2.0" + fi +} diff --git a/x86_64/proprietary/steam/steam-wayland.desktop b/x86_64/proprietary/steam/steam-wayland.desktop new file mode 100644 index 0000000..b034970 --- /dev/null +++ b/x86_64/proprietary/steam/steam-wayland.desktop @@ -0,0 +1,283 @@ +[Desktop Entry] +Name=Steam Wayland +Comment=Application for managing and playing games on Steam +Comment[pt_BR]=Aplicativo para jogar e gerenciar jogos no Steam +Comment[bg]=Приложение за ръководене и пускане на игри в Steam +Comment[cs]=Aplikace pro spravování a hraní her ve službě Steam +Comment[da]=Applikation til at håndtere og spille spil på Steam +Comment[nl]=Applicatie voor het beheer en het spelen van games op Steam +Comment[fi]=Steamin pelien hallintaan ja pelaamiseen tarkoitettu sovellus +Comment[fr]=Application de gestion et d'utilisation des jeux sur Steam +Comment[de]=Anwendung zum Verwalten und Spielen von Spielen auf Steam +Comment[el]=Εφαρμογή διαχείρισης παιχνιδιών στο Steam +Comment[hu]=Alkalmazás a Steames játékok futtatásához és kezeléséhez +Comment[it]=Applicazione per la gestione e l'esecuzione di giochi su Steam +Comment[ja]=Steam 上でゲームを管理&プレイするためのアプリケーション +Comment[ko]=Steam에 있는 게임을 관리하고 플레이할 수 있는 응용 프로그램 +Comment[no]=Program for å administrere og spille spill på Steam +Comment[pt_PT]=Aplicação para organizar e executar jogos no Steam +Comment[pl]=Aplikacja do zarządzania i uruchamiania gier na platformie Steam +Comment[ro]=Aplicație pentru administrarea și jucatul jocurilor pe Steam +Comment[ru]=Приложение для игр и управления играми в Steam +Comment[es]=Aplicación para administrar y ejecutar juegos en Steam +Comment[sv]=Ett program för att hantera samt spela spel på Steam +Comment[zh_CN]=管理和进行 Steam 游戏的应用程序 +Comment[zh_TW]=管理並執行 Steam 遊戲的應用程式 +Comment[th]=โปรแกรมสำหรับจัดการและเล่นเกมบน Steam +Comment[tr]=Steam üzerinden oyun oynama ve düzenleme uygulaması +Comment[uk]=Програма для керування іграми та запуску ігор у Steam +Comment[vi]=Ứng dụng để quản lý và chơi trò chơi trên Steam +Exec=/usr/bin/steam-wayland %U +StartupWMClass=Steam +Icon=steam +Terminal=false +Type=Application +Categories=Network;FileTransfer;Game; +MimeType=x-scheme-handler/steam;x-scheme-handler/steamlink; +Actions=Store;Community;Library;Servers;Screenshots;News;Settings;BigPicture;Friends; +PrefersNonDefaultGPU=true +X-KDE-RunOnDiscreteGpu=true + +[Desktop Action Store] +Name=Store +Name[pt_BR]=Loja +Name[bg]=Магазин +Name[cs]=Obchod +Name[da]=Butik +Name[nl]=Winkel +Name[fi]=Kauppa +Name[fr]=Magasin +Name[de]=Shop +Name[el]=ΚΑΤΑΣΤΗΜΑ +Name[hu]=Áruház +Name[it]=Negozio +Name[ja]=ストア +Name[ko]=상점 +Name[no]=Butikk +Name[pt_PT]=Loja +Name[pl]=Sklep +Name[ro]=Magazin +Name[ru]=Магазин +Name[es]=Tienda +Name[sv]=Butik +Name[zh_CN]=商店 +Name[zh_TW]=商店 +Name[th]=ร้านค้า +Name[tr]=Mağaza +Name[uk]=Крамниця +Name[vi]=Cửa hàng +Exec=steam steam://store + +[Desktop Action Community] +Name=Community +Name[pt_BR]=Comunidade +Name[bg]=Общност +Name[cs]=Komunita +Name[da]=Fællesskab +Name[nl]=Community +Name[fi]=Yhteisö +Name[fr]=Communauté +Name[de]=Community +Name[el]=Κοινότητα +Name[hu]=Közösség +Name[it]=Comunità +Name[ja]=コミュニティ +Name[ko]=커뮤니티 +Name[no]=Samfunn +Name[pt_PT]=Comunidade +Name[pl]=Społeczność +Name[ro]=Comunitate +Name[ru]=Сообщество +Name[es]=Comunidad +Name[sv]=Gemenskap +Name[zh_CN]=社区 +Name[zh_TW]=社群 +Name[th]=ชุมชน +Name[tr]=Topluluk +Name[uk]=Спільнота +Name[vi]=Cộng đồng +Exec=steam steam://url/SteamIDControlPage + +[Desktop Action Library] +Name=Library +Name[pt_BR]=Biblioteca +Name[bg]=Библиотека +Name[cs]=Knihovna +Name[da]=Bibliotek +Name[nl]=Bibliotheek +Name[fi]=Kokoelma +Name[fr]=Bibliothèque +Name[de]=Bibliothek +Name[el]=Συλλογή +Name[hu]=Könyvtár +Name[it]=Libreria +Name[ja]=ライブラリ +Name[ko]=라이브러리 +Name[no]=Bibliotek +Name[pt_PT]=Biblioteca +Name[pl]=Biblioteka +Name[ro]=Colecţie +Name[ru]=Библиотека +Name[es]=Biblioteca +Name[sv]=Bibliotek +Name[zh_CN]=库 +Name[zh_TW]=收藏庫 +Name[th]=คลัง +Name[tr]=Kütüphane +Name[uk]=Бібліотека +Name[vi]=Thư viện +Exec=steam steam://open/games + +[Desktop Action Servers] +Name=Servers +Name[pt_BR]=Servidores +Name[bg]=Сървъри +Name[cs]=Servery +Name[da]=Servere +Name[nl]=Servers +Name[fi]=Palvelimet +Name[fr]=Serveurs +Name[de]=Server +Name[el]=Διακομιστές +Name[hu]=Szerverek +Name[it]=Server +Name[ja]=サーバー +Name[ko]=서버 +Name[no]=Tjenere +Name[pt_PT]=Servidores +Name[pl]=Serwery +Name[ro]=Servere +Name[ru]=Серверы +Name[es]=Servidores +Name[sv]=Servrar +Name[zh_CN]=服务器 +Name[zh_TW]=伺服器 +Name[th]=เซิร์ฟเวอร์ +Name[tr]=Sunucular +Name[uk]=Сервери +Name[vi]=Máy chủ +Exec=steam steam://open/servers + +[Desktop Action Screenshots] +Name=Screenshots +Name[pt_BR]=Capturas de tela +Name[bg]=Снимки +Name[cs]=Snímky obrazovky +Name[da]=Skærmbilleder +Name[nl]=Screenshots +Name[fi]=Kuvankaappaukset +Name[fr]=Captures d'écran +Name[de]=Screenshots +Name[el]=Φωτογραφίες +Name[hu]=Képernyőmentések +Name[it]=Screenshot +Name[ja]=スクリーンショット +Name[ko]=스크린샷 +Name[no]=Skjermbilder +Name[pt_PT]=Capturas de ecrã +Name[pl]=Zrzuty ekranu +Name[ro]=Capturi de ecran +Name[ru]=Скриншоты +Name[es]=Capturas +Name[sv]=Skärmdumpar +Name[zh_CN]=截图 +Name[zh_TW]=螢幕擷圖 +Name[th]=ภาพหน้าจอ +Name[tr]=Ekran Görüntüleri +Name[uk]=Скріншоти +Name[vi]=Ảnh chụp +Exec=steam steam://open/screenshots + +[Desktop Action News] +Name=News +Name[pt_BR]=Notícias +Name[bg]=Новини +Name[cs]=Zprávy +Name[da]=Nyheder +Name[nl]=Nieuws +Name[fi]=Uutiset +Name[fr]=Actualités +Name[de]=Neuigkeiten +Name[el]=Νέα +Name[hu]=Hírek +Name[it]=Notizie +Name[ja]=ニュース +Name[ko]=뉴스 +Name[no]=Nyheter +Name[pt_PT]=Novidades +Name[pl]=Aktualności +Name[ro]=Știri +Name[ru]=Новости +Name[es]=Noticias +Name[sv]=Nyheter +Name[zh_CN]=新闻 +Name[zh_TW]=新聞 +Name[th]=ข่าวสาร +Name[tr]=Haberler +Name[uk]=Новини +Name[vi]=Tin tức +Exec=steam steam://open/news + +[Desktop Action Settings] +Name=Settings +Name[pt_BR]=Configurações +Name[bg]=Настройки +Name[cs]=Nastavení +Name[da]=Indstillinger +Name[nl]=Instellingen +Name[fi]=Asetukset +Name[fr]=Paramètres +Name[de]=Einstellungen +Name[el]=Ρυθμίσεις +Name[hu]=Beállítások +Name[it]=Impostazioni +Name[ja]=設定 +Name[ko]=설정 +Name[no]=Innstillinger +Name[pt_PT]=Definições +Name[pl]=Ustawienia +Name[ro]=Setări +Name[ru]=Настройки +Name[es]=Parámetros +Name[sv]=Inställningar +Name[zh_CN]=设置 +Name[zh_TW]=設定 +Name[th]=การตั้งค่า +Name[tr]=Ayarlar +Name[uk]=Налаштування +Name[vi]=Thiết lập +Exec=steam steam://open/settings + +[Desktop Action BigPicture] +Name=Big Picture +Exec=steam steam://open/bigpicture + +[Desktop Action Friends] +Name=Friends +Name[pt_BR]=Amigos +Name[bg]=Приятели +Name[cs]=Přátelé +Name[da]=Venner +Name[nl]=Vrienden +Name[fi]=Kaverit +Name[fr]=Amis +Name[de]=Freunde +Name[el]=Φίλοι +Name[hu]=Barátok +Name[it]=Amici +Name[ja]=フレンド +Name[ko]=친구 +Name[no]=Venner +Name[pt_PT]=Amigos +Name[pl]=Znajomi +Name[ro]=Prieteni +Name[ru]=Друзья +Name[es]=Amigos +Name[sv]=Vänner +Name[zh_CN]=好友 +Name[zh_TW]=好友 +Name[th]=เพื่อน +Name[tr]=Arkadaşlar +Name[uk]=Друзі +Name[vi]=Bạn bè +Exec=steam steam://open/friends diff --git a/x86_64/proprietary/steam/steam-wayland.sh b/x86_64/proprietary/steam/steam-wayland.sh new file mode 100755 index 0000000..1a1cc81 --- /dev/null +++ b/x86_64/proprietary/steam/steam-wayland.sh @@ -0,0 +1,10 @@ +#!/bin/bash +export STEAM_RUNTIME=0 +export STEAM_RUNTIME_HEAVY=0 +# Workaround for dbus fatal termination related coredumps (SIGABRT) +# https://github.com/ValveSoftware/steam-for-linux/issues/4464 +export DBUS_FATAL_WARNINGS=0 +# Override some libraries as these are what games linked against. +export LD_LIBRARY_PATH="/usr/lib/steam:/usr/lib32/steam${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH" +export SDL_VIDEODRIVEVER=wayland +exec /usr/lib/steam/steam "$@" diff --git a/x86_64/proprietary/steam/steam-x11.desktop b/x86_64/proprietary/steam/steam-x11.desktop new file mode 100644 index 0000000..2e5b75b --- /dev/null +++ b/x86_64/proprietary/steam/steam-x11.desktop @@ -0,0 +1,283 @@ +[Desktop Entry] +Name=Steam X11 +Comment=Application for managing and playing games on Steam +Comment[pt_BR]=Aplicativo para jogar e gerenciar jogos no Steam +Comment[bg]=Приложение за ръководене и пускане на игри в Steam +Comment[cs]=Aplikace pro spravování a hraní her ve službě Steam +Comment[da]=Applikation til at håndtere og spille spil på Steam +Comment[nl]=Applicatie voor het beheer en het spelen van games op Steam +Comment[fi]=Steamin pelien hallintaan ja pelaamiseen tarkoitettu sovellus +Comment[fr]=Application de gestion et d'utilisation des jeux sur Steam +Comment[de]=Anwendung zum Verwalten und Spielen von Spielen auf Steam +Comment[el]=Εφαρμογή διαχείρισης παιχνιδιών στο Steam +Comment[hu]=Alkalmazás a Steames játékok futtatásához és kezeléséhez +Comment[it]=Applicazione per la gestione e l'esecuzione di giochi su Steam +Comment[ja]=Steam 上でゲームを管理&プレイするためのアプリケーション +Comment[ko]=Steam에 있는 게임을 관리하고 플레이할 수 있는 응용 프로그램 +Comment[no]=Program for å administrere og spille spill på Steam +Comment[pt_PT]=Aplicação para organizar e executar jogos no Steam +Comment[pl]=Aplikacja do zarządzania i uruchamiania gier na platformie Steam +Comment[ro]=Aplicație pentru administrarea și jucatul jocurilor pe Steam +Comment[ru]=Приложение для игр и управления играми в Steam +Comment[es]=Aplicación para administrar y ejecutar juegos en Steam +Comment[sv]=Ett program för att hantera samt spela spel på Steam +Comment[zh_CN]=管理和进行 Steam 游戏的应用程序 +Comment[zh_TW]=管理並執行 Steam 遊戲的應用程式 +Comment[th]=โปรแกรมสำหรับจัดการและเล่นเกมบน Steam +Comment[tr]=Steam üzerinden oyun oynama ve düzenleme uygulaması +Comment[uk]=Програма для керування іграми та запуску ігор у Steam +Comment[vi]=Ứng dụng để quản lý và chơi trò chơi trên Steam +Exec=/usr/bin/steam-x11 %U +StartupWMClass=Steam +Icon=steam +Terminal=false +Type=Application +Categories=Network;FileTransfer;Game; +MimeType=x-scheme-handler/steam;x-scheme-handler/steamlink; +Actions=Store;Community;Library;Servers;Screenshots;News;Settings;BigPicture;Friends; +PrefersNonDefaultGPU=true +X-KDE-RunOnDiscreteGpu=true + +[Desktop Action Store] +Name=Store +Name[pt_BR]=Loja +Name[bg]=Магазин +Name[cs]=Obchod +Name[da]=Butik +Name[nl]=Winkel +Name[fi]=Kauppa +Name[fr]=Magasin +Name[de]=Shop +Name[el]=ΚΑΤΑΣΤΗΜΑ +Name[hu]=Áruház +Name[it]=Negozio +Name[ja]=ストア +Name[ko]=상점 +Name[no]=Butikk +Name[pt_PT]=Loja +Name[pl]=Sklep +Name[ro]=Magazin +Name[ru]=Магазин +Name[es]=Tienda +Name[sv]=Butik +Name[zh_CN]=商店 +Name[zh_TW]=商店 +Name[th]=ร้านค้า +Name[tr]=Mağaza +Name[uk]=Крамниця +Name[vi]=Cửa hàng +Exec=steam steam://store + +[Desktop Action Community] +Name=Community +Name[pt_BR]=Comunidade +Name[bg]=Общност +Name[cs]=Komunita +Name[da]=Fællesskab +Name[nl]=Community +Name[fi]=Yhteisö +Name[fr]=Communauté +Name[de]=Community +Name[el]=Κοινότητα +Name[hu]=Közösség +Name[it]=Comunità +Name[ja]=コミュニティ +Name[ko]=커뮤니티 +Name[no]=Samfunn +Name[pt_PT]=Comunidade +Name[pl]=Społeczność +Name[ro]=Comunitate +Name[ru]=Сообщество +Name[es]=Comunidad +Name[sv]=Gemenskap +Name[zh_CN]=社区 +Name[zh_TW]=社群 +Name[th]=ชุมชน +Name[tr]=Topluluk +Name[uk]=Спільнота +Name[vi]=Cộng đồng +Exec=steam steam://url/SteamIDControlPage + +[Desktop Action Library] +Name=Library +Name[pt_BR]=Biblioteca +Name[bg]=Библиотека +Name[cs]=Knihovna +Name[da]=Bibliotek +Name[nl]=Bibliotheek +Name[fi]=Kokoelma +Name[fr]=Bibliothèque +Name[de]=Bibliothek +Name[el]=Συλλογή +Name[hu]=Könyvtár +Name[it]=Libreria +Name[ja]=ライブラリ +Name[ko]=라이브러리 +Name[no]=Bibliotek +Name[pt_PT]=Biblioteca +Name[pl]=Biblioteka +Name[ro]=Colecţie +Name[ru]=Библиотека +Name[es]=Biblioteca +Name[sv]=Bibliotek +Name[zh_CN]=库 +Name[zh_TW]=收藏庫 +Name[th]=คลัง +Name[tr]=Kütüphane +Name[uk]=Бібліотека +Name[vi]=Thư viện +Exec=steam steam://open/games + +[Desktop Action Servers] +Name=Servers +Name[pt_BR]=Servidores +Name[bg]=Сървъри +Name[cs]=Servery +Name[da]=Servere +Name[nl]=Servers +Name[fi]=Palvelimet +Name[fr]=Serveurs +Name[de]=Server +Name[el]=Διακομιστές +Name[hu]=Szerverek +Name[it]=Server +Name[ja]=サーバー +Name[ko]=서버 +Name[no]=Tjenere +Name[pt_PT]=Servidores +Name[pl]=Serwery +Name[ro]=Servere +Name[ru]=Серверы +Name[es]=Servidores +Name[sv]=Servrar +Name[zh_CN]=服务器 +Name[zh_TW]=伺服器 +Name[th]=เซิร์ฟเวอร์ +Name[tr]=Sunucular +Name[uk]=Сервери +Name[vi]=Máy chủ +Exec=steam steam://open/servers + +[Desktop Action Screenshots] +Name=Screenshots +Name[pt_BR]=Capturas de tela +Name[bg]=Снимки +Name[cs]=Snímky obrazovky +Name[da]=Skærmbilleder +Name[nl]=Screenshots +Name[fi]=Kuvankaappaukset +Name[fr]=Captures d'écran +Name[de]=Screenshots +Name[el]=Φωτογραφίες +Name[hu]=Képernyőmentések +Name[it]=Screenshot +Name[ja]=スクリーンショット +Name[ko]=스크린샷 +Name[no]=Skjermbilder +Name[pt_PT]=Capturas de ecrã +Name[pl]=Zrzuty ekranu +Name[ro]=Capturi de ecran +Name[ru]=Скриншоты +Name[es]=Capturas +Name[sv]=Skärmdumpar +Name[zh_CN]=截图 +Name[zh_TW]=螢幕擷圖 +Name[th]=ภาพหน้าจอ +Name[tr]=Ekran Görüntüleri +Name[uk]=Скріншоти +Name[vi]=Ảnh chụp +Exec=steam steam://open/screenshots + +[Desktop Action News] +Name=News +Name[pt_BR]=Notícias +Name[bg]=Новини +Name[cs]=Zprávy +Name[da]=Nyheder +Name[nl]=Nieuws +Name[fi]=Uutiset +Name[fr]=Actualités +Name[de]=Neuigkeiten +Name[el]=Νέα +Name[hu]=Hírek +Name[it]=Notizie +Name[ja]=ニュース +Name[ko]=뉴스 +Name[no]=Nyheter +Name[pt_PT]=Novidades +Name[pl]=Aktualności +Name[ro]=Știri +Name[ru]=Новости +Name[es]=Noticias +Name[sv]=Nyheter +Name[zh_CN]=新闻 +Name[zh_TW]=新聞 +Name[th]=ข่าวสาร +Name[tr]=Haberler +Name[uk]=Новини +Name[vi]=Tin tức +Exec=steam steam://open/news + +[Desktop Action Settings] +Name=Settings +Name[pt_BR]=Configurações +Name[bg]=Настройки +Name[cs]=Nastavení +Name[da]=Indstillinger +Name[nl]=Instellingen +Name[fi]=Asetukset +Name[fr]=Paramètres +Name[de]=Einstellungen +Name[el]=Ρυθμίσεις +Name[hu]=Beállítások +Name[it]=Impostazioni +Name[ja]=設定 +Name[ko]=설정 +Name[no]=Innstillinger +Name[pt_PT]=Definições +Name[pl]=Ustawienia +Name[ro]=Setări +Name[ru]=Настройки +Name[es]=Parámetros +Name[sv]=Inställningar +Name[zh_CN]=设置 +Name[zh_TW]=設定 +Name[th]=การตั้งค่า +Name[tr]=Ayarlar +Name[uk]=Налаштування +Name[vi]=Thiết lập +Exec=steam steam://open/settings + +[Desktop Action BigPicture] +Name=Big Picture +Exec=steam steam://open/bigpicture + +[Desktop Action Friends] +Name=Friends +Name[pt_BR]=Amigos +Name[bg]=Приятели +Name[cs]=Přátelé +Name[da]=Venner +Name[nl]=Vrienden +Name[fi]=Kaverit +Name[fr]=Amis +Name[de]=Freunde +Name[el]=Φίλοι +Name[hu]=Barátok +Name[it]=Amici +Name[ja]=フレンド +Name[ko]=친구 +Name[no]=Venner +Name[pt_PT]=Amigos +Name[pl]=Znajomi +Name[ro]=Prieteni +Name[ru]=Друзья +Name[es]=Amigos +Name[sv]=Vänner +Name[zh_CN]=好友 +Name[zh_TW]=好友 +Name[th]=เพื่อน +Name[tr]=Arkadaşlar +Name[uk]=Друзі +Name[vi]=Bạn bè +Exec=steam steam://open/friends diff --git a/x86_64/proprietary/steam/steam-x11.sh b/x86_64/proprietary/steam/steam-x11.sh new file mode 100755 index 0000000..86536b0 --- /dev/null +++ b/x86_64/proprietary/steam/steam-x11.sh @@ -0,0 +1,9 @@ +#!/bin/bash +export STEAM_RUNTIME=0 +export STEAM_RUNTIME_HEAVY=0 +# Workaround for dbus fatal termination related coredumps (SIGABRT) +# https://github.com/ValveSoftware/steam-for-linux/issues/4464 +export DBUS_FATAL_WARNINGS=0 +# Override some libraries as these are what games linked against. +export LD_LIBRARY_PATH="/usr/lib/steam:/usr/lib32/steam${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH" +exec /usr/lib/steam/steam "$@" diff --git a/x86_64/proprietary/team-viewer/PKGBUILD b/x86_64/proprietary/team-viewer/PKGBUILD new file mode 100644 index 0000000..55135db --- /dev/null +++ b/x86_64/proprietary/team-viewer/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=team-viewer +pkgver=14x +pkgrel=1 +arch=('x86_64') +depends=(glibc qt libglvnd mesa dbus lz4 icu glib2 nss shared-mime-info libx11 libxcb libxcomposite libxcursor libxdamage libxext + libxfixes libxi libxrender libxtst libxrandr libxkbcommon libxss systemd pcre sqlite3 libxau libxdmcp libcap libgcrypt libgpg-error minizip) +source=(https://download.teamviewer.com/download/linux/version_14x/teamviewer_amd64.tar.xz) + +build() { + cd $pkgname-$pkgver + + echo "Nothing to do" +} + +package() { + cd $pkgname-$pkgver + + +} diff --git a/x86_64/python/PKGBUILD b/x86_64/python/PKGBUILD new file mode 100644 index 0000000..4b999c1 --- /dev/null +++ b/x86_64/python/PKGBUILD @@ -0,0 +1,24 @@ +pkgname= +rname= +pkgver= +pkgrel=1 +arch=(x86_64) +depends=(python3) +makedepends=(python3-pip) +source=() + +prepare() { + pip3 install setuptools +} + +build() { + cd $rname-$pkgver + + +} + +package() { + cd $rname-$pkgver + + +} diff --git a/x86_64/python/build-all.sh b/x86_64/python/build-all.sh new file mode 100755 index 0000000..74e82d3 --- /dev/null +++ b/x86_64/python/build-all.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +function build_core() { + shopt -s globstar + for d in ./*/ ; do + cd "$d" + echo " " + echo "[!]: Building ${d}" + $@ + cd .. + done +} + +build_core "makepkg" diff --git a/x86_64/python/python2-pip/PKGBUILD b/x86_64/python/python2-pip/PKGBUILD new file mode 100644 index 0000000..b57b86f --- /dev/null +++ b/x86_64/python/python2-pip/PKGBUILD @@ -0,0 +1,19 @@ +pkgname=python2-pip +pkgver=18.0 +pkgrel=1 +arch=('x86_64') +depends=('python2' 'python2-setuptools') +source=(https://github.com/pypa/pip/archive/$pkgver.tar.gz) + +build() { + cd pip-$pkgver + + python2 setup.py build +} + +package() { + cd pip-$pkgver + + python2 setup.py install --prefix=/usr --root="$pkgdir" + rm $pkgdir/usr/bin/pip +} diff --git a/x86_64/python/python2-setuptools/PKGBUILD b/x86_64/python/python2-setuptools/PKGBUILD new file mode 100644 index 0000000..9592650 --- /dev/null +++ b/x86_64/python/python2-setuptools/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=python2-setuptools +pkgver=44.1.1 +pkgrel=1 +arch=('x86_64') +makedepends=('python2') +depends=('python2') +source=("https://github.com/pypa/setuptools/archive/v$pkgver.tar.gz") +export SETUPTOOLS_INSTALL_WINDOWS_SPECIFIC_FILES=0 + +build() { + cd setuptools-$pkgver + sed -i -e "s|^#\!.*/usr/bin/env python|#!/usr/bin/env python2|" setuptools/command/easy_install.py + + python2 bootstrap.py + python2 setup.py build +} + +package() { + cd setuptools-$pkgver + + python2 setup.py install --prefix=/usr --root=$pkgdir --optimize=1 --skip-build + + rm -f $pkgdir/usr/bin/easy_install +} diff --git a/x86_64/python/python3-alpm/PKGBUILD b/x86_64/python/python3-alpm/PKGBUILD new file mode 100644 index 0000000..5451077 --- /dev/null +++ b/x86_64/python/python3-alpm/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=python3-alpm +pkgver=0.10.6 +pkgrel=1 +arch=('x86_64') +replace=(python-alpm) +makedepends=('git' 'python3-pip' 'python-pkgconfig') +depends=('python3' 'bottle') +source=("git+https://gitlab.archlinux.org/archlinux/pyalpm.git#tag=$pkgver") + +build() { + pip3 install setuptools + + cd pyalpm + python setup.py build +} + +package() { + cd pyalpm + + python setup.py install --root=${pkgdir} +} diff --git a/x86_64/python/python3-bottle/PKGBUILD b/x86_64/python/python3-bottle/PKGBUILD new file mode 100644 index 0000000..cac7221 --- /dev/null +++ b/x86_64/python/python3-bottle/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=python3-bottle +rname=bottle +pkgver=0.12.21 +pkgrel=1 +arch=(x86_64) +depends=(python3) +makedepends=(python3-pip) +source=(https://github.com/defnull/$rname/archive/$pkgver.tar.gz) + +prepare() { + pip3 install setuptools +} + +build() { + cd $rname-$pkgver + + python3 setup.py build +} + +package() { + cd $rname-$pkgver + + python3 setup.py install --root=$pkgdir --optimize=1 --skip-build +} diff --git a/x86_64/python/python3-cairo/PKGBUILD b/x86_64/python/python3-cairo/PKGBUILD new file mode 100644 index 0000000..c71bda6 --- /dev/null +++ b/x86_64/python/python3-cairo/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=python3-cairo +pkgver=1.21.0 +pkgrel=1 +arch=('x86_64') +replace=(python-cairo) +depends=(cairo python3) +makedepends=(python3-pip) +source=(https://github.com/pygobject/pycairo/releases/download/v$pkgver/pycairo-$pkgver.tar.gz) + +build() { + # Install deps + pip3 install setuptools + + cd pycairo-$pkgver + python setup.py build +} + +package() { + cd pycairo-$pkgver + + python setup.py install --root="$pkgdir" --skip-build --optimize=1 +} diff --git a/x86_64/python/python3-dbus/PKGBUILD b/x86_64/python/python3-dbus/PKGBUILD new file mode 100644 index 0000000..fdb2789 --- /dev/null +++ b/x86_64/python/python3-dbus/PKGBUILD @@ -0,0 +1,30 @@ +pkgname=python3-dbus +rname=dbus-python +pkgver=1.2.18 +pkgrel=1 +arch=(x86_64) +depends=(dbus glib2) +makedepends=(python3-pip autoconf-archive) +source=(https://dbus.freedesktop.org/releases/${rname}/${rname}-${pkgver}.tar.gz) + +prepare() { + pip3 install setuptools sphinx + + cd $rname-$pkgver + autoreconf -fi + + ./configure \ + --prefix=/usr +} + +build() { + cd $rname-$pkgver + + make +} + +package() { + cd $rname-$pkgver + + make DESTDIR="${pkgdir}" install +} diff --git a/x86_64/python/python3-fonttools/PKGBUILD b/x86_64/python/python3-fonttools/PKGBUILD new file mode 100644 index 0000000..97d6f5d --- /dev/null +++ b/x86_64/python/python3-fonttools/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=python3-fonttools +rname=fonttools +pkgver=4.36.0 +pkgrel=1 +arch=(x86_64) +depends=(python3 brotli) +makedepends=(python3-pip) +source=(https://github.com/$rname/$rname/archive/$pkgver/$pkgver.tar.gz) + +prepare() { + pip3 install setuptools build wheel installer +} + +build() { + cd $rname-$pkgver + + python -m build -wn +} + +package() { + cd $rname-$pkgver + + python -m installer -d "$pkgdir" dist/*.whl +} diff --git a/x86_64/python/python3-gobject/PKGBUILD b/x86_64/python/python3-gobject/PKGBUILD new file mode 100644 index 0000000..d33d2af --- /dev/null +++ b/x86_64/python/python3-gobject/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=python3-gobject +pkgver=3.42.1 +pkgrel=1 +arch=(x86_64) +replace=(python-gobject) +depends=(gobject-introspection python3 python3-cairo) +makedepends=(cairo gobject-introspection git meson python3-pip) +commitid=110abf1868c7d4175a3a6944e25b98c957e81db4 # 3.42.1 +source=("git+https://gitlab.gnome.org/GNOME/pygobject.git#commit=$commitid") + +build() { + meson pygobject build --prefix=/usr + + meson compile -C build +} + +package() { + meson install -C build --destdir "$pkgdir" + + # Compile and optimize + python -m compileall -d /usr/lib "$pkgdir/usr/lib" + python -O -m compileall -d /usr/lib "$pkgdir/usr/lib" +} diff --git a/x86_64/python/python3-libvirt/PKGBUILD b/x86_64/python/python3-libvirt/PKGBUILD new file mode 100644 index 0000000..5540350 --- /dev/null +++ b/x86_64/python/python3-libvirt/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=python3-libvirt +rname=libvirt-python +pkgver=8.5.0 +pkgrel=1 +arch=(x86_64) +depends=(libvirt python3) +makedepends=(python3-pip) +source=(https://libvirt.org/sources/python/libvirt-python-${pkgver}.tar.gz) + +prepare() { + pip3 install setuptools +} + +build() { + cd $rname-$pkgver + + python setup.py build +} + +package() { + cd $rname-$pkgver + + python setup.py install --root=$pkgdir --optimize=1 +} diff --git a/x86_64/python/python3-pip/PKGBUILD b/x86_64/python/python3-pip/PKGBUILD new file mode 100644 index 0000000..a7c9f2d --- /dev/null +++ b/x86_64/python/python3-pip/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=python3-pip +pkgver=21.3.1 +pkgrel=2 +arch=('x86_64') +depends=('python3') +source=(https://github.com/pypa/pip/archive/$pkgver.tar.gz) + +build() { + cd pip-$pkgver + + python setup.py build +} + +package() { + cd pip-$pkgver + + python setup.py install --prefix=/usr --root="$pkgdir" +} diff --git a/x86_64/python/python3-pip/get-pip.py b/x86_64/python/python3-pip/get-pip.py new file mode 100644 index 0000000..f185543 --- /dev/null +++ b/x86_64/python/python3-pip/get-pip.py @@ -0,0 +1,27081 @@ +#!/usr/bin/env python +# +# Hi There! +# +# You may be wondering what this giant blob of binary data here is, you might +# even be worried that we're up to something nefarious (good for you for being +# paranoid!). This is a base85 encoding of a zip file, this zip file contains +# an entire copy of pip (version 21.3.1). +# +# Pip is a thing that installs packages, pip itself is a package that someone +# might want to install, especially if they're looking to run this get-pip.py +# script. Pip has a lot of code to deal with the security of installing +# packages, various edge cases on various platforms, and other such sort of +# "tribal knowledge" that has been encoded in its code base. Because of this +# we basically include an entire copy of pip inside this blob. We do this +# because the alternatives are attempt to implement a "minipip" that probably +# doesn't do things correctly and has weird edge cases, or compress pip itself +# down into a single file. +# +# If you're wondering how this is created, it is generated using +# `scripts/generate.py` in https://github.com/pypa/get-pip. + +import sys + +this_python = sys.version_info[:2] +min_version = (3, 6) +if this_python < min_version: + message_parts = [ + "This script does not work on Python {}.{}".format(*this_python), + "The minimum supported Python version is {}.{}.".format(*min_version), + "Please use https://bootstrap.pypa.io/pip/{}.{}/get-pip.py instead.".format(*this_python), + ] + print("ERROR: " + " ".join(message_parts)) + sys.exit(1) + + +import os.path +import pkgutil +import shutil +import tempfile +from base64 import b85decode + + +def determine_pip_install_arguments(): + implicit_pip = True + implicit_setuptools = True + implicit_wheel = True + + # Check if the user has requested us not to install setuptools + if "--no-setuptools" in sys.argv or os.environ.get("PIP_NO_SETUPTOOLS"): + args = [x for x in sys.argv[1:] if x != "--no-setuptools"] + implicit_setuptools = False + else: + args = sys.argv[1:] + + # Check if the user has requested us not to install wheel + if "--no-wheel" in args or os.environ.get("PIP_NO_WHEEL"): + args = [x for x in args if x != "--no-wheel"] + implicit_wheel = False + + # We only want to implicitly install setuptools and wheel if they don't + # already exist on the target platform. + if implicit_setuptools: + try: + import setuptools # noqa + implicit_setuptools = False + except ImportError: + pass + if implicit_wheel: + try: + import wheel # noqa + implicit_wheel = False + except ImportError: + pass + + # Add any implicit installations to the end of our args + if implicit_pip: + args += ["pip"] + if implicit_setuptools: + args += ["setuptools"] + if implicit_wheel: + args += ["wheel"] + + return ["install", "--upgrade", "--force-reinstall"] + args + + +def monkeypatch_for_cert(tmpdir): + """Patches `pip install` to provide default certificate with the lowest priority. + + This ensures that the bundled certificates are used unless the user specifies a + custom cert via any of pip's option passing mechanisms (config, env-var, CLI). + + A monkeypatch is the easiest way to achieve this, without messing too much with + the rest of pip's internals. + """ + from pip._internal.commands.install import InstallCommand + + # We want to be using the internal certificates. + cert_path = os.path.join(tmpdir, "cacert.pem") + with open(cert_path, "wb") as cert: + cert.write(pkgutil.get_data("pip._vendor.certifi", "cacert.pem")) + + install_parse_args = InstallCommand.parse_args + + def cert_parse_args(self, args): + if not self.parser.get_default_values().cert: + # There are no user provided cert -- force use of bundled cert + self.parser.defaults["cert"] = cert_path # calculated above + return install_parse_args(self, args) + + InstallCommand.parse_args = cert_parse_args + + +def bootstrap(tmpdir): + monkeypatch_for_cert(tmpdir) + + # Execute the included pip and use it to install the latest pip and + # setuptools from PyPI + from pip._internal.cli.main import main as pip_entry_point + args = determine_pip_install_arguments() + sys.exit(pip_entry_point(args)) + + +def main(): + tmpdir = None + try: + # Create a temporary working directory + tmpdir = tempfile.mkdtemp() + + # Unpack the zipfile into the temporary directory + pip_zip = os.path.join(tmpdir, "pip.zip") + with open(pip_zip, "wb") as fp: + fp.write(b85decode(DATA.replace(b"\n", b""))) + + # Add the zipfile to sys.path so that we can import it + sys.path.insert(0, pip_zip) + + # Run the bootstrap + bootstrap(tmpdir=tmpdir) + finally: + # Clean up our temporary working directory + if tmpdir: + shutil.rmtree(tmpdir, ignore_errors=True) + + +DATA = b""" +P)h>@6aWAK2mt$eR#TliG(h+O003nH000jF003}la4%n9X>MtBUtcb8c|B0UO2j}6z0X&KUUXrdvMRV +16ubz6s0VM$QfAw<4YV^ulDhQoop$MlK*;0ehKz6 +^g4|bOsV`^+*aO7_tw^Cd$4zs{Pl#j>6{|X*AaQ6!2wJ?w>%d+2&1X4Rc!^r6h-hMtH_d5{IF3D`nKTt~p1QY-O00;p4c~(;+8{@xi0ssK6 +1ONaJ0001RX>c!JUu|J&ZeL$6aCu!*!ET%|5WVviBXU@FMMw_qp;5O|rCxIBA*z%^Qy~|I#aghDZI*1 +mzHbcdCgFtbH*em&nbG}VT_EcdJ^%Uh<#$rfXmjvMazjtt+Y{4fL(0@tjn1(F!nz|6RBOjouLCQKB%tCsn +f_O;(TkT9D!5I2G1vZWcORK< +*}iONjWAr8Zm1&KuL0jC{@?djd+x5R}RGfYPBawx08>U(W?WmDk1T9S4?epCt{Z(ueTz)EC*E`5mT15 +-&2~-DsS-6=uU3I|BmObEPJI*Sr)^2!Om@h-$wOJl_c@O>A_3OHg5wqIeD(E7`y@m0ou*N^~8Scf|wu +`N_HtL5`*k&gASg%W(oQp9a7<~IpnR_S}F8z9z|q{`1rb)-o!>My0eex)q(ByedFLGyO7=Ikq8}(HcH +6i;acy-%V$hD`fEosH@wgA+8z#{H{ToXOd_?&uMj~(yRVmD7BE?-`X6FU!78rkLs#HE1jqSOWnjp~Z3(}j4wN{#<0DmEaw +w2fbN$l@K=F!>KqO9KQH000080Q-4XQ_aV~HNXG>03HDV01N;C0B~t=FK~G-ba`-PWF?NVPQ@?`MfZN +i-B_Ob4-5=!Z$M%;t!XVKc9b}U{5?(?Egj!;iWEo#VY8e`cO+3psdiM#D?U$24DrcGE{QX%^A1rwho7 +bo%%^4nEOe11`ih5ds}r~C4-D(by*bnzy~VhcmspFPs+92he4iKm495?R6(6IB9*bzqWO6Z``e?dj4> +$ei>cuLo8^bh>J0qwmAsn45g@9MQ{TAMQ=}M~B1K+Woqz5;+g_LK&{q3XhT~awQHE!$j2T)4`1QY-O0 +0;p4c~(=FwQ!+P0RR9!0ssIR0001RX>c!JX>N37a&BR4FJE72ZfSI1UoLQYb&)Yo#4rqn_xuX$SgsPJ +3leY=j7%q3*bq8})@_Z_B-k#f{~ot+ASB2V>&bck^4xJALFYoL2O3Leg*}O$!hKQ7DMaVKUUslOCh)if@+itrPZeClT~ +1iR*^N=_&VilHX7ezR{Ys!P3i6v#8#CnCLX(r^h#(D9Q2`wcYz#AqB@vfzGIq$A8sk{)NWEK&TeAplO +P?6fq6Q1^6a*0l)grsP?n#H~**AHt%UnWjY1bq&q0|@WSC{?>xZeNm!(&pOOE&dqH}AXz$)6~;-HFq; +xJFdD4^T@31QY-O00;p4c~(c!JX>N37a&BR4FJg6RY-C?$ZgwtkdDU9 +obKAHPf7f4uG7lkBlGE!=dmYW`dihW;o~E`ZcCNi@JUohoY@8{Q1wh-1$NzhG@j(J4?IbgOIlV{(b{C +7?A9fc@1wrttV^vAk^$p`qy{EM#ouDPzHJmWfRJmkLP0Eh5`jUu}2}!od0gsCy2o?*rZyPR2(bSUO$% +<|5NYz|kB9(b;g#Fd#^2(tThkgbn-15A&&!1SkV-;QOc(aEUs)`n$97g+j+@~e@<#e6Bez$)8kE7$CVsa!Y&$ksdzhuK>@*WHllam(J%Bz^1 +QFuJ>TBK59wcM7qX?8>Fvf*h#xnw(L7rDKHEljCe&?`s#rJVk^W1OOEdeuJ+V^6W(P%hAYhU;hjIOt? +2vJB0fWh56koK;Ps{O-tR;9d?}OpA)80<2VnFw5Vxw9d@n9FLVJJhuS000yys;B?3CXqmx?Fhd=u2$L +Ckdn)rXm$@sB4hWuO=_IQ}D!OgUn}Uj7lOnIGY#4r=RnmQ%m5le`faf>hg931HhzU-^Y`1Ea-aQB*l>FFREh)$5jY2R>#sl +UWuDTJ2(W2$w`i9+Bh+a@^EZli~*{QY3)2@XMbNRCX=Qyv-{?{i!Xhm5ElvxeI#=`~ +D?LO(6baf!usZ{VAodthv$pdbX0 +|q%mA+?{9piAA{!!stmrt0q3V$EuC6g`A+nT|BM2+3s>qh=U=AFthLvH+k0!N|r9wJ!j!=fA$q`6UAS{-Ga +(eL*g?2>_1%t|33HNce3`{^o3NV21-EIponyvONX0_bnWq$thPGHCZ|R4{P7TcWCqn9dCn}ym+Ans=a +>N`DS#m=&*%-GN%tdJ~G8IL_C>r_Dv+ba=a! +VgIRWan$LZbsL6xMVoz~81qqTbPQPn$khB?V(*t%SlRv3Mo`_qk>@hbk}Cq^~|6y?>LfkAH@&35JAK5 +1H1mT%Gd{5bFm(8}bk^PW|M^=@6rHY?DanXt&!q{>@Tx$k!rQJLg}2s(t4ScUH=DGin8&9C__68M{q(n|SlK>S*QE*7Gx8RY1 +y_%fH?47QqMfUPB}6DyjinRLhBK%obEtt2A~Q7~W)A$hSzb)&uj}Tv)}7c^_QTFovq0k$sq=1AQ=^!BI_En|a4Ggg|)oU`+0c4al`EZ^4``D&Jo4JP3a?0bO$_CR%5e3 +;C?%8VZV>f;=0;gV_JE2j!!vqIu#XFj{2k`%(_hZtog5#Zd^}r!I6FFD4`YhLjqyVzYvPBOINd1HRAuH7*&S^3x&tM`*%12XpXMC8OX0OawPi)z@ur}DW+Ps43vA!#)8oaph8K7Qr=zY?W=&dW*ZMPZ18Dt|G;kK{ +AiVjxgnL587Vp4G7UWB8xZ(w71#7OpxuiK^#`{kx*0~-@h@ox+-R-gUCgZ+yuT3l!DoqOa7ypKZ>Yg> +z|kR2?e8i|`TDmVHU%*J>b1&?5-QBhwE>Opiex9vY;4iv*of}Mn21$91#TvwkZQj%szLUU)K5W{bCh( +2Yclp_+C7LKSr6XH=Z$l@y0|F&G?qQO;cJjb*=-vK(_jaq);Q-KvB1#&Vlm%a>)MdAlWL9EkQ4GqgQ3 +#cym3KhY)n&Bg7+YWJ#OscgtVdS0DZRpX()g-PD3 +%YgU&v7i+@)gc%pnw*b)O0bLkv_MU&s$$2iVCK{?YTI$3Ud-omnn$bD)cA_YTv0sIx$}Gdd +HE%@ukz>K$yxvWLX&7GC<|s~W~5iG3FtTNLAap0_*CC#LCUAJrYs>D8_w*_}zSS*WgOg}n3GpON#EHz +!Lt<@@G_s`eq-R!wn@Z((Y6c~b9xzD@s1MAzcYD$_XxN;c0jQirMpBeZU6GkcjOB60 +4Q`YS~WSoHZvD_R*%G~z9xkChTKxJ1E^rGw9VcCl1l(C164}0Jz$lMqMWYkNE*J~={u=?%UHGEOpX0q +^cAsRY|r%$zgMlp?`EP0w$iWxjR176^{_S`Zof(V1*vr;4qTY(QrNgTe60CC*NJ)h%*`!1Eywg(oQ}I +Pr?VR6({Xd?{0URA{RqlRR%j;=CEU}SaFrh&@c(BNS=wIUSH=(Q1dn=jzMl@*CZk0sr`CVmFM+YisCo +{Pgk555Ea`*%l%j5uPIzW86SMD~Otez{h#5(@Q2izPO;ch~?nv;iGy3%%Rt)Ri4qs&7(D(F)RuHScAK +vM`S-<-DlYcDGhPL|{Bsb303kw^4`BcY)HCSI|*hkQHnVZOsfv!E-gd539!X|u&fb&!9z5|JbT+#&cS!ES;s51 +gt5Rd=K63LopF(|!6rx;Y+xYW{ORIiT95)Y&of1ZPIJh=Szb)z;%J3Lu_uZv0WMh35$G&8jj}$R5XFj +T1gnbG*Ql2T1bk&U_VmURq)QZC5GxrMj-65NRU@P$SMpAP6EhtCjA%oeASnpPuM6+0U_`>XZ*DV;m~e +PGttebj=R^-C0J>mK5*~iYJo@Z>P6ALS_LMCiAsf$_-MMkt@tpFfx#M7mC&*5ZPP4P~m&b2jzCSr$XR +p^E&V!}?2T2$W4S>G2ZU2)Inpmx>A~WXiXY@CS5Y>w<>B@Y^zD_IeX?Tft+?=%I7ir;mAnISOy@Z-CX +52MBZ +08mQ<1QY-O00;p4c~(;e)76y~3jhG&Bme*w0001RX>c!JX>N37a&BR4FJob2Xk{*NdEHuVkK4u({(iq +=s~|8{$h^QvT~vSyB+j`u;G{+D!XFL?Vnwc`wJ9#kUEWy<`rrG^?2=rP(#1`IHmE-6#C@5a_jzV{i^b +xF%nwR@FDtoMM^(A2#bR-FrH{2~oH$5(DD}2`{9sMh{VvUZud99cXzbOlF-PG}HAY1k{iZst#CJM(EA +d8KeE+p}+ElV!iMPsK`7O1s)9hYVg=x}S<{u@|O`Y7^j?6o`UkP0~)zpo`cUH-x8jswo#)9%=6kDguo +@6d7Q|Vlm`X|NYVrG~yxJ=cjTrtP}zSq?~_7v|AN|i5lsd(#|okvrs(xyAp9Hq;0Q@O^J9g&wj`oa%B +vb)sP$8OIX{C;HV12NRCW$w-`W)-AP9qX*nO|M=&f2SLjJJY~kG>zHpqpk{jnM&IX+N`BJWX@z5ySgI +JP>tAhE|Tt*d&6T%#;VS;<<-?yp>`r82Lmg)ONuo+%B^+HO5p2mDW3kBeypzqKJdyPm1~le#qdQhJVy;s&HBxYVpYXwJHFUdEMVhhn^4oBqqr=o7my)Kl6X +Hq~G!5$hTa3WDiCk5MroWg=I(OQ!LN56$Ex)$%Sw=u?%S{#1!R2nZHyW|=%D$Mo+4x=q2&kVddgENoX +F%kM~H55&ZZ573Oqh#S(JAa@oOY@+L%pYvm;^Cn4L*T>GsXGLc9d^UArY#HD*))L^eUc}9@ac(=RUw{ +O(>A%nL!)@BsmfD#mOzlU$}T&Fdu_4D!Hu=cvZN<#Rk>TmDr66wYH6gH)m$c|GjiQKCd;n-gQjZMOL5RNQliq-}*DPR8_>VzZeX5t$RYCG%o)4uZ!yn|PB_psYD>vOTB(v55wwz%%}$D0?;D5 +9tSdNjhJ$TAS*}lvR9QtW>N4|ft*M~t;G{gX`A5WNJJ~~fJish +6W8sG$bBFd8ugSml7IjG$2Z_8m-MW`q23>;K;MH&Oe2{iZzCaBym;5hJy-LA9tBN*TuxCVx27d|jg6u +VYxFWW-Jm_v9Ja+DtsZ6x7QSNIi>2w9>xbVLZQkegb0SJGwqbgRgS$aV!B)Oz>Zwi +@}5%Gz$H8n7a`zDHyVRRiBp`ZeC-^$Dh_`qMFlG+a;$Q%0selk?yP2#4o&4_)5mqx`T7Ya+o8cK +yP)a-ANEKOCtgY=W4sYzTQKkcAH}Hb$zPkH9*6)wibE#`j5~4^nC7Nw~HyJV}ncwqf~ieYY=+2JB(8u +9@xF{Qc@s-9ET^{!WVQ3$tPtgeAKbp`jCV735!Zt$|j;`Ro*tF7gTWMct?d1MkaE9c)o%uou@CUtTp5 +}&Nx|u0as%#f&OFnIJ8!v8d^_REmQFdDe|7SjqGBB(T?&X;tN=d>UZoQg9Qmckhmm9F7btQ5k))&75r +}#qp@Dm%L^H<0=@|x4M4>j#62dV{(Ev-I5zp5#8}0E#MBYB5{t^w{s&@=l9W$w?5i!~62#|dCFs#%5w +(|Z2Z_4;b?ZgDT|c{91u<`*t-l@~zFt2c9-go7?gnWC++$L+dV|OVAXD>7vl<$U%y%BXyI@o?lp*v*Q +5nLP3<=TKF|bX^aZ=l1L5~m45$|S+jW|1w=#CR&knT1Tcqrdzzye|TY*MY0^V}?B7J5;pm7c>CE>5UD +=_>s%@;GRota}$3903*>Cr%j)fNDl6N$6|D)qt#^+k}2jj;4s|&!P-ys2Q{F!tya|sjMkCCrLlFVg{G +XsdEi`1`nIFe-_R3jS+p~=BO`YoP-EL`!ZAv0D+|As@Jtj%#zf|3_lq6`dF8I6QGKlrZG*IJp*$S;M_ +k&F%X$0j)1QBXAm|l0y3r^623u&W$gn59e-F7f(FFr;#x|4)FVSw8H-6qM#5H~sHCnuKzbngny?Q85t +l%u0iVQYe4c7TgZEa`95>$F>m~fX99q5r29V3Rl>4r3*Mc2#FtoHKdg}A7%CG29KBoie2~KIP0Q@@Gz +Wi@^W~33$Vg2@RL-BQ77znd|A1{{GNf5kb=)_<;bkXr?JuyOFYy(h(hg2(uK6oI2gPy+(*ni;jf#ynM +K2jBH>nIHonS(|i8+d&mT2L5MaT|e66mB?n=xjB2k`6gy2|KouR2;)d)#7(t}HxH18|3lB!DL +6rGYF1jBsLD-wX~;Nf@2gKU$TFn{=Ow^g2Xl+(i`TCslD9)VU)a>Cr>f{FBZ)c-nzY?D;DFDosr33<_8}GlmACBq!Hdaop=IM+oB4)ND&j^o8Pi6S?Wv*N{(TJEe +mfa^TDPYVVRY;{5HL;)7huq4eyf|DM<(7CptEq3?0@r>Xf?8Q5A@1Mz}*B5xaKs62i~PO{%STE&R&jI +`upaym&|7n2U3BqS~Z&Ruy3LSJ}%|s#P2qjAnNP@f03IOYTNFU*(`k)ulHzqDR$#bF23~X8GjJ3sKbl +%n+v1-O#o^SN2P)SYUExJqKIuYnkULHY~3$W9#>}xMV34}UyfWn{>1XnS1dnUOweg=u +&0?;&ukXDNiNQ>x*QRXb1iy`pe}2`)+Dri3s&gVPFgZr*pni=Z)gLsNEA3--n7{znBK#Yw{-G^cXn&x +4|Iixc)`ZX8aCl>?!mfXft{#l-~U9)y?4(2)gv5Z9bFrWtpNb`b!?(8MiiTIm(3Hyc1#ZsJ)4)ig7=NAXHLYZY33{pB&8s +r1i;8+UXAYv%!G~9Wc%E^Z)C1^EsOxI-~rx`OuCAYmZDQb!e&onY7BYNO98@2?Zd3QuicrJ;GIV+mid +dfi=A$)OFPkibA8O%^?f*ZH!id8?IO)79oAw`XPORXj@#+v*Yr{$W6k)#c;hiT%`^HRof*mcS!ezxfG +62eQHqG~hoa$t>_$jna?t4RD5i+On7_n`3)EyR+M5mqtg}$e)c-loh)xEilAIA#c +j347t7`ay9E~MLX#9smFUaA|NaUukZ1WpZv|Y%gPPZf0p`b#h^JX>V>WaCyxe{cq#8^>_ajtPY2hQAgM7ieW +X7ZMnvG3z|!UA!`-^Wu5d2i+3vsuWNhOM$t& +%*s<13z5Oz~=64hA>HinEH#mB@>%xZ8~fM=VcPe8AX=Vp}Pyisww^Y)*jKLS$S;uxOKHYh3ja|FT4>V +lI-3r)(>#B}+7rBX-Ysu;>DQ0EE@8$n6SIy-7s61_*#vyAlsJk5BU +5h@FagHDYJLz~naLBX%wn{J!AZ_q!5)UY3Ybl8xB=bqTOFoKlogEOOWcuOj|1=d?^&$RUu;m?yc3l!Y +91pT7Zd{8X&7^rEO<^YbD}c{&;l`_5TcBCC%`$}$yF?Ohjvu*#&e%Ril6oL+vq*}oiA=g#5H9k0&e3G +jCBj+IbzyPW50EqM$Wjo|xwH5gncTTSN`iHIG05{ufe*)w*t1W3yyPX|AXJcSKL2w{M~gAr4e91aFQU +0%F7dmFz#xtUy?yqmzf0I?If2$)z{LK)8#*KhFLU@*D(7~}ez`0VY)<@MwgH*UC8AOnCMEO}Ofc0FV7 +K_BnoK*frMub2vT6*M-HJR0aF$3(3b_lKLw^>MHUY5*S4^8x9)DfwJ1#GF>VJ->W?a(*1#WyNih=~Xv +7Rq+-3BvMXmZqD9MjsqnsuHR2T3R$g_Y{n+}M#v&3+xNf%X~zN2H+lof>+0+(HjH|6c0RGo;*TfSv=r +=1I?G+qAJK5Z6ci}o<;ThO_1WnpzPvu2Tm!X4b)@MSnO{h^{f^k%?{J>;6^|Z#JUKr*jn6MnPUFjq^I +vO#E(jku0vrr7Qbkx^t7RC+=xO2@Gy;Tnaru5SX77^SEoUGBaw-McjxKvt$k`AEQnl1w&d1YE7$DmB>n=^9_R|c&Tw}!J2+Qo}pliJlnBS@&zz1E5NdWABr| +e2plrk{(YdSPlbX2z*ivm7#PzcAARB!e$2)eogfN;l@*2+T3RE*(apucRs~@SFbeB8#J->Tj->@xv>C +WpB>*8UFqna3py*>G3OE9kQN#it#1)szq*QEItl1VK3~T|pqR?MxyNVv4UI1bsmL&aKvw0XTP{dWJBb +0qC69HSht~&H68MYZ0sWKB)2z(f^S3|=_(9YQN7%>IgkeG;pW{RF{)bP_VRO4;7>OH`^X^mr{B5>u)= +%0niL;N;kEiX7^KpewYC=wGJBJ?5_Dn1C&9~zyS4d{=%1P_LDz0)9cMyN#Mp?f9)$UyJsyF(y4WblU) +go}+5grs{R3NMqP4}#&%4Lv>IH=VgnIKfz>ez^9%4oXjjR64iQLm^nNK6(@4Q02(Xm`FVsLkxjF;y42ekvepIo*=8c&2p*kW6pS@c +F0XF2s~=V4A34<5FZ81^dC97mIzej3x(FBk0fD^TXP@Sv}R0n}iJ4t;$3%0pL03i&Zl8#a8Fb_}_*#+pzpWJx`C0cMAlnrd4w=F&X|O(x-_f +;Ize&?OykV@No34K1e($x$rdejFIiDKT(OS&Oyl2?CF+BIYS%FEw?wKWLIXL*_L_Kka%cq>{T`in}FO +75F((NKx&Y_JX0?r4SQKS+(`v@fcu#7hI=tV6{q@Ht;*qC+f$DFhri9F_KE|T5d!~YRwHKR?8mAC3V< +^!|8XkCRL@fot;6Xcp!Jv3k?x$SO_6}r5e83wt=fxq|v=R^!pl$WdbUR6igw~V22Ey4@8a}DJ7O?)DN +hEc|3NH7__j~JV4keSGlt%_{u=Ym}mjWH3>h^;8F0FLwvRVmKrJT$Q8Lr9F|Oj)f5ix$OB4*K56U=5s +ToWfH*Z@A_d_7AK}ka;1H_z5IWNIjFH%W6MsiaQxo17u%oUin^wp&+3>hlcQJ2fBt&w+@aXUwnw={E3fUed3M1{cJ@GzBm!;e{5xYbAeOeb#M6y_IbfO_TL=x%}L+-(D*LP9S0oAef_fBQAN_G@6eC8$KVj``=-k_(^&8c? +aNx2r#b$soo8|*4Da~l2aObv;w5%4y+xrv9GaP%xZmGsSUJ~x_X?@t{LuDH;5+p~HPjYZ$^(m%=T->8HW;G5E%pi;@1g*j0rX7&%dVu@027%k +)iBj%q^3b`Pglf+P9FKxVKaE6E4t5425m|;yw}rf?OD^Qob5)l +xh!fsrct{$S{JoUGQCaO8;+tftq1dmUJXJkm&4zv1+Axu +orv4~I(IQ_8@a?M+;U>oIw+z>({mVi&bdF(CvI=STr@1#m7gtZmdR&OB89Mv_MsNUo#S+@ZDV@f}lyR +H5%N=oAkW+7YEpI835ucq~l%53`G_!XovP_}}_rhJpHvuxJuEwpZSyD2yKqNE#9B!5p|kELr;|84{co +MQ8ZYTr455g^0{H6OsREkqDYulz>_jk?6te6SUbPjBs3aXGE)i_K>XeUpdx*Vf9dwqcS6dw;8K^Ecf& +V_ss_z@lDejcRV1G6lj{-ALc-p1jVP#p9df*2*p+9RWA;B%k%-xq89Ex|i}?4Q+@R*<-qWE&SlcjL6q +~(0SX+>j*hKD{O?-6M{6Se&(ETt6N!3RiW_yChhF;8d-rpIf&7Vu-FYJlR`1F=Pa +FTqgFB%N#&NOO#Gu?2S(hA*EGjm77FOa0oaelDAX~k511&W~WIrSK!)q$P?m!sZ{5!BcbXyj5>e|J!( +)ZaeGh*x*?Fy?87dcwut({UXazoluEZ+l00e5-5DbUJ`-C2tn_&2mpu4&DGblO2X?djpUFq#QOt6>g? +1A$@RI1r#HA{Z5ZvP+ILW4jBa4*ZhG%U?B9T#JUIQ%?=UBo`#HRt-0U4`4p +ygUOoGK1{CCvuxDM$DBYqhwYNx-Q)zfv#737^kxoDKSLS9%<_lQu8LnT=+~Z0vk8r@KrBgY7XtF%5I68bf!$>&6*S_f`_3ZYsT^ZntRyydsc4L|>kZvd~RoJ&@$ +ikE7T@VWku)Buwm9-w@?|>n_?WRXy$5!%ckQ@p2(@@Q^#U(KE21s2xj{pyCh~S5#W+vb$G^dNQ@=P<% +1-T|HgVs95BNDScJs=R!DMnQA!9bm3?g$Ys#pd)roB=A+V(`oZ8hl0%4s0Psub!E4(+z?RU8R+mwT6shwm=>*Vuke +2eg}m$Jop^qiz03w!_y&@TiZ7X#g>fBReJj6h5|x55AF4!(i|qP)h>@6aWAK2mt$eR#W78W^4=)007! +C000{R003}la4%nJZggdGZeeUMWq4y{aCB*JZgVbhdDU85bKAI*e)q4yG7pieB%Yl)mj`Wmt2~YqyJm +9P#Fj}t*Tn<+z3BpEwf@GRv=R@wi8jQQpws5uD4}Yto+F9| +Ne9_Kfk;<|Mlv_yNP&{CG|x7mKps2ky(=YM0_pq<-|@evofCFt0L7^T;8qbl`^`i64kE#29v97(a_}K +luG@xQKmNWMyIM{__O_af-k0o929oD>@znz5%@5{wKVHITlmTIOFW-+uX(+!fKb4Fyiv7GWi9>aU!+k +z9uLd|r}Pg$m|Et!pMGT@iQ%kL8&%XNCnrfRjS-)+@}jDAHEQ)awoF5Nv??tilz+!6bu-UdrA;O2g{9 +$%btK-YLRB*FD2S|Z#^7d#BpshWNHJ|HHjZF&NEC+fe<9lxhX{Yrg?jH4b%-qg{VX%`kcYJ@giK&|h6 +qRRFRsttoL!$qLRTXC^y|Cn)rYqqBhe~Gg! +|JAj|6W&(5+D&wTB-VlNwj-0!cxLyn=F@Az9ok3#@o$|<5m*L_yW*Z=p! +fR^uvdsnBPX$O7*V8o@Z;%Pa{hCRW8MbKHN?;|n8t&!POWMTno~uyF9$$>x>#3a@7?xFu($9Vs$ukTV +8h9c(8OAs-Rk&{XU(TV{!D~2M};#L$HgzOu-~muo#mC1>DDc-(mlB;T%F^VMqFviX|1Pll+HU5)}+UDWKz-0~m1VbZ5@qDU^QR;^0ds0tn&AqcDs`Xf#{AM`d +HN=+j$Z1uAt|}p3~_ScQc~T5NOfM>gAl5I(A6EFRDqYzz>~}C>rX_~4YNBsCac%VRVf&uO +Kb_fvsp5)Q4=?t?Ki~rDWY~<<~7z_XslQlx3r-nG`hDKd19MASG?|0PWX0VWHN>z=&BNvRdBzu%RM!zcHKn9T>KK~pwa{ +anP8<0>ntgtJoq(vJMw+ttHfJS&LM&O<|Q}&7^`w+fW18t +rtWWYjQGBvm#VT&nADF+S^x3{m7D`~6TT +VY?#IFmd|Rf5CL|hX3xoBGUAV{_db*_lo}>YwNYzlsP58)15F7eQp69peQ`KZw`-75K4c7*8mTG{I}| +9LN!)r4*utE+5ixFZak`O#WV>7GYKRy3AR4oTULK*7G#M23sE8 +sqJYlH;YsX*r|$jm8z<9NfJ(y8^^Jk>*YM5USQ!nmO*mFsF2cp&MKSFcXB&(2@{pEb6_>aPsXFO&QbozQ +u;Uv|h9WzJgM75br=uC!(}wN}RRI!o>)N+#0SOq@}Z5iV-&n8yWeJ?0C>u-F2UFPB*Y4?zlD275|0*5 +8Uzt{1r807$>8rX^caa=~SNQDz0DXSW$+vBBDAhE%DNS_Q@+y|~`U@ +8@5-ZkQtTP(_l_Yse;5NNW^{VsVy(n>!FNuEeq4%T_4^3bm>>a9~qsi4{^DNR5n+I$y?>7W7OzcKsD3 +pe=3WUWrmut^>>m=0G6ZwkxRaEP#7pKtXqzYeLR4T7*#pHOhv-!D1bh->a3X_#h#3+lf76 +)C%<)uAf9f2I9eIDOqTdkEHX?a&u>3k-3u?|Q18um$(R6SWf&k?wqd0p?aVgnm-;RoW?ay>qxGlsWe==QIT+& +q*l1VPlCNY!hi7?1g)Qqw&*^HrtkwrA4BD`bS|OY;5k)8Z7m)#)tX{g}>`7sF{vayYJfP8rs~y#*Rw3 +MN%}I14;4dtxX(1jXB^O&1{wd4dz!l4Z@3nqMR(Hl7j@-I<*BU!~?!&gm@l`TuYLItdezhk2e7wnNT}7C$*)3 +Cu!=Cw?FYQjPAC&sfO)rL$5;JRqCEYp4^n2g<>(fTGC`_({|fXUsL8D$SV|%ESRGSO;9#|qJFc{kZ?p +(YwD<2G+;aN#kR$rJs%|z(hBjoHK8`t_bc9&t^t+iH26?~yXOqDH|yGo-bd&W+}~sihF*D=Q0r&xbpR +*qrP4ndQwOR#+)E8sgk=U#Map`eJ^0_T +{q6HC_j&{dQ}RVfyvWD*zA{RYIp=5Zl+!zYQZ7K(xnDG!`LYm4PuDyhF_>RrnLo;o(aq8S}%S>PMc@9666OwsN*7nUgIbRDoN*B4T=fVkNw47cO27l%3r3$Dl4qZ3tM|I}*Ly6T9W5SJ__(5jbawvh*}ID`; +>}0#;p4SD%okyq_Rpn4#$ +w}V1L9VCdwM+$)t867IA?{Y&GLr9H4BpXu##6lg=?SF)nd_>vEt+O=F^xmRCX%oMcXkoYdL8UXk1o(| +l8@T<5Z#OrbhfVk{;%j%&&2jm-C4PoroiK8e`3eEEUT@gM-~t3N8RKe3SH=$FdA%63R^LHnMb`-Tq(={QHn+EJiR#frEY&o}o(aqVJ(X+(lQ8tM +f!}AfL?WVl)m7VE5(0n!5eo7T4V@mNQF@&)(E`#8q;JAlw9%^#zO@4l$dZ^u*3@+(fgMKmYY_r~r~w9 +sA!P=Y=1HjGun~^I!gY?06?A9NCzETK8ftC;I*#1HL#JJv$P_juU>qg{OV7MntL +wdsaTG*yXBfo#F@`N$g_eQYPa3oHF&1YhUcYh|q=neMuib*2~$ZOmxr1OPS8GW!mS`=$EKS-?QumUsHJHVN<(I9- +96BfB6RO^w521kd#WMAfbC4l4$$N4=-O>>i)!xFPg=iXegPV?;(97|G4|uYc&|V$WTHPg@kXg}VfG?4 +5y_uX>tEDwT#k)~H>W$c{@&ePqB7r}r=Tw7` +(E01=4Jl|H3#}1x?x)(x4WZP>QyJipm2BIY{?jPgO}F7+ZMR<0lqTS4syqM?V#|!f6QC#&)Ij#xA*eO +xVMGaa?Yp0^rioD>F&KQ+lvqFD~rM0g`Z=)y}nGcbc3rueJ6IvZjRkjn|~RROFecopMsNKs%rYP=`^a +ULoN^9F&eBB`_?nhBS#xHs?P_O;#ji+e0mJ2K1C=015ir?1QY-O00;p4c~(;=0Hdeq0000~0RR9M000 +1RX>c!JX>N37a&BR4FKuCIZZ2?nJ&?g_!!Qhn?|urA(+Zt^8Egw|$DPJ@*{zh~CQ2f3Y#}KddHcC3tq +@2^;@8JNNSVP_raS`8T*Tm$)b{YrMkUAOoa=FbIZ}RzGHQF@94?0kH8~#P4Zcdo9X!4RWosSOXqx6{B +88ePs3^bK!%zfD>Y*!HOG402h)uz!X!XeoYLpV35d;Sm%v~khP8MJf +%P)h>@6aWAK2mt$eR#Q9GlIB1O001u>000^Q003}la4%nJZggdGZeeUMaCvZYZ)#;@bS`jt)mh(<+qe +;a_g}#(54HhYNP!j&4ETyWT#7Cbw814n9~KLPmMEK9nN&$?H$t%gduN8EMEXav=*!`Z0Er~daAr93%{ +PoZb=o+l?W{5S#46pkqH9#n-aq)gwQE($a|k_R@%xP;T7+PCfBf*1t`kRxEi)cazEq0~VCxYbCnOi#ufbCrf72{SVo7PL~DQ5O8=0+reU<)XVYjF@*n;?o +s3+tBt1b(ArPr{F3WU>Lh%pP^$))+L}wG{_m4FF^{><78GVj5nXX9?dq^Eei@EHVo+@bRFM#cY+Wj-J +Lt4*9;it#Y!JiiB~9i1e@o$-)~*Fbp!feG!?yBj@&*$V{jwX|y8rOBaphPL4w^=@EEQ)*I+OTZE@Iu3 +WAz_A>&Z@=2hMBn_C++D+-Vj73C$L&i>(4M-B9Nm|U9MV_n6QH1j9a(T?jkO6SkO1rZ?5P0KTT0bR-; +dtN|sGpyBQ+$j0`@(81ENSCiC%8e+_n0yt2X};e2zzc=ai&5Ei3!H$u|Vda1s?O{nL{7wRb3WI@S?Sj;>pUiGeb+4!co)rbTtlg}vjmE;C@e1z!YvB=w)Wo +&FCtniHn)Tc)ac_ILV*TYgnq^{uegP%o_g!3Ktr*FrT-D360k)kfVvkbsdD^w4xX6EyOM;(Osu4EQgc-2kr;f0}fVIZ`kuuDB8peNsIaLBx_jxBs +rKER3xPdOO53F7ErPuwliP~4w|>S6in@Q3u +iqrQ!Yhz#dh8=$OA_YSL!pcJYiK?^nrw+f;d#vc&FnK6dh(4Fyv9`=h0bDjSd>mHh0`xz%BUdZX{h6QqplZhZ$rtraGpNnF()eE4EvMkrvzFKu-%T5zME<2kyQ%~2+R?u9uPv% +IFP7uhS$>1G=c0*tXzB*RqwaPA_>eBvrM%3Cbfn=!7LLXcf^W;9$&6<-v`5vFC8H5Uy +~4Of{HadEa6h?FTwbsx7|PPqFL1fpm9)p74vZhqA&-qUsMQG?hT*dT0wnWB_s2L-Y=l1qkT=aLiEQyx +Puj;k~lG2?mV=L@20OM(hIjiB>>xMs}q`EZ+rC#J;ry6&+?NWWm(Kif{fl2MF~|WcB8Z-MrGEXGj`SL +FFHI+%Vwi+-mjW7c8S|pD08_guBc$N4yJ5A2&#bQOh2IMouj>qSlnSByqF*zp97l;fX!;qThx}$?Gs?G|FN+^Xlf(I>S1UAJ?P)TRH4cIuKnfMl+jk +_>Xp;%Rc}7d7_&77qJ=EK!s@fjr@mKI1k8wzJTIo5~WTG~n +G9_vjBPJ>#>Z$t&nPmV-nN^uB*(aToK)mq>n-nnw9j-n?X9n7rUlww@E)^CFRs-!!^h7oT9>sgXfp95*bX`4Z8XXBEODC~Q*hd$2)Hz3>uO3(MQm2N;YVS!Rt;s +jj$Nx(_sZIL$eAdz@Sdx`uVIWjaWPqO7E1Qe#_)K3Y3Mn=>40jq1-&}<6n%!lQ4UQ><#nEZ}He#`BT* +!C>6Rhri>|2t&tn5(H0Nb@Q~lI84wP)h>@6aWAK2mt$eR#T2=^A6+)008+I001Na003}la4%nJZggdG +ZeeUMb7gF1UvG7EWMOn=WM5-wWn*hDaCwzjZI9cy5&rI9!75m+TzG{dIJAX(E}AAA+~IQ9AiHgGy#_k +2M6H>XM3to0YXtf4eTEceQS#ok{$N`qXE?9V%t$t!(w3Fn3M(72lKy$m&Ayg*;qjAEZTMfS`+M2mhey +@fj%zbgDwB2G?!%)wnpLG$!|bsG6&sdcwZ{#6BMZCoyPfQ^{86-}(jYG$I9-uF3T>on1ChIjapV8w!| +s%WY^~5OuQS<};wdXsU5mmh9XPy`?ZfM^_&lALK;#uYj>PZ%>RY#Xj<^w)!;m}>+zXqRqT+pRbJ0FZt +=dMk_AIF?MQt)8NHi#wcUn{?FuDoL@3AVhXbWM^acPA;DE$C7W@@+hvb*ss=ZJbMadRbW0bg0s1S(#B +;swObZPVqny(6c0JMH&=&N=nd1Nt8waizKt|R;3!(tYmt{yuU0qL@7})t=KA$_`I}d_*ZJG;Z`qC +|7e8KIG*=hp?Zr3Si|@A=H~&gjs})5Y+^`Fwm%*^_+*+FFEpJ4guW<~fW;xm1SVS{P>^9Q}aojRv^_p +G%nSQq`h7VTryQ38beDObnQQ?Dh?KX)H>q8b~X3t-~{3;zu*4bV>mGWK~I}m7Ld)+!ZNK(|?81h>6nk +;rh^7vbwjIfckd7i@C6^zPZRx-*-$RAWYoTm>R%bZSImoh)$*oHFbBSifC<;*#!JGlu5h}UX7^Mc*#B +eM#o^`GBdZNdh~5QKvN`K6#~-F%M_l43tB>2oB?k#f +R43Z>jEEcN91KNwNpGvGKPGEJlJU@zU92lqBoNHVZs|xBOC_EP(OH)M?dDo*1zrEa>s}21zY|CIZ@s+ +f1-pLgYFS8IADQVpU*K3+ME|uw~hCc{KNCxY2OA-MLouv`ru +Cg5G*Uf=54e0`kQ_#oqtk=IL(GThnM7V@4JiL~%B;<0svSfG2`#qj|L%ID^zj@ysEl+1= +`%o&_2p4o8?>nrr~0$u^l9(*fb4e4ljzVPF-?UAS$VrC;SEdt%tYk5G*Y +^+y0;HCG>W!UoQ813X8V<$zN9w!`Ia7nIMbZljZsn6Ho8^XUL((dvVB4Ha?-NuHFg>93T$jJ1s54Pju +z7rk$4A#?9JoOZ2Y+;uC0c?Uv6pra_ooVer&R4ZCrRRv!$2$HAPEPF0~ddANEt$O2QdjmPS|eecC#R?9t@1loO~Ga#phx=^tIbbN4uc`gev5AoJ2 +BLcFnAU1V1o%781aYr3*?tQQzu~|4ug2Ix|;V{HI6sADOCr#2NC0qCiJ&L>P;QjJeK^bTi0Cm|95ZVc +9xv#0Tz>$O#zC_PmDW7)>L-To4ii%l>|I{ULw-3Sg4I`St_B95|`U7w@5{5<4}lz}KeGva_!C#ojta< +^S(D=MwL^p=`z6=0)F|j9eAwwB3v%3~>J71plJGGy;@R2;$~B9UI8q;O=Z(nLyJNslj8>RA444T6IWI +Snz_q5tvsRiLjKey9g))yQ2-;JCiS3<7t5)Z@L3Rqv)f1iv6<_G2)y!os}5=>0G^8^lKB2KTYNNxM9o +M^b5T-)JY@5T}@J!w4M1dvG_RoM?OL7P~8 +B$&%Jfvx}7>Gk^uP`car|TcfvZDjR$+;M*OJ;IZAG%l%UT5?bD@2HtRIz7GQo6ax?)>ClnM;)Y}HZ!+lMSW5>e;O^s2n9Krh +J4lNpV`xD8c*Mbp`3018M;92M^q{&t7Lm+ndw5)wSyDB^Hj^X|%oIbGEOXlw}_$&lN +8k(dM}4l$%eZ=S}cy)8;>2q-kd}StL^?F^`ji|89w&*{i;GRy2|# +_=MSyk~@>l7+hYAGY7l63UdU6xeUh5lFf5Tuz3~|mL#y*W)iRTJeG;xsX|)umHq4pvicZkVZni;+^5npMd4>c3D+0|XQR000O8`*~JVvbSILlnej>*DnA79smFUaA|NaUuk +Z1WpZv|Y%h0cWo2w%Vs&Y3WMy(LaCzMtYmeJD^1FWpqacWcYIRM~$DIKeNYdmGplymI?R{7*1g*uj)s +-bxly>75{qHw3d{dIWz1{;j1Dn_+XE-yQHyK6I+kU&}V(5#Z?b!|dU5`~=R?Uvx?>VmpyXo5ld(()as +Oxw9m$B;kfj5K5R#6nKR@I?v`+?Q%ZU;d6XDhO<820*S&-FL4ABU=55z^t<;XZ2Sd2>wJOW35iu6fGd +47``$zOBTNvbWt(wM|i{?8DgAd?itIRhQ*=yeZorHr(D8NJNHP2#t4JG;LFDi@N%i=S^_{jNZ^4?*(8 +!g-#lFNTsVeV +*SQ^D1_iC{kPi*`0e*i2;@g7DniakT8++>n&>7`Jo5R=~z}?oYgs-a=ik|muqup8t=JG9##X0$qJWp1 +uobPsk7a1i04YB+|AVGlxse{d;kZr!%Gg4NY6XGOy_u53lX>#pdF0|Ue#EX2^lQT2jn> +{YhQARe_BpJmVVX7qm#de=8ZMeLpcXlntnEEY+k*%1471Y0HDjTP`O>lq_VX|my58TOjc%Te&w+uQt_ +jwdhV`K;Oeaiy!Ngx*PdwRk`f)BTyGlwEUjFKFx_i9&|pOmkk{ApM|Z4aRF&BKN@0V;~-)lypwG%7ke ++k78g2Xy}3Wygo7uE)2Mm>Fc5v+}%n$3%e0aIASux_>o4Fk-B&jB#8I7RY&3eiAY&Fay;sy?s-ujfo+ +p-WKlYSMM^02c{9m8^_u)SDj%~d1JwfCmz$-mX$ShLoMDLaLq95vkJ)QVS@xA+T?@iX<#&+g7JP^xwR +bSV#NkjhC2O1ds4&EqrVSCBWR~1^AU;Jq_FMAW>(l(4GfuqCN5NHOo=|GVrZ}6kp%{=P7Iaa2tmeoBK{AG!s-sDSy5d5q667>Uv0PRSp;Ap1 +>YOqG57WRICxPJ0wt1=&1g4S(&lCZZN^*omX+rRMDf}qNqe`q#DfnjHQKNWj1QPjR0JR0hq*Ru(r?ma +k$^L&%K;Eg7=XD)#4wNa$DVsRsiUSv_u=~y&fK$iBH@J5?t7aSca$g)pKERS>i9RKX2U3WWe=01@^5j +U^XO2X@z}?*7N*WfWkCSHS_oh{3rt(I^~FUl$C@%$fr)7HWgCHh +W>$37P3xvo1b33m&e_XL&m;or4yyX(JmUBnzHFZ1|(v$z#{c9O1e;)VHT7B%)o)1Ii$IoO;Zj9^S%ho +EYO)>gEN5&8S+f{g_*G)AxjcKzkI3#$g) +q(%5x@M#n!6l-g@S}v%D@xra30ilP8T(2MgJfY4KX^a28u$Y$ +d+#31H@V#g=&FOISUL;+GMd#0#F&ENHTE`D@mPV)#1xf*=f1mFG=h3L6dYO=Af5t<_g+c3P +h)mx{uhJIk_-1R!jyoLG8RCC9aK$V2MrW$G(m8faU}CYijkcV}m`Yo*p^op+%43DOHUm9TPC#~VNFjw +%Vxe?|xB*azp#D-=5+m*;NJ+MX|SDvR(mo!^#$iF269|Bw5L|B6>2)$(pW;@hezH_9|g!1|)Z%Gt@EQ +C@DTwba84z)Y|(I={41BAQfnYP&!T-t>$%Oy=~XkMhfN9IKPV0sRZ;V +2?_O2^H0-B=>7v_PJ6%l<2jnStIv6&aof$jOq+&Qj}11ad70bsCH{T)u?d3TWVvU=8$WVR7N3=?y7< +74A5K*t-LEgKq*ZBss#Nx%N-hR{JR0cdwrXNG4X~(v;7J&_bYKTCWe}Tpgxb6YSR{nbieBnuhxX20ms +%pHASZ7C@e{r5d4c7kY!}Huzc#t-20WsG+I91!gzbyZzW8!8N%-{Vv}IZ$&Cg3&oPwpU>7IWqs~s>LC ++9p*$baJbWNbjq7i>gqd+g|uHidYC~l-&$Kt>4MIkeHQ~(xBO_ +vyZKpip$~9?%1wD%_-<@a37EMsq;1u4I|;{3k0W@W6I+5)w!N28&*{5|qBSk|P-`buAjbkRj$V`QNdl +2%Ren|d61C1|ZnNBf?qP0b*5*m!?4uZ&WG}VNaq{2T4j?^o-s}X0zkGQ)SM}G}e1wXB=EjZQd5Cel<- +Al~ctTbWOTkqXs_kNwN^!wskFAjOr3w1l|eMB9c+kG +^`O0exUDlDNRx&XgGFoxD~k~*KDZ3vXAWC%YAvyBwHwVgf7KVQe)52xE0SDV1ahpk3 +s0L?9(5I*3^W+|d28+zv&J5L8=yGJq?x&g4o?mjNid7QaAG=mes;F8O{x>}I6(Zj6hI;b`1uIm9+kgv +2Ju(DM!Z8&45Hu#HLstrHb{XtK6P6Bp%`75qzL#_M8*F;DV8i%Hd_py&525q5@ALjOBK3ynX? +(07QWVA;PoL}se%Nhio$*Jje*#cT0|XQR000O8`*~JV&UflGXaE2Jga7~l9RL6TaA|NaUukZ1WpZv|Y +%gPMX)j-2X>MtBUtcb8c_oZ74g(c!JX>N37a&BR4FJo+JFJX0bZ)0z5aBO9CX>V>WaCx0rO^@ +3)5WV|Xu*zX2#H%(rx^;n|U9>^d?jlLigJDQqnYP);qDoS`_P_58KO|C;)1X{d4onw2wx?aK3)VbwDVh^&^kT7q(GX^qX5{uq@`q^ +HYC+%uNbedgFXTahcCr^Tz?_IZL01TvK~(qXEJEyIR^@mesN@CtSu{7=OESXuq(fAWRN=T1oviR!sX7 +*c`aQ2%ZZv>E^6>Vdc=PAS`{Jkj-yh!HeY{IZBQ!(>oNeyBvPR=0neJp`UaMyz0nBxZAl%LC|iwv3hRFE31~BE7ofAw%M`sos>e(iDC@nh +zp$cOw6Qq?*Vaiu7;pYqe!u<++o0q&356AV~`vvDjIrXt3I?hO3N)sVmz3Yc>cyGK;8N{xBzG5rvl4{ +`I((SHHt(_9>LvD6Fa>dJ{rb~xH7>o1g=xivWnB1R8)amH%C^tH=$MtK#+@+U)f*{Cxhb2$e{~_#~Fg +>Rd#h-JQ-4p3b^YMkk}4}l|fV;#k0wwu5r`7E|}`-U4bf!L3C}Lbup8}sMPA2>tmYSCfO((9X<`&M20 +80X|jyR`u&56ZG_64IWZ!TEMVUi#!0hiZCzn}J2z@1{n3KZ<=B3F5W&2njc7Q4YaE@dL40u?A^?WuNc +w~61x`u+*qQTB%^?+{sW0n~vSZmq8$d9#X?Oy4HI>2xnGy5!<;cR5&lGrkUf|yP$Rs0FqNt0X-jyZU! +!K}X^@(U7(g9h=xbDf7;~Qi4nPvF25;+nVPu&i4V+iOW`PQSGEFA@HAcYozM=`hLmJM_3strmobv5=B +=5tJ4^3A$03-S+tK0Lg?`|zRo_3qunJOr?|faowc45%n-(Hsi+r^rh?0NEh58JP#i--EPm8Mv1^g-av +dPU;NuIt?;tvf=%50U?1_s`0b>|4*>l!&ATc*SeWJX^dSt?0C~NJ6q&d6GEm>NfNS&` +wI8e%TEHq!HwJY`1G{k4dgdBFGV1G(RLJL8mF52c&G>v+?4dUnH4{f78&wB4sL-JGs0+!44ZEK;D9W8 +}b}nD^P_;{e~4O9r1oOJTHFUTdii%M>$}Mgd^=Sx(2|q5ll!VR?4lKdh3J;~2>*EhJ|KsInXxS(b252 +8zn^2NeFXESLBn#NjUi)Zqo4gtw6VN7~|;$Mtx4SWJ3wn1M?9Lt2hC#FP;R0Lm@NcQyv_#e^3s+m1QG +b_QO0HC9=`A+wsS-2zB~5v|(fBsc4ufi@L+KJw}aMdUvnH;j8wGpvI8UTw(`IiP*Bdc8Hp!tHG`Wre| +@m#}1=#1I-T?Uz_|SgqoU25SXVbh`r4Ta33Bm<>_hu!<=~_f!@|)qE8bV;As$yvr2g|4I1xga!4>^?#CnuOmJqdrn_QLU3VU=W +%?#f`J_AIHDQhl#Rppv&lRL!*v&5mD|D1W&=ARN&Yu*v|nH7KTCH +=T^bW`%v7xrAZTcl8_S@wW@p{YKqS-v<8z2MYCyaDCQ5O8q%M$Xn +AKakhB!gMup>->6qof)h(ad+xiBIbsW6V_kG36*FxZ@QtOFv?BHYKbhC`NHbkF}uFupbYUF?)kNk4vBn)U80 +jZism=>o_Tvt?QPVvammNgoydroFyw{!^f>8*Oh3tpUYJ0Et#u!#Iq5UO*LMhSPA*C62!@?thyQgXM& +&6OE83{4$gJId57YLKZ3WDcT&iKWQ)E=o4RUCAB6)iUzkE?1QIO0MvvuL;Lz<23@6aWAK2mt$eR#SE#e ++IY-003?t001EX003}la4%nJZggdGZeeUMV{B_f5Liacd +WCXAUfdet%$mBinou2e2f6h)(v+Lnc`*t*V>swgt!7qVirQTb-@87D=)R_$t0R;AEJw%;wf*|)Ei7Kv +PmQ)Epgs@g!VR2olwJYsmR@9%H#r}p*k{`&L$_Tdx1e3;){@vHeg@9aJ-ep=lAvgj^-p5HGY-rrm= +KJ&%xl7GB?SX@m|^oO{GeU3``Krz*vfxp7;LKQpqbOYT +p}NqSpl5>IR+D_-hiGi5pXK2!gZR;JU~P@&|hYGZ4OZ`cOLEA)Q3FXg@5;8f^66UJ})r9Vz}lNBqGaa +zVIhcCs3qSi0y-=+AhbXAK?=Fgs{u5);8!|ObinjiK@BhKMT&e@DTMor{IUq&OcBo5K6%`~vqja?gao +{O#Id@>r1Y&!E1Hx3-q$%T!X+CYa32C+dBd5+f926mTF=ifDK$e$t31zREM0pz2|kj5-nD%XrdLsfA; +HZohoU*KV5O2Oks0spU#Ax|BWq*Tsm3kF?9(|CUHx6GCJ&mM@%e$Pk;Iw4MXfTZ~g5i`OE@ +&XWT-z7MWQb`#SCIQe4i~(XT#6$CKaKuO!TGQ6F&a)7I?Oq&A-P(L|c^CjfAljc3+QeGuX{qhI}HWWP +i!hh?SbJS`H=`%vByGyihf9$I=B))#F}c^n*}FEA^)@j&3rhn`{Psi?D*6k|<=VO7DZCuN#%wn3pSTU +0FC1>SfX#%>)SC!$o9%?M<8Cy$Bxa-)=y^$c)*4UHY-4@7s|35RK)+oY?&dk9=TNn|4=LXmmlTL`RsH +izOFZ^c*H_>Nn`{ov|AHgp|S-$`8wJMIZ=#}qF;c3!NZHxGcupD8-P-DQFc9LW-yh5|#N4*B3&?TINJ83xd40`1EGbTW!)Y8bjI&g!LB=R|l_#_O@wjMW_Qx@d~w}zfQQA0bQY>p*i2|#7N6y7dhn5>BYHd3^wzCMNo@M3QZ4m!kC+At?O*o|9c1DJ#^+N` +@qlWnF$fp3IoTYVa9pD*He+Dj(B{8ZmSIXsDg?08j)n$E{LsYiZXWUhqqj-5+4*mIq29!fpD17BruB!D>i`XpHJW*=-Y* +^W%=tun?=2^6T-CY0Jw5VLuZIYn&&b145T1?r#sQoZyWk}T#x`!5TEd@FnX}HX-;f_0(*McHCKZkzj4Ut)o4g3oHoGuo~JtE& +TX;bAiV5$hIJCStoZ9wd-YT42$zi=x>YKS;#+15cLd??Im0)Qw!?c#!eS4zI +XcEMfG1%g8t7E6>diR1_Lr-W+TE#8(Tt|nxU@7|>bg6*2lP30`Fl#ka7I0GSv!1!x3D3=;q~zFdF>Xs +`%M1Swtv;o-5c?5(jxlKI5GYdYMi?L4(oEpF89;`W1!ZJq_);kU6nTXYDtqOm9Q;FJB%lEWp;v=snAV +nN}s}(FDpbRpHm2#IEY+oBm$U+RJ&kzs0b@C&w*pbQG`NRPxuu9re}q<--qQYtY +mF=PR}%+3bD9@_+WuPjbI1gidKH)w(VN374Lu5W7XXcJp>Z*)z*%UfA0ZsmI8|L@!vSz0IWL +>o$z(SHF@O9KQH000080Q-4XQ{G90L}?xX0OxK103QGV0B~t=FJEbHbY*gGVQepBY-ulJZDen7bZKvH +b1ras-97zt+s1Og>#w-N(;@jD3EOegbU0C_isEN`n#3AO$(xR<;RC@Vi5LX%08lcY>;Jv`bzdMT%XBj +BR5O-H;BN13cW=LLZyiO^NwZFBy-;Pam({TlJ@+Z2zRPqG^+&&5~BDcC9xjtGt{idA^I)Tj*Bnq$vwE*IBWG_epC3-DmAuB`JP69VAtyi^ +V{tNdf=rdZz$tt54>-z1O->RZ=&)iB*+V@>#8Pq3a~K@Y?$}0p53>eDEOe8tiufb~ES@}3h%J7N>q^Vb20+MQ2)EXo@(wT!>ut&n +V77#b!Q>D{YPoH@W|Frzw4+X;`I?}`SR*&_WI?I7i0C7#x{RnAy1eu7uc;Ht6!6Rt7R-R69a9b7qE +VLx2q5*^5(1nLYxC?lX(t&^8+l@08a9;y50h}op48>Z9KaJHYn@3O44`93gE=sHgih?_9%-iP4es?dR +8QxpsOK$oaR|fi>*z+^RifGD}Ox)`_<*D)=e{;Lo?I;`?Jg0^?zQxyz1+v-=|u*#*Vhx0Pnr5>#}#8y +iAjz!!K7aFK6dx=dWMRet2^^2G(w8O`XoF8us4%J`kI7q4OqQmh~oSXTZg6UFHVdU+C#MKYXBfRxI>; +)9GS&@#cZHZBpZ`s$IK=JtTdu>EQ)E>+4Iji`PlB)^@E|*Oza9el>f2cJ;a+pWJDaHL2+W`=c%Az}hD +#Cm@Yfon(!k@phSM#PX2IJ?*e8H{K`CWs0$}{fh@4De+jBcJH`{Kn1gL(}jv +2e(sCaRqOrqh-h(0EEsCJMy(b_1fdB>}#G39u>|pgb6m&>x5xAEAM+mN}kW=+bmzqSm6%6**8; +>)??{l9~;Sg!|!ilg}4t+_IJb&S%V^5-LJJq0lZX|t|tx5tct50NMcW0f>EL1jqHXg;3?U-si3Y5wu0 +5zrP@{t)W&|l&Wy3Q*MZ)SaXMgqsAgLM{{k}rZjx=@Vv`Q8n{dx$%WwcRa@@M{CwzTs!0_6T1|af~^u +xl*5{p*c1rC(Z5jrGoTMq-sV+8^UM;nXfvESLuPM6e)_;%FRnf_Le=T;J*Z^egvf6l^3|TRQ`FPX?IVhkN^nwck{s5(3PTfwsS8{(=@5P7bB +PLW4frWChtmFy6LlQPt&1i}((<4xv{sK6Cr@Y#KAozpgc)7FyP{OU$;xc}ynU2>G6kav;DW+#_AA%wT +WBs*$%W9&Z9%n<=q*07e`rPEff0Z3G2P|LbI)9e4xQK(5iwCgaJqVdj@@L`=Gyl|{ZoLiv`^5SB3C~F-+_hQe9jevf05PGV8~Aqj;3`EMiv6wl0Cii#9plc+sbmI5rf+z2dAsEIszp^9? +5!_C2C*<*dT0cht$Ix3%ykKM1Q9-_ +dHxTWSV0H<07jV=#c-2YA5&9+N&{t{j(ZIxB@g8{JBOW+h+z&=lOrUybQaVr*T?VyWxK8n-CnDk%y7d ++Z!e&y*lKAg+6gVCr>PkJPDqktaV<^rZ%*26UVU$EFfSBelTwe6vsS8m%TTTuKCTs?4Ln(Z8%4iLNAmw~hwb+SNvEiYFq4(aI)%B7}VfY&H;Xhe9)ni96XUVH&+42 +S?b0o>mKL6_Tt;))shp9Z=@=-_Ce0;eEAahKI)L2QJ!mUtk+t|irfW(VM*1~&^Cu4wmPF@QTzCzA_q1p_5ED;7p38rC +=QJ7=+9ZUi09jwWKJeB~_6?n-Q(^Lco1gBeH-)3OFKRb{at$y%zvo?ZU@=I2*q_44xa?InXczkGB3=K +SnOBY}N5Nfy>STnvx@#(LY;f#`i*YYP$n={|16(IJ`MrZk3^ld&MfwzZ{&ZOEVEquPr%mm +8Zl;qG$rABPc@)dR5~Z`-GBQNxh21EPP6Kp=%@`fayiB?Xc^+Wo3f*lWWK*W^G%p8$sQrb)a3HYlQ +pqs{&DFHcjM;tYMTi4ePuw^wiJlnsalfV$Z#*8)Yp}O>4A2R~$%IFk@CaVulb0Nf@4fAj&c1}ci8#27 +zwYtZ9DgOztq-4(b>lrVyPBnq2iKBhZz8g}1%>>Ym!0%19QKB%<%Z4ZK5NtUSPiogh1cNI{V1#O?|cM +aD4typlhIuE81^FnS=Wzc!F@4~oddS=9_-2EKB3)JXhvFJy!>gRixiv<(Cudm!D3_t-Lm->eYV(N{2S +7IcVO}_#;OEKQo~1zg*1&_)c@Q7hm~A1AGEW7 +2`^T0v)u^wsn4#1k9Z1BR~@X72mR`T +13l^ur4Q^$#F62^=o%AeL}73O3|S|&uF56@6M&=2d6pD%gnRMwLVf-0h1Dt~fN5%er?ZPUBMKyPa2jm +C8k7^h$&-wn8v{U;ag%IxNDz_IZJo?4sva$;N&G_BJ!&}ocR)9NLeY`pK_S{FahW_XaS)_WLk6)>g$C +7pxY`gqvMU0F3&O`fH^u6Tsbn*r1Znk_f*j4Eex7tCQxBdW?f6pfee2OZ{Cw;24XK9^HEKwqle{e7(b +;6HCSZ~mi%Fgp?;1v@#JK{Uj%{Yt<}(;&=@ByW$Jyf;2mV;5u#6Qlq+nvH65h%+D_Go#g<7|poP^yNX +)bAYWMVTmLXJu5bPX;o?CC8Sg}@bb(4&TURuHfLL7S3}m*CO;Iv)|_rmMfqwxwx64{S7j`jlpe34#M) +IJc*R_#@2`DMwSZ(~)iN$pM%a=8pM&e>4mF_52ETC}x&0wdDkik_o_M&@7;bGa_ +l7+-W?+KtWs6+0N_h>x-){%DgkV&%jt3ZWjk+4|^W`FWxVnL+1;ltZ)L}Gqa$>2=I4ez#64saiVW{1UiTo82>9PY8{Q30#@7#R3mm15`?J42NudG +MDL6bjW89p??7{gXP4bWO_u_=m;C2)WvDr3Ajtu1GH>v&IqJkFjpR&8M&g~M<4CFx(nv_g-Hymlb*vFq_N3t>Lld#a8;N0!3O2z3_ri}*lo~Fv!v(-DwWe-1oZMgZ;v3cDVDizw +n(j+exK%BSc?-d1i^_PGi+=Z*Yggoo5UL`dp_=RDsDibXnchpZDaCBEuRn}V|A8 +df=h!JAo(kpy7i8wd%3AFTIKs`fVWMuQ%g((fF>e`Il$U_mR8oVl~ +s}hwdtBy{to{m`Ps{v`(rq|cQ5}gJS|C=|JQiBGpz@B+A^)j(~sw0;u;eW45CEX8chz_U13%#->y5zo +gSD^GpbD|KJpAux`)Sr2IgKoKWyFW5bOt}yP^NL7=S|Vk!*OETgyoP)(rDqtbTA88@wnqfpJNd9GH6Re|IY9ZCs6*@-7mzONw>G*O`~%L%%|j(Yl57KN95 +T%K<^7Y@_O-2MEfFo5q}fEh{#HY4lRy@*hZJ%Wb3n7o2oPQ)r1=i1@H_{OvZdEYlfGp#z=73SAVmQ{s +x?FX#hKPf=t8rI2Ja=tEEne%_O{%ws*4yr4nPv0_Cf!yyaz~S>pn{2}gDKOo`&5B6BPN5!*vzXaB+q? +kc>n!tMDUSrkiZDNF|3h9R{XsqfT_y-P7eR1Xm-w++Un+I6k9r3i!eu0}*ItJwp4da9mxR$8cgO&ujB +m?nI^1n9~H{U<Gj1q>yLonNU&t`*U&8F4hbhozwD!0##0zPFDJa`fFUI+Uf;(Y|~^-P6HQ^k4Ml+MR3qc +S;QQ

dbPd3PYyX07AGvS`hkw%MWAP9FHbZJ8U?NrV}*BO=vurX56-OQbyUZwe&UJ@9U%M+MNNV3DBsaj`2hU1R<{GMf@y&HYN>c9(;ojoYn&m84F5`8d``ZoOj9SAeT*PyBfV>S3~hrd +(&>?e8x9tT-9h}9dp2WwbD&hbd~NxUt{-*+6|nTA-{u_Ci^Q0)fDR6wv)AD;XqSrwqY?X9xV48)s!#} +N^F29!fcU3$4Te~=X}l*8*v-@-3Pm|eA-{mb(~_gwQ+bnuanK-*;Hur +&}{O$&Y{2W9u)-_$KJUUelAx!-9BRUT^a696!Q&}byp${BXNfIogNc^Z2&v=qHK`-T7Jj3ymW4zF@oy +kF;;S2qRi@HoP@n1Yu=Qf~qfpg_+GzLxPaOXtKy^M~dydog+TXXEp=H{p1_;X?Jn&$zWO&OFdO2IBNz +I+D`jE*VcFk!sU3IhqGl&{oceh@g?AU0D*y{G}qz@X%NiUr!yz{FIq!9@n{8w;S;PDu<#Kd|6I#5h2m +t-v_Mdx5Ci=9tnbQ2Oq>jX6ki@#bRo^IOMOr?`piwQwG~*Q*j2owJN62Eq0scLBwNO3LDqJfH~~(s<- +zp#;7){@D6JzK@4LdoDCusqnDpM)RZHE*NYGAV&5E|69OeCKbmT-BK{Ciy^W8d6^W^w^JTj@{`xf3iz +2CayV*d?7$`BhD-4qo+#W}_es5II*t+-hy(RU?!+OGB#&bO^#(RCE%3esc +v!gYKG`*NLX)+&^**;-Ns$>Qr-PLt`S=uv*~C2#wL`X4{@`p!dVKsfzekDj$9l%T+zs;p_)Nf((Om+< +`UOYN9y>>!2e#Nl=ydHDz&QRg5Zyj9=LP0;!Ut{gt$9#MIcmh*IMSgcSSF{c5hJ&6jh*2>wag$z6$#X +dDufC5hHP9Mh%YH0?Ihy?GF98LaDw%8#^_xL3#O1@wC{Vk&q89CfWULC855Pjw(BWfVw1?f$JPOny#N +R(EXo;w{%Pw09tfig7Cx*AfdShBJ +`(vA|dS}QP_QRiJW8YwZA=d7p_jr%lJVG4iwouu7JH=^x_i&0SXP=O+9y)xf>VP~}0d`_n6d7W1_YE< +Y6{NkTpUfp13~_Z4V?%qnUM1-cHr6`1%K*yAX`0VlbjW&-TK6N28rSzh%Mf&5>#S;<)2G{}eo9HfPbGhIo)sAGNB +*)g#V#bj2qTqJwk;V*Rc3)9>@a2`j5x0FsPmwEU{Z%@{2fGGJic@c!-^a=2S~`u9wCTHe8M( +&SArdZm-Zvu9M>}VCwyaz6im<1GqU`slvR@6RGMWT}0@3{I$1&l3X#c3VsVrk#s&9(R4k4mAKq$iPiT +z1Ie5*MR*~YvQO|Q(sfoYGO2Y)3G; +X{mh0bhAx}CeA`30SIIlel6`bJ}Oe`V=Hu+tW(ek+tsMK==8MxtHKmyNQdF=B*Ho9Kv85Yj|gEB8(@t +Lg{tl&_wr? +S6~0@v{T73nWqa4`^Bb`2#sAd)8?))Zc9oS3d*TJZfP<-S_p!wfgd*wF)OSTRrH6CZW_Id6rP+B%VEY +GSJ??BGYWcim(fS)7!-r-(;-v$=5`b_7Y>=wxKXh2aWV#bMkY-D8rLtuM!fil_XA+_Bgb#47@XY5x^x +%U3`27HVu3T8A>Yqt3Tq`&eqDi{9Xj`Tp;r$j*+B{n5`@pRgq=9(B)wq$CtsLRX@?!hPH`7Xj0~^T@? +}{CBu&>8UbQE(G$*5fUAfIzy=3Qj+F@Mc)FrYi3ocV6PWJMVb!@l-U4Wjj23;@a9xvyGjAjShdr_1== +Uq-z$tpo4aC|^8RO?D7tOd=brdVBv(WK0XcPe92*rP#~jTTVn79`FFUNeS`moA7!K}!WPk3K96>SWNN +=mS-x9xz}prC6-B;A{jg^XeD#-9o-S&Plz-o-l``!^3wwgUj|@y4J2gtdbudnLD)xlF=S%QwvdH-XXSEv^6 +x|*)VRc*&3o^iGT~1e{j&FWx^F~K#Y4XG?>b%gs7#YJ!hy_Kzz!vD_ +nXFhv$tMOu-?r2WLx=5ZhzTeT_U?vE7&CTCwQ1QX3c|lk6@FV6F-mC#>QcJn0vUu1QBkg)jE^2)_q*{b)*8J(6w0%21DB9$O*FM| +@B^sY6tF>YlioIo^!_2T)4`1QY-O00;p4c~(;(W`@cs0RRB_0ssIc0001RX>c!JX>N37a&BR4FJo+JF +Jo_QZDDR?Ut@1>bY*ySE^v8;l0j~RFc3xeK82MPNGS)1l&VtIN?EjHJmr=3iI|7ts-CI61@Gg- +tk@Ic%N>(CYdEc`{B@JzJ>>y=~6FNFc28~+5e~DruP +;TXD+?_}z6J%loVt}VQtQa;e|i%DaD7}5m@bfL(4JKZxQQ;zUgU=hCz1bQbAt;4b!e{am@R|E5mNRIP +)h>@6aWAK2mt$eR#R$OWPFeW005{7000>P003}la4%nJZggdGZeeUMV{B?AlhDcG+6Lto-D&#@SwkX@G#3k8hO^8}WHy3sPrEWKcs1Ud~RHhuH^W+w_xGSO9OH;q8m#+MxP&ty}e>Ld2q8P(j=ZhLXIcMEl(q +mBiELhXvC{dhcOdlM*UU)283b*lWRhCBfRF>;3%dW&nD~t_iB1|ntPlAJ8twpVX81(du_{&GG!}&-kF +Ju+ek@N(ZTKUS3PPSBw!^Cd><|9hLmz*!e*Ny}m-o!*l_SxEjI(byq3EKcBbbxI}Q>E;9;m5-_*b~8u +s*|RLy2ny#{f0jX1Q;BMJZOS@&Uz1trXh!-W3R*!&M>_N2Y&+}>RPd}jc}te49Zf4x%tj6+; +<4er*D<+1(vDWs)x=`Xd!WlSu(J?jO*}IUyo-=U(sidcUc7+vxFyjj8+9Ue+A%|eTVR{e{4*f=SDCfs +nG{P46Eqhy!npU$spK!Zf=Vcj3SDCLP{+$h!(iNkLS)yl^XkLn5HkdF=M{K~YR&ZI)MG*ak8iHZyLcI +6fim3wy_Xc0ppw>(aWUQ%(IyWysSb3A&m~3^jJ~v+CjN6i6(^@) +vB^K(-+#W}i+>>ZZ@&Jyr1b?-N1le)LR>$qck6|_JE9t0$b%<6>iqhE42)ri8&g?sv(+CMV#pL|jpr-fDhxu2=bXyK +Hi%a4D1ZoD)Z3bY{Vf|7BKZne0DMO9KQH000080Q-4XQqOyBujqT?j1EGu{mr(NrNQSCN9;2?@BO>h>g +L9S71HFbFlCHzdy!A^3ALe2RN6ZqV!Q-2+CkHit`y+)LP$3T?%v&dIk@0pJlx2hdI$FmhBtU%e|O)ylff?m@f$dX+Mif9IrFM2 +9;t%GXgj>+(%@{aV_^?pEql71Lpt8l?u}GuE*Bd)EQd&U^xrN{l~=;>v&6A}rl%jQ3a%TIZkMOeL-B} +(t8zxaZ``RoqYZYbxr8WsXQglMu!iF2cF0@)5d#NBqt(!-3u8z#8nS?6h27D(ijKQXkc{$(9M?0e@Uc +@*W|_!q-~bPLKo>=wj(ZSIr!>Y)qvB#4fu#0#)4(aFLQ`ttad_v&+6$YV;5#_Z)nzZPTKgY=eubBikL +a&eZU$QD%PU(d!Iw6Jr6Um9RX^v#V(TjAVos~_uCS0iS^kd_UAp)l$QpYh&cdRqXxXJJLiw` +G)fY&@HpsaN4ii=2o*tTHh;6R0r3RhJk^vC^Cx$)o7?4K-IJoCYFf8K~PsKFufGkdx}n2L1J_XXkpbY +iNYC)X>_J2oZ%cx?e7c{`-QfmiX*jZ9=xa(={n&paj*}cU}WjI+3l=oQ4RL+( +?Y&Yv`?GhL67?Ux;u$))JfV83?4XJKdE&;WwZpZy=-+$6iGQ$4%8AZfc +YXz>}K=U8GqQ$CyEqZ?{XWT6WKyTu7|ya=3C(w#Q73Q5&=(khy1$DXE4ox#)MgXeT}CvM*!oV)--Mu) +tjMn!*9w9>?L}?vLKXLVz6T*K9VG^Xq*`IJ|lz2{b}_%*Vw90cuhi>Zt-h2`6vGZP)h>@6aWAK2mt$eR#U^Vgc8LJ001N +^000{R003}la4%nJZggdGZeeUMV{BOi0Bj-E$L`4Sx+QWLzg7U(G +lNwqF1C5+bwUm?h&XprF)jULGfmMI!Je`*sZ$hX?L{g#hz56#TN~~B#w0Gx}HgCzNcmZ=Z=U0Rk +c-LtaHj*gD1hDu33^-QV5-&xcBEc!iFFm37#QoL_#27=VV=WKOE-~xlbCLNCEtbg8s+Q~KRF9n!?2jp +bq=<#l}aiRSH$JcB_N?0dXWtmFWY;y99_FK6!rh4}5>Slb*$muKcQMAlVjn}c6r4y2C9q$LJ$R#7R;o +Fwg9{5rpv50wEC{*Q3ox&Gwud`SceWtA;kDZ7Z^ot35 +G812&%v^#ru}BGRwxMQCLurF-M>oo0Li-Xbxsn^aVazUkh}kEEr(WJ$?}>u0|ZUT1kxBYCPG38a7DNztx!5;1f;%i)IpK$6vO +ZL*MLkaWwe9QytNDSUr?*UF)1MC};-51JQkbAbOCY1vJ~;qN6=H;lE0p^iYHB^%y@rK~{y@dAZafVPey2Iw^`d1x +AqTYAwD0o$cNmM8%l@)hAT4$O-_Kqc(1y;-6GTCj>euj=9o!6C`nF{klf-=b +Hi-i*8-Y>RTHM@zeL!|_88Z&|R6_~rQ70}$uKI?znq48ghAZQg7mE~+iAN{-k>dojzjQU={C4}6ZRpS +_83OJI2%k{)8$h;D7DPbxAhl$skT4s;C!Gl_u=#ZdNfiDKI615jvu^gbHp6@O7U9euh +oVC1iYsrURUC16;teea|Wd=^Yiavq&G27M2-i($|d?wniaXqYz!xK#hV0nJW#YTij$pBS>lG`&JlhhZ +%r?mJGIj@Ha0{`sg5vB)9}fqG(&OFug7n9Y(81T$D!XZavcHRJfN}Z1$(%n8k8q+_Bt9J#N!%y2wF?# +*wz*nCU+N{Z@ywSuw@VU=$*fFP}doi|xu&X~;!au8|#UvBGuu#sj~29h3Jki8AV<+9h*x!_aewrY7_f +K|BilJJyLdVn+`~Rm>$uMvq91GdxM`nV=ZA@DT$jq+Rmztu)>jJ?k3S)>0UiM|%PIC4xXl4r5L-iN$y +4bQWjU$yZ*QMHh92-?kS+H!u5meY*lW^+-8Cm36cEenEx-$b7FS1j`YRf>5;amS4j*>`L{*2ZdTN7Zt +RwLxJNJwOc{q)5@X~J`RWw*y;tAott@=s@Jd0+rM_bfOu1fQKgm}`cnzXSLX?>8*EOkX9~Iql=BO7zK +)eD40hQScf6_@Y+4s)o3Mqj6*~!PgE578(yUk07KdKTk;zg4^Q~DzCQ(=;ai7^zDL^@S;v%u8OXpndh ++&uUX2+}DxYc1Qn6|nDsdlWovb&sS6L#n}ys-(5wb#5CEp~MvN+G9ldI{g+ZL84r$0yJ6CzL_=rk0vs +aVZ*XRjdg1?Z5&*Q-C@i8$V|9DQLodOIrlF0|WdMelW{~PeHdabyIt0vAfU6?t3~?TFXz{!gF%P4i=t +4!kXHA@ON6A>JL%qXSW?QpJ@sJJI!edR(4ylPR%F&CsONnD=Zml!U;MkDO9>iUIPx*M53w&Ks`072dp ++i$ANkiINZ-ryF6eJ08sqVZ<=BAPxLj^wsjdWDY;^MIR(D!Pp@@jdaYFiTDiFJ@pfQOoeL#uRAP`qwj +5eJ6@hZE1yDfF@mV9fsgOp5-t(Fnxp22iwvD)?O_EQJ0CmXV5YBv0`!{ER;24GMZuWIkd+>goj)eC2to}8jkTi +6Rn1IWL9JEYsq!;8d)Sr(#k?;8E=sMiPSHTAV#Vgzl+!^;YeZFB)raA5c8k_CM-E7LE@X_vU1$is*E8 +qsD8bHV$tFTwI1NsI%5_M9+RzOkDP_jt?7gNTt(VpU_F0<)4$JpvMB+LDPTMPE%A*gSi#01aLSm7lE2 +*D90k2zXrXIm^St0ZJxGPD)?r}BW=F%-KD?WcmIq_t!a&@6_Rmd68-ujS}Pnm9QO40wq{Sj}8YA`-Zk^Yym)w!Yc3vU?x8B3W3p#S!LUc#XL#ab%JQisvEC(O8QDg9G|41W9X*|0L7 +k_svj7hCz+=W!mL=Abb&V9Wj)Rvv8DmcaF>M}6TXP^(uUU1BEB`?mE7ICg;JcH*LEX7uZ3^ILZ}3F-i +kly!<--n@kCxn`Q`xZZ~+Vuf??S3D@G1XK5vCPZ;P@)4L;Y3!=sY3=P$4nRE*Ze*lgDYsrJ_xhwv?H7 +Usg%K_!M(B}={OFm|W=>7?O^4e@%CxxR}hV#6r6Wy3(L1L!kiEB>Fzi~lE&u=X20gK<1}0q&SCTDFBG +raSqH;g1O(aSa604|^4^Ui-~+bfL%im;w%=&L0B@KA6uS-+-_EPkqdQjfj&O3&Z~w?kwjp6l;SXgHlI +KH4W@2nd$Oi27)0MPx5?7tCzI8ipUivK}YytYY?w-pTy=zyanhk_*j|)cS~mXAbYC+pcb4sqP@nBkg3 +7!xLFg0rM#k6=Iy_>l_K8RP`3uO2_p21Y+zrhcJ2`U*lM>&>|P~uF=k`I2$0t;b79~tk5+ugD48oSm0CRS(4#7VO?~Tu!T95uroXtfZB6|$ +8|GCKzRzOVz8$p;RyxZ;6aB;sEQj<p8Qe6|dr`rz +P(Ie7JtpT(og?x(#m2%FIV=7GNN`85xfuEo08L$s$55^ZW=lPrIarW+)EA7P}s8^N#ObRRzjYQK0JO=*K6ekd}YS5%@qq*;av02PK<-2q4+sYCQyxV% +8--+q>&kAS~+aAF;0c`oqKF~+y2*N1XIq~$ecD?4WK`-Qo~&3sKCyJ_5EGTmN!=ev$vg_2cvhgEJ1xKbzTbNZe3Nm7As +L%UgG))FN1w6(ek_Ym;K!#v(OMUYpg6ymaA3GZCwBH>izeB`*=OPyi|)tPqT#}5DF5^N>vTht)$5#(O +l^jw^Jj37Ne2Xo3jzaXIH1VI#;FAe8oqP*k6=2OwCy#=X0U4DHB>NZCK7LtXm1s#4e?oFj?hgQ;@9J8 +)L=lEiGj*78qSQ*6vO=5)ZkkEqm*}poAAEZp+TudsRWu5sc2JMwBAA(}?#pFS#+}S_=rIMRDdWIOktMaeJpDM+vd#Y%N%!swbA+Rcg)FOPH?ZNP073!SF4 +s32ulA6i>>MeQu0p5Vcu}z|0b@v|uL;F*Hr>@NOyzeu9usu6Yh$F{Im?!>Crdjn~pH{o066VAsmgqdjMzS}FE$B}iAb-An;a2~ +d+Hog7`gyY6;(yKl}}DUBT;BCeO*2m|s@w`ps-8@(aD3gNINt+o_@q6Ks&BO*B5V@eAC4qZj41GfO;L +LyX{cN#hO_FpS~XZn`+M)&3h!W1gOtby5_SGh#WpdHER!MdKBOv%WWB)v06$tkoSY-ffxgz1wc*=HrI +ai?CIIqAhXDv|m?@L~6pcel50iHpc#cXDK<5qm2-4;hW7Zva1q8>LmbU+sy%@M+tG|O>Henp81o?kFku{*JuDXsx;8dO_@FoDxRiH-EoFg>%<@JXB*zqtmdMfl?Yx%wVdP4dT(`yz7{ +R$`#QKSWnc(Lxi^>IHabP$`ONYUP%^FH9Riqs@#*a*n3%$XPJdB(1+1 +Itk9&9JE*r{23>xMv0G2hj6;I+8mKFJO4sH}gd=8`;#YWW! +-CMIw7VD+Vm#_q4VhN^LEFNk&7giRcQf4Lo1+iM +gJOd7pdJ|ItKGA0!%DmKq7n>FdD{`$bVZDcQ9s +g?_V+cRLHa7FDyd`IF%3yU`i7LTOaF*1t*y=3$;kq4-pr^iIjJ}B`08Y}sW&GQSxlIdSFc}x+Y+H-2@ +N-Cb#T&mf~T&`ZEA7G(3&YNMja`IYLqp$a7Y%uha1N}&n@#$(XL>zO-DVMQI7*b8Zwb_7)@f?x|gakE +e2~Ch%&3J5V0;VP`lFO_rWPVaaq`>YFZAvTL=#a&V2Mz@bFoQz(+zT3&(TG>snNk9y5wdIAN&p6Jofc +CLppSCquDk~`efch_+t +@CnGchN`kzN6nOZuT!4dB0vcQi}DT~&x1S6M^$hg+87FygYq8l4P!tpQN`@*dAH<84sde&ZT4R2D7Bn +A(uD7T2aOkTZuovj%C);!W9zw=4Bo5|{1fCJj~AH1oN9Kr|$e$MAz3&(q@ZW3LIixhb_#egW%lc2wb} +?{9Hqoc!~r)6>)E?_Rz9j=JUc>f5cWS4pSn_n}yQ2w3-etN*eZ{Z18R%e*USz!!LEtaf++qo-`VGZe# +#zhN&@`roJWHu)pG4l>wHi$SdCqUh`n{`*~VH$}UJ8EyG6Q1gbjnVMP*ZuN*=+$&kIpM}QkBJZW^@BG +l6W&25*-(#*lXQ$ceaJ=_aNWddGrq^?J(lRFek`t4Bt%7i7i;)il+JJIVXsq}uY3B)6vR@+2)E2+)3$ +v?XuhpVMrr_Ap9!ZGQDm_qwl6JeeZKOa3d)T`7h`o7v`pOUdxxxsPTO>GFR#9ZcjwT0#oj9 +_007aX-69=QV^cIzB7E9M}A`xPCaXTg+)k-nvrKVPuJF`m2B*{)L38#>*5B4p1hrsbr-Cd2W>`c?|+J +E0k;}N@Diu^7>$6;vQR28X?Od4G`H2ljrMYV^ID^)b5=(qLJ1mTEB^O~tf`(r-`v9yC&Mz#lfW=DVCd +Hn@Of*S?-UcMN&3x>;K7mcm=IfwG&aXil8G-Tjs-fQzPl}f{rse8SX=SBleAB-)TQl@5~=}a*mUk2>B +cT^X!JN$T2Y=N_-dk_K;lzcTSkkGnE1agg*dO*(KsP(*Twi?F&htf`lqdG?^+cpy!X19r>jcS&Izo8 +#s(=Iv2=O~9S(C)oP8s@aO^r%d6()cR0`g6%Ku8}Cbu^PLTztO8E?R&4|{`DVtP_K`p{%7ijpy9^SAI +TW^Zov07i6_xXdLa9TXON_Q6Pe{3*uv*tKXG-bA~ct-5$n_UCi3HxV;5NciG)3Nm)(3xOyioK*1aJ&0 +_c{6s~s+IEEmDyy}*|8pSG@gl1=s=&};=@qp0*606h2CIS~iRgNTFF{`vO(+x9BmIY4x6RauQmMM{xx +E`FTe{NuyhYv}unKWkO$bg$%%KoljL*(;gpX$JC=r8aP6z5w +TA4nC)xcnMkv+l0I_dS|Ade0VK;>?KAia(sY7o>-qLUI@W5DyCJl#DKEKHVFpTg!dw?{NF+`7OFWib+ +Rs@ZHl8>FMp5hY|n)$wB}CAOHXWaA|NaUukZ1WpZv|Y%gPMX) +khRabII^ZEaz0WG--d)mv?k+c=W`?q9)Ee~3G<)w4P5F3y1Nb|&fFG%lI+CA}Lg27w?;w9Rc<(uz`de +1rM#S5+iMQlk1LGl#<&4YW;>#bU8uo+?sN6uqviE)$hx-GQ^$_3@Zh1>0tlv%JitP5%;s^U5Dk+q^cF>!3_wnMrLf7~(452E7jiQ&4kvSgx@><-pax4h8H;#D +rVTru9|@gj<%#X{37>-`?sGCyl+zR8nZ?ArRsc72t1bzMrs0<5(YS*f1ZO$Wb0mipn}va;uTWOr(C#r +nzj)oI1v3E8dKho%GJX61_A^i9bZs(T}vI2BdLTX+=bu&jaV=L6^EYitR2ErscrAB&oZ%bAWbZhWeD# +*ETRF*ii_hEdS^wHu9ktyWSl1q$pm~gRfJ}M|7AR*nR?T=P+OE$^ +Ufr2FTZj;#4r!0Zo7(4#1$uSZip0407%c1^wJp=M%8oou&ligY#WkkQNP8vlW1?CHeB1eEK^$ZB!2jQ +?u*i-$fbGB`8Lw)>r3rcI7F}Da4S0DT4|M2D!FMc$)ru}nm$-H3Z2j--$GYMhdX692gF(Z{q2IZE1S4 +WYd^5zBpR9xU0)jwtYPvrWdq)obrm*v)Um{1D_H8Mbc?rQ%N0N;WYQ)w+9wXULu#aE9ST12nA9>fehz +Uw~&gvZ_q6~>L+S*?7cHOk~ohTqW>nUO*RAu>w4dDByFSdP$K!O3MS=Y5oJ#@vQs#dH=EB5ECl>FRsg +dd;;gr>uWd0-rh=iD0wv%w>ulFwb7H3%)1@ZAp8Y)@wcHEJ_Q#FI(YgwmhUnGFc&*`ytG#yI162Vv0sd!w*$pa-Iu_Okt7V=V{DpU*1DebltO9~;!8AF4w|Bk +3)vptZI?0o?mSh}36&%fU;4Z$LCSWvXI_u50Ax;$knlL%&7nb)n$G#qrdfE`*f8+QlFL@N +a)$w<5nqOzx3E&x7c7EK;-_+UJobcpV*oHkR*^LabckE#Pg(8-X)7Zpe1)#F0Z3d#Ky2lIexwx +{MPc$V@>Al)47w1LhD5nQi5A(#7?kMyc#HOHZaWC|OQiftlhTwWy{ufX(A(M(3#FQx*Xaa(_o?xxP|p +IVSo)QX0P6Jyo>K6uN^?2wu{e_&p%%`!BTeuj +!^ls-72>6e&pNM!grx8=G+XankMC-yxi!Vq)6f?kBU!$+quLwXc2^z%gjm40u0GOKVm`Eb8qT;AVs@a +soN8IZ?&SOml}7z5F4&>X^B;D5noqW@K%yQM!iR>KjDC7#P5=+L;L8~md7h#Dkbq3Zvot@}npL +jw_4A^bSOid%{4LFbfRT*N5ZJ-B;XoHDUJPBbv7Xx(7t1>j8$qgu!tni>aoqf!f%avBt$5*8q7rZWLX +nLq%19!OVG%pAO=;eoL4M`$;mzp2CX8u(VALoRs{TanYsYUtepCRAlAjT|6c95Cjnzz{(d#~H#UaaZ=}d_9IWvZPE425U@ +Q|+z~uh(^78uoAKqQ2H<$0P-&}o6Z~lIL`3bXuY0en`@Ykz%Z_>*j{}xCnEq>pr9@@5_yV(|N!({`m5N;oDQ23!CI4E9uUgfw +FfGzqDuXmtv~@-G4mAXKP(r3#vinwaoJ`y1v}#K~RO~abT;IbssVR=x3G-mJ{{Sls*eXn~Gpvx|W~jh +{s4=!~#PC~J09+xBDTSI3xn;Omvj7NZV3Vj|V^)m8Ataf}!MK6jdJmAb*H(_ +_OUqJ7XJOP3^GM!;WOx4ktuJ*~;6mf91nbhQbDcy;T#3!V7r7cz~Kt?BAci$8l1r9xvvvFFYXPW9~bV +_v%4j#J34cI8C!;u^tQzZ=W(f}Ca&sRUb`SAG@qlJLfd4)#H-UGmAW|*c)HUh5Kqy?A+0K&@(;Iyc78 +H@UYR~M3sZxYF8=FKjR$B>w{c2lw +&@SW+r#umWf{$W`RPErtN%l$Jz+fn!-LYfmb$>zbP|hVO;^0T-sm6}Gx8w=`ci^QF501V9dH$HKmQ9P +|{OSW>N_1iZKGO!3AtdEa7%rS-GVjaykAFxWT~1^=*zUsR;ROx)&@UaC1sCn-vfMH0-Po$wEloi@{7< +O3oO&f-7|lzspu&{32R%G5$__*I83;WHJVD7y;4E88agLtMeRf2Yt6sH3RQe83$(tgN&(dz;V>Zlq8<@Lao=ZPZJ^*;ofCaY5$NDGDd(=(OQnr;0{HUf?Y%YkN2pfagI1IuixiYV##upM5YO4uzd^nHoTfgUAoeP+<~)2dKlAvmvB#zQhlK2_$92CTjRx(5 +rwls<2Io)5&S$*I~&fDHi1*5m7@l_5K#v16WZ<+n~DZR&2f0!`ZWwKj?>PycS#s=Wm?{*H2=_$q>I&(jf2E{7v1ZsE2Q=q>D3Tnzk-_I{A;MJ)Ce1faZaXCBQS@wkPiPH}0ujG2~yELGj&=vKIt!`ey56m^aZQa8N%m>J+=~aI@~AvnCYJtG7O=sxu9E0V(N^F^>a6nKEkVW6w4w=K +tITrpU`Yh(tU(Em^7YGOo$bnOAE34ehXVmWiC(>me>ZyWd6AGzza=(4MKB-iRIYIB(8uKBpY%L!t>Yj +ah!j4@g9lFn4&A3N+nhQYY3bj7CpYpX?vGVqS^;)J4r`z}Y9F8F3~@bizK^(6aXgXZc#a=%I(yhunQk ++?4!6tu&{53Va`Tg(y=m-I+PnX}EhRQDnd#68Lg2a4$#o{>r5&)U*eW*v#rOrUU +5mJ(BIhW6X8GYe%Inv<=?x%Sj$sO=wurkw-;;q1`ktuN|_N!|W=G$)oOR)d|LB6&(RPkaI0imMD44(> +2qPnZi?J#wtNmZR7;l2|fU56aiFJTvJQ$hu}h_@@KhKZN3?9m27t$Ruku_Rh%bg|f_6@47CKb3%QIik +!KrU!$?)1yJW-+->|Rk`q0JUy%wTl2MDcm#BOdJcj3LS**X@5 +ewt`{6Z=aT23*s-82UEE8n2xrzdbET#irqik1kNCpkfyt#sqGU%`8X$ZB;}acoUt1s*|OuOZ5=(y3ti +n9AGcQjO`C4GbS;paJU%Y2 +k0>FFH2NJgl5SW##}R&n%YV7o{soyD!ydrH71K_0STNSh90DLskvw87_!UMXxnBq +S5-Z{D|c8!UZN9quhtE&!EJnaI=aysq5ef1b)bshfAPVcJ>o~*L|=R>1Nw%i$KFegGqv}>*F8J-vZG1 +_%Q{x_3}2F|xF>!9DL)f4Glvf^mSE9f&?h9vG2f+=8a?J`;_{d1Kh9so>PRKb4Srs}EJRMF0oY?2mqa +Y`@3Y&LpHKA+KhsvfWqJnkexf0ZYmquEV71GO>D2C8t##xp3HleCf2G7>9z{}HZCPhxDdl|&Rk6 +fq4Q(w-AhP(BoH*|557G3i9U+#VO>nabPqZZ(z1?ZG +bFM)9K#^3v>f-9gBc)DrsZH-C`1!VOT7eHK(V<&y)bhxQ;mSO@d*!dmTpCrwI{cmZT(H^4^yY+>79|XZ;IZ=B>vCwDV +8VuWb}LVYLaVTiTBH8_PpmwSuRYHs-mQ}7H~ +B`|K;N9azA@Cq2^yP3yzFQOD$J&FmQCH$!TqC0**I+ZM0ZOTCl}pJQxg8L80{}OqEQ}-4QuW*~x(5FJ +n0|po|O?`It;!kaHy?&HZW04a1t97o}hY&Su$})=G~cxfYOf$<5k}n79`z76v+2=7bolzf@|}*DFd>% +Wqj!ebhH$+}f~!XSiJ~M$H*so93;+#nBb>3bm^_7g(BKe8B2Q_|a+EQk`EG>6+?b2k67;_4S{#Vaswv +&We(2o>C#U6Y`u?WkxMCGs6&~87@ZM7$SMfT1_A{aE0r>b>8yaI3^bg@o`F?Bu~HnAsjP4*)b_uL{q> +Oe>HTTdy5D+J%87>Vh?bT7@Mie_QXcId-N#U=_+{PAO?=NczqMzMhA=;-;wWvgk_NMiVDL9J$mr=HuY +LGXiogfsJ)7Df1gu0*=Xz-4atyv(}&4uOdj_<_ZWOhl8|9v#|_Wy+PS}t?L`nBV*7AZBWj^Fk;?W=?u +Lt|i2ThOx4gkqE6d1|g +jkU~qUnlq*@$tJs&vtPy>$NTxMIJn<0j|H-X5$4;<%&ex!O2;*YuVVN|u7k8)5`?>MBCBjHpUS@9sY{ +(D&V$U~&(K7m1b*yxJR! +`c2}E2m*w2L^rN)LjQ4^J>)F4f`1Wrauri?IPX-l3xAu*FVWWuww5_XJug)AHfv?G#l7%Qh#xRafBNU +oL@h6sMcpgg_hX8Ljt00QooVod-UQr* +eQdbSBjoJNuJyjH4oLIJxPB*{Jy@j1h&x-H?Pr13_D<`Y5z|8K9DnNme7(VT;^&te1x+enc-yDS+ySj ++eFj))4@eozWktG4*%;c6BWsaO&D!Ba(y_69RJZh_pjr7a!fyw1Q2z?Y(G#QgvNeM?BD8evY*icj4q0~{z ++pwriCM{<8`(6eOEoOg*q@H%gPO=u3W^LfESn41xkz{^Yd31lPHBJECKZx1xZ4KjGI!>En*kA*|1}@h +q(TB8$q#IGV5?11)TQ^;f`g8bTrCog^_`Z4c(er9|;DT2Ef%@a2YvYRoYjoaIk}QzKN_$7MB&N_|O3`!(U$+|Ux%s#&?#w^n_5EU)o1gEOai3$FeHq +X>{0!LbdSqvE-UXh6djqz2h`1}XH)>;=wvA*iCViQz%J4-7T#(OZW{s>AjvzmuU(OM788bCV5IvIIa* +9=3QP72_`41LQCPW6^m$)Ii3Diab|1eUNRVOZD~$svlZx-bAK@_w8<+>1ScYn`$iC7t%Y^PQ`Wt{uee3JTkOLw)xPM3mY2Ts9v34Nyx11QY-O00;p4c~(>XdH_p +U0001V0000X0001RX>c!JX>N37a&BR4FJo+JFLQKZbaiuIV{c?-b1rasJ&UmofG`Ze_FT~ups+GP8$< +;pC~3-=|G$6*Hp`aPQbN@*g$_`J<)t2scH*1-GZ9*mYV(2AoVfbRM)?f`T!O8zsV`QJ?77H)jX><@T+ +@d7A8~*OP)h>@6aWAK2mt$eR#W1KK|^)~005W{001HY003}la4%nJZggdGZeeUMV{dJ3VQyq|FJE72Z +fSI1UoLQYombzF<1`R{&tEYL545K?@LXw;?)DC`5^yVVa1X0h*G-(ps$&P+X)hrDcV_IQb=oWt`jTdT +e*VTDPtr6^9$9{1dk(o)jtM2y9+;HShz3P<%~WBN6zvjGH`+J|4=Hv@X>^S?Qu5pht!%FX#cE!-wvjx +TxUQk7z4oo@R`6crZUrA3@?$ayc9=5T3gx&#S(ZzY?U?1;9>w5)A6}EB|MQ?q4R=w}MH*?+6{NK;TFJ +K!bJYrR$*kRy^$Ki@cBV_0N%9qZs)U6?_@$r_3e7Dr*tIIJK$lQ)cI-fk($Qi{ZBQZ`(5-7)x4{5w_@ +LNMlGjm-!V_5(A}kRWxwcMr%YGTwM`#SUT={@6>ovuD$$X?w6$fn!Zb(%#hn(0;&O+EmvJOqr_`{Jaa +FuTN6+SqG)dH;+tYehwBwWy0TsEXvJoiOTF&5$}#g~=0EnC_J6s2YdT$JP11Le#LZeU>>o{LiCxLGu-4dlQAe0XPmSc_J8+>7=&?mLbl9A=cZ;dDG%nG71K4XRdOaOnWP`D~7(@m^jc%9c +zuPz(hRu{{MAnLUd7R>|H;P1F-rIAAe?}5*1d|QG@S +pz=K|@yqD>7cs^l2^v?- +Ql^1>YwSkQfn!m1D;Nw$qbjU1Q2Co*(9d3Qke_dlF2*`VBi+*-h1~Vn@1jYV0rqn?RSM;yafF|E0kqG8~aSHXmepGxcT4+zT2>DN!~G^lx)G&Um9)@QJj~kt-UUzdo|?ZyPj=DE88O^pUm!+a2t=!!g?QhH?Ip{RKnt +^nBfoVBYo53xW9kKp_mywnh#9J^h$>YekLi$P6{Gmm+x9htD9IdY{kS59E?9u-55yu8qM?mkoUSW`ZM +kiF6EKN0cs?8b6zGn_@4v0h$jIK9Vx2Puwhe%)xd57I+#5ScJuoDw7>}XBW#phA6MXY|h(spk$OVaA|NaUukZ1WpZv|Y%gPPZEaz0WO +FZLVPj}zE^v9xSzB-8HWq&OuOKuSL~3nix>%rqv7SYdPIn6wX)wv|KBR#nOSG+47PTZ5k2lDF?>UF0L +|vR@+5+7G6UXGaUp^jkihV7lWo}?tE19<&r-#@Z$@IDBP)w|ohqJWV!uzT+-bTnUr(_po$5vbQ_huR`S9` +Mk00mk`d=3pAFi*bIQgfH*SZju8mRdorI2%WRn+v?6t8iu6x*#Ak1f|fzzUbMSxKL4)vbj|Ql)#IB++ +a(%gR(Kc9CW~ZgqzCGg{6V`~*QjpWj!i=9y*~3)oJ#91S^B?6Bj!WEo0`XGD74tZmfP(yT04UdSc8-i +ZU#J8r0P4I~PAj4e@7ZG@%5Kjl8fps;i;8r|_Z>Jsw3q^wge(I>^khSh2I3z(;v0@)lgSB-fk--`#nW +FP61i312`@EKHjcNXYlWX0{VW#?>lxyDYG=38Fsbj+gZ+xaKAH4Aupda1B*#bh30Ws_l}I6c +$>Y5mkbf*NKY;VIfSEaZ$l=EFB75v704gk48l8YI2^D_=i~V2(SaxGNTpbW%UK}Ci$WmgD4MrSrkxba0c-_bb6 +yfZ@k7?t9Ipl@xwr8q45gOyj@z?9FEQ%mwfJg#+EZO7S4>g6`|#^9}7ovYgq0=n|ae4w_h#qI-AX5-J +Z!fO7LeQ%VX=oYrM9rZd7QSx7S;*Xk(a%?mSra%7lpemZSxYSpL8f1~)?BA%8^jX3s0F0uP0(f7rg^s +70bFtBLf_HoI!}$xiD!p~(+Q3uXo~Du$IR_x7AuQPg8@2a6Fa%|NQFn&68d@-&lV6Nyq}sjY0o-=($V +MtTntjP%bDU^qMxo&~D-A5IJ1_#2xuDQU+sA_*sqK4H>pB~JR`g$d?2JIeI&$lVI!oad0#39#}eAOGj +d&Qy>h{s|_mt;1fYe90as+p&#f~|Ld51GQz9L)iHA~Rx2MsUQk4?j8 +>jIL*d>ji#qHUPoTB!Fb|`LL)Py?X+%XNjM#hj)$fJtNz}JD4R0=RI}j{>iWcCwlk3p`8ThuGk#CDT= +)9W)TY+eE5$J0s(G~;YBO#iQ6i3e(JY=(10msZ{;|TO{g>v2P-C2jBe6%3zCP9udnvxDT6EKfSG2r_Qfu{6(I +Ny+~ZxfxgmMp39%AQ-rY7n|-a)D4NcjOYI+!xj!l$!!Wh6{Ot~pFJ=E%@ZzpaFN?Y=ITRe1N>e?dG8i~`gO|QRZqOW +bVYv)MSAD?@bX1gHEVh<1}G%+;d41u>kbWqpwT7N$?(+1%P=djUf}5coOQHfyPWV4(>{yAx> +cibFFkaGZ#b?Taoz69$un7cFk@iQenV4YaB`n%j;rtvAP~4htdXS^et675nR7zMiwftEM;f`!O$YCS5 +mlCs{l~U*KE!Q@D6sH$|C0MSovB){R@48Gis(OkKyRwt#Nd{yoP+(e?M||q37HL`UQkbo|1X +z2Z0J-NM-vTIM?#Zdpp%PC19Kor98=X{{fFq2BNi+wPN-KI@siA*2Wle ++(7ydoILxvfo*f@v->YF_V+zu+8#(G0%D}`Mp)?hwYKMitLjWUAI2{9v{`qUz;mqg1BKInjdZpEd4r$MD{dhZJJD^N=V1QY-O00;p4c~(;zHf)J80ssJ&1^@sb00 +01RX>c!JX>N37a&BR4FJo_QZDDR?b1!3PWn*hDaCx;5&Y5WV|X41t0TUbE*w_Y!(5yO6NGgkThV> +}VrPT79(S-|xs@QMPV-X+zJ&kg3a*yR*7}Yc}qn#+NtDWyZyDzVfTBpdD!iiDwRgV99Pm7)d{QfRGB6 +~tKTX$tIn*&(xS_UZG+5Vyk7=rLM0MHV4Ww~QZw(kutmphHMMy$oPd;f+LIVTNi=XjNm{h%9{attEG6 +r(EVCp@D#5IUP2e_al8*n`y63lAt)9^E<^nS#7|B{Vv1bI5R@1SM0-;8YvPM~Pv;|crJ%qQEOiaQC^y +^L=)xw?(4r(3d%o-aoUZxgBlfxKZkH+V~OiORU?7em7kioYf#LBIc5f&hp7sBw+$xCW>wABAYsncu*B +4I;qPN$QN;FSy0cK_PMGOzBA?MnoITYK9q +tawV&SJB?_I}7wP_}6oT;W>ww6R%FdElB0AgHWvUMTD5ba>jV1<>2*P`|pR>DIdrj8TP4C52xv$CiX$ +2|5|>U{3kYB(4lm_3rFwZqWo~}`m`@{fEvGP%{!Q}Ht*TSn`v5sw2g0A@H4)(w*ne;-pJugJO@x%yiL +2&c=c1k(Wo=ZSWZi>dPxJEEj5_F@&5o&O9KQH000080Q-4XQ|fU;s?`Gk0FDa)03-ka0B~t=FJEbHbY +*gGVQepBZ*6U1Ze(*WV{dJ6Y-Mz5Z*DGdd8Jn0Z{s!$e)nHNczLjQv2WR903Xn08Bnad1W9j)Lt7ZGE +vMQP+mqz>(jfo)D9Mh0=C*Zyu`H4w$&V6Ex-W7rK^%ld%~F!D@`Xo*mGXQKc_E943j&q&_lT857@0g2 +G~3mZ8!Dt_1O+YpkY9f+K0*MtZCl?d1UQN(!q^EgxPlQ$^9;~4mq!tETFBEyErOvd7^?vew~N +j7`gV&Bjuzl!W8P2pT)Ttn2@x-Ba2)q6IUdhT^(frUa((k9aA4x-&+zkV^Yb>aC&y#+dH4Op>14zGea +E`@X!V8C4<^m}AB@)5>+tH+?W*Q(8O&fZgC9St3`N +<=HrzJ#^{5$aX9lc)$KThEw_tibEx>A&A231T6?wl6`HF0#0?Y8O>C|U1;GBOw74+#<ak4 +BcW|0u86;=hSnxa#^-FdBk1=xWK!lCY>GKWV3r638Ud9&Tr-q+npnbTdCa}sj$S4r{xOtNQeQMbG#Mv +gZWq9h5i*`u9s1YxNQ-Us-YXJmfPQ*Hb4Uh4_JF>pFu+McJo-n6&-*xQNpc?)bIRcu&wA$uBnFR(|@@ +RxuB-IIF~MN(id_gKf)El@uZ%~B7`{qMQGj->Yb*3^bzZ_e!X|0brJLO-+gt(lFWy*afWmTPsB)AI@U +v1Jf0tL(xZ&&$I3VcN~#ZO%I{GkwmdP@VdDHQP)f;ye6O^UNJKh6jBUaL#Bh0$!{&HVi31K9NDld8)T +}6z>_BbXyHkZwS18!?D5tlN>~A9?+`wr9_K6tdb4y%)VyEtSGv{frliH0e2tH5HzjR^BY~QH1AZv3_I +wfp8ouVBqWpFQ=*=cuyN3GI$oy8kn3ZB*wG!;^n!X8bKGu&?tT@DRHrws)i@@^z`Uj=i=gAShs}vBd3 +K%|>utgW=_P+a0GSZZ{TEIp876HnH=EUF4qx&T_N912jI1+#NU%^vRR03q7y+>ocKsU|xg3E1!xY>I!3_-SNTUS}sky274$p3yb{E$eAcG51od5CR +sX2|)?2WLjbp=P`xCEM+aYBwp=PbSPa(XMOGHdKhoma_w4byH_tP@>oW$jX-LwdPoZ472jFI>zL>5KT +;O>ZV{-R!$UMUDQchR1M|uEZLMrvd#oeH|%i8s@(8jsGp};M3XhG0H&M@!*Y3dcXJn$#r?&_bqy!(CNlzioo|0_S6c5zpCL!ZQ`4~_j^hDH +jQ)~;GM_LTc3lMV&|0R*jFIkETjwk5=eZ>S2%*bb|SRT-q324tYMb^-qJQmHKATpX-AoW61(W` +AG*YEM;b@Fn$Zg-aI<1-5hs1ziCd|Ol?rUi%K$Z${)UTsOmDoWUvOsB1&Jcdtg1Z1C11^5BUI3+clhU +PKJ$V0)K7D5sQ&Hu!$#Z3^93W2#LxDEW&HbUXXAWG0TP(>u<2A=ZALQvSLEXjf8V5&`~;$WZEH +LXa)Brl#Z~8K7m>mQB+6nEX=gD#mHb>HpdSJ|E!7;K^UOM!yy4g7eNN@$W4L0a^Zn!lz6I;jb&{ +Z7+~4r&Hx5lgS<~hLUmt3Hix| +6SHqHQ=8)VR9$T@2r`ivDh782R6D6kE(1bHwuTO?9?Xyf3ei&tO`-N2(8&~QDCG~IG?`zW^DA?V)OhY +~@P>S%P^%r_>ejB&E$MWFcw)A~&*l4-d4sK~-@H#S+q!Ab+QDQA3rZb|T?h5n-CFDc>@FNCu +uLSz;0-|78W38>&Z|hi2a>a)~477pG0jD^+s$%Ia`W>_{V-eoHFnWYO^4cL+o21d$h^J +(&B&UuQl?(hT`#d+UG*nLL8j~j(=MIkeWgd|H)IEV7VD-303L@yC>!16esOu%oh|9^_Gp}1G{fiXo8L +ZO_bgVmbDC*!_2sf>>F(OIISKNqTTWZ~N9S4_l-ZCO2`q?5N7L5Ba@ASG+$OJdU6?`x)>e?t1bQi_?; +x)c*@DR;)nTP2?3-0bPtp+ywjGJ;sX~c>zHKBBBL+0#kO~cXVs;Tm%O2^Ki|R?$dyat?;xt^n*YqKVT +9>p6ZF59qJ|`b$z9_QEoLhxw&}4R@I;h>`T}Zz{$V0Bj&Q&4;CW4v*kbtVOhNS1#_(9mW&DV;oxSSqWT6sbe}7wgIiGQj-3l`6+ktM716ngwMJVDy1)?GaHJycP4eP{La>E%i)=_2as +M*zV39Ylxlm5;s^$JwNmwuC$x`E)NtVmqQS4Av4q~80+KKgMUh^*gc|0IngOcmXcN}`S-Ioqp+2873f +_>WDnGh@6b}RFJ*t0+0<~tZ#a)m>Oek|y+)mJ&HdwQ1wkMuZ%Q0$IaOAyvx4J{i!;dJP)}|t?>jG5sM +>R;Q^2TZVHmQiCF9U9rO?)a65J@#!}f+;H7Y}~hpw-+=7EwOFD$rTj%w%@n_-+KWT;WisX#?k^>pY2< +jhGZavV~DM77~dNrl_@&C3a9CL>Yq;9g<4^;V9=3f&EiZxlH|?dRd4=c1CL@VZdXrpCmX9qJO=RQL&@I>P~> +bbyc5(FwqR(z2#WrTTM3zk7pOuNUuIUC!RM7@4`;y;OW`i*??^H&V|t+UB%s-+A!(>i_TdX&L6oQ?dg`u4B$E+8?| +T_p=DZ6{dFRHz9IiXdu`CMwrvSL7RSM3KZ7$iOo;5nz{DtgP^1jr5}So_NO{U*kQR=j=+eA#_s?w1s> +ciNE6ncQIo-|3ZAmjQ2B-2Rd$Y&apxD?$kvDu#bT+$O={NUk%GKqO!4&9RW|g*pxSH9nU?wFxrNZejf +q9ahvbsy|Hs*nPffnF31jUoSYy4um<)z_T4TPz8aNjFTbDj0ySEOxfzb{0r{|``00|XQR000O8`*~JV +T3!3Cp$Gr~OVaA|NaUukZ1WpZv|Y%gPPZEaz0WOFZMWny(_E^v9B8C`GOHu8Oc1*;;c1Z;% +lbhL +LbSm}daRZ6x*_NHe_bK(#F!kINIh=m%4r_8L3bQ8HLc{Mrdn07WnpL>57k +y42c~?s12t*rs!Icq}2-KeTT=8S5o)upi%9B5GrGb2acM>q|7Sx}vMhXFr(n>U(QVS}2ipoMZqpL(`x +B|ZOq8ZsK+EQ9^^clc>$KcvRwk_+*fOX+M&!J32147Hba%z~WxuN~R?9cL*Ys1W-;lgsV&&}P%#nsKt +Nfg;tq8^l$bz(2tJcZSA!%AjYKtQ&5_b8O?THcvcD1#A=&b`wGJkgZ^4!W+-qqIU7@jYmq(TYfqE3ys +VoCCzQ-AgI$SPKTtR;yLXE28)Ei9VtWr+Ba-+Nd?L8yob|jJ*9oKFf}8Rs?<=@?Op`ZyL*D3QO%T +%~&FDhRP~frQD85x&`aOC8p3lKINoK+3yH*5{?ifDD6N~XA%sx_Nnz{S%ClWb9co5(O{UAu8I5XS_6g +A%rZCUTc!05fV`hs5%?t%!eXTZW1Qb>-g{C`q(>BvObErr6{(m1%XHA(!1z+2*D8Av7;9XJ~$ls)g## +hn=jYc#9kIivyI^FmYybh<`#T;~z=$41LFQM{FpkRrMR0JDOVUhztNBT^APRIq|TN<~*R +Ly1%{ltF(wn9e+CIrNMpWVNEAQg~D2rwO~a!`F~serykMUw3{!2{eHX+Ah +@{7h~Y>onlE0AeIbTAO|oG*pnf1cN#L6gPu%8>!>SaRN6WD>FVU2N_<0>3u^)-APEc&OI>p+)Wf?HLR +^oqqU7I>oikU*m%a>jtwGGu#W6F8Ty{9f@ypIWPi(+mH-Eu(ctd6lP0(g%XBTWqGEqn-Kbv!r%qS(!N|d^kMQK_kaiMySkYB(Ab +t8AI0lTkVeReDU$eZoEEVdx%pBbalh}b&jB#Z3i7L{gVsA~0%{!1x9UK^!7IpaBV}-tlJADDYXqnOnp%3-j-f@rbmj9`DzzzvuU-RY80A%~{47TkqSk(YV6-TuX3j`X&MD%rYLb +zNQ-s-rbSzc+&wPv-Ay<|KZbryNxD+6I>NR(twYi`yh3+e3CicQkHj_trP!Fg?|8$V5wh9Wks6k|o^;uOw6m@_og-)Dr|kk@Ni6#Zy1DrC^QY_IFK#z8AqQxWw9!-D-lJcg +QVqD-^GlZGSOJ+iX6cM_77g8Y`$pTAZswSC1+3=+%{$3OY<{oZbFg5*M(h-Wq&7xx;#0v1=Lhwj>BwH +y_PsuZ%)~OR)~O#pHh$t;hz20E5v{-!`TpI???s~tR_3F5B@oR54HR$&VRNm$KMS4CrGRdQ9cK +X~d@CSuR*!%#}0>;bp%jnJxu!7sr1vv8Akv{>QsdRdMU}@P&Xrq25?`>`$>5vbT#U|GA$nAk!ZlTf+e +0FAaRqOlBi2JZ|Nkj9qR6arb!dE|XPpk%jh&kWNKW~~NIk9X4MCOI{0>^jGah-lo)t +^C-}Z6BOOP%gGm}HF^6ss1Y(Z9uVjk^M^&g4W=3?ZO2u1Rv2eAH)t{H8W?I%+z7szPu(`=Kmk6RU_Xd +9fp*k8Dr)g7KdcEwMLHVC_0l2ctSnOi4!wV#;0Q8rzZ~R*>6??}vy3W`cVq`kF$5`$PD(+{QP;@g6qJ +Zg8&DjMbWeNE?Vcvofz=w +wK0}dt%1ADyb-w{K3(~OZkqt&VLt1Q<2_G1cHYn2I8VVnvEQpmbT8RdP0q}y`;wT5x55}T~0x2tZRba +OT4_Xi^_N)VsL1useawrO(Pe75GN(U~tT;c@@}P)h>@6aWAK2mt$eR#UyLkZq9 +#001Zx001HY003}la4%nJZggdGZeeUMV{dJ3VQyq|FJy0bZftL1WG--drC3{U+cp$__pcy46q5m4+a8 +7iK@|*0H()?96ie5aAYf_f*kVJIDoHt2fBg>S7A@caW4Ed-kF8k86)Z@ICvp3v|nr(9all8L+&eBdc}6)NOPnlp^~#4*V1*b`98^cE~_I$JAwP +FBNbTB_ZS$!ZY(2R^r4!w#gq>nTg}%xz6e0Zg{dIaS6o+ZxnX!Dz_+zjt?k+~1!P!IS;zR1r)PmU>7$tg0J~}?%xLi(xA_5i!eGnZ)TpjBJa9)f04 +{ZO4-^WCM);?W7~?(HN +_sbuyoT{4sPYj`|DiPqA_i-~mylO@(3U)ea(N`LPl9$!9zq0G9^=)>pXd1*O)H%!>m9sC(d&I_;z-@T +#4D2MxkP`FJp|3E{b^(#;i_OmSXI%$pBWIF1zFvazm;?RO&{FyMiotAH_89Cf*zN+TSgC{E-%l7nB%p#{_h28&~4E-cLU~ +@dheCWgUSkDeD+cS+kMk?9frD&DV=NN_Dn#UY33+b>NA)Q$_FB=4?%a3dxEOKFgcs!X*Wew#Mrnqr?Dnh +_ZUw?tTIL09^3sjr#rP(R2DXP;#dxkNJzcEP11ALfWu7}E^fpo&eq$p7I_}(xH4Kf>-eR?=2blOmsv? +r!T5i}Ix{jeImZAExbiHRje@-1aN-8hSv`|8Q+i*F>sMQ}F+yw>2`7n_~ApCnCsY?ChK;|oM~(D?*dD +5SC^8XvwEQ}><_)v3K6^v`~I!A$}$6c~c4a7A{`HxuVavT3=x9?N|hqP!g96KTO!0Ncz2kI$JHk%1v~ +)?cjpWI=d}5u)Yy=SmctBKmwmLiJu1!MQXTQCStIYAt1VLmvM$HF&Em{=}=#Im~ef*&m_RKTHuCa4Uu +n-);MgsQu5{@RoHHt#xo>H{YmHHVo51J3q}_pa3^H!%MFq>zznbbIc!uJ-Zlz%fpAvW$%*o-8Wn^p`y +<<;0*9N9~a-_l1o{f+iB&aT75lN(6B_j4~>+@zpxoK$XbEi!mxtmwKU+#Fn#h8Ht#9D4!x6M +OD}wZv*P8!0{{Sr3jhEh0001RX>c!JX>N37a&BR4FJo_Q +ZDDR?b1!CcWo3G0E^v9RR!xuFHW0n*R}cgW$f&LKY(TwiHbv2*DX>j0n}tA2Bbi-_WJzk1ZIJ)oAt}m +|Y@ShQoWUj3f5hX01^@QQB!{ED#i?c&CTuI-6a#H!LV?LqBQ`2Poc%tC6mE%VGF#KW- +e)4*9d;7^kZkU?Dg&Y>i1uMx+5j|OwpEZ3ANw`?UWMMuNp+h@WbH1uRb0D1pSg_SuL2ghf*4T-wsX>c)Y}Tg@A@=RzI@N$1I6~zXoog2k9(nmFbx)vS2o8F#|;4EzlAT7^xBI9eM+4x#Lej +EQW$?1*~k2AauFBbGYR@tTlIpmm;K~5{d*D^xTiHp`eIdlcWO~SdZnZ0*?yv$B +|nSp+hc6a)3*228)#FF*vUAJjZ*m#Zql^ifi-DNfPHt5~^nF?U-PV|aff+Y6F!1=LGWVC=vyhCQ_!_h6Z-faK{d3{V1X{DpgmMz78XL8@-U^B>_U>ND&**%Xl$f)Kg +<=9Htdh_=nB7(Yor48g%}{cIkii?wCP__hvhGM7tj+oh`nb9j^RzbB{0ELwJ#JGMGI`KJg{GcKK{5IK +{-<*dz3O=#%{0MuQg|WWx6TFSXq0^w*Tm9$ayI4o|@;4A&ta(i76@6aWAK2mt$eR#U&o`{3gO005^30015U003}la4%n +JZggdGZeeUMV{dJ3VQyq|FKA(NXfAMheN|Cw+b|G*_pcC!f(?$?bC?UIWb2@`kaT_NicsvctyPvhNp4 +rh{`*d{9mi?Ayx7v+eZKp?yNhT$Z5(O1ZKT*oVmL}&*Fx3P(Z1TKGP)(Ya~(Gp$Y{9dvWL;;UONn#EZ +4%iXfSl5qf96VMsZ0CDd?VCV1;g5uF5IkayWhzVjXwA#h?=G6tdZFZ?_rQeZRci>~`-(_D)DkeQ|Ttm +y7$`?YFxPySmt2Vf5Yh_U3CiZ2p7M3R_GF26)MerdLlkBQHicV7hl*j|F?;z>s`mkk;U?!(GCd;w>bP*+ZQZO6i +cfsFgOr#;>twP|p~4XL=ZbO2Asml8pd~1zDwJbxv-yf`J78^VhU!gP)~yKyvU1>8*I2o!qRrtTk%Wv? +nHPAeYAok5Q>X(?cR&2b640kN~grpT9A!v}w6p7 +8}aTNKAifp^`B2Fcznd-z4Kr*gY7EAWjI!G3zDqu3OU~0-F4LO9K51Y +e7(P_1W#h^P-W16wq$0^}<+9)$Q0VkjSBB+9wGUBC6wmll{yOKLdg5!WRauKWz{2 +sDT(&!&hO9KQH000080Q-4XQ;EZrJn8`e0Bi&R03HAU0B~t=FJEbHbY*gGVQepBZ*6U1Ze(*WXk~10E +^v8uQ^Ag#Fc7`-6(g!DAZ1a{QFkxVO0Cpe+FqgvIbi^|V7p_pSyc7kI|j@`l=a0}Z{G8p=bMzzFyEcsg=Faeo*x0!mFV*|iKrLq%srh4APrhcm!OL%M +>`Q{__tWTiA=PWY#jyuYA&VcK`bN9*X6!ow4ApS$T&fP0BeW< +&GIT1t4V=nJHUnspj1;M|W*a +2L|$c{U6hr;(&$@65TX02C$b#YNX8Jf3@KqJ~I?Tb^C86s`%~LgFvV6N#X~*HO +6I`oQ{AiZV-AgM8I*YLUYHh`gW4Y6uZKE!_m<6pcvtvKvzxN3d-q?QR|kY~Eww4y&F^tyutM +ouvqTK0}09h_3|%CVt9Z!`=zBySTkJ^g1^U`fmt+oQ#w8;Wrlc2bN@8SLhmN}|4>T<1QY-O00;p4c~( +;`3unU81pok=5&!@n0001RX>c!JX>N37a&BR4FJo_QZDDR?b1!LbWMz0RaCwzjZEM^(5dOZuLg!Mj!S +%IYmvf<{?GY$xNZP`&EJm@lySmttE6GWhkpJG%tF5&Yn*ESnNi(CFXI>TB^;{^_^8KE&{c0z8hj_1gE +F?kH9{#}XK%_lW#~$eX$p?1K(YYc5-?Su0U#L_$`r0eX8E$j*oxzWlW$bBRRCk0mTogU7Z?V3wxFbRW +jhFX@>~VekVK;N+eoQ4$2DgFmqHd|@s=J1pJLMCEg&;qxns*&$jb}P%4f*x2;6s0A51!(c3adc^dqbp +W{&aQq^(sf#-_OoIU0*M9TA{L#1dICM8G8W~RRcHyDM)TxtQCjFjxUKJziMJl^Aeo4pM>BdM;}3wpf` +gix!~$EA6S#4OWK?BC5cqq4eGTmsTCIidCG3j{N~eq)^nuV>1ANPw7Z|p<`Q!U;I$eHEnnN)3$hC)UH +k1z*d>Cnnk;(KNl{qriK_aeI*gI?&1_zpy(L~o)IArspn{wR93XXVcb1p{R=BUDvi9`%f+|w+LG^=Lt +#sA^3Z+k<0#x{7_R^|ixFc1StyZhL#ZuaUbKXm5(U+}P2tG-YnD28Yd%y(gxDcI*5rpqBZFQm{tEvSZ +8OIP=1b*{lkov3)0`=#0FZdq0l#}QmC*gg}*^nK=O;fp)O2KKn483`eE;u9WAZ$#!LQ_XhiFga3)EhE +e1?FhK7;j4_Qt6&?K`KbyfeIp>=rqe-Bn1NPr7VnBH@h)Prs0*a7oj|ekFe)UAq4 +%WCuuBsO(iP_H;>hKZW5F|*)?@04^4YuqFbQ{Q9v>VhQ^jS+VwAB;ldkTR)nBD;O*y&d!OYVGyJ`$)+ +9c2VzQ!>XO+abo4!5D!U{k?g+HG80gM|K@u?I0n#SHyrA#V!aK01()lQ2JVCNO1&s=%Q34`J5$3N%23 +Y5CTvwNt60}vn(dgqLmo +CV{roD9w{?LtJJSR$t90K{7GCOx4#OM2ua21AlBWEOTWOTBa3H%Knr$(4R5SyXi{nq6jq{uGg>(3;Wx6U8 +6xS^-hNn*vjwtYhLRRLf{JQ&?xu^Znuv8Wy~CwhL1bRNa=aR1;? +CuM)kB%YeWXqGCF-r^$bOKulLw2o^o$(cKXW3RE5FH(b|su^)81NhWy5Bkz2Oh|bdxv7Y_sK*VvWkm} +ZB8>%ZWF8YHAUD|xjh%9rNSVr7W6(|2WNvV1Na95S`v^2fQ@4-3CasK>(dD^F(X2J$G0+X@y;V~)fvuw#3)|5C| +3^B|@)x;`218cJ~kDf-(jZI;Yg-WY`lk%GwNVbh@s}2VRlIG&$B%i!l)8ye1r4Nr;Y(egXO&&Zk*N5= +-98+Kd!#MZNb;%||pZoX6i6*PxP)h>@6aWAK2mt$eR#O~ch$~Z3ybsJFby+PX2nh5jbiU0amqSJCpLR +a0-EN4w1$!I^q<@&5e$?b*de`s>-N^C|m#R(4#-rtNN9RM)!U%NC|ulzhrw6{4N8H`}(TtE@bdjkm=% +NpEUHZ2P?_GVcVKw_j +}(znokHrWTBwpnw{+jP5Y*L5}4x8WbtyxwfGYNQbNPNs&u_D)N{dz6bXA&(w5j +V>y(rpsnwLDQy6yC6GB%-Tv$hj3=aL(6&)&X$^L7dw_WU{QSEwidlyi593aGQDshcT#S;4qvnPC%p6d +I(g^UN6o(Ia37Ho-mE@HSg!ZDzOT)lJdV6=EgW1y)sxWK}nttc5jJZBv)J|1b3PxqKMvElC~$OaQ3-L +%-B&RTg>s0ssP{n=*O}{b*|)+?A##`DcqO`q=8^nFyjyHR@-zZyLO$F!b<1=40>@5);)+!v={kk~ZVQl8w?eTb0MFC9Yqw +oH!jcjiSoIcX))2je-!EXdauC3~@ovBiZI_k66z)<$HdKI)w5yi9N&8k3s{VIc)#-IvFS2q3x?2>I>7 +pyjWlv3Vj-QJvYj)4dvcBcZ^M)@G30%%V9pqQBuDfz6he&}hEv`{QZE|!}(q^%Fzj1L&VmwXZ?a`92X +g4I=EokC2lQYLIub;YHK4G(`BaogFcsO)$SYVga0MpTciy9`P?)WjfhaiSU43rTLme9+(VNo(5eB~d6@~J7p`P{Jk&)Kx&A1M=wH>IN%ahh1!?J +2&NpM{yYrVUMh#cDYosF}%THWPSSOHaEy={hmgm4vz;cP|{P*V<$aQ}JFR-pD>2FOiJ@+shFkUUIV +~53=K@nMBOzxXIYc4K>$ND$75-)XBR=|toQZ#No^jEePS9L#33_h%VnzC$AXtDV%XPp#e0Uu$7r)*JCXDq +;@*x+Y@EcC$-Vjl^9s +Rqk(smHS=ir3br!q%65)B=e}9x35$m9f8OaySi3F+n9tC;s#_2j+cE<|!9R +iJLQ()({$y374#Z(Yqp5k`gZDF=b=&JETXJOc!C)4661dQ4Xv(vS-!f%;h{SC)=~2>ep0&5QbB_1nu! +Py+Lny}I=T7k9Ug0joixgj`=n#4>vK+^nM*<`?_(e_UH@It40h6FPK#|~L7*3<5r;+?S)SYYxLOz61* +o79gV8Y&k>j^Ta+_C>TA&;aynWC0>{OtVv#j|(M9{>Kknx+o!^l#F@OIUotxee8_&O4MBWC{{6h>7I= +#o62R=VupZp~0}#s>4-C*CLr5u+azaRaJkB?OK6)4DOff-+v9D=)?x0#1|f0`LoS!6#$~nP2;SFbHv6!+2+Kk3bYwPW-1T>Xl%9Y +|UgT5r^#jRM +24!+d-yiy#lzm9L%vQ2P0Sg5GbT@;J`R)fitv4T7JDlvANu*NFJaJyeak}Ivs5!i8!jOayKhhvx@U2P +?Os#U)M#>#r$&6j71zU+(cK0?b8bmti35JK;gQ+?Qsg|Avh7&(q}~zozM^a7(nl(0{oOcR^P5dcE+&+ +4;&I_|B!DKW|km;uCoRv0?!Nf`8Z$@thr=K*y_A%8c;K!z>EW-?F1%(v&9O>A0Z0I)`z*UnE^vlYb++ +=m3XL!CArJM_b5(?B*DC@$({-=GdknRV!AkB%T +n5S=sPxi9|SS>)8?*#nm?9`a7&KHrQPkxR^tNS04EKOBcAE(czA@9>?yP6pWEC>{ci&14s*OGRh&?JF87>VhBfWp_m>hF1qa{nzAPXaDco6WyLZqnBrl%J +UfQQnF)Q*wDQdK9Ic9FYPBx%paLC$1mjAxR$tApyVn6@0R)Pt!naG=B+s<@`>4D3l+?pIJ9U1Db4OFY +gk)$fL!ijQZ5IpTj*e3OFunuTWz04yCF>OKpnkw8k<9{>Ti*>lg`_5>Nls_!cZ&?t +FeS9FlTLw;CiCAiadCf57`5xx2vq`pWOS>p&V3dmAV%rx{JDB~=Dq}NT|ZCzS%1S^g}ZQOk%xF~7YjB +k^CkJ6bptvliOQwzGueY%CBQvYG+vyT)7VrGkCSW~8!bE@hJrVP`Ir&K|339iN!1%8XF?c=^+BiKsKL +_eg6di4uE2FPt6AP}wmJeyro8$B~6kJ7nx6l%>X&8Z1^#dVKo+ +6lMy*W>hxy4Cy@zu37eTml7DvYj0ld0UUF@V5vaMf&`8RT4&1T;z@Kkr0i&TYij=u7-pAOeMgxtOu%e +g)Pl#+drBic#WgRPgGqr%iQ7<`cYK +NYXl@!iPlG(ICf51qQ&W3$>7<~q08hvVWBmvst1~j7-^C)uez~VXO#4m<42854Y-=$r5D=gpAW5=?z< +=Xmqlt^Q6&w00kJxGhZhgI44PNQ-$;gR15-B2*-u7!YRcLHX^QMn$)>7Zdi9u3;yCwfP-QJPJ> +lYL!@E}_5on08{Q`#6?8Q0|?7YGbdDwOH4;u;iBa!V_Bp^f|hjb2%IByELj&^{N;4KBGzR54sL3%Z3_ +ag=)Cb^C)$q{M1yw3`#gHH+-{zV4JIdgR)FQGIxG?0xIav&OMIzUWaUBS&|}4`Q}y?pJ6F_MWWQ~i(6 +G;Vb`venumyBq;kqJ$$BdH3Dq;8OWyK1$%5XfB?HGrl_c+Q*hx|tShO={Ge-t!fNhA=u7lCf~KBrBx|_Y-}sJf#Np^v%euqDQIx!M_6x>~+ +#%q>upbEX6^Q5KhFb+Rs1dTtBsQ#|f3Y3z>LaVa0Rz-Yawm`qC5cXbEz`vgRgvR+5bh2v-Hn|Y=FTr~ +k3uz+vWj)2R+VUN+#JCVl2O{KussZRIV7|Y|FK4CFo!B^9iQA#pd=nT8sG)pRi+y^)8J~|!LHn;q*JB +_%!;xD#)0L~gD~@$Reyy51rCMX3Ir+fBZ1M<`toYn!ZqLrO$K(5p?m4ups9mW2yK--tB{zNHMm11zs~ +X<2%xsxCR@V{-e97}euyiEB^fU1OZk>M_@n}0JLVN87g>62XvEtR*!;$lpa@92+wxPT8@&Cse?iYZP> +p!0gM%U?uIh72!6ODGBPfdtSMm9aF24mfR}@ax=Fmf>p>zgzyHjd`xO +8%&eDjr|;khkzNd^#YcUtnETeM^+{M<<*(y4fn45a~?P)4&Sud40+Z@kGX{;R`5DB=pIA4m;0fP!%e +dRm7#^DuBPd`#r;+d5dWgCjvdmL88JhM)&a4V*HuT*F{q*|>DU^me8IsBH5FG*uTVPAiq?c)`}he&83 +BMmh9m%^?T)@k#>-Mf_Gk(_fhR;Lcwqa9=rn>{Z4l2h!&LdCk~C+GKn_kmEwmm;*QEz+e< +uu#D^$m&wt0QcmERKF=GTW19&P#FI#}Eh-BKiVEhZ?dMys&-D}_qxe{ZzATy;l{`kG@ZyX)2eMiLdHOyy6pox!8#B+V) +$Nkc@DAzPX*Xs^JBjrBMf3_Mf#iC`ZpJ3ccX>Khj9Qf2yQ8|#}{ALJbFcox?Qs^v<5{(W-%W6!SB}LP|^y9Wvo%`O8o_AoBBrjlzt}DbU|%~`nZ&G-%j +-X(_oT!DJaz|f5Z{^tsz5#a-jXbD;QP2RrXEP!@iLO-fJWunnsvyaa-UMmv!7Ux;3|#-L{deHILnT-= +ICL6C3jc+IMq%!3WG~4Yp@az4QZCVVd@cK{C()g2iI@a>pZjp{nN!A;1R6A7K4|I)3bA +Z4d}Oxa#bCaZR_zzas2R$!VxUJ~-@D4f5d%hTDDs{p9_qstD4rkEsS1SAcBYD>s4u)}Thh8%%P#WjLu +RQ5+H9Tc-50mkD=_|X*^eG2)pFd=gZUBWKZN%C-b%M9h5JEhEvK7ESTcQRr==#Phk@y6lZ$Is}N;m5* +yAeIb!+y#7PWa7Waj(;-tz`W+aC%3247Y16=+Cun;{;F>b}q>qEBrC>R|wJZk +u%i5QpZBIP*nt{Y~8k7ae8uc4Vt4{U>N3PyW3_b(D;O!ij#`pddF)*n4yqsziIp3Ou1|NMXJtWpAPSQ +@|{RBa>uMzU2G+IJ7w_(zz2l&)4-1j`b*xdwq-$yP}z^358!9|wmbqA9NmM;@O+;Styw=Gp7o>HGvStY7+&*FqcPO|MC9TYt(b0=?I0_#$7i@R6)Xy4ps$xFNI) +#dlYxS_SEeq^^>pnSpvLPkP6pRwZ?_E|^gbjnV!&sNIn%XBP}X_B5u4E-Jk3Ul`+GZBipy_T?zprD*P +_n-M63+{Q3w96-f-1<<#I~<{~=lMhaCXb51hi|k*0e#a;)dhjpY=7S7V@3AoUEO_Qz?5UQW%OA?4nta +?f9W&hMI~?XD;8z2c>AA1Bk(=kNH1q@c4V}fp48s4U}HeyJdWW1(WuUI+Ou(G +XkJlYICLmd5H=^_H`II*v{8&4o%uv3P~bOKR=hH;(nsSEiYV|)AF>x52dY?&Gw>rFO~u`eV$grZLd5s +~G#P!6nfj+s$}3jfzXqLfyDy{QfFTz~0bsl=B2M?RLDrHsN$H>5T7qE}aHA26bRd@>Foa_V8vy +BSbT>l`K;Txc0v^;0B`Q0Rc%ibu(zN6HWxDlMi-YV=%_6F#?Ag}`6go4@B&k8Ea#eD_n~okKafMV}r$ ++(uDUgXC8klxzM=Ye8pr@OHYy>CR-rE~>uomgDi|x}Dp6}Rg1W76$rkeJ4OxE=d)UbWL5*Dcmn! +thI?Dlxg2ku|3w0-ATYmyi*@coWW{{OLXqRHjwdL1pfsa^|sT)kND3mr+S8*MOci@=aVr>dmi~tklYY +85n*c!CgnMN7tjVVlLx3OXpN+2)!qPvbG=rnT)27^Rsj212FE#TN_kQ}i}I0|pCoYSVGWgj0JRev==&IOw5?agwb$w<?p2mO0TF4%Q?cgmrouksb--^?;)>H9WJrHxUL1B9<02{^(w +G6-Klr>`q|H~&QiKs@8Tu+lLxam&oexe)D5X@SqOsT?q%F^xwUjCNFM1!0Y8L$iW&)>?y2fb0{0f#Wu +U5zblYQr%=^Ngq4p=mc@IISFySJB>JxCjy;x8~)A5Pkz(m($0CQ+Q_D)nE ++o1-d#}tcR4LDlkXjOL=d22q4pTh21wnrobtngn~nL}Y@C}3VuU9YJJEsGCyeK2~)_7Ga>PMN$ab +xJ0nQNIWP&z6b7TJ-O_O3f_Z^9}b_YRRfFT_-m6%Cb(C?M^3NY(J8!cu0bP@G!DbUdKQXo`p?FROl{yNom6@U)*MXq`izQT)k3#ZI|rxdtSEm{0T-}oOezW}26hlx7Br8 +m5{u!P1S0iV!cD#8FBeM!!qVYOP11foi%dJu9f+B3VUS +nv#&Jq_@Cc)p*KsTL> +o#jDtTJz-A`1d|a)br2W*`ttR=Q>i$V&@8Ukt#mp_IO2IXAfiF#NkmStx)Rf*4XK~Hw!BB2-&JWR?T# +hvzv_-+I(TT6p{3;!GO9KQH000080Q-4XQ{z~G$36@I0IM$m03HAU0B~t=FJEbHbY*gGVQepBZ*6U1Z +e(*WY-w|JE^v9}8eMPOIP%@Ug3zLL-Rfo$3z+A9D%58f*(x$RVubYb9y%O!vUFeM^T-nopkb +qt>$Kw0nE-qfae;-3(cUz{JvA~A@OCeej!{EqCzHRH8Z9$$E?G10PFYMwno)#i2clfVEey3M|QHwF;B +kO5JdukDWrjq>~^eFgdKfff-}P{aD$R$K!a +DFNDDfp_oqN(@O^3<&Mm(cWUnzN-1A?5_9Gb2Q44%dJJ|>1L>D4;FeWc+bjq=({0$Q;iFbLO~(5#Xr) +nJPviw`-5P#TCMml^pf)xfzJu?=Nme@o-hC3nNU|(1hzGml9agrZ#e4>uq^x6&8|(SYRmMA_(_uF6~A +GmKQK~xAf(-V0=*DQwk^6RX?KL(^@5TeXLTj>l_T-tz<|43Ue{#9NY{2sS{11VfpOvEN3;#tx!il24Cvc)8cBI$fK*)^%?(tOojc!Gb!}b7|WVB%-_b)KAQmZ>dVEHePp8p1$mygi-87o!@y6@DWu;SEF= +u&9a{HZ9e8A%kDiW;V3}~@N@*Z_A!JJ^T6_pjJ6DHp`tzacY#DT* +%gyI{x-3Ku+wLM5U0TwKqggom+yC;_>!d^K-726S7Ri)WTAqwm=a`uA!+BR%7LtM@wLL;2aM}*WtDE7 +|UWIb6qvz9g4p(>~piR|$rJ#an&0M00QW$_EGB@4F>tnP|L$=*_TqW7p|U(Eh6XMgDW7Eky->|5&JhW +#lIz`nJ<@58>OPQbb_9LfAi{MU2->lR9gZ_Rvot~%-UPCFrF%6_0V`cr>^q;#N??CW+zYd98z&YDy$Y +1&@7E=lH;G<1D`HV+GV2%bGfR%e4`Vs>xY7fEE}>FR#l)b~VZR(BmQ@PX{`*fWS+>hQCZIOL%#Q_W#co*Lc35N)liy@ce!jP7tYfwUT5+WPDG5cbN$DhtYlW9U(K{R)IoaMGS`H3Vq~ktGc7m}#8UDgnCdp!^rYlZWR~UoS#}j&NoBcU4Spy2N4S0vUbLm-;L(Q|L?Ra$4*6X-VVE@bQFH_vqVL=YQ;NGYwzgnOVEPbW@8OnZU$agW!ML&0p&F@H#j%r4WuS@ +BjL4~O1fCV2HkVeQMun2(C|U=MMpjA{+o7C&~$?1X5WH;LNBE9y%|5`QED~x`sFwQD8lAH->Sn>!?U| +hVZJ@_{{Xy0BLZIE-j?^Yxn`A4QOJxg{fS;4bA>OeppP%2Eqv%j^OM$*efWzsP1bXa=dczHNP_i)XhJ +<$DFoz0!4=`ZAt#gD6_fvGe4uTKp-C4Eh>AV@htc>F+RH0tH_+aX*1~rdDR->~rhB_+3;6SZOF=m(%O +4q~$y+l|8apCIXzVa>WQGY~gZ=bz!y8uRi6>6ag|`Q`y)Iq3WFyAhlH@g17zIeJPrbQH7Q3DaFEYFd5 +`ar0f9Y(bmo^#ZX3}8&H>KloVH4LmNhZB}0?b{8WdoIcnne0|C>p9P0L7zK={Xs4rOq%xHdziOsVH3* +E&VBqoELbi;V7{vbM~#4)-y;fctb#3nZvmOKnQG?=LpkOGKq@zg8i~L23i +k6~~SX*+Y4X>cuGp#vcrkXt^Gl9j`&gnExE&RkQ0rQ^hB?tGEh@i28ah> +K8m7FBzs;}IxE+CrXWT0!ed#${s+G`!iLV#&mMJ5qPCH@MOyou3E`vrs*z^%?B>l!-8)puf+9NatZwFd&>r5Re8c_}5!^YLG>p%NJ+7+pg#W4UwFl=uasfMlw{=C`YS``$SKnYinR28irDOkH +^z>A*WE33fSIz-Gy;v^d4=`AGPz-uS5-nZPTh2d%GUr=GFOXIgE6toIh%AH`9R8`9hP*xA0y}Ip$0e% +y+u+Kg(qvgicXe3G|$|p>lVrqC-aABgdy-28h-A@z&_N2)%L|ixH1!F4-@9y)81&s4h0 +rf>Zb1MgFqg>9V*EB`ZuU4~Vb_2Fbbr)&mt$KP#zH|_CgTRj&$SV~T5w*-K$GM_5Xmg`1ijk`vA5E3v +ei{lYs`m*+=&HlVO#a8j6a<*d2V-E*#>_IIJWDZ)JmlDHqK?e?0M5d=k}r?KgA8je|IAu((sc!lST1NlJuF(a3Fx15%gB;B&aUUf7rYCF;5D0H;Q7(n +FIa|8>cyVq=3}}i}1|gEYA`UG-3wXL$2lYKXEZM2Q&S0Bd{xLAKqAO$-RCcddjQnNn^TdWN=Pyp|WF8 +JYvP!w6_XELMe?;G&DB^B_@6Esac~eG=m1}$GLZykupw^tp$&ce!VYotkdkVj)HU0nrN(~#z{t +1snQzX3c}3xNQS%vEnh#aNkWqRQ_Gta;%aJQ$Q=Z*vxNMO+!@ZY%;N<;39_nkq>h^On<=FUIvK+DuuGSf50yD-~<-~FB3C5#^;6R^` +OKQOJZmmq~N-gVm51887)phN8##|a&`xuPnBLKx)8?GK0sbgu8f`zRF1PaIEXg)>7AS3DHYxs1)7))r +v^x~BWZ{2Uz)s}yg)&0yt0Ge2V>}j;F}TuYtUbtF{!ZUE7gK3bPP~!9dK%I8-#)#IQ?_M2)+i076A1O +8p(4j_vflVTw7mLPj?Z*qcJIm&_A)l8T(9#B)|-^;00Z<(o`+kzZRu`J0fz%g5}zwB=hYdT6KYQ)W~b?X2v#B500F$&u~n#7c+8_$kk=j)xm4f+b)7HR=yG +j>mF;ZSlb{_X=aXa}f*4~+)O(0&kmpCp&tE21Wact)E`LReuxQb`il8|8k2r2A#zNfm&GCV;D}wHZ6G +vFaw$|_6A>0^ip+z${h>HOJ#TJ2LH(Uf(+&+AsZ`nvO^DP@~H?M|cCrz30Urc!JX>N37a&BR4FJo_QZDDR?b1!pcVRB<=E^v9RSX*z~HWYsMuOL(ukXBph +u+SFN7kF>PoJeWa~G4oDgk>x9SnPzuPtP7czboH5{L+Krp3aGp|tCcGIlDXZs1T +Hj_AQgQ|KT#lB75hCEYcJx&{(Oo>vM*hZIa8>`F<$ToE}r66n(9h{fHkY5cX^dvyuN`L%(J&wx0i3mW +PW>cayp+631JT_RtCX$YEPvsqX5mIsp>S!47s04fhf&XpT7}MF^=XzpSGB5p$u-N0N|%)$jrb;n)^tSR83N#;bjUR +ntDGuDjJ2CW?%DcxuH%{}v10HMbkC+lX<4tR3JyXZ!bOKbH8r4Kz}9j!8lkI9l9|uT6b|Lwti@S|lCv +xUGHcA7QMuZ=V~*YTcnEdQyeNt+4*?g;M!S+bknnFXb02dj>=hd`|iBQWU^$25ll-!O;*V~B-ydNoJGGv86m(=iVcKY@1P!C ++klfZlRL2!MV`Btq@^kugUlQc1vl`yd!6BpU3tGZ)C<+hDK6KzPOCfJZ +HqR^Hua8FVWp0z7X99?k09psNY;We^VSV0KrH>fj!NYW^&WtkO#0cxlhO+`RJ(_54OFqxQOOglA5`7-XFkORGV>;crL9)9)V+sZ`uHbCPK2#6N$ +eHoG+o6OA>`McZaIq=kdN_uZry49aKRRQcoeZ +D2jyM#fd?11i+e$cAtWTAh1W}2lf*=_}2sPp^oFq-gHkXMm2pw$# +X?w%LH>>ATBJOeRzFC>{q2Z>w}xFHzO_OfTo_dK?;1L^Vc`0^P4HYqjw-~B3aI0(EXXX^Nyb8wn6_0S +2j;fCKHhHF^T#a>K|+R@P6O(;aK)O3>}F)9zzuSdCiDxHJx6iwZ@qX+N#K_y|6>vwEkbk0>mxdz-fuY +aqlV0PHMP;JS^NcE$jWR5s3Z}`F)ZZ36FeFANm+r3`R9)B5w7JguHM|VMPKG%+$CkMPssvCcu#N&k&z +ZpX$*pgOyOm3-V+47WIF&J-i`D4azNYNWThy#piZk?A$2^ixoZ^Zb?w<{E2ngCIiPhAwP9%S|H>V`Tk +`;SDq34PoL>KwmjB>fT3i=b*;HSHd?w2CmnMobN@9=@gw%FIIy9A_)XN~=!1yhFeCW;j>LWcUXUM>B> +ku0A`VoydahxrPiPZ8;=+-{k9O^tw9XM&8yd$nee9_{9wD%gPT{fP@7)=Kf`igSXTRAgo1)}d+zsMZa +Gc{$h55u$yE~jHKRI_XIq-icQ)A#|+HUe#0X*%Pz?3!%`bjeS4^T@31QY-O00;p4c~(>4LP_-V2><|q +9{>Oz0001RX>c!JX>N37a&BR4FJo_QZDDR?b1!pfZ+9+mdA(U}kK4Er{_bBvxHv>gWg_WEw+e9G+ilZ +JH^FZ1?t`(AX`8myl|_Y;yzw3S-#arTMM{=^DNuBAh$V{i!g+aSIF}zPr5m=ckCWUy7HYT4%bk0zM6) +mQ)nu#HfvKvggsvsCAAc4_D{J$uIaNUBzPxXw7LC#g`;ga7!tTXEZa%kFArtnoYI0SIB4M;JG4xel@$ +4wejncdl>t}&l@V3c|+A&>=QkD5y6#1_*D}iH3nwKCFxbk(8^OdM&wpNFOC^wG!#=Kr4sTH4trNC +-C;+;p0QX9)G&IxqW;bqddq)Y(yg*#a}`24{&0guUb51!gjLBHgYT4qRC`=%(W^HvTVkf(P8-^uh)*< +i_ROFskW)wW->w7NX=5`BM!Vj&{~v{J+dsGOeX6>)HQqDs~3CZ$o|Ij34_1sbV|RtgXQH`>4QLBnOK1 +&rb@|_W(TFg&n1|pDCCA2m&lq=i1zayHj!E^2XmF|;qGPz2Cs@-lnpzGykL7NHlVKI&pXld(AK~VPU3 +W7?7K><9a|_0j{1rH#Y%j~IOlF#zAHhkOv^8A4!;mCM_}?12WR^=*%VHa|**kU*rd6qH^j6zcfMt%YRtag5lukz7okfC=V(g#HfNs-32DS2AddM)GT~0eFvc-9@wevFxW`P(rq!j%+3v% +aR_YUk2+H<$(6R=j*RWnoq1XG&MR$hj5D`&4RKL=2sLYZ^1JSgYkbg3ANovi+=`CSLsaL9&-Lif6UYh +^@VeF!VBbVvfC!_s))ZGKE<%qVLGjI&Of!G@4`-MWSDf#`1O|H!%@NhJ@>yRx+CzCMA8G4`P-lt)aKL +hi)+lo7Lt{+*i|hT9Vas;7hy^=z4v0^T|VzA-EzxD8XE(gtF9^VJkzOeF{ +K+6bgYT8qS(+Y6!Q8M6xD1yqd4Y+X)yG{vv*@H0rVw`5Ad}eiqZTXp`0{^2Wt)l@~tw`E)2avM@jAvNjfY&N7^5( +=|a*$r14ns*k@W*hq7RjTt>H-aN4s8UZNsXBC4y3C73Y#q90K +MuR@E>yIgm@KfS(TS7@4*_j%4bKvK&Sg`KrGOTFjcWPgt6Iiv;^g2>D3|^$8h&&_Zzbe$Z36I=}?6fmRiI*%CE}Ew4 +t>^cAxa(9@2+;w~v)nQp=ZLU>@)%3bJ|Bio61rBn7Bis9XzATxyy7pWbh2T%yOZ~!Eo^|XrOe-lIU50 +PRwusFM6MEFlk45|45hD2fl1X}ePQv&)3g{a}Xf(7k%WC^RDcS!qdUYU?cLdh}4JMJ(s?@wu@n23fgR +-BLNVgF>qDFTkjY71GvnX~VpD`of}{}<$FWVysabC;pnjlbbb7sAoH)f%i%rkkJLZThi{(d{*}snc(h +$YHKASWK~1nLc5DPk*}q@&4m4_tW0?(2Jc(_>sEKsNeg6aY9`OQ8B;(_S?CeH{3fKbHnIr;zlC!$#R{ +`E^Lfjy!|K#GE7o1<67xWbj4&{qtUZnU_7jhJ)Ii~MKCowX#m{}7ow@@27)$NeqGC|VRxX-y=v~z{kK +{xJ=$C1m8e_)1C&36{I87`R90u86I{5#`XzP)XsMduF~>XL(9LHMsnrVrdu$A<>7I#02GSm`tEfM(;j +-93@kF!67p!SooBxY7M-c6QVp`KbL3ygk7!{%9;QY^$f~+?8K!XQfHg+pcVF%*ARGOM*;uW5=4qwA+N +-V&^_x5&ARQ7%J2&DC88I8R_b1?1!=Ev_a4c+cn>&UDYn=7EmW{TBeTi +>%4ybt*l0IYrOyOox6&S)MTJV?0w!BWaAyb`byB17gHCm#4zDv>S1x=$)1MB{!yMrLKV)`;Nt_ch|Udhz|5+4 +SV7Ek_Q2K3Ob@Zmy1i7|CAz+-P-5ilD~^2=9V5Z*(t^CsGKhn*k2sK86zSTyYyeZS+B%VN_XUG$`2)T +PFc;wAIltoyTFEyf5PpWB7FzsVB(-pCU;Dd;qmi^{BDXrGV +=y{N-F_SbXCNh--gIA~*;_mfEMaFWJ-TT6XjZX1oDK-w>}5dlcUYd``WTIw#tbOFr^UU7I|Bhuf&*&U}_#ur;l1oJ2+i|6*Ffo69|ICgvhg2q0F42B)Lr ++g;v*aR0H~bAq?Aj%ohi*JPxL4YuYre+6L%x}6UZtN{4^v?Ts@JwtJm*M$U58G)UaHjJ;S4Ky&gRP)h>@6aWA +K2mt$eR#Pt{mhhPb0071f001KZ003}la4%nJZggdGZeeUMV{dJ3VQyq|FLiEdZgX^DY-}!Yd7W3=j@v +d6efL)k1OzJsGLdH^%F8wnLDQnZHU)~sLgq>%n}|fJBxSD~usx;=YsNN(8qB#hm38;xjKc1Bq!%^IG6;m#gwt*Fc(opY(A$ay9H#!T`W= +c+$uLOJM2D4n%HJ8Ppec!#lrlRq$Ta5=aMkv`U{vuw4OyI(`%tV>#R%YB}S}FUQNn^Qf4OuO4 +%;Dkl{r!iBhcy*^$+5BIa1{P1$wXCgxA;M8rPtIb@Il_Ap3y=pG}b7sc}0Qc3JyT9|wcRV$0R%}B1ZRjWdjR9u&9Mt>JURJfSU#!(A3qyxv;5$z|x7H6 +IXS+?D5HhIO3fzPrJvM*ZPeP!RJwat~TFLlLAoJi~b?FlD7RYWnWo{)a|D5$ +x@0@Elo=R7lj-%rH%4ky=jiCk1yvQ<;qqH)JS)Wq|pf$bFW_CLda4dK7yEvg;t;rf8Kp>~ED^|e*>qM +ww!v%t+4D3u0kfu+#3Z#baJ*|9FLLeD7{%~M+DNc+&(u;3d0jr?};CQ9d@IkWq~Y>?Jta5;zv?d=mKK`#peh5UaeW_X^wTYY-e@$=x#X@0Uwt=mQGEmIO}H`^%Dc$jfm|1zi$~kLoAW!q{@d%_GITF=r +IY9MQs*;rqzh14Ys!wRJxK$3cJ@6szMGMIX}x)))u +@E+d&py>rsg>(xd3O +VaA|NaUukZ1WpZv|Y%gPPZEaz0WOFZfXk}$=E^v9RSZ#0HHW2>qU%|O3Dg(CCeHb5k9gvYcCBgbr=MB?U1cT6>g0g06NrY4l2ygsPyzAiDyWXEeyEZ0(%o;f&lHnY)*pdyB8j>rAv*0Qn`w1Ki*%x1HSQ>{Z(d1y8cg2m +;G;Lm(McmLnoJw1j{Rc+Z0y^bo7z3dbjm{b!RTQ#&GY7i9zozI*Ek7Y=A$1$rGO;0yqr8Lwm9Zs&-pf +oWU{IuRtVJw4Oqq&U}f`*e#%ec)Ux3iXO^GFqtx>I%$cA)kogiKC8poWdKWH1!{fi?uN;+-^SK2pm{U +y`jct-idtaBCPkv_>vV%9*?XalxqpZ7%#-2IfMj2Gg}hO0KVp*ZD90BwmhZe}yjg3$IA0!JqHG#^m=N +97rJW&0w5io)BLzkkj!vLD6JJ`jEhb)@;Y>j&jcxjcwiLK6Kjh7rh?|dD$wtA-ADW+>ti}=MmjP#nue +e70L7b1Y)HU5XJ%H@D$*71-Q?y(gX>AW9*Yo@$Un;tngeBV)N`N%$pFFR`x~D+#8~XHHK7O2L4O~UoX +h&iu@)8T+V_}LhO2uh14?Y{D8=M4rkxh<9vCvvT`0+VX_~Qut1t(?sIiaZ7?!-R2B0n;F@;a6jJ9^r) +=Fx$XnoTk?Q3%@ww{b0V4#1cJ*f9g9|;GA|A~ExvEW!wr=SS +>7{2)jnIC2b6;Ep9yUhV10Qe*edKQFVhmMfu)`)0dv1>q5bK{pP#Y!^T8GV!HW(fL7xkSni+b};auFX +Je-TwsyY|KHh3RHyxDcx?#=dm_n?vS-a1=fTZeE{UEWh=v1gZ(m5?jEw%B??&BWIsj_Q31zX_oP8GE#+GXDX{zUD4PJWhKs<)6@7x#s44v +THW0MgJ02$IT;l3kmcVwjCig5yao=rnVqkvgrpr=t-3Ytjv0F9+H!&VeO12|NCpOgX{%M0LXT21^o-a +~bA0Z0pnpzuB4X7VGJq>mIPEUiOL%Ywi}Rhd8=~d&7rx7Fd#VYuE7=UQauugcvCUX#!*e#5Ma46SfEq +V(EzywTwF)Y!)U5H)a-t2{Y>tV88iUCocI$9mfq}l;i_dB17NepvZJU%0?^)RSsj-6j#qSoaVxz!46G +MAMBd56SG|s+5=>_R1tXl#w@(Apgp67Ov6RB)I=kJQB%EH;x-k2>q2>yx +|F#$4}#WpMhypS={UK9~Xr+qiTcnjZ4y?q`XNJ*hgWqO3;zFcT? +qagiDu?fs3iwII>V`e5!4`;3C0#*!6AkOCK925%ztew2vSD5pc-%f>g5I`!^ha%i6GYS +y8i`GO9KQH000080Q-4XQ`2<~E;|7L09pe804D$d0B~t=FJEbHbY*gGVQepCX>)XPX<~JBX>V?GFJE7 +2ZfSI1UoLQYl~T=W!!QiK`zb_sSPNYqpohU=JM=W@20I2PQCd;QZe?eoZ$BkzHjfxe4LQj2_oGj#*)? +#YQ)XPX<~JBX>V +?GFJfVHWiD`eg_PZH+b|4;@BI`+Ze|0CA0R-7rTYPTv0@l@Z_pNqHPP1X+ppiBE5p@=fQ)xO3cRIqcv}FpQC*mE&}e9Vn7+2W@4swg-y?Wg$Q +*l|W1XC)+OPjU7mk2hl6~*^Zt!M;CG|A~Cv5+(>;rkp?yBg5Qmz`>LVgYG*DruAw4*kv(a{;4 +$e?vDXW+`z-lP2oP)h>@6aWAK2mt$eR#T7SymDOu00932001Ze003}la4%nJZggdGZeeUMWNCABa%p0 +9bZKvHb1!Lbb97;BY-MCFaCv=_O=`n15QX6n6U$E2N&qQyv{2k%0Hr>(h-!S2-YRA# +06+4;8u?Tvm#)GbRr1!GwQ&3ZF?7nk~?t{O(0a$EY}iQ=-lAPL`p2Hlu?R$I8u^}Yq_Q0L^Ayj9v*KX +6hry^Ls0ndqhz~o3>|wp^W4g08!`u~RgcLMSLMlq-HFJaVy{Wbb^=|9ygN&KsPmOckBo4-u&h_9Kxqu +N3~25O?k*4tT)OhVQfXGrEVGC5qz>1QX%FqFjgmS#GyjMKw9c8ib%vPNzJT-WwE6>3O9KQH000080Q- +4XQx<_rxOWBs0Nxb<03-ka0B~t=FJEbHbY*gGVQepCX>)XPX<~JBX>V?GFLPvRb963ndDU1^i`+I4e& +1gq91338xXnY-vT%jANz2jn8k&?ogy3lH*#_jx(9=vF7L?@dX +8ojis6iRnu*J~jgmF>6!xBG`3zTt&_9;{fh03Qoz&32EtQJPm3r-v`PPIgP%L{q}YtmVZuKR~{xubng +S%0B(sJY3pbgXSgI+Rrg4xnF}XK9 +`{yoNkquU4y~;%M--?7JeukuC*syhm9MlsHm+08;ivXxo+<_HWIw!AYTWlBTK_OfI8h` +U(>P%7p_GQ40zXcg0v?Z6m106NDtlp6-? +=y$r!Yg5qmUZqB|xf@;5JkH4RBWTQZzGX!Vt^&!U?nb>&BLNkmjmeYfkx7Q)!uCY(e`B?{l6LSVx +x?YdCZCD|K>>WwHMKZEsHc7W}dTyAlJE5e__$}K>S(&ZI?7afpHFm;qYuEGQD!th +Y@YH${?E<6gvmbcInUfz_`pm+m#UTk9wjR%WZdE?J!Fe;caEv&o*{_Kztz&H3@i(+Ch@C*|O?dmLAVL +ZrPB3Rsm!PGLoo>=_p2*ouX&$SI7MA5@wLMgPBY@uDHslKJ$Rfg4P&%VK8o0vUvBLlA7uo&I9Vt>d`1 +<-QAn?`D)ro^;jz`IJI@f{Q#31GKY4JL*$d5oQfh~cXn=*0d+NIk@%lXx#0#DXVJ%!&~Q5k-|S!noxa +3bf8|r0|rHwAk}QQYL1}feQ7vI%Vv+G>uR*j36*xDameSca3rCWKV>XTN=wvIc=jR8r%Ex>es8^|GLU +hz8;f&QF%2+^~pA=!T?6)D4jzB;2NkHsS65nhh-(Z)5I<{4B6|EFpAR1*F49lN?cO=;O2@qLZ9-2aw? +r>+GUXH8>^l+Q!N2X}C_^2t0`5SRR3_yUD|pfb)V;-czZ4vHZtq|?D+QA1#2+2v9A9F +3tW&ENWs*s%e7$-;iDGb%E2VIf%Km~}C8Bp`6UK69Lej-(NH`=O=GL2Xzfu~I93O7PFiX+4$DA}i1o0 +#xEnj%W(m>?=`Fd2CoMl67oAC_$X^ +7=*xRblBise2|^vvRmF!)yE#uC;4rN$-KHKW#e{jMy#(?mTYErTy)|$>(9et=RI>C$}8AxR4o*w(>zx +2jj5evZUpBk*Ddx`R3<q&kXQs@(XCnkeE@Lrc4kGoFt~lwZ>3I%v|HNFIqjQh}#rON4U&*G%O14Ai +2e!+W*$u841HE>vo>&R_P}~?>f$Z82x!pou|V=OwLr#|BxOZ`H-Q72L0JRb?BJ9!OPi4yk{;n13RXgo +;t*U0D=lz=p#E@*1Z}hI@6~WpvdB71*5p3dzQIYMp78qh)#931}}kb6BrOP8lo!UKiBDp(1i;AK*Moi +j0rYVpicz6KO;5yIo(@%f}-I(0(1LQ`}ws@iJ;>Q%YE!|Pyn&08xngt}E?;g7F?+LQb>E{JQQ|w +~$TGp^swlreg1);g0^!UV~vf6bw#eTnKcO|Hz6Xv(M`)p|{1p0B#sWoDYux9pKj5k1Zu{`Tcfm}=<#L +EMW7sRU_H)cY+Pwu>w+>?xprjT`u_dTq!Ap~^g#JBTVh+^q?Z@6aWAK2mt$eR#N~_vuN4@003JA001Na003}la4%nJZggdGZeeUMWNCABa%p09bZKvHb1!#j +Wo2wGaCvo8!H(20488X&tU0w($p?%C5(w=HAp}T!tlY+(iAa-@xVx0E$4R%{mYtc?)bV@qdw%JIA7C` +2YM#hxAJmB5FT5CcQ4<>*!3?7h3>`Y}Oo!I|rN-evMbU3i*Kv +!%I8A?EhM=ZTpJCMvaUspe#UspJa^vwRNsO7)x=EOvB@q$S%bTar2x$8+`y&MNxDXV} +#tiXDe?htInD3bUJ;fF;FDO5fCyp?5S0e8-HF+1nnt;^9+ti1G*UmI%2@o2pAW5OsjyFgeFkOc819%y +GX0`&V^G`pY^P!93+*IY+u2<4{zLACVyf2;!#K7E5T-MwmnrAF}>IbvH&j~gAcRJtsxLk!HMFHYkz~F +kztCW)^ME_2ePw74)WoF+J}uJ(C38x%2V0)zD7H>c&KGvtMUuy|)>fWAxQKdX3H~rWOAHP)h>@6aWAK2mt$eR#QViOU@tw0015U00 +18V003}la4%nJZggdGZeeUMX>Md?crRaHX>MtBUtcb8c~eqS^2|#~tx(9!D@iR%OfJdH&r?XwPf6ucQ +c~gq08mQ<1QY-O00;p4c~(>2N#Fa(6#xK!L;wIF0001RX>c!JX>N37a&BR4FKKRMWq2=RZ)|L3V{~tF +E^v9}TitWxwswE_UxA@#?@EnKC)>I0j9T4h>+EiJW|Qp1&dr1Ckzo>&7*m8okd}3~d;j)(J^&CPDSO* +I^r3EVR-%A|gL8i86JU}gCs!LKwz8b>5arz^6tF^+>;cD60DlU6v|qbe(4WX=! +v@XUa^b=}7_5h5yJS3tbuaXw_CgM3??S(Wp9lQ0n!%sMhYQ_CM6heQN8nEbh{stWEz}t$ +uHnY24GtZJDa3Rw{i{s;#P;EBJh}s`XarT|)$f9r{;U!c6|HIqZN1_sir&z~6-|OL|}bvjO>bCx_nSou4~85rrDN%hON$o +-K!Z4by6^H&d&h*QNo`!GCT}PEK;Q63eY@KOop +Tiuqm45a$;1unt{6p5LL|*VN0_0E@qi4lXc?86*^{2yQAHBY9XDN#I&0PE2iNVKt;2k{H8T;+IaQoeIgVby(>u(6V90o^DmM(fPE8 +v8#^*jP2mpG5t7--iX20*%8kJr#w{FCB!Tt#rJPsf9EiODzf%GBjfqs>FesF*B4N7YLXAKpqNj#9WRW +Ife8H}jXNg;!KT#N3?$ZUW&#$d4>Pf<<=VQ_Fyl$#i`kV$gW~hbx1I;r0(bE#*)+`#;er2}pRR2*0E|J#36Z*X$dF-jpaoRq1-I4>Q?ch{a8r$X2~5h$Ekw@K>2@+1!u(`53e(bX$I6ziUr}Vl| +Yn>cW@*v9MUg7FCt|R9iK +vzXg@N|OD#yw5JsGK2?<%2GAk?Va`YMEmODn%)4*cE0BsiQ>D9YJn{yG&Myg*yeF9#VsCQK{Txb^zO= +aX@7g!4a=g@j7c-0Kh?jhX+M(tsvPASU!*i5u|{SU)j`2tiXH#1%~PUb1I(owp$4jB?I0ov9|13RpM$ +R+-r==m?OoOg`0{qt_fy1WHXeUVd4_Fz@rYz<8fjCwGij5D9zPfyPhQPRMVis2!k(7GM=!}>f;uNzTG +o}%la?Y`!7C4;h(_2Ym&JLT>2~;aw>iW?d$4gBlfZ)S9u4Cb`JVvyMRn5la%m4E-2B-_2!=&NEl0X4j +G}!WDDBH?P$o@)~bR62%!NrBIfw8_huuT9)V^LxD!zN0G`F4{)D+IxF_%zWeJuF|Dk#iOCHEM0fVdl{ +Ea%ie4t&x+R=2I$Uy{Z#NWU9S^&aZNN9Tm0N8t!Kne!m8gX|3fj5?0u5tgSYK>?kcEAF91f0ZZ^VJ~~ +*i397z&;>yfss3q$O@Lz{XMh>m)pw6Gr-2;YuW&)6n##m&xqcP>TM98W28sIG{_tzTDGi)?41){UjqV +4yIs)m9tjXnu`T`vk+GJmRgs~uqEL}ZjDvejZD}8b;EgmOv>u6UBday+9oPf~%=~h{wFaN;@qir|z^jKapUbXbzH1sH~1!j@tBVJFW4N2 +h=Omw){_o}FBvF3!+3)w)E>@=6OV>ob3RJ_eo&Y_hQ1r~H9^5yY!I4UoqD33QXj`ERg#NMCY8G0c)M8 +nZ2DT{Z~y;!Y~Q_c)Z^kxNSf5dyKB5(yA1Ov4gH{8E(|JNFoYOso276?k!^c(6o}wY?82_oynlv5IPn +Ehk9iw=os*Jlo)AiNFw;-EqqVt%T&Np+{`(9037qMUy_4P>>!t&f}9X!%$VGF^;kWwvKdS|Lw{GTZTS +SN`B{JDDH2M_VK{(z^xGC4Xp}FXXm)nASBsG6wu;K9w#}*Jl5hw9C8!6#bP;I7n}+@N!W?kG0B^*+=8 +VOFkhI`&`L~dw4mgluKnKB|Zp@q&$ei>gI?2DT;@yMl +?A{5SDSM^1uCWp0@quA}>&DoaZd~5nmgG8aZ(Z+^(Kngi-licFou02YUVuY&47w(?B@nJ3v4WTjA!d@ +K=jZriSgVrU7Bq(oVtkN9P^Tf*4aU8S0LmT%9{0?=gLeioqrwMEEXtNx7)VzdO)#|9kS(GUip4`YTwDF#0yqJ~g{Cwazfw#HGiKPWbGo^1v1+ARc^d9ADk +SOmNnBgW_!aFYp-rF6&Y$O<=zzXYLhcs8%DS}*EintH=4IM>$s=vgik#t{ +%|k_>P1C3f>P%?f!t==lb2f{mAf5e(UVSy6SvB=ixQ_07$99Mu_Ai$_$ZXgBp%jGAgH9`#j6!!0wMPF +B3>v^nqjLoPDhg@{Y?Yg(bOJBOWTxq!j=BuJra0FIw*tWr^VVk^ha3vs7Hx`e1>>@3IC@v2=w8Z$BYV +MEZXi6FuPJ_Aad%NB`;pNG6%C$e5TvRdcHH~AgS9DAgu3P8Iit^S^@M}?J@&TpIaY`zuOK1Znw=qT*^ +|o5!Gbtu647*aiH>&3T}AG0-~hvlUsZE|@8tTr6XVUyUqE4dyRlYyWH8=Ou +>)hvdTS6X<*G#dkx1R5 +7;aH+{BZ;usFk-8GN;?lL(qqB{Vk)ktXmfDWGf#HMEeDzZ|b$TuO&t9%yGA5$c}Q067EDf&~XVrO;%N +p7Af2%1_5WdvVq|PUY3rhQR5j~ADrG15sg;9j{evlCzjhITMPFRQ*&Gcs=pnFG@+f_R>-0m-(QTl7_A +@azLxAYIQV$zP^dDe=1v@94E9Zsmh}m}jKz0J7NXbO@FHN*vUoZd+SIZ#SQPjsBe~+#ed|VI1!Q&*l! +MS}76jbL*>X_w4hA2&0EEHniFVse`22>NVl04T4HX%7Q*5kxCOPoFnkdJoOfCQ|q97D^0VuA;aMb~XW%im28Th3E@A|7Jnt={uocCdFyL~W14q^<(>-_Ep2vOT +Za|zk5vie(Qj7vE;Mux`#4t`e#Nwarw{@$d`}D17Eanwf*PLgQi?~(`1l^covTNrVeE)6p+)^y;=w374rL=Gqp_t^Ix6 +q*wo-RdDgN1uf8jL|4`4eEx6Ncn;@XH84S!gB;CflBT0K@jqxXBc(R +@A`>x@i5rcV))2Mrrvd(o#!k-NOxn$Yrng?Vu*dVNc87_`Ufq +%Zvsp-YpA`W!cE{CMwcX<&c(YmTWsR-9o>VUQtQObC6Z;p&nuov25uQvv#cA(WNykY1y!5_;McH#mUG +aS?t|SPKJa~#~gD?%g7#l3}^K))Jav1_OIJs%Qd#3BcUhi-zQ`SwqDQ4VT{1eZ)Gd(?*dF +lk|6t!G-<*i-3ra4KY;V>Vcn)Lw<0WaGLJHV?s`t8FQe#PLE-Qy1HS2IObh3RBe53UebQgCN9v0epe; +JWSslT)%?doF}32kH~_08r056I^hQ=XYq|DR){-+bSgN^#M)klNoALfzEaz5}&ZdBnMzC-4 +3CVnBzFRhz*H?Kl?kKUHxa>3qYNMd4l_Pz#Jtdj4xh4&)*#xMr@XdjS4fic0OKe`=E$X*zKKLhW^g@^ +qZ^wQpL@DP@6nON(FUG=XX9=kdg@5}Bgx`sXcHM*=YE|c;1LIx5V&r3Lp!@!7S_m;{ZBI90g84&SJI} +|70ON0Ruk3}H0*Af +?XwW}px^2FUc!HONz|FReqZS=_*%&dFlZ|Cz3yRId=TRONy#`_5UQ_v{eQB+G +C(C+MtdO}cG54=zT}MrAo_fQFSL8r3seXRA;~{#B&R#KgMTX5e3wPJty*UTC3VRo}0aum`ymgDI4W1O +x)mxi}%X^&W?%?`Y!2k=DQdGmyIJyRcj6p3%ZvyhQe)I}hArId2v%mLRZC_G6kKE@Df9zi8nujlP9W8 +{ZiizF=TSQd)139PkH*IYrj<(KQ@*CkMNVkowG+($2&6l6&_ASC-7Pwx3u~}AnNtp2!MA!hrO(qdOk| +zs)&kHKiGJ}Z{1qyqG!5ive@{pxpZN(0Ai*=>#P0+KmN}q9|&HIa7{(i%41wOxX9xza#1?_l6-PsQw2 +wU-`{^^bQ%E>f^5LL@%Hz7=q+!(hNitR3;jW-#`w=mTiv<{N@Czv(S01N8_2O|&K~S}n75C3-CjO9>;2g6VG(|LqFRX;w=RS4LNo{OFScXvkvnghQT$h~ +u>)XCuR$0u6Oy>qP{7tyYUz8UuxZ>cL1y&hw)BXNeA-Qy!-VBAVwT#gHD$5EKacb<0I?WG?>j>HF$D> +@2#m2}W7buX&2UAe=V!RxD?AMJ@$n(ma~8O;m_KCPI*9gWC447;unF>fkt@#b& +AA-k8uzkBnazr5?UD1a!b<$A#OD)}eziQoVKoD6@(w+bkB_AY`Al|CDq=yX62+dtvOU_R+j-2s$)9L> +A=;+=fLm$qrZ^s{%{6Enp~%%B$|TTF1152`l&_S{N*3Zegb9#6r&Lsa;*|dat2~=nO`Jfs)7R +343cOdKO(U49PhKdLy?LPoeO9KQH000080Q-4XQ=hR{A73H>0Qijn03`qb0B~t=FJEbHbY*gGVQepHZ +e(S6FK}UFYhh<)UuJ1;WMy(LaCz-LYm?hXa^Lq?%u(kOc;@0HJ6FjurW09~?o`pqDoZ}6YEOZ%9@jm`o-=HixdNr4p^&mYrOQt`W~~o~H2mb#1 +lm&YOK#HFddNJTA9No}E>@ebaW(x?XlovsLCn)yXz^ux+lc01fkJE6>(#vlHFT9+A^eAGgh~vVI}EnR +o&K%FC^siKmr0GspMbz*)6*5%T`HID*mO=Z+%k0V#*dMmdkfbNz}9W +W@iF^zLToc13%cdvRvIfsa02Qw{kV32H#h>>X!%X`>g36H-}okc~ZZH$*z9hNV$DnZ6(f`-~3do!yX5 +b{C0LWP2ohGnlFJnB`{8F5PMqHZyuV5Gd;I0JX9$lyJjV~DhKMXsuk=614U1xM7$rGmm>hyO}i_*V%g +MP+iWc}($k0haHKb)=i@)pRLQbkZVI(*_7>R}^y~#b8tsWRf%z2sR<4!ntRFvzr?QpxQjSroE88pC75 +kfR<2dOhJ$z2jM*3dkYMMT@w5i6e{3Tk2ALTEH3PcUao>T|gM|lC_!Sn-Uo`SHD?QruoupCGZY3cCup +C3JXT0HvCmye#kc=E%u;hvjPZCtlM(_h1_wa_xnk!kA=aUJfmtJKo8zdTgiRZ+`s+boBB^kmg?BbRTA +mg%PSY7O^4)Cj@r|Kg|T&wu#w<)iN%L0*h>Z=D>2-;1s(_GPy@J1YuUy`m5caWM(@!ek~UC_C)d`cbO +Gw!_EIX)f|HQmUQ2Iy*bt(ozBtyR2D3BC;r^XJ_9bg+S86dlKarB-byp=_@VbF96#a9zL&Lo!RkT0Io +3K|ByG(&uixX=L=PLc3>+2Yz9U2R&p&0COGcnnCdJj@y(p}Hp@6IY=M&NW}ZUe6}PLd>ZX-3%(=LPgA +p*NBNXJLIRBO&&8ZU}-uUm25)R;6z_x?qxTQ1ss)AEN@JJWzPF!;)2ST8itc+lZ1dzN;9X-hk?yJ +5B_M?gO0c^mYy+w%kQCdLX_&?{HS4S>tq2(*UuffccTl5EU&hg#Ou;e{b6JT~*Wnmu+Lw1KotkoBP8J +5$0zz*+w^^v3fJG!_rJdwH~8ReYf)nlm|5K+MBrrR;j`xWad#AE>Zvx5Ap}qzaIA>0 +ViDD)o|ebv1Xk;st64u0f#V&I9e%HS*Vk&tvy)=y0-H1U7#K4Dqa~wb4UIIR5EmkYPvs(WhQGWwg#=d +0K(?(zb%-WJOR4e4odiW1_sImD10~yIPX5LxBD;>_WStLyplPa`D1C2ufJ9F4&W#UfjK`>axALE1>IL +)g0QTq~9+acnM5Ybv+c~MFB+kkrA?_l!A`Y@#znQAqEQuk9M*>)vImQ-Dtjt|Df+`##{egxg$40*93r +AzOg|Q0GXjdeJ!_J`WG3Tnhq#E_+zA=koi^aHL@q1++E7m3J48^VZBVOwZR+!$`Icx5Xo(Mg|^ZZ#Ku +aLS7ile6pD~Pzx>Nnt=9?Tg%QsmJr{qt_jRZPfQnq68}>clYpt*B*p~0}N4Ob`4u)7NkPt0O8X$+3Ih +mFcpbV;T2B0evI)D6XN&;yw+g;UZ|I{UME35A;f-5!;d)S<=8-jeb>P3Kwrpgc{NbV|J5KB{)i|<(~s +{j%VM#pQO+}EIvq_IUd48;L8Pq$sfCpZeqyaWzu#rejl|OUad#JN)OYm7uA +_hEj&guIV|0a}h1#DITAoON!V0_iG#>yARtVsSKmD4K??*cNLOB5ScRA} +hH(dcWzEewaZio_W{W*JqYdlMS}asV@8eUsh*PK`%y_xA-UeSntcUql>r$v$g`TZB;pc+{U;6#5~o#^ +f7dY;Ea%JBfOdnwaUCuP1tBTto&i7w`F(4@Ob*aRu317}*=*gm2ImF&d}+b_KdDVG*Nq;1mS}!`1QLmg(6Tev`kFg;%3># +dx4M;P+#H9C%47u$6hv{v&ATc+?3B9(K{R@f{EmB8bj=$pTEJ+H)kSA|}Wg*yUdg6Crt=O7G5ltXK59 +D}N?MZVd<_Ey23RGec=)g$L0Td^-X_`*Q2c04eXNUqFDNh2y)ixyH$>5}!<~R-eK0$+E5z`(S{F#uPZ +`S?UX0X7dUV6T|$uOL(J=Ey-7UT;N=jYlPghv}p{n`gZ+F~X}su8US0tk +|1%Blus!6Wy@$QHywR#Vux<0EVByRr&P;%50Bb4mK!U+0ym +eAP-gl`fH!p;qNe`sV$RKS(3)FNWnKl%-B8ej+g*Va+Jj0QABSGk-=qbtYjOPO?T1Xzc5GW9psx#RN$ +lA~M?*vAr|-TDJpbbpNbptK7+Z{)aIsI`W4CBxA;IpLP!sC#+8<<(6VymaRssYVN*V891Oa2Bg?dx%_ +aOhtQk&*uJc&bjgb)1H6UsASGvo_p;{oh;WU&J+iRRGxPLk^lo>Mwt4JRJDlr{cr3F;}AqL$ZZ%!I1LL(>7#ChL< +mCi$SVxI^vJvvC2u^-qKR#nEQC{`4rors_5XOIB<$hn>(ms~i5+#IRO$PBWJ1m=-@^&+AHQ>F9!X-Z( +)QjXh~T*3BH^lo*v9cO4ntWYLqPAxMNVKDsX3T3f?#G!px*bR5z4LKoAX(kfbbX@@01>5+32wMEbo{j +76ckzP}?enzOl+pUB{6xEbgQXn3iGFjK*q}h#sO^148$f-FK?6FHJYvZ#(XB~MZ_3>&5NKR*rIy4k;P +}TMZlmk08Xi~K%AcjYwB888qjQv+qRjpq3X&6t{;zn$41UqhBV}*0 +s?@SS!gastA8XhkDQaKl)+Kil +UWB05N>-VdZe(bB6r2DR5_ftUrylyz$cPh4hwWq)@vlx)`FZ;Be7fso23ekHMtH$nHu^WxV_Q4?h3S| +5gj%U(?&G-bzNBb%I^B@damX7P98F&(>*Bnm}pMGg=|~~-fO|-#L@%<=X$`Ipdh;7^^bE0 +28B{uAn`~!!(!H(h3p$Y!~s%_2$8Vn;Qm!9jBqZBI2mEdV?K&WmhO3sN1R#kpyccD| +D>kOXPNMbY!HYd`^tzj%M!)lDS&S>^SC&XFZa2Zmpo8d +MXE4A(0gMI_}0WH%+g18j?%%?HtWZ?Dm_bLeC=QZ{`pc0liD^$|>SD^r0O2t)fz%wsQZ-8aPB%Rd2R-?PdqtpX{!d+e@8=-_4#lrfuT!+C +SBE%LErfz%Tr4W=!F{~b>IQj#9K$s0^-t +MT^WKt2=|B<&%@1@X>oxlPFJ<72!-wkx}d63Jqd{(4RVwt7f}6lG%JwbtXOBYegzE1U5YrB^*!vx6{W9 +{?rGOlN>#aDT*y#Au4^3O4E`r!jWzVM%^|y8DH0#zReZ4tMVz58iS-@NyY6WDI4Iivl6MW`=(qpui50 +*X|aTx0ZGtU&!wD6zRbbyxkkX(muuh8D>`9$1qfkd{5bsI)~n;@On<_7>V<1eBx(;-`CDG4amJ-hykK +xeb=~)eGW!FV-W`uAT;lMDX>UeI{gtB;h(egTo(4X*umq;iAC^N*f1$87Rje!$H0Nnvob$1AvT=5Rv+ +;KOHytPiL3ufv3a`SJF1(;lSL_p34Q(2v)ka2Vlf0Idxt6JDqMMUyw%G4NN6u#qOA>Kza_G&Jw)jQUZR_|tJ +rm{ZlNZE^XHf;9~Zoi{QOzL!>#kf2zz!WpH4)hJGsJsAWGLV#lcSrn0VQNwgs(Oug6ztLN9YBDhEIsR +sw@tW}#x`1P@dfN1GQ4eLj_cm?qSNqg=nck&eoI*m229SnKtB!Oj`$fk-%!y+l#N1CqYnp15EMwdlyn +6niqwSQC|bp?U-UxOD-7IlGDdgU(;a%g#WpiijT9;+Q^0!H#dCcL5{-aV`!`obD|H^m@TGGHMY;P?32 +<~LS7+j1mp3>qKou##M4|nUg$Mu?=4P`(y4;lYRcbcu946KC8u+Pe_5jO-u>#al7QU^}OVnos2agOPO +ia*Vps#4I>ls1^Ru`)lM$l0@j(P*DO#4Yt>~}WA(JtpOf)Y8c@u#m*3~CcSfx`GdK(F%*6=@inlwR+a +CDIrESxL}7DORVs372u)ABAC}WoiNs&zwJ#oc3Ey*8a!419g7-Pe&g`E2u27C=B`_+MpeUL +c9lnvq#p4HU+Zh_j +ttO9lcgYL3j^`mqGA=BKArbJ2AlrA`@zMwC{nvB`OHBz%xjLp!xM-~V)buM2>2@wO#w*IOsLUN4$GIdG@ie$Dd9e{Lt%Qq;Ibys3Z43RUx*mu|(Oxg4 +s) +6_nzVc6&n7e=u3;M}ERbV!cr+p&ZOTjFU6Xw2@yD|Ug;UiL5W^K5c%fTtd{1!OTvbcfbdY9G{d@quto +_ZbIKPyTau=-C3iV7b?-GKr$tDU-9lH#i_d*P*@02+#CEip?%1UxxhB?~|nM~df8lQY4AbF<%EHCJLp3Z|FwYr8=ryVtCV-{Jm +e?MP3e4?*3{1r1K9<^=LCelKQZgGX8fw}csLpzk}_OS5ojqLvCeYB!LEK7kb@nWnd2Zj&A +i5r-~m^pau|9)tcQQ_OcihQvc#Mm96;y9x2f*AFw9d_5KKMgj)O#3f(-^omvB;Z^Ycei +-Jy_+0>jkG3hI2JeuW^kEn4p&@I=c!lb&8!~*}cuz|%H+A*PLFz2khQf*PJHap@XQ*JC`XPIKLj2 +%0M?$m>NFZDfzNK$aJUy&JS2t{(!Fg0+&^G(zsv%(wK`#;#luql1jP3exVLz{9DzC2J|MOQX;T$XztZ +m2^f<@SYN)JY=UHVJOK6o93(SiRdXKz_xoF2dyI5~!aCsjXk9aHZ?Sbb6ZS7$sT=7{U6j6V14t8Fgos +*NVYaN_s+EObw}#0N|j_GWyk#f3XceH*18`5jn1#*~z47l&y#`jh;m9Kdo>@C=^tBYsm)$hiaV(49a&go-7R9|l(e_Gks@ngTqGEd8K1u1s10yQPI!~5j{gnJBP7?|XYNj)U!tC +0fZ0%wCGPqFWM5bqfQz4{KUZv*OlUV=v5|KW8iq6oku=sqQ}B?fRL(dC5Xo@i2w=< +j|dNw?J&;h(c%qAr5JQWIsVG%&x|i;h2`%1-LGbZH(}VlJUxvsXtuL3PV49IAgx1sHx*GHN)&BK$LTlBk9LckCETNa +^vzEV8dYYsm=bQ6Zm~6N+4O0rW;IPRP)3VvPPA^S&w}xB4o1v(`3`NzI(mwNR{lsV`b$#C|611CNzCd +JR?psQhwU?SOsBu3jC;Gv;4k@o@l93P&mM7rGKXGuNUSuB=n`leeC_I$*5{5mKEenp6J#0h$}IgIx|i#gp#O7r=ATPAbm$X=Xf#qD*1O +wH(C7pBZ9h>8f5NIHFL3t8X2*-Xx*!Q7!lVe7qd! +NF2P|oE?`z-bpi^Fi;&>iPG=CYK>G)C6k|%3Nr{QXtHU$ln1u(_PnOo^=x}KxI>T<6Rh#vzPu(=X-HI +4Vi5+o0+goaDuRin2lSn(Eaqi98M2}9=JdJMnNwLXKserPA&V@VQ)rxG19(G-UdCv3PFEI_33ON#n{Y +;j`pDNNTp6&(NFIyw2F<|)r7Ms?o2B%$V%Yv3{5FwxNoeqXSA5j7?S{eL>(TJw0mDFC_ZkG(&9Bx&n)u{^hjpr +C%ck3brp{$3(qMI!CLlS?{FE0~pL+E1(PILAffywY1VmAU6cLm@?c|(GkW;u +bpxbJ3?N14diG6fN1Ntfn)H|fRL +M(Njzp_$-5@bIiq8L=Nb%$J+8s&hiV(&u7`E|VvZz-0aFD2CjakRPwXKw~<{5-lnl3iZyKgv^YPaw06 +AvL8Ie@~5;-K9&>?!aoKT2%mm7$(YO?VKFeh}W(8w%Fr%a~6i&y{m_$-c|y^eeajOLYKJWgQHZld1sd@L8VJcx_}U=?9D{-5(>5Bc(CbM +uhn-U0q>hYt&mxnPuS@94)fv5>F5cOzmHi0yKV+2$ho$@2 +$Hyco_Ro@(Mx6GACxls`#ElBOn19BKEqpZZo8Mv^)bm^nRuE{B{Lt{o{(T*Zzdw#5f73~e+q +}b_BN?I%Tc`FPU>4&~GYku%fK(JQnrpIm=;SYXf3BSD&-en5yl0E}#|Co-x9505 +a&50!_{uo6~Q1c<(^fNa-K~CD6?&udbn?vbPkdwP#sKhm_Nk)uj_6b@m)5I4{QJnW4_BL5sq}bAS)9B +`Z^z9D5f|iov2_ige+yS)mx@g~1^vxqce>yZYA?@mdn@`S-E-Ef&h*WxM>C=zF8^gv}H?arTiS2nGxR +0XCO3)}GH|R5!kW2F6fXrP-@CQE@Jn+q2T8~H3m0!Hqt4Gd&r8pR=5XtkdIk%CofqQ|Di9H4$__AX7w9$c&egr@!Tvf&#-j{*-i@*fQ+_kX?JP_aLF5i +CnjmGg?`!P2$F)b%p@kZ{Z!n-Hof2%h4!N(JNc^ommaAqo+IF(Y_x?_Is*owdQwrV6x`&y#kpKd1+G% +gQdY6rkvuCSN}Z%@P;Kehvy5D*M0mZF97T86O;Z$?WqW=S5P{>3aj{d-3|_rG$7(#GtJ9hhl!vz+;YZ)4$+jQa<5Z?KedVFG0uTC-dpT9d!OrZ!UjtEog{ +vSVsg&THCnRcGBh!CGi|WX$n(_)6(&CKe^5s`pSw%4;p3GD~Kx?z$3d_Cv@)4$%@n2Q@j5KDTJU=HR# +Nr5hTE7xU^BeF-6A)zmprojIxIN(*G`$$JCsgX2WL4f#Fk=X3fCQl2ImyT(u77^f)i$~~?!_Dwje*c(oNbGI%bpZWUbL1^gmBmagOa=+RJrfkMuzQWFeJ +yUi4aJwbX2M8SiTL`qv*sc!JX>N37a&BR4FKKRMWq2=hZ*_8GWpgfYdF@zjZ`(Ey{;pp^co-@dvbN9OT&(C8%z)PwS+*~M +AO?mnP2AA{TjTc`a{V7>goN!iR +eD0Rd7JH#P49-iJsJRsiKeOT#(_B~~Rc7BTq2cN`nyzRemoVUQyT&~sd~S?$7j%k6^3!XzouJx`Kx5L +~E3kvBFNAg^6?J!s|9aiA3*F%B$)R?r3L_$l3TpsBro?TDf;t*{J`@vl_kr_w_b)=J4`5CoY_jUku*p +$j(SwLQ{T&NmDL5E?EwV>Wr$gx*PWJot=8qf2fNx-iV{I0G}emPgDZ +Gzb)8C$TQSKt^_UZYevELlyc#3^f4vR#D+Xo>0?+fG|#L&K3z*xJ6vVdZ+2{_{2Y85*_U+si}f>bvy#WDpRC;-JMvnrp#`VoXSuPg-56YE=8p_f6c) +s(qVVE91|RWP1ryEY4$D16CrBa3|G%X(i2Zw-uhf9PCy$~C2`Y*M_a=^l%bZacx<4XRJS6oDh<-1SA1AFt8RWt^t;GI#~iCzr(pcVFe=d4NKXdmkVh1%pA&60s=vIg5A-& +klyvVksk9L}LF3$u#EVWlfdWD)`t;DB4mdLpTo+6ZlI?C|R>T!LQJ_NIqG=nB*+R59sMzcTn>V4Tvgh +CZ|loY6`zf-bGp=U~hr7__3}(-LvZH$#s@gI3}haBxz$PuH*Oth#b9`CeK6#M1p@$$F*wpRE_N;I`hQ +Pnox6|Egu>YeJ2nJMeER!XbmYmGe*6;r*pF$NYcH_W7Yc=QhhuM6ZP4&%zE3YeR|~>~NZj7kkqWP!~h +CLX~1CPep-S?ybm39BwTvii9nDT9zF6;MlTSkuott4DdnQ!>&jG^MChw#l-&#Nn7dLoG{l1A@jtY;9L +YH?BLMW&f(*&`}ed+J^~Z@T?xzyr1_MNvh_0A&e@VwNBeq~tfC95>n0wcyg;lR9o{|z)5UGd +)Sd%_B{oBO8eQ~lAg5ADxEvCo+`AYyC~~ecc0kWEjSFo;n(HfY=O3g0(?e`ij}?j*1SO;u`QJ5`IL=( +Lbu=M0`HZ;t=PxO>4-^W1)!Bovm5kzb=#0J1KG0YaVx6zue5ng8jNV#UnrBUv<1MzhnQaWvqz+9B@B$hEAXUk$?G*^`cyUgz +%Aw5OeE{4{j8bb9JM&t1-Cb~nQxf2y^QOT+I|Zm@N~q;}7Y(jy|}O!PuU$An(2TATZ4_Ls=p*G)!R!7 +uKH;Q_dD_);_gLwABO2e0kr-l($?sU%g~kl;ig2Nr(=P)h>@6aWAK2mt$eR#U~1Yoq%R003+_001KZ0 +03}la4%nJZggdGZeeUMY;R*>bZKvHb1z?CX>MtBUtcb8dCfa(bKAzX-}NiDa54pZNzjs9$JT^y6!1H5-a$AwkqN*jgr2&ELV +x#;q9w<6@+mLYhfx_W>cA{Kus2MDGkhvx9^WW9EJZp`thPKE@-N2Z&}2!b&@Rsb+h%;@#(v>PZyh)Pv +t6?lL#?0d(4oWZr*km=S3MMGQBgq@-j_<4q=&2Wgb@Z`kH}R7fyi~1f(y*1}TGar0lKz9RWYzT^xN3- +yQ-5!gt3X`!qI}MYxQ9%JOg-r||Ec%oX5YO{#nn!X0Mu1CPZj%+y0T%cG^d&+=OyRdFH1RW!Mc=2G!c +sQ`Bz@9*?>cET`9k}wn_aYeIU9T|`JczEJCPW6e+Q3UCZbs+9euac+$v8xRcTsaM4T-7GZTsGFS;M7J +eEzD@`-e%C=90sm;c6LxNWDZx?3K9UU6B_fwFaAy6oufyM;Do^v!qQ?tmi5$5tZj0F9p5i1d=lPm|N1GB?u +20H}jLQ3)Vq9|7CU^pC?a}})C#R5p37RG6F@u<{OcAr11mEvyoCDSOdzHXBTEz5+Svqp(~z*jHVTmp3m0V($&Vs3dCW0S +E0aptV>;s$2GY)vc>j4AXN7pC;080Pl;LH~bkzvl{(n2=Z%jfw7k_0E;v$989(lxJ)&HI#1W&`V85eW +SOG3RvQRgwB5Al3;xtYW?A}aQ-!AG@74(iNnVDN2-f(^=t0H*mZQ@wmA#EzMGm%A?IT>{eMBxBKq*Vu +SW6I_KjI60Ut~+!7vr)ZdTG?O#$A#+Do{%)vNTzX`)DnW#Ux6F0%Zg>E+ptsB=n&JL&tMg%s)yIHSuA +aZ@GGlH*D;-lX%;wC`MC}Z?Ah6)-22UFyC_sioCY;)H2fhb^M*maU7-Edv$R59nFhqIt9+$XZRuJU`k +7v3jR2ndw?BADurBn9TX=@Ga-^}5+z-0ew);9Bui89Z*Is)5O;2F2r(X#57I;dH#b_+_2xh0w&&0H{< +=G0k2FB@I?(hQ;FXZl0i6Lrc@Zm!UPRzDp$S|AgWBn+LeXj^X$I^IkqnSBnn%EVkhr2uAqGv>f9r`Uk +VpJq2__#D7y?Ga`~+fcm5F;PCb@*gpq4Ak3mC0>7#TlIO;6($T;VzEN~5a<6oo0 +E+rZ}@RM2g4nF7cm_h>P!elu;z@!1}u!iBgi~L^CEDL5aTp6S#%qWpie$6abW&zhaBu6tm^L~an4O5x +`#2XWYh2M~i-Y=RLH4B2U9tYC};a6IMCBWOm@OXZ|S?)hT$hK#t-jbRywkZX26+{_i;=9x19|j0r8w; +%f@3VUev0h&=I2(h3(KnzgU^h2u0m7>R2#oHKC|X_-IBc6|mj=SOd_NI2ZfD?sMQ)BE +dZxxn*-h%5)#)m_P+K@FP+TKR|f?J~O=n%1?0A_tFA9g?v~6_z^`Qy^S8t +I{|EM6vLJkFHn6Yj|~~eRG~Wi4ZP|uYeg=Lu(-OF>udI7a?PI1W?I5VC%wvvkz4|Y!)P4Ol4z~~PF|= +3&fTwU&}fo;8esuVraFUY5rjX6cTw(pC-1&L`gj33l1AE`)1AGTS-_U{hW0!Y77Ex%;5)Lh{LjNPh+Ebp;b8( +=&+WrVT10ryV}ZKa9LQO@#046>)dWpJcI(PHi3$ifTzNA&CJK={waKqNA)Zq&POTnSe`!MdShgGEzIj +=cOV0h6!GOTjt(?u%63H;4YxM^PndAVEWb2fCU8d0$xO2_Ws6}_-O6peb1xp&hWAJvkZF2_I#a23sAdlexnwh)IOZg;^I7e$y$cK +VC^_QwZbwJnx4+$9_#}NF$Rv5_`!2$%x^LdsP+veGWZ(7k1KvFbY6(c?$Rsp$2`#@KgXd2Om4PWN&Am +ZE_L_}MICIYF3uXi4mA&@;U_z65RTkc+;h}RdK{oy%%eQhI5RRN7@jzUefE|QZ!mI1NK5-hoP!Tt>9a +8;Pu12PDcVcqq(_p05kA~RlXL^QHPc&iZ+tWpHH$cU&{Sz3+z$b6`#81<1`jJ0KpdhxBLYH$r^GO43e +H~z1?5B<{No6%a*k8A6rD0_D5_|+%cMxw!@f26DF<#_+OxA +Eibh3OckkdNQ2Egmpx(aavaY3PVfhi$-tO)*tljaz*JK#(_iL8Sd2Xn)?2q^ZZTJ8S+^RH+T-)cDF-_ +Q15yxe;gSU~DFUWJH5r~v0UN#YU1n=EtQV`R%aW2AiHM+U69!n+d&$^HnuKnQk|MY8Wz=oA#EZsO(vZ +%`7(L6$=>pJAL657&k`z|#f0OtW#g;X`lm`Z^{TV`7`M3r#{8JpV`F{O5{^>NJ()WU&h;%U^Kw1KBFg ++%s-ve-`C=cz@VH*Is4Rh{$Z+@=oU>$YY&JxTGW5#!xn)ZI_qq8xVB<5Keta=;YN;jmi4*a#H3QR?F` +8>!Asy>WK&4zyvZaxU??T7aX0JtR>Yni9GNgMwuPgj!r+LDXUh7DvRzIS<5oax2s#DRBm0U-)<_Azdp$~NGW+))L~9C;M1n341RBmTP@Vp?!o>w3YHJ~4tJTU9NON53bL243z$9E6a_={=Us7L%|Luj_Tg1W)U?IS=+Mr%<*JFiJ<2PvI_cL7myU?`dNtqe)a2T{> +%8sbe5+TbD^{_|X)%o0QZM25{;Hp&~V+jU0&DxD6nRtTmoJP!o+Kg1X&!xf$Qu_tY=N)jJ*w2FJX12z_5UV_R%r%6nd<#pa?J6JlN_qi+ZYaGyr{(5{dnzIRxK5?IKe#Xa +*^qZ>N6fYItx!us!_f3tg8ZqZBwR?|~KLT;5{|xCqJhHS`ReFhW>xcz!v+d*xY@fElQzi~6O5U3+s=(Z2E4fL$b +2Q?SNYE41p{D;o%zS3>$6(_6MkfWHE?bV^`CR*qolK@}fNkC_-=W@{i-h^pdcoPg0PcoJhyG-zn*@~l +iL=(@Ra*Z_#LuH&%_so#YdTw}VvWkCH+$IVUk01Y2geU}vRlAccyKztzu1jNgr?*O}i2C}jdI(r8c`< +zBB$Ts7XC?p@)`RrbSh?x6gSmHif;c`tX<v}@3>g*#4D<`mapwm$-YuHzD=9-?_sHIQuK5)rBkcVqdu$! +*R&j{1-SR=Q#fEw`F%Lhg7*K<0iB^fkpqD3v|J@IM}K#_+~5{>dzA^tzgcn~HPItnyNA_MKh%kUA*u) +*jlbJPjRk1UYhT^%UhmYu}}apj_FP}*m&j--$>agc%(>=2v|EIwC=>cnlI*0U +m}C+L$#qaksfXs}5KsiEil)hmp)B-LWdrdZMGji|IKXI*Pp@HA$F`X3?TkF)&A7$JEc!>GNcfl=*Gs2 +q&!A8%m##Pr*wH(P?wI(yq(?CtyqP)h>@6aWAK2mt$eR#Wqj+MRm{008e6001Qb003}la4%nJZggdGZ +eeUMY;R*>bZKvHb1z?HX>)XSbZKmJE^v9JSZi(>V!%Fl@P?tyyA{h?VCm2fK_Ji) +ZL^U@jil^&LHpbH9Fn^E^0wIWA(qH<4$t*Dhl--;Ugg|MRT;M52rbxNuu`dKwo;nqs#?jlNtmpRl +?ZC0y<37bbzG?`qnPa6TsvQ&FntwF!tipnyxQB7H}rC?fY)lL+QV^M7dtChsQte7Rn#x`1{5VJkhhdH +EcncG`clRms${K88kCKI`>mA24oy~ZK!t1|7AIhe^xt1T-e^s}-wX}&F3*nJC~cm)j%d)MxVwG%GCoV +L~m2@h}odiVFc>~DAfdiY6>_7!J#v{_ip^7Dto3h(Y#$XeK}KG=<_vQjQRxjoe6=Role-b&a#L?rBEa +9YAXHFYTx_Rk9M3Cp>$6VF`BI)xTiXwaowRR}sZ-w4E|HPyYHBk%035z0XQ`Td7?A3r}_Cf`YI8(xZP +*RtrQs$fCZRE5x4zaLagm)wY<1GfCD(%Dv4_`eg{z^2KBGC^pzXj38u<-J>rv#jD{cPSl2L7WIhG5l`M +rhmNI3xe{?Z_B&A8v)7sAAlSn6}4M%AR#;cdFHg{ +>2GRYp%_hJf3zW;w2ZgC6jX$&O1T>@3dBWECq;osD;@8@(Lx4*Q3hIrU2Z@syGtwP}TvX7Tl;R9SK9J +Z47KJ(sQgh3vhtk^mdLoeTAfZuBqDM(VokJ_l{?fC;{pTntub-Y6P>2i3(;C;0UtRq)~DzDPd9i6{sF +7laj)&gel~4?aix6rZZ(aX7|oj%dhhey&jJt`YF^(OX|Eqzz|S0!&)4LEQc;R{Ak7ElWv3;&kd5tI#% +h!(TS4~M(`M4#OQ?hyqqic;p3+}l&`RsJVH6iU>(5&+W_dPp&40-Td`V+94D^4GDJ*!jo$y#B}Wj%UKkK>g#bpbSq9a(VBV +&s9O_0V{E8o~$#E)6{K;53kplbrs#r0!Cc{-A=dj0?oQ8bsv4z+_Y?SLw##RDr|tb=HJ=Q}P-zAQy>ZI +}r+*4Ab|n?Vv{aXakVK5lcT=`b{ODm~FiK+iSMim%;(g&=DQ- +1gIhZz@nUp(qx80{iQ7NTimI5@&d#4?MJ#xX_dFik7^CX)hXH0s@auit{|Q*YbqkK5#2R%V2~@JF!Y1 +IxibOKFDX6D?^8bY`>BDhAC=J9lL~Vu4xv&CGo{jK%ahS0&+(f>RQO?f#`46kkR&AT;sg3F@L?h}6_e0+q;{0ddF6nEqx7!R^qRhG0hW++CJEw#1~Pvqwx|!T3%2F +?#|O3|@ZT%_+)leDNcwY$IN-KRqQ1}W)P?`q}ccO4HpCCH`u +n1^WUR?;fetr_AqB~w|Shu3461L1BTIUcWN|0HaZ$x77a`7*L>IKbEu}HWDX+6UkGDTJ_~n++47Atttg1p#Dfo8PPF^}c>IYf9MdDqk9BVWYSG>)e~y=wJ(^baA|NaUukZ1WpZv|Y%gqYV_|e@Z*FrhUvqhLV{dL|X=g5Qd9_(xZ`(K)efO^* +)Q8x!in5&r_Q60F$aK@4>|~mtX*aV73YnJZn2jt7q7=s{`rr3llAXH|Uc*;c8NL6a)7GIQ)ypZ`#wiGMzPOav$W9&YEGlYt+L< +*lb2e$i;%UMUz@Pj3=`hJf4?F4HHlBJev#12=FBF7Dt+u3V>_AVU1#3Kj3p5OtV5h2o|l +Eyn!CHm>s26Ef(_Wh&fZ^cv!4i1s4H(6(#J`QfL7@e_Gbm7P-`GXxLb);OEYG+QraAsE +jx)s_uTz<|hje!Nr}@VYJNxDCq`Y%Fp%->`Srn`Ws>=;8G58A<*raL%$Z3`*F=g7g5Ih2472awRPMqA +g%m|FlPp*;*VG1zUiXY|b+ni;TzF_0`SAZ_X^qXq2A)>+It4?5E4~)bj8KF4v+Ndn9ta^OW(s9#7!-^ +!nrZ`}2<<&;Rb^(zELeh+;8sntB`@Bq9Lvhp1r*2NlI2PAP~&um(%@Qnf{%wpt8{=o~qou;ah6xl+Y+ +#PAbE(YvL9R%H6K3hKkGv)NFzkn@_?8?ei(OS0AtCdbrr-Zs`d9SA~u#mk&s%2KdT*if@2*OooH5}D+ +MgEL^n5=i0PId~z;somoT&G)AV@PCF&1m*z%iLZw=3-Dx +M9)A9+ar&@E#on=38;-&nXTy(gik~i)JlE`3xUHFax)3)MT&iYSFYc<@m#h2F+Su!pd{8y*fp +NxSO546dj3Jaj5)_CxfNi1^DreUy+tW`~2~KX0MDT5C22X*bm-Et +}bFasYuif{5RXV+)W&2_UX+uyJH<8}(wYY7Qj_LE{nr*`jwKR{)AC)n1T54X1&TM!_vnkC-xr7qN}H& +B!OPXIMjbLv}!J2`cTYj8jiWNB_O6#+~{T5B6eR+(AANP8MU6>=5n0%&YI74&X{9pu8wSv8HKO=6=cQm$+C!6B(l_h^krl-V +bI~)m+2#~Z7>q?b*F!;z4a|x?BC6Gq +c+Vuld^GRqIT5J-#YY{3m1pMAi0H7Qiyhqnj`+REq4^LKEn&(S&#Mq}>SMg>U?r5!!*u+dh7b}48dUc +yZ!|Bt>SdZ+NF#)hg#=3`oGm~iDprp)zkjq+RjiRpA45_s^Ci>(dK<_wtUn)%YW+FsnRd%TIcX+V-3R +=p!EM&7`<28+n-YRC20JWQ%M(u7w>EiNOOT=uo=`RGc#XV6T-5l*X2~X6~WxpX@Xmxg{YE#wfQRc$Th +WaKmY2YkbBf?0CPZfSzqz8Ue^*~*&eVqpj5pxo3+ak{q^PS}kQujs5DT&^;jzuYx +nE*efW?Ck1h!N9V{cLSYwdX%mwKV+lrzV1aIq9#b{A2fu&Jxu$e{$MJoF9_dzkM17)Fq~Wa44^(F{oS +6PvK+l1Ry6bJ*y?^7m>?z$ed>WcOD_AXCLH`xAU=6Lmkn7nc6VI4GK{fFXpnkhJfpiCt{)Ny_%>nJvS +P?Vl>qxq&cuhAu1GTtw7zpk1X;ldrJSnD&gBe~y<_t?<|H7-Ud +mO5aWRJ^V)$_KpQE;$5LSb}IjM>0iH?S_09vE +F)WIJm2r8Z{72g8*`U`a%ro~Nwj-KG(6PcUUpxGo&;VFjNoXsWr62$JQYJ6OW@y!(~&;JF^0h4g$H`v +b%Ovjz;1~6)K-O{2_mK^U#2gXCsT^P*#tB7y+=RHb)S77FlM|HdTcvfC!_xWP)h>@6aWAK2mt$eR#UU +|S?w1C001in0018V003}la4%nJZggdGZeeUMY;R*>bZKvHb1!0Hb7d}Yd3{vdjuSZ$eebU*^*qoGGtR +E|VWp8kj39^+f}qSGSRvGMx~mft$8Oo~OtOf7-{ZdIvSR3m#Fwg5r%qK_Z5rzW)vYOmwc01DKd^_DSA +h@fy+2u&*3@b_9)x|P%rZ%8XE)TSMij~fc1CK^2Bkd>cCu+I<@}>|Vyj$erDn4oU0iDnu#47I?26-kl +3dVD(`Z%7psbG>E}v>q6xELU7$pQWIX<`L=5?U(mcsw{i+1T@Ri +wg$>rN889nE3@W`f~BRl3#mI{t{Pdc +>8@-OjsN^r*F&p%Re7RU8*(jPy?kDsZ4EE^fJr$|T)u~5g_o+ja4Su~Dowfi4;RXWSV$}ZTl2VvKyXe5$^U-~%=rygGn+QhAQ29`GB{lYeG8IU9EKzL=9D7Z=J+3u4VP_g%PnOdwN}&&|u~4j-JuUgdQs~O4&Huu+w{R^j2> +NW*5|p?d^ucDhAhT%`}PHO@f^?U1Lrb%1nefZMacix$xb%9L0~VcBst-eS&%rKaO{t#c>p4vmv05!Qt +m2>}BkK&|%{-dLGv@MBxXZt<)_?b7fReQY#Ok$EAK^XgxI{=pi~yUA0&uzpw64h<4JsGq$B{H{-RjR)EJbJQ=3t;DPN@t^y*v +k!0PH}9vPXY+Syo+tkSP)h>@6aWAK2mt$eR#Oaf8puKd004Xj001HY003}la4%nJZggdGZeeUMZDn*} +WMOn+FJE72ZfSI1UoLQYt(3`*+b|4+@sVX^iAt3vyoX%|{99cMueRrSB0q<(Oy+Q6HHR)@n`cquS1TQ7`N3)js +39={shvkH2qMC$(;60s1Byq|bmZ9!u_n8LS{Tk6m)OvG%d-G@ehztTzdi6h=6(E0*crg<;<@&i(# +HOn42)G_j|NJh+~OY$S2FPTZpCR#k6+3c~%Xfn9kmsvYGMFHfzBMkCHSp&Oi!z-m5u!{=_#CQBg;sCG +ufMa6AOv0Xap4tV;5Jr~goTErH}ks;M@3NfUYv80h#3iI{~u4AZx>DwYu8!h=%rN)j5F3T=x({Ibo6} +(UPOf=fOa~Dm4jy%@r@h)OW{a%lFAu=MKeR+<8^@G%n;X7ALOTzPqZn7?VwAkI0|HIf0mHfxby)}P01 +;WByUSjcTglSb54AX@XViX<$U6a{l{{c`-0|XQR000O8`*~JVE`z@J2MhoJUn>9r9smFUaA|NaUukZ1 +WpZv|Y%gtPbYWy+bYU-IVRL0JaCy}lZFAeU`MZ7vPF=3lPNuW1+imV;n-?po*ZAceC%rZ2Q4k49s40R +2Ks##M{q{W%K#%}MI(FRjZo0%0N#J>Z2l=KHQWLhJJdZa_DY{}KZg2jeMB#qtVzuJM%3aE4(T}`b@|= +y9Qf!FcmavG_kD?KQ&+*yRd|&?Se3m@_X7>EsI&D$hf5GHAN<3$^KJu$u_Le$`O0f-n(n7Dp|^xoXKY6adAU)p1pPtr +lk4#n%xPj(mZd#oC>)CI6t!Nly2Bv+in0kFzGhFVk??%-`bl~QvdMz=LLukBouE%#&Q*Bz-OwHO6H-a +j*c&8&o7fV7q60&+2!HU;pJg+dU!Ikl07oJ-pIUj`4+jSsDqi5sGdn5YQt-sicLwi!>V+a^F>l#uM{C +)kjt~9vjcJ>ZWzhfk{29dk~Nbo9)`$Pt0d>ewS(!d6Tq`ha9g6b%3KWt0ZBA^fZvH0cEgA-L$f_FtoN +AuxfEKYA|HW#nO)^>k!M6KegIjGMn_<@k}oP`tkx4eH75J6UyWCz5qchzu&#E&c*XQ9b1zDg0&FEoz} +iP?PL(46po+~3Ew|?ac#Iqk6HC(HODRew_10X0kO}UO6w8+rviDa|h_nmwBPmx5%u*k3%G~$`%Z!F2K +-Uiq9HIIJ!L6jI%1;633Bwn8R~(2VNhB*}k_@3?x{?K1jz8e@SkhY~@}G&lu3hnG64~oqq{b6|o{UEx +3IO?74C5goIg~AU7ZBe8o~stocs%|Nor&l*IG86E!WBTF8Ow}i$D?M;A(Dz#ZWN2_3ZY5CQp^*Q=UYM +v27mA{&A_$5XQo8)A`KC!24G4HvS2Efwy +6_P`wPLl2I@T!i&8P+X%V!*g6u14EdZm1CR&gZHZyr+r7u|yI)e)Y4+7D*j1>(yt_dwND_Ed^hrQTW>0|thWn5!^P +2dRzsN^BGbO}_|`x+Z0OCcMmp$T~6zpTY&`NAv$>LItrHp^`dGuC3069A{cKgzh=S}RRasjUFe90&yI +J_|q<^FnC~H3r&2OBklXej&OfWHjpJg}|J~z~ob*G<<TB=IPSl9R5)f}Ohpa{7f7+GD&JjucA;I3K`ZM6~dX40^!XPq +fy$R0sR}D+nFc0?V9zuw=Rq#l}8Ys$y#YcTa!+)gLB9DhsklH#eY_5BV@JmLh4q=su47%JD0#-^A~L$ +)8X~S9=Jp^-0fXU-J#mskC-KpF2wD^C?EXk0pr)Oea~i5&aV*`3p2v9o +Evh`jETqJS!7XTN9JricGa%_hlg9TyH2HY%gG@d#Z&}5r+s~g{8Zjhci5a#zkE=GVK3dp4<@KW +ww6U|tubTcR^sci7cCetd=6T&Npf*EEH`^|Zo2%h$wx;M*WbOrX?9I_@G=<)aP8(R@5CCC!CEAj0RQp +v7EkhVCAq;8|lFMD-gju55dmRmRiC%7bpR!Vu7hq%{?-!yftfWH(esCM4qF&SpGd9TpS&C``chE)w0B +EjK2oFaL|JDtv{~STZ|9pLRI=EuE(RC{(mNx5^uFCiom-PZ#SCU0TUW_nuGwp9g9hS4hQ91- +5EDD_Vd|4XBe2$O5z5r``v<72U7bNRxPaAlOXref#Q=BwR?B!nJ@5 ++102j$?;tAk1zAfiw?;5}TQZWaS$fUn*S2V^XJ(Xq1JN03cRNfD8)!V00KNh$0D5EypX`)K-6M;h`lX +Ij0CaqA6A^hLO(E(jr)vUOyWCX;)j(?-b&fhEthWFekg0P3c-jf?87o6-)Tb^fNrrig2k2wJPQ*Sw;kJnhxM8J{SzYuh8v!-E +V1(H$&EXqe`Zz^w-d)azlLPaEk3np@P8iB1ZOEXT#5o0SndJHA;hBgwu@RA`vZ2+wV{lV0xeaWRAQsB +fsUgGk+rQRThc1mQJO0w_i+dL_#wqe9|F@i;b1@^j;WaufL}DJ9nVvZlCK_(-yGdAo%qt|Ek7IN) +z072ITY{DZzTUd&jup{-NpD(t}SOw&Gdck(gA~XA+ZcW<5~H%r2oOI%-Z(az<|uxX2;Qb|>=n6x1#lOLUiEOWY2&wzyEm#1eJv*(AeXLrpFS!72k +rYnu4wb#7-`q?BF(FeHK$8z0A}+%MErv0%3FmKoxufR=;=nDtIjaRq$Wyo)7~uakpT{%(Wje0I?ym77 +bL1HgvpfP1DE*xgANsn*R_*rB_$?I$mJM>pmZ?}xEWHn_u?)QRs&G$@VW#<7W~7FFap?e2Q8U>9hgi_ +x3ULEo&xdkq=U0Zlfb`~Kb|Rmi7%en*L>WH9T;6L*8*(B_L1$L`g?Z<0(V0)+|-&b2<&4cE8fi2`x1- +adV01H1|ftHWj0kI9o)3(b5#GZM>r@so!~QtC9Lf{5>ym=J~MKlwLH4qLvKvH+V$}--WARAex3`)n{t{R3bP^Hm +{Ac!JX>N37a&BR4FKuOXVPs)+VJ~oNXJ2w< +b8mHWV`XzLaCx0r+m72d5PkPo5Z;H%fvOKMutm{afB?A^ZO}XfftHp=HoFq3l9V0q*LQ~0g_LY>5(8^ +X6nW-8bF`vqm9`8TF6yiSWB49c!Y|fpzZY`9s(B^OFm}g2eSGzC%igOauo5aE1 +$m1dKtpyFW71|o+k?eD#&V1fMuBb{u)O4!Uq?9|0P2fD$V&{P7Q2p=$t$IEx3{+{+i^6xKbNc+e*VCf +SHYQdTzxIAKL4pubhvgDT1kqTUks1_<2~pfd?vB!YO`8VPJ(9lLvm(l<2$#Ovj$}IdBwu4O+-b;ZBXcOzHDa2 +!Q=QCy;9b#-8Gma}p5uo`r-(D@p>HDCA#M*sWi6THk>ti5H4%AvS7Wp~!yesq$d1uHf3*V1FJM+8<+M4?|4dzGWEDuJ)2wnp(a|_>W-)iD&kK8XRCY25 +I_JE~6jE2M|Qe5ep3vBLhuoHYx_KoUf`C4nG{ni`x5RRNANKoew96LEsPtIFv%7H@$4)GScu!v$6(*|OW8b^)Y0+7I@4m05+UWApqY&&o#{eHFFFG;wVZebN~24LO(k|+`)jdjGQQ$air@c<7DO({YgD0cO(vb6T}gfY#2XcnNy-&KueibBc +4;i?byMA9|bl-RiQ4iqo^N5j@UdrWTAEAbxdq9m6ntxo)y%39e*6!w(l&VHS@lUJ;K$jGRivGgjAC3G7f5-lI(Q-bHqQ5&Mk5P|4{@BL%eotQ<=nOl#xM$eDL@#A#?9|>vv)LUOAE@`X +iq$GqhXaXt!45DwIO6FQxUN}HwL||4GwF_XEzS#=8<8@OnUCWQH?xYWVBrbA=R#%ylFRZ&><^Y5c#A{ +Er3qyFjNTd~JF9NsmRM6gA7b_-3LM5t77%J>dPTZ6YtIfXIqfV??)%pSOPIzCE;{haSqhh +nS`#H6KhY6f7fC>~MY&U=R%O;=#~o2skp^Q0Ph6dat207XLzswsXL>p1i7*k_7(DSx5=h!{uFxI7OpB +h0i=h)UpH>eWZlSjtRdtn>`YGtjs__3te&m8@z}*m(XAV{ORUS*gIc0$O|HReT`27mLYtjoI3BMLLa` +3#~3@3i$SUYpg7KCz=_n>DguUPYO@u{s&M?0|XQR000O8`*~JVd&wyNI{*LxKL7v#AOHXWaA|NaUukZ +1WpZv|Y%gtZWMyn~FJE72ZfSI1UoLQYQ&LiLR47PH&Q45ERVc|wEKx|#&nrpH%qv#N%}+_qDTW9Zr4| +&W7N_QwC;)M0NoH!X9+#4m5*GkaO9KQH000080Q-4XQx!0vPk8|V0Nw)t03iSX0B~t=FJEbHbY*gGVQ +epLZ)9a`b1!3IZe(d>VRU6KaCx;-yKciU4BY({tR@?9^#MVhp`D68hOR{+2r(T9ktIP=f(AkUy_Dlej +JW7j4Ki)=$UB}JZ(DH6adALXThE=`?BrINEkB?S${J9uvp#~8J|M_&2}GaGvS#d{Ohj*_=B=$!2djmrD0hQRM|N)V|>HQ3kA^Y)iB7O?@kxlWnvN0iI2WQfnD$_>(lXs%6A{2~w;wpu-sZK<6=_i2)= +y8!1v!1KSLE295Qgu3B?~WgT9Kplu97Kn0)7$QD@%te2m{B$Itzife2Lpp1$_fa +J>)h(ug`!&2BrH!*nwlQ-#9&P|HzV(##k{)nq3Y&kQ)chb=LH|xj+u0Jc&ze~LphsTPF;&~h9 +dRU%xpzxRkdiK+0L~Zy03rYY0B~t=FJEbHbY*gGVQepL +Z)9a`b1!6Ra%E$5Uv+Y9E^v9Z7~5{!HuT+J!3lk^I>l&T2F!rF8cQ}5XuBeC@-Wv^7>SO#=;D#ITQA7 +J?;KL3NXd@VEcHV|9iID*hm4|#d^-C?etP|iL{T*0<+>J%{4MLst_8EJjVKC!Jz7&C*{C>{(>-<_ZRI!iCk-=`nWX4BK@Y?^+YemDcfD +A&SMFnxqhi3VpMFVoBEd3ui9f{n7eT=RkrMfBI_7oYFu)002x$-l2oem+STKYqR+j`u<1UtXZ#K~_*H +$sq%WXJ0d>-4~CwA#1<}s+=uJdc)LE1M{)=`CKY+DuiH>5cYKq3|XE+eArl9JD&mkmhHww;{gl0Db(1 +72lm09k9EZcF*$kT!;Ngnj^CLgTUu-w(ZSC_D&mM8p;b<{Oz`E-$;RAZBg`qJ=1UY#s#+0Vfyx?)Kf% +;SR8}7iHXk5DVOZ9V;!Eh?Cu9~PgYctO%-TQmbD;v_hjgxclU8L0% +%E9$iwNao!rqYz>Ejss&RlO_F|g~_Rj{?&%bAoXXC)(I;Zju=fne9_{yKbO+q-Nx6{TkO(F@UHp{;8HMn6r7eFhggwt4~iXm-FV1CTn|(6BK3 +wB)CySjnZtP6<3oy(HB1s1#X(Z@Fkz+f3?J)JYQ1pkS4;Jtl9+>!+$w3r5t6R!>y~8W0nWE9S2jzOVc +M+I<_tB`+XeX$5G*moIO>P;mn>ggn-P3Nzcan-BDs=_UgSnH8HH{fB}~dPvt>8ku*uW3ts@y#@U-tVY +g=D^|*3th3fv_}(?(=6o=cD_UYPM6C-<1)?1Q;3`d9uS!-d6ZZuqrt};HPKOdGc;10ybu)=ICfF9*T3 +vZn3YfM|eF|9@+y6t*G>XGiIv8O+qkSVV3-I7?2=3dUPsA=TBytV`T(|D>?I^Cl_y5=^{KQ-H@?py$2bW_j{z5v#xGD7>Et4792kbj|Aw^S`Ez6C{6-w +=hQkgF2p~^XT0Nx)Asry%zwc7L{;lCTDi{^*q%DG?_}NlZOK`pkZWH +}z*^~VnBE@p9aKajs>$)z0$#1lfN1|kD0NXCVOSJ5j?>Qo6747#+v>W1P5h6DQPqZtZFO*J&(1|e0pw +bvxJIaD%^}TuSUM?|OdOcF8x>l(++3UMaV>UFscDb|cmhuirG^{6J +V5Y2y+{aF*3g&eMy*VORZJCirX!OO^PvsYYQg^?hoZNUy`?s&`*O)_wJw99IK|7kj1s(>XpO;3c617}B)uuG(@@S0$ +_Pkwb8-KneF9BH=R3mmKgRCz`ji1Z&gqy1D{aUR`;`0v9YsGAhjli@-LyIDbF#HFoQ@s{!}2hGk(A#T +H2$a^pJ8ecU>j>d19u*0EQudqr(3BP@uY;UKdWE1AvdL@Nt~YSk=Zwh_B#y%h8Yeb;^7@ZydNv~{{Q7 +gg4Vbx((A4+#Bfo2>1;dry`Ap%S)Y^ES}FGWJ@t+X{UG+8-LJVXHgH`pu~`2l!iEGA!ds_sOI8(lqZu +@aG)~BkyRn!gKvF8_sQUN4)(t2g(C%+(2=NMboYxVBs#<`&cZ(N3*@7{WqMs*n|%c_88h`E^hnH1M%# +gM#}ubPm2RMa$=Lm7u2)tvXY+J==T&Nt;+cB& +GTsf9{!*-lPoV#7SfT&B=MXp!3CrWJuxR!_$MBd|%!xO42eQS(1gO9KQH000080Q-4XQ)1|iV`u{a0N +4ot044wc0B~t=FJEbHbY*gGVQepLZ)9a`b1!CZa&2LBUt@1>baHQOE^v9RRZDN&HW0q=ub8qIEuvMCs +{j`Tf*S3mIpolTVGy)5>t#)m3Q2k682;}aQZG{8I6x2`7R%wxH{U#Yw59|9)JuI2vg?iYaBa<3)Su9o +@Ui#OXrW4=<8F5h%DwC>{)oCYw(3RmAnwVw8oX3)MredKS~fz-ugJCNFg2Chqb1A=zcd)}7rPIp>x6F +qwAR?&Zr3Q`99$dQ3ID-pZ;h&VKp$i5FH}8RI2sFN5;=qeX*!6$&L`QNK)^^511GpcklJ~n6t)$C>>? +WHP8shwhby>Y+VDH6g?(ZrFr(Gee7qgCTRf75)Y5ZaL`nD@s$;pF7L0ny;0-14#(8^tOJ4pl8dvSa$# +?blaQHnQ>&09iSAQVg<~E~4P!4^uPi+(Lm#tHU**=TAO7WNfxk?U_oYJJ?XG&?zBp81}TZ6g#4;vqYz +B6<6m!Lfnj`h?H7SW;{y>T8}hx2_NibX$IO)>hvyIx_3)Qasc1)a?2hWO=bWU`7b0$vN{aK)LV)Mmv! +df~mDqI%fF)fLRLi7^R77e7#IZrtzFWzBqkv+c@&o3oBzwB8xPD7FL&9g)Q!f_qJ#H9T!+vk70Zy;`O$c$cAm)fO8SD8Y`vx(q! +3t5olvt-U((+USM07vp|HtVhHp&NTUVlOiwQfwZ&3wLH+A@}q;B!cq6qKc{cWcGEBs3dHG`*Rsl%dyG +s0PD58gm4T_bD@_=xt&pTd?E4k8vbhJ>`ceFjIxVs*fwh~tP}h&q-lw(KGfBM_SLqJEh6a7V*4W4{J` +BVpld=mC*>zB^{R>c-buJOS9Qy0eFdS##|#r^=;JkwR;nDV!XjjhT~^Y+`|1Rw`rjsVd(x5WVv&M&1iZDY-|=-g~K{Rd1`6<-$1(2No&}{UnM1|4JeQ7LX$1B$LLU>{qYp-YW*gDE +=8r5M#YW{JD@D%jDJZQX^Wqv5_h4@3P|#XOX6K>1i87tAks>@9)3QWrz$L_)^A0VbWG7cpTVY_nQVQs +OIEPi&l{9C|n%?r)glBt5}X{?$w%e>h9n$kwt?u7` +TxJp_xevY%#MtI=k?j$Q*QlqPIP@6aWAK2mt$eR#RFqbX4mM003Dg000~ +S003}la4%nJZggdGZeeUMZEs{{Y;!McX>MySaCyC2ZFAhV5&nL^0;Q)8*`63njyuV)tE>Os-33U3yca89qDf>D1QrkWeHY4Cl~jh!>M}J_7J8K1fkMvbc{y)hW&5F$I) +A9RSu_JmG*7iEiu^9FxYA-YQ*y=3rUD|&eZT(K#aVLt`t0{WGPm86(@OVgn}7yZSq3Lv%Cp +t6Zne+;GI;M~RH5CgHVNB)BXA7L4hOu8Q3MPzqDX)cYnL%y<+X*i2@kXrcWiHh<$=i%f4|%z +NEud&uqNoxh2^mTVpGkb9eAbu9guv|}nwOb)h*Mb<0+d9x?7IH>?FFBU(Fm1AC^l`hCY}rPmd3&)DM7 +SJ5{*WqEzX)+|#S$6MR}_uL7i&7F=skpK +=-Q;!b3b69mDfsFcv6G@5Zn%9*hOmf53ncEQsn9D}{VV}7BThVvDIy}x`5i$_EyNpvBNP7*+TLnA~xv +DA>a!Ppxfyr*&{G^v3H`S2VhCHF$-DxpEkT)0$C-v?te&mx)2G1r>%k2?(40^nTZ)-%}Y?dBy5*y +QOr6b0B*vxQQb&~Z_*my4H?}H&SOC%>EQMj7;r92(JdYv!=nIex2N}x_PNR1$DOb{@KP}GTGei1#E!n +Db(4-yAh+gu0xS8-o*I5JIb&ua0JfI3N(J~c)borP$-;#K{<#UbYc!&}EfU_)?TG?d{6Tim>&d9ZP5ILH+qk@$y8H}B|z=6&dqUkSrAZaACeqR7VJZ$z5Ia|W2%#n +}aW`PHkKT`zLYR(!+mgg4`E(<8+h5;|&N9a&h68-R6J8-WxN5Hi3X+3@+8aowYm37x|H4#2AyFSm|9& +tF$n&{1^2wDMWY%4@x(3(I$jVQ=W5`& +95B+k6(ul&f*aj*OpDo@+1^t!pxq-?%7!thUX_yfd4^{+h*vLUU1TUzq$gID*)+Pwu0)?zB#CcMKtmN +IJ07JC~tKkXGBkq +B!%`x!Uh~O#II`$CqEM^y*i#LoS9HX#lXFP@0T$DobqS%1M?uBE&FnGcrIh=QljC~3r@xW0v;-3F%U! +IZMN_mN>IeUM8%GQ8at`RFlyLKXIAIyxwD=DMbxmkq4zu_l{COr^HZR)25A^abWdeI{GA{$Kh6FW*SF +oChlI+RyNI@gDbI0ajk-*a#hox1?ufQ8(Hg)p9`pts=GfP)?xqc-H_B=M57Qmn1@#RG&bv;p+aN5kjt +r9WxlXJO`W1h_dILM0|Q(x=sPTtKP!?t!Z-$cLi1jn7N5nNn5;QJY+QLMhGkEk&Nep|af<0yd3kTkR@@d!F$Eb_B$fzB(yr|p&@B(UozA&{aS@7wRg(S*PkI|>cAh! +M~+_I`&iFnxRNi-hrHU>mJBGDo67R>HFjPmx0d;x%`-!B12a~Avs#m$JNkKa18{|=lwD2v&&)SBb$CD +dZrM*%|%rs8|Zpg#Z+5gB}r6-JFJ489CH*5G>d9Zd-s-$B+*MDZ>1rCUlv)BBu!#(w5Yh$%IAinU;w! +~k3fzGTSNUi@*9+SW}2B6*n>H6#__9w53Xf`##_0`pl*HHhP`^rEQ=PQi2TEYGYY?Q^tC1ss|oL;C)) +{8&pPLj2Ydfo(w?v;g8l0L6usImzsI>Jj63R;LiuAiOuS3Wid~!9xP3%I>hDcqO1cZs+~CX=-pVdsU{ +Vd0o7S?V^1oJx*_v^b>bVzcB2%+;>Yw;+@O(q4Gtyjp|8!+m`XxF4hh@{<%uOBTX$0TUKGov(3$B#SS +CeX`Ins;q~_2E4g;V=;rwLfcr@>qmZ=$d*SmH#O*z_t@OvO)gj(7`&bLL0mXM~8&Bi0?l8YqQI|IB2o +G)$1PwnDF`u_s!534A#|Th?orEg5dG`DkrcA?||2)6_Llo?1qerJZbFXmiP7j)ywtjR7A=ZMcbm7H|p +~s}JDw|9SK)DUY+c`F5SFn~v-#Zl{kflK#7@e;k|X=j{U)rzZr>Isx|KorDP71MN{q({ +xWSKRFOI&s{bST-9q#Ki_+JqJBJ(obYG_3k_Ffhuf?vro2l_CB_A|$4#7Q({6S3|9)})^?{MLYve-&V +;+}6ow6QzBA)rKx|F~PH7%#Nd*7q`v8Uz>rwlFcEnM0INS#y-^^k4p}WO(7x1CBeuiA|7&WuoeI_c?v +PNFQq?H+vt$%W^vpm1&4q`i7kq!YzAQhVGrBu`zhb2dLP{#eP)>5^p@dqbclJ74#1QcYRANm=mRKhLH +3jb_Dea)KhX1h#z>OBQST?-8q_vn2b5;OndI8R9W#4F;WbL_CB^NIz5Fcb((a30(k7Fp?%aavawJL`l +T(Mr?YKLi%4e*(CDFErCKaJ?&P1qpnlg1kywd)Amjlc4hzM!PR-0lVk4}8<=7&jxowNgtR>!B9Ch7XSEFN)wH?_aUy5R5o8Cx(I(*2vEZ4S2)Aasa!wH +gaoo7N}53d1fZ1b21`p648&r`|V0~9-hNM5ZM~f)=3C#R=_e~PAMMX#KyIau*}nrf2XxlfEP|o-MLH(Z09OL-MVtFCwAI#%zgmNC +T>7fz(ZiI0r=ffsSPaBMVY76@LMYho9P_e{~T0Hp*-M3jXKc?@N_m4xIdLJ_%DVW@YA-I8DnP`?F+2X +A>-IMCY!__SwjtdqSpCcLH)CN%@qf7qLH^|E;YBP(NsE7jV;QC6t(BH1q%vQ!J-c3Rt*k{RU*SzmBCi +&mGryqmEyp2;0M@oVf6;NB+=mNmF)x)MLZkU`5g91O{2pVD3M}zE=+Kc;FU6*@8cP;=bN=p{rD&ic`!ma9;nao7FewHCG`f7lm&OE!XT3Ud +HU~0dj>jM`g=UnO0Jp=Ek6{dr+muP?@EoGVH^LUIPB%1Mc7KNUn++pW4X~HN*9a3_`t*uieC2Xj*{$Y%9W(^K +wA*Ch@g0KXvo0qO%y^0&ZY`uZ4NhkdZ^a>L}>(Xfw>C=S%hQU_z_;(DH7vIu%U$S)FI%KCs +6l`V9S~6WrQ6K@jY6D>yLui5Z&3PpUbKL2KUn#D4b15-e+`JwOJVFiow8cG0%_!^vc9leo2{Kgo8<}} +LFrv!JZmmrq0|x96z>GsbPlNicnlPKyt7jF?m+x4yA#|5{)gZeN){WYt;Y%JZye5)lAwA&i48q@_d^4 +!E)CpwY|lk?4%m8LUd(~NX0dAd;3#$6cmfY7c!JX>N37a&BR4FKusRWo&aVb7N>_ZDlTSd1X*dtJ^RTyz5siewP*! +`_NmUh4M&w@OY(=Qz^x4q;({!NJhK)c>lg@M=43Fi^enZ?#whzW4`4A@;(v+GG`l5$iXRyhmcq>MwE~ +fu=TVjZq57y!j2LZjF691j)6{)2f!nSh}%fl*MP}^cnSq;859a|55@S2L;{!?syKGad?6=m{Mao*>&2Mwy{Q!REIPu~ +DtS&I4PEdSIu{Zm5s2`~u%|sc!JX>N37a&BR4FKusRWo&aVb7f(2V`yJjHW2>4ze05=w@Wuln-U5KSDJRCkt!?e0#iY{V6FBm)huXxI4E;yUv2lHvR +*w@A{6aH?X*@qUJ2*rYVT~x!m+|ucKUv)d{{LfDpm3HPMX|0$Y-~LOz=7=?OW+g7;97}wEA79MwD{6R +T;QxgyyBqrS@EzTt2iruZ~x*mt>=Qp4k#kx3Y!sX~1D06)%;~T47^d+4w`p-ZCe1k%d&$p-4$V3ItXw +0!%t~(IUqWGF-;Bbs7(nrkmAjm1*HUyOzRb#dT&YdA?dPJV}zo|9>)>sC=zOke-D?LR}_;vWDJp065E +(XPGs7b*SMA3zqq)j(3XUk2Lk#2A`(z>3y;XR;gCz)+bw*MBvD8pWHOkKSak$848=ngtru!aqWgkU&gFKm +AC!dqeSco1Y@8f=$7+2+*RyQ+wD7K!H0B_J;w;C3d)6*(HNsVNtN9Llcz-1@X15A-m_s9Wj&WLFciFc +RROd7G%GT%~Y4g2-w+c)GLz^=5&BsQEmDt3E2&JZM*0uxw6N_zOQ)!2^5)|1l=G4Gh2XN6E^-Ph%IcA +^DPBCY3uWJvQIFY(9Yus8d-&kBipxVT_R5klpYM_`Xc$?t_TIR1K3hMr_je=#{HBc7z??u615UA`*zLAY8z)2U3{mX(_M3i#URF=$SFgK)>Cvl71Fdf_d>y(8hdCyQ5_ +|(i?^a>Bn5ubZ+b&nHmTnai^{jKTp@bz$O|uxW|Z~B`w~}D-f%cMw89wt64V8-GWz3Q^p#9H}m~Z*cD +YgPCh?5V!6HAV<0l$Q&7-Ekha$9J_M%PUSRnHNNn(?W0=fnX@drkWUMR*ml!@%*R;Qt@KQDa@n-d*!oC=1WWz +#XTlreSkv^&KUy@x1s^tJrXCn>iQ%yc=HEMY;?;pmi=a*YTp)rO$qX9#Oy~4ueI#PrNq#dYbMYjbG3o +XQO;~qJ2}AREyy2V^0Y@V4+QMkCe;aL0uQhvHBj4|om@;LL{;NV}x6M9$h_+}VqW2Or4O{P(!(gkLB@ +N@7Q@W#+IxWpy4Z`SjU|@&;d5!rCoYwm^x;b<&ghqKwn=4#!+c5Np9(A9X6kx)O{=(egJBtj}&6t}%) +fTs|*-dyo#Cn#h!?!2w=SVycs;o=aTz%C}f$onD*`n5uh$`l74dc>yj8YN1c(EU=LPir$fD!^2Psf`9 +?urFx?4<^!)`y~jRS~bYLGYE#CW_X?Yt%OBl8@09_YO&PN*>udG}}n?2Bc3Brbf}kaiS@9UAn8CQs{K +ap@E7j75k3O;G9#M3=ezeC#rT56S}gFkJeA5i~w>vesd#vwsa$DVod*j#UL^IeyS~eoQ-+!=ZQ40=e` +tfR(}CdO9KQH000080Q-4XQ;LG9=Fb8E0CNWb04D$d0B~t=FJEbHbY*gGVQepLZ)9a`b1!pcY-M9~X> +V>{aB^j4b1rasbyZ7m+b|5i`&SUzVJ*;lz(r~t_-FSp}|)4%EOCLJ%TsTi7j`kcL*rz4R=qeArMLKA>$+2pd;9AklX8E2s +G9Nf?Z<@Y)bgGk$j@aaG;)VhfsbaJg2TD1vWVA8aXk;!&j?hEd$f+ElmO^{%=L{4D83zVD4PdfS^$g7XyEUn(z=Qd`t_ +g`xSip{P8kM#iHw^_w18oa2VG#nZp#8b2Rf#f6W)hPz7*=P<{!&DPt?3M+&CkfZL{~>^lYK0FN*(AO9KQH000080Q-4XQ&9y+WxoUf01^)X03`qb +0B~t=FJEbHbY*gGVQepLZ)9a`b1!sZa%W|9UvPPJXm4&VaCyB~OK;;g5WeeIOr1k*Kue(6_F}*Va@Ya +|if+*6W&~PVqHH!4DUehQb+P}wGn68Ul9J7-I>a_L&yU|cBCFb153Y4dX-x&bt))JL?2iAC&ZqFX_R? +ssQg~=;C6Z3EmNm-UIt-!xvv;c|H!773g43);BbO#W=*3NTk7b|k(XowtvVnEIcH=R`aXW1LX7GUViS^*f59+FxEWHpM)u;ptNok*&4p+3^F2mBsk +1;5dW1+Nc0qL9vcN$E8P2hffNWu}AUogF+Jnla} +e%Z0e*uw?uo*=yNX8}s+v%kPkDcq)X%OBx-5t=&4vqU@=DRumOgCN1Y9InBe$oaC7vbz1z#cg!EgR;? +i$d8k;MHF-H-}Q0)Utvtk=LY`v23bxl3|()2?SWGP)hkjTi86P?qOQZ%dnZ=(>?9dmLAmgWsmB!`*uO +BjMwmfGDED0h>r-nx6Wk>$y%DuHY{ULBQg16>Z}AG#xrgKa_Hj4S4ge7cQJFsC7cnhRBtD3R$BuCryT +?pq8teGuHKFg`)6GE3rXwZN0efhm4vyu1h>zYN!sx6ra^8nFa9 +|yk$@sZ9c-m(5bCV~5|FLqs@`XmC^u9rpsaspt8YC_q!$c_+Ehh0*5X?EaHBp2ZFc8mSO??SZn4O{11 +ZX*j5);)(!=wt+S1%FS0y_}k%YNcji +*Z4>arv$UrtqBwyBud+WLFKsZm8+kY|df?zd+I1%W)kR5699M|@PxtWi?Jp3PaH^n-$e*aa3Pn?`kVR +O7`I*!H%En84ph6=hT1h$p!kU0Hqo9Qtd#Dwqz{MoTd0H8qZ{2~VwLn_uck4_as5}v +o4wQ>d-YqOo3a;B>>pNsMP^CbodR#DS|tE^(_spm`HklC#X?!N1b|-&qRpoiFsfQt$LE=Si%v`p?rFq +lBJ-_F*c!JX>N37a&BR4FKusRWo&aVcW7m0Y%Xwl#aC;K+eQ@q?q4w|g~+W +fC#8X6y1S%w1A)>m+mL?P-H5StZBHX>#LU>cPMZJTb7!oVt!&y-s9`~x` +M75KC2%kYz3^qjxGNNV1Hq6;2DcCb5%7>8%x&G_cZ3J{*;DLwJx*tmTfxhGePARWgdAXrwlkHcl8CEs +fp?x33@)htr=_<|g8`BO@0DO~lX2x=~Q9RF$MVDsyd;N@nlnid{OnvbFIWx$5ew5^hRaB=nF`<&-WP& +DZ5l7ApUpBYcGb8SiK`$_k0V{ONoo@B`kL9Ud6IKleu|AEk!G8G=bNy{YgXdpZ9MwBN-SS3j`x9hvj` +`8@gNVm#$HK25&97>^sHIQD|YRu%dAZGQ7^ddKn$e_HLmL2WG;s(q;n>HJ&c>NdGw7k}O+IVhZ}a;e8 +(0nwzzN6FjE>mPsp?J}H=LuffIMGEeeOVij=v7GqO8TedSXU1ZBE`HG^%^OclOZ_}IQdtzq5W{okt@K +q>yA%pJ394eLO9L8g +dFy+3$i|Ctv8@W_;^-s|=#gPV2p%!xZu-oHkn{~ZyuL(MxVkw)aJo>X3}Yuux;3zHF`QOP>c`lb_}Hs +V%(M7mBK8yUVeGr(0ljiU3k&v*zz57nA6i`wrg8kKZSxhm6sqVOM|s-d@LliQoTu*%dj780>(}JACbY +5V=cyGQzT~B0F`JNXv8oN0Wxtl>;_L~FxhRz^BWn-=^;gNA0`y5%>!JJcI +Uxk{C^I1q3;R!yqB=1FwYLVtBI+;zn96zq0H6_Q=O-mw^}KzrZ((=6GSkwq^*%x2$CM;rsCzM{DoK`5 +`W(x8Tp;tf#vrw3);EH7>$o3M1{*I{8ZKyKkM8)$AXrd15>Pib$KPe`}Re+3?lgbW_+nU+F@WvSbgw+@g155R(xoxl%*AUS#=~R>Bz}q?0`J|(>c_lx(tBK9TpV7>XZZ^ +y=2H;_M-{h(dCGC7O`L2I_j>rG0R2JgG>nus%I)X=%Z6plr@IRq_X}lO8`oqV(anG#E8fQI$vFBa#Vf +X!cSxhw_1cXPiL3ZaZo(K$=rL1=p!l=Va0G^?O$41%dBd|&@nyIcsQen~fN4A4Cr@MVWzvQSd~tFG%b +iwv+o2^ot)kKbHDW7C8f-$G!mAX8G%IRCKI+nc+bhX{hkg~vnx?}_;1uekL?fe4);#uFAaDwrm`5?h< +Nw}refxg+H+aAMyG__NY@D910^T5<4y^xkXxG3(>td+EKm!loP7=W@f5f9l;2;dR4sD@F{_{c^ppm~a +`^+TD;w%0SjadbYEXCaCuWwQgY7ED@n}ED^@5dElSO)RLDy$DbFv;)&+7BOHxx5N=q_xGD|X3i}kpal$5 +vtP)h>@6aWAK2mt$eR#U4zE>cPj005pZ0012T003}la4%nJZggdGZeeUMZe?_LZ*prdVRdw9E^v9RT5 +XTpHWL2sU%^vwsNGZ46u3{u?E$&8X@mCKUYnvHf`uYWw5?lNR7GkXqv(IX8NLoFd3T$hfoyDv91iF8n +IW?*`;M!#81LB2Nga8w+PYG$=-Jo28~7+!t5>2|RohF}_KJ`Ds^)C{@2OMm7vcoZ|5eGh#rIN)e%d*v~Jq==1Y#O_ ++-4#PMO1|2U;>6TtK%(~j%l?wHFWOq=?Aunt-|q+9P1WV>?KE_JWhM>nP?Yz)Z^T&mg(}#Drvu+%XFO ++LzkU0I-{S+bPq0zkkeUCZd7Q%+If&jdyEt=FZJ2oAsss^?b&2dycD49nCuV%niNk?x9OiusPxyF!#; +KLH8@^sK_*C*PcVA%iFsbl!08N4-8uMi2Cvnd;PbDr;f+EZtIdrWuFM#h()a3nUiJALa7WZITpcYj7C +^{~ +%`p2O=zS-8&e$_FEWTy!p%){62f~1FCs_5?k@!;ohptjd2G0x~!+CM8#vaHSG2EsVcgN$vcJkK_p@LxYk0RYPd0y))77fsdu>v7lGf82bhGu2fs(t;*(6arC!W06u;>2_Pn?2o&0f +JVf8=T!jSnl-1Jh0f{?00PXu;CaW0|%B%R+(fjI$4&*j1fZjMf#nztB$3fC7HCZ?|3|qgfEQzS0l9qG +vz!BCz)mZ$M^_i};0~V|Dvdsj=NniW3WQA9Rc`zLPwDZ4IE|yXmmbzT!%yF^@_^iwaeao8Cl(aEkE&! +YJx4C@Y=-($jOm!ccT5qL?)zKO9&%GP(KbJbtw>KFHgyy@$+&1ji1=Z@e{W62Yh{|tX18?d$yFS*Dk$n%;qpkln|jIke6Xwl6QNM5$J3{HE!8X2y~& +h;{>v6`-XqOFfU2Sz?`e&#;s-9#4QXWu{k2`!jp!<{(C$mtO8@gkA#j@BXEML-{b-xt6<`9zxxT#*e` +%`bihJ8Ky{g=L0_ONj#(=5Rs=P7Ublo!bzikzwd+6@XU@)T2SIDUhuJ_zR`(p&I2G*8J}g$%Xa+JTRM +ZhTxUUc@q2+Le(={X_JizaZVGZ1rz1$;@@QjeLU_ysq3*xxU4WX**V7xqvscZBvGVlF+WR(OM`TjlKf +aFCiYdW-4qQrs307z=~CJ;;vz1S;pZR|@YBhXl!Y0!p(wZw@=j4dD^h~}CU`}xOj*{M?X5jBMGtt>#H +@Tv$=>s3`B;UR>b<^ulTq9`s9Uwb}kyhofEeKHZsb*S@%EMQgv60xVnsdO$Hf@!4lJ*)y9s%+aNNcbZI*<6qXT +JTk-@$OMjebZc%V1gtt#BqKxUty}5aB~k%9Y +(%yKY-OPf!+1ADMql$c35YhWgGT42LGk02gVgrRil#U7NV>nxVfH)uA>_7E!nh*XFT;Xw!&{2vg8~u^$_8I#LtA|;h+Ga&Sf_GhK)IIL#^lx5@&%3{ecwxn|O!UOl8?V!on?B?8Elp7n~undn4#?2HhgM7h8i@9`W#lBeuQB%+-&^kfwoI-ix^k7(Vl6;%F61?^D_x)B(_1IT5 +LSOU@@9lfMW75%(gAVi>7XnS*5#G~)HGB6eu0$ +XqCfd`H`GP<<1q448RsbtkjAKKsO#nY;fZFxwBdVB>0|uV@T6Z;YH&%}oYg#N>Va9UVu?)#0^i@8bUE +>f&V#ix>Q4r>Vt9d^6dwUd61w@eo<*N(7*+&avnz6|f4W;TYV2ol+>Ol{0Tum3~eId*n&rWTb3QmE=07*PZ{w`ww{F<@`!V_P3XFX2ebsHmYp7Pq+6N6(z?CKdBjixZD~l2K${(_F3d +H1I|@gU>b;vAZ%WbY)`P(1QZcPIZ3JJ2U$>34(8w?$8Jj7~~G)1*WN?Yx$^X7`bgc&y6}y$a-W?9njvJRxKuk!$5>I_Nl2)xS<{5-H-Pmu(zj#zMpo3&9ia59x@GiM5}(H +g||y(V+Dog4QYIm@VLgV^TCPgoSjCnEobb`|Oo=E~MFsq&KDGk46H&(ZKzCHpdt5*vGEY5R*% +k8a&@tVS31`6Oo@U899m~62nWSz^fr@ABDKXodcY2Ak_c;#pgiN9G=J99r>Y^3TiZ*vCi +BefU{Z&W_}6tH#6gb>E;=Prm8k+9;J(?G>HGS=6NMAz_4#|FonnT!M@CSK?y^{kyHY1jiWEZ+J_Kru6 +u6;*OJiXkLcI?>}Lc3$m(xqq2ISGi<&69W4d@kM>>tU{i_>&A@+ny^ohj_)^9jTU;ltFN!uVi|NMb=f +B=LJtitmJeE(z-{zZc_~{*1MMHc-u}o672ma +EVPpn$5krtE}wmO3nIwbyX*pgvp&1sAS{7jAwmWZ@i9^kTYpt0XPiKoyP{6&*gqHoKZ+sjnCPgQ3VZw)fHmL{*`9{ZS4k!^&-w6Y5#fmRaTfH=CEE)2H<>Vk>o04)w=`4yXX2wdCZPp9F@ +br&cw&*1@N3qN!7^!F-H;=J__gKhCO%h)Ht|CuW&_oMp+^q9^hxAR;txrPGvx<7SU&q-@_$R#h-N9G8 +$}haLlPYbAOJKSrz_mkw!?k`Gw``RIl5jtPNhfZcC&vXmnRT3+ScPpG}c`>7mjvHukaA2^;l%m?DVl% +xo}SQkceUhEw)go(x5())5+d6?3F#U>bR@_e9Hj_^xSkxd@2yrh`Np<7Qt#GpDY!rYm1)LLE5S8qVdD +AIv19M5*J;^u&8O=ve!+FU`C3NuHrCL(Bw&hvoTS}5~A7jQLKemVM@^_VCxzCzGrfR;!eu_)HxROU_J +4%G!${V+OQ2aLdSI^*czK*w%#KbDhxl^&&zs|nHtpez1RtlKt@8#dI(;zu;D_dCU*voyfsCHYOY^+NR +jVja!M~*B!xg9be*abBQ{dg$I`}>ta%ntBsU1BL%!b3rWGIx2v?V)8U{054s%%SMhA#M6#Hb15XT|`Hw)SRp_^Hn83ZQ!E?*uMxo8lM2iFu|Xod&xnCHh$5L&9`|Fh&| +3jBokvPfvQdq56fTxI}3Xggdzzt`@ArPmRC&()cB*6jYp16VbflQ|r_x$Zb0mHZ4<6R;Co_y?H6ic!JX>N37a&BR4FK%UYcW-iQFJob2Xk{*NdA(IlZ`3dlz2{eq!hr-*-? +*$)#D}Qh0*LljRgsfS8n=#ZY-gAK_lzBHlD1Uh0=eYFGjHb2dv@|X|9o}z9a`QF2x2r6M^v7Bp%u&WJ +kK)vsI3R>vfklS~=V{Cy1M+hS}tWbgU;(cXS@dQxfm)cuOOz{b=g +2T!BR+>D%)tqj2phAC;Rd)}63fmUY;JaCJzmBb&meo_0%jC7iv5Mr*mtfG&%EvI=gIMDuouuOMGh@(M +1vq*N;L?vY%fq??SPM2FoRU!%3!x+0c3iFf@~E4-PDk}-tPVMe!Yl`HlA>S24%`KBRJ@Vcu~XrA_x3n<60V~_*~K^f)uQq6?ebF~utpe8rLwG*bcajc< +6@3tF;}^JP~klUF`=R5F0nccq8&&daD)I}!{iWfAE*YtfxhRKlmJo_TbkJsMt+QNN_%K9O-c|U&=w9> +_&{#u79WBnHF-w(x-J~bzFGly;Jl5x1UXiQL=5e=Ftr(KhA8qvWVmfBh?05=AuL~z$P8$Uk}VyS>k{? +CR*>@*aML*PPcAat52=5}M_gN{``Y;nxQOS<)14f5+l<8)!C2j^3L2}Y+ra~EEDd_H8?;&Ep2pko_Wr +-qI&iA@_=I~L}}?zB+F!$DW@Dgu`4lxfImviG?0#OZjwZjK(^&2|I$f%=KKj};<>w +ey3Zz-P~c6>y2w22~Mo$Yr+4%dm<2hjAO0J)OP0D>h8r6DAexxtz!@k;EUo{!hrP=Wub7f}Vq{kzJWu +egOUC?4LuQ89~p&e#auRdjyw$8AZ=R#VS(V42k|yNSS|7{69>F#$j>P`@}B$4Nyx11QY-O00;p4c~(; +|#ZZvi1^@tn7XSbu0001RX>c!JX>N37a&BR4FK%UYcW-iQFJy0bZftL1WG--d-B@jJ+cpsXu3y2aC?I +XBkOKW=zy-E6U4j;A(6}40AP{JYwzVqW^t&q)1V=5;xgCO+XQu;vMhhx#y0J21rDTM#N*NU(dXXq}PSrmb0IcelLFi(A%ILgteFwP8xDd@U+gE2rZ4)A{V=d{!KvemVb8T%P@Ll9A6$wW3i2 +ExduV;DEfWdF~u5=2Uu3E&>j +a2u+rtDC|8^2MvbX7s`52grPBur)>IdY|IJWCMN3`Kjb2%YHWHws+L~*2ucHXz$0V6L9Og@=Kbp0qC> +pwEMUh5PRIvpq;8U^Ex-Gm}ct(Q1CLTH|dG*$V@(RqnoCAGiwN%iGhp#9fE#B +l$Kd!ymUo)HQ#EcoS#C|y0G>`SRV@-1QsRu!kmcUs6|PpQv>Q8=>&ivBweD>Ys#D6Kgc5H48_z+++kL +2q-w=Rcfo6c)Fd_crEzYdnDk$>5S>Y=EA5XM)Si +vh&PftTU?GzDi$YE``zrEM#aUoTIuek9u%j(hu_x;@VBEeU4 +K(kSa>syCu=G&hNy387$eP|y2S`h-F2`$%He3T7i;jE>tURQ?#J!lJHzf~$t!3EE@$Y3POf>Y4*a^hs +7O9FDzNX~3W3_i2;-WZmBe9g150rI&36-~0uktxnLpz+sz+C1fela&HsjIqk2>w+2Ef-J^-k-5I2NsbI`+}#ij(C=S)LKCrg-?l_j)&gmvuZCKihK&Nk4T#s;&_}-IUj(Ha^3pg6 +pD4`d-iKMHc+p4}kwTG9%-%i3(2PlY!E_aMvd9^Un8B9~MXOGYTv&q3Xe6V`wN>(4d+nIl@(B+de$xx0CsVn)KIyu&jPNprfH0gM@wy|9Pk`5k13*}1 +eo-R(er9ql`=qs=@4?@rCV*`YE|1HVvRuKs6SFtpetSxx%8I?}`S4nOqf`E8ahESKys$Mpg3P($)ikF +W;Z12jI1+#NUqNUeR^F3^WFLL&#pTlU8eF$ +2(i98S2n1T9Y&No_BdI3NV*mG>8B!7@%W2w&R+i@b<2OS#2!i+g`M|zhe`M7+q1d~-yN^K-%w|c#iy} +$bimd~DdCSYKxE23vgf^c`-PCoZjL3qB1)0<)$yK#a9(O_%Nu!G3em285Y$LTu4U>B$cfXQCqNVx3_aeI!_=Bs%TlnJW4z(<|E!9PNh}avMg5ql<6gQQM* +n6-%VmGysRmqEp-8FT~{VWGc{>`&5_D#g#fwWk{TGny$O_W)s;+m%qd<$CR#>hfP~9%3!D29j3(M_GTeZ(d>=MC0An#ha_!PZ3ibDj>-#m1x6Fqv4HnElG +Dx`JiXBSz2(d*$V|2UOlCP5;$MZ82qV$0T?rpvx&kCG5kvgzD5jwx+mw<(sO6d7QY`w&uW1FxD}>RCF +9Hw8>=>7vDj_(?F8FO$Sxz@?DOsWct-4ZJE>U%D#$yh +&5j|yK*!twx}ca4qTU63&bVgJxeY7+`H8&+qm|&nrqT8M{;{^lF +t;AIA&QGi->%LcK6_t!V9R+XvJs)##oo2`}KCgF1)W7$Mt>Kx?*vOo>VZCNSdslCXd>|4lU4zrkel7K +NJmZW$L5H=2-RDJ_w$jDE&IWX*=5>wtArEIxPcWd})d-(`usMhE6u8T&Q=!zM`x+vsBS1Eg5*CNA$;a +vv$@$lL*F8H$?6f%nWS=#`W#wP4>C*dndqJq*^E0k$&pIp-8(`8Chx@yGup(-sDnCl?syXBiTiY7%Vj +l}TrKKe8Zi3ac_NsuH-!Y(md6!~|61QLT_mS{-J5|azXbqwnykuc{&Rf@hLc2L^D;N-^m({>O(38hyK +P3L{Bj8HX1%KkGHf&dW4m$4;CQW!aGwPL@Xoedm|6WzLCf4bJi$KI#jItqmE?nqi8$}IrG3WGpa#mcbHwKwFt|BSK&0SQ_phOB()bFy$V1ocj?8Z6zmZWX^)k!3Z4?q{x!_?!? +fiVQ`V+Tv|}wXQ`;r$#qkyl8VfsRfX%_!w{$1chXl44hzx!D7hqfsDL-^&j4KAkhw2ULwz +mn&{iYUnrT|sc_a`qN`2nDI6SwH@0aKth!6|KoL?^X<rKqn4i=~~G7VLXXo +2n`Xs@%*5v;<`e0V{(!%^^*IjV%J%dDnS;r~zE1y_+KV=K`t=rvfZXQj{r +F9rPDT!U$F=QH}Nc%B#b~~Q)`3q%a%Z7vvO6kYi(y!i@`-dA6(ZE%3mFHR*s$tr~puXCIJ|lzRd +DyHw0$czp!QnhpX-Vt%uzXh$v#oq +VC{FNgs2z1<4s}aP}?Ai>0Q+n85Z&H;Lkrj0q0A0*(e1=wb!{I9#{3H*pf*;)2~Z*1%CEAEk~mp=(R( +~GTj!(6+vmR5olxY)dp36R~O?n-1f0fM}B+<&TLnCdi<53g|zm}-wt=g>=SlS-_cTOW8$WjJ=|HCDlM +RR`M;hl-sC8} +7?F@1YIl(9)sDB0zOWu44FPOBcHBVsX8~vSlnm$5L4{#7R>K1Z%&Fd5*ct5ngCLv@ZlngPC +8Z_ySl1=KU*MTrRR!sU!|8&kPYj6m{sB+6-d#X@3E}>Y+^kyRHs+(iUa0LWGicA|^ytpu@Z2Y?gH^h! +UlSdU@M(mFVd>}*G3iEm->p^R7)|4AkcOUupB>so~js$tzlLs +7D*7V~Zjw@EhdU@_$^H>QbeHF`W3Q3`ySxM6x#xbR-d1}0+Uxz{!Q#5vh7(*yNQJ4U^exQ|o7nHG(P1-3X0FzY)bj +EZ&T|1VzXx#cXJPZZ~B@SlBQAESve+D+`pnd%I(7}9^SP~lKwV%B!Zz3My~4wO@K+-HuDZc~qG``u^4 +|JEbgF6<66_%E)o{XMaUOwUPgJ;lvjgv2qQ{U1Wb#B)VeO?%7I(TP5hvWGMofKFqx<=0T*%`t1PT5m +1#GmissucPSX-7xq;txk-P6%v0eie_j9YZvfA%tGq-5I?XtL973J3b)*ITd`Bg7>Ws!Kh=za6GF0)K6 +!(Ciz>Bb)8l4zhOtFqV%>`4T%&(8DxT)a|AH5Zqa#OaH2F5W7Q-#^DYnmHF&JEBRP&BZklD^Eb$n|hb +w&&M23CI&Fb8%7T@Pm9t)x5U+Ri`O@UnPCzq8%Y;c7MWXiL1PzY>^zNkKy0|s!46|HL%Y>K##-7{bMb +FCH}Ag;VheW38UXK03Hr(OgLym`AEe$DIS6_fg09LsscPJPdk8Hru_)K7QV)`7JX~+d5`qA^Oo+_8!l +Oeo`W~Z)SIehF@*Ops)5Zy~u}ApTa6o%eZe9dXB?(XzdEiwJa^b>5a44u-#cujqR#7Tfah+9>%pX))< +Xf3nqf42jVW#qXxB4xbD96u|PxnOy>zYYV!vW7zlL{&sUdo!7kYLcZ`I2{$@qTlk^G>Ys5OloA47(8CDY?gp{sD>)K<7s8IIw8P6 +Ne|0_gX+lIx<}FUHv&C{M0mUwr)VI=cFB`P1dQ>oZnuxBfxyaFW}Jz`r8_wOSQP0Yyg`(78cb5X(Nki +SL0dQ}<$nPx(ya_Fy}Tl`#8@f?;Ygy_WJ!Y^rK^c5<>*RhaEhp8uoVU;q2XjG;{fdZ=-T;4AYno7)Hc +8}}GzgvHpy=P$ksPwBst@5dgWojpH!{-XZ~RFrPJcVKG!;0RIysnf8KkMUmHgM@Ywo^??)cX_jsS_A4U=s_Cc+b!#yZ@kV^@EA=hY7HP4mt?pqxz(W%Z(uYe#I*qe-T{TZNf1?tSdD#2X5B +QvAv9E;D&mF|pnx0%Jj;yc1jA{OfRez3>7zJ~BjEgPNxK>`4mOhV_wtD({0$B&n9Uq$?R`6_T6_jj4!LrVN9-qZ8 +l?iaZyKjcD{3AFenzQLO4joQt{PpZn|rJ%uU4D1ZA+>~(DG)4`~i^~Su>!)3&5)f?c)(o2m?=Rm+m)8 +-mBBcQnhx;h*b(E=l86|2u6UYCG%PF!mvjPqw{rw_9jYze(DAprDF_DXEO_FDU+Ch^aTf=CV0qS-;ir&S&HStg0cIjh17(W< +697g4dnxIFL|eiePIfu;?t+9G$LnCSQ^^I`F={8lR}je!`cnM-&pAg{sRm +#wYHMF=Fv{na1MjOg!B_znc%9|DkqMdmo+x!&j9Cck_{R&AKpVli@dxX8!w;1Xv$O#?FLFFnM3b3inR +)yK?Q*nRiH-h3JdFuyY+<0L+l)d2rWUx|#ZAhD+n}QRTsmUA|_?`{$Rn?b=Lxo0&7 +)&iw!#k(^+?)P|L~&_Hg=n3c!E*JZoil2x17_>ejyi-LB|v(1024fYWW@UiNpm4U%2m1=7rHfY`X)U+ +dB!lo>#rfIpKS++qhmT4#~3aqv65djI;}_4V86m)9SzFR$L2WjJTOtKcSTmLW_%kTIFgLVn^28Yt7O4 +rUD}^&naop8~i(1-z*pWMN%;P@GQkG$dyj!^e$Ez@-$1Ct%Xi%@E12j6<65;c3Mhy6-n$fe79L{!Of6 +l_5~k2s-mB+gr;F54nL;mHVz}F^s6Ft6fc$Ytx(|`@#0fP@CLZd?5}E0;DZ8c&;oL9-Ql&S63fz=Au$ +t322Mc@Z|wDVlrw79&BQ*=N-hJiISO?-N&G(e->W>EDf&0w>d3gDRMQQHF^I-qAESM>bK=HGxK@)@#*XK2YG5@%``UX(>TX3Ej+$LrT0qVu0 +9yyCB~&Tr0JCDX3{C+ek{#CSEoCVsFNeB!xH&~$f8*5mH;$za^F%-v`4iE1RDgU~Skw6p7iK3Y>xGZ* +v`ruBBGr~DKu5)4X(3%!^Ib54K-GfE$oRdg@+dOcwc4MVI?OF?WOA;Sb +J~fCEQedMi`h-%j%@<<`J|-wmfO;hx2m&7o{L3wU662$VK*Ltm#3&4D$zx_(`jWcW0Vbb%Z>#mxyqXEt1xJ0@+TitxvMCH3W +%D3-s=q?-32Kts5s2~zKJ+scS-2NabF;Z8(!5`b$esN +tG|Mjmc&5AH8?y9g@Sw-b1UaJz@+-N-nl(&1vPTsL$zJ`G0bUvOdYI=%q{aK(Kzhrvx}#ao%Ls}0sPG +|=jgLyO+Vx;p;Zk`rqjWrx#0_uQI87fsG>Loq1Mav98qbCayllEuj^Gy}e&XiOpYlE&u +VF$`-VpqKJO0`q(yQhvxiA6@`9n#8FNImNnPTQwY1ZP~V`l15;FKJFs`*qK&>m5a8p??6vbU`0n9ADu +7xy5E-ECuhpppV&rRwEVi>B!js)6Sz^+buF}%Jy~ubmIMnHd*DBvu!PJM-gShqv#MJzlzH>%q8_!_(D +>$5d}m5JoSh~_vUSB?RVD(+tO%6B|!jjjTmmSpY~O7c%P_5>|1QEdk!r%WBb+pV-MkxYj7!Z`gcYS*S +3$7sn$16yWFa_^@IaPt_IRmE?;!?49WX-IJ%j;|Ay#H-Fbtyr`?XkJLoaJixU$r#FdGzrJ&%8)Amtd; +vAKO?pm6{oP3}rh8D`M09PzC$xT5SEP*xv2m9!0ySTmc@jtIBu1nS> +1xKYgrhd%=ML*jaD_0>nmKhCl()5|yS3k$|kl7M9Tiw!u?`Wd>^}USVI}jIY^l)wStI5G3 +QWRRtmwTMDM&+b!p4E#?qdC0rVA8ph(h2Wt~Q$gnfUP!|?f-`zVGFHgU*9v=5KPm!(1X@?5Q%j`{0;SA)-VDo@j3^skMTb2?1~3q5Lw1q4;aG077swy3Oq)BELEiOiAm!Vv-l +cLEEh?UDXm2{GgH^OVKXaBwED@Lf*w`_~K=Y-fU0`^91G!V(0t^zb}qb*rtVnwJ;?xRLUwL6qgm(fk| +t7kZhwRTP{MjVFIc?E7M;=w6Xm!;^T+6o@8^tNAt8+5F2VCx5o`!DZJq{ +S!q4a||ad3$X*!5E^c-)N*~Eo#b=C$c?-&>myn={A0ftWZ1Q?&!H+N!Ep?0?bp|bpd$GK~^ZMXO+8IX|0Jt#x$TbN6+>r;AaEZq2|Fd +NY1%_@#s1i_^_m6D3^yrFJXGgd=h6DN^`bOS{nH3;fQ5Jm2`V~4gD*@@2tX1r)skZfL7|Mqe9fmI!;} +2?qA=SqdW+g7|^2AH8|z5*)X&kx%)%4D1#8JX5@QHBfRy0iR3U~AJFiNtpBGE+?TIbXm}Z`Qrj5^ArI +y~TxJKSo7sKv9ie=kGfz?*94QcTPDa7m2>{ni5zahtq(zKG<~=ufNQ^j5JM@^+$DEZYC9@;jb7}J(O^ +{LVNK~WNmEvG}E^_%8`7VCr+5b7Gy}$gOd^8aQQ-mbVY-}9pj)&Men)4RPF+Sk9JBKlB_X7`f5opglA +X7KEVse`R6so3%xjqmw4G7y!!2X5!#_V|6_S$(}e6hKHHb9iZCksw}jnL>6iYmjV^zX#$D-5j%;MB3`?oW5_Jj||XG38fnH9#n9n}FEu(M +IM)%DWG+O(bELuYU0g7sD~6JLwKXu3msv-R%AwmrPlp8!4Ub4PQ=+vj&9)EPPHUq9_xFf>?)QT%7d^+ +^28&NrOKG>OZUo3)LL$Nn=3gy|(eaFQ<&@9Yc2Yjl^w&&b*y%QbE4)4f;IZ98wNyH_$xjmOjNRv%a!( +~bV;Iod!rUEyXuzH&PSgVCn=%B4h)ulYc_dmL+fs4Jbz;ruQ~uPN5t$SaBCZdEQ#XEHTFmzimTj$M~L +hiB#`D4D>JD82Pk!=>h8f&V5GRdD#rl)4!l7GBxGU>UUy{C2>c+C4SOqszZ$ztFJheC$#4F2LABg6YL +yzQaM)e1{O*Rg-SgQo5$?=IJ&jKf4nny<*QgVg5Gm`mWFlY_#V9kGy|MO1PeM2kOj^GLJaNg_xmEHnb +pEtLkgh($BB95JueMAByQ^D8sq9qG6Ls74e$Vd4Al-jpo!0Z>SX>q(7Awx+7s}dI5s3vHA1a?eX(Y-m +Akklpiw7O_{#)ZiQIxxfpJOx9k1bob6bH+T!kH3?TAhzu477KHtKq}Y-|UtDz#4y8+Rb}Epq=p{^N-F)M7a+;gcW*+5P*V2m)Dz0tV4-^*V^LjFVuFy_1Uo=nWo8}a&*vH739H$!@}+ +*xW(QK**(e89D!w09j1GOS;F44m6zt-Asr4D<7S4|lm2;>8GTNd<;@BCZIS8ByH|hsAP8@+z3ai$k;W +wY*KmM8IE)<)g?^QW&V3RS3Lb5JRp{QE9RdS^?R&iRx)`DjWzq@m&A%}sGZR|p&(8b8v3h>Rg}L3Xwq +}FX*VJ~$;kEik#}mI|q?gJUMLT`$YWmYWf4l1>{aFF#Oq@xdt&6IXxu76pPN&T~tZh$iGBR~p`sES>s +H>xGc1UlEI!j%BnBv>cDt~-(7^li6wsr--QfQHrt%)GHw)>ln{oEJj6NyT3!fHZQrWwO9rt>7sO~+-j +;Zzzg+CY{bq;FUdn_#7Tfzjq3&Fg12<=Dwk*-*yL?=nbm(>3Xg2)Rg=_!sRiHg4jt#-^C4lTO)XkAM? +@i~;9;(~!u>Wb<|*Yx)qYj1wUbDz*t<9HIxUlu5DOBIptOqGmV2%q0CL;}q@#HNHJ6JfI1bd*@EiWB` +d#a3mwVO<9MoA>Th@9T(P~b>IC24W5O)D8YB=zWiV|=uR-ff8*fVq`dWO%_~nfyU-N6{W@;9N_wEd=} +4UO>9nl))uUM0)?ZgxCNCl$RMrgOPLs5q@8S>pv*TXAQhG;XY1C&@QU0`FA+%?AB~*84b6h^DJ)~bw{ +ZCL!0|XQR000O8`*~JV(~nj$y9EFM+YbN$9smFUaA|NaUukZ1WpZv|Y%gwQba!uZYcF+lX>4;YaCxOy ++iu%N5PjEI43r1kfFvk(d=ugVsqNNA0k?=96lf3#OL8b}MRM8Qr4=RczjtPrcgb;+>cN(|oU>={$FWu +^*iA081;{j4+QO9#?FeoyYGIWg3}SvIm-%G=h*_lcMB_gN8fzx0iZC&i-R19h57&1O^UIqLcfZZ=Z~w +X;!Fx2h$_%zqWJb`LNGA9>#N0|cuORNwu9aS0sw~5hPp-9Q3a{W{i4dzKQEO%zsx-yS8W33oHxCbgz! +F7-+Q1q$g3@v!>4szjB8o7AU_%gBiXKI9Z;Lp#ATwA<>yYTz;bC}ua`@)(T%5cPg45I2r-##{b9{3)J +v%*$gTtfqC^`$LN0Y%TLi!V-FbMBL=0Cp9LKP9K8OVr8NxLC7#3H~@@M~4LAi`J_34O7OK!md{y~#Bi +Lqv5MFEb&JrGY@BSQ#cO;8AFa1g>IOi;W?O2y@B^L#PavY7Lg6WKch%1~Lv+7RyDUF(TS9hI^G(#}p` +;B#Cl8LGyUag`eOlzoI-@`+Q-iCvNL9zi0vOTekjRaxy6rj(QH0?iX?GPt>ZcXj>#e&)vGM`QH}=*K6 +xfUm>eAQ;YISY=}PG#Cu1@j(k|a85ku#tK`QeQxzxJs=NY{1eyd1@AP$#CeNlS| +Ubj3BZQ9Ry8dVHDL-eUtGyZ4g +N~@pS-0}bsPK1EwqP$Od98(V?qhI&RZ?01bu^|ndYw9&LI0Hf$xNx5ZP>b7tD@q*mk0`1Gs7o_LTz;8* +>N{Q|$PIy6;cHZvU_Vp?^VIxCCVO1)~ara-^x_>bVR_uyZ8k1CQX={QQLdr_*+A-fXv6|s_&~1l}MEa +-DO+mj5y+n9tNz4R=?aKoiz@)t*p}jC2Cz6t(g1>3`G$g25DK`(gz}fb!Eu}#{lsR+z%@jW9SkTDexV +hsl7JuBNdDfeM0Z>Z=1QY-O00;p4c~(;`uX|s*0ssL21^@sb0001RX>c!JX>N37a&BR4FK%UYcW-iQF +L-Tia&TiVaCv=|-*3|}5Xay1S6G%NrBY_zE0vdNV+fckkp~b$o|{}-gJTEV*;*m~ch1i5rqG8iIp2MK +{(P@4rSw!OTNg_1SZ;-OwXvSas#Z{e_QFe}6G~~4U@R;tb2vzS=wBPFLTN3mgFeYd=R)saqWs`gI@@k^aMgB%#%-;6ktGm8p07Cld|@?tks_pyl%AuI+5JG=tQSqp~GC +z$&%2e0^4#MqMaV!nevRN&K}&j_yTrk+y%mHWEj6--{@@gXhs-g-$%4KU=Y6gPHG%;T|gR|%t9L@p&n +^EMU{~@v+F#Io=yLb^@#h5A&qV=iRxprx973Fhz3LnHtheK;tk+&YHuSwMCsw=-{6GPKeG}GIOp0y^l +0K4tIgD%Nq^ZQi1Q^jQv;SMU1yu_|1tq7f~YpRZD78*nzws#)ues@^R#%B&UHLl_jGY^-&oydM!LM08 +Z?;|ucK~z*Z$*z#pwtMb33|;!8q$BXY1|V#tJLFEQDIprjL2PB@j2bapd(V6%f1tefX`oade4sx)*B^ +@xqj_%v?Bm1$6QkP)h>@6aWAK2mt$eR#N}~0006200000001Na003}la4%nJZggdGZeeUMZ*XODVRUJ +4ZgVeRUukY>bYEXCaCrj&P)h>@6aWAK2mt$eR#WNCue~A$008w9001EX003}la4%nJZggdGZeeUMZ*X +ODVRUJ4ZgVeVXk}w-E^v9BS8Z?GHW2=@;hDBsR&rdwBQU3slgA +WIIpo~nu5crQ+8y!s8~&hMi;DmIc9lx3Js=MNM3 +U|1fsGOElaE{}r08}e+v0p=?XBqQ2DCmWaOEa5EzTz5y9LwS)SlZ%hJPp(oJGkKE6-n;0s?u+f&GlkR +8O|7i@en2TM(MGVhn(xq?C+mR@j6*Ox^@^^85Y2w11Jn_)4y1r&rlf(}n6eXRS*HbT +P8xEoJ}4cS2GIZfJ1$BA6{p2(yrYd`W)U(8zTe2LbZyQ+(i+QP5YOivQf0bKl;A3D1eA(Gbj@XJtYk! +;dB089mgo3`xdB#DF!$wUtS#<{mY3=Loc@?{Ae$Nm22HpNrXtC}89TJG2k}`p8byzeqM@=$75l4Xy(a +1Bhu@?WG9%Ct24+652~~u}c<;!)=w53e163yiU1R8g78MqK0{%Qmab_Lyl`4`Q3rqe)Wd~eLSH=k3Lz +?`I3O&Z=71V=QYLywkW`xbIKZX6P97YdIrU%)Dp2_?aubu03y +B)A(Z#j-3_#`@(m_!ItXd*wZ5ncnotx1Ap=8BZSG6+ +iE3!&IZ-I32Q{}Alou5!aYOWj=FIIn4M{uc`!a_s2@_212UaPM}6=2rocy{2DFm%y(fvfN2MCqw^D{o +s1fza|rx{B1+qLq$ym-9&ZN1NEBLqrJ7|>}?;LV=tj@c55mb#|!Lf@$(>@vD<#o&`ptLu9^k!c}w7cx +)Y#$qU-OB^)Rx6P$X=|j3G8s&bLq>fAlt!pSDo-<3c>+2)u&1r_$x6Vz*eqwsVKt&zynL!TQ=ItTw1&FSC$iy=mLKiXz2<1 +77_CibYA5cpJ1QY-O00;p4c~(=zz6u&A3IG5qCIA2;0001RX>c!JX>N37a&BR4FK=*Va$$67Z*FrhW^ +!d^dSxzfdCeMaZ`-)}yMF~wK@kbFg}dRf4+eY~mTQ3myL&@TrPHk?}<7zuuAOe6|WU7YbKWD*D_a2@>VfH +w-vLW6o)tON(pb?(>*IbwGF=ey}_eswIm;zS{TGl*`(P6s|zmDhUQ-=o}RX@0u?EH%9*C9JLzws0ysZ@ +;~M|0%nEJ+?#ZAuUP)R+6=%%I;a!u%1Nk4V78LnxB9EF|&(;?U-P7&K3(aDkjLrSyu{Dd8gOnOlvgDl +Eq??S5!)py|xU#t#>@`?I&4lhJk?=4nSe93CK(@=AboLkZWyqH?VvQ_zJcoJHgmj79VeQ#(2~1xCH{= +^V$lw;$U$ZudBnFY&oyscL +(OXrIE#oD(PZPY*^IxoImk~e~XW%YG0AjI_ive3HN&o1T~|eh8(5ZJrFj=|B?>A+#QLVKnOrQX(#^<+L&9d%DQDe3S +X`_+M!+0()NwggjFL>IM27l4#@>k_l$5GlGHr~|KjzfLb(&wikcO0km5j`i%uSU9vXSi+o~WaGO}fa? +Mnq_2H$fC!VE$tl7MGPAk7{K)`+6qx0Ncv**t6>t&(8qkV_&td1Rz!fEDQZ!dOF;fEY~pjyxja_f*2s +aFRXTr;Z!m0D)l-K?wY#cVNdzTB$B2k+@qgb$czY%!+7@X~bE*WGYU)Q-(B^`Mn{YP@f~qwnq~v&O>u +oKA=&t&Rbr4GD-+Xa!q%f=~$E((YWfQ+laTG8+wt_(d8=^w +Qxd>%^x;0>$eU{69oKW-)5;m*K3Vo^^(SzC@rU*J=7rO~7q5E@TC!^a-y;NUM6N+RuXbP=7iuY;e2#b +^F4KG8}<%QK)>p2W}EusaX!uB?j{@bpEV1z(K~%KX8JG(7rCSs#VDS(*pHDJ_Z^kxie5 +&!J?HAP{a6tjlpzen0fQXvLyr%q3BAHjPFzBAY@v&%Y<=n?J8_Plg%>< +pn(_n$2(NV^b}$OXH*+kDV{I>V+83rDO$|9<@rKhg(Y7AK?x@KCPV3M`oh{vIpO!onTPvf=n44vgt!S +Rcb`BYoJ8%`$&M7(_&9qB~RRI<6%K-O`q_cI^Z%=+62Q-R5MdkF^}D +#?vJkKGF54cjcz{mEajm&C|RAb=b_fh>=$Ug%$|&jG6+UZ}2qtd|xDVPay5nTjtAv)5#E@DOIP~^3=t +kv-pn8YpN0uM;!Lk6JB(ioGz{KDOg3$LwHtjJyQ%`6ZsD?bwaniRbex2TTX%bL(d~(n(r#X8W52`KYX0!oD#M*@c8WW>2V4H>(GR`Y^!_bd`DSM33 +YwC@`qBqlwG2eOBwyHJQ_=mlpyX*yp0qusa5fWh;%NX!A|8fxJelZmV8G_MKY3nbMx+@~zNZQ&xOx_A +N9cM=wmuqZ>(L^7UAtLUDK+*wXL^U5z%SkGJ@F@VIL0Eo=vhMw`lwHQ*=(NutuN7H9{LE}GNK2RwyMr +_X)?n@FlRP2Mv*!Bitn3NxhbHg!YGZPmoK|J!X +|?dK4e?S#1K4zK=_8&0&WG35^oaXj*M=2>hFW}jRW=G#6WaSMGt^*&aC@{VZ&Czw(THjUB2h!^VLUCF +)*YR-A#x6T0erS9Mlihxws6Yj3p&pbnNu2$>5C#KIGtV}P$1AVzFm*h2S~)_GkZ +!~QN3Ia0H$Q!-}$bGL1DC(i6Hx8#w~zqvB&1$`4Zpt5km4-)KGL`hcd +dLs1L3(K~pPxW9Wylg(^VBP)B!@q0RG-5#&CSp84wMj$&Xd`%W#*`%-uIODRpWsDmu-tjwrek4nnq@# +=vYC%YuYc8o-7|I1i%yn($(C2rB&CTGGCI;ov_6vNu%7eF`tj@Kz@{<6kJq)maE@DRZ}&~u*7iTyaD? +?M!=A5ybKLJ;Ai#&$AIM*R`jPa%gOQ{WOv2GiQx~hFjYf%Q{c)%R{2(Q| +T}$fpx?IQA?w_?gu)(>vs*q!t+=#CU96Z(6FcK>2XHyn@nKwM|K07cF_t_FnoTAh7?EttZj>ocgk_#8 +wvRnLAS=}n%v?ygkJm`P)h>@6aWAK2mt$eR#W^sWd^bt0016c001KZ003}la4%nJZggdGZeeUMZ*XOD +VRUJ4ZgVeia%FH~a%C=XdEGp1kKDGI-}hIrvuCUZosrvqxB^>DgC>qI2JFP}OLKr>$ebC@uDTjY5jDG +>1o`jxypR-0QM2O&y#sF1#=8>vkbK_XsM&1xx>K#}lonEKOWk+n`p}n6Ep|;O%3Albsw6(Rn9XJv7nk +DQt%7$|)jX8-jo38%y{dbmZ<|B46>B9rwQug#R!Df*?3HMn65f}!=yBqqKXfVwF#BVBycW3Lre8KKt{ +|(`b6IJ1aZ&Eurt3x3+}yw-_RoE}SN*Y7+CFI9Z~7KCU0v+DW-nj}?##S-2Jjc+MXx%!uGB)jgflM04 +`#s&p3;_WUfipC+jMy=H+K@3%@L%wa5l1T>T)Bi@@G}laJP +hZ2wmSbP*>ZYBYG4eS^8!831M3Xb}`QEjlT>_WiLGgy1mH{J1lSA8e-?fY6ET70jz3mSkAUzK_<`_1j +}AWiIJ3H+q{C;BS!>v-49s48xks4exqVjF?P*;uI4toNmKQ +j+iw-Cecr@&P5=VKA9%(VXQ-MiOsWPPLF0M9Aik7$j|Rv=)WT^zb<0`+z&t+YmMVXQPrC(XR8DNZqrVmcWI}_M;6JA) +8y#k6BRkf80Z*r=>`T3|nWY;ljCF9BE;{gTI~lPft7 +4C}G|i_(6f#OwGFAI9$Q67Z->Dpx4T(^ZZ8jFX>rUkR~mP`NhS>R_#OquZorp(l$_;%)mhZ>jb+j>`T +iW*9o@ZL98UML-oL~)~Jb!Qa7x}uEn}(kp0E-?<3`KO*3ZBdOl`6b2OefMXojOv8TfUPR_Os8T>vc5D +#U4>mN3!f9XAMYqU;oP#P{|6=23VS;PpK8?1uGt|NFzCObVOlcl8L5nzA +1+c|)V0YdlaVpTL?297Ps@g3CiYFas0V)Lq0Yn@puQ#ET4t7Ea3H33LbqyD?nhArb0WVjhPQ>Gu;WCaZh(wIZYSp!!0RAU{xo9KMF44GkOzEg)|r4fEJ^m>EHW|Jj +g9!johM|cOHrx*N)OoV8^CS9ZxOBIbr&&MJI|cYl9%LU?n{Valz@-7E9QD-}rCi9CSio}5 +6J!+lZ$4XuCZX>#HIJSFeS-&xis4BhFa>YDK({pG-;JE~vI9esk`#VZfWKi>Qlm-kbMqwQ0ds%w8oV= +fB)!r0Q5M1rrUBuiS?0-Tk~8~EyKHNYfrIrmV#uSAuwB_%mC!eB1gTQ@5L}{>%p +^EkO${rT{XCC`y;Znby*Y4@2wDhT2YvnY=?#eRVGaJq{%Lz`bDp0;q#r~moazy2v?IL4j$BVcTn_ +swT8hne*^r*Y_gprLPJWA5Zl2qYEZWjzt%f+=rDb?IdmM-vgTkAD3*YYSQZ%$>0BhlE#eKd396KL +uUUESe~3uA|hh^0TafinX$~cM)@LqlEi^6=`;hEFx26 +1=Jpl;Gd$MEJsM_B?$hv?Bz||ODbuq$X)$@y+;b`Manhwc$7y`bVT}DnFk=5@%pM`%rXPWc$!!2u)&$ +dqZNJSuB%hF0xR+JA{eSHph900li()CFFAW~>xm=p~c4;##8Z072Q=jtF3d(2ZliPrR5JVCqdkt1zBaP7>%lc^M<5<)PZm$Fo7QO~PdH?3+5 +@mCX8v?z+491Vle4zE;!1WWHHc|bOg^>>eF+O+)pvt`ka!az<={?Kg^>jn*?;_hpVf$ok7liKryWyUD +i~IlR1o=JfSa3?V2Gu!4^mcu+ojb<^IkVt(D?7P&i~qwU_C&Kr_jiE=LjUZ6EN;MNFlc|!z3@`v_yeT +&bLEbP?7KQo^gG97hNpoEXabgCI^}6{-tK}F$f3rSG1n(3xW}z|*&!`J+V7P3=QnS0;~Kd4w%iPH8#} +j62e^=333`q;C89L@oEToBV}NKf7&Z)B0|TpV+0z~{#|KQJEl-k+mm2du17oIgKtuLt?wyqQlGLAB>< +4tTn?t{Bc1yHbOUg|Vf)HO-Q)5cei<&lcK+h2}fI8Jy(m3sF1qZ{h3Qj?B04CBtnY=g&DOn%d#n@RUlFJQvM=fX^3huzmCLhCq +847J7_;)`%`+@xr2qBhR)q+0*A>Vd2LME$40ufWuKY!*W6+Jhr)MQ~SEknpEZk@#A6V0i8+GA1 +@B>Y|5Yk(mqhbD1s3RrfTb0cT+71^fTElHmcH@j}ezpfWN1P~hZlA&@L_yovCsVB`qmOB1~rX@wnGA^ +1-o5`IC*&7&lY#|Tt*utDb7>3PI|q_Azu;6#RIh~Y4OLyn;jj6}UPWy~r_1`>aedf7A`Mpv{Xfg(TBK +BaLWhdT(#xAuVOe3I*gJU2LnRuj7|MDg*znzGJ9#&*JmF~Z>UA#v<15_O#gKs{+r2;YlcBK^5wm1zBD +HfUcNmx0n15MVXg>^UI@(_7;V>JvR%gr}QNxjaGkX^@tb50n5%^2}W88|)C`sVobT +!_7`&TMlC&&i_p +db_}udo-k}$2cALc1iAvpY`ZEfFyiv+aTzh5f;bq%3HysvG)-qoIL=n-fk4qL-&4jxHyIf!{x6oy;;+ +I3^K7LcyWH1XlyZ7grouvB0j$;0P-1n1B^Xa172 +{9sj$KaY;A%@vpXJvi3jrGXKVI|v7bE4k<4ZUghP3Pi}?`3o(qi)Tc{I`vBj|w?0r24O1Z;LsaJ!ze25Ey>C;{1Ppjmk`ncO +qE)WXCk=r3s#1)xV$ktL5eAILJS5d7^g@(TR(@@Fi3gcb(eF0e0q*;1z)go5CJUei+fgnVK08C&5#kO +O2w@LzuQ7qbRU%x)FR&kTzgb#G21$(t})jYP*zxU6-H{0@eK!NR)P40E_MFRzXbF{beY;|{WKTv?xJ` +ABFzGFQ!gxm8@k``pvU(IxhF0VG14*(MX0;lm$J66Ag~LBfi%i!Yk4ynz6^qWu-rf@2z`HWDNvbRhPi +aDZ{)xVWv2qO24;Il(A&i@Lp)J}kKS9Y2}djti0Io)0ss;d^U-(?B@7>Cao!^j2XCgW61djARDr!k;% +6e^@O_OVW1Nv(EajMyKbamK)ANhSMqc~SrIkgYZM=iodm<|VGA?XDGtcuTK3BCqfDWXcpw%??H*% +gP8=Wu$!#qR9y23aYQ+@#O_P4a2$@G)iXm&=HlX4u$186y_czUxbHwtzNYZ@qBE+gb8qw*<*I_z@G{RVo$ERZ5&Nd*Zu(832H +W_SZCB|Z(I+X9LVA}3M9&G`7h}t!_XKCYCv}G&0L+ud=S28>acDWdKk&R{7xq@MQA`gATt40MO{E7H= +75zO*Z18b7NJbx{IrM^KR1k9PDLK>+n7ITtxl^hYHw}780&AXucX$`u#ve6M}ad;a{zf4}4`L$h#+I9*4%;ABH~BJM>V+DJTii)IbZU>g#LWc1Z9zh2p94LM7|=+ +x3;XUJEXE{g1zU+1Qe1^$O=Z8&HGh=uQRFagQ9=>_QuJIsmm0a^kK`vVXjw8$=N&*b}E8CcylqJ`whQ +;=R)N^0xY<0J&s!-*&%klUhRPvO83!Tg +doUnh-aXpMt3ad9eZmbO1i*Ry5f=O$f%Da)K>8=i5o|ASfOYLMLdM&8I+2RW1f-C+@ps0d4FJ7pt?`f +=EqaF9jA|b3k=LYF~nb@{qDZV6j>bz`#lwrH0BA+!*XMDSOj%z*H(ZNua%MKSN~!HX7nF@-{ieYU_;A +)v93*RYRUWeTocEyC-VNpb;Vu9J(6{9tQA!3%f-%^jndSm7^C;D5kujS)HRR}dHlpRwoAgP&WeMUvOJ7 +q6ceN^5nwzVTGL+1CFe1UkbNM6R6MIB^(A~KCsKp`kt;J4ZPRzCDA2dbNE`c$Xqm9e_VI3sC{O~b|Fr +MR*!ri8#B`IgZ4*UYyq-`{r);QXBYBfx{B-Lu{p+BmQO_;V->%&bpd+By$du}OFBTd1=CA7R|k=f~_y +4gpNEdb)2D1D7~HTEH|o~?1y!4tcI&A9)lDGT`_v1DYy=%;tJstUfF12Ken*HVe#H{B*Cw_ZmY7-W|t7P|2eoGF)A?G3d;C +`Tt?dvbSo>!d5?=t)7S4#aqbg65Z+7xH3VRYQL!&zM$11!SJRb?&QgytWruwdeilYgX$Ld53L3v)qP} ++bYCnv<(2oItanb_lKpJhbiUGR9CiAiHD)c6)y#@Rkum+TmAjQW$T2>WBsSF2;FC!?tp(epO9})+6wO +K3Ix3g(l?D}eeok0G4iwHrFaVQZXpcs|hiz|zqtA)5C?zrMq|CI?#uIREfJn_Qs-*RJiV8Pgt2>S@`lbN4)MG!B%I5lhg7Y}FZGr4KtBHQnG$)4{jUh{fI|yYny`>L!@JCMH3{)A +FsZ!Oeara1Kjr>j>!Q6)`&vH;o+ffyQkVKsp+-OnE5fkC^r_|50p>WM?Wp4}276!P59V?)pjH*qci%> +O6fZ**Cbe<@{ +OKNMW7AlMO#dwoZ1G#se0jPJ5@vhDHL#9woQR!ZGca%QUUfpv9DXwoi4UC@MN25B%x$|++Y`iT>{ta7 +_Jt|pZYjQK#_p)x$|M2L@WN_`O!7e1*X!BgxD${`U?}Y$WI&=x`^2Qd(# +MwJdb_s`|@YWStbxx#v+(uY6)$4V;(dcNMW%=8;Hj +z{rn`7|Fs8mMRaDx#HX6`dd&u>@w*gDkDo*aD0Sj?(CEy!JvJ4hylcNt;rYS4TY&|IvNMv|;VqZYHO@ciS=dq&5EU(Lsz@F3wqmaUv3ThxZoP=Sg%{x+0;t|8qbj-BcK8VhLmD?f*mM`J5TPpTyJ +etItvv;os$ap5t_$>oP`|o9eqrQ`ycvUtOg#g1@0}Uw^3CVGUl*QQI+*bBZa_5NvzQd@pZ4!U{a +`Isd5pmdP3ojU`B$;X|eQI!sycgpEu(Ja0Y(##j*4OX5UbrozcbJg?^y&%da48{22f+j+mcI)O86C*T +i5v>azE5Uc#?oJs0-M@$lHnoa)%}&DzMmINK5{%v8D?e@T>%1nuZG*PbXt={@`w@Cm49$R2)#R9|pgg?(hb55gga)LBBhxfC3d~>0JIp2IKbNfyIlR88hr#9 +H51DM^Uay~W)1jS>j-ASmpP{wCsCe^z)4OkK*bHp?OCgEw5&pOcUssmH(CcyC!xH21vW|bgl;|WsDup +3m_%*YKAQDfOU6WmRgB)5y*jrxly`_W+nW#EFa(`*!Mxyr#ge-xG#dwDyI^#=ML6hzybAxu#w|E60dD +UqY-C8L*;a~aDrCGB +21Y2BKHAMnr3k|G+I#y?=4XqoIGPdsJq`_rujE=@$Qn@RP4jJDo@g^lrwUtyy|KBaDH2kh +?3y#{oduLxH#Kuf62gW=@n%##kiuG|p?CSUbao3;sF%0Zh!cL|UEN}n5AF&Wo;eT7QV~$_fq3@ZQIrc +j@xI(<&?4FKfhamg--Hh#wO9KQH000080Q-4XQvd(}00IC20000004e|g0B~t=FJEbHbY*gG +VQepNaAk5~bZKvHb1!0bX>4RKUtei%X>?y-E^v7R08mQ<1QY-O00;p4c~(c!JX>N37a&BR4FK=*Va$$67Z*FrhVs&Y3WG`)HbYWy+bYU)Vd4*F=kJ}&+z4I$Z?xD7nMe3od6e& +IIcGX^5Mb+LdY$ow+Fd)E5^Y1&@aXvQv;DQ*KH#6@&ilX?ANokc7Y|&y+iJS%Fw$#GL1&D44ErO<)0y +RUvjZzdvAq4f_g#<1Nu?emRPhQr0wAuyf(SQ8#Ngjgo9z%rF+w~a!=G^W{8H3?ElWf9Zm66RrM%QTfb +Jk-HJlj15XM42iPf6UFi82n253a>{t{4W(Q`HAbT^&7*ho0}%7XJ>Du=lm5FoV4C`3nVXlM6>7gvQOx +7BbqzUwQ6(dDrm*8rANYn&lk@6+Ca^fh??_*O0juBfw8 +gL$DE2hvydc1xn9T$hq9O&-ZoeeV%)DJ94=rt5-$uG_&+DKQ0!qHLl?)j&-jrGpbiFVZchN=U +C#H$BYSz=gaqme)J@;h2Whse9vOWejF&BPiH#EEAj^dzJ13dKE4T)qGt~g$^B}S+Kj|z~*-LeS%Kyxt +P1kZ`td_BadWy7b7)fC>^JkQb!Rw?uhd-W(54jzeJt^ChPI&|L|a0tj8uNflnfp{>UzVW$tBiy{U@oj +5%>NdFjgS^;Dvqw(7!RUit5m-MEtwbN2t(DX#@QX&Od%@s}Uvldq2K&9lW#u}b^~P)h>@6aWAK2mt$e +R#Uy^YJwR8005Z;001)p003}la4%nJZggdGZeeUMZ*XODVRUJ4ZgVeUb!lv5FKuOXVPs)+VP9orX>?& +?Y-KKRd3{vDj?*v@z2_@N;XopF4IEgcO635o-~y`9-XkZTHnZ#4mhH6k@0lcZnr>lpNo>!&dGp>ld7l +5oD3y#7_Gr+{NY;S1dum{3Jp|kP20>AXp6Y%$4I<0)Jj`*%XZ#&;K+&UfJRv_9J-GmK8d53&Y +=%*j@^#iKdgQJDz!$x%p?=h8>vOzlU5a)L(2LxY&@6)d22c}@n1>IOa~GA+Iibxm@E3;a97olVp|1A< +D%npxyS#*MC@Fp$S06TUVkHxO|<@$WtqZVQVT0o6lJZEVJ9Jr4EUM5Sl{qpK`onS7HWMfNC|hJfwf+b +AguHEa~(+V&<8SmUN)^X6uJNkL&N5v0y40D*uwq&dy$O*zcKdS1c)upjMW87rKUtGH@?$(6+1V`u(?* +CcqXGZd1n=ic9(+l73{UGxs6lRNy7rG&7<$J%&svfz!xQild+uw2dft9jeEoM27XzVA-3{%js~MN4%! +Bgu;aZ!;bDLm>CU5*{^C=`$JJEm*dpq8$;lN@Jsf%Ht$7=vl?SeB7eEc)0pi|ARh6Svq>fR +?FoK867S|M2Y*Gr%;Gtida@SZ)Fu{RL1<0|XQR000O8`*~JVr<)D?@&W(=nFjy> +F#rGnaA|NaUukZ1WpZv|Y%gzcWpZJ3X>V?GFJg6RY-BHOWprU=VRT_%Y-ML*V|gxcd4*L`Yuhjoe)q2 +s8U-5?vAqV|hp}!9)-g)oN>LT->}a(mBgyT;=zrfyv1O;p+PoN_@4Nf--FFJ5^cuX7!VA)X1}nTWnzW +`-6{(FSEi|Iq6K4in0g=jitF}W(ax9~iW|``GV|{=$N;lK1aamSd(~(~Fj4SQIYSFUopjyd6Kanx-a| +m4NCuNQ9K>Kr`s#VPON+Uft;Y<&jkHK>o_)|e2X-nzJxGS?ibsKlI+1*6~PqD$$8Y; +ERvYGzhH?7q)S4lpD6aH5ItTr9vWn4*wtOq3gL+b^_kw`xj-Q^2YA7EQk)4l#}|b0skY$a?Z8rfb$~D +G6^-|wbC*%&gE2OLvW-8Szm_dCL{R6v3|v5A~azLSO)+>wh2R&CJ*WDfdwA~V69pRT^%yItD}GFkZT- +k(K(2i`xZoD1_LeKv+}!~rdG7L&tf@D(8kYI5A4Fv3gzH*qIpe!ng!>XaBT)W5K{S@VlT8vZLmR}+7# +rHe0slEN{EtO8wkAylTwe3?_ +U;e!LqE2C@Gl+(nIju%#T;jDy>@#Wo|(_a>PVT0yrWcj3iK?@=r8FM#BEA{G*Jl?lSkJU-EdY0wv+%w +-zhXPA3!Bseez2D*gU2?;u2t5UkB+K!6oG{ArVKi&>>X}P`EqD9Xjl3L2k^KWuO9KQH000080Q-4XQ{ +p@lM(64RKcW7m0Y%XwleNs(}+%OEi` +&WoSA%R4Y}$J#2SN3#B{kwG`u-C>ifMwreY$4yFIS{+MJl1nP?|SxRh9I#Sk1&B~`!j*DMtTI;z(_wMa`e)7^e^kG8mviq~OFCV4W=$A-k2z|`PM^ZZQFz%hV2Mja +VkH(-ECq+jQB9CMY@n81HSR#xbZYSovNBWw5wGc)QC`7{;Yq5juHzDL)OZH}p`>Mk(>YY@JeKr#6f{v2bv0S&^VQuDFfgw?#I5a?lF)uGBphgf!>5_Q^aZ5j4X4Fqx;W*>p41|t|*uEDgAcV!=E(2zfik#ROmTY +wgV&i}Y#VsmDE@4fsY@dZ1se7bP)h>@6aWAK2mt$eR#S(lq{Tr3004aj001 +xm003}la4%nJZggdGZeeUMZ*XODVRUJ4ZgVeUb!lv5FL!8VWo%z%WNCC^Vr*qDaCv=GO>fjN5WV|Xj3 +QM^q{V^*MOvvGC`BLvt$IZ$a*|2n*0GK4bXg((JN`)0-6p~pXJ$NaX5PH;K`Y}xsIKF(BRrYPlGdmJ+ +);ZkOx|1VxROke6x3YP@(E?54ArRLzIjIvhG~t)&KaMTdi=(%^&mUAi*JJKnhAmC6oyNO#zWK5abc+) +D{WMbc0n?ulxWHWcYSGnQ^6Q~oOMV@=pGGR&129G-Ph>L%Tlrd%d#MZG}uBla?zBB9#NFoaK|cvIRSs +dyFFNEcG0X@{pe@gui8%G0Uc|YV`ak))=rt@Nv^{|H_g}UltlOoD;`Nkq9vHyUX{GuMMt5C;R^f*tGdtR00o#!N@y)}xsNx3~i{<$d?n>D +*7enYHNoUe5>If>bW1q$&N(@gtnH0@`3Tc6s&@t>cn~q2Yv}3!Ci{IR#lV(`Nnh{lALv&LxSn9z92%p{cB|PnlVS5ofD7dp7AmaSXfet(MYC;$i5X}VCKdJUDW!Ro-uIY +oQxS;Wj%>J#l_$ykS+Wx;H}Ue~T4RKcW7m0Y+ +r0;XJKP`E^v9ZR!wi)I1s(-S8%mhKtdg1do`dQx=D%x#s+B7y`+I4OCy;rMG7Pp*9iRIJN(cGt+Xi?s +1KIK84hROyf-xMdLcDoqHQT}BkEp-%KB0tqDG32=u?j-;!QiM^oHE^nhIXB$hq{i&kD*lNL!f)+fQT)i>Bw$>$%<69ejbS9L$4rj2v_k3 +R)XLkC=A(of5X=g&Nj>=xP(F7#y$)-*+Ym6IvrSmeKggUb{c#&9qjaBrFhDor0@2amv#l)Ra0yS{n*> +D@2Hz8@5jtE)$ldx5{SAnG8F594tP<`~bWp8>Dck?KPdW1Z>jz3!Gh-+*zMRCAftXZ{p!JwGj&dG>Hh +WWMA!if0ug0stwO~Z+xMfJVCY6S+FKQ}1okqvS>;L5BI1jAz#Lf>s?*kB%nZexrwz(o#?Tbl +C$Woq&Q#@veofh&mk@ipW(dgFjxds$>M>$npHkXOyROkV9VqeoG1sx7kBRbWhcM|U`cK%4w_>{~MPk+ +cWsU(yb4G7kpF1$=V|PxE6bITAX-h_lVN-Uwro76a}pMH#$a6&DcmS1 +av=#9kaqPVgjKbhae04RwpF4)CNp2%*fa&`_y#ii6<1bPurFkVRX5BV6|9%*U^ +HMubPRVnkus2W9pRB%?>tc`@6aWAK2mt$eR#V~K6nixQ001)p001li003}l +a4%nJZggdGZeeUMZ*XODVRUJ4ZgVebZgX^DY-}%IUukY>bYEXCaCuWwQgX{LQpn9uDa}bORwzo%Ni0c +CQ7Fk*$jmD)NzBQ~%u81&NKDR7OiwM=<5E&m;sO9rO9KQH000080Q-4XQ{h^v-UR{x01^cN05bpp0B~ +t=FJEbHbY*gGVQepNaAk5~bZKvHb1!Lbb97;BY%gVGX>?&?Y-L|;WoKbyc`k5yeN)knn=lZ3_gActPD +&(>4?v<1mHJRA*GlbURrwrPh;`ug*(TTgeQkpSBzK3DfM;jdFf-1w?0}u9FMy47;@BfdWu54I;Up>0h +HA7n2U%bN&lcUN3w?nG&)AcGE?AajOb(iigPyuhs*bgW25=YcpJ6T?q;)y`)M2RTbNG#~BdQwNMAlLl +Tq=jgSBv8)`-Y=Br|z!-_@>U%kQz|A_nJm0dt1z}kQ$|GJe_;=V4J+)$($Vnez~k*t$lPSLt}S}qa4BFe +vzif`{ZCDRZF|<*Qiv8-0j(bmJB@DERXtlM?+@_k9YpFY)u~D37KEvt-aNDxzKJ>Qr)ZI$nXiML-|4>T +<1QY-O00;p4c~(=*3H8@=1poj(5C8xw0001RX>c!JX>N37a&BR4FK=*Va$$67Z*FrhX>N0LVQg$KY-M +L*V|gxcd97FLirh97{_m#{4y87k)dLK;kkSnlLIX*lKhof6>|>9zw&Y0i&JH2(-g6}1Jy}xd!0wE7E; +^U*TpY*o8>mHbWl~uunnpOO73+*Hz}f?o960-I!Sx;QCZ^9kisLwnWZP-uSflG&s(O6XHmZznSt+gSo +opaYWe)0bl>VI#?$x6- +TD73uEg^U+z^k{T)SnC2?~T#smRPGxKv!&Wh89N2_x|Y?dvJV+%*ZZPiALpk`eTt++G6AfWqSj8DQ{X +7_ilU+sXh*>3kfYZ^HW-rReoSI|j2M18-*4x +U*;VjQAb+=p!qC8I#s4VA?RHshl_oacRZLdiivg35K}dV9g?BI!CC&O|C`xCG_v$pQ6`9dEqA^PJ8-Y_fIGCPnE=Wo-5Uyx$AqBUT_U}wQ5u-78NGGTz(zN0dMlF! +m9$859$v$V$990DVxg?;l%2KR@YD!7CsVmLm2`pGm?%}`FMM3KS~r?N{{$(><|-Xx>ICaII2mor=}bQ +8~H92Xs>I~kb_H1wUUU@%>BSfM3N*N$?Fu^fz@J7}^J@kC1b&>rZr1*E@dsa6697Eb`V^CH|mxj5({W +HXI+CL4_?b%|3ZEUOl=<-S8D@jogK7fqI@>?Nb)bZBM6mC0l+HE4FQCA=7-vj6mXn{uR +VFrZ#MtD!G>j$(Z4-uRSntdY0s>5pcYzHvd%`l-!OYDrEL1OW*VCO6al}iVWOYe+V**_;&;eSBWkeTufsmcZPH#dBTC?1u%u7uf^~2iS7Af+y^yHrXI7-P;{D +S6;%Yuao$l=l4^N{bIewO82Ua4_ol2J54Xxds$;gWlrM`0<56fV!}Fd0oqg4uhUlIIdDuc@|QO6T|C2 +f_gdg0G(h5w%!VI8@(tuz0gu(0a|d*x6UF1j6dHQYh*rn7jYMW~>6kE(B)>tZ9LYY~ +J!rkA=qUuycB))Q5XiOAHFw7F7GY=R-ja^_m6i^3`W +dFVPxN7->T;IF8Et_83)?{YBsAw$n?ChVWC%?oJvw|yGA;HnhaR~PcK4CwFeg73 +~p|o1JXX29-@B%P)h>@6aWAK2mt$eR#T6qSSrFG000zg001cf003}la4%nJZggdGZeeUMZ*XODVRUJ4 +ZgVebZgX^DY-}%gXk}$=E^v9xJ!^B^Hj>}%dkTb6la-mWf_teC5HmcyHMk~ey;fTTd8ihH!%3JEIB!#xF`lNWRPd-nI2$MNI896$c+ +$@A~|(W7F^U%n-(o0gA(j>$6D{Od`!YWdpt$jZLHto*H{;Ay&d;rSp~XNzn)o1Q5M-M$+O>dTqGOqBAJ17)pY0@UXn0yN|`vm4+XUnd&Oh77wn74ZK1Flbgh-1-mj +Z?3~Y;rUZ_`Ctq*05${SPN#@Cnv9tAD_jqUp&wmwIF6;S}Wh +*>U{W;TH869?n(MfvI6eL?WT&?Bv`esa(K2I$|h@8J*%s>t92STZCZBiTjkGymNrTNzuD0)r{cuF)(QpsUxu!dcJ|6H4l3UA85t^gW(uo-_?fU1 +(m+xGT-9Ud1rgvQA^v&kGg2qF*oJM_^l}x@qM-NT+=a%Cor8=|U|_Ga9#Et0uYDVWac)OdWiqo|lF0$ +HY$sNbT+I;Vz+Tb!4`S2o}OqdKSjC!sB?hx7VWtEkzlIE~2Qj>)D>HbDcgu{oAYZ1{#wdJnvgl!#V53 +bD%u^e)9$}L8NPqk`>yC&eamM!c_z6W&vAm3jpt_ufJCJ@6xOoIJHA4JVDr2Uuh8CLWR6Fr65cfK)<= +lb#c*N&S>MtF;v$e*KkZytCz|BKRgU)xG^K7OVa~}wGvOrIe5*eDUSf{0tRvvs4vEwWOx~I!*Di>Qca +Hn)QZKuU>4P=cd9Tr3K(WBvoP4h>riGe6MDh^A7^EJ1zYt+6XG%;vJr7`k7L@vmN=r#mEPU}OB8hMHn +0jC)t0KN%SzYzR>7Y_B?`ER8?)xMS&&h4k--+BaHz +w~X?_cE1r_BQ5yt!F>Y14Y}xo>Z9H|E$`!mt~<)UBItH>~q+bhy0kD%S_Me4s`08CIU81V-}5%{=WM0 +#~&4F?-#G05VLgyu=89MTBk^xrB+=9TZ~SrJ**zxTUAlkSlO8IIwZu9jv_EYy$oj1P4OiA#kkID+@T8 +%(!=kfS|=$!31_wyOrR*+zHx*$QrqAt;W9Af2xk5w7p8oNW|e&bdJq>j4!3QhUMof-r1%uHK)VvXaYyc@t@AX)HTqbmb6NSala1wDY8*NZb_neB*hH#-O?U2keo@S(+LHvJxl^OhBgg@_*S`*m5ixJ +^{B%YilsjY+XE2JAo@1&(QkBm~hMIKgmUfzH{ov9&&6WRK7CE>HO$i&Mu@aBeyZ3D4blLbJ>O#UHCM0l~BN`DJ>ap{p2_4x2X>?vi7j@ZHG`qpr +fiI4Ox92Vll$`a2L7H=(bRA19SR@Nt5LwBu!>6;S3?Eu +ZjQwjRMzR4O*=7X;E +L1!y^wp3+Z>58m_kFadt|YrbffLWj#e?o7YsbKL17F4XS6x|Liq?y&!J94Wx?7F#}Sp*RC(5h0@U_?BU3m*!Bzd%qMEF2ShM?k&K%fpXDhSJ+DO3Q=j<|rExSb +Dj|2yCSLIrP6><$YUR$RTp~D(f;38z#Xj5?z2HQ>0CQ2&UV$yI#mZ1#z_|9YtBshTVF2Q^^Az%w5eIB +9v_j9{Ofb_oHpf=t#zBw?$yoWTSwFywXDO2b7?&`I(xNZ4gS^fQf~#IOqy63qj87do&!8h|+*`rT=hz31-%WGclNIwJ#}8p8Gm-ewT7{u}@~zx$>i20U~9V +R#J!gxOn&UJv}>!ij!?jb=F5;@}=^2Vbaw6gnDGg9h;4gEs3uJE-R)X}c$&b#+_z~sqR +mp}kl=|{V9?`J%BcsxLAfF5|gE#VfgH%O=+YVa7=YnFoB2`UiRDWC{yj`p+?BnKF~Ej#c=^cvdqPH+H +?ny!N94eA2GUUs)RIC5GY92DgNJ~?2*9hiVp#2{uy^igUo;f4Y;qNq0yL!p3%w?T?P)PgT79}Nl&Wmm +T&G+BI)QgG3bN!A#!V=_}jtN!k3rMS)V6gMd7(33p_u_kNj_u!vX@rXj^lhPltpE~`Fg*`D4!V>^u=J +OY4#|woLDuEyt01R>`Ah2X1guot}CQ1oS^ylAyo;xBzkXV>E$(E!U95wy6f~5rF4#oz^y#n&*nd}o$; +0WqYPL1%l95JR9?k&tgSgL9RmPbbJkgFv{n+87>vhsVW6Z0`f?M>m-G=|NqE^itpll)lN0QLDGw(@4a +M>ZsBOFt0ec>`duJvU=G4m<+KZ8R}HFPbgUo{55QNN4K==n5^#&H%>1Cft$|!G+k?k$Qzt@Ff5)L~Y? +x-XvE{0osAltY&i)mM+?7WD=kVwqP$cGU~AzEJM5X!9k02QsM-nM-J1%cnfLCRS6=~RArG;;382RLW3 +Excka$gfjOwv%j1{o!5<$|Z~Xq{{XdFz2;!DEvq<4iM+hTr2n@!^ctW(?*Ihxj=A2p~G8hm?frEcBii +nXka8&sh+Sq7cfqG(&GH|`A+O518h9Hl_T4941xdTO0)qcO+1yIeayzeU*fttRml+#4YLjb(x_8#&{>?Etm*skpf8!sZefkCu3($EtAz1nr}r4607yWfi$~p+p1X{9$t +VR>y{Dl;IP_O$zhdMhgs8fx;gyAR}a5(HHVl#R!@aaq*$Wx92caO!GX=mCMc_@?OCgc4i^<99ojNpH` +Fck;?aHVmh=sb=EXmpwgw=80btGxH=tW<40v8+{C?p(z!+Kv5vNi5K^JDLaXK2q#gA(5s~3g(AuCdtA +()>fHMxW}04l(ACV_1b9QmG0otMn%G+TqQp+(9VTwY#at_$NKSG~~=ef^!x7~-^FrZtShaX{E^P2|UG +e{?j}#hKn@&)G11Phn{T2zpyWdo-TyIjyBBg;1@d13NqHsE2;g855O*0KddGZQu%H&nQf^{aXuDcCS3 +O@5P|ER{a}E^_U*wLb)k|{<}1`c@FfkMsF{4focTb+fn#Uo-M`m0?~8!%i&(S@D%X^Ox$GSV)zJlw2C +u5Nxiy6L6QxI;~1rB%*u@4?YX=fL{AK8mqJ6NeAkM0#=@uU&=rD*Gxd#n;EM{Ucp@=ofUAr-Su3C)cx +P^b!thTGJEhqx7V1A6;5!2CqX;m(v#>D)GnN$S;dxMnz8Q3~^N*^s3I{;v!%_Sw_y8DgPa+-Oto@u1j +48RL33WFBIlImGvxy#@kuzyOMky +7%Nk7)&=!;r=AsxI;a3zl1Z}Z0)hGrxGCN`6T^l<`hL@0#BAkZi;uEr{HeCx`CXl+m(KK{MF@$hZV6h3v@&5U#j_2PR_s$*5p0-_*z(2{-KvD0K74#=)(dLYEDipj +BP|0^V!`COVF_#_bl(-|=8Gbn&g>mU1u`-$vDzC|YYoBd~Y`On1e}3w3}n??->6U`L-L+*k07#(NMw= +-(;$HCMV_Me5s*>{XzE2M?W|C3rdP4GAnVkEwjX)}z2osU{3O;tjByCRK|4A#Jn93DBUEE6@`4xwT3@ +Hv~qXO>iV{!o`X5m0p1(UuZ*)%=@BKFKczaQO&!ObME!TX}@qX`|$3evC=h-6kqI9WeEGS6LS=r_Tr*9KW|4rK1TFlM +)GE6HAtAK00jESv!sbVY`Ml00DMf#hb9j^-{5Oc*D^TXfZgU4piFf!%lO61vy&IkPk;VdNknaD6Vy`va=a5mt)0+cMx` +obB{NilG$$qN#X$0ut`eFk89QU@Q6!YJQ>IK6vMMGAe2X4^!vNPw*C5?qYAhp`L5!T*+V*EG(KGShHI +2=pVocdA!Fg1}m9HHG9UPwps4B&e$-d;1$;X(aYJD-hC4#zvzMM+7rnU4}Ix7XFlmKSe*Kvp>)N{2xH +!t6850vb`DPz(>)!fqH($eOzJOA%AX@p&(9l|948HJDiB-1O^|+V?R~kEy|&Ujl^)LWXz}V83^F`+pR ++5&3RIKydhbPydgg*Q!aq;;HQ*@i$%*qnvk)zKj>4EQ<*be4UM#Shc0MlHbt6}Po$j3Kk1+?aFy;Lmd +L5VKBJ5}Y8uQ=&6Ti6~3>w<+ev{ZB08PwSzl8)(;5}Cf_VWknM?KpY5zE1ZQMG_SQsnjrjt5O-*Qm;#%I^|9kRzR +9^m_pz1IU-ntVvA#Di>l4AthaFk;FR}arw-F8?5TjQt}ob5ViSdehd=`KF=JK={52&2Lhg +A95SU!U6%~ghd3-s1H0mrPl}8QCL05vtJ<+E@MgfeJ-{}>F0F3#?^yRv=zH5?_;R=Eclzwu1$OHA+jO +vt3O1YVg6UN5@1o?htij-oIfQrGt)WvmIu$nCNoS`_w?7#$z_+U~VHS<|ZTti$#dVTrsR^h$w#WkOj} +Fu$8`+OQFX^6GueP+;mY$ImM!O1f$hoP~}W-wM$JYk47t}0ozI9PxW +t_4702tA+aD_D}VsVZ#IRU%Mr{m7`6WyS03PrS&HV)EU-R2Y{22^!L9Q=?dsve6Tmj@D7(?eRhRU~pm +tT5kbTvP@iSFu;$%$u1S?r=gL)WJ#Py1;#bLaFpVBr2<|)NQd_}n{W&rZ}EUBg{QkoqlDf}`DoMHnY@ +$Rw!gWg1SfSuvFObjU@z+B_qPRX-n%o$8P19Qu`GbdgE3kZ(^IQ3+M%C!Dy9)4u!W&f#2`J^P3Ia!E& +hBGco0vdzQ!09p?-VP?L0Z$suApdNt&ks3OF>#39hv)$txG(0M*05Zf_zu&C_?F1(WOy +!m0g+cv7Q^%z@q;@=Xa}ailWIYdY!}~-Y`ljorGg3xlg$SDdN^ckF%OovU%(6X<2jRJH7QUcG=3Kk+e +s3%j!)g4V$pkF!aRencM2Z1>;ZxHs1-LVmf0%=7KJWVj@U1QCZ&-Ont9m@#ZOREh!RrFtM2(RbWlmha +d%qyH5`pQ3mXj0MmAKhhOA#zn{l3&>RHd*5U4by%`C9C7nDIAACAOX`;6u9yyw%KDYE}nZ+8%#UCq8bit_L*S?CTm8&B;c7>nl}77$!zEKJwBpnE^}a&b7qU_lPSM +jf8YZedxc$W5dEyCc-zpY2KO7}qd_mn;$1msbA0FK&={kNX;dQJRPMn)B`rv{aaocx^2A%OFXm8+0QupKJ`|@C!1(8UaqwktP|y`AJD~OR{|K1(?tUClfR=nJio+un!}bmnP +A&?%rNmPHpl8?cG6lPN8E8%&3?@|E=OBP?3B0$AcBt9C9^J{sJE4yp(VrM+yfKZ%dqQYMdb)MZu;rn)AWBk>3&;ax_4-UByk=)hkiDMBI>8y=9f3tKmyj^g-J3!Efy +c!^{?9stRg*kQYmy^Q7Wx1qYm&JNqy|Ws0yhC{8ADPML9O#z7j~f@dz2Q$AulfecAigT)CtX)+GJ*Sf +09v|F(POZBpIOI-NGC?ECXlJ5$S#WoFHhEf)OsYuhK;h(@UM{kTDq1*mQjXi}k8?5kkm*?>S#=zVa^J +P95%C}b~U^ci!Z36mi>=v0KiYb5-5PY3AR9QO#ZZi!&%LF`MI=NbBaMsm7E{mW3`aSmwB!nQh(~*aS# +}_~ru^_0<+Lq2#dm&qMp2^(!8*v#$0?RhW(7h}c_cpqH^;oh(7&AB7Ga0v$Lm_U;sLvH;YbV)caUiE` +a7Sp!*R;|1i4qZWpDR$K +=1FZBBB|z1$U8Y<5K1M`HCSa$>#1A4V3uj7#rUBz;aPy$l1{rX>`(cZTqnkV1<7aRJSjPCk5#p)O?l+ +^YVt{8qY!5?Dw312;S>CYfkknN;b8L9bk_{>bC@pPLXZB7ZStQ3?G>FAmZoU(D1zC&cn9`}%A9JAp-d +A_;_Si(Lyj(5`E53fv8`YL7+9Nbr@kb{|3aJXQm#E39A#;!`$!+D{zAEtE2H1k+klnIOw{(9(GllyyY +nR>XO1D(CLg>ql(L9C22Y)zpCSb8SQtyJ`y_tcjBQ*6f7Qy}sIe{t%^%^@Bdyg3?Zh_`pN%>D%p+O=!ROcW=@G4jkXWq}8y!ljNLT`c7bwVG$dGQw94Jb@d0<_8dBpgj+&d&E20rjvs4!{ +z2w|w~Uq53cNyLY#>DX{$S{sR9!qTSSdL;k&`R9Dg?*eO;eB0ODbpK|sJ&&#cm#xfznk +wcLgU3Dt6~DTK*@bJ0vCXF@?%MslF_^}V1wv-Nsie5YTI2@KbxTyuKxZBs&qiUQ*G7+;xodVna~~qnsDHHfj3EEH+%&tyvpYW(!Eiyzd6WV8!8~z-cstR6tFkX`*F`8yvIM(`(P^R+?z19$3WnSP_60OGX*YGv +9sWawy|-+OTv7FFOf!t-WjHFTG|sl&5m6b+Zs_G{X?LSvl6D=X^^nr;6^=G>8hl50YyFDJ(8xVCIKXD +Ebc9UzZov6a4pA-&krLpKtpM(=1F=TOmA+G?`hQ&mOlwOjK)e(#9jk#C55Hu`8yWT6z~K3ys02-B{Pmtn3T`aZ@XS1-bc<9M$MREM~%ZT_hUJ9WWP-eHNmQ*sfXjPJ^POOuj6Kxb4T`@-)Oe?zf +em91QY-O00;p4c~(;hq@{F^0{{T&3IG5d0001RX>c!JX>N37a&BR4FLGsZFJE72ZfSI1UoLQYtya;h+ +c*$?_g83L7HshK2L!yZ(0y3A?1i>(mmm~-oTybKRg!ZXO8>nhTe9VAw{)R~#J1+l(V5ZAB>bwCaimp3 +KlFJUHqqrJ;Y6G8X&jmz;X2t@=)qxwhBG@KCF0Eri%mSy^cMCYdT5u7U0N#VkGD^{lQqqv;jNp +~80eLm8Zt0_CD>7PwLVD&mkRIVJ$1L-C0E0V*gw$tnkK)Oht_d(<1X9>||@zRV64$?K1b%VOE5{sebhl;whqYUc9Bf +p?tNUbwp?)3_)Xm7$;LT;(ym@hq0@@Z7I9bqtXw9<{xwL3Eg~O)mCwlK<_H6KfIEFv#dKMn5YmHw-@s +CB0@s=%{Ay;(s5SmDm|kumR(2mF&5>HXqFJYF7{zwwvs4;74+{!a8%`I;T3Kirp|?&53Fkv>q1w7(Xo +<|Fv)SGo$fe`{rqKG}CP#vNu7Ry~Ta^)qrVMZ$FR}2TwCUZGo>2@=FWak$=XUA8;G|8(-0JHgx!lA(b +O`Xj^~|ixPYFgk9>>apP*ROA&0CkY}$#{DktHI|V?)KG6MgMb}YLvF#JXxP@P++03iSX0B~t=FJEbHbY*gGV +QepQWpOWKZ*FsRa&=>LZ*p@kaCz+;U6b3k@m;?Hq@n}EZ>S>4n;$ +AQ^l@%Q^@+b7XA`SAgaB{8E1R`0kCGfLv_XEW*ogLeiaiX=WH +*pkt{&5XS~XpI@GmnTG%%iEEjo^@fNVQQiI4ttAGH+OIv3pS8B2oWeub@0$>%LX)W4TH0)62qJizJoU +e4Bo@>Dl3bq%e5;t__o1)zn6|0LH=k=DXz#~=}>@7Ew;dzru6 +h)H>upUoV%Iy}8Y(J&4zcpgAY2==@$J$5=N1s*4IeSrL?VSBkqs(|YXFm$~e0Km*&e=~D3{Lb?AS+3) +MU~4YsX^i#cS`oWxdJv=jQ^m|a|@cD_HNbd>YA5D?i_2*oR4$pR4uY%Q#d62Xh%ktU2RhkjyyETPXq6 +4^oBP|ylfiT%vp`Ur!KWFABqZ80N9m?kC`CWIfo$`kqr>8v1NNui&7;8=+H;I@XhhfYv4R65B_#$Rat +=cn?>Kj?`J?ku|#QM|Ail8z;H_ZlWvMqbkyMa^KmH*78d%<0SoR~d}s@x5cdSF?B!9YlsDO~xE4gu>6 +QCJWzHf)17DXS&5Kd4>vf&-*u`7Xx`IBv^3aqWnKf^BX)9A08(VOlxd#HEIfJ3eBu#pDyZDd~6%8Vm$hS!O)C7{zkisOZe)Y2!5?r3nFn38#Ds^M4Rp6Ci*!}9?jzSmzO`kU#%X +!U(Nm)&54&Yg4R30lJ8|DXr$P%y~cz;#Pv$19o#Vh^}e`dHZ0RI)XwdSc9uO0@CJB_YtvII2sYiJdGV^hE5D!IPBo2827CB_4^sZp +8K%L>NlXBYVzBn3ixuIfNN<2?|0fv$&W;97L*C_D6aQ(b}Cw#d9Ys_S4(%oB>0+Ghp|S+P~7&vkcuWL +`~N*_nWHg>d~%k>&54vuS>qeKTjKReId5nmTl@Xo9q&&F}00^P+VcaS-AWG1YJ5M6L#*aWgx`nB`$OB%3B3)_9C{^jD*lPxQL7W7gO+7l-a +AwHXP{ANFM9BwPR53s#7y}jPGiR2V+?V;~xNe^q76&M6DZD0Y0qb}^?w=pS +tPG>_bxoGhSq4y>=o8I0{Az+t+14`}NjtpXTaK?zvMSk}P>2~T87A08D@z#q-Gw0anETGeS3UN@x9Ws +$(jkY0WJPFS^0MUG#cO7!@_GTx)E&z>S`&v_amwzQAPzXd2z&FU>52JWKCMqEpMBnZ}KET$ +OkJT2jj)2_967Hdb>>lwJ<6t#Ota&4&W+qTk)`_iZ^wFVF#S#Y_J9o{%ASkyNQ*^4&H1Jq@SQ>)UggCVj)oG4}J;n9u<7Ub>CEwzHCXqk2vL*47x`$Zvh9+-)i_>VtfyDUpfl0V(0WFz_ipsqYo2#oXF@w*y#Dj@@CuuZl+S711S9wUbdx +LDLJPJ0}pXH;OYne!PV&VjxUn@9on6HyQ%yI$!l&h!>{xtm5~x($%FMm>|}7_AOD8YRKs-=B2^A!q(YUAbr~^6_rkMY+4~KjUIO)z|ryD;y^}@Rhvw_XX!K(>m4zG^ +(+C=*|q!_dalu$R=HK;!3pDp=HVDb%K5$8AZ0C{h0Dm0r`0|+MX_LG+_jLg37@Z_>}7T@fOYzG!wH$q +X`L-#m`rorglwT)(pm(e>(JnjY=TTp{(2Y|*G!fSHe7)i-{IQ;;O2;g;B61R>I7npByc~;4=v4MRCa% +iMxU9)%2e2w#Zh6|4wudo=HW7U!Qn#lVk-S)?L#hlK4&tFQo3sc>yxuI5>G#U7!bqIhqiyole8ax_>I-TJ +xcMN;+K8e*TcBE_#y|7aMECxvlkPQrhBqT2kfRH3ORsOr;}2AqKfL&1L9800WG!BK(k14;*zQ_pisVX +ULMh%H9X$G{g6u_?Q)GHMYCWiUDS4jON7F?CQue?`Df=?@feoJ*R*e{?aervKrjJ8;!oD|-VyfW$by6 +RvVIQNyo<~Pef&@*qqwqR4)&S+;{wn0Q;k0|d(TniRf^pHn7v>)}Bhd~3B0q$lrx10Xbd;4)$GgBY_R +W%gNg9Mi4;0LWz5HV3wUJ*tnvZ=z2=R(dpH2yzo@r40P@D>sZx=&w69*6OX1w?us{y)+KW8%}Ji+tiB +sWb(d&3*-uJu|GIVl(WtYLi^G?uLko%NyZVqs9JMt!XATgE}JDwNP@9fm!UK6q0hAX0rNJ$8RIUYBXZ +#+}F$I8`^*hbcykC5yf`>Ks(&K1}Cjobf@l(fl#hX9~rNNhmy>>k)LS*YD@A8jK}$y%En`--XN{0Q!! +ruZ%k#7#`RM)HQrOKs?&S7@{|QSQBe|no+>+3A+VkC(F*t!K3WS#JT{#R=rQ3x%Fg+!W4)D^yhWKtxE +fnIk*O$k0Br4_x5tpR{>+0g3b^;2_o=l@gLIHSIrk-{ZrL7)X@~@m=?@2g~Qu+gPK}5jyL%hybty8F) +Y}44~|2*^icO)-y*OjC_i))-(ecuMcA9S2=5hmcl~E +X@YJSz55vFFG_@>%?Y=FoQ(IMoQ{!5a25V5;k2t(Ql$#!k$q3W4Sb6=HAD-=^2{X1@`963#ebrvnnRG +TV}5+5~94)0!E#{;0w}iq0$I2Q3ACVSngt0H9b^FPd*)Oo{gPjcu!)q%fFWH-Vcp;c?O7K@cQ|!*?vEvg_8taW{*4O42?cX)0syprb9p^Ibb&M0g +|Wq5RFgx?wftljs5C56|<|+>^X+{pe0uhP`vU;?eTNEz%hIT1SAoXc-Nt>XIp_V~2MZa(E27P}AexyB +lxa?Ce38;XS5BlCT%>g;yf@*bx2P-=g3Mq3H&weQ-VKD)5P(>8*D>NV=n0C|0w{aQE)I;C=NiHTP}}X +mGiFssI4Ub2sW2>;)F|_~O%AFW=xZ&i(=60{qZB{OecY%lf#CGA*RsPpTLT4<92LxPA$#rQN^#Jb}p&_QJ5t9)sWPuH2T*+nH&lMr;u_GH~by +r=kQt%q-fz1ytLM>hE@1vz!faY^`*;o6HeIl)}p$bju`2K1#Vnm_Ywza^i6Fv2|0V=aF3gO$hE)&E&x +n|X|u4|sct@14PE~Euns*dH~ox%pT}UNq={=qBdXeG&O!qh6NcVfty|m8g@dy7e0TqX^Qa1R +OO0VdpZU4u?X{eQrsjRu|zAiKjS&9I2X@V +*L`+};_y3Sr=@dqL;0PrK^iCEY`vH6|oy-SZhgdXESGbYG%h*m*`~1C|+I4F8wP@4#6U8;3+};MiOA( +1qOdWW)YA$VS7dFSDfsJ|@Wrh)g5w!iR@&7)kC?j|b_1qpf2Z^_gt=f6AnLj%@?DvzZzCPk8NQV=lNe +{7KB$-0rKWlV!+N3XVGk2LBSk|L~4MYF{9RL6TaA| +NaUukZ1WpZv|Y%g+UaW8UZabIR>Y-KKRdEGo~ciXs?-}NhS{C+vnP`{t#^~y8@sdZIx +a&?ki{`YvH)dACzJoa_W^(a2|3Pm_RF#li^TK3UqHs=@#vlW=cZ6{Evr_GWl>7eOumVdm+%QC+zCBMBa<}Lp^Zl&tJ(_33BetTVL)9a*Zi@M57emmbZIAAj3tu#fGW<>=PPWahv$@NGaHc@NxYLP<@K{ptjhQ>v|zeoobn@`6|=%x^cKWqi<*UDK@f_?Om +;IV5ruxx*c^|G-v$fzCoL|C>; +`Tn+bpwRDD$1hWio2p+iMm`!1+vi2SK?MGO{A@t;&j`tYFduQN7&bHaMX1OVK1tM{0O2kzsauwx%jFa +jri*;`ZyY88L&{6i9>NQCh5tP$3x@G5y~&J((9s<8oF5txFEK^fHkK=x9SplVi)2#1^ui9U0h)6l%)W +FPmN&Wh%>bSd-C}a6RKTFn92?lRl +Wvt1F=BdktjeiVuel9NHxzv|CF)?B-#<6pyk;Fi)~U#DlOYIZ4I&ssN=}mt}pYsnhAn+ +40{1p?S5))j}*JP>=cV_~__JoV5$_*?bs--)9|ff^tk9liYtcOS#czn}gI_W#5CZ{B~x +-w47F7ti@PS1}|-k!}!r(HNwrfE8LYBpspcX^4tL!8(tFy=s +%wrRgber#2q?QXAXZX7fq%3&xloF26KJUd(w5Y*{xuK@)kD~sx8I0klcRaCj!4qA}byV@Ehms0I&HJi +*#KZsGa|(7p5$a9b^8dF3W^uYXMD%m%cHY%+z|9l>SU7Q$O$Rs8bu~L2-X?ROTddDUA6FRCR+fII +gtSq7HyWXr+|-^<#OuYJZ#Qzr(H{-Gs|!@aaGr4*8~D7b%y%7H>P9l{t$zrnR6*F&=+Af3eF0V<858Z +ZUpeN%yhj`bLovj9UOF>i2WbvbrwMAOA=`j_ZD{ZpoDJTTiC6G7jj&uqq!UbI)S;7`@<4%A7W}6xG*%SXQ#iFhrL5u-r9Nnb#rfduFSj4^r^A +7)&gy1iM5N`P5@udfkmJb1dF*O=TEH-~x$lAGF2gvb=h*bXHP8)b=Q}`hFxa7(5D4L)HG_U9AF<+iDZmksQyVw~wmkVITmhO_65Y(airFY +1V2rx)FDc2!y6YGmd0!F+aY8*^r)YSo5`(*`Kjp*(C$-|?b9qv@nP2NdRm!PvQaf~rcMB));b6z4}K`+1m +LWJm=L#Fwzxm!`k!mS6N01pU2!~`3&x?5s!@+&crEmx%nNcPz77~+zz3ins||Q1y;u)F;#$&zl4{&6j +YuXK_vNZRd@||H10xZFjQe%pBmIi&3Id@FTmx2b_jZ;a8^8v<-DWl#8;&rz>OLE~81C_K;c*iFnt3k5 +S1UszZ^WOpDF7vb=WiwF3xFiBIm{to@&Z!;t4<;VmudXzvw;5+knm$NPGN#|-gf*y-k*<=W3h*C)zRE +QqZ)^9i}NRXpV@gZt_bfMBL^^q)ErtVZnum24zHVZPrL$1oy`s6GjZ29wh%b)$6QSp%>b*_;%A73EO` +-!EPDRjsi*s>+khgW;_!wZ5-i?_Y0%RH@~{te*t4VGVUM2uewJ2;J=#rsIw|xV*efEw?D;S+3r)zrTS +t4#r#tM6>nro3<)6Iz*#>}W{Faa`hvLK{byXEO3=2Bw5oc9G~RZ$;iT< +#rHGGp#m<#<-8+A>XEE5Tu^zK`S0-L1tx^>?Mm~u@$b>z=-5%#NpAw) +RMyt$Ie`u>DD_~6qko*3Ri?bFZ~{cV=_@}L8eHS(l#`*!vLHtL2faJ^Q!vlS4`w4i16XY~Oqf)XGs~N +1feH$#m~SBD=9*h2`VkgB=3B~RJf=&0{_}EGUTN~suSzC6AUW(O^&Kc~{=@EP-_^2nfuQ%6_FqQ>0Rj +JhHrNnN(qetBzN0D|^a7&DTx0YUousQC?3^y>l{|n}sBf`;;8d<(RG{M2Ma1!mdN0;-iTEsi0_TfG<} +Z{`3Byc#$bWja{WlE9I-EV!#(#y;?t1LbYW;;k0)2$}nlcuvXoB*4t^m&S3flChL@IG+O@YmWu?Li9z +@$$YLt$PEWr#}7Mt@?W$ksXKS +yAy9XjXhKFka=h#E{1DB_ApOaU;QlSt&N2^eWF7%L0=7rVG`}G(9*czn#gXJ!GM;Q<$wk=BH-}$$U<= +sR)d4!XO-V#I#bBy5_ZGUwUS)9k480|_JPT^)RD9f=~}Es<8VLd6(^MYvn$4D73+M<1eY2E1PB6KoSR +)F%EBz-fG%os$9@I89K90E_rRMPf!eim#0T!4W{W`Jc8}bnrP(@yYq#uj`Mz72 +W1@gur1&F`kHAOqe2|#i_dyB>2R{WEg!pGL%;4=UTWzUuG;;H9{m-2SjM=UfZZ;eH8dy3`$%3Nj@)#1R?;r1}W?!ArN +t~m)#JMG1-gVIW@pn_ZVY`0fUxdz9tqA91sSrAYC>(r)y@!?c9i63vB3s0DARdT-BnW*moiHryd@g?v +&RNoKd(kLf(FuT3t^k1qb;8SpL84*Vk@L|B(WqShSZMMNJ-qDmWG#&a?drSo&kx2o^lk>eT$2T#Y9Uq +J;Fm4DkRsOJkuwx(IP!^Pihjm+ghPBLl7x&QfHEUCuHiE!f71!YXmR$J)EnVMYinDE-80y>+Gvm>B5n +CLBJv4YZ6%DBjqw6lhM98$jLyTVn-anm+hY%^=>)6xwoO}^HWJ<#+{I1M4B1AE~J%HG)b}z*L0<=L?8 +|{owKa_TanC={6*NFF+47uY0n#|2PWV(I8=M7|%bX@Ot1}5sITulqHiz{BE2MT87 +RVKD*NJHqee2`R@sliBCI+sB^cN;hkUFmAHq;eEoFxk5qZ8gP0Q_`IKdl@L5eGtq@5SX6CUALqGJ7_prmXLmU$Md-};L2$yvgv*sXuR8HdkW;dYl%RykQ${u=U0jH +ms~f48zT~jY(=K^@NxUS5_om{MCyQ&vv06%mGWp;3I4MMiL!XwQG4PDVWz^M)jt-*90JpKLCKYF}DxN#bp03s +A@8_Ww<$dcq%-cwfi{Pf52dEkBS*L2`{(2?{2f8J9t~v8%{xs#CTzMs6Y8G3f|7c`Ruu@Ny +@od+?h)t=Qon5k27-3($(^mHX(K>HmU$UyUjeG$G56@mw}B3-9s=()-O6e`Cup25Ap#8MnArP&ziHlK +a{TVeh}N!L7Lzp-7I4lc*RI#iQ1uz3`kzyH^|fFZj>5Lys0=v4|NAwJlbO4?S#r +%t@{o`n}VQJ0hLPDA4yt-P`qtYuc8uPL0o(!m5D6_ZTljjvvtYu>uqA9afpZ0BCbC=}AgthYw-l3%2~t2h?(Sk +`n^9VgYNwR<|MnYt|O{b7C-S>x)lQam34*3zV{&1AKE;gR2O*YY{|E5cW5&JFI}IZ|cJ8SU%xQwNtP^ +IokI5hBNcVIDKH#Et*YPI;7wU!M*SP?aA-OpQ0AN$q$;MIlwUo*zJc8nc2ZllvS9oas{pw1PzGp;C86 +J(aDR4H#%tsS`ij(Hdi{WLET)ddefw}x;_Ac0|~L=;MpIZJ$v@#*&m-hJAlQx{-iKiS{JQ314XAV!fU +7Q)~N}J#E0xdc>XnkQ80TJI+1)eQWO`wBke_1&4Lm%<(j2ukTonp>QcSej(6C%zI4iHCxn%8(x?A6)xMGld>GVG3rV|W$d){8OX6l@C +p)%XLa7<;KIP$*4T*h6;Z-MIGNKU$8730F3=&l?VMto-i+Zz2ZP)h>@6aWAK2mt$eR#R!EM9=9W000bx001BW003}la4%nJZggdGZeeUMa%FKZa%FK}X>N0LV +Qg$JaCyx=Ym?iywcqzwu-wU5nrPWLZPLs(Oq=*|>lrup^`pIWJsz4XLK3qQ$&%Erm7V?X_dM_hs9k$* +?yY9*l?dPfI5;?OfTziujYwAQcH3Up%{p1OyPaspWZ1O(ZIxVzq!+vPN>oV+58Itcy0(V$x=BWCxF7e +u$WBg^-Jv_2C&Sp+%kix3#=33FZT_^}4&vmb-gRw1LhWWbw(WLM54P=k4ZW(Ltu7cg`?22YUk6>V-`A +D;{%hT>>a93g_3bVh4;_wQ7X8>97Re)+m003P7Rh56)*^W}ioU$qibe9g9^m&2InG7$TKsD-nkAIHZQ +#)f1MTWAE3QOSwY`GeU9O8>4DG&OiXo_#b>;H1#5rZVvcDAlpxXVNejaPk!w_n~HlSa(dS#v+YdUmdS ++8oVyVvT;YjLzCqFFaumQCB#%W_-)DvGAuiDNCVpf|vjYWolV`3Wt$vL8fJ4*aFKngk%aZyx?ByY9=b +vu5~`9{;UvFCUe#&N0;5OQo7Uu8~GB_M^ATK-8iKQphg$^|mTRbER7Rgb$uHS9RYuxDbov=k`VCKaGJ +BAD4nCO!xk*8Acdwi4ULjecQ*HZQEt(v|5X?7?vC1EQqeYYb&uGvTfa5ss_*Dd#q{;2xQPa&1@&evMR +^Y^weMtQK*7Xf>Ma89&vvK;8ek9!rh8>xjZPSvy%iq!BCNuf`_u{;$(hDk2SAMrbimEvlyZ-Kvl79jc59wJw`C$#I05L*veK@Vd9xSdGHD3gU&_RJa +a)J!Fw@o>03}^Zq{hF@5tB0jKnsT@#92VjuaJ7L)aRK~x-xV+zHL9W8mItb+pNs&!7;4xk%$~*I7VQV +*#-p4V@}J7$oBVWBR{|%?zj{%XF!^#1!=c$z$&txxxnOg-W9)&O4f_iqA7JPjZ~eZ3OymvvJeSrXv>U>K%62IFd}=Kx<%PEZ>XeU +dA+C-T|hsV +3jLstNE<%DN`^F?I23?Bpg)MBlvFC!U~EGrhzR^S+>Gha6kWD!EY~+J1i1L8I&Yrt3hVTIVh@^=aSYz +aX?DfofDp51T7NSxB<;*TaPnUI(H|MdpNL1F$-bqQ9l;2g1fpAgrsHL<0Kty%Q>J{Di}-kO2f%OJsFT +(XK5zZ>$AF9wdtH^q!GCUwag!%qq{h@W3v_?&BUp~{M}dYsTrsX!gN;-u-V7x=ol?fcvz^;alL22#|~CK@-$#>NepNW +1cYMw1j%U^aoS2YVV#5G>l1S6B%9YgcOglo#!OOhB~u0x5kZ#^r`6s~1~wRf4r;nFdMOz=qilEzn&vm +e3Khi+YKB*49yYL?Ri=y0Y7wJE12KN9Dw$I6fEpG_ +8lp6PZ?#vF^gOu$0}+UXEJst0vebf%3hsNT^>f?U>&hmVRgbN%uqMd2g6#^cGWHx+t%nxZu$mf~QjOT +=9h^Z9BhLPP2z0$|FUn7BgW5u*1zNU@W79Tl48#H@KrZ9dJYXaCB>*;7Gr@w2v$=z~z8Ll$?9XYGbjT +e?qY;zVIK*m`n8J|;>^hhg(To0J +$bzw?Z5T$TXt`Zev!|3q@MJCX3b$ZYKc#D%hQB8F{?EL?S3>Rw?<$qCW9rggM`Bwpp6BKj8IW65 +c&HCl{Haiz!;Myuv__rl(!*igs8CQ62>{=Ghk5`q^|AuTP|=1SmD}U9B4S!dcN#MSN5XMV16SG))^P} +*N)I9s(@u*Z@IlcMQvncXnEiy29O^e*eTIzCTGmPaYWEVdx4x49$(d^o_%3PZ>v9g(M++mQgRE?N@tH@VIq`baTM(rVZYudV1MS`&!D; +gH$;;%Muf9v(zItwxl~apg=H#E4NicJd^tlFoZ~GebVBnMTp@WmKMggb++l4k%u`HJxp_q-mNnT2YvT +P1Of!7Ths<6^PA>|ebxH_DXHHG9VZ6j};X-^dzYxi7ingU`^|BA0CU`wpF9EXW +AfTfdu1g-}JZM-FAlPDUtz}Xf&=%}!E!c`XC8T#Cf`T|6$PSn=2@G8)lEnzg|zDtxJ(*;zJ>CIkNmsd +JAcmyA>#fbBK)9-;UR;X4F`z0b`wck1jaywK~lq#d7no#-do}_}4NOda?P!>XS{|OL`{|I+N^6tG0$y +EaZkoN%Kcu%5WY|RjWI6nb|^P2$N+};pjO#pq&#-L5?{r&=J~pT{{5iv0YfuM7GY*I|zoaXqGkBl?)0X83l0g +c7&q}!<3!hCmzX2BLZnfeswG8sKa>>Zy@pv0}ivf&C{O3P)Ptk{L><;5M2v}TIJax)}|e92Gm-hSqn{ +3;rpi`^^O-FsH8*l82<8jNz^Vtts|J|c@&Q7w?t0V413Z!OYWKd%3%I3(f5f@v_EDx2v$yUCd!_b%nR +z&+hOjlLCpIV6~_+y2dj7ll3GeW3Jy8CRhlqEm0+(QsBpam-#Fc1bY+ldn0w@FHv!EGc~ +<$gP+7U2=cly;8hT->`7s}j6F1Lz0&L))WaWwW#WC^@fcNXS`j%e57VAJM$RKs=(YtZ3>XOOkF4=11~ +Jp#0eU7q|D2>~PpNvsVfNMTN0@BodD>sA+*s3%jYKbhCpAXtOA0*oZ8C_-QmGr6GsPC@P3!KU1Z1r_@ +%gBgRnjWuBz$LcY08GxoU6Vo{2j(XG)OF};wAJkbX$pLYT~rU(Os^!v~)_Cp$A##SGd0qi%bkI@CO$2c23TJsur)`Kf7h2dnqm`iP2J|vDC5^pRD*6A7sd_s%3 +nG2cgH75%_|vp48>HXg+)88O99BoWjPje`^|wFh#R?6jq9BKKQDiCtw9s2(zHr?Ly7k-)j{z5zxY(~J +hM1=5j|~_PXCtd!9QPy^y_S3qrKMQVBZ5T1Ddh{tPdTz>A&{uA%6{O!bU6;4b~CZQnW=8+Fw_Zp8`GO +x!iz==R$o|syu+{W+4{tDq_Owg)5<8CZBcDYqf88g==P6XfGy +AK~>&mwMo;@$KInEfRDE+JoH3eL(?l5jZPW&PJ?n^x*DHsPUJwOq*nJAiT&is%QdXg_XMb{jWF1Cnrq +pM&5%-76az!Y^xDKH&=o&{VceS``d`At_+?NVBqLV#4Q)#OtLhRf2-Al+G5LGpr!H{(AM&a8Hb*DLL* +2;@R5FvSYg5zy=hWr&1Ss?*ZU3fg&T0h`psr5jE`u7OSv)zuVjm_YZn^rC=;hyi$P#O^=P-9UUNGVd% +ioaiZewaQ(GiGmp4JClyUJb##dja!Mq{Mjk|L6!kYX7(@)gEL8bQfirLdWhHxU?aNvJjwIqA!)GV&Ki5cba=hjF9GPnxq4I`{6E4R=lw +LqWM^?9$x6W;ibdDiXngc7|2ZrM+3*I0|n52tPwXvLxaaBq#19TH^VH-lG20yz=srU4pM{(=j!wyhGGj)bB~QCG!Y6V41XI|QssOx;|L^%bt%*_o7CXA%Ua +B>q{!b6|myFrtt%D~I8Ns^x7H-8T{iIGI`C?y__p?oN{S*zYNm2~%x^iFqO(2{oK-6+=!*fX+Yxq$m` +NYxDvE{Q}MG4iX<{v>{>iXPAIsR#eU!&1zv`*P7hlWZGAQt%tKSAip6Iy9-faAVOwV2Og{i(JI!}fUN +KZX|1rkK#33^fkt~^YiDQVN!ae%VN5!KqbG?${W+>OTAD+K%X&!IJ~)JnI#Xl=HsN(isY}XfXSr%DSD +vDeYEBj|FS4PUdd!kt^$iC_Hs#k}|B*-!>KH+dY3Ym;8sY*-w_a|PQQYjSHCU~p1x^hJzb^YKAxbW{> +vllrl?Ca#JPgT;SEOs{HCoe*fD>Mc#^8n4#agg)G;MbQO=JF9}WXIMxy0`Ks#qQxSv}UtV9mygq7yENrmNlqs5To><%yex +|#!242pJ$lS-BhM1P~3T|%q)<$aicB0yEI|I*;CT-VRtw660u#?OOluIp~W|y&y5h)jimz|VY5hTifDfc5L!i!Pn5G_#Fpj&dwfMos&K?$v3X% +c9lwr&tCm>0sD)+1~~!)ru=_!#lrUHMKjJWXEXNuA*Us>W{Mq_f|TyAD}P36FQQg_)ItWLtspG$c#l1 +0IQ-GCqLy4|}Kzt(*O>JIqm1?2#FZz`Ngza+?HGqaZ2IPgI#x6h&z6=HrG+7#hpDlcbxydh(yePj8<+ +f4q<}v+V)Y-3B!CDtG+BL;xqBhI-$DD${Go`wT+5tjTNKZOf%F@fPTPkHf&=g_SSrVCPil+KxJUY7$J +6XCtMfU^kp)!)m3p(gyC!0#=V|XzY)skR2*$L%)=IOJ+|7L|CKuiCS%n$TiqO1>35^{M@&1pFJiyw-M +58)q}L4QGVypCOhEwHOgcOP)dFhGAlw3sv)8Tnrcyk8j4U!ptPqk{mMU)#B7kA57vJ0x4J8CO|e!jmvaL3;U1GTTrFRC4jF9l+92G +-uqT(#fP8PU4?wNFHnL46SLtgXqY8Ou4Q=2A`Ym-QuHM%hjP`9L#blT3m^|(15kVvKWj)pX^&1xIp91w>W4&uUvQM`N&)uHq*vEMzLD;$(J!w)JumgUmUwdi%EPYhYM*1p +hNEP0Q=T>3(!34D-mm6MKH##_EUNw^s9LN7fe5p&>j~jfYy~L6ihfhOJP)YtUiV9Z>rWPk%eM-zgr6L +-$V2iYj_W226C=nT5irV~c*tq-){(FYN_IA)AWQ7V$`(tM46K$*^a+seh;#r#1FyV5pf|T(-pC}FVD +_1P+HT>M1u4J*s-h+C)3~SVUdtagJ%0G&-hkETl<*yZc~?jPq=THpJ37wtfNWM5Ga)WY-(Qa1sA{7--KB +Ga1k4?OB4RMPUhcPLPnMX5WTnCCu2mZAp7 +Z}LpR5XN>a=JLhp)xb8R-ZQ1}3jrnW^nC2W7Wnw{BdS_lQJZJrG-vklUE4Ed1niO>wfs;Tu+(pwDseQ +wOB0JT{TM(jc?g<=TcqJ%@+W#*v;XZ+@Y&pB8NB>EG(uTV#-dB^f5fqdNirx>dupeLg@&U%jeM(i2qk +Gu>k=HOXU~x@y9)hcxTl{t;vmvgG9xB<2k9P&V~=;K?7^)s%cD^A8)XsJLfNJi@qk~IRHx!HWYI5xQM7}!|9AS1pn=~UunRY5lN9Mbz~PGB$`oAS^?lz+ImQG^SdmB1UYARjRfIP{6Kcrj2a!ft +yD7Albl{$&%MK+8Oo8hCI$T29p>(j7BZ{1E|@X2Y`kLi)ceWq<~w58dJPc|H~gfpbpH4kXrSyz+qUEmmb29O{>vKHs-5Odqjc&08WL-nQ^O)j7zKQAXRa#d9k>FP%)KB4Es&SAG +t-*#|@OVC1~=bY{lw2EI8Ajkz{Mztk;E-WlaL>1-k6i8WBpnZ=w>?) +_M}(?#QiE5fZqTxKsTO#_@=4B<>1`t +80gvG@%lC!=LRZ3W>N3`-Z4(g5TNB%n1&MA1_{Q%Y{H+ze8x)hq5!i78?^iQZ$>>AQ6@?dO+?*7mhuk +duAmLs$)aES`L;22!4@3R?Zo`{g?Zm`Gc`DL} +xj)qFX#NT5M(fSMDtZFja6S7M9mr@LR&Wk-HmIPTtpQVjc@$IVfAU9^KI3k;99@2zyMnRZVSSf;ZM%W +hn$mMr%@@|vwaP7}XjNrQR`ns|o}7ru3Y-noEHU`=;zRdai~#|CB&{~KfV!v}lDA3orYMPI80{FUGgZ +}NIm{-XvfVYd4beIO`zK761MaW7W&M}T&wp^TgTV9?Io0iA=C_#tEIAhyl5HRy21%w-Khc1a>L(mhp?T<9i_?;j#oAUJT3eNCE09cu;i2b +q$bM4AX;aenpvmPDnV6kludh~6pe}!>20=nFavMGM8I|ivU$|?N?2z#QfMJ(7PgHiV*--R4%0t6`e(% +fb&I#>Q7S0!zZ?jHDEe@os^lt2WRJ?j$84gbYk4;&yeITHW8!$ZMbZ4TW&OwQj=RfYAT9QBzsHZVqip +GHZIUi4up#1wdOVyJorcwO9k9iXz0Zw^4obqeUgI3d2oF~R?41Y~G3HAq5;T@*La^$*eP=JJY8uo47z +e)0|G29E7b9pr(Ep(Ji=oy$WJ=*nz!cJ%`))2i-=Px6SWVs-j|TGjOOpN>>Y&Z$2YfUH@6u +qh)(D+Ntu(j_B;R=BL?d%fZeMbT=dQ~*zo+=g%~;z>^N%gbp{a)mflqa5{vFop-NdYtLJObePCX*>v` +RYSco8VSz6=S`fL2}0{<)1`7yPZ?$}flgmtOY(61V-Y#3gZmvvfzt| +NeaIrLbbi_lVGYMuckSU$z#?TUAd=^`?wN(>`iWD4^#Z>Bf`HZqZ*96#w#@&e+0hjJFSdepr^W0;)zJ +?iTTL@I|P=l51+0qPb85qDv+j9?K}GNAWycJ|QSXQ)-U^mCkxAd3cNuiK*vAm5*r{de6x#gL;b2kp^2 +B}o0w0}bcd%i{5qr_Xx}Uh>fk!#JCb2s%+qZ~buU+^?&<2 +F1+f>tuBfI|uN)4OfHav;F+G2gB*(iId%!EUe(>AMyq*o``s`%| +FsJGj>~(zMM1sIZ{ke~h~M}LPkEQwhI+P +-tIDy!PpLdPFuhPhu#Z8==x#N_A)871WUQ2gpcCZc5+;-~R{PGDst9RbTrDO>D$f?w+pu#k;@Z}G8>F +drr4JUGmruIa*xRF}KYjge+7UK&J!6+cP030B9?ud!71I6`o{Vl8%6E%74VJr@;7BV+qqod~Fc&-w<% +$?`I&2~FY-n@AH0&iP7$Nj +DjX%o$y1@ix-=?!YnL6tc_BM77ozc7Gu##l*p7XV-uQ9TI(O)sb~3{TU)C%yVnVkLC0Wu$OPnb6maIY +dvhP>G`;N?;aMTpoDUZRv!M>m+khh4!nfnx-k({sMJf2eI6cF#RhT=UpOF8xjFBr^kDX?C@a8FsBf1+ +&8?-JD$IuCx1i0L~7{3l8AdvS+57}9Si>5nN6dpCD(D(@ppM`jIia`$ViJ>U)~%5#cW5H7Eq~ +6kh>Zf3)6}!8tUHI!r3eA{4A6=qVd`kX$Nj1Z;HV~S=_`9XU4b9>@(+4=z7Bia@(;zCtd~fVs#w}|bH0HI=+{Xv!8^<=l3n~;4){Q`c}fmQMRHj%13Bw)fFwT9ykdudL!f{t>TSpM8&1}50ni*2 +c)7wG03%muNAa`mTwzvxRjh;{-f(u7b82X8l*0sP5^Qw{FxqNn>+Z0{^1MDc_HWn{L+gK&d`_`acGk| +x2V`&NMSCe;YYpMkk_GOyV3o{5zJ5aU0PbZ%QD++HkIUBGf&t@Fxw5oPYnlFqCjEFGSwgtIjc@kJ(Rj +{Nh;K(wNr1|UMY!^K6O20?9bn^cd7x$gg!}<{Lle6!1zK?flHfdAITtxj2ngNx72c0lNpd>?A+$Yfk&N>k=S&1$|*CGf6!1%v0O+UBeQV6kn8RQnV=@GC1>f_0`OLp +LEdvUrxF1gg?;Q=_^`v=7s`EP_$#o-=1x$5Zwz?`!5J$e`U{=>KpUotDov@%bxLte)%q0dN1HwxTny{ +NyyIHTbA}kSr%i_hQ?a?I|)r1_&wZ2%IuQ-H$`sc6bd4*>oQUq13C;iR$8yGt0aO9Xc-`UQ389!Ha4% +9W5L@Nkv{b(7pnf@imsHLHng3hjIbgJV^%r0B+ahF-o4L^u*IVd4fIV5_|4IK#nyRa%R79geOB&v>ac +{rqy>3o-VR?)$F7uwGI3J8kXiBqxI_Npsjpg*S>)mCdU0VW=4(c#T=_Gn##{>gF +l^sIaoL_gWm&2CysdvP(zL1g%0WqLjiR$(+kadjT`q+as0xt!!+#NOC!*5Hso?pZi{l&Nim}a~oU$(1So +tf?FLS&;Xi8(W%Bp_sqKo=(H!y;q{hbh6$IAVT(e}8jGBQj)tO*ASfg_24F`H>r!vJP1v)eo9^uE6tz|opI+ybUCNet+iGRoqSg35zwJn8M!eSbF{Lmcr#B>Xl +I9!Ol76+^(+CL1x6E9NOdnENNI|ieJo}s#CMUuHWzF}SLeZXKGP?8ewj*sPK&{K8wp%(kqr%lMG~ +C}S6-W(6Wx}r-e!Kjej;V&Mu~61zat%#;Wi7&4KDB_r)+NO75Y9|9NB|kHiVXLbeJ0`c4<6d4+Ux2(!hQT2 +JH;7KCoOHnS-g-ry7yQZwO1!G2JB;1z&NRLJi%RcWZ#6!xia8GoPS(TBqA3tTNy#QY6-U`89Unj3SIQ8A1ZyI>L@-rlB+sp0d8tuGlA4$%c +B;y1e`^}HB4vSXIsaB>)`Ukz%>kE-8?je#A-BjB)vP?wGqBG%vYOK#`Z-SaoyOLiODJhSq^1NrSl3=M +WqUTyzOlXs&gj)B(prOpWeRyaX$;PLT*!G;ilL`X?v@B(rOFIF%SRA(F_egiMv!jx4LgrIYc!*8SN|%^loP|FWl_aqi6raK+j83GN7|UD!Pa=q$RMpzArO9NjcTk<<_HT$0p8Z +dB|xYTD;8d1ixZ1-e9brN-RWhfC=R+Qr8h5}sa#vm4_MP9`S;i`90!60g%6`u*NI{lQL`b{cg&+04^L +$8Zp)H2sqok{clk^ +%?B?0Q-5v*bO*hwT=G1mVL;f4p{aBL`Kue<&L8%fbB|uMvNIjiOjYH+QGud>md%x;rS$J$pw+zo^WCe)V?I71C0j# +SG;$iT$V$9hhFZos7*;-Yx8M%8Z%19#Vh5;aE4Xni=gJubAn%*5dCt?xu(2of<{DOE@#$0zT9KIQb-l +et*YpEuN$<^A)ZupGoHY+sL)c(d{zCS8vDJpO{1@>GfYtvd#YhP)h>@6aWAK2mt$eR#O+blrnz>000# +b001BW003}la4%nJZggdGZeeUMa%FKZa%FK}baG*1Yh`jSaCx0q-*4MC5PtVxL8vGu7pfkLJq!jitZU +ODXwh|P_GAPCEzvd`nN&$Cv0Lb+H%^}KoCp3JKlYF_uX0UDs3FgwQ^$bO1YZJ@Mg>HcJNs0%| +@zC`>5?~ZS;=0LnSP0Ufvj!wcpl>MF_}aEaD3~MER +pdLNqFp}#Xc96V{gUb(im-iz|2I@y(5DwNVN4nAUtyOAVpb(XeElM92`Ai*TN!gf@vc+blPSGAoMv&J +B1#vR-p%N7{e)Y^pWcmH9HmMSc^VruW3|0vZWQLD%@Iu=8)ERn#x5yzB>uU3k)cz-Jv?1m^cD?tpEKM +f^KH|hRz&V2+_skj)?|6e-k94rh|;u}4a3INu*hWI{iC3fq5f|(=dvbr*ncT(~6b_PceFB1n?f=14jcm{nZUb!S#@^;JbHtszw)Q? +z<%AAGoh8H{oid{L#pVy@zjvMKUDQj3)e|o7791(aS%%6_=i9@$&X|tbn#1$d5&jOs|H9hs#4FcrJ~3 +DY&YucnBxu?~qYvG{rz`!on{I-VCauw?fMez`JO-oYZdlixBb%-aO +b7OM%01Q!yn=3{sLLMH(FW6bO;2B@0%%UYwVYnUZ4K@l#dGV?6qae7IPSl*2m1@ki!^<#1A=yop^R+g +Wn}kIVU_IZV(7uRjw|@RxG?_Bw$QO7FIv}71b8qBaN)1Zqy_aMDMJIwlp4y|v!@~U3L>{g)ypM?Vz4) +2tzxJAE`rmia&oRJjQ3~gO2C%%DVxA1B`TR?5&`p(AKFuvaodJ+ut;l42zW2|e+<@^I&>?CM^>K{f2f +G~<-H087N-HUqr!P$xk9<2?s{PsjaQApFo2fnEk8{qYBt8UO&qTmS$f0001RX>c!JX>N37a&BR4FLGsZFLGsZUv+M2ZgX^DY-}!Yd9^%ibKAyt +-}Ngt@MJ_fB$UU@omL&S$;8fFPxH8AJ9RU%1_p^Gg$M)?02Iyo>c96q_KgK)Hz__yAh3J(?Ai0)vnY3 +M(+y(X-=CFyyV=+4p=qjKKWNNde{^rxO}#0%XPd6s34U6Yt8_na56Z!3AmaNDv?vwK+=O{amkci +XI!Ja|89m3psrpJy;mSFZLrjtjZ00TmcImG9S*urOVIt;@O}a1QwRdDk^vtYg)zbFbf44%w=#v$m6)^ +8Ld6-uE&J0EyeD>t@&HgNE_u#m~=vdGl(zx!i8Es;uvH2mLz(Ah*0a8nJ00RkPhXiw21P2u~y|OIa7P +9stC4y7#W^*ShQMOu&`*cMG~HfZCawa$gS8ecBUZ6+iNS)lIj{tMY#&&4QnGvd(w1S3h<`Cjr`g8mmF +>+N>xIvwTnZ;WW +4u@M3|}+wRLtu>#SXi{-x)yI;ern@gHck|f`EG9RQEZY2n5RUO42dmzE4l!ZV*qS^4fvI1saQ{zIcj@ +11FNNeAKK*1mn3cp@#KvJ;FwgiC?@7^J*@7|@<(GBL9^f75HFu;yfBb?@acvs6 +Ov2UZ2^Rf|o{;2HAVCmt>jwyT=~+Y(r>fgUW)i(-aN=cCuhQdR|lIdh52Qv;fQs|b3gChXV~QgJao;? +LdF74-i%8WX^f5c@!RS&0S+Sgi6Mv;{nW`TYA|UOrnM%Hg)z4@+Q&>veN;<^bfLLt`Mb#wm5*RQv!?B +^ZAJy;*6PmkR+jB4F4P-mgVo7kJZPBYfB+Ll#=&raZJUvHyV4VM&S9b1~$1sO<92sJ|=&nB;h5LLsj} +yx1rlK-g$4H_g5-7NX0`9)LuQIGYkAg=m|;FIO~^4cZ=}A-gj$=!>6Uz5edUAD_RZ*{bnwhoS8+FD}} +AeV3#41ayF?b=q{>i@ud>(A~-*xPZwvT>)*D3JF;(xu5JWyhRjn^s(U~qV}vr}>)0`O{T4<|zRzoKo3ljjBAQ_7>F@yN8yxL2miK8zR*=E1IV +&)L9hNfllBcpCR1^T0qEmG{m!`0P?2agbG+cm!fpOX?^kR+z}XhECWpAHiJi!0?kxmO~7Yxb~e+gp%f +DNxIzXyWn#AkCq`@b_hYDUxyjbD)E!j94xKxwTw&(mtu1B}||fA0Ez~Rg|rd;3?yykWa+l!2`P#uR&l +GZ;M0Tn`J>~1xB%hnDw&2d3hqDI)g#xJl!c4CLpNry5@kort__R=upsNXwP_oovy#Uv6vis*UoOA78CmlYx&W8Dpq~LMF!7;9(EUhA%`_x-1t=a_^A +x~7>)4G95}7Epz`iHTJw(pqgIPwN1s8S5l?~XHbqNl>sQ0@S3NKTZ-OgG5wH=c@ +-OlWe13suhPvwqLj!lDu7~%43RsX;1IXC!3sK1&{KcjQUmKoL@BS7-1;B{Ng*us^l7yQTm91@?DY9rH +cy0)CBar~z3Itp*6&K=89mtB~uWJZeZS{!RcX#9z#1zo`yOS4KKF1hJoV +k^*zjJKEFY=spqCIoPp^|)3B2^4Lwg6)v_}eUpk!LWZ|t?D2K@fZ`lum_&x(vGL8X1ffaR_lM@#zZo) +`+AT33n&MidSwFLbH{02If$0(GQe~ro&`|k21%zs_&3+ug<;8z@OC9@R#1TO%Xx|iVS)obaqwdz|435 +r{}P2gjI8oEn84`2mD^Mm;FuLL-Z!p2;+>J!d74usOsfR{9Uq4mel$~0XFbj53Mwmj_SDU!E?ovh +(HTL*E^}9Y4s!xUmcmRW(B)5f^^LD8Zo!=86?$Vw;1pQ*Tad8|dByF9TvpcT_8Up8s*Jqo2|c0P^!pV +IcB&OS^d0*Xs`5Xpf(hRVGj%F3F> +b@$T&#$CrMx9eDTV(HR9Rh-Ql)`SkZ))pz+!&C+kj$P^D&(1;8A+db)Qt^Z`u@>gPgM +67*L}0S*n2Yk!k-j~xdlKt)h@xY)R!;L9&7P`#BS&MKtT&MHZ_IDdN1T^ZOwO~B=Y#RiP~a$A?1Bcp` +8TMp+v;VWyHEso9XXYB_%8_=NeXQr6g&g>R_5mG8>Hd|R}S0!IzT84$cf-tbR=0Ypt%I3b1If!a=`%? +K7j&6P;o&gOzaKogAN|Yk3+_8LjhH##8a2z~5eLVJ=*P+vFH0E@-ECZ$xnjnK2 +%LE6en#ElwM-T!%?fG%dAJDhy>x=3Pj<^Ayxy#(n0?gklL>>SAW4#|Hbau9xos?0b_ab&A)z05Hf9li +p-@Q3U6qkloAJ_g>i>tD=!7GTGPq1U^%oquAUfN$yA~8=bSF4$3ebOZ7QRH?2B@N@e>5QLzio)3IZ`B +hnicd-D%xy`Hb1zG5Wt1pYFEUd8Ba6hH=HUtfTuM-uwdpku+JPIW)gxRq;-=ACgrAKAL52Co=9Gi +c$8kAc8cNwC+!+BMcgG7wYvht}d!2O*S!D!gVzN)f8%b)1v<7>&C99WId{FOi>s{Nst7nc|> +#zFX}(7TT1lfm0bu7DB_&*;F&K6=E4pQ_Gw+^z?rXxyuX!2m=H9k<~!F7P|mt&T9u|D3)3SA?NQvqKh +CUyhK4p^0**GVr9y$7jrAz|t&|M}M%9K);LjlZb^)GNP`4_yys1QQC4LDru?WP-lgUNy*QW1{e@ +W_tEFXDC}4r$hddC1r~#68q&+EwyEqqF$o!5LuIs6c)J;mv{W=4_uiF-$33%3*m@mfbnG=PP1Tg1-;$q4xzArl)n(2H +G2(?WPsnqWRtqNwhh$h9wx@k+Y!b*J5Spi#*+lq*e(XB&piFchGDr}qT%<}x#vubJAH- +c*7gvd4Z6~i2u+a55ti;hN+E8um%(T;~UZk8E@|Kn~#{XqiooqT@FVMke2|{0toFOp5_azvj1({z|7s +!%&`*Y;2TMwd+Et=vX9ct6^`zbP?B&O9Z#C(84Rb+VQwD%l}1?dS(cDqva+`J&AL@>o?R|cxT%p;BpA +ckv-5N<{tRzRpb@2O&~|CGlFZ!tl7-}*c{cYF+U$A2f%#Ncz51#cOY7=hJCh%L*3QrfuYqcNwb{AZ!WUq^vBD$$83Ea#E+)Z6qkW2CbnF7c7~{75E*=@ZHt=+c8c@5q=T*& +P$Qz%+|Wcm};}>IAq5vjS=(lp=F&9>JqjdN}A!b`#eeWDayTN6zm#yAbnixEJ`ZzwZIO*6D_x;8g*!f +KK35GNi;$!omU2=!;&k~P +Z5aelMxjwDf~TcY%<=TIdE6gJ*OkoceLD;7KJgm6Wc~{Sm_0``&914cRldGEG0|VaCzO$S#%3uH)@Z7 +&ogllC-lVt;E5+!3mi)v(fw4aC->Pl-&--K{p0fT|TW}vCG#rjrg!4KZ^EZ~|jkYB4;mqNmxrtFfGB`CU&y~pv8o$)9* +1;sEijn`=gQDC)d~hNpF=;vA_EpTc@t4unIGmssue-fO`LtD$tS30Rci>El8N;=YynYw#$1KDTIa_MRvaj5S)ps0w-Wc!>&tbX_Dkev$Qo}N@1W5BV+66X`gK&fQ`_ba>I +YjBf_{~luF#sJgCj`L(ajq)%+F;`ePh)E9Y)1&>|<-uk+P`#3&X+B<9XU)lQ6VM?MDYs?jzKE`ZyQ8P +Bp&q>~k!V2>KFvH#}^P?$nyI=VG$s(d%6t?q-^w<6!*#?-kj3}e?|ct4yYV=A|3;lL~QR0PCz&AmH2k +3F!mig3C9iuU%YTqS}#;ykM5*BNq`S+jO9F$LC^1D>k98F&iJ=>!Aowpi`uueW|PKe(Wq+E05+AI +N=J?3X7%P;cR@WBQC|^^;@yd8H0w`e4FldfTclVNS@ZqSWOVYP+i|ft;7Ph>A?{_jYEVbJkK^9iOLpT +~v6fi+ZF&0LJFa+CqpajV7Zd0LjEK5(?q|JpxrenglTO@dNwC83+$}IX|GYm>VJ>DXxYL +`#uBu6sMSOL~^>$vnc}y>uXH?%#RsO0xPX}`&s8mXwz+d}Xbuqv^-}P5F)BJgVnJmVGIm&{T#-6zdeS +Iu%a25vLN#-#apgDjog?E7M8iKo-;+KdA$ezg6*a$~=_CMdda7a{Xh7nU>><0=x`=ByWh#R53uZaKXiK^NfHO;u@HeUPPcoll-WYy-QfB6*YC=r0z +Rl|`umvD@UpD(5QOm_ynW!>~KG;>99r`b9jRG88tjk&ejdgzs94CAVhkL(_8D +vBKx@$%607IaN86HL5dKNPP28@Po^P~Fot)+4l;Kt77W4xuOxp|RO}rZ4G$oO>pf<~pIwGiIX%#opTj +J)hLH7r*)=sLUx+J4KnTG*d5pht&Z@dse}tfnPXIs4y8@`nQ}axYr5Ui+2cMI?Una5o!JOcxb2UWXq# +uf^TqO`;$KHZ|8+3~Y4=RRQ=E1{XM07kEGGJVxEAj_$Me?o?fBm`H +ZupVuTGt{9-sf2hD0|=K|V%=N4mMLO`nwUSKK|-o&wHj`N`s(7}9Yr)L0p3O;lnoH7K}yOe(SBHE`>9 +U*RdYyrN=pbJmbfUpuFM+}cdNRMf_uHn3qn4C;tmrZ)Yts0i^$cwgPisTd7IgZJR+V+~EwfPJGv-`p@ +3Ax8zNsz&pR4WW0bbj&9~!)?R>jH=q+;Nc%d{gKq*a`^o0%O2%PCOA%!m)_pyy*Vy8OCs5`Sb5;aIVQ-3c3 +gQF96yZL`$Y#CwVZSEjSnzR#g5~e6Vk!s18SNEivaC;JQ|MCavVE95kI{6@1LGu@+NQ&-b6pBQX0_5w +41a7J$4s#YSzI0JqKRPC6<;}a;dm~Dc|$Q7pmhDTy_wn;$pevBYN7thTt|RXuhOW@zouGfv9+UYF*>q +XbTIZ8r=&%Ydh5+FVouSM2{sVp^boz!?)-V*W+p(S_3`T3=};b+;4OD?atjU$A8{c?32ZTm^@;KkFV+@q+xSJZ_ +EIJ%}9@=A#mOI)$@l$T^C9K1gNn_`rahPg+TgGGfpMF4>^AoOPPgW4jUgJ$0Os7()}&JYbS2mMp37%w`=`Pb2THk4%4RpW^tB4KD>FQBiN}k>bIE-#&6lF4VPE+I>#sU2;B)Yf$)o)6AgCD0%AS +>3Q}7Mm2DF<&@cH3kKCNh66c!Pca|)-&r7k4$Uo1Hx`2RQI3Dn1l#I;wx6VDIydx#ovFWe2bu)aqu#r +Jr=_i{QJGm#=N&c&2Hc)~Tv)StUXds!_OY%%H3T_gt9(et%db9~mW6AsANU^?vvw}%=Y|VZ5`c$tXWOpX +w^vEfHu1B?`s`cK3Ugee;Bkyqia}Rh%*G$2TL{)xTq7_KC%)a6qe(l@PEN>aH!&Hf#a}iNDn1B`Jt@O +82KLC8(Xi%fydM)Zi&XlV8j(wr3=eAZyqcJ)ay(TCqucr~r5fR}YCTN)7yON+OY_OhYdVUxIzlv0C$Q +|16TjB%WUUUpjM?>|*5!%#r5101mzqOAF4#hTz6TrMtHaYnr;mF(0C2COujueWs=l*<1;;q}r~frR&LhwHExHnvK}p>Uax*ZdY24~tK ++n4R_{)JcU@aFqD)my&Lg7xH7(=flB`|k+cURWi9$b<;An4_$Y2L2#&Vh!<)jcQ_`GLeY)*r$Q%(ljA +z+ZpZe_mOf=c4LZ}}Z6X>Mz3?? +322H&0DJWGxI>}*)tr+k6%OJs^8I}Hn%ZZiRat34K*6Brf_Dyk;TeW2*!zsXu2*hN433_OnK~-(I*;j +T-yqFd*?6*5JNm?hJ#XWZ$v@;mCFORUsKce;&2)-DnK2JxU_-(Ix4Q^4yAwJtfe +Vnbk%MUubnjM4G;nwV?MYRj-1Or7ZTGf5S0COxesjkHs$SU_U#IW=siD5ZW5_nd2vb)h^$5-Bze`R0K ++GyZ9O%OV6@LVw;~VuL{1gmWCwhG)xZ??z*KO)Fe4;)UqrYDU${;UkPpp;)?BJrvxNE7PU)Rg8Zfvlr +27w3brU16w51Zw`Bw;~|>8Qy-_g{#K-kx=30n=OA(zSj1I(39%EHKLMaNWLdO+0*cRTT@W#dbcLtWS1 +6jbOjh_sGe{I0qjlI2d^D(1B55reh8{RhHowW0|T}moveNjEkiF(-K;EP4$GX=b)o73zA?il*Foz$Ap +)?!BDg5vo4LQbZKvHFJE72ZfSI1UoLQY0{~D<0|XQR000O8`*~JVQbZKvHFJfVHWiD`ejZi^q!!QuM>lJ%Uz|8{;>7k{EKxs>I +G{z|QIuVt<%I+qmzprd#x5R1bf({yKW@n~mYCu1OYY*U>K&?mh<>R)uR +7IbtiuQ+FaD8hN9}X1H$gbasplw)z)YP)Fhq#tzk(xzHQa#Z}0#o}6X|;$))y?KYb;^E|m_EH}oK-ip +A372KkbzaXc*W`#BIfGm2T8$n+uz(iU^_mcKK-P)HxdBpO)kaOt5VO4w_5q)IriF~iOguDBz(CM^@tr +LV7(oGY5|BTfWGx1_+CVL0ev3=V`FNkA1Gq*#{>2<-Ahu<>%&&?N5O9KQH000080Q-4XQvd(}00IC20 +000004o3h0B~t=FJEbHbY*gGVQepQWpi(Ab#!TOZZB+QXJKP`FJE72ZfSI1UoLQY0{~D<0|XQR000O8 +`*~JV_%`ETzZ3ufh(`bbD*ylhaA|NaUukZ1WpZv|Y%g+Ub8l>QbZKvHFKlIJVPknOa%FRGY<6XGE^v9 +RJZq2JIFjG}E4U7FZ3DIjw~r5NocEBKB-j9%OfZ|-`H*dBXoiK;BQnaEjMO|Fjk3u!o(95Qt%|09jE8S2x4l!A?R<=wk){1W5bSF_VuGqe*s^+XVvl%>Neb +cTh@hB=-`P(2naT0Y8gA6`AV@+LM;D=zU6$RtC5}*J))^^RWqUcw!?!ddU5=yaV&x)qrSF-5gOULS_& +j=EHn*J!dvs8j{HZPlDR|$X1ITN1>(Q3pM>p09TY3(j!uoSR(6kR7vKxNpigA+TvGdfc+K?-FLGvCWj +^+153E?4X={EsYud^B0Ovg6j!Ye!p(@!94|4((fyD5 +zISJM_62^fE2zx*DLnkr-bGo#b4O4vwL|Qj=U|wxs^Gb=?OrF}N>si$t4zP*+sxE4_@0t^AT2(-ESfZ +F2E5)7zk$;XB0;+YdzLqTEyK9ywpoyO61}jSjK@TEB00@`2K^zY{mW|;OmE>tpGoQ0z +#GLk3ij~%UWJM@Ph{wSu4uwbiHzBi{=94Y*CZ)4@^`L|uez@3qOVGSe+N49z36$#d+ts9sa8Xa2#E6i +r9U>c*?l!zrtp>^v7Zc?M83zbojt*O{q!|GOf5c{?d^hZxf1?)l53h$R4S`v{a}~9h2K+C8&G;qG|k# +hw7e4u#=X}gN&JB4_zxZs$wST3Xh2&q6fMwgCo9=s@}3_?nLLO-AI0N30Amd7D&#+$AD&)ca+0bT4Fre)jO +T+w(d$9MYj6cX&VLKgOOi$y-Z$5wO>|r{#ptlgTaxVA3=su+-CFaN!2#dWvqhfQ{3P;xIh%n<7HG;v` +O-7du*x$>AA!r-5Ph7I{QiD6n}OM5xyFMI7$KvD3P&~*J!#U>|JroxldS1y(KREQeWN*_`P*Hi&(HSIjhR +AwO-?XwODAD+e~U`>UGEXf9-Bf1b=A}oD)m>uj%fJceNLkL2R6x4HtJFrXbB4t%L~Rk014=d8~npMKQ +J95Sm30A}pl0iXgJ2A0&DRuF&Lzz^26qHj9XP=eHVm(56k7_}`PVu8Y#MMFzkqg^d~Eh}LiCiy>%G=&EinKbp11b9VTh~;vM +ja0d(8QV1Z7UT590an4FuN+(di<=f4%SAKU8|{Nej?e)=6%JQz{<1UgY9MWh)ZBP)_Pk?9SjdsT1dl} +;v0=~Ee8n`u`I+qI3O9-n)JKJ&ves$6EfNRJvcUq`Y +kU%f3b(bx$_LOFy1e2oN7EtjD3VWc+y!>aY(vsc(U+gmF4J&%o7D}NESy+Y9O)zmY`Jtn`49EZ-#pO9 +mh=G$o{1@^Qbd62%=$lj0eeKHDH=BZF;a?C5Z6B_wf2+_jZ<*e#uQ%nPX_zi-V2^KFbP&FXCN5`z7-#tuQ1m2PV8tCL+T1LdV3N$Ok@#@X6LXm1eT#OPP=7mNNVIDxSh#)oB +%GcQcvzBnnq1~g+IFHB$pzCGC_NAn!B<(Nfd4&WV{8;)di*Hnd^zS#k>X!XsJzn9qLNt28m*)W79%6c +x~8F23ZPy~zE&m%8=YiMVqpxBQ{XV;cG}=P637$pof`=}QVA;P2=D@(s{#YL7T{ou9{mZ%!R!P%MpLf +H;f#)Lfe|-6ksb31<(Z5QH#pZ-0|E-GhZ@&nWl3# +ww+l`DL388XDfnK7!eTPQ@ideC&zq +QOla5wA9`$IG@fOu?0SlHvOybQ6!Rrjg8=iT3iHS@s(q3E)*`f8xCL~%Iqo0mR$%>;*-}tCqarfJ4Od +esb(bLx)Bc-aF5Oo5Og!7>rd@ymiWrD)%pre!`wFTN5?Y_ZgRT6ciiwuxQU7$6JSl%}-hIs;g!%)+=v +sgjmK0D)FEp48kv6l^&$;L#EY?Qr}Lk^Zy4&oS|j1G<&m+66VOLRUSF35bDz~Mv$1mucq&!}gamJ%Rn +zPl`A?!qu#s0FcM!0i}>$sIgi7+3QkTNmd|A|1`EF|nEQ$AvOu+5&9954ff4yV@~%;Jiyg#G*xJjmxN +xc$P4$u&YhJjHDhB)*i){j=_i#DRQu?@siK +#Mi8QJz|$p2SNWxxeU5;JFQc!L4gv=`&!Q>N0Ao6QkSj&|ynbPFw&>aU$UdjPDw(TlN~D!Ol?n8&8i6 +eH0PgoqeMXAl@DH;4on#SFjrr;(WYNAj*{$>=gy?vg13Bp{rwiwP-2B +~G=%oaOvKG1y)rCO|I%DiL%)vNxO;M=_A}A-Gg|BLjT1Hh6i$G39&_omyAAdG%!rJrj`|b^RBQiMpq^l3pRuV3 +$+ZS^EQBR3Dh9L@iy#z2Pdj{g>_z)2lo*&-oX-}CN4$4_|KhtYV^VCP!jnY-Aw6OT5?442M-(vx4+^b +^%#!|u2$q`YJJs4!uNpb3~hcO0C3H%|bQ<8}8RwVvpZht38Oeh*m;hWGWF;5%4qsxEWve{*sIQldi)H +0!pS#$3$|tqf;VoaUOq));Nr=MmL6CfRcO8&+ce4=LZPS`D3vHbGRm7HO>6?1VOx#&t@yGP5Y~qoHKXiYXESIe{-zy@{A99$$MA`IuQ +EtF*OuIy1)3=uT0&b?^|y?XG&HVG@CKpx*39U@054^e}(3A1^0tlR=I}4hYc!HFSn6W2Yh5qn)UF$ml +9!S{|dvrJjS8xe8pmV!J_B*jY(!8!H_^xC>je9gwdM5@D+DdDUX3`zXn;l;RVpL5DpTIx!d!K-Zkv9? +KkI#qT5)NF^YqGWL4tFrztvNn3^3V)LkJ&(RnHiv{T8N!H*zrE3B}<)v7t94HP#JlUy%1IfbFe&tE1t +5NwVBFX!%anw4Iw37IM?u3C+4d)uI2Z?R0Z695f-bWQDKO5mVtV*Zn&j$%&`2yxR2;sK;%gcd8}CH~%Y@*p8HASUU;vdquQh7kM8Z}qed3X;Plw%@siIMdTC6bQ{LSW6FU?=0Yy})LE;1ASsF~9W6Y$@L$cyFu?{il-$AVr>NFVj@Cj)5GvpFjK*sADrViP5%?{-Ef?dq4s06PC7AG;{vtX^(C1*q^mf8NL;W?mRcu!t(794ceNM7n`ljYrhpJ9LFFWjHKL$d8H_FHF=IIAC +uc1{1^vHJu{O*{LBNN5SORe0wc+_l@*d9lhkUjn}mt>W->6z@6j4~ZqL7F3@;)4Qm21uw~4OQgNa|cw +eVV~uHDrJj?{F%IZqiB+K|)f$}skmQ1z|^KSp(k1Tv(X5DGWbB20K^^+7<2LU$5pQx4ZX8q_>$avvYF +jkmVhk@;I#hq`n%%N1HFEFmDA1%>`t$A=mAMXLJXn+be_3%mqOVO~=z#)ZpB#e>T9cpqpK#vimHMbg) +OyuVuR9zzimZh2_Fr#^8P=CEV~l<$+m(Cb=x>X~;nb-NWd)u!)(xz@0+-)z8z;kylSW3ZEwufE~opY} +$lcd~aboS*LS+TLgj^W%S)=9!6K?Uith5~M}AXrYE3g~Yx>Gw}(eOVRGsdAk|k)uRi^L{Y)x=2u==@Q +q~ReFX<>(y(^*l?4x^dt&gyJ^(K3xzC(l&k&E}1y>m?kJG!7;Bn`YWxAA0vSGwjm|}8lo}k +m+j>V$nGg3*&6q*++rE42jmB^Pkb|N3e6HLD;}zJQDLrXBRE*71Hm+}I`z8Dif$2aZ#@uMOipvB6iCI +pibz^$34g>Fa-HU5C3c6@z+pn +<2iEyPet<0Nekk#RRRB_}rWK~?ZNz=|An6W3xdXMoH%u*jl*}tfvDMcyB$~GgQ@AZHM?~73BlU$kLT_ +v@@=EYG8>LhX0HaxOm^gcmN +}pKeZ-f4KTC33o%GSMnbuIF<_bvB{kkL{I7A&Xx+ZZvdp?WWCQbZKvHFLGsbZ)|p +DY-wUIUtei%X>?y-E^v7R08mQ<1QY-O00;p4c~(=y03zQ=1pokK6aWA#0001RX>c!JX>N37a&BR4FLG +sbZ)|mRX>V>Xa%FRGY<6XAX<{#8VRL0JaCy~O?QYvP6#cKKAXH$G0Zk8JAVYzo!2$&7kfz%Y!;l&2Dr +O^-3P~k%i@y6VKSWWs<0YGeVL^h}l?HIo!Y|{y;$+;BYfPV&^lM4-!-nNjFPn~9h( +>5nJePJ{-4&{XiZu+R8a#gj!VZpJz{jsbMSQuceL96?iO?6Kg3lqjwNHA#YWW7s-k85K3L=DoR}3=!b8sN$_fbgsRmLwl2uUSnsTncgDcjU~`u^8xCq~VTqIkL9ckGx!t&O8q2&9b +^U4AU}6k{TM)7(%p#KI^3T3YDG{rDaawPc5mMj|y7g@^VIg{>5CMCj@_3L%7hxt#--$NYK6H#QU?$f# +}lRjOi)F0_to}0vXIqS_BB=-t{br+@{}uEWZC(riIIWNINHKo)%vPqBtK+=$x2O^8-8PNK!+AW59* ++VhcwVqVmF5f_od{%#KuMjRN2KM7t-yTWgVQW#Q?6$OWj( +IDuse(U(Qsq?U^x+bZRGeWB>g63$~G`wL1w+=hrEndQ6*PGUu>{3nLD5!br?%{s_CCxqQ$Y*j-~o|CARACSyDat)@3n +F>r!K&biSTe4vadt9}KntZvwBvr^t5$y4L%@lD15{ejxs7GL2%Re%mmDX2jE@Z78fFVWKbKQjGk^Nyw +SWcq!{{Z8ODB3`~#ZXUlt4u`kgi`?PX@M#v+LneotbqLHvOZ_Lj^yzUjU>=|Yi6ZWoHB?+UPvqMSe4t +lov_a(ks+zEpWk2vCdF{7dFMN8m9U#kOqw;s4Vy#4kvkB@7ay)VVp +hDMsuLP$I;b+)Z3sVKg--44E<$#Y8nYi)AR<*NWB#?Rw)q;p_q4wRV2aS#^?oqYt}TFCD*o5lhw*tu2 +v2gydGJTp;kYN^HFA;Jgr%^Mqm-$;KOm^tt`x|)uJehC0^^O#PNw%E!aR2%#Ar(YGDnGCsT$a-qu#cM +UQ5bVd!ap`Y5H4S^BxZb*QVgO-LX?lGV8Vl4r1=Vjj*o5zsa-^uaZ2w&sw%2bQl`f)XtTd2bdbS- +Ni`v0_Hy$(n}zYjDP|HS;FJ^#9x*e?A`1$+*E?rGwL!JuZ^ya9UiSW!zEV}bHQuS-8c@xk0wX;TQbZKvHFLGsbZ)|pDY-wUIV_|M&X=Gt^ +WpgfYdF@>5Z`(!^|E|AcOCvA^u)HQkaR=S0Xqq|~<9dlNajqx~gQ3Nh#hM~nE@ekG^1t8A?3)k8N#s8 +6&L3K7AG0&N^Z3o|D*3vunwAySKCcP+l#9q{GUX^JPvC~bB4X;c19rEA^@SX0ybxBTiZo|nKcFd6f=3r-B1m7k?zb<{Lf6S05tHqFvDJuVk8A +Qvq!+aV%rHBOWGHWmCk7~bR;8>Brrr^d-1ew`L$3(CniE6xi&`v?3oG`QhE +$H;%%Y!+?R7(v4cgTEX)(xOOURDzQep5-l_amjqt`i>Utgj~4PTFlM5iCGbFt9#O05E +kI!_q9tkfyS7qG{AS{Beq1EtyG{%zVx+vMiNW%%M|x&t5i`6vWPHg|k>IH$3(aF_KF#dGOxfpO8z*t*?bNwEfglJ@f&FGvw)vVfZOzq^d81<(N8|lP +lSPpV!378-H5~s&H$5^#dfRThyp5O5Q)wMbmJ3q%a^XlDjj%MG8IlceH%-aRkcrdyyehfc(sg>plOY? +tlCt5anQ|O0U)Kfg^?=3EuJ_v|L&zK%Tx*EL#tpDQw}GroHwRjNGXc1>;-Qy-0|1{Bx&!2{f$QSEp(s +hbX$naf#zNbm^9j9~_K-FpLn1bHUF1BQn^nDLJ9<&Axger;sBQD8CN;0WdiZCLq-wL{a#3NQv#@S)*F +-0rg3EK))NOWLB?Hnt1B15Gy53liu#5Q}kvHqIs4mihNq)OOX9ZD^J7e*Cf8^9N2K4_`lY?6XsubAfR +z189J6;VljmiYDZ>I@pJ-i1q*l7Z2Bfbr2j(2mYxkMHJZ`9eEH|xALLMH@G9Q_&Y|3mA%RL^8sKQn-T +QV#qy>p{X#(bF9WG_J2MfeBG>GCLO+D$V;0DK*w7g_*nQ08NczW} +k}a0aWVC42LxPw&l}Sene~3UE-vYcMlt7A!Rw8#vl<(OLxFrVZo=6f`b4V)InuP?cKI7+zlIO;yVL1l +VCE=b2z_1yk6Pw~H09h3&ZpuQ5Y-j0|Jij--b9WyGhbF?R)@i^&gLSHK@2X0(;h5E(3?;c1Y*N)K20}2@SjCEModW>7oW@%7Cp$uuR8El?eFJ +-Znu2dulQ8H(Cq(nadKtlsW#oETjmPW=cl-S=H07Z%Xh*1Ye8vKmi3he1-6hzhMvyvL7Ab4>KJ~H&X(s|P`@9K9C@O#;KIN(c +sO-W78C&v76*{z@U@qciBkjpDYDu>rx!!3tb9218A%8{cEQ;#B`4@oa#71(Ms!>TFKzNo6g68EbJG*lDSi#U} +7hn;Sz(2-Itso3hu;h6I`=;9&m*&4=n$baTI~)L|!ChaPnL-X8UEcC0$#@Oi!IYc}6efgDBJlu9SSyPI+0{jDrUCr*DTAvCh@MFp3H6BB$LmRH1a#xFLPVend@qo9eI%IW1^KM+CW5{! +MMt`CKZVg4X5Z-)LImxP6PC1Rl+8rrFKS+6V2k#Xx}zJvbh{ovvh%DTRVA)vSc@$RIDv~zUSwj92QW3EulES!W5b +_4*Z-;L_o@0jqPXw5gYQI{-?@r=z^kj?Mvcu)^{^sal^uOr)Vp!&)YM5uI|rZ+`0koJa=W}IEgq|Vt2 +EDC$(asavfgzop3$vdACrvL#La*MeHFug+6eP*6}Ar$fXdngn7vg6aSjNxOu3bmr) +`Z*;A#Z7(Lq#4H|J?!13BbB(y>qL>5vp`)mTE>FzVfR(uDCem2b{6^2I|Easka?^#`6Dg~T$A75Wr0g +|Zg{<)>jDW>-D>8qe0N~DKqx8i3QRrFWy^Mt)P#55C45-9-(_v6_&&18Z&PCLG3%AZ`=lLwV#)i5*(0 +eZd~B(G*F_x*O~{%Czd{WOG!;_g +tp#x!V5kl3KAZPFyf;(6`4I9sMN5xW1lLbHmQ_(yH}v#A-GWXNm4`8y1|3?;Hf8?vhBN8&)#W7`vbU+ +H@*&CwAKtjHYqTO^nHfTFi}Rk;p73P<_9a?7fE+Wd2kD7{!c+{r}RoQ`_r^D@bTxnvl%**xu*%TL%F!QqIy@ +vEA71D@+wT@UL-$_1!zed1}uo!!`^L9aQp7;_T9N#vXiueD2RWma*0b6TT{8jCqilDYJQ9V1sokILFc +#f|NDd1w2avXzfY~{h_)ZdO)I$v`CA}tsaqOC(>H^#wR-7ZrDYv5_k^#Jl{-P=9q4**&vP_fwZF~_hn +e)xbI&NAR@=kl7PR3Vk6LJ%9@QyYIn!odH7(CVUw1n;F_>W(n01#FgBWoq?J0H9bp7mQj}Oggf!<@Yd +(B>KS;}&d3{X9hMw8LI(w2gI~!K6Nepxi0QX40s)A!ba^N +?PgL+tPY)dv%F7*u_51Dx|4_1sJS8B;tX0~uzf>nusH@_ev?<}N`}cFf1Hm2$+D|$=jYuu>K71e!#~w +lvAf%5ihD<(^4ip?P7l>B^iRL#FTd}6( +;*=Y9ok*4I;6|4x8Cpmoog}rcO}m7r%x=7&K@W=}t)}0G)IC0*H1&ex#u!)KRYk(5V9B79Tr +qWFwVnp873g9`l&=aD_iFlEY&~jegp*$&2=Lm{wgNl#4x{Oq*gYtIRFTjZK`q*_4Zi*Kw( +c!278$xjS1t@Dq@Ge33{Tg!fyo{SQz}0|XQR000O8`*~JVWnpN=CK~_%wrBtVE& +u=kaA|NaUukZ1WpZv|Y%g+Ub8l>QbZKvHFLGsbZ)|pDY-wUIW?^G=Z*qAqaCz-LYmei`k>BT6^l{-ED +%NoA00-O&(B+)Beh2KP^3aqGpo$af4{2gSM`I^>?JthfD>YSNH(jhtLt6WOtsy$ +-5{22GssUvUEQ2j>dt!KEQhwOdvl|1Z*QyS_H5m?TQMAV@VC&9@-qRy%b!2IUc7qy`qg*u-v41rx4x~ +GgZk@D*Zxg5AEmy0H^{EMsU^D_+D=`4U-f#_AIlw1qb}Z;Te-U2@61a-?1rjs%3580lz-jJW+}~;hQP +*O9(MB2rJiG1;vADRwVGYED;D>%S+!lUE0=dAF0|+XWYx*7Y=+*f^j&jb*464q_vjdeekYgJx{{rJ|D +(AB7#@3bKUB4S>3!R6Vb;IN71Ce|$Tw|ME$P;xfm<=8PWEkmFJV6okRS2R9!d5NZuETx)aT2ufB`xnX +R$1o8)@Epg%_`zp*u{)Pa7#~x{-QKep*V}k>2NuZ(%pP>V{^1-wtoueY4WL-t)V`-78!R- +#k4Y#V;b#hmB(lLqU>ksNla+M$%1=4=#_MjsicUNlb7Vvz5uPqSuMcJ$t0Q9e8kZ`nq(`Oyc2@EMMyc +@Z^gI7ot7YdOQKrTQl$&p>{Ec+KXuqRHQ!zn&=?R_<}yCjvc^6d`DcT?5Xa99lGtzAFvt>v+C0GqPkN +c+-Tx*8vCl>(ooODdq?O<=BJU)I27=GAWBGyrL_NB&*7=UNeXqG9%1uF!QCNaouUFN8b|Sp}2`2A@nEsa{Qv_bH&>=(G+#nRo@tW&H}OD*DMkoK} +*`YG@aC<}YzU9)aAgp~2fHSW8*T2@2E);_Y)V{1C1C!pAXANzHMl=7Z}fveWOVV=<|2_p`SKeWrXK2t +JQmwk`hyar^4SLME!xfwB0F!0BgIU8Sq9gZ3WM_P)Vot>dy0UCC09E<|^`+K^VFUYzr7O;$0FhE=IJb +RT*&d3nKO>{A?aO;67uK}Dv9QbPqQut%ra!U8Pb0hRJ_)g8p`M6>)Tq|l=c84J}BV2MRP{V*o9f_s{q +qO29X^27YO^I6bpr!{~AQm9G)v#FPmQcN{*He3?jL^(CKkl(s;@vEzzumBHc_$Z4MbD0CKlc`ylm$5j +GwX9*IbYz~4Ta?|hy;B#z~CG39@!e&ZYg0}jX?Ogx^3FdqKCvwKG&PoFLuOZ;i%mK93WCr0BPMaglWg +GNM992aeWP(^S*7gCYXqef2Yftw*iH*{&T$p{!>GCcx?U*UT3s}LF_6RrxxS%4GbR9TzRm2Cm5gJK6owt;4FCkW?$8-#k#EOJq(&DxAZDorIOFy8G&H34Jw2rpzqM%EA(m2aB6Kw7V +-9XU@y3R9S%Kc|aZ+y-{_sg*LmsjSGrAd#1Qw(RpluPC0@$_-rZ9eZpVuuyYn%Eoe^b`I^wD$F2De(y +o`<@o*MC6B0v`5ou=+iajT|A6&OzcsLE^ZhK<}k&Ck(e}PC}Dwh7U(?A0;g4|mu7*aIV%$goLe`E@8V7#V5 +xbv$`Sg+z;hHHjNjnib4KHsX1KBwTsz*Tm|c7)52QZF0S8zUaxrdBI8LGfFqe_i(fsco1RLVOkyS&v8 +}pd(*({E}*~(MfMw%HH)TjLazPcp3+OpozHE@nF3YB7*jZf_>W`+{3)YkolQSs$DnD~jSUS$>ubhc@t|u*&llqIhi`u +XHw2R*qEwqN?AAFcnhN*}ojFkrxH$tjqm)vD+YFj@>=a1huR&1FTl9RH~ey76Gtt+vXe|wSahs;)OA5c?(fjkzy`1a~|Gi2Me=8A6c_9a&MYbUSH&MMB +>g_ZyeAS&WWNE`Hy)L8vbgJaU(>Gc#n?YVn03#S$U5C8Xuy$cz(~btKn}F-PKAgKbGK4CU+;I>_vk1_ +*2<~;-Ty?v6W|_?w4h^LLT{|FW{d{IYOX6VvO*YVrRQMGWiPUG=4wf5ICcJlo5`2n@Rpm#x$SHn<*f6 +HRO5Zwk-COzW8K#sUJEX;bFAimfp-v$pOw^9pWmfXcwnbne~Dq^*I0j-;U +)ll=!#u2zK6fUz~V+orggwA&_+lYF1KX-6F9Wq2O}>ZaO9#&2i%B9R*40-|O_qHR0k$*k@O&yVmzWpCRu~6THBW4Dp*Mii>kr~zz +WP@e4x&;~v4~$$%{k~o1-U1DMhsEuMlX4?1CtVnKQ1$|>3SuVE`<-(;bfdv8oDaye^*{F#$2wfh*GB^@GfQA6TwVjH-#g{V>53mTU3}3)fD!H;7s;n5?d`}frKr+ +V@Taz)Zp0wv;(SwvOkF1uH +0=R8X^eG-&l_xASUQ@f4zlq2vE0ovX)?s`uSzImy_qOGtRM`&PSLZ-ktk6#mPX}bO4EX%F^XbwqtBf=1uyX`F1B8W +7PQ~jj`MZW5&yHek)YcWsXX)BDPy%b;%Zu6o7=zQK}wg-H-TdjZxdLX2D8RBa*aYck$2={Tm|;++cq>CE16j|Nw;<{e57n>{ZCBk +^5Mq)^#9$A_m~8Z@G@2rZTMXICKpM4sd9n_VPbO)Na5R$ei&*BDHrm=?v(&?p_~CeiZmyD&W^@7&+4M +MB;&?OhjxqGE-OBtTRb|N#yG}~#5~X4C?w^rA91|bk+UOGpsv#$7LYWP9RvlY`E17)X7pd##%k9xzlpym`y6@Irp2MwHm>h-{YOtZJRZ8J9V6=w-psS1?R$dla +PzT!WDrrV{+=n`Kz?16p_-IQI{D5-=aS?Y?bhj6~!&O0$V~Q!f-=$-5owxc7ZDa_6)5N>lq$gsPP`j~h`X;@RvE{_lIR)*jRtMc{omT{_$N=6^J_q@13ihyCZd{(;cYjr^s%r7p-2) +zEuq=ESY+=fCxVD&4&0RscNIJe#22bGwxNl&gm<>d0(qV5_qe5_s&paPG%J^VSttScNNb<0zMvCiOzZEZ23Nc#kPtAZkv7B6)V9S>QR(ik>z(gK)=TKa%{mK&hw5 +^Fe95NniX`JXI8B;bYl{LlRiR?;adBNt9Se)b +Dk*B|h!~CM)3uRe}M@4#cw0!x<)FGKBgo(3OpOF?)v@aMf!u6B?p8|Drz!lZxdIRdhbI`%bX-^en+rr +t~}VNW(rB)1(R_eA(2In0h01*h_noe4CyVgxZPRt2$ruIRU7J;x9LfK6yFVAL`jU|It`jX>0Gs7oaOj +1&KJEOb41?bGnxV3-VEyI^6`e>!CatJ!>i>rTEj2-+QeQx|NcSQr6g%7{Fsi>k*{txof^&URLF +{&FK^1_9qjD#PUO6KR6*O8hZ|*u0Cm_U)vxI_lWfWX2uxH!)FuM888zgW0kG6*b#x&bJg^FD4^^?1DC +)$Gy$hNo*;Zv4`#L3uV@E6VW8CUkjvLdo26kCP6>D0Jy;RZrqH9|(!U{7Sf(D$3yPZxRJs8POBA6kdB +F4{AUR_Vc;}iZ9^tw!KyNhi0Tg-sS+~F9gawFF)8ItfZUxQLp9ZTe-l}qw=$&=*4Q^Id(VcWLY;B)NA +c%WDrZW=(klBbv|I)s+%my!TS3|^wlsCHtcR>-@CR4kjh6p~daq!F^{<cw^JxRYr-~!{>QQ9)%*S#(;a?%siE%O_E$En$k%oMUoK)F>< +BOZ)%%D&ZV`Y+HZAK4Nfng*aLs`l>v)eQ6+qQ^O~2P(HSytlT5FOdBbVMQwlWDi!PbWj++yy)j6!_6n +=CNFENI-#GFD5L!Pm0G;2@|YB^h-hhRrUj<&jpI?+l-2 +yBiBds)ZRWRClQpBbVYJHMQC-92YNIK4uJFv_Lz_BJ$|80~L&!@(Z>zECH>qW~Uu)sa7WZqmm<-!ovN +Z!_?{OrJ()8-dwgc8q<2iRVKoc`YQ=KVp +}!fEmlia48XM0YA-QLK}4}>+h)ugrG#Kpp3S_`47%`>U_ty*pHm#Gnol~7G +$y&Y8P6ooy>Iz&iyepqHgqnA76Na6x;t%te69~qrzQ^febY&uoyQ%M7}L@33l{#xo3cdsEf|zdcc?j#g7I;}fB +)%Rpfi-T0V+s9^D-!pIZUhXxCri4F{bpIUL}8SWQufIlVhE(+FCqVfhFN1;_vV_hA8S0l;u^fiN%6tV +aepv|{1ugX6pu`I&-dS1EU1mmu2GUeH4i;d?@%rI2IGW{d{ +B6J+XBdC{iX!{nqfDy_&uPft`YeM()kZ<$Ft^ujs64{&jj|SRa9a$C))ks5p(PlTKR;KHnhg|E%eF*M +F+aHM|#Xf97(LRpRiccH~}-=Zf>6qw^oCytkjs0iNm~g)*rBmbl7lq1!#|iV^=;b^k)$z1s>sG@@AXqB0i +Ft|p#{`CNP*bQ9T=J9F~x)X1x^u6eNJDkziBU?$xmEgl_A^$9MD)&8k_awo +@1=E9_y>4W~@(xYDBlL;UnEoK1kDCgLeT5_u#2idpW;_Om-gRzIO_LU>#W`1{E!h0ea^;xiHrM7<55xM#(-jp@=;^(N2@oOAW-i8#a2KJ;D``j@;@;#^y*j7hwa!ee#3|Mx(6Ai3yFgM`RBc%moHC +`MoO3-P7@G!Xt?Hp3NmCf?!|Jj4q7URZQzS8 +H&tSwPD0dk;`gb!>lf|!X)#T<~%GhUEx6Vc?EN0VC&t+b+XZSQ^pHs(s`|kbaO#IyLsWSz=IEatYmV3 +<#Mrvy;Ra3ucth~-uttCcBH#wno*)fpaGXr4sQYc;Y<9YTpwIK=bp9?p%E=gCT?ujMb;3J>(W8aE +g%$G-oL4DXGfW+51)%G!ZNB(49IvirhzXkp*E3_nnf~*Gb(Bjb&Vpx$-oFQv?}LXPx?NBJXAlU5c5bf +i~WuW;&keiTezY=VN;nb{&i*g$$%?F8=A2CrYip@{+$P2UN-s^)?;6|5Bo;(B)=RJM!TamW~SHG#ypG-!lYPrvIQ{6`PL!MbT)$>w89!98gtY7d4jQS +s{UN!tshN+|u_I9nE7hzS`IUPo$!**uh7$o4(me$IX3qb##J|TeT|LL2*y=~8<$$kT3@*82I;&RaQ-0 +-;0&PH(@eM>-*&Ah>n*=aA>@N~)#rYx}b4d#~n`LTb;WI+kzNF6G*t;c*IhK0W)-_cey?St74RPVSSU +h5VkmfDmQ!IGQu4Xgvd)QBLJ(@EBDBkLVlUzgC4_(`Kr!-5Pmo)I*4Urer&CWSxZZ^%eJI7N9zCmMq^ +PsxUJ2-L9I#n&+7mm(u|lEGiv3IV_IRpF;U>O%xdn}Pip)z^YH;It)(XC@X%w>_w3;lIDc#St0PViHfq-wl+C2z83y +3OuVHOps=F53fs;8FVa_jjrN^d?C^C`=iub8j~tcT4Ab$bz@6aWAK2mt$eR#Pd}T +EDyo002oA001`t003}la4%nJZggdGZeeUMa%FRGY;|;LZ*DJgWpi(Ac4cg7VlQTIb#7!|V_|M&X=Gt^ +WpgfYdF5D5Z`(!?z4KQrltZLIArR!!3bE0|O%J_suRpCCAaJND*B +mt%kGn@#f8pCX>l;PAcgnS>d!$=|`z{A~Tda5^0%>t+djK3?F5VGb;*Rmw6mTXDlPjn_kL)=|zRK`1) +*1X7@~F+BzuK6&XCG%UGN{AE?eXAxuAPz(#-kKm3CA*nJPTEs-?>Lf{o5=#by}25mwhGqj +@laj4XB#iE?S3k*k{T5gT$TtVzR#aB@wC3T+5Z))|z;AtPWG-Zp8O5r^THsEUX!cWjp6XE-)H0b^K&x +J!2;*LUR{Hi$bCx`dHV*V%d)E4NM^evQ(V)v9&`nUW|E2AA523F}Zg&4W^HR6Y@RYbraPERRpb{#kZN +7m?NQiVcgS$z&2ma#LyJL{XQS(^?^(9GpxmMHvUd#_1{(jnuF7S55FU2)SLw4mQ7C{_){$a`xlfv!Bl +2|1cM?%iUa@!R2(N5an~n$#$tq5^ROZ^mRhr$VH*9BXd~;9oCbjf?IBT +AZS2${aKWjr6MdxKs_ucpNve4orTzECq(%X4;wd@VN>YiLKmk3lbc5x92yxNF#vbdo=8z_iKSqe`)5$ +^z+Om8ZHdByd!TZj(;3tU_UbiItf1weoSPP45m?^kU(*jGy=loQ_QYVQ)6O0A88Us>o4t5vI +;vpVoL{1-XoYl$=?0Z33}q-SKoxMtrEb>xCB!?aNK9T?hjKfe%!QHw--|hlRlEwtciJl5RrJ;vZ5HC` +>o;dVqtc!Vz4{Yoa-{{wS2i=Ua-5lwW0x1-Uo6Bgw9#9X+#2#LrD0!M0A(UKy7Itmg8DN4rVV2J*_=g +Dlv5!R2~7zThnq^^#x6PpUmc=qITO!Mdx1XfAu_15_BT%$*Vpfu2Rku)eGN`z$xHS{wzBwKTU4;GX|C +~56VwJMRiM#)hv-^|WKbUW;J03%&%R`P8E{NP93bhnNdqOIEhV(c!GFvMjkW&0DLb2Z(q3@2j;dyfs9 +AE;S-1)IZrgHVGT~c7Xyt6(U$DBLP`-@BNZgq8I +(wt)4L%p}-40LVMt4S65oeeREWFd`pp@|I#gGYht_3VL_+kHkAXyR5@)zHNbWA=dx89_YYVC?lVu>ZT +)*NFe~RTlxmLB{=$YoNn5aM^%%uOeFR9a8KNwW(pft~Mp*$Ke*lq0m^525#e-pK}y#(1QIi-1zASMx* +PSwJ$B7Tq`t};-Jnr4V)^TbXlGIL=n?H=4c+dd9rAR5)73P#Mt0w*f)n^i=&;79t)IoN9GG|Lr=tc@yVd^7(x!d&Rb$}f$ieq)d$oePET4R#$LNF +W?D#Px&BPLKq(mAx}e(MGbbd?#6*Uta +WCLM@3D$GTbpbX>HYqk*m@~WP1#zgb?aOV^cQwyKoo$<1ISGysPHwmcvCW2kFwHWuwn+h4%d4x{9?wA +r1GVd>OdF~)bG2Whd6(n~GjQvMou}dI8wO6V$JWx%?8C@}3g06&US+Uw-}V*nKlmPlrXpREOuHmnQpL +Rcc0(>{TFPj7d#t}K`^N`8>Vb8ymuosiGLTE-br6tgv8`$j^(&;4EDI$m!#Abw7 +5!-&(&ckc!JX>N37a& +BR4FLGsbZ)|mRX>V>Xa%FRGY<6XAX<{#Ma&LBNWMy(LaCxO!+j8r+6@AxNV0a!Pr4pN_(-%#Z);Vz+P +nr|gai-09JQO5C5^9QI0m?ec*LQ6IBmhcslGZPlNMPSDYj4SYqjbyGs;b1gm8v!)=^pKQyBlq^+Ozi5 +$a>5C^T(g=Z;SWe+`j+z?!(`v>?^r$r|hm3ny)J1Keb9v*>}95dsFs<_|HMqYrOoi28WTO+Q=p^UPWC +hooiuK^(rd4${Vd-Whu1j_}#2btNFUU_b>eQe8r9E&b;S!DNEjh#e1lL^Rk9i4`3{{*o(ULm)70Ep8U +h@KYqM>xc#BH|LO6Y?>`iGU)_Fqy!-m@_Q7A-fVa}8?)=y8>u4l5sVU|ohQHsW+PxMVp~*DAc-MancO +%{I>W$KHm$fYs3Us4aY;onzQ}lQmO!@3+6`kF`BzrH;+;Qdhl;PO(NK{75e-)k4=pFl@$T1ML-3g{eW +yLc)*|3#pk3zT?of)V0n|IHYfipb-ncm6vnGW)?b;XSlCLg`SvB!uOlZJ6t;@r9=3s?5Mvzyv@c{*n} +GC4xsFs&+LiR-OmCEmhE_V~^H9sct+z9&95pzql~AiwNcUbCapFYGAW9TJh4x1u^R?k&W!NQKPml=Ui +Rq_2Xf8wkTq%&k#IAD?DD6eNQzhBGW)0V^TpucqC|H7RSs +<3zP-1BXTuM_Ic+YI4D2vr;NdkgI91EVD3!LRvv_&ZzvR5*-^6A(Y(l5IKEWFji#L8=>(`kPfi&@Gsrzj@z7cLV90FWij%R_=#Rn}E?2c&^Gg0KtTjkuR`W +g8jhL<6)=G;cYUb>pJK@vXF^JeMm$O-|W;kz_%aqii*=k;jf`o0w_B6L4M)zmozCXmeLjw{xTu^)qgD +4_97|~iAr26pn3*QQ-k1J4}sJ#`;p=m1ONLHu%0WV7!5^4K;FGSwC&3OW;&x%6UvMq{npd+fywEyN4X +5Mws@Fwve;fW`FjXU{sID66PE2XM%4YD#hDpt5OdXb9kK}s30g0^6nYRvwiq +3(9p)X<^zftJKk#Oz%@P{{woeaS(40|M<&V5XeKf+-h}bP~M`_y +*&^+)MXQqe}BN8ny>{GGD=8?z%6t{EUP1IO1+vXjTiH9^HUF_8Gt^o`-W>XB-W1@vdlr4Y|2Ew%~_*t +1wh^8bx)8H{;T9#w(Q4;zvmI7yA44eUQNB09n08?#035azycGQi=32cQCm#JfUp6D6MD^Ju~;sd|Je1 +LAv<&h0#OzzGsKrxALX9DX0`-m9zff^o9G;Nbh0hFKm3 +*vVJ|ek*+vVIB}512V`zaD5HFf#EiTv+lgwegBlNXge$m_X&(}=qMCDbp;}}|~?^Z4`Z0w=r*6R}+1J +E@Fb!m0jZuv@9vOP`mIJ^4Kl~ONXRqRIlgBc`bq+U>2hMvuwtnd +Pd=3X8=0!6d8u~_SboLCV5Tb^hXMUA&_fK%<}%RJw%VJ%vKHrJ$;y5r$uKI!u`?bkhgw_TSV9$xl^mw +HuV0O%OxB`qK#GaH2)m!ZNaj|BC||YV~av(gCNzRrjWu#LLKAiK!2hI%1M;yyKUi$jPG=IN6~lIOYJ) +LU{6teq-l?U>#f#GzsU-8yN;Y3BYkFCpS-e;fXpPi8-lNQtd%GE +ecE~cS?8@2&BaY!>+j~z(0LuaDXg#C{FA(A63BCe8)k6+L}5|W@=ay$6`-2RvRN{KuU1gAsTM1SwPfz +8bBPnf=HJI1RT<%BGqE;*=3V*FjdkT=k9UEPUjQOu%}DR#t#>c~&1K0x)YE6TQ0y((FqLaCBVqPV77AltcXJjMNQ~_VEn?Y@JBdz2dmWo`t)Mb(Q_@WY#UCWLaTY82NPvuX1;V%`MJs4W$>GS2{O +BsZG0>7#@&(v}V+h@e8SQ>H>i7iVp0iZTN>H5I5QP0RxAe%oSTN_Iwo5Cq-qn)K7o@SO6&4~6<1#b7w +pkpB9_HB;vH+P}-GgSkNpKr24kh-D-AD9;GeiRn-$&$}x%^U%^|KtDO>ILOx7Z{ctNa2}R`9bQ#;pWp +9NKo37KFJ5>$^%LO)+?r6q?~MFo{c-#olQvpg0>O{4_Zb3_d-(=vwjlbJu&%pAUqazEQ8!cY~^XPT4i +>0l{FF{&_UE78Y#v6TF{Z2LquUk;0-PbQrmbqmOXQa6d5Y+t&DJr;^@yRz5L2A3yi+F1PcK_-Y)^4F>vqVSajM`J>*wTuY<{ +pF()zX}OdFYC$TO9V)#TG=IvCp^x +L#fkz}v;@E7ij&(FH5H3-_LNQHz=*F|{??@bM~qlRc9zH? +EOXT3_B4)yJ6@SzTiCs^`v}9-wS7jk#Ys0BaSNBfVIN{MtzUbD*TFcNO!f)sO1M2 +WEat5njFtX4vV-;le*bBc$2ai5jFM}%@7YvyjdHl4b-{IvHp1OD`Dl@xNT?;d*l2C+e@=nj_C&6dHBD +}HHxtvZPHVU-q1EvW6`_+&+AW3_gcbnyXz$X&9R7+7_DswH(P1e2lUvMK#1b~?5@k0PF<~;H%+m25z&E46((jyd?S49qtv^ +JlS9{L?vb+xMB6SZbHU!O3^Nho=W~5WZ;CLQ;+xD4XT|ngKjF?}K*k6R-EVoO9KQH00 +0080Q-4XQ=5KpUlRiW0Nx1z051Rl0B~t=FJEbHbY*gGVQepQWpi(Ab#!TOZZC3Wb8l>RWo&6;FLGsYZ +*p{HaxQRr}0a*033dzi&Bu>Fzkb*9cbEdwr4QRa40r}AGACQGCDGQ~NeY=A4U|A7eHjCSen^`3cca_0`Z9ND@PJr0BZYP +%tW(?RMHwj#j$>9_(p3m#kqHpCff8EXjB;E9ghC%YGCco_wLRVmSaJq)Gp`W<|SpNDI0DY*;+GwST2g +ggJA)1&sNR?58hBl;AF%NNDa}Dgx_zb1W^wPV!{`@t96YB*XSjfj$2wIMtYdv-1PsZ#eZmRmucxm2xo +_7x24d4o#uO5vSxX_&tC#tR+RWo&6;FLGsZb!l>CZDnqBb1rasUuq-2Vc?Yt~1Fkl7@%Ovl)s2Va>Fp!F{vaX~iANMOCLC=cQl8t8E34N$!Njdup`3G7;Ofo7e!7{s)3S63b +P)ul$g7QSdt@+}D(vKNhd3+V1Mc@6*X>++s|YJaLT`qx@kHA +ua2SHOkOkhRh2uQ5!g{zgCG4iNx3(Uq5Dm=trO*U%e6@CR3zI`HSfz{FR7%EX~*0}oGbPj83O++{BQq +#$J_A4!!V)Pb;;2fKhWS+&T^#Am9XQfXV)+u +xLq7!nIm2(w!piUIMv;qm7v!h2pMxVAI&5&G8`w +%dY5N0|(&2ket3~#&8xJxkdNN^ny!Eyccg7)ERhD$Fpr#UwD<}RuAdu98H!=AwCP|XS7xA@B^9GM`i5(<=NHjpaL;7lg}0FATAg4*H;nwkpwmZ0Y0_sxI7i9x2)DD@kE5))!ne +eIaY6zdB`M1@V=W5QL}1%d{dW(W=-TwGxb@71S6E~Q0I=^DYA81cY((+ee(Qcdp1$D0KVCC0OnhDk9- +3XIJ7B;k3=z%0lBaPF`P4zgY=LnHwnKn(<-+HwiVK&5MEugEVdE7uNt1)L?#8}czdkGVS#vZ?q15|rU +7lx$0V>IvYn!e%tvuZloz<&buMPvKE`@ERRkqw4k?F(;g@agh9+Neh2-N-*W)OL^ +wUj`oT9V7Q6mzmk1D+jk1{2$2OkJ6FgKZ|w$7G1#1toBUO)oW_QWei=R5BHIOkY`Qs7NasgMX70<0c2 +QjPh`q%53wU*Bj_Dv+}tvHDOsAI>3Fg|>E4O#i^TV($0^A0zd?cDi;6njbIKLWz5!560|XQR000O8`* +~JV8W&e%>I(n>Y$X5yF8}}laA|NaUukZ1WpZv|Y%g+Ub8l>QbZKvHFLGsbZ)|pDY-wUIa%FRGY<6XGE +^v9ZT5XTpHWL2sU%@&!#Ky^L+K+%Kh-Ii~_pRsSPFS5k?H&Q(C3swk322ShTjKP?^`}c)N2RAQdF(dE+QLosh +H(@jY()WxFONWhUqgS-8c}+FT$eDTbErn2(CqMQl`#78NZ5)tmv)EIRbzh|lVBa@-06l!486mE{7@F? +_wX#rMh=TjsY=-m!1}Qv`rXX>X+bQ@yO~D1j7P5&J;-fGG_pJInT +&kw9RS7x2u-1n$_5%#YzF*)%LW)&iPlnhnj6k39jV2EUky|qgb=eh9?&va-9l|ahMIjbsTzQ_anw~X~ +KIw5aHbz;rHXvBRw!5S0#kW`UzBzvwFo!_>-mL8kX1qagUvR*9ytXnswlB)>dG#3q#zxtiI4Mtq!W}P +I@oe>8P!c6%KM@rrmwFleA{uai=w6BQW);MC5^OK##2m3}te~9YQDlzO=_r1<8Bwb7W-uN!z6i*(NGC+2^JinQ;6W)b(CHQKU*yZt(E}+x_nrKsc +?dQE4T<(iTznYtpSFF5LU&YS01z`krO(sxa8jn@F#97lKwpl7HRCj6lfLb7k8vU2N`yLbA40ZzJB-X+ +rPcOEnmHU`QgnRX+@}mA)rN?wTg7}xE^F4Jm1+JU;tS^=SSM%2{V774aDJM85FruKkC0OES6Jek-;a}y96VYPxjy~p-&Gx?b? +^hU1sqHpT4`Y^Q?&|Vx$4d@tca9VbzH3ePFz||<;SRK?yAAqJq#~)Ykz3da(#TLw6TvKE+K;&dIzU#8$l{limakS){-tWLq%ur~!orEAi7S3?WguxV4|A% +cW(Ibo+-X2U~CVS90TmB#H-m-z2`t7&pI$ux(moq$hzMfqZ`3Fwa6>aRf0ButXA9Lr%!H+$O=U7Ld=N +kW+|4D`9Hh_RUa=jl}%_9*q9=6Rd%X9TZZS~B_2bGFQaJ6YdHhn@^1P5Wr*vXxrXT8D52#j+Y_Mc_4H +Ju0W6B%C_ssvzn6wDI>^uNL9wBWm}kU?#c2GNw?2ZVcsooIW2BmV_R0{|3Q8AO}4p=JPhwW}ZBU0q+p +357~vVL(AfKD4|NHA@@HrQ+Hoxf^rhBj2Cn^Qd;PjWjIhsLfa*Knk#@8o)4hYM-Ck>*x-Li- +8ntVZAd?UXG@)sW4U)-0kmxNJGzMw6?F8|TqT5F+B8-_&Sj7z>)JAOTvvBU&+q&mH8RIC{NdKte?%i= +7>q=%!z1^$!nw%VEjx!pqPfB-w2{{;}h$c{g-_J>5oorjX+oJT651lTRW&C3|TuA0ngU7Op$Ix5~UW| +mRusZ9Ov=ESAmr&|^EV91#bl5X-~;=GJHYZFUMe5$X2Th`!!Y`Rv0OxBqy$m`y08wCu)s1G=oKJt&)kZLF=2C^gG`9C +J!?A1@U7}$mKlwV?2f-iA`CjUh>PjUH_Grrqvj6TGFVCvHK#4Kiw8>h9;o#E}Wg=A4ya0=H&!`el(s5|s6$)Cx0$ +-4z*50PB6BPwGb7fDJ9!y`8n7L&8_ft`xseP<5jpgC<8r4wKlDV2MF=(bt7|CiJI5F}kzU@}kL7dbMy +Glx%%z(Kgx=zA^D6bJ57gxN9u+qfH=_D7@$O1U?$_s +{I(->?x1Msthx(f|z9tDU7xSL`O6vh>dzUB@CFF7-N#poj4$iuKk$Rj9R$OUnQu?g}vnq&jGD-l +&M7kog7~Q)NWNcTU+V2o9pL5?~konI49RA9JW@0lQU~;AU4RR__8y>`;V4h!4l84A#u6wS%DKdz5(B?VNu}L{#dx8lfpRftC#YlQkkaIY60ium!Hk*JaYe< +OSjM)gi2X&Oudvd>qgHc0+7$iekdI5HLthU|18L^Dz1D^`WA$EzOtD#DlhZZnYVu{siOE+LuXL-DgGL +tg$VwC7Q@2~@1aHO9X7er+Ug$1gxbn8ANAJGvX5gS9+tSOZma;RO}m={%0U= +lLpQ8rLsmuRfZ!~RB292Q5W7XeNHeJ0#>IvaS0tOkgCT^P6NY_A1_qV%a0#(mp<6|s~_Ti?_v%`_EhP +LS$F@S7*Kajj_kOxztn+hkh7KLIE*u_ti)KTGBVamz$-P_&0bLfKLTCjy^UhqzA;1#8AZjMW7H_lf0e +XApWVH1QY-O00;p4c~(;Z00002000000000V0001RX>c!JX>N37a&BR4FL +iWjY;!MPUukY>bYEXCaCrj&P)h>@6aWAK2mt$eR#QrNIX~6`008#`000{R003}la4%nJZggdGZeeUMb +#!TLb1z?PZ)YxWd2N!xPUA2ThVOogQTCElsU;3vD(y-O6oiC|1X`|X+Dubx9XqleP23;XaZ+@pcLtgVHEHsFp3+jz_0(d@LvoO51mp+k4n4QEU!;i^$ +EFQ6kO*dgp|DY2m)$sp9~1e(MQbh;TNWpu~dg+~d7x9FZ?CYEIx33t6VZel$c0(7UI_AvhXtxhFrSjX +6pvl2k!JIcVnT`ouLE$G4ZgQJ%_bRUQc?$$Sd9tf?0$IbmSdt1NUJio5tCtO`K#-a&tF*<_f2{j&z6$ +4sXau(us35|EvbJj3s_gKq-#X?NVCG14w83Ihe;z>HbC&eU{Ta0-tjK$*b$8;=U` +3p8$VdV77pc{+=FTn{ZA31{DsPrXLkPANX)R|{Ly_mhMo94+AZm9aNW@h6qE7(6!O9KQH000080Q-4XQv-5B!j}R70D% +So03HAU0B~t=FJEbHbY*gGVQepTbZKmJFJW+SWNC79E^v9BR84Q&FbuuxR}k){#!?$w4+Dawz%D!Ww( +e8}24mB*iqt1iXcC4^LrbJ0e0^NBz(xw9`FL@npo%S!7p0Se5mBXUP +rr9sxiOA}%8Zvug&tQ>xp|C4}q+>tCLE(&*7|DvICkOIzP9|+aUSn5Lk*G+xE8SY-JQ$wec+aYIrUkz +ricO#IHG4H42$>`s1)5K7gI+kdgH*_nO|mJa3M!>Kxh%)LrcAzG%VCEtErGp@;pQ$pmkQ)Ji8{lR*MW +;L73_U&-0B-POz~7FYcV&RjVRNVy1J;h0B5ijVoTT<)4&QITu-N6T)__}_?3ROw$V8bGy2}!z%&)|3( +(~-1IbOfH*OEK6L~lp(Bgqw(w=fC(BqpF4t=erXFMd6N`{k=GSM9H;WZxHJQ6H?RY$#}%&Y5nH;sM@M +3PaAvH6WSgi7oiKla;%$Sg!=Q|r+SBAUCHH9S?^RpPh6?1!|EtB=RI@qo}&s~5iTRkf;h?zjT!C90%RiiQhRT +CnWmNYb-$4*wyE7)43keav#hH0xamKkI)N@$n$YQ05&MpcPB%F!R+gzV#@tU}V +Q0U#PRT-=Fc19E8B_r&lP9wbzH6)#=^MKEOS-3EUg=BwHL(@_AT#TWXr**b*Z=Vc8=7da^o`jo|}4Mg +bMA)o)Ns0|XQR000O8`*~JV4;ZV{dJ6VRSBVd +0kc8j@vd6eb-kEv=5d6N8V#XBNJcHQSLhyaozE;LRN-QFvpVfU>xZjXbW{d#10jd6B3;6i+?N4sUE2%U>Cp&{hbh6QCJ1yap?$Ce3e{ +*atEWN8ot(89eZ<#T{vec@9mbYnkKv^iAc3Kd~yOfv{V;;+G_Vju4^tj$`SHWxuc75RCU6Pi##R8}j9 +xRtOq~OZo{-1*vcWYvR4AS8JL7^eg7D^?AI#OjC!R4zt1E{TS&0;>UxUIW=nyY5s_AQ$el6l(+G5_`M +-3@6V?~D^irr+J&zQ4V_3;v%3%dsG7aRX&1b0-p~EppR3wRH$qos^bSGIai7`L~mpckq{&-YkgI)T$E +&AQ5OgQcn++0(NBmfM%f?H{@fp4OM_$jR7=Jd^Vy3r6Ff>VquTOFC#K8x#C_q%vzl&L+aaP>&?f_YPH +$L(=#t+K^jyhRV_--{><$*+4I9@z4{FQh23a5J=<}Cu42KuG?v+U$f!K@F9Mr!=wKptS|OhYZ9=gN^8OhN0RC_{lNC>fLHcc +)=3$Eb8)|4>Et)qaUnbnLl?SCU7)c|;^}3Nj$o)iZzz}il~w2`sjU&hNDDe{SRYv7k{}D3q^>O*w5(v +3g&GZ7cft2a{&J$06VKF5lfev&NeZF2C<09?%X8lqxi=+o7idv8T$0hA(F~*RB3Eu=r$Xf+Y|{2`-!E +QhCR2!#`+@4`3JuOLlaTi0>&whx>fipdxV{*c*@0=3OjgT39v-)!CevxaP$JW(hXUvhACR)1yfy3}Gb2izJ|Pe0z +Ja(_GHj#afuR6|E*&#=deqi9IVCaqjHhmLB$rp<{vP67@Ys7K&AAuIf0UNQ@jp;Y0|XQR000O8`*~JV +wzP?{a|Qqa0TloMDF6TfaA|NaUukZ1WpZv|Y%g_mX>4;ZV{dJ6VRUI?X>4h9d0%v4XLBxad9_$=Z`(E +y{_bCKQ$9>W9VJfNv^C%k+b|3ThPBv=een#Hk!YKZBnl#B#|ZM@cSq`lw4Jwg%LhlM$cJ~&J$F1h2!d +aE$!n%Lurh@(EsDyoR4;Q86v9L@x9WKC_jIM?nybMxv->t)b?lWi1QPyGoQRXh(k&N{ +``VrG+e6K8DXtmGhCES&1r6HoVMa9ak*9W-DA6Yeeo=has75OGoXGD~m*Hz8&GbvfY4@Wodh6PKLDrb5r>jDv?(I}DXCSi5DPS60Dq5m-%BXSJow={whTo7OV;pXY3g2u=1F-8CpM9(xGE?Ok$v7sSLH)1eJF1!JD`GHk6%f(WLI$XiJ +K83iD?uR|yDo>qqS3-iQt#Rs9CSTu|RrgRCJ$ja|^E8Fmg?~W;jo)&KE*jHV4v|JXf+~uNdZl0Pd$2P +DTV?u7}NffWTr)Eh?n3-=_A8ReBh=u{u)@7Bm9%eI&c5Bqd`Q%mLve3VooVkX~+Gx9NB3;?M>Rg?k%_%eR+U4T77u +m&xU;;BM-P+)5#46;Ty>Q9BRdMX!YZ(I7`p!k9b;!1G6hbAFF-9+S#>CzW0x4$L#9@@DdoR2~us9Fx) +WCGlqRR7p(s_3*DFbF|#7xb8~MGYZYO7M0kZb>wMRt%GQKSS*k93iqfC(_+3?pT_&TTO8Zrk$M{)Df& +;Y<@~0?W;bDZF1I{$ko%`;-@DFxnr$<7WPI9DSV|28L~mDX!|$@h7MKPU=hVh1uES0Os>!LFoGinXhTYBP*YlZTwYZ~*r{=&#b5ML^et|x46`%rVI#*!@*u`Wht%&(a +HC)+xe{+X_V$49df`Fi-W{OlnVN}qY6S0LazHipgzbd+`J!zSyMam9eE8~VmxlXmqa!Kl+!yR!1urf+ +r+$fPV}Gv_5(tt{vG05DjkZo)pfyWaT#V`!?6+<`)`KrMq?f5*GqcHUj +kazqrVrlLz6&nzl?-?Yid~6EP=?Zpm&rDD@jm-UTPLu8#`6sitKJPTH&aR-&aivz2vZ +eL#ZusVQ5ujh?HlzawxXY6on^&90Hfg2vDde=xQ*$g>6Q_^d>K%y9lX2<#(j8jfXt5JGtTR_-ikb@(~ +l{IJ-X@UTWdi!HT?L~huAfsqj%ccymP$lsfV3xV9QDk8u-Z7}fX4sZtr0Qqgk=kUC#LBjJ*V3HRnXC|SN{4!ahTIovHiUEA?ZN9 +zudM(+Vx;|Z@D8{`%2cX98@%W%Hi7Wr;_#;8*`;cTq60fhDD}TO{<`%^_D +a|Lgc*I_YIbABV4c7iZ3oM(%{+z&v&YJ?w=0W7eS)4sSE(`TsTleuMXZp!4m02H{U~>p{D%rG6vQ+dc +XRP)h>@6aWAK2mt$eR#R*fJ+7Dl008m;0018V003}la4%nJZggdGZeeUMb#!TLb1!6JbY*mDZDlTSd0 +mdd4uUWcMDP0*lb#^aegKIa{S8uKwT;k{vP$@S%St@Br^)QwnKi~-Q^x8!Vh%G_7iEDY^q%`C#4`pbj +KWBm*pe}ZC`@z8qMO|%qJi(_YH(W@mToM5?!>!TZR~P`5aom^Me&C&psE_@7PpkfhEPTmaQOw>U08Li +T8T$^mrwr)Z8-`wyC#J*%PYqtwf)}G2T)4`1QY-O00;p4c~(=c!JX>N3 +7a&BR4FLiWjY;!MUWpHw3V_|e@Z*DGdd97F5ZW}icec!JbY#u5V@*3!)Pz5kzw>6N)LE<7Uf?z@IjwC +h|xh1)B1VjJc8FDX_EEO$KzepnIdS=cHo#%OW16xzK3c+uL2f1w&Zc%#&-WVnInmz%wSds(^w}&TTH6 +1$;OVfI&v9VYQFO7CZmXpDZY#8f7nf00k`=7mDwz6gme&4X|?(RnKXYkOl5us-Ah~NDE1AXoroWXCJj +zqOL_K(0I%TP!{gl?JUYt05x&|GCencx +TP(8d_U`?MyEiwF_Yd#NUqAj_(yyQHe}@I+$;})HfUHu&Ie0Id+Yy~lG5<;TIh|)fe+>zeLTRj|RD>$ +s#yoXU%^4T6|ITPiCwm2-dgy<=dJS(Qyl}5Qu5ECU)wqJx!X)_EqH|)6^N8f<&dLm&w_j#Kf+EDVvHN +*|yqD-MS5hHEFlU8$M16tU%t2~D%FKrfevSqF(#1aNBqHp5xSs+g#9t#Qauo~$V{d$N(OsTJ>%27oof +V&SsLY1sXG5m5F2Q&be@%l)RODVd*DgbeC!_A!Vo%3FsCo#kLlEE^tfWwCA3CcJL_rHr8%Z7aB$a}V& +^6^xGGJEJgqWB~2-jEE!OGacjX|!nx#(F~tkJ&>XOldTh)Rc+Fey?3=hG7d#R*zH3NC^8e}Xp)-7B^8 +ly=#fDPtIulLmPOcX1+_)px-Pn^PqsYcE`r%!G~t9*W;W-|~?Llb84Xj=}8Ev=PV3UxlytZ&( +iU3uJ*=fxIDw2AFr>D(ph9LEs=?8}LDB>(r3eU@go(FuhuHcC`s)Ss|2-mfWWYLc^eD-^!9Sgw>e+5(J#F@Jup +ikZ(z(IX5>Y2m7VvRnT2<3I@wYPEP86IY@K9G+yg>9tNUo(mcA-Zvhei8Ws6b0EcO&PI!z8UekxH{_a +a5|&DH-n98qE*hfwiG2aVBXO^P=fM@o&wJ#*x(H82KQiBSrFt*3yiT!P(kEh!fuC6HIt4?$AoSHa<`Nw-ZQyPEWwmf>>Iw@JDuV=(+&nw&g`rto^v-E?~0DD +38XNq6*0TEOQa^GT!~P4)cw{9Ebp{Cqg%)7hwUw5K~qv!g@aR`7g?dl5B3U13afi5sz#ya6iexHT5}k +s`G!r`hFybjAA%@{f|J3(@>6nhem;>eIYCUEA=xk=UP)AzchUVgE@2H_#X=J+G@oh$UWoc3Du2*Ui2 +W*HoVCV9H%TA6|m><)|t7Ee?6{r;&OLhKGmnB`v2Sex2-uYH^whKscHuvP`Cc!JX>N37a&BR4FLiWjY;!MUX>w&_bYFFHY+q<)Y;a|Ab1rasw +N_1!q&5(}_ph)RDFF>ZIqaz=RvT@!(nwKqNV1pJ3b~;eoB^BIraP-v|MyfGFoy1)Rg{Dac2S?tRnOE~ +by@_bm);5`dAr-y^syIxRtRZ9qb%!G1+B>{p`oF6b=O8R;g57Cu|`q?<#RCXupze&~^7SUPt#@qQ1(b;ilQI%JBeZyzfC)+Z3G1oUDPx +m>WZ_@LKZIXe9q2?{&^*IE*``zbuijQjS8sJi-RK<0F}4co+A(;DP)^-$dCTO32t7BvV(~LCetQdhoD +$3aEtThZbU^23-P;;4)c$hW4RPFJ0OWz2yN51kRFlIc-EbpAe7dxcP5-fJrI2ks{JbL98^!qSf9pQ_8 +}GXTto1nSaJX`&mgyopvD%GEs4A0NSGDWrM_VP^v|x4;fmoIpvXpg(>8S +E@^a2gEILF}x@b+YZpz)6T->dp#`g$fDqh+V5>%8D`0Y~bP%E~rs(jL8Svtf$|FCY6)0jT&q*H^yeL> +3Luulx82_|LUxeB~HL3Kt+^U3oH`t8HQoJs+ebpES%pv7_U-#U{5uYCoC2EnCMk&FujtM8Hw82R~vih +I%UGL4!ATMXER*v#F3ok##VIQ;96~}fDvD$OrZ~b5(dcYNeykqq@s^U*f=-<$SJLiJxL7CE$-10;i{D +UcC^CWmzLb-k7wbMrn=El`GUx1E2XJBuA5+`Z0xfGrkv1B8aVu9$OY?w+ +S=P2dH@{YFVnCl&TufYBY_AvW8YnGp(^DInH+yhaak8_nlR=(udUsM +qTBVDvo9fPMG_pIH$862{{H65$rFuKBMacbATC; +5pw7|5X9u4A9U|7sEc!JX>N37a&BR4FLiWjY;!MUX>)XSbZKmJUtw}*b1rasg;Pz +7+b|Hl`&SIkp$Rzdp{3A33Jd+Xl+r_?hY*Y+k8QP%Bu3-ixTXKSBRk$CyCJKCEX}+bzj-sN$nBvtfjc +&B$dSlV0JHaw7(Pz+JE}iLPf}gND`jFbKIPP$!B~wXyWS|Au?zD29ODnKy677w~0+&={r6Ug|YerfpGsa2wOB8deAvTeHI&1TC5tp)->9r3TNAz3(j+$py5B?r;sxTUq +&~>AW;rsF&}Aa+oBt?TqzcTzs<_-`v3^jWsR!L&pJ(%O6LCWZ3LvSCn)vT3RcVsRVDkXzirOvJ=%-tk +Er?cW6sqJLlYcsa&y>*7ri8-bIWo0s7fqYYL<6bxjyYt3}v7ewW&mYh_kKEs{J*%2Fs*mhcj8gJFv6b +*ZG@QdE9Zau_9L8otuSgC;RCGPz5Vq{ary$xMqDGb{GtB~YEi@)bX?2f#E9&o@TzkP;GbLx#|z7q##L +c0%jW#~+N@QrFlSmyJ{y7CUS1vGPZ9_d;!1+;mvMhs_h4RhT67K* +{r99Pl}Ml6T8(7%_(cPw@!KjOX1`(`J*~Vt!;kdCF$;kdD*IqG5i7KdD9BJ+04;(fBakQQ`kb_oo4xW +yw&11pfGqdkUYVgg>P7GzAP<*u8XA0*a+j#+K=6Ye(>G&zn3#4_arY43> +di)SDR{NgIWS?cF_Lzudz=5~D0KJ56BV-XZG6o{~&2drs$PX&>Vht$T@u$M}~eeZk}Q@CTKr3I=Wm7T +`&ymvS$$7A;{83p{%1kX++9J~q|d8q4b#?`DBSP$n$ewGI+rfX*28#D09W&lRI4zEv-cm&4Z5_sH9VU +VaCH=8BrMhRQ}-xT@d5IH+TegRNR0|XQR000O8`*~JVst49#4gvrGkput$9{>OVaA|NaUukZ1WpZv|Y +%g_mX>4;ZWo~0{WNB_^E^v8`l;3OHFc8Pz{Z}07i?t=DNgxzM_RuaJgRBi*_vDx$+j1i6NJf$g`R{j< +9XDYyOi%XR=YD;4wm8&ETgX+xa}$X6tx`Fw`1wuuPv&HTQmX^lQ!V5UI`c{xJA(J7#+cyo_1Ev%n-Xt +HvXkXz1jgz#g#{!5;0fD;5z^Z~@6Qh-AdM}@4}^|x`6u%Zn9K)>?c=hC#u*>xRu^0~#LcE1G@A|*pA~ +1*;flzuF1WU08U)Lir`PX4Uw&-gmMDwnQLYZPsCbxZf*DZXBwnN&^Ce8in`4xIrGy4SQ1B91W7QUGV4 +bjFmc`&jrZE2IbdG%+gpj8_&p&{*UgvR_Rw|7qY!0l#d)J!hwmLzI +J&-1ia@W^y429g_97lsAAr!GA0V%8LIGhu|7B?5qd6Z-)kd0Z>Z=1QY-O00;p4c~(>5CJmEA0ssIX1O +Nac0001RX>c!JX>N37a&BR4FLiWjY;!MVZgg^aaBpdDbaO6nd0kUYZ`&{oz57=XxwHXN=hQ<3Y(TfeI +$+3xA;1n@Q7ASY6O$!@l%4tCkCKu$TL344Og_F3iiY4hg3MBN><5T*Aa?{R$KOce3ciO(-Wgk!l0cz; +B^QzPtZppTgCTcmN&l;=YO#aY6Ppl_Zw()1^9J*rP@g68%L{yft#`PDyN{rVn+o)^SS&uHi)<{M0ig2 +?##->Uh4g9;UdyGfa>JA2d8S4y=EM$qBl@%;IAMahY5^ri4%-?&VPi%?@EwrIh?21klOzMO(%s|!X_d +UGgNgkLhS5d}7GXEX-aA=A?2#C<8Kz0{^vt*x1}`z=DZ17SN@q&2Ci5dFQORPv0%gDgGIpKHOmt_6G@ +yc9v4$hYLT~Vsaxb#?K6!!@nTR@s1cG{B<_Go@wF(0RHob8qLpJeb*d-oitX5{EmKc@2o@cJnr}64M` +@k7JSkqtz=+TB1oDiHpoxLo{bVcsS|Azz`#yLmH5IO^zky&d%!>=!)=ig+u#1@(B6H~<7e3~nMKK|H# +-G12=3k43CH`Pu4H@0w?6X`Tt8m160Gi%r@6aWAK2mt$eR# +V42Ti@ph000FS001EX003}la4%nJZggdGZeeUMb#!TLb1!CTY-MwKb97~GE^v93SZ$BnxDo#DU%@&bB +Hua6X471*3%KZAnxKn2WDnT{2@nK2TB2-bWl<%m_4?ZW_dYYEUi`9~c0VK*H8UK}JTvo9dea!|MOkm8 +&({+j9*rA*rH%Cc3oGlwY`Q16ZoRJhCog^fd*>#lH5-we+N(QX>7|IT;>t$Wa;0pL@@mtRx>B9YTe(r +idqoe@?%v={l-o7BUUgDG)w{X)S=SJ`yqb$kudMXO&c(0V`MLN|Yg5lfE}fqQ^+q>ocB^m%n|f8tT>D +*T%qnkT&Uw>hvV^IuP?f~WR%)M>`c4&ND;kHewX9N#fJ<|;L6|yQE9EnaTGr~~ew~eWd8bhtiv(m&|D +h(6Nuf%SuT_2%te9=BY(hUT;Gdm|Cw~=7W2%dZz~3WrS&FR^g{dEVv6i<=NI1O{-UK7Uua!_`sdBIJ5 +IjUc_E!^HwrItH0%IB*jAw}Y#F;tSw)wW?zE|-r(=l4LQJ>1ettd` +#){gIQ%-ts6N8+l2rgdT=-kMtR+ICFEBVS;gv({uQn*jM!?wHmw&={vparuF@lI!2Q@i4s +Jv)f;$FsjQ^puy31AL#nts|YmGf^G3NJ;teiR$h%bj-5x6}e1+8PdQ4KMdIboRHo73~h?CO`n&tvTl8 +uO6hh3GXI96)!C_A@%}*nNt6EQ`M8y1L*-8LQVcyYtXB5@&O++qo!|^Fs*}a)W2n>GY$OP3)&BD+5AH +q;G>|MUi!ElK|sPexuMb0CxwNu!V>!>Xe)Z_=wD4(W@d2HFK@d7%B%?dEdB;r%#vd3P;`nCUt7;>Z!) +D)bp1w&(6}$tH}{i_FTlt!l6Q(?t=m$yd-3Q?iIf5r{p9Swada$Gae0#VIe8^ari9^KEkL7QKVLcC|D +(noiI6}?jL*<0R$KnZ7k_r;-U?WhT1cF@FLa%B=O8&Uc8o=d$z%%;C{(xLlzFRo| +Mzy|5g6ycXD1voJ?cO?3E)zhhW|}SR(9ctf$x6<@NQ|t6$K<(~4F?d8E!~8&fFkG5OoUV5d!F@m1#Nm +zm!*e5hfwx%lq8o2|4fcR_=k_wFY6=WeKf>FeWNa7HrhpH%t=<7oL6_!f=9T&21|$CLsav52VQ3N3L> +hY-9+jRuy1VgdwE8^S4IKvg?VCe~H$@LZ7QQgQ1CQJ|+nyPGhZh#YXe#{(l!5`)$u`=sC1TR0s0FsA8 +JF${v;j_jnzEQe<{tXflr(!(x1%JIMN1j89RyO<3%)p(3k7=`HlCpc8n0|C?qgKEJYZ9c4OyExee2NC +p6G__u8iTQI%%(W$nO;e;}IxKe?4=XcjQstNhxVG}Bb7E}C!0SfEe$*#+T2)2V9QqAZtLi{9$fRY}x^ +=SOK5&}S?dm+~WDu*`Br`(wBk{f?id;QTyd$C*nk)zbP%fb}r*2zm$W>90b7rhwku$MFfsalytH6|Ul +`-MOY59L_%~}iMK!JrW4ykDJY!=w)VxXkSS$h709F10CZ+`gtUb6 +MgzD^W8YNT&tZfCMhBEF#)o~3cC)fdZHO9C8Pb>u{y=CW+L{;*I4}eeB-EHnxj!83dT%oVw0mME2L?L +kXR+=+P?82(FcYR0zg=Blegez2TE)_5=EV~fuRm&B3AS#(h?rOJ(OrytlfzNhF9kI`-ym)|!&>s`iAQ_m;KFpUm+zs){7w11lO +T$Qi%!Ise*59yj{_N}}o9H?s0yqsm@nJ&4-6&M8TO;}ykS@z{$C9?l0^VfRtmRU9)?DTY#A>a--c*~~ +H2<{Dx3}B7-5+Pq&Y%DJ#Sbrk{7cXxZj}+Y!p(f8l4oZlL`6S(m%azK)2|qpNw~(R`P!fwlWynPp|u} +ovr$uJ4%UH_&4e_Q?FU+PSp+p2R0&yOU|ePI{{Hcu_;>jI>fP&~-gghLKfU^O#NPwAV~)eOwi6t0k77 +lI-;~7#+o9#2P(W9w>u=5_f+4z8xoktvwu-vhsObA%=O~7B*z~~G&s0+$YHPh(qyM)x@snzI(p-+wL_ +7dJVt!x;O*34+;{}6lj$G>spPF`{r=#9?@9{8Xw<>UjhiwrlCR>MY6)p3U+SE@Pt8bBr6%N3+)qwEyV +9=hp>>YDnq?+4iQWi(km;zYeFj!`%Y!4p_;z`}O+2Nppk%g8Prg6L*B-0OdcP}EQRcIQ@Jcqiwcz@mR +b2jZ76E%FMv2M&`@sqym46TViKYhl-A$uhtRCq_9U*yu6s`cU0=x8NOqb1lJ_1{ohme{G&w*b?8V0O$ +;fJ3_Z>wGQv(;X-E!`sVGPn_RXbVZ<~uPU?b989~(7HH1J;3o?7^OwGz(8q|m$mY=_&5eC4tDD1##rr +Dy2opaa5_7^%oH*A9W;U7=%&)+iL6eicRuVQXXTxPNTHm{ZN21qd1H*y7m>o<8{_gh~mjc+UjO^~3Jk +PnLa5dU(2x0Ti?pgmOYZ%cC!GjZb;$xpW4b0fynI16Vv)+B4;{Uy?*61r>vad7iEcT%MKTb}PNYYt)c +9>&WbKlN0rzB#I#902I$&SOEY4%mM%aAOHXWaA|NaUukZ1WpZv|Y%g_mX>4;ZW@&6?ba`-Pb1rasjZ#r-!Y~ki&#yT +0WSI-hM_~guDhk65E!$9}Mol%4CM8Ly>#yI{T5RWo%S&>X@4oxK<0z#=sf7Q@1W272n{qFWW`t5oNMc +P2_$T!aWSSZ4A<8o)&Oe#VSS+;{R&&L2FO_4dbekIMG9|q@dO|)&VfY${Ur{)jjo&8l2$UW6ijwDf?~ +rkH3=ix9FE2}l=nyV=Wc5hu6+9nDkG2UHfo{S&N> +QT=Kdlum`ut%k_vxFZRyO6Up+fWyXUC%3|iEpUuAoH?Q7WaSQ(9Jm4~yxxXWt6=f4WXc?b?F1(b5|=Q +k;o5bjq&)T_g*4(JS5A;$P)h>@6aWAK2mt$eR#Q^tJykCS001To000~S003}la4%nJZggdGZeeUMb#! +TLb1!FXX<}n8aCxm(-*4MC5PtVxaZmCO-52D#pq3W79mds9dvZS1o=C!)#B{3|jnp3L;zKe#ebL?!Vc{Vwrx +^Me)GFFSi&QxoKYM8wEok_zd6H&KHTT*8KWO_5Hw5rMWtqU8LZ-QS+pSo7UaZ>V%wo>H9=ALVVj~f@F +*~SUYem&TK#p0jm6T)Bgkt3zX3|rRm@nfae}O&A?57ddY#dgof^ +WCDU#e6lH!ibKA>6U*pO>=#~Zi*S{N5N1A%~!Ak6Y@?;>>ubO{78mNg~QC9rahO$D%4GFvHKQ?1HQ^7 +F8~v$i$o^Z8cTU6&*KdfxVSrY{^wHV^Qx$pDy03K$CTrMssLKB>>q9LCV9UN!;n$`W|$8m|{=<;^+;rjDtef9Qo^X2`= ++pC-FC~}fzt>vnlx}Xr!xtvIVKI4 +O1D@4KBKbyP_e@BZOHMJYz#>-Cy@O1$EPJt9;XQ2XhfNV0=cS&2kjR`BcmJ&^0=J{d^Ro+zGgypEc;! +F%N*$*`;A+6WMB~J6Jptv>RLEQQRN&W8DOJmx`1DSZsCLhn5?j!->R?lK!Nai<8n7GD>!KUtW3|3V%v0^Ew`KTIl}W9T6WBEd~{FAKc@L@ +U*}35F9=@h%*@d!C}`HocMY0%MIR`NoXJdT(tgou +*K5fN~95Q4`MknOXD;kJ`ZgH!uTxlF-W3?Zb~7~U9x&Kk}F5CPI;^ghEN0&D8t`+x$-`XKDCv(6_c@F +4p8CmKe{Dm$ZDLDL`vd*ffgJ2Z0qEWJ2MrXC@l`uNk7rofmcPhn59SN{X-8wZQ!x82aLR(E!X;~DKjm +L<(*`z~;cZY6%lbAdkp;1nG5Wwn|umx+Jyu3it^jBb#H?HUa26mz{`7}|uJLCsm?G>RQ$g6~*|&S93h +0)JQe!SVsJw&e|XR{-1@dul~Xud`*g@}kFarh@BmHSjkJEW10SFp{&<-y&|6?3|*XlcOM3owN@szOPy +8+`SGtmJOlzG6XayVkYw==CQc0$^BjO>z>H_i4sMhaL0n^l^~d|u~EO{C)dV-z#k8NYaNnHY-nIZF{} +?mI|+S`3{W!buzB6ues4W=8g5+746&qAcU_Cyn2;vhXEjK{cUpM-3cPRKr`B$0K$e~juQ-Y@UZQYcz` +gv4g-3$f6U1cl4^T@31QY-O00;p4c~(;qP-p$w1^@ud5&!@l0001RX>c!JX>N37a&BR4FLiWjY;!MYV +RL9@b1raswODO$+cpsX?q5NuA1VWifVFEec*w9U%^IU?Qlwdj!3bnprffEnsFGA%qv(I%-I02p2y;IDk>{gX&TH+*zT<~1-I!oYTgWN3V5ZlJkL4KztCFgF~r)++{A@6X@j +T*Unl9dF7M4`BC|g0*@VF#;dn!vWeM&*q0dj)mAVnO)+K{|v|87xSi>WG9>0vAeeYMmkSg;%%alex36 +^d}dXMh1iWMAI!at7(oLQ=h3T#=)T-rU`NxNk#UklADw4FT&ZOAbyWAFBMt7y9e-F_$=MsH-qJ;rP@{)!fv3T%1; +Or1wJT3HO0C%g&ud{O%^vPyEi#sX@TE%|6#cdcYky=1y6Ga6M31uu|pg<1q0GUdpGLv8^s2ePuM)-ddM_02jE!|!Y-35T05+57ryfJ1Bdh +2*Lj*U(xn6AOsIIxpOxN`0JQMOi47{FRo(@J4ICYENLW+`@k(YA{8>XLr*RsrMMl$2a9re$9;LlLJ6v +#u7s55T06;o^a4JRnpUtKC~!nxv_L3n-y_7J%7d5t_1 +LwMEc}2XqSi2Cx6p#o4zLfn1&sF~1GZ@roLcqnmw3*GI +Zf@+Ji!25ay?E^Ho%HOK3b81|nv)y+)Sl^tDcnR_Pk?(CUJ{`A5E=VI>{)@ +(F%u9y`?)2zD?-He)O8)#v#5rM)MGyt?M`)$PK_2>saxhM-W`0#j{f0~Q>99w|zqTv!CpR|h!}{z?$) +gB|qpt%qnB8B0c$>DjC4ZUsjYcmp?((GcJ*Qm6U41KB8*o0}PuWg9g;uO^AdtFLU&%sn@uwQvRE(nw% +iPkPw6@gUK?9dsXzAS&-|BYO&{d3T5|oDS?+%33{!Rh6MYW@Qx5b+ef&e=m|JB`Wyehq-d$h_j-;*qt +E>D(AhL`G1FJGRpcj!S?YnJf`yo`zVd;uyOxV~$=wR09g<+Q@dEr{7~SR4SpgXB7SjA2Cgc?pfWyZ!q +gUW@{VFoCC{`|7VriD02>0SS4&=P(9e+~|e5S>el-i~+O^KUx&15ir?1QY-O00; +p4c~(=`e-Wdi0RR9S0{{Rm0001RX>c!JX>N37a&BR4FLiWjY;!MZZfa#?bYF92V|8+6baG*Cb8v5RbS +`jtjge7n+b|Hv-}NbO?n?rhaJIKW3){$`(AlF-_i7aTJZqJ8-bqfHZ@;taWNm3-!iGDY^#A|vlqAV#X +wmh^&`~`&gxH!0*8j#T1}Lx^7`JSE=!xSB$b;?1P%E`G695gn;~4Z5g55b>K_oyQ +L=TK}!1!mtARfloDxe%9A7DWY2O+>c@)C@ktr#V(!8B1IAHl5u^%6~ZGKw?)0R>d-YmyvKmxNuu&Qy7 +^5)<@O(OG{l@_CQGC~m+8;Uq=UjqtVtCo|dJ6#KRQpjDD2N}YN>2BlPu&8%OBi71|k7E5@41)0p_lLA +>6kdI7^4)?~#Gs{%8&8Vk)XJSL#!MjUHYQqQXlgHcR67hk(n)1lUe}xlKaMKn(RM7|sdVOXJPUk;1nH0*Oo7>_#&&urX`_*g3oVs +4Mc3?e5&f^C>=UXz`?@739SfEMND2A*1IvvOZEdJ1>^4;ZY;R|0X>MmOaCyxd{cqdG^>_Uh2O37nl%|_>7&@UY<|Il +gz_A0_YgPybL6Ilx8j8p9NXuH0|9$V>7mpNayK6U80b=U-?%n(TIUOSA1(giC%xl@|sraRlP5rH}k8IoEQ6$yh-vrS>-e&a{x_hUWMeUtQ +jwoJR~63w2svyY3}oAaCb)n)wQ`h5)F-p&6xj$+G1YWC7XG!>0AR!t^#wVzH1eDu3|Q_&ju=T)*zCP(Cg*Mjgh$=G^ +LD_Tff;gtYw6acrS3Q4_TA|$Lx^F|(ey%#mzN=gaX4Ipx8j|@LE`3EGa$T7!~Gjhobq!e`;i#n+(tXY +<#oTo|d2NTh(%8I8{2m}Nz1C-Uc?;&R`2(P>VP^Nhz1bJQY&$PI%Gu}vWz$!`eElGi*$@4tqk~n#U4-72IR4Z$9hAFkT~HF5W6M24a=!@A&YS`$>^HIOvEdREe29)EG6rMY+^~|RNDRWbt0&x> +NX_seo8uv0Xg}BtT@lLQLKr@L73)KJWqlPJ! +m<7tI!&3_RqFypk$0A#I7)eA~6Ba}$M$#)hVnZpe=1Imo&ZR9X|pG%%+UEUM;YMfG`LiEHUudx;F8wq +W9bM-aMYH39(pEQ1Yo)H(QwypxuSzH}mzHLVqn*3}|)h6-`gp<-tR-0l(Zug?gGK|&kBthQxDrc_I0xjR14`0=yE$v4wpQFpQhp6&(YBf~3joxMo`# +ujNaSi+B9<$?^8&IJ-IiaeDk=dVK9o3^<8_Tvo@iZ`l+yUx)VFi=?^(2ge*}*ODxgM*!*Daw;7fj**t +_Y<%%~*V`+FfhN|<)F@k7+5unauaLl3bT6cpIYu1x?J}BJOw%%f@Z6{KTu}-*7^cO-8f?xAFh__PO`f +6YLf%}n2bx)Y_}Q^~gEX)T)R^)r`wB=h$fH4qP?AxH2oO`}dkfl>pw}R>>X32|trUY+V`yU9htPPc+L +sz5Yb~^FiZMMTIlZTO!KJ55$;0Zf;1|j)RZ>W>Vp_{D7NhI8#K-WK@tfZ1PYXHF +f1U5m6}TOy;c6F^Tp--^8K_UeeF5jy_UX6k}Xh0{&0;GbkQA=n+;VQ8@7@h1I?anAZH|+m57i}lw`d4 +swTSx0w%-g*29!@{u!A3Oo?YmcMGj4iQwZs&CQ`CW{btuVptCLB(Jr4^G4GpJY#ENI +6~5F8!y(0?pOBb-RCTdC +@PN75>s}m)ekNT0TIb;W$>Avs!A)$LcG%4f^KhaIb1bSscf^Dk=RJ@>$4$B(2MIQOhN)K#7R|+tfvHP +f0VM6=l1nW02Ny6bm^MwXe?S_HxVQ~EWtTq8rr9^Rjs2Tu*Rmk~Q8ke^ +)pk}Pn&=Yct&9z;hC$}QdXpeYX!(jNRQk?DkWF$=+m1z>g!$g`_~z>3YH24%VX%Hop^N!j9Ig03i*d{N4sZIJ{X$p~trWJiEBK`s8A`l}{9kg(04A2TB +taw^XAtwO#j8HQl$m2@9d@R%FP{0wC9-G=HehY~#n!M;jj!{JAyFpehUr&-d8)8z~ffS$@>3hK3AX +xcNlRt$;p*`6#y(h-KcS-Y%y6=~1KgIk^s(qNCoJ|v1+ReVadV^TIQp6c*`1BBwPb!^$}bv&Ekcmh%% +hme3Toq|F4hAw2+)&`Tk(=w{nB#*5){V|K{tm}iFR?~qD2Til90d!XvyHSD#3MP)o=4)LjSOXz-y+?u +RB3n5Yt6j-J;U&8whd*qKaB=UcZrFJhsTY1QD6)1^U%oej^yAkYeQ|M|ez0o)|yn~j}fkuA@f9HgB<_o%|58l44lMg$2oZA8ttnDiqnX&3N0;_l`aJ +I|8iFBCn*9b9C^n)|_W`s%i48=cve9MM$}+tfHNg>nfQ*;TBjKsHEyoi}2Gk42~TI_iz{KslORXj667 +65+tb4?^5nkP7F7vi=q&O<9sVxTqP}5y8=3QCvzc*Z~3VZNhN2fzbq-Caiai%)3Onyiqe_m5ni)!6e_ +X1%6`XQ@JCEp9Wk`mqS#_9jqMyS59Cz$yZ%uzM4t?(&W_g)C;FSPXBl$i)+d#Uk$c^*PlN-H@51zglA>#-;7j!i*GZ+Nk0cVNOoyE}*y`>oEHL0$&R9jYEyBte{+5@&aoKchbh4kmlQT|f!SWkgur>mDu}EWM+ +(2r_&aoIqKa$sm+G_fHT5%*<#*|mI2zm%xCj}N`BOXthmNy{bVU*r!M(Xsd2Xj~1`-RD}#u4&YMPMCx)EJ(aDhq+(PkshV|3vgJ`9<=NpWRwhdijl~P~7}UE +}MYj=%KJ-TpNeOqQz0L*|eC^bBOV8LZycn>4rLUzbleHHcVp +Ev~pmIrTl@MCAt@tGC5R(Mnq)o}o?(E9Tl<~&&feB<;U&spp?cHD*8P@7;_XPP;=lpn=R0U222B9RRA +3UXqZY|}7!+4~fd((a_KZO2rxa2|htSgXRTys}HPY`V{>MBdrY1K_1yo4 +_Ah;lF}ETkMx!S5Pq21)={rKZIt_(!?CXn(KnyTCByfG3iq~fCjl}<(FbUkb6M;QAMET8vH$iGx>?Uf +BvS(dOR)@ndGF$^pFMKae$i5x3FkSn?R`WOlX=A^Whn6PyjG=FX)N;s+!huLNipr=JHK$GWdDhg+1y9 +P^=I=kBtT9{vm$LrD<$47DrkUkK053tx42v&0k26CTF6&sW0s9M^0bKewa8M9+es88r<7ix~&k4$Zau +0g0R!7q0AMY`?5PI5IRQdW_Whx86M_8sh^9?iwBb#WEa{Of@($v)Jlkdi8%4nYKM$z4vRBJt?y>FMd|*Yxm-xLirGDD%ABWW`d<%k^ +3ot!P$dm#1PTMJ?CmtxQD%56iU_Rhhy2tPm|W?AorD(ZLh3-d5X*XxciPw?}2wW@VA&)7MGf$b*AyU6 +pkU$ct9qwRtwvPh?#erM_9pwn~~t->#BoWr1b}E-#l$pjF?NrbSgY*iEB&BZb#0cLyEbXf_13iN> +KwX>s-y-|7j?OYu7rB`5yn$2FW#x=t*qO!%p3iBk>&7cfrAW1E8*kcSrzAHv6M~AZQ5-m4g6)D%;hYZ +-(12|^B(!G0Q>_1f8P|_kS@N>ilp9NyyLs?k~~jlxm0(|%zq|DvXnJHy8vo>2)b)a_3lm9w0!kW%?{s +P0utTBWmoCONMV2VW1_Ik6T}i6F!5DZMe(gH(z1@Kn`K(GiP +He&GF~UYmUX<&3iwq00ihreaRt)}Gth*hYk*>WHii`iv58=LfqZJjKV7{2{@qU>_k+vjGS0K&MmNy+F +$#H%&0-{RNpVkdY!buq<gTn-eQN +)Z&S&6w%7t&G+0Fb0^^-01sLgDDUxEVXwww&WI7};023~2prhglJC6)C@4(HdHyIjOB_X +>FyJEgdz~-jH&mtKS`9b8cJ|hB#6B&rF#j{B-IqqBW#Z>su#L;NWKs*)xNyxG;^L_YVK8Alfd~!8;cI +~VNG`GHIX$4qf!#*PiPXd^ZmNI}<%^Yj0@_;?v4ruco^Y!{l +NJ;2K9VIBNh4(6~ltFy9e#QEEIm*@X{fB7@|e`Vc7;v>k!lP{m2ec4Yua8yR* +ABsOs*-?y`NRYR5!gIRt?h%>1lk=`coA)4&$Z~rIT7pA4+7^4WneTtovVSFM5<)Ua>hc1t`yE|dbdZB>A@r +!<190F!pz|dph}ITXb-oad1b;n+*q|0&h1%emdei{)rFPwjzYVu$L6~g?FgxjT(1G#}8~}jJ6(9u-Wu +1XlO>$v;vx8UU`uVjasOe?hN%jM$Lub%`7O+1!?VUpZBzh49G{x+%_#mpZ06+^bL8r@@1#Kc`;J(B3Q +d}}v9ULq~J%&N!sdE>iQpT$(H{i#hhSFTtdQFbJ@)w}3CdQY)0`n1~!w`Wu4~R7IVcm?Y9tZ+s#1$iI!aM~d0fG+;6yrJ8M{p +Uh%T$X0q#!T)7+?JK;o|aqOi|f7Dr*lxYklgnTl9ZhGPP>q%R2~N8UxGA4aIZ4uDY(-!%=y2VzHws$|UAx2liB>g?RMbUw-R +RaOs>m(_PL@eQLA$V+HG$^*k$SwyOZ^@~cZ&J-h2-uqpX5Y*`wzIS^x?^AhrN84o;^+c{244Xq>$X9u +LTFI+&<_au7Y11)D@PGhPhR8!2;N+w{kB>LVsdS3O3EuRqxz7?QZx|d&=nz_B{$v<<6dV=u+Rd99=V5 +R1s$UV_*lz11nOI44SCG`+qlLI-$YkIa>W$27KB92 +1<78r1gM+JI7r@d8jF+w94onHhtmj=ib!yqE$kX3aF@mm8iv*H|Qi$FQ+^aTYgF8fHhSo}f7!3ZE+&1 +&#RVY+(v8z?hj-MQO}aS%rNW_)DZP;f~h!}MwaI~Hr%)G;)}QMf4H=r3^uVQy7ZlaExfn7mks)Aci`K%=raF@ +jSftF8~jy#>STi`CgNU=<)QaZf__&27c&Xt`lh)d@m7rmB`lERw-SvNu3=03wUU5|Xez)CvA<#si}Pv +EfIahI>p?~V68w1xeHmd6tMY>gC#Lot_s@W%QQ9X{RShF_XM;HLbJ^8B2LJv~^+Q0DgUD3OhkP(|WjH +Vq-Y&ZP2NNM{Kv)JClXL8@WHxYG_IG=oPL0f3%zMOqILWwbm0;UbY-Ib<`BJ?P-q;GIX*Ok@{x&iaq2 +d1zw5SYqq`rq#LBDN@9;Oc#u_p)mGvxFsfQC}beNav|oMyc4Q2tB20I4_)Fe0ZMGX$K0im=f`X1m*vu +XngT4B3;IAPYP?wJ)+dMH1Abs{|3_?puCy1SIRuo4 +q`r!6yTXB?IJq%6fWWG{r4(zwkYEwv3ksnqaN1&WPk1eTz##CuEb#NxQFc5fr+ol!&=7Eev9hHSU-+E2b(?&ij}1GVj)fz-esMs(TFrFYl5ybTygqqn9sV_ +GDgN9WKgpmejCl&VT_x#?{GP3PHe3%Eh(H9QYcF*nx1k)SmtM*^95v{_^6*SBKc_^duC|RRg_%h{&n9 +qMVw)PAZ?QE<6Tr6_p%Z;R--F_Faj1Y_d-7r~x>+A&yKnfGccZ?OORyYYHhLoXknQr{G92GD=n;GEbW +nMM9MS+BGc^5^|S85Y@_RjuWPYfKaM7YR-4}0|v1ODp)h67Y%#zsCg_u8l%i4!%YrRZ6U(^6`n_Jxz1 +6Sf{W8tQMLUW&)~&k2*X|~hSh+UFuy;4FJ7GfS!l36Eh#oqmldxS~R&hZt~4`T!02|{_){ +z;BeD)J006D$Rw5}l3#Pl&ReoGLjgDxAm~Jy*NhmG^;FqrL&=EPQ8!fdfa+?c57?F`@zd9SAj#9!2F4 +t1>vi8t@Fd;->Kt`J~^IC8?dDbw_WqjJ`jA{ml<=F5_>1c>VhPL;UgLzt2ft^)~Dk>9$@Q{hY}>6;&p +2zZCRMnzRXTdnA<1Im)veZ~&SI}k@kK-L?}>$%_Ah;M;aZ66=#gVTvu-f&^PAEmPj +M8osAJUJAf&mrp#|;+-%plHQDFbkhC3ljJ|s(h}JH+I$2AJ;0hbV1-iIE}j)zS0GHAnmAEk4(;Cr8g6 +Wp9WvYm0Vr{W4FLEERIICuY`z*KGnGI44ybMn&6N^BTfMk;>Z)mX%p7Ps9Zp?X~fLoOw&v;t^cND*7bir6~@=CRc@1*St^QG5R-!kSM+L-Q<#*ga8=`|iQHFk; +eXy34Rf0VMci}HIL#>tU2G-@?}v?)TLh#fTGD|M1@*{`L|S2eZsuC6hq-VauXuHWRF +WZRgI_Ri)&$Ln-}Jup-KLU#iW6fs%=tjGBync$2bD8@dh5GWd>c7(`BCesuU?To~!H2QxW4r`)q11o2 +dQQb?-^%rrT&HUgG7^5>1GfwO%wdnF|`H3oRdfj3wS#0`y>-cvXTLMIV>L3iDB1S}D$_8*z_d^{KY@J +y_mC(qf29LL4^Y9efJQX&5jpbvjQb?7d#g0Rru3xMDG6~vamE30Fje|=0Ja}cjiWF#n!S-$OE;C-qbd3Yz^&m%|BlTh=l?%KHw4Jz +`?5R=?+A0uV@&%M<`&@dWXT1PJC!fD^*lb|Dj-6CG7Tkb7XmBo$dIuf0w+YgR*_3Wm{-8oW%wD>`_F} +sDQXY>rNeNB8;g(47E8{B8DC$MGEp(=4Ewc#92APx)5=Lo3kz|-pK_LX<|T}QYrdw&}rB(n>GpWgWeP +nvNIx*?&b1`DiJZX0AyydNX1xX3v^$-p#-ylR;+Hbd6y@(O7CkIT$dLQREsHmoIY0bND~yPNYRxE-D* +c32I@$|IbQn!#$lw^ShT4d!^)yuakHFI)h?)tdfCwRz=!3U!idVr09-*Lws{VI2UZ%(Wc^c}R24Yjy6 +#x{2e=0uHv}W>??ou3 +8^a(6cElxT~Z<^0H;=_pkApq6M_toLv-~(-e`}6YR>4L!n11Is+k-gFF|Iy8R9x-dvuKT=EoU0Y_d6i +etPzT`2ey2Luj{#3Azivk@+H+AWp2vo~Y7};UEyo9mz8KbV8l!=z+w4 +FhEjDPR1c`uDKj%DZ#{;utiVrM*GiFKU4TTro75TB-N-6W=E|!D(=OCxKD7vZ%8N2F_3nCkL!45ux_^ +_+j+?GRb$%R!-p^X9bkeHnJ5@~xy_N1#R@_8tSR?W#{ +tJ3o1VMS7pURb5VQbhBs8&HJrV2{*6#?{uG6jY;X)3%K3}_vA92h~4^j&Db=8`^F7##&8<@Mz4wF@Fm% +>8vH3pmuu`bD?g7(G|npe26Rf&c0dDja|(m||gOA98DHq;az+WFFjBBqEHt#aSxVWY=I%2zQ2SseBi=PLGXuYqO`l=aWQ0}8GQnh?!!QdM??vusT5IA%#VgYmB@3i# +1B1trs&qDt-SElXaT&meR`f$DxZx@+K6Pa)Nr3x0(G7>D?ZBWA*3stG#yy?nEDR*aRC>!a!5DOW!R~1 +G5A2k)PmZOMR2<9sm!db4q*%SD@aIv290Y*(6h`V1%xI2;hty4QMqa767&&=r5RH0|Xr1>qhGY&QL(` +Vv{_Vjr-rUro4j84i2Qd0kC1>V}CUu|bXIL|>rm$-Wt|Wsw*iW~Hhd16HQ5y=xP@0B#CVdyCz6GHl?l +siID`Vhx&aoln)aBGvUuc~&wFYhKPFwIH8^nf&%GcIQc^dsoEsy5ZfvS;VD@vX$9%H*c7}{3L()5<~Q +sY%thDBM4EQv4Bpd@ri1D8|urR-cGPUXW{G@|ojmR{02GG=o560nPzLUFc_v6W(o8eV9Uh#$nQ8SWhwJg2r&_8q=IhzrqqGddqbbbP2Hv9@D1lMV%~hDpdSFPJdUJ5vWcb#|T +@6>ZqF~aGpzwk$FrA|5nFH_wcyNQHUSc;bv7_JE;A!RzVo-dUR?q`mC|97wX8Se>f}xxE}NKXq{pGNe +MOt&w#el=v}svD4qzT_9@xY4xK%m6;(=(55 +4vOSRVnk_C}HSNq{{i((mB*ySg~s}hS1`y5lh&x?QH08!?K>G;!>@2JW6`BPQirk_3`yQ-?uXA(at*- +T}dL^;ZJTFM3s6rpX&hrU7XX?ruYFku-e`~1l!>RQF24S6M1!PEM-amzIyAgejE$V +{Xuk)|8#Vz{b3@UUsn#q-uAu1$(-uC1N_)7rOhZ26uAKKf*xR)@7P4GTvf};eW$NJAHbN)uIT>rFFZ- +QSTX>+H1s(S$QWpRJ8Fzkf)D~^7PwBNbwB6IZ7x@xAaRZ){g;oxPNP(Xs4tvpI=5F(sgHGbW~Mkeout +nDgwRGd366k56zO>Hj#5Q{^UB?X)tK>bf?keOt-o=`35P+x0R~o7_jO+rPH&ozM?fiF>;zU^R8+1kuY +XR3||{8GSM{>>jsaG_inv2d1MCEFTT+Aqesk9GaL44pIa9_v9v?^AFu1^W6jIcsd=Eyma^*EB +H*$r|Qfj$uymQuzxMbJ;LN&mTH7ZDYyu^#QkX$k#^@dr2xg`U&Z}M>|@aBqH>G$eMgmoz6=d(yvkh0) +}bDMv`m}=1qE#%0s7m()T!N4)ZhfOnl4eCegksml&cG<%*d@ZJ;_I))*@@-uQQ+nL +Oo;MUe8d>4pUmJ2da6U?bc_07tf*NfXD`0=>Fg&Vz>?JAOM0Pxdt<6jxsaKM#cryj>zPM;NsC^9uumE +S)$Q9=&|LUDHRBst8P(SpQ~E&+f^w&E6?IjLrzNa+I;F42+|Tc3C1oC)N{5lTwG+JnjaGyNkXq`h2&d +4=)l$xOp(4Pqub-djL$y?oaY0an63JcjYM1osoOVX12K-E&V6hIh;I5IoNo+|89dsETGN +J?vr9$FIGeZqx_nQ-#!P5X-_2vw&p3&8FxOx$UJ1Sh$i6!oEY3O#Q%|1S&0YcG(ntXnn_2*Kn8vVUKB +XJ3lCeG`1=yYr`2q5ePh5g(H8nEdHij=T7G=t=~7)mfNKtF^)K@^{j(~l^$$HF=FfXTv|{N8u!hXj&Z +rm5c3J3R@2P@wcgoQdb+OYs)~MueaQo{1OY&*Cdr1W!ZJo?$F6c!JX>N37a&BR4FLiWjY;!MdZ)9a`b1rast&>eo!!Q +tq_ddnQt5ymA{n@kc5#}jOW$nCM6{v>Ia^}-9!%=g}t#+>s{ue9ly42FUi +V&zcRS!8a<6!Vd7%98VIA$YNdy9d~j!7)!f5x1H82*$#_sLw@0%lu(#vz4wr*i3TD__LZt|6>irp4El +&dWzBKtmIp?DQyDoiSz|=23w_x?6d)!5jW@KZTYz1H@EfQEd4jP_1`T0bm&{Ewx{ +2j=jl0IMV7RSD=t(GhT^|d#(8PVlZ9*RyFSlN670yobiKw7jmL^D1CF*Xm-b+OvB>{WO9KQH000080Q +-4XQ)WGdPksad0Ei0!03ZMW0B~t=FJEbHbY*gGVQepTbZKmJFK}UFYhh<;Zf7oVd8JlOZ{s!)z3W#HS +`?4~hro8xi+~gjc9SA#zL5A91QH{SWF``+l2j7+*LO%tGG#k^Ss$F39L~IX^JYli^->v9527?uwmRZ| +p_NU;MHAIZb_6=cTiSuvtN}7wT>GD)MbDH5H5pt0RCjL0+n8;S9;e;g-f$^cyCUnMZz1wFJ@0A$2BMO +)oBp-Q6=*rA67+!;#w=f16FAmAl)UDk^oqRUH%9r%DXQS#fh*`h7(KbT->n@v8seEw{NUOs{yf;6!c@ +30pfF1cA0@bq=OZ^#z%>|FF~iQ4lIqwobl7Uzaa~TwDz5vMZS$U)O%&NOA>*f0y=VjG%B>}NE?5V7o< +>nrK~2gHl&|@iuFm_d*+`K@1V4L=*<74Q%<5^T5nrJn +wSlch9i6A&bgo5k&YPzr3oYP$hbc7Ch@L{G;-cD)E4XZkerckC&r>7vL@UXP(hDgux?fmYz*ie*iXk^ +q&n%iaNnhpGZZ5|KO_O#P*UivreUnd?Aue3PFNI}K_N}WS`ASAG)K)0*O-TPCV|-KjOrG5)H~O(BHl4 +6E?BFfn8PvL)Z|jUv6fd46EhjPtVyv~yMk;OGAfV`XH9CUkY~Cm4FcXfM!0r@%w|+y$Ql9rKEc0AzVQ +k{2uUm-)+Y~`9f4aujwvdi%ZXCmH7K2Pc>t5_ok@N6ql1ah(}`I>Y?7G9^hI)!bgWNMtxK_{X&MFa_I +z>iInJ?Zu$}U5Y|;c<&t!{MchVmR;Zprm(GI#io8(djeynb>xiu-Udb@yWF%xW=C1^~F1*EhXbMujwW +uC0uAVB8g>+|*5kF)jJtOBmN(1wW;Tym@Bu%$NDOQdm`G82^pPZwBsO%_IVt7&$yiD;aQMKX(%zHrbY +%EMss-9LYyT;5#V#z%b5>CQ&K5MBo@;fF1KXG-9BN#Yy1b6Cp(X+cH(rsLIONIPa}D@)fgqagRdV8N! +6%&P|-=@fM+sIhW;=-sIrZ{U2qluv{EIPoBSi`TMk<-47iEf+w*`qV_C)DX=(Hyb;jZPfL)hnU!J7Z< +ljFFn&5su{uQPKf~kYX6@(UbJOsRkjklIt|*-DYR`teb#^YGn?2uB9+UVhxOUj)%ks>6`Wu`U98xF5^ +}qvKRG!DvL@65>65+9AhFOWOxTt?`fGl3(N+z4$?yWgDfXfHe{lN8*Wc5bf#BA#Lo&A>MU&aY9Ra~}W +gbG`@ugwZP#Ub>?y(bC68ZcBxa}%zgX8`*IKB|86Dx@zH1T1z6()T2AT-{0D>n^r1urb=mP>)oXhc5!&A?=U;Jf9_kE^wr0Sv8R)Pga{!~s5-iRhW&{E)oh>#LsghJu^{?L@DciE!1%23nVFnV*1Qz6c +vmQ7x_Iw&$#p!dV0P&t$(`;8uZCp|n{_Xt`&BJ^&2|H`vY?=;6#s`VNj8Ul<)2%v+~npXifEfHn{B7_ +Qij)=3~Iy-OI0^%iVtchaJ_xxK0baJIJONh`KQq~>o^y=RxkD;+vdnhW~94LY^!4kLx)7GnGxTsq5NQ +8S!qB2qTgsuZ^33sdMp=IBqu9j|t@FaDMQ92>0PY8u1dgWsZ?Y&(=Ve3XCWv_0Fic&~faxpj(jDS(H# +I+>4dr0!>btXomkq~)KNzZe51Iy8Io<ZxAA?paP<1SX{-l;hZpeiwHAG`qdeK|r +4y1?Mbi+SilyCk{AS>It?v7y>(bYX_=$Zl81qIA}Phj3N-#-QGCa~xl{6o^iy`f6(gKbok<)bYICdbSy6EzQ!6w;=;F*d-8Dv0a`EHe>YH>FB}Z2-sI?z}tk1abBD;$40>yUuTJXTP!Yu0?^`RQXV7%Mp#4_-SP16wZF$Wqld5kUXWP_#H#*40U0T1U(e@U7CC@ +wI9PpZ0cQ}qC6=w?kWb_vCE%Mp-v+s9<7z3A{^YGz$JA#yOAmCxNjy2HqPGnR*^Gg(jb;t4s>`jupcf +ujAa@nfln=EdP92AFeh`T7K<;Uk53N|+0gMB0oLSfU||ut%y}YgH^n%GLpx=<>#ODR?t%J<{4*aRi@Zs!3~NA +bAc*H_ekrb8TLhE@!EUNY20MJ&^I*sZK|<(!JexwZ*Wk6a~HvujW`-5U8Ml}_IE0mko?KwfZTc6HC(0 +qMj3{MU)U;Kg>Z)Oz(;lfGTmDlnHdQy{m?F%?Z>{_>?Q_fkl&%UpKbnW3aBqr>DGW;y~GTOrOSPTP*p`*il*ssrWp@Y0>`I54;ZaBF8@a%FRGb#h~6b1rasjg!xc8!-&V@ADL5dfCv_4-nX%wuOc6(o0Vv7-y`>ia +NHDoTWqQyVrJ-`O~ILeHlFR_xof??l~MG4Uzl-=okYhc%Uw=;V~hby~8zpAxTZsmxGa_(y!=kU=_a~G +^2zQcPLlwK6{U%yeCY?nq)Q&(`@rQ;oNhcn$j@q3l-h;Uhc;kLN7PDiWnfzxz==;a`l52QC)g9B~7gT#5S-+(cw +dC-(ISkpIJAq8>24P0im4ns}HtGnXZOTL?R4u?rUOR-*uabQlwS^Hc&4HT;P=Fc<+`g5SXtm5}6nd+W ++r*j%x4l|{qV^U1ku@6-Z;DtA$Whxhl;w?+B0B=)Ozvt3@pkl^j2oQLRUX|AJLdb|6p^0N`FYPBeJA+ +1)EsPSK!8R(Xdv@RgMUl1vwwncIVokxYK``sP7O?n`Y +Pvqu}`M(>$BmQrn*^vfTmbrHKNoz#jK5nIC_6{rk?;Eb(z65*OX7+x|9t}2uA$fP>xj1!(cNVoGFPV2 +%3XDIYL&tj@`s(WAI$i&A`72wodBE^5Y?2{$#I%iwyr@S)gi+mtl7GVafY%lK +>%%wZ?{k)>WH3!v{&(n=<_Oq=l6=LNZ4W5~4PNM`YffLZGmKt|n_|kcG> +u`K+$1UecOy>Xmc3xZg%}H +C-QGl|vJ6kNmU=aj?fSgfw(kJ&)Du5J8w4VKXCoPXDMNLUGQN6w`^oAFyu6x5SyVkft1d;zqEAU9A)5 +?NLGp%xob+JJ+2>6L3Qyx*NO_k?hK%}~IW#z`81&hD0o3Ylu^l^qh-k-ts*~P%I@C3sMsy!%Yn?9s&r +B*FLc(^aar+!U>THUhbhVRE=U-vp{)J=`jq%S=t=LaFApCQc_YqkbbW1=o|c5Nz5A2vDP6ku5i#@1R0 +$2_hwjr%=K6NGlkxWJb7Q>FzmiyUR`xTqC%{ILRQPX>%rabRw4sN1NVDo5Vk)qB_>r^da;R`OdE4dW` +j3r0&>h?P2;0!gmTp1b)VAB)b`i0BhT!~IrjMD&zuhKmr#M-mcy9-J$fl +Boco89Rz)DqDKq{nZ)KB%x8T)i~eX(R02h3{4i{cou2bc*Q-I!%eJ+_)=@wz=U@`589JIrHL9~J~Q(5 +RAD7id)B!SG{c3~D5G(ysFee_MHln_5D^A_r88BMA$ppPLAn*$S8GSCb|89P~GNz8r7 +sLC<&Fe_w;_DkrHFJ|kQ#-bX<=NDO?{S}ad>>W7$t5?ocxx&kKHyazU5w$;fl+iFi}AaKZ$b1rgot{5 +P!WnO>BWifah4+MB;Ily^#{^FP)h> +@6aWAK2mt$eR#VBC0E@{C002rS001EX003}la4%nJZggdGZeeUMb#!TLb1!psVsLVAV`X!5E^v9B8f$ +OcIP$xH1y98y_MIc#1BX2X=L5P;wj11T6QpSuhiu@|5*>3RlUh=;8wCCDH!~z9QdW}g8fa~a!!`Ykvp1*rLr&q7lg +ZuG@R~27X!abcg!t_r+O53 +gjw@K%$cr*T6(ZCEaGz^h-Qc5T-gR0$CvLr37i?DM-jA*tZeQD8gP6(yZY|p{n2kUoSUz}c?uq(0EJHb8;@qS +|ajZmyKn)Csz*Tlhh2x69M>kLRanR{ +)$Hf8{5Gt)*DAEx#Ab!V#SQnFGlaHcD*HBDQX4?D#+N3n$Vn%beL7!5hJN48ip3S5Y*10_X`Z9o_WYH +@8kuAUs$`t?-VJ)5e>PDDDZM0vQ2>Z3HiwUMHBWRE0?1NE;#1s(N7eO7B5&twD8wR>X0ExZx@9KtbEm +A`K4srohXb$j*9>h9?5oXatBAe$P4}QCX30dBrZ8jWBy@!Q1Glz;t66oU0dq{xlWv{*DSk8PT*xB|u) +=Age8Jmhs9o);ZZ4(7qkfHoQ)?{5>HHWRUZAD^z1iBc-%;#UE02zrsDyq53`Zuz`Un-~c5r8gNDAm#r +RH0pWx^sxi}ijj@E#j1}YxU1|kWX4{P0ShJpb)Ra*)RNR?K{+!j)@V#5ud(d3LxuK^Qo^H|9CfQeEIi%bh;T +O%AjrF6qxw1p#q@QnelBJZdwID!>6pT$;?u`K^pOEv8bh%!|ETdNx}MRB3w%*M>S7uJl-HrbgN^}tE# +{mk2(5j(-FKW1~?T55S$?r5rIVd18qSOw(Xl`J0Zbbo)Uv+#u;ozjVaTtwKm2R85ZI%M +<#!0@|hA{W+v0d6O_T@>J$sH8E2PY7Kq2Ehy#b?&vOb(C`?Pas+{N5ckccJH`2D9D?cz*xizqV(bJ75 +iCG1gGPmt&6}F+wrOuNRjMgK+VHI*7PnyTso`X+B;b2o#qw$fELg>HVBt;1q7O%mLdVP5D(m+L<(#m`pcNmxzoc-TAwRVLDwAx^vOPBnzvZ0*%gJt!&~^N(4@8aOOM +M?9vJuJ9zuZ8Kx=o39dJ(pGj!8#BsGT%gMS#8qaz!h&PXqL=vZ5K;)^UV{(k;H@iGYW#Q3?;?a=GTR6 +6KQg)onvXAn3Je18P#y5-ZOUIIpqs5dJzUffIFOJ%R)%dY`}h{vw2MjETKL9bst+25B%0^c4XiL280; +EmR~?L5lcJ&%XQc7G9r$EfH4PPw}!P3|gPT2|$717OYU}&K50Vn=Fh0q;0lHM!66@-`ecKp;vLVASPT@Bg^Grz>%I25FZCIC8FlQN +lm8?4-wZcxb46hV}8*MyKKl>u2|B%OA>> +xNwQlr7N(jfvdZl!`cqV$wI%x*tqplGL$>rh?SzP(NpJsfPzc5nl#w{Mh2p}Hm!&?Fi^+@CIY8(*=XG +*l=M?h8RBLM>}D`N+8z&eTDwV5-z9IBS#k_&Avk9AhC;Xb2KTLn16TvMP@{DNI5CE2>U?866&adq|UCcF0QpQXd5Gki$AKs+aKIA}27I|xYu!68#Kfi3%_7J%N5rlkNTw+-^3!4L>8u;Dw=2MWh9;0|+V;50%QAAv +$>AZ`f?1OFu0Zd_O%W`$(+$!62{nW-wL*;T6)9xpVj-&iP)V~noGhnxebwatC<$qQXSOlN8O3zbTr@6 +;}D>k{(pG=Z3PLs6_(P|<0rlOU*dJw>oN9oubf%tH@^XGyHUmo$U<WUV?$>9>cu9KE3#GjiM$K>dPuW(|QgYv`lFi=q0;=e}k8paqJ>n +@#5ZA+-`g{&3Z6z4s>0@&cdw;=4N=;>jW4b6q4xy4?MOoP$5HgnraO{nVVaFgH;^{Eb&t)75?qNEIwSVH?|xSNbAtpn?8m+*&j+JX!7lo?4PBv0nEoFDi(j)1DK^iptk&P$|ww%3UnMeVD +Z9Nmy(3cI)JYsWg>7w*4nGonOSv=2$1-TEs$hWZHEg(G_gEKfsPz4kuIwCrtGKUoX}$^`|X=Vc9P#^I +@tN!TXJ$i4l<8Zbc~}pi~d3e-7dr0?!7RK2RizBYi$RXB4dukLq<8ZV`ve0VjS(Cr&~Yen{ebE}IBw4 +b4bZ4FG|kNIQr8#Ht&b&cRf$7y4|p=J-lWDL(p9#8%Bo;Ab7EtWbH=wJb01{?LzCZvHqPoI((Mub`33{)yD22a4Yn5zh9yT3 +Zh7Bw$Z0z|sv}YZp9H_xrI%@Fy>#2o}&rt)I5yfNlnFKRgZg}bD_(7z72TEEVzC(vcUPl_%u2&uNl_z +|}n{v;_ARTzu0XL9#GtCGjd+xe%xC1+atSd*Jq6JIIfRHV^+24WdJyWVZm)V?QUXRQl{9uZzL~NC)A4 +`hz5k#S5dJu!lQ~bE`{>!&E!%w(+Siq0N97zykB}4d--7b1N9EXah*aPc2+%P+Mb66p`1HqY7U{c?6f +2}bcQXeUAiQ#J0JZN70QuTsBU?_*;J_;8V85Aj?dVga=K=3V$MmKq +$yEdV}YrQlYZ!eNtz@@|P=C@6aWAK2mt$eR#T5fn +iJaz008bC0018V003}la4%nJZggdGZeeUMb#!TLb1!sdZE#;?X>u-bdBs`lliRit|E|9RktY*sO0jj@ +^l?*Va`h?kO>LiRU*gVOJRFDwCFCfA1;D#gJ@((8-37phNL`zmwB?thh{a+bzkT84zE;{Yp>?HZ(*2N +DXsc9d!iQ3Ax3b!XpUNaPx4ZDuihW(kQp^gi_AFDC6%V$Q8|K&757NH1JiCp<;+|K0E415S4>j-(#OK +u^W*0KEF}nmYxK%o4SGAR@;$_UP54HH7!>8{m_%d@GYFQ_#1kM_0lE%u?BztMHz*AJsK4yAvwGguzDk +C&o1+9{;urKIal%^Hmi!@!#X6ZFh_|u|!dOeTXMm1HwnqPyu7gCE1L_5rZboPY(O;)*Ksvuh^&Gmuho +-b0RxkjZ-GMRqP+I?L6DOFDlE&0&Q{uKMBfW4~ax7~2gn$SDTea)aVmiyT?s_iD8f@%H$Rp~$0_ +Q;#W~Jcp+SK66aSb~pE}*V=()jItUvdP12N(-!5aR@Sv#TqBL9K-m6}TH9i%EbxBc43z+*&O+jTNRd9 +Q7Ri)cZnZjv;^vvr47~;3=PC+lxzt(tyo7k3D43<=YYZ5Tg|nP>8S<>NALFWn>C(iG|bXB^;vio;qam +ruKLW&jlT3NSG--W?tfn^H^Keq|35CZ}DJD2HwMj5<~w%e7rKwc%I3LgK_UD499h7kfP&(>v|ar;2m; +PeB_xk*V)}*VvZd}3vk>MaNq4~6FRKUQSy1W7Wyh*hI3cDfbbh$8h`epS1y|xyOg9=$NLT+u&K8vSRz +O6-9zd*`w+ho+s?GVE0fVg${L)BdqFDX3};BhlW)cRo=C3RAjvgewDgUMxXsAujyb}z=tWht} +qJjCD?`J;~-5_K{FkYN{PY>uSd!w=>W$y{mb_Fn_?6gJ9M?$JKX)FP9`p*50$NEbTP1%z&6ximWS_DlK>4UEU0qLq~|&MvP|MeYH@t$D&hZgMLjZ5+FRR$C(+DKH9h@0w<`{=K(JGOtdzlA|OTPmiNaJ@F^S^k`DV47@O~S1A(VvNIKhqz-8e}zR636_ErPp*odOh +Ng>w|p{ZC4&cY-eX~uJ!#hz1t1FO!U#R7+~aNHfb@`qizXA32eq)<1~X2U2@bmCl31^^WzNCvcmc@ku +-O?B!6w?grGMx@j2ipx~+hRMPBF!%VuAN@A`3415Njl3i(N+=tVaj34$D9A(RVBiG9V +EPi6O`xj{t(PUE^*EWszLeFi$2WMb-_jlu-#}S`BRx>yoPp=i@ZD#VX<1tX)2YHV2(6Z?V5}z%X>a!`AeK6s2+uDoMeBS<9h@>TOl7-#k`jF@&kI~<8r>}P~a|70C<~ +b8+m_BHeYA#b2E?W;Kgy|45K+<;>0)$etRSK$~j`v@u3Ao0AR~$al*G^JUn*UnGo9pECyRJ4#cssCh8 +K;VhCiXM5hy7G4;vYj{H3Tk!RqdL1!Kfek~qp)SX`D6x=;?f*pYwZC*7DswcPP#)stJ@iZrBCm!d0f&AfBwLh3D?~E9Yt?Lb_zhAAHE4c6hjXwma>qcTDe%HF@vHUi +HpPyz(NK1o=FsP%R=F$+NDmcV0fTF>!Af#K{Zdwif}dsX@8O=fn>dKj9R2yl@(YqpR#4Ss&i2CcoLe{ +8y;z@LT)z4?efIqP&0Fltm!Fc==f8RS+u!~E%Rl__Pk%mjg%!5|^fyjnC}>BAaAk#w;nam!3*uGFF44 +eF*3taeKm0K7lF+E(cjv9#pV0nL9PVj;>%`uQ3NK0owGk%DO32sv+EuLfCI!cxqe~{Ymo82OU3Luaj) +`T`l~IHiFSnqK-R*IjE_vo>#Ndt|@}Sb;3NmRqkn0Aw&dj+DGrlWvJr*&PBu50vu;t-4)I7U|0B|z02 +=TIkLdRYoz&;g00_p|Y2u%u3L*05wf_5*auf&j)-0Xy3NStOa- +Z@}erbc%YX-e7w`c{JdH4>&Fvz!k=4wq#ESgp2XKREc|XJ)-;5oc#(ENq$taidwN2@DV9){BKSF%bER`HTl +nKPqk9kWrJR$WnjX0V^y1=76V5NjOu!bqa;I-Fgd7(L&y~F_|71M4WlUlAJ`6EpVZN?N5coE7g1Yw^> +$750ZO5Gn7Tc92IWy!Fm(INC(_>aPmsI7aQR`%BjO>U|2?8d=p|XN|8e>DdfGEow*G_5j8i@CSUr3;u +-^R>Xw2~m`-aL%0j@6aWAK2mt$eR#QBwb)5_f007D& +001BW003}la4%nJZggdGZeeUMb#!TLb1!vnaA9L>X>MmOaCz-oZFAhV5&nL^0;R?YS)D1%?${l*a>i} +sjHZe0vE&(#9Sw~mad(J#1Pg$YPHFnvySo72d9sr9gF92s#5w|t#bRHd1rr3pJ1cW(r7%p3oLiAGuG6 +)=5+5)!QQy)o;DHeazS%E7U*vjK(J!?;j7eGINS&r^JQy?ASW +-<4i27RTv=mjmj!Crh!c?<5yhfX!;=P2(!mt7x|Vgm1b|YcC8BbB!05rl{3HH@cRkcGs`{YB<^exZ#d?z3R)}kh3M8>YyGF=1RmC7N+*qUEq7+A#&kV{x0P%^G%zKt>bkQ +psJhLDThR*xbYZr<@9H>8EFbU_Qekfwy_PIAFB*atl-EV*4DL7Zxm7~}0Dyj(cBaT2z|KXDGjvJ8WRA +ZmX9_+#L9l1l~?a1ghI7nzS1e2A_$M+}#;$cP>LYj*&7Mhr|%t5DZ|CGm@n8n*s)w3N<;%;xOSNhETV +sk8B&3xTe)(ufi9N2H#EAuqfp*W8TsXpWlHMM@-E-DwR +&o0x<$7V(^kE1@A2C}|ozqAFlnwE$5>YL(vN7%%GV9o5d0s?A0fNvXwB-hgRe!8)42;G&(px=gDAM?4 +2r7z<0LeJE%OV0&Q>^3B-W~&}MSlf!@G64B7jN{){z^Ebj+{d(TB +67L1QE5%(l;?)SkG*~89ljU6G*fdq?h9IH9$^!4V>M3!R3uni6RQ%K;Z<%ENUkC&^U45?NGppWG)PUY +L)7~CfnN$nPyn_zm{hrSdZj>eoCJAxWrRLhX;qa6*GlJ^3#D`o`?CF;$Yu41s)R5CI~19^Hmrm?Te@< +Ssnqng21U{0(4~d&k$U#*8T*R;dsqej#U81{!^5bq5&&Kj30Xany`xG%Fh@0%8F&-w25f^Q0B9UaNVv +6{J%7#)pZW?3{zZhCUbR?NIoD1%IKYc-qYgM0fD1#Q2vp;j4;A!H*Rm)}*l;VbqR>f3V6e<;IJ5qJFNZ=c~X?n@j?t6XZ26@9-ksCp%h4vvSdL!u +}}4$pJK*dIk=}tU_k7A;sa$~i7bLN?eK+NgJ<@v +vJsnw&@Sk^=5g`Z;T)o6=8Q};$FfM~iJXfEwFd``mynhbt}nqu*g_yUM_&F|F=)~XCkO_Fck+49HPSU +NR-lf`U|p$wymL5+5EmCzv)b5*dlqW(YFMk>B??6DC8n8D6pcebQPm3%BO1i#se#s`{TO27CHfKZm}B +8o*D&_V4z_YM0)(~==&uE`P4C4AEZaHEMR&x3PI{6>a +%NBjB6|Mh&~=(jJemz`X?oeM$r&TMbx7OCLLmULyqB)$`|day4PbpmU|Dn_EOtVszH4@T{FKcZvL^k6!(P%_-X~eh*4E-Tuu>XeJj&ClDHdjR>l`V@{6q!Ml +IV212(;GuDJ672qdod{S-KP^iLo4;6>BIu~Z+z%I_N^+uwwU7~3GpnX^vJK2%qWiVbfA7hiwkL8yTNk +Q@dU4QT@{yzTp)#^>M>;MZ2YwW+y#wnVaM+6gE^+)C$ApS^uoXUP?mIA1MCr8L%v|(Lzvx{<@6GK++7 +5qnR1KLsl`tr<_@=Pygl?EppG3PEXz2}l@Z~19X|5T(mvq>jf}q@7u8-dl9zI0BW7KKAy__Nf_D~MSp +7STEir<6`(LWH4%-5gFSyoz3B?xElQ&TewNmIX>LjLkb?ejB9W)k+TKDomG|)#d-Zt60IrJ}uCOIu`A +K!~r@7iXP)6M;4f>Uuld8&GOH^usUplhxRuu{Lk1%KxS`d}t3`VjQr&^Dn%qBG%*rfWUO1s|AT-mlXI^=pwG0NYBKgU3&wJ(*;Jj#^jT#EBBRKi=TD4{|$Va#bij#z4N%oY +Wr|5Q@OqE}75N22+F9RcRZyFi`lR;DG~_T4hy=)k2yb970oyR4!$T}tUB@1 +KS7zM04+d63KDT^R5{6w?IaTM>fkuQSuvg}sZKCZ0=dX}MKMzjq=$(P^@Ev!GJ8l!ZPg@4M_l7%k_S> +$GcQi?O+F^@S^7PX6NX?~S+bGdc|Gtuje5aeZT2X(arVl^e%~=x#i+UNK&Od*VvoH%egDJB5rj~Y<>H(1#D=eA$_zjcZXs=%mc(cB +6q-!T{?pBf^W`RkhtPKxx#Af{KmNZ4514;Zb#iQTE^v8$Ro`#iHVl6EU%{y_HgfT`*&aFrDKK0&AV84-U9({5f`j6tYi&BwmE;@_!~XY?vV +1?fV1CF+l=$%@`B5?3fqVoCg_%|%dgH##yU|-~p6WsSfZy0WejPEyqVu$cxF6UH@{PM88gkke(_!7xc +F=J?eYm-OfA{cfQ4|~O;0wkzBd$Z+;}%O^Ho~ET%XbHy&un;X3gFLlpc(~^7|scm$t<78IC=-S7x1R~{Q9xBv_oH3nFEvS*O7!rDeEHx{+$9SrPA+;+%s|#IypfkUUkM|1NR?4)BvA)oKAM +eT6jX(>J5T^3S`H~3%7w@KTia|jude-UFQnNP@jcL_G@lUEvwp*mn!zbsbIz%bK&M^F;rI~cvR}1LW?= +(WI9gwqoNCc-43=mil97Xn$Pk>TH@;9G+=l`ixkwDf9a2PGMi$rE2hV=_2n*_s)s+eUbXp=9HpI6t{p +!iqYo^SCvW1uK6uW+kSm0iW9N}M#lPubhe=CZ +*!$a6&S&sAAd5^aq1PUTx0W$_Da0TADY(d%953L>OlcDke$#fupS>r4Y>j-Ka^x;k{;BTV>6-vKD1>p +4d1r-_gV>t@gVnKP88>rV)B!HnIcxqKjq>(t)@hm9U!=R)?G@ZPcrb25yO0!~`Uk0H#5J0ewQv`@me^{6Aen-G`5ryPW7q +F4Xd>&>IQxYNIfT8Gw{wZ#~@bOQ6P)h>@6aWAK2mt$eR#RGmvL_-1004sx001EX003}la4%nJZggdGZeeUMb#!T +Lb1!yja&&cJY-MhCE^v8`S8Z?GMhyP0U%{y#A`iCO4I3I1bB7>vi(*+DG%2>BE7Y?@*|*Af!rjTPvF* +Q)yt7{HC}{%(v1A^PR4}OknmLmReWO{55eLU#>C#WI>jkb-EN5v)W)OKZ8((e|LD?2$!$Z$e+7iOABi=R +qnf3j{F;b_y?;IH27c%}!cOPe2;ykv3n0K#LVYo7H&%A_gH%Le;h!G+{ +~iY?DLL`{3?UMtjEPpxgCi_dC +rqvXdaO?DMEmhJ7Nf7o?5`ui#nSIDA5aOb8Yu&8YUGEf{n8tC~8gp6hr#^^fBP%zP3fLQLbkWegqS^` +4r{3AlkT%#r#do(aX6Gp+o^iFTADut_?&+j6_BOgkm7HWVC3@$&ATZ}~yX&-EJJ@a%`= +^ali_Q&;m7InpXXetmR{Rjxw7eygMXH~=|notzYPMDwqB?PMTL(6tLEUOcl?s}Dc-_yh1jvV%;GW6Jx +@4tHy;*wF40%9u^#-7!r?3$Qnn+6I6)wEYC;+0=;1o+1`&NC7Kx@JfM}rLB<5N?3nnD=I6yjr7OXSLm+{rDbaKY*Ei$LmAGTOnNo;xSbJTJ&bfI;`795#iO(M_GienBBMna?5i^o&O}#Ya7Oei4{Ft_ +NQ~>p93+=~*~_+%Kv7>|&B78Won>*AGTENbCJz4cJJQE6dc8Ial&@m~)j2bZ7`-2AO1oi9BTRUG->X; +?VOWlsaxi_K?v4$O>r&lZT#o&rI59v9$a*@o8jU*=Yw2ko86M&f0KBhgpZv@ZM?n_Q8qjW={8I9q7ZqivBpErtRlrPrLp`^1Ajjt!}Iy +~PhiJFa&R}Gw`aB^2LJ#Q7ytkq0001RX>c!JX>N37a&BR4FLiWjY;!MnXk}$=E^v9RSX +*z~HWYsMui#V+l>kL;`sg7Ax-Hv^wd>Gz9k3t}XoKXp;JLiy;MA`0Tm=PeBMV`xdzH=d?D +Eg!Cx>gys?wi8Mw$W_eD)!K-JK1d5gEU+Auoa?WYgq}MEutt|EM!f4s&=!1Rg1N1YbI(gtE?7U^NnC` +#cTUGUD0u+h4Kr2rziW~>^jux-ux&Fld^YxSGn!~$PR7r@4x5e-?IA&eo2}8vaky~*=6~?Xv$WBw&IS +Xky&qKrTylDH*F&eUdew%-tbzS*m<|fmC$Xk3ZX}%w0YUATl}x&sz=09Hhr4fAR8l8!>deuEJSC~b%O +qEv;|(2e<8f5c9F&B>?q7@VR*?6Uo75Vzy0Ioo8R&u-n{<(#k-f^zq)2uEWS+H(`2z&V3YvxD<7_GBg +`xMEzZgJJjZ24#kFQ+jF%iw)g;RWgAc^t|H3-e-pdkXn=Lo2=ACA>e^-j4Eis%E-%ZQF4HDy>9A9JjM +do!Z=u0WqEC)cO$@5r?YMl-WmW06#0H3ne&Io;*TB4FmO9n3zcJZA3);7XgjvoLW+)lDVs27)vOF&JQ +kD>s$@nJLzK+OGSXIiKj{*QW%+KmtRQNr}98SDw9p`6hk3lI=S0-)kYgjHNC1xd;^6QR^c>_xw+MPnc +$0?p)oWtgDVl*;&Xt0d5XwQG99l*&TWxYXi^pmDGUKkLYvF+_TZJywwY9LK|w?ZqJq#31hw%z)#0IZ3 +A+WLY8B04onl!IBNxKj5AM#S4zx=y5@Dm?q~y;h%+JJXFi3YS~6Y8Gt3EFSB7^5;FP-nk9n`yxCcx^* +~|E^K}ajfoVAqiE5v7XYj;2kXRia!<@=3Y`N(O&JHAv&S$uz0(;|xNq{fYhAX2n#PK@Xd!>gbQF1$zY +s5!$oI9Xsf1rh=j006bUueuowR}uNpCY&=(_JM^96gCrcIo^%N&di?n?Mv=q69A;aRLjbkfFX4IT8lu +M24IpceFpSEv)7Z_930hB%A>U|!fp4RyoS{sAWekSc25&L3{vc-N{Ogru|z(XW#I^~?43s{xQKNVb4zJ_&~Ujly&P>v8(c$v +NyB>hffZ7c*|V7fK^QewTZmHJC3W>i)W4LS}xTgr0BnX>1X{#)xN55vk<=;kp_ET-6oY(~36 +QawV~s7>0ss0A>QgJm%6^xCkMU{5T|`xO|CHGAKMrSRtI?O4PuV3P`dSOlGdioTt~HLZ7I!7ZJ^Xlko +`G(t7hc<1;a=<|d+nQ#MmQ8LJ_L=z8k6ZV{4epYx;cB2{w5ecQ{REVX}R^f6=WI!&;KD2VGcucn>1Pw +47Rsq`KOW&i8hWeP`R_uVQD*0WPSe)^zS@KvOyqg +pK5F-xyhoadiiW9ysil7f=BV;0z^zhMj4(j;BXWuPY5?C0|y-*HO{-RY~zfXQ5Jnw-{DbiUTr6G6~A< +c*vMT92DXaYuCqTWtYla*gUcRLN5`v&5x}dC(0H;T=|p18`!HJz@zkxV`0UlGI<5(gMDD(;R&h#%BpH +Xz!m`k)t{OUEk1rUJm#9+gX7rHq`laT&M+dLHR;csxXuPygy$k3*Q95b<>ZRs87!&TX)QUAwT0=CuzT#jYjQhPI-miFZ_kbhWMKBhy2jQd@y;1;8wP +SMAv`Qd<>TFsXtfg>xrO6B@juGLI!hRNV^8=mU9ZM%esBB +nse}f$DCeKzMZPi+`{~>e)TRxrS?ff#tqRh0+}}##wTzCBrj97oVcGhXiqqYu?3#rQ7Uhkt|A*fZ*?W +)mvhJ0jK@M85j(Vc1oso>l5SVavtmXyg0&$mCMe2_E?Rx9x%3{NeFsag#`<{AC1Fa8`P5-8*E8}VxzZ +IdzDy2uHjvjY@ml$Fnotw=r-#yjM@GhMcv6L!aW;=nEY3P=jTG1>O(h_L +7%6BHox1K$Z;S4IN*#z4_c-2)g;{m>~b@ekHsq8FC88<>&19QWJjv$}wtxc&z6@><MtBUtcb +8d390EP69y;zVA~s;UFZq(ZrKi1Bn+8Vz@44w!p~Dbm?@6`1IBVqe7U|B;Rk_0ZcwR&IAa-N3YaECIw +!B3z#!yz|_L3B&VKJhRonF1dLCfhzA(8nhgO44HLQB+<7#9;PI^WfePf +C(7)TUk3<}-XVBc*I)FXWWv01*$6)rWBIw-Sz4{5v<7@6aWAK2mt$ +eR#QPhT(9B-001cq000{R003}la4%nJZggdGZeeUMc4KodVqtn=VR9~Td97AUkDNFVzW1-NSVapOhA3 +C0Uge=gyV58tMYFlIMwSOmW5w8xZMtXj>$l1V8oKFB4&eeWm+SG>SA|7qwDm;l{a&d3rm?ys{@K7c5p +nBIIG>Y$jTc%mnUnk8NWO`hMwo&M<++8eqW40&q7$wf&;BjynyY*M1Qu%HjAYN$FyCH3?fOS!b;X?Jnwqn{-YY5ht(I}Y0p1v|4H|%{%EbX +;pLWWN1Tg2_jf^-QmRm`NUg*dz# +QVMkdp2`x98PO6rvs*M}2YI(;Uh-0ewpskzMdz0jsGIuU?uDuX7muFW*@={4iKFA<@e7$v^c~N!Tx4M +q`@rD3c^pQDEEk96Z_b!Exk~nWOa{E^x=nfVS +toBlnc(HLmi7;&I%sfe%6Z5Js#-5a6ort8dtTy7%Ojd*z7N@Sb6Z4 +@9~Y%=|Am=53c^uGwk-6i?OF0a=KB-f!v1o}47N-;?}2u~3XG02hHgSwwIP+pEdc=ps9n!W{+F;<`jv--svTTTcG_ayN_@!Wx*gkWZ%%NMvkv66WwQK+4yzVVBi45q>fjC6=pWJMpI8{Crv7xRXC?~L*k$)3G&%6%auQg&O8j|8azz(dRkG7RWW)B2*U==-J6G1T`-HNQsF3~ +frK&I39s#Qil0|p%!)s|Jj4@MVhYNraAFS=j<4MpUL?;!;Gh1Ns52_ROdrrx$e)Gyl1t0&b6zcW=Nw! +6iA;e@PcUh9@+x!nuO9KQH000080Q-4XQ|r5509_RT0E|Td02lxO0B~t=FJ +EbHbY*gGVQepUV{=}ddCgpVbK5wQ|KFbi%S_5tB2jT>@Ag(#-bu!B9(A)x%J$A&mF+MP2}+nyq +=q1+sHWz-Uv~o_!G~mfDqD4`nu$aL4WQAFUv~qRt94$KEX@}SnJtc_{+X*_&C8|ziQiK>w?7MEzg0yF +&!KIhy3Y#nTP0L^loa`jmAf@iXQstZQk7%&VO`2R6UA`4nmogqJUR{_!Qx>|Lfxo~9fdoEJr243VfxnW|tVRb)xLm2oVxEAbU35lgjB`7Xp2j@eSiB82(xr=zO*y2vA;>It +p*7ZFB!N<;lNkqS1VP%y_R&&ncCZBPG*!RKXFF5hKIKBiw6VwIQTeO|uKt1PBPbzc0;Q`vs8(VSHJ_s +@E)Gd-4mmdGroC5B}l!u)>~Q5hC_UWPc~un_BYLSK-g+7nkooybmwV-<?CS^f6q<=de}d!MfPBzZY`{cQ60+u# +5C?2qp}Xbpp(ePsTnh$^5G`*?Y2L8?V>5I`1rtzgHHmz36YL29jH4pvkPt)1$)6vW{zgi-Pu**b&0+O|{lgHtvM +q+8k0sCjAN(PD#8ngw{z->c^r)yYuwGxGlShVB?k3a{R${ANI%S%?~Y>xcOl1lM;DolU&3#doFRWz_N +#8UZ1u;a7Y)UfNA`X`T +uFTt!Q<5(=JbLBJ1^db%vjwOL^6nd&}NYT12+qjnx8AZq5>$gmxhc>|ilN{|WM`(wpKwvk1ip#rfDFC +^}qVq|H_$R@DgpnbHLV0x`o(Y$8UX(N8q^={3l&}1r=0^c+}Ir;t>wFX-y%Fqmi%l6P1y?S@yjTwFY< +-^7QgjW~m=boM@Y$vbMGUUYqtmg*#_xAkdEANQjz5wYgWwa9IGLLP0239YegEhbo*irfLr4ayhir4Vt +c2+aVNWwL=yFIGuNEOP}sw$BWL<@E+`T~~3S0YWuXo!g_I5+UWLlTCcaLll8ZoKO$!_H`#(f@_cE8jX +rAO0JSY63DLopM?RxSsmGvw+t;1$fZuNaMj;&~?f(lyL}vfu}xBdfX*DYSVp0@&VSbK%vkSfG;5B2}l +DzBk_Qa<4(WrQbtR*5**fy8@C11pmN+Plpz80WN19WC>W}!sdumGQR^|tB~7qEBOjpyz@cD%^PKF>5a +~zcH8?Bz0xb<^^MYs5^1mCGvE><=u!zHk>mhha=yVX2TWdvX=Vd +ASql!dN9tk&huY%mV14K!*Yucm*2384X{$tFkrfr;tN5~%UBde!yEJ|AhFk;%M$cpli%?F +wEo+=HLzt}A#jKNZs|-*@Q`NPhC@G$=pY6-*zsZ;-CJZd-VD_i?@NAcQkqiuX@C9rwp3V#9<*DDA +>9_89MLXIEUY}_$|hzgnSd+=LLm%wo~^+tm}3R+yJBI`6|v)iMt%Ap+Jp;0ZvNcvQ}Vlt79R%xTw(yc +LB*~2P^I1r6z26GvsG1W>m8iRua2gsb)TH=RX4)BS*l$k7nMr>P9sA=>PH5V*3XfUeAR)Wn!1_TXTUV +@0YEY(ZZlpzX|WnSzMe*%JsZ-LX2IMJKJK4t%ih!-6xh(3l{fF4UyRsmpLmB9lg8`K0u)Tjs|tiA}6O +Z#?G4f4?F%&8|A5P=GBk9?yh|Ne)w{P!QO&S&fwL<8h#(92VVoyrWhO>a8{qsI4d$>HnZ92iTx=TOt1 +DwAZ8lmKtUVSCirAfyN^AjC>54rWB=l}dLwAekenvo4JH$TjfGZfLV9=$mk+XzSXF8_*Qw*;1>wvOqGiHT@nGdl)Svf^Lq*Xi^26m*t~{mj!!P-d +o2{t>tj%o7Nb*BtniQO>pmkO3g;BQsXUld1uZRX`CUX +_WjYfwelODq4HckFlk=P$({o?}W4XVkUj$}Qyyh*eE1Z7D)+l@o12wGmO%ypRi-O@9Z8_@mKg#D1;j@ +Icu{bt@P|52p}r`pqyc)P=324)D=34O(}fwpJs&edNuYMm>YCJCnK}f>OW})VVMbrA1NutbRKb8-h?U +Q|-q#+I}OmV7FacuGQQ|2TQ&Ygxb<{=NRW7iDzim5laA*8O9{YD^Ly0wiF-;7JldjIWdITVea)aidv{9=9fWnD}aJD(@ub{Hd#x3sel2*hMacHf#Jc!?Mx?;&~x|RD;X0htoO9>J3D@?j>p=9<7{iy(NZ6H;~uqM_H5KMjV +K3gx3|wq9cH<__u%70&mFULE;@32G;%%3SAPN29wi|Hzr-*^*}q(T-QZ@EF@-O +beM1u)s6}C&8exMpthdcAa{!&#%tjh7_c`fx!Lrqieo*vo1KHQE`9{r}wR1oBLog7Bnp{dRQH#>e +XgHnHSjdgAq2D)%D)p2(&L1Uxe@JPBnA&$-D%jx+kWCKy1c6YMWdcjS9ENlX!01yS;8F)Sf5c8tX$DO +Kltf2wE#>q7gfpcrYFk@uX^Pz)Ndj#!FP!wEF*Pzva^E`xkcO;$tR5>AdCF7PT4g%7Yw3D%ZJch?#%^ +|Z#Qt&0{O4nK^0z@y#bK>6Wx%jvjz$vD~>5t*Uwskkthlo)c~{iMVy;7^+myZWy#FlS2(R9qTYd7lN_VBJEI +KtAgR-;~df*lSrRn}CWaN;2nj&?T6oGA8$SPe6DwW`FPDK@%ln5>qy +{SSqtZ?_G1A;V=rh?u3V)&Nbo*fqN6gb@7vp-V>5!lO`5flvjAdOt{Iw3#_TAp@ +X_jLA41`0W*=qq>L=@DgjKIY12~`E=p||K7SD`6FTj_#v14e#X&=L___cn>>&h)jB_@^Mx^F20!hm& +$qf^g>t_uxFjc~LSuDN|R0(yhZa}OW(Mu>NPdSsK6Y$;A$dOpr1cyD?F;Lk +6a_ywGI2%#XDvOTLJ&DO---cR!_#^{H3tw4Z5MmC7F)(aHm +ExfN}{F0iu6WF^s-jDk+T_muPE43A>NdhlRPeVL*&DRT)Z_z1r0Bc}Lp9syUtXz5r+6|F;ic(T4-VAz +H|S_sg#?JXy!#H&^dGbs`pkmi&d7k4~6wkP5M9mUs*YP;2ZZ@3Jz#A9w4lOTxTYZwhn8CXx8R|}`9uK-TkVj-3WBLKS +#P(6&57E}EVi+%P6@5Ef;MUGET{`#N)@$8w4d~ls(Sat~lMb}1`V?g?%*o`5^;B*I6-;~ucQXdW>fk0 +%jiQDLcTt}T`Cb5JWDiF*i#i=;X^^8sM_&VuEYR<||K_}XY=}c_NCZ6`lJnh`u#whVQwnb4RvZKI&uY +rRnH#caKrtO6O$el>*4Q+0?PAdwt^{P=>eebC^f~lOeTI(27H@luSeQ))o%|+w>tbEg@=`p))cE_-yw +?U&W-f(xwL(H!)FcC^`Z;d%eMcX!Wn++@nqg~5Sx(ta7G*>5akWse}`SCGbiVP_Ybc$thQTU@^&>ppf +YtOi5EEw54l=A$uqj&A`0G$I?wx15%g9+OBspFYU%(Tb#&}CRd9+YJW6E^tkj@txwp2$u;ckQN8)AY9 +jFKjD-9CfbvUcl-uJZcfX_GJ$PPSCKkm0fz4RLfGq!$JHE&-aHGcOo3k$PUV(Q|e_7u5=@M3B&ztv!6 +TA5H&f7i15?7xk0huK$-AQL@&*svlu+;r_TlS?XAAfiEN&09ZIzLGa4R!Cav^o5PtrvX1% +b1XKh>aiu9+d=xNja&p#Z&svI@mmyrVXHnKoVN>pnU?^2{MoH4}%n9A+gTm12!2Q{U120wK2owBIq_X?-2t0l5>q5a@*^qAvT3z(tk7yBx2- +T1%t8iQt+!jLw!^Eoi;d9@bB7kGtf#(`)-Bna)=8~Iy$CF=Y;!J^1B0|2?hEkib`bhelsCF*gesTpS7 +n{3Ye5V@8Kcddiq6T}=8d$)pyC%sg+t%X1Tj8pQrERxvjV{2BW;Egt;6*UxVY$xKqXg~1o +#sfJ6WA3t-+{5{3I@~}T@Qlkg5mQHb|F%B>EC}3yf=Y2&^A()eAovK{se{NMr+4uLvEne{xxvpj>|>1 +SP)iV*!2Kfz6JNn(^AfrXn=F%S`@WF_kROZbViCgof?p>yiQ_AO-Z#){Cg?QK*|T2H)Eg{wN?=5wy2; +1i`3vTJ*eoLjjSPAPDqt=?F`AD(5$UaDGrmRxQgV_HTroORvK`XE`#Z?VHgR%78WpcJ1)%Drub*YtTP +$A`raq-Exz2X#!U>k&M0<^e0Pgc&jwskaRvL-LcPJP1M9q+CBt-BO)`?U(gEpJgu37GH3lo*YsdTi#h +^uUIl|vBq}j+GaL%RL=wpC=U~Uius>^E2Uf36wIgP(j=r-W$t=|WsmDS4V5*N@gvAac{Gp@`DBq +S8JumMpotQo3tP;lkVJ#D^?|FndJZ#H6Y26Llwn^Dt-G)Td%!Uek`TCnLIcFA?5nh8AliG**OG+nj=# +f6`LaXX^4Tv(0Y{}-BEVwiw`z(bN10uTG1(1iPVYDiyTTroPl-ws76SmjNsp_XTMO*HTbdW}z#~s3n!O}PH{fV%ghTye+k3DfXF8qEdFx{uGlf5 +uh6lrp!ySijbyB_Fc5A-lu>9je7npyd}2?>gNBdcnA;!V+%KGhJUFUZb`sEZeBQ<;GjgrRBt4^JC(s=ukFI&ER4*uXvu* +BhHt1zt5!z?<9>1Pl|7nB;)^gVJBBXRB2b<16EW*Z2@}^8`Lw^HEY03#-bLA(PTw+JgXV&*MK^jb{SG +^AShtNk>sGkBhJC~pQzxk{{+$=g;Pf^Lh-qinDMd5zk%h5g2cYzID9Tn +V*5(?QMl;j%T6)xb!N#z&gq;v`Y7ofZ+j{t>LO3q2gWyujR(RZe(S<|t<8m~@%2KAV&wXP?i{ZQ}40a +38F!-1P1>n|CWm0EpG7a2U#;*j_D`gmN(CcGBm2!aPH^^pg%Xkz2Ve4?g9N9o%GZl+j&hhhHGf|k)$Z +wJIM^aQ_@pQ@tciJG2Q8R@{#VqbVjIJW64f0>$cPNy@k?_xR<7oC9Tsdk=TlazYAo6|HhOoh^lwM|Ex +PMUda>mY&remI}Zm18a+MY6Lje(DW#R@=qiG_?4j;-4iHGNOmJYiY2}=kyJ#CV@oaX}r9nNPl=bHkWX +pV1GWu&UTLBxzLn6%cG5n9<6wAq`hg`i`MKmcIL&Q$Hdr6Ozsyd}C9J#cc`%Y<9HL +9WbD)u-K=HDPCE2MG4BbA5FCWRdf;AMPvp`%ZL5jo3EyS7Jma!O9KQH000080Q-4XQ){t}Psu +UXv?{XOhd?B_#_*zk6r)K`tM5(q4aSedPl8QWg6E{#moQJ +v=!aBRQ}Sb3rM#folw8$i#wL1YnU-Oc78MgP71mXn$uLi4Z1?&T0{^~ClY|vl?7o_+?@21ljP9e7RvS +H%$|&ZAp&vnK1?Qt+5bX&HRW^PCpR8? +lyClG8f|e5jEzBHLJoTP7qZ0=TUN&$@EH0bVYO71#WIWI3mqq41Q&KpAu(F3Zkh~#`k`bU%^C*qCB{Bj6dPMg5lSG_*L-g8GiCWqDh=lxTVYb)+pTXYAIM +KHK7K8ng@q?#wac*Ej5URQcb!q=QhnDCLvQz66cJj3D|m&QaDR85u}XQpSi+&#%fTdulC-E9%2aTWqL7T>$ryu +c8)-6@5C~sLY0@Vhq8V+O@9-0J7BL`^G8wH9>@Fq1X +rH{l%ZZf44ARKz1mXD86}61(UvL;27G}GPpS49T|<#7%{5oV6s&*1d~3qI7-gXTSFb33TDnAcI#sx%_ +#YP-~}73)U@o%r^I{ap>&dNnKEm^VJA#=m7W=unQdTW?Y9uTSX6SCRvXR#Z!(&SloT`hN^v969zj8*5 +)AHB-lZi;s}2dr4ZtOR`?b||(2o<~-OaMc0v=wD&cqQopi0kvLrX;tJ*(oz)Wl!)MXgeiL?Mi8HLpKf +@S#Fji$&De<#IggTy5Y+!7GGF6NWK{@1#->vP3W_h+G*4sW`c1pg}N)1izr_wkgHM4Yk>o_)cYF)a=&WWGk$L82ZNlhKe7P`u>ij&}o?c +3>~}9Yvo%Gthe3vS$t%%+!rCF19DM-151ECyA2aMkw{*Pm|-pgf21biv$*17KgIO9Q5lB=ZGJ~;2q0XRU#gIiW9#12ZfG)of#)z2?LP9?0?&$&p~QM2=W2)uS1fM*)w42rRb@DXUKdX%VI)XrOAVQ@ +%Gwx8JBJ?Gs+#sJ8l*dc06P%I-LMuN^jeNE0b8B?LpJ;d*vpcg`QFhU9yiJ^g#KkQ*mVU-yU*6N}yM6 +3fF{J}i_^WG{*ggR9>)TOBqX>;}Di6lPatVCgDZ=4`N06=5SEV +e|+}8{VgmerW6ny1KXb1t+$F?-9owuQD`bS;Cr8nPxtfqQ{e +?c*BcU+Sz6cgCHzOdfQ=DAnKqgno*s@QZ)ex@E}jRoRJjn$%1^G(mVx$uOaYc{40~{kNkCqcGld3m;S +!(#&~q+oOnI-qxzDq{J^=N_XobDbQ79P|@y16YqvfC4H#8mXu0PYPX3FaQmG>=8vOUoNvx3NlBp2jw_ +~&=x@4ezut4I+K*Mirje-t#DWhIxXii3dH9@JdkY}ES8QGZUWD^&3t99IiB)Sc{wpi1n=GRnXSM%G|! +0!)EIQ7AEGIPd_tPH71)o*R)80IE +SiQu+aHxx|QJAixOXnG524{@P_zcm07rxQzZo{TZpa8aAu3G!E7>hxtH6}Xn=zZn`K1=)-60!*d^H34 +`5J?#~Xy0S5?G6HyStAP5iHG}9k6cCKrq#)3Y?dFc>;A;d;3ZgnFC6ws@2#5ttn{_&x#qGhK|4l4+!s>v`UrY)AJJ@2t*szBI8! +8lP0x&dg=WVhAW$1l0@`h}uJ~yX6?s8o= +O97_Ow4w)U(;iI8^?-}aAhG(U=p|G9_UcE|(SwwVO>Np}Fm#wE&ez9J +^9!4n%JsUmBG*v=-Vf7vzmrg=$Db62e@7^spZ(Epbc5?Kky$RW~<&0 +9TiGH|Rq!0U-8n?zd68YTIF57dng~6p;%8_`~!X7UW{pY&H?Hk#f92cR=3V(;Vfp{@Jw@pfzo{JPMEI +;dA1Pqtlb)v*XjCvy@=7R=sp3w9GxtV=ZoiOkoCy@>5J&a$&8k8PMwK4(GGWEWNt~6ylo?&-D +0Xr|-?_DD(5h$;smD7tZN<8VfG@s+xh&3E#;V;c-LE9B$ssObe{#$?Gq~?i+fXoBFZSW2QYQ>V`Rdkg +q${7FvsSYX??$IScyPMg?u(>4mlonorjV=zCPiVreRnz{RF^6_ze7fe?L6g)!fodAPw=FQJ332PjrMO +w{tD{8v>(DrUHcImM63<1NJhti)!hdtMvB5EK8?@ymHi{EY$ZVl_r(umcKPNY@!w#Cr%gtRR3pu@lo` +I;wM3VzSFF%`)4P|NjY?_@dEIbuJq1zi<2m$Jt_%T3}HcvRSMQCDs88gE}_PsKKgPwPVES5BF`W%_pnja-Q$w&ojW+O*JySt$<}*D8}O~?*ve +DCc`2}kwhpA!m}CE{d{ssoSGqT?Dlf;RuQm*HXDMR+hWRUv@%~i7pwJt~mp8mOYfw-?o6xM$UTZ^mDA +E#DgwIQ! +%rSEn&1LKTYhZVSQR$$k|A%y0O?@Rd1sv@WAZJ2fhZJHTVU7P+|r^1bnh=YJRLKEy@RO&r$gc{#-g8ErsNB4FPcUpCZ(&++{D1TjupO4a>!iy(EtORWv_i;U)H1o +-T&N!fKF`ZvH5E|}WV(J+>(lCBs8TznEm>8vCskpdAX4QN~SL2q?&SMXgCgq_skSR2@ke>5eha@`}m*{{8kCPIuQr(np +rqbv0S9ehSwlw(Yc0ou26Ii<1=xBu45|1$0Aga3y#rSs;0K~wtR|E#9|6~#>OC%=NN0W>h-x0x-N`~y +%+0|XQR000O8`*~JVb1@;TK^Oo4j#mHxBLDyZaA|NaUukZ1WpZv|Y%g|Wb1!yfa&u{KZewq5baHQOE^ +v9hJZp2@Hj>}JOl`6{GE882_B~B`KvUR0ZQ5+JZ!HPrB1Sxsq@_)bX20#ELII{BCs +j|ff&}eiw`h^CQB>5(<%Ze+OR~7sD{4HDD@>U61vqIKgE2||_ebdOcOOoX1NbK;ERr2~;)YtY_Dto22 +eJ85nZa=)}+o}@lw8>k=k2bB`v2Nc02xi_dju`yj{ofBSv-59Wp8xObH-BHzqv!QrU%U`Sr>|ajyv^4 +Y_wG8`>bq}+GOfPL8yrC2eBX31r@Yd4@A}5}ez$MT)lW6FSRE~oGg;~J;w$w+g7$Q5J*s!?u05rT74tRlGpF}2Q%MX-DFMPZ8 +QD>XrT1Nbza=`O;!p+o>Hi$%J@J6{DAZ+N@DeWB5BqKl +qW3mclH*rDuyQtMeVtG7!<{eYbsGZzQxMVZN{eexbVda>asM1Y7bAG84$PKp>|KUM$)1*K9 +3ir3r-#9RL2vyS}Yi*Y=#j)VnQb*aZ-hH;Pr_hO?ag^y9Z_&`UD`@Cms>qb;>8ZEPc<*c(}MJuHcn9` +aRQfp+j7*!DFLXxnv7vSRdC;l)N&oc_Y|OZJ2T1yd3#>ZHu1Nvz;i*7EngXyHvw_$|yhjl?^m#|mz5% +@v5{zj)DQ1F=@X<~7LwX-Hd`Fiz!&XbBJEqy!QI!AL-I(y|^h>5Bop@qsOPdY!W5T69m6Won>>Q$dJ}zUHdP8(uE$TVip@QGR`$`F&xk{%s0aR-pD4$uV* +vOO}SB@1fx)`DiEc=^0$!etHDp&OVM|eo6+>(A4!r;yrtUfc`_jfgZBmpMBJK(9f3>Xl&TM5p}86U?+ +!>S}D5>S7Js;;jLzWB@0r%1N+Tey4O4nxE*r$6^upn#D8Ytn<2kY4B@c#o++NU#TM6p-%v}GTd<5B-; +s78P*)a{tJD`7oCxdWz$Aj%a-O|6Z)<402;LFV&t+egL^q=P7#b;%VJ)!7iY>Z +U0M_WdB~x(VZGnOrdI+wT$!gLp;AHrE8Qir_wvOzwwcJp^3Z&9v5Uv%AFnR*QJg{Iuw(;-4RBug!)jK +MHmx}Ci$KS~A70N3)PK%e;(K3TI&~Vz}=e!a#9Z-2>AgiLwvW4Q+X2q;s@bCvy4~BS|4lSXLBNBE)4+ +W$Y{`ZEz)mj7;e6YA))}Vw{56c-Ha8%^Ss^Nv$hyqQKAU_<$(X5~q@L7V84F&)@Xg=uoOzKgLMIrC92 +IopkF|2%zj@puxtx@bb3=QI=kdpNVfP6JFS6U@~K%WaVn@KbWAFOr{i5OJI*9Pb@8jd2gTtgqkI+-cq8P4XaVksZJlk+k%Vvd(I*K-R!kO1E+cnfkQ!)Eos1HNP_kz=i{aMdD;NiSzHfoI;~QHhZfn +ioPWiEQ~H*v31`W1rGlE9S)H?WXHAtiua96EAvz +F4?_|q|(TL_?l_>*7q`S>qA$!F}2`>+lcKMtd^pjX=uebtP>A+P%GV!`3lu|RG=M{{7hGj4tz|^0OO= +pd?me0e1;OWqPIj0pd0R*UdY6vrAQv*F23C-4GG#n*{)M7b1n(@iUqeZ83VNkPnj+F|wBI&YdDpcI=nN|ash2E6EJvY6 +a;}3sJ2)i`9%C8>K%_3Q#43vH#?m+c15zo^p^*<0%mOZd7gl2(=8PheBIDe2`TLU6BLpF5(GHJXEdaaSk~JMoLg1NQNQrFwa +QIHHzb%A@0aZT#H*wTH5F_ZYnTQX2srVY`Z|bw^RBJ+F@*xA%3Gg#+l!ryazW0os*e{@}A5OfI|5AL( +MJfo*$5@7aYW6Cu*)K1)($QZP-z(~}IR6=ckJ$NEO2w@&h}6bQ+ +Hg4DN!59bWN!s{7L)^U1oc26X^l*F44p{;WrJ8?5Xu1s;;M-z +xB0EcmXM=2;I=jZthRd*8j?tPN)4?bVWhwnM-E<(C+X(n#FbuW_&W1tYnOjm_*7o88@@lQcsQ>iFMDC6l(Mbaf@~&<(rCqXO*Bmc` +K#Oc^>mcX#3WzyU5AaWj}1-g-5|0}`+B(IfIkaJ88&B(QkaU)9dN7=~i!o_jiYGkWufJnl42Q45(FJ{ +opODfdv{idNPbJd)c>&&gAx>@v;>{*Jcf7G?*buNAP=fH*MZC`3M#BX~ws-0^NJ%Rz9oCdu-$r2QJ)L +(?rJlxQUA!Ni& +TQWNnE0ifjhi#`YMp)NN_H1-)g{HxTLhFbTBok&xFhtnUSX-sM^Q7eATt|j#L=AEluY1|s7XIualZtFrK46 +{$ho9}K^@!ImP%P8-dYgB4bKN4h8c+)5)b6IA=|9U!zK(WuX=#9J>_ib+8qD}1d31+>vGZZ4b>3xZbD{8k_j(6*7Lnn4$I5wFxTk9OYKQ>f4HP%B??(GpD`>5{2Utt +L-%j%eLHl2v#4UIld?D?1X#H>Kn{`D|-xh6x%(21tkySAj +kNi=xHDfgy~|01)v&^g?#A0%u0ULszTV<`~F$k%gXGzQGKMCF%;d#~RUiIuA8YtrcaFn`|Q5h=Vpj7q +`r-`$Un^Plo%WyIQ{28!Gx9E)4Tq#)D}YWTvT3N +gla0$(JRuzlYj>w`u?Ve+!CWHoaTc1-{+j@l{&G=+Ua}iPZ~OJIsZp8WPQsH`lxTUSc4%>mp6(l_iUmPvqrhI@3XF$tMNVLkkAYY^szs6>A7 +kKnC)?64Ru7u$I5>`!m~3T#y|p!PUfMBH>s~teSyUeW{A~Kc>^j`D54J)WLa +iq#X!7QveEbJ^+%uZmrJRG#yo?74H|M#s8bnM7Cv5SM&L=e1s;y)66Tiy9UkvHNz5qNmz`C(4laZA}! +)AWrJ&iZi=BApiD)j&I{IA-sA-tJdy)8^N@NXFYwYb#P+VMz^`@Z?D{Y&hse6FSJ`F#U|7fUfMBWU!L +Avc*w9{;B`N%aunwDITe9@$dlu_6eGjobTlp>4nd2)ANSmlsdnHkaiF@-b_4wTJci$L +id+)i8ZKa_c)3mP^kPp +Zb=W4a46gwd{YXw99BjfoQ@TkRSw<@cUoV7iSb;~M7xMXw3gVk1qh&AgFjR+4lDGFQHtMcYwLP +@ag@W`Q`+9y3lFdRqfL}ZRJ#+mIx+!IQKQQ0aA2p4Evj?cmlv&`*O<+=1}JKzP!sB|%L$WL7U*F0&ph +F=tq*fPqBq7sXN!=$VcjW}#i+YOJ1B*t8HYj~v1Go6v-F*Go-3D`#2TKs*)ui^$ChQl#Y1baMg>ucUo +?ckgP6_ny|I1tNeyxgaXT(=g#vB0-a{PxzL&J+20oYe7eGHz33Kf>4`E88q9ZQg=4=lxsZci&bWU0g^ +nKTgW|5p6OlE8JXp(AhmY$mM0WQD%oIvbc17Y2r)Y)a2yw2qS2kK6Apbo_~P?RQK7xWao^-^p$9D@6T +9}YMv{Wj*u(LV8lz+?A<=YSW-b9&0B@g|=?W(ZoZPFZXB5Fv=~qe;Co<5_q?t0VKV;!eOqiXm3 +r5nzZ}X70BY%)#3cfA47q@Df5p1VHEg@z@vkeS1m++`(rwRh)awpVv_NChv4eU8|2?lj;QJpD$_~9Oq +3aa-{+N9Kpv?gUe3ceAVoPY3pGhr8dG^x8f|&Zud?`ti)*Rz&h74wJLL5%#K<@%_leOx((>A#RcMV|q +DtbW(8=DNEVf$uY+gJjco`n2x?Cpp?VB6!Z~V2jmc+-S*P;0T#=Y<*5yWBQ +X1WBtZ%of)`18*~pdX2+GY8dzoJ|vo_^<<}^WKbFwkJuj5E;ambPE(VQgmGjcTbvFteepPYplTrgQ1X +$2>rrvvr}uyUp=>?dc)Q`0w*Q+(jedoEM73!-@Og=4`%@x$gu(<-oK8e5G5{$1K(5CMtLbLje(qH97m +{$kohPL6MpF_E;EiegoV9^JUMYS*rINQdLZ1v@^CHKv&KO2eD#x8XCdHCWp^sOe2Y3F+AkjRKRjqX;5wmm-va-;qmu%D +W@E~mdujK=KT2tNEjv^yZ +1X-^fBh^5#|Up)0H6Z+aVED#xwjIG&X14ACnZ!%yc!3Fq#^DI3~p$shQVIyWdWNN9={fWld-Dg*{VcX +aXV(iz1z+mx^;bZXpvL91f;Y(`8;O|3=jt^$%vPV}!0IRGuTM3n*)J&ts<@9vTgtR~+<4KNMHEgZrp{ +g90>k5F_>N3v7tqHnIRhRS37G`+mS5<-U6--;D-}9Cj!2>$N;R*+2w0A(cCO0Qj9bcmF`az +U`5#i0Y8mq`La`q)B8(okcZ@Q}tvT=y+6f4|5*sHyx7lo-Y1E>Nec$FRoHj_~ +`23Ds^ +*%C;`L37OY5ZlcX&+Gg*(L|!C^O29Mnp(Emd8y|Ae)I3(;TE1bpo +SvLKk&j-kP20Q(M1Fpe_CI=kMd2$Ze!2R(kFTBdKoIQvA*CK>>u09UR%Fu4S-j;O(iHgKtjW-Pi{fim +i_Sj-8X+t4ioVQJj1Azt$mmw;q&wJmv4cDt~HpMTJUnzoU{lhi!KW=fj~XlDjU94KxbTRF|dh;2joY< +q%ASJ_TwaLy%Y_AdSP=oJZ1Cbpt?Gjr~w2zL6v7T0r=ilQwzIQV{PSi{NIV~zZ9#|TyEZQV*ImfC|B~U)8Y?P9~d3;ct2fz;^Hv1+|g*@T)34J%HI{`OU?_J +{iYyZqgiA{FYZskDBI_7 +M0yRq3SWu%WK&c`ZZV9qxW`2l&!hTYk$M{HPyoHAZnv@%bMH5(vs^cZ|n9lwS$lf7d!6&rtm)Iw&PfN +FVs$RXZX$ye!y{5+lr;Apj+un9^jGGv+}p3;$5C%b*ZN{b3{jLAS^DmMX-UBgD+6xims;xJs67F&<~k +DhsazUXuhg3{;-{Y$nF0DP)h>@6aWAK2mt$eR#RJ|zX2x(003kX000*N003}la4%nWWo~3|axY(BX>M +tBUtcb8d97DXkJ~m7z3W#H%At1ZXpjwGneM3sN9D9RkQ6 +F|Ka%MPu^X845rfJftF3WGJEsYh*i3PyEfhInDgk5Rjp!`F#*3DyWV5)OL~CJM;Y>rm< +}JGOWLv4TBzdDWqNvuXl7?XWlU;3kU5Yh{!UO|LrBF@Nd%4ymB*G3Rrqw&xC4E;)4=OV%m4iOQNr +^qupTWRoQ+t{0Z_yy|^#DbEqJGu8{ac1HJ}^7x!2!}>;>_4wVmtdqVTAKlI+$s=)TwrxB>AV-C-YTbK +do!Hi@s6{Pr3AnBMw$w<^^!6CV;TlpqgJ?JaK7h)JTd8~E>i`6Ad&VJx!E^!o ++tt;({POJ|KyhG926plP#rO>DTG`M7JOoa8zFa1ON>nM_M+(OzG#RU$W27zN8s&Zlnh;yp!iEG4V};ue +ZAxgg^Pvu6aH=WEGkg{9P=Wvc>of5~W`~T?S{mE2#70ZScOb*4RVPN8&wH2Q2y2J9Ie;)Ott^Dq^-H7 +c2A*^dq3&N#{^2iw1pLf$Wn&8vq^Z0$e+zppeRoh9soP*V2pY>mlAm`p`b0ASCSidJ>5bLs%*oMD&?k7eO|fVq1-iG((dV2)DTQY0in!6po6K~qqoC@f>7DdOrDmc3&^BHYXlDKzAq+;C^dY_~ +ylgEkwSVj%!u70y$e?N_+QkvNdW165eJhU`8Zk@_Q8J>5L8^W)xmEgiU8lPqC; +5H;sFqz!BXg9GG0f_|Bcr+maxyUtR7D12FasvD3Gw@G#i&P&WE*I)0W(6H%)Vjr@Py&n!;Be3{799wT +3Z>43Px=SYKH$jKiIg6oM2&P)|F+PR~%rR1k+&`=NK#Es8NL}$H^!`(ZpNfqT-!q)&*O;wDyBF3t7EwO8)6%mvxh#RE?&oAA!XxqPz{7DsjxRKaQGi?_?d5bfGMHf=*3=B +*J%o$hIUu?RBpC_EPaj?~!&v7s{<9w}pCB@e{jn>NKIRkC2(_f5XeI=20Q?@<+}<1Rar?nPS2q9% +amt-%3bZxWQJQm5-iW9T;WWP_^%&YWGh=483{jedU4o?mdztf4EQ3-|A2z18=GJ2C)(*3pSsCyN`2_n +FQ8JK6A3`V9-$Q323kcWOl4^Jgzkmv1&XrVwgYoVne|TD)zX*|cT@*VB!0oZq{V#o@^>*!SDSTb)Vj# +9~19=kK@7a?nUq@trB`-9XkhdOgUgGiQkYO-I(7`5qZwH=2hXmUTObd+XdB-#O*nJAtOUoadmaGtSR& +na`oag0bNzV_vG_AxCECbmV*7oX#8m5ti4uD-YlQCrXy?Ujo7>UX)~^{OOInY4qvfKZy +K)P)h>@6aWAK2mt$eR#T-cbkP4R0017n000#L003}la4%nWWo~3|axY|Qb98cVE^vA6ef@XaHnQmN{w +r{mcTXf&W}0;S@w9cjZtS)`P3@f6Y45%yE7Kw*Gp0x_N%>=Q`@g^W06+i)B{^}^-aS|6v@uCwFc=I5g +Tc(;fp}UhZp(CbQHv*^KK^_N|N8>}_oX;WOZa#p^Q{M455%){BJ)ZnVwoqh6!nD^dy9Ai|EMoR@rx|0 +w8+Ji=u^?h0zLJqH~1?+xGk1q9^Z<*sKv6903xl#G|i-tHxs$2MVgCAF<)e9oKK{5s=RPsOi$FJ9~&ogN;Xh~pRH>G9G2;pyS=5j=e__KyB8emXqb9|{R%f@b8+qD1@w$ +rMQ_6QtLPlnw&Zf)T0~a*|Hd3G^$UE#sLKv*JpYIdn%XWI0bO9LNgLO8`oi&eJ-s=}oIs(biV4*V{UU +H)m(myW;Fj0KqR2Y~OlU)c~#{9G<25@&420hK?PATJr29Yrlhd?#J;Yx9<)g1KYu*Ols21^OdIG51h1pZ!R@kGK?P53 +{*tuKoFA(A_trFoofjTX0~=`x>;&Y)zC5Tgt+9@`k72`qwt4F$Zx4(MKsId))P02k>pahBG%k=O$&WH +k&9pm-%|bO{kA(7Bw%b18B;fzgl4TY7=Bi&5PAEc#p|5_n@0Bg^reGf2RIsDk3N=qu>v9M~X1yr9WqC +XuxwaadPd03o3^p!d4I2y_~|dnT@NBr+uYt=)Q+!o=QE4L*s!p!Q9pxrIt3PUOlkOU9_P1W +62si3$#;=XF1F$cqJ;DD_{8H4i;1AiIZRua5;P&sR5QTjODP_I_TSt7AOkz2Y +^;B7g%QqBapN7zQrQZ>EE9pjGz8^@D!xc4?vizhCwGfkCY5XvL?mEA?s%#htEr3*GCG>MLo|Rgg|cT9 +*l%|0J9~Y&EpX)Arq8WTLOO5vY0DugrZKLKHzUJza5%~r*W2{AZXs~r<1yQI)u)<-;WnO5t}zBus%rO +;^xh%yr~b5t>@*!261}3@SYO4)t5O=MS2`;(LZV(#bPj|rb^SRo>ihZ6z_WT_-#@4Mj&F#q3F%i+

Wx=2OD|;*#H2`M4ua4B_?s +c**7)Vo;eWxZ`ThRk3+P=@MKZriOW;6|YyF<}6-d~7BGAD@h096 +USNJ2@D`YJPCE_wxbH$)bWaD3c(%aAJ66b5=W}bQ1S}jL|aG4FMi&8cKH7e_K}!}`#?VCw_cIKSoexDo@5f +}4#MD={$|Bs>$kg5)+iqE(WP=J>t&gf`iJnabXJ{@H7!shfHmubsckjW-9~`qOl+e2??LisC*L_V2Q5 +REi!!Zb^H*GTjKhH`qI9*tbOWhmc}3Ewb3n!CTpQGm3+R`rd0mv373)4&y}XbaSAOy1!87s2P<$zVZH +k0pG_8lKpU~HEP28RUo8%yULe*irMBk6#`<*z_Xr?d^%M`UCUezvm`Uw6NwTex~p ++?oj@01I_2Y>D#o}9ioc36~0C^Q(+4UA^Ql0iI&DGn+$(P>iTIHVoK6#Y`-0wog==&C_2)M33iJvcgr +=U)z9oB%@4_fAg_UK{~BrHqg{006I^Wv~D3=+!?4Z?<0#`qB2_b${@!*oJo}r_aRT+y1N9N%YC9ulKQ~zFu?h5`g|=Rc!sr5~udhEDyxJMR=_@e*tybv4|LGA5-#N{azI_ +f_@C?`(#_9S(<^lvmiQBCi;kgM`hd;o`Hpra-R!q8HBG1z}*Ltl|J$fJ`%`&Q96>{#q3N68^Flf(pt9 +%c1wd&G;i3WgqoMzU0)F@z$6zxr2f4a;v=gk-}!i +{wCX9Kq3;)nFUZdwWQLpqd#io&uD+>enQfonSBNm(|97;EN7V;uz@m4H14AP6W`7LG|=$7DSs#;J@|Qr^Uqn&t*u$%q@YK_w-tWyKZ%gh1e`Vp&d5Bwob1(;Lsq0^e(D2 +c`opf=N1^O5#k$hEYZcEmKBC$icEz!E3A$Ps*Y~lTlWui%j)LW0KYc$rzUUjR_@%g%`~*Xlk;Xs6gCA +14W=cXbdfiCCu9*SK^#;CGcz=gAuN|Q$c-$AhFJ2lpR@lx(*_M3Q%EL?L^CJM`{4?^w9zbRRsVF{-fO2pS&{b=Qb;?D3W;q7vUvgm8sZ8tI`vNM1AtilYX`1 +pH|TYN6j;#BR#n#PIYfCX3{YR23i>b-GArgY-{l&r-`Fq7D%1DkU9%}B<;)7Gi%o-1Sy)f-MKmU2fk81B5po)zwEbjq)Z+X7V>t#=K;!Aq8RY3D;pB|OQ +k9xi^zZWw35$NsjKDq1!My04s>8J2`e8QimGJ(CP`Sd+KDoqh|LaT+7mnR2mQ);zhZxf3Jumnt7RS6% +l5`T>6@xO|uD|_^4BZ-Q$)!ZIDI(^8BWkS=B3O&U~#zuEV-hjM5FEoq;ezalCkPfDR_(A5Ug;O9spN| +)~dAq!tL$Sl}eiqO1@uy#Y<^u2@$`}anp2RU0{FgW()w)u8IzpWTzj9$l^=EkI&vW4Cw4wXY^r%1O3G +74l$Dh@sjVCVWStc_zKF{@|`kFdp`aEsMw2Z5T#ZoWSqZ&UpLg;#q9iop@y2HdVQ2a7UfxdX2Mj%eiq +m4OierS#F4Dcr)epr_3e9jG~ecFlH;MT +`u?+e)ZgEKX0ug!N~gUS@s&gwtj`!Tv!b|MF2qGDOPt +@gyfUB}#B5Tk(e}1ls?xHmc|8K$p!0mb?HFW?%vX9|vmEhRu1plQ5GM*J$z4gt*-PJcTwfZ(trJQI>s12Pvg(nBP3CA2_sSyDLkt!9a-nbu_6MfBcU +!xIY5m%M;*H~}Rm?_WYlnw%E{dao;FIe$4MCDT57Iali*~bNI0#wjk>qlvBZ4_C3(zXZ1^(~!W>=D1v>^B=1oVjgKTDRlv76_hH(eWG@4NHV +nNOxouI{+(c|dx=bwHi`cGk^4Rlj&VQ&QcsnxCblIcpG8({Av(?b*=X;b1(KxU)SbYr0(2Js7N>R}5rw9i#_w_thyRM*|p}{l&>t&q2%3{=(_oHoGyxiY5Am>OV3=WjEkm2Y-OpKpBl?1TA +fn%BusN--)z2Xlche#3OH{?u$_%zU2INDZH3<0Jkb|)n%)3CVS84TXn!Ng*%)Es3{O)##^h~e!0pD+Ode9&LMivryVgh8`ubpngM6f +E)($*Ue7cC5G~Sp(%V@jn3po3r2@Zd3$= +NRE0<2)lCNijh)QdHu%-qTg}@4&)F^L;)cRG}+7tvGa_)wq*5eyIJ61Y(S>pxGTk_aduD^Pz+w5TZ&Z +}PFq?FtZhl2bJ(UZAxFx=#%lxnX%TclFs!09Bly1qJ=3RSnUT?@r2?3^nk4L51}`3nIMU%B6hPh9y7L +;2;b=MReqGkk_tr*Snx=n$7D|1*ZDH4u7;>^c5{BSfIABgc<9Ku+6gd_dJH6B?Q +=dvX604o_NUMiv+_zli@UX$#a3~v{K8=}VMJ2OaT*$S3b=CTqqRDXKoDv;>(y#HPIiJ~V1XuG8a)~`-)X(mQ_ +dp86o~}QJFA*u5AaCuaDV*l@Fz$0vrkSe;GkCl!PMFK*H*+H9$f+G%eq)lz=#g9d&FLR$s?%wr~yRrB +j4ch%L*Q2R#JSWcfogdQZU=+W(&uCSu@|69hy1cY`2W+s7KiBS=ITOZW29-x}^ZaJ1T0~nB0wW>u&nZ +Zn%`N*SfWuh;Wn%kmAgtIn6ewYQ3AUz8HV;mtMq7Wlr5JwDSbLF_x1Ho=-Yx3nRG5v>9gt+Nas^c3Cx +!ShT39uGMtjSFy<`zg^Gb+wS0z2Y9EpeMQ}WOaF?y($F#P;w^l8UeR?4A_3zmwIR!G&o%KQ}-68!3ermyyTh=m?HMSk;;LCJ=t* +r&xuRWkvWAk$t0>^I9N($E@b;Bo@P%Et?r5(EVukg&|4IZD!qS3L@w2L9xTOavDgbF6L-Ez}6onPqm1 +LuflNvO2?OX9P|Q+N-$4!!iq@upjQ)T^+jB-ixEG!vr`*K5%Q>hWBB6-4?vnn_tBi>$kuN8+mRmW>n} +tJd3*(Qf(7QR`s>hMo-ylcg#4MZ=jx9V$-$H6qOe4V=5EWCQxV^lT6SWV~aX67{_e!23FtUrC|}nZrD +tP)(qo`qHSH?qGnI8HEN1B`D2*02So)yD-Ey_<5d8imBeh(Oso3MO8I9ZX22Bqo&*g+0wOM!^=7nX;k +uT-Z8|Cf^Y=d^jYB>T??>YRqR}T*xb=z29@on*A14`pA;o +8|8oq|2TZmEmL_+*K +gC?I4LEDB&7m62zH3D}bHqAV7&tZ%ne#y2YwksfQ6bLeZ#0>#$DEUqdaK)*PDD<}0})UXGKqnn-s{(J +Ue+23?kHdHXcsxiJrLL8(2F(zCZqV;hSXIW)AEC}0RVT_(AM=M!dfY7{gHXfrgHy)p%zxi~@#uS1rn; +`1zG|PzWrQE^RloJZ08QDE)%vU&9#-Mwp0K8wxY&sNEHBa=<%om;S=+&#e{PxWdlOesK33OEC(y4-gq +VbgMrn>_Eq)@)`I8+D=`1s6ZgAR-g{O>xKWfxwUl!>wpy)qcVA5K|x#K!~0^S9b!jW`cQkLdL7HZ~y`uV>X}jw~-#2S610K@J&4;XSJ&041j-t&zT#^AJ`6uGyLexo##3Rw;h@ucZd` +x?2qG5@XTOA$35tVl`J#4Gs}weI5XWh&iITSTE4f`;KXQNL3T+SC;hmbQM@AgSH-n<7*-Z*s(FUd#zm +GUbO6SjYh`|`U~xdsKT{G{3C&PB=Hu^fp$W3|ZH7{~pO!$XSX!@-^Y5n-%xz2TBcTY8rn1T*I4~zD7| +@X24prO+GGCKk4;}hcRFDb?u<)zgf#9zHSX^U55%TS>(t4>9DPB`VhjtD$De45~HRI!63`Tb>qXbT$R +MLRIudoz0|&3ZO37Fch7EMycpqYWQAh06ngKp3>O<; +P|=0MWPRDfKJ2St1aT|oV)Sy)=S75>P;-!KSjSadu!5>I&|(Y!+PIm8lc_CItqPEb`)zlElSk~ysn0n +-Po{waq#{fFr+Cr#uu{}wRPL!U0jz!PePREBe<%SA3>y!qj%pU8XInjOevlc#Ml&?^Jy`f2hVbdhGyJ +DTpZcK}KI0prbiG_3a)N_Anu(hc^jwbqP5XngGO8Qm5>_% +j6MBfhZlR+o<-!Qa7<+I+(uP^AiwZ7y?6o@!L;cswWs8~PbI=&k1%jL8o6M!m{zOcE9Ua=FH`==o`qL+_lOwz$u +DWndTpBrZK5UtjR4nFhqv@Z&x$xPK2+;w`YNncS!a>g7_Pu;sUo;s%-qS?!tq6n$t)eF$Mjk9W->ZEJ +SMBk*@(lp4j&z>R0X^fXvH}TleMoyCPu+#nk3Z`S{r2YoS$^#ryY9CMVwgeR0VmaA$t8n(F9QB*muh8 +byuxw5JvZ9o}y=g#%|9MiWf1ax0g4tIH3rdT)@ChPyrRnC60fj{$djBrl`yTD*5#3Lbl#dh6OD(G54b +S(=8zDiTYkt5q2SZTcmkk7aocpWhlm(W?;z-NNVRfc0n$ya-5~-3T)r%gXnC;WHat)$mBjY&;|{q)2Y +8nb1guGl~;l~?7T5mBn2wl02GnNAsAMFY=RDhIU!vOk0#U_uq~^qPvvl1PPM_7^Y}m<9iJZXJV_H7E7 +cC93$m69Q`_E#DYL!J?w~0uXtf7~e`pv$D`JW{I&q2LdwwX+InPYeCs +Y}-*VdQn+jL-q>is04o?lU`_3=AzUQo4DrK(n?u7-4X4z4W2!>fNz|67b5(Bl)nvyS21L{dDlh#5CGd +?^v);rstRlideHu +PG0$hhN*T*USF^a!du*ABIy=P(NAvhgr5Ouo8X$ +Spz(Pr+(+>vbvCW~a?TjM!C4DkX$d=I%}S>c-`kE;TsHYX_g^x6b$Ov9K1N2eg|t2vXRX#f?tbk^Qx+S#6t6yMROqUlf&k%s7Cw+L@!QMI|tP +LOj_mP9cou8KLNSdVtR_eac34Zdshavs|7h}MKkt@d&Qj5=h1M7UUf9wHLfsbnBBcdKD(2D4;9D`|U1S +nUo)&zlr?MkKt?42TdbZd>HulvVGDVsr9&@G(`_`&SxYy1lM9TF= +TzSy2CbrUKd@?5(h5_-k7ljSo@|jOFyzPtNd9cj!&zvqk`Kus{Acw)T4~fAOGq|dB=WSy*!s7fkSZq! +=oSsWgqYqs{lQbywoX*#^hM?)>3h~sqw*?OhCD4(VzzV$xWZ*Ztto_nTn6Qgu5|&@hs9mkFd~Jx6_>a +3aWdF`f8DF-SD{?8YvnG1`1Gh1Y2j6}Ao9MrLZ0#@2#Tp)nW@acst>w2brBx0TmeuQ}^LyXGOjI%~Zoo=@ +Y-tD))oq)H?BqhPK7C`+!O5F)?{sjo%G@g*yqMVcp~GW~4o-rS`zFJxyfN?BeJ^VFeR}`ojcxk7ly@@ +tgnGF$@d`B&61I1-saYqPpD_aWHT6D)CV55`}b>~@%-mCV@__05PA0CF>XrJUK +e3x_t?=2BMDr_MCeF|apO>T?CMEdbDeseH6Z-mf8Ulv`=>NPl-Y|mxgJ~R~$|htERBI@0h3Nl +z3G8~G-ltS(y1xk}o6Zir2{yxp)n!>7-n6aZ;u9+ih(4`yf +ciuIP9*{STUA3RCmfR43}YuyyfvT-4d|)7sSl4g9oFXvp9M7n4Bx`FJ}!_dkHjH-pe=BHQ5MVDg#}o7 +jt5iQI==(FpabiOIp!uk$JnSPJC19M2Sv%gJpF#>EB5`S;OSbnVYLo(e=qjK`G@v+7)|{ulQ(2MuP)% +Pi2l!mHpE-k(i`u*or*`-7tjc0P##x{EXAOCEVgA0Gx{nMG!>Y;a_9yTk2>V +bHeR>jU&Uw!_6cOE~~*LKTrm*|G*DP2NBhe6KpKhWc@B0ge{84xP`U|*Ub1Qk(NVkAd`5g|>UWCo+alWMMiPZ&z7%E2>=U{j`aY__fvl_%&bz2z&F`4W> +eS_zjPXvdg={T&uVjxYdAOWl~Vn@p)Pv$v=>FosjckKF4poga01(UsrgXzyC>Z=n=d3CVWQUo- +BqR)prPHyi@UZ*$37gpCBG%bw?dvl^4@hc>xtLG~VW9%h#W&@Vd>=y +_=Rd*bQ~3y!bfVA(SD0JWlW^&(c|&4N-xbz*P?733i*;7?2pF%0+KnD6LaZVv;%fWA}R&5zxb9Ck`-F +RVR2xwkxb?Rv5?0<(SFU2Vgi9ARfwHg~Gs_#!nT2vD1`#09QtP1kAkv67@cJZQ|q3{_zRvghR11sx}Z +c*QTS^7j;^zxnStM`5C-@yjE#!&UnZKK}0HJNnow0l&>lJ@P)O)jDj-$M +qV>lx*b$-m7u5|wJ|1_({2kkjbp6)EGn5!tWv-au<>qqepNf+2(HeR(xNU&SXYbTTG+b3baP(-PZ1>} +HyK8mdwpFI^Ro`WA73X8+w~J2*#ckD&PK1?9Ka^w>z;f8g=Uy-PvDhvZ*b{VoDfi7+L>KB9zTO23C}a +w~R9r4zMpTPu|UGbf~z{iFZtAFr!7pA0}D>%V%PypG^+7#TtUcGjBl99PbOLdLpb<85ncWJob@b>iEf +_c%)mnZ!K==y6NwV`5`T!E4i6hQ*}QSm_Nu06(n+VhiE>=OS`p~1)9tEYbs)qz^-oop+nxtuuw}kqGvuO>PdA`{dpN;%+vP?eM!LXgjA{Q3YRvq24g?eja9% +@1@oSg49Fa8;?Y>XFEt1*8BvD7*l{(Cqp-02J>aKiR+6!)&^`@q%}wx!p2Gm}PoD6VNkjUVXlJJQdt( +fV*rskw#%#ZPm~mWGA4W3tWa7%ja%*x?|P3zZpDg=A0WrH3rTg`XCYV`KnV^tj_ +Za4<~Q2#7OvsiCunSdeWLG}=}a(4wd+jJJ2kL$885deu*lGJd{ydV28UNCgjQy0&eF#^Pg-Ffv(hk`> +E@LhAkRTHqVit|d2|!fFw*0eV)%Zu3Y8kZmXN^kCyLX=<$yi9zK~Q>tRFM1y#emQM1UkU`{EOxIi1#0 +{VV%eam?B@9Jo#duP|xoO!fg_cmVOfRzb#^ix!R+BN7xb?3>Mzcsfh537YG8D&UJi+9#2YC4<#ap333 +fgLn#5w~O2G-NY(K9*~Di&%7mX?@dy1g4PB#E$#{k!R?N==%_x1yL#mL*T0M?gxQc+WW4qCt`6*+bmf +1wd7l@!R;`ZaasL70?FNYucJZ$AC^{O54i-BtifO%M#!^y6#pG6HzOL%9o|a&7bHDjEoQ19loP6;bi6 +A;&E`cg2=6yQvK_lEKd%0jM*hz2Bp%vGT79*G83R)V@2;O#aH94D>Xw{#kx}ScqY@eu+ZjE#+PgHr*i +4lX7HdKiKPt+zm3baJt=5rt}EqE#ja9Sw!Q@CqLMq>_S`P`#(9HmZ`NL5Rl|D0=tsMxzuFxBaCH2lS# +(aqA(BCB0{-r05mRV(tRK{0m~)iBab-fYZs_>CoBpF)48!VLcEi}?kM$fLg-Tx;346|pPOsT~rga|`) +z=AYMGh{Fc4yr?uEu_+KSZNgheoG%VgFXB2i9lpyJOikx|H0Zq1h^jwvA1$@tW;Phly3=FoFVZn$kaL +yVKIF8rz$p7hN>E2q_H5ba}S1L36k{8AHhtPj6y}sJ)y#J2>IBIRMDkve*_Bp`w-)s9>-@ej(>k)LxA +PHnEPJ1=B@@3JgNG?MtoG2bDUsl^IEyWv#57WF#**hkJ8t0Qnu_ZRbFn&{5?BbFq5c0qcRl>xl3o@M` +qv(G137d5+P^kN6tj9q!sA^$(>CtsXu8;>oJXvC<6KK`SKEJ*>?uqtk<x%|f!Ki}I@=9iXU4H-IyO%#WMdBpkc-hhvI;lar&GlQ +fk*X64WmF_7f>^}mjQ)=Hlp_?)|FUmofZ6S7zwLr%ioh$f)Nu^MK@7&)ld1`C?CtEltx#Qtzuv@;Or#uUxWIW-9=}M4sT`nchLI?ZqRxtrE$lTIW)O$Pj6OPO-%E4wDVw7u7XAZWCGSbie-0 ++QE+e#DPSE>H##NyFFK~YEprYJfT?kvXfoj&#ero~5-a(U#4h#=d!lgdgcszP_&l%eXSxi`jX&4A)@b +!|Bc0W||$ba8~6l8PhA>Wp8aWI10{loyU)4iGCmT-p80kPJFwyceB)dP7ay0DDK6@Jsw>)#F5ioJ-Qq +!sUrooma9sZ=z}|^LIH7{-QE?HEsGZJ6g1yeW=MMC^p>CQ}sR6lCFzFCdCZ8EG6i8WIRTZGajpBCzd~ +3{~u6G0|XQR000O8`*~JV1`i|L^ZNh*@+$-Y7ytkOaA|NaUv_0~WN&gWaCvZHa&u{JXD)Dg?0tQI+s4 +u0|N0aNeJMekV)T-vtz!8q+j63-Ecq;@X&*%;K@yZ;fdB)5lG!Bv>^Cp_js;1{>T|jKg>5Vn*qz;-ot +>SXotG!U=F`n!l#i3_YA={qlg&TjlZ_|AG#}5?IG8PFQBlI%-fXe)1fIXjXNw}ax~_t7)CqRBwstpnw +zmHq1n;7G8l3lnx1(?8NfA@wcX2UI$}-8bASr|ExQK^~;HrqSDjs)(NfF0EJ_$zGQE?S_gDMZAY!S@j +qJ#?hu!@olS_U`~baA%8veh*JD)UKo7ZouS9|uuc=A$G6h`~4?&8KlzMHRLXTiJor++(oefTb(IVZx7$U`VJl(ygWKSI{!yEcyn}qf>7T8*n{BR!Ta;0SKl8Wybs=e|Nh{5z1+pq|nCTS0Z|pzjXJZ3bL#=}e_6%sdii-? +b0xXqiHY@UIbd9|n6)`-7($LQh?kD~#lj#iV%8qt}+p3_yL%d?q)Yw2%*Qghg`wdLWmX&1%@}>7z|p^%P5^Q=YG)*o=4*`jwy~`eAXHa +U}qT4le7xvGw3DO-lN{{4FLRj(A|(fj}w^eC>=06mQN3|@gRuP7!{>9Pvn}DvjxbF6soBR{eZ=cl|!!E37!S5ZVUc(AAZ(ixYsy`P|2B0dN ++fSf~axLZ(5r#fZJ0eJtBZJ!UVtWbi@i3L;@T2Y>wNqxx>lvTTKOybqnNg#I#2qaNj=Au7D7=j1|4R*!vAm|26EJ1)z<7 +(9FP@6x^bHtBWlH85yFdn1KGs>sT3^q2tjVtQ)SrySb-Q3u8KO28b%7oaVVw&Db8(3V&o_Y}JfSVDFV +N}L8_nqct73A=)&@-|jOC%XQhvt!3dcpT41A)z1G8^0>;*SyTTO_Al=XcN?Vt&(L<|#8B-Zrc~gE&r& +H{rGjSeMUVL8k$Jsosn3*^S_VAsRu6;0{>I=2ejc$2Qwy?rm~l;^5d4{YG$zCmw@jys)x?lhGDl2POg +iS6t+$#oN4y37k0Q6tRZY%!2s7rrA1h3CH1*1K_@&C+hKA;$reOi*rO2!iMy?x-j}^Uw)E5UWE%6E-L2p)Y$ZEe +J6pll*4~%9!T0B{uq5pDFhDLu$8B-e4xZ1d>FDY&bL54+5@v1`!*acfds$q)fTqQk&P#cNR^nY8-4yX +e?)LZMnAQ&ktG{0axNjCh@@stOfxpH^vvOiw{c)0j35^=L-By8Hz^dlV0&(T#erm;qr@FM( +QMNy21{SMoQ%mDDfa!VFKZfYHXqhJI31d7cVzlX*6xpR&eX5zWLq=s0dEAi4&s=k#O>TlE!y+^CAho) +CnDEU>F(Db2bZ3jr^Oh~9^=;_^x#DF +jo*!ZS3niuoNJ-zv<_gb*906tW?|q2C&0ekq0kDFZJp6}a3Wb!W5-z%bxQ96-v$N-XMDk?X!iiocbLF +dzrZyzNv`Gv3B$mm_${$02U6HEUib95A9*7-e*oKXUY46{v_rCp7AhyOd(R6g<&ac2WQr(2n21WDeS+ +1G#pFPG!OH~*0W6l?!m%(Gyd8EWyEWKa&x?87<>|f7VO6RoS!NF63@MD-0p13^6OFLgWDjK=-^OV^!! +45_lF$!QHY!>9a6-Zk5n~_3-#$nT{VKnS>EJy{BRWiQi@+QB?0!_1^Ei0&^)4d;9z*A1nA|MR=Vd@5l +02m0emYT`y4dqkw1%-9kUB+esDKM`06?K2p(3XRir89a`3A8VuzZ0Z#Ff#*;rt3aX-M-!ffj^-)5AydF$i-|Mo$W&^wiW0u~Y}-K<6 +VAad4{3`OuJUB!<6ONW4}!9W(&-Ii@q7bB}xR6CT~G8VH%N;`yM9z$m +4N3yF8j%vwfyir|Mdy>aW^N7yj}qXRTIkHHK?dXn`_k-w!UbDeV# +P2bk|I;4_p3JGj2HX|F`JM2WKdb(FYzy`8t5Z=I8mVJe^Mo>bE$3_{HeTF*I|Ss +js9M;~%1HRzvTAFU4coklyF;*GW#l`D=BMQ4yt#;UDSZG#l~v8DFo^_rh%knaxW;(jf`SP!NmJQ^A1_ +Ghm$zi67Sss)eZ@y@{$QHA>do6v_@&cAx<#0USIRFAB^#ozDa(Hw~9HvX2C(M=7$kFVm7SmEp +@nVpl$n}LYw;2&y2&gL^35Pm<$m8ZVE64wqc7Jopst5Bkk`E6Od1Il5tl=C&Ufc;j}NmdsTTZfj;0F-MG +^7u*~|q$9;WuZSWUs(GdN~ln-xsm6g_}-cRHbO`CT>wVkBhKz++y6LHj!X$Y`;^Usu!A0R17ljokjFV +s)o_`K9La!yj4hz@0`nF=7I6O5MQUe>Z=^^20TDP`%1i^#s=JZ33qcToAQ~{$>_J6&qk7jW~6R#arKk4z>0X9-^Mh(CI6nKaB47V#A-pj#|v3 +5Uc$s4iwP*NQg;EDMU-9fOT8W~h^4(WNp(hiL1Sp1C8K;CYpC;?O+&boAIK{j2Y!+P-k?t}(|mM8I4z +Q^1i0mS{ILS|&JA2icAmgV=p*plNHz}DB4YxvDZ0LQnxW;Ym^N+aZ=)Gcgso1spNX*3a`Im+MsTWHDfx|;9i@Jx&-0>K(26~4z#va-v^ +9HFI{i(5UuJCB4?7C~{c$`%LQH+r`=$hKouA +G%M{{+>~3DCL +qk8>fq2aDsg{RE14(Y5q%iLc{;&Mq(~zcDanC}qa@>$VG&0+WV{i7Oh_Asc8PJ%*HH;i_f{x1>r>;7;SkkK +jACfp1rB6r%^epcc5oF}ViqLwLl{r{<21$V$ReHyf^2szp!z+)Cdn%-+JAWRH1wV +<=T+%C{uI~3md;PvJRe{AlVYN>dw16ogPZBIiaU||H@gq`4A|0V(0eBIzqE@e*rAZYUbYG+ITGx8f4C +Kgh2s4i+4WZGqF88R@aS2dutRCV+WloZj2J$M-SXMb-%#in?!afWaG*&WxB3>A7chIPXm?2DJKQ2cRl +*21jF%Veohx9P`LpONd4PJDE7Fw{7fdXs2#a06|hV^=M70DAGP0@Ok%<5nfA+5%o6@&>iU9EebY;nOmSj0TCR#yiyTT`g%ohK#G7tau9RCj+0i4 +@#%&yUTt>$Fcd=m+69rGxym~5ZsnD3b%!8Xap3#Oaps3VX~V^nb&$ZWBJz*aI|>o0RsOv!m +t|P7p8UvO5mXE5~u-0KBur?QpR6sQrSFNqmOuzn$U2BjBFO$@~p;9Myk*hrej2=fea0WShDCzCJSv&j +H{0p6z;_J^+Ia~Z-S$Y4Zb#m=r&KrCEjvieL1rL`YNNlOuE-flTlT|#*m|p@_eYwm^|GTYXQa-&f*>; +1-=ko;4h$t{#tnL7}9-TY^#d8BHB?c+?2qXd7sxdg~4#amq1Zr&;4e=x(oPX%GdZ1x$ZD7q^Y4^ifG? +q!x-hM17JjI%zJ>K7CoIXZmE`la0Gb53LY?9Ji3-wa_4uUTyTK*FOyj& +Zo>|=8eSAlXDGjn5Gqzai#OhPIZ5!w7+wP8b*Z;(5^*hgV9)V;Bb;%Ac2voUiGkgMnyoFB$S2rzGLt3 +rJY4v0{}_`GNbpX)we$Ug0<&OHl2tXFbP0kS_TG2q{2I5WH3b{A{d`n>$S41zFXBg)|OF`QvSoSVJR$ +LP6~!rx9S_`Eg-_=J+Vc2z6gz?o7eMDc@3tJ5*&3azK>lO?*xXGwaes!XHe<|v!ZD@8zEdKMRagxPPs +`0RPhW*diS2Rss{-+GzRA{0hYxCQ{I5S`fa8o`$4z-i^8M$0ht*5Jh5Z8?ia=)=U)ssA93E%$}?Mqzi2XW46*&kS`1%aLnwuQzy&y5TUcsobqwfJmZ3?5!W +T&ArA&X{7^4sDGaN2ERjo#TXhLc%U$$WOPSSmk>6!(SHLGz^A43=WY}(*TKa|$tZQvSpS1UU%BJ(s-A +15>%(nirr~1`1#jXk3?WBi +R+^ywg4(u8bdhz2n(_zLnG>?W_DYO*KISa+ty9WcD6SZ@vvN1qH=rW2zKPa0gDXA*o6nP>Uw|s>jtsz +t&-xZ=m!1OjHw{gFI35-XnkF2Cle(LD&tr(;U?FrQp*a`bwb%w)eKxl5$R$a3Lv#8?XKgVo_m-onBGe +IQ-}|`RgCywQJpIW<2fl7WYZyem(dvuM(NCZmyW5tl+0?56!&~TVMT+ycD8|21(_95q@Ia;t7@T3_%86pzscuaNB)G +bRF?jC~&XtKzqEeR=9?r~k=-zZTplsOV~c?}Fr&((Xu10pur*(5$7s-!}vNni%^br8uOW(tRU}FQr +WHGoxr;h~hzLH5o`V~e3G)9gPmWSmjo~Z5;c9B_dgLCOHBP;=hsl9}ctgDo657TIY9UK*l8KMZ$L$7yGz(I7-qa!w6E_(^@B`ss)m}6ni{WQRX4U^yE@vZ%1*5>0TUnH7GG+V{L^q +fXF2Xs24tvB|b*w8vTD^Zrpgx{~Uj+VW`a3`pj_y%_0d{$c8^<+AY$LQmjF62(hjx9!y9hGP-jXv-h@eCKB?jiz9geF>Y +g6%9o=yM;M#6?DLO8h>Zp*h*E418r2uFt3A7~>Np_!8?jKxK-v4?noM)}xHydrV+@{7IkU!9Q5dkK0L +@FBqS+f@>^L6<9cwa3)ddBKXwbk6Z&GEwT0t?t$8@KpVagTUX#DECkgIW+;iAE(8E})J)9C +|vD8(=p-(1nvTtC#g_iJ@lYQd$Ntr0tW!RKX5>7m^wC35?wjWU`u +o=zqx!m`bhXwNssZTN4;9a%M>(LEZ!H0q*cjh1z?dQu;W1aOgDuB%nXm!Yb+b*Wo~A&7z0+cSG=RK`N +qrXi4GqXMS=jMnzN0EWS-94%UgEcqmef0`%2I)rWF)L?t&a0EEJ`??vYU*-#HaKnIVC}Nc=I +I<{I#ZXYI10S>X46E)fW$yN$|NQ4Kws*eR-8LJ-RfE2&Xc;ld_Hk)-eA?XB=OqT!Vcx=p!x#_}mYt4) +C<4_&3KitrX}K@?InZmHb--Soc4sIp&)I%H@?r934-07oN!170I8+L>E73L^-{t;iJ5_idc^4>-PE=uXUeNAlWIRv0CS~d7D#6 +<~nkAZastB6-u&*)djDMTK{xILPFX9j34C5`ibBPKuhMQztW=f3{xxtN#O@YwGdh_VUJD8VKN9R0xa8 +h9Do@iY~Hjdngg5gw91|LQG5Lqy{}`r<1>14mmU{A(3JaglN7*S6wE7O=FbqOy-FQ(H`Q`l6wUZx?$u +RMOq};M(S>>$E`ZO#JLPjrjB@H2@dl>!lB?@NUe(E$~lh>uIF}xH3XSa>j=>D-SF|6VuoqO#~MR;SyT +hS~3yro}GAApMoCQgn?8rxc)?lvAbv?Lmjb2F6#yGtj1m)93?`iH%5yk1do4w0}Xu>%c^hE@OBNq6G2 +HG5lvQ5X%>XMwA;Y2FD_lv$T~VyGa7P(Qft+`3)sBQ8r90arcDWFiAD`^sHV8-G-Jv0q6JN~fWa-l=C +WC3_(@IUQKhj>4Rr}=Ebmpe_FsWyB+jPS`C+y&1=Hk|2`|}~xx;63R?o~HS=hc}|>cp+Di6s;Lpn){4=UZI +3-a$6t8{RHuX7JvWYA8-yXxvf>Q>!?Alyx#)q;yTGY$G)nw8}wyp2cJpAsH0C#Btvw-8441WRp#rc34 +`8&)xf3^)`66&;71f#F@la2{xKlcAPH4#0Ko#J7(p2TsnM%-wDBoopYWhJyABKb~_#S2AeANgo{$>Ha +bZ@&S$bY(h8#=tPx?=Do+7CNdCxy{S*bdH1UkQ{!r}8-tTysJ_1lKA2uswPkCQpx}q*nh-5Y +mEHxDOb{Xrto#nfZruiT_|s;-+LiP7z_^>x{ogKt}8(;B~OpOeb61~@?F00XQNC&!YmVSUeTt&yzmW#sSVjRq27L;?Xw0b21kCMja$Pkp9$gMDSG+ApQkr>_^rXF`#p(JoRUP27ZDafkI5fIm=@5bn>0! +e27@#ztHGe7tv1ituCs*xRo7Sm<5P2h_rU-=2|vnsifM92jE2DgJKGryFi3@hgE%DXYZaeQMCX?`Yw~ +fI!%7H?RoS3|quatRKudv$@TlBoB;ko`Nq$WMGq?{5R0O@rHr@7vkfP9|;Y_+v-sv5;TRik--69JLkS +@y^dK$|RuF~nTMi~keQ%G4{iiF&)~84lKWJXH=}>Mn}=tB!ka#T*DUuYTJb9>2||QJ@!$%SW8 +7wRW13XG@}7T3vYWV?^k6kKBrY2oq}&kVIOOvWbhWud=eAvffKEg-N^U~vbPN{bQ(CAV?LKv6=YOWZ=R2)*yk +N7q8@L&26zCqD)N`;XBjkQPWpz@7~TOycHNWf#TGO$sZ<&UKbd6U-_GJWlLxh=jFvx21MGgwp?j@e9x +4`o=6~J?2}&jsb@$dLy5RP1IjarloD75Tq!zTQ{*@O +?=Aug0*9Iih6Q=VBq@@A)ws6t7Gry>hl5NSJE!32cyt6z$2ph3Ea6a86>3?ErQayD$Tqppbq+&^uxXA +Yd5{ED0dXBkF)u5fB2AH8+55dY~0t9E&To-GPYlC3WfOHkT1bx1I}MXbkmcuNSce +h)j7vyA*OUXWc+HuB{`+Vjlpl6q6;wq3AT4@!goH<2_WYwVZVO55QPA`0~py*IG}a??fh=gyN5tO+sb +-(=sZe`1`C{ku>s%w8UpP2W#TAS37$7X@iH!8JGF?LXrnbRyqqG*;r4>+a7?Vu(;rC71yW(OZ4^ol_V +k%DsN803vnUB>M6yi%1e)1nRJ*E?oy(urZbd7Movc^T1v~C@rR%sr#BxaL3&dfvIo85H~3;)-lUTcH| +ec-Q}G2yETjlpb=e`Bb-KivN~FW;blKZ1dL$26Te^%~Gm2pN& +bH5*75DS|}l`Yu!|@phh#qF}`Iz1~CGTeYd~w8jU=W`5h7KAm?3CZdz0uTiYCG{zQ?WBZJ^JEoyhQ)t +TNCaS0MFgfb`6>KycKvDkz@d< +N6McoAq(Dj+`7(wxpKi_Td;VrY|kFpI;udUGXmu(_tlmW6f=$!rNY|^jg>yY%3ah=1C2tLR%MYOLxJC +=p%=$!5u(^9ONM4qrRAwBn#**2^C3t}{FlDBTyv`!)n(OnKEJvaA|wH06||0`yGcIXsDh_EDNH**s^; +jljl!hzv^8hgBgK*3wQ%>5j&?#Qd(O^-I;%m?N&tf=0U7|MQz*q3eo{L_eNPEOnR1Lo#+Y=BI&DXb(k +Sc;Yiyxu2AMtD~(+*3bqum=5OHluavpS8Blt3WFv{ +-0Hewn-cM1?e|e%)8tt#IJS9IJ|KDzm!)Pwh2+dk*b(gHkh8zdYQW^tbGt7tB9k@#guPHh +-MzNx6Xo|L0<(#!JqAE7saSW&rr5(&nj2$1-bzJF8tKk@~q?0|$F(F)T{@2;*39Pdsf#c}EQ~-$;(A6 +}^W_}i=yce`~w^4bH1PnhAq4<*)0RG--{pww=HFG(7h_=rY6-CoFnev$S*NO`(E8~=iUR+1;(8)t0y5 +MHlSh4S;m@)j&lZG@6qPR}R;iq2zV4T_)qT9C}ed+*+_i#Y4l7Yyp0_+VQnH2Pnb#M_FwakV{FkXZ4M +s#z4rOCL*p9@~PSvKt>GQPZYoM<|KVho*{pP650>{e1oB+Jv#DO5lB)J{Y$T;arHczZ29rAOu8-yRD= +c$|-_=*sZX9OLYin30QP`tuD=R_(W1-GIXd!9M2t!kV}YUt?H3O6JsAE*nBOdI4qv!)T~N0vWSPj7^7 +7sz&UKz>dVQ{B~R3o@8hn()uyePikVm9G$6zXx!Z4!}W(sQ3>No4uvSZR$@0wd6n8m<&L| +x6%zI074xs2mZO#1dKHW-w-3|w4@Qgwe%i}D*8n}dmFhgI%L>*)OOt$`?Uc)Q3_xvF5ldfw{FD)8$?% +aGJXU_T+D>U$-JH7(m)>e6q6cTAEQNbv6uvimG-BM;FvE|N9kL-WVRHLY1!Pm|y4BQr=+u1@ +n>WY$;P2Jd-{_eA<9$LGsJF=&&w<2>yA-O$G&PCXZJE_1p7m0CID-7FOK=K`MQ1*6xVE`;qYLn=B`!Z +p<2)|+*H!%$3*UYJahkr&#|sg!%FN5e+8C(s(Gi~=0!akVdMY)x +ZH@KVdpU0-Gb!W3GCXy{cq1N5dE$)9sTL5M`NBGVws=r +)&K<#{X@qfAD{fLJdx^W!&cw+p@aM6dbmnv{6Z+8teut7nThLBR}><7O#-9M29uN9Wskj&pcMF^7Bi; +AmoUkCVX9^g1`}!kFMfY$J0kl0%~a~RnME$E~=WXsNC5Jwzs!8cXl>+;S)UB+1Y;S^w88=Gq^fE^Ff< +5$dX_&8{uA?ulgy>*@jiPW@d}Yy!L{f9hVs3q0z&}NvFEoFPl#1jdGst=4YLA$m!cUR@qhInS1UEYsz +?d-YELPyPn0I)-t^{xP;ZyP~LEQ?PBTJV_kugMyaVNZVI8tfw8CDh&q_-ahq&x(avjgyCJ$kBP8KJwT +2_5%@N6LTN?txF%lz$VAOjV@`nSvlS)`T>T_0vt%l>}YaJn8cm*NR%NX_fypka@D>^CV+S8>$G0+PRM +yRUMRqMh(u?$!G0^vTERzl>rEfV)BT`QAeH>*S{Qp(|YlZe&!(xA# +s@EziVt=WiUi!I+0JgjBJQq>GcD#gC(*>LyW9FkDv$n~MOagVR74&7AI=t&NMCv+X>7p@UwA*&DB3vZ +?Bk&R>pfpb46sKW`y}9Y2qkyGs(>l)3BXGKExd!Q+Z$6j!@awUi9Q!v?qX?y!+6+D~_X4_gmXc)H4k( +5{bA=8nX8f>fK}gn&?*sK3gg#F%Z<(wGFOz*Feun=z{LK8J_!|GAP!i43#qx88(UPo&GN0MtO= +(Y1{;F3?Q{`eze!u>Rmx87y+Ng(A%FU3az*Swq`1-yqPeBvVhow)Dy`414c;KsKdQ}$V^^O&*RbRRGB +cL1AUOllYV;|R$ti{cSVK3CEXMiWo5;!Kl!ce +1m0kbuBPLwb+Sd|<5g#bydK|4eloN9wW-f4TFK7TH&J`HVj7Had&5HtJB@y+G_bg2(*TG$ru>bms@Md^Uy%sSwa`>+M}R7tUbDDV~$e*FvKvD?GgSM< +3G?vH2VNV)ovNu+xX6J9b{34EtS_7nv9-{t|7vlg4b0tx=CYXA$j$T&1E+HLO;JfcwCB{XsJ82@;Kr;^eQ%i5;Q;Z94 +}$;=A5#4X9}#aP&X4L4+hWA4_;zg6X9Z7&abYBi69*2cO^R)CR7O!Yh)$6P2xMpV^yMEJwib8@~$gvq +l5$?@GM2|QchkC9LZ8{++9TqFK0glitxtYy(B6jRc9enk;l#(YD+%yZsgI!9kqJJD{1p93VF#$ +9NAqjb51z&~4K1S}mAM?pfYucTZjeAfftrl&VhFZZ@5P$&59fOSng#8Ixa+8fPp +4ai1Y&zK)0UD;=pp#_~s$(sefj<%3e#dP{}_Ep?$mMaVXh!*Up}#6-2i&&S=*$L +uj?E_vBlhw`R7&qzmN^>t2G>;B%-65}psW7T!?wJ)s!aQ}hmd?VO=L67kvRy6Nvtga}bYX#~!A+Xi_p +_A`?&+NxYHk8fN)P()i(DwkzwO{9(AR?fvR2%pdloS5!w +!Sv8ZY)4Fbo@bQgmzm#3&Mz%vL(-&0XQR9{3Bvwe^=*!r0cMZEOD~e*8v +YGS>*xs(aahnIw%sbTGJz5D})iqu7+b4y1P!&7*?ev<-v3BF@T34^fuh&1p(i?tc%@l*R9Mzb)*!I3$ +)4+X}D|nswWePvVA!>sA14e`$d0j7^&X}lHon`MFhhHp{50%?!TA_Bx1UF$509sB&Re2m~J8|kBYo3H +!&UvY*y%J@)-2GoLFV1!u2TCCDR~-eqpM7#0x_yk*z=8KQ?& +L>Obh0bzu;%yfN&QUc*NVK7hBaZtcKmdk1kFU@9mpakN)i}9UX(R!V<30TU*$$@Y0O2TKQ_&Fa$}xm_ +hhDE|C`R(5mK6rbd-|7M%Qs)`Ccw`yi!=%$MY$U$jd*2uvFnSDP}Ok?qbM2>*H3MmthCe=vYqoJDDc* +(*g|^qb>u9v__?_Fo^pc>{y_S~PR?COA0xNAT+O^_t1}BGqKd0va>a~E2&tDxJ9|z~B!JF?-UIj-dXGhS+5AP4&y*qs0H9GS +a8+v&dygh}VM~AOJgAYML4%sJxcHg@;cRGq1W>FtUPo?`b8E8?d08khR{R_^2&vXY2{czJh>D~Xlo1c +H@gZ6!!pXP@cJhEZ)YuNeL*!G~#rV}``6!!0nV4RFedjmU+2pgQw3$bfpen%%HHGRlq$LMl{zRbI0J} +?mztvq0iuw+JLP8xP^kqm|kcH*x&b%%yMHD|FG}_=Oc8GUowbgBg7Ae;{j&U^jgd{>irw$+ +WfGT>^_we5K`K6B?S2)se)eV20x7s28<=a1jw6_L!`&rKHi +f)4@~Le0`5E|Cyy+I-v4@7HeW>`$#0DLJ58rzaus;%(Mto1G{HD6S)htRM;YVEA^qvZ0w@S*loS36>9 +rC6PGkpo0|sDVX6GDiR)nQHQ73hi?wPKR)mO@ZHh*VIO$?`!hsu@MHF4^<%+hK=c^qWz1Z*5?QzTG(q +qGf>&9|$hk@Z3F0-MH-ETJfOpKG-m7cqOE|)Ro4g24p|v6z$EBskx>Fzms=e|a{7GX~^2ns$-GFpU!q +S+uB^Hc^=o|K>b2J=bQ$J=`*GcfDNkVio3rsUv98=|jDAPvG(t;z?gzMzAg5RUYwh*UD +k0V=T(lZXLVCBuY|M!14fj68xKssBLudF}YS*ZPU9#C!qJf$Dtp{48{@|25B~$zsg`YIQ%%Hp7`dSB{Fa261S{rO7?Hw +0x%Ap^i+&gjsmy{S};uUoE$3!v!zKfsRPfrOi9uBmQsPUEJ)#k?N&jQn3h+zqd#{CO-iKoL#;Q{sJO8 +$EpQX&wAN@$js{eiB#Q1$$S7$vpU%-r<2J@S0!)aKratWPvY}K59GF7?ODt#v+dmw-Or?0~Qn;6}ahb +d;V#Y*mK+$cUpaJC=j%g9ffKoFEJoufwfVF|WCT071v9M*mb%K|?%Y6+<{y*Gq|ULZX{agvEKm? +uo_0cuM7I`dJ9%Us<^q8E6PNuy9`J&7$RDXftf$yGw8oCHwF#1C^=LV3#!NGo)nc=fUuP%I_*hCYWKA +E>|TJx&- +Yq0ax*Kb>EcvOA0y|dNDYTe-LufE#-8vgEl{iiQ?zxwj4uMMI4@TYll8>L7%GHuLYfHztK51i(KL~VY +Kj~b@jz~bW|(6?enGhAlaxt?BJ=38f1b~kD>OfQzUdAZBp&C=5I%DW@k0tW)NcD|Lno-3081kFWC!== +0yD%f(1WO>1MCD$(DT?$!kUKiqdPVXbYz02qd3Q)k}btHUaiQ9R5UcOR-q7f48P-dC=VK3a;-r4Q-dY +vG|Y)62nV5`&RYva9bx+mUq^6c9DgfP+)^wzp(`;tkm)pjj%x-Vb4vx%yfS|aXh&nlg;ZDw@U@Au*iZ +MXU~Dg8Vny~en2IP!Z8OX>Uy<-?jim>uI4%DvZeov9GiN{6WDj%lYWLWMIbVhZ*NO9%#%%+ORkjWCr28l4!MvxrlrVErSXQ}clQ94E^WrIgb~5Dk +Y#e49{gEY!6|AGJnKFy=hol9%gt@ +G;x>eDf|mLwpyx4ylmQGM$1T7vY1EM=>0r@Ox8X`0|ad`)NZ9hPng@Gh)Ufgg=aB-^m{)J?H$FusdD_ +ZGo!+&!X+ww+_A#S~=`=fr{65jJcWjiRE(_Flp%>qa1Fh~M9&(Um7+-CJdZo@BSc!f3UL+vwSNDE3M; +M!crLo4BD0^>AWoa-t!H9UyHQo4fT$%QhIO=3!~VdpdAXVhrT_U2#mUaue7%De0%^}rpBff +Jl94WE)~Q9Jh#&xwI>t=nT%5Z^90qY%BIfF1PxXgGg#xx}uY{F`xS7QwxHwsrgF$*pr3knroBS>()RU ++5AjSi54Wt93_FmA0iHgQS+T*if2?X`}a;JG`;nsv--=F*PbSa>y65g10cB*r#+6`L1hTR2OZ_xPV?f +Oc2!4%qsH{v8)?Tjd71oTFdrmOM{iW46fbiCl`MQq=P4!R31KUl|1alqvWMY4%^=2iYA;{aqhfw)v;9 +1z-Yw>Ec`XNQ<%6h}%}j1w4@AOkWPgf(gIq?0VP-|;j369y+vLl~!&9^GL$G-FqUtrY&SxXXJM_vfId5>$7Nd6J0Svmd8oeV>)6`(qM` +#p(hz>dXmY4ZKMQvx*bQMMygk@F|l!J2!0Bxk#lz<%!#SP2sAOm#S7Vzd~b@FWg8Q_nnq61GvqG81q2 +i_&SQ45kkO7smoQTUwcWEuNWOGQDYGF*X2eoyc1b28D2nCt5`*|roEM+Y#n>IREYC4c>2zhLOq5QYwd +|XQ?7tbfx+XI-G;Jb-L5H)RVG#FZV%xry*UF@3o=F2y3}qBu$I+O>tVSv7g|N1?V9+A@BRXr)=l&-1# +tF~z&tNwCNKP8`c{EQA`h2>*{6lnZE5un>T6KT_hc3rVpq!`6B2xARyroQtD3PI4xn+m7YSa(ZG=3_6 +o&-8`v#bCdEFJS5dY0eOU|7NtH2FXT<1>NN?H%!DciVsUMm8&D6#}QGz+o4pL%;MW6l|rL5f8~Lu#lX +VrlH(?p#hHnGRefo;B&XDr69Jr<`j3;VXQWEM^oE$;fBff42#^Z9&pD4z-6H#7c=EfwcfRaT)slT;wU +-qAunOdJX2V*k->aaY#MEyFwZL0v$&&8_~yYKOU2AMh$YJ!c>Wvsj~F#KBEK;1Gm~hOQTxY5&{Wjvo%Kydzd5H$ +e{@t`wP5)mK)VbR=c<4Ar!+H3{L9F#PyqeV_1=hEsVWhw07A5H;F1}5k+L+C4A0g(T+F-VdD)J(JnNU +5GbFiZ9SPzVd`M!(#1FI4U95h4T=Kr-+60=YNCE3;<=l5O5RdEi-NtkBro=Zoh`h`5y;+ek^hd2Pl1q +1D#7vvV8sn`YHV++clX-g?vWq6u61A8+xx5Gt-WUXb|!-&De6Bc%}K>`hs3MFjN0N^`_lpe5v5yj=}B +8Mw~m_~@4ts@0%5;VmMMa5!WM3^N^zjqf|)$Si-QG8;Q*uzWDravTCs^UYze{m4(*!nl1`p(r`Y*Ma3 +K?rb$AzEcSV6`aB%`R%5F-(X7|u-7vf{KI${$X^SH+DKzDdhuBv!CqgxFiTO7CxO9V02M@9n<4bNMtk +ahGmTyfH_RWMjXD`yZN;;npxcJi(gna#ZPdwbM_03JN;G(|4c&r^U)Ea|+;jHQhxIXFCqD*` +AQq@D}2D>I1`k)Ect2^7=u^2?DI*w4<(j&1PaI*)KuDv9d1iTUWQU~NtPM`w1-Arn12O5DBUhCt<38N +OEnft)FrJOm(+f&P`JWZcm*v#P$yGc0S|=ZUpIWN(7^}gy0gOYvBv!2@ugQTP5D`SPsfkm*K6B45*o% +*u&7P!^YnC)W_@2ivfR=BlljLd@{UL68xQ6gEBM7D@{0cepLh%&@qdXwtg~%5?6< +WebUfCF=*<@`gLrkYwAH6#QVgthF6NR=D@PrZtwrS3q^S2=p#tl69Zgqld0SSx9!;L9DPgs{8Rpv5)! +AxTrlF$qKqn^VBW5Kj*#Fg^fVkR#6Uv3i(P|J`4frRD%i$kVWjA!7wjG0|2`X{4m2LKi +pmPyAO~&v={n7iuv%b61Xp7Pz5+G-vWWAOn+jc*XwK>=aC;NGQmio+0z~&RP^@c#_W&(Tpk3DHdtg)b +3n+piZm3Wl6xo#dkf8wdxQM44^t!K-(KQYZOZbLDh`pk?Js3{B?6IXOT6%==*mro6PAtAE<&r8i245w +5(O9jIqoX~nUQrI-T36_wb6Sk!A|AiS4Da4Z&4OItB$K>>QYD66ukz$yzIlEyfvP!1yJVx=zH;jjvoY +uE6SM@rCQ++C+l1{aCUp3U`hpjP!B05r@u+6`3`2;A&W)-25$x};@#4X;gI2Ck-6`)XRWMeqRQ#-1t@ +wGsidEI_w`x_j`>$M8_1>%3-fDi6%hcJM@B{0hKS?M}>?lvuSlAkk{EjPxoo`ezvKf(XrI@0mVm8wu_X7;Rfj0~ +F=K3IHV+_sr$M9FslU)GgJmJaqVyhc$=|Hd8uJCrj>_Z9<=|XzC2%GKjByAvbSunsD!?zA@#GT>l_>2-Wa{0BVw`A{s}l>Kr5@=5`n#j^Zt(W#>`dG|s~4Q6S> +8F<+Av{yFBb@5w&Q+%{`@D8CAF;b?EkWF@MP|E?PSdb$&(ICnoPUSJ(l&ENa_O7)exMpQFfAjHBQ6Qh +~Odab@(w)$S)(~Y)Oi*hP~j4z_J-N#ju|0(!9wG&?;us5`JDPw0EJ=o(f(VK80UoLcFe)k;c?`Rab= +L)~e(h4fsvUO8ERCVTh<@u4foOHsM{PI8p+pHo0x|7JMUP-T>$l_X3F+fo(|*!yCq>iW0*6D~9;6*an3FF; +-OstI+BjkB^Y9hG@-IgOfxMu&?ecnf3a&aF{};PX||S1>M4uVH(WXabH8Nn_bais`f^-w5ZRhHks7dD +-cONC0iZ3dv{^A3hbuz!U1^#wjT>}G>^b(E#H;fNrCYR8 +L*eIKoUYh`Jz+*!Ovv*)x1#p|o9_mBCS1aKlQBXL8BJb;SUHUGl!(bV43alfND0?l%AT>(L0)dN#Lsk +_5jkH;4|~qu$=A7@%MyPu07ioflqAE;3#3qA^wJf%$KBMHmJd5}u{#W0NKkmEW&g0B=1CFj;71sBqp* +Fm%^_Gp8W<KNl-XY+yS@l8B!mL{X566f5KV; +jL{jlSl@_42yEdDp-mpnV(*Y%td_=^p4glru5@q6jkr`I3W9|*andc><6Y)mb4NVKc%1bOjrKV#H +yD681tU-z4|0DVgS133m(6^q9;X)Cen^@E0SuG9;7{5h8@<+P3^kYwD~ttVnLXyInIB-*FeoY`8aF&O +JmJjmRFE@g@T0JF9r_hiGyH{cGo&^w2XP${3n>#CszviqPL^G3G6Ex1S8Wb8RI{-*QdntBiqSzJJfKA ++MH%mavIKF=1M0T3uuS|IopLc{@XqFdd+n%g$GdAs_!+`~Z6oYBe%hD!t8Q?1(z7gyp$F?*rrPsze|v +{9k7@1(&k9K$7uOf?PQ7(@QWZzpidSsy^J_Z(#QsLiKFYAbjuoTW70KaK>|-Wl(hR}Xt$3_OYjy@(HD +!>TA-})MJ#G9+7@&yBAqC*nEZI|Zg+J3$eNN4G3DXc;BvMbF&=5pm4N(fUMCiK5G5R)@MUv(rC6+20X)Esm5?=Njh$p=oKFvMkGy<*Cj{$kuii6L?_~;ND1j +gSwZF`pP&+ee36#$Le9V>T5Ru&1-Zgy^KMcqUcD-1y +{$gDPhy3Ao8s;9er$?lh5!IPU0lRy3O&*{yFax(t&pZ?gg>T+;phTtSYqilZ$olxFT+ +ziZI9zB!t8H&$`0vl-u?Wc_TXF>a)?WZAt+oT5`oo&4e_XUFntcu{g4i>Bm|HMxngqPv`^Plz7@*^7b +zH=e0D8xNpQRsdk)rXO=OmFZ|vEpI!!ovgxP6(^KPW*DiN>5kb_qPm+VuzwPnJW(HBKCVHO5_@{+f>E +*)a}*;9K-!~-}b+i)t?(%%RO8`ltYsq>N;N5nEvC~61wV@rEiXP>DXW+bPs=Q)m?Hb_T0EM-yDft(Z} +d+g>agUBqUZF^N!(Xfq|)XG(a(2(L!S_=!Dp>mRmp}oQF(}GuU+XVC9EfTh)L3G^5ysw-kY^!L07mau +|)o^1F!rn-Z~==nUnv5@jQ={M@J?tuTcjhgVTyq?9N!AkkAq*wj)lrnV;mONGf4%#1|CX`~ZRo9R<&I +wDKI!Pgq7ff@{){tuvS73xVUc}#T*ObANqHb7EZRiYo?tWk4W$~!U1qJ3i$$T+i$wlqd3qoj +nRStPx*+M48K2hnF;(hNp(+R}qE941DN#`iVxVy|N;jf`8HLeM>I$U!`&k$|WY*6TSXuHO(H!r_G7Oa +vPo1|*<5G#BQN1du(l~UZp0hv-AlwnOC`2Lm{*D$V>UL0%HBL%Yaiack8ja)ND$NTFei~q^V785-E4O +k^A!-+SanoBPLCFcUcT`ejn;*En(@Ag&?Y-9Ry~XyvmF=BzdoLG!H*f~+L6v`Cd*0QB%*G03h$)B;Eq +Ub$(hg=tLJ6n1RdIGHKxoO!FUdIF(mX@8I#Q5CohmN(Hg;h$priO_T$h*lJxZ>wG0k +tyP)vf6ckDr;plpOEn8Fg(2SxUVxHy|B1B2oW|M`y;o!STx!(!Vfpk}zq2xjZ=iEe^5#An4r$*>lrBq +uZ(CSkrz|)sC|#5KeH=$)^Y^zo9N~^Q`sX3~3KV!V>PvG%YQOn3?C`C3lF>b(4 +AzNL9fNG8u9QWJS6p{#Y_V+_6TUtg1pgl#(duMp7j0~(ec25z+Sm?%!xs1(!WM7&kI_K;(q^>+7BCQk +1b+z*{3R&(9RIN(c$a9CJE`TTd{M2tTbtaWbNM@?|IIUc;JS5xT$n?8Vcen!tBx~NmPA!vEYHRDZJfn +aOj?m))JBAei`Ko(X5MY4A3zI~QnsY!<|VwGc{nxUa&T>r$fgq{3uD1j=iQQb;|93efK9sxUs8jvw2B +cuHzi~HT&$BEh(=U6V#blmG`4C(nawlQzyR@_PAE-j*y?q^+52Miv;Wz06#dKtsSMWY@x-_AkkX~2(f +{m<6H<)F8ce1RKZX(dYhZ26LBucWhXPMeJS|XZKda(NvyMh6u38Tsz^3*k;W&~xD +C}mCFe{rBs!51d{CmOB38(1BEBkO^71lu3DDtI7n2gY4?nZ7)UIQYjqo<^JN(k +c;_3J^&$U|+UULZ!6G3fS)+O|MHEmn%umuY}LbC1RKlBE_d}bz+7z}#79xxELz+<6?xLnQPka^!V+I` +7XrxLwqH_7ZgAJ|5)GCh6RCPA`|Sc10TU-beGcy06Mrwl9;xV@F|xM2Y(Y*GBwSv-D9+2opxwglPc@tc-|wz3TO5fP&s^SR)aw9I9QAXG9Jl}Q*SXneqy>#A8J?~P7FMA7e!jy5JX<5LX`< +1mHeL79|Z5vu==jSCTdq2VzofEcO)g4e~YjMd9c+G*r2D$s7A?BSQN^(x8` +#wec-QNb!xUZE}3VipIVmmb$M3|NY9MSqq>hdHD4kUwynT^6O%_%=@WcRD^~S{bs%Ghkfdg~1Nxbv1L +#;!)To`D>#8EpDV(TuFD5Dt9py*t +L@y8^RwIcorCcKp;ecSo!&rWJvjyL2eNuO~N|ADA?JQ=}sibYCglHtR)<6Q}&z~41S&_lso<7uPA6r5 +bP;X#8-1HXhaskdsT#@1tHZ1ai#&7h+91OA`pWnHpQ5phM7=g;1y_LKJBnEp_VkA8K*8&=?qZvUvZJ2 +7O2t+@ma^R#>Y=spg$$_gJPw}cy!7FNyDX{hQYuL6{!13DaC@U)+?hQ;T9KYY4LAvki`MQxY-fm$T4v$fu6{2iuuVNOVtyPq5+s +bkseSKlMryOT9`DVv$AhzD&Jm(zuQ?~N{z=8OqcI#-;Yk&^pAV$hhl?In$vJ%P#HS{g9NSor>6G!C?e +WG(`lW&wU+&3DJ9tn^g3_-uIxy_8|&tM+#L(npW@Sw)le=`_l0?wj@3Q2*BwJdRkL5j*B0Xj_6ynqHO>ik&^(jna1G=0IVQShQ1Hfe#q?7Ip@i##X0gqu6Mw9- +(a--NZ6wAsLAHB9WjZ9=uq!umzM*9A@f}K}^{8*z~Vl@fPG7FEkMA?YV>a=0S*~iLdJh3h&u}0IF0!8 +12O9P3K-MHE;-OVLd3`92%>!qcO8~e;P;Zo_*ktb+%o0=CNW2i_?+VlMN7g@xVjVFUzhS==$XiF7Qv( +nbq{HUE(REJY)aR-?e7y^BAXVJ#)*{ua7}BzpGS!Gn39}`K6{(`S{>@{^v68a9aF6m;bT3JS~CIXK8<~Vp<7`CJ4hcZo{;SbC3wF3g6HG1uZF!k*bb(Lz$Z>W1qE)OS%>s#~;yJ1 +zL=41AO*Rjc(SE1gvRv^~8>QMmHU7cxSX52B4>v$RqrD>(`&Rf9?nw^FZRB=d} +!9c=1&_<5-*^+%eHJwj%B%@{X;%BqQ2sLr*_*^l0RX;9-x37x#?SJ=%w27skqT1#Oz$I(zT&wy4o0U@ +7SkXtA?0E$oxlhcCAoOQE~NNXLTENWe`F%Q9MXfX|gPA&h4Ozu;#E1aSpbrXQv|cP)J0?yY|yI6c}Ac +MKr2}ZDdx1KN!deKMFoa*hNM;7@$tAp>b?GpC(m>YnEg9mnz_%93+O)9<1XoRfz!qanm+~DIX~Y=Drg +t$3kP+!oHCW9hJ)F(-Mt|H(T|RWj-q7QI;Jd_J#`W#@uZ`_BO1AeJU`y0{^qVrkVc-D(u{Q94J5HF5))X`@_j#cy>h?IW$e>oI}Ea2 +x+{4cxYz!G^bNXsUus%dp*?|62A@(!=g_nSdd#Zeoj#^&kRD^(0e=uu>1x_u9*WB|AAS^&$U!PXu~X2Vobt+vN@uu3iHlR=4<+ik@o4ENuYt%g87d&G-2Uv)xqJljbaoo@852=Oly89mP7 +#qUlLYDnvJ(}pV-2q@CFSoDx@kFF}+U|B!TnMS+z*xR +}A3M8tevbe(v|)dYCdu@q6=DvJsptT~FZ7@aVk1Dq@a^ng%5C^f +UVOb^hb-jSDO!jOF}7aO(Ur>72#X9^XdwO?fY+JS&HqM3mlJUrcvo$mG&_MJcjn&)C;c6{kpG#mxnJG +;Th#lM0-{dudk(i!kA`;ki&VEP%1gtirKcegwBl6ZVlWd-9LIiar`K<)y_FKv+8gPv2S@2Qa2x^{>OS +77H3zU*{^5JN!jZR1Xv?tSIyU%lBsLbHEbYb1cP^+vM2jo8`wgt0(nXE58lYmH|6D{T7fPigwATGL+} +RC2CQO67HamvN}7h$8rp=OZ@fH>F-?Co|EE2hXuAoapsm;^J{sCY;{^6R#8~!N4LSMkeK%u1O`T73#&P;LKO#=zgsuAtReLr%)xB) +7cK>NJ&WpNc>?hJb3x)b+6aM$!c_V#ht_#l-3bW8h7?(d-a-oZ-bmAcjGnAZT&uone_`QQ%!>CwQf@5 +S#u4Ji0ddJj7Ymqtpix@`}fc$ylZl2(@nt|8Qr|+jG=iZgbZ3xLj7=ThZ@rvpRu;cKPFFK^5;1 +Q4_T(Ne1)wlt%l)DMC8cn$zT-o5oflbP71=FVAA5)NODS05+`*@O`LSbd0}35bJ$i8iKL7LU(r?(|B~ +nUBjo=PxmsAAihz*^$p);HE0KC^1yK(|BN<#IKyYej%|9xg>4plR5*3aOs6#C%01>i?QJRO&X+9L%m8_p4-Fx7jF`OoQncBwMrUeqwhe;u%5(Gj-a#m+!^b)kx%R=$W +!=iuYNW#JiZNG-eF1dtZD;Bbc|8z&=9B&-tI$cqqZZG%lX^uuHOhWkk#xmq2ldH@v0ceG~rBsDjpV2m +$SisF*zzzkt(Wrf5(X3#&r{KaYb#_1|-#9~R%O(}sFH4wBlJ;u^%=pXCxc!Gtd1~1;KaXz;|nM=|ECB +ywm+^cMuWh_XK>=mRI37r@LSS<+=_E)ZPrv*0T>gZsEc!Wp!inlG5@=`1wfzWT{RaR6wC>%^O;-Y;kE +oxuX>kNcc%C?{?J|kbUMVuQcSCk~sW+4mrL}Lh^5nz$cG`W#yAB4zC6LTtLRw*>|0;%3Z3hW9_<)jXc +4CBg0+2dI>!ykx*se3S}P@t_V(bbVLG?;sd*T$rh;*K&R)1(SDm67o}#FHSgI_%kCVA2fhSV)5Ds^F5 +6^2ODw!Jv@vi4)g&Zo8BSU$r@N?1aA9qt(fwkIOmFdi>h51(6@_7iI#{AbM)&Yq#5;McFR@&`tf +7#pq>d!u;Il>M*XMQ>!{ns-qsMH8nIq%`e59HczuL>K@Xqp?A8F^inD +Q_CpMM{Rb3v^NJw$NrqG`fg>{y;}LQ79{*$^joLhrG5Ijh+&@+0ce^K8vGKN#eNBF^7>VeW~+8lR1bO +Hw1^rP(EX9>yZ2i@-IUtW5P(&920k;e2{l6O*?GL>QC5i$xP6wh2t!*5D;m`XZFgO9l_AgPBpu)h*mv +rb3^6QPm9U`WYCryH)Fe8{ID2KW6Pt4+K;*%aBN>gcf=s73fH#r=R99@#8ZmC*jM} +w*YhA{&7BuClkF6>3WS$P&f-UO|itHp-N>PJwI3ak4l(ZbnvjL#)>7enkOxdEVCq;3yP0PHjmvtHA3_ +h7a3g;Lzp2H{&30`ZA7OBSxN(XAjwM~Ejg2iA8$rP?TL}acdTrSiW?3!jdsGRd|tB5Oq8#d9L^M`mBu +7UHD@De5wFdTYZ;@eUdjsys(V}wl<-wkK2NJB$rhZMnk>ZE0C1-Juvw1hTT^QxtK|6RF07axmEs8e7Ic4Er8qj@Wx75HhVru=SQa}y0cL6k$Y?A&u+%NzXfC$OIyLkrZf~Q +?~EFApyFpX>vOE9eGL*<7!Rb`0|>hytFG*UQOR6XqW;>+z2wK3Q3<1m+NW@Z$I^P)I}PYW$D)NLuvf! +1U@~Ht_SZ|=%?&gFM}6SFR0=NXy}3Sq-uhK2PWFPIw||9yc79bZXo^0R_pJzY7I%y%K18j>c9!+s-B3 ++^qBjbbth<`owd>twaVgY$FQrDaJE5f}3CUPBMp=1VCv{x9-p0lT>7eZ(NxqBBC;E<=M5yaL9m5%iYr +__ezfoaN{-k#?ow#~E%Hg4ugzD~1I2CjS6(Y4hS*}*|)&i1%Ovw=LNBJ +_mvt71|^f<*G&t;0p!V&o+Hb10d0y4oo(5X=FM|}-2qReJNYW~1$LA|X-`5&DOmqf=@apS_@dpu^sl3 +FoYs@4$WPUq@@c{Xn{q7FU +PA)5pRLvS7xk~kxXS1@Mpc4L1TRO!%!=w5qsRiZ3SMw_MRBVVrFYSyGBRld7QK)`)@&)9OSAV7m=d-Vi4xy&9K>-pJ;dMT(WlB4`3oyBICG$V=HV5SGEM~dh81YEku`?n&O&mtkut=A~_VUhDI9$!cvl}v=OIfp4TVx@PV9;3=gK1W0x)c@YZ5e-CnU_dR@*{l(Zjg^Q}D|JlUEvQ5?-fNhZ?!XVe;!l&J +9OteEl)%Cvy_h=fuf2~(gpQLx8}g;Dx3=9gOXo364V&ca03`1#5Ef;flP&?7m4=+%D%o|X)M`%#D7H! +dtTZ0mAQfIFkCK$c*%58gvL%9z+Ax^{Msq*7OV$#fczlc|Z5|cbRCW?|V)T1y +IY&jGe)`&*j5f)%&@>ue>k;5SfIQNB7p)0MVgh5wC68`Ku%Alh~GNM>D{TA{K38(cxTDn^!vEgGxFwS +|jL}HN!S>#-12PpCgaccUAO|=|XT=7r|VVsNd@;4x*nDP6UiWY^-7^Ftx76BXmCI|Z<=yf^ohalj?ANwVrMxxmNM{TCYJ-}Iln|(g0 +(nZy3uSUbgX37?(THS>OwzNNi}r;!bDN&t$k?)Lr7=np>~dm&Sl4N%^tLTNdwx(T%OT1*^>!KK=t8)J +XA5%!zur173{I0#8`~5ItBhiUKzmIal2 +hzn#25d#LH#%q%dzY7pVld56;;@(=*m}QTy9#fU+qAqH&@hjLRzSMmp1AsEu)681Y=(l&Q@T6KWStUVN_LV2P%;@9L!so3=xsXfOPu^sL7 +!nmypUaIQlVfB74w?~1*2ZE*2rwHFiVDGz+iP$MFV!Ls1GA5T7=pz9w#%3C^J!hj!rfwK;qH`@_Ezu+ +Y&mhi@$p+ty6s8W>PyoHXd7Tbk-^)VKq}RwDnjEz>-sUJRi+i!KBXo1LfyLQ4P|f!y26##tBLvDoFSV +3e^k)Us^vZcae+K#hyhTa{Qq>Pb>0L9p@Z(geJ(3<*KnNu3>8UWcG3j16PQJWAm&(f+d0tQLJ2f;KQ2 +d25nAr1|R48?GKj6LUEP7v7m0q+}q-qB!IKUB1pYl0yTr~)Ga3+5{y!9jLPo8Blz#z-Q9z4zui^#Acf +eFuH=tYk_k!eu#Sb=$Ag2l_T*Qb%JAO +x=eKkR#j+)XIlWqLPD(6UZY}#fd@%&xz5(M1@H5M!2}kdl@{in_SOqkfm5*m&jD0y!Qr$-zdDGRtd1%JaEG<92*vZBD=u0#7fJ(Of=SVFTliG6-ay!%N6v|LmOZj)@!g6Z;$=qW=R6c*Qp^_-@oGtNgMt$MbY5^2?24PM9>ukL +v9GcMO%=O*ldW(gBqBC}`~1yM*M}o<;p#*XVf^k{c+J(UmrB@XBtlht1;^c`JFD4Kot%XbwH_1Y&OTe +He*LZnV{m-Nmlo#Tj!JhoLBY5X7&TF=OcofT7=bI +R8{owpDF&6Re38{^J*(Ou$bZ%EZdfGW$~mjY{h(~*$C7wIu;-8m^?Yp259eW#C=>cHZ&L_Rf(hqCz;Ss@2tddh?eUN+%rJ<_&#x +frvUZaV4DP%n(j`bcyF2bb*-94}8x9XI)daNb-h0gQ^WT%5MJFdNWcpZsAcKdzx-n8kMC2EdCIcr9Cyp`~#SV?KTOu+v^P`V)!LB%1{ +$4&TBKOMg3u^nTUqrbJhBdT*m81Vc7q^y>F`;pK`)r7ioZdjkX2m>TvOD|>ZFstl0e)_t)Xa18uya +PLB*%0F<^a2nQ1mlN+YBZHQPhC>#H6+o~}&U4{ZIY~~P0uvw=Y)U~Qb?7*lO_}|#6gu4>u^AG42{i=R +{Rr;hjZ{hBEyJ@d+j+YCV`u-_!7YDZA?vZE700f}JI?Q;3Mw6k+Zeo;88 +DpVnf_lI#<3$yk$XoD?!v;OO~?J^WeB=o4Gy+mVJ#lKV_Edk%FX4cH_Y#k3m(< +J$8bpE^h-xEJkVdvbAMWJXi@T)Kn`SNUNDSZ=lXET_l83!|BOFvTmOu=5uIH;G@X9$xuRRd6R_vl(KB +{Tu^@-gr_W2q=_qBD=xCc@XA!RM(B~6fe3oIH+q$D)057EmFK$RCwRL7X-$?w4M&@1hEF(A1mTz>@bg +(#7Tofy}%8=?V4)Xby_+*YcV;OWnpUK}SO`d6jej(3>#jMDE=^i%Q$>4pF!F@6=@xNj +$7i3;&ZpxG7vUkK>qxc842=7}rH`E;PE`n~7=gXWAYk8lFc#5Q8P2M0mh5Y^_2Y5v$Z6thcG>z(Hy@= +)a2#G~3=xHUd?0!j{1P|26SNLFqT61YBBeARLqxJ*0EG+;B_ne=Ndyfv3~>Z^*6Lmz&V2&N*v(%d;}d +u0r?VJu7alCMV$2UWA7K7)3W885SRPNrR4+sfiLgDNgp^|ePm3|@s5GCiog*1gDwptMa5NdT7C^2Y> +WV37OCh%23H(>$Fs5Io%8H0Jy7fALY!@7XiH;M#*srvyJOHP~^7kMW~PV$cbF6`V&eBxq;&MYY2Wcpf +f8o$>wN^8E&k$VMBb0jwxqB=KP{8sdGPXzeBBr1+vdWbh)ip>u(|I_$vM4q{l3ooDb2K|%d#pUcAN+- +u?aYb3KldbdFY?5!@yVo0c^VWn4w8qo3d-v}_jcGc)ya(eypA82)#~ogy`^x4RJCnV0iH_M=jCNp7!O +Cece2H^>T>JXP7A3U9bZE!Nbz{<(8H2TxjAIW@-%^Zq0q2EaZ&|A?mGcSvBZHHnx)D`JxhJIvCdMy6$7U&CAC2r--q$%+DW(aOSVZUn3E0j0bem$YB%l;eDlHNdiCxsqvif@1F1s0~ +xqB#AU083kRC|u0aYu7Z;mNCTS~*;69)10~xAwaA+KViN$;Mo)p^z8W_-!^l9gHt3r0c(09##-b!9&ncA+l`gKW?sYGdf95_J!ARURNG1CXW;PBFja}-D%Q%QC_Iy`AoBAR_q_Ey0 +V%_NkD2Nq6A3KrSKm7FT6SJw%3vBa&ic-opQ$lHZP@3six5DL)W57OOO>^ZoRaGn7Zplil-KKYcA*x> +}h0g@HnSR+_B_h4r9$f<|uN2bGc_(O0W7Uqn1z8HR<=9F~KBB(0gs&!h%#rH&dtMw@Vv}iKje1~|JH& +IkCS_egGh$Vu9%Za(GV6r;IwA>g`;3RWI*99dsyz?|TOZk*7TuPKPa$d22xt70R_UX%4m5P@>FuWnK1 +fA{(?60ucQyIB@E2sce)yN8QQC_x#2fL9b9n7aif1suCp1L{tKOn7!wvfKis@OLNgWmP}-I;%#97slZ +0={V^Z&A$bwfeJcnAhT-!G~|qB=T*E3_XiXg_`vL*jdrY&Pz26aqO^>|9>`SmLud^%FTeg`Y75>T_x1 +Pz09l<&V>e*18$k(%?v!BpUC8+aH!{4bCXQ-MS$QFZG>s#Q}WAVA(!*f6Ekgs?5l);;o3>r?1EF0iI5 +G49Cn8z^kR36t6cpGjP-4XLL$Fyv?M1MW@PVRB_*TPUSF)$H*2lCU)MJ)b?VTxvh}*X^Lk_J9{j2JJP +#)%vVaN+1}f+6%^^9m^=Ht5N}z1LZBouvw$9r-uHe=^`04N;WDr?=3I^Pum{K6Ojf1K4{PA$Lj759=! +(*Dz9MiVu;>;w~i%Z>{^OP3@)&Yt)wO|phJe<^m@Q26p;vY1$Vm#zYTBGorv3m*Gru_bJ{ip@|Af=Gx +6P>iWz>ls7*RYYaplNT}mI?<355kZ4J4vmV?B7+Yl!7jizARHHq7dE#*`re& +Izt;rqJt>h3MFwgrJ3h7&XTwNkcxn~k%EuEv1jF>u^H{AK2%@)fb2B-=Zf=r;4SciN?{yD3R@ey~QXdo;nhdnHreOPpb=p6lb|>gyRry2EcH`bHMjDicq< +W(0j@%HW?-*7gWVwW1Wae60SQxAH8V8V~+jb&&tmJ54GFl9|imu#)71-cP4hb-JREJ;>g5A`SieYqjC +c=63bB-wKU80MSnT`m63mg}d?FZ^e$}KM!J^s9+yti*Hve#ldsE6%oMnu~IQxxKferrZ98M!uE2g9Uf +K-;HpPQW$$IA3rgq?+5Sj(Otl4?V7sUrhRBM&v&EK}KO3qe+Tr5q?h^{hrtQtU#L+9+F$LdL;`;S8E> +f-H-NSJFHsigLu>CkiE?@+);ZQTV7>_V$;}lb2UtXjxAg?>fw%vEm{#GkUSGK@H=E;E+HtK{m+8i)|$ +xo$mbKHBk%NGhni%jbieDWlktOVM +tdC8V%Q+h#u(UNfJwZFjg|AUN;0gMIB6E+$o0-6v0CxuSVwXZi1|9L0BlOI(hX1s0=uWI|c$n;gu3$prGgU+Q|<#?>qH#TlTYx94K9ZZO24;P#L>m +g%xY(oQ!^QpNHdHbRYnLX%AkkrH&-s_E|*`~xb)p|8JvV;aL!Q_-McPFn`N&99{WNQ2KC3CqV$W{?1b +v+WzUtYaryN(xb!vu3?*3w#1skQ1svJt-z^}Ba+zx^T-6~^Krdarjsy7JxV;wv&!YSkOmYu=uEW4bZb +(x2{v&lw}%$PL$mz^sn_pzN*-t`?9cdiRTe{1t;U-Bf*wurGxi^u)0ySykcu@PISBe1}$uU}JsS?s8twK7I4ZY_P0!yIGsx?f8-(G(RDn+g6~zSAh-^Co4yU0C +Rp3Y{)4G^Ik*l0v^lpW^v*kq`QS9QY +e1DG|+POY^%Lfp-Z%tx)xd6LAN4@ZaHqeN@o9h5=f}hzM(6>xbXikzxfk=r48sM2@P23awktXd8PU3; +(#gL$_hC1Zw!@5dj4!Y+aFykI*`(j-UX6St(A +@P!o>mP!>Qztu`nUsz|NooUA)+y&#-z@68}@4D#NapH3Tjdn393pz;4cx!u@k->)ptidL~2hK}Ky_>C +*$H>i()07P}EJ`)B=qbLd35OsLqAumll`=&o}hisgmGp)m0^Yx?p;}`v;yidjY>#Lb9dhOHcNgUOGef +MvG>GwJMn%4t#o?k^u_+SyB;O1*we9gN213Y}8Y0rPxZV^)e-E7SQt3_OR8@^|7xvy^2F;pC#O)r+Y> +#pvP`{#BFjZwId&O&LmnVIGi7toN~`h=Vv(ecO1{RRShh~xlj7*ZZQickr|QXhs@V2F%fX_ +!>w1KZ%F_*ZU9R&qt+8Zu+sDK(Bs?K7jeS1Zyj;_%GycqEVRqaOPhb7Ki{*qOnTy`t|Jf>*?#)qY8$&OLhnOSOTZ3D2K#xH8i +`_DDX>?y^SL18TT;6uesj$!|~A%-!qa%09;A#3A-2;1%%D5S1)#yxG56v*1_&W|1rt9TTj06pOU<~_2 +{MlltkUFZ@jYe>g)OX`tCZtdiKz76<@YL`+{FS|Mt7xr=3?Xb|3A*`S4O6xdiCDjj;sZ@Oh_m9E#89#3t&F;j&w`0Qe0gG7a43OEwV9y +?q8f`+DLa&=A5}X0SeW94mU-0RNAJY)*h8&;F6Ro{*dxxAd%-ayum*U4< +l64q%zO7@u;u@mj8gq;-^C@SLbbVAz4C>54{2aHqK`wU0uS@ngAzklpwMWQbQtd*YiB&FP;?UI<*B6a +;x@^Al0BA5IN)lAZNOBQZx#$&6Z(7x8v9Za7}{poj(+xDXsrwOV~`pY87M(zpq#_mmSZg>U%X$(+$m@ +AXyfLtB;YqbaL+v?TPx^^629oV=Pt8rg3EG_+qq1@-e&d{_5PW^qWty&Ef!XA5+{2($rmnH`c9F +lLGP9-=~nH3UjDwU9DkIcLb^XBHAj}Y$+D`?INRvXyiQdc8MsnV +cQD`>|)kQ3(cs+`1j!7#$kspVVd_Hk)Z@BD|3((x09gIuHtKY*frg($M*slB`^pN$WhhM!a^bh9v|D}*T=`6 +cbLk>aa^Z_EZGnQ##v?$?BnCtCs64mJ5S&CG0V?sBsvu(*)ioEHf%l#N@}Ct06&trnhJOEy?0d2}sTe{)-Fg#&NZjkSsuPIU9x*}ti+w@f2t73`6cl +|3u)%u4n}GZj|%1lqxSg?xU(6=8zBvYb?|J06~hWuUB4*xj?{WID!F)^0URjD@A^7WWwDv`XJ*0~_zK +uyBJx6c(_l?$5Y0|CUxdXW0mogpQ{e#4MNsDuXKsE$Zk;X|zBAS87krvn24?fW0G0)|l&jgcz1a0v4; +-Ol-#DEzy^y@bT|^Qe&et>qE{wYNq*o&$<9*Ky5-ce{ZA2J~R>-3%H+JC&d;oX5t*1hWUgtg%6f*c;=a+8@0gqZLc6?%4B}L +hEHQrXgc!d!Dzvh@mSVW_AKv-SGsYciJW7-n)5;ybQM7f=loyURlU5nMQxf)7wV!YCfSs7d2a)QPRse +vgod6At9E216w^GMe>{N8Vu4N=xdf5HToh|O<)>yAra!K1z#=4BbdK4# +-_-nIimJX4*jq7Jh(4eZ-Z(U`p#Vg)M?f)R10GSzOQ!^Yr&BC9cv3U}r*M*BS_$~SM`2;iLwJ +Ud6kxmvqPVCm4q@WRDdxlVqQ)T~X`-Y*qYRT{&KRtFqkz^1{WsYKGKx6l=hG_3Lng`V8}uct`q}oJFE +Gsw>VGzT%rG6;R+!Tf5(G@GNLl;^5qDL_t|5h?D(suUEPQEcE~yY=R_Y4yd)di6=Gy1cZZ68>+{7Fwh +ic&Mqoa83lEcp{6Idv`H*NXPOY17r1+T7qerwsh0YUoDoj5hlO&BQ5oIjQS786&dP)1`j?e(zuSRvP^ +bY>U<^YZ`%xGc;iG8>|YY0WEx3nO@-LNgF|e0Wq>+v7?+jqM#Y9a^cJXWch1v+jIKvM4m-21OiIa1yY +U!NT)^88Kbss%)B|*msf4v)N0xmW@Lbd~FaHzdIO+va2Am_VL*7_0uyrCDE_GGar#ZPu8O&v)5tC7(~ +|&9z9vNcyzDCmlPx%UryvSk$OXxI3fEn0DfKnZ4;F~r%Gg^PJpbAsn(>bXe0C`@ChCrz`dDpwD`BO`B`RFQ{Rlx?$f^drC$?`~s +wd>20zghLMSovn4sr6K0C|qJzsBVtsCb+h$B5JMoJ_)0+MDsT2b7s0x*9pfuRp=ylH#(7T4&`jLgk;P +h4A(qx|h|+)wL?ho)cCsxhf>CE~?km^%~f0_ng$n1R@vVjbdn`dhQLG63Pe)HcYVu?Di$CFH)^+C(lR +O^XXHRX;e0H9ot08;mjNg)LNzAtJE6~POXAp@sTZ&p26=U%>z?p$SlqKzy@DT(UlQ%ifo1rd2PUbb6M)-xX#5Rh +6WH`g@UjiR{JkH690hK!hhbIW8rUQ-xWD!=u7k)NeSY947&qi8e8wWsnQ!w!Qetg9n&gdW&$Cb+>|(mbVyopXsKGntDif(xAM;B)V`y?zywyD|I{-$ +1DPezr+HAwn{%w2ypj|+f-Xd1!FLKfv(7+Vm8MpZ)R81-vSei)160srW{PE$ +r#Gyhd(d*G5Iq>t5B~CcPvp*U_C64sHyJeui9IhqotohQeY2;gg$3m|fWL7f@pW1MOXEaMP@5t{mOPI +zXO?fya10C7Npr_Ej`~VyCMm?W7+Txh0BE4Hf?Vn6^&254dOE+v5PU) +pywT9KG7YC>&#Rv!i-*OS=3?ISsjU8Sz(gKoAu7}&Uz*#m!)l@8M>gcb}g+KNW0HgH&I5I`+QS%(jvJK^!9y4=~yjX#JIZ?emhG)8 +u(t!=A1A*l(rrN~{}N%1BJ +p~=uYhXb;;RE_b^s#vf&RYsYz;kFWKo=*h~0I*eEQQ$650<}c)&*TwV5{U|eAFd_U7P>UKM`7G62Ic! +XRoWZ(ll!gqgZ5|1=U;reD74jK70OnDFFdSr1^y1TRtV3(nyJ$BV$SYTxoUynP{O={EO9mFt<=MOVX) +I>ce8GgQO=W8;28TZh2ghEPul@jsRLwEG`O*i3kcfHO_oF&s(SRV<57on@;)I)$YwiuER03KESO#BsZ +W*?hk3#loBLaI#JQFLEl_VkF-EGuj*Vmyk0jUG&P(sAe +Ji)E^qHz`0Y?=ZPq`a(od3E_w7?h#562Q`Q5F&Ar@{q2y)*x1?;QuJ8=smJ3CeZRM9XHx6RU=xnPLCze1>M+FdUnq2zJN$_#zo +%b|!dmDfke}3-YmVd2q}~bHGFmc+72#Eqj(>Xx7?#9XZCg8OmX_oeR-`k(seuJ~k(#adJAJQrF;U>-D +X9hHtNdsl|C9ByVPN2W5=MeVFM00v|_A%xIYSk +BjbAk2b8!q+I$2Bc_Ezs-kX+l3{K-%n!EWNX_%g)Yap>1`v|1B>_;gJ@C(iQk26&dB;mGsZCd?1Gu2p?KnsFbCerv>kx;v$<;0r$TB?=incqluD2~7amA(`A +1lJ|2qu1|^s%Fao{)Up!?IeQ*8ApzBSKB~;wI$0BKW^cx-h?E?6#8U4shRyzo_DaY=r}%*n**iX+YAV +uQZTToh?4Vtfr)emy21k1Z>4wa}~8O3st)XJptKcSrZ&zqA}%_#qUbPs +M~KFIc_hFfZ>^ikNel#j+U+cBvbmBk5Lpx9ku#eUU%@wNvVjn89|aC~%IoC?}HkWH#AniN&*XM>F0b* +P(g*zS&cKIgI&E{yDSj&Uyed^QhCNK<0svWiiQlHjjo$Kq^o| +2XXs^OgwC1chhK5I&(Mt!)WaTCNd#?;EzPq78C*Fj}GaF|E*TSnkZ;Wlq4*!!ifXLOs&^kEut3J|^F! +{lOvL`bn0sxFYXx$o#f?V0cvsIF0jw78 +vDmbpR{Es?wMvq1KWcg9t^F&PX&3Q_)ZN??jB`Ztoq-v3t;`>!PSUrFo_mc$}VO*@N%9kN%cWK*r?Z%jZ8lQ)b8cc{+jFhM9CQU;X|2-IsgGqy3kUp!UJbeE<(%ULEYdOupOu +arfKj&ywel4)Cvnw9p}en?dr9beDc@Qp|PRe2t$ffRk}PvQ_X0)%cbYP+I?hcjPWmZB(_>z$HjMHL9Y +(5#lU7`b7ZgTa6!R#Pokr9fluN*fxPrDjv&&F@taoCN-W`GnEO#jO1Xs-R~dgBYfDwpAvPZc-T1)N>IRCQy$@xZSccD>Y`< +mzKOta2R;qRZ9r8`s2dR2jce{VM4g*4Obt1OEX~Rpp`F^x9O9x%Eh0HLhmzjymW)y4>`-+w_Nct1$Gd +PK+Ku*QM-oSRKE7x*nqA`#m2UpSl5kQHG1}_adkWDu#&ow19^%B52?)>*q4?TLCfNOw__l?8;00rI+| +??@*1Ls(ZNEpaD4a8BjicHry~D#PLIrBM1s=h6vgyAm~8^L8em$6iM|fsF4C?12Y6jO#djimC*U5n12 +BKgFFD8M|re}r@OhDQb~{f-^bqH<^k|<6OqB-z-n_g=_?KOf3xYB-9clWAlQc0xH1-vq +iGDX2eb^{Le#mQ>!udAwYD7@RtqU5Jo1 +p?&ct%O+1vM!SHxa83+eqTt%OC+wYtcotwhT|FDKy!OJB-pqnl`WCRATWOwSMHcE85w_8{ke +`pUJEETDo~@sc343Zne&`8PTjd+up?>ut(R(%s{y@iWGn)G#tOpV%_AfDu6JN3*o{05^$nPX3W%0fM_ +#$5#30z4ppQ%0T&(Lu+QNkL3C=AE7zo|-@}zurcVVv-gKhIc&sEO<4Be#CY+V@#*^04UXNt2`N*W&Hk +2lJhK^*YNLFe=&S}xt#?jXMH^WC-PokXGVm8OFeSaR5Z_PCve_XR>69_0Bi>nUplb!4U2w}ng$)u) +W0^J*9b?;@9X1Cpy`+f*1c;t(%iu^TSB4jcR_D6-Cy;aEVYgIli1;m>kzu?%Ze+*o2h@ty@#P*_DQjH5U+sB>t_*;)di-6X_=Xj5c+xj=ES+hv#6=tDn{r_{HR +y6W35z{BtcvuFl~H(OCrH)Z}Bh;*=l%l)&D)?z((og;#jb&A*P6+8wd=0#on&o(<}BeI-{#aLyZoh%( +m!C3or^K+S99YC(;vKU16!%t`^8|vu`=;y4&DkZOhT9L+N^)&{dJO@&)=;0yV~BG8Q}G7x7qs4&USzx +RKFbGoIrI#6B+JyFNnvW4<(75gQ*E8F^V?WZ|X1k>n>2FJstnjP#T7_)U7Ar9Bq)RQ4Xe%VyrenIte{ +e0=QSW2p5ph^}{G%y(VVTS==$oVCf^5~S4R1i0of?@OHHx7oCR+Be3{PkbAdT`TuZ^`%O-^h^To8 +n?o$19aFJf-fz7!?V-K*-cEz=n@%lV6o`>g{IVFz};Q6pty@S^xPN>gUm9zU5d +%a{3JqOWEYKhz-|oIf(xD8(vxgpBSiOSZ0M~r-z3#dcM}OaFzsOa5ObR@QTuEG2DhyWuIaS|uv}Rbm5 +o0k-=1^rHOnVZdHC%@1zNbUA!p;s^U*fd!K9t(sIxAl4434vKBL&QXPpiSp9BROlD5DTC~ER +)MN)?7Ya)p8%?RRT{iM46qu1R7;{2CGqdj#_ckIM5gjUR;FpraG64$rNP>E +$vU>IMT$TGz^G&Wgf&@4tinOisN_~^8t3`-z&7P?LHug?HT(@PhI2mkRg2BJiBqB +`34_J{MKanKl_x>RJ=a1mM^xMfn_6W0Z*xqoWUAE~Owhl$ec+=~LHk^C*YWcn)#5YC>4+HO)+JR8sUc +^SE^^%PkdwQXcX&4Xble)1P`C%VDM#NglXLPm$)N}i*PgsBG_wlqz_iDYH9EyCz=wxJh`@MjQ5!EF)9UhiVLuo_7%+*@IcNY|j~6JfzU$wnX6DCazMd$umOJ>0@OfR7&Lou|7$cJ`kgEa +}j@5A9AgnPaiJ^%WbDyKhrXz6DFbCO`<2tC9gIUZWJ(>ndtFm8inpPYu%HNe}2Dun<7`P02a|EwEHWUa?j9E&{bk!*<)Q5qAJM +!mo(+1^hFV*oKky;+v3$(g%Z#k5L39ZMt}jFNTA^UL&-qNH8zh*j1uf3n3a +W$F->UCE`Cb!GdK$2^0K_KY&%Ou1)$Koqm@-Lz|-{ld5Y4GlNgxWSS +mAcOIKFP+_c1?TKBToMudjlK|XGTJtrVsA4zsHeoJC?N|B_L3xuxc>vV*K-h@(G+3wYq01GE3h;FF2bQ1?L(<|M1xx29a}gZOhy#?h>Ct +yT8}4jrZ8fdu*p}JiJ4#&dGQTxEpnVXbz#CwZoS>1W$JjkbRkSr}JKBs%p8SNs+|nlgW5W+%;4N;Sf0 +eGq!UxH|z|Hv5EE0VG!t0e#v=|`y=3)Ve*tjrMfEH*X#M3vem2EvEvAIF%QY&S7AaWOfye8R%un}8Jw +?k*lw4}>0q4BJT|`IdIGKej$Bu*(ozW|Xw9#v;o$|lguA|-{LXZL2|FEUXei#%n3gA^It~a~4~&R(k& +bBnO{U{XdPZrj*{L@7n_7W$cRblQlsRQSLg2=%q7h`MVukk2-Y2)Z>4?bev+Uh02zq$+I7X3M;25bl2 +9|#|>!RO(jUjv`Ga^Zb@>Klx$W(8^`BiQr!&=^`sOdvrMcgb}zMI#;rL(&+wO1w)Vxa}rG!{syISdvk +q_o8r%`1xyc`Ue~mu0u>AEjGxsB}!l-}ws~&hVEoQQPulyw}~ESel4=$C#mna)MtJ=~;(vy(#;=9W_4 +Rw~uWdx;yN62yz2g!_=5pbqaAKIvQ<0IBQI-&lk~M`9XMUsM6#hI(bG>3M9fH=N7f0ZSg6b1GxystMtK!Hj3t~0@xNNBCA^}kU;#?n=0 +@)oKe~v7PE`uvtJDg=RdsesjB&!ljgbs4Cj5hyGr1;-NimQJ>bt(u^!`cjVizRI1P20!Z$&B@<1$7tEjn*zxfJ}4RXG0p^CY4h2u&|Z@$8sh4~$+m65?htEl +tCJ`?YW&tbiduva`(jzJe#Y;b>qsCpz4^ZKzt6F3vP=_Z9$csuU*r~|lWxQ$|BC|m;AshgRJ)vaQ#i` +mcU%L4xns9GXxSJR@ngsLPFaO%ct>M1~@35LIAQ|Krp4106peL +o4r=uEeA~5VE9DHIbP2_404D^7GO9??iF#Ho!pO)o^`YfHEWi#K|X8Ok1N*EF;60jWE)IAfzq6xdaJ3 +u=EUudAshf)LJ8@D^>9Vj-3Cd?>NvU9$c9Y|E*rg+q-U@ZdR5QoAS0 +mbBvbqlFK%ecJluLH@5+7Kp{ET?c{y(3RAlE;YfO)JkIj&w9h7Fi$Cv^;8zuXVjv=fpVG8vSHGlruliSr{?onF#IncP;QGHws*gan3!aP0b-Dnb)(Mz$@ +mQByjC5I&)$!!^$5`Rg8=B~U&7m`eb_Es@D+D1M{~7{bD&bd$5N<`*%%5Bjs!1?_ +xft@1-x*YwD(nQGJ}deS#D^e)Q81o)CRZ&E@vd-%qNOOk^&K+Dkzo~_*+_1@8NEuWF*!J0Xdm|4@C*D +g7et%6Odp7IvF5`SVkhkha8>`{Ygziz+m846G=#nX!@a%5V>r@B)kLO=e9lT@YOiO_FtB2FY6UAiJbQb!3W$fLHEgeXu&seN%SI +Kg-$rcD-jD^Z8jha>h1YR-(~05_R&Dj>!^r}7!Yb@>idia~9KV^D@n(1m%#kn*|!X!Py&unT5F8lBq&Lb_{}81m+uPB~L$A5&gm<%ba>- +BqS@5IX?YdAh#~^{^6l7u&N?(!c8r(t>O|(ll@pg{KfCIGmCs?Jhz#lLZb6=Y$D0!qG)nL)d$%qDa$t +;`cHT-RdkNZasF4QI=`Iy|VUNE_|$8#_>knfd&XK;ErvT)|wylvS|NmKJ4=l9YYMyOU7V)4JK#|Cw!C=M+!Ac4Zvs`%3NCLrJ +19$t`-pxg;nZfQr>g~WznuiO}Mx(dg}`1UZkE<9bH{Tg&)dDExG;7+#uR8OcQmesEJ{`u5Bl6zxk3Z< +c2#%nNbYK8}VGq0otN&U@6{lo`(7b?Uh1COXK;>-C1}o<4*9EJ=e4IR{Z+Oyg%rn*dRI_4%TT4@G4}q +IXZ=XV!~(L$_!2Royf2x>)}GZo`F#>>ZkNk8PSdot#juGDMf?stx?|axK*Dk=0ea+FH#WT7OJ(R5FB+ +-N&G~{7W(Qyq@GG8DFq?f@%bZP=VS=|hDNfJD#gR|@eRza6tPLO<2L#+Dw0r@prZk{UR&1i +gK!wbN0fWENagtMwhza^TCbqrUIL|a=0Poifab8RZWA7T|5HZzMFu<;5)Egw2Sic~>fuDFTO_DaC#0{ +<2JWRX6qK{Dz&sk~6Al^@PC)zlB8;#WnfM++zOPLCiP^UnubyLf +gpdGom^5BJskE4sqVT7ZfQ2G0htStsgstql4M^ZJ+Lkfl~p8+UykQSzd7i4`!mcBhh{f43ldfrR)037 +M5d$S43-SNX2&ku@6mV!Q!$g7nsXRm#NxJ_Xlt6pm?8@zN;*H8j$uecGf`QPsa1Bon7%u7MW%TnjTrbe|if+_L&amhe{#6^SRy^?BSke~NYXMa!zIp_1c&2CjEuWL6+7h~bawqhjCI>ziRF0d6 +);+f!YvpcJB+VC1ER`9jkQRT2~7WQ(*1@|3Gh1OQ76NbuOl5?ykg?3Wp!7Wb>j-tzFP +K7;vbPk1`&A$-kXWp*TX9eY`%j3K21;K_>>25SEVs9{ubh*nk|1 +B5werGzh~nR9l{TrAqWkz64ms^E9a5Z?zw^KdaW!8v@-Rs`v56r$q@4@r65uZi^s?n7|9FQ3hD>Owl= +I$4e2t?3l4IEl^9uRKbpO?9@FKWx_4+Z*?Rtyn35Mk7 +I=7j9r11N7S^6ix3ZNLw0TBNrnA6;7r}7u#f9)z|KjVThZYqgGC{CTu=bRZyH9S`X4XJn>Fn3~(vEj& +LVSVtkmIup-RYC9+WQ`puybUb`OwFYPCc@a;F3r3>)7>JQTMg>6LuEnsw_lNt}W9}iqG&e@P5et|}$a +^MG>2RJ}~Db1OA8!}`PCl-t8v}>m3T4}Ub@9mj|z%_+rxZ7ZEoDs{ML#*(u&9_5~DqBiYxKESj4mTOg=Wa`9szAMKx)}lv +`-l*j#i3y?0Khhbl?7xbDsdc6QJAGpzJBiMIGW`#e-^r2T-;Hh;=d+S{#*j +3I)267SvhMr@RQkJ547XS52-$ICe>QJeUthhO48i7V0%dy(GB*H(i?tWW0MqPD)U5K7}eL^XVX+RHA+U$Wien +x}#42j<+ZS)a-CTwqS>^=rPR3Y(X$J>v!#dP<_eWA`6r@k1N5GM&;`0;DxV+ub$7wO}+r*n96Er%7th +Ymg{)TiMYU{BBYW{46R-e!nDGl +oq&29pyV9|?MXb2oKEwqYSEM`=c4S9iyBN!K;m1Z6dy_z6T-Qa=<9M_f7o`m>ROPtq$qTr%KvDB^A{R +u(^!0Ty0U`q%ZMLXY$aqwu~24iaXx57!I#1nRO7%VEF6W)%!pDKn(Hv7%no$B5OD9o-=UMW3jSp5-6< +v-9T^tCljw^~2PNK?57H#NF7z_K}~$G#1Wx<(?RTh2F%p=SacciWeVL6uAbep(n8Pi?&iI^4QwpWGU? +0GIb0<-bMmiQ^U8f0}OCp5%bcCE{lRyt%M%cU}RKF9NMnd0$_z2StOvvMKQ&JmiNraQl_kRJhz<1a*m +a@HA>HhlQi^+Yz#zOTJZah@Ob%nJ|$g4g{6aTqv!aai&D<-qSwK$x8eOo&yVO@ZJ=W7q8A>ariypcbM +yXrK0ckHe}oZpbktW7FnjZ$&$)GOM%OnMGY@O6(&l00B0b|hkr6wNut6MQ>DV_Gj6KFnkWkjJk{NyL+HXD087Kj+YhKdZ8lHV5gqZWrlOK;G%DWE`!BkiXqnIm+ +alq;w8?I__`J9YNbif7Z(+|^>4t-qj+S?{?P;}c-KA%b+Zd?Qui3GJ@ly0WG{Gc9Yv-5H95!49n5)ca +M1c6?_;D?ZVzAB_9XK_iNylL2#JNwovpi7Gmwf}NZXTwQG?Y2aVBm1IA&SN@GB +A<8Ha**&a{6_UZG4VGyEK^#0%#OTx_$Nk!Z}lFQk?$b_-)qd&Cxy&ILJ3&PDs2civ96U6sc_HU-^`JjjY!#};jDgN`*X{DU}?(EoQQ!;j +1K_GLKLI*;;-biYPQiKGQK~MhhUnnbop*XM|zy79ld0Sh?x-#B_1Q0TV9`sIsdNatCvgOb`^7VM90W~ +{yyZe{g-ATGTJ=0T(Tk9KEMV{K5XSem40%39ns(9GEzv(3wMJ`fcCOgUfz|_dWmg?(AaeEHFC^O|<^O +rdY2fb`MZDEwMtX5GIcE?W69mM(_pc8kd_17cH(P=>8-S!CR0FdRnP}2pWaoJMi)S}5TctPe-R4~A^; +QFJ`TQ|3NU>-Afzjh}tb`)L*DLZJNFF=M5o|Z`r1Ms4liWCh?3OM-1%}HT72nu$M?ux7|T~!JqtKk1~ +>(=dCx0AEM_#_=9=hH}G3yW# +CLCUEM$H-x|3K#4INOZfoNuX$W)Nac3@*Ko>zHWV+jr=qh4K|UMAOfsORyXcc9qq)Y{a!C4`!U2ETLh +bdL8cZ&B_!0SsW8h1189zt0F5qPRYQuH@oP!X3iqofYryi +I#yyfE?8AWMZtbUxmi5KkN&52~DCXv)imf>Uj;SK&<$c`eqkzz{c#9|{}PxEZk(8PKCKDaq`ubalO5E +pW1uiVlut-88JbD-p#wi_{z4B@KKFrQ!?3h#Z +|^Y9hLBKz$BZ=;%a_U=HJ +t28_=SNXIx8c1AR4bQMISZ!`S!6NOsKFQ=)t?rrF#6c%Dl(&YHSQiPC%D#Sr&tKc}rb&ARACX8aAkq_ +RRf4XN$p#s5Sa4wAnUKq7|dzL#6$mNcoNsX#ibiq5rIy_Mi@GIvg%gBsn;M@>`m4466;(xcd*imot~k +)_Ho(f*whXA&6Y@5g3=$H$fSX1juXAab9mdZI@gsLn`|hgmmem$*K2>?WL*8sEUANp&`r&W=)utx;`o +TZmu&u};lUx?`LrHmUDrIYthqbYfJ|C@MV+&=J*29*-rT9CnkKMBuF7OgUR|ZklF$zMilDgXt=vZ<9; +XxF3vP(u`))2zA5IrSYq>vP&pz4+!5Zyksf!z?N;4%uJNLu*eKcAUkL_99~EhPa4VRD6J!vW>_osY +t?Cfz=bUSk5b%2Eo#^O;nBw)|ALbJ|<8VW?;>8CJy+5iH;^5PQna`$LfS5+Yrxu%^L8If#(}nBrb%l0 +~0%Q;r^!00K0`8GC*F)Gp-kbDvR2bScP(MfM#3clWpC#2#Jeb9aLHES*>a=ZW6L$u`!g>jX#d?bh5mg +PO_IEJG^^|Ieo>~SMZDp9uqFYn4^Gl`DXIZrsA+DP{*|L8Xs2F?FnA%w4kX0nu~WEN#`UVU~Is(M53J +dB`U8+l?K8wyk_`%#;<1;Z!F@ZC;T8V&CgFU{u`k?r*x+#cF8>Ffo^j&&(!2WE!VgGJnwhkSZaz&ql~ +0(<@KM)`IGYw9;R=^LX0o(#+c%AFb2%#vnG=(j8~~G8K)$#p=duk9iSPFjP4BfBX-}9F9Q7~hjcRS*G +XgzUqQ?68*GVP^iQC<1ja*dVsvdt6?8yVo-)jxFh%8IYJ4%FVRkvt>P9nK%AVj7DnVg0^HSRsHPFp;l +!aLZ0iTjbqnD7Wt8#Og>IR&d%>W!L0ufqD;yT7R9`=7pSs+0gZUCNTBeE8PVK5-Rp8ZOz_=x74f~H~| +*IXN98q_-2r6(FqK-TfGTX05OiQ~f$ +Kmt)VYz>HPfSL6$n9K#7loTF$4wDT%k@O1|xPwi|2fvq?y`8J(~mviP7umUG#!8FB~9c#arf?o6Kw4a +Y{Dqcy!>-x1uk8BOTLJR8o@e?Z#0Zw}(Np^R)H|{47x3+h8;rmW|W5IRW;bHY5Dj&AV#(abA5O;U&qm +BFghzf1dBY3My?U;(b?!p&V&8jMiM-e!qa*iO3qJja$Oje-j*_^DmQTfinVrb$T^q|xowbDHw_q&#Ev|}v;}N{Ov($i)7ebY7Fk2qNccE0KQs@Rlk1CL%NA@=5ThJvHaSDt9~6Dfln{a+)2x&Yhla7d`?}jpx?A2&(>*?fE{7-MfeKmfFDO1Iql?Ma#6l) +HxC}Z5WgnXb_A&}%K>kBBbDQm>Em*hvk`}=(RkubnUtNx7>AN4ejc{oSO2|lsJ6l +lqKO1viVYiMcM6^M=D}UR(V{I|^&tyq&B%_Qs+ccvCoPspj7)v&h7cLC#@OGP72Vk*e`w?58pO48*4v +?bKfCHA-9ZD%;T|e0(Azp@the068cjpvtfZreXeNi5{ho8jz&9|?$6@b3BH%n7Z(rz#zbfBpcGf6bs) +DV9{s72FF{BU%(@F^`w+Eg`YrRex~&Bmlyiz73ksxa{7Timm_CZx|n>-1W(be(uAv#{9M)Nna^nf)%_ +6teLu%^e`QmG|Pkcc^)KVdpQ0tQ&zZ6jYA~cC^SMK=eO$>1=Z_PU9nJo=31O`-a-DRSxguM|dr7Dwat +c@h++>v?`qc)u8be@a^};AZePlxE~+daA+UlcOal_&WghFddzvAQdD6gaTLc7-#Ff~gtRRrY$Co5Fv2 +CUaX>H{Y(yrjFGW20S@yE8ZhaA-vBTYUG4U +6KB=l80^+IrW4vQDnxKPT!zG02+nPM;OSCWfx$*@HD``#wJt*O>^(rD8#L!z&aSZ4f*qkzlb%adeA6}Z{jg9<_txYPzlY|a2$AkqYVI!=q`O{Mb$x0PvD#s*=vSsU!Vfjbl!x$!Ltxg{lLtxWXJ@^S|-ubn2v{qpw6%=UX4w +bM|J&XRVf}<5G-9goZPz#B7sgW>ux#fDx+**`zw_q!1Gj6F9SQI! +MOXBSUVVlTsxOo@Z`o9X*01A;j>Xs1F+xq4V^9%#>sJ>JNg3E7Oz!02Cp5WWffz^h<_AZT@apEtPaI2 +O*h4W28@Yzz?_{L8;vYKoV9{BHxvB`pdUrFMR+VI$YnQ!7}^u_{6Q;|@uXG_nyS_}3ooF-YF$oci==R +hRMYjKq>4Rju20n?eg4@xe9Fy7XD<9eTbRO@`x7(Zwd}R%4VD2H^csjdIuE^~{eZ=um|wc6Eh5GDUg)A))jF)$&rl*Vtv>J0imgI}pI@V?!}cbKr(Y0wW|alBhr{2!Pn2O+6=SsIz*Tu+kf;ZfCtr*xQfHu`)#b+Ll0@u-4{Gn+d}Wu0=FfA;woUsj4G)8;R(WO~vC$Y +x +ZzS>qR52mE|XIuj5CWpAQ0mDpxZ@|*ft%UCz<0EED+m{eKQhMDcuL+X;Nz@h|)V7LDfv=m*eBtO)(pU +4;hNQJ~}?GN5GzE@5(_RA6H+$t2#(Efb(vnjnenUc^?mCyt;={pHwxEP^W_H?{43ARZT`?)GU*CGaC{ +?-_b@;tPp4Ylm4JTyNq>o+?~O(v#_h{L08uwEbpqD16p&ef4MaFQR&I}Ed}3Xg$ntar%8{HjWK~&D&bc+o$x|a^r_yho^T}YB2M~-w>@Gzjo%QsPjLOX9`zQILSwjCcKc-;QwGi$2 +V-~kXgsKm3W5R0E|8E3av$SGOyIkRY4-EHKULOCq6A8fYggAq1oR{X)@A9Lp+ptgw10Yu{Q-i&@jpfs +03`P<;{jrg-(fk57!=&|#e+;JpcT*WjV%al@WMMiydWKUe536f<4=qrku%2xub5$G5em@@mlRV41WLY +PZbeWh#&-6KY>#kB$}|Z{L#B!pT+ym0jr;)8@F>R{0$v|mzC01U-8oKxX)6^g!ic724o)yb;^Ty&ZP) +cZ_9%6xXwUBLCeL<@ERjYg%*%Oel{Wdg +vy?SE=hYJ%Nig$t+S8A>a+2MInRF}{WoP0n@^L+{Tu~dSW;Ds*%ga>E|hc9ggRVO3U1`J7olkJ2%>PwVrGUOO$$^&+jA5Jv5+E-TeYBA+7`aK +|shjqCMoPsV&>CWWI-j&Q`q3#nD7gG~?BHtKM#Dr87F|ln1;Z)D!8IN*bd}y8$sGkSRh=N6yYYW7%`X +n+Stv6M0kbWfB%SqU`nrfxoFj6a_b>+`Maw&Y<8Qb`>{G?z8Z9^|aU{QleHB;T1f=U|1j6~yInBtu(sgAj^S#b68P +7W^$R|Rv;J(5MLQP>{bO(D%ey;rJO9Gl`8~VyVNdolj653Ej#`nnUjfZ{rn)Q +hWQ%H7fj(@67U)Pv$1pePm43o3@M3vqs|fFNANG6!>C{EG&kL?Dm1gHdxjAHA=gH|lfmCLUn#c+D>0 +;qWteg_jZ-rlqZDg0l3E4+R_gI0WYD7m;;^Dsk65dCw@HzzM^lgZcoSf!+Pzn47|~<h`{370 +o@GFjwzYOBzzkHa4#T>VLi>-a(Y438xbl-4${QdxoMCY0bBBgZyEW6L#Gv6mfg^l8>6PCG-8Kn{ZP8G +TKehsLm50araE`kt)Fc+|k*cbb4W#Hg_qtbtm6J)s7GaZss=1DSXAf1wiq|j&GgQ_cb@f>X7nA>;!<` +vkesAr>1X_XTUZ2Wu@8N{bF(*hi>~!!R4X@mAnATFB`tICtH_?@z^lu?t$Q)VnxW39MS10QB=SmC>Y!c|?-!LB5q8;kot6p>3)Cn$eaoeog6^uv9I< +~0l#kf(%xfi*wh*6?NkrBsR~=?>psr&U7=lW_K^l2lMU*m)x@Oy +FmQaE2{NPhRnNEetcucmYj=lMNo~-7lO+|ze+9k9E=CEOrPQtKfC7T|J(3!N^4jOV`M+13%`vc#EjuE +R9h&IGN>8!HQkl|CPje@^!m5aAwTi5(A;@M^{`e90eF}{lv8Kxjl@cjF7M)+LAD@@5A;n!jh`g64zFUcjLEgc{)pQ4IhXqKPLD#S0=?nAD+F(Zln5$0KK +44!=C0^X*gw5A7e2;F43RGvjB-8HQ+@yvVA{G^p89r>8P1ZqFQM+cd)cjn$2-P%f9vu7KXx!EHdVzC> +5)E4FY*kt@{s1!c0&$qp*ccPlUMA^ONmAQKtM?J|Xq<4cae=ygV>5=ahklioSly;06Ur;_Y!tUF`c=4_ty% +|H=OW~Kpq|svnd|+)JJ&6o&3#Q3O7~cRBWfowsJ(0^$=^7QQqc-gwQNx;70J(#wNpuSAqpV1LF>36ov +C66KKyxG@?H3zf)$|bCa!{V+{%29<~w}A6PMGF49sCj5Oz6Ga85@71%#z7d;ao97z@wxG1#~FiHxdljG{aah5(#rX^(xzEj*u*!O4%>c&h4RXP}uhds3$+5io7o(d9C%H6rnJob# +hW9suf4z10y|vI}%bE5w#VsBPmaNX3^9rv~DRD0P)JMvHuz-9WKN_KDj!9xsA6=D=IH_7U}{4#lS?`> +d~0u_c5TX`u|7iz|b9d02bXNZzt09KTV}I(&B&(W!^o8cv18Kciglsny>Y7zK}aQ<$xDB#Y6ik-;RXh +)Gh-)+uJ!qReZc7lM+xo_(^Nl&mPWfusH$8bC)_-d4U^H(l2-ivZC%CMuj%z}Vv9FOamaq5?{44(DNq +)hzg8^(4JjHt=n6?yM=6mYve+s2fp3_9)!0RvlCO3awoz;4_|mxtMn8Bhs;N#OFB1P(mZ6L|HhGPm?c +{di~SWeiz*@P9$`oJEW~go5uy=Qey7t;~t09iIYd-irk^eO&}KE{nY~AOe|IT4aP8@?B@9xy$ +FbwWX}v}phohp^E-Ep^1K@(dEpGwv?QRR|0$A2pJlD2DJt^>NEcfsm7B)$vUEOXr*pP|1uv3p3U$H*;UMl6h +FN%yIektB1ixFItwujQG|tP0%&sm)k0!X##!;(Du7vt$zojk9W#_z0LnP%0E7b541VGQF5sGUn9^X<> +R-PqOpPemJJ<3y$=9ET$F1tb3l0`uUI?fyZdIK=z#6;BYcUyXH%@mJq}(jt@y&vYD8*iZKP9L)$bXPv +gv8EJGd=)xxTU;2j{I^FbR>0ugJ;kl$3e@5>&adTMWALc-iIH_br2w>e{wR8H+R@=+y +@OVH-AosQ<`ZpY*mZ_o#{1uvcsur(LF@u`ZaVAMDXa}3$3RorOImVtDG+a=4CVCnlhixY)`C3{28POd +#`x9N06=2GQm6q3CD3`0r=}`=5q8b6o<4J9+J0|f`nE!c-mhA7yAbvW>K;FZNXFpKnmHkEz4?k@r)itPo2!y +?Q7ruOUbfjz|!yX*E8uyP}4Ob!P9+am^*ucX0g@3l&M}brHZP?or(q=2M`Wwmd`A{^>y>TWfFvfu=3i +7B>e?IlYlH`uXPdeW`tT}*6;9!jpK--6%5>MgV8#AHEb$lT6p`5NXwX^9ZQI(okJxD|--Wdqir2pj%G +k(B)w9*#eRLdp3PijP<)~LoBkrXa1Y3q@WKPHJlh1O(lNOfBH6Izs)F|Gv7gbb*)q=tEe8cDr=xcR_& +x#KY`hG!r)(NC0`40CYG(334V+F4|}lNX9Pl46Q)Z-Hol!fu!?L~Y(VU{f(cm$XVMWJj!R=tz*ji +$+X*`3cr%E**Uv+Br4C|519`SmUv>GS)mA*d=aP=B*nUZ~KDO>Jo}*e62W`~}`* +1_|Y_V>21+*=1Vzo%A;U=tDM$>FD67!Q<8%|Re@{`&|odcSoK`;KkUst<~@K?Si=!C!0p16(X@9r}H$ +xD+;6PZtp%tM!_u|*yD+Zw8B%neJT1N`{cQWoTEtef5X#(_#k~?^9d;hW6=- +?UyurL;KW{d%cO`^Hcaly1gpkKWuXra$+rMMC9&_w{%3R?$5MJxsRM$VS8(*_p||mD<0aCg)g!TO9OG +;ousQEuC%_cZs!N{8`Zoj{!tH1U6F1p=Fb4Kj3NRw@3jJ&(gGUnzHln7K!hqdiU1pe-bN&#sjDon(s9 +EmjBfR&;a3`z*0#s+HQ;n}`3bydJ%tzJ7i59)49Sb^P=CHNAOv^!}ZWb_ +0jaU5ZaztyBvEdb}7Lz4097RkAWg-Yh>`(w9n=TCA$RRIAJS!a-ZAmBoFLpdPj_KYu)=l+ls*$qf(F8 +v|>*WSDr@6CfW$OpJS3VZ@y$wd$O@9`SiljY<6=`A5CF8C^_ej47T}zBBuBdkEv3}(i#S5~a93%4$;>Sc4uO}eZHqNwCxw$Eiz{YoUC0{hrHK6tM*;WjJ)QiYy;>Z +PEwXPD9cXciYMF2qnXn<8DjTr_3uGo1zNzyuDX))69I-`X!y4Cmq{*h1L@gus- +Srql?uw1<5azSbN>Vo-rfTWPyC8c$C8OO)k}keBG|@A~SR=Yb*c6iFhC=E_R@^h%Ip#jMFNTr4tlgc5 +nUZqb4~pL|h5!<~gv1+6@8PGpUwQmbp5Njz+f$BsH(s=uPQ_-|G31gU +w;?S0aHg(=V;@oLldBHfPFxNj#xXKNMwH|}GXBxWeJ3b~_}m%^7P>Zoa~W8&?zoDOxwMk +zRp24m1sj|@h_(ANBMt1xln`LvsL==?64AoVG>cW2z|p+Y}-S5JN|iYJoL``w+5`d8lD-)e&Hs +1r!y3|ISWf8MzA=cCX&BSc%p4_0-P#e>6o}#aKMqEM986-;|J~U-7cdDU3@@`(zz_zyNNfh{K2Uyonn +vrSmH7+5Lus%pg1`;!N7+m@_1Z#g?(`>&Qh(7850m9L(82Wr#%}&OL&%+8+aDCv{! +)r+%wLi~p`rU-16{7G#Fk(3iR)nDz(iQg6pJi7>rscnQjpKDi&28Z*wLXGYXKW5v7Ie&P_#!cRuDYDt +g}d(+cB0XQvJhbHV$31BmZ<0y3f6n7_}=uZu7ilke8yw2tlnDCKxqq5&ZW8&sh{r19j>atZdn#1tZa3 +@Yyym;Le_gY7)PVnDXGmxlpZunY?OT5CAe&$C!*-=dK6)GFJJ_k3X#w0m}5ym+|%v{m|i`IY&qLb +}R0{K}V1`!uX^jMHgyf`dht>e1OL9S8LVM@E~J_*?|PP2*gDYlVa8HwDGRU$dW8H-Zmk9=}T7HRC{JW +NOFS>~aJ5-3_dl~p&`PGP*zeLZu9L_VZtXBDe~BQ~f;fs&u20wFaH$Evq=e*}oY@pzC?$UwSv>2u0>G +I!+3F`L+7BD)+rn=sN`&8KLh#+I^QQABJQJQ*EvOlJZ#K4n`uwA?kd)yzlItMe@HvWvLxj?pQl*d~T9 +L>rLfV}CJNKk5=)NFapbmf5ZS;xXd8+Ng>$cCW9iC*Q)8-3?vd`*Gj?c<8nA@L?@&oHV*#Qx6~Nwz$} +CEf5P%PSSSxU?Y6sntf!yJ@z^PTX$G{*SHKX!YJv@*;yW7K|ZK>@&rvK;i>(wogAu6xA|=7({f)EL{@ +&KajKNx2nd*uvo0mQuJka_#F_?Ru0>IwUaIwQ?GT_Q>%TleO+_#)V +QZ6AB%s!8A#;xZ$NoNTsXL?WVDlkg{^IEB{d8Ey++-86$#l@gQz_mtS{Tx7irX=Y||8?ya?`z0f%c1&jiv+VYIo1G?wc1`Hsw=35~&lFKd6hO%-Ho!9Y!5LaN0f^BaNVl@r^{0Nm +Nqt+fV%NH`_-A1(THASzHi5i#&Y$!0Vi)19SNj=%g3BFr$b41Tc|6^V3VCcehA-H9slE(Mm{IGBowFl +}>=A?$x;Bav5mRi1PVKd_3Qe`X6P=q1l=~fk_zS8hxMpyW&trn8$~zS7PYhS{=QZ15eQL?1@L_y(~^H +3l-;Uue_dNkTw%UuU5CIhgEte?%Mvd$9vDv53(lNrr>-k$))8lE}es&fynjKi@m*k-Zje0#1~C5x;8V=U!3%jYm^L%Cj8s`4FCB8znvz{hH)Z7g$giZwsS(w}4LTj}WXxrtE--ygXkjGmYMg7~wW% +800n!BuAISrrq6q3`z|@QJg_r|Bf&1mLw_`oP_vfw%``X*fwnCpjlmNYcqTubA+SaK`U!{WYn)t|BBB +f3YtN&ZaV}{-_v?o`oU>b<1E@f&Zw$u5EDz{082ztT2OB3M&SW(ET|Q5jTRo3)Yz8dK$;CzX- +{)V>K81wwXznn=PFW%dxpX!Co2mi_>fc;6oG{Jxozjtdm_j+!{Dwr6dIKm4!C!9W}HUqj(% +BqFkE_OIn>^Z@GrVVgAY{57Kwz$}>94w)a*;3;azP+*{e9MYUE4n}5E+gusD@kOnTo6Fb3$`muj^}yK +(#qjsVPOHF383Q}8w#170R;5c0*y)_(uoj!sf4<_MyuPra<_8X5Nic| +`}7(-$V&zb}tApTt@X$k5R{45mqz@Rvody8Gk*~D=%yW!D)C5Xczc(Q5Do= +BOI8N<0)w#OPyPmG2iPQf`CXF7~z!jK0Wg)(;ipQxz`>?Uy0>H%w|#NZg*WXu(42oCl{t~9)Xf5|a-E ++m;24@}6Hs5h4i)m$jJNt6bfLOS~W?NKN$UTYh~tZ!-{Z9NDnD;pgH>cADk1v6<;BJms1<}EDj)723D +K%+fp+PmMPgqZaB_tZr +`eJHPQo{^jyvS+*>27+-{+msKJ?@i1;hvrCq2ziAY +;Ha4W_!`5U{}gyl)xg70GaRn=)JV^fe3(dok$D1<;m??T6?_pR5Q1kL=3Ij<7ks0v@|E(Cm;qZY57hHFc{^@g5_kvnpaz|ZEP83=e_D`xVmOS4l6bDFv3i1l;XH^HY}sB>i<_BwY*<>e1gXt@fP +QDa^uEa4Ll+Z%fl?{B=D}7Tvpar*5|?8iyo?&4|(XZVipnekyM*PWYmNF1rCg0*@VN>%!FI`5Qaf*pT +G_whhqaj(#`WESKv#<{3f1du$4Z_ID=6_m$^FoLyzQOJgb-wmvdfB>Q|i?XjPKxR>y+n)ite-seX0*v +oSC8=6I1L+RNwH%jMYnCU~}u9R^{m8+wK`Z3tmcHVjZ{J=C?XUiI|qhPu@&Rd3S-mZjQSB#@fU=gVR; +^}b$9(qSmvT*_7lT`v`9d8g>Aqa^&2G-33dU6HtqAog!`b4Uc&gSVx1+!hgbFq|A;i$?rvPZ}p$MLI^ +5`MGg&snSp?-H}KWSuJHsOIn%nr|DEW$@Y=NX{#t)Kp-tK9Y#ICp5^JFt(rU`iW>l{>R>pAR#phwe+<}&nt#q2~Yi(afe +koRp`XLuMj_~(wyyI>Kj;$PKCEY55{(s4daej$6m*jk4*Qzztpcm))YVK`LkN9BIE{3~8Bai6rBgHUPtb-zS43QcL%fa`No}JJGNu8eVS*MWqYVCNIehNEtrkLA{f?+W5#Ga +7Ct0a^z(vDd9aL`8~<}(*wtCNG6BqKTS9(e5MQpxN;z56 +Nj|Xav{pG|(lXLHU+WDBCD1snUBTavY +US0(Zt1|AUdes5_E={Uw#dZhnqX5eb4rJY%n*nF*citwTu=LVc<6GXecVW6`ZCs~K!rPC$kz?Lno+^g +`Ve2w*Ei%a?u!Dv?39YzFyW~(*I9Blb#Y=K9N5@Pu;k;7+!Sy*WlYCXs+OJe`S%0B`*FLFU*l{s>Shg +IIi8Jmm|b>3pA!=?n`KHhx&uv_6fhc0az(DF^msO=(wJEl&PC?}$H=F$L}RnY>9Ef>I-6=Tt}#LLtc8 +gLEOE$FvdGM-75}NN9ZWUQaArP``f*f=&<+p9F(L?N3DYi5!A$k +d}Zc6O8GX+_S%huhl!5GIEr7emgK5aLDR@Z%M=Kn8;9SHYV+YSCo{EJ4>ReYdyN>5VTH&fTq?>s8LR3 +z|ceuxj9A$x=3)zFLBva}k(Ct(e4qx(8p>vJ~$!#7;#i3$w?1;E<0Ivd8@TKLyCe3ljnk!!U#|W`GUJ +l60Ggk7eH(n}xv=u~gI1SG9uxehg=SITh+CeWIned}3hW;rt~q-H*3W+uGV{8nA!vwe53nY@gfn&UF&n@KQ>knwX=Tq7d-qH?I^1moq8Icqa8g)HW3vzl4Hd=h&5GoU +0=Ht83dETkL<270sJ44C}RCLK +4xVHZCTU~PN;yb_>47!IGhE@a!S_9z+^pPpGvP+X}6V)nv}I{s*)s`^wjsA1{53*CL=1@#`;lzG7dQp +SVH**v8046THwUJ0*}V;U4Hu%mPGJy`wG64$s`bKW0X`>XLkSic)QozW+q--di!*_Qmt+?abryY&S$J +cySO2RWU-#?Mcr;B|H52V4B~qj0hrsVzmNH4hhrn1z~NzWzbKMy7M&tG;sAB9H=JSNTzFin=zp_TW-A +e+sJ3cYHn3YPxQ6e*=|ldhSbm6)wkQF|H6Kr(hq(MxZkGD~(5dcnsXfS<2aFT#tW0K1w~bw4^i72P^5 +m0>lqnmB6zTEdSCJ%)Tv?pRCxL +;zAd1?dp^dgsWbNf5jf0a&I4h0>T6FmrP<2h?rrERbqZ6^%`{i*?W!snk-dEJJoZro8@~PKaw@TnNU@szZ +NvSN1;N?$bvWqv3VJa6{N!~!3Q2(!p&S@D0vMEas@(qwGyjVc8a)PH|iH%5Fs{YLb1mSG3G=##@cKK4 +M*5o+DjN9ZBBiHHIV{_fwuso-y02lzh2vJxG8QVJ(rwEDvlSB#nYqku22oBu`H|cOrjdROhk3@QbPfU +hDqDTws)k2@kp#}uo|19CFY79j03V4 +`eUm%j@F(R*Qp2~%jnf?~;h|3efDj(&LZ4{)Q_L +`1eORroR?80j-h^D*SQ7A(PRA`b7EHpi0rilnf&+5im9ZnD{&6^pFtQl1#Jz+S41*+MVfS0NO1sAlSR +9s}Zw14EzTINOZ_rOhf)n@tMbBznagtv}s0ou3)f`$f_F0GWmrACpQ>2%=T3+I=LMx#;>8q=lq)Y4H^ +kT5dIJsw(0_YLuoNTo`PL6eT>M<({E`#!GP$OKHvR{>2gH7?Z^eVCrlpM2BhcXBw`SAcUsFgrHSS{BT +EtMXbWrHahPP9@1ZteF6{fdh6s>eP>;f44mKyS)Wn-uxorcTsl)jJTCqr{uei(-UUrq;H0m@9S^@<=B +=wULcanwV4SWl7ekMQC4}S{OR4P0SA#+Ywt$oCUcE=xiD{i)Qf<37?r{ph%u7!XE%$j_t~}=d6@8RZ9 +)?Di12XZA1wY7XvQhh=@uLKOnMqYa-x4A!pHq-27Fbczav!ch!S;%86c4M3dQr0$!lr`uID5-U*a +cZ5~hA63B;3aKQvdZhM%R1}4&U!nU*bPcIc>Rq{QGa8rEWb9@*S7lFp;tB~(hD3&b6u1)&r?Zj-G;Qq +pSIUT{kAA+%91vfgp&QvDwT93mJWZb6KYtDZreQ>!IoNU)}9mf=a!sxF1hQhyG#nm3YnPzsy;9N^^ov +yb%eOARjFi+Nl-$Tg*`MYO`?7lQIK^2HaB2AycP7{jmpkz(I_|y`T?1*w}NqSkNw51Q7aRTqzQ+RGDx +(Ni7!lVI7{PQ=Z$xxnb&xVG{N0G)QNXqhQKu@UPR88jU3Uu^EDRll9!_=;Pj;C39_(fl`N_~udoL#>Y +esxAO;6Manx#3{A+7OV(kJi3AWB-NwBraOWK=F4rd0XnRP{x;*oTNt!gZ9qjFFilo$ecdQ0G9MI&qfI +LK0x6eUo1?tv|=)^K18*8*-Ngliot*=Q!(XlE2OXCG^+_S^)W=OgX;8lNlJw~$IiH&!=!oz0XT@mk0h +P7h`!k!sIP;>H%C-$<#)weUWKObkXdcba-*ZZfubD@cJ4E`+247igAB*}+gT@cZI +TrCK7pfI;{VA`sr6c{GJsCA4X;X^86RipZ@AQ&!0a3CHwE`um0@$PwfD?%`*eUXFquMOZMMCJ^PnupF +R7wXN{qlpq|MG)>gP(u;{b`^{Xy=0d{y%>C!JmKm{$G6gzP&k9YBod5{_hWd^xr@K^nZT%Gb=3Xsryp6tz|1rYkSBlh;^XhVc=GcXPd<6^Mr`S8V)pT79`J64!#;B+kue@Jj?F7$2 +7eEb&1>UO{LU=-nrJHs-@ESYNSP#fkcE|PwP*oUJ_yEoo0J>}?Y#+V8@3*7i$o +HY=fz3F5&TdQs=;EKzzR7U1@L9wrqZZ?|#WG4Wdyj$wIf0BZjG=`Y)jc@W!dMc*0U>Ospx-tknMZv%0 +OiNJ@f{#d2F`XDQZGY3MAHS{HNusqUO0ltUow1Hu>>y40Hp4D9&Ftf-J%7}A_OVLQ?+A$6kaU3MSU*~ +Sf&#eJQr?@;{xvZNvClsxOlcgpy~9#-`<6YZ?8vjJT4)vkZ&kxw%}GGhz}&Fs~1@Th74U@gI^HSvXP* +gQQUzEIDANw-!e6%tU3}X=ZA*WqrCCWY*R-;)HhU5{*gK-wBK4$r0AC +3&#mS*yKmFrYvW{4=(c6jX1sbIv2g%HyDj$j_ymPfCmav96%`~*)lnTm;Lp3jCEJpD9V|+#}ngF4{Ft%}885U{K)~2hY?x2Yi1vrlDRUu*3l#zCp +getFGnpp#lcP*2MiJY-8 +=bA7HTGJ(z9DLT{wZ)|9HZLzLXkv%bW!8oEx&9;ht+e$*wGeK%Ts;7a!p_2`afCTQH~0JHoctm_+-Ob +uFg4(8+YjAB9Zeps(&V8`PQSE*LXeKLrtQP8X|zE`ct! +DEsGT;sgp`7AL%`;k*VBS#_LQa-*5NW1HB7n1%-Wm5+-F2~vVmh7hF9K^$U&npwqW7fj!NggMV2i~@A +l6UP34%aaH{7t#ntsrvfE$=DGjL5a3RFfhO}fZ7G`8f#K0`vw|4g!V+7$Dzq$zR(b8HngQKfEbO24|c +j;%HER{0p4=y4kuq?-mUFPZDI+A8ztb{8x|A&=(+8H{Eg8W{z|w(PGV +&Hh(&A99bI+uY+f}hY3Ws>7Rf0#JeLjYt?bH*3@dS5w29q%e!l09|bYuuH*TWp(!sXBa4rLV_na7i1H +;iQ_G!doC&Wf2MywBq}!`$^Ac;A~#JrP0Lq2>{oWB`KZi6dx5F&3N&Kf|oPHKp=K)Q8QWGOr%1-IT$7 +Fnqg?Y7lUhY{6w;ZrL(Zh{>d9ZgOmchj%a4yW2#63G!BzojU!&WW1a(0Y;9z1Lihd#VuYr5v14qa;P +aBEK(p+dy<_jl}v+8uk!GAzdn#9hZI0ceA%-17pOWJ^zk&#XMl +vvf-bkac6GYt!(?w=6#&BXrglE3#V5U}1&x43*N_;OGq7}-AcFccCU56AXZHhjRK! +}f&VQD198BY`n1#v79^Gx3a(QvcW`LUyxkvFSu*KH&g!pIf-et#9EJ(^~Tk&GDp(>mquh^f?ozYnKT4 +;B+%b+vzH;nr~{(S@=*KAvF=d1vg*X +y>W`EgYu}*#2qBZ$1<;X>@NW*8*c@T_n3Ok12?7iTm8D7bKgN*t@f1ph*C`pfA89gp|6m3CYKDen9sP +=&T%h_m2w_`BsJO+iA_j%B27Iq0-WN8W`6ld*t90rzC36cx22-A{~ww(Cd0VEWEso@e^&M81Qz(x)?` +AkbpW9wDEWylZFY)cUwRg>`r_#(CC!#r}ye5zI(uH}?AJzxtkYDtvt`I9K@wigz_@kZUWyW|vnzsC$2 +-!JgXJ`6gOSiFP?e_nE6*N++gvAkAGHTcy`u#077Yjvn0a++ZvF-22W0#8iz^Lyf@)}TA-_2H5zf60= +cv+NYSf^e9ng?#G%w0^(SO+e-;Cg=p%gs&=@sUx5?F6e;vm;iGUOU0!krf${|aDMQvj%4R7`H_&3oeX +|tC7m6*KO|Z_j=(`+?+;%W6ly}jFY5N&c+*@lt~Ch;q7-7WY*Lj(1ukQ~fm%t@7Ic}PnZw`|_L^ZEPS +1Jv6uP4VLxg4^ON!O{SzkRZI?x|%ZA>&ui=7QeV?5!;Yr~)w@)cs)S)!HS-rYU#+jrl7`>q}#xWz@?! +SG-X8w(42*I&QByI-J<9rm123+WtT^#+Pmg^nhK=)tTZU$mVgLiA1JZ5_m{u1VC +Px`^bmR4ueIY%0P4yM+)SCaGpXvklT@1#C|ZtUrCi)=F>1p=Of_rZ45Fh_|BzmWDTpwO!!Ulp3VLzm2UxH49jWgMa +@}csFR4nb_9)JPW99>Ou`E@rveLO5hGHs}0`(Px#jITbOf4&j`F*!WD`dyrV6o+TOi@%T0K8(ciZx@r}%S&-S0b=9Ri<9v +&q>j&yPCkDapZy}<1LoQJl{gunj<101)j1WZh>edgk=*I=3IyoGlj>Lz<)5Bkm3F{o_U=0zFc@$qh9b+Pvc?kcGuEytQSec{qv +#SZbj-alSs{;AU`0{up4kzPF6wAlS`6*Tt1q(RmLJ}LQBliEWoR*py@?okL+$A5O;QF2^hTN%o_(-6%12Jg0Jn`dHCH=f4e(gB9{b> +Mb_mB@3&UkO^H$T{~p#~t0 c{Aypn=R#0;{Nu^Nm;45Y`aGKamu!Yz=7r*ZT3E<4uB!g%ce|>!|4i +3Z~Wbb!p?_>7c*8F#S*W#xGVeOB^+aZW-CIIx^j(|UOR?)3P592YtG=gS#1yHJ8PThLj}j2h{`L_(X4gyOZx&XQFX7Km8CS;JwGC?7q!%)~iZ=M4I!<0OfbD# +{Cx&?}HoC2_5cnsQ=VKfK+D)(`tNTD}a$Z@QhlWvb+l*k6Rf)Xu@PX`hrXrRQM26UMGD6Vs4uSy1j-9 +7%8vBxl$69f)cy^j;&3ZX0%J7`W7?hO1MC4j+XKshT4bu@8@>FyY2K`ojnq+c=f8u($8b57j9Rv%>QB{kb)n}cXDQ${xu2D>C +jNVG8xs)#=(-mNUrfG)K3rGW{-ULI!Hh>?T?uW@)Ut)W30#$zx +CjQ4{=gv7w9nHiQ@vqCx17gnJ(ceu|x*5;cO|LKFcE!I+y@^J;$g-qv +aiDDmHCtdP~4Iq(-`A859aUg;>!)WqT@>xkihiln_P(k$gBn(>IlxLziqBM49!WT~Mi3!tA$*T*p7gpdI3mMLK?s~riCu6QDGVq>UjTZN1QhfJ+{PLtk=N^LLn|8V6Wb +b^0kt=Nz!WTpS|6tuukDSoD0u7kh$Z*7Nk_H4{&tB_ZPZyiUE~2s*SQ-=^FdH8jNo6>8?<2RqMFsvq! +sMOPNuEa>nl`1bV;?&?^;(@_@7Q^rXf`;(0*uPv~!z%QQ=cAgU3?C9E)sq%AUn63!jn0`Y{NENXHv1g{R2EZ2TcvkttE+0zHL+CMc#t|v*Sm9Xdo-Y(JpN6XMwaAYtpU#w +Be<_sO`|DA(k^E!z5tk%YMvVUig`@4;2=$K-ARH|;Mgn#cP}Y9@B&#m@_qZQ04^o=32(nQrT|O^RVC+ +cTEx*ETB9HnTQ>xmhEXCYPA&DyV^VLKESo>`Ai>p?z!WTsr0CM5Z!+7%9oo6P2aFv0trfSr)NFRGUIO +2dS{mnxr-mC;8zh&an{v}4t*o<`NH>$!rikk3@bi^+3t)DwUCT#saP^+7+5o75?KnlOaL^uY=uv_7id~;vaaIG~YQs$AL@bC5Z9=B +4s#g#h(QsRF>fNL^!@ob4UkoLK!8Ddg`S$bHRT!2v%QekmhR#?I2p_84u1BZ#-5r8BN>=r-0*!PHIqI +)Itt?Sr^X2UG|Gf0pL#u39x?e!AGDtE&u1#ynO6OpSI(dPtzX!IM0-PAZlGeXi5|yB3>r3C)3W#CvJ2 +r*NFeI0OE%(QqpL{EhLM%(}5Z|zNH?CGKe_gcT@LsuZ?W6@Y98v&O`a={F%oYp)Z4_WZ_^sK5$kCw%P +J(t*`^*b1IV$fk(4L>h_1KeRQd>EOxm{q +|)?q<=}H0oIhPSw-Ngzc*bA&u`#I&JSyQdI3=~gJAS@ctek8P9Y1-k`g;|iwdy}o&HqE!T*I~%H_x&q +gdFi*ApdX^t~|b=gMk;!w#)1_6jIhNKGu-iMLy3Kp@ZwTnZm^cdS5}XQl!`gNGFlfygpr>o?H}fgud* +yHD*2xpajivrRJQ|hA9_r5ITzhVjx^sMHEW1PsgXn?<*+?WE0RDLeNLv)+mjuNkodl*3eqy&?cegS(V +;tGnr_X;A`kcanwN?!rU(E6{Ix<;97E(@Kq&+2og{mA(Z^5tE-DkncTApG*d{mDZjSSIQnH=MQ9|fqi +{*1iYiW9+B!PkMd00W7+^du`Kb-z&s^pN^I!DP29n5SqHG)=TVc}JyOUX3@=ouU-HaOk$?#M?ekZ%5A +QQo^)MF2r;|FdSlW+b|JgGce<@KTCCbyErM|f+JF<|;grCx#^iLcG{QoU;<)#NI0y#&cFO77TBn*3GZ +`UqwL#ba0eqtP+77c09XaP_0H;I$76I(OQjma-x%ubM`g*sI~lXBz6E&~DUgK)^v5C*C}cmB-KSjxgm +&r!;2x4ZaM_{vs9&-1Apz?pa1Uiz8)>AB!hNAnxeTH0lC|IncdKV`V+3{Qf +?!Sd#(OU#+@zXLnWm?v~wJd(V>){1|urKw3{o(400cY1lOgg~9PaA4!R`IK3n_geJ-F-6Z>n_2%_(nZ +(mLD+8a}t76PdZKL(L2$Q8}gg~62ItYI03xgDXTI=S1J3X0P9F-lNB2;#D*SMS0_r*gH`SC+ab6UYH@ +IIO}<{YdW&C}+5M2Y}k+Qf?HePBZf+ +f%bXkVuH;!SC<%Lz$Som^F=Ac9o$aEOO6H~%~f@ru&bx-?C=`jL3NU@VReJyPCH+es~H;%jTLrUPUDp +|$a2gkx6LddE!OBY$!Y_}^}n4;0h`YQ(uiO}+i+ClSnm|f=?fSYWZR=Nvwx<~!40=T1{fGfCGPE($bZ +B^v?Zzu|5V%*#l0nN9zCbzJleYKVrs1L>YJlE%P>!$j+;kY7OD`RSFDr84sAy6p@8oOlXb*yMaT%(L7 +vVVsSid$$!bg7tY|Dx#mp-`?~_nz$JiE%NWtS`^IoXV`^grM1R|M*v9~okK)8#oTpOXAx_UZxf?GF(` +?byey4ub6b|Te2zqf~Li2}-Ax)-y(-|ppWr=xFP(+95!i-*k+Tm|CoF|?Vg<-0ZL%XTIy9CU(WSnaciqDsI=Q{du=zfTf*JSZV9v3Zrk~Ks@*DM>9X6 +Zh}YR|F;HtGvDR)A3GOM)zM17JdR5z1iJMz5;KfTBwHu%=qH}2%#wKCtAOYE7!)r+3a*zKU0=T}9%H0 +F-R`Xwj4^VrW#y0r3GFv9`W6%+~tihhB>}_g(PD1+-;I5i353+^?`kxPS=E6{f{KqFZ^203^fwU&lCw +87ohnIaWc%6L9x&ij%>N$+iT>mpGasdwEAx`|$+iybSOOVZ#z9!NQ7hBOhoTgdgdKuI&@DB5A{@hA_6 +GEh}Z$e4e??Zq~&flVf--Z&^@Y^xQ)D5WorLXW>7O|0CC%%V*N~9MS&R=Zca1=JPxiKqV61;p;q=MIXKK0I{+g?{YfZ4KiEeW146*YgWw4+l` +WivF4NIdhP12?7=@V&WDi>4yk`6yZ(O-#_P#bUdM7b2!ZV5%_{mafl-j&n7w!>6c?u$@%Am6%xOb_Y@-d+tE{4u8X%oUc#*D6m?XHHbi3xi=@eBk^4_5Z?)^^=OFlFh5Cm@S89PzYoA;nH+j@oPm*tM#g#ggn67vkQ +fr>iR66sQlK*gegwtY@Knw7dFCYLeEn91xeeo~8!8a>f)M40detff3wms;0c7E0R|U-Xwi*;KT~(+gb +kxCo$1c0D2iL#HT_q0g+{Y8R=%e_@Y)7g8476wHpPNk;!wRydGYB#p$ymc3`~jkMERzS%4MTTIpR?=7 +p7J#aewyAa*o{^eDjlbzodJdhci1l#R!*N%-|=_n5uH0lbRd6`#QfozX{Y)N!91GAdE`6#h#yNOG#OA +CtZen69pkFcAP>}OSEuxfePQFnJY5=Ns1u01Fm0BGS&Tj|70AJxVX9l#!d7P8;IM_iR&~^?TEfzQ<>? +{AX9%IA5I$1_F_bb$>sn4NM{Hr?WVJ14YZ*mZ`rr+O)!pGvrzIB$NwsOf=&``-{~|L!7E@DLP{-=gK@R{zpI8=dYiMFAXVs0twL}bEfZ@bi(M-oy$7J8ug9ZRK9K+>x< +7uE8Zs`fTQ58&^2SBHFCs(P3=QF&#dua1_K*zTUh#(Am#yr}Ku^wN6wNVIYcilPy4Aq8@Gg|BM8Op@J +599+@%ak443|crK4KR0LKyxL!;W^*LAg;R+C>!9b4sE?sNE}J2lc%YKu}zIUNg<4G=;KN1U~EGhn<_& +?JV_x1%oCJSfFMrcb(58i`$SDT%+eZ4s&4CO5vQiJ?W1V{d-@ +nI7$*kFditcPr_uk)tY7yO(ey-9tEK--ZQj^s4RGI5^y-Z{XvyqH +GU$)$u`_kZNDjk2Uz|{a|S0fLfIlnrMi!2e_vBpbC`3eXaI2N4|WdJ$oh`z#u3?0JH|cXOqhyrZ@fJF +G9q&ext1Sh^cebOTn!|cknQuDTRw|o@&_06^T@j$#Wc3?B^gwAi6$XoeX5;PK* +g9b(omY`1E%$v)!0elwM;dM$CrFyK$hP-XW+7nnB)Esxa4O7Ak@g+{~+=N3MJgYi$Bi{`nk`q&~wG=| +Q`5N0+N5xvHoycYAdeTaE|M8FAk-#5#7}B0mf^lT(xl27yQZxsCsM|j#m32@CZcSS_h!Y>uzrMaUeST +r<)-<1uM9_hj&%OrN!-nw}U()05I6S%ADn7NwFE^JX#2%W>qtX(LMp8Bkomg!&Jq>~;9gGI?G+W=;&Y +xi8g%6&NFn-3miI5y_NP%&YpHn`5PFKlS6G62at3ym)y2)+I9W*{Eh1JeeW6*}shE^TBQkEf|tqU_~t +Sjw#3mF9Hf=exnP$@%2@gUl@vLlGC2oKg>9ZihGlQyhHG9P|K}A)k#W}}Sw@i| +?c)ASqg2SQIQ3q2xVeF}w>cL3IfRtyFkB!H>2FlrZ+dTOwm}!db5}hULG(G5GabB9z?2$CQg9sZLaK(7pKq|01tw +vJXf%1fH;SC*5kLNxN-?cD?MbW`_mMV)5x#PIGlQlL>n(;2d+gYsGFmYM6*bNw{l?&BeLSL8ldJuvb@ +chvb#iCFuI>+)kz2UJc4FvD;h~&eoG+Tv|G0N#3jBtumE8o(om3#L0m4-800;^2eUdBs0@CjFhQB`T? +$9Yycjt;JF0vln2qz^2H6iyAj{_?*Q&~4YNNH3L{f1nc0&7^4p$Y&kHPIA6ji +0L|ul8Q#gKNe~B-6_I-1?83KF$fNB`V}}k*67+A&acyeK@YV(qdp7#~AswnoBxBpiy%K+_2^V`mJkDB +sZ)%a=Jmyp%AWi+k&4#E{MRP20qT@;GSdwC^?_ui&rF}o3n;hvdFtx$yxw_>?F4oLo`Zn3KL-Zgt>`8 +_1`p+?w!eKHyj#fcMwMGer%{F}7WyX9AY^KD3(~7;^@<@CMY8 +?9B~Vklqt1=u$P@4HqeDnjODj$1Y6IsS3wZzaybgy7r_9p}9CH1^s1mcyVz&aSksp$G@E6wPlyx_=@Q +k^v@R`4zG?cYX^wyy>hzTss%QN!1!0c#X{Gqc8dl6ZE%YT{&_KIB5L$)ZHM`%l|qw_>oLrlDT!1`-L{ +b#Dx0=iYc>-9{GXxerwG$F%ob##p6j!C3Yh&>)i#W)GrHPV^AZirNDcP3GMcBDim|hxI^$TYO<~~&Yc +0L_E4bGWqk=W{%TlLGw~DKhV@_dEMiW#`Q_-{v-dRAK04#h0e@z3La!XdR5fRhXb^#iTxS~KU24~8hC +VU9AzEdd1d6Z@7MszLIJMu$Q{Fq4uzI4(5LwK}s@30g)a#7JL=#xETcoxcg8PXMQn_)ov!~vg``EM=pnG&A +9YY+O+B*rsjeLU-1eE-91T|-m2EmTO{S>g&0{kHXhzIy?}rtXY7J6t$e2|iBLFE*Rl4O;3*cAqO*Y|> +H5oNBSXw1uWMbk)z(OM7(cf8BMQI0acP!;gnBI1{xeC2S9oi-um +n4EaeH06J+$wW!D4L_m(dIX8XIbCZE%HIj>K*zaUBCM`lFQHk+6p3m(AUql?F{uMr$TZ_oWx}@+&qh+ +FGRUwe4@-+Vx_WUfpy=O1pPyhz>c$&N3Shcs1`X3uE4_qTwm<1g%pBD7-p^Cg@EE(Foi%^3&yhrHAWE +J}s$H@xTym?#GuVjgn`KehZ9YQwRjGt7WiTA0jv49$>JQ$XN?0R8gPePlg7-xRSz~eRpdWE$Du&f?XF +%DHH2GTWK{6$xtJOr<&uaETUqsx_f6Mlo9PbT>dBacU7pO@HS9B%cxM00m+8 +xwdZV#%wWYdD;iEA{s73Hf+^Eszjd=BwnmwcY6>gxEn-U7&5Q3BI^!DF1Ax&De_GnP!ccN!x=>}7?(2 +;pfXV-FX1E;w1vuBe-`#e`;f&$wSbj5f$GhWq)mxbr;x*+Z2pe$u|}jo@jFwNmUFmqphdUut4-61=pKfV)4>qSVh+Vof$sSacrQ>%?(cBm?73P90}h%?d<8 +vL#Mo@%(|-vC-i%$f{-#sp{N%~1rgn7s_8gn@(#Kvc;+ZA6**mzR;(Wp$CM5>p2>u?BXKSH&ri~Zq9@dQ~_CJbvP;o$xXx_fQ8q}ipQQaQf!-WZG+CIHT&)B(Kjs)Ba8Y1X +MxfiW37$X+QVq0=!v7(YYi(12D|y8cXGG0IYwP0)pq}sWhjdlw1_E*3bsC=%=OYp)b0rr_3GpQ~a#&bQ3ON`V7=xWf$OZ_k=;|W8YMUH3c +q9?u+3SH3>Z-2^{I!S$CN<=8^H^5=^7n_$zH9p@{!$95WxX+&cPAVgCV{0%RERaRaUMj``hk- +9@o`nIqx!4Q@-UqUv$^MX}F1BG}Y0n|-F`Na%9GD`YkiKx|r;$El9l0gN&a{KxxnaJI=C?SMVCEn90) +AXG@6aW +AK2mt$eR#QEaJPHp1006K7000&M003}la4%nWWo~3|axZpeZe(wAE_8TwEl^8#!ypXYa|+(;p65@Tbi +*p^9)e)Srok4GeY_eusqKx9;p3Gs}{PecQU$EIgGE9~CsNGxZ*(v`*f4Ixz*x +&|Z$53Ud&(UB*PL3^mgk;Y7f^>l@7&h~EObz8He%1}rZgg^QY%gD5X>MtBUt +cb8d2NqD3c@fDMfW+ykOKsD;Z9JB3qj9NhB&pMZ6-`oi?=tmDY)qNzxRhfTI&jJOBMSh+=CkeOM;tEB +n?_JNc!Jc4cm4Z*nhVVPj}zV{dMBa&K%eUt?`#E^v8;Q$cRqFc7@!6|8!p07J +PO&>>BV=8zgi~GXJ>~qvYM=MfsJMulpd<;=*+~dvaNUq-5bYL0y +ub@!3X~u(H`XC1P7yoGh-`zX#*@{H?enCT_`%=$yO{!MHbKly7c=A6QWMDlwwo;1yD-^1QY-O +00;p4c~(c!Jc4cm4Z*nhVVPj}zV{dMBa&K%eVPs)&bY*fbaCx;@QE%H +e5PtWsARG*n3qwfIJr(dnm!{o-Z747oeH3WvY!jhHjilnZ!~Xm3NQn|9I_VxJAc#aBk9YTdcRX608l^ +3>mj=v2_>X;CmsTkm2EIwLTP*fkomeB9ym*4TQaac0R}03PoL9WDpbhKff7xz7zxQL^vbt*gh=(Svctm_N*vGEo@O_ZiF5Ka=#8=&WFt(s)or}0hS-kW~ziZZnm-%045nasc8`d~(%ZywL?qYH=Iv&ArGiSVtRr>i_fz$+m&YLSZgo+H!sh1O1Bpruoa#s&fdCFy5=k*%t)EB0AjwX2xFW6DEeLnN_$e5Q +4%61@Mf(VAj`enTM96PXFdrnMT#dEj$CO0V-1Eh3Y(MR`BE+qG|lYdfcja$xo4iLHu2Wi`AESAQ(^;! +S>A*@H|MkZL;qFD$)ecB{aTv=AgCG-?I^67K!yKGf2(VXt1rWy^*_C$U!!X=`l>K8CBH6S1PJUqx7KX +hT%l{$dCZcvC~1us|wSRSFY6W8CF}Z8YHTXZSJGriRNvC)fKW?5LI0XA{UoMCmJF-GKWki2wtm6E-8Y +)z9KCqAtGHv8ckvqSMwpWk}>=KjPstq#}{LH8d3RDj$5=9s2<<#~_$V;4IRWRZI%EDUNQOG*WzB4gz*nJ=%uP?(XU@#`!vXeL*E%VIkIX +O|V16&N0;x3Y^59B1h;sYm@U2z!*qB-(kUb23EmO*aX84u5m(7uiieoXD?_2kBK+v0JyVQ+7Ln%i^3z +5+Y7$dV&}0s`IQChTF$4?`(;94S?cR67B$6G~hZ&+sFv*a6huMkEE78l!n3ggX&tu-6)~XVBpcz`dzL +Y&*oJR-nm +5`Rj$6o>4+<7**c6YKJgK>Q>YvoiU~^6xb6yVQ`0XL_jf~Sl%dO1f}j!WE4W0l?s6rgo)SX%Sb|jcf* +xT*F@}EM+7{wX=VrP?)LTvEXf*HS8&xJfp`4`!cs%&=ufS>BLogNc*U4Q8`6Nh%PJ^Ug)kzp$a7zHS1 ++w`yOMmJB|sYyW&++cc?kh|<`*++X5QZ31r2ffg1nZ%cXJjbn~B7cJrtIBs}!@)V7&aqEf?LEJbO6nZ +%sa>>Ffw@C3KAfbv}ac?u*9&yOv?r)uK(N@;!JW9FT}#7Z-8!8+{lzqIxTZ5Lt?2b2CrIzjBM`P$VVU1PJC~P-nZ8 +`aU0PJ1T)7Ql|p7G5|W-5UB}S4-zM_kUB|G+_v@gi6ugG;e{VFewb+S9;0Etl{oThL-Eka#Zh&!fH;V +JTMRIXW{!HOpD%0fZF^0m^z18yC<%Q;Y({p@}p&xp?yuy--&3jlBdG|>?#aBiiHGI};D)y*=HJ}!h03`ze03iSX0B~t=F +JE?LZe(wAFJob2Xk}w>Zgg^QY%gPBV`ybAaCx0k%Wi`(5WM>@0zaAb}16r4~` +v2*%wt*!a+cHj0dQGW4a$cu5_6bAcu`miB?*#jB$bLRlFjJjjTTX-hu(DAqy%AKnIgq&%XnS8&9h2XH +w-nuxITwEgjl`Z)w2@?s*#Ie7)2(suY)4UHBF|L;LrA4mF(*>db_{3mW~jDIa+-au6uXQ-+!7KV>h@@ +D7VJWU#xmV1TGP%oQUjI<=lqbncyqEF`=nnvn^n>5M<9Qqs#+}!q;p~GZy`oAz(b}hd!Ke5DmlsMmZ8 +NbP!I)OR*v}g%fdT4!{0v6&MP)h>@6aWAK2mt$eR#SzRWD^nr006fF001HY003}la4%nWWo~3|axY_H +V`yb#Z*FvQZ)`7PZ*6d4bS`jtosqFl12GJS_dJCq_FLGH7?H|?s;c`bm$+PLE>0b%v~Q1lz0yOX2*?m +6j{W)fAK~MJ0bLuW0V>BBx+YsL2w}*?a*DlCNCpoMv%vEhePSm5TKH{|F>+}zy|`s?+lXKbVty=4i0|&cnw2p9wlX7iHwJJ@Jkrp{Bm*p +?cwe7$;IT`@c0<+@%F0;+}->_SK+_#(mXp1Bm5fxy@Ql5wJ7FIEkgJ=xj10(19|^|k0py4F4{=g6H~x +l%~$-9t$_1_iGsbVDv+3XWZ$uJ$v(clVrPH<`aC)yD)n>k*m*?H(*S9E-B#WhFq_(TFP< +5GQpn-DnD^FA>npeoW;`K64I8!B)9F)4W=E~%{Y_gP*HKYs-x+qoDGD8xt?G0`4u42v1K=rtI|OY|75?>g?pjL<{pDq_v!beWjgrn>s7XIuDafPFZK +!Mh)M?EA5SF)IWZFhk8tE4iN!NUdBt#?)Zkn5e}eTT2uTp%o=|nf3OUuDH%KI=ylsA%Z>%;=FMZmD<# +Sz3_cXuhQ$k6W{pAyuEAAn*n5_h4?K;KV_5l_4A?W`zVk@4-le&SaDuCrb_Xz|y>3VKcaKc_Tg4|ZH8 +>8s!H4XMd?E#B*%T^%WD5wRDJzT`Vq^*5`pr +R@AXY9|}NoNJMgeppmP-^MV{u-Tnvx7W-oW(01T(A&=<&z%}ka;D +uB2II8`zL28h+3VYPF)|=h4vXUBc#HOuXUU4lni8o0D6+q)%AYo8cbRrkYYP0Wv9& +===!v_me$^X5*PhNlOab&l-EVdAGZk8>}Wer_UB1`>nQvM?}a3&4ZCi*ws%h_0Sk +I+*-5V*yM5SJ)_=k+>|lLAu7c}=BFyMgJZ1F$jt*V525luxX5Uzl_5(8I@E2pf4>-qr@UVlFnnxoNmTBtx^yG7}U9n1zJxbC#;s +q5%nS>BQ7S19zr+t1OoBi_wV61&hC%CJjXoZ&*h@1Xi-WuwS_sf5&Zl7JE#WdYcYvO9yc6ubDcOX)h$ +`*!Fv^wAL28(`~LI@1k9Y_X{TbMf@ZH+omt9>8ruj9#BmW0Ksok0G2~vXd{}7R;U#QMftzU0XY3mM-C +aiPhFUs*_p`j$vh79Z6fCK7jiP;6Rp$Ib&%g%2omr*;BxF7lkG0^nP=iP+B|g0eVL4vB)p94KWK8b{gGUHHMsOL4}cF +t#{Oh@^Dp1JtY0FB34V4GY@poQ#zQvmZFrYz6QaIrE?pyKrvV9<{@Zwsts=UOLsop{w~!z(S;N6eloN +a~&(t$aP9tY~W!9m3!BsA|*RysGDf~46+Ljv_b&38rcBS3>j0c_%rAblL$!x$m6_e7weovi`G)`d$4qf5sh?WLq`q8X! +>*%NFY%1G#U)_!`Kf^y>hf^7rcPod)o?zn92#Nda<#%I$W_u=-ZauE3yE#N8BrN9^rqSUJvd1vTdEy> +s21Q-SN=q!dtLMaHXd)oTl4A5I1oG09t{$x+Cl1h|eEhf4E?u +A%s!O60{5%v&pF;28IwTgmC_)$TOb$8SfVr879$`f#W6>K&>-p7wZOB42aFUC +aa)5~4~({&?OqnUr?Czb{5E;nGU+KR?&W@;i?(w*#s|EeYcyrH-;VYffOMJu+898YxY2t*Wkn&+I*(z+?Y|wXfcM21>WX6|z{WSze}MDWDSmqNU!OS+h@w!u;jlAz3@X +UDqhyq1Ef>&8>O*nxD32J7tS9-E2Ew-_rMcWxr)(9dIJ95 +TT(H;V(i(-Go}6R1#~@bBnfPv1680HESy$Mic6_4`&#N!QfXCd`aa+!1 +w#>GYE(h!fefmM|S)^cJ0NS#C!$t!?YTb9tmVf7%CW;W2zpq50?@>kVF*FKc45z^UKC!RBGi@W2dG!R +#F`R(NWSg^!EZz1J9kb^9G+Wr0S4#jyso-G?g}M{zy94~LkuBl_e9RE%Q*$$^1FoR<*brc_JoRGXHZz +%$T+>I-wZLrmU@3cEPk8ttbi%7b0LK50)5;Pqb834UU@&4}B!#&A_KnA9I|)2DJ937JAxQQ>4TSrnZ% +w-cDKzg#l736X=2Nbj_PlBD(|ojN8;%&L@NmIDPw+rK=6Ez +5zi(|Y|2oEx%g|N`vA{4oxKDMR=5#ma^c*>=JrYSv3+jiQ^^&sMtcCYxkUN!sWiz;a46;z8%%91pmim!|98fvn5BrqV$~hcxr87E-g_N +<7Em>C}yyC0RYv=?*@q+2r;sg=T9c{ONBk?m-;-6N}x4RU=l8lDuGF^|d|J*JvIqx;|~e?l`Z!lH1+? +;7daa@GU&;^R?@^>B@kww4u*4M_RIutxAy307bNxI~~CJw8<+6&i62*AMo+#MZ8z3KAmYJU0iJNKtY< +r9NnwXAHR{s=(eGk;c@b7?Auxm`%S1mvKl+F7#CMXM-p*?M_~GVeYe!UTu77M!f4NjJu{TxX*s!#irO +xnLx#Lbce0J$I#}ljK?zEk4m?@Bz#|0eMES1TZlWhmbBOVz0Up{Eh)b)sMcp<{zhNhX!syAvo^!+2ULm%X0xh%WZk$Nxbmj$W`pZYt_Yx8J?&E|mRJ_yg80XD2UFWpw-ksRy1wA&#wE +6ohqXI;_D_7;K!%RIjevjJlJgvo-?Dsjit(toD!`N`ih}ZA=9}$!wD-)!(y4?7K!qQAAa)Ze5_K>B<+8T;nAvTn|4rr0<}>Ze@GYM=R%IwWc#iJWtH) +YHxVk4e@5CUiOx!@6{<721k2(pvSSPl_#!LEs4QrtE$gPq6ugZ`@GZQWuKnG8|3<^S!hGhk@5xLHW0 +o0D+bPCZ6KA4JqGY0O&g#<(G=YRd*~JdMU5=3DN-P*IR5*-p=?=pg9VBL^&zpX;hQ&a-VEIY-;wcTy5 +5IGKO7UspI;V>g|;e2dQ#R_O7EYI<ChV8( +!n4qF%!RXIHuOP9R*f38J9e%3{?$H!{MG35DqOnO07!NfB~6E+WN?dPa_t;u^tj5l|E6$_o>Ah&S2WR +#4bhh&4@Fi7mNJ#5eO=!U@Bll&}Qm`e=|q`I=~>5!NDGdXJ#-~b2|PAv9@H@+A{B%(AibzLQOFvVWwwuWun*={C7y$T+n?Y61t9AWk*xQ7K^XcRKVg8b9XR6zW +pWbbW-yQEz@I|!VYDi2S$mG|LxM9+1jFo+n7n|S9m;DkaWfR-8tEOQ*8x@zIgcnD#S5pJ5S6)U686 +R-I6Ve?@h{Sh^!`JNJNnG@b%E*|l2YRe)Y>$rN;N4DaBgQC-;#S#bWh2kj%s +g*ZG|la#Uo*XVxVkKp0-ejFvRbciYC(1Iyf{C*SvrtO-ov9>VP}#@Y2jeR)?)8$gM1mxfN(*`Dujx9f +0PA{t=h$L4)Rz${gy2(=QzN%_=`$$t5~o1^YwAgI?mE*p@CcLZC=TWCjSdx5qG?!^6fPP!lWU%ENiw{ +H4^3Pf@e_RXF=tIDwTFII9JHEM^(e-=o8I3nH$;qICIP+&z4VTxvzeRZ#e?=V3@R_z-`k0 +j-4{oViehFXP@|xfs4Z&Jdoqtfov5EP&iTo7saqQ94@4r0bipcNT)i)UVM+O?$4sKt(w=6D|{-4tR4N +yx11QY-O00;p4c~(=DC2d}>1pol%4*&or0001RX>c!Jc4cm4Z*nhVVPj}zV{dMBa&K%eXk~SBX>)XGV +{#Te4%P#f;^lThpaL({8PUVkioMmZ+EwMQS7!$1U>TcSw=4r6f+{2U(YM +{SMFhNLrLaYLsF|c!p(<*3X(2q}R)(C=e+yWl^OmQ^`{dK+!dc9soazt)QDoKKKO=M^djI7m@_kxqbqKD +vTp23*?6S8p%Nu*qC!hsc%L|2m6Lcbyxign@T6D^W8!I^QSooT1FLm>3fMMmYa08x9VtCEp$Fc^T*lw +qaNA6StyQc0>bO+&HzMp9$7ju_l-u;i3qhKjI!1ddcGxbi8PUl0V%{l_{EjIJ@G8JgbQczsldY(7*34 +69Vqm3gn%1nQiwNn-?O-zudG!nKNe&D$l&dGClSR7!D8Gm;@K1j3Aojd!IGqgMn?r?WSaiKd_Kmc4Lkz2W@$W +71(5dCqx0}huZ+dhm}jcewCg|0NBQ3viuaR(L6ySj^30$wHZ0oT%DM`_Sfa_iQ8OzIYKA^G;(#j>wS^ +ZS*dk^n6-!)MU}_~96T1g^xv;$Ew_dpJ1Ay{TrJeBk6Y-u`Kd9kwQm1K*d;O0-uARK6~^S!9^Ik*d%X +Cf^p8qLH?`c?G^n)YyA+x9qC!myE+Qa6SWz9_4qSYJ=$pdP6W_SNuz0UI$;>Me~WBv{|E}o)Gd?C)0s +r5I^_Bp}G6Ac=2`6w%0iG(SLO;(_stu`2l6ypyO0`^PNk{&X>IqF&EoN*4~HL3`0)eftFB)kVonnQ9_=RcQg_Pl5P>o7}iH(Dqe?8j>mK6pZ&qYRaO +0t7RerqSUbTh~=4$m5xNx0dLP!3_D6;7{^;MVxqTens!<@W|_?+2N!oBj9%HlIgF(UDaG?gnVmikYUx +kT6z);}s+Imc-HF8wfTRHxQ>1C=(F4;Xb`K(b!#uHY^Ftvk62&BpJCTOu*Zy5Z@_d*ak%S_~KKXiB!d +($tpfuF8_{A3z)h3=G8y@sj!>2s=FUc!XQo(E7($`B<4hKh`fqnPHK?~78~`Lt26lXB|ZauqqHoa&3= +1nU0iS*xHDjHh*O>q+NAvMoMy(p!)nl+pR@(&DBCeQDV8!T4*?#!Zted0BWCWL)xy;Sw#R$#JyV ++zqLUZ$OJ~@WVbYd>>cs!X}?c1Md$a`nD`4BZT$bWB5Z`us0E<3k23SO_>jC#&_a!i4ACc2aQ%-JFOh5z2-!zgweb{Yc^g +A%IhN{ijipxI5G^;?8Rgh=ByP)h>@6aWAK2mt$eR#Uggy;>Lv006Ta001Qb003}la4%nWWo~3|axY_HV`yb#Z*FvQZ)`7fWp +Zg@Y-xIBE^v9ZSzB-9wiSM#U%|>KEV+uBjg6o&Fb~OI+I{FIXpGH+VT>t>@^CGYib&1uB*=g7IlM^J# +dff02Zl!$$&crLGjCeiX_8aLzP;LT`xlq~>64PeKmS(qe6y)K*^rjE+3vtZDLdj;8}-oA;&HK_b?n!k +DXlW4yS~tU$CN+w8g6|r6cdVTeqe8Sq1^>pA)A(Jzwuu;H$VM{saC?~6wr&u8oo9Atatj3DbVsJm1GVx>UH&x2!V>4Dn) +)~9j7(_jdiiiKe0jsl)=J#%D!pgFsrMSI6>iq=QNk)Y5PG6=B~FS*wx*h(UNtFY}e!%`)!%qmTU$DUK +wD*6+!F~8b4-bJKO^5qh;(^Eu_#)=F5(P>odJp*UQvv|N;~9B>-ViD36 +R8J3x-?*;i3x7>f(#0&2?UOmFbIR>x +Mxc&05}_ak3loHld7ydcHEXOZaAgVdF?NpB3-oXxytJAwc~!wVQGfw3ePlpENSldR=IO{5SjN>r +M9R9Ehtizt5e+VBQnHsv;I12lvcM`OQ|P{rLLO&?W#pag3TLJuN4Uz9c;uj`d`TG-vVYj)PD7&;#wz% +5wxpVZjr=|_pg!^@6kX4j>@wOBEa6wWvg{%%>?kqPE_UE29+Ff1m;|XRJ|qc&@IW3@azHnj$LWk~)~G +mHpeAdifYNo3lngNT&Dvg2mEux_o87Cm-QW_+Y#vDua{{bAK~M)WnG%F=*7i=bN_b|vGCljpW_${4z)|`O=U5d*aOoJA~hAj5&+~e!GH*a5p7v6JaOZkRJ*XeXQGl@yBAdx +o*K36%Qz5d_DOOP-{w(KY_Fo!M}y23R0x|w%7^NV3q!~Dri1(MlCkuvB`p`F7ak01tuyj-n0!$zM|OU +|KnPLrfn#jPgx|FKWFn@l3`A&GC^vjJm78THG~hQ(v##L+0wBhE=bDI!!A%V*(Z)KAYez`z!}~ITI&! +@q{?y%RX1}O*7Z~x&St&|2C9g&uvCjo-HTj4-c-wWdTfhK-QNY(x$jHCxBl9I7weEA +;{V2TYovq{6~7fNG_!Xo+bGC`nyG!o?^B@Bv1fEEG9F-(Fwdk-s?lqABH$cVysiQ*}Md*FRk;=Lr{ml +fz!wYp*0Y@?kT@f!~9Cw?@9VU%k2;dIi^ZOzeOw=zI#3=n&M3%$O@_7-ZVg#1CAu2I%N{TH(%Z!0V~T +UdEVwv@;H{JN*7flmTEvbqq*J5>K6BGq;ED0fR&3v}O}$W34ra>By!V=WYCL;X4TcvGF0fzL-#^bwq@IxP|j6!@qYyuBE*4K>9h>AM +=*{wlqn1xq_A*N*o_%Kj{br7ia{NfzE4(_$l6!-@28%BjfVHQ+iNb#N&0F^@o;m#fnZ$o}Uy( +kD{6e>$+LtG8XApkN;G~}47SxMKql-}`Nvs8nL+ma3HTT-B+!Y1nsgkwm6(hZE#)!PcXze?M}7Ky-q= +SaH}yAtgAdCtLIP7{ZYE=*pw{FwA*Q$`9oJb5Xwz7=CILgGJ$D)p{37nM~tSU>>eBsIJl(|GDs^(2kH +s+-aZoV}QuF^C!PW!{~$iuLNQqelokmWtc4(7nrA*~YfA4Sf3f83G1??GoyCsDSU1P)i{Xk?z1=p&tL +rOjy7yKoC)sknNU4#l9Dhtek~qf7}qdJRVT}EJ;K4pf*p3L^tJ_^^PdKMgF^i>fz~72i^$I0gbvq351 +h`AT?tsKfEF~%97a5uaX&@8BmN3Ci#AN#uOK0(}oYQDe)~5v`iMOgdj14qyG3Mo+7dDt{g-PKFh(v4N +^gS7kX$e57>;&z$(gXQ&r4lu+qMd;v(m8*STo|Z9CkzW|(K@5_d1pGoO3B5=(v*S{(Wl6-Un~=`WtSa)-~v-Md!WV1g+5bZSzGb#uXcG+tGJs$>x$!yEB}fy?11mUl$ugUXXvy8H7r0wEkBgOCH;Bz_C2gw(zvqSGaUQyy`jC)pk+J8 +wddb2!U(5myxE%vH-!_F=0~9F7&}^!^U@#szOwEKmWBB}HQu@WJ(TrHk4aO}@mav)1^%-VjO|03M&jv +sf+A;bqhtp4QPyTdFU5+~9`H&n39rJgGWZC-q(Z{n_F6JQ5lj_D5bN-Qp=e93Fhv~oSaSZq@{`LK1KFG2%;JXBZZ;t~yX*-z1r +6~qELg{_4W-$y$fn%MoWPs-Dw-Yupz`?QO8e+NWzu?H>$^*X~@vgo&T=+4=81evx9{qnr{Qm!I^!qPR +O9KQH000080Q-4XQ>Q(-((V8N0I~uA03!eZ0B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY%h0mVQ_F|axQR +rZBadsgD?!;^DClGAfa}z#Bl1(ow}o3Fh`_7kZqR!`nCy>5Sqz;A94KBp&R5`wQ6EOX@`$OX=Y{&itg>ID*-M2GEp$6uA>{iI5LLeN#`^9?Ncsj?{ZswGc|i%#C~Ka8iL{3q4YARwJxsBHjk +by?p_W|^xSy#0EHndf@7k3suOjlYj$0L_G~EIlk{`7MOAw&rthaaHJN%ktV$3Zewe2<4zFp!<>L^H(i +)Ex^hFg_fo`;zO**kV29*`g|xBov6ZXUTf^~}@tayeD&%HJiFX}k!5XB@p&yZ}&30|XQR000O8`*~JV +8NawNHvj+tRsaA1D*ylhaA|NaUv_0~WN&gWV_{=xWn*t{baHQOFJob2Xk~LRUtei%X>?y-E^v8EE6UG +R&`ZnANsUiVOwLGE$jmLsFDg-R1By6<1r(GO^70E4xzfNYi&9fEi&2#ZfrL=i0sv4;0|XQR000O8`*~ +JV{LU}Q2?hWFIS>Ei*9)~vwD9v +WB9ugC9IUaQjN?mwN`otPbt)vt#}1)!S8#)>iw(u)AMK8Ig75>?s3W1AKk-ZHk)OTv&2B!Xh>8IGTCW +iAiwBW@KR*&z8})m|q_Ql>)TGUjYsi6G! +z0oPL#seZR89P;_*TdV#@n6Fzn}`83u?H`FabWdh`vLCGtbN3L&Osa&aKsvLI~&UWVOCp-`uS4=OOFU +INBYp`)kSWh0N5>p!r`B@rvthPYK2mTOqmLAF=rEdiD19^KpA#-dcMHxza8RE+p0HK)gZTGAIFQ$7LV +~!R1_WnG`0d!enWmz^>ZphekD2>ankbg_DK4n-)@k^aZXouN~n(+c<_2EXFK##nf0)ihofHD^(zTfZnk{KZO9a;YL`L;2;X?R#lS;>WxkIPZo{rc{ +ArulG{G8dqa~foGk-EeBJMWx#cYu1VOHPD5T{D9o-|~PdVft$QAV!bQ?KJb@oMu8QafZ*S}KEN$`-u` +1QYh(w4_c#?b=-cQFl`yr`%@Opc5g5O_HcPZlKJU-CHI!8dQ4UFHwm+f2Pu1z0)6e5@TGVF;-r!QVtJO5xa_H>hn +Pd*2hCuU5=sy^gr@^>C`FQo$BBs` +4^Lz9$jko4`}r5<2$8L@1XR}b5s)dWiJlgdP8ep~*cANLtKXxiIBZ=k;sTyB@c_m~i$O=qW#oDgbGPH +LQ+j^hQG@s9+dfZKn-*L?xPgEgJkAMwREG_iZUN+7JkaBR9|6u-VQp>BPEH<#Et(Au&(#UuSsG(LapO +#wrcZ=14VaTRuRApq7tj^qAPYhD7driFuC0R*FX_nd|8n-n*9H5HeethfpSd?`Zj1Pv5*~)04omjZDI +8#heJEhHh5Z03a-;Q(@FeN+R<*;}-EnJ`OXCW +62(=C;u#*K|Vk5EzaA16oI~G!tj1Pa0DCYUBCk-YJtZWGUqe79F@!BFw`GSYd-&N(R45$)R#9ySWg=e +ent2X92^38Y8zg%NmFz>pZUllZ7!bWxFZ}*E9TRm^w{^Q@#F6QXBjp`s>)%z8e5%YBV;6u$Ky&Gfc_J +H^|-qa&_mnrl`}QXG=(s+VDe&_}Hw%aJo_o +Kv>fJvAgm@i%j{DE~1pOl4e8_E)wQlzC{s&M?0|XQR000O8`*~JVsK-IyX8`~JSOWk6E&u=kaA|NaUv +_0~WN&gWV_{=xWn*t{baHQOFJob2Xk~LRa%E&`b6;a&V`ybAaCvo-!EVDK42JJKh1XLeWjw&7Ubf3lJ +51UcF>pFG3K1r4_x3YMN>Zuil-T}$ejE2G9zm&o%ws~Oz#WH}GFW$VyhVL2rzOAPi?YUK` +?7vvZJHbg>hGOVC1g{5RgX^VDn(tgAa@G`iBwEu_!H+rsz5c4&=#&6t7nlD+z+FFI4@RnJGxS#9SbDg +vtvkCFsw2yDW%Y2Uuxmg5cj#+y}(3yh{XfFVZD_ +B(!O2#6MPoE4^K)c!Jc4cm4Z*nhV +WpZ?BW@#^9UukY>bYEXCaCu8B%Fk8MOU^G!RmjXO$S*2UNY2kINzE%M)=?OVaA|NaUv_0~WN&gWV`X +x5X=Z6JUteuuX>MO%E^v8Gj=>GXFbGBOp2G4emJ$z8sfTXR4I;}SDNX`toEUVn^mqh(vwb8kxL4@-#CG{!^g+>l&v-7uU$o +njI!`RZ5-!6>wW^F|Y_^n=mbPGRL5ocF67PR7MptxBi|&RyrdfhWVi)?VL*4^T@31QY-O00;p4c~(;w +9HPC@B?176^#cGN0001RX>c!Jc4cm4Z*nhVWpZ?BW@#^DVPj=-bS`jZZOpydvZKhhrhCs*gjL<_GM&9 +d-^grV&boM0%JB1r~@2^7XbA59>>NyRlw+FM&(!9cKNgA*G9-5|sUW;O(}VbD#2Y(i>7#2bv-FzF^lHZ-+Cn +GGE*x7o7D&({FQ!)U{h8#>&?_$I|SOuQk{4H|3$dcy=88rh_8cR-d~1^5PuH#E9oqPOdz1o`t7lh=h1 +c!R^61mA?=28=VJHaNP8m`#E$SB$X@k}TIe##bm<}%&k*v1mYxC>D=4<-HPqj(lxy*@(4rzo(8w?3W4A?g5yn2{N<_>^bXe>-v)EFVG_xF~(GwiQ*ojYW8 +_G-pdG6B+-1wo$1iC-#xn{DXki9zX#W6mGC<7~^&S_>h%Eqf5+*^H}yqpWYPL|Z+{jH2yCKehC%lzps +pOg?243T3En`Lo@6GnD9zGEBkVH-jqJOUrOMC1jBSG#l=o&~N|!Rn@L*W$g~*N$kM7+OA>cpcaCbB^a +{uk2Q&UU+2CPBrTX!wq^)@M$8u$l9{o#)5a620IsfjbrgivpGAW5aIFUDQtbHPV`M;a2a!Si$9!8eWu +Ip4MN=Z(lsUNTuM9~J-U#qa93i|4LRYVa@Fc}Nl%Y6Q>6CksH%9?hfyq(mML$|3wQ-}SNo7ZGQa4ZKG +Ypty14}zWxK;+m{d+bM##w$ahsH>G12$#p7SOm#vf1gNoQrysgRA5#(eFtcwdbsAr`i)xk*4i+fuA~E +%SGbB;U)6>+|h7o2~VpZ@G}Ggj1GC1f$asQ%DW9YA5@~tV=>TvY7^+WcgxTz$3-tGI&yBVHCObXo$8t8dyDr1kq;%uFo^?GJbGplo1dC$v2W=5EUz|UA +>*#i&0BrI}0UQ>}lVFg`N`+G55ENLg~ko5TMuKd^zMxEFc)1L2*dD@2+zdOv(bU|_})@44_RwF4~Jj4 +#^wjEmQnj2J!H!E)_3Xh^l&TxjS%nvX=N5(#qWV<3V5yEIat#sR&Oq086W*obQBczO@9VYp*rgdtX2o +Da?`!J`2d}a2zs`zS~RViOnQ+2!a=m)|7GET +d(lkL5G=dUe;fn!tKfa-;4V5g2Ai$Il$dYa_coW7O9DoVlMCn3<7zT}B;)^0S3A_oyg&zn&3$Z}}yQl +>fFrXPAO1g>TO$_cpzi0$lh;LAEtK>KMih_ky@oNAS{yHCwhhBIUG8-7(VB`jkHYu}-0kzT%g)GDjkY +&tB_`({%6uu$T4H0he1z8JK!71P0R#y!6omreih+GXE!-@x`( +?{;3xN8qPe+DLrJr5hi1NY0ve9pnIoB()($$H@L=6&t-Loda +Ftb!Rm%>rtxYahP#V?qE1;O8}meXC9QZy3We+W>)wufad$EMbhNX2e)j9XaCGF)7@pQbH;L$-I7Pr +x^ttJvkl2l*^#etnrBCmWrG8E6?hJ+tv6w`HRuazLg-jf41Ni_DHnZ_tUtE+j!>(7 +#7IM%i+IHNX>j}SCn;v6EKQHi6&t4ZuIi4Q(7TbdNpQ*T41zQu2gl5>I`V{iS6?%W#=H+SI*F+Wb%(Q +$D_Ge|<*PxTYrmwr6G*K2fdtH%N}3A*(XQ$g6lvc}@48F~p{W5Qf*mlo7(bNGpCIZ&|lpQ)K^8G}D-zRc!g)`NGZ +>8`VH!+-7@yuk5|~P>nSOS=A_$Tq1WI!iP)6Z@_*l;?fDCHRBLmEw>jSt4 +8e>>sdEy!P#*>;H940GX1uFVZ3k`l7jhV;_Cqv_(IC`ww8G=>G-K_hVlLhWW(*9yp8JvVk2F2m8$etvNUozzf{rXtB0H2}Jbbuw(Qk48S$1zaqQ1TS)c%B)fQ!0Y`){<`po1_JU|@oFc!|a1WU-0Y_ +J7j(OtYpN*#>u&a0DY3o>w#S>A5S96NbI{ZG{3AUuCz&^qUp1VO|tq;+a1-4Knl&xC%1)lBX=Ph(AIG +VUFaHV2jluy-SFCUI}%jcKfiG3cdl7JM^dBj^4i7?|4)(+4UZzub%@ziGa`5_s0<*)tpD!Q6LTh!IXJ +DaxZ*b*o0Vm$TP9(7B4bHf&kL9a#u2oFmQG)0EN{48JNE +NUSE{Zy(^(SUw>P0{-)-q3vPauo3!ocSWuq9?DD+k7wSs%%a+<_XXR8a@B)T&IuIUVFc +?7VTv1rU)V!cA5S1Q_8HjlPg~kXW;PP)D2KD_g_02s58ZKRR^w~gZ~adv~ls-Y(h-E#oIF53CgGo*=> +1{IOPv865nA&v&(Tl+r7Zl+Q|NH?&R)qzbI_vNVRc?cJN>hW52UJs?WATXZGZHEz{MeCOl3ahn>TeSrNSCWVyxOR_9*1$+e6FJVD#WkCSWT3<=F%a=UQ2h%Nc +R8dyRNRC&D;Q|szG{Adt5hSK#+Yo6k&wSfsP60utdHx%HlS+0SV(GdQ*(t$ptj+2}?*p%6!FVu%oT(q +>#Rkm~=XZ9@)doFU!3-S{4<@(GN>McGvU1v|+zL!IU^y*Zkf_^sHC5*~u}V76BE1xv&&XNiS0Tq%L +B4k$Cwb(+bLo+rK^gM@(ZFLEt1peMM=&H{hCqRSk#@1F%LdREz;qUx8jGT(AbP3lJOtbmL!A8qg7VYZP8gGBEHYxw +u~f1NM4}>jH+;^kRJ}dJ~5mlwK|j3^p+06#g4ZBj9$xI#ZhfP@ddSK(O2?43-ViN%e4-7Z9+&IOSo+P+&_}Ag%c?ln{J}J#+Ec>v&qBIw1MmO?rAyio$RTVNV +@uYF=2ewrMm{c&G_h1^YG*cTz<0B4x6B1XgqUw!U8ZfX5>j}_XFt*}>ae)ID8KTNipvSBF5{!N^ +<86YT0;(Qt9r=}s&8I&cN6?L&JMG#PU5uYWyTq!BYzyZ{f_G%0Ulq$M0>-K;nF=)sWC-W5t%(Z-cJwc +TnnrI?n&#t6>~_*BU0(r@)5bY$E;+Z%sEu#WH?CVW3XA0NOFNl*Uxhwgfq|){shGlgV`lEPd?i{EUcP +Nx^;ZgWz9UskCVYIu8-QRY%0I3WK*HCKiK2OkP?Fl^Og{c{kn6qdhEoZgVQ~)Ztr98 +U&6;9;K#wsBDPqZrxOS(NW5LK1_m-@ekP2MCVf;SDNiXkl>nOB+=nSLhHe*l6jBoT3Y!OEx=th|Q|V+Y`3#l +azQCV>USAacj^iGdl!llPD?NA^?TnArwl%aFz52!)Su14XbhO7B7pjz_KFg;%Tw;cUTRvcUu`!u +VqwhSp=o=CHx!%@I^1{iEr?Dam3&S3A!;0TvO&ZSfyU8seq<9w!zaS79EkB7|=9cqSHjUfs^GZaMUQZ +fSLmLi#G|eGy)`pa~J$qdlbyYkvS +sus?lVr-;C}P55(hh#$UH+x~2bq3@1Z%Yrlb>k=0Ltr7eMcFQS0O)&tN4~_u{rtj-!3j|&0&EzS7x84 +sXZ_G}h^Zp|C8sB|TvHX7gGw@zPiv#|h0e*)$ssZDx&)_B(4c4j#v?-r$kZ!#i$1G%jUI(rmOEbMuVn +2*9^4$pYoEp~JLjytp(#Lo0F>}BRM-TsJ3pyAGX8{vDe;Q#hI&bl=JXZjh0+fO4SHKm6gZ6X#Ze*5ET +Pj{r0^p)q^oJn9=TByd(!Na35*<*#clcZf2l4`l9slN`68JCkP(%rdWuO)63Qnx=3Ih5|39%2HzSQ|u +=l8psQ82>P4o)Odolc0h)Ij(;l1yO1KjJI}OdShrFXGoeD +&-R)8w!uJ&$S*bL^(V?1d&B*T@FF%JSb46f&SZC#+wicCG`oqX1cFlWtkv)tfe}TO@9T;c_JibEM=e_ +7ATa*AQ5Z2D>Wp&!6k^;xkc|ab-lZ2T%mtZdtTynR&gxkx`6ISY3R-iT{=?nQhRpsMudsr#XqECv1eq +|nAhqlfjRCW~I$mF^*urnNIdd)qMvL5s8intvMh{1)@Pdiv2@msd#^mZ=f{f$^VRbUG!W9iq!^7He4=Y-d5@2Ob|rd?P>n~ll6{2HY<8>l>( +*W1pwGA)t)yY*yXfJpqrgx1ds34sdUDtW4HT-fGyP||6XE<17ISyFvyi=S@1imm +0yuYwO)SQf8Qy&&h1HFqH3laDc8MSQJ3xu~SOo6qtyF>fawV$m1^h6onT_I*5pGJ*8Cexs}&GpRm&;i +-ayMDML%1QIq-f@~du5`GLk!Tyg>F~%M5>2=nIAvx}a~_rQq(^qrOm#1{bW97$x +*4vv4Vj>ofdrrs7l@F#1t-xVw%Ez-BPGvT=i2y-l^MkJwl9YM0|;v!|vW)r`A|w%o@F7_b!1)HIha2V +x3&95S+&p>77>N`4;uzGA{2AZM7QKQ1T$9(>*q_BY!=McY9yaQf)m?Mk46Fd_1!DfxIfm=z_8ojojgW +`*@()!#HfuLuMj11P}2!5`uYHk4=k-Rqk}wIw#g{YtVmN)UYi31GC?v)kTzaKsxYE-NenZPW^RE{vV$ +DAs60{EoXn8(f;DQk*|~iKs3cH>(ao{CgCClfM*466{lWd=xA}VOA=SOEIh|whs9%LITgj0%qcQnOgq +pUbh?R|4N7cCd=mi?fGmH2TLwo#OH3~U0{@*d0FFNZf8b3TE_#JZ76pJIOC*2-H)EFUEIe6;w-|0}5i +Uf!#K9L?6D)y#&;b~Hpb3_kc(Ozhl3+tJ8wT{p|56!fudw+2Lm6=F*Jhjg#cXelix@&0_a+m->~u1L3 +tfN}6`bw?E(bDzo9s+KBtUHiHnxDbt^xQ<&1^4zI=k9|HD@^){`7d0T_zCAN6_nZy2xv%v +qOfeYT+{O2wn`kBE5dri#;p4`y<`P5DObQsD|$;KcaPwh(PRtJLJlQh}Kw$iwo0VXr97o>>a>!%Z9d- +Q~cbuRPB@jk(0Iqsj6^=O|`K*5gMocK;ByNjOT{atlZt#FUW1j4lSkl{gbQO)BOy-c;r$vK~H<92mAIHw#kt;Ag&aQ_r +^F?o@I>_+5)}0f54b~vc!IQ`@S$2@3g#z2Wa_n{JfIke1C{0;u6*4sNY$*5rCeSb2 +#3zE|cX`Tiw)U%&suJOO>I$@5Z3vjZQJ$5pxNed<}B*tuMb&(vdGZL0frv +`=m(#*a%)RanPnOolXw0lo`#ZDrdF(ef45uIN}YxnYgbVtd(INDCJ(E2Supadta1!!`x<4cB +tnX*Y?BU`0;O-->!R+*8svZf(jJ)!e5ko;S* +;ol4PosbbN&BTv#ysh!XyEY=3BBP(n2k?jw+X}XD=)*%O5QSV&=Rj7cM5&dB>oxJ{AlR!dY+LSy3`*s}`=r`KI3jFZ?HK^2Vcaf*6?dk9 +;u{p!KuyYbgKSb3SPN$NoQY7^Ru7P)xj5k*RR8=PA8Jlapx4YEE82Ceft@AdbKn=Z=P7qBsgRSg=qtN +|)#~@aY)2#GG*ecyuw%=qvn9!wVq6-2m(vY%$g;^&1q^#KPhDwVn;|3(g1jJft=$;4QI?6N{H2E$$m$ +vd*H{A)HtYd-_rW6!psZ#+HTbG+6=>z`{rPf?}HdD-=upGSL&Cv2UI;$}jWHOzUTZZj|s7`YBynl8_M +bbAR!ZKVavltmx{8KGOHp=?qB!WgU3bUpZyQ^B@2_@Rk(~==s?;YqK6`qW$THq4%_C{gC!V9(ovD$JOc~+kpBuxz&E847Wk=)_7dny<*qTdzi;I!eh!1%1|*Gaje##Zj0! +VS|@Sz71uI>n`>?5mDLcfA63_Gw+%A({&jutYg_62oy@ir6K5lxSc3wiWvZ`NdS{CCDT=X> +gW5LYgGM6nwkzP-xqdiHT5@tcZKaFy7|*_uI7K<67upZ_hdbg3lLX6J;jxxT*t$V0)|~0bb#+z?jX58 +NfHGHeY({L+YllRhD&OvnCOsqJ!7!+}6W7}WOG9y`lxz5WMxe4gn22{*U{&Za8B2;tts+0z3&xST?wL +@!PbYNMu9EZAljItcx*?oTc1xIRs=loY$c{$R9-j)4k<1jDC|B)k(L6{|4IZNdE9ym;$;Q5kcTw7RmF +o{2qQ=kbXb`!l6f<<}fm7;c~ +28UXX{HC-f#D+dA9|bkDcP2Gx6i@>I!>S^!W;9>q1|%3655bzOR!hKVrUld}6k;t<$}w3PwNK>m23Am +@^3v_-dY4Z@P0i;>8v`w@@mruWEb5v>Wf)x`9Q`87&J5X9$N_4Oy=?aqV0<>~@K94N(kthp#=4nu2ya +$Xj9ux$bdy2~-yeqG6D{be^vqK6JY~XLqTMkRI)K6>QLOy%tV+v|Fjd$srZr4(z^yw?LZ1tDCLgjf-! +}xJ8ZC5e6UA1v#v877xvblQ-EcGu|bEAEvinhD0LHWKbLPo#|%_B(Tq#U&aNg@szdc3 +b5osLZhyrOv9T@4Hv#WO}TU3ZO3yU(4*IGT`UD?WD25!VSWs~}gCv>1f8G@I>&1rHd8_g?K?vLGL4oI +Ju0nBdkNA>OyKzd9?f0M#Lj^TPUe9!i8;S*lkP=ah_%Dow~q9qP+n;hwQy4_KAc^BCb_&7UPS8&_BFw +1<7D$wgas$tlnK=2&K!+!WZ^_miuZ4l1fB_)YZB`u?fJC@H}^zQSbAp5@zh?K57>Ob{L%tZg*y)T&Vr +x^O^7l$BZ&zghRKrJ%c8?8wzx>BN0aJN%wy9qwij6x=ft$1X1 +(T3(Cb$GemlbWulERO@6c~dq*#{)HB-;hSt2TgH0ue#FFvJqH0J17bmKBr;-h{7O1EAi}S1lVwEO8f__+3f@{R*i>8!BCd7x9ve!Rv}ixHN*nz| +``;1hs@(zz8vFLj+4!1s*T!C=|BnHZok+T9!*Cn9~US}*J`5-XLG>KA*35WGYK5ozZ#$xy&90zD{b3v*Cb$5yLGDYjQq<}p&t4fIXWfl&cE+|*!67txCYb +lZ0b!K(A7AVzEY!~k>sP;#as{0_I4tfuS-BsHGGIWE~%1Iz}a!3-)b$v-FZM@xx;-cExK&_=zeaMQH< +_Q$`sV~X6uc7tzfS=ToHZ8|I4@rY4gygkZ$TnIhnvf^1&k2kp)vIsr;!EI-sY!YtmyY$> +?g?1cO%FT+13=~1Kb5}d(hZ}vzqBbuNf)7Px-(~wt!=opwQ727KS2LW=U3m(&MSCdlGk@H(Z8f_{V<$ +s!9G!JB1NDhK+jYgT5MJz+es7i*6OgH$t?qKEA=E>TqH2B!G<7{Wdvst}@>7;6T(vBL`QmGB1^VOS3e +Vwh`5YOiY<*4Hy5O(HWo64{qR57X$Fku264_(sYcj+yE0s&2W>k0}_++_}1;Zr>W$VoTi5vWagM-)n@ +IA=+igC(7`CN4v3eF}1zN)h#OBWAy##mnBl6DrNUKY!FrAWU~UDI2H5&9v-XoTqV=3!;FpT1ZIl(@-r +b$E#$DUuE^qX=E+0mVE%?hQ}bjoz{vvjuY0Rou^T(ra}yIy*yLOJ#7@uWywgZy}~Vs*g}Kv-|hetIw6 +IpORw04^aeC%$O;PDwwNw^N_Rtz$b89O@6Dhij~p4YO>4zS?9*COLOL=Ut-rhWLcuGanVPjm|=tAImk;yf>>X&X3(Xkqj^W7|PS~xxjfp!w4 +&s$WmEwuEQiFtk4yJ(Nw9oW?46XJmI<7}tBpVGY)!PoG=HubPs?31gN<+UQH^(&wM{rc-3BE3Lv0|S| +GueWDswN7|%IW&4;JJBF*OOoQC^0f-MLH)zL{!_i(POwOPUC27y}-A2?HuK@MI2hRX70^7h;^tZaK62 +2?4&mrc6A}hyn?-qx2H+ThTG}thAtnpq@SGcH@a*}dx+t6csmgHEM{x+2?-u2jsayUbDTbKhu#s&gWQ +r;0X}9tq_5$G#P{oCyUyD9w4M&kDJ;V)$A_0=r}+d0mGrip+%h;uTx%6-Pu+XZibBJP#Fi}SQ;txr8R +s42XFN;_p5rxgZPrDzO-)TDJ80gXAKBU+z036&N@-!~JCh#?WXC;%VGReydb^9)9d$uvJUC^pk(o)vH +<1z-M?8ctkUJr;q3(U}S?Upk+y+_Q4hIh2QTsLx2~MWYtl7D_()Fp;iA~w#-lMngyM1RC&jfHmt+GlQ +FEi3yD+J#IduQoSoC>V4z57JIT>|`{wQ7ga8#rCEeTdgWAyBVN;xGF9C? +vQqk-Umz;$;U3a2lK};ZZP#5MRQXFuVxb0ACWAB5YB@$Sb-D6feeXP;`;hFtV%(0_6=fJRU4Xut0eO0 +Zjg7s*vC=3xehD`-0$?X+oUw%cQ!q1<`{v&ij~Dk2dTG77S<34<#SkDH_#}EZiqy`L2$<@=Q+Lvi{dY +u}l0wpaoy1U|8aN<*POxEN#>TW2qS--YQ>zZiC#**F*ceBZGc7wBL>F*Zmow-*3>s&)u3>!zlWso<8l +6wicd)-5!3d{bR3DO*_(4MMF%we(WB?jSO$0&+me|rn^Jo-)zJ6)qZxi^6mM&-I(nSi&J@)FLHc6T_` +*XSzjef6%uxVGr$i`INqFE7(9~SJAKzTyrNkXVhG8pS_9%iL;{EQ3@GI>sBS|QM +|$=`u%wHRB$4(WpQTjk-Z92)#M8eDbpvXnk-%$^HK7cl3Z=&-1YBk9WoqD>0tQo*g?BxnglOd2Bi_^; +qTb1kj8@Qm)Cd%6ZL72q1#0A&65;xjNMiHJHJ(-XS?ku`rvrFc%*mzxYE~q>r8dXaBtBNSv$vFMV9O^ZJaOS*k@lW}?;d?wB{GR@1N3;{#k7U&3xi +*GjNT3x$D&t3%{PW&Ri~$p`SnN*a6(Gug5^OA=MQ2wAD^%+J+}5pl$EDWUtunkI+0eFr>7&rXS+u<<~w^?cZ0Mg}m>8)hprw>=X6B%SrG+b1_Z6G)V6^pV{9Y(baqy~n?zrv4=q^WS@?548P!7xoX8B?wF +*FwMX;4PzvM5HLeBC_}>tilZ1t;RKA}4Dog039^CTmdUWC8U%rtI1PXb01Oi^u!>*EV$dbOBu2i@kfj +&I(B$SVA%=;T*8#EY+5qFriW~+nNKLT?gao>*q9w#q1(bso%;MDZ*>uxHq+*-_l(j`&X<@zWvpR +$2RHZVb;s*)Js?OUCT>!bYDtn&($WEFRTTA8qx@!<<*@>AnW8&Js&V<3Ec{LswGs@XTg5>RjUUTLGfI +Eb9X+=mYbyB)w`Uc-)QefttzmfFS`_=DGJx9>%|_Xng0X@zgBfZLH`C=>iMCfI8dbt5L9LeHIBI2e`l +U_Mks|e}CugL4WrC{?6Njetds_f7c}5Q#q26!V?K$bfVo(33_1r8%_C#J3l@Y6NyZn&d+E35+8{qZOv +Uz2K|<#GA<8`8X0^aGuyMrAEBL($}&?&f}i(s&NlABthz0;tG9KEYuYny*tYj()(|=~?}dHSc&N9t98 +FPs)TInac!DR9h*Jxd0{UPPWiVW~)`KQBU?wIQP7kW$nbUzrC2^Kl+38-}ornblS;EOx!J)gj)sCuRr +pch(nhDFhVW-W5f3%YQ3Tsw*F<&Dl+BxL2te@AGVQG<9?j8G#eE(<$kb2tbIzLTJoyB5}Sw)W9Xm>i^ +9?B(;9a0F9JASx=??yryd4IhZ=icy8p#m^Nk=xvEh{zHPy$5Pl&p#sf6HWyg-a6`RnL_x5p4!SrKLWW+b2`|YPZ%1R$c<6UogViVsTOGiqEBIP=q6;*7}tICPtP(+lF4t60!06H67HgQ0OUno_5HCit2QoA{p?BtQ$kEbxmCpuZm)+lA_mRBT0~2owl`tqO_MnDht`Vs0i>9W +UZ3k2kLc_5$%k7d(>vu>8kUR;^<=2KQ+VFW$4A?*w%iZ~4SQ6=`G%4KW*kowRFL(PIIIG>XPLmiKJI* +R!L4bg_lkMd7}_|5F#+pL(`RHK)H;1RfvMIoa3f@R&oH3FiW04()v4H%AFn2zHH|ujhMJ+o9=Gq6ET8Rs6?EM<^mj1-*{}W|y5i@qPJcM%uYD_nEV-aCxul#1;R4C@g*${=l4iniX$ +P;-V5wOlsV@NzY%W8-5^u=GMnX&X@q0OkIPO2HIi`FYPMo+bl9Vr}C`)rRvC}W{+us$Pz+jG +=4wi^P%Zs-}RqeC!y>0a7Kl1l`3Tb1>lG#B1iF*y@eI(ncW{~K6jm%Ty>5qb%#zg7Nl%>)K>^0D59${ +JrX~o~E1^Gi^{6`+D{+@@Lz2%|mWQ?qCXIZRscQu^Pa3PZ|6|Yy;;6G>BcZ=D< +4u0Bl71c`Ub#@vebYQeNZ@Vt|W@{c43{RXTD?P;pVRi3=^-f}MTH{LtIZX#9iAL-ZQ)s|kYj4<#Tc1= +MAx1M-^TlLrR*+ZZ>7x|4HgY+NXB>~UGrp#rTdAzX_;5eVaP9bGaFn9PTk=Q6G)QUwH{Dy2Oo8y|Z?t;nLM7=y0I4Ef6kS-)L^a7EL@=PR#Ge{}F`$PhR#jnEc0c{u;%Ax_GeQE_ +{_=EU{$fwRc1E%6tf3WuEbp|9}Hre_d@FysAEsXh|at;f0q;y6~0+;Kddq0`MaE66%d#wWz@V0y>7o= +bplU%$UHJ{g~3=l`erTF<{`=DROBEz`x;Ta|ec4N=FG|@!JXhic!BZEP`NRGO*bZ`g%vylAeJgukw_1 +*|CD4{}RQ*lE^wFe}&@ai62|sIok)@ZqQFBiF)U +q^;r>=ziWv{NWUlq@WeAfF#2YRjq#_p%hyBy7&-Ls4*laC=${T9%y-%EW6;LS?kewg7t^}Siag6Tr?| +bqNhL-TIz?xKtVHW37^veeNFiD~gxV&#uMpqL9mEYW3HYB1qlLZhud|TPgk}*md6nt_-)NU1dkza +v!#azI*3|iR|1}1^K2xbV_i&mIX6OWSgggaaxYr6X^IZ8>9&+Inc?U4P&EES%U!Fip-A!)BK=` +95{JwiwV{IiJ1|(I%L*sNl&)LAL>IRf-|_3ZEP4E=T+CDx6Pco +D-<890I51?h2i<9o<@QD7m-tvQ$Kt{*UHPbtZ)#R-_Xg`AYn6kH<5Ya|;^UJN+lJ=ojzxSD3{B-LBGv +RBu=cC?=?s>nl3kOGvnkK(zuVF{;v(H7t}Ki)0VS>I4K-WO+!WxGtyk!EEkII~Chz^(h34ZFoN5vILb +LC*;xZ^50malgl$q@0E7BqfiL0g-|-xT48E%iT-{t&c|L0bgczKD$fZ(r;K#eZ_4pJLz?Lf{laF& +K`ZFhNr^i6SILF*t+ZFoobK0n=ZWg3_-o?%{ALK>;=y;1p+;5O{(tF>2~n1PU;_Y{8FhDD+Eg!^A5)@ +&$ePwP}C+$~t^g0>Nu9Vjv9SbV2oUC1zRn#eovQeuHf+Szx^Md)w|mSyTW{FPl%muL9L1SR(YxW=qLy +s|aKvI`HtoFM}J?%+e=)+q9oq7LGwTEM6oCkSWApul&C1Pi~*}Cx&oHGr~+gb0Cj|E70iZhXQQ +>5r~e)eWF}5obBksi~he5AR5tdHwtJ5o8NIMy$l6~YO_F~}1w-*a}j*GA*TIT>xR^p +GDlHWH;2Dal>{`s*<@+|(`cHycYM-BZu!~Sv9(7!Y6AGi63{$|9w7xMFg5D)BmFK=lo&Q@pfbPK2mQg +0{aK3E6l#1cCx&xB*aqW99NEHyvw-RDj@?SSk}`D_v-?0zhF(~iI@>nzCPZt#v!EhuQ*%?V~rP4i&xt +7$vg^)|gu!g;&eJ<$~Rd|f%Y$eM7u3>m~!Z>*3Au(jO@*$NuXLAVGR11J?aG3~bjAw}os7LSCMhk*cbI|`ku6?(s|dF&Zv>&gs`H7UE~n5XhKer@v)EfH +%E_{6XF`OkmZ=l`p1{vnPtC6e3?jJn@v7qPd!$MrVJF^yu1F#lmkg+KI#e(3z$b>}7{X>7Ic>4QE+*s +ZMgYb>fmPkWd=6uY}ez8WSZz9vq4NM{YVcl%PWP%aY7r$^`-lfjkbsu2>H_r_e^+~>7!#Xi4go|QuBS +kl!Yz|~^R1`C~c$`w1W=>oqc;&xS46rN@nEnQEc9+Q-!?jBuDor_g!(Jf6yHKe;pS{O2VavmvbxZ!<< +t1+6;l-@r>Jd{_p*^s!{SBIYO*LQ8(BLy82hEK)akRG4V7VR`Wi`;aM>ATbS$snH0nir5M5{Gg)R1_u +n)2$KX6-$ic?6#I;ZGPWBdWiF`N-tVrf>?Z +BW{Yd|l8p}^qy)V`N@5A%oxzHcL`SV47UN~lO08NHqXlD7%HZVrv41v%X%8(d9Cr;oPPJRVVidl>zu# +U@4NUtJEELeib0DBRn-jcchnS^|Dn0zTBOnm-S(kd_|avCCPsw>Fa3t+KvGX6%2c+GL4sR@he~stS{(;;Y(r_xMoBx2quxg +gl7AK=BL*+cwxw#8^@cioX2jfy8d>1`YJnA;PU@2XnyYd59kyBNT1L3(~taB=>3=Ayp*~Q`BRp$8d_>aNt~}K +qkPnqwWWoVoB-NLpa8-<0rpfvs*NemsyJQw0nifIxzVyu?0Tq&Zy125=+HX2K!7IWWHbJ_wuHt))H<+ +m@cl!>@+9lwI2(j#tss9KLp*dnnTU@xpeDJb)vQFi5gmqhxhiKiaD)sG~}?xp)7W(i<7N;b7)SdqKNe +7$>|u@<>6$pw*yCB`qKqT`t#~iYKKAn$dE_15j+V8=nvZwd4KP>4X_Mh=uT)t*1oUl-La6LgHTZl13U +J(9p8;HmyJ@xes=z<@9&+a_K0-yrif2vx9Sn`Dl(_;Xr*lieCD}Sn#u6iV%I_d`28b3Z`XsxZIR3VA) +`@pwXQV}z!;t{(T>k&ds1rupp|E#xQ}!++zz)jdUOaj&LEgPtglX|(y@EMkt2MmkK~a|!(I+kuMS<IXI?_9O^{_AvfMXlTl5+^14#vId(F>u+7)C0_CqV#U$#^T|l#l)xz-a_guA2RJn%1xuuG57xPdm_g!dSkj`gx5Tcj0L9ZC7Zr^az-ckI1Y6cKtIEEKI +QkCA=UO8?y7grFr`vm-5`_;1vZ=XD#ZXz;mMn{T~3OROZD8u?uf;`Y+!7KY*G4}2ohRzitSg6vR!@nD|BR1{+4UV%t*BnC|MMm+Bk`ly*nJZmh&ywzq +UFfc@fJ9q35bnzS3ApVL;(JA!*!q<5bi4eD;1IbD3;qd6=dHXrd^3(S>0yqQwo^^zxh~na_r3O;T%8$?{udh3q7nT@t-<#UeR(=)SAH05kP!*iNGR`mc-T9YoQ^fr;Z@nunI<)gmagq +NK6Pu^M{4l>VYvvbu{e7ou+v!W=)m>x14X~6yeFod>Z*25qf(Wo&{|9rte;^&KMH+TJx4?n23Cso`+7 +M-!&mZ40*w|4ppT@J>aMrC`iQOnreP6TltfudZV*UQqFrIUF5XJF;v;F{$lXY5nu*qM^sdqKoFokqbucT2I=i=-);^ClOM|df1bcz~Q;Wc1p3&zb}s@K(Sc9S|iqVzbgsaMsZ7vX_u)>9wJxVD1f +b{9cf5IX)rbPf*jr*?%5K(4XI_fy7n**10G3Q{yDm%2Q$28=K7`Os=$$P{56N@sKZK%DDIm_eu~-Q)S=gW1WOMT^0KFeU@*xygVTcheEETd3-=Xl>ihrWoYLx*DSw!8(A4x{_-ZsP{e8K +p!I3Fh^kMQifT^cRX8E@xjwZz?_M#|e%&S*@RyRZPSz1){X09_*U&`z%1~)uNYS_C+qHXr+v3fCu^sD +86c4fV3?FSgW`m>_*%Wy3LESKOx(g}o#4|!v6EZJWeY7Ul&h +yba4_m8kLw7|P^Z6-vbOUL`mV?q^n0vKaPy4|ADf@dhf+P;{VE9j4-fr@nLi!&lSd5%QxvhHB!M9aMX +f&&Y{f_z$0-~mSKhf|B=)H_-PT2nY;D6UUV+)}SOf0vZhP@^>qgoY=I*l&(~k}#Y^Qx0z +GX(YxprhPWkTB+&C34}a&J=#_kO4N-_Y;Uvn$e)dw0}&Z!1!UyO-ViI-$14vWiMJ**UBP&BR;)mK4>p8_O(1b#?Kp1!6e6Hyr +D-B}JR63Kn95cXB&o{Qe-EG)G9P0fR=Eyw+VhRH&{e3!wm7mbrQ<SCaGxZM+|03ZV7F3l9>LmG$dGo68^z&H +TAY>v#07X?;ZKH!h14db09MdEhz?36#@QJIa^Vx$~$2+!suK!`J6g*9s24+NVeTuF$2SkaXg2PpFAmr +NdjCxN6Up1BzN_lv%fl+k;kT@B?6|4aQaybx~nDNDj!wGq|^LlKr$-eP0?c?Gx*siYk_6W}l3d(>tZA +(5qSyiL6r*Fqgw=c;i%jLIig1np(2n^Yt+di{okX?TC4~lR~EY*25EH1_MJB#Z9G;EkF1wXS%P!FZNq!e(G+FAyiCc)H>_BcC<@SKe`>{>n_*z9=sCWXSVSvJkLO0~BS1}TrKqf;>EE~`?4qKJ +4jNVJG6#g06Ss>|-HM}7ww5$OijB2%~23-duwrq}uzk9?J9(JAszL=UsNb20xm^4L +>3j=MXl*lj&Dn>(qviN}5a1ugypIe+(0Jw8WpGYkinL3;aIO8PVlm5`s|u=~u$@VSvgDl4gAglJ`Vu-~d0~ss&Sf2ZU+U51EhO>*v +G%*7+;nvyLpVryX;iz8{=t){Qk+D9^#AA3|*sb+5$ldyy21!t(Ed4BV78Iqa%vkXgPj!vj8&0D-R&DM +PMYrgNH(toVc9c{E#DWGwcmS)GU{)s&B;8^6`bjWe!Q8jb=fx9b;pzz#qZ4U8nMAj8rSe9`sdJn%3ik +K}~jlId}O&HO9Am6`g;4_J{SUfI77Nnh5=$$b}x7{DWqJdv-3wv3}U9+`)^S&+g|>sik8#CjuqER|bo +RR&Y?^eNNnLk$J;a!K$*6%9O)wlukhi`nV0q)5&mqZ(;0a-=>^$A`sp!n+wX_#xl3Q}x_Tso0@2`h*l +N_r#swN&;x@aBWuJ43oDgbpoPr`qS*5l!NWuZr60Z9mL|i)$wk6W!N!!02-H?r>C +6?oSq8BdRF%dy%$@lUt*$khk~ITal92KJWU#lOlrkT*JpZ5D!D>B5Pk#NxcCBf*B>O--V%qpz7ABgpn +Z}ihaOh^`}+d+7fCutlYY^5o4z?eqII-BlX!0dq4B+D5r3)uK(Mx|2S*rIUp9*CDj-m#Sl_#mXAvuws0zb-AO3m*jvpz?fJ +l9L)~2BaOQx9zyiqpzQfFhwIu8|P8LTNKd}lJ<>Et5f_^%An*ZIO~SDjJ?2v1F7)HvOqKq1V5IN +{f@1Jg+69XJKi3TOlcoBY~v@=azsl8-62YkuLN(!C;n8khn&pW;dyw!0P%boE*Xs#O6o=;8cpvPpR56 +o6457xI%e00j4hx`ne{6h-%~orLGo@cc&E&L+Z{uIAWqX+IY<#B--9ddUMfCRH0q_B&N&>uN8feLRN8DS +X2qFBfHk02DmrW;?B6FmX*>`dyD|c3SAt*4L%q$(w8F^w;1hHqzC!GH_}@<6NJ{(~Jg-&-Xo`CU}$Tu +?V+AYA+aKl(Zw~lKFzm)Q6e7egV~W;VsTF>!1=@jga?<*YBeBy4k|>Fad$aGq>mM)QN-7jYr=<%P%{s +YV*mXx)p(M5j#_;;Nj{}y-MSCe?c$$K(ofez=z`T0L++V#UbHSy(P9i1NY-`jk?jNu8MCRUph2e +m55hIOY(D&D|53p9r=$KFvi*F-k3kzofFMF5AcjB?fl(BOBcIyZ?tZi(wDEc(*+};KB8xYw9fMoD6M^ +mJXmTs)CtEy?|%tg$)eLR+;MMfTRMbc@zD)4FV<_Zhh5x!2ebTCWiOCT3fY!FQdx5Z+q9*0 +3!Kw_JRLZ`04z-hGYlX0<51rPH_6I=F>!6txXrZRPZAOH+V*mw1|NH?f9~YfQPuZ^@ryw%3-Z#lNZ3$ +8~x6C*F)*Twv78%rc +KOODYZ4+SqGTQV{?*{lOsQc`0{t&lqA0qoTZkx}dluoX~UXgHF4= ++O1m)#S)hEj|K%}H8<+Y_wnobVAG%<=m~-Ksg30GxJC1l-L9<SLP +*XStgM<6C8&H(cv&&i@CDsAAdT){lKalsG0;`X#ND72LGaC`$>tG&B7EGkhS69Td3*+~Jkj>$*tOrP$ +)&tlM_y4>D8-yaW&E2?vAcWWr83~!?1mX^EE5<|_)B@?EACFMh8Nr2=qqh)lxj(T<|hGf1}hjgi*AjD +15@sav!*!QpQW@cg}O6r^PEzlmD+bq~mTXZs@(uL>9AO(YxvedV6oHiPKx+2yrXNfLYw=Pd2hdEti5F&dw!(~8p7rN}9mUiA+Qha*9aZG&t)C)<)$$af0@o +sybZDi=bj3XrfKLcY--8zjbBVbIZ?gkGjN6cjMK9IYdUDcs)+ziDH0!LhUDN$H!oKz0J7I@Vpgq&ECKxj4V6G$DJ$ve(zU0+<{0 +$m;sk<^t}`CJg585)Ne?W~I;>X~=ggP=&Nh30`K7JOYvAQTMta84-sh7pFM?y}@*}Jc?9&J3@Rg+I)p|~ +|aA5GM_Z9vK7+QbjX_(U3qtvGX)9J&L@zbz7SxvNM2jmui>IOC`#z{L5Iu`VI!4!-DzlVO~AAo``T5v +SsEQ}BQ`7NWmO=BiY4KLkb1|1JyO&LEm#W_49F6S#UI1rh>#1SK2l}LR94^g{-xjzKxo1tUkWi>d&5r~zF07p-R;-F?e8DL-C +8{_~tZ^KK!Z=RiFo?jPc0R;gRb&$_BeojI8f;<2)|apbNFcTKwx_!$@YYlS|4w>_BsPJwc#ot&bW3g_ +d&MPzx9E?8w-;;tg```Mh@xAP4?(wl9`w7kTLx|24$+=%TSLQe55_hT9Auwa-;I!?cq`+q7eK}Ri8UfksjX(Ui4bqv!+$L7Jhvjnz<%$$KeNV_&b>Z_*zCyNmAMGO&qwIw&pIFSH3I +vZ^tyhLS!uqPRla!(ZbLjX@MD#SYd*AF0{6qg@Rvr0X%mFm+USiBMqOJCL7S9b(e2Ql(_on4UJ@&S;KEBN^+>NuH?BM|>GK4|UG(bOr%KYt2!!h6%0NkrwPO@977C +}XDk!(NumPVrV*_OU(l5v?u}ioDQrNRf?CC4D3|=XX9-zt9QU_(xPH`yI1IKE`F`CQ_rcLjrLM@GtgxVYdL;smucLQ6w^pZAsd2l#Uy5E?gre%Gqg<{%?YGiBs4rEJ`C=B_w2P +3?uUqgw+W@;_9UkIpcHk$9OAg1_f5Ro5S{yw^1}Y&B89eIh(L4t#B?cnX*ezMfC;#nFA@;HWMBc0hMG +W#(vl}=tm|XPaX<;-u-a!kr4jX2juyxEXR4G8m>0Wd%17wMc|NHHPAL#UhK-xb;!oPXo&sg~Vpr6_th +^>1b-v-YR2*e-^LtzAlAPOZR6vHWk#Hdf(09VY)c5RdmZP1PSukeUtTfqmVHhA2iCj57l?G>fZ`{|Kz +gE(T(UaZiy$&Z4Yz43-s_=ZO4#}wEu(H5gy-$S<7qoCjAGf;RNHrq;1=(b->Zuqv%n@3wi#tNyM_t7q +(kAYjw3#N7trf7Q$P`ssQHXy|}#nMem7257B*|B(YcKUOd!)pga`x_WCkYD!3%67X(r=^X*T-qPQ>qaVf2fIrNRy> +y%K@8ax+W-w!x-mQzm8P=x4I##pKl?qUr=l+%Usnuu-A}o;itPsoYSbPx*=v^<4Mo1amAz6OFwZ1B(A +bnM27Qda+BdIY2j)L?EwaAPHi&S*+X^y3L5w$0J#-L+g-mYN%Y*G!=VB3%eE30+oc2?EkSc{k&#tKl~ +WI^g)i6wii`CycZfpSvkuc~srQ^S?1hqEvZvFy`O&M>T(2I$I`!~XH=8q2xKfYe^G`sfX$tHy1RQ@!t +p9Cuj`>xCKGcO_1w3B2<|Qdwi!yK!)|9LhW@th7gNIs`BZ%jI@DmsbX*706JfkU0R+k(Mq8R;L#zMNc%h;|Y&ipENw%K7%z$v6}9q +WlQ{Il9w{N;)JVgvml%MR(%`XD`hL>aa1cI{DIqbifhtJq!tyIBs=zi<6xDlsqUEVRF=?Efgjhz#hJbp0z4kr>e={l6UJRRnJ(AMkXQHowZ^W8+tmOhurh*|Nt$eEx8f8L +r6qDqx?F~9)CZ!qESVD>;v38LhG>y^4;8UMQrH=N)jg%PfQ*4H2NnI1PY&aQ)l1Aco-Py@UM)BPUuOn +gTKbhjXk>AZ%lHtKBZjcP{=x$(p(7tCbsj%CEWbQtEEnZy(2}bi&4cR-H{miIbTg}=tLN)TJqh~Q-@H +W#<5_Y;d7{WU1~O9RT4ugGMM&dFj|La7q?zHh#>;NNS@KgkVPs^Pr%XA^^D&H0Q)U@bA|r+6k+Ju;0g +*K{gERhvAnDf~erLz~KRUrTQ{Ml0@XzySD1xmpiQp&+qtptO6uQz$5(CNg2Z^94j$*{81pqAGM!k~F! +EZ~ZZxY$@mc^$&ym;eX!35eEAqoDQ_`EF;$G6_S6;r9*O&8r?MEJ(?5^QT<-xSpLZop^waUQ&pyFA#GaR=|YCK}%?`Y=kRdx=lMM +vG%s%LoWTu-i!TlCuwZ-x8rQR9kV~(8U&1&6~!*k$#qVb|CxcdlMk}BOrZJ~{b~ +KlXYW+aQLh?NOc88EUlU8%dcdv>OG>ec@74v +i?tuKkTo4{QpNz_!Zax=E;5ncnDufF9oek7^b%2^7a2K<`Wo(BP32jFiH~ZhELPO$W}97L3pLWo0@mH +q2^|IPwgff$(G0b8i}{EKaOq^Yn!SmwyTV%zf)7 +gHmKeliNWo>D~%<>{XXNZU33#RB{l;P2;A-}+^6N%kb&5z;wfU|_~3rA&Gchu(_6o2vbzLt;l>{sF}8 +JOj`%l#cgb;yNF^4Yfg}`JRdYgzex4pKKV!r{i8nf}3nnY&4Bw0s!85e0i`}%`VKGguwI{F*fU94p$= +`_)TrFfp!n-W2Ymwyc>rVXsi+lYyc{1R;w3@$3P0c?^vaFPOXUvrb8O{Y;8FTsT9RvULmVdot;Gf>|u +lnJCpwwLbl5krS5fPTrJ4>tq)RVq74p&ItHeB4hL=4`B|kS*vgEg8o=;KR2&Pzu3X-_R +)w;!ePCnQ{;jUI@>WZA>xAPe=*hy6K29IAEe&JMf>d#IX%GFYf^I|xzv_w`}-O)-smx9prgo!vA{OX? +cxpClo1GJ*v+q8F3U*z(5wpY))p~2ifYgqIw=IX?E`uGxiir|Z56&v^A#@{b+!(0{{8r7QsF!`My`73 +0)(6hX_#Mv3!YK=XyM76R=wxILF*UD3vYq$7lE`0`}TtlJ+&DfHH&?qqY*mHa*a4SeTlWN5<-`&EN$y +4No!syY%*(Sn;J*%M4c6VNrpPciZQpX#mHh*TrEI+-oH39%}AMVoO^k8r5U7)ov(LR%I0hr%uw+QkV> +TIbRUr!d!2pw;T<}W(oz~&PZ!_*if`uGKlzkMGr>-J<1>agW!xjy%&@4^Si{wV)7?p;rT2-_Qvs_Du+>L19w8czR9c1-93ky?DZQxqmb4s3abp#5 +Cj`I~bQSL;)a9XvzrxwImDGD#IoWsugPw1%%k)%)qw3Me`^k8}_#j#k>G1-lQ!0~3N>Xo=u@7tr(%#q_vOsPrrLcCsAIN9z^Y6(G* +?j%P-v5+J^DO({)9HVHl3ytGe>lO9sEa}vLBiyUumni101U5SyCN9{Ll{XBAVDD{NPRjALF{&~S+)z7 +CL24(kWDcKCpT%+l@t@?)-wmC8*7Gt(^j`1jiy^$-R6ar?8@T%@ZNg9l^$c@E**+*nP@WIp?pW^-_~S +T2E6so!5h}D&<&y65Z{WXD{l^yZ89C+HByn?XExi9r$nMz{?#gWIeXKaY-p2~zNwnS5%J;X!i9d +lZTW+j6|E`55f$3{#WjYp^i$jZP3md_yqEAeoub^8Q=PgOLuuSo*b@o4H)E|9${{u$7Rl&YZ>&f34wP +1qU-_$Tzk{N>LjGfaND=cY-^x +n9yMj9bX~O5&Ck{40^9wgm_e`|kHQ=-kLEGhz%a9j>U^)n^7|7-NlUJ5Xt+B~MZZKOpJp^ty09Kf>kg +SHb`)K%7}8iY?5?8J8syJw`0~V%;X{-BH!BTRAPTa`3v5AXJBWw$)Aqe-RRc;xJx=la{;%$Y5TwtkEn +v!ER3aHyXWwA3D8$epDyD+hqIbil>Q5kJ90dq;&s&pjCDxTv4Fw(_!FRATuj*UFj+DR4gw$I{EZFS^7 +3xpy{j`;z8h~fv)HarD&ub#!K2WqDAOcW*L!lPhNn?rS#=UB(gz6Z53JbBx2ZONysCas9fi{RBIcF|M +v;gz8L1WaGOvr%J$to%JJ8=_w!x8t*l>u{S#{;w}d1JuWSVdDFlZh;?vROa8Ki{6a|a+{*v8o585Rg6 +LJ%egz-(s8QUGMv(GKEH!ibM7-Un9M6umD3Eh&0P`Gh~m6Lq*3u7O%Xy`^X)|2gq+`sb-M79NR>zRqR +QzyH;B}#5eUF$lzE}`3?8oaqP#l$wNws9(STU1v{ltsJZ7POTOHz$aF0BwC=8Md`Yha2zuBSjguqFv8 +^9~?UqF*@<*_oX_1IylCezYdNC_WE3J)%ZQP#?cKQip?YSC@{QgGw*zaZtFv?v0u|@Fjj2MDFC+>;yx +@BAkEPx{bL0A*KL#jOLL0V$TPn#3c#1{6pg)DUFbnrgjjvN@Ya{2%o;sT@|Wf17PbG#@{g0lv!pJDc@GW5plAnrY#snx}vQq6USojvt#jJ{6{UZIyt1HxgloW-OdU>!IqLG)07}LlfvBgqjI +&Zq=Es68(4diBgHWWGlXX#Mfo%iNxAoY=+i;H0_qVss2a`4o;{0(l}alXH0%PT9R$KJAgnWG6R +W8dY2&n855#pV~nS5;w-t~Z4E4WDInYTwk+d?O7CzKR*WUX*Cb(Xs+z6Mzu#EvlNTio>z0$P4e+Id_X +M4+p-ma)u}t;f^g$6CydBSoe9VP~V^9=Dc9M%tSDtjCpg<-P6NJD)nq=LZct9=g|`Lim}>LCf}=h>Yy +GuceqDK**9_!O;aA#6YzIhT*W7HFrC(XuvYNOrT69G3RKf!2*Xc6K!0g*6~M_u>Hn~^SQsZ0{_!#1o? +_sC`WWYVO&=di1<>YEvCrfuLLa=StzSUaV?~=5#RI=RTsyC!ndL8HXy3DZg{h_WO@htgSah(M;>R=19 +ZwCU4=(ly4Aj2xxqXGcjU6FLrVxiKqy|! +rXz+3P7iE(KLA&{dZ&&Y@JT5jNTGuikAJV3LZ*oeMEm+4l$T)pf9=4{ +2%>v&ex>fBVyIBGZZv-Nax5)mtUV#+8 +TN7rxYaz0=TdqGp27tC|9JSTewn6HZI_wSxNw{Ge6>n)bJl#!=pzV_DTiDzKk*(im1$KnmYIxzF8#cR +*9CYnhxKr0Ntc9hE-NyS5QmO5{ci5tXj9eIKtD`pT}V;@ytNVG1S!CbyQeOcKB-E&~u+h=w +e?#VcZ@nl?>YE_#AnO0&`;wfY3X^)@UOZHw&s!Fzh(y +n>Er@??%p{{$zQr7zE5a-CJ$as=T@275o`@w=98ex11cGF1?+zW}tDC +Sn-m+2uimFN&`za4{K>;5P`0nf3OZ?bmu3+T>o(g%Ir5Jpi7pSUPwRepkr%*OD%>BDYKWy>5<;4{K%S +oFw?%GWy>i_=Niu$`BPkKJdUsR(0j=j%+f3mM|_{V*JL`ImTFdQVw6%+{sgGdU;Fc1N;b+yCR4KRU&D +Di14C$!V96^&LX+XSL^)x-@;lFhbAjw=-<)jIkXk0R@efQt!I)*w=CKEb7h$;zg#hQWr!=z +VtWxQ-ldk;)30zGZ<1KQbL0beyB~D#D@8VXxY50Rau(Z7hTy%?WyQ$N10mcRYLfIz`wX&Y*j5g>LOZr ++;nJPquKR$yj@I88O&vE@h<&%z72=W#E=hbR$}24pHS;);x6fNS(_af$7kA;SHD>{8!UYtyNte +KU?uzahcw0Vx7p__tuo(mb7M)KO-F*=s)@08$ZLt0(AN8k36JYN&;rRFFkMdEZN_JV~U$7ZTRN_rw=rl?{bJOMv|jBKD$>a)1qQ{lZZm(^up&$xk!Gj>#Zb +BBC-X937ZSQphe +YtS7;~$3OCyhOFd1=o}3?TYlEyP?De{)-BY;ic10M4OhMfV@5Am_H<=f?qW*_?|@*@5RI+D*W8yOz+r +ArlvdJsF5o0vp>L%PmM}HlcibnX@s?>^CQE~ +AcLn7+t7h(12+ehh45n1HoR!Juxm_sN&7p&%nZtV$D$%roO@rwguOSCQZQ{o7R8}-nYKHPa4!K#dxee +haQ2HhNT;q_th=4hXfeOv$JdK0LN&RG!~=DF#0U=8dh&5ZhNJQpFp#d4J)oD*(;Dkww{+3UyM!u!6MJ +|6RWZ~fwe8!bt+;}_mO%$qTkoOsaR|tN1PLIJZF9sAPV8d +_oKorY(S^~*n^9ZB6t|e8=pY`iAx>rrl!b)zkGz?Vukm&V +%0%@WNRKcmc#7D(@Y<@&h|X+}fOQBtdJW(vqu +07}a|`OJ>X45Yj{t-& +!YF9#^{&g+}$9pQN~4;)bF=0TRPh+TpA+Zi0#ywUMaLiynDTPtt+*|sd|TS)fpwPhI2zgYU`aPAL#ev +Q?B{ngJ}+b{&eFae_!gnimO1ntfeYsiz}TS5Q{w?WK|+8hxO#+O6!-2J4wga;r+tXOp@*yZ3 +36KZI*DP403tDLqkOy?crHRPY=-vl}Xv$#Y*+Wvq5A~vpv$;=#ccHU%3=14S%$r!r;XpZG9=GM1=*PIw +1&+I2u+DbrlhLE^2_4m{O)B~E6pHBuD4lGgPrYgAj-Lbqxw(v8=BJ>K(-n**6eqPSiNor4 +$arC-|GLMN__x}w*siul{`q-1iM +j9dA8n;R*%r47$gM-=_RGA>JilwW!kpsgtIBePf`JKu|PqVf2XkzXg8CzMf7|FUl(d7oEi;kS4pb4;a +oR9;6X0& +15Ct>OmUspqFOtfT_3)C<#<3Z!LZ}yu@%JDE2JXN!EOko5zcBDh>^wWH=sXoK}{TE`uo-1x9K=;=?Ph +^$94Cw>89?oZ*JsEtEL*v7e@%H?*vc0to4wsz|SdzBpa(1{9tq1yjl@=7xdG(Ojbg)Dxe)8dEI6@~_~ +D`zJlFY8Ti4qVM7D{jdM)!(Vrk@cdu@68`rSgfQq4-v0NTh2#I8)8z45e?qq}9jg0*r|hv)f9I3k>M~ +5$jYz$o_$Q9PV#lkD)A4`(wL$j(=ezl#yY_!@CqLpM31TP;ZwY(|hdy;}im`nrlh`|akS#5q>~MmhTS +a(9&6UfqNQuN-vVtT(w>rePBmt7`x(a(TV?8B^Zq2SZwHL2m4X`rC-9!WNVoLI3X>GNLGh;4nryfpliS4UiiqnyZEZs629W4JcS`-)p;*{5_^)qf +6QX_LM{H#Tzb+)~wBn*H-hTB7lwIe0d6?PC!#B6~uS^po=8yVS8pmTz!p|=s9&;NGz?J7CfW}?E68)z +u3eSn?mkEc!WHgHC*4#r+s3$_d%WU!2G=;Dm4Q?CU<+N3|IqhqadfZxL9g(WSH^XeU4yjFdCOj80qJ0 +rGt#fPiEFk&IRloHB&Dw4Sb(suKoxTsI&K>W1D|;+oY +pm)IpT2ojwzrv|zW6F{HubMaG<%tkg!=l|tNy9N0sL6vm{}{02~3SFhwCz@YB1)x6_TZDc?MKdqs(y1 +$ZmRf=StS3isJ4L&ixyXBO=ztNVcYHa$f* +CpsOQ~PQ#Tb6!?52Jd^CyO3~o+LFl>TisKZ7SM;P<97{y57lx_(plb1erTTj8u +orM;xk;B^yG}az74!#)@`TB7u9iP~s%g&*FXUhJnoH))E0(O{Q#FQd@s|7b3=zgBhY@>=jaY_1*_Uv^ +?P;wgMHjw;_|k9&h13Ka&yaQ?4|_0HZwahYOR?oFl1y1KmTEMH#Bw>p8gQWw9EAD5#);}T!H3i1NEDMd1QU5N*?eMnnF-SX +Ye}XQtOAH$A|{@o(>=o(lQk~t@d0Hl+1apM=f12`o-|7$j`~h@&$GVloJZ(Cj7tzZ1=hkWaA3(MR^>t +&h4;leXsTxLwWfy^aX(Y1r0LVA4`!n<)&V5g`VgURrODg`1!#7%78Z!soAq4S^p%V`UyYcbOaRORl`KRCfg7ts@sIQp(nvvcf>xfy1v+~55ujv +4I}@KKlgRoz&YGh$zgC~f-8ouFt`FPy4y%>nnT$pwy>f%o^IV@7`gpiNg_u6PTh#w2qdv9nXj;mL0g? +-<+AZ^LvCefYdU{;L +wC&5tu6RP^PW6y&9NMQw7AU~J_<%xi<%pN#|m^7|b4ZWck$Ukc{S3cnjlY<*#~{!uXhx((DF`E9t}x4 +Qv;yq*8a-2gw{&QEvqHw);Sx)FUplj!5wv~+!|y1P@<=Z3D38;0H??3kY@qO@(vR$;hv-(f~v&(rOK1 +R_NDiwRWjy>MgQEbeu$tdIbQ+#H%(w_ZSyOUUb&$E9)o(zD2Q`6u(U2bcOCtvXeBJ|g}GoR`L7)8QUI +3ve8j<|^aIOw-XqgHz$PKx$3qr@YLP<5`eKJG``hY70cg)8Sd}s{#moG`iY)YY=6lHIiHmLoo!{G3gz +)Z{LWSaqgS;QS4!A=u0CU5i%>y<`j~53ZbTe+sy?ZkDR?$gPD#DtKZZytdW=?O&Xas--XCF)hds@HOT +9jz8*-3_2!coAkf6yV*w1<#k#^E*+H|OL$CKZx2Iel)#B^0=i8qY?yvCj1zkAcGkBRl^Y#4Fc*WI`dp +;3mK{aXak1Wvgyj<~b5`Mg%%KT(8xEBZ}R2|gINkW-k?%+Mg{u!m1Si;2ZRN~$^*9%VA*`Ue@K&;5o5 +dQPg#y98`D94q?2G=k(%VR9J@6b6aq2RQ0oW%D_T0A6W4chEG*!cCQDv +5V27IrP9zeIR!22hiS0Bnfy8!XFma{apE&fW_hqr%yPSEy_s$YjH|BKW7tReK%DSiT#&k$uLQrOOIQg +|ad>$3a*Quk&{j%r)7=sRDrAI~vv6@9nO&I5=>AQ~Y$NpJKB0g?dGef?z;nYl7^MefX9RmZN~hqWR?f +dDBL(}#~a+?_?YEFm1sI;AAQl9kJ?KLX=C`g4n*2rwgVOOnr6&{bS%;L6;%c++$wn +klo^meieiSTA&$dldgP>OF^r3MImg{iU6?LatPPkW4R6R7=VH+h^-K^l1OUvN?w74%m7jXgS^eIFAM= +jV)Q?;-y=!{$XoTz@j&1|-$TCqw1s@|M5%?oCgSZ1CpyTeuK5g~t&6CMr`1H}-Al8V*AVz>3vN7 +6YT}wMV7Jo`nKnl}k4pq_HG& +;y-{o291?0W7wa+?o^{x%@|lZVjP9nW7m*+KkaS6ITe)?Z1mpOsh`9tjiOZw!daY=fjLU1eAPxxy?@>MPVpE>FKx&y% +Eo|sadGP?_t=jrkM+S70!(^NKv_d{@tH3!iniyZ^^|yBz{E)xoAy(BX3{%>SOlr_VcBFX`H&#oEk>rC +kO1sjCz+{5D4)~k$7<}zYpHXaP3ukU%0qLt2MdB0VoHN+UDCl{7&K0?`_V8>QMR7{1yBG0D%g8Wa?tL ++5ExA5&Msq_=YM+XCl*Xz&)enLdl|pSowv%YK#iZ2Dl&oYf)IOwnME!G!GH!AE=+gKf>3=xO3J;HOtO +G|;ZiSg|2Y?BvpMdG#e)3m1`qxkV0hve?BN+^57#ia!h9$|*?Ri!lA-PTNPJqc^k_4QBC4iC63O)2@+ +7D)PNziYMeqrv)fqo>=@TUMOz{#?0{21M!g#fx3W)rWhEQ!NFz#fVLIAMRK-X~&UdIz$Q(tm~&*inmE +phyIQ{A?pTn^G~%!1i0pg5KlG*RsuwXXRkwHlCbP;KJC4#}Bdj@kJYw{=U<=1M2;d3n&kdVPQL@}Ph9`u^nQLC +L?9g=;lriI`=ZycGP9<@PWfp?gBt+Hku*19NPzEAo{lp9Odjy(H^oF@;3oo?RWn;T*`xZhnXb?)JrvD +A(^7q>rIEYC`77JhBIJ*C%{_?Snn8rv>E>$J%=;sA^oZcvncp>_=XU;znAzuJJD1icij@2W2Y17CYkJ +4pQ==3Wa~Tc5Z>>jZN<9xTXy_gGbqW==_0yP7T)dlkbhzIUN%fp&AA<$;W+?8^aTXvV6UsO1qPkM?{^ +O_v9(`9kp8nJInBTwiW$-H@a!rJP$RtpOUtZcF@XXD#6}g8Gl72$E1*Bt7@v{vyA`p?7f|E(NlWuDdl +lw^5RW(T81Y1WwFsZN5(e>!L9erb2b+R_?Kw+sdNV23b!w#&aN)9QD)zd#xZ_l&dw^7=2ais4h=;<+c +4NMBt_(d{JUeJPY#Yg_@X4qD|gIK!ZWI`gS~$8;xB(#dR<_D^N|35=O5dXqK4X3s`qE3BSv^eMh+R#M +|Cx%Sx3Uj!&H#*f(21wZ3?mj4Irl+A*R4qJ*FGpbWR+f$RwLb$mbG_MXhz>Qtm@_uh%wSw$?P +VaTLQl{=Iq@0_e`uZte>A+#@CaiAZC?U9Rw&60@pFfS)nChX;AhIQo5IR5Rdx?|RmS;sIG)X&msS>I{ +D*)@`;rpn?7`xhQ7ogp19bazQEsW6zC^~mM}BFhErajm)E`=rB#G!sMkvBni#8+Qwe&z?RTeL`Q-$iW +w4t?wGG=9Vas+;gZrx%F{VT7MWv|y@eoG+}A&Qx!Re7`fbL +YGdoy&rI=W{UeW@Zy@SiB+^N&%rMwP`u=O +_q;sn{Gt9jkJ8e-3@dFuSSuht#^q7wi<1= +us8!Y9KrZ82JVpE6t(N=)+;4jcM;!AW6{lD9XR1_9=FU^6EK@Yd%VehfU@=Xb1-L+6MIkprr1&a!rdM +IwzPxZ|LBSzR;|#NDUpT4#SclR%P8QBB~M1J>6FWR?(?tF^~o0_*y%fl_W^UdBRK1mT_79$Dmps+@Dj?8Uw$F9KmG1U$bx>vIxv$)Vmwg +PQcP-ut8K3G}&WremTwUl>Z2JWc{xBq~BBMjV4@kdz_x6t2aBYP*j=2%1H~U!?`bAfx+vdP~hZdgsW# +Fi*2c5i{sd8Sk!+HH+hRT7Dm$@G5M6YRnhrgeE>vGwC63G`5U+qZsKj2*Jft#6aZ`*~ehS@Y~fOrhT}_M#4 +=?Mtpo5f-;-ZN)2(I*mKXm{{7H&rWd{Eo+{Y)Tj!5a%iUS{fL7lCigTqLLc~Ew@_TOuP3IxKU2|2>ZO +mLdngdO?2qAzfA^2}mW0ValJu`$V+?wY@~y4IXZy&~Zv7EBldJMScp9e(5~bOnQ0l*Pp08l_Up~k8a0 +XN~I78wbgM-izf@MF|)G!3-EHWQSx-r;w0;Z}ombDRKPHt8wwX+<|^Vz%hE@KkHiapd|XwH2WQpDKc1hk@;KPn+J~!GrVU<{S%w6=S5MhfPV`RamN3+bwJXdef&#T=R+lJkTZG#GI8&+Tw4^{oP=%HlTP{qhSXW(y9^!kK@`a)FsieBuwm0bKa&&8A+v +?nQ@p3lHfhu#r(l-eDseq}Vd<>-iaq7?mXG!lv1wgJUq$9ZS+C~#aU_{(#kPQ&QbyHR&TFA{~L{_aim +8P9{Pn>l%ZF^E{~GwvmeXqRRRq;qN?Trhffr-RT}cds(MFvo?KRl_hRM7x&>f{{{B#STS^B#P7-daR= +pik$cbqi&GNbE8m_xgxg~N2rk&%x)q$?t`!<@%7qEJM(&;d0FwYK3u_6>YfQ=UfS-dvZ{d;(3xiQ;U( +Z15mk)vQZB9mQ^XrR()_V}9jLH|sbXH4P%x{{O60=Y(7CG-C{umx-gpGnY;AM4WDwJx6Bm+H+51qA%Z +VSz$WN{os-kR*!gm&-heL13&H1iA;*};vPCRS78M-3&MSdDIB4ro!d<%>dOdrN6J74SmLRO)+6L8!_x +ED&->g$!9-S7^=q9-^GV^@^9|QvD`V4RqF`b7E@m!V-kPxM^%ahg84pj5ydUm* +_8#{Uw?|y)pt4io5AJLq>R#3l(KBOg)>E|_K5+WLHS_HyCcey02E9*8K2arZ=PR3mUG-Is8hFlnjRGVYe=4#;?U)s@67$V6o<-42zV0piNgAORbFPrnk%Ep&LryKqaeL<{mwyQO|dm+^@wo +{9`N;kI4>vC&C~ogAQ~PF@O1H~9W@nJfFa21eqyk@(GIwFac&x_W00zgJ89xi>z|MRz8~yEuSw+fQqz +m9N(1`BySuUwcKY%LznDuZbsgt;qa^wm9$k{fpyM1YRx*``r_ic0B6)>oRrC02HT+E6%lUyv(bylvD! +kTDimXKVt{aqG?W$J9ecOSE5E0#+%(RL$3EeUoGZ12van?T$nZ+lI^CoSr)=vnh>YBG!qm?2}_rs9$? +h)NncgRWInV|Kq^A`S45KXVk)uVG*_FAH^hTmTphs4X?fbaaxkh{}!;AOG9?0EFn7SFc~5y_CyFAdN4 +CdXYzX_5kyV(#&cVqO?=KE>@mO+2@;8{+2UJx6FYd%PGA`muA%*f*eSERT7VlZa$Y-Ea|2DV^J6cN4l +UB~HnHFLU)fF~UdxICY`Js%&!~9vSk!Iyfw&Ipp-GjAF1yil1ls#5mUL-qT6ZYKQq8NT+@4-!H5qSL^ +#?nab{AANR}g;EIQxWgxeBfoyb_%gfTz<$H`@Vfpr+`nkBOoPJYmG|>T>HJ&BdS +-uhImZ^DQa5h2)U$pZCh*Jf-gqEKHFcC4@^IAfKh$!srJ}l|%`^Q^puD#Jk9w8Nqx28wKlz{c9{$B)U +kk>+4*4N62V*FjKxvBPP=e)f5~DbZB0zE+$6+M8)`g#Lhp(kygl;mKO{1KIV2=RA(2$@uBsfq{;Tfp2 +Xy%{H=OrQV!(u@nAB4AU1JEI}>2j!TY-@|J!DFy7z{Q~30hHSr*wn_jUzCLFiPmZ^j)7#G+e*LnIVcW +#EeQvnyq2hIod{Yl(KZylbz<=C8?d`Ufga0R-g4WfII(#o0v!_xL_pYYOG23i?P>0t8;Q;9J0e&=H)j +SZW+c$Dsj0KSZIO2}FY@HiGHcmeB<~Au0GYM!_)pob1X-1hmFE7?#xQpGiiWNMHC~-9SL;h3BL)-13+ +VS-;+JHc<;!DYKAVe*1tm}ZyvOlxU-|2WA#i0-+Wlc=r=di95GT5OlF>u1{TI~5YIJh7sY)7Hk_V%O( +<-%<<1IcO*vg+cB83ymUE-JBoy=Q$e|Dbr+BcfUA9ht}K~s{~m9@V*mee2n$06?VvOb-|JUr~VegD>) +R0|G7K#%impPx%q6H(d}0&U+^siF6fUSCcZeDdIBPU3FI>I1UtIn+$v28|&p8tU|oOD!SlWF^9IlavU +>mjg{HjcM1)XXqVThuS!H*5b;QCqJ|1ygTkh`4T-(Cz{XinpNDTVR4&vZStKEwY}Poc9?rYm!Y#oXx{ +nkcoriIu{GVd8|N?%WbAauuGH`M$+g_LWK2VVQ(iksn0YnCLiAsIwViu~KEjaJdOk~MY#}sH=AfwkS` +QcMak(WjD!dwF$3;8hmdf5PI>=0^rH>@gg@>@OXIP?98)|j$&bhbKBf0AMpfG4p?fXn&^Xz&JS0M1<+ +LYt|Fw@m=vb@NSk)n8I2UK}wgEX6vP@3W6ajx!SkYB1Xa0jt`3=dIh?JkbYi@pNFj_X1Z9#ZwhD#>^e +JEIxuY~kM?t3$=DgweKnk=&~q(c~$;#b^bI>kY=3*o=4B8{aFtyc2dOBY{uqt!NdCYCVx{=_FAF$d+G +b8o~O44#!s!303O!uKIvwYVUP{UghtA7Y??VJ#YkX;G0M#N6|D)n9EMoS%aayQ4k3B4n-z?3tm*QVID +A2dYAvI?C`a+Th{t&{JQgyhbyxQ13|>AH*~EzK0H6Gs1d5op*VDeySo$0Qr;Vq_w|np{^^ekGz&$?yW +~K!HyMjTtc-5deQo6dTB%pp=LbcU`V%gLfQ)B)6Fg&Od8Q*ME62*cC7{Gfe>?j;2<4h_$bKNgNbzy$M0g*X~tZTi99 +e5Tj-M@m;Fs>S?78RgGrW;0C$z-c}F409?7Ukhxn%jGR+%ujkEID%Nve)hYmh&j2Xeb=(*K}*%p;R +@7%HPvc3M{{e+0*zYf>CQTbs8_4^^OK=XxUfcBD{St=pdV}&N4nA&3vQsIe3eg8?84-e(-O5%F|~WW8 +V9cztwR^ps`& +1;>PwSIXb$Z<~Td#1m3F67TcTG&S_bThqaikA?%vT?p?%>LCBsY0d8k`4t$6$YKfJarvQ?|t7rCOkdK +>0P-)dSOK-Pt_?}w^uE*Pn}6MXU)FQ;mQ(1&QXYqbumX;JdZ-6yawwS&Ak4~j`$AmvgTuDd2EGLV1AJ^xJQ`{!A&uJ +j2H)W5k4;1FjZIkQ6MsG6?_lstwrwnuM{ey?0CNx-gudhq1lViq6YAoXmPx|JV&9hfXS6G0{cw($CwBUq9>TmzYYxGlfZC0!d(13$ +bMi#UvBNFVgC0nZST1;|V@D#BPeWENV6zLQ+DuLM@{>7*}*%By1P?&?Vs}@WWkj6N7(W$};!R4)U%qaLL6VmYCq=$rfd@XI_+KX$U1 +`+EuW=2ChBGJ$CqPmoRL0+~c!mk5-EBsf+k^0 +D7t}=f<(4F-VG@Cg!;|z(J!C!B>S_V~bKE{)xXKq(ac`ueU|5z-P!xVvA8SA@GGNWK&hHpLEan@qtq} +hG}DR)OGck|PxE+s*abbftUhuDi>X_f5TFl|cyV8zUIQ$@zX2*Y^K^5t$+Ca(qBsGOi)?8igNy}R@l- +*}m8IG4gPv%hFKqFc%3#T40TSgc9t#3SFdjw{EZ7cQjqu^k8f+gkRYDiTN*UtwX#_I1AD3=(pJC%;ug +@$ei;f4v>IyW$u|VOf2Kf*=+znG9RwWl9{pP*v)9y`(5dhw)&RPn{E^;LRKpby|9{*x|X)z`TaNk9gH +3=^NtuER|TGC8rOkUOB^U{60)dd)N6UKQ@mBYo8_sx0K0s9qFALm$+&YN8R0Xa30+j%2lhabG7eJB8q +F`Uf7#Fb5^Uzq0ShMZbRX4_1W+!l@INyV-jLte3MloN<5T|TRtFMaTk40ddP~|4ND*bo}cmgU|TzkE) +&^fgQh$$$3t3T%G~2nA6LYq1?g*9;~og2OEb%*OQ}Ymp3wP7mUyZNt1;4$=k+zETyF>6- +Oxmdz@PXVUAa~@H!l?;-to!R&H;s$tQ9bh8uLK7FbEo|#IQY|3{uWL_ +xFH8-C}VolBcxy-j^;Lpl^9H!&@_;Tp%hReaG%Q%qRrw2rNIaXm_>V37;Nap5kS;z)5(DmQ4F+RxJ{?N!Z(fq!P|PzF#&XPz!WwH7fVubH#ECVc4D9|0Lf6;Hdq +>M+kn5dw-X5fr(N({I4%FD;8b(@@*AA)WfQ%ewK@#^?z#h}a^@qdxh}$!=k;u?oU3|YW)dj3$FFlI2m +i0Uyd^Lm$6q}agnuY^K{8X|>j*4Oiw0K!#Ag +a2AiR6jiFXSjuahqu3jTj&FCiGH+?EcZZIzLkf7;#B;KQRM4D@VFc(hPm(i>~M6w_su&JkD!i-$0I~e +Mh-RlNlO;>=?^%?s7s;_&zaaIMFlf>@Nm1RsHvN?#DzTg$+2(GY@j_)f^+k(KBpHLw70GZB|C2iDg3y +KcS@F@W4~$lw|t+hQ0?ec*B_mGcQo%NQ9GkGDdz?$BHuJFFT{lQV_&|PR{|pw#cM^87;K&2g_32oIV| +obuqPFpvtc4{{T9pD^#+hLV`f)ZB%e%TLP_;VlZr$~>lXOW`p_W)@-%Rc5Y;JL`8FxDCs=vE9Dh00SN +HUIn`JOoc<*0tq}QX+{u+5&Z>xgb*fmdDRL`&@JZAT!wEGk580dF+EAL0cDBuQn1!US|j|YBuJYu>Pu +&x1c3w@5a{3*yDl{=b4rQMmjfOm!4cu5|3=eP8@*_1AHvuBQ3yPt#^U#l +ME06lfYu15bbSdYtrKiGqRB6p5Fp`6U^lY7t|s^XaN2Y#os6EWz!;3V&sp3k#{%S0W6YU6n+8}!9Ig= +>tvl-Zn8E!<<*+s7-N7}*h&CHkVp(Pbt{amL +=wOz2TWX6dYEpGDeI3R{&`pv4yYuX0YVIf5DA!QNzu(qWwUspL!kWz!{(p(Y*1}U?k$7bzKOpgUa>IWgm7#yddcUFaHUA|lL;s5P{s}5W-^23fsN4bL%@0&wv>#C!_h% +?sU+4N}{o9QA&jwUY&#*fC1$)emi^yw*!PZT-ru~BG3&rLVjy@r)%a5765Fv3PFWeo!9B$FM8u?sThv +1Ch1#+)!GHSw8@6=DRh|}Xmw=pY1BGpN19Ac+u(B9s7BDn2>bTv7>=>7Hb4$J;hsny;e*y^E~qemXYV +sCpRo~DA5(*#NJL4h40x8uaSJ2ZZO;bWtBn5O62vTX)&Po1)8cQIHuu+=sD|pGKyn)nig3#9-SpvFy_4<>4)C8LJGjKPF?8&cZ!`ZjyM+yi0;i%$|%HMCAqreqg@)y6-47KAlPi +MIwwjI3e>2Sd(?H>#w&oWF!|jtex61Bv!{F;JN@+VAAHbglqD#NV;GJmF)& +j4sTmskA)^n0)*#&!e{2YlE!>oS)TUo&NnrDt02i~*O+vS@uW0j4At?ZvAXp>?GpZD`X$?_exDG-|Qh +=`@aSPx4V1AX}g%X=~BKi``6@T2u7E_#VvB4{-qg%9ax|zbK8}?J%pejKFd=5A4=e8a<&|0FKI3fdg6 +aF^qP;|jkSvuclN)sYh*4qEsoySjw5hwAdnNonG@)z@rEk_HL>veUXBmW~jIX)dp(g2dI5}Y`YWaXGH&Z?*#gKD}TF_f5)MPEBfPgjN8ZQj0rb +g-;c^n5~eKNPnxdxns#!7rL&0FJRPU|%1q^qmR?CDz7I!eKhcU3rmxcM+N1k>|d$dueu%oG0BdT8PrG=spmDywK?^rmbGQobT9dn|+G9aEbEE>q$g0B^9OPh7>2E$2zdi!D=jXFrEa(2&^V5MNJL17GK7$~$%-`eigLjGvn4m_qMXP7vcPi!EW +lHe)I_!koS=6X~-vQOt1i$Kjp9;s{X4?7pHRQBKM&Vr9Q^r`umeCs&gww9PTk+J14{Sln!noIH9HIN# +o7f`}Iv(36*E6~|HD#eY2V@9nr4|ZQsBpsfwR=vhvm(T`Ezcm?*gqiLnznIHYUc3xbEasF8-PJ6iAzH +}GWf!jW-Lf0;_Bx}Ac1D{=Mh%Q^q?);6IOc`C*kQdmTrmtCk&EQsvbE5<4Lx*a9c%Wi`K)yQ%|5V~VY +1lPTVAa;pyTW2Sx4N0^Y_WnqicD48rW5312i&7)GS3VhfIoa=Nf~7hf70f_-%S;@qjs|C(HcvGVJw37 +^C;1^Q!&HOHl@Ypi*3!bvIpm?y`fL>S-{;I?|9q?RdjR+n +Nxv?je+)7I;whg&%wLE905KfJ5G>B(3=SsO7>4>(wg8;ID9{sKAz@v#xlLU_ZX0!M3=$ZDE-%>zyjCL +jc|hdKgVuE&-&&b$v_;e>;QNdMB<&;1F~K&c>jV(1k3C3W>-8&!hK8Vh3m_^42)ME@W>ev0oD8+V)FUJ2<&@^*&h3!hnOGlOx$09@e{Dh}v_lz{|Bp_k)vky>QKSU9CxMB +%JIr)TATrZ^R5;G<0;kSt?SsTP8Y1%CI$v7(1CcRuvD6FXm;Q;CU*ToAB6>%+O%-C98^qB&gzh`D +t=m*h)Y#ZpFxA`$`h^)Sq4)UlX|C(&&Dg)xa&Mkqt#hDjTY5*qSs!kv+ILPmWJ}JZa9J@v&OA}@$T7v +qwS1mb>=+MtaE`c!viFLaMYxX{H2jdsM&%gp+4HrS^G}FgCWRHTd{{Ue?Z?{ol~fkjxAb6+KAlGejP` +Idyi2|T>Q3y2XW#G$Aq9BcXp*}5~P6>occSD +JP7zXdVhY*=`;I(NmDei=H4^>tJ)?yk}8S(fnTX(HY5N?}+!Mt3)}pk7qpp6rFDN8vUhQxA7-Yv=o)X#|)k)~&tN*;+pUWGvFX)8BF-lkW0<&cr!yWP}Hs+k-1LJj~b4c^rR(L`Q +O7lfkfma;!`=DMk`Mgj4E2QTSBr?krmwH;SOe+;@bJ@f9Nq`f9b`6PuaQK6W*60l$m-PNFqdZenxtbp +SqbJ|cqk41gR8n_YG-J6THGCytY?=$plS7>;iG(|SZG8^8%0u2N@J>5MvXo7aGTWc7BnwSMI$RGomq4 +!1oYZpmzH$}|3wha*_re9g=Ti*7!hYbo{~E*`+qAyD>p#YqUmgD$xO_SGdt_l)j$i<$pbSBRqyy~J-d +{|D^%>pVR6yEq45ViS3i1HZZP*2L09oKt!md2zbMlg~8`mKKF-cLNfLmEYgn@zTmGpo-;tZ&+=`D19# +W8%NIqP-sUy&DP^GG2wpkgB!;NHBl4|H?9T<;Tr3k8N{)@xuSkixB~2mHfQ&@NRBA-AbXr{j*OLQ5%Q>)awH~BNN7yw!9p9OKhU(f$?)Di{rZ^&ZDwcm$lzyBMmxcu@ +#TRq$cLDu5s(gMI&=*ws>n?tg1@&1J)FkK`^zsqdPKboN!UqxwJJOxVx?L{po}(Y4@gh_-4`{ +NF;MB$4>loJMv8K$krnpjD%vB}4%)FqcDKSFbZ%E6=<9T0Zd +Y>-Uyqb(uMk|8=}C@#D!Uo8S*c`>2HJ$Cvuep&l+v%t7Z%>QIWvALS4g{sTs^@Ja)9q_Yqk#5vBx6RW +)0pyc)w>*|LS)z^Sl$mK_^DACib^w7lt+SeqA1>(eqc@F!JXBql$Y?DQIul(}DA|K{gzjny>y`)d?;Y +h8@2(uTGSs{$}TXD)oT2>_khDWze4oTezUTP9zM(pcZ1TD2X4dA*>NBo{H8(s#wTL(V=r$vY}a9c4StR2^ +7X;XUj?ul-eNB&|BW>~yqaF}Pp)x0WqE7tFr1AKv|B@LI;mn%5W%^03iFLG#;Hu6d?z7zd)>C`rFZVP +8(Ff4{H)03*R`v?_MOLIzw-pS8Uqk~U>`;(UGXcx92RJylFsC$O2QAVq~p7WOa4&hd2nnU+y5SV_w9QyC*%$+fB2#J%Gt0$ek6sD@@1|drW%KNro6zD$g9Va~+?qxpqV{_xk>S3(>tEX5Izq_}CkD1 +S0eRfgS8cZ3OA#v=bsW(NCrubU<%Qb$R +6}Eus-;b>1-)~)DlvqX)v}Ybw6;SupioeX +@8{ra_*(98zf=vyWKRQ~qDM^|8>%vo)agXx~Q*{zDFk@H}ekm6&3YQ3-L +WgvRzxnE+oW_g&?~Db1R@g|p-M?K7efFGxQ4oRSf1ukWis3lPp$to7>lggtJ{K@CL%`PItcftoA^PB{lR+rXKj;gJhGSt*m^#|Fz^|xGgP|-Bf5Ppw+ej_bTG`_+zo?)nT1s?XKaKI^{U`fO+zLl`HG4VdXOnIis_@K(R1O&OQ0{!?ivdVQTfMLiFKnx +54LxPZ2@jr1rnDM1cW{b;a1$k2Lw(uLIUu*8lOE+miN=A0{(4R +VuLK`trm-2qFHzdX=xs;4iQ6Ln<-DG32LKU+YSjZey7w3i@;y`(-ARqyfESIbg!Pt~h80+?APMMEfvX ++71r>k8cJj>r+9-4+oaQl?1NbFWelOi4Z&(e#~Uj|Kxr(mI)-eEVu{uV@HhwG>_aCHHO^gNO3T$8Ep+ +q3I^uWO$uNG|_r+}-}?*j~Ya3`ZT+Zxj +8MAJr9oJ)ee^XI2-yct`j&T=5EwX}J1bdK*qWYW7z%E=q*J+(HtdpIJ(OKf^Gs6fOTc45E13tOr=7zV +JE4zpEg+W}ggk-2pqVztVX`bp|tz=3)?EJi?|eiTKN7P*4i+PpV$q6{VZ8R_tGFz^;BkJ=5Apqxo;+D +mmoMl%SVVW9+=I0ek88a`s?J|4kAx5Gkl%$1kT!{Q7=;tjMS8`dtGQc&B~V0EK?#Lro$*_aF}RIEb38 +W>`4N78y{yz&v{m!w?SZ`VMRNkmtkgQ#{m{ONvK1te_>o63_A+`e~tvRT9=GYRctnD~^*>7A%^(jx(1 +JRc0B1)(yx#A0w8gjuRI7!7B}JS-ZUO(o@OnRbyFAW9BYu4&q)EW&+;b=tM7)y>}g)SDH?~2MNM(wwJ +p1ol+)?7sDCiy)6sPU?;q|veYR#+?zpNf4e6$%kDEI=+1B#G>p`vQENbVPb1vjS-XqHfFq&-lVn<9cN +hxj}6cbRG`11$`9@!wwiQ=E+Fik>&_+{9o%nDG4h*Sdj%w +!Keff^o1b*fZ;wx#ubRT6tq(5O=|~={up#M@huy6g{Bq3*8i`Se28xI8{7t$#6QVjCGkWVn5bOuD#ZZ +sVcT|Kn1VS+76oF&wfbL43q^w&Pc#MK4m>0_I+i3g7%G|1~;(1-s2a!Vu%x6p +aP?aFXD^pq+K6%TdUh4wp-cC*-^ +97x-L123+ZvC4>hme@jZ7 +4uvEad0=f`EA}2Z(^gt)f{%lWVC@Wh$J>&dOy06c4quw}pC2NE$+>2=o=4=3JWUs#d7TvUzU +Nmi$n(kvh59@U?oWX2^s?lxE)!Z02JM(uj;Nf>eIBU@~uEOyPyi}-h6nc8|-T@K0~Y2NNo$7Wr +HV6H#{Fk}+nBV6wS;#Lavu&|ALD=PA2iq035{u8w|2mqnp2^z5;dwzT7jG@WHoBEuxAcR#WF_K%xa*8 +g#&on?IRsed^0N~-GaA3N(m{~z5IH)ghF@Bj<~Q-ts4E3kaz@!&tEmjAcU^+WK_FAx0f$Uhx#EujSTp +H@&ykga!x#w$^Ykw~?$o>vPj1YO|eWV}OAx$N<(wY)vN?G@9aVcoEx_yEtVw +!%PROcBmYA3Nd`~_89U=E6^cF77hUu#L9ug>r~v=!SB59LGugTFN&1-$L0__ewrO-5=lbaEzrO>AuUS +Cf>E^t7^TZVS#qu9#NOaYo9~{p=HR7C#|3PT5mrdD5IdkQrGXxrOs%%n#Q$;Ilvr+cFGEndILn1=w?k +lsp5dKEaR-7B60K-;NTS8yi+ct0y0PqhbZy)pYyboFaVe(pwp8R?@$(YlYPw{#Y^a(ixgW2H~7uHvGe +w+uf+!YH!P%-Dw41P|>qW6>*TA~V0o-ho%ByJvfX3Q>=v;yya!OppHrf%2fK!yDa)6b!OjYW)HN&zHkzXI9>ETh)mwRSq1#<-c!<(tjx$2xXxgKLvT~0}<}MDCto!BmmdwB8*Ey+#Yr)#;o) +oFLgRG-;V8rG4uK@4w?ZLlF73imddc%5|Qma>T7pHF4<@)ZfXIJYHGgZ~?^p|$V+k^8A()7XZr{pO^@ +k5)$vUL^(Zu)~%zLCqlVY@T(nCqp}9h{v_WWQ(mxe+26T~_$VukKrmrUFlo=NNk2^GtDJ>kbbSTx9RX +V@g5LeC&O`6Illf=jFEd8Rf~$XBW?DF1^2ZcMET^B)-%I3-t(I-X2cgDhK#5)_e0Py!hxH9sJ8$HSok +Tn;q-Xuf91cQazuT()Ahbb)rxQzKiklNSm2;;D-&us4Z1{8Djd6-79zXTlL<@PJJ3e2Tg +OFs|WwAj{IId#R%k-%}Ma?`jfd3dFUtQ;jx?_(jz-0oCbG%`#_05CSua=KlqQmlRRzWTlkM%*oRfvgg +=`u|KoqHYr#M4|3Fz3!x;KM)c^f~OYM-}x_=zsQFV*EpPz*IX`a6SQS|+@`zL~oc(KGVd}ViH|o~!piAVVzUqYoRi|)L=CYS!K~zu!na_ +gO)LjOW@8|QU(W%$r!+X~zuF_7}0K;BgWR0j2mhw3>ji(KG`npKTGaV1p +_Gq?g9Q0MUAl^us)x1GfcSake2Oj{EKSj=#c=AbuO)v6)-P(VSfnh4Z+)Mv3JJ>2sdC6Cm~{Wj*k={! +3-|aE-g%Tmz~M18Ie68NCEk5!KS>ByDf1v+taw)m>o$3pCF`SKbK%i(*{&?oY#6Ipnvz1#VO7U4v>-W +dVaO_4K?D##{5KuBxppjaFKB-<)RkGvo_4^`jv?|*1kITG8 +KzvJiU(1iqsr~tK)}|z=3P_dw_j*-yJ;|afKq&ZKhc+;u(OSn`K)SgizprOw5*P4hel(tiyDzS+SpK? +8H*WNL<=gAm(GZ0X-){HIW2Hx#ZWV6+bKg}}&=>PY#t^?HE6(=%TBF*0UYx(KzJC9SyEvOe2Z;h+-6! +4USGF%r=5pyB=RO@ozW!FnU|ZH<6#|Xm-oHgkRjwu4c0%ZnWK{qOBd`!+5M`uAv(T3+P=Yk +3x5NDM}~1&HOV`vk==)~gBmndff0!so5ElYKw`BzV=8(ES(}Mi>7w80XA=5X=T-|&!P@Y0ca(?0a444 +GftEk}W<-0w%i894aqa-hmezFBn&d$s0-Jkrjyv4bD7csOx;~ZFTXqlc9^lqETFlwqT}>`FZ|Zd+l=H +B}yIZXnn4yJ!m4(;n$;c0h=ma=KA6zOC_)Qe1>WWTQR;~x{6Xr}9cKTLe>Sbhr-7*-c*r#}&>G +xQ@xEuN;IKtgzwHC#FiXnM^Z^4+S8V=qNxkX-6YQi1XZAqGvBhZRkkz@&EYUsJY_^O!H514KtyW@C#I +&0ieg8RVgJH4Vj=ECl2n?Z%^l&|!Pzyp<%GZ$UG+0^>zPn8wwG#0?V=Epk)2ddM+Dio`sbr*jg-FHcO#}-{06v8iC5t{?UMQ2T{os8D* +R$MeKwEhR2^|7yGNR6=T&kdGbOHOI>Mv%9sczG1fjQ}rgtE>tP-_ZB8q+FXw* +Fb80xt8Cc7N{H2o|0#-y)2cIOc$Wb>EwyYOSW)qCBkcQiedh|BWDn~60IRJ&0F-IuopgrQ^NLITn0j8 +$yLvZb_Fjj&?#_xQGDF*&JY+6a`LvO@O+o82uF9fjl=kVpfD-rZJT#>`Y(F-F!KBUBJQ$(Ir)&sueAD +?+zmS@nvST%@HH&)FBtqN9RHIu4>H}0SnmJw{(l*sA&^h|&5n|iBXY9CAL65dddbj;Mv7&}nsj?r@Hh}k3`#mybWfgf=%nE22fe)tY!>PWw1)PV;NHBap5mfgonK!2%vsUO@(% +l*HEXTCtV_NSPK1IY{Ea18qm!kJ*zCgRc_F$+iG_{*XFt&!~z5IAtn52O*EKf +f<>x^oxp>Yq;R{0w-)m@ZD$3YFDtu!iy024t7J;pZM_P^wz<5GK7+7x4|$eLP)k%w)(u-ORe>jii*Qd +zl3(i24PqE1W32P)h-de1`}pFwQYBIwfXi3bfU?J$AdWZv)5g;3g5Hdr>-Xi3vy&RO%E)`LIf*7N>kS +07<#Y_a--}GY?<*;jYPQ4oc0&*;LaD{EQa2m$JwbY(6PbR4;>YLyCl$$dz&I_Q?SRX5z6EEteiH?%th +!BpIkZ-u_~bgm&g+c6?B|{fuwR+NzSW-F!3dDPaeYF7}LE3lMltLJWMcLuVM7dqUrhQ4w9s(c~5%uq> +mOMsHW6I{l%JS$ix~{WjS_4_}eVuTe?g3+&l3Dz`RsR<(No%Sw-7t;u%%+4+J>a%Ml(deWp$hb+BfUE +0t>S?ark;m^!IW3+p4%RE{v%L7~^O1B@#d_U0sb|C-9fwnz;Iqp9Tb%3vIOa+0o`)_QVEJD?*CS%mkTwjk{nYI>RlGRL`QB?&Zrv)`0C4Ws25pO^BSh<0{a1E`0iw7(MV$y1IHY;d}Rf)68=#>f!9G#vAaxsbJfeGT%y+9pv=EROed~N|R5Y5 +eIrmbIn06nAa+YHc)IO*Bg85=@1G?Igz^vK;xB^b#*~y!>R8FneH`C)-&x$c*9MuvjxqBSZ_(X1rp-s +7)y&qU-KE|^P>iC6rid|SwF#g6s~RaxcUudaB7BPPFFWNYvNnMP&`!7QKoV+Sm}#86{XN8<_l5!RXzh +Hn{MHZBXzlC%$CY4yt(-;tsO2BHhrF&5quI!MqNv&xCDG1IPb=ptj5Y{=+eIu;I(*ih)a6yy!UT4As@ +<6lyN3Wv-f&zcbDl;SCBY+_>HnVraQHdG`GYEek|qwsatTgIF>)F;+^nHD%#md6eS&Dhi? +uFWq$giah8IX(wqr4uEb~Nr#iTXC0+8fn%NJ@S-js?0pAjxk%kI+S*NeD5n$DuO?JQbvkqn+%n9J--n +p}`aeGh5{s$6nF6;3nGQNl)^-go#+REB|seeixMF5gW!IrC4;?Jd+{rCRrc%I8rVHg%}r=j&*o0`SIl +u_J3}%k2VMQjv?EK_>V{%)EAtFxFQE8c`)IXUvv@8T7FiD4dA8z{Zn?4oL?TJH+(KkTwMR5n8nCOMIk +juX`?R23SEGykk7+MKyVT +rE?vUzET)GX&w`y+n8%sBd{af+VFF>VXm~s{#wC|6#Yz}pii^&Mog+Z7S>#w%V8YBH{#qeKqPVGRJ)_ +@#QrCDU}uD{BmdC6)k^{;$=hlNt*Zlq^qBqU|t$TX5%de{@nKtgP^>BfN$SQ8-73`V2X#(fa;Q$i#(z +qRG_DTB(@fcz2fx)?Mov~|;P|BRViR-Wrv4Z{<~onpA)HXwYYReE8J^+coh?L?d=diK(j2*SQCI*rrL +>Y^eF8>?&i_OTeQ>T`_M3~0geyF~-Q)j>x{I$8}@5SJUoYT{{xHA=c`c`B8*#8(OYT5qP-cSPWyqP8d +?+MqpIyn#2W0s6URS;r%3wPQ=ku(W}pVMicbv&ZRy^YFD~l(qurl-V&f?6n1m70K{K&oPUxYXn5#j-I +a`ey-OBmM-zc!>h@kl2ZlA7wL9K-xl@E*cg{s%Z*+kmVhcZ4kL-eXZ&Q|fFgZMZ6rP5r$H{MhGvS)i) +cLbtm4^PJe+R}yqzasA84pUF6U$l?c~Ycm8Xho8sPvc8c{vm$WzI`hHwF;q}tlNm_{;fNt)4VO*xI_q +)C=V`wH4lIV~g2^?u&+7EDGTxU!p~5P^2?X4S#p|2N*Jsw@=Xi-r +oQR~eqWFNe4vw<=NX{=#{NlDvs4~G4o-Pxe=Q4+f3ura%VmmLLde7p;Ba~~vrzb<&?-j%zpmo;sT36` +ifc_h2Ep5e7?Ln-9{L=9xAW!g`acWex9;t#D5za(72Klv{B-(R9AJL=i7&knkF9E5!o!H%E`c?2-_7x1qGFer7j&=VhK&FoY3xxYn;59}ik)~ +y}wrJv^ZJUI$lc9;dhM?V7fJ5ewy{)nf8N7Q6TdPI7JbauRkWrr|q{*7-e-H|5piTRMn{Sy3WoH&Ym( +vKE8bo7M9=uu$`=10>R^m#y({7c9d9$q;p{tC$k1@TC&j6hnzEw~9b{Al&C~OBr@mCNt +Iepm|=}m9aMds-InOT+KWv);ulW&zc{g&AJUaQ +-lP2(g+|3U3(e%nq_b!{h$;i>42K=c(jm@HVzC^|m7a2Z(Ir%%!q3pW@|WmEc|kigRz$ODTDvmjV-R#x!M63283?ua-*iYeKRMwNddIQQ{0AjPmw~SyeLApiIs#?9CkeK- +?s1w|OCnx1dglK3@wf05sHui^=M!EB?Azokw0_Hy +G~fJmj%dMTHY63~r_VmUXL=qqKQBFIX>jh%zrer_3U8|@!oC9bJ*%UxC?9P!jAPpil#jnaZ*+$+$D~J +Bm;nUgFHOmdBA#Cf2g08BtjjGLCbGRTK>SLLX`f`pV?f2NxwCD4wQ{t=RSV*nB&$y|*!1&LqUk_Dp+` +w6bGMZ8<_HfcZC`*tAiVQ9r(S832s1e7Gs +q>D|y8khSZ1$j=`lC0EK)~Ki#E*9`(VeH>fi`VaTc4F$=LxY@t+kokv=`)3+4;;jPliB*u#pUCf@U#z ++6+k7=*=%J@Q`9-3IfWq6l9-dV?TNmZoO50!Mov1fZr@B4S}|g=2WctAuYwVYJ)RrK{%ivwdE)OU89K{hYp@ip;DtmY&Hjf7z?7E~g0w +IN4=2nR(flhdi588&jt%KTIkV;QL1^l}cH{t{&kg!$apa!r__*gX?kWZ5zc72c7r?V~OLkzVx9Gh1(Buo4jB9mHV=di@Q#Jz;#wchxr9Ss()%)63;@n&NDs;9hou@ziq>={bqbQVFSrvl~nT)kT?#=CEFvo_!YL +2+oxZ*)O!&n&UokHk}>g#2&7(%(4w*I)_x+hA!&9f$t>M^ftG{{A4PoIG+< +B>4#-?< +rm57g+7D66{N64pQn8*$&1%U_lIwf`DO$n +L8PhjcGw*S|`lKy`QmeeR_dq4C|Gay?$%bMM*?w$$hFz`gP@fgVP<~q`#kQd;ptugg}1$kE6m)l%x6p +C6|Qa;UFsu?57@6J>#@Ig8ho4)&v4*}F7lZlx1F;gkR0|t^lJg0WB*E#Ut(4s~32_qA}o~&7=-(c3)R +gGrB&^)}emY$R?H|5EEcro?jYV(RH?%BH%B&8j^yE%te7&RR4fI~2<_4 +4v{0UbyVNx}(V^kO_nAuchtbadA_$uo4jSp%61=1sM9q&JenZ_^pJtzo0JYjZNd5J|&(Q0+;&HdaY*K +o@Uy7dQ!QxpWNaRGZQha?8#I0Q3IrUKU;2anC+Vw8LCeL7E%8f?dT(K6h;3~XXOu$5Y9c{VPQd7aflD +NctO_Y_6@j}zX>_b{AEeVac3z(2^JF_2LVdW%>=G|#Xg=_6KdXdJZdvpZKJz%QUnD&8$b!4-Qf5~u5XKu`h6uQz4wePuX^jTf-sbAL+bi^Ds_Gmrt9h}(%mY;sdvKC0#u4y;A-2~ +$wqZUWn2xWxr|WBLG`o2MUshw`(q%J?4|NoP0-Ciqjl{yH~hd3T8#X2u*B!+R-D`9M4-bozX7i#FePD +4OMG+x6fDs!-2k@d^EX|gFL&;ZHh~UprvYtTds2mW_I`xI(~*sJ>uIy +=3$t-{NYx?*!nR^nHRky2i))`xy&*<~bK2!GNQyRN_60%I8i1Y^+#mBK1{$%mZm8 +X-vCnbo~@VrgwTfi2j|K0&oK#DIyph!nEjc-=ZRY@@KBy!@um;%r5ip`!cei@chS3Sojr$7NZIcp8E3 +4z5_nFqby~B1r5C=hvvPq!!;&7N1inRvxlU^U!-;n)O7u4R5%QONyUlSalN!9vhzQf@(wX3CQk-n%|i +Ah8C#wVD)MWMd(4AXF(q>W*J_bXKmdKV)NQE5ML1axZUZn=3G_YaQ(&uw?uXfhCksW!-)>b-7s1|Lp& +9n9VVG1?V%B`HMEQ*-EJo?e#Xkak_2#+^0qOSCGmf +?fm4;}by7B{5Np0m0ttC&c~v9An&*Cg!zl@5QLu{wz(`^dIyX{~s@Jb2m@_CAN>?G*8zNJnM(A4h#hs+X4HptGC$~%i2SG_-)~HOXoU|V{Ol-Ihj)DUmspIOKlB~be` +!+wDpL9r=y7;|0o0A|zo8zvwZ}g-a|uc3v}wnzab&cz@Tn&5FL1B}oou}9#!%Ym>?`xopbI~q{GA^DN +YGs)`A>aWx-JR!7>L1e4UG1v9Fh`|sxRU44a|LmQGcTFII3po)%1M$OH;G{l^^Ly6@I#!fBk%a=kb95 +_I!Wm@qqvKeE;q7zI8zZf7J#}+boq`t@%RF-q@&?d&zv)teO4E@@UVP*&gk5~2=WKUh^0H +!xW5ireI^MJHw)#}W3A~E})iZ+Yb->`Kz6C~yr_~FQD?hCj;Z?v%JHtxK&Apbe7&cWLS``D7t~fTDLD{)f2Lvg +=)NK75F&FiwVAbLAj61@`9q^j59<o33r_$S@MEHz{6KPv{@=7R4mT +!f&=_I3HwX10A^}D>~VuQuQB8DAT=7vs!-|88ssMkd+f5zSvoZRqn@tbW``sYp@Fz|5VX?x{Pb)L_smZ~Q5J-+5l5A9doRS +}uAV))1{0V9tbX%Va;X}X$`gi&_ifIp%xO_K>9DA|0U*)HD9{j1O)DZyP@n?Si#-F$F+E*68Z)V|-X5 +oFMzwIl%paeejhgK$#eBv4O5fEUG%*i1rYI6bsbNR}) +%2(mEp{BqH$Mc|Z3lt8Pi!$<27#LkijkcC%1ZrRU)@G@v-e!oa@$f>|GF_>0M49!NUJy;UdcA#)>LaH +;JE%v*LtK+9DEBGrC2mg(!{rVrPVcvbdEAXae^cx=vCsnYz!;e&ljlkgio*aby&nf2U_77v_@ +~=-_p5v$GaYTim7si|OAY_f2@*d +R6~RIsp6gv4i!*o{g0y%LqBoyTGI!@~{%f9XkENG#}Xp&MxRb}-f~*4Je<6x0&=-!K}o4EUwcqhMr7( +`8B4Ws!bJcv;9-JQ1BLEe&u_uSn)Lpk<$1vO&K&6!!5b$dxSJ +NPfR_?y3XIa%j2m2dn|Wzkuk)wG*Ofag;fAgSvz~V~5U0hK8bc{u5}Pa7(~B0MO2hyIVg9Vmf}YZ1N`Bsg|m#a@4~*x)ZMwm|=Li>)^F< +C|@i{l8(co#65ttL@JQcm2s~`!jHC{MFF@?#O`O4ej?M`zLCiO1D&;Gf(vi(N)%bM>D?>Sp8Nys_Y9l +FZ&K?n^K`F#%x_>yI*$0;vyYW%-3{Pk)|){H#bu+RTxgx6;u3aB=zM6KgyGulop%mAb@xlbQz^;bGn| +WD$5h<39X2b6NVrhOMKGp%atJ-olv1V%1ll>Ut4kTT9|YnXZ#90ZBG~SrHr{`WTgqAl9NY-m!(8EG4) +)@tBU6fot(y5LOVul140q9Lav|-8XDX>Ku=)z{_()o7b1x-sS+&qWL7Y?LDLeyad7Z2<>Ni%Cc?dMSV +c9G8InWvt|E3+-Gl_B(mqKlcj3sP-mgr&X%kO=wokQJ9t3eYHYXuohkt`Q +u-(e}X?6L8r5-%Fs%WAl#LAU_#7?z&a46Vr-!A+ +|??P_*|-KNNq5D$Nx!%<6_f>cXelmJc8Xbb~rJ5?_&R|9Vj*>9yf|csQ*f-?5Awo_a!94;Zl$u=e%a^ +^GB-{!n9H^iqi|4FO=?Nz9_Hh~PG&jd6n2>nh(ydw0h#!FWPMi{fmEo${MQkW%YFpicFa$$)20@rW)4 +mOd9jS>rHX8P6}SzVfK4Oc`ykF~rJU#EM2^vKb^b)-!oFS%55rF!@nGV25#}5|ymvJIs1IeI^gj6Mn8iNUANr7Nf`_?3D8i_Nt}`nRz +7eSSc-J2#R2(@%-aGmr<0HC#Xr_`!#}4?HGMD+xzRvR9dG`yLG?K!u*XOnc-}g`F6mUh^ioer48fv#VK9PgFejjw=cTh_U?o +HxN-J>3KaX`@S}G5O<9k{D&5zZ?9MO1A3GoW&SOX0?d$H8uIM6qbo7lKgg=Zl|8@UYDonqT53?Zuj_# +8E66ckVIPamBQa?zWX0up`Txb-mgq;yH2aHr%f(U0$_$c}&#}s^vV$Tr^xh*~;bJ|gLM0e#W26-O$Me +1GZ!@fwquZH`IVnYI~&`t2Lj+bFhEaG_@9s@|%_$6>UvJp?ui0bw226A$2UBJfmfS(qL_KVZF36c*D-yGLQ +?uYEFzXdACv!3`i7x&8Bi-5-aRD@6wJ-Rbjk<@wTj!QassJ3#s^Ol*nspYMe8}q?;z=I>OhDiWR^vF8 +uBB=+zK15y+-CvCU>qtxK16A-m4^YdOAno*24&^}5H`8~eZ(X)Jx81M2g&3-g9yDv?6c6HVW!) +|RT&fjIeox)f#fzBy`@RM%IHw69<}-*88~Y8a>Zh3O1Hr|G8UgQCOu&2mV$hv@uy81iYRB8z3{xUlt-7Y_7X3SoaGu>|ZG?9H0jHZv-FXwL@P7>r=U2LgjP +ZZdlmw&b&Q=|ABPB3eN5;5_{QQNv^wkmR#P6YsaLxi1hcNl;E5j`=~xY&me)Rx_MFWf)0$V?baPM?n@ +ogX_1P()?7g`T}Wro!mMOQ(w7WbDKz#IGKh^~71;OA*!qYa7W-hE!^g +8MYhN={|K0Ssjv7LcrM6;XZ%uyhrlL|4{^Gd`4-r?4tWf-lT*k-si1Z?vlih2x$r#-Nrj=0Xp|RGR0MN@NJw +e&NolmK=jw-#u%p5UT~b?-tB7&+!+6;}y6}`d_!C5OFF?dfE8RV@;qlUE*}ves-5kzY{IK)$(^p**rt9`(`}_OE>k +_)@5UOV*$vGis2{8v?)6EtSNww+6c5Yc=jLp(tG(EUv6^V)y&tI#zZ&#BpQ<+Yk6fVLgIyLVbSg#Yg0 +2;au{0n*8Y(uJHUJR9CU2Bi`m#&xUTR@zy;~4`Pqw^^s<` +RQY)MbBFMMJ@R`8@VBFW2v?9WiGe#VLJ5?_DVzjZm>{&nmEIZh?wqkIy=KCzJEsH5E9!o?A(pr9k7fPF+154zR#kQKtw9f|$EbL8L)0gn!o{KHqCeIQ +PfAJ___j;hEVYVEiuBR(?1pL$LhK5*U+fS}K?;V-%%pZ?$sI=YsRa>{)ue+iEyaAR2}`5wEFqrpV_n{ +n<<`j=9@cJl|_HbBp_a`0LOt-`p$WBG}0+jha0u|Xr$ZE$A4M-rT`+lCqVQ+cJ}f71^7kfi#v>FJ2RW +nWmyzGw%1-=_2O!Z)-He2a{*2dx=&b#1?mcPwLnU9ov~o+Y0jzl^fsjjwzNNBJgyYy*Oy6Ys&1+Wy;! +Cjp-EbiVk{=(V1rYu|$r#a-JsV(q^Eomj}i*(}ykt>QkS#Ta;*5G}po2=9q3_2&M#0Mb}nuoII!U&4{ +aGy}%O5o;q5ZiVaIE>poX>BF6iY&1$8Awl@8oQx;TJv7(3gbzT3>xY#$pd+r-Bh@sTz;&zA>B^u~SLY +hJd_8b4??irGSQ~7Dj^w@U7FA5$u0~G-tz^Bn5{oR_WXv8^A3?^&@e(D`-OkPM&>p|M`PEQWv3uY-PT +$ZLbe|Iuqn!MzUVu!KvnsejapI<}?C)JB&{~MrFAR)l+rNVMGfnnqG$(Y{evkIk0ms`+Hcv8PI7~YOp +ehGcpew1fogK&IvHF^yOjefY7b(2rM>@wSDVjX} +`1IR77euhnLN-;w?LuPQfBO4A`x(VEo(809c)vERc7LgHF9XXW=e1g=6i`{snXs}Tp?FWd}b-_xC_2l +e9lun~Rs%{?xY1H51aW~SUZtM%1LS4Y(Cf`=!Tx~YdxM6RKmn^9=`}NGjD_rx`g3opfm3^G|Rtrr25Z +Ux;8DAZQ+|DVgnS;6P-iPd{HjH0oo$gcnMPI)mo_#v6N9b}$=fb|ofI43e3Jz)it@EkJymkIhjAI-9i +-3pFT#(B_H2A*W+X1+S!Yv8gNdph6nySz4)TaG8DH1yGbfwly*y5MaXtIW%E{Fo^4Eebc@bykiRTUWoi8>hh(r@f+`|J21P7W{o8X(k6=>(EXe^~oM?i14#fj?2SvBwU9!CBg&Y1?KXTC(Y6W># +9f(bxScY0;)-nz_-UfBfZ+zd%|t;OBsn>1k1?FZPZ!_xI$?Of*Z=ez~7$f^=Te<#BcVACMYU1*)A7n?FWNHh-5R7ppO!z(Azpt<7{R(9|sVf$=KiA_-$A)8hs?Z0dP +Azqfm&l1NF02bC1X=okva#T_&3FdV& +sG&{Z&1$uWp#-y0#Z;v(@5tCLt_p~VO&}BBQETV#_c2#ukeE`M|A3MmN<ytp& +_ct*8dy+N8flJJ8V*J&gqO3h5|82@E$}p6B2gL7_xbwjrBac)^?6jdCfjKdfDAcZ6zs7^?yIRxLb!{U +cU#l@uc+Y^DxXgUaV=8B?od(_gv#mGlQwVVh)lHwJzxpwtsu0Q_^Mg%EqK}BB=X3bDwmR($`+T%@PhP +wkvJSU1_pn5*64-!XG%t23UdF{QT2DVi~jD3Kd2S`c+#JJ5d_A6*@;zrc>aj|5WLF|IlZIjn?SxcKT# +hI^+V3DIO=Ap-y}}cBP@!Nhf8tr5uqQwQRMJ8_SZRiG(qjJ4+T^3&_XS+Pd|C_Zyfs_(-3vAI)Ax)@z +LEoBI=-}vV&F#k7{{AFzR(_yrJ= +M7{z?LSo9KMX_uPrQMFkS+lKQTO~B*bJQA0m&GzhB*7r@PE;zKiZl2RA(OFDDievFJwnN_G^Xf{HMOB +uZ~DV!+Mj>MkAy8X8hR^Sq#s|fDb>i!2hHx=g?BPD*;~fZjZYqria;@=lXz8vl$i)&wo?iLfWXCc{7$oZ72+ +Fb5K{&0IiaX*H6o5uwAOMvc{N9(!r=8C#BbHS4&J2BymTAg4FGAa@U3g`f-mNJVx$X8zVzk>`OV`|o- +0BaE|*EvLT3$~?M+|#8$4dlk!K-6p%!cf=*;|lDD_=Pkm>B)VA50_8$ILec(E0*)d>n=$V)Ka$=CBK^ +xRp5#RRc>0}T6p-Ist(t{~|(4$S+M#2XqBqWDasO_X8{ar0X+dRzDiC5SIlAz2WLPl$bf6s(%;%YL1t +0E(-RTlgsEUJzBOv6zA|k`Yz(&*6XTk=aq63J>28gl&066SiYC9y`&naeLNY6_ZaR_g^+|>#V>h5MrLOJbqM>++^|HylXF(q2JAitEQ+Qg+ePw5Utokf_ +Uw$nAAuad?kb7SWn*Dv!^9*p_e&1;oZ7!2dr%=kGcFb<<1+~LD#>-R?I|^JRBP}%mT1%>qr0cUW7`(E +Rgx#^1xUgb`7jZC@_IRqn@x>QPrZoxo*ys7whd2IiKi&R0bbwa%Mwy&=NTTzXU!2bVGt*DpI;D=lvb+ +l4+df5PSU0M-p~frviYzYP)ygqp^UT+?=U#%_bu}p{#ip5cS~v8DTp6U*N;D|k&Nj&mBThh9w +>d=$&V@PWa5=476e2cQd)WDkEe|Ivg|=+11-;88d4r_UR%i)^)ic&yZfKC>%Yxfk78Dj1R4U06TOMveEK0Uh$G +sdVy_OHtavG8CdBI0p-#jF7Flh1V0MT;GQ#kEx@eef8T;tK2`Rn|=ue&3j*o+STgHEfwtz-Am<*)cVl +zAVa)IaU`8U6gdQ@-P#UmpHLnwp|O6rymPKp~IIJhXs6@k{6v-Nf)C +Z4KjJ5ljjnUEp7vr?7vczwT2!N07K6k6LhoIIajIN6a|>2wEL);X^@VM^NwwejSQe`GNOh;&_TfJ{kE`sl!Je{SatI{!RY1ScZ +9o6jt^dI&x?wJPA(@(Qe6-Z+A9*Keg@pOQF>nFgD)T8TnhVQ#)FE;!yAsc=uE9{Ga-RbX{njHWAy(hp +Fk{c|YI=@D*>AS@TVeI9+!1gMPS;Ie-4r$|V1|t)Y=`3huyH33vY*F8w7i-pQe3;qk@S_|3tH82&V>K +OmUPz<~an{_|h9pX=%gUyE6etu1!1LD3@u5IC_DS;$*XD6f}_3q5njg;a9Q^!j>H!j<3=alSmyBZ0jnm^(rEewkA +QTnS8T9?*?}QZxu}pwWPyYf=_E8h7dGS>h|pjmGjvI;KQgqB7L6X+DA)0eQ&8astjxR1pC~JU!MBGhJ +!!RTm{B*)Ekgt!=%eeVz`I)Q(=F#VjbnH;yo0wQupdWw8T5Li$KD8$^UNW=1A043)e4rv}OqDdH{CLm +QxaQZKPQov?&jiBZG*9CV3dy@=}V4rJr}a2L9i4C5?x=}3epngZ{{{%sRc*hr9GK|*sL>oVtxCDS&z}1lCguw#haq*)#xD(bGdR~QOn9zoRLhoi2?%+cTk`&Goth_Fe4{f?nP4T&cvY +Vk&y?RL^x@fpJTjY+8lY=1$Np-_JNoPtKFdqQ;A{#hL(3*NbkeZoB4`My;&vrUVdLj`yBfQ$z=%{N--IC*_3H{1{UhfB<6HZdwb9h?O7D)u32?M;{knC_n;Ync(w +YS|*fZpe=ymF*r*JAg{!g7-zz+hJJ0f~dPP&`08?~=4=QHPVVspEJx7q^jE+NJdc^LQY+2~xcLH9Cgf +oyRd9D|q~+plOw=QArYQNi6LC`YpRUPZHfKU0N7fkf_|8${w0I^Qp^u`)z5_XPmOvC}m6f$ooGY!O@u +ON!zYn_GCd+K`QxFrU4z4uKlp(!I`HdsVatg+t|bS0JweJi9N`yJp<%BJ7j1d=KB_!gTj1c*N&|x1KA +Lo0jM7@&AzbW=oG+TesjnPqFWbI-+lU2ckzHdI3>4w4xURB$}r`ptN(_=}dR~-=`|7BGS$;`Osp4q&d +gz#$Z}z4SI}=5xQg@Y)NOG%~Bvh?pXwGoD)PCzcFv$4fOrFdLq$>+|VSI8OnoiOForT+8$Bz;6;*6BE +wir#}bwVOzdVZK_4uwt7byJE~RELX??e8%m8s!NbNpJFnG%LU}t^d!f+2S%;?|>!qw^}H=xHuXXSN=n0I$2AKlea#%kd7pe-+Zu%dw^@b=zA>ZAQxCPZyr@N{naKIo_s +J(~p@8PKYd=19=VJl>UZFxw5DrP3O=AVr>5b^|7g((Cu@DynT@r($+$Sw1O6T+Glj?MTbjE#>-b!5$k +;+uOk+%c`&Wt9o7f+0>E_kS-_QYYZYle3M${tMK-QqA7GycWN#mn$CM!s1(%h9;vDCcR1lI48LL%$?j +pfcne^w2ue&vSn9U>YB!$bM6clIx-+}dpV{EPWtpVP9BF6b{8vcFuYj>dJrk +d_T~ww2#%r2W5TQ(qO&{&+*bMt9_a>o5|52ogdO97A#Zdq^(+$XFb$e(2F)AEyUGB0uxtRCMT0>=+G= +K5}C84*0%5(gz=f^+UnpqgJ-VCn7r%P4uTvA5T8~i0Mc94E+q|<;MU#z9YFG(K8-9$qz_~eC7nxPsif +Ew|&L^IG!Fw_T)2V7<~X-0(}M?u#Z664ieErts{#*gNgKq4jezmANDizgS_$2kep~AMRxArjM`Cq2Rl +KGSNL~n`%k{>9{;Wf(Xus@I!^xdAaYE|#_d!bNN#ru;4fq1I^<5CTPu48q8)%OA>GF|yM +wXm6(h?#YMXI~dc7=#jm#H)*1}CHE;|UT@1{)(U5PD9#neCVVALe{SlR17DD7)0W8VS#;jY&A#fH%Df +32U!aV#xdJPQWG&vt$@9Q9En{f$z`moCUnkNe{2|1e`dZ+yG#)>nnfK6iwS|M0l0CwYYuCxuvxgBQ#&0%-UC{mTc& +q7G{bR)Oxz$p0-IyXT*yHaCk9;@+wH3eXUz4Hgz%N;t7t&vXAhADLC=H*2ZNw;}EgK-)I(N*u>Sd+Q) +Tg3xG*qnc*qQH-gxRhP()Uk6Kz;(2e!jCcd?bPq}1-PJRgR +v|P`R4>ZFp?LsPxE5t$t$6o3@5ZLo!*?P9`5D_|6(%w0iBq)Osi;$YMC*ix2Z#rk5#&zg%>q5Lmcdtq +JhX?WG*ArMn`qp|*94?|k`tkbqU)WPpPb9VXqmaEXDr{ucT~39%OPe^+=dCG+>E^N=*;GrdG$Tf?Fvl +;rjlqJqs9|1d^h9c#qpN6Bm?1_YK78aT?x;PF`xZp_L6Wqy=#|wR!>2^R$_o#5(R9RN%3|_{Yu%QZRs +Yy#@xE$u$>b|530&?%l*y`9H$bH>uPUZAvDEvI*|+Nf|soW2BA-;-6#8kfAwOsOuQ*RpEv_m*&@6?dl +N12fPpT^$B(4+l{!^wI{DGTpw_$7aHF2)-ftPbypK#lzD;NACrQg$qFGA1yUAw$Ls{4tOL05q +)qU+`&UW9FE1k=>(1_g)a|DzneAUZ&Xu@J%?p# +wxm#c9`Y-r)_j4HE)g(z2dd)P0wjk?U!qPuuK_&egA@313*Xbr+P2a7u!t1b1z~?H6#X3V%jNVUnAge +0wc=D=ef1dt;_TlUK2-MzxY4k24_P1#qEC(S>Oc_g(jc%5sIhN6!aK$TWTKdGEYgKdT8Um8oB$-LpDh +X^Jxdcuri)KE1Gzr#YI~zWEWu(I>G>U{S!d}*-C(smnE`s`*`k7;x0k}804T;%rZ9|P6PLl`VRz0R5m +LTD7o*rU*3XPLZ(My!2c&_Jq-BDrb!p{(MHeoIZz}Ls+-SD%xWm#M)Jss(wCc-?DTB0Aq&p{R^VCe3d +sP*?I_c?T=ehX21-7T9MpLnj5F4jF!skRDPpUNu&7_}#C$=Bq0A0Wtvq<0dpK{9spo(dGa;(1c%nri^>tz+G>$-&APZ +-+T}sj4om5zzq?5pkGd)j3+2mb%bH=A6e3guf%nT;W?eU-3VebM4DluFn +@zm;t!~fkpE-UP5%Q|`U})e$e&U-9VOZLsM%)NF~342$7~7&9YjoU^iz@?*pVbZBP{t(MD%@7`;h@g( +ofx#I@(4Lw(#tzo08d)N!)=fiX0O=JJd|_`kca<}a~wXHF?S?NQXf_e>X@U=K6p;$FQ-RS +DgIHTp+0m?NqP(bVfaz1jXw&)@P}0s!am8@561 +7e&ic=iPw2UA%zz(ZVE6@du!otlOE5vuA&r|Ttb`eUQuvTWMeL#_ar1^HW@@;@I7_{og0(e_m +kX^SwQN~h&yo`+SZiJPx}F!&yIm!QL*o#bWth6>`kE;C`&2xyh)2Q8puBZy1#NyugH`7v3XF9nP? +6N8C=OuqC#Mcs4)ZZ?B3Qo92IWvFz24N?`mXs@&V2h>fPc`XBT%+o^vRUg9%bdd}!)dv;`w~a!`4tx% +^RbvCuQ-X_b)AOqLxqYQ;yYIn!(L@l)>`=Zmm^1KtFNF*STf4DDw1s6xK)j4uL6}`)6&pIm)6k&N^SA +zBgR(9AGF|ZMQRbuYmO^g^Wd3m^n4hQR#^CYbXHyZU{w!o=Bjxq^p;5GG +L*4VDkvCKPJ+G&ZeWjZIjv%&vJ*#a2x9bk#9DT4F17Pj!$`itC{yX9u%=Gx#XJzTfC;hB~ +dK~|DLgJ54{W>D?z0-a(EmqLEXSBM_f!8rTW(y-(8(Pv~dMvu +MW=;7k%&#VMR{H(mTyF2PbRe^rmn2s{uhokWD)zrbKm}7?|9%#4=jKJKn +B*(BlHdwZjB0o93#UvI{@hsfMcMP4@rYxm-)f`n&h4xF_zT{{E1Z`fuMhH4y^a2@^?<&AIYo5_pHqi9 +5d(^KhQE~|r}kjXsPjkG$7e;xU|OxUlYF7$L|B6|qlxxC;Mkx69!Hq21~RbXlf>nAhFM3LcB`#;c|3X +?GKy?{^ZS0AuV_3Y;9BADRJuH$74u9G6$I>1D0b%va(C@XBab`E$R6imUi99o`zXRo2-oM^THV6Cq)< +uRlv9yP!f2i(R1azsz!Y-yA|92Ws>CwxXrTxsU7Aw81&?*ei~4k{8|E6m{If7+p-enr^Q3p#CQ=eNK^ +GwDk=?upQsYn$?u`nmOFM99N7LDSRd?0e&{${}+)I@OlVfSV +&-o4Q3EBol2!vY^DxY$c-vyx`H@WMw=MB%*02LV_V?yaPNGlv=hvGX!&n~+jlF*%XObDy+Wpq?xxaiy +2N-d_m>R!-_P^t|#NWizz&Er8ZMr#e!<(|L%x5I8-4OTcgR`8V!sS0?9`4++ +3n|#AeKY>L}@M`hg-m=c(Oblc6(gn(n+xA_xui_TXYn~uHWo&x@d%|l2;Cf+5t+TBs=><-+(RpxPk~FQ;jCoV;!w4181p +MqMAt;~D(s)|nJuisZjR*%cZ9yb~s9@&1APPQ?m`aO6a_nj`vpBiUUaEBNc$xsMsMjy?lAt2mvZq(B8 +d;-cfkJ=5Axiv$1l6%-kr)fZs~8l +>=zgH-Ix4!qK|~IqkDuv2!fyy93s&}(i1{S0wQo6BM=NCDH4GobT<{>twcm0=}tWU3C)iN4)jBXkbjZ +Ngg%i|bi_J`$mj0e;_v#eJtEp&M;0A?2Q+bv*&XrTrwFhgjH#pLm4c6h +1fNk7AeByms)?g1eFMHLkJknrM1Tgras?mn|mV0X|ZAjh9Qay*2);iG|N_k9OX5q6X?_B|a=`A_|q5F +9-dQ2C4haxnGy)HY7X&zl!y-I{G5MvBZw(aQ% +#R!TWm?Y>ykDL4@7~tCX0wvEeeJ$IbhMW}WI=V#I{X_1e0xyi@88fCDf+J{7gT;>t@K9Uf}3@yZfZbu +gZsnnY8JMe&|i2NykDR6Rh2>J_`9`ff2-s6{%#nvdUb2epCMLRg_k3#=ozi~sOAlJ@_;!@cM}WMlV-e +&l+Z3$i8WI2jMv~~Vd+Q;lQO%5_rgwNK`f_x{}f3M;#yB;q3V_agFehI)wG6gkIY?)_B$q@j3N$%nP8 +`4yGapB-wBh8{duD{0!%^;Pp-T9ed@ygbpZ&<&tEf<%rYWj*c~fwIbn?1fU(zvwaQ?_4R{Py=yW!mjr +Ms3>h4{&#%Famf%c;SFk{A_jS=Pk?#u6u^A;e1)xg4jfS2?k>yNy$m&HPFID@d57#sJPa2vc@qJTL){ +T^_O$(}+PPwtu$49M;~!dE{*&3xBeG}m~@Srdymf<`+@~MQ?vq=DS^zr(6sf2666Ajyo>P +h5Qx`#HK^Mie9B!gtr2fZnd4aJt63^15l~;TPlwO##$s)Tl^>A=1(t8Y(0k;mZ@ix((!O|6FWa%BjEuX7FaLN0w@&c4U(0XG?;0!`^B-jPu8v66D*cb9}vuY +glSH3*Y6d%;(c2)c{gM6EygK2zT(6m(ziY2mCTD|tEQhmQIK5V(3 +)!(Z=i_F_nhR*dmna}GP(40u#vW{FB`)11{yI>Hz!Q;mE`+M4%sRN?yG_(+Rle7RO{Y#f=O))=Zq!MSz6UoYPA%`cg+l;}KQYk`9y3Fiwsl(A%((8^fNl$tvkS9JRPQk)tsgYIC8HbLr~9(;v^0+L>3Fy38 +_97&oVQ6UpQZu)gT`ektVu(r#mNSI-9VARc?v+iX&L77Z@7Y#a#A_vwaIcj4Kz_fog$Y;q7zj5DxBJN +G@5Y;1rYgq3wYS0K6&O9!RPV-b0{^ThcL#E6e08#>C_lF^2JSzEU8bYTe%2k)O(R@;It$+hFRarX5cdGfof={E3r(J56pj>glg +Yc4P1%qg23>%!Lfb_HlEZz#Rr(Ib|b3cMPfJ=nYPzThRkg7$Zn&*&~dEELGch!HnFKGavKN}&=r)ZR +_`qX_o>g=-bQ~=rPy8DH9keH@N`!19njV0J;Vrs`+F?QfGnA-30Z=)( +pNFYUcv1K^I)JS0JHpTrKU?e*#sNzeiP9&c(G&`7NsY<=}rARmp!FRTV>dTN$fLJnVk5UT=H=FN2 +IqWjhH)SPD7td{Uj8c`tE^-HQ*KqoAX2|4sx~rQX9ss_5T0@j*`C|Zv#%&%u1XluMR_F95h)W&)J$$|kKhG=f%Mt}2`-vJ6mY_sTX8I_N)?$N@ +^7C)_1(CGYUvT&wGeE3kZt{DfeV8;aS{2m)8~iNP4df`mWZNJH>j=BY*Jw+`O#*B*Rm<-EU( +bqe9c)sGjgy^@0179=TLTf#D7;6b1CyRy4ZV@zm6JlR7L;3W_#|^qj4&X+idBK^Z2*;-=4jtuaHx_z#cLSXMbmD@r) +b=RXt}sz8jNpJo|VGu#mRDRL2GS!>W+R449yDQt-F?p?s#&p?xy+Xh-JT9)eMnH9R^VD+$I>9$72-E4 +*rJZ^Lvfu<#D>lRYAKe+5lu&Zq03nu%{ZPbx>Yz3|x;a6TDKwioJql +5J8j{+kpmhd@M_HM0f#*+B?LAF@I`I6qnJ|c~@oFrb_L5lZbizo3x8zE_b=n2FA?+<&8O?;m2)LcXPz +Au07@YE`v;7-6tbugBe$Naj7CwH?a`9Mu +OOzhPdg4oE0zTjn^-+$1(4T1XAn*KiuYQ02i8@f%m!{SoUPaWWcJpbU&B&in=%a%1Nn>T7+3_U*j4fs +Rm4Ae)s6zniP>;$EhR*%e{ptrG!jGT#&E(XPO(T(`C-+E_<;UgW{6nbyq4PYrvd|AtCw-KCQtHT=5%e +(vg%N)nRbAe2t~+?Z2_mHIrYhNBnKVo{Gl(G*AQ(|4BjWlQBOi|^|>+KJe5CB?5uAg^c0$=2zm4 +XXYEgoj4z?mGazaD(beIN2~MsaZ3|t%O2F5(cT(+wOLNwd<$^N>q3q6;Couil3GZ?-x;uoyd-Z;4yo$V)7mB-SNFL>*-A#KSOMJaV9xR=gQ!#A)6cgc|)TocMdj;T^X!wZ&36~x`sM4S`kJBidky|jP|qCQoLo2oJp_6f +*!n!$$C=?^-_eMFFvOsH7DM%_=h1)#RRHG2%Q>|TeLuCd%)Z78RNZlFRLV!;-T +JSP&s&6SWKwSkr3)ldAvx8*H6_h^m$%H{WXYWNKp-=P2~;mnmPmBW3XisEV@+#EW45k$O&wRJtRGFT# +|PVabEr<$!YAf^tJkP>CbVAwRcws}6zp0bymvJ;6B<6f2UDOh+7iw)!yOWNw4J2hpR +>s4i7c_S`_#ajzp<~elL5hHi?zGl5_Pku6O-U_&{G=ujzq(p?6WG|#3+A6!K8KP^!?Ue6?5BEy;wTa! +Ef(3@L2pObHbbwacYQ?Y(jQOJLOHsZ(4#FXj+CAsbkzB-Li1ecZ=c`?@J!me!7T(a0gx|HrTCXaz15- ++_>G$k8JF`LM}Da7SX#4&Aqs!Z{Lb#^iOm;UGZuVl2d5=#`uT~0Ai}sOA6e0A{zx>2Zz{rGf+E^zX%d6trm>;XpdF(UVGbhlPC +w?k$1dd_+`*DjBjO-TCt%$_uD2T(+{Bw#xsFAnG^p&5V|Z{d3$2LJ +FN>$tynTWLFsz`zE>BY4%VQMiU(9}N$kKnw+!xp*e&H?u`L}YH96guwJpZqBKbGvr{#Wv7zZEO_PZ#? +tUGn3Fe$%;$qZE!}6ih%A2JMiGMkxYAArvK$9eiOlgkv!MJ@j<|Ch9<62cAKXR1k$6MYv-Gh&<%Pvd; ++k4uq)uCp!Hu`r5%7_TlE)fzOVN4vNv}$S7gZL9c`52PDg&5AK2vl295wn9cF@Cp7;7`q}~E4xf(174 +ex;M-L_*DmmJ2_E#PkppU`!{e*pQd301A@y}E`jD6(Nk)t$-(Vsu~F~}5sgw+p~(fvm7KkamB4x+n`_ +yv8LXIx9JQ-Fuy9%7IuZomh~{vPE9$2Pz>(&?VN@t($NUwTUlO|!(Ni`=92(Y)I?y!sUmy6iXz1wM*M +$4R%(Nv{B*C(S-+xPHMw6Cd5u-aJNa&McdtI-Im#E%Ockb$s30es1M-wE6mJ$92Is$gh*ppB^dcZ2kT;f{YP@g +U%k5-JKlJE2IR$TwQT~DG5vuw{WZ*$Rk1CypKNr1RiJneS#->K$91zuA0`xy&o&A?2p89{WNjr-ang} +~2onW7VOVeMQ6t@y%YJT3JAf3Fzk!X)Y*HK!!)~7CMnX!=`#_$fS|hWHdR3_ +Vd(DWgX$skmBsfHds&i)oEIWNTh)k;7h}LqEjnMjb@xM7*Er&5Ive;ib@1czH0s;#m|HQ*#CqYKgo}d>B%yQVcsFRH0Ty4&*Hp7fvu#cyrQE?VWW88CuwCd4@?QNS4?)(O>I{kjDS5UQ??uj}lepN8EPi@a4xXCl`3`o3Y +p1z?~uFWX;WX~B1p&1rTqn|7D1CR@Si#4jHgGZ15Epg2sx*zm^(kcGM#s1tW{#J<^$MA!doTgw1qHr7 +~QJ6+3l)`9y$DKHa5afq#?sra+{PcV7UJ!*p6`wE3i1aA#pxI9}eRR+qqqym3IQRSQGdX??6ht2}utS +H0I_7$lkDuKSLeN2uvOBdj`6L9W!{P2u3WW}Glpi?7FBP0m(FjWpV(i@uLSJ4+90epe{<))bcdhYJyE +!r``|3wciuka=;77$OhClNg@NtjWhtnH9(iVT_6wlV-6cgm%PLU8Iut4+2#ZxTxq$?^rk{qM5_xt{x- +oL%O&1beRo(1?%9OB_wfd9lH9-aj_G6etBAs)L1{u76I>>BuI4pE!a57}Sx1im~~nPu#Z{+2>IoGK2c_>fN;<#IS_VOj;C{M`SoSfLg(Bgx^G_gSggyKWJAvT{%59vfUg)njU7|30ZAjJ2bLh^*FEa+bzN|c>_crR#EE-b?>s%-YPWt(q +4^($7yo3T-&xV$F7j&&iXk*gV!Ne;AdH~N-GY9i43fqn6oC)~-+%SpoNk64mWYau!ZnT^P3<^xXdPk1 +r%Ih3dDA0j`)Q%au0yGg~PkFs(66Q2KRR8f7Ris- +8WWwv3#pNaL1&ZH{Zi)3~L{@p<`w)k&F70fJswMOZ$tNOJJ^GASK#V|(%rV*5^fYAkA<}S%Xr0WbV~i+8eEuado +U8{0x%_(~pr2_2%nxk<`=JfkA?It$bzNV`h-%kJIZt-ypRD0gobRPhTaCNsFBw2i*B4bimD*Vd{5gtZ +`!ovK)Gt}ZHKlTxBh0$}%sw4vQDc6aLE(>Mq;IQyuMs+H_q1EDh?W<}Lrr)R7DK9$BO +@|v#NFPUF=r~SqNJrfWl1zU4?OBPd#`4&QoFhnr}xi{xVQ+1b4#Yq`wSW+t_ypU7!B7IlBilGndA|Ry +Gqdjq(rn{h)sd}N1RXGh&Q(-VqcsXS>vn#QZX$ijQl1xQl;-a{Yuu`$IJ1~G6#A_P~Z=Mv`BqwBbEDZ +k4dhkhet<1k$hVv|Ncdcg`#}-{2(rzPI^LqKJR8&>#E0-$W0eq9umyeh)&S-47x(OcHw>fgU1+6 +owKQjD0tFIOuWGBiV(27#s8WBZre6gIYTlhtk7W(ZrEm!}oyT`vcSDXC`@fK@@#BnLX&(eIJp2dcuf< +x^eeZ=tpxWr4K>Fga0}``r_&A2flB2cF|{kZFjr*XIlDbq^FLCu>JoB!BBSW8AU!4iRe*0JvzpsqvpA +982V@f9nlW`(;gimpGkl$Kbp+;mD4}%5<45m>{xR9>ibyFyS)u1>p2&m3Dbb1Nl2>S1rNo4D|q%qD>9e2LBesZ#9{jtgl`EE-YHj5~&zz|!}HgdR=q>W~4ptp4Z+vx;67+|m!oen7ZmfZYJ__e1&nLr|9zwR^GNH@b_)9stmZ#j>33%Hn^k +^eH!&Q>AqdAQnj}#YB1w`)ce{D0lR+>+z!-vlKj}h!=6sSv>Ga_6&yRF{j2%h-W9sM&u><;P+Q5Iro| +dMEy**^j(3iXv3P!e026qo=8VTXlZ<_-yqI%LmYfHyHj@TxJ#DWgbH>sE&qC2|&c +G&NMhau}zP^=>LPniu^U?2Hvdd*#Em{xGa!)9)0C#?&4w1}=7r)kSN-+Xe9GGnMELm3i>G;!ntuQW{d +ND8+7N5~dng)rVZja!~XeLmlm8%oxi}ewi4rGv5g!u{I&Zcwmk=feRmarIqE*#yahGOJW55~f&CN$TM +H0XQ+&UzZzk#okM?LDNCS|QiM*;<(Q?moR*iS?jsniBd_ih{I)L*G@90&D%q?`7(GE&;xn+O~64v>r2 +j#;f5KyCkmK*B+x$hN~_6rc8a$i}nQ0iVZ=nFcF&(E-8Is8BPOoYxQRAgvznH@^MDyr;Arf%xK=u&+( +=Omf}WftAO<5JcD3S_myFlW?sDGyfq0k0A6Z{G8u0)%v?yZ;;Q=<$r|r4lMr5R(SNBO-{F|krE8ZDkMzkuHa1ixvK&Jh>k>oNJh>!H~1@jk$k7q(G85ylY@osn{ +jSd}$pTb^k<4(zh-82ZN8ZXS=yN?K9doUk>=c!YIAS}j;b6}jf!2{el7*uVn37ub($HDGF&$=%$h5?vEk)O-jiIp;o{Seam9?oNROmv1dLVSX7_kiF15mYoPWNESm +{4`84=EEcB{5XzME-ob)pjzWmJ@l<2!7-y1cL$4y^;p`6_b!klfRYru8<@nRlgG7Gu8RgDjad^kQ(GJ +qxnsvgd2zX%oKKY5fpjR>uci2O$48LfSx@al!S`;LNkfJL`^C>QiD6?a` +SBtWt&e{Tq3%65CgVnDRUNx)rfnYaNO%iu5*;q1%nthRWC>(Y`uBfU;02hrzPtJU`v=fJ98`lQg6rwaq8ph@4dS4z&sew-(l410f0-vq +Bw;e<`9h*9iRW}XX{NO^oVEpS)4n>1W0Zl;~oZl6SJ`(3Jc{&0o?#W#vi79=m?#)M +zOzq`ZN=^EaIgW~J%+=LyK70p3tl2l*BpMcK`5A`QR7{iucLynIQ=8B&|lx0G+?m(9DX`cO6@9!_nUB +D4!%C&AdF1;HD)^;KOZvINcZ~yxsc4brFdc>&Gr&9eh%wrBnhXV(m`v&J>2XWXhykUQKi@=}VR(Jx2MypFhD2VT_yIh5btPtswUTQrbPbNxq;zpq4`3%sk1%ffj_a$xQcypT +arQ1VRnq#L`|CxSYGc&5KjdilT=xkhSz2!_G~PT9b|#T6+}+O-OYx$BPL$7CZGZOm!eACM9Le9X`I +6*HJ?e)`(cp2v9`tBYkBxhw>^6O$ONc=9!+Zn6Q#cg2Cv}1-Y$=(JxLG&|>3c$YXrjP((&Q`RU61yIH#Zjj56DQPoRBg**n8Fh-XCjG55`6y10O(QPNoSBx$1{4+~w{alVNS!tzxwgH8X*z +yOgS+@Vtx;b-fn->Gdr~f4JesEqtC^WUNe-N;3X*IWaC6gVXMs2Vn_>8`P!Bk;-ix3?rb3DS%~OR;Ok +`CCq+YMu^dkn@f0u)S-_(P@0}Ma7kQo-(jrfVctrxPcj?24@qHCS@Zh%>EjK}$QW!@bW+gH}zTGwtzKier$Ud7|d&$rQfhQRq%I2UE#pji +j0xinAdeUZr|n#)p{m-h)ePbEoM;VLt%BgGmt59>`b-=8ig}*J4HD)optxWgcNt!^p}C5Ywy4RFtq+LtaF +O&U!QX=*LMD;XVd%`>TmGjf4bH$F!3*~^V^9p4Bz1)Nnj)eLpViJBu>K=3Gc@V0w<~c#~ +PKafj6AxL6Z!zKNPY}yMbXg@kbTIA(2u$m^`W`lPoO@yl)#RP3yJ+iCr5dP`W%Vj;|P%+a56!U-hd?D +0qvjSMD%D0pnla7ki(N^tkv3x50PAIu5!7{k8oo7&4`!hX$!wG)-NFHT;ol;vTEonTjr|U2q%A-v4%GeqT&V-$^?zmx>v`;zY&s9LrOFVQ2kYSn +mgs6ZoV1{4017_!%%VeCzu9o#c?Y+#q%FIX|8@J9iuvHt&d3K1)_V+i-nOw` +&=mG$ZOpdOWcJYDmtQhNQmUEfvb6YZ6h{qJ?}SqVo``0!T&Dx7uIVmjzyxH*}qEvcf3F>+(poIshg`a +)Z{1b3zlT;2uOhQyP~I-!zSxX^w*1fP+EO5OYd}${fjFs&K2t5?MJ@KkXQ5TNI8q#AC +4wBoVcW(c%5`?zR=w;0ugLt!H084NhO{dcpbP)7%i4nllQ5j!k!ijLL9MYs6Y*gk@HD6_D=rA%81J=4 +GtW$?hyXkitw?TKy%mgwvZPXorq+icdXI-Nt9V+qcpra#k`l-;Kq*iZ}l__3Vf*9?+F%1%HL!3{WVuy +orO-aId58U^8-Ko635D@HCs4kI-g9BW}dFa(@NKQSe5}UOZ%RB2T#6LT}Z(U&91%i^2=O$Z8Dg~f;)m`2?yQ* +g58|iaU#I%l2hU07ps@?fOMxT_|=rJDa<{aeEM4O*gu-hHNIa}qFWs$N!X3j-M2rHD|qI7%HCm90Z_NNP|fg#&bF;Z(@hhw|J$Zm +om*v2`NnsYTt+k@2!1vv@2Im>puwA1zVm<#7%mhx_@MIp6^Tvi#Q?C1G}zMt3T;@J;T7GWQqPh9%z~(CrgEcXkg6;zq5|P&oBW;L)H5kyr +FA_C)d*0AC7eoiBUbPVO^pzkKHDJRBkfe9#Aak5DVmhYg!Wc +A{z}Za0#*;LtRe)Ri1Uzjtf0_H2E6k$F@uL~Z<^p>5s)AM3n@$wuU5xx`V?m6$OjcM>lWm6nljd`uY% +Lb>{8hi1s)ydxbRN3btt_BIy~PvGNgR{sbWkHHce$zmo4GgJb`x#31@C!^ysR3kvqj(hcl1IC5TfUfz +7dTiI>FNyu)LhM)6Q=1Q>Q#UyksOkKCz^T84)vPDB{%7W7hBscTz(Vg=^>r1`Ke)W%fy_y=ue3>!NyxCQ;ZAiQ%kqhP1R!}}DhVCVMlv>BY(>cA`BOu>!Fxvd&)Bza=J4)_bih^8CE9tXFz&~ +OKV_zpDFZL8_tHV45QtrXoSb$#eqBKx!GPEifx4P>rot*^m@t*{)!o04;|Wi|hjNKPlTy#s@ZzeE8MH>#(2DH68Qof~M&B7{^UD)5LF;h5T-blF@ZSG;k4X|CGwQoYU2J}jwuJ{F}}ChixSKLdXF=@06@j-z@lLJH +|m4@Mm%koh4*WR5{J8w^k)70b>!zej8uoGCVb$ecO$>9g@B`{746rQ2Q_qEadxkAdmu +`vuCQj+&J|w84zqDh~N$0n=+&c?o6`gy?wQwqhvuuE<7hOXKxT*d?c^V$t1$9;{$IxEmTRw}Kmp`?8c +zgQ2Iy`Xhv%gPu{NNNCMb@ka_1phg-~Mm2pP#ZS|LeCK`h&s#*Nc2w>OXnaclH@YZ~{U}m_jKS +rf?J`K@y`t7>0HoJc=Mlia?2k#rilSl<8CcWO4= +golvN-+@DD0Q9)o&%d!CO10&{=TRthQn|BEJubru+5EpmI|tUjO74K2E@wxhH1e#KSjFa@&*NJ@+wka +9-`_#%$besv@*5z?sTUbJR?FQA~YOp?2Te-`yGTtF8UrodJq)-}(f;r7wQos5RV(I6b5JLGdvVrMk0@ +rkIsP5J<1i2iU;Z8PIjv4<6~*lxY9>5nRIpz8$~;kQI6e;`?Ig!SG=@_2v<&l$|~# +c0{E+Z_IIP!zMa)37*m2n0x)Q2Iz4uBI1UGeypt_z+6vu@Ec+A<1*LXd2xhdxTdbsW(fuiAJRV+Yf~( +)G=mPg^YuPi%5!(8NgbDd6zTr{6B*P?SXS@*3ixb*iP?Go5=wURZGunODNiF!N7Vy +evo)eYl7)s7Ed;Fh@hMCTjA~|g_Ukp#1z}{C$x1v#rvq%0Nb*cDZa5Lw|YCc_pegxUjGtUp0-qEV0<- +Oo=}}p)*A-M#n>j1qqLG?ar%*5`>)Iv^#5P8^@pwfeY5ow*7dif>l9?-n>-RxqZYdP1~Erubk?bwrV>hcMB#rQHUZREsea2s{sLR0dd0J%2antN^Jm~ +rB`r(o1U+Ss*e`f<**zWgOm^NcYLpF;ysM>_+-d7zwvF2)I<8af15A4FA +*&eFPtn5>4$uZP<^&>r^?G3p=VJGD24D~to7uoMLJ!LUeLfe$)61kOie;#TmZx?Q)(@rA#=b<%!a^Au +sm83_vf6ogTa5<1r;YHAH*TT)_tdG +}|0(@g+uMzqRp;qj*8ZMaH*N(TB{Sv03yYMgtZH*{sv=xU|q=xT=oYit|ZI?$YrNT~Sz~`0NDI+M(Sg1)t9kldIOWf~FTEdV$r@mOGunvFCfh=8x##McFWU1K6 +K+34Q5e>rgJRsL^B49p$1-Lt3OTTvocqpgsqOXWx$_+C?mK99v%TMq<>$1cZL-lek69Q-1F +s&1NR!Ly_L^#_}?N)nG#xvFQ-HzN3)Xo{b(G=!`r~B&e^vin>*xB`0gQ8lpg~PD-y$hCkCA<9isYmtRXSrACHXZL8Unz!tfSN=i +%@Ib5d`wjgY?mN2aSM;)b=QE9Yh?)$iA%b791JQR16N@dxlq)g*AOTI4WBo`oaP_AxUBu}RQ-DrCa*OFW3j3xrg_E#j_2$FQ`;`UcBi0z5T4BWWGo(J(j7 +%Xg(sEEdn)HQw5Xg=3OsRLoq^B#c^WpH?~zu+p7iGkx6KJ>;(On27-!yM#Vu +3Mv)@-Da@Mmy}9{rPkin;e>$Gda_pix4z<{ISCSY1^uS??v$j5^mHn|FFsL3%t8ZQ|ne=^j05pDBcQX +5-$#Mh1TLUsvGqrs#UY7x6@SrZ)@urr +d`44Hj9oKa$SHhg#2@sIexJ9@UE}#Z*e^`$h+wr+#_LAjRj>(9`GbrZN`w1LCjp5}J;1C#Bjr_i$p~A +}XNq}65Zwvc93FZ6Y$lMZJ^0xUjx}Dq8c;w^$P!+e!=pt80FG15Vbb<#)I$UoCkz|qu&8riAbtLr3{1 +`)ttbdh+p0`V^Lbh@NiawMi5U*>PN6(`9=1*ST-=DbC})L(@B +lrsuWQYR7HhJ=bT!{%O5fx)0uX6AgkV*Pr1z&XHErn6T^tTwE-~rxz5wMX2w?zKPrDD(%8j~W?Y219CrRWHUh>xe|)Z$kdOAL#9`6qKAr4`nE8C~4gb +@Gae&z9VMJeKzR3x2>@|LDX|RQ2a4eTS(Km?B9S0uhu#aRh~tHPnPxn6-_NBq*FjC=~u_FI$LgoM&Rs +8?D$V*%M`$rb<;`v?mR-2Sd{@_GSck89V9ttYO~Yu&^~q6W7FU4m +_8m>~J5n#MYt32a8Me=Mt~%W(mxXg;~4p8y=;cU(4U0gv#~;yu)58$tAdKLy7JF3?Twu`6b5{Zeb +h4@ruxvaXAiEvX`0<9UVW)F=vz?%R?HP#mD2K2XwWC%yMrYo|I-}-KW^#o?C77gqBR!NBv$Ry<%2YcH +7H~-Nh#i(=t;%B*YM_NtT7Fn#tP9eai!>E{=ekwOTjT|%ABhS((rcXc)N7G+BC-cyfE9W@t69Nb$U1J +}S&<8feOt5`L1CjE>8hL_DpGZ_R43glQ=gVEj4st54#O4XARx3`{urU)T$oYJDxqtxzn2Q(X~TsT6=Y +rim_b%T^;#FUVShH_B6X(AQVjb2uH6d21dq%M?X;LlTF{lHplKN+n!#Jshyrm6Y6d+y=>w8HyFz@%S; +pb@aM<{LMlkEeUVza{v2yN8woqa17%gaYr%AZM4E&OrulM1;)NAA%^U;YoFwm>&g5@SE%d95$+0aWFu +)8~Tm`E@6I%2wAS<^e7%?U;D+ac%bSLzkSMb-UVVl2|xEWyKlXbO9dz(G+p&zFJtwAhZ9vR4pQT;T#< +)7Z$y)3e3bfY{Un`KmGn*P6soCP(ZZyTt2)GsHaDOg3>R6NnD(I6k>vnfevj(b-#!JCe@0q;lvK^tI} +lf~S(msXjZSrh1p*tE*IadWaZ;L-G-*h}o>iI^rJ;nzZamh~s%HK*p!yJq*GS(FShfD;iW(;<%iqXaT +8;eZEo?zm=y8L)Wpva*Y~YxmhMmLbz<6ac$|iVK18*x6q?$2f1+tj!^54sz>j-R-c +FwH-Oxr>pv2b5YSa|ze!V{+9BWxkv}mCmF9mk6AX(|F=>*_yf!AKIS8Bp$DwVT3YrgdLE71`QSteF;V +bbQJ6%kQf8DBvc4?J|2l9-gkn;fPdxZFmCke@+^Ke8%*g#Zm5wo?#!t}WX{)Wl~W>krSSZAKpj~14jCc`0zI#&{Iw>$VS0eTucH)cy)+uw8G2H#>GkmP(D=&qe(7FM!o`2&*DmkxkUMuYZWG{@%HNgjc^f@2?RSL=h{v#Yq&Q5Co^lpCK +%S*mGLg#>-9j6gRc&Gj80BaBB^N_Gzb4yzw-Ck<(gVzU7jj4a#gYy~$lu1>Fmc=_W?7$vG%V0u;1&l3`mBG2Z8buLmJ;%bSt-p1}(Cd0)|gh`o?NVH?*uM +z;;Eh>Y6g5dIQj`CASj#D9vg7SJdE1YxQF5Mi~G{5h6k7QRPV*2ykHu_`4&tvuv5M#Z0@tO!yTW!_L0 +u)(bF4wj7iPj&_TY+HYKR~yp$mF)13NDG!8Ci&ot5$EFT3?PiV)7%~)=g4v-csyMKS9(Q*Ey?;@7GlpC3{}LQuOAyPY2^76-p8yCNAE?4{VE$4O|~3L_rXG6U3ndEaT+gz*P&IiZre9*4uvRxUHYLOeAu?Dx>4UnqX<*JeH;tUdiuq2pk8W4a+;c+b0)C7tNwmJ4vzr>Md7(bj|*(g`fXhaa020Ev-csJ^Y +pZWDzG#zNSWWJ!KLZwve-&Q;ub=Oqt!rAW4*v0IbaG;a|GY)W$h#)^XIGQz{XF3M^he!+fRS^h9P +Fd3zjovq5a7fgWySNk}W&IWq#KoMFVhgq5MkDH=2=FHb$Xty9h@@?Fau83Mc0Us1uCe!T$xAjI;*|d^Up +KW_<5+f1dg7y(dG&q7OShip^xLVQb~u7z<%GR%THpSH6M~QsmyS6cW!szXp^8$4Nn1a^Zu>)pz)0oU`J*&nF^ +Czz)itH`pxc``ogo@FqnBHSZ|_weIk?a~co>J$@Xki@u~$AUv+iVPyT2ne>e7Q^L&>3o?SR_-&tA4K~ +==n)~AuJr;P$k`|Ya0BI#q>P{V_z1t?doo@^WM)xlAwUor_K}Vd53Q~}^pAPc61bt7o2Rb=Ke;aA>P5 +;qFwWFM0&};wKheqp{*Zx17;L?9>%m^b%e%n-+l8-0;t4aD}m1IHnzxw1=cgO!L`oDjJL6G|G`!oO7Z +|RDwf{*2wB>rvalHb~|`}&?wjIM}~LNNGes1OaeGGRpRQzr0D!5fS=00kyHB15+M +U>nyf*vgF|{8Lm&?q|TnE>pV;Y$L&j*l>L39LIYJbst*4qO>sFR$U<-v7)+Pi4ma4&Vt+7B`aLrGK1- +MGPX}{1>WUdRt-oL=fNVm2e}xM9>xK&FuT5sWQE7 +_&2hFH%Zz>zh@9DF^#-9~R+WMRu###0de?Y2E;;X@%(f7Jo{V8B~g4D`4z6dcn7zlh&V6nk>^)VFf)y +z+Qyp=~?Wg}}KpC>A8UdjeND;$kU{O=b5zFZ}{7)%`^QnrS>U?5U+;65s!WuOSQvJl3)WTS;}AIOk?E +05cH_3h$Yt@RV>RZ(+W-Ah$^?(Gr6Xr_N%?1o7!`1{xl?mnptjjT{~22|4mKhl8oru4TRg!W_QA8**t +?icV+ZrIQ67w}JR*w5}4@K0{o&+ZrSXE$t{*zs2bJAjXg9W0(-{29hjB{;}FZqm#H37^WVu=U&P4A+9 +@oG#bn7_do5EuQYl43~_`23pzyCQFkwz|9J7}Y>H1FI5;()0KJQ=%a7?_6h=J;Edk=t)fEF`5T++Siq%!E6?)ny-n=+ePG8Q)ti{| +SK7PZX|dm)QQ_ktLyTz>5rKWOLJ3aq%(;FpvMJ<>+mpv)XsZ2?NuQCaHc +@%MKJ98Yksza5lSfAENS-VH1Y#t$Ae=)X2$0f;x;<9I%_M$cOBq(Z#N>hp`cqOaBp8i!p*6#?w=x +eB5C}eF#355Jh(NfuRsI^H&8)^Unayu@b+M1nL=BtDkZk!A{lHv(2YI6UW)hyIsxJBa^QxC_PiOobu* +#ZrlN^OTfq<~HaJD>-AwpCfGZ|8TKxLd`bNTC_7d9pwB$Y|b$w-mZN&O@f9YS&+F}nIUB3M)m88;ga7 +m2&o~p7`_I5D;*vvF8A5IteGq3x1oG$QZUiZ(PE1XVS$h7^ +*p4M)}mJJdQd?=kF6+WJ2qt@`4e4YZxZN@^|>=$At7u&(rA|tUE)D8vgw?CYHL!a?^s#9;*?AM_2v#? +y@HDi{H}ah=q~O?6N47TT*1?)DCa`A-h9vYPXB`W!$r2Y18fRT(i-x{Vm?N7h5L@4tuLx1ks89&ePjB +*KU=Hh``4@gPTt*=kORkmc(Abkqy~xqx)_*j#9rR!6qA9s%po&>aPT)$KVuBc>NE?0h9#PjbaRebJhT +J?trs1K?9|Vs;C#J>g;SkSqGZ$bG}E1vwpTxdyiOE7|7yLN9$;p@X#)<0tjPDQH#I+$25)qQfDaCvVk +L26V)Y3%F;1Kt_if*}XW>D7N+oIm$<+y97DAEaFC3$P(SHE!9HUEIV((X6CU@ykIov~Io)#}uymdbR( +0{Ct}+XlC++X +K-rlJlDg{XUFk3#s>ci)%;`cyEMHU(o;;gl^f +eDCpKd4B^+x!U5-gXJH$_*Xjw{%VVVwL@Ur;@?-M<6PGnRh}bL#%^rJ0ui9oiLPb`O}HWW9qin!5Zt8P6FzBN(R+!r^eG@O-|58N|A6&Q@kmh|=kJ#Nh{+!Pt@7DvvKG|AzKu7p8p|<|*3p(#?9rSNhPL*_dOAcTr-&bHxd#F13NHeC;bzNz +`kL9`sB@NhX%j>&>oT=l+>n*1QJ(bwp(i1%lTx?=w3aTrMoL5#ynJ1R`hs(B>>QS^Swmq|{#o^oV&v` +8h)dR;Crbq662?y_=7k-?A +C*#fLVg7?E$=5;$K(nqm)Z;5B$0RFj=bAG710MKjx+aa$Ux$J@j;CT?uw)XkWr2|UKv@M0j-6X*p$R1 +AvA5n=9WAJ55_PmRm-VS!;gDDJQ{!J%F6e#os_A+lz0-7nnI{Tm{n5G}%;)+m14?b_t(u)5boexf5e( +i9g&(Z|Wvyr3FDKm$k@=(xIak|S>|HcmZw}dNcNhX?R!9W!M%L2D<7mMi{jge4sD1LN*Z0>0Ys8vjSh +y2;Y?Hy@g`PdAh2t%<>sxhxLeIzN3|z5Owq#&PE_Cn;$-=#j<~Un|nTUqi9Q3r2?QtC3?i +&H8I;;ImR#1I9%rB3BN(j>6wObrS@lA##5uQ2*#svl2H1ii +S}@YCfmbG-$Gp*_p8$(_U3(DQ!7E*Fca2`9p?$C +$RQ>Et1Y(Fd?596?qiG`zw(%3|dRKDU^6HA=TJ?-x3bz|(T@IvnYSzYV`M$uRlf9LY%JWd44B4)f90^ +!eNxvwyr;Xon{LfKq%Dx3BIGa>xH;i+;khzgY15F`)#3li2$EfN+c?Q3yq07{Vx+ASoOtuoch|82(cd +O0Z9-2-hGU+9qLLk +V#Tz&bcF>jliiCpisw5z}6)NyOB2S4eh>!NBR2oS&cd6UMzOUtQ5zPoqk$=Si`6v(UZabuJ_C4%E<;R)3^F+4WkQ%r9 +WFceRDl-^Hv7jY6=SL+o!;Wus$9)Ne`dnTZQ#LnHgs%%4AESSOZ)gAL#qV8M>fVLLztv5NWI2C~| +1m$0tr%|+0!0Mh!1rBPs-)b$1ay0t9lM6DRt9WiiXlxB{TW_Y*Y&t{GZ+yF5qt2(&p>v2OwAE&-@l2+ +*K1OrCwyJ-a}*HpJBc`EzjSCZzwFTZVGJJ3BnWWg+q>KcZWq0Z)7Vp*cJQcB!fGCE21bYzN~$WUU*48u&l00q8zcN}_*C>avyih(}~7!W_13w`-Q!1y3vcz>k10zV^P +sQOV-Yc)Zi*Y05UwGd%9YtU|W32x2DXL<4%h89`%Z85+Ht%LscY&@P(4rnsho~Wk}MCdMby?8kxFR~i +GvK)x)!c7Ad5oGd!9g_fU5IFJ+pOGJ2d@4#5tnzE4DW-2`2lvGHxu;o3mO@YYbeSX!$c)v^za399xr2 +PB=~6xA^YM|)R|MsGk7%2mz29Qc)?bMw#;V_o&GCr%)5U39^rZp*XkB#@Ze%DXJkWnW3(SD8W{)~>FZ +&E?Twb|^Kg%MSp(hs7JwFsDKS`4DJm{xW3Itc7G9zpSqLk?ebwyr8mpRe)Ez>+mm5=tt$ea^ogw(@1* +B1*`hqL045y@Uy5SAi9jUXks*_QZVJ!I$-mwX^^a?q}p`e@D%4`g)$dG~bHpwP=ZoyrcT~Ln3-A5V;GWH19U-=l)?5F=yE;TdY|a_k^Y +-ihDRjFewrekJI%3Jz9|NM>G^aS({C2bv3;xnUMq53;dVV@c>)JkI=J2+`@?!S~4R)u~>k=<_Xwd)g) +dkk??qvO-o^SEfH`(o0If4D`Igc@h`OI)1g=eh(0C{wQqvC+?V2==qb4gGJ-9X=42=&?b%Ry?OTmIQ9 +7{df9Yj+-B#=h=8&b&{6y6B6te9XW5JotG`5q_M1$0*;pEtzAe3lP=9bKe19;cHB@d0TvAW+t^gtUeD +}w`*SR{Gi;jNyt8v9+c_a1<|mj46yFh)!rMV|6c9+OX(RIIZS`@qYCI3SM!p@nO{Z@XH(H#pHPB$bc{ +}y1%cbVn`$f3v#Vz*P*s-LQGbeOBme`nCWhVwkgK6XxhivKnw*Yi0Jf-lFJDm?o{np9!VLwKW|uoVTF ++RV4&X#y7=OCP2s1?2P@4cGqmw6hI}Ol>L&s&Xo9?8{^r^#XTxK6()8WAhi$e@xj83gUX1ZRU +U2H!i$bw@!dl?4S*9PdF1lZ{tc$R2&DvE^5eRU0%I05s_nV9b<6>!Ctp1BDvt781V_Waj#z_+9}uxGW +ut3B(3@T_F<;$D`ky;^>ybdPzA;mb7t1TX@hwddZwqBQmPoi_yIf$~f+y6x@=t$>GT{W`7wQE!fT?bH +z_q9R0^vV=Zpf7+xr89tegHxxWZZHj3}_#V!^No(9u3#%tH5wFv2f!jvbXH=qiPriV!A(fwGj@6n7H1 +6FejtRkWjy|EU-kgrm!d(0ZhZF5}$|{?>o(u9Op{f?^(RIYeThAa5o;DA2&0c}_KBKSbnBVE6`pRA>* +BuZ`y;xrQvW0kb8#KPz+EAf~@tg;AC2=WHcBrCCW`32#8HhoQdw6-8*GYa&0?-vj_}Y($elCSJONKsr +$)(X61eW$w$=+w`h|xJMdM`T->e5gDp!U2a&4>EyY``z#kz4q +-`6R0;mZWcgGm|K9+N#Zpq}#pG7Seq=^>60x|2JOeYkL3J*Z3~mzrs?A+JrYYJxhc{Kx*q_AaHc`o)` +pU6i)rT7W^RYR?>ZXW>!YpMK*7I~PTPgj(!C-a2irp1gv4k&6W=A!Q+yktzD+XR9Wb(ozA3s-M1;54G7R0}(%xuvv0}&h7h_4A8d)b^JuzADtvbwC#BJq7s%0r>SaDQ50G(Tj9fG@FSxGO!L>|PQ+YMom-)2wY +UhN(H2cNL_0J;CD^Y1)O1I2u;CYymXWf}K2D?H&!PTit;3CXG`tb%m~qB+@@b$GXXV69wmr57?`7U)? +Ae&Wz$RtMQPE2hw|Ao~2s6l=@M&-bOJ$n@N*zvQ%S +}Fk+{;Y0fxutTWl2B458hI`(pbAA@=G+1G&wjPaNrUs{S&b%LI=l92sZ{PvzOIrrLozUS0ij3Cta>Rh +l7hMwJJLhr-LOE{)opc-f)1Qaz~nmy3H8MUu87ON!aI5@}BjK(B3?7>+u*CrrPyfN`R4ie4gEDbwKngeLQO@tB?m~VA{_ +c0~A4}PfRyWHE%ExTvOLeBcCo62xLbE@k`*WzT2NI>B4+a*gDz#IvkjUN+%mAF0lJxtiHK`qsVwe0zf +4hc`7@cIkPi$%7NN`OU$QM{jQ)x5Y-pba31GtIdN7j5Y3LvcO#FP0ha68*TA>sz3QH+2@N!O`LrnU_n +W=g_DyIg<^j0`(Bq0LVS!rQ&zUl78>#r8v>40#2SGf}DhR-E18P#_*tJ +m+LLsux)UX$w+3!ukMjk4RV=UQ5&{XHM_zijfr*g)jxUDhlQc#&k3R53zS-Z<-^p$E41oV6a0?HJ_7AMe#hLhyal)bQ?-N!qvk6O(KyvGYVbmLWj5=VmgSa6)dEtLY^Nqc# +gM51+j5ODWsntG&Bug{i)Dr0brOIQw{ASZV!u(#^el0@veE)+4qk&53O~e@4AWdp@4-9AWaNZ0Gl5;q +r9!R9NRRMEQHrsCHqY1C=lb4wYLVBmz8?R4yiA`JN|vQ}w7&LIPT#4wgW=MeUAF5YG7*YBQNbc9_CZ>P$x0?|aGnjWtJrlCh3 +J`FI{_Ib*wuLnGfbR|rfoJV;|-iRP$=jHuYF)pCct!bdQq%QCKWqrD+cWzcHUlASg@FI$%nj)M*Ds;w|EWEE!q9(t{cj;E_%rmmCR0D;M6Djy|pwZJiSvdotbhRj|E1Vr$Gzwp0!rY+5DoJ|_~}v +qwn!ALK6!7b3e!s~@#b^vTe_=#hB*K>5Ex(i`BG?ZqE5;>>*oiK0D3i@+#v1>J8M~ +7wvv~yh*SDl5nmf*v_L`Z8tLEimDzfG~3Z;G=Ct_%lC@m@73!ZzDldBU|xmdy9!qbx5CrX+d5;N_3@@ +d$1*DvQY+6rm%+xoYgBNBb>4p!Pygn&9fL= +=-`CR`Bg4E?TuVTgy3yml@JX9t4?!ORV#)XGiwpl~2ua%a^b8-2uPSx}QKGfEtG;mB~iEbdS^@;ALtg +ELP;Blvlp1%g9NITm_=L+hX;tp_l@94J5pE0)jn*I199;8w*!GJrZXG@}lusW7L^Vn|IgM*x(-gDK25 +&QW5jv`)1`O5801OILZZFlETskD0U%XmoZGFKu2?W6`12u;q?|MWG0+2#TAZCad08k<9(HiZtNwl$6l +3}R&{Ca#Q|BGxicogZY-AY$qG@gYw+eF=_w?LdeEP-N}F8fgoI9-*@}UMqGAZ(TYslzsrWeHVg5xn87 +=3rLbOqGc_jM7B^ew;vV%075ySDWz6__s(I;);mKtC^i<1?V9^pg2AAq8u^r1vmH3YUX9(UejvhlHLwh;45X$o>S%0)Lk?^KE@ +9y4lUFl;_d4V<76+GsI_1BK+N^yI*o<=#xW)_U-b_8Shq_v)4zCT7eSa_I5W*3DvWhNR}rw)gEl`D~= +t{ImgHuTnh&d%Do7_&F@1ll>Pi53-9=DYNfLk2~bdRvUBZ#RYC-xJJ|$>$gUI?w~jF9a8J`Z+xTe;CF +5j@E2@o;GJ3xX?fX~-$Fc1J>T*0&mK82#rpsj_CxHf{Q`O~OU>?!hIU@yA!fAPHZdTdf)gU>`6c2&)@ +i4~+*amzoy?2rG8sWCYRl`E>dh2z!3p#QhT2wEwVGd_eG!u~Il)_SPhW@HvH!*lo@(Pm!pd`gk?Cgew +Ne~<#i-#_w@M7Bs?>!G%XAmbDB#zlDZQsTu4ZMB5kJmx9pX$5r;wA@Ns#r?l4myGHGU1sxy~{8TMsLP +0YQ^O_mqp?U>_z^{+hYq0F4xO4DqtLOdo*CB0~LrMT;<2p*?z9^8YjZ#nKE9{4SOECju6gCiPJ28sihRDp&hbXx*B_Z|DP>eYxI+bhhaY|~TahpS{0_Z;t6F*r+vUp6NhNQgp&U-Gp!( +U_k=gHH(SdE_2~>#>-|rO$#+99R^5o_*ZUk@~W)hLgjm71X-EBZI(LQ_siI>huAeU!j*bFP!|}0%bo{ +&;L)u+5hQ%{2NI7!yf(;){@XZJQCfM+>>zQL#NorxL%Ph7;n9^E1=!v@8At6Ch1RMEtPI9xCFFy`cnJ +EAZi~yLB#vaM`Bw(j5gr8Vq~1$@MainC>Q?~tVKWiZ?Jvp&nC~e5vs9ZYwcZeID~CU*{$6;+6s-E+Iz +I&+mPA|p23E&acs-9hS2unP3k?`lD^w}A^(FQf7xI&ZLs$K{1(=J-%ztcxaUtGE%(vx_wOO?hTwpI3g +K=X!+s(-ZAEavzlF3nOXb!bj6jIoJ~FObkIYBY45V<;3T-#iPV`pxo*8{hwr-s{pU0*wX!lws@H?3&H +WYoQer|ct6F>P(EUqB4QNG!ByKnp3T?7AQ+j~Zq{XY2$D3(6ypV`-?mwe~lZFO94W*83^?!E(UkMpqJ +dSdLwcZAu4v&?X?WnCBq;ytB{En6RqK7X)-bdcY>a@0TRi`m;^&Tw&An+o8yKaxJ7+Q#?T)Y$L +X^T|LM^AJ&iT{T`kO=Jr%s;8)tae@lAzq89**%Kn+=wdOM3xe-1duqeA@_vatxa(wNJNj0IC(DwN*Zb +9+@D#N73B8il8T!SD7e#ZjJ1T(rob9UoLL&_3>>-(b +J@fZCit$D3uIU5IF6q2gUqp4t~Ce__Wdd^7yXp7Vfr9o4 +N?hU|lXKLo^rt;z=Pot?qXx7;dm$gYvUi+e%A){CmGfQIXytxh^dA2;|*fIgdtaY)2Gc^b`MEpq&=UmpunX|jiE1l&LSWuh^VJX^e(-JtLD4 +ysYK#PE{>!93`dVP=Q2d|a88yy-?jkSRE{?|K#v0B9=Ya4#XmZPJb?kNn8z^?hWD)_(`qqxS +3hnwIZr#KDJ@g$t%|btV&qfgX_B#Vvrwj^+)E$=b?F>yV+ZJ1K{#GJsa)mJ$Q@eLI3&p(c|$Nw*#%OP +V~ihXIKn*UeYg}+cp7RM{F +cb8UQ+FB8qk|O;>Q#|?s=9a}iMx2luztAL1zEpiT1Ryv`G2WuktxNQtr|>H?7HL?e(u +z#V-f`bIQQU!ctNcBa$6?SJn&=TwAq#WF%4d@O0sF}pDklhgV4gwjNTE}+Hj3*pfq_z6_tj(U%v)W3L +a~yNysq-yibDkNgH&7!mTbDtOj_Uh-2`OmX5|>q}~5&lmzNC$+g*zZDVlW&;U~p(ebeDt~!z0x_}11z +pZB^uDe2qXvqMV)sWi!~D2ty&+D+jvDwy8Zn8it{&}5UEZt}w<#T+&PLEQ>e=wcC!1V?xesQb6IVfp{ +N~Pe5-R$B)KiJyS+wAudi|!o&>`*5M$?>5Nq}WG2Xl%c!)UfU92ZA93Fs}dLfnB^MyR%)0$x_@a_wsq;L3WBd~#K0doAkqtCo3z^n>)P>W! +sA*vM0YZ$tI+o~MQ+m(y*f{YgFv?V#q<$$`P@-Q=wPJ|WJjd)8-sqwv;-i?jcOgnrt!=MSp<5+52i?X3d;eIGOv~=;)0+K +lZSB!D@v|BQ4Ogs2J+^*1g4vw0hw2a-R2*sW#nS*EH)|&nb9cL|Yw|6&@_X6F6KMX?l+lIf2>|=0jC4x}U}oA4es*^4_d}#-vT%Y`iE} +NAC`UzR+B%Ko3h~K_UUNveV3_A)J&!0F9l`M9#sHNmOtmGlVg0(^bYU>;RVb*+k#*Dp%mkF=#qK;1gJ6xYG5`U(^p`M2y=Q$4Egv*yenm-XrHIhtwJGqZdG(2v9|>mOJDA +prg7S3fQe{OhEDfPj>CNyS#pD*ObjtTxW7M~e*S6zi-?lb+*Oy;_GOHC^=TqCZQ)#%#b-MqU-qE!awc#zbmGZX3d9 +a>TIE~g1iw98*fz9(85TFo{u=FnoQv#|uXh(FGw1;*i4~e<#Z0+@qn`)W-SM5bn$KGe<6JXAl$$KV+A +ZeNF@}9rXoa8s6p~B0Y9omQq~zs}a{xcu^4(oW)ryOo#TI--r8swAP2#UA2lj7GG<5n(#;K;)oS+Yd{@4gN;M$uNyV-}kp2dw}Y(k +@GT?NAZkc4_ldm3sy0#+x +&|tn@GATpa{5fJF4d|*h*pyR6Sd>I=h$sjp+`idX;+#95)DzVe#y4aQF;vBGH`noO&PhDS%QP&34A*R +rnZjcp0wrD-^U%*?v-Q{tB&FoV}tawRpVGXQ1Z!vcl)Q*@0!2XxsHUYNu4pJ7X!BfVz0ZGphI#&6qcW +l-rze18}UAd+=HDSs?&M +FRRP7;ARDn_I8Y)9yO8bEEo3B=3y?><*G=>6i$vPIdz##XmsrfMhD|v>+3Lhgr_2N(Nogyyi#t-~jw* +_*As!)^6*xrBk7_FkP3a#-@+Q=#>Be;uIHWr33aRBeri52S1LRhj#J9y>=iYh{`!SD&_*o3v~Yu^v~zRMtOQo@-wx$75ow+&8?f$ql2Q|*nsidX!wz40s58iy9sZWQw^8v+aej +Q!mDnc3gK?N*zR5Qk8t8U4SrHRi`XMlX4FeJBYihZbMpes?jrSc;G1Ukgn2c3VkS#<3uiM?f<3#TytBd1S2R+A}9pm7>-gXv74x$ipOH;r?DmZ)sK%{P!b>QGDz}il +p%hlsG}x;emLnv>era~ImKx7A@8J*#Qp)c;!pDbL$d`XNAjPD5Bjd;BV`zdN9O9F(~5tE|E$J9#YeMC +{J8-vIk?2A5476h)DF}955H)L9+%ksFP87pyz}hcie7mEsH3lR79Yj00fpK1Y$UR1~kV<`h8a(_+fAQ1T>Q7|Re^E*lz7Gxt_P8FP8}j5KDWo*H{>ICKv~>l^mnput^DM +Sk;CfYu2~qC$|^5_mLg?EcJWbd2$+NF&!HUZ+Mv+StC@lgVRAO^<9qL|PYCn}sWSmo&5xrhT-7c_ce72yK)v6p!rI^J5Ruxvr%vt4U=F=wtTc3&<7xBBcouD|K6$cul{j(2a>5In +6%kxQ)Ar?ARAq!U}JA-`~bwdYHE%iF*umaF1A39ZiB3g@ExBS|d3>MIDQh7?j5{9v@^C%`H(ivYxiFQ +v0$Da1j-X*=vpuQRvP^7!5kb9|1p}&;u`xyiPjxpTtFo0yZn`A+xGOML*OdMZ@3n>|ow2^)mF965X8D +nrRRYbnwahWjeUh+B16+PV=j^%*XBJ1eC=SJIwP^wwF97{?dFK3N@N +Q}6tt(}d#i@9VRa1NTZ&az5hNSQzoEv6*mCM&6vtpq=mVidpl>+Ef!Di>#d^#LH%-Zj2~)Vu3jauXY9c&M}jqG3v +$}1gyiKkJ}#i-i`NL!2i1r1^Jr}1^F8e1^J0Xp%99~X#&M@n1U%3+uaL9;1rGE5VX6S{dW{We;TnLZU +R55&0%~5*4Rhs_Rs@?j_L&-{z`_&cn$J#I>gT%3ho~Pb(|bk=7{{-j){K?6y)b6DmZw?jtT~T=!=BOk +p#ek-7Wl?8hP*$S3y2S>+oH?VuXJ*215Vz_N6qip=$vH!F~DgH^#0(sUe65e0 +S6-b@Ztm5^$B4cWqI`w!$!bxGIB7(e&(2H_9!-&ehC20>w6(Pus+xbb4S3)hYml$}!6FLYUGt>%vY(Wg~2^@T)UJu1?@M +z6g6x==UrN^qD*_W)u!kLkoF83<9zxe}1#6qBNC6KJ)Yw0D#!93iSCg}x{_8mJp6riov8rkO|C6Rcuj +J8`+~z?AH^Z-spD8)i(`6Qo%tJAg11yx9?4e2lD^%kp|tiha8KLti?C|9+pHzyv6rgto@7F@bDHp~_I +CMpVjcl{S3T-BTR+&`2MNY>_&docufFZH92W--EF`KM1b?Dr+r4n0!l5laP3N@FdG#x1@D<|9Z`Wkhx +@!eAjm?wmFE9rL>f>o1Ka8{b +SO!YtXRX2@VMWbgZ?3@PyQ%#vMy7JSl2wMkyJhJ*rLh9?yeJkFGY8S*O4lx%=$cm(GRkM`k@k34kVeN +-F9E@|l`ocn&F +ECh`{j5kyW-xQ3JE0$^H0jjRq%bX6nQMm%rdDq5lHT`PJgKXb0vWNLo`L#nD;c@IorWr?G#T@r;NUU% +SyYkdo*?;WgNTt1&SMm7b0;)|#3xuidi8sUR$fHGXdIJSjGaxGipsd(P;3%1TBKu(LQ)-hBseS3$Ybc +uRel)~rox;3yeRMpF#o$jS*@GUp%p+3c|Ks6P*U9QNwrWFv3Rk=QT$uPB)hB=k@i8U}ATPPz8Z>0`-K +8>`X2c`q3OVQM2;a=bc$x}gZtCLs)Q*Tnd!s=^qNg|%Y=u+&eQ!_M~Xmxj}7GBS#CuKb}Q093Fp1u(% +7IlbCj_hXfAdpz|EfHlrE^EzsHF_^kZ6#`WqCB8YsW5h4*BzW-3j#`w$JO+;$KOau&}?J78G!;diP6K +odV9p>PL-)4*y>qjCroH+q*f4z!H9xO)F@xYWzlO9ce+Ye$>puG#T2p8TD +SHBv{eq*{ialv6WnY>8EStUO@3JzhpIZdx$)lI3@ygVVA9@UhVe@<`Husi8Pn3>M@QK!_%#sl<2gW(+ +ov?BAI6qOmt#5?=?#~3p^wb0J{ycE6o4xz#9FVI0*e4I0*e24%+|G5Dk$8fzTMagCBGcr}y9*qW2)1+ +F!?Th(qiR-lN-}&!j{L%!#4{vY_Et8MysFoI1ut2<&+4 +ml+o%K2|+uRnVg(Li`z5$Y=iL7=BJZoLC9`(c<{fUdQMGq5|sZ;D|qQ{~kJ{@GJ(&x!X;yjMh+j=j4Z0ck1pDDWiZ47ikAmDcxX#1 +xa=nwqd{}clq5D55SppD&6Qon0Z`_{0vhjJnVNes(XPD^=gLNQtermO%50##mjtCJ(^Wh(B;@vPUKd22&k&zjwCBUx_R5pD8mG;B%f%|-8xL;?I0N{gR(r5+f^x5Ks=+MhXr#rb)`w~G+)* +!*K3W~#}|nH8A)vWJn+d$Yu7k-U0+7+3y=Lx`(#tlSe>xbk2T8!J-cv@qP~WY2OWhUiM6ggEN7`jPXuiu@im##6EH09(RSGp}FLvynQr~A; +&b^VHZDi|NBPB4~fHH84v0(9!~zf@t_3qa+zBLwD-@~Fsy9Po_{nR+ke=2K>yzv5AFOH-L2ZS&x>dWL +8^8dglh~R8OR_mY=TLym*&;;}LkK!u$E_UGu|$HQJIfb$> +KqbzK%+d4I-on +fUBbRe$U0P9oUi?ThwYA0aFrQ5IK2A>nzOIUojPj*aw?0Z<@BBfHMvK7LCv{=|fi-$qtn^^6zg+!l`s +J?va=$CTT$|TnMGiWbmp|mc{Eyu(^;7jJ3_Pa(m9OzHY+mNo5SPEa<6j=}>tKZ`^4Bj+?+;_%SN<>8< +1N$v-fvgXt^f7qBEPM??xstP`&Yaj*Z6t|KUl&4Ki=Or>-&%H?K{)_Gjkh-2iyA&ruJWsQQPE0L6dw~ +PlFFhO!N_4gFl?|Kj(GZk?S^VO%LFNesCa_9D^G%cHpahu^rgO@vq^Z<*cv|v3`g +iQ0xm4e)O53z&^xrJKoyOJLZ3=XrhnY?kBHB1xIdehjg)j)I<>axXeLKM;xug`#J|~B#+X|UzppAdvu +vV)4v8S{=ii8Wqug?Q8J8|7T{krY~kY!MWtJ}<)MvnN9e+R+Jpb#4=eG_{NlD~uRc=Z-ks(A=h6a!qm +=>2BKrZ$dyZ3pEN{Omd+EZju5%0-$fJ8_mB^9dz_AXY63ez^*}m|KdWUA<`c1K8H5K;>!$%wNS5EqVU +jRRh`r~a?%ENWrR`dNathkZ22K&Qt4~MnAZ;v^cem+|U_B}7kgXz +C<2+7|b(lOQ{l$HM+_XR%Gw3@eH)pOeR%b)qna{?ZR{_)xP=F~=;x4FA*viFt!_E*vNe~$-uY-jj>Vd +Rwp`#v9^zwuEB`v=6YJ!;J=(UE{p>z=|&Xm;?7;xPjuWPQR%qkIrXX?q;Jl$6}uwb#30#Yc0)Dgzs_l +_I19&(|IBD%}m%K$9u5w2WO17Pt2)xEB0U2H2=0SM#d(!DXYw=p2$rPH*77+up2A6A}bVS`TRG9L{e7 +X28YS`V|^OXJi=qu{#!xzEEm)EAP}|pD;))D>C8$t{)l`|1^>r8|5v7P%xp97k0- +W$d*z?!t^tBCXg#km6oN>v-qiu0o-dkC6*B +G&<8p7xV0yq2$7qTt#0-`IjI0S*OtxUW-1zT@YrmV9^&TfNZvx?_L6ptUFnI1qD_umurqX{T1M@SY$S +)+XTyw&b%UX0~R`HAC40JD6jSS`2_A*4Vjl!E<-I+}69yn9s7Zpjad6EH)7=w2;g*!<|a3vj9htda4R +x}vxrpQv9;!e||+Rh+U@!kS*yncO3sBvG5WDaf#Al+^_2C6%HU&B(%^arK&Jei>3l#gDa!?LaS*ez2# +52dLTA^N`dy20x~Pbd3s!hmv{&qCjxm)6HkN5Tdo&dLHYW0YhhTT?R-T{-w}Ti(rqC@o&;Ig2iaUFK2!K@w+8{InL5e>EZsu>HqWpQ6A?XSz +rGn3w}cfKVR(kFo1@jJv^fc93n9YMj-g-3O9Q+6ov<%$RSaR9X+J@XI2tNk2vONPNk061*3k2lcNmuC +yeOFYz}pFE>NGLnImLE51fF0(l69!a5AQkD-gu7-hRzPTlLQbScBxq^z2|_kH8MO9rQCl86D9f=I!wcQvOODc*t>TBLjL+SW`h9raXA7sSbeCAW`7OZ9@4fS-`(&F*6rrITmJEmfq#0-Ki)C$w{ +KaJxS#pEFHE87$Ki1whnHR$#8;n`nn95m2jr$|`s{&rvcj%JBUvVMiS1RlCg(^;E`W1ODCol&n36Z=r +KX?u{jw%}KS1leTP4AH6hhO5)5VU7G<)W?M2~}9Ub(l@=MGx{kGkIR!bCSEvQV!JcO{Tk?`}hE^uzAt +ic<_Sw<`oyOV{U|N7~($%d%6ixz#y=!3nrp7(G_x&=2A)CmM6IM +0k>56DHK&V+^6I4kx=c_HyXyRsB8it&x!lcvK8@<3RJ-tlU~QG86TRd+4>5G +I6ZzC}(S5rL=c+dWv(|Rgz!McWF9+FZIH6>5VJU1Mr(e^bi-tm2y8)p9~vsO6 +=>0l(@GSi{wKvZCt4z43*5todGQ}&%;7dmS)jBaN(=UrZk`3SALw0?2G?;Bgb%L3?%y#L{}ZOZ+|*>2 +~8E|+^H`B`cH9y9=dnZW!>W6MEvv%hTK?IZLNtRr-CR@ZXvMb`By;A}=T&sqVjziAQg5vPsXacRny>9*H{PPA@SNIq_EQ_SXB=IE{s2`@z??BU^HC +mi7P>K;ibY|__Wrvow;JYB0%obZ&E)kymOyiq|iSfQuY3KU((9l?ruyM-5be#8B`e-5e=bD*f`RDURf!>e%eO~$wcu*}Ez91!(*6OZIRbxI5V!lgd-lr~|9=^}C +velLA`i}C-75O@~ZS)e5H(ShZdc1q4h=3jH)yH@0l%Q(R+?w+>M~&w!q5(u@ZTN=%iGJ<}1946Ng?1w +Dk5u*l_~dH7y>MTLF|H0u;a{To7xRBAA7bI(Uj7%gaQvq<9RJ5I@>{a!rx*A^^ae*T41;K#f?)_EFzV ++t#XH)VNmjzXU6cK=hc&A4C!c3C6D%@kUH`{JFG%K$PgipOv|A`=z +pYcKIxhr`R#xY`m;n&gdKXdba=dTUv~#~@rR2egpV<7g8nqmen^RZ@&Ja3e~20GCsWwL)DdDwY2eTd_ +^{1=VKCk|cqk1VbjN?0=ur@KNKxDvlJR~zMkEQZZ+Qyf8+Whq_+37onFUMWr#-;WRMVI* +U$`E`Gcy|Q6VHO@B{h&QOvAuIHT+dfF!)Npdp;CrEwtPs!5+hveJDBm@^(<9yyi*0hx_Hec;v-zuZ9i +6UEYSXes`>J}41cP!<-ujakM85L!_Y6=W#?J>_KXfp`?*E=%;eudu>k+;7A0Q84_e~j!+VUSo?xX`j; +r7JkAbgaQt|H}pz&KOMa!c74c`keeg~Ytdx&4yG(Nl?N3{d`TWJ^ITi)f35oj4JoSezMy40eanfOqsis1@Bb;X4@0KC8c?6iF!mb{!3oAC9i((UUyAiLR&&Fn*6=CV +U}MhcR~c>ZCl0lNA?~33dD(qM^FWCDW=)VPD;-`>3&@BM;zhv2)w@nsa3>)+J`E?mDZCAmFGB~nRSeK +F3C<$U=~Jkb_RSxWRDWGIGCYH~d%jxK8bmHqwWXFCkHHo>ne&7t(x&G!kqBo47Z=M?{t09?6UZ6~UZtjogl;~GU5+X;es0F{Jb$Md_+ +8qCtVa1JHYea5>kAje*Y!GhHL7lw9?s&ILd@?<>)`-qcF1eqRr1*G +BC7kB=NdZ;(M<)ZSl38Ci;1JGFuW$fD+bM+OhWSM=NpDsI=Lo#s-!XvJu8*7VWxZGlHf<40oO8{Q2dqt9t7U_TXM*ea?(rT1!;=MMqbo#EPeC%uWkUp)A`6!}8Nq0LKeAYJhdLsnVjKVkWZ(w};%{QPPU#`}ti&8nBfoQG8((CcU=O7;f!DdE +WRISJ>CT>HLxZH=O@};v)a0^Z%}886jbqpfMbVV4B{45cJR0?T}*}B>4!^e_^>gx{L8&L-MF+BmSqwg +*@n0v7@)W4zG{JhdV~GW8p(#2l=Q9|Jf)pL>|ec_#>IOU;SwD +2|iVS^vDbCcm<`8qPrh|>gd67kpAfOV4uqeAF2DJdjApS3%}?j#K*P6V;<)(Nn(|a<5)KSEtezvVzTb +>!qfOelkO*%bHu;jCWwKrk~r+|Sfq9v<$d$<3x8(rUyDF02Y>Z}clP{^fgg~5)6p5N-+7=%{81TzKRO +1IV3zxBPY>=pIRjPPT{!TYgZy4_xcouSAo<$Gvd5V7^Y=ay_)3g=3@{!I%HwbHK*hnZWgNbKRSWHlI? +y4Rw;l5~5~6P9Az|?Pv9I7C;~?N05c==pAmAGi`tRbPe?7!M;Gn;!c>sJBJ*Xvtb@!!NNe%qjoG~B0&m}KO?~>MD +=G(NoXeMk9TCRA-QRAxvV31xIC0$wtCuAl$8~J(7$NRqXv9w>y0N*CWwOdglAFdzVQGH~g8?(TTyXa9 +Twg9qrrGD!5;YNdgUeNNgNkjZ%t9dIg4A$ +s_Ek=zboj(jBGiR4$rCZl@vc}DA>;A0Wpkn6jTrvk5 +Ymdkc!Mi)2eUa(Q9$#&k)Xedns?gLmU!LfE>xeDQu%l3-r$q>Lf`yg+~RwhxeUVdHR{;sVtJJTJw7xQ +Na@YF$h2|_1I*|VA`w*%yV3M!zccu{WHFrB_j(Lq$#!KJIf2}m_E)CrGb58J4+W}1XKp+$+)l}P@O43 +@g2qV^T)VHGIS4#cKbb}!Uf}ZVa3MMcb$Ftg`&B^~5?i7SpfpJC?q}(pRxe1zFEc64_ag7Qcy@O$%w6 +dTtJ!=+CRX5y?dE(h#QeQpGLm4KArMyGuffe*=!#=J+?{8)m;L~%zMTvF?Bss}s(?Rbm6dV6PG@qQPM +JPr6l5^;1}YufKUcjUggcTE5T`ppbPWfJDcsoZoo92uBJ6dC{Uz;O;Cb;KyaS&_?$!~L^aGmI?W;|K; +o@-=t>sIlEf{oq;#1kQI751GWUdw9pv2+N +Nv7YN%{4t2SN1QDF%Kfz471K3fSygfg%n-@7_S+MyHGPqAbbpi!S6_P+xW{u%T$p$ud +|9fmA#Fh0$mfN6en+s-S}zjwABp}bZwZw#!zts~{R5+2mZ%%wOwR($K*hNC@F)xqkjpmL@sjc6V5y~{ +GI{k7+p9p=r#FsE{JE^7%19^W-GvOVJeH^10{9NG&8wkbrOQJL9V9>=l@UH{g_VSqg8yrIr{e4Ny^Q{0GbM(L_s)Jw$M6^YsT5)x+qe=ONzk3H~yI}? +_wnCwssu`z|`mowrtcF$s{T3b1?-Hsm=f`c<8GvnMhET-3g@syl)ygN{F_^{Xl`e#yC6+pSv9K3cM2e +sbZzVFi-8s!h#Pwxo5Q78gBjYcQV^m!TVaiEcc`2H9*mVwaa!EHNgu~~v#?LR4w)MdqP3GR!*D7qGRp +v2$0-D*3t%g&?Oe!yC?VLrJRxOhy#_2t<+dGYzVey)*+R)J`Mnirp!&dVdTS=LH!B4>KL140SYN`$$B +1icusoTpz=B8|RkDij-O)7`|=_uf$ExWhkoxUE+J(5m5>0Wp|;Ei{p;tTfMSev`C*$?b`m-z>y!T=IduRg;Ag~t*-wZUzR72@4-9r#d#;MWP6+q9Jnp(=@N0Hu$57YX!>UAUtBzX?l747weoX4+LODb$AAsjGaWXXLI{}y`3sAK(A +{Y!1sqLMkuRKoNFrQ3x3AY!O>ff+YpiAsT&OQKo)X5zCLedG&|I`CPGEb>!e24sZ`xl^Kzfc6R8PA6g +HU2Q0qFv_DdhSixpBzi9^89NO|kP4-s;P9S73*Dm@96ZM3lvC~N=FpA{U7L{s$pxVugvdj&^{!C%z{D +Se8SfT!%Wk7yPPUU)Pkn4C96ag{q)_>J_a_7B_br9jg;z47nZ5ihkID%Jknl?#8{@!vBCM)~C6|D^VG +zbpSUY^tvl5{?XV&l1G*b-rXtmVLtJX0#gwE>VG +txG5YB9+0ERaP^jQXGZEn*c`776sE332s7u8kfzA*?B93Ae86U?F>7nRoC&H7D$dP}PoQ +}EohW_;D9u6oJ==G}x3QKVi}X{&X<^_PU|I+9%=LxW383!=4qsV!>1=8FqTUTYV +$$C1L^#ABp~wp*|X{CvSh3apL$EQ@lZYmNMp~n4{a%Y31J#zf|pv&IUB;dJIRf +|Ip9aEE3p!S;)6(gh<)D7V!GGNX;3mNCvek01Llag1SwqSFrkOMdz5$vZ(#|N>~4A2F+yk%+dVJJ=Q|$YhgFcy`-KnQ+_zzN$Gj +OJ)>U27WUB9kH|^SVXj>DK~2bYE0wM$>U>2kE1>)N_9QB{AsXwcRTEE`Bs0+H1(3Csxi&l-cm}xYXF1 +(JCv{1j63UXQtK=#dc@H1Ux6Vb%qd7x2mlrW9qlj$NN5>8U>yCw2l=8#8s2RmEBQ2I$+;^1FLEahBiacDqvYxYk?#v_YrW-#c!}DR>#Z8~0YJt +d?HLP`gWgJL#_q0M&M>Q1Edo%sRUe9&uW?n0alX(pGI9i~@S=h0f9zPI^eP`Q%>M5L}4m6oMfabUC1c +yEFb%1oMbk<|Q_7n@DW=acQqMS>%jtAl38nrv$@aT9BmKa8=f4cn!L6Mx4`5OIxLSf3?n}OH6t8J?{W +8z~4qN>4lNl)GWE0lv^kiGkkUv!3M%sTjVR;yx?3{J1Q7Z=Da`5K9Zis&B;1isg%|W$iEEcry<{V1{ynb@@!{jHTf``7%#Hhntuu7Y{lwqKwXF&v}sN{ +`DY;@aFojwH&s10^#Dp=45A`(S|oCNy?VUEV{TiARwHWLPn!-Y|mYm+e`;i+nJh@v?p@u_D04#gs5IxdB?UFZ?xSLO;st2)H?#<*Q3?!21ValtVUmzfB>|D +FlfHIS3Wz9~+1^W$BH~e}J&AXk{N8=RX^POHW8spt#?(z6?|w#+mSJkDyl-dasyQ3Hn?D!0(g`eAo6H +vXCqK3G(`?q*c`0L)ozAc<-2!?*uJT10d3{7>7s6hTGQlt1sc`aToPb)HhlYRKe#*U_Ey>`dF*rOAvn +i|!ikwM-xZ3l?U=Xp+SGI6Hj^(V>?=z+e-@K^)EK4LrAhgvu|I)8T +5xT7)}Kl;35Q8eXd=hbn16 +J>@2?)}5MS=#(5(2hM19DO|GMVL6$jYJ?!Q69C=Qa9;+rRt&RptB2LRa$=rEJt!NLO-0{;#yJWwI<@4 +&(X6#_qjg}ec&KfuCt(ay~FJuLik4ET3o;eiT)e+L#Gs1W#Du<%GhZ9ktj27VhizSvV|pD%5$B6UeMy +B|=>Tz=i?g(xyquHnfcgD0KUQ? +oQQ*VvTx-VTQKZ*92tHp>Xk>&6eLiTw9~+JTOnB#16Y$Gyh4ak~xMvJPJb0%bz$@BDJXs8X;RUl-L&; +$Ci6qZBSZFL><7Z=x!h*bXsWgk^N^qbw%eRpVT-N5=7YL*bwBb*`7zmwgqo-2Luc0kr5PLHsCuAd3FK +tks68zbg|JXQR?7xn9Dt1$ge +~fAJG1PlF4S$hci*}p)Q**rs%eyT<((cHS_l}@nQRHB(Pq4#w96!MPeNh$0n|s3XE)&S7eYJYu-oK^;GTewDIfpSH?jx(d#sKmN6a66rizZ(K0fGZb{9ayM^gT;+e3N +cm;P4#eWcVe^< +iw2CCEbAO^N=wJrVdvJJ4elbG@ik**_EdzKV=!hON_;y#ihnLZ}fFzI1wm4?=7xH~8zR+hvWqA>V)*Lj#uO(#4zcZC``r_}JO%Q3 +MKp$qVLTt1`k7U#4z%ghz6VW{WBFq!j1ak+cF>0*q!FIIAE7xV1@C1gPjhOCNpMf6+k3J&S7cddyib6 +2e&swDC_^!B5pRnuTCuvH&KKxWvQjsdnOYhth+EV>IH~AM)G!L{-cR<`Bp%_rfXZ%>vVT_u*>=1kI62 +bzq@C~^LGA|&{7Jt>@+Ff0trqdXUFB_Iv<1<90kaKLw&*P|tE#DgkO2mt90}_;Tf6xfKpQ?I`_YC#Uf +apoKO8z@pTK~T3fIDN(Sxr=7Dz7(dCSXS5VZHWvx_P7L3Ff!y}d#6>e59{=TK)GJH8_xS$@KSdxeV5+ +jhXP-JjqUG-nD~BDx#t5uRURnUMA3p0Y-z0XT5qD9^MObUbwb6J7}4Z9?kQiN7lTPTG4 +U7l1>sq`n(PU1c;XRosyVVtrX5$R61$cce*AfHc!Rl4-%!YEQ-&2GNBcZeGl}^Wr>xh(99rRaWx|K%T}B?89M-P5_)-DagcPhwAO +`1ln&&mdpG#MsDQkT(&(eKtPrn)*Xvtm(YUUE5V+G9-Qt{RomG{msx!l6x@IBQ97JcPH7n&}o>ttd%Pbzb2RDrM#R;0hp|e? +rIfw+RtGz(5@j#yE?SC`(X3K7xYq#(@SFz5izeL}xs_%eCq6djq=#0JxNr?99H^`oj?M%nXT3_vdCyp +H +pf@6#f}+#Oa+SBFI~R1$_@#!#j11pgkzw9)|SWAvfCX8foZL-iSrJPzw(4;dKn}{T|4hI>Oja=ptfoy ++GfMB6|k~{BBz&_O*#$^>A$W6CisQn@wcvW{FW5N +-j%47e&;U8o!TN_+#spnhWYhgGRVIf^-3z&MBW^}*qig`Fn|5O5$12v_wp^whyMukP1pb16`;>UeOvl +ds1Ljkmh9pGMg<7cc~$tx +8`vqhrP7{Han=wKdFM$K8jUZaTh7c>WNu(qC9Dw9Oy=&|sTPTfg#Kn*seHC=Cqo0`GOE3XE?YuSJu5R +g)YX?ZcS5_}TwpGM_6Tob4h9&3=jZYKdju1Z*gw=?i7fsvoXeUG{)cuZPZ@YEk1TsdKQi|)e}z^h-)7 +5^OWe^ny8a0*^=vJQ@S*gW5Ww^^I&d67nfd<55If +vc}eK8Ia>z(~uG@KA#@FuBNDwglsR3&~356L9=*d9d71Q|tKrj2{IRVUi>W0w!q^#W0NCmFPE6hEND5U>ZlsPrXgj9a6WTIKlRid&l +Q@CU%SQp|?TFE>0ipX#2JY`P|zC+J`uZ_k?EnM!o=k`<%b~;^6ly?567JuI;fWUD3A}$`<&;zk=mxPu +gy;n}Ozz+vYR?{qI60@&TUvn&m0$uptYzJQaO*wHFPE;+{(#xa +0y@lh4>X`DwTiBlbc#fHWe(sO*IPhEDdf5>P@vPj&wm)fi@_deT?kqs&rSG$+DFO5F3eO6`562BWW~& +O(!(HiDp_lUK90oEJ1z?PsK#w>N6epYh<25YbwiPg(|fKmpCh^&4EDl$y^u`Kd1Ub|-oKdS4 +3$q>?cv{Q_y#ci;m&|LFUUEJCr%GoZw2Eq+5dx_NKBY<^{rcpeico6o|C5I2jEkBhs3dfCEV;3dVFPw +d~nUjIiMmq3RjXB-LnmDip$?mXyl(S*sR6W0C^`pP|#BKX$Iy3MgY6C@rf}22G@8YQ9-M497<&N#C_AY@x;rKcA)>6Cs!1Fe9= +CvO9F1lS$)_exMH{k_Hb4H`dX))yhs$G&vFyfZ5H~t9Uu05 +fw2I->ckzJn3`Pr-v*k7`|OVZZO*z==hA#K-^HcaTy$ECx#s}pLGOpJaXPF67MU}iSd2jg4GmLC2_=k +Vac8kVR>B}lwo6;e1QXVC>->VDPf?@+%-B6bhJj)iG`tZBg?IEBUzmu*rq|ytdp%%BNAxu_~N~KG&N7 ++qG%hFk9zCqEQr=5r-W)HaD{DY^wJ)_RZ +*hnf~xB176JKMZHVx#it(6s9d8C-GM}oZdpEkHDJ^<2HId`yOpCx(El+}n0eF6&!w1(nY9w$wJ2L*~1-m_4>}_w1ASCyMsJw&(|K +`^|zsxc_1hg`pTuATWedI7Y!3v1@cd+aVl72^dFk{L=z@K=0bsTlkE;UFqmI|4FI6pOT<=9!9?v@Cj< +Cc?kNs|1Y$&H41x+bYOd28zy_OyAihV9oO!)9bzxVZ%lA6fTw#vygh~fio)%^mCzm(!_nS}iC}Lt-{4 +(_hu&dzvX^|~a3A9((!F*AziU6puCBck%3Ztz-;IVsbXV@!qHG-BCD~y5-&FkD$U4{y=n42i;VzPO_j +rX2c;&^IA@%GEh#>wXg3Z46NEG-k6y+`cj|$AjheQ{u?VIze6Z=?f5zPnHyV=|EUDeENXc!0^^P}2u+ +WvoxTD{)jveP*KgFK}l7kpdLV!tx8>6?L&IUl~~AtI4o08y7Xd=%bb&$DHk$9%usevw^TK +eU}hWj#GTKT)nmscf$y2l9&%(Sf97!j%l$%h`IxC6Fy>lcerfMoX&zPfa)R#%~&rx1b$XOtItSx}Vd6cI|{B$`xbkf6vW~yqM`l6 +*?4;fQfK319MDps*14@+^qm7*6@@px$-vMOCM54a=71u9#o_halj7ak8Yp>9X#pbsO&)b+bWTy!v?y; +U$f_%b==kMoAWhe_-&lI1_-zbz?pp2nGP?`&qgQl&^p8+iH)dNG#&~Yf&b7^*mf=;up3NgeH55J$nqTI%`A!{ovTPzQCHf&y5LPm(|G^amgL +u#v)4kf2k_>b42{Nulg1S|8d2Sp)Y|`BuwJ;_8Wmi+i&m&rZkC@6bvE6o|S~?Pvc(-*G;(u~C!1uTFySw>p`XBgt{Qv9pKXSY%syG;VjQ1p +}g3kGwxOa%5x)kBSE3~kkJkw*K0qJ4v5ORK~_vG4PvkF=x(xJ*GEpVl{8=tn`{qvcviT*&?9A2>3tITQM$T3fP|M3|R@r($ ++vN)u-76XlxTA!2ZKNp0xx;{4_oVzo#e&z8PT&~@+du?|HSI4rUb_i2THy$1qDjoYGGLhcims=k_MQ; +2J}Rfb11sB9+D56B@l=~S!>x~}VTJaiMHjw5vLp@}&pWb|C5p&dde`ph!7cl~eAnzDI#qgL>7lQ=>-hJwBxtjIl;R`gr3}=XD{$RPLKFBKXMd=fo!ly=>B +YfyiEW&X9*?vmT_TlSub^_|l4^q~jnyCNP{s??*khnrU<@OjTP}b%aZQY7>q@>D@Z0xgS+LwWTzVHBU +!04CkCsz=RTc%&zWz3clwaTnZFITHhmB$e_u8TPMs8cEtN1t*rq`E1*9TnS!ffz5ARBz~5S(Lyq?%Ji +gGakEQP)s>Qaj}YYwCE(Qz=YF#A_$m;!>NOFWN+hjB5uI-?5EKc9Z9qw)1gD)dpvRTb%5d73reHLpbF +#FoCY!EbXQNe>u5f(7|H3zJU)k;31rKune!t^QMgFnr%qh1!GV~YI)-2#UPp1`l9D7g~+7W-i`a +yb_b1m_XI%p6jwLV{(`Oo_gE8`*R3=3-oz&ap*w$$emKdD>wAd2ytBbGT&yA4@ZY7`}w-0kiEGFXNyW +Ju0twJ0LgWp%16dLQnFE_dBD6;`RPG%SpgQ-tqamjv4@3j+Z6J`AP_7ng>8X0lS<6G{ +zrVSnw(D-Bo|nmQW`FK{exzdU<*UZCEjJUyp0yt&|~YK^cn7B5O&oE`qL^bW*4t)cL;U2ar)g=e*?hV9kTjZr{vi&u!=`{*EOr%yq$v!CGYn*OENjtV~|P8;FcbNR%c*WW46yCZKSU)w?Si!nL5 +7b5nG#CvugrS{-7jsA`Os-C;&|Kq(CaDUOa3Kc=_va-p{_6_)J7dnC2nL~Z13H=)Ddwz=3 +o@0YwasDoojq5q6H)sGcl_>(4ghv1|x;V1sJ|2K$}^#2rb`dl{Y7sQD-&=F}saP3e0w)I +T6AUw6GU|(aJ5@I)a+N(WO6{?N^H{M@u8cw;-hMkjJ?b@DRAl5yNgBmxPGsNJF@s^uNT?+Ab0HZd|)Y +CBHjCHV4B?E-g@(I4~NZF|qG|2I$!SgMsFZ>mJCR;So8q@(h7YmBAP>(A;2A$gOC0F!;^=Nhgt|K#O9 +KjvV59-B6ie-3GLwR996Vvj%@Ra_9DmAZf=Qy$zv`d>?(!>cim81l*MhrX?vNErO?52q#BC?gU$~slt +6~nsJ#Dyk4JuOf@l?uyY{nTJ?8#7%I_(>Fk=yDx^^WbGEZRR|DQqMf7A;W2k^^yw|5uYyWy-Vc706SE +ig+ox0TGeHfeS6UM^pcv+f`LXkyC8aIT||tP(+xfngjf!d=3J^v?C07jp?I>cj#Oo-@>-t(`8xJdzec +t!JPB9`u9)(0s^y&mJ($dT<0+$A;D!AfQ^gM;4K>@S4qNg3poB*00>pg=@3mU8TmJt-!%RanaH5 +(u3nF!s&d59GNkeoHi=pHT^FUr{Qo=%ECx(yj2iT?(PrAmFFlyE`LFs)Y~1PlpA`ulLLndFD&Bj^Pz% +8hvOcge|+f&m7bwwKu!QTzuzlXgE^71mwOZnakK$x;E +&WPelZ8B7AwklY1+$sBrS&G%IXirFrBmMEuD+%AkM3>14L=@qL5(OAjb97jjgDrSk1l=@R)g4Bzp +N*j*2IY^7~n1!7B&eU^XNFTqsTcvy|_}_D-*a4U%YYZ#V#--ydUMOWNn{z#*LR5lv^^Gk7Eej=NrnBy +dEd{a(M-AE+ayAP^(IVWRtd32IT{<_xa0czjQ*K1ekTKiS%tE>%}$5wAWce* +WNaATxF@;AXu>+)XXw(JKK^VsnwG0uu;C5YCy$$e8A#^6UruCp@2C>L7-CoXId+x!_!U$L%H2l!pqM@ +#hGcuh`~i13oDg2kln#2+R{&Ht!gMouM^{+$k*9tg^#d|j1(OfttUFg4dd)&yLKL_QqsG$NCX>zxJC< +OX6VCxSGZmgIT}Vgw@`=YzC#4nr!7de9H(RQmTVa<}t&lEI`78dEG?8hCQ;i6Z@;($NpjbPRV;6$1Jn33KCnK+@J5+@kjs1u4p8%rXgjV#eHM4==^?tYe^XPn?*HyOjjJtqTU?-7V- +CoR!iw;DzF5wpFeA=nc*$mba+^lhArV0+>mB6p{gIDA{L(fdT&MsRkqOnMhL*!WHo?!0C&2hb_5YYO?JNcOHBHfeOPcn_z<)!U_PYW89%<61xMVJD7J +dC0NGzK<&+Kwx04dW8hPkBnYKYp>D4lO73l-(wQILr`h!to!%{i>ei+kNo(Kx=l)tKfC8n`h6qL&7SMdPD2Hx+?lBZr$<#n4i^LOXt-uha#97W)Lvy +Mt2H$ZYG(BEY)%BsLK+Jfj^1h8<-5T!0ws8O5T= +z&V3K}#)|erW{{#5K{v-JM-Bo{vFYHtJLJ%6oA#B4cn80BgBPbf7$-S8uCXr9$zFqI^t(mgn00He^{~ +d7Sw&Cxq +ja>O>_*$gFc@4$(x!ET-Rkr#60lqH(Pr=vackpGev1qh`^va%IOoncYxX5Z#jbuu6>}p{KKJf}k}q-jXZUJ2_^OzaeK;o>0yxc_P#M3(oY0(tAC;O=%UsI1scuhJ7?-(NJY`p5~x?Xv{K^ +Lkb$I}X7nDxAmFE3khuzTj}oM>m6jd;u8af1I{>W6@8b^}BOFpz6=({eV~qMv^o^Z%hj%F&N(<3#MTV +M{ttDA&4Xh6h_ET4Na)G+IRY9F4&i`)97u${Vw$F#k6400|oCAUP^tASk%tOwzJ?jH`>U}#<^f>N0#m +P;L8BOTN)~O&ogYVu%RRtZ7A~##G>E*t?;{aND}+S5WJg}6WG4Wu0uuaoNI5Oz~1ev?|zDnXKk+?#yi +$h)Q)x=NK(kgu-*4n=I)#^6See_$K*6!zB^y~0_~>&mSLw@C0sl=>d>=0T+P%ttX>s@>DgN!4#zQmk!*FS(8=Cobr +0qT1kh@`1f01P5kD*(y>r2u?wQxLVUUAg~c{ButHClI3RC}&RFVaEz-4l0v2x8_kTQ=y2y +BbWv?@&Vfmv$Nb4>eQYVDONxfSNz8A+JXkEX2`k;DboI7_e5xx{MC)q>Pq+YX--^%6cf9XsPdU%0fT} +dtn)9m9iC>Phlgct09SlC6W6(v*63RlOv;9M4Gd{MGyZBmZ_Y6YYITtvrOtHbqRwFMnm1%+z*m9@=)n +ZsE*pjNp&R7D9TQgE-o2F*Bbm3@Sr%SQYn$yTp`z;F#>6I!hdo^_6r7sGm?Dpl0Pf&c6NU4m0MA3LCN +exIgkB2I;dDzQs#9$bt6e{!LfN;-$kM5t>Ook|3_%A=sRUjPh+48E^^R%e{zNeKB~xke;6fB>+?gDvj +*aeKGE$2UCb*8?lU9>nco}nixeBTe@X$*^xseE;^IG+2Kf`=?xrNuq6@MW{6_?lp9^Aqjs)waavv=_M +CwFEO#lu38Sw^754fz=lbcbX4(p5K72jOXcK2IZ#>DB6mF9tl#%jJah%`m36fF7^ +`R?V<@6?4PR?c~U78GgQUcOv#MP{ECBW*Mf`SE+6ncUWo1MH)kS%o?+TM-bU{GX$|0aMzcTaMu^8!TVb5%5BJL?U9rgpZp#T`;zRoDkxs_GSt?u>!^<>m^+47g-W!a?L&xOMm +4J#qU;68@eX3CezmxS9F3!suEnSq?uLp*mZ6`cGC-Rlqm+@T7^le1*$U$EHK!Mwj8-NotWl6|&bSf4MVgEJ0 +J*WZ&{)Oxx8!1b%R$~}9I!GM)%8QmfcXTyUQqF;Ot;T8d%Vso^j6Ca86!b%g_fcnwur8c&m5o1p$`5~ +ElHxW;(#XxfOFx3Ului%x)YIx<>6;V)P5MGCw_q$gnxkY{HTa~#+7rS`6nso5Z^CtvyK{Vy= +Ui(auqHeeiOREE9g-)ox9Vf_FbK=5y1+kNaTk2C(ya>TM+WekBl$hSbTq$`LYa)^SvedH_EdFfNn;bM{r&;MP_Bc3p7_9xIi9ge^p`LJ=`DikY`I(+kyvjG3b& +tZz&=DdKL>OEP!7K8+>z%+SvA$D$6uKwWdj(4uesUq|x;Uoi4Zg5f>>{uN*WmM`$CZ3~uSz9S*O6!-5 +Jph47TO6U6*OPIR1KNgF5ezucfMzP5$_o*n(YtG?$+zq;ZF#sm>C1R*4e;{--+AsxL%_ykRFf!_uT`1 +SxIA?R}(7Vy~uuEA)+ke8!mmT-*Cg#w73k-Cr4#czQFY6Of2z9d0| +ujblCEoA2M+GrvSvU*kMy+L+S%W1N@0&Dj2`w)eO02KfGVes?$jq$%poU83$dDI2X|x1Su&pW6G{Z^3 +kI6CF5c7$ZLW!s|A8!NyZB_bUTGgt;yRI1)|+bP(Djt1nM-2yOxP^p8{1E*6{gCk4MtkeVasdnifjXa +W6MI3vn@GDq-nLpUf#@rSrh!N%f_=SxK87vu=BG{TMXz_%x3T|2*|~?omdENfu{p5nRp0 +>1I_q9NBiK5^eEE!L%KfB?_pj`q4-WAcD4+oJ#WyiWG-itDMl({gs+e{BWr6Pq?}cK8L1GI%Fc$C~$4 +JC3QHx_zACb>0Sb^<}t5#G{?w~0pbW +PHDW0L{Nf+7a9@*t3vXCZ3Qfh&B%~Y;;$xa4mMp^xdq^=VRjKmzbfV-3KclH3-13zv-v-m_F^|c$x73 +P+vw#Er-2#-TyO)h4=mGHExjt8r0ZLzIbHw|mG@*E5nfPO|?-;KSLI83Mdm3sn(IP6hHl<8TUe!%CHw +Awy&Guh(y@|f#<$*v2ebz-Ijy59pZSdR)VE9~t|wGI8e9YBe4h&piYmOfn{a~|kWZ`~kYdKzR0$7yUj +Zn-W@8sqAP2htyFdp|S+Bi9RoZ&4DTMiwgK0ehnoU4EjNdHGiF1O8L*xGzmnfezHv%$>Z;UB~-I)kE@ +`yLVOS17VEQ*I0@6seNpGKpFy48w#92H6HFclrab}jTpxSf;&~))A1e|=bAUfhu5x=6^^V}JXqSisnK +1Ox>CR&uP4=-hxO_(-0?6QA`>e8Y+V4Cjc&*MIg50p1@04xt|e59h{<7OU!5#t6u{h8Mk*F;I=Vfv%O +%Ozn^>LYXV$C|4n#!%fW1~qa@rrU3 +XVuU6OmzHm2WvFC2mEL%76=bzjkAV#LVMv{s;`-hxls&C01+HaSu@zNjt1XQgU;#^w_3&T2mq1Jp&l;!R6}6*ZEvI%<4Qv4mRDXXpI+kz_kKm&@(q#0W(Z5P9z}xx!e +|{U%;L)c#lCiU^Z#NNsLI)7QMmH-b!AuqkEciYL%F`gOcg<$4ov1@G2fm2b|dC0WSI=SD^}y%?w1%>% +K0^kwc{OQ?G7}Y!z|2I_mBDVrA^bHqu3hr6|8jp$uNNxfFXHoJ;T4tKv1(fV5PCVvFJQS|QQ)mc~^rK +d&Htv$$o6j?XyHkroc-zs;oH!V_5=d>eH({)f+tX6arv9BFSHj2-)<{pxaYkhdZ$i!u=7Fs-CGsB2fVix-lIYPCVs1cA$YsF-tn7qn#pL-yMVQ`d( +rd`ys=?qm-pdMl*BM=X+FMF%wLosILGV)55_~(yhrOX(%4S;Y6EM3NqiR!Wbj8wFSW_w- +#MmLFON5kjXqLFm#+$9ZP*;YDPVkzrMxJ*Jh;)d|eB5GZW3 +lb(c1`^vrIQy@8qFe}dYBW6)hEVOJ-ZA7$W9;bvf8exmE7kh&%iqc= +l&}}2jZHA}(xalR!CaAvxQkRs|T@k{up2!Cw=C~8i;)B-GvjYv@?LguZDPG}(_2YZXv*|j8-AyG|Dx= +`uvjMIIlCzQYY8fXlc5Aob*D}BESX%fc_q7X02R?BniMv&z%)u2PdqX36O&Gjj$o +7V7QVH~9PVtJ3rE(2%HNKt@ka*;d%Yr>bnBl3z%bV8V?3LsU9LT4Vo0)d5G5?_)(IVFPV3yVp1(o~+w +}yPGAuYZi4mSHj;x!Kjk-B~`F-&3sVGq&FU$#|!+Jg0catk=Ih3F3K5QA8y+p`hjT?!9kkzBFopXAIx +IT!eL^6~QJWadI^d_Nf%|G2$M#_-Hra+c$IVfz-I*bVl!$f1ixbBfk(1XMKM{*4Cz57ZfMtu*>q7kX< +J3ht_|?CVP@iaOp(w$eB-Qv>Fi7j*~hD;Whf`l#Hi%^#ScHn&AZ{&*biP$uZxaeWE5yXy8ueE$gqq6t +NOH*O~{A%|DrA=6u3@h=v6$G*U4a_zNRB=&(X>q}PP6x?0XC~{+$VhrhJbafo?+2~l3YIUdz5aBC6KV +Q)~Ja&h{v|aOj?ru!TAqV +WRYu~$dbMVTMU6s8_fm#yp33(W{?OUD!eqo#_^XM&(|mxS|OOvt&7l)pd;=IG+&eJ{VMeb{fg*9>CQK +!3o)&V3!pSE7LRsX!EQ{dA0bj*%$jmJOFSp(IFal{174#(fcG}1gLjXFkX`!&DpdS^gqrnbfLqiN62%2ZROWbZ +WXGHUv|_e6d2(q&HO_jR9I=Hx&DnMPCe8885U}9jla=)DGS%)GERYIRe7jDbC9ISx^!Jm0N%NC7kFbw +4CfX3^&){En66I}IcUiGFXcSHHO5&Y{e!c3fNI&t{|Apl~$m}Oe{lI5YoJL`aAP9;=VS1y(8!LvePo; +n9Xm6t5hs4P}T^EIWr&&Pm&GqzKUneB?ykY$A`3gR_;iH1R(QTJXf4BJu(Vmfu-a2a}zO%{TZSI%86M +9j)>%nbLQOUol=obWbKbzRa-XV1FTnp&Eb#50RiuWcH9N+or_8QyGM{kzBy?pw1qux%2-kf(^VegcC> +(XsRIHLAn@mpSqAb&?-`L~2yyL=E>MN6-hpUu5zpdRvhIqI$Fcud@CUgc5zxLeS%YWZl587k{iE`_{&-9 +iqMwLtZ2+37O~N;9jZ6oUY?pA +5$Gzs5^%=JGO{NUae^OBCyy#4Umy6*Q297bxT%4q@A}A+}E@Fi8gCvH~fhV} +WYxYI}lVywBzex{vCu^Q9*$-R_?5KG*oUk*wSEP{B9#?p8u~(;y{=JY94Rfa(Nj#&5>ctX!vhf@hJ1B +Mli9qIa88qaIH~ee^JYNUx9Re0Z(%k*qb`(DKlhAm#zYq%oeEV;>sGO_j!*-86nbCg)4YEQug`ynEom +hs;zt9G$@1bS|%L_e?o|P@Z=_*MOH@!6Df3LD~_nP@KXzTvTYI2=@)WUZop6EDtg@N)_`9!9Of0k3HO +Wf(tu=rM12QBc?e_(%D!C%QaF2|Co0eQmHP(sknH%OBWco%Zqf)ZEjTs^clxgBt5s~zVI*Lvs4%eQhI +(TCX7bzLwekHDGEHCSyY+3Kk3B*e^r6}JQcQaxKn$ex)sh*cm~dakqYo=B4cT{LXV8M;qE76aw=x%d? +TAUeqM)1LS6E-J>SG9ensQ+eVtca>BD2G0aGCz0((5Ya%b$;s}O8^kxNiGiJ=!g(tKX*88=_`Vy+?di +JgxFe|bEP2d1>tdSemCZ)wu^iBPNgjTDcBu!bJ&S|gpeETq(-(D=hy&3w +z6cQMtE@1Vc}2ILE05ipE$K>XrS7wA>8(c{9at6P^2<><5pji;Ns&7g#EwYYd0Dss=4H5m4>BKdba~b +hbq|Qe9WC|d@b`l)ux23x)0M}mpDn0_of=X+lSD-XK~w?wtW?+-hJ5A?iss}#1VV9V)RSR6=L7`l6OZFMD1JNE~g*wlX+pX= +WkGKujj$pXtK9SqHn=~y@{K8?~?JJtishS^Q`qAy3?FyyX_UHOhM$`8#@cU!skGH?yJ@DV +${(kqse{=i$-2=bsul(8_UfwSYrkX0OoQ=7Ep#_sGOk38e*6koX7 +F85aPn&_3QD9mo<(Em3?u7MA8E6W9Rc^L-4#o;`ocweYT1LkiI7*(!k6~SAH7kj>& +6a_w5=8Qfd$q)iqxV?+GD<*{Ex<_-XAdFv-a?D)bn+cE~00-ESdRXSDaW27fdN98v+UQFD#t@3kNm~gy_AXzr_Xk+aV-=8+oJT-an4RdqlE9;0CAAuMl##2qp +Gaf_L}#27nvj2FTts8NS;(DP(V|+!i9<2)W%kk?zf%@!P9(gZk}R9NS+Hd$$g3z@5C~1p?Yan%@Qs(J +m}ne-jo}8HGGE>hrj+Ds~~IPqW%cXpa0MX?QO1cUta}AFBVjN=Ud&`9OCM+XLeC@%mB;7% +fH92wGUTqOyi}E|8IY;d%FDe_WM}BKe!$Hc8kBeL*RF}_`5p1u<~ah~P=g-lgb +p`O14E>5}>b>FM?yZ7>-Zol%3!a5>rWQ`}$>K>7ae-t|XMogT&=qUlJu8mDYysgsF;7BrlYljxtp +0pZBVe|)2fa>tsBTmlB2UIsU3FHaP>czzz;+(DE4neOr0bf#)`l*Shp}j!cJ8ZK$8`B>|E*Eciqs|Vme}KbiwQDq!~-p&%)%N +d|r4e^oIRZ!+{#o8x#o~D&uO|%I%oDAvz!L2jXRe>c}Px*taKRbV;}?dHAj!xU%E)(m>2ss;n1$6;-# +mV?g!L&&TqJ=)>;mz#lt=Im-l+_0j{@+q>0;P)l=6>kqkJa~B(Dx+7sPPqoi^&Up%ef3a)JHbIE8CHi +t;9z#R8Cvx?d*V%@7=kTn_#-HekBPgaA?fJ-8MHbECeKh2IWdqz^NCT;z +zQp64aHL5M_9+x$}>S(l2ZyX`05kmXdVaX20goLMgE9PVk3&@qlFwOT~0~5h;ejpGuz1TMv(WiD7mZur_`>f6~6Zkn0&+kJ~sKeTlG69 +wKvecJ+8K8wk64U&s8PqPN{c8fpq`1S6A^}ZF^5eZ5s*ki@hs+Pe<)y+u?ozOuY-S)LydPRlwrCH!pq +r5RkjE;d{z7-U9;S&F%yIJ*fFkrfny0S3$|XtwHhL(HEk>W%tUycZJ_(oRkC=kgN`{W4lC;KePMbXLi +3&6a5uE{x&$Y(PQ;HdMt;HHUk^TBp+hfC*<3Pw_6STymzhtXz%*DhWy{{U4JNTZ+ln#ZSOK2odnV1Np0?-sppe14L9eJ+phJs+Vd=dwox<_zT-UPl&+%l|iZ)ixA=D}q{D0M~w`4cYvQ?fu(bdbmW(Z +Q86r1-C`nbrh|R{-QX1P!{pSD?g0FE?f?+NQCyKCh%G3@1;XrHRN&_eiU9N#!00JBdq*}m+ns};9*Xo|qhi4p3kQSpUNw6&JOb*95v>RdEBb% +MeKWP3HyEdz~|NeFE`qwuM+TrVmXMO^`zkk&S(EZ|yAB1EHn1uFzUy7nh7^QHWq7Vw+n^p*fCTSESDH +26V7@-h|`V{|Qc&FPN*$v~j77w&Hbx^@Bm4l}5)?jL<%hB6cHT^uhv7NH<>KNM75y;!=Z->C}?X`mLN +V@w4yq)^?0syk3()Ms4*+hPUe_QZ?q`U0@E(R3s$@&e6X=u-g>`9cjy5fHQdopUH>_qg||0i~&MB^P7 +cbUXwNA3;F;rGlIneJ(tUH*~yZU67O;~$xP;Ge^>x3s91nq+vng7|dSf?*?zk@vWK%2%fFCj%Gj*nii +pvVD@Bd<>f?vk-c?tw(FehWEL%CIgnR9b8y7MDSKK{prMf=()nuek?%V&tF1Rhkin#_w&H_Cwz}Y8xD +S`%Ocu4%OT-9fBR6E{dNr44{8GSQw1PbKU!IKU%%s2zh6x{zV^5B-P?<7;HUTJY3$_#@AdcFL*5r>3|H#)?t1@XqtE33i#fkXv=V>KRR654xA0x^PY&6s! +!#>vIvZgug(JnX4t#m_<=3J}|1bz%eCu2y*Qv&j=GjwS9NE| +)FFdV%%}2=(M3XGgQk{kzrl5PRqQBds7Haz~(YeNnpqLX)FQDn_U-t9&lTDzL{xRCu%A-9lhS>1P2uq +18K?ZzID3^Et;qz+R%ui>poCsiGPdMu)~QlfJt+0(YSFgsT1ITvJyNsF9AX6`k@hCsxXefKFBp+4bC} +P!5LMUx=Y*Oh*rOaj8{>NmQjg7C}0aw@Oe+UjgjnA?*4I6&|#hTZnR{E|7kln1fl^xA|=9;7xi-y)e5 +mDfqsUL_M>(%6J(mv;>6`5ZjJ+lvl|Pk-G&Rh-oK|PM$!jD*2Rh;ln-AO`i(x^L4$S=uu^HG9Vi_+@+YDR +dKrY@|%IF8AJtFXZ)B=n-}xvKdz`;%2=pLKOg#m8n>FC8(~PCgPt%EI#RDHhBcnx~Oq`#OL}&9|zAee +N@N>wNd?GFeh$-GKb?TK)YW}M&7ir^BNx&d+U2lwAb`9A0XQ!pdpWigNV{OcEW=UTKPjaf~2{lBzY4TGBw`Yn_jh$H@ZFhOkRBYYwj0k3JYeJvic+-!C&IhlD +;peA|ggTJNrx&@S|h>L=sTf>paA?L(Ctz*x%za=T1)s~pF@RgO6b(K30#O%o5#(}@g+!u1{#@^lrZaN +0ah&=+<)p1QivxPJRC5KRPMao5(u#59?R7%H-zbekM-g1JauqTAi{#D%!a?DL|K7AwV0#z9Pr_bIcwnPG13XtA`wU6V1^9CJ*h_0sT?@{eb8elpL8#SmKBQ!Lxu0uyYwLz@>TK*Nr=Y!oi)G+ds +mWc7DSx@+=vxrDeU6#N-9Zu8l{(qPTt;3yM&){1Jbde$BH#o?v +dns*0pVmEc#=zE^;CItkzm&k3{rxMi!6TYLWoCatK7yk@`f7|sh+oUUmsFwSM|QV`(Jt*e%{jXt +vCUJuNw=H&UuTm^0V&l8`S&0f{y5}{61#9H?6zZXZH*ECpYY~`vv@y8}`}#0{+Pj`|N%J|Kx^!W~u=E +%2i>=UxW1|uAs{u?~x**SA=`EPLQMzgiHMBm7KI*EF%C`4}9V>uOJ{+ZB*Pgmkts{M2<>jJc=YoSYO> +tr|HMa9}He(6&pLtosV4G^;jT0;2y3$+HYJgg^w|)FG$vaymmt4Xps|o(&|gHHaW+f+vlR_fU`v8$h>&A@DO~T%5qjE~vacbO_L-;H5}HKV}VM)vh9~11$7tG+ +GjU^%(R6Z{?IMoF5nZ*2T9M#)@?8f$T2_w$1GBxyBp2ieC9a6H`^aQ1MV< +!EERk`D`@aoll0SHS>UIaTKHh*zbG%cIxiiuh7Pl!x_cAFg`sta`PJGp~?b@B?;#7=0P-VebgEE)t$2w!wF7zK8w^MDLQT}#RWM~H@<{}`?=yCHL3^!31sKwK|g +ibU>kLQ>JM!-OSm`1yR8Ptkbb}yn?*5|I!#Izv>B*f7TI2EFgVCdue=(-Ko`8F+29JcXK4bPYrm%Oc* +!ymYljoXBRC(<4@}n9+{;f_->Il04`JE4fWS*_R6q*WKe{UXL)|&>%~e4m(OC$q*Lv$ZNf>a!)-kihh +lINQ3sVILz&y3h(c#3Iws=pX(vovs3Gnf`;pHc9VYs>Gso|uo7Kt$`D)d_Cog3lg#n2X|`q9=r&8L ++mnkbxTxG^|J59l(CXA^qL0G<1!$`9PZYq>&Gj)i#|t6n&Uf@%5@WEqTn8nKK>~A0!s3QHjYdvo- +s9+k{2LhT8%%>4hRc2zu}QP)f6*yOeNe%D^)nOM4p3CG(`<6HCJwA5qD#PxW?PTz4V#`kPw{bN#qrRs +D>`#mXf_3R#DLb`x{sZ?Q5z`%(}LBT0Pt1W&2Qh>pItypgW!Ui7p +s-=In8%t26`Nm@;A+X^rN7Y}aiAxOdD7DAhafIY$3>_H<^h_rkzr@LR%7lPxdD86%Kg%m08UY<4B^4v +27ZpV{cT?W*@3cVMd+&aCBaMvOy-{ds9EUqZ!BE?~l{)y3)eoY_U&=uo%xt(w5G5-!bZn%`#Fzuh?f8 +8(pe`?MTZ2OPq`@x|B!AXPyQ5ZuJf&y`vz(E41a2$bAd;_=JFNpx*Pw{Q`PVDSbGkn*0QSau|8>&o-H +yWgNl$a*Ft5m*Qpnr;Qskc&k_nSiYeb55k(^FKjcV4C5FnKQ|q;^kH=nK-!cL%L)aQZ6~(LK48?c2M1 +V(PuHT~Y?^@EgbX+Q#&qo63qeT+a8GHVj?F`~ELX?7$j-x0=m}JvX(%^=$_Hout|YZGYRghCS~+zp_7 +jenpc^JyV|UVb&rOxK)SAH2zTr5fH)g{*UvSUcT<>coAIC3{5uc +4EL5wN7S?|2hx6Rfs6+P|t`Xv*+A3IBP@(a-2^sD}ChhIFZSNhASEa;2=Onz;HS +q5&`}VTZACs9n$L1an9U +%TKm`z|X#ZUtLM%1#6a6koAKZABNHnROfNBF5GCi`?c2(rsR1#lo3F%`1j28U;X|%nqwNeVnVV;dhXN +|!4oUhbim1RI_sSkosiWBG*X>c#e90&py)#)5&@wYcgw-VtHAVf0PFB{GZMF*D(AW^Zk%811SPS34){u7) +L1z2e+6^At;4II0}E+aX>zG7ThHP#k=W6v1`({=vI(#ALn>aQ|;{ioo(NagT)q2KaIkB5e)VqL>Y2bj9ev +%Kh(ELUGiAdXb1lpWFh)wO^|m2`OP_$b9iPfu1ktM$i|ygSH5P92bdxecG|QH(xV*L;=XLCAEoQYm0D +&mu^u)gDP0Tc8x(O6*_HgO>_q8N(Y8g>ueFW?UkarN4|y +Z&!-snw@;eY8G65<>Cc&cOnDfJZTD0@hu?;qp_T*o9n%trbnRT?bUMKbrJ<8E*B6@U+RmEWKoUn8R~5E#JwdDc-YAAc +JQ<2#E_rycfHPKNGhK?Wcs_C!NZ&uYk$uvx^P6wZcPt$ERl80$9isw`msBR>jdfQq<945j(HO4!58XO +}@7s0$vfGBbOs586`6yPZ{&cIyI1rN3?fQrXv{EyK(vK9fD{-wyapp0&@ip*!tg#63L@T4S`oTsCn=z +~xjq^uRtDR#xvnLWVS)kO7lR0Eh-aWSH9NU-EI9?9jV`PhuZa%`QVku|8EcqnSU)#f2JBOKIHHdPm52oP@E{rCruHG4qi9`R1!0zl}w+rChye$BDC(KAv` +Y1%Ad6BM(5}fZ2+-GH=&Y6M*iT3j2$gJ}1o$8^EL>J8{y<0OFaAUDJh+r;dC!9Drp@!5dubf-xRziUL^g2D~SHR*J0|yJG;3rC}9(Ij6b2@|d6{iw;`y`HV*5-w +W&wYH>kC_$HDa}i6OZeuhf7!M&6~9B&LS5nSb`DD}B +EM;@OF0C?Otf_e?dco#}-q4rh(Tbmk!T);3rh+G{nQ)f4U>^t>8#?vU$GJ=&0HK>?Ym$?j?_Xk=kY0y ++-@)!iFIitxc0R@F^G>zw2jNF7+eln>{?z1EaE$SXf-xNnbV6r^@LmRXI^|PY$ +H_!Q|;rwj;4>%2iHku6Yo`yKN+wDLYvODk)(5E7%?48>w@ZBVbM0d~>6K_v?=-tucU0byg-t67>n)*B +iv~l0v9|w8Y7QgLwHpYySy9je{9`<%H+y=zdo}t-r)NVYO?r)p@Dg~6}dlm^yb~v@oOC|fijZ?$vp6b +cbwWR*J=}LADXcZsmjQ1W8S})VD14&F{aP~$Ix$jmJ(~g3GZ=$6=wehELX$NR~#sbm*6fXU6?Bg=NYm5EwT?VjU$A5AeKd3;z +Tm}>AjQ)cP^y4?MJ-8$qlxapu(o^^d2Wgyu`I;YWg`Ec|+yDp0DH0f8gxfQOugl!v63F#t$Z^m-#^w;u3Mww9?z1{aJ +VN=UCvA!9P;v(oi-!AktT!9{nPN(7VsB$>mbJIAk;(P$g9=qrJ*y)>P#8mCz_7QA<{~IPIQT&f%FuxK +17F*p +Raxmec}&Y8W9NDI4MfvC~s*vc0NZEd$^&tufK2@dwb4P +$Q~;5FUDZxzB!k?J-yJk;X_Wn1?bsZAOEF&;>HhurQ6)zcMFO|zNfIalab2;S;BQHOynEk+f7@C}uy@_&@@-d8;Vl{*YeF=xApBWwMdyDGd5v +YjoeN*4Db(5mjBNYp*K_QeF3;*=yPht0;C66 +QlD)aX=_U%-b1sv5`EtS2X}!?H31@BY+Mh4I8pB3tYL*WYp&bW9?whzSUey6e@99y7+GKII8*gQ&RXS +dMvU5`H*+zwN&(0>*6hqRGNZqSP81(QC4)3#~gYYR?&cJ*UhCU{m^#wgudSk1PK=pzV6?DDSkmE)*g9 +{(sD9GwBw^FOZ=J+r+()5(H?o>f1;K440)+N^tiBDLh_bYyWEW%`Eq>}pDYe{hir3zt`hG%h)<3b)++lz1($j^4E+WMh8LZ`ItAL!^dPuBJ|-qx<&g}>=N4=x +=+m)jGJ{#tDO-O~;DoyXgEPd8R}pmrYf5@mwNTE7$^Bkl6m*iZVi))-&Cu0jKipJuUyvgXsP$tZ}hx!PxK;ec(z`*~E?x{W--^{%f$b+#!;2T7G(!1kW>ZV~XdZZ$xEWoejgeCoh3M>=eeL=97(?$L0B +qP950SEjH_2BlfCkxIG?gUi&@JX2vH*iJ_fFcpq?8seIkiIV0qGY7Yk#UqTo=-Ta+W!!D3Yr>XcG%Ap +W6>~GAu}bV}DSCx_{h_hE>@if4zDH|A7#B{gjn!`p>LyM%da~K7!kDYdd5fnX1&PNV#MO*EO;O|+5W(qb3Cf)aMl;>ES26Oo51~bSMXsxNO*M(I} +YY~-)ZSEMEbzckV6ld^c&-Oz7XK*Xymh`0Ol?46=FBBwD?cyRBSQ)#|1=Jd=j +)G=qpquIgE1H{fe0BMcmOA66k1AP*2l_R1CsOK9I@B0H|I*3gaAx1*I9m0gXpykn`uHn%bnJkA0Jpe4 +5$&@XYU;Ipw%k=lN0dGh8S3Kn({d#^S=rg|?Ds@e^p@QLyXz(Yl_&+n_2b}ud*?!2ylIVu9NCYNe0z( +K4-5xJ6Ou;aO!=FK|g4``p_YOeWTblQ!jQvZwUAp^U?JigEo{YPiFaI2B6}t--@~&9lQ=#Mz%g{H~!> +Apo#n`@kzfsPO^WoIa2sd=Lm#q9M0lS@#y;0r<&-T*9Y)4W^y3a+Ddro3wlp7vIv3(c{?gzj82!d}9e +dzrSzDo|buiI5X@qfd~+ktEM#rj*Q1@F*;{AQ7_Gev4%#=Am-A*4O}g ++TBt4uf22`dc!-Q(e2ye5lqg2?0%sfyYs8~wL@733vlExastowHo+}jUhhJ^jl#Ws7{8jlcK#P}osEP ++)a(s{zV-+D*D^Qvdj_h{fa&U>?ke9=P<{S5_Hmv6>N0`fxz2xenZWN{=fAp4;PdPJeZ&aRT9bLsMLT +i11BRM8*}EbfMthP}PfsDkvZZH}CZH>#4PmJu%L5zYctzp!3I^*97+%kbrD^3H91Yd!j=sBe(whw?z{z7J0q8uySk21NZJ2^r&}kxQlZSkn?h5Z3YH&XhPTC0^gROVoC7|nkj|!XW&IZWS +><0Eo&|Hgq8D&PBrc@nHwImtREuut?wTO0A2>QAlYswqamrb0M)8o>k&!Q^>Cbzor1SoxQFbBCz9uq2 +bgu$sTD8e($n?jg-;lbB&x))N#Sn8y;%@e0rXN_42CNJg2g&M#f*XMe^UES~?sXPj@D{&HxmOzroYI_ +KQnA;h?^zy=^iGl>-P*(G!(_c@UH`lOu0T&tc)7x?($aT4jB2I}d!O1Tz^HcuGqrJeQ6gR(ey^pTO6K +m0{iZUKk@vOG$GXw%@*A0|g-#cT&+$hUysYjt8JRj}*^lUxJgsQ=+z4ky=u@Y!JRkE{uYbg|&qpN4uFHnZpSJy&Q9AsqpGjs#S*EMua&lY2hEsd3^ +>A*V(oH{+7aVAv{n&S++f7u5~xs~EMHNtU(2dblu?3);gaS&;lCqct9&hDyigz*# +nehGKVI#(W`84Uvt*zQ-3V4t<~7UcyD5~9I@KS0>0rPF}yH9%m$t@=e$r1Ogb(;(#Wl>lr4HoAO$|+G +&ibYRvQZ>y6Oa;nR|Sbv95Bqx0{lL2L?^>))5=57(7P^ksRI1c)AyJ7=&`czyN`+dETmv(otX&P4#(3 +9FBrRNg1Q3b8-PaX4~UhW$VJ6aQ|{P+kyj&IBFvpHy$yqp%=+T>G{&Xr{qg7bUd4Br!ZdCbP}Yy|VpfYs#F-$L9)qG<9+UM7ML3%4<%rviSn|*Hnyif3ZTz9ZON^SQ1 +Zfw}V-+M=M{Yu)=MJEFwLK*h7($;o;R*lCBqam*M?|1TJ{RD#&`#LH@LoN0L_QYpG!B9VY347d8y7sW +D#(R?JWx6dG=7jN>$=*THe6zGt_drv}y`@qog*Z2bOSU=V0n{G_)pY^>lGwm +D35Pgu7(ADzM}%d^2xm8c2D|Tq{|AV1SIV7s`0_sw9sjebe~BUgZrUF+75fey2%->55qs$hLV^?l +K^vaLKJBTS?65C?Z>C|{jtIY$oaE&0&H!S&SJH+EV`5JkVCd(56X-4wA>keLp>I2hB!8y}l09#La?`` +q$yHaNRy08Cj>Kc>(o&0UTB{qDcif{GSI(NPoEJt<$huKX=Wq(Ok$fEtTvFeWqi_w1tB;B6@7VzQl@E +br9*SYeePx)qZCqu^d_dq4^fhsou3F$8LGpKwY`~I4LzGUE^Uh~hF4E)n;{`r!D-@oS1b +0EMENf3!35;Lq&L|<6_USf@zK5vd8Y7ANnDvh`m?OYJM*BAG$q@t;J1|Xa@u`2mKir^ku9b4-p2IEXe +PhE<2`}Tyxm9;X=uW}&3S24lYT_TU8U#Up{WOLMky!cR<5%eC9EcR7iY1bhZHD^jUT2qGd4w}~r+;IS +Bzv!1u%O!J&Jh;Tm^Fw{|(LtJ% +3cCR9Nhqr;M-fld5}Q5hl8|F5F*zdiN8j>`XH+8@dZ2@s_yf`V}jL`Vd}35Xy`62c+!(|#>^yvHj1-8 +Xo5(0nI7_7-yB&hj^^oxkmOU}DdfWS@6B&xt*|5hHI?>0m5YzBS}R90G-tE!d;q9H8`E;e^q#O`avFM=^XP4>7P>Aw%>=20u +KB#*_D>48$=(f+bzM_`j-vcX#}7nHLz{v(4F+d!>;jkL_kl`IsSq1U`;W1c}Z{fp`r%W!NAfx)_8J{g +y1oRNctF9Ko`@7eeinl#P1=dOjtx~$2Pn!bwOP#2`P^lKF#bwWQV*uhIi?1M+Ayq405zv)qeucKPjX! +XrH$~qUOJ>!ZyE-WjseVc*ptUq|vTm+WK2}{d1uIpPct2%K!G9-$!=}gbq~b7Phl=SC{XdQr~W>+dJ(Jq|ke-x7ZW#+pBQAZzSh$p* +Z*k;_16f>NY;k_B1+??5?I83D_PKyGz{PXV1HROBe0GxgODx^^$s7LyADqmwvWDdp;PEZCcgF)cq5yelJp^pgLq +Fd6ulTefcbGC2=5xc83j`t{hNuO4Q&O{|Oc&yD6sM|Z-FRDW$W&p;omV13_E+}d}&g|S>-@a&p$T!-O ++1W{gFXkK)V{@8`RyR~q(eYv#Zc?w%$_*~)LOv#mDfGn`Pcjq6e{w$@bQ0Y_^J(B}^$#v$5>G +UrwPJ$;=r7Q1Y|ht4yF+p55anduf;$`x^|=z7eoh0>)p6LCQj3cv03ov;ccT0p-VyY0k#8J-K2*3pqz +|P#sKt5}-0mgAx;{GeGl=yD;pRNSh>Ij$$%Y4{&T&P)2X6<@iNu?wbpDl25{16NhY}Krz<8jKEfBXw? +)aw^JRjO4er*|kwB0(2SD^ME+40V->S=h{k3ePVLP`ToiAEi4jRg}UI8N_}AY~tSPdWvH@k;epzF!e9hK1E*cR9F)6(T7=&~Ejg7{bt?iZ{l+=o3y|c~B+5>`pJ_^>F07^+ +9ExcW#54pA3chv+e3vR$@3m3uj!oTEHX#TdYaO4`z2n^4CX%JagirBdbz?w7(lkjGT)ox^x(Ue`PBVVc>My1= +$aoo{(m!NW>X#t*D43^CfiiF6$fucdxvX;kkk8UX*vT$7;ak0UD%$na&y$=0X?OS~;WE5KqWt$+bS%@ +=9P%4<^hjecs)YN6-s)f3OSbvyo=yKqC#Zl3wOj&IBI~+}qMz<<7917acZ8*0+kL6e2Sq@Ju;R`{n9t +{$vmYnNp9+)S8a3}l3vCJI>g1RUaSH!x?zqJZ(aKOc8I3x4s*eSyOudomyhr#2#r07u&Ou7KDt7rpdLa?TlQmYBr!T?vZmYOL{*iL3vBAo)h +-Hpga-5As}Wh4I#E7e#O +}KN;*LqyKEwV(h@pStuM|8A=s`7s>;lJCYKfH_Bf`nde6dBUYW43T?3PJBQV*!kNll5lwyf`~VaTyvp +YF96A&2Ah*#J}!>oBQM}G*0?*5m}>VG)=_7LJsn|HQvMb9>!4W)g1)%5m0s`>B};`{e! +`M`I-F~g5#(h!Ei8(ZHH9fBdy?q5m3BtoDYe}_N}gSP*{&kOXZeKVCx-#d}Wo~X~>EjyBAcLhq*eY14 +uzwn+9Pd$cMeVdMChjhg^8z3v3!X+^S9) +&Nd2y5Am#k0o!OPMtKbCzECfyS3F*{(6eXCcP|!I`VJaQn4~DdQPU+WM<*moGqg>lf_{w>_;lj3;;tW +b0MA7}dtF_-@uXy8jSP%b>8=Av2EOl^>ID^mU_Cpzru~!*BR-n}Bg`FY~>ca=$tMy7CUVFnvu|9r|kg +`}G*`_24V#e(D~(JO8?0NaMSEEFYP!Z;f7U7`lbNIQpxT5l8zw%52h=4|OK|(1D+J9r!lM=(#egSK&+ +NY*lw&FSYzYtp>BV?EoyViRJHRmjy%cnndXsA^1-Qeu{A)I>}2v6-Iq`8a436IMuMm-x3l`$N{wPHew=$-6!{m*DTO97Rb9t3cEAhC7VSh7KQj4yA +^wMp38k7yzfJYIfq&4hQ@`&kA2AUQ6oZb0SS%B&A4^&fM`0StkHEa~$;^cQnZ_|Gb@lV0_w@>5X)BvE{$#2|(e6h@LbfkDXL2M{B%4Hlv>Mtr&@x^dWz%p%|(ZZ=Mdo)e^;Qu=)U +2&h27owxA@!`717tjXR9dnd8mDHQmt4uHkJ!@31=JbQOLiu +X>`Ta@2sA-}Z$EB4Jz;%y_bz1c2`hjx#OZRGaqUK$PVbU%;xSd1fYj|ytnO`#is{@a=w;k?IF@SEz%; +WL$ZW@#lV7#+O&Ov|`JIT!ZN#Eqjp8qoRhCr4dH(Czvqd~2Kc!Eomgps&Q +-F}Uzk0t@_t!440}T5!#1u;ejXOPJle+OU)Ee$~`kI-fF-LX8Gt~z#MT_~u$#x>Sg4^~ye2>ZB3H5K#A*k+AA^dOlJk*Z$!wC$vI}~E(b;Eg0CE@9_r}i2AA}}jxzdkcwm7Lcoh3JDrWZ9 +@U6UX+R1jYGKU(WWKLr11W{R?Dru@zlFbgbyNE~O9B-Gc$!7srgA#3@BO8}8D9U=^-tF^2i`lU-&xnh +x(~T^%6(dB)cxZ;bq@WQLIfp`Ua}w5&2M*~D4l)6GhB_>5qwdQ!3GB>zpdytub+TcNhupqgZjfA$IVk +#BZDj?kdgoSNSp$%d-7QUT#as(u$0KlUC#l`dg?iTKbHMAccx1;)p$>;A^YG{(6bq3Bb4HvhSeVxVnB +gH>js`)pgLKcDA@^-KQNZ-xq9z{Hde0htN0EuniN)Y=kBIi6Mg1d-)(8*QB;5++)T*WUn##VzMXuA*Cha{IK!5Cp^0)QLKbI#1A9R<7mPd+;Qm-$s`*`-y +Dn2^}DYP4&_$7grW)vV!A**R)QrzXoM$OV`EVHhbSGTxLceW#JvCbbxBXl52-l?+o62+4g!<yq;vO3+5m(#2mD(pCSFg4}8i{yKy*>vxlJIgINgm`Iu|^7alL(Z4yaI5oBhEn+$NapMbB) +i`DRCoI&ZpCJU9sx{U%OCW?HL!+5)61dT~`4fyv4HE(GRALJwHG2Z +GUa_=M|zezV;Ere~`-+l+t*8h-$1TL1+6a#fg`{ePUCF>OEblekhq3B7G!WX$_UmnF#j`(z)Wp=snd^-W?REKlYt+&~!7y-u8VhaRD1?!{`zg$Nvlqs +v%$BoC8R~Q|p>M(_K5TH7oc$t{ufPv&GM!_|QL|oL}Ir4raI9@?RO1g3|ML;S~WlAoLV2N2-SRM@;AC +8YMAszL3;}Kx$p1}~5vrC+AW2w7q<7AJkAFUDz1+NORcyG?xJN|D&DE{ApP`^CsR}hN-970hbf{+xlp +%H|FFcL*z5=Jo!#}I;mP_Vgz}2H!JpDFUgx>lE3tfd5_ot)81j`O(pl1koj&5gMm9RLZDsWLlyg~P->^ +k8Szeq!27$V_`aZx3vcV+{!wq31-;$Gu${2}EhT058ofyT5kghQ6VldJ5i5ZUt*kXK++VWG8+ro%6Zo +{FC*W7`$#(x9KJ7mP{|S8B(G&0+@JZO=)35qF0$+@_oRoV=r}1#jy;}wur@pcKeAF-XGSc~7A$#xnS{ +?SnNpRP`n%Df|Uo}&WRS(#Q{xEd(V=Z1Cmpz9`bwuL;y;z!o@Vl<%3+CKdqmy3|M=0{-p>A>j)9o>SD +H<`$fFBamYOL^MrT%wp>; +sc7&iZSzN(|Iv20>)34{%<> +PhO{AaW**`q@TUh()ydPp3NI^JAQ7DYUAPG|tiDD>)Vleh;4Exf=9e?{BY@929Z>4PvZ7)84H)h$mA^ +6U0W_#lF(-^jwv=F-$6@=_DWe*(bUKqR`-{+3^jW&eX;|}!JLZWZ4Dq;&mzf#6*Q3s~>Gj~^n_cmXKz +BP*QzCz;NjEhSCn?U!R>=qTbm&62e}YoT+CV*n2K>@8%*UXGPxQ9q={aaeKg +Xd5X2X+4CCT_1V3ySblwpWAbiUHUAXHw(qwn`aKPFf6CeZ&Z>aVmi4!*`pzI4_)8DRpA4cOSM2<-hm< +(ReuXoLxJ+({9(dO~Upb6Q06QL|9OA)4zG&B5B_QYLG^K7)gI+#iJj&vzDLgYKJyyw+5>YSbv~nF+Q^ +b&KNku@oB*uMtnEvUBq60(PBvuyOVM&h~Ehe#AcPYe0bk{vCpAq%Lvp+ryfza>WXbn|`0M_}Wt`l{y; +L>c|q*=9AXVbfexT4hzl`b8jb5pq+3|)Io!v(E9WqsfJ;1Rqx_UQ#I%GHG(@N8qWUE(q>_j2ds+T%E| +x~j5mk*B>?J=sz;n{XyKEVV3AU$NT<8c7by0bm*_vO}xj2ekHDM_|D#?RNPrU*%W-d_Jcq&7wTl4ZKR +zkl2qB-rGjTg@t*I=U4%p*s1R9Q>6zRrNpcH%5B_u2$P6~Nd~qCq}O8F9Z%ljlnSU$waA=4d1+&clgNl9cIjV}c +(jhqOO^`N00qqVm8$Xw=SKS7c9XKlNqzx6kym<@-5wzsaPTUn2e59$NiMO6)mE9psLxp#E`#IMV~C!TanU} +@lkq~$-tSn+3GqFKm3JV0|+SyGh8J7G)wHb7Vz4qpqh$H)Yz$@ +a2kF27C=!f>Fh9XA?$yelp}bvbo?nr=?Ur*@7r1wNDc;Im~rrwqm3U*V;+%{IK)Q2`v}qe|PHsiY??W +S-?56&$!MvL36HZmt%n(+-*P7lz36$hZfczCy_rsHe0WY6VHJ#%*3nTS&AG%bX9}Z=YZv +hwZUn9MAme)WUgL(m5=p{g~u;h7Zs&Q%(f%dMpRea|Hq}8wKU6MddvHxkh(4%?xA#>+}&rns_dAstcs +ha$@Rmck}JDH#?JSGJq=|G2|RXf)1;SUxDaw=I&N&LE_5`37T{Z=I(Mbt;I>;qh>sG7%r8NA*0&KrBq%D{JOrf@5gcs@8{|o!k9At +5Azgu)~5b>8brA4x9*z)w9MTPeI=3QY8?kDf&TyNaBtvP-7?@O^AC+?i|Z6LEzU+|rK*y(e&OPljzuS +j`&V7({&`(1ltr<~Nc@)DWLPSqr?SWNJrLbWoqzO}R4T?Jj%OJRMLQDgNsMD^EHqO#J>2VjzF!L+Xol +YPNRH4vVyGTJ>nzf*jLa5E*Q +bFA>Ysk@JHduX_8Pel@WH-n~j*BjeWL+YQTWg?nD{*X@z{A!3f+lL|%?BL1>X=5CY0Q6PWU4E!I|Cez +0Bh?l921jjG$Yz1ssDxxDeWl^C>!4|*c>&oyL(UjA`=S*_HY}k;JjdFfHo(h^3wYP*cDd9mD7I&%#7E +v(AYr?oPa&%1+94=G?YYj@p@I6g#lM9vEJ;Oj*$uGqDq9b=XaERq`gwOG98YKYsvxR)Mm&YyQc^FSM& +%&nDO)_yiJb5BD>Wb2lr2*d4iGh8GRc}I+)xYHJ?qg{fJ51e~j>Q9j9plq#jm6>?q==% +7AXO~O{il`|IBRRQJcBN4&DGY1EcQ{`mxOF?QJLAe2%p*vxw>m+*8qHul0i4pxfUR +!+Ln#!lp^2+SK&Yr1Q;3g;&XaKj{zCZk~qj|t4IrKMc5=-!5pjXB&@?IO8ASN>r?yaRsN*=rc^=W +V%s{pU<~jiJ8W7*QoXdj6=vo=#WekP%WA$ke$*zvz1n`pddggY;#>h8ba0ou8L}#@UvO^-bRPN1%_a> +fW(aYksL9@K>FZd@d7}v{V{8Z%_y?JaPwSY0ouauH9J>y2*>co|B5!ou%!=2qnhHUvsY|{uJ4JnDCD8 +?ksJlHlPb1e816|yM22e7S<+&F`1PGN+Z8^ypbzT$g+|jgJXr{WXbA{hWCNhR}$j&%LS@KdfwoOyGm{ +-8#h4~ytE8&yU&ano2M~OCaYkD~jl{=KVaZTcAcjcg3rY3P?#vM=|^F%MLy33NNz+D)7;VL>vV3fBD9 +U|4j;LkFAA&Ww89Pji1H}v9hJr_~>OBfs`2(AhnF?yhHOc4a8lVcI~>56v~SK<1~k^J3d3=_Wi=QJ>u +vf<#iGRW>Bc4B3Nk-wT?{(N``IxdZ>2h93bD;1ky_M-M`?dx3})n#YNQ0Sni#B@!Sn8v43-*hIrQrFW +%SrpKN2@g7>SRMh#wS!K*?>UVUIWU(H6Nd5ur6P=tgVCSlCD>y-#+BmV10TD1;A +^0)P(Es|F(7|+lpdKbk0}g-1VM^9)=(&p!A(GLpr6EUikV4WM;k0TY0NnHH3vg=yIPOCnEMH_{)RqQc +DG6pY#QHDcUy@!onk?yBz0xYbRF0l6r$!n)gq;VL_1HrdWh_+THW_qbWN#aXc!A2A_2qB`J1b-UcJvl +#|v}Q7N@?ni7&co|*+v^D?Ng1Sat}0?FxHVV@WE7+u4%dum8Wns2VmkC>pTeB8v?qjQZRE`ew_C8^aH +w(!CVZSY;KMO6iL9qGtU;wJe}_wO8LO4*;X#1}nPKU9SEIES=4$+xU3lGGpnI)PldTVH(P5C7R_&NhD +6woy=h;r!13Voq%r73~-Ezs!HXHNLHve=@!Bfkgh>_x?^KKi>DJeLn&q_`)0sgd!;t#%UC%F>+N@g)x +LiX&lf9Mo_=3V|=BJ=xTUJtdnDF1BMT;gbv%BJ@af2~4<@TyBMOQaBrY)xwv5ItRJw*I52(DA4y<{%I(`dHj7A%4ZdnZ%!pVbQX!`w5$U|foBS$Wpgw&>JZ +D-JyDaaygr^qTzS@nAuLviM~uzTiIghUK@MC=S_O2RD8Gfl!NsyvlSP9y>+;FUHwr%RFbTlr5J^tFU! +XjWUk|E!YpgwzIn}{xM^NV!`lwp>sRW4#PF|^JVcN{kIHKSN7GiTpLHv=veBuTCNd<-B91|({+Mt7%Xs`RKj8x^f4KY4wj>k@Pzu0 +Heve=&);Dh`srlK5`Q-&=vPb5-w6r&7}H+~ +>BoLS=uiAijLVH6yZK(ZHI>=dORoFIc;8|t(Fvqbv)Vq$=l9Xhi54DN91&ECv2hAVSu?*J#JokNX)h +u(ZegPE&}&E;dr_0?k(Sd#{#ta< +Xvt9a?US#<1ViNIH-_z#4;A$jQ|^_l4ibNw4kAt2IXt5$Y{ohC7Vq9_1KTq$ +doe|tZHKupFSjp-20O(wdZ0nIA4kcl^Xn +u+PC-vOd-W<_E4ej0p!I|QLW0hc&0Cq?q_FUcJzMRG>|qNRY#eT^4h`r8&k2WcC&9xfom-MyHqi+h5p +D3iAd^x*$Sbp?rs6@q?~?&Gg|lGH`i?T;2h9_Z)rLrCIb!$o#M>WsNPJ7<<=y)YLj!ZMN`UpIQsTFxS +-&rew)>SKihldJH>Rw6W6-uC#y_91&Ri}Xvme;m=^R56@>fHv3%}tR6q83gB1>tPx^QSjmY+DUhc_$M +JI5gRU9c1)??wv0r+a(2CP##ysg}8vN}h|j=>pzruP+X}DOg<3S4=c1t5Ln=mMMp!f@ZlX{csY>Km;& +a8UT&3I?r$W7bte=^Q66y^8+!ixDgQ8P$+#Q&yjr6kxLqOm|{SRpJLTB00n>?aEQ^gmnI%*p0R +5c)P@uhGAx=xa;T}pZK~CW5)+((+cK|1r?|AvENKIWAJ2ES&rY!`jIXo}+}Ar3-?w*UlSp}4>rY1k<@ +NVdLSkmpRiD8!FNW|)W0_-7?V=zK>P{v6xQEGYZrl814POJj*sdz+j}B(BZNh<#HG1ltge??RXa!aL#vCiu48b};RdIbH3A{%pxmEqS!3wV9h$-2K#I?>^ylyg?nZn9puuEliQ +4nt@D;RuGk=Dd4Y+Df^q(b%Etn8U#esskqVB$NPEedQ7+O3#u69gV+riu#KaeiEV?qsuyGnq#S`8h6g +{Dj$uQ9difH0gpUWzZM!qlv7Rm_3(y>C<*nk1F2Y4ZT9e^OFv7@JuIJMGACScV0Z>Z=1QY-O00;p4c~ +(=H1gJfv1ONaS3jhEc0001RX>c!Jc4cm4Z*nhVWpZ?BW@#^DZ*pZWaCvoBO>g5i5WVYH43xtM`Z86Sk!A}DJ>+a|r(78=1wRgWE52P$|nXabtxt7u1cy>$V +sFN&hk!h5K;|PJpgAgMO-J5CurPS6U`uZBwatdD@-owLHj%;DkhJK**Z +^3@@1B1j*NYD$x`9~H^z&Nn4}rK2=$zVVTvOI5R|sz+4*9D~Re*w6`1|5b5Jeo1RSg~>aIo9x +<>Ut|T3=n@orGJ$!^Uecnp)Sh&Zs*(T<)v#sX1IHvTp!VACgodMVN)S!ew3Rn5^77FZ=VsdDQoPI=<$ +{xTU3Ck2dJ*RJv`*@?P)2v#$Hl{Ek#W4)e)0dWSwu$z}}dC-Y20!7ERJ3nXXcjggH$vPbcaBk&{)yqnV+_5N+4lRGJ(n +i;zKN;U`A}GJS%IBSo&Vn=gY8Gpro_SYY5!o^GE7pZ(;`y2f`E>YAiXF&D;eY+qf2&7l865SmCoa3EC +A2TO`e6edAU{LeY1R=`G(4$rX02&BDAFtf#7!22XCq%FejxC$DpH8v#loc4J#FkwaKQcuK8iqvPhvNh +pqma8|^`Z~~Sof_qARnkbP>LVIyU6m(RxrXvQFtb$8ak8-a;8qvV6;aOB!klM?4(j?xeG`E +t7EgO9Pj9-OmooVBqVTk43NXkHURajNlz-JZgMYJrIMR1+S0r)ZTD`E&J4;!g7=VlRU&wQv5$V5xJc6 +|LA*cT`wDs_*wGVc(&pVadgp!C23tFbXLNjy1y%EXa!H$;AZspw%mqvtQqpR6oWBO`_^CWVpKKLa%E! +pM3JwG)|_8w5rqI8uF|{lfJ9Il)^Vkl@}u?I%0b?t4V`PS6*BhUv9acqzGbh0P{x04vYi!1|HkOVaA +|NaUv_0~WN&gWV`yP=WMy?y-E^vA6R$Fi4MihSMR~&^0gGAi0)k<5UR3Zr^R=Gr68bwiL2 +7Ca9awlaYQ6QD5Q+9*Cx3<5X6MDUYTgkQ^mhg-XqhyWFs6@o#v)*!?5;bt&}9%@Z +zHz-iC2=0=3#1{na@dXNvz%;~mPp>e5`8LIMZ6M=35a>#xXNF604#?@;`hG^GX$L;J&B9yG*Z`@Z#*B +?$fs8G%PC;)WViaA0bSuY7u+KCAE>hZ+j47=Z5mKTX9z`%mNHm5?)F1}3g?n#uJDg6SJ$Qio_Gr`|Od +ih3)~qC*;xlGUd>u!eh$$<@gxONyM9}Yyu5Jm@zVv$DJuMxFiOz4FzG#?$JPDZi;^<#FTa&U)Y)pbTgRQ#`p#Wvzgt{vze8D_F#u(JDa_VG +Sd?cDi_)?V&A3HfE^~!>__bNfvsJNagy_d0_-RyRn6(V#8eg<3OWD7*2k8l2w&S+cU~K?l%@sFE55hO +`S#s$X&l$g)GW`w8}<4Qh>^zEVHH-SiJiYaG&S8R^r9@z+G`UxL=4`*6`Dkey~!ey8VPqO9jmhsHo#_9}&~Pp{BBo^7`!#d~PpCLeT997Z(S2rF-k$-1?Uflg>VDg*u6hwpZfQZqvTiVkP +JFV&VtN^%pCqG#WoU)31}K7_xnLNhS*^LLOLQ)#~u;o}=##y#BQBPi{w@@$Im8-6}Pr@FLin5-3OycT +12+ZczCj1KrfHRxc4$VM>C!=OU0By}zbYCaXzgfz^~Z9-e;r^7$8=?1pBCZS2?25jK1=iWPjPn#9RN` +fNz$STZNFasnn6uX+*}tRFcc2jy%Y-ctfW=N3@V$O`pG7EYc`|kY&fZ*L*-Jsw#|n* +jZr6aXxV?zjdLFR65G^>({yZLL@sy8!&hohHU1s}K`3q1>0|XQR000O8`*~JVIlqJu?>PVf7J2{x9{> +OVaA|NaUv_0~WN&gWV`yP=WMyvA=%pc`RysrD3F9E|RR1=Xm&sx!G&4z3%6Czx(a~wvRvk^OG;O&!2qq=@(yrx +_$ilm!JIi?LT?%?{0p#J^SHq`||PrZ}+dCzuG=|czL(ozuErs@W1X~y?P%1{_)43U*ErY{`TQynYk^eEjL*(SJn +4+gA^d`TC2;yXSB3UT)w0YK#BzQO_S~>!)AiQ9r!h-uvYDTRG1on)uDPf3SV@>ecp?_rBSl-o3ed{QK +R@9LXmSuirl2fA@0?^Sw8}|3kd8ZGUm+}{uVuayS;tbzWVj;4-c=e@yArXy8rI+`Q +xw5+V_ulciWqX@8A9s9sA?<>%-66i|4Pm$GeyJZ?gHAh_~DG*DpVOc#O~g`0(=n`(JtK=hrV|IQ07M- +Q$mM-p%2kzxZbR{O(Qkbo=w&>$}Go%~wBv_v-#deE9SG7k97U+-=X_Y(MeZn;-r$Q=ie1udj}5pFKqL +&h8(#yZiV%&;I+}2Y(-({&jm5tMT~mlOO!%6#QePFSq;GHv2= +&ef$y)#z21wv)aD9+kSp?_x;bWZli^G@Aj`xp8d<0-#pts`r@zKzkc-e=|^8Y`|BU$y)o1A*I2)7>Hf +!`!USJ#F{;PsuiyR}9ghb7^6Ar0{v|%~(Z^3dfAZ|F^!~Fa&%XHd>#w)ZzI?iUw0-r_(`QdU`R4PFo^ +D@#^Yp7Pzy9=tZTtG}?%fnKnZGs3|7VK7k0yV7h?#tO_xAbyt2a6HzsB;ui4MMcx&83`?{~4xFYfNcq +PFL;MSlAA|7#6jJ-q&#MPI`}pFO|-<@xLX8crrQ!t=-I;#ZFkKR(d^*oQyAesTXQ-uT~sc>DIJKYaM%FTecq!QI +QBKY07gACB_jkMWVm5C7TuFZI~A_uv2LZU3OxI!nA%$9(tFSjXU{QR=&wR?nBpUi8eJA3yo?`1aXfzk2e?N1uQD +rzc-Od-~+#Z=OB*@{4bueiZ-9A&gk4Pkwm*h+&0M{ri`XdLfr88~Ets&p-Y4>nH#7Q@Y;Pyc&-E_Vn9 +lUw-@9(@+1$w_iT})2C14@9*7&(=4~;*yG38=WTR(+?L+TZMfy*HvW3XkE8P2ydC=#~rypC72iIE0?bi6`IHMme9$3!FW443-^4mCWqs5(poblIIv)z8gJj@m^`?nHLZ +zXy(?d6JgYmK*-=vzFn-PX=u`{A3TCnF}U?PuYAoyoY`o&6@}$jNIAccj2`vq +`4Ml~VtX@lu^6Q`x>I@9H4n#r6T^s^*$2bjSr2~WS@Evubm=u(V@674_IGD`u_B%R#?jV-zRjn|<&j{yKN;p}0oz=+7gP#A}_#<1M{og)`>sjQNW7E!l33bt@}g-p?={XSLA%Jtnjq-SO=#`_3mBNQ^#u6;C*#wQ +a>e@p!;TKqh#q0E +I|C^gQHv*R?Z8F`%M#WSQxNa#?A1}P{+{(FY|yF2D}?=oIkQco@o0!8X5UZRJ;J(6J!6*I9-VG!XNxz +}{c7)q?bbckZPB-GkLbdTZpCad=2*s3Vt!*~79Zj*-3`Xf9nr=S>l>RE#}UgN7Cy7x+HYduv|D3VSB) +{(cz?mBW7+96txb1S?Bn=rp@U(2@oRLNg=!4*C~o?+v)cEY7)zKgJ2l?ln73G{5^EG4)YKa*&TBEX(N +(rE{he&TuyHk_IG}?`BtrOFo@nE)E?73LW!9E@iyz-dd@D%aeL01b~$2mO0&O5eey +DRovXG1Q$)5)5aiCxC>#IrEslktV2G$uLr4|X1}#XB_ngT;%1jA%F3{A%|&ZsH9@3HK2m=seth`s8RR +)*VABd=e+YZftC;IayFV%EaQ`HMQnEv^~~sMh9aAEG*;e#hK<^v+{(Kd0>(o1K(`})7|kD@l?Vzrod> +{)o$IxpH;R?OkO3vG*&AH6y4G>+vL%)k$6lPyK8yGE{kOe19V&m%Z+m{x!+owH_M_1pSOb +Lno}EW)gtmD8!AuiS^^;pX|2zpF)o_>lt&JM}ZM;kXj$ImVpgJu&AAP6Oh&voO_fC_`x5RIwyDy9|VL +bb_k7K;duPYu4aIBcJ5l;wHh)$RA8R2>dJ*QpFv=CoM%t$ySf>x|x{Il`HXI?Ov7 +2Z||;vDWnK9b7V_TQML34!#ykUd#9UBi8MV?w5lVtS&7U7lY-mcu|1@Yq`$c7d>!EG|4;=$pe_PQ!$U +lk}Z~OVudVd)8!E7BVfcpVuaE2f`1Y)5l!$YvE7FG2Q +C^8LXh5f_4L!ge?=iSkrmnMevDJH^7P$d%;Cm7k(Xk?Dz*L*SAyQ2K`H3|5P7#T +1-)EOswl$WVOf8Vo#m1$<&}SnXkxgFoax?tx1p*kU@wvURY*aN5o3X2}NN0AC+C0~2S%47|sp@iOtc( +TQ+K2K%(L0WPT^uz~L?toWKX9z&ZEhr-w531ji1HKKJaRMRrfShs+I7)2+v8N6HKvk|zY(S?r3h^W`t +2teiNbZ1A$V+gk52f*Trsp|AMS_5>2!4~E)I^oX0`rGl7?uKqJK}rD5&Lm?LZ2~MNE7;*)o$RD0^p1-42C9D;Nc6vJC+z1br8;{TZbq?>^1Du=~yzta~Hob;63B!0G9wAwo|u31dG +Q5&43ex?tKt64ki@H$D?B);P2&(I83_Ah7DWHb_17GTVp_BL=33u8W??aHJ&hWLk>JXNi2&I67FKE0# +;)WyRWfpE?hmqB{3|ZJ-r;RE|7rt3;Yj~l8TAP(lBuRLv`kGZ_6+aNUP3Q+HYWho6c^Jg(4r)1DL!R< +OnUD{#M*(3nPjS0*rT!4If94155=PW`rZ>VFoS&}?}o>I7i +nR5q6k6k9>*6|dioTsel~%n_8YxEbCt`~z07K>7*7n#OXXPK+%&*xjjmFNes@c7*|@E2X>zM@$88oR^XBiA5)2Vb-8CXHlB|8$MzfK1_ +a7!%FQ&gFOH@2VQ@sXiBZn|Y8PC>9*FmA`JHTxQJFs#04xBqF(h*4SWtY7u?hGy;$yMgjWOVFkGi@dP1 +*mRY6QAxW70d)gehG(rT8S(htJOnN&xpATkF%NntHe}KUJi$zPvRbEx-ErTfOozLH5YNPiui>|}vjbc +*3^HNF-SnWJ?g7SEbR{@C)6bnJ7(AKMpG>qAhXMTAC9J<=W!}jkxR7Jj{ +LYfQA`j24T}^@ufz%lFv@lVmk{J|xB&X9!^1TIFK6y8$FNv?m?5U+W +LjFsDB0VsyZspT%zbqGX(=qDh(<{@xNuO@ix_5)Nl +I!!h}otQLZ@4;&6cNp^m6HgYoW7yNDR%R*lri9?kWKU0*o=z)dsah78Z>#2BM{8m&rfzb(rtY^baR|$xMGjyuinFmN5h60M8 +xF{(%*Ox0ddh4zdxO^bL-q;zGhTC4M-;B^YcY>{cc(J`N=4Hp%iZ(#pi21J@upI*l;&vS~LkEQe7&?J +QDQ)@?y|$admVP30j02z=d4N(9)+GQ+(2E0C|d82SJ*E^KLDdCLi3(kE|i#HhwD(_^wZU_cAtAezLcP +BubkMq~#B(%L9#3DGPNhW?Bl7~u!cKwcw43_L9KYO1$|p#glGth9I86h8Zj}$bB<$rrkz8fb4Zn$s377sX=-~YB2$X%u+PO?q!$nyGF^ZCal85f +yhVJ13-K551q&9omjWdYJt=$uGiULaO0%>8{WAV!CaSh#&-(Bi?sYTzky4l4cOeGuVpMGTa6vnT=Au| +g!=*{!DB`zm{p)8Ua6Vo!Y9<)uK5jIQo1jjvhd&qErKI&? +rTZh6MB{v=YFf0M74{5T50&H+R5Qw>xyEptpF?+R&H&?D(3tUnR>{x99!w!>bTvYfj=`M`?SOOsYdWT~iFyaHMx@H}+kSzh#7jz}o)! +@a4&SfVL0L;LbRMSdIX~k+mac@JXk?%&rHfd7qA>q8T-AR1wi~x`}PGbpO0HLrlgISHPQoh4Q8YA^_B +qJ3{qms%G3EYcMrG!JfxauklBmKi_@ss7W)5DDbQj=(v_`z8hw~3Ap9F_U;k^7>7OJHJS9zbPaCdix8 +l9MHMtCF>Jf4K92-cw>tCa>^Rmc?>h@;k7;;U_^r!tL$U17MOQ)nKu@Tvcnzg9d@8)2fKgOpUFg +L9P08Va71vI(U9*V&%x;DP8-X~Ff#!dFXkL?XK4tWQAHQxS?Ckn4O~*ei6b%griRWw_fQ2Jx#bd +Z`VZ#FHJ;_s<%r5~agTUn#VNa0^-Iomzo8ps5fWY&cvB%M?>6Yy=>4?VVNgb +CL#-El7rT;}zyXFER<;E>s6FKtaQBlxYmny*Uu9+hlJ_cmUjRw1*YZo_02<;}ln1f&#Xl3Pphkt5#6A +Vhsi-p`C-2tWcA|RANYT6YYl43#UeE8hD4)6i?rFCzSXyMegK7OPY?05E#h)#?e@(&9y6{ZU<#z& +~1g;jvk-FhhV^=eJ*xYGM$4^3373h-&rlI-I}TkwVZR3YBSHJ{eq +ON$uYI2M_tPx>`MtkQQPjpej7wfav!x3lwzazrj>Nx9Rgy6xQwm}x_Dr>)9fkz)1ib~t&E-1 +;+;)Cub<;D(eBFNP6k3QdWlnK_UpfEjh0hnw@v`JL2px>j(QSV5K^VjEWc5HB-6%kcOjYn}&B09X_%h +lTz|%rMej?FKICNI?2-X;WeV_qN#gQwzmAQ;)4hf}Ds1wcqr~K*<;gwHgw}yOV3PO4QMKgZo52V;GZR0|z$Jy!X5?#xtSpuRL=GayA-7 +0cKr#uGjKBy|gFA>#z+2$qNk*DQ;VWJ&>o^#e^FZ3s=~1WM4R2nc@LC41#VomkK88J8t@6N5;H+D{;_ +(8PP@5~&B<{2%g27nw$qo)ax%k1-p8kPE&|NMmc3>3NQfK3VC +$uyGXlmeTUS}sdog6O^fbeS5RyR6)x8|bs*uesN-a&iac=rohuU3(u*PA4ZTR0qewrXZu>S$ +-n-+W{^?@KDh|bjyOQ_^3JrSSSiYoepl!YM1_l|CN!)3gR^?I=P_N{Gu-*m9K^yo;j$Q;5g_JTUg$aG +LRw@>L)!(^W|G$f`QpE{r#$6gu@CvS(h(2R)JuI+Q~}!A$<%!Bd|9-#lQeNH1pOFL8v;LtRUs@_>uiR +spB-YbTEbMw7<4%8?*~tf(EU0dSio^nGzd95J9;E1@OP)oqsq3msH|QYz|}82_NqhKzm(=mmmWS#Kan +f&jw#J*d~=aZ#74=mN2jQcEXpCXSH4Ak)pN2({V32FwLW@IF!MshPO*$0=m>};bR9&*7plPobV-t^QP +z2Qxw4}oGjGUfXyxz%T8D`ma$5&uIwNfVQJVv!*}z5z68^WJ!2xcSRNJ%OX_l#V4!AE>o79fxbpx5u* +-E|`@`Ls_Isi)S@7HHf{I9=&TP3__LpFb$OP}Pksvh7+RZW_5x=SrWTn#u{d7 +7p`{Iy;jw+IEg6&qnAcdGS%a7ld@rG5+L97MW-^iG+ibhwOP-+5CL`M7t+m8{Hl4SH^F@kE#D?-vB}` +z+*c07QoD0Q^Z|Eb;%$F75AY?B9PuIWJxP?7WDx<-(Ww^HA($a}6=OeENJXhDm0JJ>0YFP09BE0kD;Z ++K#8#tr-@0YNT_q20ep$J5|0wJ9fjG{$CRruKhj$7loeduSpsNKhhNDaUCU +BT^vQb@V77yw*zvy0TNxbax;CIv?(5~=(PxFUAt0EfqMb}W=+qhC3c(bOGx;C_m=sgd*1>|BL4l+bEe ++6gRRW8%tCP59GQL|t?i3G~*>y|zP!L2k`T2K5>7vOCX`C8<~`S{FvF^x}ZG#}^F}_gYjS +99O&OUV$~+VrZ%Z*r^>gPOsM8T|tFNl&K}n9sMCZkbNPpAasbZcxJnSOWM-g?Cwt+$A=qQGQq?XQ|JO +Db=Ma@x9-AhszM;ZVQP#S*)IALl;`n&mW*0O6@HxZ@z!A2e(Xj#;Wo_YaS{NWVa}mEr)JpCbwl^ss}) +*>Y=8(@vr4CnJC&THpadJFV$pN01!4;+jtocB!6>@F>v+(IejUE1 +e%rU0df^rOA4B8MX{N`!l3|b45-ARQC;cXn2>gc?zL63VzPx<^;k>`Ns%=Tz|58sVOc1)pL8(st?#<+ +X@6BLTrO()0>09Li|NrdS$&j;YKZW_R)H49#e1|WQO1Jh- +<4v8X9Z`Twe;i82u?j-)I4y2E(-Aa6GdMw6*D;fIh<;MYTZfn>H?4iqb?0V>uy#`Wp0sN3nGCmw$&DY3LhDPjT7`RTDfO +Z(h^>*0atXI2%ONP$4QO(1Zb;=GKE~=vtDsHeY6M&mFkL_|Z#f*R&G4*R*S{ghP^_pwH +&r&QQXq;Aq)M^S5mYykoRq__?DTfgQZa7mXw;NwO93|pxRF~KpFFuFku7v^hJb2^Cc-7TSd)lTphAf) +XEF6n49wywaQfiIqUP!&4$G5SfmO3|g7jUMXMtazwXqW}$Fulr>W=w7#G?bRXzF$$4KW7!+tu{AB(MS +(HEg;Z#=TI7VQ+8_T4D7bJ*w~j*`f@JA@vgB!%)Cz%#iDgjmolgQ~2s~_^(;s3mU8JOA&M&&x+B|}SA ++p%9C{VO!a$ps9!)Pfx^rVS}WfF3unusIyTb!6m&jE&G=g1~vV}+0;uw3Ul3Y|7rP8FzHv-=;dqD +SENQf&Cu|f)MVq+NpfQXpFE~SAG$unC`<)@9ippb)ZwPo*e9?-oOb6muv6{$vBcHsckOTn;EyEd|vSM +k2)e7Pk+Z%Ve^SUvXzy4Py{CY8CToQ7p*zk#*}I^^z&kRjxRP%pLt8nW0c_eD3`9^mP27~(OKb2;GRq&cWa1*V){0 +k=OpA+09ddd1I2DbMA^ty`+ngEbg!L_P$f`7--T_`NHS2T@kydzw{fUvHLfTHR26O%B`A@#-LWQrM%_ +L3F#;}?u!w$|4tme0gR9BQl*D5N8|t1~RCrMO<6LNmW{$)IRw;SUs_qpwd84+nEhU^DrzA~WC@*EuPw +RTafv^YJFj!pkI1})odZcb%_KWVdG^>B72QfjB)$=Wbd1F?qBju@{$Lx0BA3h8E1e-qG{;Bt5p&|~+a +i;$RKnnM#3Q0e12Yrp$i#A%D+Vu}vWW@``#)Q8Bs2W8P=o$gSfdEv7|TmlA2c1uoasP-q=TPA@ +}qRLZc^hgkf!YM4S4t)TtrRaZu*I(*5xbFeSxLLn7f$tvB!xuEU#ff8_E+|>e5SQ?YEOxNwq1L=SCWxLVySD*MtE+*%-1A^_gu1j2ys=^ldH-BEZCmUcAxb<9ZdO3PT2`xxEpXl_lC9n7hLgty_ +r$}};cB$?bYM{+Z>%TtPexS2H`cIdd;MPK4sRF&ienIbh*XRFg+DcwoZ!30gGTMiw%hwhyF)!)-~0|^Q>mU=ZA8Q3CnR>}?#nM +m*y73dSy!s=EOau8%)f~B3oCx$;;Yy>D;E1mK|3RRM_$2i%NL;4tQagb0HP+2=X1eb5dD6(GI)V(Uf; +FxBED=P$GfheM)PAd<1b$3=ZfZ{E +=}Nn&aGT23F5a`Ldp(pMXp$znl)B{(JRV7+U#GjF$WurZ`97W{JZKgivG~+;HFU3)EU4ojHc2cg1rng +b@!q!d=2V4LCPIF0XeA5&cQaQ!ti~J$s3Y42m#{Aeh;8I44M3d?uSG*#L-jDAwakpA`uRW>iAvkvV53m5+RhHZ1^v7=Vc#)Rbd>v2$Z- +LS#rh>rQ!}LPPgD$d5PAaHyEg%mg6NrOxyj1V!cV&^T4+g9g9v9>-H7t{fxpt7zz68?&{ckg3HK{gBY +{L?D5r%IdSXPol8GB@Y>r7K}v4?DtbPCH(`s*D9Nvf!);NG(Ca-Tbe1$E~_u+LqjDMc}%j5BIiFm*I` ++Sb~z`k!q$_CFkZE&3_R?clT7we{SY~l$GyAyELQdKL>IygSb>)H*oN-4K(GxpVaoF);>@CJZfj=R7y +`zFx2iylt|if66iF-OmOY(w{2ac)KFt*PnsR3Y>+Rz8qZ4py+MAtt-)XkTio&UW)Wu@ZarxaODhI +ItfL71!t<5%UN?QX>;$-oHVjb%1nbBQ(hS!HggzA@h|%!h6+~?Q$N+8uauuyxJlUop!Tbu$2NxNq~%- +l-^8X33t1yGnJ84a7)HbfcH%;mbq9rcUkuW8Lt&E1ZAciyEo6(VICY~87TT2Wsg47GMV3Z?FKHXlKs6 +XEn!DfN9nrA;%_!dF!IRl^7$m>U8{AMQI7?}?a5a+b+4WP*z>|2J7Z0ktcip%Q6cuzmHK<`3r(X38YP +3&?h?a#t5>_6$2s%ZEM5c%bEG5X3Dw3ODIus>H&tE>cMEBfhf|?hx+b3I$>5>kqX5}_25N>1HJGsy3RtCD~qP$^Q#S5pG_2bI2+kD%`xT0IYP)gSuBmmxrZL%p_O5`%myaF$B)CkO9}-P?1MU42vv*09J-M?^EDDftyx +^HC_bOHFeUS)60_x1_~)8RoTaCu08KhDqjHM&9lRxq0!qlzt(ZcRur-+(bfN=IT=~xlugDpjg-eYtKv +Sbz-h4o!v4JG_h7$yQIgp-JjmjJJ}Q(#EG>0z;Mg_!gxRU#l^4v=*PdXlQs{6euXa +8Z+?plZ9#b+a?@+q(^!Q-KDE?p=`YMzG9BZaL)Ts#zH800{Qz=$ZG!G<2_>w7Ge_6`jHmKBJ=DocJ@z +5af37VMr0TQw*(tQrqNFG9uEt@H)EJ(Ji!lETdRV@kl1{*<$+XeF^|Q6V4ExEfET(LcOThiA*DsV}NzoRk*>2UF}ZqFX4RFu5}S)R#HJ&a`jo9+`~x>Bd! +~a+OGw9q^XVEx_dHmB!5Qiy(wzYhj$D}Z<<*b*Ufog=OMm=wCKryfJ-({3ZzQf5fWkYJbF|23Io}|56 +B2%U2!0)O1uy(l?AF&2{$@xNNANYWF(!0s+%Reix=u%rDsuaSYj#* +FJS^X@j_^@;9$aLYH=tEgoGf;h&2-Cy3Ux`@{|5Hc?@y8n8zwHH{z$CME5$B1rsBSC!a_On@R{(D9!aCyQ3 +J{EmL@Hmr|8!H$O?(RasEoy&x(oeAMDQL92L$f#OW3&k{cFt(1!=NZqUFfA +O5j_>&)#2h=6T1cdHhG-fi}tmCVNJ$MYu4e1D9-S^aGHgvC*KsCH;jBK#NofhxWN>&Gc1vJu8P#4{|+ +;lgC%CWi_qJ?W7(3dD1=$^9AIAniW_Cu#FI;P#?EV&2$C;LqdhN13R07-j5_qwU#I&6r{x|_^OfiL4X +$$(ehWS)gr5GNDMyll_8Df+$C8#Q&WdE0;|n!NeM-GduC6uW4@2nt!U(LJ1cXo~m@W22TyW;EN?-@qj +uR1z3`ZomX%=T-@iytxQWEMNVuU2q9hTcvE(bf0MBs)zAFG`*N8pk(25soSUEgw5}8m-T#fFvQW9>5d{AEE2O1e(*MjL%%pu1g#G&q8TvjboB +1YvK{m>xG?d9q(y4Nj(%#g1(atIb#EwVN=%!3rKqZR5+$@p+wUetsVx%!raAGt5kz1HRV7B75&oKxJ; +^XWd2L>myHNOh>~BqDKhMsG6Alrx5Mwd+nagro@13fj4;T7~n*%SAG!tIlT&`(k(C(%UG29tDqs +`57nr&i|!Q+U8^UO6NhMmTYmcaQQu_ejp4yrofSUO+Y`0(DY-m-i$lU86>DKD+eKf(gB!<}i#l&b5F>9%;|R9JCvSj(^Evcl@ +C4klH8>U9Jkx|+s$V+1uI_cWj%~Ip!+{&}Knp0N7n3covf=0(Ia1}^*(OZ~89s)<(JJMB%`bJF;fZg! +Qv`jLqCk=2sxD8}hjXpK?lrhPI%`aJ6^8I|=Ez%eUvzb^dRT95^2iFEsZv+oCwAsB01ud|_vCc4Mhxp +~80SDu6);^o5WppIQ_B-qGX;hl88V2=EWMEtfINz)h?)Jy)OM6}L+sH^_EHbi(Y?0i{4x(}BNQHcG)k +Gyq2HmbLsT1V=BA)!s&>uk^Ex(g$z{LlUdiZs^DLIJw|Y8_@;-6iOIMJn6;xTh3FfSZ)6lf!g~dZm_m +%uvNB3HhbC02e?%EXl(+TxPS9T4YWhwa>->hZod{|Yl?XixZ@uH)99bB$3yyt^z+E74cAsUp^W#$ztN +LmQwOa5@7z+mS1B%&+prrrBqhiB3dNRX8DJZ8LnR-iI3^4Tm1;ZLpq4KG>*Q4K)>jc3pp*Zit4@hFVh +0=vh1XK~+kss9B>A*|_CRBF$QngBvzQnj$EIS@+Lp7nWd#Ed-4O9HBW^9EWfuBY86UKGcN!-s99zB;^ +tLA +d~_J(~L(lP40kUDucW}aSk3DEP_yu5=zoq0FsC&RC2-{8-hR!-nyzfo=4)S{k7X0%1hO<<4)G)ISx8> +F8@$rnWd+eKfZc1wAanigdl%i>7!pH3rQv`g!e0+36nt~v7(Vggyws?yHTz1E)ZA{%svX#Ptd&I~#a6 +rEuMYd1!EDHKU0i!nHjIyi{h*X4KAz2aFmqSfG(XP2#kvF#+2<#cNGKro6Rs^LlK;eA0~Y3vOQ#IQ5Z +Swg#$XUSY>Se!09C3M>(^96e1EfQI8fxO{fVZAQFRyl4}@J0QN#4ero;bnJ +t56}HdE|c_nN^hjG1LVs!57coyci^qyMbqIxs%KLa#6ozq3>rF1OG9?m)8gKI*wkWrG+~MLGj5`L9kM{kg(?YVttLBoEbnx(gxv+9c!0b;MqZE(;x +0H9%%h21smtu@UZFJlQgmsmX=QYI^R^d5`d1#qu?270qEFB_c=O`_<9C)?_8sdBYBL9hkNXh#-)33!2OH9ui_&`O$^w74k9E +c2c*}(Y;n=NZZU?S$qR=NcIK(ReF`9Ko$OO!Ea +fc`qO_hqB;M-whx`Gs|n7h9cGgrs^u!x^Ygp2<2oCyV@RgL|(tmw$4k%>E??{zhDxLKm)ER&?Zmp;c_tqqfrFC#yGP6RQVhhqk$M*gT^hy9=3PoM^N`_HQA)MSZD{k(7%;A!yEkWEI)2U&-wbl +9A%zHWIAHm@MFDJeC@gpMo)RHYR*%EM=l11cE(;rUr)0g5b9*=4?;BWI0>pm2$nx-lK?no_ga~&kOLp +t%EOGPRnM=}Hy}fp1y_>TR(O>c*vqz1{d#OhL=3+BG(>Wq2HeGkO3D8ig#Pc=eGU%Y?@-GvLq_Ghs>1PzauKy03h%r^3xt&4wShCa@T9ue(~a)2IG7WO +QQYhh;CP)L-lKcr&*^2Lc@Wj~%(#MVm$dJ?{|xH&rg<@=Cz?o4`tmM0a7nku?>(G=6PE|cc=J0v4o?c +4_KCWPx5Op?K$^t5*%|ML0gHJoaQf8@b`VG+k>ZUX=B(_ClH+n2)q(+ME`NsZwQy2tc;fO)9{7q#z+QTVl>DL5Q|3E`|WRmEvr~&4Y^4dVs);u%YFT +8{9wZdezrpAd=rc+1b=Ex`D^@kzb75C;Kt49tKq-NuIJ8z|--Glq^bVnpbd1XE197Uqu&28EIkSrTIs +&;z8H*x4xd<*%?1|NP40h|c!qI+!~h4h9qws-e_@NT&An;ME2$3kIxzMNxCQq|t|p7G5EqM&f;Y&yEv +0o-mquZHEpOS~LUS3q!@UQ1yvw+TM6dEYDbRdQQFm-2$^{+*8QwPc(Hu6TW=m+&@k=%Wq^)M?0Adhtd +@YQLWqoDR=Rn)4Y5UG$H|Ih1_y|_sdIQrt<4JGQO#MojH2;fCV +9EYpEpnN+=J;xn#`w@~`YmQlTk9PDX+yxB70~xK|A&!kD6rt_lz$!|?0_55JNCXy*5NP_y^jbEXbS?5 +YE2;@7(7f$zsb!!TyPAJtc09*V23x)L^c^OOpv=(%yfuVZ;oQu`%Gb2nb`0^Ms(!K7G|OpYRbJB^3b1 +C~VrZ#nczl;#8RKoqAfgnK^0D^_RThu6`)HfcQ%3wQa{Q~2zd{X!FM1c2jwLDZ{V@Jhmw+@|-vcn|&6 +E_}%@dhwE4kNdei764>yt>_p*QpXvfbox?N@)fS52f(qA< +Lfu6o}}erFDDe!7p?>XOUYs>CI(Y2-y%hoAL_{$Z$lU1{4VFJk~yNH`$ZygrIf +NDUTKb}bjG#+}5r^7`anCOi--hDt(y#Mv7B^MvlJNn^4!@?qg4OO?%|C*df&0Wh|D=u7^&UjFNHl +>MwO1Tv>q}>z+CB{I3!s#Te)p%k>pO`hTLT1*~ps1ZqiW9ap>h8@OahK8~C>h*1wHPiGLzcd^w_cmSedhZi-;RN@ApKE`tPH6uft2Q3muab;cfSK~zGv +%F^?@4sAZ&mG`iOp?8^+*{v0o_IPqPYrpV*wRVzsoX>sxQ}1}Yt^yKYWgR+Yhva7h|0`l?XaoF`OyJl +?%tjyvztof(;t|V36Qk3%c%UQ`&2w2A^S{!#+^8kZw{Z%ly$#wjU^` +AT`snJn{(JDpAels6o;yb&?{K$^K^aI1GorCG +hTng`C~IKM}JbrvL#4qE)X`%NGAoPm>PkywqT>s1FrOvuC7uxl&tUF2qgh?`8_q3lT*+W_9Ow1*d!qVBo$4;)y(>4&d?24Hvl{_tnh +GQQ)jhd;!XgPU)DV0{>g(<9ReqSDeWN2}`87fMSL4E2<9)?4VH{0oVV0i#WUcq}Jb?#mY?dd}Y?l;7A +zgWv@ffQ>_hBw#ygzRtgoG=wc&aZbbN +d=}Jhfyha0nHN-$bzUtu}zie=7*m^*>q$Fvc-{cU@O|4#msdA09QW=)YBN&<9bCz6j%Yue%=hyz)Rfe +QbzTz9Y*WcgV{BKZ80|XQR000O8`*~JV%jaiiJOcm#-39;vApigXaA|NaUv_0~WN&gWV`yP=WMyAWpXZXd6iUMZ`(K!eD|+d#4irux^asD*9!_%R_xTMzhK!Y@?_A`$|g#Y21zAQfBg;RuUu*ac +Y2bRJHy%8)i#@#AL{j=h7%eMjnqO>Y%(V4Xl#BX~;=T*W6u3d$ +zww_w?Ep@+q`3n>m(>oL?Me~sBXwHu93upUEVxzs4>k?(Q-0k0p5RHZXMKh^3Ru=SupwN>yG^_m9=tK +RmO3AeqwhFH0mYJN%{VRk$P-RL=g(l0HbbERj;YsN1qp`pjCX;y;LZ!}7PEhUH7VhZb(_~2_c2G)Btl +6TPS-Dm+1$ZP=){aRy+J%_go}C&5A<01q4GidOcOQr)&cod=Y#k!>snb2)c3^B1dfgH}=tnnq0eB116 +)AMX9+91k7Mv^1Na~t)3-9p)LKOOnv7$9o={PS{8w|*$pTouX>2g8QqnV_vi6)v)b#>#HuQmHPTKf3y;_Oc!SwynU9g<{+s4 +qRoi^QfktFmlg%%`$4`dGNfilLnsb`!IspAOPyHDNj-G}byyDrf(LFC#){mJ8hTq?~*Be$lYPO(n6!a +DXlYu2bA{R=6#b;h~!=Eed{LrDb1QO*i4 +Hn`;D0=uIg$SHW?p(D6;4Stva{2><}YBme*>0001RX>c!Jc4cm4Z*nhVXkl +_>WppoNXkl_>X>)XPX<~JBX>V>WaCzlfZFAa468`RA(HGa%!7aw%IJa?LwhG(ekl5hkrBc4FluAegOd +=#!Gla0eexDu*kdVNJTx$2~s8nobdY+!?e)?s`$H(~}x~$(cTXfsJs<*mzy1Z>)eV{F}$4AH18w+ZOa +wL7*qpQFbBo*BSze~@v@qIFx`O>j<5R&6b;cIdrQ$AWQZTeD6th^Rqg%?akNWqYF4kqMVLMz9fiUh0- +e1)&!GziTX0MmUCM&nK>Y%N?GEDT~+l^rtHbOBXkO@*r>RWB}H0wPzuOf}D=4$CU)2qnU=!i`RH75F- +ogBgxlP{mgmA-c1}FLW=xQ79*LLfD}u9nk$kj{`qGKTPGxL1>2yw%RZhf>bcnb8PH2ErJ<2wojpOrHb +HT2u-%{o(3V-PXbpC7d$lcT^xsZtwlIdOB>#_`gAK4c1kzG7a>k_KO1<`!Qxx#2ww@Z6-{|ejn|fH@J +71vMyL@0-dOiF35j{u{Z)htBXm}-F15voC4#RDw&wlAn^Rs`#HJVI!5iUnWjWUb>yx@9eFHm&?ePl$a +nLzvMFT-IC5AJv1O&*^$7b(cyWgW)>w!MjI-Odp_wX9Bury}jzX(ZArl6opI8|u-dV!4t;I7`edWRLY +%jRvf_rSYvG<&Ujw@Zz7hiY_R>-3se{o7iH?)#nlcDG(8>I$(mF&i__$SV^M0XYd^NmpoFdMY~l1Kg{ +yLC>YJ{Z+utj*ws!*$9#8VlN+hfj=_m#ger_Uy~e?ALtUzLkaGHeHrfpW$oV*Nbi(O^r8wO+yCOh1zj +v}$RVH`UJ!&Ox(t+N(YqSfR?e!`%1QNkrApNAVr1Kg>aFW1CY9r(qhT0Ks4QlVo+BuJW6yE;6zct}-b +V}W>R7$D)#%j!ZM8es^-hVR894E_Zgrdgsh5su%O{q6xNlz7ZmsKPx7TT2_Iu5C%j(qdqqx@oCEV2hp +|edpW}c{>B_Gv38k{|^o~6{^T=Gz^{&?ys8(7Icx`lxpy-01~vU&3&SG}2dg7Qf2QN^F7O6h&y?B=TF +@yE3qsU13xjvUWcs3K!Kyk4ds1VatQXQ8Aj1cT4Q(a7q?f30@^=ACt2>(#8@yH36Pu6=t=Z>d^2J2wK +|ey46d)Vmm~lrJvUW39Fss#ML;U9;7^>)&O8o*$WcR}9IrBx;al6_oIXv3~v_XW7%KM96D<;F-7{3C- +o>x0&!Aq>hlwfib3oQ^ns4kx(#60Nn`P=E*{_xEf_`Ws4VDIJu+up{$5Hzp$?cr;nQwsLJMH_DYn1IVBb3nBLSvFk)>u!x1RCe{;Vk5e7^n7f ++BkYKMU&!LZh}^pX;kuU>9YCqtsH3JuuoLJfN|6I`4H`jE)>_?iUu}__3YU*GmdJ_+!x69jwe7MuHJB +z7LZ67pgD}{&Cs()>`-0`NA39NxYm7dt{7MnC|Pwh5J#ZZff4C! +qL&4wb-0Obw83OB_-LH=wqh}zAB_CDD1>WFTrw)6|1D4WX_K=U$H +Hyd3cm?gCB$wuoyKmL4*RkIA9OYxgsKu;+|8jRQ^tC7K*j%j47cu!N5RU!V +hMnvBf;fwhm3rL4;cYSl}S3@x=?eR;7gl*sd|sN)M!uzYIZV&QTKvgiF#GIIEu2~(gk +&{56XkY#(>aZM=^Is(BxiN{KKpGn)9_6KvpT+w9aX*tE-mT>0oZm0SlHRe>#WpGuO5@;sZl{XEG#JlW +k&3z}gvEA13##Y?bf~wgR#@`BEGF~i}SIeK&U2ePG?dmu;?|pkTV2@n{_oN$lgSa!E^ggbfS>m+K&Xc +ACQ99Lx5DjIhG#R)kSHGglH|LyAPVjRmQnE^be(r{>UCoj8gQ!MEHNZ!A0TwbN%ec&=heMa;j3wxV1} +tjK_;qCkU^ZnO1RE_+`fKG=GF>NRxSW5xI?qk_7w1T-g@o{lkuB0sYvAf9Gg@2M`)oUrOX?4uA4ckY= +z~d}`)Ke8sZ-Ah`;mI*`@(^w{?Pe8QV%Nsd!)XsJe|~+mHz^%qnDW7D+Br%hWFJviSG`I9Z63figs>OYyA&GH7G+fHjiyspU+mH{7ge|Y4yW(K +uy>yQ#c;p53fEeIc-tWup_8tw(c^oc33o893Lt--`Y8#!6xvOSkW9zlA`r_xD_^6%d#|H-g^*jZY4U_ +}H&ntTcU-x~p`(uJ{8}ebnm;a}MU9p$`qro1bxBKr12SlFwoVZ3F6nQV>@VOY8XcBugS?fS7(F!T}3k +71PHodIIwJ9;dZ&Tkc8XKi)Nsj8vmpSnPoJ1((X{uMYXsYk0sa`=KKCkY2C|yV1CS>$;XCQCpB6erv( +TCVrrI|_Ir{3THu=`X#^#5PP^G)jg{dZQ|KlvuL`wo>Tio0%4iJF&pZ?d1(DgFUaO9KQH000080Q-4X +Q^o1<1$P7h0RIjE04V?f0B~t=FJE?LZe(wAFJow7a%5$6FJow7a&u*LXL4_KaBy;OVr6nJaCy~LZENF +35dQ98F%XV(sH56<6q@D&bsRfq>e$9F9HA7kmPYn+>s_G1&XC+zki`2&bQYr$GXJ?*$=9w2=T~$ +Bu(0>|^VKnUZ$MZfsj3&L`pvL#AaRrMF!bI~mmrOuUg$Ufhv-*<@!RYsP8%rKAt26|HqqGo^kJs3T4k +fpoA|LS;h1#J86@jh5B>yp56R;f~z;Y!G{nR_9(;oy3Q>8O|ppjV&VU?ta=T|Z9uyzSuwXx9bT|?*g_ +Gf~qboZbu1k9YTff*XquNY>T^pv!kuVPBGX|8`E3&1ne-(kwdTJtU305P;+6-*PmQ8Le;q!N6knNFN) +kwyfgBKtqJ-rYhCHh8f1uKNuU=)iMA&@V88!o<1mJ8^PU*KDJHtUWTFL&fiO4BLTFGJ$n9kpNxl$ +B=ECPbV7p8K=jSBmI93`fJoi(@|+F2?=&90rpabYa?^Erz}2s5^t{ayFgJ`yRj?aWAnGvr6Pb;)o!(i +j)k|GA>M(`U{oU5J3^bhP@({IY3Sw1&l^ymt0gsq2xNvmqJQG?|?@jm2JVB=F~gXeP`7rl(N1pYWl!y +!A~7>V)DD763i)lz$1bl2&Hrj9+a`p^|?#2?N6Of`=;}`-2qt6$x`<~fBg8)rE=A1L|SdZLm5*qQ`Ow +)Oto5Zxt?2UqWnDAFm2H8=!DeC{d#1aqn)P4Mxzl3X3XCDq*c7jj+#e~G_y3aRG~e$$|cTGX +_1?MGZt>)wx*#N5+8Cf=1e2hc5Wq1Rr4bck{AeqADwzvr{SQUmyuHQYn{_%KV-(82G2oP@2=SbrT;kN +CM1_u!Z|ij*`hE1TwX0sAcIog7_@@9Q9s7?&5ihZ-`oADi8i+0U*$InM53trcP@D3Y3g^h%&&FG%rDOk4777nUO!S)nIss$ZW(okuZw7r!&qxRpmun#ZO&6znTCbph|^mE+$Ztypg`S&kq5;o=; +pevGo0nt**8mABNDI}J@Ek33M+@*YnX{&T-}y%hUnz=V0n0=YR{AcvxzI)0&bcz)|Yq@R(kjH(yl{G{ +mblZiXs_&J3N%nREfr_lCpZwvc{H7Ow4rM_uTIsWe3;+=c}>lgRl?Z2Pj^iHAHYw`(k6|b8gKbSNyi} +=`ribZ_>v8$wz3zGx5_dr3izuE$|P-M@doOD_3bl&y6-GX4mtk7J2LJ%}6951t0001RX>c!Jc4cm4Z*nhVXkl_>WppoNXkl`5Wpr?IZ(?O~ +E^v93S8H?HN)r9~8G!_bR6i^l|ukJf+EaFr3bZ^l@@M_=8T!o}Zo5VlC)e%av4KM1wdGBvZPI|CCYW(XEn?LZ`U#*Pc +#AMuEtLpT(Mdh&pFm4PzxU39(P&QABYfG{qrhM^r<8Dzen~5`m-5CRft;G8wBBUv&~|^973OCf4@c*T +Tz0K+D2td}+$ltSc#CYMoJI(4;q=P8TYUiaXSgBAT&mN;8oP{U`z($skslmdhORHPU7eCq!4CexMr}t ++d=wo8VzaSxh%YwvLsNn6C@`^P-sV<6XQ4p%NfK8p);hbiwF`S_n$xFnfaMZ>flL@;yab1TwYufmBAG +3jP{vyx+uu3=2NWRe*RotW4-lx&`_3^p++fMJV)HD4}8gCSOL<$K#3gg-Qi^DJ6WCt}7@hRqR%&b^R%&<|`;T-d{ICh93yP2~y?yB%g`kQwAgPSnHIjorpb&vRq5NnmC{I +P0M=fZ8EPWX-F0XGF)SrH(Fa6o9KV5u%3t6NBw@9$nBsWPUp%_tVPh|xhhk~o&Y;cJe{g30xc=46JAB +`8&;e1Y`>lyXwraxPZ2e*^{jBajcH`nu_gX9Xag_yxS2J#N#5Gpq@kVKPsGD>aeUyvV~3=Qug_q2ct?Pm<61*%>m${S?J3G|g)J72ckO8tvo=m7~hb;~O0>AvMo +XUT0@#e&nSf4e-)jWPB%dBVPU&?1aueBW}#g>)B#(yKonmvmw4rKGA#XIRE(FUI!v1*OlN0*KMRC3R| +dLwQ@rlp?=>_VddLVXl1ko?kqqtgdV_4->*_F+*c#B-`nVgqLQ7az +2HET?P21T;*||!oUCJT!F^L(vK<)n#ntfJl{@Ggad>kjPe9W7_h#SHQjZHIF8cmglCh9g9Au?Efb{iX +)XOV1u@e&4?P-|nXWSC9IYX%77o2PRl^gnXf!L^<>=L7C7wwi}$+@XC*J?0by8g|QN?XUMK-LIqWD)(_L9XpI0Mp;5P0{+C+SzOD{ml;=M$T04bDKBmDd2r;& +e=Tcegy}h?vgdOpm!P5qdeCxHlcQq9@ma(1W5u;XxTdp_OLW-)ffV8%?WY-y}O;^QHedn;5UR!x()Y>g%`=`SA~sKMrH8Uz*Gbo +TBzXqSUV>I_2dZtreS!tN-Qpd(X5V~wUUUnzJ88s=19^j_q!ZiTt}hl$z=*Ai8-`BwBND4kQ|mb~jmB +IB<40jJN5fwZ>V-QPp{{@%8h=FJe-rscRS_86yZ`WM7+0OG-Bdc4l!Mk(iz(@_PH!FXJ|ZJA# +QFl^n*fUyCZ8v=3d^xfZ2kZ{$tTjTxxFH!5Ro|T(|^xK{mDBiV59)4rXJ!Aegb?*-B4c5Yc;Ldy!7qIEa8= +m=QCWQP0Nif^<5v*P=t|o+t51YEO$36MsNY|b~ia(hDhZ^4fNW((s;t1`Q`L45WYFc7jDs5XTTs?fet +$OJ@j&m}g9TDx`ZLccsdg<#qK_@@3nDR5T`y4`7S~IEnV9RD}#)kV+wN?Lz5J`PS^Fj{TOdS=g_I}96 +=is@KtWcCdjqy+!~1`YrKDF6TfaA|NaUv_ +0~WN&gWV`yP=WMyZfA3JVRU6}VPj}%Ze=cTd6if1Z`(Ey{qDcw(0quqx?0>~z?vYyoYZNJB~ +D;FD1ss|Xz65gr9_XUoO*x#9x2JclXXUc*2lZYyLWew?$OcV4_$UY_xg0xyXy9bUAnxvyZVz}@I7iA( +P+kWXXI4oLeZ5@n53ml|09(Wkv3C`VT&5IYcH2h!t)a^Sm`+%(kZzE81V12v$2>nOj%asG8Rti+~TX5 +YZJZznC`VH?Xh9uIHAchAnso!jK`WUan;OG^Xi1!A3y#Mh=cACb(Erk_q8-&%VxnzS;>{oospBmY16b +PXRr|63iF-rrJ5R<(K|whj-00ZrJL!zsvp!SIWfX4Jxi%!CaY8TjKt1qsSAolPKFa{OL!3BNaV?{+8{ +pDiAm&elv_`$UFSB6O_*AJ{!7mN +@r!FW6XE=zY|#Z>tbnqzyHN^ZBEjb02tuq?e@74O2%(2Ps%rnvl!`>j(x$NEaMvp%G>)xo}9S-UG +Za^Kn?+ix0tB0G;fbJg#_jki?L^NcsDfVO@B6&q|3dl@@$%LJd%9f=+qP-Rgs)S}@!Dw^L5)(xND>7g +HuO2F$PeZ*3Srd9rGNoL*7Cjq@*}?Sfbr&e>{RGKwm4ZO^YtIb>8*1gV@ +ve?e^)r_J`9p(Zdjymp;_(fBH!gIchY}DZegCPoV+RMk6&kqlohYvt6Ctig+e-9y$zFqtS?!uwDrg_y +=2c-qe%7ICj`ctR%g8^CtY=A?tl8E1f(u7)!rQ0y}^M%YPS~$7SyX%>^VSE|f3?Yq%r=Zzg~-K*}i3E +_#gn5LNZlwpMeSGP)Zkx%Ae4G%@!gc5n<>+i8gf#zjn&-zj_zQHU1gWX4g@&+UMCCh{qRBWE|@Cc@%k +EGx`3H@uL#u+0r;@SvVJSYE_=Qt?}(9=Id+_FkUD6WfF!=FDLHEdpy3D$RYIJ +V0)RhmRSN>~597i-2Qd+(c#65->P&#z`ZQ$(QUoo8l1X@GAiBusBs3A!7!Zv$nnCg=3{8*;=T4^5t9X +FB?bc~kdF6?JWZ0G^x;?(v2)l!`n_ekkV13Rp0^)iZeOi`-wt4wuE2lZo!r0~IwCqFq#=tw*r2Q9^X| +2SVtcH`GXA(o{Uym41lL%6Z2%q9ET%B=L)*L1k$te~|)kK+Pc!GT0xJde0h1EXe;|^D)XQ#H3v^C_Xdba~C|A=AstnXv*#;*qY;UE;1gEPqrf<1?-w9ja6}_!Jq9_wRQQXyhlMX))+beaHV5KQM`e56dJ +eID6U^tt0ssK81ONaX0001RX>c!Jc4cm +4Z*nhVXkl_>WppoNZ*6d4bS`jtl~YY`8Zi*P^DCajg-BZpiFzsRVIh#LN&vBoB2JOnoy}S`HnI)r{`- +y>2vw6vtxuje^WJ>f?e_Zz!|`1*!!#L3sA9AH=p>ZH$ceR&Ms**p9pU$_Q{PG=@s(yb`u(kc +5$uv4wECX$4wVNe3l2R@fSREiDn8DgBGEG(c_k$eClQknX5YkRC!8pN(by))ca=1GLu#S@??J$!;A?* +%)`T6{h4I`|e1S6$*>}M#-GXQ<;-?1mUm?n5(G3rfztXP)K?z1QWyZ!b_tEAj$ra`#{z)g6nSoob99- +!B}*J5A|D^T_9d@(KVFd>dwsWyCb-CT0rVXwlX_zt71WJ^hGL#4Po!7+^dKcI2Mmdc0XTbh-Yg&#>-_ +q%hm&q^_5{S9q6bew>u?Sn7gt<`KuUBTaTw-%Lw+4`$&y>clPt&!sob&kHLurkfvP|y4#aEDNglX7f!yrs|JtE4`nlwliLPbA#>k-1zN=Fe`dd=JEniF=I`vA+LMa{{5Cg(ALiwpzX4E70|XQR000O +8`*~JVy+WEXXafKMKL-E+A^-pYaA|NaUv_0~WN&gWV`yP=WMyf&c5WV +|X4C0FeING?o1vU)|tfJVd5r09lQRHOM5@i#mNQ0yjsK0(6CD~3|8`$MZnwj@F^JX~R?)gIx!>93#Cg +W&0ONR6?nMcobA-3D;(sIXXZp2n7CMnVxCt<13KZTSm&}K_1Y(eJ`I#$97L_YFYF7=)p(mA;^9EhKBX +H&N4Fcn3qM9Q4d%Hr4TwW)tVObcxqduljyJflrjGyZ-RGoEW-;i{dZUUW@^ySu+ZaW*`lP)dq@tfiP+ +ZeDrTR1#_BjM$V;o1VS?0t?ZUnIE(ea%)6EH-rowIZcbo?X+s^hcr@b3^SEiDL0&x)wz2^V)s<(l2WF +~@J!f-9zr-`D*Hnl;0v9Jyz-_}WhlpI?YJrILBprniYDA5Q+ncx8&tC>H&UbkPejU<<-{!Qz0K}UN{x +IXNt+0bH0Wz}?}-ce{oSwJSXk&&FgV=SGWJOu>M`f@M>qE#c#WhhlIVsxAcM0KoGQ&osG4>M?ePIZ6# +9lSq7A3g^1PINFd&w`kC)%(t0jfA7y2H?aX4GP+#?oB!;AhkOrqFJ0b*2Tm~s^o2f=h0N8f-5AI6jM^ +2KLA8ZT$VB%#qfrjQn4yc|cXNf^^&6))z=Fd#}eKS=DwJSXx|;vAHPhLRa~Oi0_5{(|;eBq%f5u~&{Z +r(9s7h~bIstN+zQsnxcw7m$;n_at&s+V$zp2+R(q@3-!P<<#FkhCU7Y^m%|FrhZ7YAOU2^A~(FFzRj+x^?_+di>{VN)-qUZSWog>7as4R9wi^I +E6Tk9}x1xt5A@dGldJ&E^B8&3-9BlY6$ue)_JT~Fta!% +3&pNhPzkF*mT@c{Z#IYzxdrPV2S6(pj&2mdm`g`(sP2pWZvFKGhMy5paEqg`-tqjqJXjsk!$t*Ao^ic +D@{bX_EHOku_IC7e9{B{pLBw-OU_*XiYoG8~%>0IT%2M<~cW9x!_}-?Kx +^&d13*}Cc|Xxr4aVg>(IRKs0q6kXNDUR`34Ol?cHy@-CsyJqUD^Dj_K0|XQR000O8`*~JVLXo%E+I +iAtkhF5$pG0Jn~j}zk^19z;y@^?_OPqw0)FioKl9#ru7PJIiS!>`>%KQZj%>@u3xl#qBgtSD+W$VoAbUyPEH|jG6 +-{IOyUes@twpAY3=ppGn#U3f02H59vT~gq~To^3=8(JLPz{>j3@QN0e?{;DjMgg~;7K`~YsKFto#o|1 +c{sRlV$V(zNnfh$Vyg?Py@9Xy2Zai}bEM{Tg`t^3lZa=zHx7x3@TdR%3ndb(z^35ti7$p72v6b3&x?I +2Z(;mLRhNKU0-aewJ&8*X-@!JXK?Lg6_eOjnxF4tewDLe9ppLWNF~P!*Cu95*9bT5rlCvId +6;!PdB;5FCw&mU|akA3^a<}S$yi?*({tjge;E!CXDb`i84h$e@2mSl*;~*Q#6Lvz~FWk@RZsYR!RuSaN$A(c`~NQfyW5-buvHlfP5CV +j^B|%m3+(L;Ru^kDQ`^gn1<)WpRip~Qs8*daSMJTGDvm&H$Ge1n7{s&C2ZBnK)Okh-8I@F^A?x#^QSW +<0dZN`}>D=8N$`p7>kDln*iuL4(o+iD}x57>RlGw;Tn$BHa&Eu_=(sup;P)h>@6aWAK2mt$eR#OCs1w +Azd003?e001BW003}la4%nWWo~3|axY_OVRB?;bT4IdV{meBVr6nJaCxm(ZExa65dO}u7$s5#66ZpyO +3kH_N{G4h9dELUPH9zHi#>)_%`V+tl5)Skvwp!in7iDy{sPR-JUjEuGlMTLn;*Dy-+5CQdqZ~`xNtX~ +4L`ye-^oWm+QSa?udjb0h(>n@25Abu_0`~`M)iboUdd +1jqxf=Xq-yKVTe1L5nEDImJY6Zifj2-I8ZZ*(d$X3JsGq1w`BE{pw=5+J5wuLqGbMHdd%1&%2~Zewox +>9m2AGI{l#1dvGUmzNnsy?la%|QH)kc>bzMDS47&T=I?@*wkYUaCT$|DLM^9Y4TU>dg8rq>lyBb!K2B +myHz@EN-|fSk_l-A|}AS>Vd)m$wy&U62ae%-H;?n_C;$p``baQa4l?=`>PMRT={q8SI+4r!NFZg+7yv +V2QBPnC#LnA&@V8@)qxB4+|JfAK}x$_XpF(;|=)|({xJx%aQnIn{ooCsuUAuPl*%2#Px^oDPnNvjlIR +A&3@!9rfv|xXy(HJ<^zA>4Ijn>ALbAKd=|J4K!8|MY{_gQ`9N_(kQ+%%#%LH%bzb@-wO3PuX$))jgw* +B;IVlPljmUQYO+8GdSY`E6NJZ!k@C1Z3U3gZUv_tAU=`NvE{q2(IBc}^L_sNNgzfx*JK;a{v5cDXOQg +z`@YGYj|1B&fk_4~ay{hxY$fQNuA=N@pU_pe+cm#tQ!|58l~HU{5CbNfCl#M{`nmjhR^O*a}BHC53juf|p@bXdamTDx-CzH)VAD{qJEg2`96AcT5Zh +v#Z|K)o^-h`!KI;EogWOzmNXGuhVL^qLgV3u8wM@w`;#>=U9M?i;L_t8>^awofu8hy0GgPbhO3|UI5z +?xl~>zQBo&HhUx|s1*3VI&ouH#s{xtj>D~%et_1(gmMH?}8=1oOnp6TB|K3r!y-Qh5X9Guj!pIDY$0& +?lS|mgg?%^Wmkbd?h#stEU(*_R1w#GE+(((|iFv%KpJCy>9itVF!w4K{83F?9k>^KLUV}zscoeGEi3o +V7z-dp(N&%+r_Qg(b42tT|Kjx&7k(cW;wz?;m+-pF(B-`4tEzrZ2(QN-<2jUFqi)A>G#Qym^5y{eiIg +ZaRg^PM%EivC*@_&D?3!Sugfe>_VsI?YJzPe>?XL>tghzpbw7K4Cr-7>C6&`ifUtRM6~}ZK%d0Mblu~ +ol5<=Aye>cg$!IR->zh +SztQR=I?evTc>xv*w!xRwD>OSL&Rl;Eu)OzmV5N5@f)yo0v?q3JMkgrc44tG??_F_O&$+%n*fG_3#;e +z>?oSZoV*M`nhI(Yw(fygetggzlI^s9Uuc)UcLHnmtGZa!ejm%ZnAkX|D4=-k~LKFCp$<6Jk)09m;^0 +xLO;JCg&^UtMnG87|5j5j(r&cK^n=r?+oJ%1VS>n-$}lR4aRVBq-e#+l9*;lw=~d92hd{=}31;lIL^w ++QHp=Ip+Z*=Y7Ky$`*`7vdV$K*fDNJXKy{@oLyU?R5j<(aNYG4-@)2sv74#Kl&F?O9KQH000080Q-4X +Q^5*gq7()I01hbt02}}S0B~t=FJE?LZe(wAFJow7a%5$6FJ*IMb8RkgdF`2PQ{qSv$KUfQy4DwJ6>t! +q*SZ(TqO$T-3D%bT#u~yzQX3L#65Qgh?z>+%Bny#_g2?J!30mlM|9fV79{N||=!k#8dGoT>g?6ja>>5 +otZ}%G4kl=fiI)cGiLQmQEwksTHcq0k64-@Y%+i^tJQ}clqE|^3BG3q +KXG7ZF!yF)3Kx_d+5R#-CL#dgj{fiz>L=dFw&v6{b4NHG8g(Gm#E)`#*}Z|b^l_wcDP5^>HvQSqu}u` +WZBx3w1mVM!+Whe-7}Cj+NtjcseEh!Et`*e3nQk%Q*a^z8b7Y)l!T`^=s7sJ8Y) +s|*%Yj1Is)5WgdJn<@ed4$6a9(X2!;}7zO-ge8Y7@Dd}|G^dN%{8cW>caUDxZ~!R;CPVy4lG>$i+#Po +|EIfpJz!xWOC;jsZGNy>W$#`gyC}8r;(8FIt0c(=gzor$Zh3b$!rk+_dXD^l$Wj&uC@=3@M`&Q!=?E| +4OliAtxSYawG#`JN|O&x467M4$v9FSUgBvW>ea@qd?#hna+1wL&tOP7xP8QDxqg!Ti|*@8h$Dp_YUs9 +jn%~{tMyIerZ=-`DCN;fxIY|R0t4k2wuPZD9M4l}IQRU3Tsw8t=Cpi1m&q4$d4L-OTasST?0(tu5;;n +xEagogE8Q9HWn48nIvrt-ZC4rrZlYA`>ib=zZNQ&!lFFxZu{Qt?D~Bg8S4rhKTa|1UYs-@^AL;UO8|m +`AP9vSh_otCg<8=kn6?k2NbOl~lBwdl$6-ig*btTf3cwLEfC04v;+NV*}fGf8LiI+JuJuN#qW#Op?+8}T|xI +?3xK=_IeSNN4dni*%NiI$fMbW3V`k>!&np4DjYm$C{eD-qTTzuR{7c=k1!7A(ooUjqw6Sxm(h!2Y&XipEG|}|$Y+i&^-5~tQA%9Fa-yXa`$+1en!)Qd*(0>XKa%~}KD1m$tFV1=34QS +%+@*;sLPm?u4WfsB*KT(2kU!c@IzxCn#(u){)w%2RzBJqD@%ORm2;aX8#L$t)pJ7=G)5}?|UZIyIOr% +nDD{p%EG_3VF#()Vk7V6HCZmhr9s5dpPn2_hEtM8f1^Nd!=Yo9iq9O2&2#63A4Hz-TKJpLz@Y8gE(r) +iDuuL`fds|sH@P=zo44=Vg4TUg<>bo{+u;aOW);W=AW;aOW);W=AW;aOW);W=AW;aOW);W=AW;aOW); +W=AW;aOW);W=AW;aOW);W=AW;aS_N!mkcxa-rv{`Y!coj~kUK^t+J4ft%PO|Jx8_dlXp~{a1^-ONyT7 +gu@}*-mAL?8Ko!4=-|6-$rbN7QH5Nla6le^`81+?q)^Qi9^H4(1KK*Nt=*H!z!oE%4K7N+w_2iOoZ{A +R>g3punJ#I*i4h{gLt%!LnMQXL@wOwqul=1#FRDx-fw*5^vaxf5Jr3g`$Et<0Bb%$cl-5Leo-cp-CmdV4zU|w7xoTAqYK!3ALz;6b;Vo;xg +d5Y??9t5Af@a4Ss-14*tS5L&+SH}i;A){k#5X+dm{bX-;PMXim7;nq}TeJKYT2#*;Wr9iyJXt=iy^1X +8U;f_<^MF4@vP*z8#W&e9L$Mv|>PX&&=)1hKGOJxc|3@3m%Ofi>c!Jc4cm4Z*nh +VXkl_>WppoPbz^F9aB^>AWpXZXd97A|Z`w!@{hv=UYE%_;gbS@sx+d!B2#|!9U&2OJR7KWe7TBxVMZ4 +>?^wZy4+Zb%1*Xn9T3f_J5X6DW8tS>H3KXlu@?+vNnYj=lUmu~x`_6ItHy{KG}zv48~VksnxsIBIlgr +T+iCZdQnlwMMZwMJzJ?MYz;kRATaBemh0)Pn2@4&aB}nviWcme%W7ijY~Mq`|A+D4o23n8r${>!Ie%@ +;S}63FEOVrXAO23s);k)pm`VZ{Pk2ij(jLwW5e74r^$_4cE_no@UZk(rPh_t$8}bxX0FBOMp +D<$7&)8r~15)aM3~(mj`4Bb#wNi$nq>Mc^P9bSLcxShQ|?{ht5mqQC3;!>;Gi-DpBB8n-5XuRZOzC +N!Q-#v`xWAo4ihN$kWtC2}tD0+ee7CFk5S5t%ggN0iqfz-Ue@_RLY{kPCDaF&vT2_NQtXDY;DYg~?vf +8xjkW%GT+N7U&&x-%)kJvafF)O&>Pu^hXmQCO=0gfd}(Du>kd5q?E4Htuod@2QAoMy>2$IE}L(znnY6 +%E9V~S4m&?ML@p|og;r~7a2cbQQ8jmT##+sUTzVEw1m`SV3CWYU485L(E2a&%8z7-pW;ciqjIex*_gBW6sxoTgGeogtmBg*vRAx5 +Z${I0#%E#mTV6-3z$p!8;bPqyl%(N6SaTG9*nzI;D^agHKlav8JbS@ZX7!z7}3u}^ft`8SR8cFMqE~N)B(&rxKbb +Ae7Me8+@NO38@Wlkg;pxx{3M=|eH;vl(Sh-kVGESIPIB#oLKeHLA)UC%UiE;sR$#zrE0Vk`424E_G8s +*ZdF1tr)N+Zc&G{@|R$sj|guiTRtZ>P2tsxFBoFv7U=2iWO=J-idI4E>I^OY5@PNH@?np}m$5!V=w{9 +w>MvY6qU=5t|{NB<>7&-XxeMvK$l??%&MC+PXV#J}g`20eD~#0t=N$Ms)A!Z6mFOZ*4QHRrK-a4Vdzt +7GbYc9@na$EW5K9OdnF^>p6o=y>NR>42}E$A27I&UA9<{WKkq4F67!r^DSJ9DIB>uLb=^&8Ht}BeA+|NED1XA&_cU+x_-Cq_lEb^fJ+rGR{=hqSk-;t&dYhFwn;N +9xe#+MLk{F$X(ZmmXyUi0e&9b$x_Ie#%5!(0;`h&J`7+oiy1xucQIu|xU49O+KaS;`ONr#xSpyWTPdC +L`iY)Rq`&vDWrC#8!RsID~O9KQH000080Q-4XQ}jUtd0`j;0O~XV03ZMW0B~t=FJE?LZe(wAFJow7a% +5$6FJ*OOYjS3CWpOTWd6k-Lj}=FfhQIf(NQo~-YM9EXtV^!7D**;iYcQ}4XypBZ8aSAvY5K6I8++Mbz +wtZ;_DW`?T_l(LRAoj+#^sGm=B-=b{#Wil{PFBbd3^TZ;gjbN%l*esAN;NSld-o>Zj~4Bcjf7E|I7aB +;<7wAyxo=kb@}P=-}}qUi~RlJ!>6nLn~R&nvAnt5@2+mjn;diZa9Jlvxj=PJS-P`i|vlRcl)Ws26A3x_(?{CU?4{n#*`*K}oGg5nZ-0jNs;oZ$|$=LVh^Wjr@b8%IUySMx6jeH8?rd(XT{mbE)^FJKk?%#dp) +u*esxgEH^*&RPzf0f~nPhOVCyX)k%{J6W?9dkF&KE1x&zsbpu_iuJr*Sm6YT|V;e`u!i0dITfSzc5lB +9g@7#{l4t>`JJ_Y-5syuO&po|e@0cNaJCpW6J$#M{aA=W?0aIDVaZ_nRX4W2bM+{z|g%Q}+2 +s63mVMmS$C6@5-m^-Mdehr%55lmcO69`0LY`FUq|qKbODXJ3qho0#HRPS{%c=@)xzxZ{RYJRiZr$v>Ebdisr|6e-1JY4-&>-lgc0ZJx!y3bN94NH3wZ>{o^uK@I0qK+P_QEk1h{~<7v5nxV~ZNPxo@} +5Va0>>NwO=UOvw^|Lk9R_~eKGBdFXuNy5)BP*(2h-SP0DT)ak+G5nPF{a-ib1BR5od7U=$=JHeG!)5L +-5#Un_Io%@#_~GLxjO}Lk=Ka;-^6<-Nh}Kw3xpU{=%5Zn-`8%fh>+c@e>{J5R(m+@{u?mXGe4gPuVRStrmoEYOY+{wRhOD~rG#d +kh`ObERE#@v&Whc6%e?flh?pP!vQxcB(g4`w9}K)TP_9f`FqMSEl2kOz82 +rX!Va$X+CKj1kWJ>z;_Reuon4mDj^ +$gc@&RuidNf~8sX7ub|P=Ld-c0`rSwVFa(2Us5__6Wfl(kd$Tk(!v1&*YX_3I){4=cOWh7F`h4!b*!e +@?8>~)aU|zEo6c8;@r-bS4>wu=H}BxGzTo1N4W15Q(9Dil0p5svE*y*%vhkhV%T*fn9?1$mkmo`%W1? +(u(L=*^ErA_Xqd=6LKU-*0fD2ur4F#ZNH7`cnBZFFhIxHpGy{?5gc~eyv-IGDKaoXeMu&wC=?=lBhjq +tvTyJFG9lm5PN7vL|{)NzBZq1$4AthB;e0fAt>)<2pFrOoTHXg9KeVKVIJXW;T`Kv?P?WJhi;&KeBA_ +Rue@st&(Uu%*9Z3?U8yp?yD7JJl%6i6G;7W}W(X&_0!LX|Y&u(~{6zWN0m8n<_;t*L`RxX_xoQy`Q37 +K2gJPSwrF_>cmRT;N)_htwH5GLM-~|wGD07p5&INKW$rLLE|;5C%8G(J(w#N|u_zeRv;-ibRSZwz)~5pKFpzkO{3D}-G~cy_n3>6HUSPZD`9sNFbYhcBo7!tU@SPqif0y +VZUtq>R7z;cx@~(EyCb##-tqw+ytHbkIwI5rQS!~)!FX@K22$tIwpELQjc`X)^R2@fk1ZOQhw3S7k{#{Xo*9w*gzsBCIVGuxVjwl-Pj6Z*HD>kWkurp5LUDzzJdpg +U<}|>=H>?s56R6F?ueaZoB087CgVbu)`Va>)=`}lJSxJ*D5aib7c{=46M#j)uB7aLQawU#%0lwYHb1OjvxsTlWT77j#+N|PAykg?x? +ln0RwT_RD_UOiAq)7via(AWz?6IA^yF}TyD8nwA^u$2BrbMsWU<{#@<1V4z|W3vOpC#)}{&cDI~HXe% +94=0oOBc>Zra$s{(+-Y?vd)qt;(hr1sSL6V8o0+bRe^vA9ezN2Om42*e4AZRjVHI!{(-3WHNJb2BOD`I$>u3;f5J4NB9 +|av9n`(j~pczTfA~a_+cVx{@IA)4FOUK8=osFDR1t98(7Cq@2I$f119Vb ++X&4Z3?h6<}eT=D=1Z&68gJS$PK1h)L^;UvPgzy4&4$?`XZjgVI_$OE4vbyym7;wSnova|GdKsHqc=AduC&=E3lj$lU@(G=fu|HATmeFJ%V0kFNQ5ZMyHy ++ohO`b=3Nbz-M{Gbz2v|+NgKBgFHbycz3XD2nKy@|rsVKS8@JQ)Zb&?4^3jZzy&%jCYkx?(7jX#Z>Bu +ggtrsX+0Kaf&vf8o5ya1oF~GKhxEr(tbWpJ|66_MEcG&zPwLD?C(f4qAwz7)u-DGS1`!>?V>&z)=;F$ +!#i;aSI6s)KLo5@#xWJL`+s?Y^wTIsw^BVoaho{>OtC?TXum&$`}lN5)2>AlVMvNxT6`PUhk8yF1%FfvPlVqS|GO@zto#mFvbvC=3R7FK1=eQpGq7f@|%fG+{!RU9?C@9-XN2P2-1jym~ +b&~UCGh}qblsZ^{WWl>#NZQ2uJw?YLg8ZKJxnOIxcC%`P{g*}=2!(p+K8q8j>&}ync7_HrER}>d*oQJ +Fxn(A+&zkl%+Psu0ZoKO;QTv)!_ZK}Q_D;)g`MCDPpdO(3V*P@)VWyNfoK7?U3jcoEk3N|CY?P0-$#f +$8eG68&5SDJlLZ&bjcHOyxAVIxQ&V`pHK^=x1wB+LmSrVlKK4NR-ckpgRX`8Bt^DU($eK5vf1=SAHju +LV6~f`u(lcBwY08!xmc32b51DYk!zKvp%2pAq(g1k|J45Io79f~qX2bb>-8C>hGSDP@J=%48i{?ARcO +5B5D~kr9G2B0+4RQZ#R|Ed-Vsf&i>#Ow$O!6Ct{8IVlMoekRXH@HDkhmf +_prjJn^8+HC+$d_b4#FZUSW)e@IL)kl3fp~n3TmYxnGZ5k*Mlz;1gtMVfI!{979K7KX|S%QCq~tmagB +UHt1>!~E2=r8^noh7B4L7t>(M>QMJ$FiMrHtHl)*_5B%@9Vs*_^Vb+INPrWos*cxWN*BG??MLJ&NoDj +LNw5~K?Hq1X;Re;gofoLQMCPNSYF%nJPq)@hcDQ3%&#E~Qw?aFz#Q!_n@?_4E{C@aS?r;AZ5jY16i4@ +X-30q&;Zh2I)#ZAc*G|z;0YDj@TnXx1yea^+H11W~YhqG?i>iAj2GE#~F#(6vd{^_?yLwDcGz%QR+`F +44chH8Nq)v6=XTu&OydpolNgDCnGuQE$KuoG~Njh3cym^#m+1j+13AIHHjhzbm=3KIC +LZf|4QcMt@hs;kc|Eac=ClOQ1nhzsICRMCbscHZ8xM_F2+us~r^hW>?+?2#F6$-eR>AsG%AZOP;nM-> +ey3Zt5lkN$-8YM%=}v@BAvQQKVQaLZPqwc4d3#L(C>85mUnIUTr}a)l~!nU+nm$!KnWkW%6cWft2&7r0Q3oyNBV??jg%9CA-9V+FWmE9Ql`Q}Wj{ta83|%8e0UF*cbGf@9B +O}i{$tRwIW@!8ta@61iAY#kNz!;-8nLGXw^oD~TR#*N!~XBuQ^76nbQpyL&^ +gn~v*Q2E!keT6irL_wJZ0UqkJpqvWw;xI!a+J_Mbkk83pp1q=ff?NfK2oR+G@7S@<0NiJVGDdMr~w0PEml5WRO~91WVg`4&<#(^^oPbQSf6VDg~$kln2>Fgbd@c97 +5y+*9(F}AtfgMmCYthKrAQ;0itD0)=$=rHVD}ccxXR?^Q;_V7}eGF@vE=@hZ0FAYd96QBbgl(p0sLYmIgz!hipE2P+^l{^QM#V +(WIc?0isCUS4?>ldu)x54DVoR+GK1A=$ZgSRLaiMs?`&ba@M@=h6-PU}#YFJ15ER(NINgFz4!U;JswfY +})9SS23|kCg}T#lDk8c;EvFHYl0(yKFXm4!BLJxf^JFxT7l1pX#mHrT%5q-!9! +0XX~*RQM=~d}F$c03sZ8R=?Nke+HRYy+BiBs6fNcWTI8p1Fy^LmK=F`OGQQ44(d1_`RN@qIFix0D9q^ +Kl@nWF$A3x&_{YwKKZ5;0+P26+O|Ajs+~lC`hZu?a9Z~-% +Uc#9oN(Y5qm`x^Eb+F`>`dciXCULKdy?Rci@}XlM04)8Ig=&YOLfpEfk#igM-Lb9l-N8)X(9|yz&8`r +Ayz5Cl6EfZ$gnF5Y-bWlR(+Yi#|R#d9&fu9H3I@+2{9^*tq!u!>-I1~<#nZk0t8cs+vXQL_~s#~6UU?*m$RrTAL@f?g2lxA +9`MO3}QXA5$VC6yO~#TW^{esQ|&+?4Fe;NlU?>>`Z|uYXYNPXuGk?U?a# +~5VWW*!`z1AG^j0$&4@227?u^3VWwcStJ^;!JJlaJ{wQW4)L7Nl9?3>f+SExo&;BGOHg4K*X-?K?;e+ +5jtJOs13G%0CwBL +lmgsB3p1aYSnACJbCk&*Z}rf|8$n*6(&FK;bUF5*du6m!q%iYXc=*AB3}p21+uDoMJ8Nx@)MN5|*_MZ +3CrSxW_+R0ISl~E01=7_Ai~x@|87AwcMXD@pd5dXJ?d+aq3*TI%}vMP&P32p$_G@zqDfiX*!L3D;=RbhYShC@>l<8;?9RqRF~-U`(dR_kRO_VZxN(a%htpoQ&t_)Q2X- +b$H0xuMhNQP4z=RqX}i{Qz;I4X{c}JGe3x+=R-9-8m2KB+W{In@5?&GhvUdJf5{v=@zXWY+ +_JUh=F>T#z-$4)$=E_NUJA>uOc3PAI4Hitq=Z{s;T62*1= +h*3l?E%;5Z={N7IyKxG3+!@oZf%Ru>09P0;b-wA*B$=Ba> +)O;NCVX9C~ya=^^tBqx-aeR)Z@OVH130N9&t=nxiWPdm4xGrMz4o+Qnl0L6Lx3k$sUhk2`I@FSu*)ZDE{A8%45!_`e +5gNo8ck_DiU!kUK>hJ7dZsI}?N*x>8>X3+YpI2z$mC4YQE7fir9@!tnljje)-iOXrI(0&Lzk% +2T)uy6MXtJD3w}*!io`lZ-Fc$fx$z@SDrb_21r(x~cmhPzG({xE=c3?_Rtl6TPd9_k9L-JT=tR0hZv~ +6r|b5?5D5J?V1XlMYxQ}=;b!r$Ee%GSX`pMu`;wgY09jHQn74S#fV+a%tCbWIA~u*b~cq6FtkbCP-oy +Mgxj03Zr|!x+(usd8LYstW|f(zns#>ukB8aQZ^u!Z;46izde#Hw@LySRav2Z4dMWp4C3f3 +GQ$37JX*Xo?1!VpbdV%8oW&H(51h62on0cLJJb44`l +)9p)$sHsc)QbLMI_|??3f=_jkQN?|Vec1eR-u2Ghs?xJ25mR$)y^LAlB{!aDX_YgVWq{c9f4q*7k?Yt +Iq93H$lZd&t3dk$UYsMy(XtMruB$MLSQ@cqV(#F$FNExoc+nkT6(A&++3sM~HP)JFKD;J?F|_qSIuOP +G*mTajVtJlyGiu-ZSi6CXRK1ZGqV+C`~1nPMUTctKwj9j;pYKI`5#mw2KH%3Ag81I1VbLVE5%h-JM^# +e#m_$*X8(lxy5SqFz&4XqIV$g>r;`3o~Bxq{IO8WzOtHbaM#^)d~*##3B9hw`fBBaV~ +Iqm7U#=CdIX;&+95uLZh*z0%!bXMB3vmH5j~G8w1lcvOFiK=`KvkO&7bmF=DQM*7HOp9?9O)3F^N;>x`!BA2@8-Sj`FD5Q=a2V)y?^uK_4d)jt +Gn&~?e?dK|9$`Z^^5rZ`|p2zbN}+iyNAc^7Ma{bzUY-oAYC!`=Ti?ES-=xAE)a4-b$25(95vJUq_7zkIxV@$T-`_RY_Z_|K1e@yJ*|{2Y(^?%np +QkAA(S^Bgh6zr6f|?aAxc+cU0xyFI&md-wSFyI1o~K6-fb?(zPcALBKD_4e1ljlXQ$pI$uvZTsT>^geUu~b>y^Wb}f4qBh_ZV;U#gE^-zJD1ve +|rD&?#bENz4e+UtLwZ&UKzIgNQ=a_g5@TZTTee~~f$CD4Ae){zJUzq +(TPoIDG@t0q2pM3sod$N7;tL?iNf4_@uetCBv61BYu75U-k|F1oK{qW|mzHi*}j|KhRcK_}6=HcD#_S55i$ +WBP#KkaUe@{j$!4WWPe!R^*kT=e42-(JTSd>OZYa{p}%{mJWxhsWFP!-u!;xb#m?;@&-{w7;Lqp0@3) +FXJ!&)qmT^pZ($g(Wtz469a$z)kn|&j7I$Dk9TighFHG%=Jnmwv=AV~cQ +Re{uiQi#Pv03{WV^i^rJ$7je}C?-qCd_~zyP>$vcLeE06%55Ilyr=NcM;O^CrAH4hNw#7?H|;fj}(8(?YREb`e^*ArF{LV*ZHTk=eqth&N3=D?scp`oxP3X)<1o9_hS3QCF)G>8S +B6O{u=8yze?|~fBt&=ef~hB^eko=ul&#Vy@?xRHoy5*t9yDs{`KqM?;oVSO%40`hcJ|{|JCDOe1m%A_ +TP{-=Ja}dcoX{j_8nUG{f{rd+rA5Hr)3E{^z0AMZf@L{ub=Dtw`Sj~QJpJAi^y3;m)bZKZ&p-eAlV>0Q&#ym!_J@z +3#Rb2*37eX3)7bah)b`^xCf;sSE$KF__PC8t&-gJi|2l4aNqcopWV9&NcA4-^4_C?aeoi%SMmYuAN8c^Ok4FyT@wf(K2(2TSt$J!ve5) +@wb$nk27m?;ISV!@h1H??=41ZJDU>sZ^!Vmcw*w#lNU%ar&s`2o4qW~INio8GN~gzJzO3J&iSVE?zx^ +Zu`@O$estbFcKc*ykJ|VV3wZ1<4lrD;`nj2TIS9ic!W*EOGpn%iz%!nL81Um;|q#_A|5FF_R +urm1^DjTV?ckpIR9%Ha<4+WRutCjTW1idi;GqV-l`xign6+yk|(3ugD}?2+7$I;rJlt6^~HTdi)v}H= +e_b{xajf-)v`$8Sm)=#3VweVx!K&LXUXGjHJbT#%9H{JF`f6tPZmaV{+$R(R3Qy63#a?L3Z~c%3k87`(UvwLmvg(;TtTqpgP|}nS!M1-IZ?!rb# +7y!V)4>A`x7jk-3o6|hDNGBdv|u&jVFS@h=#a}eLf&iHmmCv+$E9&YkIfJJg +Mu8$XN(jNV`2y+1~j4$Y|6=A#NXoLjQ9_BP^;0{_~F2DZM`Yls;oxE{ju$d`#ZPBBSHiam&C0H_7s6Y +7>|Qp#kw3wzUq_nHE@Z|J7S9Q5;0k2vBs^jY}mPw?RdmsDSS5XzB>rk1!uO0b<1i +ls@mDcm_)o&{Ce;zjyWol63+>FV9P?+Qx8cAIrPoka~_uR8u-XJF)>9LjX;@dykczcKq?Mig=;mX1I@ +v_?=Gcgb89RfS`uC<9&xOJ`-mAA|BlWSOhW8YMP|biRbIeXWTcS8csBp)E*_SssvrfQ6C$)Pl`dgeS! +4ITV+muU8jr>6%cBaHd!&4GB__usRz{9y3w5;$_{L&c5}*! +!VX1(kzP3y<)p!W_>KF2+I+Mp5GFFqlRw9qQnhHn7A;9UW@l+w|J>oarFQ@iFt1-Y-n@AkH$vrYhVJF +BfIR3j^^S#VzZFB;%>zUC&E0iAKCpy@WOcVDc;NYA$(S-Ze0UMz!GDk0yua~LcAeD63+?IQp0&fC`iU +`$GAt|}M?3nNA-xt;Fs&` +iV*64|8#?^*HY`*2J@NNeB-SlGglAdCxJ7RwfIhk|94X=?-x8Ml5EM4h;^p?N(PASGNS8=nZ&O1)G%6 +R<=O5Q2h&5mH0|I~YAS^uW$V=z&zR_{IQ;P%kRTNsQ=HsQ)J+PFVv-z!I0aJwz>GFhV0@J%}-@L3WSb +iu>6&9Bd!hkA!~;s}n&T62-KSZaA_uFSIFCTD6Fvu@qo*^@Z$(9joRCQO +rV>y;oij4Efg`H_QPMq8r*m(WR@JGRZ5HaB(_kq*S1~wS)<(guPB48n;*iNlIAxX`oB*- +i#KVlUEiNUSJgFHK4B?dOmVdJaXT(~4eat#~-OIE>8W>U~=G(XJ5j;(1tf{>LhW1+)zp2Xp}z*usU7! +sqw-wdVJ<`n{#d=LZ;=Gia~n0$VutWi#8J?Kl=&Ukl(KD&6@lmiPv0GE}XYv2f2D!LWBrEx$$3@LO9L +?g8th!C-bEX5QFoOfmJ#||1qMJgA=p#oT^j55?>jMp$x +%{vsqYv4hu(3~f>iadZ&FocY7h$*&;QEuuh7MI0mDH8^#5F|%%wG%Vrq{=e%-tL|&y*yykoL}#63pksguV=I9Oi7TPC0WtOqlTa&*Pb!%Rz>w +1Tlod!m;>hEhZPii|lF{q1f`9P$70ZrWijuJI +j*KSU91GI9QDf%VQc%#I+eioV%~rN%7c_^BS0drO$+36(Gc#@d8Re_Yy05vRg!@MHIGh?c#Utce)l;9*0Li2KJ!WJ3Lr6 +c%4a!i*DuCGnGXEIB?RU@6n~sq+Vae=KQp+3pXf=?)Df46^dXQ%tBp3;X%NHD+rMR%Bt9klbERZFLo8_%PjtB0A{orKk}&`ElSUc2y +3_3QiRc9^N6X)?u2Acy)+@~-q2=3PQ$}uV5S>FNKAt#NJrMw4s7`Xo5Fg;=G7_qC@4A10mL=ui3jSZW +3rSdL9R*R{1q>KvQQ^`NwRlbMks>Jh&HQsl6a7{ZzK&!N~GbsHd9&95ToZ}DCp~v@p+xu2te5})*6Qk +y~#eh#)`#{#1CHp(1U1V+x(!gTI`#t6M!#n75o76>cGVNzbr)rEL~p|;d=~sDj%50go1zsnUje*Zl_` +FfhkoZG9L(KdkOLWmE43$iaZZXNOG0LO9s#1Sy{rW{nZ$YQTEASSgwFa(&*p3Go%VcJs>5?m$nfgc4Gn*&G081XUIg!nvx-)u?f2aihHSp`km{OvH&u>@-nI29AIwnctri( +IyW23vV25@rd3u!?pT_#%X)xat#f(7$Tp11JhFl74;qjLqK$p(OORM3N%F_N;oMyM}tgaA +E~7Nl?J&GB@*5G3Ku6<3@FEJzFPwt^l+4B^W%FoquM7?~J}az?&T8dZf7NIIOmuqLjl)FsC!0ZS5W(n +*5hl8a|%w^`pfhPuuwm=ZO$8wlG*x@O#{D$K}Kz=wT9j1H8$fy;uB#8N1I2eb2EtmnbHi +DBTWtc{FSRS3IQZ!#V*9wlIn7P+3fGhAO!JJSQe8mo2+ga;Zh*sGI}4!KEkh +<@II(kldp1G9rXX|FuWFfhI9XPv^fhnb0ipmc*p$y5*sj7WpK{+dcuPQ +NTgXY)eKsvC_t&G_6hR}4HpW2nJ|k~N2ZSvDh$ZpI{v)ivXR&#OL_FiAXZ_$y29dp7-`nFA)Fs +T(3eq?~Bz+)xXGY1)dIXC&!WOgbB)A%;kA9+vkUI5c8LJ)%3Ha)1FjsV~T89~M}-V|nRtZxOJR`9Spg +G(pf0Q)v*0wT^PI0HO!Yy)ejDn-h=4GB%UXwZ;*QhuLf_r642r9QY%#&@mHlAUMHGlc&`(opC3ucRoH +F9Sm`a6}SebB$O?T5$sipBxyGsLsg0Gt8o@uAMS=NJ6xl^}V%i^I$>K|aqLanVn3)KYN)id_8r +Xp45Zkmub?^f%Gn516WbMLJ5{9BQ19Y1xu9mrt7MwcQVWQ6IOv4>ivL+K09h!L}=@>5f1oW)ni-0Q|( +z|KNs%87G=^&+G#zlqgYx8mhEakLLXN(GJ)EKj=+$6uuvrykCq_9gb@{xo|7;$wcv{vW@P~?!$4j{bb$Y6lD%v>o6R!~P9~a5jxz`gf}e;+Dpi(Vr

A(A8wg4i+N54F+|^%q|YJy0-J&rCe$w!8Pa)K +w?e>zTaPJ9YQVJ-4|Zufr$M%RbTWwMT}#FwdelRF5MM%q4^3qbOi8FuIY#iwVW!VDJ*`#?$!7&PtioA ++z$;~073}JvWj+a)FY6X*+Ra9lsDRpJ;eB%X4OQ7rmlwchw|vabFi5s)bckXT+JZA>^W**U(lu)~c|| +ne+yW{?6^AS)4Wu-!p?O5#4OpP+X%4Z4!n%`BnugZ36qSIbA8rcaw&sv^0+~xxc?w>3!<=+#VwqxWCO +C*(g;^9#%n8P>Xyj|g1T5J+k67oxzfsSt$w0&xFc&YbqB{sSnS~G#h@q4NOR^NlW!*w8LqQ~I00ZvCP +ubkyU@JNs1;$169tK!sjU=d=3hsR1B~){8Vfnb00)*vktb(w)x=D0bte#fU*vkDrhhGn)9{*PO!D{1p +&Lrt$1uTt#MVvJc7xy3kQL9LRXWPQ6f +cX&7VFmKj1}1^2rh76cFFU#6qJN4i0VN|UkdqTH?l;QI>x`6@inPk^8fJCg!OT;218LtOU`RxI4mQZY +M>U`F%^8~j>*s2b#HtC@~MF9T8NV@M}ZynS-4oFf(ZB`+SJF0_Mgd3K|V>oS?Da_i*+lahfTza_!h}8 +GVE~kHO<9aa(qw{Qt;E{1caAn8#_wh4c7@cFt4nll^4?38CU@}O`r@{dwR!G>5$Z$oF`F=-Bx%k8Z$* +I$EjN>C3Heu0o3@xJL*eNB=|&K!*pD0e1Nc^pz&ykcv+U5Q{?S@cZ5{CpDhERh;VHxQc+DVKtnnPy_} +1z7;$Ep&0Qb_@0p42k{nNBb^_Xtc~92fPD&_P>u?@KkkZO@d_^gTV|m$%0}czJ({{{yF*dR2Oqu5_G+ +G_AK#b4Co@(te#Tm9iHl|6E1@oG5hr`lMg?Wi&v2NmS2oIU19K3@tl%!*W#!!k2VBOF%lN8osrQjMk0 ++vG5m9dT~8LlG}xw)VrRo!xSCmMwjVr3~|6qpHxszj_TduhB*qzhtQC_<1VW +&EG6)V*r?*FMr2<=)TbKDA{te)4-+t+JKb}{`dqFF(rt$-7k2>%Sqv5}qj=c_pr|Y3RR`lKfeCC)qs~SP1KV#ik-rrPWh0PtfTQVdOC58tOH01T1M1D&%4j1)9`0p@ +yOjaLeUws%oqUWDvlOlBU@ti{s*SWu}mBGi0;^H?8pQ9W#^h2QdkfQcVIX-39q}L`eVARda%+-E;_6= +#`E^x=l!WEfaYqGhkwwbag<7qA5MZ29~%%x~-ID5= +Fg4P*`B@X5s8UIV?tzpjfaSk{+4Fd!|X*UvVge`t`il7}71=OOggIBkTh|24P9WI;F{`6{zu1^v!f<LCW-t%T(egF$q2_7WunSU*u-H;F=lF*#QLL-05?ujU@oQ +p@_Al)X&PUSS{pz3rQ#-f|VB}J+~;B2gx&*6QBn+Ii_>_2P!5UZ;$-5}j|86ibG3$M?L9bC|Az%nM90 +syv4&s2J?8=BBsNOmcRFjkV@B;6*Vc-@OJz#wgG!bud80NT0$CyLlbf)2TMSV7uYfX55TXQ$LM2hRAs +Q|rjGbD0d%OztV}Czo9SO1DTjl)K&wgOgAD0?

Xcbr*q}v1sCuLnQ|7wa1hCl)nuv4XiS*mR?YBO+ +OGqJKTo~6YPo_MT*DG3oWqum%wpNfwd28FDh+!eU_VP=_8m`w|fpw8I}0tih($dXaAdd-|DBOK!CfGhMXB}U)6lwLItFj7k1nCvmZ)g={@Zgs{$ +2wljZj*SGulhEdh=k9>Ju;Zw7kjy6sQAk`KF0PW7mJynyTheF&taH||fdNSxSecEwV-acqyDo>YrWMG +pb@F}CCR^6pwZ;*!RB1<4eiGidLmcVAw_VoEX?O?(39yr}DTP8~rCBSq6ur*aA7IJ0u+0YPHXnAt$o? +RTOL~3*246Od>fsTEHSwOONS{bDk~XW(RT9loX-Kzm(}5lUuN`JX#46nYlE0xeI#X-25*n@LPAi?`Vz-4;@+eoS()0X2e`ggSuT4Oplf7@H@n7sdPu^K3a=MbJrH +3Igdi0foiR;3)z1CwmP%Yxc58k)GKIj?0V6Tn=J1q5>7Ff5$nvfu5N&^Y^T_~%R?koV>K>G{)a(Xn`OE?pk97DQI#ZC@ZL5dKPO +0xlLhi++meIN0;`8W30V5ym%Szu*8ixJWw-4>F8LLDU=6y`ZGQUI!j7>8m9xEZghmtypFdzzzG8veQ=P@Xf>({V?M@Sy`&VGIq{YYif{gvki{$YC7DO4%MWK!Omo +l4qjBXQ%>*J4IxDqNw4HjT>`dEA?1>aX23$2vo^(+75R3=0MslX0w-8uIh*4WGE%cBr=2!rk+!!A+3y +SHZIEs&T`1koT5Fk2&U`gZLVbsVhc@H$q~qvTq1gZwlZe=ZD6REc3c7@jX>9dHSh8YIg)e{+Al0<29hQWGGEFt_@Iw#zzp5$rhdRjCS9PpGx-I6zyEe`0Jcy{dR+Ypo@t&Df%fC1T +xfH}n8ExF`4<7z&;cgAmZ8dI|>vJluHuETRGCcscC8LocRgq75pQpwSstEd$hV8bt3AI#y6v_wH-$_C-o+t_Hj@-G=s*PX)vT*)o-x1(uGP9-yKSg{xqnEviO@Qe2^Mo#G_Tvf*fl~n99 +S2!a3O5e{eZmJK4Ro}wr;MHP=j<^tEEIe%OP`xeYavpdTS!2*(HzP@&rQ2{p6vYGTosFHJ5BDh@@L0? +aoX}mmGLH9sUMLD6&6YZP!Pzp%WqkW}yyx>Je?wS?&2v(yh#Y${1xfEfK!}EhcMKS!mBg2Bzk5D^&pr +Kw}z9Q#2y-1)4TUw}qbLei&a1ShHn^@#tir0})9BuOw!y2St-?V6>CG+8&#YPy4mTkZvhW>GSj0i7nyP#-N43X%S%6PASF{WF$ONfrOByog7c6NDf%#u|;f8{Ok7Q2a6llV?~j&K +G>St+7-m*z>jwXf;W2o1@3Fq?+hCgeKn6BuBNq=&INaauAR6CShCwK~AkJV>`y%%EF!2NSYi8W)^6kf +4yhRQF9*7FlG5c#)-24!34FGcQ?E0qGVpJ?MdyDeVd|6{2OqoR0TewWmNGcG1&roDUW0)Cf@8+-=-lD +h=tjPy@<1^GsPL%`M;YCC$5#3IIw9Np)^07L#AoY)BC=HHYZez@0qrKm`oKfaiCk5k=61iP-)y$xpJA +d8{BEAHW+glvN7gZ2iYlK)S6GAY~RD#QgHh)HfZx(nmecUde7~EamcWiiFT8BE+w9US<>0ZP%Y1a(&b +YLOF11D2MSxq)JZ-k2S&9&2~~Sfda2L4VmgP|5w*$gLGS@#o=GGysK%1P$3(f?Lw6<3U|6ff7>+0Ng^ +(B0cN7u0&`w?1*F?dbe8F%tkB}RfQvJpC@C2ZGcHwzFzar=BCes%Y{DX^`SGg#x6`&}BmnrNU@LMGvq +T%=(A8=dN@gi}${v8-1i?tgsKsu5oqJz~9@1?hAdflu1E_XB0tuKJZipnBLBqD;B{^==5}^8ahZ9Eje +i?d5w;Av*?P42ZhGJj93ba*sI?=mL*HH3$R}p1a@cTdPGIJ!&`XQ;yAy3A^~0P&$}UvKnnmByOnex@8HO?&>o1$8Je +TTSFQRv$9i8OJMJLCY4enP>}B7Hgi2#PaBDZ%q(?uFX?OG2v{<4UKegWtgT>xjaqQ=P#Ieg^nLWPNfo +aiTWvbgl>I8Qh5)IZGS1UO;34fr7T@hsCVI|bnb8|qt%}@-o=jzCk!?za5!5v<3hiOshFD?S4Q~Eq9# +R9(KPhutnd9`gEkZu#Hd7%&$dxQrgp9MatlDeg5Qu!^Dxi138ffE|w!yZJUo7GUVmIBgk$&&0*5E6tu +nRCO9X36b?uC~|OHRTiuIl(qLM5lN2R(qZHYhX%3ru(x41_gt#(>YZob0$VAHvX~Y@Mkvb{C2efu2hM +dvq7;~U>R%R1L~g#ji{;w&tt~%=&*HM47F#obUCyt7zk^f=9x_{YBLe}YG6Ge-4-gC8)hnbB#wMLIHw +6nq!5E76FayJ8I&?h8#3$?xzy~XxiZ&`DG6ouh_thtG-!l~Yq}tgx`lOX_V;O1EYuY(0eVeVYwPz|@$ +muaHd`7sn?c;mkWYyVJZ;DF#147mNvU#;9G!iuOv*e@+qEFbBO9;~r`h!-jiSw@K>`!X1V!dxt;=FT9*}PHjByPc4W5+>^EVZwYQ!)JGz}qw+i56g>LO>uc3t!1#f?26-4+itIW2Ra +z8$1WAsI?a-C9KPUw~4~j`B^i&DyRO*^c_b^Rg9?ZmVQig2E(A#io+OCNAB#ZQ7@+fSnYD@>mu4DyMa +FDiy`!O4e~H2c+BHB@3K3g;5ixJxlCDjN5VgjZtSI1Y8)1w~-ZUp#CUA4fa?`B+1d$ +Ax7NViFFMmnLbN}i}d(YL|@E@HihOs~_|_GBQ;u0*!eVyZic&sp`n1JZ4UK3r_x>!!yZ;L+VJ>`$?Hz +*_)D4hh(B#=vDWtk4SU7~UiAxHhjCupmalzZ6M(H>9vEOR}iUOh1Us9!fb``6TSkP@7;ee*qmom2sBn$WQ)F92(HjnHK)Al-He8EkKdX_1=!O6JX|8t{IS7~MT{MJUTNb>u@ +DfEl^l*Le9nNVl6O>_~Jt?Zm2PV%V?h@*oQub$dFg;=w2AR;>>kD8$qCB`bkEAl-H_*ea$iv&n-3Tw{ +z&8B%=k{3Or48<*&_3`k9Gx;YWq|0>2Fbp|Xfkvx76>=HCZKC|J&@VFEI#g+j(&2u(zNYqw)pN+rhz` +0^KNViFyvBg7t0ODB{zs@p&K;b8hw|l&q^ECCMcE&r-24h>0e_3PCVG%B{t4}nTU(=ikiL#*!PFpi!1 +3Ur81{pq`auM_(c1^CsM-E801=u|c$$De}5lZ$fg2`RN*h<8!^M`I#FaeH~k!tr|z0cY_NVk-|F(2Y- +06wG@Gzj#r1W<+qxGWQ(JY6VCegexb6g4{FzO*lx_keV}wRz$pLZ+%{?dMzQ`N2yizT0}P)3^5K(QY` +oYE4{L)ne!!kZw18Uh-Hwk;-|F%jqMG928Qd;*=KaYm>VPX>_}*$XfIT{aRxWjzf;MX+$_R8|R${7c` +5V8Vo-mZ?;q-Kh$O%$-VYvXXR*lX-K!6(8nHms2Smhq-+`J;IhN&Eid3P6Q<1Bo;&Ml^ME_`-)M8$3Q +4y*Nje%ga+6|BjNC7Gr2-L@-Qy7(Sj??Y1B#~;JgYvj@?)(rq}x91Kb7ff`NsnTSv!3M34IxspNY+Pi +w77cP9`cg9nP~chodi_2kAD+kr2Frc^0Qm@bkVqVH}%3iy_GL4)1X(wq;UUgCDhVZr|Bd?c;N +@33D$M!wJuaaJb)tN6D%lM|0I@iaW$4O%kRDN_fe+djnO4*9kw4TKLZ!RjhS+n0T +g=@46UMf8$x32N!dVvj|lkpK^(A=T)%?8-_n;@rf%+1FN^G5Lq@<84daAl>%4Gu5L!WGiT0X+R?p5+m +!L=FsFQA=|^=d15zwj%P5iKYd*8AJT0_plY6HQ+eJ4?v}vnw3^LA+i84S-Iw4Y1`1p!V56i^3d>_bHw +UEKL~@g0A?0Ro5b;8{)C)wF#B_AVt`_Ka_O*GoF%hi;8BDrdC&wI+ZnJR-*hHUAOT2(gci6;z$eh)50 +kc@Ar~SH+(O1JRs=>59;3}7`fOMPfjFV3_<{@vMDoF@F&w?Y=&#so8G9CkoO`FqpU?K!MB-?%s42Q*X +E#>rtlS`gYK%|{P>oXWxl@;O96HTEX*7NC}A&JsA5<=&C#mA6tH+hm0Iz(>mbpUEj2Cwk0I>p%9=G?J +PGQDQiia0(?;bPs^X=w+f+YK%46bd@{b@w0~qKRydJo|+VUhUnGT?ndgdn#Z+F7kv9$rMW}h9x0Fn(U +FJyV19%1C9gMAW3Q(J{$0^_121^F-#u#2R>M*?c~rrj|d~fq0C%lqqKFD +$Kgr0&3BS@Ol45=XVE`t2_=M80|5^o;mtfH#vVj5@@(kg2Wu%#IV_4Mg)wMpMGj1{54w2hg9n=u3UZx +ALC?VyZY0qy9&5T`gr!OCn2W`n?DP|n@C+H=oe;W+NQzAkPn#x^VSh3Npd{cr)){&Sq}%P(1^c +qIT43#MXE@eVZv*|rwr0CvZ4iR8U9xo{d)L8ATDu0OOUR1wuB6XaT8qvG0=&iH2abe5cq}*N0uq_-N! +K2cIy|Fn5ke10w^gNUHa>gykR=c(!5*yyQdqdF+Al<_PnqgR9xo|iD2LroS6l({=gnDXWAv* +iV!zl0VyU?c?Z?2^DF|z0RKecltyTN^MxAGL%Pj}XXTiLLBaP_6aiyT&pg%U;sG&qE#Sg9sie%4vL +%GW+1llCt-!lOy6u*LZO|Ti3oZkSuk%old9(q{xp|Z!>o!9VRK;dV>ch}g2zgUE4h9+}jA4tOc`{A4->^@b+U?h%%|!n{t7>5y)VM|k7BiU%5im-f@H8XA8{i7 +MszekuXUf1&UcqOFLWb7fBcbq!3wVlz)Oro+bL!n^*_vj_+|Gql#q8s|PAhOr{OM17LS_SoQjF3MDgb +Xz^(*CSZ0FhL#6Ha!BRb#S6emr*4|%Gt(aBt?1@uv2YwK7=lHX&$88y4&06vAkv!p7$&IASv6UAw3j)nGAM-z#5}L;ZdPJ+|^Yhv>tw1G9(s +!o=?y`iXJY6r-9B7$S09wh`bwMQNlr25`i@JZLW+LUjx(De9rsX^5Ub}a(KbipZe*c&`O$pYh8quq@% +cHnjX7nRHUVOkZ!AJn}>AE3d^Q*!#qH!!E&dkFM+EnxSmNmrQD;wH5f!(i@3oV#xY~!UXN?B5z;aQ6@ +*NyVqHIY6%uz^4f~{vcJJ^5HH`4^mw^vA&)s4@nlttUH#U!59kNU$@yuiCtk`RRh(&Sa9zmH^_!Y)>N +w=P>?g200tsTZvw@nHVr`rB#n*n)AZPTWxKI{tKuY0KKZi~c{<6=ojvZDuSkpq#hB)?mLguZ$%#qQY* +A|C`X9&*w>M6`MSmO@W1yt;%q{4Ep&N8zCjBu821u9!0LSO*@bX5pvrlDUZIR!1S +{Lq)1!L!M0cS@34K!+61w44gd?0fFFG<2i}e!}!Pr*xiFyF2{iEx?6$$Q4z%^{WciFnPw-23>(`DEwxGlrpE6nb>|{(&=(%I!q#!W{DWGg +)GWI4Dx8h(!BIBLdyt;zG<$Lbr0N9mJ##8Rr|8-*eg$p3VJke2!-!G!H&kHXCC;0&0^(%9pn!vps^9; +h3l;8@jq3p%WidkNjSTlc&p1MxC0cp7s3#E$-W`e?u4x{LM_D8(5dO`T!MSVqS0@$?a5rW5J6tegc88 +s!!Jduj_n1(0mLH}YYPOD}xgJhqdx;tbB{%KqS_(+Fl&ZTGU6SuyRWQGlrzx&LM7YJFzjdR)nVVq(hR +ya^kiL=^$D5Xyn=}K2Q!&!o>x{9zI!PmKzx>04E9YY!liHbG^afkTtSf3I4s?=@;orz^H>XyK!=+TQ^A-l0i0*8TXnM24{pa0ixVy1 +k89uvSO(c{kzqqNQ|+C#eBDF@Y+EHeoad*9%nXvSQs&pRcpYiq>DMeQTLI}do5Xosg6AG(sfTgdm?FLE1+=fATTcW8nlIq3E{ +g0^7K*|L7}*d*r8GJAe9gG9dBUBbDRAD$j1h@3;W<~Rki(-k)4YUmD7I`6t0WWMA;39LM!g2MB(!_}A +kkTK5SQFX;PX7)t4fdsqZi2mNR`MB9yL7N3d>yc0`#cu#*97Z1LsjZ{nF8kKUnv}U4Z0SC9ri}&kq!mmlg}$-dP$x*J#j>6AGMkWYi-)?N>c&8LL=}e +;M4@rs>NhHx8jH5O-B=e%NoGPK+pE?@-GZe+0?h9{n-g;11R1rH2M?=eD9E;~cENWIt>=g8Zmcw{qep +?MshQe0Bd^$o2~Uo}U{uExHTJQ-G21v0%jzXa)I0^up3H0D%H~z&6Hauvm$BP8m@HQS2#VhfKd_rpn1 +#LcTR|$T?LkyRFTV`zIV@VJ=4(Ur^cY(n2I5`eDvw<|N4|lzAL3?|@~RZFAr;6bh{fCNo^%WJJUpmca +`EiT1aGCtQ6=pU4`vtTJXrvxS1oBSv_EV%y$0ssH~_&xqCCuuhazk~tEX~3r!a#aXoY9hNpRQ7nqSW1 +7Y{940qM48c?O2{r)^eje$xK(*Ib!Uz0)ZNe9L5 +UCLa>2>#Hk;J>}kQ_u-It9toy;Q)L=HXOArNJCQ1qXDZLD|0&%O>DPj+UjCz*3y%PreyeXO0wOQl;gD +6#kXgzJLX}Ylh!mRQVf`(84Q_)SGQc(=i6X1EqPohF^*2mqsz!IJ7?6>R$Ajg79C&0Mp2&7V7Fnk;~8saoXGp@ugqsQ3(_r5(A`y2UEOrMefdNE!P96;<54u2#slh) +XVJfOrMBH_Q?g~6S-Fu~D2hzRBpnszhg3=g#%?G@ENC4|M_PJ`%13@>WlFYWa`G2AP(NkwQc*HOMNw& +)3NMXz_-RXHcRxT(b7S}M)UxoL(YoF-{`!=#4Ody?sja6@bW6R@pZ^BM#qxkcrD)OAI$E$}`^wqAlgM +aq<+}35cHHehh!9PL{Z4bKHdYpNM^Na=8=BXCYxJRiSfk|H3R^cW<(8S8$^9FIJy2~bN`)rNnRI)47~ +x6i>8nc5^dScBM-OQ`Ck}1GrnX-0F!cp18-1h9$un`g;gwW7{e +&_B3u|&Rk`<1Ojggynm<7)@TE*VQ5;T!#!X4wF5A-X1oY1kt&xM;z-(~P9v(Qe^AzJL&ozG01M%~Uzg +E7b)9YUz2De48y33a2mh94;2&G7YqEr&Z=*kN1YX}FyWUz?70TK2`<5BX`s2`4!=^&1 +2I9pIi^Kg-jqUAVT(0sX=&*DKq6f++!Zp^%7^2y>Hl!bwl8G9j>+qeFL@j3`p8EwTYW6UW_Y!nInMau +fOW~hwb?D_@dZ0G~YoV4*>db1L{gYElex?nlaw~M7ugD(BmLy^$m6-E#PK9o7Ahsqe+rM_{#DV>DC-h +b-#?(cek-uH->F(TJKG?+gA&m+=qwQ_3;3W{~Q71psYty!ag%&++qO)BMOzxEs<8?&G9vIh*Vi_{zEv +1)}#w^H*F7VR=|lbP%@M+j(6d)Msr0Werb$@Am8M2K@#JDj4EJm-p^s#o!3HJLpQ#;sPWgme4oUSQ|4 +Zd?l-3#>*?tChsfS*<#bRep#!A6Mb}bly>QX;%@P0JrB_Bn~F5AnwbBwmUyd{eXS%#7Zr<15k*>5T_+z7%ePuP>;H|sl`Q{ph5_(gK%~g0Jw$C|hua`N;9COUM&Icd-{ +(t4ur+<3(Rr&JSXHUO+@w9yU<=3D6bNO%H`@zKr<>i~}^7Z}AUvA!B-ImYpUSF4+hw|sU|G2rmy~^)D +{q)P*n^#wlclYJh?alSu$MP!g`Q+l)k3M^Q^LUd_et!Me>)X4ZukXv+-`pNBsLoUEMR*&+qc6H;?7R&ps;kJdX_VyKn!bJh{Cs&w1 +}dd4BzHegD_%*K;MG-MxLhzxm;pEc3&MkN$7|Qp%sN?*FZPb94Kb`Btf$G>G_e=P6rekrf6-j@68*EbJy_-w>uxqAEh4|n(Z{7-kUZ+?8opMH7!I +?G|!kJtA2%+sllQ_m+Qs_VS;;{`O^g^3`|cU!OdG{^YBd-~BP~%}(dloZlSj=BJ +-yg0D+fb$|8t@m(gK0sj2-`Dg!>Pdxeb*_Y2=e#h*;c=qzEr!QWVFTQ?Wo|JE%Jb(G@vv0qA^1OWW?e +lNGe)05^QeIqN|GLF&=I?Fte{S)Q8S^GA4^+w19p`5Oz&;{N^X``5p|Rxb1DyPwLN|Je4eGw_;G%f}!8V_81gPk!=;yik`m-oJ +3R_b=3*7uqt8Utc)hzp!k1Aw$j=>L<(c>kG~4JbQf&bo^?~c*=9Oxcq~Ut9|{$hxOz4KYo~ij?IVY)>pp$y-Oqu<-+k)U4>&?w{|{C*=XUotp8D{JKmGK}t2gCMa7_$}q +doup`NhRNf$v{__sz4}ShA$Fk?wzVK_ktoxF`jV*84&iuMo|5;< +Fd%Ns4e`{@7FE27e25cFjt?O}F#-5?~yt|zFaIag--^Ow|mTkGLXFk%-ZOcDnzwGO=WPE-)GfF>3%YZ +rh%W`bzvG`N*lb9SN6P8k3EZ8^3 +b~PgO6loN9~s-)48m94`XGnOGd40<~0tU*+$0SGMVgQ-?Flrl^sV`+m0>MTr`GPCGNX&gSl#O{U!&|BQUN^1RF@Tij~451WV$3@j$IS&lqzEZK`ahnJ +IK)L6*MIlPJz?wd3L58K8H`TRdr?O7M{Kz_SNw5}Y1K2Q5KF5Bsr+qJQA509o3mBfq>NfQ^o@-?jak@X+=DrsSQ?XK-HjmFd2-i{D{<^ +#ubFVwjmL^b;*NN1oUn6@8L)%-F&n|*#BW*30&?wmB2OMmc3|zAb4KNO28I_;1m;-D$>NU=IAl&S8;y +Vk=%d>q0LH!+4rO%QYyrU8nvLky*_wm%*mHto!OOM-U#^_bwq!?o4l^j#iJRC2_FH*j?_hFVr~~Rh6XoP@Rp4h#S`&l^Wfs{=-jk +l%Lw7NGQvOO7n&l)c`7xz3aFN9<%H?(;q(W`&CM9SGf44uCTwy2Oi#`ydiK9KT}89477`NCQdO*9EF` +LSBHYpa#AS?I_@5+2c9Y^M^n+!bxv9#Nl}ZtCfe~e~mSbGgexOF4YjQx#VX2z)1%40#*ay#O~Am${Sr +-1F;E$i4rTA55f^S&KP!;^gv@W!xi>b3AKqfmGjOiFalHJ2(wT^2gX>+g6m0Hh_4j@4>ZMy0I8VVMXb +?iAV?A%@Zb)5ZXC~f$l5ps76ppO^A0dSPvYd`A3zScMlile=o1o%!FcOQT-)?&O#BcO57-eKi9=-P06 +ZWwW{S_i05*U)uU-U+i5eI>FE?;{K$}9-Fw2vu2SUVYvd~yV)v^*}*p>W^*btZymzz=%YYq7nfG8?O}xrdPQz~|Qo*n|ozxcd5+SNb2JMT<#l$$b +%>SaW+KPt-Q)DUzGJuTP)YCo0PQ*3waFM@3#{Ae2H8uic28wzAg;d?&BQ4zZ;*mXPDvNjO +*l3nlb*ogVCKU3A7ulYe06d@O&?cc#Ut_;Le68wo+-jp0g! +?W%hMwJwTN(7HDQz2W58fF?rNNv5_CJ}{HSWeg7r6Gz%H>>TjXF=s-#NPo)Bc9TcuN|0Jt)(z7&elI3 +Ni)cf3+SypycI5!hz*piQfpP&MaugwZq=$`+Vl@@O>+*@jWfV9q +%iGT?k-Y^6}>{5v0#V$?$AE2lK8Ogzle#02|2FfGXju6^KZu=ECDj+rA}uq)V3vd@NbFd(^QIRS?)XB)d +9FCx1_9mqnlWFUGcLPLit`_srED*<)o!HpBl5-W$2z3Jj;H3^q5t4G*uCp;$g6153$cVTQUmPIl*h}z-UnNlGKO>!+CCBc^qn&c4D78vFZ^MUll81cl0E2wUek8h+mmy({K33&L71p_fVLPsu@JQMXNkNYZ5;yW9mQ1u +iWK|WI(Biw+KuF%$+|xva`QrtUs*7?O(wcinG_KNS%oJ9ol`cjEBtUe)?lzO3jY>>J<|>DoCaxDSQXy +oTe1vspQ1v~4tecOMT4D`d)(Nhy#EbJZb0#Y$$K4OYC~UQ(A{BX9173EK%bg?FgPx89C_g)Hj4Z{bC0 ++nNdWQ7DKo2A6xN&bX_eJ+d+ysuh7D@bARdB$ox|mH9p$AH$Ff?gKJY}2;XIdZpaIo5qSR|1@5xW*_d +IzVs;B*XVgJ`3xY-&s}6CiD@gn+Z^o{}IuKw%5CX=XJuN8ndSU~6#lqQx9tRt_!z0SI^y&V`f?Yu9Ss +w0Yj(A)=@$FYeNmd?)0v^*j68rpAi_5mVYO-C`*n4zUY`C~=)Q0GrIoD`J2)Jn2|vr`gvNcb5|3Z-vY +whE1B+Ne^+2g59?%%%T1*hhmgFumf5I1H5AG_!f)T7^~zPaA=6sh4|5TIiyk*6a%bC>OG)=MjSSzn*f +-3^gIq?x0$IS*zN;WWXIJJo(j4|K1a@eN`gp%hv_+VP8Dph(5bDN>vaqPdmXwS89lZ%NU<9kSV4`iP~ +AoXzV>Efjk2rXo)UrsJmg8p9#0 +N}t_O;<$vuJE@y)ic>Jk|{b@$c1Stzs_I)AA#i{M#S;){wi}&gV^NxX6mF#_?l8H=~S{s`BV%6%2L}T +7ZNYxHxlVgZ+CPXm9mO>BX+1+qqoN9c3cXmQZxo0PbK(Op^PAlZ;{7kBV|#WW<%r!e^>JqOqcO%lU+2 +WH%0|uIg}1n%TZ&=Vi;4{^Xe+$Y-sQWC~2_JrkFZq7N`Q{i3CcsMG6k5PsfUY0K#Dog@=GUBo7xkYtJ +Jti=N-G*L@Q?5k9(LHa30C +26aQ?*Y`BZ%EVypFD&r$E5~J0;-L5O8wdyLt~>m92?I0F)s6iO3Gk&nWorK)NsNGi0`*0XB9#(LLTeO +>luqL${W0wyS|cw^X4iTODd$hPr`aTjEhg0(Y`_!!$@w@Y#4HrrJ*8c85qT4W& +*4)mmIJ!`6SDox~KSst#3=8lqBFq^Uo(WD0}!DcrNo(>15RC908Mu82fs-Pbx4&YLPFv&{S(m)m>XsN +0?n*uSv5+F{LF@)Fxmn~Kz_*>FjF#nY05=JT21ni7JiU7bPp!*(oI;o5r5V2=5A%oN5&=eHo%hpCoXp +ClukOM$*P;JvN#0upZ;>D>$!);EuEJd5pCJ0TJ!K$q?L(H@uhF|7-;@<~2Js@KQ$_}R+5ay1~(Iu}9! +|s{&S_KEP(ME)5iZZ>)!vRh_e`UZO;e=$qFZ!eklrU$hhH@GX&_IZbhVe95NhSG8T%%aBDN?gqOld_s +C%X<>lE*b5grjH^7`8V9f+7FSW)>*(L+%{zi3nAG!!b0+8h4CG +SgPyY4wW&{T=CcT~Q|*Pk;t-@QtESXvf)6fW_Cr-ewxy6~uhx2%`x;Jf)p +}OfcJRX@nqfix5RO$T?$o(tXQ-4fI-~wV&NkKFiPQK8p>Kn6R9V7eLS{WyJr5W*HotW_jdiv1vFe^cNRRRG@tUEpiq@4l5lD +xL~ky;B!hs@O*VBla;196C>rHO8hWgYr=>;9k=QzF|qxb1*}Yj;Cve6HB(b@YlK8X0yfo(A>%+t=@zk +@!G^-YYJsVfr?7JgjCmBk5HknBZNi|IMfIqHf}PzAG(j#m3MQP#AV5HRD!Olne_k}nz~XwUESEYAphf +YxH6c{_ILW;OMJsjCfDcrJWPVY=RfXPkZG4 +6SExjkeawwLO%>rQjo-%n?=S1V*>cH9DT?I!qlWHMiSH})30^|^4DD{%3ER+F|jodlAbI?Lm8_j1on8 +`F}jvpYdmh|KmZPI*n2r7@2$<}J~5z5KXWoJFbDm)HtN6@Y|g%dWj1KC7K09Mr* +>NaUk-L)f;E7ei0%a`ej^PmWrv$brTv8@kCfW?!8R#9be?jHSCIidv2(e^R1+}yxTsOE=F`=aVm^_X| +*CO2k9_~n2mQE|6SPrd7RRm9IHdCPL!Aa>IC`dN#RKbB!I!)52L3p|t-GXc(o(rLH)M}duGQ}W!$Ly< +BGlZrl$tAlQ(1(zTg(S*|)6@?kdgQp9k~{}Tv<$_w;{jC%W4CyL{We_>k*}+5Tack6q;B%V)m{Z0ntV +B)$>)?a4#@y#WW}m#jCO30my%`d{0-$bfNJjp?2C4T$`%iX>3~s37s~QvzVNqZZe&JJi0O8@*==VIVo +)Mcw@r&Kt4faB_sQfTiHp*hsDVU|?nEO%rTcEBp{hZS+hRS-pmf?ewhCW%OX1szrK{CdN+gByX0Mh?V +Qs643HpdYNhTP2;_6~H$a|e=AAYEbOsnNE4N_!ySa*ZSS4y$ff*;_}*nvvvtRW|^^t%n~*HkbPq)xd9 +-5T%_mG)y%;|Cm+m@NWh81{FN5ADuu?O4l~^T>JMRV^itl00w +OP05EKdpjuHl<$AhZ6c?JEkKM$9HInr=sxPaaXtPnZYK>$A$*N%M=z>(U@`xWT7OL4W6!hfEo2_AR4;p`})jJCs>Q1LUQ3tMfSo^c0zuPAu;~*)Z+BVG +IQ33{rx7vnc`BYYjqNW%~FIzQ?R>*4%-Eys>5^4&8xSMJoR{8DMq%S0I9@Zu8{}rETaj5PJF@*LQ*oz +Hx#!^F!Jvp1kNTdSF?SWG?F6gEdA?iLWKJ2yrr*4Ds44S`2Q}(i{xl_-kEJK)RG!Hkjt3r*UASzT3Wl +>&Y5jJt1R&Nz*bc5MUI@^Mv7_b~0K?tp5w+GG+$zl@}sm!9vts19#f?-dFX+?u*Gs~h=4Kj4_0!b&rK +rwr#cG5I)2w{~-ShQKuV4JB8KGca^!(t^rb@UhR+CZuiBgn_QO1L5nV!2`mB2qtiRd)T!|`c8-+4ZJN%J;UUe;sW`2qyMFEmNMCu)f%MLdJ8n?giuP2dKmSB;^Q$`0( +ha%sGHlb)(ru?2G`&Od$*YvTR~^MD0WbpI9Lm(ZM;&9X^XW6hgLOYC9}PNB#k)(rj5v;kffA6&@`p(cL9nRUiAvB)d?tB{Hqm?|WX8P*FeE+m@&OcytgomhQ|~R!HZu;r +Dk>rJ$PcTEYPT7vP_fRcceOY>s!mfKZruv2AYPNvIHQq88*9}x~>swf;lgX5|=tT4q~&$60uL)LzRRq)v?*OS&(HE>M)HXtA`zhEYzl4ldZ*8H#1hKbb((rs@((isoCW=i~q&?3qwdK!O^(&7QLYM@ZY%TCBL5lnYI=JK_`GkD^jw%@@rBwwiZZ#YXp2kn%swy!o{iqIT_S8^)d0U>N;1&azB=75RsHjp2R<;=#`h}BZR{V* +CDd#&)G;&@;-LuF&NwupGzOdRaywO`D(KgB>~5c+L4r^M80AuO}J!s@u&lmV?!uin2?_+2?&81Y*-Ldz~=Vy34x>5CpSkiE47}Ar#KrGFYg+BD-Z*fO8R@p-5h`(PDUJoBdnn +i9|m$4rSmv%fe;IzSu*iR%^#NC98VcrKt`DQW7SbojzW^<8#dxbe2<^vWGhMY-Ob@1r~+YOdl) +;WkcOeA?$WH$swkI6}I?Mo9Rg1P5*WeO$z8^TII!L88Mq#q(y@TCaB|fVq|UN)uGu-{s^NsGuh%tXhL +ACCNT8bHmVvIwQ9dccG8hzvnqTCuH0zUZno}u>!r9mkanPHJu(zDd3R)JjBJQPc~CTU3IK1 +4R@;dyIdGuMOCTg4*b29*l3W0q_a5s0mXh8-5nxmuc=E$jWW&OG1C=fE8gU?LXD3qw{I%>9E$aFx{}7~wFiY|HAQdkEnY-Kv$UJq +Ez3YkAW&@|fi=b3N>7_6get2Alu}hj$ByUH7xA$|eTYYXiNDQb@ +6_jqs}mYgODz6#MEeB+R#?id1;mMI#q4_5ynQ<5ZW2@2=j2g3x*mn&{YIK4qPq>|QG*?%TsjhRqIVhC +-aOvps$0471#YC8)G}ab|%^m2=(KeUf#Rnhx-hmB-jliY1f0U;!3QdWeNRi4rH +BipRyJIJFr{vnVF`A|W4Uf9 +k?pW4wy(VXyGMNaheh#DghYGCo^_bh`OniLSQb1u&;c9L)a2tn=e(%vNP-Vh*2aa*c@3$5B+Yw21w# +gx%z8b}GFc1)t}^XjsO4K#W8&kg~y(Q2U^j@LNqf|B2=T?(tps5fJHrVdwC)ND*-hF&*@h0Gn$Q~b(- +!yDG~YYqrQR?att8mR4RI}z!i(uhj<>8&8Im=Jxfo^QL26BQv74FZ6&0su`O{Mrz*s<=btt{h&gS73v +TmCYL`st8!A9pf~uR4%L+TN^2cc5_LuXJfj>TbZW>s^A3#Jimy+z5~nUyUl)TUy$Cen7Y})vDx=0{!) +UWlL2kGZu9;x=j~PdMU+LNo4S^F9e^(zi?|h05rXP0w)zbRQ|}=XdiU1ip2JiH3%@HsahXo()mum2Lg +JyYi#D}k$k-$xyS=L{uX>RTC_Dr}T06RV5H%2Zq~aFM=kaAB`t-J!rFdlod-|x+n;Gt2E>m~3QPf5jx +4}MfSh*6p3g>Aq!+yc!i)`E5$CfR<9eg;s%?lh(6HVV-Rc(y`g#R_#bP@tA5=l*Fr-4-6uel)pS-zu) +W<_+&W<2vJyWB8UDrxr9p((|e>-T}|pCA0=?JNIBT?E0Y`x>yUfd_(fsXKpOMdwYp +8uh&&XmicuRYE!T%FUFW;F2*rC5~%P{YTCRSwtAZ3$HF>o*|w +*0vpvRkPFjtT_X~x|YDwDa%kZvemr6-!;Xq=fH^k>Gud@>nc^4Vyd);8SWttKGa2;$Hi87+zoSTRTpji}KACGi~Vy!y%fxz<#~`j7 +Zy^%x|;%l~mS99ToVX7H14Lr?vn=V+d!LQga8?TDG<1nShAK;c~487W==QmCeolCRHU`BSEh}c8QyjK +2q`=1m~tD==RhrBS()wj_ZS9%y9n@bc06>65UZQ9fwW?N$%8dE7NG1^?N;-6Xl(YqVhrJKdj<{o;#o7-0Qv{ze)6v1cpmetajGrYCst<1x3 +@;Kxp-T*UI!oDBaEuGp`2Ci>PXalp{} +7D)w28quL;?z|9S7I|Z@xHovpUFY(}%{g#&D{RgUMhn=)GLISlzNq%1Kr_N(9yio#%IeV7!zK!mvjaa +u)hS|X7%_2wn;P&d_kqZ39M;90WA5cpJ1QY-O00;p4c~(c!Jc4cm4Z* +nhVXkl_>WppoRVlp!^GH`NlVr6nJaCwzfU2hsY5Pj!YjKT|%=-!a3QroD~T{e)S@+B5ji{q;TOGfhc#FHbNt=lIN-VVcd$AL{lV24flylHNG&QFk~=zR?@C%|?^v8>WesYpI2z#NA0VcwvHN&tS$NKARqq) +8d`j5BwXN~g##1Y~rp~8NA3<@kJfc`BnuS_NGj?pBINx`Y811cGRo>W^yZ(#_(MZ@IG?i*?Wl8S{3O# +v4)7o#0KJ*W3lw4V1>)=vhnaP>LKSS6Z)uy6MXtJD3x2J~@o`lZ-F&6mJR{;aPBlGsduy+c#kh2M5E7GBU&+4j*CjQ!GK!&KA3-%&*p<#bL6Ux8oRu@s@}pYZ?7Uo3h3yv2R=2=1c)Vt~-^>r@6aWAK2mt$eR#Ocr)3TWo000g)001KZ003}la4%nWWo~ +3|axY_OVRB?;bT4RSVsd47aB^>AWpXZXdA(cjbKAJl{_ej5wLe&%N~)b}+H0=qRdMV@bGGcUon|t5Ga +iV9B-RwEBSNmyigIA4);8Tah8+`mc2EPCe2r-Q29)i +9i*|o{<&Rj@IRgAOFX^Ki!#YGtD?f_(!^@IVFJ69bzwklwE^Wtsd}eJ>c#Q#OOWVXK2)PLRX4QOsvBc +X@n~XU{4~$XBAHeYr)Q5|F>9B)cu?0#Ixmu?8mJYxQf02LH{~MFoVZX>noJ8_Y)DtL!Wd=qS-A#dKdD +V#sYqw4FmYmqJmfBw&f-7i1@dNDllr#Xs!1)KJCN&LfjE82JjrZ*~uH449T*r|d>( +pV)KlU+df_yq(Z=o-$XrbboP%&N2x3RtT?j_=-IeYjJj$tU%3baOMB+kl{ASGQ+Fc$_g_#iYzGCD$s +Rf#foWCgJirNv(+f3Fft6FpbqhKN^@hGKi5_X+*?o^P6m#=GmO(#g;~)KdEGtI?5me2SfsOu6ehUE_VZ*0(&uTO7k%|6w1>YS9)&91GG<5u$3B@m-ZwwH=(ic=?hRT;%g4YOQDp4949 +nz7Cc;8Z7v4TJiJGTZ{07S$>nlSBT(#!!zlK+!_IhtPj0I4_V2ZNpk3eiU4wCl9d+jiW~zy?Xr&4x6K +Jb2|C7FSlEcMO6hERLnWWmBJqtRuQV5HgpyWo#&5@N1&N~5c@C2-mP3}H-fE4p%`xyka> +qiiEmd01tf`r?B^V&dZegjkCY@27W;JgaxhN-9FpTgeYEvCOfUOwz8^O&;VZ>o8L8-aqMr=fZd7$d`K +ro0C+vijx*{yK~?VBY9{z6s4`xU~95Q{(Ii~77?hW2P3t-$6Me-;@W +Z{^i+I8>&L4%I%L9kWyIB#6F3>7p{h+?{1}0%D?LsQpp&tmy8`x3rU{>sZ+UA;3Bs;Yy>YboXl7kNI2Mo$SweQjaC?h +egzl1`U7m0I8m3yD%jP{<3gb>>=xl9C&^JukTRSX1Ca@DgjyBV +{)5IYuHQlt(-Jq&CFe(t1d1y&PNS0X0bMZ09)5QPh^IT5$lB33*hUkz_ly1p>SIoSa5N!vlZc$ir5|fnuNO%x8c7`ISI`&reI2-GRTWUSam^hG)h1A7 +g7PQ<_r@7&QiOCbAi32n}r3z1d7q5?OhhYdQ1-2kGH0-PTaRx2nVK&rC58&wX#um!K#^r2uw^|q=z9r +BJq(pG?%9QG9EP$0S`BVE#y2PI^y+LyS~LX6L5)N+tD0XApkBNXwAL_C6!Kh;cWR@8w<_4KSJ3vE)Sh +#M3EG<*A|)#o^D==@WjQSaN&#vEsaKvkOxa3N})@c*8>?rBb-=*HH$ONzRc&1ZlHUdW@41q$S+Xbr}Y)I74R}kgflQSJJeWR&JE> +2FV25Zo4R!VZE^<1f)bYxtnWkZ=)pLXGB#`3c~!_M>U2mBmlVt3Hdd5uhS|?9c*^caGN}#raWcM +F7<)k8dgY#CGxE@mA32R(y7@ +gx)p*{-O+{kRK3~aQ--GqV^SzBCZQ-yC}V^HTf-(>&F54r9A7@i$OLkmGlZLn1#<6wAxP}Msd+RG8#l +&x{?+%0wMxsap^O_Z9q?$)NNSY^G&L5gZi%kbwcb$t0~!EP9}ka@$*o}UnaBb&dRy@;Z5=Y+k&*q|PpWQ(%%t|j&jJ9&Y)u0t)eix+SP_My<_&i +qfwV6UwXn`s3A7+QyEuTXe2?1%2isLhsm%$u!<~|)F7orDhPQ{Gx{b#;Z+!@v%&9yLi;{4wxBDl5d!+ +*-d=>B)wTrgwUW}&t35(F2klhwC)H4CO^?76yC-6m_nnU?ql^1rM(66aI{s=jKb&0MT!v4l!P3jKOL- +WFOY5g5SUUMIk%zNzsed{<4whb@$+I8AmHy$MgN1juBlMa4_+_{@c>b3?r;$q_j3rty*D^iU4O(klB- +RZEL_@dTxqL7=g3+f2^_^=+AIXs#f`TTbHc#n4uG8El??}>xiLQ^h98c~=s?+zQoBOxp+q==^l!SiyZ +4tyn{};Ri7BVu;f{=Zl>C3CPXBQ#ANTMgg^1sHnA0W{Cvo|+qAMYolOL`r;G_Sh2dN)4ZUDk>Pp%yP9+_DtxUbC>>9)mU{Kv;#FZDyWdO=QiFM +BfoH`f%FZ>8foGN=rcDWnYrV;XZKZun569oFgl1&}5_!TFHj~sNxdcfHNb<@$klGKnFRw{Clz^9SSX= +Tp4V>j-7f_B%CWBofDANIY;^0z1P0IiQj+`tLib2=;ObtLicO5QGQ>)c&#zS@ZtQEueEWI^N5vR%SI% +{rdL%2O`>;voEbGSLHTDDc+qb2XsqV-m`f5vrMo4?^hA?1dx#EQ)wH&Jk=lspxY0X{R$x_(IL4eKJ&` +WrdFv3BbxSaf~X+QS+BON*^6&z@vWTu>SXb!T;)c#x~rJkMhan8A6Nm}40|ta(62W9)#|VQQj9UYhby +_2_N`z4MWuy$EDh8fdF5@)co%S?MqI>0rV3p+7cD<(9<_U8IZi9(|7X!xSIo9^AE<7w)p7p%v){{Wl` +-!N=WJbSS)!c^h)GW&bj0Ty%xL_+v5E8zF4YWNi&~@fVDp9R8=FS49z)e%P`HuBQ{7@f +t?nCr*SO`9vph{@c1d0=3XT>gdN6S)(aDh-Nl4I_7#z6>mJ=sqpS&gUUuftSnDbqG7?AkURN`XaZS4% +&Qk}%)9j%+1+8x@YTF|jDGW6h>w!Vsiy`lQ!NoWGWYoR(`{3aQ918cLDLP3;R5NF!GquPY9TA +R{$nJ^gOI1{)@Mq9=jKFgyYzF`dj?4o?q=a}>M0d*7GD6`4@J5Wao!2h4*fg^53s0&{~kd(n&4lMV0Q +B(<{LxEfrRHXPOtQ9H#4xD$ewh$*S)Rms2N&|-S^iwVe-~{hX=^AI6tH2Qga+6#(^FSJswLT~C)o_`_ +amro2ct2eR(71^sxm8%{o`%b)10b#Rz}Zj|-Oh-8yU+$yKSDEAnJ;ze?wV!{7uYn^zWsGDOOU_Q+SL>t~uo|%ZiQr){}U}^9Sob(MdN$_4#si?Mesx%}mOQrLVWt>({NXxlnBGP@r +D5>XZB6XluNpX_R(YW02*L3_{-&kwfN;yOOL5+=_l&mFzgOVbB*eU|nWZbaqek?R$QgXX&O_m%U~q87 +ZpRZ~WV~AP}A2zvfP${i?PXwat9{>_OhZL$QBXmb0H5qHGb~?Kl4L#4&PI2B#U6`JnE-XrS$&uN(|B2 +i=W#%O}YBw8X4-uJJs!It3wq)Xk(&=Ah`I{C*z1cttEQcV9jaPF{r(_vJHG`%2zDN$neb>>ppNlg_>9 +2^;R)4aIj$@S;nC?Hc;!^D}hR?~$<8e(wlqQfs;#aY9^@Cvq{Uow3XDdcBTTmtF6OKR9}d)83Qb!248 +>LPdP|=n3_D)&3x=eae28hm?pcXoO=p1czd|0xN)+|-!g4W#dBOuaoII#8E>`tA|^D|e~8Q?GswcD +a#b=V(<1h*B}#2YDu=%HEd|Bu(vuy2mtZHLXqYWS9@0H+NX6YNG#eRG%2XzUrznyrE-i*?GX)FhpgE=lC7`~utG|X>B!@aIS(r^y%Xs*P9IcoSb=$b3-Y&{Bi_T@*E3UrmypRJbNeZ=;?CU_#p_#5Tz{Nl(RN-KHz)ON;{ySeGc@HfPCW&X +(j9ESffh5syI)^(-IJq0aqX}#O+pF^@z%l$20{})h80|XQR000O8`*~JV!W +ubY6)*q*v19-M9smFUaA|NaUv_0~WN&gWV`yP=WMy%g}QzRfPV8Ja-M +MVBxV;7)g%0sU#X-NtL?~BkPTUKLQ-JI^Gy_`=!@jF>uFJKL@tA|wI%bQtMnI|JooQSMXKKb?k$`{Z7 +@Zy{D^@}f`fAi{j`Qqzuzx*HNKl$w^7oU{ZKVO$`A8!6~b9Z%HzPx{XU2Y!BpYH$t=Jxg~KmYQ}`@5S +rS5Nm3<<0HQ_1#l>lfU`=;$znrcQ;Qr+4J|;f4#oFe|P;*?tdyzzcOb2{+sKk$2V8+uK%xLZ|?6N^W( +$2`v-lu*Kf;@A2i}WUh3+BvEF^iOa1&*e)Hw0#nzfR#IOGR^YZNWw!GxGkLBg{EY(b_xYH=dHnRh<~ODM>FVKM%Xc@oe|fn1rF>TM4xh@?efjRg)6e&J=kw=O-QN88a +P{zkS^MeX`no*c|Mc{?ys_Vv5BKlOo2$F>aQ*h?aSxvp@l>wv-u~15L-zmW{_V|AANcD1-P?Q|?)vHa +;g`pcbNGjEzAs;2Kjxj5KV08kKjhPV_x{J*n>X3{>zg;%caPWQ>ao1zyT_mZK2u+DBd^XIDPP^^@S5G +xakurugUf@oMLYmnGNwH&;*Gf3D^`I)0ir{h{3EYCL@G`T4I-!QY?sZMnJAus`SA=N~ +y>KIq>PR^`X*^8WGqr}wv)IYR!n{L72i|NQOuugkM<{#^d$*~^#DzIpxU-{o&}rt@EO{q{&Vzr0HbzA +gDw4_9|jAM(a?fImHd`Q<-nk7r-J`1-}`KXdnAy?Fi2^H;CRSKq!Y&&qetUcP?u<@aAdds)8w{^fVyz +Iy(7DX*@tKTa`|`D>H>f2R1S9P*d@oXNM>Pggg$kNeU8oXh)|H+cKD{CxG->s;nH*Efl%a+O=;-G~3L +HN3sQ`-`48yZn7Ze^+jPDtGr!m*sB{H;J7@-#@Hwj`H{Qy-d)*`TVjp%O73c{p)Qm!K>{4)y+>i^jEj +{_Yarli~GkXe)^|p+4pd><1>rHO8Nd(e)FIGSDt_K`~OFy^2tRG{OXFu%BTA2;r^F$^&<=E$Db14|NE +)@0+4cVJ|;%q+`doyaGTGU7T|qOa&C{Dz+c|I2W(H*Z+^bJzrFv<2hI5(uijnVU9%()*Z=nZ`tD8Q{p +!ct#O&3(jg6e6AMf*FUw!t+7q2wd^Y6d>?2q4VbM-+c<1x4L#^?P*?z_*qU-MbYXP^D|a(q6`s(es-G4jdx3hniUw*2AZSAYS{_rl%?XO+`GN1Fm0M-}3e|d3{llH^wKY#b +)%V%Hz@cS39UcY?t#rLmYeEZE0FQ4WAa>)4nV7k8i`RakWPAvZ0w+}L2tV6lnBRu=!>*qhbdhx%WXO9 +|v?tycgzWm|!w?BOK^7;S#;oFzLfBrK6`8OA()Z;P@uF>?%V$-u}G&BFfSG#ock$=s0Sz_8{@Li3gUd +GYqW$j154D0POnq?2HxAlwsV3#?VU;4X+sfG6b!p?^_9K7iK6CI@X(kU+Y4T2vdX8J?MSk#0JMv1|WT*U& +X3Um-7Id0y5&{Ud6qZt`A^DbwG^GF=ONdTQ=2nwl?gSCk!$HKyZiL~hdAVdb4{LWc8zQ1+^_CPzhZS4kCxZUh6P>pT=ZP@T+GO#$D +&6rXoBmYF&f|F`n<>w!8etr(R7+YGim6_G@8*fF;X?I8QqL-MmM9IjXiFyIj+&&=TQvk6!nn|U(^&T?1{#I@KBHnr!vbyl;KMKS_c91eHeLL`5kx3&NEH-(m*xm3o~01&cS4)IdDu47SOj{_c<>D`;g`^tpXdeltyE++_~FJ&R`CK?Ud8V +b;uvfr8K^){DnPbT;_{$)0bReh4X6-Zu$!&ocJxVG;UzDxtT%}To9Oc?yWf8a{r`v>TSjHT*HVfmzL4p&Q!-+i9|KCm!Gc`5}8cHq^19o;Ea_ps +6&ChMCqR%LNX`%?*~jgc;#3F;ayqXxy3W=D2BDqQY|G=L@Es&ClpU=mD@38hP1xzB>pC8b@0Wmg0 +cH*XUU*r?zUor!>@yI-AmbmHGHy+Xf=RAlmVTr=@R05Hnp6|H*qN!rn;3{%l=8JuSgUZ{{zhckoIS&BjAbUXma98qer>M#o<`PLbQn20WO|h5n +*D9?|iLjz@GnqT>4^4@r*FAZ0HF>9nT0g%Z3Z$5n0P@Iu=kL=@#exCNIekbjLknw6 +mc*?$OgdI)o+BY}_xbC7&zgO+4WdP|5s@!7)!#nsyCVA +KFn_tsIgY!~1&MIBW0{Z~PPo>^NYEVFMJ|@Mt(-*UI34S^Fkt>zID;^uX~tj@SEnzwi=_Yc}-60lOXz +2kbat#{pxfvY{t#)N!MZ;Q*uA&|}hL?saSM5@>OQKxRWvoR>q_u(}O;nGHQPt2hlPbt4#P(9p&bG}rv +D%}W}*BrrLF$q6P8650qJ8Z5cNF&nEU?jjufRO+r0Y(ChVAQgq2N;RI*R3ZnX_&}t=m}N=k``bjz(|0R03!iL0*nM0f%7-me +8bsiLyxi7tvA*UtPt-NU9ML}a=FW9{xttmlN^Y32sX2`7(sZH4hB<}_mt)o5)s>;b$H2QtF6%2+{_eN +&n#p;{yjN~Qxfu2CJ0?7&_E0C-}l8Cku*fk +M7W;Gjn0L2OvD^RRJv7Y{7BrnMi^aPR>NLC<8sFw{r2_7m?tU$2>#R?Q*)7j7iC|00Y+xGJ#c}aetCy +=Z_vI5BpBrA}tn5_yFD^RRJu>!>k6f01yK#}0I)swFecu5746-Yv%vY{uCtU$72wklApn5~N0s&MTJM +k*MoV5EYPI?r{RtQ%OVU-4L!j~1tS%VR4`J(NChKM`qscm10xNLG%(UmzCM$eo(yf4XiY<(!ff?Y&9^_z(@ll4U9A}(!fXqBgh=t&;yJ#Fw)NWV!}%rSZQE|AS +xSrf{_MBVDs6~6O1%4(!fXqBMpp*I>_1g<6Jj*Ne3$(taPx_u_qmjpo=x=a6{*6NI*@34r)qMd`@`Q6 +px8zL0uSkp_jl*8uX*dI?6D1Fw((D2O}Mf5cy@pwZKRRBOQ!%Fw((DkG*aSUeduz2P++{bnHn7BOQ!% +Fw((D2P0VhZ0G?-IvD9-q=ON(ER72<>0qUUl@3-q_N0T64o0B4+0YY=bTHDvNCzVbeA&0qRTk$%P(3trN}N(Uh1pjnKRiJvS +oXCQ{kKNCzVwjPx@eTJVw%RytVeU4ZWps6&Crqc|XNkb1XGQh~#abZRbxo+rf+0YZL4D87OBL +j>KFfzc%03!p83@|dl$N(b)j0`X`wvLE+p5ua*0agZB8Q7BnMg|xeU}S)i0Y(NGK|RdPNDnYFz{mh2q +t-nxykvlt0agZB8Q2r_lH9@c1S12C3@|dl$N(b)j0`X`z{mh2qaS-*c*y`O1FQ_NGO#CvnhlvF8+w9~ +0Y(NG8DM09kpV^q7#Uz>jK0TBUXmZ^304MJ8Q7BnMg|xeU}S(1)a-_k(qKakBGe#4X@%$kM#ehV4PJr +(l?^??%D|osFfzc%03#EOOfWLR$OI#3MAlLbZy8M2`#7+GLsfsqA978q +GzWPym4!V)Qq +G2+U}S-j1x6MaSzu&=kp)H;7+GLs&2!!0B@3)9u(H6)!k#QJvcSj!BMXcyFtWhN0wd&|8Y!oS>e~>&l +9rt7mb@fC7~eQe&{Ud6(`g3Hq@ibGq!YDeLl2{e(ZlGmd5L8>p5q!ljh;qNr>E1?>FM-zdOAIwYdJlf +9!`&-N6=&Q63cKr#|?T0J%gS>&!A_}Gw50AS?O81R;5R!N2N!lN2SN+C6?iMj$7&3=-KGm=-KGm=-KG +m=-KGmxK^V_r$?tpr$?v9<|S#)jvTksv(vNFv(vNFbI^0pbI^0pb8xLek3o+?k3o+?kIhRg!|@z<(sR +;t(sR;t(sR;t(sR;t(sOaGMUO>~MUO>~MUQo^+hW}oJr_N}3NmCz=jv!$9XYEbXLYh@9gVY-MeAhII+ +}Dxr0itTx}Cfva8F>n4SJDz+ +xN*YIqP(dxB#O47YeuM|ag&!6c&Zaj8l=b2%8W=Zv@1!e8397U)0q?}A~R!_3L$JEk~E&dQ4ut5@)E= +3I4Wwv@fgx;L0~iXQNbz|xVFQnP@3{CbKF32b7ja2sd=n0I8vCM`EG0Ead2KnGO|FvjF_gAz$(Pd)^r~v2r)EH7+m0DPAu$LQAb#F979F))4 +0h?0t4dg0YhOn9E77(cJg1rR;%cPjznx|p@uyTrSynP3u(zhBv&xG8aGs@02FczCjvLLoWM>M0>;997 +!J*_n1=N*T$>RpblXTKcPFWQ>)?4g&w0Q(H|6{o7e&#L{T+xIxmP24c8p-a;|ei{V+LK0U0$s#m%8=e +#M`_G1fb54jt*|@af6OJxHRH^}Rr4o#4fwE`<=l)`_#^T;%oi1l)Ax-`?ZIOGC>m5v?l;7kZiwZce ++Cn7VK>#EvyJb<4;`n`YIOa66QP(e72Aj=joGBIxwG^JIBPdO +Wz-pnR77Yq6Q4VF&oR;FvTU*UTc^GRg|+BbiQNm-%#j0}SuIL+Adom2%n(W1{W^l6d@Sy&RJ(CWC}zqhcyIT%#o^V-!eXi7TZ1RISPsM1u8Opfr#o<2`ScZ98tFLG&SPBaOQ^i@rkhbs81{i!*f9f +9$^(9RO1PgPY`^}M{ZL=-RH;%fHxG_?zPU6$i!7E9ZLQ2H&96> +%Hj$Nma-ko)0R&gzbTw+l@46eePHWOA1!J{BO6eR63Wsu1HAUHd9C`Q(=AWCUmcnP7jAuJhnLDt2JcD +=@AezEmU8y9+4<<3=bA#0aBL;h-`aBP2(adO&qCL0l=hU|$-_DBTdp1F1+l(naZ!nJNFm4@VMawKT12 +HW+v>-%y&Ds_X{2O>~3B_|(iNF~0x%At+Rf*w$TT=ocgaEfi@lnI_3`MRK_Y24%`Mu6#L|DtcMsaaj@ +25pJ_2e^&(&D7XGLu4bbHMKcaBo*3I=eX3DsD=SO%0N;w)n5}{g61jZ0yL3%aE7YF9T(5h-Xn>zHz4D*KphJNuZdP+$uR>7q`NouP0PG=|ccA%o~s@4q#hG#^GGg2*;?6MQ@mXMuhMdq$kNPa>bK$WNBA*$3Ww%HH)C +Xp{S2bPV;6#%RF?0|eKHWI94;6jg+Z&>#^M_E3_<9pMy3RzWi94=27UNJa(k=Urjn +&UaHOec{@(@(rqXQqi0ouvjNrvyqw){HCe03$Pn0(D2P^xalgR8hc#oUWr8mqwNR-#x;$ckrR13N{?0 +5?pB-z1%0IJoxEOGMHK|LAjx_3bAFST`1yMbjUdJ|6G9p>b3x}fWT)T?4j~J)&>|{JIi({}6#SL@an5 +h@l9&oqh$s=mO~DQX!>QLW(NV=zNR3Xy#Nc?w4lOe7$bXIi=U|U24KPzSvRM`qae9bkN^k6H{wlH6~?&9OFUF +w#p5czp!&mI5s#*k;4HQhus|)|2RPx~jjBQ?6T*Qb5^)saQ=^nsJktP;3L7m{3ig$Tj8U6jBu1PXi}D6bw){mS_pn2E$@f{6*@KIp6rD?lm_5R2 ++#F=?Yn>d*ZJm|5mrv#fQlFXyQQuO0+>!ihL=RM;bSINkv35JgHGB;qPI}FK^GOx}e#Vkj`3vqG +gQv>CwW)(Zj1-38FgMFGm^h+I69Xj_!|IRI?ojvYI8jr%F@hk)7VKGe6kCFnv=Lo71go-Pociw0T87H +prgSSz1KC843oj7~gti6AA7dK5D-2e#?!u%q84#yv3iMS-r-C=hA&0oDIMBu!b*}|D`I7u4NiL+C>12 +b>UnmTg#e#?sMo_U(kmV~Dz9<+GJlp9vcik&bPckx4a9jq#MLMu-hoW3IDf)UD3Rxf#n0`MLfFbWvpK +89(i{Lk?)5Q`IUBRK9TxL)iQ>a)dT?8E#30dq?`Q%cldNU@}p*m%5uD|y&b+698a2e9rmAFVuY*$RG4 +efhwMk?4)cu#F7d?&VYLv$q{0-PC_x>uJ|L3P(MYgSMFs~}AWk`H);95Jvi)&j;lO+*d0iaVwR-pbGH+e}Y{3DbOmlJ1yk`^=)H%P= +hjnp6gM6!$uq>1yEs`ur=C0?EPo4mxRMJlkeIP|1Tq_Wa9*d7)A6wK>n0a?EwtBG-8_Ms_?{i@`#z2B +&Nb;^(mKQ*YYlS22QeXlrcX!a2SWIgb7@M=c~awgspYmJO=(JeBr^b$oCOU_6x3o3~}rbxGYQKer0D@3(Ee1d4cw% +2mc7oYK}r#6oztEtX34fR1jBQ_yw612TnYK6V`7)V-Rkew_)W&c;nFStpbTz|d)3rQjGJN=H~SwEQZ) +WHFj9BTBUS4t1|it$LwO*HmUeR-Q@@o{uS;Qq4re6c9`5V}cBI))nJx(%7}@9Jdn(XiHScEe5aZV3PggdKAKA=0hjDIA&o>ht-0UAToKdV+GSoO3%*oI(4rl6s*Jhs6-&Sj`QTFxC +O!SLKI}!tb&&ch1HCkyrfX5;&UfmbP__ug=mFGtNXwOwqOZjsKbZEIl#VT&9x;2;*B%vUVRB +-A(cW0`ry!0Sr+Iew?##%)7VfRNp^Z^$p&mhXDK0RC$FaNwYcQiJ*zy6=#q&sa!1&QsiQ4K)=fGs244 +p#NQ5}$?1i}7{IrwQy*eU5Af5-Q{GzB>r=pf(*3g6!K{TDuqL@F#JMr^Nr?<4K?Anu8Q}-G=btbFObS +Q^aaLFw?8L0&&$7Nezhmz#f2D`?FI4-da*3PI1(YVP=yeVK(Ac)bPim@eXBI}s|0Hdl(#B}6M!C67kA +%z39aD`Lv^C4b>4kHmlj*=j`P$^n)v4({&h?-va(h{6ju@T$>en>Lx*eC4HbxU5-IUZP`o@M6`Ae`t5 +K`CNTifBqNQJfR1zVQ}JJ;Tc2A(-cpKz6mFvDGk&A)HM&BaO}+>L&{C!jW2@f2O7Mj#VUYGhD +asVr=2j`LGqg85PTh#Q*HGO*hSXe9=91hZ4usv&89L^i6j_y9Kmj%FhN+SRg!HZXoN+95uOuU}Q(75* +x@9MhYk@dXK4Iig%%MYKL^?w$MLBQiI7F=YK9BCyy_&K}%4KqX$1tw0kOiuYW`*NHj%7$$ShCS&DikA +#Q}$+)jkfJCb+0Ct0j)4sPU_Gtz$BPj=|*@}$FsTkvIR% +0cNToI@fi`3jr*6Bd9M^R_%2zf;jpELG-Kcvl%F4(@Y3=b*rhNC_CR%o!9HqQP5ilmi&O|>v8TAqctF +)aTa_U|Sb!8@h%wJB0S(li&^I0Rrd#O`(u@3_m~$no5LFe +uRSWRI_nnj*XxIlQ4!%iqxO6k0l;^T=Ww1rlteRp|hyqhw3mVTCu*zg+LAn){eIE)Xo*05PBe{R%I-Q5>iqk@Div +$T?zTAd>Z6aaTX7(XB~Eq3ojvs66iL_wm3>wM(KS{_jFa)Xu5TbF;u~#tR|S2@DAC~(V;faanVbbvar +mh?-Co}3^AmRzi1Dli&fj{MrtCIkjJtvCBL+zF-?kXKOvw~9DsjQ1|DjpjJotmI7p$Y#Z^y5K?{|8Xm +xsbgX%!o!t6X{>M0P>xSSJqF-!tB%$Ds#rBhLn}ipu1*pHU3iqPjBTDro@xZo_KjoKQVNpsw&Yg@y` +%q788%{fk%nfA@Ac^e9Gx3mdqN{dcfaoJiiQH=0bHdWk4LE)~Ek@IHa_jd$7I}RYY&$xRk$1hT;-2>E +J?wkX}Qk*2-Hzgibga&((3j$|MhA9+N#SP<9U&6@^52g1T(Umf}@KoN>;Sm2S-%DLb4T->*29$nZ0-) +-hwBL6BHm)*2 +1R0^ASGg$BDxz0Xn}%K;zIjwo_iFSs7+5IcQ5CCRYM?qe=7Dpb`J`+s;>RLA400W98y`~sk_6k_<5Ks +kH1QA#t`dOw3;UqRuPMQet`XAhu@qCs>Gc98B4tSg68*->OQ?H|xfuljSLC@QP(ylHBSI%@3a4DcA@T ++O_0ak%AAo6~wA;tIkEwet%D-{$)|N<*B6hF}-b1e-qLiUfb!JsZ@|BmtU+GRbm0+f{!)e#4dvzrbDN +Jw`%PLF9>ARvTVa*%wLNJvUa#A3ai#im&VihDbD9>AWoE55j-74z9NT{m1Ym@5j9@6_n^i-t8wx-dZ) +vG|33cW(|weEM%19h)8q*xA>Q7@p2)s^l^{upK65uBYYL`S8rJY0q5cf?o6u7^D0-0x!oCKqmc8`aQ? +LtGfQizEqC8^3@PlTK +fDV3WqsZotA;mH$kEn1Gzhd)1^##dVeF3U((RRQD?3Thv}Mq;wmq*+Q@Ekm}3HCvSQ&PuG0$NW1(=!M +~JMlCtN1qwdu>7UEL@rm{E65_TC}Z2c~%G0vowI3@+ZfBBurPvY^Qte$e+iNd1xRR`vIB +&TsOPn49`)wb-+AZSpUZcN4ip3oPMKMLlXVU>|zpRF$39E2*RjZ=9*_)g|GH#eeJpD0succ`pL!3m=DHiayE28DtC3wg*u~$N)q4&8YOiaIWqnf@mzEIukl8l +4dLOpZ^Q4|xAEdUD2yGx*^B$GoJ!ZbPP3eHVsyGrP;oqr3}y;i*gu*nvH3<>H}Q3bmJ4y0mE+bMhR!uKaTz5Id +Y>0TvZK*E`i`T+l%>c>Ww7FcO=gIXlC-5vac;(TJxoydYNV@U8zu$t$dxKofuL8_fmE4N&7ee{ohsBD +ezZ;GJjsLZyk1cETBg=iQYMufdSe;6)YytCz@DNXqPZ&L=#;!LC)xAm^Q3Z)uoX*J +TB{-DO7rpLCaU`e6;!uH}=4U;AL^i)=4p^OO=a@O#tl?pD$%4cMr8|HhrN%d^ +pdGkS`j^Nbt$baun~JQd+Nn_Gbf*epF+NR;A|I_Y +24cbhK>3!XxJ7S(-1~Tmmx$V{hD|l_dfN-J55a&RTDLB?snAC1CBzN)fw&Q>z}5S%+Ri(1L;@X#NL-; +miNC6nL6y_Ea(zT?Is~CSdgxVgN|PYQP>Y}!HK{N|VjJU%mu&ZhB*(8*HaoTmtl~1%ADQp2C4*Q1*rx +OZyO&BH8&Vridq&+W(JYUq`W=yAm074TSJAePNJ#fo6(R;{%b*0wRGG5+edX +%=OkVQuk#R5Wp$fVz?qE!r(L<|*J?5-|B=@Uv1IY)&NRK1aEFuQ_!rKnIPmA<30pdd;aTp3T*MnD8&tEkLPSCyPHA2=SBLtrU_2(@<2IZT3hv$S=No4mwzh&*J?Rp}w0u2OsX +JfT2LALWDtPVN$y1v^#bDKcY#v(Bcf?iH+t-YvLQ-$R~*SA-Fgk&m@qY9uzVgp{^PRT@FZwN#G|JT~8 +{)V-SKo)Xfa_OI&5mkKXP+`EpnDTAu=T32RP<06uplD)*oR3k-fouE?pYLw&{F;!P}n6lT1#zkjuT-u +kk{6olxwM8TY6}o_vUo^mV0C@##Y%uxbIIE~v%*6r>9hxUY1r%Mh*V0C|9K +n+?YwJtmplrm*@?@yWn8Ru}UI^ovJpZi#AG|K?qd!DC#UU)S3!qwqk(lvg;ozb+4hc74PdYd10j`b#e +|Zv?>%qhj!hn@SqxP9j_3t*De!9_I{3=yu>A1xT=>F3rnwtw3CgFCQ~+KyQJ_E3Yn_pFz!nSQT4`Y)_ +mvRDs``}V4VbLRehiM4i$%?5KHGDROx(dtykyj^u}w^AFVm_C6=|$ap5JL^Kn8=-v=XxN*V+J@WUDn$ +zFKBojSo$l8g+~IU^+_b&hJ+#aF%W6-!?T;H%2}RXa;XlX0fU@jgBjlBz5Z@t#C~r~+5)UpvXRoVV?c +-uFt$Na$#k6zQojMpFEa(@8ukJuBPQRnf$&!KGj+D3azB+N*n9>RwH?hssf6a%|HHo?etowd#7Sr%F> +{cBTqOggBSfNVH-AD$e)WaONcA7960`)xP5=)j~-QfZ3_Q)3uBwSd`^)O&Y=fuAi6iuZ7<@)B9ej$uh +)JR|PDAYlsbqqAESh`5}YFc9UG#bwS9+&P^(aQ$T*s1N9~N)IiJO^^Uj&xf?|{R36E1>OeP_rhv@Etv +HezD*NdwpOcy%=eT{A^2zPhQ#eV=$O9KQH000080Q-4XQwDh@YEBaX0J}^80384T0B~t=F +JE?LZe(wAFJow7a%5$6FKTdOZghAqaCy~SZByJxlK#%Gs2zVexD%{OFMIQ{v#|^Yn;9Djz%l1=I66eP +n%20HSV?V$`}JFIPi2;*#`euj#Eshx-BP_|Wj^_2R!ZX8v*~~0hvOHgXX4fA(ec^UvH0QD`O!~eOWS8 +V&&2hr6z6SqTh+x{95stlRGoO;{BN~h7wY@n-KMVQMc=eyzOKr;7jxC-U#DC*&*$aGa^2jQt!S +2_pBPiMKP&rgUfh>#*s7^J^|ifkTJuE>EH0YX9-p^m(U%Kx^JqpKPgS&ftouhb)v6b}M|(nk^Uc?4h{ +@&$;&8ndm%42yF3YZLKb8x-lB1^X+v;Ycmbu&QeXEWL@w#X~h>L1{+g5jCUnmKC(Kq7av0pW{Tfb7(y +1HqL_EBqX*_Nf~nq~i>1p7`rHXAW7YSEU9sBQ=6*D}Fw`etG +`pS{$Ce6+a(dULKxZzx__NRhm|3mHq5U)!n^<;6kWXwME@OD#6tNua7T}UaB64Kb*cgy?(2uKRLZVJH +EOSC+C;qP+S~dUY{Pld3AUxF5X;ToL?Ou2ys=GP_b6#l#;!QmukqnMrm?U_C>Ys?9$&V^L9$W^+K$Qk +EJs6ysQ+WM4?>d{_%@!xNhoOvtHGO6#AX0mZEO@NIbNa!j3}U$hvA2vTvk7KR<{>E>)wV{;*aixKiCu +s-+tGWZg7vBz|bRUN?PxsQSi@&02v?uc+SK-6;JiY0F~167y1lq%H4T<)gLo)v7nXW%@lTm+H&grhVM`Df(qlx(>&Ck^Tl; +%jrj$}?*x|e-fscg?o3;J91@LToxxv#_us%6jJ+pZ%w8nwE~jmDraXbrkUyWHyn-!k`G8vR>4#ZJfir +yVsh?Mb6{#N52?QT@|v^#A?K3QE|-=iF&+tU1zY=3Y6|bnbMK8~o-Bh0 +idJdKDH~2J-2)UARs_h}oD|0LxyI$7ct-YjQ2JDcSF+v_E)Y~I^@dl&PH>3{SX<$%tCY-|pK=_F#79t +rtUg8!Nd)Op?Q5GK7&@ppJNMj&nHOe`3=y_N#_jb}~=FaC%{}3?s=McjX&r&B&I+}qqPUbLbBa;M1Qw +C^Ia~7C43*HE+(hVvHh-gEP?1Lq^OLok~B)@B-4`7Q-`h8;R~Tuy7q}1Kl4YPGJVcW?+HI)LfTa)j={)F +=`H;_Ny}-JvU90(0{D5T*EAx#rGD<%&%`5B>f}jnnukL$G$(cGOe+HigBZETvYs-JI4b~gv4;oIK7d0 +@T%Ke>Nq4sC +=mh$vZtC!;j*T^K!c0+7>%8cmr_aa4WVhSAgy8#}WBJ@EN7N?E%kLS)W75kWxmbkZeJ6&NG&?Z7QWm> +#2Co1{^WNy$7OsRpzG0tbr0sv(b3%1qmmq1R(8Vr@cz@ERrE;f>6RyII0M$G#;{1Z`#h8~SsP4pR-pd +dbeoh~g4LD2w&dBZ6}ou$g&XkrvSlx*Vq0-0LY&gd08L2-qMGK7rV>A&-(@@|`Az2VS5>GCA^5JE3$( +r4tY~;Q9safc9xe!LtD5qbU!eJk}@Pd->Er6{XEdgsles&K$z6T@aIqhNQ=L7?~)0Lbee5qbVgNB&hT +g^N2$%kVX`5$geYpamw*2Y=Ebw$G@e0EHN;5CwXbeK4UcoQd_^uKW|+(0BQeMb6%Nr+F8VZ}^;w9y;V +6P5{dr$dYa#?TPZL%U5xemD@)6yi_5tDUzzGGV4J5_-0par+e +jaEq9|)RxEpsBG;z90^PW;LdN?VtZF_U0aIIjr;A>rpy>0oI3+nAfVKQr+G4(;? +bP7K$@2id6X!EYurG(}hQK=iz>!ZRkKB)+TV +*(MCjxfa_NxM9MbDcoEQ3%SI5_{qzXwEreh@M;S8a{ji0@)#%C%;fiO^lg_IDKi}(AAYB4NQmtz@lz& +`nT7}FIFIroV`zE~0V>?eK!t!T8FnD4&)Nd +H8l3*EJP|g?3>%;tgyoyAzWK1W}CgoIQNMuChy*43<*-`R$zCdJExS~f6O|D3uGjJxtDpo}W2SQRBw8n7=gEBZ4K_ZUz +jVK2jdP93QL4PJFrwBlPh}^NC4oMnXpQ5GDhX=-DqKA7X$_vA56#POM_B4q%G{20)Zz$lqejd}~h@3C +1;bSL{%jwuOPE_-Vo{+nT*FAZvLAxHwmNMK#Qy`J-v-JRM4GB<*@5z^#4Fx5d=WIxuj3h!q7D(oi3Hp +%iGlFTDijZE(EkRYGEqtgQUt$cW7^ZtvHI1FAQ-3arXj_s;RG*$IjpMe=@r6t(bkGhf<#*|XdnTT2P| +V?XJ=$sLINi&G+c$6-9AP26ON2HgQ(Fsg{C +t@4ynXny!JA^fR(k#}V_=P}sw50=75P*qmNw2htBQ@7# +07bYX{!ge!ZtueFpto{uXfAbjFdUV;RVqI$xwiX;(TaO4>P(GU_wXq)bF#&tqc4Vc35?O3CBU{v2hNB +pivu4U2~O1C*XirfDA-XGVd5H9)c?P4~ad_tuuOERkDd_;)^129ad83MP?(2FK>*%ouLYPk{oc;bd|h;%__4Sz>ar`{b8d%qv3~5TZnwGlrJ +VPB-|h(Y@9fR%+4;%r=%pvV`eHq6%eCrs*3{+T +v^p{Cio5%DIeoq^%Y_4+yoeYa=+Ax1H8Hp;AR7uiQ2EA{1832P2_G(=UKry%{ak56drUHo4Br#&%11)ING3auY;^Vplg=bN +_G4|m^emP`F4W~ZM!HP2>Jvu3FuZB+^_=1Ss-jrLFqZ5aK4>W8{{5G(b*(@zZRew{w7?WO0b^^=-*lF +zhk{7JL!OD%(b7~LLGa^AP)$Ew+MMqDQ7>C!%6yIdEydXdVcTDt3YQ%3sfUgc2wp=kXevj#>{FO((f` +FdlXm0lGc8|$VlYqiS77D$~G>#ijDEY +f1{Emq_041^v~r?|tv^%u=2F$F_ONleSSpCHATFmcCOo5i~88dyXeoqV3uaf6+bmjJ|iLhqNumV~`LO +7?djHWJB-n)b=0t$S4p`&qT91;?ZQbwdGA)79XCFm?Fu$@bUV0lR9|+&i;Boy})gzFu#c#6>rVTy4l> +WW{aXPhC$ZS-ZnK&r88`3g;vGj%W9z=a5yskm4aV3j@up-J8CK_*7J@2dl!OwD>m%KL(_ifEOnSa3&A +~ayD2BrrYUj<)@X?Rv1Q`-d*ZLdx%^;bU~>ifgfP^R_2@7@jZLsGBV}cmmtOsNdNs^Rx8$mBq$jh(jb +gLii7_K1_uhf;NGxMDppm8G_^dAOH2lB1dU<+sJyQdHWtaF*MV4yp{?W_8dprp?-tdd`W&du6KQn0#t +4xC8vQku||K165F+KZ#xNxp0^tNC5*2}7OKBZRdc{qO01=x*${aT8@f6p7MZ}G3+oa~uD@e==f98aA; +IU0}}3jxWH$alFYy7$-rjnPjIKWp^umOQ%nCQZJ20@zG2$WoVf6zRjwD$N3yz@3LhSU)Og=mjbic6lw;CK>z~JOj()uOatHmhpnHV7W8m&^67? +s?pM&aht;QY=eX_M@`e#L_Qd8#PX*D*6XZrc@Jd~de&z*k*P)h>@6aWAK2mt$eR#V|nhIlfW^40?6Dw;s4A<^$Y@8e2y}q_^bz|@M_cl(hFR!ef+SfQUx@&J +wAqxw4ZLXhgY^-ctzjW_#ZFzn3`jdALHkXH^>$gs*|F<<9ZEUWe7;ZLJPH(JljvB|~4pxUZo*NAh#y> +tj935U?9h#>}%YCk~Aw=5k#dehB^8v7gP7aH-uZrtVhM&s(np5Y!101U26qwUVVMspjz^Xy>R{Gb)k52BwjI5hB63 +^v_FPqW@z27ZRMUNrEttaaPK&l$MG`u;g<%{qCW!A%3dz&hz0_!sO-*ag1GI_VntCDyuU;FlT9TK|%D +!bb2F)|y@5uNcfO@Kpnc>?2=et=Uk$&Z=Y|`3AcZ*2$X;W*_+$>x7NTuNlm)`!@_`SMpm1v)Or@-GuA +{-(fK8`#shP8`$>^%=-9%p*_04qYn+-H|R%fSepj^nDr4D_!BnT2K|)v!QjtW9~}dK&RUy`{(_-h)A& +o)M`+-$7|gEvYX-Ls{0$pagMP~<-JsvGE?6zUH}E2%;|m5g13i9#O_o6)WF4D(Z2S +Q;d-uMv)o7oya%3yZYk1^O(KK?PgKy#yxA7|CDk9>lS9)q7`otUv6|CDuNp1U#QxvuHt^2LPF?!Qj|k +D}xAIc(fD&tysR#w@4E8*nl5Mr$ABjlPSKH(D1XZ?rB(-e{d7Z@?+?2Am>qz&^+uea{DZ1D+&rpegbO +oFZ?)ljIFFMc#l@_+7H{cX`15S}Q;7RfZI!WF@Q{)YJlDt7aljIF_lDvTyBX7Vd@&;UtyaA` +k8*qxe0sA0tz@^ArvF`Z{>Ds9~uu(Uj>tfU$=2JIXr>GmPQ`8MOMcwEmMcrs!jJg3Aqi*zFjJnaf7Kq;51WMBV6OlDflO>IOPV-9S^+4Mm!wZnQ3@y8)Nd-9D+?iSAbPdOpLhJ5b%2% +oKG4E~dI=)Q#3Ys9UDG0hgj~z@=1o<*D1Ey3smC-MEqzb)$75>INryP~G{K2|lol>PF$ER5v;)p}J8^ +A=RBv-T9V@MRlW#VyatanK)71t$ganm87T}aEiK7WjX35%Y@UYJL>jnm{?S|%rHSGQ>1Rdr3@39>P9D +}sN3RpTd3QKVS>JkQ8%u;5OwFf-5#l1q`J{ZG3vIs-4^Q3ce~MelDdHwa=ZPhZYR`@k1R#q=%f^NyK% +cIr{sL;ow{)gPLaCN$rM#LIw?in=){NDZJ}CCn +d-I}Cg{3^>ULn5>{9A>qPo%Ai|TF@bu$Ls0d@O~DJ`m7=5@KPscvJKFix +9QOzA{*SI6s?scuc%H}*iTty!^E<}1ngDHF +accI{gh6qThY|{3`@D&O=&Sq0MFhq0X+Md(urXrQ{5Koc4C+~i77pL-7X9hz-6dAUv*okyDElBzUl_` +%=2zandCbF1PM%}WQvhvg|Th~2}hB}Ycxc#LPi!X%%%fqFPO5M9su#BSM^oP4hv=#)+lgfH%6OAg>t +XPBUMbx#g7ivt-q)G=js3=>OCDWh(SVS?6E+z9VebvuYDWrj)qy6)+F-58HzhrZ^k?tJR@7E@YOx5Y4 +#QMW~PqxBSHO2A&I+bj-bBrq%Lw#1Y&!(;~3jn=b2!^BBU>C-ToeoQ%auX}gyrgT8v`G!e8bz8h{uzz +K}Zc9vQQQbbNJ2WvRd)jxf!US_%%|-N*b++U +Hp8al0T=(n^6BpDi+LAL@UbkpncfRTtZOM@sCKlB#qweZ>-7>?(4RxECl0A{LI`mbhx}8wBOmzdE{R_ +@4)QtlW@s=DJb& +CuW8Fd3Lp}KK(^`WngofsxQW6F+M*Ug@>ioKiC33boF>vm$8Sg0Ft{i=nelj;~I(|m< +yE)LFhM6?RJU1S!X75?s(a3;8?9^VPT*Zj-P2dyE~s0!!X)1?0Xo~ahKbL`ftGd +Mmc@aV6(%z3_PIC^um|b}IyLGBI`da8hzyf_)s42(qHe&IrEb8pUmVyqUN?IVydOVhQQfi?CNk=_sBS +0J?ZoT0P`5>OTVhHJbzjM<+d|zKsX{AEM8{8As2hD0iYaBP+n-@#p>By`0<_S&ZW(o>lPi+CJLb?=cE +is~bvvPMnPK9Sx}B(QnPFm~ZrPTcnz~DE$&smU5p@GDMcw%u;q$lTSg1SyGhbP&TgKdgeOTR2m>X~{y0`z?H&bF6NTIh115PnF;6e*b02g|zu;mC7z$xYiT~}k +v`|W!e}qZ?K6s#ojxe#DJ_R_%+<;Te4LHTzfK$v3IK|w6eK0rrF2~$vGbOu+cX0ZYMRfb5?iq;gn!0x +%b&C!Tv{1K2bc@b>wX6-y7u~Ycr!1mdbox|2bz6=w$@fbn)D4;{b#Ne-qxg6syoI`Dr%&MmeNeaAOUZ +859f)q3T~af5m6;opHrLFZZ8?fhE~M@&LUiX-x9spK7cW|vzUa;mDZPpA{KKb!78BiIMjtO)Klg-5!?)dR$*JKdO5Meu*rlbaLXWlUL+~#N6yAaks +ui#@v?eIMrcp%XS=}%x&2O?~}Q&i1j7)qV6g(cjf&OCoea1{gPUA&kc23_T%J-lrGkn$c +~=M4=H7v;4Rc`c|(q5X`sk2$$!m)h`PabrCurQGo+MR-Cq3?qq^C=d-qE$o8V_a-MEsPx|1uJJL(oK4 +V0}f$=?Jov$|cZFWH6rah&)i7V5UBZYS@hbh4`34RxDU-E4wqWth~eyDW8E&M&E{+lygR@uh*H^Gih3 +oxdT+f$FwUw?%c&!0NV8H#$jCH(Gny1#e!nz-Lmfx@T~JNlo3g>YfsHi;kX}eoARsU}90-4mRZEd)@i +eEqWWgjJll|CcAYnrLnr%l-27?D$m?_{A%V-I&rff$6|H6NGUDny?PYg7OUIaR!V=O+mcdRM7J!Z^eM +W1GPlv(Y;x-TIF)DaT5}g=?y2v`nWyz7(>^q?^6N{gvmYlg`*GMb)S|nl?zy3EQAjCUU*aO96xk(c?7 +=R{KdIY6NICuUORBR8-Xgl4Eb6A0Qu6VxnY(80d1vmbi0)l^e2L^83m!8{ndr7Kw?%YU-sq--y7|b~% +w040yfgRI51w+NxvRq561yaS4}9fUmw-kqYjo2Vcs_0~!fXsDYFORc(V>YjJ%&d(@;7RxB{ffYS +7P_!@*Xd%^&>)82{Zc9cfJ2TM9I~HUcDJ{pBSX8%H>NbW6tG`y=HFaN^)NN7S=(*7H64~)3E({aP9(V +`GmpE8nl5cg(mY4XXZnXAs+^bjWrsGR^p|$F+sr$;L?uxGrl&NmfN!|IXyCNrb%T@-;PU@C<-Lm6eLB +?K=dku)XSw%H<*VKJwQny8QyD&^FF{KN`#Nu`PQ{5871cc;4bptM@x&iwzOk}DXt;UMHew-du8FshqfOdV6!)IB%U4PM(-ivw}dvtAtNU`LLN#eq) +Nbz2q(T6W}E4ln_|7Nc&*VH{X)D5(d>IPayb%S=xsBWOsQ{4_02ZDM^7$#_3S=B +A0Zl8up+fX;_zNYS)y61+vEvh?zAH2md5$&e5P`Bv7SBvVFojoOrDf0~zd|-(KUq$P>WvW|t_LN0+%T +|~;F-)8+4h-n5Zr)FQ;%iOab3@%0)$L*6f`Ys2Nn$-4)egOj7-=2l~L_h8gmURiFet&bYRvnyMp#>!e_v^iK +=TUk5R7!A*k^zX-I9vp0Lt_)5MZ#Xs_o!MN|a6G|V=T4tkUu|5oac1r0=*(cWvc7h0((U?iOZR(XxVo +-7TW{RAzPYS_QC)0fZ=uaOUxEph6>bei&zZ!=J8yo6^ZX29f9bU6_?Y@Ouj~`v?^*a5f&e +DyyAG+nhv0D!uSvvT`1ILzbJGylA*iAPdYwT~F-yRxHk#+61dOd5sJ}8wi9#>XsX5&z*9w@1m5DkYywRciLd$~Rpnj4C(8_Iz$fbr +Fyg^vp#g?G=uhGp^Kf!P0}OgNS#5w(4=1Y)Fzn&voCX;8aI)S210PP-8}xyv>Ky=2)r-*&Q}tr>!&JR +cPOVhE82?tPUW|WB*PB=k4S+2Meh*-qfmZ?SFz{-CT?YOUz(ofBF~A-J{{&#)fLHCgDtUIAtmQR$paK +S73y@dzeSo~8KLyAux(*<(XfHrs(e(g%MK=J{6(#lxZsvBMfw+@9O$OpN?gR|PJ*-bf0Z6RTVj%9`PM +d+abvqpf;=b*48Hk&+A{sJJMqrU{m=jg8h#uY6tZes_4# +Rc_~Z?zkN#r5?2+t@*1YX4m`X?PRBxSYkL?wdihYVTb$`RyM7R8Ctn`RH2!DoeAO*j_&b7+15H{PwND +l;_w>9>Tu{7#Gt^e)(^JDI2YsT+ktaaW#wGZR{|xxSD>#!AF3_#q^TjJ&LafRZNgn{Ud;?m|oK3-vZR +d^tQoc0OMl%$u%Aa78kRaeDrO=REQEJRo@OUE~b|>{5xQ3W|B|71DKkbAo-NP2dMnfUNYeSfNwQjO)` +%E2$0`s{{)cVXm{QTl;3Ip43OVx{{oP+!4g2u2LB2$uBe+_5=gxtSJX{L1BBjJw^}k0^i|r73+g7ru} +olGP&fG$`WkJ<1$C3zq3_V9GT?(`%1;rh?zU#q!QF($74?&*D+H?h4foN%5vu&-W`f>BsJi8nLRSe?_ +gqrIX%ZB1RhT-XGUBQhlSy7DP~CJv^7|Wvswe9ZFvGlTx<`RFsf>K4~AFPzFiUGlZ&p +4>#n!gsPhlJ={lnNZoz?WDd>}svahg%{fBV{Rg)B4?_9CUr@bc2L +FHoteC?UBmT@k5_vL62lstH}l={sHMM{nB}iN&JHr{UBt+691r0KWMR$iGR?cAGF!v#6RfL4^+)fN@I +JA^aE8kcrpG#kA9#kZ&KyGKK(#_do@kv1Nwpb25XwiN$zT;(KMCQL#owA(^O6ms#Y9LQ#n1XT6Hu{pXNiWkAN!g(|l+J5>VxRnh&i)0;;@E^P!bUK$Z7tKC~JMsPaC|hgKv3RomoOQT=mCON*oPGYKP6a&vMA?ggsO +${c(6)cqWxae?@gh@9O(X`MEDc%IO>x^~*v4V2#LU}k?osH +zQD_9CHiZEcL^ON6T0Fgh<2s=|7-g{2!P+0(|Dy+Wvp>eGg9poC8gSN1BQ>JG)Hy+){t%`rN!6RK*%r +@cXFTw5DGyh*644WITFp>b{aHXRzeB-386Wg3`1?Tq&KR +B`bZ|+)SnZ|mREd1pyCwN^(CRIuJm%bP)nh-_Zw;{gjxHBP$gUw@LK}o!qDlHn%LH`GQ7(2IoXzhe^=92{yBCB4of)D}v5nMJ4#6kP3NgsPh{DVN;dPz +fGe7udlpJxi#5*ihkf1S@%t#^yS7g}CbH30BhwS{}bZu$n*c(HIOIY9#|g8ox-e{u2?7_)7%q +KN2yhFB8oE=)FWlHDR%gUm=*w^l?nX_b=r8&WDfQbn~Ic{>Jf@wNtCZ8_$h~%DO&2935U?9dfF&+|`X|R!`7hN(rA5YeRFxZxpaE4vH$d2&yOzOx +)qjh95N0AA|0LJ6hA_8n?JYKCKKmnI8km;v21Q?P2PS#lo`Tv(Mke8=b1fJ*17sxZyLIQW|JAO +nnyVXZL8W+As%X^cf0Uov2o%IH!(b~I-$0;k#Q1k9qpe1TkME +jkk4=*aro5U?&3S98&HuPcRzLf5_>gi!Ba5w3F(7$bCtZKohGMyS;73c2#uu~H-fT(&<@1fWDoFS)==^Z;}>tSAvunkB +%qJT~z~lR1QcpbVwQ?Y&E%63p$rOP>+U?Y&E%6Wr!Tp6R=j=P2qJBx45Z7=--2OJ5V5>+k6xg#0}dlJ +zJ2JqmRC6aF4$H#!T+WKBxZWV0rng=DfOrD?KRlM*%AtVw4fnXE}?A(^a6DVt2zq_dDr*0i04q_ZZSg +=DfOorPqwCLM)jvL+pcWU?lmgk-WNorGkvCY^+2vL+pcWU?k5g=DfOorPqwCY^<3vL>B{WU?k5hGeoP +9foAHCM9yRS(8#Z*{n&aoNU&#ZJhw7tVzk7Y}OR=KTu89q;yU;Yf?HVn>DfB_9ko6+xs(Flae`^tVye +!OxC1Vg=Dg(u%DAPX?>H)n)F(bOxDz5$1PCSq?Ju3Ytn&8CTmivCYv>BO_Rx*l%mOGO*#%qK+2kQ8j{ +JHl$6P2O-jgQvL+>CGFel*m6tVX4U@^5wr!FGrL0N&B$=#fdsRn*Qr4uMl1$dLoq;4MWldVVWU?kDU9 +wq|5-!=Sslz3=$(odG$!1MTweYOzeyfWt3PA2#SzBJeZ)>mWV~4?o%Mc_l1}S2em%Vc5QHZB7#C04}l +|bZw0Z>Z=1QY-O00;p4c~(=T(R=Fm7XSeBgaH600001RX>c!Jc4cm4Z*nhVXkl_>WppoWVQyzeEeI!b* +@Y{%F7-ue +%`*afmFev`>nS|`CP?$ucRid{8p{56~PSp9vh#)CJ$607lSjepFpB +JN`RU@XToKK=qwFJDhzwC~Jb2@uF_}ekZA*UO*2(`U +wr-@++K9(Gg<;oX*kU-6i^4Eui{Z(27=&SbK`s!6odv~k3m9e))pf&8CWfmP!xqDIfkk21wHP+j4TIU +%4c`EU6)!ig$E9e8tC<|GS`J$dqZ4a~cP59;u)_<=VFkvG>$qq+Y&mQ>Jn2K`F#KPN!|>~dau}C4D-I +(~kmRsyIh^Eho%}EdpyjaTu;uWik9Lf%6o(-j>W6W8({Q+!&0+MBhr=N56dVT1lN?4D`8bT$DGt|6;j +lv8#&x8#9JU;`9G>*C-SQFwhao3940Q@WoXugtC>Mv(MUuln=v00fUC*7vwKy-qkhZWK#==Q)7;=ik_ +{(xC4x{fBhasmp3^~PN$SDp(PH`A=io*yeABWLNio=jo9EP0YFys`6A*VPDd3$hp_I?->JdGcQ#m&Xx +0{k#=ndC6k6o-MuJRAnkQXEFl`TQ_CDTBlK$b5b{<}hQI`5eYlD8mn9xu-Y`IiDX!>wJC~t;_Jk7^-d +JhlP3x$SDp(&c$IgF2N6@>k|Ahx}JA_7(M6Nr?dItbbh!-9A=O*pThuGJ`M|hSl}>PPsL%u52KSAau| +K*1=*DH +;2(WABTaRsr)cHnTEsYBUjxT=B9-Fu#lI)epslN5I8)C{4nsG&kxh#5}YsQb6C$0V*!^@ +FCpyHp>;kE3w~IS!-5~41BWr*wq9auq+-?7dWmd5ynv52>*XcD%DLwy6iGI&1Bv+@E_0u*ki3MzVdL` +>xb>#WOU!}8!akiAhhhH~D?hBq;qvklW^lO7yo4Tywdy4lGB&Ow#=>$K0LbTug}g+W94<32Q3!_%@x$ +nQs=Bo@_vx}ZT*y9Mc3#35Kdi-JEkCT2AJ*bEiq_L&L&ySkDg&^~2`)VO-!0{j +grW1TJu@{II}b^j$`Ncsu!FTen7C%*PMoBd6J?^WwTS#(*8d;WG0Qdi4^5AD%;A0&+e-EaW8$;jrL`_ +3DQO4sWNrHGE&qJ1`Qai +s?8O{rx3Bqr7_za?HA9|1hxMMPGu{su!ePkUAunMHhoNp?4hw!5@>J*i#2jY#>B4eYsF%=tjzjRn0*8 +hA;W<3VA#fP-{Ga0x>LrBdIP^FSdG7VYGq0Br@)EcXBhOnaV4qI!ISyFa8P*T$<%j9*bo_=ipTl#=OQ +7`(_vse3UP8|g>zywl*Xa7dMZC0@ +6)k6Z@Y0=s2?t~ZmrDx@Eq!g^*F5e9EZSRp>C}ZKb+0sLi}(xhfDOsrsO5ect4$R?qwl)34z0f_~H0D +4t9%eHx3Jacn%yE@)81v%dD3WI1Jg?^Ck2+TtvMD4dz*&gHP4A2x%-1=LFj94^xj>*a^_{BXQa$JV>~9ELpq^M?fv +LoVa}bcN(4^f+8*UcwkZ40Su_CCcM4)G6}Akf+EG>v7na^M{?7!)##}!(rDL4(s{hIdE9d4?`}4!;p7 +kUP9n7HlXsoj{|b9dI`w+IE>aMypIENuJ>_3F8qDXkdqvSnyX$y;4oUJI1D+(VaT)d!%kd3%vSJr^TU +?ImcuzXEYwQ~b!%GhMG`oS#?x?E@WV6baCW_f0zNO7|t%2m^Frl$LaLa5_)!6?=cP`EfF8L#+I42!v_0yguQ!y;qVYHqmJuEy;S7Lg&h^jSH?C|za4+|I;(h>rOh11sJsx`J2tR +1!-HkHGAr>zxn>ZRd!*p$;HbnGzH;_WcXB4%iZ1rDQ=TpV^{Kg@Ay{jlY*p&W*6YV~mTHXZtyd-ZS;e +psh^IQ#TrTRogk569KRY<8_5wj4H-$@V4e~iPaKX9M-eLp!Uq +R=?bvJT4@O#JFK@&CvaHrrAQ^(VJAKWp3RKqu;sAj@T3oRdUL*~IM90D97f}O9L|0zQUM&!_QL?(yg6 +)4TEdB+;^0%Tqd9Ez5|+c%hn$xX{4iug)5DOb$x9f)VW|0@;t +pmb5=Eqk3)!VZ>ly9RX<@jC>S6S3svWMyc9@Oo&bGsr!zOdsR!i9G;XlCPGT%)na9Hmtj_h~S)d|CF_ +^cha7&aBdkf%E1C)*B}_%K}|7}m1GC00vh7Y}d$hv|efegM{K9;TzC*7!hKH*7I%DuzwZO3d61>t!Vb +49_?#Az(QB&2(CBST8G4X0e3U5kK@oBt9e-!xqC9!;?PBeIe59-LTdp99nKzr)EufL1=bTBKrlQWxC- +)FsxTAL0JhNyv<5j4x7qhAu9pdzNon}r{ply`5r9+xs2p6-Y$}Jhl^+(;5 +(0;{o@hqb`TQ_iCpnBQJrfUF)APf^YnsdS!+P(fql1U}wO9^Y4lfvoOH2>%1P*7PEFt*e1>`XLF!h9= +dYqSFA8I*lIczG2_3{#MboNCYm9ncPvY+9|<}lPLI1Gf&@I@R#UIMMBIsiVdT4TLi4qFbJ%3+W-U)7r +MLL{`#Rkc<`ei&Vs@FEU94r}exY58HOi0W8TrHY%II8oR9We*RQiKa#lO^BA60t&%4pc_^?UuZm63mGH2MAT0uOYD!(R8Szwd-Ux-jfd +x2f +1{41TVv~t~3bDn+KZDqg#hZ5D6x};j*79cDP!1Dsfyg8JHbfrLpF`vk-3pOMvAm5Er!p2I|}Vb5hEQKQC0tX{9qL@eFO({>QCZoLK*v1q*}6R~1FK1cf@vN_uQ7a$g&qrZ +g6=V%!spQFEm$mi%g5cwSaHN-HYR&<%SK~q(g)#y9zc8F^Gs2VZq0K_n$cBCDI7RJ+VZE1%2O{Ue41{PRkw#yp)i9t|v{+V13Vi;00x~4S}C-+a(^j}F;Yc3MWb0 +~Ash(3Ou#4si=>Xe+1vK7s!OOL!1@R+N`O4cMl +`p-2BbBec2T0|M@83z~-$th{HEC%i9K<&dzDqiD5XT06AFhrYh;ObSJ>Vn^#Q#1?vYTlB66v*s{wC@5 +g#HTYUP6DB^hWkoHWST%P0d@`&D)9Q_yg6cS2LT}oow07mTTE^JzGu&`Yc^aBcVS>dNR@%NKZ`bl^01 +*hWcORzmxO&6zNVvf132{V7s4!EoaZFm%V}$HssW$F8xU{u_8635*{KsjI@ +DF!o#HU`*ia)lKG9g`8vt`PThQiWPYn|(oN9d_v+?bBy*>=`8LViYi%M4PyANC;pt| +$+rqpT>nY33J@3l1gT+w9#mqsvNUycOdwF6rjE9R0cC1xh=k@_*_t-m{({snzIr-2?J8%3zbPm;?J8? +SllmN~VQ_VP+ViA_v0>OKG3_dMQ^TmeK&px@G98qbc9p;JpuR+^iVf<^q^hi7L@dflyUO9z@oD&Wa!gOk)$ws}kg6sQEAvfK!{EGhlG;^9r-ea#o76Bk57+PxsV!#og8wF2c^ +wxM3TU{>?BMSbN^`ptw}YX0k5qNzrHk*}Noo_(eL$-EE6Bwq|C(ek&ggzfqCyKM=_69reV5LAyA!LE- +hOm>B?&m;PM&&B7lF9SUNc(iDry4-LA4T_)Cov-L7&o(Ueo3+pV*`zpEswsM0SKaVI_opY<@QYQEA +nAFlE+_4HPwJ8>|$F7Ve?{-pu+F;c_8n$awb|ASN&83y5TQq?zlG_;fppJc0D1bmHDFZJd6z*1Hc`RM +V3hmKU1D<^yXv#b8?mq)(JLZ9?UM+YnZ>dh)az3z`X{qA{xdH4Oj{>tF~^*!qMcW-Ta>ixIc?Vr8SJs +Wm)cz(PYcGd>#y;1L?- +x;dygXQYpcFS#r-*Gq4<$b=t*6FUF>Ge9R{z&a3EPuDVy6)ddU)|NUbKTSaXgRcy!6U(=!DGSW!L{J$ +!4tug!BfH0!85@xf?o#D2G0f02fqql2wn_c3SJIg30@6e3tkW22;L0d3f>Oh3EmCf3*HYt2tEux3Vsv +(HuyOBB=}wMY4BO_dGJN>W$;z-b@2P~mGO_q4~~B_zB+zr{P6gv<44AijvpWYEL_01EG^w}@_47!^4g +uI-RrP>9d@t7?seF`4!hT3_d4uehu!P2dmTGwujACE7CEexg=mq*N_mJDd90L)Xw~QkN!Qe>(+`risp +ZiRlD?_cpdTcSQ>#foNIIuhi++%_POUcmAQgF+evpcstZqFOIo+Q1ROEDv)>DzwZCX!7PV-SuM&73Rs +3#+D(|pvEk+*3+>dDC4G#~Y34cupN +=Y_d|-?4KZmiYG89pBv< +9N*~njz_)QmF;`OoBiI(k;>7pAFW*LZ+3e(PE>Y>*N?WOva)i0(7#pL?rtAjza8~9`-5ZGZgvKn(eT* +LhWx*sXt+J-Z$yJi_ttiQFsxioI@pR%-Wx`zlE1zj4bS&Cqpg*d5UR?NusADyyBg%jAtNRVsn8|OlQOeY}SYy`p+iYI43g2NLn4LHA_gE +k7pxzfVr`>ZvauMb%3>{N|EWHPJfBi2bXE9c`(W_^6Z8fPGjf55J=tnsJpOvp-qc% +Pji^^9;2@3SeZHCcN$4YdYq&*q`tV(r=3)&kaERr>ss>3vmsB#Y|>}UYyoC7;+mNq6y&q>nJsde9Zt>cz%zSUnC*S`qca=olKAZ6m`&^~ +htHO9-8;ZmOP?K1&1{=&B;RM}XCvX%K3jNZA5LaN^~^4w*|W_xCBwr95LWFdSuF +@8d3Q+tislxH)770K-UXOOeqQ)A<^{aQcIZ0f@^+cO)j=jXE<q9p+*i%RV%0L)Nejd6K0gP&I5r*02p(!#3n +`Y@?LPu#G;(u?=-1Y~ur`+P)51!#3n1w$-5ZM6VoyI?*dfpcb@!-4V7WefAE($NZkCd}s$2&<-r19aw +m68)ygKYcC75ahc6(y`KTvF1)rKwDY~T6|~V|>JMhr<&>nrDn} +DQ1XhWTu(>6fc;Itw8fMnEqe$cMcBJDApcxaC%%tO2E(1v>GQf&v&hPr6bwu(oV5ZV$Pdk47Tp{*v&L +)$~Uq|k=!A4R5}94e|KIhO9vw@g)3$Qji?QUdO1o{LCw4Ff +PMW$UGw878`9nI_;UqBL%J=DGRjioVJIy18B=jYVW +`m<)N)6%tPA_+Ov;Gpf1!~{&3JUTc@4Bxu(b$M)|k=6&R1u3#0g@i4bb+hN6G^2DnXlHBOcmn!sZ2Sz +;7z2jZUV5Hsr}NZ9_a_2W;(vj~Jkh#29`&%+bSM0K-&kXz>U?>pip8e0|k-M2dW +7LoOoH1}QaWL!Q6Uc9M=*F*`pU!NL!X*^o76L!M;u2vm*PkTqsQ)|d@>q7{FTHD*H|XEs!g*^tMX4OL +?{WR2O7HD*JeEFD2>joFYVOGnUJV>aY*W<%AO4SAf|Pzz$Vuw*v1A7^$JjojtJVs&QDnnZ8c%bm}r;BX}f@S +Nu0LbCUz@mTdf^&0d2!7?INLVaN34M+ptRe(4-^uia&mC`gBCi*H;;B1GAkZ+J-&skY|`^8`k?dSvs; +r%q}n;F&OQVC)x&P8=gXzJkd6#BSjnSFrV49v4)?8%kHy<3uYJj6mkwLN1TKsApB(Eh)=X9VfJD^g)} +hR?kObXvNF49pKW4xjiAlWw`GU6lW?Rwk0A{kYYd5YdDdtbXS59)YYd5Y{>BmkR{t#V+cn?25oj?d1$K%E7{tSIiw>?wcc-;9z&KT(Ka}3!y0Y7$B<=NJ2J1wkfyaGS +vJQ1|>x3Cxd7}Ax~ +CT6qG^~_fDwTzLr!Du^)v=8ml5g%#$NLx+93?l7p2Rl0{Jhat>E%bUn$VI&1&j4+-p7+;7qU|)V9m(I +pjLPv-yUA#0&}Osmp{*utp`ks8NZT$Qnfc<8nMc|#(vih<+C^ +?*cae@biL{G`HtE{CqKMh7f6r_+U-Nnl37Rb$vwb=;5wpvkjyQP?=_JuE%VWrrZDAK#q|H0>&>l_Lyd +FaW!=+6}AkY2l5AxFysP5nI2eqVMe_%*Q7WDmoF1D~6-tU*6jzBHRZb(CtEIJg479J1s_+px37V6>g=tbsf; +qg}GKBO+U*&HjOhwwf^i7;-VULwcuOQm4I`k@mctHt8C)v#&p3qwb-tCah%JA)P?mu(QSv+IBl@(8;{ +t%32(>4Uu+PpzUH0y8+sEJ8SILju@PFaeLSchPJEckXby!hSx(|P1qwiZ71;v;OF&42n(Q +`@S5tGx-zG;jNn1{BSuw`65Vi%8~^>U^x4{bGJ^ +MbZ_+GTaxP$zTRkjuG=9qJ67HsslDVmCN#G%oemu$$tMY;O%40uOC9Vaw>Wi+o*FS)8^Z(=KikyWN9G +7q9rsk4I+zAkqNsB3F;Nco3Nn?FCsqk~wWwtB1Cluw`65a){sYR~)npj7Lfi?eZ-7oBf+d$O+H(L1e~ +kR+MM9ny;^7c9_p>CyPhym<=Qz#>FGczf2qQAzY>n`LIUXroA-*L7N}GhxTZ~=Jn +JfA@)iQ0go@Vig)vHHbIc-~Nldd^!Ms4lO#)Jj6MJ}~PF11B2wZ+t4TjWwZ%%ygiOKst)y?E4yTF%Wi +kY~2!532v(n)Ju~y)}>*k=nIpMs4j&5b~)lW=idRuPrR7Epn+XJhhjF+WGs~XYREPYyJ#g8}dSVZL}_ +}*LJWaazUuw$f$jYz6Bwl+CCv!Kx(^4NNl_|)B?PA$*El)uk9is$@kh&%T4WiE2Fl5JFBPm;!zu_-xO +(|kU(8DYD0FPkj#nN^we=euN`F6)^(Wq?MFLlzZ=n3Uv}27-02TC +(|;%jqjI#;PXCZh(W!oKI7qt54ox2SDg3E&zO%h859pcB##Z$B&J!nAu6*;t>5Eq`uZyI(^|NPAUOID +S{nXi~F0DUvasA?@(`PPK)+&3W(UBuluY=10xGctHq2zE}4wYOTm#a#yjmtG9*T?0$k{jc4L&?o?xvA +vVxZF~5o6EQ-iL}U?QgH_qT8$gfwIXqUPT#pnz2M#`v?6hb7Fw0pp^uj-Xu!wo6c}+aUZ}v3i}tvVF% +QQlRAA7<@oEJ|JshuAVA#X)ITaZ9aJ*iDfe**)6>aERz3@PxRxd_B)au3Phg!YxM^&v}jDJ +s9O9DiEto{2Ig>6CZHCCvCm +SM4Yj8K1U}YvN>A)JrIk}(eFd#bF>DL&(R-1CzQI@3s`7JUMNl7pUnY)lBsq3jvVp38=^|?)=`~^v3{SW4`28X(j~anb$X%Si{RxXx^b;NypP`pM +QR%Y)y@CDM6$fLaN0b){|@O%nKeBRN@O{AEy(YZEDH@9(BC6nmI`eA=3hycwFcD9XQay;RM0+9lB`tF +!5}sesgqD3X3bMCAr1^o>Lx_>fGp=z0gKCWLKU63oD|xk!F`R6B&oAbzlXg}a#Cll3HdFOlQL^GSZ|X +oPgm*$zY+`SE~+HIOtQR#;jFm-3dw1es`KB_N2ZyYz=8iu)_GcHQ!g`pHH?~wr1$@!=5jto>p*ikpW? +v0rG6s}4#;vk!voVMJx3M4gk(9INTWkkv`?p2YCJ-`3xNts7cr?LT-|@4WO>gHa0d6W826o&C~<2sK)(`yZ2>-t*LG?SDdYde=iIh!BLdBMBKs@~>YdS)R3!_y3*bv`kb_7r*o+ttJf?- +EO2eY2!%#lhm|I9QS{boZd3fH(iC&p$Hn;&q+=>grWL^ctqOigq3~0*(jswuKPFigSw+hE +6O!dz2H02kQS&;)i)pDtdqCqXZ4Anw3|B}WQ&opX5w4I#7H?Jd5~&h1 +YHBG|55v~MeVHNKk4lkxm>L~*ol&A5rf(sD`YNd@MV0y*sVu*Loy641DfJCfHWQOm7l +OeVf#zE)@F?iLx$zGiI3X<;KCjOR6jk{JR=+IZ?4ndFe9G!_54b1lz +jf;=`-glYn990-i@v3c8wiFtaIKA(%C?e)&iwQhHPD;mnj3Txl!Z0$sk)LCb1`(|e&8m=Xji(iaiieHXjiN6z +nH-0sKEq*Ngpv<-8vp=ekO2TG0001RX>c!Jc4cm4Z*nhVXkl_>WppoWVQyz=b#7;2a%o|1ZEs{{Y%Xwl?V +W9x9LH71-|wfGSb*$c$yL=mPXYn5q)1Anm65C%g2^({j-`oLGt2BqmLklNgL%k-KztlR;y46{K=26(@ +o{j#IK0@|d8KcmPeNBu-P^a@w?kjobk9@In?$$EHGR9PfAjDEt*$-tsb}u&51+Z->p#=&->vQ4AKe=C +H;&Yfefn7K#$cz{zj>l|XY|ssmW^y|yfhr#uI=^qj&I-X_IC!u<2P<~hCAKS@%`)e|Lu22d&9x??y%O +oy*C(+YFEP!cDv8sA9YWMhp%==mj*lC-Hna#8-f$H=LY+|QSWXy{FgaVyV!fVyL&(U|N2DjT7MV*rB2 +kgx;HyfyN&bLw$7cpa^ck0_Qg|M=e93hK6CbB?PTr2MlJl9)`{AKTJ1>f=&7So0D|i2baXT9RZpYO#? +ksFMo*Kr^%FHSjh>04fx)(CNe^+qpCLW8v4?Y{hZeRyPoi<#3#8uw+kTd`ZD8Bak#Ex&y-3=|xm_aBI +JYg*LlfIxCeirYo+Hr!qgP13ar7#QHZl4<$u0i2Yoy=!>U^HGtz-1}Nz`D!Umzoo1K){*I_~y5Y1+W( +4bnC~-5nCerd`rOoWo0`X*@@6lD6?2xfMs-80?XzaR*^GQ3zf8_6{IIQ%v_ZE_~>kZ?T?ze}zt>HEjznv&Mw`30Er^Xbh&2mh!-80`AXY4h6$@f50I_C4tXU8%7Q~tbv0*{1SP*L## +F_=M_6D(HL993s8y3Wh1+ij5tT+${EQl2gV#R`3aUeGNL993sYZk_EPJtLYNr4!`DG)D#1atuD`E+Vc}1)QidYLk%qwCEh?PJQ>k>iCD`E+V1&UbB8N`YOvF1P=*UuE> +aQmAhv9LkVa$qirC*HmRJ)KkJzvvmUzUxB3=ZKm<6$BL9AI2YZk=b9&zBSh*@hwb099pBNkW_h6Aw{f +VgCjI0M8W3cWy_p@=g;T%<>w0pbD`aUDHk0>Nw$D}f?b-XNA(6A}>nTNAt@=0Pk`#L8O{ORR}9Jz^sO +@zQ(5#VBHbYk~*yEIi^lfLNx8WgrHlxjc{9^6o(zcjXuB{H=+_1u?IP%e5v0i(^gT@-+gs*??H0h>Kb^p;!C}RIr6TBi;EQrfoN32*7^VWo6LCku@DnE#QJz +~v)xEPPvupm|}hKLj86bvEygcFz5X-EI27s7gX;D0435d&GN6dqG*_N*@SFw&&#DOP>1=a+si0AJSOBAuh +nkdpE2F@+)3mq~LLu(%pTLL{u187k|T$DAzgIHoslndfgm#;0?I^tzoH8FohJOht-CLo@JB9?(T!z0e +HCNex?ku?$En{@;=vw5L|FV?NHBKG%)%T>fIh$Y23-Xks(#J-A{wGod{Xy)nhy}~n3R*Q$sv<7LBlfl?d=)WoO-Mkz4$Iey1hK4GC$lD+0AhlVMR~KXC= +gd~*8LI?`>&eN9EddwV$FhBvmn+Sh&2mh)|xOJi1}3$`4zEdL9AI2vmUYLK+Lb2kbqdTAYPPJ6VSTae +Jutt7V8KoRvp9=MXU-^#5{L9xzP5$h5aaefdNrHB{Yn#cfgh9V9`iZ}zrGf~7D)`UzE +=I&BQCXA$Ag%E#hG0-p;!>>A{4RaK& +%9cI6sJaMXbC*EGgE3A6osXB-cs7#X8*dhupf-SDaNrideBARs|_ywE!UI6)_KDe?_b~5U;|fKZO+QR +=^|XK`io!i&Vt2V%7@V;eg|Cz;T#&CIXhj0motXZ-)jfhxtF^9IzbLEQ +k3Q>-a?zGK(0(EAqEP%jd90i$AH;?OvG0p@h66Fb)dcTMu +pnjyF<-0WK`e15Gz;Qc)avE{;*9q>Ae?Vscxat((FBC^ZN6rB5Nlo#dG-1jFu|N^CizZkQ`!1T0fS7%;j#b3`8_xXdHGdGBEM~$q!=Inh=24a3E%_32#MQkTt=Bn71aD6vQ$`4B>o=7{cW#V%&|G-XRr-r)}4f!@M9a$RZ9{4p$ +bjKoIjBHUbVWsYRT@;U%?*4GLm%GgKgUZPyXRyddVC32%#-uhkV}5$pVd*w>j*`9Z8X5c3vsQO<-~DG ++A}Vi|}t1aSt4GXyax-+Y1?7fsMOZQwAS$`yyFZ7UAj +&rB?0p2OZ2G5>xu>r9kr5u3RSVty4d?@X+gMJ#*2IYSUm-tT^o2Rvfk;sY6`QB4U9t;VXz)4lk%fYy= +$Ujfu5*n?q(y$Vzq4+K0pVG6$K8tIlEV&0)Q69Om`#{EdluuU+Fg%o`K=U*@PPbr@daHN=60!y5lM2b +p!N4&q7>ucIJlD|G@83ycYV5pjNFf`6;d-kvV?wla4Y&KDQ>o(cw5^cCdKEZa>PvOr9G>@z2`$jW +z6P=6rMfj(F_E$Fnry|y;=ELc#srx)6^LEiN)X%6f^7HWYfK2<E6QimAOTEzaB@Rj)-VrcEPAw2FfK}NCyv1_}IA +m$aZi9Ji{?5cYE8>MI)irRJ2{L9Ch+W%t1Tn9Oy|-P{0uU<}#EJtk +zsrOw4aB@67JyiDAm+DS;}x+IfLO60R?7+EjKyn3Dq;v1p@{MIW->Yzh+W%t1aYZ~xS(2{?{+`S^frg +YBj!Q8q}IgZyv;F-x9T){#AF;Q5WBV&i0!BJeb<(L(S%^%wQA9X>tq=gO%(WAT^&J8uXr|zHA`a6l2{ +8!tXUEpmc*JRv1UoESrYR*{uq|TnkBIjkXW-MHY|w^OJXe`u@;b6b0k(Qi6!0yD~T0LV#ShJU=pkRBx +bz{fh1NOiIsrFzTSjlN$l@U%)%swXZ#XL4B-@sA)F#Hgi|Dj@Z7zLP26dMUfLo_tOc65BJq^OrXq2a^Vy7w+F93;g#|fIJl*Fpi#H&tX-ksn{Tu{Z%R} +-@&F27RM)^i8~R$*+IIgNbK5HB(@*vJ9exl_OIBn?gUR_Uro%C*xM&&-|P@<6VGd6e|KU@N +t~gHmz2btxJ^85Uy<0gtw?M?(p@pVNzAV&7HDFY#O(IOzM7c#iHjj|rHMUAEc1zFB%Xy&T*rOl;Xu@T +MdE4Oip2IalQ%o&Ph!@c5WLwTa3>T?;zfP4W3@;O;U&_^^g)JGwLMN8#`a?%%(CeXv +`5a_>(6#^_FG)Eo4la@`KP`%%BwySoG1*`W5yV7L?ghc<=Uv06L&N0|NTL4Pz1yNOTDp7&|^SM5?~Z_ +l34^PTIv-6!{-Ig{?D}U%0xhOF5F6nTQ1zDVYrneMONQ*QDBKqslNoAu;lLBp21P4c0j +875OtJrXp-TsGUu2ZE;cPg}{yfu=39x04S8%`g$j10DsMwldU6J_s~z9;p|+o7PR;Og;oO?ZSzA@)4j +J=CRpKJ^-}BJT@Ci`QHljXu5oV7h+)^o9_JJfuLpca4~osXjy00eFr=Yw8A{t^6aiML;!<{ocEVSv|`U42kx%J|U5T%pr4n_@k+;K2NP=(aL7yX6!8thS|88*u$7jCbghYt1ub&H +7{e#j?FZ-i!m$rQ)^hXRTOSqV>uBfX%8>owX6iH7^?KgOUf{kddNTUZg{ro}$S8XsHIq9gH; +@{Dx!1nDltT?~fVG+dXjpx_C!X}Ifi4}*4W+{L($LHnGSdMRBSI@KOvl+Lw3!6=<b7!&cQ|l;{S?qJ90 +3dk01UM#_fY9-06=WzJqc51l(wU>}&1Qa#KO`pJH>HY||w>iF>!X0@EHp{BM+_(S7EUonWrfE*ecYWh +Xztu+6pUa-IAF!#35XOLY?WZ8L2)(`O#-DAL44zlF_hqRlqMzm0L5X$v!b8{=W7aW~(^u+6juqy6yv5 +Vv}wfxW+pVVh|SFU&VEZc}Xq>64GPB5An`^Z50+cbjVqt_%*I)fT#ili)*)+gw|25=_2>;V4y?)8t<; +98uGq`{aKyY%^`cqbl}oWrl8RxDPt`$PoQyjJ8Yl(O+WNX4-aB;1Ldol^ePZQ{XiW+eF(g(F2?rR&wa +JOZ4z{4BI^0F3$tJ2dwab`Eu|>j79`<*&qBHhNCoH_6J}YXe&UBg6#3Ovl_%Gm;J$yFl@=HThHaYggLv?B4BI5($Lip}Fl>|5F89Mf$FQZYhTOl0;poQ%vcyYbb&G*t@Iyp}l +`aMpz$3hAt$H!=>vM=RJQ6VQn?3mm!!}F!0h{10Yc)(A9Cw_sR>ZX6uT$Y=jZ_T$$REaGJCI-%;Vh1X +4E!!1BHyf-F$S*FUtrj#Xxw!g!)<1)qA{Rz4*v$jRx`Uk(6BR+ssUMZ_$>_EaRg;Q{%Z`|aWruC-okL +0BmC^4>1QH!6F`oCi(#8%;94KXVVfgp|HH3i*yae*ck*Wtj+_%v;uB2WN}W2K^_v)t#134iZ(!KU9r! +K5FSL56?lMG6(nPKaJRyw#0mD&>Kv%qak?etIk;zXmY*k#^)-+c6z|ZRhZfO%qADB#UW7JMlc%T`77s +EC|c;=dXAH#MK;Spy1Jq+7<3YYHhF>1LA)8ieCh6%#Y@Hp<+=C=uBg@a<{4+w(s4=@_$2S0m<@Y`V`d +juYH4sigj^Z}7D{vk%A{9yj$1dD_ZoZPz@wduL&;kPjwrUyUy;~!zv-i2_dd@Gm#yC30 +F|~3BeqIm%4x*7s0uQ%`Z(!ICA3Ot2UdM2h9?YV@!f+&C-50)((J(#GOXHtmG)xZ$WDG%@c&MJ>g_~L?Ft`2#!dB$KO^gnBWDM6KzxOa|^Mh;u5k{l*po?E%m^vquf5tG?=a0g(dvz +nrP`-5e%-M^zleMe8{>|O)v-d|`>q=kkjxG&$y1P$W!+O6v+U|F5cTXODrPtpXyt04H_HlGt29*!Ehsq=|Ao%=8#~>XZrE+$q{lVUFe{|>Wm&dP-zdHWf_|5S*$8U|_9=|h +wcl_h=`{NJBAC5noe0}o9U1U{&y_3LZALHU$s&9aX +`jDtOeYg2$0%FL;1k^5VS~YN%<&L*W4wQPY|Sdd4kOQPZM_!2vQY#4$wDCYIE|%B>9X!w`<&y9KirHxaB+eXf$Y}{A&Kz&bX%QsO9Pi9&8 +6?ge$75Ou!OYt@9@A0?X5Pl}nASot^EQr0R19fi=4~90Xvgp-X5Pl}nASru^EQr0^mj8_n0Xt=BT*6w +58!yvnutAsdu5@nI_0FFnZFcKcX@kmrg!UH%SiP}hb0LLRy9SIM_PZ+d55*~;jF>+N%NEKu +D6%sVW6BUxU02ftApbt@nB(C}8sgT6Ay+nm1F5=~@ki@mXUs54~*_lxxi7O4WuaLwgg+zrUuDm5GByn +vlPlY6|_T{ON#8tgSg(NQD<*ATNW?vzJXr2lQ@TaPftb2t7ern6BkN}|aR7fD2t3m?#B`YMrk6aZJ*e +2VfLINEpDpzR?BViB6Y!AoGC#-19t~T=V%EYybiPCjbBdaA|NaUv_0~WN&gWV`yP=WMycaX<=?{Z)9a`E^vA6U2B^hM|u6OUooI0vI(-cdv<1alqiWT8&J@NNH~PVVY8CP@`lx}vOBV ++D9W=o0wmjDFe?ED%>8OE=4!6ydBpSN^9(;hza(96_j&8Bt}Z;qRL@PdU%;nZJ^l9O%$alQt=j*#hcE +AJKYVt5^Wom+(~V14`%i6c?%Uru_>O~(b6e-vH!mD&T<$-4a77{e_C2}1b+K`2{nA6LPxm&@Z*4zx?y +0ry^S%BgXjf4H}CHT(a`p~mBz8~CrKLyeQY3v0CBzSEDNIdkmD$<^aWPQH8f#HmLgJKi|lxVEp6{WUv> +8rK?){fz^IPaPlx=+ZkaczO9yBPrldi@lo~ep&3@*6?QpoM?DYz$+TQt>Kn9$Q=QTgM3yTB-QZeG~8a +&@aM&Oi(|hc4${@|7sTG;1ivWY>`c-E{*r*jrFvDsEe(HJe58QCBK8*Ld{yi%%K4hOCSvce3s~HpZwO +d?LM_h05k>3??s-LRY1e|F2`=Uzm4E{iTq_{gj6nl%0{E@hV8hu@(skmo9)^ +M_<;hzY&tKpvtxT)cviDT=t{<%QK@<$C@#KcQ?Ym*^ITmr_Afpj +C_AU`O;L(U1dzXkC@L0qRcr@b1M~+6^*t|G*mz$M}aTq173CE^BLB5uGX;>HP%McjZ#B5s +gOiMVl$5^)1A5jWrxapMzB;s#-sh#SW!5jS9yxN+7c;>OM;;s$IIH;z#vZtQFlH&BzfQA&xpvGXXz4c +;+{8|Y}njlE064R|!-23#U;z+(|N&bvh1VCWKYWA74iWA74i12&0Uk?u8%bDR2`ay;V3-eW25I*B`o; +`Sr%DJbqbiQA#L{fHaz=JQf@6m`GdzXkCMUF+>4#izf+=^YVS>*aB6t}}F!4oxa#61PY?MK`TrnrMxB@W^SJdWaa5Vu2dR}(k +T8CBdU(Ijr5QE>;fN*u)Puu2??+hLU?Ox%J+gIOgG;&xaic+y7mxTm1FagYgGB@V@1Cvp3E+(E388Wl +IVXEfq=c-#)+20RjR<3vXCxFd1%E%a90Qy^}f$>gjO#h2GCy7X7vF`OJ%apNE*;s!jLRf0EaG~%AuaM +FvovGZ8O?G;Wsh&x0$i9?6CN~(z)r%@tq>}(P@7-kf!#6jGEOT>*M*FoG4s|4g)M>q+19L3$zR*B$6f +5klotHh7E{j3te6I9%Qqg7H=S+7;%@VIe|(LC$6ILj-`N+_Phq)EQ0&u}ZLa9af2hxa+h^aO@c!$L&Yl)uT#q)>9r;f&-6al>`{a?I3Q4RpK{}+s`TiJgZ +iT;a@btq;>^+uM;s__F;Bn8XRpRGyJFF6i;s$IIH?H3}iW_JRRtezXRtXqp48 +;w2-V}Eb;&v$RYT|Bck6Un8-Q&0c&#cECgt&19=WQJKViC9Bs1np(!>E#pTP0o%IMv}~fKeqOIwu{(9 +VDEr(<%Wx)~J$d;#Mqm%_b>t;&v!*hgIT7+zzY6p}75sJBU?+V~=H(1X0{|dfa|iiG#Ry$4+!GHc9Uiw2aZg%t-`B+L2q&vO?xr3NDA_2K$6cr5o*m+@)8h_8+TnY1LXRp5(mCl++z#T_qe>+0)U3E29(NF{1m`^#abxe9ZNRCMxPyd~K@|7Q5Vx +0A5@N2B5X2q8;|@UFUWyw8xFCuf3_Vuoq=UHiBvX=KYMvbs;8|_J0Xo{K5{ +Jh8xiF=X@Da;CSn4D#6|pRNO&`d*&6l!{e@zxE)rBgSfH +xA`mywF%&n@NwvJsD{(u*N$g$6LJB&Z6fa~XZZG0?C~oXM)?6hH;+{e{S*PN5gp-q3+<+H>xC4ZfI7I +N_fPSM&W}dkH6t{!8{SQLNMAa2JvZorYa8#@K!%6wP&#}in^T +PpySS59O+%r$yA*>PyaXUtpgdlE*Rf1!TGaq*~aXW?sM&dSz+o8At&nj_i-WCsb-HW_Ccsq#Tp2DD#I +(ge6xB*9}q}bbcG$3YAD)Bbp5^n=8@iyR*=9mIp;%&eqEr0{K#M^*P-UeFYZNQ_fqu>|~h@D57jvMGm +PKjdy9C$D#-p1Y~-UeLaZNMeo23+E8z!RLR1Rq)AZNMgPr#hPykMKMbx1UoIL~sL+#9dtPSt4%7EIVcO>owC +vJ!0c6i(l#T~*bsh*B|wiS1E$NQ`(ZimP1AZ~|M;>afJRNP)xiSC;ek6GmH$lHs;+w+-CI;NPKbT&C@ +r^GQ+$%18*L3n$aiCa8Sk+>sqFA8z{32w(=zz`Pq#Is4SQQTgGN_^UHs+|&W*I0rZyf~Iqf`d$djdzD +r0=PunI-3+vP9*L~+zU?JlULlc;*_Aa2K)631Xb2XXsFlR +=2vPjKS|OJhoO`;EBkk+>sqFA8z{4F+^5Zm)j#$vY)pg8_Xk?f_27%#7mpYrkcI52^=WW048;4WkH5Sm}lq}9z!0LHQs(IVb;dTgazqZLb1$U6KfL=~Xq6Y(t8ySf^5_cqSz;36+ +OK>~dCg-vHrkc2YoRT_;+pldh$OKb<(WJxT_KGH3%-iCQMc$6Q9eEq@ybdV|Fc#3k+qF5|L3rCQnsf+ +mN4qNqv#O;?%;uzyBTIL{b>^# +yE3bUO|`gFV3I86z7ao&uQ5M#J`dMSCiBX39EUU1&_o28^i!98)KB!J)^-{1~nl=unmAoBwH@wUS#aR +_d&Zg*a5QeN1(;BDxJ$lJv=iM(AKZ`auDK94<y8!oVbH5S?1L=StD^*j|I +e$!z*r_#wgwH;GJIz?n$Hz`*P*x_9=C(Iagecyo4eg*L6Nv4ao?ZB?U)x3haSf&afFj0tP-!mfB +{xes3z`es|0jZ!}L-P#qDR61espSp|~C4q=UEtk4D_weIw625_cr-`;)l+6t@>~I}~?)#69UzB|gL*W +K>BIt0aix_9N~fR*4QL#VJPOj>Ns-#EqRNr?_h*ZonpS106|mgNse##=c`HZt#vt+(1Y3xUu(G;UwTX +)+}=nx1((`gyL@L;eg^?B5_CJUKHX6IvQ~U9*4O7!pUml23iAg12%~ps7c&FM$*8mDCwd`VqHZ1 +CCbQV*g0oQE@K{ar?Erhgc@qLEK(eiDQ{yz>^|whgDMB+<*?n9b~mhzqv~4Y-V;I8vUo%`i=AJ=Np?_{YLM~`cA*GzS-z+udQ#cZ(eBhdsq7O@3V4_u5E9xuU+Upe7e`ayuC?q_L% +Kly?AzOqw&C{%bVx=m)H91TbmCShu!M!&~eZ9Hn!Bkwi?fDZJ(!qs9x{J!A6(9`I6?PXaf~O!$JEbtbstiCJiZOP+L19M?QGZ)k#xo|@Grxaz4{ZGy|5n)fupbx+N +D6I}SztT*WbFV(vSyi_l)ep;#*S3fP)dmfKosa{aMSy<=u&cqhA9#E5?ktHtAHWNh2=GCGvZ8kYlokCoKv~f{0m_OF0+ba!1W;D=FhHuPpjAA~%U +uEDNp39(5RY*y5g?x7Rw_Vdjivzc^wLy?0P*OyS^~s#+iD9C4{fU>Ks>Q6d5;bO6!+-B-+-~?J^EXK@ +*W)qDDTnV0hIUX?*Ynt^bY`)nYCP;=MjMFcgS+F=OX}>*|c1c)KP%S-(D`>g+~D@DX`qm!N)+h>X*=R +CkNjJQ2pp!Udh3C15`h%m%BOm9)RlSaI5%6J_b-pkyfEP{t=+62v`2S0JDlZ#kn5`rV7IKH~}y#s8iH +)5}2w7^n4265~?1s!21BIdRj&0{{&Fg(<&-I4Up<7DnA2|>M1IJKR{JayQutefa(sli^~5Qpem?cRQ> +^g>JGJwD*pwbs;FI5^g(>VsfyY~MgIy=K6C#DP(E`{JONZbbpH-eK6D=fD2ZVepd^O>0GO53Dar)DcU +485qD+u`H>;>!TzLLkT~ZZwibI}fG%E>Z@^|Wzx=DCK_#1U8E2&c)^#X(HF5ww@iqWhlT+wv~)osE7{ +*zI4pE|_@@nJ^QlUINn3}$7a)QhYxsI21I(V9b*RXjUe3}$7ui-TTbP(6E{V%Ps-G%E`SWeK9R1}@+Z +gQ}{P;)!G>M4jv_#l5=BsH&>?sHYiJkKamB)-x=QR9P#~QTYh +|52NxKyw0e62>+K+`StX~l@322w1{VMdD($Ul%N1nvH_DQInl(=x0e~s$^%uh{gNmtu?#nEkI}3=kR_ +Whi4qf_9QIxkr6$0PY`r8(PJry$c}bL>XqSzbLC9V9}!9pLG8?`>uWrA*Q#)O(w`M2VAh3H9D)<{^EugnIXwgGr(+q24{_P!cIisCSPaPSPn$sCSRwF +_J2H?(gmC^HKHU3A?wq%ebl+kJG(9ex8(QNfWM@c~9wCSM?@*f4|GP +syE^L`z^**y$RpnuQ0CaP5J(Qig8tM%J=vCjH`N6zQ5mQT-BR$z29M6)thp?cy3cNQc|w>n~bY^Q?B> +(jH`N6uJ?0{t9nze_hrUay(!oG8OBw;O|JJf##OyduJ?P4t9qM!fA#08dhzvsZ|_CMiJnmJ9k`b%nJM +_fyLaaXvJgZ%Xb-ab9fkrsSQJ9o{r|P70JS5m_hrv|EfSxq~x%o>4`@__P-oCHY;Td?}UOX_md+l>8Iy` +$zfxgdXHS~_mo|Irq@5Qb-uUpfO4{Tdi~YSwTr#O2l9V=AP-VU|JzvGyl{ +E#LUw@Dmv?s7*EYS6piX18zqPuxeZIH7dU5U2;Xh@Z|GDS4dQsJU7{@$**IUC{?$wC=hik>FK +z9t_t&59t!}GC;qcN!-A=omeYJZY?!&#_rPZ~abL;D?8@;}Y6%M~^ZDXhBdz`h6OHZwx?e!05Z`$Bfg +HI1$9(-o7H@H2xGx+S_bA!(hUKxC0@WsKG2CojjJow7stAno%zCQTI;G2VQ4Zc12&fvR)?+soXe1GtR +!4C&N8oWOE@!%(epALRD`1#-$gEt1h9Q%ngZza9K;@aEw6!`${8QvIvbojC1$A>qEw}#I +TUl_hP{KW8+!hqo+P_W;Oc_nZyvJ5krth3_)TD5<`#}g6xkWNDM(@2tr^CLGGgvgss +j2JCw9^E1b>&JOqkCw9&b%gM~yGokJrD(LU!c`)19i^f`Cgmv1ghpL3Tp12PEM=iFsqlq>@FIiF+SkK +_gWoV#p}lfr<{Ik?3z*_QYgXbA0*AlRzK+x_?tt1%1DvG-W+nRq)Fgz4%u8LRl;@^r&6R#QhpQG_%{Y=leBEdP;|oHCfhN +Tov^hzxXCa%l|`ZKm*nXQ47ES9&rSIWT(Z0T8c=`&lj|<$Q*Cl7@$^2+FqxD^op(8*>X6NahxZ1Qksu5OnxltnUJ4{-T76a5CvlJE+_BmWgu3vO$msVY^QQ0KRewdcgo2&1t3q#Qw(|g_oNQA7Qckw>{G*&~Q~qHk+mwHllkGhIC@0$#f0UE$RQ9RA$zZo4*{ +1NrN|uzMv63YvXRKsNi5WXtQd-7NmPpE2$r1?}D_J5LVT-L6w|Gs8xh>{K(rqW*D#KYR5zB?5yu)r5A}wNdz9=zbo8A<4z(f*>3Eel#)~Be0hv1v7BYFtF**c84?=#l+q$A});Z+496k^N@Jh}8h3B#YhCMw*4 +Y07~5=+yzkT7U3>{Qn!fi0x-KpbQgfxEy7&@rEU@K0x-Kp?Di$4WGZqCO6mAInw=utF;MCh;f{e)rwE +?@a;L~LcSx9>B6!`(og#P)%AF$k>7d7fD{*5v*GpAhhLnTYel|_4V94ie_0>_TF$S|=3m8$mFydT8Mbd!k@bG}w(GY|E^TKS>b1)^c^E)d}^dv}4 +fS~JrH;xfr&7fAKr>_r{#J#}nl^>mCn8Zqi<#Hb@i9Wm;NQOEumb;PJ6MjZsksN;T&I)u4pWF5kPG&? +}p7BSNfVa}N?AljTWTR`^obXGW?k8_4Ve(N +ln!Z6JCI5VH?N_{C-;i1v%kMiA{6n~fkZ>gl$OMvyxiHyS~1>Xrw`2aH~jyF8_p(F>vn@*BM%f6#MM$zBlcf|{)$!reA{LG=7Il!@4xUfv7B +-Y(y&ycxvuc8hKh_I5egpmq>F`wb^`c|QnyyX>{+4I%99@~f41gs`{Ew>)nN;j6&6JnsqNtH9Y=-W0- +DfnU+QCxq)|k3Vk;;d(hI%ez9jUQWa)D$!mxKeBmW2-nL`NZuG?^~L0kAzZGWG>bYzxLh4+P-}=axlz +#@!sY4|g{*Zhm*Xw7J%lG!GTTG+q)KLgh_>|21`$1pk=Y@lCp|J-M6`8p_K4{IAW}e9z}Rh8#Dk=OtR +RpikQMoLE5p66o_Srzc-^WAi6|$rhwf8OVhtu&I>;J%pGPDG$|LWU4zfqyDXSp)zS*~nXq8*s#JTW0vQ>1uz`6APjAPDiqgj6k=;pxf5NOT~>(~~Tb>_CL4JBvtoAi>j9Nl}V{0IxKy73X() +hA|2;kl*RvEXptt-|0>+iZD36yQL!rO5^b0aL*Pc7~G(wdo(DEyo-6TD2KyK%CQ}V7i?0q`A*pdyVQCLE6U*Td~%l;B^PWHo4p=v;d9>>PtT0KxJoAcD^0p1};|`CnZsee!cg#oZR;Thet6pUyt?K@ysH37AB+h~rXTh5FS+Lk +Xqv=<#SKG>7LC1-;b4RakuWxLupZoJ>uL?8?mYsXNrDHzU>4u#FtBwhrq3E~7Cd+rXO3=nTm=u;?;cL$VD`-XMEJvJ +K0;K{khE8(O?Uc86pe+Pp!whh!T%yg~MdWE)m^gKQAVHgtJ|>=4N|tnmifB9d)j?Q8UiWE=P`HJU`S4 +g8`ST_V{Aep!t+k!%Cs52H`yi7Q>cA4a1{wt?@5(J7K`;QL{;iewx3ei*$X*#^EJMzct^f$xXWEs|~E +`(d<;WE=Q?82uvI2EHFg!$`J)??u2&c9Xs~AbY&L(m|G?PZ^43=#vn#n>CUuLtiN&+t4TH +r2yH`cXx(V^mVi=4E=ls^#Wx>KdGAWj1m*e&`&F;0aH@QGW1Ca6(Ae>6qQ(peq1meSxMasrpsxwlDAw +jeW?31D9S^a%?YBhV!BvJosvAnyqrTCE2a;P&Jev~x}IfAu9(hQvAJS8=g{VY=^Qwl3#RK>)mSfG=cl +7gl%NNMXmC8Y-0y`Z58Z`~Qqc9Qwo{hRv#_LKSEY?JW)7d<@t~%IFo_a +V>E~+12Pv)1WJIU_WmbyaweDKNX{&+sVpQyh@=Yvb*my_Lx>i@&@!3&dJ`?uEl;7W3PWZG@rc<#dU!% +G*gJUhI6_339W1>3=+tw884Mn^L;W*x*9$p-NdB**E75q5&U0BdwRS6l}sBA>lG^z+{YC-6_ny`rQ48R@=F@Sl@zDE#KbwaGLV0954+!JY)|Bw*=wBmO?ParhK +#7MC)d3-%9+~}vlt^BA()>qLxg~xw4|JMy#E;vUBYw1BB!0j-;s;)k_<`q$A9z9H2c9E-;7cZcw9gSg ++7~2#%%>mX2c9E-be|)B;5p(4UXb{KFA_iC9PuNpMdHWkbHtBsa>NfjNBrnMNBn4?BYxmH;>UP$#1Fg +}@uT}3@dGbM{OBe}{J?X>kJ-r)Kl;xRKcdYMKkyv!vC-^a( +9Pgw1g1qla@Pi>sIz4D#(CNW-bG#3xEhPBSI>-CKJqi9^M*Nh5d5a&nB}e?YEyai*t8GIBzm)hf%>{{ +HXz_Ez&pAElrljDPTKtUQM>pjxeyP)g?n?@O&f;gB9x3r7Tt61Sl=!7ik1N3syrk0uyrAHh5kKJN62I +nJOZ?=@CvbWg;s?CpP7g=?oW&2kpwk1q81Vzn5kDR}PsES@mrDHTrKI9_Mf|{vIX!?25z1@n4-<8#ae +u^o6L|YS!pG)eg8}Ylb_Fe83KosHr*{j3o23l%>eqJn$7H6wn&IpPOiPVr-Qa>S4J_1@d%h~Kl~ +mnQXa*_@o>=ZIgrw_6eM11@Iucuwlk9BGN4QY5eVg&w~v;^)%%IpW7^+YsUxDt^GLna#;rJu6Q9Od3C +$m$Z6>ieF0nuB;y51+5<69zRF?TpB;x*LicdOR{<>74nWMSrr_|l_LHX-`uT;`0=dxA%3aVBP4!T2X}!t#P5LkJ$w9`!z}UBo*Km;Y$WkFioa3(=3brP09Ql&E{Wgs! +QC#Y(MEowA%4@(`VzmiVuLHM{KsL;PUQ)g=B^QT&+ZQp8`kJbqz~ +HYxFQCwCd*ca_ys)#mPsoZPLK;*UsiPC`BIsxo6$d8*31>WUw6m8{hxEZM;2@k`S=fqPQ?!dg98ZOg6 +IBPD)eRc2QnzpzFd@RC)TG5msg{L+#QuBtLiYxMxn5kK%kdHfX>=M2f_E}@tc)an6VOz}&rGH)93bG3 +SKTk27j**EcHoJ+0M4jaY +g)`)x!}#XY~k)pHuw4vwEuW_@!14cYw>c)x!|KE5+~V0GF#GZPM?spr6&WdW7ZpJ$w8iA$~#`Cpfvwl +x5~>^)$pEoTxgdl=yL5{FG&uDt>8MW`_7V#m`thoZ?3}1&N=tdeDEtvdo@KHhBI37f1Y@)r0mW6~DAr +kMEPa9PzuU)#F?7lasrI8r)^|R8^#HRfwNc{J@)9J>?a@)Z+)f5m`N)$ImH#S6^NPUQqF){YGT`0bUd0_bvEcCG~K`&j^0b>E +X)pyCQzh;ujLXutuA!yfxLoX;KgH<$i$65%F_h+?DR_au&bm4{)KIV#JT;CHHn+IXxIp$uxeB_@x%V +l=z|H>s*z&O|m)3v%C7=VObT$Uy;QxCH|UO{2cK!Ru6h9N&K!Xe&OD()Z*ueA9y_~HgJ2pXkRd?XGJW +2#_9pVFIVyFhtv{3c}AOx4W^&0$;DaT}Q+ZykIsbm(;^4evbG##lIrN&saSb5r3O}fQv +qh@@!7V>S?k$4~ZY~mb7{};^z+Tq8~qBUi5u_%Z=jatR6I9^1)qB@e8dU&mKQV{I1S#ahtoG)#K{?me +lHzrtvc#KbjXKe&03PNE$zR=IW>Txy{{GA%3ai_k4Z}a7`3H9_m^sevbHEDgJt$-;yeR45wr{e$MKVd +i?yjlT<4Eyy#E9 +}G^t0L#?S5TO0zkEm(1n_GnY!^uPCWUKP{H{$-{C?8b4?8GsN$zHYeH_6#Qsk6XNFtf6a)WOXHVjbGj +1zLgHrxzx3QLuDay&TaL0h9i89eh+mq`$yxlaD)n&0&pAD=()it+-{OehcTwhy_sK)y?)a8(-uEr|G5 +(UgkA6z>KKdzW^f0_HJ-3VQ3m)I%viKdH+r@CoZS6`OevbFiKF9mOmwRrPE5=`u;OBCBTnT>e+%E8vy +f59_WwQ8%=XO2wevjnzkkwzmt=&y?_&MU|9DYvl*UaGuzSQGefS2s>bHrbf!w=j~GN*5cANWQ%{J=dq +J!ET_tny!ZS8W3Uz*Iht~ouvogRkxxh#I)7QdAEg#{a!(wx$*UC!x|p4)Zg^l*wF-S|=bT)_t +4iob47k5uuapITSyAyyAr%_p#Wgv8(M?H*73o(nce_jY|-{G8RpD1OfBVTiw~f(=sQ7gp-2$l{k~@k< +pyNBo@PmzHSbh+kT;f!o_<6u*%8J@4&y2=S9uyZT>YLH{)&eyP>tIg5YA3pM~=ZcS!sQV(bKcrMt$Sv +^b^zpK4n&g$W6b4slqX))AaWEGyEHYY>;TpItT6>Q)XzqA@Zm(_#*muvO- +CVq^knAO9i@k^~9&f|Aguz@3fVOEc4tH)I}e&1O=oX5`*KWFuD#P3M)3rnNueIHs{9 +|{YLa@67yKJ`e9KW9zoWffSLb#)-glJ7?^*D3Nj=izTO9981wZHXaC^JHk8cUj?V_7n6zb9I=h4ySv% +VI8-H0Ffa%(aJuDQj}2!6nR()c;zNBh+*)C0Up5!Cg-AyGrBd4(@Wq@8;mHbZ=Lx_@%@ztklD0b8-iFIj3h$iQiQ=r&RH;H1X^8@aX7rIDy44OydXc +$?8G>C5c~})Pw65OzM#mKd1PG=eJy0JyOLlC4NTn3#}ekieFl>K}!6M;$LIMFSPi56Mx40zv@{D)pfMT3h_w)~=NI(SEstpF6j^ro3O3;1?d>s+ZtzlPrF6e~( +G#fA1Oe2XD|G;aidorr&>ot}v7?UMWGKdHx+;^&CJZi +>Guiyycj#n08|go-KY(@dGben^Q>qoZ@eY|3pbW+__!9P7jyVhY}jJ7jN{+!uGpw>ZU* +<~6r^d=o!s^`L!|&G`|;FSL39Z}w*w*Od4{ZOz_papKoE;L*|fuU{Jfx+?yPh+mq`Su^726#se>zx4c +8L;MZ#A71sC&0UhlPv+TwR*!GRUzNuXB42V=kMQ6wNBmN&N9yrA+T0aZ>hZm~>#8;MjveoRhHs__dIKj4P=CB!e?+}$X}A7**{bl +#33e&FTOIk~JJ;03dK(0|RX9*+1cI=Cy%>fwl=Q~a*-_|d)=CE9$S-(s?Q8mng=tRBGiNaxIoGSm5Sm +(}B{V#B(6{G8(Fh#&0>5`HgE^HTvd2w@k@zcX!QVIvf} +56UugAk9zUA<`TiE?@k@!H%j#ju@i)ZZ5dYy--4TB`JHSQ9U%xzl;A^J%fj0-Z94LN<`0J+lfj3z_4e +?i`__G6Cbe!%yerZ;ZE8@p6Yfk*!0WQz!oYKwRnh`&@x$D{LakaV2DSn3do6X%yKeg^CkH22TpB3k%< +8jCP-1#k6Nj<)uo~nv-a=h>8{FZcYS9*Sn%jT4x-(q-QSe4m#jW#Lo3rqD#vpI#IVL|r=KfG8s-fyZh +pMdv?-X|Asc;EC>L%lEMeWBj3>fA1u(<9`4M>#!Ghu>9B599EA&f;Hn-gi}^ZKH}Zw@DU1y@H(hg*iP +4_(>K&`HhD7O+O9sn_)J@A2h_DcHa=c`BNS7gUAaKKQ=&eTe~EglT +b`U{HC9V_{}gI;tv|)PrGl3-~3q}#gBe6;(ujp>y&z`)s((4*-2g+Pm-PB)}7I8bZef>_JjGI(LC50? +*xEwyD+i9|I`n{R#PIYI~;8WAtj`>A>>w_~vZ2qF|)5YmzK2zOfL(}8FX#W;m9_{Vv0o@qg+)Ww-@1d3U? +OaP6~Gy;cg1|7U5nB_ZQ)Q3J(_HK?=tdp4(tdkew8rSTq;oO^fG(yk+q=?PX@sT#$*yb5Xuz@x?GhO! +#7)p`Gz?G0@OXc^EI^cFv>48yeb4j~1g1?W{+O(S~-~qs4m~+If!_;|=Y^M~m@>vBh)ojx3&w*Uo;Fi +`UM6l#6%AF1=j5cK+MBcd;c>=N*l1$zYiH4F9$`0ExN5b!rF7-!&Pryon7 +ofc{NxP72P0zP3u8qvosNF(}93(|<5v>=V>j0I^#XDvu0I%h!>QOd%0F?V7D+LhdG5zsDUQ(e-6b`5t +U0)jQ#1hlKyoOraLUAo;a0qwdq?+OdrMceHY(5~1ny+`LQNbb?;-?EHF@6m5tklv$h3(|Y^I~Jt(=yx +qh@6qpBQ17=5(s5p}p#Eo1t9J-KWkJ0^+3FvH7cHo_(^~19?`aF_m*gP5&@+~7wI?=6Iqnk{)cZk$^i +g`&f_kg3mA+-4v!IG7PJjD(i|L)qK|0Lex1b3q9p)cc&;&F%1TR_81QZ{Fmo2CR3e$kDSWpKPrX#v)U +lS&vw9ijk&;*qB`G*$N0mW&b*DR<4vJJ0WOa&CDvvI>>I-W4SK`&TP#}lSA{6`kl@xWCr*F;Pwo3n$784X&n!rn+@D*JF1Z(9v?yJ3e_=to=Kj)xloy5;q`dG~7E~ei(ji%Tk5xqdG$2d +uu?nc4{w`jsEgevp{`L+~6;VG0@kVXwI~1lfkN0Uy?>>g<`nnBNuew$`fIC1{OoMdp#{hLqb|wEcP<@ +}mbcMbQRE1^N$Sy#AqgrWTccCs+VEuIAWs*b1WuN0IKowV<2CxTE-zXcv-vHHXFC8irh?W}tbdl}@R8 +iRn89K;hFSJth9#BIM>AcCNbiw_2nTSiY<3Q<3R-ZFy1(un#21eZ}1_8C_{XyXSu)DRaRbnpYs9s}TA;5uHr +=G6~+_<;^NglHM`@dF*TUF7Nq1N=Y-ZkMV0L5v^hz{Bj~BmBSwp3MkkuTdOPHY0dMO+EnW3Qws~9#J+ +`cv6k}h_b1|?Jx=?!c@h$9Y%#jn35Q`Lo1OOqm6Mlv=|v+refR-tw#pg1#mBnB#E+Lz|AnSB*N6jxEV +&8M3~wbH^a!22=fu+W*CVQWrM}dFfyf$sf}?nj8ti324ma|BUjp(!5BBgNS1aMAZ~_{E$wUuvww)_$l +F=u*}p_|&)#8wSsBGa`-f09df&G@y`I)5qB*7S->XVfyMs`xC*zAi+&EUzR4E-J +Ww5J&%$2-tm5n<4anLDp_VjljO10oI?5v%(V>ww_UZW5hpz!wadr^q>ws05U5xMzz$(lxT7Ma^in4>g +-vq3pwA_^$sG$})UChZ_fK`~CBcC=3wa|%hf8GYHpIuz?Yk*al9ZbqQfc3i+@VkIjlpRF*9^mdrBu9r +v^&s~50UL(4@CSf(-aE$kb-*gf9`2+>mYH-ZvxgL)uP`5ss#fU)wcoDEYI +%%RWbICB*ukW2!*)dcLAFx6PNsV;955vITsmeMbtS`>^#zvsDlCi0I*)LxHmrpte?vxsdAB)MSXPgpM +X`An7J#lKm-AonnnE{tU1tTwL+zfc0tx{0qQ(wH`59B +V)*5UH%fVJ_3bde+XC~=*6u(0Ic6G7~uZ`))bpwGh@=ocrl&u2&`W$=^du9jxv3+DXi~g_N@M&y{5@0 +K5~9DGOEe02Uxw4mQ9@_Nqv#gO?G9%=#8{$vhSG8=Z%bJ!V`61**nsbse8o!jm)PA?2N>57qI@P7;gQ0fK`|SL}}?eGI9uHfABtVvuH8I4} +hD0W*%Akhi=W0rBD4D3KOYs;8(U5&FjlopMK_2upL|9*OJuNk}CZl`>Q+P)R-|@065NvQ0@erN)%B`1 +`0P%=SD0`>Y=?|SuKS1)n(!d5S5^&VF5T=jlc?^5;NRPRXjK2$G1^`cWRHT42hFDvzCQg0#k#!+t<^( +Iko4fTdlZv(~riij2IDuPvHs)$pOq~b%xeTwH4sVN3iY^9h +N!=c!Jc4cm4Z*nhVXkl_> +WppoWVQy!1b#iNIb7*aEWMynFaCz;W`YbMoB>{l}BO#)P6FZJKBkdp!TJ3C +RXJzCKIf?Udp3ce3d6)w+c8p&k;0HK{B@@&0H!x-(4wW +zMwDk8TZj?xz1=pJ`p)-JyS}Gp*-`HwM}JHm+Q~^xU(TpV>P9`14P1UAXwXF50(&gwAMRc=>o^#&Y=jfBpaf|3vMYL@=`YGoK9gaTjd|I2M&p1aY&iC0O+EE<+bP?6 +Xai4RJTb$W>=X{GJTyWl79N~Eb$r3w9h!>P@LIsIOk +A|*=L>O7P)=S8M8C3`7p)jb;}t9KERIi*5a_Yol)fAuJhJnBFD}d6hpgLM2oy8MX<-g{UX@s;MDo3;sg$y5h!N-j ++0h#r+(3i7UTW0bKGLe?>Z?I$NiFXeHB;I(R~b#)9I0fr64u=2&Qf*4i^!%Bc*g)pod#IQmbRtUoiV%P-2u!0!YHDH(s>V; +tnSHm!UWOEqS7{e5v$M7a&*nw#CYFJ00hP430+8e_0dDUl!yD_;!zs^L(kL=9?~;J0d~1o5_#8 +m2c_Q^Od;hB54bF(igH#IR}D})u_=MQVGS{?A%-QUgsF~U1u?8 +4hBd^nMi^EQ!`fF38($17h+*grhcP80SfbPZYFK7Un1C3jV|%G#Y)Tjrh7H89rQP8o>`ZaVRZ_zk!~U +j(38aRN0K?dnFaiuqykW@_9mcR(z8c0DhNeWL-Y~{6^oB8pp&G^*#%frHP{aP-u!b1Mri92FE-@vDiP +h9F9b^H+bdUy32@!^gx7C*D+Js>TYf?2VF(ojDu^Pr0*4}CuW7vO*PJ&@L`P(;gkiEOd@$VRx?u-k>%K(iuZ9)Gu=2*R5@1+C46860zR#BE1eFpP +!&nVNQv#}C0fw6`SgQlW1V1kf%hYh>1#6a7hl{8>Y2V1t_hgCgc+5Ch$s1M>!vb&E8^d^sPJm&oh84n +an7UzTN?;7DMlq};7$(ZC^%7kPh84yzh37G>*&BAC6cWS9iecD9fMK(I3}ZE%2r!%=3~Pwt1Y$UW7)} +s|6Nq74H=KB4SW+ngO^F0yI6)Xr1Q<@dF^nrE>R6(S2g4+(mt8l!$pvdJegb0H2r#T6hOsvsgBms~ri +KOW8(0lXFboUU0;%CZ-Y~?lq*9`~H!N793#En|FIWp%DN$ldP}rw#SXL>4F>KhBa6luil#pOpHL8X+# +IU4pI0iM03)UJ{!+43#_^RPRdrDvoV>Jx-l)&DwcinJxHLMVZ4a9J$CA!G#hLbwfa2=*ZEozue2?r_7 +S4!X|x=?D^e~AuPN=PsqL&2Ir4M$KZA!y%F0t`bntgB-Wx2>xR8e30$xy=%R~24MPlj*A1_M8m_^VAj(DCz7cSVPNaqt?xJ&U{a7#@N)2NSV^hMvZ +a5T%{Y{D0@`jtlF!qKahQrhiLk#0eiHP?bE-@u)QNyw&x`6E)B};T7HEi$l!^N9?ecCs0rG&(kh@pKW +g1TYLb=DN%yq5;ZLHhGlibC2E ++L=$sq3ylxm5tofS~l8r9?F)Z*z*=VH%_J(~;i3Zg$#_-zgH%#xYriNu04ycApFf7~X +lDp`f+wMdS=jVH0s$qjLjO&JR!J0q~2f{FJX2uv6s9}vT>|H6L5r%bj3^(fyua_FGV~MV$eM6*%d4e`{DkVebvrFogqcu$Djy3pQAT)-W!Vz-7Y;qOk7%k4aBg-8kVSGjA5*XHN>#LHH^!K4 +aBg-8cwQXSVIhBPXb%RaGy&JF{~kmalM+Uj$!Ocgi*uT8ir-VzG_%Q3}a6MmknbzEZJ_j7ByUA4a+=< +5;a`X%S>UP-$0V7VRDQYJP9t8aPN<`+2_(g3^!Y^CQ-u}!=cnLHYL2(FfJPws9}s@fhmElVQfmk?hS7 +>j7^E^7#65uY)XVu!vQh8qSkONYM3bO+zF<*kZa%A2V29qdBdN=SPV;=H$qv%lB(fQ*08rHabgYMch+ +z;6qb1s(OAPJ3v}#BxEFmS)^I2cubMR+Z7Z{+PC_7taVxWi7>3rch8PxDqZ*RaAIthlu6iQ%I0%EwjDIu|ju^N`F&_%9>qrq?;rUbXp +xtFZa8jhF3xLhsN0v)cC@E5}pPr|=ySU}-Gm+Is!@TF +ab9Jtd7>=Q8*uQzB**Xbb9mCj@@UD~awuU7wbiTV>hVdiFYPh;JEWxl6VA#KTV+qzU3E2>Z5~AjfI(q2X8FsF?kQBz{YR +ytutr&$PC>mCf!rtX-xOYQRuI5c)=t*cuVeL!dAiW#7h0ecD;(lnME9u>6UJSD}>|9(SdpA}M!_D??_ +={l)h6Po_CmTxCQ8m1D3`-X1BF8X=8?=VQiD7nzoy#ch4mvHM@TzstVG2iEG~8$h9kwJOg|Ran=>lDK +XV`y%4vS&z3`b7kXvAyiC36-n%YoI0jNl@75hd1zk5{9=LcCL++1-k +rvBl$JZXffPq?}m4s1okAtU|2y6Lr(&#VT~}X17R31&_!M+A;WNq8jht-f;;G(t00yi1NEn{zb6sH0v ++}wbRY_QSF2$P3p@!-;g#|v1Qc$vXjnpFytx{t@Dj=-mQXZ|DO^X&`69j5ToTQ~eEj9WLBpoMFpaPwsnczv!<6n5rzeH;n@2D*5)a0C?gu9A>+Zg^ApzS6>pfWp`q +mT2KsbtIxGR^u`WXBwryek8%Lf3cdROafzAd5dAZK8G>v-$2)Fv6?{`ZnRiU(#I?)Ruf=Yt*IC`5W@; +$SW+gjs+;H{+`6i`kc5-!dnevPeMTqD}-SMG3>p?rJ!aQV;J@^!!n5o_Eu +AItKnKa2?{T}TCL3sbk5YQJBB4{SVfEBPz!Vr!`d6es=6AMU>KH3U<|A37{+Q?Aq;B)h84oFLKuc+5( +;7%?=-Bu)vyG^tEz_UD3hS57lwI-&Y6Ue7}kwq*x!^mQNykBMrKK!1l&#nH!^#xVTm{Fi(yH%8pLpQH +H@p(lmNpLH5|D&91Vu+sFSecefW{#j-*f`6oyyLlnAw-1onmlm8*I0H0-@ZC)ivq&=Ots&DEe9j(1m| +C17~1mgo$7!_L5#Z#8TnhH(p>ff&Y1bhv8RKnxp*VMz;}L=8)p=nTZLq=imH4C5s_12Jp_7&g^0j7|!=zZf)G!^pxu0aF!n8^)bRFK-#~s2Gb2v +ZWsLkOBTnQzR!wPXYkSn1ehZW?o^5n1*$YJP8D8ylfIIJLt@xDI(u7rwP4%gyJPtW-XdNx{$tvsC2j%4)YFcZuZUl5_pTXP`-o?q=&ID5lRnZUqZrRfiHnuIIu4v*kVmmv?kEQ-oAu +}9M*`#VT#rSdbn9%q7Dv|IBk%_GCf?vVeAjfe2Eecb3?P6W-R`2sC^}x<*;g$!)o~)#=e9%hgE|d#(G +%b4-0&W>Ks;U!r>+8VG1|b!%?zMM|fUnrQ>xvH=mQALCViJlCm|)&Juz2u!0n4jQ)9ESD7*dO+9u&ki)osxP-$5#SlNiA=_J`WSy>r!=n1(5)Mm{_e9*)MBAjU7fovx +0q=7j6k+|MlMu%w?Zlpe+$meddXw>3-p>2SS-q;5^ZVgG(Q<;&qf^%CB`gy6T31bSFO4hz=lG~%$pmk +6bYF^5HZm@pSY56d_#)59h85=7ie92V)}P41&qw5=y{f13B#POJF_RtS=$pu!bD=t +{;~4)8Va$1=~wtUqVnn4EgSN~4{=}&Ylz{+@yf==gXyK54 +#3sj?cs}~-QjlY`pv;)aD6(Q?6;;j2h-N}XuGvLp0!H1a-RskX!E`jF|L#@-Te)f+ +v`E%pl=_EZ&accIw&(XhH7Y2KK_JpnsuI&sT+JE@W#ul@rcx>!7(QY4)%;#TLDjzaEAJ%!;%!f@LPUgc&9^RY}Z|33le7K#5JM-aA9`4SEyLq@bAM +WMhz8j{yRnH|!xX=qZ5=!+#k_1ydmnAVnFC$wIy~{>ehVH2#U3Z;OI% +vY()!o9P1-bkls0f^LpKM?p8ipQoUk-7iqkN$r7C59Ifbo7Y2hL%B&kOhGrJPg2m$=ocyIX7mUJ-Hc9 +C(9P&k3c49RMnN|tx|lcJ$)YQ{?Pf%maof#^uHm+u5mUp>h_2qYn-N{QZ8syjZrg4~bkVlmjOdDOyBV +FKpqtSz5wYBiewl)9MrSGLX7no*bTj%@3c4Bn8U<}e3qO?Fv1+C +Zn7bkk(o3l9TbD?dB)j{@B^mCg42gFrXUq@Bz^26WRzItvd0U8@>9^N#@CG>^^x`~yJO&dY-Q@1}Wdc +IL%@H_c;np)#bG=CRqE7yi98k52v>zfLim$L4X29tC<=lO(vh}mpE +vX$*-|n98A;6kGR7zD;*b}KeUw;`4I~}VRdT$*JBRa*~zDIkArDCo&3*#mxF0Kd5SD9tcu9TVxMDaHu +<&80w*&z@&g`l(BAnAy^PxGhIalj^em#SXlUo3^D+l*Itzu{I+F_v4#*D57dH6?`vlbGv+A|^1^d|5 +-Q*WK{DQ?^H{ln${DOUk=^B2a$1m9V>}r0Y&o9`_yG7;$e!*tmDKcj@n>`S9ip=?r%pR*cMdo~0W`0V +i$eeG@%(&#UCEu$i}ctOh(E*<(6=+a7&`!!~dF(mZ;D!!~Qu6Gz|Vu+5piijTgxR+hV6#g-XZITIn;7>T5B}vD +Am&5iOhobLsG|P~N^`{)pGNfVsFAm$8OemS3aoElzsmY`FIc#T=WWdn}9JWc)SNYL@Q@EeW0~*x-;jm +4TzT=Pnm%}zm`bMAq0f+5ODhmH0hwT?DEx&%5qiK@;{H$kx#L+ZI`u>>xF-Pqz=4Ubc6OLvX(t-b!!} +c4NPJ-+=bF6>J3;Qz;rwR7+L7M$JN7MZJ^xnVVs7;T=*6c4iY$uV_^6alTZ1bZx|20SL94b2JuX5PVp +{Bh5hQn5?=4W^BHICXTB#AcrTMB0@YdW9V+23*4W=PS$=ct`QdK8%b1BY#jq@ia2$l)|a!Wmna#)_jp +MgNJTHbc@vvw!ArmLVnnFC4aWNV;_PuN=-&q|y62g)^N*XZI>c(+oEk4N7B`5;2IKNMof^kJ5gfqiKF +U8vTFcXqq2=)z7}c(KJ8$wqs+~SgAzvX7){vrrD8-n0vVEnK*5%Lh8{GzRgkl1i1JsN5*O+(oD +1OaMUt}a{DevZEiFj-{YtiwshR@b2OVfO8EyIw#m`3{|86y#kuG?8>@r*bP@z-V?_{=i>+m26%Yxa** +hGym!_f-{vn6c>`2_re#B9m9UbDw9JK&dG{isQuzf_NL%hq;G`l`!_Z~;n?0S^lPdS=>5iObph9L;oX9{qr$cJA`=;gQJ1O+FC3NSWE?>C;nwgp|pzY#_h+!o??_I^R0mx;)ywu`_() +?sRAk>&wIGh4J=q=OOE5?+>S2yMx=qv!~L(KW+d1bpO=x>Zt6$ox$#ngTamTKvxbXw?_LnKh{y~DQ!* +1TjR<0aI$rKuy^+Vv(bIdb?derhqH9t^N&CO^zoQ|oP$p9?v1VwcDDA$`=jaT&TwmD*BZ{MNBdosel> +rLBiF&na +_T1aP9i`@WmT9M=#ylxxG8yo9s^y?%e&-?8~#S%)UDN+U)DIS7&d`-kiNPdw2H!?1Ou+-FyAs+xOo2@ +U`@!e0XEy{{T=+0|XQR000O8`*~JVcR(3*&&lF&W~DH+N +;o6ik?6o)Qu~RIO^Mg>JwVN3{p`#(c4462uhL9@D7bXDamEB}36-u?o27DlUQ$ALUZW=m8DGK*(6`N# +-gxftPh;ahJ-KWNW!bs=0!)aRK#OO-B=Z)vM6*eHfB%2tyV!`Nk%3B!&o-#2{ +h8zoxCHc2ff6uStGNgw4ST-Euj>n17g@YfhLQwfN`3w!UAd<0P9&+lO^R^Yh-NH*bN%#WE; +;0BYgLLz=4CVaXk(JGi=ycCvVauKFU{@x!$kA)Ztd}jfZNIzJ;_}oKqk9#Z#8Mq-VNfyrYRGQ?7oj3x +fK=V=h?}2e#CvGY~N}yiVQ?|rn1!IM>tH^&W_mY4Y==2(VESF4?)x9amBb@*bBC~TW4&IOaA+)^OPBkDl&P7fXSwSm4+aUo3r&hA}GX25OCtqk+fH(D;FfR=eBlj- +JSSvpec{Y#U5#2rU@2hNG@A?zM(67!L=Q-Kk=68B0@4$=sLZEX7kaxe%C1+$1jd!#MOOEN_So`V*MDZ +w$-qG2B%XaIr&{>$7U;i(nSTi;z5__rRwR2vvc1$+35^J$I^$R`U8*a94QM3S8@`SGJBwYsj?F7-xD2N>HZIrM=}|KY@!Pf63J5;sjXdABU3c){qgdbGz36xvJ;B4MJ)f)zG +>qChJ=nAr-uP1DR_=O4#tjhz1Y5&ncLO&dR$cvAx?McZb|12)mD(GL{rBotAHw`>CibrQIt$2soAC0C +eypD7is+qmAy*TaSD=c~p~B8yf%tdYv#Z{nT#xNhP4^`7;Vo$xn>_1JuZwh7(bS&gwq4}D9*y(Jwb$g +tU$!4yPPdYx~X? +2a~1fRb$e~q#_$^s!5kwPO?NS5QD*626&5fAx(^ut=BT|s`*%Z^?MlxoT^xkP?MF4ro@zmb(pvvK5GB +CZoP(WAYZdh#u5+6Oi3g})_=?o@We+R)Uu*!2SY&!d_}KP@Vy79DpWE=YVV*&;W!IA +PB~=$G?CLMT;Wt$E}E!7q*Bcg7r8PnR2?K$4jo$^FF9ECMZmU{aLoJH@$k@1)6hN*iNmKt+nI;4VB5U +|jA```56jckfu`hq&Q51H|GPRNceCpcP%?dDu$;j&G!1GV&7J8|ZkRqBY2H0XKY +PD7)G6(mV*XNiF7L10XUI@u*p0TO!#DZbhr+{Wbg0?b?v-3Y`yWtC0|XQR000 +O8`*~JVHgyz`sJcjB?J;w0>~JhqEloUdkm{HyJ)@6mHX@a)_@Jzq!+1HqTt<`H}l^72v=9t5 +8d@2hGQBHd;RgOPj{n9?{B(bdsVw4cf~Z(Vkx8_Q%{9VBB3YsL&UL9b17a~C%6e#zE0Rs$c6)>GzBni +)eZ3SHmpfSWGbLxKW38z{)Tb1UZ+w7z7a|$c-0%Fvljr45nJCXrqKQO{5bXRD;g3SZH5wt>lqrrbI>NJLufdR;3j9k~D`R*(C+}4EZwrO= +sY6%LaAqknmu23<203e8dM^Dm%DNQ&^<0cSb +OJ9cW<7Dnqcl=CWx{lKwyU#bUMSXCKs_&4*dJ_u(gO&EB*&=ZOJoTO4BRsly!_m-vw%HGc?zlgj(O}| +Gm!@6E9roslMZ~MB_X@ +Bbc-tG|1XE?d^P=9>?lN;%(R*N(yskL7?8?6>#kLuaM>)~+5W||%D4OymW`n`d@5pp>*=r&~O2P+{td +#lxILF^~kZE0-8-PZ64SpDP;vyZu@4<9~cf2&<`lk7vt5qX}#w(-1r!g16@%gdz~i5QK4J64kSsP;)x +Y@&KKZj-Egqm`o_;~af%6lkz-<uZhGeF4 +lCHuab91+uOYbGUE01@!m8^$5T&AYu0@h8plO%X)6rIMwPPxSbcUKP!Udf6VSK2ly&p8Yc)S%qht2$q +=^sjx%vigXYS|YPm#JLSCfH`o~`q!q0yESJ?h+NfZ7P*xq(E?_uYQa9gZJ9pATmJ4Tei)JeDe5t~`7j@ay(FTUg0$hm!Szl932m1`P8*cR9@-Cyv +{jyPo^#^zkyfKi@G0*|%G~Sb%I&EsrP{i|;Ip^UZnWc!Bj9i`u_XO9KQH000080Q-4XQ?1hxsB!}U0N +e)v044wc0B~t=FJE?LZe(wAFJow7a%5$6FKuFDb7yjIb#QQUZ(?O~E^v93Rb7wTI23*7S6pdcK%x}rR +%&|vCHJ0teD687xx2glP=7EQPiZm^2Ge*z{mCr& +LBGM?)$VA%;WRU1EfkX!=#-PN^q_wUDH$!4c;Ut(lWdr=+)>IMPnuGuFdWP#1v|?k0*vR$5UFBJI3p!nDJbBiKRA<>Oq6L?REzgH{mVnNlB +5%T8g;k=7p#GNdm2$5vv08)otT%M2H@kd8SavwGmr-N9fRz(-f9&qty-(Z%X`_)IP7@=G`f@1B6EFEZ +0K0CfZ4kszGNdR)(33<7ob(;~M&d&wG}NHqd2&x&An(`qdjb*awmQev4vb9*Ky~JP +|JVb$FKnRck|aDd$I9ChoF+|4s2%MFj^PD_81xl;l2)7w%dnZ!1i0>qfgFy%@#4uXe46nsNPuRorQ=TE--;dnkB#4!zL5%nnSMe}j6nDinF7g0Ei2Q4_x`B7 +po<}H!mB+fv&)ld>AhY4x-qd&o3iw0#%8}`CsbHZ`dQexOPdHKIQlv=HK^P=P==sk&yl*X2OH3EAFd- +lp*u$=te@69HC>;S~nvxEgP%7-EY^-yYUn$*|UdFVqAwe4=F(|*_a(C!c|VnlxT&|v!Y4{xNqS}ij;N +v*?$vo^ZObE8*~02cbw7a$XJH}aWqmpPOaF8fr4F6P5e6^Q*QY!woJAIB94FOr`ZD-IUH_pkz5ueu*P +-70F-_pwW^XLH5%BdUOs{PSO*FGdUzs(@Bv{jrMaBXYTzd%aq0{&)b@YKdePcY8mG&$O#w%ZZy0w-z> +RM$4tZ{kdG$EtgpnhghwbnUFZjU#42|1JXaXz};HEAa9bdYqZ{I&I!)m8z&mzTl*m_eW8Ee68<^aS#L +BenUjl`nKSP$Q|E@=C_CD8nL0D)GIjFg2H(+%`f1vKt8*Lt8#$!^15ir?1QY-O00;p4c~(c!Jc4cm4Z*nhVXkl_>WppoXVq$t8}_k(L@Lt4F(?t0=mkpp{v=J(w7?|8uc8HCaA?fyZ?m4y@f+agN19S%JvwZUKk7iP-z256tNGOvr-Vz0M +9?mkq_fAsh0L2lsp`YjWg!QQ%DGksrJdKl}kHjGbD+U+lthuLI|nX$(pjvB+l^i|EGplKMl_xXvW7f` +w?MS-?39{aN$?1^dVr{+!vC#{xceLYX}@M8qs_`Y%5K{;fZCW($!t_oh%CQR;{Xw_)0bU(PPsfQL|0_ +Jw;qfZANlC$3`ydEnUG3pukwb|=!pn^j94i-L@jg0N#BvX5K$BjXO>;@I~*2qA?v>PC9BB*z-_1NPpE +MET)t-U;FdDD;B4a5jRJStpxdRnsYRyg1t%XnXhrGK7jgKsRC&&gLPX&D|R00Q<7<9a +PFdQD7jemTEeW9fRh4UwKa>j2Qr3Q1(p{rpx}_fX@7Y1Com2UPX;IBAENZfC*!mJXvB`shwOk|91O +=NN0)1pgUzZ);)*QY;y;C6tmzGxm +#>?4qe~7j_V7QRfB$H&Ww3}RAUc;1APa2U*YURF01ofgHCVPYpiX+PL}tV3#VWN^kZiRSs%N;AJo{PA +4X!=(*xk@4a3kiqp2H=U5+3{^~3sSpGyuR)k9*U+B#mOJMKwho_|Z3^~GnY$r!H@XPdv$)_ +JYJNlT8(lRn_zg9`Dfmq_zbW`l$#2xMAAz?7ztvUag5Of}+k)R#^V@>oR`WZ8-%;~Bg5Oc|yMo`P__F +?8!S70btCsx;+!TDXtHuT2RP%d+-&6B@g5OK|&CEyOmf%~G-=uKCw`NLwBKQ+Ee_W9bpv6ag +hHg-a3&ICTW6RFa_AI++jaUo3`9^7Tb6FOnqm +XP-S%`D(OZyc*BasXD8{US$Y{8$`}fer>EYLTwP2Hj6N41&e6tjNF2pVC>+O1vS>ROE0N;?3YN&9X2x7LNsswR?|>p9&*wv*z=NSk$Zo!}Tsu9sH +Dxqp*VcUG(UV?6mdn(Vfu5=NdT|$6ZRlE~ySf01W}%U~gJ$d$^wqVZHV8{`En^TmCHz5pb(Zr7R8`jc +18E9Y2I1Q%Qk5=Rb!!m&djapVvvg~1Mi#F0awaO@C +B961ENv_qhuraZqxAi`l!=n&MwFf|`L1PaFvA&ZKjSl%MQh_LnZlz6Cl+J`4wJWqL^ry{$G5=%_PvNh +M;oUWRDtTPvT#0EZGk7c1#sbQDt; +H_od|d##a?W?-|C>6S4v@jz12$Q0_a#>o8C_}tc_2We%#95$Lpqf(LEvJ(^k5jV@!SdP6+Ggd0~&GPT +%WvFnvYJP|0lk-22mr+mmQ1h{up>XVFNE~??3ddfC#F3YwaO`DB9C;ZE$6kiSk(Z%x>}5zCc^L}FUM7 +ncyi778JjLw8-JgTX>-5d=JnwBj4!MgT(qg{6??EPKi{SlJS)nyEN);|=eS=tivAh^-0h#OrooH@RGfHN>KlmROr~IFFaHIH6dV!8~sBFceE)B3~?hu>mNs-=fbmPpTtFI@cN@WE9|5E0U!r#`NsLWsSNy*AK3%pq{f0Vh#=8wX$`6F>;{;K*<@Op4vJFZ +;va{mh5jvPch)rz+0^Huq}sk0Sz`Y=3>}jN42tYKhoK9GpmgIIg;!fYB^2?te}3IC +oAMcIO&B%MtS)qN?&B9!n+h(slAs+qlR|auT;bzhy9H9QbB&Ky?U&hdi)rO(q4*>wO6J#vpCXTijTEd +uVt^}y!KLjti2?Tw3ouM_L4Z#UJA$BOX5g-DI9Ari6iZ$aIC!~zE`spia1t55=SaX;aCMp9H}6MV-+N +Eq=FQVRglDAX&z%s%wx<3UXl?3gfKUiu`PwIn{HHhz{|OgTT9zNMcYb?TfB3J-joeOWMd<$+^9^+LKN +l^uFJ5*DM!(WOgAw%SC>3)5<1vez9;kztlHGIW*2q-HM1CX`3JgC)UIG9uBC3$$%%}4f3UnfOWvfDHC +lg@emOqYjLu;nS%pDj6$Wos;ms<%S%o*Nu(S$;esR%5cC7AZzP-7FtT4B8n@2ns$XkUHS#Lnpt|5C;& +CI66aaFFNbTe#v2$O6IZsJjGvWuG-taTHOjGGv2bQ1%Wn<(QY2q!U6I0@QE6za0>mO3{n>X-%P0G +_}DD}`l;N@r>x)Z^-~o7J1v+<1I3vzKk^sUlFX-k{S>w2GC!ZSfFplF;n-i0c+OwE<{Xgp%_k;$0}A# +RE2Ou=k-sqD(lUtOyw5NiHKUpSwrWOOT+IT=+6^&yJT5^0NY}uU!pf>)Zz6tr32tQ6Fsqbp?1GxxydC +Pbl2p@C_o|5WOpQH!5s7N@#$Fb6>7915UfE5_6Dh6JUiY=8sWl&Y#XhEmTDsQS^A>8ET5Icm)1@~h58 +2kW_MW#&+tk`mKhp2iS{+^M?0IW-Os%tZAL`MYl85Z-T6fP|rE6;47jX;QwVbJI=AO5lX=>)S{Ye_V; +-=&wd%D)!^H%AZTJOdBQ~8#&bj{lHma|OFdUSu<{qPfAo9uZDO-yaFbKiQA_oG#9U9XpTBR~0v)o#jpRnkZuup(_z%G|B`S{2T)4`1QY-O00;p +4c~(>KpmKBa2LJ&07XSbz0001RX>c!Jc4cm4Z*nhVXkl_>WppodVq<7wa&u*LaB^>AWpXZXd97G&Z{k +Q2{?4x`DOy49SOb~Ko+fiy9U&$`MXrG4B^?=P#b*)htA*!RI3ap))eAjxu~2+PKNB?6q$NF +W^il>f#dx{FKUYX|FSqu_9!ebqmkK^puG$#y&J|-6%DH}n=3i+eBl6sU6!UqQybn)las$6175G=u=kt +v@iUJ?@8nZN0t1xr&-C#<67Qz&|V*yim{xO;f?t!__Jr;zF+>qAhEL`qf*)@ucQ$?sNAwG8hS7IFZ=4 +}&xoX~~U%3ez))?q8vTy6A6xYvg997=CUAY3Zrv`SsDv(zUZ#A25S4t{|^82X0vqZy+pWb;VWApx}Xd +v9_-oKC1cc%t9iqfvV>dHM=kgaWq+a3YDX)`CMYtWs{EH&7e`9_&%)9vtnPUcWbaGTL{0lYu=RQ+GI` +Ha)gSlU`@qZ;$A4I(i(AZ41F=EOW7OW|@<>E}lc=O2U&U5|@iGG5rbQ4WXd$Y3aT)gxO=LDxX|r$a?d +k7z!CIVtc`|bLdy%a|)!c)0^VR9i(R=x{$JqZyifyfPB1VS(ddza54x+|nqb-IzEHlz=2@HQ +`6t>(|IPt6w5bc~btK4cGWPXwQ{N@cE4G@cX!m=f1ILT3sra97ON(OR&S#!B&Lt>g?IO36An95ekGAE +tyXh*se~f$Jd~J4nfeRGT^(Vje8U8Ygvx_eaD6kM;Qr6MQM9U#V2axEJhZqgndE11ee2^`2U_YB^E0U +ZE2{&(+i($A~KgI+HpgV +b4M_ZxP>RPx?;U_XG~YWpCg2xaKn%aF-kI}miq>rHv-1(hsVC{jC=pG5$Rt(CxN$G0oZ^)sZIuy0r+c|s|@B7A%K{dXni0*GXzg$zwW&;_&i&l=8U^8c7A>(rXY#wuF^T3o??=YDs<}QW_q@S5 +nLe~rj=%VO*i(~F@CT{)*G6nwBo2}FLk^9j1D1t)DUF85wF&(L(NM-Gd-EuG#^b!8JmhznMD4oIi|54 +#glPPi8G)-& +%}GIem&9CvQTg5;7uYdtZgxR{O*EvWxef6Pjscdt2z*+2eZw&)si1^IiLZEq}S?G3XiRJls~UX;$imc +TEY`%xS$iX<5_3t=;Vn?A!C4urvDh?b}td5WHb289zPT4Es)}J#mJkTYH459~z;J#bd5ZudaxgfuxJe +X5DN72h!qC@%2QkSv7DT0RT1-@CooIO`F16L7m}XG8*>F#G!$$Ouk_e@q{!Zc{);Ww>uO6KwI(dD+36 +}hBjx)AY7S1W9yQcmCCFgCMTdojFDhma4e!&_HcmpQ;L23f-B18?PK3M!rB}%Y#aN8NWCO%e=l)PYI; +7(=2HOHzhcrkP#~$tE{1mbMvLn6!dyQ#1G`;f8tj>K-}od>GJ~$@0i^*fvE3@AGyB+5>vee5Xu +xsHXl8kG)wp^3O>)1HsnfvOitEPZkS%oct&iR7Cbuo=D{uUOM7{{n6n$k^8;qijpZL{#nT(Xx0)-z_ZY2 +v(UvjOxM@BEz!EQCw6Dj8{AzTW>6t)zozjn-y4cP+$)h(O*0kkPHX37X|~6eK6qr=IFfKeE*9wIKAT0 +0TJ@(eug*_l-N01*M++Bl90W|Ax{l={P~VeVv}YI5)cbkocZX;sPH$4+!x)+KL|SS`_No8L6EkM;E?^ +7S?6p)q(GS&dDV6pjjsAh5d%2XthrDV%@1aw@y4C7bj{oM9565FLoH!5muGETS%yzOnNacgkQzh$dt5 +AgbdTJg_P2j54T2>P~MG0nLd0aev%6`90<)es}w0WrURkCRXcA5(Z +*OO+b?-gCcveGiwHhZi-SXSYiox8-zwhnk&U>xGWUUS3?%V9Ked#6%=4rk0F22~Dr^mxyCV!$d5&(l` +mHOlfW?;)aJtDheT5yI3Q*i7*0Uk9@&nIp>Pxn9Koa$alHXA)9k-&1PvLLS}?aG(Oc_s_X;6)R!vX4; +5#IM>JYxi2J6PvRLyKOic|{T32*?b5jSzLGcnaU)S@TV*Mu~^!3`5AAPp&~&@X)H#Hsg=#{SaD8Tj?EIDKhR316taXAkA%+cBU6T0 +68$L^^k*^>xvh?N-+P&d`8r^q#Yj|FxJ9vM9EJ}e>6gWo`vw184jHnb#%nFVJ;MMV3ZD=%_ZpR(GTkoITLD +%tpdg^)9pnk&}xUFHQ;Zc9+^?SZkLvcA@r`RU*P?A4WJO<=UB9mwmCSsk3{*Ll$I2cDXWebinha6oM5 +yK6cug_1vp2P&W0gqAS8$mG0^gV#!C068KPm5@SF=#Zsy&HKjII +^tA!qo7;N*=DPmvrcN~Uv2$#Z(|tVg@wvRX7%MbQt$14|N~ZIIHqZ-rVkE@68YDw|Dhj^{X +x06O`biWcSnTU%|8II4_0CZNzWeCtF~7%q6rft-GM@G(G37P`jip#WeYC25y7)uv^Z+<(Dbgwtce;u$ +=>yYQ1l}`FanRy`k@KtdiaR{(Wcnt7>c&atH3E=iUe2nQ*U-R_on!JGjGVYL+fVNp(9Nc;Q4T7X#N1z +Te&igLcE+tGP+l2cGQ1SLjDD77elR?@|kIiN$gPmJkQK;zwet9BqpeTKmX)VzC{ +0B@Z?ZV!-ttdq1;jfwwr-aLm@}+Scj%zKDzRGA^b1&=_vUPDxBzz(PLcTWI+b<_}FQG%1VYd|)qx#s| +q{Bb;yjkEt1`^mt-Q+cjLuAj?6qp(_U~d%7!!g5R%7&wF${H1=TNcs{iq4};ycj5e8I4BNa)WqH*?)6 +(*fCAbnM;*4ojXs;@uWw_9bY(g8ZK_bT(_8Aa#BN5qAjPimF@EYdt%n}Hhf^P0X6|?|6XAb@%l45XY- +k^Tf%+`{xylJhO^yTD++|0^iQc8 +C)}&u$FF)4z@f+bMAc&x;6(MKFaD|K4@|8yRCmYVxj~nR#EHts*v9z@-z7h1+u!F;Wr%eX@6aWAK2mt$eR#VoIXEGoK006!Y001EX003}la4 +%nWWo~3|axY_OVRB?;bT4yiX>)LLZ(?O~E^v9RR)25WND%#>PcdqAD(DCoQk`^d)YB0l2|a!Z8&y#iS +;k&quVxqRuG7*_e{XGL8!)+4I;&E{?97{aZ)V57xTt>Uwtqhu({Rx3kDWf<4kz8e>5T71?SkAjqlw}x +F8qkPGGxRxZR8IgMSe@F6$P-hYJ1m#;D*Dq$DUavw@i^-lBvLe|Ckva_*(|kW)lk@_=ZcN@l$Q3N`3& +Crc$N$Kr!F2kQTcH@idjMEY^01RBJ=^ZiCwI-~R!KO7|9ZqKIbJSJRAXrk+`tGU-ZT6ko(fs=97`fQ4 +w}tFJWW(Ms_RT@orZWF$>@W-Ud=AJRm8p?tNoDlHXbq~+3lLt!_xlQ9LpAjLwiQ+Nnr$QR*nQXzgLL% +!TuQ!GNzu~i$UHhQn&{di78rco)~Gr<(tOyfnw0|XCwz=USxYuZ|yUKdK;*+QJG5W16qPt?63#&K?QK +QpCaq3c$ApDjadl2lapjjbQu+}gkfir!I#Zm4}^t5Sl3X-Hfouxn_KKL7}#-!MkBU=(Y%jH4zH;7gwe +?!#p6QfK@~pF6WzXY4-Sz!ys66#Yw)_+}e%0E3nCh1sES0F3&x?gJt^w}aupeYDlz4cu|xap-O`qYh0 +wGk4IP4?8oO&S%q!({B+ujO``1VpfTqOS}Z+MncJu8J|ZwrT&QaY7`iSwDzAF+8i*Bi6S3YWV`#R9!6 +5E621s21ic}?Bq2?czA28`!StPU7br!4n;80_)ui9saPr012rY0Be#e)9zKf((O}drZSl3Ypu~*ma_S +I$k-Bp`t?!a>Hq5in{$|Z79t1Xq>P;0XY*1porY?WMqKl*1c(I}1#zug(u#i_&0G&#*;uwA%VX@gPQ_ +`#YBwh!wjCyqTCr6>Ckz~pmhXF3aTJ`J2+$=<;>+G%W}H0+;kAk6o&v)uyhyE*a$3#~V0KhGI?qe-tn +%siNgac46J%Vu9EL{2MBe${HVAo8_NFjCU>YAvvVuz)abOY%I9J?43J&7x&yw~vmo(dq?KlM;tk?%ya +}aggcifyl=SCF=*YjzY`YdcGCs2b%futiGqI6IqW#kJLVnQdrOi#$1Wi@Jbo>(JvNqnBy-@DZtDw&zM +cGC;SaNPOO-Tl{kZ24m<}Q`C=9Ot8>6_KKWZ;puRVS0!zli#J!0{Z0XJ4~9lA(E>VL<-p=Ue(|Jq6z=94Y9^6f++>gjyY$!*HVzKnN`PqIC +Q4^OWdkxKTbyz)9K*Is2Y%@^QUq}dA!Rg*2Q9sNq}GE-}K_p@a4rvQ3-spi*6P%80~+DTpQpKn9*6on +kF>r%I`4yNa_{ZzPO4ioQu_z!MUukZG|?qGcX;dp)3tMy+=<1r!Q)!M^1m0!1CzTq*gG&Z>>QY?AMM8 +M$rXIhE#FqygCx$C(Pvp#+dd&m2?p!o9juYB9+^jpH3?MvaPilev5o}cw7Zu&9jBO-Zp*8hX(>X|qTk +yXC&zt_vPG!L*FwSNInO9KQH000080Q-4XQ^$+OgLe%80M{@804M+e0B~t=FJE?LZe(wAFJow7a%5$6 +FLiEdc4cyNVQge&bY)|7Z*nehdCgjFa~jDJ{;pp!vFZYlDUiX+w=6yzB7QNOH#Mxs}nojJv06Cbob029-1F^)_&jZvtIYS-5<2sS?}unN4ACb@ZgXQ7o1%MVlF +(}W#|5sGa=cf|BG;4o85Zio(B>m&cY5P580H5+zI`FIUuzT5(!;TgaTw2{GPl1iU-V}vCtqI^nD&m$6 +j%~S}r3`ICdy}PvU2=@&ok)g4wkn==V;*?T}B|WUVA_PGtuqYqiEyi;z{%k65eGXhMXM++wG$%WjBPv +KuaWaL=cDC+EHw24WIne^q&Of;Ws^+QA*W7VbO{OIBxCVaP(CU9ZE1?g}vt<4>0|8G;xIk=ALl4CpohvThTkY$W+;(g$&|_u#OM$O8svc7Z|6x$^3Z3T2?ceEtXirURl)+Y5g +$wiWrZu=rwa;t{~yGj4H@>I%UFBVizzD{(wMi^a1Y2CY(i*&my-537};kyTcDxw?lT?|HM9?-rSt_ho +9bp7N)=`46G%I<;oQhj9mq`7p}2z2)JzDoPPkv=~=he9e$$Kce=xVdoW;~s~dL8u1{}<-SgYt=?%NSy +}7;`v@IBy^F+m@Op}sR70)1Y=|htU5?i=ZZ~YU@E3rU#$`eBuh>kjzLrVY>*$y1K4Mv +kQm769PXmX5FVa&Q1Qre%<9M<%~qe~wA#$xj&eU>0CCRt(Vdz>ij|z@I^biU7m-|J#Dz)KXu>O<;w)|H#1j?f02TV3fVt9@gqp%maqCGD4EK55k$Yzn}P;@D20B=|h28D-&;IV; +caijyxXFT9um?l-d58#Dfh|lJDX=9G5P?B@O0XN|uTtfd1@I(^B@Jvkc8m3EKbEOzdPBcx;7JSqr|N0JcNOaM#@)zXZ^IaO +dh_p3yPY@#W2TCo5;J@u|S8hJKieRNcscVWxXgYYy680UsIcnBm&&7@z@Sk49s?9xM3c(^6+6UfEjNm +!Q{VPZRXaiJr!O(pqT=}lTp*PZz1K!mP)$K%9n#^V~QaD|w@=dPItfP=_X81d*jYbsE*g&;wlG~wX`N +1TQ{Rb}_ybsO+Gx>Reyt=>4ksr))>tLOa=dF;4ZLz=SB{Ck86B)+yK;wznTE@jG|?2@ +Fsl(PRLJeo>EOKE-Qky$N+mPRY-`w^6fj^LRq9s>Ar(l)uwJ5nHC-qOA*%XA3F0kETi=z(hJIdu +q+>v)jmbX)jD@P?slKPi$fkI@y$fx~)yZj#QNakP0>`%|>jN+F3kJ9{jOk&AfljQC!IC(#W-rH`(lNn +Giz!}ElRE`}c?Ia>aq8oq_NJi}Gs;&?o1keO=>76p0Ya!j=z^PRGCnzY<)=0Lr(catG3#XbTseHjUy0Jq#5mIg{m@C)<6n*E*7^`l50Jq8=8AMeM0U%c4+7wj$K)ATKO6m6)ZvB5=U8k +REV*O7JiYBD^=pZ{oznTlB4fhf&}ir*?1%DLlj*03c=5Zb{ATx+Ei^pjb;tviUOEX#PYX +!`N{saPB<+0Zq!)C0Z%W=%_B2T1@B>XhVH->?9Lv&H@6!@=}W^Q(W00>&DeC0T4D60K8S_iaF7}akT> +S9vI+u*eNhWezFNmvl3@jcS05fjKJ}xqzgT3yTi`T*ja~>(E6Kn$_>&TQ2au%)(749FO20${wV@>6M( +&!BZude%C`bJceiZ4wD;rIsMp>*Q~YeOp0$sRy6bdUr_CA-`lr-)+(J<$!qDY)?oEa588vwrvw*kL$r +vYMzKd(0{*PO~8|6Mv{P8Y3B@BJt4&g@8;tzk@nh_4sA8b@U{y{ +JoCuquy-1e)+ntq}NHt?@CKrJ6cnnwpmNDvnXHNtEE=+8SIyT+K(d_y +nF~c?K`8E`-xrF_*Z&Xo8H&JM0ZUoAoFj7U{wZ7Zmn5b4H*i%w_Y#Z$sop&KQt}6FbxDn2*?=`VVp +gS3`A9TAw9ZM2q-rPBVI9|9E1b(&2v3#l<#Me&6^h)Pun+%GY9;twteoJBU7^%T!c6};h?S>d>^5zMS&JgF&bw^}~iG&RDX!x;&;kQzXA;>-*g14yg- +CTH&d$TU$E(b?HhPuT}U-gn~M3r%pZ!*b=rDb()o;EhmhqP$;XB2Nmfl)}zk_IwdJrr|!kBbT_*yOnN4W(>r5= ++PIZ^bj?;i&{dPCr=0qNZpSJ7AoN%ISo@dc8s3S5!m)OIt-0hZT4|WI*^KVMQz6*_VD4z|MAy{vB)Mh +XJPEAj?>pl!95}n_{^p_LYB~_wmzd3`U*OiJ#~-rH2B`uaO?=+iY +*->%=diB^R(u1YvUMWx&F*X?U9gNEw`3fh`egTWvEm0l82jD(EpW;rja6tHsz}_dY1Ork%_QjHMY>1q +&ye7$@jL^-Si~40~>>;C2v94?HMD_{#Uam%*)!Qw2gOrxKoxg3g<`&O{(Sz|Ee{;;XMX)&L=O-n#n7q +wGB4cf1oKJ#cU~JgT4zY$}#UX)FHb?%@g0eXWyKtWzY=;(2;6J>Ne@7ULz-y_5*zaXpqLghJl^PtIHL +4#7sE4d^dT?=I-;yXz3RMrZdJ^f*~nxZ&ylcR=l~7JxE{G%_Tkd2!8*ZPdem$evg>{R_G}QbUDw-ik} +?t_I%wT#c`9(A~n(=`|ZZsv~t$D4(e{tW*mjYJ@3(%yVWE1m+Uizi}u;=d-Iu>`8;sPS>Q%?O&W>?(k +6N=v5b~@6aWAK +2mt$eR#WxAygfw(007Pk001EX003}la4%nWWo~3|axY_OVRB?;bT4&uW;k$iZ(?O~E^v9RR$FiCMi74 +ISB#PuNQn!nPL)ejm4Hc5!A7>xQJySgk71SdF4|ourN6%83vdiXJ*TRl;+grr`R3vwmzU=sc(R`-4oo +LQ+wpC9n!3Y3;gi_Q)+GdM1Xr;Y6A_1@Oc0ocO#aO{k1VNH5R=Vn?LsGl8Ag#Kd`B)fs6eJ*&Tvq?gG +R^E2Fa9VxnOZ*m=u~`)kdoFg@|D;Rb`JAMg|jDZcE0~RFNvUHd{)yHqah+pnrFFOB83rEf{bPUJIpZtEGPnj(XuwFAZ_QeYx_)X6XG;~SZPBGvA%d2v`5<8ru$4K) +kpP7W(-l26!ayXFpQR#vCKHx!3sWu8EpYUcTpvzWkB7NgJzk%moS)9XX +0#)S~S76M~Q^ksJ+02%p<-0!F~S>VR%@3Pg5U62aekty`kG&cpXL!!69X&P#Ww9dBRP-y~8l(cK=J^e +w1ROkn-5iAjMjcLxi#6Yp|brQU|ivR}BD|{Vz-oOc7A1IbOOemn^r+xKDYdN6?bzzZhB#dP4oeBsSq-?jjJ#9fPvW}a*EzQrj~W|BIYpotjQRq3xZUQGgd0 +_*4wv<;#L73cZKN`a*GypfwxgxbMyzyU$tv%jyY!T?HLiwa%UJ7d7q$q-x1m1^XYR5|qSj_e$zj2}P9Qu^@#eR +{}0_lV0Cme8#{dvC5;>r|64A*(qXDhIQ#+8Vu=VeFG@I_P97+JKw=oJiCgEu~0=vT@d(}seJ9Y)4P!Eh +0T!HZ|p%XIYLT6?_22c?H)KGJZs{kh=m4a;kFcXv{BvoXKHuT7aX_^RIW<^jCAI>XU`*P{DYkN$nCxb +}YJ8t>0V*Kz*@6aWAK2mt$eR#S&;{S~MJhuegrrE5KoZi5m9)|=zS|S`;Y9yF!Z?s}W?u2eT5CSN6vQ;P +z~CP#wIFF&Q4@;9CCIcQbIrmR(HYec!Jc4cm4Z*nhVXkl_>WppoNY-ulFUukY>bY +EXCaCzeb08mQ<1QY-O00;p4c~(c!Jc4cm4Z*nhVXkl_>WppoNY-ulJX +kl_>Wprg@bS`jtjaE%>+c*%t>sJh16q0srq6yH803CL>`%$3V4Z7Jwkp>DaQ8p2Y6i6zr5#+z`3@OQS +Vh7d1mdN4b%$u1v1kF@D><9d_wt$BGAm(Hl09Hf~qoxUmRa6lZN&s +ap(lTypjG^1LZ}M}WKuiNSmitNt4&J`5946jh?eOj}2#XzSuI5MZ14@(E#|Jo`qjOsj96&2?uZr39|U$T_l(rNp{9WqHiU7q>>F;HJ@i)8eFL(FU9iPe{Q +A$|Y}x{6dRCz{96Y6Gjkfn8Tvj&PiXlKFY~MJHqi5kY8bGip4+umY+Rz`X1a(V-&A>2?L_EGa(T=%H( +j~-lqfnLNbVLi-H}Pl`-yXnCsK5B}DTBwS7t-+f6f;ai%UweIFHc}Ck3#+7X9PNI7T*SsMPtQj2T`EH +vLmO`q4!!YRf4kdkblMuJnOT+P?(V{jIC`+qkRFPagWrwAlpbN_Q#f*2+I`nE~?{ZBJ2!44gEGPUZSi +L&9)Pztfi<1;UD)}(O&E&OQ^Wy=o0SkD4&FWbCKQN-GQ`JY8BQ!=9X9U?hHQ6dj2TNH}EGm_vskDftO +T+)ila0`(>EF@-xZg=1j@*#r2OKdB^7+d^=qm(=oV6XI?R0RmJFT68n=TK3`p1(R6wI2l=tvVox3P44 +ZSO`-TX(7u4J2k7+3j=RBI81S^SSg=OJ*OJ8w-@{vzGk|WnRlEh{mr=)@n5zd@)v|m*6~}M$S4gSmg2B1P_``YUlkvJ4@5BGev}@GdSS?$OY@0E{!J5u1TzZWEnue$fQ57R3}shnMka2`)2jO{@*dj?mi1Qr(X^NHvdzg>U%wE6&UCsD( +AIPQE)hvReIaCINrgOnfjk~iMw3>;nxXyIP>CR~6RH7|a`jw|OYaY-)E-8}=fT9NfPwOINV%7-KiV-5 +#Z;Nsa;qQ(Wx%N^+*GFcS#g;%XShqx$6{fZ(Eta>R-qyGU=O9KQH000080Q-4XQvd(}00IC20000004 +M+e0B~t=FJE?LZe(wAFJow7a%5$6FKuOXVPs)+VJ}}_X>MtBUtcb8c>@4YO9KQH000080Q-4XQ%t2gx +WW=( +(2XAkzHcDccDzyL2ODoB#>NKY*s0V+Gt)3K8fmT;xHy$6gKfYIwlQ8ni06qgEfCKIhkG={~JhfBRaMrLUu$@HGs&q +GQq<8AR`s%B?Hl(m|R$&=7Dyj;@vqF!`_8^&2WfW(k1B|FjOj3*^o>3&06MzJzgqUtoqHT2@aEC`*2N +cwjV5JVEv`b}8f?w}-)#3%{qBQu-;e*qy?Q6Oh#Cd$;XvX12uR%z<8s6*yL4>c89Dy0P&zz@!LWI;2Lx&lTUHne$s +l1jhh=Umxdb{9TM^C7!346&0d*kEZ0TreZDk7TVdO*+a-0z3)i^+iqKwKD#XXrU$k@$<>t#_<!~Fm0qB*7phwx0*kduyq1m1$MX6Dndig9{m{7Be*x^#5_x4R!*kD3M +6LjQH-bJxez45d}Jp3UDm^ED3irm0`G~MW=Zo<3%|Yx>s{$-!7O2dI5HjRKL44i77h`O(pIc$`3+AlR +fh{+uT+*6q$y`;-8fdl!gIMl>V-Kqy+8Fr9qY+0F70WX|5PKG?(zPKqSQ$=6^R=8CLgGFdxw$^j)kg; +^EyCyWZ~yumHBZSYAcjB}tU(Lv1R6g3ef&1tsc0qbwkBL_1jECR8PS7cZeu(-Dyq>ZvJ1alnvLUuKzu)kwn%K0i-nrYp4gt&#rsQ+zdZFrtmNbIvT3mKvUG=4%t7SX-=fPvf)k;Eg-o!D?K +*)89$d&Go~wcyRgN46&lh89Pinhksw5$Sy4jeROd3Tt9+C%SP#BW{*Tw@#Q +{cUUx=qtBe@%=X<0TO**j_WGN)TVrxQEICOgq!MwQb}2Z<>}QSTemogdiMg+_-VwrpEOYvgMPVR2*UhaPGLGEGhQSNc>N$zRxS?+o6MQ$$ +lGWRO?I`<~`Huo;~KBwi64zek}T8>*;=wj!RDR2hQWg_FnC=1;QaNfbpsy9Ay{^z +uT(x+*lR4ul4Jg={d|sA^+lEdvtA^I$uC0E1p7aMY_I>w-0IU9={wOV(v;(7Iw>wT7)JYucKzu36Wu8 +`e$hmNjeLw(eNxth?4d>%R5CdT2edo?6eW=hll*K+fTfbJk1imG#`e1#uK3Siw +FV?S_W0}FsQ092%M&?B3WM()sk{QjM$(+rMWzJ>J|Laqz8XAjSUZ8`K&cU0$WNyH_<}&9a^i}Z3F?jK +3U}DY-cq-q+O5V6DHTh!6g}NSpJ!%2npMp6Xa_iRl#Mq(`qX3&+1Yl)&J+dAHz=Ff85?vHqmbM7C%E& +sEIStqXWckFEC#Ohn5-k1XasX6iX}wlyiGYKFUCf9bNkAs_bB?$Gz~grV2lQ_W +=Z#6T-9ln0_8V(r559V-&wOri@wR9{ymwz@LpTcu+s9pTnp0X*_0(;0a^WxMkeM)5ddr-T1up_`Ec-i +)Z@;{0weOtiXCGU>hrNvWEr=_k+Y?aW+sK=1U2lT3AiBQ2wSpoG>q$m(45YRddpuGN;WM^O||xykXunZ<({^9r*9AdC$CWJ} +@7ekIZ3n)I4RLHqV;pOg~P?OZDch`7s#N`(|?*SRRBSzVy(1VWoAU?u!jR?1xMLzM`CHJpWmQ?K-@ +S2(7DNE5&Ag6m_Rq{krIZh>p}EQ9-dG*o2Y)+6hx@WKhFYbGx#acosjx&+u#f0bJTR9>k~c7@ok>z8u +>Uo~>P!=)RQa>{Ud;Gb<~#_z{9jU5c*`HOx9MjeS$8v9$pcGPlY$_?y40n3gcJBg`1L!e!%gD9jv&Tb +~(LDy;f-i;^#5yvPduq7+|x(XP^RY}vYP`_5gh-xeo#=YcMKxex~h5&<(I^pS6GLWRJD-LeTMu2Gy{3xm*rc9?TRXMeX5s^BqVqx)`j~)l8NqM +%j^GvX`L~FZ{gec0e%Pu{5gJs)A%EPY+S_0@DLusqhQF-;q!P3&*0O`$x-klspf=^T&L +xSg;_0PJEy28W!q2R%h_4ToeOsyA2mT?hM__CRw)CdXih2E7*3p=Sk@uKB64%Ee`gS=#V;0=sQLwH7o +hS{v&+5b5^a~JryZo|o3q12-<8$qvbSGVdW1S^9F6I@(?NWusme$Kn0W+|K8aM-65rnK*I#we_szDO3 +ga-vjDNuiBjMHGo%B)L2LGApu?fRsCh0b67`JoC^Z@e-d+vYy-jxMX8q%J9r^eO!+wK@8WfeNo=yf +&WLo@p5yw*WZ6TAYJCE0R)WunwH;g*jH~^9Ed@A&`CG`-0gAzc~9dKo%5X-tLcjz5t1RCBlvs5O#6LP +W?6@?D4nX>F;*yAKUgACrdC34l;_c!2-f2x_k6HfUqY=diD3b{wXOK!zGyc2bmYbI`qL_H3`7-3RK$I +7>X~l+~jHtYRi&7HeehX{68u_ahIHg0~Q7>RvB=-P#bX4nzTmk>VQ*reZXl~g}_-?jlg;9;c`k(G80a +DK<2WgWhQBXKxT@T2xO*RMFQ7cWdb)dqsuHi`3P@+<+nOuo2qy%VmP-0Y}pBcw(M%I4ya|j#&gqN6ua +XoJGAf+O1tR2nN_$SB&|>RS$hBrS#Z9~&JI>&g`lRqU||d}Ok;pT1aAz2Z9cviPf+VT-Fe{Pp~FVn_! +wkr75)DR_5X#8!x#d)d_u&psb!u~)c%2^#s|aKn(QC1`*kRi2w`WBF@#_DF9H%tQF~M*BQKzo+5&|Es +sD~NVGs}D_k8ki>{9#$ExXy}TJD#mfBRmwkUra8NLzG&A +Eg(t$c4z~u^G{jtQA7H15dZVvr+%N&hd@E+exLk(+SdU5q;2|fFNv$Nca?3iA<*QJd@aYUOboru;3j0 +BmD^ukRvRwY+Xf5B{Rc)BQPF||S)WCWr4reI(X~enu)h+`ausl`F*m$w4n|svjS2<1OGHNB_>FPdsiSnNDDerWjuMaQY5g;;q{NquOHM7Nze>tKD5 +adG>$rGU==JitRPsphaJj{XKqf=>wKKHB>$fXofoik&3zqleE3mX*SlQpUj8*-m7WEe*VHMMXq$oXj9 +D{#R#Pmy?q9B2uv5JaH0`Q^0pERs4+Sf1>RqYc!5H{6wlnzBTq%ZV_#kXt#-WhiG?+c8_THiS~eK4~h1OXpf2ZglJER_KaxHiS~kMb3}Vdv +{yuXO|&;edrP!;M0-!P4@A?5mL}S-Bz=se2T6K}q>q#I36efZ(!(S@LeiroeTt+{lk^#qK18m6?Nzzj!Jx$UxOX|uCQ#S8Y^qrL7C-&fg_dzd6sZy`!ibt^_kg-v +G8Jo&o2kKT!I}gzTrtspw%A2mO$c8u7o(%h260dT@_<>#DdNZNFEVyF)jymI;ii$t=4IHI;84k2o;`n +4dVi&pI*ww1fIer;mp`Q6h=K*}J>(F7E<>8r{9rPCP&K>MPw^y9j#UX`4$ZK`P)fRLayU$lC8&l&l_9 +}4cLR{>ZsU|nllke1n+tD69J}e5%#>Ob8_@q@HX6amW(d#=HZ?`{9<7>ws$nB^IITn5!V3A%Bb~vY&3 +umf%Hr87TK4?&KK;Wos{Yoe<9z}vozawGG!aYj+iwjPC1k>3kJ+_bKcs9zTrXN=SXn!mtDMENukT*38 +U9I#396rg_ceZrxVb*O}y{38frcG-b!c13thht>ix^4Pl?T>yTLF2{3M?e4(68eYANhl6Mof=EfFS+z +5(9);B9aZL{s#Jmnl4*%Z2|&)axrM2zZ={3Y;S7_|L~1pEx=5H02`(?{Z0^o4{ +`PvaQbNB4sg}j&&3rV-omCO#}X)sm;~r9j$%ChE)Ely*dzq{F_yRYCV5`$U+P0FZsrif#>JHVZ2@4eF +r|v0ZaOGRJcVD}uka3{s6VUVa%CFCHrMyhf#4fqTj)~a +))rdwg-=6v=s2NEzujuzN9%chd(rj%q2+9MwIu%i@kL~x`tOh9v53$EKNk3+U+Vr3P)h>@6aWAK2mt$ +eR#S$EYt^#=008d*001BW003}la4%nWWo~3|axY_VY;SU5ZDB88UukY>bYEXCaCuFQv1-FW5JY=@#X< +@-@?lGEUBrq_5<(goQXY%4wwIi4#oj83{@yZ?Ak{FBdCUXU(vQlQtHG;8v@1qkHt +ANJFFqL}HB>Hb_^24zz7v*t6C;7OeEc5=GG_geQVF&rzZQVA{Zcs}D1QY-O00;p4c~(<{b0001RX>c!Jc4cm4Z*nhVZ)|UJVQpbAVQzD2E^v9ZR>6|mI1s)2D^xWHLoLhL;3SnvaRB4YkT8$ +}rY5QEmP=zdSQ{gIC9#CR-ZbEmBNAa9Jk*kqve +?N|MXM3lR#1y0hiDr5`au6elS}GWX)3OTDEOltAt6i&Ej1OWCI)oRUpZ5ww#bCp@K#V1c|a3gDNArU| +cc2!AP136GD8;I89~OS_0gVM5+Ad`Wkq5&%Uu7Vn(}}*j($?wbl(mMl^>|i<%NFACnD;{g>14f3>ao( +tlq4ZCj&YYE~5YSuw0lEuqRnU7c*{Rr|&wcnMHD!HE|8gGeO`41e2OyP!%?p<>vmmiesnbXwfoduQX9 +!SNfjmswMwB9xH;;4N$y40=szx6f%m*r(i-arjl{M}4zVN+q5Im(17gZ)H#aK%`2p)(u0(nF_;}gmhi +T^>sy50z~efi~=594ERd`DHN$vf<5i@G4B%=B}7Afw|xSEXIP0msbaX=gHDV$QpO`VQR| +$@nF8n*PUNUG(Tf`Jlk5e}(J5rlRAP1+{}n#LQ~P%ZnChst&II8ojzy4|iSygn7h4maDYL7Kg$gCLbj +uFyvyJ-tkET07lWjohx{O}OaN8Gq<;9-PnInx_yInuPosgNhJi&)g&q4$Dq_7KPaN~-heI$dxoobnb(##}I!%snohD1TPTdnrbx42kfLLf^sbwPL$ +^Egh#XZdCi~HfUjP$BA2!~Vscf_$Q{p>OD@j=wKveNYC=mqXk7A5cpJ1QY-O +00;p4c~(=)#1YeR3jhEWDF6T?0001RX>c!Jc4cm4Z*nhVZ)|UJVQpbAVQzD2bZ>WQZZk42aCxm-ZFAe +W5&rI9fu28zN+tQN(`lV*Qd!o;P8{dPcE(L@mjhFf#4|@F71F2L +-PDNi;<{Wgqm;C6r)Qy%eDT +`8?X;potc!_7R32KY;p(3eceot+(vIVP7p2GbWtj)a25T&kzXI|Tj;Ni(q52mK(TLV&3$qwCw0CJ9SD +{`fNsWM8ZGdOh`vF9o4QC{f~xELagL;C{|C*&h%Z$S_{wBT8fnaY|^)Vo8#ezih~Yr-Vk4f}&EU;bSH +l=mZRgrywec@_EhViqA>!ISnQA`aSS>6~aj1&YVSTNhO;T$qCO=g*D~zHHU_Y +$7RM6Q?}*oIJtd6cW5btB)mQe!J$6)C+IWX2@Pb=>W@BCe+kR_9CP3k*w)542;Q;iZI`}ZZK; +@n1yd4b?vSOu^hZn5v*#MN&$Uwvavm$twU(__7U{j(eUV{gIP_Xk(O0b1wbgk+l@kSb#>Z~D;DMNfqQ +yCeVv|7u0Hu^pRaFbr#)Ddz?~x&e+yF{7f?prAUael@Y0A?wkQwbq8i`^!1~-jjrC~i2`@cih0RfwFaVCO@3pW3~G +f{K0H0Vf!eur-=lD1}GrMuy`SfZLM#`!vl*cuiDR)n0;EjcJ!A0RaX#GF41tZY!Xz{W5klgsOK60B$n +RfTD$7YtTD@Vn530tpq-$)q$a4K+w^45Z0+RDr~aCAakuit8ea17s5tKy?!3+JQ#+Q}}l +^gIK2w=_i3+!Ry`c?;pIo-#l36Ls8KTI5xF)VkaN +7BXMyodjq~|>+BwdHclWP*`T%3xQwP2H+a;eNcc==$^+rhWb;{Rkh>puWot1EmOK_m4z+BS|Sb_;A$1 +1T)bbnK?X3BYpbMKGasuc9o$FhY}I(#rT(M$VUExqZr`s#a|=5|907o$8V8tp{kpl$p)^r0ZBonGLBiR2z_ZR^%l|)s{9=Mhzs=+Kqb3i; +cT8_wcvjo%0jnVIqAca95NI0NiO(=VUK&6L?(aTbcxmA~!hSAHL&zUINADx2&)}n7jRa!Vv!-ej2zh1 +vNR~!bZa7Hno@7$`T6~LLIS0KEVBcPsJNXt;BJZ4lHlFSU~kvy*s3&dgG)6N`yjWijjDZ<3<5V+B9LgMJeQ0n4(QLXtF|GvKT51zI`l +O990*PfnpvH4GWPZq7t@zYoM$wj&P616P!@s9y_-*3ZdbO!lweNpz0MxyCDK-2CQ|6za}x=>|&;1C36 +za4Yu1k+Z@CqR4g}pS1AZMq168?b`6NO +ZWZNY!XO`_tt8?DA&P4qybjFs5H89U;KCUD~&2=QkY=Km@;b +PaZ6QntGSU1tzsh3V-&GSJGynSoc*lNRm!0c)ul*N|;V8C9x%%&Yn&6f{wqTS9-O1H{Q740r=Qu;M+ssMCylkvX9O*Q9Rxk+ +i)xv2us%}olU!c7%`4sKG~Rc@+Bu#KC{9!?SBR4fC-ZELyxHBD?~&#QMm0Odn-YtM?!8L<_rA +8fjtrP8r-tI#6K#L8*mt&Mq8-Y`Jk9;>fc*74$LcemaEh)urk_r2b_Hz3~rpzpc~2<{#jg4ez+el;MK +w%>K39`MF_bhkOTsG|0W%Mj0lP}F=ItDMW3Gd;E6qwz+aAUNCJj)PUZZG%0Zu}dAW+LKhh(JanzibK? +@u|bv!^~q|#IHpE>$E6AKxdGj_BDhc(x3L~abv?DOHhxKn@yZKRh +{atRGx%eaT4hCHm-|WmQW>=godtu)h7sep)`+TUx|HH?1uP#)w9SOcBp?KZ}nw(5eUq!-bRco?->n?{ +P_Zl;*IhpXgK-Co$Xw)f!-58Kurg}=+><=Eu`RY_{T+_HySP!jwppvWK?KjIA=tAz`xLMGg?TvL`lOM +#6%jdH7$+O1PKZ)D7wdws(39W6#SV{%+MUb*QE5R-NO!=BIwIM!s4iSYh`yU5Du2FAxZFNbw2-U~TA) +$|gN10@eCSbFqReY;rZ22xj^jc{#BxMnm(4LeGiF4AaCe1FHfKrwW$O-(;`ExuVQ@DcMhdG5sa|$=uF +qgDm1_Zy||Js{?9k9U3FzydX@5J1xn;N7bn7v$}b8y?yRGHi1s*~A8I~AFd5bz8N#t(0QP&|L|3c1#c32HX +#>_Q10;{O(im(aR~GSdHzB!nq|O%~JNE_jSBtRvHgbx>gC2y@5}Y-w|4E^v8`R85c5Fc7`xSB%udrmGOa773|RB%lH8Z~#=f&7?Irb~Sb=`S;k)m +y_+%ja1d18IRwadE*(Z)UhVMKN$F|Br^vl;S(bxu!ftLuNEo1zyAP>7c0RkjUf0ArN#s_B7C`Bt?%yF +P;h~1#LJ^11I*xGZo1u0NxL_KZ##>wbrcn(N=TX1+^7?miyLUY@2u%TeRHNLij)Pm(I!`wfeh}H#NLE +NohdpIJ03BgL*EB{d=LdOu)E73 +5;74Mg|2*An0|IZmb8Zq_o+LoK3S^XMfaIVu*LG^lj|vo|lmGpd~!S1v#?Ehko>NT~6yGWMw?!HLiLB +K||b``2?^d^gqCXx}OBx#5_858L*9e2H>!T!GMJt49o+%#%Ptl=h`5}{Rqq_A>F(>akaydqaTl9Rzr1 +!vwFUHLG(01Tkt0nG_@P4GkQC`bZNURnPht;4|b=7B381EbHvwnPILm-*S}A0)lqPCrY`R>R1Y9(jw1 +KFf=gSfz}1zcf6yisnh5rCk;Vtkq#qJL0J0|XQR000O8`*~JV2pbF$Pz3-092Ecn9RL6TaA|NaU +v_0~WN&gWV{dG4a$#*@FL!BfGcqo4dCgZ_Z=*&Oe)q2!CE6Oc1m*G;H4lm7bX|Gv$as~ksujX;2(*~7 +W`;Q4U*9tfhQVC2Nn2@AWQ8;5_8rb`j>(8_b}W911o?xeo`}4ZeDat`U`NhR&n|3o}cRDZ|7f@-J_eg`DDm7}1o|1eWk3N)5=8ceb4WfAqb4gKsnS+qv%g +xk*T)8Pd0r2rCU|hrsX_~I7t21b_L6Q6NmB^LA?=0=LDz@Wg={k2KpNjd!_qvf!!cEsyT5~QMDWSOS_ +M@KShV)vz*0yq&Taj;DPVi-Nfn-+&1E9p%9K-S@vTLeVPzwqUVxvjXSdUFqpBC`DyX7JF4$fXRZ$w?|A~k$n`hOH$z36(;)mi%$y%AsD +!a8srDDDS#7bi&}H_yZ-6C<2Eo-cr1w_xkxepTHY5f&4$w@MEpp{IMDy`JKIPQEc(eQDm!{F<_VpX~p +4#NJ*v%NQ5VhyHGmv$PAo5|Zit=)qYoItpEB==C(8{Mrg-& +MSXQ^G#kjBhPU$JFtWCiFDIX#g#Sd7Is!mBO0o;ec<;7pP2y41N%;AI28kdnrWwKHpScx&dw*jX= +TC8q)lf!m0s2LFVdSvq!nH}yy7DGC4^5vQ7@2(`u%BA<(Nv-N+M2pG1WB7U41RzCMO}kW +Vc*hWxPsZ{7hITEkIh^jVdUWkb;`zBF6ATNVoeX_NU>FV`8xEk#70z#q(X{6ovZi8LJK$&}}^@yt<60 +4DZ9oECOlNA204+FNQ%}^{-l=oCTq?84! +rY!P{FN47!iceyqjd!GoS6?fu?aq)VKXI1q%dsb{tr=1R{-HE!o4|6%GlcwYu0V}luwWeg15ir?1QY- +O00;p4c~(=RDAwlg1pojh82|tu0001RX>c!Jc4cm4Z*nhVZ)|UJVQpbAcWG{PWpZsUaCz+*+in_1^qs +Fb5>gBa-h!Q`Q6(bTm^e-ysK8O;C$yKrY_iOt+1X$!tKZ%;mtAI-1w#^7eJC&9Gjs0uaUFVWvEuRFOu +&0aeKGSXyz{w8$O=x{ol_6a#}{yV+)Ml{C6L4+p($xWN(fwE_4dk6l;-@KmifNA}j5k>Dg@mH{dkye+etp*a1OIlRZQzf6P;f`Vm!p1vpx_e)_ioPy`u)t}LeI15l<+G$WetrmzPT8FylHyNGa+~!WP+qF%an+Tk9TRqk< +hFbJee|1P`W;pz!p4da)Bp-EqJL6X@RJq0<#WR6c~>P2f={Mv&0uN)ureApCP8w2@zYSEm#r=80TyWV +n*`NDsG;|Zp`r77i$)w%={F58aXr&F`!I9n6Mx~>BJ9bz>qU;j;L=RIn4Xkg1s1%chTIA536H_aRI1w4AR`lS76(V>JomY6$uz~> +(wwUHxhMPAn_~s`W*~nLuF6t7VVR5_HCQBOn{>>YB*{s0Ib0p`|$XkJD{Ph5(6RR*Sl{ryLCy7y+QDl +wT#k&JWH+0{xFeFx}E3l!kyF1IMB3RNzMj`pBbZLP??7sCA+2PlUssl^YSkudlk#y?|`EzR3F5v1QIX +89am+NgAi&>tbW2aD23#G3s-nRImTMkiyO3-Ob(2MDrgf5^=)FY)BU;&RQlf?BF<>p(n>1s4p861)JEva-@^!nSZ##9 +GDfUB__~AOJ{T$G?a6L4FC@E+H|hGLQGsC&i#_577nfpJXlPnvVAGv23zo(rX4LpVqgv+X_xmg>hS-a +iy^N=f|7mEgGC3!q+Iv6gnUBK|SA!V$WP$@68(8}|@KX}m6IzbcvVAUpAomMgz*6XFYHve(?=!r}w_f +M`);%|)HNP%pixOJ)SPt%!IE6DSa|bu2qq$yLGR_GV$x81gF}+h8QBIEaCU+pBM+RkJip49jvtn1|W1 +)T1LDq)<%USA1u}ITgMJrQ{>;33UmI~we`xdNr`TJ>X*y&SK00pwvmqZhbs$u7zw7||$xNjcntqmFZk +#We{iG*WuOj1>~#)osQkm>q +8J)O{v|thQ9Ji&q#T@r;i+7{b>O6G=4$~k$pha3HVFD>TXf~Ix6f`}Y;Tt3r2!td_Qu#zO&XP?50>y1 +DS>oVx(*zckkh)+G9>;$X%&F%Nd|Q&dU1~toMwv@B?p%~xx)!gIO^4jBf}6ss0IF|3+X0bD3SC^cON% +jP(L~LUwZJWNXRWAU6IBM1q~y5cDqE}#%hIH?Lld0>z2R_l(ZI@TH}}zE51A)FTV`STjxDl|$%hZNI8 +titnizHYU#n!ZBJ~~|BtHF`mRj3eBrtU{%)}xSy*ver=5_=}t&;vN%XGVrC|k-YtviV-k)u>?Jo^77; +D@1FHSUttV|r|EPUUrOKc%)u4`*{G>=w9G)0`3#k;uW^a|&ROgHCg!*(Wh2Puc1v|DVw4%WSr{c^C7) +)yto-RXOeS_|c~Mz0GP%n|`dF9HPwuZS04%(Z2e>wf*GQ<~)c*EQ-go`nH@6aWA +K2mt$eR#RPX68&8P002b-0018V003}la4%nWWo~3|axY|Qb98KJVlQ7`X>MtBUtcb8d4*BIPQx$^z2_ +?|?XVWHYHSy%v6{ki>WefCo#I1Py@;C%Nnu|O>;7g%*88; +}AqaO3p)an}3)E`KJ&hyI<*8};!`UOx+0|XQR000O8`*~JVEYrOXU@HIs7oq?F9RL6TaA|NaUv_0~WN +&gWWNCABY-wUIV{dJ6VRSBVdF_4ecH2gh=zl#$FEw6*4h38GOg^;3>^QPK(T-zzEjh`qqG2Ea6cK>{1 +Avk_-kh_qv9EWZS65ZnS64Uo#lgb^5tm6;+#HEjGduVkf7#pL+ZV^> +a$RLN^F{>6Bk|<%;nM^7=QHtbRzz!Y9{rRpLumFgi_@Y`6Va5SnWy6Qx|x@SI4@_-eN?65MY$@HsL9| +r_>fj2g7J!`%C1*U3Eyt2G+m@cgRsuiRJ=SrK6!P15;pG|5fzCzK6`cX=Jcz#7iVwI@keO4H>=8pm`- +P_W>uxrsmK<~vV!KATB_)NXbxlgCpt1NG_0_X{Ca^t~N6oL)!qEpiZZ!t%~;ZPi0onhkBW3jeJa>EnsiWK{l5cLd^|!jcNt3Kf<3|11-xY;1nIh6@#pJ-%R +_878d^5%|&Lwb@QuC$(o?V+iy<6nfGIoCa*HyYA>G>Hyw1oZo;+vOp5$KWBFZMW#9ONZy)*utSkgDh& +G{bV$0H5{e7IN04Ra2I^UbPu4)rJ=vf7;%57Ugx?cA&2;D4?s;=nixT=;^E$QH7dW%s>ej<^5P>g@_| +ul#M9TG^s({>Q#jd!Y=T%E*Gh|kJb{{bOrNWR^^RSf&4SdKdlLT9L&qQF=TvS3EndbW5SJERm^R@*2Yw@ +I~W)BXBnBTt$(c+Ho$zOGM0ZIq?26=c2u+3Hbp~Zwv}vQB)H$?45%nm12Q6r1+E2?W7=XN +H!m$ph^;vj#Fb^TwhYVIBp}EmsY_k=nzNc1fIws0;8160sK<8C1B6>Hy2a$`TDyb)j1{AOY-(UwcQ&Akl5+EB_iZ +?Hg#ixf){s3zmtr$cgpN78=pSHRh1>@+^BO+s%rOhlXtD8s2hey>c#;*Ia=K=RLhBPM8pc1{jGM&AmY +(!GnCPu387p+C+?iKYc>d~Kp!gn%f%pW*T~;8~Bgq;t836M3vn14tuG+9mzwbW>$A5npNmb0q); +gSf=ZchYSA+4bmG9W>9Hp@^G7UF)M#d8B7CJVG6#Pg_%V$@gYUsb>WP>CXsuG3tU(6VCT!9FO{2PoA1 +I5f$lF)*>mJJgsX7oR(bcchmVi3_-+U`QB&EJQ%(!4i3QU1*aFmP4Sa*p!sZvY}GQT@?k>L)k2=V={B%QR3V9+{-CJ3jvziq?IGz9fo;W__VqE` +8;(NW+^@+~40n{E*SX!C2-IMEuq8hld!xpge#Qw$@>kBt%5k@TfbLVAUXyHw7qCVQHDx!zx*Q;_}k=; +b;d0v6G1ew6dcc!1vh@Ro3u_a2TSK9U!C;|Mc%ev`69TpI@E5IXQlIe$vTNKw~57L9UGqLvQ;V0cybO1kQWsVv(8G|1Te$i`WA}p9%K1MYSt_b){jH5Y7OLf=8;F=-hlYo^Jvnb +0~KxJ_Tq4x@a)gTUt@N8AkT6bt(;{>;);|jdtn(-@U|O@W!#9~Gh{V8x*ZCWujj +o9g2o%3z1{eZKQVb%^NWpJ|a(wdUVtV%a;`Hp*vzG{net2{8uWwJ^oID@2A}GB`$0@5ptxRY-C=9_6G +~`d9GoR(nD`*S?9T>U-S$3PQ$KnpjLdlQF@#cV@(1HvNSb4|P$Oeu>OTfH>Zt;V-*?FX9r4};*8@cRN +tz1QiYG2M6rK~LSHR$RTc#@zRC(8ulZG?TbHXAiAc*M8F +Mi|@bxzU$-Tg5{+_wjVsI7)2JsMDnOQShnC6D`*cM;tJMW=xt-LnH@Be7C(Bj{YP52q6 +R2Y6O1$p>MT!oZEq3)DL_sagda0T@0mjq*g50>IZeV@dFXGVH+AfwjYaV8K4I|){_{GMjg+{L>`F#TV +Vg7+Jdvf03xi7{zD%&u!Mj;RSAA91_7U~OfW>qAEQ73q}_IA!G0K&fY5}XaRh +L|A%cOdnL?ptDa)i)>!FWVsN&(FjS=6+zE#i|3XWl|@LRo-NP6ff$UOofcbl%e(lr8K}4yr5<}4cH}r +`0(~Vs%~m`s{|f~(`k~$&@@~v6CiaUTXu6Dlw(x%;z;B}2(ypPj2M%l%B{|)GBJR-6X+mbfMc)#2W3* +$;fv|nU&Mb1`1Cz|8dJV+f_Yq9{~x +g2nEl|2t*ji%#i79-AV2ZVuj$yWSC`%^Hq{cLSfq~&0%5QrBd1qpfT=YL9}adg+jUTQ5{#=vX#herY8 +(-IWSoyqmI{Sb3!k5k6oASfF?dJaoKAWGQ|C1p1>-*qw>OJj{w3!@9@gwugZ=V +}ztS`Tl|yX^QNN5TQ~o<32snaPnhMCwHkAA{eFwfP#*D-g7&QSW^pF^#F$V_?Zi|q5qaDXmB}!n;i+Lm +$S|>W7W?gQ=3~`~TBqWeB;j|XaQ2jU}=K-lLxeXtE(L$DUWC!rBtfyW7%xy0|A^6>KT0q_;Q6W>1O7d +&5E>}P@bSaq@7spqxp*(@x7Ts{J`$_m2XNHhc^!?L4 +u3GzBw&eM;E2;p2qwp0_TYjZ#vUyZTO;ZKN?+{B(rIJ&koxE!t1m!P#M#Rw +m8rY2tGJ8CGtY+KAtH*ZwM?Gy~5NvGF4GsJ*cfGYNU*u;4W%fMCXRy_tRSJHBVV+srq%9s +pbLR$)?sWBjoZeTtRu1=q?)i`~3^yVf8e|v +Nohn!53n*-EAoa%xK{%(&4ds(5=B;*IX&|A$;g7Jk_w;VPf!@XzO>PKdO;1gQ5}v8%K)EJm>v3h^Ve( +T_3C9Y1vRCU?#<&lB9xB5em=8y1$*jsJR@J&7b-vAMrMbdc@zX878w$%?ULS>0qR{Bv^f5KzYym1+WIHG|D+Iq#>1J26Gq4KXja^@HG@KDAN +VYLrM#pRdBoFT84WZBfc%NcR0d!td3+Nf`~7(&9xZdk65brfBy5oC_I7q6T=e;&&oEpi464Ei+q|##S +QA!;P~wM$@$5}$W5$BD88n&!;>Z8mEsiwVNLv^{mIm+1HEQ*R6~4HRYh#7uW0V1O6^E#S;)c80- +mcvYlzWNFoOcX|txPKs3=ladqivTts|H}{*AP$m)r4wfCxX3Dba~=tNUDC?pvt(N-1dYnmdUG~Fp9?* +eWW{9N|I0apdN?^y)GpFA)YOXz@uE*nyZkuq2fD{ZA#NlM*j)(<1wuc3zXTfgz^ +~^A9#BIQ3ZP*uOgaX8QKx#pj&LS}jeJRVkMao@D8?N}av*0b_7^G`aerei&RH{BR#$eKHytvM`0kKE* +&O%4vQjVS62?WFB2l13@Y;x!c;!HHSAgZ-LJ(Albc~&=EL9`YK9sCz8#i8>|r0y_QnNz +Vyl)yA>?3kvtJ?2dLAY2cHSxbN~kIG%cGd#mq==K^O>jE5EZbxGwRUww?^5F54PoE;iXV9OL@?Yz=U8(Ih}^K +sr0(deZZ^)IuK(@lz;~>bOAO2ZCyI6hnnETa^>U`!gN|z)4C~_fun~yGsHi+TGR}kU|!Db9H5;xxGp< +!qXFZ3IJD#USym)dmY=}UUA_41i|10?)B>y~I`b!)EaOaRX|gD`^a1UZM~qtc?7_aSAJs>cSkIwAELX +5vo}C|`o|5m46`ZoFgGTlM!>VJ&0EIxe`UA0?%6NT3-;_VpIhbb<`7NL8%u}LL8{&2S_innu +?}<}>X%{2RdWG68f!@16e?>2Ll0tH_lzHQn +&q_j=jNHb=!K%0|%KLWJa9MfB_UIXScSJV8(;{*t-v2UCVxnV)jc&T1i1@dQ9A&dsiF!-vh-I9^`UkB +v`>Mo#6;tGZyD_FE=1>!HS(Vp$x{&AThu(hutl0q3U=M?KIpp64>7joIB{kY7Ff^HPpZ}|cO+VyFV&W +Jr(}$-PrWdY)DK`OZn9+-B<&+l6Vd($Mr$_eYpKDKT{H4O7uKq(4+Mp3s8`SN*=%F47KOx{ZUokr~!m;dzu5-$cug +NI-O8eZw2X0Bxz)pk?8xBUV`&cOq12yaGbpp>bZ)ncb=V6XybZNGw;E+Xr<{PC3-cFbqR?4`4X7wFmk +`6cF+eliQT?z<`YoZrj`wgC%7bwa8oGFox`m=PCq>cq_^iPt`C1CVKTZZ_UoKnpUf#ka<|zL+`YrQa? +Te?c0`9e^favvV_}=DQiPpKSA$?HFlxX94#7Kx2iSG{OaETMf>qEgnxLiuhfF6S;1Nqnz^?FN$t}RFmcuc)g&zNoIU~W_tkK4y +vl7i+aHS#xTfZ5r3f8xHrrQa+BcX1qjIlJJ76E7suGCpDfO-V#1}0~g8Dh~F*jv08Mqtc^RTW%kK)Zr +>S$c1zD=;HR*B0fpSF7Msh6b#4#aSKBJcZaiYB&o8UgL6goo6v+c48yzq6&+r71#7eqUuxS}QWuoS;k6JZ +0NN^YO=4hRJan@RZqYZAp=(o4p-o070s(U^4cBYb)8tx6^4Yb|a{hLR&xt6Dq2OlUf +qG8HS~P?_{+W@;V$Gn;!G?Ps^J9Lex(Y;vG6!`N&~%XFm+ybMYTNCLD8G-^Fg%D&8r4*7he)}^kqH7# +A5@dREtkKfYj*KTk2*kLCE%gZ4M5Q5N|JD4mz+jdiTBzHeU}MAxr8yUtmpf<7^I>eN^2(@54n0+dXh- +=Zji!WikhY$1-e$igOe;SYH5iCuyLzbORgMPU6X2}GlCK3hG&?xGCJGD#iCG6)Uld^TjuZJ!o+EfKK@ +3Lq3Z845Td+|bwD{)%QWP}qH%tx88{lr30CO}Cna^)JgVpFhz3?5moPb9z|fAHZ7V>+2E8M@&}211y- +Ap5y-cwVl!&lwT2k483}!vwh$jN{b^nv=-Hsf{i%9( +9gt^23UYaD-#Pt^!tHQbr9!xXc)7+R7m>JQ)e|iR`yS8P+7Gvl^(77R! +;Z|HO*FJg>`A<=CQx5sG6_!CSSM}Tp3v5yt(uYO<%Lohl>n-!!FheW3(VZYknj-s76X@j>FWS0m@8l^{Um2tn16IltZs$S-r) +P@=_1Z<~)*Zu_Z0@&fj(H!#C(db6zAQ7mE@e%R>|{Tp>QD$6g0u0i!Z+!nyi3ik*of5p0>mJz3|_&)5 +pOKy&__}WlWu_k7s_GhrcEqsO)3<WHp6ha9(F +e3Y+(JH9ZtImDMS2ex*4M9TnHU{!AyN@^Vh#8(l#%>CV@^$eIlFfkd8g8ATUmo=NMh=n33Jz7w_M{SG +R@XPE-ie3BDr7;c>Zm1ny(DOzTH~`0Ue9zj*pc1l1R#y?ybODo6%j#TYmk$;1c67S)P^XrYT-e?NwQ{ +(%2{I;NUe)F#XIa*cN+zviff8^c2|uyj_dUS$pI>#T^&YKi$4JXr*u0qwa*)Jlf%VUHX)bFPeGQt5Oh +<&5>Wt?6O{m8=$v^>jCYJ=jd6YhXhU9Vl;h*Ck&OKd;i8RUTDsasr_+*hb)8cU7hX_8$u$QsopPk%J52@eG!k)8`|0Qg&s-GXilupKU)v?`M{%Bms|~9k>05KQ3*ZNIb +#9FZHLzxhHVn`F1Q`oqT^W7JoVUx2te- +hO9jglWfV9NlBFw#-tC0IL~g12yakF1Rd@=nzqYnKHdhb!z)L1wP1Vu5h%oR0Y4?q^?fP{5986{L2E5 +hQBZZAH5FpGImIS#3n5phd(8=ip?J{3-Jz63%5_zicCu=RYBHxg?gR +6Gmsf5x`rB_Mv`|MttocIk%Oi|kF7e}7@V{u!ulfeY^*9mlf9X0})2TdtXA9cyG1i#mMKzdEa=>Wsif +oyfPlIeM)+6!9$>d8>CYRaOWNot_4^?x@mqTI-O*m&!%b#fNan;xj9&e6Ry=2jo1SM+9zBwi@}*sm)fh!Kh&IgXXoAhRnUlk?Kw +>3g#%CLd;b=GTJQ3D&U0f51_K&L~W_iU1>?`Y%!QrFcJn<8-zZ^)XkVb7U?_YiN!b-+x7Hij_dy2M)) +fWgYL6?j+YrEpG)RY!naIDj!V8-e(}JllFUO}=72Fd-x;AQ8nIP(g{<*zBx-m0q$~Y$0D63Q<<77|b6 +%&(rdb+oQJA-g>4&TR)x_>tyLXAaEAJ6h|`#uBMEgVz1|wK1vY36`~Woi!k|PIMtxf?LqGqj8&gOQd!J%N7{A +*kfj1!!PWG=?gJ|FE3ADoGBM;#x?|fK0pRD>@TdRbc6VI=Zh=TyjILfCE13P(t%DMVhgt=%H5Gjr*AN +ZO4mufx3NuYHT{z2XixLGKXG9qci1y20ZS5o9x_*yP~AUR1QV)T7ww8Lc1{V^M4g3!qHA$s^jE_p +Ds0xO#?BYRw!-ZKC!Lb=mIt${R10!gN$ODd4`L`Jpv(M1DI-tf(5dSt^BZ1lqP3f|HK +z)NQIKo2}pySn0p%+d?TP@K--0o{s2$t-p5cuW^enR|wMawkXV<=>+2Izd`@pv@_1qSiL64;NkwO}5( +r^o*?Bi9CR$=Tpj+*McUXz$OPvTlb$9>NZq7nKb5CD^Wd_-km*aQIybLsC8^Y{g7cwg4ZA9#CPOebkC;?It4VY?`#Jm`r@UP(2AR$FAGw@u?-p%l%g)lXAd@e +m}Z3EE8_#*B6kS=s_RHoJhyNIe=k_o<3H`u(}tm?;9zrK(mxV;=FSERG=#wtc=4;&*Gox{|0xoN# +D3pyOa`_it?l_jBi`xo#rPxGP((`q!Y1vEGRY5@ECPm=Hs5Rc6ukBDT}nu1DvkvlyRmzS+)d}aI6jzI=nOm_>CHK?RpFRKCl4mmZm_VYbfM#E)A&6%l=l<8KzQsppaECTj +ZN8`4$S0(lJ+p!K46NN+r3S&e)=c{H_>19ti=P9uKHTA1}!px^FhQqVxZL#V3CA4K#i8Y1Y{Z8Jf;UX +}4>#_w6jiihf)1O!17~^ie2za}|yvdv}*<#u7L?@QRdW46yiJG2g-Sj&-O4WAmdHh+cShB`mS3x#wch +n{m+yOo=7t5&1YRtZrKm_(%&z{pOLa17x#tVoW_xPR6U)#O)HnBcHpn%{muLQH*Dd;-K#zO1AWILA^M +UEyD{K%x>EgD08p})>Pt^C1DV&1Rn5Z0x9k#3~Cx<^*3a6R-+*)giuz;iWpdrxK*2YuGbh~bf?z8uW} +(^cxZTFGg1Koz>|ipq);-b%%`n2dwf&4n2Q-<(t>jyH7%zxU^D6h3AO4eJxOV8YG4xU{uEec1FSYZNj +@Qtbn%L%qBx>5?RckzJIQmp3<9amrUy>I=rAI^`FvuP9qYx-Uy)h13U}9X@@2^6KLB#p%f#_l3om(ZS +!QSNQMagD<964}T|L<7K{@%NW#pf%yV}wUFhzy^JDLb*G2#P?GU(so^VnMFL-ZqAp|5@0U9g4=VIU47 +ie{bRB?tjWrhQ9P8uc_(~uZn&GmM=MeP^u2GpJ_-;BmoW9JmR@YC;z5X@5$C7R~mxtBqA}K7a7pBl__9FErx>{~xtM~L7 +L#mgdRjC?X12o=8ldn18+n0~1PDv6?U8_U4nn&`L%`A`Ykwh^s^F-~AM{xu8vYme09`Et2`51SLV`v@ +w)I9W+;0*?YXXdQ|rY)BzS@Gs4M=5VV<7RDZ_&Yd@+6Y8LbBdwF&V36L5kua_Xzlhoxii#@9*}%{QtY*|AyR|!~6c-Ob_2boaei+>bKy*cKYu``(CheU-Q?hK6VI)-{~f&El}-P{d9cF*CHO((jN&d)dj8+CMhVhyw@Cj# +VVu)&=f%U^b;HHY?`phYoz^<%6qLwg)hfwF7v|FK|KPXJR=G}m*;lRVFUM!EzQtGYzJ7Lbaq{MsbLsW +)ufadR{v%$epS}AMW6rBjMn{hx;g5V)>&x)r=y&F+%kR$KJnsdD7ia%)|H%mcH}-&^pY;#_L+I~w`s( +?~_x-&tjb1-oIm4a)`Ecg;D1k(U(96Ecd1xpH* +>JFQPHUID{2iFzsZYU=%9~Dw*CwKLOYb0ZO>xPLYH$2yL}(&c@<45v9JZn!6V^mVY*fm%Nn2 +Cyi~{4SLUxV0^&_~YLjZmpwee0e1;nOfeyqw@qZAwxGZtC-iulCDw=Hx4JS39jY4;fA48xj=cn3BS)C +P21xg&YGyZ5jmqN8HSfOCEX1k^VRS;h+jz&7I@!dh%bA`_TFY2F9uUssY|5fmNC6z-rH%%Vq5jM%WOX +i7j=6Ywy_>=Iz*`3j74)T_(dJ+YeX_8xShwmrGt#6wXPz1g8y;jw3V^+P}gIl3xfd!?oR8$Q5fyW9#17GX{~f +fh^<8>yY6pb&img}NW1JQCZgM~f4veiX~H0UHBAP>y3YpZUfu2jXz}MBv|QAbhp(ege$sE0lmzIe0gvY`0r6b^rGx=Uv8tPLu_^8 +a9innGsZrh_@1ek3b`S8P$sB8RXA!*}z2m&bj4MXM7#|J;xAt8wApMHT*duGPVxscIV;cr)@Y)$D9Qx +S0FOKO|>F9g&?tQy$Z=Z?e_p{2Kmf#XA-=v3ntBxCCP^zjQ?2?1q(N#~1Fb@2$e#L7maTYxXQ|VoIx- +Ohr_7{fZUo8cT2OgUcyrSaEYe)5z6wziA`?ksQtXa2LpvyPhsKNoZqgWw8X0#(AUgfhzhc|s%&l3Fq3 +s6e~1QY-O00;p4c~(<~Kx6#)F8}~@#{d8y0001RX>c!Jc4cm4Z*nhWX>)XJX<{#AVRT_)VRL0JaCz;0 +YjYdPk>Gd!inbJr251nPw;jBrZ)u4$t605G(s*WrqX3&gf$U+U8`Iq&3H$cHUq0&nXn>lr&yHJ!JtEL +mSyfqC`Krw9$Jx>0Q8sTDWqoy=ZTjWWAMuxi#|MwIXU%%smRHw(HhMPBzWD6(FOJ|pf5<*ui|p;Tzi# +U6eY5QEidJObHk*1;^kq{|q33%cvX?KOoxOg4Htp~Gtf&{+vp26lynFHI??1eG_a1+Qb_b6hJ$ifgHv +94q-(=-#U5S;bdjKnG1cjjB&i +~GJRFV!#CMR#p|t(vPVK!W<(=$`AQEAQ7uf31G#w))v$%QgQcCp%Shd|q}q*4h1BtZ_k;tQB3eY3HJo +E$7V&fU5TI`xXX&@kTzp6>SH-)YB``&${_F;AfJ3Uw4}|{wfxK;Z|pD+qAOdO7sQnL!o+(UdbOO*{ib +;r_WD6oX);|@$&5T>8rCz_QSuQoxPle4-T^U=jGXVr_cT~>@b$2Z~C&*Bd?3L6SG$QvMF2I*-17pU=f +Six^32??YEPR+tkHM%z#E_a@o=GTTv`#;vQjllkBdA%{O14z5mNQcrIG{^9Ov`jt>qFX0xKIfO1Z<^B +lLNEiX5?9r+~7{|wafqV9TVAr|gKd;C1nCd<#Ru3ps3W}vJ6=q*rC{t@PcgeF>;lBBpP?CwkYZ8T$4% +wXzgKfZnQ?!$YHVrZYQw+jGxBv(ECxq|@@p1pbX>h$&VXiK2672s7hJ$U}&{Re9I9vY4E7q8!cIDPr@ +>|GwEj{M!(vp4Ua=k(YA{{HO!hqLFozc=vc{hROKJv)03?fgkY&-ed+`VP8{dGHsnzkM@1`|$(LaY|D +x0fR8JgLzeST{e4$6f$Zqe-`t8d`x2@E5LtGvyPYqQ&F}m)@#6Ch8XLJ!x(@W9@j4Gn`~k2K<9v4h$Z +lrvM&4CY}AQrDTlM$;O7OjD2uA>1PqduNDTE{Opyx$-z&SUZrT;l$2Mzfku94x6EMHb-}-43IF38T6# +zp1_FwMLxQ58jSE2^42d5vNeGA-A9O&iDD^avVYk7tZvi@4)Z~_qf9+6n~h^(^jvXYmZ!7_WXW71O|a +2(D%{$yb4#bQAdpU{parhmFvWQDV(IBUHeGuva}E5(Xh9+SB8`@nGVwUtY1%gC=A;Lo*L)v-hS`sZ`q +<0C8#zl7}wU4U&^Yq6>N5p}r{zyi-dj;BD%qF&ICV|^BU3W}eKcVZ2a1-L7m0o=~4S-M2eB#ZnD2o&1 +T%0~TmUCxPWL7LIr$J62CF`=F(uYt-Z0CQe#Km?1cs}tJE6u|-4?wx~^k)+^hOtOZABh7p03wxD!TD3k2As5bUViqD@~F*N^?QmjVdL?@A9$DZimr#l5mM=ZAleY%C +C>+{|~QZUrGL@@iOpIdm^mZDnB94a50+<#(oTMK~G^b`)&6u^(@mn5gK!931>5Lqn%p};9%cJmuNBX= +Ud6)XoCS*-zbxy`J)WXoth#I@rdLyb@LXJ$Mg8>q%T3*HU}szS)^ +}q>Fen#bSlN)atE#MT;FMpNpkRPX0w=w}mf5nb1o9Nx7*XGrZBwJhJ+-h66F))zX>9>=96tL=A-62+1 +u3g~y;J^a2AyZveni5<=>+JK{h~~TC>P8zK#Fi4;5gio1{vjf02ldko58&4k7?P>5K>WsVzKWaC?o+B +WI>JEsa}{n7AbOd-=bimJ|TF2y3~9eG_z;jP7S_A9fC~GS^|o&R}>jE@)T5v?yiI#u{G^+d=M~dyApW +73`vJoXt0s?w*(`fhZ>WSPs+ah7=?jbr0iY24#aJ^xHuBi>SUyXQ1)1sRJ>lDRmG#;al!C!VG7BHcF5F^AMXt +5{U7t9Y5wI@02I(Zy1Y%fn2;&O8}%E{4`J?X&Oc84|%iMTZkR*(DZqDK)6Kw#BzT>$2#lvuI|EPX~Bvrc2yMB^LmK_IOsgaY)TM}^f%pq^Bg%hrN +Bswzdc9DtXdvOUPanq*P`R)Sn?1Rw#h#p<_8b0L5E28J)_6%Il;(M|C6dJ9T`z1TzoK-A;kh-!fWTsI +3%tT-z?l`y>)MZsuZbrW(!fd%@u&oHOyA5t72}^8L@k4Jj2GUM#72UvxS~4AT4-me00zXCoLaai +X~2-oJjbHL@=57_)WR7>&@yCxQyB4W4&VPag2(hSv5Ln&;eC1igw}pZV3M6RxStq^)WJ|49+9RNw=~1{x5 +H2HoGdF>r+CHsWFvYaIkR5_DTZFvog;qPrI8a7QF5bgsZIF4sfIf)Dq^H7`Wn=`|CU>7kEFjVT|QY*c +s0+Do$~tXmDRzv^e7IO$p?@0&aUBiO}B24rvemNeSo0V{py&SCyI&VHZSDz%YYXl3thp1y6H+j2p^>W +pr#U?D7o(EZaTWSLyMSu3%mNIGAGDwvuk``eg%p|*gG*ONwpmV#|Dp)wRBIB-4mznmzshL +YUXk6#;9x-X?;LP=yFrfWt(cNsGV9b%NAAz<~cAM*3rmkTQ}LNX$1=_TN2Sak;{tvHE;>BP>$Sdy5Z; +)jEf6&Nq{(mpLjfU-3A0dOyrY6iViRhh*85v@h4Y#Lf(=n_o|vZVY|=%?x#ZCgxrX2cEXd0Q;?o}aPy +%)uD$wcXA9RW&3pT3#iymG`6sa?)B@QAUj +u({pfM>2u51BejGhVUOmv^g2}oVlh-o-Zg{8HYx+R>dvgfOeOF?%b48Q6HUpMj+yI*(sL3Nl5=lpAED +7%=?k+SP>fS&IEl;S`awi=`wQXS5?imDZp!f0ypZb(XSz+^cmbX#igpmrqVB47@nAfXCR8Z_T#;#UF+ +^Ll&s_UOy6z6QRrm)<$3NZIrO1I(|gwU#U#x&!hZFmyMou<2-wkja*y +FwI8Jp`WM_x3T%m-vH~yT{Ro>;Ue-VYr988ZwQWz@3H%?1-qVc|Owbr#J~s_DK#!HuZNfF2jsg!0@aG +ju!w+q7TcRf)-TVUd^e?~4?h5;^7MahY5nY}49=z+~RxmWFPWJL1G@DMR0ncnG&i98u`x0`gi +MNinsb-znBCBCc7DNs4xtcjV7^12Bf3Jc&4ED?}Bx$vcoCK|@6sM#|@TqL+?<1j6;n4x306rIE#iixW +RFBNd0ArUUIM}|F%F$FS{Ao0{-C`H?s^G#K>8h9Yb^b-z*P~UJzI#IOqYklE`5fFZ7mNg(tO-KZbY&8 +$^4v-{d3MGe=QmtcadpIL)6(^D5Z$78fOTzoQ@F*Z7YR^@p@Ip!Jmno?iGz6kZpE!BiSm%3ygB0;{OR +#s?ZDx?$Xv9z|h7N;5GHxC?9407`$c1FZ47Kde!^^CDMH*)%wYn>|r1-5iUC&~PF17WA34A4@$U7op` +6phjOFtye0Ms9t!e-8~!)mhh$K|F3OQkP?#V-U#NQrvB)v;sty50*4U_;L>`M7bMo4UE9V6RKT#9A=G +BLtXP07vLMB`~=2JiV+~_683WlRWljhZ>yd>}WRm7?9jFl^|cLqZ=yh;!(c1&@q)@it5WU +W!Tf6J*}H4ng|$n}SLZjymGHEO%Pnf*tvyfNNmSBZEdyhq3@XM`y}C&Jmzw0m0wsN3qM$G%(s59hTS; +9PUce-}IZ!7%mrHZxZK@rJJh84I)t_zyX<(~|Q^%`FEy(({LinT^j?W)6`NDZRf>nsRD^U_;6xZFBU1 +K@zsK3&yt?_(Af!bBgoE&YQW=_u*<(23HKLI@w_kCM*@)7_37~>pEjqRyD<9wrQ&_h%~V#-*HSUJ^D8lu%t;&3ReI!&0b4WkXYgNLM5-SWe)`4}NW*Gknz;tAnvDepCvF*&A3o3= +$a;s4%fIYhg29k(!Qa*3nF4JT_aVU12T8h%?hnEluO0|Nvt&u)<05{eI%{k#Jb +m&rCaI^*Vc(9Sd38L3pc6@VWU +RLhmSwxVsWj#;~P|9h2mD@ByF~vS +`8l1rxTFZ?>p!13hTAzk2q-4~r;g$DO%JgUx1TzK-PMl7W&5|YTbm=23LPo7 +cuL*)YY8YDEjJY?UsX3I6IDYE^cQ%>s*BYKwM+tJ^C@!0QEOmGA^$SEs+z-u>;l#$Q=zHvtU*_>9vS^ +8&s28AZV{YM#W5~TXUCAzald0dd=1JLJ8JuDg$FZF<6^NfI$x-^z^awnMmesQ3&B=mO~II=SR`Gwl5K)WuQC2DpEsL|qj#vAlCn=)K=-CoIY?w<3`c4?*u +#(1KjHT&$nz37u75R=L=bx^4m?Q8Ere<-V!+o<53F-1uPTh`f*|=hgpmpeadk7uTlHsiQEX%*PnZZd}x5LR~%B7Q`@Y;Y@-m3JSg6}~*_B4q?QMXk_5B2WTHp^vs +j~YyN{-pbe`is}z9H{UzPIt}&W$}O79)?V+M^Cyx4QWUd3DFMsn}Oz_tV*(MQyg0e&9NQ*v1HA+Bh42 +TNrDpaYWg*v0mfz;2L?{F59B2Pjssf)4{hVh{iu<=8#Chp(bGcqFMXv6Sc;LL8f>;EqUu_r!dm!lae= +6VS&SIP%C$v5c{IwK9OVchh3JN6%h5N@h*8E!V$H54tU6hk80u%)UAn9JEl@+l1Bxl%!w2*kkOf|)U` +zI{-WAH|QmO)ZVv$tPFhdn+(85AU22mJGWPVXbg!7}lBIVgj<|>aOL7Qq4bj2zO#&i1_50Fd8Bjs9BY +56jqhy%2J4;aqbTp{jq8%<=+AL{T!7uOGUBc0YeyhzeyW?vHTUs_5#Rwtv7?zMH6FP-vBOs6UJOjA?~ +ADQmxIrwVn14N8CA%%9vBJZKRI*~U3&{&6LV%#RimFPI}i!kuST9>*3XXl7W+1ES+*d(5SrXr01?5mL +M=co=$z+^nqrDw>~(K9&^iVcz))Sl!)kTK;`O?=v0={lj3NsAPvE}z2c-MbupIwu*EGL!xg9e;-|>1) +YJnkBo&xic$`&czM2Dypld1$l(wyh}4Xb>|XZ>KH#N(H8r74$UC&h86@Md71-O>f0(TwLVcb@6$AaghYZO}_ZzD{LgcefdZJ2LHilUw@;Xt +rlO)c;#VmUw{4uM)Y!=m||x@m)12GA3A=NK40bzUY^q(A(HAaq~NKHVimt)rnbO{lvP=?<#s7FiYM8t +=U?xD$GO1_jz~}uT%dGxOb&{8dr4wbjscR>!4oU)!El+EJ!X;*rlPYV3e;-oiq7loPhbHJJF +iHH*tM!z`u`(FG_#B<)zonxRA~iUHQdQ%r3wAO4L|RXT&YW(-w(&J-P(c0~|rm@}irUWhAWnN%y293x +Vf4k>eQcCa&2eS-q#`aE$?rd=8O|A0{NGk%QXd%pMSer7t5JQ1M@|!OurV3viWhy5RUMnH`4(RxVK0K +)s+>H+X!^K}o<^vO~qNFAKfQ9MfkzF!aMSWIeNoHf{k+7dQ%s-MOk6AD`APrD}W74k%@J;eil7tiOEb +{^Ei_KY+WIG?ary-N9c5?U{X_tDY`H(J2X;H$!`8Q`yjBUQUOGJL<|1mT8Jw9Z2HBQN+SENmVq!QfAm +D&?yfn=DjmOm{B%*N2fz$S1?2e?sZZi2OAhp_vXk8pk()cmR0eIkck=8fCCz#&^25|)%PO-V4W1r%+S +aj9MSLtkK}x@=B;_gQb~r_AhvDdE>kJ+>T#1Aeb$IG|->heqxD^%FmCGF-pqh(&Kt?xOdp-}^v1Tm*6 +u@aObK0F{Bz%ZB1*cgoMn>jQ#XK)@+2fb&2}k#C1!AKcjd!~YwZAR8m*{zZf^nbl2fN~n~IAw<~XI96mw8}Luhoqo0jD}2eX5q8nGLqq(VKVF3K}bIgcn{-W9i6FIB;El!m +IL?MT&YGt~I&7!vi?mGws4M6x03#G5^9>3Mi&9+TTDqj(nSwB@h_RKjq-tWqtDGSu=PqZ&HX-ObroiM +JL(@7=e!>_`)Fo`?N$>)Ymzf(eILiJw*3kx37`^;%VdE2(c$Ux`r#`~`rGC)tWc&TvU9F-K^?%1*{eQBBzh1S~6Lfc!rO7TTaLT<(^HqLJ&;!+gm4`0aRo=NMWoW{Xes +J#asq~SwE==XY2a!n`atvN{zk41|=Q2 +7p-&CXfB6?b*T#$GXUKJlDBx^f@QaMsS5r60~Ji^NJ?s7q^C(NPw=q7tfjVD@6jDU$n4ZUot$`^ncNz +c7i2~>h$Lske~7JdMMS7fk4bw5CS9HyD=)2(eYE#dSx3lHX1XPv=0Tb1<_N2-1hgT*_))1nRuKw}TiM +uUKQ1mt#^#dxo3xv#qy!qgp|I`TY7!xc=wx}PNrseeydYbgp1#YuF>yH(LlNt(z^Js7y4}v&O+8rNmV +`{_V-A6;OFnbW+hN54TsC?wwf}dToz}*LBrgSa^Pth46xRL0YZlxrTt_cz3%BwfKwb1;>1%aU#9nFm< +&I^d%`8$;(&|>hb+<^=*mW5xuwXCKjLd`$`GYlh{A~)G0V0Bmp7DbubZu_9bC4FADpng8YoT>4kqwUu_0rE_r3U4brmczAWH5#vpqdT6Om=i?$E~+>EOP_ +@Hp${|kF!NX*5i89v&o5voe!dRQXGBxhi{_2DVTfn~0cI^ +Mte!F#=U%RtaBtrN4%eD0CMQeA`q%0Ce@*|XwLV_N+aE^a`;FA7RMLS*N8^nOVRGH9G2^YYGHsybsyO +G6g85`Q_cDhpL5HT-4HIfVUh&ZPq2~SPi0iI%JfPGf|rC3j6D+*TQw9j*53lU>NH?j&Iqu1df!txopD +cF;!ujD)JXzY|yr)%+AJlrni%TZ*~+n}0b(IpuB7JZEGw6Gn?LZ;hHtk(T@tZW7YtL$V@+B7>ufvYRl +(v_ur%H7m;yOiN{)ydLEgOe+e*kqSE;uP1HBgyBu=sYXth)`Lu0;9>nHd@rV3}n~fMg&3BtbY>1$;sP +d8G;^V5(1WgBINNzWjRyz4h@Kpt*Sm(%qen~evC^mgBI6+y1%UYM2VtUczD3H&JxwpymRsppI*u#7xT +lZQtzbY>ILo@hwV*DU8uxoWf7+9>@!rw#qe3X@(W5ha*lAF7>8+LCM5}24x^|Ti86LA@N6KzV^NlL^C +nhBCuAb&*@71tnO0}WBWaW5Cpi+$u9o<50#CTH%qIXKlkD>#tH8`!v2|uPd&Fz7-NBh2;x +dT9pX{FFQM``{ITqC;DYT!ffiEYIu?^jC4XmLCQ@H3)9>)%Ca|^`Wa>TbD90y5<_OAKQY=hmR(>s$6OHWN#&M9;{=Q~O;xTcg<*WTVDC-=1tlokYyRGNfx=o4cS +WS`l9-SdTZo0~iMMKj;%KxT&<9b0r}Cs96g-v+O>oK*?Gv#0aJ-M`AoSU(UJ25zHkBbb}i{g10 +7~$9p_0l^38Y`ylyH-sXNOC-@)nb_T+R+HkC*DPqi#O->`^?Y2ry^YbApgs0H6hqb7opE+x+^wyuxsNYi?KYS8ODK2Un!47ez3TnF +oW@=0MIP>R!OF}6`GaKSO)C>z(A2CH3!xmdf24QQzJoAp4ngw;v8(Y67ABCSI;9KJ_U;fmQC+jpEm8)Q_zt`i{A97s0U*rQ1zILJWf?+I{{H&5O3aNm2efQS-(%Z)$U +9ylZougWjY@!;flbi7xz9e;Yyo9d>1uQ3F_t23fm$4UX!A&;$8|fpNR{e-U48`MhF}YadGkXKfXJ{w| +>BKl$J!79ZD~X)`FyJ4YZl`MpjN32ZIm`2>_h5K2b4Ty5T@qgt@mPAOVGOy{5)*yct1FyOTPqTkEAZ$HkH`LGmN3tDRUr& +xL@PZs$mp(W~})bwyS=$6@T@4oV^x00T?~Mmtu)E@o^!3r1-Cyvd>@l%?YAqx|lV&L3(18trTHJ56D& +0c_$iMQ7cGQ5DV@ysEVOo<*J(z6tB!Fel-8H-x{qdr=lVub9@alf9*@KMISdAa +owu*$_|E*3Fp-lRO|%P*dv1wYFD5@sUVt@dzq(qrY~qzvGwb5lOoVmLpK)tV=OUa76`YjyccK#nt5eN +eS9>*fVj_22KkhzKZtj}$M-9JJsDGPg$<$YqBNWRKJ#-)TF;@FBFSCNFCo&t)QZOAZ%f(uue +&S=;T!n|*4zCHJncloA4eN#X3jDTME; +kT>!Gj|FmDg^2_X~;t;WM|4C~&{C8CJ|9?@@@re8&U_=we5pB-SQY&`KOFYqKlF +i_M4~mSILn#OPU=%ZchAig&qnSOTdRRnrB3AUb%GZl*%ilYB&se8BQuiD~c(z)69YZjx&wd2)ZqrhF& +MX1q0xfHdxr*eAQi`e=MXh(MZr?}_FrHqEdtE5cU66?{k48Y@#dBZu+yefj_6NW1vD1;5)_H!&QH)sV +c0$cVA}Ve7VM6Nf<37ZXZ46`CS<+Bb7$SFBs$$8b>C;F2o?3pD7P;Kyi;ONsf5&Bfo%%xwNCnjqvto> +$ioWq)2_`e}Mz_#oSRYAw(aZaHipWcpXpw`iADjuOK1qJ55kYsBcc@q|`JHZUv$^7UnI#y>``|%ZIRj +IXQLmcOP9*mLQ7BK{IPkwYJsdLT!iIE7wzJSgD#Bo*!&n9bTz?&h*5L<6m$kwW9u|IJvH9e!>|W6aCV +)#}fC69-)i;Wty0}2$hec><#=6j}obCY4^=(mi82?K%=ZY$@kjf1knr3e_-3)uzGK6KY-EfMR3klcstAk-8#_m65C`>Kxh|$kDB<3U@#dFY93%6NhedYzM`c0bOwZ-~6{tni +6DrDAu_hxp5U9?u>yq7`pV=DA+I&knGJiad1oC{{k4i;!>7mJ^ZIX0c4SOcy{X8NjFGrMwM{h*6kAx{ +I_KyGJMT#5?q0$FB}{o~Mpp392pWhVm#wR=OErDAbKb}oTYp+grJ^c8^8t5<^;F{%3BExEM14M-F$HL +l`^#?$Py>Y54hq7}wHh~=`Jm-Hg8wm?WlHPLcZzzZO0isX4ayr*q(f7>2zlWnmWz +O4=4tKjyKHn(1gf2@U?k^Mq4Bu7cM5za8N*Z0K$VJ6Ss$xul_661s??_c`z_3H=$~k`TxmZ>tPQAaA^gJNeu +tkhg6~@qPUMd9bocbl8Y$Ha(VK0{+OcpJu)^Q#WJMR?74dh;Vc794t!n&SPr;R_dLWXp=E;a~l|%4-y +_CO}$`nB#}U8-08pz)B#oaQ=T0%y0YI>(GFUvS44etsWBsuu|m2+f&}n+(2?FhuKKH7?4Rm9IxlhG(< +_;w+xh3mAH&y|=-f%}V9`O}%odHJEBGIpmxx&~MQggNIYCR@B?wtEuE?Ih`Jnb*GYGN(q>iC=D{}4}E +^StU{+D1da>QUTFaR+A7`jG6Po1NcX-K5g6|B-}C9}^+gOBNRtZTy1YxjLr#2l8#=t9TwWjG+r180A6 +aa5Hz0^R&=;f~K8gS8-ULGMd~x!6rD%>q9v<@M2`WOO>3^WT1|AG!H2Otx@@y2N>!0<=}EL=RT=#(rb +8Uq2&@NBJ1swZx8(eyYv|9Rc?aBXZtxyy%S>j;s%E{LtFi$sggB@X?<#`uChQFZ}!CPneW8C`4=qY2N +u5ig)!%dmy5-`Kk7~uo+|=gariHrhUMzv40$AfAaGa_1KChyF~T3fL-VgjOLT<(Q~WAqjdYrt9es3oN +c_IX2CWSKP~HQm~0$$A(AwXB0*+W=67OV|K&XLezthr8fJf0&at8q9Of7XAn8?e2ta&2%#dFxx7_l~BeB&5}9EY@}qi1cNH_=XsP5_n{@e%d}rmEZ2oc$?h0)Nem4g0A1 +O_3qEdD-$S|6G%v-T|9Q^v$>PYFDXt+wRI<6*m~e&|Q=IoXwl{R-s&TGq+NC5!%mGl3|kFK8O(#obww +hC30?M=mJJTY@rnL(+1J6cgL;-L?Ena)!YhQ45!_=c}P9h9-tOM(6K#XoW`iI=Q)PyBzfg+A}&b{rr7 +dL+{L>94xm=<%LR&7QgC8{r$6xf*DJB4L(e-gD#_{7WB$&VY2Bj&^$D{U@U`%SAzj|b-E<@cVxnCVeM +NeQ@nh}s`3Q`&cFcThg0JeS5d@qMWtZv2ds!%sMequ=8@|3`isp;WwBR{+BJmeWK{v0^rTMtSN3RH_z +NcFyt^_AGMPae6(Rhy+_rOVg7kQ(%WPEY8-_`IxQ6F)YY)@hK)a$fjdw^?O0WX=+e5qq+VlJf#mK%rm +D=OI)abs&rWTQ9c&9-h9X&gJSBve+7bqo#t+W8M~ltfFkKGY~S_4#>jvh;#g$ick`@Lu?-=z#H>(VHG +;{AI-d@MbY8Pl9WOvFm(ACQjZIbmmf789Y{qBMQG8>EJ=41L??Dw=6R7>~d393(E+h`}`84K!Hf_m|; +2jyPn!&XY{a;4_vOS;X1^=R=uYZwx`_kAvZ~+9Jw51GkVbwE~6n&ZlfoUd}bp5pHJKoB!(Pds-NwG;7 +*q7!9%gW!m2?Q<8jhgA>A(ASz+3&0)sfzq1xI1VPsLFhWRlrp|BzCYS4WlZf9YvG1piB#m)osqG)4rS +RB(vuMQx>oys538xu{-`M%bvVt-+zCF1M3z5t~b_ecEN%cWAdC}G>bHHwgcj-#1V-9Ft_QPh(*JCcRk +`NhX|wcVXm7%UAxGKU(TNrywU=w=dKti=b!4-I7t%Em^l_}SNPClyBKlb&qfM&Y9|FcWz{Ix4)NqpNp{N_N~+6z1L(aKU|L;?nnIaULYXBzIkUS%?M9LclI2FC7K +e_=-%H$^mdD=RGA638E(OKjsPXw-xoE@P30W1DUzj4Lm6Eu!W{}cUede1;7zuS4=a=K4LI5- +2a;bP7jq!7h42;n4c3E2|ND9TpKi~kVq3~M$zt7Kabbe5`L2HZ2Ln3&`(TUxx{Dz0e)(}u}h@YRejO& +O`DLg^cUTzRT9X>(WSR+WKLEDBPT@-m*^5NkPXjWI97ua-)F?g`kB_+3DRn=y}F*?N!y&;WhhpFLb%) +cvGAwgq90-rh%yUl8au_`AS4@hXs<*yjj{1#tbdEHd1prU%j7+fvvBtkuF`AnC+fq&FbR=pZavxEm`C +h9Lt{7DUOJ>0|XQR000O8`*~JVGU-Un))W8$15p3~8~^|SaA|NaUv_0~WN&gWWNCAB +Y-wUIX>Md?crI{x?Ob_}+%}f~zdr@nUPG#+T0XK9%=TlFk&o}Qm54D^p;fkObctUZCFM>Qnq +a+=QoMNn?CRy4t4M#;A}&(#?1z_cUqAojySG2QenSt@?kw9?rP5*>*V{Z>xu1Et*?~{Obp{{4#CUQ@| +$!ZM(t{5OVWM3!cu8Os56n^*i?W;e=b(TDB^!7XOB$sL~Ud#V&WUc3dUcZX#`nFW*_Zu~5Tt-);@+wx +foQqYH<>{iVWIlv|3Twmt94ahJbYN~t1K$jhHrwl-RrBTFTSUC=J8pQgDmkXPOjsPd=BOL7? +!IaWuj+>;rH&{BSJf +YKh4JLTVisiHy$L1{aWOydy9d;DZ$JUcV6Kn#p1$BJq4JiV|vH$s}86GBq?)yEWz?aY1DDq|!8)*3l$ +dgnNWB!3z2xaC)-tweDi$dzWOy-c8-qQads-6p|xZ2M#v*L{zigh@2!*^ +h^we3T=a4)*ye)ww!VK!ui2w4wW*B6}4Fr*rij{Q++qJ(C59&ZX5My-sNo6PHVr +%9sC?HAq8`X8bz`P>KOgGq6n?uhR+Y(d_Ub1e}><-I1O65(_4sDgoB^AQ0TkHO9XJJ(M{4D0?<*F)sf`E#j3huXhXSChwZy|qB_Oyn;SnU8 +TrZM1&%^gn7|cs>vxdNe4`kfZveB1B^Z~PY_(ET)6!)D?_Jzt3GMD1fG^Pxsli>6eqicl;ay@!$z041 +9JP$Lxh|8X3fe~Ji=~M}(+inM~_)t{&b*>SXIWdR*YS-!UFvVp`nc31@z=5uyQZdi5{+w23ty}x +Jx|`9gnd!2B<2h>A7+Rqj3#Z_NkkRL{HHZtN~VZc;N)x1El$X}22bQr(7mTt#x1MH103PhGipp0e@uR +#Z06ER%7R!m=l8~C#+^%$&TW#Fgxj6w0^arY5L_c)#xA?3boRw*j=BX$sI?$i!Yh`qr-2pe=^%pk#IW +cBlSTXQcqCHoqBzB@v+%-hMs%=xRL}dg-W^0tsiJPxPqr9#)KxuNWtQRmeI6E#7q{Cb(%zne< +nt5YNOPWocv9e!a6#T<4DxKxe!mq1qbC9%kS;8WgEc~nuvn|7W$UU7_x~4apSO?CTUvVE{bNi0>b2|o +C|BwMjpC40><&i4{clbMG-Wy7p>|F9!}yWk=YF><{8OWq`?~sL3UZq$e3_@G@>#I+9w)-mcbl!!s&SL +$OyOZHS+dE`)}U|7v#7p1fpb$qsx8ZIa9`qLJ~qk7RdbN!afbtC__37Oy=VKhnd&O^27E*ij}r~?BBy +EFthY$qrgGHk>R^Yh(d!_{p}>vc!)WOfN<3uGJ+;e7pf@=t6naThh2xAhp1T(VlM=xP^rWdKwV2Uo)9 +#=(JUm(8C(QEaY>p%ON5kb@qjj?#_Y@YvuFs+G&kUER}9Wb6Jj<{xy|xiAf>0#@;zn3S#@wqz#A6Gsk +;geI8-&-fd`&GwIhrSKP`cnSp+4nkbjtHi%~Po)8+JBxZP&R$=|AGVBc%f4@QDhNCFb}L-EX}w&Un{9 +8)tiBt)cY@DWty3TBZa!%+>u8j>PIMOgP=n$iaVt(r|3Jg8j~7+N)(c?R4dpX6mN{lJw1-a6Y9y(k@7 +F4$m!;3XGlsFCvkM>3dex#u|GSS8`LnLZ@TOvh9O@xy%@iLEhXF;-%Sn~^gm>8!+7W9Y51y9V`ithY> +&>7B8;w5)Jg)OEF0F|3kv1O`xWIM*^)rLr5CRN|XxC!S@&Xk^FSj&xRWI34%~ic? +8}lPy;@WB4~lggPBYg2zM}Y!d&(#-Wpin!`YxD-CMIXRaFHhouxX*^%Jz;zRzFj}9W{te!D|sl>ofiVPm~Jh*XOL@T*RlPh`o +U;2yQn?$EFe}n2F^;lY?%GkzMJqyr8MyoA#7G+I$6p#a>HWr*}q%mN};6U@u0|+GE&SXQq4PO<04cLN +^sV1}^e(6k-i@JFf%ec3=m2(Ydn|<$8>aartdvGJ>*Pn&KQ)O4#arCMc=Y@_@CuzKzv}-2eaeUob{-BYz$%#x4{!@9;?XQn7Qe(4zzjoGjd#Hmrsm3PYN#Ipv!Nul>t+&NGrHSRv!u(q}V-7t6h^sH&}auV}qS2CPT4i`WCAY^~yP(3_t5v0vbd +xl3P;@?K=Ooz&!1h&iVVz4JQHd)d_k_b-0G9X-RVylvI4aN$kvnq%iXsyAsE3QB_wlHi+24XVLCQ+mA +v_0W6sHx6JhI?=8fOu3k3QB&Om3qfWV)`jbCCAS8bgSjRh;pW95)EG`jN$>K>d(PDAp8rPRi_eWP`c| +8zLF$~mT*%O%j%=)^mrB2SY||2X_HX=Ln|W$elBF>p)|Y@jS?(aR1mOSuIR@C=1}H-d};}4HQ7+&^Z~ +@!ZBzycQ%Ey9i@&`k$nmAiNPLUIc@7VEy-*%wVB0+7wrukB2sEe=NaATmv3f}x18&LkAPeBW)PgvIW? +w~5CW!nMJHcPZT7fNty6hhbTCM9Y_dm^T5QH`DaB>CBwtw6G)7KjenP%2V`0K>NbBMoxIV64of}{rTn7C(T;{bLLm$Q*UC8`11{>o*quaUD4HKx9*|@Xrqe(4HCUPmv +4l94{DE-|c%{FF*#cq;}@Gxw9&7!URXqxy^+Qv_Q_w~4|d45;#G-@hVib0y~R)Q`>zz~dG9u$%Sh)tJ +C$(x~S+x+pck+b`F>28N$_Fez>e$b|44;pnphH1ag49fof-(K$Tt=R)5Dl@zf12Scpr@^t3+`JRw?89 +J2u(tIj-f4$>e^@(Mm}qrKL0W9x8VB#kTC}116y9#s*%2joW6t_RnfB@H@6TelS|Jte6frk9qRL5tomb4btkZizxbFDfl`Fs +24XZmxlFQy`$|`lT7$ma^@MLNfnM2kq0{B%DwOk4qcH$cR)IWRSXvqY!g_Pj*G#afkyEOAqHcFo+kwt +#uqyM_5uy_qU&l}wEcMVy0L+FAA8G5DkNZ}#vcZOW1djFi?e6 +oC%uHB!=dZ7K5hvO!k=RXshnaqhzu4|T3@i}f)T>4`*|$Z`TPZGgVeDl=`n^!3XI*l$?-+i?rOo0O`* +?*pKDALo(i+4YB1oheFeIc^>1s?C$B*d+S*-SCrsR*Z7sI5BG!VmL;nmm(BG8 +7myaMG1GH>d{<0J~0L~RDJsT#2qUW_C!u+n$q&N7%ojTDhKZn2$?L}r1W-Gf{q_3y)Db@W0uENl=&>{ +jVv-rX`9*c&o;;n+XXOo<7h!A?>en~S*jiF(R9UF+PKM^KDsV#I!SHHW`k+lD22E&-**9WX*T;4PCMj +pHt)f&FpFg5;3XJ-C0pcda??VIi#@N~%{<#l2E@_@Xg|`XlsvmO`Ps#~DUu61*aGgWOx{Q&TzF(Q{ue +!4KodWW73~FGshAG+*#k~oSEmg&d0yVuRv28iZYERKlnw}_4ey3=gmC)H3^2AcwkMl9I%%eKsRr%Bk} +221<;Tiwe&uA~w1bu2>WVi+i0A`3W_l#W?rg?Q7LzV;%K4|Ow=T{fZ}@d;I&d4^`l>HX!i&~9j_3Gvf +@UJYXU5;L6)B{WAeB9tThr&_aPc;xxkb`+vFk4o^QKgo?K@-V!((eH%O%z7g5`2%PoeOr@D~==P<8`~ +x~Xh8I`Wy2n&-xp>JBt^igN=cKImPn7EgwU=H2+TCtdx3>}BZywG#2%#kh7&TU2W2V?$f16d}dYb0d@ +4#8FEp(zfhtZceC^TghH>Ni{e`Bzzh9_s~|8=eFByP><}B{>^}HwuT~Chy9{JNXMD_vY9-My +X9?Fysds+MTB%XHVCV{Os?zf@01Mv{_%f4nJ829yYt5rWwe;$p-0m&i)J_Z5_905t*e|v{2RT!M-$s3 +JAI7S;*b?OwC&#CduCz0FfcxhNuv;`voMo@yZ50(dfu^Q&I6ADA36`wqu;Wf3;Qj^g9nvKkGR$0qsr5 +#kPQ_O#Fv)>>@-774+CYkyWWm8YHj0i$*%{=wr~qdN8q)(0Q|-(WJkP9OoqsxDk?j*CRSd+h|$Kr`!+ +yxW@S^F80B_b=F;vf0IJ5|_^yPN^S`0$=Au72-rUao##2=)u%-V-Eyvk22lH;y9FvJZOW>T +~;%092wAwo;I*JDV<}sKB(u+M0*&hb*j$jp9*MrIVKwFW+(Vemj>H1j`NspM%1(UCLzMFLmN9K@68?t +K5enh`iv#{9CO5)m6UU_On3DJx2!S_uram?&s?b+kO;+-7HPV*nQ#J0YWvzYolVDT_Ec@%-%affCJzt +a_La-^Z4Zh~b(xKT`d|Dw0ifT!17<$oLtmotzUC8t;UJ9iV$&evK!l{-sl#AN!EFlm7Z#>flT?fRSgTVYo<7?f +9h)!bm$cuRU8GaWRv6%p +E2@UmvSvYmGW0Df*@se1M8|sfP8(ktJ$C4sEv$;Dx*j$z+7y!U+Qo(gP|){1Z@10|XQR000O8`*~JV-AQjCA~OI0{mK9U +9{>OVaA|NaUv_0~WN&gWWNCABY-wUIY;R*>bZ>HVE^vA6eQS5yMwZ}r{R%`HFTjL?E#)!Y>?j$x<8(Y +Hop@}gCwmk(1ri{I76~u_D4A*Jzwdojp{h^-DLcKBJ!f$eiv+7~y>8ui-8u +gVM<+)o!IN^ctMcV_6GTr&!TF=J^Hcce)8KD;k?ew($v^T<48^|9=UGu_Y0#8GbDagxcg=NK1TV`)bC +*j +)oyYWz$34k>ncldo{q9N^K8=u&*=Trsw%5V5S#>?Dp{_RNl=t9z}u`cE2rD_dN9pKrMOO7x{pQuH=P$A}ud;db4J_XZ7rYMsoYa}~dK@&_n`YYV0J0y}iwrtaH) +8@y^E?iIc=0WL8p%umW+gKKZcZ4X7EIRI`t}^gJr35%O*T#8wbWl{O@c5~{lCihvHtX|xJ_1hO07yIf +Va|)ap&(Ev!&CUy|D62K}{}-;SrcJ7=L13q97zTFm2k8C=-)8CGxRg2cyX!2|WB+gbG7j> +3$_SayR@u=J?lM^Q3$@*1fc`DLi>5q)>FDU_o5wG|dHQ0Cf1qfU5l+J_MOFCs=%>4nMi$C-%gQ=JpJy~^ws}<{?vvMA{ +sutZq}=}$p#i{PPFRbo9Mb3eYsvi(_cOP`tc9nzM4M!?yILiLgnzfX*Tub;ls^tlgDMXqz~cIQJO7iD +wEZUa7>{djk?BddhuOZWFw|4$H&J} +F`0h+=sc>k)dKhE&*NaR8KV#a)Ms5U$1=!z)Gj!P1~_juVOAYPc`+|5T-4QWq!4JmT{Zb;mAR8u8&IO +U1U_BPk{JxM2AmI;C2TSr$`3D|!E6UVz=#)l1)GIy$GUcr-7)IpcF=FJ>P@!8^^U@ov<$Q-+*WyLj6i +mj6qTM$Iuu(sA|)=N!s||{8Hf%y`YnK!YHF|ciX--(Gq*I*lct7tl?V|r$dTEKDi#YOT>vc%?J?;7i% +b&1`XU3EF1A1v;bk-$2QFv367|))zBH@hxy`T_r<@vFU}Q(q|H%QQ8_~qq(cmeUU5mp>=l=;gHzb*z{`=2Bn`jL +EDqw3!@As7upGczK^(%Lp+iv^H%S#Qf5GiRA7{UutIzZo#CiU%%FKQVdHrU<0;*jHUbb9P!R$>&fA6k +WQUQeY)iwpe%&oFX7vWfD^~7L|O#-6>-bn%gi0F6M`TRN{d8ZC`JIY6sswQv24zop7Y{zdMZk4Zi-4?QI +?W3Zlc%zSn7&+uGQZ}=R|tmBGpLh;a0@6)(h(1|rPv}QF|Luvs06zU=DG@!x2qOTK>0Y;so+@%})hL&}8KHnuvzmX@j1`RLrb5ZLJV)J((Y_F4U&2SKIZ*%p5z-YH~$CbAA0znQx-0X$vtxyB$@Ofm +LAQxf-l9ztR?1pu>85zY^L +~4M_APwHmNVK!60HretTcT-^Qu@X=J-N$QD};?y4MhqKNEJ|ep-JhG4}r{6FF-6O0p>1e-BdwC8r4H8 +5-j>%**t3pLl&thd`^mZJ4&T=t8s=7N%Pob4j^yPK?K@sn<2Y*UMsQUUp|W8G3Fs6)z>)Fq{`s +pWX<&~o(XLY5&#wQQq?)l+lY0>E~q}?h0z98W>f?2O2Qk|Gy&0Oz$^mvA_A_Zc?x`q?GmYvETR4i_*J)-NkkH*n4#_ +4CgKs6%ibhNgxWa}8%1zi$H6c8W@OR0R!!5Si%pG-*0)yKW9NG!usdjOF`O!V@q4=Y&SwtLyrKSS~_3jo{TnopZjlaOg%EXtM~95g&q +gK@{Ary*zYKq!E)5(QoRA`(65s9}$ohIWnqb|8Ioa&M42RL`qqqlMlgKrbOELXIqW}6WP<+ +i3_*Qb{+n!92gf*^<8g2-Q+wRflw&n@$Fu~;Fbl_jY6amjTMP}b{$(M|K?kZS5uC9Mcs_E46Iw#s{mT +_b$P+w2oR5yWbipZUi9-!&loA +E(C(fAGWBZ<%01k&aSZOlGHSzsX|cf9TC8pdEasagMt>@qN#wLR_0YFUl}SC*hS0f2S9tjg`i6!N+R# +;JodKDOt*tnww!HA*}frDC*CuMw&6!{zDOYhw5h!~N4}0KA+)MHgyE7P5QowYMmFiscns5HrA|k;fKr +M7nUrnr;jD*a$#v5y%!EEIi6P{toy_yc)TI5?$YSr$Rwq23N8?tTh{ewXtamVjr>X>9)Y>Z%A+GfA(( +&ctUIikjLo2aCzB!x{3-+8Lp-1p{}NR%WyrQB~YaeZi*t8B&n@(Zvj?_F_OHtFU`iP$vnY^lGmwd3s&}g$j&-l9AutQU!a1V8}=`!?>%65YQ@ +X>|>M^qEWdNcH2F|A#ULHlYu4M4CA|U|+zv3}rk|V&CYnSXgKkXPYBPOD2K7A$ +l1_XS`P@&+sB}v@4kDXW#~_`D5lyP~FC?7!+?#mfa}r9N7sh}h`K(brAClJsm*Tk(ZZkxZ`{A>Cc%d& +{!j4uog6aj(iNz6gL75CCJD<()5~S8C3w&YlfQn%w{AQo-IAv2d78Rum^{YPXotS$`wiE-up~=j4uv!XihIAG%X3vPbtu>C)H!p4Ez +6d4MVx_de^HUq$X=|eDOF|Am@$80yk-Y=qOx~x<7^DVDL4L>tqvJe-xkBs(z$BW18Vdtn#;pH={b6Atc;m-ZCz>m$w#(>vEOW)J0IjEgR- +?l_f>%i_`K61t^N0qtJFeW#}}`n*J>zLJl?=Z^})?jH+D%r9qoT6#cXGT^%`IcrguoqMZy$ +`c-RR)^0o_>O>9GCC5eXzx$cRT79oiVZ)mpdy(E443#u6s!S{&WT^Z}XbYlrF>RO1qU_mFio8ln_M`H9iFLO3zTd`S|`CbJ%aF`tyCGV2aN8PN!m?S35_z|PyO<%Re-WFvUL}&4%QHWb`lU3Kr +rZ9f{`siHy${HLL +F7JSGpmdmxKd($$*W8_U)B; +Q7Hdrn6|(lG%SZRn3usH)gjFkxO%YgJW7!56_f%r8tZQXvwIm83=TBqADMCn(*vVs}Epfp~bN9=9F9( +qf&kO4lo96_+-*xt*`-cIK3MYD#F^k&$kYt*Ms0qTCIOP()70tvuPIL3)G1@bMZ?r3u_~s=I7-z8O$Z +F@_MQ$~B6^6sIjHc2McnzIhjAoQ$KIT;a|}@HoHF!8os{?XSc7G_8~hwCm{#J|}xR#AWP(*EczbvzX* +A90cLOQ(_P95?}>nzqrwJ7yE4~uI24;{nItPQBVlCMh?c>a4_y$Kf;BR!TFWFNkwpDo^_{JZKRsc0CL +eW?$iq*I`FaU&Bapt{H6?%V$j7f#Qo@0Yo$>taA|rc)T7D2+OJ({Q!C@0V>nfuy=kh%v&SV2lz&D^Rz +7;9DsBCn5?yP1LSd$gM*Q>F5q)>$EnCX9qpN8Z(hfjHYzStDcG3Bt!rL`3C6n@XdN{78N}{d#lXp(E4 +&9RHp?G9R!;@1g7!>j1`4e?mMgBUcRbClUcNm3K2S5Jx+f%64MpQdTRDx#|;0oe%S#cNUNr6;Mg)z}y +t0}f4SmzuD8_|&$GC}Yw(#nXoBeS*7y?72YkYN7dhc~drEsxeACmCFM(K_$RXAEfZW#FBo58UV^c&;P +OIkFH0S)OPZ1x(O(-W#|`Wg~k%*iVOIf(%rT&R%jfq)+v6F#ERyPmAhF{hyBCR1wH*bBq0_Rqquf+?t +h{R7_x78zKdMZApSFe@Xk&^i*+WQIAoHXxBnJmHd*85HAy~fFt6eG;W7t;hA}VB{If%E9t}b7y5L4v{ +!+bg0WaI@be{GFJAi#w#yzF3sJ^Xkh-UH;j2%Cs-|3>#*j;zR8uR;3;*f_juSLE91B0*JvhoV@56EI#{3z#Y2Z +0E`a$tSJ5V6CZ$mwjqZbw#@K9Uw;4HeYqjl3+n)@!mKn|wMc-c01t$huqk#Rh^=!u8nDYaIB%T0^{y#qTjb8PUe|85vXf1p2E3UrjcoCs^-h5tJ4VIRr1CUcB-{)d<)2dx +#9@`VG<+sW@JtI+mFZ6H2OM}NBLFT@_p$C&LV8i6W+r=p_~$easOA@4epFm@(J;kAys?x}T|}hq9COK8z&2KMP6UmwBY!GDCD(q=HltJ&&w^+0Kraa+_3J!|9UlLm7{$(ezVWgGtp|T +{(=>_fz?Hp!>;vFR4GE7bieC?&ydP2Y@TFt~0H=HwdGa309?{??BeqAdh+#KaJ2A26_+Muefi?3it3X +NKO4sJ>~s2rc_ZIP(FE!v>Q-9bxZjWzH~8OmpoJ)X;Hh}E0xeXypLE?-UrEz3h#vJ#wg##GvotvD7v5 +Y%^=HlCoX)~0cOr)r|>}%s=tezQQjoc4l{V*^i*>KT%pX%**!Wh|t43mWtcM$75ug17kRCI9 +)6aeYcjb?n4-P~mfY4c(woaqhay@c8wY5j1xE#p{noF3|pbDV(ve{|u+!yx69n`Ju>BDyPlU;=3FrV_ +Tz{3uTT>8}*lgtRYJBHX|-vEsnl-?SpGgys#_~M+|p~G}NKv7j6r3{vtY)xtrq2+hSU|%Mo7wJvsg5( +di%m?SFkVemMEl#h3pPpFEiU^wZnZ*E*3PLHG|R-=kg$LjuUrZ-<`a?`DE#ZZXj2)1)J8|T8<65a5p9J^C3NtL+l47X2mxGdE9w$aTWtey2dNT3urg> +b&he`pq{rXgpZM9##b(U92*kW)d`)k6vTH5NdW|TlD>s(@XMOy_EeqY%P4OO@+MQ +S%#`x8LBp&XqrIC(aTP_A&F+ywy4`IjGW)NmIM$u3(p>Y|0fKgB5H>G2hVjjC~ee8kAh`cvP1-*H~A( ++S&-Zt7z>7OZ%N5kRyU;bk{FhN=vi)|XGwjnyMv=_Wk2M4Rhy?E&5{)p*4w1YvF;P*c&ASb&V((rs8* +>fkvCGhr1k&+rY2j#+=LU#+e~JyH3>y6O$jkQH58CFolPiTb^I6j=WFCT=tcxV_d+sOM>CN1*-B=>D1 +Z`MFlPMYuf4*6cE~mB +-SxkTN!==`=I}zzrv392X-03RxM__?u3a|CKQ-l))kHTNnO$s_q|@t?BMUrWFz$yAU{yd7unfhP+GUJ +2h62VnrzxO%H#km}pgn#8vw9Pm?7_&=_Q|Ic%u%P(?ahc^GGstPIwnnxIgu}sCfE +v+X(C>1f!G5vLY@R_Uf9qcYrARy1Hwt?)oBOLOW=cf!PzV^eIEIMFtlBv@+tL=M7=o*g>J_%q6-i-lf +?A~8j5XUvv;aEURm<`O#wToJS~nhk7sA+21#>T9+InH$!I7|2oHm!HE8zDTtqsDAEzK<0U63`P%{b)! +8w%F%A{@Y2sFiwfaadBfolMCSZmz80FDSH(19SzV}nW(R+IRh&6uT*2J|I0Qagf?tWFfxlN3vd5j7Ck +J(6uL1txsPi*}5zuTgs4M@r1sUq{!;AiZp9X{q!yYvUAAdWuO8nHOLSd^x6c +`YzOTXd~E`L0(=G$m~*`0I%-(hrn1_sg*?|~U&g!dKnvh(wr#e|I}~}!4O>Y-K*3*l%hkz_#Sc@sqwa +DFGql-f2?|ouL2C)y1EXqAJZh_^gk)=@MDg6tJArKYba98;npoB@*Kg}?|wlz^9W+->zzHTgPDto +6cCdK3xP~X?mY#NEtZJ%QCn81d3Z;Y~M_y{HOE}pS^wahtH;;eeyP`)_C>9+rt8OtMCrS_wo7LX|hf~ +`(*TXoy^Pn&GgHk(vL2T45&UT!Bp-G9HgEU9oJ*jDsYa-V8?u0lZ`XD5gvq`im$0#}&dZ>CD(Voat^1d}(HNr +7WgX(g_6X+1n!d1uHh%^lVwNeqyRZwxlLhn-5X)*-C~(X9dvaO14k?WG7yBkk7ZPq+??>a;#DZ(;l7I +67#$U&ME(A8a1(_){=P=Yxwf2GY{+}%KxaJn6iVfn<>AOOGr4Hm+K4>fR6LXHgeDN3{C)_--eI)i88h^@%(Z?%fyQ)|7)|IEiwQP59ebA^EpMLLCkS9&BMmePD +c4@^ePGt|0F_74M}UWG^PXT6hqSKr?^OC{PrLlX1iyV`G}kx8Y#I_QuzJ{$Ka>3ihiIy~g2SChj)y*s +?}E9H1)GN>oFB@79u!mUFR<*g_ +YD8K$pju%d5^YZe3;f%!|`?wk|JiBqQOxBIfg#mm8h;D4*-D$sH$Z6MPL7d&NOpEVr>{!F&VgfHMAnb?JM@iYHK9?V1L3?s`nTcPgL&V +4a{%cWGlK>W?SUV4t4Q|UuCyXFhIR}_%x|^&#()t)rp)bI;DFAPl3hUUxM8_DL;)=)adjIiLI42W$KR +eI?XG}5v;BzW#|0J$ApxvL5nXw#G4#L!$)r%b##n6gW25MV%?*TZZ=>PBusk7&V2iPrjLrOvgdl1#vaKES?-y@+d&I=nz&Ew;m9rsMT=4GS}by<-ys&^5*f0JSL%H-`Z9JxZ{O+ +fkw-j0&X1(Fdq3qsDI$%2kLQnDU5rZxOL2{7vL;_~lby#DZu=<@HMzy4_S`S0mYB!Bdz*D7F}`b^=DG +Y>CaX|5+*(+>rCLZE*rn!{oS4}u=po+wUZvfE%zvJ-fMIgJ=YBc>CmZtsF}7~fZPD7`gbnlhBqBjIfC<3fyFMatC<2SdU>)+xnn}AV +h0OL%MqGsWJJKLG+c%D(LNk5ZfaCEM^Dd`qhvWt#6Dun_a%FXEtHv6ibjec-+gCx#SmX5v4A+8lQh6| +ZFPU5KFhi+O34j*%|?SRNJNl>lyw`5l1Ung6(>`Yt9qayE{YE4g>O0i})-0o&57|4YQ8r{X1CF%0J7q +283a@FTrWuK3cm2*a?C2G)L@U%_hy{2T~rlK!{$8~T=5ip#!LeUN*#NKZlGROQt+qpe$yiQiZ>r|C +O|$#TMv6r-rbc_TqeWpLKi_dqJzNxiIY%2V^oayEf}r+xXtHf(897H4%-wj<@B!Jj`3bpM%FykXLGR_ +L-g75KUru0r`d!6-FR=jC#%)d5x=kFEL-_Y8{QQ4}=jZo|@D!H!ZU}G4gM2=i^G*Er7|znsyJU=^5S? +VjcV=MphtAkUPNg<^iQF2_*UjbZ{lGl|h?&#LHhs*a36%SKzQZ1ttF4M9N}0h+mRfx+`wcdf#A`H&$n_9`K*MVq+8Y|^cZ!Me#3$g>>-(j%UMYEN>IN}ObKcx4xo=R(2H(5nRmGZBz(R +~<{4(Tmyzq-G>3HMfOH`PsodKlhi5Z8VYeUODB!~J5B&haKN*|-FCwGNe-O65JtixX8N8LOJ9)Azcg@%}#tq^pLxy +K4Z(gP;{Y_BX{Y*&GbT7@pk!A|&DWi)@hTvpkVPR~duuJ)!q!=~TMg5ugh6u`bz>o`?yx^S$ARZx)0R>t?UD4}^4sMuxC9v+0%yqEXgi|2K{n*&!tnaDq(Z(X{l+q4Vg +PT{@RQm@yeUp@7WetJOQaG{=6?bp8jCL6Ac=KJl9bTMv +mpDBWsccqERxpJJzTD+7(ccYrfP2jF-vY~v-p1D3@Xh1lhFPcCfDfeH|z>!S7mtP{GRkY`W_s@t1XW6Ovr>OHclF>Ij5icTpUIUdXeqy|@+NbHu(AH`zp~7p +-I$GTktaVMb$8(#Ua!%ECxkBbSPX=d;O!b?PD4#K`co7-@ae{lA<%8VFK=E4Zvk5ei|)Tuq6O9mD@}V +Avv-yh4$wS#Ft3HISBGnOoZP(wu+LNffrvaZ0u&XPVpC`fA9cw5*wSo8u>w=|tYRUA(U%x +wdZGfsL1Fz!IvFG?O3zp1-7;4v^VDb?FqjUjJE({f4CH!yurZr#TOE%v~=qn%D;Q_dK3h?D>YOVAaFn +5m8QmcCJP2mzf`zzenPQLD3EW!L`Z=@-lZ8A-$!8C!?-a=D}t7P-MFH#~da1Bi$#-~HuJ=%J~w+!(R< +7H-DscfNyLRqvi&u}jJQKm)ti)B6Li@Hu!G=3`rcoemJBeU|9JyrN?m{Qq+uhNx|bF_=KTETd276I$zi8`*W>gnX +DuqIPn2TNnlZaZ?-h5pa$zV3Nt)Vboz|w-GY5~;)QPar3D;uzKYZFyzB&&(S(NVq6T4R&5F_Os(s%RCao_^xPQvH?=vep3ZhejV|$@j>WbucPSULm`0;fr#xN +Yt~_(Gngg4DS@*97>aIl!iUYAyIr5{8H$SipAJ?tXlT3k?WBETEyO+M(Q=*5ZDx3Cau4&kvBO8i=Y*n +@fW$K>z_JS(8D5np9?nS!RL}?^dcz>khu^fVTRPuc=PbUHKU|&xmKkEHo$2nO$TC8_QJY|Yj0GxqSnV +6TOi+g4%<>v3o272?KZqa3A%LaN}qv_Q5O_D0TnbxwH=kHa=-i3lk_wy1&xX)1VB)%&qU-??nN&?NdW!CQh>3#4lf@*IR +chOT!2{?r)>x1I~1&3-g}O_-x{X42e0Hae)gC`56?o9%Ip=Shu+A!`hFZ1P+4>Oz0~x@=sRShUoC!A) +_10aGGt?X4R=)cTplnI?3JNAIy6w!K_9_sS}2+%+)`Z;ZhvSc~?VR;h%)vJo4l#_Knw9i*4SG+_8vm2 +EI2K}EI;+%cOw=*0{awLUk~Wk5z1HN2bS-hU;GWxf(k+CVirdSN+K2n3>+t{zJ)OfD0pbs^Mx**Hw?ycGw3vR=! +D;haelg(In>41XGw4j|i&c_R@Bwlwlzc{5GRz%HoAcQ^u-4h71#1kEaZ#u!oY-1ovO=7D_^y=3*6+E; +Q-jarIPG^e+5^=p6i0V&*W{c~soOF1U1k@5FcQB?9s9YnUhg4v5{l>N5Gx6M%QLqH)3(%W5284bs(VNA0B@+h5} +Qpx)tIzg+of*0Uqsw$D@;NEW>-6roRgaDv{wPB2Cec6D_P~SQKv)p2Fxiyh!x +73^$7ACl!9O%;g(l6EITN`>g61<@Nd^My>r@aT$=G5VNhw-b +z_HG6LaW?J0C+}Q3-Gb~T3n-hIj9(iZzs^E@V7G(LBOet +IKA@!5ZBT>K_{@YLw=km-@@NPZY+qR8qg_giEg=da%Pu1wpMX(=x$aMZ+RCN)#Fov2Ld6k^R0p?Fsbf +1n6FdsvQDnBEQ8M`X&WmYE>W+R#1XSx3m~T4ViA{S(-0cyZ4ro&5>_K@o2X8*A>SGQ)@E(hE6#u_zp}n6EOTtK9y6E9X`#v-lK$$u(rAg}NU(Q6ra+KrH2@g52LB-IY +9}zXuF{Uy(HQUFe#PLgSw;twLpw^#=0zD=uoJmdY%b0TczYFDh07A!}p@h{idRONyb1&_NMTW1$@F@0 +~We=g9|4;HdTI8z{7g}io;P*1x9CH=m8*sZ>nlb#q@|fwFXczC{ +dyq2=idpo)mhtJhyd}L}Q`#W!6XBwl!}Wc7QV}V?>K-~GJbe=n5a0W9aP{;US}Y4o&nyn(>b?24F&NF +iH^b|W_pW4Z1&QPoc22o9Hp4arj}WjKk^oGBtsPj*7yL#e+n}is*@M7_0N|*vA|0ruw9wEeDEp!8%O& +|hQczRnQ%ZGebOED8<9#?!jrZfY-5v$DVy;?dc^)BKtSU6lcIuD*4^T@31QY-O00;p4c~(<+rZs155C +8z%IRF430001RX>c!Jc4cm4Z*nhWX>)XJX<{#JVQy(=Wpi{caCyxeX>;2)_Pc%s5^sj2D>02Tv%90l$ +z&a8>uG$9?H)U}%TOdFv8D)>AT4XAKYrhP07&qVqr`2d%1lfVz{9&QKs#)-J7STDlWaC-WicK78{Z6e +20QFPEZ2E5n-|PI@YvqBFZM?8-%ED3F6JU*7h+nh!kn}BqRis3NJQqtsteB9hoghTlZ!*YxGz|k#q8k +pFmTUxuHm!Vz0RB=zCQMF!SV6o$>rg@;KR|$VQc!1zx&30vwxj=e_Utq@DEQfWPjkF3&aZWdRKB +36^b`brc<7y>_F^gTA&6LWu7U7wNU&b4>OsD1s}2%XBp=)KtW*(CR5bPbZtQb`2vL!HE1ewqoRBMzex +XH`g_dxeb_yb1j+!La5l+Bi8>ByX03eb|C5Of)H{}_tijp;F26rL34S^}zc@NYj)5llAU6pT50Y#uuE +u*HrHB;T$jud#-*{Ab;{k&YDBjzaYEQ}}Es$u~k>4*nJRia2Bn0d^-~+spMVLhZ +x0*0shIzOkIAeAR6yOsGC(=AfXd}C~nw@ef(%}`uNdU4zNO`Wl^Jtd_d!uwN6dZ8~1aUoDWE@a!VJ%(Z%`Ue~0w&?&w@Sd^ +q`Gu#r2~*g4*Kw1zc1yy8UQ8dSzM#Cn#0Cwtmdb+I{|knUhS7++7^^y42#w$XQFlH4&`dyt_Mu-l2_uCavjWi-$6i{BsRRaFW@<1(;ab{bUD%;U?_P8J)SK0Ek~(Op_0Ctr?THVxMgCPg +)FwOz!hJh$cu(0TWd48~jpE2#8mlsYsRJ#JJIpRhXfL%l-FZDmTTkbILUI!aBjM`+L7Fc>DmuXV8_r?z-C6Hq3 +HA+`A<~p#k^W5o~-XKz~vizIM+H^duwbR3~9Z;NG2vm^PF4s?N3o+v9a;%E1_5fbs5k^(y#! +&p+dUTmV44T|FKUyTBMLVTs16l7axP7T&Cc_5RdvhAk=lvN(q}nz{h%VO^0_=Yj2eDFz?9^4)8rC2oW +UmpqEBd{Z6XX%uE_X%|KmksuSfvX*?LGww~(y2E#d1>!=jdGch1XbH)?QF;O16*3x+hCL66Jrh@kIqk +cKW1TNsehVR3V`pQH>M08cm}1=5j8|G)8wsg(Qds>Wkh0#8l0eK%vOcf!B2HSKqBDMSK!X11q%2<1;LO4v(|oE$Wwj?7OGbGj5%S1)vSX{!gLj`Z7`rnfJr< +CBpj*hm0YUDxUInz;QUNFqTdPJ+=5fga}Le|kk=65FJ>DO3nEH*35oA;A20`yp;9&rgeiQ6%q5=+WSL +hUDHp!hZ@fDAD8NH&IlzUPWC;4DNob)o2LV_XQ`^eG!sPS^$OOd-E3aGpTVNSh6M>Apg9<7p9AVNtyd +$AmAbQ1Tc!3Nhk3xVoP{<@DRD3oN48CLnz)n)*1yp*AFl9W?MLvq=Ji5gOg6*6&wEcbNBw3V}F?Yrtc +Wl@Kc4XMrb;~*zQjF8E0zKW;e^L9Qxybh~^Kw%*s6!@H;29w6I+?KR8%8|>EP$WoP9;T49F&S$R6!2@ +7^>8!Mjte=hso-e1DZ7itGmU{2C5-}yu%VdU5_+7P2S@4!)Se+FJss&6_YR>eNAm>=WX_9dv)kxOCMJ +tL0+LJRM}tMT>Kp7d{w1V-1*yRmCbQQh|SS0fqXXO!S9y21kd|*6jK#%`zkbiEzMN@pt>Tl4c3IItyu +JR)U(N>zp;My@pUU$+w*>whts0P?*}yvdyN$ftwg2Es2&~}Qj-3t_$g(xw%bh6GB2~X1~n*Z>&2re>X +Ukx%1@e+(+qYtp*5Y@r=|ol4`+*T3?xDRe`n>EjE3zRBI7U)c^h`bz%NV8!RzuO3iUZc3xZA`3%*$5a +Ylf7T(dR}v8~=dM{+w`qG_jcDwrTC)^o9S_NR8LT*u&-Dv>UB2|Bk +*;}THYcYK|FE>ioUnr?$dEY`$mEyI~L2*-_xiry3^?sppar}Pu?M>YnF~Mb6Cyt*qr_QIHLVY=eN8r# +6n2!ST7;cbn92%F>atJ$Ue_F3+uoI|2%CWdCb?FPL8)65il1*c|s#=o_+g$Fq!+MtG+KgAL)f2IP34 +A0xaZ@;pP<@H7;H7#lbrswAnuWw;e|JR|8Pz8sQA5aH{BWOm*e$0~lku28K*i7Rn1pRW+@py( +5tHXL`6cqb%7!rRklR`ORiDzY)_dqJc7d$J}l?@zn^u3MRFE2z~rjQ9ZyAFj}=Z#~K%S1MkphQWSvS< +#eLj*g5EL8pYR1aAPY?5K_guUC5>JY--V|THTmgO2zrN?m +XPE4;`t=Z@uiPwRB&u`rl>$eHW7tsuu5)$ZPB5$lNQQy37HX(HTEL2^^4I7CMM6+JT&VnSZ-3F>Va07 +q?(urGO^ZFx<}u`Y+X<~p5U=yvEsaz24Jul+E_PfOlFzDdoM|*F7HHigxDa=7*r*qVGV)w&QOl}tl^P +*)J!$_QnOov$-$25c91#T&;mraRfGu^EbxxD#U68Lxfyyz_kOTB3t5f1$fSF~F%?Lv=ZIaAl;XvL|Q~EF98F_PZ0M2S#_WYh+9X-^)h|*iM|TMf~uyGClA~h*EKY4jxz^JwnUwT5o=Z5{9T-|H}ZMB%kV8jV>Yt6h=*wIS=A&hEAgSyr@C#@@9+ +OJ7gP@~E)n7#>Jh?I?u8aM}SHZy$nw+QsRmxl-DQndG74WSS`N0`Vo{{zfBdYP5wV^#`ELrWmCzgW+8 +WynxBLKl2%h1Fs39PF@@wgZG`NGiw@#ke6A85#5G(yOXIS!bWGhzv}&KEv()}pT;8}?KA%^^nUuV(yP +N?nDr>7?^5@8wSQRgFU^h^9OgVtM`?0v{ +yyLgPH1ufGt*V2ptu9To4x>;F{=GivYw;L8-c!OEHMKDmY5B%#L>6#=B7l-Hxs#(p)61brCS>(HAXs> +)vsvqetBA6b;tmMslw)Xy5C7&D@tmw%2J+#0lnUlo^?9$4XqAp#vukSumtY#`-YX4hjK`aGk*M{3YgC +s(uOVCPi&QO%!?z+5*|jjIGJTPjy46wqENZ8$NpW**Z?Zb9x$vhgM^CGwP00)2i?JA}AS!OYUyE59c^ +uqlu?)_2OM_NS3?N+sF$AAS#B|0{ax3UhQw>6JIQgwN=J;rQ36#O5wXncItxQ)p&%3dIP?9vxRnV1AL +>n&Du@UuEzU?-G@WDY!Pr!AA(Vsja^{>> +H-9jRSn8nKdDw-v-5xp9Ceeg&htCJ?tz3|757jRV5cY+T)B1K8tJx)>fFLr7Z9;7sM

s?{~Lz)_oP4U#H&MpXvvyVj?Y2ud$6H}F!OiZ|e`u?NQ3g}`~)jMGh2?AWO&9fODpSy +Nc!2um$M)h6`&hh?`_pfF%=ROWcWI9-qRk0Qv=Tk`7-3ZDoFJ8Z=r{H>9+TQ!7gmMlwc1oU>OZqTWpm +^ESGkCupNeSO_@6N^<6HT^*yeC+UJI7TBcu6}(cZ_o?abTnNB1mbey=8o&WdG+M_+H(<}x9eT|P}XW_ +w%_pDp2Bih{|8V@0|XQR000O8`*~JV^s9OJ*9HIpeG>ox9smFUaA|NaUv_0~WN&gWWNCABY-wUIZDDe +2WpZ;aaCx0rdvDt|5dUAFf=y9KY89c~0~?IGK-algfWi%$G#HQsE+f%4TZz<2Dv9^{?7QPbmMooN}ILL#Qapo +A=A}4=2BTJb(Y;3>N_x9UUD-r&MX+wgw(}EEBg}Nr9Y5P1P5sG^u%^6jh +&wtJ>CpdU14V#e@xAFZCKW3Ka0sS4-LAyfM4d`@Jv5aV^H`N9h)v|0W2K#MQk{d=^ZAhnD&6y@G5L`vAP96WKP?abA!i$${ +J(9Lzi#{t@xj;yzm>K>hdCrRx4Uns}-4(%NQ)fRHK-QuVLe2@!{;`{c?5s`uu$HVF?JutbDv;iHeits +(hAQo4euUjO7?q +$^-cj2J7v;DC`u)|(9M9+Rj8wF~DJi+n$ZkgNA?(R6>qEYc`S$?`y6K+08ektyU>^V23ij`Z~KI7)rxf1FRQ)kW^y~@ajXj7(*c1`VgB16EL?Pp#L}@V`PVbNHnX~8O8%tJ*@rg- +t=NML=}D(A%H#=K#XX{oJvrn$rDE3FomAy$mb?gveZyt~jDRjdMzUIKfi;+)C0V&^0 +cPIBCaB!Y=Y*oY~t%f^TD>)5JM&37l;WvS}ozeKB=3^x|@ +|=+rVYN5%iT!dSL9W?gWD81BsaGZL85XA6^taE~!nu@uuaGKBUaRWn4fC@X~b{ifbuQ3HOJpBq)0Z8f +8{YDCGmLPBCl6F8v%uNW1}DO~KWJaL_zSobl!)ZfyGz?yeY1inH8!&l+Z=J~#|qo&fo8YrS5}LGJ2r;Kg;ocZG6?Z(ZgE&rpJC~BQb4ugv>MsK6Gfq2+fq#p&_G)YPV35nHD}*>!=2 +UM08`ciX8DjHw6y6%3_M846eBXf(Qh_%I6 +>&k1Be^ +%ED_rcpV2vRQ`{M`kUQL>4Q9cUnB?krwM$s0B9ZP7v_D=ItClqKal5>VOSmW_JcpQKA&{p6)Ss0u(VY +@<)mDEtYpM%LKPQ?@a!NJsX+n*)}!P*Howsa>}7#iB9w2jgsaxhkRG2QE|1`|;9A5cpJ1QY-O00;p4c +~(=#)IC_^Bme-#m;eAD0001RX>c!Jc4cm4Z*nhWX>)XJX<{#JWprU=VRT_GaCz-L{de2Ok-zJ&K&AQt +bVyoaob;+zZ55kNbg^YWNlu)~3Jeh|2^9!104P~a{J-DK>^F7+QcCW%*LQr0MPhenXJ=>UYiAc*!RYZ +Qn3ZW(TiV=H)8F7B%A@~R1;(8ew?udQf3Iq-LR^LuW>Bu&dT{BX=IDzrUH-$uZKZR-{R(O!Rlequ#XL +W7p>+=bq#=Iv#fxTEh^TC;$@@90xhd#*2L#`@in^}2A8af>6sY#SYRaUV|hKhg83ZcEIoa?9e+1HIzD +)P7#~eHHgMFe3ijmi$58(zJ&WSFNajHI0T5!ACv~k@;8j-FP_|7F+}c%Nk}8S3ZgYXf?u +C0j{Nb!+{Kaha|E>LbYNStU@jj1R4k5lnZvT%=0@~_aG_GVScWX;*zCM9p)6ILr@koh722g{`3nRe$7 +P-Kw$vp?)Hko3hhQ8Q2OCNaRCUM)=ow^d?Ul6pP_-Bd|Z=@p2C0;0|j&XZ5Vgh&MbHzh!r~WtG-g^P6(cMhlQ}_ ++x(w!nxAlMkEY95ME|8R@4lJu@Qg1^YphKhnTRDuJkV%9n^e=i!cM3K<%Exs?EzJ9lbqziN9Z;*JaKc +R(pWFsmhxyWrW5Nmu9u1*Q@=bZ-L#2Uhv#;Tq?pk3Z*56{>6(59~o#7A$FEQtNn$(R4nbN{ +D!jsRyjNyGFcIgli(>F6sW`Y~&ki;=^L2(;(`p|GE#xv7}NX7v^xPOD)X6_-m_qBhtN{tOtBU>j}iY= +5~6ZV#AD8Cd#;#3j!{3*(@i&6a2>mc=EQ9$A6b#+5c2$H74{%aDYwy2&sWGit6AjE~BwR@+Wd&#Yj96#(H+4%>F$xIk&@IHAUdTEvq6hC__ +aocUtXuT4{Q9wVL=^DJr_HfTJU5_Bk>HINsqvH{S}9n=(s-Bqej7h8v*&SK|UWg*5f1{pW6BLhdA5LqWWJp;CRd-(0)>+cVNgAU7r4QzzK$!@a3zy$jpCkvz+(qX` +{S(Knt&vPc}PpHw-8S=F-f=T&*lia +za0xXb-9>%e=NA>>xLx|AywSRWboEAHm+0KoK1F2CiQN!%0%UDvUNL2Ebs((0c{OAWLwgiq8ymf??{Q +V7GD>NNREB#Tx48#QZt2OJO2R8~qkHGM0H-gbg4I)so^as26MoVr3>)izzI7;^V8uq>wk=Fcf>ypd3N +P*2bmtG?cAlIZO-SXy;{2I#LMLgA`mu@zphy;ZGGo!^Xm +c2B#+!p(Dkme8zM$IDzU#)P4gPI{fDt5d@@|kcO+}6H%TU_0*j6DRt@Tgfp~KWXKX|r(GBrbYP6Wk`A +=&{caI3}49(&=)Ae63WR#Pz_+C(`%F^bH{O#evv)9i}5IR6=M?gD5uL$JT!SONQzbntN`v@PtICwcd-ha^ +wrG%$H?vMVSjQ+Vj`s4WQGaWI(4QJXo1~H~QYYaCZ|n&GxN$YI)5#pO +eSU2Y?CnQ(Anfg|w_-tbTgizJXmBN%P6;QN?!<*#RUdsE!LfCYG7LXQL(#j>>NQ0`Vs(849k^ +stq&RGR=7+Qtn(10_$N^s8}cldEHS_p|$sHp&V!$HA>qi`Gq`)QitcoWDQm^#WSeGA=1m;h6=&I +fI#DR>y?(UZ5s$TrbZf=w(PH+Hg}b7hhFLY$@5o02yZ-4hEJ)epHXZC=4D2_EhWKftTzuncYbPBI5j| +XB`t*a;lRR!#}2>(;CCZUHk?~>xejyZY#{B@9)Ga4Wdhx2YIw*W~gLOvMSN|t$ps& +qp~y5g+JnmCSXmR}5s1bY}68U|vx;+Fu*f4MPij^AD=`Uve9)G2~h5EZa95JpQdSSb<}{5hDk>=!awF +^nzDR0|3XO%4@TCHpwbmo-d{;Q`{H#<7UDH0(g3{5JgOi@QI%uY}TqIIU01<6~-uq7O!YQ)8{(Z2SycTq +FJ)B=pGWkO3?-iHklBNobn(+va<5R&Wh$W|6jb!RgHK)0ty!_%vQQI1mpCJU`a-$IpTE;VETWd%7SX< +%EcwyYd!(>2C+TN4SZwigTZ@LUVu>ryE(j2}UGawC+IMa>(=;XpbT&Mt`I2VAPDZ&OZ4)0kLdHP(jJZ +n`U$<>?)dA@-y_AomFjY$RHSd0;8wWTOpa|#_Bn{RrG$?U +>RO>N47#blznuBbJnMLTX_;y8yTp7mk+(EhYM(EX9cp=Y0LkJh{=sg+g1S4$mGb~2wuGHtAxyI25%Jb +!x(>{&z-IIMJZTA9d0-4l7GJ^H9^+AMV4i;UbVyZ*&uJj=_PnI?&DZrTVB7$`T*t)b5AOBkz@k}hm8z +wOy!@&KsQP~P|AEGtb}r@ZMFS3`=>826n+Qd~u&0y&C7b)wjXLM}ukcp!Q=o +eAOL1UeB;X7mGyqJNTb=)BCVA!G+KwW2xSZu=i)a>_k?7+G^%SVEvh(O7|+0w)b+sc2&is05roL^`u?fK^1HIks7}(gH2VIEnF$))5u5Ks +HXGg+e~6SM;|IpfhbdxC%#I!{V2bP*DNH^({tc;7ABNohy$cbW2_Q+-hJ~6!?b!~Hv#de!Obf +mhG!s_*Fo;l}4|z88VBoT>+rm8I>!F)8$4_s@SaT5xxvC_l;W^lrx?g`NcxN_4M!s-fd(8iWQRA0;j? +0{7VT5P(v_Nr|z9_3m9$Ef=|LE}G@atCh3%-MH2DWAR$5viy3q~K6j*Pt-$0}0(uK!+Vk!=4 +RF(#&91e#B$OE{5{fQ$nLF4mM;wS1Q`MLRJgcG`$zy*C2dCRULs5PNxj_~bK;fvf9)31MaC&xe3pkYH +=J79X)l$J=v;W|VIawe-+B?*oA}l4yBQL4+8q>$k(V#OD{=&8;VG;>EDp~!jNF@lnP`dUt$AWLkJpEx)866f$`Hb8x- +Hw31toE;u|_M5j^6_a}-<=Ra=a2rP*8e>_88LF8cTm#=F-0uO)`CNpXCNB{6M2LVhS1<3VT65h5dR+t +Mdp;ZfRYu#dA6G5Bh7*u_wvt4wz*4gp;6m~FM!P+4W6|0Z^}bxhM!KxaCw3Fi`JNWlqkrgMHUG>RNgW +auC3U@gljYTL+bwOVBw-?Q&u)wN7M^~|aYi25uU{8-xKQg3ZhlA(_g{5xp)Lr+t$H7wa$uDZ?d@qz*Y +7jfq1@uPYZbIz|L|onC#LY>NdmspwHQ$R_7I<8 +6R#t38*-Wzpx7?aLVd?(_wy-EHWlEa2j@7@A$#^D`D%PQ~KfW +cu=99xE9`XG0knI;&$Ke6O7w51%O3H;1i8VEzLh9pg6p`|IcTdWK7k(-j{&%CzM-G2iB0> +v={LhBv*y@t09;uAl^#&6>~rt9PY +oulS1L*4%7a|c*AD6@%=Z`>C4z#PhGylYrdR*z5nb7e^vP~bgor&j+4;e6VrFH4wDEaVc&BK`l_b$Bh +h~!zdq!;UNxut2Gxm4a=z$p3GrYEvl`r1$pRInebj~ENIw(cWV0)f2t}GReq<3Qbi{Ri>%!Er8Vr3=B +#{=ec?y4;{UZf8H5Rwx9mtlfP-yGF|M;U>;>e)yWK}FI>h;fD +ZHX(B7wP$*@ES;4BLDJ$7d=~cJErxw|Ku9>>kLd +DS$Ipcowj*y2KB-wo_!(`OR$u^ZA?_zT3h1TO3m0e9J_%rc3mY@dIy$Z!5`wk7Yj^%`(EntdLJ +MiFAV?4R+I2!WUiG>I6(A7asMQglJ#*$^e2VM;Dx4tu7#ORh=fC-3Ix{IXu4vDHt%Kvbw0LXj!~5$9m +6ic9%0d5W8ksK({GhOfE4zxvv^1XtP*($&S|=oDc^(|~Jqinr=Q4BY8L{3V*=0su2iAY#~0rYT6~Z~F +#~Rzx?n4Mb|pKnHr2y#WF=Z>R1+LM;&hF5^m0g9Bs7tUHV;+DCkL-F?4oCrmHMPk{hKs|F +8@?i?v-($XYk1v=Ob#Wi?|w0EZX3+BX!F`PCv*+b;H9@ocpFBn`^k7^%kFa|n_SDJruQGcvWTtOkG3!J>vfJ2$z6{JAZ6dl7isPu>UA*GD{5#hpOs?QS`D2WY1ZJ$s<^aMj_*OrEq+! +h$!YgNBsNUn1W&*CV~2>xGYzmjj7xJ?V96W!EhBdrD7g4#L3PIo1GGuIbNR#sVVGJ=o?f~uR8x+C*f% +j|wu7qjLq@jh)Rbqv{iaTrDXi}-?;7`dKb7-~Z$SF#2sxnN^02mMC(c+lOJtG4QnwmX-556_%f9>arAi&bfGCQR +>`-kJ7q1(4cJ?YnQV;XCx!7W|Mh1qWSS%3Zj2SNFG&PFpvtp7n5_& +r-4$kiO9M)Hvyg#tJB8wYA$dW;?A^t|H#44-uJLSNED}f0I}ts*O1N>CmwI!YVH*dnxD<3~fpp9Hyz} +KPJ+V(A3mJ{@T!5?D(26jUnqc_{tWs(T!Lcm^c{lY9< +P50GPi3gu|;q&zVg0W_4p8f0j^+8vxNUc;n?S4Chh2rq?$c>#b9w+B)m8B^(7w_Kf$)M&cQucq(qn8u +LfCP{uK&eA(fQ`BV#!xrTCmru;Px1|f7&S1@K-0Heq&as3KLytHf2ehW@FEqV~_RxY%&!^t($Of>?w% +J0mn)rH*wnSO-(k+uP(Dnf*BWaAE+wHRCD6)jf}ld7e7t8jvOylRyXMSj0A;!aqC!8Mk~ymyBz)Ju>0 +V-}hQ>TSspZ%6XYYrgi5UMLDOgVP91ShbyS=JLJpd?LQ_fu2ChZtxFoR`|?&L^RxeRPUlz!@NQddQ8u +sA4Og!-&WEQnb`{Pz00#@g$Wbj66E=iUS*Iqavu=LHO~sX^cXC^852l%0K?lY&KX@I#@~ISHvf7!jU< +96ZuO|vn>3sbw)*d$51Ec{t2kS^2@ZX*jJt4T93Cy1S=|Wu6toYv6b-_p(n-#ZD9qjd +(vKR=Uug_hZ^GBDXiu@p~)NOxmX=s%sZr+M6aNr0ArJ|$Btel{&Z?^*U@HscfiyDt+6C^4bt9DYmsNn4Bg^)I$LyDNi(K-qo=wnX;n&0t>0pj_PszlutKk%Q?b+=pzRfC*R7~zM^Li34qCy>d$ +=Lg_}VGr(|B4?v>Na`z19-_`j$WA>cx0PwrNb!WlxCzX&AOnD^q*x)^6%c2MV#z>s#F)&k%|tWfaG$c +$JQoD&$F{iozNbfnuj&D`jY4%iR*hXL0R+?syoTkxTHa2(YGqyBV^-`vA^YW61m= +^WA)2y7KZpqBjMaEpqN&h&7Jr=^@}*zajM`d>+x42Ymu40wo?l+qj +T<5y)%-7$`JdOijnZ^OGp4pjFU8ts)uYfsL)2(d4PpH`hFyANP@t7!RDiS6U|t9&j2(DIZk|i>}*Zerk-nAuOwjzfsAunfO|At)^DGudu;WKFTI8pV%V4xN%N2{WL7E@l^vpVsmvmKF4Wy}@ +Veq=gx`(>Aw)nj4F^YJ73)|g>%P^9c5PiF6iDbaN=-7r7r6-!)$j9wH6&DWr-rc;G)gl!9FntbcH-Dm +omV)f9715LVsv<~J8FlJJgB#8sC9(Zj +WEoD&JZ_J3)OmR{Kiz&f{-f4)8lLT33vd%hGe)%|7M!JL_%Dgcb!F^zn%(oPGo|Bfpccm!nsFp;$6s* +u_}N()LL=&%r9pknuRTE4RD(^Vo6J){p{jQ*D$ufd~ItE(JooQOk49z5fdNHL$YoqL(KU*8uHJp6Dl{ +rhq?m+l_695)r+2o=l^oHtBM{h*IOYC0Lisip5Di%Q9luA&6VteA=7zg=cW7Q9jq68#3}^P3PFmw+0w +*43I~+dQRlo*gqI=AMR?kKj=n})qD112d)LNFIHqq_|8lS%Yk;cLz4V9xpUqfh#xZ9K^f3alnJF{E7r +5?%A4~|S!*Md3j9;45TZKXDz5&-+sAmj&Wt_<_vgU$(@kQx&Lp;JJO&d9Ouh(QI1X$b#;!1lfqO)}k+ +ty`{6Z!E8MiSv+Zoynnp+8={>wVdOF0X1Szj0xCBLy$`xyFFt!6e1)rQJ4M$p!a`VJ6Etm(f9WTgR*A +7!nW0Y!EFx6IM`A5cpJ1QY-O00;p4c~(=Mz14uQ3jhE_DgXc=0001RX>c!Jc4cm4Z*nhWX>)XJX<{#O +Wpi(Ja${w4E^v9RT6>S%xDo%~pMs5XuzdBZyO-;=FuH9oX;K78lS4Ks&>Dt9TeQurED55#yUyXhduN6 +Zk$QN&cQt~nEzS&QhV%H5)RV!H*)?axBlZ{_XwP|M8zR7W>bA4}nWe3hmCHqt7^R+E27RcCVb>R~NPG~EoNOiQxn +>zzoGvMNeZ)yEmziaMc($%-p6V=wXhXoNa~*RHLyG0?rGXHk;md=K_dN23vO0@b@B7YsgQwyp%PVO{Q +bB4@b}sYsD7<4Um)LKTN0gVdd#Gv8Jht;_a_+2VbS +jdQ?S(e7NdjT6*2`5br6a{ID8jB%$X7{WX2F)-(SXoD4OINRwgcay^FsTGLJ$>MbjD15lt#%(*=!9rc +)iQGx~+sN_EO +J4E48=13@Ks~2Lnt!$$e`YIzKGY!-x0z8T&4}Mvv7srgNG9_}EswVnkUTl?RR@8~*{BX{O4`T0R*rRG +g4jErNt4;Y!r6{jDT8=kWn$0f7mfe*R5VlLVOYhMa|hh|PXUF%H^&qjQg(L2l|S}4Qs!V~{~Vl8L9ky!QOCTL~8DI#aHpHW&we@+3zA*(?!%6B6oQ$ut?%AliTT~_F;o++t|B$Z +X9e@#tr2jXCu{L#oWPa-{0NDVgRMeRtXLg|KK8tRE3pxg6X0R+lXosuUWpsXr8b61|uxoaJ0{y^7FJ~ +?^BC44K@+xieuSJs%_SI~7RNLI%h3tTIL{HTRmzNWs!7RUPV@i^$z{R85AQ9dO+oZWQHt~ilku(r{5(q0qJ6z`Eq}PB-L=!VFz!(5YsR9l55N>iM0lOTVBFQl-p^xurB~BE`Ak@ +einlEnZqj3qjgENaeFfK6(nS?xB-O1vB=I|PS>(D`Axwtn1o6-Y;%xbwGD2FEOycnSp=v$*z`+ExrIo +oj|6U@Q3?c1za@l0ouUp`&;>Q+ySjzZkiNfKS&ZD)E+K}xi?aszgIw2w$t@~b#gXhYfsb~fnx(ySGfg +aFP6$U&8D;GOG?7JWx~on&EIvaw}pOuZq5g^_|7y%tUTS4|#{Ond-ETxPrmmVFFWpsE#?+i3EI-|>lG +*luN6f}!G}hOG^hX$4-2CUJROPoN;f--7;<))O5?VT(COf`>L+^>$yRhpba+^;3|ezl4KX!F3r1|MD8 +(uqJ}Jl0=Us3Cv6=KICj6Y}?*@J$}hIBP(sNhO23#$Wuames4>%NKb>niYF8Yx6s +CdJvg5GkIcv?O9bJNpSCcXCb-2{@5ioHA!!o7>I2;Y1Ep`HPVxcn|KBWq7No+2@E@2uT+9}SytSOG}?4Ri)M^A?045#d7*7ksw5LS5`)+r*b0a|)jf +?OuG@vCJ*i$ti;ZrhxXT4AGssumxP=B{95?zd!?Tk0K$H$(fiM;N92rnx;zBo)>%D+do<_m`(pLnJ{e +a<-THtWb#Q`>h$N=?``TZRhe#aF-V^2fG$0TwxZG$=uA#k?PCjIav9`sqAig5y8o7$*B)WX=k3|)jif53UsG! +2oA#9xEoL(p{s0D8b-(ORnc()T10%G@_~0AmG5dc7EnWZ~M;v=>)P?48gl04R4;$ipHd +1m)|2cnB)*}WcFL98Uk;XqZsM;XIBvrp(Jn5FGW1ttSIko=*XHyz-JjQv>aw`Bz +VHd#~x;)h_-$L}~P%&wJ)EF?8L;c1uU>gY)^r5UD6cZ;WayjZmNCqMsU<}_28+qllof+E_xwD-0coEa +v)sc`Qw&@+7t@87_O#P+Vfd$n&b=Ip7hd-Wm^;I8F1_Bq1Oz{=p9K<8^PzA%isOof=p6N~j7k?m2LgZ +mb;O-ww)9>_Y;jk}Y6k2{>!RlMEOTY3>ASV}kP$<3ezL`bB!! +?~jQK8hS%5{ullHh_=()QHdc-=C9^HJRkwR +2KZfAVGT7fFNE^v9RJneGZMw0*e6k}>t0Amug>?D^}MajyxRLfmiQdx4=d +$x}SfWrM&>Pfve$Pa_9x^v#Gx>0BhsV^*le=m&h# +JLny-S82A*#d4*X|7yUVKRbFcg1^3FzlbE-Xc%eOr% +V#vou%ie#)PzEbnq&-bs}gk*a=eWlzHlqI8{wiq$Uw*M(RP*_5809f&!%v-8t;7q`4z7FMREuuV +?AQ~ee^l>QH!TnL6t;0ktxKzK`i~ZDN6{yJ^Xd~3tK?nczdo0USAiGTS(>z)UWKxj>Ht&D<9$w-uPx^ +-vZq+t}+l@$GJnxTx>H+j8qY=}P7h4kDFw0^QX<3y(-yE0B`9BJglZeWIjYfzUNRL#LWRX5{k1uF9B} +lwSsIX%`zs|)y2*i?0=kXcw7ZADN_dI4X{(aI9@Vn2>|fF0XQk1OnfS +>uw#KLO7JPz#ayAQT4-HWS@3u_*OfNEU^040;YfkXQ?mOVBluaJCU@1-hUiC3BJh)^5*9c&qjX?K7HeVU?0_|;G4nEfA9vqn^$iq*SFK#vp3flr?&(EFg(~ +{ui6R@Dowg~=&#dx5%WQ%nTNiaV0JqI51;bjtfsNPrgNTN?k_gTBoK?KRv12UZ*^pTj1?JgcK+}~E1Rb)Y +fithBvppF-QIabAnS)Bdxjdm@FYX;mhL*@ZSV~)(Q0@Q9c}60 +W#&fcsEX>h?Gauz6NjHNb3nh*KK?8*cUm5cd3<0)$BZByZ0a8)ULlAbYj*^kqYiC?N!%<+os;$e6M`B@2y$qZc^qi^UYxJpzZo +?GydMy%P;_i(O$rYc4$x`ZJsNK`4NQ9bBeaYj+(BL)&r5G|`BzkYU59jk~9D;QK+RBsLyx<+)f1Yord +6Ar)qtPFN5srD9o#6VG7~ncVy$m2&|8NJ@>%*Y>hdanY48}RX-Jw8$2nj;yxv!!)oy{m5abF&=iPDw| +EtrJC5KSU~C07h=H)k_}EKJz-)y?F6(AXs)OoL9CpUQwF7L9n8O7Y+gkn_&-&*6ROp*D8~R{JjiGi}0 +mk+~0Z5ki=N1n0{4(G_^_gTH%&#=xoO8;mnIfTkT5`i9MeUSpn+(?r2EdrOJ(Xq&wTvh6*)TYz~@{B? +8%;tG+?2{|qMktNY6Ct<93o`kO3(jsn0r)fq?W{D>lH1iN6Qr}w^0tiJ?F(5Rpy&j{0WO=w;hsR)kK< +NP^XQ%T7)F9C`!I0UQ_Ac9s7Y$t`5U_)KN8I;x6oQ;G@rdV6a1^~<<8vw!U$0z`?l7okyGY40LU*h;v +1YJ;lSFVJ1{jt&ZV|X){YxuWUaui-$=4X90UBu6jp>6p&JGH|kQ>A2%=R%;gJ1|>A3UL8Z?JbcNMPFD +h+Kb~@x*2ddXYue9&8bEkpY*&x&M4X@_O*ZYcM9_8RSz}H)nZ{snq0(ZaVy-&V&NUM-%W&zIPsqSZAz +=7CV%lL(%7jW&ka`$`p--vAI{Y3$e8v%oUIJ}W5$mKE?kjMF +g4!tkHyM47Q^eA-jXh2p*4dflHZEk;y$Nsv7FBvW8a(ZM-m ++#OemSU4_XVg@%6)^AKozndb9l&S_r^(^HXTg$iof$9fa!bb8EIN@d66@n*9LL^3Mkbuj1S|Acg&^58 +Lg_Oy^=vx)IR%#)>Bbx1z~k^pJ74A$wd0)oyU&6i_yKZ>x(6UJlo`(q`t@j8rFo#KIB(m3%aRlwnDgX +Ul!hBf9X4C;HHhpTz4|D|hrJp@dIi06jYZ3n&ZFP%3_HK*QM#en1|BRhAs9EEa +Q2B3~7i1MvPj=G5NAZ&omD)ZC)4KXBoiqObpjP_hNpiDzrXsG=OAD>fOlH|VTHSC@&MwZC-X=-Vk+P~ +SUye`e=GB(MJh!Y!0`ul#ay`FirUV;dFb8h3v;h+od$-b}78zeI|?XlMeo3Qi~%<<5je-|(e?5KXx8j +wCy7-NOzTfTm_(4N{Vu?f@H>6?WqX7z(j2u*|V?fwe^p0J17V+h2RyBVUi=PU~_6Z4bmIq3fLUOX|Nn +x9!SmU90}DqCP|gWW}naK)|yOV=SRk;D|zE_%Gtru^KS!o8pB45<%%H=7_L?5qZ} +@I0t>|PmUcISh?XZ(D2OtL7CZUiU6vTF$5O~7Q>)Q4ZWE`QFQ86MOvj6*^|6+a>K!+B%i__c5C3 +|&xJ-I!-U>9e%w`XtJ&7V)-Ub7n@>bs{$XMa2!=&)OpjPlC={qMc-Zr+?;G@*F}?%A`~=L1b!wMl8;X +dM7sDIg>U=(DW_uA+}*cusX6LbyRO4DAu4M;X`>GSO84(BYiT#T<#GD*`~X#0lhuf-q)_{w(2m&=lrd +*q8+>0`k)RAX`I)1e#<}j%&HYCt_71f?eRp)s<|*zE?bSk3KmpqVNsZ`;BqsD +#YgcscrBLH8aX$a-jzmMq%$5Z3v(1?ZE +7il!~>|Zlx6rtN7W#KO2jtt6^2w)*fPh74-XHppY%>}t$rnvXvP3E26ijka9IbSz`>A8xkD0~Hbh`_g +5;dp05-W$3e4k-1M6VXo754xdfi&`(8*g6Xlu0ywyJMs{!RcoWYCn*-X#Lxzot=CL;EtH^AO$4FJWBh +8SP-qvx(>*=7X{};ciFk5yg#q?4WI~3_tOJnY4*aY{;TQDgaRC3e2a%hBdv-h{5n{X>6@uEu_*kaLt! +_ftkAAkIRV8x@dztC6H$M`8TuZacp`dtGw=s#KA5SAru{>X|Q!lH)vJN&5&k7SRTYZs46K0I$GgyIh_ +uI8pn2r;NBu-4*ySRW}wR*Uk);@%W4%cKum$e93ThY;KQ>|Uj-5y0328*ge$vXz$&(Sa%$2bWy+Ct*^ +ycqYQoIWt<=FB{=^Y}IkJ<2)%u4t-{J-uDsK2;)}+W{$SUR<^3SjnOCL*`5x_kQF;LLz=&-c@?(t&d{ +HL0Uc2@FC@5=nx>08T8+bCF7SvKMI!i%!k&Uar^z-Kz*d_8u^5C{gQzb@L#|GEfBs$i^Nb=(B7U00OcRelxObRMb +@ai%pe?Yl?Y)u#z{JnnjN(RcP~lnef`cmlyn9I2EjaR4es=7!~yG=TXT9k6A9!H^sL;)K4#-(oZlJ!1Bqq#S_ +jOW=ixe(&)Jy_WL22TP$TP%mrh~aYiwK|#wOtEV-7Bg<5D8>+B?Q;zOWcj& +e+EVy!3Ga$qIiEQb}Kf*&zXV!T6l7LHf#}6+JIgrB7(|?iWA@h8;iM!h~SRy;NMS;2mIAynE{JBPDnl +*3J2>0LGmnizpqSLw=iaIwyDp%e==iYo`WOq_HX7Ir4E*j#q}QPYlT_6&9PdFr$PofzGf`4DlXe{O$A +SL{-gghThgmY@p8{)FTqVYR``SFon8`lL)H|ordg|R<1(LZXxQXPg8ks?nIU$uL&gHpiJqr{+&h?FDw +j+q-aa*?<1`x?aR)kN7zs4)c$Ff|G_NxsnOn2MqU9Pk0q&ah?94b06)1XcvT)4LAgGBYK1@erY+|No@d%DJTSQw +QsMKq-njVUn4RH&v%F*9p2?WaXtgBi)S%4JAI5AUYLHXM-(WFxcqUyquPg!t2pN0C9kPX!{b+Og0iE4cJR +3sNdsM1i@xb)Vw(Shnz*<(_%H7bi7i6<|Cb +6G7Ut&eT>1D!w!U%q}_Tk_Eihp^C8S#rXgypr?L~Xw?8a^FHPuvHz8NN!n-AG_k{Ymul;DTa=e;tO-Q +0%+n(CkEkab-Az-sG{jb;WJmFUB0jJHw8KmFpB-XLmalsBXrg`WSGu@inAhD@a>Lk-GfOf7X7p&rf$Y0Ch&wv#N0$&D+@4bIngv8t{NvG^}cu@A|soksmbdXZisfJ2MX^py-y;rnkJZStK0T#kP +6+#OvWBu`EM52lAb=vA0a%^`NcD<`Qn!C-jP1mAm#1i=))8hjPZ0r$u +AsESBGBg^Jx%}XVit>tonBAaBBjRfI$OXDw#*Xjukv>0t#*$zekfQS_gj4~$C#6^U4X~>P~TmnYSA%m +=OJ1mf#1eBZ5G`ZWo<4*<^w<0HdfkrgkJzvew{eb{r#nx?*M0Y|Lg!|;s(8L*%2708o@!(BvP5`vr{@ +Tg?sGuN$c#BTKR!(2-F~)~ESk~WLGzNG!F(lGoQX`oMS9o564o{Q&>fE*$x49Lx)H=3VL!_zLm)tvf&P)h>@6 +aWAK2mt$eR#UKm)&iHg0001b0RS5S003}la4%nWWo~3|axY|Qb98KJVlQ+vGA?C!W$e9wd=%ByI6V6+ +nIxOc0ttrS5rU#Yj4mi~32sa_L?yTwvrB{otq|8OwHRgqD}khwwV4d7*lJs!r?gVE53PNkhqm&=AK)& +F*`TNa5z|67wp8yrJQ_+!77{Y=Id^6^3EDn=zn{SR>|2D?NFpL@gRFz +@&Gul5V^S}S=fxoP2uVpc>q`iCfe#7E-ufEUs$hy3>4c~pZ;lc0ZJ@nwCkA9cW`_}5b2I0}XM;^^9yQ +eDeJKtTkdQN6$dcI!9*54gn-_iNYnTfyUKfi6}5qN%3nKm;64xLJ9vh7-8A!E3cGXWk7>MBh +o7%MZ>P_DA9=`!hJOq{hhM#shv&o +-dV{d9=Fu>D(5g8Ns~+SZgmIm%_k9lh{b@8D)a#t1fiZ_~!Hfp2OxAEETxd?ix`u}!O#2FbX6}V&?$_ +X)a~f8!`7Qu{mZjl~Be~L9vl#1Xs{ybE|?i7#QqVRi +6qx!iV(YCJzHyiifkc1h;QNdI>}P9K?m3ZgL<46Rm!On#1%s8M$)M{x10rOsyjkttRt7t7%|#O~3RcY +8t?rHeyXoqNYPR-%yh&QIlNBdhKeke9+Auw1noAFz%(K*+z2&Lj0sxF-lHzu!2#J2P+J+i!BHT%L)gT +_vPryS}Z|4JKN*+{S@j9x(4m4?*RuCA~g<5jXmTMsK$Q85#^o@`(6NurDU3_s(zza6$Z(IWeO7YC9nnUU)EEcII07BkfPH2IQhOD7Kbv8y^52!s2VshsJ!C~D!$_`P8R~)gI#BcVDjw9T@BpTSUh-%*zV$*CC!tw#k3Hn*=bj7s-hggM!d +W+|#%R~s0#~o!0@c<4@bkm<5??wZakgA}##GtuXRfOxssR5FiXStieBGvXN_sKe{9yi)Ue#VVW|CLrCEo;v>hLPjY+~}kbE$FwGDO!VN(^Ms^ +Ubel8CDuE}@TnD!$ht2TljQ2bLZ(fDjIN%Vm32q7akYB>`Kn-q^KS{$PMey^KuCg6N!ks}^-2J8vAdwQ3yb(pZM;0k$BcRtq>arV+__pezgw`ZZd9ARhzfww<3EfMC{U>yq41nIeqgfoC34jUsmUV#JOHKxw)32QR4Gw$@3Nf +n7>aw>4wBrq!-8{YR+Fqv%Lb@pv((eqK|x}CGs@!Ct6~!mbiwzrX_BpiQm%_4ZaV@Ihkl#{t8^f)toY +@3xIPm$85LP3*_eYsysAG&9On6BPtYYDE7XJL%B5gY(9a$-MiEcWMRW1^0A1P{B8yZn$OSm?M50Pzqo +`XYQq@0EI+?$Ck}_2lLycc2k2dl-Bh)3uGS2jTYH^_h%#HT-G?q=yCK@9@w%fheoJAP5RPUiJl08 +|Aup?-wqz%LAzv%p)qeM~(J(KInWouBAu-DLY1jnV}x01s-w!UvEcQ?6yjc2*vUy$kJ!7r)gv7t16Mv +N(SOA>eaWKDQMa-7V0T;1jvrzEtsWE>Dn^Zv1HrQpd~BjApVy1GGjcya +f!mjY2^Vd80yM~2Uz8$zt|xTs2|Q~L)k`Um>LoVqVCU}k6sF+3r^?UzVwZ7V&80lf9LC$E3Jsc9y7eN0fio9rNp2`9cmQAIXwYq}msv4nt +PdO!E)*O(7MFWu+Uj5hq}XW6aYzXti%Wq{Bne7AUr&`gWJ;~H#9W$kN-NRSVG3eSzcI+)#Ck{>HabaI +y%b-EFMupWX;`IHs_wxyczv@tAZ1S#xhV~?QCLN;fo30#{RU9($i&$s7|%yy*IfmImDOjn0aBe)fi_j +C@r*qLT+Zr?81hGepOXhcq^pU@Di +s3+7TEPTaxEnK$Ja@PG($g9Nk2j{AQRAHV0o{XtE~!K?|7RZ3 +nRhpV{v$U>WgeVu!svflHD&B>mlAj97Pk-)X)<=u?y=L4D$mFpoBuy;M$;_N0zCSlD +fiOwz+R}V5Cl-HnkTIy_sM%LaZ +DfFmsu#;X~sm5;trV^4FP9uu%3F0TsE%dsJ1}E^qEMeOiB($2uN~2AaYCWWdvxn22}nN5Mr}~l|7_TM +S;FY+?dS>B?X^w`^*k8Ueb^$#_!(%(>ssb*8^<12Um26&cNst8XbZ~QLVJ`W%VE=++OeK;Umg?Bxr7* +$xUv!jbR|G_MQs-|29g`+FA?&Ny;sI5-#& +4}Fvb-`M2qUwKY=bgzIsY}x)Jo_YOzU#`K=DAyt|H$>0CMvLM1YmSDY?8hvY*K-VIoJ59^Dc0;BuZ_2 +Sudr$L%R4#nIlFD!1>%6u%h+Cnq*)=Zod22MAOBW{)%v(@1nwg2g{^SzW|_{8cPkvFyNT$!ZkCdEy~+ +^Tj6MV4J@157hyL4IsSop>W(Hn*&WC(8`y@&!>eyPm#?)K`PHW+Ice+X_Rh)>~}O@TniaCy|>aHs*8| +^N*Si9coU+Kw~!m*q0Ym)hz;2G2wq3K=;&#f-aPaG)V*P%{9Zvv_@YG&+m@0YWen52#L58Ut5MR$_B> +Fme1PB)TuzKQfjaan;F+*+359JJ?-aKp4>T48SU16Fm5suqNyqqLxVOKEm3@0 +t;LD_Jb^Vs_&=Jr8Zkh#dtzz*+?y=U(}~eAa%dZAHGd{}67#^5fgm#Y2Xh-{BiXV&HGqVude6V +s04gl?TFqWlf*p!)E$KnY0oFLOv^z!wETrzb}sc`#W!{LqnTQ7sYd`{e2w3PZ@)uneUeG8U*MW +H!J*vaLfilD+G;7$I9Rx>hehNj-i$KdztTlmyVQOLB2cXb)1J +)wQ+o6rMenIvDv6=;rcMig@osDu??x3r2HYEPiACiHV9DH$?YJj@snU(5-;N1y@+!+oL4VVNu(%O_?t +Zx`wL*Es>-i=-b4)!bjP3KAa{U9B2~s6?*Pj{ZV_d!$7y*X2Uoz@e?hpYl3h23R!TmBSpW1`E$|Y@JD +W@W-S*?l`p=1RW5cb%vNX0B6}=7P$aXCFup`1xjxtAq`zmAHB!+4vM5RR;#D^GSft$%)z?3sdYffUOD +o@gGEyZSf)wS8Aw-gyzaI^k6h4|i!4gW9%g+1Ms=Uu+GJHwK5#!PD4UHoK(16 +f2y4qku`!$Bvq5mUiu^b`$()ODyC+2T8d=B%)^7y~!G65IzsQxn{%UbR<*ikI&><@-H3h4W4-W%u*u( +vIV|IVJ)e1u@HTKA#@T^>(E4g}=)TpZ$^=y!$TW~8{2ja_Mkp*-XbFF{J)ndTW)nJt4j>bXm2d_hfSG +@%lT_H|ZEM}PNHk%C#4UO@FPk^ys*ElFQ_QV1J<*4m#SRpp{GW@hxabd9^cl>dEnjG#IdgZW^Dn~F7D +LABL&~?YrwZSMy9In9)%K_Wa4- +pnG?#Aal5SLEa5qL)Yo-*c-U^G+I?2#{`FmC08w`g_G;YA+D!Gt7A_i)Dml+94!F0-7nZ;En19CISVq +J8)Z26IMl@?;Y^WW<8Leyvia+agk0eUS~`a!85aK9-CE)Aj!h2a+Oas0qm`wk*uvVuzC~82@Lew{yGuv;Br!e&B3Nhmk_8yVr_;iprkJeH;j*PzUfl@7TVF~37U4Pso +q(X(GF@i6r-i#yOy-~lxSs+#^PBi=@~bh)7Tt+0syw3>)t(V%c*zW8G(9Np!u+;+N!Hy|-1U0MOF7>t +?p_$9i@O^yCK0uCKc2$X7r9sg1o$Jc)*H0fbs$l>K#)9p189u<%q7Yclx+Qmpo?|mCiq%SC^lV6ztx6lJQ9J`)=D>lDp{D%Q)HIT>d-LYLliLf6oc~K7%z%WbGUsAAzMALg0X +V6-f?K;hC>f%%nU??Az}>bfFIV2MT}HA$S(kn$nBdC3JB)R;r88xncD&O5WpJs%(pQDX2wjy35D+W7~ +mbc0Nl|vSP<^-niQJh8eCbIWQf)(U{A1`ItGAbEW=IT#c3q78gS_Gk{c^aK+z +gE);0Lzyn!fhSE!STYPjE7kQTd>F+n+YK~RlbLny9)j&)%NxsGC^NXB1vUaQW8I#7XB=yuk2=X6VTc* +N9Q`5+|zVhx?m{1!*R0V0_4G&FHDjnu`VdT<@m<0NG+FWXY2>?1C(pvT3(^Gn*nR=)z!VRm#DlSmxXv +i*mNj7V1b%~lec4?pn}RKT5BQH`ncbStRhavYn=fGCFIGAU}a)W9ZFi${B*&jx>zR&IOqEpS@Eb(abg +b2A3wcMXI_t6P^X(uMMc;R&rptEKPfyh18$g2h@+c8opeQYu`60#YeLAxw5z~IakE9c~xHfDL=>&HNnO+Qf>G7m +y2q%fd&l2RlS(0(ZCy2GqNGMI|lg4Afn`wKV>Gt8g;N|;U(%ii|34zKqR5N8Cs#9VW4HCJ_YD`NoCT}2ufpx}d?W;&*)()2{)1Ia`SECPx +RIoz3gsciEQw>=~hW8JW-1Zyu~bLw#0!&ch%+6b)F*g@6{vWN{-CtHzV6~@BkMd1e~c`8*61snO)nxs +7$OE_jl;cT+j9ml}>>*e{SRUY5WCMQFlp}J5mFh}7|vJ0!4KV7ILKZlSsU%5}t_3D7WA>1v*ZDDEg<{ +^ZiAT|Qezlt>IxvnKX%$2K51yY-0KT46soW}LdC2=9w;4cEUu|P*Jmj8vKo8~CnwHSxtk^vWFv|E{27c@=me2Y%61$KZEziY? +pjGT4J*9M|e`P6disR04T;-k%2TRmCx{mEeqW^Qo6-2)wBRNbHwVo-r%Q!fEx;SLuE#i<-_!D-@a9*D +U9=(^-^u3&~&jmbWrE|e~et0evHNaLU&snSoSX=twxS3v)tq-7<5F}Pn1*Y#RVISg)v?{f+BC#C1f5>Y&Xj(P}Fgh|6pKJf@ +K?xN-viwy*)Tg)6z77hHm`Pjblo~e_)d}dsvNzGoflHpGk`VL=`~Bh=&ySBxsl{P) +GA|6bzLUGU`2TJtL_0ED)rTw~&Q5Q1y`fpdhiG@{?J}5utI}KHC^*-1qS?s;_9?3qa>WhR5SKfZD$iq +@Mki_oIkp!3!e11&QaD9Sb1bydPum!jJI9s~J>`YR!ch;k3A)hiBIM59~*Zb`uD~JeDfYkXgBOKCu4D +1Qo*?^6pGM!bTR;i0aiyo`Xc4O{Wm+pG2MkEwe_=;h`lve}-Eb|F#My+8LZ^A3mf*vE^dv6a+*|m+P# +##fU_0wyPC+Z(*Q0uo?#Gv55j+V9WHNlNMQLP>p&5GJEkirw4zhoW +}d-NAhL_uId~&J%{!SwJWgkKS}{J*J*cWtO +9iAE;J+Q1xN{IN7`61kZH^O6Z*{y4xTHx**GrRvJ7FK{clp2fztM08*b@g~(;poEAJqedC-H +f=zfvUW@=B)&b082;;-DwF7pynzIQW!&>%^Tt^9GKVF3*0|piso8QLUi!)EwABKr@# +@eWwHTn#-Ef$s9_6^=GBAhn=sU_Ud*rDL}O>BRSza&rs;XcG{1w}bqcqiD*j!( +*?vSZW^^Uh3@&h*>d8F}*YW}$wdAeT#-(T>ANQL)zQZu+@l>RC5ZB#q2i^STf^XwQ!j0FUd3RARza019P=u=ZHKJW836@_LuLvbsIwa~fT)JR`@U0m?)E`D8pYHaU}SDw}@?O8XMu3!GjQWYzXaw^9X`#tGw~ +0&@9pP>{A0J$bh>DG7-Cwp!K&yP*bYB?|Q8n;)hdyr9%cD_Lopv~sd|k4;T1KN(2TQ6j=rjK~x%;tk1 +_98{Q{*}!9Ufl_0DBQ`bVT3Ce#R6ezeEO-F-6<$Jq#rPKo17{%Mht*cN4JIySV;W})1`020{F-tnDbN +kCQt&kXKG%i6+fU%{o=*Hda1_t4w>}rAkKkGQ*xo@Ofy4CiQiwkO^9^|X?CC(yWn|#yV5M0K;;DC()` +!ef3J^@Yb5IJN!2nQ75ZfhJ+8~Cun-R0zkzi2y=u +>Kyr3Ye$IZzOL~f!yjD#YpRP@qJ!4Jpp-EyE0^|RlBd;M*44P&QW{FjsHkg+ZsxajQxni{O&dw3w~UQ +c=3jYbHR%L5igF}kmb)@1_Ne(_u1(MAV=bWz}U +l@)wovr7o3N@_i~^_K-K=DHYaf`}T={zHLQLW|cY*FE`0$`8H`yzAXrU1>IF1FQu8AT!Z$v+|p_Snl& +&{odP9SJm~6KwG;D2_+Nf`<&)_jT6J*2djxxH7GBKrHn|GXT^aber51ZnE%V=#ZP7j%bo=NwFgDyI +0&ZM@<#-#f=Ug6&_?H$MY1a{ccHTOUQ?sW@cDAe=q5ikpibTKAo9 +;X1MSr>L>;c|LrS4^|_?!~I-Nu7>sbUNr~f#ltL+FvO5&4fG(VXqlBC>(h|(f!slUtVPR}apa3vwCem +Pqg(aYPv}{wT){#IuZNs?KTIvEvT`l=KtM0{9Z~{Gu?a|)c+Kj*d>agPw!An$xB6c9(xtxLjwB5vuFs +X_v#X?;I#m?P%UFP(ZJ!{owTeSSyaURZD_$Dn&5pmXpA($BKDgo!HaP=YEIwgogrhzK_M#NDu6l-f6~ +`D~UV#^7_o}B+cE(+KKxPDrHTRd8Qy^wP!tr*fkA)7|JBS5(S1tQ;)wNc2tqso{7V7)`6b8B>8TaFpSIXMiBQ(cWx4Wu4{bXENf&qqC8 +KXb3ov%twLB?te5VW{?AEw9OE?_H|$`PpR8kX}B^BsCik`T1PbR61Ad_h>ee>3;>VP@bcQDzF?GOW&R +F{(wE?)K)-!_g`32LN6~b_o^QPkH4=!&7`jj{?F(}Un`SXEO5Ge{nLF5Wr~+R +7so}W!ekt$*sLF^i||EClSv~L00=K$?(fMOwly^VdIhB9&(1Y`a#k(l^fM8f +hj3nD0pnz%p*>a;o>EuwJ})y)avhnzezDw+u=Luq^?Vll +;Ra_R~R$EkoU(w)NYgbZ*~~U>Vz~wLMmhz%OCXnAlB;g0C4}aIaqQ7+NsJLd-&o?7gB$e2;y>YMqbY$ +$Q1Pk1rSFYxrEyM7Y5FY@$;Pgkm8UD_ponxXN^1j|S4##w@mzO?1N+`$;mK7n5o6z*KJ$rqzp^jdO)u +vE8g^Z%Srgg<0Zu4d!MI<|Tx|({LTeNnuuTEw|FZBV5ZI8u%{PGLr@bP#2+*4*;Zfmck(BT@Ac`9JV+$f&;1l4gVmL2KNem +0pC|m2fQ=|jI1h=E<0o@Llw)aq)!>Pape+V&AIt0jxV`t&DpAuyuVl2?X4C4@0uHiHxRgahH>;(x+u; +8ie79fK@3Y9m48n8;PrQeKapF+lt?i*0u#Ypj`vlJ(L@Fj4Hd&&mgX-jDVAw2~`8vEe(hL*aCYn9Gk4 +dvx3ZGI7*&zm}9r|^~`0W@EL_5)I=fL{Q5Xdkd^MABS_2&eDD+~j +ZkayX14poh>h9m7#6r{Ex+Mqs{^UDNXfW0$ZA0;B}!QxZF +#RbK|)Tgigc6;XheS)=N{McAKJN;*DOZa*ax^Kj;|LFAne0Jtwx+fns|6}^XJHf`6>Do6teXqtJHb|7 +o~)`b^jcBXdda5{!0L$6lj#1RYEiDO2v(j`v2DuPDW)JIp*3rXav&JMf(qKp_2wZLr3^@-Y>QtBM3ySIH_b2P?^EgYl_|w( +T&kTZREjCvJCmHVTKe$(R?_dT7w0p4su(f`P6>Z6py_xY8A}ik;A{e{@4|^f+px>Y7yKGA#+&^&C|SD +<@GMYLb{Y9>e_lME3E!3}Ll2zV{Gd#ij8 +Tj@!GV!ed);>vORaYCIIxwD?B;xR&x;hbw0X2TG7IW59YBDZz^N^}l{sRNR;7hWnn1Y8u6KyPUhmM?Q1)i;l_(PrAo~GrU)_TN(*FUjb~LU=)+Ee*K(tf}1^T&Be(nX@Ai8FD#J&wJ +C&r$np!?ESFl7(CLKlEB7n0$TQm@8*aet!@H#purh8rB)e&cj9&n|Q_?eI6_b|MS*HlX@kmAq6Ulrwd95uVU6Oai^R-dC6Y|uTEUy_p~!x;z> +Mr4OMlVsGqQgShGi8L-5#okqTS?Vubb?+7E9*#b;x09vl$hq&DQXzwv2Fav+d=VUw)OzFQH}#<&z8Ed +lNIZWgA*;&U=LZ;FD9}^&mszScqF9^slT-s6LY|qjuN4KsuLjVOVcgb6$Wh(@TB0Tn^H%wYE^RK&K2UL5vt%Lc&QHuJveX3Ynl +jH`I-wZnUc-6IbH4X%)mn>}8xRiDWNisv_^wiBqNn42}fw(Q{%1+C_o#5pP>vSWREpz-KirPMKnB+iJ +mLl`(x`BcFp&c^Cx+wQfy8gej@5KcfNc>zm5G8X94}fnt84;^F#rG%P=dzrmI)Og41}@6QtlCTvJ=TA +Ve-7F?RAWQvz2Y_Q^MUT|r5t4%SrGfau&{f73$Cf=#{kjC+z815I(`X87x&!dtN-$C!GFIo%B@0K+Tf +0ew!2gJ$x^T=<|wn%O#P5_ShGs)x$xD&d1kO2@$IOCW{FT39o=;J4P)SO)!>2l3ONF{u#huqkSySWG? +E%M0}8nOZCivT+6l<+B8I0F^@<*H#DfU~wL7#Y0t_$??#nv#!N|Im;yHEO{ivT8MFHxx9#c93`Jmmie +{;?QMb>`0K`0*G=-92ykH;x>@eJe;T;#=NPrD^7Vrd-A%)*}PF(!B%=GOIE4WvZqhNV{9Qyj*!;|(XJ +C85%5|>~RxAKG5s&J8+Zv3A41$T2xKACvna+HGT<2et=wG_^K_dWY0mviB`ctG*Yp~Q7l;%P~_t(oe)k}q97*E9S63)rz$ww$My@FR+7n`P-osRJ +OJ}iDSuH$IR5GJWC4Wu12l7v)kj8H4L`sa2|C6_d1%)p?f2s-8errTjamU4)E70;PqO2 +`A}UlM0fyG-&5wNjH@-FOa#10)Nl)%CvQEEyx0`--)B;wGu@;=y^HuSzb)nW28vSH9NB1-?K5)Pl3qz +yS@Uvu$zi!D +lDw2!2$WoG6uobhox|_kX>5m{TA{KAOO=4lJ|1$C5)v%}qBMfw9(2X-Z@;t;8UIFx~C*>dPW~fb%$&D +}jN4~r=@+CC<5?twyx>(fYo1cj11CIGL*`%k5PYj~8P-;%RM{H^(D?kD0NyCCgLhSH$C2R&>R2Crtn} +*2x|EyVc%c(nq1fB#|eiFAM@QQwf|8DVo(3W_g{3JFFBI=5Ah5O|v_iJxg!P_`D+3+?D<6g`~Cagf=P +JZ&0Q2?G{fTx!ufVvmUBMXP)?Qi1*ke>``8OtD}Q-1O=yxo9P*-gd*fczvLS-*+OUqRGO)FT+xslS~& +f`wsz^4Sq;nQ*0Bq<~c8L+r5}X4jiGzp_`LP+@c|IjGPLM$bd!w)&3NLidGKtW93E +W;pk?J7NZoWQ4eXr*HL4PCRPs3G-9qtE_C$sv%J!L;>W2DYv3dg`4YDc7BV%s2yVMxTLjn9oBh!`+z4 +Gs@7-)ezVjb{gPD>`4K}p}xO^>0Zku5No=glFy>^Yh3g@%hD*W2ta22+aACJ*lfI1H?(Zu#O9#W%f?B +>jZtTH?z#q8AUcCWGEHMmo67qd}_kDn{T3t;GF|hs1 +}dVSi31;%13il~R;653xic*4_s-9ff%G1c4QkEhusHP&%-Y$tjc$>LPeC0nxbXuaHVFZMDR4g(=TR<= +Rd5wDr9Z76xk(Wm1UPj4nWdykO3A``VdV#WR-zI$SbmG9B^sS{YW!j66zR)2(DHbC +HBhSNWu@k2OKVB>@qb6>dVsQlxpg~;z4xCxEh#fc^q83_om6MSub?nrp5KhRQ`pn^4!YDn`X$b5bg+R +(%U&7lW^Dw(S59hIZQiIVOt5KWYSZ!+Rjiq&v&oby5^N?JO^ymv!JN44kkJQeciCJBipy!{lNqR0EP0 +t@uTAqZoJbUm;T1Hn8sZ^e`hw4^poReBNh-b6WqJeAq0bL`}_fO?n(s~#v_^iAn+kVRNj*tV)HCXXxy +?AlL26Me;zNy?z%^~~-Y7j9MWvl3W$Z$hw8&Sj0mY+IG1zod2$qQBw-s?96tJ!!8E4C=J|mqFUW74TCd#~tnKI5`!HF#;QpnjJ$8=f +vV?v7VK6{3IWS$Sl1ktDm7}2RRr^jmPtR%vb>U=wlG{S#mL5X9qwDMV1y6z+2G#VP_Kr+g!F^q8+H%X +a%|a1xn_vc&UeOEQ2J}CDnEYPVqiuHO6C6tUKXmiVm2}j +qNG&y1FbxaN)%C4ds?s*xw`l)ET^_pa&^&C<=Rf=<*4h-Ccr^+$f?y_Eu +VZ_@#~hXJ}NfX0vV@bstA#t7F%X|Iv10XpzV4~c~wK*<2odAt}pfGc{0#DFXk#(J93*MARD +v)Tl3BcJEp}8fx1C!SWjPyFsG~ZDupvprYO623MiTgzNp2GQd +qL5*n(5eONulJBByadfIWRG%3!Fztwv5UULP(Z;StK8%dEA)$Z!U5kK5P1-r<$+~ug?^P#cuC!ZU52= +^$+%~HwmbvlTMHSyc>m>nz4QHw~ +mJ7{ChL!2qVYTWbf%TR7zs5gs+COLKXqDY2Ocs1j=;hgWE*=X2m?-wF-w({!{8<9GII#MtYK&p6+ +edW!0n!&yaT7s!!dlgWK?&Z +YQ-|n#aShh`YDk(Az*>Nwv0k2Hag>(g8O7g;RwWZ;1U}a +yJ6*2&2-5PR><$m$AX>v3iw}d}SG0oMC>M^sFBD)6LnAUPLy)PLoweV5y3RbYkd&TPMx9h)1~~doA=P+h(7Mlp-w@< +3<5XaVlwI+$5MG$bPL&{A_5Cl8#_eJZ4i%#Q_ty)rS^Tbj;P9)6@mo%H?%OB4|d?r!96~dmpl?Z3mI3 +)PPKOZINX^(BJxLKv%TH>;!^?oc+YZ{bj`&Uampqpyge0jLU@*ja%g$A=ApFLyJZut65E2YM6M=@UUZM;wJrU9)2 +Al;siuoY!TD?4|Kp3~a@H#^EC8W<^K7r%Lw=D(4XRc@kTAyKAYV)9aZc>MjP_WmXy7cqqppOEV!aurL +!BI1KEmt^lp)ZU@E%@`a-)ZAQmHJ+QzOP{czMeS)nF=tU6w+^d`Llga#O17$fJ?kB +Ej6Bo&fHj7k=_TzU*)q@FK$`#hWu*lz7RLu%w+~h7*NBUGix-y} +tkrlG>6adEKMmU=1(`yh(PQCcpkr8wot?tHA)8k7* +jKz3tUv8+^HA4p;D@Iv1VIF~lKXew`(qsn*ux#ZtbQ3SDeK;Ve-!SLCe +;`XPLWsEj)ilzz$6c^qE9)zpBq;VfAlzWqzV6rJ0(n1B)&u{G;p?)SN!!;*x2-3-QYSO+5T?hrWo{0< +T{?rVOMnNSVL%e9ps@^i%dC5OEYMuQ-@>KKv<8&K4Mh!KRMy(SZ=Yfhpgnt_vjB8Ap7B32> +P-UezsKRUumvh#Sa#q$TS-M`Y7CSgP(djIvbasHJM_iiPSwFjN(eC)<;&wdbE0s{V!mM*-z~<@Z+UA^DdjFzspNlv3p3$0)`ERp~Y>75yAig6YJOXrtWNV*FODTFK; +Ca_a*N1W}?@U<3*a7n(869`H?}FTXD7UaxG1CAB&Y21}h9wmb@glAbzK`#OxT@JjF{Lp3J^KVYshUiX +C}SD-!$Ta-~(gh@KxVqUVRO*gZ`?7QSSm4jrBw<KRCKrmif!{|Y7;HwU^hmaO531sS?Urqx7S +c2WhvQIyzI7#AzK=Z46NUPtzj-VS+1rmz(2H1a-Ef`&j3M8BFjNK5%U=0d@o6kK#GkPhN(gykegTs6( +k#`k(=JbDN3$N0+QF>)tKTE3tHbo*SzR0LF=8I3UYDV;zBbB;6gU(eV1nb)4Peximw^31Z>%`M5^s|e +4yQ;gcX_#T!#J?)mr&^ZDob|#!zRx)iuN&3|08eHT;AMAxl2g--%N~{L7G3ZIf%Q=*;+gTC6aEv}rZ1 +eK$!6;~=QqA|E&07CupIROQ=Cc`zMEKgNI4C%Ix-$L;|^G2m*6L>p|hM+mNg6 +c_I+8iWzO_oUx~Rwj_}`WyVKHiF`aLqn+b{S2TiTuvzr>#bpF+LQ>L8SR;jiwPO&I69ko56D`CP5FixuG@#d?C=&dUnZ3g&KXb?KO`+hlItICm +6wZ1#ClSakTW`M@akpfo_4ghqL3v@Ettr$EAxw|c+<;cdA(%6$!m~nD@k0_iNH*XmSl{aMF&F#%_Hoe ++C8@C5Z+c<9T+uT73Ujs*kO!C*ak)F^wmh!z4M~7fGbtz7n>npnnx-_%2^}d@dpzm!;Ya1tXt@mZkEJ +c+s@pesVL6&)YyvWfnw!Zw8epC4UZ6P| +Algz>nw05E+A9QzBeXnPx&hQ5l4i3E^G=xLDJ&!g-ScnL`J>%&xwK>)c}ssml%-6A8`U*%;d+^OBv{< +Fl2<0kL{t9(<_FDK>MGH&P&CjbRm=OCD{Dw)b9-vQ48jF*^D}s7}10GKcbT5luD`-R5GhxY>cP#zxQV +@tCvhjDRHC}3|xf3OgXi^EajSX<$9!?R1G*lNoR;&A9#==Sc^~73W4?~2xuY_&;*#%e3rQ{1qmq2sHD +})j0OgS0xT`|LljkM`}~$VM?0+ef9^&^Dues5YQ@Mj>g=Vqaz_)8Iw_LVKA +t$V+3-w}VbR=&J?5iRN9!eZKrJ`3F1Fs8VRpf^k6CN~_tH_tpWZivHS`KV172`5r)N9wDYeNN!guD90QR(r&{T4{at((r?#x3!_P +QU$Yn*Lt$SB*mYT?5KGd1L;T)9ep%8gQNAzViZ)?^)ZnE_Ps%4sPn-Wn|5tU7q;YnD~vq-9l&6xa$m9O0y8RrO{kBL) +#|fZJAzVT!js6rX!2CihSb??Ft)VrW-&@X!@@RTUMwUDeyvKnda5*uiAj9Q%DTY>54e+Erl~$uahmWR +fu^L%8Wu!mf&1Dx<**w#6~T1=kFh*iQ|iWA{@dC=8+z)WNqkBPg15JL)ofuxGKkda>7xE|%!U=Fnm(4 +q|DvKypQaw3IJdEagtVy6KXSFKfEAhRMO +EQH%k3vLmnHa%fLYpRG*&)byDyB1&;*eS%#8pKNop`tC72C)PoR&g!m_QxSEb_Fn}}6&FwwpCf5{F{i`j2bXUVqmxDO(f|TA!?jTU9sZ^^Ljf-~Ub-0lbeRy +5(V5&wcXnnPpTG1>^SYN#c1J5s})>l9}`S8b9RB(ZpLA-7{lot)OUe<2fYjhv;P(v#0u4YK}b7mCApJ +qlT3+cm2G96XW`vl9Yx;d2wXv4k_Qv%xIb1g#&iz>~upqtt|bW=O}!+L{aM-#?T(?L9ic5f*Nb1m3AY +`=m=Nwm~&sE98_OAhT)uN|TtWJg0NtXGI%NpFK=~_@4_eFM6K{(teql`0rH6%wv?w}G-Xa=CqZxcQQ@ +%nCsfuM*iD~!!uQ-3>&7HN~_VR0AgRDAedvcD +HV2glqnVFqNY@|xKXB5O$V@@NlU5(z}GCP=y+nL;IKE{(HK(%mca1x +V)>Mfe>T_y@HPvYHNElO5s?&|BM$(0DOhuQ}pm1JWWK_zaMp{x~w>3+u{_Ay1DvdOfmQ;uc&63J>o|; +i5=9EM;OMB>a{}wf)datRdkoT&T1IYBZ-B9RMZoji0;;DVq5#f9RCBb8HW!4CL(qZnWq~6&yAEZSm{o +;d0uCylc0M0`|IQksWrW@jL9*hH??4)U9b%Qby&o}kA0>z3)9AmV%JZ%K&1uwd47tn$WbP4VSTB22$D +aVy5BNv$6dH0YXQp+cNQ>l&6Cn`m)d;ldpc{>HBl>nQii&AJ&g1XSGYK|5(L*WOo9%X`7wEWKQ!h6WP +D+>RscmNqCqm2(Q1VWo1llN$-_~~V8eWV64;P$7`??DB&;fvUAB)?m(Gk4*ZA{xujQTJ@SvZXW+ZRP} +Mrg#9$VrpuHUnw(0Dh{g3L@fhM@NU{S3aylDrd9aDY`R(R6n~xGsjp#eMeh|@6AvIKqLx({AlrYAmQ^ +&aMy4x#o2iwG0WBeZoE+RrTaNRktuxke;Tr{KjZr6WB8Weuwo_jTPUg#XPG&0aWH!NH2mE~ie-j}7&h +^fbE+Bqft!+;VHnRA&5lW;|>4i9YpzBt1;)(NV+$TpR7Uf+$t#XqEctnXACeb}V-6y@KN(Rw4YTo7K$ +>}asU~hYEgaWI)s;QKnuZ~n;pS@CnJ*Ti`-VoSr}qq(?0xkgs;7}x6Y6Pw +by7WD+E;3IdgLBC6|^ZnQ+xt+&s5oEHKZt|;gZKsn^D{Ry8HRBvPh1{v= +6Lzoa9nNji#{p#P@fe0MtHG!d4v~>UySx* +u?=(3*I0l$n*g<_KsJdHb7FA1r~xP^)sJ*yK~0wLqq<<12ht9ASnrcYyh3pB2=o9NDntO{!!?l0GZw(96pQH8Xpz_hWe@yyj<^I35~_gQf|p_YAuJ}W>adk))8Qn?oVN+6<1b6SA}InrrG=LoJe+G)irnyoZG{+ZK?cc+b +TT7fh9e|1_hJSYAorxgkM(4AIv4t%52ir1%(a$4~>s&2pgHK!GyU)G#fJc{~S{*_KEKyt)-zcs>Pg(u +lq7)7#Rs-~fBq#D|l9xF^qj}@jUWooq9{UbeAVEO4uD$+Ew=h0mCW4SagR}IEK#M8~Oz&#!oyd!)R-0 +kSt%<4V~I+`zPUMhmW)6}Z>{)on}STv|ry9U0&OGSK?mkN`vRz(tCDoT@HD(Ijmyi^?0Jyg){kMdCA9 +jR7rPk5;KYeKC`dZ?hqd9UzLfel5y>eNVx5qj0_qdZhB(&no-Hem?6(@S{)z1tLV#wd5(^?6m?B^DlX=s2lcLQT5GUD;7}3_jRuoi3zTx-9x=rq?p2>hMm9CX$4 +NG{}ZPbrw0;FD{!GsIIS4=AeL}ifs4|x2ZrK5eBEgU=1DlMI5BXg(~2KlNDS|lPAjmM(M~Hq`Tf_OR# +3+FO-?IDFybqnR=6kr1E&?Vd79ITb-(|=JYs#X{vcRYj39 +gVAzshBC#Spm|By-x~gvS>SyQD^M23n+u4ya1v*^?i}b1q>IyQQW=4Q$^0xsBH!BWLAhyW<|4;c?$kw +@Hg-KPNoF@egJ=)MQ8Fma(L|uXfxFwilrFn1wuxcNKX7VDQ0hgp!OlT&lq$mj-Lhrh~E!GR3{uJAz+q>)_ +ww_H}am!UczvTdO>1UhOm3@OJ0Y#kz%$Fqs&Ct9=PcYtOJze^jxFp&?8e{sLXym7k#F0(f6Q$Ibqilf +7F0a-!!g^vD>$KKIE%j3^Rp>$6F47_{(ZdfK-Vw4?t=K2JA$^ylg5R~?7H)ahc6#Ve8@=RzA~bSaLPg +$LynH2ihT#ds)>U(j+_RjD80Rrv^C;y1dqk|Aps0wknUsZ2G7+`wW2SMp`6K1g{n{CXYPX8Sd +VXywtCwim1sCJO=!|zxxdzWf_!=6`!SzY`OS;G%rP3 +nE&x4RU6N8L6gNa(2l6K`a%U9M#RQgQ>vXMezknT#HNtl%k?4ouw9yNzKN54^f#BmPKe(NIjMOi%k{A +m#@#Pw%SRY7}jnGu$sjAMyA?wOEx5cf5rE0@Uv=-$R5l{r;AF2i@2hG6-pXO-O~U8Tl>`X@FfKhlwi5_kY`HuyHca}O={Z93e8MF<*iFQBbHtN+BV8ZrB`gDSgXi~`nO^fj@X7 +P{)TOnt-BK2CO4Li`hEkwi^osh#qtx?^(>KPRc)@f_7C8#hZ-pborjj2M@%!BX`WBL*IqAfw3&o_*_m +COXZg_tKBxF0<9yyASjflIsh^)iX2y5TGfv$feZp~phx|68ne=ikH{)WzWCid>IqWU6!B +P;i24BVNy^d(ZSIuD>3a>M3pJ}BMh?@-@r>y(}_WF`Vu!;|`co`^mhDI1PV>@6}RdU?}(vk;20TC~?{-*zt8F}-n;-?rUB&0>lSK*y^WpnYi#CtQoKU(}u;vL6VsVn|b;vGMy +rYtEACf@NHqO!2~>BKu;R#N5^|1k01hVN60_Zao}Aiif6zk=_n@Qzn+)b*?Uta`jg+Pq3h#SSjTm%0a +*)9bgjNe2-Ya_oSLtmaIT)#M@#A}?Q{F`8zyl@IbM2Glu)FDRD@ze}fMjZ}<05-9#1t%NGY?jdf-(1Z ++T88R3{75UM-l)<2RTB%fXD=qq^p +?t%wkmtbBc;lJm#eK&ywrr>X5!Ou_PJQIG!EEx)57Tjely55_=oA-v!Qal6T3i7g>{5&OKCOUAyr%3r +gD2D?s78jPR)9AoSKSTeIQ>{TH8`om$lVU4i!LkEvNXK>G!IB-87KLTbc&agkL~O=Jq>O2B#o&lWU1F +sJt)8{ON*O?ol$ +)wJ>x8Istt+7K250?47i7xp2SaWEoEh81E5ei}rY$HPd&(uzB^^K%80Bn-;cgLsv!sw&vnOVaTp94@pDDu!BbUw0SYOuMMAy +F-qLKQ{)=oFm+Di<`8gyNsS1$9eubJ-cbh>%jt!Tuu~Fu@gTVBGFHX*h7j*yRJT>>4~MQ%iibsSo>g5 +eUV*Xx(fBBt5E3i%Ec^x+rZ-~h4L+Kyzz`bg5b(|7ymG{jhpE+ND9axGAD`R +FL!l(6j?!+&MD62h)Lp3KC@gWS_g}9oN4PkqaX3vgK8-1tW+RU*coU7OF>aq7Y`i0bk_dv;tEpT42%I +%qB7BNh?+m_KIQQz(TC#88<3pI=oXRgHyS&1gj1p?}G*_u3Zk5qfQwRT9VjYnNaHEWYjK254U(e6@hN +_y0Fg5Hv-RfDe6Zql_#`yxZ&;}nM3kGm@YmreM;*n1a%sH*LMd=CsTDms{2_)1h%3ZJ0{j^-esK#(X3 +nh!)71VW%;2DK}K4wU1F>8)GZk!_=G{r>se|`2jXE-2`b-Um1@Av= +R18ep^`?=QMYwx}G)wBy +p@b?Py-`RgFKR(&PTJYJ~oO1M!+gJc;cdq!5{Zm#xpPQKuZ>X_v>HMqidC&BFm-3k00lG*-z*yIbM`J +So1byw6GoC&V(L>8fj#Fs2$4(#ciK_jZ)Ta+;Cz5PubBTp8Z-%J%nA+{iDB!N^-w~WI4+cs$wqh#y@c +16j`OeT>CcH4ug%5=6qODq>KGZE1#7R9|j;+?MH&25=oQ%~xC^;diY_1a&78MXJSbUhF`p?)7~kN +nj%p!s0UUxk{46N(gi(f$u9<*%R{cOX=+lRqwv=kAY7aK98kP0{%W!1YV@*rZZEo6QEV*PNZdmO=A}z;YZ*)>VP__=#uUzJkrJ9!L@7cMEHChE`P^ZY1=MN=MR@Uek;O~%chG_obnH%{NG0 +teN)`8k +x{sComJ3<)l1O>Q35dirHb<29DNtb=Mt!o%z=JY_6>T0UDXI)>gAqtLEpyc5X_%-aYRow&y03ON7R1{~2iUpiD+im-jg +~L}vl`n2gmBx~lSf%tVi#mmJJhopcHDgJEIFamO%ObuomSRb0N#UupZ@OraoTIEQi!l +oAkyA7Im?5>+Fc5|sjD +Eq##OW~UvY+1zLB;pQWv<~a7X;L;*&*#4b6qXhY)@hRet3seTu&+YW-nx;Z?TGVDBk<^R9>`pHNjI%C +YpthJXe=$zsuyEO0klwJ*u?L{~zr(+52aj{EaY=&GnkaUbx1;R(*0&4+r1;gUZt(yLmJ<*ebZk2F+>9 +>l3{M^a4HX;#6>bc+v<$GP+Q|E8GgsTB}**i#Wo=|)Ff36h^FjJ}TC!x5|AVS!_ +3M=epqXyTpPZ1Wpk8~|J+dgy_)@i@n0}r}(O4DnVn~hIswL`h6-`qt)AdM(tPY69xlz&*^DO*rj;R(5 +9-IoU|^wd+lrT*$bp~^#h3y##2Yrhs0%0u)*$pQp&0~Uok8Mo=6@V0Hb$-{1d#>DL&)!&h$aa-%)iWv +>=kD(~arFc4q~~tqw(yRLNycsWdxw0STo!4-o! +(ttg}$z6U(;o4E7uf*=NG0c*4ASj@`3cjv69f@BGfGlu#Lb816ANO0ed< +FrUr=CEbp{yyn;Q8dtVH;M2XAnx>&eG-I^L2Ry>11qE+muMi+sn^?S?%0tpp%J&_g?zjOHwBgp%5h1a +5**r48b<*B^6e&*(V=IAt~ZPG`NzjFHbYIc@qH|Jh^u0v>q2%*_J!g;7C%=)&_q{4;6$k-`lua->#k$ +LB{PwMev=cZpv>zV-z`I3MW9|T8wwSKyJc{z47ZJNEDG$;ZQdqZVE=*vWkU;GzMGwKfxfs_X3=IE8g7 +yAm5JPJkYbo(Nx_i24QMOWDi_Oyl&87G`;vuv;9&Q2P4IP1^bMO}uzLy8DibHXT{D2h&?NL^ql8@7C3MlOFSgAPUDJguFSL^cY1}aN7_pD +gs8u~9gohQ@EFR47(J#2k<-I&^)P-dRS3BiX%yv|Sqb?*RNWWAnUu4*Jk24k4EIOD@byOYT7^}awpsl +MN7LuJhhqp&{Tjg549vlUtl!ZTOrCn})`jc|^Xf*EVB +@0|t_n0L(OxRR^|rv}I!6T*%-$nA*w2cKj>?`3)EF+^Tm0I!#hwQpH9Tayqk?2@oo* +#ciAk(AjwK&>sec~tK&3+KosxT3Nw{F>W#)orU&Z0=nV`Q{y(O?L{L;b-#;y%pMl4J5UB;fi8INI7N; +%3j7d^Tl39*p!a;TjfCB#@E|XD6RHjXg=GEiZZ_LoghKar8vw`h)s}XkYXH{b&LCi#rrJ^2>Cc{1`SW +!CsGAZNXlx(^Yrp3bEV}Jni^repGicq287PkQSV!f7s||7k}i5Vv5Qf4FNUZ#kEq}EX_3Jym`U_-BBy +eEv`0y2=^Ex{EFFQpvbPj%Q}vq-pURsJ^{r3nYpaot6yUT5jTG@UE+;-p#I5vwFc)pG!Lp~)ouWZ#jl +!L-_2WYly301@_8_Vh+_L2x^6{l}t|RCn$*gfzUP>eP-L9Q5Jr7lnBl~o6!Dmkt=1|q4V~2h?bfnE5` +-MyAT{RS{BZZ*O^wM{phpg>P6mGu3YBW*Uf>!qglSkJ{fgMARkCLQG6=tDy%hKSv*FA{BR&|s+fPXl<+=bUT3;u%h=@u%pJQ7)m;*#w +FQllmv<*9;An2Ir7UVRxllXmm6#YdBfzdtOsw|i_5h(tp*A@Yly$;V6;Y5ZnHP#V=LPA`gby^NM1offC+1Dj&+2@^D95*S5rK{qWIbgSor0B}J^!3BQ +xT+j_%KrDczxT3`)m+%^VkUmsf_wC-hzV7d}UsrrbN{`vzD$|cn$YP1o(OqH!g7N_+;DBzT7~4btM52 +)2^Tap0wTV*e1!`fPaTnGrc}*17Q7Z~7P!v|9VyYG$Mz^MlDM?XLI>!?$`+BJhQYkP^dXsb$Twlk2isU1#&>}9?<-xiF)^oy&T^i{-VZ{+;>6oytf%TxUJ_YLs!nzLDw}kaMSpO-k8)1D +;ScPWhwZd8s>q=q8U?n+(6@9w2Kvs`W%UPcNLR%}a2LBa +~*O6o4GX9WGiDzrBH2y2a?KNr>uf_`DG74!?MP-S;aSg|@L9TZk9zDpknE0l;xZ{;c|Lzjm1vheVOb- +l25g!M6D^@r6ZtT=rs6$@(staf1ygf&Z8gJ4Y&*8Z?g64t@6#t7?BSnm?nP*_8RbtJ4o!fJ-KyRb&Wd +Xun5!|J1=9EZ2dIq*n;^+#cy1nalLItA7v!a5z+{lYp6*6lfBIytj}t}NSBm$%7F==}CckeRn@fO36xe@Y<;}ZqNtj|LCf4>*dJ}FR-%Rnz}7b5sbm&XX5eIOy#cSNer-lz2`TlWgdZ$!9< +y)!wsACc;5_aiCXv0dN#l>K8DNtKnWx|Sb0;V9QtUfM2Z!2ZiUh*nDGdm@k`9lx|4i}tqX(p^}zAdip +8btlsQfYN{0QQ=X&OjCZzkjF{xbrl+16|O^`J5ARL45nJ+(sh*llFR5Yt=-fw+dCvDIlebKzB8Jx%}l +X-Rb>oj?9whlOUH^T563s2j>`t?ZRelofq!AI;k3nD@N`t^t-g*Eo}RmTU}?u!X#=11PE$b6JuR| +V2f0)dU7_o3z9%Y2rP)h!#RTRzrGt&+n~r31lTI +`}Trrg4e#JVkJv;1hy<1Um@cA=pCTid=ch8Ts%jG9@x4GS85ChRhl=YskDn<^?iq$*d)_j?B6;J$Bfc +XN_mAS{fWg`x68bgu*4tFf(OOdF>{)hTrlSYHQiubzLtj`DqKGxEL +k1(kH%WiTk!kKicgeIVq*HgD-UO=+t%|a*t!D^b$m^G_x(!K#SI$fo(l^NzOW@YtYLy#$))vKZHPj4Fr<7X&- +LQQV1v=FA-#x+_%TqGu|-MRFUrmZx5_B@nJ(vsvcXYr;Y}$p(Sp +8k4MB2rZz=)+d8=_vple$*-QT1!bWy`gwzTltmkNwPWI2Lo>*YxSG&0jKr&slNF=5V{^e)vezHsq68xE9#UyDG-P|qfUgBI|@(ej3 +u9m3D^m{PnM^2>Uqw?qE3my>z}wX04F9KR}8k+M3K$QaYb+M>KZ@G8UKlM+$?gp-{l&g=8QkMYg`&+O +1SiQwKY?5I^&PK+D4MaQ@n=7A200eia$;T>PnvOjBIbNrj`cw+PhG?~SMX5M>yP^&{$EAgoOW!Y5HDH4Y%nfRNLuCD{IMMj1xK%|_@GYzNhQjb +VnnKl>&KsBFsFLei@RhQ0dPl9^YEP6(gURIxy-zhA$&Y?RC=))C@8PQStTa_xjR`oWz+Y7Kqu*Q>;YY +4_3D+vc)i$VtdnA+%eM8||kvX-EQ9=X%=T2|OPJI&pe1kwH${-(@laDrJ>9Yc)$s!%xqfsAU1TMX3_s +a60GPBarm*E5!l8%M`FudT6~`fC#&d%Uc|mj!cbquiXSTymFct% +N6BIlT}Ki>PcDWk7HCcl{N94WG~Fv(h7|yKpYdn4M&ijU8BS$2^(99dw#HzAhgpzj +&+%R&-s9Zw8R9)becv#JZ1|2NBSB6PZj;au@Z*Y?rhg3V +4#UG!Lg$1e!S-J#%7?DFY~Ny;fwg}0lEbJS4JyIo?NUVQ@U74l3&Wl! +qc4|)dw|Lc~pPm+KxMl{Ykt$CnM8NL8c!eQ{BsTF8C+oHec^_r*Z(<<~`o#dAGe9Cw9g1X(>0BE)?sJ +NXX9>@0*p7?u?ARHl+%es8J@;#Kmq(sApR2!L5$V9*cb)mp$zr*Pj`PPCyvWw(^T~%VKxu`c|Q +;lS#eB-QEU!Yhjel)ESk^Y4)~g9M7hT{<1ngxq7g;d@+e!vzU7EV&FODZjhN_UbuSEW=@h$KPxL2?(V +pDqF`^5^eNt@HHGymWl^KjLxnh+rS5~?S%?PfUHy%e+rYht?C#oC{h>lDj*^-77SvxB>6dSmMrcy64m +bWY-Y+THbuMg%!PW*;yw+D-JqFw*1D6jn65Dh%eUJ +-+M2Q3k~$xbMUhB=|Ds00lHYT9M%LT`cSdxG{9Xkbq7oHYHA|lf$TiPFm66I%nu(uaJ4lY@N?}TkdMB|E!_$2XN(2oxlnI=t~si{w +NXVitZ4HAA;L_|oPam6OA7?vV^E>f?;F`bb*n|`E+y{B{H3A>fx8JjLIobchGyVlB0uBO%U20419VxoTi!tqvuu)asH +>eb(imEGmbfWo4_Gr4tht_Ei{Ay$FlU*ZG}h*1P78}C-nt4--Wzf;STI6aX*B(s;{EdbF7FT#?tB`RR +{TqA>f!_*J6T)v*kyj^u}iM;4m3gj)Kw!#39dnT2g!9PT$--N2xKS1=>+PgoyHX=xK##=4#5OngV{uO +RUbF%9>&uB4UvwsaL?iL~Cw%%VQ$u3l$;8h_^L)K-5ER*Xmg4ws-q!V24`4LEKCll +2yIUA`%vzCWkOiId_+!h}|*Hlx3EGt8@!4*P@Q-Z4^AxTlBDO%d +$!|U5ymzk%WGzsXoB{R(u@N4&cCGq`X{SLE6p<#8$#7XR9euPn`yQua4Zh(A~r|@rS2krH^lE#AZyIn +O$fLIBEh0jOq1`sohel(iyKn>GM0(?UxDV+l`6YD+I(bhQ3J?!CD;q@U{b98#y(x?*1kCnAUU-f4IuI +LDNnXHs{y3Ku71jr)?R4(_siG_n$qlUnmR}x4QN^4kd~XIZ*A_J9wck^(PnAz7Bqa6C{6Lx(BMrp3?a +$FD1TWr_?$Qj+D55*B1Z49oMK`c*jaMguuFZ)X^^sQEq$XS*;K+@emA1p(Dx0I|L61s)zbyB|8TIm1MYNT{F)JWM- +Yf2dsk+r56v|3Z(46P|=aqiP+szytt@sO-HMb=X(bXck-x?5AmHSRL5`o3OIWxd{%=x9Z6${wLN1;PJ +dEtNE_asFm4m5%3yBDSiK=G9ap-HsYHm4@ckRQ{_OHI<(>R8zULc{P7k0mGO +$2$|yxmtvZBhuFNI{>w4%z~7aJ+6{7Yj+mGKm!>T +Qjp%56e(#^hg7RJl=AR0&ShD5^~SpHWnKl>4|}(NY=u +g-~Nu68q~~D%AqIaV?c!LKn(4*SK0&a$Qxc##$;Bg^f)ptAw_=KTJ*K;zu=VD%V|YsHPG*-ME@c(N4M +0F?+q5$~9MitC~uYTuW*y)d0V)rgDd%M&MJ1fm=~gX;V~GPE%E>yr)r7iEz!Rs2nC#R3bq0Dk|G+R8- +#b`&Cpnr8}j09hFMy{YE8~r8lgka^evp1d3B+#&9c6K~em=lFB*tN-C#Zr=-#xBlMvtS}K3~{aPx~4* +!E%D%V_XK}+SCXPePd3CXW1EtOqocjHj$IxNo^>rd%-k#;EIUUY|(;>cQkNPO^8Hd0J1Ts6wfktPChL-dZ5H2Y1EZuMw1`|Z}?nyk;|) +5XrHL>T?(`XDXxIaJqQhHTi_}I{8;3jeF~FALL#qXh6t76-evKa9Stc;0(tnB5fTpzJ^`l +;+mrB_Vl7J3-3r?e~(>X}nlzv-BiOl2@tE`$6D@~2ic;z}WzTqDuy7}<{7hbcF#V(w_a)gdt +wAxV0)cSy{-P;E%e`nlROG3z4lG!zRsKF)65A?4GmZHSPgB-E(lkp84Z +h{*BK=hf94CGv +&^W&d*|yeBDH%uXPn|=4Jy+N#;*B{Q?~9RZFxIFX*Ok%p@^3uzDhqO%}&E-UB?Iw%4F8V+Kc>}{F)7M +l^YBFGYlPxieq!A5aLgX0|v*l+DLaitX%jfX7yOYZzG+6o3pSES6OqjvCM?=YUsO277OqACevv@;nE8 +iFR@i!V{|+Qfn=;+XP@R+Y+&|K!tik<6ml$rN_?i89?t)7C +XnCd9GRT3Y2_--c!bF|~ZGM*LJys0oxczM=1?WY{LQgGq8s{T~i;)dO<<+2)~6V +&ih%X~!)r%t(T*VTT>c0tqj{9AUK^~_=5JI!9Lq1?k!Zl*}pUsinYz}9N2Ooz;gIr)uEUOR;HL|Zwf|C4jX0E&{%(8iy;YM@l&yKEP-?9kaMVrJ8dLwlO0uia&vf +42-gKp)t^6s9htr?h^q=GxPb$|X98=7K4pPl5b;I}3Sz^OCiQD~gj{Bx4^?Md$DUKJXyP`V2iQDYbO% +(;hP3LV!O1@2UVv_XdwPLYSdVZGrm5KBO(o#M)(Wuj+Sba@b<_Aa*AlF{v{u{C(T&eO=intVenYZ!+}Mvzi9P2Fp5ba&$;Vo>VX;9{S}ZE<0bG-IWFh{F}tO}Ws~Uy2cKr59~ +oaPkRGNt$aNM-r~pH@iLx-fj2F@|aTHCZxP{k8y2zStQfdpPLohrm6#z#g$swo7Hd3{aoJ0ZTbb!m31 +pN-8&1NTjcSXYiF<*;#AanTsneu>ffttWYHtpRU1<7I#9}OabZ5TR*nk2*%8LUQoNxPO{z=S%DPQlj_q}^C2z@ZkG{!X;De>wU>a|aHQsho&W64&HjFzuvraLshDYz~|$?+2sJB +)a^Qse>|oWwT_BN|f@$<(+ENHQQv<*R}~E<>_JbJ%qxD+V!Bo!Bnk% +`I(S=+D1@p5!rX>m$X|GXUo|OsGh*Ec%+)Ezt>!tW5ODhumc``+3o8j5a#%K +_8?~Ry3gvE>+Pe8KzcDRWR8oSvz4~=yB=mvT+`!UB(rql;S8kjR$aHeU@HH<4lSCnfy*;Nh)%kTvz7% +hO@o%em#n3h@9pZli8qT+(R^L;7nV=%STaf1oy0KQo^?}$kJEZ +b`6+tiJwwXPO@5`O7vHI6QP;*Be)Z;`n1ow-b@+0};1qYNNnL4f;f#`m76a$xGgx$=it9wtg!y?WuEABE9LnRqv{-_HgY?5L{%Ce7{l;0N94FMeYl{iw;wBKj6YgRka9$s}pe@Z5@%Wq +A&{|DjgHI3rf51r6fYV>}{l%?p1YmI6mUk=&Ro~T`9VM5oMcyUt)dlsVCCayHt%Okzgir{Rb`sqok)$ +((<{q=(WzMn%>);lP^I3|7}v7J9%l+z4fPMoZf_MZ~FzuHA)RS^Am+86A6i~{YjhE7vi=$!9Vg<XK^V6Y`c%p+cTpQh0%wVGZOU7OmpT@Tsapy)! +n5Yn}Q*H3I%98-9+M)L44S+xzaabHP}(T(zmlzH${7;ulP>5YLrg7)c5Nt?n`}7Zq(Us!Tqeb(if+Y8 +(ry(n_HnkDa*rg;_S3GmF~M~`%Bi*+u9Yx+0ur)Jexqs`=uE-!|@ +ItM+kK3Z)?OO^6=S(+@zhOm^)QLZz`3A4|FpIZhT;{NQ7=RC|{_DNB~Q-URoMWSN^pl4b5pNR~bX;~{ +J&L)c6qr`&WBHgj`G*vu^;VKaAe9(l}#0GbN{bUp;oqP#NksaVHx1DBWX=A@YB~&40IO^DFWxEA +T5T@{6^fb(}QX0%_7%tKeY;H1f(ZF7K5%K>t^X`=nlQ;wT=d54_o^zT}CIy%vqk&3zI~tlI@O#s#ZI3Ip^}=$x^2{RSd&z^1iYr5|7E^N=#MHh4@}2(G~C4W{)i%eNC +b7w(!mOz8-*c^nF{OTJB@(*Sg%++p$yU*rglsz14ffxAQ$bz8kTNY?Wl&IpT!94enq(6tZW;30o^{3U +RB)r7v6+(;#YzBU_&IpFu>MGy1niu|VI-1{6T0S`0Q{Z1?&oiazU4`3qGOae;nqc0*f(y%nx*ymWHAA +4|M+Qu)j}EwH1fY&+?Bcp7=}K5HnA|33dOJUd8)_?X}n!A}IfH|yA~1a}Zb6QmIo6a1NABf)zFM+s^O +^tb3(M}k0tkp%Y;{M1#)P7oXUt(oNnn6 +HbYeTw>BoemT0l<@>>j6~~Y#%iePM-K{TbLcOh+$Xb1Y%CkVLN)dwY&eT!Q6inm>>d`wBG`BqDO{rIZ +v>l1epRROQm@AE;7CtNE&Vs`((DR7%fIerZY!gaNko?~@2ygvi&pB~vlXM805-G}wIBVDA4w2%(cp +m+&Ut ++!IADE`;5|1`+(cr?H1;XXnmQ+q}-hQ}5;NV`$a7jc?m_M!)tqb?Dg +X=3D$bcj?-#`>j0!diLra*r#v5pxbT_?muAQput1#2pKwT_?@9)BTOSl-8I@AJ|-eEYV5e^nAp4H;_n +%sFkxciq{&IiQ>NZKZTgIvDYH^%&q=eS&&|lpx-WZPPHx`))_j}2VE%%I5BzCS;o>3|k!y`wkZDV>=F +YL8_U93=%^}{f5|>zrvNUP|s2{7~6C3f=JaP{Zt<@^R1qeFYvepV;$5DGqq(5yK**B4TrF+=8CVbE)# +}iM6ix5ruPo(~BFqL+Qa2Y^h!U-F>??4|CAbOSn(Q{ZtpN8Dx$OdZCgj>2ubDjvBL6qc^Emic0au0-l +27RDiw4EI40|MwbRZv|ZQm9W0{+YrjmEvWx2b6GVRjoytuvEirV4E3JOd~!Mw4p4~r=qV2U_s +R9&!IOfyG@iHIAD$&CvADAHd#_R0!MI;-0xcjF4hJyBLz)WC!?+8j~l2R{Lw~t)HxuVq2mi`lb(U^|GZaP$))N*Tzg +0x2Q?;x2%jc*qMAOe@A}c(zM^1-!ON6d7`F}ZUKe23JCyd +G}Us{wpgE{n%>agfq#lf)xs7C%m*nPCBLEO)LOhA{~;`_#rn>r+$;*la(m8I{Lu>*2ySdT-G+PwZ1RN +EWmEbVm1mmj>$U0J`77znQ+l~f(c-Kk)iie>aNn<{|9kkQVNPkHyi=9b)pYCIA<8sY@I#R3M>E8j6Cf +mBO9O7WzC8}s)X$CMhY&IkqR!@tcUuGe25ai)#?ytg3)x&vG5?bn=nON@Jbk!_EWRQt9Ek82b!@bVTZh||R9pFwTG;goFVrHGmOdzuhn +J0cRv#w<3k%{k10?51-?w8H12bun4Lb};hYsQr=to)*x_>a;d6S89onGYZzGNGqv7Ma*mHIo@H+J;q( +(-?n2TaxJe)m|Zj1=C*um0Ux~DvoTJ!PL)RS}Wx+Q2a4AQp`VcsZ0@So-+2zv60q&qBQ5z?_EmWG|VB +&-6DF5v=bVnHbT%GBxX$D%G*R5K{@v9Y_fXeUq@xiJiVE>ho3$wD#{Dbu)&lL0tSR8Oz|o*1^f0y{Zvj093c-As!9a$A{(KDVzYm^(>;8h=f7kn6{})X))6!o_6MqduEYbYwZtzbVf2 +ror;|BlKxB>s$#s7c6bA6p={7-X$uKw>vp9UPDtN-)3!M}PA_;>$)jeh)fq(AMO*6)T%R_Jc{exvl() +7{ubT>Qg|mn?OZls@>-GUsyFin5gtuUh@*M;`slV~?*{`^1w^J^j~b)~$bb!*kF7?S+jm{{5ww|MAK{ +H@*7W<}F)a-}c6vZ@vA_yYIbUUa`G$#|Jxi?cVd@-hKN&I&kpN$A>@p^s~>8d~x*H@h`vn`ozg^zCCs +NyYHo{AF9v%>&LS-=YBeW;pdB&YA^qCrS9rA{%sH7;4`C|A_L3?)ElHkJz +2;dd2>j#*PcfRJmcL#{RIzzDi?Xt+D@EV}C?r$E9SdeXGU}#bvGJ^u#fZaTayWEIBhLEq8vRE!CEpn* +;aB`4;Q=*;$r3wwRpsT;FnH?6p)$|keWw<(kMJujj8 +YkYQk78sc8Y}*4%j%T102Pdt%QboT!PW@|;2@VV{>N{UhZlNxZiHEF3ilC8;~v#y3Rk}VzX(yS- +vfe$V#*4WoOQjL#RH&FV}8s+LQdKP@0Jdnwyx7&rxQbHsL1E0p^IcqkJZ>e5y08epCb5^xjXYjcl>&Q +(wk&EjB9ROk2R5+%!u-ZhAnTy8b&*%(3M?mO&y-E19!J%7c`dC7!4SdBosyYI3bmTJz?ml8tHxB}B#2 +Zy?oUKiKj!EVEO|F*`HILUo^=-((u|Gcs+K{JhjTmVnfBo5dQ?Z;(CTI%sxg&LB%pK|eKOBYvpo734$ +#Gp)Hf^DH?wcSa5JvRLP3=A?>Br0Stq1Mauy+AIN7$BmL|3h9y8@q3C`JF?PT3!8V7G|9{9&d;=EfDQ +6(saB2ijb*2)GeN5orirps>5|)-HmwF>(=4LOwf+J2e4sUX(%1o^*QeXBcfWvC1$%HxgOr=VqhHT{L| +b-t?tCPQ*p1P-K2G!H&;*}Z=h{)Z`2j(e0_rI;(*rE?@@xxlYdN3U#8L{=q+7dif7_NdAbLsdq)EfyW^X|Nj2JN;<4FGWB&yVf(`l^1 +fRaBwKXYDQwk1XFN2jM{=G&&*Lhcxtmo{6Q$Eq;KHc=;MUf(nhI7kok6U9{D*K{?v=>O+#E&EUD+p_< +Xel7d|pvK-f+~-O4e&1^B<&DBEnAS4A5wlySXa5}8AJ5u3=4R +LKh^Zv88m|5DEhW?GqG5+<2{*CGXa9hjxZ>? +naLYrk$ZgOUtB_bo$%KoCz=nfaoSQ^q!w53H;iD72o;i1gPqA)#SYye73LzW!Q$|M%4i0Kw3>O>Ziot +v+|-5oXYo~Sq)gVVCJ8FMj||3nfe3Iqv>B!nchC|#n>O8+rL%?J^Ks&2NZHkKG2mmHoDBcdPhh_{ +2uARdDKr};IO~}mz?d(IG1k$|w>nGZ>C+Co$na1`DTI4#XS*4&g0d%pmlpBSnLcGtC7Lzl_YMCdvwOZ +>=39IfIh#MY}z}THA!|_q^u(u{Uk_h88!L7u>>;wHI_gS7@u)ELr?8ck>^v_Pbi3;_v=WUsDs8;e(dK +w=5K+_T@WneBFLsP;i4`sa}JT1*CYNU@>GL@WQFqVrnOfvp{lrU-M;*&i(Z-wbU>&Y+=hQ;md#Me0 +Qm(sIvlrynpJ1^HHqDtMlSx@Wf>b7D&bd#ayW;wOjEZlepnqY$%`$INCgqbaN``FgVWpRVLoyrf8JC+ +%ZDY1I)w+;y{8;eRM2lR>Psr^@?j49DUe>%5AyhKSy0O{z{0t;E#-5%|(mP`hp|mu8j-L2P!7SH0)`F +927PVcZF>0Q9saA`-+>;SoQ+`RQ)=W%el3AkclQuqGu9aAi`V}c)O%j0Ix~Ywkq$qQXf^Bls!}fol{~ +tf)W5eC1PN(tkyFM)T+I81EH}LoP19AKB^Z)+`{B+NE=C@z%{C=eRj_-j~Uh-5-tnK5h2Cj(2CxXy@g +>`oyCa=326tk6LwpRSwX#8$g;=(j4>G~;dI3IG80&wrCxDQj_!0{i#ac*^2u- +#>6f*&XMCxiB-YXTM1vR;JidJmn!}a#lJ*JXEgy%Ui?*gU$5ZvoRZ%Qiu*PNzmF9E&lP`vAGs{lGW*X +ye$76ze?YU(e;l>{k*E31OxeHr&9?tty#L7O|8*Wvp8wlfA&}$)553_z>X2tGUAVNT;{3O-Wpn-Wvbp +4$6XNb}^WtJ*Zlv%P8;))WXeQYu*JRVIm|Jf!e7Iu1PT>zcd+OOP?DVtJv(uVSfAM-@n?M7|grhT$2C +$T)Sx4`U&yW7u%pwWQ1S1JT35F63CI})3An+&fC13=#7tHJofkbeM-~_>Of ++GZ<5F8}fN3fe<2SGW(I|N$@HWI8OSfhkrMX-#Zn7~GmO)!gK5K&V|L^nfKfiX)%%jocsXS_YGfA$43BZqkC%y~tdZe>9{g9L98v^wisK +8+2^#IeaLy__frSO5K<^gR-r=+drqsH?|bzj2$-0kK4hZOYxxovd4o*EJ4hz{B{DHjqd>)|9Dgz~7aOc=oQ_VMD2Z;u9qG?%!X3{74TEUimo?+QrWyB*&A7kO +jQj3p+>bQlE;ZqfvALGq4YPGjqQX0+99pYM(=psDtiJoF>)1v^{d;+ij%9e&zX#dKzfb-9!L{`6SO31 +??-X8N|9;{Xo%jw~eUJX9j@_%t4~hW;82Srfsh*^3`WZNIAR9Ms97|44W|^6p%x<^K6;)hJ|HW+0nl< +c&7hYg*zWF9AFE3}GfBreUcI_Hdnr^WOOfR_PnI@tS?<@9Y#$EI09}uqx_}RK*-@5tp7cD}7vwUCO0l +x1NdGDfk1HGK3xb!}MKHjAR`}XY(Yh){6#f}GZdNcRNm(wFw`P`dU~DwUWD-b4y30a* +rmMJ$^N+MrVj6vejWMap)f^q`tp1BB@uq#z5_dDhf5;;uaUp}PWf~0I)F`CxB_%E$n +zOQcIMWliEYZIr(P=LB@N}t}n-r3Xfwx{+TAQIA1K87RzSkmFFEJxrvY{S*kJKD$XJ3t{;ptuZmFFr9 +OR1P5CYxf^`uGh=^L|6d1p9vqyYbm-|10eiA+AwKfZQX(5auNOj=T|4cUt1@<5uVDo>Zw{TyhZsV2}$ +-wc%f(Hi0m!W7r4pZ%&<&(WN%j2qrB*ZXYpuafgT$0B+wNzxuaAj#CB1OZ>B*BPzn>mA^d&M=?u)&D +Jm*_e_+n?j_oq!xVMTny`&%a?y*F1P{UXl)b?MS3Cb;-dj4kfbgZugP;LKA2)&i(ud=xOs<%BXai*jm +trKnGzJ}fvmm<=90n2j1WiiL-VvzV9|QFaq1Okhb#No?xWscgoK8EkRdST=X=T$YuU#pcbM$E;SX=sy +Yz3)y=6X!ghYlTLpM3HOJ9_je +`|`^#+1b-a*x{czJ9+Y?;ESrNDt6)Q5A55^oYmCSuuGRN30}eDF^I;81jf9HX$-3vYfXI9h8lZ2YQO> +fCN_!>Vbk~owvgY?*6`JAD}R-J!VjtaDeFk_dr|zs6n_-OkE8fgDgIoFzks)A%PIa-6#o^9UrzBqrue +5c@%vJIGsVA`;@c?xN{as?#otcx4^jLh6#pxV|1HI@qWEVi{zXmvL46rZps7zDO}|&!7~8ax=HxHZm{ +v)R@Z?DTe41Asp#Gi6 +AkMF0F^sprm+>Kaj8Axw@%x`*eD!OLzq*_8Ltks+2T=Us6hDsQ&!+ebDE>-{{~X2NO!42N_`4`R<+=J +e#Xn8)YuxesQwn!e3YnC`LzKevl)?^5;UuL{)1I@RhH!Ra0%sTR=j_sI&Mv>o*_A`w9ltBZA3*U(Q~Z +e(e-6bjp!mxu{#uIvH;TW7;%}$;2Ppn=ieIgXZ%|606UFaJ@q1GIz7)Sd#lMT8eZ$AZ#>7NM#zu@D9Uhr7AgEuzK7r%L^;T1ej3ICOk +0DEBWJ>UD2rzD3fZ`t;9}yKhnv#!-2p>HrJf%MZ^y$;9r{W(IZw`+QkBE$*_`qvm|KQ-eQtFY6jgM8I +v0eRdNf|g$P9d;Y&w$?J5TDYIjg1){o6@~QXMggi06|KCz9|%cbT}eM#HMuZ(4n*JFK`U(6+lSFxYJM +R)UiW{yGMxt!6HD<0K|`ogl{W85qwzjE#zqj30YzmrhCm_}>;ZAdboDM~E!cQcD?$0806Z^o +N+@sfgpFV&er7A_ukn3ICMHA!eWuOKEf&JGMiI4iv!cpEBG##XKmAGPsBQZyh^UpwP|jA7S(|hPE3V6 +&o2(r98HWAfo$Ng*`@(2oJx*)95vLbV__md`y&rWxUE=F%d(@L=4jFTHm91psZpd-77UQDPe>BT6ybq +?V|}ppco%Jni#3xKm5*NgF{+*8g7aq&xkR^%R`4oMAZAIq>Kq4Z))e`HJq#wDM&pgvOfQm2m~2#YU|- ++hJVCpV%Jz!?~n2!1~a#5-)?+LMEqzI@fu^=^yMeouYFj2IF)0J#vAEJ3U6}1GbF+k)6iSyA4)%x7%? +Vl*oa2nn)In?V!}r>@@BCOpZG@JoR=5X8jDAtAVH%1kCEq!nt&!{xnefDkv!M3oTAEe6DLj-^2lP#IJ +fNa!h*Zlvdk#9#u~x4ERABDo>fjmbC&dtEHf-1^RdSsV^2Q$BzyYlr`h`T>)CV9Jtt&^& +6_t1dGM{b-V(CHr{yoOCrRGeM6$w;9Xr@ZAAKZbgHzvp&A$2O8+Pi{DOO!w&CZ-T!+tt%fF|NJw% +di5$>eTlPI>HW|ZO+PybAFSL-10A)?RdZ;dTSx=l!!*$SjkV`n*bx36o4|Lo`}twEnjdGc^3yba*J$F +?fS5ot`aBwJSM{g(!zsR*;>S|_X%zo{ivJMBf12XIM)CJh{Q7b3zjDfd<&^(h<&-W;AJC;s7qNBKS*( +I~@$WNe&>*PD?h??Yi+`7%xA*XC*X~y0v(CMO`t<47XHa`T<85u}y-UyD{rXYZ_I^DE1rG{l-Fn>~G^ +l&)LG39(yS8m_?bfqT(4aQ0gKkwE0s?|=A7n8222q^bZfe)Ii~lXR4{BpDv~K0)<$Iga*hTN%<@WAv4 +6WfX$gf8yADvIHL3p~i@G_7w`vtk?W<>>uAbe}LrXK&z9k92rzz)Q*Xf8zN +)TNS_;M<_b==+Og(3czQOeOt9^MLmm9rc5OzREJPcA&z0FCH_Y}o=UpDHy9q}is2FLAMngG&m_~h^Y+ +=ZXTSUL#~;6^vFDqA{p(++$^81lg$rkCUV7^I@#C-V+O^B2)9HdojvP5ip~+uK2S-v+4!@=RP}dlkZ| +d8(Z*MYDR_$&uuK%=Y(?$=chwNQH|NQfZX&%krfB${{{rBH<8c+FWpM8b}D*pA?Uvrv&bNCYtoW|KNB +}u9xT2Frb@yCCysHi9!GiFQ(lj{jbaBgAp5gFiudTp%$?COyq9KGp|u=D243#qNG{e__$ym9nJZ@$S1KmNuWZwS0kpFYjM`|dk_@Zdpy=+Ge%4sl3Efcq(m^USNSzFN3 +#+qOay*`gc{$N0RwyvUU+S0<2L4cu@%DEO9JZV7QZo%h~x#~mm;|H#P5Af)?S@jrk5JSSOZb?@H2hfx +`>{NaZmczJobyPOXkIKaR7;tPQ%)sMg(_7f*g@MFi0iFeSX0?9nWB%Zr)?%cUr;=3!9ru54%zwn=a`s +w_qpMLu0x8HvIHRW{~;fT&hsJ#s%99AOkZ^fVFDdgn_;I9H`PyuzK0`OPqQ0*!-rbPw9*$q_ZZqT{|e +h>bYm6a=~9(xf_lz@iq+qVn+!5>GD9u;+P^5jYJ4jj=Ys0|DA@ZrM(&^AyXFi~%4JBYJ)?_PmF>X6z$ +M?GA-c8zNvdcQ*Mb?~P)e8+FW|Ki1qoQ5I6|DmCweZj{7;J<(We*X5`Z*!`1PBOD-!zh2$$DTcV1OWH +lyLXGWa^%PnVFwN91Hf-+C#WOf_WF;UTaI!*`XkPV?%{mU2e?O_^MU1@PyCSczn|v(=ZhB)Q(NiwTkw +DHz4ulJ1_llz8Ga@8m#7ax1Mo$eqg+7`>H@gKj=KNqtFHvWjxtAi17Gj~XaU|Rf7J1_XE=}ijC1qHoS +P1Ce&;^ULv|AlJ2=0cXz2Sc=e^$IeC2V@>+0&B`YrfVU+)IsuYy_^D*T>yf_4CYN&brSaYs0h_>{^YG +*BH3-^=+OL_^N!oL{WtJpB;ogWq#+P23Rvmo8lbFRus*3F$?=Py!mL9?M{W~0ia(7RTkgPdDwoLhQZVp`fukv=>6Z0KlR0{`}FBEjOt+}+8O +$mrsx2#H^*NnfB0iuKs@v_+9&B0wNcRUCFe0jLln`l>0kUto^u3GG>8A?%a=KgGYtSVsG!o(RGlv2)Z^}J4 +u7iW6+?#(?M3~03GfG>G^PW5558_phe`{09enilzAgNP`6KxT`zZd`{JR7VcxF^_K2@P1;cL$02&d>T +H0>EQDD8P5`XuU8`%s_MlW6GihTON(v!p5fd-dw&=6@RFG0tCCA85ZA57fFqd%(L&1MsJQkC#85#$Q@ +ElK*Y~DE=(b@HEkYCzblo=|sa6!ei1mG7V~b1`TR^MxQif7nOS@=eL0dD*u2tsr~O3$$Zol{?y+K{-? +IK67mq*oJxmE3uwT2&>U|8fAo`EmxS|I{$%2RCmNn78rIun{PWLpKC7B&kT_31Ew^X%NwLT3+cRiT+c +RiT+cWy4ptnUbmm1@bc82kVSl{oZRDfAkkB|Bo0kqA%(~1+-V +-4cvgcN(=ga^!J$8px?w;g|Q9KdrL$4n?%Fb#UuEpMJE0-(a^X(|AqRb)$_vniu=a!WtkD&F*kx2rA2 +a={a*gn=LZE1S{Y-YB4ad%KlS&5{|TR!z#DkM1Wv#k?E!eJb%H)#D<5P01&!eU%4K))cZr5Kh=whNL< +6-2v}e%ptU|+Dg@#q2A!`hOD1&H7kK~Kfq67_i&?k-1$QZ*uXqx}gXJ8D290Az4aU*}}rI$G5A{DfC( +o#FQdi5$l_}5fk;kc8(vxI1%wy>FK_@~mI(I>69-^HJ{-o@ACjpmQ$nEAum;oLr +jG2dyvzQ6(aEnBwCO+#ZkTB7CZ)jEE%;tBr2iU| +I`Bb2|bwCC3}?fE%{h9?yo{!Dzd^1g8H%#>-sBV-I3pW_Ig{$7l~d)f6*XVf{3zpE!qm=K$jlk*{PMS +DaWSiE?#ph3%Dzg8zO(WV;Dv6^~5-|>oD#z1>6Q`&Q*r$zY(_@nNlqoYv|{KXev6tWj&8K=|93knL{G +_*uVOLc+=ebSc2H_)Dmh9>%%=AOqqUw$e2 +9mqmW(E_|NHlVM9EChKJ^8q|)&jYGh&*<WsCw@#z1>UpY+6nc%c8Q^RJO3M>^x<A#N#476Z+_ctw{eoK1unn?Z9@y7L50S&0Kijf+UQ&NKRuhjQ);I1S(Y&{KEG5L!M8m! +mmk~vI=}ey&xfhLZ+QJ-&6+j5q@?8h>eZ|H(xpp(zW3gHd3JWTD0iAy3SI&YXcwRpxPgwwv|tSa<1qL +hV>H?d)*~>Fgd1ce)E#JP;vw=ce}yvot?NICOl@~vUS8hUfBMs(t^v>Fk*03jHzaPF>$1oUq+?qx%;Ef1-QE@ZrOIQ5lw? +J-_?zyMhLk57rH-eFz#-Q&V|dT%6#o=bn2`;E%FKnZpje(GJl6z#XzF_y@8!+5y@C+62-?A56GkqjXC +A{r$~U@6Ybou>&^`V$a9tM)60!TKPvUR{-XVz=!IVlWc)g#iBh>eRJYB!2=khP{wK;bv+UND9RN5|7) ++k#$S2m6)^_>^Pm3|@le)OP7?KPGiZ!lM7VD!w}+U#?{TC1H$r}c{Dc0V+T%*RqrJfdE~sy`S>jV6OU +#=$PxP(S*2VaSz6SiQ@*&y*+9m1)e1bYapRARKU`M*BBh&}RbD|et7^2_wxa)Z+t$l!-3W$S#27M78@DJuh0N@U~o_XdOtTC?h@bLJpxV!OJ<$o&g640Rbi%rpi@{pUxkD{BgnG+HzL +`;lNAab-ZH?0PgDk2+6fi{~Ndq{I&C68hciPFEIvz4t2dB{RjFwj7M5JP`0nX{yKl+i6;aFN3J;O@p>J1%Nv7_Ds6Qk?+Sty?GJgD!*zZNL}2g}xKCsJN4S`nTW7@7LiET& +R5s{-^P~M4f-NM2ouSsqWvQZs3M`Q1|3eXXuNtmw-Je&;r~kkKfbJw1~fU{YRZkwNxjN?;-!-9s6Nb67>_V^qKq-;MA@Sr)b(A|1K!c+ +qpw9jMso_WuR%2b(YOoz!MiQ-d2{@(?Tg^Au3Mm-K_hsb_~;tR2olv5#?>x=Fz$Guj^yV5Fdz?{d-y| +C_wZsGT;88QzmECvYoq7SKf&1O8rdY0A7ttprLW1iSTW202>go_lgp+~F+CO2M=_0x*+V +f$D`t^ma@o|uZ1~+y0Q(&e&iD8z;Kf>y6|vq&u!rDcqxmAJ+Qe4dHIvh +p078^_Kdb9Z7IK1JGJ)^c9(4d>CH$$M;A3&x(p9hIC<|A_O?eiFE}gac^p=H=yeC(Z5dr#4-S{)}YKp +Q*pCqJHTN^-D)dK7W>E+boiS@eRWef?gzVoSl10-Y3IaDE9eG%3AIx=Q%%cj`PtwME*avkbigT!#7Z# +wc7o3^{k1yey+&;*9gv2pL>}4&9{&+_Dr$ghUrAt#Eee}^J-~ib +P^9PKN=+`k8p|6H43poXTu;ZB~)$bQ#j|cmmSkuP-4%Xzc$M$RaV-7%b&>WgCWU2Fe%yW@1-16nf+I<+W3E)z0B8S;^OPUtebdBmd=8til=KDE?g@sw#{ccsBg$ddEmBkTaEfMRvSVz?6kG)syA162BN3*g= +gS|fNF@Yb0-J4}8hFhB$y9lN#~kXl2hdMB&Fq`*b3InkS{ +MUAs0(iwE)spToq1{Wh$rVt)Z^!mmG`_p5t`Km5YEm2eq#NZxBho4|gjHh;(!3l}cTDJm+;((b(i2dt +Z*Ebw4`9eYjxQ1<(<&xG|*@FVt^u(#n*_LmmTk>RnWnF0sFj|c1bz8mM?crUo|9x&>^;-S%EzYBXsSk +uJXxXO=M7svhz_9nz0my&;B+E|g-I1N9J+SjoDA(J_s&eW%#dMXKR5%Yb>=b#(7pbTJsydhKU8)Cl-> +#8p)YunE#`wM6j*dM`OVX-CBT?TlxeKhuNwfv8^^}quUgrS1=4UVynB$^?B6%Ho3b1^@7o1hG$m +_32H@`ucO4Hi3O6m$FY*q~L%@@FV3ro#6PThV5USpP?Q8f9+j+Tvb)}zbKPrnlx(ZWPv26<7@AIo_pV +O_7Oz|hcWUMmYN7CH$jw#qmB~gBOm0eEXxOoXpW&Frlix5npxVEmQL2B6D3VnKA5zzG5g%#S_coIlUa +R!^Pl_kIl$$fv)4Xruk~H8efB}0zhRxFVeJn2bgi1vq1`XIH5RPZ&4e-JU#c}WX#a(ONPqtP`N^wRts +088A@s*_99~@QtsBH~ATJP)@H=c+zuh$Td!6_pd2AqSKZyV6V^5nlZTw@8J(h`lSh#SZi+hN>X!{WVQ +5KLND2qtDVa@6ECx?TlK6wvx;tF}ph^eoY{TO|;DVXQLoG$Vh<15g``ds>zwJ>jPa4ue3oEWUFIUGE5 +{JrnxG533UT%JD+$^W4JhyELR^oI@|`my6UZr&AZ(}6%BIB(uOH@?F$d060KCC(4>=In{T2j5;jF1US +0jJp=VlgE-NeS;NCCj`H&IT{RJ#s85~Dm{DloPzg}pP!#Kdi3bm2_eC8z;r70e +|2>(gy$I3#=t#-Z(x!-p#+_7$#1f=<*%$z^jpXGT`NqJ$V2-aWNw!V=TyW4){p;U^mA6*NUkkkXOL_M +d|73d$GoYIr1=5W5$e!us_Vnqs>Rm!P>%z5hL6hGwKDNiw$|;<#^ +Fw#+nNH?Qjn(eg^G&`d8+#8s;R>9%W}|yV!thRlU3-&KL3;?;A1s(4j-?ekN^~KGFfKaq<6$#^L$En> +TL`u3Wj&%@rdyV$R8{DgHv*E`6lq*#j&Iw(!W=(u?adFkgjT_zh^lTW +;GwAet4X?*~+OA!@Fwgoe^id7+cMkOsV`G%pO%Q_&`mk;tlmq_t@=x5ZD!uFRT$E|_;XHrF(<#KV2S2 +Zinb1Fd7u*{4^~?NYAKGA~g}Ua&L=AnxJg6Bd%ok~%ca4^S#`c)%B9!|<4 +25NF;>7>g+Q$I42%nFtr(Nz*irtG?w|7GT_5Kx#9+(M)%Ag~IL2NW`(fONaiYr!#as4gy_t4ivUlV;@j5o?w%ys*~m?I9xf%7+P*f6)w +jTnY}sNSY5iOpgFXrd*8^XcFJJEZgSbWn>uNZcC@)v~;s#M4&Twl#wkAt|4J{Qgh;%URN;NNJ=8_GYP@6ErrCJFmOJBjqs9$}n-eIqV|?S +Hu8^@!6rZtMqnfwdyMC$!m^Pr_?4&PLn4XV0F?uEmz$q%0;J4qxL-hwn!Y@0=!=ju!a;5ML8tWMsIz+ +Y|1%7J@qxyPt5swMIVNXBc-5z}?mw`*2rc{Dgb0h587oLnqv6?N^u1jCA)|yW!HAk?t;QO?*~zPEK0p +=!_|mlQT2M=h#ts+2ch{N_tvma!$9*KuUI2PS%**ZYf!rA~`3s`y?6_nVCF3FeWW0cW7F6P9ST%9Ywp +7DA~MeWTcgwotNXjedQrSLURpk#J@Fn_r*8GQY^+v~`kRK&Ru7M#GB +GAGCN?&HK)3+L^}CFqY1yus2yVrJd4Q8KgX@WGQQv9 +m-ziBju#hNR3c+_4n!oHBWt7EmQZY|5U$L8*33-XRWVxpEh30)$+A@+B4cJtz4_pUe#{Xf2$AEU)A5% +&*;q!V$3z3HmZy>#y3XLXl3>=dz(|uRpuu1tl5!g@Q3*lzJ~ANC-}``h1emEh|ff-zooUwdePcz^|a& +c5q7#gS28Er8S6}PwmMbL`_5<1ImhQZ7PtV@N5aW%q$6R(At@w}%pl8133-EjOPbP_)SzQ%A9h50RR6 +dBogQIyG&URij2OO^4-t1*eXaiXe*0bfxP8WMB9kRnBJd%dFj7F)k_z$)d6OI=$H*DrS0frv2hb$Cgg +#AI(Nfx$MX+erg;8cO$@;JaHi+HNl7XKS*ko3~3fWTjEGuRk*cMjB_Ok=*BUZz{V72T9r8#i>1NA2Dw +_3bbrXA4!rCrpR-b>HWr|a|d#rkS}i~f=xX8gvuV1$~tnD>}N%@i|Wt}}O=pPJv8ln>w~e43aET&ol} +`!#=zKLNP5)0%FNk$DpLuD}9OF8ta^Ynf0VQ8%gw)Ka}Izk|2u(Y!P7#wpi$EKlT5@fCa>_lwD5p$Pi +Jt^U@1ReWhMdMnE7SOV^S=vgFHCrF0KctuF8}zgKfAkhcE2EteWpp-r7`kB@vBvL=L?g*aHZqND; +}6Dk;}PRAqtI9a61mQJ+1PFDHx3v_jH5=4@wrh8@)>G2HCvjB$<2GsaDFR~;2n7!{|kSOzt4|@j9%cO +;zkiIdWb$EQ9LB_#B}kvctVtlV<5N9{jL1nVJ1fT8(FQbyRGroY-^GAytT#JZoO`OYlYc&*aPfwcBTE +P-AuNX5i(w8!CV!|8u_L4IsKe_ooUXKPKEQHgPSlE!ra|J+K|2^K(fd)Ak&-3r{pxbKon}xI68|ipwH +4R^e{a}L)k6tR@Q+9S(MUENmPoIe=4Vx^U95Cq|4R&)RF2R)cNXS^;wXEchp<7G~nT0(9!uut$E)3m1 +rj_#Bq^s-D!8SkJ?|_qhV~Z&H(2$Zsp;=^Rz1&NoJF3I)$}UgfdFmsT@$gP=fl`#$5ha{ta&{zVi=}! +{i9iqcjnC97+-YW*(b9%G_$KYz`?&;OSH9sl3_ANY^?KlV2R +E}aKiULz~y*T9{o&h1V|rQJI(#3QoZOwWx6OeTU+s2Nt|FB-le8p0Gsc~wOnxZb%8tZo&V- +25q(Cp7Mf!e?9#)_W8a*~A7n*iV1&~`KukSU8kP +M@U9=n7g4*tDLO(QX_&EcFR>nYvOfQ7hDs)z8#3s;>F9JZ-A>h&Ee$Tw9_QYax15JzQU=KL?zw()a4R;Rn4NWK1&tXcT~ ++)fz3$JIxNJ3Od!_9B3w)qs??P+nj7ZYR)&GGMAgBU<NIm&IqjSdPFF{DEGO1Ua0WZWom3|SWe9v)T%23zEOLC|A-*K|yAz2c>0}OB4|eke38NioCqS +5VItL`_4M3P$dXcsPc}`-fVA+b`%g+J&T;x6xD#AoF5iVMZHh^c5qJ!upx(Xsx&}2*W6tN;sBmi;`7D-~b7$s6gy2ua{L@rpq +X`%qE=^SxFd;_!9#^1@G05Uin&^*P)h>@6aWAK2mt$eR#WT86IIz)l9R0t +qBm&6C7x0#uuewrjT~0ozW9wno4bt!4tN9f(?n#8R>Q2Bfyhw05y3tE7-tX_6XEM)BCO})e@B4q>&4=N+o%1`t^Shnj?_57|*H&g=j2ZC@g&2E@i9eNH`7cFcY>NFSQ&^Ar +m$@%VD}I?<>uy-v8O9T7l~ioc;`@#v)4X}>rTK;)-%DtZcbqASf$KrFT*Q!naqkL-HX>G_L4k#`fJyHe#1IkS +G*_*gsASu=rj(->aM;2?)r70)X5G3lYIl%m!zn4D*jz7lCiDC`1??>71!J3*mQl@-lru@*6KP1*SjX9 +Q?I>$?ft8%NTLa7!>Vz0$4mG5d%lc>L?faVQ*iysgmh(-Q{w;If7eOuwG^58Qe-t~XDK74jMerTR=zR +z(9gQZ49pk)z7W@ic_Q6H{7&C0b$>RIf$KNDPH;k-*dfEWJ%?8>+Wqbc1M414lDhHEN3iG@F7Is3PrA +>2M(RGlTJ8=u8oEDNYwR9-$kaVnF8S7eQte*<>C*16)RlENyUV*Dy6@)hdZ!vxSqbp@IMUvXJmtt+1{ +kH?XKVhgi(vmfV21HEFlnHL$s-3WtoDG!dUBa3xYEJSppO1LsN5=+vc%yCCD%FjCa+@35(mRQqkFa_k +EzAD7VF`~{*`&y8H0({(si|w)#f@p!7?VDIbdM5C06xas6uTEu5}WtbvTZ$n1f%g>Ivr7d4hG0&J}m# +SH|Qsd7)74D*3u4P*t15s6L-(Eq#8Dt?c=0W|Tjl%Vghp9wU2xl~sEFZkzo47iJiqUyW~+f7K=AXV)# +EG6?P}=3L^~iTj;&?^xov5BK-ceKy@&ac})w>rQ{btu6O-=P1$CfcuT0>9c^Fo5BvQ#?RrX1AIsFvw) +wg;2nMrhIh;%%DK3*Xw^k~(PZTiT~BEAB|7JxerA;DYcNLBw-5BqWfIC$SI~71T~BWx%{|>dx*E@Q4z +_}>cjHR*dKUDW3R(mILqubuHE4N==uY$x=Or2wt%>GD`!KDa1+A%^)moVZ|5?yH*MmCZ=h%sNJL#QcN +v?`__&M&wyZh)}_L5u&-Z}U?@Pb+YTAGCpNQcHAk|6go#Tvi_by@}D!v +{`U?3;l@IdCb1{+4zFH{X@yM>eV(R#{oWTY#?`+0tE_t~@(m-L|r? +P`K>W2M{733P(neRgfPlZBR^zJyp0^KPOyI9&zc@p6jn9ztq&Kb3kgfnDfX$fS1Hso=)CWm3%AICf5` +w4?#Kwk&>gAmHwH1HfVv{Bx2)N%I3@^*b)_6I`+uqS8gfm5!c$v5O>&>#&wXOsr?X;+Pg3eY^-cA=Fg ++{-S6czwE%SC2o(C2m2(f${sDDo;H#cz;7`%UB*7ozjVkK*F4fNp8@Ka5s@FnMFCA} +o-gk8TeV8xxoG%WIFV_jaSXuRRup5LYmHV7g(0rUnsPD5jwWur<8t2h4@SHj&*_vcAD~SmvqX7jIekJ +MzK5#tm(epuv??&PSGYCGYVLsg4uE(8dInIZ$ozd`m4sDA*?QuOHfb+A#Xg-Yd0C@24qvE?~G{S>F#_ +%9i&JOXm8*TQP)e8sCB(k8MKlJT%qSmIbzHY!Sr;fl$twlbrd!!@B3@LtiOg2hSwqgw5-W>~VCmoH|& +ngSxto`W7>BU=j5Ug^|pGf)Dx@`*+)I%jGr$kN}*#%tb{YlW>VU=!^X6(F8#?OG?O4#b}C$L(Hec}J| +!fP`(tSVB><~AnT-*9E7&6t*vnmi|W*7R&!iZ%b5n7C3{zqtiB +6bs8veYp&^4ZP{x!2waL4p^5QM+#H-jJFC$kg!=`R4`ykXq^qqGuR7+)3ySVQ?!Han1t%O|Plg(<&XR +#EwdsWeDMH#4L_K1Jv+}Gutv#-l88AhZTtae#)-|zGBQzi4rvBb_CHpg=p!8ZJpI_kua(j5c-tF3*%S +CFm_^oUA#v-*+~zwvYm(wXC=gZw-3oACa_E(f;GiC+u7r*uZ7GyOl0&t!Onb^k9dchd4SIFshT+H(F@ +`dp#je<_^5mY-aAWbRKM(#t;VaP3OSd@kBF{rh@@cwaB_oLK|k4_6=Q)xB@w9&NH7_d(bOyyLdq@gD! +~TP;WH-efv9S)KLz?ETf&p0ECP$IsT?^N-6OJO1tdQ(?Ozv8^mOZQS2FTl3TIb4e_Ce5&02W|pD*zwH +!L?d37yd$8GO$sas`b^v}LtZdK#xjU};gKxqgbj)NOV-M}?I+vsd&({2FR|M|QINUI-bKJKy0G`o*RD +<>3fMWu@Hv#KJi|4TH@f;om%!dF|VV*QQgOz>3lM{izzbguFiUreIFc$CkH9z(&{Md6S^SnXw?H?~Qi +BPHNI383Nxi +#Gv0zdO{pWB+xW%3yOsVtQFOVpR(^E&TJ_Z`dX%=sb3SxG!zs+RD38S+TanMf<++4fbnot`(R8LLVp* +0gw6XU?D@-StDHJAwBb9iGFvfPD<|e4~SP3{rWx{}Is`byeo5-6N}+&yu1B+;dsC`w_Jr^&D7}$^wfe +);5RyzKuH%e-3%g8+TT3md(ql9HJ?eTfob+xd@l1v@&I+7iGc@jF*|=e;Q@-y5-t@6c4t@>1@Ld7y2zPr=_Yn45wNHXDvRXgd6 +Wa+tzc~eJJcd)j!>Ts`PJv~jmm2SPmjS4jXiWgXJaOpr+p?*b!aLJ5-)7P@f{=USc1Ck1YfzHB&$KP3 +qRk#&}Z;?s%0kZ0{IA}JAFo0P=I{IV=kMe8NR_y%t!Kg67?Mf4yc=paQhNyUt?f}bf1p2^&2yM$HA|= +kxrFa&wrr2p($z*dg|AgsV@)hZ6W2My!7r4LnT!Xgs|K<#fudsUP`SYUhr4v=DZ2@3?;Rx@M@ +su$`r{_`7^HcnjcyH^I5M8u1hMopHNM>8O5Zffr9-s0Qhs6Y1>PtSMb;&jH_Dq~B+2_GxxZl!*Yo&?& +Lgtm)J_hvQtCiq}T^Hd+-E&FmMPc_LHeW$X9W~ +%{$Z!eXbR7TzYo@!w;GJM~Gy&C$d8qnueOtwWNe?vcI0S@0J>M3+F)AuyxNtb-~hgr8nLVNMB)NOxQ# +?OGC5kFJ6y`BY>WKZ=_ISU*F4CgcfW3XKI{c~8acV+q>yQJA@d{+UBr&%rgI>vQB%lEJ@OwY@Z>UAXT~dR&8jXi`Gv5&6S^oaxYH%3sc_QeTfZwozk?cdZJ=N6K%3+(X(b*$ +M^PJx=sjPcZ7VK^T$+GBQ(BwFG2B$6gAun3c_Fk)Q=-2WbGbpZ=$ft%vg>Jw)3;Qyp +`}S!8v(Sw^ZltM08v0hPl?7YSycRI2jrrasP2QxL+(+088_w}XoAf%$_9Cx+Giz!EZKy2zM$bIYzL~s +zeiiA$Fgx(;wTO0J8l2@juF<55>>TLqy-C1h@!+-EeN^s`s4ddbXif~?luuvZ8QS-7eUHG_QQe~bRK4 +Ad_(vhbOxPn9k(pG@E--;7jRmn3=A-*%M(84brPAh{I}EJD!&oojo$1T)S-`tY1u$Z8JC`VM>(_9Dy? +o6EpNE%~%iGdwy-pIn&0kfIP!XQFqiYBYE09;1!{1&oW302 +iysBJl;o2qlH4l?7iF!I0^lcbIJrzS=^8)ykCk@&BeTDXZ2x(VH* +#pDyzx3(*@qV6^h4h(G=_}wPo5xDqU8c6SQpneG)8lRHOi#3VU>g@Egl*t8Q8KyrqM(yu@EYHr0FPqM +w}1!5e;bjnHIH#W@%D>iT!ic&bc;sTSsL%x75%x0k%AN-)v=pi5BJkX{1R&KL@de2cSL&l)M`MV{_Ir +yXgCkq-%;48f005t?2r})9YDP)@ObT+YclyE(U=O0Rf4q=?P@#lz-6@LE7#iOULY<>N4mUy_ZUpe3Z^1CHY>!_X;g9*|S32_o6KFEq{yh)(U$2p|`;<`0kw=UKMCF*5chekOeO1 +pDpF~nS7a2@_}%zlS|(CqAowu^?Y5+Px6YkB>3H2*71Nt#J72Q#8WjmBai5(21H*+x*s-RJMsJTueSpKECHm-ki$R;^O1LFCdT8m&+=Z**9Cf^J?#)3mrkgj28!l%Yck+^ +~w(x6D{3{ty&UT6ZEV0E2KZfdl6%7Wu?WwYi0}G;Lp2?eR;D*8Y(Lp<EMHI&Bu2O^K7%^vu+oD +7BdTiX+bW(^7X}GoWe29PCWmfh4oA5hrhC|8g_0E+7X{qfJg0osyp^`b^g1u|kE>+ +C1F(Ayk+KAsM;K>71Eo7Ii{B)cnS3mLu{{C33HEzWNp9O8{L|5iSp4!iOK%{}-Q^pJ2T9dv+yKgkn)K +y@<3z7beq7^k2cye}iY^R9_<^@>ie)Zp3#_G!D6K2i$4!7jX}v>JTWUtk_P+J6kbhl66MscH~*>b3lO +gKr3YapD_~t)RQ)i{(qot2}S1!8e>F@;Y?ik8PrQX=!q!(+nd{89{q91V7Z$YJPPXc`79HtBRELs`(X +lTM2OUO6=2$w0VaYe(SKo=_gv7O=PDJjLRpDV=a32=z^!`F}7H{avjrjSJ1%AuR>q0C)@j)bCaX_!{+>ecF+CUW@Uu% +9Bjn$sQm?IhOdah(JJ|oZQna0-pT~oCvPI4qnGHXm_k;7eXn(YS5L?bJt(<)yUO6NW%KDpy+$2WihWN +bT23GU7i52!wf$wzctJ_kfz8kHj%xAH(v}D-xlpS@qrCRE4n|D+8ZGJg>Y5q;hZHjefP1oH19WF^ZNi +kDpYTxh4$8h6nmZa2SxoF8&)4m&0k@vdm_k2k~9&aervk-8cbPs>SjI`8-ROGTMbJNV4?zsndIHjbM> +ZMSvf^QbU*_^zrjclzGWmEcmymLOR9@(5+(dH;+hbpN|(e@p_1@|u|%ePrkhpniC8TeCslt%bJx%Nxd +D4WW^4X{3n-!SSz^{50s%TO1>D@n3!aY`0mCyQ36ehrsK(7Zu=H>A~bC1i5m#Zc`6=m_v?_au9H-?dY +#(=yblLYlgzQkt>_GC9(JAym7c#?dvH%Xyx*HYlYH4!!R_jbyu>f9mvaeo>;S8;ZvKli-B;2-*e+C4&JMYGi4DD-Xw_S7Ox8|acnn`drTw- +rj$+J+aE7FVRQL+>pk8^D_GlDs>VL^W{G>LFXPW}m`pN86-s%GW6?jb$mK4Va#5^c}(VN7V&w{RwJdW +w~=?Qv$wO#C;y!r>TJ<6XNzMD))cUX4al?slmK*XWO75$xm&^ljlO)>rA6dsja#f?Z1NfB7X|YCfl%& +Y{L&rgCtvZ8SsxmwwNpeO(&Ucux0j2=^D___^bDR7>|G +r27Ml_(<{mmR*R6JVw?tY-HK6hnz+d$yT;#XLf=1iUU3(eV5FE`hm>$PxtOe6o0>@SQ%0!&{-fE5A7bbRTT3xzPdMMZ4&k52wo^+0t3QY9>B4%^&K@ojG3aZ`F3A`6#f1N7q_ +*7EhxFn1yniQwy+Attl#%s{d`4e54Pw7-l#cpTsUK}R^&zFeKf(QZiTCI5^yJfq^SlVUa(|Y_n5Zv>d +D7euvcNgKqcK-y9KWb?xX+Wp$JWyQC$luzrNSoyKU@yZ7tyylq5anR+1#huS15d%dgC|^xbHWO1?)z) +kmljhb2|7C#)Z;_@!qM!+rh^Wn9al@eGc*BgvEeYN4x-hD3S2F_eIL5v3PfmfEODl=wl5g-6(L+HSxS +O{wTfITI~>HXazhrZMdDofv=oe*)TN_i{FI)UfuWr$;^>8w+D{ECd1D;Z9{p$bx%gA$(Mx~4RJ$N_ob +u#b=6tVaM?jxlv8zZ&D6kR#L!{vi)g<GIl;kNjAYV@mrf&tr4Ft@+b>zm>{Ai@5PtU4B`Vy=?_xQ2w9e*^Tyv;8mb~ZAoLi4 +U)JV+FUQ;`=0>ki|oBW8{zJ`2c(00C*=t~;Ar9C-A-R5m>9GznJ +9PZAY@{Ak4Zr)pc#kWh!K!XOW#Ki80pI^JuDEw$jPibA})M7tVmJAva{e&lwrnt~H{(Z2ocnk2Ym(}i +fxQ(0I_C?V7m|?0vgM2X!zG9YZ;IkAa=xERfT7|!Z?@Nv&Pq-ZFZ=`-=!iW0*-x(`Ca!g8W)BEmG^K7 +F0mk9zA?WP}9qy3KZCz}1>7C%U2k}++ls9(VB*xw~K4!UYnN9Sw@p)Kv2{g`^4K>Q3dBYt$(^PK2MH$L1yRNpysN~!5`%f9G=baBJxZ&|r)H?UKf%c7W- +*`4HdYVL7JU~CJQ6&}^i$ct1iU)q=#PisCx+lNS>ZbjBklZBXWL0!lc>$2m>M>3ie&OVVPc1W1g>o$zbSXxp(@nleIj%8N9p-^Um9rWK7KpbO+^*`Z}w!?)Bt`sU-0HglIO7d_|yP{zRtadb!5|AiSvm;!siosR?go_ec +ioo(orpK9lqt@TR2_0md-8u{%9T>jW?f8ZxwxMOG&nnE)&0XfJ1Uv%-aXiUe@hrzMp(V!05hoOS?Z)- +F9S+b9CszhSAF0oM+}iw%lgW!_3Z9fXB^fn|l+O?~Od>Tf0i~!GEsm84Hb%M?~w9m~Te-D8PsM!YoPf +VW6`j&WrZbZpmjIrB3eC@OCy`!#NZA``^DcShvPKT7oom-++5R+F!>$=2Ic(G~Q0QynZQE*oW_9b6Lm +H_Y;Hh{2;D3gIYgQAL)rb@?J7ccpp11GCo()AiHY8pAET@c4KiaZ#xgi_U)g&6zZWd$F57E0vf|b%u= +{Um+vgvo1Nv%my7!CM!rqp=PGU{|T2E&v+5<*COps>?TobLcey^DPO(Iu3J+T1$CwB++Y3jVfaim}*JPT}87Y=7hXSymlx|L&OR +XN|W#3#~N-pZW%mpp5rH&nAtwH2*S;@BRFp&Gk+cy+yg^8(7UysI!{-_!i?H^sFtBj7_{>h4kX%r9pF +Z!v=?xZlV6A6Oe)7kFaL)uR^m~^WbtZ4)-;e7%v=}tu`~H)%W2?^C4Vcna_dkL7g2;4VG(on+;;z(gV +NXX7SFYulq#0MZ;OB!TG5ifwO25I5eMC-+mIjxo6R49!NVxb2`sK4&Ng=1pHBhiObD%jtFn+G~Se;u5 +cK73PT~pOh!NTr>{l%{~@=$8)}zc`nE;A5IQ1l7|QC*3AM1|q1CK-nC3mvyw)1l4SDwseM%0}*!^(G* +d1zQfzW}3(NKBfXviQnhuZO6BNvBmN17Tr_&)r!vnNd5p%;x5r|^0{g*Nd{i7f#hy=#q#>7i$K$u>gc +@h?iFOFQ>39$AI^8Nl^Z2G(Oke76>IOYh!;&)$%}{o8eSxT7lZZ<|2-amMbB4P*y(L{_#)JbgXcMR9V0wcoo;ND(c&9AULqyN$in#IjphHYJ$Vz(b{N5r=D+_`Sz2-W +}2S4yI^+PE0%Yq90RvP=Y!pC;Q$F|C$5NAKvhSkn^}b7v$cAr4BNhj+>xHJBu^Vl%G!CtaoY5VU7HNodx2{ZzS~vfdlRc^y_R*9%yu;XHTVXntHIdVX|n!FwAU_L1Mt3v^SLn2uvIh%P^ +{U>^cN?=yLO4|B~`hcPg*=uPHAkK51FSid$(6V2;}D{toM&uEn%UQz^|GFQoZ_% +HUL=IbZE=@U!l8@|)3?)FTF@ctxpz{YYRz^UZ3o!NP*iQVaq9)R!^ei@2vgF(=ygE~YG1B>N&4#p7t> +*R106&HNMlonI0D6VU@Wt~(9isXXmacs`j;B3ZThzXje?zgxx(q6PCwcz+PS@tW_Hc9X9}Y3ECXlNww +u(Hsiuqf>*_|1unsyF<&#A2PxpGL4=@S)l{0IkXn`S>RU8Pee2@X_lduyzMD|bf4_X42c$@yja +OOcb-Fqy$EmZE=C3>q{8(Qx;kQESD~5~}3>y^JkiqOKk*s_iQkl_LMDJ)WaFP*zEn-)?@+Q4QK~kNVjqyYob1J*Vxe_y6+2xYMr8gt#N*;cZWNpuL$nh +ncL->g9qJ3B~M9wUiSBZr*#HTU(@hA_lE9J*3$7bgA(tTwkp6)VLp0JO7ZUKLLKi#+hgW@=qp}>cB(6 +b>ST3&AF;wI)NQj?cJw$}q~D_*yrjO)cC<0q&lG(S?a;CH(D@eFw=!BEF+~lA=SnlwFXbbA-fO^P;jw +!!+Q|+N^6>FXZLUA%8RqNB6h5zQ^Ar};`%-RM^l{$-KCcHX-oG;G{FM0kPPrO<(dM1LCK_M%cf&Wj-= +uCyS!Wlc0! +v}Go1>Z0`lNi4-#`Mn~iS>gLlkj?yPc)q8?3VUWmV#hDf2=}i<`eta1ujP@1eD@=X`7N?k+)^zS7iux +VThQ<8sBg9#bp)>UhsAvF&%&;_@P1928XPiM2GH(qb4ixA<+;q)n8t$lw61*Vo+T{s3&eTuMQY%r!Mc +16p3Ty%MGcEsfaY~lJJNDJ3*>0W_w{NZ{{?SO1D;2;wXOezx*Ih7ON +|;GMnjx;X6RW%f>ccR`Da6g#2?~KEI$X&glg-+w;uuK_h0(izW?~$$e&~7!wvbM`7{IzeC)kTN9PQU& +JR-`TMX=D-@# +J&X4H*;Jnb`M+M2F+olWG&+9sI%RftL@z{?<@D`w}ZZuTGE1&!f|Y{H%>5KRc5r+M0hP`7!HkP15 +Mn#>doVG8}eYjQOHm~wS$l!3*=)ndacgjeSPDU1+wDl$LPLz>@XLT~7vnA4*iMB+FBQxLEY>8srS8Q(uZDdwU>+2X@pBFx +Xy;rOgw8Nj3sPE)DTAwg;5sj~k`&o<3T1P(AKXyCQuSZkOl-XmE)>06xFT6@PwHY#dDTQwQB~LsoeilazZ5Ea%oxwm%wFk3FBaf-jqy}_l10kaZU$h@tK`txsK0h+Hxcr2l-Rm6)ce<|j9IBCwuLDo +d`c$P_GzU#{0iMd()+aZx|4Zb;He=LAUWzk&oih8Mv`La)gYipmz>-s`;T{mm|qWKr*8zOoTp0_HcY;;Jvd4`wc- +(301{JUSrzXkuxzyEpup&illuS>_juW9_NkKvzJ$3I!ezgMya|L%z4pOVOGcV2;igX8=|yB6l3Il{l2 +H2&S7Cy4{#>sAHM1Nmm1;UT*CcaXLUu`57T&90Uj!I4^H6WAFq;!uWLL!Jb{P6<%Q_ +_UXF)<3IEPr1^>2XNBH-N|K;ER82@7DOYs;3ZL!59RjvF3a875no73UD|AYS}vy5v@zd#S-o;jL-`w0 +W<$kpz@kia@-Y4^|IJ@x01-))v=aDTg0;`=vo7)d6+Ue4Bl?@pSlN^{kvX^Y%QNBcX_Tpm7$8S?QS?k +OLwZ#LuEjqeS4iTR_Nznzny#bL?tYvj`6ek&`y2XKeVX{{S;ra6apGb{F{8f&^}50hyLyu2=x;O#w(E +peN~{6DWr;{K6hCp?4KY|NqjvjgaYhd +h~w6)#=gwIz77aD)s2|SD{DEnjAOB$T2-%?e9XI^i#F#`OCo4mmjM~&6*y>=F#g>Z21P=yRaU`j(?60 +@qIu1Zp7kYUFuJR?|YdxtXQW@|0YFr=`CYKm+rrUE}b-dc)HY}^(87=8|FnD)=0W!;JOsB2wiG+Yr5o +)(WOS6F1hu(WMIv-*5V$}X8427YA^JN*4FOg^Lhl%3p9D6@g?YC6{RyvX3Hlav)!aa2BAaFX4i&JO@} +&TbtsAX==-v99kOs8YPo_AZ94xqwp|9HbN_yoI`_r%5uMv+x;mY^>wL7%-90pMjGE+olP33@V&tBlul +9E#PWq|Z_55XE>C2DRyG@$j#OBfKU2ORV-Ma~T_ZgYDUpaB~&V7Y8>@#vi?`Yj^Snm>bde$@OW2>2kW1!F7r9{qg;XE+t)7mqfXg +=g|Any5##4bZLC9ZbX+hXtKN^MwaRMYJV5vq@Su?&tC?XzWi8S+Mww|Y#zNX#g=c-y(3+UowrLmG(Of +~jvi}R-@0=2oWy#164YQ1uB&cR1JrL?CnIJ(2OeI-g59#(%w<^O>wT-KKRW+msfOZ2KVzpWq`5vf(pB +Q>oY_|-_I{g7d)^FC|7$~aBu3zAE0 +RBXkbFnj1XrpzXU+Ab?+k{Y6_Q_W|7W3dumRQfnG)|0Scfz;j#aVVlqx-}w%4taeCyr|ZRdNiQNBfdt +gbgaztw%MnBQt%Z>pj(q6VaQn#zK(EoYpxHWc-pjHdUsuDnR=iH6SkyR#=CmJT)oQd +Gil$34T^uZv7#*xX}*}J^0{8`C9%NgQKv6l&uv@qMOrgVdJ0=adP?&qV7m(I!N0m|)Zjtr={T)s3R(@ +4?b7mW)}{R>(yqCN=8*LjxAd~6a5`G2w+8hyOF5kW^xZvI>z{lI@eb`JA&dS=&}?Z-u{55yaf+w9F+n +OeH_u25=N&d!{EcMmHQ8`VmI1dW6SOCwetiq?Z)9{fSM++BE6N9C_9WTiE6E4aU9EhaI{SZ!d{`p#G4 +BfUQA+X=rqvbXBjxWUACIx-4@Ev=#-;Q&_Rv|{gH;W3yT$kJqdoMa`LMcmkgO>FxG9)N42D +Pv!AApZ4-Yx$hx9r&xD2>J_?`6%!5)!hxwl+3X3}Xn%h;x@0}-NHV9FXPd;D_4u!^=JU36b=V(goy)} +e>%1)juICMs>(jt(g8kw9V?n1%Q5P@Lko|i3-O%=@Aln>|=A1OjOYQN|J +UT-%+jX4JWl#6h+*#T;_c6!}$v^I0`Dgha)B*F%#F}C9pR2`wK<;bAysDCYVjU1YTN3zQAcqkadxgZVC3s<@?}g{^_x^J)JU7|8g2`m4;eTc5FP5QVYD*zU&6CK`9dTr+`7$y +zTPH(5fA?}Sq&82GA@jHlHOG^o_fjJ=^e?Fq8H%^QV^8bWJ>SOPxo_|JcI>>Y$=YSu&C%6)uz|4kBwr +*~phIngAzH51xIBR^GTJ|CD-b&otq4DNbzd{?n|T}ZY+o_%i^FY3xDE$&b$CQqhj9CL>fLuv4dZWg_| +$N$A5ZhHx5UA{4Y+$Px8|GKp0u^7Lo3=q51pxNVhal;Z%#XCn*6TtWzZhc{-eF!e9y%>J};1%E|!GH0hZG0SZ7n#q}xS>T#z2BYCz9SuePp6d8*mfyY`}ibv7X2;Sx=veUy?d9D750PQQ)vG +!g{9K^$F~tXC4H67nPIhS#%^ivmlAzS^P16y40W5;>^VF?*ZK^_+uxVWKJQz7#ng_6^G=p$o|fl($m2 +ez77sDD+-UlYdL0zaT~m)dQY%p_dig6b5!}}=<;Lxr$2du*5_z(M|Ekj(vkN|;Wrv+A9^)#T%I_eD}H~e%==3dbp53SkNSQVN$~BfBl`=MUJTV{vdBCy +YBvbpDx|5uM!o8?OuDkDoNP(#l}EmJ)`>WMrZIF%h@lhh(;lW1txLQTo!-ddd$e;ptpc90_1?;&>rMO +JSakKK{yeHP<)eCs>#>nV>had`iS>x~PjzE^sDsypm`|(20#l?8StxTf)LG4aXxc}D&IJJcun%31y1W +m&L+c(FpzcKTW3$!fE6wApbg&Nl?1}RWNl(8*bNICS_wHZPMl_JX`wZ>dhsF0d$M;CwKfx~>k4tpxfO +PyWjK}ZEXmnv(ghsT^aS-$g&k+n=LVOxi*Q@1skq&?TnxJ^=F2#9#vWxa+=rFQ^gVZm_ZI5My&n1Cfp +?&CSy^&e6CDGgu+F!{5yRjYZj9tna$ym632d&Zk#<9@$S7l*i%u+^MC2R_RHfzsj?HMq=W1+&ma@Gj- +Kk)j%ci?@{D5qOik{bA$rmJ5+`eD`M*$XX4?$+1C^!Kbs{C%B*2BUwmf!38VIv>$Lih9wSVOnFheyUh +ww%EXeqx*~6!t2aJa`uP^`k4b9`f06jW?xaPuJvo{iSrGtXCLnWXcu#4cfq%F7{pq%&rapGTC7FuW=; +EO4o{r5$^E*u$pq_IqNn;*d;GQ3q`Nyb9CJSqXS~q!#5HX3_jiiF&z+#vC}@=q+-Yrf5VSh4qm@geRX +XZJd*3~v(Q0X;(pF-~8tK#M^#SY{t+jT1MBOmi8th7gSc9EwkIaE4x-pGzQ&AR+q1#oh=?2}bfY}mfO +?Q}1gsT*XZg&FS0~*~X+hb0&=Pz+u9ZxrO4}M+hK92|f2K1d`mb2-&voUtd09?F>u0XfgF6B&M*{v>=3+Cv=6jLEY0Ctr-Msp)! +v6^_&)(!qu`N7mq5mgDG$wSY{0h)qu4w33p%>zPKm6WjHh#dZ#tG=fsP|OIu^yyu|P-1g;${C?}(1HK +Mr8g9yxkC=Ecx))+P+Ax8j1CWk|QvGk{sDHOdnHqT3Ay*VlIm7 +zIZCMoyPdNPl4y)q +d#A`$REWkvc3-MPz;x3B6l6dTu^i0EGUva*1bg3Kh8e-!@S!RXdJzZ}B{Zzx~j|uMMms*aP`lHoPiSA~HPwix##Vasn`fj|jw#+Q?MxdzKX!*iobHDI+?l}m99Me(wUN+v@ +(D9oMjJi<&L;LapgnJS9W>h0m^JyV<7KU%6;&4PCR(;Fz>>6zL_lc +OV#$?8b2Q*Hjd8)uW#r3dE6|7WzeSE?6NS#))TT0LNaH&IVy>Gp(m_;d%-@qdns-cpkxZ*pTFEf!vS`ZC;>m7%` +Y#4YWrB&1;yiZtz~B^NG~vlfbD0v1q;qgZ5#_2aIGqQ=TCXCz-?XayVjN1{y;mIBvip{Oohs20OFR9^ +yeYRh%ynrqglSb4N#?pIgP=jTFFjNtYzhSz=+AE& +Ule0yg4@bDuo+}x^e^{oy-TS~_bIe(B=7GHlUcRR+jSVRq)^D(%6M8B3v$6Si%oJycH9V<~{+ae?mWB +WCFw>s5Tow<<(+@i1lq3xquoyg9-Px~H%uB|#A-e48_bC2jZ=KFAd`j2$hP{zn=nm +dE`h~@*4@6G;M4fa8Iw#aJpGLrrCG;cpi%-jDwYeL;?D_U79^}}wtR^8wVi9J+leL@&t@F0zNC^h$* +C~n~Ml15elzoDaF{o&NHn~%Ky$MJoReQW7FfTy3XrkMQQ48i*&kgKkrK2uGx)!H(_3);Jt_7PmDlgn$ +Z~}%ugO|j9n^f)$UHxluJxgns<&`gW0|z<}fyT+}%Gj +Z=rigt(?ZEr%e~iCxAIXQ1b7s?@vk>0nmG(&`AND`sr_i~~;r&;?44oR! +A_T53iayk8gKWTN&{}_Jm}c_T2e%Y+mc9L_N0Yv+|iI22ch$SjV$&&z=`K+htG+peL=~_1$402X|PGg +?gZ?$EaG1d!Ve`nJ_?Yu^X?KU>iSwhws>X9J}^O>9 +P*|3@B#BElCwuXC(sE@^lcAVs55d85$b_l-h23FH|h5TkMzgd^RRm)HNwt8eUr}H}PJo5GrLcN#c`NZ +?cCqKs~sM(oO(D4J%<}7^lQONOs;unD3SPfdf0lJdEJ1Z%?r|{%wlE9zuQJ80&V*c%p7K1XfS@WZJYW +7piqnqY``wyY*i^oDyX}d0lCit1Kv;4d&(q%K-Se?`|{h5=1yC4(j; +qhOgm?az7`MQ{RDNRZyk`KyAs(U+QVO!STWI;=xLEGZ6~L~7dRK{J!Y8he~k8fj>Ef0K!-nAA~yX&+C +w1he@ZhJh5gS2y$>wST%`9)>6|$Q?J)!I@6qCqHz9u~Acw~xk93xaXiH=D|7W^>Jl>DPV@r}-ij}sbj +_dJDmsv0T=@&d4cN@q3lfe65ED<}g#uC{hJ630icG<(B?bI%uK;1!ezu3ns(?4JAxy=3djA0%_`DxGP +Puk+)JMN>n$X@+xrf93yPGLPHH_Ii1Z>5wpLUVfh_?o=Zm+X?Q(L-zG@E*P|^%ourD?aqUPE`?nrU(3O{XCa=J|TKp*P^ +J?d`z61X9bM0Xh=uF<7a>*MHq|ta8{C3bMHXXI)l;$g->vy#Cs^azC`WWkb0>3Bm`#OGG@!N)9JAOSf +>+8jj25t9$I$peuu=(K(K;1+VT{DT(unDJ{=8mKcn*n~``v9t@IUg0mQ +K!fhnkyGVW0{n6(uMaRbk(*l@Dh$|}ruR$^|SLPqwp-7fjMLCJV%k6hL%KL*1e)vUn-sxc{uJ7sE^#@ +>s>5O#R<3Ee$j%W52@xC3%cSvSU=d(I0uvzg-EmgB5c)0u~*98YgiMFAyL|vckM-Fo5+sRS;UmriS)Er2&J{p6*zhmNbeQDBJ~y1` +LaU_E6~@;2^_X3@wq_0eBeQF=J9o}LRP)A_!$tX_9m%mCv-D>zCHZ-rN2Sj;Z5i(rgx<8gtJk^bWP_# +7drQB*~3ze3wQxW75Llp6|H{yx|6@}LAeeC&39pib`NVZW>@mPewQQerTW$(AElwZ@8m}4M`cb%Lwy; +P4smPNS`lkb_`V0pFpo>#`PxP2~Y`IwLXazbR~#=nTJ9DY34|~^132oY{a>?UOLMeeq +<};Z=*x(A^jc1P>8pD!~EP+zNg1)i(gRb{DdBwTTuZ%wB!4mn-C9%r0x@|DV7m2FyTn;&--61?atHU@ +0Ydq$OeDyyb`q+_TkT>UKEGZUUnO&WVR8^6Fh#f@%C#P@}kY)Yrg4x*%3M`vzzfVJ!l`_lX$MElmfJ7 +C35b(&7VI@?0qLq6 +c@`uY=kW6b}_}U8>`JK_@l+pbk1S37y=%X`(cA8i(#pM+y)^i)9n3EN(!}IG#agH3?wVvqsR^dJZ*}x +khPDfWC)9ra!e^%8Cg+&9Y@m$ +mn-VLxPFO#O7{x}t90$5g&QR(KzvS&*&zT+N?=+|$_qh7&xLwFZnCs_C4Mdpr(GT1_wawAK(+{kL;^{)}UrO3NdqhqN?$E +k7X_`rqG_E?HF3SkK|fY(^DyF +#|SZJ#2=MoeclsB+-`&-=k+0w;36(Fq}6*1HJ7ib?9ve;)y&_x3>YqjXEo^9gKN@R?G)Km4b +cATyA;cIr!p%u%}7^#BiEnmC>nhD$iSM0p`=zo5P|dJp=@SPZQ42r9Ua$=*L$K}ILG&K%NQ`vq;ty3kL;DDk@q)k*+F{q0P30(El*RclFN$-30;{uy- +;v1p-s*uzvx(-h=Lk(4FE|I9cOAdEcqoAt(%v~-p82_=onGpnARhtoQlMMr=jLvuIA=Lx9QbN`oKMra +Di&V1N*+HA?4Vf5t2>icvoXA_qu7bZW>NxQn?&aV()@4!u0FxHMJ9hxly?yHAUM)Kt8X)|j#8`daqyk +Llaj@|L96d;^e!QihvxHk9XA$xEh^s&$SkqqSlckmAkL))tZewqjdWHBy$_!wEcEc@Fb`eFzb5CeG6; +PBp6A_@Z?~Av5navKtrZVt!6&YP&cfduo^9x^Kz(Rmqv73#{1a=L@Az)`ukd4!-O7B;q{CT!%~k>RrH +AbR!IYVH4sZ0jC)c-fd7oI*G4gp0X?|rP==h2naOEmBh^<6@cd_xaVEOYtQ~1nT?QGk07oGbnXd`Rq- +imK}d8Jrd+U4Ya^JYG$I)SI9{-EQiAIUsF9}%$@Pb=m7$e-qLa}&mK(9SdK3Cox+Hg}PHQJ$UQ?}MiC +e0p8r^7eFO{w|HPmul@#Yj`cW_WZE6o}9ivsP)f<_23lXc%P2M{f%_KGxULCUi18c9WKQGTeNZz_wch +f39eg%6Xpet2@IGbanoZaF|L&$e8xSBd6^iW*3R{bJ+E0wQLF6hQ|_nO#eSXIbWGDJCD-X=njSN49l; +B_a_-T}3B#kl(~=aG;i +sJ9*Rj&3R(?L^v_;NAv6i75FkYRT_)NuHtT>s^B^2LCrm0V$Vj4@M=LFriaGsUO^JTv8=T<(B+Q{#{e +9Wr_He@r~S?$EnA$fE3bm1~k8j&5&_ZOIusa6*KzE|`i>c?C7`&^SR>bW%XJTV?N_*z}YvvgrpVv_Pc8PewSwTJfmE2YgjEeUKP@q8 +_G758ENR&k}okO7=xcmx0gur1_tStG8C1F$azr%&u7fh0}X|X&_P`Z9auj^f +g>E>h}NC%2G6)u^ck_D#liN)iJa8pw`z8-^4Y6zk_;yPI}H>pe#N-+HP{AQbms!HKX^8)!P~U^PvCk~N*>u|VzpgT +=0N&bc{}9rj9K*@cDAl9U}qU`+fnBQukKimx(!GyNa^T1rK?1mlhnU)?ZF*M_}-t(d}xdL_jy`cN=LBFfI(^JAzg)*Cd +nkyc#)<;QaG&c1^qk1X_Cw=sP$W<#aoXk_&51HTpG8bG4~|EYShk(rE?W8fS)T+ZiB|p2JrJq;Bd!+U +kQFDutO!u?1fr9S0u37AY$3`p#Lan`wZ+_M;<#wa|UUg&CBh|v=R8qwPxgf8urA!vNX6DdBg1{wV5>c +o64LgiLz*oiv{W3DEkvgyI0B@q37keuaiD~;n>Ac?Ri78{~Ug!h9o}jcw8GJ^YD3F8U9v*TYb4Xxq~G0n%_ucC1HC@cI_DKE%$>o+crdVVBt5BpH!jQxEb8WMfg&u(VO +q9sPOqw-2Uzo?dDcG7e{fhZbcEeMds(e94R+Z?mm7Xx?Fy?;zuHW8kIeAiOT+Y*zee?v|4=JcRpm`?M +=))0ba-7YVjEP#J>rN{ZsUIE1Z7I#prJ_@#EHXNsOD88HCOG(QI+eo})bn#o3`Rk44}_pR*)j@i_xWL +)&S8&*=FGx_Oeocg>}ngJg55zqA5&w_CHjv=2fZz9H7z>Mcw0Q9m`w$!H?{Mm)PO8OPh+$>L#xU-xQx +a0Gc;UNr>qytVFE<-tGE^RKjLzZyJ2&weJJf1n1B((?}@ZF{`>kw3sn^L-LC`sU6S`v-n%^F89$|?g()L}DC(I)(j-E +$2T;$APMed372#XgOBIDOXa{PIO;qo7u&HFQZsH`Vu^K+q3EBU2?3Z^WnV>i8ChdhOlr9PIj)FH7YeR +!|1J=G|3muh4!3sG9_Qe~a?7f$z(}_bK4|6s;4muqqk@Q +ef-IUXV`y>dnyhX5`OAIe(st_A-(A3JiV4_reaIg6-;uer%q_YAnBN*zhXLUh;jkJ3Ufg@!PPe_aF_? +u=7W(X-Kv&I-lmvp?m5(q_M5eABfm>KJpYG52YW%H^OZ_@Y!3&n(ASnPZ<=yw@f?3Wv-ZK=H1V#$Ora +5B8&Ih{4?+8q$)n{cq#JU`$tw)8D1+x{j`!eH|GhI*@m)dzm`Unt=}_|;yD`sQjiut{-IvrPWZh|dot +2K&NNRGX?_6u5gpgydJpKt_hIQsYJ6QS) +-BR`EaBTnvK({zDV)o{^?C8==;g(TH +fhZG>@cZ$K0mb^nU+b@qWkLs?YHEA8A^hMDIVMz5htn9sGTM({2mB&)44PSKZFv&ucniruXx-_wz{Z@ +qR(mZ2o?M_I^QCIe)*fX|+P{7i#YpR^7fRmQTtzCH2k+k4rRnN3?UHI +PKi|yiDHCk?a;p*{-nNyO-KHS)2vDS>}Fj0pAy1O6TodfC)K;57O~lt(|*%l6G#h)<$?Iv~#pKOSbFD +u}C|&n?>5W4QS`GbnVpR!E*c_u^0 +a0jobd33uoiTI%=Pj(V4sn%Gf=kjv$|aA5)1r3#P^GJEz_raK}+XhK1vhso +SvI>>6r!>ob$!TBL(_&8eHayq>J@yKCnlvDRjM<&H@^*T`d;2kk*3H{Cn7yz@KRDyEcDlKH$D+99_!e +_kAA^kp0M`dC8Bc?O9{Dv?HG1S|laCw?<+qkvn522Ur(pGK%Q+;-=Igo)Roh +xm7T!nT4#pW#<^_TS|qwR%n;*z)X&+YrGHrm<0~PO70)*6OZ>pD2IKpC6V_L{$k(GdYx4}T#*OCHen$ +tFV9pXT?jEIH^r@dPWbm;YnnT6Mg2b5J9%Yv_-nYIMFwW54yU<&L+cy@fZFq#Qh1@#XTF5TDr+N+OQz +0o9_aKemMX&4JqK%*YD$Y0xje~{b;sQa7G_t2GTg-=#?!SoFKPPB%0W_&-QQHqfwuraHXW}pMkMJaV< +)0LML!nq*;qdhvmjHX7IHlru-pfo3!&unKK*H}aM=u%CF$PAqgZiy#Y>Vcv(Y$u +z56uUoaYKdXvuJgrdMRd4HOc5oNm)ZjN${KYBnsD!>ZRxR&}`Zd67e|7rFrMwD0k>1teMK9Jj39h3wbJsg$xYe-d8*i&kb*fWy1Ol@!olc +6{k^MCXtC;O(v$0OrT6_j7(S~GSR%&B4lFr`+AwMUQQ->9=9y!VmX@aHJ6i(EA`jYTE9`q0L|0B0H5H +Dn2W;K2(D>sluwA!Nq}*~z4F(+Ag$QhV@f-t=cG-|8#QPXf&kINH)_&qL^Z0~=j>7JMWA4WJEoOD1 +3bOja|W#x@QP7v)Q=umSHnQ$fFNpT4l0{N76|i)f!Q=fNSG-&b%i%{4}vZsbcs9>6Iq0&d~;cx3NsJ_J+n|cpbps&SY^G(u8l|_1e<;1ANTdU +|mjo;pXuGzup4BY2Sh4@N;M^-0@0h^|P6LePJP&UtQbrCj8IWVB@JQJ4_D}Fw6%n2wLPZ +$W+me9jgouLNGH96h`(11A%w#e_J-_ +pQ-hbXd@|m5z*Y#P?de-wi>$%jNRkj}E@BjDb2hJJipve!sI;_svqr;K2ka8oBu4lFlZ +M3Q2dsiR(ez!YgL0Km8tv~NR_E4KWjpG9a*E^^(qs9BJyGN68II-`m>VH8nqOdS1Mm4M%C40BLYGl~T +T~l$!|IH@G`|pUU;N&@$MW_Aj)wuSo4>6eBFuhh^z-AWe$qAJzB?xZv%{GGk?Eqc*Vs4L6JCJbWWa3U +Jq<&tfScpW)Q)n@`(e*$nB8r(f3E>E2n+6;FBkciGH8$2bTIs&rTa_Rca6!)2D8zr?7K5 +GQTP?3jjs)F?n9sz1k8_8tn|4D)O&u$tM4ml^n5|XFd`Bp3V}XC-F=_+b^ +Ik)Bb!BZHCtF`Voj7O2iV +UJG+bTythVRB=wmBPn`d!Fx{Ko&iC)7DE>r-Y%-CB#ZHIntsx`dgmk3G*=A0zcoMb)SLJ5GIB7c_zMo +OZd`v^l{TgPf}!_`JK=kuX%K&a5O~AMj4v6|IB3fxS;Z3^}g_qL}N(_(1DXHg`*;tUTkE3*TC-5B-3p +{g5`6jvRasa!8gQVvg*A2j}PIC)%88c&3e&Y!heZs5V!qd?03e%Xp|LKZrA?1a;Pd_m=iG#4(I{A@C{}=Vlqs&1x-6o|E}FC$ +p6fK#q4iaP$QwV~&EU$F0Wmv-cu<{C)$@%yq~A-G)7er$@y~cN_jZ-*`{P^hjq}-anobibgq%dneXe^ +PbwD-;HWtf6t^(5{}n`K_e+nR_;7zXUur={?)e+LPoX?U@3+X!@Q$M45-SG9H_Fl(IN@zv6DtpY>w$yx_& +dz0@DjkEr_MjT>$ER1ei;>JNBxrgW@dyL4z_h6r_`JlBW&Y6t#a!rr=NI9$N^P4Q^;`|&ZHLzXetDSH +I%DDN-An7KCBgCBEX+#j3NRPkfraWBRcTwOi14`Z5}v+)Cdg8M2-n@I%i +SHQde0)KPK>)`L9)JP1Eh~HG?o}BP^1OCL3s@j!9yiaXHTaC5(Lo1|R*rZbn!r{ue_u(=2yR>r*TIn~ +wyWOK{gX=&uY~R*8^3e8+=x6hU8)O{zxmruR!hI#T)5o88E>a$_h#maq#v`;U4NXfBtUdjEfiRBN~23u--E)qDSg#Qf~;g81g^IqZziJ)8o+Yh3_gI(mMP?#te*x>- +hfsT>GrjEMLD%gf6VL_@;n2p-zwI>kxQ&>H=O6Vq2?457jE4&8Med{d7C`YgH<6H&yI7Y?(YLAfs_ic +5SY&8e@0tN%jrQ*1GHPd{2L(?}Z!nou|Q{vOVb&nIs*K{ +G8c2T4J+LD{F^4vIqFcf9J}v`QOCwy#mX*ro3nznK+ygLj_TVC1DT#R>Mc4;?ZvJCsigq>^`>q^+rPPgBs&e1;O>;&J{v%x +afH+JE~DXk98@wC?%$3%?7Z1YX*W&YMg*?Y0PjFEsfa%#?}XB+k2FAhVjoeE)Sxh_@yYNe@C-@9Ov@H +IhZyhG_L{c|;AK2bVe>bN$ef9iD!Pwc(P(fgD6C1x3Z%+Yu+``cny{q3>)*q8K^G5V6RQeyft`-rt!x +fESzOcTg0(vHNUIZWRJufin<_;jmx!E~H?Xp`~hhOCKR#-DrFn(V&@V`2P@VoUT`rpU1bKcA +Zq4=|vrdNWmgPSRzJNJHj5t6thT3#%$xFQZH}gXcGWIUp>Q{R_x~^G|_@VN2Tsj`(nDtxcQ1EPasP)6 +VXnXSBMFmq=ob@wx^72lG-%69CY{SR*?~(oOG5YJ5aFuXu;yf>o_?t%c=QjFtdFeBfWcIfud6aGZc>X +YI{hX@59Op=Xz`cq;eVG21U8=v)=ZJ!-b3_lUVC(d;-`(iqC-wwXN=|MIAc*dbA^wi#*;HL9W%T%(Q%3ezlV$Awy +5-{k{{C{A`%AO^FYK>4_^?OK@$ASNq$qq~%rpZJ^W)$l^EYsO#6_#pW%z%et^B`Y*B^ZI^WHsEcvf$t +9c)=?g6}g4O$V21wn6%~zPaxE?evi@|E?IK{IbR1i^dzbysHEc!L#3mv!CZ;0nX@^IRC4_i-S1#$n%~ +0D}(oLTD1c?qH?&y3BBaWhtXZlXvhZ%)~+Br*F=<|wpVZY`{K$U4OX; +E!3K_Ov5$eG@h26=GcJkidKJOfoJHb-wJcOf%x~Yern?3DS2y-H!j8Q0JbPmA}FmzF4l$?+iZ-V=f+L +bN^osDZ6cRK^E9Y+uQ#C4BS1z*18?CA^rI_^DYl69p+oR@Mrj4B|^<4YJt@EPCOa7hq0e;N +C8*_o|7J7KO@I4GV(siW>b!*goZOjKoJ<2zxiB0%cN1aH#_(%pHC;jF}VsY9n($+Q-J9KnB&$w|)WAb`!G +-A1Mz7q{vw9kmWIMUD6PMPC|-`*Mux1E?GZCs^ZKia-O+HRP1qLX&3G5w9S$$ibd4d(w-l4SlA#yoi9 +J?tyY$(h@fuHfKwM9-`7UeQe$j^g`dKap6tj8nIQ)qkfb>QS5omJ!LcYR37$J#xi9;k((+GJcj+n`x?d!-wx +WlglAtAd~z{gng8dda9bVVQ4LtwHP@V)VMmMKfW^SPYVUfhn8$K!P>yne=4?6$_#gZP;J6vIoBaP*@! +Yj`=@91MW6qWTOIhelbAQ8r!sz>R`e)h&ZE&QnBEa*<) +=(OtPE^KgyGmbG(k$wCm~q{3mXZd}&4CPrcc=Ld +ZKm3UZ-TTrZ>pFm7^_J6XMGBP>+pAjjCa7etP{L%S|@sg4w3KqtXAKfK;H~e$@o0GA=i2yQMyIXqoQ8 +$H%+VOU9YEDlXq~Qg6ey1hrH5T=xSV{qEScQiCNNATUnjiKnBFRNw7Vj(7WQ8Di7)i{XOx*}_L#FL~d8b)*l*wa6I`SLWMg-m)=cknL#`d|Qq7zBm| +eYm#U4ggFbfri1CquH$~Kbb?R$ak>4AN6Ji`W4AONw3}s`Cm8w%x4#T!szPCunKWk~>IDI#mf9NGFMV +k?SnRE3QRB1?g$vFu7sY!=;%uAyC=%nd&$xf1Z~GOX)%`O?Ah=F1?!(y(UbBGuhRM9|0_+k#+Ej5=-g +~*Fz41ppVw1prep>nz-V_-07-#dTiGj$zcY0&u?*&M28#BQRfc92ri-4k!PmU8$BEDbW%jw|96;Bgjt +Z&-2NcyNH`)J=n`v%&$D);#Io1b&5gEl0pZ^n;)H18v~Z{zjwUj;MZbIcMtWpNuP +S^8VxhxRjj{`DX4v(!9&ip8tp*qW)Og3gj%H&EGu6aW9o|%jXw^UoPbNyVRxb-*i0x8=i3{4)zT**1O +w#t4qp8&)fDy^oU{@cq;wbwP;^*FUwCt`IdY2jop@HpA+zK03Nvwb<#FsVNOa%NxvxGZusYy7;}sEk% +`3<*-wtm=*KhShkLn2Y@#iOtxOLE8P^H_2c3!!Hhpm8$u*uP@n|*aq7bKO=i}0v+GQX8Nj}1lI@%Gvu +88P$S%!MuYfeSA~%&hu0zIOAkJI0%YA12YQlqYoXIoresB7tO_KK +K{!9;nU)!-l+4(S*TLW>9HmGGuV{K5cMjhGvlv +s8F@SOa>tz$fCf3=_7#66vYj5u0QH^ro?qbF+nvQpUjGZ@;ab_a*2}gl8&30}=JDV?r3m!i^+6LqR<6 +vX{o;_B>-*PN{W6a?#(jUu&|L;fqK#tB74d97RaSeXq&@XUJcn4&}O_y;A=E-wY#=Vt!eS-Jszh(Su` +f6`H8#((vhiB>$X3I58@G~Fr@|R`&iclWbjPs%G>J}r%6XQIGCn|pI(}3?16^kzbKDGYq;6c89mU~hU +@J`o;wX-FN9keI%3|s5>S!C?(Q@_a8FLaNJ-|F^H=nc1hJqk`beuGC1J7ZUDJmEi$g4arn;Vv0NO%#* +2Rrwl4fN}=o8}aV`4bV?B#u3+vwvz1IHbKSHmUegVg$vC25QbdiSUTkiYV~_AgvXu7KmHPK`xxh8*k_ ++R6KYBYje<7R +gxbJ(Jy#wHC>^)7xwZ7KG>*D%3ueezK;YsBMxSD8s(^9_jod5#rhS?ECZ|JFgDTOT~!^@jfC)V~im^^ +fMz~PT)hfcV85orUOn*n2+r}<@;)TFXH=(xfICxlq$bh9rL*!vN8Moub4iE?|DMW6Z9ztz6U)*-lYf0 +1K}NhLyX#_Hyh8*6LER@{&?vTpcFxn +5-&}X2{z6UMcU4}hNx1_n4!&J=Qqvq8j{i>~bb|GU!owQ+IjGNyi{m$+FqiDYmbVL;Cp}rwSQ^eJJ=% +42Eb$aOU=5v7_df9xQrH5WHpY!z40rUA2dgwXxxl|ABH=p}UL%n#Gu{EOnz-jL+^({vYeGA@QACCBd$ +KEfH=WW6spuG|I#1fa%RdGM?{rl~SJ>WYxVo$7)vA1N5>^SktM)MQ#_#p5R_iuh+et^0-%3806l#Z8i +uoyp@d4=4dBeWZ2Iok8S6_Rnd^0fvflixa|>hSvu^wq_?V^tX1?nJ#=zx{JjsdPW2yPoxT&ZPH +&wbyH58Qb8%abZ5*uy>L<0Ng8LJ;;m7%y}ph9IL+7iY-pGGEqoR^FC%WZjKTawSjwS0jQB;HE +}-w&cnHz-2CzL@Wx$8~BsD}i1^mbZmXW->qxEVgoznbrk73_2HwtMA@uiD2=G4M~y=y@L?`k^@4$O=A(loK;f;HLOv$-?d@gn&8YeZT +Yyk!vmUUNFaGYq_=c!ozQgE3A=XyqZ#u;T`_J*w@M4i(y$V{~1J!+loha3}7G2vY@XT) +z*%+q|1=jUi^ONzR$dg^MiX}U}F^jujz90P5hdM%e0q>XQede91Nsu8hk9$y_y7qne=6P0srzownojRY~B-PfpP@cBnE18Q3sy6J;>JKbT5ae+qs1Qzd@fbJkN +tyl>R9Bo1|=zuw~_jl4t)b4~+3HJY-0uRe9S2s}ty^(jvg$NsG372RGfNv*@;r^0P3=I6HtAwNBmNZW +5wUsgADNnQF++wE8nwnNz8VHZB)fL)us-)6P#FVVy)@0ON!{#K)2*P|`j)rq2b>6VG7I#6fOn&Njd7X +2E~#ngT6j7{L^ws+VtHap<79%UM}ltIpCsZTq_vg=b++30fYpEl(z`ziaP3r-nZaQt#*QU5n$Jfsuj@ +$l*{bbMQpc=;91SQEW14v{v9J?21vRhmA$R7)5rdb&F+vd&AVoKB8UZ8?$w__t4I3)-12 +O=Z)k~OBRZk{9t)gO}X0QMf>&Ddpoo3v#_@?AJ3C{gFG7;Zv*thd)AsLX$W%>&3Gq5FaCK-(F^Ho87G +flzcpFP;wKJ;+X^i*k7s~$AHdwbn!B~p$l+TCd}q#wYWlGnF^F?D$9_v9{mLAE9ly`)4Y#rWAkLHD5o +dQO{ZKn#(<)B*v?3iRSzj4NVOG^9()4!es>_K5oFyw^?A1F7Kkzb=LfPgqmSS0{n~`n38w`s^f$$z5x5 +JM6<%hpHXBi)XJ%bltJ0+zEWIuxTmIAMCJCt#+V%o{;6c5~9jaV0nuy&$87ML~)Bf#ra60t-LyYcd<= +NbylZ~;u5Ejx$A6Vcd=)WvX7*`SW5sN?j1iD68FbO(2{t*q~F^gZlfKO=evW8zxLIyes#2eY(y8+Cw= +}BrQalD-n9WgR$!g|fXQUgnQv(#zYMVPXqk14bvbJ7_jp^&fa6PR<`zu`jWWM+{3h)u%_MwDo364--n +YPnKjmz$fv$Y4E83V78-FWNN8TS=h)=E_$AV6=)f8g*9g&26P0KXbFU$olS>`fdXs- +G1zGUoPPbJln|l{ZV+fLE%ZD#WGYFwA#vk9b*j70FOAY +Gn@9>dp%-PlT{SZ*0LI9$@_Rw_A@BknWK0b^31$PU_3eMo^3fVw_^*+Lyx~fdv1{+X}}7h-j}@>e%#crpIaK|{x!-ThrI +BKsGN_3fa6(f5_2-_xa(v@@A%P^O794|?yd}nduHP=0e`y^)IDsMTU$)~2A;E!tt*LRpSDh(_utsxEe +1a|$Kl=>$Ry%k_#*pLtCWFUp8D4SdxHZ>Xj=5K9o;fYUjfXVA>i>Ou)DrvhU;=ceydvWc*In>ZxlC&ZhlXiuWA&aOxe8G8Ugf<7h+H +XHE6L^vfWjI?vADTfQN~c8l8~P3(!&nly=hvBgUg_tTqJQTHoag<+;WowNjka|fm0y +zd5IFO-y|U~9Y44b+2Qoe`mPp%#>r$3<*+l{ANGtV>ru)jrduKqTZgQ+WPECWdmmRwJ@fy8>0G}|3UleM +_<;VLf)0~4!D0N*G>3VUx571xZYNscaBmP_yP9$Ieg#!^ywn5K~9u?7R%ALjJ9n~?0f3l`@)?vS7J*# +XuDl3UY{-k`@j>a^~>zDP(Wc~e=m%1IxsN&y_TOQA(-Mtu%P#l%nRDjUO_4in(|+bBO% +?Rh-eOhuROO#Dt>`OtCukDlfDM)XY$RrF_qPgDfA4% +JDUx-4*9cIy}n$X_j5uKM{^K=M4L&&yQpOgnoGsA1^LQmyt)a*T|!J@vR7L54=TP)V6fmDKL*F@1B=)|X{u0$6`;zy~HnI3p`7UGiY$m*@C*JN-^H+IQyR%&%l$kHXJGDqD1Y5_HUInm7v +>*puO|1^p3CWbRe_0}%uH-L2>N+QEY9pOZN9sSVG!ht@f=QuiQagHqPPw?eRUms7Le6DJYJZBD}??W7eF<$VF_h*zQ`m)d##9RsJKW<-)NQk0wd?F_l%5@q-@H*#k?owAtS|GTi_%h?Cu73D$jyE?8Dn<=mFaDZo?U9!Aw +?rcs_eNKAIuzR~+BNYoW$| +j9Ui+y>P#YIoH`mNGpKX0)zela+IE+)9r-`Uwxn9>k=IsKTW~YB=Y~hHpP>~qgQ6mYwB6@c}{QDY4eg_Mf>to;1{++9=%tiy>RGrlD{IKCkkjYUu_v({% +1yc@EQk$hJ6q1iK-m5CGO1TI+9oCZxDP^HOkgZ5FzTqXwMJcumSu`R%|YG+MLi&oOvaf_o+aWc1NRpI +Ny0Q+~zu=Y&5u6YcRfD7W-fg);oHPD~&O3zR-AR*EnPBwu~JkdD#DOFt3!|8#}I6jEi|K&g-7#x%W6WAqC|3Af5>amB==G|{bXzX +=wD%roD`wnLj?MQpEZ^Mn2?hKw!kPFMKqGw5BQ^nb2Wt(<-0q1S=pZ&Bb4wsAKAA1;c8?=$U&ARAZls +4wj+azAM4^&)!SLe~70md;TfYE+B +sXU6qT0bI$aK3>^|}eMZkeQ|3hsTJ!y3@V|DP5vGnXZmda*yLGbEH&6C64_?|y<+lh~qDSd|rhxaEEb +mNvX)~B43N)*G|53n`u^%_1{$9MFj`uZN^={rDQ#P!!NL!;F%uU#YcHe!QwnR#<`w05rU9+9`XwAY`v +sH96o)Bcb{chl!U7UQN6MNjoTx6iJ)R)rU`=d_jM=tZMxg?A;{2VXyrSjbb`Of8iihDD~-C8w6blX!h +TluX9bRdcSf<1N#_C69-R8>?Nh|9GVT{ +})Ak3kSn5r7s5q82SM;_+9+{{1p4J!j?PsumE01#SBm39wXWYR5=ACg=+g; +R4qiyt2m}kiR^a-#D_x^BWayNYe!i~0W>QX=-LToF%+)^A$ZfU<3@_aB^*)!TwRSt2PTXwm@FIq?Qi! +)G;{3!9BWf;dMZaKp)BHlO3F#S(z@{Z%gu=Mc?B`W=Gy}1T`u9o&P=^w1@laH*k_)MGOA;6FKW4yD8h +0k?HEYB~a@7^o)?mW%5e;#m3&bcw6n|24`#>DRMToDRCs1?8cOvIjZ)cnV}n>FWu9p`^EYW}h1qUZ05 +Gk+`QKiBG;NI&7(w4W07eXbw1%X_kbac7pmm}w%P|1XoVf_F1dQ$FXc_NCi@R{4^9=i&?xK3G~@E$zQ +E{N>nh5`N7Je*J(S_qfajcRpP3^bEb*4%$2$unAk764yXKPFnkC`1I7Q)@54Oe(t%arm0vW(iS1A{kd +lQr8dKsMztMWK3|o=ntI<>`w@G@_lZA*+d?x*e-?B{bZ3edYBuStCh{*v{4LHo$MQ7fFRA0;xnD+|Y! +ok3Wb!f=gO|}pm;2fA$el3ngJs1u^s(-^;#D#XpHR}n- +gm>5ipQ{x!((K6ncu?XF%}x}Hjc;PG0w%vZx7n$L_o6+7;H +IcEB1Nx$ubrK7POP5I<%kvpquJmoDei8i37Myo80H;@f7j8SGcriErmpLJSjs8-PtM`oU(mOD^z0Z +6l!S^uElUB6zCfeDcCHPuq?dhtX)!fy|JbUyhB0k`K<9ZPB*6H@&6CME`Wgnr1uIH_%U6gw`85jLPwUjbSHU6D3dXw&;Ne-&J>!(ej1o{t3$8Zu11`2k3cWg +1kRdHgu^z&)+80lTO=J{DS9&mg-9~pZBE5918NeImH*zXOG;^d;64~`N1FV54TYcF3}tT#xrExM&6%; +cMQnA&~KCaXYAMOh;yU9?XiurJCx}bG#S0S-k#Cds*WlgJzD>r}OsIblc;^KD3w}v29( ++&~4}3}ZsPldk<-Cb{G3h+Z@qW2=VXjfnQCEX{xmW8&!HeO7ub_Y4J-+rJ))@1k&vuT%H&00xo4&^Hc +)u*YG<5921Yg)H0txt^w%C^Gs@(d^V$0b^m(x|bMwI(MfE#0tzJ>lAc$bPYZ=l`RQD@&QeboT?o|^er +wU*a>ttfXH<7`cvlejv$~dK12j3%DiysVAH!0kdYX~RyRsCHRJD>b +$^%}9bc7AT_H^6%>T*kO`)8>>dQ@J9m6D_h_Zd5r{X6l?8&6>t?*PtHzo*?fqQd%c`C4u%~Y2P>cf8@ +Pz0oK`9kM%z7jN@-5>0DIK*NK+y!f9fO)QN-cEm8LC-dXgWcQN0w@Y-&m-bW9Br>-+?R_U84ZfH9ApY +JGs|1{3@v!GwBW4Qr%jygXHgxjbS-({h%q1*d_At!bwiR+qa>m7{9t(4oiN3K2*k$s|RiOe-|RE^1TL +wp(s_!jWHxIx~DZOe_KZ&_$p=FFwPj!VUJ%D6#<23!U$Jhd?3#h&JU(;l3+(Rt3g3||E1Ig7P}uLu8h +%Y`s~TqJGvqpgLSCG_kl|Dw?`_t*Ou1k65Z8_WCdmPOLezh~o(dWimkjDwSV0kX-BD!u~mA~u7TZf7i +#i)!xG7b9~I3VA+Cnl5v08hXxG-VC>GNBxaAicrl(gLYqx&~EmVe?i6r9kJDp)xJ8{0O`jA?NEe%Ikd=)xQh%Bx0*#>EjoJ9UUNqqR2{eL+H)bmT+D?pxIZ#H?SgW+plD6ZU +6Gi@A@_fh`IUlxSF1&+YX|zpS4J`q@(p0^8U@GXbg>gFc;vnemY)vl)KTuaDV`w|eYcUrm{<;>`7S+* +5N4tDZ*CH>^iL^S(_n^VKpuv>$@?^Q1qLN{2J!1=YEy^oe4jAx!NW-{UrV9O=@*rg3z&^$)miNw!0=8 +s%N1V>M&fk)A$QqeL{qNKnmt30TBQ5+P-u;<*9I*afbCNm+Q*Eua7<(=6PcawH345=Oy7tdvT)Pqz>g +SU`T=aE0_VuLAn#~(rbafHSKf*Ob`F)UmYcZ$epu41j&tc9J@J!rVxmDy5&i@*wJyp{|&gG6d!nYsaC +Rm#eKAVoQcqeoaPNd)64b`jG&l0N$C!gWZkg9C|D|lx!?RW9-?#KFZYF;xp6n(tUSgqc#>{GO>_Hwbr +w#VCQ|B7A={HrAny+|LqiAMaGS87*zwG0PgPMoccxrhHS_ktLMmuKKQrIV<5$Z^K?OO1kK@kN}t0+?Xuox@=z~!$mbgFftS=X*TQD-6;*gPc?`zO$q| +>Oml1E4X(Rr^EGzrw9Sg=Za3A%o3YTNYbsXa=!?;>3YFrbe#?u!yo`q54$>W|d`5f|d=GZu%Rg>jiE9 +XZ2M$mO1ZNBSYcYUwD2Jrnf=wX=oF|0Pf9Cwa=WZd!YGi8}l`v@;7V|OKq9?5aZ?_BIJbYuGlvuga^ot~J{2H_|6SCh+7SixczyGB2dtog8 +9-J4nS2F9_W58;e4>~h@x6`IP8vh +qF=+LR!6>_C}Ucz3=*`f&HmJ{)eFo+f(OhFQ1NYS?i_)umqHcN0ZE^{Tv=`6cAis{52)^*KDVe&s~q? +FK3P?J&!A;M?X6s@$LO%Wp +e@E!sMhh`FO*ww1X?bQ8vb1d(s**`syq`C8`wCWqvI4u1N$;+yYMcNWwOFc*%$*`auWKODijBoJnq`| +aA~R^t3ptEgXk%2U*D-O$c5tFvW{gMxF%BEH>WgKd$gBv_HmgoNbag*mBKYm_3- +FDBeIQI?G@8XXmd*ZyYC!RevdQWWU9S!EoeL)#j=H1?{V6uz;-|5&FZc+I=;CW@M9@?3tH_$*P_diGP +i#Lp%L6xm)Uw}W|*77|)^tj9cDta3Jg?*7Odf0|p*W4F>i>k|gv2zl5ktm%1*Fd3a(2lK~^Pn>$I +hl^<2^1(efURk>k2^ZOa>jTa`6{%7u=0=m>9^ShdRW6H?hSa&XJZ!|Ql`k;H`N5>qem9a1)E2V?K(t1U7v;KAc6cXChJ5A-3%itLrSje&p6 +%R8XX`^p5-!+WuPz_B0m?p504+eg{t->lj9Z%$G)=nB-^T{~CC7Q0D4uNaz+y0@c^EhzI}{g@wcvj%w +BJsg(fyFty_|I#@3UBAKne%)`x>Dxm7S2yhJN9 +$|G+NWuD^lfW8_;_$Mk3*f4O<#L(rN!3DIG>C!cGq6v`+`PYP16I9?G*?5)Load{{ubSxz;m88DrP?5 +{9}e{;g=2W!kF8XG|-4d=CERPb;#eU6$TeF|DX~ueWs}j{bC63EJw6T8r+M{^G{CKuuH$Dr~B +k7wI99zHP7VDz}p%DA;s_I^IIG||_4QSDvE?b$Iy^X)>JWyU@E)}Yb}jE!3t4YxlUu`-2smqV{#j<&t +8MPfJ|J4!o91^3u7bMN<2Zaqsqd(**PpkF(2zK}l~*n2}@m&IN;8|`IUlYPCbR}5jyJ@n0b0Q~gs)pH +q#b;l-6wejj%MJs5}5=33Qrlk$+O{DFmkFhpR;63k!y2goDH9g1KQ4W~YMA=rx!w)mI@#%!2d0j?4ES +U$?$m2)-Od;COK>Jx}zZd7lWVAmpV{(T#Lk}%Y6pw1aotIycwrcf^Ge;km#v~zqM;aYM+Kt7_c_3-;7 +W+s{WNEjF_KD+cKR-jr+}lqdjllm8M^#)c(=IR`-h3dqMA>%6TYs)WCDtGV{b0jLKY(3XBEa=*v{>pl +V4iNQ|L<5soTb$1mF-b$ws22k;I6M`FQGmECY0#{OdS}L9d&18Ofo)BzbIyZUzTg +0;f;q|#QB$j^JlOpdnPibXqJr6+HyqRITlWk=a8GS=Qdk^!idbo?>Ns3N4{y1IJrAOPc~tXyeV_1f^T +Fjw$y#?8B<)&F2jGqfpI!BlKC?ZD)wC0C2~L3VE#2&=c)|JgSg*4qT04bwf)Bq&R%EML_G$cYnFoE4rmOWuHdk&buik$0ctyG*>xjJ#XOciDKC9eMX +DzPlXnE|0t`;ky}lHzV@ydcL~?@2-fvE8x3Ayeo{n`zYUCk9XHc-p%H_PvYGtBk!)@yZLxGKk_bz?{3 +7q8zb+g@!cZ4TNHVh^@b6TXPo%=5?ezZe>9sX7w5x%2%Z +U%o1tSAjV%C>GP4gH3{Un~th!rw2Kh8})>Z2Y9#4L=R){uU;P0}DZ$9YSw#Fm5$|sSl=HC~V+ +w@dy6#fF1lJW7hKfbj?<-?hk%9+8(Peq5Iw0>K>t^hxer7zy&;qOg*kO+i%1g@xE(K@H1AzX={@Agtr=F7r&ey<09wTSf2Ps7L;SISXF|t?atcc*tHVWQ?cj&7JL=!5 +4YNq*K(<+CI))SYq%qw6Qt-?cYuu{?wr#aGWcy-H&zktpFTae)>}>r#w8U_(I<2bUo1_W3{cAFMMWhl ++$RJx-c`o{(Wdi`7^rw<~VcYH@Elh3o4$Xq_IYv$0PK6v`#hRpiJ=^dOWY8C#;ZpJ}gUjcB608ccE&& +I4}?ES!URJEV9PlpS!(FXlLug&pIJ@hpCkNa)aCBCh^#J8s +LzmZm?=1lTA`qZ65nYMJuqovB&C7*$;{S4}@H|njAs#n(hWhtY7rg`bmcx4tfQ^zS5*A0gY#Ql2cX6e +rq_x$zO+^dIb4BBPJ38S5B^_{#s1b?mR0p8bDt(HDoJvN~SP`2P8WZEj!y^}dU?;ibazwzyHenUHdG5 +&uFztwA1?0B}@!WiS<(?cR;J@7|<+dzLs%Yi5O{6qD;lXX$&G5$WFhvo>eiDS(I?C##0;9Chg^dj#9E +rg$n{nBI^J)Vb-(XLq!{Sv<|Yrj0yOB%R#=}?nV1~^*qb9{SghVX4#D|3h~{?V|Cz5SD8ik8Hl@tZZN +(>`fyo+IyxDR(%&ndmd_meZo|miw$WuZo4bEq%N=>?@+$;~gw*;;O$~8ZdCB;J+>^`Do>_(X{P-#!w{p9@`v|G8 +~ri+$cBDkC?VFa*WLmAN7*FGvoK9u!>D)>PbfBvx)JWG4i_0JTWRq+KcVXsk|3s_-5be__l7tzft;cX +Q=s_=faMAGdonwkPLrqhSK3N4(B)0Z@xfVo~;(wex4ak7FX+q-zvRGtn3|i&jYzLa?e9Ji_}EgsGjOe +?#wp%S-$t+J@p=A;}VUYBkk-N!;W`aUqJhJGyVhpG{4N8ESXY2u-j7d68&-k(|n$JgJ-XMu=%3Yag6eZj-@B#`85$I7>D2%jQcM1%l>-D>5p +UVzZjLHWwgKL{UR+fG+ungNd^utQS@Y6yu47n=bJ7@az2c*yNIS|{MK>`_`{f**tfGYM7oqe(ryTOHQ +UomuHN6yGQT_((fN$Fe>3BwMq-JsjMv^}s=Z3I2cA3NJ7wZlBwi@wuln7zBb+SiWsb>@tNiSqN+ln9Z +dLzF8-8UAdcSQ;u219$pCkJJWkT8)N;vlCO8Y|jjBnBLo~4b?f{2X|bHCOY_CNc=kr>V+?P{W1Xj*sN +I8-C~mq&b%z4XJGiuRaGar**M+&M$kUq$(rF?=EG@_xNDUC5jOo!KhKD)R?)UL$1Qg3eE>JnAjCh{f{ +mT-|4QAH&$rWBqeb_MyR%Tvj`T5u<#(yvNT4ikPMB3=O>j>XG$(K5$-ih}-O`H%R*_N1DC09RJq)&#(7o`hezgV8&1YN)%>=+7p{EfIOitGF~AbM)VVud(QkTqC4Q7jj#; +OYcX=U%9!|uUP8XRL`-~L%TDJ$>5FQw<6p`SW>h@NIQmCv_mCj-W!;~p&6D`BavFI%m(#wc%(>N}ayA +yO(OiFn++%zD+lRE8Zwbp-e2b=UW8+4RAHTU1GEa3(eghL;@$wruETZu4ccmS{{kHzdnP=EjRHP`|ulr-;n>PMS* +>2zWud(?M{&Ye4J-lB&1g`nFqUzIbka-YBt-0lct@-=qLD&x3LY(+gRDYTO8lC^(QgZcE+vw|LIY8N$ +xzN`~XZ9e_lu*O3g6>PwBfeQv~{sYCh*~AHrY-SO%~|(D(5xcfnK(t|?1t +*0RO%lv&gwl^w+_sh*x?QBW{!(|+N15t5cTDtkwMVdU7Dy*(OmnVO;S0KA874jNx`Q_A>n`-(S^y+l-81MY19uLJ<2$3nv9=w +eUi#yQI!GujJ-))g&K=q%=u*Q8z|~!uHikogLRXbTSwG~|C-S4MO%!sa%b+iG*yIQQteENK@v-s?Qd9?>LMYB1M-)AYVJ}Zg`)>(?l-!6 +S4+{UtHj4k@N;HqwIsF1d~cP9zoVer_NR8cA0k@^ea8-7Fi~pN=g +Ld$)vqgO~V`O3P1?P$ev+d}1=?f!y7Ngzi$!HgCweXjB16U`vnE^aGi+w@3P)^+n91T8nWB2hZ^?;7E +hPLIMnmEOL4h{o{_7T5oP8U7LIIMf}S_gqkwZNmN*XSFUYAJ(*pwTUw+ZjartzAwW6>oM*Dv^(f^c2u9G4gTeGxaP@mXltKS1PI6Ag89l$vLr^=l&p +uCyAia=*Y%rA>zd-(8E-_LYjc|pKJpu-e9pPreZ25Hsn-a(3< +UM`S~&MB=0*F@QjA#ljO-X=YA_-I6@Qs%@wcBoa$p96X|P1sJ%QX`w+?;PShC6o0CSG-2*z`Wv?6xz8?YwaZ!+Nhn_s`bJ~_U;Hj;U&m8JB0J#_m0n)+);UKcX7+bNZdfIb>+>&$@9 +wkd54f&IA56g-!r{M|KMCRy}xI!M4QNGThgAPe|NFhHdMG8XE<|FG44?}{eR8x=);?=%F|Dj?<7t&C; +6sls54vo!X=6P%0wC8wZ7@;`K$jMygzqIDVsF#nNx|IQwGn|E)4Sc*(>x_GA`gGv1!+g>2*0cy +N9qIZYR!Q@bA04qMp8pn<*!v3}Zfd3Y6crdm?y4p4G2f^1^77_|7~1+!(*xKH#N-nJ)99&XM@Qn3CjO +GQHD=!)?5u=KKiLg@DIC%TVDN>@VgXlQGsE7)P?qvolif{)@^EF8bZec$XOSu1M;$MTj{GgHH;do+16 +98Q=0CX^tANqOC^{nei@FUTWGrj+xI~5nzrN+9@6fj^)|)0R2xFqAl*}V6q;lwlZd=9%!OpyIa)Lhrc +iiuk&7|UROQ;2Vj?)eJ+`d4P%S&Dfu$2Dz +%UbiM1aSAQoqgIW4y}ajS?%7`|8+vaK%5{;y1paNpUyY?HVCV>*kJS-)aSqeYC3lJ^y{umpQ@{BvoayLu|D0Mouaf0=7ava_D!j`rCO29#YDr_bE|i0R{sQ)Ey7 +Z9@*tLw>QX_|GjU~fTlBU;RPkBx1_(f%IslM3Lkaj2as=3YTnL6xTtyDhKf3w|)**{lvdEX{|s-jP-& +EZK*kv!N>jJV?*Z=++(Jnri`q6nWCg}l(=&GC)AwtsAo`)6t)ju%LdK_obc +`&=c_F9&Jh;{hl~K%BGRCCd*OEkCC&6jACA9De&?pmwz5%1co@)7T{s5sTTEEX9bVXe{LCyhC#NdL=i5=R(&%qHU^s2s{=#(L +%&ebHy%J_-BqS6Uu@P&bJpdDhXVojC`3v{m!UlEvgsi>;P;LE7+>L%``oMHf6dy1ZMEb(T$$b=;a>C~ +45bMS%fpuGgz&I%-AHJZbBgE&`Pr&eKdiP|LY%Npot@Z_Nar-IL}J?q102wG%j&szSyQv}=>+FoxhJQ +7!A)wPaam6Zksyf8rd@X_J_4{GTAd$IJT>59cOqSNR=?caeLt2tQvFMN>&nM|8TNsidJcdsD^ie(6_R +yA1q$c|wuNZ$9v|SJeG7V||nNNR?{@xTRX;+PYp*`#)3Zkt)J7MT4S2E^jq>3z@GGbV%60xSDY)44*V +F^I6K=T{w>-d)(!1RyL83>cf$}7r76P=a072ymw=~b9t_ZaIW{sIHZZ-zY@IU)h+{Xa2&s9OR!F}^lr ++4i|jh@SFWp`CAw?vBETzbnqlSj#d86=~PgF=e0U{{~<6j^tmPDvp0z4} +>8@^x`|e^>4f}FIdjJcPqShO{51G=z)PRQMQ3hI8&26;|-e4D|y8nhvBC;Me>mE*4>czn)6e6yz>e(C +m7ahV4faG0S(AasTI`_*sQ|@%lB-eAbWUE%Ib6lSn&<-U%0c6YWr +6xS4qeY)UT@T)w+FL(87SvxMheqVf=lpFV6I=@#=70r)QY4qk6~n4GhYd+7{3kEBNLF=0=dQAsJuTH4OeXPTZa?0iKm +Arc5t!aK!(8#j5FA+DP8%OUVbL^V^NkcPWQ_Efw^1k~qbfD?HZ*4F0Pdzj@6q*~~>-V-XFKo{rcp#G| +JsFAg4C<{S|+KQr^r71~4(?e~9_D0&*OM(y}}7wz-xtcIM!djxq_C#nB=?;vxRIUsv#qJD<8y`8z`q& +$r=U!Q8+i{KmqZRnBbu{O1?o4i4iIJFRK?f_qI6CD*hAV1mi7I}}mB&}@-CN)(!ZqA&$;To~ZB7LbvL +yJTBHaU1F?`mcFo8JxZID>VeZ@_8BQXDSbXgBPCz@s-X_Zr{d{_?1t$`42#(Ku^Q-|)NWM~lA?I`6HP +ACJtN=k>y=~LMYta5O^u?SuyvHx8nsO)gmKy# +a;{Tt|xRbQb%eXv~RXl@|k59UjXB^>~%UA=$p85g6coEA?Q!%_sa-DZlP6`h1!g-?AF;{ghzhB-|@ut +<`&voNG0iU$KW_nT1x09B9KT#aG19EM(rcw7+%)DM4BY8FcI>*3veEV-BAGnvgwFfabsk3+yeEs8{*; +k;wlq9i<@n_BV|1IwXMP&`(bu(?EwcS$wqW>{-XYB_6PCLZvca|1`r%ul>Y?*kU$9y$}g=}k&VT1A*c +y4^Bt%F^bNszLHS%!R~Sw=VPBjWqbkM;YaEX%w#e|aeq7j5lJN^buY*HRNbfLA@`g0kJ6*^EtJvO8}O +nQ{Y&cZd@jCaVox+B>7l#P#$8D=52uW)37pIq3CbqghB955qG*1CSj_$?3>tY9Jkt@-w4WL|F3JGcZtNw(mb#TfO`i8fo@0O+9T5F3x08;7!m2OB0oj%$C4h`GVd4baw6*$5ifBTLO5qHYsxi7#lveZYuWz=|`f9WBwNA)UrlDWM^K)RW&=yo1Om83 +EEtK@`Y;qbM4q4i=B^5=)f6$D787YmGx*_S3O*H$hleMNuL(Xxty{E=(OrLbxgmF;O$y6Mdc4PXL+ZV +T6f%<;vJN6v-FMZy9~eApnpD3#P4BkVjcNy#!Fj@^1M^`OJ1Auy{P2fWU5=_2LU_gKfGpD?arW0Js04 +aV`4n7r_*+S(U!5OTKFENf;sYCOg1U!BvlAVV|N?jLoOnqCyFacxd7@0F@FUGboLBX{bV>@mYA-0){HeX8?ffr=l3_ +awZ^-}vI7{g)kceyz)wBMxJ{8q->GRELE#*nI|N?YQ$QD=d%MsL}lY(L(p|F-uJ){euPW6+LqQO^=wS +M}Ro&DLt4W$kzi--C_JHDeoOyq<^e)erp!#D2M ++US*!Gcb$aP%VxfJRF>cSQyq)~M$cRa_K-yl2z##TE@vO$!3ykH%_lz&Z{T++bJPXIZqutN=_b_iiM1 +Pg54#<0-WHEeB-o;q`=U%pUGgrjB;8h-TicP_()JfsoNfYUwHR?_;yiVm(Ww}Era~}VnPS!)+IGv?aUmL7A&I(2Vjm7gio(9Mi_<^mnLx3C`97U1E13XxcW*qr!I>^p1Mt66O;F-&_5h +$|olG679QU@`*9$Iqw*%FGli-RcoF(FDEH|7Iie#1Id_@sfG<`nyBx$$e5DbEIE|pco#O+f8qdW=UP! +feIRJPTYlFxA9(@!+z&XL&wIp3y~C)dH;Dr3(cZD5-Ua;u+8;1an9#oVbI0(?Lj&NssMA@Rr@u2`6~! +r*zJr9l?OFYS0qghMA?LJmj-R0ot=5vgC{LtUYBuKsfZ3$o|8coZY)il6V%4D#&Z*FLd)^lTXS-$9<+ +&PokOt44XRYhAJ3(8{CaZp^xi +Mg7u`?lJhE%+nvTWZES0}M;a3p_n(@p}BFu1Q>SCGdjlounm~qtAo6Ie%_X1nv%?jcUf2ysdgCZF=5> +%>J5nme&qCSeCJ{e7$BbcYqcyWeg?j`Y(2CPG`xpT762hNV6pY$3V|`elY)EA-)}cPOHa$to#kyd?ra +O?gU+?uX+piwO!`Ybk?n9yeIVgx!aT-AMH^}jQ2sjx80^_B6VFhEy1x*OLRD9{W&`~=P%idKz9dGruM +e0cJi!Y`^3$`ay>vB)zD3Pfb~vbZ*p!Wx8?3sF)CB*7-yB=&jHRn+vU9;o_~Vh^HVK>A&({S3VG}20J +rD!1uS%?mpmZmw~VSw$b>y920P`xXOc>oEs&Jd6>)53nmCuR{5mIXa`@w#a}F$78~iFsU}+$@!Nxw7Ar}yq)wqtS$prj%HMALMBl@|g4~-f(q;U;oZjpf(3azPe;#Mv!rSt963;Aa?mZM7v<9{ +&i=Ms}Hs8{ZCZB?=T-lFuPyQm@R>(UQ%(*4)r`g0O;#b+FV3PR%GECNdFqm`!CQso1wZ$qfay4M_mqX +#UY@CVf4$+oqKK9uBK-tY=@{e+c=5^iM)sc;}`L;&ulE4&^&)gZk*lQ&n;7gl-n$4W-^pDEh^9kQvyR +FrP@k)nYeAfiMcOjR^393KZm%R4n7C-^I(tj +KL0rCEW{q-yDXIDx_=*iaQ;r4%4kwBFE{y5C)$V0ESEGJt25`h;fs6#)AdXNjB7S`A7u3NDw+Z8 +knD;jhMPirdMZtM)C@g*K`%*>a%c+q$MdsrgcRtThrpEu_ClUie;1-_;(Ld+4{JIV8@_#%N&bJ%?f8@ +HhZ1VTV(${AbZ%Chhku37Rdh0iKCP4-{4BlxE@OScmitbv(CSy)!5#I4Nrlpx$S0{o2lcyq|sR*LS{=AkxAjv94v!uR83d*S5BNB5A4@JfIzW;`me%% +DeUIoo~<61LO~bPuvjDhQpQDT2w!MDXO0>QT=qua*2WC_`mG7ukU1=3-SJ1@~x=PcCNh`E|B#>|7bUP +SWBqeG8C@lUN`som^DOuPd_+%4S)X2aNF>~$QtfE7+FKokpbFwI&~S(y4Y$f54|2PIGYT)5c|e{*X2v +Rsb6$Hoa89qZ3k{Ez1dt;hte__3rFPk~ls8noh1qi98DU4N3=k1vrA0j)TP_UFXVitmo16`3E3R`h=Rzd*^`pLn!l5dYVJR#4t0tZMO%vgbL2UQ9IT#dKSQUNnPVa1Hm~8$~P3^+S +8RwvJxEjiCSU9EhynBX~XsoFSf&cLEPNLMzT&Y~@*RgbQpVbmCTLd9tIt^+&6p?W|DX_?`j^{$eKR%R$KMUNodLb`h7{_Azph(+< +-6E|TW8=7j9zArNwyudH&?AQCQ8uIw;r<6YvmF+PGdNS`+&fTG>K&xMA@91D_Iz!sw0kbV?`Gi2TYwp +4{K=oQji$5DI>fE<>Fk8a94+J18I#UlY8^_W*5U6L!fhN&s@7C7XcgZ7w7AL-V-LTP)tUVU=3Bkyv5q +k0g%tF?VU2Z38F0>?`Wa_kqP@I!k4P)KOt@O{o;)V?%WsIzZ1R}Zi>@xB56dp_mHpUjT^84Vw&$58PU +T@8bN95gyEK=CN&opU^EVe$Z%q1eI=M4DxK39&WtIzHW3q~GA6|Eruj|1}+w;Y~J24=&JwxylJO4T4&DqmrdzQE&#_X&AhTtZ2@dSN6nlsKgHO8gtpH= +ui8tLc2=&zwSdn%&nx{n`*`Ger4N52>fXd*6PuE4@$3QrIO5aZCv(EN{L3-kNG{9lJEw!@R$rqtmt2K +gbCyHK^~qeyGngMh)O)c`wdo@8S?qD<(!_YZU1!vNFLP(@vbgJl3wASxRq+h&1siBL=*q%~Z{oNylZ< +>IC!LzzSKY4{w+vr9Vh3DsK-o$3zZZ_mdpSBs=ybzoM*7Jt5Wcl%RJ +iKk>!(y`fmU}|^&w{Ubv`O7(Z?i2+8j0m)=B1T!_hpP9#yhjB_;SnD9f^#gPo2cfQkgrBV~+TK?j03B +C^l|`nQPVmeDqp+q-|r)^AVfk@!&>#_D>V`Q8{aQKa~D_rh%s8x9M`>3SCs+80RJ4T>dzccQ^ +7bfOn{ye(88y5%@2P1OGjLeSi2fCvrUa|MssR9{%P3AHqK~2L7Kn;r~goZ?nV*0(>b +%M+%KK*jIcoyWuSD-77-O@{cb(z?*cO#ngK@6-Ugg2g^cQSVIplf(d)kwZ&V%jpzJ@YKLGKuIzTZ08O +M935UI@4GOl-Bd>Z;dxTz0_Mn+hI)`g-mEVeef4qAK40@i_~~0$vcjAYNE+i74JRyx}5VKoJp8u}oNC +k=13v-9^E)&~Bt%G_A}^vHJEUyHROj-!jZDc&QYvOieMVFs-nxuu^`{GxN;Z-6L4(2s_c4!<{2+-!?tk2)0OT +%SPyLzkP%I{$=+*_E_>??O`^5oA{>f66BQ=_pH{5Z<>}L6KgDw(jI2GmT)8OVTS8XQvL8u13X{7!**3 +CCUnC63XRYYcIn(P0{7dNI>&q~zRw*6?~>KGdFuRE`VJv|e~$Isb1m`M_4izRO()J^5PPhVKBRAV(5D +RY!RTeY>{)Nz_hiF;dAdftc|`OVP%ic}hAW3ZwGn)_x=yD!%w#ty|@oVn{~zAs8i4ZiO)wz?+%V!K^AHMpmv*th+`8oqY>GH?GC+S^JA +^=RAiEOcB4BY2%W&s4WVe-C6~`^C>o2U)z$*P&fJ_c6R)`*mv>wqNaV|3SX5(`B&T@9^HR2Xy-LBiDB +WZ+yi4tzY&R`Ly(E(~f!Yo1kYGagICO8}b***dJiu5KE`Wf9b7X|I3f;Ih>Eb5!)uO&;x#cpKa#n4fJ +FeI#R`+N#dJLdA5eZYr7%O|@rJ7L; +y3FTATB&dB;Bh6k86<Zn+Hx^0DgnPg@<>C-HL|4M>0Uzb1h1C$zE)O;W@Y^y8~hA< +{KEYPpU3ro!j>KQx4GA|`$u4FTw^3{AO1J|!^`Zt-=Gfe)O9+5`)lL5Il1ZDFdfw}FW@&*pqH0Urm5q +0++z#VWYu+SF-^FK*T$d?o3Whjhd#<50Y<*>G47Z98^qlNamOq4jJ!n~e`g+l)zzjEcvc?QnTHAGXH; +LSukc?B{xKduuiyjc=Ng}@*M%Oy_mBe+Cf%zu|F&`&)Cb%b<5qYczj-%n#QJca_Zvdaqpmtg=kH*%(V +#QBVVEMfFt53VL7ADj=PSfN5cfoa@Mw#jz1ZRNbJ=s?|L`C1PC4MKrZ?V%K0^_d@7_&v-+0kx!F&Hsc +&FJJBld1e#`NO4$UX4O0(V^Fh-)=_DdPUugRXYrm4mJ^1+4#|)An=F9)Abz2t3OU+>Y;pxYojQJ}MXT +r5yVJm{*WL_$`;}&V;)K;+%$ScYr?);=Ud0&L2%XQO-90y^XRq4C)f|FG)U&>&!u)nuD(X_x*5hg!_| +j;|~+Jial0wyc)mr^jm4%FkuzDI1$IY%aKVNfm2V38FtLuEZjn9aE{=~Qs?z +@TaE$aSVd`~xAceu&T?kNYwnL<6le@au+4n7tG`k%pXFW@<7eyQov3&F$-UE#jO!**~7_(Ld(jibU}BL)1V1 +UhN-4{rAT6#)B6Jd$abzWg9}>`@L}vBe^L@wjpI*Q3cr-xUckHP4#oh$ns{B3QUp)8l#eP_q2wW#LxJLBFX8W-bqjgE6Mge_C*J<%VJxi +U`OkYkLK8(T_`m&LDeqQ;%u`hc6mgf7S&wqOTzUUDzw!>4mj+%a^(C@dyqF*Zab`bs6U^;KQGk#k%Qr +hN$I{Kc&3)doFyZ3L@A-?Z^i+#}{heThL_dOv!6SrKyPlNVFo8rD`?(yL~493?DDs(LnWzu=QT5UKbJwS9Gy3p-s5)&w^(EimdZe +Du@%pVlGu(K&cDifdhhNUdjJ^bJI3|GaNfP7QK=Hj%hwZCALEF%o^$>RDCvxw$1J|5OBJ&x);rBb>dU +m|GU+nXb?-uyYc`lxL-DdJ-KYn(#PL78rqfXa+FVM_>qZ>g!+PnN{)1$a=z6`&Rc$BpbVHlCUCuG^aaSGNiT*l*zt7%pdKAZDQTCbd#D0Ak4#SjR#l68rIP8PrH}=>b +eX`$k58CF=Yf;bW=*^0up~5rGMtqeb&WXh`T>);mpI&WmV==a4IPUjX=j2=x`v=uvS-`ew@By(mCblz +jY&-(o@H@W^I(DGS58iX2Pg8<>ZRyy>8LjZlN}TgqU32nd@k~LxK2GVu=e)w!C8N9x?=?Modn@BbKX^ +aHv4vjSHiS~2IpXCX=sRjC*CD`nylXgs?ifcN?nw*b(68?44WZAFU)=w7*?#)2w4?Y&Z{>dREg#x(`F +`9x5cd{>_8N4<{kHJ?#r^Mzy;D(NETg!#>qt}6>!J<{eZJpM-;?Ta?6G6S)NlFxaf5!FPW_I|aJ6Zq$ +t^x!4mIB>&fG8dFPuxdh&Vd)IF9a@b)cp3JCR3KPl&!qE_LW^qoHT!F{KrZk!3vn)3?Vbvw4DzFRlX!f|51u0dgn7hn5~Yjd% +`o7<*aP}nNrW|ixY+jkEN+vBz5j4!;Sfm=Nj{Tk?(O%I2DB(Ap{pal4T@6|d2*D)uwH;!)8ouy32{m? +Jdo;7}KN!epD%lG==dVto8S99un{+!|d%^xbt0i09)0NzQz^=9jqPU#BnRek?v{;d+;@ALdt37=y(KjG>pYxh5|^->~YidqN3JAwZ>9SgxRZY=k>m$p1> +bTrmw=#%W*=W74%+$Y{yd_`NeV+i@dx*mz`0i%72X$+X7VaY9t(a?UpD@P>6;Ax?*#W)^nbOf2KT1;;Y!mR)d4IGzx~(;6yvLgX +GdV5tw;O7j2_MaHosd`L5~8UPr`3E{2m&xq(`Y2=(sZDp$%Q_J;o{vx2zv~YmedxM~~(HD|#I9XY->1 +ihFdNnHshO?q5$%3+o8@^NDF;jo%f9g+ln`fR#Opr{5AbZ{dQl4EW(W8G2o9&1vW#SMJakM!k3qVeEjn5QRQ-|d$S^&dAE1N|YaeLsQN1(o$jVl1zE#l&+y-=mlG$V5?Ikt!V6* +VZgx3N=&c4geBLkFn(=Aup&BE`PqQFlZML8VD+bCsyp})OHP;uU$adggLhcSgcl6*kcoLOPBfi8jHW1 +)^7PM}?H2lz?68gy=E#(}VZVB_`A+|3Js!=O7xr63VUN)CIbms-)~s8?k}<8*7liRWuW|nZx +aKspuR^-IQO6pZZmAwoGH${*sk7nQIbr0(OTuq_t~?s~MF&ny*gET?Z}0fb2}eJ8^RdSsyLSTL{D2+u +60~H(sReg)_n4_)jGYMn=FS#!fLS|n&^Hst6_5OJ^zXK4<{iS%7SK-``>B8JhU9jN|Frs*ZBu-ePC@l +P{&xH}Fic6}dtZbp8DbA^rC^C)MoIDy!S{w@`_a}QzRzoG6y+G#Z#5|)c0Z`+-zlAg&UxJ%iffehxK; +$^dX1@|2e5v +YGS=>LP4KH{_zX7_`5_A5Qqc=21414?%_-kB8dM@lzvdyvO5jpC?Ysq={Apu&QT?OR94`snT5DM;@fL +U!>cyXeU-t(W+Pl+}D4d@pZTee`AgTUejKGJe)FyhGKrVPQdSS&yK0tb33z>lW0Cbqzw>MXQW`;5-v!$ECCfiZZ0JaM7+ReDuCZGiRHQuN_E2Y9hGy%Mm-pLI*|3oNOb&gI>^8Ff +RQ!G>J7I99^-23u}N-PQoMaKCGWZi-7c)TuwkpV8FRgz>|(Ydd~-iT%iG=nsZ5*ypGywLDl)E4x*Vowuh5?0huEI>>v^AszO|R{`PsPs5$-d2|FE3*e>1LnU*_Lr)42ui?J#~j#IAts* +6fvXCi~N_^Ubg6pSqoEAl^B2ywAQ2@S8*)GN$I&Bwwriruku-~=8o8DL4`eV2+{vO-|{%T9Q +O!(~Inr^8d>QM_e5bp-p>ZA7anmIpBzrs7kAL>(_(tTJM>ujH{l!oRiJ>b5ReG#5pri8(LM{;Ly-+|o +QzA*mxT;udgv#z2=}(M)~ +j8_E_l|T^BNctp)mh)rL}*eg6$MrY=C}ZHQ3BQ5B2Lj?6j&!C%BjTbsTnD)w=`SGjeYa_iea)wND7y? +b`N8*v+5p=1+F>8-_MJ?W4D!16!fIdd1J*2zu$EJ%IG__F!$3tN$0~rT1!X{Tse-y%xlR@Ez<^7BXrF +GmgS<^q+x#jbnMYApG9^Qx*vBaifgjzJ=I?fcqxy9v0-w-Syy}HmZ;rMlon7)^lEupq+q +mUm>O|skx84bq&JtOgVnyzIN%#t^e{I7wye1*Y{&rQ0FHf6Z?}F>seZD0J{=y%;?cb=U3wx4+9&}Uhx +rPoTybqCd5~uTet=HKosYMb&6>4Wmnz;8`VNT?;U@}ZH;3{{QQWqAh$gmUVjJM^>uHyz7G0;XT3T{h& +?=UEr7DVKlEYQ+hQCj9QRCx-^IPgJk+7#Xv5@_gO>g*78DLCEv!9|3LAaFl`PmY0zo;N4fG32a$LHWO~$$t}>$tp +~Yc`W3gtk!IfR?Y3p?(ehu@ +~~{p$P}-&YRm8$TC?`}bM&s=u&74dQU0MX%wzDE3j~`93x{whsP&$>nk%f&Ny~EaTf1I`%fMeVWzZc; +yuxw4KeIZ42#q)r0VZcloOI@OuD$>)@xJSK=-9Ce-W2`8D-$|Ni@8&Jbn43-{qPf9O8mDWA8vpL_)M4 +SD-S&(^k3Zq9l2jEGd)uIazRctnps#c$2?(3kXs_S>TP?e~Ll_>L^!5BygeH%wR9_5p74WIU?;amHP^ +rry6Qd~JMxV{t+oT&L^57S9uccYzW92DUyP+Lj5%{^xPcHqQgxCmiru{;U<>6|ge4e%dy+{%LWRR833 +gkdA0-swmO1^|+sN2F;Vbd?;&y2;-#jh1}FMM +7J(zU%*qziP$?>=!(H*To07{?vLBK1q;zAo<_#+8*rHngs=1Sn<#zUC50EO4WFM>+UJ7S;<4CeXBRO-)u-6=5I)hkJcx`yTErir +V-!1>NxgQ;-W(m{ouYop2Mt*x-lH`D5Fi>TIfG_Xx*^#p>>M!N}ON!6gGY)kRf;21v-IL)r0KyK2urq)r06him1hye<6t*M0=l;$3tx5#wIvr%)> +sylCUkR9wW2AA4GAq1iHSq(~e07g^AH<7!S_^UWaek_&SZ)+3KlOqC`DMrc?<_mn|A}R1mRP^f*CHgs +y&t6!%g;HlkQ;|XxsqwcvV!@6dC~rX;WjKc7$5362;{d>{J$FrWeC&0U6XdGpY5%9wj$ZR+O1p+__HZ +B64$3fUCwAzx)%4cZv%FD1?&qIHpdPOz&H~$E_&Bf~rVG;q_SoUqOx|I>Ss>pAfZY};Rio2a^<12xY~76IB; +CL+;`*p}(e53LQDI6?zJ~$sslB?XX{R1&I%5}|LYKCI%yAc@w56jE3v5>~+4!Pm4_j~ds~Ug7D`0ybq}8^Ht?&52DBBRoKhSyojc`9r +Q4Xg94T0aT9&aSB>rt6FG^`?V7}x>R9`40f*~PuBz@O5 +5n#z1!c{>u*Keob_i*Z4{-2w7S$>tScf9%Iy@M^QY0q${5a-ED1_!po~t^;>3?#FL?V1OY}ugNdHXMS +xcfjBY$Wxa6s8?Nzd0lx-FC+aW_o+XQWvh{e@Xl_SWe&TwhHMqwb&~$}eto170?0P;nUai2lk4Ccee7*#$C^2`M +`bi6|rxAE`8UA-?X(>_swtZxoMcPPfwDTwP}W7hdHHbevWZJx=sjqTcC(b|M-5|KOkC1^iQH~GX)JLdIQlhMB|7qAX-3lHPJ_imJ_Wc`T@}zqNj+q$`Uk)sDbDpqESS +r5uH!eO7u3OYlvFbm*@(j4-u7DBIVZtqRtFYe*Fk$RNQd&AWt +l>#z^5_L43m$LF>0FoCZ!*nhh7eOZY2$QSj5IHZNa$1uoZ#_=uK_^9)yTT*%WCE+OnoxKzX6MA(mTIb +naol^R@4xHaKpn(%dmTM=&1@YxAZ9C*T0zmOB2@r4r(ARMI$Kk^pGH`QnNL{eeuf5TY +y9VG_*M-r(BPsIp7y>|!!OmyzfZ$or@omAtgD+_8)u6$bH2xbk_)iUHCpG0=gAFG=%V+pW&+-yQxC7xN4L^f +$5aA-i-3V_Y+?{ZxhJQ@MZ`ANZz7)7OVI$#C89!kI;Znk3gv$xvK=_a*d;{Tj(q5-L?d?t2N80a{r+> +pKPyHsH@@#*SPI=lpgK%5I1*bgqS$E1a{S}1!N_!FRBlSJ)$qy$yfN$?u9m!)w0lL&gNKhF(C${8nHX2($ +ujB7i>tev$AS48Oh@4g!q>0XM+?3ivI6U&hiLrzz8F?nnA(EX~wlG-5xN;VdpN=jTXgmSN2YhQZ-9IW +1X+g@q=2Hs@uaS!@ek{+42XgH^!25HqNsbm!S6%mo3oJ~Fb+Ii^CZ(~y;KlMF+aHQ!Na=elKJSukBEJ +jr(tZgC2m_w$IqS+>d->bE2X{aNhJLa;=(#Zh22WtsELHm4!aR3Ou7&NcjnDq4Tds^rGMu1XnM`31!- +84cqp%yt^=W@n+@#-&lT&ZKgb^8Wx+yX@Qnwx!G>W0dF#$l5cXFi!4re{oH +)Hm*eY3cTIV{zVGJj_!sg$>bo=7ZZ>7RReQBPGxX|Z@W5I5>852S3pJyv`?&GZqP(O+yJDDRc4XNt1# +Su&CSp2bttN-VjSJQ?gkQstvD;0>6p)iZy>}-IZqiH0LJ!Qrhqm>onoK>F3i7Wq*@;xl#AahyA?^b<#6ezrc&IdmOS4Ap6dG +=DNJd-OCNjaK0KneA%^^PD9=0H|O8|LVwb>t(w8jQSIeR;e4CH&C%xcYe`=%)`r)!=CAA7`|r5_@Ada +CS!S4qYTe!Y!P?8cKFhkJ4KK0I&E0+M#J#Sy)E?+tpzh(_FKvC)Yy7(Fr%jtXc5feKJ=ezV%bK^3dwI +NGJE7IR!dZw6oQx?a1XZ-%mFs4w$uALNgd9Xe0EQ-kF=g{)_CTqch>SQg7?c4mgZK`fiwfU($o` +()_9CfW0|%nk=*mAgI1yF=d5jMINBu)bc{2??kO7YCu*ql +lwUfq`SJcL&3r<=M(@&hJmoOLhjx3qh!pcYgo*a54HNAH+SZqBt|#h8)Sq|(ZoEzu7HK< +@8%Sto`7PW*Y^VvHoj*HuRG%J^R7XBp92qJ|#?Eg*V`sNqLJGl-TEttDz`AU@FwqJ +bC5ooEHoYNEA78;C~zB&Z22W?_-M{zS56aBl-DYf>cCBNKDNof9~D+{MaUo@K(6X0$*0(Eaz#lfQ!vT-q8OPdHIk|2mEj4*7DSN$lsP<02E^|1K$C1a=E(+^1;)7 +!~Ui`lws$t3q8UQ`P<=(!6ggy`1hp;!#lWZ4!B)w^}h-)TCa|M$qK{WYU*Mx%Le~jJ=`%S`K)f)e&|{NZu#IBC14H}^03#oNWwj9uCWx?B*0cdOW#^DdaxI>WHyg^Rr}n+}x+w&1QEz)$E*OvKE@P{!-lCeaSsu9 +hQr=!(Eoinqtm!TJmiWH(p-kFClh@sX*1r%^ios%!#Hvb83Ds@a}r +v6)c#46`#gpHCoU!5?&&*ld={rhtW_D18zSWusUEn+!OS#lus3CYuE4e=ox|f8pxiwY+Qp;vn~~_jhM +Af1W;8x&0}B^Upo}YPUb#-~5wd4gcNd|8KuaR;|9{&b#iur}W-6Ywx@Nfd|*Ee`v$ThaY)#(_@<-f8x +n4Tg$dR_4G6Uc=n&=&uxGHg%@9Xx#E>qU)!PtJt~N16=jH9w%2)5_A +JDo@+jfENgMvGB?9@4=OK8__-Ft)?diLtwr|%8@!uv-I7#KNd@Q|UyhL0FI>c*(iW5$jfA3ecn%FN0( +=Pb;%ELv>Mv*i~ou{)fFOP3WDFTZ*IEep~!TIS!nV&!eO|97YVzdQc_u>E5u#!i|%WolgfwCM>m5@#m +ON=`|gJ!fv(yqkpmTju|du>b#v7Ep2h{oTu>1yo#ry1)77Y60ET{ddx<{nIy-<{&PAh>APFpL9hOethB-X0he4#F#{8Gue=ar@()5ND +SP<9q^yT$d6B)q>h*&-(t(=*gRm!5YOH-=+h+P$tIdh)Jn8~sFP?B(G^7RB)X31CZgp;cMz>2dXVTLq +DP4yBYKi(Ezvrn^+YcaZ6JDyXk(KccM|JD^+Y=m?M76}??ZSX(Gf(AM3ac75zQs)Bw9qYgy=e=Ig`yW+2K9J4z!p}gZQTvT3JltLY87KU^BCvEHQs6n` +9QRR1l`nWG}{Wc76lb44gS<_%36&;Cmy;;4e=ghx0*Jp@Sy$L8jB3mua?>o*+LT5yau{jPa>BW(L@Kh +H#%TV{mr%;9{9fmJQcH!wk3#cvDHz8MqcVQvNp}GipHV-$Z%C~D=Wqd9-5ik1m^fwKVjr%vVOs#v>)LRX+OeUr2PnoN_!FRD(%&g+6QS5!ri65gnLN)5Dt_26E;Zu5bi1ML%5f;58>X +@K7{+o^b_tY(@*#YnSR3kWcmsBm+2=QA=6KIfJ{H(finG_sC^(DLU=IYaKgg~M-d)DIF9g0!fAv@5zZ +xiBjF;#QG`ngk0!i{@EF47gvS!DBpgk+n(zd|#|Rq<*AtE*+(`l0curJ|K!hVD|5%wosPPjGUO2VOptEIk#Yo$Jf8>Bw6gBD8q5Dp~ +lOV~izkMIz}{)CN$TN6$q97;HY@L0kHgca)GmB{!Buaof;E|c*Su8{E)u9EQ+J|yEOTr1-z+$iIx4x_ +#+$tN5_*q?AX;nsws2!|4mBRrOH24RIdlm${g;SwpI@H#1vaG8`xxKhe92wW}Y5k4m65w4fv2{+2{)W +Otuqws`72>TNbCp?yL6k&zF+=`Ro38%^Mgma~T>R=X0|Ab4Wf5Mxje;NQRm;MP?O8e(9fZz +4TAGQTnG2s=hn%35O6?#!>nupKz4q8!7#gPdH6t>X7D297pMwIDyhHF?Ap}5%yj|=_edYxRS7m-ib5$ +C;;PYW$=>krE&D;nnmxl*~HJLo~D`J?9F^sf$?z-ymFX@sF0sa{>3N?1FnOpc+X!%a`F8aFB{3V5iTH +HK>qFIZYO!U6pw@6ksWLa(WRU^X+*+F{tAg&ST?2KO#WqhL_AgsZzY^VdM>5(<U*Y@^AlA2s-^8WhSfy+i3O&kA9@l$@nl2|FC%Z{aM-j +J+3oqy4T^Q??J6_E7oT{cvtX`X<=36e;J6_d0kEe5nnob9|o2y)ibw)E(J1*w>PFKtMVxI2lYQ1pq)n +(Jw_zSrmW?y3mCy&=velmHwU3wLey(M1A)9u1e4c|%i!!>?r)1=d?!FCVq(8$Z<;b*8gi>Grclqji>) +gvE8JK~Zc+7m2s!g8WrL5ZS-Eg{QHBuk6cbFO^M35+qgXU_QA>PpR1gR)Fo;1Rn%)&JLX;wV!2JMCfm)$%8 +v*KwM5H%8T4*eOOWcfwAtd=z$yRrA3;o!9E`N~hE-iBcr=N>J;K&?`mNQ|Oi8riaZVUZK}ixAw>Gkzc +u#pDsP~pzq+yF%kbHwfuH$dZc*RVTN0}M7^Bs5l@oJ&m +sSEJkp`2^V)b!*Q7U9Ek9;WJ1XLtq^93pu4ldqxt{vZRNHkScbXe^@aMo}Rjw$>vSf(x^W4%a^4YVV# +=7YxS{~2vDQYQWCF`?>Vo8^(vL@FZzpeoLJgLj?2q&eKt_wB?RT +Xle_|ne~hq!@NvRJ2){zuNVtq}65$64XAu5`Z~@^@36~JAA-s<8bA-zX?~?iwevfb!;gf_95tjL0OZX +t+2Ey;i1V;*7O|VfjZxTrS#|eiMmNR*knt2@~@#O+#Igcl8oJ4%t|H~k}Qrd^`8!~;GdBIZR%W`>4Gc +UM___Dn&Cwz~zhi2ZelK8S5*K6hxtBL=VjF0eo>7TGHr;UVPBdi}J@bfZ0%{)#B@z)Y=(9Bzg6JO5DG +-~ECqlo`B;W)w{5l$og0^wZ3`v?~ieu!`>;Wwo{3BNDxNqC1$58=-B`IWO@i6AuQ)z +<-DwZu)v3=%`oF~sEzI< +-TdCo!7p2U|c3go=GoL4U;{zk%^2>*j{IpLQGR}z-b@oK`a6Fx@xEy8l%QO>j06TejIubH=PB)*(?l= +J#>-d{gdVELSq^SE+eIE46ee-AmYF6ZIHiT^U;D8jN|AlD7Zbp>(6m(NW(Pc1i$N+bRv!g5|+&co*pm +E&X-zh<365%J}`tz4HN*DaJ1|6#(L2+Q{wxo$xYo0k(`KBwh8xSU6?B)(kXBImi~H*wX(FCr}GoyQP9 +M*P);!gyp&wxvr&=`1cc*>lEa=3jJ__Z_euGLw- +U}JTrRO@olOz(<@>r^SJRnrDe+~$SgwHlkkT!{hD<~X~dr|(?{d@X9?#L|6Q3r!f#7^5q_3%1>wgC +%XLX|9aA;&H%t2vmiuwZbu`1JeTctY%Ga#JX(av{!gAe=T<4=7DR2p4xsFDz`w1cbDw!V5I;(KvFCZL +6*hW~ctCH)m;)tJ4Sg!jSDKYVB+C*JvWgwhO{7k}fot9kJRYd#@!g8GvO(U^V;%|}q5x$kMTxTWMWmO +WNwjX5Gg!2g>BP`eb)f4`Ta3kS$g!Q8Y-bOft@T=0Egttq35|-`DexjSy#g;*+h2jLYJNyu?1A$%`sJ(74}q6x_>OC^r#z=xz636IOYd@?e*8bnZ +M?hvj?`SJkUb5A7iHPh6_D#rmC-*z7scTaHa=dsKFLhKYo>p@zTIO`enM@4|&1=@Ii#7BxOGZlW+GZzd6)yNPCNU5SM;pp2k%##k{3!-Mg57a_8Hr-n!#lHGVPAnXASx=GjbY`4#hk7PTKD=0Pp0K +4PB3l|F$jYIzXr&=;xgwwOO#sM<@+cP&=y$6`&pBjcsW4YoNqs4h{*skG=`sRuA)bf`{y9r2r#JsRgEk9yj$W?v>wyF7PqxQq)-{H|76i|7!so2W +vhgHQ+F5m8f3simNyoziwB$hQ^Vp$`_JhffbN6b^()$-%e=p*KFT=hp_S9%0?sOcB;+72~8#JsY@Exe +dNkP;-866E}dJAaXeZ*$W~&L_C=5?=nTYJ9T(cs^I%-QAyu4tj1EH0xiud-`9hvCmSCJ(ltE?ZU+#Jp +-r4-cD){TsW6MUvgFK`8;t_zrwC!r$>H@dH+JyzgQJXXYScaKyXW3HeY*Yg_xBg +(RXa}Ry?EY^9bC5O52p1SqmJEnOjpMQS-hpi|1{I +amqTZfZhe&dh+_dl4iQ4BWrY`x}Rou7H&tc2vT!M +?Rc;$EOpg)tP!d_r>_Yac|py{(8N$Hq_Nfyqe>cC7a%$P*PZ=swF2D1 +^^L;l?pK;ckt%}_H$E8EPl9R&Qz47x;!E=KrmeHR*)@5E}x2T8MXB}Rlb#k`E`79z)!=L1kZ}w{qa*@Pfora--ZMKRkZOpU6 +r%zee9Noioy?0JlA2@7hj#Ww=*Y94`0@)_Sd|3*T>HKWZ%R6Wd;l|DoHwvfslSE`2oNAA`D-E&1%NdnQ>{Dz?jkPtFM~E_~)e#?HLDYg}RJ>J6PH +e6)DXj(bntvqe8;@{HWp&z`ulenX$r!54Ce^qaKfu^(bqy}oz9F74v1+%KN$yL9FKOA?_3W&iQb9XI{ +d?!~zq+wUx4IXn9sKB;;C^OboM{?Tp58y}r2c=Gu8m`-mb?mx6-Q*hnq>&6&oel_9w%lXS@-0;oI{(P +I5p|hX&t4VA9?139hbMCpL+oC;}?kQYaKWX46Q_Etu_~`dVw|cXzzWS4IXIK4x=G95cj}^BW`Z)U953 +jmhS@)7pM_*&+*yS^CdFJEcF<;Hh%WK#3r{QzHo)f&M@1vie55M#LBS)5vjqmYNWY|}|JLUcGl*P@g4}R|YZ`)2-jM&bGNPWnS2RZ?7M}{Nt(D>wY}b`KPyYhL@D?xG{QQ-EF?(dYfIzNFm +x?7(T3hu`VZzuS8sZm;?D*wPP29d14Q_=a^)ez>{(!1TT$OB>qwm6reJ3=A9dXZyIXUwj~IUf{O}9<8 +^0enYgqZpYo**WKJ}^zbJNeV0#Pe{O2zvdgy3-x>otz1R3q>%fNepW0jZ_MN!)^1dh62RL3{(d2ViWN +d|{a6sh1JLf(d_+!{1W?cT^*O`^|i%O3Le!c0V>i1{g8#w#*d54bf{v&PZ>PoLJlM}o~@0-!(1@?Z}S +5*nc+e-G0JskPUxyD|33pU>yb?dP%#UI<3eo(Y^*Vn~~UK{Ha(bjA`cXYlre`Vd{-+nRn^0xfUWwS=C +{h)r{fKzFw#(k33G^JO^6?4ny6@Gg|%ED!xv)=gTe7gUYvzF2I!$+3+l;5*!=&!Nu!g`*Fz3JE^zjS^ +6sV)<8alS75>dM`Nz4uM8`2LqO#}l_b=s4k5_rwn~7q;2j@wv}-?)tr@San>qC3t#{qmahuYXy#cK^3e-<&+yYy8Y_C-QlTz%MT)`%S*(%)}ip4I1&<)A>(-G{ +Lq!e8+Fg_DnxiU9+&ZvHYclWB0xI+MH@@z>`lt%=X0HJbumYX_rQQkvyaR#FF=WcDwAiYVx#2$F_gIB +H@hwiGMs^$V$i6i7`FnLq`KIdhfPphqT@^>YhKIFY3_$Gh`vz1ksZ`~A<4{%+!kM;?9d^l9blk)LZybj4*j2cbOvMAF3@@8D-=>^} +4P^Zqlx&%E!}3%fq;3#i*LxwR}8RuWR5~71_@6&{_8-fh?!Eh&)i*zNaIiga`+9VT80JvgQD%cyT^?(wyBKCBD9dU0p;OV97xoBxBp+ivj +?HEw^`xax~#jRVJjerCz0!QX!Bmo>}&WtZ}or`#0r*~ce!5m&#Q^6~wBg8RK#)BBAs|MGrsz`<5;>_7 +j?)RWWwp4_iH`Thg5z8P9FXYT{$X@f^h?BTt(!`JUz4gRyqr(JQ@!YiXb%~_gsW>+Ro2Ae7thWaZtRc +Cw-jdcW_m@sJT(_cOLs_CnfSrKn}->~uVPYX_f}4{WqmR +C;LSTnp1T@sHO+c2^u(JF?|d@x;?A70-3=(pV#Mb)Lh@Wk4meSg1D`soXMZi@c+;LCRvObC1ONM2-p>yVY5^EX-+oEi8)cHHP~54W#vHz +I9Z=N%h=jqCUJ+#6O5I=;5BY+cFN;MY$?u8aF5?>6tcK99-CCUNN?E4`o}0>F31UjC5TdFe+oFTZH!zGfwt*lkMmsqR7-K58J`}~KTe^c^4j`#h%pX1*iJV5$?X$bdbB-Io=3^Xhocaal_ +x_pFk_%59=W>6Wbb{j<=Q*wV?ZK1W{pzqUdALPKIWipZ6(wP#qN^9`HtlibMsN9`bnDF@EQo$=@WIr9y0qvaDM4 +eF@6C+fu)<+^alR?~++DA}vZ(Kj=%5e&<5~4Q^fBnzFWm(Zn{T7!#`;Cd@ERIf|{q&j#=Pr)^bJxpDsz;lmvp-gRk +9=y5p4jv7t8aaq7oFWHanl0@dC{W=e|T=PWp?!Oo9lyr{mKyiYoC5QYTpAX(J9f7%uO_&?q-c%ka^sH`$l8*g|k;4Nr<#Xk9hF8bDv(yjNU!}pl#p6?C6^=j6Y;7utkqLwR +++^yB9`JC^{ed%DtJ@3}4!bF!in^l`tu_*H83@_p6wz +rHVt>@XzyoqoE1MOWlSZ>o5r;^sF@(Y;RZdcISBd~{~Fn8$v8%^W>D<=1)9i_@ZmUO4mJz_{e-am6El +9R0g3+M2&`D7GKCf)Lk2;y#BshdhP9)8aURf#H4+cD^g9fxmeh_#1B_?T?DwG2qr0-a^$~3)mEs(_}T +6?RGq}#AdLX3T;`rX8RaJUkCSOrxE5UCX3aaZE)rr@(av1gSp6@RmhLDAvv>c{CpeW=U8mn29wQTDgc +k!5C(Tcu`D$Y()i;ipyb%|^B{x})4M0*D@5_@fXOV4&k4(U>S_6zpkGeDJ&$h$X;@Ndwin~MMLArtYx +oYc)9J=$4rewbFT1e7YRM8lBu8Ap&o6Yg>;d>-r0WQfb^vRez-GA1u7U5^Vc?_MW+wJ{HE4FwHSjTZv +Hz`s^@H580`5mSWmU&FUG`sSb{hDRH(B}FWy+ks~CSO)Wv`=u&>a#4Xf +%PAy_oCCRec_z4n+(Qe3+4>EF{O*T$j$Cu52^_5!n;FW8)zPAyWw{ooIR3?8%5j?QhJJ$!9rnSQ7TaL +6ZD~IlSW|9XRdBkscz +8-`O7TMTr4UMr^)W-{P&`D%SWDG^3#m{WcozCbeDCFy|c}{D7gDE6gp6~*{M?^qngj3e!ctQX+S&`Sc +)_;T!*%uaKhC2-5=B3cmSaJ;JyaH!&|G$ne6N(xYCKK*?Yr@m9s +4#P*G6D64qqW~-BrnS9dufB9y}a}!!;%+fp=2F!?jt@fKvnT8isqG +!yBcr|C*~n%u{Qx%9`f)?^mz?Dt-QwuJYSF)0LbuDJA#2rT;vapd{Rt(dzKazXZ-je(ad}vmIu;WBwe +dM8)%y?D=?Fm1Dlcg2z{-%jewunB*CwM$At(Tg@hidA@Vhh)9z?Z%{$DoL4=7l45N<`d!5XWCtRG~_h9_Bg4=9`kUE=V5C#Zs=IAal>`r4d52ya^p+E^+!DX@i+oK+>&@4Ax9LxmXF-{vZioPe +`)A(h^HHu7vYM4gD2y9s|);MM>Ydr*;xx8i0UUq?xK$d>>f1Gf;D8($XG0B&x1&6mF5Iq?%)scvGqS^>lfy{th +(Jf3~cN1C)_(!>Rhdry$5WWO5@Kqh?sk+H!iGTa*$TE7JS#|d8*+Z)%>Q>=@XU} +$LWfACh*t;4X1pzOitfI>qp!d{Ol_>Yron2Q6WxA=U$<5v9?*1^S_mys9)y7_RXTOJ{a>iKY+y}yL0A +a0|QSZZytgeo)?bV;TqmD%~V_-PAomq8M!T54nQs8{VcN|*X2OJ7U)0rKEahZHu0U!KkqrmNH8*r>ja+uS&$Ei-z3pTFisTmS-W?$*PR@HY_>+Ti#R}T3X25Al8_IIUqosqG(;CEk@XodAWeZqc&A-~ +#a@(X>Hf-+_Bdx64$AH6??>E28nfzuf4Hq8}BDfk~t_MgUv1fDqrdfp}UtOh;DHskgs=u!q@weI7Z@t +et#LU8@@8DW8Yu*>cl+I_M3*TGHDO^lnAz)cUQ4^c|h%@;j^>Tw7V+oJA>=q6FMsT}Td(@v1n;~xadG8Va8sJ|4xC`IG%fq$l^? +V)7BxtGr+G8rLQL|2t0FFwTF!IO2#h1&q{u@`Bn5L)bBT4GPL|E;2m`1w_$;5I;5XNRnSgUiF>52vE7 +5hF#yuZ?YT;{j#F4c$eBB8d=GP*g{yJA^)X|O@LNZ5B(~u1!e{Ud{@mp+2-B<4rQ{SmFX2}~enz67J3 +MW&t{&u^1HH-5P)(Y1f!BD>Rffl+jJ2LJMtsLu9sC+dMhK6`Qmn(oqvv#$~Y8WmmoiYxq&WL;vJ=7r&c^UkbeU +-1uP{ekI6eZv0`qZ4_<$15khX^XRU9l*4Dwj%OK=m(}m0-uYNh4_{kPZ&zjXs>|j64|`!s?+1A$+)l3 +gm+fs<2bZ=`2EzG!`D6&CSp5Pt-C|UcMRO7@i-1~ot|kyr(sZcBb%wa-UAhu4ZkSLOL*P~4&X +Y9a&!l87d_*f(@a^tuP^9#gQD8;eMna&kI$9XgWy)h%azNXqai+Dw>EN&2G0S#`-m`VTZe7v{0Rzs3x +2ZxoP_&zMi(BWJ_|j=-8UZE@bNBx$Kbxf4MUz9&eZtJr}0{u?oE*HuJEkvO!=yo&*=(t!Y}RJmh1YRi +3;?C6;?!kHbegQ745P|+kyHWOj6j2Sr8xjZJn$zL$V8Z(3Ib!Ah#jWW%o#JyP2Y}OYoC*wWYT0&s(4j +EKt-o>)>_lFhXgWm)Ju2OW@_!^EsM+oj688{d8;WQAlTdcnxjh%(g!1-+ro1f +zw<+AsRW70J2@G_r8w|+jFJ0hrD*?AnH7yTjsThp3h4YN8v7ZYTN{(St;f6a9hcpG4bcP&`DBXA8QY=vzc9h?Wt(kNiJN^ev(_L@yB4 +nFKWu9Y%Bt(Nv<@L<@-CM)W?Sj}U!{=m$jWi2g~mZKj~1L~kHEhG-no1w;#ot|s~j(Q=}dL_Z)}L-Z8 +UR#}1u5j7AUL^O)%G@|o~T8Z99bPdrhL|-CWMRY&W&xn3Sv{A-S`7)5`6ryv8<`P{&^r385nZ+xS@@o +N6XND*LoOg=Z8Jll&@V`-Lm45Z<-PLj!)JC}W-Oh +wszpf$l_GtXsRbm&rOx0`M1(WW)%mg3A7G2<7IF%E}ip-rChmG2VIoalE(es-aipLT}Fgw18_bDy~;i +*ri8J;h>MXf>1PNM#aD%9u%Xz1NIFtJ5;E*lAA9pKHlB$L5;s>^Wr$Psj|2%(M{YnJ|_FlfyX~r@!!< +&sb}|LrOWyV(n%Ss;U)(r!cr5)>=3LYotEIrQ +56h|gv{++0(0aXt5II0(XQSb}ETa=F#ACl_Uz3$U<2D2 +(}#$aRz5Sy+HYX)Y^r<*l$Zq@u<<*=e0^TV}C=05%jQy5-9git7}+EsFa|bz2qp^XZ;cz2TK$HZ9d2S;ttq*Y(b`3sNSTt!C#n!RC1Rc}Yjd;KgKT+j*#Cnz|OldZV>4mZW?OCK`{~yDEI~A_zi3n}u96astUSQ8Lf +j;sP_9HJ43Cj$7NfL+3jF5 +OagEZBVug9l4l{iG?{iX1fCyLb-BzW}&m7(22T#Os$eg@eG;IDUgLwG-mMJMF4FNzfU%cj0+UnWzWnJ +<+r^kzpf(lzgIKYu%}K(J~n`{k8Uy4TK{R`ky1=ac`Z@U>S`ar6F%{6^=GH`4j#fBw +aMcnepVUC0k4y<-0=z<>A(Z1EC&LyOmcxoZEPTrD5$DflfPJo(?N_kZ>E|9ZL5T>qCB6Gi9k@rZl|o) +j6Yi&ys~{48xGwv9HtTD7(IPo&1%N;oYC|9hT3{)48pj6DG~qZ70RK=qyB4HIZBP%DmQhcH$IbO_K=ph-YC0WASq2GkG=Z33=Q>LJ!M74*QpjLs +^Ddf?m*=o=>7%ff^^Gca}ma4t}9NY5byj*I2!(x3sFr89e#_hzh(V)m-+gL|H3Dnt6>ylO4W1=a3jzJZ`3LJ8wJIAh;2HH +cgQ##jjLs8<8UuG2nVzQ{2Rv$z0!!T1L}nQssP$isZ*+>(Jm&%I6>%BIsw;&L%Jv69t>t(l992K;QtU +%vy!PqO@#JWIp@^~9mw~vd`w}ir&6y=n~LAA*D1J=r}ZqbYaH&OV^R$9xVK)WQVG-u?n9Pk|Dehox3X5*f3CIvT2yA#4U0IdMpn1 +*{>X6wr537Q6v&1`Tlnh*BXfnE!sd;mR^!B~HwwOP1VnMujb7Ivx4#<^L@A2XIKlQJX+;#X=}!$LtTE +R5{}TCiBqA$gEqU6!uA0PF>{!2#tP;>%qI82ZcVjv-|4(~g0#;SE_P;i0Vw2c#BO5%9kfa<-jhr|LDxef*8f9HT1)&^prgAtAx3J9 +cUT?^^G>-eJ9Kz5DE~nV# +o6J`ZVCfTsZ~lQ}Ms?+ZdCqQ8#56hSoLq{5891>g?2SsOMI2>AJXipeCJn{s94T-zg7v)*Wd?mAD`1%Px}SjgX8K|) +UVNQme*moIJUpecU@MATEIZqslN?&IUI6J7vdDJX9&>}_G!+hJwaaCwCkg89=UwSMvRsOxLiBz=9$lT +j2_l%@@X%it3bE+YCtpE^DKh?0Y(<{-LZ!>ABUntvpQj=Lwy@nGq2&hZ%1pTYxMqn*0P^ix74*fKCIO +OE<-#1Z@`}cMz4chdAuHLI6(V)zN_t^R<=PO2ak<>mt>VNmC(MbL^9wy+~>22&!B#z!Tx(%=vup01fEzZrp8GZut;fw5G=UUPhwjb?Qv4uJ8D)qu++PBwMosamfx<5(Ys`F8;V2l=0s{ +4n;Qk|X>K(B{kFQvNt61NG_7snNV^W2ZRN4zJ*v8#@{hwQ+7f%8c_b-S+I$!GPd)QesTeE=WEbxS$*a +*Ug2h3>yX0DpwP@c$I_xE*tk+ygm*5C6SF%)~7>h@;f +^Lz+i5+dHHs0+ylwkYmtOK+ogwYnaExckDmfE&4m^^=QrOd)^Pf`90s^6Qk7tnsHy!2_c%pzgmC5xZt +?#N80Tnx1^uof7s5?d9j#HFlv{rSB?|M6=Sx@W74kxSvoUR>mi#`kg27C)*&a08cieuifc8|-EFL!`FglK99uj!C9hP# +)1W7%wWj1+)0*d@H#caQ2M@VfZq!JZo6k)e>>2YFpz`-OYp~New;I5=!I$H2npj4@y)>~1;~w2c6E^m +HyCw<%{qNL7DPUP!P3+-u2Te441oqoe!(0LSJ85DXjy=6K_~jV462N~@UwkwXjq?#*zz<-luO@r|lke +7)KGg!Yquq7YgeT71{WQ#Xhul)TYoe1D>sES?ruq5`m_j|M%D)xee4Yj{@j*@bvl75{ +r1v3B#Vt0#O^nBeV|*S({|~c$=sn;x99thnJAfsRX~GUzJxUXs0pp+0gqhd>u8BxMbgA?r5)ku=o97r +!RPuhn+aH6!iqpikfFTK*_#FP%^d$74*|Dq2CMvyh^O;0`4`_*iX58mBnfeR<6ofyR!f`pQc})XdxbB +gpiH8C0i!>1o81aIp{A)bm&Dt0@>x()}T}*loXb~@gUyOgn5*fKLGW7i!9Xl@-zsW8F%MHE|5>+8vsTPa@VJ#AZ8d!GE)F +-6}R{D$cCls0j=yw2yd2-S0VI3MYRNlwV;zetaI?g`__=X0V*{ij)h|7*ovy@%8XOFX`oAyKGh7~dUkz4* +QsYVX~K^Bh5hFjnGWYPa$|CzvX&>OD`IuySJoF4)T7D44Z|?P%(ko*|8#SI-7Ea-JpWcN^aNiR32Er# +5lk-o*KmCeD{NalW#N^VN-<=l7IrHT`!l)h_B+yACm+%l)Pe@HH+wX=PjB1DjtsHgCuEP8W_VkKx$!! +m;&N+~4fNarJq(`gfPHL`XOIrH1tB?^!nq{r$h1X!iRXTuQfY-NfL*gT*6{JR%Yj62$cB({+Jat@vjZ +si~)-2v|Qtqf +Lmpjhl@&`Efz`;r2;&|pv9#@y|*s(($s}zz4{yQn_;?(t-vuZrP2eN$Mc|5b+qn7w_adrCfT;9Kiqx^mS#97t;e)g{)qkk!1EZ;%WaE|oVmH)CIM`w6l(L +cZLg&lP}&ae$0pMU7_P~1>A9_{0}`Q{IAx@+Z*aqmw+283+PYMCRLv@MhtovWocFon1vF9TqDrgKP~A~mpteG +7E2-z6PF=s8p7-d{LxhKii{ZnEi)WsB<{}+WNl6iTd3j>px^+s&_wL;*jvP5sujh&Ui5Aw9iH?meD2Z +nipOqWpwu-r1Pi~ESYLb`>5yfqla_-jeqM!*+&HdqY)CT-9_w^&Ar2H*z_J>DCj2N*sZfK8uz^JFfCO +;_U`Y1VPk@wb7BcjAynXz^K2)4Ir3EQ75<%zRr9YSgGvqH>i+g5tEXe))gvx-YpeALd$vfM9w73c=_lTp(?={AH&85oDo8Aw6ew0qv52?k^%jNJQ1RNl(PCq2qIm!1A)+GVDdDq4io4& +DqWk+&1ZTvqyaK#T +Vl1ufG;2k5r1?KS^=mzyYNf$BrEnr%oOhhklWwrlv-mJ$qK^3X7Yc5X~ZlxC%<+ks`#^(3@*u?AOD9P +4WiOPj(lhIsA9lg- +415dl9|Qh0;4cAwF7V$0{x0BG0{pmHEV=C@#0B47|NeO*f{v +7yz`q*!@IN&OW~Au`A^QXWao|4#{8xd$0r-1d@Wu5aLfitIZ6{KMFU+==D2L|PV5J~iKPF`NL?MSgC* +25_-&W0$G;8u{AO4H@E-#H7~szUelqZv13w%1>wy0b@XLY! +74W}v!S`^Ez|FwF4fySV-x>IK1HV7;BY{5|_=|y`4g9UZ|H1|T;u577*Hb}30|EyG>aU3!+Qp|+$M)? +z53au&I3O%EG&ndcC?Fs(II63Uw|A$Gg9mpoS_lrsW&8`pAHl&tW$R1H%H){J@~VfB} +I~ck_l$o!Yl^UJnho1cn6$1qT72balJi*SCMv1tP=3!;CWMHm_Tvx^>fA=-9rUsl#C6qy4b3(15V0J8 +rzy3)gXjkMoAkQNRxfByvz#)NME3c&mP0(b%!Q2}Fk0w;y%$O*h^+q@TLMSKZLgMEsy&UJc~+n{K>gh +?BITUDyNgqXGiM9|#K@7#7ur4czK=%PoJq_S$Q2AIcthJzN#E-{ztlqBsn^9yBmKG%PH9V0hb$ZoqZ# +E~@gE9V~KPtGpg(QT +bjW&Y@-FV}TxS{@fRIjU|EPeyg!2`H{=b%A~gxl+{2eoS6%Kv)vz_8$OjPjtiiitan4;uvZ4h+1w)+6G~e6O-Q +$K(TnrijUGC8%DColVsHg#f5B9mfMe|;!xu*5?4 +@L!r2lRoi3E|qlUP3%u-ya@`aSV02%=UxTWt_k7-k?6A7hl%(2ki$#5km*|?A_q9OZym_(7@geE{m{> +OL&9JQkKrGZDkFpLLgE4*Ti#k8>x-Pa#j)0AfCH)oMOat4?Xmdibv+e4z7NN{o>%kgW~Yv!{WQ|z7yYn|GoI>$CD~HIDPuGICt)xSbA29H8|e&n~R_IYln&MK1 +_75%ak#g=$^(z_cA8BY|&b-6W!$&F-(?;$#S2mVErQ9n)^Zf^C +jO{0sBkf8&(@#wq{5#wo^kncB2zqaI1RReeaRjaMf>KR>>D0-)lV5AkR(D;8<2LO&czfgC)}C$seEodI?d`kx_}y`}Uu)cO{dL#fd3(D~K7Q9+?Q^H|gvsR +7#m~dzS|8xtb;I@7weh;8i{CXK9#^+)-u&9TTD5A^?5Z|h?zqO|YM$`(YDDo4h;t`uX|tw~pw)i?44-U*C4Vioe@Y_^e#JcKQ=ob6W|~mz +#0!&f3(&qngV-yq_P)Ypd@M@jZUg>K4-_{p=MK?tpReeU(dXE-riy>3_TYnMY?yFF)sabKACUIjF3Bm +0{*=X7hkEx*Jl|c{#O-uXS>&4?nY@=`kPj-Ui}E>owrV&Jo)VpKm2eMbI-vO +Cr%sz+<)rSsgqcj9{%d9uhx9dK&k^Os&yevo*R7qjP_9=yEC0UEd5xdHE>-*CQ;*I~o={1N)koH-*g4JrNi_xJBiJ!U2SJ9qAsZ@u-Fgv=#kW@W=1f6C*-4?k3uw3n5YDO;(mt +W0M^fe;k@EDJGrM6cw_lcW7y7qs*|M}_ +$BsP_!!Loqq&yT4q?cpPaV0;L1!?Esl>Il~e4{G==9qK5NiX$)ypV2=KV_W$y_CUwrL=r1WuI~>@7p2 +ey=CBGyOdqPL+7`pZ2zW|OTLn_uC8w7dPbFNIAGt%An6M{^S8N==H +Ib_kf3q`=mTmCuQ6&Da~8zQxjK2|Jk!=smqJ+z4zYs(1nHM0dn{qFQkQfL>e38gX7LIr;MmK)PMS2tl +1Pn4}$(7U+O#z*dt|s(Apb3^n~6dR_gR8?3S|Q=8J#NbUFGlXGp{UQ~xm^N!ErkG4!0{N?A~^s2c_!v +~lVg^`3TNK-vY%@B>ml03O1i|AY4FJoKxO^8TGV4`$fH-S0^0v-OYD4_~~rQ>RWnA%`WjGy0as_@J&g +rC%I>Ugx|(Jo*{eGV(BNlstSbWhi(U2p$|K-;<0a~9C1j>VO3IwlZVfp_6(irYuNLLx;@h;b>5=ebJxwfO~d2vXo`Nwd2x>(J=( +*cFC_iclZJdy@2S@f`7n5)u2YZp?^q{uX7-gC)BDNSr}kGousm^0%150%MC_MxC};}#+{K>BgVUb7(I +>&Dc7ji82Oip%=)M(YUSssPZ{NON|1rmNp8uUZXuq5f3|Y_~cx>=M`r-Fv>8oR9{?mPB_RM}V9XzZ84 +=ge8pO1rwNYL@{L7fM~p2>q@&-6*%Kft)ZE9G6}0poAl1p6;j&3w`r{qXln|6yxO7!T3r3_c8A$OGqt +rgV$+(@(CS7buIK?IZKRLl$^Qo2Ju0^`w;1-+_l}DIYna+cSMq*q0aVnLHTwOdbq-rcd&DOEq)0A^o& +7&M%0w>MMCLYC}F6vk`+AmW^}omuqMBmPOC>k-16WVMafBy5_jt_p8oB6nGeQ6g;@tbC}bf19$5_$$z +IlKN~*D8$5J)t5LtC=tq3NxM$Cv?Gd9aB>nV@gwz@Gz?jG2h37ce8gUt~alU2D!1AW`ez{@J{c;U>C< +G67@UVILBzfxOu`6;m$H33w=NRJ=Zn#o1CjSx +3O%Q?=LrjhxK!MOUJA}vH(0ZwC8`rCoP>2C>K99Kqe;y$pzzrmC>~s6jBd^tqbd5~ +@0I?8o+YH4bP%zkEc8jeU1E%$?=`Of^ckGP7)P+$?RJ@;pD!5~8P!!Lm$H*{=g!HB*JI?i1^3C#^S}da;SK +Om?6hb4q_pY%<*F(DWolx8TsF}nUmhPQUjz@&frt6vVK#VRX&7VteRt#jhx9`il>S4n7m}Cfo_kIf6c +i|au7nSR7vfg$dPBam@IF}z9^L{E%AUakeUf3%Hu$8KQv&3xi5B@U@UR3tyZ|2l0X>=*8>|SWPYQI2G +2ZyDasN;H4gK%ar%z|nK>CuClk0hC$j7C4Id`s39@zGpd~b1(+`7PDzU8#%wJ!FY>EvOBlZSsokCr?Y +C>JH@Jg}%31M~Ax)Ky2-{QI%^eYuq~$Nal=*sx(?6DLmmh_uokX#;cS%uzhJ>euCDLP(oxxW;O%?Au; +cA7jv-Uvk=WgL29EhxAkSAt51@gUrp%Rk0UinMI2h$r&?d)bnsDJ}xB_7W$-hbFRRi!9yc{rm1o($0; +QxWgC2_^!E0aQBhGcD=SNKUYi;764l($mxBgAYC^hYuevUwY{!` +N}J=$YslxDSEiRC%xo>a{=cGgAcA@$OHW;^^kKR``G?su>3TK^q-L*WzM(|W6aQF4B9h&(rZcKB>%GO +ufBczE(#A1pGWkDAR64zu>Qj&yCNFEOvGDO7)@4fe)(g)H`S}7w#uMByRKk6RWIgIN +l3)%y1TG=z?;A+pg4eWWx#?_1iS6qqm+<*W5%a$)+uJ%FLx6_uT)oPU^M~;*oI&_eC-F25lY^`V^9kd +PCN*;{bkQY|!l+iYQ>&{i9<>r4_FhA=t2IuGe*+FvSzsAWgKi(kEoIbr9^1kBzht$+mxp3japO-FOD( +BCifBLb<9+Tt8k5}W4b*0iJ@<6*FpQMd^G~|VQ5S)jp_nf0?E8LIZI+EuYBT;tbrI7;mfBA-E^hfu9h +z#4cB_<~BfA-mD&y&ta9(hDn+O)w#mo8o8%$YNl95`nfdpianq?hy?d%j#75YirKBeaKx_Rcxmb?w3R +v-pGiZ?rAyKXfT=-n@BxXs2OeVRF{2SxOG%f%Fd;FhE8|Mym6a0eLVgc`(+!T#GTjrrwiILh2BCbJZ= +zRJro-MW{#hWIn|Q#VF=jqd@EBg%!3X&F!MRx1fP04}RiPMme#&pZD4Fg +h-=ntq@^v9H)vA-eIYmKisf1&6H--~eU`&xRCbz_SC^z!nuK+nb+Q=7mh_>+j^Uq88EHzKN7Sd)^;?U2~7qL)(xF%vH?c{6q>ebw1w7I +#t{ZZQM={MqkjQ2wFVEDzx_~3Zc2Vw43>jdf)=h{a0^cDS-jS)jIuS313E^*9hL#ce2|BsLRMfAJsKY +c{QIkq7$gxq6){PD--tFOMQ^xJjZjmrC|OVo89a}FTwMt%fw?W+HPc16GI`WJK066z)AAo5}C_tSsS* +Ks~_<%46pVZ#Rb+H0>VeKu^Em3$j}^NgE#Or0_E2k@CW?(XjY3GMatyUvTQF^p?$b19jy+H5w3Pri6R +c_Y2lE&5LKV$hEGH2Y8L`|s!{EwC@8|CqlQ8tbo1@nYfQhUX{;BPU0h(HAk7z#J5LA?@hn&-j^ +3((k(eW2~hvB@@Q?jDL8{yc{cai}3yT-&cN@V?cYQzLS310rWBRFQi@3@4Ej9KT*H`LmoJHGJc`|qaJ +WR;@rtG=9-gZPdOO-yOaZu>GSDp>Bq39P&CtX$C*4**P%z}5hGMXR- +9Mc{Kd4h+#vL45dJqS``~jAf60#`r4^IQ)|oTwL<@O7VCKv!Ap&Z2h`;_~=DTInr +GEwebDdD?P;)|eCv4$_t(>r}69zcpTql$|)Ce#B-Hu88iNfc5S~zQSafw)w`+cY%qMm86UgR+|Dh>Ao +n=0(f3$d>mbADKCZ0s<^`@!(}d<>h9oiXO-=L+ielx=@qE9H!XQikl+b8OrTW=`Rrccpy%6Djxpq-eP +m4dnIq=FOYmhqc{g*mN!Z8Dh@U@VCd{m%fKz`U3HJI%3-=5d-r#4E%msd&CLH8J+joiYD;)SuyVcf)VK$%dITWxkPlF6LLbC(gat&rV5M@z +WLMdfU=Z&!0a(X4$f3BS`~eC$1kjKhm#rE~2kyEXz2B*Z4QfsOk&(Lgsjw@8q5~^E=#=XO8W1{c{a~H +RwdF7oIfM_gv?)U&hfK6JyQ8xXHCJU-sBhJ>SP%*}9s>wk|FzCmZO4>fiO*hlbBQa7;LVojCG^%vmr} +?PD%+?g5TIA!XEYJ#RYvpq}?No*!`4N9Ko^XY333*~L29mU9Z$uQ7;oN4h?TLHRQVCM}$Q-da9E?SXM +Wn0xX@|EzyMuID|OZ&UhMsps05N5xzx^MsFntWe90{yC3hy+3jG?AcGc=DUq}mXNV^(VQT)m&p +BG?jySP&)h5X$B#77M~gE@!(1P8Ow>o;w{`zu^w0RmHCNg&|4v$19M1ei#teNw_SDJaa^8;@(?ES3*+ +3ryoH^5bo%+}yPpA6FIw@xP^5r94>0sZ~b3zv8+qkF7`~vrcH@up7*_`3=U!|M^TKetMb8WN<<~v>cX +I%00(@#&FJ9qAruDMszzr1q=7rnQJO^=KGju;(jRgkvS&jHWoPZOS8u4^_BSviUy^R6&G^f4f}7H +3vQSLru?@(AE5GG%oTA@lY8TaK5}22`4#3SRF2Ep|Ln1YR9}N#^s(QLi{;OlY|)}cF)LTD97$W`dY|z +*`6ewK1Hw-;5>(!h`6}+K<~#ScS3C0yvr@j?$%ZRX{VPJ{3AjJ)aPF^Xy4VEsOfNd~WOJP~uqb^*zmKDSb@pQWH`ZsgL&p5Bc^22)9mnZ%Ii +ub06ssHyb9D(WU&(|FQoUUwkp<_19k?$=nd*anfO|tBvOdNe9P*{)pFDn7=K0=7LQ$rjIVV) +~Nqyj6G}CtclM*|NI1w!^{)54>c_618_>tbI7!#SCSZQ{O9p<9=X|GIYVIs$gD)`6VsnU`U132 +~MjHENXNyQ#hAhO#l{apT!aG|%UrFZ~05j6eHE{BfMQMD81hhK8#BSJE(f@?}jD1RceEj>&@ob1ID6!NbZw(06_R4fn8I_arzUO_?%9`363#YV0dgUL0%kO`p7b_w +MXJ*thDR{lM2K|KAuLMhv`W%^JCC)he}DOy9^oCnKl$C;L|Yvmayrr7n?QBL=7K8F@+4KpkU_gZob#H +*PeZ6a2G%*YkfRd!Y0)^nH}G!{MO*oxoTu68iqhpDp~YiRYiJw6Dwgw@UGbSu+qP{R_gQ~K8&%N1Q?x^_jj69iSc44zQhyFA0P*#TgQ}^G20rhlPBV +rx;u*uH=*yyx>1!s&r=KFM>G8ou@v-0>%)V%A#+t}A7K}NeuYouI^t);JH0lQWCfX5cHGbbwu{l#Nou +tQxW1MRzt{=I6`EL_7dUVP)p0Ueaz +qmMqS^4#=c9EYmyX>xSJy)yPo5Rc|rLt=H&SNfH9Y{teMka9PZ{#3?$Os%PbtfX9(qWPDg88M`OQ1&a_# +)V>iN%ANkimEZ{`qxy@9`F%N7-@8PDU;Z!_kiJm^ndY2n|T%U$)K_Z#vzo=IX`oF~~o=OeBY*f#w#=K +i^^`1I4Ho9%Ecm@6VroU^%~L|m@3Id^a0zWpLxmN_j70zFZMyR(W*RO6l&&f1FSHPJ$tOrGj(Pki&5# +xGB(BffXdP4IgXd~*Qby5=tU^$8yFoomg6*{pjfzHzO&^G=g`-`Z8qJ5B0sYb`|IfTRiIO*3MrOih?H +v7dMMZf0*&?8GsX#wJW0*Ux*z!-Kl|dz+?Ci^*f%eC&jnsa+=|jF~cN>ZG`7UB^tC&^u=8gl;psdz&W2OiYN2ojPr#Yj0@EWa>L@%Jiw~vxv +^t+Fz!%d)q5KU`~x4Gkr?Jw5OfNI5Q=7@^thPJ2qlU!i50Kk +t~Sp%Z6JdMb8`w`qDp;23@pteXzJ@%&m4!%&looxG&y_xw=`KQU;)tol +Jv6ls`Tpgn)KRqk>QnL%J9jE$cW5{&PdF#W~5};G8`GD85J2-88sOq(=*eQY0k7{Mr1~3CT3bQQ!;It +j?B``ip;9anoN=9nPti{XIZi$vZAvRv#ePuS+*=kR%up6R#jF_mdN(ZHf5W$E!h#-(b}OUkq6CF +iB&rRLf4?0F@5rFms}6?v6;Re9BUHF+NSUim)x=6wHrOMXaxX+c>*ML}gjRY7$@O+jseDD)`wEc7Zg7 +5WsK3;hc%g&~Czg^`75yhan10Hyh5`4#z<`BnMV`8D~q`J%w1z_Y-sz*OKSK4xP +VSHg?VN#*BFu5?LFtyNDXfJdWmK2s2mK9bMRu)zjRu|S3iXx99&mylPQ;|=RxyZlBQWR1YQ50DeT@+u +GSd>&`ElMs*DM~G}71@g%MI}Y0MP)@5MU_QWMb$+$MYTnu*rV99*sIu7>{Dzm_Aj;+hZIK?^WEw6oGY +O}Ng2r*sTuZ+l8my9%8cra+6<3OuS}mz|ICog$jtc6q|D^Z)J%J3NoHAQWoC6|ZKg+-SC&tfe^y9VWL +A7uQdV+SYL-2#B&#f|GOIePHp?U1E88dAKRYBlGCMvyDLXkkHQSzDl3kWvnO&V-o9&U~mE)7+pA(W3n +G>Irl#`s3nq$u?$tlaJ%&E?)&GE2%*?sK(_7HodJ>H&VPqwFG@-4BK*(>eU_FB6~u2-&4u77SwZe(tJ +Zc=V?ZfdSQwH-!&nwR-&p$6DFETG4T9FKmpgxpA7pn7WotoeeEr`sI&rixv&QHy^=a)d +fm5^<1z6Yf01Br$dL>9ysBo!nVq(ZhOkZUDmT3g@&Y5G8tA&_D`B$y28*&(?yNUgfCw$KCe@`0>EAg6 +f9C>ipxLpEiQOEqNT0eSd979o&Bd~s57a&c<0y||>fthlncy116I@pR+6TZMmI|sZzS*3B55xXCk04iO`i4=!pY5QUU#_f +o^z0FU-)1h~ntt#A0i4O0lijQCwPFQCwAALpn@u`ny?eo;H)sY_r%RY|*wvo7I+r@Y`W4wN==vY&ABK +=9y+nGpAY7BGRJM64R_{DQUJeM_OrGMOsx_O`1seOgE*Q(=F){>Cx$l>DKg=bX&S3y)?Z7zN-d)%M*U +foMD0I`oHhD65*#(;G-PyP!;e_HF+Z6Gv5T?WXX@nkIqlbx8|qh+wvXxrSLda@HWEYrq)`iz)8%Hmwh82o28)hB)T+pFY^Sv`jF8f +9DDM)d7LKGqN}PFKOjEGTw^7YvOBR`sD@rW_|Ze{Qv*(U#Kncn4f*<3*Tuk4i{w=hvzt@n!} +O}CY@RTJI`#A^0rIipeq+r{A}lDoM&I8D9aO>rAraND_078Tu${BCxA-+aL5z!Kw3mvBt;zE8D^8JXP +Qi#a9woAhHp%!-A%i9e@C0i)Mj2no5}yS&6-8f=JsLdw)qCOSu`fz=6It`DO~2VNnzP#zgtocJDK%wv +!ESzN@7Rz4)|G{KQil#u%*Mt+SJepY_?SjHOSe_$|&Dn(QWn#p7(uvqb~k@-JFvg_3PSx(jSt`y~myhQ+{_-9%vgHh93+bXDo$=;1u=mvHL>vPaTjMfsNj77}@A=ps4{K +JfSumY!kHk9EFRAt}9O^{qNjJ7K5?{=J4QemfeK}_(%jxJ3U@G4Nbdk(u08jKG{cUwA)9LCAIgl8Mo!)Kuv(7MFl7V8mzsQX`~=CNGP0Q5jDhN+=pF +mDe{M_z-)dsxcphc?en;BER@vyTR;P8v-U2@PfPhOm|ILo1?C=QUNht-~QXU@c}}XcbsnBw8XAYhe~gYl;!Bf?vJX*3U$_ccwHeDSmd;s9N)EyD1U +s5KST3}}*HQR!Jmh!z>0__#z-c$}x0o*g3 +Wv1L?2Fxeh@;Y_LHBh9UI;(7-(uDo7<4CjSOOZER)qMb(HHWK*5N>+zDg!r#DhWZJ%58xl4jMDcL-P9(ED3(jCVS;f%?{YSy?)Fk2v%FqD=A6B}{7V1wEF{FJWO6!(~N6RV3=qdOisgp2 +R^DP(1>Y8_%?`e1iZLJeffUCdA+)>!<1DnA>8*o6_}5crv40fdc+ang}(=dH=TgYx?=^;)QXvw^G +uaI(|pYIEoHimXX?OAxAII&d8XV`_>}ouNZgF$Y4N^++=A}NImCgz)DJT%;fz#z5r#ajLJ1Zw--N%pC +it1c0rK|nBJluto~Ge8{aoB)Gav*&!6Veou~h&V=2R#rFO?^YY`?l`1dV$Pl>IA~jm)v>j-E +rYGJ)Mv=zyH=vjBMaMcYl(wO>F+u|9(;Zdc2P#4y!wAwARp(|~lOwjbANWtLDk6q_7|jrm6yWD+X2@G +}446Q|yT*_GxbBYOsB&*ptoCH8TJr{FSqj8K=3=~kYeCMiux@M2QnE91rC;RN!w3Qu?vzC?21JRPF}& +!iF(gVun8ATIp^_F9E<^QD2Q6^i>(o+*+_WDvX5jIU!gDJ@CZJ;?Dl8ogkQ{vjJR>8w!JO}JDZGg#5z +v7%?GqNkxE=pl}a=G@D>IR-1&1V|C;0Iqpr2DT>DSt?+FUr6BvgvS6&Ed!8d&4^3?T@^gf0FRXOR0oM=3WuQBO6i>a@TzcNcvJ3LPbHoY>mtv&{BoEc1dYS7V7rlp8F*LeO| +98Qei_N7~+piTLQ#To8*ryNzz7$>>cd#)5ECCLw(AQBu?lc??D*5?N*#3q@IYa9{dv9nR(m?0No)&UD +v5_tEI!ur*I=FhhSPGmB3e5h~aDRYPQxEm`x?>B$zcI#}UWoltcoU+lz3eVC51UKy>HsS~0r1AX65q3 +)18?NpFTy6pg|#;jy39H4XH77YP0_Qs!P@~BOrcsi`uyh?faLcQYgB_B +DDTG#{t6XTgyl6Q67V@C6$P*yGJrTN;ydc&cAAbM2rCr@Hw09Gtw}V3$`sC9$xs>>oM!K4du+j5V8K& +q!J)(@RN`@?#H_>;nHMR6NCUv59g#ty`pIcy&MHz2SntMOp8=%mXKP%AY;Q5m$4X;94#JDK2$Un42Vn +5TMZKeLu+j!w0|b1ggh(N>2qtDT&W<`G%M?q{9qq8Rkvm5K|1r-sA#jBch=Vh7@7L;mNjQ1X&`rtIk7 +58+MicnNw>W_}NaamZZ%4{D~=?4bjJ_AM2z|hCge5vls4VR&H{%VDM_k0_NI^NQr|v*M1<5fd +OicslHTUGG{#Z}&P#zuU!=^I3UH!sP9p5}mel~K{zBo|X21|1ABWiigqrV%In4D(GWS^#C&BJ|8z$C| +Oo%@WlwU1K<9pr*xQb}I`qUY?yV$>q3SnZ9VKx$iPy{)S17jrNMZMqLji9dD8v+w9RjAT{hZ=)Zx +==OYUyVQXI2&7}oz-Vu@QkV0+3vkkB)qt)+C0;*>kg=}l;B%G*djR{dOh +iK>=NA1ndHog|pNmxMxkk`_)%dqa+fMoDjAk)k=o8Q`HdWLXOFKU +(;@FNQHZwJWNs=VIP=rAAAD|fnW-uo56Da~aTQnBQLMTZskU`1(2;;mop +B?+2Lx;V(^S|@1w}S_oWzRktd_E6K9AXksNU&Rw+&zQQVmIgkqYHWYA(t$1JSW39T(P_6Z;saX-i=JD +nY1S3rw-hVkEwi5h-`Z?3L87IqX1E3)rXw%g**n(UJp#NoXxmJL|ed?(J#DrzAy$Z@l +25y#e`h>diH&rO7#i}&;y?14Dh0^3id%IEew!_sE46zz?}A++A|Bb}cX~h<}~xH!zDp1?WM +j>ry|#Sw(iiD3yk#tXOI{AabFuDW}ns4?HR0a#*EY<+nH|XSwJAq~6#@fU%dLBq5feJ^}De9&DmcKYP +ExdP_dc@Jg5i`FqCrCk~E(f-!zBU*P!tIUf`Wbr~ao@1s$jq)|0Gfoc!0P)I+a#{g!u}Wa8)%mzVWAaOao&&eIaQ5%(Z`avNlV*G{cNP!r<~G(D_2ep$kt-m$0;pIupYWkZ@}7pdRyRMP#qs;{)a7$frjrjdpeO`6X_Rmw5R@F7HGfZR4;DJFBjP +?i5pZT31dLHa`KSa&{*4sV{n7hoblSa3412LUma9J-46 +HB<;YCs6(fVtT$KW%K%Vx2k9kc@8VUPuo(Rkj@F1H}w)LRy0htr0`a3@`NafuCTQ{p!SmhPG%8GGF9; +2{sCKMhJd1VsvN=4*VfpmmqrMy5l@CzqQsF2(3bAP*H1h%YRj#Z&N5M2OZ6lz%eFiQHfx~0COlG2}4R +XPU{s9mZ#iNf&8=~6@#BzNP=G^xHvr+=`1-973{&^sxo8+qegV7%q2EvdVA!v+|k?mvxszkVc6LW}96 +k8oL9?3x8RwvZmMtFMfWZPw`32+1%L#uUJW7_+b##qTvR3%{O2NMJaLa{Cc2{2>zwvzDPQ7#p7yDKfX +GrU2UtSk{JZXs%W=dlME&e2svVX9WE +ZoO#mE>Qlfv^{l?bn6ive65#i8E7y2`h+(>>6@LEL4uejr+C<0mzE-uZUj{&i=@y2Ay^8pja=ep +BueuA{_>SJZ>U!;5o%HS;&XrP5oVq6vb}zHoA84}q;~^`eIL%~67}=Dpt`9mZ6a&-1O8qj<*1T572j2 +QP@Uqp^hi0a(ce-rc<*J6KDS!6#0%5ngkiW3J((`DZC-Xv>^rIf!rkFvCwzT9o}6P^8s54Od4<`>pn8 +Pp<;34ZlU}1aAKMSS*tq$F%1xzTmzM%o&QYUJ>Ig>dYS7P0K_?(u4r<_vy_bkMuv*D$;Je4zeh7vz$`SM=<{&ob`Phox;=X+94lniH;pWS>#+jfIqy*$t4LNJ +4$%yl%IWyz_JK|Gb9j@J`{v3*h|HzRox~jJ9V{CCq^Pa&ih@!w-fs}1v&TL1l~P +Mtr`{YtL`A)J^BeJ_HjALA6e{Lq+Wvk@131hD1^RmsBJ3d@fEv5=^v0MOXVFzHBMSV;(e;fY*Id(C@t ++Q^;t%?0y!Mx0t!70ZtO19u7L<@y$dq+&dOgGn2fcI#abM|D1ZQBP-~>rK1)VJub5vgk5HQ(@xI=Pec +h|WhP?uN^5;>Axr*6tL!>Ch#9i|SMT+v#hDdP?Q5cF8Q*a+6vs?jlX(O6ik4Nc3-3Jx!)&L4j-g-ot@ +U#Lrd#n9&5cliagt}x&yNncYe!ysj$gbvkSflQk{Vu9%V8*OM9lQ|g8il%DlNw`8InKW~??5r@03oiJ +q?HpR;{$qTBnhEEF_`Vok>FkDV>Y}_)7}NPyTV&AM$Yo0tmbhy03!!1rbnnts_;Txhk-1OMWseunA-! +>sO6kr&U~?Q0V)S~V*>3O>ix#xGwftvIL#+`nutZcxJ+S?bEiR~v(!rmhxFzM4o~+Yk-qT`czDW&boc +3GrQ8N$o5*&1BD2iu!}sGlg&J0MvOBZ-w%H(iAT4KwjWtIn;@OcKKqW^so7guwOYObeEb5)>g*JFj&*2G4Ur2ck+$>eShOd=7kU9z;sI?+O%XskNg +SCoZ^^jZ-fy6uN@>SGHCBi8N*{6pL_P=#T=MOijE9Ww))!1`qid&&ho+tfm{=~if+T27Xs-kiRO=el! +Lo2b_Wd{JsBHy3c3hwDcCoEYOuog=(IF+9Ft1H-uRK32W<1R^WgH>uDwj-Bw}f$Jv>?tf5b;Ri3Ic%k +#s5`^+@pt(q5BgI`FAk~PPPXfQ!q5j!RR1;vOcUZh>g*P4jZ+IvUeJ)!iplu(wc-2`XMF+a!uftb!1{ +Uk)Cx^6nyO0WMsYQ`wSJ>O-XT_4Ad0{UW0}gsm)ZaxesaGxopz`U(U8_JI_jc4~;V-U6*xR9v#FG(_! +D@;)61xOnV&3H1EX{7bTx`5d2DB^`Ea +mRerVy^;1*up%Rr$bmV>q61)C^K&2XlQcC`%Lg=@jhK +>-`=LX_L@BH~DX;jP-SwBe+uPVSC*T!2!7=Kjh{wD8881g9n=D-kj0xEsa0viON{+j~SW#5OjVGG(&cd +>nsO1r^vdn!{@5k+K0xcs%$9l{j|^lIZZijmaWR^q`*gN@F?t853u?Bk;Z+Eo3;z@l8dDzfzrXxF-r@nyC?v^LVKuU!&WA)5{z@-oMn+g&}Qb5A8Y3&lTNDf`LyDgvUgJ|&e +iYTK=Shr!0Q01t~lMIdh8?p2(U2^KhPLKeA@;k(x_IaceFf=X_FuTW*mVRp2Q3s +ejT?znX$dijnHn%(x*c*gII%&s8F$s40K=a^AzF8%b&FAg<7x*9LR}kEYembYfP%n*}s< +0N%V#KWoFO9f~}|5X2(cu-}HMzs?vO=adX=g>xakoK{h&GXWY)Hv5!@qzdF#BzUS_b7fr_!z)bbh3IV@4b(TcEq?E!r);VwNJ`s4lvmHU#TeJ0Ia&@+=dlFuCXLkp$WWg%dW%NcFGj@qXM4w}7WFgMJjsDar#`Cap((^lO8XU8lz=**B1+?N +6X&MmuD=QD1y79<*71xl;$UpLamZm&&beJL$Om`*^W5*5spEV&LGW^d!tGWd*wO4k+~~)(m}eNWt^{a +3eh11XUKQqqAt?FI8qbCzwr1vQ?dSwaK(;Jn8GMjA`zMOog9im&dZ6$mUs-Fe_U7sn5r=emn(!+Li-= +sO4AFe5P$0hc7O<63>!$?W8?=?TxTU-+Y|zpNHDi*B>+Tq7qI$k%M(UY9yhlg8EsGajL8?no3(S6;^C +d4pIZ_O_R(ff7p8SB*YC4CtO(ODEL)peu;C6GyyOL7FdiGuY@0MH0xK^xC%`H8zkQYDZAC>@VkL8utc +^b+_pnqx|~~aM4v=4Y&R{pRCBnNpQ!yL8xQ_-cG3~-8q^L!d!?l5n}_OMG*x-GfuA^*NYG}9NfxCRk1 +L-Jjv^jtEKHVWXv09{BVwJA&FcYK%#VA^gG2|agUzQvUD~A*3%aNSVXF<>j2MqfgAMhTSe#kErdq5EQ +PBtaH}L$6AhpGMJtPiEHZ`)Z(L0dm4a2*&a?R7G@)eJD2Y{x}eDVg=tWJOtqn=xR{&9XVzL`(n9^G*lB( +pimBH8^=UG3^KHoS$UWp^g~%Zq7Br(nVqpXEJ2BH%s7S#(be@|lob2l21Tjw7i<0iXa7129{EMmCIz& +b%YQq!s71yy}$Qd7TBLpS(_r%(XEQ#@0}k%FJ+iGD8QkyV33*y&_Bd0z`021M|1o0WYSoWi1(+#REJZ +%$vkMcHgjKzN9xvjR%t@%O|YpTbQA$0zPXirh7w2WUI%WBTvU0_tG=+6vb@) +_@YLa+%^k+uC6v1VPXa`Mh~tK~<hKfy~rn{wBThOO1nM!3 +Krk|O==XOuduhJPzWJ}DeZ;P^^~hiTLZ~SfhU!(29z()DD6qY=C4z=N~kFCAXFlz>sq-IohQ##qC@2w +(Bu`^_Gsl~iVzwLFw)mz0@M(=9$Fcy6?kE_bG)oo*xWl*%fY8?dir{(mTlzBfSiIR2%EpkSYZ{}ek~a +i5=>KsP%>2OMFrm$B)7?fGYxxSHGr#FZz0%!TU{rUq!{`M@w`nbiJ2=D_e>$QlD~;p;3%XDtR_x_lfF +QeG_7VDbYr-78)TVAS!_m@Pd<-lu|t+&S`K8nl(M86S^h~`giso9Y$#;2pVJjjL7ouemZ5%BBkl&47< +MX}h*hH+Kv}`Z@jhhHttUpoh6Z#P4rGPB<2~Vk%^waxLp$JNhrcOY$p)-*C2~Tmi2u0=d>edhZr*{&9 +JBiRbY%Q=RC2p#-ce*W2@y1xm&*G9?Ouw8%F2u$lUyNzG~HX6r3B{p6=s=03JUlmv(GC1_LcU?T)Vm^ +m#ZuPOk;OMuR$z7@)&T{-}@37!|eC2!IP!r<5&l(t~=n>C-6$MN(gOwOLR31a#Ja83w8xo(n{8`*56= +N;f#Ldf9B)K%I22@#N>B15eG0qVwq1-YZ)iiv`?w6rP!9@I&IQiP{9KJwjaytj;-5}N@q*do$;rUjY2 +j&yQZ8*g~}G-uk2)*$r-IV<8@9!s;|awH6`$x23-zkM#q{>O@lJZeAFOD-f-DZlSx#Ml?d7lYs@4HPx +ndO0v7G04$O-WxIK{5DoqFpa$cuc|1)gyuh((3RVhWhAY~WZxuGEvZ{6Xgk-TCfi8xHZBV^6Qr%F+`Iu@V4Amcrg@-SJ8z +5@6P^JN~QDL<5j?M|C5ujyEIWAH=)%$hgy-?03={i9iSvja&_D3=wu$a-Ti0$)43T^H*IY)2sSvr*dX;sG};t{2P*v +gdpOyoXl8a+_3o&@fbATZz3&?G%CGEZZ&!S}s5mYW?90fuY^8pZ)4X|VJ2aD2Zm;r-pQ_ao`Oao+sCd +S61Gym%gvdS;D9ICG5Src-jVKT=|c1#?4}#BfsFP~yAnjcN{ep*>YzLor&v!i4yduTZNt5_g5~jM7lV +gTRD5E6jA32lCl{Esaj=e~r;>MxG6WnR)#QxND8ePP%y%Zq$)8NmBaP;~e!oN4$SGPJctLQz6gADd9wn#V^S&3(MfN7j(2-9?P2a`@y4AXR2_@UhUIO(gT@ce4n^c#GvqnI7VbCD8Q0olX4;ZjDz2 +`&k7+9)`vGe6XIbq$aoke*?;*Q1i-N_8nD7#vLh8GLuZlfU3qIbCAjmz0<2JQCHD6Vebtd8_dlXqQ*0 +nG^_s!v5kWR1$e2_q3wS?FSSS>J@6YqRFpNx1&PLX{vBHu5sa +I3pF-ErRHF-<7DF%Hjlz#@&`%-gvLK5m3c+UN*!qivphP!bA^3N?nJolgr<*&4U@h^3r9$xWB)qv7IH +vvwgy7HVeYp?>JY^!qyN{*#lx7N+0M*IwqyA0=NRY#b^@=5J6RT26ICXDyQ6ETSsE+2hvNe1N(%>b0j}o~u#_JqZY3?A=}{1ii_ +8C^kXKfZGam03j+vuSi5V}BOFYE7FyiLg&Td`VD&_l?{uM%S4Uo1?0przv%(sd^gqq+@M0`{8!UDtwj +;rt@di}5_EkkbyKGH7R0LLW(we68|nj{VhwNP}cokPoEf!I>q?ILMO#DC#7^9Da({iGQ2IV+Tg+atGk +;_==hoYDuia*@;@nBz7hbNUyW&&O_x1Bd#-Qe#4e;8(!vcq8{ZaVe}7;TyE1@C~s^j;^=xNfbAw#hXT +3#(HGAJfUuRNHK?ZtpLFxqpAlVu&OcC5JHQbS}bh6rC%Elm;^2kN=qp&hx=qNyQP0HVwUT8;H@9P@ZHfbl!g~ZzR_E6h8E8?(;cr4T41M +Jdw)Xy3svp}jVSes;Nt_6VKrM*Ks<46c=K)8T)(3@Z#yrD0I;F&Wh3)BObY?5vH79pr1!q#`eHmS8lK +Zb|EunLbm8W0UQ{4Kh2xlf8)U#10|dlIV@-TKh7)4ivrH&9YFRgLMKtE{c +B66O-f-_0CvgWYwpLDYPLlWQmeJP)(U1IJZ^aoIX!ZAC$-l45zba)>_PVpfkjbS%?z@^~Q-bKs>y_;~ +F$~S}}`|lT986zsUgyW!jWW`VJ~RARZPxJKw_sw)`ysfV;jF~v4MRg_MX01-Lr(_+;TP4u +y!(OEAYsBF}JB*3Dx;5XK@$xuG>sK*QU}%*{h?4y*81$K&`(=zE;@H-6BG#PcO8*kMXwx!6N^%wvYNdar5E_%j(Mx( +%K>e;*V54_|p-8;(MMkvOOq<^xJz_>2axmI$Hc(Q9sN`QC7zLMAN!L=5WJ-^sD;&PeGhSX3fBCHt{Vl +w#M;Z*Rq1p@|ABjII__#d&DB~j{)`)bFr#uWP5z)yX?ltpH3&9ey_W~w?7Kqjc2EQkUa@F>m<5L+ufJ +b_wa`uYARFR`Y8Z>P%+@?q*P>ZRw>qH<>TNBCHijx^xBXv;P0o>N?6gKIJ?xp@>g;$Ck5hhd!oEa=u_ +)SiTlKZ+aCHfNT5aA}0QBC!Fpk7Q@OnlWucawaR(mzSQW>XGdwMm<%@tctZ&hAFOQujioHfj5;!hd=NM80C4uhBsZ8!oCOxrT#_Bj7WbtBJ59A0R8udaLY=M#@u{E}g +_hA1Y23@S>4v)d7U{o0jlC82>N| +&bxCve7(a1OdZ;76eyA#f9e0T_W3bhQ`gO-TymKB1!<`}ZO+^SbwAPH}t^{RKT%!2k#r< +qNW5*x^sx?}ENxvVu!nfa?>sHz=r!Oqt-WX^d3JsBL?l%}m-YsZOOZ%6y4WC~u1_wgHKQAo +z7t+t>;#sdBgSo6=1Y-RS8?S=HCJvd{MHon8zmX!DDx#7?u8%z1zoGnTuQ@u2zVUfcU9J!^#*9v-Bfj +Ay~lM|GjIz|G~~QXn<{L)+w2iGHhA3IR*n*LfC4q#8u2Hi8>soOPW6{AvgS-$pBiikyv=UOAXNu0HHs +~{?3QE@@A>IPs1g8$wBp<|)2X&SO1hRp6J%p|Wk6cK6!BJu%ed416hHZ!vZlN?JZV&ax8x$(L&(>hTS +6q86r<2%ONi!G`gu+%XTLx4LM3?v-IndoX%>4eW_d{U5c_&h+Cgn7JSNHZ>LE^Xy~lR2wgx9lOKq;RV10PvnyhrSIb`t7O~*m0GH{^i|WT>nzd +^)FdIwgNW6Q&W8G;DV<38J|;qjeL;$W1bdQodjSWAu06@D4U}_`Sa+!p)K2liVXF>Y&wp8kvnwY47sy +U_d&*42X=m%7mS-1D`gR0yfoo@`@!pU*`u-z7!<5WxSah+ +WJe3JAXg=kiedaX`%6;!TFekc_&^67!Vs_^CYsY~Ugh-J!0;C9mGPVtAgA_@a{ +5eQBx-`3Emphnjuj?rZ^dnLp}&R)gWEI{m1zTM(MqG1Z61DhF6UdP<=!fEgIV=%^$VV +5aSX&5Qovnh%KjKe54rd?9!l5>d-;pXD&BJCu{ws%VX_o<)fi1&$g$O7}2@CZVofcP#%C-+y14xVq2@ +oULP)k+_2rZyS$_N5m{@0eS+hO%C6m;VD?`ath!7p@|<4UY1|xx=fyyUuu@82pjW-jgr}Ya-}1u9qPO +x8#+{-mh7{<%)vE@Tw&f&mYFmE;A;LxzA@+9S(WRUW|$&}Oe_Q2S;_|V?sLwk!4?JXRdKW9HoH+0rM +C$i>>Z#SpV$|VaGVKcVk%XtT6I{=L;bc%04V9m!}EVOdESW3$-}zcMae=i08_TfnS^?t;h488PbbFlL83lC=lir(tfws23RoXE2Do6mRohvtMWy2p%KR +hD?2k;|`i;rdqYnuTGm?Dn-MIhT&^Uy;(4$*=zfTTZLg*A+daZ8(X)*Hy)-8wuU=mJb;puo$a@hJZKs +zh4g{{A#n~bpa7kKlYKVnV(qpqVqS2<;U+98$i6zV*4>=j}-D6P5&1e0yrXY4(EUvmmUk120SjT%8t1u>S?50HCO$^QQn5aTc9P>-#M=cWJ;=z}(T)akBuUDue!_hvw!x$ZC;GDh5Y` +|A-J@5d>unQR=sicQY@6QWF%L=TSu#A^61o<9&N}Zo_nha%-u?WT(Yp+zcbFxOcP}&6JtK|xZ)dE39& +;`E2D8Qs{mW{m(3|(M(bZBU^H--!{HT50O4uN$T|K#j(n`$y@eqH+YSfSUeJLIC +SeGC{0#ZCy*@V-8{d(jf>I-I2|ALt#PnB-r6K$P_*$Za($ipQjkYy5%#j1uepR%qWIRrM>mhfgdy=ie +G@3{rV*mEt_qH}kUUvu1F3s*|S@-zHwnBUzgUoC})p>q5x0Q6#bInf6X|ASf*%j#w81Z2H|Du=j +4Hm_JRVc;`BEUa$HQEo4`WmwB)U2vAm>ml>-5i{3wvk6O+qvQJw-5*eBZYanFjKt5N!i@Y$pc!oztB= +94xshl5)9hm^rsZajfANctc>{pg~*|&Jaqsy7P<2a-%nIj>A92=w04IezmGC=PXxyM;wYd}`028BN50 +lTS1M9UUaOAQVK@0x2+&@F1N>B9>YC_O|45TSCesc8i9WeP{JM&h5KK|YAz)9dhC4P3AZ3OrchGxV_=dBp^C5j}CMUkx!)cWm=b +n*0hN9zNth;07q9+GDHu@h~bLTSYksWzH~q%D89#0k*6>7HXN9Pt8)*U1x~ZiTi2ea*+c{%ygc7P%7N5Lhz3?tHs?aqmD1=R-PJZ3S2JK%?H_NYXwS +1GDq_mB1d?Qcr4xV-Z2kN4CP!s6$iuieLW;Chb!1dXzukVq8C(04%evVI9(IzOmR<#GvO$?S>m)L`LF7VPtSDa-Ow~@FbP_|A388lg17| +K4P@VqxOT@KvGfia1U*>ObqPHdVw%;(`+R{N;;CZI1`6ezz+B)6b6Mu%}4;nj3G^=!^DCSQ6#8v?Pn+qSlewl +cSm^J%LHTholYO(C4ziXU7g02_6HNwOF(J`K0g{ed(w>ZC9JlV4x+S17m-KV9Ck`EuRV#ET70UBU(ZB +vTzT}W{#E)U}&+tHdH7@=g_O&hL*^~wnYmD;{NHdxBeTCt9Ge{CW=Exro~u^I)ax2QRALJQTQ0v;ZBo +>l1sc@=^s^fG!M-^vJospfDAY2vM8KQ+YyLl$D2C)JlwG0@9Vs1W=bb=S99)Mu6=sx@ +-~4HKSNN_xdiW#-;)f~7Lj0h~b@GFVS6-n1`zq1*o)X+bf}`uv;N;2sPj^ic;i(T0-RNIEf{_BCdtSV +|S)>!ST+J*qo~zJQ}%iU3&+Hp^l-f0nty3JYuh?#e?hsJ(={M&`!CDq#dbY)5w_zkrqhkU#-NeOEnK*defRgQ=w$UoqcsrHc9fOra +T7?|+0~L>|o_=koc;R%X8OF+d0ij0ha+GT3w6R{p`WMtBXhXZsW+oTkC}3@o$b6cVOmzv48=PG@;&_d +aOgGH9C;(^;=^Wf?w?HHSCwMaE%yVa_(=@j&F!R#=Y-7F-Gd@ebnFP;0X^iIn<_ZLnfi6FMsF31{AfP +wtKtUf5hiB<0pVy`p87Zc6int1NJLwJEK6)^vQD?WwIQg3UA;3n<%4rO2&)yc&$swS#4Tn`$;ycnW0K +gF^6HV))T=0QVOv)%@kow@erbHnJqS*z!d|mf+8F?-C+Epb^Y`4+>N75tbfI;`6bDIbNhtcD2+@IMwo +QnBuyDl(<5aA|<@T)el}>eNLxy(-JzIdSPeVm}559qO{oDZ?CDUKgbu7-<5On1ba@G02IL +3CUa!e4--{PpV5pB}xO7M7FKGvPrSfk8$&SRXzeKT3cPL*>M2}Eu>5)>&a%H2BCA%<+gt*>|Y?Qs$Yt +tRy{(@@;|)Gy*)xT3&137UQKQY4Z%-=4^eyaUdNRL=P$cDXD7Ov>T-(S0?5*(oF2JmI%IysN(Re4++caabHv^~#}kjLm;Ie=oPS^?8|ULDy-E8q7q+^ +QWoWs;Jo$pS&|(%Y+WRicjHJNLePR~w3;B9hkh9tz($`K?|A`6>cBdU3G+Wi-%SnS;2!B;B0okEkKSn&){R7yc9g>Xznmze9tnvX^HYg<*Yd{T)iF*VcjkAB)u7$cWL9ip(BA&kR=ILaSVSc3Lc%J2Q!Ce!8%5M +2GyQHxvVK#iI!osNN%!*IBOO>1AMJYD2gwF`y#_)AF&Q)j;3)tuF6TABSH#N`TJY=S^vz18Y(qMs~-Xxirkj1%HPKLp3OaoE>BAq; +H{>ap<NxPM?fpR6%{bGr=05lnmNbU@1}WvWpiDOfx9c-+syi?IBbz|Ff>E*9?~J +)iQnIva=>FMVb>`(3sTk{#2w8j>7ClG{QVDN +$d$4&=uvszB(GSX6-}iBSa>#iIb!8c_w7saN5IVN?NRC{-ssg|oD^>gW#gnw{}TVn~4{i6I3BD?`4f* +)vf$B}Nq3-%j-g^3>gMhYg)FZP;}{cN8+LS%)u;_{N@zAnFIpH$xJpR~_c-UP_ePN6>}n`D_|>lH16oFQx!ElPKf^t|8 +F>d)KhV{M#VOncpkeOk;!=*LbBsu)IRi3BsA^L?9q<-pQ*u~Y1*H`KN^9fb?ngZP~fjNn9(vKPVJ8u7 +L9H2ggeYekk|>yJ4`JeP!$-hg44A9*;44rV!n+gK=Ps=wP4hl$Vf^xj6ZJSO~8>KY~IDps4dE#pI@;BoS7xGYb%$tMG7U{qaUow+0ARTi4Pn8LsE{F>cMo{0KgIq?=QrPC +R%+Lrca_Oz%B3tOl+A$us1B(B=9M2E5yOlO4^dNdOtU5-onxqU2$P?&`3qa`{Ge9=Q_(vqqw1GU6u}w +>bz4XopFiz3tlt<@vvb_{{#`^>=N53uvzo8?dIrjA)S8lCY8}%=OCJavmS=kPC95wAeD};7HPGKWz+j +wM%WrMK6d7KN@n>G5Bep}U@!p2VDCbRL+C%m~2k_)RQNPX`spQg$w{+vcBY?myp#jMq*bl>c2jHUz%_ +(Li@Sma?96%`vc;K7&DXu}wb-=ZCITJ10+T3~OJFtN~tnc%;#<|KYbXGJdN58n>E;dVQeD}-wo{B=Wl +xTx^g1AqO2F70QAKaS8e4E~@5{O}@h(}h1&2(Bvr^x#i_prfZc!)1!jJC8Ss1-s?pcBNf$1oJL%xzQ1 +*wH32oRfHe{z^jEq2o-v-CIRtpb%w>PC`NWsTFr3FK`T{VQ;DYl5)%Q`&3I0M9vdDu+acfL2E3T~gy|tGdmG4Riqpn^?T`K& +js{{$nlGAIV+ +DPPQm2SJzU>`C&OL^E9i{x@%oKQeWb~@&`Gr`G+2z04b-YBxJ7H>C-w&4YzBW@p~o@&$eJUyJR?rV!} +_UMijAYeL>uG-(jo!dG9QjefK&uu>ZtluBWJXovizDC`ud^vFr`{7CF;~-)z?JZsJnQnX4ECiQ9-kQ@ +$#Gf3kJ_j{J1C?#Db&W1e!O8jxJ#ueK!KD;J*QXGXl=peoFPok()}vvKH|dDjaaI(z?D5n-wn%T2M*< +wDv!=d|SIzRP%E19YJEko%o}b^RiS8~@nAHUcBiMtI4h3W#r}nkRSSK}u`ap*o-5B$@Sjy|9*jVk$P; +HZ$QH$le=CB|Q3D9nCVeG-j_KWq%v-Ns%0p5eZg4^}}+#%wPtwQieCepVDF=U%qJ2X~CRCem3jF +0(hXsLxaD$sOVi9+4l6Wq=9_paS{!&;hx)HZ5Mx@`0ppgChM{q(H0&S>mdMGB;wGY$!8kunaG75{hD( +8)M7jj}(9CK_N6_I%)8A$HXw#deovdU-|qGfi{TgP!8jCN{)uOms3@8-RtRF$CGp +1XawZv;`t%*q-Gl+Xs-(C2-Rg?bzKGY1vAt3-X1})9&(tXHRv1}-Y-GUZmEzEhSOxkHV~p-v{?!HDvF +ZDCS5ffvhw=k3uBqSG^~6C*^4RL9OVi|up4v&Vn%8?vYdzD4Xl|eT<3KvT4p^HlX<7~djA$?qJ9YJ!k +D5&Q5^8-rr0cSPJKov~w@??1$?twl6`sj}ZJE@o3PO`EB~LS%G=E*`Ey}o`Yd5f(2P$Mji+}9LOsSARd(s +o0Mx2CxVJ%_<=Z4nm$u;C>2O0+wE)-3siZZ-)>~q8f~lVA16LvFt3xoWZ>uD%Q+iFe1L&s9lFC7A|bv8I*r}k36;5<*n(~l-X06;`mIK13x +#J}yq3?yYjUONAJ9U$b2DyEIkQ4681-)fauEUKLxTWGUxQHk0Vc1)lMB(kUA7xhXc6+F+#$mYLUzLd0 +_Io%%%q9}dteB>PLBQ$Y6t)}Ke`Y$yEtr8AS0;B0M6fp2qcH=6@ +^Sk6i{1nG}Z&$1>1l9H4_Y)oqVr6UR<=&|I5sK~c@&Ri_c!YKXES1!<4QT-&K#RKfVSueP-g*kOPA!e +nGGb}Ro*DeU2*C9s;TdFZv`a4v*BN|D`4n={h6O}0D0ZKaZ9d@7e)(Hi-qQo3;Q5d>Y4_-kVG7b%E8y +$dO)*NOmeDQ7R)~scQ4D%4kjy^O{sHju0KAG`c@~fPwXtem6VaHA!J@y|#)T7Qd+DGzzbIGTp#7G`i1NF=)2Scj2CyaE+>Z$to!Oa!o^+GM>=R~E+L&yE2(Y?J4{^qIKFY3Bl))4cLeu?`>&uNHHd)L;OfAsU@AH5;LK +YDX2f>*oVTa;A@Y|H$0AZLVLF>$kt8~7)v?0X@PyG5RYoa-cic>`p;avesiZWWd8i5Nh(cxgjvu_f4s +8(720x{zhaI&_vR%wHFnilrxD=`j>@b{htoB}oZ`&Hk*Bw*9R9YWYg_XItalzT`W)EwYxVCDrgD_PCZ +H9JF}XJ7b>R#r+hKS8(AGWNY`V~u8(# +e^%>*(8cjR8g9l38$AQ{VdgCe^j@*;5WoS_8Uo8B11&O2F9a|KFXi!N`-0zwUC+ +^G4h7)%--P|e5{~pF;HI_XIsSexAemkeX+FG3z-)*MDwAKkhTib#A-lC${uu?ZV=H +?TnJA{qSqcYAB~p9{G~0V*L!$vr_%ojXC=u``pb|Guc8IQT1LWe+zEO#cY?N4T7nZaJtz75&$eOyll4QMo*(|-Y!<3c{osnP(s}+FuI0S)#xZPti5c +|^?Au>XrDxWtgxEs_N-xC0ME;Gj*D*3&AUzH_6$4y4EK1h*B#TJA~V5i4}QK1ou2&|wzV16fN<-P*xM +Kj2XfS-*YjD!>v;nC`+CTy`3JjENgw?l)-%7F>>#M)F`ws!^u8_eeYJZUxjP?;xjP@YD(*{45z7kZxy +pnP`l8bMO~=);tw=?Xn+D6&yTdHo@gXM`8^Ny)gVZFMvN$!BL6V1j1EAVUPtIbfH0LYG67zkAF^cS+z +c|$m_|ZG&eJSqyTmr9RdgaUSpdQ%dEci`6w`i_9zn{E>C7O(R^1~s0ZMnpbd+3ui&o+>eQSqzX7GH12 +Z_%jVd&t-gfveg4S3%I6LTzJwT%!XKDo3rqc013k2j0-8h^!Bt&kHfQpwV02QR8Ei>QlETIzV579hS! +p*33uyJN%#DBSr*XY`LmxB#YQTHuB$}KP$kT%6wuGMm5^b*6G>QT_DS+xB|=!dA<=gg83#1XVL# +(OI8H>~HQSNFNc3F=`0&a3@Vi8w3ct%x+&;51@FF2#?Rl{}e_0?6NFzRHXtjVD?AkN%>!gra;(CsjW? +Ua|h}Emi*T#LTj|kCH$S@<1zqls;;)Fn|(iw||;0<^M}ur2Wlo1k`ZNxJXy&rAnF9x%&pF8L{{a^TX-0Cw|1e}K7 +bj(|N1AR7E=kYWY40(a>(p$F2-KCdP2E$$Y!B{op3~y=V&d^8NhcA>p$$ed#fMF`hIT~u=&e5gOsl1? +57U6diY_#e#Ir63OJ53$|zqvvvmDga44xHsxMNjY>bM!EMTzB)4)aYkCDJhD9*|1Bi;*Qa!_~ZAoL$T +3tvi@hts9w7<&R;eDL)Q!Q1J6f)gP#RCPlsCmK93EyOTA(NS62t@YTrNNYJA}0?*IfwfzioiX532DRb +xJz?)XuF8)PA}#W=E1PTNfm7fr}d9)uc=?*$lN_o-fNvz?8Fl08=sS;qB{F*e$et~~5BL%PaRtD${q +)mRemHLzb+|8v|A)UDuNI*q71%le{9-8S;uyhw{p^$hZ7&JRY-yTpmq6 +pG?wW^bMam=-bgBRZ_F@w^ebM)-+4xZ#Wk(XU9dIb_D*_`o-AocLzE^cTDehgj8$)PXP$h6d$TMfmsP +I3>n|g4g>Hi|$R3(o$#pNlhxdZ8>jZK-yLtN?810conCgz%XT87NAZM*o +4SM?nin)Ed-cd|_jn@rUlNZr)hX2WUnJ7h`X3pQrZ%1vX{u3*WB@&qQ{-C>5vACOJ=JeKzhYcB7+0@xy_}0Kp_21sPYtKoQ`f~}PwkG0Ew`Huv1M~iZ261 +Xh&|P4GGb3XWyGGEOQOrKW1`EYX4Ky;b9v&inwANn1u3yuO;=mvv6^~~SWRVdekAI!UKq2gASUCzpbZm{pHZZ7 +7QT2+ego`J;rO9X}#v#IAbHb@A9$`=f^j&TTXngi53XLyAH}BZ;*vUkd`l;#eH2ht7*bwV2{ip*Doap +-RWH%Lao`dD+?M(*qYqprY6Uu`pDu2T5kxIZ>#j=nFBaDt}-w3RO!y3RRlfkgm3y5~5K3&XBMkAPMXB +#3)p#2#rUfI+27yQ{L1hm{LA+oYirS*!VK!oBwSfs@Kn65QvJ)R)`F?P-v;hBgky6UW0L{@M{UKGL*G +&dhgek4o0H7opO89ztsHa1fshAlDODaokD?83KN1+rGoU83ev$clD;;a6O4)~6#tcbt|0dRO+>087?H +|7Aj}=WFh-RZ3rKa2K<2!tKxPqR64~1n^k*<6l@tp}n_A*@ +#E=9IT_no*%CIpuxMx&AvqETJF)$|?FsGfby^#2-->ev<(y5>;@-x-Z+2W7fCG +1JAPQO)4Mgm}ryaUo*G=%G^=M5QW=o;r0wRH`x_mC8?1sr>P%R3w{SEGiWVSo_sK^pRvX7?r9lK{ETO +kD9qiR4SwNl0FQMeB?VrQY|_sB-M=*E*g?*5f4fAIq;-|A*ra_+BCW-JJF%OP@5F*C^bJQm0j0Iq#I+ +-hB{X*q_9-?42GpLI{Q{H9?&Ab%hQk{Xa}%w|NVx-N--ea(nzr8WM?P*u +a?p{i29D^%6jW+PP97iJ!+s>}SJLRD=v|C>-%zc8N@s%pLYoKRIyna>GTh1lubP*n@f38AX)Fvmhwq2 +kR$TI%ydRgvaIb)BF^i0+MtshV=JFjW##5p)7!1CSz-0mives-$R_DITRtitaM~+bC5efua609;K=@i +pMK)K`b7ns+7K>^M4hk>TZfsbvs3=x`m=t74j%m1r((!FBYO|S)vg386O#ED(nbK07GN|hHT<_A*%Xu +)UPDwhnT)RvfAin +*n%BTB|LU+|oG5?l{FlmKL7l1uE^$K(EZs`&S{}8dE)tB8y4!)&;L}fL{W$K;%9jq@Uy +&)ax;C>ts$pTo9$tHL6X>Pwo^FhDfCqq^*49Ynds%JFW$?-d=M#w;5>5321qqVA1y+us9}I!^G{h8CO +F3~LP=x^X|vExcA*jftIf~$c?vS$0vZxn#pmObKg8!_*&mGg82k!xd_Md+od9pi!!I0m+J(c8e~s7}_ +Kw)Fjd07`r$jwuKGrDI*(LfiOlRO*3EuDPm-NLJpx-bfy1d7WzA9r(Oz0y(r&qk$i +BS5*n;Hy+m-2@XJh2F7BCd$mac#JfY=|8KsH4Ki%DT#r=bbD+m4re)KS7NQ8HerMM{+@3fX6*9dm@4`N;Fm_6*O(TvH(!Qg#z%%7v*U$^97>Yi;CB2VBM({3r{&^1Gm=e+| +h0=cU7?PlJe$1T9oF4&S(<{it@p;TL<^(Z4A!MI-i-Uzo{n^5dQ0-53@+?3 +*B-vYCWkOP`RYp3wt}UUk?ygDT~aK_DB8O +mKeI~Gy&3{1SKg$+a^WaVclmZT~&!mqg^_5GWVi`zvd62(*(zVXSR!`j5n2cd +Cr~ODA1c(lGe4B&hJM$H#AT6x<3e|B?;)&|T@#T7ckCMJWsws$}557bct_#yThDdRSDX1!444pC%LAN +P`5co_XaSv-8-m-HTAvIj-55EhFIvVIr)#g-}KA=wZ3QFHgm*q)s;#hS|y>7gN3XElYX#F3bI8h7|O1 +GAysjwml?$N&PUJfG%BWdb|G!un~f-EH#j~1ceXH0hE*98-QOGvr&25uQT^i_p)>yYpZz6BG@z)`hE25I;$ +wZ0Fn1DG`)*>!FxnD~I39o}7ZW)w^;b+g-wc5@3R-s@(E=LDTo3nt$0W{2;mIBzMK_?kzX9i9hr_AHq +AD%io8iJ8!w4wXhzoPH>G%Z3!)j(+>$HnYCaelu)`foNZ-lzdF;+*vY#Gg;S=SBJ>&R4_?DAr2j +iF<8e^zsQV(xUj@g>u5Nl}2u_NYcxtwL7L_}`cJHLORH>b`l|L*2ndpBP#FigRZ?nBC2ZW%Zt&7(1F4 +|P(>Z0@7y66pqXooRN?V>&FAR@;;h_v6!tb;af!b9Xk0$!$7K8#d(EjZa#7tKbnj*l?B{TS<=U*3oBc +WtE6{hq#GM5r8cowr$0^=?X{bjd8W7z?e)#h*dTHCAafT*mUTlz8AR*r;#wV+T2cqsoiFjeC8NerGw% +9wiy%Q6+)uUh&!Pxy?sVs`Rf%q031*bv7NHdvx>wu5m?8VqciOy%d++pi0&P&uDWpliNqcfLG4#(^n6>qN3z=__Jiu~9mViRV0e9>`7|KcXGn@}3B$&V +T2pf9laBk78ppd3=;=>})8atzb=uJl;~S;Q=ZwBaI(m*-fa6489ONVgp4Iv6Dc=|&0G8cx2gHP{Yd$g5~6HJ`~WBqA0jP*Z$8 +KsXYOWs!X8DQ7;VWrn?AcPSm^y*T2)?!=@b~{s^eT^;{B4vrgQ-HAxUqhpFS9bYdo#VcROB-p}`VO#{ +=#>FN?4`UVLYf6H1zcA0<_M)BmxS2Ub^#Suy>;025PgiLRNL4Vui!RwUO^S+VL?l#IA6ui;N7TlQ%V1 +i0e5<~z4$3Ik!0C*?l;9Lp}m(<(TpXlFM5HE;2;Va#1Q@f(O^fD3%h_qO^gsxhcHq&eT7P*rqWrOsAD +Fu8cu~CCG^Y^>=a}u$sBCppC58bCq^0r4UWNJYCvVvY?o~M&=T70{qd4?+Il>|^dpsDR$!Dc7xJg3+n +1<~-2HJ=sPIgx(__hDH+iPCf8R~?N`AuyxY0DVm)5#Aa5)cKJQN +8r#`1=E-2TGUtY7=0rXXI@HZ)nb0qO$mKlXtRxW1m&V$iVLrh2Q=3f)@%69U)TMvAlxTn@4 +wD(e=(xq0xl>-DaP0GjnXBUI#(sgVYu#Axaib%sxst^BKsPcmp-%Kn@cTtN$#j*VkX&vYe9VYQzPMO9CK}<3k;Pqje6`SDk!S8| +J2LsfL+n-A-QhU96$*~fwGX$&0+ZC}>>bxssS|aOB!MKqHR1u)IHzZV)F>sUm`WVw#psr-$^RRC$2lMVa|W23HvA8|~tBV{ExNaSE<{i?> +W6sD<^WDR_5995DsY>59Xr5O36n2Xo*44dJN$LHg3!!}uni;dS~O-^6V$bbfw} +AB0R68gk^ZEQzV}agO4Ng$9II*YxU_&3H{@`~(g~zp!6|l!r=?{Jtkmqgm=l)>m1Al#;et-vwK7jWF2 +RZXrNW&Aiw+G5W52-Z%>USu5V=c=c11gb*U35;K5NDDSjtEj>QWewAn^1!%wj-IM=0w>jePCj}*@#8h +@h8;N3t`0)iea>BrOLq-u@#PZdICPKs8O57_8YJ8Cf +BsKkBuRweXr^XWvchAS`ERGlCHy%V%;VF +6NZe#3Ghqp2RRGiZn)oEw})d|x4ddXi-iN)R>Q~KtRni9VT0O=+8wP13XtZCau9msC}on|H`-?+UhT- +cUSt1m`TJfTR@m;4^rUW4$*bL7(sxL +R;~I&FV#TN~UJ*`@d3G=M>Zewhl_Jzo$EH`a+tjQ@n(?!#g=RM+@yp5g|r?W4pmD +5l@fRej@eQn2bI_R=uE*eaWR`}9R}LT_vyUhSadoA?|!O~ne@dE;y6*%2sxzE8@A}C42s) ++a0oWJe(~($Qqx7K?YMICBF-{3xH;48zm+n&(OIlyEbeJy5Kn8Fv1~V`%KRry>3Ki)W0}NzG{eW1qz$mfIL^!>tDT1a+7^`o6ZI@r^PZ8tH+dLcQBd) +#68m8^hNTm?||_Y=H{KftG-50xs{+E8BPo-(ZrCgH(YsG)i3ZIXvr!yAIJ1I1+|3eAG`!(*vz3p-V$U +-e&iN@s6;hJw!WBNiTmI!*2cAaYb6MG^|t<*D6ljGNxxa#wby{^@$lzX}A%;B#2QFge2FQmc5!|TuY6IBC!Bp!hhq@VTsF6oPl=~ +~Qjc^@v$mX0iYjB4%v=uOtcj>EgNyH8ME26&kBlzcB;#66|npv^yl(-_wc+CEliNo*^7>I~^hE~=i_()vIR*_)H7rVe!%1$aX&2==FiJA&z*_a~BD3d+zcwY{ +y-0fJy)-#IoN6jF>Gz#vPr}MCPonpQ%0)k_ag@HQHgQR~Ve?d>G&?+8nXOybQ;_s{4^SgWKKj>ns2-r +i$Jq@!YTR>`g>p!-8uk9Zh3{`1jfKz~tMvOSopD0iY&^E!S~6P)bv_j0$tW4)3>DI5;8BWJdc%1gu(3 +}@2~0|SJTQB3*-QH}~1{1R?MEQG)ryJQ1hu^oExXm99A3zd +s@cmXxto!($p@Vqo}Q+6oVMqE}wk9|Chuc87>+{5d1`z+(#COfiETLvV*dn_(&$$mVw`IJL{9y#s1BU +&pkeq6$~swK}>AcdeGzCrnHWaSWypr08D<0(hEYtSxjKt&wjeF$Hul>0j5wI94y$leWhovClL~B>{9( +_p)Ylq%ro=#t2+ig91Q{f3O^Pu&}vMy%xBGrG!qfuz=8hy9;Rrbk97t(LU4^vqB>pBx-?~&=-xT{e(- +WYr{}fz@D^2y`_0gPI1}I14lFI2-6zN@?b2TgD=J~Egv8^Vm2f}tAxHZi%m*=@#^WbR0qYehJ5H^+P! +ZfKeCeTtO38i{;?o!1G$Av)9=&XJ_IK+u4gIQ-nL+mQq)}gPDau{9Md)W4}|8AgctCfkEqWm+a3h1q3 +Ddb?0Fx@59a+!EB$RYzd@L0gaSbdO2o%p%XJpd<3jTpbJS_`;P*sXkdj&;+?=8&afVRwO%UJ{0Uyorf +q?g7s9#Z&;a|6A$*ztI1$(*Li}|9__cU#9=J9FCjsc5N^TTXLLGvJ^gt0JFs;=p?t7VkdbN +94@#0vC5~W2H&BO_pWp;PWe@lPd-73p( ++UdY-72ji-?dx6I;unS6_RWStGO16N3&i5I2C~KZ6k;Lq7rBOyv&|_lVLO(I=iQgvqBC<=Pf;f|O{(T +>@-Nv6uAsYT4D?OdQ%>;UO-*bTncn-t?ypd-DqQZKft#@I}D8oM&`p-kYAl$DX*#^**%>(A&Tg}q3Kn?mDN!dxosfs8Q?=GGOapUDz?`MlAaxO8={0vbZKx +LTG`-$omhd#WEMja$;rl7q?G7&|Z0RY<1mWUPQ7<^|Wj$e}066YBSlHU+a4_zn;i{w$=vpP}-G%NTlX +nLxygQ&TRhy;7L1rm0%q)FQ-{Ns^V{zEVB0IFPq1)9qMkGgOl#(DdB;pzKpNpFu-q2hmo3?qW4ag5Ir +0*HZfzVK}jqI3?ZKR&Jk>iks%`04$zr_+;zjhI{i*Q%F7}FJtEZ*;8kw~oezqr`rz7;O^(7Uk*T^${?yJ>wwJ?`T59*6ZF$r!VUD!*j!VM`yd)#!v)TEmNY4JWxB&2Xt$PFdDY?NM9*Z-F +5t;0@I}6&^4;NMKPYd+=9onkuwnAhXg^8!f8Csc7(W%wdS97y +?4CpFka{N}NX2mV@H94rVn}9}c8J6F@Qh2eiy!KQ(`D`f>~)T~EUZEmE={N?`_}#8_`ZH93;WuMurqs +NNi7qXl*5oQ1>&G~nw3?(vlg1wW(K7yE1Uw4Xjq>!%Mh`NatZ71+%~HZBMS4d`Qk9HmbHOV6S|>}x^A +I~K{}7lc+}U^EAzT^QOK&~7+t>xfp6P}tz%R!Oviz)tI`B(;K)+A659L5DP@gwwQDkPoXM;+Dh>){n`r1xwrrF=GXR$T= +qnZGmthEE%KDQWETVpH@$v(xJSxexSv#W%UDfk?&qjtbQuo>c_&z26+HOhRZz}5-A5##9#Je7 +IE^`W$Yab`3Ht1$=@(!k^Ct`Qsg>@WXh))5+heK#3sMRkahB_%Umy6$j>tz-?5f=GaP#lxs2i1zsN<) +Tn}By>llvRkDSf$y>x!ca2${1WQOCIBnu43-bS9xaC{D1j$}BVN0h@EjuL?!#&A3zCkHUR5plxs7Q}z +Nlj679aQpP8BQPDsbx4m%_ARSI6mYf?`JrDgy)ZUw!NOShv9f#T;9oW6qn^~496py@j7-lnw*(?H^70f1x*`$EYQfAY-SWS)gEy(?DeM=a4yl^k|`2J$nrGU+6%;qq&84fme%;qo5CK7 +B;GMguuO$^u^VK$}ACJt;4GMl@ZjQ}=#nN1e6$po9Xnax6GV*{I4nN0$-SqC;RGMlKyt_}z+A7hp`Eq +3)pU|Gg2eHXjBB(N-GmOtLnMt81{7^okJ>l1iD$9`8&aV8m&QbR37+zS}j^wuksmI^P-w2eX|m(1vbO2) +%+e6wjDpV;eMZ60E&8?Zf)G4Y3IP^5JERtZ?v0j#>9AW&lq@l5b-P-ipMI{UOkMV)r5sG~G*g|e=#!qx<1e +L=PH>Z))C2yRrr@w(cE!T7$q?EfHg{I*)Uo^(vqDyN-9o;sRv&8Ykg;AwgWFk%v}_IYLRR$X!a5NJhX +Nni#8D;UV!%?=OB4V3xQ>o*JjCVrUn2gusPG$4abDp +!T5(k2H{N1T<+wOb9=P6hdizi76vY{5DIM|&J~AN%egL2Ww?4q?9J6{4fO8|54>9u_XwH_49#Hr(6n3 +1@-tO3G9eRh*W#;q~rs@)<5#dhMvu$FjO#z@@cuY}3zl +xy>!_2559Os``DJOmF@H3VsddfQ=R+O4zMbt$dlZ9s$rL6FZP7E%*;x7giUeSs^773=a&Jh;rZ93DYh +qw!$MVx?7M-P+qI?72^_u&6X1*aEYB1%EWiBjP0^I$r68kZL&uQ`BwR>z*+bc>L7oNC3shZemsy;?_< +LsYwM;BfHdd{16|pQ4ycwBdOC4086TXB6cfJn0vE-VrGMj-E$6WmMjGdP(mBh&?ZM!z}wkmi5J93Z8P +N`Hel#mL*LkG?xv(w6c|F*NOc|H+59VV>ds7Z$EO#`e1s(uyke^)uF`RqEbRjCQuID@GJ$Zo~4VV4zJ +SqFsCISu4cW+Jn*0mye@zG32~Hbj_%A0Su!b*v;s6>~V!2X_+ikD +4s%TzZSZs|J-<5v|Yc)L{2K94~=Il@TIeKO6Ydxm`5G|hB3;wQr!}VJ3IvHe*BH~15T_0)Gyjxr&P1n +9XD^j+s%DkYdN^iwdo@mC793PRdRXJy|fS$`#(Tm_svuASy^X4GE0x7*3>2~V_RLe)`%sKpk!W?x +Uc7ul7RE?uP!l;jvP?)K^Fp}Zpx%+d>y*^2GA4=VIs{3!4`yQ8jH|j2rHv9GgtxaTTCJR(g5%iGPzzqzv3Wdv7*!)Hv#GF?2vjj&iz?>23GBZ!4g+`?jXCQ@6>OuUS4K&1r%a_Yz~syJwk#Ig-KDdSEYcx!;bq0qFEQdAWXd +BWzC_!@TzH6PYBWk94bI_~h|}@liXo{WuU*)mq-%gT6m^_B>XizUVmKk1h2|fJA0W+IsNrgS*$S&^hmR+LxCmhc5xC +kS+6j^?eNGpAgK6SqjkWcOF(kXOCffIGa!d@W-NWTv3z02&cqK=m>BE3M?{9pWt=ogko?>^uVKVP5R; +@;JfYqQRVrU{q#G_QF#X>aBw$fC8XY1xUp9f5e>%ere2n9mhe=jHFcXQJjGa;4o;Y{6sKAL_Az<$=ae +O*%}{+2hs~ZKF}G;+zkNx=SEyM~-~w6uIX^S>GP)^;o&ER;9pDi3DS!SM_i&$v9ng*8$8@1nT!P1~*~ +MnI>l$?iPjBG1K3?}`J4`>1=BjJ;MYn0#j(QTiQ~-rz@@POc9@$<*3xGsSkd7#!%SSUJ;`Www#TfC6C +u;nem>#}Jzrza^E^G|95ZvBQViK_{&Ju{T67m&DxuadgtZYiCH;=oL(0CSU^gHlEgklOeDOJu5$TO64 +JRCRa_jx8neUVYv;)nOo|pN);65GvhXs-U4j-nX$^`lSDT{mV{dxE>q6>egs|-Yq; +RSZJmsh?|y{PH+LxG11Gn7;BkvY=}XFSc(sA@V1G{#80Q6|Mgfyh`kDb1oFBv8be5fA#_ig0vvOpzpT +mD!Po~2I6|XB5+q@AixU4`svY!+NE|_%`Unw5BVl;wF^PX@y|*2tw(D=wAuV9 +m%Q%6>53n6ICoCA)--81F1@gt<>)bz|)S>k%N?)G;{i`)4_kk4?qvB1ATFwS}0t>q8_^{)>yo^idQ;3 +u!0@>jFO&4s4#?BK}cx04#Q)9v9RxIJ+u1gqv10^gS!Ah9e+I0zU(Og@?SS(?%hL_7mcYFi+ev>W +gOk0UYw=YouaGORw8igO<3la)`ejd`bSGu=oY|XZaYHZIoY{&B<1*w9np?)~xP}CVzI8v?Vm^JSHBaj +L$SR@qp@$D;n^jy8(7N`v=G_~Ix@tG{>J=Gq>sL6EO?RsoP{a(!<3I?(MyaC +Q@}m~_yKnvOK})PIdWeD#Q?1M}fNu8N)y1_hxxo)ucnXUX%o5x9+UFinv)c1}MCaKMWu|Ujpdfi{(+P@){`Cr{4u|P`AEslgL+k75rULDs(^oc?=_`viZg*2xwj8By< +tS<^>yFyWf|<)-Zk6%H#^RR)%*NKJH5}Uib&M^{KmCm}ti%wrOot~ttPQd +;!jVpNG!L_DEbNBJ*Q +p}ts&K&PyFAl2>Lg; +I^C5b=$l$7$9ACz+Vc3{tqA%q|Gz^K^d6=}OjQKkWC97JYemp@u5#?Uil85UtaC-sA5Ctj2%4!hM$zA +;3HqJ>iUI>2)dW2bZ@u8kAq+u2(Cf7Pnqp}CBql^(Pcifqsu+5dn_}oPrWm>;e^Rz15Qa{w7rJ3By$E +$8s3C_Th6Wg`mF*s?a_Er!4X7I$Cs0f`^mL{h8tuor?0?cXjN+=HhjP`>H*wX_J-KS=Zd^6AH&+df_p +Ulo4ZY^HqI9Mj`jMZo%r~SOI`=16tuz$4sfMOKsHz%z3)TGGicDZ?uy>*w`c8M%&~w~WL(`5^RZJH1E +2^QxepNMe(=S{#^tY;N=r2^&&>y>0L!VYvLswr3?zu4w=0zDjZ9sSUX*G5zsDSbpA_LDCb;CK@sgk4Br;jA!SReU%)ID3FWE0o3?z=Ez^q9 +=SnGfl^?*tqXocF?_Z4rsC>HgNH8fF{d;enRQU6~Dnmn^9{K%q3BC5!Av@_=vcV;)pGr^3@VTG>##~$ +Hbn>G0|T+=IDLkN4zN#aNs8dUI&`!p8r~$ztfN<{d}UzVWRxf?XJQfx}8mwU9S*cM=v$aD&+I7*uYor +fqZ7s2Z%?$a}UOUh2ADqys+*dwOUlQ{X{UwKKrPL>`@{$rO`1$WkaKT9gMef9@R-)MWx; +C^=NP(&bM0Ly))s&|7U^@`1OU!{q}YwKqrak~cj3mU0OE))o$V_Ry9W;lP;(y`ilc(~`_Xw}^a=DcgM +U^`Q333!=_^Gr8CFF7EGghC@Y_2`3BAxuefQn%#b{ir6&OF$dZZ=pUffxUA)25dK^gMLUgVm0wAHp9$ +5bbNl@Rr9>7A&uODdu_v3+1-h$=9_Cbbw!5e1W1uRjz~;Uv6JiPM)#8a$=nJX7k|NUvX9A}p22nUc0q +@FM=W@mZ%YL>-1r@j8vZ_zy^(yMY*!S&?-ZF|`;dl+IF#v!EAKC}Jwj)X>W*PERGC6X}COrVTY6{VSp +G_GD3u0nB_D%uWGIgr07#1Sg>+3g1U7BxF_uWOV=2(x`*-Q_?7**$G`5RHN1mHC-X!YVoX>sw(QeOrG +`h*1r?=sVu^{px`e<_y&Ah!4&(Iz8K#VQ>q$pXa3+Kdf1^_j@+zJEq;+yE0U1*A*8wyLYYgnwS``{17 +nG&WVuTNzhb|8_JalU?qDFM(d$`{cXoF7zt?S0%*v!pGrH0g92==>J{LN|>}t +tRPf^nAb{3G~`ldJnC`MLc?Ckew=^e2{^cZE+Wk-R?^<}sEbUG2jyJCA|EQRNNW`3WS?LSKce +U0f3?$IWlsxUEU1kB6lT()>8Q=qI0#Vz>N^g?EP#eKBrt==UYW(0AE0Vk_3n#I5)4co`{>ZgJv%;1eM +4%ikocx9sHefaY&%ArhftSflHv!tU^VIwT%Rq3e|pQzSlKezW`%geYA$2r?9#j6?0F7JZSm!(BeewX) +5d-aD-F#MX*Q=!-(BH`k561}~h6T89&(Gz+@^1gh&MhAmWEN)uw#4JW3eQN+dQvQVZ3s&LbAC~*|kdh +)UOWQnKqF(vf99yp)fpfB!A?XM~O)4zeTe>abBLPG&I%wvVu7d_M3K4&}WRpbjX{I%|p>doY?-$YNt* +WaXXOwythek(A4#TI=oOMm>3ySA!!L??Kxv)5BI>Ai +fl{GWFH}%{gU}C{Dz2k#k+0+7JGky^d63PhZ>66t(k1B=_BP$8b6s*%4xkM`r|`o +(lOvJUWO`NwZwgsr>zPLUjER{Zf;4W|D%>Ra#i-v|CB%-qA54y1)E4y}G%VD2<-7ytF*>DOnApwnlTz ++dkCw6l>C>VfKPwe{<)eADD(Fd#zCy%BoM#l{bHgP*ROgwb9gTkFsBeXm(NO4hLdm$^tFZAjsmp*~ms +bLj6w!=vnB+gdgq?<$)(XX3^+#;a>(|SV{DJPD+T>5>s5GFXqKoe%-KQD}5F5VfcOH`-Tq@|~q3da+_ +pW4TN}$EVoNQbfH8wd6bXh~zFi#t}r^lJ6RcMsHLk`^`NZyGN7X+!*eEJuB2-KFC_APo%cpFKdh&n54 +u>xXWgyH=dB;FfuGEbWrovAN+66rr}Vn8Oll*g!p`r;fgnvL_qR3cjO^i=bC7De34{&sAZwNEfq^_xxNtRDU5HRDM +zye^hE-;%(PRMlJIIEU$qXR1%mr#;R_7e;p;>P67T*O6yE~c5qL`?);Qc8 +saVc$8#;HI16T$GoUZOMezIpGHli-ysv~lp=ZyRf`}|XI$P~du~{D-$%yHXG4BThWJx;Q@YFBvDj(>Z +ukwQ1V2Xm??ql8>9{EL`v$)QH#Nh!DdM6F$2bW=rAj>1!R@HF4XKXCm=-J;f09YxM-aU4|cRaX~KV;) +Y_ryE9f$Xjn4V5)Wr;P{btJ9FpV-2X%p$k1}(4}zU`zS!kLAmWU>oD*@Rv^|s=9uJ!cz*qpL0@vfM)fvK94G1WoSa7kw|N0HsSJ15uGvC^nDFwVcZM#VmGhP4s5{=HI+*t5A_G~8o+qK5 +iKNtLrYJ9{+0Krzo8(yfmXE;I+A{r2Ci9?u{Z_()TLDqbCT7Ei-DF8Ex(KsVJ*l(rw9?mc@X>?nhL8^ +NIx@%(c6N*1}_|Vl^r{36nu5bAeQcj2$W&$fz$LAk7EcKFST3o}@hqDxgK6~o)lf3T81^Q^*^>Wa;Rh +YWT2!pR69f$d#9J3wjU|yJz*4T7ttE0EvGRw8&H!IA*v{2v{Mbn`;F;G57UFl)F`Y5I8kVfoXa<{JOP +>{Zeie)$r{j3#cp(XRer1&s!E3Cg*SnW{~ANB%X!gh?7mtmtUERO_PTx#eK+}k7_h43dnr5be?79KZ178)j_+|;Uwg9}? +*#hdV)r&KAFhUTqf3R+a{CY}L@oIWsZ@xL7kYSbCTUf3Mzk*JLqRff7iC7<{p=->>_es8f}GC3R~g{0 +|07D2v^CLjBYzW8li=F#sv;%bC$d!tk|Y4FabeFmPXRchHN;CFylB{{7qO;`D$5@eEpp`3FgP*V2^x@QWM!CZh#4i6 +F3?Z~uGRA1$&?Yi1gXjyc8%WE=>inprKDA)6VS+I{H}t)1Y@f5oavi_sx70>`y4|JE^#JyUgJSOdUE% +>#Z-zBR9(n{pDbnt$6f2ot)jOQ`i73Miww$;;rO7^kXz{g(Tt3)U)+4&(Sw8^C*L#z4~IjgFFnj$BAH +8ytmQ6|stXU3B!3gpAq;nklxsV>U~C6)<4B(4=rlT@?rBLUuYI}_FI#U#PP&in{zi3Xf{N}(-lkU2w+%l;7^(rT9+EniHhQAvT}3y^Jx0`abK# +fqDF@!FU>)~_b&SV4>zA?5m=6%zb)teL`1kwlDw38<}bQ#3*SP=0*s4D;|G^IZC&a0bovL;1-S-*r-t +g_}|cz1*=Xuam;aCFz~mA}5L8byiDs(PCg{F)=6aye=z{PUpX}x4D!5{5t%0jnPo}EQk9!tmLqs!|yr +t9?M`q4r4e><}ic9jU3+3;h#7>!eJeUGKVc321PMAh{Ku*3?Ah0MGnh2+{pcH<8UX3f8_88haYe#b9j +}*uxJLyb2yX3J2_m(;SLTT;qVZLXE^+f!xj#`$1xbfp@G9&I2_NRz~KT8(>cuHa5INHIo!kH%N$m6c! +t9-IQ*VN?RZ{a9ENik&0!peb2-fB@E#6#bNDicH5~qx!|yo^;Pugm!&^9v;ZWf44i0lT+{|Gehw3kx* +UwZAQ=;0tcl9e9gvu!)z6A`H9b>TNaRxj7%A1+JZE)xAo&7cq`(+726bTaH+cQW*_H^g%WuAt{lb_6B +8vH@mN#>JeGM$VhF+2{{Jcf)X7LwqKdp^01m`OaDO-$5QfWJv(HT+G2c=BBS()r&AVt_obKZDC=J^v% +rel)co&20!tqPd2-8He~Y5i8`>3h69||LrdO+ej{1(~13T@GXLyYC8|04Qx94G!h3{0bd@t;cq73**q +VrIS2d`mwy|C%_7;{oJdl^oJKOac{=!A4mJ*I?;cMo#M5TW%A@9A&99nIHD79e)O@h?*1Phdrmv=}ri +1aMLVONzOXnff{9*3f?2;kp=qs;-zl9KAIxTs7mt^qmZkGu8&vElHkLJ_eoJz~Z(pA$_<5%NT<59x{U +kQ^|ub!0WVyJZZjW8s_&w$8!_%Zq?j!sV>%?wGvE=JBWCTp5?^>V9=A#TfE)6P6QP0U5(JgZGq9gL0@ +jy%ZhOh-12Z>A%MR=m+>&%!!LOtq)E>e;&7?nt$}2sSe{hZ-SWObg@3xG_$Q595OH>oG2j2g73+GA~t +h*wa&KJk#x290R&!I_!Ba6VS_=o?~^hNOmw&Vr~w#oaf*$Rm6BOJcdDk=m*_tIE{y=*2~*R=j-Pm5ZF +y06x_W>NNCSqVZHnG?brXN0fvEt28RzBI&ApOw?vE>Icjv|n6XjOjnK&tS@|3B!#u=x@n-Zqa5X +>`YSrTuXoiu0eyyW={7B0H|j>Sus-nlF#b$MF4HDg6)*2-1ct8;Q~ciHnq$C|b4)^E6bqq-tLnW2r% +=)x7-;cVbNBlXpppSjTgMUp7^Lz|J{#|XJ%{Rs9a2HMLQXb)ngeI2G~0Srr(PVF*ioU5tdOej$vV5zj +XWW5pgH`q5iXdB6ac5i_HQ)%hf&=}g{Lia4{k_zFn$Oi5YTaO=YT`c}A+6uEEWGc-qOVa?UIcWUoj{R +^hO%>g2@R#ih!D1W*E@oOv7VB!T&7)@YxeDTCdB<{L?(8%r?6J^KE|lCr=*tl_z(4rgloH9GXYuAT|crX=;Tixg$5Ah`P`mwuQ7^QP5^{{RIJNTm`-6CD( +Q1hhHud@=QcR`P_Acv^&IA{$o=TyBOHINpVPxm<0_$K^=^|_Xo^!n|tv-HOQ1L+~xrvHQKjdP`Eqcw) +{t^xmcDg|I1owX#jZMMaz#uxn$#-muLtEpM+G{2E<^>^d(qhyS-y&7{~CpD_Z-`3w}& +^ltRjg43~FlW&i40Lp}Q5!ootGQue(yyVB2Zt#^Y`&#a9k|(-8~5m$Sq+)Q%|YDU*o~Qkxw(v+yK{3K +H}~M?`aot5<7OK-_vU5;H}~P@y#dVJSB;OG`>E;sGxJT{{5&@gP}B2cW`mj@HxK0Id>u2dQ|ZCYsyrL +V%^TGGar0Gf4&!Epn_GOCIgz$~JC#dN-oUz8K*u<>*NZ0+@MnOUZZA<<0K=JD+dR$Bt=>k_KSCzcc~& +m)0s36c}ESA4ua*Y8Tri7rlnl*&(*Fo0&Psk(~{wH~!NgA9#8bZ;v2tLP +CNU{>DW@TRb(J^WU;KaU&yQ^Okmr^)}n;CF4EX8w0`fTr#5Mt|)%K-2c;af5$t9PrQn +{aX3)F9iPFP3~?tTx4GE_U0QcZ(F%L+R(=#UBCQ-t%XI!_xxsC$#!W+>2L2XyYK!7c0TyKhju;u$fLU +-d;Ez#Pd@eZGrxcKx#wSa@ehA|=}&*&`|MauZzxeX2ujPhsoEN_R?qcJm?|=C5r>5qX%RgVa`b(?wPcP7Py#RAV3p +D@J<^P{f|KGkq*0uZp3i{*ztG`=&=nrPCoB4Mg%=pZ%yDahB4(5A1n9Dkt@9SW`zk~UK4rY9Y*WLVD2 +QwZ`K$*H6KHMLlVO7@}7iQ(8=dPV6rixj)IcPsW&uX8&e5Ex_H0NaG+E-JDg*+Z`x1{EY#xyZ&jWsFP +=CHZ!nH`IcBtp!oE3DIU*RhcE$vlwx=F%0UQN#pNriHlwyz}$#$uGzUfzI=u{Cl?Mhj@8`L|0r~41|x +2%umYS2GZH^VKGSy^Fdw%p)M&2wWJz`=Wol0Pz1!f%*;%k&S#y?w$^65MxMi+ncLvQ{hM%t>+Wn8h?2 +1T8Y)}g$p#m;CXh*8Q63!vvU8gpJUvxR%{Ex=_FTImE60$X>c~mUwAv>bhU8ICcDn0;{<5;I=>{>^kZ +ZH%7_958X$~=UdA7Q9GCv0m=$-+DGo5)lbe#xP +I&`wSk;Z53BDG`ljWoI@mq*yjvN{tT2DOt7=3%_1vRylFZS-GZ6@mO&q9H9e-D=3qFxb?!cKnT^YZYz +#S)*zEc7V%iDx>+VT>T}ivq1x4F|(S3cvr7Z1q^BrDF|d6HVW!{7-D&u*5#>SnVpqm1s=)H>oT6TnOU +MW&z72IHKb;UR=Z)?Xh)uX^zy8n(bk+b!_>eX_@<4oFg5U)WzWr7ZOsu?|8415?W?nLQfVba)j^1ncR +6xJs{weRLo}Ubdh#`GV;NnWv%@@ZiCcXpyCuWoUz;UnBCF(ysdhK(8%x%$9%*^GpHAqfmXEbd_qeX1c +e<6bg1aAsBM-ASKY9Adn9l2G*x+G?R9*_?q7Ers>wn-dC}VbZ?pll(LwA;~Yr}O-lP>trzQTbOo@W?t +T?0K$R))d4+9s~Q`Pb814y?wRDHSpb&D82*W=fRR*44RuOK%WwU4vZh%+QG)%=hP+=1JObUp}9{&Ggv +MKWLXN-?|kA%J@l3aD2&IvH&V+{Sp|1aG=Rsl9#pGmTg_8_M=PEv+~3x;`r!Mw)ExX27VZKa1R~nksd +&LMEjE-bM>`><^HzeF>I~rei*P{gD<*;`9BEwNjGzFA1&!Kwx=yLB_tBVV0;H|BII*i*x`OOejdbcta +oJZk%8j|9MO}$VmHz&JrL3hAo?gjyLY{|)+33KBX_}=Mg41uU$h?q7n{akL;Rs6nh-w{60Ij8V}lyI) +d$r2mFsLiDc(uJz5Ph|v2NkLJ&5;QkL#8X>*wYukWJvr +!vzSO@j@tf=I@}nJ3$kXHTIue7L01pzN2__mt05PNo6GJl0`=YxMgS}s4pZc)cp5-AnO}_xrFI`XiC3 +hqJpq~594QuRK&uO6dCVD7~9?GJh+m;u6VRhP6LZ0M#={*YQo_+*qf0*>wyiK~52iW{MpVWhVqtR-Jm +UFqr$AkE29;NZPz94TBB>IpbD1Xq{fO3tm2k{;271=w|pA3k8mJHDBChfV2#a#;mY46d#}_?f=KF~hLS9NGWF(KT_eg)zH+>H2o18@YM$aaFH8Tkd!Dx*SJZ +Sp)lYU|t@KP^`wYeNZbo3^@$A*@(_6Hxd-7uhS*x2jyUd~EFK3mzwd +$fMU0Eidr2-+{yO(UkL(&?6L2m{|7UXDwv2>A_|3sgFV>PV;vU%C$og*=6h4KCM&=vdo_e1?D>wtr5; +q~L4)yLe$m4k5pXZ?_tEUq9$WgMe<(mja#p-cQSxr0GyL>KEHccYwWg(C7M+UdaHV&U=mR!QAod=S%u +M1?8&`uGNyr2mKx$Tdr2bXyyO-irB^qgS0Kn*>9>1& +?i?#^A?c&IRAW%kF8w*aBfgAZ*B7o(9yr9>TY!5eR7jKO}R0umg|LHm9R)&KK!Ct!+H{&2x|jeD#+Z) +P(zy@aWzo{QEwQVf8(0L(03`f>VN$g5AbCHSCE$6VeEu2d6{tfjZJXSr6^58|iMRydmqpse&R$H!)yMn9!f}z|&M1RKLM#pQ;XT2cp9#P% +w9m7Ss!s#JgH==*pzm2cDd5~^n{UTL!N7#{O-&R69s$@9A;9h>fvmh%#f75Gjk4BYaRR6`*g!DK@$gH +2;+pJrEI+k&)>c0v6zImLGES0V|K|8tMzuvdjr`*e?P4P_fh*W9Od%Qmx5`CBF5KV?>XJdq+FQj)JUO +x6AAy+mV +_=@T8L>7$9%sPcu)7v&sp5&-c8%w;v884y4Qh{0q)dJxo6H!`4Yd`s$Nys5|WruT$EGE}@uhNfR3L!* +BtLp48=woojsG9R9QXbbhD+Ln(aqnISKZcLk<4eWM#v|D0s_xsQJb_V}*zMaAUE9ct>Xxxu+mTG2L#d +tQAw!ln!A&Jn=v*N;DQmUA_kZcB%`zq_q+~sWLl{`=4?N*qGtBbTiQ5u)SZih*}8o$nKVQQ8*J=Z=jD +`!Qvm4{soK69*g2pylBlb4%qjTi0N32Pu6Aw7vPFE49F4v!%@w=GGMu9;3V!q;vg&95*`EKq!Iy47_y +wT}nbCg!F)vaQpzvaPqJu13GldCtML#ZF6;<(cTn7PF?U7p=*;3$xO#@tLW1@*ppx%b$^uRT%d?FI157IjuG_Pp~XBCYfpQ4?P5Hs%^U63i*4F;znFHA>WgP9MNizw`Ylvk?eU;B3 +x1@v7Q!d>Kf}c_BK{lJJenBdK;#)qXWMf$w{rclGaB5&$RP%GHJ2W6V|0!Z5SJrLd3(`uONN8boTHx= +b5a_9V=E??MZfP97`4$UqU4VQqz&?P?ACOYiMU7~fJ +NQR&t3!1QwI6cfcP|(!utPLHDY|KfYXUoco&vih$-vPC7{Vgds3#mrl#WUh==8q|5+qVzsXOU(LtoA% +=dY}4XTm*e0rCt*HCpm~4<6&f)iXmnvBqAOF +U(g`$DTdLjaqOBEuxY1}qsyz!ARTq*}=8`@;gHe8tN88>T<_yLx#_7;r2#I1G!E>~bboI-(v2$J>&Fy +yWgUGM`Q17-pb@KPYz_=4bI# +p)&Onx(TX}Bmwf^6$`y1{7jM>aWwknDe@8&M>dj}>C<2anmVGM`S97b|DoI?YLVI1l>Z1HCB0*Cb+{* +}Wz4$pE}%V7D^-4F1SrJ%{@_+{5ADGY9%-enm6e&)fdDx&In18s~N +%J|%?LcNnjyKD-`zdP#}=o|3|3-1MI9WrKefN9=Wt!xzXopMzb|;a8`J(VsOGg}yHVH3T6w=lW_fx4OD +a}dxTSaf +f?{PfR^4MzW|P~8Yb&Dz!9G5$NV<})b|JfgCQ)yZ{Z68yb)mhO%Q&VhNJ`h3BDw-Zvi-N0LV&!#{gVE +fce=7u)l%f27u!Sf}D5@_yJfukfnw2o!6e`>Oy)hBJIWz^8{ook6~HipF?1n>}i8^O;JfKx#X&j&wo0I!T?WxoorH45?!_9U8+Rn +e@B*#N(SuMzBJfVYhU*$40>fK}r`E`s>00iGMr^7&VQLt`LsV2@`YhD?HZ5C`Zr1@Z>C4&bt>PzJy=0 +lso8A%6t?Re)dK%Hoj$E{p>nfcjbla7`R5OF6*$IOYc-E*v3_aJrG@IR#)5e0AWz4B+$d)dRj4;9ubT +0^?e698` +nm_HZNg0dj|DH-H>ux|nQ!2&|I0bU0X7q>9}$VG&_a67A)KLYf;gOy7Qa6Nqc!T&aZFWtfX?*(XusaP +G@X9B#inB@&&&=M9FVf<1;0suDwJi3(GR|9Il$Z$hT8xtsnC~$pP1!@+_{{E-2t#69b`AaF8~~EW%-W*xXQ};4dB#Fm^T3)2k>q9Y5^|?7@x&(6 +To8}uK}365@-uJ!dCbQ)CE}uv|7bzxDjCWDqdcIuV#Z6@KX-Zv>JF4>ki<%t64pM0q}SZ8$JA%28+-o^Mc1>oVkSXy{?<KUfc}*E#Qp+dv0OzhXH(I3-iAR;3fF70sj%;p6&3B&`>yDVt!%(_Syk_33w +R5**kds0(^1@3;PVfsilmzaR49L#oEGdfJYvNHVb|bE_#IbQ2-}C3UfoSpA7J>-HbjWz{|TCZLb2{{} +^vO0PlVrU($p+0{F_~EDx^&{ONHPXA8ifC-^u5uznAV2Vu}ttbagw{%O`X)&u5Fx&?msR2=F5Sv;U0e-Zd0X-3xpRcpO0cURKw804jTV|MM5XUk2X7*PdSiI={l= +PXc)KRiFdd*8&WEjr9Xz0GDyx1~BY(@Q?NYKid!UO2EGWxZwaH{UU%q0M8wSdI$Wk0PlDM_#SW@z-Qh +D9tIrY{f8jmfbRrI4zqCtq2Cc^9{_Om5k}{HfRRU`j9?!J(5Djk0dNDr_u<j90S(e$ +VkA0VaP4bq(<#jH-jMfJX!L{|L$gcmTk;AF()-0XBTZc=!UqH@;wP;Z1;ZzGQWj3~<6%z|&wK15o;k_ +g4TXe$Du8GQh9kYXmj#}O8CKM0@X_6XnPIKmG(j_`YqBMiLEa6CIdlH&;Ha2(-!j^n +xU-5f`FkmCs7<2bG(;+bH?5#qU5%p1ZiZjW#a#}V%0IKo#rj_@SM@to#&9RL6HV|R`{>HgqwV9{=b?y +cqH9^p2&o#y7xht5;>fIZGnpxesFaJ9I+Mo<|%$;W*~@RW~}l`w#~cNnSZ7>|bDloUF#r*p$j?D4nGt +!muuw{>B^s|)+*yRhHig?)7w_H|v@%bnQcI&2Hr>z;ys1&H?rzwF)kjE0IasyXag4S8PIW-k8|v_G#l +^YB-}eMp_{o>DGe%@4 +S`cJ0QE=;5MLbM=%`(+tj4VAg@*B7_C=+O=qwPu0}aP&1t#>)^kO%GC_&zIJ1y?g9i>D!F;>DP0SO&& +asS%v;cZ&8duxQ&rr2mAPkw{Z%wW{8zypf8b{ei=UaZo2mbrnp2g`qM62j9@A%LNMBK;Q#F`1u*3XaJ +$3m!n3~X?=6~ze?KM|xnlKJDx6WN+1`k)WA$~A>y?HF;=G`@?pa>aAA6?x`1wAgZwE(=Dqx+?JY_O%~ +6!_SI3Yj^hf2wr7jyco#Y2KJK(QV^D=1i^*DBn`=nSU#=zyP<;6FyBoVI55upN9K$4|i)9-xm +0ke4>HR6FwjK^zaQ(kk5lSum2jKM@L7K#Kc50Z{9qzVZ(-YJYH5-MqYgJMe^#auTmcW;DZmymtTJA;& +U4w4**%wws)To*2LYmyOq~7-XUAwx%f`Ts$8-Kswm?fMcML>a~W{Lsx9CBwCr_2wmkmjVnw-4dNr}z?X>^cv}qH0(s3*K!-gs3mCdoFa76;yu_~VI%r%ln?Q!Idf=T41d^35ZU^&^h%SI +~iokeP&UPXq#t&kCi6f&k#A-5h;$hhMQnS4?qOHL>x{;Wb~om0r1^9sp>Z~kWrS^Tv^(&`nm{DMLX3J +OR`NeQ{{zWc~S4?RR4e)wUsd-ra#XU`t;```bb*6-fEd&z6By+-@8H{X1dymxpn*?LJKuQe*<=+UF(* +s){e#EBE+^y$;&?Af#A+_`h)lTSV&7r(3{?|rY3Pe1*X@?^Ey93|&Lu2m-4cMS`CsUL$WU(@btXJ+LyOjILYsz29S>?3apOO#=KM2A{Lii~V-U8uohwv* +P{5mC=Y=`i>A^e{pd^vSKYA +!3Nk-uH#UMAqoObVT2|4uwjA<|rQO*PtrEUySKAA%lm=r7D+((qgzYwL#Eqn-s$F;af2tO6VCqj5!(} +20YvL3>3hwzU<_&-DV3J8A&!hh)&9)yo1Xv#JaHp+Y!Zw9{Ml^VD|=Y +;uP6};)gGWw>jZ`RzOE22a4BuALTd^X+ILb1@6GV-8NMgOzryfI44=yID;Rzq!*6H!&lsNPOgql-=NS +Hq6TStH(1S;aA`2rGGnd>-L6k8q_nDOX#Qa=kApH%F85OByM^t|8^tK61i8#qcc|-oWtv7=94Lk7 +xK<48NG+S26s0hTp~Tdl>#W!(Y_FSJOD~B*Q<&@IDORgyCB-d-i{K0It`ZvQ3-MV>e +*DaBzaEpP54>uVNVMc2U+|anOua9;;A~MuyF`CRKh6i4)TKM~iSnncfiL}Vp^(l|K)>f_55gPgWcsJ| +@cpl$ki7;5K4eHeM;Ol&YpLRnNE5jR%05(~yPt~bYPrWX1Y~<_BNJcovw?6sTI(2$<5jXgY8+^P0Z!+ +Vm5!e4(r$G-5wVur}1H)Sl#>ie4OSr}Ai2>?))UErs#~**ZeoxGR>ye`I_?{(hu!0S^ZVHc#uvj9)Bf +U!8z}K5L7vqOTnl0gx=E$y3dp@b%fa}ftTJ}`b@l9e1$u(;*ZqWEA#&6v@l35%XZiy5`h#4gR8Goy}b +tq7<@ED$5yVj{whi`CRx3+)O8X6GJ6ZGQiPj~GqP^j;`ZmLzKR#45raEm#Tx!l!D5YeEkrXGe)M&mP; +YgGv}SR<{G5#bt^&cAFBVQL#@3V6h=MlbCGcoktbIAN-s5+OHm9i`CR#Vip=Nw_3J0{k>r?e&fMd@q!49RY`C&$j7eEPEnLZ6l +B{$n;GBZ}T=&DIM4eG{h9o{NT)0qKx^$_sY}qm;BO^muv0{bD71pg=C-T7$Km1VS3J3GvQm-7d4pqt2nZXO4^RZ4AIue7G^N?$5aMpL1ZM#q&kbdKZq6&*YW#6G;DPvBrXzXij$XZTQtw=n!bh9A +xFGZ}sv!>?ud&l&!1ocl9R`7=-X|C*=B_b_{Udivm4PrRtv)1z@fKmh)@tEac8r-!Fcb1(OrHJ@fZtL +N+2xN+0Q0kz$0HG6{3J$)KBZOZr7cJ~VK5Aav&`!@FrXiy`dHs4V5i6@?}@6*^X;ISHhPitRzd;2vHs +8;Q9KZa@cmzqy_dem(m@L08KHL6#s@_4gawLBkr)U$bm$Ewx97Xj{GPgZrS>KlO8pn4UI|2L0Hb@=SD +hBc~J_h`h1l^8t^&K?_d9~O&j_L1o$^){CWQ7{{D^p{eAoeef7EFnO`3tajHzIg=Z)g^#=f +zm9ihuans#{`|)7Em%2ZM7Zs7Q_|2Nu$Z0-VIJo5jfmzNiqijG$RHmP2{I(r +uJCr0tQZoJ}~J%#w$faLhYYL&HdAFts3;48u-)Zcsg^5xHS+}V2h^5yS;`st_h9DB}Ox^(FrA5UJte* +H49OV1uZetgYmpM5sR&CSg}I5;>!qsc=X2S1?zAMS^LkTnAHUz#*&(vXkfRm}>*dJG&m(9oV6e}3xl; +luNI9ZfrS?4a}K&lAT}I&|m|HmK<2$&x3Fg$))IOY712_Df#lL +Rdx@~69o;~21XPyD?Jj`aZAI803{I6ZRMx4u}HEh_h9rG~t!i5WzmzU?{^PW9>=$mi85qPqE1n&5J>e +MMZcI=oq2Tihb&LfVjbJu_V`R8KRyIVYF(Qm)~Mpv(1y>{^6!7bl?_uWaJ>sQ>zbiT#*){b#V1?>Ie& +-oPQa(3V^J7|y{GLaqlOFHCd*^jT$I+ulg$z!g +J}u6HBW!|gSR4xr3q^-*Kpr?kZm=D|eDTE>0)NPm?Vlir-+z}+o2iY@Z}IoHah+}Wnft;2=FOYLVMyq +IP*6}4=rKC*|LUu+XzSLk#4;z&nS~95|B%P$pMNeoa4#q*5VmsU$Pw`wG{6Ty-(V+@5pdi16H&}jBE# +22Z9gXp_=L!RCsC_BqJF!Hvd$6RxOuaXZKeJ_G1uY0ef##bMvWS^;~YMf{UzifXaK(8Irs{CAPeA*&y +f9z6DLH+XYd^S2ENb(&;q={f5_POBa!(KQRsf6&U=VDd`Z-%fN97lYR)t?`H0B(L!#8UM<4bddQE8dwJHzaV;sX^1~ebn`aRkbOjf+nuF}3gQ3DFTX&S=eB9n +#+P+r254Y8{DBtW0zCqbrO^StgXfSD^alD5zsqYjflzP8zsE6^hOh%fA&hG$rlB3{O~Mfs|JXvJM%%R +KFe`{Z#|)DGANtSnh|pbSBJ~`6g)E>~&<#lkY#e$9y@y@MBkTh0+0#V5m<9{$f7in*4PEvUb^J=DA&_ +mM#V#Vh9ruqv`{K05jT^UPIi$kQ;9E+g1G-+8eu4kEj<^6g_!)hRI?FZ+8onipU>d@ihTKb3k@hq9C1 +v6N>#x5O$C(lxG{`RLC`~4%(Q)h6E!wwb8LgaTp(UdYv~X0YKw`l6M9+Ok)b|uoBxv|XvuDs9Hq9Qlw7*U)@Mk&CZQHi3FZ=Tuz#n?zN(b~FdhJSwqy@STJv#a2dU|g{FlCPGLhmMq +2pZ5{`hn;LjfOraiFz_l-M`V(7|)9}_hL4a|S!=L@V(0{hIROCajIZ2141vDTYl%-q1AAWMfR3qiQ)|s-HhLuc1##j~q#LGl4Ut}7Jh@L;E+B +1BT<=9<&1`X1lL4&ks_$0rrVwhiC@rRuuzHpx9?4Ut*S2{|w5lIW$rYRk1?W9hW^J-^$KZ$7=--T{mx +j=`1Q)#d=4Fk_J4LW?b`Wrjxq!I!!P0podFHVc_c0P +4zX6|Ww?fTi<|-N!<3G+F}WkHVH&cThSf~Nw#B39`sE)g((#ACkow=LQ>P} +7h3v3b;0@e>yQBraAO0Te8u(4bD#SLl?bCv23)8S6xfA71>P!x%!PTDs%|0nD&Pa1dgwd>66HOm#qA7 +#TG-uoZI&pZfph2Hww9;~nvhZhrFZ7@BNd?}(3rFAtykQT(Tgn7JUY{Q${(?s6|HrdJ=p&|KGt;nsGS +k4e0DA@vHjReG8V&P7!|*VgIgDu-Vy5K5;erM<_@qv{9HZSQrRzU@24WcU2=vvfSCidtC*(!4>t#}&o +!q%|hxWc3O*^M|plwr`2DXKDOv4A7J;Ntuj0>S-7xK^7`wqlf&T<^i+fnNef_$_N}8`GdfTn)3B9k5cbS8z$Zz2PG_I=&KLu|oe)ZIF%79 +q!y8P)KUt5a#+U`7@JU8pjHZ)1Oa1TMxpNcX0Q_dnn&qUym5%agxpU_>o!+^GKACHx9n*tot7g +w@b@seMqhYB=!@pRMQb!nRcC1PRn#eIYKKJCl?7WD-UnqZU^&oSOziEB@_O-;v$L|KNut(THa&oeuL9 +bu;k_nEmDc3btY3*=+jx)!AJ-?~hvr8*C{{jAxefRF&AqRT@{r5%gg{Yrew8RY30h5gt(lTm`G#Cj-|PC=L)<2_Srmc +xe)SEtOw9w&wEylquamndLwhZ)1GCHu~@U``D_dK!hhSgZM8Vp`MbowWy_ZBhYT4KKX~xqi|j{*9Bei +l_3qu9o_+RNdh^XUY2m_!v|zykfe+UAz!x+i79dVYIw``-ipH);2Z@pp5K@oJ +6%dxlS1k`xK_@45a84i26j85ubh`op@O#_Rre8#ZikuniMmqokxHVw)hG_vq0>-X{0Gk%}%yQ7%^ZPFL{N<+Q$OD&FM0q-P?6_d@;>BVg1aoV)OerZT6crUk4I4J3X +3d%r=hgxj-~rpvchDfaD=p~IDLFQL>sQNOp>6*R<@l`T7>LjI$tK$L)=)b3#YVb$<3=INyTbbqixw@S +88c>FOG`_mY15|N7%*S}jT|{r@SWF{LYF`T>;iNGH_+iq3-%xohoSd~(XbWlM_?U^?~o%wcA%w{#^nE +c0zA6k{T~3c?WQLrB%FNhwbylXrlrh9Jt_U(O{hcjT$AAR(ZpaJ~Bz9HL(pdmUsntJx^DRgVa +iWLHX@ESbFXW$Jxfd9ew$W5U?$hBbyumRWv#)S`N+<)hBW_WmbgtFXi`T6-pidyrjT2cHluRi~gd_~8 +45%{odiE|4)RV?g*hq!BhDEwQJW>PEL-9fggPEfq(o+2QL;eH*&-R##bJ!b>zy+>Oe#< +-9XQdj@Ebez7z-8T#!ZpUa(t;!Q*k63{MSA<~w}pP|`7S%|gDyeWagG=O++}@)^V((q1?~cW{rZ<gKoJukGu)z&>2}jV4wM3<;s=+8{D1v>*Jz6htcOY<;es+Jw08(gD% +_;+JG-~3%(PyNZdI;UG;$a{s;Vl3)`2_e~#ZX*I=th`YdFzyHa8!nywg8W1~?zrg=N4 +-k(KJHcbDIl+6#LGJHD4mgL;hp&Yn<28k-YcS0Z8+U;}bhkV`FH7I`z6jUlz6JOU8lmf~N56B9P{guA +T=jg&xTE3qnSc8q?wAA5Jv@}x@lpy0mmL!(+*Yd6?}iBzPAQ7vihATv5BXSGJGyB{wX~y`b~I?mDcX_LqZ^JTf4AeUJV3+qJyo?{MJXp&#C{+5&$-`pSuf%o6&2 +V0z_J?V^5EPzkYm0jCMKpY=lf>%`FIQ)kDVdsep1otDaQV`m}vYNqV9*(8XNY4QB!#4W1<(oCOULg;8 +GqAptXLLDpfl0+HN%4bTRxH=bSg#-~PaU=|}cUM>#*Yac(=Db71_2p*443&NnU(J*(EquosFtUuSJE_ +rNuxJwFo}^2Pi=l{0?>_Tia4XR*GXE}u1#`{!ED|2y|<>~jm*Z+?h@Q8Puo5p^!qSFk6Jz1V}-iS}Nt +P_5SsetO!pY0(Q7EQkUQ$epl$KzxK>M=XM`MlOpy1=sKyZD7&edLe2&sCQyd8}%LR$)m=0ulcbC;5BG +GuNQ{P^*z?Pm=}38cp}$4$eZ*H^|Ary)p{RlW$Uk$wsldWU3Sq2F~9!V2iIpFz!Su;OXrT#d()%DK4z +-62l&b*BI^aUZu;yQweBmQAJFR~>O-hA2J`V?NuBgUOyTuwH0QZd`sXkpf8@Zx1@UL=;yAGfhW%jd$; +g+&U-OB=!=qpNoA&{ +rsrCqJI3mi#~>GH5%0VP-B8V`hTSQ2RT3TAAPOVwf+uV&~mlA&VJTN!(97iYe)ekylKdI5B? +8lqtjYwO8PPeG~8k4g2e;HDzn{KGd189}0a$jS01l=~{hh(jc`joE9r^5c;_HZtdH3e%D&CYYiCk-#O +DD>RqT6VNVl#<5C~7FOK>OY7?TyrOiKia91%`H=RCq`Ld+^k(14yJv;iHcixGDEn>Zo{2X)x7w`bb{h +6_%Zispn_EqiL-u7~>z5ts*eFU|_lo+#<2WWa9joPhV|6yCNzWQoB`~TsxK7e%r)^^|td=GeWz33a-{ +Z=1QC&2!6uC~9vLT3}GGtJTJWK%R8(1bqnyf1P;{!2;wm+LdwA##3wokd@}1E20yGb-HmfvB;dRyTuj +NY-kNy7mYEhxzBsnG^l)yYEJ!HiUc}c*u3Nd~OhUfEVybxQ2%MZO*HAZK5=N)ahEO{vSE^q)C(FXU?1 +%2R_W3H&6II_+7+4_eEIvu=Ls!lopv&JKx~q?4@9N{yii$dIFc`$XD{9lRv9a{V8*hm99dMGqK>A9^2f +VpfbdBNR +qS2JwGViXBls_$Z3I7DV=@}XZMp=SF8_WJJj|H{=W)h7KJ{{{H^dt5 ++|9o80%4^`y^;O`&n2#1yEa2n*9sMB!vDelOrJh|IL5=CJYqh44r&W8z4Vf(F~cr!FB*6t_jr*nq +o#tqooRUIKIV4L@4APj-;+Q*8Z%~$@C|rYRqiW7Uf?z8hEFamEL?S;bBp;g5BnP7|4YL|=D=&#tf6Jg +mWjP$_(tqG$(rH=&MoH0JTm@5mq4$~!C`x{E(siq#QtE_9RkEZ +3zm#??kY&Y3Q{j_rB%73j|wW@^QaX1{8d5lq6Sy|$HzUPt5%*=@N^z`l7+1Wy#GKN9UY}1GI@TjNl+_ +@9`thacKQ>=g2VTV{7Ltk@v4f50@f;lyjEJwc%jyc +H92sH{$t+vlOsfqbB)(vORuYAU@eZd7uJ4Q_hH=`#OqGvFvzKZH~bbF)-cEy*Zq667(?GK-ct8;u#bQ +>8~6t~AqL53P`ADwF7hqpd&u>WYa-Xhdc*O~Y%vDb9NifY$nS+0UJ!L|_%QI{RDK3+Oz9%llgQnXw`1 +LawbSI7ZeosSPZF(WzARn3ROEwrMg(;=$P)VEnv3t0%OJH5qw)*jXF^cHVftEvP?CnmHrT~?N +c70W7~hcKfHHvZP99M9?7;yga19P{63yqq0g|5~eT;pKW^+WZZvFdfAO1Xlc<0bz{J3|o?TGD^t;nWi +R?F;@**{ZpcM}Vkg7hQlMd`)q)iOLX{4#g|?VjzC?VatH9he=I9h%)edvo@Y?BZ;XoS>YfocTG6a +?*2F=j7((9*CjT-#<_o~^(Jz7^T7*op<`+%r8gy)*qX12cm%y9++P +oH;BrAu}m6C9|w7=Fj$L`@d`d0Z>Z=1QY-O00;p4c~(=jc!Jc4cm4Z*nh +WX>)XJX<{#RbZKlZaCyajYkST}oobCD$ZZmt6 +YW-?;$3TynlFv524&jHk+4K6HLl!I;mGKs +&WS3^E{m(pgNG()AZ9KZOax-de`LHxqedLaMjDaJXdux`jON@-Au>yLlw_T_3fW^S*Y)Md3l)?m+EI( +t8erB@uZy1vs`0P>2Gy8xlWsvrn=u+3E-n1*ZE3%H%aGBut!gJtE#NFf?zF}SIOlp*$RphI&za%R1L} +pqu@hXw15}q^QxSrwML`9*I%2Yx-igb(%Ibpeb?Mp$$X`QS94XR$rO9}6ztR>EM~L&u?B&pZQ-c~vRS +&qV-c%*-()oo)-JUOqbjeFrb(j;MRijFoN;qMPwOFdfxZue`fAZ+`7o%G+i_OR7tJs@qOyDYLqf0fnI +w~|bd0Tx>vB;|0LY@s%XwPRmw%QSe7S0xIbbym?q+#4pWs(Nv>J*vjLO^NFVx+ +2x{2ni8JeBzXp`HcgAB2NslXlB~e$6RJ8-sv3WNJbXukFbw`Tn|}*qISejpm=Z88dO$6TPm8kQt`U^M +$_lb@S^*~sFUOZ@^NyZH<8hJ9((xEdt-gb9^Z=?qW}ur`h-Him;b2M`Cl2f>@oFQM$p-Z#4+j`zO +Z+dTxpRT|4&h^p`((aGuUX}o^+VsKhN4+ksX?H(TO?SB|QSmpVPw$jf2`-APn-SPfGx9}fFU;q3S{6G +5X)$sK%KcD>TcV{E1_I~^Due*odT3BuHbMzJdYu5ZZD}FA@=Cpp16#`|yi(y%vp7YD?58rg&!sx5lAE +2j42irTlZlUP(NOkTA1m1_gjCbCC{P5RKv6IspiSg4f(ct-uwXHu4H@^Pezkc}B@1OnSzeYd*@vGC5( +=#L!fLU3YrWZ6&>3Eh@*D#>`XUx-Pz_WaHb(Q`eV8I{>xJt|m%b?*cOE +3T>7kLBKXYplKF6MPKIN3aNiU=IyMEQO)i_>Bn4Yt~{X%66#NV<^IRFVOE9o+*3??`Gz;i7=SghdS?q2b^P7chz0INrz+}R+KW(fkl!yo6^?mQX**VotC99pVD8s +{acAS8%aS|GGoaeKoS&WbC1ak_h@ugTT2{@FYpMxjrP4y_KzitF#kz!h6o6TgEd29J|n*5Ck1VY#?U> +#Tl&2Op;N5)llmwXdtrYW6f~hO<^HXAe)=<B)%(AobWcCJgf6S!MrV2DwP`G?r)mvW!0c0x!BbggZC$f^PZj|KjluF23rO4ID?CIcLTI +4W`2vjrW!#{lg7!eUs71pAnHmlb_Z&K!|ZcSS{K*z3oN3Qvb;Ne&kJ%K;P$@v2|#R6P49rypxU)`TdSJ|6D +_kae<)3;w8YiNqIlQM$B1BVW1`hw_%|FgPYfapa5sJ0hy{(n4tr<|0-paw +hm3Y|Y`-M9ora-L^kPE?C&8q*%c`Mks}i!WXd`RnU9n{Q$Td|IY;5xQWK{5H9-dEE(GGQ7hzp{jtt^7 +~*NMlYzZ%0)h9;yEx<1=h|pgyS2OsEO;z6|5%I<0dZBCNC$0M-A0pi=!H<4w)a2(|yK*1p`;(% +d{CQ(H+5;u}?ixAGIQyAHDwOu&m%(TFz7DKWDf>vzX`Tj=KO_+#_Rj&0m=2=u4Xp2~V1j@uQl@>C$?f +Wxm+`=+rTmDn0SdPuCgesd>`1Iq<`B{^?Ql=qdrKUt{4AtWHQL{fCC0UOGJ) +PP4V(0o4t7ok!V!ZiWZ^ab~9K4`ZrQlC}M*Fv0%elvf!B?ze)T!RC`wu^RpHll^}=a$>ch@gn4+C+@N +j^OJA0=Hy)Q-VBE=7a7z-9P(ra>T-M9LrXu2lwU?iL`6O!n7Lxp$DevI&>vh#DzZG*4jXmIB15{f +$2)nZ#~T#fEm{wsiNou3Yb!*`{qcTI)hj_x!F*p8`Ly6?g+hk0P%-`)~89;b)0@-%|HUYQFlc1>0nh; +u@CZU|y+pkM_l7=XD5bNM7DTIrX+!%+AGFwV@^Pc|1XlS9cI5E!({JMOoa>NCo-VND4;h=_FYIrBIFX +fI}?`n-(oPsq&0BggriH7?94)sy&JTepq5KEevpWwl$u7D?82xzWTUoDA5dwQ#BD#MtrFE8{e2d># +YS9n+QR6_Q^0SlC};@jkr|pVb04QbmUWy54vP=A?Z;K|uoZ9sg#n=sy$nMpgvv{E86NsD;TU?uh>k4K +}JrdIJ0TkqJFA1_O+~5f~yvbI3^WRH)bFY+(G9);OQ3c3eG98YfF)6+YwJo^3 +NQ+)Mzvo%ak-IvJWm?1iwP!vwRY$WFwKB9e?+mVVlFA&){*9_9UTCPEDC@04suz? +SSE%lFhU!~W->k|&V;uQmqrIB#-GvK)-{N2nG=Nu6bqf?X~A#XX+i*n8V1=$!B6a;Mf#m5HO5&jE-td +WA(cbUA=0;GnpY{jhKdSbVmx=e5LAmB0#DBCF+N3*6onTtBxjYtVid6FG@z<0{A?kn8X&sr1{5rx^(^ +>~kyB(DYT3i-jDqZ4_n1sI>0J~$2mD>$q#W2%G}S$6D@||lx8Cd~JLva(y$O470k{X@%QGHLF4`~8$h +`&N>ir-{avq)fm+yn@~+;)?_I5fdM(szv%vd=c(^woogW0@PjBdQzdAjuUvL!+c6iW!n26VtnNvS={= +2>ZE4p;zPa!Qa2z{qWuR-S)>1J8yRn$75J+ib+c9+MG4N{2t>r^RmDoz#>hj=pRXH05Q2r3N+;~hyA*ONLx^{$>DEMxh7)kn2 +A9foTow2gJ{+vLJ%ELtwl=@wRlvm3U;k_3dtR0ef(m6Si+k&|h%1m?SmDPSmDF`&x==xN6o&jWn_wQe +5E2Lg-2%P|z62e;DmZZ4c}CSZk9=AgRbvDc#R)6k(iBK_Zv4c{5ac{}|Y%0{*3-m@&T`p(w(|;UaLEk{qDkea;-3n6r=a@1=mP8O5Z;YaRFm{jRj +nUk_MK`rpK5RGkOlX56sw#H>5Lqdwzq#2*zkFV4F2qrK_SGMxb;01g!49vJ`gBd6$b3}h)ieQc$b~Dz +0C=^H-r={h~^QkXF<^*1%B%jh3ABSOYFghHS!4h;AjPOpAS=$w4c+n|=GcHP0yuTU+uPxOK*i!;M(FF +z62^dVvTl5n!;UfeX@{FyfsG>I)>tBWg)v!#@V_2FS6q52;EH!(z(O4lWwJ8!~kIPk+IKJ`~|76Vv3BEF@iNc3JU2zBU#N5$1y$fndhS9ipo^ecEDumg5cj%)yq!FQCb!*U{!M*c`OB0&y$9k0$eBU@@#PtugwZ)x7}VGx&I7@?OMQdD?Z9W{wT*TB +$>mi61Z{;9DH-G?L<(5sdcLQ!V{RFX;YzXqUyu%UaC9@zQKdSdxy(Qdc)*f1|cC;COd66fV9yLa> +@yWCLi~!fB@5rd?Y=O}8Rq_4ja^Jb+ls7}KeZ?GV);5tiUh0?;zT^AHq9zU&}K^VgO9Gov+F5 +-_X)N8EX}7-oVfu{k>ti(J{}fVGe9Gan(5#{JSJC&#Z=Ik+)i0l2VRBmJ_O*Us$(PN$4D0kaE~AhA0Z +s$$+;4=W8llOnAW40Zxn(s;YLylkrdTemG|H)W$R8^f&Hjn^a25Vuve2DWEmf|o1$Vn2f211mFNG2c_ +o-*@5UfavSvJvP>g||1vaNKq3~gh&(LatKka-b&kiiKI2F-+~MYuv2x-$$Wd2QM|GUMQtf9{JAw!}6sHlwz`NT_xgm}>EOELcPP)UqxfD*|*D +pEW25Z}Di>czn{WfD6O}t*cE!EX8XEa0#ph4f~GpA3FP_y|5C(5vn&K?>144Ao&sKbl7cKkt&TY1N7q +Dr0kx(uVJDar^?uOSMxbbtbiUNH2%O=WPQ9TVNB?J%q2!-F6gKLf}JcX^n38&Wf+=Mg76kkZCS-Z@PW +J_f!gvy1Q1QqipiG&U6}{*gMva)=x4iStS*#KL_5_K)P{B*}T|;; +RCe87K%God&m1J^{OPg5Ie7KHz=0bf)kzC=>*Txa+_R*LOHLq?sXw@I)PAw4T*h0T-um8Dm7`L=n4j1QH^5#F_*skV9v_QQt^J?u_CV3UsDKrDI~J-K4s`q(vzIv11qUu +I>kc7x*%kX?>m+|p6)uI@En}AN@%4T_qhCY9@UxRhJsM0CPmd3CS=p{D;v$C +wFktt%$=UCEhlwSc*LdjVyaDt3c^8nM>-!4$99#23iX$;H^BM*U(6AeVj;Oq*aO5Eb&m<1g~P@|04t* +#p?QuI49aCHnFW+R9)qZycb$0-QQjAP3AJsAdA8>OkpDFP6;d!C1~N!3(n#lY0(5-{=az-(ae8GxCg( +1AX%cNi84;Ms_hQCmr-Vv^M3c6W(86`U1JoS&bC%g +ic-Pk<02lE3P%VJ)twy0GfgshX>8D5}JfkuTzT-20PrL+8_d(+>_Nbici7;RhcTiT;xeb1KEcR#@N=L +Fu=~rj__Xup&g$H!Um?i2y17@QVdAsLPEcH{EYR$Tt0L;o1w+6rC6GO8cdxQlM*whxTb}8h-|tNXL|A +Z?W`+48;gS-Y@fixX%hR5$IF(HVr$psV|G*(}1(3a8M!w#T5MHW3=Z!U +g1#&ZYFj{o%0%*6h?^9<8&m{JmldPr_qSAAN-5~QL$Z8V+9@2E+-qgu1=1{aW4O{2p&(-@=4c+rJ(Ax +8R +DmM%@jsKBgpFT#I(AAsWXE{wM)IiWEqg=(K;BY{A=wB*aA1t*(*f9y4hUe|*6wVNRoG`K&=-TT7hKA_ +4E3{+`k1n3mEsXlL?HF>5XiH76=?RPFi@;HBJz=balxtuKK+@;Y~h{F^39t!!(g-g0zO0p&0oe$_8KV?>f>s8_7oJ`SS3@j>^64=@1N +vmHN)C5i%bD|0~X +e|x&$1s=wylS(jjA8)*O$18tE5Ihs>H}r%u~l8pUQA|(wm92qJfkad)E9v1E%YYsiU=u!0WKigX;rp* +qF8nOR>>w0`rOsa&}Pv{gZo|C704$|6XvfSm=qFG~=$8G^V2{Rg9t?!YyMwzP<%x#@Shvo_PjR9EQAa ++$Ix*h4A2hvS$>058}X;^4(@nLK8U2kPyARE#%k(H{N->yYtuGZ^m!8kKS4>81)nn8{;?BO +XxA7Selr_=BDbVGih1+2>74Js@fUfXkwPM=qrFmF%Syqx310L&zET|r)m1#6h&li_bc!)@mt*O1vxcw +9)O*@-^PZ|5QO&=Jl#}JtulPW@!&msWr3)$qaqMET>9jE>m4M<+=`%3^u!~NS>rmZO+V5Ol@RYTXjT$&I}F%AcA*^4bcUT< +(RHP)-$5k{n!!@tLG1Fyuse%wq3k&4ALxHo<~eS~xfFPC(rD8GPkTpQJpJl{!(|seqNAOOj^(h1a=BL +L^U=mRhm~nIZ!kdmcBn$3=4o}6%;^k?Q++(1-?N%E#!S2j%_&i(7%h`>I)bE8r7#vdO)9nB2c}h436I +$js4#Bpkm(#Y#P2H%dWA>2rUqIqypDQt;L;g~dIzDaj+GLZ8&pBo0z?oHvr1sIa$d;DtW1pof1nC>ltZ;ua}7UvZe1BG1qyNYC-TB_9 +Lhp+O)E`}9*AG=q@`-9^HPT&EI4lOZ~LOHAbxVVi28doyKSQ?fH_r(dmiQrrvyYa(cUd_97Z#y|1Goyn}D@69D1wv%%Lr@BnpO_u}t%5C6P> +v^y}5M42JA?4_KLZ7Ym}`v8g{aSbalo&~qcDKYEjL{ki8`5AD3`6Q$TzyyMBj_|De{Be7^Dou|KvYVp +D^I6466^u&p^vRwS)AkHH#)KKFoyf`Q2_=0q7ID#p;f3M=OvPPF` +}`*K>PGU&S5w>>rPWsiCCs2c=Zq^PFRsWrz3e(%iM%j#+O7n;_iqw2YVdH) +4GK)Y=gk*(2XIU3eI%6NgRBvC7gtr3N(zH3{6OckI$)94Uv~`<8U0haKl&-3FXvrhCw7s2;g +F)eSwEQMn4_II}5Z66$bvwggc2mw5m5T6e*(}_wvv_HfL1;gd$>v}Qch(|gL&|=5CO&Ob94TX1-W!_R +mr_ZD_NeZ!p{iD6VaqUv0>BAD~D3}sj7(!Wvb#PUR{@1p&E}^1$JoIi3ps{Ea{wo~7s|Ro-P$r)A;8; +IERQ|cB8)vx9fhhd2lUmd!PECWmFz2A&QS=pUm2$u=2y49^$IpNGfjQ)dA39;1ePRm^S2qT +x-)&?I(fpS<-fnXQ?Q#Jx$XItqVJ(XU_yY_Iq>{V +rlqs0RZ0+(=RR=|K#h8$%9fGfa)Q)eW+#29iY$uCP_fU6l6!C+6x*0>g1f*w;S{_q1RCqMk4MAEdvV0 +>UAN$;TLOSrzi9xCwyaJHdtIpHY#3GIyk@B>GPBQS4$vpPJ83G0xHbGkhhU7#;f8PcI?YulJGjJ*5Wt +-r)pdZ#*B1@v_oP*=Dt9WpmlS#TB${a$T91uvlJi$LM54rKE-6ot!2#zAcIdtwqN$=AH$$=6(Sehage ++RADTbAzsh0alN!jGrjxL}AA~*0&rFZKj +4IUNLa}Xi2^W*_Dyg`ZeBXhn|pHr!wy*BC(QUqbSHg;_xwTSUxdw*{E)CrQvAl&ktZVX?t1l)9#muD> +&<%R&_dfaJc_JyF16@58Ll|$J-yi8B2~f+dUCRC&~Jco9q8QK6??J#Or7Hb9|;BJ|8?Etamr{{GS$BO +!tYg_h4_Za`5-#xBDOb7*yf<{60FJp2lCFPQPw1*CPHLs{=xj`a;PX(Dg#jTA!V;%NZNgv0^?$3)MKq +u$9{{(Fc%%s3-${yk9(NVsUf;!B^ChH09ew^RDlL%bIMX+G{6lJUtJGf!& +vGfACXKe<)9%f8Mm+Db8AuCk1DKl%Z4oYwZSGM<;ssOdjdYV~}<4|AG-1>hG@yCNj><1%;eaO~N8O;g +fMR1WId$RbR4UOi2OFv+FciJ-&q>u=4MeRl2%Dc&nt0U6-VGNS>VD2Kv6h<+B{dDH7Kr;QiIfKThibR +vi339GFWe9diVBQQ0J;xidev0}Q6fn)_gu!jzn{x&-PLp0v@-=FC&MErRFexA-iLFJpLdz$SIQjvf|v +{!6JXJasq==3CIBPA-s83XveZD9a#v8E+1_*IPUUTcpT!aG=walmy$>lql7^O=)3}d9QoZ?+ps~@_bz +~l4J85s%dp8)M@yvJ`E}6jzRnVib{1-K1JoyQAu}(_zGZ$XQnR~Qw!oH9*eZ5t@doRY1FrLWvqJ|@d+TTVY)OenUoE1f2n0lK$QX9+R^X~T9&!e^_y*5`p5OLy@jlJ%@Xo|uKD>F9;R< +JGtS$9Li76n?dM2f0&qZ%qz>b+=n8rj~cCT$)qKs}%2N#$M$p+I)xE_7Qu%S>N1h@xm0l-C1X{Ts2be +B#@rye$y%e$-uDn$ZadG9#f}CwOj}ZofoPg7>1*zLzjGYL)pI%SDSSciC8?1T8CkO52X8jnnP=kKW1EK+aRE +xP-Hdsi)PxiV$)s7vbeuIRSe8f%8*m~`Bo7Xkl(bN>q+e6@>>6#7CzS`Pc8)t(%+qFz;x?>gK3byVnq +l-uNR+k$|6Aa%cG*)b%V~U&T+eDD5{&aONWC_U&FSPnA473;FXC;=_14D5?d>fPVY)trsg4T3#{7PsZ +HNw5gDGrUS)`ZIq%raf2*79c2K*<5Vqyc8fCrPhE#`AxUs|<@E6V-OQ4g-vzkxkHdnR$86-UT(Zu}N` +t*?7~!KK%q)em%}h4L$VM9B8_N5x_6pnJoPz-V)-XjX1^Ke}WwcRJ>QpW7G7i+6s6&0E$(`Txe!7J2VBSJ(5mC9lO4D4Px2h +EDGu@aI%3bS^?%RWM8AyJ-BCH6Md2O6E7Ud5?uu^Al+8`zz4komeP^NR)PBKs2nC<>1|26}7ypJ0{&U +s+=bu(d>hNR%fbSm3D}~7d5>(+D!9kZ{>nCx@x%2W}Tt`DG*M8okZ%Si@}>md}(MZ7I>&VAf*bm +w|8)9bGDGZAQe!kiR&g4EZi7CT@vhLXS>*Y{IVN64%KLn$UbCz;R_wbj}a8=w1*$-JTr55FC;q(--Xt +nVbDWTb<>OqL`K*s)kex;)|mI%9nh~wOj81bn#6Q4U!23ZTy4~gb4+A&uB31Gu5wG@xp8!3UB8l}ExI +16$~+0u8`=(Tiw?!B?>U~Yzi&_J@^xK@({>jOtSdz6v0)mQ7e-;HYzvet7>&r@^c1!D2+eDZZo$0@+{ +%X8u+05HjiH1Q+Jd>#X`1`J6?}ii$%$~D(<9_on5Fc!>EM(UeGQX5rxV$21q#4bfdCE(tTYBtMFoPJ1 +8It2?vy$P2xXiTe(>ak%1~Zc)SRP}7S!1?-MRimk(3&MYt0F*Iz6vHshQC>^q3PSx?Y}MG*(^Bvmyj~ +*tUmL4>^bX{}r<;Y4M*L;!d)J@Iz@}fhItO+9`ngxgCejBD{Y`=mT)H8( +TP5STbFV@gdD!M7{M08cK8@fhskz=sP||49YMtumF{jKGCGmwZ_`In6LZxS{Lxo;K@#T`N89*h4C&ou +kJX6HcAHa(UL}R{VGs6`fR1SB`p^;E8HO*LH8M{OJPSvofeOqUztoe?k|?RPC7x`w<0`4& +H*{``V4xekH0>vhb^tqd*B~2p$n6RE88&^jF!DAv9cB%v3?_)rFdc4nkYy|vVZzecC(I-1MBkCIk>Cl +{AA*NQGl6JD_=A{#|vYo>Y7rpgb3ya0kBjis;bU2V0Hi(83IFo$f8Xi(5_u>eULKK%e3yC3n!axnrfD +2xXuD?G$R)WEJi|vVP+?6sBozve(J=*<;$|?*8^R2@baDQP&Y4RC^|7(p7at9vw2j8_`?eEHP5QMp +$OZQ((Xu5GvDyZ+6J2C9Su$2$3EY?a8Qiq_UdZ=1^b_doe8iC~pg;8*`bMoJ0d;x$<~&WtQ6 +SItS|`TIHpKe923#_J=KXSge~4(RAq5F2KpE35(Y=tTEp$2t&I)n= +52PJ&C_X?#AS84fxkA6lj@&I@$A(X6b=WV@_Pjgui`0Zb5L2qDj4es*LD^c)AVjkr;uo?&b(u@ZZKE0 +HSO~97F~#rUPnOeN9HWn4=<}^er2x|?aP)Bf_mhrcti)B@p6J>PU#-7W#)HsUr$qgsn!g=Q(*dGKr(I +KLQ#8i$d67E%_s^5<*?Y<0NjDnYr*a6ZihBS25wx2t|1sQIi>LtUTdj3>R^^i&V@R1cz~ot3q +8x?JcXqPv0E?*8rOULS*jjWr0aot%>f$pp=Vh0W9=Ya78TIkqn`VC6ff&hrLbrPGgS{@1!?2&t!Mk!)e*c4AZV +B;WXoQv!@^Rk<~jd`wp1wULJ&L00CvF}xvj|_zmkVlydG)KZyXM9< +#@LDnb&UWO#P*>OMvdDqWQd&eG(0%n@N6`goH1=r{Y1huiW|Cj>mkfh5Mrs;M9&`rYVs-k?T3qRtyhw +4G_1DFH;-#kPlxlRO`i8Qi2xqkCeOP5R^X+-6|;pp{Wbm#vFKH66#hm$=3>kIV(G3er;KD+?H;tu^}p +F1FD&p#1n5J@ZtuzP&X?7U6j(a4OFqQzx~i_WQvv)vDyt!3>>~wTTea;Aj0PRBq)5sDmjt1l9Xf!7cX&5PS|S(W-%z;6z0C#KHAya!{l)Y6}LFo(J_;!318BOo2oO6q|F)!3g)XN1z^Dl +%N0g+0DwIz3>tv&%F#^+4Shn=QGj+kkc_?e=Fsl)B_Je0QQtDAK4xiVNd2>Sc~h7P;laQ*Rst&3N!;F +wEbmm%Y210)2bSU##wxn2jnjcwR@fJ%2c@9yB)}}Z_1?bZ^y!@D%F0+u$efrOE17PI-q0455;W>m^6K +p>rC0ya$gfVZn{=r?hUZCoatZ3XP4eqb7tD%k4)&z~zF6eB8}`L*+0#*dsuYW3i4*MERyUoTTtV-gxz +76l{;0CXBPOhHd82oYJw;IBFX3?=oF^43j2}Pj9kY&zE8t)8pZECBU&3K{4F4a5ZT#$k)V22>7qX~;r +1|*auOIfm{}A>@n$9SL?`RW~#oyt#mz$g2T@QYzG!j&*6ab +ORZzZ`dykQ^P1jm+ApSvnL0qKySu>b4{BovaJjME>}Ezw#QBdSDdR7Z+?gccl2}K*wGrZ;JMds&P-bK +xEAXGlS|Y5@dvo$Qsvx5RhLfq6o=fQyg_5?^b4+TTuwmeD}B4*W>p +w~jx~laOgQD-llRjc9Ca?(LkX*`#K^#HvQK-bP}jPKO4)2N>&dXkZOGJfup*Yh0cu&Lrw#apH)JK3ok +V{6Y6H(Tk0P!^n7qL=NAGp<=&Kui{k2`!Wv3e`1r5ZT!SkRU>~%eR2Ej(4scSy(Y4F+WY4GeBD!Vt!y +c|ds)}6*vyd(?bP?$;8Pn$@QdW7X8D2erIS{M-@rTD1k$N~MZDN*9VZtJ=F{^ +(;6HT11nNDexa-oOZ4b~4?DihyV};bZy4q@RhiCMC$R`p+9oOr`oF65>1jOJ1IL4{aXq?YtfT<=y_D-6QI!KSd}1_~q>R; +1u1HW4bM2e7L*w@$d*8iM}c)|JXP^9sYE7`uz0y&-f2N_~onx@P6;;{q`|5d9-`%R{zJzKYluUe)`ML +r$154zt^cKvP;07+RF*G~`^nmVGDxY1?W=Z459C~La%0b)Du8A2jUUrm4UpWv4uZK>%x? +U@W8Y8V`Phme{AtT7I>rCIO4GEX*Nl6@v;+0MH0Zx%CjUmx7minu-kaM7RQ~1ShwY`+M*IVi8Xo_PCP6q;({)0 +T>??Q#W^Q;&{rNmuJq}tQ(Q3zxgtECh|W1XO`gQM?Mffs^IyZ!o?DY)x4a3AfZ*!mKKw84uclO_nVOVZny?!D#G87|gU_2 +p)4{m}HH0BB+W6LIy2hXlN<-5%cKHEQl@#5k>Ml)KBON!j8F>?;KWz_8FLN$KNA!A|;qRM!3m8j#!?b +zF_(d|^v3=Ve20V5)@=4b9u_qw&#)y(MDDCcsGu$|E44m +nXVVP7A@MQ&M%JJ1zYOpj@)Ht|D`F@VEqg5rp`$7uHDQh8t2~D_7V`q=YvX>kBk9Pd>dZ>qf1uQ^}07 +1b_r7x=Z)t=A}i^7*Cx~%iAK7)#>Q%M_{9GzCZM%-BxsO7&bp-&~$VF(M=*(SuyXN>~3DDfg4)OxqJQ +_KQ7$ZKAUAP$rewHbSs`hwi03fw8L|0MIU2I3biQrAJ4>(X#wJgGL&GF5KTod`Fw&_s2LD?C0XNXt7q|x~G4@z^NOpowRa6Z$vL-n7BVnfdtt%(@$el +9Oec+%LAB7ZZ&)zjQxruyK*n&KV^~K<@5;3^4MRj{ERiVsF+< +c;azk$qwKreAwni=8%1&_*x@u79S7sU0Ju^{Zi!!vA+~Hvd~K;drbSOVNah?4@McTv8uPONp*D4Mu)f +mNylvJ~wN002c+shE8QW?@l&72VuAnMdFRy?4fDb@7!r=6fifK{BL?Mdmwns3W&2(1lk6^qfF`vPJ+AH!P3mP0E30@xUVo{z4>2m9F@X_EgtZt3Ih)iM}NA^8pcjV +v2^m>FJ!}x9C2bkaT-AnhL)NQ$XL%Wr|~kL~lskT2O;gMiI=kQHTN05%h3CcUGsM< +Wn+GG=tjQ&adMyZJD7!EUKJx;1dM*RIe!yTB=YsX7d%0#*;)qT2P67JsXbABu75BMA9Q>mQ?ds(IP>; +C80p03)LdOM78CfMJM7A1q-2g7IK3JI}+96JXU>oj=r;lN@DFM()af1?A#RB&zICq>Kn;Ji{?$(tSB= +=9U6#(x8*H5RmkI_^6F00Bxf~SiqZ8inBMkqcW3|b8{R#QbvklrhV6!nf=^|1rVftoL+2mJiTwfwUv7 +)DhfZg`b`^(4jGkuO_KG_&>I=YLTU>NU9CZ2H67!@=+`a*Uk4va3KnL>iN}AsbtTYX%k}lN2PQ +76Cj26^=UOiN5vm_sVhyKe>f+^H{X*ttPhSN09W|%)N+#*K=21E>1UntREgEzxhDq(S(u9wCc&$->SY +H~=|wBWH01#Z;<2M@H93wUb#U=J3<_)g4Jw9Q*UI6OQ8m|0IjJ1xRNu%;M_r_3*AsCtTd0J;gZyurax +`p%d#&(+0luAr_lm-@^&KB0+x$T`-9-2Ll-X9+;J5CbM3kWT~Q*INFasPdf*mA*;w)yO>+#AAS?R_nV +jX-|#8c9mJxe1A@PF5;0~x~>DeC*)igZ-s#BGj7g@XU@4Zs?_GZuW#f>WI#izvqw+(-n#NTdpw&Iw9V +)i6qQ21jLi)9OU9*hSW7O)QlUQW{aBq_8V$(KaU_mMdgvGu13bwnsRriQ?K^wqz0DhYO1F9A7h?{5Us +3kS2j>9Ft3Fl8GyYgSymiN%j>@Pp=O2$9b1q%pDz{X5>%^cwX0WQjo25ey9su +NthKAUJl`ldeMJKX+lkKT6Oc@Ga|wQZ!Iv9;O)^tt3z>he?E5l!#TY{B2I3nk-=mWfeN_O6(trrj?FE +dh{~?3&)}DG7(_YUyi92-eBoa0Q2^A)%RzLaKxceEbw(j-XRh_wX$VKiFK@zVz*p)nlPr4c#w9}eq%8 +#J<{9@x83~u*(!w~oKI1)pCNunejQ!l{iwx2-OHnTpA{*le5rHyhTSzU429|ktmDJMb1>`Ul6|Y~keY#nGtcC>? +NDG9mWz=w@%&5Y>;oxoRksXjEZyRyylwNVtE=kbVlB^ +gqHL(XwXuPeZ^}uT$L2Nnk4gPp%M^f6(${-i+iW{vIM%B=Nya|&b~X;2Z%c>BhpODLi +gmG{aPPB9%(RUQdF&l4+Eu=Nsv`<7WD+L)*}J!E +~N9c=ciH4!?R0t2Bjnoux_9OJ;~OMu3Mzg1zOUXlx!KVCrehX?IbcHkQkBIP3`eecMl)2oRbdr`SQ%} +;6=M?j2^K*s?@&RxgNi9OG!T54vW=ObbwC%+O<`>(2P14`J%ouNaz~y_>91Ckq57@DLlDdXkd!R`Y-ZN{@x$+K!TFLA}aLcYK|J&)-drk{Y-WMtT#oS}RaVN#4ZdXgY}Im}s6eBK`PeEJg?JJ>j8*94p={lvBSuqf-(iqqZRJ!$XeD;FxMwZ+Y>S9y8HCJB%iFe#p6Fm*26Kg?>*I!f`P_RPqQlUDK +!fach!woaTz>-8O>%slOp0ak4NN$~cWa7(R-I@%(3vynIVCI6i#OH$X7}6ekMA&C`e6TP?|A?4?}2ftASlbAAjC*!8cx2Bcq4 +SGZohkvwXj&fReMoLEX1P9-L)I@1r`32&fSZx)Q|LT4xPkg!%_Gzbkv41^MmVmF|WZc>{t4tKU)px^_ +Z!2oG +KXQbj=PY?IHtJyEsqd~2hdxe=nEWd2CfUI~b&V#vdbTEp-c2=un3f-AJcw&qILQV2n7a)k)r^7;91MmD%{+1<2Qt*>0H(-2~U^KFXtuRe(qrdN?{8 +wzLdxi$VEQQj~Vg2pMxGWoMj6(%Yuw20EKTk`{Ms<}?iqqA099Ok@zl!|7x&&UWf>SQUo)sxgM>P3FC +WVAXph?g@byxjY&;@eLbbz6yy@fE}i%hVQT5vl7_FX#Zl?R!&hf9Y7?jZ(I^UvUX9YEw+#rnXIQX45? +GW#iMse$f8J?p{70`jQtbRD*YpWwBgmzSWCKeXbN`BXCZc)V{sW)4K(%FsXi%ue=hk{L>dPbiuoo*>w +}%F82$x+Sd_W-Fk#9+2ODnb%4-e|`PBuf9QxEu)7$rJV(;7bZ&XEsx~xlsE4{@Ome$TyBaQ!$9@Ry!9 +b?Og5gU>W~-uIEzvo9Z;-Vnm4PeU4oW}Wx_-vT%1hNl6!hg$4A-bh)8F2T%zP2#ASfY%7jkJ+twvECCMQ8roq-2v>;jL9hq@xMNyk*M+|r<6keF-J +@p}G)E}q>aRNm17yoYQM4PK*Z0AXX@+}%{=*ZOe8T4zOsf)yQ{M^gUIN1#NTIL~>y2e1iSyq%4z-?~R +a#s8pVCBIjQFI#7Ogz~ +Ba*c+k?D86$2KrCvAYoQa^2Jn;+&>aO3V>6&UlYEtmcUTL(*|0_qau;;N1iczgkW(l$Z0b`i#N%E&Wp +<{z9Z-^nKY(bn7~QfQw(y%6wpCg2pWF~(#sfszRQY*M9W)YB-(M%J@8Uw&>sN%Hws5=39?30arWNLH`Eia%ek7sY1_ZsU94%ksA7>yK0@8K$;tX +XKdt|VD#CM0h&b7gq8y +(q^`4;(nfyiX=5SD?)M&%eCJA_oUM#L@9%NO;Un1 +ydm2z#J?Wuny+Q4M=aA+8>Kd5_v*Tc(LFZ`6|s*-mK)|#hg2s@GBj#?@lC^YHo*jQY~o+%@a>d2o7KW +6@(k1k!71tTvJ#v;GYVxdJbAn9Yn|is|N@Iseysy_0=lRXGWG#p{&)ye6VH$AwWffW?)=I=@86=k^0s +a3$WNYbStha4+HT4ws5lbhAyZHNyLTbP;XP7a6TVMa(9D9mAwAcT!^DciG6r;1-iAqZfbh3zx>=8*$x +9Se*{Md+lR~rU%OlotUjyPpVh0F!cUE*8Z+(;89+{VKpdB~Ep=q*C1^8z6K)w38ZT)oV1(ab?IV`!ft +`6ok4-3YKXgO_fyejHrm-Y&gu#v4b_XDuUuzybd9~#P%B%(7OXxQps0+1nU{0|JqxeG|Ae=Z5&daia# +XXthsGR31Xcpg7Ofh8|pESxPhgW6eu~4TvdInMJsTVb<1T?R%DD17aPrAdJRqz(=Pp@8n_QhvkzW)5P +FSf$huiyo6+JC=#_4@S}uQp$Q{^gs`zWCzJmz(gCR=UtOUKI~xB)JexK%e0BpCxy7_M>sz*IICaD_wI +{u`*F&3gcp$R8twBb)oLMf?VN=i5fHaYDL3hnAglONoI0CsfJ^CHdgu1#B9MwS|&N1YQ7WW#A@ktZfS +CV3Co7jSj$-Q$^e{?t28i^LI#*r@^s33PVktr@V9I@%VV3mS*jB2tnHmgDp}jKsg!8LsXQuO#Me*fZEZ%Aa!QA^2gW(am`DnXdS!*^4-zS`)|h3!SV55j>mY#QmFG&_JWZFjSgWRjh@P}X;(k#Ywm32{{v7<0|XQR000O +8`*~JVr=>FEei;A&*;@br9smFUaA|NaUv_0~WN&gWWNCABY-wUIc4cyNX>V>WaCzN4Yj@kWlHc_!5W6 +`fV~UYvr)jit(lqP#W>4$-#BTTQ%Bn6!LNXhQR7pyj27|%8FyKDxKI +yU`4Wnc}WUFG<{R~Sw`<;FEHeGJAXns{N`>n$Uz5bvJzn-&;E6&a~#Z{WH^K@2R`x$3nrmH0MizrPz= +y}dL`}*D6lhgAPued3gpM>n~x2G5H-+l4j#kcRzu@KsI_V)HV?-t9LFL+W=Zr5QUrIqM!B_1sR*i`BA7(>U)2>0${m5e$x>^M#)jQJ}%}2!T$tAUJV +4pF^Q~&3LCX%hCn&1Ry5M^CE**lVY>vxoog1qF7Zg{VeB`jQ_NXGMZMWGnx2tJeja#HnL9BY~jbz&pi +BIpkcX8EBwYUV49ibc3Aaeea+{7u+ch*g7(Jea-LdqRn*?$yF^m5#OWl<(hNJ!c`*@mx5k|g5{PFo4M +`~vs=uZ(dooG<1)ofuPNx&Zex9=}Q0?#ic*W__84?<>1Q%CP&fuS)uvOJfEtH3gge{i%JwX;JPG9ttX2@a{uhq$*gHz`n^>Q=*RLRKO>&e!+)HwHxF +>X#uRD4HnH9@-)>t?9s7!tGBAqx`1klOyDO;S}+;{WWnQ%Hr(UPVvm_InvT|l|5PqgeH5_<4a7yWiaf +B_v&3AmV*yLP>%%2{>u?ef&OrbZxXIx(7;*8(qx^C!#`Eo?X&BoQWx`FgV;~Wm6ESCUCpGR1*1-6_Q0 +Mo9Dm2MeQ7nf~pN46WdrQ(gUYgCHW_-po4x8>NC?0>2hCJRE(f~kR`T5mkqM;@V1a~*E!b)3P6k}2uU +uIi-?mfoIJ&J;m!VIPJm7#8XnyH6)J#9E!HW);ozlpM&;Wf+X3L5Tbmt%zz9e4jOQ_%a5}b`Jto- +&poRWw%VF;ftar)k2~lC4p~qd4agE+vSi0Q8@adKi`(iWpKwDEbA5BADd%9 +lw1zD97t_#ZYnKHsTMpS8c1=)eG3!-pn^#7gm&dJ*Kw<=lR|Di-%}waX+nXD$?$d0aO*go>{wgk9rkO +Fvuh^?&uLAe+VK_c&Z~mwp{8zPvg;L0JfmoWv8&;&H&E>}h&k{gut?>{UaJk}w$Y&|ANk+z+sp@p|s7 +>t&_HSuwY@MxY9yA$k9g|66I>@DMs;sg}%8ijPc@WJuKmiGbDaER~-piQC4AY@L84Y2SRZSKuIG57!{&91Ma;A# +t;YcT$$KLQ45#mPY8lzrfQ$)ZA3NEOotW)00j!OWr?d#=Pj)b+WS|^pRT+u0f*;u-X+g^owENB5b+nP +!;s0bu^zM>0xPA_-dQt|59C6^L^oMuFTzBH8d?(!cvxOJ991(MX*FW!9|Ob&;dWvQaFNY^=<~?NZ +G`QamQvWmgp0V(~i7UAx^F1#H?8uhz3k_!fdlyTROPvXDg978{!1_(3s|V>NB@9Lz9f;%XS8Gq1Z0Xm +<5wq^T?&^~Uf|S3YP0*8OQUM6F|gT%Uz#`N#V9rT<07!z1ND{#>~I`M=TaC#y!Gj4w6%|9Js{f +4^%A({tFt@AOq4XMet@+BrKpJ38u3zCU??{_fk;$@>$uNjb$)BUsPO`eFUrz6=i@IrPWA^x(Ji#IbGv +c6uA!W`Tp{j`R9X8!NM*x4le370NF79`f~rARO2uzx(r>?*CqfV?;-Lb6x|GPskr8IxP8ef|G;Qu$5G +9+WreDX;8tFDq1v=LT*ua*S7^u$@;HZQA4@gB*=M|u9k?*!V`}Yn`E`9>;{mb_SzxEwno7uT7t0g@?{ +(qU`<<6dV_HZPAAGa1b{J1A>Z(A)a{RPbM-3p_{8h~wG)f|o$#snS|B+7i3B)`V9w}TdS_@@GnFB){3=r-Vj3azk375pwCP^#fUD+0D7EUi_|RYab{Vq`n&tFc_& +Z3IISJkb>pl$;3QDxO7wQZ_l-_OBQo69wr!^OxWUxy)auQCNc`O?NOZL3l4%2<~@K#2c4QR|Sj^fNX| +cMO#C7Q*zk60Vl(r;6;E-R&$mjifa^Jl!wtA=F?)E(6oV4eYtY*TCR-OG`B_A5ZQV@Q&T&EgVK_Gn5d)F~gp{gXk2709*m|u|B0~UBe@kxC`oRDlQ>?!>`gbtmfAD2HN^#;0sh2Mw($w_Mp=1?dfg3p8n?djk-gBV7^al^+E03J1XB +VzWvW{hrq(H_T-DED``M~;p^CHthCP-Q4%dy3szjGNY*J#)4;B3sWwH-*F0tmjDB4CYZNJ}CI`6%D`2 +9pXj$4<@(|}<*Oh7RLZW~tS9^t2Ck&sM9}LuSX5#~8?M~h`;+%4Ur#RHe05GoAtz!*?HiYE<%yT1OH>J+GL1x) +B&?zH{Qaav%6^)}(TzAt%zw+%dfP<###t?-!qlC;-AbE>OQ%70y@7A-dnh5-p4z}p@#*!qh++9mQv(j +3`g;hK8QZ;j<=A{nS1ouj>nj2NedKLf4Y8+arIzO96AXu`ERXART@HbilZ2uocd= +7Br__BD{9*0~hGRh$(eBo+`%@S?YaI3h-)#?~lt7lH7UrGiwWKL9Sf3ddhby91C^eFtQW(P3xUHE)Q= +7Us~nN$rRSaZ*dGGUjHm=PqzManzJv9cwM?p}p3SWKE6et7BGHHs%aPEQmGl$23ap5lYuc=$wcS%#3d +120f7pOzB$=A4Dq^m8k_^zW+A1wJRdFMeZ^60@UvSY_Td{r8!H-E9nJ-$=q8t4DIu) +d$H-rurH`*#iXTZFqjsWWRSmR-lN2HPwU5pC7@_iBut+5#Nbv#;O0J^AM3^aA}sn|j;Y0g5&94!Yw{E +C*ad{MGh@p@~Hb)@2z5Sgw+w$Q!^i>xYpywl6~mL1k9YyX@D2?lbQcV^KZ$<6{au*osZ808V$j6R8R- +pij6PsY~1To;a7zCjzZDq$Dg12q$0#tB76=(At(#>-A;+gieJd#DRp^K&tG~1}?MtdMl_0f`f$||1xl +YC8BxlRKsXRTtpb3&Q?i|?j?G+P0TK*wja;@TYq`wJC{>}>BsO=!o|Q=o-cWfiA+$@4g@2lRDBCi^dO +*h>X=zj@0laCV2=(_=x1RhH)U-+d&&!6uCj&C_gZG$CgRGp(Zfcvn8wxjlFy|wXwY`i;aUCQPk2 +C1U39;so>P9I>bN})M=SeFs{ssz_hJ`W7c1~Di~f}l6^%~I4{Ih_wUNs#29OBrDcS*1%K^)yG)T&sH= +*6H4_!mLc+4f!K!Fc#b!r6J-*s(Il{24u9QVhrNpb_ZD|aF{c_kiRDue1!qzj)CA}knh_vK6>N3E63QIBr>rJBHG1ml8ekVB|YssEA6nL&f_f{(>~}^W2|{;Fbhj) +;4!ji_G6bLvv$^V#i2Hs3TnMNt$^J7s3`ol65TvLBV)&ZGwixrWlCa1`n1C`ya^mIwnz$vJb?O+CaO~ +&uY$uDMFjlO&6l)rQodEY5DCbOaR0yuEacA^UC#>@jXGkcQdw0S1NL8HW6n;5k@AfLqa?9xYrU@M_@9 +H$>Qh(3MK~!PYC{kE}mi*G{)BftvSbVtbUMaW7axiEsp?dr;;S$#F^g=b$NAAN%svY2J6e?Jye4^r9q +aY5w{skf{0nVYzoG`2=3#J)oISNb$NSLj-In%mC5reU=s8xp#E%g_ReEp5ip;HtHlz!5TN1;$zO(dS4 +7UU&0BaG^m;E`b~O0xIl{*@2C<@DHaP4LnEmX~dvW+!9+kBOrBR)s#0R4xnJdqTbR5piUll3z1Z^RiN +Ucqm9UeVDV)kc!uXj{}zs3bxdO^rV+u<``xoDNGp$Qqxj82Q4C +yj;27IvG6}|5RLMp1?3!P(Y%s-wrvTM91j7>LWTk|mg$g?-i`W(tuB9TtJX`LD+Usz%tIifZ##%C2sG +7eM=R+BOK?!)HA=eR9MF;19V6nAf-q<)$)bE_8u0t!uC>yoEG|}-d(zCdE9#dkhZ-(L4oA+%t0!UyVF +m|kDa^XKhRqa)u&;X+2Y~%cT4)bie6j~H@u7zglK;$B08X@m2i2-V00tnjTOmSnb8p%m>>(C=z6TF7i +v@6$;z9x_!wgbLW9t7D$iHF86RvOxUB-(*c8EFV0jMwnfDHZo3daf4q6K$**l +F8h}Qb2cDTx-iFXcKE!Hkp+17;2qv%gPzwH4W7Rck%vCkKY!6OupADPKE>nf?6o$y*Bt#V@L@7!0~pl +z4qbYf_FWj|h1dHilSyiWcpt~F#T1=O@3ov(E7)}pVXpf!Ednn{<@&j{wYHkPH|h_^2At9nwR*4$AO& +S2iZs$iTFWW{D;HK8^mrbHyvt`ZOj5&D#;Zau+XLls==Gj?y%&2DI_eo=D +aVby#peq{rb^m=xm=i^Pf(i24YtvX?ZxvPVmao9uULd!-b@$-k!(K%P%#6gqx`hn|(@F@mf$F96e+9b +MM)wyRbz}#TrS*o4@S8s%<3XWQ$nq^z_tXg+CYflW;4;OB)Tm*EV&yh2NK6h76!H7?##JEFhBLP+g@m +VU6fQ5@xD}JdPGo`y9F=3)aR_ +zcgL6y8weOkjOCP4?v6o7Sc|C%MNtkZgi_cx3U#^_?P)H1<^XtG$;vG9iHQ}u!~;2=?~7DEmAQqbvJ( +T*aOC&BtlyK{7Fb!9VV{0aYxu%DJnZ(L4+ev(A(n}jSYB_Osn%N?HyJX!?cR19tcbl@r5()~(-T0dP| +%0mmlgV6!x}mVZRkLA6Lr|fST;D+2qL986za{qc~q3`b~Ky*oZZz7)PRq}da|KF5X#Jky4+wN`_FnH< +&JhrIkCfU0n=MR;~pDa64gUnh}oJyMP7%nk-&EWE_DpD2Q5S&Ae1r#QOs!&^z|0qpvq8eHULTigmuKP +1zjZdf_9309Q2vp^FG}z_kjWc^H##W?HU3p0KqzVRohrW{Pf}j3c8%_EpPVJ?a3%Jx7EVWJ}7ZtvymE +{Y$%$Y=Df0}?rW)Md7D!W#``{#@TK{gLUa;MymK9O&06Qx4DGyuWA!Kk-t@_}~ +_%cnfk6#Gr*HruWY2XsL=6*C_MEFv5QLGv)=`pFQM`F@=DhSnPl;8})(|Wk$Z!X|J%J2sdQs32~jQB}v;?0V!e_nTdlfC4XOD#>4X=RNdZ5nwl3lqBdP@8w{XZ +V#n+j?7F)CH}je^Exn^eA&(;`}(@{b37XIBPj4k8`V)G)~)u4dya)?e&Dwhz=!bV>HuFb1y5;ed?K}y +Ynk>^9uET-uxIKDe&`?Z$JUH-B=~lh_MGloo@~)780w +l3Hs1b-5f +rK_QMYN&Mv^m`>lIJfu&1%vRwXj}U5rrW*<EpSZ4^BYv|1yleckq`lvAP%7`Q3=hX+70tLx>2L_$E&;-g;`GpsCC{+0cXZ0pb#~+18|GRVK3{#ir@qhx41AYAb1)D`Y4)fN|;wu_ap07CD?;rI%_5~jH#$ewig}6zD0AnqU5rp%?uW|%xp8| +91wyjV$M)sz@CmV}qg{#G4L!ZN7_T$`oi<56bLFHa3B_oLj1eoSeV?$H_M*=T +-QiijjbiZwiN6{KRculiPZVR{rcrJCJ8^mT;Y#qgO7KYdQ|D`a+>3@DOM$VJUgsgr-Ysw=PTXn#b1sG +lwD~imD?^ev*+Kj;d6n@mLyJ)n}7!H+kfz{|K;Y^GS@b +X59HdP)h>@6aWAK2mt$eR#O}p4#qdI0001B0RS5S003}la4%nWWo~3|axY|Qb98KJVlQ_yGA?C!W$e9 +ucoappINbA*q?1h210)!}BLo)>YIF#a9fE_&BtZ!d49t+l1icH{adcfabOWvg5<8=5+EI5e-rsufdao +?Hi@WY!_O5)m3d}H=Nfb38i&;U9ZdPmTtOkk6KtlR=PIb>Dpzhu0eV+Gu|9N>xcURS^Q&p!^f#|QXjuB@)hm7XZp`1%@S`6z-1Ecy@89#l13%*P| +7CrCgYZE9y$|G<-|5c(;g8m>zac9tqd>>;<43vm#h=_WKk@ggJs0NBgZB*&y*@vOzSa5PrSCW9m%)4C +e||Z?h{E1I-%sP;*5QZr_b`30xcB=$#CK(#T~3BsYDi%=f9KL&iMVdYXvj2VFwCnEcvg!myBQu<`0Lc +Ef!{`kNns2$J@IDt8YuDp{RIOgJDMpV!Y1Fz7yW1HXPAW)rGa_Q^$kRQ*1!~{!|MdYO#KJ6-|)p1eFX +Kq+wkr1H}LDX@bG@`PkM#0t>(*N@&UyS4eRdV?*WjxdfRV+ztH7yP_E+!4UFlb6gFr$KmQtB=!S-k4c +~`v+E!>YvjW~D-+-@S{rx`zK;R}y1B%aOxDxKRZ*SrM|L_0Fzg2Rt$G7k^2czaL?Q}45-!6XkVkQt0C +Itrg`MxSh@u;~~khEJ%;3xYIW-^SQ@mZnUea~W6f%P+Lr;-kkR)DmH>S`ljN4#Y$;=9Hm-ttX|H~a&{ +&An!pVRo6B#f$R!DieVRbI3<+5m~ky9H;rQ$@t6f#KILVMlGE+1V3g +y*Due7~3&X+kqG9E2Il7j%S?rzb@%jz|Rf5i8o9gpT0VGo6u+-Q`{7{Uo!ye^!hJ7J`SWb$dnSP^J6^ +6-E(0Y9TJda_XmYgJInAWsFTGcB#6&2Usq@bRO8HA=+hG{8W)FFlV;ITVFGD#nK@8P=y@(X82oF$7=qJ;2G1L!5oQ7)2eYTK&kb5fR +I}6Q_gkBe^$7pA7p|jtg0>#z<@YAE^l6DIcajsn5W2)}9zq$h?7r%v1@98C#HFP8>TJRIL +!meFa%iOD@frhlplM2`3iDEzYDm*McOB8RHOu6LisAkJ|Zj$I^(V*MF5GMpyZE1=^Bet$U#7_hZu7xO +WNCnQ;NwpP=V;`VNlkrmD{xHdgMMeHxF`&*D!vg-{5CFh{~nruB4+pFd$ge+;RknrwWD&$fvO{j->Is +HfTdV9SNG7PlvQaOYey{_nu9T>SIz%K^KdJV%;7XIbN?+UNBY7U5JHr1C2ZE^Y2-D>VUjWQN +-Yk_rxkOD{*=r!L0Xt|3N46ADMV+E}!?uwAQG$*g+v_MYZY6^$r*k4}ffy8-U7x~#TN=AtsRLylkSp +b}eIp(^&USKz`SLLBnYHkjs*`q?KMq=;F*p@5b&>a|-|(;()xXv6-s&JyolQ)ujdJBB2U;vEJ`o#Ck)tRg-ncq5qacH_4^06AtE;Dgbf= +PpI!AJMfEw6)cES?f_E{T{J_C&*UfjSr=J6PUCdJ0>Hx>u<#CK$dYSWv5l37VsAqIA>g<8Rw7OkrgAP +20y*dQZRkZoR|$0qK9t8DNCV-E1x!HPf3xbND8UMD-%GUWd6WVcF=~Vy2%e4L`*m>P(|Yk%MjqrRaR* +W{;h97NRLEFgk}7Y33r&UZ9k(7wt2JYaolbXr +`On8S>@-9c%S4q-uDeYHda_VuT9%IiK(E*y=aZ6Z6E3dhwy@Gx@v(0+5rf6v1MO-U5}wHeG`?{Fu{gm +`5=yw4rY%A~T^F4O;kAc3Pw&m}ctM=yPCE+SoY|I#$g!LpRrp3uf|Wf4-99pDBjSHOpOOfjQBK(ZH#= +s?Gy8Qwo9`jLJAHuI`(PllCE`CX^53EarhZKDUS#P>SK1JS*)x3ouGnG=OhEM2f^HKZOBXNAQ_$c-Kp +o+uF3Ll)MjNxyu#`oI#RwQIgyMaWz2^i?I#V$Zy!YHsp7*%@tS@#6$JGKV<7^?@8T)z6Gxc-K6B*RHuSLL2H8sI~_^vN`246{DTArO?8O +lr3g->ZW&hk|O65s_Fd5D(nH?Gw>D?gDT!!(G*vquC%vs~@llE_j;vuN;rSzm__2D*R_E|2sKzKI)H6 +eq2KinV`{);@*SzJvn$x)3ok>=y$-cW#Z_OPP>VrXdd&K>ux`nny6ui@Fd}*F~<*r3|XY;Y@G>`*QpA +nL?r8x+Yke@1N-+SztUN=_s+iI^#=L@X!pT7 +cKi1M&Xxm4YUb@2MCAl2h>laJ_dEpn4tA00}7%0fbr3oHJ +|WW+==>u=XP?W5l_BG=roE=@g8ADD^}d*gVXNfqi8@j5QAs+AUuO>~h3Z5=pp*Lnq$VP(R1XkXkk=E4 +49NWx>!c!bBYeqiN`bG5L2bkeDl-{R^+t=73T$bHcBGLt2*rR>K+(YbUN5h*C~Up`b$&c_1$ThO{_U$ +TvGO3dbui!Y6KF`>uTAs0zE>gW(yRv*@;KRa>Y!N9b||$5Bem(t&ysU9vF7l>&D5IUA^T<{Lwd+2czX +z$g3mSdyMjLLv+!9k3#pPNn+{Q`HLBbpX9?g87hPVaZu9wU{ +np62XVe8XoJrO53&oZi&AtYX!ws-LCoIk80O&Jkal<-JZj{)y=@~WrvVzH+9^iO_K}8jVre&)v$l?(; +=?cUQ@tdMA2l-|7set9{rNr@vRlzK=qi@{4LZI?TtAGuS4oPMgDI+|3%YE#1wMB;t-oa9EjC&hF7Pb& +WbrA$BNuN#E#b7>CDnEY&hS39xD%owA}%$al4{RNja}jwX85)bHQYf~7cfjo8vl0)EK+a5Y{UssQkwd +Xh7Y3>C`xM23MnPdE<8ksX6;8NuZvpr=?IwVe%AyYD)C6C^Kc+3zx;Miaka>S|)MkvI +fWXLRFc9<~{tc0UxMk7G474$W4iPOrp9M=>;5YLmz%*jci_}U~G9ze0}vEL#3bQ8%hD&SLbR>jCK6EYP5gvr87 +hBql4WT0SDzacwvZZJ8^p+~$m#Zxxa6T?P2QA9JqD7t1qE7CB;cG1l(-uL!PGY?}`3SAo(ZaAY!LQ3` +G73Yw>xBK8N9%7*$(A_+z#`cR2{d!0W7$0BKE* +_*v-G0h!b|~zu~*2n%y{#7D{%a8Z$Fi3%qH6V_TWO+jesG;5jjFY`7&@p3at{VY+z&sYb-d>=AxylsO +KgSsCXdPot6yQRz_z=^=(#7#(sK4Du{eIx*4n$|JN{%dwhXbwdvM{X9Ao11-n7DItE7K@}LePqB~`tj +={cAkNOYNdUOHMs5qP?**GiTZnrI6wSoY>jkd2qNGR#T~n@RaY&=C@&IJR;aXFZ9IqV-DX)){SJbh>K +j_RumKSnH2h!uIw34;Sq5waPCJPwHjaDG8R67i^YO>gv!|*wv=UheZ$W0FR&vAJwMC~wH$OBPg5!+SU +$-%)AXU?Xp#UYiqxcy-B#!EGWaDWew0&L#L{k}10u)<=2E|nVl*|{YqNY*^lc2p!K)B2LGCr0CI^F^EVr3d?2Yy4)$+~c%daI^bn6Ad<8T_lZ%nIu~zg%`&ab=MFW_+?;)#I +^U9T8B2Ep(x#ngt%7CbN{2n@0f)C}8Yy2ItIiUYvez;0`Q;Z1uqYN@$jIcx_!$2 +w2=OBw+@z4*{jy#wDwMFRq@ptFiS!LywmzC8$F|=fz9bnj1~hTC?Ba_K+8}AqXPd9^oDv!d~;jM8rZS +fi0{w$7aKqoF?DN%3Xzjk!t$~j+&q?r^6Rh4d#=qgC!}`fi3`D7(# +my5TFxgWN7mk-=sJ{4FQ9d_krs>lu3#9s`vY1K08rE!_-MW3OJ-AA6qaOmSI=7luto!$T=hQgG@sSSD +DBvWb>j1f@Pmtppg}XEhFnK`G?Rl^~5-Q@fJhv>-z;sZQ2m4>z12thC_vpyI$BR3`j-p*~GL>-XvG%(Sos5Gmj`?N`#>;JNr$};X2fbV8lI%Bkpl4@(o}C+ZK8@mt1d6c +1$NnJ4Ts<1K>yLx($PY>rmc*gWVdi>UQf(>B)g4_U602wljX1J8OcCJyLD=`QMh*<^T^I<&s6M*NTe0 +O0`QXvb%kVp9<4*9{G<^uthr9P6$Muy|_0i2}BaQo1qr!t((%pcA>gkYS4Tu)K3+r2A$oS5OArhSZZz +O*w6DGdt~cvYIV<+3@~0=^HgWIG7cbJZc=gsPWCAKW@368O;03FO(v#*;8Q?tE~)LQm&&(|aLzJ`D0Ss$L6L^2=oAn2Z>HmW>L@RINGop- +tDx3(DLc-!dQc<4?8CFfl$NEFt$|Q43}YwPY=PNeh&fa-LTQ^o`((9xmNVOSg?6{3I~JRFEb%J=b^0w +U{eUnGUQr&DK#bWh0oCjL%L8bFwdsHU?(S&r$tTX=+o(cyStDtHF)9*#5e>&?5reBaXs{dQGYTYVh=kOWgh=ETLM~uRI*r2#qsRL49*?OW-qY74JE~W5W)X|yn8#t?9KyQnVegKhU0_joK +gTZg~kfVJX#nNo5Jqm31YGy(KC4b07#TRI)OmTZ$#Lj3^GAdk+r9`n5sWD0D2|A&zkT>GRf8=-uZNV? +N%T~?2qk}4!RA(j{aV`T_&nO}2#G8Vu{fF}D!cJTglPpGU<&!tvDSVC#xWXw^!?Q5|Ose-PuZ|WWzO6 +z(=8(@blAQEY_{@wdt$7e5oD~o9@Xp@!j;*6)FJW-OJSGaXET%+k}1)$8Z&I^D-E6IXLA0r&@<%$uWc?g?H!?>Ew?X;Wv +;S*kIssuqmIVFngdo2b{+Yd@5*j?TX2tQM26T@nKuYhM1~K&h8SSM@V&%YXF{9!$Y}2cJ|7woGw+Lbu +A}TapVH6*Av-!7Qn^E9tPnp2tOAddiTIoL}r0_iI6o=KT|_ +n7Df`grX_=@Ju%|p=e5hzT`)(Z7I+NS$47X^DKO-xj)A)*Z@F4)&giz4KAVX#9hxGy7>Gg?rE1I0H}B +X!yt?gacdjmz+{iX3)F8bV2$hw&Bv{+oI2ouG^!jasrI(UG`VdzrufY+l8G2mT-EEzMOLJc>Sx7|M5PSw?fvmV+8P +qm&ky*L=4{-L9&IVQ45tRFXlnYk8j?led~hloxUuC+K--B{RMS9PIU7^QJ6jY$x5Q^MQ6Rt?HLn#idn +!iV1h^#6|f$?yZUOd-x(T-oVci`;)!$!^Sv2` +r=f*HiMoQCM&gWLav{%wH{u4SqLt)`F|cXLntE3Ry97fC+XGJx|B$>dj5@ns^(W10q?;e@`UYyt4}E0F}xWNh%kZ1OS5(bQctyneQo;xGW&po7WGkM^J3^V}9i(8aq3E)o>za +hMs3!^Bc$q3U`pMR&?=ZTZdxI>`K~+T;MDV{xLF0r8PymU40*EvbH+8QvB?*WELCd;uFO(pyMT=}=^AD)x0IOVD%Stn(wNu4At%(VWWFkj +L$u=YI;ZU-S8&!Tmtn97=+Ui4Jo3+NQ#LBgxMh&Tanww0-mWa>eB*XZZ1_M3t;RkhT!*%HXhtb+}5)2 +ew(zHoBrAUEp2ui`T_|fyeLd4oUx8!v^?ZoFe)lT8e(^-0?-I_s=3 +up13ZiR4l$M7xo)jRMwq#fe_TUF_N)YQMS6d;5)}=Q&$@v*MuFY&gT5Xp$x8a^9sFfDI(N|Yu_f-$Cw +Y|B9Ec{4YJ_WVu@KrG5dHhE5nzpCqxoq~+_es@aB(0jeLEE4;)vDcBu6@xRFI&ik|439@&r0@;t;249 +6DKx)!ea5l^$q8OReu*RjN6>;&sq%~W`1+05qmDB9NiqVYtW-_R#*(NwGon=PL;0IgK-ng!VniB#zfS +x7NzgQdC12qT>xG#vE*TDAM}w|;Vl)_B{v;>O?C&fPAx{~F}b|JD&1dT4Z>exx7*{T>~fQH*!G%BT2E +9V4)RlHKFJvmI{Vh`#(WXEx^JD7g`YKRaY_1bwaXLu^?4_cE)vTdSzEE0&f%$TPLn2LY(tT=M;m +KkOE+6-%GJ233oEAHK<7spBTDKXdXb(5F_wObqejF&4NNV#rPdRSrs4Tln!ljVSNP?d0FIXt_F$BJqk +^?fl^KTD5#Y_X6cA78-aR^f<-&J{)SY8Ig9+9t^xEaJ!rZwDOn#ET=m+5Y9G8-nvT1@HQ!RnCMOiw~I@;keI$ttexO@l +J+$8T%LmIS^3xu6qLQ9^6F$VnzV1d2q2A3l>=gXju7L^~Y1yALpq*oT-@U&SKyz-g&b?^B4PmrL?4)Qvg($n?FAsuVT|+2ivlV?LEL6G@L68<9WQyM8%n(fWOW +xZbEae(Zf^>CWWR-OhB +BE6%d_cyoB%;P4$h+$E}71o<*4#Qe;)a8Fqhv~plr%4S8f;<}B<(>X>e&g4nbAr1ISB3EgO3;Sv3J7aF`B)cb&5c +LmblCy2F~3#U@-|S2xxm-L+^bZ7E?7_XAf^o!DQ+Tq!uF%ZC*jQmM5{UH5ajiP$_8aq8rzl+wb6W<%r +){QyAuF!XFEN@GX>)LG(fc6{QPix*S})T?vEgFjjFFK9p7J=DXx~2yScE1UIm9s;h=k*B1_hVDx( +d{|f4_jeLDjfY_*7m#jCIe*bsk`tIb@t%cb!im`o7xr<8@mml`s1dmvs*~>o5+j6K +_$)}H08^1LE9F>0|-Mbp8+l6Q^X;&Fh#!eZmIf|RCzbV3yb7C*Gbi#(aLp?p}c^YxpG!JkQ3~9IqNul +m}s!1`fTGQx%w;+RQBE_m5*ap=UL@_g8K$iYN9K1bsRI)&FkFis_q(P5)e~v>_YpWXZ;L0g*sk@rd?j +Gak4W}r&QV5DOIksg$N6@8D)Zlm-YJYS1%8SMuTc`Xu=rHfupWn2~XbI2z6)D`7EO59)uV58}X>c1u2 +;C)r1%N6t%cLiAnBD0)#NwRu|cY;~#C}i7vIcGYP47idmSV?kdpJv!UCLq3xeV5yUp3n>g#+i>&tno- +`>qnea`6;UBHIYXQ()tY;Y%8ryQDZ5!GiX$Rt#wLNkNa6wtL!sh}+{w#7A5|oatO+GcZ9S|fsV-XrR7 +Gg&Lsc{%RbSv)1A-fCxZ{SThAK3}ji9oSX4?tgl?&ToH$dn;X8lWRDdJd_@*g`o@j$zhL +O0H$T93vk2Ae&0*hF48sfd8&XgH(%;kD(8`6#K#IiH}e(@Z3(M%`&qpr7GzjvfvD|?f{f@9OCiV0Cl$ +8j+z#hgNtDU@6rAFI+QkDNXGv&0I78KuqBR?tfBx4fpMTvz>2wA=zT3TPYb=Rg%)a|uoiM?p+9P&axL +_{7OK)h|3?emRf^q&5szR5kn63BdT+?ve7HvsO*o|qVy;=m9^*mk*1R`H>Uy^_e0)UUh +)w-@7hbLyHrlI+MNk+i+C#|0Ft_~9XFl9^;ZMpC8xepRb*${ed{mKUW0E7snNbw?^tF-_nLGv?-IK2u +8nx)VswY}-F*^Idz|*I#P{xF*m0+QRW#791spU$yY#eJiV%!kjKg9#4g-+&r3lFISz_sN`hhD(1-o!$ +Q53syG(=M{$_^_?!>4rPw?}vzMJIdqRaXDUCPT-keBBUU&+gOZXk`ki*tXdZmq +s0?)GSIklut3qvpYgK9R%fX}QmSo_m-&a*Y%Y1uM;B+}t3z$$M4kL=52?d)LOQgAADF@L`lArieY#z| +oUMOTVi-(oYPQSs`{2jh(N@@;8Q6qboS?pgzIU!Ua|?rQ~}T&mWjQ>btvXWt=P?c+k8^z+f}`^T{tu5 +DyB$(fkw`24spqZ#Ae{*Wlqg)OnaMVL+yy2hM!$6lhcW7VGf0Y_ZM+zzBKnR6^Dx>;VA4{r17Gnktm) +o`d;)4(2dEyx-`_x|Yg_gL4pS&i?}C1r_wb94g7NDbl0(4G^L_r{R;eb;)HveOcdtD=AQk#S2a0<^^; +${|nnmeLcS_kK1`vK6;shSyC~nT4-wL4lK@bd$ +Am7}xK*SudXpVHj0QQnSJ^I2M7r=At^fMvhD1Kzl30P +r|3Zan>fX6PSg6&)P1kwIT@VPGojXxbwHLnSH=VfP>jwmde{s9W-b#I`PB`T2g~-ELEsvMXs?--Bh3D +0M*kp*~l5s!vS@ZGG>=`_b^_Ww0z^`-Tzu1GgmeH@~I;g&4KhJ|1r1Fbxp&gdW*2hvHitx#BM)PNCSx?KMp^Z-9oBxe39k!10fD&Ax +ZMGoSL-pIl6^ohrYBL~NssZ%#t`hC<8$Ah_3y)N?XM8wP;XqUs%HnX&im9|;JA6YZQ!EM&x{`R*oqY{ +AUTq>p(zI6mM?#MB;S{-)^gTY6pA?q2a7gt+ +j=oJ9XHj4gEU;p95%H03-5SLVQv1nJ*xM+uzRZH`&`aPb>^OT)~}LnC{PCLEhJn;_N6hh!JB;NH`7Mw +FyryLnbKC1!W_si+ZJ7mf(`H8{#1r)Cg}f*$bK64avflJEP#(XIUvx#Q=kH*+ha~FW*}_fvzwNt +PP6WKECtaj;|9V;J{P0%F$xg1K9-6EQ_@<0K|ipqN0b#B8KZ$7K=WTHlsc}Z-||!V47OxrvZ*upy?k+ +K(&mh&rPHt%|7)c-j7TLtA12^P%IE_bomLPH*4oMcef&6ivIRqk82Aeww +)beulqF-t41VYCdswQZ1F-+KV=I7WwbKgnqc$CkZ|FV(RTaAEt!Ko-wN8h^8uf$PJi(7XnF@KAA#8Hq +YgXKHcJeTo!tu0RD@l(JuB{-Ow}WqfWl#LUH7hFn%mZ4 +}d6V#F1fPJg$Q|%%h3QG0dALJLBTr8!pLhNnfGf{L7ZXEmV|~b($m}kkAK1$d)7IPs2EE#BlQo8fFWX +9BfL*vm`&olAS$bsHhZg2x<7VStXZHhVuZ~tj6fKk8W~B!M5t9l;c`FxDDncz{@RBB5r?30g`p^Xxa*iY`J|JU^7(OpDy#4x&Z+%BAx&r=;U_7eIYFEvdwJM7_21BiZ`%5VWZ% +MdJ^{xV*e(ZsTjCBg-{%uL2X7QiaGS;Zu6WObRPiK>TCR4KnMDaL;00xNMLu3b$|0u3E>AmsS&#(^+B +2C3EEDp~y{_O8@;mf((nyw(SOPJWEr6i(J&X69PF*cJIO=!x}4T+ZqWoZ(t3Ao6A0V}l_f51oHroJ9} +*l9%W)NXglaGc$IOES#k_u0Be}$rZj*ZJfAB>YJ!q*7@9WX**SC2P!rgxxi<*FPVa))4&DZM@uV<6#h +Li1k233b8zA*V|VA#w`KR#$#~icbW|~((rB%hmzG)UC5w}VXoo^*N+~iyW7dwPc~e_kH>6=gOiREK(F +g)74<$@%>lPN%K2hnYO;&pX9nHy#S0BfUPs2F3`fg%G8*ykAL1mw(yXMMluttRZ<{>SYn_Pvt$f{2hi +%5!DT;I*0GsS6$i-@IN=#wRk_g^9&oOq)t7-66@gMK;#tPrFW`mcheCqIf-74EXQFmP~e;H9yF&}bmI +))jTKxTxIxP@D%E^XallPZJ*+21O4joCrs(YBehWf>QvW@)BLhIz8%Zht)vOauE`+YNx1y^#4({Kyk( +UG7@wG8|e|;{l+sD5&lP|3(&32CqIH!gNVA4JmGutBL}t6RS=rsBAZ@^ZrqQ#NM;4Kn;v=TGJsX10L@ +MWQ1?^2wsbW9=GWx7W$d4R@(DgW!U1S^p$dBN5{Sn+@FO0g#NC!rB>Y=_4M27jv-#X~w9Q +hG!Xz3Ot%aoFzW1X-zj{>)-`!R{U+CfhrZ%Yz!yGF!uavD@36Doo09|%;kc9RvL`jw?{T^0FM;8T%VTE;KY)b);UrFln>7UOP*r+(G^7{RZk;KON=Vwoa +;?qLY0MKUaSIIGuFN1|>hZYIud;5M0Hsa4jca8T6AY2*{h!)qX*391ofF#aH28ZL{8ZL7<= +BUGQ>s^b~Z}B(&(P(|fYxVgD{>HyyF84RSIhmRIx|5l>Tl;l?W9NSYKOGwNH?AZXK7zo4nL-Wu0=}dL +ii`RiQ^1`XU|abjl^N@8{F%^B_Gj-{3BoE3zzvC1Em6?ZJBt +=noMS>yr8XcB{QhGeWN}|=m~7uG#*STJk7wTJ3vc8@C$gZNSI45bO8lI`Sw2ELjF#_9rivU3r|@csnP6B5Dxd@=U{~el_f9N( +nObjS$R>g${=OS%km22OQdCH`_Q&&UV1?52dfi@E|hAqJs(O%4u4Rtwul#0eu{Wugr6vf#qJsMiSWgg +aCfT7OpjV9DF@rL7Bd45b3UKrH@e-+NimRT)=@ma3CuhjO5IV-wzA4Zn_B6`(=k|F+?yz_q;Z%}*Xg9 +->4n*77_VKEI8CA-hR-G2K1?$F)$kd+NSkEYBXTWYFi2i5@F~8He5Td_dbC4qM|X3LcIh6nay9zSr9h +>mRCQCHx{39Wb!pU({0FI8mGIma*Me^Nbe;8K)RihM4-3mZ7BzN~>9`6KRLTT=4M1hlMnB;>(9QWE=Ho2Z;#HxZKU%3T?|)mzlZ!hQ(60l7nl0Vz*TcS +<|6s>dol%n>-ZXJ5^pq$Gv}KwdCxTR`mcwOd)rF0L+ok5a$O;b_7;z1hdGEcWi8B?Zqun*@hWp{s%ZN +$U`w>n3-!=Wm_xrU!q1%}Vj!A=|!;>RP>Dl3>rcv;j>v{+#hc|t2mct6PqdGM +*smyezxQnl3{ZZJtsJb*~rXW_DN4P*yNIGvQepI9d$chFB(C&mM2oOBY$&j*)6E>0@Xo`b@AW%gW|Gr +cvi*jyz?_@C@plG1b`gKwax*zZ@Xtxb(1Olzjh1o6|OP~9Ia +Pc;uPOZj%=o`zE|ueFe&?UTV5P=^3@JMW;b^fcNG@MTaTJm~#!1+blxE2n8~cVHupO3 +DrcR9=o0I{UB#ppjgllhGE1aPRPr9hog1TT;tnk5D_n0amTTiE;Dx2~c=L_8r{*Oh?npAqy^=ksTAb{ +jYO}B@6~Sge*edLw>@;yvk1&+uH@RsY`Ll+(7wF(4^UAtt)Rz5#z?K={qLKTm!6kF*#m0CB|3Ch$)%B7IIV +Fyqf*%*)W44^uR-SrIhH@QpPMQWBpsX{31kTY;VQBH`8WN~~f`KL@15JW4&1ahjQjvkOjY@jG%xGZHD +In5fKSM>B*3X|(XK#ZU|KqNtyAg=$= +rHSi*>l!Pr_ampC*}~eVQCU5i?9jn}G+N|%_*72H5fIY}5q(}e0x73)hs%r1Vz+^B(~bx`ty4k{m`%% +cG;_L=#_|C-Q9b&B5hQn!*}&_Xmz(_TLgMt3auqrMZnEs5cPSn`rIN4^ER42)^)Fqxb5+Z_Nu_tJYbZ +U#viIGj5O=?;tFN-dI(mjI2PS>=)V+t^Za0B!2Po|{&n)?;7fF`E=4CjDH`|M(}aPC6vYD+?^>6Banh-)jr)C@)}JLc+x6i>N#`WQ(O+XH)n6*aA=@yz&L{q +PgLw!M}(fnRrX#iPkhRY7k=vVL)yVceAE2zO3+iUHsS-jv4vX^S=ee85-PY2nPkMjlk2Kn8%lTg3g!p +12uk!KflgH%BG=K3u87cu*eS_$nfBkIDze^r%ve?I +=Tue{Kh8#iHP;(pIC_UZqrrTRzQvC_nl1+ydrCcRGL-6p2#?io$u-8M$6A3XCjpmI0Dd<#`Fy#o2F`42K$l6n_k0(sTwb|)ct<)ehF1@SSpoF_++oe9rBogS&X=Pw6oCCr^R&@`nWa?OIlO~utuRwpu +waEH=_1Xw;KG7h!HUkfxl(lw+lRJ3ZaX8NM--H7=nJWWUI}HVHZ3zZDL-zjFgJs4k>Vd%tz-nt=%%a~ +`pTv6F~vnyHyhP#rA06w2#Cd@q~l~@hEMiub>injeUuCYi{dq!YMD4>;vVzi=~vq4YHl2 +NiZp?Oy7NF%UG|W-R%nVUs6v&e#)uQ8+6!^?$^|HiIic4S%_J0OxRQVycP?_vDV$Xx!xXCh=_g(^p%T +Os&iR-0qiR-P2t`@ZsWGDLlXo=X^2R%3McK|PMcEM@?71WuseI?35oK=TS@CUxYG7oHpt^k&^NM%ARZ +zYBPC`)q=Zd7D8gN(~e5$yGW%$W-Za%maIsIjN9RQ5R6fqk_mYSNlCt#q=;_%3QavBU9K1+NEgccb17 +DK91CVq!r`LwMVgdcZ+QL8O3IYRyocbJ{5QCy_f2%LE9b4J3VS%@ +p4Ik?BR;F-ePy6eUG>dhQ?;3&7hX>ZH{rWA*)DN|hch0?kGEk&IW?`OlrTqgxE+TN!59gFca?$Ip3qZ +R}{--shb3}SPkO+O#g-mWneh$kr!>rTh5lcOTZ=c`0w;^!5%@dbrpJ_iC^U_Yd$??dp|0lbMWh@a-zZ +%nriQ-hC{ +An^0pEGBk+0`Kh0@b>F?vngImftZnE?7spdhGU{o1}{?^#PC%^M!k5j~HVtl?Zsb1V}oF|M2DX(V)8pVEyz;TXEug(P6jlT&hec^G)BU5X&@Cy}m!>y+9rwgdM% ++9*VniHn?g>09hR4Ge^HyMh?`f{CT;L-xX2qlVQOZq-N#kmnl2~iBBX|h!yQK#cr9*wRJ8&$3p(Z_U# +7$U)#Z~0k2M`>j3|NG83Un}|lsm+XO%u}ec=-@538Z$)5hN1y`2dB=*ScO_Gb}xWg>o$y%qVe%%w5lB +<5^6M6rb;%t%;dNZUX~qJH~2$4I5;hH#2(4YUv8=^iZBCDRw!BUnXs?~4qc0czK7t<-J;@2p +CkqUNN1IFgmLdWoiK5LzQO(G#1GKGvgSg8K4QnZeqzX=Fuq=8iB@5cBZkpDsK)${(?FCS;*bI>bK3<4 +dD7bdg`;O^2~g1c`6pp7NDQ!+)VP@~lzG$$Cy5e*>zj3gJ~XyaO*#%=x& +?^Xn5MfbmI8E*q8tJ4ZWR-G?KIJA72#*Pmn$i0!2yn8WK*iybM{C$Lj~2Ad)to7((W6tMg>kq!q&$kE +Yx)#9Z(Y)wtQcnB-{10fHF!5E0DBt+A#*9+tH9)RXmYU9-#n>2#W>8COS=g%~xOMyr>axD)HQxfOv|o3lC8}gR9j(;LKJr#I+ +pB=h!PNiy*eN+X7!pi*sg8&s+kf(RU0k49A7tDcAmE65umev12Mg!otwDq^fUS=Bu_st +;Ok_Do?iAqGyVk^BWr9YZosTdupsovo9qytRSfRSSC6`{lWRD2@^`ioGb*7|tm>6n3^D8k+{e26Sv=7=_NO()2*!Wo0g^Lh=JQtTlH$cI-k)C +9K}_?dpAm#Fl2PbBpAS?uw;$ea5UcPcCa1tU0b8{QBoyrxnVVTu%z)$oWN$6JG<&)#&z^(L +p*C;wa{}#Vp+Rt)~Za9GM3L21yq}{6TdtSEkRnt~pWM%>?Z}F1cu)acO)UMd_TYc<#^nVSHSqOVSq^) +or4UJt0Yq@eEY`+fnA4xE>DD=-QgjL^q#X^|HP5!JOC{Z}FWVGOKSojKs5({6?-+I|ST6ABXpT39XC# +#!Sa^yKxZLYTr4&e?)jg%@?uu_G2%rKLg<^}X5`gP(Kt4S!39XX}>DgQc&&n>+gU)iNI@s(D}IG)Dar +Oq8gOn5@t_wi30`dvT?A3P8FUAuOojcd6X^{-`jfozn+-V!U!&LKQaI3{%P$O@Rgk#{O06O8+$x#;aVFWu?JH7+ngKMWs(9!npCM+)(fs=UvrAvXa2kYh8%^D`&d;hRYou-KKofulF2_LK-D{}-Os#&Lr-XVu0>KTqXHtAjKbCa(#% +>1~{R{Iqvn?V124Ludg)@b8TSq|Uc828(VE?;Fce!@uJy`$BI{=zify)HKSM=Or!j&?G{Q9(tk}M}F$ +?}lJajICT$+1l^dO?n*8ff;df?!L8Ul#0eRiP=2jO`DJjETj?*MNO)xFRu4$p +$ukmXJ}Ski*>oP=h1*q%faLrV4gQ7&vzkI-`AwqrdJbJ#V?nut!`V$Bc;h-%Bw6<-2cQ +YIQeuO+)makO@P^;Y0*ppuZDCE|8XX_GgN`@GYi!;n5NhrsjWuPc`Q4obNeH%3i8u3jhqwIG+f*Tjk4 +OZBUN=;S`8IY02J49hQFC!OZr07P(Gj1G?Xs<7hp2C-KH`)!l9X5ON?P?&++Dk=|XCSa(7S1~dZNa3ThC`1mEXaN}LKL +4!JkbJ!N>L4FmjBMViyV_`a9892k2a)(1M0G>r&yiIFl){azYp4K=uZM3CI7Ljxi6C^;=DoaJogLd0V +KCR8jAjL3)HI_}UL1XLIAS?(+)iCCIS=$+pw`7{m+p|yUzm{@%&SX5E)H-eM6x<)Nz$CH@Szan;fFEG +y#{UM{-vcHG3ipl-ZPj)y-r2F;v3+%Vro8VvNfqy0R8t)A +U9;`Jbcj!OvyRl9r8z>WP`L%Qj&DK)V;RzQm@_j79p)SS0j$oY2FXS)8KJjJMA&4oJ(;`%scG +`IK2vQHeZyn?@43X^44Ai}2)cJ9Ut-IVnnY`2=5kNAXPn-EuXry{;S?Sv=3^Jth}{hgab%k8&0`)qyo +K_Tt%oq$=f2F?o>xh-oPD5v3WYi6HBuVxuMEfr%a)Y(y--GuwC`kdgk4WNei^0TYlTn>Wn +>f)?OU**rqf2S$rTvdevFH@vQGQzelkuN(h0dI@8X{qwjYSK!hyy?v`D%mC5c5~qd#C$WXUhApAS7CI +22RyDwA{bw;AN^Z%`K~3Zt(8^J}#mkwh4O6&lx3yLcI?uXD-(v0JtiT7U_;b2Vphr2a!uUa_m2spo_(LaWd2>^>+9W%zVz;R< +@-k!&;m@)*@nu!~oGLz_EIEK)WMZ~T<{n766m;%K!zA_r^-t+nra;|5(j!_1(DrIq?l=^aw5nfr=J>6 +6`Nb{pcOCpqgFmZC9K!P@tNN+@>{X^moxSM4rR2f~^_aH62VHhDNwuIcS^orxnOR5akIZ@LAvJq=yN# +a%QmO!d39=NIy!e%+_yfYi^--thcfArm%yfkoK4<~Al`<&+IIoleia^$*{I%o<`x7m^eSe~bpYOvK(l +H-(YDc5e;DatzIjvD=AFiebqWnZTs~beu;E7q)c`Y4V()6qB_Bi-CxbXLjSW98GdfR${-pYnJ^mCzo#n!LG>D!S5ivUeXUrubt@P^7Yd=v4E*fo_5Emh((I56@_s$zE%N+t+teOOcvao94^NV +0(wc$5jn$j6BHf9-e4+e*#eqM6bnYekTS?uzl`$avjvRam+l@zom1i|afNC}A2vDuE2tA*q-3;B5DtC +(AGe&PUM{m-a9l+cjhSsG<^ViZLIaqEiXv%MDt-jQ>{!&$IwJK~M2sd#pdyIHl$F+8MLMfFJKemU +tz=OIsOq6@%0lKMU+>|ZG&6^6vcnTL-gS$P4og+52iffq;fhsOgiCX~99(4q_wPWM)EQ8VO1ybyuN!L +s>kMhU8G~#D7b?<0zt)`yMdIj-!90 +8Pj5*xVbm2YFQu&=&|I~skM*OF)fBgXxcz+) +6~Nbc*umahJ<{~i_9FJ%Akb;m8je{*AEh;YyglRfrp8N5D=S=0rTG-hg|NwtS}t= +Fn}3-k*+wPFmgKNa$P&K^MG3IZY?Ltccc5}nRDncEI%6__P}OfO2PDIM^51x`d~6r4AkUZI8q*3YK_q +iFsFAT%7gd!WTql3~Js2eZ9A6bq=*Rc!E3tSVbe{f$b;1O)Zf`=$vwP_RTMfv5uu2+P{U_~88mICw;B +sbfAJMLlaPY57jl*LPRv-_`ZRD=F{;L_?V=upvL2gDt3x^pcxR+jo1Lc=A_V9B`8oM>h;vKcLBlPx+w +)plNlS>Qq_q@hlR!FW^#~$aPzaXYvDuEUei;I4_+yMjr@Mc!M-6*hlxbvt{`2-@l0~v+k%Pxe_Zckf< +Lde%D)1SB|OF=oSP29O~<$Z5A)2ryJhHdR+{}c4SH>>QLvqE+itROi!u8y%^yY3Ayu`4gIu5$TDd{4? +(-d%^kD{I#7ngFOdcy}G%TBq{g6}J}5RrypqUodym^}%_YWXm6=r3Dtewr=YmL7ZKs-CI}wN0uyM^pC +YTO&q{#>$gYf7uVTB>tq^ke$b3{5UlcYi@d^8vYZuCXwxF@<*!&_9#=B;4;jn4gO$q6(tVay%U!E$YH +QXUH8W~wgcx6+*ycg+chOc{m1{|5Bw-?vKVcf}$tQ?k4nA+?kn +^=3Cdl-La9edP=u{#$q%wUxMlvGYQW)wd*i5J+0YtKKg7Chy899IDU +go$Fz++YE1&eX0J1l9$iUkieFL-LdG?t$QwJUpI-zhm$>>jW6yX*((mt(Ary6-GeYT4@y9Ok$KGKb}M +$Trvtvp$z!zuu&sI{VECdqy{6lAq+ZhLTc++9F_2z2Y++nuK@n0!e0*jS>Vr%Z76@dM=F1!2i^qU1m3 +;y?uB$Kf4^_b|MNga4PkHvy=sX#dBD9TmNpR&M1@aVb(!TtHAR0xBeiqM)e}%0(drgn +L~|1-+2s6_@vI(bUqk-O3iVO$9ZVveaxb+qCrc5S5gsR_Oen&vVYX91zU<_I|(L-~am_c<#)Z^?9CoX +6BihGc%r;^${Lb9v5|PNDw`Rz(%kTE;Kw&*}rQUFf`g#>NOX_u@*;&9eUVOThHp!*`d{183fdnLDNfT +pRA^Qzh8=cFMLLvUcHp*)yw2pwM+t0CRIzgOb~dPpq~JOVFZf?dvrX!aEOQFN9Nuc=H4rYq=B0jrlzc +Zq>x++3k@Nc8NyMZnlk&*!*K>Eo91H{p?2D9$#{lf6T#~QWd!>O4iS92l*^_a@wy$Et;lReW=k?#lIc +&TKbd}H`jP2NrZ1VEWO~*v8GDF!6_8_bcWx?;Y%faYYtL$8t7TT{@3Z8Qhl$>NIbP_eT>sfY0Izs=!UypW^!%-U-IXT_wm*rkLTe9*M|L@$Sd(;jZ^ +81@9L9ef`k3d~Le_l%oo#2)Af*TZbQKyrO=-LaOPI(547$i%7uXRIoZP;;PMJX}i7nb6Zzl3~F5(|HX +(*ztZ@s5t(iY@(9jVIUjS;%}&E3Qb^6BGI$+u35!u|xAMtdwhrh5{VQ;w(cVkT0#YRa}^+i#ha#c&`Q~Evz+O2^Ru3H0de23_(b8FzF(z>?>;%YmOk_qQRC +!DiwOy==3v^FSk0qSvc$GOr~@p`EmfHlcac+pfno{lFsib;pN)fr=k<3^#LrN4B&ig-I?MBW|boO3bk +_ql@%$oB>EVdXP!P$ujq%&WtGw@umW1I!(JeJk4}C{HcE;>tr_#G`-_(teS$s50b&`j(g&I>BuBOiZl +wmUc7m7`~XC2+FRJq5C=I!BU>u9b0NW>ALZ-q`3BthrU?NZ@CD2sJoWNR3RlT-5OOlK{> +?-mtFQ;Nx3TQo?z*zqH&~&E{=s7Za7qi*;tzTn{Y=$VWvl*^zS^x|!a=Jx%lAWTJHEa%59%6HtQp#q6Qq1NkWe%HT6g!*am8oprqgdHYQzo! +EMH$UzmJ-iqt`fthO&P%EOr;N-vz2Zd3R|FIEA8RB1fxW8U$++ +TYJNL2U|m6wXiiD);?^tzKW!0uDLv_y7-29Su~f0s!LFq*A&fVI=f8o9o8qSnRM9#r}VP4T%yn$*;{$XB2HJ95}mzH5(!!(yRs!OXduLRA-S9NI@<~2%lIqzT>bC}l{&E=%(5)kG!UU +T_SbqNXc%GF%TRG08DFPrA_qUvG^^O~u-tX5s3!@Oo|E{jx`ptDGcOJ+WaDK_S)lSTJIT<|D&_qvD@srZ+x^bX<-J9%kr46ah+Vl +8dtD-6`JQl_sVZbxvE;^yU@?uQpA^_Q5~^2-{UTn#*fvgcze|ET#V;$jtcO^;rH5g(BV$^{%-c}gjDD +Lsc!a8jZfNcDp&mbN4ncvlVkJ#sUCKJ8dW%UdNw|3|IkSq*{)@6%MKrRl)3G?u#;zGS}k%XS}B>+L?A +`_;=)cWeAqUmJ2CM?9v_hF9;E*crN51I!ODe(`JZdxpHnj9{B*|sR61CyoI4-MTfS!b(s)V6dd_U(Y` +)N4y5YDoKht(>iST}#KT_rI5xsXw??2r8HBjIC6+}JxB5eI~zNb7$6-~zYItEI6Gwk~^Ip5n9!TY{=+ +tzB0eU~vGMzU?cu2_KGOvEQAf+(hcx*f(*`1(pumVz1;4&V7y(?VVNSm%YkQczgJ5<`YB +Qo$sEH3@EU#Lb%ol*HWJ`<#RpAY-WR5Y1vi&~Uy=1X5T^QAAF-{#-7^txJ2Dp7LILY+v{#CD@7vewlZJiwlX+lTiF@R())}JD>p4Ls~gM4KBsOh14 +D^xiwzvzXW(&_i^mnGv9WA>osDHfhiV(k_VdOv1h3f6`?X;8ta!y`cdK}cH=nT~%RrZ?2-ec=TsvJwOSdJb%Pgqy +CR)xRKFcp97s}scA%Jv{wSeE^UD9w>Z%W4@`JnyR$;9v2$%Wkg +tC)pQyg!i@ITzJ1*Z+k1pE_W?%p(}025y!L(&(f|7DQuTU>4hA@t`b#RuVN|v%1Dyx1c0rt>D6I-qx!hwLs5V +Noor+!RocDy=5dk$HK0E>ch|@QZecPN{f=>-bZxgd&U-+P^DRodHH0em>s!X!QD;GT7hns` +t5`iF{IRI*Mc%3HAgj~id)4 +jWas0OYKk7NZVcSaCvK3U*1&M!Cl)LCiS +ghukx~8hHWOchTXc>L#%`-Xz8qgExsmoG`89t6 +EFEYZz29(96YcPTHdK30uXS>~Nu6-7NMcHj7<$4!P(|uC8e0UMH4=n*vd~2CP+gJFektxr$fNFZK_?A +ImM3nfB&|zfHDJQk}Szl0(^!ZA38VabmpHY=Cn!yX;Xnoc;be)f$%Pu_eW8FXBbn8_pD0cZqFi90V~EjT_FkfmUodJB@}H8_t+&Y$xO75{(^GCf0EYc$VZ7gr3)GFfDbSHvv74!3d`i)ASKh{Z&1}>_Pz5O(r|&h}?xq*QUhd%49cL^wY9XpS&iY +XJMI69$#GYc@j25)8_+yTRt_eC-Mf1yC(7f5~#>-sw&X=2QtyG4bFSlTm*%01jHl%uGWeegX9JLK*u0 +Zu|F4M`=s#C4aWz0QYIP}eBEOgrDGNV-Jo6CT7sr{_l#Yk?Pj62IfxVp0}#9!N4rV55@XBk+b?ktNr% +iGHIDpgXfDiU1PC-E1=9~6cL*~Un&{Z9Vf;}&G8w8Zj;F&{^nd+~nz&w(s~hc8xk<)&|Kou;qSC$^A6 +ds%qzfhw(>m17&~A@Ljwb!v438~adEU>{H;wYa)fw!!%p+FM|yA2!4^SKrKPA@a97+-nDN!hxFBv4T_ +dvv+b{th~wCyKFMwskGv~V0e?fYwByc8L^z(p!qr1aA3}a+F0(9+WexoE7)k(UA1~r;@gl_KE}J{exmjh!GStDX-m(;ygiP)rh)+Yu}u$!!^e?G(^1D3>IaL9 +ed5#ZLE{K_eCBHSqCV>C2U+-g3m8HRFTH~XYB!7&0z5{6_=i?SH)JFZrAkwb1U^hWyau0vPBDC=kPA>Ee+}F13!l91)oVz=TD$-~7quGMP-FH3yIYj8dj9 +VT%^%qauSU+6bJ5#KPbnB?X@>oep{+!aGWo-y=-r%EMKZ_l9*nD!!GBMigg10-%Q^yFKshLh8AwPE1dGv5- +QZg{E8V(HW>FGG(X4{jXh-P&*Q?#pf_T;DP_M(!QFG@xquWYS+zr>Zpxh3j{ZH#j5Z +5CfRM;}*`2pPU2KD?RhYlzoRwxO8V=4)IPQ;!4>rW(@w6gsC6{tcqv&^i7*zyG2)c0btLD+Nn%1gBzM +;u@;?E>Vx|b9(FBS1u=(wo|u{c&N7(FB%pS;J*LRuO({&D9weX5%gR5tGmss@K-l`7iYZxg~Rwn{3hi +Vl_bTxCi!PeNqM@7(mo#@;%T;-GTrg5MUt|edr1EzWuT9CvFS?a3LfX9eLM?IMT>E?^~gs^k}X-m`$L +CP$7rTpO%IkQI6Y)f*^@YlxpG_$zfDSV*gvDYz^+UDyQCG=i6`rN|!UmW*@2pmIpE}`-c) +AsTNhX8D`#sk<;a} +~<@ndbj`3FA>5gV=0Q3pLEbQKsI`W+l<4kcu-TO~LyinjsL)b@W=e4KhR8zM3@VxK&9DjVIZ<1WA4`_ +LTT|(`VEWs&+ojbMO0+T8WdXLZ;kCuR6O>Grk24A{Vjv%U6w6`$otq?rA7&?0>8VeWymh|7h@E% +<8W?_de|P*;xM@F3giYM49C=EVaVOdg}S?``2E^Q55;)nN$`VkS22gkBHO!xe3WTx3y-fnK2Y&@5dLl +4HUt06rsL8}S~=O-V~^WrB%%JMm-u_^nYRtr%b@J_KTBDL+m)21y49g<2q?RQL#lQCcAX?UYfE_52s4 +oNt43Cs^C1@Yt=GA+)O&mY(weD6HAv1g)S%^+1)on!nlid6jzFoZqzYMDiev-JdGMFuEKf+%&S2!4c@ +*+Vplg7%iYhNg95Jr?5V!paD(dIm2<$K6w>1&z6dbQ#96 +Fr*DHGzKWA7a)E+#6Pn@Jz{GgA>d?00=ZI*Q*R2nTNyEhFG%p8vJl<;r3HqalCP?9l@$xFdSuvQE!Z? +yFkbPxmYtFvy&F0*Ec>G2$gmr0Qf|MX!6U;SSfKBmytn4sYxP2LzR5=!jGGsn@xCRIIMuzWBi7G%ZzP +}VTiKjmJWC^6k{3B)DCUgxb)LCv{N$#Hop*O9gIt1G`cCFwn~MALFnhv_gz;PY{B8FnW!Q_n4dk+|Ly}@4yYYbIAbPJk;JDJ=xoeRnAfO=J-Bg6dxg^E(q +PB;G67n!4bm4{C37vkS{)F62MUQhrdtRtX=*<^u5_+*tLXTaM(0Pkzp=|Lr!O6_F>q95_+x$ar#>FzeVY_ +VVhb+Nm*u9~h9q?2JpB)f7rltL6HITPyOEU^(ym$r|?Y#%OOl$oh09be3->+}_Op^|*$(9gs*B +7^!I#^2#^PGvY$kCM)GtDT#vxIY@bH`Nb@4V(KvR<-X5hEECbnU%773J$D_@pZ;mIZLqUY})D>*$MMk +^?gF1o(hUN&9P%^-zIn9KoUL&Zc=9N>Kw+mRQm;gc;P4KQG5YRW|ec-g*0;C=iCF+<8b8=vX3Vh92-h +u4p$uh{P1^&k2cwFKX>7*vx-8sq!7^o{uln`aX7D87=@eRn`a86u+tk247juPcVMQhFz)vg>4{yg+$yub$1=!TVHX +Mr`@Au!bv&USMNiD@D3Er>;n +}m3vmh2N!~W_MP?JlQKa2Z&8v49$uv=V7ON+^l*~EmkQP&E7&NWk+mI~AAJ{2VVn6QmWEU?!Ikw8=co +-9pgFW5s;~aB+g*}8YRFHV^=TXE7c58bjE4*lgTzKbLLYYzo;G?RfUp5>RliJ8Z}JgQ3UCmpznW7d$0+p!M@XVl7fTvsO9QcL|f2DR4e +d9}{w^L8>#JM(YcWAPLYU%AKP)fijq9c31ZRQYB3X|IwwCsj!}=s3~7{DfX!dmuQ;3g+OzRZpX;pl^U +2SAY$WO_ZPJ1N(H-nX(ayxJki85el3;9p4m`D?YY<+BdlArUEyDNPqm8@e_m}3w{#ta}R!UOG_{rJ=A +`v_(NMi=gxA)(`KslD2?U#rLq1)?dKiem~8EwJA*$j|IXd!Thh8T)-%q2(Q(|v=Do0WIkC&LfU*;O7<@XaB9d5^*Rc&pYfF@2VILRyLN`hf{4`kB|9-%b>&o2SEiQt++Xt(AM` +pkF#!;;Tf>x!NfhKuXo+9DV1D~%RzHD9~%Q7V-I$$Y--(%1D3cK%Lp>ceK@Aefu+rE6Jo*?BRz%z3a_+J=St*cv&?JuQw8e_33oG$@tq`Y$v6jhw9aD +CwA1m$0iad9~^^y~+b{=v~1`^Ia&M*rR)oe@rdIv2Kw_;C7u*Ywb$`_aU@0Pu|4itoWRnxD%vC@}{W<9&?vCmwGBN{^OezxGSJ+>ao2I{xh^C30c +U&jK#tYoD-TWrIX6c--oGH@tzsQn_0}V{e=3sl194Th>=`(zatIL7~ikdkgYf!Cq>vwjCuwPCi_ +RkbgB0+oY-wQ}bD+48F`ngk3f*zJxYB*i?iwMoN3XCHpF?QuuHbeBR0%_DJ=4tLx)B3WKPMY|r+5r +0l9WA4*+uVlqH1=ms8FWQx|nkn$3V+)&mkqv2>noR``LN;C?&$=7>=s$nXDc2b9cFpM +o}NVU@8L1M#dj8Co%;u}|!YHh|y(=QRfJJbvJt=cR}%FIIb0Jf +VPmyb_>FG-n#cjf7sHFvl|-BKQ&i7Kk^C>%T!owIl4H_F^v?%h>)=ibV9H3bc)VuZanz2=5k|9q1YYe +>B^()3cie^RpZCsM#|O+dve9;F@y?uxHe#gST$mSJDz`v;y)$`l@7Cn~4ba{1wKfpISFyH#QmuG4bEr +^vn~d@q8s^)&7@RCsr5$>{GfS{jQhfjFnrI7_tSySNtUS80pHwy`<>fmLmPGcCk@k_EnDXH9&c+*=qV +CuUM3I-YlQ@XfU}VkHs3QJFQvb(2f>49rUKj`k_g_L0l=Zt5{z#QE8c3p~Tl=6O1I(O7U#0#`6!#i1} +QK&|ge(BXy5T(%!TxaEFZ=!rZUEj;?_&`#7Sh+3i_kw +A&Dck&e6Ke)8YyTysejk#lC>r$)hdlhE_F?x>(&~-gLsyo>RCU~0GWr}oFuPSLbtSJnG`*(msnG3J9q +s2Fmnk)zcAm&P+!Z9+r&d;<@r@H)wba80wXeo_WuUaB+UYjdRND_0MFzN+C7ZU)@-%HPQy04rU!3RC|Pw8p3K +mcnAF_;w#Y&tbwYFr$+w6QpWdgs9Q{`PztCc2{rH&Wz49Tr6B<`CG_DkK%1I}UD<_*YuAJ$lapla-C6CF_!g8R6&43 +nGkXy>1UzhSVgK_rt#rtis&co&3;R1;pjrkS$luq|AE%1-CpK+Wp*#cb#-k#?tAYr3Id`_O +tj@&coISd-VnniM3xCb9c&wU2kGFKk!iCyCa-C^#C_4ypaQxE47jsYCk)+0`rA+rW2B>nuVRUHxK)Ld +Q)|xz`djuH3s*qFCL`ta?@Why@k@&rhg>5BcDGKrG}vu+S-t@`fP)#7+;a6J7ZeDf!hqy!^)@k4LfTy +QSwca6O)wJS91kZ4(03pkn#@F(xw6ohYM1y&SAgLFe^{y<0Dh#8cQ~WE7qnA_}=b?-rD?zdK?5#IfP5 +~yd8w$dtBrFMkFRDWxAEdw;YjJGQp206#RL2wykC81V2+T@9T;84SUbFt;DVJ4Ye*gF5YJ<##Qgs_!Q ++!zC`_jd&vYTKdfR>D#qzdt#cLKKY2o;rGBEIW56cr$S&Kx6f3^f#0%=NI?uF!7jAK?#(Gb@?+B{)Ls +@mTeS>) +FzjwW?Yk9u4~b5SDwnOxl-=Y%vx8d~vy46BpYmeVn^G!BTU +(9QB#h8S+$iWKuFpb>|BtPPuNG?n#P!lIxTVTYK_LN>=`1)s=Kl>U#auP5PExzS#%8W3Bll-XERljQ4 +M{-xiN{caGoI$XD;$V#asLog1HA84FmCSR$@R_rG95ixXNA#foDO47gDYt)z-I6$yU_GR7mo9@gKg^l>Xonrv;K*CshXwdI*@xZX_ +C~mh=E8}c{vz?h32oXdEuf``YCGX^WE^?PP8%tW|2)_7JVT>{Ed=`rJ|U7YQ0)6rvqLFM?=-F$6Y(e-J! +Hu$|x&g3AQWeifn(K`(+q1j7l&6J!$D2o@8pCU}M5U4l;tP7+iR{6^sYn-HxCx)Ssz7)&sVApJLd{Y$ +hFY$Di0aGaouz?<+k6Lcl$OE8FFBtaU1jbItU1_Dv7^7BEWX)eLq3s>@bY_LUqIm9BCC0fJ>Z(Bsb{T +7#B;ky>mxVPoXNc7C;a%ntFEW^YTyncq@Yaya?@?vIY*b?$`CRy|Ig_tVx#Uzm<@`RQCx{EZCMSp}pj +Yek@Ork#uCPs@53P%GU`m+*Fxn!CNa_HAioC1#VoZ~REfwO7smd@!;<*-wTntZaQ(r-SeGLd +*bi(JwujXd(r7L(~Mn?iu{>6}7MTJXnyOp^IDVXHK$;i*tdO4NNI6`_Rap~kSE_tL?>!oyc!q41K@XMeeEUs{l)T|!4zJ-p4FFM-@lL_q%`d>=GVuSUoMvv(w$D>^C* +^`)2OfJ=ykCsMLoUVe*ym#PSq-AGUh!riBjKCa(XFViGNQKde!pIq1>z*#%g`e(frX0PG@PXKi%4L1Z +={}p+uol_d~J5@_vPq(HXf~Pqw4_&z(ox*(%Y +P!|MTU8patdBv4^0{{W5JHtfl-X2%x7ETg$WT7lo^C4rPNoogiuqT_Z;+wAPUkXEYmeIFA +l*=x8{H|l6#!0Ki3tfj=cFe-JD~FJYG3)WqEF5A5nV8J5kl7sWM=b)^G^`-A1>DKRX^@9LwTRYa7Lth +@-TldIOXk{7Ec}sC0+~0%oy_)R4*l4|8qV>LEaDb2t3I@l{E-e#<}5Ndk$E4P50VKraxs~hxX2t5#O4Ei0Yl} ++s&Vq7)i7EU{%R%-p3=Arc0pWg7E&)O&H&f4GYtT(8CW|zw>?N6|K4|eaNxe#wz1ICKIYDRM{R`o8_P +&~s4i|KXT?$mS#-6fICT&;iB-6C0P?c9#ziQ_h5mdlQIL(MyvHM=av5&WGbFuEN~{u5bGso{AX_ue%w +D!w|7I$kKC?lJPXJyCHO%-GhvLwi7oe1lsu*OYA5AavJJ6w3G>&+R} +>oJ7XW_@2tNsQKyn=xOWe>FMb4vAeGS)T#aRSvb<@x!oL3j~SL(^oaQQ9%*SkW^pD7RP2!i(bh@UsS~ +YSxWjX%yX<#PvgN>%=^JYMvS?X#II>HlYjH;TC}|Wh8tV8Zqv5iO*gkU-_oIDK&Q@Ky54$Q;O*VI_Xz6QE4X)`zWqW% +`-g=O7#LxR926BDGkD0**tk1}#SgzTVZ_M9QKOTR$Beye-1rH1r`(e|aZ;K!ee#ry%zLw@X6NKi%geX +fr_Y!<>%RME&zV~w{;xmgEB?B={;u@9@^2{hFjxC4s^_nEh6xYhh!>r+bt+-m;Zuko)&0{*Lie?&k2TGF5K&FFW{Bx`ine!o_FYv``)!nbUQ!g=!@Ma2&+SX +i>ixwv%6(q+s4@y`bzdiaqQD<568dd*{xuU+@V`VCJ$_4G5(KKJ~_7hZg6)61{C`r76#TVH?U&9~m(w +tYug`OaOt-`TTw-~M;sJMjJo2M-IMu +_4S#Vn>!;nw^sUC5g1N@H3NJIY9~ep_v)UOMM`uHUq)q2wdUAuk@dJGV{D+#a%9ySKkD<8!^lUSz +4$p)v|QnSo4d3iZ`=8SCfuvB~Yq$yU!o5=JIPR+=&rkQOy=A2w>w%Iz~NJotOm$e{?o1@Jpw{GpA +;oQ*$X$8ij|(Pleju5GK!>nr2SV%b7}{IlAb03&xv~MD0+*bqtw8glT+^%b7^{xWvai&2G(`m61K!oX +!Yc;h%4{*$mzy-4yX|qf=c2mdvlXzs8FVvL|eP*SL= +tME|$;9YgwHtXn*=i#eXV}b>a?-5koOE-pzV_6e=hW2kaSu*2kIadjau01L2~W(-T&j3#YHF!aT2rT{ +l8s6R93r-K=}zU?1-ASt)`_X)n3a)j?Qiasm0xcfGp1zNtogaAldR^{belEL+@*&-Kd;BcjO-rP?CD+ +fh;`(lMplp$1wz)E@m6tVdYDRV{7a|o8#p*WAo@29`sf_C+RUgvf#LL>Uox*d)d19cz;@& +7j@@l#>GHg>I2KlzsJcIMKWoIZerd1155ASrk)cR#it5(=FD;K%Z-)zqZTBAn|?iO-ox?MVUF{f(SLs +Dv`Tn`>yZs|g_Wo6~eK%$6U7o98PG|Y#3h19^U9YFo4vwj@#RXWU%G*f@SwVkD +we_0)WQ+vx*~-;t9@=nzm9Z2r_UiN&-&x!LKpp?&#H+{uJn8EE_MCKe{} +(1-J^!V4)gR9|yQRT&p1SYq`80N1J)h4OUESY*0qH+j2;&LM9#Oy|aJ7BTdkE +2zlD_bZ2}Uj9rL&K;SN)|VHCR(A?CZyV?B#UYEW*ps+ +HmZ(z#6&lIt}`rSVjgCI?dPT8K9M_r|!+pnI^f +-&&jez+48btsB5)RDT>Ja{EW%jS_-3bY7h{2yA5Wvw9x_O`8Dzcc~PWdxV~m;=}xZkIcfGR>tNDlhNn +(N*e5+kK+~?5w#gpx_AFb*pjkHSsGQ`CG;7q9)I9N!Mx!enjZD&zcA_n9DDe-vzPr0N_TzyDX#nop_% +SjqEswDY_ZXIwnx^rMQs@Q_8wgiZ$`gu+)>Lz=miR~!m6emPzugfta(K)zebnR>D6f&ELQH2O6G`z%7 +BOy#wmkZeC3^dF2rBA{T+AYI=&q>g4|}RxH5AoQ!Nz?ZiR%q1Mz~{zOZ>$9DB|tPGU{ +c~qjKX5}L019fC7QXJv%wIxZ2Noq_|>+HGkNTvb5uD#Zj-Vx8y*;5#)w3wNbthtCw6appjBzV`bw?}M +#v~{9=@?>jX0x=%~^`nRZHBosPHezj7B9$WJ66!I`nmXNjh5NVevDxI5nw4>1UC+quw8Y$u?5G?&rTZ +PFYvfid&ylvQ(b=SerisJE$t` +8gnsa$LF!54!RzGJA1qo!bd8cV~xN@Hv)Y&~`-uVliM#Ynu*C8x?gwYi*50t!n^fju%RL5O}R$2()ej%k->#n{_ItDkAf +l7P5&~JQK65)?BevYenFZEIv|e21ysS_G-ORTLR+cM#DRyPazh7ABNV(len$ros&1%iWNhvF6qf`gR| +`UQ;^LddwM!)@>nmYYMGmwXLXfEGEy{fEh#lG1H+VL@gZY2(y9t%q8cvk&UCfp;@oTI#So7AW>so5e3 +R?%-2e0Z|MtQ6Ft|wh<<>i*@m|(BQs}0-(xE;6^~ZI)(z%wu``?A=f1dvn59A43=XBZe&`hi;;M*%)3 +5M;4II$P={XRmS@AuWrMw;1J^J`-8yFrT!)1;;AuesrSuj@2``z@M#AMHI-dymrI6SO!ZHTOi#OxDsL +tL2@gxla{>SI_Z{555u0({T0H!WU{d&(qBLn!iKyFVfOkPJpF^$F%o#8a^Ae{GQg_w`%x(p!t8Q`M2^ +>d7<-6=ef}of6~1n|34ePA^-o$M{194nMGU+{Cgk&1|QYm+~D(XM(n@oX?Rgu^>295^nVubzw`OOE(6 +;0|F|e5c#(eP?&-UMI=Fl0&zgUW=Kj>zs=4k-)tvYEah?&f%q?W|846#%{@8kR1L@AYteO_h+C67AeOvkM+7T{E?$y9sgB`o^#chm~TWMy76m^c!ppD! +CHdV1S<$0Bv?#PL@=8mmmrN`JV64%FoK~3(F7KPaDotm-ULAew-ao}ZGzhg+7b8?ocogUAUH&@kD!d;b%IR +<&k(F7SV6FiU?D*v!Ayc&f_n&t5m*R%YvH>Rv?K5%xcG%dCo6LSa^!K4l-Napn{BX>nnZUwW>R<5H|8(!(T?`pAL?kCCi;Rp6VYl +1Wf+{Se|3a~1#R~EC(@%>x-grZlm6eH4KmAl(zI<6|Rkx4>(+h6Eq=D$t1BHIVw0FjggZz3>o~bVMtD +Z4q_G|<=BM(#`lm{-5_g;GUrI#}lm)>X0z`Jtrz<~q&jwVpxgs3yJI-UJz%&zkNo+8UV+WU-yz84WcJ +-u3eFF^PM2h-CJ?$zF_Reu~`UX6E3znc8D?L7P$|M}I64pbjFk2LUpdF1$53Q(Oz>C?N{+xuJIy86IDA|W08@jd#&ycTEFF)8i}^}STwtNE} +42Pwp2u*;`;|Tbl7-+!ve_t`^a#4k)rb)0O9|^`cVfiRv#=ZWh-Sng2*aQN0nK&*?a-dUN`Wo9Zom7iy2{Evnm>6&&{{j35zcZvYPhw?d&dG!1~87S0$iq5&u%kc +GmHz=Obtz(mkqLeBj)S^pzB@7=q%h>wpKiHV8gzWeU0CF9GMEfdc@_ndg`wbxk2Kl$Vnaq845mz?Kfx +@8l!p_{h)pd{|kyKo%HPxH>_0Vn^ynSw +!+JkYX3D*B)9#dVbBdf>(q+fE(J7)puHUhFG}3!x3DPf+@`no-HVKyE`-Pa>zPh!G=1Qc{u_J9ey?Fkyn2n>JWXo;+D(W@d +`1Q>Ti&ygY6{=FFKR*4ZP(^Y;x9ug(n$1%@x4*v!JJ63D$gR`n%7^vP#7y7oi|ZzU6CvHEWJYSZ_~7ON!rt;s;Uu0Th22#UD%YCsX{Hvbk79@mE +v)7b$)j#s84vpEShpOz|xg|1OGeqxefG{<9Q+C&fQZ@sCpcuPFYv6u*MvpP~5Y4e@()rtvJP>bW#rTx +Jtu(-Im(K1+StE~_$vLVmYg$f}oxJa35KlHzxu_(2qZAjOZT_>@*v2F0I6@fT72H +5C6PieFCgKcx7l4Dm_%NT8~mOUlNwMiig);DgluRFM)R&DRMzkm8T0`1eu#M=1UlivN)zzGx;A#En#E +ZxPExAXVGG;vh+Wm53Fx`CUTx%oTFP142$)E#&f7gnW6QkcYoE#5Ys?z7&5L#h*y=XHxtn6n_K7f0g2 +Ir}%p*KIOUm3yOb=;#axi-%csqK`CTV3JWNOCn<&9l)?#0p{ltQKlha4+z2VoPm|)paw&d&S&H8eOIQ +516u%qAkD&M?DgGpiKb_()r1&c-{!?Pm1~&ouZ-!MGlJO^(8UvwyvE5I&|nf#N`_~C@wZOIyx>YA|f(6rCZl7T{;B}8 +PZWtAv%`4=|7e%(a|Y^w<5rhA!f}#Ec$&y@bm +L)Hw-zzKb{{-zfG+GDPRNqqhjJ?K>l5BDoxy|)j0Qle9wc9YErXR&w=v ++$)M*xj~oPN)+cw%vUOk6w@!8z#sC;U^Qds=`(9Hr4_@Zc6LT2KI&e@b8P6ibg7%3wJ8-#mCQqtMRfA +7%0~g)|F_iHnXWE)Q!pyo!x>%`C*G +g!b@nVMhWl-duVaF@J9O4>`m_df}_G>YkR +BmL+MA8AjZb@>0ig&kUp^{HnM*mZxL7fiLc`=Wm&;RQ(?q$QY6a$9(}H$9;jEBD-;oR^tr3+DY`y4a^ +y(XN9J0GxO9)FXATq#Gh)PwyeRS7{1~z6(Yd1EKGG?uog4b86iMHxI>SsdAAa~@v1-*Sv1ZL0v2NWuv +0=jo))iiT^;Omf-+c2;))hW3ds?g_ePa{p3cGjj79V`@0qX`Qzxi5x^UXKn=8M>gbkINB5LyE?*Np<#sVb?i17G5wTo;Azqf +JsQ<1q#HS81fkyPX)Y&e(o#OYU_!f#ENAbr|{Am<_0mWZK@n50%`zd}+KldL!umTRL{>LSdWxx9<_yBT +%&Ka9h_NH#P3joB}j!+Vtjjw{+^-qewm}dSC&P9FFv8TzJ2@lU@8FHAUii|)QDOZKH-))#YX{AOTnLE=p6sM9uF;DziSK+zM^}C_?s +Vp{PAS!ciuX4=FGo-{PD-r)c1Vz!w)~4BJ=BW=gys>ap}n~zWCzhy?ggM-Q3&)!^6XSXf(Cb(!nPw;K +QHcAIcgX^L3p&ckW0gc-8D0xmCP{P3~z^74W~g9Zf)wVdz?&W%F-LXP+^iR6dM5?8lEEm!E(BIlqG@9Z2V4lVtAPPe1*1k>u`oN> +lmmx8LN?KmUC8n98vO$wU!o*tv5j;}7{bcI+6J!HE+m_#HT+PEZ|Y^T?4S45%9@511%7)E&fm +@4fdJf0QBBe~EIqeEG68KJ@-OxmUxV>Ts_=ga7&S=OuMREdL=PA)O(|0O0@r`|r!Q-g-+?nM=}{xekN +>D3AU7_cH+Zef#!tT{(L6DBD2;+5pHK>IupSxNZ4SO6xHxBR-I__kJmRyo1XzrR-iN<;ZuXeD0K#znn +jRgz8GWKZF1F?c0|J1O)UU9exS5mnaXW0r-OF;4A1sSpav~QTAVb^%Vo`;5qmWd?5#*1$cx1DB~x-mo +oYjDJ>sL8Fo<0eg~us-bXa-mhv{Dq4PE=JG?37k}ssJuC8AFXYi-C-UYy42fZwG_$&1U^#Jmc{FRhLj +!GHzG4UTXP#N@nPs(0IL-waqp0AcN{jiil+g(c&*M$Ft3l|{Ei-UuMJCH0Cfd(pvD`){OkR#w&A06O3 +c#blH+(7=(?$Vfz5xSG`zvFY2hCv@mIgoJePc-x)xye1M;-7Iu%7C}kI&rP|Q=cLA_8;<3{gDLJEfZb +N!B><8Q +*u4ogta(6-b^2V}h=`2zppkA4C1(9Rg2q?1%fLBp3)#u5!NM8l>ZueZPG17L;Kg&ww0cF_2J*4LkE}qQy-6h{)+NI{Y8JEmj&tr-gO#)Kec< +Z?2$D2{H$>K)Qkc038G;Q(SRqF+RyPs!x+M2)Hf;(dVK~BdVNNl)N?QKeV3HCf(GKh`3cg +MfdzOEyYfGRHq0Z@a=(Ko7D9!PNwdu^Q}?O(7%wLc)Fw9Y2eU15X;!3k5)BU!4fBbH +IYa}Vx;n<)N9u2XfIrCs%Rk9=5omeffd}NqjT@PsYoSA@1#y+bugaZ8{bU)@@D|a)^_gfuo21w0wbUl +9&Wn(bkq3+oIVfZxJ}3tcqSrQ>R}T)I>(Pn1 +6@-&q_bcQ``iTUvd7#ZaF&Xf&+SX!r-o(UN;3Wl4rg10L2fsDBVKDy7%?I)J3 +ISb;EMW)Ixu(cT&BS&Uw>34Fj1%KjUYmOj^_gg>r=4l&X$?LtTehs6+D_S}OBb1vk|Ljc@=1w)IX^#N+H5wtc=2Mc +*I$15CAT}!h3caPc%yGXTLoPR`Y6T&cu=1YK4q8HztMPO{d8A-)^&`PT76zdb>WZjfBWsXO{D9L((&) +sty|yp^z`hsw6scUN4XrHc;X3p=bd-T#Kc5dT3RX}e)wVe;DZk`J{aEvU(kTQ0R4nc2gWd<0qrT|5Pc +!?*zJs#A3hEI&&zi=Os~-~rmH#z>NDD;M`y+Z{XZOkg@=ci#K*_agZz-JFQ;*TpUs;$Z=^ab$xqIlIa +5-dka)l2jyqUKc;}sWSRQ~oa77vEa;29C=!5KGoCCcMWr6yDI?eT&%E4HlpRH4$4{UuLdf=*S5uVV{& +<9tpT*>nw$Xlz+vaqla_jt;V9XrZfZ@pELZq2v=57Z4KfCe4v(gJ`?>1m^FeSghF`F62|`e#+gK>z&w +oG7{VpOfY1?`@IifBEGImG?EzKde}>LKYPjon5|sxtu?L{x5gkb(hS_%3{9LxRPZFG@xF9PT&SQ>e7N +a2=v2{d-Tz$E0~YKI1+Bqkx+J^rJje#|Me^I=+DmoATrh6wYj;uU*CWK{g;7fa&j^Q>aImvX-TIC`+c@^X_*wkP`8U)p$Un)_x_R^FeS~@%7Z)dI&z{ZY02 ++Y*ph1J=m@#A69c2I-bN~(dxEEtF=+}^Y;0Y5l1lo+U1)U1vsV(_OKtMp>*Is*VDaH_g1%JpU0J4PnX +1D<_%sJcbcCNosQBl%jvB>V-yK_0fA93o^QJ-w-bwf8HM`#ZqS7?t>cKZAV;e_S3YhAx!{E6>S0CfO$0_ma+CfqM +mIz_EowX#sTKe2oFZbhhTK0eoqKk_x|KRRCl7%u`JDqBgq1->fg`atC^N#0ln&_{vCdK`T|5$z~=iuV +7NS6-1XzW5^dfiJ!E62}9tiBAf(Z4;=EoK3jzB)0`ZUH7=w^&8gTp#Px#r~0@A@2GDufeXqTb(Z9mb& +07{r*hj$b)EY+v^9`#T@FzXP%lv?kQ0;v+GL|X1Uu428KFGTpA)^<5r=lu>l$%);ct{xqYN8m8@Pck$ +Pntnf&~jCwOQOx8z11N1LB~aL0g0e@`EuE0Jwv$#~*(jbBt@<-QE8z?k@aw{h#<<1RC^qu|7J$Z?r+w +ck?&_GKIdjo;iKSA7!KK5LnlN+(VYYbJU>~_?Z9C^Su`SM)^k@QMZq+OAAcQv5y}=UOw{3BP`!WzUzQ ++kR`}E-q8mDcYS??^x8H51>6~bL*AJ-8eA>gqJ$qeJpjgGJ$>%{Ri(@mjghyV +D8zohudB70QD8}4*XFMNFF!*jkq)Z#`#ZbCtUMCpaFd+^cS>$kOTBb=sUqm)~)Nk>qqtkAEv`I~XagX2hU_%{Rcz;_RS%TYb +DkUEzgGiFo^A9*=q#*E`aL{zCJ+5TqJLo?kpQ~XV)Tb=X``4(zs+24VGfo4k8bkj@^&GgYslV-Np%m~ +da&`hbCZZK=_+cAs3@ZkF%9}T?3Rdhwn_Yv$TIA3SHhWtKbqQne1 +?tB&Y*K&FAQ>uw7+_+S!nfbN9 +x1Nuj_>*$NnRzsJCo&rDE@r+Yy)(f%5gY{0#X=8l{bMjbY`=k6Z2B0x$HjNiD_3=H%xyToKG)Oya;kq6G-`0Yd8ZyvxC^j|-mIwqfXB=J1v5^WA};tx`$e5bCPCVr!?`| +95h808V`Ls(}FC-dXlGT9z|3XNY=NzY9(eushbhYk!}(Eq%(aw^Y(VLljh@_PP&yT4P{J+a=#@_1BTY +r`53$>OMVx^y4(%&z>`9PNs3aTi0h{LbrZ#ZWPZYVm=r1h{pV}_KNl6B&iko04v@#BI`SByt(gXE@>pk`j`OE+QtHZ +;E0c_PAaBSyOgva`!<;JC7ceKh<&oS!Tr>RcH!1T7mjQ>>wKmiVtalpohh8yj)~xJ;f`Uxr+ADCtya{ +-L2lMM#YkEOj@54G1=0hQmSYyK4hC^FlnmtK{hv#Q74lIv{YSzB%=3jR$xb7M-%D;R;1h02ttq60Pm> +bvS5%c0$U%}c0uW@Pl&q*81c?~hheZ{0P!}=Yhkg#afeUy5^TYKSyl#l~D$J`su +gz^guB|ViPGEfmYlVf@XcrIg7~5#9-5TW|b?d(S?#rh3KT}^Hz_Vs`zzeiT@WX@k+ZXSvsT1|dqe0f{ZU3QT&z?Oyd%=PQQ^AL&OP6 +xHhjtfzAKHJ&0{8)0MBc_VrysxhNdEB6CsZfu$YWNdYpv{R`J+$4JO}11Bhmcx +QQntUCFTJoD`*HS%byk;heY$0GZB`+rK`UC%!$Dd|K+L!+!-7DX4MDn))x;#EHYp{Ifp&(0>LF92jh|SZ0BaxpU{{Oq@7zZ%|N>y!YOFc^-Jlk|jKM +p^tsQbC}@2{%s@pQMXUVgET4Jha_89)&IJ6>o%I|J&yy?*JE7iyMTDW1-wAJjW!c_?%1(oskpW^3a@s(Fz!I7BPUqjxUKk`KT<8U}Kksjvc(dVPh!P>%v2@`mY8TA5T@qh>V +953``tf@e6CmL4&iM(C;*PX*M&Pkv@%FD~+wgKO&>hp>yFYp?4qfI_?8jGf8?Y0zmO%+tLxyXd-}R0aDa?qjRW&fTeoi2zZ3kcdAsPpmN`(gGid +uz&YL!Eg8cnJyeJXs{K;Q^u-C-@F9PbLWR2Lul$L9yXFS*r2 +epdLw+QWQI9|V_-ju*@x*y*qkeqy$tVBu)KgE@YIinn+<1o4$a(I$=h&UXc&=Z+K6dTewcB5K;RP;Fy +$?elp=XZ@YhI8O3+4)qXYW60}^GzLlhT>TCzg7oWE-*8e}_4o)2nT8Ih>oa0=_JE|~g*ItJeQ^A+9jF9ciAHlZE?SABoSp|>~4wN{MDfji_M`93>0mUW!7GzMFBPE7-2ag4n%_QSXjYNVd5in*0|4>fogY<7u-+Ca1^)2Xo(Dk5eLf6H3W8>-)P6K0(p@av@Z|vByyv~g_41 +74gd!5`;IDp5K(A}Z8W88qT(;Vv%&Li<_DW4&}tXj2-^+9|if^{{NCFG^9E`F$d6YKqRCb@KO5W5-tq +ke(gEv(7m`vJW##q;vqf%3cKN0^@&LltLm{;r#NAbV)*A*U$Ikt0VkPti`JEWg_MgnVWG5dQvi&CEOG +yKg>?_?z|k+qZ9LT}}TU2kka=E|dq_QzI_0qc1ngKf>$fuYZ$-w9ro?fAmKfCm?OK%hdN57~`Xz2Hr> +qyuex!XhNTj`6R@}I2(QU?%lg<#lkSPH=Ll$Z#ZwwUEo +|?oE(7D);t7G(Zw6iTJsb^L2B!Slh(YnkY+w-&07m;=2O;uM0jd`zIE!vtXbxnQ?s)32XwIKW%tjYG{ +rhKHNV@`j7fPp`8nyfZj*AR_D{{9+I@P@4(6$;*%|59d|Q$=FFzwEdq9Vt-Ge#|Y}(jt4!7mm^ZC}5Y +fLRzjYl!_t&{9|8May4JGtapr`ahNYg$5H#`KIV>tt)b%hTu`!iI^`!#!8@y4b +5x@VMaB!5f3$2>v$sOt1{@(>tzrQtzDJvwQ!e_e;I^^!~E9=;PI=OP}yQWBW|+Q{3mDeO~JGMxRgmob +GeEk7wUzecSZCwQu*nmcGOLCiZ>0@0)!q`X=_fyI(=SHT}x^wGQbLGCZUpWMRnCkPRU_LXLzq4(%Q~F +w_ycCA2!!)W1Xj;Qpif&+PwL|J%dj!ls1H4ErVQ>F^iAw}fvC|2llsfbj!z2HZEGV8HSLs|Ktc@b-W` +1HKq=dVt$Nzkw|W1`NDyVAw$0z_|lA419jzI|C04yfE;whz${2BA|+d3*40(5)>aaCTLdA4!uV7O74~ +3t2p?^ey93f>SqtF2rcP9BK*GaxdSc_@E&;Mz>bvGLjwh`RQM7v!-HN6`YcEZstURk)Trn6J=^x|*0W +Df3vq67&xd=S{{PxL->0gMGmc-CT1sq;4#`kQs%0>-hU(d$XV31QT{JYogeJzKMXLdlAeTxEv}&%FMo +g$7mQ1O^N|YvGjNt{gSTQh$60lCfq-d!Uf1pIPj3FuNjX?$par#`+>5Kjco#B}~b6?$i_WOCB=euXmy +|ar};7pu@*WyC_9DW}E8kgZ$@orp$YjHhp!mYRie}ubnFa8XFfp6m&GL_6CiDVve$b;lZB%Q1z>&c6x +e2n}da+I7P=Yjn+ItwN#L!YL*=zgGoicVzH*a;qRXSv3$agVuI+|S+nge$Ve&w=YU@q1A#4v4SBRPVZ +X%bP4y6}I +0-etcRL+2ax_YO(W}lkPm}pNZdya&cI^E80ZRd&b-1{lPovHG1EdT0Saw$^*dkBv9>@*JOfPpiU_c32_zHHTGW +khp>=pOeg(gQkKm&~?h+8Y2kK@HnNJ8=MDoZE@+N5{lju^qn_i;_fyhsIA%B6t%iF|fVw=}1Kan?KJb +U#iodFq*vmN%ljcoV;ufS3#)1kJnO_t_AO=A5tKnYr+4cfJ)jf)`C|@H;_rn1&$5MfligxV>~=e3M{Q& +g(+k&)1Gg)4DxEs#@6Ls>o*j0g{?o5nC=YEwb?7i^LnCMso{H1(GMo*Z_uzf_Z}=?kf!b^Y?R(i_)&& +)Ii`~H=;cI!a_oTPSJL+Bb2E0jfF7(x~EK--$Rh6T+=u&+|$N1V$_kZd?3R()o2~sh>Fm*F(;}*`@zePp!ZNaI*EEv9LAuqlbj(vWCA$(Kj|U%1HJ@Yxl3LF1u<%-TBOp| +8t~ffs!IJ)wW^bDzZ6`n!T!252H<#ZE$l{V1RbQTM;={z2Kbb- +4}1jQ!tx;Q5WM3k54J?FjQHF;g$1UX-NG8eA*ylj!3a*9IWY-?1ds)i0csn6(3`VRkoKigmHf9WTf`78O5%z^%@rg^N`eI4B4D|e=#p +7ILhM)^y*Rql|dWngTh@6aWAK2mt$eR#RFt +TGU4=0RRAs0stQX003}la4%nWWo~3|axY|Qb98KJVlQ_#G%aCrZ7yYaW$e8Pc$3$aKYZU;k}b&#USu2 +0BAJ9#79zb!IS-wlbtm%+g@8ScWblZaN4%WeV*WLOWx-?F?y5Cz__kK>zcH&?P +{Ub~@7mL(ifaA!>pTyyedsf5SA5p9YQ^V1_t1LJ%1?RLZup$1{&SwY@2l~A_Mrzpb +z4S;^JcS*RiC--_k7H@b6s;RQ|vPOdBm-_{XM$4lQ#ify!2sQAJ)Z@w1fnwb+I%B*L+>n-hfth_`X0(c(G +d(&+Fr-zis`eHm=9@3js|5#I{>UrtzTI+txm?Vm&amdYdX!Y{&IW+K6-p{@tdMiESjjfr`^{ov0_L>$ +&Y=l~A_vVKd#$qtY3-tzEZv749WYfE!Vb>+NHu`_zLEA)&+(a3$<)%cyjf<749g-+$=C=d*MX%F>O9T +VxGX2vOT(S^nzKqd)E(vf#b>Jsa2A(^b0J_?`ct*7?O$(I&)QFSDHJ7IED2t-y&@bN0S@)*?E4)3i>! +3$ZNzV)b3D`RC5dpVT_9tkOFpYb>2_ud{XzJ!kss%5W`9EHC-5G9WHkY@(LeRaQ}3@?FzBfI+;(Ir{D!+Hjl!f0b5_)Jjk5zncWxDpg2VDC1K +0U?qy;btMMng?FB3H|}@y-ZRhhFzz4b{Y2iU<39br+IIc{ww9vv?SsUr1^4Khwa=j3 +qAYQI6@DI19m@A)JcII!?0AQtN8p|CsCup~U$F9;d%<}15U*!V{1VSa=XVVfzZUCA{PqC9MM6V;#!_B +y=JouJ!J_l6gRAgd=MhVJeE?VD>lxr{0&orZj}ynlHE?;Hcqjg2d5L4xMn@8%sN^AGr) +OK0Byw2vm5Vr^POj2k%4#kc^<~Qhxu;eydn?YdE`6LLZts^aTYzS9UppB1K;c5e+&A775%}6ev#5yB# +cO}MMN%w*DqPLuFDp^>n)3=>kNL@XmrPEOKw-M#f9g*uCtc>t{U{U`_b1vioW)7^tDf-ul*(Znm}J;8 +P~6yc_tX(@xY0T=JVU@K7cy!LEU!)hJ}Eo68*QL6R?HeiGOsfv2kU(D0v;_8&)xYkJ(qAnPqHW-cx?z +r{JgE>y4#aN5ki)i(95m*F?#;4H5eG8;@;wdn~W)UVm!%+cVKqR|4rJHxVocjgh-Dq5K*6;^=_N)&u9s38e6cw& +Azc>gBw<6e^wW3Yb(?@0Hv7R#~3Ht26hQQwwh-xih@=3R(3-gIqYYhqgtMWQ8;Cl^)#rXst^-{6;Ci+ +1eWR_$0~+LeRR5~xSl9wE93d*#)rY)=RBCc-aaN!=pbJUyb)h)A@S^*o5Qzd_rfj87!e4D?yBIZe@rv +@uls-emjIA>(#G%y!LI?Mk4{?uSnezmL&ng`|teq|5D!F6pBB+mIWCll6Yvs&GC`BeeG!m$9HS8Xcxl +Kj55@nUS96bl6iV9 +YiHxMfFbx2Q{646@2L|Ib_>UwSL>G$VQg=gVUsyH!*o9OPNu&?IoliA&`l{QHx%KP;7^$_$C;J}z$Z1 +Pf7c3?h(^FOq;oF--(H-og$^CPg6XmRX@4)%F+jg?7g{D1`_4D=HXQvp)%TZ6co;9!su=4#m;N6q1-K +$O6eXow61;6Ex)!$7KwVL?!-v(i#IOoIDK9(Y=AvnnC%UrIi*HH#OOg*pLwmYWb +Rfeh5*e&-_*wIec&^Ztu2Rp5-xBgAAY5fE_Th?A{xX}yjwb!+_Luss+SAV!oG5A+P7_&v|H=ic?Dk`I!X3AdyazkHHy`Y9YnB0Ril|+j(evwK{0z-8a5} +ZUP~05&1k1L3!5H-7$8@Iw|Elz!U)zzc4)_?6?r!6GFMh-6>`3PrBOUnPi{GgCf9`r9>%90i@jcU7k< +Rx2K0M>W5$pSZYQ5vuXO=T={&!o?e-%IP(C$CAoc}C6W#7@IJ$XEl_aTRCmxJevpwklHudt~1D^#8ft +6}@$8e+ft?CZFPPELfq7qS8Gq%8MblHWtC^pSmUygoKwn-lwU@aNmQAN$qLAFqG#FBX64%(srbVZQfj +VxK6=8Me1B*8I5ha+-(?J$gX;ftRHXXz99Wv36aC?FY#k`7LZW8~E)t*nnr70w?r9;6yKM!Ek|Svx`8 +ETR<8<8z>xl^kB#3G$V4c=1@nx{2wZxEmuTdE3kC_)=i&H)%BKXZ(fAGc^P$Hv1p-R4cA#9>pY9P&!F +C3*qyJT&TouS=apO|qI|ml)A4TFb>JP^HTzw)Yh?L$O>7gI9y%(-K5v;3VY`G@{%R@k-7%+9+SYbm?0 +*ivCDUpZX4(qa%}CdW?;UgWNS_e<<@;qugf=t3p|4jvpqCxUH~pX`WP7B!+KP8KX<{Pna>@dxONNtrA +xo$+nq+wUINYV+-IfIJwvKrt;bmHFkC`?R-g(3DZW{~Ue&n03{pa8vdh~_PGZVDV*9vs-j77rye_@M6 +EuQ1B`%7Qj;t8Dv%%}1GKG3t5-*G(xSnP|8hzIqt4x|qqls3#yI@EZ_=yIQx$Bb4!Z_TkTE7wHB+&%4uy_Q_xmyqr(-f#8)5=zdaLeO!g`2P +)>|U$bNL8My;-M@^s3Iht~tYX=5>7?b;`CKw1&vnO}e;1x%oKW`)^Tjtj;mQOiNgT5|%s@mfV&rkOzH +#e|ItKV%=WNp0=*idyMT}JVtwSQTJukw`Zj-1iW52y`#NwCF;6_cg-hkp-MB|Uhq$y5T#deKMn1z2QF +DY+gXJ6vA#KDl>hcb(Z;fe+k)~Jvn_glORh~EPeoa*gLRQlwxS-`k|pa>#PKFQe}H31wDYgv8|%9jG( +8P@JM`$`1X(&hKOM9Ms-qJ`gtTz6uiHdhKKN=k=qme3h7qA${mJIpAxj`otqUbrWBtCzDoRR_k2IFN* +=q~+ZV@5!KEf6N?rSWfl=l~rcE$9R&>7Hc0q|nzqWhPquP@VxoB=F}btcva{a?yF%*%Jh +$XjS@W!iAEf2ZsB%Y-=86r+{8j@>9MmHX2? +oAKFtY)0Zll>P0&DMA49|wHAVIKKAd6H3v<(rRs!uEcH^?G~68~O=bT3jfiH-CCVq}ON2LSnQ=Vk&&l +-nD3~?k$Hb9*?=T{-fex0OK=qludZSbTrK2&Ty%Og=-bD&PWR(FeirQZ-Naz +puS461ut{{K!A!q24$v@l;tq-ijuUC%6`vh42>qesBNY+mtDCOiV7^xL)m9<8*G +;ERb#*N;<%XuEg*I!HiLR~=$PM|fIgK*6fjFWbvjYC7SBlVX-DvCq53{Zbs0(tpguJZAJ4`;_lP+<41 +@iJaCv@*^#>OLNp3@e)PeVQ<8ZGsstc#E@eF@*Lrphu){mA1-nmVN6w@d1M31mUzI+RHr^PTG^zcpt_ +8{q(CxP%uv=~t*bh`jEtqM;eMVO{*jXT_tLQa}G3>0)KJ;kVzZ^t`rWLgw-;OepVB2BBcEp4Y_V#%fY#v!xk<_KtiG7mzc06XBWPQk2dj;PtD0>ImUF +;CY?M~>sO~o6Xu;Z$-y=ABOW`+K4C?+$qN7xj8ykDJT4K?Y`fjpGohkjTIygTxG7L=EY2H>~0yjV1#9 +kp)FIk3>w#d*-%x(yD#IpBqdXg6jpcd&czJq}=Zh-O%}IG~Ps-B +^okY8o@@gQ~FAlnf`vu#Pi!uhGqg9{D3%M=oeTGQ`Ve&k6{@>+^HerRn2MwEHGo9W7nTa|j9+y=__)L +6tpilH84{5#!^r--k?cOXxuj-~8K|hPpmGd5~@4_|J=Nx+Agp&Ogk!MmIExjo7^kJ7Q_cE>>dQW3NZA +rA#duz|eKJuWYr}0+Ul;;)g~V6hy9h9{s`XB)C!P3e?gm6yl-UvljArT>4&R%ced$^W}CceqJ;MJfrX;%0l +dq_yFAF8j>>z(ZX0Bilkyw(AJTMGW=eags3={^HL)Ts^!Jlg-#YCMR9B+U@x4}&CjE8~bmbO&uQKymO +xw2`bu@BRqh=l~zt|FS~LYuYvyw25%7)5~A|OhSIt-Tl{Qe)2DL +OQf+-v^{_{xp#`1I{^!9V&56l4h3(6jw18`_=_}OYtqFII>XQ`U5UK3afz=V3i>O#K8`Uk?PtuieSou +Lp-~1}mR1+4G((Rb8ZpK|8dhkuH3HS;no6_6O#7ii(n`_q=cwc9DE<49bUlJRbvkTeOHNn1CiXp9R2E +8uU0XG@{D@x@`|$}THA1NeTS593$zD(l=hMZF7}?-CEk33ahBCnvFEK+8f~e*QN=_v0|k078{Lr&C%j +q0ezlq3>fNoNL9JGWue&857b>uW`5fAN`2}T5MIbXcT66yn8y!a;V8uVS-X2qKQMVYtR66#M=c|8f= +Ps48+PP1ZUntu2#1JE~puuGlIju-opr%H3YXxGwSbo|KJUJlrTn)sMq+qyFdJGS5A?INxnHp=P4!~Dt +d$vMxQy7lWbg_vtzN#j`GRX7OBtLiWB3$ab!UQ0;9;vSBXlHZ%(H#`m>!|TMW(H&c@ffKNWBjDLC^yv +u4;rZ;)n!XR27fHmoEbnoko~_+S%i6S%iLFj()vDi +}!1d_g_SN%S1yb`)Y)JaHKCc0zcG^6;l))H0v-O66GI#)K>6mu|-UT?g|qY>3bF8K3g;t;l6&l5w6n3 +M6YIF;&zAz^r2eln~CL`ea&ujEF@8u(N2KP5@}5_BKytzThXUht^4e0kF9l*Futx0+XL{662|3Uvags +Gf*t)*Y4fa5ZV~!Der_#qfPTae(2n(AG6uV$UyuA%1$43+PYOW)HtBf-H^HBf)a{hPxF%rY7(s=zJ^m{_ky~^hhRbvNs;vo~8A?KfMAvE?wkgKu=`tth+bcS$FTuyC&Y-rB9q+e3 +$)Rd-~Lxju}UG!udW&-)vEK&#!5__;Gb;T6Vv_VBR*{!8@~&_xAVg`(N>}zBy6O){Mn1l;K{~&Gf~1=Y8BbxizDz#Zw`UFJhfar=Iu#?w`xh?@dP= +wxJCUz)wAwL-@bC?sL_soAuv|vfhhdKia}}ECM`>(H6p$ra7PVYEIcEr`e_>CM;`!^Lq1LpV`jk;K`Z +SqP4f8j{vULKt@oGk$cTHEk>KFvjzj2S6K7d~H)qI3Q7=>_;iVpUnF+kChE86tWvr>w+IOn);vbHT(Yz@>ZhXaJ>FWEm(K)~vvuQ?T5d +Cfda@wg)I@X~pUFv8wwwG#?TKeZylvQPm~zk|UXhw5vVf_p?4DGJT=9rPq?yMV<8F%h4Tm +w!!(-fuDt4VTa#RoGB(!HXNjE_BJ6IA(Ynz839c);k@~7omSVvaZ~ +&S*VBa&mfJ(!a0cCuGgm4JBOTi{fV^yTTZ+hLyEg+5|3}3FNt?ef$B29v-*bV}c0G +N~=2TI8&XVr?2jHXM;`AM{DLmXnJUG<-A?Rh|HbtAfwockjf$A>Uxc`Vee~;hys%N%zAYW4@aEZ2eIM +n@g-1lc2;f`!2Gxvbs`qS~8p`JO$vBoB{n_#n@9g5cW1CAyweN8WTnC&>iyc}afSwFEGn<)R&(1sw|M +tbxu7U82Pi!`BppT4lTC3-2kgY9Ek!~x4`*BxulSscEzgV9=L`yB3g`z9kYGTv9s4O9Lm>ZMX>KOL(uuW#BgS>3}jfmS`W7$J{;A;h}qPyQJCPE%c9BJgOiAvAx0q*S{*q;2ZIi#MkTjcl +15$H+>XwXl8c8U?v4i>ivml4TFos3V-l(x4K4r-ox4!keX_!HfxcIM +D74~S5*Ka|e*yW{U+({@XnM7ty87WM(o6TBx|xRUV(SxaBFJC?6)lCt}g^;AB}I#MY6>FgCs&z|7;uW +ZX6ZP*r3cBPfN+}DHjvG;NuDMdWXKK`^-?3d|!t)W;N_>|k3j$^kRuba%Vsw~(ixW59u9ZOGJIhKcW; +?hp$To%V{L?Fk%NrW%s9p`rKG5AK-BW<2MIfs|qbtcO!yII*Jpoh;R>7vF^N9pfGKY%t3d@E_w?1|fB +(x#jw!fvaW&GxNIUmmNAz9k*kSqb)*H#M<=4ZeaWub;`Ot%LVbiauh| +wVfbR!?WLf9+Q%CBm3wE*2BS?#SmK|L^Av_npc?|yX=l_&%N}hNQ`fD!ye#n8gBf9j#!yK;yoH_LUVt +tD=zoLA!F7(&7zDJGkvw!>yc#KSr=XD_;?O5_L)1H@kT)y9%_H?4%%K9(DAMH=b|1DMb_N6F;`9F>Pe +&`pLR|Wmrlp~}L(j*_ce4oJg-=Un(T#x>fKi>$`|8(05*D^Mg`A+wEkCjm-KVh`4*6D+YeY3RGP}xrbffc+QpQba`3&%U+A^UlkG7auzTKhMz-B4!NWei4a25LwXJg(On(5S(Oa;o@i4(|M;u(#ZV^4TvrPr~wFV)<4zRzUtL +!uJEZ{lbH^g<`arlv2Yvh2iHSyVQ*n49nonE-BXp#}x!ZPtLf;yhWyG3|cZgC7$q?oevpe +A_6p0G|2B_-4CI>I_uy+^}$Yz!e&Z`?a+_3vnsqT=WtD<&eBzUStjK2Q +#Ns&<6D*Bi7E{|S1P3c40~PLZdEqCD;5n0ImTrZA=>$N(BSCNz6Fb6U%++?HE9I{{B{ubTOaDELi+{m +bJN$}9!)hu^}uCh&E3HBLg2d+c&~trQgo=AB61x=mTVu&eFJz{4*GgU`Y}6Tg3Jy1(Er*sZQu`Ep4>_ +J;Rl}h1MGs}3}fT>@SX6j$!pnpK+7CpY<*p%=_G6p7xVOQ3GSplz;U^L=E>_>u-MEaT!Ec39@C6J|Ne +C)Kew6JrEV4Ho;)5Oi{-d%(S5a$H`@#2a)sl=tS@;?`Qr6xH|M@Ou18Bamk8RHejy>>MaZMw3q|OYZq +c?E`L=+cAH#RMB~U$xZwDp_^w&Hebu;C_mpy76{W-i}hqSwq=KfO*8gMZn-3+FYgahQnP|#n>Mz;%OEYRf;}XJput>(Z +Nqsi0NWtHOe9w7k0}jq(9?Il8_&l@;*WrCrzM2!f#jW(;X!$(09=;_3w%$pj_3*H4nw?(5@;P>tfjZv +eS`ibshZ(D7!kaZ&)&Iv4_*V5g?i4kB(e`SN0nNod@L5}~SsSF^tufA~BI0PQ-{{eDog9BS3m)iyk7% +U+jou_0dzYyBpTk9Jo~rLAqfsDj;@EMV4kP(A*5=Eg_a*RZ4ch*@N%6KnlhF1=UTt@Zh9lRbwQSo-;O +Y$8#(7gdFA;G%ohVf8K0l7#LH)Pf4&OO7F8>{WqkQu~O8lMM=3c9%C|iPKLg>@Av>|2s$Bb6xE2KgWe +4w=$GSuF@Jw*fxGGWbs{_bb<%PC8(xwCIjw#Y0VyC(8Hq +%X|A84RpB#A96KhxkGavE7x2DQg0z|`yt3t%0lQ9Kl(#`j*4;eYOW=I*h(Y%M9o<9cyXMt%`tk!`T*> +Y(&hxZkS6qBR#%JAqM_x%;>IaCi-zpM4s%W@ksf(Toat!O}F=4>C-{9D~Fd8{u=)?65(2Qdv@HT8}f30724AW9dvZWeB}!x>>rl($eXZv4(A+a?61kE&~=usL5oew^*B)3_Qvscq~lXfKR5iL$;`qO70sag2Yi5uMOSp}vpm5yp7*N3 +EUFH6k26oH7_)m^v7>XpPZUJlE)D(fg35MvuG&JNx2UTW9n+Yxw`_YX1Le*fbx}#5};Uf1Op7a?Zz%K +Fqj{=d{83?T6+Lti=5k!1_^(=yt(BUkAOycp2)ISbD=EY7eaTE;wCN8Ts`z_+V#^GS*#`Z@H=V&xaXMw*Lv9lEQ{u2=yh-W?XVt8TDKw2Z+F9%q}@looez8mwP9 +IZJxPv7Rz~IyHl5`BeUqMbVJrKyUKwf9?E`ox#~de^{`P6u5*%~dpkR{o!U5#J3vGNlMUS-VdStE{Gf +_4z7NhVk)|ZIE5pcdyFb{_=&Br+S9QBs#`yF*! +2s-Qp$C2!_DkFCI9gGP`hmYikkCJ|~h-7G@y5ExCWnZ9d70<7XO&q(h+r%>a0uio++@>GuvmYv4^hJG +gFLZ_XpvX>}Dsr1%7Y$EQZ{}sB!H>q&&S@}$>hZ%KFD7~a$G2Hy9J8p7L|05ANr+$DHVSpB&7YNC1g`%IsIru`Q?>%TZ*7v})HfXfN^m*U!P;yaj^DdC@G;yXPF-+h3)^ +S^*^!kFP04SOQo!txGq1FsTpT-!~&$KWR3mzsDFj)8Z|t&SVueXQ|M+Mis@K>acwaC2=P`}k+kml(^a +)*j_|t+R_Z&Lwedoi@t46p`JeyVeX`S97~JjN|=N>bpzSu)atBGxa6;w@oWWSu^yY_hzHh|97HuvWhv +{X8+3y#=mpE=DfXkLda2Ubk=u?&RouS!aiOxU4-cG+N;3dDI(&y+lbUVMPzXiFmvI@7)1K@p^Jzw8sn%0Qo4X&j9__($EnV7w_9;CJ`c3;U%?iB?yU +}l^{rzOf@u}c}JZ)LIma&?1!v3i}3z)VZeC$KIy~krhnKf`KspVQU8MSr!^UW{2joVK1HUlssC61#?ENL{NXgcnj9BRw*xl22=O^BE4Z@*ZTzf_ +u|pi2>?vD~e%6u4Hl_Q%3tQ(6v~87@tSnr2zu>oaCpLpE(h_T_#dN=T*&$^ +P})&JYz9qEtz=T$~HU+>S9ank!=%ZuBP?RmZ+-P+)i{mpVJ$~}Z91-%@ujW=`E<5LKGVE#o+qgExp +60{%CH3o{UxTuniXb!Jj@C9!6%Bq|>(fM*chPqicpY}R?}H}CS#!Ilm@%D4BGHl+sC(rz=)ccohdz)h ++TN$?$Z2{arP%*OYH^dUl{HmsWhJI<^NJ8{@8uX_r)Xeo&WaN%zWI~zkBaGg=Kx0*=P`%P*zVJuElY| +-XibiYJlMSa`3L8T@K0f{`sWzobC&catMTm6rp>9JBf^YZEM#2g`$Tw>Sw8#fiZkfXkkjLp>qof`t|x +}R@FQ>Wv%$i8T;DL)aazz;OU!;W+Z}u}T0&Yn(AVlyv@+h;UyPQLE~E)@%kr#~KDcSm`Dkr2UH4pw*4 +BZ3iQ^WX&xKz&@$&0^?}mSB6ZmI>$v>OM;Ge)4{Ii_=3EUY=?CGx5xCMVx15m~p^;!#ra&)_+Mf^8P4!#xa^_v}uGmSrO;(Uju(maq*pWCdjmhj$bguT$y<(*o?8!4ieW3}ZoU +>9)gdbTEgu<~VE!)}yWzDH|doRuS;Yo2?`+<4{~q?a~yx`;3y{rxC&5w3SI=7Ij`og&QnV!|8NPnJmO+a#oH|ZS2Z^*za3ZUR^yu&eCtGctc$U3RV%b*QvZN2>{d}*ZxtW&&N#BO!y@J +tYpS1h02a=Tls{{>;kYJ!(emGDvR{|?YYmJuI)ZesNS`K9eUjsgW=!{RTb~`-)~zPJ>Pdq;<1r4gxEU +>Lvqwvab8vuv6Y1BHK)*6g(Qic({elVfyObNJ-#_Lm`rV&IKYOaE-Te;q>m8;a`csU4jyV19GU<0`0{ +z}+(r^AS{fx#q{ZP)h^uxDA`en!IH-oTWZm+J2$$yiERiL4L#?etU{Ev4@!xgOJ5Hn{qh>Iv1JuT~^UH&AdN__w-w+FC5wwsV6El +xlUe|ai2xT3%ly^-OIUp#_DL3=J=70>*zRFCFeoFAD3{io9jj#c=qFa{q)r0K~qosmDRMP(%^6C6=hX +vqVz$OE91T4YjV!j?GR#i*NRR`k@a=h6m1_AVxHfo)-?oe8rPMS*sXFscG*ni{VZ^E4*p9A{g) +N=U!1G=NdH#BeVd8%Okt)09+@7x&Ur87VwWaL`vHqR1+do_FF3G5lWQXn*udWt0@d_I>}i4O{twc=EM +BmNx@;cjS<-y|Y9riko3<7GElSk@9%Kwdjrq;M=M9c|O|ed|zvWuSfi5SmYcD= +St{54(Cr%`Mt;=qwVj2OF#6ZR~wu!X@@*V(Z=LDCnL|uc=VBTaG+JRk-TPJ`5gQ4`Q84mj*)(XdA)Lj +vJ&eTW7IFk$TLx>Ep=UE)Ne_6mt*E<%wufaoBilxZ^(6BU4GbsvA*Pghraa5gucW$%vfJaP3TK)@6ea +h|BQX9#bT~KH2ableQ6E*l128Vuv7J=M!(sY{7HRjO+sJtC-x^Om=xJJ +#dM*o1gr%J*?^oNnul`ca;0^ncs+V~__4deq^oxP$j`-OB;o-it(d6ZgNxaPGcl*0KM +*0cn^~w#(N~}M*FKsmYLUNwOzLZ?QCE;C;7<-<1*k^Ez^cglZFCVbTw<5d-sIg%i9_IIl< +kyWxz-jc`q}lu6)0u7zFwzPJootihj4sgSyjI*WSkD0LY3s>lu&u6`f;yMWLarL+&+-&B1LGN9T$Rg? +D7dZeL0TD8HJtvznE)~(b+brChE?`6I@(&yeE8!z|YrpC)18*Izy>(wK@*H#&UY`NfNtRUJu9!?)_UV +d!_$~&JchEVr@YeJb;l(~mvQFylkWv*K32-(bU{T6%IP1dTG=}7aL=|(5#6)&ZU@TbtGPrpyfw#Xl+p +}(@9LKd-~`thD~*egK4x?7CM>)@?nTuoKDk}(8ko~;RKyODM^u1jEJH^GmKrDNRI>RY%!RiVT`zx!vH +_WskbySTPMSN1+|HovJ%8_v5XGf=$-zLukLN=__qzs1?LhO*w|4X@@r<~MnQYtIv7f~5T}xJUKKxT1I +D5Af_c%Hen752Smy{PC;7|Bvv8GtM8Mc?bUZOY%nySMR_dv;MpI<4dCP&%z%`;{=H^_D6%<`@@Jxxh2 +<#bMLm1bXe8Ad?V@5oPh5b9dzLM0pg)j3;kiDX!Gc%?9;U}uJ1^s_bkwRtn&TMrxpY?QKn>OoJZuoO$ +mH5YJKn+eora#Y=A5s=BcE*66N-KwCk_Ye%2@b4enEgdN09Gpv}Ds?TUU-lo19GVSvA@I|AX_iCl|6I +Bx^mNS;gNXBYgFMEEzLJtNz2XpDLD(fja8T?AOKSTx_q0Ne6gMT2*Os9luBvBR$6vBUL;L@1~m;d!vd +9I)a1XgB%Uf%ev;y~V(7Df+4Oi_LeX&C3_e#WV8~Pt5-jGrz(a@{gv`#ypfWL;BgHbmK;MQhE7WLV08 +8(%hu>s+{M)2DrB(znAta_rnl_KPX0j+p2SIOWrZcKgQ%s-h%v*>m|{rD$t +f7(olYNT#4>@8oVvxXe`WOUh3mh(|MM{MBf=X_n6zoxh%$ytp(4J|8eij8Ic=_HY*)l +dUyHpDnwgRV-x0EddeZ+k(_IGmszJsn%5Z~tFN;vmC0lI^>GA8MF(H(5xa9Y^&GA*u5C*!gEqB~%7_= +4}!4|&({LyslH|8FMz9q$tUF9H5H09*bzZQ#7t0bMlwOzy)5TA|!D*e^lo#;<_y;`0k@Ha2P5YyBy$J +9A<8v}<{5TCPWHzcNmnsrQ`Fr;GL&oo>xBz`YBqRv2aE`zoP$dJ$-EG3UUl7`Kn~0%>@TOkx_AQ{_Nk +LA{F{A|jswlLi@^Ce;47eocL^*Wz(B{{!_mj;P-;vi{-mCdQ?J?k|8A!}fc1MH%;tV*lp+*M}^kb_4o +9W2pDu!gDUy4NdkegH3jD@6oZg#^#@HMc_c +e;azW>m?mOlml1;cBcN5&+K6&IxT_tt%kZEdrPlB4KfKFK4_0Xdfd`g4CL#ydDPR~pCuxxUB)`tCr#a +%%+xd9!!yWDL>YydK^0qON$sq2;wK0`29q!+ds_&nPoE6fHfV7YxwflI?-4lw)qFr&G75)ytTQcOT#M +=W53@SDQ|LI*W-+&k^VH)}@Ha--~C+-7x2X1Mtn8pa+?U^KV5NYFz;3&$NuVF8 +tT@*cut=^AT$ZfAT+q$G6jOjK_uqJf2SG{(?{a*)$~z#Y>eUY7 +wK_4{xm&~$1lGNJjU=Al<|4-HRF9kyd=;Eks2Yoxp(uW>(OqGLl>)cQC%e#(cO<{uh!GZF?kpdA&bVxn`8UzJ23{jqb~8J(7wib# +-kjRC^EBf7KZL1J_^cO1^mux|FTf60ly+dX$t#@O~GVISL-T2hH>iFTVYU+ +-4m5LVJqk`*9{w*!em%mD*JmLCH;UbP+hmZ9dW7Eub5@&4dHwxuG%_V2#nQ#ivEpMvzlC1Y%(&Fu}#q +}a%%Jk*WcLE0PcfxVcx=L~UYPMQm=my*$e|_wA9pn$i=fah^k4kKfF4wuz=D7m-#{J!6>t}gxL*HIyf +1XPlxt1hxzY~^E8!;Mf5B5b*1!y)C6!ijyz;s_>nUO1t$mDD_M^`OkNY>J#d)|ijr_7NC$_fhR8;x3+(+ChlJ^lEy)S? +4ya{=p3fKQ8ls(NXn>_Xrl)X;G^-?eN7xDOQ;BjDr5%GUh?%%mz(Kuh8q3{A=@iGPga=PH)9iiQ@o87 +|Nz`erKrx+*uoRHm(4{qGbInJ%HP3s?AKpWBp|A~Cj3;N6k@34H=oua1a9r8QO{EmeDMP`1kyA9|LiR +bm^xdyFoNB7@|=A+Lw7=NFth$&|VfycMaGh+t9$Nz?37;+;6xO^3OrJg+EjI9YDf6t-kxF?PXY_~gpw +X?}$AJ}T@-`%GCRP&;fy8h|4=#IHV(Gh7ou0=BzT5qSGtnK +XQhyanxSs^fN1e)M_@Yzoq0m-2{}}fQ`NYEc#~fP0lB$aNE%oNwRLH@TTpQM2Sv;^8cFnm*jqkVX&H* +QQ^P|meg&ZqeWUgE3a~>^p{Khf)3TREZ7Ftyt9)0cDTG!h^3!XE{F`*5x?L0P7Vps>~w;l2vvp;6Ee& +Vp_Sbwe&K8G|JX3Ri&pkEKG}o)W2L3w>K0E_{h{~wPy +Pw9$jlag<_Mtld_xBfM>;Vb8OTu0VxIgYp*nh?u-{T;;&k%PX0KTag&Z6zWd6(KBB)@BxS~D- +#EiX)yvb~FI=BMP01@Ewp;-kEJ%B6JGx=hhczFDGKLd&(Z0nX9%$e6Q==iQoXO@J|Ac;6h2(jPj}moB +>VY(`{1t_SkP1^Qxc(`ICBowq_9zoO`M!Q8hb=aYE<2zco8DI(&s8R7QnqM;f5zUZI`&8*PnTueF2D3 +&@nO`c!KeYF-j#l+9&s6D%mfN!~e@u)-X2N!@Xztz0w+OGJ{-aI+{w-xhgr +^CloQjDsY>s?l(?^7eE+nO`vR~`C(2B-2dWpLyn4;C#6IijPP^uOQPmS$w>9=W!=UsdEnTpSxKHv4FR +qso^!n!^gL&4%tJCG#P1V8to(0k;L!=nqQ=o2D1+x`1m8Th05Y=-`ZDx1?%Q;E9 +)<7JG_`->sPuYISu8!|W2h8qc3gw3+N@&O58NUeH0UR$ZF>p0ua{?hG^@1k84AW=3j4ji +%dYj5abM~_yC_L)lNT`TNRx9rp<=+na%Rf7PQ|OiX>yO3Y;HUcBae;$ytIhmrfkUE9vR#a8Na+-Q5HxhB!>IJC1I@1Fs_iXYQ=^- +b_}alE#eXO3rx7M?Hlr3@vDsRObnsQpk9{kIYOkw`y#*!J{oNE0O;DQewrKk$Fp9@i^R*p-hBKi75tR +QS{A3(cEFh-Y!gJyqfF2Jzg_G4l(ljG5mz7yW3R^dEZUp6;#q&hv?)QLXdrD*7_Y2PTZvKW}}xqI0_G +f4^YrBNyzoJ@yf6rBD1@rf8!demh{;gM?Tn7CCX09>-t-_vM)BF4Z*J(gTZUj{e&$=+Gcsfy +tXzoW``V1YG1;>&A?CaYld96#JadI+>fV-Hf@?|Pk`^aw@|ui_q|u`Ik`W!-%y|2M^QuqUlVdHo%Pjb +DxR;-ywScx3H9%c*H8M+8mI10j8*qHQTNVx-KA#TbH}KA9Q&z@^5qJ#(97A-*f^2=&XzB+%dpzCpy?zAb@I95T|7p!QXMU=h*dBw +I+mTPFoCEeB1XO0J5QhSiXm#}wT%~14*?Yp0Cek()K`%;GFZ8@%WAw%I~EIVSXaj;{390wZ@Pu!!$)x +~)C4iisnY%M#vetzV5Sh{(>iU@th=4=USa$hfryE?qP%f#JWo5CH-?E~)Y?-#kw_lugb#@ATheB@nj; +<3WS66oeGJDTi(zl92fvn^HVxO=UxF=j+T!pvK-L +**{3FEQn_M%~tYYE((+s)ZJO~~fUbkLz<9$=fi(Zj;%rTYw@+~}hK-UJ|+VbR1^3mtf_8rhA-R7R~eM +x)5vwof}sYS5Vta@+=`Kn4uc7P>DEpP+{pOWlL7#%-JWR*3hxeBnb3Jry?Y7!ahrX{z7~%3fr +H506T35!X{}R~z(uV2eJ~U3* +wnfsPIJT3%Lr{(X4WFN5>PdNij?zaq8GFfnFd5$>-)SkKhjs9oS>I9MgXL%k(?eTv^;D#Xz5>3M@3ai +{t~WjOWxh*^=aJ_It+bT|orYZd<m +Te#C<|HP4e`+EDgIRcfC)b04JS{mJcF#xnPYthKb|-M1SJr_DZPFDeQNvmXmHPHIO&J=JDCvGO>USe| +9jui191mKsVQ`ao-Dp0T~7@xj4VN8rTKqExw;?M%7<@uVEN9@Aqqcz9le0T>!5tmQdF<)WgYS?KuwS#TgC2bFMb{^S +U9%dX6f3WtK{V6T+zm}$A}--o&xj(R~MMzJoh0DPN#fVI{N5lC(nb7(0AlG=s`SF$L#UQv#}yPr&I2E +3R#=tqO3hUN?uDEG}uB?4w-aNbW?reEc!NipX2_Vn+PHu*KhXyy@36?&3&vr*2%J=1aD=IYljE +pm|5;HHjyUEMWW*g553mQX?;8Al-m}e#?&3|tbAzNrHy~pt(o^ju8>b>S%W% +o@M$}bIo9?#^)&qW)5Kh=@tJY<&Bm{88PamyJUe|-gVsSo^;0l9E%y6FBD@Rx2eBAqhcE&at#n-OV&j +QGf{lnZ!v7?FF;`w!uIO3N77!?UBb{A0O83tPd57aT_5gtxhMr$fvAj?)@AaX;*)1A6YjO`xl8o&`xC +wPd=QyQfb2jZ?I7Pu~qW^!4FuYRZqDnULmXq;aK+?yqL%wh+d*&KG;W +)dEMMA`He4%L7w@>F=OWKgYMmmb~zyf7eoFDsdLfhTVLF{1Z_K}i3rp2JJT&fnsfBSZ#%j(4d0Ixi4b +(8{65o6%XBQufijqOCel@zY0_*eO%Q3SG`lRT^VTCfV`J-}-Y!&lGXIJVQKNi|48oQ5%8Jbp`kz1a5bMpWCL3+wQ*|*W(24YZ)cql(J)ji~@OcUD>$HzuJ$)@&d&QE`bs4`wOPZV? +J7dn}1mwP|d0qE|_AK*=va=$yVzF7=FA2DnabMiy$sv6+sT;B +Y*eSGUXunjMGH!~LadEoTnfR9L+wF4yQYn9_PmjoR81T*`I_-7^TRiUOg?PQGdgqzLBkPrWM7}3(Ke2 +9}!y21|mt{9Qd4}Y9?`1s_+b<*G%xBrgUq$6vwdZN8z7kdIHpeFSz(Rh?1#>QKC#vCf$w4tD%Dx`X>HjCbzgNx-{$+TA?6G01VfD#+c~*^FF&Rflgc1EyeQmORUZe +DYHV>^VI9r&)(%lSatDg!Zufx<6D#4j@m{AM}WPezP+2Lq5MLpI@rG`oYLQ@%d`1dcOX_$a8$Yo*KDP +`)I?7ib)|&SVMD*)P54>!#>G +4jp<3}#wPCbTW*Q#zN`AEeSXVE?(^Hfz?&x)_($*aTXw4@KF`{xkG;=ttp2YQsdHvn*RCRY4)9C%sYb +X;*yr&KygKB$54_YPvgUgMx^r?Dd~Z2aT<0XyOQJ@=&Gek|Na8EO6j_#+-y3F +4Z$)3E)f39|ModEY*acg;NbX-sA&NYXHx;nKbo9el*n>qv8_3HGz$=pwcd@)}u@IjY^TqeB#&izZcHz +wl^xgUURt4r<~xXx_rd%54THgP`VTN-r{87s!69=1lkP~%gOT~Y_kma#qgKAzuEW$q>3XAvcTsmJ@zB +SOpvujPP{3YYX=_KcaZ6@b8#+>gOr~h$Gi8jPr=zkl`{#S(d +zM{+df$+a;qU|9~xV}c2I7a__U?95V>&VZ!)wvd<(VHe@OaRNwondUG&C4@Fxp&0S@1i>lo;`!U)`Wi +cJb2Fk4`Nwov|YyOGz(?VFdy@r+BA7B;b?Zj_c$aP4rk(ePBg6KcpdogVe0lX?bS`XW6ha#eA_&!VQ& +VmU6WLr&6AdWhJM|l$qi@u{oG_T@8o5ScWBx-yO!7V6-`a4Ke1EI?{?=s+<@?zUtL%I~+k8KJ+56@Dxea?$`F^hXe(tjQ@ +_lK;*%ZDnHQ$#mBd<19mNoEPx~A1->V0L|vYGPz9Sy5&e1C`e{*GmgpJ>{AXTx4A@pGq%pF5YirG2zn +;_$GAXZiBpzGgG~E#CWe`x4HLJFclTd+Cc0sWdFZj`xfiv0wiN)2f(I$_mC`>RYOL9>SutibgU$=rzF +frc7YWg+E2b2-bf|TSgs1*->xG4Y{s*vsfnO%x1`_--u=G3tXo`Ir%DhXo|^i+~WhbcB9iFLR|ahH}? +fmXL|*znTP4C9O5|n>zF+6is!MWt)YLr3cOC9cjHP~hIFACd}ltU=N>1o=4_R6@*~4?@>R&m{K@~zpa +09BG5%z}%wuJ$zEisy@R4<7PquGDj3q4*RwNZYSWJ +@@r-^xRfcM+8UdIj#wv==w|G3dD~mV$BhTyj3@=kfHM +^r?Q97{4@nd?hh1{))xoV+_&r@MU42bm#tiMI;wjf6}?6ucEp)9;DyIeI_lRv?-q_Vv;`UCvwXj3;5ozgrQp +GPlwG!4Q+vGG&+E%LN8rTsQOGePv{mi_zZK>9vqi{L?|*)*@xirDdDhN;w#gn+@$mL-a<5Nct|r32j> +>(ieE!6A&1SlQJOeR2)_#qDk&s@P<#MDh*&nG+OlOvxc&=u$UGuhk#GVYk=W<2Zq_wZfDQ0tzi&N?>_ +VDi*qix2y%tE=(SqJA!f9K#mVaku`jGukNXe}7}Kr8(DmlkNLp-Fkh_Q{UG3Hzgu3>M!sS&m_!)5SdE +<8T3ERs!2cd_zC_SwcNMX5A?=COAKKc8$+vu9@Nel>#;Y#&OPWGyMw*WjqokuLQQs^W5A^>ocFN*(uj1xzxHz;#!L&}_=L_eYBSwaW;(w)7DZh~K +F&QTI6m~!e4d4ebnqumtY>U7a8oAFvsCAM)*TX|Tc)ToI(Or(RVtc**k_l81`ax;D|n^ZVTK_Z6ex-{^eFt30c-$r$dV?62 +&n?1$tx@_q45X}j(KzRs92hCK6*{)QJkXxFCAA^my3+RbyFoX)T5dJE@`+V%W_%iw*^?W}}t)rq|2^` +fB%_E86LU0y2WK1KDqD7$R2cX3}(x0Wx@bdkQPSPqzD@YPUSwuttP9c +gT1-#?iB%G5(D6vUbMLm~CUb?2bS+WzBNUzM6Ap=N9&qEiYDcHXYKB7G+8%rS02x_BCFd2lpSBeGiZ~C9bgYMI8Cy>H`5Y^kaSR85qlH(Z@+|7%dH~Op;`aGfnp@7l$urR{@jP| +9Ysrnyqx{d(JAIhm=?V0P?etFcPEquZ(VBGMoJM*ZjimQ!*vTEv5%g{(-R>Dd?|40=chIDFRh-_9WjC +OAWfHyXY>M7qo1%BRq<8uVdh-lCo}8(VbNWT$J$UJ^s#eR7j-8DDjjdz-N;o8DMdETt0> +nd!!3xK)KJg +uGvDxQ$@`z&QTrhUr?-x(t5mW&j$Xsf9&dB`Y+d)FW^2E-lKhtCoK6aW1Eqt6Zz7R2j!Ih3+(UM`akL +j?hEZ_ytbAu*Z!@moYg}AwhFj&IL!4-TvHBuu0cO)cfjvNI>KKMdBb@%*#^+JJwxp+Jn9>0y{=-`F&P +tJNngUf)TYaL(*obkz|}f^;*ztlLtY2Hxjy;~>{Z4Zcz)DgeM_!f&p65kSc`VN#IsjWms{kn5gXk#$5 +0pbeEnsk%m+QsITL$!d*LF@?yJA7Vrj1@6xWb2##&%9 +6%nVt6gT6|M4MZe@s@fs=j;jq}`X3Z1>%l07vCeqTR={OY;-$KJL%sYgBPpKH7cr%=C99lo7e6Y@Hk1 +ePi{D7h>~~zFy$*6!3NbW5!A1Y>HXW%?b77Xu|dRqBzb@q5Wq(qV|Z{Z{A0I0e2IDvqg_K4rTyv&i7> +OT7q_e$2}5fRZFSs~vCA__MA&w=oBa}2YWNC#MfOwn(cR#&s(z(ozffpw@{s4uy@vXbmSrtLJ?2`GW +h`?h`t;lI!}*QRzTYc7F7tEjgZn_~GL}o`kL4xKWPbE{?nyA5|3X53j$@3IU*^5Q^Lp}qf0!)Vc3Vvt +WLq8bY;mV`aGvb*%_*VNlhql_j2C0y=eiHsu7#qEbUVoXm^lBrC!SX7xK$#w8T8@0V;P^Njg}*I!2iV +pBk~u(fB)Xf;u4!ZEgScYVUuM-XO1Xyo!Uz}R%V~u2!mG|oZ0tpI+7}C`=LKwnjcBF10Q?-}jm8YMpk4w3m!B?&;V8+`Iu>q2E%_HGp4KPaoI}+Q>cM>y-{(4jX}cMs +Oc>$nk+QVx(=bILS6}XpWZE+)oSX2cTohk!K5hC>g&*9s|saz*k=A%_`_kzg8giWC`?Sp&HAP@ID6~< +^Jw|_S*!Ux?KvMnb+cde42@8?j6r(ml;>%?pAwky3F-M*WQ+Ar{*v%=aE0AD;ec9=MR}D&Fr7K3FZI% +?U=0k$vf!rONG`LYbd`u(j}2@F`@{KFWKRUvMx*`Ztrn7lAJsgY;b)^W?URXE~+<+pnw>@@K1JlYeNuwxPg;brO86dg>~`OxnB;_8 +8BFzauM9{Wbd9fT?ejfAA<^np@=D1=u1!@Y8aexFFB1J43s7(j5O8QRV~99>taOXFMmDbDecsAcyvtp +#@|Nmj_pGRJECL&h&NMD2rz#+RgW|Ipp0ON1q~cHsp&4d{N2cs=mTGuYn)wSIco!`EKeQo;Sh!O-Ro) +gh`H>y`skXyp5k9ESx0NUQwCo%V=lspo)_o*Iq~%w>k}&GM#G858-=nt{g)u{S^F}Z{f#t8kuIMGrni +YSm$>WCKvEe9;sWsevtFxI?8HVT{5^%#`k4iSQw4gjv3dG6d%nv(mo54V@^<{^!Gu1C8$Mm_88xQ +-iZZ;`}vy5+fXTu*`YFF2qN(ElK3+T@ujx?E?~4ILYHgXaM=_kiOXtsDnv#yqb$V(Ta3=W)yN^v6V}e +WD24KMY>VLjE3Y5V9%aPKakr9*>ay_!YS)$>o|luT6Gmy)~>7dX=BIdj~u^a+_pn-4nX#?u*A!!D#Fy|a$k +d4#zwAX;5m2PhqnBSn)Lt6kD6zI{6=dinjmWD)~Pra_Khg_KY;zje*gcl_wI2~Uf16EexBhn7eHZ#i- +U0hYXW0T8U=(TEe{$~l(ablxwSbFCMN`tJQa%!PrZ=e)oFetbTBW@bP8*_XBVUVH7e*ZQtm>GdVB0X>T}Dl=BkoN?Ud1u;HMA+0_0imhA8V&U#2~_+XxpjAB#M`6prf$mi`aU$`Ly2 +{S=rk%%ULE*o{2N)GI`QWe%~Zpmu`*1y}otkO!|EtWIFnMD2nA=i~Hs%{p>0|n}zmnieR&#OZh27IjJ +*mRQu8@u^Plguq~8ofL~x+N1tflvyy0+TjDnBHZ^97tzW9?$K8~iytJI#6eP_=IRnwHRvwosDq*R_?P +3#V!Vcmys&7H9h3g-Gg6~q|OvLa&o9d|UNcA0lmXqT}S;?(d+%GO;<+%nXbdSqq3x5V07tnic6I+{Or +P#)SbH1E5;^RJ&X*!5EK$n5>cHE$>w5j9$TiDlAdXb)G&%ET9kxzPkP5r5g8+zGL{VL=xsXxQ{AeV0~ +uD=mqOS|gJS!ZQV+%<7M)eL_f@c%-L;A{iOYaP`FUY<17xlJu^!)LxG@Z1VHZsvTcz9&J|D@%n_ox+a +P;(BHz&xDxIuXRVUoH-SM{n*)BIf^!I;CCB-B&BE;+uAfZ2me%t@VCwHIbPw57EXJLZ+r +REj_7I#3H}E&=Xuqpl&Dtxh%q{riYoqa)1NO0F)Yc5*H~j7+a-O$B)u&@$kW?RsG$BI=$$Klj;!fsw^ +l4_n_b=nwEpLivn_)}BAXh!5Y=YjN^BJlW`g`d8pu^8f*YtZV_h!|`8S{LT*DwDezBKHf{~RCQ?pYg; +K3XThOT$^T)+^-5hJbRQGiN$}7Ul9Bd~DXx`a}D)wuRm=Xzg1-vYQ8XoH|_=x8F1~FU}yx=-kpz=Y~J +R#)r!Po?7pcfO@BRHTm_mkoy!r7RU4iagT!i8|xc9^%^SAbxiR>uHrhh^trgxoZV^^GI)_R2Qf@@Av2 +^Vh;ykz-&5#2?YTpJw8kJ`TN1bqp5y@kxH6I@L&y3o*Bw~wZxEdwBnP(3(M}W5!$|bVtgYrc!};kkEd +?Z(?o$1NqSd|y+5nC>4>_i0z`m+SELQFJq$rM83!mhLL{F>%Q)YdFx(i}~f>)yXH^tr4 +q;!M6~Q`aoO!*O)DB>jW=66E$ef^cL8NslVz(INdvhy{{GI#(&R>8NgBWw_yO9#`*0a^Q4%`8bZ-e~^ +^%Y6#nwC`j$T&sFH}sq4wD&!)@TV9h?{T^152~Mt+83KxTUF8GOk!4LnM{&p9wYf>7oBY`RL3)Is0c4Ge8X)w$7WFa* +#aVxcK0R9H2euJ^AS<2IahHJj%^q4$f1}?XlbG+CFHpF1imjgQtblyP*cseYnWg$>UI(2ysKXm@#uz! +5u%L6v4xCG3&icmOSmwY)tyBK_j +aR|7P)PLK@vg-FSTFwDR-&SrHuF?O$M(k0KPi3{VR?lDzeq~fHVN9UIP;o}N-{Nd8KXaToj`QnzQu#g +bBH=SubI~sYUr*m*%RZftS%eGmSYGMl{;l3D8Z-0R$8slcvr(|NV#Q96r!_ag +RA#SNV#eDU=WY&Y)1Y*%zO2W0MVe&$zJZ!rRYlHVJD;mgtb0~+>e{3B3T=#gsnUGk0Dj}PDRH +BCZ4R6DW57ko|dCwS8r=(iu_G=mXrN+BmPwhyjPlf(}q597||H<+ +e1<)yt=u}Vr(SIR)ZuDRHeQv04IlMoG!rw-r{+#}T_%GGDJfzMmPrfSlYxpwJ{Px%w*Zq2M_MtTT^ul +Mfo%@7GWO2G}O?D2vM$bq_0jAWzbs{FHDU-R6!x!pC2K$+J426kK@QP!{X@B1&e5FWM@&YGNYhN+VYw +(=Rc_O_Me$KU0E#5QyNXI|v4DS6Q?TyE`0AFOVUP1 +S?&8YnitylEXDhb_Wc`*_usYeg^IU9``%yZT}|J)Pj7(#8SJdM9CcikqbTiWpWpW^)L#o{-FjLBxF5r +s$cpDOC|?gq|FSjFG?8uIL~CLh$L=t@?wS}5pCnj*2<0a@pO64_ddtQ+Zphe>zjh@ETQ}fh0ACS!-4^ +0qxaUSb*q^*kdCGmhY^hf0;$FNY@Tu_pFnok4?T-oKE^ijm3U<8MXZKJV_BFMfo{j`zOLvjSq_nucDe +T31uBCT)TN@&Ra0U+ZzN$L803N*Ob77wuNMCCI>3X$apyMj_Jje0fs9y@nsOVF@+9xMH-$G{=txu0%5 +-~pUyjSg$L+#Vm%f6-rzGsKz_3e{)j4luueXXhfbX2kB#z3oRN`pZ4jT5T-v$=b~t#-$htc--)(4{>!!3Sw5@)kzyuf-Z!B +DS*WC7{0U{kLj!io0H?Z6c?Ra+yXPz%rTXJC +osXX(VkyYSzBX7eAHGu+ni=*9bHqHnf9F$du3{AaiJ7%Vl3Yl!}2$xUN-zP;>zL<9&NxKU6;&Ctk*E} +d|PU1?lmlaxURmZmeLnx-SK&96rCBUA5T(#oS_fUGuxZW=Xvq1&CvB`Mv1Z>2bPeLIhVtZl-kd+%7}; +SSBd=_vC%Viq71{E%EtLotV2fGQeO|ws*jS)$e&5l`swt%V%q*@_$W-@$KtE#bJ54b*PuvBG665EXd+ +vPJAC;Y%#1#ye{owc?(nx=@#Q|K8=iff=m}a)l+`%abUvt#Vuwzq)|Wg&ZE?Vda1wk7WBL4e^1Lk%^S +(|>=5wf(>gyV0@sK4Ph_OTTsg#7RR>hg4c_f3xSDdlsq3v&S+0dfKtTnqz-|{sro0Hw>q4Uy9kvx80O +;L4fX?4Q$%?26|lmps7Vqi|p0fUs%t=H+hf#qc1>S)F%;{CSmbXY4QS^lD}6V9~IJ43n{mkC&{tLl4- +Vh=RKC(_t%Xwg&K3`D1Ol&4OL8A5*+Ii)kmyDmoL4a|r7VFQJ{w;2{(GI6Y-vGWxL{H~++fKQAivjYo +#JWT6w_`~OPk#>iX#ShUMGg5u!l5%B{6ftz3%Yzb~*L1GAH~o7v&aU-QEFSCaBCWUD$#j-CEAEfKhxi +rDew?1Kq35>UtY#>=wHaeG_+D#sn~Yd!rtTui)Cj+QCYc+z%IlgZrTW(q?(sjJu86fq<$R<|wjb9e*@ +aC7w@v3bP~q^6!`oMD=V;kZ<=0f~Z?zhx(b}T^*j~#T!rlNsU*aG3^SVgRLx9yEan8>#_MR2|g8O)cv +03idMf0=wyubUJa%q0k`f;Q01JrlBWNEBZWB3%QaVslA;#SI$uxB^A6#9It+t-BmhiE_f1Lo{*p;tZyX#0Q3s~=n6{)UmJC$E`4a@72l^(;sS&g=6wsRKIdcABWnx{14zCPooXs4ueG=q-Moc1- +PMYEi8;unv@pII+>NLy4uyuJw76)WyolJy^D!?`DQvBghB5&v~cHPx^&jbbTnt1?>*SIT=UjGg(@S4E +m1SygPJ`Cg)zVocBOHl$VMe2(y5<2tsQmm;Wf#nyNL>y5)>& +&<96ZiSJCz2v)o^_8MD*)?b6Y-L8J}f&9`vFEk4&S!&{n?G8e6!0;Wv^MSY|{Akr*DiumOKtXh;P$qdmZ +(D8uoR>zbwc02I +WMH=*N*VQNp=xG(Vy?nSB3s?EPEbJM$1A>;&|p9q<+=WxvG!ovW;=QYJR=smoW#_c=yEj^6MhlPTOQU +T~fX!5$uqI%78pGqt;gX9qQY^5kDD_BAhQ6;u^27tsaJ-|DcM;>Bk_A=|+8?XNd38dY(>sJ@gLrl`_5 +a&?&zy^wBZa>R)=rdEvq$Dd;Te;C|wg>z-R7XC0{rbUd$%0 +%q~+&(RB?4=Ht+wWcK7J9^Z~BV;+;D}*M|6h9@oQ7Dgxcxsl{GNOY +m}7V7f8k-4F^(NKW)OF)ZL}VvFSSFpF3;M;H>AFinD-hE +Kh`1QKD`uBSA|;FRM=swbpfXib!m4Rr#=*W5PP2A5$q0(T@*#_fzPh+572S^YJMNU)|6CF5oda5Kz*o +--(l(5!tvtGjE+kkYzGGVS@tEv7Ow<)iloT;o{H52B^lmTJ-HSG;?Iqs40e*DJR2 +H>qVf)piUF9XoEzn_fQC{p>2dI6sh<9r`gm7~9nC&VYqg?_1&f+|;XV`#wj|Sw7N!lGgrW9 +xs;0@gQs=%+=-y7H{6N$r{agtWTT|dOoJTkj@7#jJ+C<&5pBXIThMG1HM-1n`^bW +R(kf%_p*-WWo309?q7ht#Q7AZ8-Ag9=^WT +GjcE8$F>{XGfuup!F}VKV6Z;`5h^h;%*st%;D~%2Z2q%(^*h@XnZ41OIo9UyoPPo;{Cu*a~7?`2Qw5m?!d37GnJmkv^;^i5p +SSP;<88$FfDLbKRw=I9m{?R_v!zQyCSt-TcmAiLxiZ)N_9XV2A?GSPC6rEFv6w|zZ1>~8+v@7K;OBI3 +V5ZY+NoHSjajOlO3}2K7VtWH{!XT3aO(S&{P`2nK7-L_kolR!-^SEnnq)wx*Vo|gHPAK%v>o}Kt}m_N +dYUyQ6&b_}6BKt9kGsbfBHj|6E1ZhN?_j+@R`0Xw)lVCfh8`5ULvHJb-+fJj$A{xrTFf<^W3u5VyiLI +!a(1~<@ji3G*HpKS|wm$!G2EiyB;xXi+W#<`*}J?dYRN}#W-Rw#HWY$oeI +iZ8OOXhYr+nO&N{W9P(MOr@!<{^egnXZO(edOL+vaI@yGar=W~A&$@w9$Ie`C^;Kvjk70-e8#fuYyv8m6BI8UR-; +%gyeQNqVUsU2%9Qq=s=b?+RbpW()0i+?QgF&5yf;HjhHBdUIQKNx3BnrKY+oDySl-8f@%^1Ns(c=Xf% +#F!`nW1_V)w0*aS8JqXRjLk*jt-*O7bp1pbuDI +gcefFL??d`I;JM+riO%~!6nb*Ky$Lum(ncG_@B@UfjyRLZ>l^H|-FVS99^&@3?EFF|yn$-AXDq|9lR~ +|dGmE;q|V(I7cXf3XLNzMX2URGmZq*41&KR!Q5lg?x1IgJqF&t;5=|B5u;;lf1q$@(TsPrd$;iMp9ID#`kdtQs%JFZr3d#viO1#e=(1f +tl6C1!U8bGE!=2+jvZXPF>vK|Eh~e=p?VXUDNS5vpXRAph`=szYi8$EcM6n!6XXzF(gp*ub=zTqudN5G_f&pPSi#S-gpQiO&b{u^lS-%z+@IYR~olHR4ZP5Er*;GevmTE_5;QnfsZeLw=J8bNIb^3P +1t|$KBMOnTja=tg((fqsj==>8c?1S{NB8DB0ZL~y{7j?n%Vg}`dJX&J}-oBC#zs9in)O*Kp&v1t6e@) +^##FJOJZKO9+=tpX_G3YZpn)zO^SlIg=TPr&?8$86EwnlG^b<}m%&QU7P@oD=9=ettUa6Ie~3`De{s5 +A9ZU(h=~XXW96@m}7u-0)IUleHQD|;yQm-^mi8R;hyb<`4!x@GSQWVI|gp+An4am^urqGu@^4-at>xF +?FQn_(}^}d*~I4>?vZtcBp1deH!hZvyRqg>slvC6-}MEQAFq{P7_Ht_i?TgS=7>Brrh0Wf(i(9-{NKJ +N?^N)gz*xS57fO0=F?Zr9n=RoSGkUXuH43+YFy4X2Ci+TPky2akf;~?jv63n=0l1`pEx`Pdse+U-AiV` +y)A@^zk#Zm-^^D{5o{Dm_MO$&HOfI7ieF6S+y~H9sYm;ws?h$xsK(X#I0%0EtH-{^2=7*?=px^k$>?u +^$J!k>%W7@v9ifIjPt%z&EW0KN*p!B*`4Q;@ +I-$!ZkN#V2drxPQwSU86GSeVmVo-~Qun(YX*g`06!vq^Z74u-<&%EnYZ1Q6IU8&k3RtB6WJ7v +Ya{j$*Y2c9o%8{&i?+m<-)UuQcU$Mw@(Us0Ihw7nl!13s<#GVNeehBHe0zAv3)qw?y2el~2B%-yX?bjGe+mPfQ+Sdql?FpldUif~rY +Tro+8ZX@NbsH{Z1%7wtPhL2{by%}HMCLwD~cpd9|@*(JD%A*u_Cao{{2Xz{Om4G#`7kqxM@E>PJmaXU +ZjU>BM`Ff7C5>d0A=ADW7pXYl@{?K-oKkz-~gip%}%4d&M^1ThbghKDf+asJl9dk#}Z`eA@X(Hd-siFDw!TA)C?=O_^--vF&p8 +1UGGg4YC<@uD#{e<2*FilxGKypvzoa-BlD<96wTnxYK$ulz-vwY0U0j5`c4&L}T&n73e0J1?L*j33XNcNMK?@9<5l#7FNy4Z2SSqUh@|Nr(p8TqQxRMOGTv2^JNC)6M0f+R!X{f +pu}~GR_Onf2$aJy4@{1)Y)bJ*)5m>Q8gN|)*Aefov(o3ytd +{m4cOCKYx+LMZ+DdH!wlObDR-l+ +mw6{@!jc?l27tLbrHu@GZj}+UrhAhwxBAn8aD9Kl$mV{>^!bZ%3jUGQ7xanNUNv;>-==o$jf|+71Nm^lqrC0wz?&t#-Lqgu9`e70F{Atk=7vK?r +d(SK3z=3eUoB+3h-^ye4W1Py&$#0jy-U#&`FdWQT6j}Pyd|n{jeo-{OISzfAz(Pp-pFpvVk(baqVwUjvJ!5&t{n<#pqZh1xXm4D_sGE{C> +jklIy5?Q+PXT@wP@(-+X5`2p=g>}jn%kUO>ZfH$VEOyPH}=o|DK9`iG>sjT_L{B$$o)P9Tjp%1vXh{M +V8b@U_c4tJl)^AzewWJ&CacSW%d;@!1Fw6-B54d_fR#B!|&is5P+i3wXBX>6>Jl-e%bdr67i1_N`>rf +0xE4n0?DenyxZ|4F5QpegS&`?S1$>2|Q*0`@afEf5!$$%&a0?*s(Sv0ZQ(ypD+{Mp4n4!2%5!IgufQ_3Y{;bBxE@g0GW^Fr +VK0CB6xTrn^hw3-4YLo1x8MBJh+g#~t$E6{`xgU&_xbe+yP%7vG1(ejUviem*iLelbqkqkFZ{+5?!Hu +RVP$_Ho?6zTc=tppwJ-$8Y*oCp$M6_TXxB?B=5bjI^KOn{yZJu+oZ@|j$1q_X_Z;&zr6sTql%c&_s1x +u0GT>e474}Rdo~!CsaW|6&Y>DTDZuJGC3Chi!D9XwX$d^R*5j{X)p8wLkf83{5Q_7KHqMCtTv15K$JfY+fuZh%7YBc@$_h1o_iu^7_@mm +nq{BYC3bHGekn^FIvx$Z))yNQ+kQ>7i2sK2b_bOA0F~E4Yu!P0Yvm=aV(p;!J+!}f$(^;(xd+eXq;3n +*tDfpX%;vo(#hh3n?l4M#(+~Z4gHgx^2i_+7MX;RAXxgWu^o@MpHt3x;9jhtmx2^2gt!oZkm%zHX_pehQ^I}^-)}r6&IuM(M|aXQS|-2tlqQq!4{Ku_PVenIp!(5-#O3W3_BNwpuUE(-cKx7;{n +Swu5Vu~7E&kX^!Pk~Yuny?|2WXBxhdU;zvvyEt5Vn0PeT(RfoCtmpCFuJwz1vwei{lf0{u#b68&0G5A +Ea`&Ql1*3Zy(LiN}7x7uK0KxJ)iM@yWSl`xBoizan;AZrb|~f+-=RiGr^Q-9vF|CW{aWxjZM0pAWS~0r^*uQ!gLxayntEkT&vIGch&aZ;>shg%Iq#8hMyucW@_u%xPw2S +0-Os;9vdw$e*oGln?0q_7xUJ;=yuI?|m9Jz>&UOvFtaJMQ1;d4RY9f$cueF$uZMy(6h1(%E%Y%w_n$@6M2%dnwOi^?q#4XW}d{8V +4$nZhz9^PTThym6|0~cCN>dS#su6;+K-3duW@n7JzxybpiS{TAQ?<_mC|63jGi4pXc67=iup7UXm`_+ +4aP-VQO;+Y@RpLKHB-jtYO%JZI(nCf4?Bs4(_o%^sYgY;s^Fe!sf~eAJ&tU4t=mVFO9}$NlQ1i6cbG< +18l0o%?}N;{%pkXY+ja%-}<16%a3zeE-=)o{A4P>i}+^>l|PV?(qd0kyo(~)PKoAD{y(^lN)2$EU>k~ +frZ}G>o+)J2aM*W6+&@k`+lW0B~j%VUH#_t+(<2YZoxHwH!%y%9G`WW;;h@GH5E +A&6xP5fjtt&tNv7D`e#ut@c>2bvQnnN4UX;t3n6ohG6ma6OA^9~rJpk8R=lO~e9Lf5#HPm_cKO7#gq% ++(mSHh3hd!%e$CwrIEpNZGXUA3&o30=6KP`9Gi2Uj^zT&miXUJV730o-~V@W4*VE&Kt06QHe%i#pt|h +pyvqxichf`XT^PA_1m8o&TAHH1b8SF5kR8%wfB$i=*d__ArLpELVmVY&|LJ^@Tb{`GWJ|PK_Jn}44}P +M>tPuJRJ`d*?xed(0<#qUDWJ(Te(R{r-9RABDJ&(hE+EO^pSstf&9dW{c8GFqv+CRz@C@sOCb_3FqC@ +smKmW4DcrCI%HUqjjyN}J+Ovmq^m(lY#MR-|1^Y1jJG5|NfmX}SKiiAcMd(r)&rnUMBPO8cfiEedIKC +~b~EO+wo3lyPbx +27lW7NSjG%GyQ43VcRoWPq;2lYRo*XY{dQpTZZ#%9nCm{0ef{nm9dQbTM3(y@c5Jg{flHB{Z!5;z;A; +d>ep!4;fCBImhVy3(71h^g2=2-G$zt;`6(O-e>XoK%uws#AsZC2UQzwocZTRutRjl?=Ui@)(D&@`h +*?`=Om_Q&UE@Gx$%&JkKLp!hR7bR5o-Xu<|GgLYBka&6`tH^AH#)0J_2IQ&)vf}@%WmwZadj>uIyjzxp3ChYsB$6nxNWbtaLkisb3_a +v%%QVXF3!N>zS!*AMdb)T0kcbMXF7jov9G)=aEXcn@RE+fpFo$Y`WH{KtLJySsvjsh%VR4p+S5*TYc| +W}bJ(F|8qXs2j(34B^xn*3Uj&m%#LsHpa=Avh?;A1dC1RDalKE5~`Ze4 +Jm3b?hR4dYpaHrKwy+wpXf`Nb# +Ht%(|8-TaR=kxe@6r?R!W@EqTg6h`8IXJ}DQ@WL%b(!B2_1T-xG8VW?}uo7>D{G>_3&8mvlrB7uizP# +^IP@zuj#X5jlfz%xej1*J*{||S9j=_c(xvRS@NM4eE*5~{&T!b?>vXkjf!_BW1G>|WTM?;+ajFHi4VP +tI{+E<6F$}Ta&UW|8G=2d;{6eQI@UZe+yx%EX3=oHnuq3S&T4vwI6j-#a4hMCKf5BZY*!8mUJ|;;Z;` +kzi`%wFoknY)8UaxMj-%%ER3YY+))MD0HiHB?oap(4MlPVBYp6?O6C_?d +XdpKImT)3&&X#3&&X#3&&X#3&&X#3;%~}V&PX<6AQ;%6Tc^!G*s?s|4irxaJS}Au^n)?2K~||k_Sp9w +j2InrDw&xgalldIkM9vFgaa#w)AXxOpt%?AB|^%d!}AmW8l{o27Q}(Nb@a-=RB8j--2Em`{h0#$4SAt +f#fbX?!X-?jtum4(3Nw4A)mnf(DWl({o~CS%Q4VTu)&Ph)xy|5!hyaixSfPR~)F8CH!C9;G +{$#5`j#=&M_ahAstkB()#kIE@SOx$;!HtfrQo_2?EvB5boU24Y}>&XV$dH8l^&smbMQJ#j`(iz3dfH9 +m?yL?z?4JAdYEUul~LDyY6ZjZD9_DK3G0t?-Czr^DnK!+vu=c)L$iLNNzwa9$mc}GgmA4zAFuF!tO%b +|9m9Inp@sY~1IpkwmHSsD!_LmRHNcA?F%sT`y!pE^vcsaAEy#vz=+d-4X!@e@2- +8-NiFIVR4m1KLF=q=(Z^r^8Fa9#wSl?hl)g3iVI>kl-~pD?M>C>amh)pkIJ(aOYm4WE^i-$?H*pm&g8 +kGOa=MkdL0aJu@Qm=j}TCWOvU&`>^eEB}iUFaKELl)k{v#cDlQ@S%SqD}9Enx$jqrO2aX?X4gM +rIQf$wVXVSZ>nU;otjrQa;*S$MM;Kk8RG)%%68*>su1jGq>3Gg90+Z_xMq?_0(@2l4tE)cUsG%+L3z4 +}7st+^4%NLG@YG`pouvsxL~buh0;LJrvBxLh9S6*4OW^5B3Ou{%7iw#;b4i{ga%2%ZRQ_(DoK5>g}X@ +e{)sn;B$iNO&nPlsACJ&9j(=!ZWz&d1=jy%{+X~t74*I(c>Zn`ZBgXWPR1kqu1BnSO4FyFSEA3w*J3ZUt#7$gXrV=kukVc%m?aUhB^<^A7AQiwYy0cSO|p(7AO8cOEC!{{37sjxU?1fw6xv4@FFlcbgHzZ$EHOjs@ebF|U`+jWPcv?p;FXZos(FTsQc2qrfbS +jD!vRnZD>&tEM+Yx{cB`T82AEX?=tr4>0I(XMPWr{}}Ka5QpRejCm3t^G+IT(4NZ8#@QPBmwhC=;S)Z +cpf79@mSwO*6?8^{T)TqGd3U57v3{{HV%<_1hbl5~#vC?GLDHqADwwjv@v3qvSW%;cctmb;?(Sf;Zq&@+=EP?S@9<5dp(+hDwT5n)H-bm{=Mchuu-8?>fO`EV +Iu)j=gyGY}oPI+G$8rds%GZp)PtT=n^+}Don&>QA@?eY3X$R?SQ@By$?gT7f@|7GO&d*Fu$NPaKw_uo +TD(RW~z%qDvC`y1+03grVv3FM)FobokYfZi6dpCpbwn4PI3S)As;L0NzBZW{ZeQS3}Pt?wgx)`5O{pk +K>qDA7+lY;{O1cTbe!-9vm~Zxr)_UO1mvsE?@=75A&j%pDK?Lp-%-B6IWS>RqKFb}qNiG{zem`F&LUT +yGJ5cTHek@ORi9EsA8`1=PpO)CaW7BXgWk-u8E??P!~3SNoro2j%15!n9h)h9n`7r +{h`k>R(OVfR$TFo^izK&n))gFxAhBO+201yKjuD$`yRDDJ2~b}eM$OX1Mly}yoH``uUW(`YM^|}==aZ +Pjy^~KxGU<~R><#x7;w3cz?N;C +{-yR`S%r*xL5@3s$S4R@Foj$`o;oS&(EbpbXDqw)Ct_dC!V@96X2y}$;9$-}ex+S6iasP{TNZJZbyie +yc|`u~rB^6u#q_JhH3wnO8MN4RzoeW0Uww$DHBi~58wZ)iLk+-0tinS0AsU&r_1pR_!AX(91+j1BHKK +Ovb+;El-k<0RL>_7-|u#4GrAzC0ccWig9|L2U*r|U!rrso50%Ep-k3K)_YoZC8 +y+XC^evjW1hPRJGjM;(JoPIne3-G8>7x1V8>3Bh4ve*SZJM#wg~~!(ZTwR3@5~1A9eZV_RLH->4!v2$_M0V{?WeFt%VAruH`* +d&I2O{+ReUnEx6U|mX<8gBgCDIY_Up6XjZ)l3)>Z=hSn#Gv6Ie=Hl$-#c2j~HfY)1*cBTlE0?cv|kW9 +WS&(cZ+eVcQGbaKzy>AeKNPt4TMpGVt#9XqNpT6S1cR9$2!y_ZYt~tSLWO_{3S=CM(tr?7~3{>|@aX+ +G1D@d}wXbq-xl2qJO}*nKPm@Nw%-(nnka=)vVTTZ+Pv;@xzthYpaPCThp2i&R7d@be{_8-s@bn55#Agv{cYgEbvK8=^ +YgAZ+@ISl@Ep6Il7e|F=8vZWYh!`_Bt(0YAk7G^P#{8Js{6SCGnW6#vxN%T;n*{N6evT*p6hYFj%U=tQgT~qewA}y%00Y)dYW4@|J+fs&X|$_d- +DQmBHzCXY7_aqE|4NPjS3`v4dw!!A$SbI`P2u<*q +7W}q+`G4{@?4f`1HN|-^@Zl@-Zdg#+1~vkUfEt*;92dJW$x$oUA4RVRp`4EHM5fHt&CILMbgBXpu1g~GP5cUZ7I(M9*RLqnF% +bE&8&jIXON=#JDXXi`a6=xPT$PZ)ZY>Oc{qH~aC7d4PJsi7dFPkM{c)Wu19&R<=}62e;;G=FhQ-%CQK0PjnRJOU*l%`eMiL_SFZTi-uU|MJ(_$ETr?hM#7pPUK8~jpY46uX*gdZ?=QSjg4$|lO0ve}j +O8XGW)C&v>p!N@ +bOL6bPKIZqy@irbM|~dDsKi(f+Q@70eUN7j +3Qt?(fs7{K~D86Z?Fos;|GD`rkqQzF@!I?}e*Z+w<{$sBDqN{WbmN^ +nUKkDWY=PNS@jPd_ujzDD^Dq%ukf8GqIOozw@VEGZXydJbkYxIR){4voDBt{FvI|P}{LbW;4;2;Uz3T +aLwR3@RjnYE$iu>Vos;(;raY|OiRJXEPs}y&qdjjef$grEck5v-v5!X`+6964NIUSQ-F1x&*$Y@iO)- +crD?YJ({F8l{{9O0y>+9k72H2wZ--r=ewDI`68>-F?(-Fc#GVd(-paIA +?Jm}p*BNX7+@^DN({GgLwLSth0Af;K28bY5uoO7K5~ZCe+~H3lxj(Ed;I#imGYK1xCJA#jfGdx9lkZf +o-tb5xt3;0KtSp>xOecQIb$wu$Bo+5{TkOXEv>dh%HBU|iD@H6Qq{F?EC<;JDMCeT;a{apEr@sTeoFN +i$!8d^>hrm7kucJu@U8pf>Nr#RD|TEcc-c@PUK8ZS=?V7Je8dF?=r^y{4Z0yYTs5`}fiD13S(Oyo4`{ +9|+lPS-|`7H$>b(hZ@5^Fm7Pr{_;PG8@P+s2=@1T0_scndvLtK@$7Q?Uj{~sd$#D6D<~atSvYS=_tTp1O;hRoa$It*dR^d%_@V`d4`k0o*tO +_VT}IgW=u(CTuVZf6MzXuw4&bussU4o*Mzv4>V{6HiBx}G2d68tQ{t04dWB(&retK=ia4hVXsGSx2W; +70DOlYxtI}sBy8-8qiN#-vmnbea?`??%2s`aYzKwO{XLPDkY+_x~$OWO*<6d^xc92Db7HTJykRI)V2RJM-pCu_o^SC?!=p4rJw3!@ry8 +g1X^PY>-TigV#=gkDPOnm*sz(%0ivK?YefzY)9$b0=Y0R-eHyNl-}dVfuD>u&Yb6D5%aM;k(D97H}FL +(WhEc|Njfl)*M*qX`!a{BCyMir@9l_oJCy~w_1^e(qCD(rb47W5YI$__D_gcdw-IL=+;b!5_0YA(mPd +%+Iix8GC~GZz2Pv(J#$*n#qSnez1JS&~R$tAk+Gid*x)`Za^!yX+J;S0e5dZ27+Nxv&pQi +h)fVctVtO_(pNZ%x%dK%Ley8+x<8!eFm28nMHD>8Q6UKVh`=lWm2N)+yq+ZG@jcHtgLQ2?Tx^$rM2go +#cH*(1IvYc$90ivxoLFnL|G1e!nT;k31ueIJULJ60(60$%Ql*$p5NZyK6sttR*3(?C%si-XP)I}T``9 +aV18Ae&3g;+5%y&@4$)kyqIq=%0u2nBUVSVK}XNrIl{lPAjDQJTJhq}hj@|m&% +4LBRSV~z{5yK*#?1Pj1G|O&9(XITLLF*cRv*gBWuoD*|Z?B6BArx)~r{e|Zl +C2N3aq?ZgPPc+Vl>C;zj?d?~TiMhxen!KBdtOG<#5`*;D@un&lF`fW@f +M>d+`!DYb}65xc$^dVT +r6X{P*l(z`PPXs6LF9L*k6>E+RJn^PWV6|vLviGCT;Tt<5*h5CDm`uD1YyI->%XRSe9s?(#hx{!ZP2t +A?GP9=H<((*O<2ur4J9no-vC%PI+KAM{9L_9%`(M5Zy_p~Zo%R;a7E@(-4q{8e*z3*t(HrZ0F(Y;T-W +9IZGT3d*pw91LqYpJeEIk|X%XpZ(BgZ(u>zlE%QmDZs9ohrS%JHFf=HT*q{|9rlSc%^!OY6mV2^c1GQ +3VVO^U;XmX^)v@|MR56RhvrL>q54uJ(^##8ECHE^#w-jntAJavW_XaakTFO4|%y(SX#dB=CNLEusG{5Ug^z5R3*d +S--`gNd5_Uyl+uSxbVyuPL_dX|l{xIa{XXTDuOoV%H10>p#`UUEBd!?fpAhdo;42fh^2_?&8pa;7DUJ +)2|bM6v9$NFH~grvBiZCtf63pmt79Bm6^!k0;5QshFFShAzUdO~=a4U#qOd88XYnHt)?yt4^oAdl)gU +O|%D-{Jz)DYM`UoLgSG}d4Lsd%MrR!%LI}Qu~+|9&hk;2nC~aT&3BrYf@TVjLp+nu2VlKJc1f~Nrt>K +LThKqybUxAJfIOUgj@B1qb@SLqMrubik9Rrp-iE8fuQV|2JxYrVNz3E*u*{2lA?R?FM2?>Z-1#2xoIu +`syjR1aSMBT=*EIz9XBKlK_9Fa#2WgIF8KARc-uYA(*0d*DaaZVA4y|!_J@D`>tOh!vnE~^9+J~?U72 +p34eDdh`gTQefnG=ZN{&lW{v{ecnZU*IXsCuD9b?)B9@1LY%?f#qQx^vI2@p(x&T&w$DgAP_;E_Fe-F +@g`VY-O4hKN638JUoct_-Z43iQ`giHIghnk(~i15qRc+s@HF)&#VTA6|qk%Wme12lH=OtX?Hx5>nx9X +!FW7i*q-Lweiq3(YH4hn>Hjj74;og`I6_|LI^Zbr8}c=eon<5%(>W+Z*W8TQW_;dIo0l6^`JdK +FxsGEEk(`@a-42~|6gxAY){3!ES*T|%CA*{8A$`^Y`=FWY@M=9#^(Dr;l4h;HfvuD|)&Q$@&_1=U(aW@@YTLK};3gLl=}!T8jNyqTj>#{V$12A +^+HcTa_a4J_>G~xD@LI^vnbn#}!-60MU2>@=O*OcLkZIrMQ3dT-lpolcZ|IMy|s1DfJ~MbVgUEg(Vmk +Pnx-|GA%Ftsi@K)N3uhY_g4x&z`jN7rcOFbI8e^#i}HxaB_yi0I5@W=UJ7Wz%i5>fP`pfhfS%*7-oW +!ja6YW%!Tp1lM^W$hzlzz0Uy0h8Nokx$e_=cZjU$T3BZ{Z^#uT|}QZQ2qEmfj*B)6RL5K13bY+lpney7r(>7y)i4p89dfP@-@*8@%L_6S+&Qb7vFQ}JK6-iy +Myta-_<8BDCY7PwY4n1(WYoyjH9On4I`-SXd`0Q?5DQPj}Ub2qPCGN;6<6SROUx?1~|-dWfZS#+L7j +$s0~MBh?ePxo9~qLE*;{~t8Fl;ZHSd(xzEihdS|XWMxPm8YaXmqe&6*+UCU8A&lsp(xWD(TE&qL&q;E +7#)3tm?&pmaBZKEFop4AJhmEPY`zN%GmEhq7;!Qg^z5c*xo42=a+?9f}p7Z=dED2vue9PO8wGZUy!*U +|aMqs|vQ^{Z$Gm7&wyO*9`oQlu${&!b27oZ>pX*ypmDm!XJCl$61wC}{T1luZccJ-|lu{@D4*1$Gjq~B+w=`29|(_f>Q7xP +-Z<18UQd?s_J!`io<$4Yg-N@Z4FTHXts-@3Py&vB>knXb6oSZ6M5wd6Bja~>srhj?rSh-Vc^Yx6A;&x +)@lO79JcXN8#CkfkfG`r}zuNVb{pMF~3z-2KD8fMc%4sy2-AbT$yaHXG!{)12bWm+HFlF!9bcEC+Tb# +Ot~JxLi2R30Z)DPoL&IuYH&N@1@gwN)%v14(NW|Jd4%|`gjL?|0IWXK^99Wlk}!Hh-MQz|IZXX+mZ0d)$(31?Ni=ehOF-roelEJDVY+ +t;Ac-M~ix(hn`O53>7nXYtO`*C5c4qSyQ0LaKjErFK;OsZj5$&HbuLyH?eH!!cWlild~ +je`+Ze=9P|&_w@||ZBpMb%7C1O@;X3+{T@_h+9nA}jca#)eOm+5TroY}CNpp9A%BTPa>wOh_pu0Xn=Y +fxO)9eP~gGGt+i`PkpVk7awMZg%-t^01fWHJ@JDb>U@uy}nG%`xI<*gp_|E|;DieM_pL^;q^hD)Wsfw +y>4>GB8~nw5|<2mZPb94e-#Y-tSPI8Ww1Qn(m=={e6Nb!iGXGMHmlAkw)XR*R7f9|7~4Be0PZQRNZ&| +9_%$JA9Hi4SaHL~(tD@k#(O7eZK7`l_hs%87_PC^uuI4D3q)t^?fm>o-+vBYn^f67Y?Iv|K(>C1==Rq +CPq%P%dztcTblU}6&kt$c(!BF5n-)A@zh`iJmKfY`7{q)%NzXr{au3j4ZByrKzdm@rt|QuEUFnH_pl2 +uz4Me*F$~$;ntMzV`X6vXAT6+*f;Q-OD0I~}1Wf3DXfNl#^`k*};JwcNSm7eH-QLV!)(z5ozj}v8SbU +LBZ33TXsn&eTE36`&pEM2pDweU;dHNhE6GF?RiOW^pF>0MUXgAP*qMcVV`-AWH{n$ +veKUTmv^BvpF?YGj=ShCmh!Xo;n{7g+ghx&H{VyMD|Js2{*hg@)(TokE^T<;ikRT=BhHdCoU;u2Mvcb +HjY|HCI3<70h1I47Xuge}O9n%uVz4y6{gSU~U}&xzv~mE8^c45A%}M4uEZO +}VoPX$9y@i!MPI97w?_pTide=!Bqqh61_vlx}v=|Gs8eR8I-vi9zIw`q&KD9p`b2owH9O|Eq);RQ5gY +?dPT0=-nro0&UA5$IZzg8#eps}*}qF7BEwdtbHU`IZ4ozj~@b3~Tuj6`z-a|Gui%#UBZ1lt~F(P&&l{ +oe7eAKSk=fX=hLK8{7x7t6}ti}m-(-yids{dogtYWnSaHPY>&xrOgTR6qK)2Po#&RW_{wgSMLm5nqMoe*^|bMPk?ukIU3A~0dr;~~EsL +>Y^_b=>!OgMRVXoFtPjG}78OMzL(15wZ5)lLP0q@hi>iEXhBwx9NiCHTDM&_47zZK)J*xzAe@FIC#0S +yxjF8*Vd9k?{S{j0xydp{E6@L!m6-m|oQDQwFfgD1-;sTXFGlW!}xsS4?m0x;}<@#f`)(C +XC`07gSzxr^+jUw~czj@roh(T}iwG=UvdMik{)@c|qkD6I6bYruXxU2I3bO!~LrRc!f58R9_?;)- +ksUC8r+R7pXwG1sKz1S-lJg4K3SE@-#mS%ga`Yp7;$Bm6w6VDHm`~Vf1n`OVI>9Hl^!v)5>-PooiLWr +9=S%+ioFRpu&lj%xlF`<4^eN`Eh;{3u^>~ct2GSa+pXmQ~#y0ma(L4L5O3qs^`s5Cy +TG3wxL}fo8leBoo*y^cd+5vI2%HTuwi4X)hHWHo~b-0<)MN?`w;XESvNVFv!zsizn?>&TWGF)Ml^fb# +8SSa59YIP8ri+!`D~oOkMh`jM&q;NjYDC;IDB}?*MzpjO7$f}I%fZ=Y%V@ZYxvXTR_mwK--=Z)xA^G1 +5JPpZU!^N8qB&=Xy~9);X(+DR$Ks2wVdh3khl~mR@~5oT3K_Fv!HhiEYV9StvY*ykn{4hzdA4cnOcsq +}<~~QWSu%5)^k4Lqd2~uX^v2*HXQNxKp0$dIxwM2i-4P=GgKzEiPUB1C-&=*VS#Rj@HL-)uw?HrR<{N +Lk5gy-+-}~~|b6Wgm*g+sR+qZlDx@vu|=KmC|GY4*ReM0G_?eIZS<1JtJ0@0TEs1_6HGOhccQQ7%wd6 +C?I$2_!#=#$+m^y8@GRFBYye;ROaa$6+ZTo@S`KRSGzVBosrZug>y#fWwCcG8C%mcf2ZXBkN1FiCvcvx`+)m`co9n${>&nttTiZ}EMmms{zE) +V3XV0qlsV~a=0*E>99b$0F>(<%HWcS=JU!l`7hwlF0r+g(AKgoH=Mv4AeblDT9>2Z7lRZ42^LsCjKX) +Iy>g%|V{tNW%40M~B5$q6Xf0@=mN@Y^Z`Kfy6`BSVNdf3^J33b+PgW*Usu*Vmrvol4+M{PRm(7+^C)+ +<|SZKVvI(^-LCUM76KCk5h0a9jiUODx~Nxw%(1^ZdZeAEGfH)TOvufx$!X{#Z`w#@z?;p+oB`2lE`2_ +PqIt40f5jQ*=q)sMGNU-c!6g;5T!nu-CjQsYR=EIkm-KuXUte*yNp{x`3~~NN3@7RY~SbHM!UvPurIWQjCAxqOfIdAUCyv=CU=M6g*wl=9c98hcWs|~jVSy +)lk?QtQ-Sc_es$fhFQGYV8zw@du8@L&~&HNoJkKH-Cy&``f5{qa$m +6sgVE6mvRObA{(`*>)f%Yvg=!dqFyj6CIXqHcHMjGB(8Su`ofOk+PVnPp7{nx{no8AX4c4x3dL-(+D% +75rG?Ge+D`Cj>htaw+_{GRI5aJ2=`B7VPn3;h=gpYsy*7x&>Lvvw?@blh#@j-KQv{{0V!{Cr`>A^%>2 +^-pbb4bVO`NPOfD#=7ew*iPKtIx2_qDrj8Vh#vz-avhBi_wm=#nMkjsIv3#1hMq5=y6doZF8g+)oUPn +{PinN$T4KiflH>4Oq4qp?$S-#;r0)uS|69PmbL|TPgA(Ty*s&N^DVqu!*qJ%RYanYB(44U~2wU+irsP +*5?iS^n0sZ%txxJYNmQY#wNS-Ub%UUEE>{*kQyo$=}^RkE+8`S*MxlGEO$eTs)R8ihcdIxcjaQ|744 +uj%`Ed=d5hcK?y^ojY=Dw~FI-&Y~Qem924O_@*Ar$RP$8zg08m2Bu%DBrktFe7n=#=-w|iTFX6=5l{* +`#e6+Sq=JiS@@pW`Mr@Y%6?H7Z9h4(k0-kRrb8T7bG4byMdmG=tdCPa95jcMV-*_WIVuP-G{`rzG!w22z684_wU@wFC2(qyEJM_Nr_dB +fOgTk+Evx*N28vSAT?Uq&FaJw!E`9Emld +9h!Is7(S)4?)Ml0EeO57hTpM6(>k6>3`@OoK1$e~sGzvvY&-QJwFPkB{1`V;#Y5OANq9^|x;)wQq|mt +8srO$_E)#i}ig$$8t2<6n&!Fup&Ns7;Mycj&NM^62wY&ggmdO=UqpHKiMLhmyqkOb&W66fWDw9@Eii` +!}%Nabx?U9hx+NK`msYW|GnG?in$Qyc9`b;MLy>vXzoY4&e7aIOLPDCZeJ6f8Qh=JJo$v=Q=*mYBZ1} +Q7IB?Z>^wI2cIKRlIC5je!WFXWYhmL`2lD;CkA!Ur)=gisAKxdOT+T7GA_P87^1e8Z7qWaZFhS +_FHlx4{%v~j!->3DfKlN0vRQdQY;#H+dz`z*JJxpg&%!^(+8^d3G25gp9UuXm6_hbug@{P9z?ze&4OETELyu%{rc@6MeD%5FM=Or4h* +Lb*1;KiG%e8@CCB+moiWfT8xam_r!Z51tbYuL^r9go|4TA!|SK1TI*M$O~)tHc9b+F6RnJ(JmP-7SwV-5Z^M@lw*D5^oA3IX;Qs>u-7 +gLZjH0f0dHjhI+(GsFd@qZ*&!Rn%@2LLNGO&3P?WG>B=Q^#IbR%}LX;*zYwE^`R)VRQb{)7*|E&K`pO +>K*)BbnE6;%&{JF#LIPB*wy2Ry$2*n@P^iK2|E?`(batjnd%H*f&+F#d_%TwFbpG(Z<-*CidP6Zugtz +tYhp<)kH@#?~h@Ivw(izK)>;sNn`mf_4|a0t<4Y9Sf&lT3CWGYsiSUV@DfthN)r!i@GbN!VysVm=n$R+B-W`iazT9mc+)B +$I7HJl8CTfgKuv3|L#S2eAW>Q@Me3S|kCx_St4`lS$t_Zw1?Af^V;F^UH;yc*uP^$zHfJCV^yNI5Tt>8T4`7*&O)qRLCM`HT2^H$s&FaFfxz^+fFTpPoO>{v>ud+vJd+>|IG1_tcu +^FeCExJXET9q@;;uE95^V6KKn7@g3FI%5B<_`^;Az+)*Tyhb^}Jh(Km&yQJ*f(wOMAC&tivPo(5Y`;s +H}pme1Eygnfnhfb1?zJV-@Au~1Ya1S1VYAZvC8kwVYK#BXcHhGf*vjc2xcPdyujeSqgV2-fpXlqEXkhn +KyIk>9{!gRpOK!UPhf{8lANr-N-gR`n`Gek>dUn4_vd)a3_{fy5-H-OJiemRaBI!-5>2s6x;FJS(^*t +V}v8c1@&m4tSUMPM0PWS6-R05cZmRlqXh_5FdSqzVIgJ3ggl#3AK-Y!GAa8J1sY_nDQ@?RMy=KZF +kXU4gEiFT{dMoeWn(d*=AF}F3h>hmPqgP-hPkmLIk^ix$*HSO%L5?yJ%lA#k%Nj+r8-Pl7F?8ps&Rb* +fhLdjP>28<2mN;nqirp_Wf&DcKxjdpOoE2f4d8EepZt?yS?q3c)qgxuLZ3O&qPn1|6sx4*Z=VR^Utp< +;NT(b9i8~BFZjm;PxJJ`Z+&pf9LjgkU7{R%*f-~fPYQ0W%{i5S=?C9r5h)yNTz}gw?;86yl}wO~3p}g +hN~5Ku1W%-KDQuu^(!X$D2%A(cu=1oI))>m`OFlENvx0xbr3pLaI7Q53+*A3al%)n*=Yvvm!hmj_6}A +|9=)_U3&S3=)dYbatCB6NGlt^h$b9*n?yw0bzlahtf8m;h^MxFuauvZz0?;7j|DK(*rK8vMjd$|;6NB +c9W{h#Ud_M?(*se$S_C`}ou7dCa>(lsOX-l^96rZkz-e#+}upw`j#f7yE%xTuQ1e|*jYvLGhj@yg;AQ +53IHDlS(60r8Gz!2%1c!m{oz3Z}K%jkFZYip&%*^(8MwrG;gRw?flID-QWyzV|(!na|98=5pqonKNgR$|a5?5^1Y#;}ay>qq}>@wrY1jw2M31MU8gxnd{|OcH%< +2r&+)1p)O-<{ylul*f$s9p5a6*;@|cj(xYu_(!H%G>DIOd>Drdso~|(sbSEhTB=u4?+(yray1tHp%`| +0DXNy;ZO*YeXwj_&zFI!FL6k6JBCmm{W^R11oszp?uT>eH|lSKZXfb?Il=MtImdT +SZyVn_?LW%>s@Rx)KIo}~G}3Umf7E7vkKJ)Ie+PC;^>0XVunoG;rlmF3ti}c +ZS)PW87y}|A2k;jR5_@0t_q5EWSXiu?H_o4ozlX<*U+$Bfq0lzz%XVdQ(N&fJ=1G*FV-5%Xr!S6QAUG +478_HDaUe?zZXb3FXmUQ2T%KeqqN9H|q8RhwZooMNoQ{t0TcoeU(6e&7+rw{y?rq?AE9PG9;fHp+y+7i +1^G3UQqusoQQk$LiP@6A-t*E{R$;(>{=~6>~0QqD6!7``sar?We-R?BcNAK6(ZA;qHd$=!&-^lGmJCe +SOvZ%u_vDc_a4%)<{%t*(yBge6MivmwNCN%DN+#>kb_Z~}FB +ehSPCUchy0)dy@5J*0=lR2%4}a+T9IzLRar=>*G|dNJ3iP%i!x|nVJ1_JiE9+ql$iK-;-^r!# +wn!`c!x;9Vef+rx{Wf-cIIr&4=Fv1XZdB#b_m!`8B|Dp-FS+VZZidrwYX(`Fx{rO!cLaThw=Z?`*WRR +dqr4~O^gUH9R!-`#_HK%Y +VQ)AwV*_VgP{biZ)=9Emp(*8s|aX)y(}`cj4}j?u5Bdk= +=WsyDxL!-c7i7M|VHw-d=X^#@u0CfBi=~4{|g1^K$x~&UXES;93;_1B@32Li;O*c3SSm{r$xJ#eH5){ +k3-X*PZ#R_Hx!2&-Jx*_SfSM`o?p8p3eUK@1QS%>vQWL1bxvks-qU_NEzAz?tOWlz?NlbGw#+M-F%(g +dZ3%1lbb)fX`I{$bE9eShVdTVKR6ZoU;17_D)hf}&%spaf9X5QER4k7;~Glm*@E!CC7!Oo16d%*Vm-* +PK)A=G_tvuif*x(*o@?h7;Kh`8@MAU@5ZsmTRRuEUHvrQUK)|Nj>p8%u(e-$FUE3N0xSvLq_M_xBX+(f{&n0x=(;(iKe;)RuV +<-IujhN!(!B|K@@G`+yIS;G$#i4%)C2Bj;cmPv% +yjQbx(1K!_vl5~zKqb`*#5=LzsKx%ytxfdP#)+p`(1i3O2?>i?0sGOEE)X$mc#VE2;;5fiQ11UROBQ2 +4#33z+M92ypzplHw=SU{uUY{o+{;(3gmXEZC2-37@4EB7J=JQy&vXO)K6;qXkx|`;;dda;mpMQ06xUn +2KTHsg4O#z$*VcQW-du7E2nv?&S=xW0_H#8oC9kDhU@Ykc{Wtvvju(WZ_sHV@zS- +Fw#`F^6g?-EY2+e>UJy6-Z3jy6Kfc@~44PNn{o%D(2`ZfEnMw9M4KwL338ngex>v~_+4?YtkDnrMsOh ++D?z8rVDvN!ob!GZlDyz|fBIckRp`BeP)2F3VwcUQ@BB6{dagv$-i-C?KAC>cw4Cd@XNb4vp8l +wdj(=hyJiV{7wTfG2fN;6tWMzrR-qAGPkozl)YVZs95!)eLQXu_Jzc&V9ycfAmX8V_88U{cbW`kRCc+ +fHuPL59l*>E2z$rJL`NUFwoK_2NhNvYm;%ZD4OJ~NyHA^ZfYL-MZ871>@)(+FvzWxpAI&!O+}1Jd@?K=TZ;R4Dfh +7+>Z>Tyr1|@v6{~&i;zgUp4U>|C3MbvPPf1qiNdPLLTNq+9$y|0KyK2u!(>PfOOw&+K04~$o9a1!>j3 +MsSbcW@ +%y$?+w2`wlf=Dj`>`5N4QM?_4$fhtIdt@o6a?ri1JIx(Zf6$Jr9M1@(&1Id)^|v1*D>b*)RhLI<@2mD8!zmBEb+ +(#*Q{rtHU-t(Y#UOCI}))iCK+&WwA{JetZoBGMHG!) +$cL`6wEs*mM@^btxaiE{;C3my4Ki89Zx4b}FqwgZ8-|iZ7x4eLS#NF}&ZJ-#x3o+ns{=lZOFcvTGq}{ +oN)(`qU0f~Q4AP2vNP4^q~k-sP46nf&kZZ#x3%E(vgG5oaRKLwp?ZMa +0dBA0VDYyn?72z_C4I5aMXW1jJd0vk?~}mLRT0tU%n2cp7nL2*-HD(TE{}59BxvF&A+O;u^$v5Ni;>L +;M}lJs9(Ys6iZrI2thq@gc-{h^r8{BJM^!jCcmI0r3W6+d&-rB8DQyB2Gh0M>HbZ5T8LTL##mDhj;|B +7O@`jPsH|vF`tOBh$)CR#Ags!BbFn+gLnY(B;xmoO^7Y9yt*KY;}(|lJy;IC2fE6OM-Z*##B&C_a&eR +n;_k^PuYQ+f3Jk_5rgf0+7_NK`>RZI+4cqUmUwQb(tC+tE#KJMI;Y^#kJ~eV1a!-*jg}fBGmq-_KZ{( +EYyAw|>RMkyk+(;ltdOT6Z;QMT +c{k*x$h#x2RLE-;@+O7cZyV>mkZX~55%D9}ATLJlkGvdtU*t84@Quh@3wyokYHxSs9>RWay873=>6*T +%H(mRmU&UX45uc@y#=p}& +IjuE=96T>Ik`9Xr> +3UsEc#4gKHwRd`ixvalg^T%%XPS0teL=bWp2$eSR4+isaZOU)tS%JXIS&i!Ugo^3X+T(U)MtvsZLP|5DG3w`wbZav8xq7RfjDg=_VK6=%O-KOz9s>>m +a6a%L_m^+dn{|+0`a3v`*Pj7UDT9OIB)oq1WwIbLnDF{Lnx3G8E*1&{90(ZLpO8lYAA)ls4FiD|!jB- +34}dcm&cSf@q2VCVXi(4>elLXcAvn|KWm$FUx%z&X{?k?d`zj +JVdmD{|ZOZ;~f%W|Il=Cn|M2D7yQERkujm~wR)`aHeSs>#!tL_YO7n!ibk(%&7ER*WlEfDxyrS|mET!0t^cB4WBnJDq~+%s4H{a9ECyOD(i}$OK9%WH${%>p +#YbA6&Zx`QXa1d0mHwJ7XXo-!Sk6V??e@QmZ(4tgjJiB%8U~}mYJi?&f!?gi0&gOpLawvw3k_E1^f~! +*uE%$c?zZ}Rci(riQ{Ow+Tc#)W6(r|RbG4A_mz?xV+q@%l0a`V~!--jZQ9n4A +)*iJs+-|=DobbdB#yj$I-R5$P88vrOQSOX +N`HUn{=diHAA!V33P>*e_2=AJkel1zA*b_FEuH+seOr~g6Ms>`p9St*9?KPcg@TtT_(}zTPQjm7@a-y +BzC*#qeTryj;=U}8SV#uRCuX9DzdR%j_Yc&zo@jG5q8Fk!%33Npy3zZ?ws=za0CXRLJREr>@?;D%3Ed|nPDlMSFz#G*& +m;Vv*hKifr5V#|!?Z3&T!QY8p`OPvJk(RxV%8#GkLlQi@%#(j-^X-)hVoM=pW)8$k^DTlEi&K_svDU~ +rjQu8V+zG`5_||5NfJmj@FWrkxt>6xfc@{Gx$Q4d{<~dv`(G^7xV!y5euqC-AB&y-q<{G59Da$@pXwj +}iLjb~xB36=hi&na#~y#;$)}2+Ub^g=XP2)iS^3=at6q5VrP7yIzq01lwd=~(Z`io$wb%bu{>J7lTer +RWR>j-zyt{qJd+%57{NTe~AMM^#wRhkC0|!6;r25d|Pmdh^>{!k56Q6(a<;hdEU!DH?%s1bjtvmPK`T +7grUu?Ma!{sYK{`7O>)n9(S_S^4&G+qDmuNyaS*@>ibbN6WBsrK@2>C@_-*1m1pwrk&^V<*4PUAlJb- +osxL(6d+XK7IQI_755`FnG}5kRd~d4IeS`-q8E*9|iXeW3{^Uj7)u2c8+28oZLKPzG<%6Vl9|Azp!Y* +1G64{C^fBl`NInrJ@V+kJOBUg`2W-P508k9ijEl<8y7!5Au(w}^2AA#r%atTJ!QsBZvW=x|0C@GKcWY +e9Do1xaOnXh$DisS{yBO;=Y0Q@{3`#{cgS;FrawgH?cqhUsah5`VCSoq4714%Rf>?@Jj<_AM60r)g2C?Cw>wHHOa`G|Gdm#EE`XOo%0}(?IwTQ`xX^4f0C5UB+ +m55b{)rd8SwTN|y4Tz11O^Dn +@Mv|CsBvT6XWV$|+Ovx!AF=hjqtg}*Crml!kIYWAYKMN(`*T{dNdrpB_PzWyzKu>`gSv<7A7=1cP)R{ +@R$qZOT;vxR{f?N__kWD7*O=Lobl_cfQBT@Pcf?*1D<{}!-%znU;NS{0cf(`?{e*ztP=C>f1$w60v1s +{llPOCmIU2n#8g8qEUAP#3|8lTL=6Tv=-+&wXIaAxM0-PptI{cr>cn-LLt>8}2!2IioRSuU4jO*p$9h~d2$Sz!;(Z!9(`ppVg5ud}2$4h;>`ilo< +Wd8Leouxy^?n%Sp4%Ljji239BjAu`6sJwt=Grf9tFFOJ5BWb>pARqInoxwdr)?dK17Rm9Lom|lVjAzj +Ih}ps8H;`O8odqoS#EIuRh3Dxh06SPQzcgJ|_&*Qg(-XN~uyp3jZalq8Un2dk?%{-2mSjYp?nE*eY?= +xG7dfRT6aNOnl|B*wG_p$({y}|$zxyGUJow*2DnppPM1qB}+4TrH3AJWW7zlYYH>LRmW;-Hq^;{2=SlO=bU3uHU?oDNM8 +dhi4PiCt{q6^u0n!3m2TEcU4^D{(#oZMr~dc89rr?*biP&K~oZRX3w?0Xir=OCa5E&Om!_a5#;U-gZey$;-2vUQSAXD__JcCh3l_%=0Ir*6`6{No +96h0T}n-TobCv$NAQv1V?)|i?#1J|+n7u|0=x9r(8YyZ{$8GPMe=8l`gJr10BD(kuH9Y*Cw@i4w$mFQ +Ouj7UEvMfY6Ysc*jt>!>2t3!ZzQp4PkDzy3U!omXu+leg`%nO)HKewNv9L&jmhO+WW}`1n!N&u8cOhy +CzsDxc`7H{RNRbhgi~tfBt*4RTXO&+OB5V(zr~efv*?0ex2tDpyCovw2~cfaTiHmj2rEvjdO!Yk7I${ +#AXp#Ze<@yL@wc%DN+abTiIu*)r=BpD2&tvODfNKIyIZ|LXtjinLXHaa@4U(hoarTK?9wH`a}7G4h@9 +57wogv3YO4)u{byd3lYk%bZ?N>Y1SlLtp%4`eR>4#MkS3zVX!<-_akLf4#8M+F?djtJk|<$^9zG_w(; +*?w{!KfNp}(5cIHLx9^hO2Mqsa@K61cGhUv1==F}5;+F>wQg_NX#&t1vrqQMse_gBTIVm}?_4~j6(r$XY_7P_mJ$T>Amp +jjB>K6JOIobZ*CwI<&ZGrCA`)z0IT7vc3bbmH`|1^#Ns{5CX^m;{YFnzRJKTmV{K;KthZOHCm^y={Hf +M15rZ8tG?_h%a}L{EB@t~T`juyEBMsw!*OXUKz%6$KxE{YLwpUwwDh+*+S7K5%}=y5IBmt&E&_?9dDS +rf&J}WWVpr*S!Ar7*UiW=P48ocp&w{q0k0)iKeDIXcNY$R((f6cKI2Tv`^8~a+f#P^SWYkKwcnDCD8CmpVtTi +UMvRLT9?3Ez#~ay@^3V&CuI@@CCw$kZ)fCsKS~|Fo}e+Eb5po4xniQw8%Hq6QutR~Ek3LwzW$#Rp{#) +yFPQt@`uaJ5kcl6_03oTl$!fFTP$`|E5O=Pi^|B1rr|J^x3fR?c=0?!5GS6&(yJpa0J^+j#Vjt82a^YLv={iRLr{ +yq`Qt{-}JWlPIj3+*0H1V>gF3I+rZe0=)rzCZid5bc6bE~HmB%r36=y-<3z`ry>3eW$)RqvngGI}Ly4WYl7s%=RV5Uyw;dXFJoxQPO+E7-TK#nB!?m4@J~PkzxNzOh3q?t8tLpJN$NEcO%*xG +QRR7AwuSQ*8pPxQ|;_zi3H_RCDZOXT!kEPgSdUjYiy?jQ&#lDlX=Xc6@|NG0S-Z#%1?rRt}qRgZGshv +Z9k8JH9@O9+O+82N8x@AM>u{m@;H1pP?-Gki^jj#Cew{xeH)~~R9?Nz_#rwQ4u)^&K}1W?sntI{4`O6Mp-1xwx!ER$FT#R7vCHQ`GZIV~?g +Xbc)zd305yBqU29vy335V-x1`FqFLRG-MMYbt*;d(@$A?@p`EZTae}FOa>l4~$v5JO0|puO=lnd_DJI +K)35&i=*Rb*KR(wFyWkf&1x$L^oxgtby^Vw3X`j6L*)8||5HbA4m)F`@S+er&19&ikQ7`70BfesMdn;oPLM`+NDGdc*QW)CXU+J?7^3l!bC;XWH%)?i9eioq3`hq;xVg2_7=a2l-fAHgrSx?_-e&%1leLi>0ys}G!+b_yWx +HfFi)yiL&w`$$auqwe)-nws^ww*NEyLj%AfZ*5e{rS-8rQ3&m7!jUu{ba7kvg%67EOrH!XQ!!;!&e-w}^Sy}G- +y-M;dqp$Uh!4O_eGgIinY4Gl;bH1ue@u%%8rY9Dd4%aNF-Z$iI6@sy{b({WXoTUU34y}4 +!Q{`{ZR-FD+^Yn%6J7k@RsY2cVs=jN6UzWAkA#zgZsoy*^fnHhBQvooroTi?Wd_H6HV{kEOx^?v6M-4 +6^n(&GKYm){(;a(?N@_B +D;&XbfW5ZhUFC*RC!V$}x|(+O +)Zvc@oHew#_o>R>Kel*2>#{MfbN<)QK3}lJ`q0SL#)CuNFBy3-BCvXS(VM-$WeeXk!}qQ({_^F4kzaM +WXxlJo%mk5ikT{V11Yo`3gD(rZR_`TDidE3DO1mfx8EvGvFo`zs +@i8DC95^1zM}mu|Jo)lEFmiYGs8YR^41fkvHq`qo)_HU- +M^r6(5S3>iqEZJFH}weO<`qWVykm*G_ax%p@Qg@7$ygJU1ygHdAFTY~R+pkRW?z~g-?((_h-SsD_Wmhj%%Wi#CExXfxgbv +&q;L7FO5AOe;l!!K>HL<-|3fIx!Jm`0F=m>pCFZu+Z;zargA8;~aTv8Nqde7$~e?B1Ap_L;S>uf5Ji? +uY-Sj$s~T&&+|KrY_fYD6y9Dm5V&>wicC=dF;ck&E{-e36UyJp7Q0alZz+c +yA#Pxp+?@1bI8;p~%I1G+N~1y@6Qd9g!y^_d}k7T)gLyhFrYYk%L^kH(^39-jgUqF5a`TA@6~_7`b?F +rUbbLc`5P$3f?Q +tLjyxWD4)XEHO~}P_$wK54klT=puB#aNG~^}7rz0;#J`;Hva`7a%9QmWjpJ~J27nQIBs6e?2c@=Uua;T$nO#1k+(*khTIpq33(eK$N1VJw +;^vQIQnld@{7C!@-pNdh5eBG3Hu@MEbNE8i?A2+uEJi(y9s+;#{NOr3waM=ALRbRKFBq~KF9-veUSGQ +`A6PM*avxUk$>cUME;TY75PWrPvjqYf02LWK_dUi2Z;P5A1LyVJQ%t93ic1k{g4ku9*BH6@=)X>kjEk +)i97}Qy~uNrhaxXTejoB;lMLr67Ir1>%mB_~;uSTv#UW+^&c?0rDd5BL +B!2i~J*(Z~&r3?vC7q?b#D~GRnP>ry=(i{*n72w;}gMUV^+G@-pP@kyjw^h`b7U7vwd_yCZKvJ`i~m@ +=?frf5!TST!TCkc?j}3$YYU9IG{>F?v6YMxhL{MdSuMz1%UMJFn1GGkw +9x-5R#PlHdMec=MgWMZ=2y!3fTI5}jCnFz)JPo;o13VLQcjPt^Kk^b0Kk_mWKk^C@Kk_OOKk^z8Kk^0 + +lPcpP9hiSWqPzhHRee#l254@55Eo4TRMy^zO>@W@kye;i=u2>-|ng@5G5!aq)*lnVdI%Y}dBmBRmU%) +juDyjJ)}-XQ$r0JTZTk*j}2`Dn~Pa&P2;LaxR93pw&w!Er#EB6uw3U+@IXzu-84EJp6W5c7|`3-WU0I +-J8#XR8(nn=7S{HCXO`qI1{92s~`xQ2c<_AF(7jNIq09S`XC^+Ao6tyvr#XducwC* +^%{|zkekrI8QsmOF9+kX;GDjN%tf5X(26T4tmv-*(LgdW|9bQ<^26iF#qhbvvoM|WFn>9?wm}CL0E&6wqpLdo@|WAirk9npM&L)C)-1Z+=$_F(O*7`koTv>bmfOHYD)pP9?#39|jNSb4_D>6ypMYnpr?o5Ni}BlWCzd&!S%_aH%(WEZvE6zN~E +Cc&40>LS`2SU%{4DiSe}k_=E2y(QDQv)D7pUd_!H&w6!AOyL!(Q5)8qBbaeXqoq&FSQEBv$)aZP@H +3q9%gfodoklvPi}yUP;U~-Wh=-3*lvA>-pZkxO^>P1Goa(=Y)&EH@{u7+i!|gWR#ecM19^C(UC%KWuA +M4^jQohb}|KW=Ao+{@@hvncJK3O53s3^w>r~Fx%eWtnaSf_emVYMVqq2F~KENxd)(Efb9D4r7wyNKuV +;<y`THV&ih0 +38l#6;on +qe759MNBra>`}8Hn-*1NjbN59E7=J&=n{mUEDA681p8P1pnZSz!<4&kK7XuM_q_ +{-Ll3^3Q}lke?IwK>oGJKk{!y{#$VVmB>Hxk41dg9>qLrAj-wOTBBkfG!*4xJ#39)UNsiw;{A;##XNZ +m%Efg<%ySMB_C&e-1_bIC^Xi2tUxmCF`D@5ak-v$&9J#oTS0aB8c{TD~$V(LSthFdF7U@^a+cuzF%sY +yCeKGIfgmQ7667#rXURdqP;r&ql7V<#kVq75B4TyCGp(q#EO)*a`HVBMG`E2B6ih1}Hl< +P$NiggM(C>Qg#VqJn*w@`@k7mybt7xyz_-GX>bUW#&Yofh-pVjjI5<>HMTG0!dDiKs+*A#ySAd_VGPl +rKRp)=9|wKPu+YYtjGH$QzK0`vx(uE>?&)p|EcpjLBvHu5UPIt4$JXNmkFUoP}3)*XbRJP&y+ +^2d;idGs;JQ&9dSaxo7-3V9C7A4e|M6^K>%g(!bj=tnL#Xe>oufV>>JxPK7qP{cZwN|e7S?1fy6TWgW +Ogj}p!5$jqSQ2s1(u}(p(t7t;`Bf>t4buel#E*IlSvF=5zi}6Fb821JuFBSPg{*2I%d>!%>jVbv2!k7ouE@i^Vz#e2h+tQT_z-Qsn3*3F1@Hnk`hi|!kc?? +&E)d_QuvH|G_?p2#bOJ&}JZ?1}snk$=THqga&B68XdD_~((QpnRXmAM%fcy^z0-ybSrv$i=!OdH+|Gu +NL+}F7{s(>u81v`=ES*(63mB(}41&$i=!DvCgLnGE9gSG`qi)INi$#7E>#Y1x{t)s&$JqWt{jx7As6e6a2kmeqI|7LAM%Hhi*;6FT~;~Dal2Vki98> +9HFB};uNL`t$QzKCAa6px9=Y0w^LK*e +bM=LY$Hlk?efemS2b_rILy%H<(=kqggLq%U8-esDflA-CMdUG-Vz`o(#XQ+^k){L}w4oSwHhyXQJR-{ +H^i(`Eg9{v}`6Q8%qlJ&WPg=Z_cK~5j%v*mKu<9lv%~TU>ayQ~D{-k?RfTdGa`sbE8~-oSU5 +T$GKj?%?e)R!Y%T3m-7OJe4dj&D@(tF7r5ky&qEpH`1rhGmYiNb-;*WVCky)-y$g5LAHj26c$SlXvrG +NW!hS>8o6mzd(#Pj%9PN_NTRPs;=krg_ax=DDXPzU+&*wRF+ssk3;x8s6kE-pXYGok8 +^`uANYIov*mu9&!1(>_TuwhbL93hN73(yc^~1z-?N`1r=QP{&5`@9Tzn(gD)V`ai~7OmeH`tP&kyFw{ +SlwXa>UP{7Uwx}vqH|>n=8+g>t7zeO)ApE=Y@@O{o(UMj{3v7Q7%s-_8$)a7MK3Og!R=Z^IXcga*N +d1~EV4ET65A8=X=l<`W!zF022!a(trwxL#MC-JP$87QAko?&zPpyZWD}u+Kb&J?69e?chZ&BLl0#-d5 +}n96X0zUvgybdOfk?xWX)Rt4n$EdH(|0KVK(clFNtJj)L399nS8~`Q`Ka^W^mL`FBTp_; +T)A|2cAcIM0*o7v~nae^`L_m@o4Jm-z2=lvk}_k10x*tYesB{TIU!@3$D93V)a3iN^OB<~{cTL(hJ@8 +9s8VilS}O3;P%!ka&QHw;yEq^p;PUeCDJ>j34^-Fynu$ID&dUW9YZ@7{#jI8*7++R`zkm!~36L{JRE* ++Jx6XXYR{%UoiJ=UA|=a(Q$^P`pJ__e(Jtcj5qzj&^By!E#s@keZ}Oxer0I8vgS0?`$yE*j3-`ZSoOz +>GtB+g&~I3{*B0`+hA$ZE6E|4;k_u)Bj +Kr!@5gV3^k`b&$IA>Nerv%o@bb*`if!QithDj2Zq|FO$25Z +CJ2i=dPs>gq?Y9#*4j%=ZDRgK99ZWX$<@Q+RNk44xJO$)a{pR_5E|hW^_FpTm7VOSV;K1?bEI$gq03^ +@5bP=jIeoLbBbU8UWa<-giV^dap{WbbHZ-yd~0s?eY&vB&m_;!zto3C1RQ^7*TuZB%#KN=%T0MaN|VUN#x_ezVmQp0jm-yQS))ugc3=63lj@}-!t7pEs_&vwfVdno<1_vTgFu +q)?pzL*ef3>&`UjZ0r%OAp&U>xl7Cc4pYjD`RT3CS%yhZu*_|CWw(xS7x1UZA3;oU9sr%D2!&dI_ +-|aggBkcLh9X~&}CNC`Fz#E-|re%aBsAGTI_T7}Q1&69u!_8}(uy?|54^7n>v?w +PmX7&xVd>q%U;g!7ec05=zt0GplM>c;>$x8W#!dqG(q0i{(j53`Yr~CBMXNm{+6Cz8RmN4(ZCuH|MbpBs6mi^yVV^eUmJfu-oJoz18X@ +CKhWZWGl14lxxV~K7@oHAP3_$?*Zg`v$=WsRIsKFY(;nF(Xbt@7}@L4@u!;@D4XFw<`aOlPqSW_Nn?WO;OE_6-%P^fXOr}p;uHz7<;e1je(qpDkw4xJops%2?@T?b3eJ8s1s0mLsZ(NtL+@NZ{d)DIUkhQmptVR5 +!|nb9`avFZbMxm@#WeJtl68By=55kU{WE75&;qw;0`>EthcRSn^m!(0QUAY>FCD5HRwfQBC{K%H!#KJIfz8wT!LM7Ai;T_>(m9D)Ae*I-(Yd@$5X1yB6UxL9>Pr +9X4lRGKsXQt-NOyFXkN>Xp{1+YNNq5fIf7dZ-a@1sX`=~Pk=X=Mm`tglVkH_@Spz%lEKWi#nnk}=YK_ +e}im2A$ZU(2z~vKZ*+b5e8hx;ZO+QsT(rvnJ_t^*W1w*8GvfgLUS-L8eUcobL*Bjtw$o!WFzXd;AY&&DMzw3JJ-`f>*5y2!qzF=sAGe|jjls#1UEm28(W&B-ss|w#o_DXmdxVt+bFTQWprcHY=N% ++QmDreS2w0F)WvNI)2DUOH--622Db_@^dK{}9bxU;&rR^&3l=QMOsDsGeqB{upV^wxn`f73T-;_deSy +wyQ@Fp7t|}fcbL0NB;MUj@+zNTTA^lWrULVVlO-ZMKo1eptO;ee`&8e)}R1E!2bwmr{_!) +*D+tB9=&@N^t4m{g>i#&1FoHt{Q2YV)k}iv7jrm&{ +(MJL(fJ(UQ}tCg>8bkjjZZ=SwcG7Z?pkN}7a%F$sUoUY^{hYtBNW9sZI$&9DC-N#JfJ$ATU>v>1<|TK +h?dmXv-KtFbC1=-J-F645Zul!{z9Vh=8$CHS(HCkv!pjTuRZ_rKGWI;6 +NhZ7Uk&BC&|P_T*>N~Q$-Qf%quw=4Ya#Nw|%-w%HGWWRgX2f*(R_0h1^55Zr^#wA66fFlA2~L;t+BRuO}2%Xmn@jG{@_)v@L$E#IO^KvYQa`cD1wq*8qF=pf2>CNy3hrhNoz +lyX}?}ze-^8otsqkbN9_2YAp?gbC+0{t9^bgpu$=K)F^9VR5|Q?Szt?th3vUVIed`3!80@=-L-Wv=Bg +1?29>z?SI80&zyO`oQBHjQz&Fh(U-W5J!Rkkxunx5Y&qx>>E2M(v$Kf*z-$AnYB~MLry|Jbr~b3g7zbM!2PvoU)(+E*sH@&5 +m~tm`!NCv=_bx#PF@n-R1>sa8EE+IcOw#j`kSSlpXvUvT_R{ZO)R@EzLXEH{blg42X$2G>O20W6KYY# +(F&muq~}SbcLX`}!O3-z|r|jzGSuSbcNY=zh@c>D0eXgEaN#e&l|M_IF#`O2ns~B-ihO@Vm~550bA1u +Hnx3!uYa{!(Sl$);jTg5~4YG!dqO8mWe!-LY}(9wW5e5{`77s>Zs|0>_jR44%Q=w*?(XO +IPSnn!uRa7jB0n7=PDC)bnc~b*Y#1h1{h!u#t5la+ihY`;pHXz4-)|8{#vFWr!7s`w)*H)*{ +v;{)yOrFy<367BL0UhWHHPYQ%EHcMuOCo<#f}u?evSmRFY$N1dg|EiC7IupD|1bd_InpRBh=<{K^fx% +x<}IX6~k%*@rB$siAKk8?~&#OJ5;4=a;!_lb1w;*PRf&_<_Al6BUc>EtVE9M#PpWF{Dl`st*zinmgb>;SeTGa{ioZ1NuM?ac-07Hs}}!c^52aq#xAQI~7gzJg^${;50s}EHX +b+FMpqPeDtKG=mat2Hipm=0Mn;4vy&B!Ptxb*&trz0Y|>{;CljQ}Rx|vI10R!P6Q+kJ$Fbm1yo8hWW> +&<;3`j+R(F(Pq%kAYCmq~g!xlUnU5C=zciIr=S#j4MvQ+weS8ZrGv(%l@pwogtlSgf%Sgcxa!n`+EqR +?Unq%+Q-?<$_Q&<{Dm0bY^RTiB`Soq|i|pcu7DmPPk99=1w)vHyA+y8A3HWmE#)8u?ziL$$6*wb&~V` +@~=u_SNdU6G|jhSYk5N6cT3Rg<|((FCnVMFZu`-LkdW$4Y_CxJ;~*t}w`q7{X +cwk@WE23C;d84oejCoNvsXqueUy6Z3VC{q~V!vYyW((8AQnQ@7CFu*9({%ELTbu=~Z^&e|8rmV*PSX}1nG +CnoRQrVJMEZL_OK~!-0_2v5Xv9QEIwdomjHeQ(-sz#{O +E}z^IoV_|vbI9jdQ6e)S{eN<*R}PO$#rcVWz2{lIrlQmMr&QarT{Km+?>8+Fr9w&+3|S-S{n5IJl?Z# +tFDKdTwuweB%&ZIOK-N&7lj>VKB2&BDzH+!CbH6;47q~7g#DhR=gIfww#l53#p`1mUi%zX7azY +Fl6K75-!xLnih@!y`b|4)wQKTOT#&3`!g-<$6L?&JUUdZ9S}e_l-_mAlJuVG~>_(v}o02|)fjZY;4LH +$Ygtu8uxoC)!7B49mg)-i@a>YMRl%_!dVk;*NjlKOFHr@PBMW{e~{&!iI(o4>apv`^b9sYoZ67ryn}4 +A*rWlpT2#0z~awqzpcAY$dE^P$Oh4G&-|~!NAb9VdfjLK-{BxUZ{hXz7G94F=!@dxJ;Zh}|9kwuc0ez +?wX2Hw0agOW0R5LbsRQ%@q>BXG16Bb>1*piv4um8Crgb +D_3ZS|ZA+rGM02}(M*v28(07C%X`>9AWV0%CtU^hTb7eac|H9|e;JMHJC!XCJ;2zjzU-Am=XL^K>L08 +{AtBi0dS&9?-tsdkXDl3Ew&Hc10!9k>O<$B>PQn{G5AjoBqUg+SJ{HV4!}d9(QKmbg +XkUvHj=}zj@Xcw0#;G^VD6qXn63$`BgKF<;2t=HyK4cpV6TcHG~IQ?7rK%J$^qL`I}W4kQFKz}FuM1X +PNFZM#{tF;=lXJn(>;OGRb?Z1di_SyJr~m43rEtur9j`kkZ;gadM|x9vtFVv>{Fz3BkNTLci%DeX +l9z*x~s3V1dnczP(jHfRdu^6xc+{*zwNc9qZ1E&bm5vt|svT5lW@H$efrSItJRk7hPR)zAe2GmRGQV0 +wr_ez)C8lwma1$V!3FxCgG9Y^1(20gKKua$JE25>vL$Hr0p=cFpYTHxAvT0ZGg@^~l*>AX~&K=%@;BN +d5sPpLZ6NH@mmp(2G7pnd?VCt|rH)=tHAP2*TOjqU}alT0aekE2YLW(LO^z!9o+$#)hZ{Q)(pw4Ugsa +=;xD*jq=)PQbtn$d@WZWy*r`g7_*8bUn#=DQz}K^&GI1>N_bgk7H~;-TO=@X-srasSH(viN=$q3bfEC +vKLjR0vdn16gZFW(R5yF0Q?QGt`O`6`pb*xUTB%Bv;{Q0UKRK-$40Yk +;3Xha4XfbmXITWIe;HYP#$H_z9fU2Z9QujQqy{>H%*nif$rr4?Rx`n52YK}H@>BY4ZIzyH*)*rFw{xa +8+m(b+{nu#bQ2+0ARf~uUT+%#eKpWOz<6h|+eNpUazZY(xad~>7UT=un<{v_NO_yCJA-%;%K-yHUiA* +GCmE`ecX_+71`L4mZ`e-X6|9#^b`WwE+MDftNT2GGTiH%1ADXWZp?PzT$!?LekLS +B$KOu!Q{{1xF>5}#U-Sh9f)Cjl++zSs9;sNd7_A&Htz^f0@dV5|~c$lZR7O)1~(>|r)>LlMIg#1YR;i +L3jW}TD+*a-5F&mjNM-)oN1aA_*rFILWt{ +Sx{Uz!JbZK;M&aoubzlz$(C+lXUO5I#uZ@8Xn5$6iru}ss?QX_dM+Rxw@~_RQgA01;m!rH32=xiQx*FI?XT- +d*$=cIKd-V~rtPL)(pI!WiS*q9{>0U5tD)mo<4219@jnFSaIaFSS{sDN(uW(%jEcp%kdqB+}gyd +5GCzKmt8OX~{mkdDS~61zSY_K-*&xHkaOekjc! +(h1kQ;s6?dy3_2Ru3wB@%#q%=2!~&1jMK5L*uWPD*AB$<$Wb+XVBmGqx#NE)qv~ +ibv00e{s!79;9kf_PJapNcfC~GpQao121&%dH{=^I6EJXq#QG-_U?6b1KIU=2ia`>)euoSOdjnU8NaP +A&<4}p50n8a8k*}cN(~gwL)9#mAG~5rP`93OAHj1XBPSTDB{lI<0C1L}NjgUwwU}2<0wgNUq!O)1xV< +Zv_sEwoP)TzqisQu1K4S?0)UNT;SdJWgT1d8V+Z6dWZ^e;&g@qzJ~Z4#sl{An^FU4Yeqw12DvJP74lu +9w(#Ha1Hl1HpgVY>6ZQYUfBK1+WS5ZMYtl=Sn0OctySh*XxUJDJEXu3ITV5o{+f`YlpVERByc$YnI41 +=&zeB67CsoX&<#SH*n=e7Xd`>D|D6#$}a1kv>sJD+w;iYX#^gR~k7p#JhVc+x`#c`)4 +c?3uKqmv8fCVkp6!)oqv4D)VsG-r-oc&fPrHLVJqmAo;K?0|n +{h8~#=X25_sVA6tDAAJZN|Of4({~(YE2S<@1Vh{*qR=PI^g7A^Ca}qPES&*mqTCR;ou>wK;Fl}Yj*Fzy3vb?%YYLs;bDTQ>VzSTek>4g0L~qKpH9YAuEp9d`Rn0=FdOI=rQ}xH*7vP=FeZakb3ype&o +h6`;k9D{0VS1ke?we@cHv8Z#Z`3$Pvcb6oMN5``LaYi^=CNY*b%?!1j-k&p)PaqT#c$ZgBo6^?&48R@ +Sjkkl*0)TyVcZIq1Iua(aNDN4b8^bN^uej~qGnF?aZb=|4;3=N#g<+m{_XLX!q=G<`RYT|W!#cPeM;U +vgvVksC*Tr#dLVHEC8Hc({=Z`hk1wI@G@Znj^;`3t7}Y>e_9K+x^U+;WSZx^NFEt5{?`LAJ0&8sc*co +dPpeuzHlowlp{?yj@hc1|6_Lh&8d5uZZI+R5B9yZrpeC4%>Gn +G0~b^ON9a+@#Y{g-8*VJBF2;k4$qoOiN9){dW1$N8JDqNDN;bkfoMui5{W*sl+syeWoOTeVc@&B$YmeRj=$^}|P!r}n`qOWz@4=5p*IszQZvQK5(V+`dr%v6Il`wn@V +CtOsxfAU69jW$5p6<8jfvKtFQTxU{JEl^7JC{@akJ{}&{_#fzVYL|U86WZYxBGhf+ld>V0$xAQ2L|%URWwK_?8d6qPMqYdEHCDbA6%}O1jvcHo+qG*K`Fwu`S#s4*b~M__!Gj0Mp+kqr(W6Jn@ +#DwI7hilqPM~l$}eI?mpf17+^KQ8)H(jLP1gzzB{ehh?9fbcUQd^UtHw6`H +kA^aK$|0aa5g77CGe7#fnz7Spu;b%g4D}-MT;opGp`yl*r2ww}~zlHGUA^ar>|1*UD-6{OwzHnU$hr0 +d%AthEqDwY#+>M-w+rJ;U_`(3welii(dMJ2pHjH8`+ezd +pUkjq4>eM8$y^{>8zMsHoHd{i%m><1{FbPmGL?9}DWEBg4l=gr^Rq9{Tj@8G!P*L~VF{cw|&0gs15mG +;qLxuvAAP;}he>5!2PLQ|h2WTtn}k0h(UpXn4>cA0Ib1KDB$h&VC>V4}s{RZz_Zz8%_g9#;0~|*RC^{ +vo!YZsewes$@)_}v~SmL{21n80P_%_q2VK=s5G3)+qdgJ9+Q?3L}P&Psbj+vlj7r}<5Rm(1)cpmb?WH +j;U~;Ts)*wGf;VCbYfh5d}4H>zl#Tu_X}eBBNC(HqZ6YNV|sMyfF7v4e_(I|;rb(46vA +q$qp1h9AJac%R3ex-F*-hxWrD>Z><{TrjT)k*Nr(p>U1DO|wQC0+WO?ey7OC37(GWor$a}=Zuq1So<& +mvDT8G{f5*;6v2v&~qXPM|OHaZ=9e|Y#%x7HpZV^b4T6XT*Wm0}-t5*Il5R +qgwY9uw=7*uCdQ-a3v?NRC38ii$Fd7Fs6Ni74v`DGDWs;sZ+&A15&l@#Hal<;*ZM%zMyGF-_5|$X=+W +RF-5~q?weD$VdPC|E<{zHxn;Cp6`D5ey#6YY-aXj{ol_$dk-HvxOV@Te&IoFt_uig7t0U=#E~PSS&%O +8AKbThM6Wh218*MAJ7b2hEZ=>1Ow8r|W5x^_JZivAty}fse`Chr>cfX#UVlss4jDDz#ulyh*dG(k;wo +QzAnC&broW-xO{2!djEo+@vZg57>-$D*P`iF32QwXqYj)%ML&a|XzHhIX0mJL=_Q?-le<%y$@L|3C`| +Z|TpGh-(aDTtu%80sSq~C6$(m6G4bD}FbkSM)2@!XtxX1%dojuPz`&ov&W$awCdhaM8~NOtnQwXsK0) +*vM}b(m5xB}UmeZ)x;PxH6cL=)araz;n+bOhb*O0E^?Sk6gaU*|j-?4K@2p`)ns6%*Ic$jiqr|zNQw_hLLjt{u$# +vA{9TgR@U;Wu0#`e*eEoi4O{cwpckL;0LLZocWp_QAJw55FNW@cK5bTK(~kwr$)0;kx$SZ@(e%dVCQc +)ZtI916p?q$GE*sD_sA-f?NCtf4ZUb^=;aOv3_;z`rj>YgG-&W3It4A2~dfq|Nq|y4<1~~c{J_Vv4g(-_FH0qN(T-cK!J)5A3jW+e-rjI +4#a-;i>j)s?-U>f6tyhv}MZ{V)&?}q(s1d?AS5-=9_P*yu6(D?%gYn!#Nxy;QO +O|&bsyM*U#R(dGl-z*@n%ZKYvt4M#j**yu3J$s{tEcaTa#VEw}Vqv}n=ecinXtXcs(m=+IDH_e$YEef +l(UEVHb0=gz&EhIz-2AE(mN(poxy^wCH3>8GCxIGH~JcKlyiSxKLN{<-)JoaE$~M{HT<&iwe}k2NfJ7 +x!2jl(Z!Tdzc4C=W033Gh+9lwJe0=uVXMzV`ef5?23>cvktixivfB$|lp&Q@_w%{9 +d2j{%^-g^Rm@R0SNz=vOdm3ImH27kW5-(SRj*5SLZ1pag9&JnvIA^(w)k=-E2n1KI-4?du+TelMPoH% +9{It==QAMd{Vu9$$mtgKAvN<~G5_#ZgH20-4RC*Toa+w=ob@@GWR9}?aDE>ZYfL}5FLdX^GBw1>!XjO +gsSbNg9WZfg>94gA};Z(r7>OPAgp!{@QR1V020fEP3eU4ajH0od_Bc>m>>Uy6zUL37X>@InrN3*ZL*! +DG|+L_-e{>Gu&0_=u?Q`$WCU7>C_N-5G~&ZxD5Qoha`R(Z!1w*E9|KW%$|F*G|AMr{sm4SEDD;1IWvx +UlQG0K@{@|(;ql65Bj`EbQj~0evs(gMWXS0i6XYwwkDbd|Ia`F3|U^%t5>g1EDH;O1M}fGxBwQ&5n!w +j56~Sn2ag~(kbl@+&e;S&qZt1CKKJ1;i2;UhX~e%zw9Ck-Ermcvn^iMwQ +JYj%!fSa8Ei{^ctF-0k}uF7`{5UG9_);E#2;lH1rA>j4QCvNF%HEisX60Eo~s&y|Ce8WA@(zMCUB5b; +!z(@>civ0g$uNI%UZI`8bPZjN7IT)dI7}a-w-|WHPM5WL?eO2r>Z`)%tT3je%GhZuu0vv`}DcTHlI$j +#eKga_?gd3?!No(PHfK?0Dj1cKOT^K$hAKn5*NriwhU6ctVzNUvlL5;$Ny`5nQ92`@;`CgMZ;Tt9AkhIsNgdPe&v!7@OzxqYbnAljqq1WY1z8rVpgE)yL`Jc^?jA7>Ci{G7cJj +9--><;Qcu^TCZIa@N;~>q<8P$oj68W0Qg}Sv4zY42gE!Q7kmd_E8{ZkgTF=0fbn` +xKiZVtkJd8|ZpOjJIBZ)viO!t*u35(BJH|7Oc@io0S&cD5w$~3o?1hy7{{8!R125!+z5;H*2G}Jou>G ++2$ZKFX;j7@=Ft*Q&q%DlYYuWv&c-8=NF%JIv{7<$?%hCqZl4picZfXq8pAbWH#to&#(;lZU50(oYv@ +u3cHO6QNezx~Q{u!P;zzw*t1x$b&`T)2kPhjJ<@iF`_aD@E7nLCKyU>r&qhmErt2i67XGjK4eIIL80$ +OjHj521xAjKlb$ls#^kzySj`slO)1=>1mx@(-H`7_I&m;9W*nYp9Of|&vl#~r{}|(M`|GzqfS+YS$Un>V0^su +e^UssZu0&aK+}D(za(mr5Cjt&D@vXT||GN$RtKZPJ=4(e!eLo?c=c@)(B~7>B>J9L-H0Dgc +E|8mx&iUOiF2{RjL~{s#;g&hlJTKATk>R;xJtgX +JjinZdLu)rSLyh%wkd-_LXHx5EFvr~G!@3ZAq7UH0IE4~|GrPu~Mrp^wmk?CflTgI2zp;t96UDgPX+z +HxB3r#8lbKEJ5yv)^bm{sH{peQazj_&|2MUBq69Wfm=3MAN5Fuf?G;JR0K(25i#C>}KdQ<4}*CX=vOE +I_2l*?_}FaAt50&X3Q9}SS$p;oSB(PQ>RX)B}-SDy!F;wLLLA+Uks{;p^L?29qrpPjQ~X!A=G==1kB(Ydo{_cOnnU4JMjD4+!k7MxzTY#Gg)H}CA +@k3UWmCr%V}=e$zL5^#WC08hXMJp6G%4FY}`at|L3T|qqpc_h9=j0D~RmwE=H|I3%4(UsPJa5C$zAtN +K>@N>^S_bcFh^wCGfgicEwx_9qRGiJ;Xe1Ol8wH=8E;064$=8N0_Tj&FH1p45w@9^2$+ynWua)tFb=o +aLkWyv^q?%a=|rz1v;pjoqK2|fS^z&~Wj5K2f$5Z{9bz(G#nAoE`2Vu-IH_ka^y$PjST$`)cO9M87oA +6>e1>9cX;#-+$1t_FU{CMIMF^=5nrxKMMRHf@^F-_UTT(aV7IFl80J(xa +2Jd8jLlKY3ZFc`cz|VLu>C>lAC#K;7=<^$IydiJ^eNZ=K{SY`LB_+}Q_unsM%WO6a_(5yX9RCAu=mG2 +xzDH~d`9Z7=J%A2CCvaWZV21ryzRrT+;9x!T-L!l6?kdIC^J(2&__3}w{*iRWM7{`kn772S1@0;q`oR +1qmNy{-@KK<#JV(|OVMjqz*#8Y1Hju~T5kAoC^@{UAYo=2b+qNg!N6uo{cky=%6<^<@x&0dvzajpC{b +zm5!)NFlwtxlvhR(8_idZ5oElt=~)^*|EU~3@XQVyX9&`aT)2?fW(hy79e_Fty; +B8$g|X8OyDhR^N5@988RdL2W&HoTDENYufSdlzt%5mV;F60(-==M4F-caA9&$-;0AahTdunYLL^-s1Fwe=t10N;uD1@;ee0DlDE2^u5k1nt2GS>FX8 +@EJBAwib4ba|+SdV4SZt>;itsZew!Zki2Vc5%$Zv1?UVMA?qwhzjBOF#k_)FZGVkn$GBPX-GlJ&oLB? +*JzSF?6H*R4mmM=^TvS@quhBDRR4PhzwQtM+UE^&_bsL~=m20#O@VmZd-5hmWdM)6eqi)H!4N$i&)op +8a+g9CnP`AdU#^W +Y*~#*fWkf&$7M!j_uO-Y?nUc_}s*??b93s<2MX=e^e)qH%?7B>g$uC7K%RK0JWC;@oA!uek6+CE!O{` +k@at98(zq3)@b|b@?H~JKUZV^UwNKpo4cRw=IgjHdZy?%qR)l?3Too0#eQ;zsQjm9^?EzNPS2Y+FKPM +me8>{OpUDO$;{NzEbuf6xd|DFfX1pe#fvCpVze!Qq-=BYKnr%n=$IqvJ5K7 +7R2_m%e#Xyp<8A@muec>76Rnd|_c!ue|w$GP#^`!K+N#K3?B{%7mTG*JUXJs354xjyFKj{Ewa=(h=Zt +nl^P(BpwTqDO^ZC;Ehsy(dmBlk3BebH1NGd-m+7wf$}x&ti+%+LIk4YKf@lqK>FtAH7%fk014uN4?sk +L9Y)zCdgyh8$SCW*GK%L?UnlX-vJ9ovD%*~obIc~o;h`#=Kfe02FPQ)pFBpZJ=0#QJo@$N#QK~kC9Pb +!GF}S@)`py8i-CR{YO3fjpeDTO<%}kKhR4qnO<`CD?)CNBpcCkKYS%|xF>~h3^f`0pJgx1$0tVDgKno +1i*U@WotNlLonNSafJfg>h-o|{jzcg#CZ?2e^Dqs-uSbn+p?Z3W%FWA2a4F2z27%lo;=oO)+iQ2f7N7 +Tj9UqNp|^tjaZXOFu_taYzO9tXZ(m;Z>#7A;zov}Vnkc<3VXeZ=R$8?b-|*zPM#6@5eWt58>Us*%M4tfl>0-6MZr11o +`b>+}KG_@<1`HvOyzUb`5B*$M|7Cs#Jw(i}?Xzfmcc4>KJ)`}*yrRc~UflwQAzSS=YQ}HuAJ$*IcyZD +zue=hE-Vow(z#;Q$dEX%504-pTunzVRb*j@NO*nh +|Z=mA;8+S;De4@W+xlSdA)PWZ{=#KE<_vc}ejPeGjnHC@mc`4#J8Z7tou7bbZFUc9v|j;fD-OsBp+a9 +JLwUY5tz*^goQdi_6NzlB^sK0f}d=;&xscSUbHH8qu9c;N++-vK6R3#6?Ce?XhlRiDv^#%E~D{K4X00 +4a~AnfK6!e`e5$qlbtZh<^qR8q`a#*UtnV+1c5Xo_gx3cOoJp=$U7p5q03aygX66khu?NjxFdf?`;G< +{CzS8uF1#kW7%pn{_D}B$0MxwA`gVGM_&fLC62Rb^ytw7?}lp4{=AWXT;5x$;MGw|6F=~0`eSX5KaQi +9h`RCc;loA!6);SmJXz2k_CWSXqzuR!vXlq*6Bj2=oH&7HIg?`~{IDB2e^WVC2hfUXpP!PF@-})rsL? +<2$Rh+^pufg`xwc;bx=T5f_lU?X`>OLy&*%7B>o`9@srY`f(bVW5Yy7wdVmr_qwOq&`YU$`}KtHs71n +>ZM0p|f0&;oWFHWP5}*s)`&(!3sp(ElY%mLwUC#(0@?gU^6r!h{JF78XViJn(>kP1gNne+b7xZlt}ye +Tf@3Y%nUmT%kEb*gx2x`Sa&Ljq9N%51$X4gWkfEPd+Jn%+L!Qivb$Q8ZY8y^i&YHGY)I6VC~xV{cBj- +ngsmOlqpk$ZNR;%vaSezf!4qqHhKU4{njg7Tda?D*wzU9UmqMY2425@J*{24R@91N8&PwTJ;keBTda? +Dr2mC10bdz|L-%A~5->o<(BnY;Y4hgI@;W5J}8z8rY- +Prq@)XL)XdZGs*FR{8sm@@-~XHpv$oj#YCfGu5f +9=X5%kr-OUR3VEMC5|Sj7Fa$JWN&K=w7zkNtwMTjqR*KHF^H_?b}7HChy0A-A2p>e!!k;VZs0KvA0B;@;pYYtZ77E@cfF}pwscS72ynO(l@XWP8C=n4p>x3t+wNj7NiRZ0dryi +*jPg`rPL`7$%P1H?Ko|2h5DScqbojoH$bjj&sCyh%@pD-}wk-y&4BQivnIW;MLT++lz>B$2_W+rEbL= +U?0`lzJL%;dDECeGCH1=2GIhD@81-am6}N^)9KW{eYr|~MuGQ}k?@9Bi3+a+Q&e~@av)o +{q#J)|(0lwo8XN}J0G9s}Q<gSpsTYA!cdnybx!;)jkw-_wNmQqW(rP5MuQLI5$oi)O$x5 +il$tr^xFYrfTBEw+|g%dM5xYO7KdRHQ44DAE_j6(tsB6y+4<7a59*i%N^iizHZF!9}4ATO>mlTf`@o2KYK7#z13`G1#axh8iP`kw(2S));3 +@FeVyPj2Xr(W2LdmSZ%B^DyBeFkSW-tGliNWOpzwNDb^HcN-!mwQcM}9EK`mt*OYH6Fd0lXQ?aSURLX +oQH&tkO6Id9e@+YEDUl^-$DTVoz#hl7zUKKF6Y|O6`=2#i?tb(~##eAz_&IK~>f|+}v%)dzHU@Y@6fw +`E%e9U4_<}xn}%*D16re+z_vw|sF#Wby9ss=J$gPF3SOxsANZmga0E)P%+@g~KdWzV%2*lqR_dzrn$U +S+Sb2Recsp^ivLtRumZ;>dF3Itm;%M~S1%QQ@d^)Hnj2!Ol=;q%+o;;7oC5Idh!_PMfpDS>~*8Ryk{& +fv#Xzs4LPH>q>B?xUyWit^$|MRpKghRk*5LHLgH+ushTp>5g?LxKrF&?p$|)+vYBDm$@t4Rqh&hpeNW +9>WTEkdJ;S-o-9wUr@&+Llz7TK6`m?jjVI6>><#rsdSkr_-V|?^H`iO>wRuatW!?&JmAA&LaA1s=k^~ +xp4WWieL#!dekYdO(6*OQHuXq%k}?Pt?(DYyDDAPF2x<>*103xdUu>V(VgMWap$`Y?qYYTyWCyru68S)Adk +)y;n92IJc*tRPmU+wWAGGvN8;%@dkNy-UzSW8|O{*W_WYF`Cfy!*jwr?_f~qVy)f1-lvrW2gA +6)Dgh6kJGb9=^3^|5;PGgDrOuqD#571FZ>N@VMkW6U=ijK#)MV>#O)K0m01$hk_G^7*h~d +f#<(+3HlWG={Pyrmzh9EC{SdoIQbQn!;4gV!GxsWufWCtm~z$?d7cRmG=Jy-}U?Wm&gAAP)h>@6aWAK +2mt$eR#W>LvixVj0001n0RS5S003}la4%nWWo~3|axY|Qb98KJVlQ_#G%jU$W$e9sd=%x?I6j-*O*S` +Xxh#ZBV1-4|2u9aS;(}(#uFT3tKtNGJz-US- +!1srtY|^#uV6b)vQI|U+P>^`o#B27yi&$yzoaqdO~qN@|d$U_#@}{f8_K|o9X=F6OTSNAu}`06|19di +2UM<%dT#U|E1(@Y#Ao|GmCdm-=-9#?T2{Mh*vn1tASk|0>|N9cW0BurY^oCI$LfB3JmMXcNm&j9<#ADU?|3KeD*g{C@Z-Y=J*kZpn>Gwab&C +P8*@kwX=(TpQ-xwjO8OA1=(2!vR;WH$2&J8*<3&a%#6+1x3P{o#z3YIP#8Q`F5z{&qYv0WnJ)kx$=;5 +w;Xm{IFCuKh9d*>gshdZ4Cxg4)5C(Gj|qgWUtzZJELW~nYZpv{yQRtN8dsAp2qmGFE~n8}iwkZzZiD> +W8@B(~u~=v&8(B&a%El;?AQ76?6-r!9azE +V1pCb&&QVWD#Gi*H-ixhRh&O*y~Di@6n>8aB_)3v6_b40#7F+2u +ZM2xM;{ATM!^;}A?4htgY=_L+v@fXkb{y&`=*bamWe_Gf7}Q>D_;W7E=5vvs!c1-eG-P3|TGIgDE;I^ +=;#?(^@91s!fmpj<*5GIRVcxWNvM~QntQ5xr*2s8}l>!9gy*O`4Mr=9y9h2ru4@>i;x$_#fZ|5*H`#uEJT-ZG9RQUc02u%yLU!)=6jQ^EHJ3<*R +)#7f0F3W76y9M)%lS7LE`W+RA02kGX6%{a@n{X%Ss{ru++|BpQBHWyFv|}T2Z7|3n$lA5efl%sD@Lme +*E?#|rU0(fIsy;Z(jeEhh0OsW(s9L*w2u)6~QMXc~RFC#vCce#eP47A^53iHQY=ym&JOAO{u_pFqfy@ +rdtlMyWeh`YNV+7dKxk!CCnuJ(Knggs=X8WPUIQ3DN6L$EG&==MYt!5YwE4-`GWYPNxZq7M;Z%&8y3U +F_#C&pE_1P8Fp`(zVfYQ^T>V>s48Q#I6Cb<4O0?2jEsnl)PvzwIjP0?;f!QI<;B?wVmSY*)F2POq__rGNQK*L2JlOd$lNC&9#q9b=;~d(WLUjPjxmA-8XJ +@oEf5?E%6X!yqeb*5*TI_a0owC4giXX@%1Sp|;a744ASdiwN~~P=VPvY1)gp(}7NOQQ^^0xb_TWHXN- +yQ!{3If@g~IOc%N#(`m}|XP&7IGu_QIeakbocVj5?_Yk=r$J69{8;~(H{=xwc>~jJzqcYCO5+A~l*Hs +|H!sQA0n=8Q2I1a%334=R1*8aGi;LB$?+}Jc_1r)J_L!_70x%YTO0R+c@%UO$zm*Lpmjx81~fzB=KLT +G7nw`hx_hQYiD;j>(GU>ZZ#2k$aL=2zM|bS^L)-Lcm>>NXha(s&5>$#lb^w$rSyPKA!CWa$?5Vz@P(nebhLI4!JV)ay834mcviP}9{87r}U+V2O_xQ9a7o3Lzn +s?BgrKNv3)+>S&t-ERi)?uzUZsB1$Zqg0bY74Oo1o)O1XS9M`sFbzmYa-+CT%d^Dle%NGxZ0u%ejDQd +-HuEyK@QKq*m|bm5ie=Bh>{i}4O=h2zc=NAThKkkc7=LmA#iz+?LlPv634R$%*h>kDt;8D|gNaBEoaf +>+AgPOR1+)ef1aWB?_F9R0=jhfbC}xu2igCW<7}RJnc(|l;vkCVp) +Egk|rDVvZuN9E8PtH0LoV)?hrd^F|^-8;ex8$2wmo!3$O+lNp0i;Ztz{m%~7o!eGYzTi!;;3>4=P +~s{o@l~wE@zZ@uoDnZCfk*?uV;3TW0`2g**qnWFCI;(Au-9)uEdjRDRls%@(R_5B;q$>DVFQ73IP;;? +I1Ru>?bY71(FR)y1U!5jvW(#cFfr?Kb~G2VS3JUS+^`P>=$Qk7|Cr?(8NAL9#K9SU@GI@1B%C~GXydo +kk0Jn6MiV&nG)~}ca&dzkehDjqy2=39iozDJ;rQ}H#HfG52zQ-dZ87}p0&vLT=}9HuyyItv+_gIpmLR +r;!sj6@8!Z8IeLSY;k{Ag3!*gvZ04LfPR>EGMGcjs#!R1Hcz=k +J0}aDxZxkn2fFY*by!*_}nKYwp9k%=%qSXlp)%0#sbw71|!>g%~+hMNV$M081n3)JjzE90K|A55AD?c +c@@X!0NK-VKWA$9Q5{*x4{U;*6N00)!bG(&Nf|L-%BgLK=(TIzb^0g}QGB?L#AUA{PA-b`noO@vh^Xc +uf?9yw7V?(!k>4tqiPXu@02a5&>;Q}-=+O4NfWOD4LRnfdyt4-2{c6gnQ4)zrP6(NiYFVJ|6zxx#3pp +m|Lk-*Y)Dq8TrN6A!!#*(KKKL3Uf)<(8H@NE>Vr@cW;mo4F2&eDtrZrcP%;oIGR+k;d48?vI;s_BSxctZR_zy8@#k09^5-Y9XX!PZO~V!=KCDpoY ++E{>2>bn|29P_8cxfd70ct*^!r_0#M5kn2UijONVKOlDp$2BYjJ5?^9M*C*3q1rJMr_ +$j_PAz`OQ?8#ook!4JlWmnINQ{9+H`iDGzYt6_4WsRto^C!}h}$75RdZIoqF9z67ZR~mpisdXAOhr(a +xW_Z&sOrXX@;Ki+2Mj#y6L!$cx@k?cpCPoWlR8J61d~`{f~K0RpJD +(Ky;WoP!)xUsv2rg#TIRTE$eI0S7X~_TcjThzR`ExknnbB9cX2>Rst{nE*o$!ireQcwR=>89)Gd2@N| +$K;Jp;ePm>lneKGBN56h+6Bb{7ez~>?|1rOkw3`!K<6ByRYJt!V~Tvg9v1o)^Hw~ +rCq>(??AAGC0K$xdIiceafuPu0~c#gq@)LtAH2h|nIdy~P&{zAfNWrjOr@ml#GpeI+Z@Tqn8e=N4

oQke5T~y^Zn)SUt?ok{bXbKyr%iAi6X}`<0WX&Tu@tgSg~7Aq?2!;ynyJe1U+{Vu5 +DPO)#{>^C3cUXtSJr_or)j!yBNwf{+bWD;L)R+p1B@f{c5DPiqHok;ApBLjmjCv?U%)2WG@tngygZztE-(msz2mRZ+IgxtJ|gd-5i#+lEPbz +@XWaz7?M~_3dMV|62qUWJwnAfKF)^Z3_2iet;LE9}?SAgiyT=I||r$80k!61mp|A-8Hb6pN_mm$$ONe +DB%IV-mRVOL9SsgkfQwJLBTuaoG!6?#2qE-IjJ-aeji+JDN!4o$cU&>ii%QHos*blV~0{u0Nf*pkGzUg+kZRo9@QcR#Oijf>2{R28k6Fs(y){jOKk_HN33qhsrTlA{04jvtWvJ}dz_OCT+9ZxI7V +`SyIDj~Iu|AeX|o#$&Yl1}kZ*l(Jk0QNm;>b}vGI@W9e;Lg{9G2t@dt7a7K+sw13^ZjQFYU(>Yc#h4k +%I2QruaJ+wAnKo0I%TGxoU!`@BurB35q}t6OrK0dTQO5J9!sNX+80ejlA6;%v41$nuq3by3+Oi@t6E_ +wwsav{Fv(o$FzTj>L}ofT++u(H=t1o@LI3Oek@}wuo%w2n=&OS>x(8OOY&YK##KoV$#?{)!ElYZz|uw7;vJ6f5;WYiA=aCRIv!F_a6ukuGDkZp*JFd@vD2~aZ$P*V_4OAu#}4CxLY0X_=&KEcnn`#q65orTPM-td1eEczPg(kahMozZU2->y3505WQ0k+QAL}!3u-}3>*PGM_9YCfY^5ttxYDNOx-r1}k+%)RFdw0gA1clBhYQE~LxmlFwO9ioU`xiOZT0q*k-3t9kWPg+lp9s5i-o*$e~%TB?zy>iU3?3MU|bwYqUkf5*z-^&^U;%AUQft)E +=G(lklF4SWsA@ez4AJv*GVL9q=?SyH-|v480%WsrTm_+yyE0DKDIO9X%T;Vob-_($n3@$ +U8F6(3#z+zxlLk?0obdHlrC{0;FRGaW<_i+nIGP8f#g__B0~ZT7Kmq^?t +Xs?4@}*%^OVhd1XNJq=$y$9>|IZ=iaF=qGShcl&@`$C~rAeL#2r=CEoYg@;BFhW}qg`6YL>@ +hdx`kBz8mWpV1Q5O7Xaq@(W(4=}B3w$yb24(6&?QWGW@5sTW@vxN!d0Z*cnf4vr)4?ioR4AtL1^td9T +~^t?D}y(Yl;j*PT~^%NFcPp$t5g5J4JZtY=9j_U|E2`@(@A=u1;{Yte!QLv;f=e-lIK)ZC{<0fS`X5f +t`B;ZmuA#=vso!00`C~f1&DryLL}(PeTsfPNI>X#6hkAv8s%;YI=Y@3Z#n!CDIdv@CkdV2(`_dWp$gO +6&OS`5d627K$?yCks3VW7po7Jc$$MK82M@t1wd#ia3$6`gH4dwB34^u{c2LQ1z?93(4m!=)fyq-EBLO>q9Vs%o959&GrXm%JXFA_rA4v^RMoJ-4@u2e2a<=|~-aF>qyy`dNe$n=NO{Gzvk$m^B)p% +{5`#z;<<_Tb>ekiK*PfHoVE2a)J}GZ_L;*^rK`vZ%#2U^ykW9r;=9Ti9%@qq1(r9yT+pYqJfq2h(zv+ +E`;`6iQE?K-l_1u1R2D=R9uj+-z1RA{l|+)JLuA(NTV8sgoaXnbYaD*~%0L@_2e$SzcN&$=E6zb+X4? +dI}KLaJDr9!lqEMXT>S)T}Ql^kp}@3IyZwn^NzrK7))`WjQjxtIZxS(*oh)`+WeHwU*BVu)XzsvWtNV +j$4}0YI=xnCZDo8EN!oZAg{Lt%hS<+tvbj0li6-hqed(#L!Yni%&`5_2Bs*SHQOkdS{5zPZ2#5k8;ev2Qlkb;HIMW-W_9|0PIBqLnZ?gi3=sHPkEm +o{zDtwaR?Rwnc|yJ+6pz<3NC;V-U6$k(P1!V?hSAMniJ>ycROvfZ4LOI|sx`jGnIDG$66|oBGq*Un+F;)pH>Z$386Jy`iH*?N>bsB!209lO!x4g51U3cYOIyP}BgXPCM)iV%=VhGl@6}EAZcd4{V~4vh+My|lj%z +R4dGE)A6qlx+GbvW}TvG63O-_aV>IJrSA94m?;ihfJx8_t-|M5+GY1@5dC3VsdCJ{%K{jDACBTk7GDu +LXgpj*z*-U*RPP@6J~3^;84O@d~giJ0rjRPCmFNo#OFl&!|H(6Onw_3lDFX7`Mk9+OmNZY_dgPt&rY5 +L2Q~d~#Ay08i|~ySq_b24S;#LR(Bt=8v98^*HCwYM{c7k(fs(8)%o6ktZ9;O4lHFp&DcQdvO5fLqlEvCVL#WqDLk~ig;jnE0>0v|BgQRr* +wgpjMezp!z#o|7s-zXPbhi!wNo14n>(0np@yf!@v&*J2);9>V6wFcSte#=txUycfR9@G$e#r03@=E@N +S3!~LZTQg093B<&!A*L417`69?#uX8JG{exc2gkGiCYJRaNSd{1n5aFU$odz|`U$X-Yqg2D(-f!G4#$ +M!I-d6Dt*32Uo)6ph(Ff>#64a(Gm=nuOO3ICpS1Xzwi$W^}?JbBRK3BUog7UeN0*m-d%=cGV*iNr&u} +Q23fl#VNt3|Kq+ZMo+e8f8wzre{xVgV=wi(P}oZigRz7>la!(M$+I8>9?{$nDw<@Vgcl{}mVM{K~iBO +2l#hIPG^2aEp$}y`;n>kbvc?;-_n4Gf~C+^IAHNwf8g8G26; +he#k>%UnT?`bTa@bgUD2iP}gMLlFk*zP~iD4-cJy`t>M`F62tKun3jg$X8mz=v%9(BoPD&{8Mb23~XqP{f|J6|ozcWbv~n^N +Mo1irCQrJ1(=xn9LSVldJ-3N!Ig%4I%>Ue`3|1Hocsj&qVA2Fucpl%?SBTlR2 +x7%A@D1dWp@{QgFe^L_GgO+-XKm??zRHt|)$7SoZp0VQ{-(O+tEoT4{V&?}|`4*F~VGt)+DI}HXR!@T%XpoDW*CVb7S +;s;aO}?K%x!c9ruv3tlH2ybQX0h_7aiH(JvC`C^8*zj=-*Z4wT*jlk_@nMo;_ln@|l`^VZ+!-*s}%Zn^8YTz}Rqvu$ +#HG2KuBEwc$OGzIy{v~+C#E2w))1@WuPLybRm)jr&ntN*Z)$Wxev +299Qcl}w5CNa-EAZBr@~Rd*&~eG+Tq<~w3V1H__8bQ-B^b+g(%^XVs*A4oa7#ERY6R3u%QVzelCsF5t +?8a0xp3{|@=!RLG^U!j!gV{Pg#d*n}8eEruc5yVIZolON|C1M?QS3zVA@;YpLh}xYjRt^JL>}nF~03Y89t@P9LeSiUSe5_eq-`P*k!B +94ZzUrrE$8u&sPEi-d^cow^-FDZt)nLWu4V+OOvEaU6gwhSiz|NFGRJD3}%Ujqrwowm>Kd4Q+* +o9sb5~Wh01Oi4)e`i*epX@=vb&Pw`(Lr_X&X6fiG$Wn +u|y9%-dke-8q@RSQ`)V|yvo@Up|tXysTPa3=90NT{ELEivZlzbiqitMIQh|MhDVjZZ$Z-b=AAxXE&2y +I4F~U%>qgxyNDYf+wwxznx3Azg^D +B`J6ENeKP_$SKx*?H8R5$BNoM)57XyqHFXN;=@n?PR&j8T6?mVhmvg`3p4kkx|eF7|$>=e+;;_p;xw@ +4Y&hMZ|&#EWUj+XOwQY12{DtoBNjXy2QeL3`)&hp^7p3;Xhyn(*l@+YN2+-dTfE7|N!b!P?6b?^B0D! +kMTX9Byz~x^7UUNM3Cao-mV2DcqU=%szD>EEt{((#xiyDq&|KM_jY&hEfL91i0G=drGIRm)pR;^+h))2`SstR(?^V5-m7E}gfpM- +AhR>J+Z!&hdD4^|qt0(`Q={WczX?kx)oB0a$u*hCk(Sqcp +Ef`2^45n!F2p8;cfdY|;4#?uE;dcsEH%jDiX#fdy1E$>W5ICD%r6*FH7gs0nK!936l1+j$5F +YzFPH?CDke{7bpSGETSIfnX96>b7;fyjE=qDDGQZfMIMZ;14HnGlE1LLVS+0}Edl`Y(EzE|IZMvbIOp +4)&Xh2}cIBwJt+^+Q+Ew{3EfER~%F{a}DHb7WvxhpSK7OsJFx)_m04#G`9ZeT;B{IHkcZ8#{x0p^*MH +rcEW(mJZ@TFxhZ?{gx2RvnzP)%1Si37#K?HpRusH1u$DPY=PIY*d=o`o7k=50~@(#z@(>0L>i*KogoO +}d$KieT3ncZ@Bp4Kos-S5A;%X%#eQ|=1z;8}tWkfmb{uBeH8o-HB5FSXf)qd7*XNKVtd$5{=fH~w$H& +mL_!c*?L4vsaBanwD^p@?^GyS2t7X&?7n+r*6(Jtp}EVSou0G#TT7A2u)zCSiNIXvkV#H;2*K&TE2!T +#Er9-_>)u-sq!_z(^(<8ZHj1?Fn;-*7r$&pbp3y{e6CoE3|)TNkuv?&Cr?-*>=U>?ZetX@4W$zRqHbr +D8uaYcUwgT+bgH_~Siza9f(pzhaCrcFkWAL0w{(nP4ps5cyr;?qs{w<4IiK4KK^Mb8ashUT>}q&C4>j_u!!Ns+TNsup@$8RB1%a +kx|TFTY+In%+S(up`43o>fhgCJIC2C8w#{e|tz8scYQ=0x=uNW_MCa>WI_}Sx&D7fS@F0^E94N@|ZzA +c^{OSc$Fa;Rk^K=?;GMFZXi_F@2fX3~WhGGMBYKO&KtDdtd{nc~n3Xl?ul7e=}j%734I0dcRElB@ALJ{rmX|nw)-b-y9@TKX3* +rvTTz3Kw77fR1e@-AW8Mun|=ozj3cuG7{akETz0z+*8r6Ke^HS!iG7sI#Lvwg&91ktxpymViE(p8b_wnNKRaA0NMLG$s7d(@WgZ!!tgIdZ-wvWPAxl;hP1afS$CsuV3nWeRA1^f8w#ue +AGdHrw?P?OKPNJ+Z@@btfEdA@uDbu}%=`4Of}%gfpKurIO3H?qvX9FMK>FW(@RU?l2rTeS=nwH&{BBe +BMO6QyXa=TRAUi7h8-hQfDeX*c?Wn60+q82biMijiYT2P%%C^P!+MT$rUNBL|SEw0txIRG7ijV~%i`oV ++1w_3+DiLlo^D{t+=mc6hXJxUB!};F%AS3teoXt=%aO`Nx!y3#;So_%r565?MmUiaR67lao5E)9>2)< +v972hoV2#?S-5laCKHRzZydLSXj;OG!eRy40yU`q@!M*q=oXxh-u|&m|@3IB&-Fp|6E9T|q{(mj^f+h +%?(r9|q4M))*_$aXyFlYM32&d0Knbp_g2}()6O)oTKgq>Gmr_U6Ki2zcUXwK*B77XkeBRun6~G9fo=)_P{)mNkhL!C1t}S;RSJs*`> +IRY1aANGLauR}d>|NH!f`ehvib_Xe4f)3NUTJF(j6IJNs2G|_^(lR+j-8@~oKlK)sq=$6V0q$M{TrN2 +Wf@s+MGp`GiXhDV?V?kv6b7|ocYSF)qAX^)-)vWOW5-VBZ5tVAa+n}QKZH&Z8uKowFgX`;db-+Qn!{+ +zAy?x>stduP8U({bSC^=4qbP<;E_*tNYVF}%bNnWX@EP+^S9V}_wW+}k)FJL+d3;gRXUNT5>h(rW+H0 +o7g_`Fh_-9u>x@n4|2f*ZBE0bQ2^9K%&#wKC*dVlP*=+O7h)Ge`7Q0nj4bJ&z^=UE&Uv&{(^$4cU^9z +ra9BNnOJVzl?=U}u^q!P9kmneIRXV#0_3)GB>(~oR{}haKIM5avy#MF7|p15@LqxuWe5+p^7+VCC&?c +JgailGB5-Jn0f%$B=8+3AGwGNeS{>m)a?&N2Y{Sw18eyx22FG*P8jg(+GckGTFu=7_4S}rvbER6mN(2 +p~Uw*Bxr*&UG!;i)XXOTu`_geINnwE;%#Ew4F(mYvwr<>PMX~?2CihIsDvOEjgJJbV^Kiw8!O@`xpuX +0&^ygKP?h!&KgNFA-6B-^y2%Ibfb%vh)XHw+~6z-8yim&&Vh_<<2Ji)=IzpWo_5b4abVKSB;*{#AAS1?XAk+m)Qj8~Ze2#tDAL+P0{Ue|q%Ue^*Q8bsf +xUn{P=-{ck7)pD5dmyJ#>NJ~_)Us6j8gJS$y&nXV6nj~!Q(EJ-9jhwG$Sc +~3UX!|$YUfm4kRU2cPF!jqkPhJ>MhPzwO>C3P5^aiTvcZIW4dNlbqiY~owDjO*{RVB5kbcnY@gv3U)> +?5uX?G#RhPy;C-R0l*B>WDPQg0-k}rj2x!En2Q0UI*9N29p^f6hCJEqbI3Ru!F+g!kscfjjH7(C5Bq7 +=vbSR!)<-_aLO-Rl%sPugu$~}e5K!_K-bVu#;K*#@sZQ;^)&y&ku!|txt^j2n)Qj%XyimD1)_0EN%bw +uaChM)|xTs?|{`nh0;AZJF`Tt1Y32 +Grakax}4&(&ruGq>*~C@uB(;td2>w4IB{K`xK1{Cx|ch0c0rxDWkZL`(ky=SUVqN^;2G#xQeIZ@137% +x$XdjKWj34NyoJ)(J(lvw8$bo{n9HIJS0kBrqdxWUZFZn)gmTD-=V}-Cj9=t#Y1P|KFJZx +gG%Q|%>Es6t+JF9>0q^-tM;OfNr+ps{KoWLe`KI%0BFg~@(9WjKn*YUKv*@>PT7;$3Shh9b?x98M49X +wpBybD<;HYa0$J^YtU~A>G}CL(2X+C7Pkn*5ihu=Kw<%yc*_V%14;-BL&S5w2_ck`|!)SK2W#1Ve-C4 +|Ly-~Plr5_I%ySh$iOta_7attc!!WeS=|Xj#QIOJIS# +Hh9l=s?@-cZW=H!y$dM$gE24z^rrUa>>YV5o20&Pjjx8NV8M^j!eaWw&E_7My@S0Nl^vnWbTc57Q!&# +Svb1w?_?cLS!-etskhgs5i_cG(%i^cK&ZHxEMYpSBV2S5_L%qOpW9Hktyt1C01X0!xXxnJuV+&S0 +jKMfNS{V`7X|QKnz&*kiC6(Bs950l@vuC^5`TIgkuSWzc%kBB1e$Wdg%$s^)l_r^UU7WMUrSdj2wsET<+EY|)8rN|=!^@Q +3h5DI1KtF;%7(nVN{?(ORiv8b;*L~mstsI1XD$`JZ`L)^>j4Z1b?D4uXQ^=m8Zo*dVhB5-Gjn~vg|#h +f9=9!)IZ{~VzO{0^_4Ts(@sk}t&XdVL{cw&6Jbg8|kesmG#Hr(g-N-O50T71)Z3r(3$(1LoawadTkIZ +hvvZ-E5GZ+?HgUY@TZCl+2=%0j!x>J<=h+956Qr+}r%Dh2NN3rKB|CA?Q8tS +^?pDVXW1!VWy@;V3T;TL@$OXgrli}v7Qo!b?f^rMdcT)7qdxWVp9#WcRwn#j1XhQLZ9s`P-vmSol`!b +Dwz>4HZ!bNd?{hw{p0Ec(gIs7lVk>eV0{+#N7078T5+{G~Sb&Wfi>B2@o)4A|E|JPV6*`K-zXf`0NR4 +KU4R!<=lw~+Jb&EX#(*Vzl0G^jPLvs9p2#Dc9ttTD8aB7xZ+|gP8OmK*H$6;J%w5?XBW;v0mz8NO1v% +Wyd)J7jpz{96*qqE+m3=KVH>#Vnn6(K^Gg?9C5j~p_Gre?9iEJ#z2e62Pog$lF&N{87uXl^_l00~C+v +;+Pf%R>tw6imlEWgaCB5iv>G@ZMFJg;p(MMHunX60TtFQ<$x9Z-*^D9M4GdO2j5&CNxu*{>eC(_bG+4(9Vf3Ixnb|B{lDwQG@Zs`WOsD?N>_t! +Y*LV_y564dSQ*0W-mWe|a}vOT07}^M_`@PMBebas}{ghrc6G9v&L}b--UV*si}Avj-6y`okZTfFE82U +fS`83c*vupAP(q2HQHyGF(Dr7PrB>;8ite(B^t(;xj?3xc- +T(%<`wn2`e}pTC*t*=vCJga-JlwaM4>I!hVXzG@H1NRC6IwAB1Ns>JhtIXHT7yrGC#A_dvV&ZU#g~c4 +9eZ_HmFW;ygz#u9sMQlkW%~wuR<>hIoCb_LD;(QyQT>ZN{PaW{+$IR?lq!*{XU2-aOXLctM!@axxuA1 +z0o?&V1olhT*R_tm+q|rn2X{oe!G?`SH#L8^OJG1zC?@A +JCboJ#mZaBz-f=N+q-7*jd@ZH3g*6~lTzCSN!+-@TlK>QMvF2C;5eN%bhW){Qr=XL^#s^A`hr;a<=wj +EX_v&w?SL>o8i#a{Y$Jwi%MZqtxY~2{N*6XA0d@p94fh`M={07fh?@D{FVPCIeJZPI$W4`Q2Zruv$W+2`o<;els$aZ}q;4}L^Fe?3K9euJpvzn3%}w=HoKzl(XMhUwp# +o(_ZGmy3CMl-<#@5Jo!hk+aHktz +-ZRrqy*k?kY$Rnlj2;H6~v38sD5M?~SRt$M5+hn2yOoYoj?$&jEmuVvNH!L)$h}5HJyHRiRcz#2s&40k2ROj4 +9yxp(Z|)0oy?{NyV3!W!PqRWGf&QYPgo$C1m!bvUHW8kV}%Jre-}~{nwb|bAqwn8}rq(=HO+qw_{B??fO8NpRR+k87khR{T2CI-)8~#!|77aC%ZK-Yb|1p$OgL +i&`pa0exL7uRKy2(VT;3X)T!isXM#>+ceg=ho(2$+K+Ma2!7%QQb+$l!smW*lEVMFLj{KQy>(}GvR5D +AX{K5YfAQuooKGqA6bX%nw1(=+GLY3s%qS#}%!64*C`0X9O1;C#4AYcvyz)UL1w+B-p*%JA?KqgUzYmImt?@wh)c-+TWl!1V(08Dwts +(N~1)3_hiN3OQ)Q0wNd`dCn*{Kk#Q)zYEKIu16BRAAz*~fZ=E8l +>_ll1A~D+$FT@0~F%4wht0Y!25yC_;9`;tfiuzUZ>5Z^!MU*;2%QD5WEGrU3X}&eUKRKzo`z`FOXiif +ZTM4Q94w-yf>TWgM_q}@LG5FF?-tT0A{#nD_Iyy9Nw;e5)5eX55x4T|RnFsq6Ug#gWzV^#8QS|;o@9)TWM6%`Z*`w@(q229@)P8 +?h-W~CCF)KAuDe$w$z1%qpM^v?G+c6GNW1r9N5RoGPn#cNry3lMN +xw8!9!!+YLfmuyNg$YhL&4dCaMQO=u=#eh!r;zCP8OOB*1u(6DW3WK! +zj`USugUf1aNu2C_V@V)&;tf=M$^#Cngm0?#_R4sa23+<>ixtEib!iuuEkBbz#0zf_XL(|L!>9=W0Hq +E6?g_33cR<(+L|j{Q0vui88xtgOp{4-xbOxrB!B41Q0223j@MUnw&eSWlYALQ6Hs%%y2a)>x3a> +=z5om^vq>K6-$ajr7k*Ck^eAa%0gtULQi*sx>~$H9UXQK3tGx#AA|KwO)}KL2>TNb03s+%JG%|}Q!da +BbAZib_s(8e8b#mx>j~Y!vB<8Ud=xJ)y9JJ!Q4M53bk6A@`uj1X@j9PcECqvJq>~fO@^(yEsG)FSF$m +QoqT76DNH}1@`<5=|J)u%lp +&_NLM)?!-!K{|9 +;Z&nQdNo+499HQ$Y^ugL|JA3ipPHLDVz{w900vxWr%44-)Z^opZeK26cjBWnIaXoS8=^crRlTK-k!9#^+BteZsUj$5 +k8ObsvjU>MY1AAZIbC-OI-KnZ~{eu!xf3S65JXP5t#kbqsJrtMh>f7YWq#hsI7V8{JHS2Z6SO4%KsAa +8T`?M71zoGtlzB^XcvAs%u6vf0-MNv)8V<_e`7LFaEa6d7cbHj_}X2tgek4gtVFY1#1V;3U!4Xnq3Cl +eXXCh6|qxz$JKOn76;A`-QUUo9(9E1g0dL?yjtbkhN0DL2XuhePQDt{wO_COWqX1&-ArkRym|B9M2)r +Y_1O74qV>6HI67Y$5}a0_SUpZ+dwlGyk8KNtX8#ie<$@Al#PD*UPin^&jqG{W~h;0-@~72Y%v2>H +rTFp8!UgSfRs%4vYbU+w_Rw(KPyC$0il>tByh7>4V#R0^^5lzM-c93C@0mZ#wOFj22U5D! +xurm?xWS5DSpS(#R68yFt2cAwZUTXbgA7YRZfmsRb#8diw308gIX1Ke$)y^xaQf20;wHfxeq!&hy#Va +qoXxwVUKZ7#_lleHeC)UvR>_OrB-#I_TP<5PHV(=6o&bwR=A(;K*B1PUQPAv5KL!+5_Op?6fv4z=Cff +E@91|;M((&0LSbtgcWfoVHw +vpjqm)PqSOQSHfJPE;S-H8&>v|L*bFH^(mg})VaajggH5RQ!h2f)kq@ktX8*A;!bS%4Ax0Hl@ZE|>Cn +~z2znMOOCustNNJuTppCCLZ157O|{?W08^1h +%lsn|4RVFrCt|UGAedO9EL5XQ#frDEWH6S5!cFZ89;iG6m4~HwbQz|Uj~r)pNDDR&gU9o?3}Y8CJ$A* +0rXZC@utUyikZE-zZvo{*TX6(|6C(NCN_0mEB7==MG++4pPG7}mPp&Lc>t^81O|H38c*Zw4y$|b;OLP +MWrq7_<-t;d(#$k6PR$Tl2^w^Aw6=g6bc$I=L{Gb!p1B9OxJt>sZgx7%}eOhbgQ^{`yp$ethu +tD{~G+wLO$LcDLCsX(*b5cQo=<@W4(|XVcW(m6NgkRl-fZWwSyk*Qbz$pQ?%h*-f^0XC^9A4ze00Fhg +U8e%9E<8C`jpna5OXfyYF|_I*1PGOfE3pm)5?B$`JVd>fUjY1{C$rg9Z(fdAVMcszv;yRNt8yY|&KX9 +qe~H%<3EnAD-y*+)HS|QKO{k9%r$w!s*@qw3rXiH+}%fBo`$$z*H;A}8d`Uzbw(z +cWg@z#=44ebCL!LV4Se^I8l`eq`$RFLNh+Gt_WToO=DmWzN1@sgF}Ld1#@bX%<#c&-x}ZcxZ~)!Th*v%~;%7nrjGz8tzM9ybjRDtONQj@{ecVOO +*p%V$YY93iQ*ADhb1J>43mxuH27$sEs~5`boP-{ZzO@|j;3bjCo-gPoaVjNYuB{v)t`06o}KAmBi*F&i%sxh09;Y&xBXbu`A`sz&|FbTzt2DXd*gm`lkbFL +gD#T&(P$#1T+>BqfPHnq{LjkYxa2VM0a(?b`u0*dw3A3n2SQyD5gWN+dP!*5F`xtVp_5p{B-S9whSq>wufgE=6Tzo2_(URz*r^7wZ&*IYW9FlEz2xM9driF4Vg(-ZBcY^Y$rZF_ +F!&vS;JjoR;5tK#5ZQ^h;7RI*>w>@u5wfHK)6T>Fi&O-Suvrhp$aJU@&e(+W7+xv25mCV}MoR1~wkAh +fsjFDu^%6&ped+^#4%RO8wm>sz>1xNA2&zo*UZQYD8P)5BdNIC?YvHy^o(AO(H9AJQsWyi%*qGY!{AC +bvzGgNiV?pPXY9-ZcozP-q7qS?B!zonS(z8AN!P#j58H>1SNnWI?zQnkt#+uk+ +{OjD9&1Ci;@gnTS{<}H*Yp^m_@J0Y$DiZnT3(PMN7P~uW(DeTr_bg-$Hi;^tnq|J5!(FSf8oCGRMjq^ +?zI@`!OjCRTT$Z=7~wcJG&%00ab2g`8iM8VPlWi0%#D+X4>&0zh-SPUg_Bs6j@OlKKK=pHw>gdV8_v|EuY^fW1Bj7DhQr4L6mI2f`dDRylrPn1NjL9VCFp?`#R4EhwReHjf-8X +`-K_$^}7Hlu~n1(WFQ;qvfwnIrC%vD+T!lf+J$BWZolH2cbd)A0(;gtbT=InCmycKPk|hc+c3V-dXa+ +xKI}BFa%eR}?O9kKHu2TU+`&ehq)F1gi-(Op$ZWiPe@-m)^RMUzob&%6j^8m9Z1Ar?127>Fbq7x*oVL +r(U1pWjjF9!lodd>8aF9-^yF5?-> +?=QnVlj+Ox1?aj|@+5tOy1)q=Bjfwe~voSUwy|?iv<|B}^2k?buz~#eEyL{M*Tlr(d-Wnfv>j8hV2iho7HzIOjEJxnwABkhw+P9zzssD>AVZUE<0`#?m)2~`bKFtwnf25qW?X`b$2c4xr?lQKlhoD%b>#c$9ESQZHGN +T}!ZUBqJi|p&rS0e(Z>Rk&_!AscNel(htcezzT1jM4szJ>&WBhiV;kB#Om6fJwFw~HXTXx&wSgZP +Bwh639?~1d^@lOdCOTzgX`So2nr`R%gx0W}YYiXsWc#3%rStHL3-+x{hbv=mg(&sQQS#%)96z(17B>d ++NNac-wEY_NbS=hqdh={1B^|#ROLs!+{j?t?>Ia$w3B#t)1)RgRV5|d0i45Ao+Jv5vYrp#H2!Y@Lom5 +7{i%l6JGrwKC@7IP=UYyl+j!g7JX8be^e!(T?FO26Z%v7F77X#*~E3z!Xv8=#339nC49FwlXN54s<@s +Tn~DEPH0n5+$aA7HQ7uQPV1#lOhY&;7lGjrSFO#n?BjTl=3nYF(vHsGIG9P#`HPm!HLESAJQZ|1&|TV;k^xg`n7^;uA0SB?rm!{I!r6k46BA{EVWX$LI_mjb>E +(Ps;OO=o5!$1A0k$ez;HEGZ=SodH&D)#G&nmen)x!FZ#scoof1Z<@x_f>W#xQT77VN{<{zdG!r`^dN+ +qCjlF=sq@a+Dwh)a(Ps52~ehb9NA)1%S-X8ACaV3Ad-fwvs`ICP08GV@}y$uOe_TtaT27AzQ(q_q`x4 +q2cT%KCy5fnFmN~Fv)I+*IN16KaUIu;ezrE4PtL`1mnUxVH@5wgR}8goS*`ujCp%mZHO9wv2?<1>Le@ +$4?@#5>h!9)v_ioIs4P<^%#JAbTOaWB;dP>9+@ApqD(DV&vgD +Yl1v1?IjPT^hulG)Hr!C!)yq_YN#}$niGe*m+(Yp?D=&BZr2D+)(OYHi#%}ZdFiE46aK>~!%x=XT@$> +zA7XV8fq0<*@{NH2)V-jHo$|A&q&|i_=u^NNQj^IPksR8vS8h4SUOlBrhzPD_~` +zHlr`q66xnDJ*SRrer{=$#7IomI86dTwqEi_TEbre7%6gniGW@0ne~)=m8>bk8j*1|6Crp!A0TTgp?N +qE~p46Zff#Vd#qg;p9*fxJ?q6@nx8Obp(N*%Kq^<|#9N+)*t){1Sx?8;81pByeUmF0~N(v5KGICYhs2 +!b8EBYJs58XFdj4O36Y +J5nG4<7f_mZ-0Q?;;9`WmOV1aK!<_P6suo#xgclq|Mu|#qEXxxo`e3dqa5@ZdMSn{UEd%izGVv3yU{u +l^{0m8?MD#avUeOoFrD?OSicifKaN8U%ZSTXMWTKaO#Kvi}J0y1Dn}dWEw?^Z$#jdx +7C-Sx9UlZ&s}ME9V}74Rb1k65rhIOuU^yhAL0aX~$=-y!#w+!QSvxle>jJPDBis;do{tA_WabG6Oewj +w!(zNmK(B$71wZE8vS4C-~wi3u)V@qf6Z3=kc0^)5JRs!74$HPNz`n!uTftjxU4JTF0oRwH2Mo`FEZ- +-SmgUzg>X)e=dv*7{(g +D)(|tMU9NG*nhSUi2LPc5LfLmfYyPee;BDe-adUExq1CZBqLEy~cdeI`O?ti_#(fe$^`>sePuOcOzL2 +=YW*qDf7hY|4J#>dnDuJxt@T(d+EP4)0OqawdCnV2_U~?augnE*`bb_Bze^>kX!T4`v7Qx2(hv9K`pR +Y@F;ktb5*Ffx-jm9wu;3umJ;JB|*Q0lb154_fhNmZg_>=A%vV&ivxxzMa{! +Dc+eglIKitLtoU@kN^yRGJEMAp+g6G);i_1vJ9H$vtut;Fhg@QXN;=V2)G9Ugf~d+=v;cjxa~kqdNvD*!3^Iai@%0Jq9@Cl@O)04yYuGmr?OjsGy=@XfiUR1 +2TzsOItx0ltP$>8O8E~0nqpa^S()9)v|bu5x+$9Z{=d&T=N(3bYWKJM +yL|rp!aL8oKIb{lxu5qu&+)t=bbZhwsn#^$fQby{u6gPKmkDo*lJi$OQdSYJDr5fIdW>oJU&Iw@TjFV +V!@6cK-@EkN>@$0sy*<*-?$f*UNRlDRGbTDTmgWt#c$z)79CNk1*7SG2PHT#C4Wpj{^wWcW3>D|o+?A +HpX3sl@O}o9(CeLASgvs-kH^k&Q>J9L`w}B`!r0k{{+7jC% +WF()4CZ=xA!li>s|+tR^)wk?_#&#})gX`pcgmIFg-;_&JDI{|I7~kfF3uYUbCfFt=3ekn4vwYkIq7&x +Kjq?+8jp`WNlPy(Wo18%9@ey(@5xxw%pS{LtH+kTUr5|r4$_ull2E>2Q%s(>&0<8!na4jkHF6=1Di2M +=dC_|I4X8`4bEorDscDtXuCc(OAw?$6_H7p-Wk`()_e1Kw&YDN}lyBe11vUKSMzG%8N9SfPsWAaJ^3$ +v7baLU+pOKN2ru&2B;=14_IbY>y96yHU#kqtAtMm(hCN9_-)tCml|KL6MAC)KmOst}ltKKc9)K}b{Oy +!5tyrFblDF{Zr)ibNn6RzwXO(QI&)XA5UJerI2EMYB_93^XBw?dEkb9lSNq?DW1?~k{xvosj0Xenl?R +1MXS(YKSz?_6$AxW)4d9fh7uXZ$Vo#HAj}AP~4Fg+jY*AY}5Fs@ghJxyqM-|&4zQ5DG +pkn3Gp6)1X-mH3re=kjlUhD;Snl34y9~Yg{Ga@P{p+D*NpccK8wxg@Qc1LWq3=d +@PajXSeb?1kQUmmdEr2(NG=P4v1u?$d4r1=!=5?02-tId|m$$4jVdiy9=6ZvuyAdtfQ28W%06M!Lb#i +5G^~!of)$hr{v!BqP9Jvod2Z6sXh}V_G|E(QF=**9{01AU=zFQ*W!qe{=Q +BFu5u+1FJSG9|x74ebu+r#E5-`MR@Ph8@rdiTKjX9Qqnq1O78jI_NK5gZT*E!z|m83HpHN_Q2btHGq% +K9%~+{N6H=9;uilx?m*!LZ#@KmHOXCGMUmgZs{){$Bq_U%%)1zUe6Cis*6oMQEGS&v_9URSGUcf|?W435A%VxI +>AqElAaDN(hJA$oIkN?OXw2Dg!S@;%#cI9YnVQFcH3sWKU=ensO%Wiu$`GiYkjq&Lg2FYo_Exk^4XFfqt%!#GkGub!4nvG^Wri*d-#?d2%x<9eysiy3bJ@4DiA3d)}ir<$7yKf2mUGyez)GZ-mO>> +U&gRpJy*Ay-yBEPZ4>$I;v$r!OW0`kyvpx)euvMpmE-5=kRLpf5jhD%87X?U<{7|i&ghz$q&gwHM{;| +fpxwOV^cWP&C?SdCq%RT%wdodB_3h%NEfBgBQcRvYelMnlE;l?5HV@%-gfxqqJt(sy8J^epnK&t&P4CP-TNmOQL*kd=>x05T30LNHwl2VBDDc3cLJ5#sM9$U)x +gv#A5O)b8alyK#VD~g(2*i30{#NeEMFyKmnvk-tM-Aihf=GiWKw18V91Fyw(dQ>mXk@H(A|cH3%nZ|8 +=}SztsWFSh2tDSoW^!%ea)qYmERrcaip2Uhk;YAbd>gH6E|655^ErNU!Vnu2W{5S1rCHb1(Od;&V7k~ +uA$Fv3{zQoMvJ87dvq&&8%aaurMNYA>W<-%&EV&uUZ3sy$l6xb$E95Q+Q|rmKIg3jz{wZUPLMdddY2g +BT6-1qW*@ +wb`W6mp|N$WX|wk=%}vTLb9gB}BzHEsESZWukznn4^EJd|u#9SjaT=P>LV%eO&zhVe+UKD(1w!^07~m +o;azOK5iP#Y9#`RHFwYKtzYr)nK@PCJTi9f3{USvX&ca7B(Wh3S +Hwfd~USFPucWQ;nTG2l%X+C+8>;!UeO>zZt>`#cKfu`nk}b3d573u9R2S@%wBjajGeq2EjV_Xqxak^g +?re=qRg^Zd7EPuh%Gey6sv;0r!p!!$KiR+9((r(?v*rYA_^#X7e4jHmcclc7qeQHuPgkhZyErfR!1hR +XZ6_K=uY3+3cC`UW|M->#D`@7%ycY~~>_)C6DJMo1K!^xrQ0bA0}va{qeG|2M+l=<|Pr`)}3!m)$@W> +KHs;*(N4M{So}##XLC1OD)_~!c!f*8G*cXG49>lgfh|KJH>?(zuYGFdKPA-e&o8DN7=;VMlRXL^Q*>G ++Jq9iU{$d#-M{2 +Xx`5g?H$>&}%WkY{i~bq}vXH1>i?`QwAFB#!nY5kq5^XLm-$dDY#^mT=reHwLFy2X)QB2u(yK(wNoc9 +g>xBINh*4sAqwxI*^p>kstM#u3#GSPI3t*_{Gt;uBu{wXdWoT3##W&yJV_K%l2+0Dh6m-YI3VmzeLr6 +GGoR0fK`zd=L6kWd4fsbq_>|Zcq3qS@5p!#OKZmYF=CAHU +U)>C_Z1#3~g=jNPIs?GD2#nVzf3v-=S*O)zTW_apM>Z@rfDO|S%UG~#V!pE2yChS)0Q}@)&)vXBd95Z +|DWu9}GkGn&x9-Y~f6LjtY>am4nW*prPOeYX3PUwZK;%+r2Hj@tIDDvpaS(h&oGEi|bmC +%|Tx{=`dvKSBATTgsA6YnwI+Fo2d8UThALZNphS~nyVIRxZ6bx{~7NDvQvUp>ldqIcw}u+6LIoSI +93pXgl~Y^^@5d9+G5Iwh^{Uer=-Jvn9TkiLLT%GvcL@Rz!HxXH$N`AZQ9trJGC~(JnqG#REwv{M)FM;s?NGQp}BY* +LFaCEfcH%jTk8#QWOCh>ogA_zS)&l0?P+l&^ZceuuA +m82qXS|Gb2N>ujFA{L7LpuvU5QMcU(gU28L*H~5zqS!1k|gdXE8+KWW1B&~gi)R>)gt9i?16=7|e*uA +weD)+R~f27=VeC3`duJ2KHl+kCYExbHYj+RU(={o|v%*Ygc$KZfOg)*hMVRSKqOwt#o5@@$%q@JZ5@yd}j-o0#!pxP{%@k% +*ai>^?nH1tFiYsZt+( +_nRVOGdIM3|e&+)J2S$Q&iiw3V*}3A3KeEiS=lGM^UaSTZ*XGgrcSRG5d5xn7t_Q?~MwFsG1tn=q3KZ +{<;8wvu_XFq0~8WrHx!C3Cqj=aAVY%!|pqSeQwzu`*wn%gCH9%;jV@3-dZMrwH>#G7lBz&15zT^Fw6r +Cd^yOtQY2OWWHD`%7VcHxSSC#i{Ua`xV$G^9B|1JE(e558C)g`m+ekp2L#8_!toKOuP1`z5aC$k^mR#aj1!J!&Q`w5bK +>BBB+b$Fd}eN5r&A2~wa(1%zt?|ee!zxR!g`jz4r>IgkL3#C3{ChuuZvdRzE@ixyn^Zft3R^;WlcDo< +$0C1RN~g_Ca&)mdfjgKY^z!alyj`->S!76{&ZvOayzr8TWGQ7ndRN?a;wMPmn6Cj!aqXpxP4^>>bP1$yb*x{T-PE$)>MR;XZ4s+-OXWocNW +)r1!I(ZJdCkqjCBvE4LDlhyiWT#+J4ggTKqU|%kK-?QSw&sYi_mI6A^7S)LRV)Fkum?cUV3|v|AKXYa +vix`-c{n;UsmfVnr}VYp6vHPH +B(;}Y4rrG(_7U5!}E1sz2W5p$}`*erww;dXrP}c_)p4$r>&Q=;A!hg7QE`;E(?CWkOfaRt@jfJ@62x; +euX5#yO1P!wD5Uqg7U2p13&yT#K7B?15cv;wl$|4#Qh;l?~r>;RWxAwnhf|uLI(T~clp-QNq1=yHJiCa%|<^N@b^MU{^$+$Y_oP;zPJV9tm_UrapGRd3}GA=WCK&O5?&;7LZUqY +n!F=B&NJvFWb#KOfNF7FKRbuZ`E1Dx)(bMr5KIl<}T}!VR(7(M8oqN^tD*)ULmwzYYnWQWO%+Zv=P3h +Iwgn-A;*Ni%1}9pzS()|Ewp;h6B6i^8>B>fvV`AA_YWo9B4K4G@i{Y|NC5>EE%}DKOX-tmWpRL%R!`B +S)oHJhOREpkq}6*1X?2&2ORB%E6O!uPxukleCaF$BW=#n}Byk>+K}SJpw?`8;A7t1?B73L8OS}AbKk5 +^$he*u4>1?17o158mI*=dU%ibWW#gNZcwdpOA3O@G=m-7xr{4?Php1!8kOP>8Zg?xD(rGyYsddf?v5H +HsfAZh4Ofv)KUy8=^dOxIwGVf$39x@PfvF|0Pv9wlXvCVbul_~vs_V1sG>Y!TO +@?yi5GDFoKAlfmQXv$XW`L-Yp5&@V4G+Ps1vmQS0HHwqTy_ttIz#FF4n^U6cyk;FjeVy3zBhnpisyKDdl={8NF!g(MsQE&sdsoLY-F@4Y=?>6Dx{vaaqNZw>kmxpZiEi4`w^VrzmECoGr +5{?Jnj|FtNmm>^_XQ?3(UlnPC{y{xMecM>RMb0Gl18Z3s3hCHYEY|0_b=&UIw8@G(j;kaub!e(I5a)0 +C(^c(K1+gmhLu1ON1rk(p9xX!hkT;k*?ywjeO +h>p)w^Qx8+3WpB<0C-Lgtw>W2S3SmAWd=>iNcO*xuP%^Q&6^3C6ZnD8W|`Su6GhDChgh*5FR`%-V{%V~%%70%~|Xp87*VKpT8~(mTZDIcvrYBhB02N39@KJ6PZzfb1%2# +zBuC{UxO85^x@IrUK>SbTp}u6e#^ZOfYdC(3NN?rEW$ul(O~t}sY_h +|!K7e;s;pCo=@r)q4+dc%*$zDYey(&$_#+4Z=I}yYHM` +vPaOv<5pY%)B5kPlGGEe5)A7u-l7t~rE=_xgj%r0*!t#K-mhwQ-+M3A*!LZ2zEf-}y?VX$_qQD!+J*+ +h`I!C^dH)G3aoH$#aP+fw{>E3zz?Xd9RfJHaGo(2jKGG=B8;HnmCi_I5nYf(l`RH1)V$QHTa~xfkl({ +jujD&E)#wSpy`!gOmOwb?=V+a{3aQy&T`%Uuj`x62t!cQNny}6y+;NxJ*4Tda0+Ou|3PrAjDF_(OMHK +>Jvq9nr;VK8jkqsH8yB#^Bnt-J5JLenbG8Y*e~O^qpo7dS9C!}9?xnk<<4SK0#TsOwonRV8|Y_2 +Hvx%g=`yHr3L?3JILOp9{S=nkrUw&t@*VdaQfax~%wIp{aBopZVv*iwMi{X3&CncsQ@h$rd_ZR2OTgyn*+0S+q1I!7XI2$Nl_NdOZzEb9n}ci5AaZHRi72f{FAA(DS`1;fFv}9J=Ldu3VbuNJ+o{g*niJseW7r;O8Fj +Ltq9u&PnhkC@dGB$UP;bi)B2$J40Z3gFn9R6tAvg%eh*>Y +x=v(Vb6)MrnDY&5zxgyftTJ+);rq-9wbVyuTWcZ{f6Gg{juZiz>1J_WAXGe7OpYi#+Rac=EQuIl14(> +CAhISjTk|jtw5IMeY>1$_f@kjwoSU3D!&(~Ao4x@*s0<8M$Fxk*ZaELwQMN{sUIG%E3!nma8w#qgGNH +g|Y9`JL)&&$)cjDGH=PywX_jH^?+vcCnA!$mX9NI2*oWpB$SLQI4au}_X`Eu~D;*s*3oMY6H)*K~Xo} +&oVHl23#kzRSe(7NWrR;26P=ij2KH9HdO`Spy{j%OhSPaRkN{M&@xqmGb5uzHPR(YOl}hzl)zHAn6Lt +YC&{ig|BXYc@qvXp3h*7&P=Zf}7ym$wt+>26fxPyk+pjv--5DElh3-x0$E0*OoFZ19I8ejN*G8k{;xkhKKecv$cpb3G}xhvPjja4GQS* +wWxjzwR(>Uuie5wA|wmtAG`7)Zyy&guycH{kv;duj=q>Tz47@# +igH%!Pdm_5~Wa>`V3UbiaAl={_*1X6Q=3{<^m_*E@w6bcm^d)ncX*9M4)n5uWN=B?p6=u(@VgUl(5bS +|TZI}j0u$}#-hzV8mQCR#%)PcGGNGPr_Ln$-vJo$9?}<|t?|)zBI6{qo>bBPYXS4N_xF1B8%ZC|%F+I +KQLmKvOve(aY|TRRU&eRzw7?9N6Y(j+_J~qr;`@>28$TW2 +=qS>tqp*r`m6s#W@vAlMyYJs}DxwK!1XCGIS2$wT%QUQk +nEjX`+Z?eW$sA+~8kB&~$oy+v}YUalzzhWYlBrH^#HFfpJ3>Bm&?QFVUXQ=u!apw*&W1Pq`o#olc9r{ +^orfAH$-Y66Ym}?g6_#sknpqeh3w9q9qX693PH73v~P@_e1`}ciOA*_@m3N&FKysXuuvTB0=w1KfH2_ +SUGA3VcfP#*CNx1RH2T7_Z^%0NliDHE~+8$J8$8iUP&ja;(SOL`OL5-w!?7Q}Dr%T>vLYN(=nB-H&)U +UWm^&VtN(Wg`jC^TUv&{luC__uD2TRz`JDLq+gFn2eZzHjtPFXG~pb&wXh$kxAN@78+KO6M<$?JC|ed +zFqfOFdbX8<{grPR8oQ}!xL1y4>J}WM&)@wP&paQm&~5eDDcj3Vvwnn_pNOP7e1T`)`aG0ROWM=<)bTx#d35WA=X0~?W4b1=vz1O^*DFyQ`8FA?zB +rF^s%qsGf`^oE?*?n%a~V;Ry=X|{M;-Th-oheY9%z2G4=P&sgkxNSv&MSKV6EdqC};=fx*ySKCcnqi{ +a^n3Xru_>jORj@=PS<#;!cjjlGgptVyr~yqU9`4KN|_Cl1i8t#`DiP2bD)NX_BCDnGQP9nw8opw1yXq +T^wNbj4msoh1w4$!>0Y#)X`4Z+$E$H#}wM&Q?T>1(W^%2zi +2g@j8q#90%*r0)eIq((UUpz8@rq_E1UGuG-vWV*~+J^Fkx4e@8S&-uac!j4`pgK(IYDNj?Q3620&O2| +`GpO-IJ#%$w?EFFrySmOaNZr>H!N&agl3$W2$CLdAK18S^#<<6Hl(vo5!dx08{ImKv)AjECtpC^@E5$ +Glv=s^)^3Ryj0kO0XBtEZDK;k4CrDdX@DbODmXmUo7NT3#mB+ej~50~NqKf5q^20EzdYS?0vC$%_q@4 +-@|4v!1&kX|G=dh^kzme9ig5{A{lb04AK#Y%P^iJNAPUBV2NYk2{j!xZB?raYcS{hjJ6$QoPp +9dq?YkNzD{>D2xF%uh89|LQ*O=~mF`Xi7^+LrsIB;$F`5NY@hDHsJaGj`EFM+~IYCl6kF^aG|lR>iqA +Rt$Mh3zJ-?8^!2eyT^?}mqngP9srwBZT$f0awYD{ttkhaV1$}Q2^@jAAhy)CkR@#ToJCs!&Uk~=x>wy +*wZz>`!^_XG1+{C=$VBX7oaaR-3$@8|7`J$+Gpl}xXcZR=>y0b&pnr@wxc{fWRXs?-28v)!zxzS^_TW1^o +kq$+`Ppf#(a&RDljV6$jk!9ON!c-X$=Kj +`5KgH4I^*DtGQnE$edE%QFh;=UE1eUljggNM0xBM-o>gho4Rv3XdCR+f!?>24VuRt!Xue`kW! +!*+vbTh)gV_S%jD`!q8yVOt>?bUNUbe3C>FoOz2h?se>+CYE4}j6e%W=sNfq)P{yl{2EV_#BD~h%ze1 +zH-LK)tpjMzZF``Wojr30N|lGC4$Qb}LZWS!?LrSO#Kf@$@f4YvTgjZ~R&ie{5=8gE6Xo^XujNO#roU +Fc`8qFVrHlcQ!1T64X{vtNyQhwGQ5j@&&$xuwu|8RCLM(zDT_N-Uw>_61s;Akh!`o+lQ3doofnT)$;8 +*!IIY{Zp~FkFahQl&p&LzNZW`vKIG@P9=; +|5ynbZSfvDbZt)+gLAOFgb$GLRIFQa +mw)U;uL&2?jB@bz*szPG63B>}wOt^I6Io*jb9so7BdAEq4#_#=@r4ul7c1{t@J_ODVThz2^?$Cs@1&) +4AhuwF6l#W5GlO6{udWZK%n1SC%en{r&|bze>v+<_Ug&8Tg~~-;dH4kU&0ti4!{xIb4O&*J8WDEw&q| +DFpP32G`c}c7DJWSP`m9)x1k%6#b&sW5AmV_$({m>Y0_s?>m2HlGu4L(S_%RD*8lX*ltPLsWN`I&eBX +8A-j;!S0wK`sGWVb4*kK?1zLxzJOLx!QSNDbOSx|x&*6KXz?4K6j$f^~5u;{7e-IQ{K%ab9wiqhyZT1 +(iI#<_q;(H`aoqiiynBC%ygzT3=cAE@@xooW;t4;bb8J4$6Z@UL& +KZD;Uy?d>@htizyf19+}v7@7ZXLr+m(ns=r_enR7QqS&|_et-LGF0+vM%%L|_!kU|J*#pZPo6H7ewmI>7`E^Ab=>}ImCJR231#lCEXDX3CQ<^gRf +jQ4`D~(ZIyBr`Gh4@%YSt?=XL2S5TRr=|u~+EA?7vVbq`mTfb0lUJjex7b7W!w9?I(xQyy5`u1gDwB_ +nn>5G_Mc-dLeJAR!ui<gGM`gx=n +9?ZCTPpePG->FkTS0Se7x97JBlO$s2C|NRgl7DRYBq<}?;-xq{>Bypzkl$`3@c6JtujFoRhajOD?d!a +DyugNQW>RC@KxZ(n$jQna=F+1ao^LPiPCoYC@8@+nhq#csaz}enm9gX7#A=7Xx={z#qy#foYuHrh!C( +97$F)luPnxyoMa4$ChOT5qp3O*G6rLC>zqqg4tID|>ucWdKSGO!|r=%)YCNbA23_*^HmC1~>$b`wwkF +1*D&u{l>k)b^hp+zQ4QBSv1u41PsrEMCmUcDD~$bG(t@=Z9xPYK6JI8(yK60VT&*Ao6o!W|MeNT^5{HBdmKgeekQC7dl`zJ$dRu99$*gbzvhq=dU +AY>@Cn2|t(cTM5}9SzZ$MmvFd*X%gNbVUC2iOSnnGKS@|C;c*E+myk*R_mr@|gh>*PlQ2udUr1Oi;aU +kllu&z$WckdNux!BP{vAE1uOmfnjK$joROSizezkyYpJy9|`@z)q{o8xogMXM$kcLYe-i9tZ)^I`irI +$D@WreP6XGxyDw3M+Wtd!-k66R!f{0(RMtccN7LrG>GPp?73Jp3Uzo5g0bNo*KPk!fl65o`?0Viq3_v +)BzRgQc^n%*S;*Zib^6-%?jKi70GL_B1pMMz5m%%*)m?wAOi`5Kb+n9-mYA?)m +(3!+W;g4K~A&d!Bxe#&*a{wCgmf+Wo+!CEOo?;eE#HD=hR={yC;b9jeN2M_3;)gJvTe!V=+H1Z-Dx?o +mz1^U>tb&)jx7Rm^Fm8kEON$H{4NUKZ2LX|f@1Ab{L>rp6ZPxLa<}{OJso&v%JOmgd<3UUIQOWn{yXYNTfQav@}beB@vprc7j2pxYqSGIzhVR;cvOJgZoc?&bYcIVq|3rFJYxDof^hW#AbMO))yh{<@iCAuqqrH}-war$ +H8ouOzg8l^@tDTi`$`fVH5;iJ1trV}Me*_!*qvc(K)a;UC(Y{NhKlO@Bd9AcxQJ4JjUtXVxD#Dn@Da` +k)I~|P^ZSh_E6Zn?MUa*k2L?_3d@9QIO?Jyk;|36cIE>9_+^FOyuE;RhD?UZ<3!t2Qp-rp|fV-xiRb| +240E$O(uCi#`$&!?9{h&oDTx`f+Z?b4g%SAIVqe=dF(A%upxw4D;w@VEB&1-y(zYZD`u1NK6W!N^B92 +X}FDyGD(OlYa$|0whekDCT2&X>a^q*h8hgT-vpmNzxuA?U;{od$hDWq`ix@8>PLgwAY>&_E>4pmi8VR +Vbb1HS~s=`dz^+(+Iwl~pA+^z(!NgG`)cW(6?UVRp0xLq_MC5py-eeWv@h4vllI#+`lS7$w6=UB?5ea +MlXe?#`%XSDq4@@t#cV#tX}w-LOTeEIC4KpfG7F}Kh)K0XP!Z-=Zo~N>=KCmX!oG-yTq5Ti0t4Z@mDh +k}_`ROTYnzJ2*UI~G{MnabyUxciEB>y73%Ql@nX`EE<=;>~XA*x#pUZOj$GCeUcTbcqC<8v5XP8mgeE +7_~mlE?%>VdT922i!M9rvkn4yC!y0CdRtiGN5FZ;5U`hS8JB`@iKrJejheWWMkYKHDvlb{j8;JhWx;O +hVX&d=A%IJ^~NTYFb@Iel+?udNn#Vx-@z;Iz)QQeROE)Yw2p~5T0B8fV;-g+!uUoR@x>8?-%EvR*Xv1S9!*V==|F*> +Z{6t~NMs+dCDr2_i*_SM|`zpi@B}*@}Pt9|ckadRL;nF-z?nUlW5S!^P;`lP%#k}B64rd{ifi2gW=PP +IXLZ>^|>0?-CZZWqaT}q4a6K=vu_y`x`FDG1thvHKlHY3;NcIM}DJd>P-(geONb~{UbHt@@yUu^etnC +TWaTS+l@oZ*%**F|_JKEGsgwOhT42)4jZ1BG-BkabUXOPe?OOOgCF5O}1uaPRX*}Fg1JH^cgc}&7L#&#+&BNzxfvn +a&i~u<=YDuEiSy})}kfFC63#ir7ri4cr}9sK-SFpc^Y{DNS(f +>}-2QX(+nVpTF8p#i-&4M3ZAE3(oxfaHz238-=B~Rp-gEDLn|}4{-)#Qv@9y97z=OYk=;25H@aSWYKe +6?XfBN&2fBEa*wmtRqGtWNv{PrC?UwHAQzrVbzwr=;Hy|3)sUw`1$*ABk^#-WD8N8UX8*4ytKd-wQz? +|<;&M~xq!_~hiNPd`(dKKGtJ^Tn6VUw!?}x8I#T*K+>C_ZNS-r2dx&gpND>pEV%-Pv`%CI{kn9fZVbF +{|f%o_sVd;_Rt&lAV2%B+t}%fP`#i1t~U0&+t@d@vES3ies3H5eQoS?g{Z&%xi)tCj81FfTD;U04&9{6YFmby%NuEM4E>=K9D;d2*m0v)pfbM7 +Mh#F8=*a~5XK7OdiE2Y5JE7g_kDX9!<)&@RZ;!d~nyDuS^S{p)C*9@vR>3Wy4_SS-Qxj84M(ivk)`vg +d~A*|kYYbFxD)Tp4+G^*M`k@L)mgD8r*i2o}QhdOd9s=vj!ylTPL3cb2ayM*@L&mfyLyyjyTEQmCq`L +O~}bm1mc)L+BxcQ?lojBR&$z&L-`K#v$eF$`OkpnZ=72>-8aJ4#zTw;|l!r#pMRP^j#(%b~l(hYUJ?z +BDpYY<r`~v+E?38&VrBFgIp}vj+1g-xkW~c(^=v)78V<`a^1ywi|rI|p}?1 +0SY*#Px=M^C4tufDUS`j8yK)y6X)DQD#bhD>0u-n*x7e8LK)`&&p;ZP7dU%^~PJ3>?vA|if1Th4f0sU +yLYyt2a~CEv3+4K9E%Ez?bjIx7L|60 +XW8OHm%Y@Hn`bxX7P#zADZl13X5}j;iAY +8W7uu(5|`bGvTuW?J)*~fx0l!b1$?jH$*yPfS?e>?FBySTtlnX-9Jng>9%$c&pzNAEMZSZdc=g&qVEuW7ukp{lf`K5(R97Xm8MY7+VpI=z&n!jvJ@^DA~LiRHr +!X4dJ&${MEu&&ABtm||`Lu75Z<7A51yPnvGF+1MoMiKrNm{QT$USX_ +PzJc{h?#y~QW1FvP?AFkwHj3k<^tz(I?bn~Nu#Y8<9$~D9E0Xm94LxRtvmVK?J7a2l42vAycdvoPxjM +7%`H`S6f*D4IIXg85H3VRAjm^UtNb$phSQz5K$Ds??v2f&E*DZ{7OE$1>Bcqx-H%2ss)#@D~Ii0ejDX +qOo!v&ZhinR2s$Ml#6jkfXxQq+KcP0|+4^A*DLrG@zcLrO>@V^)p+*f16g+G9a`Ea-@xF7m4j(y<`W6 +5Xv6>z1zvJt0Jo56@plGWOEQRy;pO8Fsq4l%VSc2A``Z}wL)S94@?!yY5dkbh7tM6W2xiQWX2zLVccN^K&R)$u8)F-;s_o{`^@J`-h +*a_Tj`wcMi(s29kO0r@dZZ>8t!35<2YeBypdPmkfDtatui);oC*>#cj4b*_zYgv)Yn43>Ee31A_*`+0 +od8>442F1-06EC%_H85vz0eWjbPj8i8uwjA&C8Xu^fCbs7PJp6u`B+D8wx_cPvAL?LoBuqMWVmlklYcL|Y(S%1w-In%9a +eTJ}Sl|BMBU72>Ut{<*y0|d(DN)EP`WDpVxO;gn`E;GP*)D+H^(gaD)_o=*^3i={SBK +VL>UxE;UXR2ycWsPrFw{mmB67l$!Vo)}@S-1xLq8ffvU{^A4TCTL4J9a7VA-nC)GM6za>b&}bVr-Hiu +KZUVImH2QT+uT)LU8G!g4e`hh11Fxm)q{ND60tlOJb&bz9iwy`3nRh9Ir3pnuJm{p)nlFY5}`wa?e0& +#OQmBXK?j`()U^(rE35{tIoO+ssJxV-c*|z3AVlUC#_dyAI{;TJ+<tJ+en*_lB5So<8zp0B)W>uXB1{=L9XF0sU@|nIWL +16Sa?8(O2UIu2_VP9r@#Z)K#0%jyARSQM&jr7N6XM#edziIkxethHkZ89ML&Z*}UFQ*Xq3(i!>ZhZ9( +6FH$vu9t4A8_(FbYX8{Qb&5KK@8J46A3m`rw>Dr-J7Yn|Dud(23Ecgl@I +z%1JM;*MW-8xtw@Z)tl19g67tzVrU6V3)E-xfGfR}k19K4aXEY*)P>zJ7YvWu^grKxfv)$w!tP +9}lSA%6Uc{<{5FQ-{=!WnL07I;q?+P^4kshr7>L8{gBo<5AUx~-!SI%$oJK^Mva~?4l!nE!2078|Gv9 +3!eZWo^f2FP^ly)mhZ#%8>yY7}rMO2J+o;9wpiO;(FoWOpYg1I;Q714bY3|Y()gW>nmVH^o2t}N}5v;E(n)S_(LS605` +nJwZvwK_{$p*PDvO)RZvq8xh*dX1vtkqZG*cc+m2aKUR`m}C4Tj?xsGh;dZTHV&cZR^*p!{IG5v3(q~+v&toT}w?LJSVr%HL1ioqp)~UkzHb1f{?{_Ct|0U6qlA1+0$LlA`6!Gm^EF+Or@ +oTi;5+NnI)|RuzcMlPL|x+M4F#cnv}itl6<@G1boi`xY|nc-9`3Eg+=xoa+grpCjzI@&S1NFD-5)`i( +G{hm%HpUOXd{j+tU~4I@zye9)01k61tUe&v4~i!9UuY)Cb6YY`#H?(hHFL;imk2C#UB6z^szoe91RpN +F@&YWn5r#veV2gw-D_T`E-_ER8p$hrdX!mV9C;Uem#uJYr1_&$x@!l84i2i9A?qYa5?dxf&5;_L!hV^ +@?vH)tXXqR*%>@~pH>bD?C^h$PIM3(OA3o!py!9Uy$#2oP2pKFnN8^!i?62`Q!O?!N1&`gWnn&VqiDA*F)%CLhGcjhLeBOCP6u6_0JehY7j;swi(Me +B)#qNpYSa3`zfvu*@ +vXyH!%U|H>W^%r56`VR@;`zJxx+m`ZtGU}CjFGm7kX2fJJLGvqOcy)ViDwFqOHXj!7K056~Rvx9tu*h +KvB>yK_m$+}Ay6RL^sf&vs8olr#MbmThiK91WdmLF$k=Q;~%qjU~C&QqUm7nLJdgv*~=AWCOiK1`Y`PDG&JB=^I-MKPOBgC)nDh(x^SesMC1{X%qof<1v+p8ba_=YIM@zd +&+S8>yTgI6#-DgNRN8-Oxrd=f6moPfH#`qa!I%DsYw04r=%O%ZgBwQ=~E2Mv=#6$Y?=tRPU(*Cfd=TV +v76ViRVr0)&s|Bm!0y~PoJJoD#!+j97^=U*NEAC3R-#{ZAT|Nr$NRc8M7?1zP%#=i>wd!MKdAK`E8@c +Fls_TTb!e7I2fcYOHmf0pil<@5i09cc6XAFmS4*UI^RKoB3^9>oMAXYKN}{iOfn9|`#IV*;-EeIpk+O +IuaW;Z}sN`@``+7(2kf=8}ME5%MoFk=+PYcNsfzLUn1 +uBb?vPN!zg5~dOSn!#hlDv2S|v=9FkZr566z&vyd=|;@V{%`6+iy+eS`mP{y)Ww#)%!o4-)Ph^|HLfW +WA8-HBXT3w$qQN|9|EADS4EDHcy~@d0u_?iw{7o%2>pkx-mAikB*rEhs9v +LfO`_){diMg-a>A89SB44i|#-Tb2H$@9_X(ThG1E5^j&Z#xVE)VET1kL2@iqfz4qzGH7RoQ+8oU=_-UxUPUUn6D1sH2V`NB-__ZGq19e +@u`f*;%;0z5fM);++G$*9|K*8>imENGYuxIP1M;r=M#I~jtWlYpU_vfKgd@NPnwy@1v!0w=+uDIz?<- +)Et(qI3cK*@SyM;38>W4CuT8c|jN#pyvjGe*@s&8w5^*7p0lt$f?3y3#iLRKhPb#0<4+NSQgA10pFZ1 +@EiraW`-~i1>847#H|OMIaBb5pm{dJATGg6csJ7xv~w`7;+>B$1cR{zdI|1&z)vx?KL)b`7&TwuPrI4 +1oxc$E_9eis3uIpbSdCYYwy*&(HwW`InDcW;K3=quEWk|*8QXw*Lh$K@qMkep*ga3+p))I^^F&%HfWN +}K8EG{D_Q}Uw5qOM%f3c&T!dwgZrvikB`ANV_i)8<~n6UvRjJe=W_mNI;AYGW#01F%f|6;%|9U^=);O +0i|IO~^!Z*u`Z_@yY*M!+rWL|GGDP>ptqFgbv~sTOH%27I?#;CvtO +TWKb^*CX%{9KS)}Ndt7$h_*~{!rh|ZO9LFUk;WC23*gXuM4wFXBfJsFy8>8nFWMl?ivhjTd>Zh!`-Is +Ac=0~LD}s;Hy=*Yk{cPD=kT%Q&`#*qs33EK)><2_WsRZ2nfS|t-u-n6!%Oeay+rz@$0T}xT#znXjG(L +(rFcW<2QNfd~fXf~e<}$z?kI8-vaP3y)7vU=bd;Ssi8Rgpx@b*6eFU%_dFW^ms`6A%we+Atzp9Y-!H! +*e)T)0iR=L5d7O{CQbxbZ2B9dLgLaM9B!cbLloM?V7^U`_#C^^6>60S`YT>ex}h!e<5FiU3o0p+3QV9 +N^(yqU??WZm-1{3HKd9_{+jv(z-}Lkx{pHl|-4Bo9UKMVMFqrgdWBqRs25q%@U;nGZy-ICK!1_nC +T4tFli>3F3ofn-YLxlYowXrR%s?!C(Q(#q?yi2(-~hf6Qr}AL?=OqbSLPMW;)CHXK5z5SDOFx{Ns<1X +%6Jy2QfV@@67nOwQ~AKxK4ad^9vWk#GVQ(r*+p3K#GTERZjj2AQv}5w?T^*3|Hm!?J!B#7LSfgK3dyx +7kfxoy3pF1X+=2Vn4%~Ni;9lQ>`>_t(m3G`|pQ{D#`g<`(fq5sTFnRMP%vW`-_Sj#eo#<@hgWn>TM}PdxDi+qrWmtF5hN@4WL4yL9Oilb^QAd0<$Y$ri!xK3E>X4EvWYJH +)Mr)GsfVM_gRCY{d!+@TGe2;vx0mIe71fT@TBbhzt9&Wn@H4ME6KEm +(4^<c+tG38(^n{oX*lx^gBunhsu_4C +fzjLI>|^ylOeq;SIzag4ckzuS)eiO4jwCs^`hc$;@W6u^BUFu-k9H{jxf~apOkzr$7CPJ^SplypF&9_ +S@{#sZ+js?x5oVm}5D%Z4aT6xWjRW`h3AIwtCl>y9#bCVXIL@1-n#r^)BxM)P!4CfAQUd=V4g=;Hi14 +`hCI51E*%qnzgGSEBViW3vSK4ZK|q1w?JK0J$To=Sqs=|^$)wAn??9`-bMIVtLm9^=e99ki|@d^t#4m +7Dx|N<0_DqoEL4rB=l2`nioiH#pWo|#N0mXVRcc{gp^G&XzoYVR5t&0m8Bn5*_7idoA!~)O7YG*p|W|Os +VuKiWeZQMY|WZAth&0I-E+@9>^Hyp4g2kHf6KOP*}@)r=ppvlV~_Fj-L`ETd+xdCcwhF?OE0lE_iSTp +zf#$A%_@84l~>q-0|(gaufNU?A3n^E9zDvAA3x4M_}~Nf<*8%r&97DV@y8$YdePL>#J>IVbN0!3l{Gg +vvvcRp@w!4!KqAHmtfxtaRFCyc80t+p8hd9nV58cFjaNsodFnK_T)mBLR_|fYsZX(^>S3)vW!(_JKjJ +4L{&>XCLi`&Me-YxBsnKjb;%`CxzaoAu;vYf$lYa3BA$}U---P%s#J>yi|A_dz5&tmaA4B{P5&sj!Z$ +kVp5&x`T{KP?6UzkwWu{PgGYt_3LJA`#g^By$9BhgGfHiD@iOk?WF+nDIeDpufn8c{YE=;{1@#iD{?TG&y +#D5;~kNU-Domn>PjyBtmZDa{(wqw{K)cj_a!PMxRm^#A2)MC +>n4`N%5!WZ&H5iL&e2x`Z6RuC=gjzgxwwt;d`K{hak3mCZgO<_u+kzy9^F+5Pw5&mMT-0rv325 +3@%feU#4?o_XdOJ|BGHg%|i-;jP*y*!`GqY{Oh(@7}%ajW^!lbAyv7K4K?MoM0zUo@8FHmz_R+ntlD% +mwayU-FM%yAAb0O-E&T5Pr-ipd%u1*u^$FH`oMyAxiJp|-Es_ccVnP?oJFh8vJvXbY?@lnZd2c6_o(l +)r_@szznlHyccx8i#K&N}aVX-CLHsnt&qVxrh<_X6{}S;ZK>Vi>{{Z5*j&uK+r~GH0@_%)nqUmYx*|T +Rqf<3q*_nxr>6B85Zj>w+Io;_oG_PeHUROilpP|tewA2M*@;DL$JQHHA{Vei>*z~I3M8y(d*F(EO5_3 +D4kki_0$iO~qqIWn?OuYLoEB!-6#=_4JC#v#`v>h%#r5a;SHog;h3cE2VuT(1uc4GxaD+FO-9FfOncd=aHL>_|VMSGU0f5)u;=27`X2e@#L{ +d_qFM1fIWMc<4-Jzkb}xRvQ=_N1Jeg^6hAwROc6l!qdV2zG8ofWc_n^5aW;bvp?g}L=Zapy}>fo|BmO +M*(4@<>BxUf-@bi`sq~V{zd@m)q3BuoRg|R8pRNEvPr=0oG>-qPoDgwSWJ9k4~pc7&mTQqRdmQ#6uz!#D{-`e^k~qFn +1X=XwU#a;#KFL88>#`ym=GG;DI^rop;{38|!Fw*REaaXP8ceufD48+__T)ed>-KJ2>5^PMuOe{q$3{p`k%NeE2XAM{zJmAor7q^ZTcsdTQn +N?b}yk%4VsksF><-ILvq5byqg#)kGVKvm|uy-hEVcb@fdnM~)=k#hT6LA%yoIrT?36zELrkxo5zD0i( +ggyFUN?bG5d%*2m{VhYqRlzWXkx6XnBcCv#(Cqx#-^?{PcjNqaHp;ShE1+poU*ss;7#d*D90X4c-edC^|b?0Zq>z +SrNK-hYPvJ$v?SKsokDov5Td?B2bb(@*u|`0?Ys3_kw&V{RuJsZF2_bNJ?)Z}OMg29*avDmQ976z8?q +UgPvr8KV9FzxK{GI;twmjOPJfP_{Up#A_+K0l|gpXYtm;oC2V{xfIJh`J#o|B;cAHzLPO=s$4afNb5mRg~wVF|*NO_8)%i-@o5XXy3PQpV5`7sw +(ps4A=nV4LyNJ(6;G&k)%&VV%`zCW4}oIy&|{n7HPLja +^d`~1|M@?&@QS|@(^Uug~L5B_n0$#M*!4U;U9VgLz`*oPC8C$Q80-aiHVK8FG(a*duzu=>Mh2{f +eQF%KzOT1u%506zO~*fFVM4;eTEgX|wb4=~r7k|ArfG=%{=sM9;7-p>QDUb;%d|&-?fV&cn{QNBmc+q +hR=4q_<+YOEFX&m&S}AbS|lj{$GCiMbyvKnqaWg;t0i)P&m$=J16hGyj)gI?juXa$H;TzVhs_4{#WGT +zll6}MC3j&eC+76%1o5i=lubF#wOjkBcRW1w*_=sEpDj)<7?2O*|l(lteX@it0#7o62-7wF)$L)JzVQik-S=LYP +BEHAE%Gw;okljsApFAcX{Tje9L@_+_jbd==b00^a;|>OFQsjYvf3`O1CdF|5){u6|(68}*LC20A!!<_ +9hkooLM`Q*J#5@)YuicqE=GB)2T&Q#?|q}699#<* +!mX!@}iR{pzm>2f2yuoHcSZfJvciv`<{y(h21ZsM!(ZHyh$BjshqurarbR7~zFWr`tKpPyBmG(R;?3d +VMqS;;+Q#;6`Lbwp2@lQl>Ve^hBOxMPfVPK;3({c7)x{3|_$&<$N2p$WRt2k5pu!N$AeWBe}|k^k3bM +ay=@uthO!n4%a|7tm)glsFg`I~eAHVN7?KIa)D{>?ye;?lKq{*rYD57^CCf(DIMXz=sh>FxRYEBkR_! +6XGH}-8`vJPk#IDH>rF+QFhO`Q?^Z045|w+DF(lz&)B5mtY}%D5iN_-V`M>EtjtY`lR1jv3B@p7F-%b +mjNlmKF9$>0ALv(EF!HZ*oe!2Lo_Ipa%E}C$#^A76IJf$}m*my_J7t$**s2(eJ}U-nlGW!TwMok|Vq{ +@@tURL_3KheXis7#+N7Ise8bYy2ajqESrSC%9f9SXJ-?eMk8=(REX3d&agCQ74eOP|`?Yw-sdx`8V=p +j32M9Nl2pVzzed8LD4se|EZm7~J3aWXqOfPrCR4E4`_buRzL_}{lYmySQebM?RTAAIn^K51!bZ$c~jh +z{iD<{Auc`D%zK9MP%Z94plLXpgTZ#z3E+a`ZW9)EoamKfLeNs~3EbwQJX!*o#`YzbkL=UDdGmIw?Ub8tx=Dr%86vAztrGllW@e^Lm@q*K3JQ!~fByOB#_kXcg~9^ +e_y%khu@Lbn`2Yibes^`2oc~qx4R3ahKHC^$v7^uPR2Leef7`Zg*J-TtXG?$Ewrx9&962&=#E22!sU0 +MJw*=jg{-k>PEUEi6#CD|n=7*~#u +(Xw7z2IACN0Ui5Aqw#zoMd|X5V+;ebbO1mG$|W_jla5abub4u;_b|lanK=6TjA57{HnA+CcL=mR=!^jZ1f*5|cB`uz6h6~uu{8zVfOJ9l2Nc=2LW2VreTmnAPRPvYa_<@)Qd +mz!_CSv0mbv_J>C;htcyGZ+gKnX=c$wjNkMOt$?sR{e7z#=t+Xo6mzsgeav}w~mKu`Ph=_8XTPd0o21N3+A-dz$B63pxH01S45!REc>V#L?TJ#=zJhQQ{QE +n+G@ueRjr)~#E2+OT26Tylsjp&!{~B1_bpc@4U#IcH^M8U5|iqld)C#!9<(?F=7ypL2q7gpw_*8}^7C +VGoci>@mEv^$n$oc3Wfn7lwYtUC^mhr*PfFeDrzy_U#4(`$OGO^}}FDOiYx%eft{OTDfwip`X2G&v^{ +p=mGYJ*NIJ$A7X9v03ARlxGpwWX}_S?$#2=RWvueOWY3;G)t*4lr+H)PXI*#vWA~Lwz6d?aThZ8pyNZ +oID8EJJ&By>giaoaH*m@#%ls(1%uV24jd_JG?fquW=oX1}4K2@u2dsKboWTpL8eQl;E(D!I;|Hi~`#6 +Q@7)yG1fqi-Cc1%9KmDyJrvNKH*OwpDfA_&00~@@?f1JwPwv3337tu*vRth{s$P9>EX%x#Hy)MzEXB8 +cBN%{cc%x%dlIvp$%Nf5V|mP=1ftWW&E^zK%1SMgPp+^F_0f}A||whYsHEc)EJAdx#pV7rM-rJ8~^Km +=Yzr8#ZWldZ)}kIZj&boiRZ|S?H{PkEN$Af=|4hy4gGGv=#F9Bu}ytEVHOn?ne)NL=fMWO$QHH}ES7eSPgh@|yk9~;w5 +Wa=`B(p)Z}YGEu-KZX?cc#0UV{&|CkM~4Mf4KrL4gI@b&V^rGxgH%uK(Cvsy?0&-xL4voW2|r+2Z*6> +#rNT%O0Sw$UF3-2P%&%uOjV+es}#-?La_$RXR2ay1r}OJm +F;WnKGFERL}S}A8UynkhTC+8YrJt{)K`H%8MRRQd|jPd?gu}Ky!(Sl%pSA;_w}s*Uuwg>y5?DTKi%GI +V(aHl%zr`WPik`ys@;5r3)3^D-$Jad=a* +qSe7`2_jt^Br21mNkRA{HPHNipcc{tJV{2%AasbUi(==ZgWAl6RT-GIyW>0L+L)_#Z^vec)6X^HRE8B +1~ROzDDI1wZdW_|a)55f05uqXJh<6nOwr8DA99kbA>0S-GZGUQmGZ`%K8pzmw%A8^Yf{UQ2{QF{Eawo +JCdr)d6~sBvz*`#uc#PYet#_@AwdQ%wzwdN4J4yFT+T#{zv%`fWxYs{*|?dOXM@Jt}&g^a%&PWlr5^* +T;`*zMnQ_%9Jtgez%QhITBm@a(kFsBK2JAi0<|2z0yA(5G0SWPLGCOA3Y}I@z(7D`(W26{&Dw8gZuB$ +!l-ci6W;7VJ@(XzV>0cB+B6`K@j>z!5j9O}<5nK2i_>4BH(`2Q&iYeE+-=sn$0d*5-mcAmVz +Sw@XD2ROwk#f9B;O}K2RF2^2OQt`CY!z?{VM9J>zvy53a7t-PS78rSD2U7vt|z%ZW~SS)-C_&)?<%7m +ZtW9jO`DQ7m(YrC)ghL;#Bp=^5!%BOrL=IbcIu2U+K~b`b=}2KG{@<28NMGU3aj~&wj40|298E4~hBR +eHM4`j(uvVXLRsYzv;2itIJm!a-CkIYg}UgSbxr(If>6d|9m{XA>wi9uz9t;ZxA}z3+xf^G3ej=9=oU +$q2$peYa#7FG4|xilhbC-oSDi#%$+;e*gfnnz7PA4EU+KQB5S*QPTwE>K#m_hq&g8Kk126Ay|Vh&$EQ +%|pr*?nlV7PW*3{C2dtsJ0@M7=$esc1w59Gw(4qcST2^ZyYY3@Ll59$B)`q$X?<*Hvo{=8g5^_TEapJoi1<{{?^Df7aIc;~2d}>c+i$_crxcXc#|!yxDi`f$fo48L%~ED-Y@?&Znf +Lj8a+7)EJ2`c9ZirlvA~0uXOL{jUGMvb$UG1=pTOgVSyL)*VHf9^b6Q`D~I+T5qnf$^{ejZ<9e+Xnx7 +x{1irG-&}e0A{9J?Bj{T;Viwsgrr>}v2xcdn30K33>(869|x3QVfxpU{vxt_-LD2)CW6ci*D7Z=CdoE +ttv!>CcC*kB4gSW|K(RB +}KKNWwQGxs&*S(nS3Di%nbnso17FRgYuZHYfo#T9~yqF_RYJK;X+0b`(-QV4eRgAZmcbj{{O?pQGKcpwMf{Np8V__WSV*e3J{TJ85cDz~ka`Qrky;czE+B7Y=*C08I< +iO^hWvC>7am7E;fk$=`*o7>yOI6r9)w)9ls8sy^SUgUn{edL{yns*Yz5K}=nc8fs{L%jIXv*XP*+~d1 +*ftn6=1ada^4?f|8>^-PkpSa7!Tf}?Bdc>NI^f^HfdfsS8ym(x9NAMWoASDue3I +CmxShO#+-XYEJ!XymUx=*HeObD6sfh=p@+<#VyEHd;a5v!{q%dx{h!No?v*!RDdqf)_WT_?c9>Yr- +j9RbCgy@4*i$zxJjR#1<)6=6{@Z(!xE6kr_3=mK30xbytiFG$`+V#)baNf{f?g4r@Y&RpIF~#d-@Rwg +o?7QJa+{aMwb1El>P$~P(|)G8Gq2x({uht=Oo}QVRG(0OKdB +P;;xxSK-G(JmLNgB~FBRM-cC23SrX3d-Kx9`f)Q~8&YeUq}2Qo>UB+bujXvv*qdxUoqY;bB?Hal`r7g +5APLCZ=R2g-1uVujAy4i?^?P^{Do>XpL%L16rR)wYU2j-7l_RT+g1p@4qJ@!Flle^Q-rq|GQ05`$$Q3 +$;pzlB`v%yy|cXYylcv~l$P06Us-I=akPXUsS%Pd`tPh@~ZOc^0Vdquw$i +OBdjQ*sHk*JX+`Ol(p{zdN-ImNN{^IQmxh%^=-IJ)em}j!P`yUFUL{YjGf%Hnq}Qs@tL@V3Rq7Rw=rv +DrRo}I~7QU9gFkc&AgfG$;>+9v~=S%Pn^^NwW`*M7FzD2$w-x^ksVcEM=J8(ZW!J*IZM>1*SZ^@6aWAK2mt$eR#UY87O)E`006(I000~S003}la4%nWWo~3|axY|Qb98KJVlQ`SWo2w +GaCz;0Yj@i?lIVB;3U+&PNhLC4yVH;L8E4l?oNnLE!^cj#XU6d`lmyv~C6b4vtSGzt-)}tt5FkNHcDm +=zJ$HDzV~GL^K%r2m7Yf_n&chvVoK2GS>cCr6)19C2&DQqTw)Z^CS4DDlU3tOtfw#ZA_ubC^?*6X#Ym +&w*?>zpL7&yU}nABWZF%8S#9_x$afcV{Qh-oJZ$c8)Kh+}5Nm)TRk3Ww^juR +luj*W`I@+1F#k&RuzXvbMZ*w3HA +iW{dAz-VDa4Lr0^YdTNL<|&4AAc*5h~Q&9z822L$N0-6%8LvDR;!_RC8~&CMu?dq%xXM|#Aj@|9MS|% +lEMiJYv!}Knr6jZ^;^!P>iQe_DV`-?#N=20Vd%Y2%SDbq>UYOQkri88NO-W&4iyE40RI)e3!*5E=dff +3TU*psDD);v1$JWF8$*u)n76zZsh0{d5ffNKQzZAes)_(eW$5|&Dqm?TOVVlP4-T+)Uc^`P_`pjuKrH +-D13h_t8l9dUzdZR1wB+Zxza?e>5g>(Xz#&i$U}%|C*Ma{jzKu7B_i5#T=N-Z?<5}Ww3MHXlmEyqh+Z +cY^`t|rMI)DF?U+MJ{(tOj$=r%3_-#|;6O|r@#Ao9|z@@fDFUT3GQR{RI$gVOgN(8x?=UmWaTZk_%W3 +KK$CzW2zexdpxFpNwHx1-6dPp8o>Bn|w&1c^_MEdt;RgfKM5f2oTw)pU& +HbQQfge)j%n-+-y%hH;*YbQ1Uz80$vhemi;hOLY3z*GI2jy?x#fbG|7|=;He~C(qx$IF8Ow{&wsSknW +%KfnFG(3jtea>iK^7DNE9T3J#1JvG6LfJu}~KZ7D_@ogG7kLeRbf{52?i-`@)U{q)c2{OQHtcP<|dws +!FAZTj@XoW;sU>LAuRDBTwc%qv;~bL>kUtSe +)IP1`1#TKvG?Ej9cbX$+jH0!wy4wa_59@Ro8PbVo3woX%ki_LH$S%;9TonE^5OP37k~dyd`K@J!bGW} +FJNCgdF86{_kijI-(LLv+sjAa{`ZITM}xtK@=*{z9Q?_EaQfGGzr1||)kpsJH@vp|#*e>Qzb<{^`dJy +4A}4P8*k`(`vWR3C+*;!KXcBwbftMLe(p^BWZ3a0+fPjsy@hmP&?==XBu+;|H=#v;%17mFi!%M0t3Q9 +4X8jA+MhOjN7><3#Fv<}Vv*ZkbrR4&1)c2czA(60+G=C&E0-16@tm0uJuo482<~Neu`#BY^3=!QXX14_aafu5bPG#m!~i?P-!uq +Iou1%v9f}i`k6vhut|u3Bni#G^Pslv{{I9F{|W2YZPcwYL&xQn*57@th+kP;*PHN^bdAeuF~1Vy2OR5 +dD+utvjN=x`w?Hn3CPhWB<7I-2b?;MM>ByM72>|0Rhny-3-q|$T?WDl2^o_WluE`yJ!SPI>#?|igi(Y +5L;?C$W0LSuJFJ2c7IK?Laba)J#K%miO~!lb?KzO3+RWqe4eDIjC{@5czhl;;>nyv0a*Bi0JmoiBFg8 +c|_S_G>DJw0Yr4Wk>JHQ<}&b- +e%m4}MLb7E2?QN+9xR1;NZDSLxwPP+Z|N08geX{$|jw8U;Ql04f2U0H`NUc@XJXc#9H5e$cXmTlj4<( +2aynAVdw=FitZ3Y5Z`VEoPI5I|C*7gI$L3cuV>QY@OCm`HJ6PkidFr{|G_^NoXmI-EaO@jIZg(I9)Y= +10{-9)*#6m3!#ziVNH-!mwff$}7UsyrY}q56$JO{ +cP?cNDX5L;Ys009@d3aT1u-PPISabfMRm>bF=?#85H!!K5ZSPDF+#Qb+eT#I+mW_()=@ml~4|Zd+2XaN`~yoG(Mj?VT%{8CLcjbA}JI`KC!G@J +~`&ryg|<*t_qn-SPOUHwWH>g0_Xe-brM*``2Dugrs;>;@?32(lMLn6gg*ydhokaZYKqPHN7dW#pOW7z +6|x=*3n(&WfE|*Nd;zbTq7>*8dT*!lwrw`!x*tmdDvv<&-A7y_sY1YeA?b{k%Ru2WQ)>6WditP3Ob?_ +80w!U?rg#_`Th=?A*`}Je9*mND69hpSSPLLqQ)WP*)9U_i~@|;MhSRX7uohCi}H3nG)j1p7ngvib*!( +ZHIww(mXnr_{h-`IYtD}P5A{@BtAVEUp#nbC$mz6qwjaXL5OFi~c&Hr&Bt8T8DVyYj%iCD+HQF@qw3u +#de5ztnVi8hMI(tyXSFQF@rsc_3ax#6hX$A}7K1 +ht~<7yba($(N~(P!@%?iC-=bG*;Qa1Yf2$D_q_}VY|$QPr~<(v}T)3v87WWA`J<=TIA5(izKarWI%*K +w6eTy=r-F*K-6{rET#80oostk(!?*iToMlVMc1m`?(|b!Hu~q5WA4!x8}Pd7n|05vj1zo7`4qJfY^mM +6N4+tZfVm6}{RtFZDbsV~WBJy-tvc +XC9(!#hwz`7B>^c(@GSoeW*bj-2v3PD+u7EB&UUknuk;=%V2P^vv;{ck9B +q5HFHRE_K+S?4XdmYcVv}Ej@jE6^qGQT ++`tgJuGx%5iZ3ARl@Am*@e){y}~B?o+o=G~4KIr%};&;kMzydc+kN(=En^@2vd;EwRRWAJ(Q>hr^;a+ +d7Sgrd5}?k$$0zwIm!YLVFW*hQcRg)R57UdOqbge^hbsjBsrBT?Qm041^$i@$4!qfYr{GQOMDr=B?aI +=61lquS8h|j$#}^6)uWd8Bawt`r(O4agz$T#2_p%>?a2@J@f$%MGpmjT#l2Ztr6?~3|stqiD5TU0rd; +ztm7}G`XHlqutUZa%0lRO1Ox^0>i}5kJiZYWbC$1$xXa8JXzZ-#El2G^x-A2>rxjvGRGG?598c03xbL(?s?CGu|BLVNLWy^#N8%K-i#xN%rYB;sB^1l){BPC;E4{rK3C(uu{3nv +0@*#MKSK2|wx*-IQ*x729VS1Hy6~rq!E2_rXk8pjs2LZnx(x%8C9bs3StuWR +*z4ad@)5FD2Z=^yy+;jDF8>rjSUIHKu(GxGfQHs(dwTaKYx4n!dNHNJ!>iGMUbmmG;Cf@5^jp7su9~( +rtxkKA|Dv!L>8&&3oP!Y^Sq0Uy5zhiEDssC82;_#6!!m@ua4dwzi>)_o014V9PkEgXSBEq{NIYK5}!^sNwB&bg1d{boEL4K5eF;+Q6AYwuDiK@CGn$^`gN_xYfE2d^c)X26WRqVN`$@W{uj)ENO&y1tNqC +o?xTr_teu#pf>b$`07;AH`3?bT#t7;{oA(pGAW3ASBoiZq}K@=lS>`M0X$+y1}N04k>YQFprJtEQzwD +^uSsn$@nbm#!Kf;mVSgBs1GOaR4#tL&@=3a|O>NR(&&VcBH{jM5dB6%A`PipAcC7xcwx}lH2RnU{w7vA +|aa+vevJ`l(r3WaZd4+lD}mETg&CP(SwebIWJpOUMfCUUb#pr3f!9soL1 +Pc$C`XxwibZ07k25Zr-b=k9<{OWDxewpFy~)qfSYZP#=2$HG(|7)7w6^<0GBQCR{>(q +XZY@TNfNpjL(=#O|VmiQ70Vd68y|tLu9GG71lkQd)nqmCDZfLR_b6w+)mw1Q+D2-cyXJaD4WE`P_QHZ>J68|92b1u@gd{OLoDs0d`ltDJV0$+GpGC^2s19gy +fw4+Qk9h#iu5t!6xN}nOoU)Q|AS+1Gx-NWaO=#0auYLO{oc6h*^|6O{@fEhUQ%jz$fQcIAeQLVXxl`| +c&dpD4bZC8LfOanjcU9wMC+?)hLszMOzfFEw4%@iLpzsyd}nx^4`5nN^{#D0Rwnnas(o5StF2XG8**5u%F990H7%C +#9X!&@a4N02r9XUQT~c$m~22GxDU5NNkmW7YG-m|848xNF9FIL6rHfDSa6zXH24w@9*KdXEmhy +e3lQ^%!B97AALFRdlbByXSnN>@e +owPIpi(7W9G6>q{!$FrJve{ddUsrXgHqO}>kbdagt19|c4#_%VjqF=pmMz0RO7o)1)rKOJ$|9u4m9!Q +CfX1l<(+KlI+HS~FL$YkFZCpgwu<|JK8aGLVovTxs9Dtn|z9p3RIDQ>ZdODli_TB;NFuFU&1Ji^+SdF +P)A$*u}riSMFSqc~&l^QRK0=hL@$?ua4xdT%JaY2ha{05{mD>D{V)pAWxZjVdF37Tyi)kT6B3Gpy^jl +FH7z;#vS<-y~}S5R;f9K^1t(6krN^um-=NFWPQJ%zam=;6t1hi9x<9+-He_#Xu_z||>dNru>LsT$o +0*t*eK*tj)L#dQ46KD;78Pkz(CV^^MI|L{i3z^9z8ON2fP;%$An1QBB5cNuxC;&-L7t^5hF=*OEh;)Z +!#3VMAVBjWjm~kQUI32H4F^&X}LJQElSw#axZky`UST2&;elA}XRqJ +-moC?A8_Z&_EvQ}uYNks$$Q&@7GP*daF~y2CKSrv^ypWp=**et!UXsL4uuCyk&5JwsmbTxN{e4}W|#2 +)B$G6KXBpVx$sJ_5mI6Ir!*IIPlRp1(O24Yuf(!F_Satnl*9}AYqSVDTOo}{`e6s1Rp=z47QdYid9rB +P$Zxg8_Msss7T8Ve&%(|Mpb@k2o9=ijdJQWa1TBXRL|1bHLs28eI!tW{Czgme=19_j<;GDw$+_NLeHN +iw66u&QWd1*cWpiG39MV*AavK(NbV53YeuIzhRE@0ONTwrj+k@>KW-YAM$m5SV*h{`VAwqZtLit0E{& +IEAX=ji1kn4SU2SOfYOvL8Sr4x_gVXk~Xh+*7u}-bJ(&=_-_pSE*8%L>Ws3w&dgxncctA +ZXln@Uh3z0MCuQ>wtU+wE4+p%2}~@IjRfiZ+!p$AB*KOD<~H)Asr)_5uIjkoIq}1hw^WG-DP>m2!@)t +iE=|A^)Cg9Sw%LRjpFeQg(AyTGA4}C7%HOFf`_X?tEeK@8@1p;@LpsKJP4hNE7-1X1<0_kvRg4*ePaX +5fD=j!;l(9YL{gG=2!x9YQv)Yhg0W86gA$KbET43Qm|7M-%dEKJm86m}h4Y&Uer`Bf01u+_D%gSr+M! +(r{cXgPbf;osf@l^m(lN{^iJ%ofF1$n8^(#ZipAEsM3n{G +D<9h{`V{o5IQkPJtgOT%f~lEmb3cPqp0VIn@L7laz|=16kEbOx5FkSVVP8@{_Y{cZ6aG6dmB!JUr9rI +G>@eZ37xqPp3PL`uHGsJk*>`gL5-Ma!D;O_Al9SR24yu?ug=(aOdM9-TmnbJERb)c~Vm7E|I{UPOjqP +vwT=%rEeH}J$>X@LKfB!Woach9Jb{K^Rad})sJ-tM(~j~_R(55Yc#AQ(AsflL(h(kbBtcrhPk2<_IIm +mx+IXVn=pLjr0FT^nlr7;P(YKKVlx?3p!U*!0?JdGt_=}-{of7)c;s|B*2$;>b#&ckfNWlf? +y-!lwH}DgFozB4K+JPN1j7#8JgPGniz{-Qs_a3vR_+hs7bGrk&*vVQCQD`wEHq8DVd=_6S3SKjHW|1i +tahz_D;waw!Qb{#{(}%<8(=?(I~0NYK8XNTpmi9ptGha9NEyI@321?@wnnWM+dDcapfAl<0yon`3wC^ +lVk#Ibf0=gnM!D*>~gsbK{Tqe90{ikQ&ByJC6bJ1;_>(2{q)_FC;R(hd0owCJpj)$FAPHvd(uTb14gC +B*B*cAU4isTM#wK#A2y41(JkGNCi-&rhBo#_xk@tL4O(;PU* +VW8V?As;}+Z8)8^qAAyR;Suz~yLeDua)J*T-zb4?-hs)*ZKzV~b}Kq}lWm$(#Cx4k73o;5PH +E`5TgJV)zPtc(_XP;Ljj8tG-?dSVsaI6C6G=j12dCl2H!W`@MeeH*syWxH+Ej`5I +hPC;IR`RD;_b);*EmI%T2k={iKbPgin={snnQTiYHb-|+ZokGnfEo}Q9pamcrDc@4_kB*LtwG^v3MDRxG5s0UVqtA7M6#`ad1sSP=TLPrw9=l&*7o0dS&#WhF+kL2SUDuqVCBjLtm0^7sEot-Oxw$r +T_;6ng)0dc-gFff^QsU+*^`X;@`!ea6`Cg~;afAa+tn-^#WTLuO25P%ny!g*ri)-zH>J=Vj4z--@63y +Dvt+`-)v%#sVDIMxGBe1~mF@lAy(hc2Mo)K%HJE~ZpH?s!QVfGnW7we|{K0yfz(CRNtCVb%t1GeS(yx +H>{pjB%%`kp!tkz=f|8tpP>(G{NL&Wi4-W|Weg!Sj<;kP@al+{_JjI2U;3{`ciJ9oB+Zj|WLx`oA3V% +#<;Ni&=Wy}8KTb(o_e?y!(l-lK{T?zrKl)m-FSE)0vWo@0o;ZfINRt-lStEK$Keh~W?A9E6wROS>+7a=lNgfs6xxnqi$7oJh +P;OdX-B}sx4;WmH9{}n+4|Lfz>JOjH|3VH-%J!-7*l$^&n2WBi1P{sgj9)kCLXBMm>eG6#ee)^n_G8_ +MM393Udh2KxA9*2-I#0`_Ow(o8S(~5N%FWx6r8FrczLYZ=&3e=O*9QlasXp$Na3+7QEe~Vi5tc+tT`i@L+qh& +qQ!^VhmY$FVP~i!L_ar>*3$6v<4k1q+o8-ZC#SwDj3uQIw`_gb)S^ze{~zFY_Nt!4H +JyUy=P?H6;DphICaUIF_eY~$Uc1%Klw$kRpf~Z1PXWsuNxpG$ny%=)fs1F}At$fYgi9sHx!raox>a>S +zz3QRc3r)p>aCmHnu22MNJ`h$ZSrTn>q;e}!VAd+1_C-$&8V*GB5JGzq|Ni_b%@vF)qt{hZ101d%-t|aTXN3R8N2$L47}Xziglhfq +sWnHZ?s;tLUSWtE#aZ9~sMKAKN&TTmq@2g2NOtCnp;;}RXA|`77Hm?$&0pq}UX$tNJpo~s0fbG7u`)y +3#AzS7llryS&vs5S?a<($E|1^>T$(dmwOlT!;)yxk~q^dG +q$zSA!BT}Fw!5en@+;C^x%%~PwWnS7=@G7TV2VU}6s!(@PR`6+Om&P8od1Bqr>3{ybbMofpTgu5OTXT +Wz1t-U&3beCR+r!t_s9}XevOFv0upx+ZHXfB?154WY=ZV)-V3llOU(v{>r`vC-B%aEG?RxU7-GXD!^$ +t}>`Q{$y9mq(ocy&*Q{HnVMGxKN>q`34G4PTu`cDBjKYRRHS6fIyYD39j+7A8m ++t}r9k2WkG?<0Oq-^3Xtycf(%q11|q-zAtm#}D>i0@eK+uqS+f+62>2exluhtXlm+GM(t;ki_6v5PCdg!1#s4rjd0d-26&uqKodD}euyeZ0N}ck8dYTEhX?s*_MTIc6t99Lap*dpDBI9c9q}i>Kj$G +RoqwY*%Z2_p0UrSuAt+w$hkO8T9=$O1dx`DPgRO)w%32tra(8?>Ig0WuPl5P?-h*Ta1PJ<9Lr*|yfsa +K(@CJl|v2*iZEpBKBFbdee{j&z!ul3@}Jn+Fo@7$K={4S_Lj`k(!gG-eq2}Wq#PD%4b%yfvR;|O~Jv_V#5es7F7Cu*L=#WFGP>YbCHL*B7m_`!$eqd^pWm>B=Un?J$85U>@9(YSe;g?KqVG&S;4jzi-LW?LL0>c +IO#D>;|;&)6p(6vAoUWTtNX0QvX3pMIcw1@p1%T(AVB5jl;U=cPNL!Jp4R{Sf`|WJ9>$^#KNe0O+nDv +Ecg7ZVnPH*t0u;gilfAi824b{zWIi`K9AGY3{=_AE!u&uX|BeeP=oPU43+A;NJp +{?{1X-e>W+mh9d#VmR5nbPEZ~w%W_TG7*$I&q?stl&3>U~U*dKb|_lcwTL++-MxUccO7iq^~R~UP<-+ +TN23?1L!-P^rK-+%lk>HCxQeg6ZyQ+LJYZESMiy&Ov8``+CTznKpYZlL%RtGsDOOz1H$%Zb3ziFCZ;e +0=rbjGr{4N`~ge9Q8GW3Juns;u~WRF~Q1u62 ++yhogjF^Bw~3k`U-V!B4qODZ2j6)a1%mYd1vs~U9Qc`fg|ZVXz_a{J~v`_ehqBJ~C1@^WU{)p;Z5*Z4 +(k^~PKH=9*F0L8JPjOIt_$KTt~p1QY-O00;p4c~(;+?`QnO0000I0RR9g0001RX>c!Jc4cm4Z*nhWX> +)XJX<{#5Vqs%zaBp&SFJE72ZfSI1UoLQYC6B>Q12GIl@A-;R&JYB>@drI1@dqfIc)NzIQ^gL|{yi?e& +5S&w=NRKhud|V&^ea=vI{J>!!?rFsK`l$oqoVOL@?g>@tbKsRXh?3DO6by#6vA05|8kw4mX=k0)5}<= +6yq-L26=gU#)A5mzLs2mu6f%9rO0N%LTQ=u)iph_Xe82$iIO9KQH000080Q-4XQ?H6IWzGQr0Luda03`qb0B~ +t=FJE?LZe(wAFJx(RbZlv2FJEF|V{344a&#|kX>(&PaCv=G!EW0y487|shy;b5Eity9h5|XPK?VdE(x +FLD!yw2qooG`eL!!6%?!#Rr5l!+vJwC}(SiD<+w3RZ4J7}q1e2N)1Wm8z$rgQ3WB*<4Yxc%_)7 +WPMkZyg=2ft{`Ck8lWIY-=h(%9w?Y%!c?$&*zO-U_fPwW$6ZW@J~o+5?uGo-SVtae +>p+=G{Z>^gG)OJHN8e-X*2u{1i-2HEogxCPPm%9DW1I`EIfo^D&!mt?FaCftQ(LO)^EG>rsK8JI1lBrJuErzcg|-6C@u{4EQfkOY9= +!XMr1a7ZgEJhGjJh;_YpHzo#qNWDNH)I;)ElW{e04Djf0(O&Q*eqW*IWMEq{*GUZg0mj3;4aU!OnYXR +pk>SR7@$&5WlMNvV(QD|tR~1Gov!Nf$*ExuWk={oeIuo*>BVpTFBVVk{~X0dS$J*50V$?KN +OY%XM$RXAZo)kb>f@aU0dp{x;Konj<`wpOQDAv-sNg*A;a#!6P)h>@6aWAK +2mt$eR#V0~2Gda-003)b001Wd003}la4%nWWo~3|axY|Qb98KJVlQ7}VPk7>Z*p`mb7*yRX>2ZVdDT2 +?ZyU*x-}Ngx6bueG^u*R37I$9g4vyDGj3jHrkL+Fqff|xcYNFu`GY`x3-v0NiXFq0!lGX`uh(6dPr@O +kUy53zqr{?iDkIkxD=jHa9>DtZX|G-~PPEStFi)w$U^X+wOk{2^`_T=fA`EYH`+e3R@mF9i5X>YUInp +agIK45Os +s>#42SA1ef_^ergW>W1F=no4VS;<8+_3*G3*>%Lc#dxJ|js+ST<*TOXd +C82F<(tEwn0h3rygVC?Dq6wkX>igTZF0-}m{iB?-vu42INGw{M%%1+*kd)tJdx_?y`Q?|Ia3KT0{QmHZ*#DSXm +OqOrm08}3j}V2%*(;3Z?e2-2m`P6Kf?Z0w+$hon*IZDH_-ENh|~48-IzeflTA~v=4P{Q+PNugxoxk{p +MLwz(O$Wqr?11eW1;;`mssxYQ +AzrJI?{?)ea>QdcYI$YO{mOXm&KG>li6mb%a=<}iw2fQz`7EMO;%&e~M>V|>FeJ +NG)>!w0cwa;8NHO>W1TCmHL_E1A^T +>D@Gv*z#XH%NIG#C2l@{TQRS`b4Z7TsC0DId0Drv~k-*;OzbCB6WfD^OLGSo;|iHyTam*@1;k?gPUB? +Z@j31Ei{JW#2;!+Wa@rS*>nt+W=^P8b`f-t)lFp*N6XxRqu5!1#s6)JY}?F^Q8-S(Ly+ +(Dro-hz-T+kkjVY7)f|~%tFSBuQ16GeQYJ4J5i~<9yua8KKU`cs)hf32rG>lhbRGEuM)Eh#+u)pbGniGDaTaNi_D!?6*=OCKAEicBoZhOvy>GSQ@yoq+ +Pvg=W0xH;j>&vxC<6l>QEQ(!Fer&F@>(T~M*OYHMW^+bCAbT;73^3}LY?k8!l5>Ms?Y8vyQeNl`s05! +>SJ@j)c0ck$xJ|j!>IuyfFY#56@YBl8~gXpmXPQ}e7`NK<>RJ +36ckO+AeuqzpueR>z~F$o6y2KLZlkQDV5^Tl$4|(TCSW6vS}*8#Of@fk3$-$Sjct<%&MXX^`hIQNV2reiD&w8buBLeRS?K+TMG+f3 +i4(p9-DMSSaj6Y&2aa4-B?t%@$cpjf>ewEXw`Fl&9^4uPf!9HS2Uh2HohoINzv{##SIUG)3i-+@$9lw +C;-6zHa1JaM+Me|qCJPbDM~iHBOwLQm0fqe@2TY%t}km=2e-@IbCKN`-)86-FbF;2y@X72 +6K8bv9Wmso~MKY(XbVP&;NkJjbUhs7U=4=<1a>f^%1_U@21lpy^AC+4iTr$z_ARHJx+jL6+hwh9R3s5 +O_6}xH(#6wkQk_sKwFfSU|U(DNu^ouCO&SkN+#Sb3FWgjvEnLc}H^XZG;HEfK}N$(Y2^9!^K@=GoU1} +CAdX-<0Zcp0)X?P94xYIyK4)ZizO129>?t-xaJy5Gp;zabb2+iQIR&7vdSNLJ$&}dTg`vW?<3{2BpA{E*KL}G519hUG}mNt=>7IANU%G$u@X24i$5-O8Wum` +Dl;Lm%piF(UGh+Kr9Yvh2)Ad}Gn9e23=Jrp;#TTwdNpM)M$(mp@|ORsGvEz)F) +LmDnLpRp!$r2;)GRXfMm3QUOZ#t}~1Vi55k-|aB`i(vXNPy@hT?AKp(Z0kAHsoCur?4f6T@W@EGzHf%Sf^R{G8ro8lqLT7P?AOQiG?`znff~(0iSh5^-`X)hD;>3-K1W{OE-2qR&@bDa; +lR$k-soXut$6yRA8W`t7&>Ib2>1Lo#{6r-dkAq8oAw8s@Q+F{2VxM}^uL|GCItytA=A=Qa*8$Q +F{LKnu)uRo!Sj-z$hjA*Mud5jRJ|Phw|C2RyS!32~}%oQOL@#!XigVWkv1(sDF|nn;i;&*VsG;&mj%`kah8nbADFZa; +m;}gytt+Ai+Ini98~6Lne9Gz^YZIJ@Zy*i9Mx#34vrTP5BRTLbGCbXdZQ9osW=p;66mrh4!9XS}ZnHy +!Z7`h5XANr4ZVxDzt=3q?=%X&7fCe@qI&2*jf$3XKcsWIG>|PH}Y4e74?$9mb5U?B+1_Ub~&{Sn5M_N +U-;(jt9DsQw4qse!9k=2@)^@DjT_P^og-I`Y6TcFMIxd00W&N{xkVva9L5#72)#Pg%S6I?Pag +y9%zb@$uXva~EN|+6$-4bp^*n!jJf0EU4fN=Q|*CW&A*7MRoKtL9Gr;H0iLuunCL3 +B|e)GTI$+q%;nkR0dc~-uS=-&naAyMfWJ8kSh`hia5#;p2KDXO%+upvD;-yjeC|__|i1x5n$r6UT=1v +(iPTTZgE3#qSUBxt-NVE+i=k?-$CSnAqX$MEvlx0XUMOfqX(`R3qAu`%dz%72PXF&@Uu4lXw8mVCzs+ +XvFQMX$buYEc`0CVZ|>gKSX`8(g*-%79zd(pXrSNZVLOJ`VPBF9NF7!X79;08J!VMOtYF3h7VT^JzON +F~N6oY+<9O)qV2xYjfVz0(u^3}4^X=h@+s9%F&yMZifFKEg#CUmALUdur4QOU#iw*sd_WL$MuICE|(e{GRDjbINFt3&e2w)qpU!EJ~v@c4c8J$e!`|1)fsA%t5+#lp$4;!$Ug-A2mtrDU +IO7^2msri?g4-pi~taiwWh=HtZo@ZKq>Y(Zu4~#R6@u#NhR38vpLt^@k?EGdkVqQASH0Er4r5?7u)s2 +d%=d9(gva}=RoHUUgBdNk?cR(Lr=8bBnLC!xD%zZ0;!6t$c?8>#}D#28-o{IOIDvT)yE8wJ<3X`zgrs +IIw+)S46>)C`7end>?6Ae@H=~JR%8lBo>+6fMl>O@R0cQ}Y%VaTb66WWlfr!;(Ewe0eurPDCn!F^qQg +5YZ{XFw98c(??WpoJ$W;aN=A?z`4=ONVg_*wpRs)ch8>p29dF*)e=yblNol1nmKvJ;ds*bvuD>j_ObJ +DVe0(FU+z@y8LqHS~pawT8|N8<69h6r(pd>2>aapJjLyqJ_Bxlna)|H&2;(;4cDOyz#$q7c)$?Vinwb +(=r4*_yO`3RPcH!!d_0@Ff#EvQsFa3D9zuOca+AZ808HD~8AOwGlw~4GU4`K6U~>8Bt^ToA~neGxPJ4UnVKfOB9s$ZE6F)Wc*I%K; +)(cC;svCloH&@3au0B>m$4{5W);Wl +4EC!IA~;ZXKvAC5hVwnGGI2wClA0g#But<0RiooRi?58_%>jo^MPbh81=1xf7LJC;!(% +ARE^n^EfwZ?4! +qf>>60m9vVzCaUJH}7ZL2BJ-Lhb|!pwkGup7=all0bKZX99Xd?HUyuCu?XL#uS+OJ?nXjiQM3^In}lF +HXc|r#DK0}U@npmvD^)Gvmlf#uaIubWO-^Q@Ss{zVz*T^c2d<-W>OIk?qw-jsIgBxbxXaD +HEAE=4C_wo-caJYkhX>lsCV;imQi1?JHM;s7`4Uq1){=F +8^mrfXr;vmY;@ks;!X!#zdUXhO@x0~;oKDa(ZBXmGn!Hi*#COJ_o%{yfNff4z5cnmO9U^tJoLML4u6> +$Uq%rK`zUp6ZAlvEs9n2kk8?{<$(H{cFC*-j5^(Ik~-Kb^jLx5a$ly>$i*VU%vX&bI4}`jPOrRHTaxE +w4#~2e2aQ+LGo_1;>K;pND(kRy>oNNdxEIW=`|5Ano*4`uC*#kq?^MQC}F5CVv-pjIpghdS?&ljY=3@ +r1pIyC)BlUaDG;8?*jk9qSkx8!s>SnnFaGfQFE1Cb-n{$s^AGPaZ{^a$_6sIM&rA~4VCLo`33D~hac7 +rvE?i8p=#bTq$w$oQQuTNkBu-=r6n`9p#gNQBu*iE}(#>aIrEz5k2aMBm2Ta5nfZC@h_o|DZ15bFU-eJBtyPP?V_djd%dhplhdWXGuocanX{DnBnp<*8Yj+ycPHE}C +6w$t!6Am6+shl{RhUb1q>6fH$69$b#Z$4eWK%l+@VkjfMRlZz0e67HB3M{U?%7Ev3U)!>=yMG?;#w9) +xZ*SC5MZVrDq?4^=5#R&URqqot;nk!c@@s4{nhs$}S<|ZNT&q-TncdZ&wQd+yF?Vt;2y17%|_@a87mj +MIfp6MP&JfV*c2KL}N^zqF6=KO5z_;DOfnZ@l-;11x&MJRY$4I0=}97M)+Oc{G7hE)3K`!>Skm9;I7E +G118!5cur3{IuCuBsNp6|n{yy~tOe-3?89knVleAw*zR__Y_?ltMgAyRur#++kWbW^3{=f1aCNUUq1) +4np8#x){EZi%YJo{+*ffa|blGaL){#JZ+3rA|_nKpO8yr6~zpjqKk=Qs;r#$TSOuoL@uYo7}vLuZ2AW +n-UIcfn<1PuJgyns>5=YCScVQc!xtn$V$Q9Yh(`b-qykeQD#q +JQ{uznDOy0d(iKR1W7nCbq0cM^II{NXeEGvk9C4J@utBMY5f}WY9nQ@&(?O?Z6QIs&dM#4z@ox|wXWfVYhMWPS%x0O2l;-_x +E{;7NjMX~iqfWAI&@*~2`vw7gwH(f=2jfr&r?|r!dv+S!6s7+Kk)}Sk%}^K)?x1bJs(;}eta2b<|9YJ +gQK3VyeVOudzOMZjP8-X>T5Ny;rTp73H^aJ#fx1c;Q81giD^#*g{0{%gt0fQY+W!>MLOX%O9B2s= +isK@Jbmi$Y17BIp +iaEX2K-=qt01Fq(BPs~;i=PDip35jpwrZ&513J@LadY|q2lk`J;{3O&4Cv +ln7dUlFsuirSB3$|1y84%`BlKO=Kd+4Nl@^@m#wO8ay!XwHJli1m9qM7IHP}Sk$Snk?GT}8%wpOWs3r +jJMr#LV`w5ut?;S3`zmjjHK^jP2MKrfGp5)#z5E1Ytrjmf$$pBjvuuKA*O?_5p##d%o#W+;ETT%HQ{! +Ye(o_2(kQ>{S~aOyDbXSz|HjzS5yrD3@2k@T*9o{*jX|^&k40$?2COU&gP)oa?J3#h8$r)+}rqI|V(r +$(sSa1DD_zojh{QU;ZGP;&+|Pi;N#O`9T9_pwHCU08cIOGuq#zch(|OKz%bl_zXv!$}2!*6RGRLvK=XgerDKDsdGo`*<_z3?)4%gc$IodmVQt3_?8Q5_M4?I@{ +F!(tDbL@#L3F8I#{T{*f-mK#I!QuiNpL#(=&rf`Pa_4id(G(A>HQJNyY?GTdc1?(LYVrx +ecYl>2ehK!t&Pwr}Y3&u?MT>nr?E-$M!y_3+Z)~XHW5dN=1UC)2&>VnbN8V_PzP_hB|F){>MbAFYayJ +JBeIoYiS5@mlO={rI#}(W|-S-q(YJD%hF`BW-}#U|0 +|Iwd^-X5oI%M}z%9@)~6rLLM!+&ebmEa=|8dlR(g{C`kO0|XQR000O8`*~JVZx#Tp_5lC +@ISK#(D*ylhaA|NaUv_0~WN&gWWNCABY-wUIUt(cnYjAIJbT4yxb7OCAW@%?GV`gXVRm+Z>KoGpoSB# +WvVx-)2$|+I~kv2J578;;|*5YY2J#36D=iAdf)*v2h*khE7<>~I~nkpCgSQ6tUEFGkHIjIl&E7=sY${ +CMjb%G9JPY!_(T0hYlG^N_-z@X#i#NHXqa<8fKeM^?a{SxWN4offCpE=apNF^nw@mv;g2J6vg4MdZCI +Q?QAny3K&s4aQzNmfOmD~6=MNl|OG`sjeEaxsJj#qCA;bWjbcOzAH=03WNwc+(#%b^+%?t_qAsH90Bv +#zS8deqsE@a+Ozxy92dqxC$Bj6CB#F!8JjVk5Sd!;9$)eZc6qgvR1~fkzu$s96?$8ob0u%!xwNY!y)J +7{7sdG@dKbaZ2^g|n<)ZD51&dCKbs7=CEUd}!K00fDuIE!FRbFPCc?BZ8Fykw_XPj5Is@p;}}cXaI7toOi;sp7?%?g8PUAEBMew0gkMaU@yWa*|L4zsV5bKV;3qNvfz(0DT$94{=aq{ogHvM69Tz2%wjKWevZ@9S*SaNc0dW(x2v +5O9_Viy8Apr)Z5yV$)d*Nyxi&38nT_!6d0{`r5Cd){R31}h&Kx6h^>rtH!F7f?$B1QY-O00;p4c~(>Y +dF!L89smI5XaE2z0001RX>c!Jc4cm4Z*nhWX>)XJX<{#5Vqs%zaBp&SFLQZwV{dL|X=g5QdEGs2d)qd +W-~B7FQu2^WBsy_iU(T)D$FZH(*Ch61xoP%nuR=+X#h4-BbLGcE)xQU%fzfJm~4F3X(2u_#%j` +AUL@{%dQ|DogVM(d9Ftf2Gy8oa=AmPOL5RbOnt;78XmUo@Ze`kMbe(3}bx0R^)fvYYaXWXhZ?6GTWlSvrIlL^~lXEe&YZ +FhD{h0O)mN*8rx&mjbG~2`5ia;d@4Jux8OYtNjsQ +P7FUmY&c0X!WhjBDE4#F5grwJ6Yz_SndEuWP|IE}gNI5|E!`mck%)5)9N@d2EOB8vcs0nzsx*x4WkgE +bxt1*zYF&t_r5rkwFrR@^a|KFlw#&t6=xB~Zka^MuWoVRFgm#0iRbBB5ZF3BdpsfMw(nzlQI?Vu%RK^ +7JwfR}2w!E~0@ntO-tKb~E<@VcZCKfMeOt4(laFj}Yi(vuPQ{^Bypl4e)IAdix@X(;J@q1NW}AC!|gM +l17Pd^&Kik14R1lcyImV_&kxb7f~_?`K-H5!`T%+2Vpq73NJaH7KyaUB*;Y;M}_YN-jKZ<08>|^CK3vCmS6lPm_gkYP +{WNzz_N3I|M(ur5h*7F=;74^LIL`tsKyPM-4g^M9I^1K{x=cmH{Cl3#Y7aa6Dxm!I!V}PHW}~zbnyOQ +9N=CpGG7c#%COGN9*Be{_-e+Xg +5jXI){N?*Tw>9Lps7-^EwZN^>)PAa +0o1Fiq3*DGG%I}T;MItMLFz<=IS1aD0ri3bJzJ*JFO7YYx{m4A;4)9k%zrs(?mzVd1S>4s+pQ#j)#D7 +uT&y{|G-i8YAnhay=So}D)p@KH+XkYX`qh@`^M={`O=i_HVL&Qu^6}tge0cN$Hp+V{0{WlFo{|lyEaC +}zDQDZSF3kRu@lQu5r`0I;kPXL>$%muK{*fAa@4%CTw}+n$Q#Jv+y)s^~lTy=Rnfb;R0L1KaB+NstW|*%R^;x6CPlWD`P#- +*snc`pC05TgO6%Vo#s^C+~6V}8$jS7d2$`)Y2pM@H#dNEvZ2w~$u!azt8`q!fo(`072xxLKZxIf_i)$ +gyY}y7>lMEv1yuJ9@R6Zu;HSa*H5|qMwiOGVNx0U)A5c2R#And`0&t=wOx%QKpl~+O +#8Ztx@~-$c&j-L{P2*`7}kh^SeW2%dB93YVBEm(N#h@7J&Jm8`H-{~c_KJ;5Q%1<0VfILr0U6=)MfdW +a#&?Q-7Ld`h10Ywn3swTz9QnyBXD&=^8#OGmt6D0=niyYQ;ljc{j0$U{Lb9j5Q`~Kk9qm!R|7R6TsTXwR0arZ6Iy-3 +$WVIN_g@1kiQ=64tj&{)9Jr}NVHu^5KZFJpe>Y#__0vVFj;Zk3ROQkg0AtJAg6> +|7k$lj~oBT?Le>rS4vM0J-;a99KE1Sy#?O3|CgTxQ439?4QgaAm}6r2SE4l+Et{p2rz* +G>i#2k3JQCzdOofMSgb9XBjxPf?&Zn*wB(@EZf3ZN2o_3BLp*56mFW=P;544J;JV)(d4mhPy%zj2J2aWS*t*Tx|!%mS|JNK+ZMMw*Mr*ZMeui|12E+V|Vo57wX>^qyL;-JRh8kXFKqJKX^7!Bu?Q +G0QAxU4FBC=+{Y;OIkeTklC-EF&=WFTWriY1GoBa(#}k=o+3_ +gR0`iVyEL-gKLaad5`hJN{m<$w>!w!{X@M8GG30NbY!h?wv7J(7&-c^ ++l{fK=2&KKlyeSH>v^q(FUyV+p8L!^;FVLoKe=_mFMa9wxS4YfP+`KKuOSiHFA#0=fmyfoDGB161Buw +iqi`nFOR%weP`DP$y;pNFmsJLNQz%(H4B_IL{I?4<8{Zt>i^>T~PvNUptbeG8rFHSTvFu_WFUvF%oDj +-r3Q>xVio(jzF4wAq_xUOV88Ft;gl?JWFGloI~G=I+@{#I1+`gHc^@PmBRm6^&=JunFr3V$D|pf10`B +a2bgLEQH&xBoHGStiXG-4psz!aQ-~9SLKC7uYeIo4mOyKlOIC+X)$nn~XAx}VEL3ixl!ryiWKd2*sn$ +z|45}-Jst$~Ie$5jFDkAUF=mIiX%5Ab%G+Lp;DNt4#HqIyJj``l++jqM^j`6hK?N?v-j*sPcwS6~B6w +)9_{A%!kea~JPCIxV{wufbuukPt~2P$H3MQc_%SgoXSAb6Mqw@dRE<%cP2?bas0t)v59G=!@DB&Kv|6 +YBz#%Q|A)Y(x(LmpgYtrXJus!DtXKz9McHKWI2=L%P@z3^i23aM&S3Ux@#`1jWp9MA11!BQKL1-Sc*N +^YzrghEXBaFmlK?TZC~;xeH0XG#Jf<`*y*M3S6w+gHMZ2J2rR0eC%lH7v$*y=FU3pK^$`SYWu=DlOve +hSOwMrxS9!lDN>$4;yCeRpHBzWE@5e)RFPLT{l&nwzYojZd)A1?KjP~K5iSZ!M-dO6t>B|g6leTr9r7r_ug32r3$vVdfvasof@{e9MZOJ5oFEuIL)g+ZTy{v%H!AK2HM%Z;t +G|GAZ~L|mj3*c42hqInDW8Fs81A(d;99B4QhmYMYs8J?Aar1Gq4xZ%Tm+|9aJ$GEy)bL9Ufc;tS6Q8& +XaX;%GNXG#((Po^raL9o9AhUVi+7J0C7X5A09mBVcZ(>h*Q4rbo&%9&zQ){JW62=A_J>V)S*H&tJU^7 +!=sTv|1bnZ{p%qDYY0}t@9M%bzV*yuRfQtTxDeVjQ~CGW&D7SP2+C{@z6;4fD~^VZ$_;mxEcvzPeIiH +TL{zYqN&`##r-AlnyVKN-FqFHVL4oU4S=VJK!UE(s7>i(bh0|yehnH5uRmEoJQ9ei@F2NvQqoYPPuwm1f3T2C)0(I>9LTn+-DZkCL125j^f6+V`GsVei1NQxuM#@4RHC +F;;90ltgsnk$JSIWOBr;T8Jm?5XI%IqI2AM$+_wfj%s(!1;O&W|9-)f1k4+^Ph?VLL+5C{c92pBk*Yy +);H^siV(EBYY~j8j7HDj;p@r8jji!S%5TTQ*a1xmOQBsS%IQ(pPGzZQ!uU)%71 +~h&H1cIbxf~Y`cb9>Jjn4+yC(V*d=uQ315(r6}{4t^M;j|V60$ihMD59BOTZMR}w3fo}@Xh|g_> +|CVi!-C+o5K(8z8F_`^gsNt_wJYdgX6z8x<^($k?cD@qE23r-OWAY`N5|H)xdAL*`P!_HFjm}ZQS<{P +dqb;_Sia8s=Ln0X$(8LdweM1w>+~Zk7oCVueId(cL-lUHY`g8H?7ETuP+-IMSrc(@ACn};PZK+i~;bi +_@WJ9{p{HV>rM^W`3T< +$iJ%c_!t|>hOKscgxHP@_&Xu`WS4~idk8q|J_ZXlKrFowLTC3nkn4kCMDyco0p_yg~1*e62yk{i*+Iv ++)u?9K}%(|y7JZ*{SvNP34tgfs!pt2^Lh5zjx3}yJylrB=i;UGbhrnVu~{4!uE(!Ahv->CG|#c%_2`u +Z}%qbHX-+Mc@4Zf|cvPH{Xs@aAs91Ov99z6y}O7|Avcyq>uwx0t;SG2jk`Xkc@DnxivFa-Ai-c)k||T~pEw9>-_**Q&?T*I +wV+^)x(6~s+=vESm8J!=#lXaSx6YC=@lMlnMtw>XE +mIvh}XKDRAEyJc!gQ*N0DY8CbRTUcNbEax31ZgUn`NDlN$~noISi-|QB-3Sh& +A&B3!KxM^R_sYPCd|1i)PwZda57%WI_N|ei((XtDO>238IW>?%TA+yFu_$?79SLq$L?#7hQd6e> +=knWdm0_^dzDXF8gFYKWvG2I!W@rFmEDlpv#h99S +UIlGxlA4p$Tb$OYsTfX*ax`bdprp#Ab7S*DihFb;6{jM1(x13x)fP +J-sQ^hG_X*gp5MXH-k8mCZkEq50rkaBAz|ghEQPXYE8l^fkTu@oY+QlbL7@d6AzFb0Wwt#4s#(J_ewj +q43c%JZBD_9A;l>R!XQC$7c)I-}S%zqth2Cr;nSK*g5H(+2)!v-8w_dD@&XS-C)hVUJG?IH{?QL$v+hrPk9r%^iKv-gG!c8y?4PWc9}=!2)}&{!xd{JIYd|J+ou;1m2&xw>O*{UMt8wB8+ +qK{QTzmxxfh-{Kv=`J^;Y0$cdf(jhz=4&mIAzg(?OnErSj}T?zHwSX(S;08my3C?k*N(s#i1fIB`bu$ +WF_OElyn_rxq)st(yj(I1XZ54I&;%i_8ag=3L}r!j*Qp5C$DETj5F;KENx)89Bnd>`3@oEaD*Q1OPb% +Dd1N&M>(w!%Mup83|>~&MAfFfJ6=?@I3m)AU@k@qcOC5viFlDrpHuyk(98ivd5ZjV0zZbP67gWPSuvV(frmyV-;smqi#kD5CFFUtH>41Uy5dOh%ogQo{`pm0p +q|q#(^*0%jV?+>|nmb7pMq*0$P*su9a~o%l;_UgG*>2A2lnPO43;EpL!2Dz@l=M0)rxEvr!AC%hx@m_ +1Pzflcys*~#D}N1gXd(Y!3q&1-D|r0<`PpATT11kfJ)aNRC`#Qf_1>RkoOw9Mt(D|{GwPpRi0l527s| +1{yIz_!*DytWZ?(BdSaCL>sB~(}9PbR=AC5<8`=5>@;${fmz)WLI|AqUncXwCO^`2$Y{rVsvJMgSd +!DUe&MTfNw>tUyQi%8v9=m_SY))E)J%P5H{h>WHYKq@1#tVWCk-m6$dvqp +p?B1I(aFn8agHnq?v31Hg0ESkv}ip*0=B*D_EUW0|oQ2S(BF@ +sI#5!+ef!)Eh`egOj|AlJb^jxUwDI_8gKM^*oyFWaNl)1QoH$97x4CG0riHzInZ6KMCV(88ZKeiv2_i +6GdXQ5p0b_nQWH2A>^Y_-~Xe-#zSs9te!7O8yaZZrYDkN^AWJE96V*b|V6zmK=2G&Y%=z>$ +d3fb-Jt;rVn)`v;KWBhXPerxk|$apaun4qH23F#2FCMs8E*H;?=8PK9~E5Sxg6DShl(2iFaH8Cn!@D^ +WMLWNowgp*~GRS#fqghdQX?8in7hb`Lj!-80OIX>PaCI}uz9Zc-JCCX9FVVOB7_Up9FNnT(smqw&QCefFvD2CeO9cocDth@s=OsD74p>;! +uxLCwFGzi>yP?tKO&;z?;6~oSAQ!qGvHi^j#nVZ|_DrhSE%0?Tg6@}**k30C05 +A%;r;7=)JjLV#EOs<907S1|Z#9UZMQf6j*!Xz&L=wyoO@d*)r(z_lbbWpB3ISb_(OwN`gH#x+i58knF +b(=W^!TQ?ZE#$ljmrec;Ts%1mTHA#yWop_P%b00j+ +L6|Z&!-I73OcbE37D(Zt!O~#DzB)&vK!;p%QgDOF_V +HWbC#7k2x%@bhvvb_hce?r1~FxAC($b%m1j)Hk@74y+hSmh9$aSdv-3!E|QgK?Z!9ZoxprJnze<#h$N{& +-3ii}PqqGG14MnRd(J_ZtZ0iC>b{n8Q5JA&6d*z$MXK$<_QnCYL4>r-#ymfA7wH7-gom;+49_{E!XtW +z!91N&IT4>X0KtltQ|KZ^A1f5e?^NTZi?T?Y_+XzOIR=-2BEuxSyv!FTKG7e-+MSt{wc{th$>en?05D +VW8n;Evm^Z{jb+;JHzDyuJ7I%^6r*4@mll8@XLQZgh!fz-qSNnOn|6VUBmE)0| +_z|r?$nCg-T6nN{q^(IRPUIp>xBUFj$(bE#_v)hz5Nt}eOLI#V +LhpO2dWDGh@Gc7+57Zk*d$O|Z-p)%CoZ_7m<3a0@=ZLlKXSSm=w_vi<%3BhZ8g&O4nR0yYtsbgVm^#>tioG?*A_v5Z#;YUYU9CUQ|EinW>Er)A_~WQl*+-clPb92B8@& +fjzANJ(sHN0(slF4$9o;Ix_U7F{SN>1C#0kKBiBMtjvA{h7~AUw3^JUL-oEY)Wx-s2=r>ZgvK$96X9rnxF5(K0tOsY6n6+}- +`|cisTvjg*|U=ic+vZexiA1_NL)m>CRaHn+e1v#}XfadDZ>lfmM4WAl%J_&i_S7U}G&in`Bx(eBR9Zg +d;=Ftyx`2Alq^?NW)euR1l^La$|%BV=nr1+dn2OFF4;!RRqr)8PuSrnyZ6kR1nGQN#wM +VwX1v>!#6MUq5Oei==!;$oJ-lPZs*IJ=D&Nm1q*z{tl{oMve@i{dDn0ESpRs;&TDnO{~nagkt+X%v@b +K1pK$98L4d@;b??xJn5IjuSNBt*)SK=Ul3FdeUArP2xFVm?2y!ajxM;H)(a1FDrlnJ*$dzf)M*yb~0a +15i3S5>pnio--%;y +Xv#m?|37})lC7_hkoj(Zi!AeP+Ao2&d9YXFS8gE%Xf%OV2=VBDzO6#gr7fCf1HBbikEl$yHC=kxpqdQ +Es_(-eDK?$KOdK!JFie@>{EOh!?bSI`T_3ulZmV~UV>YF7pAMt*)0Y?T4$cmvqx0y^+3DYoUL3xNItS+wJm~bJcSjdLoxZ(@pvc+5$;B_x>C5Qg +Y&eP%hH)n_E=h5j|boBbo@zLRnespy5{P^vQqmx%r^bG2roL)r7N3V}A0P@9YM9m7kqr-E +60WhQ2hiA`!f+q*hj*gEmet|K4d314tkl`Buj}D^f&B58l(et;*2kG>hNIC%juPEJpbPF| +itqld2#Pc8<4|49T-qv-H&@H;yH>EQU7+l~(2LZ{9EGQfR)`sSCjqgOv&0F0kbk6#?(^Jj;E@WHd=Lv +EWo{QUUf=ygAOaq#-!)gjkC1!#Z@7GXz|q?Bk;q*(<|Gg`YF8=X$)EQzNP6-UavDbgxIA_tBNBwk#{RTLMKtMqeH4zT#f#%S~zmJ(D4u=`Q +xKhBcRDgOKqcqeZn{J^`N!S{om4%CR3z!wUrfKN3a{dKvslRQFR+Vyy8535aqgJC7A_8%|c*B-Fq;c$ +CrcYF77H2iMw(eB>PFnX{93_9w*EYf}i&tE2ED%Oks1EEYlm+6$iAe5u&p0Qm-PoF-1`oseIn1TL1x` +vK#!=S)wnkU!eWib+pMM`tN=^=WjG-vA%WrUMwPO>@6Fq6sR^h +caj7ZK=NI`WrM_sqaZqWV!lLrPoPas8~*PF=R#Rdy#BxRK@My29B*fn-vRSz&F#4nze}@eep4cu0iOaYdNSCFia0HSah>E9K!kxzaK9t48&Y+|Eh6F +UN8N);I6sx?hbs1J^dGIZn83V4=($C%{LO0+>3W0~|NH%I8zs1sKqI^1MiZ#?E +iA$2sgc$AH?KBK-`MGE1;e{EbTcm_Gp2O;q|lHIOIqbz%(T0ybwHI$Co=iE0k+<64=|iL^d+F5==Pya +Xsu#Vi~CAnL>pRJ0GJTqKDQ*k4EEVIKR0Cj3OWb8)mBy1QDK?%R +pFaQj{OIq8Q1$U}H&AJwWV7lDciu&jPZHS4K?EAl^U0@jDddZUW2+1oW`qNB$K?DmK(25-i~1 +JIeJdWB3~(@$iR6MIMOVgM6+y3V}lYBh##;?9=&%f{`zGHJ{_~#A}`Y~X2p%;!;@DRKaEZfUL%&nogJ +@>*YTJ1dUaA%8Q{HfV3rTigH!zY*snlPhsk +xWqZo5H?3Nq|mk6dwhv5=pw%UL4geJ`Pr!ra+igUfgcHJbHPm3qSD-qf&91yDgwJq-%W_ss)R?N@vS_ +S@LM(3cwnp|GOGwBjypd$RiVLFRn9@&Jm)sfI~HQ9O1S{BBoXA^|MWt +4=Sy(JXeADY+aQb#qvT5k`#fwuS0G>kKY9P^SXZB|u0EURV;D=Re13Y2(&Na);eE%fe4Yc*0{?ZJ-FS +O`ad0*QDfjik1=MpFsnPE6`=?K%F0qfE$bQ6=blqVHYc*C<;myJOx`NL&-EMXl@fY3Li^G=(Z;vnP`g +QByzLn56`-f~NAipE5>UIHgM0EucvI1W&7bL~)ZJfV-^9FQ)!xtl*uXB`Zg!A;H1N}|dOMk;3r$|@`C +?vd6`;l6P!QyJQ^&{aW{YW@Nu(-R@`jNYkTC4HW>1_nYLWy1#$x>*F0H$v;)dBKs)bZMe#&5jt;2KDv +J`ZcRQhSC?qyr*r-TIx!B8UL&My2Rc(DWBse~eBJB3XeOL>!4A7sX1-9q^JlIy`E%NqFMaK)FG!0utf#<$Vcw7~tQOe)3>N2Nv)9(TiNx-FYcqZu +REaJIZ2gT&e=D@P8qRq);pYn0v_gv5eNDM-D2{p|3pM(dw6DxH{yXfL{)=W)d&)tLmIT?d}wIPL+a>i +5j~P18URHvavM9O)TokZ1}c`wo)mbv{kFWcj3u=Ywx)>U?zc@|gC;oqV{9Qen-CZ6O3p! +usQqJ9bG+D#C)mT&UpA6T2V_8zKT=L1158@R41x7B8?AFfA_SU|5Si21ww8TzF^~Mk!=tXgngjR7?vkzsX>azIgl +Y?C9c9Az+ncgN#x1@crR)-LzGd5lsGCCTOuS>b$BEfmsM5GAr`s0!r41?CdrmqKejtz&xx#MCzOxi0n +KHj|egVC}|+Fvl~W46*Umq8LmKt>wMeNO|ukjuj%h%QvZ5bps?rV0C^>@^=>Dtka=VNJ(WVrWroLUF^*oDt$EwgWP8Rxss>)^>9Gn5cPr6<+RHR6%WsybYhdoB; +WAq^EipIH(D0a(U4;1&4x5tb;NRNp8I!L!6%3a}Z*+?%4>B}^mc1cHNJb_jg(O>qX?ctu@{;7K(_7)$ +lo(!f*Lw^PTwA+9!Zp6F?F?NgF>IzRM=!K0W9de-9fIIX}j@E@T9fK66S}jr7a-jBspDJrx3N+9IL2; +hn3{(e8G*>|%Cs#$6SYfa3tG4*5589((C+^C8bmDT7rX(!U*;J>8XC<8-c=EKTD~d_(Z@9r4HaYbndt +r2x!3La8eSX3ZWhS3wxj9vM%CmmUNkrfTD&yw;MnFupd2jo;}zH?5ExGLki?L{ +AiJC#`A~+nBhs;3`B|jr+pD__iZgIG||?yswGv=k~`6)u%UhDp;8iyJ#Y%r67S*uP>C}^m$;U@RQ|E!gVxGXWO8dry7eQS)i +;S2eSiMPT`(M-QCAe++M2%vl9XB00l))qx<(GDdP}XNm|9do%?wwx@VT@M_I3@n4>J89*`SyI-k0sH8 +~IZi>a97BFmy5LDzr$q#1{LZPhEU+d;Jm#P1tiB_;u)%3?H&{oAo&ZAS0kzmML5)SO;}_$oB8RRR@W# +h=rBS9;0_EC=rGOkKgc#%3zr-;>o9O=NOoaJmLrQ4h<@>u?=hdkrLvf +h;O^SCI-A4=%CE>VW5@X)b)zRc*D^CWqH(W4RIehNkmKb>XJ7NV~~Fp|o&F- +<{NE@0`(!IEr)q%tdY4h9s;5JUw8A77<2kVBzYs9S?{72PBT8n}_F;f5`3nF%g{vhEB$v01b#C$kyxV +tjz}(sd|y_~_{~pi#i?!ybJ9i0j=c^6>E!Rb=@1$=>7P?#CX}&s|y>uWn@=Zbhin=~UltT}U`z+@jD6 +5>>Y>Ca@Wnl@crW@rcsg{T8?CAc6TZ*+Qgt1htWj)K7q;7yr?vs+X2@?%8M88=Ov{fwUmAVg+CASxI% +h{e6>vasQkm0=g~*6bHi8MX^k5ZU6&@e5jZVP-E&2pWGkr>^`#D0rJcokMAz+x>O&keX^cnUrDDTCg7 +q;zn{H*DMwjDVDb^RNYDAOs}E(bW7sW$-uGc~e7?@7T_xK~RfdZUU|h32u5Pe9r*l@_db|iv*c0S+P= +Y&^Ee5t+v;mTJ7GT2Sns#byr}y1*ZYqB%2I1Fc4*Dn`K@c6oZ;?TX2#&k$f!> +Ioz3iitpm5a=DmYdNR}zCj2rRmTH +NiZzU@bG`f;2;VPJ5n3Gt1C^MvK +fU-SLKP8G(gRPmi0lzhS_NYmbmYWCu@On|*nqZCZP5nr)j(`pV1^FRE6?S?@z?G`k2K?~!$zi?g>U&+B^s{(udAG^MtyxWp6LZjP43)6uh|lY_HgI*ukz=>2P-VRDgL<%V7jF3~kIXYaUf-9uEu +pFDZes|RB;&&z~H!e|02*3SW!QJ&;Y9ymOM?77+m*41U8suZgMum~v->^AFHTv6{&BW9@{eLbhQWJRO +1u96IXpjc1i1)AE%Np+JXnc|>;>c(gGQYjca_du1(O06c)Ll};9lB!CkCk>nRN-SDvZyw#B +`^ZEsI=&P(qGMGrrvn!E`I82Hh(i%g>4w~+j|*6nBtO{!#4 +?}}H6Q{7|U4gKNKdsF0JZoBf>?n{lPs)h%8>S@<7h*GcV$PhpKG_!Ql;YZ`-a1os* +r`@IlML_Wdv)q5XF>th!)SX%1cj)NAmzbUcdj14h~2W7!M7OnFI3B(d_rG56IVU0@aD}a{ +bn+8UMcf6>|f%{_v>*n0J_&wMTQxh9Q&Cy)u()Jk|vS2G9P!`yx?H2C%yG=v$zkhXC<7c?$+R>@rQi9 +drGQKoa1)vQ!-wj~^O*b0eB2bJ>TC{l$>Ec!%mR#7>WPaE&TI-D^OgYlt`wQ9A9xMs=k8Hh8-h(U*<> +Bnudvzh#Hx;n&M{pr>;DkM8$<29-El-Od2my?aci_r?AC`-i>lhqau)8J)d+KK%aiZdAs%B_6$8FUtxgs_5wabo=Sk$K +P)c^(oa$@<2CE#JxV5nDHTMTIK=<9TAFTF^|!khYwZP5XXVo-jREg*w#vQw#9-*m@3s6weN?vU1{}%3G~`T%k^qrUuVxcpUj1r0?4B6_r< +_#+V39K|V)|SPGluC5X2-aWO4d5MY2;o5x6IS-rE~bco@vMNsC1D8jm&FUzZLZ_O6GGqINGX`BytqhD +_U;)kz>XY7+eLLaWkl+3CTM0O72@VMm^u0?p0^N>1~1l2)J_PU5msmlMcV&! +C?N0O7ru0bZT&<8;TW`EmZG<{8)VZPc0P`6umB;W?p`YbLD?T8_wwu_l3h@<@ZMA>n;Af;0#X6CnLLP +eGM0KGFF-kYC1LWd&c|kACC5=r@t*$p6XFz!+9aV_>yOXyIXg{v|2>_CrMBZG3ug{xjP7aw(r)gMhyl +Fyyuh*h~2I96y+q;#*L33#wQmw>iR-QV3ScPTGWM3r+x7wZ6XmG)+tiDkT0mJBA@{8(Vu7e@Zf@4#a8 +j3jQJU6FYSv4aM_H+4?m};XCxicA$SnzMy|g}3gDpz43bX>sIRS-H`2&7MZbOV4vz +v1X<=!3Sa0Wdg1vzS7Tp!93UO$XG>V*f~fb({>E@r#1LbIibsYMNn;Bf*JwUUr4QG(eaT*!A`B^kuWeDGm5`XaBiGGNDeajrARr +7f_N4cQI(r6B~ky@DXXIfb=Pa7XQWZOTKs!XN!&a>Avd9K}{aq2cB>#Wx~ +`sD*F_x$(#8X5Qk-$`xKGZQ*WE1S;JRO{Z6T6FFlqDAC_7Ht*(y1&(1eYC00)AsBks88RT4zPmLs$;d +Rb^5M%^boAzR&1>o^N7#4kE`+njL1;2<tiGkZlMFHW~$1JD&H6AE;Di#u=LR$o_hd;FtMy#HvMbjVn&f0oh85`DDqI#9ec&<@LX-yStH_(; +~yW3nH|ViAK(mhLmdeMKysyB4>2>3Z0NU3`2O*q7HrG|W6#VNwif=r%N<;O@@A1PX*fG;Spa=GE!eVk +P`3ta`LbfS`V!o&iuk5ww^Ec7+^?YOTGs_Y0?~U5_0bf107%22!A^!%Z5xBy-|&qg`hD{bcV|)9)@W@ +$jBtL?AOlk^WNkg8QMc9175aLk!e*X@&_L}q_LIjkKnyZddYYLwaC}c6WkMq6Y|@6tC9I{_u +R&YKi;BdUKAI+7(*f-|Ua%#X#}MY>_oT>WGjz^pq3j5)D_?vMBLrhv2Y?7FcWZ&QJLhM{xahYi5tyS+ +5`pTB=W`*0`lD*7!Eyw6DGNcDT%Y=?LOsParGd3$)g? +xSY%uObUocgi!GzP7hpXUz|-&`F$54*%N1_<*06m#fRrRVv?<2P$Ph=iJX}mJZ3+v7<((|DlVw3Vl2} +LYV2DjQc&|A~_1={l7fA%pITVn94r;N=Eme-k6>8F5+kUg_*b!s4Sk(G?bAzoWJ;i-AC)#!fLlq1NV_ +fw*&ALoujX*pB#FX+_=%Q*rx`yU9>mqg^FNwo0fPeCZUX}ZLWqh!?)<+KrjtxS<+y3^%{6H}8Vu@VgT +vqc=;0MECIlb@KY}OD};c37;-q420b@8Jv%$m~${qtwa!3Rfqg(n-W63xZB_AqYq_y$gIO?LxJqGnVb +3tw<-1q4Q+y)QlVDRg^3_{zfafmg<~yry ++I8xo7eIMG=TiaAtiKa+ja8GR(V@%;q#q?I&KqCnnA89~#_z|tuyVN5Jy;B7WDC!8_qD`wZ6xP%#AbL +1xxb|~>me0=8);k$!6H~_%z!Kc7H)4D>j@T8y5ADU~E@|m3Erkv5?zU}y-OYB*tthUd>%6RjM;b&s&c +T&Avl6TYPjWd109&EwbKc;VS(VQ5yh=RG@D}%1I7@jUQjY$5YB*}a|7Fg_*`Q^^GVFer?hW+Ty|xBt) +DQDki%`tB&5Y23>T333;AREW^KE5M8hQ7sL$+Wg5gC*@!F8;0xOBV8fhExk;Fd?H??k;^mK14-f&fg1 +`a%;^5j}&kAiJ_f_wzJMOxoWb1}GnW`6N~amTw_@p>uOc*dIIFR<2+5Ij-`;B*jdvE>jPt(V=aeEu!f +CHBMOnMO(x?sTiaG$+cprc1%?|)>=lcxQ<*G^z*&*tD<@ +BMuMImy+G*2S_4*^>v=SbbyNr;JhH31)Oad41Y4Av<^_IUA7q13d%aOGKj^OyL2nzT%MxO(r4(}Tp*I +)YPx-FYEL_BjSD_L2XQ;IxBaIsOvCOxrS&K>uMCQ_t{*{_Y2#7BaLVSKX}&?dMwrPgC9uh(4UPtuD29 +PV%zT^re2l1-BRyd0b#9{xN!KfL&M)%(xs7eHlXap4;H28=a^WQgnMI{wn7&hGRK?b+NzgRq~!J@cdv +HWUTehSx5%>8!0ta9Bgo2=yWeZT;RHp1fEwQh>2;hnSMrhJ}5Tzn3+);sByf0z0nI5fs3DwKrtuSnu9 +|89^XOthOTJI2Di5Dk=QCUlg9CA}N3za?zmrIVp65TV)%Q`-2#ozb|_X?v?`7VQHmZo0@d+ID!r$#Al +c8$tS^Rxpf2>3t5I8CZJotKzrZi!>5Ft_#fXa?Ui4zr0-T2#7T9E4zGy&v+q9sJsB^s`9d=gZF46q5m3hw2wyRJeQPPU3I|RLA{v5&RgN{+ +hgS;R1P7BWzh3N1+iC9ognrh0Mq32b^MRKz*6`<&G37mAR892m|eK7&!E$^@x)DFnu;!J9hF +Xj~?mLEDq>|iKSfy2q1D&n{1*!RYd93E;$R8r0C>cQL&)dq0KLq71+TUY0WOY$+;~tf-G(jl$Xt_qr) +if7;63O=PP^2dDX6s!l(FFOmB(L4K6@0us9wp +6)3${w_Vj{UjsAw8N5_@wjrgni(Uw0N!8gQWH0tXS?5AugFi%MV7fSZmu2~6-2U6C#XE<_CH04yj7zsP9knkzJ6PAhSYtN +ovCpHsp&_)r7!?%-v2Op;_=U%DH!f&U<%qcPRN=SYdUBb7|>$ESC$+?{}A|LEU7N>R!k?3HwMG*#zeHydKG#8M}RV%FF^~v{bTZ^WH!)5?JoNI79Et#w0nc=nae%(CTIHd1GLTiHmx!8wiGO&wPEAs7c +!+zpKx6HY^?nwX?=y+u;s44grY$)kY}9ZIr^OC&N9a$1Cdra>;N8N)}69bn|qTr~oEi$c*n&*|>AW8| +q@@mj!u7NJGS88tf}`}QJLw`eGFDCiz@P$=+~4L)o+8_A4Vvu@IVh|t{WG-&giCliCin^PHaAjnCR4b +GWUott&Vk=vc;*gS3;8U4nYHAl|`7)VgpG@4&S6ziiDLWeWxwV+cQ#L=6qkyvUTwhpNn94166U%TGvP +ErM;b4KSXmiDU?cwlHgyh?Br-}dqR49($^>&}T0s)^2o!}rsd3rTTpO8a-`H>!-SQn*^i00Y>Y+tg-s +k(8C%{4OO~Am~|=iG;6Se3>NFSIJYS^YRulKn6I>y={z7nnefa&ySAugw#F5Rye}n75`BY@iU2MZhmU +pkE9$lh`85}x|Siw$V_M~zn*Vo>DD$M_2uC%ftxwDAbbwAAw>G4lmEp?pJY{%yNhqL6iXjcorY_S#u$8{fk7Ir8( +g!WCexyN$g-F;?%t$J=Vr2*b?6*#|3tc!0gcL&^AyJu!t6tw!i3UFhNxWfydZgZ#d7(SY0da9Hq0SYp +;$8Urz=!nMt=b5MF$jWMWy5MNwFSE&ttE724S$8CtfV^l)nfI1~M4ofTv|j3413=7fSVcR0HmXCIKis +fsV0K;0Cwd8)G`3(`M4ZyRD2-=H}Ws^5#`!W1pH~X!dlX_A8@$KavE`>q*FgI4EmwuC^pruYDb{j3NF +P*&)~uCA8yml4=EdGKUTry;*D1#gVphU9TmcNjIUz^+%TTZ}%ya;#133?g_X-BNm?KVi8POhHDPRAxS +KT$mNUTvIqTm25o4NTEjb@#8jA)kjxNw<50Ho0e#7*H` +`fxQ9xD7F=t_H2{4`=Vr_Mu&t}_eWZkcc7t?pb^GCyN0d*tb8qKK{_765$}mEC7YXXa$KSOC*=Xl=i} +)7gqiI+Ew#9-%eL;#@$@TbB9lA!FQ^C=AbUdKiGMX3Drjy_H++Z5Veq=;k(Bxv~;PS59D7+u+M|HRc5 +E<*BN|LVE8AYkrBHA=rJ4mu&@tp(buepJ^b`jheUDHj_CZN=X@X#8&bz^R0$>Zr7s{i?K$BdwDeVxHy +2Y>yqW9aoUa4*-|pzQzlIWxZ_9{o`~IBC{REOUHofTN(DWpp(yNPbSLeNL=GsiHwNFY*Zvaks~LctE`l8_ +32f$z$$a7_8(Bf~_kL(kcOt?&y?3qX|{le4Dh0Kfqj~5%&VA(_7o$xkxbQY3bXY8H($q{$|OM`0CMB{ +s8=ZoXpZJGm^ORpx6cg)h7C!cXo&VRQ;M63g}l3xKx3T$v1nPJvY8kf4R?M9xD>E#jw6vq|ncpgU&gL +m$B!+5uRJ2IJ758GMy(Sg_$nVzRMwXuj)MKyl#LTCs)Si>cir(*te;uW>5ZkrA<&lKi42kOTSg0xv*y +$U1Wp!lPcnmht%6G_}_zQYoGr8HQTa4&@Euk{?m5T0c*^qCA7vY0{1H^zw_+TF&@F+gu`x55H^p3LapduI-Q%-HpyX2er3nvZhh$#RqfOL8=%`N+&kwc3JF-w?$IH +fuweSM8*=7v3Ky?wgI;A=N(8L{TQI(Uq!ZDfWm@qvu~H*VDdE7aPXweC#wevMb2(4T-dXZW&8h->za< +l9rRAqI0S%N8$bGcT-vZ-(t4UIM_5ncmNiEUbb3Wxtl6LqLNG06T7aKN~nk3Y+B1tmrnq2`3F; +$4~NSG9#@}WmQUg)bP>Mz2W00A1xH56#JJnWh%GP2qX>cjN_@+?M)>3_ApR_;UA99@=CC-SjF4f1I7J +go1Tf4#9vkSX9uf2{b(0r57oL1^m+KiDKoRn44>=`cON-r#3@x5+I_S)eCPsF-l)3N!zY}E+bUJ7wpW +&`DZUd=)3Idd9zOo=qxIf!l~aQSW%hQV+^XSPI`wv+Jl@;=es#T>Tkret_8#tjzp|d;fvUy>s_i{|_} +xdppg5iCf)AmMM~{tywSiX9fY*DE8>qzKnx`Oi{p~yQHWGuN7DL#g2pkOLm0LE7OSVN*OxBUiV+^pE& +MEl?u(>PiD59Rb{pdjX38UbxsJqQW%b0j^^0E%jaQ}i{pd*F&wMtL&$z-`mfdf*Ib=m5c+0w|q$G)(W +L|uN8dn=TSm23--6inv1%fh_= +<*5JdZPaI1WIowBHTwy0V^rOJhRAZhi?X9e+4R01wAf9Nr`_Y$_@Ph}JwAom-sD@OvIEMO&I#OHO?;> +nT=XLlV6*8#2KAweTFflVEssz3Rt-uOWf8xil-om0hI +$0FrfQ7zCk&N4!noaYtRh@4raAsmsl2VzckjuQ;UK~c1m2|%v0&>fn>T2S;;VG{nw1weiSz{&FF +`U|;TSL&98|_a*urMC%S|d`5$b7fkX8tf?uiGU&6#R#S=&W|GM3bNjf6WfD&h4$*Mrlr(6 +8Rb}q0G9f1I*p^2jBjiv>XHnX$1J$>f(EY{t8gy;r;o!vLm5N=PWlQ9m^%_$}$yeF9 +G}XTA`+!A=SOpimp;>9411)(D(O$*zGM!hLHNavq^~|gHEmQx7XBsvkDJ)E +(;FMIKviwFK(ULb2LW0HRU&-xFQ*>PwS +kOF+ZgXo5PrV!M5kAFk;HNhsxA9zm3$1Hb>B*H4RDNjkX**TPFL3g5W!q0|29ve=*EWQ3%r7{FV+U=t +_b@#6Fc+xhJ}t8^U&pOs&B+h>S#k=Ci~`@iw#gW-H;x9Os;6BD%BKcFD9wKnTx|C5pXF)C3S)R+mA@r +H0WqIhrTVQzaG8#SoSJ1ir>fY%g~a*qV90+D8J-`4)_?Sq})xT@SK#ti^K;Wm+a%yI%O3#J!11*zbkDvj(_YxQyr-PI?XfDw*azW`5W8BnJ&ByE*260d(80n@vE;_$XADB)F-4FlIui3{3y!Q*e@ro$iM?L=PVA1q&U#t3%Jm +k5|E(AFm=u%_T0EYGp2~!uyzn5)KOsZbYb=MB3Lu~uw?d)>2rmpCP$BYNdou*{bFgF0xp^*<&ppuX$r +q(J$6RjUW26*+e?QIPqQi*oLf1|pcKMzP`=rvIG20;fWo_As@?|*+;(JMbKv>V92Hmfgi@#f1ATzdSA +>ZXS)RqSDb9*`iaF3!QIzQ-U;)#)ZW3jExzz!tm~m3GVqxQoe|ML-s4CcYV8h~z5X96RK%TdltjXTMDfkZ2DlmR*p%@qrSIx(2 +tqez#c2=~+QV_J8#DR86IYwjHg2mL0!Hl*_dq%7=xACb-j%6a|_GC|?mD<&uKsy5R-=Iw0q`BfJ)n1y +&f-$H9D#)XkM~BBR&i!SgsJHdi5wPw9*=kJO$S3WOKy +GIpH1WO*`9*bx973zLINfyN;%?^mwYoN3t82qx*X)A7i;mTJYeYBWRtraVmal`Aj#jc7Xkh`?FZa>U6Oj`; +g>v;Uo4FpyoF|;)WOUDSdN(nVqJ=fnS=~^qIj-LiMp$u&(w%RJDVQDjrhF^z|0?>+)DzqL-H1*1KhZj +z|zo!c^7nYX2uz7ZeO|$#$6FY1;eN-5Kz}|h~Yb9SCzVN}_JwFcUc6hhb@AN*d8UlXuVQ+8uV_(|)Fv +MSNLosY2^fe9<))|vw6S0dSh+|g9Zb?zz_=lVClr9l)`kd$oRpEZL> +jlK%v^;aOt^{4}1L;YX>C9xSchbps=>abNE+%xuVyTH}l{&371%ea*`B=yXfkQ{Y$&-Go8bsY2 +6f0Xu1;NFrmr!=D!X2sQ3rm$Pmf>~j&94Y_JW667H!rxk7bWdWl8j48e- +40Mqoc;~)dyPrh%UA`yp7WOE*Iznh1Yqg2%6FB%jKx#sTie|CG#hP*+8}M^x-4W^M0i4c6YuMPpz)J4 +euO*voDR6sZoUt;8*tzM^!x_tPHe7QC7;~+2O0VpcJxRU{ohVNK1XuHjEnRExoG2I=HM+vAn%rr{ei9 +ubqnX?9)0Gk57JfDo(D}LiPDiE~?}CS}i_1c3Zqm{n*W+nlF!Dp1Q+RJDW6AR(7KL$jh9Tb5lLrRUL+$7!%@1J7>Jag(nT5Z{XleJk-)gJ=*{D!W<*rfw$kwS6)cE_&XdmxUK<{|6#^wsI+zZK!&KNwQPptOhmk4{wSn28dW(YW)9o=Hxu~cJ^(kFF?n)8!x_D?FSMc2 +_-a2tAMadIDl5qv23W%-F1av{^V=iON6{g;6SAFQO8YR|4(8RZIWxnx%ST6&Rnlh4bCQZCRx!=KPK+> +W-mzdx5!=eD`ofI?Ht~@apkv!6Y!hL8>0mCi*NVf$vszB;R6391t3Ys4hN_Rc`TXe~S)Xhj;b})*XusEX=v~ok0CMx7%mfXlYA +SF!SDx|KP%klV`ku~874bY4O=9aM%R`G8#r_@18M%2ec#}qwWlBtz!7{01@u@4e_*MukcO{PhOnP4(> +SFA_RxP=0;n{Kxx`m)fnaKc@Y^H*^;H@!Kba|Jzbz0!@qG05F8qVObBZB^|Q@r|QT`0?(jf(pC>qsMc +}v(s^0(&U~o{;^+-n(_aj|kY?r7LM33iHHp&+gm#A;la||~0Jo!@9RqZ%3{sE{Cy~ +>$qX>6|IlGHzygIbbg1ja^OkCmy%^?WDi84nnR=?eg}Mni$L=%k^KR>&Eh#3S0*6C96AN}R%>995S|a +ItNL$=uA#E#J(e%cBe)-&wvAp{3|;Nn{Kc%VcDr@}^`0o-Oc163*bc@P6^&meI7^Ichv!Iq +=1&u%mND9)8KQ{iMa2b_h#``d*@kJ6Fq$FKw&tKY`9r&9qh&b-D*n?>M8fjns>xxsz!pGp_-cuE#Q>V +3Z~em~W!#}cchx!VMN49K$&yEQbq!L*>ryY{(m7;x5}u7P>Pg)K1G${XGwdtrHUj7hFV2sXB;(A{77+ +W~w884!^x4#zTHVB^O1`n8qB5yx`83fft^|w`Omz}Zu9RDxl+FDl$37-@%EMA$ivV>knbtGs8LYf5t_ +WIHX>f{C@*BFxBrWBbqXNh6_Pq0GcW(`CpRe(9x@a>JRmB+K(9!caxl}=~*qMq|L??NP`n1JvGP>j@5 +@osxlSr%4x8}emL$5U?o7=n>eQ?uP_0f8)WC};{}VfZwpX_HMDTKL^KkoeT3&h5Pvb& +oL^v~UKuEMx-I}jy>i(=t{?C$menUnMGHujh8dPG~SOTigDT69mu_e9)Zuf?DYEvsX1cfjAlZdP@->b +Zz~ummiB^^X4o^m}4=;X_YxJu7c*z1;t9z;1JQ2B}R^yPD$&T(J_-k3Hn67_Tp0qGqscB5BRAsDlR=2J(l +U14W|C4^^%`)7yGPtRU(K;--PKi$N|tPEK-EGveg!1uNKj#IXfcmXPOfw@*0ug$3$HEDjbZHI-@wG~sa*8V0j+`!L*uhQX@t4}(39|GKYdGH +3EEF(AP;NlUT1RC))>_?JT&6bGRuf-rbv_8e%=@Wl3bG{AFUIAat$gR%~gn>D*-jK5QV-HtRvSi2h`5 +FInkiEQfn%3GrqE0AI$=Sx?>SrH2-d!7=hy2K|tz-3&6%VzX4MOhp#Xwc4kUp7zN-VCOOeZV*78ni`l +EP;Jjr)(IrNON~zKDmVH0=Z)*E(XNittuZBu)y`<^io^J8uefGp_mgRzW=jAD{K_^6P?W6`k{S}J=3+Ze)M1Rf_8|5t#g2%}v#Xp{)mk2K^ry +5!OO6KQB$Yvyvu`sFuhR2kI +D#rHK%h{;ohH3}s~i7OwBJRZs4s8R3P1;5o5%%NsrKL# +;_hA02u4AfpzqdnlMJs{=WOB$iLjyr~S5*f-k`uP7c5C4xqlnD_ml*ezlF&w=s^caE?A6x`g=a%GKkq +X{JV4#SZEtUP>+n-yq@wJan4bw`{*Yiwy?dNl?XLEsbx +mwyzDl7c4pVL>TUvooc;@-q3`N~rh-5KdCIU=%g$3*jzE|S=85dG-q{{23Oc4wC`w9g +W&)#dPmBf;VxhqR&bLX(OOR`G7}((>oB3@{oa{=9MnvE3y&Jh5`LalC8j6x76>%3Vopo)U4URF^ +7Rk7~l6nwEISBT7Tl?S;vn59#;t`6j-(NunD}M}Ri!F@}q)G541R)rM_NKAWch4}~aVPZ071a_n=V&t +_C2bz`?~uJU=HbLI^ZX~&u*iY)Z)Qv@$k&VmWkb40UYuaD5gP-RAtL!lW&(+kg!bmxO|YtW*vrfun~3 +F@QOV=3vownN8^U#6_?Y?I0hJHUj*D_o!B2@A^WN9M3d#oEQW%V*?yIk?2+u^0~t83=*mSd)tigtS5Q +OTI+DW^;{cdU4KL8`;Y{rR=P^NogA&}$owJ4UjzQLWjfcP;i#;PyKELsJ%*a`1V! +?x&S64{ALwF8#k&HGqFKNU2zf9r^ZByksFGY&mJkIone$xGORKvwe_{5oUUH^d{c2i#?i=rvt1%h0rv +dG=`?=XsYKhf|*P9eHF +?$OeC-#k2Y=K|r_`PrE@PIL>5G$ji#6~M`uklt{8I@NtN9hOcA)kLXHS<+=7sCfVhn=KD7<792z}0n! +4%y1%svwU~)d5F>z)$#a#;O{q8So%BYY?wf$}~xiS#Elu8R5UpbLFzSrkHOG3fdi6ZuB^?@M>^AIyyf +)eAUI`ZrFj0k6yY440zTzVNR3J!N`c7e>pi`*Yz@rgpYO;eBozCtlL*xmUz)(akVJ^vTwfnKz}|410h +j#Ku&&14fCBMajp$i5T?XdwEx>HAcsxng;wiBKYqt*9%WFrNoFsO&O&77?pf6kY1C*^B_5_Rt3d;keL2n}%*t?PU +T25=RFWx&&9BD8Cc;FS9xrJs%A=J|30=W>bGhPBj1^us~SmA8_@pCHf`2CVRlqNgHNB%y@Q)Z>CRqqU +%!%G>+ypj2U(MaH@U}mqZ%}w)V#bzG?LpMgr(%h%L#Z^c-sIDclvoyWH#>Dc&yUYbg6v(3A=4G@!- +`Ylto~6kxtHqLvE{c4*oHQM(*!BheIH19L6E3|9P*K5wxY$*qYci@HUZ$SzZ$(>yL=aT1bFcjCy^`W) ++v~2z2-jM3Bv_9qW^Q#{8ZCI#hN%I^^XQqCIZ{V}fXyxpcen?gd(-~CX{SNjaz93w)hg(Fq}^*nJuKY +Vn32uQZqY(Ckc|HM+9KLle#@_p|_vE9|@`m56wf{YcQ2(;$hLULVebP +>+*95GMQY~;8ET(;4w}0&Py{%CC+Yjc1YL6)YaLFu}Mti4&y$~@w^Co3s_Z?LD8(EmyRr{n9)rlP$pnq|mQ +Zi+!y%?vCapLkvG;9LPS!_F@yLVAyPu6X$@NxIkxZ`=m`h9N?F3XIZMtl{i!Nh^JXufx6QW-TVcn`ks +)Q@Q&g2-2=cH&!%V!5@dZm>+bgH5E|)dPxXB&&Z)k61wZbIr(`=sWh%c;#`zQ$JFOs8@x>NzPUXN)wx +j0Bx+ESB8?e7$R|y>J`F%p<7A;+JyHkT1$_by9iKof7t_Zf(cxPDmErx6pZtF3ags-C7H5&5ognh3o|#PnbOzeIM%LBq39eRlt5?@ +jGGcTzgOoL0uOdP$J<&TN845kN5%ard +Sebbv(nOEbd#Skrl@E>bPg7F@_Auz=teIHy4Q*9?`O2ly%`EOFymv@}lL?&_~wOIBI4!_MVLn;_k%3C +dq98I(cA30f5v6h^(XSu{`Fd92I%4rt8OS36nQ&skUP{V87S?o|&%lf(r*{j?rFk8i#V@09x6QxCwa{ +ew!Nu?z&?DL&>@S2O@g>Sy~ZBH$JbPQ=W{p6UG(ugk7w*#4|pHA@qRky~QZi*Yc`Q=6vN_R_Icy@m+Y-{PfHdnVaVIxd7zywSjDH^m;+MVmr6=;codP$yM9pX*T7 +)zyAy0E(5=4X}Viu4KhOaivln98iLn+~mb4=cHO|Hxl=zit?KbV}H|Wcsh{`b*WrETwo|Nau6+@)aX- +FHMs&P35UecLQRkv=*{ka+u_=-W;xOW`(jC{c2IbSFjzu1^F$tXVx6V_LFNSGa=aPa +1;(5^5ciJ%U4V;^uj#wjW0*{51JQT(9n&*Ng^$d>x3j4zXh_+m!sm2pH`xmrVEWzyftzuU1RPj5yqay +jg)Mrc$mO=SA$$AaEJsAx@dNpZC-$O8nnfXrWZLKwAx!s#G2_RLvqIh77b7t{^f!nz;&l9|UU0^A_w)A?c@2q8EY#iD#%GmS)FK{Rf7Xy-Scz8_9)EZaF +*v0S)kgdmA;D>^ML*b=qFk4l4a%HgjhQcb84NrGlEE%Pu8KJCxjD`*ObiI2O)K;SrvO$+&b8q5vaADu +Pz!e+snB?gj<~1KzPA_XR@tSv9f-8$x74HML;axzm=PhFpk^8mbc-7_QV}hfVB-aN>Ud3%-nawd*$ZvYs>w}Cnq`bm0)1 +)QZJK}7Tbk)R`mFws4>(Syv%75BCIqIrh)=q(zEL0dAwzkH_ED?9z_)|hB&b9}6stN76xCnNRx(ciqQ7>C*Cw8%3wP&KiOAgc(7jy{_Rvj{X}4fG0VG!oQ9)Wk^! +c+Hk>kNgqLNvsat8f@Rdv*(XoJCj|P!LB=McV()EW-N>8j{KASY>E9TzU1&Ri{GtaX{bo6+GM#dk{Jb +R!fJgxAt*lD=Bo>=pHoaEmPG@Q_&6c1tC_HB2s+4;X@LKN5$T#Qa|34~k8}C-F`kj{gNLdzCHD^d=YOG|_T{Z#}S#Yi +nn*+ca-nAXSi4L>Wn_2NjaKA_EQY{Z4(8s0V*o2V_gKPp1Q?nDz|XCIyL^5Y&ziqVk&jKbIf_%rH$ah +)Qum_f*sg+axX}#2X$4(8&)9(*bCP8X8AkK(j|Xu;wP)re!_GHMWhUt7Dtl&_W@Ld`(TVr&3wDM#2e; +H7XV&22*paxlLY!2Q`2#t3DD0N{!4x>~{e?4JvTi^k9UU`Ai8zE0Aq#$}&-9Ia{gXvdkwbQK`OI5Ez38)&&il00bCb<*Z2_BBo<--LU8A2*Iy@EHTAsNF@>~ptn%(~oES7`_uuM2qbwFD>AqC@Nn# +eM{Yu^`=>Lzc5XgHg#T39wTajB>IME03Xgo>sR;<{h%P%wKo-F))~(&y)&gd=H*gDmi0X&RxN;~;qbg)#wT`QY&I{n7bFlcH}8c*Ph71gsP*N8Mt>%5obVKfCV1c +EUEHxu?Us6Nx;JyAMQ3U0tJdp}9i}*2Z)tfKAwFSk_re1)8zr%vYZ?|Y9>S%Z1!_mI@hx6GsFL +fB(`l8das58mN#=4mJ;^MExh{02los{ +5~feRb^Rv*Vvz=E^Jn{HL=T5t{joWfsjTDVB{-=t{+?CC}D-0rr%WKzX-0?*=Ze^_wKoCPUJBlGHMtZy*AE91S>h^wi+NM}B?=mS&Z9nR(S|Nx*i~Vy;@_WJ-O +4Y>}le8S|0O%h}@i(J*sZKXkeuuuk0RT&+glIqNguhR4)E$*tbPYnt5+{+y|4r0P`{3qx#tnW=;x5?z +3~4lMa}s%2M%zM6#2rSJDuOX7jhaqmakw^xsf*|z5DAyM3N +Q2hFZWX{$WVY1~OABN_hhVR;umP{e;Paj4zqBV{p8<6fWioW0HHw>dIHE$6*?obwX${cTGVN|spOpmI +4J<}Lvx~=&&Hjs74*B+kEpJa){$)jv~t)a!RgbuA22rqWw+rLRWc(vGn3;vwu5 +*P{B&H{bzH1s+t4CrojRLfqp9V(HUjC=Rsj!GAc3Kr>s{M^q4BgHQ746<=CUQAiuiR4rkbOf)g8UUx;n+4wLmqcKsah0sQw8nEdMY*8$79E(4aA6?t`6W$kP_^=!yr +8H)Vz$DjNhr&R@v>MEJz(YSKhGCUtb;bry4E4T79^e>)cf<5xLwKp!xC589jtrWIs0pnZnXzm^7RfSG +%=>M>=6pkZn^yS(byD}|HHmp*Z%nGw7f_$<76}f8iia5;5Wg(tG;S|C=7j=F6c83)o)7(go(TZd`s+0 ++Kmv5qA$m4+2v<_X>&C9nBdy2~N0@D{wWNyZLnGYM96OIr|)pwZfn=5rJM!DWF6%RSrm!Y|}8vjvK!~ +8mMLm{l-*wBp1UMvkRvTxQ1@B)zt3~xT7cnUTf62M4UDDvg(N@7@7X<;XWCZ%tl=byAh<$8vx=?hY5q +tIZ>2a<2u>9avhVV7h(hi@bAp)p{YO&oA@3BTb4bj2drupv&C72fJWp|Y>SG*+B@wIJbntMsmG(k+>C +k!Mpn@fBcF@GByp6N8rs{TQc*j-II?ZuH#i5gjm(M(_Ge^Q*})1CxjeWNrKSu~ +V)a+p=ZOr%jn)n7cB0B3dM_HLlem%{At3NORwE+{95wX$4$(6kw`v*oPbk5zC-^py!ntTKX!Ucu2)VK +wVQJYdy4-_%)z1t7_(wL}h_jp(G-@E@yTR-r+4{C_G-yW)!oQW17_g){>%VNfm=PD}LBlaZv$?jUES2 +f<`$oztN&@g=PUL_gw8be}OPO&@d0PLgpv`DB3BVfPxtfw(ygLJRXCi}VS +JiuFGopf#GV`H~3+1vP=C7O4Xz#rtt+vXR3(y7-O3sJ8RVZN1)$pclSaMEVYH7J;)oqG=aisd(!h+T`$5F#d1*-`R@z=x7A;(?-EDa(eUxQ^0tr0kDI?45cQQPe +l3Zjt8A@wMo>OC4nksPjfo6h*L;Bh@S5#(05_q9aN_jT^gatyq&pS65X`BQsZ)%ZiQ2bQ{L>0F677V> +Z08q1^s4iWK;;><<0yJyMom +1*%0N{qcL;9nCpsFYE8$U=-F#-GP#o6?PAmaM*y+;CqD4>&wUW>sLrfH)1VYSqm?XX779NM^~&?Q!o6 +~<;Hfa-Vf@-rp#eYXCpCMkPaGjveU%s4O9rV8Ajr$6v8BZ&u}N5j~0?jYl3b-&ia#74T!iNMuh`v?_f +fu?i*}nWJGI?1&g)WBANH(g^{8XwnMeQmV&`FXmvF7=FLb{6;#$tBy3&YTdSXj6IV^Z8WJ#) +HP-liV~6YK-MhY<1XsERG-!;Wu{m=Ee3RC`5hE(&~>r-lhhyQF3j|s|Ni=HMHgKsRIP+_*Ra^1AL;Xg +DMqORbt+b|L%*i=r+NJkZW8M44ECCq7bs$vLdoBxcl_KiPUFf_E6TDBK3FWvr4yoZMg@=Myw0GJTj^* +QR`_^=bI{gnzDFR6mC&vWDcP>6TN*H^Kn1d$fbkqrhw0Mm9 +4Bo{EGm(lCce-!%$H>Db8UhMdA@6aWAK2mt$eR#VESE#WN`003A)001EX003}la4%nWW +o~3|axZ9fZEQ7cX<{#5X=q_|Wq56DE^vA6TWfRVwz2)LU%|}AOeQCnFCJYt@Xpjvm|il9=c1SAdxql>DjM) +!h5>+ymVoY=}Fq$l?cCojOMT*IkIa}^pr74*!#Sj)^q=$WU9;ba*&IV_YVKZ(Zfegb#=BsER>*vn5!G +^NHbKlQ=MOFg<@U@V^yLn+mTTo=l*P`X-AIY+O`*LngM_ylgQ#|m7G9s~yGAS9X4%7i47ct#I{JwYBA +nLH*=VmTRctRC_rC^Ms{B+bB?WN6-lifK;h!=5nIzK0!H?fhlcBUS};=rGtI2c84ZzHn +==|B({q|;#aK|Q5_&R1EVFAcBg8V#XwC?+%p#T%VwrDH%?Po~B9{3ParEe!uN}-nOl}sM$<0C<)W%pw +_+&|HIar>Vjj@c;pv-KH8DqrJJ6pzbBRqCDdrL+;Tb7zh$f1WoA#vvY0q#-gCk*2ZkraL9g6 +mn0qiaw;1MxVQvx2DaLXjMtUMdcy3|I36|V0y_{glEi5^~lG|v>DOz$H8#%>BZek-Zbgbqj4O*HFwjc +)!8zcoeSXc)OafPT=Z7 +t_!*;G-iYW^n{_-qmNNps?Zd9x+(H?A=HIf7mTS_QDRC;j^ZT?ed~dGpNps9j5zDPWJz$(HTCsk!; +rF+ThMqa3P(ahns&tHOUp{N-QRg(qoKgQ~eOE8kvx|Ca;f;J0+In>H=>fyHo1IU)r*C)9Ai)6^Y-OB` +a?sT5-60)vp*^lbdN2sHLZ`4NO8oIotl$rcOrHp=LkfrVx)7R@PzHD?K(rMw616Ny*HlWHc#RV6#B7ISXv=NH%A|R`N%gVrUMzETP0Mv +3khVEH`LmIrYj78d*+RshNVzOhHaI=k8XrMQKxD<}?o?;@A|89@ldVZyr+G6q*&6lc{-PLMtazb9;*C +WNL1sB_~sJi)vnw=E6K+6fR{{*5-n2E-btS*<4tg3$nQ&cvUHkb!z3A)Qa*R-=w)EO;Z`ze8tmQS4P5 +i11V_(DKoR)%RHgP#kfP~mi%F(8I@0`uPns6z;vP11s(hqJ@HnFnVl+$h+}fBiXQtbHtw{t6q_bWl2Q +|6RYnT4SPN%k>M*BlN&e_V#VtLvW2dxZSLB5}G1$1PvlM%HyLhu0w%<7U^ft*p6-KmeN0H^wb8BSZDz +J#2e-bMDdw&{>7{;ac0#wp446#E_+#nRh*NUcYv{ +!?9>QC84aR!e`F>KyC-DZ#EC&K%(9V{&&NbgDVGZx80$6-;2!v`^Yn8-N}x~77FW4OJcBXW@mb}-rVu +!f>s@3Y4dJu7Q@44C8froJCtn3!dBp^s?^%AH-l)cz|m+@E!L;eA0==p5&W;$RCEucav_T@O7Cyw`jP +eD1BN|w)Zbf2fpUn47QI|-&AQh1Qg++Z=kK_*copnV5@EbW57e@fTbWgYCl<1k`U2g@#sfh)#dbkrCJ_tK47izs7)vMz}f_=IRs<$`F +wx#1VNNcyiII4fY3&z>%bbWkr$aOJ%v;GQum)x13L-6@!AgvzbUM=X++x@W8){4I2_ku>1LvE&H*V)W +QwUE2=&+jk&mWQYF^5||Sl^*TrnSn=mCYPV|*AwRxnQ+kQsrD8E%xufDa3jwr4HR`;*oN&W-5IvW0XX +*S??toV%iJ!5*Upr3fbSLgtswXC!NN|qs* +Mqa^NqM)@`eIlYP-6UP(#n`WE%#OR_k6SKKC;B!R4!3+F0Z#tM%%;yXBWMQ;|!ZVA)MAKE1q>Y2MlCt +BbQgUR_7@M5T#98C5uFOBINT1{DD{NR|QVZ~mA`BcwsMMI9sAiyGL37jwiVEhN&>M2YLb>%%4Nn7P>d-o7*}Sn+5?3ztcI4FMy@e(t>9;b5 +5tr(nlgqdV+~o>qNPo!f}Smg6l9-(<_=NET@Tc!N&s3@MfKqx%;cUjlh2iz+(#E5vVIH-D>?AtzOs@B +q%nv<8C5tatmFt1j=`3$bPiD0DG2bLx(DR`ZZ5F(_%_5UXJ&0aqiq>ITzRH?X3C%Y#f(hx`uVxtK{P&5-PO$aI4KN>9Kh5%^*NJD@$0HgsR4UlMnM1yc>5C{$V)4-nwjx=zjA +x9c4{D$_^2773O*k}X|h}dYzw-(Ezg>NlfC+9K&}tWNWZ6^Pb +$=6m23@8dSO%6?OP}o|;oh1JDGNgSLu#Y6VDIgM#IwTi~G~Ktq6r01Y8Egg$6Q73js3$seI;GzZ17Q3 +ML1h=igBv_mC^i7{kj(#S9(qjt5JC1q5B^}L}9#A+9n8pEiwPg2<3kaq%I1a%Scq9ZRl*n~6CYk`+w5 +EFn^P>VoI=fO10x}<_CXbGq#KubU^K&t~XUC2QjPz6sHlTZvHb@)lzg2Lsl@j%gl+(iCBwhd5e(b6_l +L5m=<4m~@xcZxMfRLtF$D#8U-D{}75L(rHi478z23)-Qg%#@j*LeqCuC`lTDCSa)?#dm$85m*5#EJQ` +cu%tCr8qf|E4zaEV1q-3-%kgC;z?`s-E1kSnl{V%IflmHie>!uV7tU(^4}P+hHsb}~^SSeW-u&-Nmvt +T-U;WdwVKo0+^5Bn5ZUJ%>PzAfQ1IfD&d*QG=E)kc_d$qA* +=JnpPeZ}v_8xZe|;+0fQ|{@VUG7NN$5TRJ(Z4#$fekg;fRNbFc +qmIj{;`#%{3p%$Pnz+eG~<^g6NhO8Qs}(|LZ=D8B0+fJe7(54Uy6-0+~R*d$c*7H5A~wO<<*f~VRHHX +)uS}&(Jkb^l%M@ydiFQ>j9p!weL9`JJUxGP@%j(H`^{%B{`lLQPv{=6S@OPj{K?liu7cR*T{0X4;EocjWbEyIJ4M1ZdTNzHT`3px3y(drm +YRhRv7#lXCYP@lG0AtRL#7D0qLHukV!QAMPP#(_xe@SM8JXBOKLwb5{w`+PAE))m_@t1AHwfa4G)#VL +b>;Aq^lgwl8NTO6P}|NVpG~Pjn)5wtEm~Z;&TZl0BbnJFa36wk-vFEqf+B2_vHGiMHcz>?3P!*l#&*L +(ZF9h4K$S+0bp)V$%o(-lBdO1Vyl;?&68|_p;+_b?H0Xxific4%NM#>UZ7`d^7a#7sKsz@~C7kCVLmq +`oB1xtHN|*Z0MbauhdO!E#53vj#A-3!{l`Te?9HqAdfHcm9bm5G1A!S(cqD$?gg=NSX~88ZinIi;?=A +7@86%l_s`dxH?QWd>%M|1uYQ3u>dHc0B}fH!q+jOK!41=ReWBbO*5k9*R1GrQpXzdn9d2u)x9|NvUe6 +ftqn=j!a3nyUTw{CS;Uai)b~aHMDP4!R{(AtMg*?LBtXBhf{4w`L$` +*C&5!TAy%2N(2KibBZ>cg1H{$#19gUK;F$@BB`8=R5SWU$mGRv&4fhdPq=$azA8LS)iI(TQl4hJfkCZZWb}V8@lZ_j@K_1 +;px4&moW&LH1Zu?5uChx+w-Qgpl<1fs{ue6NnohiBdc@d_RTsWWf>T>})@1F(MjA_t)7R4hb9v)kVIt +}OK0IMAt#n_r7N^jH$cCc%h9=WJDt5Nsgn&s_vyshn@is-Ley-%X@@vC?Y?fpr3xu?no{8QFZ_`}AXB +gTBEv7dwPCocy$YzyNHq3dU&=tzJ1ZbezR2c7L9apC|4j^91hpDFtAC430ZaSgX{>T!*P9zGYg`r;SQ +NZH4#(X?F7eP)h>@6aWAK2mt$eR#S>L5j_qc003cr001Na003}la4%nWWo~3|axZ9fZEQ7cX<{#5X>M +?JbaQlaWnpbDaCz-LX>S|HlHc_!IurttG08~sEm&Sy2lpB4*g`Dt!$Q^)!(o$}XgD*OL&tmj{`*!{AJ +f-Rv=U<%yN^H|v8TJby1MJG9xlp!#ir9mQ#U1_PFb=l^0H>ptjg1-=2P)~$mYpSQYCpdWKEXD`J7MFq +~>LmR$E&Ogi$2LczVOLd0vjIbjW5X~Hv@uqo3tnQd*!XE`Q4DLXhAgV$B>BK +=IA8{%|7PYNK%*Gzzop0V)=r#AQ!NTrs6EgSbfD=QSu +SNF1H+1i5%>Z!Bl_aS;g!A1#H)9Obh4z9--bF5I}r@5FHSggDrEpkAY~8SKu_g9t}`K0FZ=p^)6ec{0 +Q*A<~4#0663$jnP$DWy&;?R-t+(n9J1^tN|X6io$V~2R!v#v%c$l6uXpja+1=gU8`1w>(Z5IZ?$car?VWCWr`wKn+mUWN)@{eS?L@bo=(bbccBvGPV`NAcWpfsn95=fi&Tfd9@i}a=LeFq;7aEbi)b$yT40c_DL +%|eMeuO?c%@BkLlkdYI;FUFU6Oar+8Sw2sn;n(Cn!6Vo+e!mkeZFf3Vel`IRqE@9@Y0dRuV{!hjt$iv +=(F9BdyRt@`=wHxNq$aq4@$o_LIs1;JL-sR9`m)oh-V@VSa^IGgEiARfWINJ^I9W?Ka1{7OA%30XENU +xAs%=OBz&1X8W4$x^v$vg-A+fyZXD>QiOuGR*S;Lfi>;L?&alybyN}1lS7vBtWV0ed5d+pClyM~9&?R? +h_2yw|;HiQ1pbcGa-|bGhmnuEkh47!ss^+Zk=dBoPHc5RT+B0Y`V`DFEubTZszQS}QR%gH;N8lP{ +^FEFogbxVrN%!#~(i7!v5OS5+=&ZmXTzC~FUqvMHl)pnA+Q&Dx2oeiy=?wv7(WzFUElp-=2?`_ +$Y1gARl}IcEc|E3$XuJj;YXIF>LlqIK}|&oHhU7X)LRm&>0MFpN0C*^&h4Ct&tq +kSFFEBO@F({>%CK*{{4R@~q+mmX~^=+w5Ih_S@a|N=1T+~`l2++@faFk?GdA}Zja!@*EbRCtmGQUaYyfW4$ZFur6R6LK>Iq@4pJ +$TfS|6hs{~54`1GKlh|7^G0u_2NgOaQRnLx&^+mrIHrN1~0}{qB- +=7m5U6jgQ{4k9oNQcz*+LPLi7<)S|cLzhLZnb`Pw+N}r>kXr~gLf!Y~5avTmPP@Fh53On?ZHuag< +V17Ogl^Jd!S;0SGP>lSRVkLovo+CE +8Q;dXIm(y{&l%vsG7e*ax#qcua1t2W9&qg3JGIDGR2u|#_eGL9Vc+nM&@iC6X0akQ{{F2L$5** +BFNWjQsqKPii((!frvW%?XlL6GIidlStdw!zGgc^wyPnTVK|xy2We;AJhx9IKs^FaD7KvC?Ih&_lvwv +9C`rvxhitUx#R&7TGYFFMjU=`eI48RE#=7yE?&N{}j;i$DNh4-^ +lB+$}+o>d}hXWn{=arFyWUfqfKA5#}#~-l44B6s_dFWMcs}l6Mw&Y!^&}3no|)VMH9r~|9OOm?_PTkVJbC{1&=LRk*)Sue$kk-V_ +6L3dMA8x#v1N0c9k4Q*jBZhBJ-;w|IgxrBr1=f@&yx=b*$xN`{DpMTOFl%wY=?(iZ3tU}kL?wk%2FIR +*UWbmv?&{gAuZH-Xc3sJ?*9ZG9t^p*mWS}ILkK*mBWET0XDo`#yz&&hI)c7_v0~F^sk_ +}1lqS1(m@KC#DLs0Fk4}yz6Q32kDWRtGhDdVLbIjy#c^ekAtT(m5WoX?JW9WBtm7q5~efMDE|Hi^i=i +pS7U$Y*V&R}?ev?MWCTU7FAvtV3=;j2!rv`HG`TD-!Y|QK8(HIe0KK=`9^}W5j>t4Z}caOT+7=uwr~_*{i4q +=QYU!Q)RpxR^`-KB+z{(RdamVwo2({{ba(+5Tlfm$rf^GW_-ehX3G`0=9SxRE7 +2Eh=MWSd48A5I4aS>ao!vDjEvg(%CVtxwGhG8*_HP3Bpu!noFvGdrm2TCGiip`aOpYV|N-@M9dq39aM^toC<&u9y>|4gTb_`d@gF(uyT$}fAYDLx>XPDB(|w+NGPlV +g!!ntCP({k$?pmZC8N}#2}}NalYo{CDWJN%cdfpt6waGfm~+t&?S~Qh=TrvF{*B+09QK6V6s*Ttvz$) +-gG3c1Na=QpFzbn2Z65_+jP(|K`>))*-IDUlDm`}5`}+0n$KCxq%pAyJf!Tc11dS)P$dDf(r}@txD}+ +qn{|FV`(yJe<%O@JJshw|}7?j9^qfBwlyouWV6cikX^GTY3V$LOBBsRJ$h3c4k8J79bv#dQ@t-|huK; +u2p@=BCO)#&sM<)LS{QI+i=-^3Bd-)}iu4J>ckiYvdgZ5x+_F_F9o$#u^Q_+h>0r#>@~4A&coJP>23Q +!xwH_a(eqtuQRE@{~*WRj*uHR~-2Ko`@2FA>-797#oRLhDAnHe9Ncb{4*9jsE!&QecS172c|ec+R^&G@*OM*tx<=O&*a!;_M@TbNPzInG<@Bp&g>{Zg*aB +!-pf8BJZ_$(#Q;m_(0F+R&!v+yejD&*4`{t~7LcF3IxuFOdA>mYj3TUYsg+R&EdrI9T^$x1_We%D$ne +#~GZ~~CXk-f#j1~OwYy$zcf-B3(rWgIUlm$Q2&Ei#nVRc^ +)9qK1qMNG2K+)3Bh5N2Hs#O}R!>5)UB5edd0wGRhcV}F+Q=P;A6YE5hM}m$PlTk59J!xU4`sPRtQg{^ghFygvbdGeblL1st=?kqbZ9vDyGEM-2_2vMdS7cmVl!7HwjE4a` +DZIN&$c26a>WDnhmiK_qu>Tv49W$(sPLiv0&ctY?8BSLNh^qenmxM#Cuo|Wsmm67lx|bHhYLK*`J~H1 +duF;6U>GqEiRhA(hec`)nPW#qY3Fb7FLk;O*tV}T +VlsDM#p!Zs9m%rZM`8)DD6h5>!EyvcQtI@mFIUB&Eg@++7Ew|ob0uyLL#84AlBhMT*vc51W2Li&5JGfZ#gE4cQ-_F +4}@`quYrUH)>O4tS?f!)^9ips$NylUbPT_)jhf3AQ@Z?UBa83O0FA*kStI +r}-m${B&>{NOYNGV`y5g)h`i4+WQ8gG!06S$SxRsd%Zpqfm^W=q!)%lNHo@vm3=Zou9prX+mLY=H5pZ +O&nm)f^PeHkEeKp*@6j3dTH?GMRC#n-PDf+*K`WF;u1P)(A-i2TSdPscxb!%Y+{Gp8^#zZoz$MSg_i@ +>k`3QW(-bgARe5lg)Lo4Yk%nam-o)7eoxOJ&fHvRtsg0hA+oC-Yc-F`z;+{qdF~grzN>4#Dr$l)`eB* +`ZU3m2B?6dolgTLQ1%Vmf9(LoRn)DI1+cIw}4G^MaKT1%Mn@B+0ZBbxybTMy{IC2D@7}I;4<*Sn<#wg +6+EsBzlU5#O`>6i1#s{^(}Cv#`Grq|w!>4#I<6Horm(C={6c9`+C(4OwM(4OuGph1VDwgW)Z!2V%bKe +8rR~t0WtQG +7~3IKjVY~5OP_fy>sZibS9S8P?~XpjZG`WVYqI&UGS8&Gsn +aY{&^$>{)(g=o*4}ccGDSkm&(9Q!`;EnNDsnnzgwFjaaPX#14~Ly!j6%P^&qk2G59nfKb) +=+zr*Sz@xvcyL3EqV+I(>Bv^IJy^QLNucs+^v`VH6(acgLVj;ac1ii^|uF2O2~F>hk<3NGa)D(SA6cw +L;RKNIp))?~CdP%4U`u_e7aj!M`vL+W9P;S%PeN*vUPN}0nzf=9Z3uFj0ebb_|l`Ieg~wL*FR$)FzI! +B8(hz}9g9^h4{oC=Lol!*~S|F2}`So1NY7Q&n|ThroUY{I4Si)m^r4L-XJH1xHLLLn5ZipxVL%*NfJ9QDtJ-J{*=~k+p8#IubQi +^Bc4SY_mj~?FfTK3t^bF*1fps!alj~G~E~w^;jHln^+*D)N!_{z*^)x+6)9?J+x1P6`d+?0!Dl*Bjmf +Xg2qgF)6)O9W>uW$8_-@?z4}|AtGpw&OfW*Iy4Z0HbzMoiOKS;EuN@$&OJ9k`npE?X$w5N~OMUOc)C3 +l3X=Eu?nRNJfwA=zYhjr@5y36KR)zYVM-_-L9n2X8*K}xsbfI!h8MFXs);JWfY=k6DDmFDzFgs1U-A5 +fgiRDotVyWynO;ssni_cpA&7HB&Qf%gO&9*NELrc>mb0khs4TwqVhZ$0M&N|`v4T#S9vRE0M5x)K^zUve+~jz8PIK=oG%nD(dH{5)C)`u||}Cjk=Z_Ai@t3s3$Tg$YjI +?ux!D*+J54&I>%GV$Zx=W5I-<1~rzV1QBwsatU^_7$%UO^HNZV?lr$3s*6j2xV^tV5M})lLWXVuFoA; +l&P9a@A|?-Hth$%*Z6pX!8@}w;J*Nzo89=&-9dwiIk}_mhi%kL{9IZcmydtJnJ3PL8B@Tw(A#^Z;@Y)cdWk{8jA +DQlk4lhBWX#kcif4^!oLoiKSs5)?k+?x2EBt{SIBQX|-(@+W@O&;!$1U?2cIia<2kTk8PHm`x`b)j?lcZz9)XZZHv`s?N*zgu&8i9zPuD@ILg +MgmDYr09P0`@i;Ll1Fop5wLe!DVaqz9!9WzlKYS%<+mLXn>M1!xL&3y-rsZqO>srN%gu1b-9HE9xZ(d +0pjwEQWP7iu4 +N|$*FL|=KJiZaJ{R;d*88`?LkR~I>ac2lp)!lGv1gu%~-)`Bovl)=y~iZ%cje1nX+d29IEwn;6E)S4} +n+9W6u6C$)+HeAK4KQss@cR=ip|)~a`ZEU;2uW3k#%($@1 +oZ*8z&Zw#qKOm`&px|oK>NWX99WYz>Z#YP_)nt}Ht*H|#?SgaXxm6|bl~>PYyL)lz>l8 +f0jAKiJ`c>=W#jt5onOt7lI(3SC~Y4)q2I9FO_sTi??XKAuY28k6$i8jy6ecUIhU67w(YcU6{Ks=*dq +k%CWq+Hm#i+eRT9H@m#sX;!^sD~;zqp%(*Fq}GjGH+9-D ++6talk}W(U(9KvQQF65^k@fPe8|;uYvJ=v%`=|66gzetdwpT8j0X>iRh(u9UKVZ|8!5+`S`=DF|M$g1 +(V1$oPm(7>u3uFSEdBD2miq +1GDYx9fJ0C_AQ3D0s&7ZV(i6^h|pHQz*?%vHBKY0Jk!%BiMfBJkZwjoq)Ezr_oga=TfA)#LhqNo22P) +h>@6aWAK2mt$eR#P<&;B8MG008hT0RSQZ003}la4%nWWo~3|axZ9fZEQ7cX<{#5bZ={AZfSaDaxQRr? +Ol6w+cviUKc51nXKJ~TR43i-BU^jNiS21-lQi2nceB^^_|haKv8G6sAnmAazWY4~-~%MVmqfi{aypGH +0SCZ&{LaAv2#h>;O0KU*fggDE`kGkNnd|vPzhSN&`1D%*-6y7XXEDol`Xq2H!!_x(ZTZyGZT9HV2x-i +$+3@;~I;QIlne{Ougrz4Q(HVh%!lH(2+tl!Z8jFgV^!I@F$hA)b;d0gacgQ?IC&X^kx(%1`LW)9~Zj&* +w#@efO3+7xNi~V!l4Ui2p3A;L({4qnkqKr4fdufi1JZXTC@EX;k5-i`TDS;@9u^*KtwbvuIT20zN-_6 +!8Q9B1inoUi96;qes>##eH&oM0(%!$#)0O9uatSA1K~{w!GG7P}@Z5QJYcaud;|AJu+;aG2T%=e(MkF +_1v4^Ks!R(nx>J9i3RGzOZxgPh0nT2i8~T3wEnQ1F()y6#H)No7_~=3Bk(*J1E3ikk3 +A_X*M#MeRAcp-61zxdvs7nrVt44xgq-=^&I54978$B&R&3{=_x$uNz>pa|aEX!{Ly8`0yb^jLSq&d+S +;#XsDEt84=7FM!XOtOgaLawH(X8zV0ElJ`v>lWTtzJdPi?u2h8cKuWs*kZ_I#~VM9c29HfzHt{0JsYo +_Z7>QGO7NT}|SchnDNoCDY|OSdEGKzW&QAtlNTeMZl1eGJsj0Y);vgS7o~H}Fu?85Fs^%8md?!uR|SQ +}^|EMQz0NrOsYJH$$O^svrb!!03Hyrpd^P1jLZFNr3=Rp_kI%KCg8!j0JR%5*iq7D6~++Q(6xH-A_QF +gevJ{%ODdSkjG)er2qe+#B>QThXgFpZBW}#VQ~ol#B+o3gcIOQ0xfk+r0S4+3e@f>sI4zq1wp;@Kztr +AF}J8~N=9-&0R#tu2MkC_4F!M?HZSMUkA8+CjKf1nXFeK{G|V(>d8K~`G(ahFAJDtJI*_%>*8!xGR)^ +$2I1qqU(S&YHs3~j2y=B|cVA5)}2Z{;Z(M?2-3lEw^zF_}t*PV%qAe^b?0G*`IFnpUzE%YR@<$g!w8B +))4J(ezok6`SdnhzkaJ(KYNQhST$bcXe`t3J_CpP@va=y2xFdWQ#}ih7Xnv#9w@F(hcykuNJLI-X!k- +vrYe>Ybq%n1>)^v7hM2wAym59R&_|=ON=6p%(DfBkv!dpP!!+*W+w9BBw=ebih{PA^<1yF{xoq0XCpC +I8Z(M6TF^B8Q7nWEey#^@Xj`K!OMVkdw{{(KQsakDlC-b2S@9 +Or_?P>Q5&qEAwBc{ylY4QW4*Eg{>Gq&89mXd$GNy5$2A~UOK +wLBhCd)r*427VI>hg?%ekn^{#>B2tbrx0k7=3d1p?Wj`O*+=?0nP|!7{m-lt~YRi&7NfpcnCSy`t@jG +yLZqP=-r=MJS_Mt{`~1vq7l>vPWF0-A5XtOJS0CJNnC|L;A?=M0|1ju+r6aNF_e08c#h=`lnmE?4G_P +yhsIcz@gCrYCvJewV@5%%d6m|8}OV@u*!Gm$|^q;RyjXCRVmf^>6yAp%A{eM^#??3)bCyL{yy(x)${YS@ZWR%_X+=^mH_b)6? +o035vixqH{Ud+^-WasZxOA(Mc@3rDXqUpHNTB$eH(rAT~k`$MK!;VXnh}j^FvcwKSVW8B3dWWH_w~Wd +LGq$5z%@PeRJBB)@fApETVN5eRJNF)_JT=hY>M>XjfTC!)IaWs@oF+d0heVa6C(w#oKIh70_K>%c_p-t}&of*eKy7LRwy^Ve^OO8g)QH(uh +P()|oO^FO*B2)X2YeMe-#8gONRr>wEief~vycjWjO;?#o!@;LhCMfA&;0x}L#!Oy7(!1qd=?WG0+LH7W9G4Ds-r+z+tadP(l3}@h%+L|d>5p^DCJW>f1lwL4@Vx(a8oq!r))k +f#q~(J^PJBGSV@NmPXueVkI2;zn!-1ThA}Oogp10yGn`1b%|!TkBSOQG<*_hXo{I^w8+?|S?Rz{eJ|M +p;%@r8hLq#a0Ag1Puq3@9spV(A~PN5Ral`S6j&IKO6ODeHQP6rb>%~9i8BoG8p6NO$;TeDfc&hw7UAEf%MCQa7a~B?KkkBKC= +|wWN#uHy;NF5y$1)}FeauzKYrHNr0h54=rB|}PM+r80k0uhL%-+-oQ(ISeLcKLf5N>Rc_N+fU{cBeCJ +M4-5UbDgl@26%?q8e9UI&KFI|UrN{}6u<$1=Nbb>3G`>_eu^AUFJnt_{zhR;mdLuv3rfR +@&aQ9ioL!^KyoNAgWPMa*SQOOoxdHXKZ3UFl!cUUnAuo7pjA6o=iOda7Z6%RpsPW=ceJ(hM870B_Ofd +)~QEVeCPBsI(nIDNsr0IG4JOeF=p}=(rh;X4RLl0#BC2-i{PTb;iYlEhxrVMFCdv8E1z<5&P342s1n9 +FB~UU^d#6kkzi47@r51a*2zBg)|QUvyp&x~6)^S6H&HK`J4+e5C>=MY+DJLdNJ>Pv{su8i$qI0c1Fwo +^m`KAX1TFDyEhnNtCk8xL1@{x>d0je@g0yUZ-hIjGvCQB9mXhFW^({8?rUj?leU!GL_3j3Rf%W^y8y^ +e^Werc2y@5Sf4&ieqK`Q^?P|RkdzfDLVS4v_fm}W3N7gpj0yNI8Y>AKpoy?U`6*1EVKIxb`|r}FwHhK +!)i0{rK+f?;X=PCi=aaPP7sfy$?tJOQ?95L>73+WDo`-OOf`wBc2#e51i5N(x$#WQdy8&1!Kn(q)pV;zM=6}*djKx +Ee0|88#(45v1);j+7kh!DWXI(nAw(rdqBx6Rhf#raIF$bWF1u;_Cd+gy0+r^zCTQUf2ZeWNm4Mw&;9=OV}6m* +M!lPOiO^@$hSBhM*-BcGb0x#LXK4On(B7UPL(+=CH>i{OZsF|902h89$^*l&%(LfmC5(`-_wg-1Be?b +_mbwwTV3m2`lIKLeY}i2NF03cRg^alJ%wBzw!b({0O47B`d`;+p-CB7vs;2ziiQJm)+DmzUd!0h3mtE +_}-kM8IYyEuh?ACDE*il5p+7gV@oYhyE{iuaP61y8&S^KZ2<+Upfe#7aviE6ccfTnB2pRTukn>iDtgz +h3|OP@mEf6PV%$s(BXn)W>D9s_I$Xo#Imtp!yucp@^Q}S*n3Rl^fCkN^VID@M!$GokOyMGK;dCXdSfN +-HS7}rCqvH7a^gH6ks&7%CN^}&obyP92nL82(xmyWLriJ#N;h6AG7;o-XHI_nVlcqu?O<>WV}5U&ap&}h3}72JC@D~bWWgi0=1n$F-R`y4-2TZAA3l(me8-aO&2itb5$zkqMHbvaJ%&G+W#U +V%sA_zd(~vw5{0t@2#pM}LF?>4~chUT_9h7OdV>n(ShpzHv^1)5u55}%P@Nlcy;0A2MaZ3qCf`NvPCuNZ9{p;ay@to+Y +*obDk&^xgq$MB!*>tStUeNoUHTjo;mRGM*Dbd!!;kH)*F7D9*I7OT3e%3*@PeB<(T4qtC7yax3F +;AxQVAf%tf#|(j8-7F{3S5YFut|t5hPN;^LI<&7TLO5kF>0Q|$UwB=M_R2bsUUJx4^iAosJ@2$8;@xEx%-DLy%`gt7H( +AF>mXz1_1)*c*(8oKV|2f?9|5Kqm;(mB}D_}e0uHVc*jZ=(!(rjKie;ey5UEeT0P?{+dKk#<1T62bOI +C2~J^Ei73~8eL$r6HcWIOuE2iSq^o9$$A2l+CW^g-Dx|5lca;i@k!+-geBeM7u7jPshj)^Yi{zp6Gvq +>+11sVt&gU%UEQ&OYALaFVbxB!#4fDr!m4FC)P+@R39A-`<4i=bTwpb5KfoC*7~h=gY*NdcZh+Hq-#! +O!n>d;+<+k~GakOTm)?{)CV_UN4<&_fuS$ +1Ug?Q%zKb8Y6e%ns&)fz)`FqA29)Oh4O?&h%R`{q0Y$i+)yT*=ytnmP~0w+*2f&{16*ufluAw#-=--q +F+J_H<++*ny;5Tyt8ThrA5^x@pmEt+a>Y4B>u7->XP_tPU0^D&guYSDL3Ua?v{+HLx=~15RF*fIAPg=OSAN83AdZ#(vD!$X8(DbS9vgRLEB2UISBzM8K2Fv_v-^2KTIr8|| +BHy3&7jk1+XHmeTvIFi54!9oS(Z|S6eykn8aVNRzl3!9}xXvB*d~uw}2mtUq-UjIf4&#lY1!X8jhw4RkDw^Xb<>|z>Sh{6d3)1RQ`{E~sy5s#%4K_Hm=-hS}ttB +nb9m9xE16|E{`1YK86JD%80Lb9P!rW`qw>8tAFtt%*{Ox(Og}5gBifo}QMxLaxkRRFUxxhfYS{aZH_z +j~O(;>OQtKKG@w=BlJ3^j%Tz)uY2JV$B8*Sopo4!sZK#~L#quPMW$?DY}FOXkpleRUbibIpjn0!QfYTs2-sqEhEv}WMV=BP1!a?Me@kT70Ioj1^EB40Xy +Bi@4Ay4Mo{MvoTX(VZBK>NaV7ZXhzaRrv06>m%oye&gQJ+!_7WDDjU4`G%4yoI0{oyTn5u+!y50ST?Y;xxtuvlYUzU;p2@hi%T$oZjk-VF}g$JKcil@elDPG3G9K|;b|KElj4E;TT$r +Vlj1Lt?%;jBt5!m-?>ZfS09frlwFmDRhM_BmUg0ahdOa;y7wJVI)oQW?)HUBS$A4a%6f()y(nQ|mz-_ +izAeI}9hASQ2Jqa=jXGuvxF&G)Ut2P+$8*TmhdybESs)hRd$<7Txb2)mNxN6OK3lH!Hoqhyz}%SDgP=)zL@UkuK&#{{T_L(-%_Fzhu#xI6bv^g;2y5Abw`Qi6P +<}23PiVUv8O9`ClaZEUy+JGk1UV*MiL>H>mP0VvH|d<4=0vyHnk_44^DsfV#(<=X=vEe^_Osq +2Er$#$i$XXXw$H4L-0JdFFl`ASLAs)Fves^`?2jHN}p3X*6fLpXM7eEf2H@_jio=ov`pDmsTu=`-x>t +_%;y>e)Nbgk;9{7aP{9o9uCuEP-9meTT-gfRQGO!*(o(_=(%sXPT?tA*dqL3+(HYN`L0~aI2xD5piKG +7Vq7AUM4n>qb&hJPF)QjEtD}&trhQV=OR?67EiQW!n~K%ZcO351L*NrL6XMMM)BVg$42%X$$yE6jw5< +r7IEmiAi!^@TKj;HJ13$kIpMCs%0iVl3ueU$Pg8vnjX88H7_)PKh*?#tgorNT*lp=1sf-ywnQKNIhjP +&L>`N?mku|`qFC6wgUHTbtR{c3ywlUDPBc%sdM8{0Bono#MD>rgy+Y0i8)O}?o~$Z$Qx9H@mVQ%8|aF +}Q|0+{@eHB|qxwk)l1mH_bzwLrLRs%1aJGf9TK!g*vk-S{Z9v9y>MU*LLH?h&(diSz_c1T?79uLV?@i|$lcDm(~a(o!zHJ1LnNA0mGdb8&F8vP` +gYecM+&wxTt2wQ!>u)c+eUbl#<)p@+{?XPx|s#mMdb`8zd{s`t!6ioTxrxLocy9DZhqd=4&cLQ7>aRk +!n?o40U2mu+r})fajk!!UATO>?Qh10OsaQcRa$(}s^gV%v1#qPwR)yG6d1;pA&yq!wI#(M7TO3@s5T` +p0B7s0PT6NVV+uvyhIdt!id_Ao>b9u#E_+aMM;odAF09!><0jp1EUp^fwop`M9(P@b$P^5#@VByaiz@ +iQ@xF#juepP`?Y?%PRK()?Z|HA1Dv7vW#-w&|XeSl3KFVbiLd9?A>{1lfs&yA?bz@zs6Z5XyR5m&1O& +#Yk!&SDo+4nB-DcN<1Pkz_079g$n8gA6pZt(MS@!7`Due7RNzxebt3k$y#6%G9SLR0Pb#iv^LRl}~e! +#B-<;!TVAm9(JwP!dK+bmGhjS)bpLoid}}8|2I*sFgW=htP>` +dypE;Ivo8Uc~pNUM2>!oM;GW3U(@1U`o)c;Jq>C;MpmERwHDsR58ADQHlYGYZ=x8a)$zzAz(QLiwxkP +b@RiUS9#0)yqUcD32EE%S)oOJ%H5K-DQ$W&Mpz6x1hXr9~INU&M2BHRr$CA=W*6QF#W@3i`9yLLaM=pVBmm}}6aJ#UuOjT*!W +YO9F(LFX-TIP`dI+c#ImGH;v7q!B>1C*;F_~hTS$}t +69{;%XM?9#%EIcm!PGsCh(`>?E=#BWhoaQ9;cpPC3DrbZp3QBD+@6^h(_!{}n>(>)8n8ld& +YWcJ7@)opTb`4i#UHW2?`pW>jPsGKRvqs6cV^ +MEz2v3BTIpec&M4OCj9V>U7=kW>=4=y%^8skiMc4Fbp_?|%1wXsOj2(sWtbO7k=Yu`ZRiz!pXomF1~_ +k0BSg!U!c}sHDhL&eK9zu32G%U`ZHuQ*zU=zg2lv@Jl=j0;@OY0pOn_%T!VD%p#IW*dl8gSXl~r9q{{ +%mlj^T(^pz6y_FI%MlKXX$aH}~_UKM=JrM<-8zzp +Pk$*RJp?lRzo;hwLxY9~ncAPTYUGxW!G3W79cMS-!K!aN+@g)xM0xm~IJr7$J4*@|mA6Xtz|BCna{@0 +h@&Ry6*Frhj*-E-=`o64Daq+68vTGOP5aer&Oqq`pZDC3)I{neYl#J%D!wvrDDd2Bfl36JrR0$e|;L= +u`Fbmy?qte9UIE37D0tiX0XkK{8fduPiJ!U{@TE3U!B3Ha3CR60W(V#KbFM;I3u@CO1&lvJs&&B=f`N +?CA7o@~N-}xWvS!W3_Cu9E{a?Vq(-RTOlE`zS*EhWdfIkkN*pf>KNXDArdc^?t&SfgOW~3qCi}NL5$A +M7&Xg@LUZDg3f4SZF)0kzl!9fY=?=KbSjii9|7Mb|xYBzJKfh%~^fdhBJr_Qm031NMDKL2FxiD-|@F~ +$8p)$Eo|D_89mbNsO$&5$oecTnyq)W;J_{c$Wp4WaAb_G=!w$`Izb7)D;z6R-hIzuB<2*nXNq*hT%(m^KLo=Q +}Rq;N|sucsJ-CkJaBaXNDxw3!K~}8H+*BzzYH5Nrb8i&rOe})n@WSN$^x~Zn@q`D#Gzm)hqK0-7kKRv +i~^Qr+_)U4#HZ5208t)d*T&itJ}H$J*Fv(wVUW0^Lfqi-;tTd!&>V+?G>&pjHWC~LgnZzH=ID|wFMNx +_rBc)^7EFheb9{UazfWq8xx2iA=@i_BNBX1bX&xT#RsyRnW0EQt?MD@~!jgBYG^EU8Z7y&~C5_8H7~b +PVBe$k$M70=uqo>iNm(M9h>y<JG=ll%#LNzfhITw=%lpbyl_wU^jKWl5~yWqh=+R +?N+74un^MC8yY^f1}+$eI{)WJ>}SgCeTm(wmbbV)vz%)h8uWSda}<-76-m06#|H=J8Ez)j{tfp3TxBL +HyZ-;|So0;0H*BySnxqa@4-bbX!`UY@-xq5F8jv&$$UWq{9t|Ba*&0YAoxy?vg!7 +dAJ`VNB@;O>`mGpC_^;<8eMw!xRL5^f^2`%Qj0+~R+XM^!KvTnI3PvFXn(;k7f`s%xXF(Dd4|*6`(xLqMzr ++L+8v(cf?-~vN4|aUa&*8P(IW0mh~bcFTIUZBZ|>;Vuy%VBz59g4u0Vq_O=I_w8-?L`meVyV5T;K|T5 +A}>6X?XY5Dyf34YGI)O3UbtNZrPP%gOAo;sC#~#lZ2}|0bI@d=)E507wo_IX7t@!h +lG~G)_HEn7%nK-^l9T-J|Z|{X!HPW0BM?3C8jTr2x~}%Q4C3D=s#=*#%-@fTbBDg8UvCty8u1UBVfHl +cY}Ld_rrVMM++H7ZCm7H+14uGlPf_meD5l)DP6u+;wz7+vp1beXt$y$yP)h>@6aWAK2mt$eR#RIt113O7000O^0RSNY003}la4% +nWWo~3|axZ9fZEQ7cX<{#9Z*FsRVQzGDE^v9xeff7AIg;k@{wp}1owdDVxp;__Se))zl_lHimXERJy1 +Hs>lbJ~}OUXSd +7j2)5&l;He%=eBn<$UccpV!q!$&D9B!GY# +!lSWCwHJ{hWouRY2Kh3hxFXH=yx}5{n_b4cHuIW<^>OKADS&vHe8qQR;g}3b1dEjRUNq8GaNq7 +(@MO55N_8PL@%a6T=tXGrSy}o#b%Hud(dhx++lmzK*elQr0hmOk6DoC%)+bWuJy`)^vm6)G$dDYq?%) +-PEpP6=iFH!ub$xWCQ2dYq*MZTk*cQvNrTZy`igXBrkn}@xouwtM{X@DQ2@KcP;=YRc|r<&#@KTnEh{ +o}i5ogN$FgGHJ>oFyg6EX>u9yyqoG45qSgnV}9Bh6&l+ffi|676*B_R`VfFlN}5MQ6-TuX-4A7?1`y1 +yxS-RP)cXjKUZ}x)8ZgZ7dvWhOTXy7PU{BJMQ;(sq0-2_2)$rmI}fP4r&#GFYC888X_=tL#9OQC9wZJ +;`E|mey0_LOJFhu36?ug+MvCt+KZp`lPjH~7r<@&up0Qd*3s1>PnKjd26mIK#l85o)z>m{hS-68m>@5 +#cQ|*%nR?BttbRFGptD;rc&FE**a#bA6)x^09g=ITyYt^mkBDD~n{Q1fDk?+)gU50s~jQYXa%dQ?$`@ +f_1-qSaiZ!da58s>U9X$s}#rdkg+S?Y&*)mvRCD}CKo{^HqI#vZ^zp02}UrRxmi+-P~H#&)Q5%@3DlJ +2={ucf{E{UnZ$u;d)R0?VCS4bk^0THGADHeTI(E41QPx+E#s43oye^{^e=l72dP_i8Zkm(|XppM#ar) +wfwC@3{{79Go_>gTH@Ivh~8OeW>(E~HN9qBHuf;~WzAjhqLte2`i;NA&Wx-%r=;P;MKk3;)!x +esG|9Z)v;r=Nq+G`y&lh1$Q+peYq=8#ti{~4^4O=%k1;)*&O`&!S%-9$Z<+`z*I@By`bRYl!S*CVHFs*viI`p=|o(pFaOcWMvH>=_)&*7 +%maA6_R3B-yH%w9N_w_SNlC_6NqXxZ@+?b}FfH@#Dr9q`2Vk53q6JYaj~S+X2V+~? +sD!h_!7#$>J^h!bdiFfapZ$?`904LrWgp%~T~%WxqqW+;sRnI@*jamHKediLZ7O)y(>3(MIFyTrjF&w +i0m)7$&yo>TeFA6I}Rzj!W_VpvPqcWpT2Rc +-#Y{dG$>d;qcml_pMIa^+$XR+!@-GR61&7Ky&MuFRU)=?EbbIIUsjoLL@R_T04@!VD3DYsf3^F6~NdR +6^+*GP}TgiTf41@-57XP$cjJ1w_McuYmn@ZE_WGN7H-cxgPCC}L0lSUC6sXX4PU2SQ5eA=dqG(8BtEVhoII;JfT +L$w7=(_TePcBkUFZE<_`wWa&Ip1Ew>gZtwes|WPU9xpFQH&v+JTZV~$e=vA4*i++8l*UR4bEOX9rZ;% +b1GG_#>N4{-tKOgr(y5iAZJ<{-(DUM@Qv71I-oe7~AHu@$?_pu|4`E^S$5}Xharjj%9ByIZ@Zl_Um$& +^Eja2t*?OBq#%=P6e%3FVed%IG#Bxz?N63?wq)AC-0fYk1K3+D~F%g-^#2C8&#qgr-`wzjo*Fi(T~zq +3(Y#rBr#ok+9f)otFSX^^I0;r8nGNMY(`_3>bMr~QcPc)qT*w@w2m8>=V?LcN>Wl*L|YSD6#l!K(Ifd +v)15?nW)UnpvdTdSCUL=0TNpU4{q9&*^ae{qi%4^Keewdh>Vk;fHbjAnk1`SLAMyuov|e+N_&*SOUGT +rxqPur}l1FI@FMb*JYGJPI*u52zrgjxpN2}(EG2Lv%8%At!5)jZ~soKp=#JJ=C5e);qC0))hH|OSB9b +fYun_ikfcyeQw_XoM`$=!m4;;3n$X&&oh-CzT{}3~V@vk+(NtZeSIX=e!8)7b-tOOm?rnVgXv$W1G*v +51vnsp#z0W?^debiJ+w3XvWNi6X=}VqE!uUFl_R45KKh>gKM^|z!%Mj87Eag9_-8S&L$W%4?)}VV=plyLx!(S4`L!vSJ+x#jS+wAO^a4jjb;0_ya7kgXIwJu9mdQVN@* +%{%W$+brwUorAuAq|>Zd)nVMy@-ce>%M{md)hr%Egqo!U%`f)fe##u|CcQ2iThx^#9VLmO%>@T-RU!u +ZCPXw59RMnSmP%CNFBgJ;Bxx-S-L*3HB0}KRtUv;6LF68#>^#R90k~X7mXHoCv-> +SgwMlQ$)T(?W;e^3uQ3cM{aRSm|pM` +b=pN-Gza+*8lbBkrryjQI2ag_3-L{i_N#+d~OXHU ++A{gg(p_NK@Atpa*oN>XNxp-X3jfVxEvMX1H)_r{+Ng!K$kH!iqO91 +{zg4w8g(&}4i}2Uy%01a^Vr3nlJ>Nm&dsQ@dH&OM+PKvdcU6*0Fn<$|aO(lkYqg~8At|!xYEMTMO`7ZxSFxw7<>P17fahveh +`jjgM>`0zFyGVPhnOWV3-@S_a;GDIpQ-TjXrF$})lOwU#eOZBFLRwyxQ8fC{i{0ndN-X8itMJ?qjPGL +Q0z1753>EfQh;zzV}80ve-*(pOUunZs`c92C&FMKJ}i`ryGI3sXitxV=w=VWo*oB#)FoWc!#zD&L}47 +{`)0}_T9(-!by}q9-Z9iReh-D-IX!@6FUzaJ9{g|*ezXUFxCcMpgP-id>zt~+6#E3e+K1okbVXuB{#o +A;2D+?2gR@PmgdpxeZ^r*Vv=p{`h?GDf+g6WM(xv6et>9U3AUp-gb$6i#J+m +YHi2(#ypck!w@+S8r&p4F>5U)e*FM`|l_x0@*5v!Yj?{T_-czwaO56DwJl`zVS%OJU;eF;+?X0CSV1_ +3Yh8)oe2VZcl&Tnz3iG(5WeV4Av(0qGYR!4YGaa^C3OXLx2BT+C;$ixN-M;H$V^ABklJf_HLt;;P$&= +gUO)&qqSlx&cl^w1FUZ!5a3b+8mekHp%YAW_ME2DfL8`URGT +c-(ZH7GL-Vr@{duvkGjTLp|NU0~-QwbCvr+vllc=a-Od9Y(0X|oNmZ}c%)z+=$xdDEvfXsJGt<957tY +J(WM2khKEMl4{cR`1Q4d`VHYAC~C8MeL9e{(O?;DlM?#cD^HmYEv7HZ7+jZjc{a=G_4h~hcZfeIK$gut?Bv^xPqo5W{{qu+Fr=iHN8l9zz@~f +9M%&INF5<~)eu_`SA*BH4`ZZ%$r9+S5(SY|2 +Qdrw6XV${mI6DVeHQat6w9^ZbC2Kth|b%0i09-n@aCSifTa-v=#Vc1vVur{kaLzuNESDrY3FGDfRD<1 +iNowKLNH0y~0n++CtSoUsgW_MNnqIpQ;}QTU#7$iW2>JSYDIW&@(_S`h}{dYz$Kid)2}kTHX6H_A)l1 +EzGu|Ej+y2sEH+M&svzFRUTcS- +XTCwt)ME|_3ezp{4w$N*`TD>as(ER>X{cdUQ^CDcw%7m19|M+bSxo9B`UF8y2uLo4ERX@M4e;SHx8P? +if|M{cD+yi4YMEeJr#rl_=#WzuSJ5Q@R^`GCRcZ{hkYmt}ruLghTuar}#-}uoxg0xbwyO%ZWQwwWo?; +W)FTWG(esScrSylPzZuahMBpnmCdq}pWH=V8*#d0ZXeMSA?otUAg9;Pc0e$ENVB+P!o+N!5Yax1L{=) +y?kS)8+_G`>ze~d5=A@8vX0D=c0V(XK8GgZ-5Ud-z?cwxPm;OWVhLewwbSV3M`kbAP*>6yV#;=4SGn~ ++6m*Ll?%4B)lSRI5&uX8 +VB1R~#vU)C*$qt2nn&i)WajFc_vu}IXx(c0vQUCS4_f*-;MReCts3xi`&x)U||J%~oi%8kB{OL1&$g7 +#8%);(=>hUkeeEed}>@Q`%-+$Tu>KSnMxZ2iKhVWcfk`>yu-mzJ0q6)3$tKtXkk7|$K{#en2WJS}Am- +|t4k=}-xuk!%8_WF5*7Zt^CaZB>7F7kP^*;k}&Ntz-T)t%gYM;kT4vqwR+j0z`Vjd}KH72ch0B~r+ij ++h-*z0^vQX2DZm=|}bNi>hZ&pFOJ-#c$r>bo4@v^gs9BC=u3gyfwq2@6I<@=T&u~atI!+Y8o1`r?t#i +gI4;hq4{fM{yH>&jm=+^$B$Gebf(ZQ1*i={yW6XeV%n|PO_i`+?X=+HBmbd_QMRp_#b|E+(xKh9swxs +`9912}YxmDO*ksx_Ssr!NxAg}E3x$5?q1HfOzuVyM-IL0sK6&1I(uTC2=n~nEB31QIs=e-$=gp65N8J +9pTW{Jw>nMEts|mH@XB||<@1~xL>3OPF7|*$yDr-jkJdV^(Ry#P_lT#wmR>Mz~wKs;a4jals6-fXZJq +lK}`P$onz$=5w3uh9qEYeNv-9LU_@AuWBNcQ(83c{}|(dHOU2qo~jr1tTL+#HNa|XOaoH|_`3qi%emURfXp2B +S%M)xw5OgX@jVLFH!&Yl!~~yN2&#B}D*H8UHV4bwi|F1hQop1zucz?C*fc>NQI#A9OKsc4(g)Qq>NH9 +MnUuu?c}4H)V>oN>h2A>WsSuj1GWyl4u2Go(P`^uDJxi=_qt<5sx5n=OR^`i?w^UZ%O<29^t53CF^v( +-ak-kY@r#1Rs^AfR#wqHDQHPo&i$D_&N^PWEE>)##sd+NW#{>jT;@9gu(_q|W&uisTvlks>odfreC;K +h7?cY5~f{N34UUDt4MZ0Z`;bq!8>s+xDNFV1=w?|(R$_WtAZ`^%Hd^Y`z1Z%;n{wJLYmAL?Rtxsfi{A +52yG3q|*?_v!7)#YOMp?DF#LWA9b(hx5xfy*KaQ|FvmyI5bTjHcg)OdZ+I{f48g27oquZEftV%@y%N{y$?Ml=A6t^KAvtPD28I=)JR0=T-{Y#k!Iv#3)Pevw$Ydbdr}K_(r*R(^5nz0?r786r&_ +cxPd>hX*ETdY4Sm-%G{tb9y}CU3@c#Urs_S*{q=GplJsKT@hnF=E<6(z~^VcVrpFf`U-k)_9?sS{Njg +AMX`>d|}=yXf}ezyB3+IY3C4W^p*cc}iPmDP06=%E@~Eu>apPBk1HnPTmXQ6m0${`$@Cazmp7(@|6IW +z$@vaPDFQQ>>jWr)_gP%b|DeY*Flf_gSf1tCa&(-As^y;_U35()>?vS{gH1r_Br*C^pXCg63!hm7O+o +<5cymwgQ*u7pJv?93LK|u6h;>G)tEsPfpJ&&UqS)P-i<022T6pm;_@;x}5~DX_e$2Gz+F+p`8UIi-jF +?V7g-tkignGaOUh>X9kRpCOuR3Ra5qO%l!GNE`54_a`y2|+ePKCstxp6v$$9;c3jM~gT1W(@z$IA-%X +lVf9RCAS><(yDBpOxCuea~oV(6=8n=)cqNnFM%#_0VutY#^bt4tSoaeN7E6`-8sOO` +Z5r<~P(5IO{_1+X@Z`eFI%&HT1LEoDYI=-)zcGmYG`7n_Bu3I_rRSyu7V`GzH^p&(FX&=#!v<4!yD25 +uT*WGyyeONjD3@<>=U;Hkx|sgpjf4cff>>7%rMBN%k?I_HVhw{o%PE%)We|>$jkR1eyZi_O&K=p0BOo;t(yR`G0g +=-f<}cGpGJ%7GaW^w{x<9$jzOk2x%VVP6G(XJdl_rF4@4M5t%4j$=&TDib6i()40xJENr8biQ|@Ju7A +RoC7cX`7aWkrSb5v9%)1J0v?&fHEk-56Hii~D>pjBMPp{YeNG@VM^+bAh>U?&p$A!g)QBCDfbV9}^fU +A~Q~Bm5#QvnCHDhERq?s>sSLzCW$rrTq_`@NCS;An4Lr6zGlq)CO8O5^z(%J30g+S!QKOV+E`AQV!y9 +K?rA$hL{d!#;M`KLZQG}8k9aN#Trl@B!=03u^CJDGD~wKd5_rZm{9Ol(rg+Ll&9ID5%{TVQk^PA%Dj~ +^b5j_!)4z}vK(|jnF&Gv7%wWU*skdB)M!D4<35X0j?-4j(kuf$ydumPb5C}5HAP*tq{t-dh*n-+NwkQ +#)#a6j2z89a68!?Kx0U4c&|>l9AF&?hFHmem-B)6SAI2d +cGJ-Z8<*{Pc-~v^djW9KfpH2TJ#S>s(t%I(Mrz<~BLWvh>z;1Dan`T!f3lqUd)iKI-fei|nvVb{U2)W +vuba+H@K_S{%Enx(yyJye_GWY%0lItPdR|#QV?|OdfTQ|X9WV=`r6r*vC3Hg&fdK?&_ko+Q&)YtP3S~*9` +6%dw19^oY{+onObMOy|bXR4!Ayg!YT!f*x(I@fNzTXPx`vxCuL+aGs@$|T#%@F=_K<&CN_lwwA@(-jA +=jHu8MkD{!~Z@@S2QjDDW+nr<}u3_HU)!)6_zey$llZ +y)tG*;D!|Bom)&f5KuvlcV$wY? +Hh+qCC0oqBWfk=^s5k?$MN56!YM#1{OGS6B1D3_y%Crr8_XFk`#_CW_}u!$0X{8lb_B*vAC`XVDk^Ny +GRe!nSgZne&Dx2URB*zoA(n-jwUgebWEJ_Jxd=V|-{9)N@{n21bF-|6&57swM2T&)@U>G}HE+7tlaLX +B{xDlc504x=>=ytQzM$yI`%)X^7yQo%0&$OX#cvUb|`#%OiA3!S&0*+5I_;HF&IFM|C*N=NuI932N<7 +=8Vdk3t!l4QGNPb!qr{}R&dy#j5-7&*3zG#2C+IL3~_GTpF_wx0yV!;t}hb6)zcjBMW0~J`XLl +y*U=VU1m{rlgQLQAG*-oahN5hkSp(8Fi}T6Y(55(#4${LNnwWz7A~|HBB3vKaleZcg@quzEs-yct3Hq +AZHaklud$MiV)xj=_7$<*VOX{jB@#<0TWnGDSB<&Q-~W(;w>2XknpbfK}zU(j~K^z +1E;HKsUtc*{$JnJaJALQ<~9PN0u)+uJZ!23u@}jSSve`UJnJI#(0NXV_xC?FiM(thZusjS?jmS;O`_v +6!2lzmuyq2JD?&NfDiRCs$G&_`G9rnF;nTTzdK{ol9)k@w8NztH{5408z4!Mn^h!)8$1NxHrDE&#cL8 +14EkgF1*Fw&fK1OXOFZ|zjx_(s5iI<>G^tQ(xhJOYJR+b?CU$V|aA4wvK0zI4mP1C%)4WMQxE*2 +m36XUojZ;QSTi&-(b^uSSD^f)?l@&faBwT027G0!d;AqgLaK%JAY;4t$ZIm)fGVKyL10~yPvlb^F_AS +wXPED?`K!?cb3c(q-D5N*EvohJT&`>$2LJMP!U*AG^{DEVOz?!iRCb#$oPD*PWSQ&TO63^=@w%e#Euc +brzAq$nYrM!vbz5^@y_qxN;5_Wq#47tLO;f)SJbfz_rS$*KtQIz>M64sQU-(gMATCA}}ssq-a%6X2R& +hWU~Ri?A58#>4~y1$g~(q&LmT2+pi(Bf^V&3iEHP{=BdMO&rs>kNHh2M(+p?zw~IhR`+Kt_m&Hb_ms$ +)A7jBIhTZv+5A}+e_*358+B;oyXKm_l7_}=gPV6QXK17o2SHiN8^m$;JI)&iD5zm(3_KIo@XDeY&7Os)^Ce`Zua*lK1}`vd1Anr?j{p +wU&mOQJNyySbTp`Xw5*X$d#V?9m|&_!a)M(ZUZzH)$r04xmXu5;xeRedwq?1d-Dq82#2)6DsIqhRiIGJ={jO{zHs}k?enT*f8??_#MT2r`R}uJbT@ +2lR^T`IxxA*#f1MTLeF!6Ifby#;35VaMpHk^%`&2HALV9wOeN@i01ZHIVam37WpkUrmHA*3ecm|8rr1 +7xSJO(rZSx00bLt9Qa;Z=7$i%{2&r8j2@u2n +K44SY+p%$n|(+)&Xzd_ymP8CUg-bg9L8~0VJx=P5M<7}f+iz@bVN+Xg1`!wfa8u$!U$#hWeagl1GvtV +T>vExi0|hZWe>ac?>X9J`t*GuDwzs6R&8WUeNQ8a+cDpV8MWFU5 +IKA^3*3n^k8G?tGyXp|=2NI2FQX015uyn#jb*j_gm)c!8w>HhZGa$@&eStA{QJ&GLpC>3#-^bkginvd +vLEzY+z_&1{0Eyc)YM_jsNfGB#?09NXxC?Sh#wP-cM$#>c)*y{>+XX=E2W$+lX`UpQVcihnTPV!r% +It)285p{~Ts%^#=F01dpGED+adsK0NxsdwHA*{oE0Tv5Ov!8xGYx9ybD8FM=2qGH!x05qR(4KO<;$7) +J$g3l}+L9$Xfja(d*lFx0S(k@cJxkUbg?B;R|Xc~%9cvjWaKP$N@%IuVR6HoL=*lYc;9o~lVn&b-r=%zHDxKL1!-%%M8g1|n3^Eln$k}#G5g~CO4 +#A7IwJw!-ZK}{V~Y?NdSP>`>4;(s6!o`<@QEz}&SsfF@^@+=f$S6Js86!Gm_s0C1gg<1j?TBsFJ3qo; +>MZ#|oPnd@m28>Ucg&fK^#C}pE+KcBt4gK;9ZD>X~AM)hmIw;Yx+-QPwfG{*0V@o`2M7)hhn1x9KUK_jpctX^T#;3t4=vh>c$hDPvi6Kv67bf3;{|ox65K-^XD%}O41aUAOH*}Wj$?PEQK99+BllNhH}X7j%s9IHIvfQShD7BPF +1sOTdCmy&u+dl|V2Kzt&rCWb?L9TP5GZtLn;3Y(f;fZgGBsVtax<@9RYK3l65)DoX&&lZ(8l&ovFDkG +ys;wLR}VD7wE(Z|p1^TcU|PGVn&LJLvCl@dVs0;|W-ia8rB5~ihg2E?KXNz@MG*=jVmGf4X+T4j01yrMCYD1rS$gim_4_Cr8io&}S(v)afG)GT*n`}Bj`UeWsJ)UzvO3CdZp>CWTK!v#7vTd1Pd9= +-*;+B~X0A0oU89Q2hv0<&y`L-+A6}GUB>BjKO1YQavbkgX=enUfgz%C0mG?V9>b|yKEtV7 +%+L1#4;YN@PPm%y!On!G^F7#^uz0>-0X}Cq*u-goh7+3$g3saEOnv4*Ao+|LPV(Uf0yNATdKaMKK6e= +W_nCY}!_LjFXxLdh@ek60bn@~t-(#YQ~z77|9-`=Q7DmLw(~hmyp^{FWpp0f(3d%2S2+%3kH}P(ct)g;J(33F7(yVNuN`PGb~m1Y(>7)y;MWd>Z#^n`1O(be0 +)>L|P9Ay63Ng>vsX62_RGEiOltyp~Zks(W1bG!AC$4@e7h#`}8Ho@n)*|Lc&tmvon}^MiZ#{}f2)uh4 +9!cn|3l{HQLK>>e)T%GwIbPzyGUto;Fd;oK1DAz)VW{Q14}qz_ZKkG@fX!UMFbf>7Z2FcLj(Cc{qD={ +nuKwtNnHorht>F3#gH9ZF7&L;|$d8fjr=VtPOyS4#cu?Mi2Gh(KbLD;U5&7_PX`itM^B(&{goT_F@xE-;qIXoE +WtU6-|^t7)B3eku-zxbeWPAZ1B| +i5!A1NS;H|(K1jyK*}<%_0$+>FMJWd3^#O1KO}gL2^UZsv5?Y4B5<=B{sl)F@Xn5cs`ZnXN#a(npA$y +#`pK2CNRGK}9Ikq#lqIjLp0%!)QWK6O0;vJ;4Sjw4B)r~aq3;xCh0ROfEmDOQ;RspK3P^CdEKC~pK9t +az1AODM?UOEnW!kCt+nA&2DUeaA}bHZjNYixa92Kl5P8_%;Ko3(^*!STBNyojV{<3m+}4Ns +L`(5lAq{YpM_6SS#B3v_J3Q>6U{QN0VMDhNr-|Hz`;1SMI~U@2QZ2+Pg4jPHdw}> +X2LMn~jq-i2duRn57NZU)gomr-Zj8P^BZb1k!aAvUzI*!YfP^26fI}-}f*A5^T>)l>RRCp*0f@dZ$F~ +);N8oU4;s#o$%$1^!WxnjGIdTvD+eTryF@P+$@0$-vfuk}X@g9=Y6>y<2|_+$cRK7f_MTr>q5n65HPkO?^*G&PVs6ndXGD6*x!Z=A(J8CmT3nDxfa;Vg`5&{ETOY5 +7%>GT{3s}IHIS5zcl1V-~(#a;fxL}KGChS6)3sg5j40y4K@SwzE4ki~10jC17K%fcRAfqbTgcYFDJRFx3+5h0i>*tb5-r;M^CM({lr9q-r3Z;4!79EvZ`;5!_fo-O4u5|$OY5kxl1(t +5Q%00I#$Tu5A6Z`m7ryA;PPxQe{wfB{++Pu82cNAV;?O_ubrBV2o0k_ltl>uZ;+n#B$)Q3zD-h9V~BA +xOIv%Zi7WuxdmK%+SKnU>y>QyC$Q38cDq2O6tAo}TZZ5!%nC~-teJQt)Knr@A_8nQd*wwLZ&5rT;zei0UU};%MtlWl%PTMAi0 +dI$!-3&L28%1G$BdzSfM}X7mQkE{CBIBzG+-4fABDn?7D9w938#E82m?2&S7GMUjt23bm2Klt*Hs>hh +?79wN)#GOMZ^Z(OxFbhTSL6azDm=p?o-NG2sGaDiUtxWR~@TCW#w%?bfDt`V3@?$U3s9a&vY1tU)_ro +7hK9--EUS%8gw8r(V`%8(4-v(ELIIq0q2w1BEsZ$pgVVrB?~v*m5FU-pwn;!2xI~5N7}@$ +{G$Z2ZjxV9J4%kEq>Ej!b`X4*(L@kbyA-X78AoxBFr~p26q4u&yVWQu~_fa5j`K^#S!Qn|!_*27U`Un +htG()5G_QPGuoK5xV>q*htY?Rd0Jpy=Rj@|lnTusLf_<%tDSQ^xts7XXaMExr`CBIJLutrJBUL`Tgqc +A6^&o2jggb0@uextj1Ra|asso2X_X20hlIH^#a9N^)2HcHvs0>knXDGR`Dn}X)~6DhEx(YA)Gb-Y=I7 +7{w^fIDUh!;!m(Re`Z&;%#;f7ZLa|W3X)F1)&O#*wSLeh#Oba$UH+vZDf5C1`LT$r(pjXA)>Qj*vtn0 +Eh8yohKPRn)iEW$c+O3-We8fB|jAdhxK>aUnAx#@$naEbp@v=rLh-R)~8I4fS`_ +}9=qd)qpM|xOC^0e`o0oLYeukFVuNB7`l=%*plmte?nHdTZUJ8Sh=o%}q +6PB?K9XUF3~q^D)<6VoFN>cF^mWp0V_=&okqkPAOuev%3cyBXiqW4o+1`+G!8r(0XPcWg48Q&0nf&IU +cg{_vOADFl6WqZ(FdGvvK`^YlXz|(X8BJ6tBLFm&)xp&6trQ9y4J~cunVsLYNxINM +6+xl8YUQDn&pBN^GTMK{pp$zU~#<-USTk($(~m;+BxLjfh +d)q&Sae{D0B{_0b_>3w6w9wc;b1RbrzL`Xqq&9f{8i{ea*zy4FJie<21_j@6a_?& +2ztE*eC=#j#Bwq8sql1sf^&QbgP-!6$@MrtWi__(t}j&`G11!FufI9=9EP$`Axtr(_UCN;R +!fnLW{9t}|NXdCAJ;1cY#qn%$?pK}OSZh`n2!d+d^syV=>tz;-!5KNfGXuky?xU^wkeh@tDbTf=F89Fl8>l8Wz*AZ~>=O{GD-(w%RD{egvMV*1p +07A$IFb&LY8jVVAl*xkP%`rnZFdhhjxAR~9Bx?1H76SmvH8?-#|nCfH*64#6hKZL84?%|pd$@lgF`%e +AuzNvn-G+YX9po%V4Q~4NNF_>C6ZiY9AWAkaWDvDTp?Tg{4Hb;-p87EBF65nW%fRr4!yk0!oYeJ$xQO +K?d4!NRuBS0O4Wx=>H$F%wgS$&P4qn-IS1eu@oA+*eB1sP@ku3xyAeoHu=_z)T+&Xqe32E`a}x3WQoCyYK&Hjh1@mNmQ7v)2mXDi1i +S?!@A>xWirnr11F+ +^1n)#D$ZZw~e7E;E)tT8;Nl4PAt9kB!t7)*ZDp@3gI5!)EpqR;s?KNUfrv#l`X#D&yR`XJ8nA%o%e`n +C-a%^VB(t`FQcc=cvcZ@T=C4oq)22&sH=qV?GVh~P%tg0M@qDc?5S$|=N}b;B;&v`qULF7em*0b-;Kz1{xSgEpOZPbDKwK&f#rLJr{RL;F +(kaGdRq3UcxxxMp4$Y%-Yg)3Ar27{;Y~LoJ-UR1)Kos(i2)#Y0~#pbJA&A7%;w>6Qb7@(AK(PCf+JN~ +ViwJ=#$(vb0bJLxxq!{Oz-Y-?(U4$9SsY^mTi;iJ05kf$0(#E3i>M>?UGT-RgwDEPTt*w>DT0(8fU$( +m9AG{;L$s+zcytnszM7ocg@DaEz#E#RBShAOPdX;3*9^miVKWy{`qNwoEk7Pix4lOrIB(7jm<_U-ZE7 +m`jUo9Lf<;Yc_6vfok=E76y>6aM^bE8D7a<YdeS=t5^eEs2XW +AR89Nb5RzuIyYdc*C4o!Cq8G9_JhsS$JyCS(jQRf{5xz4=#$h)++zZO|w>ehL{bN(>nj7&nq0_NfqbE +;VKZCj618Y27@VhTG^hbmjuH#ttWpDQ=NW21jPI?pC8$I1xtxn;nx+rOG5|Oyo!aXB{Y|et7_5Q#2=1 +3iD$jk%0>&gUPrBL49Y7p>HJ|aSNf}yoBd&M}|5WVP`R6ovX0C4TG;yp+tJpF{4B<5E>}oY#s_Yoy`y +f$(gfpPRL?@x3WafTGF&qE2-E!#Rw?Q7MwDe? +nMk4POp588P4}5s3LPS0^V&#HzOFz8`>d*F`=hNV@A-G2??j05y-KzgRl(es}vz4_$r0R2);_;GlH&C +915<)RfSm%?YbxJwaA4DM3 +kQa~mT!jV~=Szo(9A_U*1paM;(7QFKvEVL-@QlQ!(mRBQCvAksw2zcg1a7H7<8zMzvK;}b%#kJNsW8} +3~QHX{dO@}_dLE{m)d4Uv%h?#kTlwel!I?7wg>tNAdOFBD-4^!(KRg==qK7 +bvkDZ?&O-ar`%0@oE3f8ZjaL_6w-CU9LsIqXn$Z;<$c#(5ECDo7j`OvspM3fB!2Y6cI~(XEI~-%ss4w +FNQB{C;#S7P-Y}C8iW&D2SD)KadESs1IZ!o|1>^%G~&X;G7#z^ddJNW!y1zsFP!Z@eZ1W;Us#a^p1x!q(amP-5>xEYWI>{&E~2n;s2Dtiu!J5Cl@mbD63JIa{e}V@8n6Dh +dc|OBlb+JUL?6tP5;DBs2p=zx@I(AjZ&om3c5>RN{o+Av+y@Vs0(eh|lHQ-gMLX`ex84$o9%t@{=r6L +J$~&>EsHG1ZqcUGhelzp9lyv>%gKVJr9R8g$lj^Vki(dP6VIh5maPYdW4{qg%N|V-EexNH)Jq%M5S-F9kvXd1a)CM|jC|Y*a@ca0JzuM#+NG6iFJHk@U>}yR?MG?B#TMOIN7#0b7*4m)J%Un +5&1W!OHuvQXkvv@#tgR!IC0F#&f!GBSdo^-h|b}JC$QphVj@sm98!ha;&+yS4oFR~ot)5 +uUv37qiqEGEn>m2(i^oHT%^bi{0~;}H<^W>&8Olj|1Qs(XWP})b8Z1ueJ7TbyV~2!U(P{jVKNT2mglm +&`Q%R9Fa>lZRc*gn+Cyu!$F=KsFEGsurB6xls*{Ex`l>asurCkL_fm1R(QyGgl@_2)&p#9i^o8SjV^*S!oM>r#aFHSI +Qc2Un2umaI8QF@-IK8s#VX7~^F@duvRW#{BBgKR2pm6ncP!xfJ+irifk53j5s`mo-L=B;wWc&{&i)Z#tAMi(l%KL2;_=8T7S!m>kpRw|P}=+VC4w#%(I{yYJtatGoR3@tHMM0-P#fTi@m&8-Ep{v=+s&Z~CH;D?y +sx1lW=vO|!QlpqR36<3#E-MgO*CP7CH~R*yrjI&`-vcCjAfqzWZgkP)+y(?&2Lc)<@-;OVX++k{^t_! +uKxJ19EafGMHKZb73&hy{VjLOxM}XT6Hs2;rb14poZVbQOAm;~rXQk+^Q6ndwuCwa4gpDNeqPf|Q(h> +`CaX3+7b{RnNuSkRieOX@9(5Qc_0pTmWZXD9IdL%kTY-0T&s`xUX5tb40LcovsnWT3w8Wl$b#E$SjVq%Z_C=bEn) +`nvMb6IKD-Pao)H-G)LlX@zy6kA!m^_d`xi8+!-_2Jf=EA{z+-=%eh3;H##PSq^vL51roud$tW?JV3` +jL2M7t5;>?CrvSZ;ezvb8LpndYSTO7le;#g?RU^@OWi%lsE2+0G9ygtKb9iaW)J7ZLDgw->g+q!yf;JQ?OA`UbX_9&Q;;0DkwR@LnL7- +1iM}y;QWDuAli19%8n9 +RYG4NoJ7^iPaG=BOn)oGJe(}s)o#JxUtvIwrw%lzP@U{o1yz(R0NT#mfqzY3YBFfeu;BmBDdytKtz3m +JL3OQ?nY9c4=HVg5BxIlEq$e6=BKKg*+xZ@8Hj`7y{9UpmM({d-jo@$il&hD_0_8mWVaRi6;j@>MJDD +jTItZ1gzT`Vd&23%BvM(JrJdS~%YJdR=1_l|GBc~Gsp&R9(e#XBB+tnMxq8yj2~xywWsP?P-jt64biI +ztIzivuYSXBBs)Dx4@ildH!us61k;px7NdgI-Il#0*Fq(BQr{xjgL~X|A-h5qtOrTi@X6v7k +$vuC31Zk1?ov}5VdEb$|(ZhSO=OM6hk`@e`*}yL{H3pX!zQ{-&Haq;yU}Rr@;m2HYf8k3Q7C5XLV3GS +G0%%4yUu>zN0p2)6nAWF?2lybzmySHm5Ps>%6Y{t=j* +TL_WsoS&#FxSu3yo=diCnGsYZcV53Ij=4evE4qLi2z{U;CM3 +EJ2(!%#&_8@dsdJ!w6Df_>N0O#yq^(2a@b)3(1Pm$O!z2==O_du3qLegm7L-RYo}! +7*S)e&A&~YGIK5)W{F*PL2G)^R$(p$&6C4R(|FtmV&kNJEbsefgyKFvP5nYal)CpD^@n;Z;GhA1+9>50m|=@4l%ss<>4Sw)13F8B8gSSG^reR +yG;Ui-*Lp4~$fSXMP(FQlrZ&d6u~DA2O`>#x +rqJ$kgs!bNmf3+v|F-c@grX1%NDy_;T?^b&6!=2|HEi>L_K`O|0rWeWW5@v0~`-+uGW?d|Q0+tG_OTY +fW`PLIENtK6pQKW{G{|Ej8etiQzaST*IxUY_?(y~4Xl^ZW<31yuXLr=RmMYyN)rZ7rn7k3V`*9tOSJR +habD?xyFLS*8TpE3z=`MR~8(?+AvfUp-~AvM{f3iY`hvWzh>%6RMJ`vW;rfwEf%1D&r?SyYs`1zNGNf +{MEEwk^f&%O9KQH000080Q-4XQ?aYPpWj3P0K&-u03!eZ0B~t=FJE?LZe(wAFKBdaY&C3YVlQZPZEQ7 +gVRCb2axQRr?R{&L+cvW3cmE1TQ+uu1mE>1;lg#n>9^0|Az8gQvo_$o!am{ihNW&e9)RNT5N-F>Tq8k +t5NrIH-kv&nlJQ4{sfJURy-Dq^ri+mZKoz2(Px*%s~QLjm-qFHj4lu4eAqIH%`^B +FlylZq5^THc!jh*h$hoL!M@mKT#U`6A$KlIr4YNve37#$`E*t`f4jB-`@dJzk*Nt_b~wFeakbS(2^RR +aq4zUYf6}{E}qJPoyv_(bD96ouo5T@IFn{N0aloB%GZ~7DZgqnfj0?SyeZ%jH`=fdP2Tb-ZBU!p8acGR6D9NiYQ?i0?-8;N@@7|2eBYZrZ<wU%6x!y3WC)moQ>r?Legvf{oC4a-a_o~V$c9aL +Q4Xpgbm3>TB6fYIjPli&c)3c+5&QM**|P{222j}_)8u@DU$9momI(fm#o6TDe+mVkJw4B7+h1pXnp_Zi>g{3J$SI$Y$ls0le}0wc=X+O-#z#O<$r`oW#?wzkB%I?EK-gdt%brN;;2@H3l(Rkm`i~e!+eZm3OQID_Q~Yg)~FopZkc-`INz6xQ$j5g^VRtsu +cdZh!;?g6``D`ijxfJoO0d4HIV+Cx3??lOE^79UyhQ2l0Weq@|a?n?jB$E42& +!1It6$#AHW#m{q-@kwP*SD|Uot(Y?`1}X>qOFy0zdnEX-CbNOz6Bw_*$asZ85jBNY(}Oz-P`h_mO6&> +bvA`s?> +Rw*r&6{=0hPM#w%*(g$s|Z6V~}32ql3Sr4po6;5h3kNU&^?Aq%3iW0cRM;VLi7EmuGY|z|*GH@oOsZl4j;Rql;s~3MvyMR+q-Rj(GnC%VL-SA}{hZ1s;k_j +iMPwf+MXiVvwrSG&*<937JhISf{`!wM86FDf2(440=lCMdVZ$MZR8KXfPymYFqwDefRVMF$^6=MVzp$ +h6r(v@!*)Vb5ay^l~CSAvT44iyuJV`&_L~nIZJRjBd+Qsi_cTS-bYKS)X*}?^dd_0MM)7vCqMzEGj#X +_$wW0>YxQ^`jd32jR&#U^EhM?~TA)=$CNzyTp>Y*Pt6c(U4PUwWOy7x4izE^kiqdo +ETAMV~sQC587)mayHVYN*dblPjPnS_%*?E$Pso$2A5=KYF`Oow`NO2uKrz9h?I?@LHq)|I1ZeaT-xesVmneCdms~ywCGqiz!` +O+#e$2nm1;n-B_o~KD7T4GKr$XPGt4J=sX-vAv&~{Zjm8_$c*0seK926MQi>d?a=&kr5`wGIlGtDmA_ +gf==}Me!ff>Wl*;7~Ppl-O44WAX2gls}VRx7|TzI!@2CzQF8Khv#u@Yz#^;*au;3d-=wa;;rlh;OhYU +G+e#Ds!;VVv#PcQ5gJcONF=UXqJ>9UmVk|j?5`F&&F4Ak-(!d$aI0j1Bo<=VQj`Kk4v^y&v1uYGy4KwG +tDDY0cU^d^%vp-@#}1aH)jEhcE!9CZNTN@z>F)+HhU;w1)MWZf|i`rgV7^ed3N~K0oxyM#BNHD>M>PV +P+7oR%tRtyf91P9{@XtP3u*R*230ELm>2^(Uz{xFEe(#tm@ub?$V8RqkY{ODR~$Rvp%dqc?x7+d5~~A +sNX8g^OJta;i_j8Q7dzy#aWBLQ;NUJW}d?AjZ*YwzJxJ5hrwPcg}=|Iz+_#8`75O`DoL+Eo^qA1->OU +)Bzi0b6Qy$po$gizxnh#7V8QBJu%1+EquN`ldr<|oF2h-$tp`~R$vU>VXI&H&SMQkMR?DH3;b(%ZPRE +ZvOEJrOi;K%1iUIsx&5hK@3YVe{sGSLh>Hz46WdTEbih`ii0jCC+EshmFHYvnyd1L#wEICw~07+-?c~ +rLwTIvuVQ=y=wEbZrC4iBABRSI!p$1Sn(0Sr@;4c*gt2m^bl?zSy>mwQVMk8+-PomTbR2577sjZ9N%@ +X)*KFknM5H9Es-ti;b$PX|CUgU`5@=<1yp`A;MREsSoJi*&oXfGuVjr^zB)#>FMwI1if!#%YQ|8X8=4 +=&qvQStRnEcmAS%{_{kMit^C&m-K^0UIfdg$lS~tLS>w-G7ecI;rJ2k4vC_S +2FwL3MaN;-X}msRi7q$)40-}euk|`E~f)n9WT?oL>0oj-hp#_YCWG`X89&1vjv%1Di3_jZF +-PVR(O>svoROI$6zZPQ|%>zLzr=yr^#$h_vogL1wTJCu6Lw$jWNPs4pm$E-{C|A6yKCe?9rU+_~ixFv +y$q58NGV{T2U4_euZ`}UPz;}V*F#mqO4*_p;%!;^(K=%u%)QB +4Zh*B&eXb#%cA{zuREPn?o(sSnpZh;hMaM%t7eopv +FzfRpJv`CJ&;yA4h9<(H#da!{k*JXvLZvs5CV`MW>VTo?&g60H>Nff=AGiS1SLS`dYPd32M0nwl`GUj +m+7qb*5GN02$w2fZ8e+$C{ZM*=>OB%C1mhQdl=><4$BydIt$GC<$kSVYe6N|!}e*`$Dy~=X-NS?wW%z +5 +8QsQx(7zzMX7k~I2WZXV9=G~7nCXXL{3x`%>9DUF;taUn)c}we1!dyDY1Ck%h1CW7I<)fmR#NcjXCUr +Ioy5TV0l{Yg*}A(WWlGOUlw0njSPUh{dHOSvg_u`XEG7DUcz@U(jO20@sEFu*O@rTz!y|W7WNDDl2N$ +9K}5?VsM4lM1QD5WpMQ{6bp +rN-p@D0fGbaT$xnOA}`zXFakZ+4C`sfiEH_N+sHs#-y(koGll1m%ZrP*m+0B-tnSUFZ0NYR2Ba +q`R>7?xNvc!QOq$H`XhVd)V6(K>7>#X@Ms3tgXyE&#RU)(-`+p-cSC+ER&~;B44j~p*&qLvmfw**&wu +{G-$rB`|RpUJ!;omah%FZycWOA7T^$zmf$DX(4H(%b2W4s0!Eo+J}dpv(fHA4oi}B*jXV>^aqGZgr5* +^YFY&x|X4rVOCLexo*7Mxr7<@QUYig{c*9}k(qL&wBdWo2!GT01RdCBCS@*-cSGv@DdftvtdZXN;gAe +x$1JU)2r2Urosx*93OHRAL!;E|lj9_?8pbiFWaA@=%r<8f42u~E#Tm~mu3Scmx3%Cvklz!et9&eU +T{!#kCD25gZ)o?!8mU8#}X%qlG1k3lm|7Mr)CQGu+X^ZIEZ~8TJ)>XeD +cMBz_p%s;Oq=0qo_(SN)89S;{!YjiQsS#p+wK3hxUpSrdlXMIk)vb$>uqXkDY)XDWg7R#>@Ng$4#N0)F3j9DJzq8l7uhxaZFenw3~XosErqS*a%pccH&5x&kJBo3=D9Y3zDwjx&pI4F{2O|JGcu*EO{B#ML1Vby{lDjc6L^#c}2 +;QE;-6Vkknz5;&%xL^gTb5c}clzqZ#*P7(jMk=FqXNNTbS1H@L_GiZj0b(&(J7`YWZB{< +1P!mz5(7L#x9nM~(hnUcC_*CNos+oj}C-np+!X6hn1eR0+jN4c>#u(=^|JNRhxbpMq{o)dbFh3c`+l@ +OZ?1zvm#zuSiiOvl+=IZVYm{LiCOcJ$?tDL+9YcNuGaj8oyMI(bgIHLKRwyy77#=Sh<@}&VE~3QHBNn +B16ra#tqy&UA~4E#2Iqa{8L(DuB}r_kbKH#RNabjwkdPEVB$#@y~x+u>@6~`?-MHGS5tTuLvgGJYoFF +J;1>kk?ePlSG%2R*G%o0~IW3q`4Wi1iZRAEHloZffL6=AwtykDX@|1t@#L +FP^knkwVf4dGO0txm)eE&?!`p)DRaDG{SGQI(Csy4d#AxVE7Jb-09#Pf~;QpCp{{%$Qp-nHrR-5q)N- +0BCRcs&dTN-~MTed(Q@Scn;NE?3ON^u{uiaPPRSFvLso>d$ntQ&Kn@U`Dt3J8qWlWk&Bn +B9-rq&K*X-j~-1Pxh2E{Zdi*iIoBjt2}&E$Do>N?mad&_mM`IM*@tcPloIDRNZ_yEynY`&JBHs*xUNo +4R{3g}!Lo;7Chl<@nkVE^1hOoVZr^L1fH`K1^b6-~v^*v2oq&C$o!I +&HGPeVoFY2dYDDL(5B&YUeZ@xnALLF}b>lXPF^a*8L+SLnBm<$w3aqKL9>TY^%w=cZyo5U<#aTij5To +@v{O*0I~%Oq33~w-R*(fg1@^0N=1%Ure3E{}o1{s&mzvDlEfYMPa;d*H6_6RzHNBR$sNFb6tBz8#h^N~ +zyMOCCf$%G6xcXe$86Sn(WzQv(8p-PQe-|Z)DfRe+N=Ps=hft%mB)%#)%B+iHjv2`-IfLS|j+CaI!5hf3-yELzX*rgYJs`jY!h +;**>q(?(fCXc}#IZpf3>|UpH4K`oh$JLiq`qBrh*L{2%S#}@hjtgVQMWI#iJNB;C+RHBq1-#}=kpBP= +{gMhJG4sm|0Fq3L9N01g1JM(TjEc78%PP$ast5o_=roLAhouNNH{N_>Tp=&^>zVr3t02xGr*gOd)s9dWNCh2a-c}1od +LJr7(qRcJsz+e6KX4Eo`C`IBkgT~QN{0Y%{^=*CgRC12b7I_+4(uYzN4rq;Ba@^L{Wri +>3rdisMYXPoIAi>fMc&p*&X*A9>;arQK+hgrJ$m$jKE#__kH%{6CiHciF-8xWW=2(m54ukdgYmB89D4 +WSw(b$17b|H%$iNa-6>oh|~G(3m7OLZHQPL0YlGd`JS`i!$JMj3sTmeyT^=8m~YXZQYecF +%Cw7)=+D@%g$MFY;;(p|Z+>BkY=n1*eUi#j$Z(xZ7PZI(HOFdR)be5C*E;`8Kb6?{%Q92ZNo5N#)Z!H +%Pa0R`;Rh^L~U@2f$;eFfZg%>2VNqAUyb(Q(~!&*bYeO8@OUn|Cs015PSd=A_Gzk2O=bz46b$P7<)Kh +fZGk9)luYdy4iKQ+5#?G2sdEg*tyd_&d7rKWgu2|;&;+9yQANT>7-!Y)7j4mS{a$uf9}aKloxOC3YNH +l1HX%IhhUO#a27abls{(hLf9dEf>@&a{5=ShZft6NiQ;3o1LCF?EFGC>D-Nc^=fcNy+Sd1tF1x)9#X- +`6zFz9}YlG*Cn@?7FqDI#;7)Cf_H0~L>ivkib+!p$2`+bIc?JP-V?kehV-oyTKTT{p!G{Eb78-mvB?M +4tLT!IkiWAU6$-?#9CA2q#TTlh3BD!AEoxYTsl`wJf>lC|{YVt&M +?@fD=d~%u2~Ns!8U6L-_4r%n;EVxwF5>AWq~1inmu|t$l;8ii@&?o}fltQg6r +Gf3MSo>kOnJy9=E)2pNib)e8l*#q!Gm-{#1a-9h^4rRt5HM;&Yg`}Z)3RY1<^lJ42JLR6~>Lis7++Xk +6P&npMQG!=FPZVuLw+Sw8@Lha^eJmX&8>RoT(Fmz871FxuVgEh%!21O;UZRnvcIVB^B|JH}^E~78Zuk +2{#02WGb)z@u+IL4ql!SQ;w&L|*4 +a+LTeV#{8P;%nnfz+I1c;z}t7$R&xbdrc2=-YD1~s}FiXKDI(AeE^ +il%12Nlq{4OlIRxQBz0#e1!?R>@D!a>D^6)vhUsI}93=9B1y~FAcI3X#$ +0a^dfEAFC0HIX^cS7-`7D2P&}uUF>&bb2x2*Jr79S%mWWILS~U9ZMqI@kq?*QTqu^qh`+7qZzT>rI_# +IR2n4kJt3swa3ij^@7q!mZn@|(-cTD&fDjw7$0>*XfxBEMX{fpJB-7}ztsDCxR>rIXu(w +ZnOW6o(nM+0m-k03vK4)M9ZWp%h>|EVJQSKmm8KyF~mbD=d|pQQBLVTaKiR0-rPTBcAvG +O;Y$-73<|&Usi+XV*n=-Thl?n)@V!`g;47FMFOLx#W^@zOKepnqO|mjE8uP@7gDPTe5d_HA9T)8qk8X +0C7&O-!H&1e0XeI!=BS6j?1JV%lwKA0gT%kZN#44!x7=liJiL`;r=%pryRV(5>bRpz^?9=&Y;I$hO6& +O*J~H!BUJYYtBeeEKC&2cXNy&%q{YP%V~KJJ3_@6<5zlAj63qD8Emxv^u;4Wux}8fx*t_wuY*)LOtN? +^t06U1(G)5P3wOL>)BS>OU!tJOr-8#w#JYC}$jw~M>@OVyR$WBakC>XK=P`Iw7+p+%ViWJ*uTEstXqb +23gP9adnLN;>|kD8;EHV0tFBiEsV2j)tAIFV2q13xkH^6F9$MbKqF+&QVCN;e7ip&ps4}p +o)oAF(lY)NS1*al2qsN5$>6f*q_IqRNz=d?yFdm{qiT`6BX(-rLq=#)Ld0{&JcBDGxZ3kKlG>9+4^ke +8|{t~p~yJZ=nbjWSaS5sG|5_aKKQsL9y+DT6|siVCjEdb#M`*IH1kc1j~$zz4NDyDHqlFlX>si2bvB#>=j$YO2g^XTcSAkRk8(=;i80G}}@rKfO0A +JeWqi_X)0dP$eX#th-Oi8D-aH>0i7r4*wlRmQrZ`yp}XA-_-Dt~-=5v*;+KF2r=5iJoU +0K!%Uq6mqYqsIdkJ~HsC8#>+exr5Wtl@gkx4E~%xI1V`w#0z2QMOJ~@P~uIm-!~MKrk7@!*9Fe#fcMbM5btl$vZ +{5#q)TET#8B*kd`verZ%;D)G-%fQT=jw3df8x@~pld+zb^n89^m8!0l%j>9v^S0{9VIl|cg1^-PGt`1`4%o#JxKT3pzFd6A?u +4+c+7u^&Dx`f!`n@sROOl +X{w*^zeXy;lE2r5sAUm4AZ;&6E4r+;3?@XW$h6d~R0z!2|&%nI&R2YcD@D%Kzf-30 +l+ZUY%+OIerUTL9XC-jE~E^lS9{zTCT6f=8(iqn2myr80cYjw2y?3$_qc*a8 +ng`!^ZnyPIlB%uff^}WI+uz>R58hg6?8Ohr5=&tEwXG32ax)%rm^uu!Z(+YNU-K0(XQgL{8o6ec_YQEh|3!zL(bpY5@-01mKX>^1!r1J(N^-J_loikMUKI(?>a66_+^emWj9E!TUKz>0ohbv$x9~c}1o3>TO*7drioD%-wrK=JufQ8g0kg% +%Px@jlzkBe=JvbOG?}s(_M@-yI#;gf$RU_xAT?QuwT`|VXxVC(z51n)F>8W6h)l+ETVtQliAIP9k&z@ +rvrMO2zmqIKN|3&!ErZW_rZgG2R<;04Tg-d&Xl}n53STGtNpntgBbH9#|+yp%0FPq8!<2ZF)J3$a#Cj +ZtB6G>i9CaCM7mPPZH+deCXNB-;{5%8Tr!V{C +GxIbd$juG0#g9+9n0+I5-YGsd4z?K>0I37}(=~{>215h%s@h&46v-HKbEf>$B-)R=?>%8F*Z@KhmiC> +%7a+)|-o>{XR$=j5IzcjZwUrM*L$wjnm{O%vu(iYaJ$uHndz-A(O;P+S9@zgya#HAO`4Jg`wF>5*Ktg +JjWvnN}`kK6`p&s=g}qEZt`MQQX2MRN%3B@n*5pV6=FSr*(mgg9kgCTGvBX +kU5cw$Hq$uK(MA+351wvYEgcy2iC11&CJA@}Wm;%qHi4(Xb#Nga>-K2cri&e#*f7Mrm!n2iSf4;rmBf +xCqp#><$^*^W^1biK@eDDw4cM@Tp(cG-6)I3M%Pu45u;O83oxW#KiWF%ob|2yp*ghNG$JNK) +9vQ{@-022e*I1B@6m;u*!x#W#2d*=O01gC3SZuM=J*C~f0p7;d#dR_V-sgA*k&>aYw?96Y0$v-RV6|v +NBw1w5)fATsyhVXxt^7qvh4%FV)0cI?m|CM=Byp!$j)77<_z%_#S^tT^whla|l#cu?3O$78dDOV{SNY +iB=Dm_NhbrFyE`IWMBiZXECFGvR0ATj-zxQfh6Uc^@b@a)<5FcG~^c+^kU!$#v^3K5q^`^wR^h0+qXI(b`w_y<1+Eq-@?mBe?3uWu1D_F +`XlW9jbea)zjK%41>?em+w;_C5(u0eM<5#tx7n4=*A=&KahorNNA!U+l)lo>s+;K33m`L^y#~?6(lvn$6?y9gFdv(8#eAV=(pYGe|+TFapZsv=kw<11~v2SZZp)lFs_M${U4 +YL%Yx?S-u*!BCEP*{kH=l`-+_d4K}u?C-2a$?9tD!Tpj^5_c|%Gmiu~e*=OMwy&ezcw@{EYZEu$~Q8E +)?_2>5wG%Su-?J|6-ue=cdv!70SYzFZNin_@(NS2V&p_EO{d?B5|U$cn^FRs@$uiFgi|4gSl_38O$~exno!#lXh$ErptEPi~xPO{s^KDDhs +%`>Evy2AJggs*I1%s7VKsaFiUk6H$67cpVp~bUE+Utq|BW&CpS?Z`7%w{GjiO(n>hk@XQ~YY_Y$Cs<9 +Z7R-!Z%M9Jl@AAc#W{9VF+O8vvvvnP?( +MSnlua@iS#duC915z~3n1UI_l!&I=C{7o7kyIB;(=aFFrIuHj8ZUK2&RL+;9Mb<)WCD8JfdKoQK`qEt +QbH@=eEX+w46xt`_5zd3Mm60;ODfjVE|n1lUckk0%5*39jH;h1vWgyQ5A!tz^kbf{Ugm2qzdUqSd#pW +V^J!In8hv|o&zcAh;feLas{e;$+C5+WubrTO+7QC@8_?${CTKVphrlT8wmnvgpk0~2D&kH2r5~i1|e2HR#gp!Pwh-W~eFk3SM2L#}B +^Nl;LtYRBghxy8{zYVT`WOcXRA4q}c4NSuqOI$T9^fZ>}3UjfrgJQt!%Sr +11ByOJ(7?myR`AHuBKcYLj7OP_u4|kJu{4YzG=Ynmq0jkU)YCx)*MZT*jZP#?o%HM$+?x#(HU|<#AGWd^WqdvPx+`S_O{AQ~*tP45*>u2=n{cVmB{H{C&d +Y=|&1MLIPqb&Vi1U)EYLn>#0m!0FWU#g3@%)H|%cP7Hg3_`~;XcL1sgBQUw>?tzt#n;fr`Z?7P42BuaSsUth!e;;|X*wF@d~BG0s&Pi^(ua +awG^W&f4Wb9#$!Wn>UmOwiAeaOUZqSHfta{IUw!OXd>p}~81|9K{^TSwLx|F8O|o$k{q;Ep_;owW(`uPX +YL3)em>vv(Z{K;=WxdIi2aZYd(kz(@u3=_6MhPc5XlhGX+xO@gU4nV`xgTOxC~%$IIMwlv^d+Qf6?ww +q2wAA4I4NX;3o<>M#K9hwankw`zm2&w%W>jmU*&a>y)lp;27h!-fC%{Vd>Q7G`gb*ZZ-NbUJ0D4a|dT +dnev`LjWe4LGe!X0(-Lz7?KpaKV)M=Q!naSVM2aL`ToDrVzyfSktQ5_UyoN57lc=$Cjo4xs=qKljbYch(Cq3A|%gRc>6>mX*EkAWUzgy@r( +v*oWN7&$y+|Z04ye_lC1WXv1-p1b+l}3RW9vaB_ukpmA1DV@UG878=ddr&#&38!kVgv(&V1@wVU-a$M +xAJI(2$%hoo}X6R!iH2G8G5RN->NO!A6Fk1`tWe;KAEAq#qi!cO}r^_V^<67m!n8b369>Ba>_-{h;ImX(Lz&?^4)3+ +X$~QP&j;yf?8~F@y<;ONG~iXQb=(*MT8+NcuZdv+|{8%CAj#| +Kj6ZKB4#{ehUEhG<%~PD&#^JL0S%fLX6$#SqYivR=O%1kT;TN)%kZA6My5 +T6&{<|^c*))ShX}O+pnYJZ15^jx2J36<&0dY5K@1&cc__BPQPkGuKQ^@Dk}W!Q)8PHswGP{h5PjA8z) +jj7R(J#*RDCsVyNhQ?&-UuV)085o;m(MIp4yWX2l*uJA@C84imF6CI+vz7X +Yivv-<7ewdE28^ba3BkyZ*DkOx~d`S9|aQ8~{;do-bdWX~D`(Vl;kcP}CBG{bndMg|>YW9* +KneZgo@lBsC0T+?|gP<>dZ-Z@}515IQZUTu1war(kWu93*{aHPz#NOELP9}9z~#!a^&vpZGtmX!ioI4 +E0iWhw{-xJ-&+m5!BC&mGGHi6dFCwZLeFVDvVzSg?aE+xs$3Q?>$%wED=ym +aC!M?FAzOU+ZDL9SZ@aSVmqb$s$RiG^=*UA?#Xhep#-R2LG{KStW!rtAz%3^a)a)j)WY7aeNT9EQI1E ++0wldzHJ;y=G|df9W)A&NO5*B8YxqwVlu}fel|?fK-95J~~P|?yo +C#-n%*vkvP;s5EaBO1+f;CLZ7Z2)D?IK-*H{udrPzFjy=0&ul8KTEU2XmMQAi6i3ydB<8_MKj(SDD7C +pG%duPFe52U`SXD<*Yn$$NBcigJ$fd69CwsvZKV +mf$p{>P`fV97Xsc{;z1QXJ=)aSLN9mgaHL5##DT}WYRXZ^47%1BIext*9bMxa3K{WP=oy0>;o+rT(fF +Xf4#PgkYrX37psN+1m{Jo$?qHcgUhrTBY0|C3`IvN@uW!D!3IY<_n`-`_urwUbXd(npND^)G;SF@vvE7UEeRq2)CaNTL*q`C?xO{G&Cod#zHXHRq64-7^xRx|#_ +mY?!+Zd+w!9kLZQ3VO(oCoMXL<&w-rA82F;Qa)CbtgG?^JQMAS+t@C46wN3BaHC_z^9I#XQHnJ=%`w~ +uq@6p2c|qKWU(|{&QbveD{g(2=46302P-~MSZ_z(D;Gh?YB`AhE?gotw?w+kpTbz5MM-rZ{b6O=Z}fy +#r;;;FjLP7c&gM-lFyM?Qm$r8c%;z@A=5yU7~9_-FhkKgB>~pPL++7Fey{fya +Dig7ABA}#$~)nre8HmsIQBBiFj*EQBtFsMZfXmA+))MAm2Q2Z=1B>-ADGG^sIX{Ly=LV0xB +VeCHP{Sg7htW0yYsA(8rfU509b@`K6G=N)zWL#^cwlA#0@p81mnS)jsWj)4@IComWW`%C0|$>-1#xheo*FbE%_eCeb7S9?05)eXJru46ZR_p% +rD;#Y{i@l~GB@;ua0;TFU+lNE$E<`B}D#UV5^sWUdAVAL}FE+@j9jLXlO+%?h|T41}z8B>B-`pg4OA2 +Z@*ck4lzaU=*!-QD{_3v>Jz;Dqu0q$r!H!&8b+RkJ4qCpz8b!QfmT2M95XD#LQ(rQfMT*lFuOS1nmrmJLpYpBP$m$Yd6>pRD*^*E9OzxAprw-+RyUf8kM1A4_^^N;F`;O?)`(C!}1G2!a=`z1CRE;8-+ +aGP(o&aKMn7{sE2G32NR7H)f8bFPnir#DsN-u^;9NtssN;q0!_`q*|dm!TG(Mu8!gJjS_ICM7YA9gRx6=S49-nuSTSmOE=>3P9WSS($=voH +}cUpXmiurmGp2*+REdxMYRfwd2%7)pk9v5iHE!6KLe=h +P?e7c@)==J4U=l!*z6%eWw}d +o!VR&X#Plnp#v3_$v|%OJg5TE`5Las)S>(Kct-~M+Hg;%>wOpFIJlE>K>yV8=55 +@a>28<^=84xR*(o$o@q2hX+j+%FTC1Tq{A8q2?=;%m_brhwZHJngTb*MXSKSS`fPc(4KId=djZV@&+p +Dt7rWAr)TjTJg(?Om;*uH{o+mE_28d;#rdE4I4P63{uM9;G=gfEZFD9@scd;@0Ul9CF~f{nhsiemnM& +DB5jAJ_=~X&%?O@=-NF;hZxBN(&@z5HKP6Tq-*dx~!w1O5Q7QcGH~p7B1SBYg&DAcWkG7IbAV%X#4Ss +j{bI)r9)QN7BAdBBy)YLM>|o3TWkC9L-=$t@do%y|Hf{#I=`_SQQ}&TDE2A@^w7||@WtCZ)L;@zEz&g +j#+v68AglF1BQd>n_35$Yp<7kv8{LZ?>v+dwk}$W}nfH9;nvO;2==N(&DDq7|OF}dR33#1B+MZg}MNb +0ml&_aR)Yh-Xtm(k^Xn81_Oa(g_3IJU__U=6!5Hw7xra-QI_VErwl=&UQezPImqzxfd4R2aSH*r0mcF +`3Fqf;D&{yKP@{r$u|zfeU!x8cB$+nAOQT7AsDcENj>1+z&v@m4zYiFA>=%w{S3x9(}zLlGD+^U^$TeII`pDn!yTGdk-XW$yeGr3Yd-z*rXbp1rAhX7?$?AUp!=7Kn(oVJ5c^ +)9(SUTjKx3Y6cM2gUK0VSffv=>yr|{_-^w~gJ*JN1Y(=~}xcP;LkZ_F?ki1yBh%f1~iW8B^~5Dcbq!) +LmC?urDxFZr}BGg1!DI +ywkUwNBHm%dWquN`ybvA<1jajD#k2!j6;bqylYQUmw9WJt}N>Hj0ziaPAfvOI=k3t6(~hYGbzRh7>%Z +Z_OY6kJIXlW+)GaOO^5T{Z;(?tdHc5*2Skau8FsM`@4+ru(l90Z??qA@S3O|c2^M?CT;ZlkMRyq#?Mu +18G?;=~k?W1~?1S;x#bz5#3$0m9-c(VXmbn~OJ?Puw{Rh#DHSE*X1tdlRD!N-_#RljmtkykfZ|u2`8H +AZvY6}QRro08W5u;Bd>P-CVV$AL{((Ar?{7rae$^@ml9PTP-22m9}wSOK}5qea~rYm#D9=1g!werF8_ +@=k1wAbiV_vR*K>f4hal`6N{r>fnU-YhhwW2X}!*6z)m0hw)eIR)B{DKHlS&hK4 +*X(R%qB!*6WuNG^IB;j=UYGYvrP%YtlK=>_L5YXcbX-X4h6@PbK`#nBCc4UBl;T>QhT9MYG +=v3WtwUwb@lq3{aJ;>s}}~(c0I!E;PijWG%d?-Jp0$WtUmqi2TIWp9I<(q$4v5qGJhV#X|+hVs|!%k= +=UG+dvix+9oo2B?R(Oe;aS#%5Z`K5$Ufd$H%pdrMW%V07g(45eu=-s>MnC;nvoCQ<^ho?MPbYqh4K4q +04MTU3yf)+tSC=JJj3@7vEwMss52*&46+$inUfdzwY3JKhxV*UzOZ_TpSSEmK<(u!&nR)Qv64c-;Ezw +l<1k1ioo59C{tT#@UFGQ&(Fehvg^pvE%;#&m3X;VI@(Tp=J$v}0co+bsl&fVKuLP9(;oG=vQ8OqNm2< +E!5(GTKj{I +nDxU5Ke#BXJxt&zM{%iu6E%Q{TbK;DqV6EpCqmMsi6G2IA2qiITf|)-)(i71el-y3(b4-!F%?g +r8aJF1=|?$`^WZOF-({Tp*CTSHfACOM{N@EnRit|V7tgr^q&0!e3r$%~@V%L@((8z7w=9 +xFsYO3{@;|Hi>YLhuAN#*+GGtq65CL-*nP6Q@Epj;W8dYH`=Tr~#oc4e|r6F^2Nw($i@G$y6RIX)WB9 +)lu@s!Eo$xo1VwP!BRYMDwaNs^5@OBhd?nz)Am9cDpx;?Q;`#!_#8b?j@tuFh58ce0Z21TBi}9I_=G5 +4@p6r91}nT)@`R(6_^G(5X~+@%BgXaOu*9V2OPP$twiwggt48g>q40VN~`imc{-r7>%}q+aT{jJ +8^geJDt0I5>xwutm$P1l_Mp64G&XN5jh-gm9i|oAduvzY)|K|E%JRSwA-i@C+}&z;;@5fyfr>l|Z6oT +s_)goP0|MNJX1M{e^G!A*UnrE+8)oJ(8b^<;dYyQ>Jos$PnB49&AASfJSo`*TKvpcC6y&@ +^I`<1wQ3c_)84%u6Pv5{pNWd!CgF1AiM!bYw;pEuq<2Hx1@XKz()Nq*E=*X0P`kQGUviKZ0-6ao|CAB +TE8Z2@uC%E;yn=gyS}Pkh{05bEVKKBg(bjvW$~%Zo*eXUpSTc*w$uwS5%Exqv;P;x-M-huX +!5n2_p+5yN@L9y=Km#J?a-w1n$~UwE_)cTGHb@b~Hm-CV0SW0&wB~jtdXN1c`Ka%qX$0<~GzG9>&{oD +VOf3t>)i>yeBWyzZIVw0<+`#R%YjIFiaJJ_tru)Y?KOC#Ejlt;LZdazW&`yqIHIl{%kX@$;kiSC_fel +E`%KAT?PHKUN2nLmwN5Fu=HjgZ +OHvXhE%NET!IP(La}*~3}tUxI(C4oTN9#oG>o(D67E<6AWH0;gzgHH=J{w74+QyKyL503i{K_an(IDW +EY@AtENGR=I5$%Y3I=z(-p0yMb=I;EpR(sFvF%aXKq7u}tBUsimCd$Ie%B50w(qYQqul$R*rGaj*Pm{ +TOI{CVZh}$XS+-^?O#5PI*K73K!Lk=@O`GM@HA~v+YG_Zvgbnd~&#{EP+MQflRLv7+n&?qu&~qkI|Z!z&6?$8kIf?AZ!GezvdFu@%--d%e=TC}wertj3#Yp#o)jc$zTT6hc@V9(X_8e(Bm +HK$FpHzo!2v!O-))$9i-uj3MUp;>)a$`^ffEMeP5sL*_>$k7gJS%QqsxjO+s3SBQ*lC_WBc#lAy;Va};@_;7WU9SJ3b1VGYN%J#(7*NOjd +khbxrNBlCR7gr$_U_jV}{;1*Gyu^M +QAJ&vvtvOx!1#{2GrtHk}!;A|`3Xn+t7c)}QYek|mnmTZ7+5z4g8{w(Wa0)pi-fF5 +UttlHPyatqO9KQH000080Q-4XQ;2if;kpn20FONY03rYY0B~t=FJE?LZe(wAFKBdaY&C3YVlQ)La%o{ +~X?kUHE^v9xJ8N^>Hn!jWD^Pk8QCnG#-KLw$mUnU!_iks>O{aElvlDx0h=e566v+~#Y;|Y<`#lE$Nq~ +eX*}F5l@=%t@gY(9D0MI;7S0o7LWl`oV2nb(gXc$$nzneZ@;SP=7qI!5)jC*ktVBK;OyXqa1-qLP6@=3oZa*!16rJN91u8hfA90Y@V|$rXf=ggdRK&( +?k?BDQX1klt-5_TQRsdBC|A&8BN|6Mb2j+2iy`FV0i~PX$W-0HavM4(SkOZ;GGv75dce<`imZ1OPMqF +K;wHrJ0d|@@JcH%WGv_-Uh-}=fQgWzPJ-Xdv|u%tR~ZYDLqVp*^TxlWJn>s>56RcWyYU9o^NTyrH6Di +M48&SxJZ8T4#e)G`$pEffZ`eljfh}mbc^aYvvis%TJidAb*9lywaD4;Uw{X3N>pQsq4A+~R;wJI-#Ws +U0yvgC6!8N~mJOTVCfd2&Wp8)<7z<=_3UwkLP#R+h6@&>N&;i7N>jgt_r2ri&8 +qRagL#^h`w>|ao{$*AfnQC& +F~pjc@Q1^R)) +=ldoW=zVsRhxT%MNM5hyr${HkB(P1n~h-M2~u%9W +~Lh|>p_`$HSsA;}=Tg5F-n#TiN0`02y-nG|2}6_05iZwT7tC0%7_Bl2=lz&k6#v4y8g_RIPfIK2m7h} +fJgi&dq=4)qBXP*^{)qUWRGzt%$S+k^(D$x$nur**CvTeu${EJaFSmxpv}RlPr2|dL5 +0JoEeG_HnBNC!ASyHYbzZH_5aXR~rg~b>A2u$Y11V2HxyKU(d1VPM`&ZKeDbGlWHDv8)54B-%WYr1V> ++MT$#G9AifS)!S&Ad`I2JdZT$ugU4{uq}Y4vpxK^L&?CsO$pa|OVqBXx7k3i4{d~vWydtjKrX+&Gqfx +kW@yg_+@{1($c_h(7p(BZY}nSfgH3R`iUEiOU7?NVtosyj;_PK;81cZ1rSF}24x6+oowX>rRcP^c`1n +GcdE^E0m+TRR`*J$D9S)7T12tem{HpSR!NU>JPNTqVDtf@SQcccphyiwK=X;%a;ElG%h@p-lg5{jX{1 +4{yBrBmF#gc34G5qIYkp}kT$zuAqG+`t1r$5#3d5~s>&x@Vk1R*&k`a48C{VQ0?|S~6 +j0vqIcJek;2lUr6Php7*olO+5EN;{t^tlXG<1y(VM}2`Rgx&k>RT7CCEx_2_J+VGDA5H%XH>}lfTgzA +B->2F7#>XSP~Wd(J{vc9#(%y3=|ioa{0@fFg1|fwBm}t%7HRUz?4psSVJ0F}5Q>TbrWN?*BP5R)yheV +zxVRv)GOihrA2O&RK^wX{mfyC3H~d!6jjpQ^(i(xb##Ev62j__6;(V4yn~U@8;;;Ox^W*H|{8-&MmQM +%68cE}ECb|(xSG)+6qG=oybRniPsH>3`l_jGQB9;I8Ngh3 +Y;fb;v!^mOcRy@BPK-}XG=O`1rI?lme>t)o}k5p6)UJzxnPB<7K{N|@UVo+T`Is<2~B +{ZKbo7$96EeWAqRCl1fsmx*cZP!%}oq_zn463;#merRLCN;Jbl3Y +HDgP<<{*fFcUOh8yE_P<4@;J~kVP2ZWT^q2Pek)bj>Nh{jRRCPexMs6@2ijaq*oOUWw$y|ofGm&FtXr +lC|i^onl>71=1%zTr+9Y}uEaxB#knCYq^y)&!v##o`Np5+erd;b^J7B`F?o7d_>^fgULuCN10bA}W^=(mt{;04piDDD8=ZMk{PnI8xa_XYNZ~A+*q=bc2Cn5qNXtA_W#yP$!;Q~Be +ZX}Jh($aBj5Qv)Xn`vd7Baa~L0+PJz(1O$;tZVx9FWfE5LBue$3Z8o*y-5rsM3y|Ed{L7HI^?cn#k}R +Zy<_6WJSLfwh0;(W8z;UQ@Gp;DirA3Fq4e*38-o1{qm0O7LOszipu3OiycJ|eGRQF98cYsa>FHdxWf2z?0zowOs!!g94LW0>FkoyKhKr{g*_HDr!wPvJQoZxL46kPM@u^Vq?tVB_Nh~5S-gC1A3eBC}PQQOfJWZF- +ELqetcmGu(z>$3z!M{89Q;=&`B5ME11(9Ize!0HO8Wd(xXx^IVzQ49F;<-o*F)D5=4_wGFVuoJVXjae +oO +<>MdZooAV;TfR7vqP8=BSD%fYJW=mx`0b`^&bcU@dKV#C$#vmfWo+xJ3{^F}l*kdMRb%3Q +Nv;(01KOpL`!q?R&IWq2HWjfZqgS9Y@3-K*vxT62cUMB;mg6Vd>$<%7H@6{#mkSw4$fGF1>A@^+a00M +%R7bQ+tGI${dxTppog^ydJ9g;(fsXCk-MwyE?A>I5Rs{dHo5|VbP10iN1Ci$=2SNp9U +zl&iCitowbs$`0Vc$-u$wt-9@Mg`MyVEsjK%>b49h`h&BDI|88y4cw(1lU)dE?oo>t2j62aJ@Tf;+t( +_MJ%+ibB=wq?4K693morVQ{Lahhc=B}=oa)LKgcowJ$f(-{C{2cnt`gi=^@-0{ohB|QKs~8Pyx!y<@rolxlrxHU@KWe* +eqb^#kF&U`{Lm@@74kUSrp8ac<<9tLUi}lBJ~7UtcTfMCM47hXxy7ygsM};2w6}(ZqSt<$S|g92xn$s(bXX7DDB7h>qhna&u@67niT>b8N0XZgcLn!7 +ua_pP^Oe$4xCE;(T8pG^D>tQL=NL&Xd%vUXvT(TM +aa{n(f=ZdYy5%rC<{m##ZBrmspg*g%ZA?g(H|pbTZvGC*^~d)gC*&=ZcZf@s2cpbmip09nIqV)(Qqy- +rtSbn~)qW1A%{w3iNA&0$aqpfS`n-#T@7rJnh2CtPqyBw$cV7Bhc1L?7FpGIpTyyav +%0d-Z9-oAxA*s%~=ZhEGYg+k={DP89A)ehsE=^P_sndD25&?m<0)nB!zH%rTmWOXM7CX4EqFk80Ksm!;Lf!rA!D2)tyJPc?2daPGF@ +OT=e0J%l7hgUlG&3d_R(K?s3;$jD>Mpye7R#!-dm*Ab=ft5Ip<+Of^dN34p7#-F!Q$cA~g^Ts>(H*|G +Rd(h}P6MP<6GaaG1)|$3QbR@)UJlqzre*DcwD#dQ-}jkYiMMM$b+Lms5WC#e+kt*t95##KCyh7HTK~H +V?$*U#>=?zB`6HNSSZo^L=;>LI9B;8(zY4bEbD`_%3Obstl`;DHWfEa2{LD&tYfZbeaCI +L7|Ibve+w1w`7viF+=zG-oE?r6Fj%5-huT}fH^oUP%hjw(-+o3r%pc!a-dPMRBNxwQedLfREE{x@ys# +WXt9^6TIuJ_zC{DGAO{hD}Z&h-|A(Sg4{Yq7sp6o2G}Dsplbri%oR==OGL5>w~cAVv~{8RLg=TNad*- +K+6mV61C}YTMM;!@ZaKyt=cY*}60VgFAL}QF1BGWqsTw(T8I9-y-RrG}p(GxS2lCehEm(uK&Qa?Aqu^Z(t+UmpAjWp!_9Nt7x!fD*#@?874{%of!bASX&YlPEEv?}mJB# +}v9S(<%%||u+)bzs1H}yV${!A`^`Q_s;US|JUKpw~cC=jw1+FZf>*MhDZU0i9#{$P_et9AvsEvASf>oBoUu+!wKTt~p1QY-O0 +0;p4c~(=>c!Jc4cm4Z*nhabZu-kY-wUIUvzS5WiMY}X>MtBUtcb8c{Pkd +3V<*S!0vrT@htwpUw9KKQ#&Zsb#$BH?^VQO0!ef`kSMm=oQY75Y+f;}#k5tXk9*wZlp>aTY)LlTnN%u +!&;k(O$B?f-o?IA!D5yTi5$EnT-2yjIO9KQH000080Q-4XQyCiPfu;cf0QCa^03!eZ0B~t=FJE?LZe( +wAFKBdaY&C3YVlQ8Ga%p8RUt(c%WiD`eg;Psw+%OQn>sJh$i%p${^io*ZLk|sv(vU-LAqd$X?TTt8Gb +1N!O8}?-V=6eOLc{6OhtDtwL@hwVg0+O;UM4(|MA +Re8_8gDH&A!2!{>gK@sOLd)b8-e=0_BqEEbFJ +H3w2nfLbv^MruzGBAR1ejKCH({KkO`Myo662({U-AHBngDV-bW25VecwT4w~ajj_6@6ZLlZH?AQAIL- +nYv8^^Dw3}X5^=d4HA?XTGw`y^*1HXI_>aHY__D*R&5Tn +QpJ8_yAOHXWaA|NaUv_0~WN&gWXmo9CHEd~OFJE+WX=N{P +c`k5yy;aL@+b|Hk>nj#MQK%ra*8n=CMSJYYw;&*BX%#O@lLAR4&fj;bhegRw`an^hEY9w5W;ujgXHOt +y+lStvlt8D>x&Z3nt?mQL@w@)N*PI^8n`#e& +|iUP)7Xgg@J(T@>Lc<2T)f-e!a7SPL@x2M0F7oK%O@%0kZNm!;sIO+#YZJ39dZ;*+>C=*l&2I-Jau0; +#zU8`)yXk2Z}vs-t;Qz|44>Xty!1XW{G&PPv)tAu6tjX +LmXhTDF9(zyI~V*5g`-&C=q6^`7I37PiS6C4$_6^Fij~Q0N>t3Ai-~ec6l#xmf6113o3qQ_^VIM}Rwa +QLrgC#~5m_i-j-)Xe_5(epgPSC*iDF%;nntYJ@>LDNhYCJzpJnoc!Jc4cm4Z*nhabZu-kY-wUIW@&76WpZ;bUtei%X>?y-E^v7R08mQ<1QY-O00;p4c~(<^ +umljo0RRA(0{{Rv0001RX>c!Jc4cm4Z*nhabZu-kY-wUIW@&76WpZ;bVQg?{VPa);X=7n*VRUqIX<~J +BWpgfYd3933irX*{z56Q$U*do)#?t7$nWrc9F$` +c#Kk*dF7_h?_A_E>%a1)bR)-`nYVv`NNhRNGDbYz@mis({N^jf1?sYgt7&9%WfYFTJ$-TfXriqw6!Ef ++=6Q4a>0qj{pa(#iHy0TN|d{veU$0cDJ13}dv&1cHM;#GDqmJ&MSjNK)PUQ<3S9>sEp@UI-984wOc03 +HXc*t?-WoWcf@H4u@~S)8PPG7?N=Pse#{=YYB8CgfNU4l`Y?M5ORxC%IkR}`Ofye9LzKDJW{Gf4?L65 +{DmUtLbom)R6Y$O&(~(q+nBg1*0bk-Tnxyz>^|&esJ_i+Tf>_AxEB*!hbh5V>*PKvb-!8WFIGOf@r*} +e`$r7H7jM)zax{qSw06x`V)Sl}sS>&VT1G?h9G=L7_3)}w^BzIN_6uiMsx#$YxmEd-G4d}wl{J)K)Cr +yc!_-i<2_9a*n`(Q9Qek?-HC)h5q%HJ4P*+`BcgR@o8&Nr=YFpnGct7O9J=~t?e+1q{?o_~Dq-F_sxH +m!sl{s%vvnAIpxZ*ERO9KQH000080Q-4XQzC%-#FYR503HDV03-ka0B~t=FJE?LZe(wAFKBdaY&C3YV +lQTCY;5+cFc +7`-6&gAj!;Ith>?XaWNhg=|(A+W}tiWQ_fJD%e)RW1-S1V);HYQG@lYrf~@9nNuq?IaI6s0xR6+{seM +X4%e{9dcPMu?i{DNDqY&_c;6tEGrl0#PmyDxPc4O9^APalPjnJkN`Bt~I+7xv>i9-K^P%bB~$j`~J23 +3o&Z8T%HwxoW&WhG~oH=&BgDZ*Ehd@ESC)ViV2B|Wxx}rQkJN=ESx;hQ5#jqbSgjr&Fd?UBxh +EAPr9;S1zK9dQkyK(2P57Ui)#*tCe$}Gt9v48L9`6OrvoucC0rc8vD(Y@nA-X*A3h5JE@or5)WHbdOK +@D&s%)2tK8r?fR0X$Mx*iYOH))z-8Md@I!aY76Z1XjhY*_GDA{39f^@O(7F#)~s$5cp+|@HkhZe3&Vr +2d9e0uU1Jp++C8$d|TQf*Np2ZLo6eBti@9lD~aX=L@uLO<_yB1AJr)!mb&D0AZQy-*%Qxepwc-V +2{)t{GgG=k2jMV#r@RHDR*?#AyBzkQMQnwvhZ)kcnJ3_GCMPaQlX38#g1bGf3zME+hmV5wPR4CDLYda +R83zwjFkLcQ+c8`s9Z;>O%y%FBaIb~lRjXYzs?`MHAAZ +fS$iKI@!HJ%*lTTG~&%8P7<3q$srViiY9Xi)SYN#5+=B@&o9`?o>^jHhX6ZX=~zbH`yiCb +UW9yr0(BqXM?mtrO5ruA>6Jw54k*(Jt)d9Abdf_<#vfTkvG&Tdw!GWZq_8d8WO`gM!>*@mF?*`|2TL=NLQeOD5W>yz#8kuh|4>T<1QY-O00;p4c~(=B(PW@(0{{R!4gdfo0001RX>c!Jc4cm +4Z*nhabZu-kY-wUIW@&76WpZ;bY-w(EE^vA6R^4jbFciM`Q=AFP90-1ZKrTj?LSgKt-EK;7Rr|QnYD= +CZx6MZ1eMhn#|HR1>D7#v2B1@mX^M7&2X3(0iV`J_<^ +yP+Yo{(B57=6PM7>j-=A;ZzhEC_-m=f=R5$Y~>VibeH$wg`ZJjIl4m$+8;+tDaDTu^M>+nbLq-D-!6D +*BJ;4nUJXgF1O9uoHjq^IcP2n(mveZe=-KOC4a6Q;{HAgT1oyt#f*X?q_A-u8qBjf7***6=b-UtB`8z +{x5-Ax$Jp{mv%J+6Hrh5km!zOYQlqge*c~poer)I#-lTdxuxx~$6uN+y4bpuLx>j6MyHHJ7tc4N7=xBQXKfvt+tZryss=zhCW=%{yFBmNdXL{5OX&%PeDFz{7Lbb+KQ_obC!x +I3SBWjy;k*#}o^hhQW6Q<+aDZ46Jj}1CO%2iO2?TWnYtJ +v>BBU~$83q^dn^_lGFY;}oLy!^Y7P4_|fWka1=u(y8(G+g3E%%H0SZZFX!tqb!rYra^+3NB?A@B}(N? +rK3w43JKYkD&r@TMNs_fqP>6;FRK8@on5QuJtUInIcNGg0nMu%3(^3(sej_<3Zyb)3@+j|RuYAwiX!kf?0lN7 +%{UO$*lS=D`u>gyaZ|*CFGi!A{W5Y$YNdd!eguDeXe%qIeT}we*yP@s!AS+)=JlGbKndN7DnxKCR;Xm +K{Sc3U$M-16BsrgV>}InW3sQ*M?Gh?WMKH#{m{f*` +4<66!La_a|=6*LR#OeCa<_Vo>&|M6wd0JS4?bAqoL7Qw8h3&xy3 +vG2aU2mG$;OsN(v|QT`=es`9;BD0tZZT!34{Y#$@gp}nJRN@r66_?_Ul|5_`b=jyMR|-8Gs%U`8=C&; +LL1!CRw)OnrDD+6qvJ2l}NSdFw+v!UFFopu^|8L?7gF$rGQZ6^uA$aX7j^nhlN^gfJ3s8T=dmu`1$sj!|nu^A^Le#T{3}v~s`)JsbfevvC7W#mscprgrZQaj$C(ntadbq=$ix?V +!($0n*u~K3maRk1;wj+F=s86 +m4^-1x@1|;L=k2k{02g2QE^ +~=XR}NKpgVtWa5)K^8hB2!L1;^3?}Jf3dlfkEhDUaHM?oCW5w*xEk(MD)V`w3%E{W>{&V?lq%P|H~2VWrZzNK}?4s@$3bv0K@A5 +klT<6dkQhGhn!)Jf%`NWmq$J^*mEEFLR$%sU@B6AAf}W@{q|+VYjip2(#4t957%!5zKqL`}WFHUm7homuU}QVy6=Wi8f}8`OlTbWS6~=Zi<1^Uy9FH< +CgqFrY8K`ZZ6|nkpEF42mt_qcX|7WKx5MXEXPUix<>by{Q_^YYK4woW@qEr^b$Q~N7E|EaER=P~t<~f +`%;Cu<^Z*abX^L0wwcBIST6@9Brir^csrPkx-j5j{>t*mJtRpzBMz{zlhVbbURAr^5-2q +bp(se*qs<=@e6#Q9%S~qRxcF6O~AaD7@JfQ(6`0tvHwgTvZ%vL%T0i${8TPsF?Ali|6&;#yrd|Z}E?| +-BF(p^ +L8&_^0*mDD}9(YsKey5B1~)ou&BiIE*~&@(+Dj!%8LIM**PNhN=Z(<&Y5wvJF~cm)o4P1mG}m-Y`T*J +ch{v0lgwCi+_1Q2}#VUjFL!RH>EvEs`!y^zuFSPquq>!bZaNe=z+=U~19vB!#1OX?qjR*%K1>Ijtcag +_3R_wQThGk63qpPBktq8e1@6NWpXZXd96MDcN@2nzw58q(s4;zBITrM@11Pf&vBGC@0{A +ta+CHXg$8#)648Dcz>=a*_rKo^_6xh1CFETBQh9eU00x8k1hD96H2R+Bl7~$5C|JoX2{t;3{~U{D@b& +!b`O(oO=fTGfmppjB(K=UWr>AS7H^p)uX31%d+&s+kz20Q$sZgrm>h#-h|McSHB3NbeNTl#LVOnHqz? +NB|1EEzARlNiBS@7|@n6q$0_LO9wMI5u!r9pv4kAw=KYL+BCjevNj0tSFQW+4ZVo(Jy$Rq-I^Iw(|dn +`XN}q=DY>fB`863A%-8h!c`9JRVM+=+DhDU7{y +}2;utt^9$bxn5HSpHbaMn?Yi1XTT0{BdD1hIn7L~CI6ibB`pSeVqM~xsp3lvD*C^)Vw{2sXrSQ-U+D* +{b(jVwH9zDGyXqoaCa=J+t_5A7uQz6JbJqCzELOSa?Dg2zVG6mS4I`q*IrNz2l!F%D&Xa}tc%c +zSZEc)64wj8JCjKJg$$k>pBwkRP_EV8*4=FzOE(@)*^e|4y +(k=5a7nBzz#)AZ+!#xCr!Z#$eJU)!ri?Ehik^8Wc1QhQuQp7Y{OYs1#SSanm^0mS}`G#lzYY}JjIDe(nXpVo{12tN9At$e$72{bG!6tf6SIX{f{|x<7>vl5R +XVD%wshnJ}7(`Ug1xQ7+kT>jHk?FV^V&neWuyh2}Ji^0myRw0DqD_zqRKNlS6->q$dI>oGd2@C1m;Cu}DE_n<7ZXzxMsa8`qY +`QvIW5+5n(5j`jyUpY8C4~l1gwTA?cT`N42x@DgJw~$%Tc|*eVrZK?7y467&V3>`=rOarWY^;@Jp%;n +vDmI3(=_-^W*R+ALk^STIGb-B-D71}~L+;3Fx#^&7SgJGHH+JyA_&#uma!BO6NINf%f%&mMNq=`r?+2 +_#2W!AO^>Bu4R2R*UGi=H_SpG>wYvo7s%M3W22S}E|dWa0BSxOI2ZPy1DQJT_JKx3X3N}ShOJfQDA#G +kT38`H!5AX%ygGm#oOj79!#$RagJLJqCI)F=^O(Tdd~DB4!l2s{Q-)Ztz*^_s1Ql*+-HVd(==l{`!y9 +TzmE@jgGy!_6(1hvzL8DQEJpl0||KWSBPUL4<_K+X4A*P`GBe`f(UZC?(SM%s)P`*B&YIBV_S@?GbLo +@s1u@$l?caQVvDBHNw#HLsPCZ+E6wK+ry%xc0z}T88c`e8w8;}`l$y)bEZpE$0a>aPr0H%!#}L-gSgZ-4+ian;FiY~7TlU#1TV-LPoPs +;yz?Lk$#SGKRbefWwrJ>XMavgSTeFKIBG3QbX?)H&M+pTq=bYpE%1cu;1F|cdnFlU)*h^R3B5>`4?6^ +3A^4-}zPQAHaU0#e4)wZkA31PYd|RxX$Xl7bX&czDa5S?a86*RYr=XA-~x5_D1A2cTO!i#rO~fPu}SO +DlLKT#=7NH^Q=tCD{o~tOM=Xcnh|Q9cCanXKSv+XQxvvvwdU>=AA6EhVvCGT)m5U%p6s=m#iC*!jZca +O1558Jc;%xK^;#+z0VzF?rLi%sHkD?+;-xr8YY=L{xwRs+}n$obxEPMtIg$turqlZPATXH(oxbvK|#b +FDce9B4oq@Ka}WkL%b|GF&0{L42wn3l9KM=G+Qi-%stc68U|9jd&QtT%U0|(&e5D7h4K;|)CQl8^(sd +^;ZQz+h8p1-b^F$+Hw_Slku+mHt_&Wkb2yepf2oTy#?M!C^w!+bJi10Rl?&5M?0 +=k@~v18|?E5wrLoaq@c)pdzGTh;Ls7yPLZ(lwcqZygXCl>yz6Ad3`?@LsZr-C#w9nXAC%in2=^2n~Tu +Od-`hp)#bx!Q?wr)Ll-gfkgs&lQV6q$n(z1eFX>KEYgTOGY2%R-S|Uuh&GuUY;;5S8kpq+F&1SWi?rk +~x0A;3r5j4`d}KX`p +yWjy}WzrT_LK%wMSp5sHSw=ep2oF@oI5;Tc3vIT>deFe&?BJXlO2?kM{OW}E_NdgD4K;4~>bzXMK6T4~LPY(Hh^Nw$`&= +`r8BUad4oM0&1x&Lq<=vz3-yhZ{#^X_L?ac5DI+__jKHUuANp*8AfoFnVzj!BHRGh6j64pEGTt&plrY)%m(bJDI4+@nVW+_i!q4(u{ +JJ2ncI4d(qUj^k%8-&4l2z+^__{@=e%5Ea;4Y{_ElTw2z5tm#3O6B0|-{Y}#CvI>6eDzNP_AeKPx$kR +gwWTcj-ZhDJ`g?H)rW`+paO0i|;|FMNkNpECOo%v6LvRojHy%@52z0V^+*z8D?#z@7h*) +{hNpB$7U2g_ur;9ZxKzJhRmKXv;XAy(+T}szsS>?2LR0t@%p_`mqrN3paUR1>ie&G@e_-6oNm_Jxb29 +|1%6Y&PDTfy9oiJ`pyPS02xZro|ojz(x_Prfdo(t1a43&&rXqYMYFM2j&v%hg9i1K=6Z>@uT3<2%dI; +yZ&eiv~_FV67BE-&XM5cWyL^A2cmROibW#O5k+qw0buXV%|BdzM~IUx2XXObuo0f!@`oG%m%h*zbILG +Kr0W)X9o9)>70jLaKXIbAVMcRpb*G>(wXSJGbwvV{y%3~@+ytql}W4FyM~lz0TQ?nYEei*eGgR!Tf{m +xv8G7v5Yn5^L)!`T`t$IT#L!k7xy42A9ds7Rzf|aY^Nd_o+x4R1tT`T_7Eu2HcMm6Mvz$&W!$K-z*Nx +6?2&VSVy*xP1JP@6d5v_8<>(*5^{6aP@;tayg#pW=xSgilrIbl=7dnd@c;MY`aK%W!q7P?2n4zr*Cm= +OMuo`Hc=Ol_1&?dJ>}*s)wJB}tl6VAn&NgDstNEum72_P7NxFJtyuBn9+Xwq)sQ6_C|%bCP0K9+)7D0 +2VVm*5-g6RNT-c3(R&6S<*&`6}&v9P``9a%Bij1A|b04x&~0LJyfqe=38c$ui}j9<^{iivYzYZ0vlwO +2|56?1Ykqz)Zd0xDSrjpblzf)!ZWKEFKZ~qHeE!_j8?eMTD|A2XlKB@%-9NLw*y*o{9wC*nNwNzOBD! +JASuF)38t!dNQ2mI=VexXq@cY%44nrOn}HxzKwrEYq}^_8~2GVV0%zBVM{VJ15*88B{CwVb +XayQPRk4cnqJfT`-Xxy?k#d(&HO^HguU4fw}d>CtPDiO^0QmAmEp9iC7j6|R72xvI}T6|52T7*wx)$? +TWH(yBOWpDn#LirKu$Y}bse`sB4$m5!QX?!ucUBWR|5TNU9(iH5?pY}IBhId6LSL-|F!CE)_UH4R&FU +bUhvT8@I>$=d0|o&BO2LJB6Wd1l*v3ztbNRn@k8tqn1*FxQfd$-E``h0I&6lak-$5B+}iVwkP#a1*eg>MAf@J!g3iHp5u-7 +pKn=_QKoNXj=y|6oxb!F76kYGN(Xy*NSlv>S4x3{Gk3V)nxMHh1Z2Ql^JMl}NK0hlpmcH(kIM)@3d9oerDu{@>bNS4)}>(Nz8J5lW7qpbqueC|5g^Wl7Kmba;K!Ki>bShInLanbVB +z;LD~yenbcJ@uO*T-fy(4f~0(Hm<~2<%dvr=Tz{X<%6~g-Xc1YU!VO4YkY+l-!_jy}SqhXmYyh$#kRM +>$fR=aWsZVIgQbR+BGN{BQo+s<`lrjXJ=39NX8xIV2rwgnJYyrQH_mfdWs@)s@Q~|;@DNV~sfIeeH7GTrwOHx@iv9ylhTi(pMwFmx{Fo_sDAb4&D&otzF%Ctx%lbg?;kEtFdnU1D;)*a#CsjFwk7$ +!`ma8Gc>m*f|M+lmIS(#-F>KWw8US-WVPrZn_c~%1cupP73+Q~#L$MO@y4*J{gQr`(d;j*`#rqFGUR+ +w_*$Dr2@vmRrzW*M{hhA#CUv0O~ZMu*g)M>+5fzJt$;yuFX93xW-@+W9_V}#MA;%`5cn^YE>^3_G359@W)s`8?1zdb-lqZn +X$>|qu{c+Q3p8;$A7wMke?Q3Y*iBpEmr;?;5) +e$*C}+Z!s_Z3Lvg1-J}Tp57h;-=IGwjP}Xql+}EpORe +f@wun1xKG!%j&D}$HG)};?P3{F4;6@+v>SgXrs@=lqTNv@9hGluV~&j5EsZ`5;HfKfGw0~W*WGmLS{T +W7A$$0Ph6)3|!%g5fhKE|=ad*1T&x6rxa}%r{bz9CM|F)|2JFYslOe4xVT3sWJyQttL||1i{~<;JpcmP=}W0OTxa@tbe7aS(NdUkz=c$*-&^wOlid9F7a1Qv +o{WM+sC{_nKZ~lBe5*)PUub0&N-OUHvthL8;u@{C1EY1wVqxOvgz;A`p)h)Gp40&| +CV|xYp5zIRhGAEk8+++oK`F&Pk9tDw}tlXm^y1XaZIAYdbyZbWu7tC1jw!9VDeDVOJPSLIPvh1=C)09 +coqAW11FjM&?$s~V*L4Jx%FzxIFW_3uCODs-OJ=&;TvQ@=$GP?SBefRX~?E3DTr`LD?v4RKo^!i%e9E +06`z|vd&tD7zr>I(nfOs8{{EpT4Mu&QBLmq%L@RZekBZd>9VSLc0RH9r|$gBxB&=u1W}HCpan!8M~Y5 +pR8Q^SpkTbUJa{<9B$6L+~@I(*<5#b*Odp6J#+O1B;su4p>8M0fQm2WQ+z +kJ}Nrh;lDuxX}bS;Or>OjY?0jB|PXbyhsh*;b4;C_8&?({)~r9=H?^T$=D`nJSCadUDx;`8U~H*p)|_ +vLae%$l_tXKxYc|)264VtPp&8M=jzu-pz~M1PH&E1UQZvc_CYWXz66^#6HXk~3Fx|9>1T&jgmv(USHm +l#ImisoBuJYa|JpEO{^Uyrb?8@)^B_StRB+eI%i+2X>zead<_nVpf>E{J#lLY<-%zOujoO{IPS{c{6S +UTvj`^IBlMeg7IFrE8v`QX`?A{`B^!)U(dNB$f52O%n%v)FL1)ODYb1;c%QWr8*y}EHM!6a2xI&czfn +@G1NU@kOIAXpuk&^gQT`i03jc&yGxkJShsN_{ZKQZ<>0Spf!wGr&QV`u|+uDpfa4_m#44r_;leJ$n9F +RgCQFF2)dZJRwlZ(9}*R`gsA>=z+PZXJ)>JFn)xR^E%G(cCLPs*l)KRV4uytz6p+l(dmoP(NV8TDP%~ +>>m~rPu&ijkM;k5f9i1vg-RP1<@1sU1FzT?@;>@B=Z==0qzps_C-S9qzKjW#f@o1c@KJ2`H%?e1>xwd +(U{!P}NSB^%bUnf^*C(j-|o?okG&-f2F_t(4G_3nOrb*-*a2`6ZIz~R88 +9Gew(}6xK;!RVoQeuc8(t`J^VE=V=?8X({Z7jD@98<07hzJ5aJ_A>LT#X1`pN;zq0Cle_kAeRobvgS-?+ZF;l>>WPD8amj=dYoE8+<2R`IQ_K!#)XIy^e}>x1<6MQ-xw3Pha +ERNt^#K3?z61aODgXcgaA|NaUv_0~WN&gWXmo9CHEd~OFJ@_MbY*gLFL!8ZbY*jJVPj=3a +Cw!KO>f&U42JLe6@-eSHsTrEbwCe8;O$y0Jq*YKL$T>qoh%uW+>ibGQMTMhPCH;a7?DUmd`XGvtm&by +yU~vp>l$P~80$eCol&F5dfpe%$_MGB(FKfJHm1c|Nsm@2$5@Q9$XFL}F*tPact`b448W%b2Mdqh34t=)gMB@eUg~t!D0VSQ!(pKdpJs?}`=;p#L)OF@iby0R$L(D`OKE51w#)3D$Q3vTK<(BVJ! +t&2UpiFUl9(MeYILI#g&;{*CxW5&@IQ&d}mK7S5y=YtH?70>_VS}uopnS7gD_u#In``*Q5;Lk(U6pPp +RU!Wp^bg#Jw{hC|SD%1-tvh{NbD~&VxH^6~&vpT~=sXymI@0JF!h18NliFL;j`ZlJo`h$JmaNnFF?`7 +D44nc=AMpPw=cJNz-D`LgN2Hz=W{Evd^FB*du`x7$;Q^mT)8mgfZIS+yG@QBeJr1y}RXbYEXCaCvP}&1wQM5WeRrrs=^IY&`WM>Y*T5XrTw8hf+dzchq3aq)Arv?VD`WTJW@)`Tk~SIOi*m2 +&z>sq7Ps&!ihR)$R5x~SbN$7S%jErA^NU~olhl!vJ|)I8Cx9H-Wi-QCPWgp_*5Hec9RLXQ{0ke44@b} +?Swp_ZOMb)J4ylDxHr#6*Y`N$0*ah|o$;*PpbcByo43@!3RMM}Bu@~x!2Y)sXGOczm>dIYUL=%C4tptCw(P8yw7tW03VLtLam9T}5S8I$a0@W +oSue=`>SX_DuJ|MW5*z#~}tQ4Eg_x(Kg5xbU8Q5jhnCLldx+XMdrbOZTsMap6Pu3s6e~1QY-O00;p4c +~(c!Jc4cm4Z*nhabZu-kY-wUIbaG{7VPs)&bY*gLFK1TScv(qhfIewi)P^O^IfRTKx#m)YPz#>Qj3os(OwmGnUXC{QOy~ojrc$xa$hS2uSqQhrDE%sEv%U +Sk4Ix@DL)b0Im%aqVF^kDNhQi04ncft~*y)G{IH|)28IqYJ0$|ZVxW&*hAq +HzKTJypy?oqR{|MB=lM=Z)Oz`DAgRil&x-O+p}>il(f06}*`2BAC*uVj}Zf+Zi>K#K9TH3N&wVL(LOs +Mb=h@km*m!g^#Ep1b;1st?kDf{DP6cCgbbDZwystOZOOhR95DM`-_-Sp$S#k9@3Z~iH8teD73D~pNal +E(F7*okJZAyseaZ?=9;}~cc3=_QS51paJ}vCeAnuJFAfA?7Wm(Nih*m}90rgz=d%&q#Fok2RdsOEkHz?$LEiYy2#=|ws?bHkhB=z{I>ZgLIcbUCa`&)`X7J-c4UW@Her~iz^XC1t<{wZ?0|XQR000O8`*~JVfN80hL;?T+@CEsJgq+2HyI1op6`yU;^JAuSY^V6^r +)Q6o!6lCxP#|9eNaqqXxv_psGrwVsdn-poi!ZA}A3QFp$xSQH?e)>seX*%{S&EQaq4DtVAj8l6F>Woa +rbl=NtYa*WjhY@n11yByj)n#J +9ZuuCfzDyrf+2c?foKj$ZI^xmGjcA1nkZlZVJEfyKKgPRq4l3l*)=3NNqgUP0JE;o8AEaB@Q^Sjvc4ER +IS`q%J(I>!)nwj60VzXr)DsuEuCO*YH9xo%#Bbe2DByhN@6aWAK2mt$eR#Ro$YfMuG +000OM001oj003}la4%nWWo~3|axZ9fZEQ7cX<{#Qa%E*=b!lv5WpZ;bUtei%X>?y-E^v9BR@-jdMi71 +HR}2&ckqntYZ!ZEIz;%qaK;r_5o0p=HR^&+BX1S~GE+xA~|GhJ_q +N}wX@)MP`k1*7+~i-Y#VJ#ZTC>>-3~q42p_dA1II;=9OYdNKiUH#vh1rIuIbmvxrI?7v`ml6Yu5z96?&Ku!V2EB# +FqStpD*FY)$&UQ0JkYHhx-ZxLfwQ2J%LyuXdBV*R3U^no2?3%52_0Johxy(VX(O}v2xA6qNd6bVCh+a +N*%cueH(+`TNN9R!k$jio>FXxzA2*f!Ym-taif!vzvV6c&1M1j_z)Xv5amY3t<@ta6C7-@uL4VkQvsB +9bd(oTkXqsR8}){s(iFT5q|a2M3Xgv_+9OZ)YwrJWq;C5MX$R(oA`z9u_nsbppB`>Duzh4|M}i`t1r@ +5OyOucU7?_mkXHujzcm%`4(cHxV-*#+DP%(PFZ6dNT2)zMFpxT@DKxg2QyT*q#_e{1++6{4vfP~ptNPfy6fUdXHZlGMr%hK)gD|jr1Ro!Q~|T6w$>z0>M$i +)hU;pQlCo?zn`N2kb-ms-yu0f)Z;JC&y6LI^qEXgYZ5>7xHbks*&|TFyVukPOXDnHc)7g!n5x77_ +e(7-wRRrsWVy-vnYRxrP5Jl}_gZmq+?XbjytcCF@m(#&Nsy2C`D3%-of`$~^2T^k7x^L_qwPtI^u>C< +f5BKX-VLy8@LuRRCi+=l{n0>4B*RNlvYq5&8`OfI==w+kxi? +Iou6T8`6OO#R!2IOx|7SwSj$bOyf+YHGqy#>jR&}PB5>Y41581w;yib +K_PxkuQ;?a{8>gFs91~AzKXBZnoM+?q&osh*BS@pa$DDLC1yTmFmUyJssjE)GaZF&`sZdL@>p}&C}=w +D-#XOasSAD1|74MN`dJ!ZI?_+ZG`>{7a9EQ3`Ee!Rpn=_TAHHy8VN#J-n%?$4@HKerz4LQg+Fz~5!tJ +eQpB}y^&0dBXZ#BF;cRX!I%WyhJCOhvV{{>J>0|XQR000O8`*~JVK0avt@(ut1wGg+JG@{{^K3gJ)t=ty3??t^(O`+un566fP=GN@D;><29ic;0u@Y-m(#SLYy>=>GQ;mGaan88m=}Pke^K*|&|6*#eRlSMU9AP}6>P(sx1!OEH-bspCl+kC7Bz!?q5|!-R(g`(f9+RtS%fm7=QP3$GXc0pA+n*gZqwtp>nGv27!ORl}C5*>Gb30l*{vMwQ@i;rj>(frSJJ0H +o*%q9>p@dqE7aIeV#UkW?kL@m#;)TX_EK8G{eLov|?>`b7YnW}Jv_GG))`Itl>~ga}s8?HLFIo ++v7qwxL4wFApWbS6_c}%XJ=<+#kB^#SctJzvB}I*H5$DZprxA5gVzjfbptBN3>b}Rgn$LKa3Pjp{j!$ +k_I3=cEUlF}Fb>qyMsOnl4q-a$Ud?#3qUAF(M#Jql1~jQsa6ENjuB7p|1#mja5T7gmz1B7piPG{`Dlr;NUo$jB&i@RV(r+_;y=KkQEv~_&$27$=pk|u~r)6v9 +Jbcz5|a79%HSl1^O@I_xxLjdCMiZJLCeqPb0xp0f!@JD63!%c#@A15;SJqS*~TZaKvW#Du8XN*`|fnv +M#F@Smjj}fby=50V3D}{{$$o=8dfOOaZ*c3J7BXc)W-}LjIC)&)M}&mcWhF=%9HmR12(Ed<8OIa|2$w +W_J(?1T3pN2_zV9?FND#=)E?LQ~N;SdvU!n=#ximRQ#-DJ-!}2)bpR<$4{dXduZ)+YENWxf>Xoe3bue +8PuP?kV1ah5$KVCJy>b~-Jd2<<0^)kjMt^>&*+cy;(cKx)G~U_66yVy!hH)8+|zkJNCf1sJ5c+-$8{i^a31QB6;+-F^iY?ucD*!> +8`?_X5sZ%+aE=^y6BjpB#j9$|3PnwpCi9zXvCHN5F7RuhND$WE8|qh?AjXQv?u%8M=h8EV?2Q43c66L +quf+L(4)OGm1Z`cYD>c9i(#oHXC1%t)A@IBjE?VA;r)GKqTa!OGw;45jajhCQEmqRZ~#O<;yQnuc_zH +!EvY90n516g1tt1HTwrzKhcTocK|eb%^qh5>x)&JmN`6jWlvUebo9uw_SrIT#74ar#|`;4t+D7RZ|SZr(f(|(es#z7svuc!A}y8lyxxr$V4F(&s~TG7`j$ApkaFEV%tL1UqOLn$db +^ixOOp`#20E@`G6|u%_dQPPF?xN$!s6&a{k3as%&Y51T7S4e7ZiHDYbXri|0PGD?z7 +jPSiht=gVkETZ1_UP=Kpb{@sfFQzRwrpxnnQGFT2|mjDML=85~(2tCJrnB_i6`{+wQX`C=1Aexc$9LO +Ldri+T;}r#XjA_T!>cJs>@58&?$VbqOQ4qs^EET4s&Ikm+lT4HU(!W<$FNk+7ub!%wvhK%Wf1n4eUpbnxUGltc=LH@Og)}JF_e3+OaVLn`wRQu*8xv-5Y` +?pD0{nVK^u@@TG>C!rj8Ww&+@>+3dKX~pPd5EJ;ltV)5$Avq~Euo@1hx0$KP{p3*kGv0Gm-(q#W}u3; +4HPf%udFo?E{_zk}Cobze!|DPy3%Q`-3p@FBe0?SQ#6I|}P>S1poCA +i8zLO5ynuSH++?_zjTj=%MWx|sKJA$-8JtrEfnXIk3LWz>qvch2w>C|aSjkWY?Cl)qaI`&25G4RpVu +`dqt1dYs}IC1Sb8v=O?s*M^ar9ThJFybreta@_~Mxl3)mrcUt;9A>Xnk%pU$$08q?THU?T2v^_F^|FEF!t1qy1+Av+9Ig_-M(1e;H}h>E+R_N0qQO*GJ)K#0qoiK +tbH3tW8jyH*$f_}HPEE6-;X_n_qcD)l52o#cM3QCMrtWJq2rZAqlJy}k?Kzdy!X`-rkb)NFO8SGeOu(P_2|7G!_TF3nFp22U)68;I{4t@H>a^U#KYbn@;U;QGz$V&U^zDfWB6-1OUF} +ik7;QKRzOuBh +=>leYK(4nl+TFgsyGQh51cX$n&&hpWG`q>&FFMC>q0ftjtu4lIsuxO757?uMmH ++I6578WvGeV&<>hk847vRrP>bE)j_H@k`lgyi+N8Yi~`Y`3kdX_u3JP&Ehr3R&D~%_9ne`6sg)0rAIn +qLw`;g8g6qJ@%ASEU>=4mQ=tX9S$|XWS}A{_X4G3zhZ-I`Gb-BsY|z*)K3x6z{@0*w78ONNlet@(kob +e`3ml-*%_Y#|YwII>@4s#DDp_7G`UU<;ut@JA%h`mB{F6}-&s=vRDC@drg}aybpr;+gQ@D1323$Y2J( +ZB_scUJc_ne>^uGcNK9a)OhqMNH291?oPvv^sN-U=6Cb7$-XL_y$Y5)d70NB*dSE=%uAuw!p;U4pyFd +cVUoH*Av}J?A=TV9<&Jg84XzdDDEqV{%B@!@ih1-umFCc-|utQEG!xbfZQU5PBIm77kqI+p&tI2@wF& +c|d+%B07dQkj9rbk6*TRNu`b-wR6W19Fe~-?8S{2CS(u`*G$Jr@0duSb2ozb3ELz=V7(A@2pJO$aD +D6Rmi4YvMPY#<2I6jzfTnCZ=4?H +tnk6!FlE!j{gRAIe~twY88ZCr=hC0Yr@#@G2X=l4U0kkVDh(dKI=X@nfS^Jpbc`2U<(`U +wEg4)!r*N;4_YUhB6*m$w$y0;c;Ed%P80#O~-UMnc>sP&`bRnly@*Tl}{x4i5wbkz@znx-t+^Bzt~XOW}&Qv(>X9H{9blY%4}r%(D3JiM3=KsBO-eK?p4I@z +K0*4nSL7hJ~8DZv3&6*e+q;fePS20uTrLRT(9|H`GD8eO-oA#wK@;={PZO#SwoBVOr~cpndnns7^O{h{&WNSYBi&m_g-S-rU8E8lezA85cm4M#5VJ;9e-^)OI+ +o3(8&HT360G~ns=z)t|HqTDv-2IHokpV +e$sIrDYm8QR8BH9h{guwj-$SJ`6Xh`hMU8Ur53t$U}EqVv&Crq5aMdKyoBjp6xLot|Q^}7f8nSasq2I +Y=>(dS=<_{q)J +yQp#6#oNIO9KQH000080Q-4XQ&0q_vHu4E0No-004M+e0B~t=FJE?LZe(wAFKBdaY&C3YVlQ-ZWo2S@ +X>4R=a&s?aZ*4AcdCeMKZ`(HT-M@lW5JX-Tq07sFU@4F$=~iq>iq;)Aq=vyrbi!4ZJdsM`VLyIHij+u +-l%2e60vgxkeev#iU-Gi9R%o$UHoU3HVu9#tUDX`nTUHefCyVxbf^zym8Li3$H6_ieoGc2;NsS9OnM` +=SIi4VRmV#PV6$QyS0J9X|W}4(>!|`oFF7bLz%ex7A%E+3d4|4OOuB-YOp*{3*!|$sS9i=~b2?mHsu% +}g#=J2UNRH9=P(?L;j;68x%Mh+68_GGNDX$(i2h7BobOSA?x`Mmms1!)ej&ud2K$$ +a|des@|v%&{j^C=#KF7YW1$6MNaA%{tJ32$cmI4i*rs}b;3G2L4)0i+{_Bh7&_&={*^Kw+Zs^>#3R@( +7N88iSj3DJ%LI{@m;odnv6reXV5|N&aS4Id6(I+|Cg4LQ5&*GDE5#rqy#;S#={K@r@pS4EWrPFTsuNI +XHbD=#Xo$mvE)n>lG(<+?7LGTd9S2SdgefCne%`5%>IY9t*t;6srES5fi^Z_HuB$bv`6e##>Ndv`_ +ZZz{CJt!%U4o(x@yn+V(G=k_A1KOtERC7SsH#CrC2{-~;xQ@nvwKjTHo2`iDZS9g8rSXN1X%F!sYy`c +X+1mlx@4e(8F}K0ZH_rk)bcyBtZH&1#kD2jfUry46NH5oV?lO0@Lz+=(D5wdCTJ|U+cNg2Gb#8TI;bW +=)~g=Hwzo?HS9^IiG*DP%(*zy1Uuut)EtzVvsvgJ|R{`ysEEPS$6rI?1+oB+oTe+jm!eLyQ+f7NQR#^ +uGCyyWHx+DD~fDu~`xR(-H909`qQ0h$Vx<0w2HEWsfeo9Gbn4&vby}si?k_@s=W)SUWZfgZnRaY2{CB +m+HGi7!>l?`Ym$jIgc@96i2ssxWUYb&?~Z7%kt^dYjMzjJOfa0KAZn>pZuLviUwVR-TU)!>3IDal190 +0qaI!fO;ANAOpE|9(ESrhfb(VvL6(8N{*t%CySW=T^LiD680>-0qn8kJn*n5PT +P%XbsY}a($HY>o$GDC#j-z+LD;d|uw&|wm{78D_)f>NjCBgDso%;2^PYt4io`v}ryORTRkC=2+o;@x+ +KH_<&`712EDNj$T@>}Z)Jthz@E?wF}N(A2ErW;L;^IAdWd`|tIpppZIp%0xGL(v%G&`QZbusrYWGEms +x6nIP@cn-n+KJ!~p^-s?-dm5ryWp3vn*EcBY7{_oUhTh+#=aN?&;%i5RTfhgasb$;j7H&VKVS9|s4){ +U$MBRc@Bo7;kBAMzeZuQ-5g!ys~+fO;h|l7p15T2WBKs8$>Vc?>{MsE*EN;*9Mr*1{#7Jf7604QJ&!^ +DZie(?MM)2NEZGwBl(gT12~I)TtXVY$K`5+53-f{5zNTRj4YRSQk;0?TQIm;---9zvZfyvSjK+Q#!q9 +W%6|M{+l{VMI{Dxds~v*;-D<~oKRY=Ts_IEd$*X{OLf-LX-js8$FjzEqnCL*d2R3aiqxQm->DVqi0;_ +uK<43}352JD{;gyRwVvt-4u+qs9MGwdv?a$3{2FjO9fWb+_?r&U(m|Iy(%7|SxbMPin5EM*amSzG7>Ayk1`?@54g +!_wAk{%G;Uwdb?QjN(n}zCM+274BexEI_uFo%IJxhB}NCyIJsn@(XV6J{f=7k6szF{17rDFR8LrUH&= +v;QY|2HlVwKAD^e62xM^6i^S&wU==E$atQGsZME9oxHZotC+{GjE0&#vDe?WbQp_4S#-p +_T}>8YPOjD@$o|HZ)jf=AC4I8q`DSf*BH>9b>+KC-(l}DDia@}C<=Q>U#ht5wqVu|+J~Yj`e&d0_zLt +PG=cURiuPF~|Gb4ww7)~|6Ca=h^qn$8VkymA%Dkj0GDLO+ehWg5iQr)uW)))NVKQ~&P2JV-)$E`b~*XU?!zY=% +)as_sRj;wVdUOPJn!Me#>HwE*(9&idJ39QSco@uzCdShrxwK>t(GD`ofXc^ZJYFEDn7G{>ixXB)xLA{ +SN-rxeQ2nHAAmFS}oR==WnHEDk`aVfunVSPWYh^?PhOeg;WP)h>@6aWAK2mt$eR#Q!_(1%hA001O100 +1fg003}la4%nWWo~3|axZ9fZEQ7cX<{#Qa%E*=b!lv5WpZ;bWpr|7WiD`e?Hk)}+&1=ozJiruM3c(eG +><{YK;zg816#*P9bgN`6=;bwqpd~~M9##s-TeC=-XxNuG#V$}m#vW2vUKh@9v;ferrMw+S#H_3AxVPr +OCreY*zBs;@tN+_MpmYhq +S*Kx8VWmYvY&7U+YMxI#0_BEN!)RTrNjI^rv8jRno$FY9)h$&Hz+Gk0=#z1mYxG&PGqzspg>KE+;4N> +9^p*04PHAu2$dC|V#RN1y5S2$%=vsXW6Glo}5LssOeMhg%f$ZqPqAYt%Fc>mj%hnMp&Vf=C)%xAM%Mw +Vzr*yUYA$lGmRWTXi%3$h_4?zDERZm6_}aK-^>tP20ZW^#CBmXs*Sh>JKJcndJ_hiX +2CoLb!GxNEik1TGUTR?Z@}+L41RHSk|Zy4mLwr1#WE5mj5ss6Al7`@E-$j1px&j?mcis +O6O>#WtK47;CFZx3h^vD&%0Wg=5vc$zU*G1oFcCNn;t(Q7l*ssg3C-5>3y(fn<99K3`1D>1R`MqMaPV +Ta2@3+VK;zdDE5p{S0Nlr(fT3V(TH5H&ilr0<#8lYnix^gzEtLggq8$)$ARysv>$5*i!P2|%O>8jKgw0dRh)j4{g +y;N8E5s?C4?@G$qH`U{go6bK9;D^J~Xzz2X7ns$-W>FY*p7dw#?OP-j$Xlwn!nC+H@e!MzllwTZb87b +@#y?^6dT*j6k?swe;fYSw+f#nf=3?>nRg$l*c-(q5!uTv#*RCCO?#`K~pneIFsWrHC2Agu>UKzP{kv? +zfNN0j_w8AhNG?}!21XZgpfDnh4N0yM`eNNK;BJM!VWhUQxuKviwKpYxeKmRO+x9VyucSSNr5FJ85+2 +FJF=lm2;2z@@~HF9Own*JEWUMd3T=+)q2-8Z$wIYXls?_1JA^Bey#n$Hizz8F$sBtd#2j3mhbtd`L#1!)0U!OM?twd +yw3d@>^;!giM#bsJ9A`#Sph8c)xjOucsidHhuMKJ*ds@6S|XI)zx4!3!0Nx*C(ux8k{{!s%CWSDE`l` +=CTt8oL)67JWxdNLCdb9hV6aG63ukk)C%1C=^M~)?X;ccpTPqO6<1NrTC!R%;A(CU8#Z3_-Kk}faCNN +^pUDExP^vK5*1^?X3M90h*cmy<9iU@6Xwt$R{g!o3Hsdd7O3&A5@W+Et%DHne?6Od2TUjLO@(KBoqkK +g-{X6|?`&PT>TcKlPV^<3f#vmgRl3!)%xSKdHLKn}7I}J|LG{{G*b-i6j;xou9@*HzkKes}e{uKg?d5 +qe)}1Nk24-xEIoDI&_JOoqyt7odeV^Sb^vQk$oG{Q#1JEb%40J52epf=}P`m4~Vqx>94sS`fV{e+pbp +LJZD^obne)Sh+r{k=ltvh55i|RMFhQZslhT(t98d{vl63&|xQxalg*hA2N{Q2_cF8T2O{axVYcGck3p +T+g+!%u(bH<~ji$OvV>kS51P{%_K>+xU)hv-4CssxkDzfWnJJyIHcuEB|%}_T{|m=)ePpSAlQO)0K83 +%$f>l^jafp#<{SHi?M6Ux9AG+v-0bvpAP72j(J4g%pPupmox>Y+I@tc +oD>MtOx19I46vJJ(A(bi9xfthJoE)-Zhv|CJ&Xqn#gWE}_k|*%)fR1a+47&e0rJn-+pU~h1dVyY|PzE +^q9=)DN7HN;IEVZD8JS6H2kKdi0@d!UVJ2%`Ry)o(tf51Y`IFi@L_YqowIZkPW) +C61X^9-tHyufe$eGuJXmah2@u{{8f#UqQ#%;$5BJ2;vV4CFxEAa+D{mo(A@6tj5MRNI<{{@HxpkYz3= +7y6@sSU!TyT}dCt1caQ^Hk2s7lSF}(r9Jdvgz3^Amh3gZN)nUWU!iY@{n0FNp`lwzz=?JNkg;NHsP>Hx7{yauXCo(vc$4W` +2+vT%@u2b_&E2iRq3{nne6UN#>*b>;s#TNaC2sbIjvWs +jvbYlK43HH!<{!HLb5n@##;orDs9fXBd2fW&T5}IMzc5y}!Nm7SA-bt{Ha3VjwQ(Kz7{@kAzb^1?6({ +udy^EdRe|BKIy8X?kncE;9(Y9DUi7~kxT95k;iQA6IiK6*Qv^Whi9vs!2=;_LZAiHQsl_mh+>$>lGuD +38sdJS{wq+lw`gMO{5Mc2%zsi@0BPfJ_C-1=mD^mA^j`*Fsga&qeLfRxn-2B$Vze(a*h$exKUM2Y?)- +4h|ktX;dH9ehuyg!)(#b-pdN;;7UP4DbTz!>BGkuZdSxS +w9ei$1CM_`S@8YwY^J}Z{aO4W1H_x}FB(GUFBImp{{m1;0|XQR000O8`*~JVu^G3384dsdt~mezF8}} +laA|NaUv_0~WN&gWXmo9CHEd~OFLZKcWny({Y-D9}b1!9da%E*-YVR*L_!v0ic|^GJ~hpM?=BuB0D_e4xt24@$;4t`*j?-{z#s_Tm1&bRvM +MXWo9(u&>a4gU^_r3V^Cpj2T`~BXEh}2>B61Dyvy@S?W)=M6q%KLr8KInPnq)mGS7K^G>+GSOhNIh(^ +K6;3IeE?+YM+;wBUY-c}{ +d-S8hKlWX?5CZN8g+#tgo#YN08lM|(oss#F4qVqD@Z9yi~1Sv{_5>6(+u0bYR?9>#X0b&RgNzznvl!I +-unox31Yx)+r|CLq+Kum%lm`qj`=q!#`P2E&1j!Cw`wIp=O%e<*sEdQR9G<(Q+Ru*&86j@THEY7oERaM!6{t<7FYa;mra(Ztm5wU +I0LI=;5)6h3`f$l<)m%4jp7GZq-7QH?6byj_38ULS!M;ePF#bfOhCFO&#w`|f?QV(o7D6!uGk&>yoEO +v0~t44aHBBzJ-qqnAGcr6{s^P5XTfYTQC2As0j!`NoynJBKzSO>BESYTlALl*z&INmy9W5MT>b`XpUI +U-*$NCSE3!I{L(cNmTv+a$Y#T84ep;@nW`E1AYg=WKwKEQHK3=$p#EtCXp8`$fA(12!=}qjto +%^v^L<%3OvT9>mi9gP28Z#R+ewQTj15-n42P8l6fT1XuvR0tE~)4abPr)5oVB1BbOm@;jKN3fpgN+21 +}S{D6#dd99?>){ASQ(hS&Mbn2@(VHvsOx1O%;P6QuLG|r(4Q_2(e{Vy$fxGKxu+xYR2o2tjcJf{hL*x +t*q)nY8QWJ#j512ev{=OD!gu;D7rL9LI~jCFZFo|#=_1iUn@)I3v>%ZK(47?NSd1V97v_`@8Z;uH(L? +hAJ&x9x~@9V030K5^bN3mIJHzREIvo%4fw9uWMJ#ytOrm%MAEFn;3!oV9n5-QKv%CPK%u@O2-U1AXnu +Zu-luEG6}l6ptHoIg+m?5te%y)D1>>g5J(B7tt<#v-xQfA#U!DJacKzwknwMu>3G()A{d4_rX=a{2lAkUOc$=4*5rcAyeFJ^PCj#(cK1_K=fa +0^fz^y86!9@m(XnbQy$eJ?8;h(MTIpuNc26`0XBb{|M`?wlPQF63KYnw;wCtiLe;>`zC)6drpX&I +>_aE%y~FFl%rvG%mtjyCi`s}|IC)YOh}GEEy}yR&wPZ>i-O{T<_$AkK9W;058m_=VEuGP*|S2#>JR;g +nqfyo7Co-D`F65)j)Wi9@i2S%Jk@CRgF3^602>$!%!Y_c9+b6`VY1_SmyP&2Vs)0FO*k}=s`YoR4Iht +*aHyDB8g?iL%%gLcsmP-im>*7uk|~3T$Lh`a{^THS6B^qp6r8(-qY^|BHo7VHHbgN+?}Y!yO-ajpV$0 +iYO~a+ysZzbFM}vP9LG)Xh6=C(zR+yzU8mG2|yuYnGK?F@!NR!oE>8}t~Y+XX)C9z;9O^W0c{zE)Izl +eNNG3SAYfBQ*_e!9|VU|Mh1u*-j$a;`HHU8h(eL;CHC6vGRjow#AvcFc9oX1d*%2v(c^6!Re56Xy{`7W#Ins+qNCX4*M)`Auk81o`IaW^r|Wlbm1ZC_(_Qk#8wxIB#9URN^a~ +aUFBdpNo`Qv9)WD;EbcX6SDn*ar_4So{XxA-h1EKpucJ3shl6tEG0rlOjr!h9X>3MT@4_;63l +O8G0^!lm>gTuhtYTK_F8FQUOgzkroz&ENt-|8B1_3Ht(2VH&oUS>a?#swAYq-j9&njP_PlrlUv#IvI$ +%RIdsr2zr#QvvU*K<`U?Z0;}(XhwasQ$G>V2*ShSNWXa#V#t;V8kG4|mRry{G}^$(WOz(P|I +gQJj&)Fmt1l-osS*jV`>QX7HS`jeH)qMjW>72zu*LhnHxa@}lEmz*Ma+hY^N_Iz6ih+=^8@1aHTakz>d2Fdn~$JKL1)d=!OHAWd +{PcfqEFYb)6BAW}8BK5vo*v;)imT)iFMI1o0>iwg{Mr#}Z0PAV}xx^=k$>Hd|m~=Zl>HIbft`Yg*9+& +$2^=+V6`8u;C3~z!@Gx4=s3?!Qh@Jp~5!jnmg&2_bAr(sG+*fAl3_!Y7u>i2Dj8+!X?A1zRjW4r~cj_ +R>dkjZ3z{r@%2+sZY-6Pyl#b8a{fn5Il&K)+7<$vKVGz)9J==*MhBH-)pEacVYymVLkj|#Q%hYqtpow +%)KyC87UoDoxmA{45?yV*aSs^X($Kd7_R0<8q6OZlt6hclkQz|7RMMA~FkL-myu1W%pagcOiI;JE=gv +A&5Fo04)g@@luyZG6sOV8^J#d4iLx*dt?;$x_fH`2$(*4>|xR@C0P#<{-9q+WQJNo_E;2D +=a`2!SCNdhKscZ(Dk%sKdP*O~T*3=|RC;gvvACbvtHWO1)OfASKaIaa7ozwYO@Lc6TlfM_EQ)-m}8cm +r6v$>ze@o3OcnJ*Vz<+eq#U`SK1VieiPhU{Uj{gkbo_tzIz$rk1)W?g}n=|gl)F+OfG6)0A37%h2G;d#Q0uX}YiO*peN?tSn|rD;RO +pD0Lz)2eILd<9NHHdtHe=X{@Nd+6LfXyAcelQl|Lh +q)Let-1Tf-YGdJ|c)U0I~P3)_6mfp`O(d}!=-GJl-en^CUBFQ*qw9*Z)$cS3e@M^(u)!uCrvVZtlZ6wcT^|g+PJKcXNU9kLn(v +X?&)Kdau2h08#JMN@4xRIrqZ83hdkdo76^tteLpLw2iS15dO!TG3EvMm>T>bL;?d6%g0y!neULxu +V2ZQ%jv&_-~As`k7fqO;8qw<#ffeTwZo~2G0Zl`!>Aby+_tuj24nFcfRazRc-SJN1n22(jOe1pLW4|; +JWbsZ>@vVgP!GA)42nV^!2#y$C0Q$kv}Z&&pSE7*h(ltbh}5$0t2%jxOqi$6^V@2B`=9=R0T+QL*{a1 +aOvYSYpCwVeY@kNGqhL^X1DY@nD1L+!Vm`sr{h9-QL|)&MLdi3Ny6u-2}LQ1@6aWAK2 +mt$eR#V${YK5K#0037O001li003}la4%nWWo~3|axZ9fZEQ7cX<{#Qa%E+AVQgzbYEXC +aCyyG-;dii41V`t!MZrq>5^dBW3Ut`uD4+iYl}7OI$VQ5XDf*sS@JCT(yZwJK2q{;JJ;OyvH*8UB=RF +gex&GxVfYeaEhUew&O2Tm8seNY%YgwQ!;#4Y&z(CA6hDGJWt<%Kc2By%RfM!U5N +RfPO3rn4_1z~tA4KSjM9CFy{o!}ek65dFa#X7c`owI5Vi4w;;kjTEeS8Kf$5SM5+>3Y*mL0gM>@WjHO +MK6Fg}1MgAm_HoF%C?Xal{jN-7;3F??W{Y!Y~YiZLU+;Y_i?$@t +bj9Fa5m#;w(AQ*JCA`)C-wx&?Wlu@9UueHL(=g$vEjF_1$0>Br>;Ac*$Yvm`F%y=r^vs~!Hxa^xM{cs +d^4|j!-b|w^)$|zymd{)PA*Pm&=mhEv5kYwo>;KopyG6z_%6H8l9u+XpT~=aoIOoapnQLUgToaUi +>oap5qVLcDdb<*v0l6mCJl6+rzh<=znsCzd`J}Kk^uRI +en(OL?a0rajdF|Z;Cr#!yPP7X)iLzi{pl3@vD=Ix-PY@ihjUKkY2P2uD*RH<=upLVT_lq!oTZ1%UO)A +apmsc$X~=y~ +7=naKCtX7+fCRI(>=3=yQ*?PjNurxnZkM#nJ$68Df68c99!dezI)l*Ll5RZ +o|FBp1dAuWTWUl4kZjGXe&PR5&qLl5l4r@w?owRKz~?w9n>MjK-P_>*zT_kT$vEAAW}3EG>YvqKX0;x +>F9NYJcFt>g64j_GB2FH5JH^NJfo%#XwtPLo;74%RO89yZx6)Bj)SW?0P2}fJC>mrg +~D?YxPb#FR^iR!pbL27)CbG}XeAWj+fCL@P7$ETsxM3c!VLu#b)WVIz8Lme0SGxVtehdHO$dFIrhHNr +T-Mv2qJ=`mdOP_^zrXh5DTv;2r}AHy>YDwEVB(o-;8ZfCJ{PcefYQB6K|dl^Zkr{avL*qfbdZIujlFV +MTzDa{@|#bMbznawcZFq@54PxpGBoU`>x$NoNhpie&B>$2ibiujjgOlrjM(0Tsq&GqWfw>RW|NSvX6F +G9-USt2&C?ny6D=pN=V8qMJzqh(Ima#GT2#i_MO{KpG*GFBO53jZ>&|KG4SM;nd7x$ZDh0?m0xir^BD +zIm?6C70d@6aWAK2mt +$eR#PD@+Cmox001-{001Ze003}la4%nWWo~3|axZ9fZEQ7cX<{#Qa%E+AVQgzb2T54h~M&@r^$#E2@lhV&0{WDM&sP`R!HOPHXcXts|id2L~V@6VVdNE +CL%YR3Ei@MM?;p6$Zg7_NzAqk_D4jno^EJHL!b_{=W`mzAlEUu^3N_#KfaqxXa0!bc=q}I1c$T9Uvg> +kc4BraFi~;uuu#GX*=KdaXBZH2mm4XoW&7O)u^8 +5h=L?Fwdq^j*-n+f*ng}&z1ztrzNpu$SBVlI7*yvcPh|XG|93wt56wEwFcXK?JDq^C6H)Rg+xIrV~{& +8Hd5*}L~BAIr*gVxHQj)mQcYntfiecEpX33#WErP1|A$Q~9_=ARZz6As$k$^HDpWefZS~u;A8|Gk)#4cQYIN-8e3BV%&u#|kweOXV +e(B{#8EO3D(^zgqAdctjA{E`iBY-U;GomdK(HpA=?H@~O6zL~<@pAf4jgI8hjN#%9P>C>N+Ow;Dv$g> +;Y=yb4S1!}{;�IFd54FBm%`k6dc>|9Rk5+25g0f8J{(zv0LJU^p}y>fumTk|gSMU0=13X#c&-s*Gz +DsMqES3f?P(bPOVGwU{$Pn+cc +}n*#d=)veg%ZsSBj@@;5i04IXNM+Io*hD{9DYI@oirE>U8t+;1CR)5pnWR_=!8K)a +2Hzp0R|aNi$TregNK7y&}E2R2-qe{0WlW=c|N`P@b2Z?^S>waPjAj=lgsxnPbb}S>=DBa>p39<+LratvG&M{I*vCWCM{RxtX;skD{3A)p49d+21vLc>^7@mC&$PLClgPndIaJ!LcG +Wtb7dTEh4lXv{vHnT1W1P?22W~!}I7E4@0=T-{*pD^|V{RGexQM6b@=@hD +&|junXF3fF|l-)N2Qg^Z4V{NC^;T*aBr_1}HOhx*Ea7y=CIwRt90aji@>g1%wN2M(QN9rvX8fTEA~;Q +6x7>dY2eA(umCf(^cgS)V~-M(XbLqUitGD)^=?ec^6jGiCFiIbYJpJVH52%ba>fMZac&9z +xLZ7sdBvfS$!p5@P?^HXa>*fxlJ)nHc~9ZWBQ<+6m994pFsz{sMY((vDfjQd1k8bgE)OrVSQ^}-8Y!z +AGBsaVB;4i&eLu30_2}xC>vHw#*TC&stScm7$fpIjFNCr$E5`9L(Jy*IBZsZ)rm2ZPYlcIY8jCG@_~z +FnwkjWUxQ=t#NtFbf7?lXMoNaK_kBLnZtyf)jWgOLPq~&Ok05(VHPV1VKSrg!1z42c8*k$|IL)rAmix +DVmzx%dp*|bghe$=NyE3KZ-QnpB(-E1yD-^1QY-O00;p4c~(c!Jc4cm4Z*nhabZu-kY-wUIbaG{7cVTR6WpZ;bWN&RQaCwzf$!^;)5WVXwc$5G_A5 +g#tLskl-4HY8%q9M)`_O=6++UDh)N{Lbd@I?752;bO4($qW1J0aN- +MqlvBLwXfZqGwQsbOVYqE`15S#HiL5hcSzl))JaWdTIf!R#r*4NuvFIOwug<@epSu*~DXzSpszawN+@ +a28A6Jt-yV@-GQ@wTex3&k_xJA;SEf{7Xny~e5)Xhzo&L%d{z`~*6BKXjH7g$5bFr8OESTDWd25Z2RF +Cv^Nzp9Htl7`R4F0R3jO{wGnb99E+d>XseH?8EbO4?L58nzl74WZwI|ek7O#7??n8_Y-#CLsh?Z>}w# +KrhIqY}aCGnv4r@uhsGXZaM%89lIzqABvI@%gt@&K1`a|bEue;%CgPqN>iE*pVod0lp8Dtb@8kmQNrxh`*d +G2AgBl`Y!)_kyFd1m%F8Q4n}jk4zu%`uSsydIZl%9;krYUQ-`)v;)@r3s6e~1QY-O00;p4c~(=_&&Na +S1ONcX5dZ)w0001RX>c!Jc4cm4Z*nhabZu-kY-wUIbaG{7cVTR6WpZ;bWpr|7WiD`e-B@jJ+cpsXu3y +2bU!+bE>UN*9dO(*rMSvwKG7sBeWCA0dZ6eeQNXm^d^uOPd@={>HHX(pz^6t6k9^R3Rm#WNJk} +PXeD@YP1@~TvZ@mpQW+Cb8Lk60!)LW{D9SY3#;%pj4%fZ|en-jXoVQc6e-n&=kfN@buRI~A$%+>ioiU +WqDBHc(`xinX|JU9?f6SS4m#K?@wWbGKZB8;XBih<*_%qt-w +@c#-He}27r6MhZiH=!STo|nOrt-#FY3gD+&NaP*NB;-&S8amIb<_o9%!efu&)0;>9QR{u%lQOrjnBlH +l>}CR=>&y>hr0-ehRC28unf%7(9Wo;!;>)tQhO|~%Y~W!oJZ9`QtF}@U<~S3Y-%6O)MXez_+HfW4y9K +4k_x(@kT`;o-R&ixST1&2WGE-0~&}}jinhGm>FT>wxQgg&`H`CftS_t#zrfPbKI5918b +LJsBFx$nSYiQ{U(m0EOUuGwkYleKnZ#_4rU +?776Pw&W+7b$40qt;zN7=BNNOUYNvH*jzK2tT=yK0|9y12Tx3wP|YU9NSB**4TbvDX6k +EZH4UM&;t^;ip2g|fu=U#ff#M6dW!(*&U4Q&UFGCWz^qaAp +6m#Q|5nog|_oQKF@yipT;D+$ob=nM1#V$X;Z#|U)8r#r02Lq-YN>WCHzL1+&fG%{UB+r#NVWb7G@2EAi{fWs2EG>R6n4VN|T)l3R +)8Vv|S+{Spb$dUiZW-u-z!X5^s=W!W3@{6D+AnvVEU(n!P7~Wu5OM4J!T;5&;Qa7>+Jc72NPmc2>|wPppwN8b$+2BQ`CYa~o*@2NUzE!V7d~{0tt8wwJ=9$_LwaLhQt91tZC7CXo|oPXoA)T=62GlPc$Fk+DQ@%_J3SvO$QFmvM4nc~;0+@neId*-2(FX~~#<9mn{*uDAdN6`PfIAG%E>+p=R>W5mtMnyO~=xP6) +M9R<_&VltUzY(rSC@c2s0nTl>E1U`I2z(hqJi=5dv_>l~F%FRpjjtP(hVsfQvp0b&mcSnu}YO2;zLqr +v43~8NBsY*GY&dC(40Zyh7*q92c6!}mTdRDCe0s?Dnv^`09&UKQ^6cd{{5a#TQuVN0c=mnZ)JbW!Pbw**C~5)OF=eGDzkxIO8q#YaWg&e6OYrm=H{=i_#*6V55@o6uYJZi_GA +C}tKAvXtz=i%QKR4F0^(y##PThAIKfag<<`ph|RZvmCMuHu7T_Qx0U>tn3yj7tMl`Fo46+J5A1fW~V^ +1y7oPT$f|>A3_+QpW`8@u@_MVG>~)*nO@drXa2xkP$DCmF&q*7(b5chg1aYqhv`WB6`|OJ#7!nQt{Dl +@DR@-M^q}>-p+UI}er1K2>XX?Cky=v)vkaUY>&lFAkGtOwE-Y3m1jSbvKiIFN@&4_FYX&(vCTeMa1`2 +Y08RdFl6ZqRgtE~3qe;7W&btSKRPT?JK48zsNH*F&jStbM7GEF9S(h#o*a!(bfZ%`bx+E@1oxV2Xi2jv)=j)qp +b^su9$HLAAW6)ng+Ld>b?6sGm1pFonv$0Y5lV1F;BxV_oV%5@DQ~T9ku$3G?@Ct4Y0bSYY?$A_yZiI) +;&C~@h*S?yVXy{k`RV<_@*msj$viqEl=&W*VZwX%I&nlO5Qp<_(~+zg@V=d%F>FAjv7)OPtpVmefRWo +JF~ZyW9<{6!9x`!o&@&~KKXM$n(HZ?3La7{hp(Ey)i*PtGJZMEZ`KOE-jXwPz +X81z9uT6hbrOIh7|;UuHeMJ=N(BvY`7BAU3aN1DohJ@+$-!*@zA=u^1hyq$#E%@?quTtt_fi_3F& +}z8U}-)UH)N!r%MeG{_?;h0di&%2X`}f-Ma3}Xu`*jcYOaGZwqLM23ftMU!^|XoIg9NHnpZ=~QHO+q$ +DPm~|9R%nKf8ts=6?SvidL|lv1Wh~c8-ILzNzQ1Fp5`?7QZiSIynL2G=&&{X?og=M_8SqE5pAgn62lg +)0FMc)d|@P|Il8z~P!q}248GP!w(A(Ca951zDM< +@pKvpRDAM~;~>`qO= +r8%&qw{JH16!87_WMWAJng-@x8fZU|Reig3;l#*SoDBHdKf;O+RDwO!GqSshE;d7AaFe!ge@q;1Plo{ +e^pFz`6BxFPi)fP)h>@6aWAK2mt$eR#OvSZ4k%;000FE001fg003}la4%nWWo~3|axZ9fZEQ7cX<{#Q +a%E+AVQgz92cuor^wb`t-=En7Z;(siG(_DAQ)0#yj{@rYRO+9})0CLBMEuLWsG7J>d&gZKhgE{Up>5w8E4BzQBXfrGYtY{qRtOzN0Rn)eJUg*H~FdB@7h{D6hUBx+;*`P-{o#^69@YmE9Oa%9|{P#u{V17}_x_z@xWg5CvLn; +(O$r8K>F2_1SUD9wOAN3f}@4zz)KDSfX_bMIK+T|U}eUfu(DEvky`==*oTImZL@y?qY(F7U|FFYBkt2 +HA`Z5;$oMTtxcbeY}T@IbCyZ@6aWAK2mt$eR#Sy|x~Loh002<~000 +~S003}la4%nWWo~3|axZCQZecH9UukY>bYEXCaCvo+!A^uQ5QgtOMYAVOHlB<(54w8Ti!Wfzq?7?h%9 +NC{(YLpu6xv~6LagDIPtxQi&aw@Xb#0|XQR000O8`*~JVWffy_D+2%keGLEr82|tPaA|NaUv_0~WN&gWX=H9;FJo_HWn(UIdF@wAZ__{!zW +Y}U>A|+@S}8~zDj5md9tsjjK*gb{qD?$*7H!tn?ph@v{yVde#Ez2`^@4c$U?;oZJocN}&+AInOUUQ7L +g34$Rt8Yc>k>04(Lb4BGZY!L;dyoO_T{BgwTgm)h0XQ)pTelJKFzA(@^0<)W7`Pw^{z3zmP|y^w3XZ% +PRrWpDMc^HlJZzKTwoI4Oxp4IDNfpF^q90&HAZ`XetH|HQ8X7!YdE)Y6CXWyf6}uk0=i19!ZH$#qN24 +h!!kgdwJu_96rY=z&=9U8n=YO~LQ@&gErpX8KIxm;%An4GOLM!y^C~!lCk3qib?)q?7}wa5mBiOlw~Z +wOOK%JdCQD&SnvA}EpN!(Xs@0O2#Jf(@s2@+(#w}wI1x>3Y%toUO#vMKk2M(-Rnt?#+e|9AK8b6k#z{ +oaDj=A5Oq&VKkQJ`R#Bj03Ka;|WR(lBx9*i`F|dqw?-3d>zY;LH*{ojKI>U^iw^aoP~+S;sHGle8TV_ +htsOx)y&F^@H|wN}_4Y4^<%7jo>C!V2w7Es!hX!$R>{aVZE#EpdlMSb#rohyFIzvYn;R4J8LE;w@Q9?Z?g$I`Zz#4nauUlb9Z#uV{f3-3^-V9K +=L$X}%jpV)LtZ7h|iGNWf?w+Q@idgTvdAgX#1)N6vM(u9&?xNmycwJLE_uMSt`k3AhmxD!3soni@^Us +7#{Adct+k_n2ZvEJOgLEhyU9`*@?NN*i{F!0|#2&>sD9!(dVkAzj)Bl?BcWXxbOElv#!ti(@NQO#4k% +Ja|Fbdi7lj4R{z#UPua9qy&Q(^lzWHK;)kE}dk>Zi6%t$^GiP2W)ysZ|nYH-g|Kpnqb%l2sib=XCaFh +R@6aWAK2mt$eR#Ppb#ofy +Q003wK000^Q003}la4%nWWo~3|axZCQZecHDZ*6d4bS`jtUC%MA!Y~jA@V%en;0@M?io8i2grW{zT+~ +V45ZkK+lDlv@hkkq0XhE7S|Kxsut`qjKYFH4g4=f75Mfb^CY$l=h!O~+4E9w_;CCgM4Ep~9>>b$S((w +RHD`L=*`euf#`LK#)&u-w7DSB&{dP@h78G&FsNMkuLY>4eIaw+t<^XGBc@pZQetji(i+I2n&YFqCoXr +hT$;V!}6KY{Ycc+6RXoNwGbOu#~g;(2F(I +(+HSj-ri(T$7UvoUEz^z~S<;bG9#`ytzZsH}_>lbQZgD*Wu_KC{_Y7x-T<~;71|(W#DbGnXPw1THw4< +MAkziq7J{3t6rgLUa;HC-6CCd`b$0SOVeey2L;g`m0${RVN8V}XXHs|N@F@>@igOX5#7VkEVxhl{h%||giYsZE~cEpE6xT0B8y_y4aT2~;qZ`sE{@>mb +Fo+q8GerrCPA;$QSjfqxP11K^OSc#Dp>NNciJKF+1uMAR9-G@x_L>4J0G>+xEK1*N)vd>veb2cX# +PiHY(30x^5WPqb%;(8v=I6jzmV(%~!Ai+I62N162T+0CBEg4HG8mSCNF+!hwncjmYG(IaVb8CbjRm=s(7joc_n+&da4zF@98J(qRYy$H9u$%HZ6 +1-mpgnVt>0eItz +;!3S_X(v+^En=1|^XsmBa3RY$HI@`g=}c_#fI4BdUP^u;qoZ1Znuu347R;pTiWkhH0>Gm2nPlt}kara +0Fhs14MD0t8)|1vfJUPZe6EI;w8#z2V>g_~!c+J9_DaM?VS~U{q{7kNEv@M^+M+Ac$;YAD)UtFg}3}G +aRAIOXmnq@HtE1+1(hiJeSxaf-XmiMOJq7 +>5(TC`V|VFyGh2&8^Cuupy*h$oLIY1-XmzYZApVTY^>8^0Nbaprc`10tFRA9?@9W +AB;C=pk7K2gj=--gzRO?AL?BY{^Sm3%A;n;VrIscm{Cb~z}{<)bUjn&S$1LJ@pAo;K}|MIZ?wk)J`%5ww(mY^l4DcK;SWD% +~H4({1aDo)Vb;^;q65M91H2d~jdJ(#`xZ#&u{;Q&EhYFJb{&MSB#=Yd@n>9YAtnFxS98x#7n>Z+6)X4 +6}&Rl(7)JX9iv)stT3a`hA_i|-GI!|>Ef8DKWlD#KGZba+L&g@E+Q!KBwipe^m8h5+eipZG~{ynPTOW +Q3BF1#lOz^$+%m`g6+lFR8+)_pholHpj(a$#R4GXyQarVAh7Cgc)1~J)a3wRg^fv(S?A)R)V+)AnTX^ +y$E^@QCD*B#ajH#IHNa~qRd}imX5p0^fAb@E?580o!hr8J)!X4pUQ1lu6T65uG5JCHr&u|4D4s14DH`5kVt +_{ii&;Zr*%l$3UTg3g{A)=Q8uU;g?%RJt7`thG`n<|4 +zp}$7e+P4>+TumN=>Nk=Z)+E~PaC{+@Z~DQMw6~qRp@kbQ)AFg>Wx<|wM(b&EymEa{{;1T=kC +~%K65*LsfpMt&53q@cXA{7jIq!6UTWxpOuFAtw_$_U0%KXZZf|3k@0klczGjQvB@B!*2Bd9jbrlsl +G|e>3S`1&~P=flahCph1;!aCd#44p&(s2B<@I!5nbw|rLr=mYvQkej%azHI^>ftt3X{gXpIy-|*CJ)Wm2iPL21r!WSnj^SeEm4l?Zcu?a}N7)92n|cD5DQGq;@^S|#_ZX0)ALvcF +*Rv~e*2lZ;Q|wC_k1ZbkR@@en-7HmeFSpQ1V=C4d)5gubJY&{G@3^0Pd&4f)xrH&TQCyRy8AaO~f;tU +aHJ%3O?YwJu+w?2hEECuz>)LkU<~U7&$C%i-%OD7%;zQMaR+790|(YSH3#+ED_(oU6&t5^DqxiPrOWN@?Y(DxK%j2-R967X`#$=j01ZRPCGkJVC_Y|&I3D43t +B?tB)#aeP0i<{Bx;`C;Tda5 +#n=FXRcZb7lpLOnq=oohC3z=rpnj%!fYYr2LVT)$K#lpYpx2XiwFL#-HZMd;2+%ZkCcxGmL)L~@%(gg +eHXR6Dx&$iAm7}Io%>-VNa5$-PM9U=QUh&;6=>~;;!Zv?nqG--~5mYx6Oxx^jv-YT7TN}C@G8u@36p! +1}#E-VF$7j--?9>|5QwIzpl9EOgCLwRPVzrUntr*opvIMl29fNS6D-9UW?A|mqR?5_K&hAyX^!C5{-B +wAfhv6G@Y7dT1Yb$S3i7htHbZV<3LeI`e)}HJr8J1bEP6X5~uPDq_$lO;hQ9c+!R*!6svg@)OGyHm?x +Xw)NUWV9^_h2mXcOwl)vSZIRcN1aqXmi)o>ArEL?aaEmCW;t`#*-445~P!SDC$HOM^NJo8aLl+o_m#8 +FB26vRZb$Rb4KY#UJcRV-OlO~OS;!iW-c`?Dz10nIY +VTDoG3D$?cAye#2dNHi~pnP_H#o-gF3?m-~We!6OsCHbZ+m7?)FWg~?zr2O3it-P12-BO$JZf^P4T+l +5&{x`0t7}?q9)RxoYckBJB#R)xU{k#3H28Q1C{k*RDk-aXk&EIpo{{m1;0|XQR000O8`*~JVb{HBmZz +BKzZlwSK8~^|SaA|NaUv_0~WN&gWX=H9;FKJ|MVPs)+VJ>iam3>RkB{!1YUcaIMFXRF2aq>+L;Duoue +!}BLV=y}*_{es7WT_#^_B4$C?`B?}`&FGIX)y&92nO%RJQ0ix2AL7$Kl}8D|MB_fPxt5V*QZ_D|NiC2 +|7E{?9`^nBfBy8x^~3tfep&NV|MRC`e*E$Kpa0e8`Gft-X}{Pv-+cGo|5-o%{Q1WpzWeUezy9>C3x9q +6_4VyHKaZb2|LK>XH|hU<^J)M4_CNfz)<1mvH=q9btNQ%A{xOv6^)Hn8FNmB#u1q$N7nAQpt{0JO1UW +G|gIt(gLGDZ*AWtT*LpD!j3x~XzeDGZx&(~x({R_%2JJZuV^z50Q@%t>l@Ash(?jMhJx64d-74*e)kK +af6eZ=ph{669LsS3S;ZbI*%51~)cwg1D{U4&lo+@6@;k9_VS^a1*eOrLMM;F-X4i#(5jb}9Ye=;yw_r +h9kBcbBAU*7HknyJR_E?xnH2thY268qA3XUC^NSkp0yuzWtB(gS=~g9kKbdB) +g-%Fs8--LJ?D!)pb@aoNv#TH@{And*zOBjLdIjelxR>nT5h*RCtUE>tx|~p|DPt%vILO!ed +kzb79Pd$Effa6&|C)3>Idv@;g|0j4F>&zk`j(xA +FKk9^b|`r}6kU9^b~}+nC?R{5Brn#^c*~d>fB%d9XeYet!qQzk~T5{QeH+ckuf=d3-1HJNf;c%>k9jIB~GsLk0T2wv2YR#C$Vr63n#H~5(_7>a1skARj#r!BoFu&|TmJ+$j{1)c7Fu#SBzwr3716kOCE +bKrQb|4EokcAz{GPvi#J+rAVgL`IEUk3NgroOPLFOwxXS#u_9&SXhWmgHnfPS%{snlqW-$^1^{cQU_| +`JK$~VtyC%yO`g_{4VBqF~5uXUCi%dei!q*nBUht__3y|k>;|>OT5ZUyvj?w%1gY;OS~F0_guJI`Nxf +0jaxfc2UjOo7guSFDqHW$*1NLxu57()qPM%U^{$EeP0Vkix4W`Yt(kUCDjU_xMzyk0t!z~5V^qKHiea +!(t(nE1X%eZt^r*b_sJ!&3y!5EN^r*b_sJ!&3y!5EN^r*b_s3ssgR|i+gMXa{Cm34!c9<`I@uibN%`Q +@cY<+VoTwMON&M(sQbyw<3^)~LMJsJzywyw<3^)~JIS +tv&Leev(vKizdFbuaZG^(gfu^(=M4$NP`F-lT3)?@}L9pHg2^zquZS{~-Ja;XerfLHG~Ce-QqI@E?T# +Ap8g6KM4Op_z%K=5dMSkABF!Y{72zG3ja~~kHUWx{-f|8h5so0N8vvT|55ml!haP0qwt@E|0Mh;;Xeu +gN%&8~e-i$a@SlYLB>X4gKMDUy_)o%r68@9$pN0P{{Ab}m3;$X8&%%Ee{5!|5^CY!ha +V2v+!Sp|04Vs;lBv~Mffkme-ZwR@Lz=gda-@3PU>R+Ymj=Bdir|5W!JOR1y5BxG9FdNqsn+x8ILOCQD +r=;j7O94Xfhs6#-qu2G#QU3({Q&ul);uy|#nCYG)sM*NfDv)Z5o}lljSHelnS#Oy(z(`N?E{GMS%D<|mW+$z*;qnV(GN +CzJWfWPUQ4pG@W_lljSHelnS#Oy(z(`N?E{GMS%D<|mW+$z*;qnV(GNCzJWfWPUQ4pG@W_lljSHelnS +#Oy(z(`N?E{GMS%D<|mW+$z*;qnV(GNCzJWfWPUQ4pG@W_lljSHezMp6RPtAKo)0eLg~~&4O7KbuN{C +9Jt@nqJ^|3{NQS}#1e_=}K`X@sP^K0%O!qPr&AjLRZ32!c +^!>e{l<8seUY#hb%caL3M0J{S!sH6zQ5uP^3#nu2(_YtJ7b2{YB7UL?t98WbLCUp(>$iAEv+PN*MYlQ +-87a7b=gY@@Og#Q($IF=t@vvroe0|;bwK1PYl)9x;`&4IrH*L2ug@bNJ_{`C`zbGXi6|8bR`TWOeHKO +$SXG8r396SQ+YU*hf{etm4{P#IF*M}c{r7aQ+YU*hf{etm4{P#IF*N2d3cqF7ZW^X+v&Px-)0k>61)< +`7~HaVvk6HFSqVi6RS8WAri8A9p@gY~r38`b9aSDt5kf>%ONLR3OhLRLaiLRCUjf+?XZVJKlLVJYDjf>U`om4{P#IF*M}c +{r7aQ+YU*hf{etm4{P#IF*M}c{r7aQ+YU*hgW%cm4{b(c$J4&d3cqFS9y4qhgW%cm4{b(c$J4&d3cqF +S9y4qM^JeLl}Au{1eHfnc?6Y5PMnM{wWYt{`WY6 +RPGUtF@$YHxA6{~<;ncP6;jH0W9%z0$j1ewz=uEWhX^h9>R?HIQMZpXMCa7${R18&E-9dJ9wjSLXy7` +Fp%Ne@Jtit~)y1Gi_~9=JW@_Q35Kw+C*|xIJ)l=9u%q?HM-|&9S06B(iNm5;*{OVB7%!0|P{+stb+D1 +~O-4h5_Es3MChLR6B`86m2~qDl}|Vo@awapECPkYHj7 +CP+|{MH7ZtazztxOR6Z+*qmgFCg9GD8`i{09&HBh%(ydfOIBtE?##F|aA!#_1n$hZGjMZ?qRYU|30tl +JcVXNGxH(zcAz9iL#$AA$bEqA1s2y8aSD>+lHMT%w3v2ArwaZn`8>;|V8DIs#$^emZ?J8?5GOk@^Q8m +0IjbD<6z8m-5FglHgp@E&o>=@+Dxtb2y+|HOC!y}C!X<)~g9fQ1$kr))hekUbQ67paQB;mQk6m&KP9n +5!rWXB^1voj!*!7{<5?dI=f9P=h0nz;_LB+Q>jN`9$_r{vjF^6->A +drBUjl4noJ!&CC?DS3EGo;@WGPsy{V?wJ8N}fF +>j~COkr{wXLc**{Tr{vjF^6->AdrBUjl4noJ!&CC?DS3EGo;@WGPsy{V!CaoRBQ +8IgyujsRF4qE?Gq$huFGNo82J?ZL5Ag6p`>pTok;!`cV7_5s#Du(c1c_JOT^fVB^7?E|cR +U~3;>?E@br5^ezGBR2w;wBc?{#v}RQiwL!f?Da-?y^+1%2(LG?*BjyWM)rCmyxz!OZ-mzy+3St)dLw( +i5ngX(uQ$T$jjYHKiX2&yBNREZB1d?=k-gps{f?~Pu>f~r+)(>i7aiF@W{rZf{z^8M~)4mY77vrbL3NEVgqjWsAB_eK3XC+;O5geA{_0=j& +_8j9of;2aI_;k+7YL*L}T0r+{U;KxY_@X@V_Jb-_d}Z=Z4sUyEE<%+?{cE;O>mO19xZKn0I1l+#R^ti +H~sNV`tnQxaG*4;Xw{ejvyx{XOIh%E69z>26AWe0GVwSRvCLrCh~+}d3KExg5?97;)G!NK%$6wC-S@# +G4Dj4cOvGU$n#Fbyc2oeiI{idlCy|_o9CT~c_;F`6EW{Zo_8YVoyhY}#Jm%E-ierZBF{S!^G@V>Ct}` +-JnzICxcTIxi0LTubQG~BiM%F>H*nvK8%veQOO=SpEAmn$VyO~&sS>eNNxW1^SgIsmsw6B`5-(K}mMV +#tDhW%K#7mWgrAp$ZO2Sel@lqvWsgii9lCV@syi`e8sw7^jBrH`DFI5tjDv6gW2}_m4OO=GBO5&wT!c +ryiQYB%jl6a|-uvAIBR7qH>Bwnf{EL9RORT7peiI*w~OO?b+m4u~A;-yN$QYG&omV=6o!2E;I>bcuJW~Z-(j3b29k=%!?$L*O?nKTc3O%a^aV|yubNGVy9sFR(R6IM&(u5C>7X~!uA9 +kl~-l;!O@Uc_p||$|fIPdl1tdJDwH +ruy(bVn*GCk5T!5GgZhMB~!&g3Ilb0jK*SvOBynm>ZIz`qV2hVO@y>!_T +gCVzkzxPDc%#Jd*~j>^k0m@Z@gt$J#tSmT>d07Q4H|2_-Z5yb@xsQSvBnx}&{$)QHE67{TW)a6jWyPw +vBrklps_ai*U(rSj2rgbc(>f3vBnx}&{$*hXmFr9o5v2-?5vs{s@bo}%1=RSO9lp3F4DdH|`s1)mf2y2bmp_j#XV})7!Cp>#WFFUS6FQxx*rNw# +Xfd+*y$^Ltlecb6f}DVAUM%2zIb)4yfi}WgFoj9IR{ud!~bxZA5g!$~K^EBNZlBkV)PU;5AqW2Xt_-4 +q~-@4OX@RWg9$24=CGUWgAeo!3J-@;0?BH1D0*DLJU~8!E^BdKZ6xwKp_Sz#DL>B_!Hikz&&Xi#VY?A +Z14v3WQd+%H9FY6g$h1V<4iuCPgb7^^_i>?6ACd|Atn@J^4|JP$03|-eI~5WH346U0TTPRkoT(GH+=rZ$H6c7{EH`ng(!r@TapV~l8d(_7q%o9`^ +XEQ?H7*@J{?_)-^+#fa`B)o7?j2DCANL8#k*Sz@8#mrLHykI4IGm@$fQ*`AO5;|X8}Wb-MnzW;T7EMu +-=H6xG-cZe(LtgHNzIosNh9hz}IUOA`;Vt(Y9>;Ag6L=gq@0Q>2Z|}}B>0qbxBcaG +QD>7F3PXwk!PrgGi<#_6k@JT*K+u;~(r-7ePPv<2B&L5la?U9X@^KMDOv@R>)Diqr60(%bfM$=iz3%tl;gbbQX&D5o3KmP&ySct33I}{x=W!$4z)-i-#fmKmoE-q +KwXt_N3elwax(u%AM)`Wh%k6rTk;>+hQm(bC_*o}|aLx~l}>SCAt+Ba%_{XL?+lBZ1*FbkODZ$Gvc}c6hGiIdqA%oo6fE&GtL-j1to~&z +CZ{WL|@_yh{mbJYT50H(x&wa6Y*-HXC +ADGUCXOZZ&T_yn$qmZ^zu2YafM4Fn<$z!E8g^YAMeqU_h<#+4}w1ce-!)?_@m&Dz#j#F1b(^ +3YDM6Wf+5~GJmZC{E +|?y3h;}aU$FD52>t^6MerBkmw9br-e2P1Vnbt>g1-X4q+6^C{E~06D)3jqUx8ozja7la3jPZGvaVSb_ +{Gm(4fvbjZ@}LKe*=E;bJp2Y-=#da;kk0v(=t3)(mIymxsum`%^fG3I}W=$yA-(@)VnA6x_Yhu|N;FNr8?0KcqT*8u( +@_y_Qdf4&Cr55Yfxe+d2o{8R8x;Gcqj0>7-Y)&%}3__6+4vi@2V_+=fjCh*I(gbUXaE?KXw3H+J~vw& +YyVHWUfF3bXcO@>*(uh}pQ_%$770l((MEa2CKm<9ZD-QvPJecgip27XyztQ+`cUAb=HzXksd{NjhNw; +wLaH4FPrOR{Sg?i0Mlug2GnUthoZaiN_29_v}zF?BcAN58t3^Y^ab#Jcj9c@|-NyOhi$>@&z7ro$$tl +TFNB$90#b2p!ji%02*gJ$KoKK0xR7??-Nv*u9VIJtf`k<9bioZ~RDxl6B&jYd=Lk*!Q@X{C+_WqW@p6 +{iNr5ch-r!lW*C6WVqG=ujC{5XEsE;S=1fnJ1OL2p7g(7VtF=$ykc3Z7f!xyN7HrQkpMuuD$ +A85R9h>8GL}_FFtYk?t}Jy?|bY-at2@chD8j1bqqpK6Lh5b{+Ve;BUa+1b+kmCiolhH^JY4U+!ZaxQ} +%-!QX(t3H}EBCio5b^$Jo0eiQr#{3iGf_)YK|@SET_;5Wft>5L+}saAA)}X{}lWa_$BpiOyHk_e +**s${1f=6;Ge)h1^)#8DflPw%k8{l0{;^H3;37dU%|#>sm~9&E_mGNNA692A9pe(b90{k +pIug=Ptch!#F6@$<@aZu=p}N%BYk?8O0S^v{DMS?UCQq}e&6NyNO_c~f?db&hx{Jtml8nW5kas^`TaY +0Qqq*MujOT5>#KXHIdAVekwf8E2hN;0wO#UE?!SM9a06Yg@qJ${+$72Kcdz}$bLAReeE1A%cE@uQ>sK68s7Hli*Llp9Fsb{v`Ml@F&5afIkWT1pHa>XW-9*KLdXj{J4%jXThI=KMVd0{ +8{j4;Ln0T1Ah^mXMM3t;j4hJD!;Gbs|sHgd`XCLuHdT*Uln{+;j4nLDtuM&RfVq#z9fb@SKx1gzX87l +H|GZYP4GA1Z-T!8e-r!-_?zHwz~2P_2@SElq<_RPOP*Qv8x4kwTN9Uu&YJvXMz1JVm}M)XA%2ZU_Xo4&(bh1O~$1` +ZYDSlI8AUGaGJ=?AU6~I2K*-Y4fsv)8}M|&)6svI{yX~b(tk()l0Z{Br;d$-M +SXf@)$v5x-=O<9T-d$XVi)3=yHGDR5XAn1#Z0$U)P?urSyq_m8+Hvm*V#{un2yn4N{_E~S6q)HEqO8| +b^_{*frPOQko^ncwd4dndntr;mB1SJ0&&j7#TuNJEC?E`K}WtS|Zf*?-t2%K>@EyOdP4GhS2d#@6ze; +BMnMoLzUIODOP(!`WpL`hDnL`tj(;OFtg{c)^MT|$(t`NGdr@FZ3u#eLqAL%}V$>r +1mcOly5N)oPe;d9wlf@lf8e_i63ZbC+bd||uZClXgZPPkqb4NV*DGz9&N*XrXb^)H~JRSuWkgrlNW;a +0${^1<$^7{My%VO|w_RXH>3Aw)FDGu{UyH>V9A4H6x8H9WjYSi&Z((;)E#7vi}!N&6urG!$((vNETC; +qVs{OSlQ`H0XGo1nj5m+Hk~fQQ<=D8sB>vI5&OIk4b;s`=kv(wS>X888&lswL{98dlwslF8cTDXV49~CSs}>a(&(7?>Dt%rPnpOy4FXG)!$c57(?77a*(P1y%5e!4UK>UdI7Er +9M31;X&cPw!(HPXP0k6L4!U#zW+jm2=`-`iYlQi34cKz(xdbW7w=%mDyxELNTiEH(6hf5O;5<2GK`?xIb;3h;gh)59J>#}m5fhu< +y+7o8-l=2tvy9$aE=@xfJPiQF7S2eM%nMFZVG>Qfh~XyvraBIi3dD9Oy`2>t41juphWf4$#~L{Kb$JWJ +f0VE(I<^;=9BYK7@$|NnU*4xgfi~522q1@s_5&@?)MdOT%l&{3+!Y2y5s{#(WdpY0%UMh<%qu8|rCrO +&VTf^(0AZmgH+&@+p%xWHhkYKW>n4{6XNWghkCJLsB25{cyF<0GlrY +?ghOe^7$}C7lOz0I5A5(Yg{k(IN~zU*;#%<6%(htsqy|38g>}-3~2VmC;AAgLWAm_C`D051wF0SbNj; +gGUOs*jsd{z3|d#4)-U7gRxzf=gtf3>k?46bx}e*--q*k0aaBM6+E4ouXZn#oI`&P=mOO2ML2kc1fNM +A%*M*2)Ix;QwbWi!$ulU;ADhn=Jne0H#=1OL`bDlb`n5J(A6L$5H)S`2bop^x +Yq_HH;y&RA0uo}^u~3}Q9Qi+ +W9zvtd11z!KcBKan)TPxJ{W*IX6>U&Y?5H}WzLN!V*#1eUN`)AcIAOKu@JL(0l33t+zjy$GfErp1;^a +HOWXjz(e$s}+2{hrf(P6t(f}>scjNoz;o3j{1OYP#V_hlq3)Ks0x`jQC20$^kOAV-x?NmxMQx8M(XcNg~l-;5qtd1?oW4a=)z%*NEXBfHL4G7atUtt00cMLn8f+C +JV0&j5yZr{PY-6!6$3ABaBM}{r=?}$c<`xDWdbQu4KGMzH>ehN# +H{PEmBJ$}x;UX|nUaVBFmC2KR{9g9W^ow}KLXsXv;|D%5ti3MXC9=YJf3)6Z`v8?Z77Cjuo&+gM=^5D +5W}a-le+t4)9&2SOZMN&c6gGyz19`gyOfo9$0eUM{8~Zt0sD8juOs)5Ij8eCp&Vxa08mQ<1QY-O00;p +4c~(>DqeJEw0000L0000W0001RX>c!Jc4cm4Z*nhbWNu+EaA9L>VP|DuWMOn+E^v8^k1tCtD$dN$i;q +{ZRZut9Gg9Z`0sv4;0|XQR000O8`*~JVyvGuR9hd+Bc@zTx9RL6TaA|NaUv_0~WN&gWX=H9;FLiWtG& +W>mbYU)Vd9=N0b6m-hCHh^zg55ncDov}qahJ@SsTp<8y?O67YqK}+%jT(|1wm8)0(X2t8Tu6^~LmFr%8WyMc_vtr#_Z>@g!A6C7xcIDr_vU1(Z?|kR +AcivjFV%=}vUbXi16|2^~{nk6{R{S5U-d*?o760;!w^zUV{T2UX?W(ude&;)X{nvl}&-wqEuK4dO-(L +LazpVVJ`>n-?|Hr@lUvc&C-3Pw&o$vhQC%=64op;?6Kl#auAFlXr5dD4I-?x4DJFmR@+KQjN`|9gIX? +y8=KlsiH_rJe+`kSx*V8u({Tk&`QxcG}dTKuISE&l9}R;_g{cz4}9KmJQQyx^Ji$3I^Dl6PKR_ltMdu +K3a7A1}52y6yWbz8ih_d*6TlccA_b)!&i&J63;J)ZbP0ccT8TslV&$?^OMrslOZQ?_B*|sJ~17zJ>tJ +K%glIGzWnuAn1e%UO^AT!3LSqq{k5KawYCb~EN2vJ-H6NkoBh-9 +^nvYQP5o$idr+ob1Qc!4t<|ArTpNIl22(=*6f>;YGT2R%3LXsvZJ`xyp;c|6Ro!E&y2nnHDs(Ks(B+c9hjp2@>rn6HR-fX-~AHOf(;f<|EO3B$|&z^O0yi63s`V%`nksm}oOhv>7J +a3~NvM_*W?iv>?=iNDE>usAxe|3lc4;X+d2JQZ2}|prHl178F`gDnVWIQP+IbH6L}&M_uz#*L>79A9c ++~UGq`beAG1`bGDbNljEzyKdAlxbfZ@DfaQkd!AD{Du>HDDmQ#w^WHhxD6i4?&P%aZ>3bKX*oThqU6f+4+4n9Hi`K97^!@EL;7lO#8MhT!u +w$qk<&_&iH;!)FLS&y(En8G_G?Bqu&)5D_hF5D|n>+W>@Msj +HBI?0WeB53I*$&HpGKVH8-N^=p +?xwlLBNVKjBtPgSxgMheWF$WxUrT_u=?}=~#>Ph=CHVpQ+}Ic!5|ST~&y9_-AszVv`P_=JH +6$ZHAfHB*o9KFQ}+4WCu;Nj}%)5rZoDB%f>Yi9r>7lFv1H#h?m4$>*BFdUrR;y)XTcd}+=2(wZmr?p~66Q@u;>q~@vpa0|%|wK +Z>;ACXI_c_QzU`>A{Lyi3le?)m(1C&|sIRQIFOU7x0r0ZhES0ZiSi?Jjwtx=~vlY9o(P_iDR)j^w^ae +8`j;4^#Jk<1TrFy0`PYLnJqLUWa<9N2gvrACfmV3D_Wop%V`#5gVj1bn?a~AseKgv5(i29EMJerN+=x +1P#>vQsX^R&*6vUdsE|kQ*YuQQ#VUJhabwsQeaZELFSG7<4q*@9DYoZ43e}TUL&~)ypW*%@CM0E;FWm +}Kc)_r!RkgxZmbUJ*AFL1ZWu$h^A&cu$Y8Ff@Eh5}wJi4r{n0j(8-qsj@1yNfo*QK#@%IrCksD8gq~A +y6cXOi#B>X-i|C$>$X=Xws1@CMixwftMqxyKN>$2)x_H)=! +f@y-sC8?_<#cxM;MjoOfVyt9YoMs3JF-q}ZTqc-Fo?;IexQ5$lPcMg%Dbr%7)3MDFptcx#1Hz!8^kwH+)9^jiv{QP$cl~jFViCz#$TNA08xmfv-M8fO#_{@b0#gTn8{A5_li3C%LzakI9uGj +rZ{ul4B-APBJ#uf#Slu{LRKXkj1-8PSRxYLS*soZY8;~4rKA}lJ_!MyfE|D@dk-OEhzzk`p-!0`F)4P +m?Dml+|zq^jO3X1&r49? +PjnyRf%6ON=UKzh8F>Ia26ccntv2Vuj*OS~ggKA?U)88WWx8Ls~xo^Yod)0TKz-ENxrt*2whGnTxR53 +N!$o>6ckmRN~8@azf43pdxX(RXdF}2X-{vzc5{&17z`QneRkO86dfzJAQJR=V)fQgfeNBRM+Rb&`Ya8zlE^e?n{{LHEfml7nqBsyf&n +CAp6lJ{cpq=bWnTBBb>`nIO4m{*y_Pd*(lpbFT==y?f-~QqTWAvc^{$2;kJ@fZEN$#1y*F|# +A{Jn0Hd*<);klZtWub1SW`Fk5l?wP;0iR7O7dz(qFC$=I~o-t +R*LUI2>?HRuda#74Js?S*aru-~I{n@<(BsY6&PfTwB8$OYvx_6%BhEL?E?p-9g;S)Kkd*t~|jw(Wq>K^%glcS1CSSmGlD*#K77TeJ$?lGim^uBi0>_7D6?&*UG-KbPJE{6YHX7@4j6 ++ez;EyuX9wp3nO}GcCiVWLd+dxXnA7`@5)FUU~O-liVxs{vMM1j&Xl4$-N5i?<2YI9{2Z?+$-|_0g`( +~-aklk@7(VnBDwD>_YafYtNDIE$-SEIA0fF{^L^=w!5&P0#(4B-cYojGCVNr%A2{<`^|S_s^1C56m%YdhVYmxgMBf)b!lHNOC=R +#Hi`HKR|LlFvqCrxqpS^dSH$*ufI>8#LVks%9xl81wr3*C-s+o48Smpr*3U$ +*?OqCzd*j+bz$0YdyjoPMuCC2pl0gcynqjyYu>=Q{Bz!=u{rhDVrfKc +L~iZq$Z(_5*T%ridm+5zPZ~f2N2g#ti!bxj$1x6Ju`ufZU(i-56t5{eaw`+1?mqKK+2)pV{FUqpaoux +j$1@6Qiu=0lB}_@QGyo19E?6%VUf@{R47;nc)*T`Um9xGQ%gb^AE`VnLUp&67vtp{h7>sj17+u$o-iu +k1>jF9+3MpMK>{aIzAxxXZAV94V|luvB&Wtg+vXV;*PPu@gW664P6rxV{hX_3WFMYZWp5}=ph9_4L!G +uvDxq;g+2{k6BA>j;X?{~8amSxqsHhVg*&FkC`Lx-A-Ut+*dcN`56KCVv +wnfAf&svB}@W$lp99cWm-EG4eML$sL>gO^p1_L-La*e-k5r^N{?c$=}4t-#jEgY4SHQ@;493Pn!HqjQ +q_*@{=Zi6C;1~ko=^{-^9q@JS0D9@;5Q^HxJ2An*2?S{LMr1lO}%?BY*Rd{G{1-7$bA@ko=^{+{DP-J +S0D9>XTyBCp{!TX|^NAs7!iDe$rGX#mLz_BtL0#HZdxb9+ICll}RzOI1kBBn#!aK@;8q*kX-XwLFVR> +pE}CWq`s`7NyQXERgklJ)J1ZwwhFQ}k9tV1)mA~C=FvuyYqeF7p?S2KvM-PJk=*c!yvw5lBsY8_#wLI!4x#1I8mPbcPZum +rg<F9-St+;S<@EM`uZH_(UG%(Rq>^K9NCrbdltSPvlM>4UpXMiLA+^D>m&#NH%JctZ;~AR +-y%8qA0avTA0;{XA0s*VA168ZpCCE-pCmc>mqTm?dnZ3%Pjb)y=QPk_2j%DOB=`J(-a&HD|L2_~_xyi +Oqak)ve%?)TeL7Ob?3%2gB;&Kw+&Z)Us$$A3DkdvbF$Y0aOqQq8&;>0Ov%R5GnBOviVx`pQLsi?%fog +$1%&8jCgouuVTi(N1tBKd&muDZ#o>fI|@^P<1ynep!QHbwFk2fjAoDrAna+j(pUrXBbp;k#?4tpz82|ow`#HZOvM~;R?+WXtC;Vpn(wKabJJ4unarHvW_B>ujP=*db +h=iU!{f{pv5uY5PfqQ5a%!BgI!z@) +Zt~G}dp4cPFV|ChZk$fe)HCxvnNBp-GjqzFv50zRkEGM-oqEHZh1bxLW4&S8+|ZF=yO7a_*LXUPlJ0Ie|Ehv{j~N8$cTA-jZwTNdl_HZxu;GhQn*UMn+RD>J9zWEDN$W+K+Qbo|LBI8T9-~}%>J6uM%6H6yh3KS9Aq +`awDAg=@d}xlF=jPAK4c~u%gkXJnK}43Gi&mhImb7v8?Bm?d^2;VM3$PKVV1G8)L4f(!y!ved(5f0ne +jkbWpR=C_m#<> +{-b2A3!=8XEhZrW^eX1OW#$uphD%1!Z1o@pD)P3|pknD!W3%^TV$|!rWcCj#4Qka_`ikkT?bN540GY3SQXsR#=nH8zF$ +ikG?6{(J<3R6^9U{Cmyv8_)=i77t6iN@gNJ$AJ)_FWkJE{wk}jK3~SA1F+bR$=^gVdAAC*W*VaGG(I| +pNt+LEGO(ZVdfZa(=STndrQ1?$FB8G-;FF0V!VI@q23q{|HNu +dzn;d#Fxt_2@V(w7|V?AJUSYvgG*+6c$y=EU9?$4c8{0x9@RP}l`qRd?GC}lqWm}m&o!;1%nf{dx^BGgoS>}3R2-=LV2-?iVHfTf1> +h!g|y67cNr{klx}F^!5}mNVGx>`QV^O$C!9!+2~K2AvkNQs +7c2G`O&%r)&7>*_&0S4SWWUQ~R)f%-JrIN@CmMt%DH=RGqD6hmzGG&%56v*^MD`a=owXC$Uo=B)5Sln +K2<=INk(os}QR{TTG9REC1?J77z_!`UuARtOdz9!-9z^!6-pE{C6+~tUI(W9}m_LO|)v3O#jMRY)GLi +xrVk84H%m{jT-!(>ZAbc`?Y0NvezN=~`V@_mG);8(AplS)KmZsY!_7@W~tql@0uMLtw2b)0>+V3*UZ9 +!t{6oRCpL-!!DP9rh#h!fd%C8nz+=7K&avcG7}E-{G|Co%_uCT6KONK9VBiHr#+=6V??GM}nh4b|F=q +1WskD7D39-G640X==@sx;T+-gjH=VF~(F|;*@QZ3l3`bc-@-qxpn*6^}u-Nx@}iI)brAyZpvqz$bQNi +W<55>RJV60)T@Toy16ydiA;y7TfXY4ZI|V%Zr0s`x(z$(HaM!A$ySh>Ix#1*pR!R&YP)D^y?JUjZw9H +km@!E0xSm>{pIVoeriS~}@|D^VJG1tc#fFK@MoXD}$IR+6D~;>O%neLIBQmjOBQj^UKFfgfr?~ixM*r +nKax`dQ?=78v-~b$#aE$?+m%xWf*RWxK0|VIG+|B^DGH+r4d-G2+;3I%<4{T<{IIsrx>rQoSXCwf!gO +L!(PDUaiyBLXq>}I3_WDg@%AbS}}fb3%g;ZMhYMiBmV9AE_DPsc$<5dL%=Vx-jsr-AA0R7XD}1&||*l +tAc|>qaW{bBqz8pW}=O{hVM#=!cCa75X{Fh|tezMudLOFe3DGmJy+!bBqZ6oM%Mn=K>=_KNlGh`nkl2 +(9ZxPLO+)o5&EH1vm2Sv&s9c*eg+v4`eBEX3H=N+BJ{()CKLL(&WO;@4Mv21ZZabDbBht7pAklcenuH +F<8dPs^iMD%=x48)3Hs@1?uMPKHf%PdVIzfxS+x%Aa#xUJFU?ApV3RXT0Z!yKz}AC}HEbo=Si@JPtO)bAF_P +OgRFxbhb}Qw)ymSZjiZ;;%T<#WFNY(T=xjj;)LXq=+Un)3>%-Cx9Wmwra|uR{@boU<3xnwNWtQW%r9B +Mb*5s=U;MOH}0SHWAV>!+v=lfa^mEJwh06G@i9b!_xbt*?l%GXroh)C~VU;qKn^)W^~-yd@aLOgnRfB +}R%H@X<{`uJGAI~?gC15gO_j#!lM#mW(i-et2yBzl+ooH!x=Is?$iEe5cO +B-9|WZVd_>NBlfzeK=8bS5zBKRc;3Z`M?_tF990;EGF=BZR1kVQ;u{;NY=R=HGo&&*iKO>gsK=6 +E&5zBKZc=n#3Lbv5TCDyfIi5tL#KKTwXdmnZY3Vrf5VD?JvA{6@Mo51X?*hMJx$(MoIi?NGP=#%dQGp +9f}k#dJV%1(5k@S}k>GiZ5zBKVc +%ERy@*D}CZ!=!n3#_6IAC_kI1zXr;c>v!lsOT29^rAo +-iuveE;=>B}A7pX8&w&(=HOhGy7+Ip>~l7p4mU!JGF~M@XY?%UaMUsf@ +k*6_GaxO5j?Yhw$t7s5j?YhHfQlVk>HvAvpJ5}i3HE=pY5VXK5=64)F_Vw=FH-tz@f!cqdX3n18STI`W)qP!0cEK +3b7PA%Hx1J*2am1K6xB4`<$If=#$3*dj)ra)yS0}PcnklF6BVY?nfu`um0}44A?gpi;ScE#r6{ILaZ* +1vS+sUXcuBxag;r?y-K?f>xrZ6na!RBClVIMp4prQ>_o!C*fX2sfSpKK7<*=W(RLx$3`f~Bn?r$vLM# +@JvS&8u0y~l5nLV@FFBBAFd2p0Hv)KseM1p7b%;tb#ClWlfXSUaE7h)xFls&UKCfJDt&+M7)_1uM692 +{lOYz_+!o^2F)_Te%1%ni$P13ZthXEqlnIT3gsH?ad(I2NGyCTyt~xIS&+MOz)-__wdz`KNX`xRZ2kgb_MJe>jqJ7IJPw$nkDW;9lg9yjJ9| ++IeeyV94nTGyp-&zM?CtD@C@3G}abSsjx2Pl^<8i?56)8%=Gmiu2Fyx>VS?Tfhj9}e#d;=qB`gl7d2* +1WV7{MEicQS%%m+>w}@FL^gjG)?OoQ93kRxX!zXF@4*#N*o;5pTVN5%JbL84+*2ixKhGyBQI0y@wG~y +jt3V=2B!u$B!{0-rzVR;tftPBHrL6BjOECF(TgJG$TT9XBZKBBllR^YV1-ZB*(8ZB3^Nj5%G#cjEGkp +W<c0;Dd5TlH@YYa85;~g49x +H8@eOh#_u@*dRd+JGXh@h;syL`dV^8be9Rc#paz6mw1e7Op1yxog=W-@P1hsL^>1UMCH=2Zt_n~6ruG)?jM6Og9g{RW +GAZPk?Zasg9(EMw;U|ytrlP9ul|YwofCESm=p(?12<=%`}v0NWh=|tWvVwU>|zQS^E6IGUbk`k7C4^(5h_dj) +(r_X8oTb6t0Gu^wB5pPvLWVv@eFR|QP*7sQMWAn8nueBfpM80+J@YkApo3PDX*BshI;=;Dl__6?l_sV~GnUMg9| +9y(SmiJ6>*8*=Zs%73@es@(NI*N9p%JbKF`5)e5qzdF0jCgyY{kaY>LrH*z&EH*pjS+7xue01+%Ns2B +KJNXq1YqCHDwcbGRa?jCwry20BlZs1@LlbToeX$#zu3iqH$(0XkqHh1tkS-=^4E-DRi`C`tRT=YrvSP7JK38L`A={#`Tz;p*d;&DFSSf#xplS>6j}82*6o3u<8u40N^-Bi4 +%9I>?_|-R60VpI9h=O3u+#9h3uH;@rzgFLr0Z@on4i6XA7Jd_J-`pXw^39$vX`zjzl{S)=+DKYyBWa< +Hq?I<3mfA>KYa?l;jl^n$!oKA_hTi>tE3GFjwVt%ldeTDcNeitfEwpY<-*X~;?|>88xC`^RHscG;al} +rf6VqW}jx7vB#0Jy77u`Pwa|R7=0)-HP!gTLt_m9A+jX{H(LGIaU%n^&0_*7v&Wr|9|2=!+(>w6hVfo +x<%mpq1Xs1Jz^V^cuoMEZ=XFoyRHSnm6K$a3G^BbNKl9<$u{^$N>WwiZs#o^r7^rvlrWmM~_T4W~Z;fG)UmI>W;P-~#4fw_3cLRQNxZRN7e9`Sb%ZLQuW5mxPUkVlC +=a4T&3h`;rmtuwZyyr_5h4{qhOI3yVyw6LCLNbrk6yh^KFVz)-+)vP^paPI)p#-F8sI>u7Jk$a}iipK +z++QHY#G-fo3#6#12{kD$YS2@l$f!Y4fnuWuO@)e$no0S`b+EdUKU@c^KUD}weOV#k^c6-@Q2MGu!02 +lV0imxe1bn`s5YV|wAz<@o3IUmKDg<1vRtT(qjY44cYZU^ke@h{-`nMGV{rp@Z(9b&xfqvdq2=ud#kq +r9zg+id8Un&Ip`ISPTpI<8k`uUAQpr79=#19fHS-#}Kc24dGiI-XK2MHf0Q6#v$w*a``_hZqk+%C-PS +?))o*IDidqBmIX$Dvg$_rnm)u48O-dz0mU5L(T0KL)K~xgUbovV7^ZO5E_lz}qbMdj2`fy`JA;x!3c% +Ecbd|$8yjAFIc|hiFQuz`TrHmJ^#OEx##~kEcg6VVlB>>UT}zW&p+FBzH|aPMwQAdEcg7gz2%;Nwm0m +9V|&Xz|7>sh(%GCiUpku;=Syb|V-&WqyXl>NYU((3)40=C$lrJ)Eu7`rU*HI@Pi*R;+^{s6;K7B5R +;)!VGz?7`+t9nG1HvPTv_2nx~3(x_XRtV`RN7@Rhzzgl@Zi&TpeU21Tw@3swb`vGlJ5ItJfH*0J+WxY +A3GVU19FRzI*<`YQXr#@V7>P07$Z>G)p15Jv%fmQNC9M$5lro`-X;W#O4Ebu8G(KVH!uSI +47M`@{S0<60{skjG6MY!b}<6|40baD{S5Xn0{sm3G6MY!Ze#@d8QjDO^fS1b5$I=d3nS3a;8sSUpTTX +6KtF?hgoHvr+Zhr1*};g=&rU{!es(b;^s}20p&!2)isHZJy$8azK-j@vZkw=!eT)b@*w2Wtg9D5RJ2= +RQu!BR42s=2;h_HixMuZ(4VZ>BdG;9r7!`zS(Hmbr*jx%CXZVe=-?p|a7TM4eSYe9bMt^&;3X`?EXa* +h$RZr-R0ZCqf)1ntgd<+Ldm!y}m&YBXo$hj1L)z&s_a}3(lM{)~$3v7k*vW}R-{KL-4 +!8|uw|~ZR|DwNSxqr_)?DLV{zRNBjWmMBc?DEaYN};%GWqOExy*XJa6xXaw53!RsCmx03>Xqps_U`7y +qfp$sGCjm@-JE#jMCjo|?9a`KM^1#UJ;aXOoOl#Au%l~wh&{MD@hB9Rzf2FYZJHC0LUHTM^bq@ObK+4 +bu6vmt+QW$Dxh{BS@3}-ER~J09+cY+I=^^%)b<1;I@XU^~Zh5W?o{utOc}@k->=n)VN};&DWqR +l&BbMh>@O+vP%X2DtKFf&ZITbvgXT*#Vst;L+ +l{U`AVUy9OiMroa5v~(C09Z1Lhp3u#pR%c^ok3I60Bvna2Thj*}A!o_QQF=Quf$;F-q(bB>b}37&Z +zFy}Zqk>Huf0dtO%6A7Mq9I!cxMlN{faloA86gCRMGmiu29499dJo7kU&T(=gM5MzUkrp;0EifY(zRZ +YOjc=5q8SEy_@k35zGByo!I#8I0CS#M^a>m^5Z^_Nc)#0-Xm-th5rt<8{4*nE^?CI;Ii`*{z=jMu4Co +<~I>te) +=-_9E_&MA+qg{+tfox$U0dkCy8jw*&{7iYaQ?<=|+1aksjATGAGUA=>Y2eX?FaofBd%x)fG#M{B_mOYGAfE;9`3gi|e-VSEBZeXMaiDb@n=n6 +szOG6Maa9%cmk8Q9JU^mCcL3-XJzS6HXWFV0@=V+8uSdV&$?=c@WP=x6XUBhb&_AS2MvO}1;4_|4vAP +l5Wr*_-@r*e5W1bCMD0XJm*G=x2nz7`6<|j<6TQrh(b9Ym7iYW2yzv&-i9WpdUIuFBIpz%}%hkan9Q; +9l;ffbKYhr*mkgkVD@$gBVIpqz1*{K&f8os_eSh4nA^zjgY5-#yRR@30Ab#6H^toE9!4S{+=FpN#oXR +gj8uTIPsB|XbNkr)V?V>(KDIaPXqY>6l@YI>xx>sGPNbVV%p*EZq?@~>THy6FH^6-kC(_LgsP}<>F0- +~{5y!B8u)SjL%5FxWpDWxOv9)4Oc?#^Sn7gXJ4f^4A&Juennj6@|Vn;=@_W~mc5Vl0@rfBw#F;WM@Js +3MFnj6{Pu#cj-k)tQ!-P`laUe#B>_q-kTiGkc#0C<=B_i0c>OeY?`I?e!s8qkN +}9XbMp4S!+|3q`V&3Lnwkj;8H23ag1o}C^n!}1p^S}fn(9c00OR%ugJjgmlRd4f>{0fh`ex`RC +iYZ(}8DzK0`K?B}2FVb6yJsreq&f(npvM!bIJd-+YVuYbOm`vR7y=6l&wU{A>WM($ZyrJCQ!aTWIW&u +?Tqz+%<>fvt={KL>bRz?#+kagJ_r2I2g1ep4)6%^zp3vE6_EH1|fVV9lT5K8G#;^Jm#Yu#h!>j@yP^| +MOg%BTgNh=Xw!w=HUDw&lj+)H9yFVV)y?%FH4Ej2IsGHjD!;a=C8Al$0FDK4YoI&GdMrW`oUV){22FB +LOb4f?sru^ +6hl7cQ!{K|hyx_JPXog-bk}!qV5mCHB3j?q0aW;{sN|76v%;g9`73VQv8y!WKrjH=@dWLCuh{9=0&5z +76^r@Bf!wlKk?OfFK*%mEhA7AD!dpbC6pQngL5uS6{lMRRh!?&L(im4Clv^trq@X}I6l%Sw?rTx^B +{xTwus^%=E^j0@#59U?N8os1ykvbBp5y@(LC#rkj?C$cn}#h|Fo6sSbcj_P@)mznkh3^fFFkRiPe=0x +67XWDyb+BXqs7B`}{Qha`Rrb8w;qGzY@{40y}a%~hu_EX5wO?9qk1SczYZeRq(e%%)s!KuNW?Tp~e;O +|+G_>Dl7o<53RaI;^dR5t}~24KV4@TfquHqF#`Q`oo594>Ea$ +NuEwBszet>RGS$UBSlp1&#XVSDP1|*u5$LDu3M0@@7xzv8iW-V>`l#aBRmI5sr;JXd?8(9aLO*+sR!j5sr;Jj=1%pX9ytqE3%Uhxh9;4;G%)_-nbWpZyaYacFcXx3?Ne^=%t|#eYyB3#* +bnRzEI8e5DabZX|hZ*9!kZuk$#APAf+=IncA>BMAiHkzIc}No1gmkla5toE?b1xBBgmm*TW{%*D?CCI +0B#Kp4uwSm>rz-Oux^D_1lFUls= +ziXED_jdh1CSMMPYS;ZBtk(us(%l0^6>zhQM|xEEm{Lh2i9fZ?9@S;OvJ#w(n;wfd2lt`IN$-zd!bmD +-8PkN$l$e}5XerZDL5-#Zj%0rdCpTa?}d +=P4dr1*@Wzi +-A)Dh&FY-Jv>B1pUnpoKYC`*F2=Z6Z-pRT-gh*0eESCSPdMJ(BD>N^KqMacV+Xj=zrtNCSvGsz6ZLcc +z1bk1aWPML>q=x`%vPxr;iatQ6uAwpoEG_wH$(_|I6yzbY*uGBE#|ax>p&&L3IHGI0`>x00*Q+4B%kb +m;wKKVTA!4=~`vLzg(Cw;3LGa#()nH!#V>#K8)HJ@Zn*k-W&(GsyFw+VWi&N$A*!5a~~Q;{N^I1!HL; +Wq%=6m8j6$#Crm?;(%`gcSQRtpZbrn+nJr6ZHa0TSDkT_JTcrd;k=fwHUnnvgocIexW`h%dp~!4-;x8 +1L4Nm-p$ZWV6juEdO7r_yN%!Z5K81edX(HkRPKQ4A-#OvpeRJP|3uOAn;G2->(qBcgneq7APh}Vyc*c +kEpaq$`>UOz5cW5nyn#cGUr{kTYtkp^0D>)YXD40;v0Ans57>PfGqKOMZvh~C)~g-C3uNoU<6gKhgm;JOt{#K5e%u@w=#mNy^SM`pc;rae>((2>S@*j5)&@ +sVg!kavuw~vOf+}jWCT^?wBx`bSS{aho)IJ_Iu&n7Ol;+jBX(B}vrbVBv~Y|E3{(SsGtSyZHPCGL0Y* +@jJaCc`kvQ7K2zEzt5-3bX|KULf)j+d1&oBc0^f9BT2AbV6#t7D!FYjXn`WaBaBdT82o95un_frZzm- +jjp*8)_94fBAGsv{R`6N0Lv*;9uZ@pce#XojMrh(j~f97PZXWH4n;`GUx_A89kfDAH%W7gZ*zhWoOgYoRV;Rn-oa +x{=6{l0qbZ|_A^C@RKcq)YxDrY))DupvDXF7OVgd+-OI`%LE{d90lgOdtoIyh1;pr4K-j6gpf93_@QK +Ri0jD}{cz&y_+y+~-Q6AMSId&=2>yQs{>xu~O)Vdt)i|!@aQ-`r&C_DfGkrv=sW`ep(9saKu*% +{csO1g?@$@!SdDEso9-mj8U6(aWfq|W;(`|^+#<1edMCErkVER{E?78GCb39P +(&h+$K+OP6QD)f%WUq^v3jmtBfy@-N9f=|`uf1HBi<-IJ%wL +@5*d&AR9@DN1QRL9nO^O2aoWq`p7gU&1$b;3Fgs_Ii6$Dj2jZRkOwKX_#c{RYAcm;AZ9!54pvRU8OIy +z=zb+s7BpO}$`7pBh+f_g4Ohu*kv1PQex*2y+}>x@d`xzIuc>QS;7n@5T3ESjH7JL5^T`LrJ +d2`Vij2j7s$&4-GM#4zrteQ}aHtUz*A{1jzj|z>VPz*a8%`1wL$LKN?gU==vAINKRI<_rgPU5nhj=n_ +`=ww`sMT=v=(r?~SpVHqVMyKtI_$Bj-Vwl?fbR=+Y*!GdIq)!=Jh}sBeq9PGn>@rV^@Z#w(_T0Pj7!X +DDsgp~LijlB_y-&ZwnOpl=^K%vXMIB~H5{331`=7pO`|Tyh#z@%3K@}cHQB8tRJ@HP)>+&a_c1>1Vl+ +yENFpDz6ooU=+To}cHMf^77!YKNm58R4NVHAfKo2YPM4u>>_ahv@9r(e#xj01YukQ;{@SKlve;mC8># +11r$)kpMCR3!e?-1-==5`Iz5+oCuje0b5doiz;=hH&(`Cs!Y-%a5q2BTgB7-iOt@2y-~Dqk_1>;1X^u +&gDmz93f+24yTrg(Be|#{Cq`N#F=LSDdWN-E`S0LKwwT5d>CJ+nTCNi(4@bED@+wX=gq78rfxKet2EuhFLd%O+UTAp1x@ +%~7!OH6!Z?9y;Ywr~Wc-5`^1p{7hKVA6_BVKE7`8*&^S(f)!Bi8_L8gIYME%SEq${Gf0076D^L(`gw5 +pNKy6f;=-7#W`H-OeD^5BCq~TtOmgXV0pYpa{#mbNjc=(P6m`#6s1v3$x>W-;5trD}51Ge3kC8;Ja1< +-Y7m9R|u}HR)DvPHx=NG;?18j;FYyT0bW_JD*%^itz6BBSJs;b^4fa)H3q!4)+(TZw^s3c( +#r3cy{o3h-KaQvtY*R&{$U@4l=NuNMu3_!Whqwg``L;Ptdt0ag5nLZBxFp +!+DG-s%Z>wO=s+uciRu)fD2@vqk~vJ_;yXJRz>}yT>yNEWxhP$Wx{KD~r4~e)@9;&~12t$ExegY++b) +ec4%%^1znHczyj-Pegf;OtNF* +Vyt?`=rU}cdtAEXaSBDzHvADWs6%PnlTwU{)LVWLd`wa&4iPug9$Mv>1Bq|{^Bq|{^Bq|{^Bq|{^Bq|{^Bq|{^Bq|{^Br +72_CMzK{CMzK{CT`z0n7Dx3VB!vLgNbXnHHJ0az_5Z<-N4X-b=|=5f|cFS@Pf77(C~uQ-O%uY_1)0$f +)(D-@Pako(C~s)-q7-b#EIp_>o2stU;=J=K|Q+V1tsa07q7q9d7crs>8*(Ma`8u`<4W7ir_#7)J{6n2 +r)g}4sx&r-)u+|PWd!h}YEjOe=Rv|157?_k98ToF9)V#M-X5j^i<#PVDbJnv(~@>~%-A7I +4tToF7UV#M-X5j^)ZVtK9zo{utOd9Dhck27Ly23$rIp)s0v|1PXWS3*^ymKO=FU4O +5HtKj=2!Ui9FBuH!tg3F;iaJ$#Z8!)1b^hHnp_X2furporn +y!)F;WTqdYn`1bI5Mhuq;>J+{`e322uWrA{qZx0VJVr(`+;la0uuP|b4Hi-mv!;Dz!B0=4CMl5xapzb +Ckmbyq#H^PXeE)vv@F=DBU1a%XPSn47{-EBrJbt01M-@u6J?um%x`a2l0Jc~%Kzl#yevxwySdl<1ii% +712BO{h)5y|y$X2kL=BDwypj98vUB-h`^h~-&Ca&$VaLoClClI!2ah~-&Ca{YT4u{?`Nu74jRmS+*k^ +&eow@+=~`{zHsdo<$_r-_MBUSwwREM;Wm^i%72jI3t#45y|zl%e9eQA|kndcDXi^OGG5s&o0+Sa*2rK +`q|~$NG=hPTtB;98_6XilIv%eYa_Wt?91)}_qZoQPog2zy&|akCSFrz2Y!u{> +ch^Dg(1nhA>%5osP_muMr+L`0fL*d^LXGZDe#5%zL6cuYj_c!a&24IUE_JRV^$XM@KC!Q;0_*vpv%YM +lsnbcDT}xiC3RQb8SiIdfsM6A9|r%b5$4ok-XbYtUSn>_mcR_HyRJWG50lvzId$COeVm`R*A8yfxlE% +z!8Ru3`ixd5HnsFMojnOE{JVKR&{M&!K+IJqgQ#AG7YUD){XHTXH72=g8DtqU=P1dyY)aCCW}DxM%le +E>U(OVdET`noE?ONZ2?>rsfi5ClWT!zS3N7oF)x@e6kb4l8>@SG*=iqkzjK-BR&uPaXSMzY2(H=MiTs +TFC+SN7bn6nbaWFVb{JY*(Bs!cp8VURHyEj!=aB$^pSvKk-yg7oN=9X9|(sziawb*_tF|* +y8xsNohHS`(mPGp9NT5f;Q+<=E4W_>^&7S({-Z3+#6V_Pav!j#;?Gr +%YeZLi>xh=VW5O!x@+i^|s$$y2%KJr;7~u<)Uu~b`nyxzllyg*hp3q6@QQFz-iMsP0Dw&RT8 +T%>I$7{R$n+fFiqbCI^4Vg%Im7{R$n+gL~9MB#0 +h7{N?p+W;dtNp{<1MsT9=Hkt%w;zZ$XR~Zrd8DvE0XNVD@pJ7IXey%Yh^mCmNp`RO!2>r0pi<5r0-C{ +)OXM_=RZnU^wYP25$LC{oe}7#uY(cjr>~O{=%=rX5$ +LC{n-S=zuZI!nhpr)Z2=vppkrC*pZxbWXPv2%npr5`ij6gqq?9niTn(Eue2=voOnYt_$`q|Ei(9aG=g +nronrb0iv7!mr}&4|#?9!7+I_A(;$vyTy>pZ$yo{TyIK=;t6KLO+KX5&AjIh|o_zBSJq%7!mrRxo?&U +{qXpc3H|W+lL`Is_>&3!`04p2|M6%E)#aZ<6I` +}fXBH^*a44onXm&M=Q3djJkDjp4tShv*vO_Zk!og6?sg&*sWwb(oIlHY{40qv`zcc{lRuli@ux~1MU{ +1&+Au%Z%LtBNJ9Lc^T*gS33OWRrF%GM5!==M?A(%tN@m@oW;L>igJBQ%1GP+vJAvnbAwE7)fN!Ftf>| +>#mQyqevcw;pG%#LKtH|eO>rgW{sBU8V!*;J +ep8$hFnfJFBRHh+_C-d}OZIJL1Xq@xKE(+1vw0&UIHa&=KO?xZ^w?2Ga0s62!Px#kcX%HoI7IR~YYto +fo14cO!6Aio%z#612;O8jBRHh6`z9keoNhB~0lWC;cCogxg@5kiE=F+mb1!QSd-j`$&N2f1&=tlG!Ii +T6`F*fXKYxII6*l9~-@L*Iu3S9KJ`sEH7Y5Wb=s!2vQ()hH^TZZLa7f{4_B+^X-@I{*5gZ=a$CilA^$ +S~A3s}nM3n?7}|8{XNBRE9zBwH``(a(;n-@(<~gWPItoS)w?$q4-0#uJRdzn$b>f@S{sVfIMa7r$_bt +rx5PvnRQqVk7+QplSg&QJ!P##pd_9n+F-e_Q`SY{beK>FYir0t_2w9uCa}x)S!8b*}+cw1*&Rw2<%|< +PDbEI+to8T?6rsc9Jb5P_HbW7{Xz4bdIolIgKY<82=jeBW?^Ie!T}zcP>nEuc|9ZE4(2xVxLpx;!1jh +D-TXz>Hg5;t+!|p7e)J0aH)ger#SHSUer{XR=M4u>EPInE;!cD^?c^N4|(hWQ=rN3rXD{sND*$a&6PW* +?87Ctup_5X2!v9K#~#Ik%Z@2RYCA%^Z0n=Q+2HJuGsb%{}TF=x6jYBZxz~Sf|K&&h{`n$a&74U`CPiY +!0(sBj-84kv&o(`VU(?a-Iu4+#3@Shj8CU&U1DL_fzCN`5M``~Kst*UMCZ@p{>;;`{e>f4~7ojeCb&a>IU9tkgl} +XahOVIXb@9A-Jt@RB;VE=urAWKfR*bhJJdL<0|Al=k{`b2RTn2bzPouX1^VLx+#N}1VB>?yDdey*SW0Sad3j`FzO5cv>}L$DEkZj^f?cEUHes}`W2?qM +xpFMRVj=aCv>p2g!FcEc~Icof^=`7#oRV4Uk^-mo8j;Q(7NHpI`a=eA)-{OmP;AMA*qyUCs$JL2cZ6@ +oZX^+xQBpX=gW0Cud;9pfr%?TcvuvLBjB)=(ks?VQfFNTfk3u?ZNZR!h$R14tWwy>|l +7WKJN9s#jIeRg|4Bj`Up+)J=Iy}6UUKendN@8jRW#`J}Q9PeOT`obXF8#bjcjB+LmThix_sAu5cZnDL +fBHzn)fX(R5i|QG#pXMc=wV@QRImGiHY(sBu=2#h<(3|btx3L9%en2sbeD9e0Hq3*!@Jb3cpU?J^7E- +KQ&Gz;%0{=F8h7t6i&AS*u96!955%{;uU5tqJk|T`3za6~Bi12S?jG+G<-@=HQ=Hh3KljGR1P$?D2z)=#n-k0`CWyk3d((I*~}vF|A@5YRd&iVD^VLF#@wcwdA4V@$%lZ< +6403by~d-y4UH`jG%j+>0<=LQ$HIjmb;omlZ?RqO-?YP3sK876zh;X8L^7R0@wV-TZ~x6V*P4iz4|cX +wGM8e*#hcB7&J~^VFZ)cljDqlwNvL9@vJS}VAI4R)ItaA4U13<2PsvNViD?_$;*tuDRrD>1e4b;?%r6 +0n&kz*6pK)^bm5>w(0jJ-UcWr`We(5vqBbZ4`@8O)i{B#p2Lu3dd5hICPr58y1K7wmpYn@!<^jA +1n?v&#)a}aj1Eotrv?!%?leC!RT{EJ%iDQ({?EqhnlyT9V`wtN7U~?KND=DSR9&P&sK%Sq4}NxMvy$E +n++X;C59aoc&1nanm@(*!4lB?8P*S$faWjp`(O!Z{t~wUOF;9(9Hd|gX#N`84wiuCCvPx<)QcKkumrR +~_wYFcq1Dmbj9`>G#(^4^faW$_XT)pa&!;wXcf=adeD8inbfH+8Vu|OQTO7b*iD$N(e>)MQ2zx^;@q9 +DMc8evR*)FyxEb+{Ct7kBZZ04{VOFXliIaC)*JZj_-OFVn_FoIEpQ&Oooa#;D}L@dFv2Nj16pBQEYQ} +@%Ij9}_ +tZQsu9JH;mXh>{E$*%DI>re4p&HA@QW7VkQ*m!?A8Q*+Npsr|GlFPh2Qw;`lJ>AS6iZ2J!XxjkWv`2+ +q`AX~7(q0lVty`2?mXhYiR12V=F`j5*DM`mBSW0TH=lB^*Njhr5Qd08>N6B? +jvd5lJEG2E?`2d!Z^n4LZNzEODj3AoW&9N|+lA61DM8Hx~b3gkxEG0GfA7up5gqpF6rKCfw1uP{sxg0 +meQc|;DeH)^Qe)i;8N@||ugoC)Z_JU#u`cW~ESV|gH>_9))`F*gIq~j(mB{j!6-o#Rpj)AbmGryJlDV +BKV``ALT#53Q|{Rc}t^QXC&V2Nk`3|k16cyx4xC7$^U9A{vON6((($;+en5o +*YX&IzGb^&-`V!DlGBn_)IMEjPv`*B_8(IVu`1lM?xLb{(Ry%s{v~~4&w0)i#&fm*~g)kxK#EsyDO~ne6yYhb*%D +yv!0Cvt2}=`y^-fQSmycj>0zEoV4dgBXH|j{3q1=H9gILrlN=?OoycW|{P1h9G2oebZ50Eam)BM^5aF +xTBQX&5jHl(@bqwfj8fAuJ{m-s_c7vfgSsUz}jTYyFGu40x@7v5Nt(l`nQP;C1rFAqKogzBtT)*T)zA40x8lILCnR1 +YcZW;AtO-o&tZ%a_^_UIRC{4hB5)QGt>a|`M7>ACr~|EfKRQ1Qb05YWXO*?Xq+J^XorTNqMaIol6Gkb +YTB(KC~A*}psKwZvOO31(J%JvPkU$OOj<$E)jRIb`3OVM$Bxf$Gn5N0DyR@FC`j +}h{sg<@GW~x6UGdwy~o^O2PHIKZDb37jM&5bE#hG6w8jxP{fe$57e`0;Bt +8B_y(&FVzS&(}SVIW9rX&({?FXDICXx{Cp?(62W#0J1qYK~2qL^@Jz;%QIh|WvBt@>pct=fFARUqT0n +h#jK&I#X+7o3MQBL<`LI~STsR3yec4O4|Of>b(udDseDa6zR@Ol`0^4%fq(`W5)?h|Vkm0Wh(?=utH+ +xd@&U@1=X5iw0#eOL1az698X(=mx`0#*QvsM4ifK&@}0jU(~A?i`Syr_N)b1?_0---pKehd1#q+S_wu`e&_--5mdbPJ)c0sR#8by+`^3P?2r`ns&Y5c(R{UziI>e +PJOWRwd?VUk*@I}(AQ1<6!djVL(tcV +ZanlgqMw4kM)gzB*QkEV>+A6b{Zt_!^;g$bL3xTj#k<{<7Vn6N!=SIxkL?Qy&Qt%`u +uZ&d}Pe#`6YaR-l*4NTk|#6)4@<{;I=R6vTT4AA3Fh8hA=@0ANky;mV1^5AVU=a4KXCbZ>49{<2b0Bp_+i$1gbJD9Uk=YGEND)xuIh+`>deqpF3 +d+;I@M5V;Q%`J#5mLEJ(V@0g$%)jK9AMmog>#j1sgfK&^iFC8zVg2zFsg{gp43o`+!7Q*}Lup$xBjeZ +K=R|g2F<1qmO3VBR`fJz=So+FQB#&guznDHD*CNrL+%Ek=8$UvFl7j-sf_^pZ2QoolRE!A(q`*thasL +9ciZKEbeOZ|mnv{bfHlcS}2FF9KBd!gXQxN}t8xUq;Ek3^b-xbdjDF~by!ZXCpouZz)AHNGxJOWk +sG1@Dp=yTkhx#e#OV8<1h-2pTsKhaIdSpn=oIVw^bNv+br6=yGoSmzu|Fm=RY2;upf5eAM`4bc)1xxSOx!auJJ&6QzVyUB6SH&u6!fJh?wOpOtEc +4boEzT|vvb8pL(b0mw@{*Err-@RJI7NL_b%@(JFW?0oK#Gp8pzDdQ4VBg<_(brP$PLmWC1iu7$@}{8z +n(zj*XfiGsi|zkQwAr733iHPbdpA6KT{1nTa&&g3Lr3bwOtQM_rJa5@W5!Oo>q$WTwO@4KkqtN`oB4u +Z-mzGw(%dkeT;lZO1_z8suVDslPB2kb19%fYf_IUpi{Qs*r=!d%^GO;kpp34(cgv1~;QC)|1TWTF7~W +dPM8hLJs1{poK#Q2@9IGV>sJm^Pr>hA(@&)WQctzcvK6hfY=!J!3TmCTDP$bV&A@7zF@RFUq53K +Guk~h1j}77u)N^{Qe>qT3>ak7y%bO}16^mmxRWyo?;%)>}Pt^pZo`Tj!^;4;U)KeHOhxJop?Lj|<(ej +#pst}NR3cYNApUTDB-T*(9i?zK=`l(Pr>M8WH%lfHUK$-lbDj@ZgjBeCZH36xoL@#64my5N%Yw +Y@Rv9@=OU0*KN_Efjc#oFFAo`L0UG8$D7^mSc9Vr}n+hM+HH^SM~tQ#PNAwY?GjRQ&xGHlK^Ny;1#C_ +4_SsJ`bc(aHSVPoNK#ny;y$+jW4N*^tbF3liDRGW9L_Hik4rk$IOc{k2sBnLn&7ErQHog|aXDNlLOP*HFm_WS +3HrWe|o0O10?Ul*60$r4=fMP)}9^0{J&lcli`l+=}Iz>#nuxYh@f^o|G1?^;xBWLD5&0Ly*==l_CTEw +P5Im8KcC4$_-;fi5%%QeF-@N{bWoazlvBQ88O{KERu}audNZtuae04*gTmMs2Y?JsJ>RLiCBi@(uZM4 +E`I0+)u>oNg8_luTCoJuY4j-;K{{PuVWXC79p+VNNkhMiT)8m)Q>Y7HxNp_vqP}($b-ApsRV*NTaSZ7p2Wb<+t_nh +a_XuIYvaMOxDmPl*=|id32WT8g=s_r@#Nh*C5{H$S5^j|M4`szH%rw;&}`HAqEp${l6WdFtMr@u;P~R +wls>SQ8D>E-;gBSND%BCGD#QW%Qd0Y`o~n{6!5ClT%BdNdFjpHe_1dfV5zuL6K@TzuAah@SY8kSTOI| +kf|W^Buz^6Z?bn*pxI!Vi~9cSk2`rIMlN!e?H0tVpLM-hEl}jhTRONy7v|(5bGbM!e|d#rNkFGwOUp( +6a?r)Vy`1vRDTmpq^Q}4Zn2&qi)1CUu>+-jiw_MC-MgUhlfB6;9e`>|jUz+*nE;MnWLF81V%BgysH4Ut+m`(eJT5c`pB7EU!J6|8JJp@%pN*DUdykW +I(nv(g3o9ksQb-MhYOC87YC#2Al#F$203UG9s*Q3nMszVEtA`A|TrsiGlPnQZbegd+LA0a!>t_S?+gL +ulRizBl*(CP-)TCDlNNO#dftyi!N31md0JM(xOXM{OfWTM5aVrf5pEr+j7PGJ+|eF_iJp+i%F9uY`G$ +AO#QO3F}7t?-Tn>9Q3?B>SnjJ}|1-;d1?=Cl+}qaQvD|Cnzp~tG;U8Jp?t%|7&^>h1 +d9{*3{z=l{TRujl{BaLNf){s$PqZ(L>ozj1{Du|a_W{P-XPcyp>sEkv!| +Fau&~ivbbKGJqeagJp__$g47d-?+tq*vH0zC~G4?)Ee +c#^nYNvA3y&i%e|-mPb~LQ%)fn?0q><>V!0pOzQ=O!p#L+={owYuEcd?o`z-ec@pmluAH4+)t~kEcd3Fu-u1{HI{pOt+U+o{{xnL{{IWhJ^%leV02{8M;bhCWjHZ!GuxuVlIB|EDbX{J*?p;J3_|Sd}Pxc!k^L_53Q!y`EoVx!3dSEcbeTgXLb& +t61)*r9Wf2cUEt*+)qhYv)uQyH7xi2Y%R;ZKYokkC^UGRd6|1HaXKl>5OeLv$_LK*pv_G6a&j`shs+;=pZ6qm8@X#bPtEjn7)0V*vzK&3?oXpyZbk*)ZDS?=xsf3w`%|NqBw&;RrpiaJXioj=Wo!UWSw>QKLfJW_}H +9poxIXckdof9_1jI3q~gwVz-F`e{GK2=vo_h7ste{Tw6EPx}Q%pr7`Oj0pVVlVCt-#%N`ME}{ui0D +6?8G(K}d=I9;aG9@|DzV>prh`2N@-Z_V+Zcfzbo4O-JLuTSi0G$#7!mz+KO>@_9%4lFQ#v5Ntc!knlo +4SE#~2ZIz+S8_?11}rUDyHl?Ygi7?%Q=?2i&*o!VcKK)rEez*Vl!9xYyT(el9U0^uzw3F7(6xpf2>oy +}mB`=>bMWKc(w5%G4$kkV%{BT+c`dgu5;ZXr{WE7F5qnb+$87!81$?>Sm_8nHChyOm*^rfQp%^PIey1 +^G$W~5RY1!sqU+cWI)*IqDp3}n+IQH2dBDOF{qE3;;V#9Bo3$e7MKzhD^s1UvP|fQona>Q)58e#!}oQ +Rna~e+Hl!%0IyW)`{dBTx&4hl~wPr#;92{jrKkV{QlQPxGE)NAMQ=RPcP>nLxxt$T{r*j7*&`&43$;= +$ETcUtus*4Fj^~h8gdnc5ROm%TogdFWu7yB&~jZAfMyo8F8sV??twp^sd7T2jR4z94nb&Bs9DzU+Js* +Bwp62wzo+|RMSb*hWqA9lA+b#Xt>t@FtRyWI72!R}>71iS1jbHOfm@LaIV9XuE8atF^XySZSO`+P3g< +vyPacDc{zCjVPvKk4t-q>wHD9a|LklKzg_E^uVf@7Y6QBkAwho{)L}9h)FFkxr`#Kw*|NOY9w;-pxY* +68O{I+*z@6bh?{6D>jZ!cXMaOzR~IKU5t3Mo!-l_#{Xa2mvqOCq}T5KD|)Fu_UV%VG6KNjEr0}Yj{ku +-UX;6Rw})~MRqeKWrIDgWilXL`5+_l!L{amwd5gD_wvv}kW-__UpI}fd#SPpqzQtScoT`OzgUCR9_lx +1)Kmc!z{^eq~!>T#;qh7DaJ5_eBv7fqgt+VZ?GlAUOuST`M9diJ7u4S^`U!^4~_f=Nna=c$@=Nf-(w7 +u33lrw?$GJ$egpj;#C7X{is`s!tHIsVpYd+n>_N9B@0xlG1A$^*ZfbF#MAia@!q(nH+z6EFMh +KJ3G?DNdx$VEezS)O^WryqgfK6Dvr~k5@tZx`#bPghv(tom@tZwHm>0j<|687r)t)gn99sJw +=!ozuD7-dGVW_Ax!o|{XoCg5A@^xf=(?h0XEd(B-X%xkZ?YlM02HFupbu +f67O5azYl+)ctfzR%4Q=J9>*7GWOW=WY|`@qKQAFpuwZi-dW6pIai#e~4Sb%^xHj;4LgU)N=LwB#1D_`}t_^&i(6~16c|zm +bz~>2#YXhGrG_DPNp3t~9@Z(40TII)&#mIT +UK`Mbu-Ii5*bFo=3K@Vlw_zEgXxA1G(!TrjnPa#lV^7Wmz)C-0Z_Wcy`3ehFgdS|Q6Nf%^s4ELjq`Ut +leliLXoTT$Amb1==Muf#1#LS}7|6s*gFrbUUhQ0yyeb-5t_<`CWuRSlza~fJ0{K=N*?wgz^P@}y<#K*OW#?M +pcLQ2NSp>>;^S3j<+1n2WMZH0wT?YYvcqc$l&aCYx%o{7$4iM&zm1_qH^Tx`xLxg#AowdV+d2^k$BZP +T#owX^#yt&TWQNp~r&e}9#-dtzx7-8OAXYDv)-dtzx1YzD>XYC|m-dtzx6k*<6XYDj$-dty`yGHU(gl +@4jg!%ECCCrcCS;GAI%@O9u?;K%%{LT~R$L|7Re*7*H=Ev_6VSfBB6XwV73SoZyt`g?Q?;2r#{H_z`$ +L|JVe*C&?Ht&S!7Mmx`kKZlA{P^7_%#Ys!VSfA;3G?H(M3^7HWy1XUtq|tN?+#&p{8kC`<9C-ZKYsTJ +^W%4)Fh70|2=n9jkT5@f-L=%f*A&(s6XwV731NQxo)RXs?VQB2os%SR +zeM&EiS%gOYk}vG{d;>&^v6*mzDB)sP3RNtwZL=qL-&(B2zZzimXd!~&Xd|}@^{m~bEJ{%U(!g%EsbS-Q#rqgQmK1I0sS-D)f}muw=S4n*iTsGVF +w6{J?tQ1iH98`tnXom2{RscgfQ!2Q-q}+c9gKp!=?$#J?t1^g@+v{tn{!Ggbh6GBw>|@og%FEu+xM!9 +yZg(N;JJt*3Jm4wO#^0H~UOq}>or@{BCl;B^^EqK$U__OO>HUrV_VAnZ?DPcD2?dHY$?~L?KP2ycGpX#a;aE1waYcxF5c;hlMA +or35z`J7Gbf6-6kyYum!^U9=1rB@vtSrtcNWVmU`FRl*7nyGvNAHUax`SE*0m +><8lg!%D%N0=YK_k{WJ`_RP#{al@kd5I19EVhyFEZE(XIjCGF`-evA#a6ym+g_97v~A=(+ctrIGcf+9 +f$=R%8&SV3Fm7c7`3^)Dm``SvoM)GT-z}p^jH_k9?`W@ybwC+evA?UmCZ3~=~mw(rfTx| +beBE0eNOA^PqDc|t+|A$m23Y2+7W#T}Y$5bW>lzBpB`hhY}sZ2*3=*-Xd_Ok`;Z_7Ph?KLrnsUlD7xj +ywuw!5eIT%UR!z$^ZH85d9c`S~7!GELw<6gzLh(fNA<9Ebmr05?(iCj#6o;hza`Q-t3T;N}PaLV%kb{3`)&X7FzW +II8|T0gj_T5a7u99|Sl?{+0ko!{2oQybJbw0$e=)K!A(Kj|8}Q{6v6@#~%rB@%T>yTs;0nfQ!d}5#Zw +S-vqdL{Fwk34`L!-^&%$XJuhM+Uh*O);teliB3|zzCgR;LVj^DbA|~RkE@C2H=^`fLeJ)}mUgjbu;!Q +4MB3|PnCgMm%Vj|8|BqrieMPedORU{_jSVdwY&Q&BP;$TH$B2HE$CgNyCVj|8~Bqri;MPedOS0pClct +v6&&Q~NR;($eBB2HK&CgO-iVj|91BqrjJMPed8y+BOFmlueM`0xTT5#L=PCgQUT#6;)@#6*Y&0t# +6-vi#6)NX#6$=M#6+kB#6(C0#6;)=#6*Y##6&0q#6-vf#6)NU#6$=J#6+k8#6(B|#6;)-#6*Yyj*0$E +(eCZX0(L6k;!cc*%s`BX#z2fWV&U0db0H_PLscNMLsB5JLr);GLrfsDLrEaALq;I7Lqj04V*x{C$I6A +sjwK6`9qSY#I~FHIcC1K<>{x~n*>TPzksZf864`OeBat14JQCS)#v_p(M?4bQal#{YyEx#HNQmJTq>PSq)p^n5voasnR#F37~M4aeIOv +HhX#6+CuNKC|Wj>JTq=15G$t2M+#yjMd^#7i~AM7&W$OvLLn#6-MHLrlbrG{i)_MMF%)D>TGJygx%s# +LF|pM7%jeOvGz5#6-L^LrlaAGsHx^EkjJit1`qyyeC6U#7i>7M7$wGOvLLk#6-LsLrlbrF~mf?6+=wK +D>1}GybnW6#LF?EHh$YxgMl8WzGGYlfk`YU=i;P%;Eo8(J>>neRVDlKU1Utv5zru +E|;1>k!-hM$~rvfhIM9ET!&Xsrg1$Bv~P|z#y#0%;TArDe-2u+Yk3?Yz6jMFEmH^k8s)Ena538J_>_^ +I*^n;>@MqzPg-j+vm25NAvf#c{v{Q5>gB5XEt{1W_F4N)W|ys02|QCrS{-ahwEEywY^aO4BJTO{c6ho +wCw&%1YBID@~`YG@Y{2bjnK8DJxBr!cvetCUTGJ_OO{c6iowC++%39MYYfY!D +HJ!57bjn)ODQiuqtTmmo)^y5R(r%dve9(PM$;)9O{Z)$owCt%%0|;E8%?KdG@Y{1bjn84DH~0 +vY&4y+(R9j2(dcKh6T!XxV!+OCD-x%P6p7Qsio|JRDRKS`DAJ>e73tB$iu7n;$^3=@MSnE0qCc8g(H~8$=#M5=^ +hXmb`lE>z{n5mV{%B%Fe>Ab8Kbl0*A5Eg@k0w#{N0TV}qe&F~(IkrgXc9$#G>M`=nnckbO`_6R +n~g8mlOW1||nF5he#QF;#R$1CxW82$O@Dm@2BHNfp)6z~mq%!sH+(rivzMQbm(AsiH}mRM8|2Ob%jVs +tA)NRfI{CDZ-@56k*b2iZE$1DNJ^zgnRrAfVKjP0BSNt05zE+fSODZKusnE(4PTCm^3g`i1C@CP8ygg +#Q02+C{3nFlqORoN|P%RrO6eE(&UOnX>vuPG%!<$@wuW?nq1K-O|IyaCRcPylPfx<$rYW_ +!xuR2=T+t~_uIQAeP;^RDC_1Gn6rIu(icVeI2r70Di(v*r$X-Y+>G^L_bno`jzO{wUVrc`uFQz|;8DHWa4l!{JiN=2tMrJ +_@sQqd_*spynupy-rlpy-rlpy-rlpy-rlpy-rlpy-rlpy-rlpy-rlpy-rlpy-rlpy-rlpy-rlpy-rlp +y-rlpy-rlpy`yArc+j$PFZO>Wu@tqm8Mfxnoe0M`zcMOiItTmR#uu=S!rTrrR=9Pm9n4GRGO4oX;NmT +Ntv}KW!9RMS!+^etx1`+CS}&jeo9kodS)&4%+6eKkG~(#RzTBDYfU$;HQlt1S}rl~biv(`k +-MiVs~P1I~OQM1uR%|;V78%@+~G*PqBM9oGMH5*OTY&21`(L~Kg6Ez!6)NC|Svr$A%+fzhM+fzhM+fz +hM+fzhM+fzhM+fzhM+fzhM+fzhM+fzhM+fzhM+fz1G+Mc3p+Mc3p+Mc3p+Mc3p+Mcqh(ngBBX(L76w2 +>lj+DMT%ZKTMXHc~cK+DOqjZKQ0fw2`u@(niXrN*gKCsErh9)JBRlY9mD&wUHu?+DMT`ZLCP6HdZ!O+ +E~#?ZLH{{Hdgde8!P&#jTL>=#)>{_V?`gev7(RKSkXsqtmvaQR`gLDEBdI76@Apkiau%+MIW_^qL11{ +(MN5f=%Y4K^ii8A`lwA5ebgq3K57$1AGL|1kJ?1hM{T0$qc&0WQJX0Gs7(}o)Fz5PYWs>lYWs>lYWs> +lYWs>lYWs>lYWs>lYWs>lYWs>lYWs>lYWs>lYWs>lYWq?j?aUST_*)EZ1r#0D_7xr0_7xr0_7xr08by +b-M$uudQFK^qlntWRDEg>1iau(MqK{gm=%dys`lvOEK5C7kk6NSXqt+<;s5Oc{YK@|gTBGQr)++j_wT +eD!t)h=wtLUTFD*C9kiau(sqK{gu=%dyu`lz*vK5DI^k6Nqfqt+_=sI`hdYOSJ=TC3=zHdXXdn=1OKO +%;9AriwmlQ$-)OsiKeCRMAIms_3IORrFDtD*C8R6@ApEiau&nMIW`PqL12C(MN5n=%Y4M^ii8B`l!tm +ebi=(K58>XAGMjHkJ?PpM{TC)qc&6YQJX3HsLd38)Mko4YBNP2wV9%i+Dy?$ZKmj>Hdpjfn=AUL%@uv +r=88UQb44GuxuTEST+v5uuIQsSSM*VvEBdI-6@Ap^iau&{MIW`fqL12K(MN5r=%cn!^if+V`lu}webg +3;K5F6T{NE>pxPbh>7lg>2oEDzVN4}41^p8&oajpJwjS$!DADb` +f|tAKj^5of+dEf9;{IfeZ4-*Hkwb<&SR&abf=WmJk=`kM9U^asK$85SMu$KM>+l@6&!l91lJnAS74Y+ +VSAiAwnDvJ{=~+@!-=DLL3i1O%dXF@aZTajt8Hny9hj^Psa#x@%hU%-43=9Cj)#VP6il9oD6V|I2m9a +aWcR=;$(n%#K|yF0|fi%<10dts6j_92p{JuN^fj2|Lt3g?GNn!@@alBV!}h@>gZA0lZA_lHQD! +u}zWrtp7=q$vy_B54W-h^Uyt=^-knuzHA!DZCz{VhXc|sF=d-Au6V@dx(lD{2uPh(^gd{3VXI +1_(FN3f>Zv2j-G!xIznEq=q}v(lL#+bW9^H9n(ln$5>6rSWU-RO~+VG$5>6rSWU-RO~+VG$5>6rSWU- +RO~+V`Ppqb6tj#x4I8L0Xv6`rfny87IsEL}WiJGX1ny87FsC+vFh)4?WiAf6ciAf6giAf6kiAf6oiAf +3ribPGRD +>VIRD>bKRD>fW#tftOV=#p{+;D|BsIZ0jf#3^qlNvP)Mokl=rioG0#HeXv)HE?_niw@rjG87!O%tQ0i +B;3Ys%c`?G_h)$ST#+o8Xv2siB;zT@QOHrteQYpO(3f#kW~}NstIJ(1hQTN(d}RwF-hSXF-c(?F-hSY +F-c(@F-hSZF-c(^F-cQ3KroM(q;QXzq_B^er0|bG($180k3Z7V)&Pl0$pEK{lL1y0Cj-1HPKHbqI8wM +(OnJCcOnKN+OnLZHOnDenOnEp{OnF#SOnG=yV$8_Y{u1^S(+d6+lPA;k*c1+xXi_x{xtfl-nvS`ej=7 +qSxtfl-nvS`ej=7qSxtfl-nvS`ej(H#*e@4_a$<;K;)ilY~_!MfI6zY5ft`#Rxp(aqFCQzX!P@yJJp( +aqFCQ#ue5Z?{~B9eN>7Ln95wuq#ju|*{Hj4dLmXKWEkJ!6YVTB-r^3@0L~XE+f_J;RAe>KRT%QqOQAl +EQFelEQFelEQFel9sCQ;2BOtMbB0uDtfjOQL)tI^3=1Hh&!;An2K9OfR^Zn9+8V1-(pRN-k&(=#}4)q9dtsHd$SVJ)Zu8k7{Tod;Ra4l>IaP4aeaLt<%;955$z%_18K&Cu +7ydr+`LVNO3d-8$y~V`+eoLtcoZ4Fy@_R%@DazG>Z*aBO#DP5RHSyiux +)+J>2esEk{pwyUzW3H%6W^SJEQgP +x8l0xV)-4~I&S3sV)-4~diNVo-EslG)Y(9`Up5fm1+KG7#y5x6Ik~ZTo3O~k76^+yY>}|U! +)SRZ|NXmUi_905hlLFUgv!=Zq&K_er0=2_CL9i{aJ21{f|GVOZWIIG4&u7<5)c?Wj|N-WVyii+3Onp+ +~*ZSTq}RRLx{_f&-V#&8S?oNA>tVC_L|F!FVlp$toZzt5SJ659}wa);`0kaTt0j`PKe8fFNX+mx$xyM +AubcX93jNz!IvpQTo!y@BgEyv=Wd4A=)t}mAOw+FC&WeO%RxdAnJ0v}p6l~7LR@@4-z5a`xkm`%^NMA3rth}CR})oh5>Y>3rtNYrdd)NDx9Y)Arao~U_{sCkg6d61}ikOX3qs2L!SP; +IZN+)w04=Y4^mnb!}rLSN-lKTz+!%B8^C!22FNvnVh^dtZTP{`6J;^i}=@)*#+@-ac5?jKnoj{8G+e~_r-Q*h6%K=QTsy^m?;>wC$xdKwQ5gjRX*B4+gi0Jw1Kv@DtoOuJFqH; +ZJyh+u(k>9~?uc>*Hsy%M1_PD8nxUxm>7RE&{8~LS=EGvb +a!LT&OHAR2CNj78fdu3zfx%%Hl$0aiOxfR9RfAEG|_Rmnw@(mBppX;!#wnDvRZ}) +#|#Ds#4tuwZ93t3{5W<_iK7moo{-%;C9n10_6%ZmNdOms6tI|AZBmvwLrNlP_7D;Ys8z^P4rbuN_JYY +_cw&Z-;jur3d6Jwq-!`~Hz37oL6p#E^^6zJF%O1!&)I7;+KX_b&{&rrY-!jxV=ywFgh}Z8KLcIRK5aRVCLx|T;3?W{BWC-#4Plgb$KQV-O{TD-s*M +BpFc>S3n*E?_QKlkIt{__O8F8bF5xDoUZ1h@h8*WVL@gZ}uG`TVLdGnKCGt&!iV*=K=`npCc+y%za=1iSWgq-eV*SF5I(G@ +1;U5*v_SZ&u{qGT|jM!y3GX!zhFLGDL}GbaghoZdKelpx3I&DZ=_j@QG*D+D=ak5?85O7T~#1Z +DWGMS>i^N0;Uaa)jABe2XB*n9+sH1UbqKkDVgOk$m``AK9^dIK_X};I|%kAz0SK>FWf!cx|m8B*?{U> +)cI(T)f6lT^n{LpnLqOnYId!7sCa9T=3$|D}o#^MsLp%sW;arVQQf^_EFkYuN#5`eiY>puCV)+0;ju%_2uL(lD&P)^J;x&3rZHO7e=o+; +l<_x22d_xznt#i~Gm^TcMJtfG+Yk1)~L5SB8N;_$6H8Do}c3L>PcAqDPF-HBiK+6tUAodHqJ}C<%UV- +7mz#aNtfvtnDWC7z>^4Od#VEsE>y(kN$ejQF+mjyEaC(Z}%Aoe9TG2XcyzNZlcw%Bmy5kXSRh^-vmV= +Fa)B%pch9x>D{w|hztm8*q{-dL%%G`q*0bjziI-`#zYk;-L(a+PekG*G|Y9m?HufgOqMwLrNjP)>TSO +%|9%Wzqv|vOqktEO5U(P%bbF%E~~wQt}`VJa3-L_RGKeD^yOtOVM7FbGpLFxD|otEv$TwA`O&Fg@@Q) +6FYm`Yr=081(9T5}xS!lP+g_8?$D#_9lRI6TG7z^im-j2b>W)-yAls$HPWm1 +Ju3w1=aNTfBfa`t}0$jJ-C%|>Lh5*;iS^`}6niAl;)rDiKkPi`_HQI^_ +!48^-1CDItH?y(ad1$7L3Y`;}QN$_;iMo4@N`6YP%bvgWVE#y|I(KhM725flM>NswdE=Bon)VbkvX;o +F2^)$?wiAV;Ll_YVoOfZh;~`bq4T7*&cm5LB1Jm2i{ +A&kl0G;bXSf&n-EE0s7#E};SVW0K`4fa8WK$OjLdd50$*>@K +bCMv0Z0bHi2-(y+LD*ltdh{k?Sg9W6KSRi-4-w=-wlPOH^jE6HV60S!$EFB^ve22-??4G43N%)b8|Tg +wgovFuN{|I~j35N;1Vsfa$l(d%Hdc_slSc?bz)tcbBVZ?q9Nr4@6xR^(IyFlW;&ti@K}fMvYh4H{$l) +pK6tRLFp87x#UP+k0LrlbCaO=Qhg3$Cc#|c8y&k&`s7@W*MSRf2-KXZ>DwEfHzg3$J7C@j#DhuptGO& +*@1K>~X6aCVv?wEgUzE`(L)@GK1T+(36MPD2*T}4=+=$Ku{iDe%6J&)$26%9Ny}6fd+2u>KxuYO%Q@| +lYa|AnWu3D$3_ir(6EAYqlWX;Sz-g|aGp4ilcR>WDPyq_baHEs`aK*THC*5yL%*`&?K#dh@c$`-?ymOTxP~#5GMsQ-)aODy~pvL +MlLC|`x5_v5z;dibfhwoF527hIE|2;vNYTR1kKSMws(R>1XNQaO3i4c%S)DGB1I($UkOzOqsKHU);Nr +#VUSi|vD!^cD?A?xg1Lm(a#S+JLM;|8r7u$grDgjNPPoND-lVuVel!?pbcAs$bu7s0mD$*mWZ+1OY*T +&H;8=&1J3h)39AI$Y;EB3A1(Bw(lMaQ!Vo=v80bA_$>+K@E(}rW^B*2tw+-peYTun+{)63S+^>d7ruhQ4pAO&9qzn5`CwEVu?PBmahi@p +$u?2N<`y>rB*lIeSCgNkS>F_PJ6}FUaEYP5fJ*AU{<23EUuF}c!QR?KeuXOm1e+>!qj(Cclr5g)0O~M +gU!}t7KX#EeAfjC5J_<`mpI7Mpsf!3lpMrw4BS`oWhHx_9jg6*sui?r^=e%8@JT4duWsmblDjKSDBL~ ++5+*3l8_>9MtSbc9y0*xNcfLh~eSZk2yk0ODtcK|94a8~~!J3%0qAc=?TeuA?dHSg_G`bd=Tx*y%btO +237zuA`%rn%L_)nx?5dHoK0dX=;GouA^hu2|~P%Q(|Jj>*xeU85>?lr??u(u-o@3D%kTnI!QeyHocBc +Q2&NqucK4c1>>V8qtn!3;`pi23-{TOfjXQ4i>&$ug_QN< +kRRA+)xprX2EcMwq?rLNR5(6sbd6?pI6!N3g* +tN_p*24EfFKvJ%^7-R9HTYjl`;;}8eOB#21jX)uF>oahiQ$jQ+J5tv_{uSh`@nblZ6?|a-6BP@ql89Q +?*7nX$Zi%TB943$v9bSbc>>bv$aOI`LCesFU(Q{1&3gbR%j`TW3Wbdsqe)>Sd)b-d`G0%J)#Fr!`gUE>nxmyHM&pCfsZ#?xJ|1%Sb3ud)KoC +@Hl9%1!_FH$pz#-m-smBP1(x3EA(0BE-smCe*o`+My-U+QID3;@&q%j{xi?w3$3KUliATd4Zs92nrZ_ +HZ^pw`JI52Cp#+Aer=Lxqyg7&N{!g#j1g#22(7W@QHy0@R +;*{K6M-^KZJR6nrd)N6vkiqn*m-YX!l?-NwwuZR@z=r&$c4+SG`YnE~xM%>mcaRNr%*6b645dX78KyN +GO9OVeMa&Ek(q=S98b#9R$94NN<_&H$~e?}uf;)UhuS;7#O^N$JgHL{z8AzLpIwc+1Q7T@0@Y~W!O88 +~>8r2~fv!%XJGTY_BFHuqB^!NS|RO2Y~)yvfob8X@4}wb)a_khe>RFB8`HFuo@e_Zs!T*a*6HjanHt- +qv*@5Ny0n?(1RWZIL^b!^Yb@K!XQtyv>8u*Y~~1oViXI^63_hRPgb(Zg9n*&d11V +u-CZFpFvP(@+nhc~ke4hE>2YD8Z9O7J!9d%3bc`Tuz?!DISuY|_sg>ZMZLLv11_y2P_&h<#qBR=4VWe +%X5!qm*Z9U^^pod#}&kv3H$U5HN(H*EU%`!5Cupj>dhMZIk7bG-knV+j>tk9k^{CgET6^ZyO&zL=d8Oh6V%pZR5k#`kvo*mnOBD7qlCc +yP0SC+~B|S7TBlf2=j!;(=_#h<;I>>4$EykO%n!KZsYfEyzNYe_x9sIJ5_M(*qo(K6V~4NI4vgO?2V6 +8yx{DOkJBiO(`AOoY3AX1e&jmj@chQ&ufUDtw1$HnI6gsxuxAG@->2~icHsB~P1oTDj!*J~A)!xEV!{ +m^pQZ&P+`#ck{womUG(VUN*m#DB4L5K++m&Z?xPjwSL~FQ#W7<)d!wnqI&;$r>;CO~|!E*zbdH!E`eJ +~mPIqbm6@)~t3@B=r`@t+}Nb3`5Zf#W%%4*bCJIhu*V51g!s7D3F;)3OJK;AHtNtpec)Zk{LZz!BU$P +wNmkf|KR<^k}dICo6|&mH|(2^E@>cJi+m0S`on$9ABo0!V?@{CeFbV9A72{4xZrn3PXt56?Kgim(F5^E5QT3f#O%wT4AEzC{B%EV}V +6>NjA~O;$Kk@aV=1)H}eV8!ynh4<6m-B^oQ?(Tx{qh69goI;0j$(@VT>%pjNF$yT0x +^3FKlEbOnK16*ijJoZ^Gy#H9H@S0-SPZ9b`!GcfPTlr2Kbni$_6bT)ICa}6E)nEnwtb8O1E+3#hB_BG +b=zl%#4ze6cOFqz!>QZ8Km>tPx4BGrgj2VDftcEOAzKgc|J~cq5be|feeeo(IdBBGuhN1Aj^OY)Epy- +qZeOGB8IIs&m3;uu5?r08l^-m@%~c{B9Kp?1nrp!j+`dVDpJxcJo}nHNhT!I1el(C{^(@Vr;0SKdcga +z}_S>FcB?t^yz3`kcB<;d&f?Q-a@2?Srq+R46Lu8g$2tv-T93%)iyYikO#O2Xxg3!^f-hWIO0(1W?K} +gys`w2qQuDv4&W8)gv17qXb1A<)6Zm&~wc(&i&Lv%;jew%AA34&;I_wW(IFgo6y=38RLaF>>v1&qJ#* +KY{ItB&gz2tv@_ydnr4E$vDzVEk>r4Sy2kk3ap`x8HyF(|5o4Kfm~Cr@P$u75Uob_V)eq>p%W__n%SspKZDw)i0*{#ZX%Uc5)L +fYFQNJ+RKJAkmr(r@s$W9&>r?&uRKGseug}b*`t_-PeX3ud>er|G^{IY_>Sw5ahU#aieuh(n>Sw5ahU +#aieunC2seYE~XQ_Uc>Sw8bmUEZtXQ_Uc>Sw8bDb+8f`lVFAlOVaA|NaUv_0~WN&gWZF6UE +VPk7AUtei%X>?y-E^v9BlTmNeFc8Pz{V7h_OHu_7@q{Y%0YL=_0oB$$Ob9hja_PJ}cI0!{_1ojvPANl +zK^~Gj-}&#~oi7*Am{#iT9QLkz@tSqk^uRX{Xh|9kvLB3fklYl-#|8)IeVXF4Q^ZY6%SX394p_ok_DD +|j17j&=@h{j^!#TrF3(>knVQWCa*IZr}-KBXwuKz5EV~1-zOw@K +1#3gi^I=b`#0U+h|MJ>%m)f2{*w&%TN)d;&~-vGw_1IvnrC!%e8+KBvC&NOvV +9AwlKm-imj^i3$#Ps84DBKhsV~|Igr<5ewtL6*kSlA4+SzxWALse*bFo;=JZGPx+X4R+BIJ0)&!+f^= +j0K{#1UCEanH6Y^uJ@Scpm?1iN}p)Lp6>=bgQjA;FdQ8;*Xa%FJE?La&u{KZZ2?nD@!dZ&dkqKuvO47) +KM_dQ83cv0sv4;0|XQR000O8`*~JVJ3F1ztpNZ4IRpRzApigXaA|NaUv_0~WN&gWZF6UEVPk7AWq4y{ +aCB*JZgVbhd5u%cPQx$|yyq)c<&sLJAArOK5u{!y5`}AJ;x(~w?8=Xp{yl3u4^u!Q2gmWu&W?9Ctzyo +>i$1XSqxo#{;HA;^v|HX(K+j^axML2XO>AK-IMXBGNONGBbjabW +fUn)epp)*xTT@;+}c-AM%5-J@ZX8RlhP7u*v>@4<%C@ePl{<=-qp<==l+h-pm|F5_+1~k&uc~-fCd +puaA3L&RTzEBfpov}z&mMehUf;D+*KD}i{EoRD`f8u~FMg%p)eq%f&Tq>Fr;KUlnW!Dif4~M*%E~C|% +7QA+y@lb18oVUn&l36B!JZVL<@`8H92D2BU+)%X@tLhS6@&|0|X +QR000O8`*~JViT|rS00#g7$QJ+r8UO$QaA|NaUv_0~WN&gWZF6UEVPk7AWq5QhaCxOzdvDt|5dYtw;^ +tz5lscO11Zi!=#fCnH4qK37$=0DL6xyb3ZL;KwR2rx2KKt%Si6Sl8aXTRoo4WV??vCUmm}av$U5ucR^ +W&$Td7iCsDM|QL##t&LUahlSLdsTrCX02#JLSrZNiO4+`7SoXe3W@Hm7PxK^3MT`=}mCUbAj@rIGtzj +!uK#9!=TfN=YS-m4&W1~GLoA$7s%n^mmVZpy71MzsE|`!zQ|JE;fdf)4*aavWWLcaEw;+ifd1U0i~!d +a5x<-AwS*s~%;QNR`O7@d@`w37XJy6{$-L0_(cx*rgn*ZK@(S(p>Y#bua;@8gE=HV_P}cQ*t*qOv-b2 +pUITt*Y01|iTs@*cCvN$t%n+y0}_<+2k)Qi8^2Ajh!*MYbV^v5tN%#m}WGbB*R(~F2iUgl#DY`<^QkG`r_n-=@78gY#$)t!Pti5;Ll7< +S$V(GrO%OFl;iD?u(nfEFsJzK*#v|x#fUL!-ylK7qjvofZWTzW;%Xw7oABKTKgT_|1@s|n8`n;X|K{! +^}iaDDOmE%0?VU4j>eBlQEx;!zUr;I!+4#31{m{f*&{HB!b|gG+hZ4;7#~E%eO=1 +E6ABrLgX=FoHoII4C_q9YAF?gozOkK$>71vi-%fNrLO8Im@nkz`GV(ryPy^0FVJRZW=mtMLQi!^o9i6 +`vXxRz=n3y$gg=?JI`6Hh1H)F +D&T&u?mPNryn3KuLe~aRR6|r$uLz&83#qBrQ52POe~v_D%t6!=j~6lUyA!d5bCDdLZhG_qu#{z>RQiF +^^U3vyRbb>o73l-CNP1+n&wfbKZVx6t9xNPsx5I?y9ZwuBPhBmv13W +uzQSzo$Nv)t{{0_pqP(LTH%4d&RCD*fOaB{lK!v0{iOG0l?R9=5j7F$xQqf_-9Fd^!UD{xG)|7U5UHY +L-XGg+nnWYB}NQ!M8khG)leFcG^3MOk)@w(PWIt9+}SYs*BqB;ZNfiZ(#1icRqyT3s!*Rn~w?m +{njX;N{z^*17^uI>GZBwV>A|yrwwUmRd7hPXrP{s>j*bXEB7-_$CxeD4b#yc^w@P1Ibuxo2-4QHo^X?WA +3p()*#JUnZJydhN;=XMTyPVgILLV_NgJw+PddGsejFwzWtE(7dP?B6gnQ +hGFtZ&%r@a;Rre(9Em${NUsg3oY$&cUOM5SQb0);hxh6xN;7#F_$vlI>*YP&X@6y~z6{z +y-QQ<2sH26*{tr+~0|XQR000O8`*~JVtE}ctBpm<%ij)8V9{>OVaA|NaUv_0~WN&gWZF6UEVPk7AW?^ +h>Vqs%zE^vA6J!^B@Mv~w4D<(|kLMjwPQnD?pLT~9At4@BbEM1by`5=%SN{C2+3xJlCtNZWQJu{d$Kv +0y=&h4Vg76J71boX@k^t>94M&l%$PKV*>mdqC^CGQ{dnn`oV`GvgG +cpcynnyE=ut}P$`!FNH5!_tB&4zfHJ!JA{o-RiD#>U3`-}+>LZ#ti7nn5)|6i<@hyC2D5K>8cegaE|e +27xPz^B{ki(+mnU;igTdNqpVfU@ymXLdMZ352Bo=@Nbqi$1PqCuaxGCG$!MYdJP3P=rp4)a`?@jE#hd +Dj49HWr|ijn8phZ7fc;&$W>G6JWiw2EBF*hKc_s>eOD?ac599`9-RX4LqjNf1F!6MR^M^o}bwdjIL!L(Q_31lckYv;3j +sRirAKpK-jW?4pgO=?O@;bSrfM}1we4mlzE;bMyETZX{rm{?y^QL2#5(JEppsP!-0~W=j4>ZGaadm+r@SH;q>j#!H0`;_;YZ1dUkYt4*JLCjqgX(Fw3O +Kn#u4FI?A;MVr>YbkMbaBW^_6M-5CrU4Gn~uAee>u1TTayXoOk~>YAvzS*ul9s1wfTG#&$-0j5m9c5T +Ad6fE7LwHN%jyl6%PYB-~_Bz^c4(YuzXR&+6)JQ-rMHf=f`TnHAXY4}iriledkEfI;q(KXFKh0_IR%0 +e!z%s|8bT8`AOEYQDXR2f5*7@7=r7AgheH0kyM2&Um|I1Wh`{Ym%8?;kfr|I^`m4yLVaV=9`xA(`v>6=ueKH0))3j&50}7l12=9tzEo-ZH<7_k3^LV!Brt7hIpN5|eczL)_3HUNQ}4cFdWI6zep25J~UAQ1-G9>I{cCxhbU(TIQ(Wl +`*1K^s2ceJ!X8`33~2)fz?_CI5jc&RV?L7=>}1H* +bA;DG-U&Rq1y(j8T)q)?Yh7)|MTPir*zIbRgoC@@-4A$U>E$fBj8lcGR#gT{-(tQ2F{Nggl_L=$bcY* +wWHHbEk7y&N^l8Ab(v%H!gGo4ja~=Pf-Vn4pTMInd{nrboA47Nyy^hzaWigRf$N0voiIeaPC@W#Ai`IZTo%(1K{Qd{1W<8ip2p7Cw!zhzk5vG5W<)N<_?G-GPG3atf05fjXHO8hdC-!@K2V0FZ`SbM +nim0CfX!Fb^2BVteDri(FouZ0!;ni)RIiEw^#zJnvC~040qBcTUxZFz +v;o7$utRbLYg0d${3W3DHAY7j^DpKd~HUoeSk;GNb_wNCs~aW+fbsIf#}Go2-3W~IBdcAO$e%A=xMf? +W0Z$olG9c^A_`{VJh-I~PO~XVf)|LV%%6}X#;8jP^l;3i3 +KRfWG`f2vt0SYCFMET&`ZEsLT`LkiErUS$Z)^dMwY6hIjFA|#x^kXCiCQu}~Vg{z6(Ed=ffgx%N${gE +YctCIA27^T@~VgT(C=b%7Ys%sI3FNE2?~L~727WKsNihylba6T`YjlN>K@2B#U_YPF!RU0#Q2)@3#P_+#H+2}GbzDc8 +b!aLxcb#?ErCkMBeDKteG@v^SyE|dRJpy;m{`eG{5Kq9)V!B)>g&U+8%xpd^t8{vGN=fYpg=PhG;!Q>JZ5gFa +H?9hN2kOpsx#)ghbs)8R0n|2P+l2PZx;)9ftGnFqqMG;*#&C#W2+MLf_pn%0Jj5Q#IF*5`Zdc@lBOs^ +{@28y9dKKQ)21o?JP3`4P_W;rB_J6X7|jwkxzff`EC2^K +ZYhP)Zi-qABK3Q0Zk)+2qZ%qnHwaqx6)k)mgW4c +rFec}V^;#Y9SmQ@S2aYgjG@(*pTl0DUdBSI8pujluXqXOVXofJY(qRQ&)=ONtAe)$_!>QOwL91t0 +nIhf+(Bh{@eNCqz?tE%)8a==Bz}Y4(?>(@l(TY0{oN15Z&Q&=WXa&h+l2O;sskQLV?#MMU_}X9+kva6XHan4HubK1;0(4a^MN!-1BP +eQMHYRc4Fg-t_A63ag;gyTQUU0bjU3^zu{GZUgHd0=f>sT6m}L~V`{`k?d?^<4{pRPt;r2OP3q +lGbjQxRuu#GmWbXh7$)PrE$k}@wstRaQy6hbT&7>Os?FJU;3A%90F)*DT|B3+Y!F`XKb{qK9;f*(Bt3 +BmK$z+1v!pfs}k7FXlY>r&7;2xjRXIeq*7Z2#~$*grZVKMWw=rdj+whKLb&-*W8BPXg=nJ6hU+Zok;xAqrPmET(}r0yp(rNYhCtJItw90;R +FA{a#y!SV%>UA&=BWgezRA2tQ#1v$HkiD6r18fcTYxruLibX;yi7*4o&!R-wchE(o%oK-L4$q{u6uMb +6`YG`j=_LmVPgR_HzJ7F&|)S0#y5reklRTdXp +Z#)xk#hlm=167&DgeIY_fiPeJ*)pSU$LxLrBl^K?dko7gYpyhhE;e*AZ?oJEr0WcB;6I3lxC^28bhOC +nK;Lz$`48xgacb1qP%2->Oznz02r1znL(~%g+EY><+CEa}t;9|KFfb>2hUDK!ci8Ll3#TwFCFKMSwK- +i?s@GGc+!j)oh$i#v;V%DOK0u6HjkpDk +3;dw;SX85KlECFVbKP7-v_R?06Iy^!S;gNox2Sg~#V_ye;HxsHojSq9kh} +@*Qa!Z6sc{RyIa1wr7tNTi+F%u_w0i>UE=SNV07Rto3`hTAKa8qBNgBQkpwUrFpuZG6sx`XRl9fv5JyXtY>W(?J}{Rm56m$inaIradO?RA=g*0*AeXYUs1 +3xrC_)Fj}z>(I)Xi2N3hTSih|wu4Q)z%Cr4_DZ1Pmz(;(}himcrlWR2G&Yu8WKVHH`u@+Md#;4$hys; +a+VLo81gIT&Oeud75))&(16ovf=wfBzgxbktp0iA=JV_^4%6`Bm$vx2|g4d=Aw*>aVL>(dSUDqwRH7> +mQ#*wRTuHIf?FB2vWDBl=G_k()LfJ_XJ&4Z+TZ$J@{$+O`w-ONoZ*Z@0l*V+EGS{@cK_6y#A`f+pZ_P +{yM_j_6zU1F1(#Jg}3tr!rNI@c+ctyZ)Y9hJ@X6ig)Y3>1F{m~?LL9FdnyeTAYtc%& +$I>WFg5&|;mby{}M|hoz!)mvg=@z5D`eNnB({j~3aN*1s<%vdZ!PmsX_zo8>x7RrEzfLsXS>5MNq>z5 +-F%r@MH~+KEU^nsXZ`cQN7HCH6q7-`!)FHFUOUK`m_&Iyw1dYHzb>tKdsH++weWC~od55f8D&eJR46< +7+64Z*(71rvZ-d=X8X}+?jD&C)5Q0@e-<3ezHoM0Bj|Spv9Nb^DVh}cl53}-+xEZNM=zS0)4p2Q>HQc +o6Z4KnsPZgJYwcHmvB6G7U9lSp5U_?dyWWdB(l9+c+88Pkkw9R;TCD4ZL{|x;Tj_}PLSlLFciD*tVf` +5dSbk$WkPlM04y^9pGAq%c4r?K2lbvv@Kzx$Ll!YNOls1^)NePK-3m_?j@X&S;#i@6Vga{YT@}Y>u1I +qGH=jCT)skF!-UfXLPt#*kVJVQK)L%k?J!WLnR*KZMh +iG#b<%%wHvap6ye%BmXkmVEtekppAt`k01R82Q%aDi%&zSImfTlQMR&0j!)4`ary>TfdUf6q!CI&4`? +zGHBP(AjgKwVRkCefRq~ +ZDY7r<1(jWS*GQtV8rXVDG`R~8ODlBY^`Jm0A!}j;_}-8F9QE}Sdt^!Y%KCgu-j0Esh@K6a*Xj+3H=A +BZ+-0gNVG~G|9asb^cM$W*^zE<;xW8(-1#i?l6Ck=Bc8}l)>@$)+R@2@Z_z{JBF9X=D53kNi;%_r9+a +M?058fQ4&!76yxTSK7KzflXnopYV5sL+)oGRDSQ&0r@`+yT|JGaG-OQ}%n2O<90(OyM+J9C?2WIEX9A +G1*rzlqwso-Y%EdrX#|N3poa93Z^*A`PXMg~OAq@O#X5GGb(SvQ^?hCyV0iDGg +YLO+^YG>Ev$+<~fVl#}{}OPDTjEcInq +tW(GjhdT|CN(8)yzp-r1%5rO<0O2mZ9xRq{+X+=hpxu@!|-v!w3{_M^hT6#qm(T*l?39O2QP`uxO|VQ +=pC)BM67#QIVDr(^-;!r_01=(z`K5){wD8YgE3*IVF&;s7G_$G|YKgphYaxsd8=+9yq=W(=n$ +=FsvlCKOVCbMeHm)8=aR|p0R8QnwVKWO`eu$vY3jTJLvLEFA6GLMP_(?wny_R?+2{&aWIr!Wi|7n3bnIkc +RAvuCGQpEbtE97Ofl4j`RQ~p$D>xPyi(3m)L_Gub=_6y}qL}M)`wzU_wG#C$HOm8|K^5-VN$Mm^iF{S +Xy$!b{Qx&Gvl8G5LCW;Ktr88o7ewiXKdfDobmSU#BU6EQ*@F)NW1v#2EuzIiz!jx@;Qc +s`f@D$DK%GFh-sqpq8Mt53ar9Zx9I(74_L)n2?$-+UWTjBhsmXw1DF-*_?4XWs;FoOtvm0A+~XtS4e{H*Eap{iy4rVk)i40pfEc%w8G?4Yq#mpYq)5-uLy&)~ab(RTJ_dD;ls<`|GiVeBl|K +YVLNQjJsFt{30IMsO0kG1ZvWlT$9aL2d_DwN6Yx^YMgGZtu?O>ZaBBSCEU9FJ^|0Coaf`^Ja=8b?X&+ +Y*B)`s`%5`5DT@FBANh5NZt +pT{r@DNsMd;tSSWJ-@%?dA(3;@+9zme-^LuWnh6F%j3^wbvSvs@NzSL@%=5B3a|!nX=X6I&V+TC2?2| +Xoxd+%&@YMN$2%U)XAAIW6-)VL$evXq^PF<4LiW58ndj736|xtV$b5&Os<7>rW2=n(mm8Rf`Cqijna5 +7eIv!t(h`4vlYALgj+HvhmKju2)E7qshD(bfb|3*N~$*2i~RU;U!M=+MpJ$*vmU6cwXR{4AMv8_)@Y? +0n07-Zk(TQcLon7~zdwzJW{o34-p$H;c1u-;faH0g9OXj{ewiPjt+hR+(+!4bT`4xm-!iSDQcr1Gd*< +nl5%L&;r0-e$DoYL|2wQ2Qna*BJuT4*%Og&%`o2znY{Y+y}4ESxX+=8AZ=(J%e_V-ge}7-^)&ll+AJre9pEJ%T&0S*l%Z^-vZ?yVn)ECz}Lr +^vk%BjsazRl+tIa88fA|1s}X>;73qoD*RX$$%;V-bHk#(FvlQqoUS)l&DTl;}R23+Owm!jVey9NEt0U +~2MC>!YxOu?*Isw+gzZy~$f#1FUi)HIg5?pqP415qh1-yec9uThw^b!0gEO>Vh82R>$CFcy}GV>`17I* +bckPkiB$~om$B1teF%xQ(a6;DlOM2YxNpTLS0+k>o4ha?_YK?d3~$p!Rs-k)s`EM4%-!|*FeulKu1R= +de_YN*|+hmIVela%loGFg}nPYg?#*Zg?zG1$Vd30@Z~brBfD6{YVD#^Qg|gtvcGt4P)mC`^-^oN9>&vIeOW4t18vg+6uZ~jrB2@g>D|$nEf +Zeb!|Nlok?k{Ikkyse{&|eNB$K?Rx#CY%HolRD(16xR%yId7mlB;+J>vH(mr3kDG#E!v?}X&(EjFTy9pM@78|HB*-{Gl$Ajrp&He!%f^Zn$$s&OBgRdYwpf3RJvGn(HdV{M;u5>FraUO~0vj +_nBQ=(xSXg*jG{^a0KMeYtqp(oHgPh}CNX1-Sfh`u6AG!^JuLIk-GMJ32ncZDH?!vj=e;t6G-gM|s8S +L1m-+WiIG%ZTv4#O9KQH000080Q-4XQzi+)rey&D0F?p&03rYY0B~t=FJE?LZe(wAFK}UFYhh<;Zf7r +FUtwZzb#z}}E^v8Ol1*#FFbsz8`4u9iw>JG?mkkEn+8zdF3_5lhBe;o@h>!aRr@$xu`${)umYyt0RENPX^U|XygAXFX0o=*E~OaUjv2# +?RZ!^`P#DX1bdTJx0KJ1{tCORUZ4^EKK)rTal5Bh<)(q%E?nEQOS13HR`kfq(L{WMYYBnJ=!uy1o}?O +p!B`UcV>XDH4u5ZBl~0ubG0&a8gw1VKmfs9N}m1cd_Fg=6+aTq9xVlS>h^u*=d8|m?SZwjm^G}-hhHh +gEmN_>k!^C5B6@gYKc2{F8o|p!#IdlQXosZ3X<)nSVwwoEWo{1Le_9%*EAfrMXIK6io370Vnb)=7Z9s +o`VYD~>K<&=6{KV0-*JQpzwzaExs$?K1mDf{qb#?<#J@2`Z|lv?(!XwDZgZH!pULb8P)h>@6aWAK2mt +$eR#O$NlA!be008j;001EX003}la4%nWWo~3|axZXUV{2h&X>MmPUtei%X>?y-E^v8GkIQPrFbqZa{t +7X(X(5C%`!4#JMPcYBLpP-uH&Ggc9R*n~N|o_V)Shf-=doqGDkd$0Dp`m +X;%_Z_Vp8tg4c%5lNWv$IQ&{UpQ6V`r5pc$F0%yWok4 +-q(37Ja(CrAUyV%x-lA!p0Ky8YMG@h%0$W1tYUeQeUy=4dCaSMRwPWO^be<%j6;-qK9`{sX~h-=PwSW +$vRbh!123#gD>=v2QZQbGOIhLUbs<VHVCOQe?>%<6l;M)q*k7$aIX`8ZsX +q#1UY0Dtty39`*VtGTha-m16Sl0Xygc0A7O8(HZ)Gkb$^EQYY}3{DNqfYAr%`~dZq>!9;{1fz1xv+Gu +`?T;r5|}LBWpkRXCBw$q$sjttoNpm<2dd2qZE2j3$^fA$~14dONqnOY2;fg)dgsSH%G6|j)RL2Z(g3f +V=vg`{^{x7{@(H4K|^tTesp!UyMt#_>(;>@ZtXO;emZ)8v~zy-vQMV&y;1iJ-J4+d*#Rzho6D=+=M#F +|K0kW*2G@I&=K7z{4g$5)fgw31lHlm&*_)%QzbS!FPbca#cpm(G@@`)dO!hYuoSt7Ey$@a=z57X%(Ps +~2iY^j!76dYtRS>wPi07VC>mg$7dbX-Wc{65PKd_4|6`f6JQJv;IymjYEbx1+1sAO7oMD(eOm3>34<` +st|w2e=>GZoU;*vezR@85uvS>H+IsXc5K;yx64lW%-MUbZe;!DT51V +c>6eR-1bv5dNu=@p^JIYM+u$eG#aX5hQ#eLr82yb$&Q=IzDo~iTF=1^xdHo+rs}>f?K=k!0beO`G91a +ma-_a+V72cCW1U>-8k6$^hb+o9OyBUD$=2#O%QjIHX;0ni~3O%C8g}m(psch$!GF0gdqD0wmFZiV0+r +p>Es_Q@!a|TwX<1yFJ7>r-k6A?7Uzf8&XAQlI(@lIAtmgORK0f7AuG0Sm)t&DY1Iv>paC)r~;FsCV57(da>zK}=XP;6<{WYdy@+0<=()7tz){&Va9h +On`+`HWLa1hn0vrU`y!E9M4A7hL3@}1Atmqz{jB{JA2!UZO$R@?v9^F^U=BrhZa; +M$Q3;*0Bait88w`8WD27fD*s^Dty<4By=Psv=`a6wc_t5$_3E7Jk2pz0*+p}35bm)I;Ew= +!wS~ec;U}MxjV5=UK{nCyDN(-N@d8<5lb})3-|GNizn9u8O$v=t!0hS}=RPQ&FE_K3PGtj9LdZI_PgM ++yI_%wFbw6vBw)>e{{9$Kf3*q2x>CE(}WtM%f6eo-_azqewM3(K?|f1dgR?nX#Bvrgf#S@u=aw$unjEny$2fA>cLeD;0t>iq2Gaq#Bs;_}_08rJBR4S%R*>y3 ++i_!Ea`5ocB5RYoB85X=cm$T!a^|9P;&SMIcGR7e>)|aFNec2ReGGYU;0=Op*4A)KP_&O-nxM +S*bGj@1e$ONaQ$x|#6M4BGKWX3lJY*}5>->mcvf8S#Er1ymK#jmx5UOAh=G;{b0+^m9|v5??p>Hl(3I9YWkhM@I(+Gtayk-Si($v&u +5SC<7jc#F3To*8QJySI`SEID;(EK}#v)T4MoKK_4WOp{-n@^^bNw^K8Z8tpqeD&mf`gDKmeEMv69sl( +8;yTAy!K;f8f$|>|j;piF3t%7}(@+I7swPb^M@Q(6KYi+Slb?Z6UVNE-yA%#5ifYI~>Tb6MK=cVb)`5 +1L-Y@f5R<4c1judAQ84Pw*fp%6`4JK=G+Qu=MrJ^wzd&4=Dko+T;u^KtLpn`Lu0aTGW_I-btK8KLboa +5opQQrB*$U)tUXF$te7dpoEEl!rNm=Un1>nr$7JvgxkJN;uChc-JLBf4C=Kc-wEid5x1n!T1RiWL~Y_ +;7wcM*2)6Lf|U>sRxEp!qE*Z5KnxCB%(iWP;*ze~|_LwEw$E()GF +CW7zyswopF47#Mq^cHC%%GA|eR@_n+n9GHlKG&7urboRhHnO^C@G|SCccpI=9!6KZW#3k*-GN5M{Ev9r^><*(%q4gwE3}pti<*VCsLBQ=j1}jg{dx4rNkL3ReO +!8#;UY2p(7}62Im=!XBe6AA||l5E_?CHqftM|%c{wa>WuJFl0@0BFsCzoutl1oHLPf`P77Mb?@3d{RW +vDz7mJ!4U#DM4g8()!JS?H8^aEO`_D9(aAOl!Td7dn_5Kx5BFD~HaO6OH05_MHz5z#Qb&}!o8N}a?*U +6C>Q2JKFOqE%QTIMV4|<9}ohY2>6GL_ysAW!SN?iH8s7@Y@k_MF)OxSQSU*tBp&tlRi~l06 +75wh!3~aHst-pz|zptHe`>FM6mCUkOy&FpZT!Eed7_wWdc!lw}F@SMsqkhdnWwg!N)#&$_l)p*D=Do~ +k3fzvrue0E$wLUqr9z_|IhXH_U5#*ym9aOj+WSh8{LInu0+F{%HyUQA6FHy%)o4iZ!Wj6||cmjqoa5if9{=LxIw?Fm2^$E`rskx01Zb +fNmR}&2z;^y{5G7SGFOsGuhgiO!xfh)EWEiN)}_gyeAx$Nll`_o`d?;d-+5{N^v +?fBEVb9jv+KczrJ%_dP%94eZRzX`jAylMJ=@$$hS;S+)zRW@$$S7CbO*x=3H`?m0FOw#ceO_D$)qZ~E +eR7S+2ttz;tpp=IfwjfZJyYwF?uzIVgH+{9lLS)IF%lEWE~y}@k~47cIPe{Emo`*BeRA%}V4;qB&Z>4?d$1{HiGrO&v5LuXoHt{T5>Xrt7+E)q<^XwVZ0a +&9(Fvo-#f?`6)^pb28J?iQbd34Fd#NcHr@Fe(U3bQ|ATac<&P8a=~oK4_rD3awCvLK5iogV4OIqQyfV2_Fi^IkPI{?rHimnp;JZF-;^-RvP*jX?Y34%~lPradhZ +dfS3#^KA{V=)T)j67)iSGvW7v8U?>#*A}aru3e|D&5U;~$c{F@$jSx=Tl4C2IN2-F--QB5MyOwP&FaN +(=%x8~xy0Tb{wSjtJ9`Ja2iCmcrJ7yyc3=&OWl|?L@+qmCRIpNyGMY(fUFCIUTJAJUXO*O`U*HluI(DVgW{{pYWgK>mLZX +-&yJm8*e8vNtyzXXsF_Le%VqKx|m{oV|%RS;&`a{W +W{lNws%jvq@dh@6aWAK2mt$eR#U3$Z`m*h000^h001 +KZ003}la4%nWWo~3|axZXUV{2h&X>MmPUu|`BY;0+6b$Bjtd7W2VbK5o+e%G%!%RDUE$Z+h~PO4e$>~ +`v`HQOf6#6`5Et^bkw$eaV= +WQuKR!u1?p{#+j-pCAW4Y{x)vmgtwTLD?CHSU*t(5+HZZQy!ux3vOkCZ$yOA_uS +Ty_pocuE6daG9WB3K1^X@J^LxV=atBBT6D)0J~S3}=4gytm`o=V_}No}txoF+&c^_1+4znnF +?887Y#$(ceAQQYt$I#@K2$0erNutyV!<=GnwZhO~@0$6+VqWoG2Bg7%Um>4Z028ND +C*s(|w8Tf@F00k3Oa@BKUIdQhtwY^`m~?D%*ijb$5Yx +9yr`b#+|sjmhi$xHvyKfAc*TZ}ab8XKydg-|+MEi!&~Y?6fG>8F%b1e|iU7G+OAMp%#T{L}nPms@)ZJ +t8%9ztM%p>Z9U%bwLE)yoNdpT@WgCutFp7v{T9p!aUZ`*+?UmR?*e*cjyQ(-qc~0>I=T2E@)Tm1iKc@ +T6I$20=MX~pzE;AmVTw4W%h}lq{xSzkagW#0?e0y17DmYo-~}wyXI{!2Dvk*@1yx%zpFPVpnD7t|(bd +%=N~Um<5YtchvVlTk3L~fyvK7y^QVE}aA?ZTsMoxGEB6V1OSL+Isw5T;;x@K^PHio; +oY@9ima?2p&U)q>!jflX?Z4v@QxGtk)13qweO{o`F+q>LpG+GmO>O!#+JHGl-)FK37*)5r%CM9(<2qp +=YLWmY|1Fnb)UBYiZet`jn_Ye*D-|e{@fvKApmOpuRX8Q-53fFrTefLy-Ji>@R;GAfhy)-)+*3AOLnX +jY%siT*4X@f9EVte8gVBJ8~W6BNh>%8{{i`-;)D_B#DLFRZ$hx9R)j`qFb9SI(|y;{*P9u;3KB|hia= +Qv%*E>|Hul0iA2RgbF~q1C*ma{w2E17s`bEkK&%rM9Z55o$Ri>%JE2l&>|8JHvtHI_{r-M)&Fp< +WS{_Q(|%^!$L~A6wNysi&DdJUW?VB{v4rpHa$xeRYZZjv3-w@&BP0iIM-5s{0)EFxS9BiHhsiHtnEw9 +@^JXROn;a7qGC*VW}L(NM(ps@JQ0Hd7jKPrL>MFP7?BwT6I;s6e@N*3H%LC0SVpL^3|#<<=&sqgPc-E +3x;Je+r~Nyib8ywzf5kK`@y>6xt^?&PB6u%dY)_e9=X|hb&g()E4I;f+r%eSrkr<2%cp)?_{U*}Vx?} +=3>$-p6CVJ~jj{XtKL6)J(2o*_x$vl)3*B&mA68c4K?`ytC;sJVC`}xwQg+{s9Mtq>A#uFuwfQTa-78 ++Hsv>~bgVCrd+P0^Fef_ +&R&ON)`xEcZLZ{>@;wSvH1+cj(t$CqsN7D@!|5%)kJj7{Q2p01pG389{Dt~lg5YPogtFqWtrn_Z7ljm +&j)+gi|flNv`SJ$d6_El#iiQ(MzUIRl3RjSYWc>*TxZ)pAG$ljc%uH7P_!&u?A^o +)M2iut8U*N?CbN2YgF46vIWa@cF!Em3r)>u^qQD)z>GWC=XW#|32im^7bMn%=yMDC5;aTpmXETKK-JJ +*F-5tZs8=ep62Ydx_0s5iMY%{$-B;GZ<2c=wS(1Lut0#zxS`3! +94=A?s1e!cErW_W-a14cbPia@{%HW(a(tobVEFvQOMwACBXPNygRLewyjTFthS%W<>Yt{lpGZ@fWAjPV3RO$f$XU^7zNz>O%|Hi!4rQXh+hS%Ha^pQuF`_i; +RvEdk3ta4-g^?H9hZC~^p=PMm#E}msT`?k;t@IfMwwfAEL?kn8YxJ88H^@5L_`_(8s3`D6B~(6-Aj~r +kb>#1HN@B0Y{KrnaWJfES-qWCmZ}V|<6w%dad4$b&5DhQM1{t@?ucD~m08mQ<1QY-O00;p4c~(<#0(1 +;%0RRA91^@sg0001RX>c!Jc4cm4Z*nhiVPk7yXK8L{FJE(Xa&=>Lb#i5ME^v9}lh12|Fcin{{uK{h-O0=n^x*?jYGDVh<%IUerNsdPZ${v!FG5(MEOC`$)FxtR;t6AIqZu +0MB&}Xy{QL1D7-g0CMYb@6aWAK2mt$eR#R>K>OXr5001W;001BW003}la +4%nWWo~3|axZXUV{2h&X>MmPZDDe2WpZ;aaCxm+ZExE+68`RA!Kxo3A*#^s-C_$PF5q^(hhX!zNg5o^ +Fa%bnV{K(oOHoO4Y3{e*3|}NtlG9#s`4CIw%y4En96mF8Nv^kfO*VPK2>h-aT96{oSXr|*Y05PdL~a? +8OzdjHH|k|x(F}f0G+9h;n5c7JPF|9qlGibzY|uckir2 +a1;sNAsxF8wdRRxobteK>FQ74m0zN@$ZmWl}qlStx +ct5y9)N1zyKw8C;-j~m1NCXT^>MKH6vH65E>WieQmwjRf=JDOMGBkY)9O +KPfyC!`ghNE+EEx|b((Pl&-(59Br9q0AHBwiX-mJlG83t8Q&(iOonp#8g63zA4PD=Zx)wV$LDA1htmu9oX=)6*r2ca(LTLvpN`t67wyx3I=Yq +&f*;m6onQXGxJ=J+1$R9~gI88wS`K{b=)Ywkq&aO!yT;A@o&B4a7m1`O^F#O|T~si(S@SbDHtl^sjKKC6|wHQQHxcjg!t+foYIUk~g|$?09sGM +O0MvDmK?w(x!4Tkfw(I3$5*DgXle#(sj>urTm*k4?n9O$oRPPzt(mMv|83>vTEMidIer9C3M2%MDew$ +}oEPR0iHV|u4xRD9UHp1?=Oz6_pB>;|GB7%XR11OB|OU08wwV`ox23P@?zo#YO^v`)^#Ho6h)m^>2X- +ajdNX<1TFs(VFdq|^1-C-r;O-;fG>i`S0UlQI(#NLUGkFedk5pSV#QA>aodcjIF8z&KT +^?y^!=UShNXu?^#}8yry-rkKmJF-AurJI6&+In}v8v;EhjDBS=>%*{l(i#{h5-qZKY3n;YMGA7kAIgT +4B&|O*l;8Y%)uGAN;_)cp;pjxmvne}V9hGpe=0Qv9Lm)8Kp?AN`$Ct&wm@EWFek@b-{kFL3#mhFfd!s +a8rYh?g1sj9km^~7{0Jzm21z09=*$~79SOYQoniKu8GhjnmzMgSH+ozx2Q*Zy6^HIs}3=7P{cz0Dax`< +(pf?q;{&3T64aMfQXt5vC}=gw_S;SZ`v}b!NyTuU?2JOf`?75k6uR$33 +0qjY<$O;mN~mmj#UhkoC4DReq6U%go+w5nLS4)=M%vpjN>{P*Q*{8NF=bpin|*re-{_`(!}Er)u-jKI +|Pu*SkYMhe@Y>N5+6Sy(cUYIuS57cEBl`qIZ$6P;?`vnM7Mr{)wHH|p2uxl7l?P#0xORrwDmncOL;Hs&F8jo(+WZ4z@+4LfsKW(~P;##Q&RwRE(*Hyx84@8#)QH)xAPXZt~bICPW9nHw~ +2rljBB0kAMaZ~KT2y%`#(H$6g!T#t-XceeC9Q$GDj)6-$`yO856?dvQ(-?$PGWCj+1~roOzy9H8!G +1-efQSD{YmoCc_QPCj&ZB++3=$Ki2VwZ7fk3$#jIbN>B})pPktxx?hve-FB=`)`|M(fESJ8P6{E?3`# +s{NcU@SB+d+R}=7G3)}4bcwnc@G<@C<}sx5lE=qYms%yP?~#vDP!B({T7*~Ls<~UpF%~!xdW*)1P2DXFRDp_h+FGTsJK-c!Jc4cm4Z*nhiVPk7yXK8L{FLGsZb!l>CZDnqBb1rasl~ +>zx+cpq==T{)~gUPYNNjm9FMyca4GLveeiz~^wRO4`95we+5qyj*(UC0041AwGJN}jfQ5dkdD?j9_57 +YAf^oeHu{Ge+>AY-mQZbis1L60*q?#)-UUL^8e-q*&@fxTXvI4UAZad}LgtMeZDsUxH^HLi0q6y`7#` +G69(~rY8seUNo9UrNUg#@uH9h8y0Z3E<`E|eh0i|!O5anturPWNtmQ*CIZJvSL=dHh*n=h@-)AyMjM` +G>1D8{Trg+JixrV~Ypj!UeUJ*-A>*}#(QuavGOGq17%CmJX`QZv_y^0Af(Pq6g=S%RgdC8(_)Z;yU$0 +nQra9~A!5{@&26td)YIHq1Q+7qS3#Mny+=N}RTl4v;;EDPAlksBAhXpTz3!Yx3fSIvd`L5t*(zqVwi9 +MW3%4Ns#OHYCo<$vLjD&vRYAJ4|4|BwT7RO=M^5h28Eek|nhirthMO+t~Ovx-&JQn0EIwQY6dl}SV +juQ^feh)|ILvpMc^b8RJ6^k^D5kFGl9F_b837C`u{0!bs!rq5yhHV4Sox6S@HtRKKLU_J2X)Ine7YAq +IBpR6|ueHxw@|#P&@o*TLl}>YI8V&os@nBr;d(~VGOC#Pir=7F&QEzr0&iZ+lH2BA^0GulClA?xr}hH2060A(`)MTVb>@eM%cDp@Z6lP80?BZ&n97G$#Kpneaz@f;B +j~Um0TRTzUSg1W5fAmpsb%kCFC3fFpUTOsp7=IHLNilADN|6;S{1?eb`6!mGmq$<$iVK(2iTisel2_$ +7nJIJu$-W#fxXPrFHlRF;^2Yf~$id4Iuw^j3oC{4f^j#<4M#Dr;%R+4Wjp9?@JBTx?}$tuEraW6xl5^ +zmlf9T6!3czF0@9FOiM3mrP5*?~rdrnosprIz}8L=O^DNGQB*0M>8Z{uorWB6RUIr0^@4)^epN@b4|W +iUZO3$whhOi=Y6hg8C_i_l!y*N9+zDrgW3q>PUH!TvC@)OO7$A}@S@I#uJ8OW)$` +{U&}JptJ<61MXe-i()z)TGxF_cDxKe`XK@A|9g?bLf3})2|rV(fkXJchtoqoziOzlV=*_ +C6rD-Ut$St!^lff#P}h5poX#Mp@g(}=yg!MC$Q6*)S!L()s(b6TaJPZ8odjqT&MKCG*j0G6t +*&TBtR6t*hZ5}yXEY&#F43E8xL(LpnWCKiO?7D}q98X|EJ!K|qgRY)cbH@hXsHkzMh>1odtn=8nig}j +Jok2fp<=cytX4&>tEdhQLhb5_{;2LUuyU26g=th*;}dL^$}T~mQX-VZW^t{07L}$ks;j(41G}cNGf6Q +Z6PgOPuh^3!ht^A)WOq-|zO7iJv|BxjRlL>50h+MWahLRHt~irSpbxla=npw)T;anokA5&mAD9F8CRL +M7?@vlF^Xo6w5nLBH>I}?D$ZIN3$f+LY3@BhhE2CFH6;gMku_7TxPuf7!jj%QYG~KXFw|HvuhiQOM$R +~gkdRc4?Oxbpw>~k;&H!4z0TdeeL`PIV{!%M=JB#u>J#jz(?w(QvM#)iwT;?yTkUz1UhGZP)!Vt%(Bs +2{efs`E&|?E?GtZl)X7R`aR|U@Z+QF!nWp4Jq|o9-0_ssxc%W&b{B`+MEShu|OU(|3~EI#S{MEcF8>p +R^sa6uz~A4^-ysYC?YjE@EX{9TuY=&J%=u%>4K&ti7}5|_G3bc>JP8n=Qs8NZ@V=Rcq8FZkB^C~9y@M +#hXBa8(Korl-{Sb>$?<+O|CMpKoYN^*=K;5AFw0;ng`YqttUYc^*R^!uug?w+KA*pJX!F(}Ow+jZ +(uhnBWSh=7uohn8FVVP|P>XD@SbWn* +b(X=QSAE^vA6J@0edHnQLSS1|I;L~<0qB=5dFzsR{X&E0q=mt>k;GjAN9kEURmHAU)3%8DANfBV}X0J +s1_SxVDudRNUfwMbyGSS)rIyNlI+^!75Vql+w85&VC;O!6qtQdQJy8ZC>ds-osnMUATFbyQx^m#2#)h +5xDW=ryn>XK@HgWVuDSG(g_}TN9Z=UM`3wlm4e&0? +DoV@wB3F%yrm9J@ypH$wviYK{nkYF>&7T*`B5letug!xDFm@hP%KWuTsv;|9_1;BQ&ZB0%fG?4LH{6T +h^DN2pHvHEy0BxVsH$arXy~t|a>eZqFY9u*-d!01UuHY|kly38OxiDbft{3Y2L__&o0bR +#?qdi70UN$gegIt;vWs#*xp8crKt~JrQo&IK8zEHCyUF&tR3p9=vNmZ-8z1R4^seT$wc+?Zy%IST&_q +SrPL;G=5H`VE${-!4fee_?$f%|4Kj?PQqvxzs#XwNLds|Ax8V3_P3z)9M6>liLP<&NE~dK%dW_%e`-|5Q3QXeDA#*&A2Z7y5_M@JFUvxO(Fd*Y%j3R*htd+Zc~%(2L3Pd#QId@1tPZ`E +0C9{nx`oTWRcJY61xzAi5i$dDQqUM^Z|I?6GOG;cQto%*)EWNbAaP@B?nZqF&4(kz7YpJv2VwzoNXz; +bl%28dQq^RdvsWmW=25q4eVhvQeK$?%AxJ{*I>cgS2c239!5JD;|vc`%j#FZEf`VR(MbD6t==1G%Y!f +R4PJUr~lq)IP`2!CW70^i|=qV{cf{8UL+tFE1JF*x?Efy3zTNBr{X?qIa%uvdJ>vmt}dq0G=3i-wP9R +k>UY2Zo@7Q4Ec<#c(w4Z>&wbP+Nh^e)I+as;=C2w58VXNt&ufBkAtVNxXrX$aZ2)QD5{LDA1=vg9~@9 +Cm(4r@#IeRY2fsLwd*1TGs3CaO=&(Vht(82Pf({K1rZG%fBZE32%~)bG&&l@U`_y~hdja=ZHu!r_^U| +fpi^lfd3J>MNX~teZDt1h2*cPx4q9dzS#9F!zcXv#Q@a+t$6TGETG%HKK$wNj2}9B5;i)s1jW(Gc0o! +O0E|LzU9Ska1*{lYg(zjoe;&Rce(a7bC55(>MKJUWSbA4Gh$9UwNgD +Iq@ww21YBnjZ{AmU9S3^lxjE^VX9gy-tNkTl=H{QI5eA(|7V?^sHE^qr~3>OVu~1t~8guzyHx(J-B0> +A1;Zr!kNdz=OuDTsg_ZTnx_8^#SVqj0I(@hfm7I=_e`Zyoq(j786QKRi&<209%#69Y+2s9OvkqwHb4$tjoj59LA46-Kvb(8UZXXXIaW8N +f^#LJ@I%fH;F5w93sS7E!dxqVEVXiSuUhW{+#5sk~DgnHgIx+W7@Q&V=as7tOj&o?WU4~glp%(D`3fU +Tx+ZQ+_{}X;T7&^t=N3KT~`b}ifL7Ah4WW)+O`9)GnG$aKTq^Bndjub^@QEYY1{8=g$LMyXfQZ*`MM( +z%)x^X8*i(n`s8p02!`dC;K(UJhruyVlAgq3f>p +Z-S`ULKu}HX{waPXq1l;8n`^OdRF0gTQaB#I6b*;Mn=os|!vg+HS93+CxzEav_2zre~Buc;lII#>UD- +}wLyFk>M4!s%6#2n~dAt6%S+5i=H)hqyv){e+ZVkhiy5+raZ-6KJUot{K|!9IXtM_>5u1GMCY_Bc6C7 +7JBOyCzdR%jX%H>@0nlbKNBXd|Kg-+6E-NDguz$UEm9Sj-Fj&uUS@LM6F9aq;z;j?ViO=)ZfH4{urN^ +<%<1ezysIH?6fIwH3k2yY30YR80N-$T&Y-L*YUm_n~ex$A$kzam{I9FHkBkG?wdx-g}Y}-jjb|Z&lzy +^rAnp*#qQt@x~j2+A?KjK>@F?6?SD(_072b0m(3@9P7nkH+T6LH6YDNqsZkFm)S7QO3MbpNxk6oF&7tNbqRb}FOn368*KD>c0VoivY?mqq`E@)8=F1jUU*5A=4DMg4a`-rg +J|k{Qnf)_71)a0yS0II7@L0o{JU>ny?Gwp;FsgSynOZD^Jh=rJRkXPWz@p$ppyw`;Q>XE1}&uqcjz(fkh9LK$Mh; +!b$y0LWVgW)HJDWj6+};)#|{jqx8GU6{PfE@xPe(#GxxUyzrRE@Er^b3I)Ccsc|4?GYnGhPdjQy>K3PZhP^g5pF&-6$*)7Z)*;q>TrLp +ZI-w`KI}W}k$f20Lqrv-B($Rf(&HA@svenuKAJ{zJ9sj=sR4;pRJG4H|Z*e0fyv?1+lDGrv4Sk9S0TKgb5Eb)}ks)cRI8xGlVg7lCzT6!iM*c6u(>O#HG2;!l$s&qjp +r6Cr4OZNuS{(1G(U9;m07z0$0s*0i7lCD~wLJE=NN7HG?(dB-ORP;~)d(~_EhNYcibjBFF?JSd|w*5w +jF)R%PN$K}cM?jdNOQ!GiV;!1*MWtD~r96F2495cYe!zT9N5;~2+Aq33J1ZJ8>bCsZC<-=H})4A;QDW +fy1Q#gqyGjZr?ft`ct3wB|?#3Kh14^;V@@=aW7b!Rnv@_2#^hEQH%z5)}7Q?vq0(E%XO0p@c8HYM2ng +xWi8pZmu6IBa$ISi%g8ZQm8A&ro&+^dg%Gf#3?mLK~Fbxw=Q|n=LtUSiqJf&C%f?QCz8~PR*cIn6k<}El)w6?Ag{<^o-ieEn +o40?F-;Qs%d-n%n;A_rBAQl!F|4>yHA?_>URbU>}OO&WskKZ>-6skaY}bN}ppeA>m9U?w-`H|b54-X! +_r627P=xdDLq-*u)|UH8mw5NRr1YK?-_3eTskn~f8Kj`uaiZjj`R%@F(D0NOXzNIzm+x^nFgJNdT)~O|sl`W)}_L8NXn3kJLYU`e1>QD6m`pGvto{`4`E +d0Lmd$N~JZLd!F}bNcLtX&D>)JEgEAbYGijYG2UA5wTqpqJS +O7(MyA+_Dx@89|F*5TT*Jckx6xMW8Y!3UT$wP=4hwT=zvtpAq3vzJ&e))I93c9Kr1kVablzi>SaahV7 +)cCX<6Jg7ACBnihnm+eit5JPI&yDB(txY;$f1UsqDv!+U_wd;caQ=gBh>&|M45prg2; +g+#D?MKgA)5L}Zb(|2-K-qPYgY|33)3Y8gl^c8D449~=a_=hs{VkUW3H$!`cG;TnOr2oAlaKK|MEPLQlgsMl{o +sBa4ZBW0V!u%P3AT6W;B@vZgVD}=uh;v(+qQeB`OVl8oD@bGbHy~bq&4=6bfjXJ7-(GMF>;86^!%p#( +J`|arI3^tJ}_x>XdYuLD|pm#;y1=qD_105EYI^S9eFssL1yCnoS2-9@#%B4_8Og{07x~8BHnCBR&;ke +q3gc@PNd8+yeayRF?8IlFx;2;2Q+;$7kAFW^C2eJsp%os2flxFN*=-QC|1bV2CF2?k#ulw?VYEjlyR< +ZF>Mc?ON7suwg+zm5!|KqY0*@2l}Dq_#4*276}?kuQ=J$fnFEWdVuo&y+VX^tXlW8+C`Z6cKUCs&m`T +J!re=NMfeNmKmx@Sa;3=r7M~V)4P7V?OVaq$CQ=c5KQTZ%M$B=)a&ZeqnSI>_MAldoRS>+t`2>TcRBG71xZVz!ZV|HIO=-XU<}i98{Si9c!WJloWnR8|8!b?5HBFmj;`@j9WzrY +$kK^J1L-8Coj!BbR78$-EcZtbe!8n;`l?He-_9?xAX)yU9u&;KY^^VyHeRQWj|7pZO`nkm4m}n6oHJ; +5k9tk}e?OgjX5&W?YNMa7Nu_sq$bwx@~o?{xm{NJICHp1lO5jE$m@$6EiR|vUQYLg@en*hncH!wODh7 +Cf-s3ItT5Cu=@rUn^Q6ttE32he;ar_?&irzPqy^#M#oU>G#&@m4#Kp_3KsC9ojRhlF+Kn#Nn3-L0LDI +9W27wMj9Cf%W7aGl|NZI9OAVytW3EwUq5))L3A~D{C)VcdSbh*EL}dvlevXE{k>(wm1z{Jd2~p{~bTn +N!tRRz2P3g>v*cJAMoK=XLp-d59rmXLtZ);b@STgj&t6+#0MauJ$eoe%?2Ey?v%{xzU{pi+F8(JlgK? +Q8?vBFT28!oLdg)?h0??3XgUgDU9Pu{4`BWWEw{T%t{o|k<+#;ISS%GTTE$6{8l8@(N` +d;%DUN7R0$ZNUc1OD0g9#8Q7g3^S@j^sp~AxI5x?6Yt>E=0an-*5_2kv_LPw=sg6p85Ye9L*WtP0o;< +|($bAcFg9jo-R(9uD;PsSV{bCS5|Vp}_NMnhb0`!|vAL2I%0Mc@s1F;p^K0N-{sWjJC|a-% +v=p=1*l>P+QH`GPS?{rYJyz?*1M=aXvdm!2TC=zE}L^T52dSs1@?L|1=hr*AUE0UwjwV<`Pp+5=iapqt=ZdQZF9ftlx|tHgpv}~V%ojYYi~Q)%bAW^%PvGhXAzy +CpMFfywlM|e#uVrqbCB%R_ZnfaM*A&TVW2M5Is$lJcxUO3Hn~mF`R4o7jQZ!p931g3(D{vtteu;G5@8 +q`@g>?B?YzkWkDrzr`Y-Y;cb$e+t=w>sUZAY$TIpH@WVHvSrHc-x$---$X}NVOHrd32Ra=1|9ty$tFR +JgbcgAkto(S|%htY?_Cx<38V5Fb@VPKQ-T}QXQrDG%(RzW>!YZO(gUgphV`u}Zm^hMitB)x$A+K|Nw3l6o%G9<`_>n{31vrKUtH`=?$~1jDP +ZA@CPk*s;A{zaRZYab(Ajxs=Yu@Y;iE$lV)&&6D~0G>JYOMjv4NQ6l1SG$sfmy_^E8&jm*yMka0}CsS +`d19)UiSCLB4RJV6$pIH1)L(uhPv?>M+kq!RKs`B#{KWIa5CJLIx@7%#qqGNufWggpa^e@9(pau5o +KSVZ+CbT8?Yj4IgGwg*jCP`*Q(Ey|(ss4;B7VS6pgLipTbXacH#Ctt#rUIQxOLb8BX!pZ6(!d+D5k9d +<@vCpGUu64@1t(Xxzn}Ll_lcbLVXjy6ey_b|qBZS;_Hb_DL;zkPZ>~_t>Jo1p73AW0;wJ>8N4FEdlI7x@&T|aGF +ks=H(?WnoC6V0m>Z7x!mIh(ic>203wuWlweBISsWw;Cv7p81xf9X^kt?n?M5Tksc-m)yQu9eEZ-rI_! +-mU0oX;QAQB*chQ_w=r=a;RGhaJcX6&)UF{O_nb6q|(JTBMj#`Q58H<;r&6pCgDY>q>`Yk8CSKgk>LC +!KwI-KP=)oEDu(+mkeJM5nNeijlzwz2%K19V%kqjFNMA@tB+xIFKVbR72DUrJ`$a_aAt&cNj8-;CelCCP0|iZqzjxyD4}a)akd +7uAMsl7;m*t9B1dv#n>b(HMv^j@1*Z6Ad +dh7i|*c!Jc4cm4Z*nhiVPk7yXK8L{FLYsNb1ras-8*Y<+enh%^(z`Q7NG)(v8 +`+-XGFPm5@*LiCN{>-&h8loLyIlDGZe{TleV>i|NB){KiExDe(cWN;m$}TKB}v$>s{5YEp~b(BwLD%G +x$!MBx9La@LckgHF?S_R$p;e^J*nov80>*GFiaaCj~ZPf8&)DMLybMyV3T9C3#9qKNS8jZxNEUKDi#pR{QFU@V4B{d9KnR~g +G&gG)Wm*R4?tcn#=Pcv~5tzac0=ha$2V+Vgf1^Nz;KF23tK7Ks>`@xACQm;#x%0Pu927e#KqMp#z$Ex +@z&ri6%Jp^_o7a4c%U_t8claLzfsH}l&Nv7^j_-_r*7kbQTQ<~vla)45oiv-7xM~bA#P!q3`e4UBBxt ++juBQv@ljgUVezqw&lbjj;a^el|yJX!HL23*JM`l`sa3<1~>awhWneDqVYXkQUk_>J9>A}y(K +OewneDdSb&!_R{{htm__J}oSvaTi!KF(q2cUnMD(qzFNUIi1zw%A`euwN`9^?uO;EXrVF1_3Y*u}?%* +`> +He26ndi6?Gi(fpsLAESPLclsiu&OCw#xvCN8E#xX4LEQmowyaJ-(6IdO@$%UYAV<&Wja|Y*Xe9D)AL* +$~4<52Q!Nn$oQ_87?%u;?p;hi=Dg`j&kza<2G>e~2M+sQ|K^yC^GeKoiFuc)$;E@VVi=nH7M{We;)-o +EnFv;NpNAAS-^2HZFmaz;vGR6$ldDPXg**pMki~*^S6Db^&j%ldMUAyNrW#V6|9r2XTFs)G$i&8muwP +Bonn{U!zpWZv`wa9Diji4oa9#KotaxUnOhAiok&K3S25^0J>5aDa;{Jb#f*bNuHypNm!X&a-fngBmKuWiFNiW(RLsa-KFN&FP +>_iyKhriYF`5z@(M&q$AGpSn1$jfTEID_1bErGoCP#rU4zTqQSeS%KQ4Z2_ +sDZ7)$`R34@{fF=%X9a%_zMW-Y7$iGXbt7vK1zCR7(ik+rzQlI0K{1?aBwCLxWOppP22V9vCki~0~lC +h9m(M_sByZ%pXQZLX+Mw_{SHD{wT^g{T&dsM-F>{;^U-UM&G%B0&!#4<9EN6Vt3$>#FxSM9(8xq?{;nW+A!iSaA&|6^UxH*8$xl%{=(=Y7U|v +FAVOqGO+)8OvGmKiNEJfh!iaP?sU(lVd4%x4_1!jwA-Ca2zhfLC$#;M$TtgH~De{Fpx{TP@ay^^o;QF +VKhI}0(M+s^(D*x_O^;8Eb%BxMAk&=_Z6jzJg$XQq!4+ +S0Odh*?&Yq-hAu4LvVQ{?%d}s}&d(HDW>WOQRGqq=vCdk>l&63Nbs>Vg4qm@;!1&z?qMbfN;_mN=sEP +NMIQIwc4ooGH3mi`qebwzqpe){Y$16m!${3g=nCWwVek;Y+g)Q@7YabGxU02u0`PBH_a{nZxxMdXmNK}lb5nLn$^#TxWrvxTi +Kh!t8r&{q?2lrln%o@#9Twg#_(Y*<0Ym_alUDj-~NP@95E*+|1))paTNUc9)3r8XB4V0r;1T=Jq6U&VT&Dr5<3Mq)oruF#SWM{Lx{f9EI0=Aynz7?ujc +9^2FvuOPdPC~_+JUF39BKDN`peFB*DSC@8+0jTmH=mq%x-S?CH}zefz)w>#S(;m^Y{5ciBdHEP{F6Iy3m +&@FI>D8`FMWKe8DRii5BtVmK8D0d$8bvkko{KDH|iNtCL@^JR${mGP8Y6YNE7S!Q(IE8!g<~&csWw0o +}YmwY(>!kOP4?$7UvTS=|FWn*EX>E7k&5U>7kpXu$<@5NX2hFdI-=x8F`kYvz=jLKU%$(y#8wM2_UNl +5{wZ}FN8?%Q{J6%6onZDMU=fbfGgu5i~1(7ccOc6%i>I2;vn0jl>y$r*}N?C?3X2nuvDZS_bFE*rQz9-c=PB#H_M|C|v2QwN(q7x;3mw_ +#Wcx^HfEkNY6BSC%($?ihbphKXkDR##|Ez!Dg6dIp_h;iN@?;LyO0lF&5FS{kj+0Hrm#GMKLo9;Zi@a|_FeXF%GeJ~Q6KNFEVmfap$6`CVg49Wj^h;AeTcw9=1i4>cDR--h-1PaM!`uaYJ1d>le&qdWr@^LYqK%n+!I{>y4x +Ti#dZ{;?r`5HxBebx?qPZ!=kQ+33Ew`K@MagYO3WiP&w|^gx|q{<}$wxBJ_~<2>nePdgSc1Xuvk?xv= +_ah>V?g${ydEf(Um{!ZT;yNeB12t8fEx&%`rN!~bOmJ{-zma?O3kxsG#pvwj_-{zs#MwsEKcT`3r^cw +akdzzcLVyqg~au_>1eSSof9iYm1#zQ3&Xp#co%pyD>0z-N>qPAPLVO4CW!>;ZyYNdjKNO0GrG$aZ?#e +uae1%Q$=btrDRPNswY{P_Fxqe1p&K^n2VOh-iqG775+XoiW?33g1hZjcsmB>&3I_P(XY7nnI629fQVp +vw%8dwE(~QZx(!y^zl#d+)r@LQXgp`wL$Nzc5!J_-mFjUsV1hdSXlLhF=|~8yYO=Td_z&@J9o2Lg2{0 +dMW_*99e}Us-F&C*;D&L(e_`^k`boEo3fj8K_uP}kJttV(t3r*OfY+}2(p=P}vjrF5}JvX$P2iO-3ZePEOU%d>x8rSJ@?rcxk%i*nXU +6?wvMbz|5!?OUTnxR~lNe$T5#cVe?*To3+6+JqL4SygNFuA(8hXxRi$BHd>di3FFkA3F2`&qCBdbQ-D +Xlgdwoq|rV46ZBrYctE3ERd)}GZIZvQc*s(TDIfz?dxdCLL@KTFtBbr&+ +5N-|Z#U--z?J=IiG*e>*;QF2&1aO_+aV3!F1x6eO8iNpYTyM>j3TlgrXFQRV@M(yPW>s>kD;zWdrMrQ +hD{od8P{=41_Pg0wS0~v`vXL-`?;C8e*z0vP+$N3!eCt%)PsThFI57@O(jETTU?PK^H?g{sSt5iXz)um32k2)o +O`S6DrkgWs31PFK!e9ks@-|lqr_N9j!s^o3#duF=W!iTH_&trT_m`n$Aj<{%rp-I%Bnj0f-9l==-__B +Ta_8U(^P-jS8(y-j4D<<{b8*1^N?k&+7aw?PBfh;IAiSf&0t=y8*R>&`iSkEo9ctR1VCK#SNZ)R?QbT +m(fhq2?p(TUnSREAE{G={b-D4BB-^KC}P!#Wkjs`197u9C*w7GbL_~$O2xNRUDGTr^(N2^X8uMOH@Mu +LR}(fHuo?V&qPNAr-^q9k(N8uY{QDh^2>+BJ`81=i**t)ZtTSNeo&on5exWKG9QT3h+!J=- +G%@+4tANf5R%LBAbxii}4$B?d|e!i7Wn2PnPWC3~EH+;(w#Ee)|W_&_*{%0c&FCe<+F74|O7ODaLTXc +9Ephwwnfc>P1BFvSy-$kIELRmYHf@AS4t+h1ozehW?iVypER-XQZcuFjw?wEn4=zq{8;ZoErxv6@jAN0z-w2 +fgNDEW>tUJ%xm45MXFQqibJ&DrsHSTsNVs3dx-8py*Y>NTzhI)G0~oC)vk38aK +P3Sh!P{pgjqoPy;2(>^2MIp8XJ4ES(Jz{S!uM8ySOgvb`PJ?K2{^sOVI^EQ=hQMFr%mP@&^*HWakRtm +Ndj;K|*s3P~*%%x7!;v(_Z9JHKyy)ULGM0nl)CR>LuJ$H{s}89Tbc!Jc4cm4Z*nhiVPk7yXK8L{FLiWjY;!Jfd97F5Zrer> +edkw9=>Q^Qif~*91q8T2E)HP8aD&=O9u!re$&s`P#btMwmM`$XcV@Y~DYEOJ6%tEY&h^afnb96xu7rk +#$Pws0tCAdYkz%1SgR00-fmtCKRBH`#VZXd7la$`hYOx4DqtZea-X0vr2N5JiX2srKyl-S;xInarXQ% +H@&M!`!!@`~^DNSvgB2ZXLEsRvRWN#rAq;g&6Xb>_qiO6;Ad175kWk}RpD7gl6TZ&={?(~C_cUWAYiQ +pVJm$xNFcv+E&2tE}QW&~-XjaRG2CRyr6^DeWrdi3AOs7N2|g!zg(pf$6;3>$ +m+$-b{S8H3E5L>|Earl2x7&q6;p#gpVg5;pp(UxV5(x!9^yt`KbsrYy3n6+!)k +n-;*WRmStdBi46N8&C{fig-9)6bA?O1AuJWf+%x1UQ2um0k7xUSNX_JOno!3hTyeResMc3xcwJFw+9X +upjW8=nAQMYrVsCE6xEpp`558vmVGzFzeXdc43m8OX!Qnp>TSgfF4#WD^XzkT^kp7wEI~HIYkE4Bk@N +1p!H3Lk}cO)F^>MHQZ)G6#JjB~j`6@*qzp{Z11`#l&sj%t%Tqjnu1xc75eMVOZ`a4br>?E +!HAWY%QH?JfD-wd>#?{23FJovOu8t4RJvx7F2mGQnaRQ9k>TJ$t?($F0veT%@>$sqDd2%Yb;DWh(RnU +0#Q&k$yAd=eU0j1`DN5?_k~~f)@Ow9=V9_;D}^^HmfQD#Xk-u0aG9jH;FLAvS`fEgArvkA0~J>xr(hp +puCcS*2G)pp?$l^HoX$MgK_{h5R}BEQQjB~CzZ}ECz@E`@QkGa`!NR}qi$46qZCu;?bBM7!J%2l?i%f +8elB%JIk@X~Y1(7c%dfz@ihS%Qo_ODpxX+~%v6ewslWb(4NdUuUyPlM<)U +7>+4u&14ez@n)6#Jrbbar3T+QQU`Z*;h*lFq5<9*+HM$BJ3;80kJ!m5oWOk}_29S098#_Rar<#P86VB +;!z|G&)V)VEZK}dB!-q|NPKMK@t__YNc>TYowNa9;w404`Q8&QTIW>gTMy<WyBa9@4O3%{HMscmxzC7n4#)(t&N?yaig@R*>DSHIES}F^zH +sBxN<}R5>HPHFAMZ~>z5>Jce*(`A!hSddpt_VP+uh574WgE7?r1lMYJgtNwu^s!46nNw>osM7>EUeas +YQWzh^?K*!PA-OW*)ig>;3@E&$QdH<@)Ov;ng{R-~x_107w47N;pi)VoJ+R#|Z&#*+DPpc&TJn2Cu>} +f*+3$d8)9r;m~btyEV%GMmX+%8Mva1o2oeKv&D>{T{*0k$Z8LX(5}KA5e_);-x;vuxm_GbOKiNn>(d- +d(cXpY0pGxwKK0~h4u(g}-ih-0Hm&e%2d;x&8UBQLgqpT~HSA>EI)xEm_7VFg`t`TWJw;u6@C6}JyjK +2Q3B?4H)FgCt&=qsD5_ALHK9|aZeu@_EE=JCbmaw6PiHVQtidl+&G8ros51EhlQ7qe5X)bPyYOMG~7$ +$%|@w0DId={XOVYtOk|B;^h89Z?rLhm0?O9KQH000080Q-4XQwuT+rSA^_07*Fj03ZMW0B~t=FJE?LZ +e(wAFK}UFYhh<;Zf7rcWpZqs$7&8N|Y* +J6e6AR!;4IY`14wW4a9qu7g3t@cEr{g(apg?5hZjmT4MSFLGtSUCTU)l6lda<>^9{s|*jqjJ +=d`EGIG6ats0zvk$;}Q4YkLjOfdFAkLNzO$e%~60hui|_=hxB&TJI&Q;T9mKU6+JgmH9;esb4X)=9WFK`@LRos%C<1rhlbr4QXS2v3qEEZ +Cj81IvQ#&JdgjL5*7ATbL@U13_T)8K7{;Tu3-0xP!XVVA;mC^Wl;=&H57jp>Et&omdT}c0EY()23MD< +WJ<&_O*HG6J1Ur#6m0L}^ypN4_uXDK%yYy{+rA5&HI?~lSShIC-f&^%<@30@2~|d(tnOG^sLnFh1bRJ +QW&^wbUdBsxl;>&gyOMr^g=x@gCD#(sDMch2h-HCyqPR$xF-d$zu_?7nUoX#2I{pc|;xIhERIA}OP3< +ulY0h|jA&ZOgxL>Gv#!3U@X)T*z7$P9jzDC~>r>v&pQmKr$ZVJtgLRliD{u&igQj{_Y)vp3kG`uu8CK +eXa4M#j}iG_eVDGtL1Y?;IgYg?sDgit7+gn(8g26>f2YI3Tz2GYAwaw=xagiTDqE+}-amlv02aRZT(( +hgyCHGz4&W-{CLqM?WhBK3L&ea0L(lJE2L)>klhuLmlhL+;EAxBEA59VXkSNhi~-@fbaJ(T|D0 +NnoT!^pEaYzpsa5{rAiOeEG1V`cz4f?XR|W{79#HVu3MkIH>$oV3?nIt>&)lti{E6T{KlTqjP3y-jPc +u|VtBP{AoFFtkn5j0Q2?S$dz5+SU`L+k&-Th6-W}nvRu5wmZlcF5`rBe(qmY|eqd06!|mS +ba-`uCp?9{wd>PDrjGB9z>{T9g5MjF(p-4byC8V;BRsj(3=PqNAC4MOrMBbaV~d1j_AvW;8yJV +s0aXs`uV3fXGeaUB1|%tAv@jiLS`WPN#~$clprpJ#!t}mRiv(+cf0h23{J+o_EjD_5LDsd`A0l|Hs#E +i>zRrHJe5ViSo>hxyrAmN)G*XRAvp48+e8u+NKv7*wE)9t2Q93|vV*xQ`vf{*gqp850gcI6E|7{;jGM7-;IaIc@w +r4&aymj)WU&@RcF8!JZvmG5$vVqXODTbx4#txD`>^^y0G7EBZ$k;C+`6<~C7xJ`a%pV9_-O(MR0l_Sw +oKP^3!X8DiLQ<1&bG@9EU>gS*s(*yDMiZCfmu;C`J?B6D=j-+2d;j_AGiLqpd~f%M(G&lX|GaCfs*PF +u1x?}fnb96Y05m@YhSoQJ7X_CvV;!y?nu0Dp9_FyR(K0pauC)<9j_=Tl+01Qwd#G75Hd=mk0B#W(dZJ->}l4T`NyBk*UyhVzs~$wndZu +b=bVl%Q)DWdRqK20_E@B5i^3i`xLpPIiw9VFpV})ZnHLOga&(5_w!zeLIxcHG2L)wB9Cdk}&iQG+U0rCC3h?J&Sf}5C<07G4j-NZM +VS=O!hu2WJl1No9(@|LblY3C_Qx3)CWm*Y)9RGRtd*`oB%q+c<={ZJ4FBq1koMhSkPa)!i*KodI&1UE7)?Cy{}9GRwMFcyu84T*u>Ne>3mX +8u;@g*TcNsklr{HV5Y%uX_WM--+7~r`-Y60>6-oW9lEC-sgC6uyGL~lIZd~X)1G+Sydcw<6WhLdQc6_ +rH|xw}=uZ{iXIEyg6spEFBYCw#yPb~0{=H`d@F$DanCo>t2Df&}&ZZ;vedl}fX^rGeXY|)f-PQ#(^sr +XumS#E +#RFt)?N`+Z)uZ*XPuTnsp55IDhYE?nCAUV&}AEFn7+{XaZOBt{a1Ot8g89=MmF(&*l=?)>^wy_xwIb6 +5xUXY<~0vdGWq~zBl@U^NIh5fbt;E^pIA6m$Rm{t}9S|l@o!^VDvRk2)b6Xi7ub}Z9j&p?*#OZG$dA9 +#i|XW^Xz?76KtF+N**-T{^qHk-Z@p6rw^Fw>E@}vt){A(emeQ)KGMqB0 +Jg5|@`o%GJ&<%-Dh5nu=F!{Q{-#M`CbgmQ$EkVw4N+42zIBga=quxEc`j^cUMf?rji6kuH?DPV;GDr4 +a)wp+cs}R7@RNE|>X^fB}@rv__53#8a?AycFUZi6;3k6l+_&_I^x(8{2C9YOIAFjP?*S{w`Yyx@N#!%MBt1Qw=n;2|C6PmK>Uhge{i6_wvDi)x* +8PEHC(0l+lFs9&b-z!s1&;D(kP2Bv*lb-(&aM?lNx!@qtk7n7+JH$x=DaQJ(JHBOZin-i4kQZ7YVrO) +R)*l~F2=}2YxlJPvvv0V!SpmT2cG0GD6?2#&-rMYEH#Au(UsdkZ*72LtvNm4d!vii#5j_DA7Ti9oKBcMjm@S+T)5lhMYsP=3 +SPa~*s;+ieCszN&7VyeMos6hU?ZV+y_<>k&Bb%cGtrH`39Q7o*S~3PLe9$SVzd?n8yuK2Hw0pLJua(Y +&0)zcRt-eeQs`#5wmS}IMrXR1ie`>T>oc;ayIX#p+!DzHro4sUX{{mG#Wo9c6W3@d@6 +aWAK2mt$eR#SqWLh5$_004pj0015U003}la4%nWWo~3|axZXYa5XVEFJE72ZfSI1UoLQYHO##V!Y~wu +;r(32$8ji#gv1{N!BOXIjv;DoLv2n>QpLMh2bXtyUS>XJpHiC(s^C0@`xW+Gdx=Q?GWf17m`aEp?7?D +Vw&+EMLd;C$-17^AMCY(aqm@}I-4NZfj8L!tIE+bh#T=L+%ERw)Tx+xVbwwXgO9KQH000080Q-4XQ~N +##QYZxg0D%nv02=@R0B~t=FJE?LZe(wAFK}gWH8D3YVs&Y3WG--dtyfKN<2Dez>sJsi7LpdWf*y(jMt +#_BlWo!MB8Q@vAP{J2Y;z-#T9UGB1o`hf9FqEQHrXDUizRWs_~y+cvsf&C?L|{F&N{6=LuFZSgxs^+> +s$8Ik3X}6QV*s`7K=q9+D>W9xZZbM8;I{h#ivH?_vjm6m5ER0&|A?Y$xf@56(EmW${ALvfNOaaTFDlq +4Q40JyAHI8X1CB`LBC@??|IXJ4raB`R;gw%v(R?uU4l(z8Elsb1`5k);cHoBD127 +F=dSQeGwiD3Qi1XBwRyEXE%VQc|OuA$##aeB7^#HO?pU7D3m{gW!gVQe?X28apLQ(Fo1!MRgFzVtjVW +`=IlP_b<9$UZiv?z8;x7=ofJB9G8o9MTiWLgfE`S7H=OI$RlasIqWP71HkYf_G*4s2^*wWny@~~VY +K{)0b=#}mA&|TYWd0}`Ldh0ir-UoaB17pd!bpwH8p%@Yw7iZ`N4v{yPbtHnDLgS&GBT=v +$oIU4-0m%zH-*{3hY|f60u1`B0GIl~-95Hup)R@w-0`Kgrh&DpjqQZHq=Pk4PJOUeBHZO684B_ +7jaL?H{#{5q>(^LM9kdIH3stVj0V$b_#LjH@<8@Zm2I22@4wqW_XEF0MK>Rgt=Hh&?*biVH2FY22v0<;+|1zc_CBrSJvyV9IK2Z7Syr0rI{cqnks^X2w^88sSj +DoMoGab`EOB7505{!q{?D5I3q1YBe?o^h3Kq7dKMx!-*<8W~9C>YdVc`Q27l|mYee9ZjPJkB3}4MnX! +V-2DTQER~QtwB}-!4C0gvctiV(J0$`Nmy}?sQ`szH|wjM>#0~vAtPp}Sd&oLdNjizq +ELVVwTTQ6Belz8Ta;6mw~Rdk)$(ivT}>Ih+;mUB19r18_18w!vOk@BeKzLu$;j#S)yQW67u`qE1v=P- +of0hQvl33stxQ*c_x7^zDg^gCP#Xd|KVFPz}CM!;i^%X>$50k2Q!J?}0A;yy08TSS(I&ns7RC~C^U%Z +rewB9eXN;wAHA+Ce_<$Buqi7O-D*lhe4%c&jVk>3#2#-_lB!2a|%=b;-k;haesIAJpvtO}AORb0-g;7 +)qb<856Wk}Q_VYoS-Gt&m)wo&K%1Av~|FP;!$R3=O5#J%ojzq8mJ%416!JubKjz|244c?TWC# +7d1oVH$)q^5ymTxL5XY7$bD0jL!6-Uqtzmo874MiYMeBkxOVtvX-7mY!rj_9rNcJ +RdCJn+{f!EKucQ$*Hs2umszVUAgSDMmUtM9hM4|NlDm3ki!d^wi`~jm|(5;XVw&QqZ25I!@(I-5r@z? +1DI%IzSCnu_*33Yb{x33~>8%NjO2k4pfp>o%AA@6aWAK2mt$eR#S7On+w7P006`n000{R0 +03}la4%nWWo~3|axZXYa5XVEFJowBV{0yOdF@!;Z`(EyfA?R(c_=7juCiDNdFwzZUr35$2rOmQJc +QahfbES#VNW99~{rlJ8ExCmXG=Z917wrxUp?wE+=kT{2@u97`R)3cX$fZyahnSsA^BcUm&HA(7s$WFh +9{wU&x7OG^BRJa$t#S=4;CT7ufSur{)uv!W3EvYxy!Mw^CjXXB@11~;f>pm{io61LYIry}he=~pK;ah +mHw8?Yi$3&oa&$Z)zctE$L!<;u!6)LXDC(!PB0{Mk<;*IanT<^brn$O_GPAQ$SU1~@SMh=U7tBaK#Dp +`z4V!^%>a#^y^=f**bXH+bvKWP%DVBG~C#xM%PwOp;}aZAF&NCX)#lE0Uw{GrwnMxwJ0v&YY7lwX>NK +e^$~6J3E^Ycy1-QXj)up-*ZK!3n&b%tH`zQ9_6 +cl}ll1%Pa13Q4Yny*@1Y0(+PddBnpS<4!YfIAAF2(l~Lp|DC;FZ@etb=2s}K+r34Oe5F;L}sYN;-#s?2id>x`o79z&gMIa)qlg=_uA-)xg2~Oib +m2hv?jeYyI%G5z#{P8e~!<_kvo{c2g?zraT8MA2y%Q*_M@n;PKP>J1aLesph^_n=RO`%ec7F;x_1zbB +a4q*5e1W|+{>j= +7UGp&{Q1Nsly5;Qib&-_sA_w-P&M`22v537j9VV~z+Lx8x&r%*4W_@LK@ok}I#uquwEn_lkZTy9Uaj$MUg}gsF>KWXOU#n`X20rV* +pOtLIR+p!_XNqR-SkUxp)A%1w-IE^6wqq3Bc3H^P%{KU7Qq`1Uq#@MfUx$qxT@>eLs)~tOJ8*it2-HR +MCL0RCp&cUzNkx9iwrA=v{}gb$bh{Z>S?|B5EtoC{eR|78gXDjewfM|nnci$a*5@}E=Kp9mEWns%8<(XOEEPmBW1gG^xmLBNT%ft!>=L{oq<^ +)d(Jt$xFTtjQ(!Vv6s`6e77HqMpy?BoReE>msRC&B$E9?FxbBP#*pc%zv6bV%;fTV@lyRQ1u +-5){(l!9-yqVpIqFhWL5txPTFllqG92k9AWI{0p$rxX-kJkcsvL2zJ4euJX5hQhAsY^Y`q@CAQku|v1FS%fJM{nI6GJC +9Z9tGNb-|nI(`Fjw$JuY&=~~@p;Tv3d7Xr;|3W>s;i?sofu&F=ie6b)@IqEOOQCsUczzQ83$ahJnmV_ +v7ZMZ^#ugF*M?*lbp1|OZZVArbw{9-zIF3=H_i8r=n0or64rbd?0n#JeIZ1NXSO9KQH000080Q-4XQw +_0J(252C00IyI03HAU0B~t=FJE?LZe(wAFK}gWH8D3YV{dG4a%^vBE^v8$S7C44HW2;pUvY3SL|$AaO ++Re#mH}Skw8lIKu#*)i`Ck~<;D9;xMc}{RO;W +(3C>M|EmShaoh>d8C}E}#|8Q-Dl5iPcKtu-JFxBn-23u7@!M2Dbm4(W1gb)TYk#pcr2`?=OiQX1vE|^ +TX55_k5F?{h5pdKv~5|J21hwoY24w!WgudOWy=jWTvCT7mjSn1Vy2-%!Z#@D0ieDn^Tb>>g3IXBcnW0I6aUy2Ck)=Uw=7I +3LgZ@Ogay>F(hku|5xHv*Gl9JetGZ46g5{H{<*9-4x$$VL1H)e~qU%ec(tFZo{8SP5z^kf+)m8g*hjZ +d2@KA73YvCc_K2AU|e!lu@#4v`p&f^5tUpQ!q7n)bT37b6v8q~?}&616zU8&RN9glR|rtQnyu+{tlkb +ffKM1qP?_9x!hw(7;7Dtwy_KJaE0`+DJDpC-GguglTk3_WO0qT!61a|fVFkV5f?Jjw?sv*+81jD23?_ +$;(3{u;_2E>|*!HyNESj0vkJr%j?EJ4E4;>qBtI{Gx;^*XMk7g~Aq`RHQ8<%$HxgpQe4jM615dP7Iv_Az8@kV%(e3bIa=*B~o +7~Oj=pDbw228I2YhLbG4qzlH|4lfiz)ZYvPZ^DggV+O +N9|}xF$|=uoV?4G&vZOEBPVDPH9D6Ge$(kn9hYV7KM){sR?!IV7=R*52$jKQ;yv +=aW&2#H)?#0-7rlBmAgJ{u>Uh@Q8))Es*i>62Wdi}TWlA#LvR@XXc%qNNK@PFjz;?P!`m|YGnTtCG4o{3+<@|S +ndk`?^rH1_*MVf-qEFKv(ViY!D70RRBy1ONaW0001RX>c!Jc4cm4Z*nhiWpFhyH!ov +vZE#_9E^v9RQ(sTpFc5$Dr#P91rYK~rou&#=p0;XCTZ=@eJxo*NHWzB<_%g>O^xI=6A?ZS4NSmL|&fV +{y9nSgH&TdG<=*<|`l;y(8l~mI1IOj}eIT;I*9;@4e^kZG@3dYzGd=ffQ2nIzW^$oZkltx-#f4*MKL2 +CH6oSjTUa5N3uxM~|kjLFmkMR#ZlNjjD~r5~q1;bIEoGX`!QwKLT=!L)+M*lP)BbsK^cy$Rv?_*W^+O +);$J{3@m00OhEIx@AxfLO{JHuXH-t+Vo^H7=kDu?S}mF*io|0@|qysLuaiF@3>as(O;r9ucS3-w?^0O +ibN8mjt*6Uy(mWiBZ}24o%egaSEM*Fs-@%LazG8nES37rMntqEjn7uoF+hx@@IFEZlIRTQQCEnZ1#djm}98I +tvKX>s@cnBIxB{fbtAGX77B)vF0F+tgNr&0^0dJ|=opcU&)(A?@1gG*O`Kqsb-(R*DkzJA$1`qOata4 +W1_=23iyIw2EzT-i_Vx#0ee@Uo5vP)h>@6aWAK2mt$eR#Q9AxJJ(b003zO0015U003}la4%nWWo~3|a +xZXYa5XVEFJx(QbZ>8Lb1ras#Ztj;+b|5h`zy3u;$)t79}r+zkpTq;^w1rKT~Z~c8#cCNPz=)S>qkm< +oV2^o7gOTn<9npA>jSX~vA`T*7^7YA46oeccD!Ne`UYDV&vAcbY{wH2`AhL1%*dknI`P;c?3{PcKt&B +r;;fO%#h1d!H=E7w2pofPDHX`k*$4o393(<7iGjupJXVTQG1q2w5oxX-mZt{37$r3xX^rZ1O{o?~T}%fm^dN%;>vfO$%=r^;-PZ0Z2f_`rr7M)BkgyzZc94Bnua-$ +SaM{JB=#*JpuYM2507i2K*mMAnK(p&oNZd1`LN0xwCnY+`^TRXDs@x&! +x(f395%y-OA3LnmKS_vI__A#qW{!Er?v!a6m1%nG5Ni$ZhLGRAXy&<`|ZpS?;nQ6N$Dn)uEs}Ye`Eh$ +Tj!$6%un--Rd&@=X$P5xqNBbU8PmzNhikDTzIVJ=h*sR1ZsH~-S6Z%-eF^Bx+(6HZ+ZjRo7B5%&F9)V +7iMy>D?b#Ed*k&p(JRi;c^IY7`7ylHT%>8%8SIB`aqlfo7f{VXUO9KQH000080Q-4XQxxznc(?>=4vt+4u^vQ!zo1=ub;TApEADN0bKnm_oZUlAQk*T +WVtN_kExWz%*J~fKZP+cXx1O4S$vc+&r`Om*Y2nai%9LwJkm>9M(gRrQ-VW-YIYLy11zp56+dKQ#-qf +{zKEzOsAzbsY4PVDe_n9@GzTtJ*klQ6P;pt}C=B!HK*Ml67z`4c61_=S96`_DXsk +w(mm;QN!o+wwAn^CX)E?|M;RVe{dZhm2a)Rnje&a0f$l1hd;3lYtHMVFzcN^Isrlngk*zI!St+~b{yK_;!p(}rj@tSv=SPCzAi%dOVmV +&V3M&G&iX*O9djOL>RWFgCAd-L&NglHZP)Wk$5={~*+!ZMSQ?;iCWw-qP1_C>NT*J0V>ek${0{{c-dq4>FNfiOW{Vq_B7E3;9yF15a<3h{K9kC_KnMN2qpLtxa2ayN;E*u*A%RmHO!|Zt4%v7&!Trp +4h`S+c-}}|QcCN{Awt@GdP3~Rr*t>wh3V*f=9*B2CW~&GCi@Un6PsI7#+IKb^;`zkAT`yhd+9vL5zP! +73SD(ohNUywrEM2%s03CRGTLb7iAa`ScZXJKVfWg_7yL5vGo7}j;3XyLBdPdeWKXB)F%b8EscmCSjI6 +&pv$gaGVySnjVN9WdA1ruNZW5oFtUdU!KTQ2ps<_03yxwn4s-Or1FEWG8l1A|wN0b9DWtEE$I3(C%yG +xyde*R$K%XGhC=faU9DhUxvn(L=E74F2bV>#YnJSZwaC0v`r#(B2OkfO~i2*ktCr8#L67@4+T$Y>@CY +6v(ZdE*2g~|I}b1zTa(}me;j2TLR(+A-anvRpi6y3;AHhb6O4P{1!s^P+A9rcDu +)T(BD@^&onffLpC;&RZd#Zf(6K;HOA+pju5!=_hcWyn^rx92Et^fP(mqmpdf7J$|5W!BS690f?QT(V* +-^Mg<^n9_8L|;vEINy!GKA;sg*{3e49K+LSFvfFCey%S<1fR{c_1B2H3_d($W{8R&WIrr5nN9Bm~TpFkTz>uwPqd6OnUuAM`n{Pe5^Lw@@WeQZ>qK!FFX@y386TP5Vm7UlF1)FQ +?M5qv<0Ht}1Ig{m((skAa2G}&kreng|ttum%#-=X%j4dHI>s|V~RP@fou6YNzQ?=@-rO7rj@gV`tAA7 +J^Khswlmnzz3aMi7ggN5A#EAYpF;p4>x+vQx)3o}NOlLi7-m;lp>mgrqjVX4sxlct61w==-74=PmxrQ +Kz(u^NHycGFftX7j$s~;%NhMcNz*R?{ZKacc!Z#_~yR$n7RNtFV>lb4!E({xtfSE5RQ=&uYA7c>&|A_Cd~4kbw +`@p`YFHGxWo>^XmurrMeok%$i9?}D`ZPoW?`K>!w}g(LmX0;ebq^C=0i6;vG%h%K?8(ApWgEbmGu(4C +!XJ0)IGbqXL`U>gpQjYXYtTH@HQ)yyb2NfJKUjDA^{D4TXTi-S)gOc2e9zFIZ@`CJ9pGisOd-d +Vid18kmtQQ9?>IDjmux|GP(*;qB#3!SI*1;?S#oGeeS&Rt3!q_};?k*{5LjV6CzDy~SPcY +qoZT)swj#M4or*|BE>vtq-Mwnq53l1@WskMeSe&-GOcuxH83iR{ +oUv@)Wm?`6<} ++z07~nh!gY?3!G5HFiXNSfQ>I@p+sMHJSfiIP@7Z#0~InV=!wUI}ti$yxA@4PO}dsLKFd+ZgXnc +35`cRl3X&au10edx+A~2|CV|u1 +SEGH_`QNw)smY0LN;W-WQ0>3sz`X|2~~dbo458jkuV>_4zH3)BRkBM_F{LHSHNYg$O-y!w|ToLUTd_M +O4DUJUee!>#+#wv)Wz>YZ?`C$ZHSB$vx@&7#iz6kmBst``J~ztUDZyW0m}%HYlkHCXhdsfp{kHLN^wA +BJjoFA(>;<9g@G_Rz9=83g=Tr7goTB`6+W8j5oNm_D}|sOLX@6aWAK2mt$eR#O&Lc!u +2!004C~0015U003}la4%nWWo~3|axZXYa5XVEFL!cbaByXEb1ras?Hg;4+cxsMe+6&z!SX>7+5l|;13 +p|{MHkn{BH3I%EEWn^qHT6%QWd3jjH3VjX7~^(N_Mho+FtHzU}Kpa4(B~Xal&`CY+BN88%9emHnVjjc +chS_W$)UG-w>Tc>r7EGyrqb)0L +^MY1YYM*7-)?J&DSC`L!e0|wtIoQ2hwyW2?Vh+LXw#1>Cnaw-{JD|x9a*;>d=5{DoMZ@bhNBU>8JO?` +RoUF*zjKF99loq#4l&=N7qr9Rw6`QAnnR9VRD_*+MZ>7Bbo+|~CbwjU(>T2ARl|R<3p)Hrf&6R9TyQ< +B-Sn{S5f;A4{=Z>=z(-*A%>dVKt=`$c)k6+Jbvwud~gKf0fO5P-krC!>Wz@!yjvM@ulr^4dsfJgadh7MsCbnQcxjei}OZV2 +q84Y7C0qV6dB;r_>j9C^vT;iPZX=xDX>BdhUgXn%`lVo6Tp4{920MKdVj(>n3q|5iZ~0M3%XAk1K<%BY0rDZB-3X1qJoQ2dO!xyNAO+bOV6B{!T0sC!bI4u?K9K}_rkcJ**01%eh8*< +cz(fDsb1~(0Q|x?C4*@qf@T22ZnX8hkcBEcW@`AQZ!6=2<7A3B`T7zhUnA~#$D1k1B@)mbi$ogQz1PEoYuV)MfvaT*cLd +gIEq61F*NbmW8zZBQ4;BR5sKN9oq!~ByEW|{1_m`l)D8fNU+dcf +=g=*iIQDYupGm1N*eZa#}rt+7sL+$4)I7aLNT!78bW)6#;}kXf?j~XG|U(_N~*^-0LBQXYF6+yhZ#up +6aXu5t~;jZOq|+LP!Ppyu=nH-I +%#;&F%iGngKbH<0ou$QFdy0m)F)?4$rgUGsNjEgN!i04o>dQTEu@JN$-Mygg*(l_Yy+v54LX3aT_RdM +9~_i4^klP65va9pUGw-C|22IJHni7*sbD!=&D;;R?21K1}qKw#$)_a1{3p*j#wv;w1}B)EPu$Z8RjY&pdHWmdKl*SkZ>T$%P@>NN@-cv)u#gGk}!M0d)ivU@mIO +o`d62a`EDV0AlBl)?JpM2)eTfazL;o82Poc0uuC>7f_hjk|QPkS4a`uiDU5gkDUDn +(DFgj(4Vm7$LV!>z!SIu3?j`j$z+KC#l6z3e(ky*QAT2C0c48$0p-;69%qlQG%v +4OYE~%j}V93>f&8FMI9L8NMd_ykNg51jv^@jGLEa@!UWMm!)!l&tZ<|x@~N(=>K0`{`G#pl3$QQ+2(E +E!r<7_+oV`t8Uw*#Np)ic&d?by5n<+L1C$w?Gt>WUv*e6DhFcC;@T@5lSlw>q3qC4qaVYdLZu?+uqj| +YbS`avV+_+%rb*QueWhm+oi*io`vD~z^kIEz#~ktGnh8^G%+zU+W;m=e_)0N1%`NpSWcjakbJZZoefJ +_&mk;|(jp8-W&40{JfeiZLmCHh;i!E2qk8y>i=-iyDXAA)*)<+3Cyz+@x&FwL)mUBtZUq;xhbP=|oH? +yeK%@>(i1q`+ou}YOV@7%L8v-0ds~%U~<{V>w1V*Ium_XeiNUIHU +2C_?{i1PumV3K-1`fE@SX!d`dvpqGJ4r@8aYxo^HHHcb>?eEp-Ny%OK>PTTjQckTy&TETuLkAmXRJ4o +=Stvl7+Idm53n^V|I>5;bcBR2PB|heqDG{H*m

IH(f%0Y9v@x=X>vC3*4^t8cch0MmY5^c8D=Yd)hhS-8o +to7SC>r}8P|oO1#IN)+rMY{M&=)Hg9ONBr;q +?`@Q|?Gd5h)t-{I@OsyiH8=hfDQ()&fuG5Zb;=l*$P=)uQ`Y=mhdSvy5e +I?eL^HqDYbKp^BDhcb&XMHAO0LV!PhU~MLEPg0tG4*vY6~agKcKwmE#tDyg&8$OwI9MTWcIQ& +d;gbIA!<0bHx#d&_Ap8=oR@#mLGxjyr%;3{-yrME0E(J^;s7o`ZoWwc&FjZ3@kn#ef@t`Y-lxos!C(5 +dHwvpV0t7@ntqT^9v-zyQ7|eDhei&4!tUk%(egei-bgHgXGb%?!Lvif1cXIxK`FW2(`KUr9XudEivE^ +6#kbjD%Dwr%7QB$)1Lk6fB<4;BMT&PyMY{ki(6?&=zVM33--7u|FHjgWH&OPM)Lna-O)~N(#0D^sky^ +54P(|Jx06P$b(4B52dGhMn`8i3V<~AY)nuI|gAge%btby22@(l-X#hLTMu +5tSjGIu#F=;9ZaYH;bBqDYuI)7)`g#Jq8_gUZTMSD^A +bvGuI)t)K9XZyMS6^I{6@ALmbBpMUo} +fBNLvzh3RJGEeF%>>^%`Budd_f?aO>`M+Os1m3y&Mt#2pA^1!e=qTcL48R3Tc4{+527_12hhJXnR{&}QNx4**MzBv5S3y;<& +;mKyze@`$P$FIa|+e6R(15ir?1QY-O00;p4c~(=R +9NGvZ0RR9q0ssIh0001RX>c!Jc4cm4Z*nhiWpFhyH!o>!UvP47V`X!5FJE72ZfSI1UoLQYjgd`mgfI+ ++_c?{dW0VRn=t-0{L+uOP8E~bytKAy;}r9M}$ +5wdL>><7e$a&+T?VEff#IvHZggWTwIO0WWhHd8EKh%5Opg!0i2U=n?xd^oALkx_eLSNjIO8m5U(&(zf +353wo_98x@?BAhdEqFg)k>#ZB12GW?-6u4xIg>;6^v&8C)l&euftcaT{7TyT(&gyy+CWPuWqKUCi8Uj +Pm+mAg|+oe`P_-D70|?;^KKfn60_T;U0+<&mpNT5OuSgmBpwF$1mkZUt4=*X6+eHKVv;L25%md!t+M) +#7w*!KK|nVFT@%!|CcS1`bexk0?Q~vm@-Gx{6+EsP)h>@6aWAK2mt$eR#UVSBHl;~006-&001li003} +la4%nWWo~3|axZXYa5XVEFKKRHaB^>BWpi^cUukY%aB^>BWpi^baCzNYdvDuD68~SHVxgcQnUk3&#i5 +1oRKQ8(i!X^2xDJXt#m7?O%G#LZ^0=gBHOP1G%)Yp!C|Qo(;BbOriRA3;Jbv@oT@HuC^Cc4m|MF{oMH +BcYF%k8wDEXWUK`Kt>ahj59Ny)5cX+mc4{EFrYS#o|Q!olFABJ`%9^GX~J4#*3hWidQWSx!k@UW!9W8 +0B$BM`X_Ps^n>uuo7q|`86wfp3%G_*Kx_>SxSKkk)QXI_kVr*WAyyP$(xta^P?B9C#NsRKv}NCg0s9j +6fkFpR#8RokIr9>i?~_};tN{DWn6(~D^@KD7omJWivR?0#CgKIL-IKc!!KV +3gEK1XRH^BXX9X_>N1b6;}k~Y;K6V>94tznk;|0N2+ImyR`R#Ht8S#sK2l#%#*;dw1ASA@pnr +4G{E{juM*70A`NYwmf)x0}3@9x_v8*eW+N-tYS(WjeqN4|cM?^wo!BUDiDQn3PFfuP$QH=;X`!_vo&N +G<(H>AsXMSf?+fruC2cfrYu0xOo!(>kGKRkDgksE;2=4ke8fb1fB7tioa)4j#e4S3m>;AQ{Uq={6mEl|1enwEm`JYxBRPrtt)Kaa@|3T}_=7xevltWXgcm=cYvg66&=@mAi5(0tBO(y>=pi-VuM0FAb22H^*Jhe@3kYJ!EsePG3C41?TvO_xYFJL;F3feKnvxhLnY){R*g5TE`{qy#!KA5L5B)aD+t$oPj>zJjOiu}pVoE8-zMo$Gnd=@i-SrU +vwAu;9%a}zU|Ar%vhb|Z8IaAQ>zK_*H;Q5#u~`1mBW56IXJzqWKIIph?U?3T5R^ib|<$Qf12Lw(vlHLIp3`HO-sRp;6Ru +1_^Wq4|85-^H@;d+=yoazpWI3Qo}OaXKW+48mt4tkU`STcwUrr!EXF%kGdBD8IPMwZKOyx29d^`-`M1 +sfwyHh0KvA|LKy8Ik)s4VkAteD4Rp;cjLI%V;sd$`D0nKHONr%pJtC5oPg;Sh&LX^|mGAX*2cA+N+~t +mKz(j8#1m!)*e3<~IE?p>!lvTdlOISc@!KQ~$U&dWNDwWZqCFIoWYjwN}Nec}?q;gsWrET`f=tv8grm +PqSp6?xMeV{pNbO34~Y&8}NhW2<%VuxXfQujKEWOpB@BqU-&ewh`B +e&uUB!*~3*hP`5GC_+NCM2r6$u}%(Xo610chxZ2bEvP$DprjO!V>~jHXd6317tmH)H1ej*c)jgbOefI +NHjdW(CY}JJOY@EtEy~DsbtWO$Jr+nT9DSzJ7Ay%jo~2`PJEpyatw`>2^kq&=3=OPnwnS!WVUuoL#R| +!EU=+797I(@_7p0#&S3!0(={nLBvtS~H0o(B)0?NFo+hk9V0fXC%8g0Tx0@YQ!ZYHH$@Ie5co_?68BI +DO!}b(I$DW2k7#9Vy-5_=CX^6E^!2?lA|64%%-Stmr!opAAzmetgdJ`^p(-HUz*O)d4@A?SZcR*jb|Rjz=qlXn +vIQI-@wdJr6F(7D1&s8#8tcjWXsG_*t#tj;x1DtFVK4NRb)D_4X;>_+%~WB2Go?4;=&#?i(!fxNK(p1 +kfFGY`!Ge@3@VrT&&7Q^ue5dtLl4rT^GWRK7B>YZL*s>xLT$ +lu`u1D5zTe{9{vuxNQ)5Aa=4=%ltazZopsa)sFwVS!5l(Ih!24{Fi<#Nj=kRC(r@Q%|W>a5zkdlV5(3&s((wqM0$;Xcue>u?K9~&W_ +c-9^k+hutvA#Qhh{NX9@QGLPdJW;xU>O+%_Z$V*iRqL%U8-BJvnczZjuD0L +IK(&(7e$We@W0Mon^6((TyR^y7uK5?4)k +_vaU%&TB~QSzKPBBbcc&Xj3UkvoExDI@kU|BdZqPH>~8IDk|6rVPgiXL^pttw80}@g;conf_|Y|IKt$GCstd)Yq)!lLm1%& +Ex{}g2fbiU@Z7OX9LnIz&s{v6vE0*6OfGR6WM~ +{J_%jM*NoR?NW4x_^L}M%st!b*jyv2Uncm!-+yLOyHGx~roGzlR*bRo=eqKRsSBts{3wL+Cy|l*D*;w +uuclRoEqC8pH2*CZZb`+?6?13`s?$wa(Y)3FecbO|`K3=Q|tDv#~s}df@SZ!?Yi$dze?Z#7~NHFqJ%r +$oja)S|zVJ8j7Z1y8*VnCU~*?`xZXT84Oyp!4)5gRy_>5(?OjOOMbN{d$}WO>_GcarS +C;L=LhByuoUhpS*|J<|x4rj9`%c7vE$Z)xe1}~2?_UGCTXq!%b_4&vd$v-&KY24z9qC3d>nvM0ZGO+O +?kUG}%u7HHuc2wC*AQU}%@~AQLKuPOFl_(9s}H$7f_PU@h|DeQk2$WODq5nGYC%<#Zfq(i5~PpWL!P! +biBcg;{@-gIvZKUGCMp$v4OF!M+9_vG@m%bfgC~2u;`Lb*mXRGS1l{Dd&8b_D1_!U+y?Y&<9=)CX0vd +mo?7UrZ=&6F|-PU6mx}ICN?9lHqLzlGw?yksfk8IuQIoN|oUo-@>7+Py>cir3K$#Ps?UI*mw=B*`(X1 +GmnU=1`pr8E&cU%AtVV($A6hU@gH${Y^0`}A3JMrQ}hS6_0{xVBHI5BXKjS1S1&lJCTjeAlpO#L-KOI +2C>{wa+gGjlA;pJh>NQ-vN^A4@Y1Cbn_CQXO5)tBI0uFXRmHx>m91CQG8p-zODy1vBmka8H9$-)TO@A +Z;belA2&iyJ@w*}chQQz&7*W&Ow+y@a&FRroZ-BzX%Cf+Hc3RAl-4t=KKb4{qdBzK?+Wdj){s&xKzeH +PevmWqmK?EF0@pM5RodO&-Zr1~mwqW}*MyoRvY^xxH*o-E%Xw=EM?3G!8Ac=02Uq9KQ7;%lG~xc@_!( +wQhP4b?MiIVp<3$nXgedZqGAcm~{s2%*0|XQR000O8`*~JVz>+DQ#B%@u|E2)|B>(^baA|NaUv_0~WN +&gWaBF8@a%FRGb#h~6b1z?CX>MtBUtcb8dDOk@dK*WQAo`zAQB95y02wSvc6+B+Ub;susk^mfOI%5|r +-$YOMW8@d6Rd(!fGF7GM?2qnr1J_Vu9=ZpSs-Qi>^FyBw?$TEMcyJK;~q!ZteIE!<&$i?Ssef2;PCM9 +;Ix=s7nfzWF570io|W0t)0YRwiJyamr@m3uW<|DaE~{Cw%of$M1jzNKsOoZ_-Bz2cs)qL~20hN2wQqg +UZZGE5x}0sA^)B07mFu!u +?91R(4Us`oc)s76wq&&=$LbdE^HNy;FqMoR@8NiK_=++&1fL9(>)bZ)AbnUArl7^!s*vke8R2{AQdL^ +*r0w_zocW7ciBVn`~CVW-MEQOFOfyZYo-#Vn-bvPL97pK|hk3NItD(2-HrVneF +wcFLIS#M}^)9Gconaqn#F&s^&2RG&Bs+s46TnCFaK$uJx+s$@eP9|A(L!T8FZL{2N$_f8{a3IfNlKN} +oeybY&ZByNp`up1bw%M&p*BIu3(=dNZ7xLh?Sl6&au6?^H+`GlL2CQtB?&a$Ga=WRPZb*a!&Dy;N1X# +ch>EE+vxdc>2B=JqEcC)N5^zZVfsFr|H>$Y@Y%JsVTQ!HhRv+jAZG_B6cLBGJe}%yuY}UIc2O0dxTYPm;ewdZ3P4y+N%s0Jx0kt8t9o@OUUhmf1a?e87aB$bK?Rw_M*=pTf6c@`K0EH8o{pIP4B-}s4p)U{OQ3Dd!xG7 +CL!C&LNU3%Bld4`c@Ce_1G2(S!7ZseMH`^M|2<^x4&{2#pkRia!6R+D$Mmj$nQ4e@tPyhCrV*k6V1^`` +b;he(F#oJ7`Z~lapf(v};2RLtj-0&a}=#9B=7vM2#Z^|dky?W +EnT%i>0#&z5CTZ&wrdKK@_=DB5`z!hlgs;BHwLbYV^C_{U!m9Z11J9!DPIg){*yTkj^T24>zJ3(hJ92 +d_CizMU5(k$rs(b7`4y;5cFBi3`z}#B~7{mlGfs^JV&#GEHum4+yuBwfX(;AAQd(!BDVO{uD$;E(ZVo +7Wui`E1;dkvJwMa!++at$=p(r$#FpBc88VtNF*!E9j+PiT7;ayR6*Cd>*L@6uqq?QU?PBq?_~^*0Mp4 +T;hL(m4iU+}b6-(gp@`jfFYEWkvYJctdjS5ryewur10DzjvQ041f|mQ|Uu5_bIXnD%2(OWH0Q3Fe`c~ +#52WmLVx2rief;aTSfYev>YPQLd&R&N@3%8aC(}U?Ih@y# +glRvm-3{94e+PYD-epK|YPJZuLsAYE))O9OeoAJU3&WG?V4h10ek +A}vLYY7{&RQk;A;6XlXR=c5FQ0j>q!=i)a28@!OL35EK@mb68;ZNBsZWMIcT>QQ4>onZBpmX`GulvN} +5<+5+H5_hOVumAsEQ_0qd67LR)|c%QJ^t7mejqGWIiKj=KJ@4Q4G$ND+16eCgBJM457o`~#&NwM`|3$ +KpihxrA)5_&4FAos9}itbI=HviC3fA?m2p$m1XBR6l#SFOK?BC@2X|~Hb-amR{A|LetgwzLc*x} +x2>0SipaK4?v%Zpt!nk@U%c0(d?b_+zSs5eZ|W>@75FQ$->M+yhUp)H7Bl#!r2|;hyR1R7?zTB5>2Nx$O-qnm6TSvP_$I(4J7UxJO1FtNWez(5{BN^Hy~}dv3BJNY +k^mTj9FE08dXJYi@U2ZN#P=TKL}}`y?9<@)0xo +7tEpSl8k^(jnGkPYR;h&1Ont45n3K=kU%P>47)+8g=1YgWR6coW^AUHP|!>`+V($3b^YJ-2#kzF_MD_ +}MBZwquVW&o%XvAmDAGamkk|FEe?$|1XV|ZHpvxlG6!6EY&EF_I3!HMGI4wI`;XgA75v0ZK^Gmz>^Km5~m1#-*|Ww9m6 +J~WPuxV@6mYG9^_-F(k8c*_%bBb|Ly)Ih4-z@G=3kIkHPg@3-leLQ6ha4YFV6$XKjmjr;$1AZo_`dL# +ifD95O+Yv}9e{MiD)n4jbQltu6`;7PZf&Yxa@ERUzGE*o|T7qh=5J0H;R6L`OD<_%eU_k*q>g$d +iv&X?$5WczkT!Uh5Pf_Utc`?*Vo^^a}S=s`0mBmuTSM~?fLLjDAi#`g69H`CfrKl5fB~my1c}3(xZpV +rn%m(PysDNd-)AW{iw%1HMH-g9trypm2=uy_u~}S!#{(GUS0-&-mEq|3!}sbhRiaQSKH;%wgM>j&*yy +Z?W2FMR;LjVo+c1jmKK@d$)k?I7`$aA_XLFuPqaP&73vC;O50U~+I#-4FLepq=OtnWEq~`g>br9O@B+ +HHE!OjhBSUqEOc1WCo1&sq_w;>HEekk9&qKm`aPH*Xi1rK}ZSu_S(~FjXba)s>g*vEr93?f@&hMsB=ZE=C=J5}yLsF4`ogvIAiTKckOwWX?x!xDj0(M#GOJ^QUOtfO~PiJFf7gE +tkM@DdRR17%g*j$P*$NE8C54BrM`v$G8DAzNzSt&;4f}c5u}3R0U88mbo8{h>yQaP{F@s3H9)2nmk^J +zaanSy8z%BzXZ6y1X?l%^Dl62R^?jM?YIjFW#10q5}!Rf@B19!-}&|9^8?c!v3~EC>r8W`>&0gH-~n0 +OfN>moIJmwOf~Z)KNoGkfPWfPpr{%cUW@`u>+^!>;d+&J^5Z0o^>y&no-Hi-w$7G;6<%R^OtTvqSPntUZ#z3e! +x2{4Gj%~qwVZcqO<`R3{WeEkMR|DS)!fBt3QrWsp#MhD8iLgUX54F3v$e|BIPSor(#LBPSnlSc=Zg@p +&lk3|`mV!(#xcQSg~;qR=Tj=#;OahoaoYFwA@YgYJ74df|rVDN}^U$BPw2deXVuV7&d=M6EP-Zb;=vI +KrczMM>_%rWBWObmrwW}KP`Y35k{M2hSILwk_1_H%4BAY^EmPCI<~bV_p};wxhb=zL!;(R_kz^Qxu00wg8d)7WxQ-Lqu04mq;;!5~dvL!>SC-3X}~ +0t$3rGR70qneiX(nfdHol$E5?`qy$7DYT4j)%Nv~;CX9U8;F*2fd%BtV;B%K)b9nVev)w}AZD%L2n-X +OJ{Hg;f#|gDR+q<$l#{b_S!|)e{Mb)bS*jDK21OqL1Tl0=i$5S$!}X71457m}#q1Py-Il;RP(XDCu^t +l6Gg706Z%HnH_;q!$F4nt;&zg1lwp_ojK$Mbq!Z_sg%^&~+orqsU&Wf)gH5!GTNz1FErBzpl9TEzQ`6 ++=-eB#E*%xk@&HQ{e__oeih{2DqPoRYGBBa;}Qo;d)T?l;~E^TAmRQZ8V^Q`*cNZcC8shARA!as@TKq +Y$mAF);xFwiN5x)lhsXLbJ}#gVW}=T%SH0Jjn*D)eLW5dNP6SM^Cu+O5gl~MiGUAo;VE7ke^r`ewR^3 +^j3&$`t(?gu(N=>YI!~W?ce?_d&V|{<&L2V&2P~n4IJ2Xy4Q|_K7}ZyRcy(q%W~eb%fJ<2Jzq0lSM~M +-T?eY^4ky2V6;NoZ;Ja`NbI$tCaHE +i|~W(r(j*i+3qum$TfM +{QBHEQf1d+u;xMPe(uG^w04ye=vfr;1Tcrnwtb)M?j9~07Yu51B;+Zvz8q2l-hSF7uVd&|NhWFD^Qa& +FCA~8?A3hg?QyU<88KGyT0!{Ne>@Py46{_5^|r*#EvwM(SK-0OI~LEkbmqoLHco(CEOSpqUeU=96?J4 +$jcEW|7`JuxVF$FJY(rWAW6?R`Ajpj88JXajYj<+u-g~?~%F3dJArx&HvrXh^DB4D6za=V(ww^*QBmf +iN?lC>O9nzumCw>q(#5-WVHT&I37Oix +8ZNd*f?|%6CD5*E;3}3h(M{j^O@c7xk2UnM9q0%0pMZpXdwE|qozM|(biri;J36h1>HYTUuY#0(Ub;G +!9GIZBF=yt?v2WR#lBDXg|7~_neke$NcL0>m$n+Y{_Q}@x7&1+lo6Un9q!c@R1p|4w!1knR(fjU;$+< +Y++zc6mYUXgWsHc)fP;9R~A{I9|m_zC=K6|{a@D4*qKzGjGHfP>8UQGBDTOTU_%kWp|D47Y9>duz;-XU?&_a@{uIX2cFDG88&_<19pI*_kOLsdbZS7TJ_OVGR>u`INX38oP0 +_*WHnkq;VndjLMG3ppkQ%vBN$gjYn7hD}y1!M?6*@x8vOwTe!TrAvC$)aKoVx!0sqf8+wn`#W8sA5R3 +0J(ocE)X~4>Pe(W%5EYX^>%Cck8f8w;&S4B%+{uH-m#xCQ3-jsYJ25QkLlLYgtU!5eGvGe)w=t)1w0Gbk}=FsRu^b^@|VXjADx1Z22q +g99?{uRXO+HXXxGxI9#lEY#NcX5^J)Dozr8?f9~!g{kvQXt$HDXh#v=fwjCVq`0x#H*z0WUKALow+Fh +t5!UmC{fLBCWg0H8ZrBm|J>1HV8=&|Ry2u1-| +$z&B2llB5$GR0VkE>0akyuMF-1<0VEsBI!J)6`zAgfy;fdw1AsVqC>b`E3dV~?)A4fgp5PNSZV#2Yq}@GsZA#6AS8y~F>x1F*;+nDdVU6&50pu)RpdfJw}W0i)SG;s +4MiV#qT?7@*AucHYtxhL?7aJCH^DF&ANb;4UeKGwi<#JH1fmt^v@20Ng%X<|hmO^Mi$|LIEezM=hT+% +j9WWP;a7h1EM+MqM4j}i-%{s)J0&Tp**|H56+5LXH#vp#a2)MCb`LsvREly&#w2JMHDqKR?QU37(>=X +5dZ6}jho7@RP)t@6uazKIyM&7sI0{G5WBFcZvv23SFrhnJR(VT#WdX^$~-P;EP?G@N`+6|Q8sg6 +k@2A3WZ=55O%VAwdaaVn%)vj#+1HQccnp4_#w8>{>3jtB-!666f%pI%}g4p6bYE#Put+c9?=POe06BU +Gudi=`Zg74+_WVDV@8PL=fKtUwL^wEpXcz$2sQVtt4Ttn+#OosLoa`Wo%a(?txzDiS6zk_ +>wEN}|`hv@B*n}HRs70(sl|h52m;SmbO9|an{eFC@VEDHS!lYA;qvRmWF|PD|$0#EsOt1WnPMia0HNw +F-yXVx7WDNKm-QY|+NRv0ulWSHtAG>C%xbhriD@$klu$Uq$)fiI%HX({-Mfqez(T(&_ZVUJ*=CjaLfV +UJ;4OEYXYzwI|W3OpGLu>1~6)0F0Wjm33g1<%qmyiWm9~Ed>Nd}f%Q}wM5zo(IG2^%DuT4Bk@8AVAUt +zBBUBsV$rEipXCG#TDILS_w%G-kWXEiMpc*MOc{H!26_qCp*&bVB})JT|;VXjp(9Lt!esvVV;#lr%ob +N{0?0G^>yoH#sKm$1#+cdJ2y?<9b7xq=pHW&{Wuq6`lo?58oiZhfDulo +F)}(!wB>cILHHq5wT9g<{U{&HreU>HsvA)#m4ba|gVbVnd2^tSk$5q;$lMqdDZBRQp-?E>#qlqaD_D2 +SVEkZ`dJiXK8j~W%YGl}iNoC||c9=|P(V*qhR%0JyHRkmeWhvGKhnZOhZ-lo}GVxORq(6xxq=(55`G? +ZdZaRNm~9($aUq|+2RfU4da1FH@TRRi75&Tt^-Nl!`qz>Tm>I2`B_oI%TT@&iw`;GHoS05uOdZo{kyb +92I!4_KLUy*WXi1rHo~o1HM*(_zVlp^>zDj?96y*~}`FCXjjFkl;E#INR3lP9Nj_?*u==31Aj6A^`D~ +`A_cFm~H|*E78imuqbCRY%^#>o_EO1_iaI*3=so9%8hj4I6NZoeW=aYIFJk +pjtgMfKnBD}K +_$7#4Bp^)f0Ik&`cDaEjTHMAa7YZ3dj1~%|5OJ5lB&D8_qqr{ +zAfmM085bJ-?6S_*o@3;LCM;u2knAlEvv9jK9S3vh5RiVxVXVG& +L`4pa3#4pfCfkk;Xk(qeQKd2yjWN>_K~gIODg4jO=R5tz0rbKTz2hK$GUeX^^!0C@+xRG9-7Bv&2B#* +c+42p@eX$^@gr!dO_JjOV-Ef-PDE(d4Kt+0*nm_n1o4HVI0R7tnf{-%P>tt#+I*}9cqBTG&*|x;v_qS +7xeofY%a64oGi)5of8J6|mA5b$uq768hQUD7C?Egd>MlPzA7yz4Y?tGNz +wWwYM;Oi$5$Y*e_&d~8?DHEiJSPXj!mjTqWzqq8SZjvt>#pc-vX-Q-(hqu=*0!M)eY{vgDYz#wL +s`*f%teFq%be#l3dB-ESsO5X+NRA+_*4>gj__f0jw0~}tsi|v{mofC;n%<|p=$l}IFE{>HGQa`kV-nP +=)-XQ&%AQ-a!&|!|xCLG|<+ZCO&+tzT?T}Ils?J_=zXUXq-LpAS*U@pCYCuc}m^;p^P-Q?$_m`*05ps +!8#g7{N&30Zk2O;q|6=lFA!y>3=5C;d3YtvSrvCR-F86f8`Jpe|{VSLlrOW4IW&{pXzz?$XKUL86!d{ +3s-^aQkfAD;IhbFb$0sWC$4x{DHQUh`}I%P_>&x7KPGBe1_S1zPvc|<1hx<8K}!#kQ}T?a~H%ib@X-- +aNN(hzwYMRZHQW*lOYi&DXJb;T&FfwS4aSG|#K~& +8y#zWDQWF-^`PBr-&X|0|C%tmIi(o&A46n{I3G#;wfOz4KX=Um=GvfA(4+RE%a$3|UPr9sugE5w5Tj- +<^B|Jz^k-!_;E&b1{bvFuq6rmz=3j*}hWp&XeJty!7Eh%<5@ZmTdcMKX{0`c9+Y$CM4aDc%x5?06!sw +w6Jo%kr!<=geVpK3wGaj|}TL5I@Dce(0uUzL6zdR#{L_po`rhy9=%kjWUh)NpOss18|RSYcQtXd@?thPWUqKKL(iEnl* +0e4dtoZbX|Le@LuziF6{z%@fvD=jKc(1kuy*|b&`4>bbluM5l-hAg=kPHBu%E(zrqJD0eMJ6Fw}R~qZ +?$*0q7u`Ez_nv=n)#Z1Y>hk+2xJL%OT8_W(wOr3zun&sT5FqXtIf<|okrzFSiCdl_p`|mVI0&1SyGXN +8oeQ>E^vd@k;Tc9UTvf(sXvnd)D@EB2e$aI9eWldU9>#lAiw!xvEC#Gr&Op-vaOFF=asbfIl#=E;|g5 +{o5$5)+^sNGU>c_%Blk8XTDE1M1&Md-!IIuw=Yxc51 +Wvvi&ha=y!U&j{YegWuR7s~(zl@&w9#BQ>T7jfmaFWt*(da)qU}1d=)GO`VyoNiL|i}qgtv6EY=;HWx +3yb}ni`|$8Quh>v%;cM=wpn!JbRPc)kwmNW*^ffnrjcg8crvse8w9r=Fth~tYJ{nkCDvrAdmsW;5BvM +FE-IYy(3s?o+Ce95qswMG2(GJ6WQ>GtEO$M3t%W~a^M>|6Q8-rsUG84To`v6{}fr>>bc(&r_U!YJzg# +L-epeB*b}=jX$`yq(^z)gbjjIyyIc^z8AUvNNrZV_F3a~t9WQ3FwsxY~a!dXN>atA!&&0f_AA|3)lH+ +%$&yS4!L|vnp8m7JWJu*ZWfs%Cww#V1Ei*5p`-ZaA>=%Vn=`hGXT`55YNvq#{xLl^!%zg_u6*cs}T$_QH&P55vX^JN6MU- +UCV3YlM2=N%r<(i|M4Zk9Kt-%3Pg2IUjfYMz|)>I4}*!vo0VvS^(wVhIvuL;QtrWRI_i*E~rD1O*{>!XLBZ5_Jw69vs`0LpLuwAoui*NvEP>Eke5@+cNh-H^ri;j3=tpVIY +IQvG<#NFKJ>x(vA80tBj) +S;Z2xSZzmlPVB5&Mh`M#gd2@wUWdbtIv-b+Kx%nuOiAq2Od{Nq!dTkko|AlfR*I6{6YHq&X*jC9uLnz +M`s%Cz>WW#ICnG;6A^cc-$U=o_6A(oHNPP40`Hgle}l7TSSj6;WtLz7CAB*#S{7cvKB3^Hw#;{HpwcZ +bjhX?$KhNkgzbvBC=&35`*At(6c{HG*q^-8F?Oc-7;0ETAF8{YRW%il%i)SMp-q-~cui?EADDpS2+Ni +{5R5=1V+m_9;LqQhE&0EgB4H?^n>8N-b$N(>^D_7mho!Mc6q2M}vvu +Hr%v^Cg=vDRri1&k-k;g;)cU;~Ll^l&$I8Xs;9!Qrq5C$QWck?i3B)ml^x(i3q4ahdh6Fca^4Y-pNIg +{Z_RP+qZAuv}kyqSa!)t$iqz<)q|gt;aF=Wb{u-<>&oe+>2WVW1YSBndGAw$p{M3YN+cQ)B${AyiUyG +whm@WT|~J1I{7bldtfL)$NYq*b=W! +%(zU|4J2(%+L*r@?V@VS&SHs25d?at5P-Ui?R>#@~eMugCIE!l=A#*=2lVHZcsAnI)fSGl)mU4t@_}+zCxM{}W5^k3E)5wX2ASJS{;^Tf# +9N&brjL^{u7Dy>J%{s?C^swNV?PLH`xSHLp29#(O=fXiVX5IU|r;KQ5%=KM2hu-jmgv!;{xxpr+) +oMWNNmMVOAKmRArfaw}G63Iaz*9%qep5&RYcyTp>LSr}?tb=@y)3IYyg&NcM_a+Kt2N?**?}friBzYH%? +&Y0QE&z5n&nIkJ^uP*PRqd>f)}UEqHZ5^V?35D;g23;S2 +q%o7vS%sbgB4((8AiZECIa7+xpxBJ^jJmdJS{t;)mBLtz!YdPhBeu|xg~@8L)nky#gX1OPqgHHCvYkz +PazF@&2b%lDIu&4WGYhV`>JpwHcImlQX^*q0hMi_o=ZTXkci-PQOU&E2Z_`@;~>T3^G?3S;9UTSg9M&>xC_qi$BPEh=U7za8MqYMz@fwAw> +5A=2R#9D!#q2j+PoNYvxm|FSo>sccU`Jo#(D2kY2uzh&IO|ZR-ly{K!v2sC|$7l^t*#N$pq)vVo2|=Z +{Wj_hjM^2S&rYUe#`j#_y~f=z}}x9gld!IDxNx(wfCx>d3;*{Y2F_Dla$oZb`aFp-K; +M$vo^;b`!Cr4}TE$cp8>#v%8TH{|m*Sm8ad-+Pi{MtFEGcqSd>iaH$BuoD7)8C&# +`9En5Wc0sv1uy~gZ(V`z4CCbR|A^V*NPp98H7W70o-Umq_^k(Ahx~Cz+|YTtjS`&oUn;I +n%hxtA(-`ie{2rk4O>3`k#Oq<}(=6jpvz!CHpNRq*e&ad^qcanE4>N`WT!%{>;^ifeB6MyHd60;A;rMBgrzI(81U3L95|daLU2h!+-=Af3DsEBh_5IHin3)wGn1pKsIUlpqs&8%y*6*gP+ywi-vlmdd%>YA+h#2onxDgcKDU&;V_Rn(V~J +t7+K1&wl}>Y~%Xz5DCyR}-vB{OswozrF~-S?>CMv92^>0cYQ1{+b6?v1liqgq67f5k~ovsyi4ZIczBM +vk~u#xRj_69ekE6%NWHyoRsF*}G90CMp_3!@Swdpb_tWo?pRCC+PwXyxS}V4aCzWqC$is}{K_$nDEX~+f{0pMP3|H(8kF ++v0h!qy{%nr9T(Dy?g&*kNywXC^rQ%~%W^hHr{E;|;7nacg*t7SW{Tx*w<{3^tAb~Eht<4f@#m-49w1=XP4yoc#?N;1Sn&A33~F{Z`xN8clDyM; +p!X!sB|kDR8ORf)#g6}xqzi`=%>Dw23}Y%qcxMgPXkUlXY5s4$qZQV$}sC>2{+gmv{3rq3;Qs8G(c?+ +d9E1>(Aw?9m35UDwU6AGaaE9bdG!rO6ynW=Eg@^A|K$3ZR&m8+5|#^#}m$)^w+XdNc5~gAwIT?cfHJr +PH-~Hn_#$$o1enQt2IGs>AQ$U4!WwR^^(q#ETccoa-f}0m8Aeu?%RBY-a?D(|eaUD;sFb5rZ%~WG?7d +ztHePTtLjc+Qe}9sBzLMSZyq+nNTIWM>kk(mJU6lE@NYkc2;<9*Nxi!Ul@bB$=^<1e*gO2Uo%?s@bO> +XoQ8{Z(_VHQk7!#yq1;e*VwAP^Ax%#LFSbiuLruR#c$gh_L6P57;<-;#l@xjN>=|qpQh)T~MdT6OOMr +6dhzWuiCfd;B)2zkV5)fhzF3Gixa#X%{BGE%eS+=#!@s}Yi@ECnJ*5C7EBfP*hvXOKI!U`dRF&m_d5R +x9?bH#UUmvGQD@Fb1XQ~}0D@2ce>T&iw+1?)?S3O_A9;aGrqQOMNeH_f_O??wTyhG4`rt$Q0}DR;b`&nO3jWN{m#kai-5kRi%c{S}K|boI48@wyR +(1&paa3}UkRO>wP-T%1-COPd9@cl;6JG#n~<(p7OJYLxv)_Ne*di!Vk%g&sBk3_k$`_;7Xw4Tm1{=`- +WL*FD8ftr6eMZzcOYG1<(*6Oy~lb}Q>|#Z5yDFh?z!9eznpyMVhy;5}}t1yziTcoO~aU>kAm=<*$hK3 +6!J*yT8gOe3eh1RFR-2Z-VKC<|D8!8y8ghtp|HzNXV80UI-I#6O#@$vfAfB^s29ZiRTEvt5Dbj*er^Z +0jn;yW8Et(_4PjJ@-<(+^jzud+nv_LMw5}c$(Xl^+l;!vc;Y;IJMTpVG5jSojh7R_1`A;3nAle<Li{1dso|vOW_W-%cxluT`0qmA*OU|sLM$Zg;s-1 +WrJ1+vHtf=4Nabi74_nK$*nM^&J_E`4G3-mINkX?vHlCG`E3moL~-kBrQFIePsvT*nNbH=4`XB|@4T`yS1G3ZIm$^5QHwp8D{?m^qYx*)A-!74 +wz@hBW=K~`fDY`tHK{%fBxL8Ku%q5G4U{+_Y8TWWvTg}x?U*Ob2>~*!z1}Jq6O8)2858oRB~u>jh4dZ +m?<`xa~%$^TQ3d@als%`K1~%0P5k*fB|znM5M8klPa3;q?+m2AX2Q_r6o;Lr%@E*NBULMls0 +iPMyfQ;uMg~-5j!7`1r-;WqX(h!|B9~da;i@fd}yr2cC2^o@Iru+Z=}?%15*_z!<1N%E0t4Uu%tJ(g% +?7Ev%^gjNPGWChLo8LzjodB{8aLCZNEPf@~NB0|NxsTh1bYKtN(~n(h@lU2Uv-!7N)hJgn(R&xd2 +l>PF4nrt;X)k_&i?n)<9{!Xe|mKM-}CcN2V?votaMHDQ@3RKH^PVePgVU=`DFkk&^H~yjN$fPRzLC8( +~Z4hL)%7eMkpa`EYo+`ZcH{ +L8JG?n)~9+WWWkyEmkH@u;e{V{&dcxe|~S|I_7nl3?%e--Wc +HJ1bU9`ELBGz#ha4;EhS)Qot~i6C;I#!-8X;kj|iDJeqJ+?GR0L(K-1J-(y5GzGIW{>5J3si${M5NG1 +dLQaiQTo(N3k`f`zEK67^7f2cIpI2fTl8*g{OtAB90ZH)I>nLBGl(k>qdz425qMjA0yD?ec`7!!9eT&E)^7fW +-$xSSs;tw+?g$$0 +RBGQ-KFgCLQuRxS50S*ri0UHcPqtM9N=X!K!0q`K`X(9Dq%*f&|d%6uAe(u|8)#QKLZOZoL>!BthxNi +mXJ>&3hHy<~7CNjAVi{QQfk3E1%V1Rf03pM{I($k}!o-ml{V#WoDtGbdd=?<6G|kX9n`S^)J+k%U$ajrvls9<$$JL>tw>0E6j{DiY +7iGIpiek9wnKTmvw$v|4<_j1OM%X;{USW^?hXoioPwEQMfPN7M^*&>fHCN5bdTZgQlMNVaqs9h*hR1< +V?|Ni{x(})nT2nZ41qc4r(IdG!C}3g}Y@lq^;~sum{V`ZpRDd0e{SD8DM>j<~c59)jBpnKAo?c%}W(n%6a01iWOi +b)^w5*Ip|%jS=-uFc@&WXZ%%(S?RdgKivJ2DiXFiJD~xHOVYX<~>%YgCWV{!JiWen_<%@(L{ia%k;F6 +b7;5f%)co2N02jStMdmCZz+W2aBe8cu}nL&4*0{71cpQ9fy +s&-xc<__F+VX*MO|ID#sFN=@sLv(%mr+C=00MnMMf^vtj78b<+qPo1=9BE;yIhTIRRsL;ZvlxfMEempsyA^9a}Bz|EhJqJjWL<#*F9t3%)^hvhX@;jdX`TwFVRJgYVo@B=nilIx +(!C$nVI*?O|8rwUKud2pzb7P9=3toVld3}|PV#EWY +LZEl=v(+CIuVO*bR^_`;0jcqs@1f1W2a)+vTN8WJA@uK5^2{2h{FE91sFlgaS68gk@z!lm1YQ5POOXI +7VPD(l`h;Rb`1u!0xJ)$NxAZGc{8m_weDxmk;bWM3glB5@)Pn$@$KZ`}K4IggEi963lI{*FSwI*CO%pGS*G;ogcdfV)7jLjncojO0xj%9_ +^&^o>g_Y!j+RxeX#-X=C^$vEoCQ?yCXN~Et{d%t)b3PPeeiB$P}rP&Yww~W8vFMB!&+ALv7_-$q +^R`J|d@d>E1z8Kt#IFkbbK^Gju4^g$x!%P!qdZh{`79a^7V);>N<#4vNr8$IhvWMPDHh4=z|1<3T*Yp +N;aQqA%E$wp$LWAEBZ7jHOyz*v7NzK*R$?B(NbuqaqFtt^QzOk&yAzDs+U1SDG(R>eloXt21d2||bzX +0Yk!1A^Cy$+-tHD{v()`Y?lv}y##oC8hurs&Yv>+Q^p{a7UXifUyqi<^sik$HT0V)@|x_#!AU7<}a6u +$u3_L?swR1nWcveqEG3Mgj**=9lu{tJOC}T`h1CQY8U?s#bWws6lqIt(IDe%dJ=vZK>su_H~b@<4@Qs +tc})IH`TIOt9k>v7geWoadcmksuSzmuyxH`WK?esqpUXQiVstKiT43B7}oijsv)NWW&)8lqc8^K{udG +^MDHwkGPt0?7MCWMf77=TH*_MNec8i9XBBj<^ +!%0=ByrfuC_;P@L~N&5 +C3E}vD;Ity)g}m?0c+Tw2^nect%Tf0YZ>1OG@Llpf;UM#9o=8>FhjhT+=2arY@zEW0-vz+AlUMGH~k} +Bh0{GTE=Y?u!qg-0*~WNsJqG9fC3OlYG<)v!eh +n4iS$dp=JXdr)-2v?%jC)=IWxGHJKx&~W4qvKp_{)sTPnNh8vC>`EOb9@TUg$-wO9geNoS)=iFey4E# +>*+KE}cJTfLIsYD&i-drS@ccRAWQ*-%Q%g0A}og+kLC1WHjPxdF6l%k8{5UbLYwST5)BlXH>2Vl4T`?uF|!-i&_%Zfpfz?A+GKA?zuL#ga-uS#o!+M2P&4@-mE_u@W}3`)P}4 +)w;tNaTJfM=tJimd*b3Ih#YZDl}9gAdvV#!uA?ZIG5WFt{T3Amh2)bs;~*%$IrjrMzD*k6EY>)1dp>{eC#qyi1X}m#>+$4GtSLq~oaAM1X&9>t$76AG%y0o~R9yYs)_aS1wniPNRn;=hA3pilx# +l*_%Adm6fIuO1zaML_{c}v7vOia9)WMiIy3- +&3$Z--QitDh~`HlK-bIM~eEAnvX6G)7@xVSr3`-_R62e2uSXI6Ir1UL7v&5oo94;jTfCC`Sy$!k8fyq$H1Er_wt}Hy@Gvc=6 +^OeF7U5?amP-vZFPEg;cahNmV7*IzMR~=e97X-JXVPJodC!ph_V`y%()eT3$oHWK(sGi|3X0f0UaYIK +o&yILrg+95MeBVjzS0Cjj0+BvL>#T0Vm^USR@d>y7v|I|pYCImKhhV7>j)k}369@<%_tXx-??3ODN2#0bKeiy~%#0-2Sf;lI4X8n^T$edVkb{-Db@M^u@VwP5s3qYWM-x(0wyUh$SZSbi3yF?t}jG}j}hG2^i@oMA}5}ZBdOZJXA1;BNICAY_ +sc<%#vh|=FlG-K&=L9rIR>9g~tprX9LFURg#XFVhXv^!q_{sNt)m|Z@Yx^5hSS_M+tvTie6c)Uh74K? +zFpdx+5msf;l04EY=I%a0PJvkH;?_r9GGFaN-pZH)>vRmNV1q!Nmhx%1F`GCAIo16Mxlwba54DdL%I0j!v+3-KIjd@rD%}oYZG%9E|{dELP{E!z^`2;d|e{`}6T1LJc-M>-HpG4_bEegZ5zMKP+liDCH^4%~7q${U$*x9pNJV`{kw0GS)*PkF +w|J_1df`RRkJS%}e92XGkXdw!K2n1++e41HZ25R5xLFoLCp6&_*fx9L!XKjI-`Hn4c;3JtWQ%xa(oZ8 +PR<|I(u{;z<|$fi7D!ny0isuPh4;QsGRtdXIAms8h!rCdA#h=Y6|g9uIBN35aU-n{BOCLQS$dYS4v?< +YGL=-_*9PeO+UvVMsE!AU=y(QL}z5m9Ag^3>I$P#l5x7CoZ*g|LM>Q~b?QJ&b)at5$d7iSfBMe&Z1C97LP7%rda%M)$!QvbLf@(%M2N*qEzNv +JcIJ2;1Cb)puJ?<01?XR@xQ(Ba%U`u(^7o~d!Pxmg1c_U~wxQ#lr8jcK^Rk|^>&GC!y;=?euJQJ&1iF +#1xrt8^W*+6e_1{p+amr23IY=Gnt<+YeBx->r%t=VX`XM;ph_#|W%|&T%i*PS0pD`oU;d!CKOpR-*?z +t_^hV)#QXn}yOvdhJ@X4tX^Tu(STEs}n>7j)DOU)-(5H5i2AP!Q4~5aL7&;x&^9%8*&9hOuTmi^$~~sdr}_F`1WL0a^O|ZKFe5`{RGW7(JZ3Mylu(VP9;(v6jcvVvQlE1r|(i;5 +gJ&b=j-w0>7D{*fNQZoRX&_t%fc;Y74=7P=9XL2TNkgt +t%&AG=uDfBxZnfQoVx7;nY?px*(K?@ZTey#Q}O6F<{a>l3NV~-0%IGXXIFv)wk1HAr2;92fg6ux(i6w +Ae9_Ll^n#0U(6l~q>~vPbjIC*;?WD;@$X?dg*`Y +AI@#g7sB~0`z4jnb0zkZv_3x1TnysVowTN6#4-i5F9LDt8ygiDxWs#YlXW%pqD>#Fn)1r>rPT~r+5Sf +YzsP1JQrzvVApy?*!nE1;12i&9i(bJiu?7Q5_8lr3iMq +M+e|JG{l5w;D{F?*R!UI51lax3gCZEjjG3hTV&O9E~gBCTf(}3>0z!O6WRP*OvfonZLYQy$tm%A +}hg1CS_1EUBdv6)1L|6z^PYKW{}{!+<(>SvCsJ8a&=C`9>J!UyPHdflcc4l12i_;bQ+{gHl0Rfu#tgz +5SnY{|BRU?F{sc;v#h8PW7S$CJ5iwCMG=`<2^$&NUKLVTF$_M&9~Z<^nD20DFt(189b94RhHzP4x#iM +*CPh6loKm$*{Ii`Ygq3!Ps2ZY0kc!JSMf#!qS78RYT0jbkkSbDc6~}6t+S%IS_GJ0EO&J1D8~8q&-^6 +n-8Y-qn0IAni{;EOB(hMDlK-nDHl%L&})y2I0u&?U}H*QC{HquNgXb3%qJXZ +bf;6Mqt3aCtEL8QNx0L<<= +rR2GE7JMT%+N!9qJP?0x^zm?L*mKM`O4j#v4Nazk&H8TQN0pKKG{1T{9EwugcMNxN1Jn10s~cmO5+aD +6p%9m0I>tHq|Lvfm+#PfveSWwl)GaPxU-{ueZn5X5i%*KCQPkfG^Pj&!?Pw4c8bHHIIlP=@x)M{9FDV +22kMvEF@|=JM{El9#+M#a$aEt(AU3xG+kBW}FkuL{K!8W<7ra&%?v5==0wnOCBu=^YUze0D0~`5#X?q +5(idHf92s!9LY1Wmx-UujlKeBg$*TK-|9aN#xgj`6X*l;mQ(QOgcN0W$%b+cv-lyBA4CUbGM_9|F!KG +8nmmAZhOC3LW&YPN0^CN~nvRlTqYWiX#6S^lfqO>JKiX;ZL~5=IwGH6_rpx*UmEMNMJb3pyT+nQ5Qf`P&w%W>Q~zApUvbi5eqdml4wxV9u*Z%Oz^gwmX23E*ZB+ua7P*{wEiK~@h{ZmJzTdOEWTE4SDmVp0x1SD_LHDUqnD7*nFMc8Z;5t9G!bhReh;cFQB65*Cp-r9Jt4^f +kzBHGW!>0wq0SgrB@3k78FkQMyl4z`l0lN*Yp^;n30d5N?omYfipMknav%bac2{Clfge?;YrwPE)HMH +(hb^p0oLUL^Ng|YI7MfmR5gx(vB0v!>bT1=`uJ`}pU1sG`fojh=zK~RV?Cd0aQ(1dB^Jk;Yj`?Q%|^D3cE+Bcj@E{$83#0ep3 +Qr@&25w+ns04%?eX^!`Z6aV_h~~0=B35w6PLWM;ghF+wt9AO_tn>PXSO`AH(Qw%z4tn9b_O4wM4>Rz;n_qW-*wUXg_O=cp(Yp!h3SgPPC7LyR(^KoFPVb6sIYyw!FM{2@F0 +n-SWCi&!n$DVH(l0n1)-O2)}-cX?Zp5_M*VG;$`!o(50IjJ7T=Z;B@{v03vzlA)e8HJ4olf$Q}3+n4{ +AefH?lAJEL6JtK%?)Y8mu=h^V{k*d2|5x;IwZSVb%+C2NV)%x8!h2nw&RfnVO79=RV(ny9P%h|HJskk +a`o;^jemirYeJ)vBl5P +=olp={xLF&&*~qB*5Pt*8LBW1(;3Qj!6osM0u|ICnf@Y%tyjYCD$K=7mUy#1r<~}Dsby8M9OI|Y`R?O +j{oRqYD9+9y+yP!fi^zB0#a2vEkvfxUZv^Fi};3$=|gAJ!`f~lY}yFo_@PINxO61RKc9~^x1`uVqCza +T=8Yl*$};SaZ;4u8nuzoQ5LbU4a6RSRJ2&7WSseUbeK{_*lJuU@}-@$Bi_7vlq+p$pwZecLIZ +|Hk3wYc?>gOEEJe1_HS#=9u!dLM0fpB4k%%?qOg2o>h~I&J@p8domnJDSQ4EZMarI5@bR&;+-2B7*{jtL<^EG94MarU5CUjngw@ZkCuf9q8S(>Gr7cB!!Z7{(~f)Xq<%+Vm9BVkDMPP~|D;7ysoEg +e$nG>=FS!E!ME1o04yGO8Jg@k+~F7D(5+{v8YAKbzGEvu?r~I0ZG>Wa=DAEGvUwa^`$2IZttqrL>S;J +HhtEYTadB}Q0IwgR(Ugw_o;(6+?eKQbIa(X2!+DU<&~jyn`EY6;eN7H5vuovYT(Kd@~1b}nG}suGCp} +@0*YGd6RgLJkFXx^IO8RH6s5AXtD(k?Z9UVvl=CfI_To!7HV3(z<2U +3IR9U}2VVxmyAWIMz6O`LhJ;x9zl}nA`+xoh0ZtEBL$xw=CX~!d1BdZ7;q7Hc(0v+pL%8fWZ(6_{+`1 +5NwoQ&XjSSm^vqeBh#tNw&z7*n2oUvf|+)f0j%bjlx2Gt7W<$*Noa0&mW?37|=8IF$bAEesVW-Lgtph +H#69d!TXIYt)w9R#;zk5%_{S=jtr-l!}2!_r`FF<|K@pl640Fsv5*j&2qx+ZzSIp;Q?niMMq!A#Ub%L*>84P}CADFx;1IOd +#pZ;+ay*o*?Fu^KfDVAiSEhBRKXyojxHtIGqN^cRJ;M+H-ip!Xw$)1)I}E9gCSPNrFX8VRm^4tI=^wj +;d5iiAm2MWH;NE(%yiWGN7y_vJA{C>d*!mC%HLHP{gn{BWE@G!-WWbk7jHTGgQtyu%4Nm9Gm7r5d9w8Dn5FHz4s;zHW%@F~go-3ZukS +5GQEL^U_*2id;FTI=nzY{4RywEuMtznmciM3Av58`ZZ3crcS1h7coD00q8f%CD9OSGDSz@~~hi+8`Vq +`xC*k|$vb%rJlj5BUjckdxyM6`qK3V#PFhSsR=>Fi${ZJ<&3DBRg5T2b-)rz8Y)^I4+MNgpGv>72uj$ +@QCtVfr!{U1EnVYEtZ8CmR@Q9|>`isbHlA;v~W7zQrHZuvhiAyvJ^v8>)4b7r6p970ZH#yUpV};eY%5 +{bdq0EyTy+-M)jPOM6Do&+R!763{*U-JEg&z`Ly708=)(nSU`^pos&M$!V~LAc-!xJnhKWQpbk|friH +IdbzAFcu+a~A*WPzn52O~KdbcOgBD5{|)9vY!YUE$$iFb=~8wOgI9#(}z!;DEwJAr>5j#u} +@I4IwEqmzxSh2qfP{U_!9|kp@<2J$qQg$`A&g7AvYkNx&*@*7a$#hbt=i_fCXTlcHNHp}_Vi!>GNH^gHnU_x7unG>j2%LWDC>g8`OhHT96bs^$b_}A +3rjvZ{oCZ5r~mWyo3Sfbk@(ugMxm-11sxAS}kDYwWN%0rcrTSLr3&3H<^FYz=r4>s? +$Z$#(;|0vJ#=9L>EKm=xwF1PX;(#iHM?2$eAy+3d>^|W$B72+Bqm;7m%H$3k{t=o|0vamr!Yv_2B{{B +H&KJ2R3y&6*NT8Ihgv597b*C3=`B}um-i%DmQS<)!L9V~08;sJkWTtRU4Go4zS;xn;|BHBo{M&8pi4w7m~y%#sImS +jX}TPA7^lseSgJ8pd|Bw;Yc^-?5eJ2gvv!GqtW-F{l(P~WmOag2mk)}k337k=VA$m3oArjqp@OREiUf +J%Snd9mA^Lb)n7b{rdmAW~!N@|dAY6Xz#US}RfMxT3$&Y{-2Z+g2`mpGv}JZyR +rZxh)6FWp;@g1WBnuwpIfNmytzMv#Od8CX>)IEUMEOo3yP|s>0;nEtGuj$cNs7jF!*w`riz#RtkRxKi +i}EOE&yjp#L(WsF#Zp2PH}cG_c8zhnIT|laSp_N?LjLw`NQ9jB*1v^Em(p5?WC_@tgvZI4UlzX7-Zvs +#UY?5_8vYTxkc6V8Q_rfrXW?vq$-(94?`d%WYv{*wtyyrBrXK%QbCI<_zkAk0X!Xir+Sv`s-*a2z^;dYWIz8B02{*4mtJED6k8=Z=DH!9`I(Ks3Ac@H*yC4k#V5R8O +jtso?p-}9jdTGOpQnUjDvc0nfhw{x#ZqX0NjdPITvc1qof%aZ3QA#MPXk^5wQBMp +M3qkS~oR$h29kFYf2AM&qddlkvBxW3&6N<$wG;OwQh_6Nbia(42`!E+0sRy$Z8LmUc~ocm?VF2!XHL^ +O0EF&8*;&=_oMXZq-o@#DWsIH(T%gHmhHr~mtSyAy2rX=^Odw7@;}`}$k$|6qUsWh74B)?AzpSk3DW? +tLR9R|t{f@d=#Qa$Y_z8KGgwO#Y-iRF!}g?t9d_8k>G_ReCc^^|(TVv@*UqCxw}CoyXh}XsI{vfkn=5 +0Z6+j2x(7@EC{EkyB+^^sx8DAUrlmeSSKP1bH_S +3+nOWkD%QK3O~ORoaT~3GMD>xr(b(?q>=*MSptY{xuO7{?4HjH=%V1_SsdQy663NgbrhM$*d!%)J>K3 +8f8sw%ZX{Cp9mIT&=_l1p!R{;*3H$r*CYt43cy4BNtSDp?xPgkinTRRy8 +j{M%|nbI>I`KDJD^`xAd8+pZ3-ywQdug`ct+NXD`_lY)crGVc_}J +{&;n|iM5`B1n7_T)hj*Xc~8v90})kJSno(TRCqW$v{m0BB4V6m-HV{}%{61G`QJt0lpwBu)hn#{br +vm=sNS$Xe6k3X^k%Bm}UOlp#Pe5nY{Tc>8kgmcaN-JM_Gbo~Dc=n|(;9X7!jues8fe(V-?`q&p*?oC< +@uxq?dNl54`!(;J9XtRRTCB}g-dd5X{}w2+>C}i%(_*TXn+pAxga1ShFf +;e3zV@^b>$Y7yHPi1^Tg2-ET!6U%QhE@+OX*qM?9U{ZL*5q5Kq`YmnLCkS908R{J)o6$Xo2*;!EiG2Fux4NfLiv +Ew5F4?Q2d#9C#&y(!TOJglRXqB2FUhIK--NXp`Z&}jkOC)%<Xg{P>KyLTv8kW#vG*=H4t~jgFx-!IM+o)0n56{e-_Js`du}?4im7>pccP>XRXPDGN +7?U0rkr^ha{(B8?cX=$7iXsiQ`9vQ>zKUEI6Z1nxiheMiEM_fcX}>4U +K{38g!qbp4f9T9lw&!A|pyaa(E;=Cu&s601PXzRb{}j(uFs$#T$c$@i&yS0$}7HF9;jCzz8L_XF4r%= +Vi!$@J+-@TW^T(u;!vDw^hSdX#|FA*ToYE(^ixM@}s$_G7O2HIzDW(orY +M;1)G|2E_T^>L9QRDT6Jv75yw~+c@0UdoNVmZcDAMkjUx66$i3U(ACdy^fywdn_Lb*X*t{-8abajy2% +o$UF_vXLbNQ}7-kbIg5w-5?g*p7>b@RhR;eC~xP8PbT$ICaYxGSZ_MDE%Ay7Y5fQye?O6*MfdLzv>bZ +7~PA!1vkP@@#Dt6j>Ysoh?*n`*NquTH9GvIB}%)R(XsKq+pU^_+6}#1&UwrHW}|Rd4|ePGs?%% +^;u@stYC15{w_A-1V(>kKnX0q0XJ3(fRO;7=AWT>N6Nede=S&De>PQ(vtSMqZ!Yut{(GjUb2P-|8=BL +eYmhRUI~|x%TjiE`LbR#R?i$Lody0qLTAG2!7i&Z=NOq&I!u6zd1hN+pwU1LjQ(mz(#)({?aXdu5_etRRFgw{-rT}s0fD-~wX%D_^9@$O&c3*2UvTpMXg +4JbVp1aMQZn|0t3!m(u3zYlff4{lVyF*yRQI_jXOs2P-{+o+mz!(5KXlT!OC6UW`1L+mti!#3Tr4&Bv +9aUK7hi>?-YuhGWE(U4&5L(WpFe%~lqt`P|MlX3#R(FJXFm+b=a|f9_`^JZKzVS6XX776=cB{kv#)^! +$Pzg9UOI2ZJR=c2iz9n!&-XfuD)9Km*{4)BwGlgB7W@2%!yeI9@usMjtbkqTG#3omroYj0sxXrmS2X; +-HSBTI`#*6o{0$NE#+x2JFXqk5`=;{LiGP&d$z%vGPgmig}d1bbiZpzhk +K#u|ZK`*~*p_=3<6F8p~ve--JhSg$xH`!fB83WDiKIbao!^*N^Rf|HY9p4T-~IOHOUhS#Mn={D)+O*g +C0lk~D<5xXtnx@>i}7u*07@JJ8?>6YF0RTrU2w*AW2lL&YcwqKH7ae=2LV^hP6(_>lPx$3*LDFo39Zg +!4j#72~*mYnPPNf`R* +-*7SQCn;t~Tlt#XPm+NMcinC{2_#@ap;_n +PP(J|ddjLx_M`_V~N~&usIc8cC&D2h$w02P#6zf>dyRlG>ee`ILc2qzRkXU_5Ag-Z@+o*>fMXy88FFzef|7PqDEa8jnVJ+vaIYPWj^yBQZmHE;9~BrXYP`r%> +a)|&(o5V$3>bHQL0yS=Mj0?)-KzO@>fB^>)zBfu4$Y&rt1mAf!*PYy%FB@73JPTJ}#IbImzV6JqrQBK +h?*EQ^li?j&cw}>B{wa2s}#AO`Nx562`VoykJN-o?&W%RAP-zY7AcE^)m6)4J~}ph@x3=+KlWZN|5m^N|3Q9?L#uVNH+^=t-HF42K2j)J%n$_GP#H|%Mvp&7*;7osidsXde1$6G+hRwNRulnELCTcFhXYEuw3v +^VZWaa_NnGrwm}9gwyE$#RG8x+T)H6G40hKlqZpYbQHU8OvqZs;PHrq-{@uUXP;d!o$FY9V1MV=n_&+ +1}O`2P9iyTm-5P(B?4Djs?P+#km-`$Nc+rBZ@wDm&i33G-w_y7@YZ?8K8uJf5_ei{ucvSvOSp$8kN)a +(+yjpG=^I92nrJ01_*bv`V;}(sNA6Cl0bf?l*a@^9TwKbIBg` +j;Vg`ytk;N3HpPCs|C0N$h1K*5LQ8xqr+&)KqQLl!I(aWry~uaBdLPc58(!o>;LLmWU~GXpX>gn8Xu1C+zivzo)(&ACF0#pqqA80Aesbdw~+)bSiB?93<(3M1d77z1d~*hu~(K4`FzCCQr^K +pDHeE$snaS1*wSz9B7u?U^ztfX6gw!RzQTZ;|6OA(yKi4f)bTMt#=$s${${o3v~_<{R5AWpz)|FGyZN +s*~9S&b5__w+S{eTlPHd(A<@)jFi|KnTd!H{OMcvj`~-<<#;kmJ7Uvb}$a070aT95#!=hq)G@O06a%z4==+`*nT5T +bZrC32hi$rxTDbY9_<@TS^IrA2;h_U14E9A|xOi5e2nsD*-^DCJq!WkN7wP7^GNvYCMc(aUIknH +l|_aiPd(4-f|ZpFs8bciNKVPvbRVUXMApg3^H65kc`7)m$wWR4g%G0|SBvED9A0Hq&G9Soo?>m@LYY-?>6lK(=ra^#+h=Ec}UkWzJHvZOL +Ua4Nj;+u!5@Rm7qZU;z|>)BF%J4Uq3y4X>$V5vvap?xHRHZJX`~Uj7n%#t982lY{&6u6Vo-<6WY9T9(Ea~=goD>S{Qe}H*p8$HPZ27Assl*zome5Lrl +x#8&9+_E$$A+R#(%}FvimLb_;c$6m?h2r~9qU-I7+-d1K@)bUz8p=^Vz=YF*Gf1Qr}_;;zvNgq@oF*jZq^lWj$B585=RLMvuV7_**i+w3#UO=U#&xXS|Bwql@W>lg`O +r>g6T?Z?FQJwij*ZG5@Hwb7|@Qdj<@BA=GvKYT9KHyKn;=vIA5@l^U4{GviKxvJ*Xg$P3gEznwmzaU1 +6-sdgO59DsQY4Wc(e7qNxy8z4=XQqE*!4&>wSUv75SeXha?GNZK+MiH<`;&-EwaAUsGUa4HuC0OA|ou +>U7Bs>p-B)J17@!>5e#NRUr*rHTF|(XB_22=2g>tss<_;oI=&g{b1hZ=1QY-O00;p4c~(q<0RR9p0ssIf0001RX>c!Jc4cm4Z* +nhiYiD0_Wpi(Ja${w4FK~G?F=KCSaA9;VaCucxO>e?5487-9c;Z4O)~@S@5P~C`Y{oGc3`DEw$`8j@6dlw=&Ry1T7f_0aITUKfpTn(OlTAt7v7vKWYSt(_32W72~Xee-5I%oRw)&<;r#j?)XR=OjIX=PmjOU+Yx}BBi-|xshlG*2U{|kQTwyerb4G4%?@z)$ix}=f>( +HXkwIoM-Z@T!CBb4T6Aec6~z`dc+e-3d5w)!LG27mhh;Jtq)RfPg0^N5=T7|*2OSWMsMx6OzCx1JgjD$A1 +ONa#G5`Q10001RX>c!Jc4cm4Z*nhiY+-a}Z*py9X>xNfUtei%X>?y-E^vA6no)1tHV}Z{^(zSV#RgOb +*xrmffSYt%u`MoI2g48qDlO4AF-a6iDyjedjv^^jmhCQSQ*(g)Lh*Du9?9=c@=0MB2Dg&tR8k_)igA< +?Nq9j^TCNeUs+^`+QdYhe6-nuerYNIa#OMpTN=z;;)>LllWt_6&qRO!ZGlkOXbS|xROml&7nFY +1LYZ3<`xIl}Fafx)3)1?(KVUNUC1S`%8RAIRR4Wo-bKv$oT+e-OtwjvR_Euk9(bk$Xy1PFePxrBU?q!gemtmQu_ED+8SdW9;E*9D%SlA)A65FThxVqDSIKeGhaumrQWS +4IJJl})RZBu0=Vk<+2&iX}-91Q}VOL=c(S1x;W@lQhRdjK=8oWizR}y`k>)WMGO+#B12q@?jLtZmvJh +-(M%!v&AeNqv;fd7a5i~R6BA=@#B2Hu!^t;k`$q~t9}K`>Kshno<75>HL!&Ly%{fs!RGsS-Mqib2% +rX&gJCro`NmdAuJ^ywZRhWqePE6(#=?pJvJs~%}Zk$cyg_R#p7t9R}*wqb52T`ZxK!n!5qJ7KA5?K{fKI@fQ@7^OH7g?}X%P?l-I?kyXL9+%P`Tv +8*&AeIA7-MDKpVuqpRp_ev98r;KxkAp@=_XvtU(XBsupwfOSO{7h5>FsNv} +x1+Jqy!;&RS+mo#_H_ThS=73FHrt6e7Htapx;>-0XRTeM#+vCp!u6m;OgVa+`A?kh7!0LH4r%mERb3B~s3q}mMYmz}7zhVyy3dIB~w +e_4sQ|Zgwr@sS}>4|NcJ2IW#DR+PS6Y5F3PTmLq0#Hi>1QY-O00;p4c~(c!Jc4cm4Z*nhiY+-a}Z*py9X>xNfUteuuX>MO%E^v9plwV83Fcih#^C>QQSqtsZ*FgnQd{c+M3L!4 +(7HIyEq{mP(eljAKC`#nc$H#%+q2dZmg-*b}sYHPR`U2d7P__o#%z!v|5@NW)sPv>uP+iv(x+G5Maz +coZHE6C(mP2_1Pu9p)vUBH{;acL7>Er&^Ir<~>HtwwN3wKsKZuXRw(uuy_3~;6V*+Pd2g*P?(0;9B^g~xauHdkhcs9{z +B7F;;njcTN-^`5Mw($(`|3izle*CX^FU5$jfxkCW{1q^5Xz#BccoWV@OjM13hi(XCP~k;jth+;u(Y{% +Kp~x3dO9KQH000080Q-4XQ|<{Z(mn(L0GbZ~03!eZ0B~t=FJE?LZe(wAFK}#ObY^dIZDeV3b1z|TWO8 +q5WG--d#aGXBqc#-2^H;nf7d&+#NoV%pNj#f6PN#?6WH#GFXS)Lm2wNMFs3fv+r+<8(guo`YiPO!tK7 +c^)_xC;V%*skg4MKUWSxMTi)Jl1|6eZ*}Pqh$*0=HAhI!;Ntq+TNsl8Uu^HwDqTkmV(l>f+~_=Xq&Cl +!6PMNx`z<$^K~K0seg7xA!Yi6ymD_y`-?HSw?tDA+b)DR8lxwYF(*G6p_YUs5D9M>0`Pid_luhlo5$e +Pu`sTbUIDq5Z;k{s-RXBL~e{)Ckd%4PD->^xnMF3#v~Cwi7s@K(*)3Aqx?XnVuBx_>?Eg2*yU&!Z!0M +(D)q`fWi&Sd$~YsM#Aqx~w8%&B;}n#ZO?jO9L{eQ#J^>>NC`u6*xdP2-23pvv8B=4R;Ua`2iHu-mUPW +i-%Cc#6R$;}+g4(>IoE20>XBSoV-sYLKNSI&a4oo~@jHRGFGq>2N##oTpWf;T`jyM-ZMrAM>gKsVSqk +SnWrs+4Ntd>M#(swJHuo{ChfD#2suaAsdDldq& +V?Y8d2QKidS22#2#gsFk1%4!w1WhKm&w=T2=Meri)RDEfGmDDoC7f>(xs9(A!7%N%i*vFOP^T|cXjb7 +D!FXU+$O?3doOl9<*&F`;h_o&#*XpG(bczFDbQM&%jn#^1Sr?}8(Q$Oy>JJ}j9sk#Xww*ATm#n#F)|laXi8*gC*^Kx`gEcLZzINa0P|in{?4u5a5UwO +p+uK7uP8yR>;}Fj`REB!Fw@7VuPs2S%V;ec`NDovIx#?W=Z(CAAjK*ot)ZFc6NGv>~%Ub!8LuQc!;rInc)fN$Y5liZt!Et?Yrjr;!cU8*7ODw3>qA81g4dS +xxMwEJTfTfgyHy}Gmcf@T|r!h3nA_qUo`c?$<|aGhkpzECYv-xl+Q6}GiO&O8tFHL4b1g#OWQxPA4X9 +S;-wt`yD}q?)&-KkHQ#3(2I|~|CDG~9(rwh2S(gn%vBXqW!F1ra{yrUl-cq=el-zf3O(*t^O2UwE*SB +*ig$(=|;ih|SxptALshdm9vA>DwF#c~JV0$}ZeYQT^4oC0{lD<8z82<11$}sj#w)Z;b|D*k!KQJk{$! +oVIJaaZ=HaOJ#M(yaE`J-VEDZ2jIFcV(>`e8o%c>Uq``0{%8+q?PukGC&xr(Oi;+#md+xqp0)BRyTDN +*t4-h-0+!sR7=B>W{t8-ak-F0|XQR000O8`*~JVYCo`j`vd?0Iuif@9{>OVaA|NaUv_0~WN&gWaBN|8 +W^ZzBWNC79FJW+LE^v9RSMP7zHW2;pzv7U7u?JUfv7zgPG+5eVz<^>4&X;lJSClG$S{P<~(b7M72Y{_k|Qje*a%?q(^aaTC?3%0 +3*+_b;{U0I7p2PcD4Dbpn%{C>AK`K~lCX;*u_&IR)7h$<(#e ++SG!m}rnNm4Ll;HqFYQ@Z>tw831a_Dt{X!qZi)`M_SXD_@^0-st7Q@}a2lz`#z5`=5s;gr!6rtuG17{)8+do)g_}$t5?x5z6f@sA`)Gvm$ +QU$KM^ZMnoF07z?eGH&beHSJyU+X%o22F>$(&v-r%yM8L`F3B>CYp4}xMG@>y;@&6hgF!Zq64s2trqC +#`_N7r2Mn`)SSO8xh1ouAAdv%h^L=P1mIH>_05;T#N+t@~qOR=-Ud3>ob8r)t(eH&w7+rC+x7Q2ccl+ +_dP{Z>qju8!EEB;Fb7LHigmfCEs(#Exd&4t+s4%gU-2`h?b4#EPi(ot$FX1lrE8AGuUsR +kDd|Ed~F)}WnW+pSiv;8rUFAr-bRIG%q*vv8l7br>ClUP`zx +rHtBs2VN8sev}u;HvxG7XeZYXPdrZ97;QparYYKrj&4~YY9T8oPr{QqKV+ojE+y|KEPJhMd}RC=}dc9 +tMih5Q~Dx0$LhrI)v5qxauu|%ylcZX!S0Xx+4G +L)1fgR*v89?v_N7G~X!$dN7~E7*pT2%PB_L;VCC=8?j8R@C&!>>riB$LMQG?Z0F=2|Y7)PfhrV9>Ou8 +3C-a31%3Aq7N@5{G9<{9fVXesyIHqRZx#a|?Kk$DBhO$u#Laea?IG=BV`uS^g93K;;5P8hDsn#ZO$q7 +wzPZB`{RuO#%kNnJ71y@$vj=Zlt#Z^9OS=Ch-oFdFFAv^c>;uQ}pl_|y-XESA+@+o3sK~JQU`EJzlkkMmzR)&=_}Z=;?G0c+jJ4cI@s^HbY+;% +P084i30T&bX=lmkb1cp +1q(6Z^b*LD(Spgcm6U=wi8^*s;Um{n3J140Kuu0#cdN(QVQTyko1p{hAk`tjo|2!fPTtzkjaFRRhs+w +mj-`w7F)Kl`_kF@>oSilGKO0H#E!+yo#bDr#6=fZk|>6@e$gx%j0$rf673>lDG$N*<-;2$@Km3TtD_M +D6=Ll*ULsiJ}bG$la7yfrXM(R1s${imFXSRa&w&Mmy!v6XUp`H7(GMMKfW$Nz+j7->f{Rr4ogrRb^Rz +vV<`5+P}?TMg2QMN>lM^5))5wL4R81jYbf;7nWFlHLVaHWap8!NIT!jo~5KiP7|PY=4VURsI(IpdLHrEXph8Y;)#kr~O0ZBn1N&Z +C7T>vgUmU`P^)kwFxqPtFAbk{LWl78{HPumO}8xmV6)|q?6t|Yd0#9h@$Xdq(uvD0%Lc7KEjgo)c@m%89$$w3~H{d|>h +YYwn=r@y|3z()Q4i)IIm&H4CCAUhpZFVA4uUOk-eyC!PJ*il`6Ps#Cb`Hy<>UK~kX>u`i-C5*ip*)M? +R*|??=K|^fef7|@wZ{)rJ@4TM1s@6aWAK2mt$eR#V_P9{#%q008+K001BW003}la4%nWWo~3|axZXfVRUA1a&2 +U3a&s?rZfSTfaCyyH+iu%95PkPo5K4f`fFtd`dfQ;rBy9t1;vz|b1-ypDSd`6;ED9u@3ySvJcZSrBzN +B*21)7J%7H5WYIdjBe_@WR}6QO$Cep1h>mrAi9Q<0~9R#2&!B<13%dG^^nvr+}s^NinB0-xclUC_@3& +u7*1QK7lWY1Xrg0WEl~l2M%sxj5reoxDHo^>~U-1V#BgP?}1u9=V?TUdHp~lh+>-azF}6XA3$cxgd9v +=F>SmgU_NM(>a^o4~WRKXQBluGDa06dd|=*W|tuV0zbwbp($9Tr9K1ZhpteQZf8O{<5C;dcA2zl_Fnq{^YO3-nW)L&oh5VxseKu>VP~ll8P +)7j~Iy&i2pwONZvzi376!iU{msTu63b?VW{96Px+K$-c^uF#uBFPwI~81XW^YyIzln$%Mp0Qln&;4ks +ZfTKyD#xxIidwt<1jSfl0{|tS{)XsTPtmMX*GKE@R4?VNY}cwNM07^hl_*C4mIfW +ro7plBoggBl4NziCxXvbDB=KI*n_DR~?RHH^%MKMN@eCiQa-Xvm6;5~^tg#(c%H)L>g_*{bb!o<1a<0~LvwKeH*^?Q25k-q3uXa{gTf&|IXXMJJ&8 +VzF3&e9Y;??I^&K>DPy!=>UiCf4m^T2GeysxZk_&A#fm$Rl{C*R(YtzWEr-J4QM(2BOSS_PAKLj%wMB +qEi6Z{il3=ybDWf(r1>~AZJ;+p;cvT)O3;9o-So=sU4@geHh;*fCF~HDOH%!M}prPBxNT+u5 ++JJx1-?&{nG>(^}!KBzro#`f%}aZ#3I7w_l>QQT-f_-AhsS&9hBzfIxmJo@II(J|!CwwhMQbP(ila4| +%o>z7l(072EFoxUJtQj2Am23zfQdJIZ!w_V1xh`pN01^Zj*uZEerZjzR6c*G)lSeAGJ^#3=1{&_#`|9 +DH+oa=X8xG}eB~Q5OUIIi<QNhk}4bq|}^n{Zishyl#iL^K6z& +>o4ZGK083EVC(h7;@Zn|o0u+f{#83q36)|uV4qduTM+5^0TD(3$jEvKydI?@OAtur-8DM>a(RArdxKo +<0@Sqv?0+S4=4NnpqmAciX9v>;733XTB@P^u?rvLl+|VF(g1i#uttvVeUM#1yw@14cvsCL+$`E8jd=e +h|JRwKRepjBl{&IDDae0n8-3L*%%)Nfxse}1iUCVvj^77up99|DSrYfJE0R@6~2XK3Sa!-T-8R1E%^v +fK0fN0nPiu1s7j5}`5i_Osv${5GDa>?Sjom(e7V=O{r5mm<1h^J9)%(xvmR|=gD#a%-#Ps1xgSK#|K0 +&mXw?V+}d{-9~BX3}+&QL+A(+4X>2tek5xtbxgpO-J?I2FH@XWxcww-!-4t$LaBJYm+Lv>DMZF8rKZXaB`Y!sqWVG5Jb7zj0j?7qtzbZ7OJYxa5VT@E4(W^JlkNlp8HzL)KcpC#J@1xpMSXI3 +7vW3ajcc{5Q?*}VGHqeUeSxGWbtcJv4XjlHmP5SMd4D+9lcg{aO{1(%j>uzYIe2XbOhCm`2U91A*BuP +k0?-}4{iWw(!MiX;-5zcP#7GWxXqanKsm?U|=LWw97zy?W#oSD!3)Eh&dC;#MM?Z##i39{ujWCDtA=+ +@kKppmf$YTm^4vqTfVk9(`^?x>By-lU}MH{P3u)ep!g;M@#{QW$&r1E4~{E6YH4-6E7mG6-|ZeDAP4& +2D`0di@s;O^(;SD56;wMR+%4;f$#92E9q|KTt~p1QY-O00;p4c~(<{`37n|0000`0000Z0001RX>c!J +c4cm4Z*nhiY+-a}Z*py9X>xNfc4cyNX>V>WaCuWwQc?&@Eh^5;&r`_EOUp0HO)LSim6VjYxZ>l>AX4% +13bqPLMtUZC21-bxAPrzC4I>=|6CDKuO)daXO9KQH000080Q-4XQ-&KjFir;m01z1f03!eZ0B~t=FJE +?LZe(wAFK}#ObY^dIZDeV3b1!#kZe(wFb1rasy;*y2+cpsY-=BhTH%u-(HF4Tu^_Fa@ldi>_$KrI|5C +<|NQ#Kb_)JQ6cSM0m*j-+JCZ*RqdppnFT-|vn`mQPY4H3{`JWva&Qn^3h#iV2CbB-BF0inxVXWfTU`84G@(Pd0^B;@3TOLhFFQ>)d&m?}j+@?0Jk|{NkE +s+XlX`02ASD<|8DJsJKJYMrs+~8Z{K%MzwGyq)AR&H^!r^A(zxIMq6n{j#xxBE#7l%GE(Q%E9buT){Gtxp-O7$2d3FYIHpFnc(!5c9hJn|%nL_B2DGa4H+Yix+ +EwgAj#$uLN%)XGEdMy*I*brI>CMrRxI*CfxI#9<(KpmE09MTfY7^;@v)TqJBU-yn`o6fED|7TVK1@GVKB$av1#~cw&$M8Mf?=Rn@JyW?NMEs-jk7Dxs|JrlzEot!XH{PP^Z~lwt(BZN)7wv~pE#S +qiS6Iu~bW7w1Jm?OGcv+8oqb#7A3(!V<6Ta0>Svs>qb#;^28q;%4{IG6 +ptFMQ;(o}EAN|6jh`@aL-5XE8x$`_#nEdRz7dFNDhnfxkz-IkY|8DX6LLieZV=ZBD6B{Et`3kh0+PQsh6@>zr~OhfX!Q_^W0fTKFzXL +o%GwJonaF`EO4S)NPs!~Q8c}y!d!;Fga=?wdla_C^c;o$@pIE-6(x)2%@%K8c;9PxJQ6~Ja0RKSd~@R=bd&sN16*h)6yfX?a8u*HJUnSB +d{>oK?jzm!BYj_+uAPc#e13I7ug0#uVbrnFDqe>E{sRheWMg-qe8FTZohMS?B~A3@qEgIPS$%-l~HwV +{yMegNm{5zPTg&}UNbpHF`eIv=jCPS39cEaN7T^`40IBaG1fv-|?9@2<)E +oeVOX=wIzr*gt(rVKUDX!*T&kX8%6OV}1adKigjIXq2bKkYTqIp^jxasttSL;TR*>yEK<%+zAbGJ<&+Hflx2d^Em;= +MWB-u35n%O{SiZLoaNQBhq^H%JjDo$7obBO9Z^NwhyNh?mPsC6NWB=gFUnl{W}NiK6=3En*)(?snsM# +Ms@PGiNxhvxuyzMS5867!~0-v6f>oh->u)63$rGc(rr5r0EA|F!b>2u3Rl*vA%tCI#!+ctGvvH|xwmh +Jn5U4Xn!Gn;2H2alRi-{GqjD*?hAZFXAWqd~h-&eF65fP9DgGBbG?$6q@?Zkwf&hXUU@N?_-N-dn*f4 +Hu{{T=+0|XQR000O8`*~JV65G%(0tWy9t`qFa%FRKFJE72ZfSI1Uo +LQY)mLqAn@AA;?q4xVR2iqPFR66*;neg>9g-k9CI_Tdb(Ii-wY?V%K6ahh|Nfp`UJTf7b03dLF)TCBy +zI=g!zqok)i&qzg(M>y(EIa?_jJRue9kjLUl`tmPh8N4=i>I$d>Qg&6lKegz0=+)-Lrhjh2U9AGNZL% +Ly7=6q-7TK8GgewrkD$v^T)MhBo_b^*-XBKIip#YLtqP>)jD5gg3$|?3&N`U&DN4;j1e>zEN72fn&)9 +ESv;gwo;~xJ#lQGi;Y>) +0;=Zk%1UD1i@;rWEj>6I2TAN*U#r7PPTPfYvHBXcq#Xu0Opw=EA)Uv2-ETtd{j~0n!e}2s*BjXhl#IZxOSa8nmC?vn;tw1 +CQRQ{%E%ua_J+{2;GV0zHmAy=v2Qz5B@e^CYbr0M*3HDev8H27sXAKTcU%ZQc%{OSOxO05P3OTclH_P +mpiHd-Qzu^K0-k6eEEh?*Gd1pYdm~1@-Yn0S6a=%iT<0tZh%Z-JE>XMBT-A)KIi5t%>yFJDEBC&jAR)=)ymEYEu~-~QesT>5k!k|z_rB=i;3|@E|XD?X4IH&45B@gaG`VM`b&dG#-;at&!lGUowf<;e(lv`-} +IWn#m7a)ZoTIT{3QZDQDn9Z=a%B3JM1WRThC?*6TFZ=x=ot-^_kLIHEQ+o!X5v;KdfX>^?LWa2vq`;d +xi^iZW6F$%P6$7jW>y;{tLcImok^QN_W(9)0Eb7fzhMRS8k~Yz1t~9?fVDnPz9#0z1puFe0Pw(KGM +ZtzttM-C)Uemb`boJ^0muZmnGpschkCCzrv}rlhHNwW09&|i;YJr*@6Ci4gXXOs6x{)-JBN!AG)NupE +*oJaSS)(SZyrE=?Eij4kBRBJX;GqV)#uP$3S%{v-B1xG5*fT=(6*>!iBbD419cK^IF8Ne-98-|9jr2x +7zgUxU^m#&62fP7>zzuvjSF*kmPGNq44QP=3hg(JET|9?&0JeKKbfcOaD8u))QWJl~lG%8W*9CyAEVG +|ER5OA4ugeXv*@lt1%B&*HWksJ$Zv~D-45aMqwpP{lZp%1W-jJQmT5a?Op1KMkn+}JJNPL;6|_;EfL!hkjCdJfR$8mErge +ns4_hVE-Uc<6ZPYx*<&kb|L2mYBwwxvLfpx8`bKS@zOS+iN*#X>w<-K8LcPcla8ui(N*fb_=RAC^uD^ +}dWT)Fhv1uy%5P=7w$=h-~RP-s-&5v9g~G5$=Av4p{k5>NXFb_^sxdCx +HvyQKA7l<5$b;*b!2!H4^I(x`Us#_UzIt7mx%W$P_;=%cw49NvO7GL +cFwzompnBthRt65rG_~gOP#(W(LmRzeRHw&1*z< +v3ytDb0|#$VT}k>rI_?19@1~y`=Kn`l{{m1;0|XQR000O8`*~JV?nCll#smNWehUBq8vpFa%FRKFJfVGE^v9ZRY8y2L=?XJS3GsKO0sf7yIfF3E4+!5wUpSwcDAajRpgDw$$(><8G +Cml^}qqa777TET5&8raOB95|FXY?H#2segcKGbBJIA+%=^Cg&71dL4xoM1hFKcYWd0C}JZgU+b~Nn(x +@opzbiT-;Icvf3{RhV|ASs*El*1Xpli*Xz;loSy^`rSRpmArGE+1$7l6CMrbP}BA%KVlVdP>3a~32y33bR=dPze +PB43c>KLWu;dP$IIw!Ti1=5$7+02wu_rB+8-Mgj&jfgp|rk`msL*YZzI@SMK?#BfcpJQ%yqnbk9UaL@ +2?eGd$~C!LImf9kl9(83@!9- +KZ>j7+zCiW|m>HMIPvGI-zeZPW8QNCCD3=9y{x;GGJZ4P7TD3@zhiXhPp{k;$;1f;Tq1mNC>(v}<;K9 +T}=`i0C@DXMQ|EHuQm>F){{1hAW}vQrzm)@I42kx_CElGW5kA`mQsAq2meJF!4+bVfcmsWByRErz6fp +d9F}x*g{a(w;WseV_@GkgbLdn46T7_cTE9xq`&XD=s598fDVRhc_OAW@l}!>Ns27CsW@fgMJ`Z@)L^= +pgpnb6``ZuE(X@!AOPEfhA}<)3PJu47l;uz)6x)VOW115d#9Y(L1HR%Vs8jilSvqHg^KyHZ#wp{~pak5NrPtynig0yoe%tjqAo?lO`d#ZiVk1HkSd~hIF_H*fe9Lbb{ygZVi17YL +_gtd^L?Imbvg%o7M6_Eu}zQ+i5~Hxf7BIiYyFr(&QwLN}UyygwvQLbE%moxpe8MOB{h*WYq=NIHh9^+ +kmvUIkh!pi3Gu%RNmF{P%hVAcy08MS5QLa<&L&Vb%^GV4?Ffo#A~ZJ| +oljDlG@q5ab%m+lP8ZU36=&m6k?L!@-H$pyudkp|$*@Y}q$z^8*0t7M1USx0WGy>94_MB{Z&b5!MU%!xXJm_j6OPo)0#l?zfs$XA_NJlUi^QDlLr4JneX +q=S%6zNLOJ%-M=4)kMC?kmfp<|PE7%XPhB5J3#r>VDFbElhY%BYY@6wO~_Tl)+40PJFUK^UYFNZbsci +f<>Oc!Jc4cm4Z*nhia&KpHWpi^cV{dG4a&sqRJLxJl4EW8Pc>{hvhpXSNAY*e{6}QmH{OYTEVi@NzVD*aAV +j-cESG_j4gjR&N2Iu@Ff+3vI-=FMvyL6saIWCVyzsnNi~N# +6_V4mkp$!d$pp*gYr+ZSj3Z!$JaxlsCJ4Mzxd42suB?%e69SmAAe^KtD0osyGVemo*$bVMIr1eEe+VQ +gdm%`aZRJ!<(v0W^bk%y->Sn2~Ny33vkd&p$q(t`vY$_bp5f;bEl7V$&{KC +mBL&yAmT@sS(*P89W!0{j4+C&!N=nkbsRz8)O#T>HUuU=)PNWc$w$Jvsx|_PW?~=nUd6GHfEu7zBRg{ +5eB5#K6#=+GEv5s8iRsO4Y=UqX4Uhs4bd#vC=RKgDH4Hq}qmAi!f|M;E_`R~xnsv4I4U*J_&5j=IE&T^U9dwpQZ<8F+zu(wq{!ksEvFv5ngw>EdvHP=!qnEhqr(@ +`GmMY@F&`PR+%A};3ikfOpcu6bL^3&?)Hs~MnR-{NIebK;-RT)Xjw$ +Y3;AuzO1&z$7=$(M|GL>Kbn-e(nV-gFZPxhjc{ty|443XUEA_}kETG{>CVZBc!zHc~sK+r4gdW>0OkY +TiK~=zPA0%Qdb?QPW!|FD%R2rjQcZsGyaQ3HFYwU1XM)-pSYS?Ov6_-~P?b$vWoeuXi_h7jqLXRIaYD +S3r=%OrB8m9_KA1wM2jDm~QogW1qJJg0l;8rkIdrt3EwcpZ-_%U*4%tKUAN-Q=k63`Y${6$o~I@r+dQ +nhp}T(7A~X`uNQivE~)I8m!@@CNoOip`>`J`9+}f898(Kjk4eb=F&&rlp(NekRuaAz23c(QyFRn_m0WaX@QfmeD%cam?D?EJK;wsYV)QXlvIyj@ekEWhh5Hj?rFe8 +QLI^BR1ZN(~9(q-5V5o==-GB&{~7F4DGKcL9P2*Mr*z&VQX);jIA}Fgzn5+jSnsRbc5R2*Qox-us-58 +W`7d7Jq>W+o5SEFcz0YNx;-sUW4EWtFHlPZ1QY-O00;p4c~(0{{R`1^@sb0001RX>c!Jc4cm +4Z*nhia&KpHWpi^cV{dhCbY*fbaCyB{O^@3)5WVYH46-O}2U?@aDF~XPT$#2B$dW6{8w5dMXf4WSBa; +F}?RJm-N&@5%6ljzGmtT@0Wv`nSC~_#OgGU^`_vX!5e?}-Xve;-d`^L<)BGvPC@>DoEWKnCI)QtH6eSiki{_Xh7c6G^Ghc +kl@`Q3eMhQq#pqDhsfzO@HUwmCqh#9$vDNNH0l}Pdo_>xA9#37o_Xq1PjaC}2XlqQ^hzd|*{z=SNw%- +P61^{{kZ%}LHvteRnOd==-ehiR5BAWpfn4J%Hu1j&gbMy%H$ +_l-6dIwkSgh;=QkFh$+=xbbnDsY)u`3SnvV)`+$Zf?!h@ZHou1!;jSrkC4&h0PrbA1zl4XRt#HFSBI> +7_Q)=_0-k`|7$28k`Q;s|mdZf}gYgeqs^RkkECf7bUU4i{DSjNi7~N5P_Qs%xS`8h4^ts7W->Biy|Nm +yw2)s%ZUPxbPmD^(T^6xgAUD1jb3k?S_2x0K?{ZD=Pxevee;nzO=)`wSpc-@CL1FZ4yEvvgSwNSnLK6 +5fIadVH29--&(AjF%+9?%EZaQ~<^8vSPjJ=u9KUwqjtmr@Mn7>MjES0JQ}G03QGV0B~t=FJE?LZe(wAFK}{iXL4n8b1!pnX>M+1axQRrjZ@2x ++cp&4>nkoY2y7P`x6LXDnxY(;wh73RE6NiDlYybJD4VS;3ZyiX0s0L=AB!xD)*sMKA3)Qz|B^51C1ra +i-K1LZh~zovo_j5y!0AV)uu{3K)=!{qiqpsT#Pd!dQ1z{r>rDgw)c_uS^64X(2&LCj88{bslYK1>e0J +TvezD$WvK+3|_H*w9)pMb@(io{KXcV+Y_*kXB^RD+fTtE!+dv@%pkgDmxVnY4&Zmo>Nu$gb42K%>>Mok}%wC0qbkwZ4mbxTE +g@jH>f{GYLXm@8F1>s`EqKVV7**s)e!#I +g&5XRibh6Sfsf~3TXaef$>`>3NBFR`gfWCH~$izCa&!f8Tmiil1^Hla~Ktu%K0G)|DX;Cq1&Bw^gvj2 +CG)q}Z9FOGGOyV-o1cxvq&UgI&4>9z-LaQw-mqpvOS}d0!x3$s@w3WoajaZhl5jrbP#~U85S +yjjiuRPCNm6)$*0t%F~Cmq(kKQq}+P`L0ub-@&&X{BX}F#Bd ++>dG)7LzIxNaUmd)CZ};Y&>s-DR<%ex|e>>@}>vs1`2R}Oa=^qC_cd+X!@7`jOe*sWS0|XQR000O8`* +~JVxf(FQYzF`U`4a#DAOHXWaA|NaUv_0~WN&gWa%FLKWpi|MFJE72ZfSI1UoLQYwODO$+%^*au3s@#K +CJd2%ieX{D;BYVTaIz9PGn{!iultOS{&qx# +EJeMTQETpwzOyS)^o)q|+nQ*uPfarbvbmKwYHxRc>O$59l=adgFhZMim +@UfG(OL8lrbR(NT-;Er*@D +la2&$Z)pOaWMQW;YIgs`mWtY6C(+$5u=F^!%bA3r=iWKDNYCe>mz?m04Tm}zwm2)SLHo}7fe`N(P3=} +(Q43&mC|Xhs#Q7cCSTS@l&`$Qq^?%Xgz%9z|J}5sZ2N?)qk>!GDG8VOdeSCoR}uR8x|v{7rp6-FO-tXi +QS>=&n@{K_IU9Lv9fA#H*--5vrfGAfj-?8;1&)WHFihth`^CME17O^Rx-+5XuurJH^BFNU!Bp1QOWN| +ABmpPPh5$+bs$0%*CSw4BjBqF4%orB5GLy)6!g~;o+?&cr#+9Xt2F}9B81z+zi<-poP3*2TnLFfs(8H +%#F);`XgUkQvu6@(?CmF`6WHW6cxmD754T>p1+_bE#eR`0B_tyIh23Jg515r!%U{`yUVS&2Ji%v^L$@ +lU;+Kch)Don(`go_CMm4sWCrWeuNfty-a$b9!JIQXpdsfqjR03=DC%>uwvs4;#EgKJ +cs$v(u0Nf%yy3a<=RS66`S0qi^tV($ji8lGBusiKb(VNpe5~Y*6w|M|9#&;+03>aD06U7>7Ck& +$#T|u5}HI2<$sOh|JU*{UkD{+sGip_i_{yn$tx{#Yy~c*;37s22c}hr8=OLRMcnGkTv45ON6=4glgRw ++ZQy;buxU}NpLWFunAo!*=hE5x7DZfF83Y~0eCB+Ext_xJkx_jgXxd{7HVtqqH|v?bvKX>Zo@mqwykkUvK@j0|FiGM2VAtHD<$tr+o +}sjHt4b99@EVy_DX&ghuip{%}oy+^Ym@KK<~c-Kt>X;*}USRyo_*L2(&rFW!h`IzI+qx0UMkZ!Agk5x +`cXRn&=VmlpPnCK?|ml*43ydbzK0vM_Xsl9eBbs^f?Ai;mr~qXC)VyJQ~H(TA}Q>4V=}^Slf;c-@g@T +y&ljqK)2w1UR=mv$WYJ;L1KHgoz4vb%~j2+tTndJbbc5bxZ5|E-@m)P4slw`erY$c4Vt(lhF}VE^$g& +2eUB6Qi2Ct(KNooppf}7Xd+nnAfTnK~2g+gsW5%ci+bPAbUtH(7m^h_Z(2I{Z?0b!D@JKsYDKQVKG;0 +ZG3JTdzzmkdi7hV{Pr_4Qj;`=Ih8@{s`+8;XMEj_j<9_geHq_1Ac7gvTy8}J52&j!gRB=&+xlU~XeDR +_=(5NJLNUS@mqNsr_H2(mwV^qEM5q~dp?f(Iodu|U9c43~!j*$p^Dbb7#yFcr6nB+pB(3njYq-2&8d4 +?W*glIE?bN=MIHOp?=f{iGhDl0GOta`^q+RGb8ho{Q#wpxDoOJi+#b~be@H+i_O4sfokZpe3=t;YmM@Q2 +n8YJ(&T}tT&bCIVGIP)h>@6aWAK2 +mt$eR#VF+@nr@9006lG001KZ003}la4%nWWo~3|axZdaadl;LbaO9XUv_13b7^mGUtcb8d1a4JO9L?w +#qawm26~8>O=E;s1VQmq@KU7S3cE2oZ9;dGHGjlPKfFoPTBL->%)I$Ak4%8p^dg}D=bBa%INSgn>Lhx +A<4b*;wyDiE5hT5~&T46?Maj;!s+uO~&|}lUBM^t55qd5s +eS=aO9KQH000080Q-4XQ;4ZKyA%Qd07wJ?04D$d0B~t=FJE?LZe(wAFLGsZb!BsOb1z?MZggdGZeeU+ +b#!TLb1rasWm3Uz+b|5h>nn)t&}2w_=xH#}!?1Nj4+Dy=JG+Wa*V=5!qo}67?Au34w$o-h#1ZxQNWRB ++aCm=!+BL>Ll@Pc+e25XHHk*wi{1ec#FDhdh$?CoeYpdKU>Dk!IGwnfslu`}0z^<~I%`?UaQDK`udqA6Ixw+E5Hs)$qDv%>}z6#ochKvMv{Dn2|f$&LF) +1&v`gm)S-#yF73pyl64=+Ux{!U!UwXe`!JR?}3#LuaI%k6L^9 +_~X;v9R!=2V%LkZQi4v#W3fz=zNQtOjPQANqmq06iy&4b%ztlf% +yOZ8t~8vS)%f@YB;a`rS>6LFRFk-Xc6+1#^-pHUWSFcxFKGk!JH%GSxgvKB>V4eL&mt|iA8xo9~`V2C +NOu$Pxa>?9BC-vxXNp5cfKV4X1fX&uA;#GP!#H9Sh{WA>(`XnqMt=lVBhiMyB@6aWAK2mt$eR#TigE<}tJ001mh001BW0 +03}la4%nWWo~3|axZdaadl;LbaO9ZWMOc0WpZ;aaCz-KYjfK;lHc_!aP|jDb22x{eAq43C{>Q*xpA#y +=WJ)UYO^T@5+Ms~iq!I9MKd+`+poLvAV7kOoMi55=T23LB@$>f`rVBtkJ-t0Cv1@?GP|F$x>}z639k$ +WM@L74Lj1E9WmQHz;hRbn<>0^CpTXd6B}=x>lR6auC#$&3N>;4|s|uc#o4lx)nGTnE#cniIR+j=UG?nx3qfMTtYo +76YQ7}E{EnIq|E=|~`$Up63oF2oJemI4Iy=0{@Kz_QrdwZj=_0Os+nVK0JUX)`0BJS`zxfXd1#4F9$T +V5|dvlgIP6*~js27mNV5T6!eLnJm6&eFUT3DW1hDDvV-Qx(HBs!yJd%LZ@r<7ta4`G4}n%Y4D{!e4k=>)C301cpSUodxvGMZN~ +zH#Y%1snmqcIarda028JMqAFM*qu1v@p1!-hi_cEuSMRP~U!KQrPw#%3F!2dY)S`-imYa=8Vl*q|WWW +NSdr`$AQ&v*hiWSfuEE?Jmv4QQz8E-Fi-{6RJY%^vmTxXR;yaLua#V@54Sn6&hI;tJfvN>F&S^l9{A!W#9Qu +#4=Gr!u)kvT^&9M!&nc+yhXLgh7TpNI0{B7-T^%6pevwg8{5KC1AbciB7AK^9Wr@qZ`*}f4(Jbw5J#- +VzCRlPn%G1fqC80qwjce57P17cMn_qHlErI6)yzIlsHPIKPF9&%BZG-Nl>p>vwl><0=O?JQyreUY6_?h}f +xe+@pN{50C-93Gl{u;NI~*yR$xC4<%P^$P&jglT{p#K&Y1v31B+_)LDSUemRcpgmD7|gghYt6Q<)47+ +n>DuV=LF39FPi&Jg_xdlZFS?q+vIEm~5v5QQ0p>IEdGUk+k`{Vgn4g47DIEh5pe3R47#P=f0M)WsMkb +7NpZOko~h8&szZNi`*kPCvGx{?NMc@*|rI6a&~Zz-)n3o1U^!PCCoeG5hOEK%`Y*5T))?;HB55Xe7%AAjd_=_S%>=y(XUjC_z$kPsY+8ur^y5f}bY^* +g(?u^+F`dbMUsp?HCoIO;#jcB$&>)hQqir*!GU +ZwdACAC@=$K5GlUTB@|NUFE+x1&p?9vFQecU74g8r47(&6U2R4VRXQymlX9LQH&bwsAd!i7_ +(s7O7<9Hx1i&~$_CS`fG5G^4H)4U?0SbzB86CKewr3bq8hhrL9^a_VYnfIjz%CqZY#Ql;@fHg2w~ERr +>GvWN1y4^DYhm4D$rpm=*h~k)lakylkc@Jqg^G9?*D8fSZgGv0%_)3Wdq9;!5_imOvrxn+0aJV2$}}Z +-by@QiSOgqjfNB9T5N_qzqFaR$`$2yJO;a#H>;$Pk0b1lB-=*HQkrmLK*h$cok<04!946*VLnGo$|sMLY6-&iNFhqR68Ltv9OeN ++X}rBZ(MZ~tfNeTrTqAj!oZJ4-jF04_+nvEkw9i(rg+kolz9r&oi?6NVdcu1VIPeoJ@kqR1o2%7QQCB +B-1f_tFAbuG{?45eLL*xW(dq&bN;81F15B|aat)3nl(X;MsU>7QbykgrtE$>e|L}()_|LJiNc1<3K@N +*Dj$x7aLkAEH9m39*@*cm%ZLMrBYULURf@(d2NHzS>6S++~8b51?ngP)6(%tc{n$B7wY9BDda@L7|9j +_smE?hR7u@>m52O2jQc@tEMGI}<^jQ*juCi1Iry(k|y4Kr~J94rcuFtA9h4q)gF@?zci`N +3{AvXA7+(7yz+-DKtZ~&WzSSLnD=<%^W7RP$0~lLfojm{={2jqEvU*z#F@g2|09GflKS=6$M4->=#s+ +DdyVvMT;1l +Q>y9<+ooXeOM>$LRdY(W)U1vnAiMF+}#FaO4@c?1c+>Ma?WT;p8>>WcFNTRSXL*&6NM-*?3#%jBCQHaA>@QO0oYW}$(!ncv5D?=wC5NM_QPIR_3~pkn +f>}$&jI!=LOlnZjt5?m4I)}(5S0}|_;DA6Qv4C(A7546z(O&1%FeN3#va6On->rR7WXwq;&fV(AV$(M +oRC6JGs|j6FkIEfO~7E_7Ac4-?U3$b&C*krkhwnCQXgQXL-yIVIx|;xN5B`FUd}=qGdoaATk1;xQxOM +}N>!+7X;`Dbo*j#UY$hVX>oko9gfvstY8sVv%5%25aW5Z1VhG0XKu>8OQ=7N%R6ape;JtJRmI8JMtAl +bRb)mI^mhGs+RAB+&ypn2j8;d$qn_~wDxhf^KU|0w4iHYx~8o}<4d{4hVI02r49Hsddrw)_K~id2VH +8e+1l)I7sw82;jyh2N&yiHerzBHT$YGBnQ0g_W8pK-LLbZ$NCMXYjg5lZu4VH!e^WDYG`Riej2xil=O +k}Zd&k8z^aR>$MdZ;(B>z&$DV^}6MyF0UIJ6G3N=fl9j1~U@p&#do@yj13V8X}M^u};ggg&^vh}D;ap~sL%a6t}Q%qqKCnxAp19epL)CAFlAzs +z(Hwi~VO$kqKNHBSxI_9i|KJwKh=&n$1{CKBmcS_h9I_c{$An464n3?Upa4X%%*aDNz`Qia_MSVt5$B +;%0(dAMdvo2%B4W#&X1)IThtwQk9b=Y=q&J>l=QMD6qPuNi19O{a)i^v=PAehNGFbX=6O`}#|nI<_2G +6zn>l~~)<(yC>T|+W`-8Dh(I{zV639#uLD)Y5 +!mt9V1Ce~tu_E43-W?sAK$mQkO(>PTb?3PBTj1 +g{N9qAG)WlO_xcW$hd%C@zKDk(ZnwBw^yURJ%~gx>=?I(iFfD_jS}z^*HNNysiR@?>kCVvHb?&jlBje +!BgFngaw|ODj_h(ZcS^?k4xuf~X!H*fq+KEfDFkj>a}MBlx$^d>ylE)C$EJ+twf$<+S8me1wq`Sba2| +(LQ|qI4nz|d(`c86vVxKF3^vD+wS1N&o_6ymL;lsiAut=o$6--jnW5>4b-!`C`4AJJKcao084xHVhY* +FS%d>78ZE6`FKy~sx-y|4;Aq^Sa659!a4n%r4Uo*jp&Xs(^jD-Kb?nnVK~+wyuM$7`KNX@Z4wAvou*_nR~!%OEI +1HPG6Vn^qB5bHB+x}jp2LW2rg7T8w>*v5-E?ElTZ$#2m1YrW2C%eN@AP-2C~d +_^jtDWjuPYcR{Mr@_|vke~g@a) +ITzDOOl+`K?eBJles>plkyYkfqiL#zzRe7*=t2t}5jFd@ktdM^MV=l3bCB($h)K;m>rVqF-Fu3}<3Pt +i+XxtK4Nnpq{06xF3c38+n4?|_wPY@a%w$R+h)-P1x|1+irtM0%A^HvAh96g`dVcSTPzT^;yEGmr0$ +TO<`TkR1GuDelrh7kZ~RSk+j;$v`=%O<9|zPdU;yK8(cdCY%dS#%l?&>U%ADP!5}Q0I&LG9YAlP>`A` +iPOpUw4-;|=9-zlDbuatcuLLjFuAIzv42Z9QE!>OWY2(#K%mwbdGFY4UeR+g2K{F4`4 +FB_U9xX0=#RNac%Ac?KPD_nZY^ILy=m|D~0HV%ZxQtofkrp(I@-M$e>@7VR#6}*T{DfO8KsZ*sq{B#M;q +^lpX?i672BvIDOkylSUrUp2h7nkPqWy_uwgA+)zCaK!_5UmH0GD!Fb5=`2CCN2X#8# +oalB3|Tl8?ahj1FC_HCc3Yr&wyDMf(-Iq+tV4x6h-;m(|#)uq5l83<(6?5;f*o^lS?6C>s_ZA@)hft*IFb5y +nb>Ahz9-l`qUQi7;<&_AeND4;-{_`022=D>o+j{d~Z&lz+U^{&1h3oR63t?nQJaJwQIR3nveGPLU_@U +=71us%*iu=T}FX59ryqyXP@3m^5Qw%%sfOSHFe9KzuN;72|t)5z2UQz9A{|!(}0|XQR000O8`*~JV0; +;kfX$AlQ0vP}R8vpt2ABj_c4*m?H +V4$Ri@0~Q6^B`ufs?XVMNGQq-N1pB2(mbfzjg9sP}^#gb(IieQKV#~Na+fqBooF&aX1b<4;One9g4R`rO ++Y=Z#@dX4k$;Vz|~C?F{s%um{1(z`1|oRjt6vcc0N5mJDvDHj>h|k{_6Z}5*D0a)EE2HgCo8q4{>}rJ +{eEPF@d>;g-#g3#jBIYplEG$--ZZMrKJdptPh7WahG~MfJ{;V)EsO@OdAF;TU)xY%7x2W;*TtxSMsCR +KtUx@HBfHCX!%ct6_4~j@V;Fb<}$ZiWZK2csV&cC1YBOOuiK}();< +Em@fXQt0jsQ^}AxuCXS}lb2#$L8aFFRIrE_LM5#-Ow~ceq4&1YsLf<^W<4kkR??WBO-9qHpjW+CTdq* +aYX&a08_tp}}>mPC4_gP+LR+1|VSopdG^jwK_*pM8@n|)+65e3YUQg+ARqUXIXuW(KV&IuvtbMAb7?~ +(y@6IEC$WpC`d#4c^wC`*%vZ{BPB0FugBmA?sGI|QpGYBo?W-F8dq7?P`wPnyOll`&ax2$+_z0eC|#v +4yJE8(SZZ!h0Uv5_N>fNRkmgFNUb0j1r-w{(5Xv&t1oO8#Z5P1;|KyZlXBqlr +Xd`24QQQRZjh06pFVL+`zY^qwg+lS}j%IwAdoB_Whq=E13vw63q6|pQ+t2Y``sW}~5Cw-w*hN2k4*u` +y>O5@^3jbapf#E6^1i2A|EwStjv0V8f2P#Yy{Lpa2_pe%CHisPxSu;~*H>Ma~Ia^7kOTK#rc`3PB_i? +Za9(lVqC0kgx=p~xueBClRrh&fi+SO!Is8M-sjAcsG4 +p;Y#IybmNE@<4Oad^#6E_s9E>?F5t~BZa}WFg +xqGS#yftHMiu5E*)kI%SYI}_SWJlN6Td%`$BRC5XNH2@3ej}o05Xa%n)Q_#WMDxKDtR?6`YLhdZ7~%C +N@Z^7P^XX$~dUw4lU8Avp(2_ndm!Ci^Lxj3FUnfHVd5C%_dJsDH{~tMO1Dm1x##G=2(n48oHfdVpAX8A@CG2g?u~;ImF^V%JNafp-$gc^Gn +7A`J45l~SICF!Adhk%SOOpIJ2c;L=>E3JPoOTa7HXY1HSkwZ1ApD2p6a%E?o-Ug7r}g1f~oG(%Po-zn +=Ic;Cj4snMJS(>P*?(wkV=XfT6}Q$@c%XVD8`TfG>kqxw_EvNP)h>@6aWAK2mt$eR#UsQi7Rsp007@7 +000~S003}la4%nWWo~3|axZdaadl;LbaO9Zb#!PhaCzk#`)}Je`gi{oJO_oO)>a;CyCSGDWKDK0+NMR +C;d>%HsEalk^@LJ{*#XnDSzNOe#GaKEpS?UccY(N%p +m3N~@GsdeQr5`04d77hI90m{vIh{6bS+D54jPATTR5pHR(3K^C-_=1eLw6OvqbiiUoVFH0dc5z0SF=A +SfQ*3S#77C9f+OAE;;3hZC3s4U>C>h)$)EXkNE_Vh7vi{qz{Spf<%x0+7GvZUHCS28cDRBS+$mIH$e4 +@lfYi!08Q2WK~0(uvO8>r9L63zZHwOT0w3_<1=E!T$5Zk%B9Rk7B38}RxESH~NdF +Z$sQ_z3hzL?v8W6^OJ`{Nb!LwXKyby>LElMJ0grkqCcDRb(D)SxwK*){Rf?jh`NdjM{)pAV6KyJlI!P +wMLmkb2HW)2;QjoE~P5~O6JglMIbL7?TgAR{v6I_*1H_zcOL>WV6A-?;ae3m|Fm77YF+mu3L3jvJlJhG@07<39WYCJ|IS2>>EyXn`0JMHc58yw8%4ehy5UUE3OVeV) +0%tU#>fC`Jp9(2H#Pw_At#eTfEdudW9REU)ToiLAQ4&>^7?M^NpRlCgre$R$?{fxHVE$h-lbMW&@fSA +H#i$*h7nV~9L0hz!|DsTSgLJhjmV?5PSS)>-R0tOb +R4B$1TW%Eg*!=7L@i@$9>+|YD(-ng8<^yPV2U{~XR&p8Q}ur~VP#-UVWtqJh>YC~91YdnI1TDElOQd@ +hF5n3(_*p-;AB~>SUww&&_t4QAbu|ND^H6}&!iMGj!bh|K<9#ge0Sx+9Ftk7nw01;c3b6(8z_){ +yPI*dnT&cH#CD~7^=M1CzAfZ>a7&FqM^j_%hydX4=#2}Lj1F43`?A^cbI9}V$jwt>B=KpG4)=Gn_Cl8tq9u|SO$DUV9|Sp)qS)z9ESfSd2;t+F;4ZgJ= +J_lBM`(suC{|U3k8neo<3>)oV9S+IsuZJJbK75GU!eaC-r%#Mw;+sy6ItIZ!dD9&v!_N)qdsB~*<_ssWzyG-M?#@zDU=Dnt +m)uzW<2FXUqFT`Jry?*vyswU4&|NwXkDff;tS2mdS5<-kHz@0+-Kp=B!=ugm!oqj +e7x;gJzFyj<`n<+NG+PRY8j$I6gA(^2sN)B!PacpMmy)Dav>MVIi#TZmRO1_D->#8+; +H;O1Pvh5p4UliUrS +Y)wdoS{TT?LGb)Oo#5Yi2Qi`2O44E~mhrQ|1rt9G#jSd-S}FhO`0(lHBy`*T+HW^7+Mx)m1FPe}iIH? +;L*ww(&3jea41RrTNd#rYQG=jMk{|?tmKoykI3M;+W`J-{kh!pwsxs#=Rt>syydgL?gL~f#f86j}E1* +sQ7dT$8f#YT*YvCk2bo2a^I|AAkJ$nIU&WDD)(CO}CxohKL{_WOQSJ!Y{!)p!LM7haMnL1~$L|~E=KQ +)JDc#Jh_jz30V$-XN+?%A+%&rnz0Q$+sJHE@I`5{0tBcT_ZIcdS$cZ`W1?+X=dDNh2v%)qz{Cx!A88X +X>paYKWRj{U#)2JJMDv*19zb3mxLGWk`SwYok7f1lo8qdZ2tnHszfb(g61^Ci7vDmY& +8AxMA}(GssMt&@gm>4B+Sj6oWtjV=8)w!Z7Va6~q5YWK*iS;Gg04lIR_Z(zck3iE8PiW}$;jFE-br8? +fj!j*Hd^`53)0JZx1$( +rIQNF$SkLGHG;)ge?5P9arWZm!&$P6pF3q*yK#?!Q>vS-a!t-uQ0Q5#8EwV<^>o0Q}P0BjG2L#s-ZyQp_|XUr +=W|DCvUZIq+>t%MzjG8i4oN$gu5gsxg_obF$f9r`k1Y$F%?y=KAP3Jk2&I%R%XHi?aEYI%${t6_jv#4 +P6C-5r3lKCKz?aOB13X{f;WSZNGHq&COQ#%i7hl?PuNHjBY(TmbQLsmgj-C>}JABO-?lQ&T*xgxpwT9 +{8#qgdxD7$wY_~w0;4A0m7DaP+BWQKznFFNA177G@V6}W-re*8YI@1g{8Gf;lnk)3;C2O(I%L{?$90> +Uu2Iw9GH@L!f@6*r9U|vz73O}Y?w9~`$PtJjyqAsZDL8Ul_hza|z8T3+Rmr!d&z<@6e|CNPFHlPZ1QY +-O00;p4c~(<`vZBu}0RRBe0RR9U0001RX>c!Jc4cm4Z*nhkWpQ<7b98erV`Xx5b1rasRgkex#4r#&uE{9o9CG2JsPmAzwn03k6%PN1E}xy}a0$r28Ywp5zVvkeevx61(di> +gZWcw^Z9R#d2TqNi@vl3rCd}Jazp5q0;!URr{GGPaes#?f&P?nIR_4*^3gaHIPyj_vWZwB3TLQ?*5i3WrCQ@&V5&D<4b +dD46xm$(ZHMcnj7j9ZBBKp|um#jgu42pN|MEeD(#rPmMQM$Z;ValM?k#N33=*OG7^aFOc&gXOy1%%D$ +2KsMQ}5cYV}+jx~k@tQFUhwKyEGwzhLD)~;_2#_5$MZ=@?FBB_bvMm7?!YUTMOxUk_iV-(WDX>`p3f=QJK73-zu6g)Tt;lWs>;(e^8S; +1^9k24zk(|0YXMGr0`pttp^#djSVpxi^{HXgo~L6Xw0O+RoZ8C1u(LIUf6$nx?0;?{n_Eu$aY!{ +nk<%z{ipLI9*}7f^d>$*$I46f+&YT+(64E<=>{9k{l+O=6YqY5S1w0o}GybnlY_dJSNd5SSiK2tAE1U +?!jH4Y0My~R!G0x$l!Wor&)w*m<~IG-g`2e{DWD~H`HZ;5p0m)(A+vu3 +g%5Di??wX|5i6NQJ0?(3Qtw-0nz-ToVp4N(g%B^I8pU;kX3aVhy)Qq33K7&?Q5;G?D2N9Qn>f~|v)UZ +~vpbgR8>thFby4tld28p<^Y?&w*ImC(kZq&*dOXho6x+N3BG5$7p&%%GB*w?iZ=ZqOcp(e0-Wx8z(tA +!qj2WAAwRM`S+Cm8^Z)pP|ei_y3Xe!_hJPJ`r!YjW5#yRz_^r*xhs76#Boja!k2HxQwrh-)8VjoIT9o +^nc3O2}!eNbNT{jf5p}*`vFi(0|XQR000O8`*~JVy(bqsz!Lxf{zm`+9{>OVaA|NaUv_0~WN&gWa%FL +KWpi|MFJo_SYiVV3E^v9>Ty2lz#*zN6U(q*<0jZ6KPMj}y3WPh`NzQxm+KbI>3}Z8pIAo88I~1vOlcN +<3=eMU``jwa-aNj +>}f;4_OcFJ +Js&Qy;O1`G*K>cCGYy0$D3Xmt#`)1U>W7M7cY|32CW<)ewS4}5Xlh^BTN?7%}0iGV^T6YTM +VtNtO6`R@AxHFl+JfmIax%w;yED&6x;70ALT~%N!Fad0R?iyihkih +l50-v6;4vLNGAxa4pc2y(A;a ++y20kAmJwa6RP1TDLT*uq9NFsCGvWxLC(MvL|iA6fMhc~jDF9v^Vjs%l$-2DqLqGyxo-Xs_C)K4#2&U +CG8Y=zZJh3N`$$RY0_^VGM2qlErx%c>tZwfom-uD-h~dc58UJHV@PJhSo$<+AE2Jao|pXny7ZKs=Sjp +^ABxLMB(8rsL@dza##eBV_po!4a(~dgjIrI>h_S?O=ni2O{_uPt8TqcK`rkVmSLkF_`&DdT8Wiy8?*% +Lhdw|46gPLry@bcs7*azmg9r0W7r>kJYr*y70O}Pi0VL6@#uJQ3+_#|B(<7#*ZDd!sMNEWud<`s~qeo +=iob#9jcpq>XsveGgA-)53u_RdkNL6H_#k;rPh>Eome4-NfdD$c#>M%X~x(($0!YGe>00W!0vpbZTUB +CsV364yHRSdacVFa{a(JGFjtV)``>QEcN)yYS&RyG!}QdoDV`hu6owhh|F2Ii=tcwpCuE;Ajh^gXZgW ++7z5!Df|Euu0~Q6zyMmN`->;za6X%B@52*U{?t|OsI!(%<20`P&}#8&jqowun)o8-v>WbzSHg}*oQhU +rbykXe7gfr;o5Ej?Wy#-Zyu$p?kWrlCzS76^?~N!=h~Q^vD_x#$?+h3ioSLrdGK(9rofB`<~5vzd`jN +e-Rj%6nV51)9eLbnrl8HxoCjjb%QBw*K^_<4F|UI;!I!zHgE9ew5VhP^5a7XA63#$pOu=Ud@uDq%hjd +Y)Z}Z{-P3YM60(@jCfSU|`qvI#9VEDIf2eG%7xO=js0GwWMd~?oR-?x2T62K`-&{hH=xct6RvaA#tiR +EQ}G2n5kQz&lWxR)c39EkBf_PYTap`P*fh2iClQycI9|6s(CsyjMz&(Kk#HB{&MDT1Hqbcfwf()|<<9 +w8)l%cmjIeb?;~-h6$1{pPjQ8gR-KO3GkYtLCnSUlu22S$4S3yZ;tn=DGsJS%W5nUur?Y&{-KThjg7% +5x&GmhzlT17d0H5ION9wa|KANg&{!as+l7H; +RfM*V?@1?V%_Z`&PlU<*=oVA{yq$QkBXiV4UqQUnE!EKuO80_c$ogW9$0G!H46g)RkXtY{C77^VUS|H +fl@kxRik|6AH*r!Bz%yNw2|q~N9Vu2ZR{un@`G0`9egMsoxl1N6d8*|_&;&*|q2lIFNKczX%ny3%Y#V +BCAKy--&NY;Z&ep@8CrsgwoFX0|;5KoFrpZh^{EI0!VHu++XsNP+;kbr=_BTlfos}R61aa=T+Iwx9 +W4FhGobfd$@$W=B~FKp0`Ic5WW +~FBU<#@;ObraN!t#zv=Ii!6>r`}Ex~up7pR)wrOiBxL`1C^P*FeL-_SEoG-(B(NRA6{4q$X9yCt~yA1 +hjBoE89XhD@`U;UHczE(C2Bd8gHz$3VtV%EcRdoQNa-kup +1Co-Zbroj6aZyC@9r!6!brNZ&&6lbv>b{hA$DFuxwbfDa|{(z*igNg_7|BFef+1V=$euR( +$!m3C)~Jdi*D;4;ai^S^fYY_u}8-E#zE{hmv8z>7er3eteFh7l`WSc7Ey=nW{O{$a(8%aZjG#MdQSeC +RbX$KD~5GC5(01~kAHsjyC$i7)EfOM^;xCVM%w>VZgM2s4$k+xBBj3(y3Fg2$>PebikJLZZ6bX5(vq; +Pqv;WkuR-zWM%5&_o-s+5EApW$@I<;$2f$gglkp_BHHhpcj7mJM*>omd0UgJ~rv))@!JaUwFz(fUUtqo2Aj*mp?8ld*#p +=rz)*D>23!`RFYB1%_n+i3sC*9yn;r36rUzR_S@A-=eED!dd7j!G{r`G*rbPY1xt74fnS-A3iSQw6?_JL6xG3=0Oor$wT?QnEj_$H%|L1h_3_=7x-Dld`VxlTs;m<&b~YRWqZU$A4i +F7mYY*v%4idE*C{A>s$DSWAhT3|5SUh$Wnb-~ob*PVNvUPwG~TEV28L3H%%>lL}y#=lw~(CwUfNDBTp +hj!j4G47)>CPqS(E3}@xSvfqt)ypM+FQ#E~>w5#GOQD+h(dXYhW4Z?~T#mOp7jV|G7rJMG +d28_I;9+D|jxlcssaj +v;D-Z*NHc~jMOF80Un9)JnsYVtTHeC_i}>1XKDc{xuilaWQBOW3|Pae6|G?>dI$eENVKliZMN0{NykV +3Io&RJaD)>@xo6D}Yb^4Q@f)27e66xN|U<&8(xrqbO%O55z##jZYT>4Lc*V*lW`NA6McVVRZoRsZ4f54QU96i9lo=`JFCwuM{0Z>WQ6qWs=d(`%E~xobl|xpgR*A90Z-rXnV+w$1#h~x#w9#m`jD0fJtj7Du$C2# +V7ykHE1-3p;POPVt3ekZnk|?DT)e2*Y^s-^kA)20Ek={)(k;cn=p?hVz`=2ylPmJi(E^8Bf^%pXtex@ +HGrx!brBOAFxiXG6@Okm;yLAqc_>{yA>HvI{6NTV&@UuntdG`szIya$3{;Z?k=lZ_jTBbajvmSUgsk< +XtfvHLGu<#Fjs#W8`YAP(wd`bYOv2ala-$=B{;`?7H@Hc>d^Vfu(!(4Jhtqq0zEUxdibXb+=XU-9sXy +lZlU1XNZr{)uX6S4dBGFy0I*t3y=a-Q)%6w~@TugO<=;xbaXo9uH-#HH8})mw#xK-JwWb2GWY78x0$WkWnS4- +5)djj}gNBT;1pii5elXcmkV2|1(uFJBvo#2|=%|T%G;8syskyOp*-OoY(|D^i}A)3lnj;Hc1<^;I%>X +ZPh8hHc;HRbP7YKx0cYKr4$ox)Lx{bi>MG3yi4oQ*TuoZJF4+Q#`j6+z!H3hIchdR6~B@rbkJ!y&Kym +O)S|Ze1PKFKP7SS?DD}=4briH!UnsR(`<;Xs +3HHhwuvIQtOl9<5;N+v+Y#iY`&?_jj$kh-oSY6nZ1GdKBa-XW)45b)Ap%b@I4uf4!45`X2^c$IW&$P* +*4lJEX^gv#Us0Z4xBTi%W3OYl&=eg-**PY&G~4*Ea&_pR00?!`0PX?ovPb89xc#h?^9b!DWsn``NmMX +duNe-7x9k~N^ZN>oCner~(-sfmtv^RI+qe5PaTg?O=r;jSvF9KO3wd2|k6)POh*gVgX`XP?2Wz)=#Ax +&Y98yy_3SWk>Z)Ig9tMKg+lJcp#Atg`yBWHir#BH32C%gbxe1Pf3mv-iZPK15w^(vm6F3_3Z^HJvj_K +$XtyTlc@fbb+&{@%_T>gjHiP#DclX7EhcT;^M&WNeye?%kT%VB;|P7#(CAV&vp)N1M&j{l5fhhUwP}@ +x4sIMU^tIF*Ne!{>CpDc4j2);e2$3%p21*O%PlI?z9LJBRk2=ZUr*65!AXe +inpmYc^TOas2_Hg1GDaLA9z*Il>A7vD^mpTa(O#pl2I^?${y{E0XIHZSQ~&59~jMw7%9{bH%lt=XEcU +ZwXjSP7`+6xZbux(B*T+5I+Dwt?B_9Hs32jv73_44J#JXS6&-@s(Y{`(&4YyvnySxj9qY_Y`3I6kS4w{{c +1n6+Icznvcr*e?g<3s^$+g%hEvo0{{%}=$3DJZY2T2@l?!X9k680I%El!yM{D&Uo)ahE_1-p<<;fw)# +VT3^6Ta0>*eL2#s9v(PG)1S?c4Cg^>!B@|ByH!S=^IIMr&Bab9=!=fh0E1pcX`4Wo4;a_j9utc0tFpB +E1~-o%_zludN1-&|q&n(wfC$D2kQ&>l+BZ^SBJ(M05>=;VnTnk)RPwd=>jhbdjsbLE6Fi4hkM;CO3h* +G~RN^2z&Zi4#xY3VxS0PmpuqKCStj@+X!}pX{8Bb){1$%0068pe)EB<0bclh;X9aW3*KiuV1Bs5xZ4u9JZ8hN*WcA7CHtoGGqsHN!Jos7Vp<)I=?aYVeU3OMopicC0&wNvXj&-Vybcm*|R(dy3-JA46oXm#6nQ~1GK8lXH +fMQ2eHw{50vA{>57_5T4-O9KQH000080Q-4XQ)i?&ghvDb0J01K03rYY0B~t=FJE?LZe(wAFLGsZb!B +sOb1!9hV`Xr3X>V?GE^v93R!wi)I1s(-R}9ia?7-2bmqma*v}uZ_Xxbw7?jCJg99!H-q?V-Ocn|&Uou +Ne8vK<-m#S%61-hAIv;!B2=S4O+!*YPh&X1Q`u8d(=eS +lSDv9rzr$ua4lvzwijRi|A%Y{&uzG~4Rxs)yX(qJs!6L-ZFFj0J>^$Qy7fyI@JCq4@Wa +GW+ortfOPh8(6Q&(t5hh?4wuW{OS?XX|nXx-~)>XiIC{qa4F)DhHf#y$XB0ft$PqZC>d!Me#ELear&2 +x9y!ZR~9vi*8y6Tpm%#&OVU3J&EXdE#`MnqDf5rOrEVYdAki+8rEI +L;YS}FO5<68?K9f8C{czRk)tlkIwQ2b5(yGVCsxQP776?~{Jk7UCqr#0L8`dpY3mEU1u47$r9*V0D2( +^SElN}Ca7J)uy#e^^@f!!MXfOsRJM2rgX2G$o2PaU9Ct~Wfx;I?LJWx!JD9Mdh_$_Bbe*UHeF=%$E#G>N*P*sCq9h@~l76M#F#K +=HjX8=9wQCHc^#)76<0bF-m-2eeZRUucj{O7d$Yd2ry+YkV_XP&Q6#mtP;f5w%_-)Pqxqw|T9fP~Pe0 ++H_8P_xA)60#9ewKmfKFu&l#Q;WIIEHb#en@5$&B4lz&qm!n-Ep9LvK*cp-maCc+K8r;5ydyAqZMpu* +Myhb(KR;OCk0)|lw^3qX-t5-qLa?4f$JnicX$^EsmU04qK#xb&t%&67=u;EU%wJKeB&_`1|3Qre{oR`j}5TG%ZVsMkI}XjJ1t%p~ztvF$6t^ +-lffGEd;La|3D6=}U?xoXvbb;7dhHOIEaN9N$^2(Cg-S_zh4?0|XQR000O8`*~JVVHPL3jsySzgbx4! +8~^|SaA|NaUv_0~WN&gWa%FLKWpi|MFKA_Ka4v9pwO8A2<2Dd|*H=tk1hN5F4_g!q1jtJl=^{bbF_PV +VDGEWhXq$;lsw9;}UF6?8yh+r}bUTrQ +H?Y!>YVKSG-BDpd)Rra+HIs1%ebTxDBDIg28<{3!8<7b!Bebd8C512UiiFUl8o5qy44i(7 +UKB++*+Ghr3UVZvB09wLg~h;}xF?tk3^K^+R>2EZ2T%tB>slQ+gRUB6EC&~bBr*tV!JlbPV8fjv%Z|j +z=^suO_--21ZnY8u7m6B0#dHoQ@C(L_yk=T<38?kKX}?R}CqDtzT#EveL(?}H-(qb$zJ%C`#!HAD1HE +b#<2OhA^MOk6DGx7PJW1GKnuVtHHrDmJz68pk%!H!bs>sArTQ3FQWSgQkU^yp}#mc|{9uv5=0Ql`jaA +x6fOXl1m*fScUd+Sqq;8l^MZA5W_SKK1;N*TXxIeG`9BM(_gyfe2P-L7pRwj|8~m5Gn6Pl+&qSB+d!8 +d8JAu->7&f#y}~SDQRTcz;4i%(y3ruhmE~Za_Qx9Q61?Cgv}O3z%aqLNjIElnu&uJUM2MTr3-`GhY)} +l>LWTTfrCY9(NORf)pf^`1VW+_zw5Hqbw@|@0|8foIG;M=D!U{kE<-tV9|m4{d6R6|9z$ad=DSER#OB +%VhfNbEw%^k|FP=p?rFDwVNZ;|u-G0WTbhr*X(PSHE>Ef};JAFd{NV%sTc!;{;s`vY_`Tz6L +ZcOuzibO?Z*5dP4enk%DL^RIQC$tOrJ4m_k?Y7B~qw?b^#T9@9RL6TaA|NaUv_0~WN&gWa%FLKWpi|MFKBOXYjZAed2NwFZ-PJ& +h41?-CVBvka&AaGH1W`+Nl997#=r^#Y{XrP$BrMhH`Lo0e{df57viJ5{&D8Mk}^^ZDV6>%#O7$o0B!q +qw;Hl0c~yN^;%ONh}08f?8loGieTig7&yApbK=>ujKx6{i_EB+Sbs_ZHatH8~SP$Zn(AD?;U$_obsxQ +V{bNocF*0qhuv+j4bGXT+t +hrJ3+28c4!)IBiw)M4c)CU8UhS)1M+q&sgo^`q_Hrjk|Z`!@ReRa&=bj34NRee2EU9GaKy2ur@EsIsr +Dd|)KkS67B-izy^yC^D{MWeGEW}MxqRkmxj`mwGrciT5jQ#b1RLRYHovMSG-T$ROHgDZdqLeEV7%kld +eKyG)d3zgBcH=8q^=Q>yKZ@P=RO4W(h>Z0qm?fl7;a~N@Vmagi}lWn_xVlernXj}O3&+=2)?|RqCllM*C)vLOcuRqqS41v7I0qNOPF +jLe9?#HU#ZSj-N-)(h6?YT{Q0UK+_&-FTk^)Be4G-$hKx9WC{wyj=etv;?=UA0A5T~*R0&!%)&QCx`Krtt +)3%$u^>bSbf$|C>x;m4VJb+M~1b^b<(iaSvMS8zgg)zLoKH~6%IGYZ4WgOd(U$p#*`yA8nMhcd#SPu~ +43o56Ek6acfSvT}h`Vkg|yiz-7bE&$Ik)=cfHf(Wl@7g@V13hD3l;$@x#RksVI+bY{=MjUPcBNM1>rt +mn`9nxXJOKWM)i=0So0h_vo>BD;-6j{dNQr|3K4U4j9VKtVfqCe5CNue4TUW5U^ +$ZUG7F+9TrU3D)OVgiFQ*<{|OAecD*7>V?m6c_7R>E9<%C=iX2|eb`hjRlMYRX+j^P+=MT5v-kXGVT}TDUCaWcakyU+}9v8dNOFh;?~@N`Fv3U#RDr=84R%N>J3oB3YLF^-M38*xNQ*?u#I`q0PUrFAKtt^{_y72>Eh({<>|3H5~L +AOkUm#BpDF)uUp;^NmD6Zl@2Y5{XHKIUWK$Ds^xSFGXfO($Z+<>qy!zqe&wp8*9RJH3c>dK>bpZc+_VwQJ>6;J!yKlaFwzs#pD +zmmVJl`DdpNcOJQb4vO_}T#uC;-8X(CL#4o*ww +H9XOLeOr~S+sHZbXqd_=SYBEXxRs)Xv<^2%}zF2KE2>sk5c_DHY&TqD96BMXEs%gs*&+uLYlM%IITj- +U>vxGg;e)zu@Wr@lLo|W|u&W;Ff7XT?NTObS2LEs=~3I&Y?Z%kzKaF1{l&0<3u*(CzWW?hCUrSeSG0$LXbHDIzU-^kW6-#1crwhq@b&1d%pVL7 +GrMX(58mSZu5fNwZM-W?<_h;4$Nagjbi7rM0&_@4o8ez_nKF$g6S5;F(_qn;B*Lb!1)zCf&Ta*!uI>P +KJ1qBB;D{tq0`2JSrheILf%gP~JX114= +Q3iYup0}@F*VP2{-3(72Ob6yyv1Fp@wsRcd{mpZ*6cn~Oukj!@HEhNhtHlw0&c%{$oaL`iuB-%+dDu9K|zkr~mXK_H; +18gt*3xxL&AtNCy}ac0nB-sb}%+T7xmTMs@gV@S4tj58(N20A{?B7?4mp4Li$8`k_eG40>hY +HQGEida99OCef?#BOQO_SZk(77gta|CdMi8>k?LX7HiK7bUPB-0@rm@}O5`1wXbP*gj8A2jt-^?CCe9 +=eXV1TlDY$#VZ_&8*#E_6WB~WX;j~BG6IR=_b2$JaLH#ss)Owqjl#uA0GK;?HnppEv%>`2r$u6UtiKg +8=5>rP@(zx1NzY-wkIk@jXsCd1gsmKZDbnGl)eH;fC+fwt48n1Rt2@j^a9C-tIrNM +N}*Vk35;5kJI1qtPuCpw*#b9KT05c~l+Ji0b<^v5?l20nH17V8SoaRni=;fEgi$&8g#jDLvHh<-_+&i +Gzq{{}J`|u10ijQG3p8&-eT!w-AB{-!Fk|FN)O#GPxEh7r=DnkZZ0m^g;0Fq@63aR_5%b<1fa$<2C~$ +X>L3}05bPp3iFziPG8g&#dOx@akL8y^q|8ph9%C8UJmH^RkTfjVp)^|iCkwsMC4fW-hjgJPuFFD1X;Y +Xo7C}ItPeAAW4AdlY?jMU3Fx<^wt_AAdAUT48s&Ya$SAW>r)x07dfEi0t+r*h^3jO?(>Xg;@l@V9Ta} +=+GFr8vdP7B%$-V9ye7m1BM(eBv+$KD_^*#RU55=L(}Ez~QRA1lEBXA0Cw%S*ueX+v_9|6rXMy^@ +<+XP5m>XeCKz{$wYwLPQoc|JER>HF`$H=b}4%5&bpBapT>T +534Q~XpR#a)-oIg3&o%KZuh*bE2Rcpf2uRa05&)*yF)AMwY997XR7R<~&*2d@l2o)lV +CCDeEl<+qqL-|a441Ekdv`Br@26tFK%AOdoh*kNFM}a<0=RIQw^NM3}N^iE^4ed@#yFjiB9;FuwqJ@3 +>?0P8>CYu$WW6xNw+?c<4t?7|%Zdlk6ShU!|eD}J@!#y7hwvT-Ey704p7>YyMK{zVu4M8zU+rAfc(8- +HiI@+#pL6LnW4MUB|9%VREIk4EZ;97f +67b&<`><3HWkwDu`0t57Sz7Sl8HVLjM6fDiV*Nqv-%dli*jjBd#Cj}HHyhedy)KDvQg-ofb{$1WA3!6 +lPnn1^<>8>TMs+}c$$+tvdCt*U6yfMY9918W#e!hh?zyfovjQ|$3Jzy?Yq>L|P=eH6)Vne_PD{2-x`K +dhvTBDR;qO#l<5b(4yu+Y((1ju(`oi#wP{O+y; +T4{NFsy!^z7-=J0-uvZ}vs)hh050T6(zIrmfHMJ+GMoRNmEOqk^UCfXmis(8_i$Z1zq|`k@Zw-J+Kp;ld0ajHZ7lnyKMk2)d7w>Z9!r +ePMr2{m)^|xrWn72d)Ea3qNdY%y$C0Qlrg)el_Ag$gU5|;*!mnV88`FTiBkmpr{c1->8lnDCB{nsdCm +LaKxhNshb=``24)MqClH5x_tK(iy@&UUSMMMf@mAe#h^4MUd2c&!AW9bRqM9lmPf!(FOSsv|xbY3&>H +Eh^<(Q{Ro$)+>~3fp+R*9noah2k-*t;-I>{KdrMm+sVs?^zz`&Q6$D&&k}uLPir|KM|$OU^zII?CX@h +7-s`~+#R=>r(@r0AQ@!J`_XWt4z`l7yszZ8|H!GD^gi5C9B#O&CZ&zolx3#(+E(LsjSWLH`u?F!GoMxB|MnWMNs-@ocfgE}j5Jz!&JWl`nj4F{1W2lWZS0j^e&pl{vYS<6l=Qd +x>>Rqk@uX!@wLNvTA;|7k@xYUfXQq#v`vVZT|U=Oszju16Auzc^>Yvu)eXB)i8NR;ttkbe +I^=v-7E_9JpXDYi%C26{98gOXq)Vl{l@(c8gW0FbN!+ICEnzkb%IGzIdj|~rMqBma?JM>CcQ3w$jVv8 +K3$QbpPtd=E3qzY9ISDNf%P5j*N*Y{?N=iajOf+sZbk_9e%Eix#6LFVa0&KzRD+-RaGy}}TbSQrqr6J +U@LN-&(BoOM1dd@gI6I75UJKv!7dDNE^@YY-UVXiT(0l>o&CTkJ<=riDx1D$5gdF#jT$gxh-^LuN8dZ +dy^0)dF*m#6>G{5l7|&3!VP;FPNOy1B@*fUL7A(_IkD=wVG8rV4C%HOQALP^}8wLSPej+S9OC~*E9(S?wJOrUDUfKRc`_JlC9MNH!Ok;a34$VoEBrGhL>WFt80Hy6kB;IT)nYJ_x$A4X;3+vvC01Z( +OQ`=1O54vtsb06h}K0IjvR;+nl+FU%?RiCNK%d_8CxCr0&8+W1h)V*%N|h7VH{-n^}bgj4ips>Q$?MfVyL5jh5^ufFl_rV$1UGl{YggA&~yh3Dr1)XdWhu-2)Y@ZjzyH$`btvjy~~KvYfCWnciMifL;tRRyc6B+JV(laV~owc@d+bVK>K+-HNZ997IIDU +>u>L(rBR}H+taisW=02LYFB3DbE+mi2u;7Tc2BAH|saVAOc0qbV}U@|<|kvazaV@3ho9j~O&sAfn +>eKO%XdzdSXQHY0yvt-aJ*z7tAkRvwBT?>rUGlXPRCgz9&?@H5&6#gInNUbL*N1amfgn`^g5A(sEVpa +<5*`djDAjp#yUqH~CO+#4w>L*P2Jfw_IB3@4WY}0$9H5n$UPeVm^SeAE>6-u62oKoE=My%jB+UbtkFS +JMRQOfH6#pHji-FWFp1d1nTzZ_m)UmsHHr>&vP1Hl`FAsHBx675bvto!O^o|{1rX;8#Wr>-;dshBb!i +uy?nT}TYxl<~ME6BppbFAx|g<=)H(hXW-G5wKtR;B|5Y@=ym2aKPFqVIrn`D*sR#g&Qd&M=j6IEIuB#mqiw#yN#0gy3 +P@b*hpgh5zHkVa~`MaL&`=(Yp;tlc$p*eNtSXsnSOGk0z7*Sw`eKi&;iw=Ww<+peu5U!PfuMp_>&CJ4 +toPQU~7Nw4LYV$^^_1>ljIq#LmHeFwO-OZWn28dm{YmCNbZqPINn*!)=~3#vLibOh|aF7+}0gaGx{!v ++{5ShZ|3LvFedJXfD(Ct{F-WXn+AnC0#I+Ujgb1+mXqT+i?$OMpl%0~COnJh}P5>>b?-ZXl`ogU76LA5nZ!APw* +cz^#7hb&UL*wy9q-{IMt(05jrR*HLg>~YF|9DxI$G=RoNbd2>}-%tI*dhE7sHft^M0s&#d~DG2q0-DCpvFK)LlAz=zo&_@aryb~L} ++t3Xo4_puJMe%#eeC_yOCxU=rIGg(f(W=OKR;a^k~*=!6$}$36&>=5zvCt^HhEP^lPM+XHTC78MO}HV +q;)H;IQZ;0_wGwF>H7LhcK-g`o5)06tWF@?v_h?#Et1>(f`?SUP-%h89%^b2R^xxmP@O3TH7BwTT0?F +Mw7ea;SF!jHv5=qI7q+h(F}tnbfZpwg&aKR{OGBNfR8Ord%0|~Ynr8ax=BZ0F4<8@d2I0ZOm4TUywXw +^+^MNJ1Rxa4!?XZms%S#<1wY7FOv-jisp0*#r#>IZu4DWCw!mC(RFX|J+ui2zqMp{vQAXOfF^_`(O +l|pt&FA+;)Z&#jaQL` +pVS2+KK`$+(BbIfO)%S;oaLK*EnVym?IYh7aPp>B{mC3pu5(17cQXOG=` +Wl#t?*JYPYhlj{qRcK0{Il~9E)^=w!2AUWa8du@8LYg9Ll0qr{OjtQ($7)ry7gX<%HLcB85_YMMy_FR +-cEeuzU6qmMiHNyTEF*fX$XbnnVbwXxHL<;6Ho#{t_02U#1+wORM`-}T0hGNsvNt2A7L&=-;Z{CaF{j +)`(hGbIYR(sdHE~vBP#RWzEEee59#4?Rr(WwXeZ8_epme=JX0OV+)rpsa52`PUNgXM7QgU4_DqhVEUi +N(cox|feVT`vZGhrh#nEi5uMte;$9q9~7&LkXV`5-4Ju0ljKK4~(zZsix8(A>tC#6i +)Etw*sm^jS|2+zx|r3CdsCLH6N)b?ZW7NBXubJ3{k#OGZLzu}!%>)hUdvrxprW8`+lzyn3=jsooqsD| +&;ekXaNC2bc1``9Uyk8uTOPQxx-N&{K>rPIHJQ_)phbU;8lLY<=n0R~C)z$q(q5oD;Gso +p*q((2kcp#x3;$BdnaQ?nFgp{^?y4-1dO7=)ZUYp_!Fj0a*tr(aAAjZyh)OCA1Ov{T40Y#z6;9afPei +K@4q*Ea4sa5bG2uoHx#^#r8adcRUvEF0bf(D +zkv$Y#D8>~YUhcw^|OrPx*oUvH^JKy0XKQth}jRLl2Y@X66h5rm?7~OaJsrU6czB`YDOZ*1I!;2OMKK +g1V-V5_<4wAO#E$g_GkPNwaJuXCH9i{%tzwTmPJ$!?jar8Kgpj{GHNIx^vn#8QYjNoWVQDNv!Z_sV9c +CXn2qo$t)n3!ay(Yh3_ON>la?KWqcOnttiqv+(?3};GN?hccRpb<}grRnz+nxf>blXyJ<)ObY}D)+$_ +v1>h-p8+AKyL**aA9}ExU@N@w>{99m+qyqf#QJ4#pn6vSW8TdnTd +@@WJ`5gf8+wXu6C28u+ay9|=y{-B(%*XI7yH2s-3+OPW9@lA75orW`z32q0cz!lmq?gQnwkK%fW#r)% +?*>}?d>E|(}ErJuP@mFy}j=)%Uns>M0cYnDj1RYQR+DBI<|HRcgaIz1Rajq{gHxIWYJ`djDqkezsTHbzlM>FD(aZ$7JojwCt +!#&17mj;G&5NK4cr+#)Hr73Ol)WweYf@{37Hkd)-`Qul%dQ`hUppq;Y;Y&JTe&4NxIMVK^ +I&~;drz`tJBcE~X^^%&%}dQ1%5-6N-(9K)hJ%$T(zuian`yKqm@+>9s7&Pn5SJPT=b$iI(*!N#}J)Rgy-Jp%AKwvS^w*6qJ4#W=JP_n{ut4{EiXvZ(qTm0rgQe)K1<@!-?4*dUxpNy +{A?(2P`X93C|ncFT)a6qU4|c66s!)Nj-6+R;EO>amtm&YPY~Xu!WfqXByf@4y4yC|i$-KciBFL6xB-@ +)S;I8zN%K?12B(z0y($%8Y(%Er8*drtxoLT#TqwHab$ifE0u=9@0Yi2bgU0`v`yt0H(@Fb~!br95?** +>F}%1^o^I{J*Rg^0u{eR$~5i%P_J}bZwEKH$0j_sulPqag+xvFU{fqyJYKI|&w1uRXX;&yWCm_2OL7Eaa(Iin=;%zE +>Ov^30eI8sm1hOlAq(R=&D9F9T4`z^%^PPa4jTV6vRF#JunDJAAZmmmXtRJ-VRh;w?)Wde;ZHEP_lWu +mZsN3NlXgqQd#5Hh|+DfdJ&GSX|T)4a%bc!fH_;%r5`m#&Y%i!=>swu`$lZX;M>d%n?Qvk|PZB0D(i% +@|DD)vSja&xvc7I*wAxr^KvtExMC#|VFKl2=PYJMzyrG<NBCOJ)qO|IJQ?_Y7|}upvBT=t|iXptj*-q +<^}8r)-ir`-z2Hbt|Nk8hIXGGh=Sk8g9a!cpqSUprpI35}6~G2%EHogUjn6Gof+Zy@+OPeP}LsS@jGw +bJ-`A9XMP}?x+9PgMXC)=IR~Q-)E)G2C>O$RJ}~4ad7+*|Bk$$6KY$|W!2OYOOYKH#T@yT$0fPKT@uy +?h|KuMvkEC2C#SjvZj4Dv6(7#xzc9WT)0@Yw<8wWa%mMkiDJ>t)$N903`^|z!_U7`ySv*Tk$2jkGS)) +A+HgaKYC#fm%Jm>2B@b{ze&Vc?%0W(h(VxJ_~*WW(-Ej(h!>vK-?Xz@JBjm-MX7G4J6KAyfkd@)mpAp +GF;9zKWFye9rDY(rA9!TkQtAe8wtWhXWPH0xf*f?O1_=tnTjeMxIWMP!LT3_)J#VZ=dXX8<@OpDD}HX +*$O3{hx03aT%(nE?*kA-9|l~mX-9^4bXud|4lY`Hs%UFGl^->c%uDB-G_3gf_wU+0QS{i@z?5byD0{? +Qbx*t2YbsUE@yg`Q3@-nsE87xjS+BI$JW*x(1b9ArCuDK75sbAD<@I`vH%J5s;Enf;KhGgZr>&qN+>% +oa#W_z7&Pi+8n0Ar$KL8nbFai#JMe*O|!y1F3GzhoQ(y1d3#`J3X74ci*gZwkgO{?wgD%2yQaI? +hlSck3u7?v#}6km_RbYLp54la%<>4zvhe#DT1veAOwU&G%>w^zKxjPOe_!ozw8{JYdQZ1-RCoWUxZkc +HJh!uo(AahIQ<>u2dZ5Z}(tJcD$B$VRYWFsYI@ePBr_r_l6@E@;RD+;`n}LAu0Z(;{>6?+*(d#+=(5z +tsZ{A3EUhC&oJ`FPkp)Fd3|J_UK6QF$nKkSzXjM*K1%vyp&j1(U|mPx%DnJY?{A^8XuKi)5x}j*D~m$ +tq)(k_~v(qUvc^&yrLr*z%Wb;hDuJfR_{Nk{pa62f8pLFe~JL%+uF)i+O{`mhEBw3|F`)ho{55f$ZeYl3q4Ihv|CQ--wqf>&n+FsE-u=k)FU=5)er_wO_(#ZhKb*HW;vpJl@2-GC^b07Xvx*m2EGZJcI3|4VK%o-n2Ux3-yPp1d&(xNKleX@=*DCeb8Gi?*1uwTU`g<-(gZ +DI3nojG_AM%5;_6^#F%P)h>@6aWAK2mt$eR#Or@-hpcY006fF001BW003}la4%nWWo~3|axZdaadl;L +baO9oVPk7yXJvCPaCv1?J#XVM4Bh=Jh~6N(4YYI%5Zv6}+ASyy#bRP2isU2Zr2h9uIc||$xCs1skL08 +1G$hU-lT_6&_~=QXOCABgNV32_G3;D-yg2qHa~fQx9R^<@B914JvFmj)m*?%sYo0QpRx>V41EV0H( +L>GncSP0HF3rR)``YKy;m5fSQN%eVUxW#IiCPb2)gJ@OqD3*<&qbTfqcT^#mFzgnMep&jt!ibgxnV0d +Mjd%iUs^UZ7m{tjSl{d1tUvEyH{)&1ZRO+EM*H4(DOb5AD53Hj|4{T!KV1qdRXB}@eg#a2KL4)%0Z>Z +=1QY-O00;p4c~(;nv^1zVApii_bpQY$0001RX>c!Jc4cm4Z*nhkWpQ<7b98erb7gaLX>V?GE^vA6J!^ +9t$C2OpD<;+l06uUjS-M0)8LFZvI_8~TM^d>&U%%$L3zBkjuez{Y7O*?hGt +=GEujw8v*G-+&x~{XbsQ3OF|LyIaUuCsgm&-QSYEzXr* +;3akRcG8ql@~whMWdQht{h})C+776Oi?Y1VbUjvS+gyzi@MrisN@!l$ +dQ(=7Dr@tp-rA2%w$^*As$8pO+GzZyyf;goHz~hflz9#_!)2Kk@2aJ)^zv1D&$^y~gT&rD0-vX&<~g{^9V$>+{*^@vD>5K0>ytMp=K|ykU|JYUy-M4>nbE_sT4psMV{t{_rTr``8eJ7>K5LuIjSh1!(k8pnh)aizxXrcR&TgP@p +5esoa5@E2)o!Nm-<_VH2?+gpp*I0x8KviC`6ey4r+S%HKzZnWQUK^|dA7LH>vXJ+uG->SFOLh}564wi +0w#}2n19i{(%#dN;SZR5yJ*_Vk?$z2^+{3dqRw!2#7x3V%X9;nuq}T)KYxG7&-VIO&$GroQ8s$kR@qo +x>Sm^ko2)8}nd}LESm>r=)*P$)s%-P+>|(n~>)JLWVAz!SmzW9|at!cqvjSR|%k7@Gth8xsV4tO17=7 +8>d!$xn1>BWyks4W{m+A_34Fb}iH)So~v6Z?=7uUCGwN$)GvWqOwnr%Nb8df_yKRiFdVSp=Fx&pRTi@ +aQ1j{zD22bpqvl`XE|18i*+Juq0hShN-FcYK?wOTc@9LZQ*?WG`Fc$7GYI4bEImr)mI8e)`>DLO5xv? +L;XUZ`)i!_ovCTf1>C3w=r{=(Hzv2q(}ntYX!(@k+G>Qvz$6?fR!)WMiY||)Z?_uGhM0XDlOa)_YFW_ +_5eMa=eVO83A?>Lpo8pp5vW5Eq~<&D1dC($00jyF0}h#bVsFI5fslQrVQp(5F9_!i@X)5p5Wmu&sA~{ +i8L`o%*Z2EG+=0xXN%0re54fMq;b7bFi6%{);jE0q#B+W_?pt^;1D)pm@{x9T +>_b9JE^Apo%io(G0hZH;~AZryXU)IIuuY!V^~2Y3ryHnG&IG;DRdVAIa_kDl-BAC1HPAE}qLVG&SKHo +?-=P$!p(y3tj(+K$X{*lK8D(?eJzY~5m^haG~8&KV(|cXjHpjp;-kMh`;-Biap4|66oLU>sSS4fn4AR0J^Lxsibg{}p-xZxM+XdXcuZ208Ae2hRb8^DhI?rW? +@SdN5HRKYgKn?f61nR62#0XZ}zM6f`LHe4E%!9qnncS{UC7Fde)|Ku8STxFej$$4@)?o%(dPeP@W^#R +G>3rqv~GN5bDnN!S&8^uZv^m_Ki_&si~K^BhRL$2_(o6QPnevnH)@+O^JCsNn03Cj$VnQN*sE6K?!%1+1|gVIs$2n8ZyjfW`a#x#aSTM<*r@wKw3kZ~`5r(J +{)-fhd)Uj3%5@66y9DW`+D*wSrL3~c3=C3bs6o7I8#lMvLVNI_mrlXpsN0Jgr&KgUJO13?H{S577Ul70kMHoYl|g{5E +Pz38BkhjbUKm3b$fY997AHC8zas^ac(1ERf^(*s +d1Zu90QTNe|UCua-tSjDQX9@)C;oG&4iK&$Vp=@&^)_Fct8NyFzUnk56`6&j70Va8Gt;c7z{~B5{WqC +qO6Fl#2{oTtr(t0zXYahNw8y9=cTI4{DygJtZtDX_PH~W!1mAjCj>mezH3PNi2CMZ!jOjp1~nK3okVu +U&fd`U9;-pyte$(lqz6h0CzQmc!Ok0UU_>O9@Q}QiLf_(tP&|Rl28@AfhA40d{b1|=#Ydh%#ywY&*|0 +QPiJ2ef>Pssek9_zgV8HnELz#tJ1J0(~%*@f>Yz`p!)pb*(Yps4W^#It%lRmtjSFOLH&o;1P*bocwlq +O)w1o!by4VYQ^Fz;4HQUaN@$I(~x0>PRy{x~=0=(1(I!dr+*wCgyjW{qN%fve1_;-a-VYG`8( +brmU6gq0xWD&xv64bbD3!)U7B8HMao0Y6pKhAQKfiX2(Rq5p#O*l_5!;%ve%!zqvyWL)8u>Ig&$Qm07 +m>Oh}G4yk?C^y^TXfJ5`NPQsp)y$t5F>C41RQx?EF-K +ik9vblsqx1rlTYC)FhuA0BrdtJAhXuID +K1jyYB7Z35e5Ib?HkCUaztj_3m-CfCK#$HGXx5WZTcpWSBc87$4f#*V|v!@)7EOQWUs%NLKhg9O8mDS +J~P=+W4k>{F&t#0jU2J|aA2Azh$_htd!BKaoy3KT+939CS~`sB?y8$4lZE=-> +b>$E$;;JV0&PRtr5)7{3HqC`-u#n;aZ0%XOL+Ns}+T?MD&dBd|vE4E$}jL}C1=zkmK)a-23AI=~Chdq +QT5DU3FX;G)nCtgwq<%k{*|hUv%t@eVOhOuSm}f))4NyHiCa+^MsNx;;reRr;dMz#8BP%P@u}!JwGnW +c~v7F9DD31s;taZ0gm4F)0qRx`q!2PaZ#i7Nd|b;vG8?PSIwjW2dCicubU5TPrljd?1BqG3&GdBH1@R +vgg55d;0A6kGq?rrLd~-E1I+eQBM1>b#d8T4Zw{xPtLa+jo;6!w5V6Q+Ba%#(3Nl)@fAN5mKqMzT|_T +gO$=aDZif7Mm)FwiibsC180Tr5Key0b!}T?%DGc}sdSE6IF^CDgqwi*py=&ZH;=b9ym8dj(3f>I`QM^ +#wC}E;rny9iKfSg&kD0e_6v|w+S8+2ODVmelquyiX57F-KDTqJK3guqpLqtX4{(h))nie?!~fc|6o&Z +bFbHmiYbd1I@DqzVr1?}9=5)E@BPNojd-Khz$>gX93EVTj5qKjRSv+cNe9#0^azg)z*H7?H<4a>QhI> +=r>3?s=d9I#jDP!^m%=b5KZl>Qk#Z9d3j7g(vc5F-PW_b7XWlnoEQO!+*3BLV!1E-f9s4H68KK`LH~_ +$o1SFG_qGk3JhIwFe3myn}%r-`vQf7@De5^My;p7&^0tc8E5ImW}Sh7vgrPe9Rt|LcEk;tN3zO8 +iGV$N54Mcj#>z$09n7MqOm?5YE2z9CzsJ3+EnVLSVXRDw%S80yHMA&f4j7)Ah#j@2f%==FhNDz40SPo +{Z#RQU6je2drX#3Zw1zRLhyiyJ{&>JDv42Y6F=w*)XCe^x3_X{K?*brWN1&*P +Svj%8l(0O{F8N%DBkzuysAqt8H(-@xWGNi|ma>aLnAI5yKs%-z3vgb0u@pak{}q;vcsM;~wBrb%_#ik +{2t*|xh~pmaoL(4`Bpz6DT_f9-&Jcknc&6l02^USq4@SDlQITT|rWg9~z=;v02#>voN0?+_PxQi-eez +?V3FVuqb#{5xkbNX+SZF06`?nO3N88KH(v5>rSZX+pGS|o#;WK+cT2r+(CA*Q7RDo_L_gtWO+U)Kiow +b5!EYly)$K%~(td(6G%GfNye)8EH&)d*)01LF{&$NXJoe-hJ0^1U1kkFkx7JMgkm?&nIRDe +3&w$m!1D`7S0v(LN_c-=`?+G3W1dqEU%ftgcsTy#~CX^M +?D;Av9YCd7i#C-J3C1S;2zWkl#iD_aFT!L^?e7r)Z81aNn?AbOdXG|{Fg7Qzy^MR+=yhKrK-j(uoTo&Icdv&?u8t1VZ$5=g1wu11BGKrbU}0roMLrus#N(ZcMmmwh`{ZGHc}Y$c_-t4D +~|~=lWV=vRnT4_4K50CngX6YlSDpFb_cZZCNb^qd~^+&|AYtp7SoH&@Y>pKX{OR +NGYCZ!2=yfNPY4;LVWs64uf5Y_8H0aPJ8~*D3yR&oD6>=)inwbL1Da`SS%rQ +h(%%qMt=nbRrd*#oznV3<-p`Q77ZU$IioYw=c!ClEN_2d;Dnt3gA6*+)y7dQDS2K>lZIxm|}w{wFKYP5>cl!X|s-z-+=Xn*;DxM +MOM&;f)_Tp`@K2kRv*86{P@!g9{pX#Ie2su`MHr=s4AQsF-vz2*wd;B*a!6QubqvMfQOyUFaxlj&G5+ +GQhOkB8H3p3Amc}r!uYQUSNurHrt~bW(lveJV8Ot-?*o)`)L*J!@H2-d@RKzc{4T-SsJ!^(r1@-?6537il$l`sBOk#8Z5JM=m4kdcV!H$4|Z+d>KW{1TwawQz=dN!OM1L +Cs_18#N!(be%ky?NoEg8$l2;){aZ}Ffbn1s)s_$4urx6Z$o3Tsh=G)VsVPKVo6KP>jUfNbhX(Q+Gz78 +`48Df>X4GlPlTx&OvECq)h`niZOvU1mnGX+C5 +s1runArY0TVhJc@J-gd88LJEj1P_975SEtg64|D3!>jg+z70r;k_lUnY>E~?Su2s>lFLV`TYMFcm8p$* +B$$!$zx}zKNY@K0^o88!P*3ewpvQ@Go@%$)cOtKJ{-d?b#0#{Nd{Z+e$H^TWmeHf$B8AzC9_Z!TK4qp5Fm?uCCJBZZ|J +DKsB%CfaWeU*3^7T*=<>CG1*+yG&E=Den6EB1A~^%F7Tj(m=ct-dlPIkCIdkqxYan0GjUtHlOini21p +#^8*kM-0htuoG3sSmf;_0wjguXLS4}BMt~%D97WVAO=-lS+-PcXFc%l(7Lx8JW-GM# +}iu{b2=2G5#t-vFz%7Gn+-~)@QfNpn|dRMFVQ%u?Q8lLHb9TSzQ-@&>!0efu&?n;_*&e@X>W;WV)HD0 +=QF7G?YXleS{-`=I|ksFW8Y_px+7hp&T?0UA#Bt^xN#cte6(uxxu!kk&513FHJ+LWy;Erx9H;wIpQ%m +9vc1UQ$Tv}rKN>RdH?su(#vITs)F8}olc1WTlNP~gMnT0!4>q{3WPtD&N#l@7x#ADvDaz8jU#)c&h>f +44u9BnfVo8e2LNj$B4vP4THY^2-$XGA2a$)RGOi6-P2&~(nV8pNK%tW53VM#`LnvVj9z5 +;KKPIp}#Ns@eDdcBTMZVcuWpHscQ6ZfXQhZW1Nu9p9%(dK_VoOnIz?YN{r^-`5>nR^ +T7vqKn%ve7rHqJ+lA>Bm*D>B0(Ug5m=j+)m~6_z)4bIJDVU36K +Coh=Xq_-tEy1SF5L9}HUOB~~La=z0cXSADJm2O}Vk|mdFvTqAiK3Ha4k-peEJ_|8U<{&)I~Mvi5k?bM +4C(jx2r=T{y)j1IJ`|ib5nPW?R0L`(5&u=2o9lS6rU<_18=aRMibVB=BaI4xRRv6TXPmJcTnwi3&_H9 +yl|79&On52E5$wW-^9fGlv}8_6Ha<+BzjB|S(y?fb$r3r={h*ksRqE|-_B4sp~#Olel|I#<2xtPnW*!QfW1a@3LmXdqDyQw>2YO}j{h|u=!x +1I9y3bxD{IUSTu;VOZ4`5n8RjlaoL`17}amdQ=jJCQ01zP88@au>~fF0%u9)`0Z9E6UX?8tfOry_bE~ +A>^3MkdC7(RW;1_l;RQN)?uHeWBnBrc=!JNy!1NCqI2uUJ|D8mjq_5o ++*pzi3ioA%AjiKC27fKKNpQ6kE^?<_t5dV8Qua}D`q0VO!3gdcqP%m$_yIAW!e){kacKY8${11J!?;| ++6UB8m#hv!E>{)6cMi-?W{c^KK3I@e?>KU9yuI(~h8e*FJLllNkmF>r@oCeI=`pzp=1Ak|)19UTJp)C +oP*NynI&^}m^stFkcQ$sp!@aiySStGInWMlJKEXq1SNw@MZ>eg4OA*rr-uPHFUJKemz#W_l4 +b*2$oA0N-w04WPM|XhpXRN4LdMxX=6ogIpZS*9aSck$DU*x)6!3?zqo^v3Z=*i89cI!(1zq85^9%`fK +`w=6&K{D=%q95!y +R35UyII#r_Sj^>X(RB!qOoF9IRSt`q>*_EI1>^l(g+)nBCOf7n!w|IWm<`$* +-e4;Fd(dqGd^f-yHw8QpiUAPyCQ8r+zHX;tiIJq7`e=*KlOo)i>{5{xC==|BjA0xb9=khR;#(-IJ_Q> +FVD0^Z9|_4mwgL1fkAve2t-P*5iTT-8yIS!D+4KuR6_smc#0`}OEg&5OeDu;4cnH|DVyVNo{SVEhA0x +ZxM0OC@^Sc~?(qh**7=ysED{dcX;u$S3-y$+7WK-kA@(_ +SA(szJgYbj6YH3bd1VuPj3}Z+b8PC0eBBH`N?RzAed& +P$ubNvVY(xNN!s2Q*gs?-j;pE5PZ1_7mnj1fB8-IoF4`JI^y13 +@&8rxvH(eZZ@n0;xZn}jHTx4NyJ_tw?-ROOZHP@AtE5{r|2`@qkhv7rJ61@DStQxLXU+Q|HS>=>iErO +X*+!rrhzVwsH{Iv#4{Ky?XIUmbK81$BGYx=n-`^!t$9W0qkp07vhd-}j2N1nau{q~X%HAHJTFZ}f-V> +4TNpj`(qf}$1JyI7X5yLBt{7!U5T4ts)|96tz^@S|L#$v?LS-|fGqdc5)n*)_&OYZ%q_fG7~o^M? +JyG{{hG1vnI!ca$?r|orf}UB{L{bgQuw&AgeD-B@%vmE&z1@GOA=TI5Dc@BmXnEkk~~fx_g@=?H8B@j +7hVTdXIO?JzbnC=X}e`LM`7q!EBun29luhMsJHr-?o%*#ZQ*sHW+{KQLel(Hs;S?1S)6!F2)nPTt1jc +|b54`_0TTR;3$<$Lr;sqgLJ(o(u>cN`E3|j_7W^krO9KQH000080Q-4XQ$5SydW{AE09+6N03-ka0B~ +t=FJE?LZe(wAFLGsZb!BsOb1!prVRUtKUt@1%WpgfYd3{&Ga@#f#z4I$D$#^Iwwqnb&<9H^ywCS|dPT +Og6i!%^JLK0#UU;xmz+UZyH&`ZCrU(&@cNI-H@9c*IvVX@dNaGPTm1Yu5Yq$yJaPg?;kmN +%4Lw*>VY5>6S}oR-a_$SuNK}OUDFjMc2VRwzj4P8*OVe)1n34+F17e`}e;x=Y{W`bcHv}Z>6$K_pP+5 +5)DJU$4pd}bWW`r$)o~|Wde+QZ`G>zV9TJOR+U#q3%e_nm#v!>#oGtbc8$EgE(!*}H*elB)po{uX65H +zI`2mLAeiBrA4;$QKrqIwtd)grl^+p&e){q&lV)Cu&Un-=&aS>{`o_G7w&tg&Me)wGl6K0r;!d)*Z@d +DpDNwL`U9*+(Th@1-v?n-j%sqTo!bx@~t%Get6xIdACWcp7$wU)i^^AQ70g@Do;~`r!bGuxo(Jw!S5t +uHLUhE*HU<91AR=Uo>!jz;ubLe{5$*c$kQDCZP&fC87Jxm)S{*y7cefKRSsVF#Y_ci;267!V(prIgIf +eCD8C_Fnoy=IfLGTJNM%kp@79OY+0?(UVZwoqKWv&NgsG%kb80|XRUIC_(5&e7;rR=1r|+9%B%=k!)_ +Zwzltn8nJNJiaH7Q|9EMxedS&ukarN#z{h7NxCtn4&OJS0O0?>|NNCK;hrihg_rf{)13AZ>c88U<1Vz +(T=afxtb$aiJINJ>r77dQ--P +SSA;qbPZVF&?*^89+V#LOlRiLu~=IL;SpqMFPU$ONco%2q39>AdZy;D#SIJ((HV8I^^Y>M!_2Ft+mEd +ViuH`m8f|lP5wJf>@U-3)onPWEuUct(N`Cwtfv+ORt{Y +V)0$7}3{5M8tZk}Pt8>u&bn>jYBBj-x6Rx9*=EmSl3p2XwgXXm+>VH5^4o{ +MAH!e(z;Qe@EH5P+gMS{z1okmguHrGZ2L#$3*|P)S`VcIq_!KPgpFqqj@WYy>J~bTv>XVzsa;-ltb8O +JW-f-NN>?T)V?WLiuc*R2P%yCfmWs(I_FY^M`%&=uD!_DY?j48D3VDm&*5Z{1+wFmHv@?+89V8614ph +e*xdAYAPY3P=1N(wu@++bSj<*!DT>%l8$VY(N)Ock50y@OWHv%OQvrQtXM6Bg|xt{l}^!&~n=9(|WBc47T&oj5BV#AeLUi_55DdK)#J?6%gh_C1p(>jJk1oV({Rq +eDL95X5k|y*V5k`d;5PaCx;x4_uI~&MKN6J(@lR89wV%8kC<*uhF6K7!2BD2AtG +{H-lybpW#z(zztYL1rWiLGW_6*8s3JJ_;^IfF`A$5;nbQzbVv{H6}Yp8yVQ0vDXAP^l+)?H<*!+v;md +3?9ah0fVUx9~5SZDa=hRXY8oHW=Aeeno#7>a9 +n%Sm=!#qIR^(gM^XHSl_$gJbGW1{{T=+0|XQR000O8`*~JV2#vMhd;|ahy$b*UA^-pYaA|NaUv_0~WN&gWa%FLKWpi|MFLQKqbz^jO +a%FQaaCwzh+iu%N5Pj!Y3~U6X42nhH3ZpJyI4K$+NsGck9vnklkt1p2C70e^S`~`++dH$%t8BTg9^#O +D=62@HEYD$iv4ldGvff@o>o&_D_)Qd@ot;GnA6vA}X4aXuaIHZb{r&tGMQ?=@FoMACgo8%!(ZKJ$5AQ +MB7+p~~rLb^P*A`^eXyf2lQ=-B0tt?yz$_iaILqX`J9O01XC0XS8QppDdz5Yh|Wsx^{Uo{FVtepj+6jbPTx}^WtCFll?2zBU<2j}@bX +r6{?Sl&Sc22AM&_LY*$i%X +I5q(cl^M2!=5fr~s(ySg}h!p{LyO&`p7I64_X-oai{35Bk +mkaeJcB%iG__=W0zLX!ds#vG_5@2fMh-iae6@qx6Vm`MjOF9TD)P+7v&i;7rGF?aEGQDEcZdqT(5FC` +1#&F{WhUB`2%xVd@v+bu(1!UCMbt!Z(vQPR4E3>S=_1nO}f__H?DOu_nMB6lcg2<%Gr +D-_(c?b%kB!k$r;pDTnDTPCp09Wz_60H)R#I4+pmnBAT@Yf_UH$J1!U8q;x!UR +QUsDfTbHHFp^(N%(XUcbX*49goS7CsC1xu1?ZBhtJeNKefyVE5G!!yCEKw)(>q%46R!i`s9&(kCdkAa` +0D5%s)E>F%n(e$Gt?Y%#6_3c0GV-uk3;7)iOWo?qsfuBzfcl?n!@}}?tlL9#Oe-i2RJHwG=v=ypR^lp +Y%C`eaN}3e?9xz&V;cE}4h@|4YvI>;IizuP7>M8q&4CvLe>X|f1!sQvx<4V9mrDIt1sZHl%bd1yGM3T +jxEQ{aKKPB{12Js;EaF$RnuR%ZTc!UFdTq1vb>TPb@jmtU$dx}I4_ey)$(TUup^I$r`QNLIf9!Jn8o# +k$T8MdaUX3 +U1)PgZ^B^q9ccU3Nx`=pRr^0|XQR000O8`*~JVR?BT%7bgG!qIv)T9RL6TaA|NaUv_0~WN&gWa%FLKW +pi|MFLiWjY;!JfdDT66f7`~f|Lariqv`^5DCn@`x{T@6k>y0KW4k(%*UByo5laac2rvMsBYEj(e{=0( +agcKQuHVzIjY(j4c6N4luALojs;!4xYMRGMb}?4VYPR(hpKNRl27`@4|FqO)RR+r{Nz09YHvTp?PA-# +D&GUGfYPBfx>m=5t!lp@er)JA+S|xc_s_HVTR8(lSEOo4IlIk+a)RBPRuy3QZ%(2OAnW|Y{D1BS$B8y +T$E-RPw1p*5Qt&L>9$cqZG*3+{7mQ~OvP0r1eBsZUO+p5s!Q<+b%bY;I)#d2DIyR#iCJzva{)ONdxiV +SFF-~XKO>sgV{0f#izGHrSPwup71Tpdh~i^K7U7q9jRBqr{ +BY#`H@+8q)xL!-y~Taou~SnJia?9io6(ZY`i%*Ioc0j9lky|RukoWL8hx>>W!2a@+WBX^5E5r)7K~A{ +)_ON(>E_)AB68-oO}n(iT#2bgf)^!_OsrdHnd%uN%O#2e8$F4@oHCc*L{F +u~iQ1pi5m`qpZ=_Nxm#qtkYzk06(g8eHp>CBCzAV*xx^RcM=}F*?;@;@Xfa{@?fL}!KXaQm{5fd$^~$ +?Ukpa?%ZKpR-FbdAMf$?JvTU536iYok8}Q>T^LX%KxB-*gNM&WX3{Yz{V-={L8$ohCCAf!K3;M{sDT-(ap#7O2 +k?Myl~NYtJ6}iY#(w5+{3M|%$Vws+7U-JffO1zJX5bg-s_DuD3hGg)v>NBl((>eJW%jbDBU4i_>PcMIbd-QUoGGGPRfIpM)tr}n!4v+~>)=cNGOI_Uk5T#3faO<~;(4E@ +)KhMF{8=mca=$*@3V8Q}<6E<6v&T|ya=}mM8-;{{+4(hg#U6%h=#0~0Z7(%|yVsDS{V=wa%_&>|52GL +=q>?1SE=P>Ffi3y<0^iof+)HP06kvb!}TwQ8qwxt5L0=9u3sKsTImcGyfhLGgDsR(fR;5q(!%lvqC7E8}E4t`X>LSh0Rf(o-HvJ3~zGg52r3D5)7j0UBj-n;-5zdGxF~Wz3!!AMkh|y)?whj^1!HfS +>WP5_0eN+P+(Za#{6JM5>M(QyP9S8OP*hls$c?=+p2=9xiLW3Z#H%Y@_LiM@O(`1(DxE2-2QV!1rE^_ +YH?l;5yVefWcWz8`mY7x^>etrF$3K;AFBrh6tAsEDlFZ@_Au`~t2nki#QTmGSrpn@XUUdu%sRXQMVM` +n2$l~Gj{ehg+2*gSJkOf`Zr@LC+uV>G%Pd}G0?TrR-8O?Bqy(yz)ZFyrCLMRf_?-@rDf=TlaQ;UY()6 +AY7y+Ua1CqcMn`!_dW}1(S#4&S0xGyTi*hUGo4wuIPylSC)J0EFNw`aQLI|tSzgLBo9u(++45&1Xe{6 +;dGmDaGBRIMH}fdn3Yvj`8?(jEc&oaesIeqIwIUCFs`s38^2F$V?%p~ZtT%Zg+Pl&C+S=T{Z$av>g)aC)U=*kx3^al9B_j`r$z_|3dRP|(x@&a +zpsx6@uX$!=5&<{!i4?rL!69SM4ATfD +XE6w{1WN_IkxQLf_Gm#v`xgA`C{6Fsv_*{r@|UIzM#8{UOx-@GHMUsQm1b)Py?UANe9vbFp5286z?NzoaJQ)OozE@_yh$=ssTI*gwAT4zd +XQ}KJ2EwVQ+(u-Vt71H!jA=aBv~8vIK@_vT0XzUqnTf5Caw{DG==~Vz~VL6Nrj(-5fg03Cz0Foz!P;t +`+mIRsH&v?(Zf>$2_`4iZ|M9b=c7uOklrpTq%r})uq2IQZRC(q|~8CyvqsMuU#VwcbXNL)p7xRgaAmp +MCu~B21x+G*yf}GYJ-Z$qpeSBTP(o^kz67H&K4wWi%8Urd;2{`{(vAzj^^ +ikI;S?(kx~u@SJFzaAjj#)Uz|O8Tv9(Z}6XY80w_u-)N1#h-$O1;l|OREeu;$Pv5qLwoFO{9O&BxY<$ +?>1b<~ZKoK3 +{@Cv$zA5p9Ohwv7MCVQt$2TK6$Ku-vi2Yy8t6$d5!_?7w5QT4}|zSG%!3}THV`Ce2`lf;RgkYhXn`UEmrj<1-06uw$*GqL!C{`9Y3ugW +k$i3UP5fsF{Fu;r!7RJeQJP7)s;4O`%y3)tA(Ja@<|Mt;ZdcWaxc8-{0QfL6UH +3k8ZN8RRT5bCs8rDT`CZf|L^ae;LC=&4tbTP`34?%GIky14-14-W&%p2{2Dg9}QQH(3#Ri-;>jb#Rwa +|vj|l1-BeO~mqwPaa4a@xW!r9CI~QPgDlq^2)=;TrAW2<@e8B|3X;Ih)RS@GsXWH0|H!~0u1}`=LDRDm^M!7)An&}29CjIfIm +uGvf8j6yUuvd!iGOk1#Pn#=p1z8)Lf$=LwZGc)=TiBVtNUL<85VPwrr8j(DM^~fO)3*;?B^ziV7g<2w +7K~;52cfOcC42DN#(g0ZVd#P<#NhK3&b>%#}HfoNEf_T3il +OFpR4hCHt3nLYPxdDnt?6aN;ki!5NRFVWxG7${{1t@Uya;_!TSJt3JE8%Cuvvxhi{dNJ#=aFer8zU@> +iAdBEv`A|EGJED#o2K&GA*&r=0sN8Nb_Os#YzK>ox9#!C;~94~IDV*oY{Wov34){y9%RqMD1cbA1ml0>;GkJzX*Bxt)0 +7COmb+Sw#ALmgPUBKo?dFo;8l7(3&U8rU*aLKMY1B +OnXOy=Xw9vE~Nkxtpg&HZ{B167Mu}v`Q1ByVMvbiKZaNBizVN7mhm@wik;N(M%6i9$z#NuTF>O?qvx3@(Ri}D`yexccnc{aa(?v$CL1tv3%8yRTA2}WA->2=5RlNGB&15I~{dX1D%c~_Eyb)M%b +Wl;@X9YS_T> +^QTqSLuf1cNjKF#!@-n%~w{LWD^|M}HDBtGQIu7wLpv}=quWWA*a>Q +wsxjH%D#k4*Yf8_IuVXODP?mYY$4$>Y&hRH*qf +tr84kSIHca0ZBCli$Iy|Pt2-LN}C30k}gijZ6c1b+XM5qpnp`vYCMIFT8=*=sXvM^!p-0146n+sbT(2 +0p&&sUh%`9kwx2x`O;c{{BeU(H_1Sor3|RWSwL7LS-k_D_L~ti2XIVgo1k +$ITyJPFr)VKw71{za~hJDYk|BFI`(pK&l5}@WlX^e!|7Ew}sj^MBXAK0~E?vvMql%)_0$KXlPIt+>_E +nUpKS)NY@#NxB0yc}SpshAA#;8&-q;a1Xau*`lu#O)9p)5j)9VS|$LK75-tBaH5Q01^3IV0uGP9XKpL +vjd|pWhqbx*fFlcWZ@Gipc9%4=Jfs}>Zk4&Y|IYzv1B1IJII87>3K6Ih4<^{Z$KRBe`W(B0|V?*G+@&_xL2t2T~d3s|+&OjN36IW}gL@{celr;Jh*7s6fLF+L6h(O|eobIoU~!k +8GBNd+~^j$KxqUvXaKHzgh|(WN0t=O8$oEre_%oqBnf(ik0d(Gw5~1PulS7Voz|Q8V*8?KIZAyWDjk7 +H8I-72m;`CAWNL0qx4%UCRr;F<=ws=>#J$V0vzloh~4pN9SOwPy$VkLd&5g +%Q{%P!vnc}70nlE`$!G|^Z5#=8PT|d{qcK{j_*Ng2GwmfF!3v7nSN`R+1ouhq*F?XSl4G1Ci59=nSyu +#Q)DrY1qj=Ky#pmur*HNp#Epk$o#;AaVY0lKd11<@Cd+q_6lE-dM>NbOVKKLeLFc +J=hrxPE24e9Q~tn5QzAuMkRee>W767$?}4G%~9ptB3dvZa5gvlFDg+#-9TtqvflR!6A&(N5~V!acFXe +T>_2Vwtdv9r!6GvBi}k|0hz#2)kRGuWXhn?p+;e>F!&+{AdgczAc&uxMRG}PA2;dUAW7pwobQYabok_ +^3YoiCrQs>cqV(n8E}?9DCKDfdN^7xWT14V^V~!QDq2q8=6JGOZZdIbJcbL@~ew5p}dM533&p^Eb4y< +z*ym^l1X2z*Pu*%?pgM=YZQJZM|bXl5vWqdNexwrS^NuYdGwhkF^|>(V +@e6IuPpHOU~lJX56pi&d;c}O0jTz_Ul+$_WX7+j8{mm3SRj`D)E5m&YNv8vLq@LC$}qkd!19=`sTxC= +|LO9*VJB=$nuWMqS2it&cY<8IbvFP%8oQUjtU=Ftb`pG%6Rzekj_8(94^zU9-V_29SHKiF@gG_jliV4 +P7)VKZtk??-FuXLIEd1ffJOZ|x4QfHp1V}RJ?&e(JiwXa026go;y=b +aY$5ED!qwZxTSa5wC=CcsQ0~pwL2;>BRFd1~RecByBhl8)tXeEOiSZCu_A49b!IlB2h4cyP#1An1_)} +H~%S&1{iDgZ+Y*ml_K%JeO_t1Mly$x_o?*p+`jQ~rN$MDRBDoktvYlRX5L%x~`G?!dNpHdO&=-3g>$J9r0A2i`itHw>QBCrhBIqGnOBBp +cSIW)Fu;cqSg;@Ab5s8~J&IT1)uP;fp<<+WeqF!Uu0+Y^&t1T&e%d{?0lmEsz&q%ky;HA&4ILbJH;L% +z7)SOwzTL&ctCQOY;+H+leBAiPkBTUY{H>C!jl9_XuNrq|1JNV5PJ=^6;cJviw|tVCnwE%K65-eqhTm +{~D&vl`EzL5CW}#w)%jC)sjrMpA+j4)e@?*PbFjK7)2+Z2Lt6Y<<>8?N_+NaY&-~a*Bl%rrn90^3nHG@%Y%B}&!l2n4UiH;>qx*OPSDFs$)iAfFi0yV?aNJ0ax597GwLpz9 +#8#Ip?+Yz4MX1(_k?*F6lULnD2XM~SH=*=c9#@#(DU}e>0jdCsmqn@plGY!{VB@?*|%LD*q;F0avNi9 +C*1?jm~(3+t+NU0&oY+o5xk{hxvLhF$kseUObsGR_{T6me*t${`1TRhBLX6A%XogN*!K`$S5+oL}|eK +OoQeRFhhd~o!`!OQUY-~?z7Y{_x|!|LyP5`4sm4# +bxs8DxGKf;-{jlme)78cRvq6gba3e_Z~g|^2r~b{&6b^|2Z%YhzSzc*!jyMsinkewx!EyL_WYB#+Wfv +z&tWhG&+5aXj*kuC=1Yfl003xF95sa8g(UyJ*nYH!6wreQ7XBc+188W{li1{*X6L@9FMNr>v(`&(q)F +kxEv20&6Xgh1t#D6yCagp)WOXbxMah)D$kM+XFKD)THpeAV~@)rr?MfEmqAiSX||lVuci0irNOHJ)5` ++OX!w^Swfkh)dxyr!v*>`}T!y+DkUx;mtJY?$ya%N>P!H5)>+%~+XNu%#@?3XFLkvV7ILXpxZ~UQ&eQ +#kIr#GyG(|==izx92L*(SNSynw>aD9(wUi=@fNN18JTob-5LS9{iuH>~AkjMDIR*=z{kihOy2pXY+ve{c{ND4255E{~kH4CH{im}J +|7Xw{I@^?q?D{G$~5!JxZ9Z>~CB^G(4gDv?&^_z6~)4tN|$d{m4{ALrVDig7L`FNK&52Q&%#RBc9>Mc; +vTaiA@V942A8gb$Cv?H5{3BRosvdugbYMLA4@jQ^;YDVI8Y3@WM%w;SC==fbf&W2(QsN8F!6M0& +*LRTHWPKx-e^s%fR+Hd`E{WXmQX22>l`l1A_ly8^Ey +q>|vfliqHcP`R4VgdXP=W_wF7QX>d^IBX0`)c#C}f+O`;zc=_af}%nI`;xSuZ^o$~n^U1Cj`Yg%&_1V +$lw72T4A1S`Tg6s0vdiu5ZQ%UB#VvT%0XqUC?mez~(X9U7mtO|v|2ykNt1QXR?M(jEKa{_#o;_2K_SB +Z*d2Xp)ml7`VvMP^!p)k|;`Ju-vZDYF$?5D-`<4`u2czf`yrpJ2LYslx$($(NxNhi&8uTff8&vL5@S! +_v0hSMZ23~*WH7Q#PhD%n8?$-MLBY7cfbi;0(w^N{NWT}MTN^#FqV_S#G}2L>a0nel!>uG?MXRLDNUJ +<)>UTq)V@UR+#dZ1tB3GaUF#?V`4#&(DEp{-s)YtCq9}@trQ>{VUzO+D!}V9%i`b5=lwUAl<45N9#It +(rKK4n6BE@pez$8&vf%}$9tUh#AG^-+&Ykwt3pAMkv&AG%VfD^pElbndVw`yc>mmwfyw!t89Yp&XC&G +dZ_pX`q!yvv-7`^cw|0PG;zmQ~#zz{5CiLE_O<)kJSGjI*W?nWU>kW1y8nKsyLA2C)wHhCJTcfqI?nk +WCUW7iw{$DWK@*=6Q6cHU|P? +l~V|CAg_TrL*eNcsaaUunId%w=Qhn+m4OLT(}vsu;mW^f>Jt3xL2hZ-5UZa|#14EIB7CjppZZq^`zom +H`EY7p7Ye1HuZk9!>0nZgjGkHl(tG856X)(1N)HfwgV8vB_5g)AhB$y3t^$B6e&BQ?`oOw-zMk^6@Op +qcAEkie$c;P2wWaD!h@~*;`8Zo_Q*!6CH)b{bdUhNq&t3yjRb6(%OS;;=D>J^CNXJDWBYQkqaMOk7|2 ++8wV;oRyGUG)|6UKhOzmZi(u<8lJ)MklM5`SLDSDLm2phjKDn0-j3rr{S==aig%{6*KGHVJeNmwUjF8 +X=M|sy7K~%Zd8ydAV0-cQYgz~cXgoX`G**1V$Yto9C&@nCXOR{hg=!%r2ZLOGYD@x%cy$((bn~}N)N_ +)}U@2H$zo9!kO3wBk-qeFKqEa;fZ6hFa3yA&@&fKLS?jPIgL{V3!CvbXGuZgmqLfS5=E8URRmhfaNad +-P4RE8B63;&5ZFj!Ap!Z7n0Ov2m9YEnr_vls9(D<~V&@F|0n0?PZu2b|5t45(nhU8%n^`IJ6q9TD%jM +kDTVp+ZppP`Qp8U6GakiRWZC^yaFJ)%!`EtV5|n?a%DJDaPN{)0}=(UsaA{6QA02{?oGG3SMJYohC3b +EV)+MKlTGdlQyk3z=@_}9j3>?Vq-{~qHg0_zS+`E>MU?2Cf+7~aV{OBF^W%=uTT`fMqdQ3mM6Z4eWI| +;!`pgiMET7LB7K1=(*&dw~`Q)?gpGnIQa%LfEFuituT}IV6o@uG^=L|%#(iqahwct~_S1A==XHvA48l +ybr1AWJ*E=ZvQZ_v@~mx*ip32oR+k +h1~TVvq$e@7I_NPN`U2RJ6BjFGh3JcngrKXc3>sI2j~!p +vX499gL(C^}-`#w-bKp?}%xi{h@UNq}SuvR0GiYAta5nBq-4jUbfI%;!w&G|h@%KZZ9k2`hSElVfdrpKI{@Sc#*h=M +e5=%eh1h$*HSzrG8&1bQ#3VmialnmLobRX6)Y=a~=nE}7FFObvvZfvSIOU!G))A6s|;!lN^JA)wNFhe +I(Is%K0uJ@a=VIijBh0AKT5oQPlFO1yo?08bU&sM@iv(To3KxaOYckA~tfIUo4BuEd{9zS~IJbKiqYi +7pwU4KVZYqI0Cur3Nk7RFSv1&dczzayFfYDKjHQ*G5mW?7nG}*>5*DI5vF +8{^Hw@WeFH(MpW4S53fBDJG}%=+f-_aj!4q;uFtF8Th|MB&uW#*aT(15hqzVH!GT@In9Z^yJl}z3}zH +NOc~5bI`Q|DV6cjo~Ia3Xl$5f-cb_QQ>RXf*(>~~LQ{quCB_ +7q-wtkAJ$(JkV`?>ws&MILoBK$QIejaP~ +X|$~H%tr6CP6lvtLFUhJR9HD+i5mgEBE4+t` +Iai^WPi6^d9?`N6e)%470VHr5dKIxtU6Xxm}@!-fD8cC{v@17wyFJ3l_HMn=$dh0QfE!?Q6i;`^B8ur +A@R(F7P>$17|0kWu)A9QLvRm6&J$|m1UsvgDqkri}lNc5` +q4z=6Iw2oXZE}g(j?y4bA$0ki`5Aq~;bSKdm>^cffw+KwK=7HL1ZY|Ru8iYUdu9})mQ3w{m +gvJs*Z-jUvnmfy=A;bN3X9?6e@T^y8k`utRETr>C-S(@YcO!B-@gfEJ@NR6VDtvJE@2F=}$$b|Gu9CexMHf{knGQVB +YDqLOncak#Ng{(UOi3ax9D_Xx9yDmUthr17E_jp5!qmRsw9rlWh-rsTc2QM;HEPYBpy%F<|CvaO1bMn +tDt>3=QtqkBvGT4O~^!>oaTD(sA7Z@o3fv+tdy}@6aWAK2mt$eR#Tgz-!<0&000>R001HY00 +3}la4%nWWo~3|axZdab8l>RWo&6;FJE72ZfSI1UoLQYZIC|?f-n%p_kN0oNfSaGT^#&3xEbPROjF=Yn +v@>iRX)E}5U|*-@4dU+`zfWZRZ4E;RmkuXrCK01=#)y*PTCgiNtgai*qRC`)^lLA?WpfGLk#bR$D%@j3M`r>@0+DqpYLHu;T&VsYdXJ3XCLEX4~@O9K +QH000080Q-4XQy*o!4>Sh=0Pq$703!eZ0B~t=FJE?LZe(wAFLGsbZ)|pDY-wUIaB^>UX=G(`b1ras)m +Y1p+cp&4=PQWW#4~XG0aFA6qfOdbG$@*&Sz44t*{mf|C8=@z_dS=C_>k=)lU)Y`!5W&v?3;w%SqSX+O)9LObQsZr+65Uk=hR{EtS +|Wc#dtDNStl8+JMfSPt_~Dt&8$G;>g6TeAay5#*!P%nYLPst2yEVV%%>QEyV~!*|W45$uz)&)v{E$)f +(CwbC&>dtrBj7LCxNuf!@Urf7v<(c$>ag?qG8^(HLAK#+iNurOf`(_{pj+JZHeKJ$T07c;6Ji$R(#w{N?}uZWBKpSQz`P +NDD;+8qNb%yJNrkyet4=P_&!HlG7wzu8D4`ca+0i5-`BMl><(N_nda3{J_X!95aKA=VtiA510*yNZ_w +Pv*}(GtiIj3wiz4oEz1C0w|Xa?*teFV)zrtX+Jjk!aXzu0jI9`$czU69-8yichK+kWGUL@+y)CCzP`3 ++S}k+IaKf}32-@zNlP_4)6_-M8t3Egr_b4M*GaN!k*Y?q^UyT!vjQcf;vRBC)u|2*nt4|DJ%-ihN1}49 +25zc#>OouN7>qUC=}8{<=2dTMJ00YN44pYscBe;DV>bu<+Q%!1o*j<8?kYVms%p>!QdlJwGRxz2jI(y +_aAv{(0%tm%+^3#>fJP}CqkP}$rMIi8>((Vnau^5v#XDg#bD;O$>lL-E>TaokWeD-;NAZ#juImR%OK< +0{G9xyV9b&-o07nEqX~iee#VkXTTI=YlekudEz$2QgkX`^g=4<|E>_`HX2ycTyoP@DdBzfFF131VrfC +?t-nMOXAr~7TDAW&>UGa_P3Gr@XY)h)WJbO)5VfC4`;(U{)FPs#Xtm7@S=OG=%AK}nnKYw0>;G>y+2) +M2e=!Hd}ktht3cUbXG_3c!sEUD|csJs-)F=uyl#vVv`4KWBO_`)3t-?>HO{$rq?Ff45f)~V1P~NB(2P+hGMh&(OSKa(@ +P2y$cJl4H9OVQTm2F2PEmI0otnJ(X4=7f^Ae37rSc|^IK5R;T0J|$K-euD(@?__)A;wtDu-@I?0ZXv?2w=%(UIB6Q*L=ae5ew$8QQb7HE*lJ>|L|};alKz~sxSN~E;5!7r!^8IfdiwB<1jtM +EK4B(99f4Y&>ar>4kl%v#}wyVE7qQOrm&hcD7XHQN`!i14Rj!Mhi)8TVW){VUCAuqah|!cVLYCLFoct +h)UTGDz105+hQ>f|2H^VhL-g-f&zlZIDRP^l@d@6aWAK2mt$eR#VFXU)|~f002}4001KZ003}la4%nWWo~3|axZdab8l>RWo&6;FL +GsYZ*p{Ha&s^TXk;cW8M1%EPHLjJK2g2gZd8@H#{2TBLQO7!+5p#otw +ptQ6U6A#BWQEWR&Ofp~CTG7-92y#XA$#_SsQjh)12#EKg--GX+9?)AdPRsAVDF~|r4H4wqQfrb}&7sf +8Wx$b%^eVxBYT%cyO7=Ayar$m9+YC>)ZmiAJjHLcgwwF$fDeEgftYr!HH<^ZMwW_#;qHZ!dt! +$<0GuzcViltDh<0>pC@aY47(iNPbU^ZM-_6`;eDPs60E9#U03!eZ0B~t=FJE?LZe(wAFLGsbZ)|pDY-wUIa%FRGY<6XGb1raswLI +I7+sKvg`idI)!IB|!Gn;*CK*4&)lc15!?!YmS%rqJjC6-#1rbsS}Y*}mg-}jtT_Y2kCvlBiTYO?Cosd +K+nS)97IAK1RFYrY>u+sK(vuiB3H<iop>|cHix!9m53Kx`$!f|dE(VDb~Rtj +7(Da*toe%F&3pF={+@SbkH79`OIU1Qmr^pbg&)7{d57~B_Sf=8!Jp4Ruw5xRQ!`)%R@OD+W}IYwDI~A +h?!tznknGe}W6g^hP5;pi0}_fSZ=8ZBkL_4j1aimOv23au#)u|>#Xd9_0=FA?yBf&HI-ENkIqUTf3?K +k9^t=SZvr@7WW;_&TBi^H#C5C$NyUj2rB{WdR@Xe{g$q6tVv@sCzCi=KD=qF)kwdnA8|O +hIz$$~o^BghR0=u3kRO1Tq5@95imqnTH49@QnsUV(An4T`fsdi +xnxZ{FbUc!50^;}g=nt+x!n7~OjxwLe}KVpCg2k+z$MI7CaFEJu9Z^kYOR1Hy@sD-4T1-sOVH5$WBFk +0z-QFvV_R3KwLRyo9EM)(#(~QlHR2uH3TMBzOrZ8U%ZEU>d0V%IwL~uqy`vw?{gK`%5Z<;?Bh;#BLWW +k`A+zfh13IHo(SRJ!hGRJ}?FWq6u}}+#{=PkRfYMIXVh~(rH-VP!v1!i@^8fwNzCXA9qgzYr#Q{4ovG +rJSM(%|qzCs^@3^hx-Y3W+H*%EXCwu)<7hPgQ)!PSV?Nv}x@;qJypBO4H`_l*mZN^K+AwqeBWV2pCZ( +L#f1=BIABthDoB=Ob@uJ*Q;2iN*;B5ln;AZf2V|uv@kOxj!ETFn^EkN(=<7K9?7%)?I2@ED9t&zj5mN ++4&>*AsR3&sI#Q74uY +Ll~UTbjDew$zCn}WAQ8kC-e2*sXfYZbz4P~gMkr?qJ)v29HY+q`3p9%>_9V(R{#sgV2=iA=MJ~%=3fV +gM(OSLShL(w8cBbxYxR^zD>GqbG&%Cu?h{88Eh@i-!6+>1VmbjN&0lLknLU1P+mD=gFW+F_j!m`M!@t9oU +23q&7X8^Fs@@mC*ZT{Qe&Zp`Bw82bd#Oehv%d~HWXb0RbNY^&c2dcPv9AyfgHy)b<#D43G|$OS;{6HU +VXS>$ug3V^U7$aa;-N92ciZsy?ctz@DkrK!0N(_Gk$n{VN8DyV5HuUstChg-?zxo8JDU)K+hC(Sz}C) +XU%kMxnp6(B$}vgfeQZHD9njSbi$3+pCp|CvL_9*dySrD5|2x0{2^lUH6&eyN`Osf(0;{IA-iLbk{`- +47Mtja%@K0YzaHHwyBiRSzc9a#E6P&qcb~fE8kDG>{H(9KJgg?OmU?B{#@&}9pHbV+~(OkEjccaci<# +D4_?i1NH5g{TE8}O|b6u1_OGL(#axY*y6hOVcHBeh1-*%V9G7PGXs;H6Xuk6rRn +bef{?cL42A8Y62rT}~(;#kmMKAXy_+6?W+U=ik?<;r)i)=9C0|UrsyOlC*j9T8RKYXNOs9TzxZSWjZ}9!MaBws?q11 +1JKL*Pn1p{FpukbAT$&BeO_+ouUy8I|Pkt;9wnwVvjIv>6)a;ke>I(>ZZUIEn;VPErH1RUBwn>DPX3g +tpedLj&V`L&;|JR>p5o1BpZ_F$335#C{!^LrCzy-fATh~u3Tq5Fvf4~XQZ>-m8LG51`XV2rlXSl!r#X +v&mjKp?SAFrHGb2^e_<6l|*@e=9gTIr-bc~CD@2q0>Sua>WAp6rN&?IYO}k90f1L>SbLae@@-5 +*u9X$DbVPL+JA_^(p^RDABc4rG);T%Rk=QIi%gee&sD>3sBMfQ?7G~k?GPABDR~&X-4Y)j5F*nRSKcW +LMK6L|vN13v;%-a>;UT0{brN#|6+3($bKp$7g4A?hiOcUwNaV5{y3@to)&f8~97I|ht+Klm{yvSH_JG +2Fp+KhY_e0jruIC4lVRibgOFYkfkO;C$3_rpkqJ*>gXLS-|mW*LFfbwp}AL4E>ZaD#TJW_!`^#}n`cE +WO08-k_RSTvZ{x`lSJNC?N&9c)93V=S|9ql?~&l^q4+@^Mml3potTt_DDG|_f+s;+(CR{K`^?+WcgpP +U=->7vIynfd;_*7wu1(|+J59E0H4=c5PYKG>fp6Z0FP8=6b185sC+vpqy2q>a)M_5*w$AlHgv-3e%fBIZ-1NKCS>3*sv>$a +ZwD2*P`eHX?|2#NV)eaYlXtcI*hz-in9}qye)7sMg|<6Dw|RLVDckQpGRqKKuUXiT8hx-WTvNUiLNS< ++=t1PKgQd;Wd9Mo54f(`vQ20%$G!5kUXT;FF?B%n)$QzzSJIeZE+mYZgL_GpQ&ip +O>3*t{lAkJbqvR*tK!Jf3|fW9m#-~IfSs%I60b^op)gX-3o9Qh{mPU;U5!+(D3*88`zV7CX|OH~mFtO +kS3`2+HB4c84dqf4xOC_%*7U&=>BFN{Ex%Le^GL?6^FoDDX;1CqP7cY5u36Ii}c8{F5tY>=8@CnjuzU +t>HUMGXSLRYYbgbW8S!HT(TdWP3mHQ>!IVQJG5IV8|XGNaFIV;ZyNCEn_Co(Ijg4WVoHDP%8Fp2Ub11 +zJ27)##Bdx$|KtO(7Nla#yc6|&-Wb!sLg2+*FPdmHYhV21px!o#APoYSE{=5l&RL`V+fe>gxVb7W&JN +=B_p&F+J30P=$*>miw?82yc93ro(Wa8-@LOVykAbl8NPhvgN-<#rISs8V%wfQNeJ!19x4FO?WuYkHll +U4#>O|3lNKwMVQeH|!0F=uWg3%dj-~1;GJ@;VGX+H~P(ffaGd~(1n;qmnW^)}o^O^MP@jg5CYWDtO%w +AJ&_8+gn^q3Y^%=5bHv;VxPcH=+)j{>!Mu6+6xwdmhwH?J;N`_I?M=PTAPAV6v#@d-|WOcimjDc4kCz +<;t;r~p>tl<*);Q@yM`<3D-Tn=WDJY2nPOye3Vqig~5x{~B?;Qt0-dbnBYJpZmD5q3uD~!i`e2agRN7 +piyF>W1n(6s9fti_Md!st8xR35{IC(8~MS5Ss{~yPoe!rhy6Cupp~e7uN)KxwJ!>2-T?HA4!f{$V%(T +P)k_W`<2jd?DDZ49C&(|7+)&A~O%3(QVsi|{Gngwd&R;gvsP<33AXU8BD%+tL!8V^vU%srtpH~;NQZ@ +IOV`2n47J+7L>2K?{5m*xt|Er?IzHNt?Pw~No0GmvQ93Rsq_Yao*cVA&#@DT#}xB-rj?U#Sen6IP;e| +I0%?CoD+#gfWIKFMEDq0HBAa|WLEws@OXH-1g6(zKs42dQ|GHz7VZKL;$t%7HAO%qbcw|1_8{v?>`CJ +p_7mpc1nHuxgYCd*Eb?o>o_WoY=!30#BS#I!UFKcvZ*{1-j>p2Ta$(Xz3@>W4)BkaoXIR@HO?$2fXMI +%U@!pLN?Q>CxM4qh~Z`Pz!zEFauA(Ls8I`=zV<*xCT?t8A> +8Ov_9XqQdzK5i-k$*nPL)R3Q8X3@wj#$J5qQ!nK3ZiNYl8)~bypHid +3vRZdUtc5)hwcr>O&zm5xwoH)_wNmu6ZIYP&D`m-V@6@lFZ@dj0tSP{v@6_8@qI$Mj59f7ksW*@+(`9 +JV9E%tY!T6D`7w(64vA60*Pt9puhjmP%TF@&-eQ$qv2O8xE`^8d=E!>D=oiH>$&IhCvi_{WkdVz6wPTT +xOut2!&H4@D|W&BQeeijnlq><>PE1s**uZ`fl{E;N-(?W?~9vyiP63!)9fA4&%lhU@S$r#6c!-a%5)L +`rZ>tOgoRp_PC9;H{21b$(*0jR+%zZ&q3}F-JDs2vQGJh>RG-q3_FOA(329?P%}e3`dSYa$@Z>P2W`W +@W}@D&uAb%&z9V>r8c9D)0+x6)+IWjzG)&Zl%mlfUqh7OyKKv3Sy%*mx+bDT^uShlITkIwrhnZ_n~mj +4TIsdlMSPXno%zR*L?;n+`AxM#)zN!(Y{Ea+jR8ktPu^pvX=5)41M8A|D6h@3*Wdr{cVTb#Gq#Q5yLH +(2hy4heEjtK*Ko{cs1j?=iXV|%6)l*rI+}s-st~?GV`)b0SYiR7&btY*#89i|GJ4JD7)~TD1-ME8flB +p)4^g4|1*j5X`_J)066=a;aDN`NrYFUNqTaqWC3v;gM8;B=e#Pm-`EzmI0R?S6hZV#fom27KHbZ?m|) +m}Vi8X(gE!8G-3yn9h$@O*5~L(bChPbcsoD +Wlwml=Oz5hetR9^7jh`!?~l-yb+1Ia=gy~D|14nm#D1?xn+X#iw&i5NhDkY4-tv;!SC7A4>kp}$oj|2 +Dj&>TV6I$63GNE?f41_6pI^qCZ7!so1_(*J;&OY{FaQ$)SUFpvC7@r$~ESNHkzX4K9#NDsMI6X@uZ^S +a>K^Vr9=JjZ&SSBZ`ncDb;y6P^AEjTU#CGxU?hXsY8F!=Sgq{RdU{8biD6*DRU&*I-dX>=pROR0~;T| +lkc&A?cZ*rM8}=JQvN#R~vpHbt?s8{p`M-B|SzZ=6+e&geSse2|^UUn5Sy^+TfGHG;^FnSmncyXa2`}rI-g +o4L7X>DY@k&PVKG|$GNfAp4zcN9uG5uY{b?))~C;H`IY=A!7?e=H5)9*nl(Il!72q&g;NUacHdWSM3# +*L9kF@q>#6;n~5FR3gPUsTBrBR)6AZ8NbV_Y=&n-E-hTdNoEnN)H+hkmam)IMtO&a +}o2(QePQ&yWw7X$W6n$&Yw01Mdx$l3*P*V`NA{KwU2h!bKP5uF}pphRIOp;DXl|xm8*2pcqVe}@k3v=?A~m}E~$jLN~b;z*0S4$g?0Uu*f$*=)QNW((p4DJ +yBS#D5#}{1kLwyMso|=NIP`K%Q#>vN#%Vi76;3Tpk*=WP>Sb8}6Wb2y>MVAtWE$QJhH0`4M>a{l8Q2D +D^T}uM6F`!)A{AJjA2F`G144R1m#jZ6!y+|BnEBC*JT=27hlta)^O$NXMWy5mRk_XW4=4B^#1bnm{-S +zQ-M!gKAKLd;_u_~SpzIg|h!d);NSIXBJPLB>1ipjK7 +UGY=P^HgBOU`7|N7gIGGE5ZTj}*a-WAf2fi+s^>PT`<_dTs%XZ_Vg&rKc$?5MTMqNw84e<*kqQFeN@d +aJps8*tNTjyxboQZ{-!?>^EeS)8xdEbwl9Ar1ao +SD0NlOmd3cbBjm2Lg2;|QV<@k4xaD(&#!_drwMrp-l5w#7TGZifIAj#v@djYXgF=@`SsHJBb(Cu;mch +bx73~kzB49t5VvAI*37u)P|JxTA-u}j@nzJXy33xy`mb}MwR$)gH=Kb+ +gcyeHhE`mOF)Q)tlAaqWJ*0QoQa4 +IMrx%3cQUAiStN4hz37@NIrS%n|VBT!j-Mx%Ugk%oEC69z`FE7gPp#FC4vv5c4*;KBQ<<$!SCDt?lA% +Wh$IbS;ySXFE`}X?5hPWTKu8`?6tv$-*sZnk?s*9Ih87qcJh&WqzAg$~GoN+3&V;`@P$tLI#MDMh>ef +#?>7z!8t@#L(Uo?Y*6U{f?vX1(y`1JVfcXOKd34ul{nc126x;n;t?p}>KG9)bzDyCR^axnjQQFygPh2 +^Ehn(^Ui?p;{zpMmp#P)h>@6aWAK2mt$eR#N}~0006200000001cf003}la4%nWWo~3|axZdab8l>RW +o&6;FJo_QaA9;WUtei%X>?y-E^v7R08mQ<1QY-O00;p4c~(;!*Dhyc0001-0000m0001RX>c!Jc4cm4 +Z*nhkWpi(Ac4cg7VlQKFZE#_9FJo_PY-M9~X>V?GUtwZnE^v8^k5A0WiH}#XRftydO)MzL%u83&QBVp +_Ei6sVOHNga<>D$Sss)?-d +#=1#0Q3jD`60`jODge?9g&R&&}aY+pus(4=lObD$i=c^Z%$tS?il{_uk4R?Dn-WL@$5@p9~}BH|H3X( +S&A+D51xI^+oQi@|M~X{CTD`Z6-CM8F2Eo2a#?fs1258i(;of}a`0Pr&A04_JWWJ#a0nnDWGu2$B&^Q +h6|0tlovnEc|LBnk`w6JYJY#Rd6BZ!ANDqz1zXuH4yk;vvn&lO%O93ck$>uT@OgzM5T``%lIA5(($+K +9njjWbLMk5IU#m^c=KC3uDbAVsN)7*t)yds8|RkfbJdbQbXLQaf^d9iqvDxmV!hs*PetDB2sV3xpt%u +-R7tPsD{vVdjIwv4ZVmzd9h!<27WUNF8W1dLTV^13NxC9}nZmHE8d@InBVM3z+{XLaQX%5Vnjbpb$BJ +Y%D?8+Lg!VsFoGE^j7)?d8WSczVyyu6|~Jy1aTfVFJVi +WW>X|K>mSAi6RsU%Iii5kAZov7%JBymU9`yy0S&h7lJMFdr@St9JUt4N|v~hC9szOmQ=1}#VdN#SyXs +%00i@*V)HtSt2|Fj^P=3^pVhJuJOT9fg!_z%7b~4uNa@jOb?vBJ)gic2$9FtN>s +}{Q800y#dT4LtYVg*ss@>;VVU8Y?U*d%yvS?VKS6B6+74i)mui%!DVxoH3!qybZD&LC* +f-^+mcf{wFC?Z}}Vzq8>)&OuKQr_0&E@;Pcx*#2U=z#R;Mh9rK6q%AzRElRMwc)bbM^Xf5eV(kMc!>v +_&r265U(LXCJqHG7LY@J`lDDPQ0iDYSIFOzJl384c6(R(0{S0iDKhIwQ#|sSX1@)4}^vr;>MXj?=)98 +x?MJ%4%!kK_g6Z>qUhSV&mrzp+aGU^2b2e5R-Ilv6r#6G+zKutqgQkRn+pno(UdU?tN`Ab%AXGlIfru +6W5E!HWAU=bt1ERpC%VYiJkUD8TE~4`vF3us!{C;}C;IE0+KxXu2!2U4mamG8Yl*SJZJ{1sPi{yOWXQ{{n;(yFePuXjl6KmP2fzKy*W2FZ82k7cTNB+UMfgk{pmSTEfVQ~vLAk|? +0jDDFv^d%5-l@(^W!F=MR3S%D<|4bqj;*X#+Ojb7fKKBw1gPaAA^Dv6y6hs_F@GIjh5k*fVC$oOL6%# +fZKu?J}xvq7Q&tTFPd@Agbgj{egGg%3E6C@yZO7R8PqC4#;AB15z{`Ya0+PEvHPL>wTdxTU>+2}2-+- +T1Tyu%r&Kx|%U^U`+Z(-Em`+%{^)l9%A3i$K2%7XplJB+JM$6B%wsW18VWhP`n8TmzT4YUX}?qTcl(8 +Jg_@8=VeOSxaE(psnsW06vNKi`^F6vjv2r!G+0A^a{Wl&r~X^?2nE?b&MsBUx8?u6x-KoKcMGU#vP0;wRicMIut!uY{qWz^bh9XlB;nK0Pg%5k+mG+E2c&)kkJQG`YiMN?H6k{EHyzX_GJi5QbQKtGovO-eoG`rg>-KQ(CM{aG`S<6T{3_Fx2vxs+pA52hMo>wX +}Yget67P;f?sE7T``kL)do*yB8>$ieeRhT&wfI3}aBC@StmqB4jm+6tn0S0jyDDa8wn9cNMBJocE*fO +Ab0WA3c(^o=zVZq9S9&=@TWx@jn$$BU&mw;tFvzbl4uZbsI1eOrJY?v`jpWM=s~^W{`1vMA&^W>PXh8 +^f72uQ!B2+BT8~af$eD0NEGEj`{i+>^h*nY=FrBd>c6aid8s$%E){IdO}{KI>R*9vqhp +cmqke_Za}}LHuBJsiGqhPqZAl&`!NdqQslLG6b!m@LWV)8CXC)pz4QflQ51R6=X5Tz82nb9ax#V`mSo +E&Xtzh6s$%O@Ya#E^it2S}b-PENh{)6?;2?QVWy8^sJY8rIpZnMV)@xA&p@1^J9nb)7{AKu6FQ$<{4y(h22*5Z1)k=r4kR-& +izu64jCVG3{Q{=Tcz#sPmIZahL0`y?LXNF`K`Z&bO;XY>bFx9{%! +Nf5c#{wyE7fyUyuK*#Mtk0>(>Z_OZ59O+rwJ}vAl&(k|k!l#$+SU`O)}v*^M`RGm2JkbM%6$!GsuLF{&~ZakFAPw=#_0o68qo^@>{xc9xhse{c4I&9 +o^_V!%M##7e;1+o6SN#Bf*l^BMTrv~L9f_S3R1ZO_v(4hD>mBwhdsbe;9n2Q6PP010?*5-oo#I@~WJ9 +RUN)4sYk?xj0TIaz-pZF6*1;TOCbG*nXB8;e)1YV#6V(K?3rJX#aAxDp``Ib~=kF#4W@(zOH@2|TL64 +^q}n=G~lNcP1>Sr-7L|`g#e!bi}q8Zo52l;?uvaAuPoxZSe=FhNIM@$A21q@Q3svYj)NjRE0vlUw!i; +!>0S#rmfDYQ?nobaFpgCLM#NC%f*o1IOm*W=XSTOa@#jM!1Wfj=jhkXp@8?$&)U0*qxQ0U8)*S;6*IL +xfSK%gf?bo8JFt@)x3FuHb`54$<05uVY8*p%#X~l@3!n86{}^;_UtzGm%xCPDnsy%sIl7T&#q2v2!&T +d{?2X3pE-zi7_A*1HRH*6|TpAYyksEfCsO}D(b5fO&YTQ%`gtWRSS&TI#LCHZTM4}4?&QeqY;Rc(2{f +jp6)Ja&>Iq5h-=ddzn)=F?|?g*zDn)EvAUFfuO58~A0eTemtgMGYrxk78DuZQ!|9|n^m +V*$KkCl8M@QFx~hPmue!kdSshT5Wu4*JJ18vNZ($?14}l{n%JQ4~#C&HiGGa(aQPgXhsi|Qpd+e`<}+ +%j@nZFZe8S%4Od$$V~n_ES;@F;q+EsXWL#kh$#@^nqo|aaah6D`reHlShy1zDu#d>W7&cYS+a$O7(aMsSO!WfHgvgv^ISbh*gjaWfK$RM$ay0{n@mla+=5?8F5vE+yeH`T?!K +`i~D&74yRzr0u=5>mNxK~)V%RtI2uJ2a9imfWqQQA}zyA4B{0jb-uHhgQaQ2!kG*TfM-7@Avz=@g_Q6 +mq)3^d)q3q&Po1LOGGY-Yj|L?YjK~nPagsz^hYo<$!-YVX#~jYk@^!*b=N80$y17(NRAhbqoN(Y6C(C +5q+V8Z7Se+DH-j^#@S%Tok-LBTX3SAFq*&0@8M^en^F*uu?~w;qt%P7tP4SRt^L>l*VZPFYAyP5AWKq +V)n^NNCvK@PZg?TIto8o&NE;TyR0ONc$)R_j?MC><|U>RW>AQQi{!?Yi +i+OFA~KgNZEQ8CFSJXr9Jud1N($$4k=L9&Bo}^G(L?CG1r0+P6YM${wSM#dt>$sJrtXRH|W*Z3Gz#_> +Fs+;MG3rH^_)D7KK<~A%||md4U$!gT|px7tqAL64N+zy^2#$*-qPMO%r|4CWQ@Fw`hZHt7oQ2PXSs_j +iiGC;;F}{7Z9|rQ{CO@TKFFKjXgKM>OMp%hoiOnk`|DjHLxIbqS%_`iqJlMXWKuU8zwVmSO@N+d2rOa +>26LEL|v$jvU)WW1xx@u$P1rb0=tH1+UEk|G<^_<=!x_D>xh*w}W>QHJ#_aDD{|I;hQr(sIf{g +Mw^ed>IaF7PW^)Act7!96)O(shVHf#XG1{!;<26*u#K(aJ~Jy(VJ^`w8Ql#eKU5d3_?G|+MBeqqW}cn +X_#=cu^wiqnr0Cjz@SCghf-%K?yjR&-3_MdQa3#}%;WH&fOnMk4U&`aq*dimo12LT*m-qYoqAWV`lhp +QlJQFHn}H%}uLFA?xZ@kYLFd>JmEY&M(ElzgF`FfR0fhHH{`#pwkx0vyTjnK!>NN0_0RtYd)1yh$*sMp){{V +gxE89%ffg9fG#o~4V0G2lG*JlE*hMKbgK%ddDx1>nY^?CluPKvRZ&y*fxuumY_*n1?(0egd6;$DEb4= +ltNnZ_cvlLXd;7xA;9-=dWj%2C(!PKXvB%Z-r1t*+wPhrg;ZAi;|f|~-bTE|sDHR~R6O_*)sASbls&b +MUhHd$Ss=q97qwTVWr8?xW)?Nx1w?lM$%gF&FrgBRobwEfa8M036w65G21F*8M5Sqr|&0es(Yy{6S+d +cyi1uT>WX^{HrS;UVeF>(dHud^68W?qw*y}K-d)|V$hlzdZ9VyObm~SD6Q^mSk +5@j5eVZ*OgH+4T`lUFzN;%N%Rb(DMu&rorb!eFGY% +CMArcSxQPGM`8?p)5>Pt@B-D=smkQQpwRh6!&6mTSM!v2?BRlu19)R%!_9E)^o9QD6{jxQ%F_trvIyR +g)EAnY+9G-S6KVVyH-GvyXGV4ekK6(*HRu4TAs`X%i0yZRP`fE|Tc2FI~QnVT;Os+IloeZt44Uk>I0j +k@tv9Of$kypJ?p^t0SPp<<0{r+ZapF{3 +jEPjKRJ}{{?|G3oxvIetq}fmyLf-K4>jNHlj0*5q%`Q6;%`2P^9jn=F1ONc?3;+Ni0001RX>c!Jc4cm4Z*nhmWo}_(X>@rnUtx23ZewY0E^v9pR@-jlHV}Q+R}7pNDNvL& +Eeh0yi#nIZdb@Rs*h#Pm0)duCHn%dVC8;=W(GTc%^~XA-F1CEh?xGLXgH3X7XNHGE9>Jx|SBlT(2F}m +E`5ylH+i(;D;R2OriFdTE@UF;60j`+%D2qK}spkcQw@hVnxh?+ognqt*TegC?GMl3Ej!5M_Pf%!_LLq +1g%p9SgvxNRCNeK4@hD!nG(HZzwp;L)E!H?u&B@0-PQy~o$8p#FMkn#)xUlPm>Z~=*2pS)6?a088HVml4^FEl}h^b{owL?IJ!O|uulC>WT-VL{8Vs7X +--zaa>A0Z2_ekb5~Kn)Q%Eu+E!L&thKpGUTBc^n6q1)I*GBP4VOoW%kx{;z3REg4pwl10VAO$&{%9}? +$;ZQB{PyN<3=jR=+x~DoxE{gHEnMCVuLk46&5&kqpg;TozYK;~At05B!r)7;EPevXZ3%H|>or1b0Z3& +DNavXFlqZyzm=$b>Fq6-y1f>Hxss-0}BQ?RBl9!AxxM9Yv>?9R=9tD)jKw5~zNSWz+L9d#jS>@#0OO; +#z(<_m13AI*+n0uut=Xn%AqnJt+85AtxW>xF;jlo53er1C2s?Y0RFpalp)T#;mn)a2f{C|n+$U*+BqK +kgXvTQ`vL(h9q#3-D;5zwm&5{*|m-ZSNQ8d)cViKHs`Dh+FIDHwP$`MYP?c#m~0>I9zWB^e_k^lg>v{ +Qb>h1YHm4n_>!a%mp`b>}$-@u-u9+Y(;*2Of$*MQ&rW@;BO4C8z-K}#wDZe3QJNS|E6fzM=C;YjwW_T!VKYm +`ZrV{4?WX)#m-^{xZGF6*`G#muT}r8|PVKGRPJe6#KiQ@+|Z6~#P4m4gO&|Xsl#zW66)XnREFzQ6|}wEkDTl-mbvO8GZ +dcLqEjmVahbv{SL(02KrG9z-H>`!*Rny#Ppk_UKb)N(2-Tz#X*4m`#y<6~h-O67RQkc5h?&Mi@Y_Dib +o}zK?Fh4dC3D?nPr)`FQ?t+M#)+w+#{yqW%*s0ZyGY9_u1^(3*+#K16^d3UK|Js_x&^ajsM>|&Z>QB} +ItOUnT8v-iazkI+H!1@AK||j^{|dY@6aWAK2mt$eR#R0xYXyA+0 +05W=0015U003}la4%nWWo~3|axZjcZee3-ba^jdb#!TLb1rasomF9P+cpsW?q6|GFu(>J*>Q_~@Rki) +;w|c0dx+g-MNufUbduOmBui3p)S~}=M_F#|*&B-KgJm6`-o1M~p3dM(>BjJ)bTAoTd=D>b!BN6BlkZj +CJ3CrdwyYW4FeB9FpUcnA>E}7zvIcIH$k6o82=bDrC@p4COA3K25hBe}x^*i<_!EugO2Q-@L*D~}ZYd +c2Kn#tlp(0YL9Ml$xf?LSBK)|OIwF538Rh1T;$rNG3UD>ATNJ64`(^06kV}xde*YuR{mf#2i#^$?J3qBQuVjn_{ixwjBA@7EIXKtQgxf~>}r=RBplWKpvMp-_)#B$WdiO~tL>NK5iEViCO +Jj=45+R8-jOQ9@-L*v9Vux<(UKuSYLaG_2T@}#6ZN +pgV7?k0LKX8p1XKl~;r_oFng4@zlpkczEEw;Qqu%^aunRpIe8o0cK@s{3S23>7vuU#3mF%*Z;i({yDr +=gQ$sLW17pB+QZKJ+>Kc=-iSe<%N`*y7RZDTCoVxEK$*9dPO!{NIrUpE}IvPp60npM#FIK$oOUh&4+e +63Hs;r|W6gbm0{(_}+ONhT(7*jAZlfFli73zoGLZq$7g77NR--P&2ZI&JTEE>TVB?bDCOhpl!c3f;K9 +vQ$pR}8`Opb4DRp!0rzwirjygvDwNJr*S>w%Mx1HBI=fq@p`}q~L>wlG7v-}j$zZz~+kq +LmZkEi9QRXYh0pY)r?h}3kslPO{UmD$y@g46`W9&RR(K<)sXyTRhtunQ2=g)S+SY2}Y1l;*4jLg{W=c +038Dv3WIkdUCZsEW2lP+5m54m{vAwT$bJhlg+cKO^>P4#FUOuej{*G7Wlv15ir?1QY-O00;p4c~(=X; +TZ1n0ssKm1pojY0001RX>c!Jc4cm4Z*nhmWo}_(X>@rnVP6*LK{H^q)`+_)?u&Bwf3ERw~m9N{CoF|X&`xs$^*!|v$HdEhYw(&i?xyIis1C*-3RzqW)c;g3-wE +v-odN3wyRRWNSI7lFWYCw{PiAYVhtmm#b~?(hFr=BmBkoJ#U-E>Lcb6Z|1_Nr{6u4=R&W}eK+6IArsc +OkGQ(PzkTa>$1f@l$kQNe|A>c!V1%Xr$>Ac9KP!U2UX;rUjNCKv~X(;rP1fvDx3w}y=aUiG`ydo-k-E +LJ?fvANB+N9lV1G3%A@nATa506=F4Zl(uS_=mMl+v)x88xW~M?vZv{D?gBU}p}_CYVLbQYOMgC|cbMaPyckWd7I594&H9tYcsPgY3@KAxO+068XJgAavq`dOrO5n}A}nj`KBNc2XKEijUajM$e-OOYa^`W}s9J5Zp>rF92sSzgR6nam{ +#sw=Nd1)j$XwIQH&!SkM%7@b2Qiy*v56>Ad^DiKLqLjw#;l9}bXq?rj8H$R5qU^E=Cr>{K^_|srBou) +ObtG&rQLo(}u$g(->MbGnMOh6=rCgfYUVxpFDkkGn*5B&WBzYWKqVWJgoH2A*Xcf$}d0{GwYBuyW_L4hZ +(n-2>(mbJ-nPK&t-H%s=h!H%Pd1TC+7(|=L4!NRdKUT#D#-s6>vtVuD1qpN_zP!B(FOJU*ujhp;=v4Xt7uTFLJoS2Og~vhB_*qWY~>30o(%RYW? +}CYDNMds3SGLRIEVH0>uK$w@ou?vExp*k{x2O~O208r6jC{RL1<0|XQR000O8`*~JV(0%2py#fFLU +}m!JriE&rFTXyfuQ#w}Ei9DCP;g(~70^Gpq#g6}90?!fAK{M^4}mOaAB`Ikc*V +l1!ztP#Yu*ZXo9Z0q;|+EN}^_Dl5U6Oc5GxcilFFNk|sggN52!Mrua-ith5KI$*W~-dS5s#^a`GLe_z +XN*80%i_G{Un$4H-{Fq=n`K1(S3~2mOb4@X~EwGAMQnn>R!5UB+SfP>Dta7Z4=9bGM0Hbo-FpcDrabq +>#)^=}Dk7ShhsenesB>2-9qS%MCX&l7?d0a)C#p-ecSJU-+y4*zb7*=bTt(ND}CR#1&?gLDh*YG)7o( +F(5CfWw?EA99RlDiRN=H?Y6?g8Yg2Qn3=Jm)Fpl10r5ghJh+mJ|mn)Fn6WK^nr#$VKpyTV}h;i%_BG( +S}M}ux&;Co|kJ?LdB~vxkH&L9a@wu<+g=EnADaFLw)(s6K<}*%#+z-KBG(@Cmzr>XoV_@&ehfa>byp) ++ZhugCSLSBFT)(RNU<@YW49xxBkeSaae@i>`yKuWj^D#lN$eqf-#_cRAtedWqa#t#QhsJ3Q)pmt4N1A +b9f2P?c+|AZkRrV33Vz^XB?9kIOz0%pZr5QHj>R3ho15osw?RjC`wwVjZ`>(0szm51x@X3$#j>(Jt#f +g}j)mL*nv1)7+tB6wT^s6sv|z8C`{bnE3)2G=-QmyvB!mUp#1*$J{hmlx;!~I~m!pTn0Q_fm-QNd&T& +_nWs}iL%E}7VK7-A=~F1M&h4`6xO&&}a*n#Uj3Q9l@JueBUzO4w1SuH1)O +?7+=t@98)9g64I3g=+CgoRD1?PVNCdpkuyP<2WO`Fc!BvLP2)7Q~^dyWZZhH#7a-7hd@D;rk`#9h(2w +po^4bRV;reQn?W!jYIvIE)ktLb<$TTISKY=GY=iPnO_AGI)KbJYT`NK3|7q)_q(v;kfkq?prQYh#2Hs +!YJ@!Zq9=vE;%!BUZILDAc1e^1Bb9QgH?GXaUnj4DUvZ=^`PHFVp4a_01B#jOO#vY&o4Q;Cc?@>)FM0 +IlZ3I+j|(zZsF5(c98&5nP?lluZ-7EB84v@=DuDF!~+3^?gZHiGf{|)e5tbLB|@q1&?vG46`GB({va* +M%ZWvbjd0wBm7h$pD54Fuap2mD@}sCQdIOcHSbB#l*M>P%JQJ>k9+=inNK1J|pTm~7e^1i!2!zxaoh#&BtrD-O)wP{Mf6yIQ)ZihgDZEtE%;jZEbf$n^ +$Zs}wEH}xSM+b>XtDVT^+NfakIWaU6YUz%YJijNv$JXP)7%080A~dN02=@R0B~t=FJE?LZ +e(wAFLY&YVPk1@c`t5Za4v9pZB)^2+AtJ-=PRzl3rsY0-Lwa$PNI|zwkk}7uBxU9ndBz8Gj?V>P4fx+ +uKn1qos>aGgm7XXpL@>nO}a2qMXh|`g;pYR>Mq*6m_RdkQ<($G?+puX$tHXVO+3;hIVBD-$)Es5-!4X=s7^pE(QJf#89gec0?+bh0- +8Va03|^2>6s>VS!6X)UFVm$poR|cI(TuBq34Uw-jn)8KD{B3wp{9alot>ytTF%4Tn`#h0F^LmClEv0h +!^=d@_yV=^2Uj@LMU+7|{5uPg92VhiYE2fcHQf{o~o6;Ty^ +{kBi9s(#TCLtKdFpmSc8prc^Kpc1T)ogLQg1hl@IgVEIX$*@cOcv4gd^KN0^z;$N(LH>bN7n;DiiyhL +Q=y%H63JbJn7X`T#3KQjY6O`A6Q1#ee963IIYO=;QA@G|1?n9)?jQ}xONmAB9k~Q8G0n$b@3H4`&}BQWBe;K@j*cc2J +;1nZ>*&CT1Z;!D>T+U{X5G-ZX=pKhg^!%iV_bQ^&OYB;OIOTrbkk86yp>6n0NLa54C{+aT;z^3xq%X+ +3W#IT=9X8X-KA=F$j{tn|rWA{ZT#pI(=SHm#9l*}bb%hAPIbX`98PUH_33gEn;4{9YH_dd*4BdQAmIH +fXRT2=@7gQ#TX5$kJVIL)dU%Hv0})6DGu-)%ha#qvvy76fR^YzWa0fae}-H(PB02ZT-jQf%Qkto9_aB +Mc;x~z!F@6aWA +K2mt$eR#TW#ExWV@008wF0012T003}la4%nWWo~3|axZjcZee3-ba^jwWpr|RE^vA6Slw>hHWa@1Qye +%Kkpf3)(_t4LGR$?|#a-bHak?T13W1g=o2^W$6jfIk2J9X7hI^77N|Z$TCw0=STY>tbRmj8d{CtP!9O +(dtBFQD2FBF_Udi?$0fBtp)==3qX$YMr0JR|(A$T|mWQt(2gi;TcIk+E2vFTx76BP%ac?DMbjDLd0SU^kYC11&l)= +mPyPA4=AjdS`=ywh=&l@213jfL1}{W3H}w?azIpJ@ItAie{!-~tvpf~>IpeNiA$mMXlx< +=ipMlfLDKgblj!Cw2a=#I0hytNFi#8Bd<|fMS?X4gHu%Z9 +f{xbO>pv<29wUWk4iKgVKZsEMfur#pfBBQ<#enRC06&5-OK0)kLOfUWh0$TQWsdv9jTm*Xf`_Ar+8WP +(5NS%#+F!1Vx$1JbG8xzmELj`Dlpt|J?5Y{vs)skg&w_KTsYD=_$%dz*G(f<&r9y4@n$P(GJ?_bb^=^ +WZ|+uBPn%Ixi@$^bW6Z)w>y|&ph=)WZ$l}s-7n67-cxkWXzHPCr#SSJ#vta{lB$IWi}jF3;QIk;_kAa +&anv)4Q*BHix^3&aE*$>|Ga=&A7X3?5d&dI9xYk%g^M@#nGbMsqK-g{rgln1PP;c27uB}1Hy%q3$rvj +d@DKLTe%Y9BUX`BYPiTcC@7>6`7I5UPOTiD(=1jE0}l{sWB+p!r#eq8JK?Nt_J%hkUXeWA+n +rMU3;A;;v&J2x`E1Q_ckN!V$S(^kUfjLC(sFn!0Pic-rusZ!#IRuC1_3NIA(ll&*Bxb?soK$6s$X4v? +WZoLH#bkwj8O&srdPQ9rf_~DIBlHQNL~$u4%g2Q7GLz!I^u~;VGE*OM6fS~jhID6+bCz-=_c&1TSHLH +$gO}?uI}Q_$M{ux?DaO0+ellG6lN6X07;l`-PkBGzPd*&g`}DnyZ*IEY;n+QoM;)9*4)10xOUU>t}6E +^w@&z0xh%odxaAOdo@X6>gXvK3mdm>`Xw7ImxVF-WXNj&1ULA&*EN3AB%q5mGjx6J3;^3&W2H>;~_ceKAU8DCiqQaft8^nq>>BPoS+ +qVDenAD9g~fWD7UoGhvD|KYfx$U8mal%FgP4fLUo!(oAa*ee*F;p=ACRB-(}K>wAMbDQS%J1whp5Y3J +s@xZAW=tHZKZOOy6bg0}vJJT;p4UpSbXx|M>v6XJx*3IxGQq1v)q@Morg=y{-LhcrK^!jHyqcYp*fxYrDuB5i^>5VDhaJJO +IXV2H1Yvd^;uDWp{V0FjLzRvYYxnI68W_Djv-gXMs8!G7mS!{a{YmW;jb49A5>>x1R|COAR=q!bA +TbMX?e|CKT;KXax~r>KD$Xip5B=$?@YoKMTYiVtpU`a!HX;?rpNv!-?+6pYH>$5KPTJqS;`9$tO9KQH +000080Q-4XQ}tHOb*TdY0Okq+02}}S0B~t=FJE?LZe(wAFLY&YVPk1@c`tKxZ*VSfdDT`;bK5o$z4KS +>&=;#C(~jHeK^ll8J{>Hxunnm0Tuu)>DK?yf0$pA1*i{7vD|d(9;$;xV&A@f`xXRs1|w +CkH7^$yuCHGG`1#MjuCK0N!MjFqlyJ-B@2UyTj!^JUnMK3kj%lHm$KmfU=<5fVu{GQ&k)saI2=akvC= +KS&NLm8BKp566qn}Nr55J){TuHc&uHf7O!c8db{X`6F)j&n0QdwvW5(PIM-TlWod>YPX!|8l7j^Ta=qx{$&sVeYV(zMwWZHTP?JzpyqXyJfh5%jx0)+al78)XK3|$#Ds`R5(Yt#2}XSztLh|W2G2=HG<-Aaw +N=6}9HwMB%PhDsv~XvHO92iHAW1T+oh0W5MbW42LTVD@qzoWD)E4&O +;x(j7iB^jH)Kom^kdeVVF69PEEW1`(g7%(B!#xd^ZM1}Kq)X82(kuOq>~ejIU9OMVyN3JdmT>QQ?3|_ +HQ+WGudb2YnbME$$dlDX*;Q8M4Rxp>`?j(QblFVQ~Td#PkB<{63WaM#hO#Iz1dfYxbf{CZ|1_HPMEb=)!*O+y@(#UY +G^mN8SwgsUfQcI!L!D6aEWZH)E!w|+Ec!K4Tqa2I9}SZPFi$So_al@>?u!k6zuc~x^vX>3fniMyDPXh +wrj3`KmV<*zSaN=q1dy2dfdiFfBj#&XV9H~wCgzi<#TJ=9$454_ySN%0|XQR000O8`*~JV9o`~2tOEc +5VF&;KA^-pYaA|NaUv_0~WN&gWbY*T~V`+4GFLZBmZee6^cV%KOaCwzhOK;ma5WeeI43vu$s7f}MMZN +H19mj2rEu129Qe=%lprw(_txT#URY(86Lp^LcanV)>OC*QiV>l#z22)wqisu^xSC@bM3A2K0tl>WE3U}qx&~H~mV~WIVZnAF6|h_(jTvdR?i4p%S7dP|e{B}XDcQ9Ez!oTyyO#nz~A{u-ymDNuoxlJ +LaHeV6qk$_CLf^>-q&v-(gtVrlR_AVq$w>#S+GQth&SpraZSFa(%~fl7i7%E?c}l +Ki)7|e#@I;264;w5%lM_{el5?-ycLNfCdbYfNuDe&pZB`IVtY-R;;e*T3jIoG3J-$c| +ty!jh!bW3R;T~U>Iez>RZ=lO>a64Rm*L-Tf;v41REB9*LY^WeZlLP7}%;LLL42zV}}Lff8hs7$G9sfS +tZZMqu~HuQ)y*tarqA`4*{2EDg?K_$KF8t+k{Vzh*-gYy7}-~9?5Qn>G-JRW$@UnX!cbRxa&Xp?03_q +DjAF~vRYJLC=XB>5VcACRUfyJGVoat4h?|9;&KJz;0MSR1)mI(9rddhy>s|8qP#K4NdmO +bW$ba`jP{ohMsV?2Wd|lC#&`WO}u|{Ok~aeqz^r&0gzlCQRoENPd;6P*%)Xsql)qrC{TNr}(N?2JBzL +Sg92|PDZRp1l?+>+y5&#taZt9Fjd;I(h9JUmd#}*n7B_x;h0n`)p?Ogu2R8P(k=Zl6_W%k-c>C0)NxR +A&=+``$8?N4FYwa2;$%2ntyT&5f+pH5hFKu8!(T7X&M$Ay4ZxQW~f^T{B)lmXuE+Va8 +WX8^#w#V9jZgb!DWJYB69|&)td}0WLFXosrYhZ5XPS4En|dFcnv-m +<&#_4WAj_Tv18U0t)YtIL-cw-;BJczVUgm+#m=E-qgVn1GpZjJPih$qykVnNZBgUN=H)2r$<{AX|u3& +SeU{)S~1I!4~?nFbe9hLYQ1ya-@ZLGjPddE**FN%@;}~oemDv#xXuk>z@W2bzVQYbpghm&fMsn6|zVs +p9R)U;)LR;3x@M*PjdV2pXZaa*XL(Y_U|VhhR>s1u7xw}GoEEP5L$FPoiyXH%!*4lnQ|+ +75HuP8a@G(0y4~)03a9YYFVq7%e%mkisS)?f5-E6ANDL%7t6%nSVbMb2gczID0bbS&_{L2q; +K1u_Vd~>u$={?X$zbv3aJs3$oCs!0DZc8=uV@W}18rHjOTULwH8+Or;XtmKDw}jbia?%%~q9W4_{?$| +-LZLgD@9p@W$CLo31)L;n?XZ8 +@0zo+L8v_7NB=YZOU5rI4}yoE2d60KHV>{dQ@>ghY*E!1M`w8v~(MnR%pySUdfGcBz8ORx}NnBj031eqj)Y!o~XTVt0 +2N}y4%pEPu%Ex!ez`9{ZuO%Hi4mui^v`@L=h&BydU7E5lHy`UXr6$UCI)rf9E^=9z>nsJZ! +<=JtX{|NcjB^439{fr>qyAlF9{rcEEZ&r8?Znp}*zH8lQH!@+>TY4Qdq6JUvyaUC6w{SqClMNm~W>ry +F3$!kq2S?{C#I@7?#J-KWv-zAr!b)Mac5wQaQ}`kIZApQ!D7hF%5@#gdm6Z +OXu-GAzGFw_u~3LN@~(4~35)Rq(kJregX^Q%}OtiinewPNV$KUP&+TX{5lx`v`@Pg7%WMN4zXV?^*u? +d%A)3J3cXs+z)JM$Lq!bCQ0-*127Nf!--FpFrjzTx_43OwVUN}2o$KloU<`uP +C?77_~VPxBGzxMBUiuTCqKPK9n$VDLu5Y_`G#BrZgCYY!)p9(VoG7eZKRBubb$oLIY5_*&B{lghAjO5r0SKHQHa)fxp)%+ +GV{(GE-j7%)=5ffBbYP(nisPo0<5kOv-+Il3#)tDo$Nsf}nEv`-}IBNec1*=im3*TYe?<+0)!28HCe@ +xLc`G`}aD8BR4tAKGB(osirF8@FWTQ&U>l2foEZTM7XG`t};>(Hg +R^^8L75+S(NQEa~mVuDH^Sg$C~BdN?#VVuQIYekY>5e&h8N +Ok$}u*llwjl-UoaOa0;r7{HmP*YR!c#*6U}7;G}EO?Ma`~M{4zuS!f8Z#=?wQ5Y85z>GNp*rpIsP?J;55IAd^=> +=UCxoT*jTU>iG9P*V-c+UUOD#4^UBr-eXCS6J=QpAH8M$#Wv(jP*k!+`C>!0x=cmSH+gOJhUlRow{qX +3gI#F9Zq<6(jFtum%Bnxh^NkovWVn_mD=&P3{iS +%kX;V2(s~k6sIpn{q_aj@!hi*BkK*Q%j$;ej*4JCbv9M5EqqP9LcOU-Nx^o}S5(AQ5JwjXiI6hk8mY1 +*3gJfb?97Kj(@$(?d7F^EkOCzoReiHpo4@b>Ox|0OkMy0384T0B~t=FJE?LZe(wAFLZBhY-ulFUu +kY>bYEXCaCu#hJqyAx6h-&^ipz6QL4qH%L!ku&X*(E)PNCWefz*W8>hITDCzp5Ma1ZwoQHJ2d5~eOSQ +pc!Jc4cm4Z*nhmZ*6R8FJEwBa&u*JE^v9xJZp2?IFjG}D=_p2NfT +M)S9W()=dE%aWmh$}ld_e4oUP(g6l8Nuks6YU?eqG-Uv~op0T9$9ne3ga5=$h|?{0KAKt}ULniVWBvM +9ORnPusm70(Nvvq;>y2o?*t^C?T8o=0#)4S|d0nD!2X&*-0@2L9P!2WP(wFaOe|OQ*@R_;MD+aWILw` +1L*t3-Rqkmi`Yxxhi49YM_^TJ-!cJej6huSn-{)blfL5_dK5 +-wiLj<@fieqrqr+F;Ex&I{1hBe*W?7^xU|6`T64A;7a}ccs3H>=RpzP`$g(cgMt^)oLiUUGz?Y*x*euOh#G-^{L2}32M~9sb`?o +dh;P8(fz`M&Xc~sojI-0k}2o~6AUXS{M$f}$lslU0sk`ir$Sl{5HX+^i(&?A4dtFaX!@t&D5YXF$f%N&g@Z{8uea`3WF?*f;$c#Tr9zD%dxFnkb)e0cqqoApB +aS17&+wanZ_SF9u0flA@4=uupmjKm*zX4(7QgwX;6R|%XoWp1KJyRF%XY;egUUF5wR05cUiC38}EEdb +GRBM1w@w+u;gSs?|GO``5?>Eto^qjUW%_B5uH5GJ53nJD-da-9Go7)Siq)fxST^UU{TJ1F!m*gqbY&w +!4!Z$JU0|d?Vb}NzS4w?0b~~-pMc?dD95xhkANi-R*yLklAMO4BO(VRl002zAs0v=? +@_a(Y{~n|VRqR;k6k}R3o$JQ1*248Xu-{xAV|((s2|<~ZEfJPi&wj4w3MU^u!lX#LAH!J2yXBM@-K)$ +v0y?hKxF_nof`P;F~~%45E^2`EhN^y6{d3(l70DsKmYUvJrHyhW%gYNmk4qSmWKL_qZ~3GScus?{lf7 +I#_S}R3t@C>IKd-8c{F{qX(a0cygoMN3}3d!qR*+P^b7ziSan+YapS`Z +UE`)Wd8&3vTN}|D;>+1vsv`Sr#>uy8Z2*^h}BL7JI@FwM>0y;POg(DZYiL~{9_e?v#l5B9jP*Bf-Y +3b?w3b@~IYJ23sGzjrV;oe4bcff8sKfl%s^&?+o6bol4yVSM8yWRl+4pr^M;7i~leIJ-n|r{WDc1Iql +2$52yz;XVwMY@!YNC9i0%vGxmj>thA+l|oR!w-kb86*c4$XegYp*6cul$#}SgjP?un?K@H~eNgM`b^= +rcm+aT+T}SJUBy`*hrcedJ_f6J47o#uu<@I;wR5u07z%?~f{iD$K*(6QlO7&HhbGpBOw22{LUIh_~BV +_yz#LPvyMZQ57(O{kKBWM19w;iOYWUY}fF#`&rTFsa&C(&I)x3fkY +Q_Pfx;Zjb?m!LuNfs4O+qsHov1xHA=%v7pGX`3W$RCbT2gcU7C7U9$+D9y)Q&~f?hTRj+SHNS%u4;DO +GQJ|dL28^yQa$)c4%8%98AcSlxr`jeL;Sl?5pjk15Seh!9OD*(~qSB-(NiFZ{2K^0zZB>Y}q3SG9G8R +F)1vzvQ@-|NCQfr~(##e&fJE*}WT5V9stOJy&AwbBY?dXBlaSMck0cDXBejfp8#XVdD(Rdx())0K9UC +|pMwbEt`FtA7JCj{AkdDTm0J5e!t0H$tUUdOU~YL?%!i3(*~pMAn|knZ%=?jN--NHuU*ATcUh(FZJxS&}RPXl?mP*9ZbNce(!i2&#EtIG3cjIM_GP~y3wse +V(-w$jzd&QP>e;*I$2>trbaYEKh}o#|A>ly^&{Flh_aZ3zA$#>&GIN*&qCZZC1#32aMU_9a +B=T|ktYT2WM90$>S$D%#lEZmV&fjxo>{S2<1-*eVVs2;}esc}pa_JP0EQu|MIxlrSaBnk`9o3@50XJe +C`*Q2ffy-gupb+wD8Ozo_@P%EpOh_T{JS-e4!OTW&T;ZJs!HG`ogPotWuWXNA*AA>}?SL_Reg{6|;hF +h%Ct9)OYlgu{BueS{2RKvde@HN8Q7TeahyS8Lj7E=A)`Y$BYga3uj(d$SfXsk_w|-7HfIW!zJ}dhf>D +*^F7WwL=Re%8DA=)CDkmlGypB{uqmawBOGk#qQ4?ia4J&N3Q}?{8i|Eb;jF?+4x*PJMSV_O|jQV~oV6?wrFk-j=M4nOULH76irEi +X@K|A&~q(TebV-GjzFsqiW*g$mnq^xP5xn=t;qBJenXz_1vxrdtN{>M%CYpoG`rUiF4Psu=~Mt30%;G +9HU4M@^Q(I1Tp01NA4jxF0D5&0UQFN$Z8uz`ild%a%G$g7^DvdCTB+n+28mDjNa7(1{MKVw3jLv)YfQ +hFavBGkP&)MYFCJGzrAH~+u)CnO1vJ8^BdM0wWXxHKSb82Q>7XR9rvcA{!tD02-+r4$~_Eo|pZWItY0 +Sg&P3YB9~Z$6l+#BaS3&XqpgcoL%K+~k^Fp%L9fB{tmM*0fpMOx>zW7))}%nt;l5>;8=fwlO} +Kz_tk$&ID@HxM8Aw^(^J>vNNc-f+)dLTJnTl*|`Vl75BKG(kiqal*b4z;xK_qY@Wz%HjEQ4cXwq-Dzg-l-Qq+xM2x&N+l!RnbI`riw**akE9%c#2|Jh$44t70bx=+YWW>a^mYfOlCN(?i(<&`eMYZH +>KK;kXLza=K~ZdR)ikS}=w}GFsI{m^-I;db(LsYr&-*#*1?}vb?{2HHMYu&%(zRxR)yP2i+bF)HQH2^nR>ERgg#vuD*#@wlqFPoQ{EkK#jvXsbRLRW +V*zWdz-0-xHT3L*5}I5Klv0)U)bzUz%UcUr3b}0Vm80BMZsUPD%fU-LYit5#{U7UdfHRo~lZ|{dD`b; +s!^VIKs@8!P$B=+x1-h?j*BdXbdgDb%Q6ANVxSClC)26q)R>O2)-p94Zp9FanI-qQJiU~Jlq9E4#T(~ +D8f)nc4Gga@#y0H-$MsKiF=b{TaQ(WNbLse$zl+eQJOj=i^sTx(dq`Jr=zksZv-Qamxu3tj +FSOPSx9$z$ru>!S!fURh)(foleo2SNQC51rglmrXQbJaHETwo +Fs*r7L89$qbu-7$S?zC_P;TxivE)!Ge8<&UpaW?W+ReGf$x6VrSNT=3upXXsvKGx+5c|U3kygExEwvL +(;2m#cG#HF!qS9X`n;H8jIJzfC-!+r5?Zy7!Af{&4jzlry%A4sA8wD#}=?U&JhBzQ@(r`@SCD0ReHgM +;0eX&UwzIi%R^H>O9q+NZ}2r1HFUPuG7%JRQxxbv_QUsUMIp7{|q3?jSK^M4+VIxM8{l$j`IqHJ>A2> +kzHaiQspNta_qU77shMIyJ7hG+Os|pMw`e>huW8?XoGOzvoYcPeXUyX@c^33n+hbv^8{ES3YZbqc9tV +Ref#1Lo7ULtKl6~+~Ia149tHXC3MhRs7gP&^Yz+Z6=8hk;9HdVk4608H< +w4E<5;xvVU>5$zLWBK5y!SnByRmC5)WCF<}E~DOJdo&!GnFvw+V8e1mM=WAOR-604z7t192RvQ=vawF +U4&h5&9AS-Q9v>58ipp~WlfJch<}%XJK+_E5TY6hoalb?xT5`WK3RSivmnbulTgXb==F?^2f9x$#w^J +6cn17%PZb;h}d(Tx!IW#}SqQAh#+lPSio66=z@UwZ**PwOXJF<5Ep4D_$Dlo~d+YZ`=u`wsWL+_@J=!C$>*{(4w2lEyT*w2ZNBA^IQLVZ% +b!mmdvNAp) +2o+-a$=&bpsSZTNzeE_gRCiJrk^q{AeubunDQ5I@%mnEdwV(H$8?e65v{SEl{0ofJ-)krqVu?;YdSrH +1kXh#%weGH|!Ivj^&=gahVPeZb +>x^%L|o=DRvvmUU=!v+Xx`Jk@)KU9AmaEidJh0Eb=q@;rM@trA{m<=;R=>LMZyi%p35cs5#1 +goLB|W(_nN5I_Q@s(Dt713JlkfFX15!VFPq=7G +-!~`W{b_*L#CUsw=3EqaBSXnc+@G5*Qm9c4Dtl(bhn8G~Bav>1s^H&{Bbh+K{keLy&zU=T);o5p9vIoOcv3D*mx*{=WS8v=SEYwMG+bg +d6d(2@pz(5^h#JY5;(A(C8@fk$Gx3O?f!MZ=nMbH!@c-9t3FSrnef5kt0NJlGoOv&x;aAoU3Y?+KS0H +=sC|hZ2N#hlIM#J^S1Bti2&;AP^>6Ih#$J@7uKfk3Xq1tc%cyxSR8*p%Na18%CJO2w%O9KQH000080Q +-4XQ-a(vfX)K|0C@@k02lxO0B~t=FJE?LZe(wAFLZBhY-ulFa%C=Xd97A$Z=6OD{?4yhZN5MZ2<$eFk +*+7_N*b%N9l4h(2}K+|_G~JSMayFKuI_*DzVqfNiq!jX>chPuvOew|L)_6|xEBfJ^Uf?( +I^08D-0X?7V~yw|aARGq(ygJT$o5)%qFl=f>~3LEe14eiPq~!GcI;apI**W)VCkAq(Ba#B3c1zza~;6 +x|~t;3u4rWu(#^VV44oRb^R)@~v93qR^prg5p%{`b{V3?}qhRO{EKw$@|;Y<$GSEaWccQ3Ea<@>v#@R +Ioo2te}4Ga@$5jP{S-3QX*!lw$=Tyf&@O_LYcFJW=fm`%5t21XwKNQHh_=5tPc~=6`9`B +DZp5VG-L6GFr@Y%7%d!fz1A9Is8O50%U|VP+0LAz~2Y5fpsZ071=c`oC9E5O%>qo@KCkLAWksIk6Pz* +NO($|X(z+|G{_;OV5^0GxO_&u*W6cfU5Y}n}oQtk@OUe=g`EhYrDtlkCRA_tFoRTd&L;fC26_c~DVlr +`nQ1IkI(QsNrT9@q3?tSa)uSn+_nsa08b6peK)+D<`Rg4?m~*i~I77&R(csjMg`dno;UbM;~xgTwk*5 +a!<#+%>K3SUP1_rpc>#U??`Owr0X{g=lC{vf@CxVAar3fU*TQY~Ugj4MDUcwP4;(JjL~p*&CCv)<=H9vzuHfcAm +aU=8PE~V(yzPypNLFycY(O&WIKMbVcPzdBWYnbEXj&=Gt1gGa}RyU;uzrAAq&wnx_GRcoezV6Y=d%!o +QVAUH~#@pO9KQH000080Q-4XQz1!h98m-S0Luyh03QGV0B~t=FJE?LZe(wAFLiQkY-wUMFJE72ZfSI1 +UoLQYl~zk{<2De!>sJi42x2c>U3v=;py~FJ0Gq(rc+n$4OCy^NMQZtoSN-)JlAPa>iv +@7VE+7wSxQ2W(`to4L1WEgxiDL8|2MTmbVDCRtjq;NU_&i3bk87DXiw0UFP&IN`0ap +!l+F((VpVsIO7;C-r1{nj<1smX7tEG3y5?vG@;29k>*m5r&NWI&UH`o)FBygvJziQDy`J|7`R(sWyaN +tIfuC0m@do<2umZwlM@+f@rQr;)LA}Lf^gx_oIL++zx#a_|aP>WH4Wd>uT##FCRuB;bo{OKrJlVlZn& +*#j^oCQ4QjU0hP(PPbXY^v4`vW{vcdTtzRwdoq}_^2P;cU!9iByAS%tNnxhFDmA(XGE_I?q?T;XvM9wuRuq@r7V|yw_Q830mjj^G*x`py +iH3kP*6S#hb1&?IaNAefD=l|$KrO+))vXi1lN+cORK5PQ-*iGWidmG$H8QF^h=u=*Hv|LS+=eI?(1{_ +(lHp~%noii`iD-&aJGRd2USx4nIEX?)<^u{!0Q6nthN@V$IWd6Hjl@)U7Gd=Hi=ABLxahF9gzPgI+Kg +S>!j49qx{g)LbFuuUW>@_ZyWLD5VfQtkd5?@i?X3XDy|Mlyi%bVn!Hct4yN7=^>Vc?q=^@|(=OnCPko +*gZ??ta=VZjX?VEBI=$^)eVnoCdc(c_|`Ijqpa%$OCt`B>Ip8F;6H) +BeqP%Mwss@KNG;iIKq<;ffG_-J*q%;IZ=q;n}_RvQgKL%x@sJ^B^p)XuPgN!)cT5xoP5jhvOS(ivFRqO +Pe^Ic7o}!raXl0qTJFAQ8fl1T@~+b?Tv85Uny_`=JLP?3p)+EZDBj)b6ge28*6C?OH4T~%49$_oNi@x +2D=*5zug#*%iz{;|E77qlkSPiJ~>Z0XXiRZ8lG@m^zXPI!#nf;7XC#P542q=PFzdw!jhZfXmqIiYxq6 +1MR!1YZ{vxxE3g_42rq~|wc>~6c{9FuJYUx7>ETgWOQKQZvP3jJp-%tL{{`-u=d^UsFT|qe4tLrNw=< +}4sz#6>@85(NS1`SnyuYR&Z*%i^@)0{li;mLC!7Ph^0Z>Z=1QY-O00;p4c~(;$KNE5S4FCW;DgXc@00 +01RX>c!Jc4cm4Z*nhna%^mAVlyvaV{dG1Wn*+{Z*FrgaCxm-ZExE+68@fFK{zNZcWt5V91B~?E^|>$=4|rg=g%MP& +LrgI8p^DGsk02LiuLbMCz|0aXX-H~QRseWpUGrm{(q>7olKzzcV1j5z7Z_NUW-iL3mDDuVf#Co+_5b_ +&=-o;CDVmra&xog2POXyH#dybB+^U}!(va7#rOP(Pl9EFE4`?kn2Q>6+68NIEb_F^EVglQQSyp!nfto +)@6Y@oxAm6g^>z*UiVd@znaIQz{}trJS0ru7DV3@$lt8}bNyqMoov0wD+zQ5Xa@3Yd#l#M#fS4{>JcG +>Jl{Ys&$H@4123ufx0vC%kX6zDgC_bGT_Yy9=71|NBJ~3}v-(6-3ehz}POA48LN#TsMeEDJ?sJHy3$c +2{^L>;djHF&#s;d7q>X#9_7Jx*PCEbTYG>Eww*4p1R11&av6a?lic?~(tGKdnljP_FBb)tlo!Z>`{S1T@yG9qaL+8)sr2(Gb~SOjzkzPhrp1~ +tH73oc+KGsa3niQr$yVOpX?DkVf_&U6(_?3<3TvtgGgZZSv(4GHxRrTMyj^^BI)yQ?0kb^n=`v%l!@L +R2O|O+P%VYLKERkFhinU(8<(U$*&NSG2n0y=|9dboY$qQ{ga53~iP>6z+LB6FTJCSdvg6o8CHcw6}^q +9m$N#TznPB2Gw&EfK*&60Z5|(d~6dDsX;$cu*c*bR&!He3Um#G6qS0@gYl-$sdFL{5wmO2p +d+-^c+zt5WJwUe)z@fvjs{U4Sy@OzQKrkGiCE77Vj#YAtS^O$^sPgE10Pan$&hhT2T2A7JDK9K75u9_ +4(#Y6NajwAVKO})7K9o8OiVQDw(CP>8ypp4uG0X@L5e#=?kV%el>LepQqkE+k);c(ddX#_V!(1#Ey`s +l0^8P^mIymb%yPa3N^I35uO`J7+o8NAT-lD8E2-rU!4@K%`#rC2eQDBEQn>PLC<(<+X+k%rw*+Pq9oJ +>bb%(*;xbJ~#da#gOs&r9NbtS_wYdPf>zU_2j5Z#bM0V-@Kv>{pOaVB}52;*DB?c>`^_T8&*U&O4-z_ +Nj`6z&@+q%Fgi9fb=b1NI|X1y3xm{;tLvPU>G3sdIDV^=fFYj!^nwQhs0ITV;(&J9FKr!^D@GXQMkGuq9_%QIt+w +^y4u0oJQ?_W17%I3LE&(;x8vA1gq)n)K^mqe6)oH`pd1pn-a#Eem5 +P`efr^Z!|~cYZA6%}mi=(mrQ`mS<8D_v{_T7)g8v-{1NZ0b`Ey$UeBfV~m<2=A%}u?W#VxNMUJuZ{H- +&g~DEWo_dx@w+J2oy|aqrkyn^~blMQz;8edTh*d_@*PUOJ;o +&P#=h*`^F52mYHc<_juRZgmA@HRJS6HW;3>2+Eu}ZCs>$`10G|bbhXOGgEn@;k`b(vtV5hiXU;}S9^w +!Gd}YrKkNOU+`c-E`hr(c#5MIU2lYq2EtRuwDaT?LCFrr~~6`YQBI*kq!|I@&5&fe!}h7N<676&MVX% +mS2Xxe5U$TV&b~R70XKeAB?dH&X3natbN +v=JKGs)o$V&~+l5&+_P+79O3#Qe?x@uu!?3iNY`L7y!L8pAj27H}bVF|?=Y>L220Mk+%{^Hv)Bl6t1K +D2(I?-OgwzFxW4Z82f4H-*5?&rnP7egUU+o2pL&p!~?ECVQ^A)G|5B8Vf&(nnZ<#|4tvZ*;}t<>i)d< +C!sqj;K+NbVX)E&`ojcMZ;B=97WbI*l^YZ6sb4b!1_}C-&#yo=_>KsgFb6IC~8+Jcq)v-F}Sae$snrB +nhL(x1I-hmDUA;z?XSLtY3ALu^L{G{I9Z2;{?Sna{?i`c=KLnql0Wn6QjW?((yvJi@nn_BR0yya%m4V +@zLjOO&CCl|)WW{jcNNfb)xZrUNt9=%1GZ;Qgg%WGvZ +$>;zMuJGUl-deeM+Sb@N3hq+?YWOfTSM;-5uDUFisHGA2^EanXBGxQlbxiYMr)n-iddm76%+hW#YFUh +;jF~MZG4ExpgUM2eXi~rcdKAXgJAINpoN)+Pr?o$JThzO0Wr^OQ6Q#oS21EnF#IypBOq~l^eL_5X-{n +kpa#tl(hQ@r{(DnWP>)Z4n<^|74{ktv0}4W9x``JWoFbCp_`nKzh(yPHjeVo0wioN!#TZ-|9=zX4nHO` +T*#F2aF$7Cwx7HXMw~hN|18EAhRpkel|bSlGK73JM!{=5m;RlaVJ`Z3dha7Lkb|#gibdJ&(}_e?G+zg+3ToZ9?|7vb-wos!;TV@nI +D_54HBr^t3irrSu*#>yrpX@T*IZohvCp#8tPZ^ccw=eMC)csPR9f#eDdbQJ9`yzAS_A +_F~{$2TaTC6Y-A$MwRX%t(;-Uf1a-R@6aWAK2mt$eR#RKC9dbVa002J#0018V003}la4%nWWo~3|axZmqY;0 +*_GcR9uWpZ@6aWAK2mt$eR#Uz!Uy%zJ003}K001EX003}la4%nWWo~3|axZmqY;0*_G +cRLrZf<2`bZKvHE^vA6JpFguHj=;VuR!I?nQCR`^LA71`Q56v()iW2y|&W4y=<1INJwH$kt{)4(RRCk +`_2pi5&$VD>FaxUKU8@yra)jY7|b^YT9)~S1;Mhe>XHWmOEyJbRxDhIJgqAp$nS%JYLCN;SILI!?`gh +TCD}@U&4qp{n=T@c?s%oYZNoBy0b;PkiRC*zDKE>sWT9X;)I7tlef43g}6ABJ5iInUZ+kO3Yz +zHelozWO-8?$LumB|8jp1zN0uB$YxmU+235(STvWfD!;MUHd&GzS0$&=+~e<(yF(3SrIc;g^O6qX~7x +PXRp#a#7RmZ$OJnK{~zVWm~HuC$ypf3z&os3CxTTu{N*eQH(bC*aNrS^0Oi7rEx4isk0pl +f&S^q8Et(b=0F4?Pbe$TiQ2ee#f(`q~LmKPD^)b=DH@v=A +n{zvf}g%hM#PG`}+s7FOkD5{2m)lmkjj%#w`VKO1Ra_q-G+A_`ET8-hUf;2NK1GSA#zr3EA-(~Aqfb# +_a(-_(mAp>dj4NR_uzC8<|CQSl9eYMMtKaR-6igjKW-*14!~n>0QrysS__LM1$RR(iVt%G4?_dF{En0J+-ZA@mh?;X +aVK1MI89fX5^5VtwUj~B%_IAxPl7Ji}g493CNL`>ck|J{-rZq=R9Ri13jz3(Du>C2k ++UFXRw?Cykb9|D|#6js|Jd5(n|vz%C5N$zksY|KH-K*lBnWO9p?_NBe@Z3wpvtN;TGbf3gPbkIG(Hf4zX +D5|oKK$r>S0;B?rdMu7`1!0vefRNRWrQwd3K(=bjVe|476aoN=S;n{UB=wK*rTUqI^20g9l-=>&HZNn +`MPQZ+c#VZX_Zsnr4T0I0$*M+$sSTCD&8B^6aF?oa8lk%27OW(T(mLi!?H#e(TUZR}soUELyWw(w<2< +T2K#-6Owm~c{yHw<~D6ZK3CN8Sy~Ln4G1eS>zk0-Z0=Ui@DszNMI;qK`wQm2BwWNQ|*W`La +H+$dAdWZA_w~HY)MvCjo|SZJ7!9^$9x&qX(j2M=Agl2MjGe#)?T5ndIl~&Y`adPwWhIPaU#M6N|l=7B +3z~X5GF`hUsm?&iA8Y%W+>=jUte+V~4%Ev5O +vRz(-V!le^n{A*w7t~?7%QL%WRtAc6&byWp3CaWix7Ej)7{UR^C +q12JXF~J|TtPXx;$&UmoAxqEsO%I&ew_gI902kZ>fNQ-Nnvf@KPD+yEKE1oj8pX&)q~gHkQCh9(1KP` +kqKBZLjr~nw&|^C2IxN+Y!FmDYpzi&g=uipw^TAcvC`blqXQuBB{kvTQX&2oQs=2#yj?Cv@z(=DBTP&%;cQhHlpYAfXU5Q60_Cf;rYO}f?Oc)a?{>4o1Sf0 +nTo&v=QE1VosoWPr`dv%^Z8AOdDirl%q8*8p7BX}UZ5sSZ;qM{$lmBgJ21@>!~NEyz~x6ntEM#2X-lX)ga1@KL4Csl-<1iH6L-2 +bZmiL9%uJ|HRPsfNnrc?ksT5?0>ICN-!H}==OnFB*AsK0aQ-&p4 +;boqt`Id<~srrd$QwAhGdJMJg3+R#WT&w*a^NQWkgC6Lnf!q(>GO`AAv%Q7hv;GHzCG+Qt#I7pRM#yj2%760%O~(8y1N%s-M@5eV&TP;H)CsZNw1KN +6#12gD<_Xk)#q|7iS4E1T(bJ?~pwH}|$@ZEW}|q)fJ@14B#{7@IhOH4Xu1z7I8}&2WSvh2S3780!R84 +Uke-7!TODc@8lOn-&F|WuWgdT+u2e&OsBP!39w8hAAM#A@023&!SRNI&o-rwcRg5t0;K^j%uqQWS-B! +tl@dZ${lIyENx`(!U3CKo?cGatKd1lN7Y>(6qzn5r5VTSvR8D;Wq^X#ai)kN#C1iuAc)<-4tmgG5skxjwqR?yV1jP#}uPW}q~t +->3PJ|gaJAoF=!ZL!Fj4lUF$`31U?S$~KrRQwEKjh6`Y_A$}y-GfH0$`Kj!dv<(mruoSox~Ibr7dU=; +mh>QMt#VFLH$WWEGl7S>fPg1E`{2vK_|b?^g^4@o44=&dIu}Z(5$58^@e*}`wo|afN8+$|w}*#gb~yB +Z1h3WGgoOvlg88X1e<$d8%j@7c8jZ%i{D2$yz^*Uycz28%Skq3>H#-NS-k?n4OPe10rR6m7RB%`2PVe +(1W}7@tmOFWz$D6^Jb)z#cuyejfceH07_2fr+vGXjE9b&rRD1->O8tU!zoL#?bHynBG4*MvGqu!Oh8@ +@rPQ-X>vR{-`b(3uUKF`yYuwOfM^@42TAq`RBdb+-ZkYqvq;)Y--$TGtsw(7$dwP4S$jpocP0nfF}hd +82%@0UfQTYJkgN3Zo}sMPN9ejBFKBjAv0E%LHmHg&&=B&L|_?i$!N+A-XhqNwx-ed?(1%Ro=T#-_rNS +rrae(5Yo9v&|rDYhO+5MHx1j-G^agY1vEqQUH0}Q|G3q*7FSvO)rZq@U*ou){91RVi4XY@n-+|`P4nKs=F_ZmmfVdg7IHVE2?~Ya$nR +<2K;s;%pB&+$pp$5tX1(Xi1tp`(rM(7;Nzdmgw_l9+~d^sF-2BbVgc_vNp!GmvdhSBKVv&s8TZ}5{To +pVeGgk>4-JOx2dH0sWwM|}muhJP#nmUS(#(S_#!H85n@0G&M5*~)oOmlc;;A0TR!qMJNM4IHN15VYJn +#9T1E$k8a`Mh?1g7sDqwHBE1yeBT&H-?j~MPQ1Uze6u`6v(hepJvm!r!vyYQW!_5H#g@5Pvuz +_J5X|AMrY5HVmDdVS=1g7HzgWIX~ga4pQs6aq}Ehp=p!C#45><^uPum^vbQ;`LbKf{=P;YQr6lItDiu +MJ1^5S*e^R=qUe?i*wX1Djfszi*H(b0l=}i;pJwPDkPIDv?>$GEc+&iota9+v7E2mLsM%1}r@a_5KH` +DXrboOfc=6oK^&%U2szL^_9+8R6;JSFFw3Lob!h8px`G%=F!4<5eAd<>FgtZ|or#tqg+E~+`9X(UHe4 +iAIWqursQA?hss+=ZdZso?0Zj+nM|k>!O=rJ~){J(*Y{CAdA~yg^o0OrhKT$j_tEkY|kc@^WJPJ1EeG=d(I)2{;5c +Cr*vZaYKUkI$#!aG#T-Bq;DW$4eSP~E~rk$pXZzv|7J?XoV9uWm3qhFZ|Li^^mex`TDQ@`w +>7ZMBSw6=@Qbio`}{)zUomFz^!rgS1Z9rRZx6%4F8e@96K;O}Xa@BF3+&8ea#d{-*$K&yC0Z@*tqu-a +gW7lnwliR|`o~h%x?hin(ZjLm^ja8|C +P9-5;U$I2hgW21|+nov0vRF5RkKzsh3>vqtQ{nNizoqGk-XvCx-We0=CRWb6$ehqB~cmNmlyAv|J;mZ +yy3&rg0C`O=c=N{R(+@s4#PG6I)EfRAntmd2QJF0a>!?x>NEmpj7BGnPB*9y#_@##>NK7w#>@Jvvk(i +MKInn5)b&P$$irm?t9;lEGwgfbXSdZC*CzR+i@}HIA`IeYUmBHvPaz9hlvET;2Y%`ko`sHpDvasiOB9 +(5j(_@U2(awbiy^-G6Xv_~_1B+%Bdo(d!;KQ<~d8FL%g!SUk)wZ<;bYwZWKM0cC<=_A0sO#t{}UOkUo +hO9uQ6{P8x);(RNZr_{et_2SR{7hhTVGn?L2$7ot^>#a`Kx|aD9I-!wud-bqRr_VYRbSSJZU4U=`X_| +B+;b`QD9CN5Qq&voQ-7{sWoRou29c(*Bi(xYf_*fK)SZg_`zh` +VKbdSXb@*|@PI$#%5ve0Mqf}*BWtz(bmsHS}LZp +)tZOD?30s^Sl!_TU*%OIi#`e1V@<}k8XZ>?D@sE2*fo+vM3(F?#ICBao=)aF?{|WqSt_R9uydFS +!Bq}W+J*iuL@|FVC1VcQKCQ(wQvSc`09lgZ7#cZCJaZlf5O~_x;5`61f +$x3eHPPq%4vwEI|o@M{ +jIhc7s&qz1qG?r)=l#8lz~$3$pms7y5tTx6o24%Rol25tH?ptZYYQgDm~#oy +U9_t&?2!=6|-u4z@1BQ4B`Qh34ob_{id4N1{sZ>u!98LX0xcz+WyYzQKlS3bz#7|xC!J3hVF)jA5jSS +>2Jl)(73}%`V;(b)MzxgC-!-4|%uMfo0toky+mq;<*?T(;Vv|?E$(_{vq$0*4yu4OYXA$&VGl} +A=nmN23 +j){6(k1fc%tRRHVPdZiA`GLAAUNrpdmQ5j$;&qnSAUc`*F(#GZnD*c88UH4T#rO;*<`~cN{e#}Y#1b|2-Jg2}8*6B=d{EFGjr%wUG4@$9gM>;Koe*;iU0|XQR000O8`*~JVo&cQ-MkoLP(~ +(^baA|NaUv_0~WN&gWb#iQMX<{=kV{dM5Wn*+{Z*FjJZ)`4bdF?%GZyU*x-}NizC>SDr)X1_o*^O}Az +_GQvLj2HKa*SZJAV-`gIj7+aGY?Trko)adkA8PkmXl4eID{}Pa;B%cySlnwT~)Ja>UA=mF8Z!-#B`bz +>rLHsNp{oLW#5S@|2{a7*G1D*wfa%k%Vkk5)z7w`--=HE+O_KIHft(q*B&geGj5g`fOV5(ZE{7I&+%u +hU019{-FK$tHD5U3#_7DSDlzYhx>8RJ4-)wNE^Ecr)f<94<||EoE2_(4Bdm+B`}KPFO2gobKU`m5#;% +>;&&9^Qbmh1EgJ_CHA@b-=9N+Y2H*M!Du@>Wlk(`83fLnJGugba=`DI;~){xKFn{MY_`$1&6XfCs+1$ +^7r>$ZEf%BrQvt*aMRE9S85AH<(~(RQDBnfTtDdY<7({*aZuji|TT{Rh!CJL}Rru{9I4u3t8FSI?dC! +KHiq(GM_QxscXXcfH*E3RRnIew!_YMpRqedv{W}l&blL +e>)}ReKSz^S&%G%Y^?zH~pcdZ5TG34xMJcA6x-GB^x2-$DtZe~X(-qO*bi)MbJ^(~xa0Wl@yJ~mK`)Y +4nE&8TZcRx1eIGKuSUgu)kWzACTYdNjzW}TJAUj!{KG7tC4p637}-5w`66ETHb2M6~J?w@3mXu3-I(! +l{RLbxv3VG2*bfv=(&PNzsu)9L8oVES4tvcBw~U48REux3NJcyO5D29{UagLw&fOw4A&n?t@iI-|`n7 +z{L9OSt(0`Da;Lv;h32F57X^_VX3YnI1T!#%HtCWop>NEXk_eZE)qaNDl}|ngaehamHgo#^f|Z6xJJ2 +4M#~{3&eG2@SVUgH=>z~sypVjOL*;)j~^~t1#r76V9Z6E^sQL*upo*d1 +D6)+2as)Y$h`{J&x?YU=hXs-tel^`rcX-keyTPl)v3&r +Mz@w!J$s)C`_%nA0j(K@ZV)6EKyfOcgMV3S+#>%bug+TD-$D~{ejVwW@OxhHwU$IY1?1}+O)V+MQ-ig +mNsKvwAoDwgINh`l19O7V8apnyv;zJ7i +xZsyNU-V`?{tZ+g5!}9sBo*ztaO1J7Gh9_%`%WXAd#@ab&rZ97zYkdNf_M29%SVOdNo8H#k7CIgsgR^r2h(U +`Cb&lFWxYfy?gB36Nb3ZMv&k67SD5WV_IWkv7B1OZCISjs$5w_3ut>WN83Fr`S{Y^-6S&?vZ5ny19JyOwRuyq*096)ve@&=X?u(jhGs2spe9B&Rx +Y)&kGcXTIQ?9t#IT+l!aCSY)KJl9PR!>MW-5l?kClbC~n$A(6nDC^AbrR7bNPb=seAT1gpT#*Ejv%9P +)Q7Dah@lkp)KpdHd)q|`o0iwmUfi`$njVMJ%%c2BUru4kF0DVv_7VroXz9r(o2AlU~*6dv=AZ-ETL-w +h)&TYo*6QH{*Mfj1}ai$0=B&%WY)TR-4$bVt0);VhQu8<)cr?un^U%)4eYF_p*lPwICt+u(A2^!y8c8R&`(IihzlPa~3a}-lqX(UqTnOK3TKlsqlbg +!-ofD?Q%1?FBsIH{`B-IQpognYmF$+$rc7yujL9aBXtf7!22HeP`e6xv&4fZ;>LT?<~?JXW;4zI_u4l +Dl&Y*!ndjKdaR(sXF>KYF2HI&6nnI3NZH7D( +H*3D~;2lRb(@iSRX5o%g8lal`1k(_fxbjrli8CXGacviC^UHh!oETmNzHNywn!{j>@s3>09Ti0)rwr0I1 +uR#!@V`?}`&|BD9!WX$B$gk226LrTavU~PW>G`|sq4AY&`i=~ckv*8}l|U=CK@r*lM`eu^$Pq_ER;sw +^$>o)7`ep+rZJWB&uKM-V7P6D%S=c~Jr{J#KMsP!ID4Wy_V%=FCCg&9y&+oEjDUML}T-FT;k2OsIp8% +>EBd^ZxYOq+)6%4x6qREzP5c?!bQxD`PvVCy(+*b8gnMT0#N%c*#9CZ>UbmhrK&CY@`uHjZc--u0_vE +JwPQ5I;=1`8zTo`Sw7I~WeQhpFsgFiw8_$yz%9(H{qdrom5YU$`{Ar@16g?F`NDI!m6kXHNisAuhZQBQ0D(r!SKi4d`s} +%`*$GwK@n@q12Jd?&!&_wx=VKs=7D#o)V-sFI76kRPlRv*esAO+2P)Q`qZWlYf9>y^nzgni!RWKuIXZ +|$K^Rp?Unu>HcjT3(4Pv@p(XJI&NAGG(ru#66U$d{f%0y@A;WHO<4|V&^RMg_aJblm=g&?bSU9%gzLhK%o +|O~*`8e}saE^TiPRd8_1dIOas}lTYiCB_8d3-~2%c5)vI8;%!J^{&hQNZK+U-3ci%<5}Nsw=VvNK`Z>YIv_DlXB753>oOj$B@W +?pQ$J`xOYGvK+(zM|fJqW=cl9(IROid0Pp%SQr-$8p$mPDYT8vBjW@{4oV2%3J7`$A}%jldE53{veSk +p6+Pq};w4W*F`Rt>mWb$xo6Gjr5Ri`#tmB1IK$U^lUk(WfGy`IzzJXM-zN@Ergayz}N67?Kl5o`zE%y +a$6S<2)P}j82W8HV`2HHj7*e*|bWDDvYVn`|r+LM(Gfg^y{fO;RAyb)k958UeH!`;!U6Bj_CJqnuJ+d +0O^QG)T|krwavK@I4OHgES<&gL7Jz01>+n+$0MUD)Pu!)Kk?+{L@)DQ8cic8|{cra^+_171L#Jdf6#* ++=~u80{2RZYsvCbr6N$2Q!M~x7Z +Xz&3|5=FszQ47N`tQlDpgGQ!iP196cCOffD5zJoROfzftXt|oCuIzMor$`udDEl`363`~YU4F?txtD! +LoN#x?JA7W}2Ted*)h>-6BrX$;H%*zO@BlVeaD7`hGG<%(nb%2LGa>Ks@$pkdh6w8%XZ!&$308?Irl{ +`)|eT<;uyjtZlf9SANk7@&U6l@Q+q~oJHgoS5P0&L_paSYE2unblYKC%I+pSTLFJMAAtxuJOg&zDCWO +w1@89z2n;=Y|@aI$vrN6)F-qPt+N>QR_>f?4j#{dAxT=LiB;@Z2{ZV-w7Yl;FX7Xeak0M-3j@Fj8h-+ +jARIO51Q`0UT?spzA4J0+l@VV`m_e)Y4W6m~YKw$kyxKNGc`Os7b*qTO{Cy170*r*GrS3hYf2E& +=K1I}S3SAydVvKv?fTrPBi;4hdSpY%JYrOAakVMQUf%B;hyLpqG(K$bZnagL#NsJ5UG=~hj>bq+ZRL(aUz9`&^Dk5g8{2V@I9s9I2=DX;g^NdS2XEO-L?hVnKq=Bkx)?}>(v`Z0G~FZ!e@JhaC_iUBkTcUTdSNp`83_VPbZf_g6m8p!(`V1Wer}_GpfNC@qi$Y_5jiySf=^m-N0$PO +2SU+EH+1j;PZ>`ES#XkQ{wsN&ew}{x3t2DX8|&;=C^w{ctdX$hvL*+-%Sa}QPon|USGOXUM-a)=r-*Z +4`3h*{EWpu`MFTu@ZHdVm-5qo=n6U7$wKJ&zTfshcZ=IMvQloa1a)we-907*g`LTqLbZ$HtDuLuH=Vx +LgC?>)IvM)Y@bW%F=Mx6n}bX7mJxX!6Dek|2O&PK8zeYv4S!61<0LAQ$|!pG653MZPvSFlWE1&1}Nu! +@I0pV~!EZcn3hOX>!KP+k{DZ_y$$@<7_6b5xn(me?mPFgSyuM?5d0b5;O+2^NbY=EQy1$Y>xwmfqT|% +1kwGGkE$Y>2$uTK6K>i*a`9Roq%N@`n6h{*OZ5)fJE{Em*5%SL$g)!baw>E_wMU4t4N``KLRA277)ypZ7X_-uCg2_jvtze-mb1g#+a2EI!mYrX+- +D8qi}&X$IVZB8qy~sQb)C)MU!A-us{Y<`yng-u(>q!UAOE${DaYLW^27V<_t$@fr(wbsy +GiPbyYf20)o($=5lu0_?NV5sRezHf^$F;R%aiBNPQN-iJv}-7%}JJHSWgeAJT9tZeR_GE9qS<9G8z-Cx3l@IlVp}yl(;3vE8@8QGo3@WI@JR-NZ5z{n%D)*b` +NBB4B~Wra8jL6E_q4~N&X_5T2q7c$N=vr$B3nq`K0cWMAQ@hSiK!TU#z=3bmv109Qn>@fo1H8BibWZk +jhdzUy!~7rn;p*a#uG-5mCjSriwCLvLrM$_V!|rdE{=z4Q +nLq_VpEAgpyJ~}{jewPd;gAeOkh(O~@FwU5_3*?J<$4#DNzV9Q1h=B|dF-gdqYot|LHRp3TQ87tW?&! +4J4LA16ELe`w(ooeD!;9P#pjm{IZ6~UPa))HTbISHNUnCkHP+|%MK?Mi1JM(gJa>3NiOUI+#>|~EBGs*lFNru|@~ +*8g(+NbN)1pkuO! +NS`2s`1~d6gG#45KOP$61Ea7Zj5ea+-Or~*wWx_ly0=HcL9CBA%Vp*C&!Tmcb*nIE?jzn0G6ctdc#$7 +cM9?M#GNtTS)$_k9w@nB5S!Z~$;|q%`yq18o`5Ytdts^kqs4nv#5+)>$;+Jr4GZwHy +8rh6c`346Q^jxu&u!OpKF&Yw7M&D*Oh;>GxZYO9F3VSyP!gfsYi{Qo2TC%Sn$3c$iXcVS+`d_I17L+YNSTg&;8V8p)<1GkV16J1cAaQvuGWWVPn~E;aj}wk@xc@CIrcB0-|CpGJtt+>8h4OJM?*J>bm)%i+pg +9v)szhBVw}hE%O(2294HryW8^2tZ_%B_xW|)g;xWt^?94_^!G-&33we?1lwYDAP^Zd3?|m^t0xCZuC(8*4 +kye!*VXSNbr6nVHsu+XEfRDm|2aDB@-@>FzXEOh`ep^5ns>pfQa=;|0d!VlC4&V1Z)>Nv(cuYp5zyv_ +=6Rhm(QIV=k}pgXBeUOYP;!++1+dA@k|0sHXYPl?kqIPlSvzgr^uxJ&xqOx)PBo9ud^@+m@0XIoTs3l2 +N0pX+eQPh!iAzS$i<}5e4j@6b{k5z?%Qws@%cMR>$IS3EtDilWWa8i>zbsi#{W-^zsUBy!huZ&j%k5D +;P1@}m+_LPRKvHZOl3NS)S-?BRr +1RrR*JM?@@FH}n<{G+G%&Ej9K+3{GRSq_Szm0G<$Lw{+-MI#F!Q86V^;g0v0&2C*>(291mM>&2SKM-) +4oi=wVaYAZg+G9BrKn13KOUK-QHriD*P~?OqUPPzuFB=`M_7Af6cvElslB`g@`t0eUsE2T +>SeU}126wjm3slIk?apOe(nvL-LQ?&-i$8GKwe&{M9Cv|nUQodhbVs9qNmWgB9cVe_j#Et7R9C1l4@# +Gh6G*MBgQy4CWZ<)th<`p*??7rBV=h1t`Wc<_1T<@)EAy20_!y-`3et&Po4_xLV7SOWPqx)!lK4A);O ++E*-04olF*$9iq@~rhuN-O5AdS}X3cLPb8dX%W8CvJ~;dC+g-c_#9=H7}UD}#~qF|Z1atXhzGWg8#m6 +lOxhlT1N9;^E!UEec9=dMKYE3d5pDB3{Rz9k?ZY*?~nX6(Dct=p<Xg~IlUN{hE5{SiG(U^N3Ne$Q};{s*KqVpU+F4k8P-ceuh_z +ZW;aTBSX4B@ib2{5#7<&dA{g;Xwli_0XdVM09p#Dp6+Y^BMZQzN;buk;(%-)cORfks<=gnn=!UH9H-GfR~cVTROmo +*s15r(Rtb~fc(0sFzEgK9Sl7tYId>=d#Fmd{+C@cp}Y=dZ3Y*T4cszDQJ=>dlVrC&`AfR+Fi9kznmcO +aLL~!39e?Nq=?gWI0d^41HvSa8XJhCmKXM92{<4Qsp+g)aULoH187=YTgLQiwse>dfIlwu+EE%&>ooS +tq>b81mp%xT~YutST2;moiLjhV?EGp49=<#+4+?fctT2fHyXm!>d!qL7156Clpfy`D>IoI{C>udDr{^gf +pV&Vw{CCI-{X4vnQ5^$8|Kxxs~8C}Xp#F=u-dcYhbT7_^a+ldM+F&lJ2TNb7VPgTRBLK9n`(>AP*I>ZG&0tjimc%zlz+g!hnu37*f8!VM4k?E;fnRLosVTac~~CR44MvGz +%Jp2i@uukhWEGV2c7}iNWCi;j&j-$hm1$#lm)WW$ +_=Je(RWUp@Rc0u6M6lK`d9&>?v2QMK-4FEJBx-Ez3RV`!-`6brm4KS*RZk54nCmj^!Cs@tds{}FX}zzqp6b!O#br2 +n#f55AiX~Ogg}W(e0AD&Dhqm_3)*&XRqy~tLrlX2TiSYJ#P%|>60x6j29&#`zw~P)XF=%;e*j6%y8O( +1{+ZK~{*QP3{b2$3(`A-k%JgW1y1Z{m7@F7=+Hw6hy0uPEd8PMvI8XE=HwpIezr#M>N5GM-ud>(e+_-JFQ#FxI&0}aT%lUS77`uKbgG*gdW1SVOEiLGj9 +qXK(CQtk#@W9I1NIipeT(RwLB~wG!l;nAw9>GbqBBg9Yh6dc1?BQ2`_x=B#H3W~Rdp#(qgV7B-~zpHyChp?Uh>7m0pR5 +2#Q_bUV0<|xYub3E97PQEI(pI^$!a{>6|CxtJiOg?#g-sUQGLG1CU{WO->W3WZbvz ++b$r>An71n6~_(E$%;f4Yp)tA3hCp=7ka6=$|Yx(~8%CwZP@gadCqa66OULKerg$J#NPAGA3JK)t`ng +)i(zIgT`8D1ZwQ*YxMl-ye$e6HaQz2R=Adwd|7M^0pDv^+5Ad{*@7 +j2pOhM}A*ZbCPO;_<*8kv#=TJS8bSR8Niqexu73@~n`*JZY2TZ<&8cw0cYbGxCi9_Rqyd_M2Masn}=P +%H-dC=FlWsY<1~AR`IO2zWAjAR$0pwIAwV?f$`Mk&}KZmkV6)4$Mm|E!N_Aha@R{(dei%fVSaahdH7# +GbK!~n@>$Dc7z(0WbCF-Bs_}0oVX*geFo}S~tkE*2P`OVMmV(eGw5)Lq|GFIb)N8z*NoyntzCGElE>a*imz!qD)Pz{h?tw;`(tIcEnh(Rc;3B*>EKN1- +9+V%Ul0R4>TF%-XZRRL(m26_6sU|Pq~uG|{O}x#o5UW`cRS@2Hwr-OH_HaLCPDN}Jyl;5!DST{owG~) +?0IKQyZ@yz77_gWwJ`2YMO%K3mLjs)b)>ck7)3(=`Qb?s(fJe%IQy@&1tBKlhp&eJA8AX-FP +4>fjV0{;q@A`wF6OJ@C@ynI^o%1FAvqb{dmvQAx&&AGV6wxq&#X|GuoCpfMCD-Tg%=BHb{tJDu(8kXo8I!sEw|5_8ZUd +4HAFd8pM*tPZ2v+|T$9tH;Tv$4JI6k&1iYoaJ+PH=NBs`}!rlhN10&c@HE02WGURc>P}e_+j#0-OROp +Dustm#O^6*UP18VzkELMP)SL*OxT*xK;gm|0hY|D7T?SzkqFbaI-}b~JH3-Cm{%BxPZ?V}ZVVYoyd>h +_W2K-;#$v4xM?>Q(Axdcb9zAJ~(qs^ag^53yt7W1_0#^uZjJjH4)!O{7po8HnAv9jsLr`*#6{@htBOx_lMEHpm)Vioz%oq?d6!#Ou*&DYQ)* +NLez*<8^E!u!9Ra*v|Zu{PlJBOZhGvX{5j| +0Iw^r32J-UfZAT5=f!ue=#&+f%tBj3{D##DB55RAV3NlN%mt`%}f2Q?4&YHDPqqR_NVv)6n~WDXZk-^ +6uA2?O=JSGPsAymGwTGu{^I09>!x63O_e*-owS!!S7}~^CtUCL1|YQgx=yyKWT&hxkt~F1}O6s&_I?{ +o=QL$>V5XsdlgJs3%YnGU(;lY&SYj#3eFGp78{P87dE-|nlQJYmWFe>0E_DFND{_Vc78l1u9GH|j`z? +DXP$ras~5jf1WgRr&hq?GzUqf=h$@$tf3lN5B?aK0A5YJYPdVUHRm?9=9?n48_l9uGm@XYYc40mI6#-eCbxWb4iV +lvCMag496P75a@|9dpr;JjJR<43*~c4p<%EYo}VwsS6z;#3Od%EjMRtg}27PTUHfFm4%6O659gkBmld +*dN>qwtR|3?xa?BG#bSzx0ZdoyZf~?Mw>}BcsU<2_%|MpX^|+Ov%-pmt&hy@q-B{-id4*C)`+I(Agv| +!AKWOZwv+JLk$Uh?Um^3C)~UC&vU$+bjW$f+49j9pDh?7fD8^Y1VrmVE*nn50k}irSR-~ILO_;JwSPL +Eq8t@;E&Tx=j(VS|aGH2G2G`_HNc45ctf=${|FPqwpNQzj5RSku2*jLy_F5|}(k;)5`YYUN3O)vt2Nq +NJfh){~6DVyAAC8iAjURLPcihmWtIuBq4<+A`*vn+UrJGSF{0YPSUEV%qvtqGUO2mlwP{QBs+{e_#YZF;K61;k8ci-+d2c2K{7wx_j`Td8;&(Hw9(eO5dDB4VA0v$o0$r!($ +k410k^=-M^MQP}rFD+dJm?(Ue2?#{c&IvqblC{2x4X9C#+*h-0~959BF9nW*2fU{)s&iKRi-Uyomxt= +oEn>idn#WPq3u4yS}>jKh1DrpON?AE~jz>Wz}7jQUibS+cqjt6=499W;XiP~AY=VDs +}~SMqf6=yBP%>K6G@*BIbY_i~GhP*JBlt~(jFKekym-bUt*u+^xY~;3+}HsA5>L`PB2~< +XTj4D5P4EE)F~`3`ZWY^sf^)M(z~bt+2AB=F?qHA(kj~MJmWmc^h*LAEycV2}BfW#JO7kl0?qnu(;Z_ +dl{VXCuHbB$>L8Wh6KinAB8I=`oLy7jtgVMfn9JH6Qxn%CBs>N%C{rYjSjatsk +Z=d#grzsE5N0pT34;S!08nj26Af{pbXgii}{Ed6=~7+A-|72cp)d +|Ceo+%!q1`axHT<8Z`T)7CU-cq|vN3su?vePI^}(LD?>$o7oH&bs+3w&w=abU6V^R~ +fm_Fu>9|yIIH+<^fm}lYg&RpR?^E~Qs$*+_{g*FZCb4Rk8jj5ZC9_-9Q6TD(o +20ue8hjb)m#tt!XAhUBXtMZw6T4yCS1GBjb;u>?sta9#9J-z6TCmIiPfPgql9X)blERmX=XAB= +#$8XxadUweTGH{4Rf`+@Zf-2RA?pfz0l%SMRC&*J>lTh4K6$eW}3rKva+s1@^0u8iJxB0B*kj@Xk3q( +n_$~0F&D>6@tXth5@Z#1QghbQ1SEeO`lEG;9w|!1f*)*ZN?L-Y|E?8aJ}aPunaj(9T`sp&jr1*yrvnd +3;lrvqFd|=^(c}_s}-KIUIGrQ>Z%N4A@=K$U9?FsL2G0lc;JwoXn5!n;SZf0!Gv%A(sdEK^;GoH9ev^ +gX2A_6mFH*W$|Xnkz4u%g-@&foZOJLZ9Pe#rvloSn7KKE5US6PzkAWb!oxrNV&2ex@-gob*gmGyz5>QAYru+%rZbIm6s>)^wO*c{c_SY +i0A>oYvqXpTHCI)I+3Q6%UZ+CD*%UNz~vA+4MG=|G5*6g)>cdBA3uEjz}|fd3a+XF3{iX)$mE9lYxzWXH}&fbcwScHP|;TF#`AUrlm$CpTK233! +*Qg&sL@=I7icRxPF=KLH!brT)XydqnaB<;;k1MevwS!99!A$ONt37R&ptq?^K)j#TUH&`i +h5TWtpsHVdoZB1q#d&4wq^~OZD#ArvS*}?Kl~~|AH=~Q~EWh+lYd!Ju5#1>W?~onLvCO4l#u7+Nnc62M!7#J1D^3s6e~1Q +Y-O00;p4c~(=$C`&9L3IG6uApig!0001RX>c!Jc4cm4Z*nhna%^mAVlyvhX=Q9=b1ras-C28Y+sG0BU +!P*ZAP||8*0y{>1GOsZbL_hSaT+8!w1sU@D{>_J?T9@}bHUFCptY++=32f394nDz8#3SJ@qAe;zohN~MuUd`t2N2;F0Y7XWX +1JaJg)V|^OxqgVQUpl)&sJa9DJ8GexTa8Eu#k4$G0Re?GYn~&Ms-ktn+fmWVq!l=4Gg~3Cndfo1LEc+ +B=_ETJeqpe&T7tOR}!A2%Uu*Xhwu(G5Mv+B?m{K-BM08Z=!f}3BR;K!PtryxR^=4*`r`d#$%FXo&o#UabH>Dl}9SFf}>VnWj7PD6m8nt}o(5&>M +(G`|;$W~rn&eer_4=UUD0>G$LhTPX`MKRS|mo(h_9xu$u!IoirydW4n(f+s=~Oo8B!%dic`J`fcM0cZ +%nT9*kLP?l&Z{!jovund?P@T2v}vvl9Wpi->OSS<~3F3S8<5(7gf$a1;bOThCI;j)AimloQ9mxkS$a> +^8)GS#j|fvPNt@|YVzd)Q6D(L%B;;=U4Pf*FCXl8lvmh1Z}tK+C$&-!$gP*Y_&9p1$yck>!}>2(i5nP +6n808bpGA9(y-8H|0$>4%}!F7-I`kjh~8z_f&Xe@|3i&UGJ6Uz9DRgDbKVtOhifIHT(HP#0yFMpS2k- +)V7PV%)!QH?Io|*f;R7h3DIy$1@9iMqE$;!>yP$(`?uMgkSFBrUTy)DvqLttQnzgQgy>}(;%(WVaTeI4$p=|8!Ez~IUTvOI~9kvMYR~J6>`bIvCkIZ+@5cLi{%Er$_AKnA~XSKERZmQ$s+02{6&!_M`G4^`Li%=<73PY#}6l$HWi +_AM+&hui-Tp5rdMe4+xY!^lw!3(6RK6?}Z=SY7^AZGC9f|PerxztzvB?chbVa8jj`Y`G2W`D}dE?{C` +!mRgqh2S^kojcPQb@lC5>~)0FU&V>+AB-z`I>sX_tQ#4EmKpAwJ}DrQubsonsY01Un=;Ruk{Xh$gt2a +f6=)8Nte4fm%J-9YSDE1KlGZGd(`6;(m;@rjNCu%B9-La4I;hYq4s0w(IaD1Zs_hd5k8z~rDvlimK)9 +fjR;FaZrD&vqa_(p6y6z66u3U@E$2Wh|zcP++=QC21nT^aF7VvK)+NU>K#)G(Z*k1;RmICOnP(eDx7r ++llTof}pX{gmDgXl$wmJ@_6sW-`97i5Nnpl8qcQWszQF;dbT|ifdp+%xN@XTjxw}%_s1OQIP(I7iKWe +`W{~&|VrV;xVZLz^$*IaJ+KkBG5MZbzSt1jb>I9~2DAnAEhxX41ZC_jt9~J>81{en>kY>S{z*I$~ZgW +(&F*z8IF>+Ay!@g!`X19rU2K>!2fzOu*G2_gWb;S%r)GG{|x+ZwKp43kY#Lbc5wC2e=V(})=oJ~g7!P +Ukri-Tfn8Ygy9A{r`}FO)!?H#Hy@wMgw93jYfwefx!VFZ60(+#aQelK~2Zi*Fu-A-0XKu)DjYJ@6+L! +w`DgJg!}WOYXf)a=qCSP|NoKiDt8Vra-Xp~H{up`6So0n=8J+8!|pj7>U;n4WnyQ+iV$nk +`X%{`bvHO;GW(4j9mOKW=I@6hK3&-`XXK;dWX2VD-RQS7kzyJ7*gvSwk{Y7QV;vSS;5^s(TZoWt+co8!UqfGu)OH`sdN=iku +UJN!HCy*=P-T6{Km(`Rkj_0OQj1Gh3=rwQY=rli%Ae%EckVSIHA{&O>qwzde}nlY#g*sAA3&n9*#Ac^ +EKqmc``p-pZa+e`kJi2#xWp|GR;(_l*o7?JJy!P?I~>gJP8 +Qy$6YuxrZU#SQ@Pksi98R=KBFF~Uw@vN^x2eEbw8TD;o82uF)hcx}^e{WBtm->qu5MBqwBU7$rS0W>v +qPv0CQN|+bgfTeFllD7uiHmAQ@FV7=b8$PX6}469vkQyCI&i+^8vKJQ#*y*)|+XfH&PAKr!d1A-!xq( +bX*}`CgHj_fI)B4`Tvvi{5seFW%F)ZMz=iC;x+%C$=#-yZaCyxvvoo)8Pu8v+J@F +;du^9*gAOhXa#}^GMoCLD1FN3+4hMTHc|g}T!9e=_b@dL4>+01Z$Nyk>K_7@}T|-e(I8f}=()M6iw+V +3r4n3*08i>wPY9O+xyNUzgzJjyG0F=S7keL{%#p)v6xf=jlJrR*y*JI%LRhY(f-$>Piw>!+c_XbVl~B>iGJc26I7uOpgUjRA(%ppP)MavxwkX#Q5%4BG4#d%Qjbu&7jCeZ%-|9KTz*nX#qObuUCJ&ztlXd +x^NygxZe}5rN_3O`J;sm{efdcBA#Hx}OeutUAL?llKPact>vqGuMO&j9;N?(yK#f{XhB_P)h>@6aWAK +2mt$eR#S(ozoUKw004*y0018V003}la4%nWWo~3|axZmqY;0*_GcRUoY-Mn7b963nd6iYcj@vd6z3VF +mDi)9mn?V{NC|v9%Xae|ah9z?5&CGklVQX{;MbQp!Fjy +2Ix?URxys}yj4vXK`mg}RaZwWTN$!C)_WjU6fntv1k!4xQH0vIQhN0i0GTwTU#g!v`taeWooN3|EcrvX`&(JlKmC +lnw>6zyA4cOm2xY1)@r++AIyI>F95e6jZZKtlE=P1l9{({g1V?*{H#y{4LpWhoJ9>%+Z1+VdwMEd#)` +=VM*Z@vfCBh<=_S)#{yLWjUe1rc=bk>tb*&NmPF>J{5BXVMfEDm&yIC3W0)xsqCpV<)^Sy1%yktaQE*)zPn;iwYJfEuPwXyV)e{cp<|A2nFKE`aJyVq)(5s@XtPA1iN|tH2%Tr7>4<#E=CTsUxR;sCf +OreF$N9x25SEvF2&b +T2f}f`dY*RqX{4#VL#%C_cs5z}4c?5^&Oov84#`ODwROw+TrLN60uvv{faCp5tIm=^ON$s^Ow@2x0tx0rDez&aC5a)4jp4c*4~+)#7Wy6d?Um5{>ipN94a$>D=5+`h*}k +PC%{U{6fdBko4ii>#)B(71U{_j>&};k8zdZvBvMBp|(Ty8bvE-7D*nW}uT95n|tE^v9 +ZJpFImMzX)_uh^%eu#~5;O;X(JGoS)_xwH+Mq(PkC;gAccmAJCDrbr!^w5=ZczrXp|Pm;2o-kpKi5_f +lYcD`qJm~B(Khbvc=A5q +6eGYaICZYNM*QJpN)-@uIF;sVmjk`J1|`c=`dLx)ncu`0(z9A9)8O3wn0Ze~7d5^)WY_o!To4Q{8UVA +;Dla5%BZ6-bj4>7g=`dWz*Enf}X#Tx9?Tk9HU3?n)>#5K|p`0uB!T`8hLKI1435?kNxugb#KMoB6N_O +D|x9rI!532MlyJm?dxm!)HP+P*D%r;+c%17*CfL23l>@FgAvWZW1bnZtw0B+q48f=DgJ$0_pWjjZ5c&2%BAM6~ETp_L;6V5OC%>{7L_;iGD1d0xpqNa}ntxwv?p|Mc>2fBpIWpD$o8vvhi;0Fo}%lzA}SC=iIj130kp4`hzd{C +8u@{8}{z2-BOA7rKdO0R>xi+qy@%^+6hQQ#ZvFnLYVJJTFT@%oi|<141^J-5$i>h;}ED3td@=wGu#tY +h9>9v^9*tcNG6U6KNrIYXBNPGYe5SG^48u)s#mdP{d1mbIi0A9yg#MhVl(B(qu20$wm>&zZOBl*Yn|XxHK_S@epjGJ2x*rZ6YO61K!lnd%#N6FnsWz|KwD +XiwgB^q;&q{TzN-+bh=b$i$7R`qHdX4s;z921tj`O)_yF;lW-~`>Iz*7VP7vu+O1p*K9XMv&<>`&gpL +)9E$Y)q423h=)N5oe$&IS0K~0-qOzD^p`c$pMlPTWceNVIbAd5Dwa;O=ns#;4oLPz8hh7WQugPDZ4_^ +YHJ>J1>eA+;B1LjWUni|@AlaQ4f{{k->rUBkqwuER^H+xxv^fxooJ|y-+SWoK^oS!rErc?U+qEWI{k(Cu-<4_ +ugfsRH2FD5v1ot_Ike4+&k^C>jg+^y{qr|>zk;{m5INSmvnJY!$4FZPv6g-GGn_b^$CExzZDjI^w7vH%E9)E3)!qsUS(5qu#Lu?agG7NCp-z!zc*G$jAxWqdTUj7g+s +MiQ8-R}J6Ker+>u;ces%7ti974qb#?7X|zfA`oZ`yM)^B@;`>p(aHArkHkF!TxIyQ*%*+qzO=U3_+$w +G7zJ;(<)JYHw!qm;fU6r-Z>?9$9P1uR2PYQ>2g<8VMMSO#o^F8!(^;OP~60W*rfo|mnD +1i~NjjXbbf0AF%xT$qgtVLe>pT_3YG!~G#!H3ozj(ln593oT4Fs6=P20JG;kCd6J1*&#A5XZcyymklJ +SV@Zbg1(-2%LbNSY@!!I7(=9mE2XssRY=36Y#TFHb1xCwmX250{gSb%278w(d5+RL9c}tdA*O-VTPeX +PD!5o)8nu+)#DvTqWps>U2(Ie+XCluYpwvcVpULMdQS!<$Z@WUgU30lGae1q)lSja4EVUI{XcYw3 +}|&jXK8xi94RNPzI9Wf?&Oro1KW#SF&Tq88UF~Bqb5%hQ#XV_UAyO18@lKvaHu|f}=neO?jNI3JpH8q +o*}Xp$px!N#8dDMgPfm7h|C5d8oc%d7#y@oSg__7S3$X7Xg6zqY!?dOpt`kNo7(59d2Va8^7&H@dkiS +*sDkMo~6Z%Ucd#BY<=AIldJ+RsfiA6)g0oS@37D=96dyEla|Qe(FhRq6-j6{;q?3juRkzP ++I7t87ZodZU0D%~Q!1xHHNV#~c&}JiTs0U9=C9N}LHQ~}23oeK3@z&OTgpGgX2e^xi+{xyEKzT|mL|1 +{GG6H-XAZcNc>|a9ISb1RT_E74LhW*oB|NeK0@XVBK0V>kcnf*>&M!OXsA +=W0(X{rLrQ)&jdSNVbFK^`@?C<&c#6$ehkTyH};pK<3g*ZcLJ^$*f% +euY@+1pIYhZ_p3jUbw~HX| +%O_tiob)Vl$wG|DMdZg)?ag|CEvSGtKF)>!+41!rri)nBmgA-6!2AVj-=W5w671fxl>2o7-s4;xvP}t +(eME#mUr>P<4KsvKp(baI9z{dsL%`&-Vny;s4k&_DLt@`(POEM9kl;RQO2-G%#Un1F|H#GC5r2V3sb0n2uf6++otGa+8lfgq(&RpApat3m~&`skIpf~9|>8=P#Ep;mv;F5IDLANkLxIMnSC9I+W@TK!4 +OQ}!!SKvsq4B^|8%FuLIj&}= +FMM$*YBrc0UlE7n*bsD1wKm8aSlVM^Bt^E)Z+(w_w}C8 +8@PkJbt-hF4opW--o56n8EIB!w#mfKaQNLIi3>TZmp7D((_vQZ3V)YOU$rv+2T*)ei3 +@aczp&F6eQ<#U+fzB(k8l=rP8U`_4liMvW(ADE@sV{f&)gO4ob=Pvr;^(hbbi&768`@(2gsNJq(+U?{ +vA6!=%so4Rv~qEPC!38bn2Af~;6hk6LOHz4e*d7bLia}vHwt~sKcuwvpFL}g<79#{>!$#kOfZoT1Rg> +fcvggTJE|&n#@!0w&*~JC=`HqZmAQ>Q9ccex=z6YTubNB1z}GchFUvCw>^%s=kXNU9@Za7~Y}1ZUrmw_ +_fHtUq5@dD3M~0#Yp=OYnCl%*hw`#(nz|~0$JBljKueYw492c)?1C;RfKz1r#UAqqYKXO6@oN+p?aCC +Pt}bR?Lml-^2HzLLlGUq8PmIdyUGBb1LQK39?TQcbD!)vP&4;o7_&cIEIlxm%hMqLqi)1U;-M@V393U +1glGI-ii?{RwppRYMj^acSx1*vd{YF0+4JaL3hh71Efu3vQD6A`tTZF>4vkB`sj;BXM{|=NPH +*`3ipp0#M7Rj7T-8`$Zk(*XU-gse;!64-vGoX|DI+leF23 +G<}}=8H*2t8yJ=fXmj*jN(cAclsIo|dB&xH?IERFV?=!JdvPkV;pQf@2r$pjX>0y+y9ZHd +FCY-^)`GcGZB^8N;c3G5NbXi=Ofv-*hVsVQ;dq{EdY#3Ft+`1Cq2~mB6%YeMmT@hFgUl*j9gYO$oRS| +mWonw#K*M;65PZm#6aG7Stau-nuWPe^AxsGXrBac#qDPJkrz^LAaOU9U^Hq#G@k4;13UY9Y-pzn<7d4 +D0ri*_L3NS=>=pD~7$xq0s9duaXvn4LXV>~TMBa~vOF`6vgcq5JmH6;xQHTmK23CVv|fdtS+t=>BOaLe~}2-udusIowA6aoWE05Kx9 +LfOxDG65{Yo5}L%@98OE;>431g4n`flwli~#EYNbzJ2-PL$I{e={zo#SW6=B#y!*H1;Bn)I(mw`-_v5 +9TB@+yBKmCaXks#Fy?cPzI027!0kpQvw6;~PsKtlZ7sw +|36UA=84-e|yvE9|xQw#>ll60X}9t&~UJzgrTQ%mmOdpJXEGpoD&_^+kEVjkhtWE@uZ2Nvtw?A_m=rX=-C0Q~d1q#y1G` +hS)^r!KkV*alrDpYjl+0He`2fL{H_p)hhA3_Qu?eh3oE6F0dvNl(^gMSa-nw$OACs&}dL75AHK_OxIE +ZC$x7Uy8Z0vi8FwQmS3&gbw07BYIEIt_?GK}Z3&E(5*w7!qjQYwVB*_7cVceebebh5#ZO4?)Ua#%f1W;jvJe-xJpHHao +9vtTIR5AcTuo>2n&{cr&(ibQOHgnIKfL@fP5e6bgDydqxPj5Vv@)QWHm)orENW%z7IA{d}+kv@8I{e7YvPAuDeeampl57U;x!S1J_9zy=gg%+LL;Hl>dkCYyjVX#TbU( +LvW!1!XD64r4R$>k_6Bn{U +O6fWs9w$*jS&gnO&I`$?Pj@tT$8OjtOm!-FEJUqaKGE2HZr}qaGf}@obn<{J|_SG?NN$usdM1rpzZ4i +6_M}R1Ft+69myl@u=RKi075@H^f>|iOFWoO%mB#GXyN=eJ~#B?m`dU0h+z+SFPdff-6rm3DKQ3#_65T +)SE`XnJqak@WEn%UlVDz;MKH^*uxwd6tW3AqLH%XzvWmCQKWyoVbL%^p~eS2p;@Qn__vwJ9~y+*U`aq +ZezPR7Svq_lgGsbE%u!Vb95n`^luR=c&$*wGKI2F9kgg2OKLZG_T=fegC5=|m@Scde}4b()BD!qpS7;Cy15 ++d-{rNv?%gNp9?$OF!`!_|^Ub}hTQF1*%baR49!2q4ufaHJ8%~nVMXGyf(!-;qwb(yRT8w+k?;49tTW +|c7nOTxS3G>FbQgQ+Mk4p{-kKO*+D4Nck!C@Fc_<~a4yzRSE5aZuF)n+) +H7fFjbRhi>{`jB2k1dEq(=UpijVe2M~z?@385UmW#w;4ZA>?A!Ity1J4r$4$%s$Ceb9IZmQrCE2t!tiYHZ +jKcjH}BtZ1>oxb=r?B<^YL2$!q?jS753~w1#jz8?z@V+=l0DPulr3;-{Y$Y(XCg=cw9yR0t@>p5X= +dxP+ei+tFhCh*HPu{5ckCw5mQRm4;#nifQ_vOwB?eo;hmwO!5aG2Q8zr{r>|{O9KQH000080Q-4XQ~Z +za0;dN60AUvZ03HAU0B~t=FJE?LZe(wAFLiQkY-wUMFLGsZb!BsOE^v9pSW9o?I1;}5R}{1d+Zna`ur +~w2BIwR;0!%u=vuQoTf(e#WoLq^a6r$CR>R +gSDE|Y_{2mG=&_O^dV +IkvlI-IvzA%p2|$-(3Vyic&)Y&L>DsOQs!8PR95?gV<$>lxxm_fA$RFQ$7ekRPsnW?<%G|N?B+i;}rn?AI8R;0+2V;We?LpFyK +YULMHYc0%KiBJ!ZmzFBhV=3J`|I`fGWx~acRD`(vFk6G#Rc1ipBmd#B{OQ_OW=My9^WyF-?gBujoix4 +B0SuGh5`>i^1rL~hnqLVZ$nZI;z0H+XB2_<2L(pB|lr-ha>)}@DAVusJ$$xI@1!k@CeOkp5vRjx1@;B}Xsmf +D{DAl;sG(6ZZ^r#S$Ei?I2q-w8hdWzb}bw7HT+ce5t(zl?7N)S>2{O}heh`;Y2*0=YcJ_oNe9}fvqnu +3Cx&7zcP5;js?euBl8oj$x7H4E+r~z3nc=? +sS#M!i>3ITs$4!!*WIR54zfw)`-1r_l-~h%qMMco3tn6Yh$$O)N)Sv;4`Fru|Cd**%p%2`QPWxV0aup +SBCU4r)`@}n{*m=w9C%A9yi`mP2y!E`jD;_9hwd5dhVO2W6z;Y_UF$Xz>m~EjP-G%ckp%bGZk(+X}N8 +;wKULXCrTt1T_=|9wiX%dh{)JS7k}0VL_hunvU#r-Icgk57_(@~z}U$1+jF8?gm3J*T;Aapu_j@h+64N@o=UNhjy)Ak`q*3ZvO!o?6w)k~vwkpolza&qL9iBl# +Tk5egeqy6!K5xPOr)XJ0PIGhY4XJ91{lUwC+ra0^;d^(|2+iwfYY*rL|V$N}zYukpL=H9rc5v0t?*^;p*y|Y +`;E(28E_xOm0K7KDPzKP_cb63WE1>VXMto6|_Kx?V)fB{mPcJSSG2Vv55QM*@jP?QZrx(%@%Ksu1vTc +4l496X)M`6qHznr(X+eu?Uh6S7>u(%BQ?oNnl@;Q>sNgU0zWREw>IlsY +GEl$+Qslq!_ix>~3y&x98@#1RbR-gYRG7O?2|};oY6N?%ENct^KagY09iCgFN}VCLHAz>5!XnW +#=UvBubr&U3%)EEfVQREpG5pQtEEls*KCM))C#H*gZ?*27pYQXa_b=jk7yO>M_TiZQ-r8zQ3yMp(p-l +)ID?uJQDiyF48{a+6JE+izj({|18pqTLc5%C0%{`*s|hXR?t@H@FKdR_Mz@&7W|xpTSyFqknV2puAMo +TRFlD0W{8HCgjqE5Mf7j3{V#%B$<=B$$Vz^gL*6?pS@T5e`HJQ{Vdmk)F2a&U1j&L)`FCVr>^!8ocfO +mb{nmUr!2_O1TOPQl$HV2lj$ny0E8@j+iVG_o_t^aG*z8o^vhiyzmvbf~mMRmE^8HVRe4La!*X$U7UCi0Ac;0beLH79Z$Q8TVH;~feE8dAv>4gREEy8e +H{WuJEM;!QhX2Um|$exJ)@v)x4s4d<2+!N6=wh$yR1g@548o}t>KBeFBfju?#46B&j`Y!Q5KYV+zTJF +v4o2NLEq-bCuj`m45D6V)YJ|iLM^}g6-+NTLd$~RPBa;Q^ag?xz8o{{g5NQ3`u%QRM&-2q(sEwY`Z52 +P_9ow6Uw^gbz;eL02skfx#ddWD=z3;l?@dgqtx`>WeAJd)UaQ}^?2vJh4&427m#pV}DT0sfsdF}?n|4 +n88YK$Om@j8zsmJB;Tw=ZLdrrM%0x-;z!%)b!tNe{$~L30eD3=YzqUvQ3L{)(1{!rr=i#Zg75ZWY +z{pUusD3T*g1%plN{i)xoYG-@sm9wbyf`_D(mAvR_!9(f(p5{kvM>{{v7<0|XQR000O8`*~JVDK8iZV +;ukhD{cS)9{>OVaA|NaUv_0~WN&gWb#iQMX<{=ka%FRHZ*FsCE^vA6J!^9t$#LKLD<)962%MljlDgbE +v}s$SC?9P}ydrs#Q?d$J00VH%#V))LLhy(D_Vi=kI}1{=9y#hLg}7V?0HN+$C%&* +i+y%A(eAe!RW?=|`C^Wc4PSH>x2JRB$`p>~&hpo11qu!k9W;(8$n4^^y9!0X-y4UYCpAhqC#xX*R&J^ +K!jOn{1ZLF}-~w=jB2&Sb9L9?bpj<4n1<&$ZJ4SKYK{?Y;k_q7WeODv1;zT=S&Sh`U%)j0@V&ggrm6X +J*_u@x&%xKu2f?gnh!>b&P_VMhiNuc*4Y>Jrfsr3sT3gnI;$tk&19aJHGsr#y1}F=CwG9$!2w7bOq7z +hWF?z-@TaVXlSz@TL1sq>2M6;!t!v=cGEW=HOsj_F>@P4&BcAbvT!NfuMb=Cv!&>G`^&CI=HJL24s%| +DANHE%M)ym-YB5hK5GaC$o7cdMw#|4lqBu)pAP{YF^AZAAfywj$s)Zk-*xH~9R5*A<~RI8zZtQuNKb_ +fLs@p1rVOHq^!J+%*=5%9%9*g9Z9w4*`Ep>jxrAH+EI{EUavuR35Y6uAKY?E&xh%9dV7A7p$k-==vjd +)lc+^>PM0fsZT

ZFh-d%m1ym@u|3Lc)shWOgG+sn% +1@5OV`$4>5BBRSAJq%d)5`rlZ}000Ff1<1Y#<&f&s)l&t%cmQE2^hXbn#qGBp+=uKh&Zf><`?1~5#E`JLAnn=fIZ2Ezdg4OmaQ12<79nBMyoWXMSdpS-cWtcIO +E_AaeMNB8vrY>Qt9Xj7GQgyIpt%-i}dMs*Jz)ILT+$IxNOqo~FNGf?ka@7uhIi_< +_Ei*L~YzJ7cD!^z8IJMQIDfM}v}UZeJsV9PH+3)F!1gA_9<3z2TXD**ebDMboHBS&EUr|3tFQO=yLtX +PoROB>ti&IS7Z=bKyDlnPnlLQKUudSylP;zG4Bpzg>)0PQLB1p~~p8WsbBn{y|jfr56z$7O{*;0x>;^ +E+$v;X>F-TnCI&Vz?6D*T=w#g{(W<`+}K^!te>VU;SXXPU@!0Hp9_~7RDNJAP`9n12)6Kcrf~G2aAe| +H|=_)Pe-54^gnsSMidr^0_+X|LoS9s&_L#t@?G@rmY&UiKkNg+QIU|M#e=Y8BH^g^Mr?Z4SIT;R*U ++@+<4bwn}KFOr7=#Yci?;{ytO9ofKxGR8xnBiwoa!raM-6)Af15cB`lT&5zn)-fHnPMA=mh1dnb8)Os +6=7&1_l74U~R(IQ0)$DaSGf&oo3~fAiRz$+;tQB9unFSh2G=G^|4f4J +0>g;yO{K07>Z7byJM<|5#Gc66iPATo&P1DZ?9Iv{?$irVHCdh`iK;gcxo9i2s{jn>iIze(i8l~W+MaO +;ChQ?{4JIq7VeUY~)0nfgraAYt@u7nELaX0HrB(gG%PL!;CuV{kcKnYlI+?!$#I^!WimJ9Ys(c|Rypl +eF#|Apj_E=;Munus2kOj6z`oMz8TScJ8j}@DowJWh{t4&#heifI{*8)Tnbqm&|U<1;p6Bc=u$=XtPOO +rXF?1qf&i9sk)@If(a59XSHmBe}+(Q!ADD*@7tJpnA4hH2&Jky7BRl1rRbfvpvZvI%d(j;P+;i< +M#sWuK7L2o+wzSR2B?311nEfpy|cB1+>>`x=W-$<6Jn+n;YPXrz}%$7AvG=mdY +f#2-K4k6(U{Y~ew)+-89mIinTr*pB +Yf4_MEc4)zjS2@Z*7YiQqGUgK8W+zq3Lm+BNwO!Pb??eW2Qa^cl@q*4+ot3=t3#=d-YB8Tz< +hXbJmy!ZrXVHiFH2Czzz;h3!1bU(fQBUk{Q&yIf2o86-m1U+*DNUTmj4I=qrebg{KJ3gO +9z^1-h*%$)@5gUX8qUkiG|kj7k+0uanQkj=>%QbbP9u+{E~L6=$qvx{=6gq(5&;U18YJdfC*X^CJ1QW +!!m$}@H6P<$Sg6?eDh?JNI+x85mJ0M7Q;IGLUUQHCe3amL1+n$QPc@mtiWF(3vo@uEBqC_aS}df&N}x +H)UGBYH9#JOPNu_hfBa|S6*x&-*gb2#fz3J1@}h2bIqf50Z58zrW?0)4zx9z+9Xj!5`x3-!*@V;GR1* +NGy==7tG0QR>=n;(-gFDS&l;q`Bx-o-i;!Rl`qM0{uIr6rVASPht0@`ylH<756+(??j2929VR?oqJ#a +EeKPS#&N6GQl-{W~&25K**H31!E_^8%v-#RzhS47kWdScXxy$0Y|1+BLWk+5!MN;xf=?XS8Vx-O8VDmlVu9e|p80>ofSI5^yKeLjHtO8M=6Lmp?shUV_v_tWS_DHRi7f`o4cLupvMusoRMsRw*o3t+bGxu@Ixj!jz$?y1115-3xyr +swPgrEG0=nKcBECrJ&PCuG-wiKg$~cFhM5X3bPTKhJe#);HC6*hbW~$r>SoeFL|~tz>Fmsvm+B)`r?L +W}ii=?tQ21k+E+^_oee5o)jrU0V+p#N19F-^ZbaX2ih8l54kv1~V_lfq^4BcOnmZDwHfUmIIkO2eEcAjH!;Xx&|wxEARU5aH +|CE|U$gVnG^ivXq23Kld>*JWE!_(ty*uG4yo8`0@>s@-e7M!aAFadu38;-_<7aydk)Ka7mX_jOBD~_wN)4MuZ2Y9%NtC<0;>K +ApsT?tnfNH-Jlj3R;-WeP$q0asptX%Q6ukn`4HoDa;fSu8^e8<)%;IP9l}O?VLIC_vBi+UPDF@WOdqFbJA*isTW!AT3gS=1Xj&z9)vt}&qi@)yL)YLvkUyqOd_5}aa|bOk-5fw4$mR4hr*`c!;(GKT ++0YCdx`)@4z*z)BKLTKC;NIj31c)Rm=}6-}*Nl9b8{^AhEkVN5|@rp{tM9>?G@tX648>{nB&*9q$3Lz +PuS+2cCA$ih%8M19i?KLKt-XvwY*{DI8lCT?=8JJ+m$h6>t9{6-vir+F8Wqbw-us1ZLWKmU_8)f&=7QIt)>yh +6>0ll>wCE*3S|E)SqEFvX))umkVLDB~0JREG`?^nKRKBY_-ad24b(TScvx&Y;@G4O0uf6^15S=_Ry7x +WUrSZI(N1*&WD@Bz=l5TB(Ce(YF+EiVfvx-)Kib(m?KIOsD7PK0R*eh*YfnHyBDV6c&?<>+7rQ$@#li +H=O1fUS26*(iZ12k&mR5;sBomL{)A?pvG=RG^6MgQjCKT`! +S0z({@DMC^tE`Z`?pr1I@qlc2Q_($lrbr2oiMZk{|vYH>^ntJiSY4ZGQyCsFpB@7Yq`Vnb!2>iO1z)3 +N{=rQLv>{%q;C;(C#$ML{;uIPS#h_Sk6q1#s3b_sQODFo+kvLAU2YH?L62ZL4$FzYC548P1Vfn9R{O+ +|RjlYy#H#7Ci0;nTrjV!PrwZV}WTQ^o1+=LOY@=!eO91fWei5$v?&@3YWGSh|U2WG~`hS<>DMt)_icxjd%l~ebcc6nD(3gSz5LVri&JsAkfbu +V@(?SG?qygRg1I^sv{{7ip}C@fBXP9XG#C$QwphNY!PdX+fJ9S#bJr8gJ@Wv$atsShUn0mm06YdvVa|_!c7KH59y{%9Z0QF5-7>dT~%%Y;jJ;|(}yx!uxOL|*#tn^ +Li-F^zVp%amc4iUEP7an5Q2dh8M#}WuSC%!IQfpSDkO^pAu3W7)v~PuIBsIZeWUCki&uOaoG9QL;A0o +u#3&q2yF2I*rA}9+ihH$q{x7B^(qc!Y&{+FO6%QHeiY@lx;0`P8K(A)8IL{N(F%G3YMGyNd?oQ)`P## +8B40z1&%9f@D{L&jcMakObGMnpSJg)TUg2VD+*Z|Q0LSAv2l&Z#4aaW=-u?(5S{PgPPEWD;H_pqfeHR +$uhk)tRhw8RpAUUi`jBe#tzNo4VXsdrXa08QB#Pu^qq&orsWzKJy%puTetUfy-&=3~=^@^I31!xdR!- +5EdhQ(3g__k|_0b(W_U5~&h7ef6H4!eJYm>xZ|cNEeF?IhEQP7hA)7ij~S9debR!W;*o{oK79HM-^8B +fj)PBgoV3q=XZ`UHcGA$u>|Eo2b34g0SYD5qQ1{?%ks@tIZs({h(#%DRC;T$&M>T8lX*f2A}y5uF;x< +5Y%kk9_rRIC?a;B$@%#I#g7NcMWw3*Y$MJo5)VT0jv#2B=c{4Tg-snpVN+Z>6-h>L%b_1qljnosyN4C +_L7SEUDJDj0qW(vj=Te_}485QFK!*R9k$`&l7qES`wNmvGt^9BTFMGIbHS>1=ZCO*uEHRUia^ymEebg +ItxId}}OKqpq5#({ySQ;-s5yfQ14TnDZB_J==~8#TGw@UZk?RNgyx-^UQo +Y{E}Gp6@NJ-UH%M?0}Z9K@eKTGb+f*e>oFJri!a`;1WNhQ)KH;VA?OsYW+ef%lWBz-L6(UUGYlU06rG +d-Nf<3=10dJrPC>3({lAoZPY*D*Uth8Z)!D7Xk6W-!ccQOaBvOH^ciTH>v%pNdcQ(?@E +OId{~cvR*IIxS(bMqDHqmU7V5QI;A{Ypu1N&%%Xu8l<$r{Vgl3NZbQ1EKR78Y3=GR5?9e5ofdX+Ham$ +^uQQIzg~uOSm^L68Hs}s*F7eiC0&)|`q_hMV3}v%aUf +2_H{Xck@1s6MkGt?n9~3Jqb9xL@TWl}VhRdnd1e&67sZ(@V?g&O-lUci2+f-Z!W)CUT6so|Trw?Hmg5 +X)fp5v}Oy?=x^fuRV8R3t(%6_dEWQYS#1F2dM)qatwZDxq6$a>sRTD~8Con7813IYD^*pqYcwQru9vg +5SB?28T)PZbpZ)!E4y*8fV1RgH~Wej0NZo`TvlQ5|gl?n$7MQwYo-OqTbM2uS2^Mg^|j4GN-gtcR_=z +Bke)WdQSkHfSOlbOOP)(p-n7W!MQ(Or>()WCm`4j2t^g6kG<6dzoX-jyhx2|z~weko8C}6{O5T+79eB +ad}D6Wy5IKbh2Linc)!3CPK^qE-UbvvHJy(2;z*q(UGadFV$=ZlmX}Vo<7Sz2Z8WuWs2DdamC{vFov= +Wg5B6ftI>q8G->;cYy9fCyj9$c8V$Y>jcvz`(OV(E(kHeLbeMx@$kCT|Yq)u|5BtLXs_MMPRylL+om% +~ro<$3JLT>?6A4NKEIoZ@ksr;F-#6yh(zR7NLH#U1r=I#VKJU2A>LPP?TrR|9?s{^*f=-9e3Kqa1Pej +Y~R0TKRUPK1Hf$#J4s0FlnXAp8S{kTxq2b5&Eyy8PiIgAq)Z2SyTSyzlsQ)-@sd)=1u3)2W-T%@hozM +0a>PM=jNmLee2h#4B)_Y81D#P1C+=T50x*v_1KOQT02e-#P1I420NF4lok3K|CFFa)!eZs*XZIRFwX!@ +ohXN!GeM9cR@shfXK4+X4r&^TM*wa0RBsjwR|SQAA@G#}>(J6l&OC+VqNpa7!;6z +0@Pay1T#^Wbrcx%FcdE8Iu>X!h{z>@R~`6_0&EAwPASNca8<_^$KOk*c4xDqAofUAkfE&Z}$#`@7%XN +wP#Q_31?3+-cCBqt_tikvkmZ+oC#6DWUmznAPC>$P9#64e5(ny63XoLmL!$`)iw3cnb(9O}za@-TV^7 +FhXVN3ojq@XiBBxXaC3n(f{zQW^}@5{+V5TgzZLH-+L5g)zKc|oP9dAAU?xj_(u$gY2^6WaVKS8DH2v +c*SbI}$cuRLpTqW5t01^_;U2ZObxPwSh=0k8Xto2IYC1QvbZ#@GEXc;1T$EGGC`hmG-r3@*lDb_}=1k +X-SLv2d0fB*SgHh@@3Lg^lys-UexniqkGjMA?+YPuga-vV6n{!?MfkV8m5%ax=c-SdhVdM-id$wn=Q% +2gHA$K}+FT8J61q4hn5#J!)J(TDiiSG?2sSJ$%N^Yu?5>QzIeC#Ms)e3*9QsLR)SD+D&N1u*tm2dp~r +*}>ti}n!;bp8Ix75mThfewAl3#XOJUQEstJf#_kd=eQx5>WO|i8z-^D_wyIx>J1zlas5dwvnrjwI-Et +g{Ls~Wtnsb!~aR0F6G1|*&Xi1N*A3W>37_ub6}o~Nd1*H=aA2@-@O$on<@)iV}Y<@yzISlfi`QT^4DQ +YpI$yE5T_S;`pB5!lNUJVe!kF%T|Cb^!2VuD|4E#F5|OZ*P!Jyo{Y?mPKcue~#D6C3#*K85_P2ba-=9 +#T^5kliy%i{Fv9|yvR)6yUl_vj`DDK|+2UGugEw>d`h%}B(NEbgMgEI6__y$9sY+WPEA-Wcg#=Kl*b8 +j=Yo_6dsv@SLc|M`LFxdZEDQ01aN<{a@fI07aPJ6GJC>TZV!W}Q)1FA05*82V3(b~8PF|L8-6D!Ovco +)zn}8p+Cxl6t9+<#C{nqjiO6HuANt5$mu+xcU0jsu6uR(2Os!R_DpB_>xtJ2m0)deQx(h3icxZUc|7c +eP8L`o;uF3eOQmf^j$9LZWt?jx{9IFca{VJ1@1<7An5?hdMy`NI35-SJK=+*FM`mAS>FZjmhzZY9z9O +n*=agXn*Pjy==;taf4}rB#EyA@AAOT*kdlp#NMIhxzyx{Qvv|Qzlyrs4-b@WQ=_G^qsdxN5!viDdDwv +LP^3(38om)-Li9lV%ZH})+0GYEyCd~*S|G^GAIjl%f1EjG*8bVjgAXtv9-x4-r%Y3I +>W@dF8fC7j?g?rJP+e^#}^caObA2#_h_*9VBc~Kxb=|}|4tG4ubgrw3K(DW6oZZe=6L94z*R2QFmhI1v>q{c +TOS3U3dqRdm%TF(kKPR2b+V%v@yzpb^#zl3TD_Cybe@$T4(v3rB;*$+!&}{~^1a%5u6|O +{XSnXy=L4XTB(v2V@)tau)ZUQQQE+VI|SxL+WgXAw|Rty=}k$BF1KOKFBKdEb{Cz9~RAo1z=6gaw1=Y +Q#igjGNUqZfi@p=sDX{2fo@`rZ9r@gCed!H|2g7}9{A`O5G8esMM){1;G50|XQR000O8`*~JV000000 +ssI200000CjbBdaA|NaUv_0~WN&gWb#iQMX<{=kV{dMBa%o~OUtei%X>?y-E^v7R08mQ<1QY-O00;p4 +c~(;@gXtBu0RRBK0{{Rq0001RX>c!Jc4cm4Z*nhna%^mAVlyveZ*FvQX<{#5VQ_F|Zf9w3WnX1(c4=~ +NZZ2?n#gjp6+%OP@@BS5oF5SRlLoR_p4hwNY4&4N2+a5|WiZpAB${Hb!o$kM{WOf^88+xs89*@3xdT% +U*D0aPxFpwTCf)6wqjp-ewi@*dL85INf2pjLAcAaqu=q3}$4d}QmM1mA%@Dvy*7Db_P4<@$Kdz{->7u +N-(Cm@f(A;*|FEsw=F4{X@VOR0;N}K|KX6a(@=Cnr@>i1YqW*xCO?#VlHoEMPS2JK1{aiO+>!y8vyxV +=-G__d6@fsIpx@L;})o{NOw>Y6CpSQ6Ri=8>&rvD)Ae$Hv}>-Z=1QY-O00;p4c~(<6WeLe=3;+NcD*yl}0001RX>c!Jc4cm4Z*nhna%^mAVlyveZ*FvQX<{#7aByXAX +K8L_E^v9ZTI+M$xDo%(zXDYzW9dew^O)%ePjww%;^aJ+T-;chn@)Q}LnI{OOcFeTl&yB!zrDM75g;kW +Zd%PGrohEwAHRJ7&}1@+mRl}KA+k1Sq^iY^XG{`GDj{-G(2{OgO`0ujNGsvRdm%PJcu`g4vfS{Joyh3 ++%jXa8Sd(ta4XbxNW#muWrm5ul*;$&4Hj6iEQk;t7j8+v>^UgAn%Clsl0~;#HjNSec1BhB-N3y(YYk~nb(~41!6Hx*-T;*Mq!bNk9wFHZ6d>tVAjMkLWG~v9fB-p9m7Fo@#Ba7 +WV?@1G#m +O>f9EHMXs5ZR*d1(6j?`FgL=wH7%rL*2os%F?&DAZ)y+MSgp0bCrt9a+mCA&B0VmcHxPi_ZOGRmz&Gv +=F^*>E|)jSkIUuthpQjRIXP+SmYqb=>zG`vk-x&9LL0g5z(wBW?12O0=+P!zn;B{2Yf%=gY>3l4jwVoHB9)7iWZgDk(j>77m#(D9+lD3jdlZ +>*F6>h-HXDpI^YxzAC47~JV;r-Gl$o$JBvWN+wCH7Bi+b+9{-WpVfsgdzGi&O-M{`|^Mx-M5hHh>?c; +A-1U|d`9FTY-oma&Z2uu=|gE@i`LM#S1A29w(fD_YQ#WvWO60Oz{&Nl0X?-(W80GRH +Q^&5}URmqJqnlL4d13}x`-haA#kXzQ@Q#nPzAzOB(i4nIRaUZGkL-aOAqO*s~$a#$||FWy26)@9Z2{G +zGKJl#>AV-AWvBAZj2h82~vhfaVn2ecZ=uXD7`x&^UxVerzpY%86t1yO%FW! +8UZYZV~f|aM)rAC9)&2fJ!W +f?zPv8L%WWku*6|G*7_Yt76GMF_8`)T>a$?fD~0hSU@+_Y16#{td}CAwkMYA<&DM}2pfx?~Z@aclk;jvH!1qvs@2EV(g$ +X%!cvCR5@R|kai^qTj#b<0doY;pKOzICs;f#*ZK0!fHH93BJ`R?M&hov7Y01;Lj;XS;<)V3}a!+`q1( +-bOg((EgypFkBevW*V-&3}CvOg=uT7m6PSw$IDM&mL1`D-`TvH+}+y@(O(n%rrel7Lt;HVHGk($1P_j`N3tKiMMx~ +EMuL7eyCB6Zc7uOdkQc$521;TcrYKtwI{3xv|6zU#EN(v)-RFX43-rM7t#;a?@4LQ_%wNRwKmRo(qe^ +Yqz?2w9*+KzlNY*#cVm!{!9(~dwvkXLnohVy$K69H2gNv#8I~&d(EiVW2ML54pFs9>metBzTx`c6-u} +swwthj8f?D)G18`vJY`pmCNB^u=DLu{ecO&TFcPU{VuU`>K;@s!QZ2kJkq?%}7aeYUA^E6x2H1qEd?& +cL)K(lUSoS7BOu`Jz}US)t+SR|jW{;qYw4qQORPdd!$_#eIokamI21m@ror~ocopLkm{2Lo +1^YI+?H&+h`+&ATj#MMEyVLSe&3&-P1+pYUiJDOn9oy7mzh?!u +zKeQVKonFt$b3o8@TPO)Tq&>D;iI?|vhV$~IDP@gF0@6?>J34nY)zz|LIqXUBjQj{$7+OsW{XY*%agq +zYne7+3K%`jL(%zJ57X%P!gV&)Ko{=|Omfoq|wOh#Y?+5MSisEW7IyDiclj_Nlta5BGF@#Ya9?N^;g| +?Bfr*5H1SdiB*UJvQv2nmKJjn2t6kWUJt2SIm%}?4 +09cOfj!5CR$zFvo1CiO>MqY_*!Bkc4oz+)lsRKn0;p6l+fRdO!v%7&i8HopH`B>yBL{Bpo=bB2JthWc +^AkT7c<@Q%$7=xkA$vazX$$WLHJAuNm3gHu>rKF7f3sq_0pt?W5aN2qjfB)%=- +)X8kS?};fYxwL|6cG%uWv5voQg56djA5N5ScBcSP+ts&ccnd*Xl^519bHi6dHss>Q~q7;Mvtp+2?LlUbPPLE9lisKQ2($*>w_EFWL+Z^OlY +_0JG!Dc7uiq}-O=7re9AFU($hs)K9m$rEXnnR~<%8hqBA;045;x$(Tm)Bf@VjjsAu(bfQxoxWsFw{3a +HG6I`p8vC#qQ2{Jv$a|KuB$#;y^I}=$9F&~*+bKIK)?k=A<{{ky^ABzID>hW~Nv!IoaS{K3_W +)O)rlHn`ZSTmVkekJrbrN_HQrZkSYRiyRSDGHB9!$Ujz1`hc_Z%jn9X9iSqxk<#odH4?gOMlbuTu8t5 +tdHU_8=>`)^K;bk{mby9n^d@FrKU;&felVy?-%yqVhCt^Ck|nKHd=EZ%yoZ+T5-;8yuP#ia5dR0eelN +R)oNCFH?PY>c1Z*)FZbf_H$&*y@8-_bLtj_2BN`+8#MVTTt*1{3BJn%6Y1O@5k|;X-!kultlgy7s0PXCb3Tujs4E?>(kuNC1DV^q4^`$? +9oMoR`cM@kZd?HDRzZ?0|XQR000O8`*~JVxW_~OR0aS5x)A^XCjbBdaA|NaUv_0~WN&gW +b#iQMX<{=kV{dMBa%o~OZggyIaBpvHE^v9xS6y%0HWYpLueehYRPI#8NmpPnU<^U(CBf3PXk7Fm2?Sc +AEjE&QeY3m@)C-?ygWSTe$bxhO|Dj#?}1b*rG;WKQLNZP$$1t)%nK#hx>7WO^&? +Qh?qixzA(bG-WO5;8Md8KKEC5OA98#sq`Qc&A6B=$g-)1z7d458b!eJk_!c7EqR8ANA`O%Y36Gp3Ir+bzKn0T8gjF^rRoxAsF>L0LS=corpL{67`Bt=t +JTNrQ(hD_R*V-P@#d{bN#c95r81Q4TbT0)9O*koamJ9VCmc*BExu3>{0ZQnw@N9zYUnHCLy7vpr`^;PKpF-mSwP}AgDe+0nfT)1vJj!;W(V(az=@yK{tz@3a%+cuZn}LN`sXtCq6Fljk(sI0A^@{LHzmCC2&hEx<%MHBublL94G{9Q(NCL>>L@n&_wV0!q87GTU3ItF{U0{ +x!!$ve{ykkd#hJ9^|0Y0C#rW<)~%xw<*2zxw27I}d&0dJ!DvM>$I|IKlWnG9N7ybey$7@lTRs*oGs9& +;YID(rK{B{}R1$&W+m%q38B@M@d+P;ov~vb>OpuF(v+ZVf7h<~M4R&mu(;Ca8yP*ZLwLr?8&?smf>98 +`f;pqMXK2o8{w&a=^O;K{0l6z`3mNdq4YS;V73_+J7$>V#f9B+9gm98`Qv{ZlvqJTPOnXWs3VruI|z( +g+Xku(X1u!|~>`V%Dlynv(50&_G>=(^ha-IUS$S|J6xa2xC=vEgC+L_9_Lr#?o?|3S$EvRD*G^HPUVpm2 +4w~%LDPP}X(ccJkLAT#};ou7U#GZ{h<`;H5b_Pv5#s& +2U25F*2NLZ|V{L*%f8-Mx)X6pr{BC0Z&Eo{Bp&e^eTqtE*oUfiO2en&zSF=yU{VR+|tM$;{>ybv@bO8l1Da=CwQ$NnQG~K}QX5BO>`1&h`BKS4MCm6PD^m>o!;J7xGV?cDcD +UoQc)G$6xE0QU%vZOgczjaiKohwdBmeFEMM^USlZ^AWtAX#OEw*1{V>2=pu>;Sy!)0NR7sVS%DCzqGYtFtF+%7~slg~iz9a@%@$OV- +Kf)%o&jb#eM+)fz$W8g=0I_n>XhyLZ|H=*OkCh5WxPj{i;3+h2MAZ4sQ_%&`tS;ftx&V}zd;a6Frha@ +euJME+%VG*05(#PgcMCFob1Y>fnSs0GKTO!o}NQqsP6z3H>L?0qpiW$V~pw&l9X+I?(0={c;kdpPW05 +rAm%0ncPgU1WmdPw&FSMgRE3IMVgJ&lvOjr2EQII-d03gU8gGCyxsggS&~bGm9q+M&;s-JC!i}wWk&< +Q8|{#ClxA^`WK#g3-!y+!x)8aUvGPBsq?h^KFV45v1hW@dG76U^`jptBlaB53|EGuE=7ZuiJ-fGFuJl ++ZvFvKO9KQH000080Q-4XQ((E8UV#(<00cq+04M+e0B~t=FJE?LZe(wAFLiQkY-wUMFJo_RbaH88FK~ +HpaAj_Db8IefdF4C(bKAJFzw58SDDNgzPG;=ndUH>$I`uhnqiJIMS$HFS+g +$)8NKvwL@BQ#T+}?yF7K{DH?gHxf`@Oq&Gq#P3HJe>cgOj|>GN}r-l#1Q#inUDHE1zA;B#~QItVJ$Zo +aTip!y=Yx&f+E8$&zhlnMA!Lz89>J>_Mn_xnqbq6sm}qamWh+z^Q}tN)}>>C|M+yyi5v~#0$k$41kgB +y+~#80v=opEL@B5K2BG^r$tjCB3urDcofA*5Kn*mBBs;9N*|D`yILu%oD>Js{4=55P5?;g)0sxj`TT4iZzn3sG0&)Hf8VPx7g@!WSXz?_q8_Lawr +zle2hnGm4ED{;sk49|4^L4Ms;P2mnN3xR>kXD>kIBU*bc8NLACzt_P$3mSq}_=Km^H +0tWZm4`o`Yc;Q#L{W$#vWD&$^Ap-+7*BU|Vu_lb9_Z9*iMUXWv#0ul!KSp>L@B9i3NoJOz1|fBoS +m^LwAB#^XH;>AD^m=RY6Du`=?F9gnMEuv!0y0WY%GJo*4wT{N``1HmT6h%j4M$)I@s~KwjmTIiq61+t +AO*YxsDZ?1kHgvusn{yRhCQOlF21_QO*|$PK7A(65?MEtUXgA&rwlM_+wrUPB*`}oxY!dstfR^c`)!v +O+lW1k*G!ra-epg~p(p9061^lZ?!%5mt`-E#vM7}Z0&9_ck;| +kkM4;b$J@efJWgq_Q?Zr(y`OEK4|9yYdU-Mr#yzmzwD~y!BwQDoWd`Dw5BZ2w!bX-0zZ4m|+bztiCD! +v{&{Oqo;k`oX#7VEUtR2haFLnsQe6&$ +Jc5{1ucYSgFE`UfBT)dl3uI_rhAb>~*UNvT)`W^APKV*IJrBJYy28g%%{<+tChM^Q9;g;`m%CmC6_x5 +}i;MXy`Q>8$d_dL@wGBYt5yRoSgZvPnss|83Y;|k(eA=C-vYOquKy})`I1h<^>%Q5>037vRz`5C!>kN +-WqdL6u<+`YYiGo%?E%s)B@-PN7;nJeUijt7aqi*Zl!)NEXCF1)v0BkoApQ? +FryhgCv^r8HCd2!{RwcktY7^C`|_D>!>o5+H^H>Jx~S_-S%Gz5JO5hE3S(o4e`t)%m+l_?yY(wgrDX`Hv6N+sT`Q@C5#C*XZT>^j$E$1S$w +HKzwMS6+gh5VY1>3(uTtG9)|3GK=t1JkUiiAaZnmQq^q0U8w}9RtwU3)B~whnAcqi84E=?YSBm02fCx +U`PVXkckMFK8{xX~XZ2~KwegFE0?|MC{;#Gj29n?{T9NoM+0D$KLvQLOi76!@k>(8J?2&yn>LaV#95v16tJ +>ngLXAos=8WeUecbsWAH$DR!y6x>B?^W0YCCy9U +}ow<0hgva6$>L0-96P~-ZlG~ikos4LXtsJOrc2p3hvZ$f$>aev7NRJ}ywt)RZq-eA|#^W>pZ2o(i%O7 +~0aNOhpN+uE1ur@*;NqBu>^UW%~sWQ-98wL;wj!pYRJp|hWdECYC$3V`Ty3gy@ECO|x6Rhx;O` +e)zKmdFu9<{R_}ASCMId?zC0}TLFryVPF*GYuR78Mvy5GO(auXHa1BE}X*u*^P*1dc_uy3c19(rikCwuRn6nRemnT0k4;j~D*Wohl2-3SKMDs+_Z7Y*M$T%{)5ZE8Y`HkPnlu{_&~ozwjZ9lzq +Sdxd~|E4$|g>BY{g|uIA~vgMC>1BlV5xpHGQMEifB>?gTd$p`nb(ygtvvIEI4dTjoeotGCxN`!JB{O% +OmRmGGx;uFhKxQ3nxqAxvO@BT=_GHmIgI58vaqjIBmW50ordy7P|sm|j}>Hc2UU1b);@7 +)k9Ju*E{-`(fRolsHTPG~eaE31X1(EhRRdyw^i^>L|%kjIVv!>zBpyQ>wkt@t6v;9-s~SgzwayjKC;xIil>y1||q&InCd>pF?S#_^_vhlMBrA3ML +9=49pAVy?7eE8mI<*h66-auN0&dC`JnRzdqMSleocOtYT!OnWf=zYyUX0xNaT_2EIL^yvvwH)N19*!V +_gYCKdjCjmLglz@zrLoQKuY|Jr5E$0>HgDBukGv4Cc;l%BZdaZ`*(BYHviYi}%-D-;zfasTy1d%Rg=U +1#s2Yq&)-#3FNz$TJThamKMaq&Di$d)`u{Xk?(0YYXdma1<**gq}N#RgGTC$Ij2Y?SgMzdKVH_|yb*4 +@U^P%5tw{aVbkYIIE?9CBaU?s;aey)=5wZVv`j+NGtNfZ#(Cw&+bBX-bG8kDfQu!sMa1<0A0=DVRO0z +@@J6>#S`T3ZkGuc4ejU@=k(VBW-SdnJ-1s6c@GsZOB6tTsQCAi(mp(Su?}dg2UVVz8{wc!C0T_|$iVz +f5?qTWkt=`8RSGI^C89MYm_T79ETNuM!Xd>ya5UQ@RAMO}5w~(u+f<;fajCO*ZL>!*NaqN#g^ugPCwF +~QPLkzgF`(P-NcuNW5H+SdDj9Ux$i9b}u`1KV(?O0q)|YszaSL8gwQ@_N#CS3N66am +I`tyMdyP$M54B#0NWY8e+C?Qj8p_&r2b2#Y)9%JdluaB@lKpL+Ps62i6Q>PNJd!5(=jF>{tmf) +3pU#4!#K$(~dGT;-!Zpsn7`7&bFp-=#sB^W{w!4B!^7C3wYkH8nD?E))Z+BKo@;A+8FT5h3C5?BC6AO +vQ+Y}ZkK1dwmVMS!Qg$#RJGm!WBBPRxdMP>$jW6kn}G6bQM@$Jpg_k`1~vQ%}ZCuXsO!d2fPR8tPACcy{V>S&~R**O)!UtmkFSuHPy}fvGzr`nqz`Z&Qb`g%+Y3kl +5WNkF^ry+2VD|RI-J9!=SN|O>9V7oE>> +sy+N8Q9@bf(_*mP72oXsQ6#bKGUv@Eu^z9NK$>E^Uy2Ekys0?&0tVFI6agi3!Id>|pc +z#Kqynct5c8U|o>!W-PuEltX89-sL&KwcdA+yz7;prVfX}jqYTS8wk_(t{FH_WZ|_n5Ki6!=-wSLs;f +>mAk=Ov_<4#{U&wd-{LPXP?Z_{~M1zV2%Hy+_rMayq1;rNb`0)pKxYbcqc2vwp{>aWSj(eBh(MC|Y~R!ddoXzGG)_zL82OKct9q%fpyB8ms<$ +NR)<+==o&&9L9UguK4 +X{DzrLTKZQ+rzdwWaR8-aP%C4`Syi0WcKZYA)pNme1Xra)(`Ps^D9z|NlF53RDGy4TP!h;E;;>9Y%ZD +8d|a#3Q@@!34jO2DlBjJF!(@EO8O1TZlTjQ70cayuHZzjR{>X1U{719hW!m!n5%WB+kH005DK;7UdcJQ@1OUbx_!n1$A^xu +u$9YoF%u&ZN0?|@W`)92g)8{@`PqtN{WFetaw|CU^3hrK@tNj+nE+hH2VI;a^@EcvGQ6~NtQ^osy&JE +c|@99=#TV%$tH&8=kCvBO>zl!n6*;7Q&lDb1i7t)~)F1n)ugcFxfxd2?<=N)%lTD`J8DyzMcv>cm~lJgEQfysfwq0Vt>tmow7oxB@cz|neW{`n9plEs +}%?zb#s#he-`E5=zYB9WF4TbS^FJNe)jHh+QH8)YY2-kt=pVds12Nh)--9hs=dAu{W_@bI5*lyf6|9m +#jfJapgHFKb}56xyiqnNR41Y#qpszi;ny_RM?(!kAW{qEX&i?L*B3Yg^os+;AG|60sa}sdtPZAuIU@L +z^Rdlod*wsiT7ERVckmMGCz}3w$Sfsjl<1z#ggr37Dzs3LwygK`)?B%BMhj~gXKOG~+f3DO&F~xN^mC +##6rLF$;w^n2jg*?wt(?#RVMkRzRhJCh!|#1^HFSXIdv+m**hKQkazaO)j=6;#!_yes@A!g@Rxg-y(o +2&mJ;iO@x0v82`00m(ED$PO@E9r@ADf4RsP>Y+T0Gs%Ytk&o&FqfoqITy&x}LIx`SFXVaUE|)d`*2?r +gWK-j;*0mE$|QuvRd~jsjF}$A`vJE*E~+G`r(6?#J$)#mVm$K*-90))n79WX^NZBX{@ySdKPIz)fVGn +p_&}j@fkZuJB>*>JKP5UD*WT>@u0ahIY9@aDIlMPm+;LZ;_O8*s_=Aq9kOrkNPy%t-$sOZr?3`5BV_O +-ORFR>Z|#Y0?5Mus;apCajdJ`2oR)!?=@T#fHEa#~xgExvEY@r1UcF>ZA0`{-z`|=VT<5+x>b&V69^& +sFbs16*MKY+`Gy$Z!CJm;v%RzAHtZ8ozyC-Ywq*3?sOWKhKn6%rggrLv3nl+DOYps>`;`CFJ!~;}QJ= +XZLXPM2My*c}EbWF8o3y?j~i4$}|(Zb-Mw^NKlU}tR=f?w5ULTs+8A1{-SG%gMIhnkmYdZfXx?<4iW2 +Jm9Up*AJ4^2E;4<1M9Tv|e!h6_b%q$2kE0Er7%Oy=u34{0yS54A}fqpqcV$2z}dHC>5kq{~G}ZYkL}Q|${u5A30|XQR000O8`*~JV!0)=_!6g6yk%j;OE&u=kaA|NaUv_0~WN&gWb#iQMX<{= +kV{dMBa%o~Ob7f<7a%FUKVQzD9Z*p`laCzl@`*Y(q(%|pq}l>Er<)$N@tm9a^n(P%XKg>JCh?RKUzEHgRFf@G6sg~-bd{ku#vQD +$)*%}>Qc6o|0cZDj6sIbFqno0@|&Qlc0zmq?lbzMeqKlj|>XHQ_N);U?1o!Zgv1C5jR12AKb~#I9bTA*m0dc +M9Cc@0Ik!t1n7X;!-@CqIL(e%(cMaB0#JI8SszAO5U_<@24!4`$wnsA=~bs#1wf5ew8;ryg*re_(n5s +6hUN&EFH#&!!AIobX%g?mHrOEsnatDpK>|3Q6g;{^S}`~#3`{hL3z;c0LWi=5U}De~G23J*jJ4LN21T +c8!2ppS^)lv2GFYfDl3wt_37E1;Jm^>fS(kZ1v&!WEDx*v~ixCvB^N#Mhi8h)BK^&)Bx!_5<9fbs%L4 +Uo|lrjIR^?BV!MjMRc8aM2EPM&fcTj#5PNDLrb&@SbKs#x8B0&RFA;58hkS(_199wQ&qUHhI(jgP ++zQhp)NXWyc+QntGl`>jt9*nM7jpVpBJ6))zSp3v=eJLOc>Bf0rS +QTAZDAIs$&wJ6Jr=2P!Sn%u`#_Q-gXr@lT=oM+Cqi_9KGiJo9)cABdUy3S{r7)A<-|HapxDK#V^q9th +I~tz01HL0$yeBFce)um^KoY}iRiLTa>3OPYoFg6sM|O%|^~dgNiY+W@^`j4a4@o){!TCLn%*fnfK}iO +iZKSJ9dleI5t@panq;0PQGNyx@t;G~-R4$skXYzFz+Yt#lbLkVSz!d9;8v&^#Na5A@eO1(`74X%PooB +#uIvz~bNvzzdD<>l_xr^9bLzB`8heP7R7{D_SG*X6mroQ%S@773RgjP2kZf82gy!sfX+zfc@abjQY0W)A>hEYCyB5uwn4^I2=Y7)qX1x +nhzrX#Y_5Q|tAs<0xPC1+Ww{b6McFz=yOVj2g`8PbrFhATB_OU=E7sG?q%hrbsKmLy?Te-mcO$sV +jt3%?e1iEVBfLX7*U5KtdXs_MZ~p%M=AAP7|1E5#j7|#Q`YLf;n&$&5L;fLE>Zf+-k8()krM0YTSzq@_$Wjy;h`8*TQ +;&yO7`&mpb#o+p9@zePFqAy1O}OuL%kk_QVP8&e#X#H)ZfE1+=c~c3xcPj0GntM6jSB#MJ-)uYg^@;|M%O +bBMuul%^f&lJOg|2;u5dVlH~0)QxkX&XaB}nW?fApTnfN%lx){O3_ane?@cwGV!@&fHSA+4VzPK2C8h +jX0uL(fnd16z>RDAh3!pAu70R9`!#*=HD(r|J;yM;gdFyq@<)&0wOI_itT?RW|(^E7WKFbt9ydQAur^ +t~Q2BqYDRO3(!V{yZJoI9-eeR{(R00L%_vrwhj3G6O#L{bh-^l=heC|3HR@2z+`yQ*C`$xy>We=DF@VOfz|jx+!1*MmASe?CRf!u*Zsh;6MuaF<2 +?FhS#GN^Fh+etnic62YRL%v%Nnrqj=#LaqgGNeUfeyKMec;OshgQ2(eR;Wx>wJ0sRe_i0Tax5f(FCqB +KnIxRH7nr@_Jx;|Rn#LjXMyCF*4%5iwA%{=M9(7og3HYiP+N^m;{b}C3(t3(MY +KxTQVMl%q<)#p0dNabQJ_7ZWv8q9cb8(#}vL4I>mLuao_vY{m0?s{jPOy*0LBH|!i%!P}O2)wd=i--c +iwOe)uM2#i1@N3`tDpbc>AVut>oJI0u +JL0#&jsLu&DvtKGXTJAWq4d*Ys; +bl13E%88X9G35Q1U_l}dIK@FAF$uj3eiEm9D(;FkeE$I-on-)pl;JAnDRyt|8~i;9B)0s~t)EYOTqmI +DzWku>L9xwKIr#i+4k>mOG_i~-VJDRb~sU%{_mDkEK>-32x@8J2A8klaC!5`jhuZo!;K0c(4aCa(+B= +MfDGu#m|4pSG~cLAxp>HO+H&``C^|`jXLpmqJT0qgnrh%14yo=LE=BXpd-q{XfCjVNv9n7oNINnr$c(CR%W+- +_`OImu1dFU-cN%R{WsETK(LCX0)7*HMri(KXEpb6sLA{JF_2K<%Fj6z{Dx#46KOi`uzD)ocdC)RL2@@ +b?w6Tl!xYzN+ipzY^Gdb)+rEqbUVhyKS7PI{AhUbafJV +$4t%tv{K07Izx(cc|HJT;57r?}y#Ji8C+~jHT>;ABuD358^Y*198pwh*4gbA+>)%YSem*&U``z{&i9`+TRr0N{qQBLYIJ=zH>iHk#n$NhOfGur9QSp6Cht9Ue)~E;i(?)i>?JdM;k;fltEaR6)4BZx`| +1UIs+u6Q{NWjGpNae9WPia*J(nT&uPRyj?}J=f6IvlrpjDocCa%0lP^J&>PEiMgF`1ygCJQbQXo93m) +Tekfz#%n(XAh`JtK))8fCVmL1`ZDzjxxp|*B0aKD*hc5Iz;MKu+Wz9-eE{sAJ?GL)u$^bZ@nMB>G)tA +7ipNrKDagOC;{i^E2zl-O~fEYZaTteqGuE69vyrT=t1pN8m@F?|MKst!-abU$mhv;r@rvye;CdPu_X!!YdG`k&KPj4_NtHL%mi2d!DrfuONm +#Ci;@NL!xWl_Y>cj9bWCgIs{Ez9!TW3+6G937(M;r2D18X>E_6g|+gm1dU#=(ML0mm4y5ee|Y%?cw(f +pF3Lg#UdyIe_k$^cz#cRfQNcltb97vm6@{)t_x|!%W8)lpKwrZI@5>RGA~#M<0u4dj&UAT^-={q=wz7 +VXx6AI#O14as1douaB8)S8_nE^gm)(kn*c{uXN-;5{b3$BP7NP_7-2_X$Sebv7$=l>5LfNzK`v`#Z0M +c}*L7;ZL?URw3jjS@mgASVzt&xfXe}{5(0~ooRPTEA1SueH(vC+(-bl*?p}aLfn{*}Gt}qI0H2<-IvE +4z@RO6_KiHB+W(Vt<&W*^lLqg=$~+aLnTkY>cjJ%glu4d|#H2u&}D@`|O106jWq@kWCWgYh+}8-zhom +hMrf0Vb1cb;5hzT%Tiu8jYU3qfis6WSbv6yF>g@2K%4T$RbapGW_Y +fQ3OeFO%T|3Cf<{_BBc^6sQ*bn{xwZ+fq|tvTAW~Woxhp)^7h!8^&oa7au@r$YmL~LYTu4_cibHaY@h +Qgd+?nJ80@XB0WBivt9!3{9eVIiJ#FI;irE%7bb5tC)U25iM95wYc=M11s#tvZ%5P74EK`z@@9N9YA5 +NVwlI0CEzbsz+iN7k{4*=oC4E)9FWKY&w&2_Q^NCIA#-#vn67(Ou(=(em6GxLh`8ukt +7-#1`lsq|TD7NWZff|WgUi2IW78P_T9xhgR{DpjVro5jw4h~a_Mz6bc9W(E(?9AcXN9SJm<5XmE-|QW +N;cBRlzenEe!V7I$K4|92}pqOaT +f-$u>Z+yQ74^8hstZLI(I6q}U~a4+Qs86D3Xx0o@3u6PcRK>Eof#FP6tdXRMdOvl_H-o%ID>jjG@I@? +sKxH4&IxRCN7f&%ktit1=T5a{=FYO~4;1|XQPiO1z@xlS>w6%($-RwYt+o>#8mfAe7BiJxV#>QmR(Ic +HI%89aUu?>e@_tk++MQh+EJ7Py5rmw-agZhh2o^!=XhU$7DPx7%Z!DU1VlC28UFU^h70$ZnZ9e(RCq84S%V>=0Bx>?nZc2^!eV1mU`l`Y5zPVPU()Q{+{q%3NsmQ~qB0s~N%Ly; +Pw{vorpwhI?1#&veUma7^7EzAc)D9a3RTTq6DPBL0a1DG07CHHVTNh|}Ev#;?%G?XQYWeu5TIKL<-P(;Wvq4@rc&n_rz +t-8EnlaZw0vjT$Ii6IE4+bwAH3-pQc)g`*TkB*|p@8t@u)Ja}Ib99&s9`q~xl{qiA{FC5O(>97L2@fu +#CU0D3t{^@^=B0!6NrlaIg7u7<>Ex^7N(g>Hrs%tfE7}yP4ylMmW5;)u?)hZUIOCC02dKY12HWIla02 +4PVffa$PGBTSMQH87R+EWR5ds*y3CFEq2L|vwbFObHn;bm{JM#wFhb~@xD`@7-^_d4MUpfN?RVJ +9h7w-&cR87N+WYSk`117raNd*mc#vEqnP~IQY#DEtWWF#DHgT$WPUVFe;=O#g%Cw*IxRYW8z_iU4z4f +v|7A@gD5_?)|xA7cNh1nZ$BlcFk&Qr$p9@2cuDuH3;@(Mylwua+<5M^m?N2O!vz*+lweBgVyITKg)3N6^fgNTmSL-2^>1$ +Sc8?J_ayTf6H%WCEm@5OK`uhnyHMqLDt~+Q=rI2o?t#WUxPHpym^{8rv$>J0MY0Dw+)hO@x-S;g4PT| +HPK}~dPczbK^rLbhNvbt^kQr4P6&bwt=Ox+~dzNd+;j +1kgHI%XXz`I**K?NAGK~b%<9#M{N(LuD>A +qPFsXwXE&#rv9PZc+A85h|?Hi2Y|>jHd%$S|U^LeJbh|YHCyk3Mm)!zW6(iod>%!0G-C3%c@N5Rz9uu +U>SneM1;)~bNq4BAY?d0Y;TEOJ}0WWKrZ@E?*;4{O0&lSwr38hm|rO)43^+NqPIPZi`>wK1pwHhnrSm +=;A~!gL(}PZI +N^unrn|Cc*Nx71->Q#O?56%{E|2p{UwlDZ^4mCPb^AEL+r1V({sujD5N(P%M +U&xAqnUPA;gOHkVWZnV4dFm?Eh81y%qa(fBtx%@dm4*$aE82J!A1sC7{tyWb6j%f22-*+n}7xD9)U_` +ELo8hGK6iwaS^I)z}hAB70Zn!I#l7A7v<A4+IR!G^IK^+h+EcPZMqZ0LCYS!qzy@NM=bAVHmpLMZqh)@wA8|)(FW8=vthmIbDl`wV6!LA>GupeN#dOz7?ZGGGNhxR +TQ()WnZc5|&f(rJBPH1?nlu(%jrZJjZ?$Q)jnHI*z1A)>UE`F*5D|M_?SpX5#dpK-=Da;REUI+@2I%r +ta4&1qjnskh7v9R^ufPpWg0-w)C_~(qty+LrPcg?*se9vL@U{8Sh-fw*-pgIvGk*iiwpnFCZj5Mqb}H +|3Pl!yPT&r?4mgIP8PDPel7-c2Muo5ixKo_;mYm>tcinG+?;!AY!=T)Se&nPlSmf1G@rE)ctOM)?>i0 +%xSM@7zpurhzZ#sJ-Go};jIH^2p=5`P@o%{jscVpWOfT&WKOZY7(XXlH0=gldsXW2$6E+Xp~4Zse8IF +&Zx7G+MO2ofZIbjXS@^(BJ3Ijwg5&axj$8ekjv-(<}6gXNMP<;vdxwG1Zc!>rJUbnswDJ@PXxbV(l=8 +XzXZtgjdnfJoti{RJ?oh=JZ4yQ{C#aDuxJRoZPNiNs6pwz$2HBPTQgcm<6v9QCYAU)i2?%7?EE_R3AZ +?m*imY8k|5zTU*(sEw9v6&tV1}r~_N{-O0EA@$C<%-+%ibwi!s-1*!u~z|Hn(3c?C_PyP0dI5{wY3-A +~2^{es=JC8C~UHj~q6b$Hj3^HC;@rXbPSWyXBe5LBPd1GQcFikB3+Y!nQtwdKl)v4T(C|6Axqph^}6@ESASVJi%}w;-NWqkz#t_HNa>lDcTfmV2g1-=b^2=pKE-e+gqqOo{kCIa?Xk}@ +9Akr0NVgKK}P#e7b?L7bs4Qo4iAHtq~B2=DQ%g1k20zb=>3g*e2QF#H8k>bxb~^z1z+9qYGwcIU7`|S +V3+79nR(F{ojXQFEk*h44t*6fMBWT?U{D<6;es?MZ9mZLD*{AkLK+&MP0~q<0ZzMJIx=bae*s1F&#)K +C*)1KyR2gy$y86jf&LuldQKC=ha=9l8M=4aM>$}%b+_zLyNw*eFC?NFME^JZCX7~3J4BP{km +r3<=fI)a<=n`ux+buQpvC#ZBp3B>3!#Kb-dnk%ZlT0>_2ngbA8Jm>Kd4s=B{DV9w6Xe)l|D>Jy(*pqW +#=;VeO2|+Y-FtF`Q%R7S+;<{m07tFcELbp{FEZ25|1Mrket_C!@3C3SE_> +ZxHgngH3`j@jB#INqUP-eD;JVUN#K=2cSaE|K33io18nz~ +sN)@wAm^qxk#D&f#lUo=R2{S824w4P0?(ZD?g&tknWnBjtcILfgV-2)(7=>e +bNXnLcdSDi<((w3z#Rm@C%mr`PjVL!-)uO2mVU~x^d|UbCiS0G_7-zjMPw*XI>$JcNrO=0ll~+lb&cO +zm_G$s>Qc%%27TJQ^;86x^wUrjO^{ynGb#Zf)IAAs)_rYO1ybQws>^{CHDM_X!kKKRdbToit ++tH(NOeBhDEe^oFV$}~j5`~~9t*~A^rJEl9+iqc>VE$x^$KNoKc-k%;GhO2Okb#3o*|btYdlF18A8aO +Z>z+il!JDO^Adjk!u3l1z05qrLruK63~x5$QkpIIc|Nmp#zHI46loE}epO>tF$Z~7#>*e;Wps_wq)so +^6-d7rJdv@0*B9BaEe@DL5*vr;n?z*ipyt8l4M*YR(B^UV9;`2VPcK14?riwz-CDgf5;3`CTX +oIDX>vJkBu{Ou&>~4h;ElIIpu$EJ=j5Z%Rf`&qETb(bRwKhHRC`(efc@sLTWR=DXo#(F-&iLM6ojhW| +5~4LH>=oW&%7dsw`VUsjYEbZJLipBK{Ozro(*kU;G=ZIh+^*jaulro=0k932IG16%UZ-^6V5%&#?QEp +kRY#kUW4>r}sVUQqwqVgwkQel-iO9DWBGbXO6{I91b1gZ#8{pBcSYx70Na3NcXEq8!O(AC%bl+)i5`; +CrD#f#0Ap8vzyI5@rfL$Ihsx++6(7SV{##PR(jFkI=8(kla;DVVzV^QJq#nD>8 +Ji8L)OVims_!d9go)VRXXJRdklDgS8SNcjimA&O-;^hatr)GLA=pNpo{bkeyl^R%}{%~ky$`TonSkZY +n5MVH!!W)c$(hs5u$u}|S+a8>v&vSs3uM}o?6P2P$eO%Jvww$ +_uUFzmo0sZbmlr*$&-^*cyu-V_uVDj3cXyF&@x)ol*mTm=t!~(9tb{F4huBOf8nsNKhSfHc0iJ&a6t! +SRUeis*E6i_6s=J?ghSkJcf(oF9=xv(b|3y@B{^T!DpEFAS$7ie5hfer1=ez5zz;7s1^^rQvRXFiZ-Du&n@OamHuFzFCw03_7#k!FE^w_xNgfy{PfclSjY2QlYJZDbH +@5E~Gx!ljp}LPa%P`NCp~hK>Hk1Ip>V*PKRds*e6{Mp?luVy884A)WJEYbG`|(yBz*`bHByk+-eb3Zd +P||y|=Uuq1Ruc;4eEG(5Rxh0;6jhNbE%FA`vjU0AZ=VEBNZ<W|x~yExh}QEk7JV=RI-m|^-R4hEp_$#5yDKET&!pADYIDl3UV5uuiW{?Z2Q-~!As +EF@9=#BaaVcai?~n|ATlEh$_DLXcWrl0!FgR3f0k=|)<3#r##C80OWqUDT_e{pvtVxwyaOiVl@J)qX{ +XQ%H39mW_iA?q#FY$bE0*s<$__vjZ(}>8}`t033F8=yWB+`zjmqa20A#MV6Lx{Lbkp$0LD=WUCR=l1aJ77z$meP +<^;?dZj1f#@6^-y6ivdSW2nB$EiX~B)FIQ7#>E&Z!hg?A!e(Bbsv);w=0QBg6@&Jszl=t(KyUzi3zn7 +>Mxhw%mr!knO>LA8%q3ywU47jst+jPcO%_2;94{pM@CIHU^(TZzS(zF31-)DbUX8JNB{lv_;z$r+doR +kQQ=+H?0RxNQllBb-PyY1HfQX}QQWpTa%E;V@gh9b-O+j+%!XDsZYWqjR*1In{WMkIeZ|B4_CV@ZMtI +GZow%}9K{vDw%vc@yC#$`&a{hR>3>5eFjjvnP*Co-Pl<28&kJFITLJUZJS*Ak1a*WDEOgM*2A%OkbzPW_`MJ1{ymSn +LfV)X^LejTXmly1yN;?fzHcly6RKgRc1EsQ*&)_$5QsQ5#6kXCGrgsT{8|vCJ*K!?&Go}n-k6JW2*Z_ +EH1p{@7ndNL~i{-ZS%wA)}1SMKC-$+-zZ!(F4w8x=$le7ZEK7NYiOd$MRjKifsZWa*>_ip3Xbc~i0J4^pW-6!W +jS3pe}`DE1&L<*PJ_Fva~MLF_E%(lIq2lwH+F`gb45hcZ}=sTzItFu;Rl8JOsBUwBHs~9{%UIfS}!EJ +nJV>qZym6e0;KzQ3Z-0}J0J$3g03-ka0B~t=FJE?LZe(wA +FLiQkY-wUMFJo_RbaH88FLQ5WYjZAed94|1Z`(%lJAcK3K~Tw%=(gt+2O=t3HU?m|baRJ!vtt7bHT +jF2yC_n>%)hj<%1snlwKzuss32)yZ#hRCQK;l|$*&euRYLF3oqZluw2>M8(D8vbkZW%c6I0)9AEpBhg +pyvdMZobmeUGezxGK!+x+hq$l2{!_JW;CtgC={@lZ?{uu&kl2Vg-Frkb7(%+I|+5kj~E5$F;;OYPomD +GjuO>cRFepTC}Jhb6UPB#WGRf08d7mYTW63lC0HX{*J$a`KS;=~Xmj9-ObOSu_OEN{Il90!E +^RQ3S5E9%yY*G}@oYH4`P6uq7Fdm53H9b8mwQct##hiyQ-CE%OY6=Kv+0jS?^b(V57GBdH@E6-G9|Ah +JGcz5nL={z_ZM1Cw18I^VZvAhK=R!70c1-rqgjC@}NL+u&BI@|0tMv~JU+K2u#C&d(i_@8jo=%|Lg`#X2&RWZzJhND@j&lzI71$1o) +3I|x*L)?KrmD$Dfz-XIuwhaJ(&LNC$Nz0n +hzxNsE%!__593Y8qsqBf&V(A-6os7zjGVV_#&M8RScGg(2J@6jVgf$87o`-rjEm?(~-CbF1(j+*KUJq +$x~2c;^B&Tyrw#-onnWFnPOE-syZOQ8>E?4dA$YN$|ssGkImk=1w5 +-Cv5&_EudAl&L@?XW30l^;Pgs)M{S3zldUxdTHf&Y=8sb94QoU0vz#ZMQH+tb{10k*{%QM1U59*$A?5 +R!pteioJzXhwtecMa28aOMXWQ*iaz)|29hw3R8Fyq30Y(#cK(4%qC8QEN0IF?y(Jfi)A1Pg0#S+X!1) +Z+oG@k(%{kQq~9M|RbU!kE6m*5D$KLKE;{yGviqF7>}8Td)Kbzf8SL?_=Vh*vWFev0uh<2z?z3fW=M5k!+TbVHVWJfUKL{MoMNd!xL>a-TxNvkcRSjC)7hVg45Op~4SHYXUo%piU>tS#O@Y59L$$* +E{NMWV(mULP$DwrI>&)sduL8CsTT~$s?)|#$geKvzL0@V~UPCSFo9g6eGAyu*IQXBm6K&fXp*Z!0hW% +HH%HMJ%mmB^VqIJPE&BZ4{*0-bw&caJC9#yrJTm4ohdwfS5(lCl7!!ZPA8%)&e)ZlX~`7XK0S;WoY_p3B~mp+JqSGc;0`VV#Uq7Hectq-MnFgf=V +a<<$`lr0YF*Eh%Q0noKEtK%nRcyvzJQC}^JrJQXE`=rA>kp#$L+xX(VK;@IfjL9&SAFL#He?O@@q#tL +eyz7KTpKJBHoD5TsrX13kCH{*wegtk6-S>Lmos^WDEzD6dCGk50Hacf4o9}TNzK08gPs;^Bgu?PuP2) +`THw{bPVmRsR}(|=>z=>4utz0vdeeny?td_E^!bvK~0SyQnB6pWhY2fo%Q*~%#d=rNFZv1j@3+lyr7; +Rq4_;QLy7cKQP&8A$wXq$O&XhvC0``Ei}0kPF@x>Srr$FcOy=GT$sK{0vg>!I#b}hEIYo~$E}vOB7!~ +ozZ%qdz#+}>%z$P53c>NxC+}JP1OBTCZd{I!RIbb>_yq%!DeLU&mgwmt0D~Fv27T#dkF~<8CS3@a +f|lr`4Fta2V}kNV+!FwY_LTYk(uYwg}^}Uki|V0XXE)?viab?Avi=aMG)b^R4ES9 +X%s=&J~G~ATyxB{{T=+0|XQR000O8`*~JV000000ssI200000H~;_uaA|NaUv_0~WN&gWb#iQMX<{=k +V{dMBa%o~OUvp(+b#i5Na$##jSF +_n{EO&N5_G}Y5ltcjyh!wth@L$Nt+IBa@BriJ#ee1}zc7$!o7Jh^_a|2>Rw*@~!(+vZ%_1V5*P%HB3( +l_0}V}95r%N-?;%yh_(`jpt5uIIC7dqYVGeGYs1=+I~CkimQmouw24N=(3}K|tNmHXY}U<7zQxg+v|v +YyjZf2SE0G8isG=(Pse{;)VH7^+BJYRbOQS*HkH)+=-+ +tVMq-C|qX|I3r5&pT%lqCOrfuH|=S;OzHOT&K&ygBvvcEF7U^5HPA(abOcbkhN^pcIW~?M(lXc2G*we +Ip*26|K4sP1{8Sn4FdcG6+)xseo<67aVt#*bD+@*(T5=8)ij&a0C;_oNR3eytRdc(==j?X1l}50kaJS +--DsT{-m1^JB!e=LFn7ucRB!MInf4XNxB_-ZwoGh8j#=y;{F4%(&6%UFna7Q{!h7zUbJ@XVAmnwK|p> +Th0qvaBOd@E8t8Na107H>E>N*ShuFmuDY^Uda6toyvB`w*?${n-Ii*x9FxfWpU0^M|VZ*?Lob!LE6=D +mL-!cbc4%GzT+1Na8Vh_MrHP_%kTrc4ZE(<|yAqozPmyLGZ73?4&(e;D@DMp4+QBuuEF?d))_!10k9< +Mo-yRjU%Ix%LW<-=g1ld(bOi`lpFP#==!z<}>&hdhjzx3l{t0f@z5y8KRNBQltNCqIv;!w%7ZnJ;w1A +hQK0H@=%s#yYf*r`qIxIG%nbH-I~xEy-kjH(mna<%~0p$&Gab3Et@o?G`=Q>clvbM19v{z+Y`So=s6DZ8lvl;Iji7FP1 +6#!`RR}WUv?;AhJ+%F#|SeV!)blLV!Ef1tm1UI!XY7-}i>D$~4pm6QF4z0U4p&Xu{lsQwCYBwowQvf3 ++g^9z6qmFklWu%}RVX8gaYlm?31xy}*m-skpBta@cS(5#ywd?x))F`&<{F^VxX1)EDBzTCEv#(%)|(O +@3pRT6xKr?S^Nk$%n(-$K-cl|4vt7@)ap?kqr3E>AUNh)|2@NxPkqepu%hs&=sF{8}>G}PB(Z9Lb`9Y$=|L?b7=Yy?9DG+AdW%C99{Q)=C_(N7beraY0V7 +GA3@|{AKf(DjYcx{U1y{L5G3pORFVyE%K`L_xGZOhJ=>8NmQ{10OOXdi2cN7tR?f=&1z@TtrL$ +^?nn46Wgah#TG?jZ?-$}H&jR{hJBXNJ32Qt;jh0AjU(K8F*k0N+B^!{oY#0mGF08*Xp+xkEQ!vVhET&$l)^FB)S)((Jt=2G+_UccHb;#kk}R|p@KJ%JE +@6`MILQvqp`c8ue<@1A2b+H_qdO`3)L#R;dPoNp>Jq{dtRr>F@;v!2EK2;sZDoLXs#Vv(lZn_91fAvF +8oMoT0#acwv2~DMlOEbwt!@ColG1p(bh)EpnkH|ZByM&;n9hP~FcdxRj4d;;@-^F>Vk!VTlQO@61EgqG>W+3|z|>q>gzO$Ql!a^7 +VrtEcZ1U>5Q1>KxGKJu!a;>-!=I)&D?2>b)=>=w6ey;It9mSAB0K#OMJ87QE2XiKVVK81fD>~M#kr!Z3I +hfe042W^=nn2A$Jm51emWqU!Q0*S+tBqU^$#442V253IX-a$;m`b0#X!ai}oPMRu9_?MHBMM&eh+O;w +xO8Qi#jCh7u!cR3*c`#?QN_7+-l&4N$CV41TbGbjqJ`J37Bd3&aOsFQ?s +*IE4oq0_u&-dktJjx&ncMQ60deHn??n|=4FWC*OzE>_tM(Q0tFl2j36H_R&{v=1?<=zYqSgmO^`PPPtz9=Csi0D^8E2{eZV?=rAJs6!fR!)df%Ro+bb$Do=UDxVa*{Spa +!l5<$+W$1o@IaVSA_mI!N!2iG#;SC{j=^Q$-bYlwxh6^k>tF3YDQOLUD+aExE!-O<7WYBOVGsEU2dE`TLhK#8CgARTxf+K_)v{38%8`R#-umq1vVyenSrz*#b4hMFa7*V- +W$*MzX|2E>F7{Qjb<1ouY2De!1WFLfYwRMmAC$v<{WIk-Un}KM&Tn&M29xtv0CuzAx7#^qF;xzj7A1R1u24$PX|NkvMWs5}mDqlHdaOr2sWG9`fs8N>(l}>D=uOda|1V? +SC+#!tlD-D%fUMaBDP@W!B$mFXEOgi@|HWrWyr*VZg6-7D^t%%{_d-p{R*k +24WC85g|YP{E-5$mJM|OeI+hcejBA6LcNP}(ESSfDWfl+2^}>Mn3p +rokBf4!M2@A&5_vUPvP_gGFYB~>$XJxPu+q+1h;T;X<-w-o9=l?GOSMJjTYS +>%b)Q+cPZ7QZ5e;~bCP)T_<8oYH$FsJsXG12U+zl%l)fEOFjal4P}4C6H+dmx9XoHRUSrNa9Wqa??k= +VsEKS_IBk}eQ}%Bc5Qq^WAkTY;z0pk)^Au2EPQ~8hR@$xjKBHGF01qZ2Sfm|_(2dpE;Fq#z$?}A+d7l +qX%0NoqWm?Qsv0MiKCD)N}5}}*WOjH*X#FsnefRn>n~6tAzdwae#7hrvi;M{HK_ +kgeLMjNEqWPjvJr3!&HX~_8MK~?*5$-VTKmv?UTnqYPsL`Wd=)P!4fRnZ*)YhRc!xfI{6GMa^t)$-K2 +sO(*N6BH?*l$hNEGH~u)`uBl(pY0wBMPp*^bdQ`TY5Fro86ZVCneYXQn+2F*TFBxT&qEB{m1<`kg`l8 +&TJyf@9h*Z9I(KXYlO}$1mvy;VjDK>BpAgPd6V;4_{4qFc*Ma_|U?Oe2)e6i+Hs50^X6M1U|O4{e6eL +>}+cn6SMK5CQ!j$<4w0rfFX5pv*4_(?;Zw+TK3lF0-l$FEGU1UiSs;f9htTR0}J36W#A(y(w!XOWf|Z +M$2+<0{z+Jt`o6k-_3<-AoYeJzk4SG|HhYRY&!kR%Qoi}>LjY}~1pA@@FlAE~+S@k)(7!AI4A$tL0{v +1J>=)dj*Ki*z8*>EuB$MDTRO61%Qpea8+fFfCSt}%~zk0S$V~YLrTrWucofi=a&%UhJz005MEEwZw3^ +By11Tkf~PT6j^EC}(E$ekU4&s#eIaxR15DO-Be0|!>XoSx@k?gQ#;CWMRQB)Xi*MtFb(g>bsJqkC{FX +Lt*fv;e%2O_Jp>jqN?WI2V&U?@LhVoBn17kXwhn!~l{nQR^G^VW>yq1q}3Ge!A*iN&QonoS21>;&HD3 +czSVqc_xA2rWx3u&nBY(O!7(S7rszR=QQ13<6Enc`)oWLBo9>VXnQt3x!U0uJ~@qi2xd{}SuuimXJX< +5*f{?~Y6UA-eErd)2jpt@Dn~ahxnAEjH>x)w* +&Zl+FQ+Mlkfer-i3my4L(kkQYbE#*k9JsL%-Fy|2KOm@6aWAK2mt$eR#UDjr@UD +a003e(0021v003}la4%nWWo~3|axZmqY;0*_GcRLrZgg^KVlQ8FWn*=6Wpr|3ZgX&Na&#|jZ+Bm8Wp- +t3E^v9(8*OjfxcR$(1<%Ey^34^}mmP`#*^s8`U9h$(;&jE(D+F4mV_jrXM@n(MVgG&43n`JZ-KO2XEI +=EHA|F2QZ)C>f@#wYQJSx?lD#c2bwK7&LwGquqiJ8hciU#AE +3s^=yeV{LVWn*7OQjpJD2&RRax07~Wuq3N(FA%`+^pQLr|&N8Xx_RtDp%G@v&D%ws=>)?eBNktn+n)= +D~c*F+Xd_{HY;5!F^8>JLN7(>DH)wI?+jOhwGzDJx3RY)7L9z(!!3Q8#TVjZmL!gS-bBz$g$*3UFiOT)aDfBVfH0$VCvIq!Eziq +6B&~c*)MrudZj=)wwtUfN8GRH6WLa1pLg$kMQTk`7al51~aA9&x8>1lb_b((|*kb*B)3iJk +OSu_<;VysTjMCV4b*CTeiqMS+>fO-jSIrVdYv0Z5E!_H1$Lz&Bvop>0*z}26IlueSKa8U=L-{_lQ@G{4lgDTT4`wqqF<~lN?0p7kJ8X!3R!bV6{kJ#VT_6&^Rh0Jg5{a5`R +w;!wv^cd7Tskhl2ejiX;r>x)rQFG8KMAkhc`(Rzcu)+31#(aN6&NEmBf@Ke$=2^ayCaXKlyaw>B9pNz +!EVvIvvpVB}@020#67ZKDJ+5J>=M{t@`2GI+)pO6zK(iRjj=_Wz^BLA;(ipi-O55DeL+oYxz)ieq8#y +o4DMIeWKpWjd3bf!#7FMA{z<8L>X0OkU0V~E-MiwRHJp*Yikq!{VTU{v{fyjRx>O6nmkrUy_VscpbBK +lS_;m=Y0>a=IRHEKC@5za0c18)tJe*L6-DwdS3F%`$r1_t>g-cVXYEK0`jDq +$6weiXi(KXs6cB8gb$zn$cqf-{Zyq4OTmXJ0J!px6`^-)q>nf!pxaElwy!e(Al!Q4_K#@NeD%K&Q;xr +7chQKkC-n>E7Wl)pnbym5_p*0Bgy;-d|E;)caGH6Q$xk+H99+qarE9*r9@{D0yFc{|6=$1t#^ChFA-6{ExOEH(lz6YY|H1eSLy?C=F +mbS*p*ml@t1zv>E2|Ssi$1X&WYP>WAK4Uc9|Nze+m)&1)tu=sFq?dhTCT<6QPTFn~@_0}Q5L_QioK1` +Tmr0&(c1dQF+P%cTlK4LfKjJ^q?JK6>&j&=+OF^V|pf*qiO3&(Nm=!QY3No*+jQdI82}pI^G1Ib~+=o +$H#)v9n0U{AQ3W1+JhI5Tlq9>btDO{bP1^3;7{kC{q1#+bkbFA4e9$GrYw>2!rx0t8_;CoY4PMXa2z5 +EH7co3GOyDp_KyHO+n1tBH9sVv(3ur4aKnz4iW%Up=K@k1M#NOfdNI(VLDGaIT1(4fezqKBOm@~O4bq +YYrYg7&VcPCfHzpY-zcXUjy|G?pg_u9w+*}fJ~A{e!~)tiu;GN0$kVzcob+`tGhr0^+!XbLoG=$ywOS|eFXOWKPzg#OF@wV8)Vsh^8vN#3LV +<@uwA@E2Ds=Y31-EVmr!(j(bI=w@oqVAVCQ&Rn>BWfxGSs4qJ>~;o1?*E|QHJW-7x51*WOl%R<(o!0y +(b2k)W4*lm8Hy8G9UkDeygB7hlgtHWD0dz#-yEykG)r;K1e$M`I$37pf+EnH%7O0@^~_#z(Hfkk*J}N +F0r%GfY%F{OMpLlnN#!1?;F^}o;dne3!^btfvLr^$SK&_TIKMf7M_S+wBMQ~eoKZJWQX6I8BRhL^jLq +H2VYFScGG1P4RV*74Je*HtoBT!Ceg{>?o0<_f9~iOAIcuTfr24UL;u%HzAwnIA(QNEeV>+$M?6{_BXQ +U(y0r&6@~zyMw?(;NqB%e7Bzh2+-PF0$A|~z|Xo)i9E<5gth`K&Yqu2|voy`^K84vWaao)~>GE4{!#> +g~=q$|icH?nFF+(NTg1nzZFROcXedn`0A-T>pKL1`JlvMb#J-w>npkR`{IGJ^&wd(^<`XZd(hSh5V^^QSgJHFOP}Ly^L{JwmlPKreA+n!GXkr-lzymsp1!nxs_WNmp +yvM<~7bO>N^8b(wY@lm{U9MZTrC^y1D7lVmk-V#nx|QOM%!Oag>bFr8mmw(ogAlO+|H4tlC?Z3a*7cX +WwJo(bK%>>8rhvMrhI|7SFDPpacf^*z&kk+lEe4%PiYCEC;?^s9hZdsxJ!&W`tj=$hJ3nFG0YeZL@c3 +_TB8tfOWzZxBEt#o1)4|LVM=)m|KzIq3f+`y6gXDfICNl24D%_B>Vjz2B`wCo1(^ep^ayt!oVuufuL)~eJ<9E +}(i+axrzVHtHdW>qfgHsIEoXFY8HUu_KrY+ud#}suNNNj5`*P?IZm(5wa^(NdW2weV4GbVGWz3iOHTAu{Md0swB511Ie*)H3-j-KTQzhH%{XzjTTViKH?e|rPIshq&s&@*S8CNPF#TXY{^ +KYh$?(ae+PLd5s+y|-XwJxb*PW}FsV0PY;&p-aldG+Dwk=r_rPfe_T}8A<+^GAwBflzL=m4id9F^T9f +POh73h-U%5fSevL1pzoWlQi3TwuxBmGx-N1la{Swu8X(GWdPYAWuq7rpfUB5d5dz|b#^MBrmUspTTW2 +w^!>MZqNf8YKKc9fwEM;LLCVum-?bOhwsk8B`_CzpOt{bmbi819Y(E%DA4m^pLZ}jyvQqICohXfJ`lT +$_IQi-i6Wv+iNh7MGZzlPQ*{5jD6524~rlu*IYr>LF>o3sneB2)K{ku7~F)eNjFeS#%4aAU_W#j)*u_ +=tSb(dP(aE>vbWUeXWi?}6o2lMq=y)=CWj+^8aM2zeWeEM4Xa-=Ok6;@F6cx)#=6G_be +Jb?gBAq>p;D48}hK=C-$%U!0lAfN3cjAbt!!)ELqY*R}Zm^VAOs98vyXo`eRqt^ux=JXpOskuq@?`-4 +7M?9qh`;HJ&SD8t5*Fpgq?s1HQW3u?1U*H|b520$|_{!MGq9Kt7_O#Wi5)l0vyo2+S3Y*gZP1PP!OftHC>{hJ~u|X;Oo7LbA$mPmq1m6 +x{885i_8~Zw@TGwrJ>*frNGnR?~D^-rbm5+0+N%@C~%0 +$H!2CiPU7O1j;Fq`6BVzg%>@FCHk|S%lYP*_0|Oiy-j?YP?gwRbvA>=RfA-Xmn6U0SJ|iU!TyZL?9N# +ljmBrx#?E5$GJ^t?2JEvuULCD^Fo^i!0@bx0Q_swBAPr^tSvTPDX^t>!!8aHUUvg;kkPZ+0$_g`Masy +G_by)(I;E52XiPQR*lJ%=g^><00JD(+Xd4D6eN!OD`L>7~P$uCa9v!c{DEcvevXc$o255iKzfb!u@97w7l=8$i~ +2(y;?<&4V@bbnaui>+<}iVBXGeQZ +SM1GcdZb)a23#}}BLB6zDlv@vJxy0J0xSUP!2(0OkV}PI)h1<%4;`MQT3E@joZBHzKVwWg#@bEg*kb2 +6KFl4VdfO~2~S|gUvIHj$1S>)h=9YWyt8+og`RFkxjGzS~xu126!{NRGr192|#&SmAQL{yU~Gl|*-PV +u@(g9fD*WB?8t-j4g=U{M)aL!<(dn}C>5H}>^Ix`^{Y)TX#Y%wcKFf=j$*2^14*p5jjPq56cO9M9S)Q +=zb#H!V6VS_1X=GAKy9P=>&U(gB25z(uIcSI-IDS0%?z(8zOoBDGkz|0s*GB5zJiSNH=_Ac0ul)}-(^?W2*Y +%$0OcyYGw~ZzM{U9Tb~WB?_IgHbGw{)+23$L|AfW`q>@NfNG6*dCenpmB3aNgh=nPcMAtX_(a))vFh* +t}#zkoE-1Cm2uAS_e4df)&DJw+C+hy!<}Hdz>4@!cQeeXUIHU=MPvKC6Hf7PE?Yliib=E&&SW6B1F%j +j_tR1%>H0Ice@`{?RJyZjKz|kwE7@`hN3Y!7l{Rz{f{@1-kEyj*vorY~CJRe@NiYYI>p$a&>#4qaD|f +__Mc36CxO65x*Vm+8hwLOCw|O(d3;bm*LEhy}T)IFz*bppJHya!8HP +{FgU<*g2eL1H-r7p7Y}hdb*puq98Dr6bIAFci4WE!3bgY)`9T15_t*_Sjs{ad{3ITJ;)b8X@V|WxM#hpgrOnz3YlSMyWhP6kmBC%(AD9fv +uNSxgwE=(%nh4y@v3rlq!}O8ih_lnd6+mUOwfud`4`gF|neox>`^mLN;T1emwuAz+gf&N>kDkz%g|fL +R_|8v{JI#1{L^IabT_$VuCau9{lJQ?&yckahK&J;lO+1jSRF(U~2zc{{nMiYnM$7D?jUWFx__$~97r) +XU$PAWFcX%`P+fKxv@G-2bdHLu+P)h>@6aWAK2mt$eR#U7wjI2-q003+N001Ze003}la4%nWWo~3|ax +ZmqY;0*_GcRyqV{2h&WpgiIUukY>bYEXCaCu8B%Fk7Zk54NtDJ@Ekk5|adEyyn_QAkWG&d(_=NsWi_x +wz6m>hxgJ#l<=Cxrrso8SxqU#U*)(xv5-S@$rc{IY1L^6*QDE<&|_axd2d00|XQR000O8`*~JV-)WED +CLsU-YKH&-BLDyZaA|NaUv_0~WN&gWb#iQMX<{=kaA9L>VP|D?FLP;lE^v9pJ^ORpHj}^WufQqOsgx? +b#7=v6nYvTQaT?v{*U3)PUcL-XiIBybB2_+YtKWS8`|Se&!KY+7cjw7OB(S?!EOr-*2Z3keC|<3T;AW +AD!E7k@UcP$yV(;bNOYv4le|XCv5*IR)Ng7AJXT4|ek}QKX4dO@ysaVKFPS@fl@uE!nBQZ~;6!Bcl7G +82AM8dIFk`#L0$eePDCn0WDRHpz&+Kt;ES<$e(_%e4uRr+J= +4P^=^@KL*iJsei~>hAD_JkHav&#|qBk$Pchy=^JXkE6DYx@tve9akEEp1{^aV*cPjziB(p*@WN0`rIH +*J4RZEMwMvkOGy^>dyily-gbJzZ3n#OL*^(#HaDqhx3nD0w +5-bXIHIp)HkYDXuB010eYR@$%S^6z`4?Pk`DbB6CGGxYO(P`~8nu5Q4^mPRv0m?h|+>J@h4Lf(MqEqg +sGhS%c|CVvqE09}s)Jc>)UWy7N5C6Y07lSfU<*zNT>q#^v&Rucy-Ic{I!7I81dy0Dh{J5Q8dvS)Azib +ZxS-^-89_p6hx!@R2}i2clnddE&>ZO8R+4{5o-R^HU$t?jRpDobg^cuYPb|LJdF~A5%HcL#jN$tfA&! +l1icA!B@=Z;55-p&_bNv#qWDS0yuLt$sn4?pI?3v2M1ygviIAw_c8l*WB!}HFXE>IG1wo8*FzB5Tma~ +so`64eR?&@15&+x*ypM*I6Mz@Lkx7vS2`XzAf>$mw@ImEd@*$%P_bwqzXznV)G<(nET9g9!7K6Ok7EDTP`nVYn8QLWOmv)m3*I>f* +E|g+`uc?jjvOTz&j%y|@h=DZ{bKE=_~>TCqDYdC_-znVcVTgif4-c9^@S3YdH{XaypoN7i3HP(gkrU4 +^0Q=J1_mmF-v+~>Nt6#Wxyr;jXz3jKrsE`ulQPOPkkAW|P$_YvjOub?T0gwriq;SN6!w(i)2{ItTS4#y|2(vFk>7+6Dnd{Q-IDO`;=oU_?^BXSup0=5 +!8cZ@Byt(w86Y1;7ObETb1JqPYSuvm*y*`eC2EFun5hu8!SYssZAp!ql4W4p?-W8t|CH6KXv^+Kgf^j&2Nq4{eCQY|N~f#TWVvA)P^?Zx* +BJuUX^C+3|oqRkkmUWtR!~)pZf{}1{3gzMZxoz3fy-9h)?WaFl56w9Ncj6OVm);)25StsmhJWFjEi*= +Tl-A+(inb%Fq{po+JT9z5!cUjU@8=rEF%#R3B$)s03tf{D3J~4A~y1o7ZMjH0ADWjaYK0MY_uJx~&qS +ny7Q*w2=oOUFUWn%?Cj>FoJ(|U(kT5i>g;clUA@>yO^e0Z?2GmXp?G{-;IvUc%N2RrXiIPXfL$1%-ms +5WIW1c@Nf!X7hbmD_(NKOfR0S)_fRYW5c;HSp@J-oL}C+g1rH9|P)g%Qh^KMhLB$*nQ=)#D%LSxRVi< ++J^2PDR{>wcv4cg(38-K}thgHSVIh4u;z|6>2kDsD +%=%+Y#7DE`Rl^D{X^&a$bB^700yEd0GB5kUAJ}@u4-t}V30z* +BdhM_)ZMCCYLRYxI~A>>VO8|`H@R+zI}ZOIX=F(b+8XdYF@pQLsc9&sNIJz_!zTcfQq5IEU$Ka3CLE**t~*I^8X +V0+aQBju12@RZk?%XN1#l^`Pk8;kHT<_3RFzzKsfnUnT8&~%v~GwoEu}`Ai))tz +!ofu#B^!Wx0&tW4)t8#0Y(n})|#y@wau>GOCY&4&XbuMZBTWPUW$IoOHEo)=~*JZOqOjC+oQ$Nmkbxc +oQh$~2k>y!uB>bUWMRFYYodjN=6FL71FW!wOlq9TWonO9tdIl~$+=)p4^D!@cdc5chu4iy!90p*=_R) +)9@TEhT~pvs$d#DCKf9#)&ha@8T}m%OjQ^XI;iwUR9)wU^g4grm_%h8Q9UKZ}6fo+knO32v3^w<`m(( +biUn-FHE0JsAI*3+z#)CD*DUaQ3wiEB(HE{gUN(~B)8pwfjYr|Q3t8Sqw0Q_ko0oE|P_Yo*gi~l(_FC +M$mr_K1q)3gIW&NC$+2xFHJs}cnWkylAPlWA+^6EC`v8^r%$fcRmP&Tx0CjJJWdnNjVlA?0i8t0;p?A +^c9Q0T-FinrNG~p|%RAi%>qef97#U=&N8QSyY&g51iG4ZChoXU{V`+RKRI)O6nAj>*vem+RYXaO!&48+S1DijgtA11oIzSFl8c5+%K|h1;I^x8^}Mrgk^&-=&|4hvz +;P)1BH~e10O5MX$$Hyba9zDQ@EHw?`sH)Op0SbT8R|O`QhsH8gR0*hw5VpgItE-DkncT5L)KjRTQ+{otarDc$j8IG1MB$Q#Gi98nv`uto7s2e +7qYUeD#ZOHLf95hLnE#@OCXhs~5~cC@*a(xxvs;;^1@H8J+0LkOJEC7a>BJ_4?3RLA1iMm?9bm2>cwt +PA{GEAHd5+5KLdP9;1&R0YRwrY@bdgGD3HCj{R?|!Mu9Z}iE5UUVB)urOV?C+!SAy#zm<1H+UGa}b$J +9=&?3TdQkH&)6E-VNXXm?!74Ox2CG>XK|7LI(Tp&m@@Mx6=-9E5Q)Tg0*Q|Jm&krX1NRnhy)Io8)qd8 +w`sUIHHt#o0K3srF&ae!R+=)N;r=rrEKrblOhne^j;cu3Bx7mOs28Yj#GYr8<(`jg6ghTReQ7Bo%J_Q +Lhwu6u>+!>*PzL9S{rdH5DJ5P`!13ar-M34Y6wk|-`h!c5$nwB;4+D)aaM#il~=`>o!Ug}VHqZ?nHAu +0f^zu$(iP+={It?-{dRgXxi~61E=8#5y1wAnP~R8#LFC8xDb0-q^I#^-B35Om8E*9J1N8o0pXa>lQ%T +?HxuhDGfT!YmS3Rn_eChS<_3j!?wTDS>FeoOD9=~(UW4WdYco&h*vnLm(PtIFNq$qxu! +noHc%w38KC~5ns;N#@vxE#pub;k4-D$ +dL7ihBfOE-=xnIKEuy#pgzIH&mJxwz;<3DJJQp7VzSgjG8r17ty*T3}cfpbdi8;QQi$Ca4E=t3IW_DfDO6_;Ej5}0Ux0DG>u*GZ)CPg +;)kFmVA+5@QQ5oH{G5dLF2L6HU!d|NT1kwDji|tjGm8g!?%0Pj9{ojZZP;FA`mD-mQAWU>g>fnu5CZK=0QcrR1-CtvF3{VI +phZ^OS^=Z)Xa#nyP`S;vU^2HbhGK2*>)C^~-d8q>B4c~2m>?1c4#j?{t(F; +EG_8Y$EtRdHu$#UW_>C&Zs+j=gnFLkLW`N;nh@)zEVk7-b| +lpBU8DY;#YY135)*1q=4G~GXVr5=8LZ{QO4Fs9Zge{>aY-u?Y6{IlShQ7IS+32@M*6xL|i? +-U9fUO=IzXeyHnSAb>>2R}o!Svkts2x|?#J}`*(erlQ?&DWNr36w>IIcPoYO~7lu9i=UfXcqMC}_q^j%yUHsdUF-OrEygs@!L +pdW#>^4Wsuj>I=fUwk8|)}tZH!~THX#V^QQ{9FJJa&qa(b^BHxY8B_<6XtOyL1OrmCzA8ki$P}y{9=l +;;i;VG^Ylo{`TDI4a}&l>FH|7v1tE&h`pQ)Zmh{+E1IWV1whGwqO*JqtZB-~GwA8_V$6ng#gXiDj))5 +!?@8g+W^a=e#)>F-Y2Cb*s-`IT>We{X_^A9oy=?t*p@d4;o@oY9`UKn~)`u<%%cCnyg@MHFR*aPLH!&zKbNdtXW2g2%3u-B@~=G-ZQXljKKb_&19j8BqOi2_f_q>rT4`D1I{CI$pM3)EQ +Zy{YnsBx->=ijNM401)~h(>Si7jiuaGI|f$~F?0cz8*4RYb-ytA^7?!bVm&Im$1=d6%pj~vE2ryI=KF(Zi#%CxS|1OaCSS?$4tTd?KfY +is_z6H&dXou%~8-uuRN1$wgueh_#twQohibi={n=rQBB#&wlMzHXUYZ10_|rO|$}znL9}hfGd4k7mNvmq?;@W%Cyo} +v_CVqUs}oc8vW07(9q?j4sTQ&^l=|j^x~C0Jj)v~I3Ew*Tws&{|8pJGF+W+7L(srUQMQMh<@hvCNOms +iXVCxYZGY(C;8~RwYCL>Jls&+;wFV`xJnc(;o~SP$Xe*u#2QUa~q^be%*=93{nMM5#FoML6ext0nh^l +kci(wb=@zKRo!;`qS+A&)f?!Qm&?PK;7_VS +eQq-l}K;pT$*pol-_AA3(AtZ(FhU2$uR)kKL@t`Yg9kadPV=9N*yC)|nUiUI-DKn1Z^c5V|ckD7ZROc +91%WT!r3D4wC-g|K1-7{DFrd?FJCAG~Mo8X744Pa7H3#H_PX#)#!;zRo9mtSmmZ}fdI&F3Q# +w4mkl&w<9XEx>$OkGtRStnY#O;2J-^T#XQYXxoUfhN`6$mZ1~NmeXMsH0xkl#p4uyYh{0gq8m>|B^dV^e8QD`$%mbj$ +2qh$hfjjy-ckC(~GmaPlOUK0E+t8v(%X2NOxNRfBA$I`)ysrqy%6YV%`IBp>(LdIX?84K!O>r#{)JFg +V0bCK6p29;?o$YGu=g^POorjgj!&qyle{P0PeBP?J6nB0OTKOjoledXOhpF#|sLIDR{>|Dk+$2ip?^eC+he;=x1>*n%)Pm%GK8t4j9~->p@$!1(@CT +)>HWf9eA&j!BBy+i%HRN18GB6F=|bx%9$8|Jm`T%OlwsPr{&8|Nh7!eThLo6b4ig|SxT_IMujPKLbsS +QyIRmg2i)V44#PKHY+}K5Lf$}?OsC~>T;0kjt1L~17vRkdm$bX!xuVZouu&-;YQ2KKFzfU%1kvZIr6E +d5p%{%Y3~)xxrIqXl?*@tF{fjhPhmtXh`5%me%qf_!=@iU8=lhaf%~!xH6LwbdicX@!Wfg3?H1p#;D; +;kK;EkHg&bc@X4cW(QB;>&NGH+P(j_Av*PY)4jB#L_j8cwlC5FSi0$r8XbG3K-Akb6A*4aZP4y1`2b_ +(|&Mj!y>-GN;PapjN2G;vDP%sSj&Fbf#&wE~>0%==sXg%xTA7bF>X2pp~%H(kt!*Kv%RJ5Ss9Izduio+0y%~M$)W^uL)LhbW0kxV-Qn{^a4xn +GV=0tMKnj@!M)Eo-oYB#METI7NV9Bts^^bhV>7J!oTQNef{6MDbFuuK+tw<}o*8<3skh9Zwz>2+ZOOq +VdX5vcx~CepjL8Et10{CgNg)|DrN{@Gb0w?>6|KXwk}C#^e +h3;O80of<5wvRJWhC*m-hBiOicEe6m?_JJlYvT+%t^pTSCsOjI+07Q)^f*spt|HobkTPI3U0fzf1QVU +x~O)?me8;GqeSmRiktR|SeA-fF;Bh&?K;sjAydhRwozSxE1-l7qTsgN_E +458f;b*VI|ld8GHa8wcOsVA%5JdbQqvQ_NT7D<9YK?h|jdlF79qX964|S=>uyPW9%iQ1+cYJ|k#z>dbN~EBZDQg*0gM4#)s+%ZulV8kS@2(n9A1Eb;AY*Viyy4Q}8Ks3 +Y0yYpx)@CsNQAZn$|aQq(j%zG25Py62XKGq4n#5=NB-zevz*92AoNG&#JuIG(tNmzU#T&hVDB%K~0;* +#Q3W;@#oZu>!4}P_B2>>C(!YR~t0rU-gm<&3WaL4E)>TjuiZx#n1pztygQhEg&rwnzY=$Vb@H_rA+Fk +iOf)`@}RM1Bk_-a4u{nSbS!NJnW*Pt;K36j3RvwADeHuFH%FUI)ogsqT$ZE9La8ojjCL2UQbXG$DhRBhb!)0X~7hrjbsuo6GE4#B{aCfCed^FsN +qKro3swr%mgdi(;IAS%qFicTc?`H#EhMokZYE5B)y`NK5Y)OQB;I6)i)b^cn-SP~ORq?gLeOT+{`T>Y +`2BJ4tinDcMK(4yl^^?5K{bl9MC+$z^7^cT +SI`RWT)@-gDy0Q@i1B+&lDHm|L{^*(3Wij6_R$Acw&ZLdvK4QdkM0p&WyS`Ty$6qK8e&f8&sScEp_y} +&y_SgdsH%~@`ZYhL%RyP>gMUCIXw08lASmSZWsga*MUOmc?%C&iCx@Em!%E@jYh_m&DV^tR(@1a2Gr>2 +g2Q!3#1at@6c}gLGu3yAJw!Hh=N&eLW*{pl5U}4UHw<4)FYW +`uw@xrEJ}xsqSrfZ_OTR8N3kJYJ_<$Ui_pc*61pSYbfQqfWkL~;N&X3{Wo<;n-(oxTGaTR=vi61N35v +m$i5ApfrbQ~F`nRzR|4Xlq~Cs%ev2ELdGp_JSZ+j|)ZDEF)8|I^|39r(Ay7 +0F`oCHsMGSKeWg{93!gqoH@!Hz$&~oeTLI1Xrp5btE7P)1YGRrN!&`mpM7wp(VK +H=(txhXKe`6Reldmm0JW}UMk}4@+Mq5^&pn>Q?4A?rFAj)X6|c +K7rIqFY>uHn=T^C-i%$!jK|Lp}-eN1rgnxs_D3-@-Dh4c;-MY6*=9;W|o$S0y;NBvN*d;L@fTq@0Ui!fPHz~l(ygZfmT$GZHVt6ogP&G8Wl^6v7ikL?O743 +Xr(ui0Ml7)XDLT@?sJ-P_!jlRLiPyrV7rb6~0C9gxI=)(1*7|&hJq`JQtPx~}?B&j>r)mV);2Eb5^X9 +;okIG(F}r1;7ybU!P+Tq7X31gM%=$9)jyU$K00arqWAh3)*f#*FzYl6>s8aG(%Jh +|5q;w=<9)JLVYa;mIxLKuDap2MhxnMh`x@LYr%@PN@BoYrjBX}F9KQ%3_>FsH~=Aa+RZPItd;1U#JMYANN!@XzRG&DMhml8m|6dHf1rmc=TIje(b0}Wlo6By41&wLC%XpwBy%mggdytcY$0d2SQ +Cq$DX!KoR5>WX&L@gC-r_OB(K*S=zJ-*0OhvK+k3VpFr2-vNZGT|CARYGp +2T)4`1QY-O00;p4c~(;Z00002000000000o0001RX>c!Jc4cm4Z*nhna%^mAVlyvrVPk7yXJvCQVqs% +zaBp&Sb1z?CX>MtBUtcb8c>@4YO9KQH000080Q-4XQ{K2^vq%B}0Eqblf}u6E?$Ex7o~)jtK{nuv5qk0s~sv +d

ua{Ci^CingE#+3ywNu^|y6mj>~ua;MYkP<6MXIZCiCIsxGv96}j$Px>x=oGeXRiU!o6knylDWC| +}q@_|)>9`Qs)m)%ok?h>_TwCsc@&sfxYJ_h%S(Sgt|4Zf-2x)9@X5u=_;G%#h-yZGUpDq0ps<}roZk_ +zb>K5m&y9wpu7pr;cPX%WRCQ{S~P*dpa`GD26?6AxzoPozrv&_Rf#f`g$!c_q-e7=v^nz)UdXgYd*-CKieYri1yct{**@d5&J%5G=M17ZzKbM_{Bc=F6W*fJJWRrsM_txWLEcZsT4ALf; +9aWHPX%xd?z)flj-di(BMBGqc3jM5{&~LmbpPdUeR;oF%x~7W%kT43Kv4_{aWsOJ$L;Y!Xhpza3EEgg +8x2jXZ8k;#&5pjIX_aucJi7t=ewL>;2XHvXWh`>Dx@KHWEW+D6c$q>OtjF$klw?I1Nhc6Ja6b;*aLQg +{uB_$-rt|xmq0x>Y^t%Rsn?Ss?zm``k#rAs(43guQB7G$K??cw7=W)shFP5+3V&orCO9KQH000080Q- +4XQw0;FcccLT0G|T@06PEx0B~t=FJE?LZe(wAFLiQkY-wUMFK}UFYhh<)b1!pqY+r3*bYo~=Xm4|LZe +eX@FJE72ZfSI1UoLQYjZ;f+n?Ml0^D91)gKZU|L{TqMn?tKs>ZR?iN3>=KdllG0yMrnJzQf`;ekfA+0 +%CT)*9@-fISAquvrNMDltIrOehmSgk$PY4If^$Op&5KFjy+t2>VsZOl%omW`JHlldu{0q7_5abx=4!>RjOH)2MSS9D(4% +-K9M<{wS6{+7khdJjCLj4GOMOk?4l%Z`aek#Bu5s#y5=3zoZbpA=>gAke5pbIFlF1h(O@Q2_3{Epiga +-Z8J9KP^mQG!%v^_S)QdLz~lRb)D&kQp4^aQu_>gfbApBoDo)l0;;+9tid=k9HN&r<&L!;E62R0^31!?do9$*4@H5Z?XOqec*$$x@6aWAK +2mt$eR#QHNOV+Un001u*002S&003}la4%nWWo~3|axZmqY;0*_GcRyqV{2h&Wpgicb8KI2VRU0?UubW +0bZ%j7WiMZ8ZE$R5ZDnqBVRUJ4ZZ2?ntypbu+c*;b?q4xbP()50rD<-vJ>#-K(5AZqx=FTa_loQG3|g +XMHZmoUbRFNX-)Bg@&`J8Tcb5XGB9b%D%slf#B}wvjA!#XGzL+g)>$F(PbWG(+=T6m{N>eZCa^n_wKF +aWKLeg5Poe~wT7gE#8Dt%2?SFf`qNk*d`IQw_;xtst=0)rN|iUY=itxWK)@lXExIj{7S8#dIycB-x?0 +X@NQ>DsTngnA<`{xA+f>S>W;fd%w*ZVsFf1im5|%n +4SoOO;JP9aciDBVz`Y~YZeTt>-c$U{I?b2kg6$>MWZ9i>?Vz7IM&a4IFb`F31`|~GL5}#{TP$4xcg{8 +VgB+O@|D$O?lREDy#tdXdL1cy9A0?1w;H2_^2alJ&zK^B~lT_LeHEKedY=asSxSwte58ueg9Vp)f(#P +qHt9~T@^OLkGOIU8J?8zMSvq_DMyR1~B|4Y1h|R>8@6kI?p$NYOB94!sO5|j*SP}7f(`+Vx&b=tm=F8FgbS15IKn6*2(TjZ63 +JL&3|i+8VI()q<(5)PXh?@^z;B&b25z%KT5!R?|{h$Nh`UZ{LA>cSmGI$sDQa)(_oxiRoI>K#>LE~`) +-13UN(6LsGc-7jaID+d0f80{r7H~-14YIkp!E4t_z#avX*%Bq|&Av|`kRwMV>BCf=);-WZ+>gm|O +6(rjfcxlMnySK0as!<(NPxd{-44W$w7xV@=I}oE9G)7eM +4i|h%N$jvfsummh-NAS@ISIg+}{)6qWi9ju$moD4!V*yVb}{+FUd;?c6!;Tx@0Rr;DzUPJFogkm^2^m +?;cu4+fbGjdi_V?|rYv4Eb7#T%zRuv6oE9#~M|#&m;6l@2pU8xxjT~u^`yBMzy1@^5D;vb*OQi9(}2v +eghOA=oDiI$~V?Hb1-r-z7tX+8hc(i03<)(=TK_wOg{;4$nhcu>l^2|?+yrhia+G>LeP?LZz0MN~AN;kx5Q*jy=Km0W4=%~8T}y|?Y4|X3_1Vu +kxz{P&%R+RYK0kc!S=xmZ+>wV2K_% +FU{$Xn+-07>OL^_@d6PT#zpU0l9ByEs32&FB1!H>bb7J9~5ba@ZV*)L%^gAB^UomW6iJ;`4-`4{oomx4m_^_x9DIDx6)#0^*yiRzqzw-&q~D2y?9RTX{! +t}61S7KI!0CEvxhReW2(NCcsgH16HKKBaxZ^VWWcu_q2FkV${V++W3wj5JniZiE4Qn=m@`GPnl~xUAP +b-QwT_xIDJ4>4ATI`uI2Pbu_x|S=fKn+bhp=CG%5bQ;6Os-IGEA4s+VV6g +++TH=e;o!hY&e6NUZ8R9F)*6YrqZkq5y#*s53V4!vTE#s^Bm~;ciyDd0EIdtIv9%O&p4m)BF@xa@LgJ +JoPC@B3XR7Lnq<@_Y;5mRw~#R0>pfm#y@;W%xDv|r@3ypW+`aqG +_2^#z>E^a@>1lfurm;shp+}SsUzvEO599JuG%4TCCq3%%IKHOy@Ah^V!-jjmje85~HnvCR4x&!AikX_&0RRAl1ON +ae0001RX>c!Jc4cm4Z*nhna%^mAVlyvwbZKlaUtei%X>?y-E^v8mlfiD=Fbsz8ehMMGY=F@>=poBIG- +!|*c6!)}P;9ypVp|#|C+pi!jzvdl>XZ2W6eazn8`7NsXa+YB0tnR^O-{&z)$QOArZ`EyiQk&UK~|@Wq +}qx~cSbsOP_1$wsW7C^s>ZP03U`!F3>ItQv^bzRBH>fgjE6l{y6>@aO80!4vT%b?lQstHkWKh^KvxT*z-(>E7W#H^tIgBnOS^-;oTdK5+ +je-JTJuQS}bldpzFy><#d4PQnN-Bn?rjWZ{dZM!z2NaZR=<7Ias|2zAmOmEMjLP_Q_jTZeB8p{bqLGP +Nvrp;2@a7p?^FtAKSx9>>sl)r#uqpp=8Dmb3FUZARcyR52Nu}h=zlusB1I2pBTn>9ejY-KF044wc0B~t=FJE?LZe(wAFLiQkY-wUMFLiWjY%gP +PZf<2`bZKvHE^v9BSlezRHxhlhhK2*A-o>MV%Krt}1Qv#z-la-{ +t&E$!jOHvPsluT{2pDV#e}2W3-9a^Sso`8L>i +?wt7CEO=%p1rAF;S}gtvC^h6oK>UIsNyRSwm<_EFUh*1G8(m487)m_02lBinZqmFZ*9#>u@dD7@Mk<8 +`_JDvMhv~2n}&l}f!lEC#i4MB5`n1->_#`Tf+e1j+VUzNc_Fi!8MgKJW`4mhmXcXJTWp-G^HK_~T>i^ +^{`9evz5u=a3;&E#9<<{#K$oG8CR>o=mBVda-}!h>(LA(hFQfz}_pG&Gy#26Pd}7k_#R8o6!X$Uzmm~ +@{XullzW_a16U1|-^FlEsPG*PyI$Dy(LAWQ@p_yB9}m~+NQcM4-#9Z$ilp7?VZL4Opj^sDDHFza3F!W +A9yw~j?UXcZ*&u|xj}18qzMWVR_cz$`3Vpok-iC;72(O0r*brtK4TaRLI8%$5@4z268FyWxhzmNTjbc +ZoVUR|yx#ItCEU$OFup*mB*t4{!1}AxxpXzK-<&Gi;;L1v_^-mAasZMQc9p6HwxmA}A5x(Q$ZgQVV;o9 +7@M2YD@9_-qbIK ++*~ELBrPFu8dZFJF0TiHY=nc@aZ$zxL%j+n-zJ4_wQ4jGSWLEZN&Q2Ia-;>0#JmNT!2 +{eq0O)Jp^u=9M+lbz0F1FEF@ +XaL<*0}6UEYAj_EPZ?uFZA<3Gleo*KRK59yE*HSYg8jvQtTZV|qNmJ4|4P_ttanbcDblTz<_RjipPR% +|O|n@tk?(BQzoc=xEYpk+d>H1#eUMK%I9@U2?OvN#AZw}G-+M;DUZzcDr=kA4Zy2$qcAGp(n +-idoKmtYdoG?PqnuFeI$%P~`ND6*XFwZzQI_)q%eptG?;@MbKij4^LLkh6&3H3TM`B +)6eNlmNnzcZ|vn1BwKO`RAMbf!D$SuR_if*V7SHq +F?rwiQfDc=R1Fo&Hm)1r*J%y4f3^}p~?lFuZ>gz7VF=JrbAd&}%qUP|ColzBiN$lbbgW +UycNnY4*r_TLF4Q_7h$--5F(moe<%f$$+NotlnnFHNIw}8Jml?X8+|E74c`;f1oE)ne($`ny5GQ5Bla +rGm=P?GEWy8$`O+3?k8NnRg;)F(GJwCJ`um(RhI!t;L7(eZuH`@<;+2rizfQ(QiX*w&>R}*cAqv7kJ+ +1dDzjXD-kv7Dr^4huNEKE4izgo9Z!C;==Dv`3ZRS0Emw3XJDxgX$mz&?jzYSNJR0agK?)q2pvGtT;_@ +VV?7BdP2yd&-P)UQJALSAUlmnx1Wlahv%oek71tc8W2qwUV@(vYHs`!gn6pAoEe;{SCN|oW79<9$vp9 +F*StEe?N#1C+|5%^f4O}w?w@|Y>7#V!La=dk0NrpX<#5AnA?n?YXShCW=iY{K=0p;UeO*NdLJ{Rh52l +XEk_udlvpTI_&_oYmr0?cfns=yIlUvaV>jT6}*I=Go5{AM2yU~utQ7cMQ&31`BQm?vue#rLLazEn`O~ +GF@$6y*z6cLh7EDdS+Vo9mL2>p>7I!ipMIL9ZXwX#hO^_g@3+Oo6j>oqpyW{I4!y^jAy=stzD4Y${C- +@m^}c{}|lL5>gke$k@COZ_FAoHWFP@QLJSp2BqjOa*&CFZMc6$AUnUbJ{wRnuCLvQ|jnCnK$>zlW4&)ixzYm3i5ay!> +%9WrwB{Xf2Y_rw3#XoqEZbEa$f-V%p}Hc!Jc4cm4Z*nhna%^mAVlyvwbZ +KlaaB^>Wc`k5yeN;`4n=lZ)^D9R5utY*!dRr-{sNGhova8+nj2sw(C1TUDNjCq!W8;AHwOoMle7yH&# +trE`6vlKV$bGNLLPaPnmIHO2+4p>%5wj}&#W|Ip)AQ`Duk|Z@Yz)=b-%LeB@%ck>fi5Z2T}$$G$6N>DI70x +T;MZpJ2CLWg`p0U+ex!$8>-~N8BJug2dqH9kf8YPiAjgXCac14bK~c<`v#dOa3qo_a_khtlkmm-CYeT +Pfw--w6kc$2kCpDJtNHM3}FqF}D1{Qf2kjVnU$XC8UmC` +gQq_q4$H%8P8cA*`u_rhxXz5NIx!hu*7I52-#F-5}>$(V$#XSC5s2*;X%O~moqT;>37HYh{f0BUb*>n +lxEWHwqYU6?aFyu$CV#JxMdDYKN5_#JBMidE8*_~6IM0+mbIj7i?HJE+PwE8K{ov!fEOCIk> +pX^w?f81-afi>RE_LDpEq_T;ABCu5>iT%?bf!1BSpHuo^1xx90+WzqK{pQ0u`mN)lfHhl&EMRGeiZrR +R4UQ9%E;3R!~#^PQavQENU$|CkTq@5OZ88jZNrHku%iXw_z|17`{;}bb2{{c`-0|XQR000O8`*~JVP6 +PIz`~Uy|@&Nzc!Jc4cm4Z*nhna%^mAVlyvwbZKlaa%FLKWpi{caCxOy>u=LY5dZGKVq}Dph +{S*np;M$HS_nsV6|Ju2zMPP=u_w(^dpGQ^n+C-HelzR0o5DS!s>yoiJ->N)ZFCNCye?c}FpfdyTWuVO +mDO3{FfPwQux7fIu=w&tO|yFW0#%|@tZt(S?-JZPsgTeLy&2rh)RAm|TnMOGl}q}xaZ%jE_|ipDON;5679xg}!ErE^kUgVj00`>U%9sK~%=1bJ +oqHsDFP9`GD_7SmOZ4k7|_V*cVv1RL+iB8Mqal($y7VJLhS}v!=zFfZ7*3oYeDy7p$i)MCwjf +$Q{!R7C#7xDYW@!Q28a0KD&*RMNI=oEU2i{q2CMfLEK=qOTOQCW23zd}(e#Y$;7g>XX(`MY3Mf>ni|C +P8rg=FQ^bDqehebN=@9!*8tb`m5YdQ(R}lVHh~Gp9esnI_gHdOmd9lLXogE&UIR37*`kY2$cRJ=J4*t +v*$sXW;pe{KBJ|uE#)b|%wl;QTJeO;n66A11o6A$)3e3ftHs$F*``;YF>zzEJ0Jrg7dIGJ85ny(H;CI +oQ1 +VEK>E-Kk35543bd|0Xw0{En6fT65lX~+r8UpH7iV($<;4UpG7ajp2jxw +otWv2SS&IH7d&fHBF8zSd#6oWh0Z5^#Jt+bucFM97f78g8a48m;$YT>;QOy8csaBGVMq_^KL#aJ%m|v +!=xk0cVdkF3v?j3f9~UdZ*sg-LhPN@bl;2@VaJa(X8%F@Jn(tq+*}grBQ?AYeelBV +igwT)0E_Nk@;xpGg@s`G&d*$Nj1GiI@grf;wJ@IzS_+JL5=3OWUv?YOM`>iyqG&w)hDf0f&mQb);Kir +Hm6_Wg$FiccJlW+)9~Dq7?npuyE_yuLS2>)x*`_C_GTu53B8^X*C{-Z$**Nwg03qk%{fg3vy+zE$PPy +|YJ_u`(}qH{hMc8_*^$dlvs`x>Ls8EHPK>s!T4@J7_1id*u{ZdDBb_a;2M@Zfpm9H>{6D^rjN@)Xy<#ThqksgB6H+w^E={>GG +8abDGVhlTPI|qT8B8U?g7!Av)5$0!aj>MZ^ft8bC?2y+-e9$=mH@2Y2`m8|Z~E+nOg5*La8ZMg-&2U3 +zsY0KjiY(NdI+p*;6&G1=k!}gtr;Y(?zDwJwowR=J@6aWAK2mt$eR#P@8)w +Ey*006cP001Na003}la4%nWWo~3|axZmqY;0*_GcR>?X>2cYWpi+EZgXWWaCxm(O>g5i5WV|X5Z*&29{kA={vvE(#QdLrWuzjYN7$%3h=BfA1TTl4U2zqCj=AC2~Ia=FJ<)2Ke3u$*BjsL) +Z<6?50W%MJgZ%7to@1=E0udX>}w|6b`C%Gb*IrTMb%!YcK%KP;quN7$=!G+gaEk~nKL8VY`QSz +#BR7}kBujzaw@Qlaf@cXW!{K<)JMZO{{q*$p9X;G@0PHXi<0w%~9ZbbBvje^}AhnEenMt}S~RP@}?8< +BI2tPdOhc)QyhzKLmwN99tY(?@u+4lpV$a_LCi?|fzSg(wU;ed2{9FCOFW$86x~=NobBTub83_uswkz +gt43HRqJ=V}#XM0&(TNRZG-9V7^anEuDKMqt +mrA3ar9n-#3AKG*no9bCyA^qd3~K`1g)kaD ++XIZy#&t&|Ymdl!$J_UKQ4UW^ZG)75$98VL|;f$)1k*`09>me--u)cwg5d?G%;VkXRDBz_o +c!&XsLl?*uz!`m_14jsQHe^+~>+A!fPPDd$7F-OJCVMV1`-4oa^;6Yf*_zZXrQ$7Qs>ka +de-UR5U=U}gpp|vyLCr2ct1HO)Q;f7(ub`jD8Tf=MRfaPa2NlBxZN4DwA?XZK*PAew{$<9b0+s76Hm)i +hpDP?DV{TQ6rel4Fm{11#l`5^=d6X9g~(xf%m9o>{{m1;0|XQR000O8`*~JVmFNkb&=vpyk5d2uApig +XaA|NaUv_0~WN&gWb#iQMX<{=kb#!TLFLGsca(OOrdF4E7bKAyt-}x(c=w<{a6imrU({L`EC=wlOt{r +(K`lcP%1wnEtq6PsL4^fK8{p~&H?0W%FPDb}bZ}~w2f!(uv9(&&4y2!UIiq>^i7d(nsvfbrH#o|Sor* +*|6@x9lR_xUzXQuQUxZ*P4rxD;}@7y!9r&zvfl(V2yfPYhh^?J|PMO?+KtcrS +xjA84%0Q&9*(iW1u~|J7s&$mT?A~+2(f~Hk +p)6pu$rYXDh;GnZ{+w_DQv2E5sGR@fFJjr^8-!!PhaOHDUSUzhK1xml2a9;^i9v5>yX6J{S{9KkbTq2 +h#LF-&TChE~YQf-o2hhZ>FhIkR^+eD^!CDQ+h77V-K9Wg-ALIP3j +yKweNnz99#Bv~P|?oPu|$ljIQ2Y>eZ_0@0F3%SeNL@}h0-@q1dHel7-3 +9+4TPL@5K|2cti>L8&Bdi>YfsxxCI2}lwWx;`XU;#6}7eJ-m5GJPHt%$a?H(+O(6ErZa4`ixx#7OTLn;A)o|Ix*P%m12zmeRKh|lX`s+r$7}~q%y`_hrI%(-B!)}jtxUcf!lQUKImQ3NmQKDiMBY@@ +4(7ZCXm8>yMpr>Xn#lk50TGS}jK^uA^a_HbU#7F8Av?mG-;Z?yvA05jXEC7! +S$O@uW6v>L0gvOaxg@MuR~+sgp8Zq(JM%1KWY1;E9^gU&d+4=kurA1p$;hAcw +AG>a6XHc()U0ZA`K{p8pRxMrpEmVfmz?<66#Hou#}id$tI~g+XVC-~_doamk6W%eW@=G*G>TB2J7fj( +2epgU6hKlbly^YIM;Izp|{}E_fl_L$Pp`vp7xjeaL3uRhJA;IbZQ?$%)l0ht&%>Wp!4Sp`qvv#}$Cuz +vdYb8?S9o4kQ^|)fo4Inra>6UcvWeuyKNDG)5=nkpR1f_yVUP71l{nR?2^E&XAnPFOrtDI{4afX6JLF +RFr3tK2&l-lX&tZ8uGo$_iP(y59$eU08U0q`hp9YAQF&H$*j%IHsGNXd*v{}FW?-U8Npk1!lVa`fW+- +>4%({Z#hnUK@FN5Ryl0TMddt}c6it@HtRlgv0YKwqF$+O~Td@Rbvse1#)JBOR#-cCXBo}I{7FuD{=g@ +@)N;_~!-w` +JUzG0KORg%hOQg?{pLeCSN373lJ^~@urB8Y)Qqpg~(rsq@Wxa{5>cp?vQR9S4)_w!OZ94X#|X1@)QDN +z2&EqCsL4Kgs@P~jq`M6-L_Q^WdiU!>I?>`N|S^L>dsP!ObWT{z{y8F^&O27m}}F5z0+or>izA^z(yq)rL4Q&&Y|DQY6=umIdVl%{Nejj7 +bhm)^OnFb_Z4oxEgE$S_1Bp$uyDfAy&s=mn@j(b^ayABMy%^6A2IDQKEwu5kGGWewXBR3DhCxYZOSBDL)2_33^39u1czaA+f*#RhQtHdqEpUWGCV2KZhd{ +lCFTQT|#`tGqwyuDTD-+2L~5GNQkWneF-5TDicVOVql4TuyGXKMC^O*9Be6jGz7@uiSB%^fgzG&qBKs +nYE{z@DpXr;i6cl*<@J+9DG$`8+B(evVe~lj^*UO|%PKEyg2^XLJRvFCp=Da|YR`G5!p724YbA$M0r( +UT8cwjyfgHBq!pl4*R&GI5ka!650qwD#P20|EP{bO}3LMD?I0Q0s5Q0&robQlRzL0)$H~*P^&4N?*HT +?Z#+((W9fha#_gnZIh +T#WIP`MLWQO4pKNBoq@1|Kcmn)>10h+3(Hg27ga>SPYY0q;mP}H`zLVArPsPCy7VX9TJ%9z;9NNBgj@S)&lxbY +R(Tp=H2IOr{76ips7(wXTW<%hRnHZB0XzbpEB0wp5qA|ehJkJ6R(gw=;LNl+yEKoo+JzaFE9KklC0x? +DxM12uv-e@HVSVPg|)Kd_q3*kz#C8%GpXY-JN +o8Hy#cU#2ts_x2tAyO_S7&Zc;E^>%i7_3I5@&aThSr~MB!dC=IVYu)|5HqW3)pLKBB+3ovpPasJA_Vk +A#`)>5&Lvv}1k?yM965$c+U}o6bN&l<{S{KRhvWjT-0(v&t)?2OkF*Fi9wX6jIJ2@TobQ(X3(4~nY!; +q4vYopG{W=>8<=8j6pqKh%KWGG%WZpkp#y)F3Q-K3z+yXOhlL{&C@P==)*0M~*~EF7Al_N=IR%X7I|_ +o-C24RpJdl@GjABwA2Z_2CQcF%Olhkgl;F>bu|`w1MR^fsyh@tLRTnG73vh@Yr#9ye1<18%7^w`h&&@ +{K%ru0wjPPd21ZClyvmGBOik!5Y}5^4CLMW)thjr+)b;Hyj+LG +yb)2KsR$YinU*l(xpnx`p{Rj-4yc%%)s;ciiD#05|dMfw%1z^cwd%rfA-HciiC{-BYBU^+LGvKAzo{g +oxVp&gPuDu{zS(20eKJ*e1F_qb${}dkx1aSddmtQ!<-yf?i|lEX%W}q;lnp+7ut?lHiF(wcZTw8Y=QO +Z+3CDIB6dEUPH*XvGcfeU4nMk$4$TZo!2`QZ?jUjk2}VK0kRA>EeiLJ2TRa12-8!Vta58!g;vr1PxXA +TVF9m4Mx}y11wt@&YWWQmtf0?Yf1!O__Xskucz%;K58TevV5<{>Scfjd$5`d^Qw8qN7p3{1=xj=ggEn +rAI_ep7QNMhdb5khc3TKz~^wC{uN6J=l|kdizU51RG7;W)McgMq~5C_-%zMNQ}N5yuKYPv%?^uqSh{@ +be{3)}V1msL1zCdVNryNSD3C4{z9V8>Y{%PLQ6$4n+e{0J_`?U?}^Ar6khzgW&70#b|jVex}KHhx8aH}>f4}yo@aNUbGRWJRf@*!tAZW>EBx(SY_e8s2!i#@I06ufMaraMCPGMx!_k+(r8 +%iE@IWi?V^LyNH9HaEA!HCtD)W|n3CrE-(ru}-a>3ZR +t`)d$eI_4c~J_cV#46BtE2GPHno=S(GSviyI95Se$4K*Q=(hLm4G7ofkR+V0^1-DT+Ly=4Qxs5*y~>= +?4(r`M~29XZK7~EY4xUceWha^QC#uX*e034#7amF-Q_G-5>yI!DwYEv9ZTzuB~QS2)R*NhUV?mJ^IAE +6{+wQs2oqj`>sH)8-&EW5d9hx8fBItdtduQFFT&ICTUSqn)Z-8o{r~)r^6U4b;~zeJ0~i0)?^+x`vVH +{gLM3O9)5Dr7S`0%C8;Pv`M7%r_0zqNpL;~^j_jZta%O0Fo9Y-rtR>pbNBk0SoEtzxB24LL3Vt-`u_d +k5l>my^{K7b*}*lA-g&)Avh*LpWQM?hIlNz30+%~GcXxPZwzu~OA$=2a%)o`&BKnN27uZDIqm%T$8}L +4&ZT1zw_ZL2EYh_mW7DQFX&?KjI@?s>1HsvISf$R`=G$23S1hsg<04L>wB#9Rqd0VZmrPfPamrC!_I) +UWbTz!lkhYd?*w=W7P}%rzfvM_*JyTs!g$^`&sx=l~3~#W>NxLtWZ +1WD%w8i3S`}0#O_a3rc_BWmU}FE@uLbw)lYxrL7)6S)9vOTu$;F8l^6984*ny9W2l1 +Hp(5-zWTIjwtaJ3RdRBRCFNQLiv1gdUf?c8x7oGq)tV9!QvwAZ&R6yzMAypIqSq~?a&4(zhMZlZVl=| +C7{BM5~PsvsH5J}-zo=W|P}unerq++Gd`-96FmKvAFUbnh08YCoz3OZ4t0|L4` +1p8xaICCr7vxK7|+j79?Lbeq)@GRP7||z%ppO)at$oJMeIpK|JvWdjllq;y=1iAPKtC25#IWGH5TU!C?>5dWWZ8=o^_!!52ZWFGT1f@MmBt? +E2Ve-G!fLI=6)hG>pbjiBVFF-iN4lvl+FAEQc-6Yc>TyJjPTn-*kq!u* +Nurjro_tRku0v|j4F)PV*xApEAID?xZW`YLPZuc^;|vLCLzRce?vEkr3frv6*Oi=8cUjsd?77{BsSoX +sEcjXFb7}WTK7k@gZ&l=`x_1{B2~L5irN)lo(rcJ=nh*6GMnjz@u5t@&;Wp@#=R{=I6x_Zvm`Q1@zHO +z=SZ+Flyp~hhE-or>Yrl=g_-C#LQq#n;qMwPB4R#&ji3OR3p<;i7R-KcqWy3k1*fyQn(3TBJX*d;)S| +WK;MmDsH=F$~{TA>|rmbG2WBf#`B;JkFEwLJ1=CP9oLSfp+L3#jtt5wRG1}wL4U->#EYV)#nCX`=l5wp%UfW+2)|hbhs)cMkwc{h%Evfx_YOI&xj{ru +^wSphg^Kkv+Hp-jcNaGxgF-vSM)OZh7PeD&h{V>Vg-|1ApSW2XX4a=*R##-A|9op}b;fHcT`i%kA@En +)Q-(R88K*w}lr>XrK=U5<#q(Z{W=n>*ZL9b4y-)ckAogb({1Rl=bp0Nw-9b0NDl~Kj9$Q9zIX`Y*}5) +biJ^@7ti{iaAjBL_n)&sZIr`hSDG +%j#kN1bkWhw8pD3dn3LuIUBqew}>;r#kCJS#D1UGwZC<&R(0HE|Y0~3-(rc*^W1cZXHOIWZ2D7f5IVoD$=OEbkl`KbP>hJTDl6e1jHN$OG5K4%4r8hzxQR?aqFp4_uY!-rL4*nAUdE9>c|TH+0jNnkCi3f#~WPyHs +|PdS1EMZobwTLMh&9@)6&h`EE1&+`ugg+$)Psx`! +6J06C4eCkgbNSa&&{e-Fv=yJ3YUAsWu&o1_0Y%o_Kq0wqHEXQPaZbbo71Wxxwy>ErAM9!S~RLKsvBZF +&wnEH>nD{UK-o%nnrPQpna~pbM8RX+~IyXi&bq6b1l7cs=ut!TISYQG`gV^ulR8wsa)snvVh!Mo7AY% +9Z3mDe(V?jtd@vN%Z(LIE|w1i^tg|{Dvt(Z(G@}9^(F@mw_iW9-?P9Uri&s!=xPlq`=7ACME%s==Rh# +`lkt{54>eyu*$xlf_kIA0IQ&UFKA)}TkWY@s^H~X{yf40d9vFB7b*f-<6Vv=NB#ET1Jv#*&ffB_xswB +!odJoJ(95d7SX4quXlE?Garbta*TR)~^=it&LE*o8J`1wcA_t_Q2E;SE0v<9q_JwaJxj*f5@oE%7289 +PQ%5Icj>$)c{rF**oSLK9%{Hx4nWyiomH%c!Jc4cm4Z*nhna%^mAVlyvwbZKlab8~E8E^v9xJZp2? +$dTXqD<)Lcnao0vC3&43?{rsOie9rKOFB`$Ehm)&hrp1W2m}}a6vb>dzx}#<9+&|^*;|(nr&3vX^z`) +f^t%UM6#1G((PCR|3lT+3t~Ys6F+MNzbX$o?-FG_r`D)E$bDfvws@&Vl9WOGOEz8aV5zl4D%UDW-b|q +d?x!4D6o9Rmhx8mh0m2(5OPQDLVx#H*a@5T4;I|?ie#Y-$UmCUo!!1g)}ekNHdVpzd_%Bw|QtbbBu1o +ZO0$Y1u;cqP{2b5?FQI8G$$-Sl?yNtPwRdPAnun{iR(MbPP+sW&`+;!9yCF6E1UwJlQf@P~)tXnZrCP +NT{Ff4`50*Vhk!j2^}TgWGp-(dhu@QJz)erD9j?HqQh;c`SHV5(53~<8T@QX>j|2r={pjrqTVEyZiAi +0J{&Tt!ang$$*PrLsmPYqiscK +&St4P56{~W%-sHfQc`9gc*kYT-$ac0V@?;wWpJ1>o^#~;Q2x}YSgU$@qo?y1KN#lw@ZIV3Y1m5T+du0;o`4bo|=Woj1gX*!9wI(gd +H0C2un3X)>~NQT;R}ZzY(mginIB?5@krB4+3-n1njZc3MLoCB|DT?@hV_EOBAD74sVN{EJf&1T8MI+; +%^?L2QN4Iy;=8r +izlgXh&*ormPB#Symjncz$t)2s;i_7v-tg5v6HnnA`$51Pxr8v)18=~mNb8P3iF(5;?I +b9bQnvKi2_`U1b+?gMB=(&f=wY7qR?w)*B{4c;}QJZ4_ +rj_h~+>B!wcl^TvV0Dge=Zt;f>(go(;#-(;r8l$QO-P9DXm}DkSFZ=!ek}WH<=$F}2IE4<2@dnUGo3a +}o1xiSa;@z_P?Ck7JPne;}5^A;2E+yz6zIDP)N(ImQpSpKop$--4gaU>itU0`}?pd-iEKDg$;sohpAy +o|K4^I+!!kM2j$#f@|X?xTTOLxxITF4@mOP!^_5wV59)6g_tdY-6`_zaz!x??h$P#>}s*#v7kw_yaIC +uQ4c`R_iUu~tG5@`Z~8i>uJJ;h6!_PO5(P(o2ar}Vht~=<4f5~O00@g +oSJK3e}{|-0^Jnsh0=cA89_`P`RzG;U)290=H!H>*|j}HOeClAwM%UJ!?ee@fSyYD>_2Twp2ynB!ceg +Ef9{}s#aMABd>Kjn#lzy}_-`+GtWr{JTVfxUc=7N!3chkaqGqqsGanXICySBi8IU_@Nyah^tKM?kopI +E|5prHjzOfEYBvJ>V1exwJNyJ@a&n_7>O8QSMWR^utLY!HJ)uRbEyZUkjTG9KgZEka$IFU>E=aLqm$f +Ztrf#El7D3ivl8FotPW|*9Of3cMrrLAEO1g{4rnhp;N{9>TV|CIBjaA*iUl +o2BrO}(DpOz4mT#*trCN@Qm5HETMtmqCQ0^bVPKq)(8I9U4$2s7Xr_}yplNG0nY;@TEzD(9EV3P3)#k +W27`kbh&U#W!G1HiZNqobJgnnA^VbVVRXi}n`OblJWwSd6Fb>;i?-FpVNgkJ>%+Ex2b{<~54`0rB@{BP|a=I_ro*?&Fv{6*2NoLCA*?pl*>s1 +!df4e`ry4=(hHZcdmaJ>4va=~W=1&$s)jRgc>pVy8H6@6(IvY9`}yrJ-B4Kwk0$LLPS{TZtPt=-WHAV +IuMfNftAc64W`B9{Z)}$ruRYM->&N7vpZR6aO+7)qim(jERjU8AFAg)4XWADS}p +52c!EP}`bT-@DbpK=fmn1+XhIU{kd0p;UPb5HMLq^>39q_8p94$Z7^WWRv_nW>s`4(W{Uc`3C}$za&P +Uen^gx7xE^eK)(a8q|sT2?Nd%MQmOF0&}E@W)$wE^3$WV|xkfb}#?-Evjag5i!au@&jFwE)+XDE~;x4 +H*KMy=|&Xvezn_CNDR@kYq5kF|VmS&J^gx7!GdKRFcmILV#2x1?j>`D8kNFZP=EZ!L!1>G6+Bc%`?-q +FpyPHb;jp&aQ2d1p_;Te&Dmc2U6pz4*~}7#$#4ap5GR`*p;=aMAg&M+6KFQW5M~DQQPiv03B3ffo)n$ +yUadrJf|7Z&l6oIh+z7#iyCLpI_;qgz7PTPYOn$7WeS)_Pt3tArG&>kDiz2`k_=Rt$Yz^!Um;*~ewS| +==rH4cu!P6zGy6n3eW4}o_7PZ|fyM=6Mh2vh2>P0G_#GxAfdS)KhZvP+f(h~K5<7W(FT8T(UglJzWX{ +R9$k4|?S1!M$R?F8XPmNYRb-=@1{R;G?5yf(=!by8w#IPErUDHR +avjV9c??LmkTw<485VVnT|uj~ljRCEUKPF!eq*nad@!g}Ei%Cyxd~xovLr7;6UuKZnL3@I$c~6@Clnu +tNA|nlgttY9f4O4+ppkBso}j;23Tw{S%W!zZdgXRrR1;;GXESZ(S;`?WNM# +15b)G+qz8^n2(phT@^&mwF7B#VDAZC&%AP%xNoe=IMh@~k5X$Ocu&7O*~(*&If@cWnu5_K!NTw&y5r= +jxnJg-(37qLZcJcIUT72}(n_i1RJ^55u?JUt60%s9URSk$!*qyG;Y!)=8b_5DudJjDTQM%^7R_&AqwYD!(vx+>d-$H<( +D215a-5SiOMOr5s%2GOrM(DGPEvfTi!C?nMfsQIL-_b15sId7xXqFU>^EvU`b+k{QGcm6k{ipM{ZV>D +UK88H*?Umn@tC!#bwYL6DbfS%gQ^0k`_C2uBEhU*E5m3}9%-a+LjANyaHPoVlSw?{7et_A9xRg0~o;fgQClfqplYvf>RAEOc1s%e+6bhZfM0=RU#eQRtC@HKJrM!|HxGbMApwDA +T+DJ++@kk3*7W53xSbc~^n-pDy1kb=LmE)9pa=d#Idn`!i8&Lokjzzqh3g+{WY$Y6iBN4vO +uaCC}_`S7eVA)MYb-rDe;YQJf&3A&Yp@D*)W4PKZ7h3Xt8R|7gSk7htam9MDPrnP; +yS{3WnjD}Ru0cY88z0$?k8p3gLEZD|xAzu|T(yh_`-kVVlzd^Xpxe!n-v#SA2@kH*%Ule-HJSckO`%6 +zT?zT>A)gCxGAd$$@xU-E-(}tw2Ovywx=m337H*|S8wpWl0QW2!2o0SO;!JbfZRHEYsY@yBgU)97z-SE4)ej$N$6UqtOxmJ5*@CqB1x +k#p{pZsts(&3iBeS%8>F^8a!M!aneH|@k6OE>?bR5C!l}8`aGLzXsiH&{&QqW~!jdC+yrd1-^wHJhDl +Ne;Mes+pY=cgt;O19)^brwtvdCLi;1a1zDK&kR1K5IevrL2sfzZf<9m&8@;L`zhMkqgY%SVlJflq>$Q +D=CD6$QLLxlVHnQ}(y!+|;8R;e=C?(5tHP57GRdlBFEb;h4d!wn;P7aC4dNgfJV_G +1LJ56o45A%vd&i$hD6o+VGfhf{Gw7Nj<0jUCAwDin&i)_cUFH$p}Q1XRUlwT65 +3i8eho5qN+IZt^~-}a`~>bRh_NZyn8U0weM1qOu!yHAO>O)baSB2+JVcn~;2SZ@bFgi7%hw$DfTRq&; +}|rSkRzsvP2z1GhIk576=Dr4nJv9!k+S|o)CpX@%p+A+$Amkz^ty1a|JFTEdsYdPFvmi=x1Lye$I=~| +j_kQT?%-k%JlwUH)%LtMxl`Zmu)8T;^ik}Z9SgtHD)f>>s$6x{*mPp@VW>bv+loD%)9AbM0jotJL@*% +6)|3d+bgXv*!~`OhpJbNgyOQ-x*;GX^SnfZJz78ku*(%l$;%dX+4otkZokXBGu0M#KV(`we)&%_^(0|cob>kJ +xyy3bg??h(@hqc4uL1VE(M2>J^$-6ok}PL1gki~3=937NYvR|s_%(~0Q>a}CKC+dXcACUI^FTT?z$aL +<2eu`;1d#OE!&N-iL!uoQ +2oCxi&xm|oRrG`-iV0E$QJh_x^qRk7MP!yNU&7}mV9>W_HL_gXk@lki#~UpaBv9cJv~+7x&jn7(b+PvDm3^#9jtNdqKC{t< +}fU!c^XKZO?OYnD3rumT{;D_@SD5VBb*JK=0xW|?fB+D@#yBO$2O0AtE+_5$dpk8zrBQkAE-vuNS5*Q +=F}G_%AD)UWgTlC9u{uXl3G)IoBmZIj?UY6Q-6a-=l-63v4+Lwz1L(WOIy~W&alx>b<)Y0%;$G#7~t= +FV?0BhHJ2uoD81LBR3-I4qMM#vmyLwBD(p-H_R-9V9rzaxk%92qnFH@z+oR?@c>SAO(}9#P;r*8j-H) +>8VCwX~dGHRL%JnT9o`PPBR3GldFnu^3O(s+@1j(PLPAu(MerwYbLB|KX^u2r6+q8L}r#<}vcu0r#>b +*j)ANgp!32M&X9gl}1Cm?dRU*fmj82udNg1Ukk8Wz%y<`C;yY!E6GT?(QX&L^e#?J^#H0JpU8qlOc9l +jlzaabM)|=_B=+-v#5_(ZiSf$MLlX4U~25n=Yb5v@IVOC`Q&5fBit0uN7NfQ7f;a^O{OK-({dQwj`Qb +%G_MD$pQ79_HO;I +D@I^Hjdd{nZ!(1-5HntyxKefd^Qv7mko(V>q$H~8Hl-q3aH{k7e{ufY70|XQR000O8`*~JV`M_-R4F~ +`L6B_^kC;$KeaA|NaUv_0~WN&gWb#iQMX<{=kb#!TLFLQHjbaG*Cb8v5RbS`jt%~@@4A{Qg+;;|GhIqN+vBS8}!4q{*blBnTPZKqLsT!8^@#`N +&n62;J!<9w)A4d#6;T@#gN`+s8=x +7XYu;2#EcG@}=7w&2d@!|f4=}H(<#b&KJ>C5jds#xqmIK84LE3szzo|kgPoyZ|La?rzxXP2+F$z5r4s +qmjkbTsu&iXDZY2QDpIejsE}W0bQpdM{V-J3?dyS8p6!3bf9uMFbJZ6p0xcQ)mUoG~yq%G~Q?u?7rpB +8zaIF7g{=agAtT3rGC?bd20kyCFUZhteMh|ZMo&nnb-_7Hg3Sikx2p*#C>-E=XdFI{1`OTfQ=>{YLe$ +m?R;TsL68H9^3e!Lwosx@wT +&BHLlp~oTwAPeLkW}h0;BkuRE6Fl?;IJjKZ>0;$IF|$$uyAdAhVhTzT ++@2G06aYrJ+9(1|sGlhUec=5%j~M8(qSRJQBK);1h0-s82dig+Fk*$MTZN0@X#V!%-48Ritk-K{D4GZ +Ga`Fk9fdGKD;YzTJeFuA8@{OHeM7U5F=^^{ooL!{##MhEP@v;_I#%MDcV?zH^7#&!!3R5G-R-&L|lqE +J=x_Uf)rRZlOLjiC)$nABSF||B8VMBiZaw?E0ksff5mxxB2iI)m{+?lKJ6AtHS`$^-Q=1`Q_!V>lYZu +DBO9m#s0tjG5j20+jxm=Wd({!7^{+#Ff0fD(!o=c0XrV-&P_EN*)#4il7b%D83tYes*wf?GEkUykWHs ++r^CR7k!H&}8F=Chd~YvY;1v8QuquZr9vn&7({O@lQ~HCB7g3HtjHYz;EVkpBnvtWbq`~pmiyLnt!2M +9*lIti`q%m2IQpN4r(gauk*&d($sLx8WSW(fnze$K +{RW*M?2}s6JzmZ_6gErepRsqbp|9s54`r_@M-@!_Y&DC}O;=;ncLJ47LOmIk2|Guqg>Jb;AQx=M+n+a +21@RR^7Y!fzaVJu};7{H-abrh9ry0!=1zAhjDymJ1u2?|AcwW$9`Zr8{z^j=A02QmI2_~ZVN&6drSZ6 +c+S2ZV0?dGJYpuPv!AZ6KYY4fhWudg0*-0=H>=AAMWV$Hi@XuXIdt5$9LSqF~TL2}lX7Do>)fUYDW!^xTjAbFYkj4Pwd=TTbt2U45PDW9mdv=j2Yn?ir$EkHu*qxFTXtmV{Z1^YSJa +5yy+>N)%A?b5A67$2v)W=n%(9>6X-PaYM_Y8z>nsCnsVjuu-L>m(KJS;_>m8N<9wZqSGuy2GvDr>?DC +Wzj}DMd&sZuuBn<2zOU$ME?(#hd>H@~v-UxjkiPKZE3)9Z(lCzKs(^)_n~hD!&G6!Z-ca9scgK(i`j< +Nhm?fKc9N)DsXHcut?3N{Od$zhRS9B?q)b^!QP!1l^z<2c3jhEUCjbB=0001RX>c!Jc4cm +4Z*nhna%^mAVlyvwbZKlabZKp6Z*_DoaCy~QTXWmE6@K@xz}VxlG{eyDrs=lqy0dALO*50-WG2q`QG! +TFLPHTO0a{TX`rCWX!G(ZG#ZKDJw0cM+5;!=Q?_A+^r*>?ySofyy#A3nZu2r33e5F<08?msz&(7R)BX +{EL?1J5G1*^oG_qAbKm7j!trFxUGUW;qplEHtFa#?e&y?8Tw|)XY|^=)2!qTTag_>6%_ ++Hc`)i)b?~cIsxIuVJO^Txc(SU&B1OU4gW0OazJrg~)@@)3j&6Xb+wbz5jCF!nx8LVCbH5(J0gK>FY-Cbqu3Lh5N*WxqZwV=>a?XIupma%soYeo0O?O?P0R ++d|)?nT$hN@y}=EHVB@ndgra`dc{5ysB=!qJDETpP#Ud)QAy6ofZZVyJ5VpEt|aKJ7Gkp5xvXhFRBsC +<>UBn)Z({^qvHw``yl*B#wsErLPWwziOeuvj2GRUnwjCW#)85tvALIw +l5M{Gi_^cG?muo+^JlZUquSw)oxi!v8|2n=X8_o^_5RyZZ2!ZNn56*t5ZE=z3TB#Nye*p7deyMD*`PW +7MxwYD0Z$p*9vJ1RZLGxuEjpy9|szzKw$R&gPRZ5^r}zU#g$1&G1k?W9F_f@~|U_s`fG$GUg6)dvmd_ +#GK*JGBA_INWo1)^k=w}>Ss@%{b{+#136T=l?o9FPA(xlH`0i}1*&jRpjVtu%<1j)pg|FG-)_y7Fnb{yJPzLVM&1twAa7F +;Te;1)YX@-`B7$34Tc0v;>Zg&R6K{T$bpxr?%Kux|O{_@9Ic-7+;gI=7Q4Br~iSoeKyfmt_DT1%pG#@A}?~vhW+L4?tQRY6it4DjV_R9>^-UDO0$>0e89!3M)$201Zdz8svU6%krh=PVp +t%j8f!qSI`$5JbU_e`sj)O9iBH)ihiuBauLc`$9R4I +ROhdo1@#tm2Y&)WW)uFyB_3f3bO#RP!5m}>N=L=sM+`8Yum#m6 +bD_0z-_GYpBuHx~_v2gGjQ<_)w0?MUC%uNP^#ABoZFpxQ_J>ShHG~#$8j6H=E`5HfL;Zf)IUV5_tIEr +6e$Fo0ENmkjK@zg$^2MToguGZ}$$~_oQ?E!BXLQG5)OtTfNoGE@DFq{gUYCz)A8oFpbR3nAOhCS9(wV4aTDSn0Mr +Lo9#>}(`PK9VJ-g5h4XU-2;wPzsD_l2QR@O}`VJES&~wU;?2Tc&9@5A8csDL@q5?B0G+jFcBGVmG7HOLmVOV8nY;1N1)+5HVNQiHj(W? +DY)4c5xJa>iVhLg^UG9lxXbQtN-&7AYkkEA^vqL_6E5m&P>Vm#cIX*Y`n ++X{~|VK^VB;gF>JxWRF4_;Tru&_6H_PTG%XzYw1KlHN%Y-*a;Ti9U-SboECjtF(CuScy +kLoXfZgly=QN(-a+cu;X#O>y#Zkh+UXLO-=0D%N4%=^+Mnd?Su4xENKX0t_4#2aeAHNA5XPQP4#iiN? +jjA@tIqdz^OT0Gr%O@Nygai$;hFaj=FuemkP(L7+*G8d3}0X>E0)P&%PF^f@kkh#880ZlY=%Kx%IXnzX~gBxa-yX6O-O@ +&Y^NkT8y$wB;!IPa($+Yo-AcyKrKi1bRoH!&65u=)q%}$bqL(<+_tLI7E43ln}d{lCC-7(CtMvY3>U28|B$9FuuMF~0y-dP{g>1k>%fOIzA4lgRvil)Mmvzw`hDQYr +0r4er9|BmD6A~DDFCgceIzKUo0P*(9(E%g?!YoWr1xL7Rz`IsoV^xihunx^Vgp7Cq!)zgOhPx{K&1$$ +7}WcEoQ?v-~CF0^Cf0?d$|z;d=UI~nNHK%Jt&=l)~~c17c5Q?59@%}#(Hq@FDMBK7%k7yYK8D~%}#j< +prREKlfsO%f!G#c?h9bA;&aj(?urWJA!gI&>LpvT&Ja5y^QpN~lM%)+_WYOf(rS9g~k`Fy={rDcF-z{ +smA=0|XQR000O8`*~JV=c|?Zr4j%D-!=dM9{>OVaA|NaUv_0~WN&gWb#iQMX<{=kb#!TLFLiQkE^v9R +J9}T-NRt2iQ}l>sEe%E{ye^{~hLGSS>=DQsnB5(4glx63HnODAgWx>wvtLzpx74y^Nbb(R87#Nz)z#J +2_2^8~c+OmRTI5B_U6%#(Bu;bYjk7o`a_)-XosJw&d1s0klQ<0dBoE>!Qz(%)=YC!!A@2wn+vX1wp45 +O&_3}K;*a5pXvdN6kxzS^WSL8GNp2b;?--toqo*4hL;O +PP%rm1%~=TUBqI-NE456Gbkj2=Z#Pfc#0C}U +$*&^X-Um|qg4~DM>XP5490Ai&a0h1u)W@@Zodz;gv&DUF-zl^?Ye>1F(kiP}=gL&ux^yj0^KSuH!ur@ +YFKRaLh7GPctPa0?)1|NZIwjkSpZ8_GVA>jb5-#4#6+}!jJ*Wi`*=K2GTXplFDFt`MD=&YGGj{L>wi7 +{?pot?ZoKOV5J_~ZEe^62!m*MVg?dH?&a`~K(>B}U9^Qo^&|&bJ%e`m*z_`fYUH4*n@Y4IBoIf!^@tF +1$Rw*x6QZfzFp1fA}W;e*F?8_q*RL!=9oM<|YgtNLoFH?+%m{R>#eXF>Zk`20$4OE8&bV+u4Qz#phec +z4y|<6MGK!49#?nJ@VN%+3eXqGaQ3i49O7+O1q9SS(#&f+5fg~;wvkYx?4rjaDdESJ4MH-(cEj&yk4S +)R7Qg4?o(1)hfDN#+vxxNOsAvK-&sjtCwjPw*-k67?G?ijXoT|@boObJ+njH4NhXahSVzAdT6`lTmJN;GU_H}YV2hNkLv*F-kF#LURT>6Tmm#>Zouiv~q`P ++Y;zB@aA|M%g=<<;;1_~*a=@WvCLPw!^IzdwfaC{F%Nv%I+f^sxB6^=x}*cW?hcp8sOIKizEpw}I|wU +-KFU+hE35!~S<1MCSDaTW7)_fa72fa3nEp&yOqw24DEc`PsldIo8OmZ|{9wx6qp*!6o4VY4ml;{58Ld0$%NuNeHaeF_!#9JrQ|W`*m+rp +q=Fz=_cL(RL-1joB@j;5ct0s)FG>w&@`wdW`iboJCT}iZ;!=qP&)4|1s`-23ox1G)Hks_mX+rTtiHGe +ZAO}KB*FD~8p=fg{>ec)uSXJ6?*R3V(bq;}jdbT(RGUgB)l*G=pjrM&W&CM}+u8nw@%F9KKdu_47vWKMycu0U=J#UZ0mR4Z*&$WkO%!fOd>;9 +hl+U3a?HGVP0V5*9XAAUk!%;Dj{DFkKVk)U`!2YbP(+jFgl${=w%RrrlDB{+@=A)foK^nTb3gFDwX&XgSj&nmD%!M({3hytUcO7y@S +qMO7s1MLwHR7z@nGAe)E+)B=Zz)EMz5UdA_r2t>((93orhO(t>bqgW714`07x7^&LjeCWY-voOvxNLa +w8EincL0OJw=&uv{Jd1XH3zDvRQre% +M*=rFn)4h6#3}K`XZC()+ma@rO=JEm76uww>593M8yv}(3DNaAKP^RnJ)Wp69Yo(l9o0b +wA$Lo?xL5y{XC4B=Am{RS%3a4p=Ppu6scZ=-h^Q$$z{>EIQcdkb2+F=zb2o8;j__(%^uBzZyt3! +9KKq+bgC6Z?XE;`;H?7h1pOC2)LfY06o>*0M7DBd;&u37d2dRFH +hl;Q_zseq@O}63`$a9_GV+w!hJtMVEL?l(mzYKw!pI=!sW%QeRxgPl4q%*s +ycoDy^i#wV0!nbMQgR7sv!Rd_jvtAVU?@b?5p(Y4V0XTTA%r=Zk`jqz4z2i-&+H%i>$PN4l@HWV;93oJC5b60?dk{plc$Sbedm2Q(>DM+HzWSAI)s1`-V+ +K<2TKJ=+fHgyocpM94`Jzsuk{SLs-YC(1!J(bH8mft>HVq_evO?eK=;POpL>qy5Un>$D>=|=lq~t9(o +6Dm~>~lAW;LHwucQS(`)Wjeb2uE-dcp(Pk@r`24Th&0l|(9;f23oNsWwO5vW@PD6AqaRo2i^2_ZC8Ask>I$A;7nyGuEL$g3GkQ(gm#stdy(f{gO +fW!c7yoJ&hxW0&A{VJaEtC>(BTZSEBJE8U^IE2b-HWicL^6HrU`5rRByyL8vP4A%f6Hth9`$x~psBrr +v52DqkDAZ-aH4_EQW5`5KRv9n?vRVh^H&BwkcJeniE>^lfJ6LSmVkpvSktEXueaiq>5q<2XrK)+fxA) +hJj1*{g7p2m0JxG{J!#9jCvT=!;8 +F+EhYX*W1oW*^6a=o`U+#?b7NjtLEsMq~)ZPxme1@iA=)9K*{yv+|4+JESZTTa-M7Kf{XSjgpGL|hnX +Gld}_z(U4NF(L)DsG%S3;9bI;zkcgdWRj2C{qiM)xFBF_$F*#wVQs+f?Qpg3Yy=H`_Dh2UWD>{F=1GZ +s0<0|)GSgor0mkO#scAvzV;F`@wi7;vNO$tg)Bw948gOE7aKjglw1j +3ItowF(s&_NpXT}0dvA?pFRU236K|VxQE|Tt|U%Kn9$Rr{WTDV*D6UQoZ#Oo6Ob{>v*u)4nS`jaiP#B +3wKB$(<^aNqd?`+~SW>tlNsU7HXp_LyVcAx|Bhn@YsFF626i?S%BW?dniLn@(=IAmF<2xh=y8?Rf4G- +d^MJ0N^&oH{7dPXJTnu^zPI{=8s@)R;|9O=rmTTKF1QcMBnU{lE&mfdQKD;K?#Rh4`CvSlT}N+(g)gI +!GHOj!k@Y*NyeX<)5L8o;3d(~c%wVL)6l4k9mIxcMUCOJ0=H$Xf7$c^{5i^+KCWb|cnyRijQ54u&AP- +v_d_PL54Sx1?QzpDL6(9sCduP^#KGb_VBXD;-Ho1PYBe_#u11kP%Nc5lLi;7n#qRgz)nj>;hs{CKBmu +!gc_8)M*6=-V&o`*X!GR(y|pj^b9!KE@Yjve7fFoMy=31%=nMcdA5R11u4$K_Ap#R^%`BCb_GfcC+#_ +;laZ>V0}I7+LjZtcTVz{3KaF^!JTEWnG@lNrR1JgF)(^u|22WC{t7xLZ +g%dESCk7&Y}|>ApZzamD`ENn>fP+Vqhpdq-ZhFt0H>d$8DV6i=1CZiLZYW}YtUlcsA?Ns!p?J!l?-P; +s9O*;Z!;T})#q^op*bEwxENUEmfo?jpISx|-M6Oyeq2Q34f5v6oh+V(7WMD1o}6Wmvri(R$mc(qZc~r +DBn$ttnGkOpo0BBtN)J3yweh9XAEO84Xy=iXbv4$7e_XKe{N4GhE89R5`I$v<1gfURIDhQF0f +_Tqbv~WOT5?0SSs#!&e|F4(&LyXsk7nEwz&#DNRa2%Fa<$n3U=k08+74oge;RDh;XvV1aGIGI=8mpE= +a0c5dyfG`!XBhT7~U=zWt~+9HUrZ=TZm{bjo93$dLcQ^Bh12b6 +y>ZbK?@Bs7Y`j>jxK|{c=UeSO1*2SupCvFexjX^0_ZJWW0M+|ai;k@UL~W&>an97Lez1Qi{CBX%6j10vfh>Nv}*0KHTGH-Z8Gm8wIa* +IlPz5vf-nH$^OpJuU3wFjY()Waszry8pkTW-z^fhtP$G}{B9>(&S$3pnyjLe7F3*q89X2HM5hbxt*sT +OX#wqtcu9DQ&&xN{Kw#9qszn<D{82l1Ky-P->EP)h>@6aWAK2mt$eR#T!zzj43^000~n001BW003} +la4%nWWo~3|axZmqY;0*_GcR>?X>2cdVQF+OaCy~OTW=f36@KThm{Jd-T#8m}1OZ&LfeSdOkyJ8l1%3 +z&Vz_&joN{(&Gc&6df&Tb>XD-VnMLF(UOW5LN&iUrtFRSX-STD%h#!OWF;z(2Bhi`i~sjR6*)is4TMm +v#CT4}wKdNT2L|9T?u3Upr8lu2sS7;hR?Oz5$o){FPy_jlGB`wUC?EZvB8vRX;4S1Yj;zfNz>XSu(}A +LV~E_LC`g6yc_GG41i|sxo$ENtQ=H^j3MAewj=rg_h2VXJKaVf}qMYS5d$gVBA9faHEl7Q*Ad?~U;LmYgt^c>CeK6MNH%LN=mvBp^`$P|aq9@mlyT&SX>UfmNH5EY7_2RCPL +nXtg6jt%A!Ua@Co1&aB#a@h<|jRt!o;+7xX}ECP;(3vc08nu$ +rbMhmiOen1RLkrD-nxz;z^H)OrriV6YQYu@Pk9JA_&^|JWW2@ySH5M_g7Q8g+Ih;7qpc>}nB$;MVkWu +|=?yfu-0Q1L`&To~Su+v9OWt2XWW1kfq|VlUn@Js7G@1!EvD8A|s$WsG1EhAtc96VVVa>2QFv?OVo0Q +h=ZY=W+5P0C6#8&Xm2(It?fJn-&Sq5*G*Ti5wE4F6zo}&E39h0u`b3)YZR1)*`ky}1)o>y5qNxCFeGk +H(z33trHYQN0o6XMrZhb$d`J)AG$w=2APfZ8B%K!@_I?Y%(vV{(w$?nTlB2J;vTex%j)hnL3c=R-AjP +El;Y}sc``8UyOsYagajompY-cVHOlX*S5hxHzZL(E8y-F+YQC5_WWlq@4YLo +4kJD}?*SngbNZ9j?Ung&gSFWX{yYLAADKhcJQ}YUMZ;7L$ppxJoZ@rGxw{)l^3OeJN(I=Hk0l#V*9ZV +m*mAp2v8x210I-j8V1)2`vRWr+HD4DEyzWokWlkJkk +k5ahBe|L+j@{eqhThq|tECR_A&LlL7N*n2CQRya8`%5L`JTx@-ETQb?rnF1F!a9h>x?< +Z$1umI&}>3DzY=ejqTO?`dm~;gzRQ8Tpn)WvF2!FL-yb2Rt~yJ2$E;V}M(L?^7vho@(r(xzOq{(7HqYH0&k7zpA-!7|9 +Trp35%nQpV4Cloh=2>?_kG<061+?4VNDfKke`c|TQ3ByUu7nQ0)nbYT%wUzRyx-$G3U%&OF&Zzb99-BljEw@%=Hp1M4g0J2 +J+CxW@W0iy+*=`r%Uqx=N|QUGM)e5o+mnLlJor_2KkC%Uno5-2MFX``c&Y{tWHiFZXdBVcVGXzr}DGX +N04}g{6%`;M-(1#=DxNK)}8erU{nM@hFgn3?GKap}{s7FfbZ9;;3^&qb|)V(4Y3@IM(?yUD=BlOYxVR +n?rF;(J)Ax04GmED60_Fubq`7$UV%PJhByaTi^XuQV$z#|x{nn`msd*ie516C5C`|K +}D;_3S+%S<=(ImsD^|nQBfekxMFmx_LX_p%LEskM4q&u!0&hUm4cSR_kGdJ!V3du=|XJ}D&6vo9o!(b+io +-S>!t2{VU8OnSS9u8pbQ(-S1JyXpvLwUm$g*$&ETC9Wrv4&&MA%^E;}2p=Dp(Q4sid8SC67e +R>=8;6l6>?K)&$nMw>Od;EAPj5qdtP`E|m?4dhIjPM!i9HdYBI&vIXx#t+l4LY^Oj4(?~gK4|H2R$s> +&t%}#2aMWzVg7!T2xgs&HIDZsBr(wqBJ=NDU&1X8Da&?K_n@K~5H&|2;#Uwt@*r*4}&w!%*AA>+H1a~ +N|hv5WOmcf`i?Dru(GEJ`C^w=t!eGWmsrsb%u#0YKKMn8FJE72ZfSI1UoLQY?OOeA+ +eQ-qUr(_Yqo9OJjFVh@E)g5B9i=hqI6>sJxJv?RMXoH?)KcIsE$fN~d5r_^UM^2^Gy6d6^$5JyY{s}=6Y9Zx=cP$57l|P7hmw~YxyU$4maCL48JAQ +h@HLwgxnN}a)3f8tpS~w!BaR43c}(+I33NJTM7c3wrlP5zWK=S$7>G)#O6s;^V&$ +A^7!+9Z#oP{BtFv}$=cmmq8Fij-OX)1a>vw%+{Vfg%%&R8le)A{kq_~JFAe^mRG&PhL0yaU2Otn&|!zckHagoU6hV6#tJ$3$3ll +f>GD*h#v(E{BLv14Tr4I|%Z1L^@tDoPB%RAfrOA)$bF;08qG01FIW?I5N2>10B#*=C*Pu_#rI*^R$`q +?C(buKzF%zuu%NG8H6{2ki}65p^Xja!UL?^%AAo|u +NCMdT$XIv*PK?m=`V0ahL?##@=yE(e?7Ad~O0~b{0tj8PKr4%{qoX5xXux6NozUp*#V|;rpKUk3u!c3W-rMV`N +T+RDht|<}P1itff>kql%6Ni+u$?*7u+)9C!n(vk%$Ld2B*D&9dua)mJbz!EE(8hb4tQ*to(&%yK}<7{fpQt)e@t+_Qv!<{c64XQm?2Hp@bl8F_KAOXJq +dVhcayP)<# +%QDp@KC48u!m7YH&svamo$Xd!NDO$4ZCJ+Tss36JZBfwn3S?pCrD#NLgdmAE2Xh?`#mcxY4vyuf|&gu +eIs9VhCD +#5qpidu`59ZzKZpRqm0m+S&}Zz(JX|0+}{!1%OuoZRlep-UG^tUF|6ftnY%nzI-}5&~;ozMg)e2NGQ8 +1Raq2bDrRGQ-zRABWL8KP1S$lp@_tI8VMrpH>NH{Q9F_VV0-S76iow1LG%r9-_btXs9F{B;;25XLtOV +bC6Sk-Lb_U|>D8v_DWP*9Y0fmM*XIEHs@@WHTDhNTzM22Bsuyn3-Pc6JF?<0Y4GMBPXZK0i8oYU)#a< +P@W}rjaZwo)29+TTi`vY;P0ucD7F_NEIj!3e +B4-j@NLRqS+Ab7S7)s3O-#d*@Kpg7cuvz4ySFm44GF_o5r-ZaAcdmpH8R^1#gD!Q>a=k+FlkH)$KGJJ +k(R<;Z|%BMzpyRuS+tfBCROi`*+F*~N}VZ*Gia3I=Exvn-QWpMUOe|}*;kz$oVQu2xKZDMm;7o^pCI;tge$1r3%?Lz~r+-5lj(dov6fXLN(Ht5qu-%lE_Qx9)2e0 +ZYx1(jtk$}8(2UW +xB_9AYpeYpD5Pt_{KqG+Aah80_{+sHl9Wc3z*DM*snv0b6fU)19mSK|*0yvV*+@qkoWA529;P_wkS-;!mX&@AX!OTGw644b(J$UBvpA9BfIK)V3}8Y0Da7sm~hwl9C?l1^(80~H4yz-33t +VIeWq|%Ev#&z53LEyD&}CQF@GC27;6Pk&GYI7RQK($He;wWc6Cn3nO;%>8!Fcsk8<5ar@Dp8+qJQbHN +|_yIH)Q!~973HDNU}fGE-=^(l#&R9Y?E3n~6gQO$|6Hh( +>t>z=e4ew8`gbWyd|%K=0?wd&`CS{nWYZSWhy!r<_W!@~X$@>x-#M`s{yY1`KYOS<1L +RXfwB1|x&kY-Vsrgv=+4F)*gw_pls6I4SX9fNUi-Q8sYb;f*Sgll4#La7EVH>X+>r#q^j(3Av2*LUqcsCKoDYz^ICn|X>Q+If&>bld)$i6K +ZCH*DlFd8EdNcnIw$3nhcqm`Yj)cMXSCMAmg~n8Arwbt3F;^+pKp7MFwWEs3SWS6$=4q^d;L6KV1n%7auce-0N! +e`4gumjNS(;>ucFI?|{{|it{0|XQR000O8`*~JV$E^s91qJ{B6C(fsA^-pYaA|NaUv_0~WN&gWcV%K_ +Zewp`X>Mn8FKl6AWo&aUaCwcIO>?t05P56$CCXS}KJ1wu`hFZbllGDx-W!9lVk^er0o*w4w7vX%dbKeroxkI(FW2fN+Cs+?5^sS1|GC;5 +EiHc5W|EY$u`ZP?fQpUhbbhiyOEt2*TwdyUU3yV0piWLC-z`||qjiIq~am*2jA|Ks&Ld&>*9lU1zJvR +3`r82&T+@#6>kma{CcnB1xAr&{#qL6z)HrIOXZ<4cvF;z}iPntrmq%w!Q)a@Q<}!;4TWdOFQG +DfUl=PtZ)Q$Z2@;t9B0_rfla_e6!0EQ-SL3CM!*qFfJ4AnWWZM_;49jh6%4poPJ>wC2)MEZe1+mT!^R +Gz1Kxw_YCPa8Bj5-oz#-sC{SZj&gTA?G0KFd6E>jvklo^lq+Jl){S;FJN%y^c}K+v0GV>H*s4x}^FgK +-gWVQ_S?Kf~kll=EO2+H5or`$ptTaw`y^ngO=C)~zK#nVjN!$5<=eN4fUtI1(V&ycq}8B-m7s6HG6SO +&kHybD9F9xn6f5{p2DtvoEAPA}|1%u~yFjrg;^uooP^Ca2iBy69H-xGCToFp(Tz1OkrS2Aq0a-ulvl* +u(1Q_6!u_w$s&1)KsX7o->xCOuR~lE2e~ce2i&ebs9&a>2~lQ3+G_%&w`&Mf=+4lHR~`Yag&U&G%vib +u=`*|s|5D{8PG`h%NFjaVhV|KnBT1fT8k*+&=8XufPohI<_@n`Kvjf*R`X3wFq|&o&34_Ec$4C<-$&` +BAqDkoX4BzSQU7%)LSXyI53R_z)@GF6!TUmiRPhn|<5Giausv!EhHN86S*Mv7sVsMNUwvJ8U25WNlbU +jfagh!U$p*?qxxe5!o)dI>vibL8c? +#gQsFY;5Ijjp@POCARBEoJecvR(dhyM!{T&nYY<2FFMfB*{vZ+;^5U?9@f$b|z=xcu?g)wikg?^9B;V +a!N0WwxAd@KoAB9+5iCz5OxE4G|oyDUESvu7i+)YJ388rVd64Tcn^|jyF4E4&}b;|nL?xeX-d|gjy4l +Jtd>UmswQg{qV3pdIS0i`N70dN;UU~CTRYTfnJF|y1!zZM^zG=SU9{ac~kXjPT&wuqK +1sDffc9$IGG_6+km46c!U8SZGZ<1fFm{vZ9&|qYp72c;L`^9zyLU4aec +x0lXAz?sB8xR5m;2ScHHk}w8-9oVeUyenrGS#BI5rGf{56wrXLEr(HNp!~Q=#KF3|{ENUTtKi{G58(hkSuAIUE)RvaBbR2_g^Vmo=QWuSrNm( +A$TlKEYaJIszk=|dE%IFwp@38$qTr1!}osElTa1gO@_k+R}@4Cl`yK+h+=GxRA(MxobkYh1Gbsc*CQf +Mt9g1T>1{s*XUEzBpo2_5r78gHK@R7OeE*u-_C#-OzoYJD3IK@CNi0?<7wC +!2qM5dIdN=!4k6P+)K36ksW>ZNRSlQp$qwO0z2{d-HSc&#fdO%`PWRd~Ab!^u*0#voXef^OHu~d7kBPEXg=8fk)&tNdfGVtSoYm}9$x!l^K`6<{Mg^f +FZ|20z3cif_6hB*Yc!%L3D0FA2m0*iznS4y7@-|pNP?z<`6e)@b1>l4g*qa@6k<}#rLuTWYX!`=L01Q +roykN4AW^C@hUff^m-!g}gKD1tXy83)f+$;_G4I8tnkYG7}K;A?0B{!eL?86GRt4j$v`)EH&1LJEVw_ +GsPf&@8KQ1I$`9t`zEkhFWKQ)p?>wJCN33GHGW;g60up(Cv+EcUnd-CI&I7Pt;OrW}JlyED0e`sn9F8 +-u5a5d}SKC2xzTwD!9fCNY?xhhu*_tv495!QaQkyyLW!+$BtXraDm{zZ0}UV9Iu!Vr(TXar0%X{p-)* +h`*Js(&AlwYGq1}ko~13yOBH{^pa!*}7d}N)o);nruPND+eAMG1;yam^B7DUB9p{qt4!0F{=vYI5o==*JC#wW(*s&BSy%v5({j4qf96 +gGj2aXh(pD$a1M~AYeeM%BuLpvT?{~kR_0z;rJ3-Qkfpk2a`a88z|9QpOp-%8H34#~+Ma?vJ)6wiuF8 +bP^l7rueA3^ZjK8jO@>!?-L<(zcE7Do6W%B0J~w_~xb)tgsrZ;;>`xuq~9?-kh5$*cj}20Z>Z=1QY-O +00;p4c~(c!Jc4cm4Z*nhpWnyJ+V{c?>ZfA2ZbY*jNb1raswO31T+eQ$ ++>sKri1f&87o52y%s3Y-g|TVOZrPX`y!Vw>tRQ*Oma +EjH;mWu5nw@`~T+Anudr3H^Ap>e@^eTz(k +ms#Zo+iZe5WQQ+2}fx}!35%kU{ZoZrUiTEy&J~y*L2-Mv(xcpHtztfknbSrJzNFOGmG*;zmYatpYte4 +$Q_9|4$q``(y`ZMD8$;A%jt2u)oLxt3Sq`b!o37jMwm-B0aN?DB_G>qjiFB?(hgjF=WO!lH|g|Msz9-29`;Z#EI*i(Itp-{q_y(Ip| +HU%D5@A!V9qvT3qdb@*Jt?yN=90r`?P29YH52NH5fhe%V9xa=NQ1y!kGYXg5)`NEVThU+^8d!3IPbx` +-np_U*?9eha5Z2D#T5;m6;KD7bb{=O53{(fzGBvuuq6q7Q31mUAU(n|Dv6Wqi-NgQIsxwN_FVcaM+X4 +ZDNAU?Ju-+7B{2y*$4-K#Q=<<*MAczTbQK6c}DPO0&gFJL%*FX0 +PsIJjl&0usCpeB5jaaYku8?LS!rL3CjUe)oJ36wDj*j6pMZpoxVK$Bh`SV?LHrcn@TF^zC|a+##03{q +B?EYXF&!4eJWWjj^bq9(zLAqE8b7>3AnYa|W;LpUMm8xEm7tMo%Wj`IYRhXfLU5$>uS?169!J*eHTWT +Q?wfys}TxY~(MBdJX#d$Guy_BN9|vT@{X)^`@0$#k(9kKqf~;D^Nq55ZYSGdk^URHjoq|NOoeuF%=9u +J?u-z57Ay#)N~=*+5~Ttqsu`Tx_>lS}!)oeGx2EX;pps@0UOF5|h1aKgCcHK7=XXbk$rHhuqF$*WF4W +hpWTk4rT$RnE}5(+8p{_6G?p*7YS=j66aUWDd?W^TQvUssnwuhI)N{c_xp>p5#g +zbWD{VG8B4t(Giw(%(m;$el+MW0WPFiOjtf}K+-zs8eoac&^Wy;MZAr-;Hmh_=$~$dh +|^K;+9|nr$O{%EL0*Zu^&)Jl!gbCC~Iv)g0`4r-I=$3+KhiDiSX#p806)%Qk@UdQXUNL3E4@t=pRLbn +L`CYuV$m$9MwMg-atj8LnWk^>OgkGh>G}He}OdHj)&l$VQ6N4^x=5dOyW9GIONuX1#H;6Wd$tI6HvEP +u4C1Ds>;c9tD21iU#&!-7PN%TCLEa$5c5sh?5j+!=lV1%=DD$+U~eLnTg_fddzH5GQe +NT<{3*`6vKGc3!S{GT1JXS-DLc!Jc4cm4Z*nhpWnyJ+V{c?>ZfA2ZcwcpM +WpZC+WoBt^Wn?aJd8L#?GDJy{lHCz?!}ldi_!-v6r?ILt*lTVy +n&yp&}+&&Aw`a!TTQXSLW4FDCphy?WY6%@;Q|y_}XKapXfW=tl#Q+=z>G<`%k;i!`tA&Qe8rK_l__;< +zgcBJt$x=;Z0ei7<03G?g;V3b%CSW$b(=CKIzPmzE}zRef_?ie;X<5@?d8C0UsjjRp^_t}2%{wzjrhF +)k5@=V$JM%4AX0SK9SWy(;O9Y6<67dr`Zf%ydPXFP3FjkhODLj9W!%Q&qOy?Sg-nTunLe*i%z!XL2#& +H8y5<*BzUbGRdeDwsdp<_m;fItu3poxFxsXELXOE!r4hxtM&c3JHlJv*Bf^lWHvr^{ipZr%W9e4Ji#6{j$FL@lcQWg!pi)T+Jn9Q& +PXh5nwRa?YJ+Xt65B#e-MJH~akoAa(O@XZog$Y!5dG`ZgMPo$X>6Vg*Y>*2tykCmerp{@AsmEoH-ryE +xEI3x5FUhZ=)=+nc^FJWsC;O{H433whf%0B3YA8o(kN6Kg-WAPX%s4rLZ#6#gmDOE2t&1z3ZV{Rs5kQ +U3g!pQCUcAVA#se8B87cbGlqCrsZg-zncF-y`23-yPo?-xuE$-;ojXQ|2S)nE4 +s=bLJP!L*`@V5%ZXN!aQYu$^43W#{8Q34f6@}Tjo>dcg%C<_snO^3+8j?56mB#FPJ|ue`fx|eCZ$cD- +K>W-!Lc4Uzz?K`9tJSkUu{D?D&Io$(%A%=5Ng3nHh7&^l#UkxnTam^siUJ^snWT`6u&=dCk0G{>A*8` +4977=G*l8%pWFM0QOoo`mm`F?#OcW*>6T$?2V)Tj8Cq|zbePZ;9(I-Zq +7=2>&iP0xUpBQ~&^oh|YMxPjcB>G77k?14QN1~5JABjE^eI)uw^pWTz(MO_>L?4Mh5`7Z%Nzf-jp9Fm +p^hwYsL7xPD67)&XCqbVCeG>FZ&?iBk1br0xDD+Y2qtHj8k3t`XJ_>yl`Y7~K=%dg_p^rizg+2;>H2P +@t(deVmN28BMAB{d5eKh)L^wH>}(MO|?Mjwqn8hr?T2z>~B2z>~B2z>~B2z>~B2z>~B2z>~B2z>~B2z +?Ct81ymdW6;N-k3k=UJ_daZ`WW;v=wr~wppQWxgFeRjbn1VvPxu2wRR8xjHoxV<*N6YIN|tG++qb_>{ +{v7<0Rj{Q6aWAK2mt$eR#TliG(h+O003nH000jF0000000000005+c00000aA|NaUtei%X>?y-E^v8J +O928D0~7!N00;p4c~(;+8{@xi0ssK61ONaJ00000000000001_fh7R|0B~t=FJE76VQFq(UoLQYP)h* +<6ay3h000O8`*~JV&BwqszyJUM9svLV3;+NC0000000000q=CN!003}la4&FqE_8WtWn@rG0Rj{Q6aW +AK2mt$eR#TR>aG_BF002D#000>P0000000000005+csRRH3aA|NaUukZ1WpZv|Y%gD5X>MtBUtcb8c~ +DCM0u%!j000080Q-4XQ(rU*uN({j0Ny4502%-Q00000000000HlF21^@tXX>c!JX>N37a&BR4FJg6RY +-C?$Zgwtkc~DCM0u%!j000080Q-4XQw7u2l@$vB0O2G602TlM00000000000HlG15&!^jX>c!JX>N37 +a&BR4FJob2Xk{*Nc~DCM0u%!j000080Q-4XQ=-7pTFMUq0AVu#03HAU00000000000HlG=9RL7uX>c! +JX>N37a&BR4FJo_RW@%@2a$$67Z*DGdc~DCM0u%!j000080Q-4XQ{;JOYzzc!JX>N37a&BR4FJ*XRWpH$9Z*FrgaCuNm0Rj{Q6aWAK2mt$eR#PVcqo?Qq002}000 +0#L0000000000005+c89o32aA|NaUukZ1WpZv|Y%gtLX>KlXc~DCM0u%!j000080Q-4XQ#;j?=0FJm0 +52Q>02%-Q00000000000HlF5KL7x5X>c!JX>N37a&BR4FK~Hqa&Ky7V{|TXc~DCM0u%!j000080Q-4X +Q;uiz4&(>`0QndI03-ka00000000000HlGeNB{tEX>c!JX>N37a&BR4FLPyVW?yf0bYx+4Wn^DtXk}w +-E^v8JO928D0~7!N00;p4c~(=hw_o*?3;+PvF8}}@00000000000001_fznX`0B~t=FJEbHbY*gGVQe +pVXk}$=Ut)D>Y-D9}E^v8JO928D0~7!N00;p4c~(=-cj`1~0001l0000T00000000000001_fuddj0B +~t=FJEbHbY*gGVQepBY-ulFUukY>bYEXCaCuNm0Rj{Q6aWAK2mt$eR#VjdaF^N#0093O001KZ000000 +0000005+cMPC2_aA|NaUukZ1WpZv|Y%gPMX)j@QbZ=vCZE$R5bZKvHE^v8JO928D0~7!N00;p4c~(<) +AAbh82><|Y9smF#00000000000001_fna9<0B~t=FJEbHbY*gGVQepBY-ulIVRL0)V{dJ3VQyqDaCuN +m0Rj{Q6aWAK2mt$eR#VV?GE^v8JO928D0~7!N00;p4c~(;(W`@cs0RRB_0ssIc00000000000001_f&GsF0B~t=FJ +EbHbY*gGVQepBY-ulJZ*6U1Ze(9$Z*FvDcyumsc~DCM0u%!j000080Q-4XQ)*dce2@eH0H_H702u%P0 +0000000000HlFvkpKX2X>c!JX>N37a&BR4FJo+JFKuCIZZ2?nP)h*<6ay3h000O8`*~JVm>Usq2Lu2B +HVOa$AOHXW0000000000q=7G%003}la4%nJZggdGZeeUMV{Bc!JX>N37a&BR4FJo+JFLQ8dZf<3Ab1rasP)h*<6ay3h000O8`*~JV{dxd +PSO5S3bN~PVApigX0000000000q=DJX003}la4%nJZggdGZeeUMV{B6he1Pj1ONb-4gdfm00000000000001_fpE+K0B~t=FJEbHbY*gGVQepBZ*6U1Ze +(*WUtei%X>?y-E^v8JO928D0~7!N00;p4c~(<6gYW%*2mkOV00000 +00000q=Dht003}la4%nJZggdGZeeUMV{dJ3VQyq|FJowBV{0yOc~DCM0u%!j000080Q-4XQ|fU;s?`G +k0FDa)03-ka00000000000HlFW+yDS@X>c!JX>N37a&BR4FJo_QZDDR?b1!3WZE$R5bZKvHE^v8JO92 +8D0~7!N00;p4c~(=T(w7#`2><}_A^-p<00000000000001_fo9+U0B~t=FJEbHbY*gGVQepBZ*6U1Ze +(*WV{dL|X=inEVRUJ4ZZ2?nP)h*<6ay3h000O8`*~JVT3!3Cp$Gr~OV0000000000q=9c!JX>N37a&BR4FJo_QZDDR?b1!6XcW!KNVPr0Fc~DCM0u%!j000080Q-4 +XQ~$H#<-r300EY_z03ZMW00000000000HlE_`2YZLX>c!JX>N37a&BR4FJo_QZDDR?b1!CcWo3G0E^v +8JO928D0~7!N00;p4c~(=u$ot^q0ssJ~1^@sa00000000000001_fhhd|0B~t=FJEbHbY*gGVQepBZ* +6U1Ze(*WXkl|`E^v8JO928D0~7!N00;p4c~(=2!<0Pg0RRAO1ONaY00000000000001_fkyxV0B~t=F +JEbHbY*gGVQepBZ*6U1Ze(*WXk~10E^v8JO928D0~7!N00;p4c~(;`3unU81pok=5&!@n0000000000 +0001_fo%c-0B~t=FJEbHbY*gGVQepBZ*6U1Ze(*WX>Md?crI{xP)h*<6ay3h000O8`*~JV9AJnmU>g7 +c%WMDuApigX0000000000q=9@00RV7ma4%nJZggdGZeeUMV{dJ3VQyq|FKKRbbYX04E^v8JO928D0~7 +!N00;p4c~(>7Sb)bq3;+PDF8}}@00000000000001_fg2c!JX>N37a&BR4FJo_QZDDR?b1!pfZ+9+mc~DCM0u%!j000080Q-4XQ!gWy@Rc!JX>N37a&BR4FJo_QZDDR?b1!vnX>N0LVQg$JaCuNm0Rj{Q6aWAK2mt +$eR#OXid4LQD000;m0018V0000000000005+cK1TrnaA|NaUukZ1WpZv|Y%gPPZEaz0WOFZfXk}$=E^ +v8JO928D0~7!N00;p4c~(=?bqy{%0RRA60{{Rg00000000000001_frm~30B~t=FJEbHbY*gGVQepCX +>)XPX<~JBX>V?GFJE72ZfSI1UoLQYP)h*<6ay3h000O8`*~JVXbO;_`~d&}lmq|(BLDyZ0000000000 +q=5%e0RV7ma4%nJZggdGZeeUMWNCABa%p09bZKvHb1!0Hb7d}Yc~DCM0u%!j000080Q-4XQ;*`ja$Nx +c0RI9204M+e00000000000HlFLQUL&PX>c!JX>N37a&BR4FJx(RbaH88b#!TOZgVebZgX^DY;0v@E^v +8JO928D0~7!N00;p4c~(;vfl9b{1^@uw6#xJv00000000000001_f#*{J0B~t=FJEbHbY*gGVQepCX> +)XPX<~JBX>V?GFLPvRb963nc~DCM0u%!j000080Q-4XQvgu2Xxae)09ynA03-ka00000000000HlGSS +^)rXX>c!JX>N37a&BR4FJx(RbaH88b#!TOZgVepXk}$=E^v8JO928D0~7!N00;p4c~(Md?crRmbY;0v?bZ> +GlaCuNm0Rj{Q6aWAK2mt$eR#Ts`S07&@008)n001Qb0000000000005+cA9Dc!aA|NaUukZ1WpZv|Y% +ghUWMz0SaA9L>VP|DuW@&C@WpXZXc~DCM0u%!j000080Q-4XQ`;-Z>hA>r0G$~C03HAU00000000000 +HlGzl>q>7X>c!JX>N37a&BR4FKKRMWq2=hZ*_8GWpgfYc~DCM0u%!j000080Q-4XQ^k>Mqx%p50Bkq_ +03!eZ00000000000HlHJn*jiDX>c!JX>N37a&BR4FKlmPVRUJ4ZgVeRUukY>bYEXCaCuNm0Rj{Q6aWA +K2mt$eR#Wqj+MRm{008e6001Qb0000000000005+cD6IhiaA|NaUukZ1WpZv|Y%gqYV_|e@Z*FrhUu0 +=>baixTY;!Jfc~DCM0u%!j000080Q-4XQ#cE&dK(G=0PY?D03`qb00000000000HlHDwE+NdX>c!JX> +N37a&BR4FKlmPVRUJ4ZgVeRb9r-PZ*FF3XD)DgP)h*<6ay3h000O8`*~JVv-DZ*7XttQD+T}n9{>OV0 +000000000q=7`h0RV7ma4%nJZggdGZeeUMY;R*>bZKvHb1!0Hb7d}Yc~DCM0u%!j000080Q-4XQw(z& +$U*`D0DJ}j03rYY00000000000HlGK!vO$rX>c!JX>N37a&BR4FKuOXVPs)+VJ}}_X>MtBUtcb8c~DC +M0u%!j000080Q-4XQ!azP_Xi9B0ADKr03HAU00000000000HlE$#sL6uX>c!JX>N37a&BR4FKuOXVPs +)+VJ~7~b7d}Yc~DCM0u%!j000080Q-4XQwc9KIy?pd0O1n=04D$d00000000000HlFk(g6T)X>c!JX> +N37a&BR4FKuOXVPs)+VJ~oNXJ2wPD002J#001BW0 +000000000005+c-q-;EaA|NaUukZ1WpZv|Y%gtZWMyn~FJE72ZfSI1UoLQYP)h*<6ay3h000O8`*~JV +6)>Prc>w?b-U9#tApigX0000000000q=8r20RV7ma4%nJZggdGZeeUMZEs{{Y;!MTVQyq;WMOn=E^v8 +JO928D0~7!N00;p4c~(<{l00000000000001_fe+#V0B +~t=FJEbHbY*gGVQepLZ)9a`b1!CZa&2LBUt@1>baHQOE^v8JO928D0~7!N00;p4c~(>3m#NLd0RR971 +ONaX00000000000001_fxG1a0B~t=FJEbHbY*gGVQepLZ)9a`b1!LbWMz0RaCuNm0Rj{Q6aWAK2mt$e +R#RFqbX4mM003Dg000~S0000000000005+cxaR=?aA|NaUukZ1WpZv|Y%gtZWMyn~FKlUUYc6nkP)h* +<6ay3h000O8`*~JV8yxcLYykiO;sO8w9smFU0000000000q=DV^0RV7ma4%nJZggdGZeeUMZEs{{Y;! +MjV`ybc!JX>N37a&BR4FK%UYcW-iQFJE72ZfSI1UoLQYP)h*<6ay3h000O8`*~JVt357KN(}%2o-Y6Z9 +RL6T0000000000q=BRg0swGna4%nJZggdGZeeUMZe?_LZ*prdVRdw9E^v8JO928D0~7!N00;p4c~(z?C000000 +00000001_fzm7j0B~t=FJEbHbY*gGVQepMWpsCMa%(ShWpi_BZ*DGdc~DCM0u%!j000080Q-4XQ`3)D +F}no-0NW1$03HAU00000000000HlGgLIMDAX>c!JX>N37a&BR4FK%UYcW-iQFLiWjY;!Jfc~DCM0u%! +j000080Q-4XQ!TH1U%CPS0RIL603QGV00000000000HlGXNCE(GX>c!JX>N37a&BR4FK%UYcW-iQFL- +Tia&TiVaCuNm0Rj{Q6aWAK2mt$eR#N}~0006200000001Na0000000000005+coJ#@#aA|NaUukZ1Wp +Zv|Y%gzcWpZJ3X>V?GFJE72ZfSI1UoLQYP)h*<6ay3h000O8`*~JV>CLabA_f2e^%DR9ApigX000000 +0000q=Dc|0swGna4%nJZggdGZeeUMZ*XODVRUJ4ZgVeVXk}w-E^v8JO928D0~7!N00;p4c~(=zz6u&A +3IG5qCIA2;00000000000001_fk9FN0B~t=FJEbHbY*gGVQepNaAk5~bZKvHb1!CcWo3G0E^v8JO928 +D0~7!N00;p4c~(>WI%Nj382|ttT>tia +P)h*<6ay3h000O8`*~JVz2<6y83F(RnFIg;GXMYp0000000000q=7Jb0swGna4%nJZggdGZeeUMZ*XO +DVRUJ4ZgVeUb!lv5FKuOXVPs)+VP9orX>?&?Y-KKRc~DCM0u%!j000080Q-4XQ>U8^`|<(+0GS5>05J +dn00000000000HlGMdjbG(X>c!JX>N37a&BR4FK=*Va$$67Z*FrhVs&Y3WG`)HbYWy+bYWj?WoKbyc` +k5yP)h*<6ay3h000O8`*~JV;ye;Y=m7u#Cjc!JX>N37a&BR4FK=*Va$$67Z*FrhVs&Y3WG{DUWo2w%Wn^h|VPb4$E^v8JO928D0~7! +N00;p4c~(<_$cJSK1ONc%3jhEv00000000000001_ftP~<0B~t=FJEbHbY*gGVQepNaAk5~bZKvHb1! +0bX>4RKcW7m0Y+r0;XJKP`E^v8JO928D0~7!N00;p4c~(>5-4uH@0000p0000i00000000000001_f$ +WC@0B~t=FJEbHbY*gGVQepNaAk5~bZKvHb1!Lbb97;BY%gD5X>MtBUtcb8c~DCM0u%!j000080Q-4XQ +{h^v-UR{x01^cN05bpp00000000000HlFyhynm`X>c!JX>N37a&BR4FK=*Va$$67Z*FrhX>N0LVQg$K +Wn^h|VPb4$UuV?GFKKRbbYX04FKlIJVPknNaCuNm0Rj{Q6aWAK2mt$eR#T6qSSr +FG000zg001cf0000000000005+ce2@YFaA|NaUukZ1WpZv|Y%gzcWpZJ3X>V?GFKKRbbYX04FL!8VWo +#~Rc~DCM0u%!j000080Q-4XQwXG`bdLi70O<+<0384T00000000000HlG1u>t^aX>c!JX>N37a&BR4F +LGsZFJE72ZfSI1UoLQYP)h*<6ay3h000O8`*~JVWn*>Aln?*_wL1U+ApigX0000000000q=8Sh0swGn +a4%nJZggdGZeeUMa%FKZV{dMAbaHiLbZ>HVE^v8JO928D0~7!N00;p4c~(;=qt)2!6951WL;wIC0000 +0000000001_fg;8N0B~t=FJEbHbY*gGVQepQWpOWZWpQ6-X>4UKaCuNm0Rj{Q6aWAK2mt$eR#R!EM9= +9W000bx001BW0000000000005+cNZJAbaA|NaUukZ1WpZv|Y%g+UaW8UZabIa}b97;BY%XwlP)h*<6a +y3h000O8`*~JVBLu(1a|i$cpdA1J8~^|S0000000000q=9e!0swGna4%nJZggdGZeeUMa%FKZa%FK}b +7gccaCuNm0Rj{Q6aWAK2mt$eR#O+blrnz>000#b001BW0000000000005+c90mgbaA|NaUukZ1WpZv| +Y%g+UaW8UZabI+DVPk7$axQRrP)h*<6ay3h000O8`*~JVbYEXCaCuNm0Rj{Q6a +WAK2mt$eR#W90%c=hW002h<001BW0000000000005+c@+JcSaA|NaUukZ1WpZv|Y%g+Ub8l>QbZKvHF +JfVHWiD`eP)h*<6ay3h000O8`*~JV000000ssI200000D*ylh0000000000q=7Fe0|0Poa4%nJZggdG +ZeeUMa%FRGY;|;LZ*DJaWoKbyc`sjIX>MtBUtcb8c~DCM0u%!j000080Q-4XQ}{OHU%wOp0EkBb04o3 +h00000000000HlF>C<6d+X>c!JX>N37a&BR4FLGsbZ)|mRX>V>XY-ML*V|g!fWpi(Ac4cxdaCuNm0Rj +{Q6aWAK2mt$eR#N}~0006200000001ul0000000000005+cf;|HOaA|NaUukZ1WpZv|Y%g+Ub8l>QbZ +KvHFLGsbZ)|pDY-wUIUtei%X>?y-E^v8JO928D0~7!N00;p4c~(=y03zQ=1pokK6aWA#00000000000 +001_fzdq!0B~t=FJEbHbY*gGVQepQWpi(Ab#!TOZZC3Wb8l>RWo&6;FJfVHWiD`eP)h*<6ay3h000O8 +`*~JVYKm(DsSp4FB1ZrKF#rGn0000000000q=8~X0|0Poa4%nJZggdGZeeUMa%FRGY;|;LZ*DJgWpi( +Ac4cg7VlQK1Ze(d>VRU74E^v8JO928D0~7!N00;p4c~(dXaE2%00000000000001_fm& +1p0B~t=FJEbHbY*gGVQepQWpi(Ab#!TOZZC3Wb8l>RWo&6;FJ@t5bZ>HbE^v8JO928D0~7!N00;p4c~ +(;?)mp#21^@s_761S@00000000000001_fy{3M0B~t=FJEbHbY*gGVQepQWpi(Ab#!TOZZC3Wb8l>RW +o&6;FJ^CbZe(9$VQyq;WMOn=b1rasP)h*<6ay3h000O8`*~JVRpR%rEerqv^&c!JX>N37a&BR4FLGsbZ)|mRX>V>Xa%F +RGY<6XAX<{#OWpHnDbY*fbaCuNm0Rj{Q6aWAK2mt$eR#RNV>E!MN002)F001)p0000000000005+cw} +t}%aA|NaUukZ1WpZv|Y%g+Ub8l>QbZKvHFLGsbZ)|pDY-wUIa%FLKX>w(4Wo~qHE^v8JO928D0~7!N0 +0;p4c~(;z7guBI3jhFYB>(^~00000000000001_f%c070B~t=FJEbHbY*gGVQepQWpi(Ab#!TOZZC3W +b8l>RWo&6;FLGsbZ)|pDaxQRrP)h*<6ay3h000O8`*~JV000000ssI2000009{>OV0000000000q=7A +%0|0Poa4%nJZggdGZeeUMb#!TLb1z?CX>MtBUtcb8c~DCM0u%!j000080Q-4XQ%ZO_Kh^;N0QUm`02= +@R00000000000HlFzm;(TCX>c!JX>N37a&BR4FLiWjY;!MPY;R{SaCuNm0Rj{Q6aWAK2mt$eR#O9VLc +*5<004mo0015U0000000000005+cdzu3PaA|NaUukZ1WpZv|Y%g_mX>4;ZVQ_F{X>xNeaCuNm0Rj{Q6 +aWAK2mt$eR#W6-jcert003ME0012T0000000000005+cPMre)aA|NaUukZ1WpZv|Y%g_mX>4;ZV{dJ6 +VRSBVc~DCM0u%!j000080Q-4XQ?|5;v2z9h009*M04V?f00000000000HlF#p#uPLX>c!JX>N37a&BR +4FLiWjY;!MTZ*6d4bZKH~Y-x0PUvyz-b1rasP)h*<6ay3h000O8`*~JVY!f}Mm;e9(@&Et;9{>OV000 +0000000q=6`?0|0Poa4%nJZggdGZeeUMb#!TLb1!6JbY*mDZDlTSc~DCM0u%!j000080Q-4XQ_!}>j! +Xpr04ojv03rYY00000000000HlHar~?3SX>c!JX>N37a&BR4FLiWjY;!MUWpHw3V_|e@Z*DGdc~DCM0 +u%!j000080Q-4XQznk}UF`z^0EP?z04V?f00000000000HlG5t^)vYX>c!JX>N37a&BR4FLiWjY;!MU +X>w&_bYFFHY+q<)Y;a|Ab1rasP)h*<6ay3h000O8`*~JVxg+o|3jzQD;RFBxB>(^b0000000000q=CJ +%0|0Poa4%nJZggdGZeeUMb#!TLb1!6Rb98ldX>4;}VRC14E^v8JO928D0~7!N00;p4c~(OV0000000000q=AOG0|0Poa4%nJZggdGZeeUMb#!TLb1!9XV{c?>Z +f7oVc~DCM0u%!j000080Q-4XQ{g5JlS2Xk03QSZ03rYY00000000000HlG@x&r`kX>c!JX>N37a&BR4 +FLiWjY;!MVZgg^aaBpdDbaO6nc~DCM0u%!j000080Q-4XQ^z}7-{%Mb00kES03iSX00000000000HlF +by#oMnX>c!JX>N37a&BR4FLiWjY;!MWX>4V4d2@7SZ7y(mP)h*<6ay3h000O8`*~JVqt#C>SOEY4%mM +%aAOHXW0000000000q=94;ZXKZO=V=i!cP +)h*<6ay3h000O8`*~JV5m0CS*#-ar%Mt(p9RL6T0000000000q=9+O0|0Poa4%nJZggdGZeeUMb#!TL +b1!INb7*CAE^v8JO928D0~7!N00;p4c~(=`e-Wdi0RR9S0{{Rm00000000000001_fsNDy0B~t=FJEb +HbY*gGVQepTbZKmJFKKRSWn*+-b7f<7a%FUKVQzD9Z*p`laCuNm0Rj{Q6aWAK2mt$eR#O=t$&+0T000 +av0015U0000000000005+cde#E~aA|NaUukZ1WpZv|Y%g_mX>4;ZY;R|0X>MmOaCuNm0Rj{Q6aWAK2m +t$eR#V=;&!#;a007WW000{R0000000000005+c6XXK`aA|NaUukZ1WpZv|Y%g_mX>4;ZZE163E^v8JO +928D0~7!N00;p4c~(<9v<$F!0RRB01ONaX00000000000001_fr4;ZaA9L>VP|P>XD)DgP)h*<6ay3h000O8`*~JV$Uak^jsySzd<*~p9{>OV00000000 +00q=EMZ1ORYpa4%nJZggdGZeeUMb#!TLb1!gVa$#(2Wo#~Rc~DCM0u%!j000080Q-4XQc!JX>N37a&BR4FLiWjY;!MgYiD0_Wpi(Ja${w4E^v8JO928D0 +~7!N00;p4c~(<7l-3zA1pok95&!@v00000000000001_ftL&f0B~t=FJEbHbY*gGVQepTbZKmJFLPyd +b#QcVZ)|g4Vs&Y3WG--dP)h*<6ay3h000O8`*~JV$(R6($qWDhN+$pSApigX0000000000q=5_)1ORY +pa4%nJZggdGZeeUMb#!TLb1!psVsLVAV`X!5E^v8JO928D0~7!N00;p4c~(=8MVb@a2><}@9RL6y000 +00000000001_ffOGE0B~t=FJEbHbY*gGVQepTbZKmJFLY&Xa9?C;axQRrP)h*<6ay3h000O8`*~JVJg +Ie^3<>}M$|3*&AOHXW0000000000q=76c1ORYpa4%nJZggdGZeeUMb#!TLb1!vnaA9L>X>MmOaCuNm0 +Rj{Q6aWAK2mt$eR#SeVju$xt007?x000{R0000000000005+cb~6M3aA|NaUukZ1WpZv|Y%g_mX>4;Z +b#iQTE^v8JO928D0~7!N00;p4c~(4;ZcW7m0Y%XwlP)h*<6ay3h000O8`*~JVFRk9iF984mR00419R +L6T0000000000q=9lo1ORYpa4%nJZggdGZeeUMc4KodUtei%X>?y-E^v8JO928D0~7!N00;p4c~($_h7T@?TTj70zd7ytkO0000000000q=ENI1ORYpa4%nJZggdGZeeUMc4KodXK8dUaCuN +m0Rj{Q6aWAK2mt$eR#TU6$*GwI002=F0015U0000000000005+cieCf(aA|NaUukZ1WpZv|Y%g|Wb1! +XWa$|LJX<=+GaCuNm0Rj{Q6aWAK2mt$eR#R%uV*EA^002xa0018V0000000000005+cUu6UUaA|NaUu +kZ1WpZv|Y%g|Wb1!psVs>S6b7^mGE^v8JO928D0~7!N00;p4c~(<%F(Ir$7ytl{R{#Jb00000000000 +001_fzopX0B~t=FJEbHbY*gGVQepUV{MtBUtcb8c~DCM0u%!j000080Q-4 +XQ>83)(Elp{03N*n02KfL00000000000HlGik^}&7X>c!Jc4cm4Z*nhWX>)XPZ!U0oP)h*<6ay3h000 +O8`*~JV1`i|L^ZNh*@+$-Y7ytkO0000000000q=DkT1ORYpa4%nWWo~3|axZXsaA9(DX>MmOaCuNm0R +j{Q6aWAK2mt$eR#VdT6U!aA|NaUv_0~WN&gWV_{=xWn*t{baHQOFJWY1aCBvIE^v8JO928D0~7!N0 +0;p4c~(=#V!TZ<0RR9c0{{Ra00000000000001_fq&)&0B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY%gPB +V`ybAaCuNm0Rj{Q6aWAK2mt$eR#SzRWD^nr006fF001HY0000000000005+c@aF{paA|NaUv_0~WN&g +WV_{=xWn*t{baHQOFJo_QaA9;VaCuNm0Rj{Q6aWAK2mt$eR#TS#Z*33|002cd001Tc0000000000005 ++cLg@tnaA|NaUv_0~WN&gWV_{=xWn*t{baHQOFJo_RbaHQOY-MsTaCuNm0Rj{Q6aWAK2mt$eR#WrQ{u +=rN0089)001Wd0000000000005+cmiYw$aA|NaUv_0~WN&gWV_{=xWn*t{baHQOFJ@_MWp{F6aByXEE +^v8JO928D0~7!N00;p4c~(=DC2d}>1pol%4*&or00000000000001_fz|y50B~t=FJE?LZe(wAFJob2 +Xk}w>Zgg^QY%geKb#iHQbZKLAE^v8JO928D0~7!N00;p4c~(=m$h}$^2><}I8vp<$00000000000001 +_fye^}0B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY%g|z0B~t=FJE?LZe(wAFJob2Xk}w>Z +gg^QY%gPBV`yb_FJE72ZfSI1UoLQYP)h*<6ay3h000O8`*~JV{LU}Q2?hWFIS>EZgg^QY%gPBV`y +b_FLGsMX>(s=VPj}zE^v8JO928D0~7!N00;p4c~(=ukX5ii0000!0000V00000000000001_f!P)Y0B +~t=FJE?LZe(wAFJonLbZKU3FJE72ZfSI1UoLQYP)h*<6ay3h000O8`*~JVFCeYqo&W#<{{R309{>OV0 +000000000q=8l!1^{qra4%nWWo~3|axY_La&&2CX)j-2ZDDC{Utcb8c~DCM0u%!j000080Q-4XQx_bf +z0f5B0EzVj03HAU00000000000HlF27zO}vX>c!Jc4cm4Z*nhVWpZ?BW@#^DVPj=-bS`jZZBR=A0u%! +j000080Q-4XQc!Jc4cm4Z*nhVWpZ?BW@#^DZ*p +ZWaCuNm0Rj{Q6aWAK2mt$eR#T(rX47{B0074f0018V0000000000005+c8bb&GaA|NaUv_0~WN&gWV` +yP=WMy?y-E^v8JO928D0~7!N00;p4c~(<7zl0F)IRF3_dH?_)00000000000001_fzC$=0 +B~t=FJE?LZe(wAFJow7a%5$6FJftDHD+>UaV~IqP)h*<6ay3h000O8`*~JV%jaiiJOcm#-39;vApigX +0000000000q=EW@2mo+ta4%nWWo~3|axY_OVRB?;bT49QXEktgZ(?O~E^v8JO928D0~7!N00;p4c~(> +4Stva{2><}YBme*>00000000000001_fpvul0B~t=FJE?LZe(wAFJow7a%5$6FJow7a%5?9baH88b#! +TOZZ2?nP)h*<6ay3h000O8`*~JV#p&<`cLV?c{|*2EDF6Tf0000000000q=EO22mo+ta4%nWWo~3|ax +Y_OVRB?;bT4CQVRCb2bZ2sJb#QQUZ(?O~E^v8JO928D0~7!N00;p4c~(>4mtk7J2LJ%}6951t000000 +00000001_fwhwe0B~t=FJE?LZe(wAFJow7a%5$6FJow7a&u*LaB^>AWpXZXc~DCM0u%!j000080Q-4X +Q(XHuNTdY-00s^K04V?f00000000000HlGon+O1KX>c!Jc4cm4Z*nhVXkl_>WppoNZ)9n1XLEF6bY*Q +}V`yn^WiD`eP)h*<6ay3h000O8`*~JV*bE&BS^@w7umk`A9RL6T0000000000q=BKK2mo+ta4%nWWo~ +3|axY_OVRB?;bT4CXZE#_9E^v8JO928D0~7!N00;p4c~(=sLYgsX0{{R&2LJ#f00000000000001_fi +|QF0B~t=FJE?LZe(wAFJow7a%5$6FJo{yG&yi`Z(?O~E^v8JO928D0~7!N00;p4c~(c!Jc4cm4Z*nhVXkl_>WppoPb7OFFZ(?O~E^v8 +JO928D0~7!N00;p4c~(=w3SgoX1^@sKDF6T*00000000000001_flIIm0B~t=FJE?LZe(wAFJow7a%5 +$6FJ*IMb8Rkgc~DCM0u%!j000080Q-4XQy@3Q&?*H00HqE903rYY00000000000HlGLwg>=lX>c!Jc4 +cm4Z*nhVXkl_>WppoPbz^F9aB^>AWpXZXc~DCM0u%!j000080Q-4XQ}jUtd0`j;0O~XV03ZMW000000 +00000HlEfya)hrX>c!Jc4cm4Z*nhVXkl_>WppoPbz^ICW^!e5E^v8JO928D0~7!N00;p4c~(;<1(*0Z +0{{Tj1^@se00000000000001_fuht10B~t=FJE?LZe(wAFJow7a%5$6FJ*OOYjSXMZ(?O~E^v8JO928 +D0~7!N00;p4c~(=*+ey_kIsgELdjJ3+00000000000001_fg0Ed0B~t=FJE?LZe(wAFJow7a%5$6FJ* +OOba!TQWpOTWc~DCM0u%!j000080Q-4XQ=mbO7&rp}0MiBl03rYY00000000000HlG75(xlsX>c!Jc4 +cm4Z*nhVXkl_>WppoPbz^jQaB^>AWpXZXc~DCM0u%!j000080Q-4XQyE3l*JCFD0P9cy03iSX000000 +00000HlEf76|}wX>c!Jc4cm4Z*nhVXkl_>WppoRVlp!^GG=mRaV~IqP)h*<6ay3h000O8`*~JVeyjeE +HUj_v+6DjsBLDyZ0000000000q=BV92>@_ua4%nWWo~3|axY_OVRB?;bT4OOGBYtUaB^>AWpXZXc~DC +M0u%!j000080Q-4XQw=H8vY8S901h?)03!eZ00000000000HlE&K?wkGX>c!Jc4cm4Z*nhVXkl_>Wpp +oSWnyw=cW`oVVr6nJaCuNm0Rj{Q6aWAK2mt$eR#Uc!Jc4cm4Z*nhVXkl_>WppoWVQyz)b!=y0a%o|1ZEs{{Y%Xw +lP)h*<6ay3h000O8`*~JVq|tlo_ZI*F^MnBaB>(^b0000000000q=C(~2>@_ua4%nWWo~3|axY_OVRB +?;bT4dSZf9q5Wo2t^Z)9a`E^v8JO928D0~7!N00;p4c~(>R2%Q%i7XSd*fdK#}00000000000001_fd +|eB0B~t=FJE?LZe(wAFJow7a%5$6FKl6MXJ}<&a%FdIZ)9a`E^v8JO928D0~7!N00;p4c~(>Ngpv<-8 +vp=ekO2TG00000000000001_fo0_h0B~t=FJE?LZe(wAFJow7a%5$6FKl6MXJ~b9XJK+_VQy`2WMynF +aCuNm0Rj{Q6aWAK2mt$eR#V+O6}2NM003+N0stof0000000000005+cA^{2jaA|NaUv_0~WN&gWV`yP +=WMycaX<=?{Z)9a`E^v8JO928D0~7!N00;p4c~(<35Ym-B8vp>1lK}uE0000000000000 +1_fr=>#0B~t=FJE?LZe(wAFJow7a%5$6FKl6MXLM*`X>D(0Wo#~Rc~DCM0u%!j000080Q-4XQyVYVGZ +-8I0Lpd&04D$d00000000000HlElMG63LX>c!Jc4cm4Z*nhVXkl_>WppoWVQy!1b#iNIb7*aEWMynFa +CuNm0Rj{Q6aWAK2mt$eR#W8c@T8Xp0082daA|NaUv_0~WN&gWV`yP= +WMyJaA|NaUv_0~ +WN&gWV`yP=WMyAWp +XZXc~DCM0u%!j000080Q-4XQ^$+OgLe%80M{@804M+e00000000000HlGBkqQ8CX>c!Jc4cm4Z*nhVX +kl_>WppofZfSO9a&uv9WMy<^V{~tFE^v8JO928D0~7!N00;p4c~(>Pzq~y~1ONce3IG5h0000000000 +0001_flQwY0B~t=FJE?LZe(wAFJow7a%5$6FLiWgIB;@rVr6nJaCuNm0Rj{Q6aWAK2mt$eR#S&;{S~< +Y008m;0015U0000000000005+c(4z_faA|NaUv_0~WN&gWV`yP=WMyV>WaCuNm0Rj{Q6aW +AK2mt$eR#TG(*D?bD00031001KZ0000000000005+c#iR-VaA|NaUv_0~WN&gWV`yP=WMy?y-E^v8JO928D0~7!N00;p4c~(MtBUtcb8c~DCM0u%!j000080Q-4XQ&QQjhKd6K0NM!v02}}S000000 +00000HlE#z6tc!Jc4cm4Z*nhVZ)|UJVQpbAVQzD2E^v8JO928D0~7!N00;p4c~(=)#1YeR3jhEW +DF6T?00000000000001_f!)Ch0B~t=FJE?LZe(wAFJo_PZ*pO6VJ~5Bb7^#McWG`jGA?j=P)h*<6ay3 +h000O8`*~JV8*fE&g8~2mdj|jjA^-pY0000000000q=Apk3IK3va4%nWWo~3|axY_VY;SU5ZDB8IZfS +IBVQgu0WiD`eP)h*<6ay3h000O8`*~JV2pbF$Pz3-092Ecn9RL6T0000000000q=8b<3IK3va4%nWWo +~3|axY_VY;SU5ZDB8WX>KzzE^v8JO928D0~7!N00;p4c~(=RDAwlg1pojh82|tu00000000000001_f +!);#0B~t=FJE?LZe(wAFJo_PZ*pO6VJ~-SZggdGZ7y(mP)h*<6ay3h000O8`*~JVU2hWoT>$_9MFIc- +9{>OV0000000000q=5+B3IK3va4%nWWo~3|axY|Qb98KJVlQ7`X>MtBUtcb8c~DCM0u%!j000080Q-4 +XQ!LZH4qz()02iVF0384T00000000000HlGU-3kD3X>c!Jc4cm4Z*nhWX>)XJX<{#9Z*6d4bS`jtP)h +*<6ay3h000O8`*~JVhCpNd_%8qebH@Mx9{>OV0000000000q=7vN3jlCwa4%nWWo~3|axY|Qb98KJVl +QN2bYWs)b7d}Yc~DCM0u%!j000080Q-4XQ!?pD%+?eD00U6~02}}S00000000000HlF(IST-AX>c!Jc +4cm4Z*nhWX>)XJX<{#FZe(S6E^v8JO928D0~7!N00;p4c~(>1NpBz`GXMbn$^ZZ#00000000000001_ +fr3s80B~t=FJE?LZe(wAFJx(RbZlv2FKlmPVRUbDb1rasP)h*<6ay3h000O8`*~JVc&0UHY!Cnd+c^L +L9{>OV0000000000q=Dgq3jlCwa4%nWWo~3|axY|Qb98KJVlQoBZfRy^b963nc~DCM0u%!j000080Q- +4XQ}nBO_}2yi0DThx03HAU00000000000HlG6k_!NEX>c!Jc4cm4Z*nhWX>)XJX<{#JVRCC_a&sc!Jc4cm4Z*nhWX>)XJX +<{#JWprU=VRT_GaCuNm0Rj{Q6aWAK2mt$eR#Tn5)qt=I002ZP001BW0000000000005+cy}kc!Jc4cm4Z*nhWX>)XJX<{#QHZ(0^a&0bUc +x6ya0Rj{Q6aWAK2mt$eR#SN)bMBJK0001<0RS5S0000000000005+c>eLMYaA|NaUv_0~WN&gWWNCAB +Y-wUIbT%|DWq4&!O928D0~7!N00;p4c~(=jFEei;A&*;@br9smFU0000000000q=B +mE4ghdza4%nWWo~3|axY|Qb98KJVlQ@Oa&u{KZZ2?nP)h*<6ay3h000O8`*~JV92gG9H?RNz0AK+C8v +pt03QGV00000000000HlG`u@3-nX>c!Jc4cm4Z*nhWX>)XJX<{#THZ(0^a&0bUcx6ya0Rj{Q +6aWAK2mt$eR#W>LvixVj0001n0RS5S0000000000005+cSlbW)aA|NaUv_0~WN&gWWNCABY-wUIcQ!O +GWq4&!O928D0~7!N00;p4c~(=j{uZzcDF6V!rvLyP00000000000001_f%uyd0B~t=FJE?LZe(wAFJx +(RbZlv2FL!8VWo#~Rc~DCM0u%!j000080Q-4XQzP$Z{KEhM01^QJ04V?f00000000000HlFE#Ss8-X> +c!Jc4cm4Z*nhWX>)XJX<{#5Vqs%zaBp&SFJE72ZfSI1UoLQYP)h*<6ay3h000O8`*~JVuZk~a&H(@b% +L4!aB>(^b0000000000q=84q5dd&$a4%nWWo~3|axY|Qb98KJVlQ7}VPk7>Z*p`mZE163E^v8JO928D +0~7!N00;p4c~(=#IR?{F8~^}oWB>ps00000000000001_fmp~90B~t=FJE?LZe(wAFJx(RbZlv2FJEF +|V{344a&#|qXmxaHY%XwlP)h*<6ay3h000O8`*~JVZx#Tp_5lC@ISK#(D*ylh0000000000q=D|_5dd +&$a4%nWWo~3|axY|Qb98KJVlQ7}VPk7>Z*p`mb9r-PZ*FF3XD(xAXHZK40u%!j000080Q-4XQ~r7Dqp +2PM0On`_04e|g00000000000HlE}=MeyKX>c!Jc4cm4Z*nhWX>)XJX<{#5Vqs%zaBp&SFLQZwV{dL|X +=g5Qc~DCM0u%!j000080Q-4XQ$#`^Ltc!Jc4cm4Z*nhW +X>)XJX<{#5Vqs%zaBp&SFLYsYW@&6?E^v8JO928D0~7!N00;p4c~(=2mv5*<0ssJr1ONaa000000000 +00001_fyQ4F0B~t=FJE?LZe(wAFKBdaY&C3YVlQ7`X>MtBUtcb8c~DCM0u%!j000080Q-4XQ_80;;Vl +#Z09Zi)03iSX00000000000HlFPViEvwX>c!Jc4cm4Z*nhabZu-kY-wUIUukGzbY*yLY%XwlP)h*<6a +y3h000O8`*~JViZ&5F4j%vjVSWGrBme*a0000000000q=B?{5&&>%a4%nWWo~3|axZ9fZEQ7cX<{#5X +>M?JbaQlaWnpbDaCuNm0Rj{Q6aWAK2mt$eR#P<&;B8MG008hT0RSQZ0000000000005+c1eOv2aA|Na +Uv_0~WN&gWXmo9CHEd~OFJE+TYh`X}dS!AhaCuNm0Rj{Q6aWAK2mt$eR#T4CiAmiC002W10015U0000 +000000005+cld}>4aA|NaUv_0~WN&gWXmo9CHEd~OFJE4;YaCuNm0Rj{Q6aWAK2mt$eR#RIt113 +O7000O^0RSNY0000000000005+cthy2aaA|NaUv_0~WN&gWXmo9CHEd~OFJo_Rb97;DbaO6nc~DCM0u +%!j000080Q-4XQ?aYPpWj3P0K&-u03!eZ00000000000HlE{0}}vnX>c!Jc4cm4Z*nhabZu-kY-wUIX +mo9CHE>~ab7gWaaCuNm0Rj{Q6aWAK2mt$eR#S*`+2Ohn0056Y001HY0000000000005+cOGpy{aA|Na +Uv_0~WN&gWXmo9CHEd~OFLPybX<=+>dS!AhaCuNm0Rj{Q6aWAK2mt$eR#VdDT~t~C003bYEXCaCuNm0Rj{Q6aWAK2mt +$eR#O=o=YggH008v^001KZ0000000000005+c<5?2`aA|NaUv_0~WN&gWXmo9CHEd~OFJE+WX=N{8Vq +tS-E^v8JO928D0~7!N00;p4c~( +UK0RtX>c!Jc4cm4Z*nhabZu-kY-wUIW@&76WpZ;bUtei%X>?y-E^v8JO928D0~7!N00;p4c~(<^umlj +o0RRA(0{{Rv00000000000001_fo)zB0B~t=FJE?LZe(wAFKBdaY&C3YVlQTCY;c!Jc4cm4Z*nhabZu-kY-wUIW@&76WpZ;bX>Mv|V{~6_WprU*V`yP= +b7gccaCuNm0Rj{Q6aWAK2mt$eR#TGEWT0#V0027<001Na0000000000005+c!DJHvaA|NaUv_0~WN&g +WXmo9CHEd~OFJ@_MbY*gLFKlUUbS`jtP)h*<6ay3h000O8`*~JV7j>E{4?5a&s?laCB*JZeeV6VP|tLaCuNm0Rj{Q6aWAK2m +t$eR#Q>FVND4b000qb001cf0000000000005+co^KNXaA|NaUv_0~WN&gWXmo9CHEd~OFJ@_MbY*gLF +LPmTX>@6NWpXZXc~DCM0u%!j000080Q-4XQ($uc5A^{60KNnO04e|g00000000000HlHLhZ6vBX>c!J +c4cm4Z*nhabZu-kY-wUIW@&76WpZ;bcW7yJWpi+0V`VOIc~DCM0u%!j000080Q-4XQ=U0-T4wc!Jc4cm4Z*nhabZu-kY-wUIbaG{7VPs)&bY*gLFJE72ZfSI1UoL +QYP)h*<6ay3h000O8`*~JVQj8HPR0041vjzYFD*ylh0000000000q=DUw698~&a4%nWWo~3|axZ9fZE +Q7cX<{#Qa%E*p0PqF?04M+e000000 +00000HlF>juQZIX>c!Jc4cm4Z*nhabZu-kY-wUIbaG{7VPs)&bY*gLFLPmdE^v8JO928D0~7!N00;p4 +c~(4R +=a&s?VUukY>bYEXCaCuNm0Rj{Q6aWAK2mt$eR#QGcX#DaH008AU001cf0000000000005+cqLvc?aA| +NaUv_0~WN&gWXmo9CHEd~OFLZKcWny({Y-D9}b1!0Hb7d}Yc~DCM0u%!j000080Q-4XQ&0q_vHu4E0N +o-004M+e00000000000HlH2r4s;fX>c!Jc4cm4Z*nhabZu-kY-wUIbaG{7Vs&Y3WMy)5FJy0RE^v8JO +928D0~7!N00;p4c~(4R=a&s?bbaG{7E^v8JO928D0~7!N00;p4c~(=g8MlBL4gdhIIRF4J00000000000001 +_fx5U80B~t=FJE?LZe(wAFKBdaY&C3YVlQ-ZWo2S@X>4R=a&s?bbaG{7Uu<}7Y%XwlP)h*<6ay3h000 +O8`*~JV+jeS&o(2E_R~7&OEC2ui0000000000q=6vE698~&a4%nWWo~3|axZ9fZEQ7cX<{#Qa%E+AVQ +gzbYEXCaCuNm0Rj{Q6aWAK2mt$eR#PD@+Cmox001-{001Ze0000000000005+c2+k7#a +A|NaUv_0~WN&gWXmo9CHEd~OFLZKcWp`n0Yh`kCFJfVHWiD`eP)h*<6ay3h000O8`*~JVWr}a9_W=L^ +g#`crCjbBd0000000000q=9AC698~&a4%nWWo~3|axZ9fZEQ7cX<{#Qa%E+AVQgzc!Jc4cm4Z*nhabZu-kY-w +UIbaG{7cVTR6WpZ;bWpr|7WiD`eP)h*<6ay3h000O8`*~JVFatz%c?JLg)ffN(E&u=k0000000000q= +D1i698~&a4%nWWo~3|axZ9fZEQ7cX<{#Qa%E+AVQgzbYEXCaCuNm0Rj{Q6aWAK2mt$eR#RmaV{t13004ar000>P0000000000005 ++c{^t__aA|NaUv_0~WN&gWX=H9;FJo_HWn(UIc~DCM0u%!j000080Q-4XQ!S&#-OB&~0B8XK02%-Q00 +000000000HlFn>k|NQX>c!Jc4cm4Z*nhbWNu+EV{dJ6VRSBVc~DCM0u%!j000080Q-4XQ&gZqI-Lsu0 +2(p?02lxO00000000000HlFq>=OWRX>c!Jc4cm4Z*nhbWNu+EV{dY0E^v8JO928D0~7!N00;p4c~(<) +7#cEfBLDzyr2qgN00000000000001_fj0OP0B~t=FJE?LZe(wAFKJ|MVJ~T9Zee6$bYU)Vc~DCM0u%! +j000080Q-4XQ!L0`TPFhm0F4I#0384T00000000000HlH68x#O=X>c!Jc4cm4Z*nhbWNu+EX>N3KVQy +z-b1rasP)h*<6ay3h000O8`*~JV>7zsD7XSbN6#xJLAOHXW0000000000q=7*n6aa8(a4%nWWo~3|ax +ZCQZecHQVPk7yXJubxVRT_GaCuNm0Rj{Q6aWAK2mt$eR#Uvk5`-O?004Ou0{|TW0000000000005+cm +LC)VaA|NaUv_0~WN&gWX=H9;FLiWtG&W>mbYU)Vc~DCM0u%!j000080Q-4XQ;jEASl|Hw0A2(D03QGV +00000000000HlHLw-f+yX>c!Jc4cm4Z*nhfb7yd2V{0#8UukY>bYEXCaCuNm0Rj{Q6aWAK2mt$eR#P$ +fug4Yu000yK0018V0000000000005+c3%V2laA|NaUv_0~WN&gWZF6UEVPk7AUv_13b7^mGE^v8JO92 +8D0~7!N00;p4c~(<9JDt<50RR9w1ONab00000000000001_fnK^40B~t=FJE?LZe(wAFKu&YaA9L>FJ +*XRWpH$9Z*FrgaCuNm0Rj{Q6aWAK2mt$eR#S=pt2_V)0077r000^Q0000000000005+cO1u;RaA|NaU +v_0~WN&gWZF6UEVPk7AWq5QhaCuNm0Rj{Q6aWAK2mt$eR#U62=1n9W004@V0018V0000000000005+c +g2NO5aA|NaUv_0~WN&gWZF6UEVPk7AW?^h>Vqs%zE^v8JO928D0~7!N00;p4c~(;<3Bjgi0RRA%0ssI +a00000000000001_f#cv50B~t=FJE?LZe(wAFK}UFYhh<;Zf7rFUtwZzb#z}}E^v8JO928D0~7!N00; +p4c~(;ut&*Vh0002-0RR9Y00000000000001_fr#Q10B~t=FJE?LZe(wAFK}UFYhh<;Zf7rFUukY>bY +EXCaCuNm0Rj{Q6aWAK2mt$eR#O`)I%9|q007`D001KZ0000000000005+cyWVP|P>XD?rEVQzVBX>N6RE^v8JO928D0~7!N00;p4c~(=Z>u=dG2LJ#X5dZ)q00000000000001_ +frRoD0B~t=FJE?LZe(wAFK}UFYhh<;Zf7rFZFO^OY-w(FcrI{xP)h*<6ay3h000O8`*~JVaRPJMmPUvqSFbz^jOa%FQaaCuNm0Rj +{Q6aWAK2mt$eR#R>K>OXr5001W;001BW0000000000005+cp!*a6aA|NaUv_0~WN&gWaA9L>VP|P>XD +@AGa%*LBb1rasP)h*<6ay3h000O8`*~JVZj(V;@&*6^L=pf1B>(^b0000000000q=8um6##H)a4%nWW +o~3|axZXUV{2h&X>MmPa%FLKX>w(4Wo~qHE^v8JO928D0~7!N00;p4c~(<2WSxN$8vp?GcmMz+00000 +000000001_fsPFo0B~t=FJE?LZe(wAFK}UFYhh<;Zf7rZaAjj@W@%+|b1rasP)h*<6ay3h000O8`*~J +V5aMk*l@R~{Vm$x=9RL6T0000000000q=Dfm6##H)a4%nWWo~3|axZXUV{2h&X>MmPbYW+6E^v8JO92 +8D0~7!N00;p4c~(URJD0D=Gj03HAU0000000000 +0HlHFP!#}hX>c!Jc4cm4Z*nhiWpFhyH!ojbX>MtBUtcb8c~DCM0u%!j000080Q-4XQ~N##QYZxg0D%n +v02=@R00000000000HlGNQ567iX>c!Jc4cm4Z*nhiWpFhyH!os!X>4RJaCuNm0Rj{Q6aWAK2mt$eR#S +7On+w7P006`n000{R0000000000005+c{8kkJaA|NaUv_0~WN&gWaAj~cF*h$`Xk}w-E^v8JO928D0~ +7!N00;p4c~(;mu~yKE1^@s85C8xk00000000000001_f%jY$0B~t=FJE?LZe(wAFK}gWH8D3YV{dG4a +%^vBE^v8JO928D0~7!N00;p4c~(=83#T>70RRBy1ONaW00000000000001_fxTlD0B~t=FJE?LZe(wA +FK}gWH8D3YV{dJ6VRSBVc~DCM0u%!j000080Q-4XQ#;SNM$Z8N0BHmO03HAU00000000000HlGyWfcH +$X>c!Jc4cm4Z*nhiWpFhyH!oyqa&&KRY;!Jfc~DCM0u%!j000080Q-4XQxxc!Jc4cm4Z*nhiWpFhyH!o#wc4BpDY-BEQc~DCM0u%!j000080Q-4XQX>c!Jc4cm4Z*nhiWpFhyH!p2vbYU)Vc~DCM0u%!j000080 +Q-4XQx;WthTRMR0Ch9~03HAU00000000000HlE^bQJ(_X>c!Jc4cm4Z*nhiWpFhyH!pW`VQ_F|a&sc!Jc4cm4Z*nhiWpFh +yH!o>!UvP47V`X!5FJE72ZfSI1UoLQYP)h*<6ay3h000O8`*~JVv=buUNDBY}!7Bg&EC2ui00000000 +00q=Br06##H)a4%nWWo~3|axZXYa5XVEFKKRHaB^>BWpi^cUukY%aB^>BWpi^baCuNm0Rj{Q6aWAK2m +t$eR#U)|DV@Y~0094{0RSZc0000000000005+cK8_UtaA|NaUv_0~WN&gWaBF8@a%FRGb#h~6b1z?CX +>MtBUtcb8c~DCM0u%!j000080Q-4XQ(+_n)=L2Z05Spq04D$d00000000000HlFM0u}&pX>c!Jc4cm4 +Z*nhiYiD0_Wpi(Ja${w4FK~G?F=KCSaA9;VaCuNm0Rj{Q6aWAK2mt$eR#WeURQTcq0028O001Na0000 +000000005+c)dLm)aA|NaUv_0~WN&gWaBN|8W^ZzBWNC79FJE72ZfSI1UoLQYP)h*<6ay3h000O8`*~ +JVR)sLnTmb+8bOZnZBme*a0000000000q=ESe765Q*a4%nWWo~3|axZXfVRUA1a&2U3a&s?VUu|J&Ze +L$6aCuNm0Rj{Q6aWAK2mt$eR#WZ?Ez&*&005c~001KZ0000000000005+cmkJgDaA|NaUv_0~WN&gWa +BN|8W^ZzBWNC79FJW$Ea&Kv5E^v8JO928D0~7!N00;p4c~(4IUfGI1^@v08UO$w00000000000001_f%p~{0B~t=FJE?LZe(wAFK}#ObY^dIZDeV3b1!vnX? +QMhc~DCM0u%!j000080Q-4XQ-k>iYCQk|08jt`03!eZ00000000000HlHO9Tos^X>c!Jc4cm4Z*nhiY ++-a}Z*py9X>xNfc4cyNX>V>WaCuNm0Rj{Q6aWAK2mt$eR#S!>I518J000mf001KZ0000000000005+c +Zypu^aA|NaUv_0~WN&gWaBN|8W^ZzBWNC79FL!BfWN&wKE^v8JO928D0~7!N00;p4c~(;r+t4op2LJ% +B6aWAq00000000000001_f&L{H0B~t=FJE?LZe(wAFK}{iXL4n8b1z?CX>MtBUtcb8c~DCM0u%!j000 +080Q-4XQ|?3ZU&aIg0DcPq02=@R00000000000HlFFEfxT9X>c!Jc4cm4Z*nhia&KpHWpi^cVqtPFaC +uNm0Rj{Q6aWAK2mt$eR#TCk?2lvw003VK0015U0000000000005+cJu(&maA|NaUv_0~WN&gWaB^>Fa +%FRKFJo_PZ*p@kaCuNm0Rj{Q6aWAK2mt$eR#Q%e)_ffU002z}0018V0000000000005+c-8L2gaA|Na +Uv_0~WN&gWaB^>Fa%FRKFJo_YZggdGE^v8JO928D0~7!N00;p4c~(>8*Y@fz0{{TE1poja000000000 +00001_fj2r90B~t=FJE?LZe(wAFK}{iXL4n8b1!pnX>M+1axQRrP)h*<6ay3h000O8`*~JVxf(FQYzF +`U`4a#DAOHXW0000000000q=BM6765Q*a4%nWWo~3|axZdaadl;LbaO9XUukY>bYEXCaCuNm0Rj{Q6a +WAK2mt$eR#VF+@nr@9006lG001KZ0000000000005+cOhpy|aA|NaUv_0~WN&gWa%FLKWpi|MFJE7FW +pZEK~phAOHX +W0000000000q=D>6765Q*a4%nWWo~3|axZdaadl;LbaO9ZWMOc0WpZ;aaCuNm0Rj{Q6aWAK2mt$eR#O +71vL9&%0006R000{R0000000000005+cwp|tgaA|NaUv_0~WN&gWa%FLKWpi|MFJW+LE^v8JO928D0~ +7!N00;p4c~(=qw23Qo3jhG$CjbB(00000000000001_fmmb~0B~t=FJE?LZe(wAFLGsZb!BsOb1z|ab +Z9Pcc~DCM0u%!j000080Q-4XQ-ZRh&n^J~0MP*e0384T00000000000HlEha25b?X>c!Jc4cm4Z*nhk +WpQ<7b98erV`Xx5b1rasP)h*<6ay3h000O8`*~JVuV#XDOV000 +0000000q=Alf765Q*a4%nWWo~3|axZdaadl;LbaO9bZ*Oa9WpgfYc~DCM0u%!j000080Q-4XQ)i?&gh +vDb0J01K03rYY00000000000HlG7h!y~FX>c!Jc4cm4Z*nhkWpQ<7b98erWq4y{aCB*JZgVbhc~DCM0 +u%!j000080Q-4XQ(+b-xsC(?0E7c!Jc4cm4Z*nhkWpQ<7b98er +Xk~10E^v8JO928D0~7!N00;p4c~(;!N^{|P0RRB?0ssIV00000000000001_f!dK40B~t=FJE?LZe(w +AFLGsZb!BsOb1!IbZ)?y-E^v8J +O928D0~7!N00;p4c~(;&WxEeF2LJ%@761Sv00000000000001_fx8hG0B~t=FJE?LZe(wAFLGsbZ)|p +DY-wUIaB^>UX=G(`b1rasP)h*<6ay3h000O8`*~JV%K=~A>Hz=%R0RM4BLDyZ0000000000q=7IQ7XW +Z+a4%nWWo~3|axZdab8l>RWo&6;FLGsYZ*p{Ha&ss60E9#U03 +!eZ00000000000HlFi8y5g@X>c!Jc4cm4Z*nhkWpi(Ac4cg7VlQ%Kb8l>RWpZ;aaCuNm0Rj{Q6aWAK2 +mt$eR#Q~m&~Q@)006oY001EX0000000000005+c&Mg-JaA|NaUv_0~WN&gWa%FRGY<6XAX<{#PbaHiL +baO6nc~DCM0u%!j000080Q-4XQvd(}00IC20000004V?f00000000000HlFnGZz4GX>c!Jc4cm4Z*nh +kWpi(Ac4cg7VlQKFZE#_9FJE72ZfSI1UoLQYP)h*<6ay3h000O8`*~JV8`mypV*mgEoB#j-FaQ7m000 +0000000q=Bh37XWZ+a4%nWWo~3|axZdab8l>RWo&6;FJo_QaA9;WV{dG1Wn*+{Z*Fs6VPa!0aCuNm0R +j{Q6aWAK2mt$eR#WC47Qf{a002=(001BW0000000000005+cS~M2`aA|NaUv_0~WN&gWbY*T~V`+4GF +JE72ZfSI1UoLQYP)h*<6ay3h000O8`*~JV8Qg7btpor7@(cg~AOHXW0000000000q=9`%7XWZ+a4%nW +Wo~3|axZjcZee3-ba^jdVRLzIV`*4;YaCuNm0Rj{Q6aWAK2mt$eR#T|q81C`{007 +tp0012T0000000000005+cAyF3qaA|NaUv_0~WN&gWbY*T~V`+4GFJWeMWpXZXc~DCM0u%!j000080Q +-4XQ_y|osl5UK0AK|G03HAU00000000000HlFVR2KknX>c!Jc4cm4Z*nhmWo}_(X>@rnVr6D;a%C=Xc +~DCM0u%!j000080Q-4XQv?g`YhnWc0CWcc03-ka00000000000HlFOR~Gc!Jc4cm4Z*nhmWo}_( +X>@rnVr6D;a%Eq0Y-MF|E^v8JO928D0~7!N00;p4c~(=VY_ikb0ssJK1pojW00000000000001_f$Lf +q0B~t=FJE?LZe(wAFLY&YVPk1@c`t5Za4v9pP)h*<6ay3h000O8`*~JVm{Kjfv;_bF^%(#F9RL6T000 +0000000q=5il7XWZ+a4%nWWo~3|axZjcZee3-ba^jwWpr|RE^v8JO928D0~7!N00;p4c~(>PR?T&(0{ +{T#3IG5c00000000000001_f$w7%0B~t=FJE?LZe(wAFLY&YVPk1@c`tKxZ*VSfc~DCM0u%!j000080 +Q-4XQytzSIjjQ!0AUCK03rYY00000000000HlG^XBPl)X>c!Jc4cm4Z*nhmWo}_(X>@rnbZ>HQVPtQ2 +WnwOHc~DCM0u%!j000080Q-4XQ(9$!S(69=03#Xz02}}S00000000000HlGwYZm};X>c!Jc4cm4Z*nh +mWo}_(X>@rncVTICE^v8JO928D0~7!N00;p4c~(=s(5w5a0002y0000T00000000000001_fs1q(0B~ +t=FJE?LZe(wAFLZBhY-ulFUukY>bYEXCaCuNm0Rj{Q6aWAK2mt$eR#V0R{PsW<0056y000~S0000000 +000005+cadj5}aA|NaUv_0~WN&gWbZ>2JX)j-JVRCb2axQRrP)h*<6ay3h000O8`*~JVg4{8H&I14dc +?tjk7ytkO0000000000q=D;-7XWZ+a4%nWWo~3|axZjmZER^TUvgzGaCuNm0Rj{Q6aWAK2mt$eR#PEK +Z5&Yq007Gh0018V0000000000005+c?~WG$aA|NaUv_0~WN&gWb#iQMX<{=kUtei%X>?y-E^v8JO928 +D0~7!N00;p4c~(;$KNE5S4FCW;DgXc@00000000000001_fqjz~0B~t=FJE?LZe(wAFLiQkY-wUMFJE +JCY;0v?bZKvHb1rasP)h*<6ay3h000O8`*~JVTd^H-KL7v#KL7v#9{>OV0000000000q=CSo7XWZ+a4 +%nWWo~3|axZmqY;0*_GcR9uWpZc!Jc4cm4Z*nhna%^mAVlyveZ*Fd7V{~b6ZZ2?nP)h*<6ay3h000O8`*~JVo&cQ- +MkoLP(~(^b0000000000q=AOG7XWZ+a4%nWWo~3|axZmqY;0*_GcRLrZf<2`bZKvHaBpvHE^v8 +JO928D0~7!N00;p4c~(<{YAOHX%00000000000001_fe+yq0B~t=FJE?LZe(wAFLiQkY-w +UMFJ*XRWpH$9Z*FrgaCuNm0Rj{Q6aWAK2mt$eR#V3)ODrG?004s_0012T0000000000005+cIqMeyaA +|NaUv_0~WN&gWb#iQMX<{=kW@%+?WOFWXc~DCM0u%!j000080Q-4XQ-`a+qkaPb0Eh_y03QGV000000 +00000HlGG^%nqeX>c!Jc4cm4Z*nhna%^mAVlyvhX>4V1Z*z1maCuNm0Rj{Q6aWAK2mt$eR#WJrk&9>+ +001*h001HY0000000000005+cPx%)BaA|NaUv_0~WN&gWb#iQMX<{=kaBpvHZDDR001j)0018V0000000000005+c+7}oAaA|NaUv_0~WN +&gWb#iQMX<{=ka%FRHZ*FsCE^v8JO928D0~7!N00;p4c~(;Z00002000000000d00000000000001_f +qFF<0B~t=FJE?LZe(wAFLiQkY-wUMFJo_RbaH88FJE72ZfSI1UoLQYP)h*<6ay3h000O8`*~JVDud}2 +wE+MCy#oLMF#rGn0000000000q=CUT7yxi-a4%nWWo~3|axZmqY;0*_GcRLrZgg^KVlQ7|aByXAXK8L +_UuAA~X>xCFE^v8JO928D0~7!N00;p4c~(<6WeLe=3;+NcD*yl}00000000000001_fyFl%0B~t=FJE +?LZe(wAFLiQkY-wUMFJo_RbaH88FJW+SWo~C_Ze=cTc~DCM0u%!j000080Q-4XQ@F=N{!|740J;$X04 +D$d00000000000HlF(L>K^YX>c!Jc4cm4Z*nhna%^mAVlyveZ*FvQX<{#KbZl*KZ*OcaaCuNm0Rj{Q6 +aWAK2mt$eR#RZPnqGkv000C+001Ze0000000000005+c3riRPaA|NaUv_0~WN&gWb#iQMX<{=kV{dMB +a%o~OaCvWVWo~nGY%XwlP)h*<6ay3h000O8`*~JV!0)=_!6g6yk%j;OE&u=k0000000000q=C|37yxi +-a4%nWWo~3|axZmqY;0*_GcRLrZgg^KVlQ)LV|8+6baG*Cb8v5RbS`jtP)h*<6ay3h000O8`*~JV%Tm +ZcSqK0Cxf=igBme*a0000000000q=Das7yxi-a4%nWWo~3|axZmqY;0*_GcRLrZgg^KVlQ)VV{3CRaC +uNm0Rj{Q6aWAK2mt$eR#N}~0006200000001}u0000000000005+cdX5+XaA|NaUv_0~WN&gWb#iQMX +<{=kV{dMBa%o~OUvp(+b#i5Na$#Md`ZfA2YaCuNm0Rj{Q6aWAK2mt$eR#UDjr@UDa003e(0021v0000000000005+cAfOlkaA| +NaUv_0~WN&gWb#iQMX<{=kV{dMBa%o~OUvp(+b#i5Na$#;0RtWW>|0BisN04M+e00000000000HlG?u^0ewX>c!Jc4cm4Z*nhna%^mAVlyvrVPk7yX +JvCQUtei%X>?y-E^v8JO928D0~7!N00;p4c~(>3X^-9}ApihshX4R000000000000001_fo8H80B~t= +FJE?LZe(wAFLiQkY-wUMFK}UFYhh<)b1!pgcrI{xP)h*<6ay3h000O8`*~JV000000ssI200000G5`P +o0000000000q=C)T7yxi-a4%nWWo~3|axZmqY;0*_GcRyqV{2h&WpgiLVPk7>Z*p{VFJE72ZfSI1UoL +QYP)h*<6ay3h000O8`*~JV-ne74NCE%=i3I=vG5`Po0000000000q=6sQ7yxi-a4%nWWo~3|axZmqY; +0*_GcRyqV{2h&WpgiLVPk7>Z*p{VFKuCKWoBt?WiD`eP)h*<6ay3h000O8`*~JV1rwupqyYc`p925@I +{*Lx0000000000q=C2A7yxi-a4%nWWo~3|axZmqY;0*_GcRyqV{2h&Wpgicb8KI2VRU0?UubW0bZ%j7 +WiMY}X>MtBUtcb8c~DCM0u%!j000080Q-4XQ$B=C*0Bfx0528*073u&00000000000HlGm*cbqCX>c! +Jc4cm4Z*nhna%^mAVlyvrVPk7yXJvCQb8~E8ZDDj{XkTb=b98QDZDlWCX>D+9Wo>0{bYXO9Z*DGdc~D +CM0u%!j000080Q-4XQ|5}9n%DsV0D}Yo03-ka00000000000HlG%;TQmLX>c!Jc4cm4Z*nhna%^mAVl +yvwbZKlaUtei%X>?y-E^v8JO928D0~7!N00;p4c~(<%5t5pw2LJ##6951v00000000000001_f#2g80 +B~t=FJE?LZe(wAFLiQkY-wUMFLiWjY%gPPZf<2`bZKvHE^v8JO928D0~7!N00;p4c~(;j&s+yy0ssI- +1^@sd00000000000001_fywI_0B~t=FJE?LZe(wAFLiQkY-wUMFLiWjY%g$fZ+LkwaCuNm0Rj{Q6aWA +K2mt$eR#Q#`_MiL!008m<001EX0000000000005+cX6_gOaA|NaUv_0~WN&gWb#iQMX<{=kb#!TLFL8 +Bcb!9Gac~DCM0u%!j000080Q-4XQ<7w_RO$r)02>eh03!eZ00000000000HlGT?-&4ZX>c!Jc4cm4Z* +nhna%^mAVlyvwbZKlaa%FLKWpi{caCuNm0Rj{Q6aWAK2mt$eR#P@8)wEy*006cP001Na00000000000 +05+c%=H)maA|NaUv_0~WN&gWb#iQMX<{=kb#!TLFLGsbaBpsNWiD`eP)h*<6ay3h000O8`*~JVmFNkb +&=vpyk5d2uApigX0000000000q=9bx7yxi-a4%nWWo~3|axZmqY;0*_GcR>?X>2cYWpr|RE^v8JO928 +D0~7!N00;p4c~(=TlKaP}761SlLjV9E00000000000001_fqfDg0B~t=FJE?LZe(wAFLiQkY-wUMFLi +WjY%gc!Jc4 +cm4Z*nhna%^mAVlyvwbZKlab8~ETa$#<2c3jhEUCjbB=0 +0000000000001_fweIi0B~t=FJE?LZe(wAFLiQkY-wUMFLiWjY%g?aZDntDbS`jtP)h*<6ay3h000O8 +`*~JV=c|?Zr4j%D-!=dM9{>OV0000000000q=B|Q831r;a4%nWWo~3|axZmqY;0*_GcR>?X>2cba%?V +ec~DCM0u%!j000080Q-4XQ=&${ali)v02~zn03ZMW00000000000HlGKP#FMlX>c!Jc4cm4Z*nhna%^ +mAVlyvwbZKlacVTICE^v8JO928D0~7!N00;p4c~(<+&>wL!3jhF9DF6T@00000000000001_ftFYq0B +~t=FJE?LZe(wAFLz~PWo~0{WNB_^b1z?CX>MtBUtcb8c~DCM0u%!j000080Q-4XQ^&0civc!Jc4cm4Z*nhpWnyJ+V{c?>ZfA2ZY++($Y;!Jfc~DCM0u%!j00008 +0Q-4XQ&4{~A4CEG02u`U03-ka00000000000HlFWY8e1c!Jc4cm4Z*nhpWnyJ+V{c?>ZfA2ZZEI{ +{Vr6V|E^v8JO928D0~7!N00;p4c~(Mn8FL+;db7gX0WMyV)Ze?UHaCuNm1qJ{B005Z*nE_CM0 +06po82|tP +""" + + +if __name__ == "__main__": + main() diff --git a/x86_64/python/python3-pkgconfig/PKGBUILD b/x86_64/python/python3-pkgconfig/PKGBUILD new file mode 100644 index 0000000..6c25376 --- /dev/null +++ b/x86_64/python/python3-pkgconfig/PKGBUILD @@ -0,0 +1,16 @@ +pkgname=python3-pkgconfig +pkgver=1.5.5 +pkgrel=1 +arch=(x86_64) +replace=(python-pkgconfig) +depends=(python3) +makedepends=(python3-pip) +source=(https://pypi.io/packages/source/p/pkgconfig/pkgconfig-$pkgver.tar.gz) + +package() { + pip3 install setuptools + + cd pkgconfig-$pkgver + + python setup.py install --prefix=/usr --root="$pkgdir" --optimize=1 +} diff --git a/x86_64/python/python3-ply/PKGBUILD b/x86_64/python/python3-ply/PKGBUILD new file mode 100644 index 0000000..e5f4a51 --- /dev/null +++ b/x86_64/python/python3-ply/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=python3-ply +rname=ply +pkgver=3.11 +pkgrel=1 +arch=(x86_64) +depends=(python3) +makedepends=(python3-pip) +source=(https://pypi.io/packages/source/p/ply/ply-$pkgver.tar.gz) + +prepare() { + pip3 install setuptools +} + +build() { + cd $rname-$pkgver + + python setup.py build +} + +package() { + cd $rname-$pkgver + + python setup.py install --root=$pkgdir +} diff --git a/x86_64/python/python3-pycups/PKGBUILD b/x86_64/python/python3-pycups/PKGBUILD new file mode 100644 index 0000000..b81d5b1 --- /dev/null +++ b/x86_64/python/python3-pycups/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=python3-pycups +rname=pycups +pkgver=2.0.1 +pkgrel=2 +arch=(x86_64) +depends=(cups python3) +makedepends=(gcc python3-pip) +source=(https://github.com/OpenPrinting/$rname/archive/v$pkgver.tar.gz) + +prepare() { + pip3 install setuptools +} + +build() { + cd $rname-$pkgver + + python3 setup.py build +} + +package() { + cd $rname-$pkgver + + python setup.py install --root=$pkgdir --optimize=1 +} diff --git a/x86_64/python/python3-pycurl/PKGBUILD b/x86_64/python/python3-pycurl/PKGBUILD new file mode 100644 index 0000000..d73f947 --- /dev/null +++ b/x86_64/python/python3-pycurl/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=python3-pycurl +rname=pycurl +pkgver=7.45.1 +rver=7_45_1 +pkgrel=1 +arch=(x86_64) +depends=(python3 python3-bottle python3-pyflakes) +makedepends=(python3-pip) +source=(https://github.com/$rname/$rname/archive/REL_$rver/python-$rname.tar.gz) + +prepare() { + pip3 install setuptools +} + +build() { + cd $rname-REL_$rver + + python3 setup.py build +} + +package() { + cd $rname-REL_$rver + + python3 setup.py install -O1 --root=$pkgdir +} diff --git a/x86_64/python/python3-pyflakes/PKGBUILD b/x86_64/python/python3-pyflakes/PKGBUILD new file mode 100644 index 0000000..1c27a77 --- /dev/null +++ b/x86_64/python/python3-pyflakes/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=python3-pyflakes +rname=pyflakes +pkgver=2.4.0 +pkgrel=1 +arch=(x86_64) +depends=(python3) +makedepends=(python3-pip) +source=(https://pypi.io/packages/source/p/$rname/$rname-$pkgver.tar.gz) + +prepare() { + pip3 install setuptools +} + +build() { + cd $rname-$pkgver + + python3 setup.py build +} + +package() { + cd $rname-$pkgver + + python3 setup.py install --prefix=/usr --root=$pkgdir --optimize=1 +} diff --git a/x86_64/python/python3-pygments/PKGBUILD b/x86_64/python/python3-pygments/PKGBUILD new file mode 100644 index 0000000..268d130 --- /dev/null +++ b/x86_64/python/python3-pygments/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=python3-pygments +rname=Pygments +pkgver=2.12.0 +pkgrel=1 +arch=(x86_64) +depends=(python3-sphinx python3-wcag-contrast-ratio) +makedepends=(python3-pip) +source=(https://pypi.org/packages/source/P/$rname/$rname-$pkgver.tar.gz) + +prepare() { + pip3 install setuptools +} + +build() { + cd $rname-$pkgver + + python3 setup.py build +} + +package() { + cd $rname-$pkgver + + python3 setup.py install --root="$pkgdir" -O1 +} diff --git a/x86_64/python/python3-pysmbc/PKGBUILD b/x86_64/python/python3-pysmbc/PKGBUILD new file mode 100644 index 0000000..0bbecdd --- /dev/null +++ b/x86_64/python/python3-pysmbc/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=python3-pysmbc +rname=pysmbc +pkgver=1.0.23 +pkgrel=1 +arch=(x86_64) +depends=(samba) +makedepends=(python3-pip) +source=(https://pypi.io/packages/source/p/$rname/$rname-$pkgver.tar.gz) + +prepare() { + pip3 install setuptools +} + +build() { + cd $rname-$pkgver + + python3 setup.py build +} + +package() { + cd $rname-$pkgver + + python3 setup.py install \ + --root=$pkgdir \ + --optimize=1 +} diff --git a/x86_64/python/python3-requests/PKGBUILD b/x86_64/python/python3-requests/PKGBUILD new file mode 100644 index 0000000..f248dde --- /dev/null +++ b/x86_64/python/python3-requests/PKGBUILD @@ -0,0 +1,28 @@ +pkgname=python3-requests +rname=requests +pkgver=2.27.1 +pkgrel=1 +arch=(x86_64) +depends=(python3) +makedepends=(python3-pip) +source=(https://github.com/psf/requests/archive/v$pkgver/$pkgname-$pkgver.tar.gz + cacerts.patch) + +prepare() { + pip3 install setuptools + + cd $rname-$pkgver + patch -p0 -i ../cacerts.patch +} + +build() { + cd $rname-$pkgver + + python3 setup.py build +} + +package() { + cd $rname-$pkgver + + python3 setup.py install --skip-build -O1 --root=$pkgdir +} diff --git a/x86_64/python/python3-requests/cacerts.patch b/x86_64/python/python3-requests/cacerts.patch new file mode 100644 index 0000000..7251708 --- /dev/null +++ b/x86_64/python/python3-requests/cacerts.patch @@ -0,0 +1,12 @@ +--- requests/certs.py 2022-01-05 17:35:04.000000000 +0200 ++++ requests/certs.py 2022-07-02 17:04:16.489049885 +0300 +@@ -12,7 +12,8 @@ + environment, you can change the definition of where() to return a separately + packaged CA bundle. + """ +-from certifi import where ++def where(): ++ return "/etc/ssl/certs/ca-certificates.cr" + + if __name__ == '__main__': + print(where()) diff --git a/x86_64/python/python3-sphinx/PKGBUILD b/x86_64/python/python3-sphinx/PKGBUILD new file mode 100644 index 0000000..10706cd --- /dev/null +++ b/x86_64/python/python3-sphinx/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=python3-sphinx +rname=Sphinx +pkgver=5.0.2 +pkgrel=1 +arch=(x86_64) +depends=(python3) +makedepends=(python3-pip) +source=(https://pypi.org/packages/source/S/$rname/$rname-$pkgver.tar.gz) + +prepare() { + pip3 install setuptools +} + +build() { + cd $rname-$pkgver + + make build +} + +package() { + cd $rname-$pkgver + + python setup.py install --root="$pkgdir" --optimize=1 --skip-build +} diff --git a/x86_64/python/python3-wcag-contrast-ratio/PKGBUILD b/x86_64/python/python3-wcag-contrast-ratio/PKGBUILD new file mode 100644 index 0000000..16df405 --- /dev/null +++ b/x86_64/python/python3-wcag-contrast-ratio/PKGBUILD @@ -0,0 +1,24 @@ +pkgname=python3-wcag-contrast-ratio +rname=wcag-contrast-ratio +pkgver=0.9 +pkgrel=1 +arch=(x86_64) +depends=(python3) +makedepends=(python3-pip) +source=(https://github.com/gsnedders/wcag-contrast-ratio/archive/$pkgver/python-$rname-$pkgver.tar.gz) + +prepare() { + pip3 install setuptools +} + +build() { + cd $rname-$pkgver + + python3 setup.py build +} + +package() { + cd $rname-$pkgver + + python3 setup.py install --root=$pkgdir --optimize=1 --skip-build +} diff --git a/x86_64/server/PKGBUILD b/x86_64/server/PKGBUILD new file mode 100644 index 0000000..0cf16c8 --- /dev/null +++ b/x86_64/server/PKGBUILD @@ -0,0 +1,19 @@ +pkgname= +pkgver= +pkgrel=1 +arch=(x86_64) +depends=() +makedepends=() +source=() + +build() { + cd $pkgname-$pkgver + + +} + +package() { + cd $pkgname-$pkgver + + +} diff --git a/x86_64/server/httpd/PKGBUILD b/x86_64/server/httpd/PKGBUILD new file mode 100644 index 0000000..2bb4fbc --- /dev/null +++ b/x86_64/server/httpd/PKGBUILD @@ -0,0 +1,72 @@ +pkgname=httpd +pkgver=2.4.53 +pkgrel=1 +arch=(x86_64) +depends=(zlib apr-util pcre nghttp2 openssl lua libxml2 curl jansson brotli lynx perl) +makedepends=(libxml2 lua curl brotli jansson) +options=(emptydirs) +source=(https://www.apache.org/dist/httpd/httpd-${pkgver}.tar.bz2 + https://github.com/archlinux/svntogit-packages/raw/packages/apache/trunk/openssl-malloc-init.patch + apache.tmpfiles.conf + httpd.service + httpd.sysusers + drunk.layout) + +prepare() { + cd $pkgname-$pkgver + + # set default user + sed -e 's#User daemon#User http#' \ + -e 's#Group daemon#Group http#' \ + -i docs/conf/httpd.conf.in + + cat "${srcdir}/drunk.layout" >> config.layout + + # https://github.com/openssl/openssl/issues/2865 + patch -Np1 -i ../openssl-malloc-init.patch +} + +build() { + cd $pkgname-$pkgver + + ./configure \ + --enable-layout=Drunk \ + --enable-mpms-shared=all \ + --enable-modules=all \ + --enable-mods-shared=all \ + --enable-so \ + --enable-suexec \ + --with-suexec-caller=http \ + --with-suexec-docroot=/srv/http \ + --with-suexec-logfile=/var/log/httpd/suexec.log \ + --with-suexec-uidmin=99 --with-suexec-gidmin=99 \ + --enable-ldap --enable-authnz-ldap --enable-authnz-fcgi \ + --enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache \ + --enable-ssl --with-ssl \ + --enable-deflate --enable-cgi --enable-cgid \ + --enable-proxy --enable-proxy-connect \ + --enable-proxy-http --enable-proxy-ftp \ + --enable-dbd --enable-imagemap --enable-ident --enable-cern-meta \ + --enable-lua --enable-xml2enc --enable-http2 \ + --enable-proxy-http2 --enable-md --enable-brotli \ + --with-apr=/usr/bin/apr-1-config \ + --with-apr-util=/usr/bin/apu-1-config \ + --with-pcre=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + install -D -m644 "${srcdir}/apache.tmpfiles.conf" "${pkgdir}/usr/lib/tmpfiles.d/apache.conf" + install -D -m644 "${srcdir}/httpd.service" "${pkgdir}/usr/lib/systemd/system/httpd.service" + + # Systemd http sysuser + install -D -m644 "$srcdir"/httpd.sysusers $pkgdir/usr/lib/sysusers.d/httpd.conf + + # Make prefix dir + mkdir -p $pkgdir/opt/httpd +} diff --git a/x86_64/server/httpd/apache.tmpfiles.conf b/x86_64/server/httpd/apache.tmpfiles.conf new file mode 100644 index 0000000..7447752 --- /dev/null +++ b/x86_64/server/httpd/apache.tmpfiles.conf @@ -0,0 +1 @@ +d /run/httpd 0755 root root - diff --git a/x86_64/server/httpd/drunk.layout b/x86_64/server/httpd/drunk.layout new file mode 100644 index 0000000..2ddf9a6 --- /dev/null +++ b/x86_64/server/httpd/drunk.layout @@ -0,0 +1,22 @@ + + prefix: /opt/httpd + exec_prefix: /usr + libdir: /usr/lib/httpd + libexecdir: /usr/libexec/httpd/modules + installbuilddir: /usr/lib/httpd/build + bindir: /usr/bin + sbindir: /usr/sbin + sysconfdir: /etc/httpd/conf + datadir: /usr/share/httpd + errordir: /usr/share/httpd/error + iconsdir: /usr/share/httpd/icons + htdocsdir: /srv/http + manualdir: /usr/share/httpd/manual + cgidir: /srv/http/cgi-bin + includedir: /usr/include/httpd + localstatedir: /var + runtimedir: /run/httpd + logfiledir: /var/log/httpd + proxycachedir: /var/cache/httpd + mandir: /usr/share/man + diff --git a/x86_64/server/httpd/httpd.service b/x86_64/server/httpd/httpd.service new file mode 100644 index 0000000..cf4e196 --- /dev/null +++ b/x86_64/server/httpd/httpd.service @@ -0,0 +1,15 @@ +[Unit] +Description=Apache Web Server +After=network.target remote-fs.target nss-lookup.target + +[Service] +Type=simple +ExecStart=/usr/sbin/httpd -k start -DFOREGROUND +ExecStop=/usr/sbin/httpd -k graceful-stop +ExecReload=/usr/sbin/httpd -k graceful +PrivateTmp=true +LimitNOFILE=infinity +KillMode=mixed + +[Install] +WantedBy=multi-user.target diff --git a/x86_64/server/httpd/httpd.sysusers b/x86_64/server/httpd/httpd.sysusers new file mode 100644 index 0000000..b876d87 --- /dev/null +++ b/x86_64/server/httpd/httpd.sysusers @@ -0,0 +1 @@ +u http - "HTTP" /srv/http diff --git a/x86_64/server/httpd/openssl-malloc-init.patch b/x86_64/server/httpd/openssl-malloc-init.patch new file mode 100644 index 0000000..bfe108f --- /dev/null +++ b/x86_64/server/httpd/openssl-malloc-init.patch @@ -0,0 +1,20 @@ +--- httpd-2.4.25/support/ab.c.orig 2017-05-21 21:59:17.131193359 +0000 ++++ httpd-2.4.25/support/ab.c 2017-05-21 22:01:34.704322361 +0000 +@@ -2496,6 +2496,8 @@ + heartbeatres = 0; + + #ifdef USE_SSL ++ SSL_load_error_strings(); ++ SSL_library_init(); + #ifdef RSAREF + R_malloc_init(); + #else +@@ -2505,8 +2507,6 @@ + OPENSSL_malloc_init(); + #endif + #endif +- SSL_load_error_strings(); +- SSL_library_init(); + bio_out=BIO_new_fp(stdout,BIO_NOCLOSE); + bio_err=BIO_new_fp(stderr,BIO_NOCLOSE); + diff --git a/x86_64/server/nginx/PKGBUILD b/x86_64/server/nginx/PKGBUILD new file mode 100644 index 0000000..e5d252c --- /dev/null +++ b/x86_64/server/nginx/PKGBUILD @@ -0,0 +1,110 @@ +pkgname=nginx +pkgver=1.23.1 +pkgrel=1 +arch=(x86_64) +depends=(pcre2 zlib openssl geoip mailcap libxcrypt) +makedepends=(mercurial) +url='https://nginx.org' +source=($url/download/nginx-$pkgver.tar.gz + service + logrotate) +install=nginx.install +backup=(etc/nginx/fastcgi.conf + etc/nginx/fastcgi_params + etc/nginx/koi-win + etc/nginx/koi-utf + etc/nginx/nginx.conf + etc/nginx/scgi_params + etc/nginx/uwsgi_params + etc/nginx/win-utf + etc/logrotate.d/nginx) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --conf-path=/etc/nginx/nginx.conf \ + --sbin-path=/usr/bin/nginx \ + --pid-path=/run/nginx.pid \ + --lock-path=/run/lock/nginx.lock \ + --user=http \ + --group=http \ + --http-log-path=/var/log/nginx/access.log \ + --error-log-path=stderr \ + --http-client-body-temp-path=/var/lib/nginx/client-body \ + --http-proxy-temp-path=/var/lib/nginx/proxy \ + --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \ + --http-scgi-temp-path=/var/lib/nginx/scgi \ + --http-uwsgi-temp-path=/var/lib/nginx/uwsgi \ + --with-cc-opt="$CFLAGS $CPPFLAGS" \ + --with-ld-opt="$LDFLAGS" \ + --with-compat \ + --with-debug \ + --with-file-aio \ + --with-http_addition_module \ + --with-http_auth_request_module \ + --with-http_dav_module \ + --with-http_degradation_module \ + --with-http_flv_module \ + --with-http_geoip_module \ + --with-http_gunzip_module \ + --with-http_gzip_static_module \ + --with-http_mp4_module \ + --with-http_realip_module \ + --with-http_secure_link_module \ + --with-http_slice_module \ + --with-http_ssl_module \ + --with-http_stub_status_module \ + --with-http_sub_module \ + --with-http_v2_module \ + --with-mail \ + --with-mail_ssl_module \ + --with-pcre-jit \ + --with-stream \ + --with-stream_geoip_module \ + --with-stream_realip_module \ + --with-stream_ssl_module \ + --with-stream_ssl_preread_module \ + --with-threads + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR="$pkgdir" install + + sed -e 's|\ "$pkgdir"/usr/share/man/man8/nginx.8.gz + + for i in ftdetect ftplugin indent syntax; do + install -Dm644 contrib/vim/$i/nginx.vim \ + "$pkgdir/usr/share/vim/vimfiles/$i/nginx.vim" + done + + install -d "$pkgdir/usr/src/nginx" + cp -f $srcdir/nginx-$pkgver.tar.gz $pkgdir/usr/src/nginx +} diff --git a/x86_64/server/nginx/logrotate b/x86_64/server/nginx/logrotate new file mode 100755 index 0000000..e0afbb9 --- /dev/null +++ b/x86_64/server/nginx/logrotate @@ -0,0 +1,10 @@ +/var/log/nginx/*log { + missingok + notifempty + create 640 http log + sharedscripts + compress + postrotate + test ! -r /run/nginx.pid || kill -USR1 `cat /run/nginx.pid` + endscript +} diff --git a/x86_64/server/nginx/nginx.install b/x86_64/server/nginx/nginx.install new file mode 100644 index 0000000..2c80a04 --- /dev/null +++ b/x86_64/server/nginx/nginx.install @@ -0,0 +1,4 @@ +post_upgrade() { + chmod 755 var/log/nginx + chown http:log var/log/nginx +} diff --git a/x86_64/server/nginx/service b/x86_64/server/nginx/service new file mode 100755 index 0000000..6302474 --- /dev/null +++ b/x86_64/server/nginx/service @@ -0,0 +1,16 @@ +[Unit] +Description=A high performance web server and a reverse proxy server +After=network.target network-online.target nss-lookup.target + +[Service] +Type=forking +PIDFile=/run/nginx.pid +PrivateDevices=yes +SyslogLevel=err + +ExecStart=/usr/bin/nginx -g 'pid /run/nginx.pid; error_log stderr;' +ExecReload=/usr/bin/nginx -s reload +KillMode=mixed + +[Install] +WantedBy=multi-user.target diff --git a/x86_64/server/samba/PKGBUILD b/x86_64/server/samba/PKGBUILD new file mode 100644 index 0000000..3d088b8 --- /dev/null +++ b/x86_64/server/samba/PKGBUILD @@ -0,0 +1,80 @@ +pkgname=samba +pkgver=4.16.1 +pkgrel=1 +arch=(x86_64) +depends=(python3 docbook-xsl libbsd db popt cups readline tevent + acl openldap libcap ldb linux-pam systemd gnutls talloc tdb + dbus libaio perl-modules libnsl libtirpc rpcsvc-proto jansson + ceph liburing) +backup=(etc/logrotate.d/samba + etc/pam.d/samba + etc/conf.d/samba + etc/samba/smb.conf) +makedepends=(python3-pip) +source=(https://us1.samba.org/samba/ftp/stable/${pkgname}-${pkgver}.tar.gz + samba-pam.conf + samba-tmp.conf + samba.logrotate) + +prepare() { + # Install some python made deps + pip3 install setuptools + pip3 install Pygments toml typogrify + pip3 install markdown dnspython + + cd $pkgname-$pkgver + + idmap_modules='idmap_ad,idmap_rid,idmap_adex,idmap_hash,idmap_tdb2' + pdb_modules='pdb_tdbsam,pdb_ldap,pdb_ads,pdb_smbpasswd,pdb_wbc_sam,pdb_samba4' + auth_modules='auth_unix,auth_wbc,auth_server,auth_netlogond,auth_script,auth_samba4' + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --enable-fhs \ + --with-ads \ + --with-ldap \ + --with-winbind \ + --with-acl-support \ + --with-systemd \ + --systemd-install-services \ + --with-pam \ + --with-shared-modules=${idmap_modules},${pdb_modules},${auth_modules} \ + --with-pammodulesdir=/usr/lib/security +} + +build() { + cd $pkgname-$pkgver + + #make -j6 +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + # Install dirs and give/change perms + install -d -m755 $pkgdir/etc/conf.d + install -d -m755 $pkgdir/etc/samba + mkdir -p $pkgdir/etc/samba/private + chmod 700 $pkgdir/etc/samba/private + install -d -m1777 $pkgdir/var/spool/samba + + # Other things + sed -i -e '/^EnvironmentFile/ s/sysconfig/conf.d/' $pkgdir/usr/lib/systemd/system/*.service + install -m644 $srcdir/samba-$pkgver/packaging/systemd/samba.sysconfig $pkgdir/etc/conf.d/samba + install -D -m644 $srcdir/samba-$pkgver/examples/LDAP/samba.schema $pkgdir/usr/share/doc/samba/examples/LDAP/samba.schema + install -D -m644 $srcdir/samba-$pkgver/ctdb/config/ctdb.service $pkgdir/usr/lib/systemd/system/ctdb.service + install -D -m644 $srcdir/samba.logrotate $pkgdir/etc/logrotate.d/samba + install -D -m644 $srcdir/samba-pam.conf $pkgdir/etc/pam.d/samba + install -D -m644 $srcdir/samba-tmp.conf $pkgdir/usr/lib/tmpfiles.d/samba.conf + touch $pkgdir/etc/samba/smb.conf + + # Delete some files that conflict with other packages + rm -f $pkgdir/usr/bin/{ldbadd,ldbdel,ldbedit,ldbmodify,ldbrename,ldbsearch,tdbbackup,tdbdump,tdbrestore,tdbtool} + + rm -f $pkgdir/usr/lib/python3.10/site-packages/{_ldb_text.py,_tdb_text.py,ldb.cpython-310-x86_64-linux-gnu.so,tdb.cpython-310-x86_64-linux-gnu.so} + + rm -rf $pkgdir/usr/share/man/man*/{ldb*,tdb*} +} diff --git a/x86_64/server/samba/samba-pam.conf b/x86_64/server/samba/samba-pam.conf new file mode 100644 index 0000000..53724d1 --- /dev/null +++ b/x86_64/server/samba/samba-pam.conf @@ -0,0 +1,3 @@ +auth required pam_unix.so +account required pam_unix.so +session required pam_unix.so diff --git a/x86_64/server/samba/samba-tmp.conf b/x86_64/server/samba/samba-tmp.conf new file mode 100644 index 0000000..2066f28 --- /dev/null +++ b/x86_64/server/samba/samba-tmp.conf @@ -0,0 +1,2 @@ +D /run/samba 0755 - - - +d /var/log/samba 0755 - - - diff --git a/x86_64/server/samba/samba.logrotate b/x86_64/server/samba/samba.logrotate new file mode 100644 index 0000000..ff28608 --- /dev/null +++ b/x86_64/server/samba/samba.logrotate @@ -0,0 +1,5 @@ +/var/log/samba/log.smbd /var/log/samba/log.nmbd /var/log/samba/*.log { + notifempty + missingok + copytruncate +} diff --git a/x86_64/xfce/PKGBUILD b/x86_64/xfce/PKGBUILD new file mode 100644 index 0000000..0cf16c8 --- /dev/null +++ b/x86_64/xfce/PKGBUILD @@ -0,0 +1,19 @@ +pkgname= +pkgver= +pkgrel=1 +arch=(x86_64) +depends=() +makedepends=() +source=() + +build() { + cd $pkgname-$pkgver + + +} + +package() { + cd $pkgname-$pkgver + + +} diff --git a/x86_64/xfce/drunk-desktop-xfce4-clean/PKGBUILD b/x86_64/xfce/drunk-desktop-xfce4-clean/PKGBUILD new file mode 100644 index 0000000..f96a3fe --- /dev/null +++ b/x86_64/xfce/drunk-desktop-xfce4-clean/PKGBUILD @@ -0,0 +1,16 @@ +pkgname=drunk-desktop-xfce-clean +pkgver=2022.3 +pkgrel=1 +arch=(x86_64) +depends=( + libxfce4ui thunar-archive-plugin tumbler xfce4-notifyd xfce4-pulseaudio-plugin xfce4-settings xfdesktop + exo libxfce4util thunar-vcs-plugin xfce4-appfinder xfce4-panel xfce4-screenshooter xfce4-terminal xfwm4 + garcon thunar thunar-volman xfce4-dev-tools xfce4-power-manager xfce4-session xfconf drunk-fonts) + +build() { + echo "Nothing to make as its metapackage" +} + +package() { + echo "Same applies here" +} diff --git a/x86_64/xfce/drunk-desktop-xfce4/PKGBUILD b/x86_64/xfce/drunk-desktop-xfce4/PKGBUILD new file mode 100644 index 0000000..ecde448 --- /dev/null +++ b/x86_64/xfce/drunk-desktop-xfce4/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=drunk-desktop-xfce +pkgver=2022.3 +pkgrel=1 +arch=(x86_64) +depends=( + libxfce4ui thunar-archive-plugin tumbler xfce4-notifyd xfce4-pulseaudio-plugin xfce4-settings xfdesktop + exo libxfce4util thunar-vcs-plugin xfce4-appfinder xfce4-panel xfce4-screenshooter xfce4-terminal xfwm4 + garcon thunar thunar-volman xfce4-dev-tools xfce4-power-manager xfce4-session xfconf drunk-fonts) +source=( + settings.ini + xfwm4.xml) + +build() { + echo "Nothing to make as its metapackage" +} + +package() { + mkdir -p $pkgdir/etc/xdg/xfce4/xfconf/xfce-perchannel-xml \ + $pkgdir/etc/xdg/gtk-3.0 + + cp -f $srcdir/xfwm4.xml $pkgdir/etc/xdg/xfce4/xfconf/xfce-perchannel-xml/ + cp -f $srcdir/settings.ini $pkgdir/etc/xdg/gtk-3.0/ +} diff --git a/x86_64/xfce/drunk-desktop-xfce4/settings.ini b/x86_64/xfce/drunk-desktop-xfce4/settings.ini new file mode 100644 index 0000000..11e1ed0 --- /dev/null +++ b/x86_64/xfce/drunk-desktop-xfce4/settings.ini @@ -0,0 +1,4 @@ +[Settings] +gtk-fallback-icon-theme=breeze-dark +gtk-icon-theme-name=Flat-Remix-GTK-Red-Dark +gtk-theme-name=Flat-Remix-Dark-XFWM diff --git a/x86_64/xfce/drunk-desktop-xfce4/xfwm4.xml b/x86_64/xfce/drunk-desktop-xfce4/xfwm4.xml new file mode 100644 index 0000000..8d3ec53 --- /dev/null +++ b/x86_64/xfce/drunk-desktop-xfce4/xfwm4.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/x86_64/xfce/exo/PKGBUILD b/x86_64/xfce/exo/PKGBUILD new file mode 100644 index 0000000..3b00d11 --- /dev/null +++ b/x86_64/xfce/exo/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=exo +pkgver=4.17.1 +xver=4.17 +pkgrel=1 +arch=('x86_64') +depends=(libxfce4ui libxfce4util gtk+) +source=(https://archive.xfce.org/src/xfce/$pkgname/$xver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/garcon/PKGBUILD b/x86_64/xfce/garcon/PKGBUILD new file mode 100644 index 0000000..5411ab2 --- /dev/null +++ b/x86_64/xfce/garcon/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=garcon +pkgver=4.16.1 +xver=4.16 +pkgrel=1 +arch=('x86_64') +depends=(libxfce4ui gtk+) +source=(https://archive.xfce.org/src/xfce/$pkgname/$xver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --sysconfdir=/etc + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/libxfce4ui/PKGBUILD b/x86_64/xfce/libxfce4ui/PKGBUILD new file mode 100644 index 0000000..c2b0760 --- /dev/null +++ b/x86_64/xfce/libxfce4ui/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=libxfce4ui +pkgver=4.17.6 +xver=4.17 +pkgrel=1 +arch=('x86_64') +depends=(gtk+ xfconf gtk-doc gobject-introspection libgudev) +makedepends=() +source=(https://archive.xfce.org/src/xfce/$pkgname/$xver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --with-vendor-info='Drunk Linux' + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/libxfce4util/PKGBUILD b/x86_64/xfce/libxfce4util/PKGBUILD new file mode 100644 index 0000000..1c4172f --- /dev/null +++ b/x86_64/xfce/libxfce4util/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=libxfce4util +pkgver=4.17.2 +xver=4.17 +pkgrel=1 +arch=('x86_64') +depends=(glib2 gobject-introspection) +makedepends=(glib2 gobject-introspection vala gtk-doc) +source=(https://archive.xfce.org/src/xfce/$pkgname/$xver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/thunar-archive-plugin/PKGBUILD b/x86_64/xfce/thunar-archive-plugin/PKGBUILD new file mode 100644 index 0000000..9718ad6 --- /dev/null +++ b/x86_64/xfce/thunar-archive-plugin/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=thunar-archive-plugin +pkgver=0.4.0 +xver=0.4 +pkgrel=2 +arch=('x86_64') +depends=(thunar hicolor-icon-theme) +source=(https://archive.xfce.org/src/thunar-plugins/$pkgname/$xver/$pkgname-$pkgver.tar.bz2) +optdepends=( + xarchiver) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --libexecdir=/usr/lib/xfce4 \ + --sysconfdir=/etc + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/thunar-vcs-plugin/PKGBUILD b/x86_64/xfce/thunar-vcs-plugin/PKGBUILD new file mode 100644 index 0000000..9b2fe40 --- /dev/null +++ b/x86_64/xfce/thunar-vcs-plugin/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=thunar-vcs-plugin +pkgver=0.2.0 +xver=0.2 +pkgrel=1 +arch=('x86_64') +depends=(thunar gtk+ glib2 exo libxfce4util git) +source=(https://archive.xfce.org/src/thunar-plugins/$pkgname/$xver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/thunar-volman/PKGBUILD b/x86_64/xfce/thunar-volman/PKGBUILD new file mode 100644 index 0000000..2dd081c --- /dev/null +++ b/x86_64/xfce/thunar-volman/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=thunar-volman +pkgver=4.16.0 +pkgrel=2 +arch=('x86_64') +depends=(exo thunar libgudev xfce4-notifyd gvfs) +source=(https://archive.xfce.org/src/xfce/$pkgname/4.16/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --sysconfdir=/etc + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/thunar/PKGBUILD b/x86_64/xfce/thunar/PKGBUILD new file mode 100644 index 0000000..a51fc5f --- /dev/null +++ b/x86_64/xfce/thunar/PKGBUILD @@ -0,0 +1,32 @@ +pkgname=thunar +pkgver=4.17.8 +xver=4.17 +pkgrel=4 +arch=('x86_64') +depends=(exo hicolor-icon-theme libgudev thunar-volman xfce4-panel gvfs pcre libexif) +source=(https://archive.xfce.org/src/xfce/$pkgname/$xver/$pkgname-$pkgver.tar.bz2) + +prepare() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --libexecdir=/usr/lib/xfce4 \ + --enable-gudev \ + --enable-pcre \ + --enable-notifications + +} + +build() { + cd $pkgname-$pkgver + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/tumbler/PKGBUILD b/x86_64/xfce/tumbler/PKGBUILD new file mode 100644 index 0000000..8d182b6 --- /dev/null +++ b/x86_64/xfce/tumbler/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=tumbler +pkgver=4.17.0 +xver=4.16 +pkgrel=1 +arch=('x86_64') +depends=(glibc) +source=(https://archive.xfce.org/src/xfce/$pkgname/$xver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/xfce4-appfinder/PKGBUILD b/x86_64/xfce/xfce4-appfinder/PKGBUILD new file mode 100644 index 0000000..9764e88 --- /dev/null +++ b/x86_64/xfce/xfce4-appfinder/PKGBUILD @@ -0,0 +1,22 @@ +pkgname=xfce4-appfinder +pkgver=4.17.0 +xver=4.17 +pkgrel=1 +arch=('x86_64') +depends=(garcon) +source=(https://archive.xfce.org/src/xfce/$pkgname/$xver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/xfce4-dev-tools/PKGBUILD b/x86_64/xfce/xfce4-dev-tools/PKGBUILD new file mode 100644 index 0000000..d815c01 --- /dev/null +++ b/x86_64/xfce/xfce4-dev-tools/PKGBUILD @@ -0,0 +1,25 @@ +pkgname=xfce4-dev-tools +pkgver=4.17.0 +xver=4.17 +pkgrel=1 +arch=('x86_64') +depends=(glib2 intltool gtk-doc) +source=(https://archive.xfce.org/src/xfce/$pkgname/$xver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --libexecdir=/usr/lib \ + --localstatedir=/var + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/xfce4-notifyd/PKGBUILD b/x86_64/xfce/xfce4-notifyd/PKGBUILD new file mode 100644 index 0000000..7dd2c54 --- /dev/null +++ b/x86_64/xfce/xfce4-notifyd/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=xfce4-notifyd +pkgver=0.6.2 +pkgrel=1 +arch=('x86_64') +depends=(xfce4-panel libnotify libxfce4ui) +source=(https://archive.xfce.org/src/apps/$pkgname/0.6/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/xfce4-panel/PKGBUILD b/x86_64/xfce/xfce4-panel/PKGBUILD new file mode 100644 index 0000000..2185805 --- /dev/null +++ b/x86_64/xfce/xfce4-panel/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=xfce4-panel +pkgver=4.17.0 +pkgrel=1 +arch=('x86_64') +depends=(libxfce4ui gtk+ gsettings-desktop-schemas) +source=(https://archive.xfce.org/src/xfce/$pkgname/4.17/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --sysconfdir=/etc + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/xfce4-power-manager/80-xfce-power.rules b/x86_64/xfce/xfce4-power-manager/80-xfce-power.rules new file mode 100644 index 0000000..5b24d57 --- /dev/null +++ b/x86_64/xfce/xfce4-power-manager/80-xfce-power.rules @@ -0,0 +1,12 @@ +polkit.addRule(function(action, subject) { + if ( + action.id == "org.xfce.PowerManager" || + action.id == "org.freedesktop.PowerManagement" || + action.id == "org.freedesktop.login1.power-off" || + action.id == "org.freedesktop.login1.reboot" || + action.id == "org.freedesktop.login1.hibernate" || + action.id == "org.freedesktop.login1.suspend" || + action.id == "org.xfce.power.xfce4-pm-helper") { + return polkit.Result.YES; + } +}); diff --git a/x86_64/xfce/xfce4-power-manager/PKGBUILD b/x86_64/xfce/xfce4-power-manager/PKGBUILD new file mode 100644 index 0000000..5d4fc06 --- /dev/null +++ b/x86_64/xfce/xfce4-power-manager/PKGBUILD @@ -0,0 +1,33 @@ +pkgname=xfce4-power-manager +pkgver=4.16.0 +pkgrel=4 +arch=('x86_64') +depends=(libnotify upower xfce4-panel) +source=(https://archive.xfce.org/src/xfce/$pkgname/4.16/$pkgname-$pkgver.tar.bz2 + 80-xfce-power.rules + org.xfce.power.policy) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --enable-xfce4panel \ + --enable-polkit + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install + + mkdir -p $pkgdir/etc/polkit-1/rules.d + chmod 755 $pkgdir/etc/polkit-1/rules.d + mkdir -p $pkgdir/usr/share/polkit-1/actions + + cp -f $srcdir/80-xfce-power.rules $pkgdir/etc/polkit-1/rules.d/80-xfce-power.rules + cp -f $srcdir/org.xfce.power.policy $pkgdir/usr/share/polkit-1/actions/org.xfce.power.policy +} diff --git a/x86_64/xfce/xfce4-power-manager/org.xfce.power.policy b/x86_64/xfce/xfce4-power-manager/org.xfce.power.policy new file mode 100644 index 0000000..5ee7b4a --- /dev/null +++ b/x86_64/xfce/xfce4-power-manager/org.xfce.power.policy @@ -0,0 +1,37 @@ + + + + + + + XFCE Power Manager + http://goodies.xfce.org/projects/applications/xfce4-power-manager + battery + + + + Modify the laptop display brightness + Authentication is required to modify the laptop display brightness + + yes + no + yes + + /usr/sbin/xfpm-power-backlight-helper + + + + + Suspend or hibernate the system + Authentication is required to place the system in suspend or hibernate mode + + auth_admin + auth_admin + yes + + /usr/sbin/xfce4-pm-helper + + + diff --git a/x86_64/xfce/xfce4-pulseaudio-plugin/PKGBUILD b/x86_64/xfce/xfce4-pulseaudio-plugin/PKGBUILD new file mode 100644 index 0000000..ae0dae5 --- /dev/null +++ b/x86_64/xfce/xfce4-pulseaudio-plugin/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=xfce4-pulseaudio-plugin +pkgver=0.4.3 +pkgrel=2 +arch=('x86_64') +depends=(dbus-glib libnotify pulseaudio xfce4-panel keybinder pavucontrol) +source=(https://archive.xfce.org/src/panel-plugins/$pkgname/0.4/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr +exit + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/xfce4-screenshooter/PKGBUILD b/x86_64/xfce/xfce4-screenshooter/PKGBUILD new file mode 100644 index 0000000..177055b --- /dev/null +++ b/x86_64/xfce/xfce4-screenshooter/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=xfce4-screenshooter +pkgver=1.9.7 +pkgrel=1 +arch=('x86_64') +depends=(libxfce4ui xfce4-panel libsoup) +source=(https://archive.xfce.org/src/apps/$pkgname/1.9/$pkgname-$pkgver.tar.bz2) +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/xfce4-session/PKGBUILD b/x86_64/xfce/xfce4-session/PKGBUILD new file mode 100644 index 0000000..32242f4 --- /dev/null +++ b/x86_64/xfce/xfce4-session/PKGBUILD @@ -0,0 +1,23 @@ +pkgname=xfce4-session +pkgver=4.16.0 +pkgrel=2 +arch=('x86_64') +depends=(libwnck libxfce4ui xfdesktop iceauth libsm xinit xfwm4 xorg-server libice) +source=(https://archive.xfce.org/src/xfce/$pkgname/4.16/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc LIBS=-lX11 + + export IN=/usr/include + make CFLAGS="-I$IN/gtk-3.0/ -I$IN/pango-1.0/ -I$IN/harfbuzz/ -I$IN/cairo/ -I$IN/gdk-pixbuf-2.0/ -I$IN/xfce4/libxfce4ui-2/ -I$IN/atk-1.0/ -I$IN/gio-unix-2.0/ -I$IN/xfce4/ -I$IN/libwnck-3.0/" +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/xfce4-session/source-system-xinitrc-scripts.patch b/x86_64/xfce/xfce4-session/source-system-xinitrc-scripts.patch new file mode 100644 index 0000000..d25f546 --- /dev/null +++ b/x86_64/xfce/xfce4-session/source-system-xinitrc-scripts.patch @@ -0,0 +1,17 @@ +diff -upr xfce4-session-4.14.0.orig/scripts/xinitrc.in.in xfce4-session-4.14.0/scripts/xinitrc.in.in +--- xfce4-session-4.14.0.orig/scripts/xinitrc.in.in 2019-08-11 23:11:06.000000000 +0300 ++++ xfce4-session-4.14.0/scripts/xinitrc.in.in 2019-08-12 03:28:44.464707715 +0300 +@@ -83,6 +83,13 @@ if command -v systemctl >/dev/null 2>&1 + dbus-update-activation-environment --systemd XAUTHLOCALHOSTNAME=$XAUTHLOCALHOSTNAME + fi + ++# source system xinitrc scripts ++if [ -d /etc/X11/xinit/xinitrc.d ]; then ++ for f in /etc/X11/xinit/xinitrc.d/?*.sh; do ++ [ -x "$f" ] && . "$f" ++ done ++ unset f ++fi + + # check if we start xfce4-session with ck-launch-session. this is only + # required for starting from a console, not a login manager diff --git a/x86_64/xfce/xfce4-settings/PKGBUILD b/x86_64/xfce/xfce4-settings/PKGBUILD new file mode 100644 index 0000000..c685924 --- /dev/null +++ b/x86_64/xfce/xfce4-settings/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=xfce4-settings +pkgver=4.16.2 +pkgrel=1 +arch=('x86_64') +depends=(exo garcon gnome-icon-theme lxde-icon-theme) +source=(https://archive.xfce.org/src/xfce/$pkgname/4.16/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure --prefix=/usr --sysconfdir=/etc + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/xfce4-terminal/PKGBUILD b/x86_64/xfce/xfce4-terminal/PKGBUILD new file mode 100644 index 0000000..851b198 --- /dev/null +++ b/x86_64/xfce/xfce4-terminal/PKGBUILD @@ -0,0 +1,21 @@ +pkgname=xfce4-terminal +pkgver=0.8.10 +pkgrel=2 +arch=('x86_64') +depends=(libxfce4ui vte gnutls) +source=(https://archive.xfce.org/src/apps/$pkgname/0.8/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/xfconf/PKGBUILD b/x86_64/xfce/xfconf/PKGBUILD new file mode 100644 index 0000000..e233a7b --- /dev/null +++ b/x86_64/xfce/xfconf/PKGBUILD @@ -0,0 +1,20 @@ +pkgname=xfconf +pkgver=4.16.0 +pkgrel=1 +arch=('x86_64') +depends=(libxfce4util) +makedepends=(vala gtk-doc) +source=(https://archive.xfce.org/src/xfce/$pkgname/4.16/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --libdir=/usr/lib +} + +package() { + cd $pkgname-$pkgver + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/xfdesktop/PKGBUILD b/x86_64/xfce/xfdesktop/PKGBUILD new file mode 100644 index 0000000..a16cd18 --- /dev/null +++ b/x86_64/xfce/xfdesktop/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=xfdesktop +pkgver=4.16.0 +xver=4.16 +pkgrel=4 +arch=('x86_64') +depends=(exo libwnck libxdamage libnotify startup-notification garcon thunar) +makedepends=(gcc) +source=(https://archive.xfce.org/src/xfce/$pkgname/$xver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --enable-thunarx \ + --disable-debug \ + LIBS=-lX11 + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +} diff --git a/x86_64/xfce/xfwm4/PKGBUILD b/x86_64/xfce/xfwm4/PKGBUILD new file mode 100644 index 0000000..38581f1 --- /dev/null +++ b/x86_64/xfce/xfwm4/PKGBUILD @@ -0,0 +1,27 @@ +pkgname=xfwm4 +pkgver=4.16.1 +xver=4.16 +pkgrel=2 +arch=('x86_64') +depends=(libwnck libxfce4ui libxinerama xfconf libxcomposite) +makedepends=(intltool) +source=(https://archive.xfce.org/src/xfce/$pkgname/$xver/$pkgname-$pkgver.tar.bz2) + +build() { + cd $pkgname-$pkgver + + ./configure \ + --prefix=/usr \ + --enable-randr \ + --enable-compositor \ + --sysconfdir=/etc \ + LIBS=-lX11 + + make +} + +package() { + cd $pkgname-$pkgver + + make DESTDIR=$pkgdir install +}